<?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>171288</bug_id>
          
          <creation_ts>2017-04-25 13:59:54 -0700</creation_ts>
          <short_desc>Remove more EFL code</short_desc>
          <delta_ts>2017-04-25 14:14:14 -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 Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>lforschler</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1301216</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-04-25 13:59:54 -0700</bug_when>
    <thetext>The EFL port is no longer in the WebKit OpenSource Project repository. Remove more code that was part of the EFL port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301218</commentid>
    <comment_count>1</comment_count>
      <attachid>308139</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-04-25 14:02:09 -0700</bug_when>
    <thetext>Created attachment 308139
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301219</commentid>
    <comment_count>2</comment_count>
      <attachid>308139</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-04-25 14:03:09 -0700</bug_when>
    <thetext>Comment on attachment 308139
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301228</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-04-25 14:14:14 -0700</bug_when>
    <thetext>Committed r215758: &lt;http://trac.webkit.org/changeset/215758&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308139</attachid>
            <date>2017-04-25 14:02:09 -0700</date>
            <delta_ts>2017-04-25 14:03:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171288-20170425140209.patch</filename>
            <type>text/plain</type>
            <size>295885</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NzU0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzllNjJjZTVkMGVhMTQ5ZmRmNTQ0ZTg0YTE2M2QxMDBm
M2Y5NjYwMC4uMmFhMTRjYzc5NzVjYzc2YmZjYWU4NThiODlhNDU3ZjVlYjY4ZmMzZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEw
NSBAQAogMjAxNy0wNC0yNSAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKKyAg
ICAgICAgUmVtb3ZlIG1vcmUgRUZMIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MTI4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBFRkwgcG9ydCBpcyBubyBsb25nZXIgaW4gdGhlIFdlYktp
dCBPcGVuU291cmNlIFByb2plY3QgcmVwb3NpdG9yeS4gUmVtb3ZlIG1vcmUgY29kZQorICAgICAg
ICB0aGF0IHdhcyBwYXJ0IG9mIHRoZSBFRkwgcG9ydC4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmg6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHA6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRKU0NsYXNzKToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Lmg6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jYWly
by9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uaDoKKyAgICAgICAgKiBJbWFnZURpZmYvZWZsL0ltYWdl
RGlmZi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvZWZsL0NNYWtlTGlzdHMu
dHh0OiBSZW1vdmVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL2VmbC9tYWluLmM6IFJlbW92ZWQu
CisgICAgICAgICogU2NyaXB0cy9idWlsZC1kdW1wcmVuZGVydHJlZToKKyAgICAgICAgKiBTY3Jp
cHRzL2J1aWxkLWpzYzoKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDoKKyAgICAgICAg
KiBTY3JpcHRzL2J1aWxkLXdlYmtpdHRlc3RydW5uZXI6CisgICAgICAgICogU2NyaXB0cy9ydW4t
bWluaWJyb3dzZXI6CisgICAgICAgICogU2NyaXB0cy91cGRhdGUtd2Via2l0LWxpYnMtamhidWls
ZDoKKyAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS13ZWJraXRlZmwtbGliczogUmVtb3ZlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisgICAgICAgIChhcmd1bWVudHNGb3JDb25m
aWd1cmF0aW9uKToKKyAgICAgICAgKGV4dHJhY3ROb25NYWNPU0hvc3RDb25maWd1cmF0aW9uKToK
KyAgICAgICAgKGV4ZWN1dGFibGVQcm9kdWN0RGlyKToKKyAgICAgICAgKGJ1aWx0RHlsaWJQYXRo
Rm9yTmFtZSk6CisgICAgICAgIChkZXRlcm1pbmVQb3J0TmFtZSk6CisgICAgICAgIChsYXVuY2hl
clBhdGgpOgorICAgICAgICAobGF1bmNoZXJOYW1lKToKKyAgICAgICAgKGdldEpoYnVpbGRQYXRo
KToKKyAgICAgICAgKHdyYXBwZXJQcmVmaXhJZk5lZWRlZCk6CisgICAgICAgIChnZW5lcmF0ZUJ1
aWxkU3lzdGVtRnJvbUNNYWtlUHJvamVjdCk6CisgICAgICAgIChidWlsZENNYWtlUHJvamVjdE9y
RXhpdCk6CisgICAgICAgIChpc0VmbCk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRwZXJsL0ZlYXR1cmVMaXN0LnBtOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2NvbmZpZy9wb3J0cy5weToKKyAgICAgICAgKERlcHJlY2F0ZWRQb3J0LnBvcnQpOgorICAgICAg
ICAoR3RrV0syUG9ydC5ydW5fd2Via2l0X3Rlc3RzX2NvbW1hbmQpOgorICAgICAgICAoRWZsV0sy
UG9ydCk6IERlbGV0ZWQuCisgICAgICAgIChFZmxXSzJQb3J0LmJ1aWxkX3dlYmtpdF9jb21tYW5k
KTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZWZsLnB5OiBSZW1v
dmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9lZmxfdW5pdHRlc3QucHk6IFJl
bW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3RvcnkucHk6CisgICAg
ICAgIChwbGF0Zm9ybV9vcHRpb25zKToKKyAgICAgICAgKFBvcnRGYWN0b3J5KToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtlOiBSZW1vdmVkLgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3Lmg6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyL1dLUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL2VmbC9XS1ZpZXdD
bGllbnRXZWJQcm9jZXNzQ2FsbGJhY2tzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDIvZWZsL1dLVmlld0NsaWVudFdlYlByb2Nlc3NDYWxsYmFja3Nf
QnVuZGxlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDIvZWZsL1dLVmlld1Njcm9sbFRvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDIvZWZsL3Njcm9sbFRvLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9lZmwvSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVV0aWxpdGllcy5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2VmbC9tYWluLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaDoKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaDoKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250ZXh0Q2xpY2spOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlO
b3RpZmljYXRpb25IYW5kbGVyQXRrLmNwcDoKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eU5v
dGlmaWNhdGlvbkhhbmRsZXI6OnNldE5vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spOgorICAg
ICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcjo6cmVtb3ZlQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvZWZsL0FjdGl2YXRlRm9udHNFZmwuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZWZsL0ZvbnRNYW5hZ2VtZW50LmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2Vm
bC9Gb250TWFuYWdlbWVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvZWZsL0luamVjdGVkQnVuZGxlRWZsLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2VmbC9UZXN0UnVubmVyRWZsLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRWZsLmNtYWtl
OiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3Lmg6
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZWZsL1Rlc3RDb250cm9s
bGVyRWZsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9tYWlu
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBlZmwvaW5zdGFsbC1kZXBlbmRlbmNpZXM6IFJlbW92
ZWQuCisgICAgICAgICogZWZsL2poYnVpbGQtb3B0aW9uYWwubW9kdWxlczogUmVtb3ZlZC4KKyAg
ICAgICAgKiBlZmwvamhidWlsZC5tb2R1bGVzOiBSZW1vdmVkLgorICAgICAgICAqIGVmbC9qaGJ1
aWxkcmM6IFJlbW92ZWQuCisgICAgICAgICogZWZsL3BhdGNoZXMvZXZhcy1maXgtYnVpbGQtd2l0
aC1naWZsaWI1LnBhdGNoOiBSZW1vdmVkLgorICAgICAgICAqIGVmbC9wYXRjaGVzL2ZvbnRjb25m
aWctQy0xMS1yZXF1aXJlcy1hLXNwYWNlLWJldHdlZW4tbGl0ZXJhbC1hbmQtaWRlbnRpZmllci5w
YXRjaDogUmVtb3ZlZC4KKyAgICAgICAgKiBlZmwvcGF0Y2hlcy9nc3QtbGliYXYucGF0Y2g6IFJl
bW92ZWQuCisgICAgICAgICogZWZsL3BhdGNoZXMvZ3N0LXBsdWdpbnMtYmFzZS1ydHAtcnRjcGJ1
ZmZlci1maXgtdHlwby1pbi1lbnVtLnBhdGNoOiBSZW1vdmVkLgorICAgICAgICAqIGVmbC9wYXRj
aGVzL2dzdC1wbHVnaW5zLWdvb2QtUmV2ZXJ0LXF0ZGVtdXgtZXhwb3NlLXN0cmVhbXMtd2l0aC1m
aXJzdC1tb29mLWZvci1mci5wYXRjaDogUmVtb3ZlZC4KKyAgICAgICAgKiBlZmwvcGF0Y2hlcy9n
c3QtcGx1Z2lucy1nb29kLXVzZS10aGUtdGZkdC1kZWNvZGUtdGltZS5wYXRjaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBlZmwvcGF0Y2hlcy9vcGVud2VicnRjLWdzdC1wbHVnaW5zLWNsYW5nLXdhcm5p
bmctZml4LnBhdGNoOiBSZW1vdmVkLgorICAgICAgICAqIGd0ay9tYW5pZmVzdC50eHQuaW46CisK
KzIwMTctMDQtMjUgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCiAgICAgICAg
IFtDb2NvYV1bV2luXSBFbmFibGUgb2YgWC1Db250ZW50LVR5cGUtT3B0aW9uczogbm9zbmlmZiBo
ZWFkZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NjQ1MgogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjM0MTI2MjA+CmRpZmYgLS1naXQgYS9Ub29s
cy9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL0NNYWtlTGlzdHMudHh0CmluZGV4IDRiMmVkYjhkZTk3
Mjc3NWFjYzZjODRjYWU4NWEwNTJlYmZhYTE0MTcuLmIzMDQ5Yjg4NDFkNGNhMDMyZDNhMGExMTAz
YzhmNzU3ODdmYTI3MDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rv
b2xzL0NNYWtlTGlzdHMudHh0CkBAIC0xLDE4ICsxLDYgQEAKIHNldF9wcm9wZXJ0eShESVJFQ1RP
UlkgLiBQUk9QRVJUWSBGT0xERVIgIlRvb2xzIikKIAotaWYgKCIke1BPUlR9IiBTVFJFUVVBTCAi
RWZsIikKLSAgICBpZiAoREVWRUxPUEVSX01PREUpCi0gICAgICBhZGRfc3ViZGlyZWN0b3J5KFdl
YktpdFRlc3RSdW5uZXIpCi0gICAgICBhZGRfc3ViZGlyZWN0b3J5KEltYWdlRGlmZikKLSAgICAg
IGlmIChFTkFCTEVfWDExX1RBUkdFVCkKLSAgICAgICAgYWRkX3N1YmRpcmVjdG9yeShEdW1wUmVu
ZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4pCi0gICAgICBlbmRpZiAoKQotICAgIGVuZGlmICgp
Ci0KLSAgICBpZiAoRU5BQkxFX01JTklCUk9XU0VSKQotICAgICAgYWRkX3N1YmRpcmVjdG9yeShN
aW5pQnJvd3Nlci9lZmwpCi0gICAgZW5kaWYgKCkKLWVsc2VpZiAoIiR7UE9SVH0iIFNUUkVRVUFM
ICJHVEsiKQoraWYgKCIke1BPUlR9IiBTVFJFUVVBTCAiR1RLIikKICAgICBpZiAoREVWRUxPUEVS
X01PREUpCiAgICAgICBhZGRfc3ViZGlyZWN0b3J5KFdlYktpdFRlc3RSdW5uZXIpCiAgICAgICBh
ZGRfc3ViZGlyZWN0b3J5KEltYWdlRGlmZikKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5oCmluZGV4IDlmNjZkZDZlZWRmNzM5ZDI2ZmQyNTM4NThlMTJk
ZDU0ZjYyZTkzYzYuLmNkODM3MDJkMWZkMmM5MzIwMzhiYzQ4NmFkMTE4ZDg1MDA1MmNlYzUgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaApAQCAt
MzUsNyArMzUsNyBAQAogI2lmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAj
ZW5kaWYKLSNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRG
T1JNKEVGTCkpCisjaWYgSEFWRShBQ0NFU1NJQklMSVRZKSAmJiBQTEFURk9STShHVEspCiAjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsuaCIKICNpbmNsdWRlIDxh
dGsvYXRrLmg+CiAjZW5kaWYKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIHZvaWQgd2lu
Tm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQsIGNvbnN0IHN0ZDo6c3RyaW5n
JiBldmVudE5hbWUpOwogI2VuZGlmCiAKLSNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpICYmIChQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkpCisjaWYgSEFWRShBQ0NFU1NJQklMSVRZKSAmJiBQ
TEFURk9STShHVEspCiAgICAgQXRrT2JqZWN0KiBjaGlsZEVsZW1lbnRCeUlkKEF0a09iamVjdCog
cGFyZW50LCBjb25zdCBjaGFyKiBpZCk7CiAjZW5kaWYKIApAQCAtOTcsNyArOTcsNyBAQCBwcml2
YXRlOgogICAgIFJldGFpblB0cjxOb3RpZmljYXRpb25IYW5kbGVyPiBtX2dsb2JhbE5vdGlmaWNh
dGlvbkhhbmRsZXI7CiAjZW5kaWYKIAotI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkgJiYgKFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSkKKyNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpICYmIFBM
QVRGT1JNKEdUSykKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXI+
IG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlcjsKICNlbmRpZgogICAgIApkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAppbmRleCAxZDc3ZDc3MTc0
YzAwYTdmM2MzMjQ3YWQyYmJiNTY3NTk3YWUzZmI3Li5hOGQ4NzRkZjE2OWM0Zjc4M2JlYTAzMDU0
MTlhYmM0NzM2MjhmYmI5IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmNwcApAQCAtMTM5Niw3ICsxMzk2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYg
cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmoKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKLSNp
ZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKKyNpZiBQTEFURk9STShHVEspCiBzdGF0
aWMgSlNWYWx1ZVJlZiBjaGFyYWN0ZXJBdE9mZnNldENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKIHsKICAgICBpbnQgb2Zmc2V0ID0gLTE7CkBAIC0xOTAzLDcgKzE5MDMsNyBA
QCBKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldEpTQ2xhc3MoKQogICAgICAg
ICB7ICJzY3JvbGxUb01ha2VWaXNpYmxlIiwgc2Nyb2xsVG9NYWtlVmlzaWJsZUNhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCiAgICAgICAgIHsgInNjcm9sbFRvR2xvYmFsUG9pbnQiLCBzY3JvbGxUb0dsb2JhbFBv
aW50Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhT
dWJGb2N1cyIsIHNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXNDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQorI2lmIFBMQVRGT1JNKEdUSykK
ICAgICAgICAgeyAiY2hhcmFjdGVyQXRPZmZzZXQiLCBjaGFyYWN0ZXJBdE9mZnNldENhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCiAgICAgICAgIHsgIndvcmRBdE9mZnNldCIsIHdvcmRBdE9mZnNldENhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCiAgICAgICAgIHsgImxpbmVBdE9mZnNldCIsIGxpbmVBdE9mZnNldENhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmgKaW5kZXggMzQ5ZTQwOTc2NmI4YjZkYTVlZTUxMDk0MjdkNWM1NzY0NjI1YjJhMC4uNzlmMGQ4
YWUyNDQ3YWM4N2E5MmYwZjIxZDY5ZWQxMjJiMWYyMjY3MiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAtNDUsNyArNDUsNyBAQCB0eXBlZGVm
IHN0cnVjdCBvYmpjX29iamVjdCogUGxhdGZvcm1VSUVsZW1lbnQ7CiAjaW5jbHVkZSA8b2xlYWNj
Lmg+CiAKIHR5cGVkZWYgQ09NUHRyPElBY2Nlc3NpYmxlPiBQbGF0Zm9ybVVJRWxlbWVudDsKLSNl
bGlmIEhBVkUoQUNDRVNTSUJJTElUWSkgJiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZM
KSkKKyNlbGlmIEhBVkUoQUNDRVNTSUJJTElUWSkgJiYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUg
IkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyQXRrLmgiCiAjaW5jbHVkZSA8YXRrL2F0
ay5oPgogdHlwZWRlZiBBdGtPYmplY3QqIFBsYXRmb3JtVUlFbGVtZW50OwpAQCAtMjM0LDcgKzIz
NCw3IEBAIHB1YmxpYzoKICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IGZpZWxkc2V0QW5jZXN0
b3JFbGVtZW50KCk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZM
KQorI2lmIFBMQVRGT1JNKEdUSykKICAgICAvLyBUZXh0LXNwZWNpZmljCiAgICAgSlNTdHJpbmdS
ZWYgY2hhcmFjdGVyQXRPZmZzZXQoaW50IG9mZnNldCk7CiAgICAgSlNTdHJpbmdSZWYgd29yZEF0
T2Zmc2V0KGludCBvZmZzZXQpOwpAQCAtMzI2LDcgKzMyNiw3IEBAIHByaXZhdGU6CiAgICAgTm90
aWZpY2F0aW9uSGFuZGxlciBtX25vdGlmaWNhdGlvbkhhbmRsZXI7CiAjZW5kaWYKIAotI2lmIEhB
VkUoQUNDRVNTSUJJTElUWSkgJiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSkKKyNp
ZiBIQVZFKEFDQ0VTU0lCSUxJVFkpICYmIFBMQVRGT1JNKEdUSykKICAgICBSZWZQdHI8QWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXI+IG1fbm90aWZpY2F0aW9uSGFuZGxlcjsKICNlbmRp
ZgogfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmgg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oCmluZGV4IDc0M2U2ODI1NTI0
ZGVmNjljNzQwODU0NjM1ZjdmMWVlMzQ3YWZhMGMuLjJjN2EyOWJjY2E4ZTA3YjhjNTE0NTdhMGU1
YjJkMTg5MTE3OGNkOGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaApAQCAt
MzQsOCArMzQsNiBAQAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlV2luLmgiCiAjZWxpZiBQTEFU
Rk9STShHVEspCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVHdGsuaCIKLSNlbGlmIFBMQVRGT1JN
KEVGTCkKLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZUVmbC5oIgogI2VuZGlmCiAKICNpbmNsdWRl
IDxzdHJpbmc+CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1
bXBTdXBwb3J0Q2Fpcm8uaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1
cHBvcnRDYWlyby5oCmluZGV4IDhjYzU5NTg5ZDM4YTQyZjFhNzU5MGE2YTkxZjMyNzc0YTBlODQx
NzYuLmRkZTEwZDU4YWQwYTZkY2EzNDQxYTk3YWQxOWUwNzJlY2UxYzU1NjAgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5oCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5oCkBAIC0z
NSw3ICszNSw3IEBACiAjaWYgUExBVEZPUk0oV0lOKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNp
bmNsdWRlIDxjYWlyby13aW4zMi5oPgotI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShF
RkwpCisjZWxpZiBQTEFURk9STShHVEspCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KICNlbmRpZgogCmRp
ZmYgLS1naXQgYS9Ub29scy9JbWFnZURpZmYvZWZsL0ltYWdlRGlmZi5jcHAgYi9Ub29scy9JbWFn
ZURpZmYvZWZsL0ltYWdlRGlmZi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1
N2I5N2I5YWU0MGZhY2Q5ZGEzODMxNzUxNmMzN2EzZTk1N2E5YWEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvSW1hZ2VEaWZmL2VmbC9JbWFnZURp
ZmYuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04g
RW1iZWRkZWQgU3lzdGVtcwotICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2luY2x1ZGUgPEVjb3JlLmg+Ci0jaW5jbHVkZSA8RWNvcmVfRXZhcy5o
PgotI2luY2x1ZGUgPEV2YXMuaD4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y21h
dGg+Ci0jaW5jbHVkZSA8Y3N0ZGlvPgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0jaW5jbHVkZSA8Z2V0
b3B0Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNp
bmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL2VmbC9VbmlxdWVQdHJFZmwuaD4KLQotZW51bSBQaXhlbENvbXBvbmVudCB7Ci0gICAg
UmVkLAotICAgIEdyZWVuLAotICAgIEJsdWUsCi0gICAgQWxwaGEKLX07Ci0KLXN0YXRpYyBFZmxV
bmlxdWVQdHI8RWNvcmVfRXZhcz4gZ0Vjb3JlRXZhczsKLXN0YXRpYyBkb3VibGUgZ1RvbGVyYW5j
ZSA9IDA7Ci0KLXN0YXRpYyB2b2lkIGFib3J0V2l0aEVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBl
cnJvck1lc3NhZ2UpOwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciogcGl4ZWxGcm9tSW1hZ2VEYXRh
KHVuc2lnbmVkIGNoYXIqIGltYWdlRGF0YSwgaW50IHJvd1N0cmlkZSwgaW50IHgsIGludCB5KQot
ewotICAgIHJldHVybiBpbWFnZURhdGEgKyAoeSAqIHJvd1N0cmlkZSkgKyAoeCA8PCAyKTsKLX0K
LQotc3RhdGljIEV2YXNfT2JqZWN0KiBkaWZmZXJlbmNlSW1hZ2VGcm9tRGlmZmVyZW5jZUJ1ZmZl
cihFdmFzKiBldmFzLCB1bnNpZ25lZCBjaGFyKiBidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdo
dCkKLXsKLSAgICBFdmFzX09iamVjdCogaW1hZ2UgPSBldmFzX29iamVjdF9pbWFnZV9maWxsZWRf
YWRkKGV2YXMpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIGFib3J0V2l0aEVycm9yTWVzc2Fn
ZSgiY291bGQgbm90IGNyZWF0ZSBkaWZmZXJlbmNlIGltYWdlIik7Ci0KLSAgICBldmFzX29iamVj
dF9pbWFnZV9zaXplX3NldChpbWFnZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgZXZhc19vYmplY3Rf
aW1hZ2VfY29sb3JzcGFjZV9zZXQoaW1hZ2UsIEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4OCk7Ci0K
LSAgICB1bnNpZ25lZCBjaGFyKiBkaWZmUGl4ZWxzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0KGltYWdlLCBFSU5BX1RSVUUpKTsKLSAgICBj
b25zdCBpbnQgcm93U3RyaWRlID0gZXZhc19vYmplY3RfaW1hZ2Vfc3RyaWRlX2dldChpbWFnZSk7
Ci0gICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0gICAgICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGRp
ZmZQaXhlbCA9IHBpeGVsRnJvbUltYWdlRGF0YShkaWZmUGl4ZWxzLCByb3dTdHJpZGUsIHgsIHkp
OwotICAgICAgICAgICAgZGlmZlBpeGVsW1JlZF0gPSBkaWZmUGl4ZWxbR3JlZW5dID0gZGlmZlBp
eGVsW0JsdWVdID0gKmJ1ZmZlcisrOwotICAgICAgICAgICAgZGlmZlBpeGVsW0FscGhhXSA9IDB4
ZmY7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3NldChp
bWFnZSwgZGlmZlBpeGVscyk7Ci0KLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBmbG9h
dCBjb21wdXRlRGlzdGFuY2VCZXR3ZWVuUGl4ZWxDb21wb25lbnRzKHVuc2lnbmVkIGNoYXIgYWN0
dWFsQ29tcG9uZW50LCB1bnNpZ25lZCBjaGFyIGJhc2VDb21wb25lbnQpCi17Ci0gICAgcmV0dXJu
IChhY3R1YWxDb21wb25lbnQgLSBiYXNlQ29tcG9uZW50KSAvIHN0ZDo6bWF4PGZsb2F0PigyNTUg
LSBiYXNlQ29tcG9uZW50LCBiYXNlQ29tcG9uZW50KTsKLX0KLQotc3RhdGljIGZsb2F0IGNvbXB1
dGVEaXN0YW5jZUJldHdlZW5QaXhlbENvbXBvbmVudHModW5zaWduZWQgY2hhciogYWN0dWFsUGl4
ZWwsIHVuc2lnbmVkIGNoYXIqIGJhc2VQaXhlbCwgUGl4ZWxDb21wb25lbnQgY29tcG9uZW50KQot
ewotICAgIHJldHVybiBjb21wdXRlRGlzdGFuY2VCZXR3ZWVuUGl4ZWxDb21wb25lbnRzKGFjdHVh
bFBpeGVsW2NvbXBvbmVudF0sIGJhc2VQaXhlbFtjb21wb25lbnRdKTsKLX0KLQotc3RhdGljIGZs
b2F0IGNhbGN1bGF0ZVBpeGVsRGlmZmVyZW5jZSh1bnNpZ25lZCBjaGFyKiBiYXNlUGl4ZWwsIHVu
c2lnbmVkIGNoYXIqIGFjdHVhbFBpeGVsKQotewotICAgIGNvbnN0IGZsb2F0IHJlZCA9IGNvbXB1
dGVEaXN0YW5jZUJldHdlZW5QaXhlbENvbXBvbmVudHMoYWN0dWFsUGl4ZWwsIGJhc2VQaXhlbCwg
UmVkKTsKLSAgICBjb25zdCBmbG9hdCBncmVlbiA9IGNvbXB1dGVEaXN0YW5jZUJldHdlZW5QaXhl
bENvbXBvbmVudHMoYWN0dWFsUGl4ZWwsIGJhc2VQaXhlbCwgR3JlZW4pOwotICAgIGNvbnN0IGZs
b2F0IGJsdWUgPSBjb21wdXRlRGlzdGFuY2VCZXR3ZWVuUGl4ZWxDb21wb25lbnRzKGFjdHVhbFBp
eGVsLCBiYXNlUGl4ZWwsIEJsdWUpOwotICAgIGNvbnN0IGZsb2F0IGFscGhhID0gY29tcHV0ZURp
c3RhbmNlQmV0d2VlblBpeGVsQ29tcG9uZW50cyhhY3R1YWxQaXhlbCwgYmFzZVBpeGVsLCBBbHBo
YSk7Ci0gICAgcmV0dXJuIHNxcnRmKHJlZCAqIHJlZCArIGdyZWVuICogZ3JlZW4gKyBibHVlICog
Ymx1ZSArIGFscGhhICogYWxwaGEpIC8gMi4wZjsKLX0KLQotc3RhdGljIGZsb2F0IGNhbGN1bGF0
ZURpZmZlcmVuY2UoRXZhc19PYmplY3QqIGJhc2VsaW5lSW1hZ2UsIEV2YXNfT2JqZWN0KiBhY3R1
YWxJbWFnZSwgRWZsVW5pcXVlUHRyPEV2YXNfT2JqZWN0PiYgZGlmZmVyZW5jZUltYWdlKQotewot
ICAgIGludCB3aWR0aCwgaGVpZ2h0LCBiYXNlbGluZVdpZHRoLCBiYXNlbGluZUhlaWdodDsKLSAg
ICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dldChhY3R1YWxJbWFnZSwgJndpZHRoLCAmaGVpZ2h0
KTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dldChiYXNlbGluZUltYWdlLCAmYmFzZWxp
bmVXaWR0aCwgJmJhc2VsaW5lSGVpZ2h0KTsKLQotICAgIGlmICh3aWR0aCAhPSBiYXNlbGluZVdp
ZHRoIHx8IGhlaWdodCAhPSBiYXNlbGluZUhlaWdodCkgewotICAgICAgICBwcmludGYoIkVycm9y
LCB0ZXN0IGFuZCByZWZlcmVuY2UgaW1hZ2UgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMuXG4iKTsKLSAg
ICAgICAgcmV0dXJuIDEwMDsgLy8gQ29tcGxldGVseSBkaWZmZXJlbnQuCi0gICAgfQotCi0gICAg
YXV0byBkaWZmQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25lZCBjaGFyW10+KHdpZHRo
ICogaGVpZ2h0KTsKLSAgICBpZiAoIWRpZmZCdWZmZXIpCi0gICAgICAgIGFib3J0V2l0aEVycm9y
TWVzc2FnZSgiY291bGQgbm90IGNyZWF0ZSBkaWZmZXJlbmNlIGJ1ZmZlciIpOwotCi0gICAgY29u
c3QgaW50IGFjdHVhbFJvd1N0cmlkZSA9IGV2YXNfb2JqZWN0X2ltYWdlX3N0cmlkZV9nZXQoYWN0
dWFsSW1hZ2UpOwotICAgIGNvbnN0IGludCBiYXNlUm93U3RyaWRlID0gZXZhc19vYmplY3RfaW1h
Z2Vfc3RyaWRlX2dldChiYXNlbGluZUltYWdlKTsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkRpZmZl
cmVudFBpeGVscyA9IDA7Ci0gICAgZmxvYXQgdG90YWxEaXN0YW5jZSA9IDA7Ci0gICAgZmxvYXQg
bWF4RGlzdGFuY2UgPSAwOwotICAgIHVuc2lnbmVkIGNoYXIqIGFjdHVhbFBpeGVscyA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihldmFzX29iamVjdF9pbWFnZV9kYXRhX2dldChhY3R1YWxJ
bWFnZSwgRUlOQV9GQUxTRSkpOwotICAgIHVuc2lnbmVkIGNoYXIqIGJhc2VQaXhlbHMgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQoYmFzZWxp
bmVJbWFnZSwgRUlOQV9GQUxTRSkpOwotICAgIHVuc2lnbmVkIGNoYXIqIGN1cnJlbnREaWZmUGl4
ZWwgPSBkaWZmQnVmZmVyLmdldCgpOwotCi0gICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKSB7Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIqIGFjdHVhbFBpeGVsID0gcGl4ZWxGcm9tSW1hZ2VEYXRhKGFj
dHVhbFBpeGVscywgYWN0dWFsUm93U3RyaWRlLCB4LCB5KTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIqIGJhc2VQaXhlbCA9IHBpeGVsRnJvbUltYWdlRGF0YShiYXNlUGl4ZWxzLCBiYXNlUm93
U3RyaWRlLCB4LCB5KTsKLQotICAgICAgICAgICAgY29uc3QgZmxvYXQgZGlzdGFuY2UgPSBjYWxj
dWxhdGVQaXhlbERpZmZlcmVuY2UoYmFzZVBpeGVsLCBhY3R1YWxQaXhlbCk7Ci0gICAgICAgICAg
ICAqY3VycmVudERpZmZQaXhlbCsrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oZGlzdGFu
Y2UgKiAyNTUuMGYpOwotCi0gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPj0gMS4wZiAvIDI1NS4w
ZikgewotICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZEaWZmZXJlbnRQaXhlbHM7Ci0gICAgICAg
ICAgICAgICAgdG90YWxEaXN0YW5jZSArPSBkaXN0YW5jZTsKLSAgICAgICAgICAgICAgICBtYXhE
aXN0YW5jZSA9IHN0ZDo6bWF4PGZsb2F0PihtYXhEaXN0YW5jZSwgZGlzdGFuY2UpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gV2hlbiB1c2luZyBldmFzX29iamVj
dF9pbWFnZV9kYXRhX2dldCgpLCBhIGNvbXBsZW1lbnRhcnkgZXZhc19vYmplY3RfZGF0YV9zZXQo
KSBtdXN0IGJlCi0gICAgLy8gaXNzdWVkIHRvIGJhbGFuY2UgdGhlIHJlZmVyZW5jZSBjb3VudCwg
ZXZlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gY2hhbmdlZC4KLSAgICBldmFzX29iamVjdF9p
bWFnZV9kYXRhX3NldChiYXNlbGluZUltYWdlLCBiYXNlUGl4ZWxzKTsKLSAgICBldmFzX29iamVj
dF9pbWFnZV9kYXRhX3NldChhY3R1YWxJbWFnZSwgYWN0dWFsUGl4ZWxzKTsKLQotICAgIC8vIENv
bXB1dGUgdGhlIGRpZmZlcmVuY2UgYXMgYSBwZXJjZW50YWdlIGNvbWJpbmluZyBib3RoIHRoZSBu
dW1iZXIgb2YKLSAgICAvLyBkaWZmZXJlbnQgcGl4ZWxzIGFuZCB0aGVpciBkaWZmZXJlbmNlIGFt
b3VudCBpLmUuIHRoZSBhdmVyYWdlIGRpc3RhbmNlCi0gICAgLy8gb3ZlciB0aGUgZW50aXJlIGlt
YWdlCi0gICAgZmxvYXQgZGlmZmVyZW5jZSA9IDA7Ci0gICAgaWYgKG51bWJlck9mRGlmZmVyZW50
UGl4ZWxzKQotICAgICAgICBkaWZmZXJlbmNlID0gMTAwLjBmICogdG90YWxEaXN0YW5jZSAvICho
ZWlnaHQgKiB3aWR0aCk7Ci0gICAgaWYgKGRpZmZlcmVuY2UgPD0gZ1RvbGVyYW5jZSkKLSAgICAg
ICAgZGlmZmVyZW5jZSA9IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGRpZmZlcmVuY2UgPSByb3Vu
ZGYoZGlmZmVyZW5jZSAqIDEwMC4wZikgLyAxMDAuMGY7Ci0gICAgICAgIGRpZmZlcmVuY2UgPSBz
dGQ6Om1heChkaWZmZXJlbmNlLCAwLjAxZik7IC8vIHJvdW5kIHRvIDIgZGVjaW1hbCBwbGFjZXMK
LQotICAgICAgICBkaWZmZXJlbmNlSW1hZ2UgPSBFZmxVbmlxdWVQdHI8RXZhc19PYmplY3Q+KGRp
ZmZlcmVuY2VJbWFnZUZyb21EaWZmZXJlbmNlQnVmZmVyKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGJh
c2VsaW5lSW1hZ2UpLCBkaWZmQnVmZmVyLmdldCgpLCB3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGRpZmZlcmVuY2U7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0VGVtcG9yYXJ5Rmls
ZShjaGFyICpmaWxlTmFtZSwgc2l6ZV90IGZpbGVOYW1lTGVuZ3RoKQotewotICAgIGNoYXIqIHRl
bXBEaXJlY3RvcnkgPSBnZXRlbnYoIlRNUERJUiIpOwotICAgIGlmICghdGVtcERpcmVjdG9yeSkK
LSAgICAgICAgdGVtcERpcmVjdG9yeSA9IGdldGVudigiVEVNUCIpOwotCi0gICAgaWYgKHRlbXBE
aXJlY3RvcnkpCi0gICAgICAgIHNucHJpbnRmKGZpbGVOYW1lLCBmaWxlTmFtZUxlbmd0aCwgIiVz
L0ltYWdlRGlmZlhYWFhYWC5wbmciLCB0ZW1wRGlyZWN0b3J5KTsKLSAgICBlbHNlIHsKLSNpZiBf
X2xpbnV4X18KLSAgICAgICAgc3RyY3B5KGZpbGVOYW1lLCAiL2Rldi9zaG0vSW1hZ2VEaWZmWFhY
WFhYLnBuZyIpOwotICAgICAgICBjb25zdCBpbnQgZmlsZURlc2NyaXB0b3IgPSBta3N0ZW1wcyhm
aWxlTmFtZSwgc2l6ZW9mKCIucG5nIikgLSAxKTsKLSAgICAgICAgaWYgKGZpbGVEZXNjcmlwdG9y
ID49IDApCi0gICAgICAgICAgICByZXR1cm4gZmlsZURlc2NyaXB0b3I7Ci0jZW5kaWYgLy8gX19s
aW51eF9fCi0KLSAgICAgICAgc3RyY3B5KGZpbGVOYW1lLCAiSW1hZ2VEaWZmWFhYWFhYLnBuZyIp
OwotICAgIH0KLQotICAgIHJldHVybiBta3N0ZW1wcyhmaWxlTmFtZSwgc2l6ZW9mKCIucG5nIikg
LSAxKTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRJbWFnZShFdmFzX09iamVjdCogaW1hZ2UpCi17
Ci0gICAgY2hhciBmaWxlTmFtZVtQQVRIX01BWF07Ci0KLSAgICBjb25zdCBpbnQgdGVtcEltYWdl
RmQgPSBnZXRUZW1wb3JhcnlGaWxlKGZpbGVOYW1lLCBQQVRIX01BWCk7Ci0gICAgaWYgKHRlbXBJ
bWFnZUZkID09IC0xKQotICAgICAgICBhYm9ydFdpdGhFcnJvck1lc3NhZ2UoImNvdWxkIG5vdCBj
cmVhdGUgdGVtcG9yYXJ5IGZpbGUiKTsKLQotICAgIGV2YXNfcmVuZGVyKGV2YXNfb2JqZWN0X2V2
YXNfZ2V0KGltYWdlKSk7Ci0KLSAgICBpZiAoZXZhc19vYmplY3RfaW1hZ2Vfc2F2ZShpbWFnZSwg
ZmlsZU5hbWUsIDAsIDApKSB7Ci0gICAgICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOwotICAgICAg
ICBpZiAoIXN0YXQoZmlsZU5hbWUsICZmaWxlSW5mbykpIHsKLSAgICAgICAgICAgIHByaW50Zigi
Q29udGVudC1MZW5ndGg6ICVsZFxuIiwgZmlsZUluZm8uc3Rfc2l6ZSk7Ci0gICAgICAgICAgICBm
Zmx1c2goc3Rkb3V0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBidWZmZXJbMjA0OF07
Ci0gICAgICAgICAgICBzc2l6ZV90IGJ5dGVzUmVhZDsKLSAgICAgICAgICAgIHdoaWxlICgoYnl0
ZXNSZWFkID0gcmVhZCh0ZW1wSW1hZ2VGZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpID4gMCkg
ewotICAgICAgICAgICAgICAgIHNzaXplX3QgYnl0ZXNXcml0dGVuID0gMDsKLSAgICAgICAgICAg
ICAgICBzc2l6ZV90IGNvdW50OwotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKChjb3VudCA9IHdyaXRlKDEsIGJ1ZmZlciArIGJ5dGVzV3JpdHRlbiwgYnl0ZXNS
ZWFkIC0gYnl0ZXNXcml0dGVuKSkgPD0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBieXRlc1dyaXR0ZW4gKz0gY291bnQ7Ci0gICAgICAgICAg
ICAgICAgfSB3aGlsZSAoYnl0ZXNXcml0dGVuIDwgYnl0ZXNSZWFkKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICBjbG9zZSh0ZW1wSW1hZ2VGZCk7Ci0gICAgdW5saW5rKGZp
bGVOYW1lKTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRJbWFnZURpZmZlcmVuY2VzKEV2YXNfT2Jq
ZWN0KiBiYXNlbGluZUltYWdlLCBFdmFzX09iamVjdCogYWN0dWFsSW1hZ2UpCi17Ci0gICAgRWZs
VW5pcXVlUHRyPEV2YXNfT2JqZWN0PiBkaWZmZXJlbmNlSW1hZ2U7Ci0gICAgY29uc3QgZmxvYXQg
ZGlmZmVyZW5jZSA9IGNhbGN1bGF0ZURpZmZlcmVuY2UoYmFzZWxpbmVJbWFnZSwgYWN0dWFsSW1h
Z2UsIGRpZmZlcmVuY2VJbWFnZSk7Ci0KLSAgICBpZiAoZGlmZmVyZW5jZSA+IDAuMGYpIHsKLSAg
ICAgICAgaWYgKGRpZmZlcmVuY2VJbWFnZSkKLSAgICAgICAgICAgIHByaW50SW1hZ2UoZGlmZmVy
ZW5jZUltYWdlLmdldCgpKTsKLQotICAgICAgICBwcmludGYoImRpZmY6ICUwMS4yZiUlIGZhaWxl
ZFxuIiwgZGlmZmVyZW5jZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHByaW50ZigiZGlmZjogJTAx
LjJmJSUgcGFzc2VkXG4iLCBkaWZmZXJlbmNlKTsKLX0KLQotc3RhdGljIHZvaWQgcmVzaXplRWNv
cmVFdmFzSWZOZWVkZWQoRXZhc19PYmplY3QqIGltYWdlKQotewotICAgIGludCBuZXdXaWR0aCwg
bmV3SGVpZ2h0OwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KGltYWdlLCAmbmV3V2lk
dGgsICZuZXdIZWlnaHQpOwotCi0gICAgaW50IGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodDsK
LSAgICBlY29yZV9ldmFzX3NjcmVlbl9nZW9tZXRyeV9nZXQoZ0Vjb3JlRXZhcy5nZXQoKSwgMCwg
MCwgJmN1cnJlbnRXaWR0aCwgJmN1cnJlbnRIZWlnaHQpOwotCi0gICAgaWYgKG5ld1dpZHRoID4g
Y3VycmVudFdpZHRoKQotICAgICAgICBjdXJyZW50V2lkdGggPSBuZXdXaWR0aDsKLSAgICBpZiAo
bmV3SGVpZ2h0ID4gY3VycmVudEhlaWdodCkKLSAgICAgICAgY3VycmVudEhlaWdodCA9IG5ld0hl
aWdodDsKLQotICAgIGVjb3JlX2V2YXNfcmVzaXplKGdFY29yZUV2YXMuZ2V0KCksIGN1cnJlbnRX
aWR0aCwgY3VycmVudEhlaWdodCk7Ci19Ci0KLXN0YXRpYyBFZmxVbmlxdWVQdHI8RXZhc19PYmpl
Y3Q+IHJlYWRJbWFnZUZyb21TdGRpbihFdmFzKiBldmFzLCBsb25nIGltYWdlU2l6ZSkKLXsKLSAg
ICBhdXRvIGltYWdlQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25lZCBjaGFyW10+KGlt
YWdlU2l6ZSk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlcikKLSAgICAgICAgYWJvcnRXaXRoRXJyb3JN
ZXNzYWdlKCJjYW5ub3QgYWxsb2NhdGUgaW1hZ2UiKTsKLQotICAgIGNvbnN0IHNpemVfdCBieXRl
c1JlYWQgPSBmcmVhZChpbWFnZUJ1ZmZlci5nZXQoKSwgMSwgaW1hZ2VTaXplLCBzdGRpbik7Ci0g
ICAgaWYgKCFieXRlc1JlYWQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRXZhc19P
YmplY3QqIGltYWdlID0gZXZhc19vYmplY3RfaW1hZ2VfZmlsbGVkX2FkZChldmFzKTsKLSAgICBl
dmFzX29iamVjdF9pbWFnZV9jb2xvcnNwYWNlX3NldChpbWFnZSwgRVZBU19DT0xPUlNQQUNFX0FS
R0I4ODg4KTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9tZW1maWxlX3NldChpbWFnZSwgaW1hZ2VC
dWZmZXIuZ2V0KCksIGJ5dGVzUmVhZCwgMCwgMCk7Ci0KLSAgICByZXNpemVFY29yZUV2YXNJZk5l
ZWRlZChpbWFnZSk7Ci0KLSAgICByZXR1cm4gRWZsVW5pcXVlUHRyPEV2YXNfT2JqZWN0PihpbWFn
ZSk7Ci19Ci0KLXN0YXRpYyBib29sIHBhcnNlQ29tbWFuZExpbmVPcHRpb25zKGludCBhcmdjLCBj
aGFyKiogYXJndikKLXsKLSAgICBzdGF0aWMgY29uc3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKLSAg
ICAgICAgeyAidG9sZXJhbmNlIiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsICd0JyB9LAotICAgICAg
ICB7IDAsIDAsIDAsIDAgfQotICAgIH07Ci0gICAgaW50IG9wdGlvbjsKLQotICAgIHdoaWxlICgo
b3B0aW9uID0gZ2V0b3B0X2xvbmcoYXJnYywgKGNoYXIqIGNvbnN0Kilhcmd2LCAidDoiLCBvcHRp
b25zLCAwKSkgIT0gLTEpIHsKLSAgICAgICAgc3dpdGNoIChvcHRpb24pIHsKLSAgICAgICAgY2Fz
ZSAndCc6Ci0gICAgICAgICAgICBnVG9sZXJhbmNlID0gYXRvZihvcHRhcmcpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJz8nOgotICAgICAgICBjYXNlICc6JzoKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1zdGF0aWMgdm9pZCBzaHV0ZG93bkVmbCgpCi17Ci0gICAgZWNvcmVfZXZhc19zaHV0ZG93
bigpOwotICAgIGVjb3JlX3NodXRkb3duKCk7Ci0gICAgZXZhc19zaHV0ZG93bigpOwotfQotCi1z
dGF0aWMgdm9pZCBhYm9ydFdpdGhFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogZXJyb3JNZXNzYWdl
KQotewotICAgIHNodXRkb3duRWZsKCk7Ci0KLSAgICBwcmludGYoIkVycm9yLCAlcy5cbiIsIGVy
cm9yTWVzc2FnZSk7Ci0gICAgZXhpdChFWElUX0ZBSUxVUkUpOwotfQotCi1zdGF0aWMgRXZhcyog
aW5pdEVmbCgpCi17Ci0gICAgZXZhc19pbml0KCk7Ci0gICAgZWNvcmVfaW5pdCgpOwotICAgIGVj
b3JlX2V2YXNfaW5pdCgpOwotCi0gICAgZ0Vjb3JlRXZhcyA9IEVmbFVuaXF1ZVB0cjxFY29yZV9F
dmFzPihlY29yZV9ldmFzX2J1ZmZlcl9uZXcoMSwgMSkpOwotICAgIEV2YXMqIGV2YXMgPSBlY29y
ZV9ldmFzX2dldChnRWNvcmVFdmFzLmdldCgpKTsKLSAgICBpZiAoIWV2YXMpCi0gICAgICAgIGFi
b3J0V2l0aEVycm9yTWVzc2FnZSgiY291bGQgbm90IGNyZWF0ZSBFY29yZV9FdmFzIGJ1ZmZlciIp
OwotCi0gICAgcmV0dXJuIGV2YXM7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2
W10pCi17Ci0gICAgaWYgKCFwYXJzZUNvbW1hbmRMaW5lT3B0aW9ucyhhcmdjLCBhcmd2KSkKLSAg
ICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLQotICAgIEV2YXMqIGV2YXMgPSBpbml0RWZsKCk7
Ci0KLSAgICBFZmxVbmlxdWVQdHI8RXZhc19PYmplY3Q+IGFjdHVhbEltYWdlOwotICAgIEVmbFVu
aXF1ZVB0cjxFdmFzX09iamVjdD4gYmFzZWxpbmVJbWFnZTsKLQotICAgIGNoYXIgYnVmZmVyWzIw
NDhdOwotICAgIHdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbikpIHsK
LSAgICAgICAgY2hhciogY29udGVudExlbmd0aFN0YXJ0ID0gc3Ryc3RyKGJ1ZmZlciwgIkNvbnRl
bnQtTGVuZ3RoOiAiKTsKLSAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoU3RhcnQpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgbG9uZyBpbWFnZVNpemU7Ci0gICAgICAgIGlmIChzc2Nh
bmYoY29udGVudExlbmd0aFN0YXJ0LCAiQ29udGVudC1MZW5ndGg6ICVsZCIsICZpbWFnZVNpemUp
ID09IDEpIHsKLSAgICAgICAgICAgIGlmIChpbWFnZVNpemUgPD0gMCkKLSAgICAgICAgICAgICAg
ICBhYm9ydFdpdGhFcnJvck1lc3NhZ2UoImltYWdlIHNpemUgbXVzdCBiZSBzcGVjaWZpZWQiKTsK
LQotICAgICAgICAgICAgaWYgKCFhY3R1YWxJbWFnZSkKLSAgICAgICAgICAgICAgICBhY3R1YWxJ
bWFnZSA9IHJlYWRJbWFnZUZyb21TdGRpbihldmFzLCBpbWFnZVNpemUpOwotICAgICAgICAgICAg
ZWxzZSBpZiAoIWJhc2VsaW5lSW1hZ2UpIHsKLSAgICAgICAgICAgICAgICBiYXNlbGluZUltYWdl
ID0gcmVhZEltYWdlRnJvbVN0ZGluKGV2YXMsIGltYWdlU2l6ZSk7Ci0KLSAgICAgICAgICAgICAg
ICBwcmludEltYWdlRGlmZmVyZW5jZXMoYmFzZWxpbmVJbWFnZS5nZXQoKSwgYWN0dWFsSW1hZ2Uu
Z2V0KCkpOwotCi0gICAgICAgICAgICAgICAgYWN0dWFsSW1hZ2UucmVzZXQoKTsKLSAgICAgICAg
ICAgICAgICBiYXNlbGluZUltYWdlLnJlc2V0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICB9Ci0KLSAgICBnRWNvcmVFdmFzID0gbnVs
bHB0cjsgLy8gTWFrZSBzdXJlIGVjb3JlX2V2YXNfZnJlZSBpcyBjYWxsZWQgYmVmb3JlIHRoZSBF
RkwgYXJlIHNodXQgZG93bgotCi0gICAgc2h1dGRvd25FZmwoKTsKLSAgICByZXR1cm4gRVhJVF9T
VUNDRVNTOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL0NNYWtlTGlzdHMu
dHh0IGIvVG9vbHMvTWluaUJyb3dzZXIvZWZsL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4MmQ3MmM3MWFjNTliZTc3M2FkMWJhYjdhYTE3NDg0ZTA4YmNhNDgz
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01p
bmlCcm93c2VyL2VmbC9DTWFrZUxpc3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAg
QEAKLXNldChNaW5pQnJvd3Nlcl9ESVIgIiR7VE9PTFNfRElSfS9NaW5pQnJvd3Nlci9lZmwiKQot
Ci0jIEVsZW1lbnRhcnkgaXMgbmVlZGVkIHRvIGJ1aWxkIE1pbmlCcm93c2VyCi1maW5kX3BhY2th
Z2UoRWxkYnVzICR7RUZMX1JFUVVJUkVEX1ZFUlNJT059ICR7RUZMX0NPTkZJR19NT0RFfSkKLWZp
bmRfcGFja2FnZShFbGVtZW50YXJ5ICR7RUZMX1JFUVVJUkVEX1ZFUlNJT059ICR7RUZMX0NPTkZJ
R19NT0RFfSkKLWZpbmRfcGFja2FnZShFdGh1bWIgJHtFRkxfUkVRVUlSRURfVkVSU0lPTn0gJHtF
RkxfQ09ORklHX01PREV9KQotZmluZF9wYWNrYWdlKEV0aHVtYkNsaWVudCAke0VGTF9SRVFVSVJF
RF9WRVJTSU9OfSAke0VGTF9DT05GSUdfTU9ERX0pCi0KLXNldChNaW5pQnJvd3Nlcl9TT1VSQ0VT
Ci0gICAgJHtNaW5pQnJvd3Nlcl9ESVJ9L21haW4uYwotKQotCi1zZXQoTWluaUJyb3dzZXJfSU5D
TFVERV9ESVJFQ1RPUklFUwotICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVDJfRElSfS9pbmNs
dWRlCi0gICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwKLSAgICAke1dFQktJVDJf
RElSfQotICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlCi0pCi0KLXNldChNaW5pQnJvd3Nl
cl9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICR7Q0FJUk9fSU5DTFVERV9ESVJTfQot
ICAgICR7RUNPUkVfSU5DTFVERV9ESVJTfQotICAgICR7RUNPUkVfRVZBU19JTkNMVURFX0RJUlN9
Ci0gICAgJHtFQ09SRV9DT05fSU5DTFVERV9ESVJTfQotICAgICR7RUNPUkVfRklMRV9JTkNMVURF
X0RJUlN9Ci0gICAgJHtFQ09SRV9JTUZfSU5DTFVERV9ESVJTfQotICAgICR7RUNPUkVfSU5QVVRf
SU5DTFVERV9ESVJTfQotICAgICR7RURKRV9JTkNMVURFX0RJUlN9Ci0gICAgJHtFRVRfSU5DTFVE
RV9ESVJTfQotICAgICR7RU9fSU5DTFVERV9ESVJTfQotICAgICR7REJVU19JTkNMVURFX0RJUlN9
Ci0gICAgJHtFRlJFRVRfSU5DTFVERV9ESVJTfQotICAgICR7RUlOQV9JTkNMVURFX0RJUlN9Ci0g
ICAgJHtFTERCVVNfSU5DTFVERV9ESVJTfQotICAgICR7RUxFTUVOVEFSWV9JTkNMVURFX0RJUlN9
Ci0gICAgJHtFVEhVTUJfSU5DTFVERV9ESVJTfQotICAgICR7RVRIVU1CX0NMSUVOVF9JTkNMVURF
X0RJUlN9Ci0gICAgJHtFVkFTX0lOQ0xVREVfRElSU30KLSkKLQotc2V0KE1pbmlCcm93c2VyX0xJ
QlJBUklFUwotICAgIEphdmFTY3JpcHRDb3JlCi0gICAgV2ViQ29yZQotICAgIFdlYktpdDIKLSAg
ICAke0NBSVJPX0xJQlJBUklFU30KLSAgICAke0VDT1JFX0xJQlJBUklFU30KLSAgICAke0VDT1JF
X0VWQVNfTElCUkFSSUVTfQotICAgICR7RUNPUkVfRklMRV9MSUJSQVJJRVN9Ci0gICAgJHtFREpF
X0xJQlJBUklFU30KLSAgICAke0VFVF9MSUJSQVJJRVN9Ci0gICAgJHtFSU5BX0xJQlJBUklFU30K
LSAgICAke0VMRU1FTlRBUllfTElCUkFSSUVTfQotICAgICR7RU9fTElCUkFSSUVTfQotICAgICR7
RVZBU19MSUJSQVJJRVN9Ci0gICAgJHtGT05UQ09ORklHX0xJQlJBUklFU30KLSAgICAke0dMSUJf
TElCUkFSSUVTfQotICAgICR7R0xJQl9HVEhSRUFEX0xJQlJBUklFU30KLSAgICAke0xJQlNPVVBf
TElCUkFSSUVTfQotICAgICR7TElCWE1MMl9MSUJSQVJJRVN9Ci0gICAgJHtMSUJYU0xUX0xJQlJB
UklFU30gLWxtCi0gICAgJHtPUEVOR0xfTElCUkFSSUVTfQotICAgICR7U1FMSVRFX0xJQlJBUklF
U30KLSkKLQotaWYgKEVMRU1FTlRBUllfRk9VTkQpCi0gICAgaW5jbHVkZV9kaXJlY3Rvcmllcygk
e01pbmlCcm93c2VyX0lOQ0xVREVfRElSRUNUT1JJRVN9KQotICAgIGluY2x1ZGVfZGlyZWN0b3Jp
ZXMoU1lTVEVNICR7TWluaUJyb3dzZXJfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9KQotICAg
IGFkZF9leGVjdXRhYmxlKE1pbmlCcm93c2VyICR7TWluaUJyb3dzZXJfU09VUkNFU30pCi0gICAg
dGFyZ2V0X2xpbmtfbGlicmFyaWVzKE1pbmlCcm93c2VyICR7TWluaUJyb3dzZXJfTElCUkFSSUVT
fSkKLWVuZGlmICgpCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jIGIv
VG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTM4MjVlZTMxZWRmNDEwYzk3NWFjZjEwN2IxNzE4OTA1OTY2NzcyZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9lZmwv
bWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjUzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRl
bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQotICovCi0KLSNpbmNsdWRlICJFV2ViS2l0Mi5oIgotI2luY2x1ZGUgPEVjb3JlLmg+Ci0j
aW5jbHVkZSA8RWNvcmVfRXZhcy5oPgotI2luY2x1ZGUgPEVjb3JlX0dldG9wdC5oPgotI2luY2x1
ZGUgPEVldC5oPgotI2luY2x1ZGUgPEVpbmEuaD4KLSNpbmNsdWRlIDxFbGVtZW50YXJ5Lmg+Ci0j
aW5jbHVkZSA8RXZhcy5oPgotCi1leHRlcm4gaW50IGVmcmVldF9jYWNoZV91cGRhdGU7Ci0KLXN0
YXRpYyBjb25zdCBjaGFyIERFRkFVTFRfVVJMW10gPSAiaHR0cDovL3d3dy5ld2Via2l0Lm9yZy8i
Owotc3RhdGljIGNvbnN0IGNoYXIgQVBQX05BTUVbXSA9ICJFRkwgTWluaUJyb3dzZXIiOwotc3Rh
dGljIGNvbnN0IGNoYXIgSkFWQVNDUklQVF9TQ0hFTUVbXSA9ICJqYXZhc2NyaXB0OiI7Ci1zdGF0
aWMgY29uc3QgY2hhciBGSUxFX1NDSEVNRVtdID0gImZpbGU6Ly8iOwotc3RhdGljIGNvbnN0IGNo
YXIgSFRUUF9TQ0hFTUVbXSA9ICJodHRwOi8vIjsKLXN0YXRpYyBjb25zdCBpbnQgVE9PTF9CQVJf
SUNPTl9TSVpFID0gMjQ7Ci1zdGF0aWMgY29uc3QgaW50IFRPT0xfQkFSX0JVVFRPTl9TSVpFID0g
MzI7Ci1zdGF0aWMgY29uc3QgaW50IFNFQVJDSF9GSUVMRF9TSVpFID0gMjAwOwotc3RhdGljIGNv
bnN0IGludCBTRUFSQ0hfQlVUVE9OX1NJWkUgPSAzMDsKLXN0YXRpYyBjb25zdCBpbnQgTUFYX1NF
QVJDSF9DT1VOVCA9IDEwMDA7Ci1zdGF0aWMgY29uc3QgZG91YmxlIFRPT0xUSVBfREVMQVlfU0VD
T05EUyA9IDEuMDsKLXN0YXRpYyBjb25zdCBkb3VibGUgTE9OR1BSRVNTX0lOVEVSVkFMX1NFQ09O
RFMgPSAxLjU7Ci1zdGF0aWMgY29uc3QgZG91YmxlIExJU1RfSVRFTV9IRUlHSFQgPSAyNC4zNTsK
LQotc3RhdGljIEVpbmFfTGlzdCAqd2luZG93cyA9IE5VTEw7Ci1zdGF0aWMgY2hhciAqZXZhc19l
bmdpbmVfbmFtZSA9IE5VTEw7Ci1zdGF0aWMgY2hhciAqdXNlcl9hZ2VudF9zdHJpbmcgPSBOVUxM
Owotc3RhdGljIGNoYXIgKmV4dGVuc2lvbnNfcGF0aCA9IE5VTEw7Ci1zdGF0aWMgY2hhciAqYmFj
a2dyb3VuZF9jb2xvcl9zdHJpbmcgPSBOVUxMOwotc3RhdGljIEVpbmFfQm9vbCBlbmNvZGluZ19k
ZXRlY3Rvcl9lbmFibGVkID0gRUlOQV9GQUxTRTsKLXN0YXRpYyBFaW5hX0Jvb2wgZnJhbWVfZmxh
dHRlbmluZ19lbmFibGVkID0gRUlOQV9GQUxTRTsKLXN0YXRpYyBFaW5hX0Jvb2wgbG9jYWxfc3Rv
cmFnZV9lbmFibGVkID0gRUlOQV9UUlVFOwotc3RhdGljIEVpbmFfQm9vbCBvZmZsaW5lX3dlYl9h
cHBsaWNhdGlvbl9jYWNoZV9lbmFibGVkID0gRUlOQV9UUlVFOwotc3RhdGljIEVpbmFfQm9vbCBm
dWxsc2NyZWVuX2VuYWJsZWQgPSBFSU5BX0ZBTFNFOwotc3RhdGljIEVpbmFfQm9vbCBzcGVsbF9j
aGVja2luZ19lbmFibGVkID0gRUlOQV9GQUxTRTsKLXN0YXRpYyBFaW5hX0Jvb2wgd2ViX3NlY3Vy
aXR5X2VuYWJsZWQgPSBFSU5BX1RSVUU7Ci1zdGF0aWMgRWluYV9Cb29sIHRvdWNoX2V2ZW50c19l
bmFibGVkID0gRUlOQV9GQUxTRTsKLXN0YXRpYyBFaW5hX0Jvb2wgZml4ZWRfbGF5b3V0X2VuYWJs
ZWQgPSBFSU5BX1RSVUU7Ci1zdGF0aWMgRWluYV9Cb29sIHNlcGFyYXRlZF9wcm9jZXNzX2VuYWJs
ZWQgPSBFSU5BX0ZBTFNFOwotc3RhdGljIEVpbmFfQm9vbCBsb25ncHJlc3NfZW5hYmxlZCA9IEVJ
TkFfRkFMU0U7Ci1zdGF0aWMgaW50IHdpbmRvd193aWR0aCA9IDEwMDA7Ci1zdGF0aWMgaW50IHdp
bmRvd19oZWlnaHQgPSA4MDA7Ci1zdGF0aWMgaW50IGNvbG9yX3BpY2tlcl93aWR0aCA9IDM1MDsK
LXN0YXRpYyBpbnQgY29sb3JfcGlja2VyX2hlaWdodCA9IDUwMDsKLXN0YXRpYyBpbnQgc2VhcmNo
X2ZsYWdzID0gRVdLX0ZJTkRfT1BUSU9OU19TSE9XX0hJR0hMSUdIVCB8IEVXS19GSU5EX09QVElP
TlNfV1JBUF9BUk9VTkQgfCBFV0tfRklORF9PUFRJT05TX0NBU0VfSU5TRU5TSVRJVkU7Ci0vKiBE
ZWZhdWx0IHZhbHVlIG9mIGRldmljZV9waXhlbF9yYXRpbyBpcyAnMCcgc28gdGhhdCB3ZSBkb24n
dCBzZXQgY3VzdG9tIGRldmljZQotICogc2NhbGUgZmFjdG9yIHVubGVzcyBpdCdzIHJlcXVpcmVk
IGJ5IHRoZSBVc2VyLiAqLwotc3RhdGljIGRvdWJsZSBkZXZpY2VfcGl4ZWxfcmF0aW8gPSAwOwot
c3RhdGljIEVpbmFfQm9vbCBsZWdhY3lfYmVoYXZpb3JfZW5hYmxlZCA9IEVJTkFfRkFMU0U7Ci0K
LSNkZWZpbmUgREVGQVVMVF9aT09NX0xFVkVMIDUgLy8gU2V0IGRlZmF1bHQgem9vbSBsZXZlbCB0
byAxLjAgKGluZGV4IDUgb24gem9vbUxldmVscykuCi0vLyBUaGUgem9vbSB2YWx1ZXMgYXJlIGNo
b3NlbiB0byBiZSBsaWtlIGluIE1vemlsbGEgRmlyZWZveCAzLgotY29uc3Qgc3RhdGljIGZsb2F0
IHpvb21MZXZlbHNbXSA9IHswLjMsIDAuNSwgMC42NywgMC44LCAwLjksIDEuMCwgMS4xLCAxLjIs
IDEuMzMsIDEuNSwgMS43LCAyLjAsIDIuNCwgMy4wfTsKLXN0YXRpYyBpbnQgX2xvZ19kb21haW5f
aWQgPSAtMTsKLQotI2RlZmluZSBJTkZPKC4uLikgRUlOQV9MT0dfRE9NX0lORk8oX2xvZ19kb21h
aW5faWQsIF9fVkFfQVJHU19fKQotI2RlZmluZSBFUlJPUiguLi4pIEVJTkFfTE9HX0RPTV9FUlIo
X2xvZ19kb21haW5faWQsIF9fVkFfQVJHU19fKQotCi1zdGF0aWMgRWluYV9Cb29sCi16b29tX2xl
dmVsX3NldChFdmFzX09iamVjdCAqd2VidmlldywgaW50IGxldmVsKQotewotICAgaWYgKGxldmVs
IDwgMCAgfHwgbGV2ZWwgPj0gc2l6ZW9mKHpvb21MZXZlbHMpIC8gc2l6ZW9mKGZsb2F0KSkKLSAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0KLSAgIHJldHVybiBld2tfdmlld19wYWdlX3pvb21fc2V0
KHdlYnZpZXcsIHpvb21MZXZlbHNbbGV2ZWxdKTsKLX0KLQotc3RhdGljIEV3a19WaWV3X1NtYXJ0
X0NsYXNzICptaW5pQnJvd3NlclZpZXdTbWFydENsYXNzKCkKLXsKLSAgIHN0YXRpYyBFd2tfVmll
d19TbWFydF9DbGFzcyBld2tWaWV3Q2xhc3MgPSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05B
TUVfVkVSU0lPTigiTWluaUJyb3dzZXJfVmlldyIpOwotICAgcmV0dXJuICZld2tWaWV3Q2xhc3M7
Ci19Ci0KLXR5cGVkZWYgc3RydWN0IF9Ub29sdGlwX0luZm9ybWF0aW9uIHsKLSAgIEVjb3JlX1Rp
bWVyICpzaG93X3RpbWVyOwotICAgRWluYV9Cb29sIGFjdGl2YXRlZDsKLSAgIEVpbmFfQm9vbCB0
ZXh0X3NldDsKLSAgIEVpbmFfQm9vbCBzaG93bjsKLX0gVG9vbHRpcF9JbmZvcm1hdGlvbjsKLQot
dHlwZWRlZiBzdHJ1Y3QgX0NvbG9yX1NlbGVjdG9yIHsKLSAgIEV3a19Db2xvcl9QaWNrZXIgKmV3
a19waWNrZXI7Ci0gICBFdmFzX09iamVjdCAqZWxtX3NlbGVjdG9yOwotICAgRXZhc19PYmplY3Qg
KmVsbV9zZWxlY3Rvcl93aW5kb3c7Ci19IENvbG9yX1NlbGVjdG9yOwotCi10eXBlZGVmIHN0cnVj
dCBfQnJvd3Nlcl9XaW5kb3cgewotICAgRXZhc19PYmplY3QgKmVsbV93aW5kb3c7Ci0gICBFdmFz
X09iamVjdCAqZXdrX3ZpZXc7Ci0gICBFdmFzX09iamVjdCAqaG9yaXpvbnRhbF9sYXlvdXQ7Ci0g
ICBFdmFzX09iamVjdCAqdmVydGljYWxfbGF5b3V0OwotICAgRXZhc19PYmplY3QgKnVybF9iYXI7
Ci0gICBFdmFzX09iamVjdCAqYmFja19idXR0b247Ci0gICBFdmFzX09iamVjdCAqZm9yd2FyZF9i
dXR0b247Ci0gICBzdHJ1Y3QgewotICAgICBFdmFzX09iamVjdCAqZWxtX21lbnU7Ci0gICAgIEV3
a19Qb3B1cF9NZW51ICpld2tfbWVudTsKLSAgICB9IHBvcHVwOwotICAgc3RydWN0IHsKLSAgICAg
RXZhc19PYmplY3QgKnNlYXJjaF9iYXI7Ci0gICAgIEV2YXNfT2JqZWN0ICpzZWFyY2hfZmllbGQ7
Ci0gICAgIEV2YXNfT2JqZWN0ICpzZWFyY2hfZmllbGRfY291bnQ7Ci0gICAgIEV2YXNfT2JqZWN0
ICpiYWNrd2FyZF9idXR0b247Ci0gICAgIEV2YXNfT2JqZWN0ICpmb3J3YXJkX2J1dHRvbjsKLSAg
ICAgRXZhc19PYmplY3QgKnNlYXJjaF9jYXNlX2NoZWNrX2JveDsKLSAgICAgRXZhc19PYmplY3Qg
KnNlYXJjaF93b3JkX3N0YXJ0X2NoZWNrX2JveDsKLSAgICAgRXZhc19PYmplY3QgKmNsb3NlX2J1
dHRvbjsKLSAgIH0gc2VhcmNoOwotICAgc3RydWN0IHsKLSAgICAgRXZhc19PYmplY3QgKmhpc3Rv
cnlfYm94OwotICAgICBFdmFzX09iamVjdCAqaGlzdG9yeV9saXN0OwotICAgICBFaW5hX0xpc3Qg
Kmhpc3RvcnlfbGlzdF9pdGVtczsKLSAgIH0gaGlzdG9yeTsKLSAgIGludCBjdXJyZW50X3pvb21f
bGV2ZWw7Ci0gICBUb29sdGlwX0luZm9ybWF0aW9uIHRvb2x0aXA7Ci0gICBDb2xvcl9TZWxlY3Rv
ciBjb2xvcl9zZWxlY3RvcjsKLSAgIHN0cnVjdCB7Ci0gICAgIEV2YXNfT2JqZWN0ICplbG1fbWVu
dTsKLSAgICAgRXdrX0NvbnRleHRfTWVudSAqZXdrX21lbnU7Ci0gICB9IGNvbnRleHRfbWVudTsK
LX0gQnJvd3Nlcl9XaW5kb3c7Ci0KLXR5cGVkZWYgc3RydWN0IF9GaWxlX1NlbGVjdG9yX0RhdGEg
ewotICAgQnJvd3Nlcl9XaW5kb3cqIHBhcmVudDsKLSAgIEV2YXNfT2JqZWN0ICplbG1fd2luZG93
OwotICAgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0ICpyZXF1ZXN0OwotfSBGaWxlX1NlbGVjdG9y
X0RhdGE7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdXRoX0RhdGEgewotICAgRXZhc19PYmplY3QgKnBv
cHVwOwotICAgRXdrX0F1dGhfUmVxdWVzdCAqcmVxdWVzdDsKLSAgIEV2YXNfT2JqZWN0ICp1c2Vy
bmFtZV9lbnRyeTsKLSAgIEV2YXNfT2JqZWN0ICpwYXNzd29yZF9lbnRyeTsKLX0gQXV0aF9EYXRh
OwotCi1zdGF0aWMgY29uc3QgRWNvcmVfR2V0b3B0IG9wdGlvbnMgPSB7Ci0gICAiTWluaUJyb3dz
ZXIiLAotICAgIiVwcm9nIFtvcHRpb25zXSBbdXJsXSIsCi0gICAiMC4wLjEiLAotICAgIihDKTIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljc1xuIChDKTIwMTIgSW50ZWwgQ29ycG9yYXRpb25cbiIsCi0g
ICAiIiwKLSAgICJUZXN0IFdlYiBCcm93c2VyIHVzaW5nIHRoZSBFbmxpZ2h0ZW5tZW50IEZvdW5k
YXRpb24gTGlicmFyaWVzIChFRkwpIHBvcnQgb2YgV2ViS2l0MiIsCi0gICBFSU5BX1RSVUUsIHsK
LSAgICAgRUNPUkVfR0VUT1BUX1NUT1JFX1NUUgotICAgICAgICAgKCdlJywgImVuZ2luZSIsICJF
Y29yZS1ldmFzIGVuZ2luZSB0byB1c2UuIiksCi0gICAgIEVDT1JFX0dFVE9QVF9TVE9SRV9TVFIK
LSAgICAgICAgICgncycsICJ3aW5kb3ctc2l6ZSIsICJXaW5kb3cgc2l6ZSBpbiBmb2xsb3dpbmcg
Zm9ybWF0ICh3aWR0aCl4KGhlaWdodCkuIiksCi0gICAgIEVDT1JFX0dFVE9QVF9TVE9SRV9TVFIK
LSAgICAgICAgICgndScsICJ1c2VyLWFnZW50IiwgIlVzZXIgYWdlbnQgdG8gc2V0LiIpLAotICAg
ICBFQ09SRV9HRVRPUFRfU1RPUkVfU1RSCi0gICAgICAgICAoJ3gnLCAiZXh0ZW5zaW9ucy1wYXRo
IiwgIlRoZSBwYXRoIHdoaWNoIGV4dGVuc2lvbnMgYXJlIHN0b3JlZC4iKSwKLSAgICAgRUNPUkVf
R0VUT1BUX1NUT1JFX0RPVUJMRQotICAgICAgICAgKCdyJywgImRldmljZS1waXhlbC1yYXRpbyIs
ICJSYXRpbyBiZXR3ZWVuIHRoZSBDU1MgdW5pdHMgYW5kIGRldmljZSBwaXhlbHMuIiksCi0gICAg
IEVDT1JFX0dFVE9QVF9DQUxMQkFDS19OT0FSR1MKLSAgICAgICAgICgnRScsICJsaXN0LWVuZ2lu
ZXMiLCAiTGlzdCBlY29yZS1ldmFzIGVuZ2luZXMuIiwKLSAgICAgICAgICBlY29yZV9nZXRvcHRf
Y2FsbGJhY2tfZWNvcmVfZXZhc19saXN0X2VuZ2luZXMsIE5VTEwpLAotICAgICBFQ09SRV9HRVRP
UFRfU1RPUkVfREVGX0JPT0wKLSAgICAgICAgICgnYycsICJlbmNvZGluZy1kZXRlY3RvciIsICJF
bmFibGUvZGlzYWJsZSBlbmNvZGluZyBkZXRlY3Rvci4iLCBFSU5BX0ZBTFNFKSwKLSAgICAgRUNP
UkVfR0VUT1BUX1NUT1JFX1NUUgotICAgICAgICAgKCdDJywgImJhY2tncm91bmQtY29sb3IiLCAi
QmFja2dyb3VuZCBjb2xvciBvZiBwYWdlLiBleCkgLUM9MjU1OjI1NToyNTU6MjU1IiksCi0gICAg
IEVDT1JFX0dFVE9QVF9TVE9SRV9ERUZfQk9PTAotICAgICAgICAgKCdmJywgImZsYXR0ZW5pbmci
LCAiRW5hYmxlL2Rpc2FibGUgZnJhbWUgZmxhdHRlbmluZy4iLCBFSU5BX0ZBTFNFKSwKLSAgICAg
RUNPUkVfR0VUT1BUX1NUT1JFX0RFRl9CT09MCi0gICAgICAgICAoJ2wnLCAibG9jYWwtc3RvcmFn
ZSIsICJFbmFibGUvZGlzYWJsZSBIVE1MNSBsb2NhbCBzdG9yYWdlLiIsIEVJTkFfVFJVRSksCi0g
ICAgIEVDT1JFX0dFVE9QVF9TVE9SRV9ERUZfQk9PTAotICAgICAgICAgKCdvJywgIm9mZmxpbmUt
d2ViLWFwcGxpY2F0aW9uLWNhY2hlIiwgIkVuYWJsZS9kaXNhYmxlIG9mZmxpbmUgd2ViIGFwcGxp
Y2F0aW9uIGNhY2hlLiIsIEVJTkFfVFJVRSksCi0gICAgIEVDT1JFX0dFVE9QVF9TVE9SRV9ERUZf
Qk9PTAotICAgICAgICAgKCdGJywgImZ1bGwtc2NyZWVuIiwgIlN0YXJ0IGluIGZ1bGwtc2NyZWVu
LiIsIEVJTkFfRkFMU0UpLAotICAgICBFQ09SRV9HRVRPUFRfU1RPUkVfREVGX0JPT0wKLSAgICAg
ICAgICgndCcsICJ0ZXh0LWNoZWNraW5nIiwgIkVuYWJsZS9kaXNhYmxlIHRleHQgc3BlbGwgY2hl
Y2tpbmcuIiwgRUlOQV9GQUxTRSksCi0gICAgIEVDT1JFX0dFVE9QVF9TVE9SRV9ERUZfQk9PTAot
ICAgICAgICAgKCdUJywgInRvdWNoLWV2ZW50cyIsICJFbmFibGUvZGlzYWJsZSB0b3VjaCBldmVu
dHMuIiwgRUlOQV9GQUxTRSksCi0gICAgIEVDT1JFX0dFVE9QVF9TVE9SRV9ERUZfQk9PTAotICAg
ICAgICAgKCdMJywgImZpeGVkLWxheW91dCIsICJFbmFibGUvZGlzYWJsZSBmaXhlZCBsYXlvdXQu
IiwgRUlOQV9UUlVFKSwKLSAgICAgRUNPUkVfR0VUT1BUX1NUT1JFX0RFRl9TVFIKLSAgICAgICAg
ICgncCcsICJwb2xpY3ktY29va2llcyIsICJDb29raWVzIHBvbGljeTpcbiAgYWx3YXlzIC0gYWx3
YXlzIGFjY2VwdCxcbiAgbmV2ZXIgLSBuZXZlciBhY2NlcHQsXG4gIG5vLXRoaXJkLXBhcnR5IC0g
ZG9uJ3QgYWNjZXB0IHRoaXJkLXBhcnR5IGNvb2tpZXMuIiwgIm5vLXRoaXJkLXBhcnR5IiksCi0g
ICAgIEVDT1JFX0dFVE9QVF9TVE9SRV9ERUZfQk9PTAotICAgICAgICAgKCd3JywgIndlYi1zZWN1
cml0eSIsICJlbmFibGUvZGlzYWJsZSB3ZWIgc2VjdXJpdHkuIiwgRUlOQV9UUlVFKSwKLSAgICAg
RUNPUkVfR0VUT1BUX1NUT1JFX0RFRl9CT09MCi0gICAgICAgICAoJ1MnLCAic2VwYXJhdGUtcHJv
Y2VzcyIsICJDcmVhdGUgbmV3IHdpbmRvdyBpbiBzZXBhcmF0ZWQgd2ViIHByb2Nlc3MuIiwgRUlO
QV9GQUxTRSksCi0gICAgIEVDT1JFX0dFVE9QVF9WRVJTSU9OCi0gICAgICAgICAoJ1YnLCAidmVy
c2lvbiIpLAotICAgICBFQ09SRV9HRVRPUFRfQ09QWVJJR0hUCi0gICAgICAgICAoJ1InLCAiY29w
eXJpZ2h0IiksCi0gICAgIEVDT1JFX0dFVE9QVF9IRUxQCi0gICAgICAgICAoJ2gnLCAiaGVscCIp
LAotICAgICBFQ09SRV9HRVRPUFRfU0VOVElORUwKLSAgIH0KLX07Ci0KLXN0YXRpYyBFaW5hX1N0
cmluZ3NoYXJlICpfZmlsZV9lbnRyeV9kaWFsb2dfc2hvdyhCcm93c2VyX1dpbmRvdyAqd2luZG93
LCBjb25zdCBjaGFyICpsYWJlbF90YWcsIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGV4dCk7Ci1zdGF0
aWMgQnJvd3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUoRXdrX1ZpZXdfQ29uZmlndXJhdGlvbiog
Y29uZmlndXJhdGlvbiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLXN0YXRpYyBFd2tfVmlld19D
b25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uKCk7Ci0KLXN0YXRpYyBCcm93c2VyX1dpbmRvdyAq
d2luZG93X2ZpbmRfd2l0aF9ld2tfdmlldyhFdmFzX09iamVjdCAqZXdrX3ZpZXcpCi17Ci0gICBF
aW5hX0xpc3QgKmw7Ci0gICB2b2lkICpkYXRhOwotCi0gICBpZiAoIWV3a192aWV3KQotICAgICBy
ZXR1cm4gTlVMTDsKLQotICAgRUlOQV9MSVNUX0ZPUkVBQ0god2luZG93cywgbCwgZGF0YSkgewot
ICAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopZGF0YTsKLSAg
ICAgaWYgKHdpbmRvdy0+ZXdrX3ZpZXcgPT0gZXdrX3ZpZXcpCi0gICAgICAgcmV0dXJuIHdpbmRv
dzsKLSAgIH0KLSAgIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgRWluYV9Cb29sCi1fdG9vbHRp
cF9zaG93KHZvaWQgKnVzZXJfZGF0YSkKLXsKLSAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAo
QnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7Ci0KLSAgIHdpbmRvdy0+dG9vbHRpcC5zaG93X3Rp
bWVyID0gTlVMTDsKLSAgIGVsbV9vYmplY3RfdG9vbHRpcF9zaG93KHdpbmRvdy0+ZWxtX3dpbmRv
dyk7Ci0gICB3aW5kb3ctPnRvb2x0aXAuc2hvd24gPSBFSU5BX1RSVUU7Ci0gICByZXR1cm4gRUNP
UkVfQ0FMTEJBQ0tfQ0FOQ0VMOwotfQotCi1zdGF0aWMgdm9pZAotd2luZG93X3Rvb2x0aXBfaGlk
ZShCcm93c2VyX1dpbmRvdyAqd2luZG93KQotewotICAgaWYgKHdpbmRvdy0+dG9vbHRpcC5zaG93
X3RpbWVyKSB7Ci0gICAgIGVjb3JlX3RpbWVyX2RlbCh3aW5kb3ctPnRvb2x0aXAuc2hvd190aW1l
cik7Ci0gICAgIHdpbmRvdy0+dG9vbHRpcC5zaG93X3RpbWVyID0gTlVMTDsKLSAgIH0KLQotICAg
aWYgKHdpbmRvdy0+dG9vbHRpcC5zaG93bikgewotICAgICBlbG1fb2JqZWN0X3Rvb2x0aXBfaGlk
ZSh3aW5kb3ctPmVsbV93aW5kb3cpOwotICAgICB3aW5kb3ctPnRvb2x0aXAuc2hvd24gPSBFSU5B
X0ZBTFNFOwotICAgfQotfQotCi1zdGF0aWMgdm9pZAotd2luZG93X3Rvb2x0aXBfdXBkYXRlKEJy
b3dzZXJfV2luZG93ICp3aW5kb3cpCi17Ci0gICB3aW5kb3dfdG9vbHRpcF9oaWRlKHdpbmRvdyk7
Ci0KLSAgIGlmICh3aW5kb3ctPnRvb2x0aXAuYWN0aXZhdGVkICYmIHdpbmRvdy0+dG9vbHRpcC50
ZXh0X3NldCkKLSAgICAgd2luZG93LT50b29sdGlwLnNob3dfdGltZXIgPSBlY29yZV90aW1lcl9h
ZGQoVE9PTFRJUF9ERUxBWV9TRUNPTkRTLCBfdG9vbHRpcF9zaG93LCB3aW5kb3cpOwotfQotCi1z
dGF0aWMgdm9pZAotX21vdXNlX2luX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhcyAqZSwgRXZhc19P
YmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9pbmZvKQotewotICAgQnJvd3Nlcl9XaW5kb3cg
KndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKLQotICAgd2luZG93LT50b29s
dGlwLmFjdGl2YXRlZCA9IEVJTkFfVFJVRTsKLSAgIHdpbmRvd190b29sdGlwX3VwZGF0ZSh3aW5k
b3cpOwotfQotCi1zdGF0aWMgdm9pZAotX21vdXNlX21vdmVfY2Iodm9pZCAqdXNlcl9kYXRhLCBF
dmFzICplLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCi17Ci0gICB3
aW5kb3dfdG9vbHRpcF91cGRhdGUoKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhKTsKLX0KLQot
c3RhdGljIHZvaWQKLV9tb3VzZV9vdXRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzICplLCBFdmFz
X09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCi17Ci0gICBCcm93c2VyX1dpbmRv
dyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotCi0gICB3aW5kb3ctPnRv
b2x0aXAuYWN0aXZhdGVkID0gRUlOQV9GQUxTRTsKLSAgIHdpbmRvd190b29sdGlwX3VwZGF0ZSh3
aW5kb3cpOwotfQotCi1zdGF0aWMgdm9pZAotX21vdXNlX3doZWVsX2NiKHZvaWQgKnVzZXJfZGF0
YSwgRXZhcyAqZSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9pbmZvKQotewot
ICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsK
LSAgIGNvbnN0IEV2YXNfTW9kaWZpZXIgKm1vZCA9IGV2YXNfa2V5X21vZGlmaWVyX2dldChlKTsK
LSAgIEV2YXNfRXZlbnRfTW91c2VfV2hlZWwgKmV2ID0gKEV2YXNfRXZlbnRfTW91c2VfV2hlZWwg
KilldmVudF9pbmZvOwotICAgRWluYV9Cb29sIHNoaWZ0UHJlc3NlZCA9IGV2YXNfa2V5X21vZGlm
aWVyX2lzX3NldChtb2QsICJTaGlmdCIpOwotICAgRWluYV9Cb29sIGN0cmxQcmVzc2VkID0gZXZh
c19rZXlfbW9kaWZpZXJfaXNfc2V0KG1vZCwgIkNvbnRyb2wiKTsKLQotICAgaWYgKCFzaGlmdFBy
ZXNzZWQgJiYgIWN0cmxQcmVzc2VkKQotICAgICByZXR1cm47Ci0KLSAgIC8qIG5hdmlnYXRlIGhp
c3Rvcnkgb3Igem9vbSB3ZWIgcGFnZSBiYXNlZCBvbiBtb3VzZSB3aGVlbCBzY3JvbGwgYWN0aW9u
IHdpdGggc2hpZnQgb3IgY29udHJvbCBrZXkgKi8KLSAgIGlmIChzaGlmdFByZXNzZWQpIHsKLSAg
ICAgaWYgKGV2LT56ID09IC0xICYmIGV3a192aWV3X2ZvcndhcmRfcG9zc2libGUoZXdrX3ZpZXcp
KSB7Ci0gICAgICAgZXdrX3ZpZXdfZm9yd2FyZChld2tfdmlldyk7Ci0gICAgICAgZWxtX29iamVj
dF9kaXNhYmxlZF9zZXQod2luZG93LT5mb3J3YXJkX2J1dHRvbiwgIWV3a192aWV3X2ZvcndhcmRf
cG9zc2libGUoZXdrX3ZpZXcpKTsKLSAgICAgfSBlbHNlIGlmIChldi0+eiA9PSAxICYmIGV3a192
aWV3X2JhY2tfcG9zc2libGUoZXdrX3ZpZXcpKSB7Ci0gICAgICAgZXdrX3ZpZXdfYmFjayhld2tf
dmlldyk7Ci0gICAgICAgZWxtX29iamVjdF9kaXNhYmxlZF9zZXQod2luZG93LT5iYWNrX2J1dHRv
biwgIWV3a192aWV3X2JhY2tfcG9zc2libGUoZXdrX3ZpZXcpKTsKLSAgICAgfQotICAgfSBlbHNl
IGlmIChjdHJsUHJlc3NlZCkgewotICAgICBpZiAoZXYtPnogPT0gLTEgJiYgem9vbV9sZXZlbF9z
ZXQoZXdrX3ZpZXcsIHdpbmRvdy0+Y3VycmVudF96b29tX2xldmVsICsgMSkpIHsKLSAgICAgICB3
aW5kb3ctPmN1cnJlbnRfem9vbV9sZXZlbCsrOwotICAgICAgIElORk8oIlpvb20gaW4gKEN0cmwg
KyAnc2Nyb2xsIHVwJykgd2FzIHByZXNzZWQsIHpvb20gbGV2ZWwgYmVjYW1lICUuMmYiLCB6b29t
TGV2ZWxzW3dpbmRvdy0+Y3VycmVudF96b29tX2xldmVsXSk7Ci0gICAgIH0gZWxzZSBpZiAoZXYt
PnogPT0gMSAmJiB6b29tX2xldmVsX3NldChld2tfdmlldywgd2luZG93LT5jdXJyZW50X3pvb21f
bGV2ZWwgLSAxKSkgewotICAgICAgIHdpbmRvdy0+Y3VycmVudF96b29tX2xldmVsLS07Ci0gICAg
ICAgSU5GTygiWm9vbSBvdXQgKEN0cmwgKyAnc2Nyb2xsIGRvd24nKSB3YXMgcHJlc3NlZCwgem9v
bSBsZXZlbCBiZWNhbWUgJS4yZiIsIHpvb21MZXZlbHNbd2luZG93LT5jdXJyZW50X3pvb21fbGV2
ZWxdKTsKLSAgICAgfQotICAgfQotfQotCi1zdGF0aWMgdm9pZAotX3dpbmRvd19yZXNpemVfY2Io
dm9pZCAqdXNlcl9kYXRhLCBFdmFzICplLCBFdmFzX09iamVjdCAqZWxtX3dpbmRvdywgdm9pZCAq
ZXZlbnRfaW5mbykKLXsKLSAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5k
b3cgKil1c2VyX2RhdGE7Ci0KLSAgIGlmICghd2luZG93KSB7Ci0gICAgIEVSUk9SKCJXaW5kb3cg
aXMgTlVMTC4iKTsKLSAgICAgcmV0dXJuOwotICAgfQotCi0gICBpZiAod2luZG93LT5jb250ZXh0
X21lbnUuZXdrX21lbnUpCi0gICAgIGV3a19jb250ZXh0X21lbnVfaGlkZSh3aW5kb3ctPmNvbnRl
eHRfbWVudS5ld2tfbWVudSk7Ci0gICBpZiAod2luZG93LT5wb3B1cC5ld2tfbWVudSkKLSAgICAg
ZXdrX3BvcHVwX21lbnVfY2xvc2Uod2luZG93LT5wb3B1cC5ld2tfbWVudSk7Ci0gICBpZiAod2lu
ZG93LT5wb3B1cC5lbG1fbWVudSkKLSAgICAgZWxtX21lbnVfY2xvc2Uod2luZG93LT5wb3B1cC5l
bG1fbWVudSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi11cGRhdGVfdmlld19mYXZpY29uKEJyb3dzZXJf
V2luZG93ICp3aW5kb3csIEV2YXNfT2JqZWN0ICppY29uKQotewotICAgLyogUmVtb3ZlIHByZXZp
b3VzIGljb24gZnJvbSBVUkwgYmFyICovCi0gICBFdmFzX09iamVjdCAqb2xkX2ljb24gPSBlbG1f
b2JqZWN0X3BhcnRfY29udGVudF91bnNldCh3aW5kb3ctPnVybF9iYXIsICJpY29uIik7Ci0gICBp
ZiAob2xkX2ljb24pIHsKLSAgICAgZXZhc19vYmplY3RfdW5yZWYob2xkX2ljb24pOwotICAgICBl
dmFzX29iamVjdF9kZWwob2xkX2ljb24pOwotICAgfQotCi0gICAvKiBTaG93IG5ldyBpY29uIGlu
IFVSTCBiYXIgKi8KLSAgIGlmIChpY29uKSB7Ci0gICAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9t
aW5fc2V0KGljb24sIDMyLCAzMik7Ci0gICAgIGVsbV9vYmplY3RfcGFydF9jb250ZW50X3NldCh3
aW5kb3ctPnVybF9iYXIsICJpY29uIiwgaWNvbik7Ci0gICAgIGV2YXNfb2JqZWN0X3JlZihpY29u
KTsKLSAgIH0KLX0KLQotc3RhdGljIHZvaWQKLV9pY29uX2NoYW5nZWRfY2IoRXdrX0Zhdmljb25f
RGF0YWJhc2UgKmRhdGFiYXNlLCBjb25zdCBjaGFyICp1cmwsIHZvaWQgKnVzZXJfZGF0YSkKLXsK
LSAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7
Ci0gICBFdmFzX09iamVjdCAqZXdrX3ZpZXcgPSB3aW5kb3ctPmV3a192aWV3OwotCi0gICBpZiAo
c3RyY21wKHVybCwgZXdrX3ZpZXdfdXJsX2dldChld2tfdmlldykpKQotICAgICByZXR1cm47Ci0K
LSAgIEV2YXNfT2JqZWN0ICpmYXZpY29uID0gZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl9nZXQo
ZGF0YWJhc2UsIHVybCwgZXZhc19vYmplY3RfZXZhc19nZXQoZXdrX3ZpZXcpKTsKLSAgIHVwZGF0
ZV92aWV3X2Zhdmljb24od2luZG93LCBmYXZpY29uKTsKLQotICAgaWYgKGZhdmljb24pCi0gICAg
IGV2YXNfb2JqZWN0X3VucmVmKGZhdmljb24pOwotfQotCi1zdGF0aWMgdm9pZCB3aW5kb3dfZnJl
ZShCcm93c2VyX1dpbmRvdyAqd2luZG93KQotewotICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJh
Y2tfZGVsKHdpbmRvdy0+ZXdrX3ZpZXcsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfSU4sIF9tb3VzZV9p
bl9jYik7Ci0gICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwod2luZG93LT5ld2tfdmll
dywgRVZBU19DQUxMQkFDS19NT1VTRV9PVVQsIF9tb3VzZV9vdXRfY2IpOwotICAgZXZhc19vYmpl
Y3RfZXZlbnRfY2FsbGJhY2tfZGVsKHdpbmRvdy0+ZXdrX3ZpZXcsIEVWQVNfQ0FMTEJBQ0tfTU9V
U0VfTU9WRSwgX21vdXNlX21vdmVfY2IpOwotICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tf
ZGVsKHdpbmRvdy0+ZXdrX3ZpZXcsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfV0hFRUwsIF9tb3VzZV93
aGVlbF9jYik7Ci0KLSAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbCh3aW5kb3ctPmVs
bV93aW5kb3csIEVWQVNfQ0FMTEJBQ0tfUkVTSVpFLCBfd2luZG93X3Jlc2l6ZV9jYik7Ci0KLSAg
IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fY2hhbmdlX2NhbGxiYWNrX2RlbChld2tfY29udGV4
dF9mYXZpY29uX2RhdGFiYXNlX2dldChld2tfdmlld19jb250ZXh0X2dldCh3aW5kb3ctPmV3a192
aWV3KSksIF9pY29uX2NoYW5nZWRfY2IpOwotCi0gICBldmFzX29iamVjdF9kZWwod2luZG93LT5l
d2tfdmlldyk7Ci0gICAvKiBUaGUgZWxtX3dpbiB3aWxsIHRha2UgY2FyZSBvZiBmcmVlaW5nIGl0
cyBjaGlsZHJlbiAqLwotICAgZXZhc19vYmplY3RfZGVsKHdpbmRvdy0+ZWxtX3dpbmRvdyk7Ci0K
LSAgIGlmICh3aW5kb3ctPnRvb2x0aXAuc2hvd190aW1lcikKLSAgICAgZWNvcmVfdGltZXJfZGVs
KHdpbmRvdy0+dG9vbHRpcC5zaG93X3RpbWVyKTsKLQotICAgaWYgKHdpbmRvdy0+Y29sb3Jfc2Vs
ZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdykKLSAgICAgZXZhc19vYmplY3RfZGVsKHdpbmRvdy0+
Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7Ci0KLSAgIGZyZWUod2luZG93KTsK
LX0KLQotc3RhdGljIHZvaWQgd2luZG93X2Nsb3NlKEJyb3dzZXJfV2luZG93ICp3aW5kb3cpCi17
Ci0gICB3aW5kb3dzID0gZWluYV9saXN0X3JlbW92ZSh3aW5kb3dzLCB3aW5kb3cpOwotICAgd2lu
ZG93X2ZyZWUod2luZG93KTsKLQotICAgaWYgKCF3aW5kb3dzKQotICAgICBlbG1fZXhpdCgpOwot
fQotCi1zdGF0aWMgdm9pZAotc2VhcmNoX2ljb25fc2hvdyhCcm93c2VyX1dpbmRvdyAqd2luZG93
KQotewotICAgRXZhc19PYmplY3QgKmljb24gPSBlbG1faWNvbl9hZGQod2luZG93LT5lbG1fd2lu
ZG93KTsKLSAgIGVsbV9pY29uX3N0YW5kYXJkX3NldChpY29uLCAiZWRpdC1maW5kIik7Ci0gICBl
bG1fb2JqZWN0X3BhcnRfY29udGVudF9zZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkLCAi
aWNvbiIsIGljb24pOwotICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X21pbl9zZXQoaWNvbiwgMjAs
IDIwKTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9tYXhfc2V0KGljb24sIDIwLCAyMCk7Ci0g
ICBlbG1fZW50cnlfaWNvbl92aXNpYmxlX3NldCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGQs
IEVJTkFfVFJVRSk7Ci0gICBldmFzX29iamVjdF9zaG93KGljb24pOwotfQotCi1zdGF0aWMgdm9p
ZAotc2VhcmNoX2JveF9zaG93KEJyb3dzZXJfV2luZG93ICp3aW5kb3cpCi17Ci0gICBldmFzX29i
amVjdF9zaXplX2hpbnRfbWluX3NldCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfYmFyLCBTRUFSQ0hf
RklFTERfU0laRSArIDIgKiBTRUFSQ0hfQlVUVE9OX1NJWkUsIFNFQVJDSF9CVVRUT05fU0laRSk7
Ci0KLSAgIHNlYXJjaF9pY29uX3Nob3cod2luZG93KTsKLSAgIGV2YXNfb2JqZWN0X3Nob3cod2lu
ZG93LT5zZWFyY2guc2VhcmNoX2Jhcik7Ci0gICBldmFzX29iamVjdF9zaG93KHdpbmRvdy0+c2Vh
cmNoLnNlYXJjaF9maWVsZCk7Ci0gICBldmFzX29iamVjdF9zaG93KHdpbmRvdy0+c2VhcmNoLnNl
YXJjaF9maWVsZF9jb3VudCk7Ci0gICBldmFzX29iamVjdF9zaG93KHdpbmRvdy0+c2VhcmNoLmJh
Y2t3YXJkX2J1dHRvbik7Ci0gICBldmFzX29iamVjdF9zaG93KHdpbmRvdy0+c2VhcmNoLmZvcndh
cmRfYnV0dG9uKTsKLSAgIGV2YXNfb2JqZWN0X3Nob3cod2luZG93LT5zZWFyY2guc2VhcmNoX2Nh
c2VfY2hlY2tfYm94KTsKLSAgIGV2YXNfb2JqZWN0X3Nob3cod2luZG93LT5zZWFyY2guc2VhcmNo
X3dvcmRfc3RhcnRfY2hlY2tfYm94KTsKLSAgIGV2YXNfb2JqZWN0X3Nob3cod2luZG93LT5zZWFy
Y2guY2xvc2VfYnV0dG9uKTsKLQotICAgLyogR3JhYiBmb2N1cyBmcm9tIHRoZSB2aWV3ICovCi0g
ICBldmFzX29iamVjdF9mb2N1c19zZXQod2luZG93LT5ld2tfdmlldywgRUlOQV9GQUxTRSk7Ci0g
ICBlbG1fb2JqZWN0X2ZvY3VzX3NldCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGQsIEVJTkFf
VFJVRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZWFyY2hfYm94X2hpZGUoQnJvd3Nlcl9XaW5kb3cg
KndpbmRvdykKLXsKLSAgIGV3a192aWV3X3RleHRfZmluZF9oaWdobGlnaHRfY2xlYXIod2luZG93
LT5ld2tfdmlldyk7Ci0KLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9taW5fc2V0KHdpbmRvdy0+
c2VhcmNoLnNlYXJjaF9iYXIsIFNFQVJDSF9GSUVMRF9TSVpFICsgMiAqIFNFQVJDSF9CVVRUT05f
U0laRSwgMCk7Ci0gICBldmFzX29iamVjdF9oaWRlKHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9iYXIp
OwotICAgZXZhc19vYmplY3RfaGlkZSh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGQpOwotICAg
ZXZhc19vYmplY3RfaGlkZSh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGRfY291bnQpOwotICAg
ZXZhc19vYmplY3RfaGlkZSh3aW5kb3ctPnNlYXJjaC5iYWNrd2FyZF9idXR0b24pOwotICAgZXZh
c19vYmplY3RfaGlkZSh3aW5kb3ctPnNlYXJjaC5mb3J3YXJkX2J1dHRvbik7Ci0gICBldmFzX29i
amVjdF9oaWRlKHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9jYXNlX2NoZWNrX2JveCk7Ci0gICBldmFz
X29iamVjdF9oaWRlKHdpbmRvdy0+c2VhcmNoLnNlYXJjaF93b3JkX3N0YXJ0X2NoZWNrX2JveCk7
Ci0gICBldmFzX29iamVjdF9oaWRlKHdpbmRvdy0+c2VhcmNoLmNsb3NlX2J1dHRvbik7Ci0KLSAg
IC8qIEdpdmUgZm9jdXMgYmFjayB0byB0aGUgdmlldyAqLwotICAgZWxtX29iamVjdF9mb2N1c19z
ZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkLCBFSU5BX0ZBTFNFKTsKLSAgIGV2YXNfb2Jq
ZWN0X2ZvY3VzX3NldCh3aW5kb3ctPmV3a192aWV3LCBFSU5BX1RSVUUpOwotfQotCi1zdGF0aWMg
dm9pZAotaGlzdG9yeV9saXN0X2hpZGUoQnJvd3Nlcl9XaW5kb3cgKndpbmRvdykKLXsKLSAgIC8q
IEhpZGUgaGlzdG9yeSBsaXN0ICovCi0gICBldmFzX29iamVjdF9oaWRlKHdpbmRvdy0+aGlzdG9y
eS5oaXN0b3J5X2JveCk7Ci0gICBldmFzX29iamVjdF9oaWRlKHdpbmRvdy0+aGlzdG9yeS5oaXN0
b3J5X2xpc3QpOwotCi0gICAvKiBEZXJlZmVyZW5jZSB0aGUgbGlzdCBpdGVtcyBhbmQgY2xlYXIg
dGhlIGhpc3RvcnkgbGlzdCAqLwotICAgdm9pZCAqZGF0YTsKLSAgIEVJTkFfTElTVF9GUkVFKHdp
bmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3RfaXRlbXMsIGRhdGEpIHsKLSAgICAgICBld2tfb2Jq
ZWN0X3VucmVmKGRhdGEpOwotICAgfQotCi0gICBlbG1fZ2VubGlzdF9jbGVhcih3aW5kb3ctPmhp
c3RvcnkuaGlzdG9yeV9saXN0KTsKLQotICAgLyogR2l2ZSBmb2N1cyBiYWNrIHRvIHRoZSB2aWV3
ICovCi0gICBlbG1fb2JqZWN0X2ZvY3VzX3NldCh3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9ib3gs
IEVJTkFfRkFMU0UpOwotICAgZWxtX29iamVjdF9mb2N1c19zZXQod2luZG93LT5oaXN0b3J5Lmhp
c3RvcnlfbGlzdCwgRUlOQV9GQUxTRSk7Ci0gICBldmFzX29iamVjdF9mb2N1c19zZXQod2luZG93
LT5ld2tfdmlldywgRUlOQV9UUlVFKTsKLQotICAgLyogUmVzZXQgZmxhZ3MgKi8KLSAgIGxvbmdw
cmVzc19lbmFibGVkID0gRUlOQV9GQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgc2F2ZV9wYWdlX2Nv
bnRlbnRzX2NhbGxiYWNrKEV3a19QYWdlX0NvbnRlbnRzX1R5cGUgdHlwZSwgY29uc3QgY2hhciAq
ZGF0YSwgdm9pZCAqdXNlcl9kYXRhKQotewotICAgRWV0X0ZpbGUgKmVmOwotICAgRWluYV9TdHJp
bmdzaGFyZSAqZmlsZU5hbWUgPSAoRWluYV9TdHJpbmdzaGFyZSAqKXVzZXJfZGF0YTsKLQotICAg
aWYgKCFlaW5hX3N0cl9oYXNfZXh0ZW5zaW9uKGZpbGVOYW1lLCAiLm1odCIpKSB7Ci0gICAgIEVp
bmFfU3RyYnVmICpmaWxlTmFtZVdpdGhNaHQgPSBlaW5hX3N0cmJ1Zl9uZXcoKTsKLSAgICAgZWlu
YV9zdHJidWZfYXBwZW5kX3ByaW50ZihmaWxlTmFtZVdpdGhNaHQsICIlcy5taHQiLCBmaWxlTmFt
ZSk7Ci0gICAgIGVmID0gZWV0X29wZW4oZWluYV9zdHJidWZfc3RyaW5nX2dldChmaWxlTmFtZVdp
dGhNaHQpLCBFRVRfRklMRV9NT0RFX1dSSVRFKTsKLSAgICAgSU5GTygiU2F2aW5nIGZpbGUgdG86
ICVzIiwgZWluYV9zdHJidWZfc3RyaW5nX2dldChmaWxlTmFtZVdpdGhNaHQpKTsKLSAgICAgZWlu
YV9zdHJidWZfZnJlZShmaWxlTmFtZVdpdGhNaHQpOwotICAgfSBlbHNlIHsKLSAgICAgZWYgPSBl
ZXRfb3BlbihmaWxlTmFtZSwgRUVUX0ZJTEVfTU9ERV9XUklURSk7Ci0gICAgIElORk8oIlNhdmlu
ZyBmaWxlIHRvOiAlcyIsIGZpbGVOYW1lKTsKLSAgIH0KLQotICAgaWYgKCFlZikgewotICAgICBF
UlJPUigiQ291bGQgbm90IGNyZWF0ZSBGaWxlIik7Ci0gICAgIHJldHVybjsKLSAgIH0KLQotICAg
ZWV0X3dyaXRlKGVmLCAiTUhUTUwgZGF0YSIsIGRhdGEsIHN0cmxlbihkYXRhKSwgMCAvKiBjb21w
cmVzcyAqLyk7Ci0gICBlZXRfY2xvc2UoZWYpOwotICAgSU5GTygiU1VDQ0VTUzogc2F2ZWQuIik7
Ci0KLSAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGZpbGVOYW1lKTsKLX0KLQotc3RhdGljIHZvaWQK
LXNjcmlwdF9leGVjdXRlX2NhbGxiYWNrKEV2YXNfT2JqZWN0ICpld2tfdmlldywgY29uc3QgY2hh
ciAqcmV0dXJuX3ZhbHVlLCB2b2lkICp1c2VyX2RhdGEpCi17Ci0gICBCcm93c2VyX1dpbmRvdyAq
d2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotCi0gICBFaW5hX1N0cmJ1ZiAq
dGV4dF9idWZmZXIgPSBlaW5hX3N0cmJ1Zl9uZXcoKTsKLQotICAgaWYgKHJldHVybl92YWx1ZSkg
ewotICAgICBlaW5hX3N0cmJ1Zl9hcHBlbmQodGV4dF9idWZmZXIsIHJldHVybl92YWx1ZSk7Ci0g
ICAgIElORk8oInNlbGVjdGVkIHRleHQgaXM6ICVzIiwgZWluYV9zdHJidWZfc3RyaW5nX2dldCh0
ZXh0X2J1ZmZlcikpOwotICAgICBlbG1fZW50cnlfZW50cnlfc2V0KHdpbmRvdy0+c2VhcmNoLnNl
YXJjaF9maWVsZCwgZWluYV9zdHJidWZfc3RyaW5nX2dldCh0ZXh0X2J1ZmZlcikpOwotICAgfQot
ICAgZWluYV9zdHJidWZfZnJlZSh0ZXh0X2J1ZmZlcik7Ci0gICBzZWFyY2hfYm94X3Nob3cod2lu
ZG93KTsKLX0KLQotc3RhdGljIHZvaWQKLXRvZ2dsZV93aW5kb3dfZnVsbHNjcmVlbihCcm93c2Vy
X1dpbmRvdyAqd2luZG93LCBFaW5hX0Jvb2wgaXNGdWxsU2NyZWVuKQotewotICAgaWYgKGlzRnVs
bFNjcmVlbikgewotICAgICBldmFzX29iamVjdF9oaWRlKHdpbmRvdy0+aG9yaXpvbnRhbF9sYXlv
dXQpOwotICAgICBlbG1fYm94X3VucGFjayh3aW5kb3ctPnZlcnRpY2FsX2xheW91dCwgd2luZG93
LT5ob3Jpem9udGFsX2xheW91dCk7Ci0gICAgIGVsbV93aW5fZnVsbHNjcmVlbl9zZXQod2luZG93
LT5lbG1fd2luZG93LCBFSU5BX1RSVUUpOwotICAgfSBlbHNlIHsKLSAgICAgZWxtX3dpbl9mdWxs
c2NyZWVuX3NldCh3aW5kb3ctPmVsbV93aW5kb3csIEVJTkFfRkFMU0UpOwotICAgICBlbG1fYm94
X3BhY2tfc3RhcnQod2luZG93LT52ZXJ0aWNhbF9sYXlvdXQsIHdpbmRvdy0+aG9yaXpvbnRhbF9s
YXlvdXQpOwotICAgICAgZXZhc19vYmplY3Rfc2hvdyh3aW5kb3ctPmhvcml6b250YWxfbGF5b3V0
KTsKLSAgIH0KLX0KLQotc3RhdGljIHZvaWQKLV9rZXlfZG93bl9jYih2b2lkICp1c2VyX2RhdGEs
IEV2YXMgKmUsIEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKLXsKLSAg
IEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7Ci0g
ICBFdmFzX0V2ZW50X0tleV9Eb3duICpldiA9IChFdmFzX0V2ZW50X0tleV9Eb3duKikgZXZlbnRf
aW5mbzsKLQotICAgc3RhdGljIGNvbnN0IGNoYXIgKmVuY29kaW5nc1tdID0gewotICAgICAiSVNP
LTg4NTktMSIsCi0gICAgICJVVEYtOCIsCi0gICAgIE5VTEwKLSAgIH07Ci0gICBzdGF0aWMgaW50
IGN1cnJlbnRFbmNvZGluZyA9IC0xOwotICAgY29uc3QgRXZhc19Nb2RpZmllciAqbW9kID0gZXZh
c19rZXlfbW9kaWZpZXJfZ2V0KGUpOwotICAgRWluYV9Cb29sIGN0cmxQcmVzc2VkID0gZXZhc19r
ZXlfbW9kaWZpZXJfaXNfc2V0KG1vZCwgIkNvbnRyb2wiKTsKLSAgIEVpbmFfQm9vbCBhbHRQcmVz
c2VkID0gZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KG1vZCwgIkFsdCIpOwotICAgRWluYV9Cb29s
IHNoaWZ0UHJlc3NlZCA9IGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChtb2QsICJTaGlmdCIpOwot
Ci0gICBpZiAoIXN0cmNtcChldi0+a2V5LCAiTGVmdCIpICYmIGFsdFByZXNzZWQpIHsKLSAgICAg
SU5GTygiQmFjayAoQWx0K0xlZnQpIHdhcyBwcmVzc2VkIik7Ci0gICAgIGlmICghZXdrX3ZpZXdf
YmFjayhld2tfdmlldykpCi0gICAgICAgSU5GTygiQmFjayBpZ25vcmVkOiBObyBiYWNrIGhpc3Rv
cnkiKTsKLSAgIH0gZWxzZSBpZiAoIXN0cmNtcChldi0+a2V5LCAiUmlnaHQiKSAmJiBhbHRQcmVz
c2VkKSB7Ci0gICAgIElORk8oIkZvcndhcmQgKEFsdCtSaWdodCkgd2FzIHByZXNzZWQiKTsKLSAg
ICAgaWYgKCFld2tfdmlld19mb3J3YXJkKGV3a192aWV3KSkKLSAgICAgICBJTkZPKCJGb3J3YXJk
IGlnbm9yZWQ6IE5vIGZvcndhcmQgaGlzdG9yeSIpOwotICAgfSBlbHNlIGlmICghc3RyY21wKGV2
LT5rZXksICJIb21lIikgJiYgYWx0UHJlc3NlZCkgewotICAgICBJTkZPKCJIb21lIChBbHQrSG9t
ZSkgd2FzIHByZXNzZWQiKTsKLSAgICAgZXdrX3ZpZXdfdXJsX3NldCh3aW5kb3ctPmV3a192aWV3
LCBERUZBVUxUX1VSTCk7Ci0gICB9IGVsc2UgaWYgKCFzdHJjbXAoZXYtPmtleSwgIkYzIikpIHsK
LSAgICAgY3VycmVudEVuY29kaW5nID0gKGN1cnJlbnRFbmNvZGluZyArIDEpICUgKHNpemVvZihl
bmNvZGluZ3MpIC8gc2l6ZW9mKGVuY29kaW5nc1swXSkpOwotICAgICBJTkZPKCJTZXQgZW5jb2Rp
bmcgKEYzKSBwcmVzc2VkLiBOZXcgZW5jb2RpbmcgdG8gJXMiLCBlbmNvZGluZ3NbY3VycmVudEVu
Y29kaW5nXSk7Ci0gICAgIGV3a192aWV3X2N1c3RvbV9lbmNvZGluZ19zZXQoZXdrX3ZpZXcsIGVu
Y29kaW5nc1tjdXJyZW50RW5jb2RpbmddKTsKLSAgIH0gZWxzZSBpZiAoKCFzdHJjbXAoZXYtPmtl
eSwgIkY1IikgJiYgY3RybFByZXNzZWQpIHx8ICghc3RyY21wKGV2LT5rZXksICJyIikgJiYgKHNo
aWZ0UHJlc3NlZCAmIGN0cmxQcmVzc2VkKSkpIHsKLSAgICAgSU5GTygiUmVsb2FkIGlnbm9yaW5n
IGNhY2hlIChDdHJsK0Y1IG9yIEN0cmwrU2hpZnQrcikgd2FzIHByZXNzZWQsIHJlbG9hZGluZyBh
bmQgYnlwYXNzaW5nIGNhY2hlLi4uIik7Ci0gICAgIGV3a192aWV3X3JlbG9hZF9ieXBhc3NfY2Fj
aGUoZXdrX3ZpZXcpOwotICAgfSBlbHNlIGlmICghc3RyY21wKGV2LT5rZXksICJGNSIpIHx8ICgh
c3RyY21wKGV2LT5rZXksICJyIikgJiYgY3RybFByZXNzZWQpKSB7Ci0gICAgIElORk8oIlJlbG9h
ZCAoRjUgb3IgQ3RybCtyKSB3YXMgcHJlc3NlZCwgcmVsb2FkaW5nLi4uIik7Ci0gICAgIGV3a192
aWV3X3JlbG9hZChld2tfdmlldyk7Ci0gICB9IGVsc2UgaWYgKCFzdHJjbXAoZXYtPmtleSwgIkY2
IikpIHsKLSAgICAgSU5GTygiU3RvcCAoRjYpIHdhcyBwcmVzc2VkLCBzdG9wIGxvYWRpbmcuIik7
Ci0gICAgIGV3a192aWV3X3N0b3AoZXdrX3ZpZXcpOwotICAgfSBlbHNlIGlmICghc3RyY21wKGV2
LT5rZXksICJGNyIpKSB7Ci0gICAgIEV3a19QYWdpbmF0aW9uX01vZGUgbW9kZSA9ICBld2tfdmll
d19wYWdpbmF0aW9uX21vZGVfZ2V0KGV3a192aWV3KTsKLSAgICAgbW9kZSA9IChtb2RlICsgMSkg
JSAoRVdLX1BBR0lOQVRJT05fTU9ERV9CT1RUT01fVE9fVE9QICsgMSk7Ci0gICAgIGlmIChld2tf
dmlld19wYWdpbmF0aW9uX21vZGVfc2V0KGV3a192aWV3LCBtb2RlKSkKLSAgICAgICBJTkZPKCJD
aGFuZ2UgUGFnaW5hdGlvbiBNb2RlIChGNykgd2FzIHByZXNzZWQsIGNoYW5nZWQgdG86ICVkIiwg
bW9kZSk7Ci0gICAgIGVsc2UKLSAgICAgICBJTkZPKCJDaGFuZ2UgUGFnaW5hdGlvbiBNb2RlIChG
Nykgd2FzIHByZXNzZWQsIGJ1dCBOT1QgY2hhbmdlZCEiKTsKLSAgIH0gZWxzZSBpZiAoIXN0cmNt
cChldi0+a2V5LCAiRjExIikpIHsKLSAgICAgSU5GTygiRnVsbHNjcmVlbiAoRjExKSB3YXMgcHJl
c3NlZCwgdG9nZ2xpbmcgd2luZG93L2Z1bGxzY3JlZW4uIik7Ci0gICAgIHRvZ2dsZV93aW5kb3df
ZnVsbHNjcmVlbih3aW5kb3csICFlbG1fd2luX2Z1bGxzY3JlZW5fZ2V0KHdpbmRvdy0+ZWxtX3dp
bmRvdykpOwotICAgfSBlbHNlIGlmICghc3RyY21wKGV2LT5rZXksICJuIikgJiYgY3RybFByZXNz
ZWQpIHsKLSAgICAgSU5GTygiQ3JlYXRlIG5ldyB3aW5kb3cgKEN0cmwrbikgd2FzIHByZXNzZWQu
Iik7Ci0gICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfY3JlYXRlKGNvbmZpZ3Vy
YXRpb24oKSwgMCwgMCk7Ci0gICAgIGV3a192aWV3X3VybF9zZXQod2luZG93LT5ld2tfdmlldywg
REVGQVVMVF9VUkwpOwotICAgICAvLyAwIGVxdWFscyBkZWZhdWx0IHdpZHRoIGFuZCBoZWlnaHQu
Ci0gICAgIHdpbmRvd3MgPSBlaW5hX2xpc3RfYXBwZW5kKHdpbmRvd3MsIHdpbmRvdyk7Ci0gICB9
IGVsc2UgaWYgKCFzdHJjbXAoZXYtPmtleSwgImkiKSAmJiBjdHJsUHJlc3NlZCkgewotICAgICBJ
TkZPKCJTaG93IEluc3BlY3RvciAoQ3RybCtpKSB3YXMgcHJlc3NlZC4iKTsKLSAgICAgZXdrX3Zp
ZXdfaW5zcGVjdG9yX3Nob3coZXdrX3ZpZXcpOwotICAgfSBlbHNlIGlmICghc3RyY21wKGV2LT5r
ZXksICJmIikgJiYgY3RybFByZXNzZWQpIHsKLSAgICAgSU5GTygiU2hvdyBTZWFyY2ggQm94IChD
dHJsK2YpIHdhcyBwcmVzc2VkLiIpOwotICAgICBjb25zdCBjaGFyIGdldF9kYXRhX3NjcmlwdFtd
ID0gIndpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpOyI7Ci0gICAgIGV3a192aWV3X3Nj
cmlwdF9leGVjdXRlKGV3a192aWV3LCBnZXRfZGF0YV9zY3JpcHQsIHNjcmlwdF9leGVjdXRlX2Nh
bGxiYWNrLCAodm9pZCopKHdpbmRvdykpOwotICAgfSBlbHNlIGlmICghc3RyY21wKGV2LT5rZXks
ICJFc2NhcGUiKSkgewotICAgICBpZiAoZXZhc19vYmplY3RfdmlzaWJsZV9nZXQod2luZG93LT5z
ZWFyY2guc2VhcmNoX2JhcikpCi0gICAgICAgc2VhcmNoX2JveF9oaWRlKHdpbmRvdyk7Ci0gICAg
IGVsc2UgaWYgKGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5
X2JveCkpCi0gICAgICAgaGlzdG9yeV9saXN0X2hpZGUod2luZG93KTsKLSAgICAgZWxzZSBpZiAo
ZWxtX3dpbl9mdWxsc2NyZWVuX2dldCh3aW5kb3ctPmVsbV93aW5kb3cpKQotICAgICAgIGV3a192
aWV3X2Z1bGxzY3JlZW5fZXhpdChld2tfdmlldyk7Ci0gICAgIGVsc2UKLSAgICAgICBld2tfdmll
d19zdG9wKGV3a192aWV3KTsKLSAgIH0gZWxzZSBpZiAoY3RybFByZXNzZWQgJiYgKCFzdHJjbXAo
ZXYtPmtleSwgIm1pbnVzIikgfHwgIXN0cmNtcChldi0+a2V5LCAiS1BfU3VidHJhY3QiKSkpIHsK
LSAgICAgaWYgKHpvb21fbGV2ZWxfc2V0KGV3a192aWV3LCB3aW5kb3ctPmN1cnJlbnRfem9vbV9s
ZXZlbCAtIDEpKQotICAgICAgIHdpbmRvdy0+Y3VycmVudF96b29tX2xldmVsLS07Ci0gICAgIElO
Rk8oIlpvb20gb3V0IChDdHJsICsgJy0nKSB3YXMgcHJlc3NlZCwgem9vbSBsZXZlbCBiZWNhbWUg
JS4yZiIsIHpvb21MZXZlbHNbd2luZG93LT5jdXJyZW50X3pvb21fbGV2ZWxdKTsKLSAgIH0gZWxz
ZSBpZiAoY3RybFByZXNzZWQgJiYgKCFzdHJjbXAoZXYtPmtleSwgImVxdWFsIikgfHwgIXN0cmNt
cChldi0+a2V5LCAiS1BfQWRkIikpKSB7Ci0gICAgIGlmICh6b29tX2xldmVsX3NldChld2tfdmll
dywgd2luZG93LT5jdXJyZW50X3pvb21fbGV2ZWwgKyAxKSkKLSAgICAgICB3aW5kb3ctPmN1cnJl
bnRfem9vbV9sZXZlbCsrOwotICAgICBJTkZPKCJab29tIGluIChDdHJsICsgJysnKSB3YXMgcHJl
c3NlZCwgem9vbSBsZXZlbCBiZWNhbWUgJS4yZiIsIHpvb21MZXZlbHNbd2luZG93LT5jdXJyZW50
X3pvb21fbGV2ZWxdKTsKLSAgIH0gZWxzZSBpZiAoY3RybFByZXNzZWQgJiYgIXN0cmNtcChldi0+
a2V5LCAiMCIpKSB7Ci0gICAgIGlmICh6b29tX2xldmVsX3NldChld2tfdmlldywgREVGQVVMVF9a
T09NX0xFVkVMKSkKLSAgICAgICB3aW5kb3ctPmN1cnJlbnRfem9vbV9sZXZlbCA9IERFRkFVTFRf
Wk9PTV9MRVZFTDsKLSAgICAgSU5GTygiWm9vbSB0byBkZWZhdWx0IChDdHJsICsgJzAnKSB3YXMg
cHJlc3NlZCwgem9vbSBsZXZlbCBiZWNhbWUgJS4yZiIsIHpvb21MZXZlbHNbd2luZG93LT5jdXJy
ZW50X3pvb21fbGV2ZWxdKTsKLSAgIH0gZWxzZSBpZiAoY3RybFByZXNzZWQgJiYgIXN0cmNtcChl
di0+a2V5LCAicyIpKSB7Ci0gICAgIEVpbmFfU3RyYnVmICpkZWZhdWx0X2ZpbGUgPSBlaW5hX3N0
cmJ1Zl9uZXcoKTsKLSAgICAgY29uc3QgY2hhciAqaG9tZV9wYXRoID0gZ2V0ZW52KCJIT01FIik7
Ci0gICAgIGNvbnN0IGNoYXIgKnRpdGxlID0gZXdrX3ZpZXdfdGl0bGVfZ2V0KHdpbmRvdy0+ZXdr
X3ZpZXcpOwotICAgICBlaW5hX3N0cmJ1Zl9hcHBlbmRfcHJpbnRmKGRlZmF1bHRfZmlsZSwgIiVz
LyVzLm1odCIsIGhvbWVfcGF0aCA/IGhvbWVfcGF0aCA6ICIvaG9tZSIsIHRpdGxlID8gdGl0bGUg
OiAidGl0bGUiKTsKLSAgICAgSU5GTygiUHJlc3NlZCAoQ1RSTCArIFMpIDogU2F2aW5nIEN1cnJl
bnQgUGFnZS4iKTsKLSAgICAgRWluYV9TdHJpbmdzaGFyZSAqc2F2ZV9maWxlX25hbWUgPSBfZmls
ZV9lbnRyeV9kaWFsb2dfc2hvdyh3aW5kb3csICJTQVZFIiwgZWluYV9zdHJidWZfc3RyaW5nX2dl
dChkZWZhdWx0X2ZpbGUpKTsKLSAgICAgaWYgKCFzYXZlX2ZpbGVfbmFtZSkKLSAgICAgICByZXR1
cm47Ci0gICAgIGV3a192aWV3X3BhZ2VfY29udGVudHNfZ2V0KGV3a192aWV3LCBFV0tfUEFHRV9D
T05URU5UU19UWVBFX01IVE1MLCBzYXZlX3BhZ2VfY29udGVudHNfY2FsbGJhY2ssICh2b2lkICop
c2F2ZV9maWxlX25hbWUpOwotICAgICBlaW5hX3N0cmJ1Zl9mcmVlKGRlZmF1bHRfZmlsZSk7Ci0g
ICB9IGVsc2UgaWYgKGN0cmxQcmVzc2VkICYmICFzdHJjbXAoZXYtPmtleSwgImwiKSkgewotICAg
ICBjb25zdCBjaGFyICpob21lX3BhdGggPSAgZ2V0ZW52KCJIT01FIik7Ci0gICAgIEVpbmFfU3Ry
aW5nc2hhcmUgKm9wZW5fZmlsZV9uYW1lID0gX2ZpbGVfZW50cnlfZGlhbG9nX3Nob3cod2luZG93
LCAiTE9BRCIsIGhvbWVfcGF0aCA/IGhvbWVfcGF0aCA6ICIvaG9tZSIpOwotICAgICBpZiAoIW9w
ZW5fZmlsZV9uYW1lKQotICAgICAgIHJldHVybjsKLSAgICAgRWluYV9TdHJidWYgKnVyaV9wYXRo
ID0gZWluYV9zdHJidWZfbmV3KCk7Ci0gICAgIGVpbmFfc3RyYnVmX2FwcGVuZF9wcmludGYodXJp
X3BhdGgsICIlcyVzIiwgRklMRV9TQ0hFTUUsIG9wZW5fZmlsZV9uYW1lKTsKLSAgICAgSU5GTygi
cHJlc3NlZCAoQ1RSTCArIEwpIDogTG9hZGluZyBQYWdlICVzIiwgZWluYV9zdHJidWZfc3RyaW5n
X2dldCh1cmlfcGF0aCkpOwotICAgICBld2tfdmlld191cmxfc2V0KGV3a192aWV3LCBlaW5hX3N0
cmJ1Zl9zdHJpbmdfZ2V0KHVyaV9wYXRoKSk7Ci0gICAgIGVpbmFfc3RyYnVmX2ZyZWUodXJpX3Bh
dGgpOwotICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChvcGVuX2ZpbGVfbmFtZSk7Ci0gICB9Ci19
Ci0KLXN0YXRpYyB2b2lkCi12aWV3X2ZvY3VzX3NldChCcm93c2VyX1dpbmRvdyAqd2luZG93LCBF
aW5hX0Jvb2wgZm9jdXMpCi17Ci0gICAvKiBXZSBzdGVhbCBmb2N1cyBhd2F5IGZyb20gZWxtJ3Mg
Zm9jdXMgbW9kZWwgYW5kIHN0YXJ0IHRvIGRvIHRoaW5ncwotICAgICogbWFudWFsbHkgaGVyZSwg
c28gZWxtIG5vdyBoYXMgbm8gY2x1ZSB3aGF0J3MgdXAuIFRlbGwgZWxtIHRoYXQgaXRzCi0gICAg
KiB0b3BsZXZlbCB3aWRnZXQgaXMgdG8gYmUgdW5mb2N1c2VkIHNvIGVsbSBnaXZlcyB1cCB0aGUg
Zm9jdXMgKi8KLSAgIGVsbV9vYmplY3RfZm9jdXNfc2V0KGVsbV9vYmplY3RfdG9wX3dpZGdldF9n
ZXQod2luZG93LT5lbG1fd2luZG93KSwgRUlOQV9GQUxTRSk7Ci0gICBldmFzX29iamVjdF9mb2N1
c19zZXQod2luZG93LT5ld2tfdmlldywgZm9jdXMpOwotfQotCi1zdGF0aWMgdm9pZAotX21vdXNl
X2Rvd25fY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzICplLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcs
IHZvaWQgKmV2ZW50X2luZm8pCi17Ci0gICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dz
ZXJfV2luZG93ICopdXNlcl9kYXRhOwotICAgRXZhc19FdmVudF9Nb3VzZV9Eb3duICpldiA9IChF
dmFzX0V2ZW50X01vdXNlX0Rvd24gKilldmVudF9pbmZvOwotCi0gICAvKiBDbGVhciBzZWxlY3Rp
b24gZnJvbSB0aGUgVVJMIGJhciAqLwotICAgZWxtX2VudHJ5X3NlbGVjdF9ub25lKHdpbmRvdy0+
dXJsX2Jhcik7Ci0KLSAgIGlmIChsb25ncHJlc3NfZW5hYmxlZCkKLSAgICAgaGlzdG9yeV9saXN0
X2hpZGUod2luZG93KTsKLSAgIGlmIChldi0+YnV0dG9uID09IDEpCi0gICAgIHZpZXdfZm9jdXNf
c2V0KHdpbmRvdywgRUlOQV9UUlVFKTsKLSAgIGVsc2UgaWYgKGV2LT5idXR0b24gPT0gMikKLSAg
ICAgdmlld19mb2N1c19zZXQod2luZG93LCAhZXZhc19vYmplY3RfZm9jdXNfZ2V0KGV3a192aWV3
KSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10aXRsZV9zZXQoRXZhc19PYmplY3QgKmVsbV93aW5kb3cs
IGNvbnN0IGNoYXIgKnRpdGxlLCBpbnQgcHJvZ3Jlc3MpCi17Ci0gICBFaW5hX1N0cmJ1ZiAqYnVm
ZmVyOwotCi0gICBpZiAoIXRpdGxlIHx8ICEqdGl0bGUpIHsKLSAgICAgZWxtX3dpbl90aXRsZV9z
ZXQoZWxtX3dpbmRvdywgQVBQX05BTUUpOwotICAgICByZXR1cm47Ci0gICB9Ci0KLSAgIGJ1ZmZl
ciA9IGVpbmFfc3RyYnVmX25ldygpOwotICAgaWYgKHByb2dyZXNzIDwgMTAwKQotICAgICBlaW5h
X3N0cmJ1Zl9hcHBlbmRfcHJpbnRmKGJ1ZmZlciwgIiVzICglZCUlKSAtICVzIiwgdGl0bGUsIHBy
b2dyZXNzLCBBUFBfTkFNRSk7Ci0gICBlbHNlCi0gICAgIGVpbmFfc3RyYnVmX2FwcGVuZF9wcmlu
dGYoYnVmZmVyLCAiJXMgLSAlcyIsIHRpdGxlLCBBUFBfTkFNRSk7Ci0KLSAgIGVsbV93aW5fdGl0
bGVfc2V0KGVsbV93aW5kb3csIGVpbmFfc3RyYnVmX3N0cmluZ19nZXQoYnVmZmVyKSk7Ci0gICBl
aW5hX3N0cmJ1Zl9mcmVlKGJ1ZmZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fdGl0bGVfY2hhbmdl
ZF9jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRf
aW5mbykKLXsKLSAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1
c2VyX2RhdGE7Ci0gICBjb25zdCBjaGFyICp0aXRsZSA9IChjb25zdCBjaGFyICopZXZlbnRfaW5m
bzsKLQotICAgdGl0bGVfc2V0KHdpbmRvdy0+ZWxtX3dpbmRvdywgdGl0bGUsIDEwMCk7Ci19Ci0K
LXN0YXRpYyB2b2lkCi1fdXJsX2NoYW5nZWRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVj
dCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCi17Ci0gICBCcm93c2VyX1dpbmRvdyAqd2lu
ZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotICAgY29uc3QgY2hhciAqdXJsID0g
ZXdrX3ZpZXdfdXJsX2dldCh3aW5kb3ctPmV3a192aWV3KTsKLSAgIGNoYXIgKmNvbnZlcnRlZF91
cmwgPSBlbG1fZW50cnlfdXRmOF90b19tYXJrdXAodXJsKTsKLSAgIGVsbV9lbnRyeV9lbnRyeV9z
ZXQod2luZG93LT51cmxfYmFyLCBjb252ZXJ0ZWRfdXJsKTsKLQotICAgX2ljb25fY2hhbmdlZF9j
Yihld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChld2tfdmlld19jb250ZXh0X2dldChl
d2tfdmlldykpLCB1cmwsIHVzZXJfZGF0YSk7Ci0KLSAgIGZyZWUoY29udmVydGVkX3VybCk7Ci0K
LSAgIHNlYXJjaF9ib3hfaGlkZSh3aW5kb3cpOwotfQotCi1zdGF0aWMgdm9pZAotX2JhY2tfZm9y
d2FyZF9saXN0X2NoYW5nZWRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3Zp
ZXcsIHZvaWQgKmV2ZW50X2luZm8pCi17Ci0gICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJy
b3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotCi0gICAvKiBVcGRhdGUgbmF2aWdhdGlvbiBidXR0
b25zIHN0YXRlICovCi0gICBlbG1fb2JqZWN0X2Rpc2FibGVkX3NldCh3aW5kb3ctPmJhY2tfYnV0
dG9uLCAhZXdrX3ZpZXdfYmFja19wb3NzaWJsZShld2tfdmlldykpOwotICAgZWxtX29iamVjdF9k
aXNhYmxlZF9zZXQod2luZG93LT5mb3J3YXJkX2J1dHRvbiwgIWV3a192aWV3X2ZvcndhcmRfcG9z
c2libGUoZXdrX3ZpZXcpKTsKLX0KLQotc3RhdGljIHZvaWQKLV9wcm9ncmVzc19jYih2b2lkICp1
c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKLXsKLSAg
IEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7Ci0g
ICBkb3VibGUgcHJvZ3Jlc3MgPSAqKGRvdWJsZSAqKWV2ZW50X2luZm87Ci0KLSAgIHRpdGxlX3Nl
dCh3aW5kb3ctPmVsbV93aW5kb3csIGV3a192aWV3X3RpdGxlX2dldCh3aW5kb3ctPmV3a192aWV3
KSwgcHJvZ3Jlc3MgKiAxMDApOwotfQotCi1zdGF0aWMgdm9pZAotX2Vycm9yX2NiKHZvaWQgKnVz
ZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9pbmZvKQotewotICAg
RWluYV9TdHJidWYgKmJ1ZmZlcjsKLSAgIGNvbnN0IEV3a19FcnJvciAqZXJyb3IgPSAoY29uc3Qg
RXdrX0Vycm9yICopZXZlbnRfaW5mbzsKLQotICAgLyogVGhpcyBpcyBhIGNhbmNlbGxhdGlvbiwg
ZG8gbm90IGRpc3BsYXkgdGhlIGVycm9yIHBhZ2UgKi8KLSAgIGlmIChld2tfZXJyb3JfY2FuY2Vs
bGF0aW9uX2dldChlcnJvcikpCi0gICAgIHJldHVybjsKLQotICAgYnVmZmVyID0gZWluYV9zdHJi
dWZfbmV3KCk7Ci0gICBlaW5hX3N0cmJ1Zl9hcHBlbmRfcHJpbnRmKGJ1ZmZlciwKLSAgICAgIjxo
dG1sPjxib2R5PjxkaXYgc3R5bGU9XCJjb2xvcjojZmYwMDAwXCI+RVJST1IhPC9kaXY+PGJyPjxk
aXY+Q29kZTogJWQ8YnI+RGVzY3JpcHRpb246ICVzPGJyPlVSTDogJXM8L2Rpdj48L2JvZHk8L2h0
bWw+IiwKLSAgICAgZXdrX2Vycm9yX2NvZGVfZ2V0KGVycm9yKSwgZXdrX2Vycm9yX2Rlc2NyaXB0
aW9uX2dldChlcnJvciksIGV3a19lcnJvcl91cmxfZ2V0KGVycm9yKSk7Ci0KLSAgIGV3a192aWV3
X2h0bWxfc3RyaW5nX2xvYWQoZXdrX3ZpZXcsIGVpbmFfc3RyYnVmX3N0cmluZ19nZXQoYnVmZmVy
KSwgMCwgZXdrX2Vycm9yX3VybF9nZXQoZXJyb3IpKTsKLSAgIGVpbmFfc3RyYnVmX2ZyZWUoYnVm
ZmVyKTsKLX0KLQotc3RhdGljIHZvaWQKLV9kb3dubG9hZF9yZXF1ZXN0X2NiKEV3a19Eb3dubG9h
ZF9Kb2IgKmRvd25sb2FkLCB2b2lkICp1c2VyX2RhdGEpCi17Ci0gICBCcm93c2VyX1dpbmRvdyAq
d2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotCi0gICBFaW5hX1N0cmJ1ZiAq
ZGVzdGluYXRpb25fcGF0aCA9IGVpbmFfc3RyYnVmX25ldygpOwotCi0gICBjb25zdCBjaGFyICpo
b21lX3BhdGggPSBnZXRlbnYoIkhPTUUiKTsKLSAgIEVpbmFfU3RyaW5nc2hhcmUgKnNhdmVfZmls
ZV9wYXRoID0gX2ZpbGVfZW50cnlfZGlhbG9nX3Nob3cod2luZG93LCAiRE9XTkxPQUQiLCBob21l
X3BhdGggPyBob21lX3BhdGggOiAiL3RtcCIpOwotCi0gICBpZiAoc2F2ZV9maWxlX3BhdGgpCi0g
ICAgIGVpbmFfc3RyYnVmX2FwcGVuZF9wcmludGYoZGVzdGluYXRpb25fcGF0aCwgIiVzIiwgc2F2
ZV9maWxlX3BhdGgpOwotICAgZWxzZQotICAgICBlaW5hX3N0cmJ1Zl9hcHBlbmQoZGVzdGluYXRp
b25fcGF0aCwgIi90bXAiKTsKLQotICAgY29uc3QgY2hhciAqc3VnZ2VzdGVkX25hbWUgPSBld2tf
ZG93bmxvYWRfam9iX3N1Z2dlc3RlZF9maWxlbmFtZV9nZXQoZG93bmxvYWQpOwotICAgaWYgKHN1
Z2dlc3RlZF9uYW1lICYmICpzdWdnZXN0ZWRfbmFtZSkKLSAgICAgZWluYV9zdHJidWZfYXBwZW5k
X3ByaW50ZihkZXN0aW5hdGlvbl9wYXRoLCAiLyVzIiwgc3VnZ2VzdGVkX25hbWUpOwotICAgZWxz
ZSB7Ci0gICAgIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGZpbGUgbmFtZSBzaW5jZSBubyBuYW1lIHdh
cyBzdWdnZXN0ZWQuCi0gICAgIGVpbmFfc3RyYnVmX2FwcGVuZChkZXN0aW5hdGlvbl9wYXRoLCAi
L2Rvd25sb2FkZWQtZmlsZS5YWFhYWFgiKTsKLSAgICAgY2hhciAqdXJsID0gTlVMTDsKLSAgICAg
dXJsID0gZWluYV9zdHJidWZfc3RyaW5nX3N0ZWFsKGRlc3RpbmF0aW9uX3BhdGgpOwotICAgICBp
ZiAobWtzdGVtcCh1cmwpID09IC0xKSB7Ci0gICAgICAgRVJST1IoIkNvdWxkIG5vdCBnZW5lcmF0
ZSBhIHVuaXF1ZSBmaWxlIG5hbWUuIik7Ci0gICAgICAgcmV0dXJuOwotICAgICB9Ci0gICAgIGVp
bmFfc3RyYnVmX2FwcGVuZChkZXN0aW5hdGlvbl9wYXRoLCB1cmwpOwotICAgfQotCi0gICBld2tf
ZG93bmxvYWRfam9iX2Rlc3RpbmF0aW9uX3NldChkb3dubG9hZCwgZWluYV9zdHJidWZfc3RyaW5n
X2dldChkZXN0aW5hdGlvbl9wYXRoKSk7Ci0gICBJTkZPKCJEb3dubG9hZGluZzogJXMiLCBlaW5h
X3N0cmJ1Zl9zdHJpbmdfZ2V0KGRlc3RpbmF0aW9uX3BhdGgpKTsKLSAgIGVpbmFfc3RyYnVmX2Zy
ZWUoZGVzdGluYXRpb25fcGF0aCk7Ci0gICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzYXZlX2ZpbGVf
cGF0aCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9maWxlcGlja2VyX3BhcmVudF9kZWxldGlvbl9jYih2
b2lkICp1c2VyX2RhdGEsIEV2YXMgKmV2YXMsIEV2YXNfT2JqZWN0ICplbG1fd2luZG93LCB2b2lk
ICpldmVudCk7Ci0KLXN0YXRpYyB2b2lkIGNsb3NlX2ZpbGVfcGlja2VyKEZpbGVfU2VsZWN0b3Jf
RGF0YSAqZnNfZGF0YSkKLXsKLSAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChmc19k
YXRhLT5wYXJlbnQtPmVsbV93aW5kb3csIEVWQVNfQ0FMTEJBQ0tfREVMLCBfZmlsZXBpY2tlcl9w
YXJlbnRfZGVsZXRpb25fY2IpOwotICAgZXZhc19vYmplY3RfZGVsKGZzX2RhdGEtPmVsbV93aW5k
b3cpOwotICAgZXdrX29iamVjdF91bnJlZihmc19kYXRhLT5yZXF1ZXN0KTsKLSAgIGZyZWUoZnNf
ZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fZmlsZXBpY2tlcl9wYXJlbnRfZGVsZXRpb25fY2Io
dm9pZCAqdXNlcl9kYXRhLCBFdmFzICpldmFzLCBFdmFzX09iamVjdCAqZWxtX3dpbmRvdywgdm9p
ZCAqZXZlbnQpCi17Ci0gICBjbG9zZV9maWxlX3BpY2tlcigoRmlsZV9TZWxlY3Rvcl9EYXRhICop
dXNlcl9kYXRhKTsKLX0KLQotc3RhdGljIHZvaWQKLV9maWxlcGlja2VyX2RlbGV0aW9uX2NiKHZv
aWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmVsbV93aW5kb3csIHZvaWQgKmV2ZW50X2luZm8p
Ci17Ci0gICBjbG9zZV9maWxlX3BpY2tlcigoRmlsZV9TZWxlY3Rvcl9EYXRhICopdXNlcl9kYXRh
KTsKLX0KLQotc3RhdGljIHZvaWQKLV9maWxlc2VsZWN0b3JfZG9uZV9jYih2b2lkICp1c2VyX2Rh
dGEsIEV2YXNfT2JqZWN0ICpmaWxlX3NlbGVjdG9yLCB2b2lkICpldmVudF9pbmZvKQotewotICAg
RmlsZV9TZWxlY3Rvcl9EYXRhICpmc19kYXRhID0gKEZpbGVfU2VsZWN0b3JfRGF0YSAqKXVzZXJf
ZGF0YTsKLQotICAgY29uc3QgY2hhciAqc2VsZWN0ZWQgPSAoY29uc3QgY2hhciAqKWV2ZW50X2lu
Zm87Ci0gICBpZiAoc2VsZWN0ZWQgJiYgKnNlbGVjdGVkKQotICAgICBld2tfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZmlsZV9jaG9vc2UoZnNfZGF0YS0+cmVxdWVzdCwgc2VsZWN0ZWQpOwotCi0gICBj
bG9zZV9maWxlX3BpY2tlcihmc19kYXRhKTsKLX0KLQotc3RhdGljIHZvaWQKLV9maWxlX2Nob29z
ZXJfcmVxdWVzdF9jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9p
ZCAqZXZlbnRfaW5mbykKLXsKLSAgIEV2YXNfT2JqZWN0ICpiZzsKLSAgIEJyb3dzZXJfV2luZG93
ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7Ci0gICBFd2tfRmlsZV9DaG9v
c2VyX1JlcXVlc3QgKnJlcXVlc3QgPSAoRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0ICopZXZlbnRf
aW5mbzsKLQotICAgLy8gU2hvdyBiYXNpYyBmaWxlIHBpY2tlciB3aGljaCBkb2VzIG5vdCBjdXJy
ZW50bHkgc3VwcG9ydCBtdWx0aXBsZSBmaWxlcwotICAgLy8gb3IgTUlNRSB0eXBlIGZpbHRlcmlu
Zy4KLSAgIEV2YXNfT2JqZWN0ICplbG1fd2luZG93ID0gZWxtX3dpbl9hZGQod2luZG93LT5lbG1f
d2luZG93LCAiZmlsZS1waWNrZXItd2luZG93IiwgRUxNX1dJTl9ESUFMT0dfQkFTSUMpOwotICAg
ZWxtX3dpbl90aXRsZV9zZXQoZWxtX3dpbmRvdywgIkZpbGUgcGlja2VyIik7Ci0gICBlbG1fd2lu
X21vZGFsX3NldChlbG1fd2luZG93LCBFSU5BX1RSVUUpOwotCi0gICBiZyA9IGVsbV9iZ19hZGQo
ZWxtX3dpbmRvdyk7Ci0gICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChiZywgRVZB
U19ISU5UX0VYUEFORCwgRVZBU19ISU5UX0VYUEFORCk7Ci0gICBlbG1fd2luX3Jlc2l6ZV9vYmpl
Y3RfYWRkKGVsbV93aW5kb3csIGJnKTsKLSAgIGV2YXNfb2JqZWN0X3Nob3coYmcpOwotCi0gICBG
aWxlX1NlbGVjdG9yX0RhdGEgKmZzX2RhdGEgPSAoRmlsZV9TZWxlY3Rvcl9EYXRhICopbWFsbG9j
KHNpemVvZihGaWxlX1NlbGVjdG9yX0RhdGEpKTsKLSAgIGZzX2RhdGEtPnBhcmVudCA9IHdpbmRv
dzsKLSAgIGZzX2RhdGEtPmVsbV93aW5kb3cgPSBlbG1fd2luZG93OwotICAgZnNfZGF0YS0+cmVx
dWVzdCA9IGV3a19vYmplY3RfcmVmKHJlcXVlc3QpOwotICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfYWRkKGVsbV93aW5kb3csICJkZWxldGUscmVxdWVzdCIsIF9maWxlcGlja2VyX2RlbGV0
aW9uX2NiLCBmc19kYXRhKTsKLSAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZCh3aW5k
b3ctPmVsbV93aW5kb3csIEVWQVNfQ0FMTEJBQ0tfREVMLCBfZmlsZXBpY2tlcl9wYXJlbnRfZGVs
ZXRpb25fY2IsIGZzX2RhdGEpOwotCi0gICBFdmFzX09iamVjdCAqZmlsZV9zZWxlY3RvciA9IGVs
bV9maWxlc2VsZWN0b3JfYWRkKGVsbV93aW5kb3cpOwotICAgY29uc3QgY2hhciAqaG9tZV9wYXRo
ID0gZ2V0ZW52KCJIT01FIik7Ci0gICBlbG1fZmlsZXNlbGVjdG9yX3BhdGhfc2V0KGZpbGVfc2Vs
ZWN0b3IsIGhvbWVfcGF0aCA/IGhvbWVfcGF0aCA6ICIvaG9tZSIpOwotICAgZXZhc19vYmplY3Rf
c2l6ZV9oaW50X3dlaWdodF9zZXQoZmlsZV9zZWxlY3RvciwgRVZBU19ISU5UX0VYUEFORCwgRVZB
U19ISU5UX0VYUEFORCk7Ci0gICBlbG1fd2luX3Jlc2l6ZV9vYmplY3RfYWRkKGVsbV93aW5kb3cs
IGZpbGVfc2VsZWN0b3IpOwotICAgZXZhc19vYmplY3Rfc2hvdyhmaWxlX3NlbGVjdG9yKTsKLQot
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKGZpbGVfc2VsZWN0b3IsICJkb25lIiwg
X2ZpbGVzZWxlY3Rvcl9kb25lX2NiLCBmc19kYXRhKTsKLQotICAgaW50IHgsIHksIHdpZHRoLCBo
ZWlnaHQ7Ci0gICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQod2luZG93LT5lbG1fd2luZG93LCAm
eCwgJnksICZ3aWR0aCwgJmhlaWdodCk7Ci0KLSAgIGludCBwaWNrZXJfeCA9IHggKyB3aWR0aCAv
IDIgLSBjb2xvcl9waWNrZXJfd2lkdGggLyAyOwotICAgaW50IHBpY2tlcl95ID0geSArIGhlaWdo
dCAvIDIgLSBjb2xvcl9waWNrZXJfaGVpZ2h0IC8gMjsKLSAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5
X3NldCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3csIHBpY2tlcl94
LCBwaWNrZXJfeSwKLSAgICAgY29sb3JfcGlja2VyX3dpZHRoLCBjb2xvcl9waWNrZXJfaGVpZ2h0
KTsKLX0KLQotc3RhdGljIHZvaWQKLV9kb3dubG9hZF9maW5pc2hlZF9jYihFd2tfRG93bmxvYWRf
Sm9iICpkb3dubG9hZCwgdm9pZCAqdXNlcl9kYXRhKQotewotICAgSU5GTygiRG93bmxvYWQgZmlu
aXNoZWQ6ICVzIiwgIGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fZ2V0KGRvd25sb2FkKSk7
Ci19Ci0KLXN0YXRpYyB2b2lkCi1fZG93bmxvYWRfZmFpbGVkX2NiKEV3a19Eb3dubG9hZF9Kb2Jf
RXJyb3IgKmRvd25sb2FkX2Vycm9yLCB2b2lkICp1c2VyX2RhdGEpCi17Ci0gICBFd2tfRXJyb3Ig
KmVycm9yID0gZG93bmxvYWRfZXJyb3ItPmVycm9yOwotCi0gICBJTkZPKCJEb3dubG9hZCBmYWls
ZWQhIEVycm9yIGNvZGU6ICVkLCBFcnJvciBkZXNjcmlwdGlvbjogJXMsIEVycm9yIFVSTDogJXMi
LCBld2tfZXJyb3JfY29kZV9nZXQoZXJyb3IpLCBld2tfZXJyb3JfZGVzY3JpcHRpb25fZ2V0KGVy
cm9yKSwgZXdrX2Vycm9yX3VybF9nZXQoZXJyb3IpKTsKLX0KLQotc3RhdGljIHZvaWQKLV9jb2xv
cl9jaGFuZ2VkX2NiKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2lu
Zm8pCi17Ci0gICBpbnQgciwgZywgYiwgYTsKLQotICAgZWxtX2NvbG9yc2VsZWN0b3JfY29sb3Jf
Z2V0KG9iaiwgJnIsICZnLCAmYiwgJmEpOwotICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KGRhdGEs
IHIsIGcsIGIsIGEpOwotfQotCi1zdGF0aWMgdm9pZAotX2NvbG9yX2l0ZW1fc2VsZWN0ZWRfY2Io
dm9pZCAqZGF0YSwgRXZhc19PYmplY3QgKm9iaiwgdm9pZCAqZXZlbnRfaW5mbykKLXsKLSAgIGlu
dCByLCBnLCBiLCBhOwotICAgRWxtX09iamVjdF9JdGVtICpjb2xvcl9pdGVtID0gKEVsbV9PYmpl
Y3RfSXRlbSAqKWV2ZW50X2luZm87Ci0KLSAgIGVsbV9jb2xvcnNlbGVjdG9yX3BhbGV0dGVfaXRl
bV9jb2xvcl9nZXQoY29sb3JfaXRlbSwgJnIsICZnLCAmYiwgJmEpOwotICAgZXZhc19vYmplY3Rf
Y29sb3Jfc2V0KGRhdGEsIHIsIGcsIGIsIGEpOwotfQotCi1zdGF0aWMgdm9pZAotX2NvbG9yX3Bp
Y2tlcl9va19jbGlja2VkX2NiKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2
ZW50X2luZm8pCi17Ci0gICBpbnQgciwgZywgYiwgYTsKLSAgIENvbG9yX1NlbGVjdG9yICpjb2xv
cl9zZWxlY3RvciA9IChDb2xvcl9TZWxlY3RvciAqKWRhdGE7Ci0KLSAgIGVsbV9jb2xvcnNlbGVj
dG9yX2NvbG9yX2dldChjb2xvcl9zZWxlY3Rvci0+ZWxtX3NlbGVjdG9yLCAmciwgJmcsICZiLCAm
YSk7Ci0gICBld2tfY29sb3JfcGlja2VyX2NvbG9yX3NldChjb2xvcl9zZWxlY3Rvci0+ZXdrX3Bp
Y2tlciwgciwgZywgYiwgYSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fY29sb3JfcGlja2VyX2NhbmNl
bF9jbGlja2VkX2NiKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2lu
Zm8pCi17Ci0gICBpbnQgciwgZywgYiwgYTsKLQotICAgZXdrX2NvbG9yX3BpY2tlcl9jb2xvcl9n
ZXQoZGF0YSwgJnIsICZnLCAmYiwgJmEpOwotICAgZXdrX2NvbG9yX3BpY2tlcl9jb2xvcl9zZXQo
ZGF0YSwgciwgZywgYiwgYSk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wKLV9jb2xvcl9waWNrZXJf
ZGlzbWlzc19jYihFd2tfVmlld19TbWFydF9EYXRhICpzZCkKLXsKLSAgIEJyb3dzZXJfV2luZG93
ICp3aW5kb3cgPSB3aW5kb3dfZmluZF93aXRoX2V3a192aWV3KHNkLT5zZWxmKTsKLQotICAgZXZh
c19vYmplY3RfZGVsKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7
Ci0gICB3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3cgPSBOVUxMOwot
Ci0gICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1zdGF0aWMgRWluYV9Cb29sCi1fY29sb3JfcGlj
a2VyX3JlcXVlc3RfY2IoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEV3a19Db2xvcl9QaWNrZXIg
KmNvbG9yX3BpY2tlcikKLXsKLSAgIGludCByLCBnLCBiLCBhOwotICAgRXZhc19PYmplY3QgKmJh
Y2tncm91bmQsICpyZWN0LCAqYm94LCAqYnV0dG9uX2JveCwgKnJlY3RfZnJhbWUsICpjc19mcmFt
ZSwgKm9rX2J1dHRvbiwgKmNhbmNlbF9idXR0b247Ci0KLSAgIEJyb3dzZXJfV2luZG93ICp3aW5k
b3cgPSB3aW5kb3dfZmluZF93aXRoX2V3a192aWV3KHNkLT5zZWxmKTsKLSAgIHdpbmRvdy0+Y29s
b3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyA9IGVsbV93aW5fYWRkKHdpbmRvdy0+ZWxt
X3dpbmRvdywgImNvbG9yIHNlbGVjdG9yIiwgRUxNX1dJTl9CQVNJQyk7Ci0gICB3aW5kb3ctPmNv
bG9yX3NlbGVjdG9yLmV3a19waWNrZXIgPSBjb2xvcl9waWNrZXI7Ci0KLSAgIGVsbV93aW5fdGl0
bGVfc2V0KHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdywgIkNvbG9y
IHNlbGVjdG9yIik7Ci0KLSAgIC8qIFNob3cgY29sb3IgdmlldyAqLwotICAgYmFja2dyb3VuZCA9
IGVsbV9iZ19hZGQod2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93KTsK
LSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KGJhY2tncm91bmQsIEVWQVNfSElO
VF9FWFBBTkQsIEVWQVNfSElOVF9FWFBBTkQpOwotICAgZWxtX3dpbl9yZXNpemVfb2JqZWN0X2Fk
ZCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3csIGJhY2tncm91bmQp
OwotICAgZXZhc19vYmplY3Rfc2hvdyhiYWNrZ3JvdW5kKTsKLQotICAgYm94ID0gZWxtX2JveF9h
ZGQod2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93KTsKLSAgIGV2YXNf
b2JqZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KGJveCwgRVZBU19ISU5UX0VYUEFORCwgRVZBU19I
SU5UX0VYUEFORCk7Ci0gICBlbG1fd2luX3Jlc2l6ZV9vYmplY3RfYWRkKHdpbmRvdy0+Y29sb3Jf
c2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdywgYm94KTsKLSAgIGV2YXNfb2JqZWN0X3Nob3co
Ym94KTsKLQotICAgcmVjdF9mcmFtZSA9IGVsbV9mcmFtZV9hZGQod2luZG93LT5jb2xvcl9zZWxl
Y3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93KTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWln
aHRfc2V0KHJlY3RfZnJhbWUsIEVWQVNfSElOVF9FWFBBTkQsIDAuMyk7Ci0gICBldmFzX29iamVj
dF9zaXplX2hpbnRfYWxpZ25fc2V0KHJlY3RfZnJhbWUsIEVWQVNfSElOVF9GSUxMLCBFVkFTX0hJ
TlRfRklMTCk7Ci0gICBlbG1fb2JqZWN0X3RleHRfc2V0KHJlY3RfZnJhbWUsICJDb2xvciBWaWV3
Iik7Ci0gICBlbG1fYm94X3BhY2tfZW5kKGJveCwgcmVjdF9mcmFtZSk7Ci0gICBldmFzX29iamVj
dF9zaG93KHJlY3RfZnJhbWUpOwotCi0gICByZWN0ID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2Fk
ZChldmFzX29iamVjdF9ldmFzX2dldCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rv
cl93aW5kb3cpKTsKLSAgIGVsbV9vYmplY3RfY29udGVudF9zZXQocmVjdF9mcmFtZSwgcmVjdCk7
Ci0gICBld2tfY29sb3JfcGlja2VyX2NvbG9yX2dldCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmV3
a19waWNrZXIsICZyLCAmZywgJmIsICZhKTsKLSAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChyZWN0
LCByLCBnLCBiLCBhKTsKLSAgIGV2YXNfb2JqZWN0X3Nob3cocmVjdCk7Ci0KLSAgIC8qIFNob3cg
Y29sb3Igc2VsZWN0b3IgKi8KLSAgIGNzX2ZyYW1lID0gZWxtX2ZyYW1lX2FkZCh3aW5kb3ctPmNv
bG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3cpOwotICAgZXZhc19vYmplY3Rfc2l6ZV9o
aW50X3dlaWdodF9zZXQoY3NfZnJhbWUsIEVWQVNfSElOVF9FWFBBTkQsIDAuNyk7Ci0gICBldmFz
X29iamVjdF9zaXplX2hpbnRfYWxpZ25fc2V0KGNzX2ZyYW1lLCBFVkFTX0hJTlRfRklMTCwgRVZB
U19ISU5UX0ZJTEwpOwotICAgZWxtX29iamVjdF90ZXh0X3NldChjc19mcmFtZSwgIkNvbG9yIFNl
bGVjdG9yIik7Ci0gICBlbG1fYm94X3BhY2tfZW5kKGJveCwgY3NfZnJhbWUpOwotICAgZXZhc19v
YmplY3Rfc2hvdyhjc19mcmFtZSk7Ci0KLSAgIHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3Nl
bGVjdG9yID0gZWxtX2NvbG9yc2VsZWN0b3JfYWRkKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxt
X3NlbGVjdG9yX3dpbmRvdyk7Ci0gICBlbG1fb2JqZWN0X2NvbnRlbnRfc2V0KGNzX2ZyYW1lLCB3
aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcik7Ci0gICBldmFzX29iamVjdF9zaG93
KHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yKTsKLQotICAgLyogT0ssIENhbmNl
bCBCdXR0b25zICovCi0gICBidXR0b25fYm94ID0gZWxtX2JveF9hZGQod2luZG93LT5jb2xvcl9z
ZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93KTsKLSAgIGVsbV9ib3hfaG9yaXpvbnRhbF9zZXQo
YnV0dG9uX2JveCwgRUlOQV9UUlVFKTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9taW5fc2V0
KGJ1dHRvbl9ib3gsIDIwMCwgNTApOwotICAgZWxtX2JveF9wYWNrX2VuZChib3gsIGJ1dHRvbl9i
b3gpOwotICAgZXZhc19vYmplY3Rfc2hvdyhidXR0b25fYm94KTsKLQotICAgb2tfYnV0dG9uID0g
ZWxtX2J1dHRvbl9hZGQod2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93
KTsKLSAgIGVsbV9vYmplY3RfdGV4dF9zZXQob2tfYnV0dG9uLCAiT0siKTsKLSAgIGVsbV9ib3hf
cGFja19lbmQoYnV0dG9uX2JveCwgb2tfYnV0dG9uKTsKLSAgIGV2YXNfb2JqZWN0X3Nob3cob2tf
YnV0dG9uKTsKLQotICAgY2FuY2VsX2J1dHRvbiA9IGVsbV9idXR0b25fYWRkKHdpbmRvdy0+Y29s
b3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7Ci0gICBlbG1fb2JqZWN0X3RleHRfc2V0
KGNhbmNlbF9idXR0b24sICJDYW5jZWwiKTsKLSAgIGVsbV9ib3hfcGFja19lbmQoYnV0dG9uX2Jv
eCwgY2FuY2VsX2J1dHRvbik7Ci0gICBldmFzX29iamVjdF9zaG93KGNhbmNlbF9idXR0b24pOwot
Ci0gICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQob2tfYnV0dG9uLCAiY2xpY2tlZCIs
IF9jb2xvcl9waWNrZXJfb2tfY2xpY2tlZF9jYiwgJih3aW5kb3ctPmNvbG9yX3NlbGVjdG9yKSk7
Ci0gICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoY2FuY2VsX2J1dHRvbiwgImNsaWNr
ZWQiLCBfY29sb3JfcGlja2VyX2NhbmNlbF9jbGlja2VkX2NiLAotICAgICB3aW5kb3ctPmNvbG9y
X3NlbGVjdG9yLmV3a19waWNrZXIpOwotICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRk
KHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdywgImRlbGV0ZSxyZXF1
ZXN0IiwKLSAgICAgX2NvbG9yX3BpY2tlcl9jYW5jZWxfY2xpY2tlZF9jYiwgd2luZG93LT5jb2xv
cl9zZWxlY3Rvci5ld2tfcGlja2VyKTsKLSAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Fk
ZCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3RvciwgImNoYW5nZWQiLCBfY29sb3Jf
Y2hhbmdlZF9jYiwgcmVjdCk7Ci0gICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2lu
ZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3IsICJjb2xvcixpdGVtLHNlbGVjdGVkIiwg
X2NvbG9yX2l0ZW1fc2VsZWN0ZWRfY2IsCi0gICAgIHJlY3QpOwotCi0gICBpbnQgeCwgeSwgd2lk
dGgsIGhlaWdodDsKLSAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldCh3aW5kb3ctPmVsbV93aW5k
b3csICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKLQotICAgZWxtX3dpbl9jZW50ZXIod2luZG93
LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93LCBFSU5BX1RSVUUsIEVJTkFfVFJV
RSk7Ci0gICBldmFzX29iamVjdF9yZXNpemUod2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2Vs
ZWN0b3Jfd2luZG93LCAzNTAsIDUwMCk7Ci0gICBldmFzX29iamVjdF9zaG93KHdpbmRvdy0+Y29s
b3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7Ci0KLSAgIHJldHVybiBFSU5BX1RSVUU7
Ci19Ci0KLXN0YXRpYyBpbnQKLXF1aXQoRWluYV9Cb29sIHN1Y2Nlc3MsIGNvbnN0IGNoYXIgKm1z
ZykKLXsKLSAgIGlmIChtc2cpCi0gICAgIHN1Y2Nlc3MgPyBJTkZPKCIlcyIsIG1zZykgOiBFUlJP
UigiJXMiLCBtc2cpOwotCi0gICBld2tfb2JqZWN0X3VucmVmKGNvbmZpZ3VyYXRpb24oKSk7Ci0g
ICBld2tfc2h1dGRvd24oKTsKLSAgIGVsbV9zaHV0ZG93bigpOwotICAgZWluYV9sb2dfZG9tYWlu
X3VucmVnaXN0ZXIoX2xvZ19kb21haW5faWQpOwotCi0gICBpZiAoIXN1Y2Nlc3MpCi0gICAgIHJl
dHVybiBFWElUX0ZBSUxVUkU7Ci0KLSAgIHJldHVybiBFWElUX1NVQ0NFU1M7Ci19Ci0KLXN0YXRp
YyBFaW5hX0Jvb2wKLWhhc19zY2hlbWUoY29uc3QgY2hhciAqdXJsKQotewotICAgcmV0dXJuICEh
c3Ryc3RyKHVybCwgIjovLyIpOwotfQotCi1zdGF0aWMgY2hhciAqCi11cmxfZnJvbV91c2VyX2lu
cHV0KGNvbnN0IGNoYXIgKmFyZykKLXsKLSAgIC8qIElmIGl0IGlzIGFscmVhZHkgYSBVUkwsIHJl
dHVybiB0aGUgYXJndW1lbnQgYXMgaXMuICovCi0gICBpZiAoaGFzX3NjaGVtZShhcmcpIHx8IGVp
bmFfc3RyX2hhc19wcmVmaXgoYXJnLCBKQVZBU0NSSVBUX1NDSEVNRSkgfHwgIXN0cmNhc2VjbXAo
YXJnLCAiYWJvdXQ6YmxhbmsiKSkKLSAgICAgcmV0dXJuIHN0cmR1cChhcmcpOwotCi0gICBFaW5h
X1N0cmJ1ZiAqYnVmID0gZWluYV9zdHJidWZfbWFuYWdlX25ldyhlaW5hX2ZpbGVfcGF0aF9zYW5p
dGl6ZShhcmcpKTsKLQotICAgLyogQ2hlY2sgaWYgdGhlIHBhdGggZXhpc3RzLiAqLwotICAgaWYg
KGVjb3JlX2ZpbGVfZXhpc3RzKGVpbmFfc3RyYnVmX3N0cmluZ19nZXQoYnVmKSkpIHsKLSAgICAg
LyogRmlsZSBleGlzdHMsIGNvbnZlcnQgbG9jYWwgcGF0aCB0byBhIFVSTC4gKi8KLSAgICAgZWlu
YV9zdHJidWZfcHJlcGVuZChidWYsIEZJTEVfU0NIRU1FKTsKLSAgIH0gZWxzZSB7Ci0gICAgIC8q
IFRoZSBwYXRoIGRvZXMgbm90IGV4aXN0LCBjb252ZXJ0IGl0IHRvIGEgVVJMIGJ5Ci0gICAgICAg
IHByZXBlbmRpbmcgaHR0cDovLyBzY2hlbWU6Ci0gICAgICAgIHd3dy5nb29nbGUuY29tIC0+IGh0
dHA6Ly93d3cuZ29vZ2xlLmNvbSAqLwotICAgICBlaW5hX3N0cmJ1Zl9zdHJpbmdfZnJlZShidWYp
OwotICAgICBlaW5hX3N0cmJ1Zl9hcHBlbmRfcHJpbnRmKGJ1ZiwgIiVzJXMiLCBIVFRQX1NDSEVN
RSwgYXJnKTsKLSAgIH0KLSAgIGNoYXIgKnVybCA9IGVpbmFfc3RyYnVmX3N0cmluZ19zdGVhbChi
dWYpOwotICAgZWluYV9zdHJidWZfZnJlZShidWYpOwotCi0gICByZXR1cm4gdXJsOwotfQotCi1z
dGF0aWMgRWluYV9Cb29sCi11cmxfbG9hZF9mcm9tX3VzZXJfaW5wdXQoRXZhc19PYmplY3QgKmV3
a192aWV3LCBjb25zdCBjaGFyICp1cmwpCi17Ci0gICBpZiAoIWV3a192aWV3IHx8ICF1cmwpCi0g
ICAgIHJldHVybiBFSU5BX0ZBTFNFOwotCi0gICBpZiAoZWluYV9zdHJfaGFzX3ByZWZpeCh1cmws
IEpBVkFTQ1JJUFRfU0NIRU1FKSkKLSAgICAgcmV0dXJuIGV3a192aWV3X3NjcmlwdF9leGVjdXRl
KGV3a192aWV3LCBzdHJzdHIodXJsLCBKQVZBU0NSSVBUX1NDSEVNRSksIDAsIDApOwotCi0gICBy
ZXR1cm4gZXdrX3ZpZXdfdXJsX3NldChld2tfdmlldywgdXJsKTsKLX0KLQotc3RhdGljIHZvaWQK
LV91cmxfYmFyX2FjdGl2YXRlZF9jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICp1cmxf
YmFyLCB2b2lkICpldmVudF9pbmZvKQotewotICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChC
cm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKLQotICAgY29uc3QgY2hhciAqbWFya3VwX3VybCA9
IGVsbV9lbnRyeV9lbnRyeV9nZXQodXJsX2Jhcik7Ci0gICBjaGFyICp1c2VyX3VybCA9IGVsbV9l
bnRyeV9tYXJrdXBfdG9fdXRmOChtYXJrdXBfdXJsKTsKLSAgIGNoYXIgKnVybCA9IHVybF9mcm9t
X3VzZXJfaW5wdXQodXNlcl91cmwpOwotICAgdXJsX2xvYWRfZnJvbV91c2VyX2lucHV0KHdpbmRv
dy0+ZXdrX3ZpZXcsIHVybCk7Ci0KLSAgIGZyZWUodXNlcl91cmwpOwotICAgZnJlZSh1cmwpOwot
Ci0gICAvKiBHaXZlIGZvY3VzIGJhY2sgdG8gdGhlIHZpZXcgKi8KLSAgIHZpZXdfZm9jdXNfc2V0
KHdpbmRvdywgRUlOQV9UUlVFKTsKLX0KLQotc3RhdGljIHZvaWQKLV91cmxfYmFyX2NsaWNrZWRf
Y2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqdXJsX2Jhciwgdm9pZCAqZXZlbnRfaW5m
bykKLXsKLSAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2Vy
X2RhdGE7Ci0KLSAgIC8qIEdyYWIgZm9jdXMgZnJvbSB0aGUgdmlldyAqLwotICAgZXZhc19vYmpl
Y3RfZm9jdXNfc2V0KHdpbmRvdy0+ZXdrX3ZpZXcsIEVJTkFfRkFMU0UpOwotICAgZWxtX29iamVj
dF9mb2N1c19zZXQodXJsX2JhciwgRUlOQV9UUlVFKTsKLX0KLQotc3RhdGljIHZvaWQKLV9zZWFy
Y2hfZmllbGRfYWJvcnRlZF9jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpzZWFyY2hf
ZmllbGQsIHZvaWQgKmV2ZW50X2luZm8pCi17Ci0gICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0g
KEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotICAgc2VhcmNoX2JveF9oaWRlKHdpbmRvdyk7
Ci0KLSAgIC8qIEdpdmUgZm9jdXMgYmFjayB0byB0aGUgdmlldyAqLwotICAgdmlld19mb2N1c19z
ZXQod2luZG93LCBFSU5BX1RSVUUpOwotfQotCi1zdGF0aWMgdm9pZAotX3NlYXJjaF9maWVsZF9h
Y3RpdmF0ZWRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqc2VhcmNoX2ZpZWxkLCB2
b2lkICpldmVudF9pbmZvKQotewotICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2Vy
X1dpbmRvdyAqKXVzZXJfZGF0YTsKLQotICAgY29uc3QgY2hhciAqbWFya3VwX3RleHQgPSBlbG1f
ZW50cnlfZW50cnlfZ2V0KHNlYXJjaF9maWVsZCk7Ci0gICBjaGFyICp0ZXh0ID0gZWxtX2VudHJ5
X21hcmt1cF90b191dGY4KG1hcmt1cF90ZXh0KTsKLSAgIGV3a192aWV3X3RleHRfZmluZCh3aW5k
b3ctPmV3a192aWV3LCB0ZXh0LCBzZWFyY2hfZmxhZ3MsIE1BWF9TRUFSQ0hfQ09VTlQpOwotICAg
ZnJlZSh0ZXh0KTsKLQotICAgLyogR3JhYiBmb2N1cyBmcm9tIHRoZSB2aWV3ICovCi0gICBldmFz
X29iamVjdF9mb2N1c19zZXQod2luZG93LT5ld2tfdmlldywgRUlOQV9GQUxTRSk7Ci0gICBlbG1f
b2JqZWN0X2ZvY3VzX3NldChzZWFyY2hfZmllbGQsIEVJTkFfVFJVRSk7Ci19Ci0KLXN0YXRpYyB2
b2lkCi1fc2VhcmNoX2ZpZWxkX2NsaWNrZWRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVj
dCAqc2VhcmNoX2ZpZWxkLCB2b2lkICpldmVudF9pbmZvKQotewotICAgQnJvd3Nlcl9XaW5kb3cg
KndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKLQotICAgLyogR3JhYiBmb2N1
cyBmcm9tIHRoZSB2aWV3ICovCi0gICBldmFzX29iamVjdF9mb2N1c19zZXQod2luZG93LT5ld2tf
dmlldywgRUlOQV9GQUxTRSk7Ci0gICBlbG1fb2JqZWN0X2ZvY3VzX3NldChzZWFyY2hfZmllbGQs
IEVJTkFfVFJVRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fYmFja19idXR0b25fY2xpY2tlZF9jYih2
b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpiYWNrX2J1dHRvbiwgdm9pZCAqZXZlbnRfaW5m
bykKLXsKLSAgIGlmIChsb25ncHJlc3NfZW5hYmxlZCkKLSAgICAgcmV0dXJuOwotCi0gICBCcm93
c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotCi0gICBl
d2tfdmlld19iYWNrKHdpbmRvdy0+ZXdrX3ZpZXcpOwotICAgLyogVXBkYXRlIGJhY2sgYnV0dG9u
IHN0YXRlICovCi0gICBlbG1fb2JqZWN0X2Rpc2FibGVkX3NldChiYWNrX2J1dHRvbiwgIWV3a192
aWV3X2JhY2tfcG9zc2libGUod2luZG93LT5ld2tfdmlldykpOwotfQotCi1zdGF0aWMgdm9pZAot
X2ZvcndhcmRfYnV0dG9uX2NsaWNrZWRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAq
Zm9yd2FyZF9idXR0b24sIHZvaWQgKmV2ZW50X2luZm8pCi17Ci0gICBpZiAobG9uZ3ByZXNzX2Vu
YWJsZWQpCi0gICAgIHJldHVybjsKLQotICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93
c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKLQotICAgZXdrX3ZpZXdfZm9yd2FyZCh3aW5kb3ctPmV3
a192aWV3KTsKLSAgIC8qIFVwZGF0ZSBmb3J3YXJkIGJ1dHRvbiBzdGF0ZSAqLwotICAgZWxtX29i
amVjdF9kaXNhYmxlZF9zZXQoZm9yd2FyZF9idXR0b24sICFld2tfdmlld19mb3J3YXJkX3Bvc3Np
YmxlKHdpbmRvdy0+ZXdrX3ZpZXcpKTsKLX0KLQotc3RhdGljIHZvaWQKLV9zZWFyY2hfYmFja3dh
cmRfYnV0dG9uX2NsaWNrZWRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqc2VhcmNo
X2JhY2t3YXJkX2J1dHRvbiwgdm9pZCAqZXZlbnRfaW5mbykKLXsKLSAgIEJyb3dzZXJfV2luZG93
ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7Ci0KLSAgIGNoYXIgKnRleHQg
PSBlbG1fZW50cnlfbWFya3VwX3RvX3V0ZjgoZWxtX2VudHJ5X2VudHJ5X2dldCh3aW5kb3ctPnNl
YXJjaC5zZWFyY2hfZmllbGQpKTsKLSAgIGV3a192aWV3X3RleHRfZmluZCh3aW5kb3ctPmV3a192
aWV3LCB0ZXh0LCBzZWFyY2hfZmxhZ3MgfCBFV0tfRklORF9PUFRJT05TX0JBQ0tXQVJEUywgTUFY
X1NFQVJDSF9DT1VOVCk7Ci0gICBmcmVlKHRleHQpOwotfQotCi1zdGF0aWMgdm9pZAotX3NlYXJj
aF9mb3J3YXJkX2J1dHRvbl9jbGlja2VkX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3Qg
KnNlYXJjaF9mb3J3YXJkX2J1dHRvbiwgdm9pZCAqZXZlbnRfaW5mbykKLXsKLSAgIEJyb3dzZXJf
V2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7Ci0KLSAgIGNoYXIg
KnRleHQgPSBlbG1fZW50cnlfbWFya3VwX3RvX3V0ZjgoZWxtX2VudHJ5X2VudHJ5X2dldCh3aW5k
b3ctPnNlYXJjaC5zZWFyY2hfZmllbGQpKTsKLSAgIGV3a192aWV3X3RleHRfZmluZCh3aW5kb3ct
PmV3a192aWV3LCB0ZXh0LCBzZWFyY2hfZmxhZ3MsIE1BWF9TRUFSQ0hfQ09VTlQpOwotICAgZnJl
ZSh0ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQKLV9zZWFyY2hfY2FzZV9vcHRpb25fY2hhbmdlZCh2
b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpzZWFyY2hfY2FzZV9jaGVja19ib3gsIHZvaWQg
KmV2ZW50X2luZm8pCi17Ci0gICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2lu
ZG93ICopdXNlcl9kYXRhOwotICAgY2hhciAqdGV4dCA9IGVsbV9lbnRyeV9tYXJrdXBfdG9fdXRm
OChlbG1fZW50cnlfZW50cnlfZ2V0KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVsZCkpOwotCi0g
ICAvKiBCaXQgdG9nZ2xlIHRoZSBjYXNlIHNlbnNpdGl2ZSBmbGFnICovCi0gICBzZWFyY2hfZmxh
Z3MgPSBzZWFyY2hfZmxhZ3MgXiBFV0tfRklORF9PUFRJT05TX0NBU0VfSU5TRU5TSVRJVkU7Ci0K
LSAgIGV3a192aWV3X3RleHRfZmluZCh3aW5kb3ctPmV3a192aWV3LCB0ZXh0LCBzZWFyY2hfZmxh
Z3MsIE1BWF9TRUFSQ0hfQ09VTlQpOwotICAgZnJlZSh0ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQK
LV9zZWFyY2hfd29yZF9zdGFydF9vcHRpb25fY2hhbmdlZF9jYih2b2lkICp1c2VyX2RhdGEsIEV2
YXNfT2JqZWN0ICpzZWFyY2hfd29yZF9zdGFydF9jaGVja19ib3gsIHZvaWQgKmV2ZW50X2luZm8p
Ci17Ci0gICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9k
YXRhOwotICAgY2hhciAqdGV4dCA9IGVsbV9lbnRyeV9tYXJrdXBfdG9fdXRmOChlbG1fZW50cnlf
ZW50cnlfZ2V0KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVsZCkpOwotCi0gICAvKiBCaXQgdG9n
Z2xlIHRoZSB3b3JkIHN0YXJ0IGZsYWcgKi8KLSAgIHNlYXJjaF9mbGFncyA9IHNlYXJjaF9mbGFn
cyBeIEVXS19GSU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFM7Ci0KLSAgIGV3a192aWV3X3RleHRf
ZmluZCh3aW5kb3ctPmV3a192aWV3LCB0ZXh0LCBzZWFyY2hfZmxhZ3MsIE1BWF9TRUFSQ0hfQ09V
TlQpOwotICAgZnJlZSh0ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQKLV9zZWFyY2hfY2xvc2VfYnV0
dG9uX2NsaWNrZWRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqc2VhcmNoX2Nsb3Nl
X2J1dHRvbiwgdm9pZCAqZXZlbnRfaW5mbykKLXsKLSAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cg
PSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7Ci0KLSAgIHNlYXJjaF9ib3hfaGlkZSh3aW5k
b3cpOwotfQotCi1zdGF0aWMgdm9pZAotX3JlZnJlc2hfYnV0dG9uX2NsaWNrZWRfY2Iodm9pZCAq
dXNlcl9kYXRhLCBFdmFzX09iamVjdCAqcmVmcmVzaF9idXR0b24sIHZvaWQgKmV2ZW50X2luZm8p
Ci17Ci0gICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9k
YXRhOwotCi0gICBFdmFzICpldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQocmVmcmVzaF9idXR0
b24pOwotICAgRWluYV9Cb29sIGN0cmxQcmVzc2VkID0gZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0
KGV2YXNfa2V5X21vZGlmaWVyX2dldChldmFzKSwgIkNvbnRyb2wiKTsKLSAgIGlmIChjdHJsUHJl
c3NlZCkgewotICAgICBJTkZPKCJSZWxvYWRpbmcgYW5kIGJ5cGFzc2luZyBjYWNoZS4uLiIpOwot
ICAgICBld2tfdmlld19yZWxvYWRfYnlwYXNzX2NhY2hlKHdpbmRvdy0+ZXdrX3ZpZXcpOwotICAg
fSBlbHNlIHsKLSAgICAgSU5GTygiUmVsb2FkaW5nLi4uIik7Ci0gICAgIGV3a192aWV3X3JlbG9h
ZCh3aW5kb3ctPmV3a192aWV3KTsKLSAgIH0KLX0KLQotc3RhdGljIHZvaWQKLV9zdG9wX2J1dHRv
bl9jbGlja2VkX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKnN0b3BfYnV0dG9uLCB2
b2lkICpldmVudF9pbmZvKQotewotICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2Vy
X1dpbmRvdyAqKXVzZXJfZGF0YTsKLQotICAgSU5GTygiU3RvcCB3YXMgUHJlc3NlZC4gQWJvcnRp
bmcgbG9hZC4uLiIpOwotICAgZXdrX3ZpZXdfc3RvcCh3aW5kb3ctPmV3a192aWV3KTsKLX0KLQot
c3RhdGljIGNoYXIgKgotbGlzdF9pdGVtX2xhYmVsX2dldCh2b2lkICpkYXRhLCBFdmFzX09iamVj
dCAqb2JqLCBjb25zdCBjaGFyICpwYXJ0KQotewotICAgaW50IGxlbiA9IHN0cmxlbigoY2hhciAq
KWRhdGEpOwotICAgY2hhciAqYnVmID0gKGNoYXIgKiltYWxsb2Moc2l6ZW9mKGNoYXIpICogKGxl
biArIDEpKTsKLSAgIHNucHJpbnRmKGJ1ZiwgbGVuICsgMSwgIiVzIiwgKGNoYXIgKilkYXRhKTsK
LSAgIHJldHVybiBidWY7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fbGlzdF9pdGVtX3NlbGVjdF9jYih2
b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2luZm8pCi17Ci0g
ICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gZXZhc19vYmplY3RfZGF0YV9nZXQob2JqLCAiQnJv
d3Nlcl9XaW5kb3ciKTsKLSAgIGV3a192aWV3X25hdmlnYXRlX3RvKHdpbmRvdy0+ZXdrX3ZpZXcs
IHVzZXJfZGF0YSk7Ci0gICBoaXN0b3J5X2xpc3RfaGlkZSh3aW5kb3cpOwotICAgZXZhc19vYmpl
Y3RfZGF0YV9kZWwob2JqLCAiQnJvd3Nlcl9XaW5kb3ciKTsKLX0KLQotc3RhdGljIHZvaWQKLW5h
dmlnYXRpb25fYnV0dG9uX2xvbmdwcmVzc19wcm9jZXNzKHZvaWQgKnVzZXJfZGF0YSwgRWluYV9C
b29sIGZvcndhcmRfbmF2aWdhdGlvbl9lbmFibGVkKQotewotICAgaWYgKGxvbmdwcmVzc19lbmFi
bGVkKQotICAgICByZXR1cm47Ci0KLSAgIGxvbmdwcmVzc19lbmFibGVkID0gRUlOQV9UUlVFOwot
ICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsK
LQotICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0ID0gZXdrX3ZpZXdfYmFja19mb3J3YXJk
X2xpc3RfZ2V0KHdpbmRvdy0+ZXdrX3ZpZXcpOwotICAgY29uc3QgRWluYV9MaXN0ICpsOwotICAg
dm9pZCAqZGF0YTsKLSAgIHN0YXRpYyBFbG1fR2VubGlzdF9JdGVtX0NsYXNzICpsaXN0X2l0ZW0g
PSBOVUxMOwotICAgY29uc3QgY2hhciAqdGl0bGUgPSBOVUxMOwotICAgaW50IGl0ZW1fY291bnQ7
Ci0gICBpbnQgeDsKLSAgIGludCB5OwotICAgaW50IHdpZHRoOwotICAgaW50IGhlaWdodDsKLSAg
IHNpemVfdCBpbmRleDsKLQotICAgZXZhc19vYmplY3RfZGF0YV9zZXQod2luZG93LT5oaXN0b3J5
Lmhpc3RvcnlfbGlzdCwgIkJyb3dzZXJfV2luZG93Iiwgd2luZG93KTsKLQotICAgaWYgKGZvcndh
cmRfbmF2aWdhdGlvbl9lbmFibGVkKQotICAgICB3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9saXN0
X2l0ZW1zID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0X2ZvcndhcmRfaXRlbXNfY29weShsaXN0KTsK
LSAgIGVsc2UKLSAgICAgd2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdF9pdGVtcyA9IGV3a19i
YWNrX2ZvcndhcmRfbGlzdF9iYWNrX2l0ZW1zX2NvcHkobGlzdCk7Ci0KLSAgIGlmICghbGlzdF9p
dGVtKSB7Ci0gICAgIGxpc3RfaXRlbSA9IGVsbV9nZW5saXN0X2l0ZW1fY2xhc3NfbmV3KCk7Ci0g
ICAgIGxpc3RfaXRlbS0+aXRlbV9zdHlsZSA9ICJkZWZhdWx0IjsKLSAgICAgbGlzdF9pdGVtLT5m
dW5jLnRleHRfZ2V0ID0gbGlzdF9pdGVtX2xhYmVsX2dldDsKLSAgICAgbGlzdF9pdGVtLT5mdW5j
LmNvbnRlbnRfZ2V0ID0gTlVMTDsKLSAgICAgbGlzdF9pdGVtLT5mdW5jLnN0YXRlX2dldCA9IE5V
TEw7Ci0gICAgIGxpc3RfaXRlbS0+ZnVuYy5kZWwgPSBOVUxMOwotICAgfQotCi0gICBpdGVtX2Nv
dW50ID0gZWluYV9saXN0X2NvdW50KHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3RfaXRlbXMp
OwotICAgSU5GTygibmF2aWdhdGlvbl9idXR0b25fbG9uZ3ByZXNzX3Byb2Nlc3MgOiBJdGVtIGNv
dW50ID0gJWQgZm9yd2FyZF9uYXZpZ2F0aW9uX2VuYWJsZWQgPSAlZCIsIGl0ZW1fY291bnQsIGZv
cndhcmRfbmF2aWdhdGlvbl9lbmFibGVkKTsKLQotICAgRUlOQV9MSVNUX0ZPUkVBQ0god2luZG93
LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdF9pdGVtcywgbCwgZGF0YSkgewotICAgICB0aXRsZSA9IGV3
a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3RpdGxlX2dldChkYXRhKTsKLSAgICAgSU5GTygiIHRp
dGxlID0gJXMiLCB0aXRsZSk7Ci0gICAgIGVsbV9nZW5saXN0X2l0ZW1fYXBwZW5kKHdpbmRvdy0+
aGlzdG9yeS5oaXN0b3J5X2xpc3QsIGxpc3RfaXRlbSwgKHZvaWQgKikodGl0bGUpLCBOVUxMLCBF
TE1fR0VOTElTVF9JVEVNX05PTkUsIF9saXN0X2l0ZW1fc2VsZWN0X2NiLCBkYXRhKTsKLSAgIH0K
LQotICAgaWYgKGl0ZW1fY291bnQgPiAwKSB7Ci0gICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dl
dCh3aW5kb3ctPmVsbV93aW5kb3csICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKLSAgICAgZWxt
X2xpc3RfZ28od2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdCk7Ci0gICAgIGV2YXNfb2JqZWN0
X3Jlc2l6ZSh3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9ib3ggLCB3aWR0aCAvIDMgLCBMSVNUX0lU
RU1fSEVJR0hUICogaXRlbV9jb3VudCk7Ci0KLSAgICAgaWYgKGZvcndhcmRfbmF2aWdhdGlvbl9l
bmFibGVkKSB7Ci0gICAgICAgZXZhc19vYmplY3RfbW92ZSh3aW5kb3ctPmhpc3RvcnkuaGlzdG9y
eV9ib3ggLCB4ICsgVE9PTF9CQVJfQlVUVE9OX1NJWkUgKyAxLCB5ICsgVE9PTF9CQVJfQlVUVE9O
X1NJWkUpOwotICAgICAgIGV2YXNfb2JqZWN0X21vdmUod2luZG93LT5oaXN0b3J5Lmhpc3Rvcnlf
bGlzdCAsIHggKyBUT09MX0JBUl9CVVRUT05fU0laRSArIDEsIHkgKyBUT09MX0JBUl9CVVRUT05f
U0laRSk7Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgZXZhc19vYmplY3RfbW92ZSh3aW5kb3ctPmhp
c3RvcnkuaGlzdG9yeV9ib3ggLCB4LCB5ICsgVE9PTF9CQVJfQlVUVE9OX1NJWkUpOwotICAgICAg
IGV2YXNfb2JqZWN0X21vdmUod2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdCAsIHgsIHkgKyBU
T09MX0JBUl9CVVRUT05fU0laRSk7Ci0gICAgIH0KLQotICAgICBlbG1fZ2VubGlzdF9tb2RlX3Nl
dCh3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9saXN0LCBFTE1fTElTVF9DT01QUkVTUyk7Ci0gICAg
IGV2YXNfb2JqZWN0X3Nob3cod2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfYm94KTsKLSAgICAgZXZh
c19vYmplY3Rfc2hvdyh3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9saXN0KTsKLSAgICAgZXZhc19v
YmplY3RfZm9jdXNfc2V0KHdpbmRvdy0+ZXdrX3ZpZXcsIEVJTkFfRkFMU0UpOwotICAgICBlbG1f
b2JqZWN0X2ZvY3VzX3NldCh3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9saXN0LCBFSU5BX1RSVUUp
OwotICAgfSBlbHNlCi0gICAgIGxvbmdwcmVzc19lbmFibGVkID0gRUlOQV9GQUxTRTsKLX0KLQot
c3RhdGljIHZvaWQKLV9mb3J3YXJkX2J1dHRvbl9sb25ncHJlc3NfY2Iodm9pZCAqdXNlcl9kYXRh
LCBFdmFzX09iamVjdCAqZm9yd2FyZF9idXR0b24sIHZvaWQgKmV2ZW50X2luZm8pCi17Ci0gICBC
cm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotCi0g
ICBuYXZpZ2F0aW9uX2J1dHRvbl9sb25ncHJlc3NfcHJvY2Vzcyh1c2VyX2RhdGEsIEVJTkFfVFJV
RSk7Ci0gICBlbG1fb2JqZWN0X2Rpc2FibGVkX3NldChmb3J3YXJkX2J1dHRvbiwgIWV3a192aWV3
X2JhY2tfcG9zc2libGUod2luZG93LT5ld2tfdmlldykpOwotfQotCi1zdGF0aWMgdm9pZAotX2Jh
Y2tfYnV0dG9uX2xvbmdwcmVzc19jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpiYWNr
X2J1dHRvbiwgdm9pZCAqZXZlbnRfaW5mbykKLXsKLSAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cg
PSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7Ci0KLSAgIG5hdmlnYXRpb25fYnV0dG9uX2xv
bmdwcmVzc19wcm9jZXNzKHVzZXJfZGF0YSwgRUlOQV9GQUxTRSk7Ci0gICBlbG1fb2JqZWN0X2Rp
c2FibGVkX3NldChiYWNrX2J1dHRvbiwgIWV3a192aWV3X2JhY2tfcG9zc2libGUod2luZG93LT5l
d2tfdmlldykpOwotfQotCi1zdGF0aWMgdm9pZAotX29rX2NsaWNrZWRfY2Iodm9pZCAqdXNlcl9k
YXRhLCBFdmFzX09iamVjdCAqb2JqLCB2b2lkICpldmVudF9pbmZvKQotewotICAgRWluYV9Cb29s
ICpjb25maXJtZWQgPSAoRWluYV9Cb29sICopdXNlcl9kYXRhOwotICAgKmNvbmZpcm1lZCA9IEVJ
TkFfVFJVRTsKLX0KLQotc3RhdGljIEVpbmFfU3RyaW5nc2hhcmUgKgotX2ZpbGVfZW50cnlfZGlh
bG9nX3Nob3coQnJvd3Nlcl9XaW5kb3cgKndpbmRvdywgY29uc3QgY2hhciAqbGFiZWxfdGFnLCBj
b25zdCBjaGFyICpkZWZhdWx0X3RleHQpCi17Ci0gICBFdmFzX09iamVjdCAqZmlsZV9wb3B1cCA9
IGVsbV9wb3B1cF9hZGQod2luZG93LT5lbG1fd2luZG93KTsKLSAgIGV2YXNfb2JqZWN0X3NpemVf
aGludF93ZWlnaHRfc2V0KGZpbGVfcG9wdXAsIEVWQVNfSElOVF9FWFBBTkQsIEVWQVNfSElOVF9F
WFBBTkQpOwotICAgZXZhc19vYmplY3Rfc2hvdyhmaWxlX3BvcHVwKTsKLQotICAgRXZhc19PYmpl
Y3QgKnZib3ggPSBlbG1fYm94X2FkZChmaWxlX3BvcHVwKTsKLSAgIGV2YXNfb2JqZWN0X3NpemVf
aGludF93ZWlnaHRfc2V0KHZib3gsIEVWQVNfSElOVF9FWFBBTkQsIEVWQVNfSElOVF9FWFBBTkQp
OwotICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldCh2Ym94LCBFVkFTX0hJTlRfRklM
TCwgRVZBU19ISU5UX0ZJTEwpOwotICAgZWxtX29iamVjdF9jb250ZW50X3NldChmaWxlX3BvcHVw
LCB2Ym94KTsKLSAgIGV2YXNfb2JqZWN0X3Nob3codmJveCk7Ci0KLSAgIEV2YXNfT2JqZWN0ICps
YWJlbCA9IGVsbV9sYWJlbF9hZGQod2luZG93LT5lbG1fd2luZG93KTsKLSAgIGVsbV9vYmplY3Rf
dGV4dF9zZXQobGFiZWwsIGxhYmVsX3RhZyk7Ci0gICBldmFzX29iamVjdF9zaXplX2hpbnRfd2Vp
Z2h0X3NldChsYWJlbCwgRVZBU19ISU5UX0VYUEFORCwgMC4wKTsKLSAgIGV2YXNfb2JqZWN0X3Np
emVfaGludF9hbGlnbl9zZXQobGFiZWwsIEVWQVNfSElOVF9GSUxMLCAwLjUpOwotICAgZXZhc19v
YmplY3RfY29sb3Jfc2V0KGxhYmVsLCAyMywgNDUsIDY3LCAxNDIpOwotICAgZWxtX2JveF9wYWNr
X2VuZCh2Ym94LCBsYWJlbCk7Ci0gICBldmFzX29iamVjdF9zaG93KGxhYmVsKTsKLQotICAgRXZh
c19PYmplY3QgKmZzX2VudHJ5ID0gZWxtX2ZpbGVzZWxlY3Rvcl9lbnRyeV9hZGQoZmlsZV9wb3B1
cCk7Ci0gICBlbG1fZmlsZXNlbGVjdG9yX2lzX3NhdmVfc2V0KGZzX2VudHJ5LCBFSU5BX1RSVUUp
OwotICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldChmc19lbnRyeSwgRVZBU19ISU5U
X0ZJTEwsIDApOwotICAgZWxtX2ZpbGVzZWxlY3Rvcl9wYXRoX3NldChmc19lbnRyeSwgZGVmYXVs
dF90ZXh0KTsKLSAgIGVsbV9vYmplY3RfdGV4dF9zZXQoZnNfZW50cnksICJGaWxlQ2hvb3NlciIp
OwotICAgZWxtX2JveF9wYWNrX2VuZCh2Ym94LCBmc19lbnRyeSk7Ci0gICBldmFzX29iamVjdF9z
aG93KGZzX2VudHJ5KTsKLQotICAgRXZhc19PYmplY3QgKmhib3ggPSBlbG1fYm94X2FkZChmaWxl
X3BvcHVwKTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KGhib3gsIEVWQVNf
SElOVF9FWFBBTkQsIEVWQVNfSElOVF9FWFBBTkQpOwotICAgZWxtX2JveF9ob3Jpem9udGFsX3Nl
dChoYm94LCBFSU5BX1RSVUUpOwotICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldCho
Ym94LCBFVkFTX0hJTlRfRklMTCwgRVZBU19ISU5UX0ZJTEwpOwotICAgZWxtX2JveF9wYWNrX2Vu
ZCh2Ym94LCBoYm94KTsKLSAgIGV2YXNfb2JqZWN0X3Nob3coaGJveCk7Ci0KLSAgIEVpbmFfQm9v
bCBvayA9IEVJTkFfRkFMU0U7Ci0gICBFdmFzX09iamVjdCAqb2tfYnV0dG9uID0gZWxtX2J1dHRv
bl9hZGQoZmlsZV9wb3B1cCk7Ci0gICBlbG1fb2JqZWN0X3RleHRfc2V0KG9rX2J1dHRvbiwgIk9L
Iik7Ci0gICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQob2tfYnV0dG9uLCAiY2xpY2tl
ZCIsIF9va19jbGlja2VkX2NiLCAmb2spOwotICAgZWxtX2JveF9wYWNrX2VuZChoYm94LCBva19i
dXR0b24pOwotICAgZXZhc19vYmplY3Rfc2hvdyhva19idXR0b24pOwotCi0gICBFaW5hX0Jvb2wg
Y2FuY2VsID0gRUlOQV9GQUxTRTsKLSAgIEV2YXNfT2JqZWN0ICpjYW5jZWxfYnV0dG9uID0gZWxt
X2J1dHRvbl9hZGQoZmlsZV9wb3B1cCk7Ci0gICBlbG1fb2JqZWN0X3RleHRfc2V0KGNhbmNlbF9i
dXR0b24sICJDYW5jZWwiKTsKLSAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChjYW5j
ZWxfYnV0dG9uLCAiY2xpY2tlZCIsIF9va19jbGlja2VkX2NiLCAmY2FuY2VsKTsKLSAgIGVsbV9i
b3hfcGFja19lbmQoaGJveCwgY2FuY2VsX2J1dHRvbik7Ci0gICBldmFzX29iamVjdF9zaG93KGNh
bmNlbF9idXR0b24pOwotCi0gICB3aGlsZSAob2sgIT0gRUlOQV9UUlVFICYmIGNhbmNlbCAhPSBF
SU5BX1RSVUUpCi0gICAgZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUoKTsKLQotICAgRWluYV9TdHJp
bmdzaGFyZSAqZmlsZV9wYXRoID0gb2sgPyBlaW5hX3N0cmluZ3NoYXJlX2FkZChlbG1fZmlsZXNl
bGVjdG9yX3BhdGhfZ2V0KGZzX2VudHJ5KSkgOiBOVUxMOwotICAgZXZhc19vYmplY3RfZGVsKGZp
bGVfcG9wdXApOwotICAgcmV0dXJuIGZpbGVfcGF0aDsKLX0KLQotc3RhdGljIHZvaWQKLV9qYXZh
c2NyaXB0X2FsZXJ0X2NiKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNtYXJ0RGF0YSwgY29uc3QgY2hh
ciAqbWVzc2FnZSkKLXsKLSAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfZmluZF93
aXRoX2V3a192aWV3KHNtYXJ0RGF0YS0+c2VsZik7Ci0KLSAgIEV2YXNfT2JqZWN0ICphbGVydF9w
b3B1cCA9IGVsbV9wb3B1cF9hZGQod2luZG93LT5lbG1fd2luZG93KTsKLSAgIGV2YXNfb2JqZWN0
X3NpemVfaGludF93ZWlnaHRfc2V0KGFsZXJ0X3BvcHVwLCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFT
X0hJTlRfRVhQQU5EKTsKLSAgIGVsbV9vYmplY3RfdGV4dF9zZXQoYWxlcnRfcG9wdXAsIG1lc3Nh
Z2UpOwotICAgZWxtX29iamVjdF9wYXJ0X3RleHRfc2V0KGFsZXJ0X3BvcHVwLCAidGl0bGUsdGV4
dCIsICJBbGVydCIpOwotCi0gICAvKiBQb3B1cCBidXR0b25zICovCi0gICBFaW5hX0Jvb2wgb2sg
PSBFSU5BX0ZBTFNFOwotICAgRXZhc19PYmplY3QgKmJ1dHRvbiA9IGVsbV9idXR0b25fYWRkKGFs
ZXJ0X3BvcHVwKTsKLSAgIGVsbV9vYmplY3RfdGV4dF9zZXQoYnV0dG9uLCAiT0siKTsKLSAgIGVs
bV9vYmplY3RfcGFydF9jb250ZW50X3NldChhbGVydF9wb3B1cCwgImJ1dHRvbjEiLCBidXR0b24p
OwotICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKGJ1dHRvbiwgImNsaWNrZWQiLCBf
b2tfY2xpY2tlZF9jYiwgJm9rKTsKLSAgIGVsbV9vYmplY3RfZm9jdXNfc2V0KGJ1dHRvbiwgRUlO
QV9UUlVFKTsKLSAgIGV2YXNfb2JqZWN0X3Nob3coYWxlcnRfcG9wdXApOwotCi0gICB3aGlsZSAo
b2sgIT0gRUlOQV9UUlVFKQotICAgICAgZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUoKTsKLQotICAg
ZXZhc19vYmplY3RfZGVsKGFsZXJ0X3BvcHVwKTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbAotX2ph
dmFzY3JpcHRfY29uZmlybV9jYihFd2tfVmlld19TbWFydF9EYXRhICpzbWFydERhdGEsIGNvbnN0
IGNoYXIgKm1lc3NhZ2UpCi17Ci0gICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2Zp
bmRfd2l0aF9ld2tfdmlldyhzbWFydERhdGEtPnNlbGYpOwotCi0gICBFdmFzX09iamVjdCAqY29u
ZmlybV9wb3B1cCA9IGVsbV9wb3B1cF9hZGQod2luZG93LT5lbG1fd2luZG93KTsKLSAgIGV2YXNf
b2JqZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KGNvbmZpcm1fcG9wdXAsIEVWQVNfSElOVF9FWFBB
TkQsIEVWQVNfSElOVF9FWFBBTkQpOwotICAgZWxtX29iamVjdF90ZXh0X3NldChjb25maXJtX3Bv
cHVwLCBtZXNzYWdlKTsKLSAgIGVsbV9vYmplY3RfcGFydF90ZXh0X3NldChjb25maXJtX3BvcHVw
LCAidGl0bGUsdGV4dCIsICJDb25maXJtYXRpb24iKTsKLQotICAgLyogUG9wdXAgYnV0dG9ucyAq
LwotICAgRWluYV9Cb29sIGNhbmNlbCA9IEVJTkFfRkFMU0U7Ci0gICBFdmFzX09iamVjdCAqY2Fu
Y2VsX2J1dHRvbiA9IGVsbV9idXR0b25fYWRkKGNvbmZpcm1fcG9wdXApOwotICAgZWxtX29iamVj
dF90ZXh0X3NldChjYW5jZWxfYnV0dG9uLCAiQ2FuY2VsIik7Ci0gICBlbG1fb2JqZWN0X3BhcnRf
Y29udGVudF9zZXQoY29uZmlybV9wb3B1cCwgImJ1dHRvbjEiLCBjYW5jZWxfYnV0dG9uKTsKLSAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChjYW5jZWxfYnV0dG9uLCAiY2xpY2tlZCIs
IF9va19jbGlja2VkX2NiLCAmY2FuY2VsKTsKLSAgIEV2YXNfT2JqZWN0ICpva19idXR0b24gPSBl
bG1fYnV0dG9uX2FkZChjb25maXJtX3BvcHVwKTsKLSAgIEVpbmFfQm9vbCBvayA9IEVJTkFfRkFM
U0U7Ci0gICBlbG1fb2JqZWN0X3RleHRfc2V0KG9rX2J1dHRvbiwgIk9LIik7Ci0gICBlbG1fb2Jq
ZWN0X3BhcnRfY29udGVudF9zZXQoY29uZmlybV9wb3B1cCwgImJ1dHRvbjIiLCBva19idXR0b24p
OwotICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG9rX2J1dHRvbiwgImNsaWNrZWQi
LCBfb2tfY2xpY2tlZF9jYiwgJm9rKTsKLSAgIGVsbV9vYmplY3RfZm9jdXNfc2V0KG9rX2J1dHRv
biwgRUlOQV9UUlVFKTsKLSAgIGV2YXNfb2JqZWN0X3Nob3coY29uZmlybV9wb3B1cCk7Ci0KLSAg
IHdoaWxlIChjYW5jZWwgIT0gRUlOQV9UUlVFICYmIG9rICE9IEVJTkFfVFJVRSkKLSAgICAgIGVj
b3JlX21haW5fbG9vcF9pdGVyYXRlKCk7Ci0KLSAgIGV2YXNfb2JqZWN0X2RlbChjb25maXJtX3Bv
cHVwKTsKLQotICAgcmV0dXJuIG9rOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqCi1famF2YXNj
cmlwdF9wcm9tcHRfY2IoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc21hcnREYXRhLCBjb25zdCBjaGFy
ICptZXNzYWdlLCBjb25zdCBjaGFyICpkZWZhdWx0X3ZhbHVlKQotewotICAgQnJvd3Nlcl9XaW5k
b3cgKndpbmRvdyA9IHdpbmRvd19maW5kX3dpdGhfZXdrX3ZpZXcoc21hcnREYXRhLT5zZWxmKTsK
LQotICAgRXZhc19PYmplY3QgKnByb21wdF9wb3B1cCA9IGVsbV9wb3B1cF9hZGQod2luZG93LT5l
bG1fd2luZG93KTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KHByb21wdF9w
b3B1cCwgRVZBU19ISU5UX0VYUEFORCwgRVZBU19ISU5UX0VYUEFORCk7Ci0gICBlbG1fb2JqZWN0
X3BhcnRfdGV4dF9zZXQocHJvbXB0X3BvcHVwLCAidGl0bGUsdGV4dCIsICJQcm9tcHQiKTsKLQot
ICAgLyogUG9wdXAgQ29udGVudCAqLwotICAgRXZhc19PYmplY3QgKmJveCA9IGVsbV9ib3hfYWRk
KHdpbmRvdy0+ZWxtX3dpbmRvdyk7Ci0gICBlbG1fYm94X3BhZGRpbmdfc2V0KGJveCwgMCwgNCk7
Ci0gICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChib3gsIEVWQVNfSElOVF9FWFBB
TkQsIEVWQVNfSElOVF9FWFBBTkQpOwotICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3Nl
dChib3gsIEVWQVNfSElOVF9GSUxMLCBFVkFTX0hJTlRfRklMTCk7Ci0gICBldmFzX29iamVjdF9z
aG93KGJveCk7Ci0KLSAgIEV2YXNfT2JqZWN0ICpwcm9tcHQgPSBlbG1fbGFiZWxfYWRkKHdpbmRv
dy0+ZWxtX3dpbmRvdyk7Ci0gICBlbG1fb2JqZWN0X3RleHRfc2V0KHByb21wdCwgbWVzc2FnZSk7
Ci0gICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChwcm9tcHQsIEVWQVNfSElOVF9F
WFBBTkQsIDAuMCk7Ci0gICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxpZ25fc2V0KHByb21wdCwg
RVZBU19ISU5UX0ZJTEwsIDAuNSk7Ci0gICBlbG1fYm94X3BhY2tfZW5kKGJveCwgcHJvbXB0KTsK
LSAgIGV2YXNfb2JqZWN0X3Nob3cocHJvbXB0KTsKLQotICAgRXZhc19PYmplY3QgKmVudHJ5ID0g
ZWxtX2VudHJ5X2FkZCh3aW5kb3ctPmVsbV93aW5kb3cpOwotICAgZWxtX2VudHJ5X3Njcm9sbGFi
bGVfc2V0KGVudHJ5LCBFSU5BX1RSVUUpOwotICAgZWxtX2VudHJ5X3NpbmdsZV9saW5lX3NldChl
bnRyeSwgRUlOQV9UUlVFKTsKLSAgIGVsbV9lbnRyeV90ZXh0X3N0eWxlX3VzZXJfcHVzaChlbnRy
eSwgIkRFRkFVTFQ9J2ZvbnRfc2l6ZT0xOCciKTsKLSAgIGVsbV9lbnRyeV9lbnRyeV9zZXQoZW50
cnksIGRlZmF1bHRfdmFsdWUgPyBkZWZhdWx0X3ZhbHVlIDogIiIpOwotICAgZWxtX2VudHJ5X3Nl
bGVjdF9hbGwoZW50cnkpOwotICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQoZW50
cnksIEVWQVNfSElOVF9FWFBBTkQsIDAuMCk7Ci0gICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxp
Z25fc2V0KGVudHJ5LCBFVkFTX0hJTlRfRklMTCwgMC41KTsKLSAgIGVsbV9ib3hfcGFja19lbmQo
Ym94LCBlbnRyeSk7Ci0gICBlbG1fb2JqZWN0X2ZvY3VzX3NldChlbnRyeSwgRUlOQV9UUlVFKTsK
LSAgIGV2YXNfb2JqZWN0X3Nob3coZW50cnkpOwotCi0gICBlbG1fb2JqZWN0X2NvbnRlbnRfc2V0
KHByb21wdF9wb3B1cCwgYm94KTsKLQotICAgLyogUG9wdXAgYnV0dG9ucyAqLwotICAgRWluYV9C
b29sIGNhbmNlbCA9IEVJTkFfRkFMU0U7Ci0gICBFdmFzX09iamVjdCAqY2FuY2VsX2J1dHRvbiA9
IGVsbV9idXR0b25fYWRkKHByb21wdF9wb3B1cCk7Ci0gICBlbG1fb2JqZWN0X3RleHRfc2V0KGNh
bmNlbF9idXR0b24sICJDYW5jZWwiKTsKLSAgIGVsbV9vYmplY3RfcGFydF9jb250ZW50X3NldChw
cm9tcHRfcG9wdXAsICJidXR0b24xIiwgY2FuY2VsX2J1dHRvbik7Ci0gICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19hZGQoY2FuY2VsX2J1dHRvbiwgImNsaWNrZWQiLCBfb2tfY2xpY2tlZF9j
YiwgJmNhbmNlbCk7Ci0gICBFaW5hX0Jvb2wgb2sgPSBFSU5BX0ZBTFNFOwotICAgRXZhc19PYmpl
Y3QgKm9rX2J1dHRvbiA9IGVsbV9idXR0b25fYWRkKHByb21wdF9wb3B1cCk7Ci0gICBlbG1fb2Jq
ZWN0X3RleHRfc2V0KG9rX2J1dHRvbiwgIk9LIik7Ci0gICBlbG1fb2JqZWN0X3BhcnRfY29udGVu
dF9zZXQocHJvbXB0X3BvcHVwLCAiYnV0dG9uMiIsIG9rX2J1dHRvbik7Ci0gICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19hZGQob2tfYnV0dG9uLCAiY2xpY2tlZCIsIF9va19jbGlja2VkX2Ni
LCAmb2spOwotICAgZXZhc19vYmplY3Rfc2hvdyhwcm9tcHRfcG9wdXApOwotCi0gICB3aGlsZSAo
Y2FuY2VsICE9IEVJTkFfVFJVRSAmJiBvayAhPSBFSU5BX1RSVUUpCi0gICAgICBlY29yZV9tYWlu
X2xvb3BfaXRlcmF0ZSgpOwotCi0gICAvKiBUaGUgcmV0dXJuIHN0cmluZyBuZWVkIHRvIGJlIHN0
cmluZ3NoYXJlZCAqLwotICAgY29uc3QgY2hhciAqcHJvbXB0X3RleHQgPSBvayA/IGVpbmFfc3Ry
aW5nc2hhcmVfYWRkKGVsbV9lbnRyeV9lbnRyeV9nZXQoZW50cnkpKSA6IE5VTEw7Ci0gICBldmFz
X29iamVjdF9kZWwocHJvbXB0X3BvcHVwKTsKLQotICAgcmV0dXJuIHByb21wdF90ZXh0OwotfQot
Ci1zdGF0aWMgRWluYV9Cb29sCi1famF2YXNjcmlwdF9iZWZvcmVfdW5sb2FkX2NvbmZpcm1fY2Io
RXdrX1ZpZXdfU21hcnRfRGF0YSAqc21hcnREYXRhLCBjb25zdCBjaGFyICptZXNzYWdlKQotewot
ICAgcmV0dXJuIF9qYXZhc2NyaXB0X2NvbmZpcm1fY2Ioc21hcnREYXRhLCAiV2lsbCB5b3UgbGVh
dmUgdGhpcyBwYWdlPyIpOwotfQotCi1zdGF0aWMgdm9pZAotX3BvcHVwX21lbnVfaXRlbV9jbGlj
a2VkX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKm9iaiwgdm9pZCAqZXZlbnRfaW5m
bykKLXsKLSAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2Vy
X2RhdGE7Ci0gICBFbG1fT2JqZWN0X0l0ZW0gKml0ZW0gPSAoRWxtX09iamVjdF9JdGVtICopZXZl
bnRfaW5mbzsKLQotICAgSU5GTygiU2VsZWN0ZWQgcG9wdXAgbWVudSBpbmRleDogJXUiLCBlbG1f
bWVudV9pdGVtX2luZGV4X2dldChpdGVtKSk7Ci0gICBld2tfcG9wdXBfbWVudV9zZWxlY3RlZF9p
bmRleF9zZXQod2luZG93LT5wb3B1cC5ld2tfbWVudSwgZWxtX21lbnVfaXRlbV9pbmRleF9nZXQo
aXRlbSkpOwotCi0gICAvLyBDbG9zZSBwb3B1cCBtZW51LgotICAgZXdrX3BvcHVwX21lbnVfY2xv
c2Uod2luZG93LT5wb3B1cC5ld2tfbWVudSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wb3B1cF9tZW51
X3BvcHVsYXRlKEV2YXNfT2JqZWN0ICplbG1fbWVudSwgRXdrX1BvcHVwX01lbnUgKmV3a19tZW51
LCB2b2lkICp1c2VyX2RhdGEpCi17Ci0gICBjb25zdCBFaW5hX0xpc3QqIGV3a19pdGVtcyA9IGV3
a19wb3B1cF9tZW51X2l0ZW1zX2dldChld2tfbWVudSk7Ci0KLSAgIHZvaWQgKmRhdGE7Ci0gICBj
b25zdCBFaW5hX0xpc3QgKmw7Ci0gICBFSU5BX0xJU1RfRk9SRUFDSChld2tfaXRlbXMsIGwsIGRh
dGEpIHsKLSAgICAgRXdrX1BvcHVwX01lbnVfSXRlbSAqZXdrX2l0ZW0gPSAoRXdrX1BvcHVwX01l
bnVfSXRlbSAqKWRhdGE7Ci0gICAgIHN3aXRjaCAoZXdrX3BvcHVwX21lbnVfaXRlbV90eXBlX2dl
dChld2tfaXRlbSkpIHsKLSAgICAgY2FzZSBFV0tfUE9QVVBfTUVOVV9TRVBBUkFUT1I6Ci0gICAg
ICAgZWxtX21lbnVfaXRlbV9zZXBhcmF0b3JfYWRkKGVsbV9tZW51LCBOVUxMKTsKLSAgICAgICBi
cmVhazsKLSAgICAgY2FzZSBFV0tfUE9QVVBfTUVOVV9JVEVNOgotICAgICAgIGlmIChld2tfcG9w
dXBfbWVudV9pdGVtX2lzX2xhYmVsX2dldChld2tfaXRlbSkpIHsKLSAgICAgICAgIEVsbV9PYmpl
Y3RfSXRlbSAqaXRlbSA9IGVsbV9tZW51X2l0ZW1fYWRkKGVsbV9tZW51LCBOVUxMLCBOVUxMLCBl
d2tfcG9wdXBfbWVudV9pdGVtX3RleHRfZ2V0KGV3a19pdGVtKSwgTlVMTCwgTlVMTCk7Ci0gICAg
ICAgICBlbG1fb2JqZWN0X2l0ZW1fZGlzYWJsZWRfc2V0KGl0ZW0sIEVJTkFfVFJVRSk7Ci0gICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgIEVsbV9PYmplY3RfSXRlbSAqaXRlbSA9IGVsbV9tZW51X2l0
ZW1fYWRkKGVsbV9tZW51LCBOVUxMLCBOVUxMLCBld2tfcG9wdXBfbWVudV9pdGVtX3RleHRfZ2V0
KGV3a19pdGVtKSwgX3BvcHVwX21lbnVfaXRlbV9jbGlja2VkX2NiLCB1c2VyX2RhdGEpOwotICAg
ICAgICAgY29uc3QgY2hhciAqdG9vbHRpcF90ZXh0ID0gZXdrX3BvcHVwX21lbnVfaXRlbV90b29s
dGlwX2dldChld2tfaXRlbSk7Ci0gICAgICAgICBpZiAodG9vbHRpcF90ZXh0ICYmIHRvb2x0aXBf
dGV4dFswXSAhPSAnXDAnKQotICAgICAgICAgICBlbG1fb2JqZWN0X2l0ZW1fdG9vbHRpcF90ZXh0
X3NldChpdGVtLCB0b29sdGlwX3RleHQpOwotICAgICAgICAgZWxtX29iamVjdF9pdGVtX2Rpc2Fi
bGVkX3NldChpdGVtLCAhZXdrX3BvcHVwX21lbnVfaXRlbV9lbmFibGVkX2dldChld2tfaXRlbSkp
OwotICAgICAgICAgZWxtX21lbnVfaXRlbV9zZWxlY3RlZF9zZXQoaXRlbSwgZXdrX3BvcHVwX21l
bnVfaXRlbV9zZWxlY3RlZF9nZXQoZXdrX2l0ZW0pKTsKLSAgICAgICB9Ci0gICAgICAgYnJlYWs7
Ci0gICAgIGRlZmF1bHQ6Ci0gICAgICAgSU5GTygiVW5yZWNvZ25pemVkIHBvcHVwIG1lbnUgaXRl
bSB0eXBlISIpOwotICAgICAgIGJyZWFrOwotICAgICB9Ci0gICB9Ci19Ci0KLXN0YXRpYyBFaW5h
X0Jvb2wKLV9wb3B1cF9tZW51X3Nob3coRXdrX1ZpZXdfU21hcnRfRGF0YSAqc21hcnREYXRhLCBF
aW5hX1JlY3RhbmdsZSByZWN0LCBFd2tfVGV4dF9EaXJlY3Rpb24gdGV4dF9kaXJlY3Rpb24sIGRv
dWJsZSBwYWdlX3NjYWxlX2ZhY3RvciwgRXdrX1BvcHVwX01lbnUgKmV3a19tZW51KQotewotICAg
QnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19maW5kX3dpdGhfZXdrX3ZpZXcoc21hcnRE
YXRhLT5zZWxmKTsKLQotICAgaWYgKHdpbmRvdy0+cG9wdXAuZWxtX21lbnUpCi0gICAgIGV2YXNf
b2JqZWN0X2RlbCh3aW5kb3ctPnBvcHVwLmVsbV9tZW51KTsKLQotICAgd2luZG93LT5wb3B1cC5l
bG1fbWVudSA9IGVsbV9tZW51X2FkZCh3aW5kb3ctPmVsbV93aW5kb3cpOwotICAgd2luZG93LT5w
b3B1cC5ld2tfbWVudSA9IGV3a19tZW51OwotCi0gICBwb3B1cF9tZW51X3BvcHVsYXRlKHdpbmRv
dy0+cG9wdXAuZWxtX21lbnUsIGV3a19tZW51LCB3aW5kb3cpOwotCi0gICBJTkZPKCJTaG93aW5n
IHBvcHVwIG1lbnUgYXQgKCVkLCAlZCkiLCByZWN0LngsIHJlY3QueSk7Ci0gICBlbG1fbWVudV9t
b3ZlKHdpbmRvdy0+cG9wdXAuZWxtX21lbnUsIHJlY3QueCwgcmVjdC55KTsKLSAgIGV2YXNfb2Jq
ZWN0X3Nob3cod2luZG93LT5wb3B1cC5lbG1fbWVudSk7Ci0KLSAgIHJldHVybiBFSU5BX1RSVUU7
Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wKLV9wb3B1cF9tZW51X2hpZGUoRXdrX1ZpZXdfU21hcnRf
RGF0YSAqc21hcnREYXRhKQotewotICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19m
aW5kX3dpdGhfZXdrX3ZpZXcoc21hcnREYXRhLT5zZWxmKTsKLQotICAgaWYgKCF3aW5kb3ctPnBv
cHVwLmVsbV9tZW51KQotICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLQotICAgZWxtX21lbnVfY2xv
c2Uod2luZG93LT5wb3B1cC5lbG1fbWVudSk7Ci0gICB3aW5kb3ctPnBvcHVwLmV3a19tZW51ID0g
TlVMTDsKLQotICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbAotX3dp
bmRvd19nZW9tZXRyeV9nZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEV2YXNfQ29vcmQgKngs
IEV2YXNfQ29vcmQgKnksIEV2YXNfQ29vcmQgKndpZHRoLCBFdmFzX0Nvb3JkICpoZWlnaHQpCi17
Ci0gICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2ZpbmRfd2l0aF9ld2tfdmlldyhz
ZC0+c2VsZik7Ci0KLSAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldCh3aW5kb3ctPmVsbV93aW5k
b3csIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotCi0gICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1z
dGF0aWMgRWluYV9Cb29sCi1fd2luZG93X2dlb21ldHJ5X3NldChFd2tfVmlld19TbWFydF9EYXRh
ICpzZCwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNf
Q29vcmQgaGVpZ2h0KQotewotICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19maW5k
X3dpdGhfZXdrX3ZpZXcoc2QtPnNlbGYpOwotCi0gICBldmFzX29iamVjdF9tb3ZlKHdpbmRvdy0+
ZWxtX3dpbmRvdywgeCwgeSk7Ci0gICBldmFzX29iamVjdF9yZXNpemUod2luZG93LT5lbG1fd2lu
ZG93LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotdHlwZWRl
ZiBzdHJ1Y3QgewotICAgRXZhc19PYmplY3QgKmV3a192aWV3OwotICAgRXZhc19PYmplY3QgKnBl
cm1pc3Npb25fcG9wdXA7Ci19IFBlcm1pc3Npb25EYXRhOwotCi1zdGF0aWMgdm9pZAotX2Z1bGxz
Y3JlZW5fYWNjZXB0X2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKm9iaiwgdm9pZCAq
ZXZlbnRfaW5mbykKLXsKLSAgIFBlcm1pc3Npb25EYXRhICpwZXJtaXNzaW9uX2RhdGEgPSAoUGVy
bWlzc2lvbkRhdGEgKil1c2VyX2RhdGE7Ci0gICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2lu
ZG93X2ZpbmRfd2l0aF9ld2tfdmlldyhwZXJtaXNzaW9uX2RhdGEtPmV3a192aWV3KTsKLQotICAg
ZWxtX3dpbl9yZXNpemVfb2JqZWN0X2RlbCh3aW5kb3ctPmVsbV93aW5kb3csIHBlcm1pc3Npb25f
ZGF0YS0+cGVybWlzc2lvbl9wb3B1cCk7Ci0gICBldmFzX29iamVjdF9kZWwocGVybWlzc2lvbl9k
YXRhLT5wZXJtaXNzaW9uX3BvcHVwKTsKLSAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChwZXJtaXNz
aW9uX2RhdGEtPmV3a192aWV3LCBFSU5BX1RSVUUpOwotICAgZnJlZShwZXJtaXNzaW9uX2RhdGEp
OwotfQotCi1zdGF0aWMgdm9pZAotX2Z1bGxzY3JlZW5fZGVueV9jYih2b2lkICp1c2VyX2RhdGEs
IEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2luZm8pCi17Ci0gICBQZXJtaXNzaW9uRGF0
YSAqcGVybWlzc2lvbl9kYXRhID0gKFBlcm1pc3Npb25EYXRhICopdXNlcl9kYXRhOwotICAgQnJv
d3Nlcl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19maW5kX3dpdGhfZXdrX3ZpZXcocGVybWlzc2lv
bl9kYXRhLT5ld2tfdmlldyk7Ci0KLSAgIGV3a192aWV3X2Z1bGxzY3JlZW5fZXhpdChwZXJtaXNz
aW9uX2RhdGEtPmV3a192aWV3KTsKLSAgIGVsbV93aW5fcmVzaXplX29iamVjdF9kZWwod2luZG93
LT5lbG1fd2luZG93LCBwZXJtaXNzaW9uX2RhdGEtPnBlcm1pc3Npb25fcG9wdXApOwotICAgZXZh
c19vYmplY3RfZGVsKHBlcm1pc3Npb25fZGF0YS0+cGVybWlzc2lvbl9wb3B1cCk7Ci0gICBldmFz
X29iamVjdF9mb2N1c19zZXQocGVybWlzc2lvbl9kYXRhLT5ld2tfdmlldywgRUlOQV9UUlVFKTsK
LSAgIGZyZWUocGVybWlzc2lvbl9kYXRhKTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbAotX2Z1bGxz
Y3JlZW5fZW50ZXJfY2IoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEV3a19TZWN1cml0eV9Pcmln
aW4gKm9yaWdpbikKLXsKLSAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfZmluZF93
aXRoX2V3a192aWV3KHNkLT5zZWxmKTsKLQotICAgLyogR28gZnVsbHNjcmVlbiAqLwotICAgdG9n
Z2xlX3dpbmRvd19mdWxsc2NyZWVuKHdpbmRvdywgRUlOQV9UUlVFKTsKLQotICAgLyogU2hvdyB1
c2VyIHBvcHVwICovCi0gICBFdmFzX09iamVjdCAqcGVybWlzc2lvbl9wb3B1cCA9IGVsbV9wb3B1
cF9hZGQod2luZG93LT5lbG1fd2luZG93KTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWln
aHRfc2V0KHBlcm1pc3Npb25fcG9wdXAsIEVWQVNfSElOVF9FWFBBTkQsIEVWQVNfSElOVF9FWFBB
TkQpOwotCi0gICBFaW5hX1N0cmJ1ZiAqbWVzc2FnZSA9IGVpbmFfc3RyYnVmX25ldygpOwotICAg
ZWluYV9zdHJidWZfYXBwZW5kX3ByaW50ZihtZXNzYWdlLCAiJXMgaXMgbm93IGZ1bGxzY3JlZW4u
PGJyPlByZXNzIEVTQyBhdCBhbnkgdGltZSB0byBleGl0IGZ1bGxzY3JlZW4uPGJyPkFsbG93IGZ1
bGxzY3JlZW4/IiwgZXdrX3NlY3VyaXR5X29yaWdpbl9ob3N0X2dldChvcmlnaW4pKTsKLSAgIGVs
bV9vYmplY3RfdGV4dF9zZXQocGVybWlzc2lvbl9wb3B1cCwgZWluYV9zdHJidWZfc3RyaW5nX2dl
dChtZXNzYWdlKSk7Ci0gICBlaW5hX3N0cmJ1Zl9mcmVlKG1lc3NhZ2UpOwotICAgZWxtX29iamVj
dF9wYXJ0X3RleHRfc2V0KHBlcm1pc3Npb25fcG9wdXAsICJ0aXRsZSx0ZXh0IiwgIkZ1bGxzY3Jl
ZW4gUGVybWlzc2lvbiIpOwotCi0gICAvKiBQb3B1cCBidXR0b25zICovCi0gICBQZXJtaXNzaW9u
RGF0YSAqcGVybWlzc2lvbl9kYXRhID0gKFBlcm1pc3Npb25EYXRhICopbWFsbG9jKHNpemVvZihQ
ZXJtaXNzaW9uRGF0YSkpOwotICAgcGVybWlzc2lvbl9kYXRhLT5ld2tfdmlldyA9IHdpbmRvdy0+
ZXdrX3ZpZXc7Ci0gICBwZXJtaXNzaW9uX2RhdGEtPnBlcm1pc3Npb25fcG9wdXAgPSBwZXJtaXNz
aW9uX3BvcHVwOwotICAgRXZhc19PYmplY3QgKmFjY2VwdF9idXR0b24gPSBlbG1fYnV0dG9uX2Fk
ZChwZXJtaXNzaW9uX3BvcHVwKTsKLSAgIGVsbV9vYmplY3RfdGV4dF9zZXQoYWNjZXB0X2J1dHRv
biwgIkFjY2VwdCIpOwotICAgZWxtX29iamVjdF9wYXJ0X2NvbnRlbnRfc2V0KHBlcm1pc3Npb25f
cG9wdXAsICJidXR0b24xIiwgYWNjZXB0X2J1dHRvbik7Ci0gICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19hZGQoYWNjZXB0X2J1dHRvbiwgImNsaWNrZWQiLCBfZnVsbHNjcmVlbl9hY2NlcHRf
Y2IsIHBlcm1pc3Npb25fZGF0YSk7Ci0KLSAgIEV2YXNfT2JqZWN0ICpkZW55X2J1dHRvbiA9IGVs
bV9idXR0b25fYWRkKHBlcm1pc3Npb25fcG9wdXApOwotICAgZWxtX29iamVjdF90ZXh0X3NldChk
ZW55X2J1dHRvbiwgIkRlbnkiKTsKLSAgIGVsbV9vYmplY3RfcGFydF9jb250ZW50X3NldChwZXJt
aXNzaW9uX3BvcHVwLCAiYnV0dG9uMiIsIGRlbnlfYnV0dG9uKTsKLSAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2FkZChkZW55X2J1dHRvbiwgImNsaWNrZWQiLCBfZnVsbHNjcmVlbl9kZW55
X2NiLCBwZXJtaXNzaW9uX2RhdGEpOwotICAgZWxtX3dpbl9yZXNpemVfb2JqZWN0X2FkZCh3aW5k
b3ctPmVsbV93aW5kb3csIHBlcm1pc3Npb25fcG9wdXApOwotICAgZXZhc19vYmplY3Rfc2hvdyhw
ZXJtaXNzaW9uX3BvcHVwKTsKLQotICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIEVp
bmFfQm9vbCBfZnVsbHNjcmVlbl9leGl0X2NiKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQotewot
ICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19maW5kX3dpdGhfZXdrX3ZpZXcoc2Qt
PnNlbGYpOwotCi0gICB0b2dnbGVfd2luZG93X2Z1bGxzY3JlZW4od2luZG93LCBFSU5BX0ZBTFNF
KTsKLQotICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIEV2YXNfT2JqZWN0ICoKLV93
aW5kb3dfY3JlYXRlX2NiKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNtYXJ0RGF0YSwgRXdrX1ZpZXdf
Q29uZmlndXJhdGlvbiogY29uZmlndXJhdGlvbiwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAq
d2luZG93X2ZlYXR1cmVzKQotewotICAgaW50IHggPSAwOwotICAgaW50IHkgPSAwOwotICAgaW50
IHdpZHRoID0gMDsKLSAgIGludCBoZWlnaHQgPSAwOwotCi0gICBld2tfd2luZG93X2ZlYXR1cmVz
X2dlb21ldHJ5X2dldCh3aW5kb3dfZmVhdHVyZXMsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsK
LQotICAgaWYgKCF3aWR0aCkKLSAgICAgd2lkdGggPSB3aW5kb3dfd2lkdGg7Ci0KLSAgIGlmICgh
aGVpZ2h0KQotICAgICBoZWlnaHQgPSB3aW5kb3dfaGVpZ2h0OwotCi0gICBCcm93c2VyX1dpbmRv
dyAqd2luZG93ID0gd2luZG93X2NyZWF0ZShjb25maWd1cmF0aW9uLCB3aWR0aCwgaGVpZ2h0KTsK
LSAgIEV2YXNfT2JqZWN0ICpuZXdfdmlldyA9IHdpbmRvdy0+ZXdrX3ZpZXc7Ci0KLSAgIHdpbmRv
d3MgPSBlaW5hX2xpc3RfYXBwZW5kKHdpbmRvd3MsIHdpbmRvdyk7Ci0KLSAgIElORk8oIm1pbmli
cm93c2VyOiBsb2NhdGlvbiglZCwlZCkgc2l6ZT0oJWQsJWQpIiwgeCwgeSwgd2lkdGgsIGhlaWdo
dCk7Ci0KLSAgIHJldHVybiBuZXdfdmlldzsKLX0KLQotc3RhdGljIHZvaWQKLV93aW5kb3dfY2xv
c2VfY2IoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc21hcnREYXRhKQotewotICAgQnJvd3Nlcl9XaW5k
b3cgKndpbmRvdyA9IHdpbmRvd19maW5kX3dpdGhfZXdrX3ZpZXcoc21hcnREYXRhLT5zZWxmKTsK
LSAgIHdpbmRvd19jbG9zZSh3aW5kb3cpOwotfQotCi1zdGF0aWMgdm9pZAotX2NvbnRleHRfbWVu
dV9pdGVtX3NlbGVjdGVkX2NiKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2
ZW50X2luZm8pCi17Ci0gICBpZiAoIWRhdGEpIHsKLSAgICAgRVJST1IoIkNvbnRleHQgbWVudSBj
YWxsYmFjayBkYXRhIGlzIE5VTEwuIik7Ci0gICAgIHJldHVybjsKLSAgIH0KLQotICAgRXdrX0Nv
bnRleHRfTWVudV9JdGVtICpld2tfaXRlbSA9IChFd2tfQ29udGV4dF9NZW51X0l0ZW0gKilkYXRh
OwotICAgSU5GTygiU2VsZWN0ZWQgY29udGV4dCBtZW51IGl0ZW06ICVzLiIsIGV3a19jb250ZXh0
X21lbnVfaXRlbV90aXRsZV9nZXQoZXdrX2l0ZW0pKTsKLSAgIGV3a19jb250ZXh0X21lbnVfaXRl
bV9zZWxlY3QoZXdrX2NvbnRleHRfbWVudV9pdGVtX3BhcmVudF9tZW51X2dldChld2tfaXRlbSks
IGV3a19pdGVtKTsKLSAgIGV3a19jb250ZXh0X21lbnVfaGlkZShld2tfY29udGV4dF9tZW51X2l0
ZW1fcGFyZW50X21lbnVfZ2V0KGV3a19pdGVtKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb250ZXh0
X21lbnVfcG9wdWxhdGUoRXZhc19PYmplY3QqIGNvbnRleHRfbWVudSwgRXdrX0NvbnRleHRfTWVu
dSAqZXdrX21lbnUsIEVsbV9PYmplY3RfSXRlbSAqcGFyZW50X2l0ZW0pCi17Ci0gICBpZiAoIWNv
bnRleHRfbWVudSB8fCAhZXdrX21lbnUpIHsKLSAgICAgRVJST1IoIk5lY2Vzc2FyeSBvYmplY3Rz
IGFyZSBOVUxMLiIpOwotICAgICByZXR1cm47Ci0gICB9Ci0KLSAgIGNvbnN0IEVpbmFfTGlzdCAq
bGlzdCA9IGV3a19jb250ZXh0X21lbnVfaXRlbXNfZ2V0KGV3a19tZW51KTsKLSAgIGNvbnN0IEVp
bmFfTGlzdCAqbDsKLSAgIHZvaWQgKmRhdGE7Ci0KLSAgIEV3a19Db250ZXh0X01lbnVfSXRlbSAq
ZXdrX2l0ZW07Ci0gICBFbG1fT2JqZWN0X0l0ZW0gKmVsbV9tZW51X2l0ZW07Ci0gICBFdmFzX09i
amVjdCAqZWxtX2NoZWNrX2l0ZW07Ci0KLSAgIEVJTkFfTElTVF9GT1JFQUNIKGxpc3QsIGwsIGRh
dGEpIHsKLSAgICAgZXdrX2l0ZW0gPSAoRXdrX0NvbnRleHRfTWVudV9JdGVtICopZGF0YTsKLSAg
ICAgc3dpdGNoIChld2tfY29udGV4dF9tZW51X2l0ZW1fdHlwZV9nZXQoZXdrX2l0ZW0pKSB7Ci0g
ICAgIGNhc2UgRVdLX0FDVElPTl9UWVBFOgotICAgICAgIGVsbV9tZW51X2l0ZW0gPSBlbG1fbWVu
dV9pdGVtX2FkZChjb250ZXh0X21lbnUsIHBhcmVudF9pdGVtLCBOVUxMLCBld2tfY29udGV4dF9t
ZW51X2l0ZW1fdGl0bGVfZ2V0KGV3a19pdGVtKSwgX2NvbnRleHRfbWVudV9pdGVtX3NlbGVjdGVk
X2NiLCBld2tfaXRlbSk7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgRVdLX0NIRUNLQUJMRV9B
Q1RJT05fVFlQRToKLSAgICAgICBlbG1fY2hlY2tfaXRlbSA9IGVsbV9jaGVja19hZGQoY29udGV4
dF9tZW51KTsKLSAgICAgICBlbG1fbWVudV9pdGVtID0gZWxtX21lbnVfaXRlbV9hZGQoY29udGV4
dF9tZW51LCBwYXJlbnRfaXRlbSwgTlVMTCwgZXdrX2NvbnRleHRfbWVudV9pdGVtX3RpdGxlX2dl
dChld2tfaXRlbSksIF9jb250ZXh0X21lbnVfaXRlbV9zZWxlY3RlZF9jYiwgZXdrX2l0ZW0pOwot
ICAgICAgIGVsbV9vYmplY3RfaXRlbV9jb250ZW50X3NldChlbG1fbWVudV9pdGVtLCBlbG1fY2hl
Y2tfaXRlbSk7Ci0gICAgICAgZWxtX2NoZWNrX3N0YXRlX3NldChlbG1fY2hlY2tfaXRlbSwgZXdr
X2NvbnRleHRfbWVudV9pdGVtX2NoZWNrZWRfZ2V0KGV3a19pdGVtKSk7Ci0gICAgICAgYnJlYWs7
Ci0gICAgIGNhc2UgRVdLX1NVQk1FTlVfVFlQRToKLSAgICAgICBlbG1fbWVudV9pdGVtID0gZWxt
X21lbnVfaXRlbV9hZGQoY29udGV4dF9tZW51LCBwYXJlbnRfaXRlbSwgTlVMTCwgZXdrX2NvbnRl
eHRfbWVudV9pdGVtX3RpdGxlX2dldChld2tfaXRlbSksIE5VTEwsIGV3a19pdGVtKTsKLSAgICAg
ICBpZiAoZWxtX21lbnVfaXRlbSkKLSAgICAgICAgIGNvbnRleHRfbWVudV9wb3B1bGF0ZShjb250
ZXh0X21lbnUsIGV3a19jb250ZXh0X21lbnVfaXRlbV9zdWJtZW51X2dldChld2tfaXRlbSksIGVs
bV9tZW51X2l0ZW0pOwotICAgICAgIGJyZWFrOwotICAgICBkZWZhdWx0OgotICAgICAgIGNvbnRp
bnVlOwotICAgICB9Ci0gICAgIGVsbV9vYmplY3RfaXRlbV9kaXNhYmxlZF9zZXQoZWxtX21lbnVf
aXRlbSwgIWV3a19jb250ZXh0X21lbnVfaXRlbV9lbmFibGVkX2dldChld2tfaXRlbSkpOwotICAg
fQotfQotCi1zdGF0aWMgRWluYV9Cb29sCi1fY29udGV4dF9tZW51X3Nob3coRXdrX1ZpZXdfU21h
cnRfRGF0YSAqc2QsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFd2tfQ29udGV4dF9NZW51
ICptZW51KQotewotICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19maW5kX3dpdGhf
ZXdrX3ZpZXcoc2QtPnNlbGYpOwotCi0gICBpZiAoIXdpbmRvdyB8fCAhbWVudSkgewotICAgICBF
UlJPUigiTmVjZXNzYXJ5IG9iamVjdHMgYXJlIE5VTEwuIik7Ci0gICAgIHJldHVybiBFSU5BX0ZB
TFNFOwotICAgfQotCi0gICB3aW5kb3ctPmNvbnRleHRfbWVudS5lbG1fbWVudSA9IGVsbV9tZW51
X2FkZCh3aW5kb3ctPmVsbV93aW5kb3cpOwotCi0gICBpZiAoIXdpbmRvdy0+Y29udGV4dF9tZW51
LmVsbV9tZW51KSB7Ci0gICAgIEVSUk9SKCJDb3VsZCBub3QgY3JlYXRlIG1lbnUgd2lkZ2V0LiIp
OwotICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgIH0KLQotICAgd2luZG93LT5jb250ZXh0X21l
bnUuZXdrX21lbnUgPSBtZW51OwotCi0gICBjb250ZXh0X21lbnVfcG9wdWxhdGUod2luZG93LT5j
b250ZXh0X21lbnUuZWxtX21lbnUsIG1lbnUsIE5VTEwpOwotCi0gICBJTkZPKCJTaG93aW5nIGNv
bnRleHQgbWVudSBhdCAoJWQsICVkKS4iLCB4LCB5KTsKLSAgIGVsbV9tZW51X21vdmUod2luZG93
LT5jb250ZXh0X21lbnUuZWxtX21lbnUsIHgsIHkpOwotICAgZXZhc19vYmplY3Rfc2hvdyh3aW5k
b3ctPmNvbnRleHRfbWVudS5lbG1fbWVudSk7Ci0KLSAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0K
LXN0YXRpYyBFaW5hX0Jvb2wKLV9jb250ZXh0X21lbnVfaGlkZShFd2tfVmlld19TbWFydF9EYXRh
ICpzZCkKLXsKLSAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfZmluZF93aXRoX2V3
a192aWV3KHNkLT5zZWxmKTsKLQotICAgaWYgKCF3aW5kb3cgfHwgIXdpbmRvdy0+Y29udGV4dF9t
ZW51LmVsbV9tZW51KSB7Ci0gICAgIEVSUk9SKCJOZWNlc3Nhcnkgb2JqZWN0cyBhcmUgTlVMTC4i
KTsKLSAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICB9Ci0KLSAgIGVsbV9tZW51X2Nsb3NlKHdp
bmRvdy0+Y29udGV4dF9tZW51LmVsbV9tZW51KTsKLSAgIGV2YXNfb2JqZWN0X2RlbCh3aW5kb3ct
PmNvbnRleHRfbWVudS5lbG1fbWVudSk7Ci0gICB3aW5kb3ctPmNvbnRleHRfbWVudS5lbG1fbWVu
dSA9IE5VTEw7Ci0gICB3aW5kb3ctPmNvbnRleHRfbWVudS5ld2tfbWVudSA9IE5VTEw7Ci0KLSAg
IHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdXRoX3BvcHVwX2Nsb3NlKEF1
dGhfRGF0YSAqYXV0aF9kYXRhKQotewotICAgZXdrX29iamVjdF91bnJlZihhdXRoX2RhdGEtPnJl
cXVlc3QpOwotICAgZXZhc19vYmplY3RfZGVsKGF1dGhfZGF0YS0+cG9wdXApOwotICAgZnJlZShh
dXRoX2RhdGEpOwotfQotCi1zdGF0aWMgdm9pZAotX2F1dGhfY2FuY2VsX2NiKHZvaWQgKnVzZXJf
ZGF0YSwgRXZhc19PYmplY3QgKm9iaiwgdm9pZCAqZXZlbnRfaW5mbykKLXsKLSAgIEF1dGhfRGF0
YSAqYXV0aF9kYXRhID0gKEF1dGhfRGF0YSAqKXVzZXJfZGF0YTsKLQotICAgZXdrX2F1dGhfcmVx
dWVzdF9jYW5jZWwoYXV0aF9kYXRhLT5yZXF1ZXN0KTsKLQotICAgYXV0aF9wb3B1cF9jbG9zZShh
dXRoX2RhdGEpOwotfQotCi1zdGF0aWMgdm9pZAotX2F1dGhfb2tfY2Iodm9pZCAqdXNlcl9kYXRh
LCBFdmFzX09iamVjdCAqb2JqLCB2b2lkICpldmVudF9pbmZvKQotewotICAgQXV0aF9EYXRhICph
dXRoX2RhdGEgPSAoQXV0aF9EYXRhICopdXNlcl9kYXRhOwotCi0gICBjb25zdCBjaGFyICp1c2Vy
bmFtZSA9IGVsbV9lbnRyeV9lbnRyeV9nZXQoYXV0aF9kYXRhLT51c2VybmFtZV9lbnRyeSk7Ci0g
ICBjb25zdCBjaGFyICpwYXNzd29yZCA9IGVsbV9lbnRyeV9lbnRyeV9nZXQoYXV0aF9kYXRhLT5w
YXNzd29yZF9lbnRyeSk7Ci0gICBld2tfYXV0aF9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShhdXRoX2Rh
dGEtPnJlcXVlc3QsIHVzZXJuYW1lLCBwYXNzd29yZCk7Ci0KLSAgIGF1dGhfcG9wdXBfY2xvc2Uo
YXV0aF9kYXRhKTsKLX0KLQotc3RhdGljIHZvaWQKLV9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Ni
KHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKm9iaiwgdm9pZCAqZXZlbnRfaW5mbykKLXsK
LSAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7
Ci0gICBFd2tfQXV0aF9SZXF1ZXN0ICpyZXF1ZXN0ID0gZXdrX29iamVjdF9yZWYoKEV3a19BdXRo
X1JlcXVlc3QgKilldmVudF9pbmZvKTsKLQotICAgQXV0aF9EYXRhICphdXRoX2RhdGEgPSAoQXV0
aF9EYXRhICopbWFsbG9jKHNpemVvZihBdXRoX0RhdGEpKTsKLSAgIGF1dGhfZGF0YS0+cmVxdWVz
dCA9IHJlcXVlc3Q7Ci0KLSAgIEV2YXNfT2JqZWN0ICphdXRoX3BvcHVwID0gZWxtX3BvcHVwX2Fk
ZCh3aW5kb3ctPmVsbV93aW5kb3cpOwotICAgYXV0aF9kYXRhLT5wb3B1cCA9IGF1dGhfcG9wdXA7
Ci0gICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChhdXRoX3BvcHVwLCBFVkFTX0hJ
TlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsKLSAgIGVsbV9vYmplY3RfcGFydF90ZXh0X3Nl
dChhdXRoX3BvcHVwLCAidGl0bGUsdGV4dCIsICJBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCIpOwot
Ci0gICAvKiBQb3B1cCBDb250ZW50ICovCi0gICBFdmFzX09iamVjdCAqdmJveCA9IGVsbV9ib3hf
YWRkKGF1dGhfcG9wdXApOwotICAgZWxtX2JveF9wYWRkaW5nX3NldCh2Ym94LCAwLCA0KTsKLSAg
IGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KHZib3gsIEVWQVNfSElOVF9FWFBBTkQs
IEVWQVNfSElOVF9FWFBBTkQpOwotICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldCh2
Ym94LCBFVkFTX0hJTlRfRklMTCwgRVZBU19ISU5UX0ZJTEwpOwotICAgZWxtX29iamVjdF9jb250
ZW50X3NldChhdXRoX3BvcHVwLCB2Ym94KTsKLSAgIGV2YXNfb2JqZWN0X3Nob3codmJveCk7Ci0K
LSAgIC8qIEF1dGhlbnRpY2F0aW9uIG1lc3NhZ2UgKi8KLSAgIEV2YXNfT2JqZWN0ICpsYWJlbCA9
IGVsbV9sYWJlbF9hZGQoYXV0aF9wb3B1cCk7Ci0gICBlbG1fbGFiZWxfbGluZV93cmFwX3NldChs
YWJlbCwgRUxNX1dSQVBfV09SRCk7Ci0gICBFaW5hX1N0cmJ1ZiAqYXV0aF90ZXh0ID0gZWluYV9z
dHJidWZfbmV3KCk7Ci0gICBjb25zdCBjaGFyICpob3N0ID0gZXdrX2F1dGhfcmVxdWVzdF9ob3N0
X2dldChyZXF1ZXN0KTsKLSAgIGNvbnN0IGNoYXIgKnJlYWxtID0gZXdrX2F1dGhfcmVxdWVzdF9y
ZWFsbV9nZXQocmVxdWVzdCk7Ci0gICBlaW5hX3N0cmJ1Zl9hcHBlbmRfcHJpbnRmKGF1dGhfdGV4
dCwgIkEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSBiZWluZyByZXF1ZXN0ZWQgYnkgJXMuIFRo
ZSBzaXRlIHNheXM6IFwiJXNcIiIsIGhvc3QsIHJlYWxtID8gcmVhbG0gOiAiIik7Ci0gICBlbG1f
b2JqZWN0X3RleHRfc2V0KGxhYmVsLCBlaW5hX3N0cmJ1Zl9zdHJpbmdfZ2V0KGF1dGhfdGV4dCkp
OwotICAgZWluYV9zdHJidWZfZnJlZShhdXRoX3RleHQpOwotICAgZXZhc19vYmplY3Rfc2l6ZV9o
aW50X3dlaWdodF9zZXQobGFiZWwsIEVWQVNfSElOVF9FWFBBTkQsIEVWQVNfSElOVF9FWFBBTkQp
OwotICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldChsYWJlbCwgRVZBU19ISU5UX0ZJ
TEwsIEVWQVNfSElOVF9GSUxMKTsKLSAgIGVsbV9ib3hfcGFja19lbmQodmJveCwgbGFiZWwpOwot
ICAgZXZhc19vYmplY3Rfc2hvdyhsYWJlbCk7Ci0KLSAgIC8qIENyZWRlbnRpYWwgdGFibGUgKi8K
LSAgIEV2YXNfT2JqZWN0ICp0YWJsZSA9IGVsbV90YWJsZV9hZGQoYXV0aF9wb3B1cCk7Ci0gICBl
bG1fdGFibGVfcGFkZGluZ19zZXQodGFibGUsIDIsIDIpOwotICAgZWxtX3RhYmxlX2hvbW9nZW5l
b3VzX3NldCh0YWJsZSwgRUlOQV9UUlVFKTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWln
aHRfc2V0KHRhYmxlLCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsKLSAgIGV2
YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQodGFibGUsIEVWQVNfSElOVF9GSUxMLCBFVkFT
X0hJTlRfRklMTCk7Ci0gICBlbG1fYm94X3BhY2tfZW5kKHZib3gsIHRhYmxlKTsKLSAgIGV2YXNf
b2JqZWN0X3Nob3codGFibGUpOwotCi0gICAvKiBVc2VybmFtZSByb3cgKi8KLSAgIEV2YXNfT2Jq
ZWN0ICp1c2VybmFtZV9sYWJlbCA9IGVsbV9sYWJlbF9hZGQoYXV0aF9wb3B1cCk7Ci0gICBlbG1f
b2JqZWN0X3RleHRfc2V0KHVzZXJuYW1lX2xhYmVsLCAiVXNlcm5hbWU6Iik7Ci0gICBldmFzX29i
amVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldCh1c2VybmFtZV9sYWJlbCwgRVZBU19ISU5UX0VYUEFO
RCwgRVZBU19ISU5UX0VYUEFORCk7Ci0gICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxpZ25fc2V0
KHVzZXJuYW1lX2xhYmVsLCAxLCBFVkFTX0hJTlRfRklMTCk7Ci0gICBlbG1fdGFibGVfcGFjayh0
YWJsZSwgdXNlcm5hbWVfbGFiZWwsIDAsIDAsIDEsIDEpOwotICAgZXZhc19vYmplY3Rfc2hvdyh1
c2VybmFtZV9sYWJlbCk7Ci0KLSAgIEV2YXNfT2JqZWN0ICp1c2VybmFtZV9lbnRyeSA9IGVsbV9l
bnRyeV9hZGQoYXV0aF9wb3B1cCk7Ci0gICBhdXRoX2RhdGEtPnVzZXJuYW1lX2VudHJ5ID0gdXNl
cm5hbWVfZW50cnk7Ci0gICBlbG1fZW50cnlfc2Nyb2xsYWJsZV9zZXQodXNlcm5hbWVfZW50cnks
IEVJTkFfVFJVRSk7Ci0gICBlbG1fZW50cnlfc2luZ2xlX2xpbmVfc2V0KHVzZXJuYW1lX2VudHJ5
LCBFSU5BX1RSVUUpOwotICAgZWxtX2VudHJ5X3RleHRfc3R5bGVfdXNlcl9wdXNoKHVzZXJuYW1l
X2VudHJ5LCAiREVGQVVMVD0nZm9udF9zaXplPTE4JyIpOwotICAgY29uc3QgY2hhciAqc3VnZ2Vz
dGVkX3VzZXJuYW1lID0gZXdrX2F1dGhfcmVxdWVzdF9zdWdnZXN0ZWRfdXNlcm5hbWVfZ2V0KHJl
cXVlc3QpOwotICAgZWxtX2VudHJ5X2VudHJ5X3NldCh1c2VybmFtZV9lbnRyeSwgc3VnZ2VzdGVk
X3VzZXJuYW1lID8gc3VnZ2VzdGVkX3VzZXJuYW1lIDogIiIpOwotICAgZXZhc19vYmplY3Rfc2l6
ZV9oaW50X3dlaWdodF9zZXQodXNlcm5hbWVfZW50cnksIEVWQVNfSElOVF9FWFBBTkQsIEVWQVNf
SElOVF9FWFBBTkQpOwotICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldCh1c2VybmFt
ZV9lbnRyeSwgRVZBU19ISU5UX0ZJTEwsIEVWQVNfSElOVF9GSUxMKTsKLSAgIGVsbV90YWJsZV9w
YWNrKHRhYmxlLCB1c2VybmFtZV9lbnRyeSwgMSwgMCwgMiwgMSk7Ci0gICBlbG1fb2JqZWN0X2Zv
Y3VzX3NldCh1c2VybmFtZV9lbnRyeSwgRUlOQV9UUlVFKTsKLSAgIGV2YXNfb2JqZWN0X3Nob3co
dXNlcm5hbWVfZW50cnkpOwotCi0gICAvKiBQYXNzd29yZCByb3cgKi8KLSAgIEV2YXNfT2JqZWN0
ICpwYXNzd29yZF9sYWJlbCA9IGVsbV9sYWJlbF9hZGQoYXV0aF9wb3B1cCk7Ci0gICBlbG1fb2Jq
ZWN0X3RleHRfc2V0KHBhc3N3b3JkX2xhYmVsLCAiUGFzc3dvcmQ6Iik7Ci0gICBldmFzX29iamVj
dF9zaXplX2hpbnRfd2VpZ2h0X3NldChwYXNzd29yZF9sYWJlbCwgRVZBU19ISU5UX0VYUEFORCwg
RVZBU19ISU5UX0VYUEFORCk7Ci0gICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxpZ25fc2V0KHBh
c3N3b3JkX2xhYmVsLCAxLCBFVkFTX0hJTlRfRklMTCk7Ci0gICBlbG1fdGFibGVfcGFjayh0YWJs
ZSwgcGFzc3dvcmRfbGFiZWwsIDAsIDEsIDEsIDEpOwotICAgZXZhc19vYmplY3Rfc2hvdyhwYXNz
d29yZF9sYWJlbCk7Ci0KLSAgIEV2YXNfT2JqZWN0ICpwYXNzd29yZF9lbnRyeSA9IGVsbV9lbnRy
eV9hZGQoYXV0aF9wb3B1cCk7Ci0gICBhdXRoX2RhdGEtPnBhc3N3b3JkX2VudHJ5ID0gcGFzc3dv
cmRfZW50cnk7Ci0gICBlbG1fZW50cnlfc2Nyb2xsYWJsZV9zZXQocGFzc3dvcmRfZW50cnksIEVJ
TkFfVFJVRSk7Ci0gICBlbG1fZW50cnlfc2luZ2xlX2xpbmVfc2V0KHBhc3N3b3JkX2VudHJ5LCBF
SU5BX1RSVUUpOwotICAgZWxtX2VudHJ5X3Bhc3N3b3JkX3NldChwYXNzd29yZF9lbnRyeSwgRUlO
QV9UUlVFKTsKLSAgIGVsbV9lbnRyeV90ZXh0X3N0eWxlX3VzZXJfcHVzaChwYXNzd29yZF9lbnRy
eSwgIkRFRkFVTFQ9J2ZvbnRfc2l6ZT0xOCciKTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93
ZWlnaHRfc2V0KHBhc3N3b3JkX2VudHJ5LCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQ
QU5EKTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQocGFzc3dvcmRfZW50cnks
IEVWQVNfSElOVF9GSUxMLCBFVkFTX0hJTlRfRklMTCk7Ci0gICBlbG1fdGFibGVfcGFjayh0YWJs
ZSwgcGFzc3dvcmRfZW50cnksIDEsIDEsIDIsIDEpOwotICAgZXZhc19vYmplY3Rfc2hvdyhwYXNz
d29yZF9lbnRyeSk7Ci0KLSAgIC8qIFBvcHVwIGJ1dHRvbnMgKi8KLSAgIEV2YXNfT2JqZWN0ICpj
YW5jZWxfYnV0dG9uID0gZWxtX2J1dHRvbl9hZGQoYXV0aF9wb3B1cCk7Ci0gICBlbG1fb2JqZWN0
X3RleHRfc2V0KGNhbmNlbF9idXR0b24sICJDYW5jZWwiKTsKLSAgIGVsbV9vYmplY3RfcGFydF9j
b250ZW50X3NldChhdXRoX3BvcHVwLCAiYnV0dG9uMSIsIGNhbmNlbF9idXR0b24pOwotICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKGNhbmNlbF9idXR0b24sICJjbGlja2VkIiwgX2F1
dGhfY2FuY2VsX2NiLCBhdXRoX2RhdGEpOwotICAgRXZhc19PYmplY3QgKm9rX2J1dHRvbiA9IGVs
bV9idXR0b25fYWRkKGF1dGhfcG9wdXApOwotICAgZWxtX29iamVjdF90ZXh0X3NldChva19idXR0
b24sICJPSyIpOwotICAgZWxtX29iamVjdF9wYXJ0X2NvbnRlbnRfc2V0KGF1dGhfcG9wdXAsICJi
dXR0b24yIiwgb2tfYnV0dG9uKTsKLSAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChv
a19idXR0b24sICJjbGlja2VkIiwgX2F1dGhfb2tfY2IsIGF1dGhfZGF0YSk7Ci0gICBldmFzX29i
amVjdF9zaG93KGF1dGhfcG9wdXApOwotfQotCi1zdGF0aWMgdm9pZAotX3NlYXJjaF90ZXh0X2Zv
dW5kX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKm9iaiwgdm9pZCAqZXZlbnRfaW5m
bykKLXsKLSAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2Vy
X2RhdGE7Ci0KLSAgIGNvbnN0IGludCAqbWF0Y2hfY291bnQgPSAoY29uc3QgaW50ICopKGV2ZW50
X2luZm8pOwotCi0gICBpZiAoKm1hdGNoX2NvdW50KSB7Ci0gICAgIEVpbmFfU3RyYnVmICpzZWFy
Y2hfdGV4dCA9IGVpbmFfc3RyYnVmX25ldygpOwotICAgICBlaW5hX3N0cmJ1Zl9hcHBlbmRfcHJp
bnRmKHNlYXJjaF90ZXh0LCAiICAlZCAgTWF0Y2hlcyBGb3VuZCAiICwgKm1hdGNoX2NvdW50KTsK
LSAgICAgZWxtX29iamVjdF90ZXh0X3NldCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGRfY291
bnQsIGVpbmFfc3RyYnVmX3N0cmluZ19nZXQoc2VhcmNoX3RleHQpKTsKLSAgICAgZWluYV9zdHJi
dWZfZnJlZShzZWFyY2hfdGV4dCk7Ci0gICB9IGVsc2UKLSAgICAgZWxtX29iamVjdF90ZXh0X3Nl
dCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGRfY291bnQsICIgTm8gTWF0Y2hlcyBGb3VuZCIp
OwotCi0gICBldmFzX29iamVjdF9mb2N1c19zZXQod2luZG93LT5ld2tfdmlldywgRUlOQV9GQUxT
RSk7Ci0gICBlbG1fb2JqZWN0X2ZvY3VzX3NldCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGRf
Y291bnQsIEVJTkFfRkFMU0UpOwotICAgZWxtX29iamVjdF9mb2N1c19zZXQod2luZG93LT5zZWFy
Y2guc2VhcmNoX2ZpZWxkLCBFSU5BX1RSVUUpOwotfQotCi1zdGF0aWMgdm9pZAotX3Rvb2x0aXBf
dGV4dF9zZXQodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqb2JqLCB2b2lkICpldmVudF9p
bmZvKQotewotICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVz
ZXJfZGF0YTsKLSAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSAoY29uc3QgY2hhciopZXZlbnRfaW5m
bzsKLQotICAgZWxtX29iamVjdF90b29sdGlwX3RleHRfc2V0KHdpbmRvdy0+ZWxtX3dpbmRvdywg
bWVzc2FnZSk7Ci0gICB3aW5kb3ctPnRvb2x0aXAudGV4dF9zZXQgPSBFSU5BX1RSVUU7Ci0gICB3
aW5kb3dfdG9vbHRpcF91cGRhdGUod2luZG93KTsKLX0KLQotc3RhdGljIHZvaWQKLV90b29sdGlw
X3RleHRfdW5zZXQodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqb2JqLCB2b2lkICpldmVu
dF9pbmZvKQotewotICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAq
KXVzZXJfZGF0YTsKLQotICAgd2luZG93X3Rvb2x0aXBfaGlkZSh3aW5kb3cpOwotICAgZWxtX29i
amVjdF90b29sdGlwX3Vuc2V0KHdpbmRvdy0+ZWxtX3dpbmRvdyk7Ci0gICB3aW5kb3ctPnRvb2x0
aXAudGV4dF9zZXQgPSBFSU5BX0ZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotX25hdmlnYXRpb25f
cG9saWN5X2RlY2lzaW9uX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKm9iaiwgdm9p
ZCAqZXZlbnRfaW5mbykKLXsKLSAgIEV3a19OYXZpZ2F0aW9uX1BvbGljeV9EZWNpc2lvbiAqZGVj
aXNpb24gPSAoRXdrX05hdmlnYXRpb25fUG9saWN5X0RlY2lzaW9uICopZXZlbnRfaW5mbzsKLQot
ICAgaWYgKGV3a19uYXZpZ2F0aW9uX3BvbGljeV9tb3VzZV9idXR0b25fZ2V0KGRlY2lzaW9uKSA9
PSBFV0tfRVZFTlRfTU9VU0VfQlVUVE9OX01JRERMRSkgewotICAgICBCcm93c2VyX1dpbmRvdyAq
d2luZG93ID0gd2luZG93X2NyZWF0ZShOVUxMLCAwLCAwKTsKLSAgICAgZXdrX3ZpZXdfdXJsX3Nl
dCh3aW5kb3ctPmV3a192aWV3LCBld2tfdXJsX3JlcXVlc3RfdXJsX2dldChld2tfbmF2aWdhdGlv
bl9wb2xpY3lfcmVxdWVzdF9nZXQoZGVjaXNpb24pKSk7Ci0gICAgIHdpbmRvd3MgPSBlaW5hX2xp
c3RfYXBwZW5kKHdpbmRvd3MsIHdpbmRvdyk7Ci0gICAgIElORk8oIk1vdXNlIG1pZGRsZSBidXR0
b24gcHJlc3NlZCwgb3BlbiBsaW5rIGluIG5ldyB3aW5kb3ciKTsKLQotICAgICBld2tfbmF2aWdh
dGlvbl9wb2xpY3lfZGVjaXNpb25fcmVqZWN0KGRlY2lzaW9uKTsKLSAgIH0KLX0KLQotc3RhdGlj
IHZvaWQKLV9zZWFyY2hfYnV0dG9uX2NsaWNrZWRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09i
amVjdCAqaG9tZV9idXR0b24sIHZvaWQgKmV2ZW50X2luZm8pCi17Ci0gICBCcm93c2VyX1dpbmRv
dyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotCi0gICBzZWFyY2hfYm94
X3Nob3cod2luZG93KTsKLX0KLQotc3RhdGljIHZvaWQKLV9ob21lX2J1dHRvbl9jbGlja2VkX2Ni
KHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmhvbWVfYnV0dG9uLCB2b2lkICpldmVudF9p
bmZvKQotewotICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVz
ZXJfZGF0YTsKLQotICAgZXdrX3ZpZXdfdXJsX3NldCh3aW5kb3ctPmV3a192aWV3LCBERUZBVUxU
X1VSTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fd2luZG93X2RlbGV0aW9uX2NiKHZvaWQgKnVzZXJf
ZGF0YSwgRXZhc19PYmplY3QgKmVsbV93aW5kb3csIHZvaWQgKmV2ZW50X2luZm8pCi17Ci0gICBC
cm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotICAg
ZXdrX3ZpZXdfdHJ5X2Nsb3NlKHdpbmRvdy0+ZXdrX3ZpZXcpOwotfQotCi1zdGF0aWMgRXZhc19P
YmplY3QgKgotX2NyZWF0ZV90b29sYmFyX2J1dHRvbihFdmFzX09iamVjdCAqZWxtX3dpbmRvdywg
Y29uc3QgY2hhciAqaWNvbl9uYW1lKQotewotICAgRXZhc19PYmplY3QgKmJ1dHRvbiA9IGVsbV9i
dXR0b25fYWRkKGVsbV93aW5kb3cpOwotCi0gICBFdmFzX09iamVjdCAqaWNvbiA9IGVsbV9pY29u
X2FkZChlbG1fd2luZG93KTsKLSAgIGVsbV9pY29uX3N0YW5kYXJkX3NldChpY29uLCBpY29uX25h
bWUpOwotICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X21heF9zZXQoaWNvbiwgVE9PTF9CQVJfSUNP
Tl9TSVpFLCBUT09MX0JBUl9JQ09OX1NJWkUpOwotICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KGlj
b24sIDAsIDI1NSwgMjU1LCAyNTUpOwotICAgZXZhc19vYmplY3Rfc2hvdyhpY29uKTsKLSAgIGVs
bV9vYmplY3RfcGFydF9jb250ZW50X3NldChidXR0b24sICJpY29uIiwgaWNvbik7Ci0gICBldmFz
X29iamVjdF9zaXplX2hpbnRfbWluX3NldChidXR0b24sIFRPT0xfQkFSX0JVVFRPTl9TSVpFLCBU
T09MX0JBUl9CVVRUT05fU0laRSk7Ci0KLSAgIHJldHVybiBidXR0b247Ci19Ci0KLXN0YXRpYyBC
cm93c2VyX1dpbmRvdyAqd2luZG93X2NyZWF0ZShFd2tfVmlld19Db25maWd1cmF0aW9uKiBjb25m
aWd1cmF0aW9uLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICBCcm93c2VyX1dpbmRvdyAq
d2luZG93ID0gY2FsbG9jKDEsIHNpemVvZihCcm93c2VyX1dpbmRvdykpOwotICAgaWYgKCF3aW5k
b3cpIHsKLSAgICAgRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgYnJvd3NlciB3aW5kb3cuIik7Ci0g
ICAgIHJldHVybiBOVUxMOwotICAgfQotCi0gICAvKiBJbml0aWFsaXplIHRvb2x0aXAgaW5mb3Jt
YXRpb24gKi8KLSAgIHdpbmRvdy0+dG9vbHRpcC5zaG93X3RpbWVyID0gTlVMTDsKLSAgIHdpbmRv
dy0+dG9vbHRpcC5hY3RpdmF0ZWQgPSBFSU5BX0ZBTFNFOwotICAgd2luZG93LT50b29sdGlwLnRl
eHRfc2V0ID0gRUlOQV9GQUxTRTsKLSAgIHdpbmRvdy0+dG9vbHRpcC5zaG93biA9IEVJTkFfRkFM
U0U7Ci0KLSAgIC8qIENyZWF0ZSB3aW5kb3cgKi8KLSAgIHdpbmRvdy0+ZWxtX3dpbmRvdyA9IGVs
bV93aW5fYWRkKE5VTEwsICJtaW5pYnJvd3Nlci13aW5kb3ciLCBFTE1fV0lOX0JBU0lDKTsKLSAg
IGVsbV93aW5fdGl0bGVfc2V0KHdpbmRvdy0+ZWxtX3dpbmRvdywgQVBQX05BTUUpOwotICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdywgImRlbGV0ZSxy
ZXF1ZXN0IiwgX3dpbmRvd19kZWxldGlvbl9jYiwgd2luZG93KTsKLQotICAgLyogQ3JlYXRlIHdp
bmRvdyBiYWNrZ3JvdW5kICovCi0gICBFdmFzX09iamVjdCAqYmcgPSBlbG1fYmdfYWRkKHdpbmRv
dy0+ZWxtX3dpbmRvdyk7Ci0gICBlbG1fYmdfY29sb3Jfc2V0KGJnLCAxOTMsIDE5MiwgMTkxKTsK
LSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KGJnLCBFVkFTX0hJTlRfRVhQQU5E
LCBFVkFTX0hJTlRfRVhQQU5EKTsKLSAgIGVsbV93aW5fcmVzaXplX29iamVjdF9hZGQod2luZG93
LT5lbG1fd2luZG93LCBiZyk7Ci0gICBldmFzX29iamVjdF9zaG93KGJnKTsKLQotICAgLyogQ3Jl
YXRlIGNvbmZvcm1hbnQgd2lkZ2V0LiAqLwotICAgRXZhc19PYmplY3QgKmNvbmZvcm1hbnQgPSBl
bG1fY29uZm9ybWFudF9hZGQod2luZG93LT5lbG1fd2luZG93KTsKLSAgIGV2YXNfb2JqZWN0X3Np
emVfaGludF93ZWlnaHRfc2V0KGNvbmZvcm1hbnQsIEVWQVNfSElOVF9FWFBBTkQsIEVWQVNfSElO
VF9FWFBBTkQpOwotICAgZWxtX3dpbl9yZXNpemVfb2JqZWN0X2FkZCh3aW5kb3ctPmVsbV93aW5k
b3csIGNvbmZvcm1hbnQpOwotICAgZXZhc19vYmplY3Rfc2hvdyhjb25mb3JtYW50KTsKLQotICAg
LyogQ3JlYXRlIHZlcnRpY2FsIGxheW91dCAqLwotICAgd2luZG93LT52ZXJ0aWNhbF9sYXlvdXQg
PSBlbG1fYm94X2FkZCh3aW5kb3ctPmVsbV93aW5kb3cpOwotICAgZWxtX29iamVjdF9jb250ZW50
X3NldChjb25mb3JtYW50LCB3aW5kb3ctPnZlcnRpY2FsX2xheW91dCk7Ci0gICBlbG1fYm94X3Bh
ZGRpbmdfc2V0KHdpbmRvdy0+dmVydGljYWxfbGF5b3V0LCAwLCAyKTsKLSAgIGV2YXNfb2JqZWN0
X3NpemVfaGludF93ZWlnaHRfc2V0KHdpbmRvdy0+dmVydGljYWxfbGF5b3V0LCBFVkFTX0hJTlRf
RVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsKLSAgIGV2YXNfb2JqZWN0X3Nob3cod2luZG93LT52
ZXJ0aWNhbF9sYXlvdXQpOwotCi0gICAvKiBDcmVhdGUgaG9yaXpvbnRhbCBsYXlvdXQgZm9yIHRv
cCBiYXIgKi8KLSAgIHdpbmRvdy0+aG9yaXpvbnRhbF9sYXlvdXQgPSBlbG1fYm94X2FkZCh3aW5k
b3ctPmVsbV93aW5kb3cpOwotICAgZWxtX2JveF9ob3Jpem9udGFsX3NldCh3aW5kb3ctPmhvcml6
b250YWxfbGF5b3V0LCBFSU5BX1RSVUUpOwotICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdo
dF9zZXQod2luZG93LT5ob3Jpem9udGFsX2xheW91dCwgRVZBU19ISU5UX0VYUEFORCwgMC4wKTsK
LSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQod2luZG93LT5ob3Jpem9udGFsX2xh
eW91dCwgRVZBU19ISU5UX0ZJTEwsIDAuMCk7Ci0gICBlbG1fYm94X3BhY2tfZW5kKHdpbmRvdy0+
dmVydGljYWxfbGF5b3V0LCB3aW5kb3ctPmhvcml6b250YWxfbGF5b3V0KTsKLSAgIGV2YXNfb2Jq
ZWN0X3Nob3cod2luZG93LT5ob3Jpem9udGFsX2xheW91dCk7Ci0KLSAgIC8qIENyZWF0ZSBCYWNr
IGJ1dHRvbiAqLwotICAgd2luZG93LT5iYWNrX2J1dHRvbiA9IF9jcmVhdGVfdG9vbGJhcl9idXR0
b24od2luZG93LT5lbG1fd2luZG93LCAiYXJyb3dfbGVmdCIpOwotICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+YmFja19idXR0b24sICJjbGlja2VkIiwgX2JhY2tfYnV0
dG9uX2NsaWNrZWRfY2IsIHdpbmRvdyk7Ci0gICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQod2luZG93LT5iYWNrX2J1dHRvbiwgInJlcGVhdGVkIiwgX2JhY2tfYnV0dG9uX2xvbmdwcmVz
c19jYiwgd2luZG93KTsKLSAgIGVsbV9vYmplY3RfdG9vbHRpcF90ZXh0X3NldCh3aW5kb3ctPmJh
Y2tfYnV0dG9uLCAiQ2xpY2sgdG8gZ28gYmFjaywgbG9uZ3ByZXNzIHRvIHNlZSBzZXNzaW9uIGhp
c3RvcnkiKTsKLSAgIGVsbV9vYmplY3RfdG9vbHRpcF93aW5kb3dfbW9kZV9zZXQod2luZG93LT5i
YWNrX2J1dHRvbiwgRUlOQV9UUlVFKTsKLSAgIGVsbV9vYmplY3RfZGlzYWJsZWRfc2V0KHdpbmRv
dy0+YmFja19idXR0b24sIEVJTkFfVFJVRSk7Ci0gICBldmFzX29iamVjdF9zaXplX2hpbnRfd2Vp
Z2h0X3NldCh3aW5kb3ctPmJhY2tfYnV0dG9uLCAwLjAsIEVWQVNfSElOVF9FWFBBTkQpOwotICAg
ZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldCh3aW5kb3ctPmJhY2tfYnV0dG9uLCAwLjAs
IDAuNSk7Ci0gICBlbG1fYm94X3BhY2tfZW5kKHdpbmRvdy0+aG9yaXpvbnRhbF9sYXlvdXQsIHdp
bmRvdy0+YmFja19idXR0b24pOwotICAgZXZhc19vYmplY3Rfc2hvdyh3aW5kb3ctPmJhY2tfYnV0
dG9uKTsKLQotICAgLyogQ3JlYXRlIEZvcndhcmQgYnV0dG9uICovCi0gICB3aW5kb3ctPmZvcndh
cmRfYnV0dG9uID0gX2NyZWF0ZV90b29sYmFyX2J1dHRvbih3aW5kb3ctPmVsbV93aW5kb3csICJh
cnJvd19yaWdodCIpOwotICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+
Zm9yd2FyZF9idXR0b24sICJjbGlja2VkIiwgX2ZvcndhcmRfYnV0dG9uX2NsaWNrZWRfY2IsIHdp
bmRvdyk7Ci0gICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5mb3J3YXJk
X2J1dHRvbiwgInJlcGVhdGVkIiwgX2ZvcndhcmRfYnV0dG9uX2xvbmdwcmVzc19jYiwgd2luZG93
KTsKLSAgIGVsbV9vYmplY3RfdG9vbHRpcF90ZXh0X3NldCh3aW5kb3ctPmZvcndhcmRfYnV0dG9u
LCAiQ2xpY2sgdG8gZ28gZm9yd2FyZCwgbG9uZ3ByZXNzIHRvIHNlZSBzZXNzaW9uIGhpc3Rvcnki
KTsKLSAgIGVsbV9vYmplY3RfdG9vbHRpcF93aW5kb3dfbW9kZV9zZXQod2luZG93LT5mb3J3YXJk
X2J1dHRvbiwgRUlOQV9UUlVFKTsKLSAgIGVsbV9vYmplY3RfZGlzYWJsZWRfc2V0KHdpbmRvdy0+
Zm9yd2FyZF9idXR0b24sIEVJTkFfVFJVRSk7Ci0gICBldmFzX29iamVjdF9zaXplX2hpbnRfd2Vp
Z2h0X3NldCh3aW5kb3ctPmZvcndhcmRfYnV0dG9uLCAwLjAsIEVWQVNfSElOVF9FWFBBTkQpOwot
ICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldCh3aW5kb3ctPmZvcndhcmRfYnV0dG9u
LCAwLjAsIDAuNSk7Ci0gICBlbG1fYm94X3BhY2tfZW5kKHdpbmRvdy0+aG9yaXpvbnRhbF9sYXlv
dXQsIHdpbmRvdy0+Zm9yd2FyZF9idXR0b24pOwotICAgZXZhc19vYmplY3Rfc2hvdyh3aW5kb3ct
PmZvcndhcmRfYnV0dG9uKTsKLQotICAgLyogQ3JlYXRlIFNlYXJjaCBidXR0b24gKi8KLSAgIEV2
YXNfT2JqZWN0ICpzZWFyY2hfYnV0dG9uID0gX2NyZWF0ZV90b29sYmFyX2J1dHRvbih3aW5kb3ct
PmVsbV93aW5kb3csICJ0b29sYmFyL3NlYXJjaCIpOwotICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfYWRkKHNlYXJjaF9idXR0b24sICJjbGlja2VkIiwgX3NlYXJjaF9idXR0b25fY2xpY2tl
ZF9jYiwgd2luZG93KTsKLSAgIGVsbV9vYmplY3RfdG9vbHRpcF90ZXh0X3NldChzZWFyY2hfYnV0
dG9uLCAiRmluZCB0ZXh0Iik7Ci0gICBlbG1fb2JqZWN0X3Rvb2x0aXBfd2luZG93X21vZGVfc2V0
KHNlYXJjaF9idXR0b24sIEVJTkFfVFJVRSk7Ci0gICBldmFzX29iamVjdF9zaXplX2hpbnRfd2Vp
Z2h0X3NldChzZWFyY2hfYnV0dG9uLCAwLjAsIEVWQVNfSElOVF9FWFBBTkQpOwotICAgZXZhc19v
YmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldChzZWFyY2hfYnV0dG9uLCAxLjAsIDAuNSk7Ci0gICBl
bG1fYm94X3BhY2tfZW5kKHdpbmRvdy0+aG9yaXpvbnRhbF9sYXlvdXQsIHNlYXJjaF9idXR0b24p
OwotICAgZXZhc19vYmplY3Rfc2hvdyhzZWFyY2hfYnV0dG9uKTsKLQotICAgLyogQ3JlYXRlIFVS
TCBiYXIgKi8KLSAgIHdpbmRvdy0+dXJsX2JhciA9IGVsbV9lbnRyeV9hZGQod2luZG93LT5lbG1f
d2luZG93KTsKLSAgIGVsbV9lbnRyeV9zY3JvbGxhYmxlX3NldCh3aW5kb3ctPnVybF9iYXIsIEVJ
TkFfVFJVRSk7Ci0gICBlbG1fc2Nyb2xsZXJfcG9saWN5X3NldCh3aW5kb3ctPnVybF9iYXIsIEVM
TV9TQ1JPTExFUl9QT0xJQ1lfT0ZGLCBFTE1fU0NST0xMRVJfUE9MSUNZX09GRik7Ci0gICBlbG1f
ZW50cnlfc2luZ2xlX2xpbmVfc2V0KHdpbmRvdy0+dXJsX2JhciwgRUlOQV9UUlVFKTsKLSAgIGVs
bV9lbnRyeV9jbnBfbW9kZV9zZXQod2luZG93LT51cmxfYmFyLCBFTE1fQ05QX01PREVfUExBSU5U
RVhUKTsKLSAgIGVsbV9lbnRyeV90ZXh0X3N0eWxlX3VzZXJfcHVzaCh3aW5kb3ctPnVybF9iYXIs
ICJERUZBVUxUPSdmb250X3NpemU9MTgnIik7Ci0gICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19hZGQod2luZG93LT51cmxfYmFyLCAiYWN0aXZhdGVkIiwgX3VybF9iYXJfYWN0aXZhdGVkX2Ni
LCB3aW5kb3cpOwotICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+dXJs
X2JhciwgImNsaWNrZWQiLCBfdXJsX2Jhcl9jbGlja2VkX2NiLCB3aW5kb3cpOwotICAgZXZhc19v
YmplY3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQod2luZG93LT51cmxfYmFyLCBFVkFTX0hJTlRfRVhQ
QU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9z
ZXQod2luZG93LT51cmxfYmFyLCBFVkFTX0hJTlRfRklMTCwgRVZBU19ISU5UX0ZJTEwpOwotICAg
ZWxtX2JveF9wYWNrX2VuZCh3aW5kb3ctPmhvcml6b250YWxfbGF5b3V0LCB3aW5kb3ctPnVybF9i
YXIpOwotICAgZXZhc19vYmplY3Rfc2hvdyh3aW5kb3ctPnVybF9iYXIpOwotCi0gICAvKiBDcmVh
dGUgUmVmcmVzaCBidXR0b24gKi8KLSAgIEV2YXNfT2JqZWN0ICpyZWZyZXNoX2J1dHRvbiA9IF9j
cmVhdGVfdG9vbGJhcl9idXR0b24od2luZG93LT5lbG1fd2luZG93LCAicmVmcmVzaCIpOwotICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHJlZnJlc2hfYnV0dG9uLCAiY2xpY2tlZCIs
IF9yZWZyZXNoX2J1dHRvbl9jbGlja2VkX2NiLCB3aW5kb3cpOwotICAgZWxtX29iamVjdF90b29s
dGlwX3RleHRfc2V0KHJlZnJlc2hfYnV0dG9uLCAiUmVsb2FkIHBhZ2UiKTsKLSAgIGVsbV9vYmpl
Y3RfdG9vbHRpcF93aW5kb3dfbW9kZV9zZXQocmVmcmVzaF9idXR0b24sIEVJTkFfVFJVRSk7Ci0g
ICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChyZWZyZXNoX2J1dHRvbiwgMC4wLCBF
VkFTX0hJTlRfRVhQQU5EKTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQocmVm
cmVzaF9idXR0b24sIDEuMCwgMC41KTsKLSAgIGVsbV9ib3hfcGFja19lbmQod2luZG93LT5ob3Jp
em9udGFsX2xheW91dCwgcmVmcmVzaF9idXR0b24pOwotICAgZXZhc19vYmplY3Rfc2hvdyhyZWZy
ZXNoX2J1dHRvbik7Ci0KLSAgIC8qIENyZWF0ZSBTdG9wIGJ1dHRvbiAqLwotICAgRXZhc19PYmpl
Y3QgKnN0b3BfYnV0dG9uID0gX2NyZWF0ZV90b29sYmFyX2J1dHRvbih3aW5kb3ctPmVsbV93aW5k
b3csICJjbG9zZSIpOwotICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHN0b3BfYnV0
dG9uLCAiY2xpY2tlZCIsIF9zdG9wX2J1dHRvbl9jbGlja2VkX2NiLCB3aW5kb3cpOwotICAgZWxt
X29iamVjdF90b29sdGlwX3RleHRfc2V0KHN0b3BfYnV0dG9uLCAiU3RvcCBwYWdlIGxvYWQiKTsK
LSAgIGVsbV9vYmplY3RfdG9vbHRpcF93aW5kb3dfbW9kZV9zZXQoc3RvcF9idXR0b24sIEVJTkFf
VFJVRSk7Ci0gICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChzdG9wX2J1dHRvbiwg
MC4wLCBFVkFTX0hJTlRfRVhQQU5EKTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9z
ZXQoc3RvcF9idXR0b24sIDEuMCwgMC41KTsKLSAgIGVsbV9ib3hfcGFja19lbmQod2luZG93LT5o
b3Jpem9udGFsX2xheW91dCwgc3RvcF9idXR0b24pOwotICAgZXZhc19vYmplY3Rfc2hvdyhzdG9w
X2J1dHRvbik7Ci0KLSAgIC8qIENyZWF0ZSBIb21lIGJ1dHRvbiAqLwotICAgRXZhc19PYmplY3Qg
KmhvbWVfYnV0dG9uID0gX2NyZWF0ZV90b29sYmFyX2J1dHRvbih3aW5kb3ctPmVsbV93aW5kb3cs
ICJob21lIik7Ci0gICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoaG9tZV9idXR0b24s
ICJjbGlja2VkIiwgX2hvbWVfYnV0dG9uX2NsaWNrZWRfY2IsIHdpbmRvdyk7Ci0gICBlbG1fb2Jq
ZWN0X3Rvb2x0aXBfdGV4dF9zZXQoaG9tZV9idXR0b24sICJIb21lIHBhZ2UiKTsKLSAgIGVsbV9v
YmplY3RfdG9vbHRpcF93aW5kb3dfbW9kZV9zZXQoaG9tZV9idXR0b24sIEVJTkFfVFJVRSk7Ci0g
ICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChob21lX2J1dHRvbiwgMC4wLCBFVkFT
X0hJTlRfRVhQQU5EKTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQoaG9tZV9i
dXR0b24sIDEuMCwgMC41KTsKLSAgIGVsbV9ib3hfcGFja19lbmQod2luZG93LT5ob3Jpem9udGFs
X2xheW91dCwgaG9tZV9idXR0b24pOwotICAgZXZhc19vYmplY3Rfc2hvdyhob21lX2J1dHRvbik7
Ci0KLSAgIC8qIENyZWF0ZSBTZWFyY2ggYmFyICovCi0gICB3aW5kb3ctPnNlYXJjaC5zZWFyY2hf
YmFyID0gZWxtX2JveF9hZGQod2luZG93LT5lbG1fd2luZG93KTsKLSAgIGVsbV9ib3hfaG9yaXpv
bnRhbF9zZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2JhciwgRUlOQV9UUlVFKTsKLSAgIGV2YXNf
b2JqZWN0X3NpemVfaGludF9taW5fc2V0KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9iYXIsIFNFQVJD
SF9GSUVMRF9TSVpFICsgMiAqIFNFQVJDSF9CVVRUT05fU0laRSwgMCk7Ci0gICBldmFzX29iamVj
dF9zaXplX2hpbnRfYWxpZ25fc2V0KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9iYXIsIEVWQVNfSElO
VF9GSUxMLCBFVkFTX0hJTlRfRklMTCk7Ci0gICBlbG1fYm94X3BhY2tfZW5kKHdpbmRvdy0+dmVy
dGljYWxfbGF5b3V0LCB3aW5kb3ctPnNlYXJjaC5zZWFyY2hfYmFyKTsKLQotICAgLyogQ3JlYXRl
IFNlYXJjaCBmaWVsZCAqLwotICAgd2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkID0gZWxtX2Vu
dHJ5X2FkZCh3aW5kb3ctPmVsbV93aW5kb3cpOwotICAgZWxtX2VudHJ5X3Njcm9sbGFibGVfc2V0
KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVsZCwgRUlOQV9UUlVFKTsKLSAgIGVsbV9zY3JvbGxl
cl9wb2xpY3lfc2V0KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVsZCwgRUxNX1NDUk9MTEVSX1BP
TElDWV9PRkYsIEVMTV9TQ1JPTExFUl9QT0xJQ1lfT0ZGKTsKLSAgIGVsbV9lbnRyeV9zaW5nbGVf
bGluZV9zZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkLCBFSU5BX1RSVUUpOwotICAgZWxt
X2VudHJ5X2NucF9tb2RlX3NldCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGQsIEVMTV9DTlBf
TU9ERV9QTEFJTlRFWFQpOwotICAgZWxtX2VudHJ5X3RleHRfc3R5bGVfdXNlcl9wdXNoKHdpbmRv
dy0+c2VhcmNoLnNlYXJjaF9maWVsZCwgIkRFRkFVTFQ9J2ZvbnRfc2l6ZT0xNCciKTsKLSAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGQs
ICJhY3RpdmF0ZWQiLCBfc2VhcmNoX2ZpZWxkX2FjdGl2YXRlZF9jYiwgd2luZG93KTsKLSAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGQs
ICJjaGFuZ2VkIiwgX3NlYXJjaF9maWVsZF9hY3RpdmF0ZWRfY2IsIHdpbmRvdyk7Ci0gICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkLCAi
YWJvcnRlZCIsIF9zZWFyY2hfZmllbGRfYWJvcnRlZF9jYiwgd2luZG93KTsKLSAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGQsICJjbGlj
a2VkIiwgX3NlYXJjaF9maWVsZF9jbGlja2VkX2NiLCB3aW5kb3cpOwotICAgZXZhc19vYmplY3Rf
c2l6ZV9oaW50X3dlaWdodF9zZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkLCBFVkFTX0hJ
TlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9h
bGlnbl9zZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkLCBFVkFTX0hJTlRfRklMTCwgRVZB
U19ISU5UX0ZJTEwpOwotICAgZWxtX2JveF9wYWNrX2VuZCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hf
YmFyLCB3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGQpOwotCi0gICAvKiBDcmVhdGUgU2VhcmNo
IGJhY2t3YXJkIGJ1dHRvbiAqLwotICAgd2luZG93LT5zZWFyY2guYmFja3dhcmRfYnV0dG9uID0g
X2NyZWF0ZV90b29sYmFyX2J1dHRvbih3aW5kb3ctPmVsbV93aW5kb3csICJhcnJvd191cCIpOwot
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+c2VhcmNoLmJhY2t3YXJk
X2J1dHRvbiwgImNsaWNrZWQiLCBfc2VhcmNoX2JhY2t3YXJkX2J1dHRvbl9jbGlja2VkX2NiLCB3
aW5kb3cpOwotICAgZWxtX29iamVjdF9kaXNhYmxlZF9zZXQod2luZG93LT5zZWFyY2guYmFja3dh
cmRfYnV0dG9uLCBFSU5BX0ZBTFNFKTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWlnaHRf
c2V0KHdpbmRvdy0+c2VhcmNoLmJhY2t3YXJkX2J1dHRvbiwgMC4wLCBFVkFTX0hJTlRfRVhQQU5E
KTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQod2luZG93LT5zZWFyY2guYmFj
a3dhcmRfYnV0dG9uLCAxLjAsIDAuNSk7Ci0gICBldmFzX29iamVjdF9zaXplX2hpbnRfbWluX3Nl
dCh3aW5kb3ctPnNlYXJjaC5iYWNrd2FyZF9idXR0b24sIFNFQVJDSF9CVVRUT05fU0laRSwgU0VB
UkNIX0JVVFRPTl9TSVpFKTsKLSAgIGVsbV9ib3hfcGFja19lbmQod2luZG93LT5zZWFyY2guc2Vh
cmNoX2Jhciwgd2luZG93LT5zZWFyY2guYmFja3dhcmRfYnV0dG9uKTsKLQotICAgLyogQ3JlYXRl
IFNlYXJjaCBmb3J3YXJkd2FyZCBidXR0b24gKi8KLSAgIHdpbmRvdy0+c2VhcmNoLmZvcndhcmRf
YnV0dG9uID0gX2NyZWF0ZV90b29sYmFyX2J1dHRvbih3aW5kb3ctPmVsbV93aW5kb3csICJhcnJv
d19kb3duIik7Ci0gICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5zZWFy
Y2guZm9yd2FyZF9idXR0b24sICJjbGlja2VkIiwgX3NlYXJjaF9mb3J3YXJkX2J1dHRvbl9jbGlj
a2VkX2NiLCB3aW5kb3cpOwotICAgZWxtX29iamVjdF9kaXNhYmxlZF9zZXQod2luZG93LT5zZWFy
Y2guZm9yd2FyZF9idXR0b24sIEVJTkFfRkFMU0UpOwotICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50
X3dlaWdodF9zZXQod2luZG93LT5zZWFyY2guZm9yd2FyZF9idXR0b24sIDAuMCwgRVZBU19ISU5U
X0VYUEFORCk7Ci0gICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxpZ25fc2V0KHdpbmRvdy0+c2Vh
cmNoLmZvcndhcmRfYnV0dG9uLCAxLjAsIDAuNSk7Ci0gICBldmFzX29iamVjdF9zaXplX2hpbnRf
bWluX3NldCh3aW5kb3ctPnNlYXJjaC5mb3J3YXJkX2J1dHRvbiwgU0VBUkNIX0JVVFRPTl9TSVpF
LCBTRUFSQ0hfQlVUVE9OX1NJWkUpOwotICAgZWxtX2JveF9wYWNrX2VuZCh3aW5kb3ctPnNlYXJj
aC5zZWFyY2hfYmFyLCB3aW5kb3ctPnNlYXJjaC5mb3J3YXJkX2J1dHRvbik7Ci0KLSAgIC8qIENy
ZWF0ZSBTZWFyY2ggY291bnQgZmllbGQgKi8KLSAgIHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVs
ZF9jb3VudCA9IGVsbV9sYWJlbF9hZGQod2luZG93LT5lbG1fd2luZG93KTsKLSAgIGV2YXNfb2Jq
ZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVsZF9jb3Vu
dCwgMC4wLCBFVkFTX0hJTlRfRVhQQU5EKTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGln
bl9zZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkX2NvdW50LCBFVkFTX0hJTlRfRklMTCwg
RVZBU19ISU5UX0ZJTEwpOwotICAgZWxtX29iamVjdF90ZXh0X3NldCh3aW5kb3ctPnNlYXJjaC5z
ZWFyY2hfZmllbGRfY291bnQsICIiKTsKLSAgIGVsbV9ib3hfcGFja19lbmQod2luZG93LT5zZWFy
Y2guc2VhcmNoX2Jhciwgd2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkX2NvdW50KTsKLQotICAg
LyogQ3JlYXRlIFNlYXJjaCBDYXNlIFNlbnNpdGl2ZSBPcHRpb24gY2hlY2sgYm94ICovCi0gICB3
aW5kb3ctPnNlYXJjaC5zZWFyY2hfY2FzZV9jaGVja19ib3ggPSBlbG1fY2hlY2tfYWRkKHdpbmRv
dy0+ZWxtX3dpbmRvdyk7Ci0gICBlbG1fb2JqZWN0X3RleHRfc2V0KHdpbmRvdy0+c2VhcmNoLnNl
YXJjaF9jYXNlX2NoZWNrX2JveCwgIkNhc2UgU2Vuc2l0aXZlIik7Ci0gICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19hZGQod2luZG93LT5zZWFyY2guc2VhcmNoX2Nhc2VfY2hlY2tfYm94LCAi
Y2hhbmdlZCIsIF9zZWFyY2hfY2FzZV9vcHRpb25fY2hhbmdlZCwgd2luZG93KTsKLSAgIGVsbV9i
b3hfcGFja19lbmQod2luZG93LT5zZWFyY2guc2VhcmNoX2Jhciwgd2luZG93LT5zZWFyY2guc2Vh
cmNoX2Nhc2VfY2hlY2tfYm94KTsKLQotICAgLyogQ3JlYXRlIFNlYXJjaCBXb3JkIFN0YXJ0IE9w
dGlvbiBjaGVjayBib3ggKi8KLSAgIHdpbmRvdy0+c2VhcmNoLnNlYXJjaF93b3JkX3N0YXJ0X2No
ZWNrX2JveCA9IGVsbV9jaGVja19hZGQod2luZG93LT5lbG1fd2luZG93KTsKLSAgIGVsbV9vYmpl
Y3RfdGV4dF9zZXQod2luZG93LT5zZWFyY2guc2VhcmNoX3dvcmRfc3RhcnRfY2hlY2tfYm94LCAi
T25seSBXb3JkIFN0YXJ0Iik7Ci0gICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2lu
ZG93LT5zZWFyY2guc2VhcmNoX3dvcmRfc3RhcnRfY2hlY2tfYm94LCAiY2hhbmdlZCIsIF9zZWFy
Y2hfd29yZF9zdGFydF9vcHRpb25fY2hhbmdlZF9jYiwgd2luZG93KTsKLSAgIGVsbV9ib3hfcGFj
a19lbmQod2luZG93LT5zZWFyY2guc2VhcmNoX2Jhciwgd2luZG93LT5zZWFyY2guc2VhcmNoX3dv
cmRfc3RhcnRfY2hlY2tfYm94KTsKLQotICAgLyogQ3JlYXRlIFNlYXJjaCBjbG9zZSBidXR0b24g
Ki8KLSAgIHdpbmRvdy0+c2VhcmNoLmNsb3NlX2J1dHRvbiA9IF9jcmVhdGVfdG9vbGJhcl9idXR0
b24od2luZG93LT5lbG1fd2luZG93LCAiY2xvc2UiKTsKLSAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2FkZCh3aW5kb3ctPnNlYXJjaC5jbG9zZV9idXR0b24sICJjbGlja2VkIiwgX3NlYXJj
aF9jbG9zZV9idXR0b25fY2xpY2tlZF9jYiwgd2luZG93KTsKLSAgIGVsbV9vYmplY3RfZGlzYWJs
ZWRfc2V0KHdpbmRvdy0+c2VhcmNoLmNsb3NlX2J1dHRvbiwgRUlOQV9GQUxTRSk7Ci0gICBldmFz
X29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldCh3aW5kb3ctPnNlYXJjaC5jbG9zZV9idXR0b24s
IEVWQVNfSElOVF9FWFBBTkQsIEVWQVNfSElOVF9FWFBBTkQpOwotICAgZXZhc19vYmplY3Rfc2l6
ZV9oaW50X2FsaWduX3NldCh3aW5kb3ctPnNlYXJjaC5jbG9zZV9idXR0b24sIDEuMCwgMC41KTsK
LSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9taW5fc2V0KHdpbmRvdy0+c2VhcmNoLmNsb3NlX2J1
dHRvbiwgU0VBUkNIX0JVVFRPTl9TSVpFLCBTRUFSQ0hfQlVUVE9OX1NJWkUpOwotICAgZWxtX2Jv
eF9wYWNrX2VuZCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfYmFyLCB3aW5kb3ctPnNlYXJjaC5jbG9z
ZV9idXR0b24pOwotCi0gICAvKiBDcmVhdGUgaGlzdG9yeSBib3ggKi8KLSAgIHdpbmRvdy0+aGlz
dG9yeS5oaXN0b3J5X2JveCA9IGVsbV9ib3hfYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdyk7Ci0gICBl
dmFzX29iamVjdF9zaXplX2hpbnRfYXNwZWN0X3NldCh3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9i
b3gsIEVWQVNfQVNQRUNUX0NPTlRST0xfVkVSVElDQUwsIDEsIDEpOwotICAgZXZhc19vYmplY3Rf
c2l6ZV9oaW50X3dlaWdodF9zZXQod2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfYm94LCBFVkFTX0hJ
TlRfRVhQQU5EICwgRVZBU19ISU5UX0VYUEFORCk7Ci0KLSAgIC8qIENyZWF0ZSBoaXN0b3J5IGxp
c3QgKi8KLSAgIHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3QgPSBlbG1fZ2VubGlzdF9hZGQo
d2luZG93LT5lbG1fd2luZG93KTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWlnaHRfc2V0
KHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3QsIEVWQVNfSElOVF9FWFBBTkQsIEVWQVNfSElO
VF9FWFBBTkQpOwotICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldCh3aW5kb3ctPmhp
c3RvcnkuaGlzdG9yeV9saXN0LCBFVkFTX0hJTlRfRklMTCwgRVZBU19ISU5UX0ZJTEwpOwotICAg
ZWxtX3dpbl9yZXNpemVfb2JqZWN0X2FkZCh3aW5kb3ctPmVsbV93aW5kb3csIHdpbmRvdy0+aGlz
dG9yeS5oaXN0b3J5X2JveCk7Ci0gICBlbG1fYm94X3BhY2tfZW5kKHdpbmRvdy0+aGlzdG9yeS5o
aXN0b3J5X2JveCwgd2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdCk7Ci0KLSAgIC8qIENyZWF0
ZSBld2tfdmlldyAqLwotICAgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgKmV3a1ZpZXdDbGFzcyA9IG1p
bmlCcm93c2VyVmlld1NtYXJ0Q2xhc3MoKTsKLSAgIGV3a1ZpZXdDbGFzcy0+cnVuX2phdmFzY3Jp
cHRfYWxlcnQgPSBfamF2YXNjcmlwdF9hbGVydF9jYjsKLSAgIGV3a1ZpZXdDbGFzcy0+cnVuX2ph
dmFzY3JpcHRfY29uZmlybSA9IF9qYXZhc2NyaXB0X2NvbmZpcm1fY2I7Ci0gICBld2tWaWV3Q2xh
c3MtPnJ1bl9qYXZhc2NyaXB0X3Byb21wdCA9IF9qYXZhc2NyaXB0X3Byb21wdF9jYjsKLSAgIGV3
a1ZpZXdDbGFzcy0+cnVuX2phdmFzY3JpcHRfYmVmb3JlX3VubG9hZF9jb25maXJtID0gX2phdmFz
Y3JpcHRfYmVmb3JlX3VubG9hZF9jb25maXJtX2NiOwotICAgZXdrVmlld0NsYXNzLT53aW5kb3df
Z2VvbWV0cnlfZ2V0ID0gX3dpbmRvd19nZW9tZXRyeV9nZXQ7Ci0gICBld2tWaWV3Q2xhc3MtPndp
bmRvd19nZW9tZXRyeV9zZXQgPSBfd2luZG93X2dlb21ldHJ5X3NldDsKLSAgIGV3a1ZpZXdDbGFz
cy0+ZnVsbHNjcmVlbl9lbnRlciA9IF9mdWxsc2NyZWVuX2VudGVyX2NiOwotICAgZXdrVmlld0Ns
YXNzLT5mdWxsc2NyZWVuX2V4aXQgPSBfZnVsbHNjcmVlbl9leGl0X2NiOwotICAgZXdrVmlld0Ns
YXNzLT53aW5kb3dfY3JlYXRlID0gX3dpbmRvd19jcmVhdGVfY2I7Ci0gICBld2tWaWV3Q2xhc3Mt
PndpbmRvd19jbG9zZSA9IF93aW5kb3dfY2xvc2VfY2I7Ci0gICBld2tWaWV3Q2xhc3MtPnBvcHVw
X21lbnVfc2hvdyA9IF9wb3B1cF9tZW51X3Nob3c7Ci0gICBld2tWaWV3Q2xhc3MtPnBvcHVwX21l
bnVfaGlkZSA9IF9wb3B1cF9tZW51X2hpZGU7Ci0gICBld2tWaWV3Q2xhc3MtPmNvbnRleHRfbWVu
dV9zaG93ID0gX2NvbnRleHRfbWVudV9zaG93OwotICAgZXdrVmlld0NsYXNzLT5jb250ZXh0X21l
bnVfaGlkZSA9IF9jb250ZXh0X21lbnVfaGlkZTsKLSAgIGV3a1ZpZXdDbGFzcy0+aW5wdXRfcGlj
a2VyX2NvbG9yX3JlcXVlc3QgPSBfY29sb3JfcGlja2VyX3JlcXVlc3RfY2I7Ci0gICBld2tWaWV3
Q2xhc3MtPmlucHV0X3BpY2tlcl9jb2xvcl9kaXNtaXNzID0gX2NvbG9yX3BpY2tlcl9kaXNtaXNz
X2NiOwotCi0gICBFdmFzICpldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQod2luZG93LT5lbG1f
d2luZG93KTsKLSAgIEV2YXNfU21hcnQgKnNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJmV3
a1ZpZXdDbGFzcy0+c2MpOwotICAgd2luZG93LT5ld2tfdmlldyA9IGV3a192aWV3X2FkZF93aXRo
X2NvbmZpZ3VyYXRpb24oZXZhcywgc21hcnQsIGNvbmZpZ3VyYXRpb24pOwotCi0gICBFd2tfQ29u
dGV4dCAqY29udGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KHdpbmRvdy0+ZXdrX3ZpZXcpOwot
ICAgZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl9jaGFuZ2VfY2FsbGJhY2tfYWRkKGV3a19jb250
ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNvbnRleHQpLCBfaWNvbl9jaGFuZ2VkX2NiLCB3aW5k
b3cpOwotCi0gICBld2tfdmlld190aGVtZV9zZXQod2luZG93LT5ld2tfdmlldywgREVGQVVMVF9U
SEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOwotICAgaWYgKGRldmljZV9waXhlbF9yYXRpbykKLSAg
ICAgZXdrX3ZpZXdfZGV2aWNlX3BpeGVsX3JhdGlvX3NldCh3aW5kb3ctPmV3a192aWV3LCAoZmxv
YXQpZGV2aWNlX3BpeGVsX3JhdGlvKTsKLSAgIGV3a192aWV3X3VzZXJfYWdlbnRfc2V0KHdpbmRv
dy0+ZXdrX3ZpZXcsIHVzZXJfYWdlbnRfc3RyaW5nKTsKLSAgIGV3a192aWV3X2xheW91dF9maXhl
ZF9zZXQod2luZG93LT5ld2tfdmlldywgZml4ZWRfbGF5b3V0X2VuYWJsZWQpOwotCi0gICBpZiAo
dG91Y2hfZXZlbnRzX2VuYWJsZWQpIHsKLSAgICAgZXdrX3ZpZXdfdG91Y2hfZXZlbnRzX2VuYWJs
ZWRfc2V0KHdpbmRvdy0+ZXdrX3ZpZXcsIEVJTkFfVFJVRSk7Ci0gICAgIGV3a192aWV3X21vdXNl
X2V2ZW50c19lbmFibGVkX3NldCh3aW5kb3ctPmV3a192aWV3LCBFSU5BX0ZBTFNFKTsKLSAgIH0K
LQotICAgaWYgKGJhY2tncm91bmRfY29sb3Jfc3RyaW5nKSB7Ci0gICAgIGludCByZWQsIGdyZWVu
LCBibHVlLCBhbHBoYTsKLQotICAgICBpZiAoc3NjYW5mKGJhY2tncm91bmRfY29sb3Jfc3RyaW5n
LCAiJWQ6JWQ6JWQ6JWQiLCAmcmVkLCAmZ3JlZW4sICZibHVlLCAmYWxwaGEpKQotICAgICAgIGV3
a192aWV3X2JnX2NvbG9yX3NldCh3aW5kb3ctPmV3a192aWV3LCByZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7Ci0gICB9Ci0KLSAgIC8qIFNldCB0aGUgem9vbSBsZXZlbCB0byBkZWZhdWx0ICovCi0g
ICB3aW5kb3ctPmN1cnJlbnRfem9vbV9sZXZlbCA9IERFRkFVTFRfWk9PTV9MRVZFTDsKLQotICAg
ZWxtX3dpbl9mdWxsc2NyZWVuX3NldCh3aW5kb3ctPmVsbV93aW5kb3csIGZ1bGxzY3JlZW5fZW5h
YmxlZCk7Ci0KLSAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192
aWV3LCAiYXV0aGVudGljYXRpb24scmVxdWVzdCIsIF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Ni
LCB3aW5kb3cpOwotICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdr
X3ZpZXcsICJmaWxlLGNob29zZXIscmVxdWVzdCIsIF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYiwg
d2luZG93KTsKLSAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192
aWV3LCAibG9hZCxlcnJvciIsIF9lcnJvcl9jYiwgd2luZG93KTsKLSAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAibG9hZCxwcm92aXNpb25hbCxmYWls
ZWQiLCBfZXJyb3JfY2IsIHdpbmRvdyk7Ci0gICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQod2luZG93LT5ld2tfdmlldywgImxvYWQscHJvZ3Jlc3MiLCBfcHJvZ3Jlc3NfY2IsIHdpbmRv
dyk7Ci0gICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywg
InRpdGxlLGNoYW5nZWQiLCBfdGl0bGVfY2hhbmdlZF9jYiwgd2luZG93KTsKLSAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAidXJsLGNoYW5nZWQiLCBf
dXJsX2NoYW5nZWRfY2IsIHdpbmRvdyk7Ci0gICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQod2luZG93LT5ld2tfdmlldywgImJhY2ssZm9yd2FyZCxsaXN0LGNoYW5nZWQiLCBfYmFja19m
b3J3YXJkX2xpc3RfY2hhbmdlZF9jYiwgd2luZG93KTsKLSAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAidGV4dCxmb3VuZCIsIF9zZWFyY2hfdGV4dF9m
b3VuZF9jYiwgd2luZG93KTsKLSAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5k
b3ctPmV3a192aWV3LCAidG9vbHRpcCx0ZXh0LHNldCIsIF90b29sdGlwX3RleHRfc2V0LCB3aW5k
b3cpOwotICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcs
ICJ0b29sdGlwLHRleHQsdW5zZXQiLCBfdG9vbHRpcF90ZXh0X3Vuc2V0LCB3aW5kb3cpOwotICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJwb2xpY3ks
ZGVjaXNpb24sbmF2aWdhdGlvbiIsIF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9jYiwgd2lu
ZG93KTsKLQotICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3Zp
ZXcsIEVWQVNfQ0FMTEJBQ0tfS0VZX0RPV04sIF9rZXlfZG93bl9jYiwgd2luZG93KTsKLSAgIGV2
YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCBFVkFTX0NBTExC
QUNLX01PVVNFX0RPV04sIF9tb3VzZV9kb3duX2NiLCB3aW5kb3cpOwotCi0gICBldmFzX29iamVj
dF9zaXplX2hpbnRfd2VpZ2h0X3NldCh3aW5kb3ctPmV3a192aWV3LCBFVkFTX0hJTlRfRVhQQU5E
LCBFVkFTX0hJTlRfRVhQQU5EKTsKLSAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQo
d2luZG93LT5ld2tfdmlldywgRVZBU19ISU5UX0ZJTEwsIEVWQVNfSElOVF9GSUxMKTsKLSAgIGVs
bV9ib3hfcGFja19iZWZvcmUod2luZG93LT52ZXJ0aWNhbF9sYXlvdXQsIHdpbmRvdy0+ZXdrX3Zp
ZXcsIHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9iYXIpOwotICAgZXZhc19vYmplY3Rfc2hvdyh3aW5k
b3ctPmV3a192aWV3KTsKLQotICAgZXZhc19vYmplY3RfcmVzaXplKHdpbmRvdy0+ZWxtX3dpbmRv
dywgd2lkdGggPyB3aWR0aCA6IHdpbmRvd193aWR0aCwgaGVpZ2h0ID8gaGVpZ2h0IDogd2luZG93
X2hlaWdodCk7Ci0gICBldmFzX29iamVjdF9zaG93KHdpbmRvdy0+ZWxtX3dpbmRvdyk7Ci0gICBz
ZWFyY2hfYm94X2hpZGUod2luZG93KTsKLQotICAgdmlld19mb2N1c19zZXQod2luZG93LCBFSU5B
X1RSVUUpOwotICAgLy8gUHJldmVudCB3aW5kb3cgZnJvbSBzdGVhbGluZyB3ZWIgdmlldydzIGZv
Y3VzIG9uIHN0YXJ0IHVwLgotICAgZWxtX29iamVjdF9mb2N1c19hbGxvd19zZXQod2luZG93LT5l
bG1fd2luZG93LCBFSU5BX0ZBTFNFKTsKLQotICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tf
YWRkKHdpbmRvdy0+ZXdrX3ZpZXcsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfSU4sIF9tb3VzZV9pbl9j
Yiwgd2luZG93KTsKLSAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3
a192aWV3LCBFVkFTX0NBTExCQUNLX01PVVNFX09VVCwgX21vdXNlX291dF9jYiwgd2luZG93KTsK
LSAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCBFVkFT
X0NBTExCQUNLX01PVVNFX01PVkUsIF9tb3VzZV9tb3ZlX2NiLCB3aW5kb3cpOwotICAgZXZhc19v
YmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsIEVWQVNfQ0FMTEJBQ0tf
TU9VU0VfV0hFRUwsIF9tb3VzZV93aGVlbF9jYiwgd2luZG93KTsKLSAgIGV2YXNfb2JqZWN0X2V2
ZW50X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmVsbV93aW5kb3csIEVWQVNfQ0FMTEJBQ0tfUkVTSVpF
LCBfd2luZG93X3Jlc2l6ZV9jYiwgd2luZG93KTsKLQotICAgZWxtX2J1dHRvbl9hdXRvcmVwZWF0
X3NldCh3aW5kb3ctPmJhY2tfYnV0dG9uLCBFSU5BX1RSVUUpOwotICAgZWxtX2J1dHRvbl9hdXRv
cmVwZWF0X3NldCh3aW5kb3ctPmZvcndhcmRfYnV0dG9uLCBFSU5BX1RSVUUpOwotICAgZWxtX2J1
dHRvbl9hdXRvcmVwZWF0X2luaXRpYWxfdGltZW91dF9zZXQod2luZG93LT5iYWNrX2J1dHRvbiwg
TE9OR1BSRVNTX0lOVEVSVkFMX1NFQ09ORFMpOwotICAgZWxtX2J1dHRvbl9hdXRvcmVwZWF0X2lu
aXRpYWxfdGltZW91dF9zZXQod2luZG93LT5mb3J3YXJkX2J1dHRvbiwgTE9OR1BSRVNTX0lOVEVS
VkFMX1NFQ09ORFMpOwotCi0gICByZXR1cm4gd2luZG93OwotfQotCi1zdGF0aWMgRXdrX1ZpZXdf
Q29uZmlndXJhdGlvbiogY29uZmlndXJhdGlvbigpCi17Ci0gICAgc3RhdGljIEV3a19WaWV3X0Nv
bmZpZ3VyYXRpb24qIGRlZmF1bHRfY29uZmlndXJhdGlvbiA9IDA7Ci0KLSAgICBpZiAoZGVmYXVs
dF9jb25maWd1cmF0aW9uKQotICAgICAgcmV0dXJuIGRlZmF1bHRfY29uZmlndXJhdGlvbjsKLQot
ICAgIGRlZmF1bHRfY29uZmlndXJhdGlvbiA9IGV3a192aWV3X2NvbmZpZ3VyYXRpb25fbmV3KCk7
Ci0KLSAgICBFd2tfU2V0dGluZ3MqIHNldHRpbmdzID0gZXdrX3ZpZXdfY29uZmlndXJhdGlvbl9z
ZXR0aW5nc19nZXQoZGVmYXVsdF9jb25maWd1cmF0aW9uKTsKLSAgICBld2tfc2V0dGluZ3NfZmls
ZV9hY2Nlc3NfZnJvbV9maWxlX3VybHNfYWxsb3dlZF9zZXQoc2V0dGluZ3MsIEVJTkFfVFJVRSk7
Ci0gICAgZXdrX3NldHRpbmdzX2VuY29kaW5nX2RldGVjdG9yX2VuYWJsZWRfc2V0KHNldHRpbmdz
LCBlbmNvZGluZ19kZXRlY3Rvcl9lbmFibGVkKTsKLSAgICBld2tfc2V0dGluZ3NfZnJhbWVfZmxh
dHRlbmluZ19lbmFibGVkX3NldChzZXR0aW5ncywgZnJhbWVfZmxhdHRlbmluZ19lbmFibGVkKTsK
LSAgICBld2tfc2V0dGluZ3NfbG9jYWxfc3RvcmFnZV9lbmFibGVkX3NldChzZXR0aW5ncywgbG9j
YWxfc3RvcmFnZV9lbmFibGVkKTsKLSAgICBld2tfc2V0dGluZ3Nfb2ZmbGluZV93ZWJfYXBwbGlj
YXRpb25fY2FjaGVfZW5hYmxlZF9zZXQoc2V0dGluZ3MsIG9mZmxpbmVfd2ViX2FwcGxpY2F0aW9u
X2NhY2hlX2VuYWJsZWQpOwotICAgIElORk8oIkhUTUw1IGxvY2FsIHN0b3JhZ2UgaXMgJXMgZm9y
IHRoaXMgdmlldy4iLCBsb2NhbF9zdG9yYWdlX2VuYWJsZWQgPyAiZW5hYmxlZCIgOiAiZGlzYWJs
ZWQiKTsKLSAgICBld2tfc2V0dGluZ3NfZGV2ZWxvcGVyX2V4dHJhc19lbmFibGVkX3NldChzZXR0
aW5ncywgRUlOQV9UUlVFKTsKLSAgICBld2tfc2V0dGluZ3NfcHJlZmVycmVkX21pbmltdW1fY29u
dGVudHNfd2lkdGhfc2V0KHNldHRpbmdzLCAwKTsKLSAgICBld2tfdGV4dF9jaGVja2VyX2NvbnRp
bnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCk7
Ci0gICAgZXdrX3NldHRpbmdzX3dlYl9zZWN1cml0eV9lbmFibGVkX3NldChzZXR0aW5ncywgd2Vi
X3NlY3VyaXR5X2VuYWJsZWQpOwotCi0gICAgcmV0dXJuIGRlZmF1bHRfY29uZmlndXJhdGlvbjsK
LX0KLQotc3RhdGljIEV3a19Db29raWVfQWNjZXB0X1BvbGljeQotcGFyc2VfY29va2llc19wb2xp
Y3koY29uc3QgY2hhciAqaW5wdXRfc3RyaW5nKQotewotICAgaWYgKCFzdHJjbXAoaW5wdXRfc3Ry
aW5nLCAiYWx3YXlzIikpCi0gICAgIHJldHVybiBFV0tfQ09PS0lFX0FDQ0VQVF9QT0xJQ1lfQUxX
QVlTOwotICAgaWYgKCFzdHJjbXAoaW5wdXRfc3RyaW5nLCAibmV2ZXIiKSkKLSAgICAgcmV0dXJu
IEVXS19DT09LSUVfQUNDRVBUX1BPTElDWV9ORVZFUjsKLSAgIGlmIChzdHJjbXAoaW5wdXRfc3Ry
aW5nLCAibm8tdGhpcmQtcGFydHkiKSkKLSAgICAgSU5GTygiVW5yZWNvZ25pemVkIHR5cGUgZm9y
IGNvb2tpZXMgcG9saWN5OiAlcy4iLCBpbnB1dF9zdHJpbmcpOwotICAgcmV0dXJuIEVXS19DT09L
SUVfQUNDRVBUX1BPTElDWV9OT19USElSRF9QQVJUWTsKLX0KLQotc3RhdGljIHZvaWQKLXBhcnNl
X3dpbmRvd19zaXplKGNvbnN0IGNoYXIgKmlucHV0X3N0cmluZywgaW50ICp3aWR0aCwgaW50ICpo
ZWlnaHQpCi17Ci0gICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4X2xlbmd0aCA9IDQ7Ci0gICBp
bnQgcGFyc2VkX3dpZHRoOwotICAgaW50IHBhcnNlZF9oZWlnaHQ7Ci0gICBjaGFyICoqYXJyOwot
ICAgdW5zaWduZWQgZWxlbWVudHM7Ci0KLSAgIGFyciA9IGVpbmFfc3RyX3NwbGl0X2Z1bGwoaW5w
dXRfc3RyaW5nLCAieCIsIDAsICZlbGVtZW50cyk7Ci0KLSAgIGlmIChlbGVtZW50cyA9PSAyICYm
IChzdHJsZW4oYXJyWzBdKSA8PSBtYXhfbGVuZ3RoKSAmJiAoc3RybGVuKGFyclsxXSkgPD0gbWF4
X2xlbmd0aCkpIHsKLSAgICAgcGFyc2VkX3dpZHRoID0gYXRvaShhcnJbMF0pOwotICAgICBpZiAo
d2lkdGggJiYgcGFyc2VkX3dpZHRoKQotICAgICAgICp3aWR0aCA9IHBhcnNlZF93aWR0aDsKLQot
ICAgICBwYXJzZWRfaGVpZ2h0ID0gYXRvaShhcnJbMV0pOwotICAgICBpZiAoaGVpZ2h0ICYmIHBh
cnNlZF9oZWlnaHQpCi0gICAgICAgKmhlaWdodCA9IHBhcnNlZF9oZWlnaHQ7Ci0gICB9Ci0KLSAg
IGZyZWUoYXJyWzBdKTsKLSAgIGZyZWUoYXJyKTsKLX0KLQotRUFQSV9NQUlOIGludAotZWxtX21h
aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgIGludCBhcmdzID0gMTsKLSAgIHVuc2ln
bmVkIGNoYXIgcXVpdE9wdGlvbiA9IDA7Ci0gICBCcm93c2VyX1dpbmRvdyAqd2luZG93OwotICAg
Y2hhciAqd2luZG93X3NpemVfc3RyaW5nID0gTlVMTDsKLSAgIGNoYXIgKmNvb2tpZXNfcG9saWN5
X3N0cmluZyA9IE5VTEw7Ci0KLSAgIEVjb3JlX0dldG9wdF9WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAg
ICAgRUNPUkVfR0VUT1BUX1ZBTFVFX1NUUihldmFzX2VuZ2luZV9uYW1lKSwKLSAgICAgRUNPUkVf
R0VUT1BUX1ZBTFVFX1NUUih3aW5kb3dfc2l6ZV9zdHJpbmcpLAotICAgICBFQ09SRV9HRVRPUFRf
VkFMVUVfU1RSKHVzZXJfYWdlbnRfc3RyaW5nKSwKLSAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX1NU
UihleHRlbnNpb25zX3BhdGgpLAotICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfRE9VQkxFKGRldmlj
ZV9waXhlbF9yYXRpbyksCi0gICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9CT09MKHF1aXRPcHRpb24p
LAotICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfQk9PTChlbmNvZGluZ19kZXRlY3Rvcl9lbmFibGVk
KSwKLSAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX1NUUihiYWNrZ3JvdW5kX2NvbG9yX3N0cmluZyks
Ci0gICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9CT09MKGZyYW1lX2ZsYXR0ZW5pbmdfZW5hYmxlZCks
Ci0gICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9CT09MKGxvY2FsX3N0b3JhZ2VfZW5hYmxlZCksCi0g
ICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9CT09MKG9mZmxpbmVfd2ViX2FwcGxpY2F0aW9uX2NhY2hl
X2VuYWJsZWQpLAotICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfQk9PTChmdWxsc2NyZWVuX2VuYWJs
ZWQpLAotICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfQk9PTChzcGVsbF9jaGVja2luZ19lbmFibGVk
KSwKLSAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX0JPT0wodG91Y2hfZXZlbnRzX2VuYWJsZWQpLAot
ICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfQk9PTChmaXhlZF9sYXlvdXRfZW5hYmxlZCksCi0gICAg
IEVDT1JFX0dFVE9QVF9WQUxVRV9TVFIoY29va2llc19wb2xpY3lfc3RyaW5nKSwKLSAgICAgRUNP
UkVfR0VUT1BUX1ZBTFVFX0JPT0wod2ViX3NlY3VyaXR5X2VuYWJsZWQpLAotICAgICBFQ09SRV9H
RVRPUFRfVkFMVUVfQk9PTChzZXBhcmF0ZWRfcHJvY2Vzc19lbmFibGVkKSwKLSAgICAgRUNPUkVf
R0VUT1BUX1ZBTFVFX0JPT0wocXVpdE9wdGlvbiksCi0gICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9C
T09MKHF1aXRPcHRpb24pLAotICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfQk9PTChxdWl0T3B0aW9u
KSwKLSAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX05PTkUKLSAgIH07Ci0KLSAgIGVmcmVldF9jYWNo
ZV91cGRhdGUgPSAwOwotCi0gICBpZiAoIWV3a19pbml0KCkpCi0gICAgIHJldHVybiBFWElUX0ZB
SUxVUkU7Ci0KLSAgIF9sb2dfZG9tYWluX2lkID0gZWluYV9sb2dfZG9tYWluX3JlZ2lzdGVyKCJt
aW5pYnJvd3NlciIsIEVJTkFfQ09MT1JfWUVMTE9XKTsKLQotICAgZXdrX3ZpZXdfc21hcnRfY2xh
c3Nfc2V0KG1pbmlCcm93c2VyVmlld1NtYXJ0Q2xhc3MoKSk7Ci0KLSAgIGVjb3JlX2FwcF9hcmdz
X3NldChhcmdjLCAoY29uc3QgY2hhciAqKikgYXJndik7Ci0gICBhcmdzID0gZWNvcmVfZ2V0b3B0
X3BhcnNlKCZvcHRpb25zLCB2YWx1ZXMsIGFyZ2MsIGFyZ3YpOwotCi0gICBpZiAoYXJncyA8IDAp
Ci0gICAgIHJldHVybiBxdWl0KEVJTkFfRkFMU0UsICJDb3VsZCBub3QgcGFyc2Ugb3B0aW9ucy4i
KTsKLQotICAgaWYgKHF1aXRPcHRpb24pCi0gICAgIHJldHVybiBxdWl0KEVJTkFfVFJVRSwgTlVM
TCk7Ci0KLSAgIGlmIChldmFzX2VuZ2luZV9uYW1lKQotICAgICBlbG1fY29uZmlnX2FjY2VsX3By
ZWZlcmVuY2Vfc2V0KGV2YXNfZW5naW5lX25hbWUpOwotICAgZWxzZSB7Ci0gICAgIGV2YXNfZW5n
aW5lX25hbWUgPSAib3BlbmdsOmRlcHRoMjQ6c3RlbmNpbDgiOwotICAgICBlbG1fY29uZmlnX2Fj
Y2VsX3ByZWZlcmVuY2Vfc2V0KGV2YXNfZW5naW5lX25hbWUpOwotICAgfQotCi0gICBFd2tfQ29u
dGV4dCAqY29udGV4dCA9IGV3a19jb250ZXh0X2RlZmF1bHRfZ2V0KCk7Ci0KLSAgIGlmIChzZXBh
cmF0ZWRfcHJvY2Vzc19lbmFibGVkKQotICAgICBld2tfY29udGV4dF93ZWJfcHJvY2Vzc19jb3Vu
dF9saW1pdF9zZXQoY29udGV4dCwgMCk7Ci0KLSAgIC8vIEVuYWJsZSBmYXZpY29uIGRhdGFiYXNl
LgotICAgZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3Rvcnlfc2V0KGNvbnRleHQs
IE5VTEwpOwotCi0gICAvLyBVc2UgYSBwcm9wZXIgY2FjaGUgbW9kZWwuCi0gICBld2tfY29udGV4
dF9jYWNoZV9tb2RlbF9zZXQoY29udGV4dCwgRVdLX0NBQ0hFX01PREVMX1BSSU1BUllfV0VCQlJP
V1NFUik7Ci0KLSAgIGlmIChjb29raWVzX3BvbGljeV9zdHJpbmcpIHsKLSAgICAgRXdrX0Nvb2tp
ZV9BY2NlcHRfUG9saWN5IGNvb2tpZV9wb2xpY3kgPSBwYXJzZV9jb29raWVzX3BvbGljeShjb29r
aWVzX3BvbGljeV9zdHJpbmcpOwotICAgICBld2tfY29va2llX21hbmFnZXJfYWNjZXB0X3BvbGlj
eV9zZXQoZXdrX2NvbnRleHRfY29va2llX21hbmFnZXJfZ2V0KGNvbnRleHQpLCBjb29raWVfcG9s
aWN5KTsKLQotICAgICBpZiAoY29va2llX3BvbGljeSA9PSBFV0tfQ09PS0lFX0FDQ0VQVF9QT0xJ
Q1lfQUxXQVlTKSB7Ci0gICAgICAgY29uc3QgY2hhciBjb29raWVfc3RvcmFnZV9kaXJlY3Rvcnlb
XSA9ICIvdG1wL2V3ZWJraXQyX21pbmlicm93c2VyX2Nvb2tpZS8iOwotICAgICAgIG1rZGlyKGNv
b2tpZV9zdG9yYWdlX2RpcmVjdG9yeSwgU19JUldYVSk7Ci0gICAgICAgY2hhciBzdG9yYWdlX25h
bWVbNjRdOwotICAgICAgIHNucHJpbnRmKHN0b3JhZ2VfbmFtZSwgc2l6ZW9mKHN0b3JhZ2VfbmFt
ZSksICIlc3R4dC1jb29raWUiLCBjb29raWVfc3RvcmFnZV9kaXJlY3RvcnkpOwotICAgICAgIGV3
a19jb29raWVfbWFuYWdlcl9wZXJzaXN0ZW50X3N0b3JhZ2Vfc2V0KGV3a19jb250ZXh0X2Nvb2tp
ZV9tYW5hZ2VyX2dldChjb250ZXh0KSwgc3RvcmFnZV9uYW1lLCBFV0tfQ09PS0lFX1BFUlNJU1RF
TlRfU1RPUkFHRV9URVhUKTsKLSAgICAgfQotICAgfQotCi0gICBpZiAod2luZG93X3NpemVfc3Ry
aW5nKQotICAgICBwYXJzZV93aW5kb3dfc2l6ZSh3aW5kb3dfc2l6ZV9zdHJpbmcsICZ3aW5kb3df
d2lkdGgsICZ3aW5kb3dfaGVpZ2h0KTsKLQotICAgd2luZG93ID0gd2luZG93X2NyZWF0ZShjb25m
aWd1cmF0aW9uKCksIDAsIDApOwotICAgaWYgKCF3aW5kb3cpCi0gICAgIHJldHVybiBxdWl0KEVJ
TkFfRkFMU0UsICJDb3VsZCBub3QgY3JlYXRlIGJyb3dzZXIgd2luZG93LiIpOwotCi0gICAvLyBT
ZXQgY2FsbGJhY2tzIGZvciBkb3dubG9hZCBldmVudHMuCi0gICBld2tfY29udGV4dF9kb3dubG9h
ZF9jYWxsYmFja3Nfc2V0KGNvbnRleHQsIF9kb3dubG9hZF9yZXF1ZXN0X2NiLCBfZG93bmxvYWRf
ZmFpbGVkX2NiLCAwLCBfZG93bmxvYWRfZmluaXNoZWRfY2IsIHdpbmRvdyk7Ci0KLSAgIGlmIChh
cmdzIDwgYXJnYykgewotICAgICBjaGFyICp1cmwgPSB1cmxfZnJvbV91c2VyX2lucHV0KGFyZ3Zb
YXJnc10pOwotICAgICB1cmxfbG9hZF9mcm9tX3VzZXJfaW5wdXQod2luZG93LT5ld2tfdmlldywg
dXJsKTsKLSAgICAgZnJlZSh1cmwpOwotICAgfSBlbHNlCi0gICAgIGV3a192aWV3X3VybF9zZXQo
d2luZG93LT5ld2tfdmlldywgREVGQVVMVF9VUkwpOwotCi0gICB3aW5kb3dzID0gZWluYV9saXN0
X2FwcGVuZCh3aW5kb3dzLCB3aW5kb3cpOwotCi0gICBlbG1fcnVuKCk7Ci0KLSAgIHJldHVybiBx
dWl0KEVJTkFfVFJVRSwgTlVMTCk7Ci19Ci1FTE1fTUFJTigpCi0KZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvYnVpbGQtZHVtcHJlbmRlcnRyZWUgYi9Ub29scy9TY3JpcHRzL2J1aWxkLWR1bXBy
ZW5kZXJ0cmVlCmluZGV4IGMzMDliODJkOThjM2RiMGU0ZDY1Nzk5YWQ0NzZiYzJkNTFkN2E0Mzcu
Ljc2MWY0M2Y2OTg5ZjcxOTQ4YzljMjlhYmMyYzFhYmVhY2Q5NjAyNTUgMTAwNzU1Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvYnVpbGQtZHVtcHJlbmRlcnRyZWUKKysrIGIvVG9vbHMvU2NyaXB0cy9idWls
ZC1kdW1wcmVuZGVydHJlZQpAQCAtNDMsNyArNDMsNiBAQCBVc2FnZTogJHByb2dyYW1OYW1lIFtv
cHRpb25zXSBbb3B0aW9ucyB0byBwYXNzIHRvIGJ1aWxkIHN5c3RlbV0KICAgLS1oZWxwICAgICAg
ICBTaG93IHRoaXMgaGVscCBtZXNzYWdlCiAgIC0tY2xlYW4gICAgICAgQ2xlYW4gdXAgdGhlIGJ1
aWxkIGRpcmVjdG9yeQogICAtLWd0ayAgICAgICAgIEJ1aWxkIHRoZSBHVEsrIHBvcnQKLSAgLS1l
ZmwgICAgICAgICBCdWlsZCB0aGUgRUZMIHBvcnQKIEVPRgogCiBHZXRPcHRpb25zKApAQCAtNjYs
OCArNjUsOCBAQCBjaGRpciBGaWxlOjpTcGVjLT5jYXRkaXIoIlRvb2xzIiwgIkR1bXBSZW5kZXJU
cmVlIikgb3IgZGllOwogbXkgJHJlc3VsdDsKIGlmIChpc0FwcGxlQ29jb2FXZWJLaXQoKSkgewog
ICAgICRyZXN1bHQgPSBidWlsZFhDb2RlUHJvamVjdCgiRHVtcFJlbmRlclRyZWUiLCAkY2xlYW4s
IFhjb2RlT3B0aW9ucygpLCBAQVJHVik7Ci19IGVsc2lmIChpc0d0aygpIHx8IGlzRWZsKCkgfHwg
aXNBbnlXaW5kb3dzKCkpIHsKLSAgICAjIEd0aywgRUZMLCBhbmQgV2luZG93cyBidWlsZCBldmVy
eXRoaW5nIGluIG9uZSBzaG90LiBObyBuZWVkIHRvIGJ1aWxkIGFueXRoaW5nIGhlcmUuCit9IGVs
c2lmIChpc0d0aygpIHx8IGlzQW55V2luZG93cygpKSB7CisgICAgIyBHVEsgYW5kIFdpbmRvd3Mg
YnVpbGQgZXZlcnl0aGluZyBpbiBvbmUgc2hvdC4gTm8gbmVlZCB0byBidWlsZCBhbnl0aGluZyBo
ZXJlLgogICAgICRyZXN1bHQgPSAwOwogfSBlbHNlIHsKICAgICBkaWUgIkJ1aWxkaW5nIG5vdCBk
ZWZpbmVkIGZvciB0aGlzIHBsYXRmb3JtIVxuIjsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
YnVpbGQtanNjIGIvVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MKaW5kZXggNjUyNzMwNmU5NDY0ZDMw
NTdjOTM4Y2ZmZjZlYjAwOTI3NmE3YjM0OS4uMDMyYjY0NzZiOTZiNzlmOGYxNzhmYTViMTU3Njk5
OWFiNzZmMWM5NiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9idWlsZC1qc2MKKysrIGIvVG9v
bHMvU2NyaXB0cy9idWlsZC1qc2MKQEAgLTQ1LDcgKzQ1LDcgQEAgbXkgJHNob3VsZFJ1blN0YXRp
Y0FuYWx5emVyID0gMDsKIG15ICRtaW5pbWFsID0gMDsKIG15ICRjb3ZlcmFnZVN1cHBvcnQgPSAw
OwogbXkgJHNob3dIZWxwID0gMDsKLW15ICRmdGxKSVQgPSBpbnQoaXNBcHBsZUNvY29hV2ViS2l0
KCkgJiYgIXdpbGxVc2VJT1NTaW11bGF0b3JTREsoKSB8fCBpc1g4Nl82NCgpICYmIChpc0d0aygp
IHx8IGlzRWZsKCkgfHwgaXNKU0NPbmx5KCkpKTsKK215ICRmdGxKSVQgPSBpbnQoaXNBcHBsZUNv
Y29hV2ViS2l0KCkgJiYgIXdpbGxVc2VJT1NTaW11bGF0b3JTREsoKSB8fCBpc1g4Nl82NCgpICYm
IChpc0d0aygpIHx8IGlzSlNDT25seSgpKSk7CiBteSAkZm9yY2VDTG9vcCA9IDA7CiBteSAkY2xp
ID0gMDsKIG15ICRtYWtlQXJncyA9ICIiOwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9idWls
ZC13ZWJraXQgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAppbmRleCBhYjI1MmFjNjUwZmM0
NWFmNDU2NDQ1ZmU4ZTU3ODVkMDU1ZjFhOTc3Li43MTQyYWU2NjQ3MzFlOTE2M2JlNWU3NTE2MDEx
ZDI3OTQzMmU0NjFlIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAorKysg
Yi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdApAQCAtOTksNyArOTksNiBAQCBVc2FnZTogJHBy
b2dyYW1OYW1lIFtvcHRpb25zXSBbb3B0aW9ucyB0byBwYXNzIHRvIGJ1aWxkIHN5c3RlbV0KICAg
LS1jb3ZlcmFnZSAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjb2RlIGNvdmVyYWdlIHN1
cHBvcnQgKE1hYyBvbmx5KQogICAtLWFuYWx5emUgICAgICAgICAgICAgICAgICAgICAgICAgRW5h
YmxlIHN0YXRpYyBhbmF5bHNpcyAoaU9TIGFuZCBNYWMgb25seSkKIAotICAtLWVmbCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQnVpbGQgdGhlIEVGTCBwb3J0CiAgIC0tZ3RrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCdWlsZCB0aGUgR1RLKyBwb3J0CiAgIC0td2luY2Fpcm8gICAg
ICAgICAgICAgICAgICAgICAgICBCdWlsZCB1c2luZyBDYWlybyAocmF0aGVyIHRoYW4gQ29yZUdy
YXBoaWNzKSBvbiBXaW5kb3dzCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Vi
a2l0dGVzdHJ1bm5lciBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0dGVzdHJ1bm5lcgppbmRl
eCA0NGUyNWEzODUxODQxNDg3NmVhYjdjNTRlMzNiNDBmNDU5MDg5ZmM2Li42YThiOGIwMDJmMTY3
YWNlYTA4ZGUwMzA5N2U0NjRmZTBhMjRkZThkIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1
aWxkLXdlYmtpdHRlc3RydW5uZXIKKysrIGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXR0ZXN0
cnVubmVyCkBAIC02MSw4ICs2MSw4IEBAIGNoZGlyICJUb29scy9XZWJLaXRUZXN0UnVubmVyIiBv
ciBkaWU7CiBteSAkcmVzdWx0OwogaWYgKGlzQXBwbGVDb2NvYVdlYktpdCgpKSB7CiAgICAgJHJl
c3VsdCA9IGJ1aWxkWENvZGVQcm9qZWN0KCJXZWJLaXRUZXN0UnVubmVyIiwgJGNsZWFuLCBYY29k
ZU9wdGlvbnMoKSwgQEFSR1YpOwotfSBlbHNpZiAoaXNHdGsoKSB8fCBpc0VmbCgpKSB7Ci0gICAg
IyBHVEsrIGFuZCBFRkwgYnVpbGQgZXZlcnl0aGluZyBpbiBvbmUgc2hvdC4gTm8gbmVlZCB0byBi
dWlsZCBhbnl0aGluZyBoZXJlLgorfSBlbHNpZiBpc0d0aygpIHsKKyAgICAjIEdUSysgYnVpbGQg
ZXZlcnl0aGluZyBpbiBvbmUgc2hvdC4gTm8gbmVlZCB0byBidWlsZCBhbnl0aGluZyBoZXJlLgog
ICAgICRyZXN1bHQgPSAwOwogfSBlbHNlIHsKICAgICBkaWUgIldlYktpdFRlc3RSdW5uZXIgaXMg
bm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLlxuIjsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvcnVuLW1pbmlicm93c2VyIGIvVG9vbHMvU2NyaXB0cy9ydW4tbWluaWJyb3dzZXIKaW5k
ZXggOWM3NWZjMTRlMzI3ZmQxYTJiOTBmMDJlNDczZGM4ZTU2MjVkYmZiMS4uMzk3NzU4MmFlM2Fk
ZjM0ZThmYTc2ODU1MDBlYTJjOGUyMzkxZDhkYyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9y
dW4tbWluaWJyb3dzZXIKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tbWluaWJyb3dzZXIKQEAgLTQz
LDcgKzQzLDcgQEAgbXkgQGpoYnVpbGRXcmFwcGVyOwogcHJvaGliaXRVbmtub3duUG9ydCgpOwog
c2V0Q29uZmlndXJhdGlvbigpOwogCi1pZiAoaXNHdGsoKSB8fCBpc0VmbCgpKSB7CitpZiAoaXNH
dGsoKSkgewogICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgYWxsIHRoZSBmcmFtZXdvcmtzIGFyZSBi
dWlsdC4KICAgICBjaGVja0ZyYW1ld29ya3MoKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy91cGRhdGUtd2Via2l0LWxpYnMtamhidWlsZCBiL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtp
dC1saWJzLWpoYnVpbGQKaW5kZXggMzg5M2RhZmQ4ZWUwMzFjOGZiOGExYjY4OTJmMTZiYWYyZjIw
MGZlZi4uZDlkYmZmNWRkZTQ0MTFmZTgwODA1OTJiMzcwMGI1MmE4ZWUwMGY1OSAxMDA3NTUKLS0t
IGEvVG9vbHMvU2NyaXB0cy91cGRhdGUtd2Via2l0LWxpYnMtamhidWlsZAorKysgYi9Ub29scy9T
Y3JpcHRzL3VwZGF0ZS13ZWJraXQtbGlicy1qaGJ1aWxkCkBAIC0yMywxMSArMjMsMTAgQEAgdXNl
IHdlYmtpdGRpcnM7CiB1c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgcGFzc190aHJvdWdoKTsK
IAogbXkgJHBsYXRmb3JtID0gIiI7Ci0kcGxhdGZvcm0gPSAiZWZsIiBpZiBpc0VmbCgpOwogJHBs
YXRmb3JtID0gImd0ayIgaWYgaXNHdGsoKTsKIAogaWYgKCEkcGxhdGZvcm0pIHsKLSAgICBkaWUg
Ik5vIHBsYXRmb3JtIHNwZWNpZmllZCBmb3IgIiAuIGJhc2VuYW1lKCQwKSAuIi4gVXNlIC0tZ3Rr
IG9yIC0tZWZsLlxuIjsKKyAgICBkaWUgIk5vIHBsYXRmb3JtIHNwZWNpZmllZCBmb3IgIiAuIGJh
c2VuYW1lKCQwKSAuIi4gVXNlIC0tZ3RrLlxuIjsKIH0KIAogbXkgJHdpcGVPbkNoYW5nZSA9ICRF
TlZ7SkhCVUlMRF9XSVBFX09OX0NIQU5HRX0gLy8gMTsKQEAgLTEzMyw3ICsxMzIsNyBAQCBkZWxl
dGUgJEVOVntBUl9GTEFHU30gaWYgZXhpc3RzICRFTlZ7QVJfRkxBR1N9OwogCiBjaGRpcihyZWxh
dGl2ZVNjcmlwdHNEaXIoKSAuICIvLi4vamhidWlsZCIpIG9yIGRpZSAkITsKIAotbXkgJXByZXR0
eVBsYXRmb3JtID0gKCAiZWZsIiA9PiAiRUZMIiwgImd0ayIgPT4gIkdUSysiICk7CitteSAlcHJl
dHR5UGxhdGZvcm0gPSAoICJndGsiID0+ICJHVEsrIiApOwogCiBpZiAoISRmb3JjZSAmJiAhamhi
dWlsZENvbmZpZ3VyYXRpb25DaGFuZ2VkKCkpIHsKICAgICBwcmludCAkcHJldHR5UGxhdGZvcm17
JHBsYXRmb3JtfSAuICIgcG9ydCBkZXBlbmRlbmNpZXMgYXJlIGFscmVhZHkgdXAgdG8gZGF0ZVxu
IjsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdGVmbC1saWJzIGIvVG9v
bHMvU2NyaXB0cy91cGRhdGUtd2Via2l0ZWZsLWxpYnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1
CmluZGV4IDllMDVhYzBhNTAwMjk1MjdkMzI1Y2YxNjg0ZGIyNjVjYTAzYzc1M2IuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvU2NyaXB0cy91cGRh
dGUtd2Via2l0ZWZsLWxpYnMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jIS91c3Iv
YmluL3BlcmwgLXcKLSMgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCi0jCi0j
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSMgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotCi11
c2UgRmluZEJpbjsKLXVzZSBsaWIgJEZpbmRCaW46OkJpbjsKLXVzZSB3ZWJraXRkaXJzOwotCi1t
eSAkc2NyaXB0c0RpciA9IHJlbGF0aXZlU2NyaXB0c0RpcigpOwotc3lzdGVtKCJwZXJsIiwgIiRz
Y3JpcHRzRGlyL3VwZGF0ZS13ZWJraXQtbGlicy1qaGJ1aWxkIiwgIi0tZWZsIiwgQEFSR1YpID09
IDAgb3IgZGllICQhOwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCmluZGV4IGM0MGFmZjZmODI4Y2QzN2NkYWFiM2Nm
NzE0YzlhNzNlZDliMWRhZTIuLmJjNDY1NDYxN2QxMDdhY2Y0OGMxNDU2YzA4OTgyZWY3NTljYzgx
OTEgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdGRpcnMucG0KQEAgLTEwMSw3ICsxMDEsNiBAQCBCRUdJTiB7CiB1c2UgY29u
c3RhbnQgewogICAgIEFwcGxlV2luID0+ICJBcHBsZVdpbiIsCiAgICAgR1RLICAgICAgPT4gIkdU
SyIsCi0gICAgRWZsICAgICAgPT4gIkVmbCIsCiAgICAgaU9TICAgICAgPT4gImlPUyIsCiAgICAg
dHZPUyAgICAgPT4gInR2T1MiLAogICAgIHdhdGNoT1MgID0+ICJ3YXRjaE9TIiwKQEAgLTQ0Niw3
ICs0NDUsNiBAQCBzdWIgYXJndW1lbnRzRm9yQ29uZmlndXJhdGlvbigpCiAgICAgcHVzaChAYXJn
cywgJy0tMzItYml0JykgaWYgKCRhcmNoaXRlY3R1cmUgbmUgIng4Nl82NCIgYW5kICFpc1dpbjY0
KCkpOwogICAgIHB1c2goQGFyZ3MsICctLTY0LWJpdCcpIGlmIChpc1dpbjY0KCkpOwogICAgIHB1
c2goQGFyZ3MsICctLWd0aycpIGlmIGlzR3RrKCk7Ci0gICAgcHVzaChAYXJncywgJy0tZWZsJykg
aWYgaXNFZmwoKTsKICAgICBwdXNoKEBhcmdzLCAnLS1qc2Mtb25seScpIGlmIGlzSlNDT25seSgp
OwogICAgIHB1c2goQGFyZ3MsICctLXdpbmNhaXJvJykgaWYgaXNXaW5DYWlybygpOwogICAgIHB1
c2goQGFyZ3MsICctLWluc3BlY3Rvci1mcm9udGVuZCcpIGlmIGlzSW5zcGVjdG9yRnJvbnRlbmQo
KTsKQEAgLTQ1Niw3ICs0NTQsNyBAQCBzdWIgYXJndW1lbnRzRm9yQ29uZmlndXJhdGlvbigpCiBz
dWIgZXh0cmFjdE5vbk1hY09TSG9zdENvbmZpZ3VyYXRpb24KIHsKICAgICBteSBAYXJncyA9ICgp
OwotICAgIG15IEBleHRyYWN0ID0gKCctLWRldmljZScsICctLWVmbCcsICctLWd0aycsICctLWlv
cycsICctLXBsYXRmb3JtJywgJy0tc2RrJywgJy0tc2ltdWxhdG9yJywgJy0td2luY2Fpcm8nLCAn
U0RLUk9PVCcsICdBUkNIUycpOworICAgIG15IEBleHRyYWN0ID0gKCctLWRldmljZScsICctLWd0
aycsICctLWlvcycsICctLXBsYXRmb3JtJywgJy0tc2RrJywgJy0tc2ltdWxhdG9yJywgJy0td2lu
Y2Fpcm8nLCAnU0RLUk9PVCcsICdBUkNIUycpOwogICAgIGZvcmVhY2ggKEB7JF9bMF19KSB7CiAg
ICAgICAgIG15ICRsaW5lID0gJF87CiAgICAgICAgIG15ICRmbGFnID0gMDsKQEAgLTY4Miw3ICs2
ODAsNyBAQCBzdWIgZXhlY3V0YWJsZVByb2R1Y3REaXIKICAgICBteSAkcHJvZHVjdERpcmVjdG9y
eSA9IHByb2R1Y3REaXIoKTsKIAogICAgIG15ICRiaW5hcnlEaXJlY3Rvcnk7Ci0gICAgaWYgKGlz
RWZsKCkgfHwgaXNHdGsoKSB8fCBpc0pTQ09ubHkoKSkgeworICAgIGlmIChpc0d0aygpIHx8IGlz
SlNDT25seSgpKSB7CiAgICAgICAgICRiaW5hcnlEaXJlY3RvcnkgPSAiYmluIjsKICAgICB9IGVs
c2lmIChpc0FueVdpbmRvd3MoKSkgewogICAgICAgICAkYmluYXJ5RGlyZWN0b3J5ID0gaXNXaW42
NCgpID8gImJpbjY0IiA6ICJiaW4zMiI7CkBAIC05MjcsOSArOTI1LDYgQEAgc3ViIGJ1aWx0RHls
aWJQYXRoRm9yTmFtZQogICAgICAgICBteSAkZXh0ZW5zaW9uID0gaXNEYXJ3aW4oKSA/ICIuZHls
aWIiIDogIi5zbyI7CiAgICAgICAgIHJldHVybiAiJGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyL2xp
Yi9saWJ3ZWJraXQyZ3RrLTQuMCIgLiAkZXh0ZW5zaW9uOwogICAgIH0KLSAgICBpZiAoaXNFZmwo
KSkgewotICAgICAgICByZXR1cm4gIiRjb25maWd1cmF0aW9uUHJvZHVjdERpci9saWIvbGliZXdl
YmtpdDIuc28iOwotICAgIH0KICAgICBpZiAoaXNJT1NXZWJLaXQoKSkgewogICAgICAgICByZXR1
cm4gIiRjb25maWd1cmF0aW9uUHJvZHVjdERpci8kbGlicmFyeU5hbWUuZnJhbWV3b3JrLyRsaWJy
YXJ5TmFtZSI7CiAgICAgfQpAQCAtMTA1NSw3ICsxMDUwLDYgQEAgc3ViIGRldGVybWluZVBvcnRO
YW1lKCkKICAgICByZXR1cm4gaWYgZGVmaW5lZCAkcG9ydE5hbWU7CiAKICAgICBteSAlYXJnVG9Q
b3J0TmFtZSA9ICgKLSAgICAgICAgZWZsID0+IEVmbCwKICAgICAgICAgZ3RrID0+IEdUSywKICAg
ICAgICAgJ2pzYy1vbmx5JyA9PiBKU0NPbmx5LAogICAgICAgICB3aW5jYWlybyA9PiBXaW5DYWly
bwpAQCAtMTA5MCw3ICsxMDg0LDYgQEAgc3ViIGRldGVybWluZVBvcnROYW1lKCkKICAgICB9IGVs
c2UgewogICAgICAgICBpZiAoJHVua25vd25Qb3J0UHJvaGliaXRlZCkgewogICAgICAgICAgICAg
bXkgJHBvcnRzQ2hvaWNlID0gam9pbiAiXG5cdCIsIHF3KAotICAgICAgICAgICAgICAgIC0tZWZs
CiAgICAgICAgICAgICAgICAgLS1ndGsKICAgICAgICAgICAgICAgICAtLWpzYy1vbmx5CiAgICAg
ICAgICAgICApOwpAQCAtMTExMCwxMSArMTEwMyw2IEBAIHN1YiBwb3J0TmFtZSgpCiAgICAgcmV0
dXJuICRwb3J0TmFtZTsKIH0KIAotc3ViIGlzRWZsKCkKLXsKLSAgICByZXR1cm4gcG9ydE5hbWUo
KSBlcSBFZmw7Ci19Ci0KIHN1YiBpc0d0aygpCiB7CiAgICAgcmV0dXJuIHBvcnROYW1lKCkgZXEg
R1RLOwpAQCAtMTUyNCw3ICsxNTEyLDcgQEAgc3ViIHJlbGF0aXZlU2NyaXB0c0RpcigpCiBzdWIg
bGF1bmNoZXJQYXRoKCkKIHsKICAgICBteSAkcmVsYXRpdmVTY3JpcHRzUGF0aCA9IHJlbGF0aXZl
U2NyaXB0c0RpcigpOwotICAgIGlmIChpc0d0aygpIHx8IGlzRWZsKCkpIHsKKyAgICBpZiAoaXNH
dGsoKSkgewogICAgICAgICByZXR1cm4gIiRyZWxhdGl2ZVNjcmlwdHNQYXRoL3J1bi1taW5pYnJv
d3NlciI7CiAgICAgfSBlbHNpZiAoaXNBcHBsZVdlYktpdCgpKSB7CiAgICAgICAgIHJldHVybiAi
JHJlbGF0aXZlU2NyaXB0c1BhdGgvcnVuLXNhZmFyaSI7CkBAIC0xNTMzLDcgKzE1MjEsNyBAQCBz
dWIgbGF1bmNoZXJQYXRoKCkKIAogc3ViIGxhdW5jaGVyTmFtZSgpCiB7Ci0gICAgaWYgKGlzR3Rr
KCkgfHwgaXNFZmwoKSkgeworICAgIGlmIChpc0d0aygpKSB7CiAgICAgICAgIHJldHVybiAiTWlu
aUJyb3dzZXIiOwogICAgIH0gZWxzaWYgKGlzQXBwbGVDb2NvYVdlYktpdCgpKSB7CiAgICAgICAg
IHJldHVybiAiU2FmYXJpIjsKQEAgLTE4MzYsMTIgKzE4MjQsMTAgQEAgc3ViIGdldEpoYnVpbGRQ
YXRoKCkKICAgICBpZiAoaXNHaXQoKSAmJiBpc0dpdEJyYW5jaEJ1aWxkKCkgJiYgZ2l0QnJhbmNo
KCkpIHsKICAgICAgICAgcG9wKEBqaGJ1aWxkUGF0aCk7CiAgICAgfQotICAgIGlmIChpc0VmbCgp
KSB7Ci0gICAgICAgIHB1c2goQGpoYnVpbGRQYXRoLCAiRGVwZW5kZW5jaWVzRUZMIik7Ci0gICAg
fSBlbHNpZiAoaXNHdGsoKSkgeworICAgIGlmIChpc0d0aygpKSB7CiAgICAgICAgIHB1c2goQGpo
YnVpbGRQYXRoLCAiRGVwZW5kZW5jaWVzR1RLIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZGll
ICJDYW5ub3QgZ2V0IEpIQnVpbGQgcGF0aCBmb3IgcGxhdGZvcm0gdGhhdCBpc24ndCBHVEsrIG9y
IEVGTC5cbiI7CisgICAgICAgIGRpZSAiQ2Fubm90IGdldCBKSEJ1aWxkIHBhdGggZm9yIHBsYXRm
b3JtIHRoYXQgaXNuJ3QgR1RLKy5cbiI7CiAgICAgfQogICAgIHJldHVybiBGaWxlOjpTcGVjLT5j
YXRkaXIoQGpoYnVpbGRQYXRoKTsKIH0KQEAgLTE4NzgsOSArMTg2NCw3IEBAIHN1YiB3cmFwcGVy
UHJlZml4SWZOZWVkZWQoKQogICAgIH0KICAgICBpZiAoLWUgZ2V0SmhidWlsZFBhdGgoKSkgewog
ICAgICAgICBteSBAcHJlZml4ID0gKEZpbGU6OlNwZWMtPmNhdGZpbGUoc291cmNlRGlyKCksICJU
b29scyIsICJqaGJ1aWxkIiwgImpoYnVpbGQtd3JhcHBlciIpKTsKLSAgICAgICAgaWYgKGlzRWZs
KCkpIHsKLSAgICAgICAgICAgIHB1c2goQHByZWZpeCwgIi0tZWZsIik7Ci0gICAgICAgIH0gZWxz
aWYgKGlzR3RrKCkpIHsKKyAgICAgICAgaWYgKGlzR3RrKCkpIHsKICAgICAgICAgICAgIHB1c2go
QHByZWZpeCwgIi0tZ3RrIik7CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAcHJlZml4LCAicnVu
Iik7CkBAIC0yMDQwLDcgKzIwMjQsNyBAQCBzdWIgZ2VuZXJhdGVCdWlsZFN5c3RlbUZyb21DTWFr
ZVByb2plY3QKICAgICBwdXNoIEBhcmdzLCAnLURTSE9XX0JJTkRJTkdTX0dFTkVSQVRJT05fUFJP
R1JFU1M9MScgdW5sZXNzICgkd2lsbFVzZU5pbmphICYmIC10IFNURE9VVCk7CiAKICAgICAjIFNv
bWUgcG9ydHMgaGF2ZSBwcm9kdWN0aW9uIG1vZGUsIGJ1dCBidWlsZC13ZWJraXQgc2hvdWxkIGFs
d2F5cyB1c2UgZGV2ZWxvcGVyIG1vZGUuCi0gICAgcHVzaCBAYXJncywgIi1EREVWRUxPUEVSX01P
REU9T04iIGlmIGlzRWZsKCkgfHwgaXNHdGsoKSB8fCBpc0pTQ09ubHkoKTsKKyAgICBwdXNoIEBh
cmdzLCAiLURERVZFTE9QRVJfTU9ERT1PTiIgaWYgaXNHdGsoKSB8fCBpc0pTQ09ubHkoKTsKIAog
ICAgICMgRG9uJ3Qgd2FybiB2YXJpYWJsZXMgd2hpY2ggYXJlbid0IHVzZWQgYnkgY21ha2UgcG9y
dHMuCiAgICAgcHVzaCBAYXJncywgIi0tbm8td2Fybi11bnVzZWQtY2xpIjsKQEAgLTIxMTMsMTAg
KzIwOTcsNiBAQCBzdWIgYnVpbGRDTWFrZVByb2plY3RPckV4aXQoJCQkQCkKIAogICAgIGV4aXQo
ZXhpdFN0YXR1cyhjbGVhbkNNYWtlR2VuZXJhdGVkUHJvamVjdCgpKSkgaWYgJGNsZWFuOwogCi0g
ICAgaWYgKGlzRWZsKCkgJiYgY2hlY2tGb3JBcmd1bWVudEFuZFJlbW92ZUZyb21BUkdWKCItLXVw
ZGF0ZS1lZmwiKSkgewotICAgICAgICBzeXN0ZW0oInBlcmwiLCAiJHNvdXJjZURpci9Ub29scy9T
Y3JpcHRzL3VwZGF0ZS13ZWJraXRlZmwtbGlicyIpID09IDAgb3IgZGllICQhOwotICAgIH0KLQog
ICAgIGlmIChpc0d0aygpICYmIGNoZWNrRm9yQXJndW1lbnRBbmRSZW1vdmVGcm9tQVJHVigiLS11
cGRhdGUtZ3RrIikpIHsKICAgICAgICAgc3lzdGVtKCJwZXJsIiwgIiRzb3VyY2VEaXIvVG9vbHMv
U2NyaXB0cy91cGRhdGUtd2Via2l0Z3RrLWxpYnMiKSA9PSAwIG9yIGRpZSAkITsKICAgICB9CmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KaW5kZXggNDU1M2RiOTYyZDAzODFi
ZDJmMDNjMTliMzE1YzI3YjU4ZGYzMzE5ZS4uMmMzYWUxMWE3MzA2YzI3ZjUzNmRlMDNhODRiOWM4
OWE1NzgyZWNmOSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVM
aXN0LnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQpAQCAt
MTQ3LDcgKzE0Nyw3IEBAIHByb2hpYml0VW5rbm93blBvcnQoKTsKIAogbXkgQGZlYXR1cmVzID0g
KAogICAgIHsgb3B0aW9uID0+ICIzZC1yZW5kZXJpbmciLCBkZXNjID0+ICJUb2dnbGUgM0QgUmVu
ZGVyaW5nIHN1cHBvcnQiLAotICAgICAgZGVmaW5lID0+ICJFTkFCTEVfM0RfVFJBTlNGT1JNUyIs
IGRlZmF1bHQgPT4gKGlzQXBwbGVDb2NvYVdlYktpdCgpIHx8IGlzSU9TV2ViS2l0KCkgfHwgaXNH
dGsoKSB8fCBpc0VmbCgpKSwgdmFsdWUgPT4gXCR0aHJlZURUcmFuc2Zvcm1zU3VwcG9ydCB9LAor
ICAgICAgZGVmaW5lID0+ICJFTkFCTEVfM0RfVFJBTlNGT1JNUyIsIGRlZmF1bHQgPT4gKGlzQXBw
bGVDb2NvYVdlYktpdCgpIHx8IGlzSU9TV2ViS2l0KCkgfHwgaXNHdGsoKSksIHZhbHVlID0+IFwk
dGhyZWVEVHJhbnNmb3Jtc1N1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJhY2NlbGVyYXRl
ZC0yZC1jYW52YXMiLCBkZXNjID0+ICJUb2dnbGUgQWNjZWxlcmF0ZWQgMkQgQ2FudmFzIHN1cHBv
cnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTIiwgZGVm
YXVsdCA9PiAwLCB2YWx1ZSA9PiBcJGFjY2VsZXJhdGVkMkRDYW52YXNTdXBwb3J0IH0sCkBAIC0x
NzcsMTMgKzE3NywxMyBAQCBteSBAZmVhdHVyZXMgPSAoCiAgICAgICBkZWZpbmUgPT4gIkVOQUJM
RV9DU1NfREVWSUNFX0FEQVBUQVRJT04iLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkY3NzRGV2
aWNlQWRhcHRhdGlvbiB9LAogCiAgICAgeyBvcHRpb24gPT4gImNzcy1pbWFnZS1vcmllbnRhdGlv
biIsIGRlc2MgPT4gIlRvZ2dsZSBDU1MgaW1hZ2Utb3JpZW50YXRpb24gc3VwcG9ydCIsCi0gICAg
ICBkZWZpbmUgPT4gIkVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04iLCBkZWZhdWx0ID0+IChp
c0VmbCgpIHx8IGlzR3RrKCkpLCB2YWx1ZSA9PiBcJGNzc0ltYWdlT3JpZW50YXRpb25TdXBwb3J0
IH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04iLCBkZWZh
dWx0ID0+IGlzR3RrKCksIHZhbHVlID0+IFwkY3NzSW1hZ2VPcmllbnRhdGlvblN1cHBvcnQgfSwK
IAogICAgIHsgb3B0aW9uID0+ICJjc3MtaW1hZ2UtcmVzb2x1dGlvbiIsIGRlc2MgPT4gIlRvZ2ds
ZSBDU1MgaW1hZ2UtcmVzb2x1dGlvbiBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxF
X0NTU19JTUFHRV9SRVNPTFVUSU9OIiwgZGVmYXVsdCA9PiBpc0d0aygpLCB2YWx1ZSA9PiBcJGNz
c0ltYWdlUmVzb2x1dGlvblN1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJjc3MtaW1hZ2Ut
c2V0IiwgZGVzYyA9PiAiVG9nZ2xlIENTUyBpbWFnZS1zZXQgc3VwcG9ydCIsCi0gICAgICBkZWZp
bmUgPT4gIkVOQUJMRV9DU1NfSU1BR0VfU0VUIiwgZGVmYXVsdCA9PiAoaXNFZmwoKSB8fCBpc0d0
aygpKSwgdmFsdWUgPT4gXCRjc3NJbWFnZVNldFN1cHBvcnQgfSwKKyAgICAgIGRlZmluZSA9PiAi
RU5BQkxFX0NTU19JTUFHRV9TRVQiLCBkZWZhdWx0ID0+IGlzR3RrKCksIHZhbHVlID0+IFwkY3Nz
SW1hZ2VTZXRTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiY3NzLXJlZ2lvbnMiLCBkZXNj
ID0+ICJUb2dnbGUgQ1NTIFJlZ2lvbnMgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJM
RV9DU1NfUkVHSU9OUyIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRjc3NSZWdpb25zU3VwcG9y
dCB9LApAQCAtMTkyLDI4ICsxOTIsMjggQEAgbXkgQGZlYXR1cmVzID0gKAogICAgICAgZGVmaW5l
ID0+ICJFTkFCTEVfQ1NTX1NIQVBFUyIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRjc3NTaGFw
ZXNTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiY3NzMy10ZXh0IiwgZGVzYyA9PiAiVG9n
Z2xlIENTUzMgVGV4dCBzdXBwb3J0IiwKLSAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0NTUzNfVEVY
VCIsIGRlZmF1bHQgPT4gKGlzRWZsKCkgfHwgaXNHdGsoKSksIHZhbHVlID0+IFwkY3NzM1RleHRT
dXBwb3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9DU1MzX1RFWFQiLCBkZWZhdWx0ID0+
IGlzR3RrKCksIHZhbHVlID0+IFwkY3NzM1RleHRTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9
PiAiY3VzdG9tLWVsZW1lbnRzIiwgZGVzYyA9PiAiVG9nZ2xlIGN1c3RvbSBlbGVtZW50cyBzdXBw
b3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0NVU1RPTV9FTEVNRU5UUyIsIGRlZmF1bHQg
PT4gMSwgdmFsdWUgPT4gXCRjdXN0b21FbGVtZW50c1N1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9u
ID0+ICJjdXN0b20tc2NoZW1lLWhhbmRsZXIiLCBkZXNjID0+ICJUb2dnbGUgQ3VzdG9tIFNjaGVt
ZSBIYW5kbGVyIHN1cHBvcnQiLAotICAgICAgZGVmaW5lID0+ICJFTkFCTEVfQ1VTVE9NX1NDSEVN
RV9IQU5ETEVSIiwgZGVmYXVsdCA9PiBpc0VmbCgpLCB2YWx1ZSA9PiBcJGN1c3RvbVNjaGVtZUhh
bmRsZXJTdXBwb3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9DVVNUT01fU0NIRU1FX0hB
TkRMRVIiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkY3VzdG9tU2NoZW1lSGFuZGxlclN1cHBv
cnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJkYXRhLXRyYW5zZmVyLWl0ZW1zIiwgZGVzYyA9PiAi
VG9nZ2xlIERhdGEgVHJhbnNmZXIgSXRlbXMgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVO
QUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJGRhdGFU
cmFuc2Zlckl0ZW1zU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gImRhdGFsaXN0LWVsZW1l
bnQiLCBkZXNjID0+ICJUb2dnbGUgRGF0YWxpc3QgRWxlbWVudCBzdXBwb3J0IiwKLSAgICAgIGRl
ZmluZSA9PiAiRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQiLCBkZWZhdWx0ID0+IGlzRWZsKCksIHZh
bHVlID0+IFwkZGF0YWxpc3RFbGVtZW50U3VwcG9ydCB9LAorICAgICAgZGVmaW5lID0+ICJFTkFC
TEVfREFUQUxJU1RfRUxFTUVOVCIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRkYXRhbGlzdEVs
ZW1lbnRTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiZGV2aWNlLW9yaWVudGF0aW9uIiwg
ZGVzYyA9PiAiVG9nZ2xlIERldmljZSBPcmllbnRhdGlvbiBzdXBwb3J0IiwKICAgICAgIGRlZmlu
ZSA9PiAiRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTiIsIGRlZmF1bHQgPT4gaXNJT1NXZWJLaXQo
KSwgdmFsdWUgPT4gXCRkZXZpY2VPcmllbnRhdGlvblN1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9u
ID0+ICJkb200LWV2ZW50cy1jb25zdHJ1Y3RvciIsIGRlc2MgPT4gIkV4cG9zZSBET000IEV2ZW50
cyBjb25zdHJ1Y3RvcnMiLAotICAgICAgZGVmaW5lID0+ICJFTkFCTEVfRE9NNF9FVkVOVFNfQ09O
U1RSVUNUT1IiLCBkZWZhdWx0ID0+IChpc0FwcGxlV2ViS2l0KCkgfHwgaXNHdGsoKSB8fCBpc0Vm
bCgpKSwgdmFsdWUgPT4gXCRkb200RXZlbnRzQ29uc3RydWN0b3IgfSwKKyAgICAgIGRlZmluZSA9
PiAiRU5BQkxFX0RPTTRfRVZFTlRTX0NPTlNUUlVDVE9SIiwgZGVmYXVsdCA9PiAoaXNBcHBsZVdl
YktpdCgpIHx8IGlzR3RrKCkpLCB2YWx1ZSA9PiBcJGRvbTRFdmVudHNDb25zdHJ1Y3RvciB9LAog
CiAgICAgeyBvcHRpb24gPT4gImRvd25sb2FkLWF0dHJpYnV0ZSIsIGRlc2MgPT4gIlRvZ2dsZSBE
b3dubG9hZCBBdHRyaWJ1dGUgc3VwcG9ydCIsCi0gICAgICBkZWZpbmUgPT4gIkVOQUJMRV9ET1dO
TE9BRF9BVFRSSUJVVEUiLCBkZWZhdWx0ID0+IChpc0VmbCgpIHx8IGlzR3RrKCkpLCB2YWx1ZSA9
PiBcJGRvd25sb2FkQXR0cmlidXRlU3VwcG9ydCB9LAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVf
RE9XTkxPQURfQVRUUklCVVRFIiwgZGVmYXVsdCA9PiBpc0d0aygpLCB2YWx1ZSA9PiBcJGRvd25s
b2FkQXR0cmlidXRlU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gImVuY3J5cHRlZC1tZWRp
YSIsIGRlc2MgPT4gIlRvZ2dsZSBFTUUgVjMgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVO
QUJMRV9FTkNSWVBURURfTUVESUEiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkZW5jcnlwdGVk
TWVkaWFTdXBwb3J0IH0sCkBAIC0yMzEsMTMgKzIzMSwxMyBAQCBteSBAZmVhdHVyZXMgPSAoCiAg
ICAgICBkZWZpbmUgPT4gIkVOQUJMRV9GVFBESVIiLCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+IFwk
ZnRwRGlyU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gImZ1bGxzY3JlZW4tYXBpIiwgZGVz
YyA9PiAiVG9nZ2xlIEZ1bGxzY3JlZW4gQVBJIHN1cHBvcnQiLAotICAgICAgZGVmaW5lID0+ICJF
TkFCTEVfRlVMTFNDUkVFTl9BUEkiLCBkZWZhdWx0ID0+IChpc0FwcGxlQ29jb2FXZWJLaXQoKSB8
fCBpc0VmbCgpIHx8IGlzR3RrKCkpLCB2YWx1ZSA9PiBcJGZ1bGxzY3JlZW5BUElTdXBwb3J0IH0s
CisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9GVUxMU0NSRUVOX0FQSSIsIGRlZmF1bHQgPT4gKGlz
QXBwbGVDb2NvYVdlYktpdCgpIHx8IGlzR3RrKCkpLCB2YWx1ZSA9PiBcJGZ1bGxzY3JlZW5BUElT
dXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiZ2FtZXBhZCIsIGRlc2MgPT4gIlRvZ2dsZSBH
YW1lcGFkIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfR0FNRVBBRCIsIGRlZmF1
bHQgPT4gMCwgdmFsdWUgPT4gXCRnYW1lcGFkU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4g
Imdlb2xvY2F0aW9uIiwgZGVzYyA9PiAiVG9nZ2xlIEdlb2xvY2F0aW9uIHN1cHBvcnQiLAotICAg
ICAgZGVmaW5lID0+ICJFTkFCTEVfR0VPTE9DQVRJT04iLCBkZWZhdWx0ID0+IChpc0FwcGxlV2Vi
S2l0KCkgfHwgaXNJT1NXZWJLaXQoKSB8fCBpc0d0aygpIHx8IGlzRWZsKCkpLCB2YWx1ZSA9PiBc
JGdlb2xvY2F0aW9uU3VwcG9ydCB9LAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVfR0VPTE9DQVRJ
T04iLCBkZWZhdWx0ID0+IChpc0FwcGxlV2ViS2l0KCkgfHwgaXNJT1NXZWJLaXQoKSB8fCBpc0d0
aygpKSwgdmFsdWUgPT4gXCRnZW9sb2NhdGlvblN1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+
ICJoaWdoLWRwaS1jYW52YXMiLCBkZXNjID0+ICJUb2dnbGUgSGlnaCBEUEkgQ2FudmFzIHN1cHBv
cnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfSElHSF9EUElfQ0FOVkFTIiwgZGVmYXVsdCA9
PiAoaXNBcHBsZVdlYktpdCgpKSwgdmFsdWUgPT4gXCRoaWdoRFBJQ2FudmFzU3VwcG9ydCB9LApA
QCAtMjQ2LDEzICsyNDYsMTMgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgICAgZGVmaW5lID0+ICJF
TkFCTEVfSUNPTkRBVEFCQVNFIiwgZGVmYXVsdCA9PiAhaXNJT1NXZWJLaXQoKSwgdmFsdWUgPT4g
XCRpY29uZGF0YWJhc2VTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiaW5kZXhlZC1kYXRh
YmFzZSIsIGRlc2MgPT4gIlRvZ2dsZSBJbmRleGVkIERhdGFiYXNlIHN1cHBvcnQiLAotICAgICAg
ZGVmaW5lID0+ICJFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSIsIGRlZmF1bHQgPT4gKGlzQXBwbGVD
b2NvYVdlYktpdCgpIHx8IGlzRWZsKCkgfHwgaXNHdGsoKSksIHZhbHVlID0+IFwkaW5kZXhlZERh
dGFiYXNlU3VwcG9ydCB9LAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVfSU5ERVhFRF9EQVRBQkFT
RSIsIGRlZmF1bHQgPT4gKGlzQXBwbGVDb2NvYVdlYktpdCgpIHx8IGlzR3RrKCkpLCB2YWx1ZSA9
PiBcJGluZGV4ZWREYXRhYmFzZVN1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJpbnB1dC1z
cGVlY2giLCBkZXNjID0+ICJUb2dnbGUgSW5wdXQgU3BlZWNoIHN1cHBvcnQiLAogICAgICAgZGVm
aW5lID0+ICJFTkFCTEVfSU5QVVRfU1BFRUNIIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJGlu
cHV0U3BlZWNoU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gImlucHV0LXR5cGUtY29sb3Ii
LCBkZXNjID0+ICJUb2dnbGUgSW5wdXQgVHlwZSBDb2xvciBzdXBwb3J0IiwKLSAgICAgIGRlZmlu
ZSA9PiAiRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IiLCBkZWZhdWx0ID0+IChpc0VmbCgpIHx8IGlz
R3RrKCkpLCB2YWx1ZSA9PiBcJGlucHV0VHlwZUNvbG9yU3VwcG9ydCB9LAorICAgICAgZGVmaW5l
ID0+ICJFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUiIsIGRlZmF1bHQgPT4gaXNHdGsoKSwgdmFsdWUg
PT4gXCRpbnB1dFR5cGVDb2xvclN1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJpbnB1dC10
eXBlLWRhdGUiLCBkZXNjID0+ICJUb2dnbGUgSW5wdXQgVHlwZSBEYXRlIHN1cHBvcnQiLAogICAg
ICAgZGVmaW5lID0+ICJFTkFCTEVfSU5QVVRfVFlQRV9EQVRFIiwgZGVmYXVsdCA9PiAwLCB2YWx1
ZSA9PiBcJGlucHV0VHlwZURhdGVTdXBwb3J0IH0sCkBAIC0yOTEsMTMgKzI5MSwxMyBAQCBteSBA
ZmVhdHVyZXMgPSAoCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9MRUdBQ1lfV0VCX0FVRElPIiwg
ZGVmYXVsdCA9PiAxLCB2YWx1ZSA9PiBcJGxlZ2FjeVdlYkF1ZGlvU3VwcG9ydCB9LAogCiAgICAg
eyBvcHRpb24gPT4gImxpbmstcHJlZmV0Y2giLCBkZXNjID0+ICJUb2dnbGUgTGluayBQcmVmZXRj
aCBzdXBwb3J0IiwKLSAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0xJTktfUFJFRkVUQ0giLCBkZWZh
dWx0ID0+IChpc0d0aygpIHx8IGlzRWZsKCkpLCB2YWx1ZSA9PiBcJGxpbmtQcmVmZXRjaFN1cHBv
cnQgfSwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0xJTktfUFJFRkVUQ0giLCBkZWZhdWx0ID0+
IGlzR3RrKCksIHZhbHVlID0+IFwkbGlua1ByZWZldGNoU3VwcG9ydCB9LAogCiAgICAgeyBvcHRp
b24gPT4gIm1hdGhtbCIsIGRlc2MgPT4gIlRvZ2dsZSBNYXRoTUwgc3VwcG9ydCIsCiAgICAgICBk
ZWZpbmUgPT4gIkVOQUJMRV9NQVRITUwiLCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+IFwkbWF0aG1s
U3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gIm1lZGlhLWNhcHR1cmUiLCBkZXNjID0+ICJU
b2dnbGUgTWVkaWEgQ2FwdHVyZSBzdXBwb3J0IiwKLSAgICAgIGRlZmluZSA9PiAiRU5BQkxFX01F
RElBX0NBUFRVUkUiLCBkZWZhdWx0ID0+IGlzRWZsKCksIHZhbHVlID0+IFwkbWVkaWFDYXB0dXJl
U3VwcG9ydCB9LAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVfTUVESUFfQ0FQVFVSRSIsIGRlZmF1
bHQgPT4gMCwgdmFsdWUgPT4gXCRtZWRpYUNhcHR1cmVTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlv
biA9PiAibWVkaWEtc291cmNlIiwgZGVzYyA9PiAiVG9nZ2xlIE1lZGlhIFNvdXJjZSBzdXBwb3J0
IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX01FRElBX1NPVVJDRSIsIGRlZmF1bHQgPT4gaXNH
dGsoKSwgdmFsdWUgPT4gXCRtZWRpYVNvdXJjZVN1cHBvcnQgfSwKQEAgLTMwNiwxOSArMzA2LDE5
IEBAIG15IEBmZWF0dXJlcyA9ICgKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX01FRElBX1NUQVRJ
U1RJQ1MiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkbWVkaWFTdGF0aXN0aWNzU3VwcG9ydCB9
LAogCiAgICAgeyBvcHRpb24gPT4gIm1lZGlhLXN0cmVhbSIsIGRlc2MgPT4gIlRvZ2dsZSBNZWRp
YSBTdHJlYW0gc3VwcG9ydCIsCi0gICAgICBkZWZpbmUgPT4gIkVOQUJMRV9NRURJQV9TVFJFQU0i
LCBkZWZhdWx0ID0+IChpc0d0aygpKSwgdmFsdWUgPT4gXCRtZWRpYVN0cmVhbVN1cHBvcnQgfSwK
KyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX01FRElBX1NUUkVBTSIsIGRlZmF1bHQgPT4gaXNHdGso
KSwgdmFsdWUgPT4gXCRtZWRpYVN0cmVhbVN1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJt
ZXRlci1lbGVtZW50IiwgZGVzYyA9PiAiVG9nZ2xlIE1ldGVyIEVsZW1lbnQgc3VwcG9ydCIsCiAg
ICAgICBkZWZpbmUgPT4gIkVOQUJMRV9NRVRFUl9FTEVNRU5UIiwgZGVmYXVsdCA9PiAhaXNBcHBs
ZVdpbldlYktpdCgpLCB2YWx1ZSA9PiBcJG1ldGVyRWxlbWVudFN1cHBvcnQgfSwKIAogICAgIHsg
b3B0aW9uID0+ICJtaHRtbCIsIGRlc2MgPT4gIlRvZ2dsZSBNSFRNTCBzdXBwb3J0IiwKLSAgICAg
IGRlZmluZSA9PiAiRU5BQkxFX01IVE1MIiwgZGVmYXVsdCA9PiAoaXNHdGsoKSB8fCBpc0VmbCgp
KSwgdmFsdWUgPT4gXCRtaHRtbFN1cHBvcnQgfSwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX01I
VE1MIiwgZGVmYXVsdCA9PiBpc0d0aygpLCB2YWx1ZSA9PiBcJG1odG1sU3VwcG9ydCB9LAogCiAg
ICAgeyBvcHRpb24gPT4gIm1vdXNlLWN1cnNvci1zY2FsZSIsIGRlc2MgPT4gIlRvZ2dsZSBTY2Fs
ZWQgbW91c2UgY3Vyc29yIHN1cHBvcnQiLAotICAgICAgZGVmaW5lID0+ICJFTkFCTEVfTU9VU0Vf
Q1VSU09SX1NDQUxFIiwgZGVmYXVsdCA9PiBpc0VmbCgpLCB2YWx1ZSA9PiBcJG1vdXNlQ3Vyc29y
U2NhbGVTdXBwb3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9NT1VTRV9DVVJTT1JfU0NB
TEUiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkbW91c2VDdXJzb3JTY2FsZVN1cHBvcnQgfSwK
IAogICAgIHsgb3B0aW9uID0+ICJuYXZpZ2F0b3ItY29udGVudC11dGlscyIsIGRlc2MgPT4gIlRv
Z2dsZSBOYXZpZ2F0b3IgQ29udGVudCBVdGlscyBzdXBwb3J0IiwKLSAgICAgIGRlZmluZSA9PiAi
RU5BQkxFX05BVklHQVRPUl9DT05URU5UX1VUSUxTIiwgZGVmYXVsdCA9PiBpc0VmbCgpLCB2YWx1
ZSA9PiBcJHJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyU3VwcG9ydCB9LAorICAgICAgZGVmaW5lID0+
ICJFTkFCTEVfTkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+
IFwkcmVnaXN0ZXJQcm90b2NvbEhhbmRsZXJTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAi
bmF2aWdhdG9yLWhhcmR3YXJlLWNvbmN1cnJlbmN5IiwgZGVzYyA9PiAiVG9nZ2xlIE5hdmlnYXRv
ciBoYXJkd2FyZSBjb25jdXJyZW5jdCBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxF
X05BVklHQVRPUl9IV0NPTkNVUlJFTkNZIiwgZGVmYXVsdCA9PiAxLCB2YWx1ZSA9PiBcJGhhcmR3
YXJlQ29uY3VycmVuY3lTdXBwb3J0IH0sCkBAIC0zNTEsMTMgKzM1MSwxMyBAQCBteSBAZmVhdHVy
ZXMgPSAoCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9SRUFEQUJMRV9CWVRFX1NUUkVBTV9BUEki
LCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+IFwkcmVhZGFibGVCeXRlU3RyZWFtQVBJU3VwcG9ydCB9
LAogCiAgICAgeyBvcHRpb24gPT4gInJlc29sdXRpb24tbWVkaWEtcXVlcnkiLCBkZXNjID0+ICJU
b2dnbGUgcmVzb2x1dGlvbiBtZWRpYSBxdWVyeSBzdXBwb3J0IiwKLSAgICAgIGRlZmluZSA9PiAi
RU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkiLCBkZWZhdWx0ID0+IGlzRWZsKCksIHZhbHVl
ID0+IFwkcmVzb2x1dGlvbk1lZGlhUXVlcnlTdXBwb3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVO
QUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJHJl
c29sdXRpb25NZWRpYVF1ZXJ5U3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gInNjcmlwdGVk
LXNwZWVjaCIsIGRlc2MgPT4gIlRvZ2dsZSBTY3JpcHRlZCBTcGVlY2ggc3VwcG9ydCIsCiAgICAg
ICBkZWZpbmUgPT4gIkVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0giLCBkZWZhdWx0ID0+IDAsIHZhbHVl
ID0+IFwkc2NyaXB0ZWRTcGVlY2hTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAic3VidGxl
LWNyeXB0byIsIGRlc2MgPT4gIlRvZ2dsZSBXZWJDcnlwdG8gU3VidGxlLUNyeXB0byBzdXBwb3J0
IiwKLSAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NVQlRMRV9DUllQVE8iLCBkZWZhdWx0ID0+IChp
c0d0aygpIHx8IGlzRWZsKCkgfHwgaXNBcHBsZUNvY29hV2ViS2l0KCkgfHwgaXNJT1NXZWJLaXQo
KSksIHZhbHVlID0+IFwkc3VidGxlQ3J5cHRvIH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9T
VUJUTEVfQ1JZUFRPIiwgZGVmYXVsdCA9PiAoaXNHdGsoKSB8fCBpc0FwcGxlQ29jb2FXZWJLaXQo
KSB8fCBpc0lPU1dlYktpdCgpKSwgdmFsdWUgPT4gXCRzdWJ0bGVDcnlwdG8gfSwKIAogICAgIHsg
b3B0aW9uID0+ICJzdmctZm9udHMiLCBkZXNjID0+ICJUb2dnbGUgU1ZHIEZvbnRzIHN1cHBvcnQi
LAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1ZHX0ZPTlRTIiwgZGVmYXVsdCA9PiAxLCB2YWx1
ZSA9PiBcJHN2Z0ZvbnRzU3VwcG9ydCB9LApAQCAtMzY2LDI4ICszNjYsMjggQEAgbXkgQGZlYXR1
cmVzID0gKAogICAgICAgZGVmaW5lID0+ICJVU0VfU1lTVEVNX01BTExPQyIsIGRlZmF1bHQgPT4g
MCwgdmFsdWUgPT4gXCRzeXN0ZW1NYWxsb2NTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAi
dG91Y2gtZXZlbnRzIiwgZGVzYyA9PiAiVG9nZ2xlIFRvdWNoIEV2ZW50cyBzdXBwb3J0IiwKLSAg
ICAgIGRlZmluZSA9PiAiRU5BQkxFX1RPVUNIX0VWRU5UUyIsIGRlZmF1bHQgPT4gKGlzSU9TV2Vi
S2l0KCkgfHwgaXNFZmwoKSB8fCBpc0d0aygpKSwgdmFsdWUgPT4gXCR0b3VjaEV2ZW50c1N1cHBv
cnQgfSwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1RPVUNIX0VWRU5UUyIsIGRlZmF1bHQgPT4g
KGlzSU9TV2ViS2l0KCkgfHwgaXNHdGsoKSksIHZhbHVlID0+IFwkdG91Y2hFdmVudHNTdXBwb3J0
IH0sCiAKICAgICB7IG9wdGlvbiA9PiAidG91Y2gtaWNvbi1sb2FkaW5nIiwgZGVzYyA9PiAiVG9n
Z2xlIFRvdWNoIEljb24gTG9hZGluZyBTdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxF
X1RPVUNIX0lDT05fTE9BRElORyIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCR0b3VjaEljb25M
b2FkaW5nU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gInRvdWNoLXNsaWRlciIsIGRlc2Mg
PT4gIlRvZ2dsZSBUb3VjaCBTbGlkZXIgc3VwcG9ydCIsCi0gICAgICBkZWZpbmUgPT4gIkVOQUJM
RV9UT1VDSF9TTElERVIiLCBkZWZhdWx0ID0+IGlzRWZsKCksIHZhbHVlID0+IFwkdG91Y2hTbGlk
ZXJTdXBwb3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9UT1VDSF9TTElERVIiLCBkZWZh
dWx0ID0+IDAsIHZhbHVlID0+IFwkdG91Y2hTbGlkZXJTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlv
biA9PiAidmlicmF0aW9uIiwgZGVzYyA9PiAiVG9nZ2xlIFZpYnJhdGlvbiBzdXBwb3J0IiwKLSAg
ICAgIGRlZmluZSA9PiAiRU5BQkxFX1ZJQlJBVElPTiIsIGRlZmF1bHQgPT4gaXNFZmwoKSwgdmFs
dWUgPT4gXCR2aWJyYXRpb25TdXBwb3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9WSUJS
QVRJT04iLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkdmlicmF0aW9uU3VwcG9ydCB9LAogCiAg
ICAgeyBvcHRpb24gPT4gInZpZGVvIiwgZGVzYyA9PiAiVG9nZ2xlIFZpZGVvIHN1cHBvcnQiLAot
ICAgICAgZGVmaW5lID0+ICJFTkFCTEVfVklERU8iLCBkZWZhdWx0ID0+IChpc0FwcGxlV2ViS2l0
KCkgfHwgaXNHdGsoKSB8fCBpc0VmbCgpKSwgdmFsdWUgPT4gXCR2aWRlb1N1cHBvcnQgfSwKKyAg
ICAgIGRlZmluZSA9PiAiRU5BQkxFX1ZJREVPIiwgZGVmYXVsdCA9PiAoaXNBcHBsZVdlYktpdCgp
IHx8IGlzR3RrKCkpLCB2YWx1ZSA9PiBcJHZpZGVvU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24g
PT4gInZpZGVvLXRyYWNrIiwgZGVzYyA9PiAiVG9nZ2xlIFZpZGVvIFRyYWNrIHN1cHBvcnQiLAot
ICAgICAgZGVmaW5lID0+ICJFTkFCTEVfVklERU9fVFJBQ0siLCBkZWZhdWx0ID0+IChpc0FwcGxl
V2ViS2l0KCkgfHwgaXNHdGsoKSB8fCBpc0VmbCgpKSwgdmFsdWUgPT4gXCR2aWRlb1RyYWNrU3Vw
cG9ydCB9LAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVfVklERU9fVFJBQ0siLCBkZWZhdWx0ID0+
IChpc0FwcGxlV2ViS2l0KCkgfHwgaXNHdGsoKSksIHZhbHVlID0+IFwkdmlkZW9UcmFja1N1cHBv
cnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJ3ZWItYW5pbWF0aW9ucyIsIGRlc2MgPT4gIlRvZ2ds
ZSBXZWIgQW5pbWF0aW9ucyBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1dFQl9B
TklNQVRJT05TIiwgZGVmYXVsdCA9PiAxLCB2YWx1ZSA9PiBcJHdlYkFuaW1hdGlvbnNTdXBwb3J0
IH0sCiAKICAgICB7IG9wdGlvbiA9PiAid2ViLWF1ZGlvIiwgZGVzYyA9PiAiVG9nZ2xlIFdlYiBB
dWRpbyBzdXBwb3J0IiwKLSAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1dFQl9BVURJTyIsIGRlZmF1
bHQgPT4gKGlzRWZsKCkgfHwgaXNHdGsoKSksIHZhbHVlID0+IFwkd2ViQXVkaW9TdXBwb3J0IH0s
CisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9XRUJfQVVESU8iLCBkZWZhdWx0ID0+IGlzR3RrKCks
IHZhbHVlID0+IFwkd2ViQXVkaW9TdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAid2ViLXJl
cGxheSIsIGRlc2MgPT4gIlRvZ2dsZSBXZWIgUmVwbGF5IHN1cHBvcnQiLAogICAgICAgZGVmaW5l
ID0+ICJFTkFCTEVfV0VCX1JFUExBWSIsIGRlZmF1bHQgPT4gaXNBcHBsZUNvY29hV2ViS2l0KCks
IHZhbHVlID0+IFwkd2ViUmVwbGF5U3VwcG9ydCB9LApAQCAtNDA1LDcgKzQwNSw3IEBAIG15IEBm
ZWF0dXJlcyA9ICgKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1dFQkFTU0VNQkxZIiwgZGVmYXVs
dCA9PiAoaXNYODZfNjQoKSAmJiAoaXNHdGsoKSB8fCBpc0pTQ09ubHkoKSkpICwgdmFsdWUgPT4g
XCR3ZWJBc3NlbWJseVN1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJ3ZWJnbCIsIGRlc2Mg
PT4gIlRvZ2dsZSBXZWJHTCBzdXBwb3J0IiwKLSAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1dFQkdM
IiwgZGVmYXVsdCA9PiAoaXNBcHBsZUNvY29hV2ViS2l0KCkgfHwgaXNHdGsoKSB8fCBpc0VmbCgp
KSwgdmFsdWUgPT4gXCR3ZWJnbFN1cHBvcnQgfSwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1dF
QkdMIiwgZGVmYXVsdCA9PiAoaXNBcHBsZUNvY29hV2ViS2l0KCkgfHwgaXNHdGsoKSksIHZhbHVl
ID0+IFwkd2ViZ2xTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAid3JpdGFibGVTdHJlYW1B
UEkiLCBkZXNjID0+ICJUb2dnbGUgV3JpdGFibGVTdHJlYW0gQVBJIHN1cHBvcnQiLAogICAgICAg
ZGVmaW5lID0+ICJFTkFCTEVfV1JJVEFCTEVfU1RSRUFNX0FQSSIsIGRlZmF1bHQgPT4gMSwgdmFs
dWUgPT4gXCR3cml0YWJsZVN0cmVhbUFQSVN1cHBvcnQgfSwKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9wb3J0cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NvbmZpZy9wb3J0cy5weQppbmRleCAxZWUwZGEwZmRlMzg1MmM4ZTdjNDYx
MjAzY2RjYTkzYWQ1Mzk5ZTdjLi42ZDE1MmUyODk3NjAxMTZkNWQ3ZTJhYzgzNDUxYWQwNDViOTU2
MzBlIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvcG9y
dHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL3BvcnRzLnB5
CkBAIC03Miw3ICs3Miw2IEBAIGNsYXNzIERlcHJlY2F0ZWRQb3J0KG9iamVjdCk6CiAgICAgICAg
ICAgICAibWFjLXdrMiI6IE1hY1dLMlBvcnQsCiAgICAgICAgICAgICAid2luIjogV2luUG9ydCwK
ICAgICAgICAgICAgICJ3aW5jYWlybyI6IFdpbkNhaXJvUG9ydCwKLSAgICAgICAgICAgICJlZmwt
d2syIjogRWZsV0syUG9ydCwKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0X3BvcnQgPSB7CiAg
ICAgICAgICAgICAiV2luZG93cyI6IFdpblBvcnQsCkBAIC0yMDEsMTQgKzIwMCwzIEBAIGNsYXNz
IEd0a1dLMlBvcnQoRGVwcmVjYXRlZFBvcnQpOgogICAgICAgICBjb21tYW5kID0gc3VwZXIoR3Rr
V0syUG9ydCwgc2VsZikucnVuX3dlYmtpdF90ZXN0c19jb21tYW5kKGJ1aWxkX3N0eWxlKQogICAg
ICAgICBjb21tYW5kLmFwcGVuZCgiLS1ndGsiKQogICAgICAgICByZXR1cm4gY29tbWFuZAotCi0K
LWNsYXNzIEVmbFdLMlBvcnQoRGVwcmVjYXRlZFBvcnQpOgotICAgIHBvcnRfZmxhZ19uYW1lID0g
ImVmbC13azIiCi0KLSAgICBkZWYgYnVpbGRfd2Via2l0X2NvbW1hbmQoc2VsZiwgYnVpbGRfc3R5
bGU9Tm9uZSk6Ci0gICAgICAgIGNvbW1hbmQgPSBzdXBlcihFZmxXSzJQb3J0LCBzZWxmKS5idWls
ZF93ZWJraXRfY29tbWFuZChidWlsZF9zdHlsZT1idWlsZF9zdHlsZSkKLSAgICAgICAgY29tbWFu
ZC5hcHBlbmQoIi0tZWZsIikKLSAgICAgICAgY29tbWFuZC5hcHBlbmQoIi0tdXBkYXRlLWVmbCIp
Ci0gICAgICAgIGNvbW1hbmQuYXBwZW5kKHN1cGVyKEVmbFdLMlBvcnQsIHNlbGYpLm1ha2VBcmdz
KCkpCi0gICAgICAgIHJldHVybiBjb21tYW5kCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZWZsLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2VmbC5weQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGViMzRmZjFlMzc4MjBmNDY1MDZmNDM5ZjRj
MjI3ODc0OWIwOTVhMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZWZsLnB5CisrKyAvZGV2L251bGwKQEAg
LTEsMTQ2ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBFbWJlZGRlZCBT
eXN0ZW1zLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3Vu
ZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChDKSAyMDEy
IEludGVsIENvcnBvcmF0aW9uCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1l
dDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotIyBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotIiIiV2ViS2l0IEVmbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9y
dCBpbnRlcmZhY2UuIiIiCi0KLWltcG9ydCBvcwotCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0gaW1wb3J0IHBhdGgKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2Nv
bmZpZ3VyYXRpb24gaW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCi1mcm9tIHdlYmtpdHB5LnBvcnQu
YmFzZSBpbXBvcnQgUG9ydAotZnJvbSB3ZWJraXRweS5wb3J0LnB1bHNlYXVkaW9fc2FuaXRpemVy
IGltcG9ydCBQdWxzZUF1ZGlvU2FuaXRpemVyCi1mcm9tIHdlYmtpdHB5LnBvcnQueG9yZ2RyaXZl
ciBpbXBvcnQgWG9yZ0RyaXZlcgotZnJvbSB3ZWJraXRweS5wb3J0Lnh2ZmJkcml2ZXIgaW1wb3J0
IFh2ZmJEcml2ZXIKLWZyb20gd2Via2l0cHkucG9ydC5saW51eF9nZXRfY3Jhc2hfbG9nIGltcG9y
dCBHREJDcmFzaExvZ0dlbmVyYXRvcgotCi0KLWNsYXNzIEVmbFBvcnQoUG9ydCk6Ci0gICAgcG9y
dF9uYW1lID0gJ2VmbCcKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3Mp
OgotICAgICAgICBzdXBlcihFZmxQb3J0LCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3Mp
Ci0KLSAgICAgICAgc2VsZi5famhidWlsZF93cmFwcGVyID0gW3NlbGYucGF0aF9mcm9tX3dlYmtp
dF9iYXNlKCdUb29scycsICdqaGJ1aWxkJywgJ2poYnVpbGQtd3JhcHBlcicpLCAnLS1lZmwnLCAn
cnVuJ10KLQotICAgICAgICBzZWxmLnNldF9vcHRpb25fZGVmYXVsdCgnd3JhcHBlcicsICcgJy5q
b2luKHNlbGYuX2poYnVpbGRfd3JhcHBlcikpCi0gICAgICAgIHNlbGYud2VicHJvY2Vzc19jbWRf
cHJlZml4ID0gc2VsZi5nZXRfb3B0aW9uKCd3ZWJwcm9jZXNzX2NtZF9wcmVmaXgnKQotCi0gICAg
ICAgIHNlbGYuX3B1bHNlYXVkaW9fc2FuaXRpemVyID0gUHVsc2VBdWRpb1Nhbml0aXplcigpCi0K
LSAgICBkZWYgX3BvcnRfZmxhZ19mb3Jfc2NyaXB0cyhzZWxmKToKLSAgICAgICAgcmV0dXJuICIt
LWVmbCIKLQotICAgIGRlZiBzZXR1cF90ZXN0X3J1bihzZWxmLCBkZXZpY2VfY2xhc3M9Tm9uZSk6
Ci0gICAgICAgIHN1cGVyKEVmbFBvcnQsIHNlbGYpLnNldHVwX3Rlc3RfcnVuKGRldmljZV9jbGFz
cykKLSAgICAgICAgc2VsZi5fcHVsc2VhdWRpb19zYW5pdGl6ZXIudW5sb2FkX3B1bHNlYXVkaW9f
bW9kdWxlKCkKLQotICAgIGRlZiBzZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZiwgc2VydmVy
X25hbWU9Tm9uZSk6Ci0gICAgICAgIGVudiA9IHN1cGVyKEVmbFBvcnQsIHNlbGYpLnNldHVwX2Vu
dmlyb25fZm9yX3NlcnZlcihzZXJ2ZXJfbmFtZSkKLQotICAgICAgICAjIElmIERJU1BMQVkgZW52
aXJvbm1lbnQgdmFyaWFibGUgaXMgdW5zZXQgaW4gdGhlIHN5c3RlbQotICAgICAgICAjIGUuZy4g
b24gYnVpbGQgYm90LCByZW1vdmUgRElTUExBWSB2YXJpYWJsZSBmcm9tIHRoZSBkaWN0aW9uYXJ5
Ci0gICAgICAgIGlmIG5vdCAnRElTUExBWScgaW4gb3MuZW52aXJvbjoKLSAgICAgICAgICAgIGRl
bCBlbnZbJ0RJU1BMQVknXQotCi0gICAgICAgIGlmICdBQ0NFU1NJQklMSVRZX0VBSUxfTElCUkFS
WV9QQVRIJyBpbiBvcy5lbnZpcm9uOgotICAgICAgICAgICAgZW52WydBQ0NFU1NJQklMSVRZX0VB
SUxfTElCUkFSWV9QQVRIJ10gPSBvcy5lbnZpcm9uWydBQ0NFU1NJQklMSVRZX0VBSUxfTElCUkFS
WV9QQVRIJ10KLQotICAgICAgICBlbnZbJ1RFU1RfUlVOTkVSX0lOSkVDVEVEX0JVTkRMRV9GSUxF
TkFNRSddID0gc2VsZi5fYnVpbGRfcGF0aCgnbGliJywgJ2xpYlRlc3RSdW5uZXJJbmplY3RlZEJ1
bmRsZS5zbycpCi0gICAgICAgIGVudlsnVEVTVF9SVU5ORVJfUExVR0lOX1BBVEgnXSA9IHNlbGYu
X2J1aWxkX3BhdGgoJ2xpYicsICdwbHVnaW5zJykKLQotICAgICAgICAjIFNpbGVuY2UgR0lPIHdh
cm5pbmdzIGFib3V0IHVzaW5nIHRoZSAibWVtb3J5IiBHU2V0dGluZ3MgYmFja2VuZC4KLSAgICAg
ICAgZW52WydHU0VUVElOR1NfQkFDS0VORCddID0gJ21lbW9yeScKLQotICAgICAgICBpZiBzZWxm
LndlYnByb2Nlc3NfY21kX3ByZWZpeDoKLSAgICAgICAgICAgIGVudlsnV0VCX1BST0NFU1NfQ01E
X1BSRUZJWCddID0gc2VsZi53ZWJwcm9jZXNzX2NtZF9wcmVmaXgKLQotICAgICAgICByZXR1cm4g
ZW52Ci0KLSAgICBkZWYgZGVmYXVsdF90aW1lb3V0X21zKHNlbGYpOgotICAgICAgICAjIFRlc3Rz
IHJ1biBjb25zaWRlcmFibHkgc2xvd2VyIHVuZGVyIGdkYgotICAgICAgICAjIG9yIHZhbGdyaW5k
LgotICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYnByb2Nlc3NfY21kX3ByZWZpeCcpOgot
ICAgICAgICAgICAgcmV0dXJuIDM1MCAqIDEwMDAKLSAgICAgICAgcmV0dXJuIHN1cGVyKEVmbFBv
cnQsIHNlbGYpLmRlZmF1bHRfdGltZW91dF9tcygpCi0KLSAgICBkZWYgY2xlYW5fdXBfdGVzdF9y
dW4oc2VsZik6Ci0gICAgICAgIHN1cGVyKEVmbFBvcnQsIHNlbGYpLmNsZWFuX3VwX3Rlc3RfcnVu
KCkKLSAgICAgICAgc2VsZi5fcHVsc2VhdWRpb19zYW5pdGl6ZXIucmVzdG9yZV9wdWxzZWF1ZGlv
X21vZHVsZSgpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2FsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKHNl
bGYpOgotICAgICAgICByZXR1cm4gW1Rlc3RDb25maWd1cmF0aW9uKHZlcnNpb249c2VsZi5fdmVy
c2lvbiwgYXJjaGl0ZWN0dXJlPSd4ODYnLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpIGZvciBidWls
ZF90eXBlIGluIHNlbGYuQUxMX0JVSUxEX1RZUEVTXQotCi0gICAgZGVmIF9kcml2ZXJfY2xhc3Mo
c2VsZik6Ci0gICAgICAgIGlmIG9zLmVudmlyb24uZ2V0KCJVU0VfTkFUSVZFX1hESVNQTEFZIik6
Ci0gICAgICAgICAgICByZXR1cm4gWG9yZ0RyaXZlcgotICAgICAgICByZXR1cm4gWHZmYkRyaXZl
cgotCi0gICAgZGVmIF9wYXRoX3RvX2RyaXZlcihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYu
X2J1aWxkX3BhdGgoJ2JpbicsIHNlbGYuZHJpdmVyX25hbWUoKSkKLQotICAgIGRlZiBfcGF0aF90
b19pbWFnZV9kaWZmKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnYmlu
JywgJ0ltYWdlRGlmZicpCi0KLSAgICBkZWYgX2ltYWdlX2RpZmZfY29tbWFuZChzZWxmLCAqYXJn
cywgKiprd2FyZ3MpOgotICAgICAgICByZXR1cm4gc2VsZi5famhidWlsZF93cmFwcGVyICsgc3Vw
ZXIoRWZsUG9ydCwgc2VsZikuX2ltYWdlX2RpZmZfY29tbWFuZCgqYXJncywgKiprd2FyZ3MpCi0K
LSAgICBkZWYgX3BhdGhfdG9fd2ViY29yZV9saWJyYXJ5KHNlbGYpOgotICAgICAgICBzdGF0aWNf
cGF0aCA9IHNlbGYuX2J1aWxkX3BhdGgoJ2xpYicsICdsaWJ3ZWJjb3JlX2VmbC5hJykKLSAgICAg
ICAgZHluX3BhdGggPSBzZWxmLl9idWlsZF9wYXRoKCdsaWInLCAnbGlid2ViY29yZV9lZmwuc28n
KQotICAgICAgICByZXR1cm4gc3RhdGljX3BhdGggaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMo
c3RhdGljX3BhdGgpIGVsc2UgZHluX3BhdGgKLQotICAgIGRlZiBfc2VhcmNoX3BhdGhzKHNlbGYp
OgotICAgICAgICBzZWFyY2hfcGF0aHMgPSBbXQotICAgICAgICBzZWFyY2hfcGF0aHMuYXBwZW5k
KHNlbGYucG9ydF9uYW1lKQotICAgICAgICBzZWFyY2hfcGF0aHMuYXBwZW5kKCd3azInKQotICAg
ICAgICByZXR1cm4gc2VhcmNoX3BhdGhzCi0KLSAgICBkZWYgZGVmYXVsdF9iYXNlbGluZV9zZWFy
Y2hfcGF0aChzZWxmKToKLSAgICAgICAgcmV0dXJuIG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVf
cGF0aCwgc2VsZi5fc2VhcmNoX3BhdGhzKCkpCi0KLSAgICBkZWYgX3BvcnRfc3BlY2lmaWNfZXhw
ZWN0YXRpb25zX2ZpbGVzKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJs
ZSB0byB1c2UgdGhlIGRlZmF1bHQgYWxnb3JpdGhtIGhlcmUuCi0gICAgICAgIHJldHVybiBsaXN0
KHJldmVyc2VkKFtzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3Bh
dGgocCksICdUZXN0RXhwZWN0YXRpb25zJykgZm9yIHAgaW4gc2VsZi5fc2VhcmNoX3BhdGhzKCld
KSkKLQotICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJlc3VsdHNfZmlsZW5h
bWUpOgotICAgICAgICBzZWxmLl9ydW5fc2NyaXB0KCJydW4tbWluaWJyb3dzZXIiLCBbcGF0aC5h
YnNwYXRoX3RvX3VyaShzZWxmLmhvc3QucGxhdGZvcm0sIHJlc3VsdHNfZmlsZW5hbWUpXSkKLQot
ICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxmLCBuZWVkc19odHRwKToKLSAgICAgICAgcmV0dXJu
IHN1cGVyKEVmbFBvcnQsIHNlbGYpLmNoZWNrX3N5c19kZXBzKG5lZWRzX2h0dHApIGFuZCBzZWxm
Ll9kcml2ZXJfY2xhc3MoKS5jaGVja19kcml2ZXIoc2VsZikKLQotICAgIGRlZiBidWlsZF93ZWJr
aXRfY29tbWFuZChzZWxmLCBidWlsZF9zdHlsZT1Ob25lKToKLSAgICAgICAgY29tbWFuZCA9IHN1
cGVyKEVmbFBvcnQsIHNlbGYpLmJ1aWxkX3dlYmtpdF9jb21tYW5kKGJ1aWxkX3N0eWxlKQotICAg
ICAgICBjb21tYW5kLmV4dGVuZChbIi0tZWZsIiwgIi0tdXBkYXRlLWVmbCJdKQotICAgICAgICBj
b21tYW5kLmFwcGVuZChzdXBlcihFZmxQb3J0LCBzZWxmKS5tYWtlX2FyZ3MoKSkKLSAgICAgICAg
cmV0dXJuIGNvbW1hbmQKLQotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQs
IHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKLSAgICAgICAgcmV0dXJuIEdEQkNyYXNoTG9n
R2VuZXJhdG9yKG5hbWUsIHBpZCwgbmV3ZXJfdGhhbiwgc2VsZi5fZmlsZXN5c3RlbSwgc2VsZi5f
cGF0aF90b19kcml2ZXIpLmdlbmVyYXRlX2NyYXNoX2xvZyhzdGRvdXQsIHN0ZGVycikKLQotICAg
IGRlZiB0ZXN0X2V4cGVjdGF0aW9uc19maWxlX3Bvc2l0aW9uKHNlbGYpOgotICAgICAgICAjIEVG
TCBwb3J0IGJhc2VsaW5lIHNlYXJjaCBwYXRoIGlzIGVmbCAtPiB3azIgLT4gZ2VuZXJpYyAoYXMg
ZWZsLXdrMiBhbmQgZWZsIGJhc2VsaW5lcyBhcmUgbWVyZ2VkKSwgc28gcG9ydCB0ZXN0IGV4cGVj
dGF0aW9ucyBmaWxlIGlzIGF0IHRoaXJkIHRvIGxhc3QgcG9zaXRpb24uCi0gICAgICAgIHJldHVy
biAyCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZWZsX3VuaXR0ZXN0
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2VmbF91bml0dGVzdC5weQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA4MjE1NTRlN2IxNTZhZmRkODVmODVkZTcyYTU4ZDE0
Y2Q4YzdlZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZWZsX3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwK
QEAgLTEsNTQgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVk
IFN5c3RlbXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoQykgMjAxMSBTYW1z
dW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBNb2NrRXhlY3V0
aXZlCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0
cHV0Q2FwdHVyZQotZnJvbSB3ZWJraXRweS5wb3J0LmVmbCBpbXBvcnQgRWZsUG9ydAotZnJvbSB3
ZWJraXRweS5wb3J0LnB1bHNlYXVkaW9fc2FuaXRpemVyX21vY2sgaW1wb3J0IFB1bHNlQXVkaW9T
YW5pdGl6ZXJNb2NrCi1mcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UKLQot
Ci1jbGFzcyBFZmxQb3J0VGVzdChwb3J0X3Rlc3RjYXNlLlBvcnRUZXN0Q2FzZSk6Ci0gICAgcG9y
dF9uYW1lID0gJ2VmbCcKLSAgICBwb3J0X21ha2VyID0gRWZsUG9ydAotCi0gICAgIyBBZGRpdGlv
bmFsbHkgbW9ja3Mgb3V0IHRoZSBQdWxzZUF1ZGlvU2FuaXRpemVyIG1ldGhvZHMuCi0gICAgZGVm
IG1ha2VfcG9ydChzZWxmLCBob3N0PU5vbmUsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUs
IG9zX25hbWU9Tm9uZSwgb3NfdmVyc2lvbj1Ob25lLCAqKmt3YXJncyk6Ci0gICAgICAgIHBvcnQg
PSBzdXBlcihFZmxQb3J0VGVzdCwgc2VsZikubWFrZV9wb3J0KGhvc3QsIHBvcnRfbmFtZSwgb3B0
aW9ucywgb3NfbmFtZSwgb3NfdmVyc2lvbiwgKiprd2FyZ3MpCi0gICAgICAgIHBvcnQuX3B1bHNl
YXVkaW9fc2FuaXRpemVyID0gUHVsc2VBdWRpb1Nhbml0aXplck1vY2soKQotICAgICAgICByZXR1
cm4gcG9ydAotCi0gICAgZGVmIHRlc3Rfc2hvd19yZXN1bHRzX2h0bWxfZmlsZShzZWxmKToKLSAg
ICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgcG9ydC5fZXhlY3V0aXZlID0g
TW9ja0V4ZWN1dGl2ZShzaG91bGRfbG9nPVRydWUpCi0gICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAi
TU9DSyBydW5fY29tbWFuZDogWydUb29scy9TY3JpcHRzL3J1bi1taW5pYnJvd3NlcicsICctLXJl
bGVhc2UnLCAnLS1lZmwnLCAnZmlsZTovL3Rlc3QuaHRtbCddLCBjd2Q9L21vY2stY2hlY2tvdXRc
biIKLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHBvcnQuc2hv
d19yZXN1bHRzX2h0bWxfZmlsZSwgWyJ0ZXN0Lmh0bWwiXSwgZXhwZWN0ZWRfbG9ncz1leHBlY3Rl
ZF9sb2dzKQotCi0gICAgZGVmIHRlc3RfZ2V0X2NyYXNoX2xvZyhzZWxmKToKLSAgICAgICAgIyBU
aGlzIGZ1bmN0aW9uIHRlc3RlZCBpbiBsaW51eF9nZXRfY3Jhc2hfbG9nX3VuaXR0ZXN0LnB5Ci0g
ICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0
b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3RvcnkucHkKaW5kZXggYzYx
ZDE3ZjY1MzQwNTM4M2ZjNzg5ZDIwNzI2ZjdhNmVhYTdkN2MxZS4uNzVkZWVjNTdjYmJlZjE0OGM2
YjcwNTA4MTNmYjZmZWQwYjcyMjhhMyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2ZhY3RvcnkucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3Rv
cnkucHkKQEAgLTUwLDkgKzUwLDYgQEAgZGVmIHBsYXRmb3JtX29wdGlvbnModXNlX2dsb2JzPUZh
bHNlKToKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tc2ltdWxhdG9yJywgYWN0aW9u
PSdzdG9yZV9jb25zdCcsIGRlc3Q9J3BsYXRmb3JtJywKICAgICAgICAgICAgIGNvbnN0PSgnaW9z
LXNpbXVsYXRvcicpLAogICAgICAgICAgICAgaGVscD0oJ0RFUFJFQ0FURUQgYWxpYXMgZm9yIC0t
cGxhdGZvcm09aW9zLXNpbXVsYXRvcicpKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24o
Jy0tZWZsJywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGRlc3Q9J3BsYXRmb3JtJywKLSAgICAgICAg
ICAgIGNvbnN0PSgnZWZsKicgaWYgdXNlX2dsb2JzIGVsc2UgJ2VmbCcpLAotICAgICAgICAgICAg
aGVscD0oJ0FsaWFzIGZvciAtLXBsYXRmb3JtPWVmbConIGlmIHVzZV9nbG9icyBlbHNlICdBbGlh
cyBmb3IgLS1wbGF0Zm9ybT1lZmwnKSksCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCct
LWd0aycsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBkZXN0PSdwbGF0Zm9ybScsCiAgICAgICAgICAg
ICBjb25zdD0oJ2d0ayonIGlmIHVzZV9nbG9icyBlbHNlICdndGsnKSwKICAgICAgICAgICAgIGhl
bHA9KCdBbGlhcyBmb3IgLS1wbGF0Zm9ybT1ndGsqJyBpZiB1c2VfZ2xvYnMgZWxzZSAnQWxpYXMg
Zm9yIC0tcGxhdGZvcm09Z3RrJykpLApAQCAtODgsNyArODUsNiBAQCBjbGFzcyBQb3J0RmFjdG9y
eShvYmplY3QpOgogICAgICMgY29tbW9uIHByZWZpeCwgdGhlIG1vcmUgc3BlY2lmaWMgcG9ydCBj
bGFzcyBzaG91bGQgYmUgbGlzdGVkCiAgICAgIyBmaXJzdC4KICAgICBQT1JUX0NMQVNTRVMgPSAo
Ci0gICAgICAgICdlZmwuRWZsUG9ydCcsCiAgICAgICAgICdndGsuR3RrUG9ydCcsCiAgICAgICAg
ICdpb3Nfc2ltdWxhdG9yLklPU1NpbXVsYXRvclBvcnQnLAogICAgICAgICAnaW9zX2RldmljZS5J
T1NEZXZpY2VQb3J0JywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1F
ZmwuY21ha2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtlCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTljODE0NzI0OWZhODhmYmZiYzU2M2U4NTE3MjcyYWM2
Y2ZhNmU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2UKKysrIC9kZXYvbnVsbApAQCAtMSwx
MzkgKzAsMCBAQAotc2V0KFRFU1RXRUJLSVRBUElfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICIk
e0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vVGVzdFdlYktpdEFQSSIpCi1zZXQoVEVT
VFdFQktJVEFQSV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUllfV1RGICIke1RFU1RXRUJLSVRBUElf
UlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS9XVEYiKQotCi1hZGRfY3VzdG9tX3RhcmdldChmb3J3
YXJkaW5nLWhlYWRlcnNFZmxGb3JUZXN0V2ViS2l0QVBJCi0gICAgQ09NTUFORCAke1BFUkxfRVhF
Q1VUQUJMRX0gJHtXRUJLSVQyX0RJUn0vU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRl
cnMucGwgLS1pbmNsdWRlLXBhdGggJHtURVNUV0VCS0lUQVBJX0RJUn0gLS1vdXRwdXQgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCS0lUMl9ESVJ9L2luY2x1ZGUgLS1wbGF0Zm9ybSBlZmwgLS1wbGF0Zm9y
bSBDb29yZGluYXRlZEdyYXBoaWNzIC0tcGxhdGZvcm0gc291cAotICAgIERFUEVORFMgZm9yd2Fy
ZGluZy1oZWFkZXJzRWZsRm9yV2ViS2l0MgotKQotc2V0KEZvcndhcmRpbmdIZWFkZXJzRm9yVGVz
dFdlYktpdEFQSV9OQU1FIGZvcndhcmRpbmctaGVhZGVyc0VmbEZvclRlc3RXZWJLaXRBUEkpCi0K
LWluY2x1ZGVfZGlyZWN0b3JpZXMoCi0gICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUMl9ESVJ9
L2luY2x1ZGUKLSAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0MvQ29vcmRpbmF0ZWRH
cmFwaGljcwotICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9zb3VwCi0gICAgJHtX
RUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2VmbAotICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJv
Y2Vzcy9BUEkvZWZsCi0pCi0KLWluY2x1ZGVfZGlyZWN0b3JpZXMoU1lTVEVNCi0gICAgJHtFQ09S
RV9FVkFTX0lOQ0xVREVfRElSU30KLSAgICAke0dMSUJfSU5DTFVERV9ESVJTfQotICAgICR7TElC
U09VUF9JTkNMVURFX0RJUlN9Ci0pCi0KLXNldCh0ZXN0X21haW5fU09VUkNFUwotICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L2VmbC9tYWluLmNwcAotKQotCi1zZXQoYnVuZGxlX2hhcm5lc3NfU09V
UkNFUwotICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L2VmbC9JbmplY3RlZEJ1bmRsZUNvbnRyb2xs
ZXIuY3BwCi0gICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vZWZsL1BsYXRmb3JtVXRpbGl0aWVzLmNw
cAotKQotCi1zZXQod2Via2l0Ml9hcGlfaGFybmVzc19TT1VSQ0VTCi0gICAgJHtURVNUV0VCS0lU
QVBJX0RJUn0vZWZsL1BsYXRmb3JtVXRpbGl0aWVzLmNwcAotICAgICR7VEVTVFdFQktJVEFQSV9E
SVJ9L2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCi0pCi0KLWxpc3QoQVBQRU5EIHRlc3Rfd3RmX0xJ
QlJBUklFUwotICAgIFdlYktpdDIKLSkKLQotbGlzdChBUFBFTkQgdGVzdF93ZWJjb3JlX0xJQlJB
UklFUwotICAgIFdlYktpdDIKLSkKLQotbGlzdChBUFBFTkQgVGVzdEphdmFTY3JpcHRDb3JlX0xJ
QlJBUklFUwotICAgIFdlYktpdDIKLSkKLQotIyBUaGUgbGlzdCBiZWxvdyB3b3JrcyBsaWtlIGEg
dGVzdCBleHBlY3RhdGlvbi4gVGVzdHMgaW4gdGhlCi0jIHRlc3Rfe3dlYmtpdDJfYXBpfHdlYmNv
cmV9X0JJTkFSSUVTIGxpc3QgYXJlIGFkZGVkIHRvIHRoZSB0ZXN0IHJ1bm5lciBhbmQKLSMgdHJp
ZWQgb24gdGhlIGJvdHMgb24gZXZlcnkgYnVpbGQuIFRlc3RzIGluIHRlc3Rfe3dlYmtpdDJfYXBp
fHdlYmNvcmV9X0JJTkFSSUVTCi0jIGFyZSBjb21waWxlZCBhbmQgc3VmZml4ZWQgd2l0aCBmYWls
IGFuZCBza2lwcGVkIGZyb20gdGhlIHRlc3QgcnVubmVyLgotIwotIyBNYWtlIHN1cmUgdGhhdCB0
aGUgdGVzdHMgYXJlIHBhc3Npbmcgb24gYm90aCBEZWJ1ZyBhbmQKLSMgUmVsZWFzZSBidWlsZHMg
YmVmb3JlIGFkZGluZyBpdCB0byB0ZXN0X3t3ZWJraXQyX2FwaXx3ZWJjb3JlfV9CSU5BUklFUy4K
LQotc2V0KHRlc3Rfd2ViY29yZV9CSU5BUklFUwotICAgIENTU1BhcnNlcgotICAgIEdyaWRQb3Np
dGlvbgotICAgIEhUTUxQYXJzZXJJZGlvbXMKLSAgICBMYXlvdXRVbml0Ci0gICAgVVJMCi0pCi0K
LSMgSW4gaGVyZSB3ZSBsaXN0IHRoZSBidW5kbGVzIHRoYXQgYXJlIHVzZWQgYnkgb3VyIHNwZWNp
ZmljIFdLMiBBUEkgVGVzdHMKLWxpc3QoQVBQRU5EIGJ1bmRsZV9oYXJuZXNzX1NPVVJDRVMKLSAg
ICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJLaXQyL2VmbC9XS1ZpZXdDbGllbnRXZWJQ
cm9jZXNzQ2FsbGJhY2tzX0J1bmRsZS5jcHAKLSkKLQotc2V0KHRlc3Rfd2Via2l0Ml9hcGlfQklO
QVJJRVMKLSAgICBBYm91dEJsYW5rTG9hZAotICAgIENsb3NlVGhlblRlcm1pbmF0ZQotICAgIENv
b2tpZU1hbmFnZXIKLSAgICBET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlCi0gICAgRGlkQXNzb2Np
YXRlRm9ybUNvbnRyb2xzCi0gICAgRG9jdW1lbnRTdGFydFVzZXJTY3JpcHRBbGVydENyYXNoCi0g
ICAgRXZhbHVhdGVKYXZhU2NyaXB0Ci0gICAgRmFpbGVkTG9hZAotICAgIEZpbmQKLSAgICBGb3Jj
ZVJlcGFpbnQKLSAgICBGcmFtZU1JTUVUeXBlSFRNTAotICAgIEZyYW1lTUlNRVR5cGVQTkcKLSAg
ICBHZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGFDYWxsYmFjawotICAgIEhp
dFRlc3RSZXN1bHROb2RlSGFuZGxlCi0gICAgSW5qZWN0ZWRCdW5kbGVCYXNpYwotICAgIEluamVj
dGVkQnVuZGxlRnJhbWVIaXRUZXN0Ci0gICAgSW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVz
ZXJEYXRhQ2FsbGJhY2tXaW5zCi0gICAgTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmdXaXRoTm9uRGly
ZWN0b3J5VVJMCi0gICAgTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVjdENhbGxiYWNrCi0gICAg
TmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Ci0gICAgTmV3Rmlyc3RWaXN1YWxseU5vbkVt
cHR5TGF5b3V0RmFpbHMKLSAgICBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFn
ZXMKLSAgICBQYWdlTG9hZEJhc2ljCi0gICAgUGFnZUxvYWREaWRDaGFuZ2VMb2NhdGlvbldpdGhp
blBhZ2VGb3JGcmFtZQotICAgIFBhcmVudEZyYW1lCi0gICAgUGVuZGluZ0FQSVJlcXVlc3RVUkwK
LSAgICBQcmV2ZW50RW1wdHlVc2VyQWdlbnQKLSAgICBQcml2YXRlQnJvd3NpbmdQdXNoU3RhdGVO
b0hpc3RvcnlDYWxsYmFjawotICAgIFByb3Zpc2lvbmFsVVJMQWZ0ZXJXaWxsU2VuZFJlcXVlc3RD
YWxsYmFjawotICAgIFJlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRGaXJlRWFybHkKLSAgICBTaG91
bGRHb1RvQmFja0ZvcndhcmRMaXN0SXRlbQotICAgIFRlcm1pbmF0ZVR3aWNlCi0gICAgVGV4dEZp
ZWxkRGlkQmVnaW5BbmRFbmRFZGl0aW5nCi0gICAgV0tQcmVmZXJlbmNlcwotICAgIFdLU3RyaW5n
Ci0gICAgV0tTdHJpbmdKU1N0cmluZwotICAgIFdLVVJMCi0gICAgV2lsbFNlbmRTdWJtaXRFdmVu
dAotCi0gICAgQ29vcmRpbmF0ZWRHcmFwaGljcy9XS1ZpZXdSZXN0b3JlWm9vbUFuZFNjcm9sbEJh
Y2tGb3J3YXJkCi0gICAgQ29vcmRpbmF0ZWRHcmFwaGljcy9XS1ZpZXdVc2VyVmlld3BvcnRUb0Nv
bnRlbnRzCi0KLSAgICBlZmwvV0tWaWV3Q2xpZW50V2ViUHJvY2Vzc0NhbGxiYWNrcwotICAgIGVm
bC9XS1ZpZXdTY3JvbGxUbwotKQotCi1zZXQodGVzdF93ZWJraXQyX2FwaV9mYWlsX0JJTkFSSUVT
Ci0gICAgQ2FuSGFuZGxlUmVxdWVzdAotICAgIERPTVdpbmRvd0V4dGVuc2lvbkJhc2ljCi0gICAg
RG93bmxvYWREZWNpZGVEZXN0aW5hdGlvbkNyYXNoCi0gICAgR2VvbG9jYXRpb24KLSAgICBMb2Fk
UGFnZU9uQ3Jhc2gKLSAgICBNb3VzZU1vdmVBZnRlckNyYXNoCi0gICAgTmV3Rmlyc3RWaXN1YWxs
eU5vbkVtcHR5TGF5b3V0RnJhbWVzCi0gICAgUmVsb2FkUGFnZUFmdGVyQ3Jhc2gKLSAgICBSZXNp
emVSZXZlcnNlUGFnaW5hdGVkV2ViVmlldwotICAgIFJlc2l6ZVdpbmRvd0FmdGVyQ3Jhc2gKLSAg
ICBSZXN0b3JlU2Vzc2lvblN0YXRlQ29udGFpbmluZ0Zvcm1EYXRhCi0gICAgU2Nyb2xsUGlubmlu
Z0JlaGF2aW9ycwotICAgIFVzZXJNZXNzYWdlCi0gICAgV0tQYWdlR2V0U2NhbGVGYWN0b3JOb3Ra
ZXJvCi0gICAgV2lsbExvYWQKLSkKLQotIyBUZXN0cyBkaXNhYmxlZCBiZWNhdXNlIG9mIG1pc3Np
bmcgZmVhdHVyZXMgb24gdGhlIHRlc3QgaGFybmVzczoKLSMKLSMgICBTcGFjZWJhclNjcm9sbGlu
ZwotIyAgIENvb3JkaW5hdGVkR3JhcGhpY3MvV0tWaWV3SXNBY3RpdmVTZXRJc0FjdGl2ZQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKaW5kZXggNjYyMWQ5MmY3ZDQxN2ZmNTVjZmYw
OGYyNThjOWQ2Mzk5ZGM0NzhlNy4uODA1NmQyNjE2MzJhMDg4ZGVmZjBmOTViYTU5NDhhNWRjMzlk
M2U0MiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCkBAIC00Nyw5ICs0Nyw2
IEBAIHR5cGVkZWYgTlNXaW5kb3cgKlBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oR1RL
KQogdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVmIEd0a1dpZGdldCAq
UGxhdGZvcm1XaW5kb3c7Ci0jZWxpZiBQTEFURk9STShFRkwpCi10eXBlZGVmIEV2YXNfT2JqZWN0
KiBQbGF0Zm9ybVdLVmlldzsKLXR5cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1XaW5kb3c7CiAj
ZW5kaWYKIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1dLUHJlZmVyZW5jZXMuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyL1dLUHJlZmVyZW5jZXMuY3BwCmluZGV4IDdmODYxNmY1ZDc0
NzY1NGU5OGM2NjdmNThhMzAyY2U0MGE4YTk1MTQuLjhjZWFjYjAxZjA5YTZhZGQwZGNhZmM2ZTNl
MjgwZDkyY2JiYzIwNWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mi9XS1ByZWZlcmVuY2VzLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDIvV0tQcmVmZXJlbmNlcy5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgVEVTVChXZWJLaXQyLCBX
S1ByZWZlcmVuY2VzQmFzaWMpCiAKIFRFU1QoV2ViS2l0MiwgV0tQcmVmZXJlbmNlc0RlZmF1bHRz
KQogewotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQorI2lmIFBMQVRGT1JNKEdU
SykKICAgICBzdGF0aWMgY29uc3QgY2hhciogZXhwZWN0ZWRTdGFuZGFyZEZvbnRGYW1pbHkgPSAi
VGltZXMiOwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBleHBlY3RlZEZpeGVkRm9udEZhbWlseSA9
ICJDb3VyaWVyIE5ldyI7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGV4cGVjdGVkU2VyaWZGb250
RmFtaWx5ID0gIlRpbWVzIjsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mi9lZmwvV0tWaWV3Q2xpZW50V2ViUHJvY2Vzc0NhbGxiYWNrcy5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvZWZsL1dLVmlld0NsaWVudFdlYlByb2Nlc3NDYWxs
YmFja3MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmFiYWQ0Nzg1M2JhZWFi
NjM1NzRmMWJmY2NhZjEyYjUzZjFmNWE0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9lZmwvV0tW
aWV3Q2xpZW50V2ViUHJvY2Vzc0NhbGxiYWNrcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJld2tfdmlld19wcml2YXRlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNpbmNsdWRlICJUZXN0LmgiCi0jaW5jbHVkZSAi
V0tWaWV3LmgiCi0jaW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+Ci0KLW5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJIHsKLQotc3RydWN0IFRlc3RTdGF0ZXNEYXRhIHsKLSAgICBUZXN0U3RhdGVz
RGF0YShXS1ZpZXdSZWYgdmlldywgV0tVUkxSZWYgdXJsKQotICAgICAgICA6IHZpZXcodmlldykK
LSAgICAgICAgLCB1cmwodXJsKQotICAgICAgICAsIGRpZEZpbmlzaExvYWQoZmFsc2UpCi0gICAg
ICAgICwgZGlkQ3Jhc2goZmFsc2UpCi0gICAgICAgICwgZGlkUmVsYXVuY2goZmFsc2UpCi0gICAg
ewotICAgIH0KLQotICAgIFdLVmlld1JlZiB2aWV3OwotICAgIFdLVVJMUmVmIHVybDsKLSAgICBi
b29sIGRpZEZpbmlzaExvYWQ7Ci0gICAgYm9vbCBkaWRDcmFzaDsKLSAgICBib29sIGRpZFJlbGF1
bmNoOwotfTsKLQotc3RhdGljIHZvaWQgZGlkRmluaXNoTG9hZEZvckZyYW1lKFdLUGFnZVJlZiwg
V0tGcmFtZVJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIFRl
c3RTdGF0ZXNEYXRhKiBzdGF0ZXMgPSBjb25zdF9jYXN0PFRlc3RTdGF0ZXNEYXRhKj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgVGVzdFN0YXRlc0RhdGEqPihjbGllbnRJbmZvKSk7Ci0gICAgc3RhdGVzLT5k
aWRGaW5pc2hMb2FkID0gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgc2V0UGFnZUxvYWRlckNsaWVu
dChXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBXS1BhZ2VM
b2FkZXJDbGllbnRWMyBsb2FkZXJDbGllbnQ7Ci0gICAgbWVtc2V0KCZsb2FkZXJDbGllbnQsIDAs
IHNpemVvZihsb2FkZXJDbGllbnQpKTsKLQotICAgIGxvYWRlckNsaWVudC5iYXNlLnZlcnNpb24g
PSAzOwotICAgIGxvYWRlckNsaWVudC5iYXNlLmNsaWVudEluZm8gPSBjbGllbnRJbmZvOwotICAg
IGxvYWRlckNsaWVudC5kaWRGaW5pc2hMb2FkRm9yRnJhbWUgPSBkaWRGaW5pc2hMb2FkRm9yRnJh
bWU7Ci0KLSAgICBXS1BhZ2VTZXRQYWdlTG9hZGVyQ2xpZW50KHBhZ2UsICZsb2FkZXJDbGllbnQu
YmFzZSk7Ci19Ci0KLXZvaWQgd2ViUHJvY2Vzc0NyYXNoZWQoV0tWaWV3UmVmIHZpZXcsIFdLVVJM
UmVmIHVybCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBUZXN0U3RhdGVzRGF0YSog
c3RhdGVzID0gY29uc3RfY2FzdDxUZXN0U3RhdGVzRGF0YSo+KHN0YXRpY19jYXN0PGNvbnN0IFRl
c3RTdGF0ZXNEYXRhKj4oY2xpZW50SW5mbykpOwotCi0gICAgRVhQRUNUX0VRKHN0YXRlcy0+dmll
dywgdmlldyk7Ci0gICAgRVhQRUNUX1RSVUUoV0tVUkxJc0VxdWFsKHVybCwgc3RhdGVzLT51cmwp
KTsKLQotICAgIHN0YXRlcy0+ZGlkQ3Jhc2ggPSB0cnVlOwotfQotCi12b2lkIHdlYlByb2Nlc3NE
aWRSZWxhdW5jaChXS1ZpZXdSZWYgdmlldywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAg
ICBUZXN0U3RhdGVzRGF0YSogc3RhdGVzID0gY29uc3RfY2FzdDxUZXN0U3RhdGVzRGF0YSo+KHN0
YXRpY19jYXN0PGNvbnN0IFRlc3RTdGF0ZXNEYXRhKj4oY2xpZW50SW5mbykpOwotCi0gICAgRVhQ
RUNUX0VRKHN0YXRlcy0+dmlldywgdmlldyk7Ci0KLSAgICBzdGF0ZXMtPmRpZFJlbGF1bmNoID0g
dHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgc2V0Vmlld0NsaWVudChXS1ZpZXdSZWYgdmlldywgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBXS1ZpZXdDbGllbnRWMCB2aWV3Q2xpZW50Owot
ICAgIG1lbXNldCgmdmlld0NsaWVudCwgMCwgc2l6ZW9mKFdLVmlld0NsaWVudFYwKSk7Ci0KLSAg
ICB2aWV3Q2xpZW50LmJhc2UudmVyc2lvbiA9IDA7Ci0gICAgdmlld0NsaWVudC5iYXNlLmNsaWVu
dEluZm8gPSBjbGllbnRJbmZvOwotICAgIHZpZXdDbGllbnQud2ViUHJvY2Vzc0NyYXNoZWQgPSB3
ZWJQcm9jZXNzQ3Jhc2hlZDsKLSAgICB2aWV3Q2xpZW50LndlYlByb2Nlc3NEaWRSZWxhdW5jaCA9
IHdlYlByb2Nlc3NEaWRSZWxhdW5jaDsKLQotICAgIFdLVmlld1NldFZpZXdDbGllbnQodmlldywg
JnZpZXdDbGllbnQuYmFzZSk7Ci19Ci0KLVRFU1QoV2ViS2l0MiwgV0tWaWV3Q2xpZW50V2ViUHJv
Y2Vzc0NhbGxiYWNrcykKLXsKLSAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRleHQg
PSBhZG9wdFdLKFV0aWw6OmNyZWF0ZUNvbnRleHRGb3JJbmplY3RlZEJ1bmRsZVRlc3QoIldLVmll
d0NsaWVudFdlYlByb2Nlc3NDYWxsYmFja3NUZXN0IikpOwotICAgIFdLUmV0YWluUHRyPFdLVVJM
UmVmPiB1cmwoQWRvcHRXSywgVXRpbDo6Y3JlYXRlVVJMRm9yUmVzb3VyY2UoInNpbXBsZSIsICJo
dG1sIikpOwotCi0gICAgUGxhdGZvcm1XZWJWaWV3IHZpZXcoY29udGV4dC5nZXQoKSk7Ci0gICAg
V0tWaWV3UmVmIHdrVmlldyA9IEVXS1ZpZXdHZXRXS1ZpZXcodmlldy5wbGF0Zm9ybVZpZXcoKSk7
Ci0KLSAgICBUZXN0U3RhdGVzRGF0YSBzdGF0ZXMgPSBUZXN0U3RhdGVzRGF0YSh3a1ZpZXcsIHVy
bC5nZXQoKSk7Ci0KLSAgICBzZXRQYWdlTG9hZGVyQ2xpZW50KHZpZXcucGFnZSgpLCAmc3RhdGVz
KTsKLSAgICBzZXRWaWV3Q2xpZW50KHdrVmlldywgJnN0YXRlcyk7Ci0KLSAgICBXS1BhZ2VMb2Fk
VVJMKHZpZXcucGFnZSgpLCB1cmwuZ2V0KCkpOwotICAgIFV0aWw6OnJ1bigmc3RhdGVzLmRpZEZp
bmlzaExvYWQpOwotCi0gICAgV0tDb250ZXh0UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKGNv
bnRleHQuZ2V0KCksIFV0aWw6OnRvV0soIkNyYXNoIikuZ2V0KCksIDApOwotICAgIFV0aWw6OnJ1
bigmc3RhdGVzLmRpZENyYXNoKTsKLQotICAgIFdLUGFnZVJlbG9hZCh2aWV3LnBhZ2UoKSk7Ci0g
ICAgVXRpbDo6cnVuKCZzdGF0ZXMuZGlkUmVsYXVuY2gpOwotfQotCi19IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDIvZWZsL1dLVmlld0NsaWVudFdlYlByb2Nlc3NDYWxsYmFja3NfQnVuZGxlLmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9lZmwvV0tWaWV3Q2xpZW50V2ViUHJvY2Vzc0Nh
bGxiYWNrc19CdW5kbGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzllMDk2
MTc5ZjgxZTg4ZmRlOTdjMzNiYjk5M2QyZjY1OTIwYTQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mi9lZmwvV0tWaWV3Q2xpZW50V2ViUHJvY2Vzc0NhbGxiYWNrc19CdW5kbGUuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVUZXN0LmgiCi0jaW5jbHVkZSA8
V2ViS2l0L1dLUmV0YWluUHRyLmg+Ci0KLW5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKLQotY2xh
c3MgV0tWaWV3Q2xpZW50V2ViUHJvY2Vzc0NhbGxiYWNrc1Rlc3QgOiBwdWJsaWMgSW5qZWN0ZWRC
dW5kbGVUZXN0IHsKLXB1YmxpYzoKLSAgICBXS1ZpZXdDbGllbnRXZWJQcm9jZXNzQ2FsbGJhY2tz
VGVzdChjb25zdCBzdGQ6OnN0cmluZyYgaWRlbnRpZmllcik7Ci0KLXByaXZhdGU6Ci0gICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKFdLQnVuZGxlUmVmLCBXS1N0cmluZ1JlZiBtZXNz
YWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KTsKLX07Ci0KLXN0YXRpYyBJbmplY3RlZEJ1
bmRsZVRlc3Q6OlJlZ2lzdGVyPFdLVmlld0NsaWVudFdlYlByb2Nlc3NDYWxsYmFja3NUZXN0PiBy
ZWdpc3RyYXIoIldLVmlld0NsaWVudFdlYlByb2Nlc3NDYWxsYmFja3NUZXN0Iik7Ci0KLVdLVmll
d0NsaWVudFdlYlByb2Nlc3NDYWxsYmFja3NUZXN0OjpXS1ZpZXdDbGllbnRXZWJQcm9jZXNzQ2Fs
bGJhY2tzVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgaWRlbnRpZmllcikKLSAgICA6IEluamVjdGVk
QnVuZGxlVGVzdChpZGVudGlmaWVyKQotewotfQotCi12b2lkIFdLVmlld0NsaWVudFdlYlByb2Nl
c3NDYWxsYmFja3NUZXN0OjpkaWRSZWNlaXZlTWVzc2FnZShXS0J1bmRsZVJlZiwgV0tTdHJpbmdS
ZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZikKLXsKLSAgICBpZiAoIVdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDcmFzaCIpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBTaW11bGF0aW5nIGEgY3Jhc2gKLSAgICBhYm9ydCgpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDIvZWZsL1dLVmlld1Njcm9sbFRvLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mi9lZmwvV0tWaWV3U2Nyb2xsVG8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiNTFjODkxYmU4Zjc3NDM5ZGMwNWFiNGViOThmNTEyMDM2NmYyYTZjLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mi9lZmwvV0tWaWV3U2Nyb2xsVG8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtVXRpbGl0aWVz
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW5jbHVkZSA8V2ViS2l0L1dLQ29u
dGV4dC5oPgotI2luY2x1ZGUgPFdlYktpdC9XS1JldGFpblB0ci5oPgotI2luY2x1ZGUgIlRlc3Qu
aCIKLQotbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewotCi1zdGF0aWMgYm9vbCBmaW5pc2hlZExv
YWQgPSBmYWxzZTsKLQotc3RhdGljIHZvaWQgZGlkRmluaXNoTG9hZEZvckZyYW1lKFdLUGFnZVJl
ZiwgV0tGcmFtZVJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKikKLXsKLSAgICBmaW5pc2hlZExv
YWQgPSB0cnVlOwotfQotCi1URVNUKFdlYktpdDIsIFdLVmlld1Njcm9sbFRvKQotewotICAgIFdL
UmV0YWluUHRyPFdLQ29udGV4dFJlZj4gY29udGV4dChBZG9wdFdLLCBXS0NvbnRleHRDcmVhdGUo
KSk7Ci0gICAgUGxhdGZvcm1XZWJWaWV3IHdlYlZpZXcoY29udGV4dC5nZXQoKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tWaWV3UmVmPiB2aWV3ID0gRVdLVmlld0dldFdLVmlldyh3ZWJWaWV3LnBsYXRm
b3JtVmlldygpKTsKLQotICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0KHdlYlZpZXcucGFnZSgp
LCB0cnVlKTsKLQotICAgIFdLUGFnZUxvYWRlckNsaWVudFYwIGxvYWRlckNsaWVudDsKLSAgICBt
ZW1zZXQoJmxvYWRlckNsaWVudCwgMCwgc2l6ZW9mKGxvYWRlckNsaWVudCkpOwotICAgIGxvYWRl
ckNsaWVudC5iYXNlLnZlcnNpb24gPSAwOwotICAgIGxvYWRlckNsaWVudC5kaWRGaW5pc2hMb2Fk
Rm9yRnJhbWUgPSBkaWRGaW5pc2hMb2FkRm9yRnJhbWU7Ci0gICAgV0tQYWdlU2V0UGFnZUxvYWRl
ckNsaWVudCh3ZWJWaWV3LnBhZ2UoKSwgJmxvYWRlckNsaWVudC5iYXNlKTsKLQotICAgIFdLVmll
d0NsaWVudFYwIHZpZXdDbGllbnQ7Ci0gICAgbWVtc2V0KCZ2aWV3Q2xpZW50LCAwLCBzaXplb2Yo
dmlld0NsaWVudCkpOwotICAgIHZpZXdDbGllbnQuYmFzZS52ZXJzaW9uID0gMDsKLSAgICB2aWV3
Q2xpZW50LmRpZENoYW5nZUNvbnRlbnRzUG9zaXRpb24gPSAwOwotICAgIFdLVmlld1NldFZpZXdD
bGllbnQodmlldy5nZXQoKSwgJnZpZXdDbGllbnQuYmFzZSk7Ci0KLSAgICAvLyBMb2FkIHBhZ2Uu
Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybChBZG9wdFdLLCBVdGlsOjpjcmVhdGVVUkxG
b3JSZXNvdXJjZSgiZWZsL3Njcm9sbFRvIiwgImh0bWwiKSk7Ci0gICAgV0tQYWdlTG9hZFVSTCh3
ZWJWaWV3LnBhZ2UoKSwgdXJsLmdldCgpKTsKLSAgICBVdGlsOjpydW4oJmZpbmlzaGVkTG9hZCk7
Ci0KLSAgICBXS1BvaW50IGN1cnJlbnRQYWdlUG9zaXRpb24gPSBXS1ZpZXdHZXRDb250ZW50UG9z
aXRpb24odmlldy5nZXQoKSk7Ci0gICAgRVhQRUNUX0VRKDEwMCwgY3VycmVudFBhZ2VQb3NpdGlv
bi54KTsKLSAgICBFWFBFQ1RfRVEoMzAwLCBjdXJyZW50UGFnZVBvc2l0aW9uLnkpOwotfQotCi19
IC8vIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mi9lZmwvc2Nyb2xsVG8uaHRtbCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mi9lZmwvc2Nyb2xsVG8uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdm
ODhmNzU0OWFjMGVmZTNmMTllZWUwMzg3YTE2MTRiMDAyZTcyNy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDIvZWZsL3Njcm9sbFRvLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTxo
dG1sPgotPGJvZHkgc3R5bGU9IndpZHRoOjIwMDBweDtoZWlnaHQ6MjAwMHB4OyI+Ci1zY3JvbGxU
byBUZXN0Ci08c2NyaXB0Pgotd2luZG93LnNjcm9sbFRvKDEwMCwgMzAwKTsKLTwvc2NyaXB0Pgot
PC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvSW5q
ZWN0ZWRCdW5kbGVDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL0luamVj
dGVkQnVuZGxlQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMy
NDQyYmQxNTA0Mzk3YjlmOTRjMGVlOTEyMTA1MTVlYzg4ZTAzNjYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvSW5q
ZWN0ZWRCdW5kbGVDb250cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlQ29udHJvbGxlci5oIgotCi0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewot
Ci12b2lkIEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKLXsK
LSAgICBXVEZJbnN0YWxsUmVwb3J0QmFja3RyYWNlT25DcmFzaEhvb2soKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9l
ZmwvUGxhdGZvcm1VdGlsaXRpZXMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZv
cm1VdGlsaXRpZXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWM1NGUxYTc4
YjBlODViOTcyZDg3MDI1Y2QzMmMyMjMxYjhlZWM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtVXRp
bGl0aWVzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVV0aWxpdGllcy5o
IgotCi0jaW5jbHVkZSA8RWNvcmUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHVu
aXN0ZC5oPgotCi1uYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0KLW5hbWVzcGFjZSBVdGlsIHsK
LQotdm9pZCBydW4oYm9vbCogZG9uZSkKLXsKLSAgICB3aGlsZSAoISpkb25lKQotICAgICAgICBl
Y29yZV9tYWluX2xvb3BfaXRlcmF0ZSgpOwotfQotCi12b2lkIHNsZWVwKGRvdWJsZSBzZWNvbmRz
KQotewotICAgIHVzbGVlcChzZWNvbmRzICogMTAwMDAwMCk7Ci19Ci0KLVdLVVJMUmVmIGNyZWF0
ZVVSTEZvclJlc291cmNlKGNvbnN0IGNoYXIqIHJlc291cmNlLCBjb25zdCBjaGFyKiBleHRlbnNp
b24pCi17Ci0gICAgY2hhciB1cmxbUEFUSF9NQVhdOwotCi0gICAgc25wcmludGYodXJsLCBzaXpl
b2YodXJsKSwgImZpbGU6Ly8lcy8lcy4lcyIsIFRFU1RfV0VCS0lUMl9SRVNPVVJDRVNfRElSLCBy
ZXNvdXJjZSwgZXh0ZW5zaW9uKTsKLQotICAgIHJldHVybiBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0
cmluZyh1cmwpOwotfQotCi1XS1N0cmluZ1JlZiBjcmVhdGVJbmplY3RlZEJ1bmRsZVBhdGgoKQot
ewotICAgIHJldHVybiBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhURVNUX0lOSkVDVEVE
X0JVTkRMRV9QQVRIKTsKLX0KLQotV0tVUkxSZWYgVVJMRm9yTm9uRXhpc3RlbnRSZXNvdXJjZSgp
Ci17Ci0gICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJmaWxlOi8vL2RvZXMt
bm90LWV4aXN0Lmh0bWwiKTsKLX0KLQotV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IE1JTUVUeXBl
Rm9yV0tVUkxSZXNwb25zZShXS1VSTFJlc3BvbnNlUmVmIHdrUmVzcG9uc2UpCi17Ci0gICAgcmV0
dXJuIGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlNSU1FVHlwZSh3a1Jlc3BvbnNlKSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFV0aWwKLQotfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDRjNzEzNDI5OTRjMmM4Njg3ZWEzZTE5Njg4MDgyMGQ1ZjJiNzYzMzQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEy
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IFNhbXN1bmcgRWxlY3Ry
b25pY3MKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAi
ZXdrX21haW4uaCIKLSNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1XZWJWaWV3LmgiCi0jaW5jbHVkZSAiRVdlYktpdDIuaCIKLSNpbmNsdWRlIDxXZWJLaXQv
V0tBUElDYXN0Lmg+Ci0jaW5jbHVkZSA8V2ViS2l0L1dLUGFnZUNvbmZpZ3VyYXRpb25SZWYuaD4K
LSNpbmNsdWRlIDxXZWJLaXQvV0tSZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxXZWJLaXQvV0tWaWV3
RWZsLmg+Ci0jaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgotCi1leHRlcm4gYm9vbCB1c2VYMTFXaW5k
b3c7Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLW5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
IHsKLQotc3RhdGljIEVjb3JlX0V2YXMqIGNyZWF0ZUVjb3JlRXZhcygpCi17Ci0gICAgRWNvcmVf
RXZhcyogZWNvcmVFdmFzOwotI2lmIGRlZmluZWQoSEFWRV9FQ09SRV9YKQotICAgIGVjb3JlRXZh
cyA9IGVjb3JlX2V2YXNfbmV3KCJvcGVuZ2xfeDExIiwgMCwgMCwgODAwLCA2MDAsIDApOwotICAg
IC8vIEdyYWNlZnVsIGZhbGxiYWNrIHRvIHNvZnR3YXJlIHJlbmRlcmluZyBpZiBldmFzX2dsIGVu
Z2luZSBpcyBub3QgYXZhaWxhYmxlLgotICAgIGlmICghZWNvcmVFdmFzKQotI2VuZGlmCi0gICAg
ZWNvcmVFdmFzID0gZWNvcmVfZXZhc19uZXcoMCwgMCwgMCwgODAwLCA2MDAsIDApOwotCi0gICAg
QVNTRVJUKGVjb3JlRXZhcyk7Ci0KLSAgICBlY29yZV9ldmFzX3Nob3coZWNvcmVFdmFzKTsKLQot
ICAgIHJldHVybiBlY29yZUV2YXM7Ci19Ci0KLXN0YXRpYyB2b2lkIG9uV2ViUHJvY2Vzc0NyYXNo
ZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQotewotICAgIGJvb2wqIGhh
bmRsZWQgPSBzdGF0aWNfY2FzdDxib29sKj4oZXZlbnRJbmZvKTsKLSAgICAqaGFuZGxlZCA9IHRy
dWU7Ci19Ci0KLVBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCi17Ci0gICAgbV93aW5kb3cg
PSBjcmVhdGVFY29yZUV2YXMoKTsKLQotICAgIFdLUmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRp
b25SZWY+IHBhZ2VDb25maWd1cmF0aW9uID0gYWRvcHRXSyhXS1BhZ2VDb25maWd1cmF0aW9uQ3Jl
YXRlKCkpOwotICAgIFdLUGFnZUNvbmZpZ3VyYXRpb25TZXRDb250ZXh0KHBhZ2VDb25maWd1cmF0
aW9uLmdldCgpLCBjb250ZXh0UmVmKTsKLSAgICBXS1BhZ2VDb25maWd1cmF0aW9uU2V0UGFnZUdy
b3VwKHBhZ2VDb25maWd1cmF0aW9uLmdldCgpLCBwYWdlR3JvdXBSZWYpOwotCi0gICAgbV92aWV3
ID0gRVdLVmlld0NyZWF0ZShwYWdlQ29uZmlndXJhdGlvbi5nZXQoKSwgZWNvcmVfZXZhc19nZXQo
bV93aW5kb3cpLCAvKiBzbWFydCAqLyAwKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB3a1RoZW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhERUZBVUxU
X1RIRU1FX0RJUiAiL2RlZmF1bHQuZWRqIikpOwotICAgIFdLVmlld1NldFRoZW1lUGF0aChFV0tW
aWV3R2V0V0tWaWV3KG1fdmlldyksIHdrVGhlbWUuZ2V0KCkpOwotCi0gICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfYWRkKG1fdmlldywgIndlYnByb2Nlc3MsY3Jhc2hlZCIsIG9uV2ViUHJv
Y2Vzc0NyYXNoZWQsIDApOwotICAgIHJlc2l6ZVRvKDYwMCwgODAwKTsKLX0KLQotUGxhdGZvcm1X
ZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKLXsKLSAgICBldmFzX29iamVjdF9kZWwobV92aWV3
KTsKLQotICAgIGVjb3JlX2V2YXNfZnJlZShtX3dpbmRvdyk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1X
ZWJWaWV3OjpyZXNpemVUbyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQotewotICAg
IGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3ZpZXcsIHdpZHRoLCBoZWlnaHQpOwotfQotCi1XS1BhZ2VS
ZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV0tWaWV3R2V0
UGFnZShFV0tWaWV3R2V0V0tWaWV3KG1fdmlldykpOwotfQotCi12b2lkIFBsYXRmb3JtV2ViVmll
dzo6c2ltdWxhdGVTcGFjZWJhcktleVByZXNzKCkKLXsKLSAgICBFdmFzKiBldmFzID0gZXZhc19v
YmplY3RfZXZhc19nZXQobV92aWV3KTsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV92aWV3
LCB0cnVlKTsKLSAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X2Rvd24oZXZhcywgInNwYWNlIiwgInNw
YWNlIiwgIiAiLCAwLCAwLCAwKTsKLSAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X3VwKGV2YXMsICJz
cGFjZSIsICJzcGFjZSIsICIgIiwgMCwgMSwgMCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1XZWJWaWV3
OjpzaW11bGF0ZU1vdXNlTW92ZSh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5KQotewotICAgIEV2YXMq
IGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3ZpZXcpOwotICAgIGV2YXNfb2JqZWN0X3No
b3cobV92aWV3KTsKLSAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfbW92ZShldmFzLCB4LCB5LCAw
LCAwKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlUmlnaHRDbGljayh1bnNp
Z25lZCB4LCB1bnNpZ25lZCB5KQotewotICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFz
X2dldChtX3ZpZXcpOwotICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKLSAgICBldmFzX2V2
ZW50X2ZlZWRfbW91c2VfbW92ZShldmFzLCB4LCB5LCAwLCAwKTsKLSAgICBldmFzX2V2ZW50X2Zl
ZWRfbW91c2VfZG93bihldmFzLCAzLCBFVkFTX0JVVFRPTl9OT05FLCAwLCAwKTsKLSAgICBldmFz
X2V2ZW50X2ZlZWRfbW91c2VfdXAoZXZhcywgMywgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvZWZsL21haW4uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvbWFpbi5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMDJiYzdiNWY4MTFlNDQyMTI3ZDgyZGJk
MGU4MjY3MDdhODIxNmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvbWFpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3Rz
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgPGdldG9wdC5oPgotI2luY2x1ZGUgPEVXZWJLaXQyLmg+
Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotYm9vbCB1c2VYMTFXaW5kb3cgPSBmYWxz
ZTsKLQotc3RhdGljIGJvb2wgY2hlY2tGb3JVc2VYMTFXaW5kb3dBcmd1bWVudChpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCi17Ci0gICAgaW50IGhhc1VzZVgxMVdpbmRvdyA9IDA7Ci0KLSAgICBzdGF0
aWMgY29uc3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKLSAgICAgICAgeyJ1c2VYMTFXaW5kb3ciLCBu
b19hcmd1bWVudCwgJmhhc1VzZVgxMVdpbmRvdywgMX0sCi0gICAgICAgIHswLCAwLCAwLCAwfQot
ICAgIH07Ci0KLSAgICB3aGlsZSAoZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIiIsIG9wdGlvbnMs
IDApICE9IC0xKSB7IH0KLQotICAgIHJldHVybiBoYXNVc2VYMTFXaW5kb3c7Ci19Ci0KLWludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBXVEZJbnN0YWxsUmVwb3J0QmFja3Ry
YWNlT25DcmFzaEhvb2soKTsKLSAgICBzZXRlbnYoIldFQktJVF9FWEVDX1BBVEgiLCBXRUJLSVRf
RVhFQ19QQVRILCBmYWxzZSk7Ci0KLSAgICBpZiAoIWV3a19pbml0KCkpCi0gICAgICAgIHJldHVy
biBFWElUX0ZBSUxVUkU7Ci0KLSAgICB1c2VYMTFXaW5kb3cgPSBjaGVja0ZvclVzZVgxMVdpbmRv
d0FyZ3VtZW50KGFyZ2MsIGFyZ3YpOwotCi0gICAgaW50IHJldHVybkNvZGUgPSBUZXN0V2ViS2l0
QVBJOjpUZXN0c0NvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJ1bihhcmdjLCBhcmd2KSA/IEVYSVRf
U1VDQ0VTUyA6IEVYSVRfRkFJTFVSRTsKLQotICAgIGV3a19zaHV0ZG93bigpOwotCi0gICAgcmV0
dXJuIHJldHVybkNvZGU7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2
ZW50U2VuZGVyUHJveHkuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94
eS5oCmluZGV4IDI0ZjI3YjI4OTE3YzBlMzRjYjdkZWI3MzY5NTkwMzc3YmE3YmVkNjEuLjNlMTIx
YWQ1MWJjZjI0ODZkNTNhNzI4ODhhZWY0ODNhNzZjYWVlNDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oCkBAIC0zNiw4ICszNiw2IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9HVW5pcXVlUHRyR3RrLmg+CiAjaW5jbHVkZSA8Z2RrL2dkay5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+Ci0jZWxpZiBQTEFURk9STShFRkwpCi0jaW5jbHVkZSAiRVdlYktpdDIuaCIK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC01MCw4ICs0OCw2IEBAIGNsYXNzIFRl
c3RDb250cm9sbGVyOwogCiAjaWYgUExBVEZPUk0oR1RLKQogc3RydWN0IFdUUkV2ZW50UXVldWVJ
dGVtOwotI2VsaWYgUExBVEZPUk0oRUZMKQotc3RydWN0IFdUUkV2ZW50OwogI2VuZGlmCiAKIGNs
YXNzIEV2ZW50U2VuZGVyUHJveHkgewpAQCAtOTgsNyArOTQsNyBAQCBwcml2YXRlOgogICAgIGRv
dWJsZSBjdXJyZW50RXZlbnRUaW1lKCkgeyByZXR1cm4gbV90aW1lOyB9CiAgICAgdm9pZCB1cGRh
dGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24pOwogCi0jaWYgUExBVEZPUk0oR1RLKSB8
fCBQTEFURk9STShFRkwpCisjaWYgUExBVEZPUk0oR1RLKQogICAgIHZvaWQgcmVwbGF5U2F2ZWRF
dmVudHMoKTsKICNlbmRpZgogCkBAIC0xMTYsMTIgKzExMiw2IEBAIHByaXZhdGU6CiAgICAgR2Rr
RXZlbnQqIGNyZWF0ZU1vdXNlQnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBlLCB1bnNpZ25lZCBidXR0
b24sIFdLRXZlbnRNb2RpZmllcnMpOwogICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGNyZWF0ZVRv
dWNoRXZlbnQoR2RrRXZlbnRUeXBlLCBpbnQgaWQpOwogICAgIHZvaWQgc2VuZFVwZGF0ZWRUb3Vj
aEV2ZW50cygpOwotI2VsaWYgUExBVEZPUk0oRUZMKQotICAgIHZvaWQgc2VuZE9yUXVldWVFdmVu
dChjb25zdCBXVFJFdmVudCYpOwotICAgIHZvaWQgZGlzcGF0Y2hFdmVudChjb25zdCBXVFJFdmVu
dCYpOwotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgdm9pZCBzZW5kVG91Y2hFdmVudChF
d2tfVG91Y2hfRXZlbnRfVHlwZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgZG91YmxlIG1fdGlt
ZTsKQEAgLTEzOCwxMiArMTI4LDYgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX21vdXNlQnV0
dG9uQ3VycmVudGx5RG93bjsKICAgICBWZWN0b3I8R1VuaXF1ZVB0cjxHZGtFdmVudD4+IG1fdG91
Y2hFdmVudHM7CiAgICAgSGFzaFNldDxpbnQ+IG1fdXBkYXRlZFRvdWNoRXZlbnRzOwotI2VsaWYg
UExBVEZPUk0oRUZMKQotICAgIERlcXVlPFdUUkV2ZW50PiBtX2V2ZW50UXVldWU7Ci0gICAgV0tF
dmVudE1vdXNlQnV0dG9uIG1fbW91c2VCdXR0b247Ci0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
LSAgICBFaW5hX0xpc3QqIG1fdG91Y2hQb2ludHM7Ci0jZW5kaWYKICNlbmRpZgogfTsKIApkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAppbmRleCAwYTEzMGQ0ZThkZDNlOGY0Y2MzMTdh
MzUzNjJkNzdlNTc2YzRjMWYxLi41ZjM5NWJlNzM1ZWE1MDIwN2UzY2Y0ZmI1MmI0NzRhZjkyNGYz
OTQyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcApAQCAtNzEsNyArNzEsNyBA
QCBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbmhhbmNlZEFjY2Vzc2liaWxpdHlFbmFi
bGVkKCkKICAgICByZXR1cm4gV0tBY2Nlc3NpYmlsaXR5RW5oYW5jZWRBY2Nlc3NpYmlsaXR5RW5h
YmxlZCgpOwogfQogCi0jaWYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKEVGTCkKKyNpZiAh
UExBVEZPUk0oR1RLKQogUmVmPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpyb290RWxlbWVudCgpCiB7CiAgICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CkBAIC05NSw3ICs5NSw3
IEBAIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6ZWxlbWVudEF0UG9pbnQoaW50IHgsIGluCiAgICAgcmV0dXJuIHVpRWxlbWVudC0+ZWxlbWVu
dEF0UG9pbnQoeCwgeSk7CiB9CiAKLSNpZiAhSEFWRShBQ0NFU1NJQklMSVRZKSAmJiAoUExBVEZP
Uk0oR1RLKSB8fCBQTEFURk9STShFRkwpKQorI2lmICFIQVZFKEFDQ0VTU0lCSUxJVFkpICYmIFBM
QVRGT1JNKEdUSykKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6cm9vdEVsZW1lbnQoKSB7IHJldHVybiBudWxscHRyOyB9CiBSZWZQdHI8QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVt
ZW50KCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmgKaW5kZXggNWNmMGQ3MzljMWVkMDQ5ZTA5NWFjM2Q3ZTgxNGFiYmYxNTNmNWRlYi4uZWNk
ZjVhMGY3MmY0ZDM0Mjk2NWI1NmM3ODU4YmJhY2IxOTk5NWZiMyAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5o
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuaApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkpTV3JhcHBhYmxlLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KICNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKKyNpZiBQTEFU
Rk9STShHVEspCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsu
aCIKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAppbmRleCAyMzNmZjdk
MjAzNDQ2NzU4ZGE3OGRmOGYyNGMxODllNTMyOTFmODE3Li4wMjY0MGJlNzYxODFkYzhhYzY5Njlh
N2EwYTVjMjI3YThlMGUzNjM3IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKQEAg
LTc4LDcgKzc4LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1RleHRBcmVhKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogICAgIAogLy8gVW5zdXBwb3J0ZWQgbWV0
aG9kcyBvbiB2YXJpb3VzIHBsYXRmb3Jtcy4gQXMgdGhleSdyZSBpbXBsZW1lbnRlZCBvbiBvdGhl
ciBwbGF0Zm9ybXMgdGhpcyBsaXN0IHNob3VsZCBiZSBtb2RpZmllZC4KLSNpZiAoIVBMQVRGT1JN
KEdUSykgJiYgIVBMQVRGT1JNKEVGTCkpIHx8ICFIQVZFKEFDQ0VTU0lCSUxJVFkpCisjaWYgIVBM
QVRGT1JNKEdUSykgfHwgIUhBVkUoQUNDRVNTSUJJTElUWSkKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGFyYWN0ZXJBdE9mZnNldChpbnQpIHsgcmV0
dXJuIG51bGxwdHI7IH0KIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp3b3JkQXRPZmZzZXQoaW50KSB7IHJldHVybiBudWxscHRyOyB9CiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGluZUF0T2Zmc2V0KGludCkg
eyByZXR1cm4gbnVsbHB0cjsgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmggYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAppbmRleCA1NTA5
YWYyMTc3ZDVkMDNhZTY0MWU2Njk1YWRiNDI3NzYzZDU3NGQyLi5kMTBlZThiYmQxYTIzZTk0ZmMx
ZWE1OGU2ZWM0YzNkNjRjMTEyYWJhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAt
NDAsNyArNDAsNyBAQCB0eXBlZGVmIGlkIFBsYXRmb3JtVUlFbGVtZW50OwogI2Vsc2UKIHR5cGVk
ZWYgc3RydWN0IG9iamNfb2JqZWN0KiBQbGF0Zm9ybVVJRWxlbWVudDsKICNlbmRpZgotI2VsaWYg
SEFWRShBQ0NFU1NJQklMSVRZKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpKQor
I2VsaWYgSEFWRShBQ0NFU1NJQklMSVRZKSAmJiBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsuaCIKICNpbmNsdWRlIDxhdGsvYXRrLmg+
CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgpAQCAtMzE3LDEyICszMTcsMTIgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGdldFVJRWxlbWVudHNXaXRoQXR0cmlidXRlKEpTU3RyaW5nUmVmLCBW
ZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4mKSBjb25zdDsKICNlbmRpZgog
Ci0jaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQor
I2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgdm9pZCBnZXRDaGlsZHJl
bihWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4mKTsKICAgICB2b2lkIGdl
dENoaWxkcmVuV2l0aFJhbmdlKFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4g
PiYsIHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpOwogI2VuZGlmCiAKLSNpZiBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKKyNpZiBQTEFURk9STShHVEspCiAgICAgUmVm
UHRyPEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyPiBtX25vdGlmaWNhdGlvbkhhbmRs
ZXI7CiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAKaW5kZXgg
OWEwZmY2NTdmMDUyM2Q2ZDMxYWIwNTQ5OWNjMWYyMTk0NTZjODM1ZC4uMzlhNDExODgzODI5YjBm
ZDY5MzU5YWEyNTk5ZTU3ZWZkNDdhMzFlOSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIu
Y3BwCkBAIC01MTUsNyArNTE1LDcgQEAgSlNWYWx1ZVJlZiBFdmVudFNlbmRpbmdDb250cm9sbGVy
Ojpjb250ZXh0Q2xpY2soKQogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5k
bGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAjaWYgRU5BQkxFKENP
TlRFWFRfTUVOVVMpCi0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCisjaWYgUExB
VEZPUk0oR1RLKQogICAgIC8vIERvIG1vdXNlIGNvbnRleHQgY2xpY2suCiAgICAgbW91c2VEb3du
KDIsIDApOwogICAgIG1vdXNlVXAoMiwgMCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCmluZGV4IDhkYzg5Y2EzMTVlODU0OWZkOTAz
NDIxODliMWMyNTkwZmNjNzlhYTMuLjg1MDJjZDJmNDVhNWE3YjVmOGUzY2ViZWViODMwM2RhODM5
MTJjNjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5oCkBAIC00NCw4ICs0NCw2IEBAIG5hbWVzcGFjZSBXVFIgewogY2xhc3MgVGVz
dFJ1bm5lcjsKIHR5cGVkZWYgUnVuTG9vcDo6VGltZXI8VGVzdFJ1bm5lcj4gUGxhdGZvcm1UaW1l
clJlZjsKIH0KLSNlbGlmIFBMQVRGT1JNKEVGTCkKLXR5cGVkZWYgRWNvcmVfVGltZXIqIFBsYXRm
b3JtVGltZXJSZWY7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdUUiB7CmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlckF0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlckF0ay5jcHAKaW5kZXggYmIy
MjgwODc3MTM5Y2U3ZTlkN2NiNGRiNGFlNjBkM2E4YjY4ZTNiOS4uNGFkNzAzNGI0MDQ3NmY2OTgy
YjI2NDM2YjJlNWE5YTk1OGNkZDc3YiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsu
Y3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyQXRrLmNwcApAQCAtNTQsNyArNTQsNyBAQCBnYm9v
bGVhbiBheE9iamVjdEV2ZW50TGlzdGVuZXIoR1NpZ25hbEludm9jYXRpb25IaW50KiBzaWduYWxI
aW50LCB1bnNpZ25lZCBudW1QYQogICAgIGlmICghYWNjZXNzaWJsZSB8fCAhQVRLX0lTX09CSkVD
VChhY2Nlc3NpYmxlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSNpZiBQTEFURk9STShHVEsp
IHx8IFBMQVRGT1JNKEVGTCkKKyNpZiBQTEFURk9STShHVEspCiAgICAgV0tCdW5kbGVQYWdlUmVm
IHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAg
V0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFn
ZSk7CiAgICAgSlNDb250ZXh0UmVmIGpzQ29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2Ny
aXB0Q29udGV4dChtYWluRnJhbWUpOwpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgQWNjZXNzaWJp
bGl0eU5vdGlmaWNhdGlvbkhhbmRsZXI6OnNldE5vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2so
SlNWYWx1ZVJlCiAKICAgICBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2sgPSBub3RpZmlj
YXRpb25GdW5jdGlvbkNhbGxiYWNrOwogCi0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShF
RkwpCisjaWYgUExBVEZPUk0oR1RLKQogICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVS
ZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29u
dGV4dFJlZiBqc0NvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFp
bkZyYW1lKTsKQEAgLTE4NCw3ICsxODQsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25IYW5kbGVyOjpzZXROb3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKEpTVmFsdWVSZQogCiB2
b2lkIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyOjpyZW1vdmVBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlcigpCiB7Ci0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShF
RkwpCisjaWYgUExBVEZPUk0oR1RLKQogICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVS
ZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29u
dGV4dFJlZiBqc0NvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFp
bkZyYW1lKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvZWZsL0FjdGl2YXRlRm9udHNFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9lZmwvQWN0aXZhdGVGb250c0VmbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDc3ODVmNzc5OWI3MDQ5YjE0NGMzY2I5N2M1ZWY5OWYzNTM0OTNhMmEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9lZmwvQWN0aXZhdGVGb250c0VmbC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcg
RWxlY3Ryb25pY3MKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFjdGl2YXRlRm9udHMu
aCIKLQotI2luY2x1ZGUgIkZvbnRNYW5hZ2VtZW50LmgiCi0KLW5hbWVzcGFjZSBXVFIgewotCi12
b2lkIGFjdGl2YXRlRm9udHMoKQotewotICAgIGFkZEZvbnRzVG9FbnZpcm9ubWVudCgpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvZWZsL0ZvbnRNYW5hZ2VtZW50LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvZWZsL0ZvbnRNYW5hZ2VtZW50LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggM2ZmM2YwODFlOThhOTNmYTFjOTRlMTFhNTNmMTAxZWQxYmEyMjA3
Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2VmbC9Gb250TWFuYWdlbWVudC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBQ
cm9GVVNJT04gRW1iZWRkZWQgU3lzdGVtcwotICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcg
RWxlY3Ryb25pY3MKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJGb250TWFuYWdlbWVudC5oIgotCi0jaW5jbHVkZSA8RWNvcmVfRmlsZS5oPgotI2luY2x1
ZGUgPGNzdGRpbz4KLSNpbmNsdWRlIDxmb250Y29uZmlnL2ZvbnRjb25maWcuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotc3RhdGljIENTdHJpbmcgYnVpbGRQYXRoKGNv
bnN0IGNoYXIqIGJhc2UsIGNvbnN0IGNoYXIqIGZpcnN0LCAuLi4pCi17Ci0gICAgdmFfbGlzdCBh
cDsKLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kKGJhc2UpOwot
Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGN1cnJlbnQgPSBmaXJzdCkgewotICAgICAgICB2YV9zdGFy
dChhcCwgZmlyc3QpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcv
Jyk7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGN1cnJlbnQpOwotICAgICAgICB9IHdoaWxl
ICgoY3VycmVudCA9IHZhX2FyZyhhcCwgY29uc3QgY2hhciopKSk7Ci0gICAgICAgIHZhX2VuZChh
cCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpLnV0ZjgoKTsKLX0KLQot
c3RhdGljIFZlY3RvcjxDU3RyaW5nPiBnZXRDb3JlRm9udEZpbGVzKCkKLXsKLSAgICBWZWN0b3I8
Q1N0cmluZz4gZm9udEZpbGVQYXRoczsKLQotICAgIC8vIEFoZW0gaXMgdXNlZCBieSBtYW55IGxh
eW91dCB0ZXN0cy4KLSAgICBmb250RmlsZVBhdGhzLmFwcGVuZChDU3RyaW5nKEZPTlRTX0NPTkZf
RElSICIvQUhFTV9fX18uVFRGIikpOwotICAgIC8vIEEgZm9udCB3aXRoIG5vIHZhbGlkIEZvbnRj
b25maWcgZW5jb2RpbmcgdG8gdGVzdCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDc0NTIKLSAgICBmb250RmlsZVBhdGhzLmFwcGVuZChDU3RyaW5nKEZPTlRTX0NPTkZf
RElSICIvRm9udFdpdGhOb1ZhbGlkRW5jb2RpbmcuZm9uIikpOwotCi0gICAgZm9yIChpbnQgaSA9
IDE7IGkgPD0gOTsgaSsrKSB7Ci0gICAgICAgIGNoYXIgZm9udFBhdGhbRUlOQV9QQVRIX01BWF07
Ci0gICAgICAgIHNucHJpbnRmKGZvbnRQYXRoLCBFSU5BX1BBVEhfTUFYIC0gMSwgRk9OVFNfQ09O
Rl9ESVIgIi8uLi8uLi9mb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyJWkwMC50dGYiLCBpKTsKLSAg
ICAgICAgZm9udEZpbGVQYXRocy5hcHBlbmQoQ1N0cmluZyhmb250UGF0aCkpOwotICAgIH0KLQot
ICAgIHJldHVybiBmb250RmlsZVBhdGhzOwotfQotCi1zdGF0aWMgdm9pZCBhZGRGb250RGlyZWN0
b3J5KGNvbnN0IENTdHJpbmcmIGZvbnREaXJlY3RvcnksIEZjQ29uZmlnKiBjb25maWcpCi17Ci0g
ICAgY29uc3QgY2hhciogZm9udFBhdGggPSBmb250RGlyZWN0b3J5LmRhdGEoKTsKLSAgICBpZiAo
IWZvbnRQYXRoIHx8ICFGY0NvbmZpZ0FwcEZvbnRBZGREaXIoY29uZmlnLCByZWludGVycHJldF9j
YXN0PGNvbnN0IEZjQ2hhcjgqPihmb250UGF0aCkpKQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkNvdWxkIG5vdCBhZGQgZm9udCBkaXJlY3RvcnkgJXMhXG4iLCBmb250UGF0aCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGFkZEZvbnRGaWxlcyhjb25zdCBWZWN0b3I8Q1N0cmluZz4mIGZvbnRGaWxlcywg
RmNDb25maWcqIGNvbmZpZykKLXsKLSAgICBWZWN0b3I8Q1N0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGl0LCBlbmQgPSBmb250RmlsZXMuZW5kKCk7Ci0gICAgZm9yIChpdCA9IGZvbnRGaWxlcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgY2hhciogZmlsZVBhdGggPSAo
Kml0KS5kYXRhKCk7Ci0gICAgICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShjb25maWcs
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZpbGVQYXRoKSkpCi0gICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBsb2FkIGZvbnQgYXQgJXMhXG4iLCBmaWxlUGF0
aCk7Ci0gICAgfQotfQotCi1zdGF0aWMgQ1N0cmluZyBnZXRDdXN0b21CdWlsZERpcigpCi17Ci0g
ICAgaWYgKGNvbnN0IGNoYXIqIHVzZXJDaG9zZW5CdWlsZERpciA9IGdldGVudigiV0VCS0lUX09V
VFBVVERJUiIpKSB7Ci0gICAgICAgIGlmIChlY29yZV9maWxlX2lzX2Rpcih1c2VyQ2hvc2VuQnVp
bGREaXIpKQotICAgICAgICAgICAgcmV0dXJuIHVzZXJDaG9zZW5CdWlsZERpcjsKLSAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJXRUJLSVRfT1VUUFVURElSIHNldCB0byAnJXMnLCBidXQgcGF0aCBk
b2Vzbid0IGV4aXN0LlxuIiwgdXNlckNob3NlbkJ1aWxkRGlyKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gQ1N0cmluZygpOwotfQotCi1zdGF0aWMgQ1N0cmluZyBnZXRQbGF0Zm9ybUZvbnRzUGF0aCgp
Ci17Ci0gICAgQ1N0cmluZyBjdXN0b21CdWlsZERpciA9IGdldEN1c3RvbUJ1aWxkRGlyKCk7Ci0g
ICAgaWYgKCFjdXN0b21CdWlsZERpci5pc051bGwoKSkgewotICAgICAgICBDU3RyaW5nIGZvbnRz
UGF0aCA9IGJ1aWxkUGF0aChjdXN0b21CdWlsZERpci5kYXRhKCksICJEZXBlbmRlbmNpZXNFRkwi
LCAiUm9vdCIsICJ3ZWJraXRndGstdGVzdC1mb250cyIsIDApOwotICAgICAgICBpZiAoIWVjb3Jl
X2ZpbGVfZXhpc3RzKGZvbnRzUGF0aC5kYXRhKCkpKQotICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICJXRUJLSVRfT1VUUFVURElSIHNldCB0byAnJXMnLCBidXQgY291bGQgbm90IGxvY2FsIHRl
c3QgZm9udHMuXG4iLCBjdXN0b21CdWlsZERpci5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZm9u
dHNQYXRoOwotICAgIH0KLQotICAgIENTdHJpbmcgZm9udHNQYXRoID0gQ1N0cmluZyhET1dOTE9B
REVEX0ZPTlRTX0RJUik7Ci0gICAgaWYgKGVjb3JlX2ZpbGVfZXhpc3RzKGZvbnRzUGF0aC5kYXRh
KCkpKQotICAgICAgICByZXR1cm4gZm9udHNQYXRoOwotCi0gICAgZnByaW50ZihzdGRlcnIsICJD
b3VsZCBub3QgbG9jYXRlIHRlc3RzIGZvbnRzLCB0cnkgc2V0dGluZyBXRUJLSVRfT1VUUFVURElS
LlxuIik7Ci0gICAgcmV0dXJuIENTdHJpbmcoKTsKLX0KLQotdm9pZCBhZGRGb250c1RvRW52aXJv
bm1lbnQoKQotewotICAgIEZjSW5pdCgpOwotCi0gICAgLy8gTG9hZCBvdXIgY29uZmlndXJhdGlv
biBmaWxlLCB3aGljaCBzZXRzIHVwIHByb3BlciBhbGlhc2VzIGZvciBmYW1pbHkKLSAgICAvLyBu
YW1lcyBsaWtlIHNhbnMsIHNlcmlmIGFuZCBtb25vc3BhY2UuCi0gICAgRmNDb25maWcqIGNvbmZp
ZyA9IEZjQ29uZmlnQ3JlYXRlKCk7Ci0gICAgY29uc3QgY2hhciogZm9udENvbmZpZ0ZpbGVuYW1l
ID0gRk9OVFNfQ09ORl9ESVIgIi9mb250cy5jb25mIjsKLSAgICBpZiAoIUZjQ29uZmlnUGFyc2VB
bmRMb2FkKGNvbmZpZywgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4oZm9udENvbmZp
Z0ZpbGVuYW1lKSwgdHJ1ZSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBs
b2FkIGZvbnQgY29uZmlndXJhdGlvbiBmaWxlIGZyb206ICVzXG4iLCBmb250Q29uZmlnRmlsZW5h
bWUpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLQotICAgIGFkZEZvbnRGaWxlcyhnZXRDb3Jl
Rm9udEZpbGVzKCksIGNvbmZpZyk7Ci0gICAgYWRkRm9udERpcmVjdG9yeShnZXRQbGF0Zm9ybUZv
bnRzUGF0aCgpLCBjb25maWcpOwotCi0gICAgaWYgKCFGY0NvbmZpZ1NldEN1cnJlbnQoY29uZmln
KSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBzZXQgdGhlIGN1cnJlbnQg
Zm9udCBjb25maWd1cmF0aW9uIVxuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotfQotCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2VmbC9Gb250
TWFuYWdlbWVudC5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9lZmwv
Rm9udE1hbmFnZW1lbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ5NzUxM2Fl
ZGMxMzk5ZjQ2ZmMwYjkxZGQ0ZjQyODU1N2Q3NDFhMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2VmbC9Gb250TWFuYWdlbWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gRW1iZWRkZWQgU3lzdGVtcwotICog
Q29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgRm9udE1hbmFnZW1lbnRfaAotI2RlZmluZSBGb250TWFuYWdlbWVudF9oCi0KLXZvaWQgYWRk
Rm9udHNUb0Vudmlyb25tZW50KCk7Ci0KLSNlbmRpZiAvLyBGb250TWFuYWdlbWVudF9oCmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2VmbC9JbmplY3Rl
ZEJ1bmRsZUVmbC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2Vm
bC9JbmplY3RlZEJ1bmRsZUVmbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEx
OTgzMjA5NTVlMjU4N2JhMjM0MjkyMzQyNWM3ZjIxMTcxM2MzZGQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9lZmwvSW5qZWN0ZWRCdW5kbGVFZmwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNz
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgotCi0jaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIFdUUiB7Ci0KLXZvaWQgSW5qZWN0
ZWRCdW5kbGU6OnBsYXRmb3JtSW5pdGlhbGl6ZShXS1R5cGVSZWYpCi17Ci0gICAgV1RGSW5zdGFs
bFJlcG9ydEJhY2t0cmFjZU9uQ3Jhc2hIb29rKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdUUgpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9lZmwvVGVz
dFJ1bm5lckVmbC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2Vm
bC9UZXN0UnVubmVyRWZsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk2MzE4
YjVjZDQ1MjIyODYyYThjYTZkMDkwZWE4NjJmZTRhNjRiZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL2VmbC9UZXN0UnVubmVyRWZsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgotCi0jaW5jbHVkZSAiSW5qZWN0
ZWRCdW5kbGUuaCIKLSNpbmNsdWRlIDxFY29yZS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L09wYXF1ZUpTU3RyaW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9FZmxJbnNwZWN0b3JVdGlsaXRp
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgV1RSIHsKLQotc3RhdGljIEVpbmFfQm9vbCB3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckNh
bGxiYWNrKHZvaWQqKQotewotICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVu
bmVyKCktPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKLXsKLSAgICBtX3dh
aXRUb0R1bXBXYXRjaGRvZ1RpbWVyID0gMDsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjppbnZhbGlk
YXRlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKQotewotICAgIGlmICghbV93YWl0VG9EdW1wV2F0
Y2hkb2dUaW1lcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZWNvcmVfdGltZXJfZGVsKG1fd2Fp
dFRvRHVtcFdhdGNoZG9nVGltZXIpOwotICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIgPSAw
OwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmluaXRpYWxpemVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1l
cklmTmVlZGVkKCkKLXsKLSAgICBpZiAobV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IGVjb3JlX3RpbWVy
X2xvb3BfYWRkKG1fdGltZW91dCAvIDEwMDAuMCwgd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJDYWxs
YmFjaywgMCk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjpwYXRo
VG9Mb2NhbFJlc291cmNlKEpTU3RyaW5nUmVmIHVybCkKLXsKLSAgICBTdHJpbmcgcmVxdWVzdGVk
VXJsKHVybC0+Y2hhcmFjdGVycygpLCB1cmwtPmxlbmd0aCgpKTsKLSAgICBTdHJpbmcgcmVzb3Vy
Y2VSb290OwotICAgIFN0cmluZyByZXF1ZXN0ZWRSb290OwotCi0gICAgaWYgKHJlcXVlc3RlZFVy
bC5maW5kKCJMYXlvdXRUZXN0cyIpICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgIC8vIElmIHRoZSBV
UkwgY29udGFpbnMgTGF5b3V0VGVzdHMgd2UgbmVlZCB0byByZW1hcCB0aGF0IHRvCi0gICAgICAg
IC8vIExPQ0FMX1JFU09VUkNFX1JPT1Qgd2hpY2ggaXMgdGhlIHBhdGggb2YgdGhlIExheW91dFRl
c3RzIGRpcmVjdG9yeQotICAgICAgICAvLyB3aXRoaW4gdGhlIFdlYktpdCBzb3VyY2UgdHJlZS4K
LSAgICAgICAgcmVxdWVzdGVkUm9vdCA9ICIvdG1wL0xheW91dFRlc3RzIjsKLSAgICAgICAgcmVz
b3VyY2VSb290ID0gZ2V0ZW52KCJMT0NBTF9SRVNPVVJDRV9ST09UIik7Ci0gICAgfSBlbHNlIGlm
IChyZXF1ZXN0ZWRVcmwuZmluZCgidG1wIikgIT0gbm90Rm91bmQpIHsKLSAgICAgICAgLy8gSWYg
dGhlIFVSTCBpcyBhIGNoaWxkIG9mIC90bXAgd2UgbmVlZCB0byBjb252ZXJ0IGl0IHRvIGJlIGEg
Y2hpbGQKLSAgICAgICAgLy8gRFVNUFJFTkRFUlRSRUVfVEVNUCByZXBsYWNlIHRtcCB3aXRoIERV
TVBSRU5ERVJUUkVFX1RFTVAKLSAgICAgICAgcmVxdWVzdGVkUm9vdCA9ICIvdG1wIjsKLSAgICAg
ICAgcmVzb3VyY2VSb290ID0gZ2V0ZW52KCJEVU1QUkVOREVSVFJFRV9URU1QIik7Ci0gICAgfQot
Ci0gICAgc2l6ZV90IGluZGV4T2ZSb290U3RhcnQgPSByZXF1ZXN0ZWRVcmwucmV2ZXJzZUZpbmQo
cmVxdWVzdGVkUm9vdCk7Ci0gICAgc2l6ZV90IGluZGV4T2ZTZXBhcmF0b3JBZnRlclJvb3QgPSBp
bmRleE9mUm9vdFN0YXJ0ICsgcmVxdWVzdGVkUm9vdC5sZW5ndGgoKTsKLSAgICBTdHJpbmcgZnVs
bFBhdGhUb1VybCA9ICJmaWxlOi8vIiArIHJlc291cmNlUm9vdCArIHJlcXVlc3RlZFVybC5zdWJz
dHJpbmcoaW5kZXhPZlNlcGFyYXRvckFmdGVyUm9vdCk7Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoZnVsbFBhdGhUb1VybC51dGY4KCkuZGF0YSgpKTsKLX0KLQot
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFRlc3RSdW5uZXI6Omluc3BlY3RvclRlc3RTdHViVVJM
KCkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQoImZp
bGU6Ly8iKTsKLSAgICBidWlsZGVyLmFwcGVuZChXZWJDb3JlOjppbnNwZWN0b3JSZXNvdXJjZVBh
dGgoKSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIvVGVzdFN0dWIuaHRtbCIpOwotCi0g
ICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJ1aWxkZXIudG9TdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRWZsLmNtYWtlIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9QbGF0Zm9ybUVmbC5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZjY0NjMwMTcwNTAyYzc3Nzc2ODQxMDBmNDFiNGZlYTljOTY2NGNhYS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Bs
YXRmb3JtRWZsLmNtYWtlCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotYWRkX2N1c3Rv
bV90YXJnZXQoZm9yd2FyZGluZy1oZWFkZXJzRWZsRm9yV2ViS2l0VGVzdFJ1bm5lcgotICAgIENP
TU1BTkQgJHtQRVJMX0VYRUNVVEFCTEV9ICR7V0VCS0lUMl9ESVJ9L1NjcmlwdHMvZ2VuZXJhdGUt
Zm9yd2FyZGluZy1oZWFkZXJzLnBsIC0taW5jbHVkZS1wYXRoICR7V0VCS0lUX1RFU1RSVU5ORVJf
RElSfSAtLWluY2x1ZGUtcGF0aCAke1dFQktJVF9URVNUUlVOTkVSX1NIQVJFRF9ESVJ9IC0tb3V0
cHV0ICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVDJfRElSfS9pbmNsdWRlIC0tcGxhdGZvcm0gZWZs
IC0tcGxhdGZvcm0gc291cAotKQotc2V0KEZvcndhcmRpbmdIZWFkZXJzRm9yV2ViS2l0VGVzdFJ1
bm5lcl9OQU1FIGZvcndhcmRpbmctaGVhZGVyc0VmbEZvcldlYktpdFRlc3RSdW5uZXIpCi0KLWxp
c3QoQVBQRU5EIFdlYktpdFRlc3RSdW5uZXJfU09VUkNFUwotICAgICR7V0VCS0lUX1RFU1RSVU5O
RVJfRElSfS9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAotCi0gICAgJHtXRUJLSVRfVEVT
VFJVTk5FUl9ESVJ9L2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcAotICAgICR7V0VCS0lUX1RF
U1RSVU5ORVJfRElSfS9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAotICAgICR7V0VCS0lUX1RF
U1RSVU5ORVJfRElSfS9lZmwvVGVzdENvbnRyb2xsZXJFZmwuY3BwCi0gICAgJHtXRUJLSVRfVEVT
VFJVTk5FUl9ESVJ9L2VmbC9tYWluLmNwcAotKQotCi1saXN0KEFQUEVORCBXZWJLaXRUZXN0UnVu
bmVyX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAke0RFUklWRURfU09VUkNFU19XRUJLSVQyX0RJ
Un0vaW5jbHVkZQotICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsCi0pCi0KLWxp
c3QoQVBQRU5EIFdlYktpdFRlc3RSdW5uZXJfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAg
ICAke0NBSVJPX0lOQ0xVREVfRElSU30KLSAgICAke0VDT1JFX0lOQ0xVREVfRElSU30KLSAgICAk
e0VDT1JFX0VWQVNfSU5DTFVERV9ESVJTfQotICAgICR7RUNPUkVfRklMRV9JTkNMVURFX0RJUlN9
Ci0gICAgJHtFQ09SRV9JTUZfSU5DTFVERV9ESVJTfQotKQotCi1saXN0KEFQUEVORCBXZWJLaXRU
ZXN0UnVubmVyX0xJQlJBUklFUwotICAgIFdlYkNvcmUKLSAgICAke0NBSVJPX0xJQlJBUklFU30K
LSAgICAke0VDT1JFX0xJQlJBUklFU30KLSAgICAke0VDT1JFX0VWQVNfTElCUkFSSUVTfQotICAg
ICR7RUlOQV9MSUJSQVJJRVN9Ci0gICAgJHtFVkFTX0xJQlJBUklFU30KLSkKLQotaWYgKEVOQUJM
RV9FQ09SRV9YKQotICAgIGxpc3QoQVBQRU5EIFdlYktpdFRlc3RSdW5uZXJfSU5DTFVERV9ESVJF
Q1RPUklFUwotICAgICAgICAke0VDT1JFX1hfSU5DTFVERV9ESVJTfQotICAgICkKLQotICAgIGxp
c3QoQVBQRU5EIFdlYktpdFRlc3RSdW5uZXJfTElCUkFSSUVTCi0gICAgICAgICR7RUNPUkVfWF9M
SUJSQVJJRVN9Ci0gICAgICAgICR7WDExX1hleHRfTElCfQotICAgICkKLWVuZGlmICgpCi0KLWlm
IChFTkFCTEVfQUNDRVNTSUJJTElUWSkKLSAgICBsaXN0KEFQUEVORCBXZWJLaXRUZXN0UnVubmVy
X0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAgJHtBVEtfSU5DTFVERV9ESVJTfQotICAgICkK
LSAgICBsaXN0KEFQUEVORCBXZWJLaXRUZXN0UnVubmVyX0xJQlJBUklFUwotICAgICAgICAke0FU
S19MSUJSQVJJRVN9Ci0gICAgKQotZW5kaWYgKCkKLQotbGlzdChBUFBFTkQgV2ViS2l0VGVzdFJ1
bm5lckluamVjdGVkQnVuZGxlX1NPVVJDRVMKLSAgICAke1dFQktJVF9URVNUUlVOTkVSX0lOSkVD
VEVEQlVORExFX0RJUn0vYXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRrLmNwcAotICAgICR7
V0VCS0lUX1RFU1RSVU5ORVJfSU5KRUNURURCVU5ETEVfRElSfS9hdGsvQWNjZXNzaWJpbGl0eU5v
dGlmaWNhdGlvbkhhbmRsZXJBdGsuY3BwCi0gICAgJHtXRUJLSVRfVEVTVFJVTk5FUl9JTkpFQ1RF
REJVTkRMRV9ESVJ9L2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAotCi0gICAgJHtX
RUJLSVRfVEVTVFJVTk5FUl9JTkpFQ1RFREJVTkRMRV9ESVJ9L2VmbC9BY3RpdmF0ZUZvbnRzRWZs
LmNwcAotICAgICR7V0VCS0lUX1RFU1RSVU5ORVJfSU5KRUNURURCVU5ETEVfRElSfS9lZmwvRm9u
dE1hbmFnZW1lbnQuY3BwCi0gICAgJHtXRUJLSVRfVEVTVFJVTk5FUl9JTkpFQ1RFREJVTkRMRV9E
SVJ9L2VmbC9JbmplY3RlZEJ1bmRsZUVmbC5jcHAKLSAgICAke1dFQktJVF9URVNUUlVOTkVSX0lO
SkVDVEVEQlVORExFX0RJUn0vZWZsL1Rlc3RSdW5uZXJFZmwuY3BwCi0pCi0KLSMgRklYTUU6IEVG
TCBwb3J0IG5lZWRzIHRvIGhhdmUgb3duIHRlc3QgZm9udCBhbmQgZm9udCBjb25maWd1cmUgaW5z
dGVhZCBvZiBndGsgdGVzdCBmb250IGluIGZ1dHVyZQotIyBGSVhNRTogRE9XTkxPQURFRF9GT05U
U19ESVIgc2hvdWxkIG5vdCBoYXJkY29kZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZS4KLWFkZF9k
ZWZpbml0aW9ucygtREZPTlRTX0NPTkZfRElSPSIke1RPT0xTX0RJUn0vV2ViS2l0VGVzdFJ1bm5l
ci9ndGsvZm9udHMiCi0gICAgICAgICAgICAgICAgLURET1dOTE9BREVEX0ZPTlRTX0RJUj0iJHtD
TUFLRV9TT1VSQ0VfRElSfS9XZWJLaXRCdWlsZC9EZXBlbmRlbmNpZXNFRkwvU291cmNlL3dlYmtp
dGd0ay10ZXN0LWZvbnRzIikKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxh
dGZvcm1XZWJWaWV3LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5o
CmluZGV4IDcxYTRlNzY2MTc2YjQyMTllMzJkMzIxODJmMWExNmU5NDM1OGRjMWEuLjBmMTU4NjEz
ZDJhY2M3NWMxMWE4YzkxYTBjNzc1ZmZkMDQ3NWIwYzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9QbGF0Zm9ybVdlYlZpZXcuaApAQCAtNTAsOSArNTAsNiBAQCB0eXBlZGVmIHN0cnVjdCBfR3Rr
V2lkZ2V0IEd0a1dpZGdldDsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlw
ZWRlZiBHdGtXaWRnZXQqIFBsYXRmb3JtV2luZG93OwogdHlwZWRlZiBjYWlyb19zdXJmYWNlX3Qg
KlBsYXRmb3JtSW1hZ2U7Ci0jZWxpZiBQTEFURk9STShFRkwpCi10eXBlZGVmIEV2YXNfT2JqZWN0
KiBQbGF0Zm9ybVdLVmlldzsKLXR5cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1XaW5kb3c7CiAj
ZW5kaWYKIAogbmFtZXNwYWNlIFdUUiB7CkBAIC0xMTIsMTAgKzEwOSw2IEBAIHByaXZhdGU6CiAg
ICAgUGxhdGZvcm1XaW5kb3cgbV93aW5kb3c7CiAgICAgYm9vbCBtX3dpbmRvd0lzS2V5OwogICAg
IGNvbnN0IFRlc3RPcHRpb25zIG1fb3B0aW9uczsKLQotI2lmIFBMQVRGT1JNKEVGTCkKLSAgICBi
b29sIG1fdXNpbmdGaXhlZExheW91dDsKLSNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RS
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDliNzA5ZTM2
Zjc1YzY2NWVkMDJhMDdlMzNiNzE5NjYzZTFiMWM4NGQuLmE4OGIyMGFjZWFjYWJlOWE0MzczZGQ5
OTAwZmFkYmRmYmM0NWMwNzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwCkBAIC03ODMsMTMgKzc4Myw2IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3Rh
dGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiAKICAgICBX
S1BhZ2VDbGVhcldoZWVsRXZlbnRUZXN0VHJpZ2dlcihtX21haW5XZWJWaWV3LT5wYWdlKCkpOwog
Ci0jaWYgUExBVEZPUk0oRUZMKQotICAgIC8vIEVGTCB1c2VzIGEgcmVhbCB3aW5kb3cgd2hpbGUg
b3RoZXIgcG9ydHMgc3VjaCBhcyBRdCBkb24ndC4KLSAgICAvLyBJbiBFRkwsIHdlIG5lZWQgdG8g
cmVzaXplIHRoZSB3aW5kb3cgdG8gdGhlIG9yaWdpbmFsIHNpemUgYWZ0ZXIgY2FsbHMgdG8gd2lu
ZG93LnJlc2l6ZVRvLgotICAgIFdLUmVjdCByZWN0ID0gbV9tYWluV2ViVmlldy0+d2luZG93RnJh
bWUoKTsKLSAgICBtX21haW5XZWJWaWV3LT5zZXRXaW5kb3dGcmFtZShXS1JlY3RNYWtlKHJlY3Qu
b3JpZ2luLngsIHJlY3Qub3JpZ2luLnksIFRlc3RDb250cm9sbGVyOjp2aWV3V2lkdGgsIFRlc3RD
b250cm9sbGVyOjp2aWV3SGVpZ2h0KSk7Ci0jZW5kaWYKLQogICAgIFdLUGFnZVNldE11dGVkKG1f
bWFpbldlYlZpZXctPnBhZ2UoKSwgdHJ1ZSk7CiAKICAgICBXS1BhZ2VDbGVhclVzZXJNZWRpYVN0
YXRlKG1fbWFpbldlYlZpZXctPnBhZ2UoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjMWU4MmY4OGE3MDcyOGE1NmRlZTRmOTZlMDA3ZTNiMGQxZjA2MzVkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTY3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IFphbiBEb2JlcnNlayA8emFuZG9i
ZXJzZWtAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBQcm9GVVNJT04gRW1iZWRkZWQgU3lzdGVtcwotICogQ29weXJpZ2h0IChDKSAy
MDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJFdmVudFNlbmRlclByb3h5LmgiCi0KLSNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgotI2luY2x1ZGUgIlRl
c3RDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlIDxFY29yZS5oPgotI2luY2x1ZGUgPEVjb3JlX0V2
YXMuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgV1RSIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIG1vZGlmaWVy
TmFtZXNbXSA9IHsgIlNoaWZ0IiwgIkNvbnRyb2wiLCAiQWx0IiwgIk1ldGEiIH07Ci0KLWVudW0g
V1RSRXZlbnRUeXBlIHsKLSAgICBXVFJFdmVudFR5cGVOb25lID0gMCwKLSAgICBXVFJFdmVudFR5
cGVNb3VzZURvd24sCi0gICAgV1RSRXZlbnRUeXBlTW91c2VVcCwKLSAgICBXVFJFdmVudFR5cGVN
b3VzZU1vdmUsCi0gICAgV1RSRXZlbnRUeXBlTW91c2VTY3JvbGxCeSwKLSAgICBXVFJFdmVudFR5
cGVMZWFwRm9yd2FyZAotfTsKLQotZW51bSBFdmFzTW91c2VCdXR0b24gewotICAgIEV2YXNNb3Vz
ZUJ1dHRvbk5vbmUgPSAwLAotICAgIEV2YXNNb3VzZUJ1dHRvbkxlZnQsCi0gICAgRXZhc01vdXNl
QnV0dG9uTWlkZGxlLAotICAgIEV2YXNNb3VzZUJ1dHRvblJpZ2h0Ci19OwotCi0vLyBLZXkgZXZl
bnQgbG9jYXRpb24gY29kZSBkZWZpbmVkIGluIERPTSBMZXZlbCAzLgotZW51bSBLZXlMb2NhdGlv
bkNvZGUgewotICAgIERPTUtleUxvY2F0aW9uU3RhbmRhcmQgICAgICA9IDB4MDAsCi0gICAgRE9N
S2V5TG9jYXRpb25MZWZ0ICAgICAgICAgID0gMHgwMSwKLSAgICBET01LZXlMb2NhdGlvblJpZ2h0
ICAgICAgICAgPSAweDAyLAotICAgIERPTUtleUxvY2F0aW9uTnVtcGFkICAgICAgICA9IDB4MDMK
LX07Ci0KLXN0cnVjdCBXVFJFdmVudCB7Ci0gICAgV1RSRXZlbnRUeXBlIGV2ZW50VHlwZTsKLSAg
ICB1bnNpZ25lZCBkZWxheTsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVyczsKLSAgICBp
bnQgYnV0dG9uOwotICAgIGludCBob3Jpem9udGFsOwotICAgIGludCB2ZXJ0aWNhbDsKLQotICAg
IFdUUkV2ZW50KCkKLSAgICAgICAgOiBldmVudFR5cGUoV1RSRXZlbnRUeXBlTm9uZSkKLSAgICAg
ICAgLCBkZWxheSgwKQotICAgICAgICAsIG1vZGlmaWVycygwKQotICAgICAgICAsIGJ1dHRvbigt
MSkKLSAgICAgICAgLCBob3Jpem9udGFsKC0xKQotICAgICAgICAsIHZlcnRpY2FsKC0xKQotICAg
IHsKLSAgICB9Ci0KLSAgICBXVFJFdmVudChXVFJFdmVudFR5cGUgZXZlbnRUeXBlLCB1bnNpZ25l
ZCBkZWxheSwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIGludCBidXR0b24pCi0gICAgICAg
IDogZXZlbnRUeXBlKGV2ZW50VHlwZSkKLSAgICAgICAgLCBkZWxheShkZWxheSkKLSAgICAgICAg
LCBtb2RpZmllcnMobW9kaWZpZXJzKQotICAgICAgICAsIGJ1dHRvbihidXR0b24pCi0gICAgICAg
ICwgaG9yaXpvbnRhbCgtMSkKLSAgICAgICAgLCB2ZXJ0aWNhbCgtMSkKLSAgICB7Ci0gICAgfQot
fTsKLQotc3RydWN0IEtleUV2ZW50SW5mbyA6IHB1YmxpYyBSZWZDb3VudGVkPEtleUV2ZW50SW5m
bz4gewotICAgIEtleUV2ZW50SW5mbyhjb25zdCBDU3RyaW5nJiBrZXlOYW1lLCBjb25zdCBDU3Ry
aW5nJiBrZXlTdHJpbmcpCi0gICAgICAgIDoga2V5TmFtZShrZXlOYW1lKQotICAgICAgICAsIGtl
eVN0cmluZyhrZXlTdHJpbmcpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IENTdHJpbmcga2V5
TmFtZTsKLSAgICBjb25zdCBDU3RyaW5nIGtleVN0cmluZzsKLX07Ci0KLXN0YXRpYyB1bnNpZ25l
ZCBldmFzTW91c2VCdXR0b24odW5zaWduZWQgYnV0dG9uKQotewotICAgIC8vIFRoZSBjb21tb24g
Y2FzZSBpbnZvbHZlcyBjb252ZXJ0aW5nIGZyb20gYSBXS0V2ZW50TW91c2VCdXR0b24gKHdoaWNo
Ci0gICAgLy8gc3RhcnRzIGF0IC0xKSB0byBhbiBFdmFzTW91c2VCdXR0b24gKHdoaWNoIGEgc3Rh
cnRzIGF0IDApLiBUaGUgc3BlY2lhbAotICAgIC8vIGNhc2UgZm9yIGJ1dHRvbiAzIGV4aXN0cyBi
ZWNhdXNlIG9mIGZhc3QvZXZlbnRzL21vdXNlLWNsaWNrLWV2ZW50cy5odG1sLAotICAgIC8vIHdo
aWNoIHRlc3RzIHdoZXRoZXIgYSA0dGggbW91c2UgYnV0dG9uIGJlaGF2ZXMgYXMgdGhlIG1pZGRs
ZSBvbmUuCi0gICAgaWYgKGJ1dHRvbiA8PSBrV0tFdmVudE1vdXNlQnV0dG9uUmlnaHRCdXR0b24p
Ci0gICAgICAgIHJldHVybiBidXR0b24gKyAxOwotICAgIGlmIChidXR0b24gPT0ga1dLRXZlbnRN
b3VzZUJ1dHRvblJpZ2h0QnV0dG9uICsgMSkKLSAgICAgICAgcmV0dXJuIEV2YXNNb3VzZUJ1dHRv
bk1pZGRsZTsKLSAgICByZXR1cm4gRXZhc01vdXNlQnV0dG9uTm9uZTsKLX0KLQotc3RhdGljIHZv
aWQgc2V0RXZhc01vZGlmaWVycyhFdmFzKiBldmFzLCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZp
ZXJzKQotewotICAgIGZvciAodW5zaWduZWQgbW9kaWZpZXIgPSAwOyBtb2RpZmllciA8IChzaXpl
b2YobW9kaWZpZXJOYW1lcykgLyBzaXplb2YoY2hhciopKTsgKyttb2RpZmllcikgewotICAgICAg
ICBpZiAod2tNb2RpZmllcnMgJiAoMSA8PCBtb2RpZmllcikpCi0gICAgICAgICAgICBldmFzX2tl
eV9tb2RpZmllcl9vbihldmFzLCBtb2RpZmllck5hbWVzW21vZGlmaWVyXSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29mZihldmFzLCBtb2RpZmllck5hbWVz
W21vZGlmaWVyXSk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBkaXNwYXRjaE1vdXNlRG93bkV2
ZW50KEV2YXMqIGV2YXMsIHVuc2lnbmVkIGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyB3a01vZGlm
aWVycywgaW50IGNsaWNrQ291bnQpCi17Ci0gICAgRXZhc19CdXR0b25fRmxhZ3MgYnV0dG9uRmxh
Z3MgPSBFVkFTX0JVVFRPTl9OT05FOwotICAgIGlmIChjbGlja0NvdW50ID09IDMpCi0gICAgICAg
IGJ1dHRvbkZsYWdzID0gRVZBU19CVVRUT05fVFJJUExFX0NMSUNLOwotICAgIGVsc2UgaWYgKGNs
aWNrQ291bnQgPT0gMikKLSAgICAgICAgYnV0dG9uRmxhZ3MgPSBFVkFTX0JVVFRPTl9ET1VCTEVf
Q0xJQ0s7Ci0KLSAgICBzZXRFdmFzTW9kaWZpZXJzKGV2YXMsIHdrTW9kaWZpZXJzKTsKLSAgICBl
dmFzX2V2ZW50X2ZlZWRfbW91c2VfZG93bihldmFzLCBidXR0b24sIGJ1dHRvbkZsYWdzLCAwLCAw
KTsKLSAgICBzZXRFdmFzTW9kaWZpZXJzKGV2YXMsIDApOwotfQotCi1zdGF0aWMgdm9pZCBkaXNw
YXRjaE1vdXNlVXBFdmVudChFdmFzKiBldmFzLCB1bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2Rp
ZmllcnMgd2tNb2RpZmllcnMpCi17Ci0gICAgc2V0RXZhc01vZGlmaWVycyhldmFzLCB3a01vZGlm
aWVycyk7Ci0gICAgZXZhc19ldmVudF9mZWVkX21vdXNlX3VwKGV2YXMsIGJ1dHRvbiwgRVZBU19C
VVRUT05fTk9ORSwgMCwgMCk7Ci0gICAgc2V0RXZhc01vZGlmaWVycyhldmFzLCAwKTsKLX0KLQot
c3RhdGljIHZvaWQgZGlzcGF0Y2hNb3VzZU1vdmVFdmVudChFdmFzKiBldmFzLCBpbnQgeCwgaW50
IHkpCi17Ci0gICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGRpc3BhdGNoTW91c2VTY3JvbGxCeUV2ZW50KEV2YXMqIGV2YXMs
IGludCBob3Jpem9udGFsLCBpbnQgdmVydGljYWwpCi17Ci0gICAgaWYgKGhvcml6b250YWwpCi0g
ICAgICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV93aGVlbChldmFzLCAxLCBob3Jpem9udGFsLCAw
LCAwKTsKLQotICAgIGlmICh2ZXJ0aWNhbCkKLSAgICAgICAgZXZhc19ldmVudF9mZWVkX21vdXNl
X3doZWVsKGV2YXMsIDAsIHZlcnRpY2FsLCAwLCAwKTsKLX0KLQotc3RhdGljIGNvbnN0IFJlZlB0
cjxLZXlFdmVudEluZm8+IGtleVBhZE5hbWUoV0tTdHJpbmdSZWYga2V5UmVmKQotewotICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImxlZnRBcnJvdyIpKQotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1BfTGVmdCIsICIiKSk7Ci0g
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicmlnaHRBcnJvdyIp
KQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1BfUmlnaHQiLCAi
IikpOwotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInVwQXJy
b3ciKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX1VwIiwg
IiIpKTsKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJkb3du
QXJyb3ciKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX0Rv
d24iLCAiIikpOwotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwg
InBhZ2VVcCIpKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1Bf
UHJpb3IiLCAiIikpOwotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJl
ZiwgInBhZ2VEb3duIikpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZv
KCJLUF9OZXh0IiwgIiIpKTsKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhr
ZXlSZWYsICJob21lIikpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZv
KCJLUF9Ib21lIiwgIiIpKTsKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhr
ZXlSZWYsICJlbmQiKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8o
IktQX0VuZCIsICIiKSk7Ci0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5
UmVmLCAiaW5zZXJ0IikpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZv
KCJLUF9JbnNlcnQiLCAiIikpOwotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KGtleVJlZiwgImRlbGV0ZSIpKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50
SW5mbygiS1BfRGVsZXRlIiwgIiIpKTsKLQotICAgIHNpemVfdCBidWZmZXJTaXplID0gV0tTdHJp
bmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGtleVJlZik7Ci0gICAgYXV0byBidWZmZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPGNoYXJbXT4oYnVmZmVyU2l6ZSk7Ci0gICAgV0tTdHJpbmdHZXRVVEY4
Q1N0cmluZyhrZXlSZWYsIGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBLZXlFdmVudEluZm8oYnVmZmVyLmdldCgpLCBidWZmZXIuZ2V0KCkpKTsKLX0K
LQotc3RhdGljIGNvbnN0IFJlZlB0cjxLZXlFdmVudEluZm8+IGtleU5hbWUoV0tTdHJpbmdSZWYg
a2V5UmVmKQotewotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwg
ImxlZnRBcnJvdyIpKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygi
TGVmdCIsICIiKSk7Ci0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVm
LCAicmlnaHRBcnJvdyIpKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5m
bygiUmlnaHQiLCAiIikpOwotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtl
eVJlZiwgInVwQXJyb3ciKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudElu
Zm8oIlVwIiwgIiIpKTsKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlS
ZWYsICJkb3duQXJyb3ciKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudElu
Zm8oIkRvd24iLCAiIikpOwotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtl
eVJlZiwgInBhZ2VVcCIpKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5m
bygiUHJpb3IiLCAiIikpOwotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtl
eVJlZiwgInBhZ2VEb3duIikpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJ
bmZvKCJOZXh0IiwgIiIpKTsKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhr
ZXlSZWYsICJob21lIikpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZv
KCJIb21lIiwgIiIpKTsKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlS
ZWYsICJlbmQiKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkVu
ZCIsICIiKSk7Ci0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAi
aW5zZXJ0IikpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJJbnNl
cnQiLCAiIikpOwotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwg
ImRlbGV0ZSIpKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRGVs
ZXRlIiwgIiIpKTsKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYs
ICJwcmludFNjcmVlbiIpKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5m
bygiUHJpbnQiLCAiIikpOwotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtl
eVJlZiwgIm1lbnUiKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8o
Ik1lbnUiLCAiIikpOwotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJl
ZiwgImxlZnRDb250cm9sIikpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJ
bmZvKCJDb250cm9sX0wiLCAiIikpOwotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKGtleVJlZiwgInJpZ2h0Q29udHJvbCIpKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEtleUV2ZW50SW5mbygiQ29udHJvbF9SIiwgIiIpKTsKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhrZXlSZWYsICJsZWZ0U2hpZnQiKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBLZXlFdmVudEluZm8oIlNoaWZ0X0wiLCAiIikpOwotICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInJpZ2h0U2hpZnQiKSkKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIlNoaWZ0X1IiLCAiIikpOwotICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImxlZnRBbHQiKSkKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkFsdF9MIiwgIiIpKTsKLSAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJyaWdodEFsdCIpKQotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiQWx0X1IiLCAiIikpOwotICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkYxIikpCi0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGMSIsICIiKSk7Ci0gICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjIiKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBLZXlFdmVudEluZm8oIkYyIiwgIiIpKTsKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGMyIpKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEtleUV2ZW50SW5mbygiRjMiLCAiIikpOwotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKGtleVJlZiwgIkY0IikpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZl
bnRJbmZvKCJGNCIsICIiKSk7Ci0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
a2V5UmVmLCAiRjUiKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8o
IkY1IiwgIiIpKTsKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYs
ICJGNiIpKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjYiLCAi
IikpOwotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkY3Iikp
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGNyIsICIiKSk7Ci0g
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjgiKSkKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkY4IiwgIiIpKTsKLSAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGOSIpKQotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjkiLCAiIikpOwotICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkYxMCIpKQotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjEwIiwgIiIpKTsKLSAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGMTEiKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBLZXlFdmVudEluZm8oIkYxMSIsICIiKSk7Ci0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcoa2V5UmVmLCAiRjEyIikpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
S2V5RXZlbnRJbmZvKCJGMTIiLCAiIikpOwotCi0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBXS1N0
cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoa2V5UmVmKTsKLSAgICBhdXRvIGJ1ZmZlciA9
IHN0ZDo6bWFrZV91bmlxdWU8Y2hhcltdPihidWZmZXJTaXplKTsKLSAgICBXS1N0cmluZ0dldFVU
RjhDU3RyaW5nKGtleVJlZiwgYnVmZmVyLmdldCgpLCBidWZmZXJTaXplKTsKLSAgICBjaGFyIGNo
YXJDb2RlID0gYnVmZmVyLmdldCgpWzBdOwotCi0gICAgaWYgKGNoYXJDb2RlID09ICdcbicgfHwg
Y2hhckNvZGUgPT0gJ1xyJykKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudElu
Zm8oIlJldHVybiIsICJcciIpKTsKLSAgICBpZiAoY2hhckNvZGUgPT0gJ1x0JykKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIlRhYiIsICJcdCIpKTsKLSAgICBpZiAo
Y2hhckNvZGUgPT0gJ1x4OCcpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJ
bmZvKCJCYWNrU3BhY2UiLCAiXHg4IikpOwotICAgIGlmIChjaGFyQ29kZSA9PSAnICcpCi0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJzcGFjZSIsICIgIikpOwotCi0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oYnVmZmVyLmdldCgpLCBidWZmZXIu
Z2V0KCkpKTsKLX0KLQotRXZlbnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eShUZXN0Q29u
dHJvbGxlciogdGVzdENvbnRyb2xsZXIpCi0gICAgOiBtX3Rlc3RDb250cm9sbGVyKHRlc3RDb250
cm9sbGVyKQotICAgICwgbV90aW1lKDApCi0gICAgLCBtX2xlZnRNb3VzZUJ1dHRvbkRvd24oZmFs
c2UpCi0gICAgLCBtX2NsaWNrQ291bnQoMCkKLSAgICAsIG1fY2xpY2tUaW1lKDApCi0gICAgLCBt
X2NsaWNrQnV0dG9uKGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbikKLSAgICAsIG1fbW91c2VC
dXR0b24oa1dLRXZlbnRNb3VzZUJ1dHRvbk5vQnV0dG9uKQotI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCi0gICAgLCBtX3RvdWNoUG9pbnRzKDApCi0jZW5kaWYKLXsKLX0KLQotRXZlbnRTZW5kZXJQ
cm94eTo6fkV2ZW50U2VuZGVyUHJveHkoKQotewotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0g
ICAgY2xlYXJUb3VjaFBvaW50cygpOwotI2VuZGlmCi19Ci0KLXZvaWQgRXZlbnRTZW5kZXJQcm94
eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0dG9uKQotewotICAgIGlmIChtX3Rp
bWUgLSBtX2NsaWNrVGltZSA8IDEgJiYgbV9wb3NpdGlvbiA9PSBtX2NsaWNrUG9zaXRpb24gJiYg
YnV0dG9uID09IG1fY2xpY2tCdXR0b24pIHsKLSAgICAgICAgKyttX2NsaWNrQ291bnQ7Ci0gICAg
ICAgIG1fY2xpY2tUaW1lID0gbV90aW1lOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bV9jbGlja0NvdW50ID0gMTsKLSAgICBtX2NsaWNrVGltZSA9IG1fdGltZTsKLSAgICBtX2NsaWNr
UG9zaXRpb24gPSBtX3Bvc2l0aW9uOwotICAgIG1fY2xpY2tCdXR0b24gPSBidXR0b247Ci19Ci0K
LXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6ZGlzcGF0Y2hFdmVudChjb25zdCBXVFJFdmVudCYgZXZl
bnQpCi17Ci0gICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRy
b2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKTsKLQotICAgIGlmIChldmVudC5l
dmVudFR5cGUgPT0gV1RSRXZlbnRUeXBlTW91c2VEb3duKQotICAgICAgICBkaXNwYXRjaE1vdXNl
RG93bkV2ZW50KGV2YXMsIGV2ZW50LmJ1dHRvbiwgZXZlbnQubW9kaWZpZXJzLCBtX2NsaWNrQ291
bnQpOwotICAgIGVsc2UgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PSBXVFJFdmVudFR5cGVNb3VzZVVw
KQotICAgICAgICBkaXNwYXRjaE1vdXNlVXBFdmVudChldmFzLCBldmVudC5idXR0b24sIGV2ZW50
Lm1vZGlmaWVycyk7Ci0gICAgZWxzZSBpZiAoZXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlw
ZU1vdXNlTW92ZSkKLSAgICAgICAgZGlzcGF0Y2hNb3VzZU1vdmVFdmVudChldmFzLCBzdGF0aWNf
Y2FzdDxpbnQ+KG1fcG9zaXRpb24ueCksIHN0YXRpY19jYXN0PGludD4obV9wb3NpdGlvbi55KSk7
Ci0gICAgZWxzZSBpZiAoZXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNlU2Nyb2xs
QnkpCi0gICAgICAgIGRpc3BhdGNoTW91c2VTY3JvbGxCeUV2ZW50KGV2YXMsIGV2ZW50Lmhvcml6
b250YWwsIGV2ZW50LnZlcnRpY2FsKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlclByb3h5OjpyZXBs
YXlTYXZlZEV2ZW50cygpCi17Ci0gICAgd2hpbGUgKCFtX2V2ZW50UXVldWUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFdUUkV2ZW50IGV2ZW50ID0gbV9ldmVudFF1ZXVlLnRha2VGaXJzdCgpOwotICAg
ICAgICBpZiAoZXZlbnQuZGVsYXkpCi0gICAgICAgICAgICB1c2xlZXAoZXZlbnQuZGVsYXkgKiAx
MDAwKTsKLQotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKLSAgICB9Ci19Ci0KLXZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6c2VuZE9yUXVldWVFdmVudChjb25zdCBXVFJFdmVudCYgZXZlbnQp
Ci17Ci0gICAgaWYgKG1fZXZlbnRRdWV1ZS5pc0VtcHR5KCkgfHwgIW1fZXZlbnRRdWV1ZS5sYXN0
KCkuZGVsYXkpIHsKLSAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBtX2V2ZW50UXVldWUuYXBwZW5kKGV2ZW50KTsKLSAgICByZXBsYXlT
YXZlZEV2ZW50cygpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRG93bih1bnNp
Z25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMpCi17Ci0gICAgaWYgKG1f
bW91c2VCdXR0b24gPT0gYnV0dG9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21vdXNlQnV0
dG9uID0gYnV0dG9uOwotICAgIHVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oYnV0dG9uKTsKLQot
ICAgIHNlbmRPclF1ZXVlRXZlbnQoV1RSRXZlbnQoV1RSRXZlbnRUeXBlTW91c2VEb3duLCAwLCB3
a01vZGlmaWVycywgZXZhc01vdXNlQnV0dG9uKGJ1dHRvbikpKTsKLX0KLQotdm9pZCBFdmVudFNl
bmRlclByb3h5Ojptb3VzZVVwKHVuc2lnbmVkIGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyB3a01v
ZGlmaWVycykKLXsKLSAgICBzZW5kT3JRdWV1ZUV2ZW50KFdUUkV2ZW50KFdUUkV2ZW50VHlwZU1v
dXNlVXAsIDAsIHdrTW9kaWZpZXJzLCBldmFzTW91c2VCdXR0b24oYnV0dG9uKSkpOwotCi0gICAg
aWYgKG1fbW91c2VCdXR0b24gPT0gYnV0dG9uKQotICAgICAgICBtX21vdXNlQnV0dG9uID0ga1dL
RXZlbnRNb3VzZUJ1dHRvbk5vQnV0dG9uOwotCi0gICAgbV9jbGlja1Bvc2l0aW9uID0gbV9wb3Np
dGlvbjsKLSAgICBtX2NsaWNrVGltZSA9IGN1cnJlbnRFdmVudFRpbWUoKTsKLX0KLQotdm9pZCBF
dmVudFNlbmRlclByb3h5Ojptb3VzZU1vdmVUbyhkb3VibGUgeCwgZG91YmxlIHkpCi17Ci0gICAg
bV9wb3NpdGlvbi54ID0geDsKLSAgICBtX3Bvc2l0aW9uLnkgPSB5OwotCi0gICAgc2VuZE9yUXVl
dWVFdmVudChXVFJFdmVudChXVFJFdmVudFR5cGVNb3VzZU1vdmUsIDAsIDAsIGtXS0V2ZW50TW91
c2VCdXR0b25Ob0J1dHRvbikpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Ny
b2xsQnkoaW50IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCkKLXsKLSAgICBXVFJFdmVudCBldmVu
dChXVFJFdmVudFR5cGVNb3VzZVNjcm9sbEJ5LCAwLCAwLCBrV0tFdmVudE1vdXNlQnV0dG9uTm9C
dXR0b24pOwotICAgIC8vIFdlIG5lZWQgdG8gaW52ZXJ0IHNjcm9sbGluZyB2YWx1ZXMgc2luY2Ug
aW4gRUZMIG5lZ2F0aXZlIHogdmFsdWUgbWVhbnMgdGhhdAotICAgIC8vIGNhbnZhcyBpcyBzY3Jv
bGxpbmcgZG93bgotICAgIGV2ZW50Lmhvcml6b250YWwgPSAtaG9yaXpvbnRhbDsKLSAgICBldmVu
dC52ZXJ0aWNhbCA9IC12ZXJ0aWNhbDsKLSAgICBzZW5kT3JRdWV1ZUV2ZW50KGV2ZW50KTsKLX0K
LQotdm9pZCBFdmVudFNlbmRlclByb3h5Ojpjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQgaG9y
aXpvbnRhbCwgaW50IHZlcnRpY2FsLCBib29sIHBhZ2VkKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VTY3JvbGxCeVdpdGhXaGVlbEFu
ZE1vbWVudHVtUGhhc2VzKGludCB4LCBpbnQgeSwgaW50IC8qcGhhc2UqLywgaW50IC8qbW9tZW50
dW0qLykKLXsKLSAgICAvLyBFRkwgZG9lcyBub3QgaGF2ZSB0aGUgY29uY2VwdCBvZiB3aGVlbCBn
ZXN0dXJlIHBoYXNlcyBvciBtb21lbnR1bS4gSnVzdCByZWxheSB0bwotICAgIC8vIHRoZSBtb3Vz
ZSB3aGVlbCBoYW5kbGVyLgotICAgIG1vdXNlU2Nyb2xsQnkoeCwgeSk7Ci19Ci0KLXZvaWQgRXZl
bnRTZW5kZXJQcm94eTo6bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vjb25kcykKLXsKLSAgICBpZiAo
bV9ldmVudFF1ZXVlLmlzRW1wdHkoKSkKLSAgICAgICAgbV9ldmVudFF1ZXVlLmFwcGVuZChXVFJF
dmVudChXVFJFdmVudFR5cGVMZWFwRm9yd2FyZCwgbWlsbGlzZWNvbmRzLCAwLCBrV0tFdmVudE1v
dXNlQnV0dG9uTm9CdXR0b24pKTsKLQotICAgIG1fdGltZSArPSBtaWxsaXNlY29uZHMgLyAxMDAw
LjA7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXlS
ZWYsIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMsIHVuc2lnbmVkIGxvY2F0aW9uKQotewot
ICAgIGNvbnN0IFJlZlB0cjxLZXlFdmVudEluZm8+IGtleUV2ZW50SW5mbyA9IChsb2NhdGlvbiA9
PSBET01LZXlMb2NhdGlvbk51bXBhZCkgPyBrZXlQYWROYW1lKGtleVJlZikgOiBrZXlOYW1lKGtl
eVJlZik7Ci0gICAgaWYgKCFrZXlFdmVudEluZm8pCi0gICAgICAgIHJldHVybjsKLQotICAgIGNv
bnN0IGNoYXIqIGtleU5hbWUgPSBrZXlFdmVudEluZm8tPmtleU5hbWUuZGF0YSgpOwotICAgIGNv
bnN0IGNoYXIqIGtleVN0cmluZyA9IGtleUV2ZW50SW5mby0+a2V5U3RyaW5nLmRhdGEoKTsKLQot
ICAgIC8vIEVuZm9yY2UgJ1NoaWZ0JyBtb2RpZmllciBmb3IgY2Fwcy4KLSAgICBpZiAoKHN0cmxl
bihrZXlOYW1lKSA9PSAxKSAmJiAoa2V5TmFtZVswXSA+PSAnQScgJiYga2V5TmFtZVswXSA8PSAn
WicpKQotICAgICAgICB3a01vZGlmaWVycyB8PSBrV0tFdmVudE1vZGlmaWVyc1NoaWZ0S2V5Owot
Ci0gICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXIt
Pm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKTsKLQotICAgIGludCBldmVudEluZGV4ID0g
MDsKLSAgICAvLyBNaW1pYyB0aGUgZW1hY3MgY3RybC1vIGJpbmRpbmcgYnkgaW5zZXJ0aW5nIGEg
cGFyYWdyYXBoCi0gICAgLy8gc2VwYXJhdG9yIGFuZCB0aGVuIHB1dHRpbmcgdGhlIGN1cnNvciBi
YWNrIHRvIGl0cyBvcmlnaW5hbAotICAgIC8vIHBvc2l0aW9uLiBBbGxvd3MgdXMgdG8gcGFzcyBl
bWFjcy1jdHJsLW8uaHRtbAotICAgIGlmICgod2tNb2RpZmllcnMgJiBrV0tFdmVudE1vZGlmaWVy
c0NvbnRyb2xLZXkpICYmICFzdHJjbXAoa2V5TmFtZSwgIm8iKSkgewotICAgICAgICBzZXRFdmFz
TW9kaWZpZXJzKGV2YXMsIDApOwotICAgICAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X2Rvd24oZXZh
cywgIlJldHVybiIsICJSZXR1cm4iLCAiXHIiLCAwLCBldmVudEluZGV4KyssIDApOwotICAgICAg
ICBldmFzX2V2ZW50X2ZlZWRfa2V5X3VwKGV2YXMsICJSZXR1cm4iLCAiUmV0dXJuIiwgIlxyIiwg
MCwgZXZlbnRJbmRleCsrLCAwKTsKLSAgICAgICAgd2tNb2RpZmllcnMgPSAwOwotICAgICAgICBr
ZXlOYW1lID0gIkxlZnQiOwotICAgICAgICBrZXlTdHJpbmcgPSAwOwotICAgIH0KLQotICAgIHNl
dEV2YXNNb2RpZmllcnMoZXZhcywgd2tNb2RpZmllcnMpOwotICAgIGV2YXNfZXZlbnRfZmVlZF9r
ZXlfZG93bihldmFzLCBrZXlOYW1lLCBrZXlOYW1lLCBrZXlTdHJpbmcsIDAsIGV2ZW50SW5kZXgr
KywgMCk7Ci0gICAgZXZhc19ldmVudF9mZWVkX2tleV91cChldmFzLCBrZXlOYW1lLCBrZXlOYW1l
LCBrZXlTdHJpbmcsIDAsIGV2ZW50SW5kZXgrKywgMCk7Ci0gICAgc2V0RXZhc01vZGlmaWVycyhl
dmFzLCAwKTsKLX0KLQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi12b2lkIEV2ZW50U2VuZGVy
UHJveHk6OnNlbmRUb3VjaEV2ZW50KEV3a19Ub3VjaF9FdmVudF9UeXBlIGV2ZW50VHlwZSkKLXsK
LSAgICBBU1NFUlQobV90b3VjaFBvaW50cyk7Ci0KLSAgICBFdmFzX09iamVjdCogZXdrVmlldyA9
IG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOwotICAgIGV3
a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQoZXdrVmlldywgZXZlbnRUeXBlLCBtX3RvdWNoUG9pbnRz
LCBldmFzX2tleV9tb2RpZmllcl9nZXQoZXZhc19vYmplY3RfZXZhc19nZXQoZXdrVmlldykpKTsK
LQotICAgIEVpbmFfTGlzdCogbGlzdDsKLSAgICBFaW5hX0xpc3QqIGxpc3ROZXh0OwotICAgIHZv
aWQqIGRhdGE7Ci0gICAgRUlOQV9MSVNUX0ZPUkVBQ0hfU0FGRShtX3RvdWNoUG9pbnRzLCBsaXN0
LCBsaXN0TmV4dCwgZGF0YSkgewotICAgICAgICAgRXdrX1RvdWNoX1BvaW50KiB0b3VjaFBvaW50
ID0gc3RhdGljX2Nhc3Q8RXdrX1RvdWNoX1BvaW50Kj4oZGF0YSk7Ci0gICAgICAgICBBU1NFUlQo
dG91Y2hQb2ludCk7Ci0KLSAgICAgICAgIGlmICgodG91Y2hQb2ludC0+c3RhdGUgPT0gRVZBU19U
T1VDSF9QT0lOVF9VUCkgfHwgKHRvdWNoUG9pbnQtPnN0YXRlID09IEVWQVNfVE9VQ0hfUE9JTlRf
Q0FOQ0VMKSkgewotICAgICAgICAgICAgIGRlbGV0ZSB0b3VjaFBvaW50OwotICAgICAgICAgICAg
IG1fdG91Y2hQb2ludHMgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QobV90b3VjaFBvaW50cywgbGlz
dCk7Ci0gICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICB0b3VjaFBvaW50LT5zdGF0ZSA9IEVW
QVNfVE9VQ0hfUE9JTlRfU1RJTEw7Ci0gICAgIH0KLX0KLQotdm9pZCBFdmVudFNlbmRlclByb3h5
OjphZGRUb3VjaFBvaW50KGludCB4LCBpbnQgeSkKLXsKLSAgICBpbnQgaWQgPSAwOwotICAgIGlm
IChtX3RvdWNoUG9pbnRzKSB7Ci0gICAgICAgIEVpbmFfTGlzdCogbGFzdCA9IGVpbmFfbGlzdF9s
YXN0KG1fdG91Y2hQb2ludHMpOwotICAgICAgICBFd2tfVG91Y2hfUG9pbnQqIHRvdWNoUG9pbnQg
PSBzdGF0aWNfY2FzdDxFd2tfVG91Y2hfUG9pbnQqPihlaW5hX2xpc3RfZGF0YV9nZXQobGFzdCkp
OwotICAgICAgICBBU1NFUlQodG91Y2hQb2ludCk7Ci0KLSAgICAgICAgaWQgPSB0b3VjaFBvaW50
LT5pZCArIDE7Ci0gICAgfQotCi0gICAgRXdrX1RvdWNoX1BvaW50KiB0b3VjaFBvaW50ID0gbmV3
IEV3a19Ub3VjaF9Qb2ludDsKLSAgICB0b3VjaFBvaW50LT5pZCA9IGlkOwotICAgIHRvdWNoUG9p
bnQtPnggPSB4OwotICAgIHRvdWNoUG9pbnQtPnkgPSB5OwotICAgIHRvdWNoUG9pbnQtPnN0YXRl
ID0gRVZBU19UT1VDSF9QT0lOVF9ET1dOOwotCi0gICAgbV90b3VjaFBvaW50cyA9IGVpbmFfbGlz
dF9hcHBlbmQobV90b3VjaFBvaW50cywgdG91Y2hQb2ludCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSkKLXsKLSAg
ICBBU1NFUlQoaW5kZXggPj0gMCAmJiBpbmRleCA8IGVpbmFfbGlzdF9jb3VudChtX3RvdWNoUG9p
bnRzKSk7Ci0KLSAgICBFd2tfVG91Y2hfUG9pbnQqIHRvdWNoUG9pbnQgPSBzdGF0aWNfY2FzdDxF
d2tfVG91Y2hfUG9pbnQqPihlaW5hX2xpc3RfbnRoKG1fdG91Y2hQb2ludHMsIGluZGV4KSk7Ci0g
ICAgQVNTRVJUKHRvdWNoUG9pbnQpOwotCi0gICAgdG91Y2hQb2ludC0+eCA9IHg7Ci0gICAgdG91
Y2hQb2ludC0+eSA9IHk7Ci0gICAgdG91Y2hQb2ludC0+c3RhdGUgPSBFVkFTX1RPVUNIX1BPSU5U
X01PVkU7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2RpZmllcihXS0V2
ZW50TW9kaWZpZXJzIG1vZGlmaWVyLCBib29sIGVuYWJsZSkKLXsKLSAgICBFdmFzX09iamVjdCog
ZXdrVmlldyA9IG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygp
OwotCi0gICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgKHNpemVvZihtb2RpZmll
ck5hbWVzKSAvIHNpemVvZihjaGFyKikpOyArK2luZGV4KSB7Ci0gICAgICAgIGlmIChtb2RpZmll
ciAmICgxIDw8IGluZGV4KSkgewotICAgICAgICAgICAgaWYgKGVuYWJsZSkKLSAgICAgICAgICAg
ICAgICBldmFzX2tleV9tb2RpZmllcl9vbihldmFzX29iamVjdF9ldmFzX2dldChld2tWaWV3KSwg
bW9kaWZpZXJOYW1lc1tpbmRleF0pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGV2YXNfa2V5X21vZGlmaWVyX29mZihldmFzX29iamVjdF9ldmFzX2dldChld2tWaWV3KSwgbW9k
aWZpZXJOYW1lc1tpbmRleF0pOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OnRvdWNoU3RhcnQoKQotewotICAgIHNlbmRUb3VjaEV2ZW50KEVXS19UT1VDSF9T
VEFSVCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dG91Y2hNb3ZlKCkKLXsKLSAgICBz
ZW5kVG91Y2hFdmVudChFV0tfVE9VQ0hfTU9WRSk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXJQcm94
eTo6dG91Y2hFbmQoKQotewotICAgIHNlbmRUb3VjaEV2ZW50KEVXS19UT1VDSF9FTkQpOwotfQot
Ci12b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoQ2FuY2VsKCkKLXsKLSAgICBzZW5kVG91Y2hF
dmVudChFV0tfVE9VQ0hfQ0FOQ0VMKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlclByb3h5OjpjbGVh
clRvdWNoUG9pbnRzKCkKLXsKLSAgICB2b2lkKiBkYXRhID0gMDsKLSAgICBFSU5BX0xJU1RfRlJF
RShtX3RvdWNoUG9pbnRzLCBkYXRhKQotICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8RXdrX1Rv
dWNoX1BvaW50Kj4oZGF0YSk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRv
dWNoUG9pbnQoaW50IGluZGV4KQotewotICAgIEFTU0VSVChpbmRleCA+PSAwICYmIGluZGV4IDwg
ZWluYV9saXN0X2NvdW50KG1fdG91Y2hQb2ludHMpKTsKLQotICAgIEV3a19Ub3VjaF9Qb2ludCog
dG91Y2hQb2ludCA9IHN0YXRpY19jYXN0PEV3a19Ub3VjaF9Qb2ludCo+KGVpbmFfbGlzdF9udGgo
bV90b3VjaFBvaW50cywgaW5kZXgpKTsKLSAgICBBU1NFUlQodG91Y2hQb2ludCk7Ci0KLSAgICB0
b3VjaFBvaW50LT5zdGF0ZSA9IEVWQVNfVE9VQ0hfUE9JTlRfVVA7Ci19Ci0KLXZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6Y2FuY2VsVG91Y2hQb2ludChpbnQgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGlu
ZGV4ID49IDAgJiYgaW5kZXggPCBlaW5hX2xpc3RfY291bnQobV90b3VjaFBvaW50cykpOwotCi0g
ICAgRXdrX1RvdWNoX1BvaW50KiB0b3VjaFBvaW50ID0gc3RhdGljX2Nhc3Q8RXdrX1RvdWNoX1Bv
aW50Kj4oZWluYV9saXN0X250aChtX3RvdWNoUG9pbnRzLCBpbmRleCkpOwotICAgIEFTU0VSVCh0
b3VjaFBvaW50KTsKLQotICAgIHRvdWNoUG9pbnQtPnN0YXRlID0gRVZBU19UT1VDSF9QT0lOVF9D
QU5DRUw7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hQb2ludFJhZGl1cyhp
bnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
I2VuZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRm
b3JtV2ViVmlld0VmbC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdl
YlZpZXdFZmwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmUyZWNiYWM0N2U0
NjVmODExOGU0OWUxMWYzMjBjMTNjNTY3OTYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2Vi
Vmlld0VmbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1XZWJW
aWV3LmgiCi0KLSNpbmNsdWRlICJFV2ViS2l0Mi5oIgotI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1JlZlB0ckNhaXJvLmg+Ci0jaW5jbHVkZSA8V2ViS2l0L1dLSW1h
Z2VDYWlyby5oPgotI2luY2x1ZGUgPFdlYktpdC9XS1ZpZXdFZmwuaD4KLSNpbmNsdWRlIDxjYWly
by5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV1RSIHsKLQotc3Rh
dGljIEVjb3JlX0V2YXMqIGluaXRFY29yZUV2YXMoKQotewotICAgIEVjb3JlX0V2YXMqIGVjb3Jl
RXZhcyA9IDA7Ci0jaWYgZGVmaW5lZChIQVZFX0VDT1JFX1gpCi0gICAgY29uc3QgY2hhciogZW5n
aW5lID0gIm9wZW5nbF94MTEiOwotICAgIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfbmV3KGVuZ2lu
ZSwgMCwgMCwgODAwLCA2MDAsIDApOwotICAgIC8vIEdyYWNlZnVsIGZhbGxiYWNrIHRvIHNvZnR3
YXJlIHJlbmRlcmluZyBpZiBldmFzX2dsIGVuZ2luZSBpcyBub3QgYXZhaWxhYmxlLgotICAgIGlm
ICghZWNvcmVFdmFzKQotI2VuZGlmCi0gICAgZWNvcmVFdmFzID0gZWNvcmVfZXZhc19uZXcoMCwg
MCwgMCwgODAwLCA2MDAsIDApOwotCi0gICAgaWYgKCFlY29yZUV2YXMpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgZWNvcmVfZXZhc190aXRsZV9zZXQoZWNvcmVFdmFzLCAiRUZMIFdlYktpdFRl
c3RSdW5uZXIiKTsKLSAgICBlY29yZV9ldmFzX3Nob3coZWNvcmVFdmFzKTsKLQotICAgIHJldHVy
biBlY29yZUV2YXM7Ci19Ci0KLVBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLUGFn
ZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbiwgY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlv
bnMpCi0gICAgOiBtX29wdGlvbnMob3B0aW9ucykKLXsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gdXNlRml4ZWRMYXlvdXRLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlVzZUZpeGVkTGF5b3V0IikpOwotICAgIG1fdXNpbmdGaXhlZExheW91dCA9IG9wdGlv
bnMudXNlRml4ZWRMYXlvdXQ7Ci0KLSAgICBtX3dpbmRvdyA9IGluaXRFY29yZUV2YXMoKTsKLQot
ICAgIG1fdmlldyA9IEVXS1ZpZXdDcmVhdGUoY29uZmlndXJhdGlvbiwgZWNvcmVfZXZhc19nZXQo
bV93aW5kb3cpLCAvKiBzbWFydCAqLyAwKTsKLQotICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0
KFdLVmlld0dldFBhZ2UoRVdLVmlld0dldFdLVmlldyhtX3ZpZXcpKSwgbV91c2luZ0ZpeGVkTGF5
b3V0KTsKLQotICAgIGlmIChtX3VzaW5nRml4ZWRMYXlvdXQpCi0gICAgICAgIHJlc2l6ZVRvKDgw
MCwgNjAwKTsKLQotICAgIGV3a192aWV3X3RoZW1lX3NldChtX3ZpZXcsIERFRkFVTFRfVEhFTUVf
RElSICIvZGVmYXVsdC5lZGoiKTsKLSAgICBtX3dpbmRvd0lzS2V5ID0gZmFsc2U7Ci0gICAgZXZh
c19vYmplY3Rfc2hvdyhtX3ZpZXcpOwotfQotCi1QbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdl
YlZpZXcoKQotewotICAgIGV2YXNfb2JqZWN0X2RlbChtX3ZpZXcpOwotCi0gICAgZWNvcmVfZXZh
c19mcmVlKG1fd2luZG93KTsKLX0KLQotdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0lz
S2V5KGJvb2wgaXNLZXkpCi17Ci0gICAgbV93aW5kb3dJc0tleSA9IGlzS2V5OwotfQotCi12b2lk
IFBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo
dCwgV2ViVmlld1NpemluZ01vZGUpCi17Ci0gICAgLy8gRklYTUU6IERvbid0IHdlIG5lZWQgdG8g
cmVzaXplIHRoZSB3aW5kb3cgdG9vPwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3ZpZXcsIHdp
ZHRoLCBoZWlnaHQpOwotfQotCi1XS1BhZ2VSZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkKLXsK
LSAgICByZXR1cm4gV0tWaWV3R2V0UGFnZShFV0tWaWV3R2V0V0tWaWV3KG1fdmlldykpOwotfQot
Ci12b2lkIFBsYXRmb3JtV2ViVmlldzo6Zm9jdXMoKQotewotICAgIC8vIEluIGEgZmV3IGNhc2Vz
LCBhbiBpZnJhbWUgbWlnaHQgcmVjZWl2ZSBmb2N1cyBmcm9tIEphdmFTY3JpcHQgYW5kIEV2YXMg
aXMgbm90IGF3YXJlIG9mIGl0IGF0IGFsbAotICAgIC8vIChXZWJDb3JlU3VwcG9ydDo6Zm9jdXNl
ZEZyYW1lQ2hhbmdlZCgpIGRvZXMgbm90IGVtaXQgYW55IG5vdGlmaWNhdGlvbikuIFdlIHRoZW4g
bWFudWFsbHkgcmVtb3ZlIHRoZQotICAgIC8vIGZvY3VzIGZyb20gdGhlIHZpZXcgdG8gbWFrZSB0
aGUgY2FsbCBnaXZlIGZvY3VzIHRvIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCguLi4sIHRydWUpIHRv
IGJlIGVmZmVjdGZ1bC4KLSAgICBpZiAoV0tQYWdlR2V0Rm9jdXNlZEZyYW1lKHBhZ2UoKSkgIT0g
V0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSkpCi0gICAgICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3Nl
dChtX3ZpZXcsIGZhbHNlKTsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV92aWV3LCB0cnVl
KTsKLX0KLQotV0tSZWN0IFBsYXRmb3JtV2ViVmlldzo6d2luZG93RnJhbWUoKQotewotICAgIGlu
dCB4LCB5LCB3aWR0aCwgaGVpZ2h0OwotCi0gICAgZWNvcmVfZXZhc19yZXF1ZXN0X2dlb21ldHJ5
X2dldChtX3dpbmRvdywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwotCi0gICAgcmV0dXJuIFdL
UmVjdE1ha2UoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1XZWJWaWV3
OjpzZXRXaW5kb3dGcmFtZShXS1JlY3QgZnJhbWUsIFdlYlZpZXdTaXppbmdNb2RlKQotewotICAg
IGVjb3JlX2V2YXNfbW92ZV9yZXNpemUobV93aW5kb3csIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5v
cmlnaW4ueSwgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOwotICAgIGV2YXNf
b2JqZWN0X3Jlc2l6ZShtX3ZpZXcsIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0
KTsKLX0KLQotdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmFkZENocm9tZUlucHV0RmllbGQoKQotewot
fQotCi12b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCi17Ci19
Ci0KLXZvaWQgUGxhdGZvcm1XZWJWaWV3OjphZGRUb1dpbmRvdygpCi17Ci19Ci0KLXZvaWQgUGxh
dGZvcm1XZWJWaWV3OjpyZW1vdmVGcm9tV2luZG93KCkKLXsKLX0KLQotdm9pZCBQbGF0Zm9ybVdl
YlZpZXc6Om1ha2VXZWJWaWV3Rmlyc3RSZXNwb25kZXIoKQotewotfQotCi12b2lkIFBsYXRmb3Jt
V2ViVmlldzo6Y2hhbmdlV2luZG93U2NhbGVJZk5lZWRlZChmbG9hdCkKLXsKLX0KLQotV0tSZXRh
aW5QdHI8V0tJbWFnZVJlZj4gUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdEltYWdlKCkK
LXsKLSAgICBpbnQgd2lkdGg7Ci0gICAgaW50IGhlaWdodDsKLSAgICBlY29yZV9ldmFzX2dlb21l
dHJ5X2dldChtX3dpbmRvdywgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsKLSAgICBBU1NFUlQod2lk
dGggPiAwICYmIGhlaWdodCA+IDApOwotCi0gICAgcmV0dXJuIGFkb3B0V0soV0tWaWV3Q3JlYXRl
U25hcHNob3QoRVdLVmlld0dldFdLVmlldyhtX3ZpZXcpKSk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1X
ZWJWaWV3Ojp2aWV3U3VwcG9ydHNPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBj
b25zdAotewotICAgIGlmIChtX29wdGlvbnMudXNlRml4ZWRMYXlvdXQgIT0gb3B0aW9ucy51c2VG
aXhlZExheW91dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgUGxhdGZvcm1XZWJWaWV3OjpkaWRJbml0aWFsaXplQ2xpZW50cygpCi17Ci19Ci0K
LXZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkKGJvb2wp
Ci17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdUUgotCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2VmbC9UZXN0Q29udHJvbGxlckVmbC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2VmbC9UZXN0Q29udHJvbGxlckVmbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGRlZjQyN2NhMzIwYjY0ZjM0OGFjNDY5YWEzZWZiZWQ1Mjc4ZDFiN2IuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9lZmwvVGVzdENvbnRyb2xsZXJFZmwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIlBs
YXRmb3JtV2ViVmlldy5oIgotI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCi0jaW5jbHVkZSA8
RWNvcmUuaD4KLSNpbmNsdWRlIDxFdmFzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRl
IDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdUUiB7Ci0K
LXN0YXRpYyBFY29yZV9UaW1lciogdGltZXIgPSAwOwotCi1zdGF0aWMgRWluYV9Cb29sIHRpbWVy
RmlyZWQodm9pZCopCi17Ci0gICAgdGltZXIgPSAwOwotICAgIGVjb3JlX21haW5fbG9vcF9xdWl0
KCk7Ci0gICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKLX0KLQotdm9pZCBUZXN0Q29u
dHJvbGxlcjo6bm90aWZ5RG9uZSgpCi17Ci0gICAgaWYgKCF0aW1lcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZWNvcmVfdGltZXJfZGVsKHRpbWVyKTsKLSAgICB0aW1lciA9IDA7Ci0gICAgZWNv
cmVfbWFpbl9sb29wX3F1aXQoKTsKLX0KLQotdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1J
bml0aWFsaXplKCkKLXsKLSAgICBjb25zdCBjaGFyKiBpc0RlYnVnZ2luZyA9IGdldGVudigiV0VC
X1BST0NFU1NfQ01EX1BSRUZJWCIpOwotICAgIGlmIChpc0RlYnVnZ2luZyAmJiAqaXNEZWJ1Z2dp
bmcpIHsKLSAgICAgICAgbV91c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IGZhbHNlOwotICAg
ICAgICBtX2ZvcmNlTm9UaW1lb3V0ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLVdLUHJlZmVyZW5jZXNS
ZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUHJlZmVyZW5jZXMoKQotewotICAgIHJldHVybiBX
S1BhZ2VHcm91cEdldFByZWZlcmVuY2VzKG1fcGFnZUdyb3VwLmdldCgpKTsKLX0KLQotdm9pZCBU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLX0KLQotdm9pZCBUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1SdW5VbnRpbChib29sJiBjb25kaXRpb24sIGRvdWJsZSB0aW1lb3V0KQot
ewotICAgIGlmICh0aW1lb3V0IDw9IDApIHsKLSAgICAgICAgLy8gTmV2ZXIgdGltZW91dCBpZiB3
ZSBhcmUgZGVidWdnaW5nIG9yIG5vdCBtZWFudCB0byB0aW1lb3V0LgotICAgICAgICB3aGlsZSAo
IWNvbmRpdGlvbikKLSAgICAgICAgICAgIGVjb3JlX21haW5fbG9vcF9pdGVyYXRlKCk7Ci0KLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB0aW1lciA9IGVjb3JlX3RpbWVyX2xvb3BfYWRkKHRp
bWVvdXQsIHRpbWVyRmlyZWQsIDApOwotICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOwotfQot
Ci1zdGF0aWMgY29uc3QgY2hhciogZ2V0RW52aXJvbm1lbnRWYXJpYWJsZU9yRXhpdChjb25zdCBj
aGFyKiB2YXJpYWJsZU5hbWUpCi17Ci0gICAgY29uc3QgY2hhciogdmFsdWUgPSBnZXRlbnYodmFy
aWFibGVOYW1lKTsKLSAgICBpZiAoIXZhbHVlKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAi
JXMgZW52aXJvbm1lbnQgdmFyaWFibGUgbm90IGZvdW5kXG4iLCB2YXJpYWJsZU5hbWUpOwotICAg
ICAgICBleGl0KDApOwotICAgIH0KLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotdm9pZCBUZXN0
Q29udHJvbGxlcjo6aW5pdGlhbGl6ZUluamVjdGVkQnVuZGxlUGF0aCgpCi17Ci0gICAgY29uc3Qg
Y2hhciogYnVuZGxlUGF0aCA9IGdldEVudmlyb25tZW50VmFyaWFibGVPckV4aXQoIlRFU1RfUlVO
TkVSX0lOSkVDVEVEX0JVTkRMRV9GSUxFTkFNRSIpOwotICAgIG1faW5qZWN0ZWRCdW5kbGVQYXRo
LmFkb3B0KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJ1bmRsZVBhdGgpKTsKLX0KLQot
dm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZVRlc3RQbHVnaW5EaXJlY3RvcnkoKQotewot
ICAgIGNvbnN0IGNoYXIqIHBsdWdpblBhdGggPSBnZXRFbnZpcm9ubWVudFZhcmlhYmxlT3JFeGl0
KCJURVNUX1JVTk5FUl9QTFVHSU5fUEFUSCIpOwotICAgIG1fdGVzdFBsdWdpbkRpcmVjdG9yeS5h
ZG9wdChXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwbHVnaW5QYXRoKSk7Ci19Ci0KLXZv
aWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQotewotfQotCi12
b2lkIFRlc3RDb250cm9sbGVyOjpzZXRIaWRkZW4oYm9vbCBoaWRkZW4pCi17Ci0gICAgUGxhdGZv
cm1XS1ZpZXcgdmlldyA9IG1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOwotCi0gICAgaWYg
KCF2aWV3KSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHZpZXcgaXMgbnVsbC5c
biIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGhpZGRlbikKLSAgICAgICAg
ZXZhc19vYmplY3RfaGlkZSh2aWV3KTsKLSAgICBlbHNlCi0gICAgICAgIGV2YXNfb2JqZWN0X3No
b3codmlldyk7Ci19Ci0KLXZvaWQgVGVzdENvbnRyb2xsZXI6OnJ1bk1vZGFsKFBsYXRmb3JtV2Vi
VmlldyopCi17Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IHRoaXMgdG8gdGVzdCBz
aG93TW9kYWxEaWFsb2cuCi19Ci0KLWNvbnN0IGNoYXIqIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bUxpYnJhcnlQYXRoRm9yVGVzdGluZygpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBi
b29sIHBhdGhDb250YWlucyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMLCBjb25zdCBjaGFy
KiBzdWJzdHJpbmcpCi17Ci0gICAgU3RyaW5nIHBhdGgocGF0aE9yVVJMLmNfc3RyKCkpOwotICAg
IHJldHVybiBwYXRoLmNvbnRhaW5zKHN1YnN0cmluZyk7IC8vIENhc2UtaW5zZW5zaXRpdmUuCi19
Ci0KLXN0YXRpYyBib29sIHNob3VsZFVzZUZpeGVkTGF5b3V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBw
YXRoT3JVUkwpCi17Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChwYXRo
Q29udGFpbnMocGF0aE9yVVJMLCAic3RpY2t5LyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkws
ICJzdGlja3lcXCIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rl
c3RPcHRpb25zRm9yVGVzdChUZXN0T3B0aW9ucyYgdGVzdE9wdGlvbnMsIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBwYXRoT3JVUkwpIGNvbnN0Ci17Ci0gICAgdGVzdE9wdGlvbnMudXNlRml4ZWRMYXlvdXQg
fD0gc2hvdWxkVXNlRml4ZWRMYXlvdXQocGF0aE9yVVJMKTsKLX0KLQotdm9pZCBUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1Db25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYp
Ci17Ci0gICAgV0tQYWdlU2V0QXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KG1haW5XZWJWaWV3
KCktPnBhZ2UoKSwgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFRlc3RSdW5u
ZXJFRkwiKSk7Ci19Ci0KLXZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRQcmVmZXJl
bmNlc1RvQ29uc2lzdGVudFZhbHVlcygpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdUUgpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvbWFpbi5jcHAgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2VmbC9tYWluLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NmI1MDY2OWJjMDRkNjI4MGE5NDFkNDhiNzJmMjQyOTY3MWZiOGVkOC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Vm
bC9tYWluLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
bmNsdWRlICJFV2ViS2l0Mi5oIgotI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCi0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2lmZGVmIEhBVkVf
RUNPUkVfWAotI2luY2x1ZGUgPFgxMS9YbGliLmg+Ci0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMv
WGV4dC5oPgotCi1zdGF0aWMgaW50IGR1bW15RXh0ZW5zaW9uRXJyb3JIYW5kbGVyKERpc3BsYXkq
LCBfWGNvbnN0IGNoYXIqLCBfWGNvbnN0IGNoYXIqKQotewotICAgIHJldHVybiAwOwotfQotI2Vu
ZGlmCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBXVEZJbnN0YWxs
UmVwb3J0QmFja3RyYWNlT25DcmFzaEhvb2soKTsKLQotI2lmZGVmIEhBVkVfRUNPUkVfWAotICAg
IFhTZXRFeHRlbnNpb25FcnJvckhhbmRsZXIoZHVtbXlFeHRlbnNpb25FcnJvckhhbmRsZXIpOwot
I2VuZGlmCi0KLSAgICBpZiAoIWV3a19pbml0KCkpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAg
ewotICAgICAgICAvLyBUZXN0IGNvbnRyb2xsZXIgaGFzIG93biBwdHIgY29udGFpbmluZyBXZWJW
aWV3IGFuZCBXZWJWaWV3IG11c3QgYmUgZGVsZXRlZAotICAgICAgICAvLyBiZWZvcmUgaXRzIGV2
YXMgb2JqZWN0IGlzIGRlbGV0ZWQuIENhbGwgb2YgZXdrX3NodXRkb3duKCkgbGVhZHMgdG8gZXZh
cyBvYmplY3RzIGRlbGV0aW9uLgotCi0gICAgICAgIFdUUjo6VGVzdENvbnRyb2xsZXIgY29udHJv
bGxlcihhcmdjLCBjb25zdF9jYXN0PGNvbnN0IGNoYXIqKj4oYXJndikpOwotICAgIH0KLQotICAg
IGV3a19zaHV0ZG93bigpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xz
L2VmbC9pbnN0YWxsLWRlcGVuZGVuY2llcyBiL1Rvb2xzL2VmbC9pbnN0YWxsLWRlcGVuZGVuY2ll
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNzIwMzhjYzk5MDE1OWJkYzNjZjIzOGY3
ZjBhY2JjMjQzMGY0YWZhMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Ub29scy9lZmwvaW5zdGFsbC1kZXBlbmRlbmNpZXMKKysrIC9kZXYvbnVsbApAQCAt
MSwxMzUgKzAsMCBAQAotIyEvYmluL2Jhc2gKLQotIyBUaGlzIHNjcmlwdCBuZWVkcyB0byBiZSBy
dW4gd2l0aCByb290IHJpZ2h0cy4KLWlmIFsgJFVJRCAtbmUgMCBdOyB0aGVuCi0gICAgc3VkbyAk
MAotICAgIGV4aXQgMAotZmkKLQotZnVuY3Rpb24gcHJpbnROb3RTdXBwb3J0ZWRNZXNzYWdlQW5k
RXhpdCgpIHsKLSAgICBlY2hvCi0gICAgZWNobyAiQ3VycmVudGx5IHRoaXMgc2NyaXB0IG9ubHkg
d29ya3MgZm9yIGRpc3RyaWJ1dGlvbnMgc3VwcG9ydGluZyBhcHQtZ2V0LiIKLSAgICBlY2hvICJQ
bGVhc2UgYWRkIHN1cHBvcnQgZm9yIHlvdXIgZGlzdHJpYnV0aW9uLiIKLSAgICBlY2hvCi0gICAg
ZXhpdCAxCi19Ci0KLWZ1bmN0aW9uIGNoZWNrQ21ha2VWZXJzaW9uKCkgewotICAgIENNQUtFX1ZF
UlNJT049YGNtYWtlIC0tdmVyc2lvbmAKLQotICAgIFZFUlNJT049YGVjaG8gIiRDTUFLRV9WRVJT
SU9OIiB8IGF3ayAne3NwbGl0KCQzLG51bSwiLiIpOwotICAgIGlmICghKG51bVsxXT4yIHx8IG51
bVsyXT44IHx8IG51bVszXT49MTApKQotICAgICAgICBwcmludGYgJDN9J2AKLQotICAgIGlmIFsg
LW4gIiR7VkVSU0lPTn0iIF07IHRoZW4KLSAgICAgICAgZWNobyAiV2FybmluZzogQ01ha2UgdmVy
c2lvbiBkZXRlY3RlZCAoJHtWRVJTSU9OfSkgaXMgbG93ZXIgdGhlbiAyLjguMTAuIgotICAgICAg
ICBlY2hvICIgIFRoaXMgd2lsbCBwcm9iYWJseSBjYXVzZSBlcnJvcnMsIGFzIG9sZGVyIHZlcnNp
b24gZGlkbid0IHN1cHBvcnQgQ01BS0VfTklOSkFfRk9SQ0VfUkVTUE9OU0VfRklMRSwiCi0gICAg
ICAgIGVjaG8gIiAgd2hpY2ggaXMgbmVlZGVkIG5vdyBmb3IgYnVpbGRpbmcuIChsb29rIGF0OiBo
dHRwczovL2xpc3RzLndlYmtpdC5vcmcvcGlwZXJtYWlsL3dlYmtpdC1ndGsvMjAxNC1NYXJjaC8w
MDE4MDkuaHRtbCApIgotICAgICAgICBlY2hvICIiCi0KLSAgICAgICAgaWYgWyAtZiAiL2V0Yy9p
c3N1ZSIgXTsgdGhlbgotICAgICAgICAgICAgdWJ1bnR1X3ZlcnNpb249YGNhdCAvZXRjL2lzc3Vl
YAotICAgICAgICAgICAgaWYgW1sgJHVidW50dV92ZXJzaW9uID09ICpVYnVudHVcIDEyLjA0KiBd
XTsgdGhlbgotICAgICAgICAgICAgICAgIGVjaG8gIiAgRm9yIFVidW50dSAxMi4wNCBvciAxMi4x
MCBZb3UgbWlnaHQgY29uc2lkZXIgYWRkaW5nIHBwYSBmcm9tIGh0dHBzOi8vbGF1bmNocGFkLm5l
dC9+a2FsYWtyaXMvK2FyY2hpdmUvdWJ1bnR1L2NtYWtlIgotICAgICAgICAgICAgZmkKLSAgICAg
ICAgZmkKLSAgICBmaQotfQotCi1mdW5jdGlvbiBjaGVja0luc3RhbGxlciB7Ci0gICAgIyBhcHQt
Z2V0IC0gRGViaWFuIGJhc2VkIGRpc3RyaWJ1dGlvbnMKLSAgICBhcHQtZ2V0IC0tdmVyc2lvbiAm
PiAvZGV2L251bGwKLSAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KLSAgICAgICAgaW5zdGFsbERl
cGVuZGVuY2llc1dpdGhBcHQKLSAgICAgICAgY2hlY2tDbWFrZVZlcnNpb247Ci0gICAgICAgIGV4
aXQgMAotICAgIGZpCi0KLSAgICBwcmludE5vdFN1cHBvcnRlZE1lc3NhZ2VBbmRFeGl0Ci19Ci0K
LSMgSWYgdGhlIHBhY2thZ2UgJDEgaXMgYXZhaWxhYmxlLCBwcmludHMgaXQuIE90aGVyd2lzZSBw
cmludHMgJDIuCi0jIFVzZWZ1bCBmb3IgaGFuZGxpbmcgd2hlbiBhIHBhY2thZ2UgaXMgcmVuYW1l
ZCBvbiBuZXcgdmVyc2lvbnMgb2YgRGViaWFuL1VidW50dS4KLWZ1bmN0aW9uIGFwdElmRWxzZSB7
Ci0gICAgaWYgYXB0LWNhY2hlIHNob3cgJDEgJj4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgZWNo
byAkMQotICAgIGVsc2UKLSAgICAgICAgZWNobyAkMgotICAgIGZpCi19Ci0KLWZ1bmN0aW9uIGlu
c3RhbGxEZXBlbmRlbmNpZXNXaXRoQXB0IHsKLSAgICAjIFRoZXNlIGFyZSBkZXBlbmRlbmNpZXMg
bmVjZXNzYXJ5IGZvciBidWlsZGluZyBXZWJLaXRFRkwuCi0gICAgYXB0LWdldCBpbnN0YWxsIFwK
LSAgICAgICAgYmlzb24gXAotICAgICAgICBjbWFrZSBcCi0gICAgICAgIGRveHlnZW4gXAotICAg
ICAgICBmbGV4IFwKLSAgICAgICAgZysrIFwKLSAgICAgICAgZ2VvY2x1ZS0yLjAgXAotICAgICAg
ICBncGVyZiBcCi0gICAgICAgIGd0ay1kb2MtdG9vbHMgXAotICAgICAgICBsaWJhdGsxLjAtZGV2
IFwKLSAgICAgICAgbGliZGJ1cy0xLWRldiBcCi0gICAgICAgIGxpYmVkaXQtZGV2IFwKLSAgICAg
ICAgbGliZW5jaGFudC1kZXYgXAotICAgICAgICBsaWJlc3BlYWstZGV2IFwKLSAgICAgICAgbGli
ZmFhZC1kZXYgXAotICAgICAgICBsaWJmZmktZGV2IFwKLSAgICAgICAgbGliZnJlZXR5cGU2LWRl
diBcCi0gICAgICAgICQoYXB0SWZFbHNlIGxpYmdjcnlwdDIwLWRldiBsaWJnY3J5cHQxMS1kZXYp
IFwKLSAgICAgICAgJChhcHRJZkVsc2UgbGliZ2VvY2x1ZS0yLWRldiBsaWJnZW9jbHVlLWRldikg
XAotICAgICAgICBsaWJnaWYtZGV2IFwKLSAgICAgICAgbGliZ2wxLW1lc2EtZGV2IFwKLSAgICAg
ICAgbGliZ3BnLWVycm9yLWRldiBcCi0gICAgICAgIGxpYmh5cGhlbi1kZXYgXAotICAgICAgICBs
aWJpY3UtZGV2IFwKLSAgICAgICAgbGlianBlZy1kZXYgXAotICAgICAgICBsaWJqc29uLWdsaWIt
ZGV2IFwKLSAgICAgICAgbGlibHVhNS4xLTAtZGV2IFwKLSAgICAgICAgbGlibHVhaml0LTUuMS1k
ZXYgXAotICAgICAgICBsaWJtcGcxMjMtZGV2IFwKLSAgICAgICAgbGlib3JjLTAuNC1kZXYgXAot
ICAgICAgICBsaWJvc21lc2E2LWRldiBcCi0gICAgICAgIGxpYnAxMS1raXQtZGV2IFwKLSAgICAg
ICAgJChhcHRJZkVsc2UgbGlicG5nLWRldiBsaWJwbmcxMi1kZXYpIFwKLSAgICAgICAgbGlicG9w
cGxlci1jcHAtZGV2IFwKLSAgICAgICAgbGlicHVsc2UtZGV2IFwKLSAgICAgICAgbGlicmF3LWRl
diBcCi0gICAgICAgIGxpYnJzdmcyLWRldiBcCi0gICAgICAgIGxpYnNwZWN0cmUtZGV2IFwKLSAg
ICAgICAgbGlic3FsaXRlMy1kZXYgXAotICAgICAgICBsaWJzc2wtZGV2IFwKLSAgICAgICAgbGli
dGhlb3JhLWRldiBcCi0gICAgICAgIGxpYnRpZmY1LWRldiBcCi0gICAgICAgIGxpYnVkZXYtZGV2
IFwKLSAgICAgICAgbGlidm9yYmlzLWRldiBcCi0gICAgICAgIGxpYndlYnAtZGV2IFwKLSAgICAg
ICAgbGlieGNvbXBvc2l0ZS1kZXYgXAotICAgICAgICBsaWJ4Y3Vyc29yLWRldiBcCi0gICAgICAg
IGxpYnhpbmVyYW1hLWRldiBcCi0gICAgICAgIGxpYnhyYW5kci1kZXYgXAotICAgICAgICBsaWJ4
cmVuZGVyLWRldiBcCi0gICAgICAgIGxpYnhzcy1kZXYgXAotICAgICAgICBsaWJ4dC1kZXYgXAot
ICAgICAgICBsaWJ4dHN0LWRldiBcCi0gICAgICAgIG5pbmphLWJ1aWxkIFwKLSAgICAgICAgcmFn
ZWwgXAotICAgICAgICBydWJ5IFwKLSAgICAgICAgc3VidmVyc2lvbiBcCi0gICAgICAgIHgxMXBy
b3RvLXByaW50LWRldgotCi0gICAgIyBUaGVzZSBhcmUgZGVwZW5kZW5jaWVzIG5lY2Vzc2FyeSBm
b3IgYnVpbGRpbmcgV2ViS2l0RUZMIGFuZCBub3QgYXZhaWxhYmxlIG9uIEFSTTY0LgotICAgIGFw
dC1nZXQgaW5zdGFsbCBcCi0gICAgICAgIGx1YWppdAotCi0gICAgIyBUaGVzZSBhcmUgZGVwZW5k
ZW5jaWVzIG5lY2Vzc2FyeSBmb3IgcnVubmluZyB0ZXN0cy4KLSAgICBhcHQtZ2V0IGluc3RhbGwg
XAotICAgICAgICBhcGFjaGUyIFwKLSAgICAgICAgJChhcHRJZkVsc2UgbGliYXBhY2hlMi1tb2Qt
cGhwNy4wIGxpYmFwYWNoZTItbW9kLXBocDUpIFwKLSAgICAgICAgbGlicnVieSBcCi0gICAgICAg
IHh2ZmIKLX0KLQotY2hlY2tJbnN0YWxsZXIKLQpkaWZmIC0tZ2l0IGEvVG9vbHMvZWZsL2poYnVp
bGQtb3B0aW9uYWwubW9kdWxlcyBiL1Rvb2xzL2VmbC9qaGJ1aWxkLW9wdGlvbmFsLm1vZHVsZXMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZTM3MzI0MTJkNzNhN2FlMTVmNDU5OWE4
OTIzODJkZWRjYTA4NzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvVG9vbHMvZWZsL2poYnVpbGQtb3B0aW9uYWwubW9kdWxlcworKysgL2Rldi9udWxsCkBA
IC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIG1vZHVsZXNl
dCBTWVNURU0gIm1vZHVsZXNldC5kdGQiPgotPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hz
bCIgaHJlZj0ibW9kdWxlc2V0LnhzbCI/PgotPG1vZHVsZXNldD4KLQotICA8cmVwb3NpdG9yeSB0
eXBlPSJ0YXJiYWxsIiBuYW1lPSJmdHAuZ25vbWUub3JnIgotICAgICAgaHJlZj0iaHR0cDovL2Z0
cC5nbm9tZS5vcmciLz4KLQotICA8YXV0b3Rvb2xzIGlkPSJhdC1zcGkyLWNvcmUiCi0gICAgICAg
ICAgYXV0b2dlbmFyZ3M9Ii0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIj4KLSAgICA8YnJhbmNoIG1v
ZHVsZT0icHViL0dOT01FL3NvdXJjZXMvYXQtc3BpMi1jb3JlLzIuMTAvYXQtc3BpMi1jb3JlLTIu
MTAuMC50YXIueHoiIHZlcnNpb249IjIuMTAuMCIKLSAgICAgICAgICByZXBvPSJmdHAuZ25vbWUu
b3JnIgotICAgICAgICAgIGhhc2g9InNoYTI1Njo5NjQxNTVjNzU3NDIyMGEwMGUxMWUxYzBkOTFm
MmQzMDE3ZWQ2MDM5MjBlYjEzMzNmZjljYmRiNmEyMjc0NGRiIj4KLSAgICA8L2JyYW5jaD4KLSAg
ICA8ZGVwZW5kZW5jaWVzPgotICAgICAgPGRlcCBwYWNrYWdlPSJnbGliIi8+Ci0gICAgPC9kZXBl
bmRlbmNpZXM+Ci0gIDwvYXV0b3Rvb2xzPgotCi0gIDxhdXRvdG9vbHMgaWQ9ImF0LXNwaTItYXRr
Ij4KLSAgICA8YnJhbmNoIG1vZHVsZT0icHViL0dOT01FL3NvdXJjZXMvYXQtc3BpMi1hdGsvMi4x
MC9hdC1zcGkyLWF0ay0yLjEwLjAudGFyLnh6IiB2ZXJzaW9uPSIyLjEwLjAiCi0gICAgICAgICAg
ICByZXBvPSJmdHAuZ25vbWUub3JnIgotICAgICAgICAgICAgaGFzaD0ic2hhMjU2OmRlYTdmZjJm
OWJjOWJiZGIwMzUxMTEyNjE2ZDczOGRlNzE4YjU1NzM5Y2QyNTExYWZlY2FjNTE2MDRjMzFhOTQi
PgotICAgIDwvYnJhbmNoPgotICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICA8ZGVwIHBhY2thZ2U9
ImdsaWIiLz4KLSAgICAgIDxkZXAgcGFja2FnZT0iYXRrIi8+Ci0gICAgICA8ZGVwIHBhY2thZ2U9
ImF0LXNwaTItY29yZSIvPgotICAgIDwvZGVwZW5kZW5jaWVzPgotICA8L2F1dG90b29scz4KLQot
PC9tb2R1bGVzZXQ+CmRpZmYgLS1naXQgYS9Ub29scy9lZmwvamhidWlsZC5tb2R1bGVzIGIvVG9v
bHMvZWZsL2poYnVpbGQubW9kdWxlcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzll
OTk0MmNkMmNmMThmZmE4YWZiN2ZhYTBkNzI3ZmMwZWQyNTYxYi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9lZmwvamhidWlsZC5tb2R1bGVzCisr
KyAvZGV2L251bGwKQEAgLTEsMzE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFE
T0NUWVBFIG1vZHVsZXNldCBTWVNURU0gIm1vZHVsZXNldC5kdGQiPgotPD94bWwtc3R5bGVzaGVl
dCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0ibW9kdWxlc2V0LnhzbCI/PgotPG1vZHVsZXNldD4KLQot
ICA8bWV0YW1vZHVsZSBpZD0id2Via2l0ZWZsLXRlc3RpbmctZGVwZW5kZW5jaWVzIj4KLSAgICA8
ZGVwZW5kZW5jaWVzPgotICAgICAgPGRlcCBwYWNrYWdlPSJjYWlybyIvPgotICAgICAgPGRlcCBw
YWNrYWdlPSJmb250cyIvPgotICAgICAgPGRlcCBwYWNrYWdlPSJkaWN0cyIvPgotICAgICAgPGRl
cCBwYWNrYWdlPSJmb250Y29uZmlnIi8+Ci0gICAgICA8ZGVwIHBhY2thZ2U9ImZyZWV0eXBlNiIv
PgotICAgICAgPGRlcCBwYWNrYWdlPSJoYXJmYnV6eiIvPgotICAgICAgPGRlcCBwYWNrYWdlPSJn
bGliIi8+Ci0gICAgICA8ZGVwIHBhY2thZ2U9ImdsaWItbmV0d29ya2luZyIvPgotICAgICAgPGRl
cCBwYWNrYWdlPSJsaWJzb3VwIi8+Ci0gICAgICA8ZGVwIHBhY2thZ2U9ImVmbCIvPgotICAgICAg
PGRlcCBwYWNrYWdlPSJsaWJ4bWwyIi8+Ci0gICAgICA8ZGVwIHBhY2thZ2U9ImxpYnhzbHQiLz4K
LSAgICAgIDxkZXAgcGFja2FnZT0iZ3N0cmVhbWVyIi8+Ci0gICAgICA8ZGVwIHBhY2thZ2U9Imdz
dC1wbHVnaW5zLWJhc2UiLz4KLSAgICAgIDxkZXAgcGFja2FnZT0iZ3N0LXBsdWdpbnMtZ29vZCIv
PgotICAgICAgPGRlcCBwYWNrYWdlPSJnc3QtcGx1Z2lucy1iYWQiLz4KLSAgICAgIDxkZXAgcGFj
a2FnZT0iZ3N0LWxpYmF2Ii8+Ci0gICAgICA8ZGVwIHBhY2thZ2U9ImF0ayIvPgotICAgICAgPGRl
cCBwYWNrYWdlPSJvcGVud2VicnRjIi8+Ci0gICAgPC9kZXBlbmRlbmNpZXM+Ci0gIDwvbWV0YW1v
ZHVsZT4KLQotICA8aW5jbHVkZSBocmVmPSJqaGJ1aWxkLW9wdGlvbmFsLm1vZHVsZXMiLz4KLQot
ICA8cmVwb3NpdG9yeSB0eXBlPSJ0YXJiYWxsIiBuYW1lPSJnaXRodWIuY29tIgotICAgICAgaHJl
Zj0iaHR0cHM6Ly9naXRodWIuY29tIi8+Ci0gIDxyZXBvc2l0b3J5IHR5cGU9InRhcmJhbGwiIG5h
bWU9InNvdXJjZXdhcmUub3JnIgotICAgICAgaHJlZj0iZnRwOi8vc291cmNld2FyZS5vcmciLz4K
LSAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIgbmFtZT0iZnRwLmdub21lLm9yZyIKLSAgICAg
IGhyZWY9Imh0dHA6Ly9mdHAuZ25vbWUub3JnIi8+Ci0gIDxyZXBvc2l0b3J5IHR5cGU9ImdpdCIg
bmFtZT0iZ2l0Lmdub21lLm9yZyIKLSAgICAgIGhyZWY9ImdpdDovL2dpdC5nbm9tZS5vcmcvIi8+
Ci0gIDxyZXBvc2l0b3J5IHR5cGU9InRhcmJhbGwiIG5hbWU9ImNhaXJvZ3JhcGhpY3Mub3JnIgot
ICAgICAgaHJlZj0iaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnIi8+Ci0gIDxyZXBvc2l0b3J5IHR5
cGU9InRhcmJhbGwiIG5hbWU9ImZyZWVkZXNrdG9wLm9yZyIKLSAgICAgIGhyZWY9Imh0dHA6Ly93
d3cuZnJlZWRlc2t0b3Aub3JnIi8+Ci0gIDxyZXBvc2l0b3J5IHR5cGU9InRhcmJhbGwiIG5hbWU9
Im5pY2UuZnJlZWRlc2t0b3Aub3JnIgotICAgICAgaHJlZj0iaHR0cDovL25pY2UuZnJlZWRlc2t0
b3Aub3JnLyIvPgotICA8cmVwb3NpdG9yeSB0eXBlPSJ0YXJiYWxsIiBuYW1lPSJlbmxpZ2h0ZW5t
ZW50LmZyIgotICAgICAgaHJlZj0iaHR0cDovL2dpdC5lbmxpZ2h0ZW5tZW50LmZyL2NnaXQuY2dp
L3N2bi8iLz4KLSAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIgbmFtZT0ieG1sc29mdC5vcmci
Ci0gICAgICBocmVmPSJmdHA6Ly94bWxzb2Z0Lm9yZyIvPgotICA8cmVwb3NpdG9yeSB0eXBlPSJ0
YXJiYWxsIiBuYW1lPSJkb3dubG9hZC5lbmxpZ2h0ZW5tZW50Lm9yZyIKLSAgICAgIGhyZWY9Imh0
dHA6Ly9kb3dubG9hZC5lbmxpZ2h0ZW5tZW50Lm9yZyIvPgotICA8cmVwb3NpdG9yeSB0eXBlPSJ0
YXJiYWxsIiBuYW1lPSJnc3RyZWFtZXIiCi0gICAgICBocmVmPSJodHRwOi8vZ3N0cmVhbWVyLmZy
ZWVkZXNrdG9wLm9yZy9zcmMvIi8+Ci0KLSAgPGF1dG90b29scyBpZD0iY2Fpcm8iIGF1dG9nZW4t
c2g9ImNvbmZpZ3VyZSIKLSAgICAgICAgICAgICBtYWtlYXJncz0iQ0ZMQUdTPSctZm5vLWx0bycg
Q1hYRkxBR1M9Jy1mbm8tbHRvJyBMREZMQUdTPSctZm5vLWx0byciPgotICAgIDxkZXBlbmRlbmNp
ZXM+Ci0gICAgICA8ZGVwIHBhY2thZ2U9ImZvbnRjb25maWciLz4KLSAgICAgIDxkZXAgcGFja2Fn
ZT0icGl4bWFuIi8+Ci0gICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgPGJyYW5jaCBtb2R1bGU9InJl
bGVhc2VzL2NhaXJvLTEuMTQuMi50YXIueHoiIHZlcnNpb249IjEuMTQuMiIKLSAgICAgICAgICAg
IHJlcG89ImNhaXJvZ3JhcGhpY3Mub3JnIgotICAgICAgICAgICAgaGFzaD0ic2hhMjU2OmM5MTlk
OTk5ZGRiMWJiYmVjZDRiYmU2NTI5OWNhMmFiZDIwNzljN2UxM2QyMjQ1Nzc4OTVhZmE3MDA1ZWNj
ZWIiCi0gICAgICAgICAgICBtZDVzdW09ImUxY2RmYWYxYzZjOTk1YzRkNGM1NGUwNzIxNWIwMTE4
Ij4KLSAgICA8L2JyYW5jaD4KLSAgPC9hdXRvdG9vbHM+Ci0KLSAgPCEtLSBGSVhNRTogUGl4bWFu
IDAuMzIuNiBpc24ndCBidWlsZGFibGUgd2l0aCBDbGFuZywgYnV0IGRpc2FibGUtbW14IG9wdGlv
biBmaXhlcwotICAgICAgICAgICAgICB0aGUgYnVpbGQuIFRoaXMgd29ya2Fyb3VuZCBjYW4gYmUg
cmVtb3ZlZCBvbmNlIHRoZSBvcmlnaW5hbCBidWcgaXMgZml4ZWQuCi0gICAgICAgICAgICAgIERl
dGFpbHMgY2FuIGJlIGZvdW5kIGhlcmU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTE0NDEgLS0+Ci0gIDxhdXRvdG9vbHMgaWQ9InBpeG1hbiIgYXV0b2dlbi1zaD0i
Y29uZmlndXJlIgotICAgICAgICAgICAgIGF1dG9nZW5hcmdzPSItLWVuYWJsZS1ndGs9bm8gLS1k
aXNhYmxlLWFybS1pd21teHQgLS1kaXNhYmxlLW1teCI+Ci0gICAgPGJyYW5jaCBtb2R1bGU9InJl
bGVhc2VzL3BpeG1hbi0wLjMyLjYudGFyLmd6IiB2ZXJzaW9uPSIwLjMyLjYiCi0gICAgICAgICAg
ICByZXBvPSJjYWlyb2dyYXBoaWNzLm9yZyIKLSAgICAgICAgICAgIGhhc2g9InNoYTI1NjozZGZl
ZDEzYjgwNjBlYWRhYmYwYTQ5NDVjNzA0NWI3NzkzY2M3ZTNlOTEwZTc0OGE4YmIwZjBkYzNlNzk0
OTA0IgotICAgICAgICAgICAgbWQ1c3VtPSIzYTMwODU5NzE5YTQxYmQwZjVjY2NmZmJmZWZkZDRj
MiI+Ci0gICAgPC9icmFuY2g+Ci0gIDwvYXV0b3Rvb2xzPgotCi0gIDxhdXRvdG9vbHMgaWQ9ImZv
bnRzIiBzdXBwb3J0cy1ub24tc3JjZGlyLWJ1aWxkcz0ibm8iCi0gICAgICAgICAgICAgc2tpcC1h
dXRvZ2VuPSJ0cnVlIj4KLSAgICA8YnJhbmNoIG1vZHVsZT0ibXJvYmluc29uL3dlYmtpdGd0ay10
ZXN0LWZvbnRzL2FyY2hpdmUvMC4wLjUudGFyLmd6IiB2ZXJzaW9uPSIwLjAuNSIKLSAgICAgICAg
ICAgIGNoZWNrb3V0ZGlyPSJ3ZWJraXRndGstdGVzdC1mb250cyIKLSAgICAgICAgICAgIHJlcG89
ImdpdGh1Yi5jb20iCi0gICAgICAgICAgICBoYXNoPSJzaGEyNTY6MzY5YWVhOWUxOGFhMWEyMzQ0
MDA5NzZjMGE4MTM1Yjk3MDk4MDVjZTRiNjVhM2I0NzRhOGQwZWUwZTI5OGYzNCIKLSAgICAgICAg
ICAgIG1kNXN1bT0iMzk4MDJiNDg1ZjUxMzg0MjcyNGU2Y2ZkMjY1MzM1YmIiIHNpemU9IjIyNTky
ODQ3Ij4KLSAgICA8L2JyYW5jaD4KLSAgPC9hdXRvdG9vbHM+Ci0KLSAgPGF1dG90b29scyBpZD0i
ZGljdHMiIHN1cHBvcnRzLW5vbi1zcmNkaXItYnVpbGRzPSJubyIKLSAgICAgICAgICAgICBza2lw
LWF1dG9nZW49InRydWUiPgotICAgIDxicmFuY2ggbW9kdWxlPSJtcm9iaW5zb24vd2Via2l0Z3Rr
LXRlc3QtZGljdHMvYXJjaGl2ZS8wLjAuMS56aXAiIHZlcnNpb249IjAuMC4xIgotICAgICAgICAg
ICAgY2hlY2tvdXRkaXI9IndlYmtpdGd0ay10ZXN0LWRpY3RzIgotICAgICAgICAgICAgcmVwbz0i
Z2l0aHViLmNvbSIKLSAgICAgICAgICAgIGhhc2g9InNoYTI1Njo2Y2ZjOTRhNzg0NmEwZDhmNzZh
N2E3MzNmNzI5ZTgxMDljNmUxZDBmYmM5ZTBlODU4N2ViNWMzZWY5ODg4YzI0IgotICAgICAgICAg
ICAgbWQ1c3VtPSI2YmQ4ZDMyYzE1NzMwNWZjNjk5MzJlYThkMTM0ODcyMyIgc2l6ZT0iOTkyOTki
PgotICAgIDwvYnJhbmNoPgotICA8L2F1dG90b29scz4KLQotICA8YXV0b3Rvb2xzIGlkPSJsaWJm
ZmkiIGF1dG9nZW4tc2g9ImNvbmZpZ3VyZSI+Ci0gICAgPGJyYW5jaCBtb2R1bGU9Ii9wdWIvbGli
ZmZpL2xpYmZmaS0zLjEudGFyLmd6IiB2ZXJzaW9uPSIzLjEiCi0gICAgICAgICAgICAgcmVwbz0i
c291cmNld2FyZS5vcmciCi0gICAgICAgICAgICAgaGFzaD0ic2hhMjU2Ojk3ZmVlZWFkY2E1ZTIx
ODcwZmE0NDMzYmM5NTNkMWIzYWYzZjY5OGQ1ZGY4YTQyOGY2OGI3M2NkNjBhZWY2ZWIiCi0gICAg
ICAgICAgICAgbWQ1c3VtPSJmNTg5OGIyOWJiZmQ3MDUwMjgzMWEyMTJkOTI0OWQxMCIvPgotICA8
L2F1dG90b29scz4KLQotICA8IS0tIEZJWE1FOiBPcmlnaW5hbCBkb3dubG9hZCB1cmwgZG9lc24n
dCB3b3JrIGluIEtvcmVhLiBTbywgQnVnIDEzMzMwMyBjaGFuZ2VzIHRoZSB1cmwgZm9yIG5vdy4K
LSAgICAgICAgICAgICBPcmlnaW5hbCBkb3dubG9hZCB1cmw6IGh0dHA6Ly9kb3dubG9hZC5zYXZh
bm5haC5nbnUub3JnL3JlbGVhc2VzL2ZyZWV0eXBlL2ZyZWV0eXBlLTIuNC4xMS50YXIuYnoyIC0t
PgotICA8dGFyYmFsbCBpZD0iZnJlZXR5cGU2Ij4KLSAgICA8c291cmNlIGhyZWY9ImdpdGh1Yi5j
b20vc2hpdmFtaWRvdy9mcmVldHlwZS9yYXcvbWFzdGVyL2ZyZWV0eXBlLTIuNC4xMS50YXIuYnoy
IiB2ZXJzaW9uPSIyLjQuMTEiCi0gICAgICAgICAgICBoYXNoPSJzaGEyNTY6ZWY5ZDBiY2I2NDY0
N2Q5ZTUxMjVkYzc1MzRkN2NhMzcxYzk4MzEwZmVjODc2NzdjNDEwZjM5N2Y3MWZmYmUzZiIKLSAg
ICAgICAgICAgIG1kNXN1bT0iYjkzNDM1NDg4OTQyNDg2YzhkMGNhMjJlOGY3NjgwMzQiIC8+Ci0g
IDwvdGFyYmFsbD4KLQotICA8YXV0b3Rvb2xzIGlkPSJnbGliIgotICAgICAgICAgICAgIGF1dG9n
ZW4tc2g9ImNvbmZpZ3VyZSIKLSAgICAgICAgICAgICBhdXRvZ2VuYXJncz0iLS1kaXNhYmxlLWR0
cmFjZSI+Ci0gICAgPGRlcGVuZGVuY2llcz4KLSAgICAgIDxkZXAgcGFja2FnZT0ibGliZmZpIi8+
Ci0gICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgPGJyYW5jaCBtb2R1bGU9Ii9wdWIvR05PTUUvc291
cmNlcy9nbGliLzIuNDEvZ2xpYi0yLjQxLjIudGFyLnh6IiB2ZXJzaW9uPSIyLjQxLjIiCi0gICAg
ICAgICAgICByZXBvPSJmdHAuZ25vbWUub3JnIgotICAgICAgICAgICAgaGFzaD0ic2hhMjU2OmRh
MWY3MjU4NjU1ZjBlMTk2YjkzMDRjYjk1MTU3ODQ2MzRmMzc5NzQzNzkyM2UyMzZiYjM0NjYzNDg4
MTFjOTYiCi0gICAgICAgICAgICBtZDVzdW09Ijk2MzZmNjBlOTliOThmZDBmZGI1MjM5ZjkwNWFj
MDA4Ii8+Ci0gIDwvYXV0b3Rvb2xzPgotCi0gIDxhdXRvdG9vbHMgaWQ9ImdsaWItbmV0d29ya2lu
ZyI+Ci0gICAgPGRlcGVuZGVuY2llcz4KLSAgICAgIDxkZXAgcGFja2FnZT0iZ2xpYiIvPgotICAg
IDwvZGVwZW5kZW5jaWVzPgotICAgIDxicmFuY2ggbW9kdWxlPSIvcHViL0dOT01FL3NvdXJjZXMv
Z2xpYi1uZXR3b3JraW5nLzIuNDEvZ2xpYi1uZXR3b3JraW5nLTIuNDEuNC50YXIueHoiIHZlcnNp
b249IjIuNDEuNCIKLSAgICAgICAgICAgIHJlcG89ImZ0cC5nbm9tZS5vcmciCi0gICAgICAgICAg
ICBoYXNoPSJzaGEyNTY6OTMwYWQ2MTg4NjVkY2Y4MTc2NWQwZjQ4Y2I2ZjEzZTIyZDc2MjAzZWZh
NTlkMzA2MDRhZWQwMzg0Y2U4MGZkNyIKLSAgICAgICAgICAgIG1kNXN1bT0iZjg4ZTE2MzMyMmMw
ODM0Zjk3ODFkNjIyNDc3MWFiMmUiLz4KLSAgPC9hdXRvdG9vbHM+Ci0KLSAgPGF1dG90b29scyBp
ZD0ibGlic291cCIKLSAgICAgICAgICAgICBhdXRvZ2VuYXJncz0iLS13aXRob3V0LWdub21lIC0t
ZGlzYWJsZS1pbnRyb3NwZWN0aW9uIj4KLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgPGRlcCBw
YWNrYWdlPSJnbGliLW5ldHdvcmtpbmciLz4KLSAgICAgIDxkZXAgcGFja2FnZT0ibGlieG1sMiIv
PgotICAgIDwvZGVwZW5kZW5jaWVzPgotICAgIDxicmFuY2ggbW9kdWxlPSIvcHViL2dub21lL3Nv
dXJjZXMvbGlic291cC8yLjUwL2xpYnNvdXAtMi41MC4wLnRhci54eiIgdmVyc2lvbj0iMi41MC4w
IgotICAgICAgICAgICAgcmVwbz0iZnRwLmdub21lLm9yZyIKLSAgICAgICAgICAgIGhhc2g9InNo
YTI1NjoxZTAxMzY1YWM0YWYzODE3MTg3ZWE4NDdmOWQzNTg4YzI3ZWVlMDFmYzUxOWE1YTdjYjIx
MmJiNzhiMGY2NjdiIj4KLSAgICA8L2JyYW5jaD4KLSAgPC9hdXRvdG9vbHM+Ci0KLSAgPGF1dG90
b29scyBpZD0iZm9udGNvbmZpZyIKLSAgICAgICAgICAgICBhdXRvZ2VuLXNoPSJjb25maWd1cmUi
Ci0gICAgICAgICAgICAgYXV0b2dlbmFyZ3M9Ii0tZW5hYmxlLWxpYnhtbDIiPgotICAgIDxkZXBl
bmRlbmNpZXM+Ci0gICAgICA8ZGVwIHBhY2thZ2U9ImZyZWV0eXBlNiIvPgotICAgICAgPGRlcCBw
YWNrYWdlPSJsaWJ4bWwyIi8+Ci0gICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgPGJyYW5jaCBtb2R1
bGU9InNvZnR3YXJlL2ZvbnRjb25maWcvcmVsZWFzZS9mb250Y29uZmlnLTIuMTEuMS50YXIuZ3oi
IHZlcnNpb249IjIuMTEuMSIKLSAgICAgICAgICAgIHJlcG89ImZyZWVkZXNrdG9wLm9yZyIKLSAg
ICAgICAgICAgIGhhc2g9InNoYTI1NjpiNmIwNjZjN2RjZTNmNDM2ZmRjMGRmYmFlOWQzNjEyMmIz
ODA5NGY0ZjUzYmQ4ZGZmZDQ1ZTE5NWIwNTQwZDhkIgotICAgICAgICAgICAgbWQ1c3VtPSJlNzVl
MzAzYjRmNzc1NmMyYjE2MjAzYTU3YWM4N2ViYSIvPgotICA8L2F1dG90b29scz4KLQotICA8YXV0
b3Rvb2xzIGlkPSJoYXJmYnV6eiIgYXV0b2dlbi1zaD0iY29uZmlndXJlIj4KLSAgICA8YnJhbmNo
IG1vZHVsZT0ic29mdHdhcmUvaGFyZmJ1enovcmVsZWFzZS9oYXJmYnV6ei0wLjkuMzUudGFyLmJ6
MiIgdmVyc2lvbj0iMC45LjM1IgotICAgICAgICAgICBjaGVja291dGRpcj0iaGFyZmJ1enotMC45
LjM1IgotICAgICAgICAgICByZXBvPSJmcmVlZGVza3RvcC5vcmciCi0gICAgICAgICAgIGhhc2g9
InNoYTI1NjowYWExYThhYmE2ZjUwMjMyMWNmNmZlZjNjOWQyYzczZGRlNDgzODljNWVkMWQzNjE1
YTc2OTE5NDRjMmEwNmVkIj4KLSAgICA8L2JyYW5jaD4KLSAgPC9hdXRvdG9vbHM+Ci0KLSAgPGF1
dG90b29scyBpZD0iZWZsIiBhdXRvZ2VuLXNoPSJjb25maWd1cmUiCi0gICAgICAgICAgICAgYXV0
b2dlbmFyZ3M9Ii0tZGlzYWJsZS1mcmliaWRpIC0tZGlzYWJsZS1hdWRpbyAtLWRpc2FibGUtbGli
bW91bnQgLS1kaXNhYmxlLXBoeXNpY3MgLS1lbmFibGUtaS1yZWFsbHkta25vdy13aGF0LWktYW0t
ZG9pbmctYW5kLXRoYXQtdGhpcy13aWxsLXByb2JhYmx5LWJyZWFrLXRoaW5ncy1hbmQtaS13aWxs
LWZpeC10aGVtLW15c2VsZi1hbmQtc2VuZC1wYXRjaGVzLWFiYiI+Ci0gICAgPGRlcGVuZGVuY2ll
cz4KLSAgICAgIDxkZXAgcGFja2FnZT0iZm9udGNvbmZpZyIvPgotICAgICAgPGRlcCBwYWNrYWdl
PSJnc3RyZWFtZXIiLz4KLSAgICAgIDxkZXAgcGFja2FnZT0iZ3N0LXBsdWdpbnMtYmFzZSIvPgot
ICAgIDwvZGVwZW5kZW5jaWVzPgotICAgIDxicmFuY2ggbW9kdWxlPSJyZWwvbGlicy9lZmwvZWZs
LTEuMTguNC50YXIuZ3oiIHZlcnNpb249IjEuMTguNCIKLSAgICAgICAgICAgIHJlcG89ImRvd25s
b2FkLmVubGlnaHRlbm1lbnQub3JnIgotICAgICAgICAgICAgaGFzaD0ic2hhMjU2OmQxOTY2OWVl
Y2U3NzBjYzA5NzMzNTY4YzdkZmVmOTg3MGRhYTBmOGI5ZjYxM2FiNzZhZDE0YjJmNWRlMjAwNDAi
PgotICAgIDwvYnJhbmNoPgotICA8L2F1dG90b29scz4KLQotICA8YXV0b3Rvb2xzIGlkPSJsaWJ4
bWwyIgotICAgICAgICAgICAgIGF1dG9nZW4tc2g9ImNvbmZpZ3VyZSIKLSAgICAgICAgICAgICBh
dXRvZ2VuYXJncz0iLS13aXRob3V0LXB5dGhvbiI+Ci0gICAgPGJyYW5jaCBtb2R1bGU9Ii9saWJ4
bWwyL2xpYnhtbDItMi45LjEudGFyLmd6IiB2ZXJzaW9uPSIyLjkuMSIKLSAgICAgICAgICAgIHJl
cG89InhtbHNvZnQub3JnIgotICAgICAgICAgICAgaGFzaD0ic2hhMjU2OmZkM2M2NGNiNjZmMmM0
ZWEyN2U5MzRkMjc1OTA0ZDkyY2VjNDk0YThlODQwNTYxMzc4MGNiYzhhNzE2ODBmZGIiCi0gICAg
ICAgICAgICBtZDVzdW09IjljMGNmZWYyODVkNWM0YTVjODBkMDA5MDRkZGFiMzgwIi8+Ci0gIDwv
YXV0b3Rvb2xzPgotCi0gIDxhdXRvdG9vbHMgaWQ9ImxpYnhzbHQiPgotICAgIDxicmFuY2ggbW9k
dWxlPSIvbGlieHNsdC9saWJ4c2x0LTEuMS4yOS50YXIuZ3oiIHZlcnNpb249IjEuMS4yOSIKLSAg
ICAgICAgICAgIHJlcG89InhtbHNvZnQub3JnIgotICAgICAgICAgICAgaGFzaD0ic2hhMjU2OmI1
OTc2ZTM4NTc4MzdlNzYxN2IyOWYyMjQ5ZWJiNWVlYWMzNGUyNDkyMDhkMzFmMWZiZjdhNmJhN2E0
MDkwY2UiLz4KLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgPGRlcCBwYWNrYWdlPSJsaWJ4bWwy
Ii8+Ci0gICAgPC9kZXBlbmRlbmNpZXM+Ci0gIDwvYXV0b3Rvb2xzPgotCi0gIDxhdXRvdG9vbHMg
aWQ9Im9yYyIgYXV0b2dlbmFyZ3M9Ii0tZGlzYWJsZS1ndGstZG9jIiBhdXRvZ2VuLXNoPSJjb25m
aWd1cmUiPgotICAgIDxicmFuY2ggbW9kdWxlPSJvcmMvb3JjLTAuNC4xNy50YXIuZ3oiIHZlcnNp
b249IjAuNC4xNyIKLSAgICAgICAgICAgIHJlcG89ImdzdHJlYW1lciIKLSAgICAgICAgICAgIGhh
c2g9InNoYTI1Njo0ZmM3Y2NhNDhjNTlmZmYyM2FmZWU3OGZiNjQyY2RiZGUwMDFmNTY0MDFjOGY0
N2I5NWExNjU3OGQxZDVkN2U4IgotICAgICAgICAgICAgbWQ1c3VtPSJhZjFiZjNkYWI5ZTY5ZjNj
MzZmMzg5Mjg1ZTJhMTJhMSIvPgotICA8L2F1dG90b29scz4KLQotICA8YXV0b3Rvb2xzIGlkPSJn
c3RyZWFtZXIiIGF1dG9nZW5hcmdzPSItLWRpc2FibGUtZ3RrLWRvYyIgYXV0b2dlbi1zaD0iY29u
ZmlndXJlIj4KLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgPGRlcCBwYWNrYWdlPSJvcmMiLz4K
LSAgICA8L2RlcGVuZGVuY2llcz4KLSAgICA8YnJhbmNoIG1vZHVsZT0iZ3N0cmVhbWVyL2dzdHJl
YW1lci0xLjguMC50YXIueHoiIHZlcnNpb249IjEuOC4wIgotICAgICAgICAgICAgcmVwbz0iZ3N0
cmVhbWVyIgotICAgICAgICAgICAgaGFzaD0ic2hhMjU2Ojk0N2EzMTRhMjEyYjVkOTQ5ODVkODli
NDM0NDBkYmU2NmI2OTZlMTJiYmRmOWEyZjc4OTY3Yjk4ZDc0YWJlZGMiCi0gICAgICAgICAgICBt
ZDVzdW09IjY4NDZkNzI4OWVjMzIzYzM4YzQ5YjgxODE3MWU5NTVhIi8+Ci0gIDwvYXV0b3Rvb2xz
PgotCi0gIDxhdXRvdG9vbHMgaWQ9ImdzdC1wbHVnaW5zLWJhc2UiCi0gICAgICAgICAgICAgYXV0
b2dlbi1zaD0iY29uZmlndXJlIgotICAgICAgICAgICAgIGF1dG9nZW5hcmdzPSItLWRpc2FibGUt
ZXhhbXBsZXMgLS1kaXNhYmxlLWd0ay1kb2MiPgotICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICA8
ZGVwIHBhY2thZ2U9ImdzdHJlYW1lciIvPgotICAgIDwvZGVwZW5kZW5jaWVzPgotICAgIDxicmFu
Y2ggbW9kdWxlPSJnc3QtcGx1Z2lucy1iYXNlL2dzdC1wbHVnaW5zLWJhc2UtMS44LjAudGFyLnh6
IiB2ZXJzaW9uPSIxLjguMCIKLSAgICAgICAgICAgIHJlcG89ImdzdHJlYW1lciIKLSAgICAgICAg
ICAgIGhhc2g9InNoYTI1NjphYmMwYWNjMWQxNWI0YjljOTdjNjVjZDk2ODliZDY0MDAwODE4NTNi
OTk4MGVhNDI4ZDNjODU3MmRkNzkxNTIyIgotICAgICAgICAgICAgbWQ1c3VtPSIyMGNjODIzMTYw
OTMxODMxMGYyYTU1ZjY0Yzg2Y2JiNCI+Ci0gICAgPC9icmFuY2g+Ci0gIDwvYXV0b3Rvb2xzPgot
Ci0gIDxhdXRvdG9vbHMgaWQ9ImdzdC1wbHVnaW5zLWdvb2QiIGF1dG9nZW5hcmdzPSItLWRpc2Fi
bGUtZXhhbXBsZXMgLS1kaXNhYmxlLXNvdXAgLS1kaXNhYmxlLWd0ay1kb2MiIGF1dG9nZW4tc2g9
ImNvbmZpZ3VyZSI+Ci0gICAgPGRlcGVuZGVuY2llcz4KLSAgICAgIDxkZXAgcGFja2FnZT0iZ3N0
LXBsdWdpbnMtYmFzZSIvPgotICAgIDwvZGVwZW5kZW5jaWVzPgotICAgIDxicmFuY2ggbW9kdWxl
PSJnc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMS44LjAudGFyLnh6IiB2ZXJzaW9u
PSIxLjguMCIKLSAgICAgICAgICAgIHJlcG89ImdzdHJlYW1lciIKLSAgICAgICAgICAgIGhhc2g9
InNoYTI1NjpjMjBjMTM0ZDQ3ZGJjMjM4ZDkyMTcwN2EzYjY2ZGE3MDljMmI0ZGQ4OWY5ZDI2N2Nl
YzEzZDFkZGYxNmU5ZjRkIgotICAgICAgICAgICAgbWQ1c3VtPSI5MWVkNDY0OWM3YzJlNDNhNjFm
NzMxZDE0NGY2ZjZkMCI+Ci0gICAgICA8cGF0Y2ggZmlsZT0iZ3N0LXBsdWdpbnMtZ29vZC11c2Ut
dGhlLXRmZHQtZGVjb2RlLXRpbWUucGF0Y2giIHN0cmlwPSIxIi8+Ci0gICAgICA8cGF0Y2ggZmls
ZT0iZ3N0LXBsdWdpbnMtZ29vZC1SZXZlcnQtcXRkZW11eC1leHBvc2Utc3RyZWFtcy13aXRoLWZp
cnN0LW1vb2YtZm9yLWZyLnBhdGNoIiBzdHJpcD0iMSIvPgotICAgIDwvYnJhbmNoPgotICA8L2F1
dG90b29scz4KLQotICA8YXV0b3Rvb2xzIGlkPSJnc3QtcGx1Z2lucy1iYWQiIGF1dG9nZW5hcmdz
PSItLWRpc2FibGUtZXhhbXBsZXMgLS1kaXNhYmxlLWd0ay1kb2MiPgotICAgIDxkZXBlbmRlbmNp
ZXM+Ci0gICAgICA8ZGVwIHBhY2thZ2U9ImdzdC1wbHVnaW5zLWJhc2UiLz4KLSAgICA8L2RlcGVu
ZGVuY2llcz4KLSAgICA8YnJhbmNoIG1vZHVsZT0iZ3N0LXBsdWdpbnMtYmFkL2dzdC1wbHVnaW5z
LWJhZC0xLjguMC50YXIueHoiIHZlcnNpb249IjEuOC4wIgotICAgICAgICAgICAgcmVwbz0iZ3N0
cmVhbWVyIgotICAgICAgICAgICAgaGFzaD0ic2hhMjU2OjExNjM3NmRkMTA4NTA4MjQyMmUwYjIx
YjBlY2QzZDFjYjM0NWM0NjljNThlMzI0NjMxNjdkNDY3NWY0Y2E5MGUiCi0gICAgICAgICAgICBt
ZDVzdW09IjFjMmQ3OTdiYjk2YTgxZTllZjU3MGM3YTBhMzcyMDNlIj4KLSAgICA8L2JyYW5jaD4K
LSAgPC9hdXRvdG9vbHM+Ci0KLSAgPGF1dG90b29scyBpZD0iZ3N0LWxpYmF2IiBhdXRvZ2VuYXJn
cz0iLS13aXRoLWxpYmF2LWV4dHJhLWNvbmZpZ3VyZT0nLS1kaXNhYmxlLXlhc20nIC0tZGlzYWJs
ZS1ndGstZG9jIiBhdXRvZ2VuLXNoPSJjb25maWd1cmUiPgotICAgIDxkZXBlbmRlbmNpZXM+Ci0g
ICAgICA8ZGVwIHBhY2thZ2U9ImdzdC1wbHVnaW5zLWJhc2UiLz4KLSAgICA8L2RlcGVuZGVuY2ll
cz4KLSAgICA8YnJhbmNoIG1vZHVsZT0iZ3N0LWxpYmF2L2dzdC1saWJhdi0xLjguMC50YXIueHoi
IHZlcnNpb249IjEuOC4wIgotICAgICAgICAgICAgcmVwbz0iZ3N0cmVhbWVyIgotICAgICAgICAg
ICAgaGFzaD0ic2hhMjU2OjVhMWNlMjg4NzZhZWU5M2NiNGYzZDA5MGYwZTgwNzkxNWE1ZDliYzEz
MjVlMzQ4MGRkMzAyYjg1YWViNDI5MWMiCi0gICAgICAgICAgICBtZDVzdW09IjM2MTYzOGZhNDU0
NjZjNTA1MGJjZGU2YmZlMTBmYTQ2Ij4KLSAgICAgIDxwYXRjaCBmaWxlPSJnc3QtbGliYXYucGF0
Y2giIHN0cmlwPSIxIi8+Ci0gICAgPC9icmFuY2g+Ci0gIDwvYXV0b3Rvb2xzPgotCi0gIDxhdXRv
dG9vbHMgaWQ9ImF0ayIKLSAgICAgICAgICAgICBhdXRvZ2VuLXNoPSJjb25maWd1cmUiCi0gICAg
ICAgICAgICAgYXV0b2dlbmFyZ3M9Ii0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIj4KLSAgICA8YnJh
bmNoIG1vZHVsZT0icHViL0dOT01FL3NvdXJjZXMvYXRrLzIuMTUvYXRrLTIuMTUuMi50YXIueHoi
IHZlcnNpb249IjIuMTUuMiIKLSAgICAgICAgICAgIHJlcG89ImZ0cC5nbm9tZS5vcmciCi0gICAg
ICAgICAgICBoYXNoPSJzaGEyNTY6MTc5ZDE1NDI0YjhhYTNhNTcyNjkwM2YwZGE0NThkZTY4ZTA1
ODVkZmQ5ZDQ1MWM2ZGNmY2RiNmI3YjUwOWNiZSIvPgotICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAg
ICAgIDxkZXAgcGFja2FnZT0iZ2xpYiIvPgotICAgIDwvZGVwZW5kZW5jaWVzPgotICA8L2F1dG90
b29scz4KLQotICA8YXV0b3Rvb2xzIGlkPSJsaWJ1c3JzY3RwIiBzdXBwb3J0cy1ub24tc3JjZGly
LWJ1aWxkcz0ibm8iIGF1dG9nZW4tc2g9Ii4vYm9vdHN0cmFwOyAuL2NvbmZpZ3VyZSAtLWRpc2Fi
bGUtd2FybmluZ3MtYXMtZXJyb3JzIj4KLSAgICA8YnJhbmNoIHJlcG89ImdpdGh1Yi5jb20iIG1v
ZHVsZT0ic2N0cGxhYi91c3JzY3RwL2FyY2hpdmUvMDc4ZmYzMjUyZjczMzI3ZTBhYzExZDZmZDVl
ZmY2MjAxMWY2NjQ2ZS50YXIuZ3oiIHZlcnNpb249IjA3OGZmMzI1MmY3MzMyN2UwYWMxMWQ2ZmQ1
ZWZmNjIwMTFmNjY0NmUiIGNoZWNrb3V0ZGlyPSJsaWJ1c3JzY3RwIgotICAgICAgICAgICAgaGFz
aD0ic2hhMjU2OjE3NTkzODg4N2RjNzU1NGUwMDAxNTIwNTVjODE4YmRkMTVkZDBlNGNjYzk0ZWY5
M2UzOGU5Zjk1MmVhODJlZGMiIHNpemU9IjY0ODkyNSI+Ci0gICAgPC9icmFuY2g+Ci0gIDwvYXV0
b3Rvb2xzPgotCi0gIDxhdXRvdG9vbHMgaWQ9ImdzdC1wbHVnaW5zLW9wZW53ZWJydGMiIHN1cHBv
cnRzLXBhcmFsbGVsLWJ1aWxkcz0ibm8iIHN1cHBvcnRzLW5vbi1zcmNkaXItYnVpbGRzPSJubyIg
YXV0b2dlbi1zaD0iLi9hdXRvZ2VuLnNoOyAuL2NvbmZpZ3VyZSI+Ci0gICAgPGRlcGVuZGVuY2ll
cz4KLSAgICAgIDxkZXAgcGFja2FnZT0iZ3N0LXBsdWdpbnMtYmFzZSIvPgotICAgICAgPGRlcCBw
YWNrYWdlPSJsaWJ1c3JzY3RwIi8+Ci0gICAgPC9kZXBlbmRlbmNpZXM+Ci0gICA8YnJhbmNoIHJl
cG89ImdpdGh1Yi5jb20iIG1vZHVsZT0iRXJpY3Nzb25SZXNlYXJjaC9vcGVud2VicnRjLWdzdC1w
bHVnaW5zL2FyY2hpdmUvZTM1OWI2NzQ4NGFmOTBmNDE2ZWEzNWUzMDEyMDVkMmI1M2M3N2ExNC50
YXIuZ3oiIGNoZWNrb3V0ZGlyPSJnc3QtcGx1Z2lucy1vcGVud2VicnRjIiB2ZXJzaW9uPSJnc3Qt
cGx1Z2lucy1vcGVud2VicnRjLTIwMTUwMzE3IgotICAgICAgICAgICBoYXNoPSJzaGEyNTY6YTQ1
NjQyNWVmYjg4ZGUzOWMxNmE0ZjhhYzQyMTRhYWY1MzE1N2Y5ZGYxMzIzZjA4ZGUzNzVjNzdmMjI3
YjZiNyIKLSAgICAgICAgICAgbWQ1c3VtPSI4MjdmMTM2MzRmZmE4M2NjY2YxYTYzMTJlZmZiY2Vh
YSIgc2l6ZT0iOTI4ODMiPgotICAgICAgPHBhdGNoIGZpbGU9Im9wZW53ZWJydGMtZ3N0LXBsdWdp
bnMtY2xhbmctd2FybmluZy1maXgucGF0Y2giIHN0cmlwPSIxIi8+Ci0gICA8L2JyYW5jaD4KLSAg
PC9hdXRvdG9vbHM+Ci0KLSAgPGF1dG90b29scyBpZD0ibGlibmljZSIgc3VwcG9ydHMtbm9uLXNy
Y2Rpci1idWlsZHM9Im5vIj4KLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgPGRlcCBwYWNrYWdl
PSJnc3RyZWFtZXIiLz4KLSAgICA8L2RlcGVuZGVuY2llcz4KLSAgICA8YnJhbmNoIHJlcG89Im5p
Y2UuZnJlZWRlc2t0b3Aub3JnIiBtb2R1bGU9InJlbGVhc2VzL2xpYm5pY2UtMC4xLjEzLnRhci5n
eiIgY2hlY2tvdXRkaXI9ImxpYm5pY2UiIHZlcnNpb249IjAuMS4xMyIKLSAgICAgICAgICAgIGhh
c2g9InNoYTI1Njo2MTExMmQ5ZjNiZTkzM2E4MjdjODM2NWYyMDU1MTU2Mzk1M2FmNjcxODA1Nzky
OGY1MWY0ODdiZmU4ODQxOWUxIgotICAgICAgICAgICAgbWQ1c3VtPSIzMjI2ZmFlYWY0OGE5MTUw
YWRhMDBkYTJlMjg2NTk1OSIgc2l6ZT0iOTEyMzc0Ij4KLSAgICA8L2JyYW5jaD4KLSAgPC9hdXRv
dG9vbHM+Ci0KLSAgPGF1dG90b29scyBpZD0ib3BlbndlYnJ0YyIgYXV0b2dlbmFyZ3M9Ii0tZW5h
YmxlLWJyaWRnZT1ubyAtLWVuYWJsZS1vd3ItZ3N0PXllcyI+Ci0gICAgPGRlcGVuZGVuY2llcz4K
LSAgICAgIDxkZXAgcGFja2FnZT0iZ3N0LXBsdWdpbnMtb3BlbndlYnJ0YyIvPgotICAgICAgPGRl
cCBwYWNrYWdlPSJsaWJuaWNlIi8+Ci0gICAgIDwvZGVwZW5kZW5jaWVzPgotICAgIDxicmFuY2gg
cmVwbz0iZ2l0aHViLmNvbSIgbW9kdWxlPSJFcmljc3NvblJlc2VhcmNoL29wZW53ZWJydGMvYXJj
aGl2ZS9mNTExZWExZmE3OWEzM2ZhM2Q1MmJmZDFjMDk2OWMyODA4NGFlYjM1LnRhci5neiIgY2hl
Y2tvdXRkaXI9Im9wZW53ZWJydGMiIHZlcnNpb249ImY1MTFlYTFmYTc5YTMzZmEzZDUyYmZkMWMw
OTY5YzI4MDg0YWViMzUiCi0gICAgICAgICAgICBoYXNoPSJzaGEyNTY6YWY4MGI4MDUxMmI1ZjVh
NmI4MmI0Y2Y0M2FmYTI4ZGE5Yzk0Yzg2ODAwZjZmYWRkMTA3NjIzNjEwNzlmYjVlMyIKLSAgICAg
ICAgICAgIG1kNXN1bT0iNDU1NWQyMDgyMWFmOGY1MzM0Zjc0YjRmMDMyN2YxNzgiIHNpemU9IjI5
NjE0MyI+Ci0gICAgPC9icmFuY2g+Ci0gIDwvYXV0b3Rvb2xzPgotCi08L21vZHVsZXNldD4KZGlm
ZiAtLWdpdCBhL1Rvb2xzL2VmbC9qaGJ1aWxkcmMgYi9Ub29scy9lZmwvamhidWlsZHJjCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDRiMzkzZjY0NzdhYWM4NGJkNzE3YWQ1N2I5OThl
ZmI3M2M3MmRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1Rvb2xzL2VmbC9qaGJ1aWxkcmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jIS91
c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0jIENv
cHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgotIwotIyBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0jIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSMgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0jIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSMg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLQotaW1wb3J0IHN5cwotaW1wb3J0
IHBsYXRmb3JtCi0KLXN5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJu
YW1lKF9fZmlsZV9fKSwgIi4uL2poYnVpbGQiKSApCi1pbXBvcnQgamhidWlsZHJjX2NvbW1vbgot
Ci1qaGJ1aWxkcmNfY29tbW9uLmluaXQoZ2xvYmFscygpLCAiZWZsIikgCi0KLWFkZHBhdGgoJ1hE
R19EQVRBX0RJUlMnLCAnL3Vzci9zaGFyZScpCi1hZGRwYXRoKCdYREdfQ09ORklHX0RJUlMnLCAn
L2V0Yy94ZGcnKQotCi1wYXJ0aWFsX2J1aWxkID0gRmFsc2UKZGlmZiAtLWdpdCBhL1Rvb2xzL2Vm
bC9wYXRjaGVzL2V2YXMtZml4LWJ1aWxkLXdpdGgtZ2lmbGliNS5wYXRjaCBiL1Rvb2xzL2VmbC9w
YXRjaGVzL2V2YXMtZml4LWJ1aWxkLXdpdGgtZ2lmbGliNS5wYXRjaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMjAzZmJkZGQwZDU4NjlhZWEzZjhlYzY3OTc3NjA4NjRiNGJlYjdkZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9lZmwv
cGF0Y2hlcy9ldmFzLWZpeC1idWlsZC13aXRoLWdpZmxpYjUucGF0Y2gKKysrIC9kZXYvbnVsbApA
QCAtMSw1NCArMCwwIEBACi1QYXRjaCBmcm9tIERvdWcgTmV3Z2FyZCwgYXZhaWxhYmxlIGF0IGh0
dHBzOi8vcGhhYi5lbmxpZ2h0ZW5tZW50Lm9yZy9EMjAwCi0KLWRpZmYgLS1naXQgYS9zcmMvbW9k
dWxlcy9sb2FkZXJzL2dpZi9ldmFzX2ltYWdlX2xvYWRfZ2lmLmMgYi9zcmMvbW9kdWxlcy9sb2Fk
ZXJzL2dpZi9ldmFzX2ltYWdlX2xvYWRfZ2lmLmMKLWluZGV4IDE4YTZlMjMuLjZiNmVmM2QgMTAw
NjQ0Ci0tLS0gYS9zcmMvbW9kdWxlcy9sb2FkZXJzL2dpZi9ldmFzX2ltYWdlX2xvYWRfZ2lmLmMK
LSsrKyBiL3NyYy9tb2R1bGVzL2xvYWRlcnMvZ2lmL2V2YXNfaW1hZ2VfbG9hZF9naWYuYwotQEAg
LTcwMCw3ICs3MDAsMTEgQEAgZXZhc19pbWFnZV9sb2FkX2ZpbGVfaGVhZF9naWYoSW1hZ2VfRW50
cnkgKmllLCBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICprZXkKLSAgICAgICAgIHJldHVy
biBFSU5BX0ZBTFNFOwotICAgICAgfQotIAotKyNpZiBHSUZMSUJfTUFKT1IgPj0gNQotKyAgIGdp
ZiA9IERHaWZPcGVuRmlsZUhhbmRsZShmZCwgTlVMTCk7Ci0rI2Vsc2UKLSAgICBnaWYgPSBER2lm
T3BlbkZpbGVIYW5kbGUoZmQpOwotKyNlbmRpZgotICAgIGlmICghZ2lmKQotICAgICAgewotICAg
ICAgICAgaWYgKGZkKSBjbG9zZShmZCk7Ci1AQCAtODM4LDcgKzg0MiwxMSBAQCBldmFzX2ltYWdl
X2xvYWRfc3BlY2lmaWNfZnJhbWUoSW1hZ2VfRW50cnkgKmllLCBjb25zdCBjaGFyICpmaWxlLCBp
bnQgZnJhbWVfaW5kZQotICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgICB9Ci0gCi0r
I2lmIEdJRkxJQl9NQUpPUiA+PSA1Ci0rICAgZ2lmID0gREdpZk9wZW5GaWxlSGFuZGxlKGZkLCBO
VUxMKTsKLSsjZWxzZQotICAgIGdpZiA9IERHaWZPcGVuRmlsZUhhbmRsZShmZCk7Ci0rI2VuZGlm
Ci0gICAgaWYgKCFnaWYpCi0gICAgICB7Ci0gICAgICAgICBpZiAoZmQpIGNsb3NlKGZkKTsKLUBA
IC05MjcsNyArOTM1LDExIEBAIGV2YXNfaW1hZ2VfbG9hZF9maWxlX2RhdGFfZ2lmKEltYWdlX0Vu
dHJ5ICppZSwgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5Ci0gICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgICAgICAgICAgICAgfQotIAotKyNpZiBHSUZM
SUJfTUFKT1IgPj0gNQotKyAgICAgICAgICAgICBnaWYgPSBER2lmT3BlbkZpbGVIYW5kbGUoZmQs
IE5VTEwpOwotKyNlbHNlCi0gICAgICAgICAgICAgIGdpZiA9IERHaWZPcGVuRmlsZUhhbmRsZShm
ZCk7Ci0rI2VuZGlmCi0gICAgICAgICAgICAgIGlmICghZ2lmKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICBpZiAoZmQpIGNsb3NlKGZkKTsKLUBAIC0xMDAwLDcgKzEwMTIs
MTEgQEAgZXZhc19pbWFnZV9sb2FkX2ZyYW1lX2R1cmF0aW9uX2dpZihJbWFnZV9FbnRyeSAqaWUs
IGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGludAotICNlbmRpZgotICAgIGlmIChmZCA8IDApIHJl
dHVybiAtMTsKLSAKLSsjaWYgR0lGTElCX01BSk9SID49NQotKyAgIGdpZiA9IERHaWZPcGVuRmls
ZUhhbmRsZShmZCwgTlVMTCk7Ci0rI2Vsc2UKLSAgICBnaWYgPSBER2lmT3BlbkZpbGVIYW5kbGUo
ZmQpOwotKyNlbmRpZgotICAgIGlmICghZ2lmKQotICAgICAgewotICAgICAgICAgaWYgKGZkKSBj
bG9zZShmZCk7CmRpZmYgLS1naXQgYS9Ub29scy9lZmwvcGF0Y2hlcy9mb250Y29uZmlnLUMtMTEt
cmVxdWlyZXMtYS1zcGFjZS1iZXR3ZWVuLWxpdGVyYWwtYW5kLWlkZW50aWZpZXIucGF0Y2ggYi9U
b29scy9lZmwvcGF0Y2hlcy9mb250Y29uZmlnLUMtMTEtcmVxdWlyZXMtYS1zcGFjZS1iZXR3ZWVu
LWxpdGVyYWwtYW5kLWlkZW50aWZpZXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGI0ZTBhNTQxZGJjNDkxOGM4MGVmYmZhYmU3MjUzYjI4MTgwOTEyOWYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvZWZsL3BhdGNoZXMvZm9u
dGNvbmZpZy1DLTExLXJlcXVpcmVzLWEtc3BhY2UtYmV0d2Vlbi1saXRlcmFsLWFuZC1pZGVudGlm
aWVyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotRnJvbSA3MDY5ZDcxN2U5
ODJhZGNmOGUxZDMwMGNiZDEwZWVjNjMyMmE2NWM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQot
RnJvbTogQWtpcmEgVEFHT0ggPGFraXJhQHRhZ29oLm9yZz4KLURhdGU6IFN1biwgMjIgQXByIDIw
MTIgMjE6NDA6NDQgKzA5MDAKLVN1YmplY3Q6IFtQQVRDSF0gQysrMTEgcmVxdWlyZXMgYSBzcGFj
ZSBiZXR3ZWVuIGxpdGVyYWwgYW5kIGlkZW50aWZpZXIKLQotUmVwb3J0ZWQgYnkgQnVnYW5pbmkK
LS0tLQotIGZvbnRjb25maWcvZm9udGNvbmZpZy5oIHwgNiArKystLS0KLSAxIGZpbGUgY2hhbmdl
ZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZm9udGNv
bmZpZy9mb250Y29uZmlnLmggYi9mb250Y29uZmlnL2ZvbnRjb25maWcuaAotaW5kZXggMGUyY2E1
MC4uYjI3Y2NiNSAxMDA2NDQKLS0tLSBhL2ZvbnRjb25maWcvZm9udGNvbmZpZy5oCi0rKysgYi9m
b250Y29uZmlnL2ZvbnRjb25maWcuaAotQEAgLTExMiw5ICsxMTIsOSBAQCB0eXBlZGVmIGludAkJ
RmNCb29sOwotICNkZWZpbmUgRkNfREVDT1JBVElWRQkgICAgImRlY29yYXRpdmUiCS8qIEJvb2wg
LSB0cnVlIGlmIHN0eWxlIGlzIGEgZGVjb3JhdGl2ZSB2YXJpYW50ICovCi0gI2RlZmluZSBGQ19M
Q0RfRklMVEVSCSAgICAibGNkZmlsdGVyIgkJLyogSW50ICovCi0gCi0tI2RlZmluZSBGQ19DQUNI
RV9TVUZGSVgJCSAgICAiLmNhY2hlLSJGQ19DQUNIRV9WRVJTSU9OCi0tI2RlZmluZSBGQ19ESVJf
Q0FDSEVfRklMRQkgICAgImZvbnRzLmNhY2hlLSJGQ19DQUNIRV9WRVJTSU9OCi0tI2RlZmluZSBG
Q19VU0VSX0NBQ0hFX0ZJTEUJICAgICIuZm9udHMuY2FjaGUtIkZDX0NBQ0hFX1ZFUlNJT04KLSsj
ZGVmaW5lIEZDX0NBQ0hFX1NVRkZJWAkJICAgICIuY2FjaGUtIiBGQ19DQUNIRV9WRVJTSU9OCi0r
I2RlZmluZSBGQ19ESVJfQ0FDSEVfRklMRQkgICAgImZvbnRzLmNhY2hlLSIgRkNfQ0FDSEVfVkVS
U0lPTgotKyNkZWZpbmUgRkNfVVNFUl9DQUNIRV9GSUxFCSAgICAiLmZvbnRzLmNhY2hlLSIgRkNf
Q0FDSEVfVkVSU0lPTgotIAotIC8qIEFkanVzdCBvdXRsaW5lIHJhc3Rlcml6ZXIgKi8KLSAjZGVm
aW5lIEZDX0NIQVJfV0lEVEgJICAgICJjaGFyd2lkdGgiCS8qIEludCAqLwotLS0gCi0xLjguMy4y
Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL2VmbC9wYXRjaGVzL2dzdC1saWJhdi5wYXRjaCBiL1Rvb2xz
L2VmbC9wYXRjaGVzL2dzdC1saWJhdi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMzVlYzk5ZWZlYWIyOGZhM2RiZjYzMzVhZTczNWFlMzU3ZDZiNzUzNi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9lZmwvcGF0Y2hlcy9nc3Qt
bGliYXYucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0tLS0gYS9nc3QtbGli
cy9leHQvbGliYXYvbGliYXZjb2RlYy9hcm0vdmlkZW9kc3BfYXJtdjV0ZS5TCi0rKysgYi9nc3Qt
bGlicy9leHQvbGliYXYvbGliYXZjb2RlYy9hcm0vdmlkZW9kc3BfYXJtdjV0ZS5TCi1AQCAtMjcs
NiArMjcsNyBAQAotICAgICAgICAgc3VicyAgICAgICAgICAgIHIyLCAgcjIsICAjMQotICAgICAg
ICAgcGxkICAgICAgICAgICAgIFtyMF0KLSAgICAgICAgIGFkZCAgICAgICAgICAgICByMCwgIHIw
LCAgcjEKLSsgICAgICAgIGl0ICAgICAgICAgICAgICBuZQotICAgICAgICAgYm5lICAgICAgICAg
ICAgIDFiCi0gICAgICAgICBieCAgICAgICAgICAgICAgbHIKLQotLS0tIGEvZ3N0LWxpYnMvZXh0
L2xpYmF2L2xpYnN3cmVzYW1wbGUvYXJtL2F1ZGlvX2NvbnZlcnRfbmVvbi5TCi0rKysgYi9nc3Qt
bGlicy9leHQvbGliYXYvbGlic3dyZXNhbXBsZS9hcm0vYXVkaW9fY29udmVydF9uZW9uLlMKLUBA
IC0xMzQsNiArMTM0LDcgQEAgZnVuY3Rpb24gc3dyaV9vbGRhcGlfY29udl9mbHRwX3RvX3MxNl9u
Y2hfbmVvbiwgZXhwb3J0PTEKLSAgICAgICAgIGl0dCAgICAgICAgICAgICBsdAotICAgICAgICAg
bGRybHQgICAgICAgICAgIHIxLCAgW3IxXQotICAgICAgICAgYmx0ICAgICAgICAgICAgIFgoc3dy
aV9vbGRhcGlfY29udl9mbHRfdG9fczE2X25lb24pCi0rICAgICAgICBpdCAgICAgICAgICAgICAg
ZXEKLSAgICAgICAgIGJlcSAgICAgICAgICAgICBYKHN3cmlfb2xkYXBpX2NvbnZfZmx0cF90b19z
MTZfMmNoX25lb24pCi0gCi0gICAgICAgICBwdXNoICAgICAgICAgICAge3I0LXI4LCBscn0KZGlm
ZiAtLWdpdCBhL1Rvb2xzL2VmbC9wYXRjaGVzL2dzdC1wbHVnaW5zLWJhc2UtcnRwLXJ0Y3BidWZm
ZXItZml4LXR5cG8taW4tZW51bS5wYXRjaCBiL1Rvb2xzL2VmbC9wYXRjaGVzL2dzdC1wbHVnaW5z
LWJhc2UtcnRwLXJ0Y3BidWZmZXItZml4LXR5cG8taW4tZW51bS5wYXRjaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTNkZGI3MjM4MWIzNmY0Y2RjZTg3ZGY0ODAyOGQ3YWEzZmVmYWYy
Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9l
ZmwvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYXNlLXJ0cC1ydGNwYnVmZmVyLWZpeC10eXBvLWluLWVu
dW0ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi1Gcm9tIGRmYzM0YzU4NDEx
ZjUwYjM3YjJlMTMwMDU2MGFlOGEwYjZhOWE3ZDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1G
cm9tOiA9P1VURi04P3E/VGltLVBoaWxpcHA9MjBNPUMzPUJDbGxlcj89IDx0aW1AY2VudHJpY3Vs
YXIuY29tPgotRGF0ZTogVHVlLCA3IEFwciAyMDE1IDE2OjQzOjU5ICswMTAwCi1TdWJqZWN0OiBb
UEFUQ0hdIHJ0cDogcnRjcGJ1ZmZlcjogZml4IHR5cG8gaW4gZW51bQotCi1hbmQgaW4gZG9jcy4g
U3BvdHRlZCBieSBSb2IgU3dhaW4uCi0tLS0KLSBnc3QtbGlicy9nc3QvcnRwL2dzdHJ0Y3BidWZm
ZXIuaCB8IDcgKysrKystLQotIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVs
ZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvcnRwL2dzdHJ0Y3BidWZmZXIu
aCBiL2dzdC1saWJzL2dzdC9ydHAvZ3N0cnRjcGJ1ZmZlci5oCi1pbmRleCBiNWZmNGExLi40NzM3
OGNmIDEwMDY0NAotLS0tIGEvZ3N0LWxpYnMvZ3N0L3J0cC9nc3RydGNwYnVmZmVyLmgKLSsrKyBi
L2dzdC1saWJzL2dzdC9ydHAvZ3N0cnRjcGJ1ZmZlci5oCi1AQCAtNTksNiArNTksOSBAQCB0eXBl
ZGVmIGVudW0KLSAgIEdTVF9SVENQX1RZUEVfUFNGQiAgICA9IDIwNgotIH0gR3N0UlRDUFR5cGU7
Ci0gCi0rLyogRklYTUUgMi4wOiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBkZWZpbmUgZm9yIGVu
dW0gdHlwbyAqLwotKyNkZWZpbmUgR1NUX1JUQ1BfUlRQRkJfVFlQRV9SQ1RQX1NSX1JFUSBHU1Rf
UlRDUF9SVFBGQl9UWVBFX1JUQ1BfU1JfUkVRCi0rCi0gLyoqCi0gICogR3N0UlRDUEZCVHlwZToK
LSAgKiBAR1NUX1JUQ1BfRkJfVFlQRV9JTlZBTElEOiBJbnZhbGlkIHR5cGUKLUBAIC02Niw3ICs2
OSw3IEBAIHR5cGVkZWYgZW51bQotICAqIEBHU1RfUlRDUF9SVFBGQl9UWVBFX1RNTUJSOiBUZW1w
b3JhcnkgTWF4aW11bSBNZWRpYSBTdHJlYW0gQml0IFJhdGUgUmVxdWVzdAotICAqIEBHU1RfUlRD
UF9SVFBGQl9UWVBFX1RNTUJOOiBUZW1wb3JhcnkgTWF4aW11bSBNZWRpYSBTdHJlYW0gQml0IFJh
dGUKLSAgKiAgICBOb3RpZmljYXRpb24KLS0gKiBAR1NUX1JUQ1BfUlRQRkJfVFlQRV9SVENQX1NS
X1NFUTogUmVxdWVzdCBhbiBTUiBwYWNrZXQgZm9yIGVhcmx5Ci0rICogQEdTVF9SVENQX1JUUEZC
X1RZUEVfUlRDUF9TUl9SRVE6IFJlcXVlc3QgYW4gU1IgcGFja2V0IGZvciBlYXJseQotICAqICAg
IHN5bmNocm9uaXphdGlvbgotICAqIEBHU1RfUlRDUF9QU0ZCX1RZUEVfUExJOiBQaWN0dXJlIExv
c3MgSW5kaWNhdGlvbgotICAqIEBHU1RfUlRDUF9QU0ZCX1RZUEVfU0xJOiBTbGljZSBMb3NzIElu
ZGljYXRpb24KLUBAIC04OSw3ICs5Miw3IEBAIHR5cGVkZWYgZW51bQotICAgR1NUX1JUQ1BfUlRQ
RkJfVFlQRV9UTU1CUiAgICAgICA9IDMsCi0gICBHU1RfUlRDUF9SVFBGQl9UWVBFX1RNTUJOICAg
ICAgID0gNCwKLSAgIC8qIFJUUEZCIHR5cGVzIGFzc2lnbmVkIGluIFJGQyA2MDUxICovCi0tICBH
U1RfUlRDUF9SVFBGQl9UWVBFX1JDVFBfU1JfUkVRID0gNSwKLSsgIEdTVF9SVENQX1JUUEZCX1RZ
UEVfUlRDUF9TUl9SRVEgPSA1LAotICAgLyogUFNGQiB0eXBlcyAqLwotICAgR1NUX1JUQ1BfUFNG
Ql9UWVBFX1BMSSAgICAgICAgICA9IDEsCi0gICBHU1RfUlRDUF9QU0ZCX1RZUEVfU0xJICAgICAg
ICAgID0gMiwKLS0tIAotMi4xLjQKLQpkaWZmIC0tZ2l0IGEvVG9vbHMvZWZsL3BhdGNoZXMvZ3N0
LXBsdWdpbnMtZ29vZC1SZXZlcnQtcXRkZW11eC1leHBvc2Utc3RyZWFtcy13aXRoLWZpcnN0LW1v
b2YtZm9yLWZyLnBhdGNoIGIvVG9vbHMvZWZsL3BhdGNoZXMvZ3N0LXBsdWdpbnMtZ29vZC1SZXZl
cnQtcXRkZW11eC1leHBvc2Utc3RyZWFtcy13aXRoLWZpcnN0LW1vb2YtZm9yLWZyLnBhdGNoCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTYwZGI0NzcyYjI3NzNhMjFjZDAxMzQwNGI0
YmRlZWIxMGQ2ZjEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1Rvb2xzL2VmbC9wYXRjaGVzL2dzdC1wbHVnaW5zLWdvb2QtUmV2ZXJ0LXF0ZGVtdXgtZXhw
b3NlLXN0cmVhbXMtd2l0aC1maXJzdC1tb29mLWZvci1mci5wYXRjaAorKysgL2Rldi9udWxsCkBA
IC0xLDEzMyArMCwwIEBACi1Gcm9tIDFhODFiZDkwZDRhM2U1OWQ2NjY5YTBiYmZhNDU2ZjFlZDRl
NWRiNDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBYYWJpZXIgUm9kcmlndWV6IENh
bHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KLURhdGU6IFRodSwgNyBBcHIgMjAxNiAxMzo1Nzox
NiArMDIwMAotU3ViamVjdDogW1BBVENIXSBSZXZlcnQgInF0ZGVtdXg6IGV4cG9zZSBzdHJlYW1z
IHdpdGggZmlyc3QgbW9vZiBmb3IKLSBmcmFnbWVudGVkIGZvcm1hdCIKLQotVGhpcyByZXZlcnRz
IGNvbW1pdCBkOGJiNjY4N2VhMjUxNTcwYzMzMTAzODI3OWE0M2Q0NDgxNjdkNmFkLgotLS0tCi0g
Z3N0L2lzb21wNC9xdGRlbXV4LmMgfCA1NCArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gZ3N0L2lzb21wNC9xdGRlbXV4LmggfCAgMSAtCi0gMiBm
aWxlcyBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspLCAzOSBkZWxldGlvbnMoLSkKLQotZGlmZiAt
LWdpdCBhL2dzdC9pc29tcDQvcXRkZW11eC5jIGIvZ3N0L2lzb21wNC9xdGRlbXV4LmMKLWluZGV4
IDM5YmUxNjMuLjk2MzZiNGIgMTAwNjQ0Ci0tLS0gYS9nc3QvaXNvbXA0L3F0ZGVtdXguYwotKysr
IGIvZ3N0L2lzb21wNC9xdGRlbXV4LmMKLUBAIC02MDksNyArNjA5LDYgQEAgZ3N0X3F0ZGVtdXhf
aW5pdCAoR3N0UVREZW11eCAqIHF0ZGVtdXgpCi0gICBxdGRlbXV4LT5zdGF0ZSA9IFFUREVNVVhf
U1RBVEVfSU5JVElBTDsKLSAgIHF0ZGVtdXgtPnB1bGxiYXNlZCA9IEZBTFNFOwotICAgcXRkZW11
eC0+cG9zdGVkX3JlZGlyZWN0ID0gRkFMU0U7Ci0tICBxdGRlbXV4LT5wZW5kaW5nX2NvbmZpZ3Vy
ZSA9IEZBTFNFOwotICAgcXRkZW11eC0+bmVlZGVkYnl0ZXMgPSAxNjsKLSAgIHF0ZGVtdXgtPnRv
ZHJvcCA9IDA7Ci0gICBxdGRlbXV4LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotQEAg
LTIwNDksNyArMjA0OCw2IEBAIGdzdF9xdGRlbXV4X3Jlc2V0IChHc3RRVERlbXV4ICogcXRkZW11
eCwgZ2Jvb2xlYW4gaGFyZCkKLSAgICAgZ3N0X2NhcHNfcmVwbGFjZSAoJnF0ZGVtdXgtPm1lZGlh
X2NhcHMsIE5VTEwpOwotICAgICBxdGRlbXV4LT50aW1lc2NhbGUgPSAwOwotICAgICBxdGRlbXV4
LT5nb3RfbW9vdiA9IEZBTFNFOwotLSAgICBxdGRlbXV4LT5wZW5kaW5nX2NvbmZpZ3VyZSA9IEZB
TFNFOwotICAgfSBlbHNlIGlmIChxdGRlbXV4LT5tc3NfbW9kZSkgewotICAgICBnc3RfZmxvd19j
b21iaW5lcl9yZXNldCAocXRkZW11eC0+Zmxvd2NvbWJpbmVyKTsKLSAgICAgZm9yIChuID0gMDsg
biA8IHF0ZGVtdXgtPm5fc3RyZWFtczsgbisrKQotQEAgLTYxMDQsNyArNjEwMiw2IEBAIGdzdF9x
dGRlbXV4X3Byb2Nlc3NfYWRhcHRlciAoR3N0UVREZW11eCAqIGRlbXV4LCBnYm9vbGVhbiBmb3Jj
ZSkKLSAgICAgICAgICAgICAmZm91cmNjKTsKLSAgICAgICAgIGlmIChmb3VyY2MgPT0gRk9VUkND
X21vb3YpIHsKLSAgICAgICAgICAgZ2ludCBuOwotLSAgICAgICAgICBnYm9vbGVhbiBnb3Rfc2Ft
cGxlcyA9IEZBTFNFOwotIAotICAgICAgICAgICAvKiBpbiB1c3VhbCBmcmFnbWVudGVkIHNldHVw
IHdlIGNvdWxkIHRyeSB0byBzY2FuIGZvciBtb3JlCi0gICAgICAgICAgICAqIGFuZCBlbmQgdXAg
YXQgdGhlIHRoZSBtb292IChhZnRlciBtZGF0KSBhZ2FpbiAqLwotQEAgLTYxMzYsMjcgKzYxMzMs
MTkgQEAgZ3N0X3F0ZGVtdXhfcHJvY2Vzc19hZGFwdGVyIChHc3RRVERlbXV4ICogZGVtdXgsIGdi
b29sZWFuIGZvcmNlKQotICAgICAgICAgICAgIHF0ZGVtdXhfbm9kZV9kdW1wIChkZW11eCwgZGVt
dXgtPm1vb3Zfbm9kZSk7Ci0gICAgICAgICAgICAgcXRkZW11eF9wYXJzZV90cmVlIChkZW11eCk7
Ci0gICAgICAgICAgICAgcXRkZW11eF9wcmVwYXJlX3N0cmVhbXMgKGRlbXV4KTsKLSsgICAgICAg
ICAgICBpZiAoIWRlbXV4LT5nb3RfbW9vdikKLSsgICAgICAgICAgICAgIHF0ZGVtdXhfZXhwb3Nl
X3N0cmVhbXMgKGRlbXV4KTsKLSsgICAgICAgICAgICBlbHNlIHsKLSAKLS0gICAgICAgICAgICBm
b3IgKG4gPSAwOyBuIDwgZGVtdXgtPm5fc3RyZWFtczsgbisrKSB7Ci0tICAgICAgICAgICAgICBR
dERlbXV4U3RyZWFtICpzdHJlYW0gPSBkZW11eC0+c3RyZWFtc1tuXTsKLS0gICAgICAgICAgICAg
IGdvdF9zYW1wbGVzIHw9IHN0cmVhbS0+c3RibF9pbmRleCA+PSAwOwotLSAgICAgICAgICAgIH0K
LS0gICAgICAgICAgICBpZiAoIWRlbXV4LT5mcmFnbWVudGVkIHx8IGdvdF9zYW1wbGVzKSB7Ci0t
ICAgICAgICAgICAgICBpZiAoIWRlbXV4LT5nb3RfbW9vdikgewotLSAgICAgICAgICAgICAgICBx
dGRlbXV4X2V4cG9zZV9zdHJlYW1zIChkZW11eCk7Ci0tICAgICAgICAgICAgICB9IGVsc2Ugewot
LSAgICAgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgZGVtdXgtPm5fc3RyZWFtczsgbisrKSB7
Ci0tICAgICAgICAgICAgICAgICAgUXREZW11eFN0cmVhbSAqc3RyZWFtID0gZGVtdXgtPnN0cmVh
bXNbbl07Ci0tICAgICAgICAgICAgICAgICAgZ3N0X3F0ZGVtdXhfY29uZmlndXJlX3N0cmVhbSAo
ZGVtdXgsIHN0cmVhbSk7Ci0tICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICAgIGZvciAo
biA9IDA7IG4gPCBkZW11eC0+bl9zdHJlYW1zOyBuKyspIHsKLSsgICAgICAgICAgICAgICAgUXRE
ZW11eFN0cmVhbSAqc3RyZWFtID0gZGVtdXgtPnN0cmVhbXNbbl07Ci0rCi0rICAgICAgICAgICAg
ICAgIGdzdF9xdGRlbXV4X2NvbmZpZ3VyZV9zdHJlYW0gKGRlbXV4LCBzdHJlYW0pOwotICAgICAg
ICAgICAgICAgfQotLSAgICAgICAgICAgICAgZ3N0X3F0ZGVtdXhfY2hlY2tfc2VuZF9wZW5kaW5n
X3NlZ21lbnQgKGRlbXV4KTsKLS0gICAgICAgICAgICAgIGRlbXV4LT5wZW5kaW5nX2NvbmZpZ3Vy
ZSA9IEZBTFNFOwotLSAgICAgICAgICAgIH0gZWxzZSB7Ci0tICAgICAgICAgICAgICBkZW11eC0+
cGVuZGluZ19jb25maWd1cmUgPSBUUlVFOwotICAgICAgICAgICAgIH0KLSAKLSAgICAgICAgICAg
ICBkZW11eC0+Z290X21vb3YgPSBUUlVFOwotKyAgICAgICAgICAgIGdzdF9xdGRlbXV4X2NoZWNr
X3NlbmRfcGVuZGluZ19zZWdtZW50IChkZW11eCk7Ci0gCi0gICAgICAgICAgICAgLyogZnJhZ21l
bnRlZCBzdHJlYW1zIGhlYWRlcnMgc2hvdWxkbid0IGNvbnRhaW4gZWR0cyBhdG9tcyAqLwotICAg
ICAgICAgICAgIGlmICghZGVtdXgtPmZyYWdtZW50ZWQpIHsKLUBAIC02MTc1LDcgKzYxNjQsNiBA
QCBnc3RfcXRkZW11eF9wcm9jZXNzX2FkYXB0ZXIgKEdzdFFURGVtdXggKiBkZW11eCwgZ2Jvb2xl
YW4gZm9yY2UpCi0gICAgICAgICAgICAgZ3VpbnQ2NCBkaXN0ID0gMDsKLSAgICAgICAgICAgICBH
c3RDbG9ja1RpbWUgcHJldl9wdHM7Ci0gICAgICAgICAgICAgZ3VpbnQ2NCBwcmV2X29mZnNldDsK
LS0gICAgICAgICAgICBnaW50IG47Ci0gCi0gICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAo
ZGVtdXgsICJQYXJzaW5nIFttb29mXSIpOwotIAotQEAgLTYyMDksMjUgKzYxOTcsMTUgQEAgZ3N0
X3F0ZGVtdXhfcHJvY2Vzc19hZGFwdGVyIChHc3RRVERlbXV4ICogZGVtdXgsIGdib29sZWFuIGZv
cmNlKQotICAgICAgICAgICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgICAgICAg
ICBnb3RvIGRvbmU7Ci0gICAgICAgICAgICAgfQotLSAgICAgICAgICAgIC8qIGluIE1TUyB3ZSBu
ZWVkIHRvIGV4cG9zZSB0aGUgcGFkcyBhZnRlciB0aGUgZmlyc3QgbW9vZiBhcyB3ZSB3b24ndCBn
ZXQgYSBtb292IAotLSAgICAgICAgICAgICAqIEFsc28sIGZyYWdtZW50ZWQgZm9ybWF0IG5lZWQg
dG8gYmUgZXhwb3NlZCBpZiBhIG1vb3YgaGF2ZSBubyB2YWxpZCBzYW1wbGUgZGF0YSAqLwotLSAg
ICAgICAgICAgIGlmIChkZW11eC0+bXNzX21vZGUgfHwgZGVtdXgtPnBlbmRpbmdfY29uZmlndXJl
KSB7Ci0tICAgICAgICAgICAgICBpZiAoIWRlbXV4LT5leHBvc2VkKSB7Ci0tICAgICAgICAgICAg
ICAgIGlmICghZGVtdXgtPnBlbmRpbmdfbmV3c2VnbWVudCkgewotLSAgICAgICAgICAgICAgICAg
IEdzdFNlZ21lbnQgc2VnbWVudDsKLS0gICAgICAgICAgICAgICAgICBnc3Rfc2VnbWVudF9pbml0
ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLS0gICAgICAgICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUIChkZW11eCwgIm5ldyBwZW5kaW5nX25ld3NlZ21lbnQiKTsKLS0gICAgICAgICAg
ICAgICAgICBkZW11eC0+cGVuZGluZ19uZXdzZWdtZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50
ICgmc2VnbWVudCk7Ci0tICAgICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAgICAgcXRkZW11
eF9leHBvc2Vfc3RyZWFtcyAoZGVtdXgpOwotLSAgICAgICAgICAgICAgfSBlbHNlIHsKLS0gICAg
ICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IGRlbXV4LT5uX3N0cmVhbXM7IG4rKykgewotLSAg
ICAgICAgICAgICAgICAgIFF0RGVtdXhTdHJlYW0gKnN0cmVhbSA9IGRlbXV4LT5zdHJlYW1zW25d
OwotLSAgICAgICAgICAgICAgICAgIGdzdF9xdGRlbXV4X2NvbmZpZ3VyZV9zdHJlYW0gKGRlbXV4
LCBzdHJlYW0pOwotLSAgICAgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgLyogaW4gTVNTIHdl
IG5lZWQgdG8gZXhwb3NlIHRoZSBwYWRzIGFmdGVyIHRoZSBmaXJzdCBtb29mIGFzIHdlIHdvbid0
IGdldCBhIG1vb3YgKi8KLSsgICAgICAgICAgICBpZiAoZGVtdXgtPm1zc19tb2RlICYmICFkZW11
eC0+ZXhwb3NlZCkgewotKyAgICAgICAgICAgICAgaWYgKCFkZW11eC0+cGVuZGluZ19uZXdzZWdt
ZW50KSB7Ci0rICAgICAgICAgICAgICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKLSsgICAgICAgICAg
ICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0rICAg
ICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAibmV3IHBlbmRpbmdfbmV3c2Vn
bWVudCIpOwotKyAgICAgICAgICAgICAgICBkZW11eC0+cGVuZGluZ19uZXdzZWdtZW50ID0gZ3N0
X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7Ci0gICAgICAgICAgICAgICB9Ci0tICAgICAg
ICAgICAgICBnc3RfcXRkZW11eF9jaGVja19zZW5kX3BlbmRpbmdfc2VnbWVudCAoZGVtdXgpOwot
LSAgICAgICAgICAgICAgZGVtdXgtPnBlbmRpbmdfY29uZmlndXJlID0gRkFMU0U7Ci0rICAgICAg
ICAgICAgICBxdGRlbXV4X2V4cG9zZV9zdHJlYW1zIChkZW11eCk7Ci0gICAgICAgICAgICAgfQot
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4
LCAiRGlzY2FyZGluZyBbbW9vZl0iKTsKLWRpZmYgLS1naXQgYS9nc3QvaXNvbXA0L3F0ZGVtdXgu
aCBiL2dzdC9pc29tcDQvcXRkZW11eC5oCi1pbmRleCA2MDYxMjE1Li5lY2YwYzYzIDEwMDY0NAot
LS0tIGEvZ3N0L2lzb21wNC9xdGRlbXV4LmgKLSsrKyBiL2dzdC9pc29tcDQvcXRkZW11eC5oCi1A
QCAtODksNyArODksNiBAQCBzdHJ1Y3QgX0dzdFFURGVtdXggewotICAgZ2Jvb2xlYW4gcG9zdGVk
X3JlZGlyZWN0OwotIAotICAgLyogcHVzaCBiYXNlZCB2YXJpYWJsZXMgKi8KLS0gIGdib29sZWFu
IHBlbmRpbmdfY29uZmlndXJlOwotICAgZ3VpbnQgbmVlZGVkYnl0ZXM7Ci0gICBndWludCB0b2Ry
b3A7Ci0gICBHc3RBZGFwdGVyICphZGFwdGVyOwotLS0gCi0yLjguMC5yYzMKLQpkaWZmIC0tZ2l0
IGEvVG9vbHMvZWZsL3BhdGNoZXMvZ3N0LXBsdWdpbnMtZ29vZC11c2UtdGhlLXRmZHQtZGVjb2Rl
LXRpbWUucGF0Y2ggYi9Ub29scy9lZmwvcGF0Y2hlcy9nc3QtcGx1Z2lucy1nb29kLXVzZS10aGUt
dGZkdC1kZWNvZGUtdGltZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU5
ZGQ5N2Y3OTE2ZjA4NzM3OWUwOGZjNjhhYTBkYTIxMjk1OGM3NS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9lZmwvcGF0Y2hlcy9nc3QtcGx1Z2lu
cy1nb29kLXVzZS10aGUtdGZkdC1kZWNvZGUtdGltZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0x
LDE0NiArMCwwIEBACi1Gcm9tIDQ2ZDNlMGZhYTkyMjY0MzA5NGE1ZTQ2YTMyZTRmODJmNzc0YWU3
NzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiA9P1VURi04P3E/RW5yaXF1ZT0yME9j
YT1DMz1CMWE9MjBHb256PUMzPUExbGV6Pz0gPGVvY2FuaGFAaWdhbGlhLmNvbT4KLURhdGU6IFR1
ZSwgMTAgTm92IDIwMTUgMTM6MDk6MDAgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gVXNlIHRoZSB0
ZmR0IGRlY29kZSB0aW1lIHdoZW4gaXQncyBzaWduaWZpY2FudGx5IGRpZmZlcmVudAotIHRoYW4g
dGhlIHRpbWUgaW4gdGhlIGxhc3Qgc2FtcGxlIGlmIGFsd2F5cy1ob25vci10ZmR0IGlzIGVuYWJs
ZWQKLQotaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NDIzMAot
LS0tCi0gZ3N0L2lzb21wNC9xdGRlbXV4LmMgfCA3MiArKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrCi0gZ3N0L2lzb21wNC9xdGRlbXV4LmggfCAgMSAr
Ci0gMiBmaWxlcyBjaGFuZ2VkLCA3MyBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9nc3Qv
aXNvbXA0L3F0ZGVtdXguYyBiL2dzdC9pc29tcDQvcXRkZW11eC5jCi1pbmRleCA4ODA1OTVlLi5k
OGI1NGYwIDEwMDY0NAotLS0tIGEvZ3N0L2lzb21wNC9xdGRlbXV4LmMKLSsrKyBiL2dzdC9pc29t
cDQvcXRkZW11eC5jCi1AQCAtNTM1LDYgKzUzNSwxMSBAQCBzdGF0aWMgdm9pZCBnc3RfcXRkZW11
eF9hcHBlbmRfcHJvdGVjdGlvbl9zeXN0ZW1faWQgKEdzdFFURGVtdXggKiBxdGRlbXV4LAotICAg
ICBjb25zdCBnY2hhciAqIGlkKTsKLSBzdGF0aWMgdm9pZCBxdGRlbXV4X2dzdF9zdHJ1Y3R1cmVf
ZnJlZSAoR3N0U3RydWN0dXJlICogZ3N0c3RydWN0dXJlKTsKLSAKLStzdGF0aWMgdm9pZCBnc3Rf
cXRkZW11eF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0r
ICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogc3BlYyk7Ci0rc3RhdGljIHZv
aWQgZ3N0X3F0ZGVtdXhfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9w
X2lkLAotKyAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHNwZWMpOwotKwotIHN0YXRp
YyB2b2lkCi0gZ3N0X3F0ZGVtdXhfY2xhc3NfaW5pdCAoR3N0UVREZW11eENsYXNzICoga2xhc3Mp
Ci0gewotQEAgLTU0Niw4ICs1NTEsMjEgQEAgZ3N0X3F0ZGVtdXhfY2xhc3NfaW5pdCAoR3N0UVRE
ZW11eENsYXNzICoga2xhc3MpCi0gCi0gICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVl
a19wYXJlbnQgKGtsYXNzKTsKLSAKLSsgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdz
dF9xdGRlbXV4X3NldF9wcm9wZXJ0eTsKLSsgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9
IGdzdF9xdGRlbXV4X2dldF9wcm9wZXJ0eTsKLSsKLSAgIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2Ug
PSBnc3RfcXRkZW11eF9kaXNwb3NlOwotIAotKyAvKioKLSsgICAqIEdzdFF0RGVtdXg6OmFsd2F5
cy1ob25vci10ZmR0OgotKyAgICoKLSsgICAqIFJlcXVlc3RzIHRoZSBkZW11eGVyIHRvIHJlc3Bl
Y3Qgd2hhdCB0aGUgVEZEVCBhdG9tIHNheXMgaW4gb3JkZXIgdG8gcHJvZHVjZSBwcmVzZW50YXRp
b24gdGltZXN0YW1wcy4gRGVmYXVsdHMgdG8gRkFMU0UuCi0rICAgKi8KLSsgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQUxXQVlTX0hPTk9SX1RG
RFQsCi0rICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJhbHdheXMtaG9ub3ItdGZkdCIsICJB
bHdheXMgaG9ub3IgVEZEVCIsCi0rICAgICAgICAgICJXaGVuIGVuYWJsZWQsIFRGRFQgYXRvbSB3
aWxsIGFsd2F5cyBiZSByZXNwZWN0ZWQgaW4gb3JkZXIgdG8gcHJvZHVjZSBwcmVzZW50YXRpb24g
dGltZXN0YW1wcyIsCi0rICAgICAgICAgIEZBTFNFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFS
QU1fU1RBVElDX1NUUklOR1MpKTsKLSsKLSAgIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0
ZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcXRkZW11eF9jaGFuZ2Vfc3RhdGUpOwotICNpZiAw
Ci0gICBnc3RlbGVtZW50X2NsYXNzLT5zZXRfaW5kZXggPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0
X3F0ZGVtdXhfc2V0X2luZGV4KTsKLUBAIC02MTEsNiArNjI5LDcgQEAgZ3N0X3F0ZGVtdXhfaW5p
dCAoR3N0UVREZW11eCAqIHF0ZGVtdXgpCi0gICBxdGRlbXV4LT5jZW5jX2F1eF9pbmZvX3NpemVz
ID0gTlVMTDsKLSAgIHF0ZGVtdXgtPmNlbmNfYXV4X3NhbXBsZV9jb3VudCA9IDA7Ci0gICBxdGRl
bXV4LT5wcm90ZWN0aW9uX3N5c3RlbV9pZHMgPSBOVUxMOwotKyAgcXRkZW11eC0+YWx3YXlzX2hv
bm9yX3RmZHQgPSBGQUxTRTsKLSAgIGdfcXVldWVfaW5pdCAoJnF0ZGVtdXgtPnByb3RlY3Rpb25f
ZXZlbnRfcXVldWUpOwotICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnF0ZGVtdXgtPnNlZ21lbnQsIEdT
VF9GT1JNQVRfVElNRSk7Ci0gICBxdGRlbXV4LT5mbG93Y29tYmluZXIgPSBnc3RfZmxvd19jb21i
aW5lcl9uZXcgKCk7Ci1AQCAtNjM5LDYgKzY1OCw0MiBAQCBnc3RfcXRkZW11eF9kaXNwb3NlIChH
T2JqZWN0ICogb2JqZWN0KQotIH0KLSAKLSBzdGF0aWMgdm9pZAotK2dzdF9xdGRlbXV4X3NldF9w
cm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSsgICAgY29uc3QgR1Zh
bHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLSt7Ci0rICBHc3RRVERlbXV4ICpxdGRl
bXV4ID0gR1NUX1FUREVNVVggKG9iamVjdCk7Ci0rCi0rICBzd2l0Y2ggKHByb3BfaWQpIHsKLSsg
ICAgY2FzZSBQUk9QX0FMV0FZU19IT05PUl9URkRUOgotKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAo
cXRkZW11eCk7Ci0rICAgICAgcXRkZW11eC0+YWx3YXlzX2hvbm9yX3RmZHQgPSBnX3ZhbHVlX2dl
dF9ib29sZWFuICh2YWx1ZSk7Ci0rICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHF0ZGVtdXgpOwot
KyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0rICAgICAgYnJlYWs7Ci0r
ICB9Ci0rfQotKwotK3N0YXRpYyB2b2lkCi0rZ3N0X3F0ZGVtdXhfZ2V0X3Byb3BlcnR5IChHT2Jq
ZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSsgICAgR1BhcmFt
U3BlYyAqIHBzcGVjKQotK3sKLSsgIEdzdFFURGVtdXggKnF0ZGVtdXggPSBHU1RfUVRERU1VWCAo
b2JqZWN0KTsKLSsKLSsgIHN3aXRjaCAocHJvcF9pZCkgewotKyAgICBjYXNlIFBST1BfQUxXQVlT
X0hPTk9SX1RGRFQ6Ci0rICAgICAgR1NUX09CSkVDVF9MT0NLIChxdGRlbXV4KTsKLSsgICAgICBn
X3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcXRkZW11eC0+YWx3YXlzX2hvbm9yX3RmZHQpOwot
KyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChxdGRlbXV4KTsKLSsgICAgICBicmVhazsKLSsgICAg
ZGVmYXVsdDoKLSsgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVj
dCwgcHJvcF9pZCwgcHNwZWMpOwotKyAgICAgIGJyZWFrOwotKyAgfQotK30KLSsKLStzdGF0aWMg
dm9pZAotIGdzdF9xdGRlbXV4X3Bvc3Rfbm9fcGxheWFibGVfc3RyZWFtX2Vycm9yIChHc3RRVERl
bXV4ICogcXRkZW11eCkKLSB7Ci0gICBpZiAocXRkZW11eC0+cG9zdGVkX3JlZGlyZWN0KSB7Ci1A
QCAtMjk5NSw2ICszMDUwLDE2IEBAIHF0ZGVtdXhfcGFyc2VfdHJ1biAoR3N0UVREZW11eCAqIHF0
ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiB0cnVuLAotICAgICAgICAgICBzdHJlYW0tPnNhbXBsZXNb
c3RyZWFtLT5uX3NhbXBsZXMgLSAxXS50aW1lc3RhbXAgKwotICAgICAgICAgICBzdHJlYW0tPnNh
bXBsZXNbc3RyZWFtLT5uX3NhbXBsZXMgLSAxXS5kdXJhdGlvbjsKLSAKLSsgICAgICAvKiBJZiB3
ZSdyZSBhbHdheXMgaG9ub3JpbmcgVEZEVCBhbmQgdGhlcmUncyBhIHNpZ25pZmljYXRpdmUgZGlm
ZmVyZW5jZQotKyAgICAgICAqIGJldHdlZW4gdGhlIGRlY29kZV90cyBhbmQgdGhlIHRpbWVzdGFt
cCwgcHJlZmVyIGRlY29kZV90cyAqLwotKyAgICAgIGlmIChxdGRlbXV4LT5hbHdheXNfaG9ub3Jf
dGZkdCA9PSBUUlVFCi0rICAgICAgICAgICYmIGFicyAoZGVjb2RlX3RzIC0gdGltZXN0YW1wKSA+
Ci0rICAgICAgICAgIHN0cmVhbS0+c2FtcGxlc1tzdHJlYW0tPm5fc2FtcGxlcyAtIDFdLmR1cmF0
aW9uKSB7Ci0rICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHF0ZGVtdXgsCi0rICAgICAgICAgICAg
ImRlY29kZV90cyBpcyBzaWduaWZpY2FudGx5IGRpZmZlcmVudCBmcm9tIHRpbWVzdGFtcCwgdXNp
bmcgZGVjb2RlX3RzIik7Ci0rICAgICAgICB0aW1lc3RhbXAgPSBkZWNvZGVfdHM7Ci0rICAgICAg
fQotKwotICAgICAgIGdzdF90cyA9IFFUU1RSRUFNVElNRV9UT19HU1RUSU1FIChzdHJlYW0sIHRp
bWVzdGFtcCk7Ci0gICAgICAgR1NUX0lORk9fT0JKRUNUIChxdGRlbXV4LCAiZmlyc3Qgc2FtcGxl
IHRzICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAgICAiIChleHRlbmRzIHByZXZpb3VzIHNh
bXBsZXMpIiwgR1NUX1RJTUVfQVJHUyAoZ3N0X3RzKSk7Ci1kaWZmIC0tZ2l0IGEvZ3N0L2lzb21w
NC9xdGRlbXV4LmggYi9nc3QvaXNvbXA0L3F0ZGVtdXguaAotaW5kZXggNTNiZDA3MS4uZWNmMGM2
MyAxMDA2NDQKLS0tLSBhL2dzdC9pc29tcDQvcXRkZW11eC5oCi0rKysgYi9nc3QvaXNvbXA0L3F0
ZGVtdXguaAotQEAgLTE1NCwxMiArMTU0LDIwIEBAIHN0cnVjdCBfR3N0UVREZW11eCB7Ci0gICBn
dWludDggKmNlbmNfYXV4X2luZm9fc2l6ZXM7Ci0gICBndWludDMyIGNlbmNfYXV4X3NhbXBsZV9j
b3VudDsKLSAKLSsgIGdib29sZWFuIGFsd2F5c19ob25vcl90ZmR0OwotIH07Ci0gCi0gc3RydWN0
IF9Hc3RRVERlbXV4Q2xhc3MgewotICAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLSB9
OwotIAotKy8qIHByb3BzICovCi0rZW51bQotK3sKLSsgIFBST1BfMCwKLSsgIFBST1BfQUxXQVlT
X0hPTk9SX1RGRFQKLSt9OwotKwotIEdUeXBlIGdzdF9xdGRlbXV4X2dldF90eXBlICh2b2lkKTsK
LSAKLSBHX0VORF9ERUNMUwotLS0gCi0yLjYuMQotCmRpZmYgLS1naXQgYS9Ub29scy9lZmwvcGF0
Y2hlcy9vcGVud2VicnRjLWdzdC1wbHVnaW5zLWNsYW5nLXdhcm5pbmctZml4LnBhdGNoIGIvVG9v
bHMvZWZsL3BhdGNoZXMvb3BlbndlYnJ0Yy1nc3QtcGx1Z2lucy1jbGFuZy13YXJuaW5nLWZpeC5w
YXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI2YmE3ZTk5MjA1Y2NkMzg3Y2Ix
MGY3MDcyM2U2NTI5MWUzZmFkNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Ub29scy9lZmwvcGF0Y2hlcy9vcGVud2VicnRjLWdzdC1wbHVnaW5zLWNsYW5n
LXdhcm5pbmctZml4LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotZGlmZiAt
LWdpdCBhL2dzdC92aWRlb3JlcGFpci9NYWtlZmlsZS5hbSBiL2dzdC92aWRlb3JlcGFpci9NYWtl
ZmlsZS5hbQotaW5kZXggMzQ0ODdiNS4uMzRjMzg4NyAxMDA2NDQKLS0tLSBhL2dzdC92aWRlb3Jl
cGFpci9NYWtlZmlsZS5hbQotKysrIGIvZ3N0L3ZpZGVvcmVwYWlyL01ha2VmaWxlLmFtCi1AQCAt
MTcsNyArMTcsNyBAQCBwbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3R2aWRlb3JlcGFpci5sYQot
IGxpYmdzdHZpZGVvcmVwYWlyX2xhX1NPVVJDRVMgPSBnc3R2aWRlb3JlcGFpci5jCi0gCi0gIyBj
b21waWxlciBhbmQgbGlua2VyIGZsYWdzIHVzZWQgdG8gY29tcGlsZSB0aGlzIHBsdWdpbiwgc2V0
IGluIGNvbmZpZ3VyZS5hYwotLWxpYmdzdHZpZGVvcmVwYWlyX2xhX0NGTEFHUyA9ICQoR1NUX0NG
TEFHUykgJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgLVdhbGwgLVdleHRyYSAtV2Vycm9yCi0r
bGliZ3N0dmlkZW9yZXBhaXJfbGFfQ0ZMQUdTID0gJChHU1RfQ0ZMQUdTKSAkKEdTVF9QTFVHSU5T
X0JBU0VfQ0ZMQUdTKSAtV2FsbCAtV2V4dHJhCi0gbGliZ3N0dmlkZW9yZXBhaXJfbGFfTElCQURE
ID0gJChHU1RfTElCUykgLWxnc3R2aWRlby0xLjAKLSBsaWJnc3R2aWRlb3JlcGFpcl9sYV9MREZM
QUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi0gaWYgIUdTVF9QTFVHSU5fQlVJTERfU1RBVElD
CmRpZmYgLS1naXQgYS9Ub29scy9ndGsvbWFuaWZlc3QudHh0LmluIGIvVG9vbHMvZ3RrL21hbmlm
ZXN0LnR4dC5pbgppbmRleCAwOTUzMWUzOWVlYjVlZDUwNDZjZjBmYWQ0NzNlM2VmYzYxN2ZhNjBh
Li4yNjMxM2RhZWJkMjI3NzVlNjM3MzBlYmM3MzNjZWYwMmNhMTNmNjQxIDEwMDY0NAotLS0gYS9U
b29scy9ndGsvbWFuaWZlc3QudHh0LmluCisrKyBiL1Rvb2xzL2d0ay9tYW5pZmVzdC50eHQuaW4K
QEAgLTQsNyArNCw2IEBAIGV4Y2x1ZGUgQ2hhbmdlTG9nCiBleGNsdWRlIENNYWtlTGlzdHMudHh0
LnVzZXIKIGV4Y2x1ZGUgTWFrZWZpbGUKIGV4Y2x1ZGUgUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQot
ZXhjbHVkZSBQbGF0Zm9ybUVmbC5jbWFrZQogZXhjbHVkZSBQbGF0Zm9ybU1hYy5jbWFrZQogZXhj
bHVkZSBQbGF0Zm9ybVdpbi5jbWFrZQogZXhjbHVkZSBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCg==
</data>
<flag name="review"
          id="329325"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>