<?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>122227</bug_id>
          
          <creation_ts>2013-10-02 11:42:28 -0700</creation_ts>
          <short_desc>Remove Qt code from Tools/</short_desc>
          <delta_ts>2013-10-02 14:28:54 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>935468</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-10-02 11:42:28 -0700</bug_when>
    <thetext>Remove Qt code from Tools/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935533</commentid>
    <comment_count>1</comment_count>
      <attachid>213196</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-10-02 13:52:49 -0700</bug_when>
    <thetext>Created attachment 213196
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935550</commentid>
    <comment_count>2</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-10-02 14:28:54 -0700</bug_when>
    <thetext>Committed r156797: &lt;http://trac.webkit.org/changeset/156797&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213196</attachid>
            <date>2013-10-02 13:52:49 -0700</date>
            <delta_ts>2013-10-02 14:14:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122227-20131002135248.patch</filename>
            <type>text/plain</type>
            <size>678507</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2Nzg5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggY2FlZjRiYmIyZTlkOTQxMDJmY2E4ZDY2YmNjODJlNWI3
NWIxNzJiYS4uZDVkMGE3NmVkN2Q0NDljMGFhOGUxNGYyYzc2NWYwNmU5M2U1YzM2ZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIw
MiBAQAogMjAxMy0xMC0wMiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgog
CisgICAgICAgIFJlbW92ZSBRdCBjb2RlIGZyb20gVG9vbHMvCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIyMjcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1dvcmtRdWV1ZS5j
cHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9zcmMucHJvOiBSZW1vdmVk
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybzogUmVtb3Zl
ZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5xcmM6IFJlbW92
ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVNYWluLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0
Lmg6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvRXZlbnRTZW5kZXJRdC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvRXZlbnRTZW5kZXJRdC5o
OiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0dDQ29udHJvbGxlclF0LmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9UZXN0TmV0c2NhcGVQbHVn
aW4vVGVzdE5ldHNjYXBlUGx1Z2luLnBybzogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9xdC9UZXN0UnVubmVyUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL3F0L1Rlc3RSdW5uZXJRdC5oOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L3F0L1RleHRJbnB1dENvbnRyb2xsZXJRdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvcXQvVGV4dElucHV0Q29udHJvbGxlclF0Lmg6IFJlbW92ZWQuCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvcXQvV29ya1F1ZXVlSXRlbVF0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9xdC9Xb3JrUXVldWVJdGVtUXQuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9xdC9mb250cy9BSEVNX19fXy5UVEY6IFJlbW92ZWQuCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvcXQvcmVzb3VyY2VzL3VzZXIuY3NzOiBSZW1vdmVkLgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL3F0L3Rlc3RwbHVnaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL3F0L3Rlc3RwbHVnaW4uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBJbWFn
ZURpZmYvSW1hZ2VEaWZmLnBybzogUmVtb3ZlZC4KKyAgICAgICAgKiBJbWFnZURpZmYvcXQvSW1h
Z2VEaWZmLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2lu
ZG93LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93
Lmg6IFJlbW92ZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJvOiBS
ZW1vdmVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnFyYzogUmVtb3Zl
ZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9u
Lmg6IFJlbW92ZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvVXJsTG9hZGVyLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9VcmxMb2FkZXIuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBNaW5pQnJvd3Nlci9xdC9pY29ucy9jaGVja2JveF9jaGVja2VkLnBuZzogUmVtb3Zl
ZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9pY29ucy9jaGVja2JveF91bmNoZWNrZWQucG5n
OiBSZW1vdmVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L2ljb25zL2NvbnRlbnRzX3dpZHRo
LnBuZzogUmVtb3ZlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9pY29ucy9mYXZpY29uLnBu
ZzogUmVtb3ZlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9pY29ucy9maW5kLnBuZzogUmVt
b3ZlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9pY29ucy9mb2xkZXIucG5nOiBSZW1vdmVk
LgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L2ljb25zL2luZm8ucG5nOiBSZW1vdmVkLgorICAg
ICAgICAqIE1pbmlCcm93c2VyL3F0L2ljb25zL25leHQucG5nOiBSZW1vdmVkLgorICAgICAgICAq
IE1pbmlCcm93c2VyL3F0L2ljb25zL3BsdXMucG5nOiBSZW1vdmVkLgorICAgICAgICAqIE1pbmlC
cm93c2VyL3F0L2ljb25zL3ByZXZpb3VzLnBuZzogUmVtb3ZlZC4KKyAgICAgICAgKiBNaW5pQnJv
d3Nlci9xdC9pY29ucy9yZWZyZXNoLnBuZzogUmVtb3ZlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nl
ci9xdC9pY29ucy9zdG9wLnBuZzogUmVtb3ZlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9p
Y29ucy90aXRsZWJhci5wbmc6IFJlbW92ZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvaWNv
bnMvdG91Y2gucG5nOiBSZW1vdmVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L2ljb25zL3Rv
dWNocG9pbnQucG5nOiBSZW1vdmVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L2ljb25zL3Vw
LnBuZzogUmVtb3ZlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9qcy9NdWx0aVNlbGVjdC5q
czogUmVtb3ZlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9tYWluLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9xbWwvQWxlcnREaWFsb2cucW1sOiBSZW1vdmVkLgor
ICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3FtbC9BdXRoZW50aWNhdGlvbkRpYWxvZy5xbWw6IFJl
bW92ZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sOiBS
ZW1vdmVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3FtbC9DaGVja0JveC5xbWw6IFJlbW92
ZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvcW1sL0NvbG9yQ2hvb3Nlci5xbWw6IFJlbW92
ZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvcW1sL0NvbmZpcm1EaWFsb2cucW1sOiBSZW1v
dmVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3FtbC9EaWFsb2cucW1sOiBSZW1vdmVkLgor
ICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3FtbC9EaWFsb2dCdXR0b24ucW1sOiBSZW1vdmVkLgor
ICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3FtbC9EaWFsb2dMaW5lSW5wdXQucW1sOiBSZW1vdmVk
LgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3FtbC9GaWxlUGlja2VyLnFtbDogUmVtb3ZlZC4K
KyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9xbWwvSXRlbVNlbGVjdG9yLnFtbDogUmVtb3ZlZC4K
KyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9xbWwvTW9ja1RvdWNoUG9pbnQucW1sOiBSZW1vdmVk
LgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3FtbC9Qcm9tcHREaWFsb2cucW1sOiBSZW1vdmVk
LgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3FtbC9Qcm94eUF1dGhlbnRpY2F0aW9uRGlhbG9n
LnFtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9xbWwvU2Nyb2xsSW5kaWNh
dG9yLnFtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9xbWwvVmlld3BvcnRJ
bmZvSXRlbS5xbWw6IFJlbW92ZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvcmF3L0Rlcml2
ZWRTb3VyY2VzLnByaTogUmVtb3ZlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9yYXcvTWlu
aUJyb3dzZXJSYXcucHJvOiBSZW1vdmVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3Jhdy9U
YXJnZXQucHJpOiBSZW1vdmVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3Jhdy9WaWV3LmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9yYXcvVmlldy5oOiBSZW1vdmVk
LgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3V0aWxzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBNaW5pQnJvd3Nlci9xdC91dGlscy5oOiBSZW1vdmVkLgorICAgICAgICAqIFF0VGVzdEJyb3dz
ZXIvUXRUZXN0QnJvd3Nlci5wcm86IFJlbW92ZWQuCisgICAgICAgICogUXRUZXN0QnJvd3Nlci9R
dFRlc3RCcm93c2VyLnFyYzogUmVtb3ZlZC4KKyAgICAgICAgKiBRdFRlc3RCcm93c2VyL2Nvb2tp
ZWphci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogUXRUZXN0QnJvd3Nlci9jb29raWVqYXIuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBRdFRlc3RCcm93c2VyL2Zhdmljb24ucG5nOiBSZW1vdmVkLgor
ICAgICAgICAqIFF0VGVzdEJyb3dzZXIvZnBzdGltZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IFF0VGVzdEJyb3dzZXIvZnBzdGltZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBRdFRlc3RCcm93
c2VyL2xhdW5jaGVyd2luZG93LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBRdFRlc3RCcm93c2Vy
L2xhdW5jaGVyd2luZG93Lmg6IFJlbW92ZWQuCisgICAgICAgICogUXRUZXN0QnJvd3Nlci9sb2Nh
dGlvbmVkaXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFF0VGVzdEJyb3dzZXIvbG9jYXRpb25l
ZGl0Lmg6IFJlbW92ZWQuCisgICAgICAgICogUXRUZXN0QnJvd3Nlci9tYWlud2luZG93LmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBRdFRlc3RCcm93c2VyL21haW53aW5kb3cuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBRdFRlc3RCcm93c2VyL3F0dGVzdGJyb3dzZXIuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIFF0VGVzdEJyb3dzZXIvdXJsbG9hZGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBR
dFRlc3RCcm93c2VyL3VybGxvYWRlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFF0VGVzdEJyb3dz
ZXIvdXNlcmFnZW50bGlzdC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogUXRUZXN0QnJvd3Nlci91
dGlscy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogUXRUZXN0QnJvd3Nlci91dGlscy5oOiBSZW1v
dmVkLgorICAgICAgICAqIFF0VGVzdEJyb3dzZXIvd2ViaW5zcGVjdG9yLmg6IFJlbW92ZWQuCisg
ICAgICAgICogUXRUZXN0QnJvd3Nlci93ZWJwYWdlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBR
dFRlc3RCcm93c2VyL3dlYnBhZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBRdFRlc3RCcm93c2Vy
L3dlYnZpZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFF0VGVzdEJyb3dzZXIvd2Vidmlldy5o
OiBSZW1vdmVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvRGVyaXZlZFNvdXJjZXMucHJpOiBS
ZW1vdmVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGUucHJpOiBSZW1v
dmVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3Lmg6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnByaTogUmVtb3ZlZC4KKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkucHJvOiBSZW1vdmVkLgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMucHJpOiBSZW1vdmVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvOiBSZW1vdmVkLgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uY3BwOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1dURi5wcm86IFJlbW92ZWQuCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1dlYktpdDIucHJvOiBSZW1vdmVkLgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvcXQvSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyUXQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvcXQvUGxhdGZvcm1VdGlsaXRpZXNR
dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9xdC9QbGF0Zm9ybVdlYlZp
ZXdRdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9xdC9tYWluLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBUb29scy5wcm86IFJlbW92ZWQuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9EZXJpdmVkU291cmNlcy5wcmk6IFJlbW92ZWQuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9EZXJpdmVkU291cmNlcy5wcmk6IFJlbW92ZWQuCisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5wcm86IFJlbW92
ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2UuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc2V0QWZ0
ZXJUZXN0KToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wRE9NQXNXZWJB
cmNoaXZlKToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRv
d0ZvckZyYW1lKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rh
cmdldC5wcmk6IFJlbW92ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9xdC9BY3RpdmF0ZUZvbnRzUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvcXQvSW5qZWN0ZWRCdW5kbGVRdC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9xdC9UZXN0UnVubmVy
UXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJW
aWV3Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UYXJnZXQucHJpOiBSZW1vdmVkLgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci5wcm86IFJlbW92ZWQuCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9xdC9FdmVudFNlbmRlclByb3h5UXQuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1XZWJWaWV3UXQuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvcXQvVGVzdENvbnRyb2xsZXJRdC5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9xdC9UZXN0SW52b2NhdGlvblF0LmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3F0L1dlYktpdFRlc3RSdW5uZXIu
cXJjOiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvcXQvbWFpbi5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9xdC9yZXNvdXJjZXMvdXNlci5jc3M6
IFJlbW92ZWQuCisgICAgICAgICogcW1ha2UvLnFtYWtlLmNhY2hlOiBSZW1vdmVkLgorICAgICAg
ICAqIHFtYWtlLy5xbWFrZS5jb25mOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL1JFQURNRTog
UmVtb3ZlZC4KKyAgICAgICAgKiBxbWFrZS9jb25maWcudGVzdHMvUkVBRE1FOiBSZW1vdmVkLgor
ICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9mb250Y29uZmlnL2ZvbnRjb25maWcuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9mb250Y29uZmlnL2ZvbnRjb25m
aWcucHJvOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9nY2NkZXBlbmRz
L2VtcHR5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBxbWFrZS9jb25maWcudGVzdHMvZ2NjZGVw
ZW5kcy9nY2NkZXBlbmRzLnBybzogUmVtb3ZlZC4KKyAgICAgICAgKiBxbWFrZS9jb25maWcudGVz
dHMvZ2x4L2dseC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcW1ha2UvY29uZmlnLnRlc3RzL2ds
eC9nbHgucHJvOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9nbnVsZC9n
bnVsZC5wcm86IFJlbW92ZWQuCisgICAgICAgICogcW1ha2UvY29uZmlnLnRlc3RzL2dudWxkL21h
aW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9saWJYY29tcG9z
aXRlL2xpYlhjb21wb3NpdGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL2NvbmZpZy50
ZXN0cy9saWJYY29tcG9zaXRlL2xpYlhjb21wb3NpdGUucHJvOiBSZW1vdmVkLgorICAgICAgICAq
IHFtYWtlL2NvbmZpZy50ZXN0cy9saWJYcmVuZGVyL2xpYlhyZW5kZXIuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9saWJYcmVuZGVyL2xpYlhyZW5kZXIucHJvOiBS
ZW1vdmVkLgorICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9saWJ3ZWJwL2xpYndlYnAuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9saWJ3ZWJwL2xpYndlYnAu
cHJvOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9saWJ4bWwyL2xpYnht
bDIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9saWJ4bWwyL2xp
YnhtbDIucHJvOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9saWJ4c2x0
L2xpYnhzbHQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9saWJ4
c2x0L2xpYnhzbHQucHJvOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9s
aWJ6bGliL2xpYnpsaWIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0
cy9saWJ6bGliL2xpYnpsaWIucHJvOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL2R1bXAtZmVh
dHVyZXMucGw6IFJlbW92ZWQuCisgICAgICAgICogcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9jb25m
aWd1cmUucHJmOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVyZXMvZGVm
YXVsdF9wb3N0LnByZjogUmVtb3ZlZC4KKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVz
L2RlZmF1bHRfcHJlLnByZjogUmVtb3ZlZC4KKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1
cmVzL2ZlYXR1cmVzLnByZjogUmVtb3ZlZC4KKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1
cmVzL2ZlYXR1cmVzLnByaTogUmVtb3ZlZC4KKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1
cmVzL2ZvcmNlX3N0YXRpY19saWJzX2FzX3NoYXJlZC5wcmY6IFJlbW92ZWQuCisgICAgICAgICog
cW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mdW5jdGlvbnMucHJmOiBSZW1vdmVkLgorICAgICAgICAq
IHFtYWtlL21rc3BlY3MvZmVhdHVyZXMvZ3Byb2YucHJmOiBSZW1vdmVkLgorICAgICAgICAqIHFt
YWtlL21rc3BlY3MvZmVhdHVyZXMvbWFjL2RlZmF1bHRfcG9zdC5wcmY6IFJlbW92ZWQuCisgICAg
ICAgICogcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9tYWMvZGVmYXVsdF9wcmUucHJmOiBSZW1vdmVk
LgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVyZXMvbWluaW1hbF9xdC5wcmY6IFJlbW92
ZWQuCisgICAgICAgICogcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9wcm9kdWN0aW9uX2J1aWxkLnBy
ZjogUmVtb3ZlZC4KKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3JwYXRoLnByZjog
UmVtb3ZlZC4KKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3VuaXgvZGVmYXVsdF9w
b3N0LnByZjogUmVtb3ZlZC4KKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3VuaXgv
ZGVmYXVsdF9wcmUucHJmOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVy
ZXMvdW5peC9pY2MucHJmOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVy
ZXMvdXNlX2FsbF9pbl9vbmVfZmlsZXMucHJmOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL21r
c3BlY3MvZmVhdHVyZXMvdmFsZ3JpbmQucHJmOiBSZW1vdmVkLgorICAgICAgICAqIHFtYWtlL21r
c3BlY3MvZmVhdHVyZXMvd2Via2l0X21vZHVsZXMucHJmOiBSZW1vdmVkLgorICAgICAgICAqIHFt
YWtlL21rc3BlY3MvZmVhdHVyZXMvd2luMzIvZGVmYXVsdF9wb3N0LnByZjogUmVtb3ZlZC4KKyAg
ICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3dpbjMyL2RlZmF1bHRfcHJlLnByZjogUmVt
b3ZlZC4KKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL21vZHVsZXMvYW5nbGUucHJmOiBSZW1vdmVk
LgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvbW9kdWxlcy9qYXZhc2NyaXB0Y29yZS5wcmY6IFJl
bW92ZWQuCisgICAgICAgICogcW1ha2UvbWtzcGVjcy9tb2R1bGVzL3dlYmNvcmUucHJmOiBSZW1v
dmVkLgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvbW9kdWxlcy93ZWJraXQxLnByZjogUmVtb3Zl
ZC4KKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL21vZHVsZXMvd2Via2l0Mi5wcmY6IFJlbW92ZWQu
CisgICAgICAgICogcW1ha2UvbWtzcGVjcy9tb2R1bGVzL3d0Zi5wcmY6IFJlbW92ZWQuCisKKzIw
MTMtMTAtMDIgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KKwogICAgICAg
ICBNb3ZlIEFIRU1fX19fLlRURiBmcm9tIHF0L2ZvbnRzLyB0byBmb250cy8uCiAKICAgICAgICAg
UnViYmVyLXN0YW1wZWQgYnkgQW5kcmVhcyBLbGluZy4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL1dvcmtRdWV1ZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9Xb3JrUXVldWUu
Y3BwCmluZGV4IGYzOGQ4MWEzNDM2ODhlYWNkOTlhN2Y0NjI5ZTU5ZjcwNTYxN2Q0ZTQuLjAxMDZm
YmFjMTIwZmNlNjEyN2Q2MzlhY2ViYTBiOTQ5MjQyYjkzNDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL1dvcmtRdWV1ZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvV29y
a1F1ZXVlLmNwcApAQCAtMjksMTEgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJXb3JrUXVldWUuaCIKIAotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgIldvcmtRdWV1
ZUl0ZW1RdC5oIgotI2Vsc2UKICNpbmNsdWRlICJXb3JrUXVldWVJdGVtLmgiCi0jZW5kaWYKICNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgcXVldWVM
ZW5ndGggPSAxMDI0OwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJy
eS9zcmMucHJvIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9zcmMucHJvCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDk2Nzk1OGUwZmNlZDVhMDQ3ZjRmMGFiOTAxNzZi
YjljZDllZjA3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvc3JjLnBybworKysgL2Rldi9udWxsCkBA
IC0xLDE2ICswLDAgQEAKLWxlc3NUaGFuKFFUX1ZFUlNJT04sIDQuNSkgewotICAgIGVycm9yKCJR
dCA0LjUgb3IgZ3JlYXRlciBpcyByZXF1aXJlZC4iKQotfQotCi1URU1QTEFURSA9IGFwcAotVEFS
R0VUID0gSW1hZ2VEaWZmCi0KLVNPVVJDRVMgKz0gLi4vcXQvSW1hZ2VEaWZmLmNwcAotREVTVERJ
UiA9IC4KLQotdW5peDpDT05GSUcgKz0gZGVidWdfYW5kX3JlbGVhc2UKLW1hYzpDT05GSUcgLT0g
YXBwX2J1bmRsZQotd2luMzI6IENPTkZJRyArPSBjb25zb2xlCi0KLVFUID0gY29yZSBndWkKLQpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyZDZjZmNhMjJmMTdlMWVmNzVjNTI4Mzk1YTM2OGEyZmRhNWUzYmJl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybworKysgL2Rldi9udWxsCkBAIC0xLDYw
ICswLDAgQEAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQcm9qZWN0IGZpbGUgZm9yIHRoZSBEdW1wUmVuZGVy
VHJlZSBiaW5hcnkgKERSVCkKLSMKLSMgU2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBv
dmVydmlldyBvZiB0aGUgYnVpbGQgc3lzdGVtCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVEVNUExBVEUgPSBh
cHAKLQotVEFSR0VUID0gRHVtcFJlbmRlclRyZWUKLURFU1RESVIgPSAkJFJPT1RfQlVJTERfRElS
L2JpbgotCi1XRUJLSVQgKz0gd3RmIGphdmFzY3JpcHRjb3JlIHdlYmNvcmUKLQotSU5DTFVERVBB
VEggKz0gXAotICAgICQkUFdELyBcCi0gICAgJCRQV0QvLi4gXAotICAgICQke1JPT1RfV0VCS0lU
X0RJUn0vU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQgXAotICAgICQke1JPT1RfV0VCS0lUX0RJ
Un0vU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydCBcCi0gICAgJCR7Uk9PVF9XRUJLSVRf
RElSfS9Tb3VyY2UvV2ViS2l0L3F0L1dpZGdldFN1cHBvcnQgXAotICAgICQke1JPT1RfV0VCS0lU
X0RJUn0vU291cmNlL1dURgotCi1RVCA9IGNvcmUgZ3VpIG5ldHdvcmsgdGVzdGxpYiB3ZWJraXR3
aWRnZXRzIHdpZGdldHMKLWhhdmU/KFFUUFJJTlRTVVBQT1JUKTogUVQgKz0gcHJpbnRzdXBwb3J0
Ci1tYWN4OiBRVCArPSB4bWwKLQotSEVBREVSUyArPSBcCi0gICAgJCRQV0QvLi4vV29ya1F1ZXVl
LmggXAotICAgICQkUFdELy4uL0R1bXBSZW5kZXJUcmVlLmggXAotICAgICQkUFdELy4uL0dDQ29u
dHJvbGxlci5oIFwKLSAgICAkJFBXRC8uLi9UZXN0UnVubmVyLmggXAotICAgIER1bXBSZW5kZXJU
cmVlUXQuaCBcCi0gICAgRXZlbnRTZW5kZXJRdC5oIFwKLSAgICBUZXh0SW5wdXRDb250cm9sbGVy
UXQuaCBcCi0gICAgV29ya1F1ZXVlSXRlbVF0LmggXAotICAgIFRlc3RSdW5uZXJRdC5oIFwKLSAg
ICB0ZXN0cGx1Z2luLmgKLQotU09VUkNFUyArPSBcCi0gICAgJCRQV0QvLi4vV29ya1F1ZXVlLmNw
cCBcCi0gICAgJCRQV0QvLi4vRHVtcFJlbmRlclRyZWVDb21tb24uY3BwIFwKLSAgICAkJFBXRC8u
Li9HQ0NvbnRyb2xsZXIuY3BwIFwKLSAgICAkJFBXRC8uLi9UZXN0UnVubmVyLmNwcCBcCi0gICAg
RHVtcFJlbmRlclRyZWVRdC5jcHAgXAotICAgIEV2ZW50U2VuZGVyUXQuY3BwIFwKLSAgICBUZXh0
SW5wdXRDb250cm9sbGVyUXQuY3BwIFwKLSAgICBXb3JrUXVldWVJdGVtUXQuY3BwIFwKLSAgICBU
ZXN0UnVubmVyUXQuY3BwIFwKLSAgICBHQ0NvbnRyb2xsZXJRdC5jcHAgXAotICAgIHRlc3RwbHVn
aW4uY3BwIFwKLSAgICBEdW1wUmVuZGVyVHJlZU1haW4uY3BwCi0KLXdpbmNlKjogewotICAgIElO
Q0xVREVQQVRIICs9ICQkV0NFQ09NUEFUL2luY2x1ZGUKLSAgICBMSUJTICs9ICQkV0NFQ09NUEFU
L2xpYi93Y2Vjb21wYXQubGliCi19Ci0KLURFRklORVMgLT0gVVNFX1NZU1RFTV9NQUxMT0M9MAot
REVGSU5FUyArPSBVU0VfU1lTVEVNX01BTExPQz0xCi0KLVJFU09VUkNFUyA9IER1bXBSZW5kZXJU
cmVlLnFyYwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRy
ZWUucXJjIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucXJjCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWQxNjNhYTdhOWYzYzJjOTFjYzc2MjE3NzVhMzAy
YThhNTQ2NmE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnFyYworKysgL2Rldi9udWxs
CkBAIC0xLDUgKzAsMCBAQAotPFJDQz4KLSAgICA8cXJlc291cmNlIHByZWZpeD0iLyI+Ci0gICAg
ICAgIDxmaWxlPnJlc291cmNlcy91c2VyLmNzczwvZmlsZT4KLSAgICA8L3FyZXNvdXJjZT4KLTwv
UkNDPgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVN
YWluLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlTWFpbi5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NDk0NzQ5N2YxZWYzYTA0ZjdkMmUzZjBm
OWU1NDc4MjIwYzI2ZmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVNYWluLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJEdW1wUmVuZGVyVHJlZVF0LmgiCi0KLSNpbmNsdWRlICJRdFRlc3RTdXBwb3J0LmgiCi0jaW5j
bHVkZSA8cWFwcGxpY2F0aW9uLmg+Ci0jaW5jbHVkZSA8cWRlYnVnLmg+Ci0jaW5jbHVkZSA8cWRp
ci5oPgotI2luY2x1ZGUgPHFmb250Lmg+Ci0jaW5jbHVkZSA8cXN0cmluZ2xpc3QuaD4KLSNpbmNs
dWRlIDxxc3R5bGVmYWN0b3J5Lmg+Ci0jaW5jbHVkZSA8cXRpbWVyLmg+Ci0jaW5jbHVkZSA8cXVy
bC5oPgotI2luY2x1ZGUgPHF3ZWJkYXRhYmFzZS5oPgotCi0jaWZkZWYgUV9XU19YMTEKLSNpbmNs
dWRlIDxxeDExaW5mb194MTEuaD4KLSNlbmRpZgotCi0jaWZkZWYgUV9PU19XSU4KLSNpbmNsdWRl
IDxmY250bC5oPgotI2luY2x1ZGUgPGlvLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGxpbWl0cy5o
PgotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotdm9pZCBtZXNzYWdlSGFuZGxlcihR
dE1zZ1R5cGUgdHlwZSwgY29uc3QgUU1lc3NhZ2VMb2dDb250ZXh0JiwgY29uc3QgUVN0cmluZyAm
bWVzc2FnZSkKLXsKLSAgICBpZiAodHlwZSA9PSBRdENyaXRpY2FsTXNnIHx8IHR5cGUgPT0gUXRG
YXRhbE1zZykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBxUHJpbnRhYmxlKG1l
c3NhZ2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBkbyBub3RoaW5nCi19Ci0K
LS8vIFdlIG9ubHkgc3VwcG9ydCAtdiwgLXAsIC0tcGl4ZWwtdGVzdHMsIC0tc3Rkb3V0LCAtLXN0
ZGVyciBhbmQgLSwgYWxsIHRoZSBvdGhlcnMgd2lsbCBiZQotLy8gcGFzcyBhcyB0ZXN0IGNhc2Ug
bmFtZSAoZXZlbiAtYWJjLmh0bWwgaXMgYSB2YWxpZCB0ZXN0IGNhc2UgbmFtZSkKLWJvb2wgaXNP
cHRpb24oY29uc3QgUVN0cmluZyYgc3RyKQotewotICAgIHJldHVybiBzdHIgPT0gUVN0cmluZygi
LXYiKSB8fCBzdHIgPT0gUVN0cmluZygiLXAiKSB8fCBzdHIgPT0gUVN0cmluZygiLS1waXhlbC10
ZXN0cyIpCi0gICAgICAgICAgIHx8IHN0ciA9PSBRU3RyaW5nKCItLXN0ZG91dCIpIHx8IHN0ciA9
PSBRU3RyaW5nKCItLXN0ZGVyciIpCi0gICAgICAgICAgIHx8IHN0ciA9PSBRU3RyaW5nKCItLXRp
bWVvdXQiKSB8fCBzdHIgPT0gUVN0cmluZygiLS1uby10aW1lb3V0IikKLSAgICAgICAgICAgfHwg
c3RyID09IFFTdHJpbmcoIi0iKTsKLX0KLQotUVN0cmluZyB0YWtlT3B0aW9uVmFsdWUoUVN0cmlu
Z0xpc3QmIGFyZ3VtZW50cywgaW50IGluZGV4KQotewotICAgIFFTdHJpbmcgcmVzdWx0OwotCi0g
ICAgaWYgKGluZGV4ICsgMSA8IGFyZ3VtZW50cy5jb3VudCgpICYmICFpc09wdGlvbihhcmd1bWVu
dHMuYXQoaW5kZXggKyAxKSkpCi0gICAgICAgIHJlc3VsdCA9IGFyZ3VtZW50cy50YWtlQXQoaW5k
ZXggKyAxKTsKLSAgICBhcmd1bWVudHMucmVtb3ZlQXQoaW5kZXgpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCBwcmludFVzYWdlKCkKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlVz
YWdlOiBEdW1wUmVuZGVyVHJlZSBbLXZ8LXB8LS1waXhlbC10ZXN0c10gWy0tc3Rkb3V0IG91dHB1
dF9maWxlbmFtZV0gWy1zdGRlcnIgZXJyb3JfZmlsZW5hbWVdIFstLW5vLXRpbWVvdXRdIFstLXRp
bWVvdXQgdGltZW91dF9NU10gZmlsZW5hbWUgW2ZpbGVuYW1lMi4ubl1cbiIpOwotICAgIGZwcmlu
dGYoc3RkZXJyLCAiT3IgZm9sZGVyIGNvbnRhaW5pbmcgdGVzdCBmaWxlczogRHVtcFJlbmRlclRy
ZWUgWy12fC0tcGl4ZWwtdGVzdHNdIGRpcnBhdGhcbiIpOwotICAgIGZmbHVzaChzdGRlcnIpOwot
fQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQotewotI2lmZGVmIFFfT1NfV0lO
Ci0gICAgX3NldG1vZGUoMSwgX09fQklOQVJZKTsKLSAgICBfc2V0bW9kZSgyLCBfT19CSU5BUlkp
OwotI2VuZGlmCi0KLSAgICAvLyBTdXBwcmVzcyBkZWJ1ZyBvdXRwdXQgZnJvbSBRdCBpZiBub3Qg
c3RhcnRlZCB3aXRoIC12Ci0gICAgYm9vbCBzdXBwcmVzc1F0RGVidWdPdXRwdXQgPSB0cnVlOwot
ICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJnYzsgKytpKSB7Ci0gICAgICAgIGlmICghcXN0cmNt
cChhcmd2W2ldLCAiLXYiKSkgewotICAgICAgICAgICAgc3VwcHJlc3NRdERlYnVnT3V0cHV0ID0g
ZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEhh
cyB0byBiZSBkb25lIGJlZm9yZSBRQXBwbGljYXRpb24gaXMgY29uc3RydWN0ZWQgaW4gY2FzZQot
ICAgIC8vIFFBcHBsaWNhdGlvbiBpdHNlbGYgcHJvZHVjZXMgZGVidWcgb3V0cHV0LgotICAgIGlm
IChzdXBwcmVzc1F0RGVidWdPdXRwdXQpCi0gICAgICAgIHFJbnN0YWxsTWVzc2FnZUhhbmRsZXIo
bWVzc2FnZUhhbmRsZXIpOwotCi0gICAgV2ViS2l0OjpRdFRlc3RTdXBwb3J0Ojppbml0aWFsaXpl
VGVzdEZvbnRzKCk7Ci0KLSAgICBRQXBwbGljYXRpb246OnNldFN0eWxlKFFTdHlsZUZhY3Rvcnk6
OmNyZWF0ZShRTGF0aW4xU3RyaW5nKCJ3aW5kb3dzIikpKTsKLSAgICBRQXBwbGljYXRpb246OnNl
dERlc2t0b3BTZXR0aW5nc0F3YXJlKGZhbHNlKTsKLQotICAgIFFBcHBsaWNhdGlvbiBhcHAoYXJn
YywgYXJndik7Ci0gICAgYXBwLnNldFF1aXRPbkxhc3RXaW5kb3dDbG9zZWQoZmFsc2UpOwotCi0g
ICAgUUNvcmVBcHBsaWNhdGlvbjo6c2V0QXR0cmlidXRlKFF0OjpBQV9Vc2U5NkRwaSwgdHJ1ZSk7
Ci0KLSAgICBXVEZJbnN0YWxsUmVwb3J0QmFja3RyYWNlT25DcmFzaEhvb2soKTsKLQotICAgIFFT
dHJpbmdMaXN0IGFyZ3MgPSBhcHAuYXJndW1lbnRzKCk7Ci0gICAgaWYgKGFyZ3MuY291bnQoKSA8
ICghc3VwcHJlc3NRdERlYnVnT3V0cHV0ID8gMyA6IDIpKSB7Ci0gICAgICAgIHByaW50VXNhZ2Uo
KTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IGFy
Z3VtZW50cywgaXQgaXMgYXBwbGljYXRpb24gbmFtZSBpdHNlbGYKLSAgICBhcmdzLnJlbW92ZUF0
KDApOwotCi0gICAgRHVtcFJlbmRlclRyZWUgZHVtcGVyOwotCi0gICAgaW50IGluZGV4ID0gYXJn
cy5pbmRleE9mKFFMYXRpbjFTdHJpbmcoIi0tc3Rkb3V0IikpOwotICAgIGlmIChpbmRleCAhPSAt
MSkgewotICAgICAgICBRU3RyaW5nIGZpbGVOYW1lID0gdGFrZU9wdGlvblZhbHVlKGFyZ3MsIGlu
ZGV4KTsKLSAgICAgICAgZHVtcGVyLnNldFJlZGlyZWN0T3V0cHV0RmlsZU5hbWUoZmlsZU5hbWUp
OwotICAgICAgICBpZiAoZmlsZU5hbWUuaXNFbXB0eSgpIHx8ICFmcmVvcGVuKHFQcmludGFibGUo
ZmlsZU5hbWUpLCAidyIsIHN0ZG91dCkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
U1RET1VUIHJlZGlyZWN0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgaW5kZXggPSBhcmdzLmluZGV4T2YoUUxhdGluMVN0cmluZygiLS1z
dGRlcnIiKSk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgICAgIFFTdHJpbmcgZmlsZU5h
bWUgPSB0YWtlT3B0aW9uVmFsdWUoYXJncywgaW5kZXgpOwotICAgICAgICBkdW1wZXIuc2V0UmVk
aXJlY3RFcnJvckZpbGVOYW1lKGZpbGVOYW1lKTsKLSAgICAgICAgaWYgKCFmcmVvcGVuKHFQcmlu
dGFibGUoZmlsZU5hbWUpLCAidyIsIHN0ZGVycikpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiU1RERVJSIHJlZGlyZWN0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgICAgIGV4aXQoMSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaW5kZXggPSBhcmdzLmluZGV4T2YoIi0tcGl4ZWwtdGVz
dHMiKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICAgIGluZGV4ID0gYXJncy5pbmRleE9m
KCItcCIpOwotICAgIGlmIChpbmRleCAhPSAtMSkgewotICAgICAgICBkdW1wZXIuc2V0U2hvdWxk
RHVtcFBpeGVsc0ZvckFsbFRlc3RzKCk7Ci0gICAgICAgIGFyZ3MucmVtb3ZlQXQoaW5kZXgpOwot
ICAgIH0KLQotICAgIFFXZWJEYXRhYmFzZTo6cmVtb3ZlQWxsRGF0YWJhc2VzKCk7Ci0KLSAgICBp
bmRleCA9IGFyZ3MuaW5kZXhPZihRTGF0aW4xU3RyaW5nKCItLXRpbWVvdXQiKSk7Ci0gICAgaWYg
KGluZGV4ICE9IC0xKSB7Ci0gICAgICAgIGludCB0aW1lb3V0ID0gdGFrZU9wdGlvblZhbHVlKGFy
Z3MsIGluZGV4KS50b0ludCgpOwotICAgICAgICBkdW1wZXIuc2V0VGltZW91dCh0aW1lb3V0KTsK
LSAgICB9Ci0KLSAgICBpbmRleCA9IGFyZ3MuaW5kZXhPZihRTGF0aW4xU3RyaW5nKCItLW5vLXRp
bWVvdXQiKSk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgICAgIGR1bXBlci5zZXRTaG91
bGRUaW1lb3V0KGZhbHNlKTsKLSAgICAgICAgYXJncy5yZW1vdmVBdChpbmRleCk7Ci0gICAgfQot
Ci0gICAgaW5kZXggPSBhcmdzLmluZGV4T2YoUUxhdGluMVN0cmluZygiLSIpKTsKLSAgICBpZiAo
aW5kZXggIT0gLTEpIHsKLSAgICAgICAgYXJncy5yZW1vdmVBdChpbmRleCk7Ci0KLSAgICAgICAg
Ly8gQ29udGludWUgd2FpdGluZyBpbiBTVERJTiBmb3IgbW9yZSB0ZXN0IGNhc2UgYWZ0ZXIgcHJv
Y2VzcyBvbmUgdGVzdCBjYXNlCi0gICAgICAgIFFPYmplY3Q6OmNvbm5lY3QoJmR1bXBlciwgU0lH
TkFMKHJlYWR5KCkpLCAmZHVtcGVyLCBTTE9UKHJlYWRMaW5lKCkpLCBRdDo6UXVldWVkQ29ubmVj
dGlvbik7ICAgCi0KLSAgICAgICAgLy8gUmVhZCBhbmQgb25seSByZWFkIHRoZSBmaXJzdCB0ZXN0
IGNhc2UsIGlnbm9yZSB0aGUgb3RoZXJzIAotICAgICAgICBpZiAoYXJncy5zaXplKCkgPiAwKSB7
IAotICAgICAgICAgICAgLy8gUHJvY2VzcyB0aGUgYXJndW1lbnQgZmlyc3QKLSAgICAgICAgICAg
IGR1bXBlci5wcm9jZXNzTGluZShhcmdzWzBdKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
IFFUaW1lcjo6c2luZ2xlU2hvdCgwLCAmZHVtcGVyLCBTTE9UKHJlYWRMaW5lKCkpKTsKLSAgICB9
IGVsc2UgewotICAgICAgICAvLyBHbyBpbnRvIHN0YW5kYWxvbmUgbW9kZQotICAgICAgICAvLyBT
dGFuZGFsb25lIG1vZGUgbmVlZCBhdCBsZWFzdCBvbmUgdGVzdCBjYXNlCi0gICAgICAgIGlmIChh
cmdzLmNvdW50KCkgPCAxKSB7Ci0gICAgICAgICAgICBwcmludFVzYWdlKCk7Ci0gICAgICAgICAg
ICBleGl0KDEpOwotICAgICAgICB9Ci0gICAgICAgIGR1bXBlci5wcm9jZXNzQXJnc0xpbmUoYXJn
cyk7Ci0gICAgfQotICAgIHJldHVybiBhcHAuZXhlYygpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggZjM3NGIyZjU2ZGVhNDg0Yzc3MDIzYjczZWZkNmUyMWFkZGNkMWIwMy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9x
dC9EdW1wUmVuZGVyVHJlZVF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMjggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAw
OSBUb3JjaCBNb2JpbGUgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKLQotI2luY2x1ZGUgIkR1bXBS
ZW5kZXJUcmVlUXQuaCIKLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oIgotI2lu
Y2x1ZGUgIkV2ZW50U2VuZGVyUXQuaCIKLSNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKLSNpbmNs
dWRlICJJbml0V2ViQ29yZVF0LmgiCi0jaW5jbHVkZSAiSW5pdFdlYktpdFF0LmgiCi0jaW5jbHVk
ZSAiSlNTdHJpbmdSZWZRdC5oIgotI2luY2x1ZGUgIlF0VGVzdFN1cHBvcnQuaCIKLSNpbmNsdWRl
ICJUZXN0UnVubmVyLmgiCi0jaW5jbHVkZSAiVGVzdFJ1bm5lclF0LmgiCi0jaW5jbHVkZSAiVGV4
dElucHV0Q29udHJvbGxlclF0LmgiCi0jaW5jbHVkZSAidGVzdHBsdWdpbi5oIgotI2luY2x1ZGUg
IldvcmtRdWV1ZS5oIgotCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFCdWZm
ZXI+Ci0jaW5jbHVkZSA8UUNyeXB0b2dyYXBoaWNIYXNoPgotI2luY2x1ZGUgPFFEaXI+Ci0jaW5j
bHVkZSA8UUZpbGU+Ci0jaW5jbHVkZSA8UUZpbGVJbmZvPgotI2luY2x1ZGUgPFFGb2N1c0V2ZW50
PgotI2luY2x1ZGUgPFFMYWJlbD4KLSNpbmNsdWRlIDxRTG9jYWxlPgotI2luY2x1ZGUgPFFOZXR3
b3JrQWNjZXNzTWFuYWdlcj4KLSNpbmNsdWRlIDxRTmV0d29ya1JlcGx5PgotI2luY2x1ZGUgPFFO
ZXR3b3JrUmVxdWVzdD4KLSNpbmNsdWRlIDxRUGFpbnREZXZpY2U+Ci0jaW5jbHVkZSA8UVBhaW50
RW5naW5lPgotI2lmICFkZWZpbmVkKFFUX05PX1BSSU5URVIpICYmIEhBVkUoUVRQUklOVFNVUFBP
UlQpCi0jaW5jbHVkZSA8UVByaW50ZXI+Ci0jZW5kaWYKLSNpbmNsdWRlIDxRUHJvZ3Jlc3NCYXI+
Ci0jaW5jbHVkZSA8UVVuZG9TdGFjaz4KLSNpbmNsdWRlIDxRVXJsPgotI2luY2x1ZGUgPGxpbWl0
cy5oPgotI2luY2x1ZGUgPGxvY2FsZS5oPgotI2luY2x1ZGUgPHF3ZWJzZWN1cml0eW9yaWdpbi5o
PgotI2luY2x1ZGUgPHF3ZWJzZXR0aW5ncy5oPgotI2lmbmRlZiBRX09TX1dJTgotI2luY2x1ZGUg
PHVuaXN0ZC5oPgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1jb25zdCBp
bnQgZGF0YWJhc2VEZWZhdWx0UXVvdGEgPSA1ICogMTAyNCAqIDEwMjQ7Ci0KLU5ldHdvcmtBY2Nl
c3NNYW5hZ2VyOjpOZXR3b3JrQWNjZXNzTWFuYWdlcihRT2JqZWN0KiBwYXJlbnQpCi0gICAgOiBR
TmV0d29ya0FjY2Vzc01hbmFnZXIocGFyZW50KQotewotI2lmbmRlZiBRVF9OT19PUEVOU1NMCi0g
ICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoc3NsRXJyb3JzKFFOZXR3b3JrUmVwbHkqLCBjb25zdCBR
TGlzdDxRU3NsRXJyb3I+JikpLAotICAgICAgICAgICAgdGhpcywgU0xPVChzc2xFcnJvcnNFbmNv
dW50ZXJlZChRTmV0d29ya1JlcGx5KiwgY29uc3QgUUxpc3Q8UVNzbEVycm9yPiYpKSk7Ci0jZW5k
aWYKLX0KLQotI2lmbmRlZiBRVF9OT19PUEVOU1NMCi12b2lkIE5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
Ojpzc2xFcnJvcnNFbmNvdW50ZXJlZChRTmV0d29ya1JlcGx5KiByZXBseSwgY29uc3QgUUxpc3Q8
UVNzbEVycm9yPiYgZXJyb3JzKQotewotICAgIGlmIChyZXBseS0+dXJsKCkuaG9zdCgpID09ICIx
MjcuMC4wLjEiIHx8IHJlcGx5LT51cmwoKS5ob3N0KCkgPT0gImxvY2FsaG9zdCIpIHsKLSAgICAg
ICAgYm9vbCBpZ25vcmUgPSB0cnVlOwotCi0gICAgICAgIC8vIEFjY2VwdCBhbnkgSFRUUFMgY2Vy
dGlmaWNhdGUuCi0gICAgICAgIGZvcmVhY2ggKGNvbnN0IFFTc2xFcnJvciYgZXJyb3IsIGVycm9y
cykgewotICAgICAgICAgICAgaWYgKGVycm9yLmVycm9yKCkgPCBRU3NsRXJyb3I6OlVuYWJsZVRv
R2V0SXNzdWVyQ2VydGlmaWNhdGUgfHwgZXJyb3IuZXJyb3IoKSA+IFFTc2xFcnJvcjo6SG9zdE5h
bWVNaXNtYXRjaCkgewotICAgICAgICAgICAgICAgIGlnbm9yZSA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGln
bm9yZSkKLSAgICAgICAgICAgIHJlcGx5LT5pZ25vcmVTc2xFcnJvcnMoKTsKLSAgICB9Ci19Ci0j
ZW5kaWYKLQotCi0jaWYgIWRlZmluZWQoUVRfTk9fUFJJTlRFUikgJiYgSEFWRShRVFBSSU5UU1VQ
UE9SVCkKLWNsYXNzIE51bGxQcmludGVyIDogcHVibGljIFFQcmludGVyIHsKLXB1YmxpYzoKLSAg
ICBjbGFzcyBOdWxsUGFpbnRFbmdpbmUgOiBwdWJsaWMgUVBhaW50RW5naW5lIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBiZWdpbihRUGFpbnREZXZpY2UqKSB7IHJldHVybiB0
cnVlOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBlbmQoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAg
ICAgIHZpcnR1YWwgUVBhaW50RW5naW5lOjpUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBRUGFp
bnRFbmdpbmU6OlVzZXI7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdQaXhtYXAoY29uc3Qg
UVJlY3RGJiByLCBjb25zdCBRUGl4bWFwJiBwbSwgY29uc3QgUVJlY3RGJiBzcikgeyB9Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBRUGFpbnRFbmdpbmVTdGF0ZSYgc3Rh
dGUpIHsgfQotICAgIH07Ci0KLSAgICB2aXJ0dWFsIFFQYWludEVuZ2luZSogcGFpbnRFbmdpbmUo
KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PE51bGxQYWludEVuZ2luZSo+KCZtX2VuZ2luZSk7
IH0KLQotICAgIE51bGxQYWludEVuZ2luZSBtX2VuZ2luZTsKLX07Ci0jZW5kaWYKLQotV2ViUGFn
ZTo6V2ViUGFnZShRT2JqZWN0KiBwYXJlbnQsIER1bXBSZW5kZXJUcmVlKiBkcnQpCi0gICAgOiBR
V2ViUGFnZShwYXJlbnQpCi0gICAgLCBtX3dlYkluc3BlY3RvcigwKQotICAgICwgbV9kcnQoZHJ0
KQotewotICAgIFFXZWJTZXR0aW5ncyogZ2xvYmFsU2V0dGluZ3MgPSBRV2ViU2V0dGluZ3M6Omds
b2JhbFNldHRpbmdzKCk7Ci0KLSAgICBnbG9iYWxTZXR0aW5ncy0+c2V0Rm9udFNpemUoUVdlYlNl
dHRpbmdzOjpNaW5pbXVtRm9udFNpemUsIDApOwotICAgIGdsb2JhbFNldHRpbmdzLT5zZXRGb250
U2l6ZShRV2ViU2V0dGluZ3M6Ok1pbmltdW1Mb2dpY2FsRm9udFNpemUsIDUpOwotICAgIGdsb2Jh
bFNldHRpbmdzLT5zZXRGb250U2l6ZShRV2ViU2V0dGluZ3M6OkRlZmF1bHRGb250U2l6ZSwgMTYp
OwotICAgIGdsb2JhbFNldHRpbmdzLT5zZXRGb250U2l6ZShRV2ViU2V0dGluZ3M6OkRlZmF1bHRG
aXhlZEZvbnRTaXplLCAxMyk7Ci0KLSAgICBnbG9iYWxTZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFX
ZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbk9wZW5XaW5kb3dzLCB0cnVlKTsKLSAgICBnbG9iYWxT
ZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbkFjY2Vzc0Ns
aXBib2FyZCwgdHJ1ZSk7Ci0gICAgZ2xvYmFsU2V0dGluZ3MtPnNldEF0dHJpYnV0ZShRV2ViU2V0
dGluZ3M6OkxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4sIGZhbHNlKTsKLSAgICBnbG9iYWxTZXR0
aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UGx1Z2luc0VuYWJsZWQsIHRydWUpOwot
ICAgIGdsb2JhbFNldHRpbmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMb2NhbENvbnRl
bnRDYW5BY2Nlc3NSZW1vdGVVcmxzLCB0cnVlKTsKLSAgICBnbG9iYWxTZXR0aW5ncy0+c2V0QXR0
cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdEVuYWJsZWQsIHRydWUpOwotICAgIGdsb2Jh
bFNldHRpbmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpQcml2YXRlQnJvd3NpbmdFbmFi
bGVkLCBmYWxzZSk7Ci0gICAgZ2xvYmFsU2V0dGluZ3MtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGlu
Z3M6OlNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCwgZmFsc2UpOwotCi0gICAgY29ubmVjdCh0aGlz
LCBTSUdOQUwoZ2VvbWV0cnlDaGFuZ2VSZXF1ZXN0ZWQoY29uc3QgUVJlY3QgJikpLAotICAgICAg
ICAgICAgdGhpcywgU0xPVChzZXRWaWV3R2VvbWV0cnkoY29uc3QgUVJlY3QgJiApKSk7Ci0KLSAg
ICBzZXROZXR3b3JrQWNjZXNzTWFuYWdlcihtX2RydC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKSk7
Ci0gICAgc2V0UGx1Z2luRmFjdG9yeShuZXcgVGVzdFBsdWdpbih0aGlzKSk7Ci0KLSAgICBjb25u
ZWN0KHRoaXMsIFNJR05BTChmZWF0dXJlUGVybWlzc2lvblJlcXVlc3RlZChRV2ViRnJhbWUqLCBR
V2ViUGFnZTo6RmVhdHVyZSkpLCB0aGlzLCBTTE9UKHJlcXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFt
ZSosIFFXZWJQYWdlOjpGZWF0dXJlKSkpOwotICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGZlYXR1
cmVQZXJtaXNzaW9uUmVxdWVzdENhbmNlbGVkKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpGZWF0dXJl
KSksIHRoaXMsIFNMT1QoY2FuY2VsUGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6RmVh
dHVyZSkpKTsKLX0KLQotV2ViUGFnZTo6fldlYlBhZ2UoKQotewotICAgIGRlbGV0ZSBtX3dlYklu
c3BlY3RvcjsKLX0KLQotUVdlYkluc3BlY3RvciogV2ViUGFnZTo6d2ViSW5zcGVjdG9yKCkKLXsK
LSAgICBpZiAoIW1fd2ViSW5zcGVjdG9yKSB7Ci0gICAgICAgIG1fd2ViSW5zcGVjdG9yID0gbmV3
IFFXZWJJbnNwZWN0b3I7Ci0gICAgICAgIG1fd2ViSW5zcGVjdG9yLT5zZXRQYWdlKHRoaXMpOwot
ICAgIH0KLSAgICByZXR1cm4gbV93ZWJJbnNwZWN0b3I7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cmVz
ZXRTZXR0aW5ncygpCi17Ci0gICAgLy8gQWZ0ZXIgZWFjaCBsYXlvdXQgdGVzdCwgcmVzZXQgdGhl
IHNldHRpbmdzIHRoYXQgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIGJ5Ci0gICAgLy8gdGVzdFJ1bm5l
ci5vdmVycmlkZVByZWZlcmVuY2UoKSBvciBzaW1pbGFyLgotICAgIHNldHRpbmdzKCktPnJlc2V0
Rm9udFNpemUoUVdlYlNldHRpbmdzOjpEZWZhdWx0Rm9udFNpemUpOwotICAgIHNldHRpbmdzKCkt
PnJlc2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbk9wZW5XaW5kb3dzKTsK
LSAgICBzZXR0aW5ncygpLT5yZXNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRF
bmFibGVkKTsKLSAgICBzZXR0aW5ncygpLT5yZXNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlBy
aXZhdGVCcm93c2luZ0VuYWJsZWQpOwotICAgIHNldHRpbmdzKCktPnJlc2V0QXR0cmlidXRlKFFX
ZWJTZXR0aW5nczo6U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKTsKLSAgICBzZXR0aW5ncygpLT5y
ZXNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4pOwot
ICAgIHNldHRpbmdzKCktPnJlc2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6T2ZmbGluZVdlYkFw
cGxpY2F0aW9uQ2FjaGVFbmFibGVkKTsKLSAgICBzZXR0aW5ncygpLT5yZXNldEF0dHJpYnV0ZShR
V2ViU2V0dGluZ3M6OkxvY2FsQ29udGVudENhbkFjY2Vzc1JlbW90ZVVybHMpOwotICAgIHNldHRp
bmdzKCktPnJlc2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6TG9jYWxDb250ZW50Q2FuQWNjZXNz
RmlsZVVybHMpOwotICAgIHNldHRpbmdzKCktPnJlc2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6
UGx1Z2luc0VuYWJsZWQpOwotICAgIHNldHRpbmdzKCktPnJlc2V0QXR0cmlidXRlKFFXZWJTZXR0
aW5nczo6SmF2YXNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCk7Ci0gICAgc2V0dGluZ3MoKS0+cmVz
ZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBdXRvTG9hZEltYWdlcyk7Ci0gICAgc2V0dGluZ3Mo
KS0+cmVzZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpab29tVGV4dE9ubHkpOwotICAgIHNldHRp
bmdzKCktPnJlc2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6Q1NTUmVnaW9uc0VuYWJsZWQpOwot
ICAgIHNldHRpbmdzKCktPnJlc2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6Q1NTR3JpZExheW91
dEVuYWJsZWQpOwotICAgIHNldHRpbmdzKCktPnJlc2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQpOwotCi0gICAgbV9kcnQtPnRlc3RSdW5uZXIo
KS0+c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoZmFsc2UpOwotICAgIG1fZHJ0LT50ZXN0UnVubmVy
KCktPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKHRydWUpOwotICAgIG1fZHJ0LT5qc2NU
ZXN0UnVubmVyKCktPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotCi0gICAgLy8gZ2xvYmFsU2V0
dGluZ3MgbXVzdCBiZSByZXNldCBleHBsaWNpdGx5LgotICAgIG1fZHJ0LT50ZXN0UnVubmVyKCkt
PnNldFhTU0F1ZGl0b3JFbmFibGVkKGZhbHNlKTsKLQotICAgIFFXZWJTZXR0aW5nczo6c2V0TWF4
aW11bVBhZ2VzSW5DYWNoZSgwKTsgLy8gcmVzZXQgdG8gZGVmYXVsdAotICAgIHNldHRpbmdzKCkt
PnNldFVzZXJTdHlsZVNoZWV0VXJsKFFVcmwoKSk7IC8vIHJlc2V0IHRvIGRlZmF1bHQKLQotICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRTZWFtbGVzc0lGcmFtZXNFbmFibGVkKHRydWUp
OwotCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KG1h
aW5GcmFtZSgpLT5oYW5kbGUoKSk7Ci0KLSAgICBtX3BlbmRpbmdHZW9sb2NhdGlvblJlcXVlc3Rz
LmNsZWFyKCk7Ci19Ci0KLVFXZWJQYWdlKiBXZWJQYWdlOjpjcmVhdGVXaW5kb3coUVdlYlBhZ2U6
OldlYldpbmRvd1R5cGUpCi17Ci0gICAgcmV0dXJuIG1fZHJ0LT5jcmVhdGVXaW5kb3coKTsKLX0K
LQotdm9pZCBXZWJQYWdlOjpqYXZhU2NyaXB0QWxlcnQoUVdlYkZyYW1lKiwgY29uc3QgUVN0cmlu
ZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAoIWlzVGV4dE91dHB1dEVuYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZnByaW50ZihzdGRvdXQsICJBTEVSVDogJXNcbiIsIG1lc3NhZ2UudG9V
dGY4KCkuY29uc3REYXRhKCkpOwotICAgIGZmbHVzaChzdGRvdXQpOwotfQotCi12b2lkIFdlYlBh
Z2U6OnJlcXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpGZWF0dXJl
IGZlYXR1cmUpCi17Ci0gICAgc3dpdGNoIChmZWF0dXJlKSB7Ci0gICAgY2FzZSBOb3RpZmljYXRp
b25zOgotICAgICAgICBpZiAoIW1fZHJ0LT50ZXN0UnVubmVyKCktPmlnbm9yZVJlcWVzdEZvclBl
cm1pc3Npb24oKSkKLSAgICAgICAgICAgIHNldEZlYXR1cmVQZXJtaXNzaW9uKGZyYW1lLCBmZWF0
dXJlLCBQZXJtaXNzaW9uR3JhbnRlZEJ5VXNlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R2VvbG9jYXRpb246Ci0gICAgICAgIGlmIChtX2RydC0+dGVzdFJ1bm5lcigpLT5pc0dlb2xvY2F0
aW9uUGVybWlzc2lvblNldCgpKQotICAgICAgICAgICAgaWYgKG1fZHJ0LT50ZXN0UnVubmVyKCkt
Pmdlb2xvY2F0aW9uUGVybWlzc2lvbigpKQotICAgICAgICAgICAgICAgIHNldEZlYXR1cmVQZXJt
aXNzaW9uKGZyYW1lLCBmZWF0dXJlLCBQZXJtaXNzaW9uR3JhbnRlZEJ5VXNlcik7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0RmVhdHVyZVBlcm1pc3Npb24oZnJhbWUsIGZl
YXR1cmUsIFBlcm1pc3Npb25EZW5pZWRCeVVzZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtX3BlbmRpbmdHZW9sb2NhdGlvblJlcXVlc3RzLmFwcGVuZChmcmFtZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBXZWJQ
YWdlOjpjYW5jZWxQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpGZWF0dXJl
IGZlYXR1cmUpCi17Ci0gICAgc3dpdGNoIChmZWF0dXJlKSB7Ci0gICAgY2FzZSBHZW9sb2NhdGlv
bjoKLSAgICAgICAgbV9wZW5kaW5nR2VvbG9jYXRpb25SZXF1ZXN0cy5yZW1vdmVPbmUoZnJhbWUp
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci0KLXZvaWQgV2ViUGFnZTo6cGVybWlzc2lvblNldChRV2ViUGFnZTo6RmVhdHVyZSBmZWF0dXJl
KQotewotICAgIHN3aXRjaCAoZmVhdHVyZSkgewotICAgIGNhc2UgR2VvbG9jYXRpb246Ci0gICAg
ICAgIHsKLSAgICAgICAgUV9BU1NFUlQobV9kcnQtPnRlc3RSdW5uZXIoKS0+aXNHZW9sb2NhdGlv
blBlcm1pc3Npb25TZXQoKSk7Ci0gICAgICAgIGZvcmVhY2ggKFFXZWJGcmFtZSogZnJhbWUsIG1f
cGVuZGluZ0dlb2xvY2F0aW9uUmVxdWVzdHMpCi0gICAgICAgICAgICBpZiAobV9kcnQtPnRlc3RS
dW5uZXIoKS0+Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkpCi0gICAgICAgICAgICAgICAgc2V0RmVh
dHVyZVBlcm1pc3Npb24oZnJhbWUsIGZlYXR1cmUsIFBlcm1pc3Npb25HcmFudGVkQnlVc2VyKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXRGZWF0dXJlUGVybWlzc2lvbihm
cmFtZSwgZmVhdHVyZSwgUGVybWlzc2lvbkRlbmllZEJ5VXNlcik7Ci0KLSAgICAgICAgbV9wZW5k
aW5nR2VvbG9jYXRpb25SZXF1ZXN0cy5jbGVhcigpOwotICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotLy8gRklYTUUgKDEx
OTU5MSk6IE1ha2UgdGhpcyBtYXRjaCBvdGhlciBwbGF0Zm9ybXMgYmV0dGVyLgotc3RhdGljIFFT
dHJpbmcgdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KGNvbnN0IFFTdHJpbmcmIHVybCkKLXsKLSAg
ICBpZiAodXJsLmlzRW1wdHkoKSB8fCAhdXJsLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiZmls
ZTovLyIpKSkKLSAgICAgICAgcmV0dXJuIHVybDsKLQotICAgIHJldHVybiBRRmlsZUluZm8odXJs
KS5maWxlTmFtZSgpOwotfQotCi12b2lkIFdlYlBhZ2U6OmphdmFTY3JpcHRDb25zb2xlTWVzc2Fn
ZShjb25zdCBRU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgUVN0cmluZyYp
Ci17Ci0gICAgaWYgKCFpc1RleHRPdXRwdXRFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFFTdHJpbmcgbmV3TWVzc2FnZTsKLSAgICBpZiAoIW1lc3NhZ2UuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIG5ld01lc3NhZ2UgPSBtZXNzYWdlOwotCi0gICAgICAgIHNpemVfdCBmaWxlUHJvdG9j
b2wgPSBuZXdNZXNzYWdlLmluZGV4T2YoUUxhdGluMVN0cmluZygiZmlsZTovLyIpKTsKLSAgICAg
ICAgaWYgKGZpbGVQcm90b2NvbCAhPSAtMSkgewotICAgICAgICAgICAgbmV3TWVzc2FnZSA9IG5l
d01lc3NhZ2UubGVmdChmaWxlUHJvdG9jb2wpICsgdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KG5l
d01lc3NhZ2UubWlkKGZpbGVQcm90b2NvbCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnBy
aW50ZihzdGRvdXQsICJDT05TT0xFIE1FU1NBR0U6ICIpOwotICAgIGlmIChsaW5lTnVtYmVyKQot
ICAgICAgICBmcHJpbnRmKHN0ZG91dCwgImxpbmUgJWQ6ICIsIGxpbmVOdW1iZXIpOwotICAgIGZw
cmludGYoc3Rkb3V0LCAiJXNcbiIsIG5ld01lc3NhZ2UudG9VdGY4KCkuY29uc3REYXRhKCkpOwot
fQotCi1ib29sIFdlYlBhZ2U6OmphdmFTY3JpcHRDb25maXJtKFFXZWJGcmFtZSosIGNvbnN0IFFT
dHJpbmcmIG1zZykKLXsKLSAgICBpZiAoIWlzVGV4dE91dHB1dEVuYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBmcHJpbnRmKHN0ZG91dCwgIkNPTkZJUk06ICVzXG4iLCBtc2cu
dG9VdGY4KCkuY29uc3REYXRhKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYlBh
Z2U6OmphdmFTY3JpcHRQcm9tcHQoUVdlYkZyYW1lKiwgY29uc3QgUVN0cmluZyYgbXNnLCBjb25z
dCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFFTdHJpbmcqIHJlc3VsdCkKLXsKLSAgICBpZiAoIWlz
VGV4dE91dHB1dEVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBmcHJpbnRm
KHN0ZG91dCwgIlBST01QVDogJXMsIGRlZmF1bHQgdGV4dDogJXNcbiIsIG1zZy50b1V0ZjgoKS5j
b25zdERhdGEoKSwgZGVmYXVsdFZhbHVlLnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKLSAgICAqcmVz
dWx0ID0gZGVmYXVsdFZhbHVlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYlBhZ2U6
OmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFFOZXR3b3Jr
UmVxdWVzdCYgcmVxdWVzdCwgTmF2aWdhdGlvblR5cGUgdHlwZSkKLXsKLSAgICBpZiAobV9kcnQt
PnRlc3RSdW5uZXIoKS0+d2FpdEZvclBvbGljeSgpKQotICAgICAgICBtX2RydC0+dGVzdFJ1bm5l
cigpLT5ub3RpZnlEb25lKCk7Ci0KLSAgICByZXR1cm4gUVdlYlBhZ2U6OmFjY2VwdE5hdmlnYXRp
b25SZXF1ZXN0KGZyYW1lLCByZXF1ZXN0LCB0eXBlKTsKLX0KLQotYm9vbCBXZWJQYWdlOjpzdXBw
b3J0c0V4dGVuc2lvbihRV2ViUGFnZTo6RXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QKLXsKLSAg
ICBpZiAoZXh0ZW5zaW9uID09IFFXZWJQYWdlOjpFcnJvclBhZ2VFeHRlbnNpb24pCi0gICAgICAg
IHJldHVybiBtX2RydC0+dGVzdFJ1bm5lcigpLT5zaG91bGRIYW5kbGVFcnJvclBhZ2VzKCk7Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViUGFnZTo6ZXh0ZW5zaW9uKEV4dGVuc2lv
biBleHRlbnNpb24sIGNvbnN0IEV4dGVuc2lvbk9wdGlvbiAqb3B0aW9uLCBFeHRlbnNpb25SZXR1
cm4gKm91dHB1dCkKLXsKLSAgICBjb25zdCBRV2ViUGFnZTo6RXJyb3JQYWdlRXh0ZW5zaW9uT3B0
aW9uKiBpbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgUVdlYlBhZ2U6OkVycm9yUGFnZUV4dGVuc2lv
bk9wdGlvbio+KG9wdGlvbik7Ci0KLSAgICAvLyBMZXRzIGhhbmRsZSBlcnJvciBwYWdlcyBmb3Ig
dGhlIG1haW4gZnJhbWUgZm9yIG5vdy4KLSAgICBpZiAoaW5mby0+ZnJhbWUgIT0gbWFpbkZyYW1l
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFFXZWJQYWdlOjpFcnJvclBhZ2VFeHRl
bnNpb25SZXR1cm4qIGVycm9yUGFnZSA9IHN0YXRpY19jYXN0PFFXZWJQYWdlOjpFcnJvclBhZ2VF
eHRlbnNpb25SZXR1cm4qPihvdXRwdXQpOwotCi0gICAgZXJyb3JQYWdlLT5jb250ZW50ID0gUVN0
cmluZygiZGF0YTp0ZXh0L2h0bWwsPGJvZHkvPiIpLnRvVXRmOCgpOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLVFPYmplY3QqIFdlYlBhZ2U6OmNyZWF0ZVBsdWdpbihjb25zdCBRU3RyaW5nJiBj
bGFzc0lkLCBjb25zdCBRVXJsJiB1cmwsIGNvbnN0IFFTdHJpbmdMaXN0JiBwYXJhbU5hbWVzLCBj
b25zdCBRU3RyaW5nTGlzdCYgcGFyYW1WYWx1ZXMpCi17Ci0gICAgUV9VTlVTRUQodXJsKTsKLSAg
ICBRX1VOVVNFRChwYXJhbU5hbWVzKTsKLSAgICBRX1VOVVNFRChwYXJhbVZhbHVlcyk7Ci0KLSAg
ICBpZiAoY2xhc3NJZCA9PSBRTGF0aW4xU3RyaW5nKCJRUHJvZ3Jlc3NCYXIiKSkKLSAgICAgICAg
cmV0dXJuIG5ldyBRUHJvZ3Jlc3NCYXIodmlldygpKTsKLSAgICBpZiAoY2xhc3NJZCA9PSBRTGF0
aW4xU3RyaW5nKCJRTGFiZWwiKSkKLSAgICAgICAgcmV0dXJuIG5ldyBRTGFiZWwodmlldygpKTsK
LQotICAgIHJldHVybiAwOwotfQotCi12b2lkIFdlYlBhZ2U6OnNldFZpZXdHZW9tZXRyeShjb25z
dCBRUmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoV2ViVmlld0dyYXBoaWNzQmFzZWQqIHYgPSBxb2Jq
ZWN0X2Nhc3Q8V2ViVmlld0dyYXBoaWNzQmFzZWQqPih2aWV3KCkpKQotICAgICAgICB2LT5zY2Vu
ZSgpLT5zZXRTY2VuZVJlY3QoUVJlY3RGKHJlY3QpKTsKLSAgICBlbHNlIGlmIChRV2lkZ2V0ICp2
ID0gdmlldygpKQotICAgICAgICB2LT5zZXRHZW9tZXRyeShyZWN0KTsKLX0KLQotV2ViVmlld0dy
YXBoaWNzQmFzZWQ6OldlYlZpZXdHcmFwaGljc0Jhc2VkKFFXaWRnZXQqIHBhcmVudCkKLSAgICA6
IG1faXRlbShuZXcgUUdyYXBoaWNzV2ViVmlldykKLXsKLSAgICBzZXRTY2VuZShuZXcgUUdyYXBo
aWNzU2NlbmUodGhpcykpOwotICAgIHNjZW5lKCktPmFkZEl0ZW0obV9pdGVtKTsKLX0KLQotc3Rh
dGljIER1bXBSZW5kZXJUcmVlICpzX2luc3RhbmNlID0gMDsKLQotRHVtcFJlbmRlclRyZWU6OkR1
bXBSZW5kZXJUcmVlKCkKLSAgICA6IG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzKGZhbHNlKQotICAg
ICwgbV9zdGRpbigwKQotICAgICwgbV9lbmFibGVUZXh0T3V0cHV0KGZhbHNlKQotICAgICwgbV9z
dGFuZEFsb25lTW9kZShmYWxzZSkKLSAgICAsIG1fZ3JhcGhpY3NCYXNlZChmYWxzZSkKLSAgICAs
IG1fcGVyc2lzdGVudFN0b3JhZ2VQYXRoKFFTdHJpbmcoZ2V0ZW52KCJEVU1QUkVOREVSVFJFRV9U
RU1QIikpKQotewotICAgIEFTU0VSVCghc19pbnN0YW5jZSk7Ci0gICAgc19pbnN0YW5jZSA9IHRo
aXM7Ci0KLSAgICBRQnl0ZUFycmF5IHZpZXdNb2RlID0gZ2V0ZW52KCJRVF9EUlRfV0VCVklFV19N
T0RFIik7Ci0gICAgaWYgKHZpZXdNb2RlID09ICJncmFwaGljcyIpCi0gICAgICAgIHNldEdyYXBo
aWNzQmFzZWQodHJ1ZSk7Ci0KLSAgICBXZWJLaXQ6OmluaXRpYWxpemVXZWJLaXRXaWRnZXRzKCk7
Ci0gICAgV2ViQ29yZTo6aW5pdGlhbGl6ZVdlYkNvcmVRdCgpOwotICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0Ojppbml0aWFsaXplKCk7Ci0KLSAgICAvLyBTZXQgcnVubmluZyBpbiBEUlQgbW9k
ZSBmb3IgcXdlYnBhZ2UgdG8gY3JlYXRlIHRlc3RhYmxlIG9iamVjdHMuCi0gICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnNldER1bXBSZW5kZXJUcmVlTW9kZUVuYWJsZWQodHJ1ZSk7Ci0gICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om92ZXJ3cml0ZVBsdWdpbkRpcmVjdG9yaWVzKCk7Ci0g
ICAgUVdlYlNldHRpbmdzOjplbmFibGVQZXJzaXN0ZW50U3RvcmFnZShtX3BlcnNpc3RlbnRTdG9y
YWdlUGF0aCk7Ci0KLSAgICBtX25ldHdvcmtBY2Nlc3NNYW5hZ2VyID0gbmV3IE5ldHdvcmtBY2Nl
c3NNYW5hZ2VyKHRoaXMpOwotICAgIC8vIGNyZWF0ZSBvdXIgcHJpbWFyeSB0ZXN0aW5nIHBhZ2Uv
dmlldy4KLSAgICBpZiAoaXNHcmFwaGljc0Jhc2VkKCkpIHsKLSAgICAgICAgV2ViVmlld0dyYXBo
aWNzQmFzZWQqIHZpZXcgPSBuZXcgV2ViVmlld0dyYXBoaWNzQmFzZWQoMCk7Ci0gICAgICAgIG1f
cGFnZSA9IG5ldyBXZWJQYWdlKHZpZXcsIHRoaXMpOwotICAgICAgICB2aWV3LT5zZXRQYWdlKG1f
cGFnZSk7Ci0gICAgICAgIG1fbWFpblZpZXcgPSB2aWV3OwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IFFXZWJWaWV3KiB2aWV3ID0gbmV3IFFXZWJWaWV3KDApOwotICAgICAgICBtX3BhZ2UgPSBuZXcg
V2ViUGFnZSh2aWV3LCB0aGlzKTsKLSAgICAgICAgdmlldy0+c2V0UGFnZShtX3BhZ2UpOwotICAg
ICAgICBtX21haW5WaWV3ID0gdmlldzsKLSAgICB9Ci0gICAgLy8gVXNlIGEgZnJhbWUgZ3JvdXAg
bmFtZSBmb3IgYWxsIHBhZ2VzIGNyZWF0ZWQgYnkgRHVtcFJlbmRlclRyZWUgdG8gYWxsb3cKLSAg
ICAvLyB0ZXN0aW5nIG9mIGNyb3NzLXBhZ2UgZnJhbWUgbG9va3VwLgotICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0Ojp3ZWJQYWdlU2V0R3JvdXBOYW1lKHBhZ2VBZGFwdGVyKCksICJvcmcud2Vi
a2l0LnF0LkR1bXBSZW5kZXJUcmVlIik7Ci0KLSAgICBtX21haW5WaWV3LT5zZXRDb250ZXh0TWVu
dVBvbGljeShRdDo6Tm9Db250ZXh0TWVudSk7Ci0gICAgbV9tYWluVmlldy0+cmVzaXplKFFTaXpl
KFRlc3RSdW5uZXI6OnZpZXdXaWR0aCwgVGVzdFJ1bm5lcjo6dmlld0hlaWdodCkpOwotCi0gICAg
Ly8gY2xlYW4gdXAgY2FjaGUgYnkgcmVzZXR0aW5nIHF1b3RhLgotICAgIHFpbnQ2NCBxdW90YSA9
IHdlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+b2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVRdW90YSgp
OwotICAgIHdlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2Fj
aGVRdW90YShxdW90YSk7Ci0KLSAgICAvLyBjcmVhdGUgb3VyIGNvbnRyb2xsZXJzLiBUaGlzIGhh
cyB0byBiZSBkb25lIGJlZm9yZSBjb25uZWN0RnJhbWUsCi0gICAgLy8gYXMgaXQgZXhwb3J0cyB0
aGVyZSB0byB0aGUgSmF2YVNjcmlwdCBET00gd2luZG93LgotICAgIG1fY29udHJvbGxlciA9IG5l
dyBUZXN0UnVubmVyUXQodGhpcyk7Ci0gICAgY29ubmVjdChtX2NvbnRyb2xsZXIsIFNJR05BTChz
aG93UGFnZSgpKSwgdGhpcywgU0xPVChzaG93UGFnZSgpKSk7Ci0gICAgY29ubmVjdChtX2NvbnRy
b2xsZXIsIFNJR05BTChoaWRlUGFnZSgpKSwgdGhpcywgU0xPVChoaWRlUGFnZSgpKSk7Ci0KLSAg
ICAvLyBhc3luYyBnZW9sb2NhdGlvbiBwZXJtaXNzaW9uIHNldCBieSBjb250cm9sbGVyCi0gICAg
Y29ubmVjdChtX2NvbnRyb2xsZXIsIFNJR05BTChnZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKSks
IHRoaXMsIFNMT1QoZ2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkpKTsKLQotICAgIGNvbm5lY3Qo
bV9jb250cm9sbGVyLCBTSUdOQUwoZG9uZSgpKSwgdGhpcywgU0xPVChkdW1wKCkpKTsKLSAgICBt
X2V2ZW50U2VuZGVyID0gbmV3IEV2ZW50U2VuZGVyKG1fcGFnZSk7Ci0gICAgbV90ZXh0SW5wdXRD
b250cm9sbGVyID0gbmV3IFRleHRJbnB1dENvbnRyb2xsZXIobV9wYWdlKTsKLSAgICBtX2djQ29u
dHJvbGxlci5yZXNldChuZXcgR0NDb250cm9sbGVyKCkpOwotCi0gICAgLy8gbm93IGNvbm5lY3Qg
b3VyIGRpZmZlcmVudCBzaWduYWxzCi0gICAgY29ubmVjdChtX3BhZ2UsIFNJR05BTChmcmFtZUNy
ZWF0ZWQoUVdlYkZyYW1lICopKSwKLSAgICAgICAgICAgIHRoaXMsIFNMT1QoY29ubmVjdEZyYW1l
KFFXZWJGcmFtZSAqKSkpOwotICAgIGNvbm5lY3RGcmFtZShtX3BhZ2UtPm1haW5GcmFtZSgpKTsK
LQotICAgIGNvbm5lY3QobV9wYWdlLCBTSUdOQUwobG9hZEZpbmlzaGVkKGJvb2wpKSwKLSAgICAg
ICAgICAgIG1fY29udHJvbGxlciwgU0xPVChtYXliZUR1bXAoYm9vbCkpKTsKLSAgICAvLyBXZSBu
ZWVkIHRvIGNvbm5lY3QgdG8gbG9hZFN0YXJ0ZWQoKSBiZWNhdXNlIG5vdGlmeURvbmUgc2hvdWxk
IG9ubHkKLSAgICAvLyBkdW1wIHJlc3VsdHMgaXRzZWxmIHdoZW4gdGhlIGxhc3QgcGFnZSBsb2Fk
ZWQgaW4gdGhlIHRlc3QgaGFzIGZpbmlzaGVkIGxvYWRpbmcuCi0gICAgY29ubmVjdChtX3BhZ2Us
IFNJR05BTChsb2FkU3RhcnRlZCgpKSwKLSAgICAgICAgICAgIG1fY29udHJvbGxlciwgU0xPVChy
ZXNldExvYWRGaW5pc2hlZCgpKSk7Ci0gICAgY29ubmVjdChtX3BhZ2UsIFNJR05BTCh3aW5kb3dD
bG9zZVJlcXVlc3RlZCgpKSwgdGhpcywgU0xPVCh3aW5kb3dDbG9zZVJlcXVlc3RlZCgpKSk7Ci0g
ICAgY29ubmVjdChtX3BhZ2UsIFNJR05BTChwcmludFJlcXVlc3RlZChRV2ViRnJhbWUqKSksIHRo
aXMsIFNMT1QoZHJ5UnVuUHJpbnQoUVdlYkZyYW1lKikpKTsKLQotICAgIGNvbm5lY3QobV9wYWdl
LT5tYWluRnJhbWUoKSwgU0lHTkFMKHRpdGxlQ2hhbmdlZChjb25zdCBRU3RyaW5nJikpLAotICAg
ICAgICAgICAgU0xPVCh0aXRsZUNoYW5nZWQoY29uc3QgUVN0cmluZyYpKSk7Ci0gICAgY29ubmVj
dChtX3BhZ2UsIFNJR05BTChkYXRhYmFzZVF1b3RhRXhjZWVkZWQoUVdlYkZyYW1lKixRU3RyaW5n
KSksCi0gICAgICAgICAgICB0aGlzLCBTTE9UKGR1bXBEYXRhYmFzZVF1b3RhKFFXZWJGcmFtZSos
UVN0cmluZykpKTsKLSAgICBjb25uZWN0KG1fcGFnZSwgU0lHTkFMKGFwcGxpY2F0aW9uQ2FjaGVR
dW90YUV4Y2VlZGVkKFFXZWJTZWN1cml0eU9yaWdpbiAqLCBxdWludDY0LCBxdWludDY0KSksCi0g
ICAgICAgICAgICB0aGlzLCBTTE9UKGR1bXBBcHBsaWNhdGlvbkNhY2hlUXVvdGEoUVdlYlNlY3Vy
aXR5T3JpZ2luICosIHF1aW50NjQsIHF1aW50NjQpKSk7Ci0gICAgY29ubmVjdChtX3BhZ2UsIFNJ
R05BTChzdGF0dXNCYXJNZXNzYWdlKGNvbnN0IFFTdHJpbmcmKSksCi0gICAgICAgICAgICB0aGlz
LCBTTE9UKHN0YXR1c0Jhck1lc3NhZ2UoY29uc3QgUVN0cmluZyYpKSk7Ci0KLSAgICBRT2JqZWN0
Ojpjb25uZWN0KHRoaXMsIFNJR05BTChxdWl0KCkpLCBxQXBwLCBTTE9UKHF1aXQoKSksIFF0OjpR
dWV1ZWRDb25uZWN0aW9uKTsKLQotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXREdW1w
UmVuZGVyVHJlZU1vZGVFbmFibGVkKHRydWUpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpzZXRJbnRlcmFjdGl2ZUZvcm1WYWxpZGF0aW9uRW5hYmxlZChwYWdlQWRhcHRlcigpLCB0cnVl
KTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZW5hYmxlTW9ja1Njcm9sbGJhcnMoKTsK
LQotICAgIFFGb2N1c0V2ZW50IGV2ZW50KFFFdmVudDo6Rm9jdXNJbiwgUXQ6OkFjdGl2ZVdpbmRv
d0ZvY3VzUmVhc29uKTsKLSAgICBRQXBwbGljYXRpb246OnNlbmRFdmVudChtX21haW5WaWV3LCAm
ZXZlbnQpOwotfQotCi1EdW1wUmVuZGVyVHJlZTo6fkR1bXBSZW5kZXJUcmVlKCkKLXsKLSAgICBp
ZiAoIW1fcmVkaXJlY3RPdXRwdXRGaWxlTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIGZjbG9zZShz
dGRvdXQpOwotICAgIGlmICghbV9yZWRpcmVjdEVycm9yRmlsZU5hbWUuaXNFbXB0eSgpKQotICAg
ICAgICBmY2xvc2Uoc3RkZXJyKTsKLSAgICBkZWxldGUgbV9tYWluVmlldzsKLSAgICBkZWxldGUg
bV9zdGRpbjsKLSAgICBzX2luc3RhbmNlID0gMDsKLX0KLQotRHVtcFJlbmRlclRyZWUqIER1bXBS
ZW5kZXJUcmVlOjppbnN0YW5jZSgpCi17Ci0gICAgcmV0dXJuIHNfaW5zdGFuY2U7Ci19Ci0KLXN0
YXRpYyB2b2lkIGNsZWFySGlzdG9yeShRV2ViUGFnZSogcGFnZSkKLXsKLSAgICAvLyBRV2ViSGlz
dG9yeTo6Y2xlYXIoKSBsZWF2ZXMgY3VycmVudCBwYWdlLCBzbyByZW1vdmUgaXQgYXMgd2VsbCBi
eSBzZXR0aW5nCi0gICAgLy8gbWF4IGl0ZW0gY291bnQgdG8gMCwgYW5kIHRoZW4gc2V0dGluZyBp
dCBiYWNrIHRvIGl0J3Mgb3JpZ2luYWwgdmFsdWUuCi0KLSAgICBRV2ViSGlzdG9yeSogaGlzdG9y
eSA9IHBhZ2UtPmhpc3RvcnkoKTsKLSAgICBpbnQgaXRlbUNvdW50ID0gaGlzdG9yeS0+bWF4aW11
bUl0ZW1Db3VudCgpOwotCi0gICAgaGlzdG9yeS0+Y2xlYXIoKTsKLSAgICBoaXN0b3J5LT5zZXRN
YXhpbXVtSXRlbUNvdW50KDApOwotICAgIGhpc3RvcnktPnNldE1heGltdW1JdGVtQ291bnQoaXRl
bUNvdW50KTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZHJ5UnVuUHJpbnQoUVdlYkZyYW1l
KiBmcmFtZSkKLXsKLSNpZiAhZGVmaW5lZChRVF9OT19QUklOVEVSKSAmJiBIQVZFKFFUUFJJTlRT
VVBQT1JUKQotICAgIE51bGxQcmludGVyIHByaW50ZXI7Ci0gICAgZnJhbWUtPnByaW50KCZwcmlu
dGVyKTsKLSNlbmRpZgotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpyZXNldFRvQ29uc2lzdGVu
dFN0YXRlQmVmb3JlVGVzdGluZyhjb25zdCBRVXJsJiB1cmwpCi17Ci0gICAgLy8gcmVzZXQgc28g
dGhhdCBhbnkgY3VycmVudCBsb2FkcyBhcmUgc3RvcHBlZAotICAgIC8vIE5PVEU6IHRoYXQgdGhp
cyBoYXMgdG8gYmUgZG9uZSBiZWZvcmUgdGhlIHRlc3RSdW5uZXIgaXMKLSAgICAvLyByZXNldCBv
ciB3ZSBnZXQgdGltZW91dHMgZm9yIHNvbWUgdGVzdHMuCi0gICAgbV9wYWdlLT5ibG9ja1NpZ25h
bHModHJ1ZSk7Ci0gICAgbV9wYWdlLT50cmlnZ2VyQWN0aW9uKFFXZWJQYWdlOjpTdG9wKTsKLSAg
ICBtX3BhZ2UtPmJsb2NrU2lnbmFscyhmYWxzZSk7Ci0KLSAgICBRTGlzdDxRV2ViU2VjdXJpdHlP
cmlnaW4+IGtub3duT3JpZ2lucyA9IFFXZWJTZWN1cml0eU9yaWdpbjo6YWxsT3JpZ2lucygpOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwga25vd25PcmlnaW5zLnNpemUoKTsgKytpKQotICAgICAg
ICBrbm93bk9yaWdpbnNbaV0uc2V0RGF0YWJhc2VRdW90YShkYXRhYmFzZURlZmF1bHRRdW90YSk7
Ci0KLSAgICAvLyByZXNldCB0aGUgdGVzdFJ1bm5lciBhdCB0aGlzIHBvaW50LCBzbyB0aGF0IHdl
IHVuZGVyIG5vCi0gICAgLy8gY2lyY3Vtc3RhbmNlIGR1bXAgKHN0b3AgdGhlIHdhaXRVbnRpbERv
bmUgdGltZXIpIGR1cmluZyB0aGUgcmVzZXQKLSAgICAvLyBvZiB0aGUgRFJULgotICAgIG1fY29u
dHJvbGxlci0+cmVzZXQoKTsKLQotICAgIG1fanNjQ29udHJvbGxlciA9IFRlc3RSdW5uZXI6OmNy
ZWF0ZSh1cmwudG9TdHJpbmcoKS50b1N0ZFN0cmluZygpLCBtX2V4cGVjdGVkSGFzaC50b1N0ZFN0
cmluZygpKTsKLQotICAgIC8vIHJlc2V0IG1vdXNlIGNsaWNrcyBjb3VudGVyCi0gICAgbV9ldmVu
dFNlbmRlci0+cmVzZXRDbGlja0NvdW50KCk7Ci0KLSAgICBjbG9zZVJlbWFpbmluZ1dpbmRvd3Mo
KTsKLSAgICAKLSAgICAvLyBDYWxsIHNldFRleHRTaXplTXVsdGlwbGllcigxLjApIHRvIHJlc2V0
IFRleHRab29tRmFjdG9yIGFuZCBQYWdlWm9vbUZhY3RvciB0b28uIAotICAgIC8vIEl0IHNob3Vs
ZCBiZSBkb25lIGJlZm9yZSByZXNldFNldHRpbmdzKCkgdG8gZ3VhcmFudGVlIHJlc2V0dGluZyBR
V2ViU2V0dGluZ3M6Olpvb21UZXh0T25seSBjb3JyZWN0bHkuCi0gICAgbV9wYWdlLT5tYWluRnJh
bWUoKS0+c2V0VGV4dFNpemVNdWx0aXBsaWVyKDEuMCk7Ci0KLSAgICBtX3BhZ2UtPnJlc2V0U2V0
dGluZ3MoKTsKLSNpZm5kZWYgUVRfTk9fVU5ET1NUQUNLCi0gICAgbV9wYWdlLT51bmRvU3RhY2so
KS0+Y2xlYXIoKTsKLSNlbmRpZgotCi0gICAgY2xlYXJIaXN0b3J5KG1fcGFnZSk7Ci0gICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNjYWxlUGFnZUJ5KG1haW5GcmFtZUFkYXB0ZXIoKSwgMSwg
UVBvaW50KDAsIDApKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJGcmFtZU5h
bWUobWFpbkZyYW1lQWRhcHRlcigpKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVt
b3ZlVXNlclN0eWxlU2hlZXRzKHBhZ2VBZGFwdGVyKCkpOwotCi0gICAgbV9wYWdlLT5tYWluRnJh
bWUoKS0+c2V0U2Nyb2xsQmFyUG9saWN5KFF0OjpWZXJ0aWNhbCwgUXQ6OlNjcm9sbEJhckFzTmVl
ZGVkKTsKLSAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5zZXRTY3JvbGxCYXJQb2xpY3koUXQ6Okhv
cml6b250YWwsIFF0OjpTY3JvbGxCYXJBc05lZWRlZCk7Ci0KLSAgICBpZiAodXJsLnNjaGVtZSgp
ID09ICJodHRwIiB8fCB1cmwuc2NoZW1lKCkgPT0gImh0dHBzIikgewotICAgICAgICAvLyBjcmVk
ZW50aWFscyBtYXkgZXhpc3QgZnJvbSBwcmV2aW91cyB0ZXN0cy4KLSAgICAgICAgbV9wYWdlLT5z
ZXROZXR3b3JrQWNjZXNzTWFuYWdlcigwKTsKLSAgICAgICAgZGVsZXRlIG1fbmV0d29ya0FjY2Vz
c01hbmFnZXI7Ci0gICAgICAgIG1fbmV0d29ya0FjY2Vzc01hbmFnZXIgPSBuZXcgTmV0d29ya0Fj
Y2Vzc01hbmFnZXIodGhpcyk7Ci0gICAgICAgIG1fcGFnZS0+c2V0TmV0d29ya0FjY2Vzc01hbmFn
ZXIobV9uZXR3b3JrQWNjZXNzTWFuYWdlcik7Ci0gICAgfQotCi0gICAgV29ya1F1ZXVlOjpzaGFy
ZWQoKS0+Y2xlYXIoKTsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5zZXRGcm96ZW4oZmFsc2Up
OwotCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0T3JpZ2luQWNjZXNzV2hpdGVM
aXN0cygpOwotCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFdpbmRvd3NCZWhhdmlv
ckFzRWRpdGluZ0JlaGF2aW9yKHBhZ2VBZGFwdGVyKCkpOwotCi0gICAgUUxvY2FsZTo6c2V0RGVm
YXVsdChRTG9jYWxlOjpjKCkpOwotCi0gICAgdGVzdFJ1bm5lcigpLT5zZXREZXZlbG9wZXJFeHRy
YXNFbmFibGVkKHRydWUpOwotI2lmbmRlZiBRX09TX1dJTkNFCi0gICAgc2V0bG9jYWxlKExDX0FM
TCwgIiIpOwotI2VuZGlmCi0KLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJPcGVu
ZXIobWFpbkZyYW1lQWRhcHRlcigpKTsKLX0KLQotc3RhdGljIGJvb2wgaXNHbG9iYWxIaXN0b3J5
VGVzdChjb25zdCBRVXJsJiB1cmwpCi17Ci0gICAgaWYgKHVybC5wYXRoKCkuY29udGFpbnMoImds
b2JhbGhpc3RvcnkvIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotc3RhdGljIGJvb2wgaXNXZWJJbnNwZWN0b3JUZXN0KGNvbnN0IFFVcmwmIHVybCkKLXsK
LSAgICBpZiAodXJsLnBhdGgoKS5jb250YWlucygiaW5zcGVjdG9yLyIpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGlzRHVtcEFzVGV4
dFRlc3QoY29uc3QgUVVybCYgdXJsKQotewotICAgIGlmICh1cmwucGF0aCgpLmNvbnRhaW5zKCJk
dW1wQXNUZXh0LyIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6b3Blbihjb25zdCBRVXJsJiB1cmwpCi17Ci0gICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3NQYXRoKFFG
aWxlSW5mbyh1cmwudG9TdHJpbmcoKSkucGF0aCgpKTsKLSAgICByZXNldFRvQ29uc2lzdGVudFN0
YXRlQmVmb3JlVGVzdGluZyh1cmwpOwotCi0gICAgaWYgKGlzV2ViSW5zcGVjdG9yVGVzdChtX3Bh
Z2UtPm1haW5GcmFtZSgpLT51cmwoKSkpCi0gICAgICAgIHRlc3RSdW5uZXIoKS0+Y2xvc2VXZWJJ
bnNwZWN0b3IoKTsKLQotICAgIGlmIChpc1dlYkluc3BlY3RvclRlc3QodXJsKSkKLSAgICAgICAg
dGVzdFJ1bm5lcigpLT5zaG93V2ViSW5zcGVjdG9yKCk7Ci0KLSAgICBpZiAoaXNEdW1wQXNUZXh0
VGVzdCh1cmwpKQotICAgICAgICBtX2pzY0NvbnRyb2xsZXItPnNldER1bXBBc1RleHQodHJ1ZSk7
Ci0KLSAgICBpZiAoaXNHbG9iYWxIaXN0b3J5VGVzdCh1cmwpKQotICAgICAgICB0ZXN0UnVubmVy
KCktPmR1bXBIaXN0b3J5Q2FsbGJhY2tzKCk7Ci0KLSAgICAvLyBXM0MgU1ZHIHRlc3RzIGV4cGVj
dCB0byBiZSA0ODB4MzYwCi0gICAgYm9vbCBpc1czQ1Rlc3QgPSB1cmwudG9TdHJpbmcoKS5jb250
YWlucygic3ZnL1czQy1TVkctMS4xIik7Ci0gICAgaW50IHdpZHRoID0gaXNXM0NUZXN0ID8gVGVz
dFJ1bm5lcjo6dzNjU1ZHVmlld1dpZHRoIDogVGVzdFJ1bm5lcjo6dmlld1dpZHRoOwotICAgIGlu
dCBoZWlnaHQgPSBpc1czQ1Rlc3QgPyBUZXN0UnVubmVyOjp3M2NTVkdWaWV3SGVpZ2h0IDogVGVz
dFJ1bm5lcjo6dmlld0hlaWdodDsKLSAgICBtX21haW5WaWV3LT5yZXNpemUoUVNpemUod2lkdGgs
IGhlaWdodCkpOwotICAgIG1fcGFnZS0+c2V0UHJlZmVycmVkQ29udGVudHNTaXplKFFTaXplKCkp
OwotICAgIG1fcGFnZS0+c2V0Vmlld3BvcnRTaXplKFFTaXplKHdpZHRoLCBoZWlnaHQpKTsKLQot
ICAgIFFGb2N1c0V2ZW50IGV2KFFFdmVudDo6Rm9jdXNJbik7Ci0gICAgbV9wYWdlLT5ldmVudCgm
ZXYpOwotCi0gICAgV2ViS2l0OjpRdFRlc3RTdXBwb3J0OjpjbGVhck1lbW9yeUNhY2hlcygpOwot
Ci0gICAgV2ViS2l0OjpRdFRlc3RTdXBwb3J0Ojppbml0aWFsaXplVGVzdEZvbnRzKCk7Ci0KLSAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcEZyYW1lTG9hZGVyKHVybC50b1N0cmluZygp
LmNvbnRhaW5zKCJsb2FkaW5nLyIpKTsKLSAgICBzZXRUZXh0T3V0cHV0RW5hYmxlZCh0cnVlKTsK
LSAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkKHVybCk7Ci19Ci0KLXZvaWQgRHVtcFJlbmRl
clRyZWU6OnJlYWRMaW5lKCkKLXsKLSAgICBpZiAoIW1fc3RkaW4pIHsKLSAgICAgICAgbV9zdGRp
biA9IG5ldyBRRmlsZTsKLSAgICAgICAgbV9zdGRpbi0+b3BlbihzdGRpbiwgUUZpbGU6OlJlYWRP
bmx5KTsKLQotICAgICAgICBpZiAoIW1fc3RkaW4tPmlzUmVhZGFibGUoKSkgewotICAgICAgICAg
ICAgZW1pdCBxdWl0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBRQnl0ZUFycmF5IGxpbmUgPSBtX3N0ZGluLT5yZWFkTGluZSgpLnRyaW1tZWQoKTsKLQot
ICAgIGlmIChsaW5lLmlzRW1wdHkoKSkgewotICAgICAgICBlbWl0IHF1aXQoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHByb2Nlc3NMaW5lKFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQo
bGluZS5jb25zdERhdGEoKSwgbGluZS5sZW5ndGgoKSkpOwotfQotCi12b2lkIER1bXBSZW5kZXJU
cmVlOjpwcm9jZXNzQXJnc0xpbmUoY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3MpCi17Ci0gICAgc2V0
U3RhbmRBbG9uZU1vZGUodHJ1ZSk7Ci0KLSAgICBtX3N0YW5kQWxvbmVNb2RlVGVzdExpc3QgPSBh
cmdzOwotCi0gICAgUUZpbGVJbmZvIGZpcnN0RW50cnkobV9zdGFuZEFsb25lTW9kZVRlc3RMaXN0
LmZpcnN0KCkpOwotICAgIGlmIChmaXJzdEVudHJ5LmlzRGlyKCkpIHsKLSAgICAgICAgUURpciBm
b2xkZXJFbnRyeShtX3N0YW5kQWxvbmVNb2RlVGVzdExpc3QuZmlyc3QoKSk7Ci0gICAgICAgIFFT
dHJpbmdMaXN0IHN1cHBvcnRlZEV4dDsKLSAgICAgICAgLy8gQ2hlY2sgZm9yIGFsbCBzdXBwb3J0
ZWQgZXh0ZW5zaW9ucyAoZnJvbSBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS90ZXN0X2ZpbGVzLnB5KS4KLSAgICAgICAgc3VwcG9ydGVkRXh0IDw8ICIqLmh0bWwi
IDw8ICIqLnNodG1sIiA8PCAiKi54bWwiIDw8ICIqLnhodG1sIiA8PCAiKi54aHRtbG1wIiA8PCAi
Ki5wbCIgPDwgIioucGhwIiA8PCAiKi5zdmciOwotICAgICAgICBtX3N0YW5kQWxvbmVNb2RlVGVz
dExpc3QgPSBmb2xkZXJFbnRyeS5lbnRyeUxpc3Qoc3VwcG9ydGVkRXh0LCBRRGlyOjpGaWxlcyk7
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9zdGFuZEFsb25lTW9kZVRlc3RMaXN0LnNp
emUoKTsgKytpKQotICAgICAgICAgICAgbV9zdGFuZEFsb25lTW9kZVRlc3RMaXN0W2ldID0gZm9s
ZGVyRW50cnkuYWJzb2x1dGVGaWxlUGF0aChtX3N0YW5kQWxvbmVNb2RlVGVzdExpc3RbaV0pOwot
ICAgIH0KLSAgICBjb25uZWN0KHRoaXMsIFNJR05BTChyZWFkeSgpKSwgdGhpcywgU0xPVChsb2Fk
TmV4dFRlc3RJblN0YW5kQWxvbmVNb2RlKCkpLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7Ci0KLSAg
ICBpZiAoIW1fc3RhbmRBbG9uZU1vZGVUZXN0TGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgUVN0
cmluZyBmaXJzdCA9IG1fc3RhbmRBbG9uZU1vZGVUZXN0TGlzdC50YWtlRmlyc3QoKTsKLSAgICAg
ICAgcHJvY2Vzc0xpbmUoZmlyc3QpOwotICAgIH0KLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6
bG9hZE5leHRUZXN0SW5TdGFuZEFsb25lTW9kZSgpCi17Ci0gICAgaWYgKG1fc3RhbmRBbG9uZU1v
ZGVUZXN0TGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgZW1pdCBxdWl0KCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgUVN0cmluZyBmaXJzdCA9IG1fc3RhbmRBbG9uZU1vZGVUZXN0TGlz
dC50YWtlRmlyc3QoKTsKLSAgICBwcm9jZXNzTGluZShmaXJzdCk7Ci19Ci0KLXZvaWQgRHVtcFJl
bmRlclRyZWU6OnByb2Nlc3NMaW5lKGNvbnN0IFFTdHJpbmcgJmlucHV0KQotewotICAgIFRlc3RD
b21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShzdGQ6OnN0cmluZyhpbnB1dC50b0xhdGlu
MSgpLmNvbnN0RGF0YSgpKSk7Ci0gICAgUVN0cmluZyBwYXRoT3JVUkwgPSBRTGF0aW4xU3RyaW5n
KGNvbW1hbmQucGF0aE9yVVJMLmNfc3RyKCkpOwotICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRU
ZXN0ID0gY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzIHx8IG1fZHVtcFBpeGVsc0ZvckFsbFRlc3Rz
OwotICAgIG1fZXhwZWN0ZWRIYXNoID0gUUxhdGluMVN0cmluZyhjb21tYW5kLmV4cGVjdGVkUGl4
ZWxIYXNoLmNfc3RyKCkpOwotCi0gICAgaWYgKHBhdGhPclVSTC5zdGFydHNXaXRoKFFMYXRpbjFT
dHJpbmcoImh0dHA6IikpCi0gICAgICAgICAgICB8fCBwYXRoT3JVUkwuc3RhcnRzV2l0aChRTGF0
aW4xU3RyaW5nKCJodHRwczoiKSkKLSAgICAgICAgICAgIHx8IHBhdGhPclVSTC5zdGFydHNXaXRo
KFFMYXRpbjFTdHJpbmcoImZpbGU6IikpCi0gICAgICAgICAgICB8fCBwYXRoT3JVUkwgPT0gUUxh
dGluMVN0cmluZygiYWJvdXQ6YmxhbmsiKSkgewotICAgICAgICBvcGVuKFFVcmwocGF0aE9yVVJM
KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUUZpbGVJbmZvIGZpKHBhdGhPclVSTCk7Ci0KLSAg
ICAgICAgaWYgKCFmaS5leGlzdHMoKSkgewotICAgICAgICAgICAgUURpciBjdXJyZW50RGlyID0g
UURpcjo6Y3VycmVudFBhdGgoKTsKLQotICAgICAgICAgICAgLy8gVHJ5IHRvIGJlIHNtYXJ0IGFi
b3V0IHdoZXJlIHRoZSB0ZXN0IGlzIGxvY2F0ZWQKLSAgICAgICAgICAgIGlmIChjdXJyZW50RGly
LmRpck5hbWUoKSA9PSBRTGF0aW4xU3RyaW5nKCJMYXlvdXRUZXN0cyIpKQotICAgICAgICAgICAg
ICAgIGZpID0gUUZpbGVJbmZvKGN1cnJlbnREaXIsIHBhdGhPclVSTC5yZXBsYWNlKFFSZWdFeHAo
Ii4qP0xheW91dFRlc3RzLyguKikiKSwgIlxcMSIpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFw
YXRoT3JVUkwuY29udGFpbnMoUUxhdGluMVN0cmluZygiTGF5b3V0VGVzdHMiKSkpCi0gICAgICAg
ICAgICAgICAgZmkgPSBRRmlsZUluZm8oY3VycmVudERpciwgcGF0aE9yVVJMLnByZXBlbmQoUUxh
dGluMVN0cmluZygiTGF5b3V0VGVzdHMvIikpKTsKLQotICAgICAgICAgICAgaWYgKCFmaS5leGlz
dHMoKSkgewotICAgICAgICAgICAgICAgIGVtaXQgcmVhZHkoKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBvcGVuKFFVcmw6OmZy
b21Mb2NhbEZpbGUoZmkuYWJzb2x1dGVGaWxlUGF0aCgpKSk7Ci0gICAgfQotCi0gICAgaWYgKGNv
bW1hbmQudGltZW91dCA+IDApCi0gICAgICAgIHNldFRpbWVvdXQoY29tbWFuZC50aW1lb3V0KTsK
LSAgICBmZmx1c2goc3Rkb3V0KTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6Y2xvc2VSZW1h
aW5pbmdXaW5kb3dzKCkKLXsKLSAgICBmb3JlYWNoIChRT2JqZWN0KiB3aWRnZXQsIHdpbmRvd3Mp
Ci0gICAgICAgIGRlbGV0ZSB3aWRnZXQ7Ci0gICAgd2luZG93cy5jbGVhcigpOwotfQotCi12b2lk
IER1bXBSZW5kZXJUcmVlOjppbml0SlNPYmplY3RzKCkKLXsKLSAgICBRV2ViRnJhbWUgKmZyYW1l
ID0gcW9iamVjdF9jYXN0PFFXZWJGcmFtZSo+KHNlbmRlcigpKTsKLSAgICBRX0FTU0VSVChmcmFt
ZSk7Ci0KLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IDA7Ci0gICAgSlNPYmplY3RSZWYgd2lu
ZG93ID0gMDsKLQotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpnZXRKU1dpbmRvd09iamVj
dChmcmFtZS0+aGFuZGxlKCksICZjb250ZXh0LCAmd2luZG93KTsKLQotICAgIGZyYW1lLT5hZGRU
b0phdmFTY3JpcHRXaW5kb3dPYmplY3QoUUxhdGluMVN0cmluZygidGVzdFJ1bm5lciIpLCBtX2Nv
bnRyb2xsZXIpOwotICAgIGZyYW1lLT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoUUxhdGlu
MVN0cmluZygiZXZlbnRTZW5kZXIiKSwgbV9ldmVudFNlbmRlcik7Ci0gICAgZnJhbWUtPmFkZFRv
SmF2YVNjcmlwdFdpbmRvd09iamVjdChRTGF0aW4xU3RyaW5nKCJ0ZXh0SW5wdXRDb250cm9sbGVy
IiksIG1fdGV4dElucHV0Q29udHJvbGxlcik7Ci0gICAgbV9nY0NvbnRyb2xsZXItPm1ha2VXaW5k
b3dPYmplY3QoY29udGV4dCwgd2luZG93LCAwKTsKLQotICAgIGlmIChtX2pzY0NvbnRyb2xsZXIp
IHsKLSAgICAgICAgSlNPYmplY3RSZWYgZHVtbXlXaW5kb3cgPSBKU09iamVjdE1ha2UoY29udGV4
dCwgMCwgMCk7Ci0gICAgICAgIG1fanNjQ29udHJvbGxlci0+bWFrZVdpbmRvd09iamVjdChjb250
ZXh0LCBkdW1teVdpbmRvdywgMCk7Ci0gICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0
ZXN0UnVubmVyTmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRlc3RS
dW5uZXIiKSk7Ci0gICAgICAgIEpTVmFsdWVSZWYgd3JhcHBlZFRlc3RSdW5uZXIgPSBKU09iamVj
dEdldFByb3BlcnR5KGNvbnRleHQsIGR1bW15V2luZG93LCB0ZXN0UnVubmVyTmFtZS5nZXQoKSwg
MCk7Ci0gICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBoZWxwZXJTY3JpcHQoQWRvcHQs
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIoZnVuY3Rpb24oKSB7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIgICAgZnVuY3Rpb24gYmluZChmdW4sIHRoaXNBcmcpIHtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgcmV0dXJuIGZ1bi5hcHBs
eSh0aGlzQXJnLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgfVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIH1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciAodmFyIHBy
b3AgaW4gdGhpcy5qc2NCYXNlZFRlc3RSdW5uZXIpIHtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICB2YXIgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMu
cXRCYXNlZFRlc3RSdW5uZXIsIHByb3ApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ICAgIGlmIChwZCAhPT0gdW5kZWZpbmVkICYmIChwZC53cml0YWJsZSA9PT0gZmFsc2UgfHwgcGQu
Y29uZmlndXJhYmxlID09PSBmYWxzZSkpIGNvbnRpbnVlO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHRoaXMucXRCYXNlZFRlc3RSdW5uZXJbcHJvcF0gPSBiaW5kKHRoaXMuanNj
QmFzZWRUZXN0UnVubmVyW3Byb3BdLCB0aGlzLmpzY0Jhc2VkVGVzdFJ1bm5lcik7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9
KS5hcHBseSh0aGlzKVxuIikpOwotCi0gICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBx
dEJhc2VkVGVzdFJ1bm5lck5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJxdEJhc2VkVGVzdFJ1bm5lciIpKTsKLSAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IGpzY0Jhc2VkVGVzdFJ1bm5lck5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJqc2NCYXNlZFRlc3RSdW5uZXIiKSk7Ci0KLSAgICAgICAgSlNPYmplY3RSZWYgYXJncyA9
IEpTT2JqZWN0TWFrZShjb250ZXh0LCAwLCAwKTsKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0
eShjb250ZXh0LCBhcmdzLCBxdEJhc2VkVGVzdFJ1bm5lck5hbWUuZ2V0KCksIEpTT2JqZWN0R2V0
UHJvcGVydHkoY29udGV4dCwgd2luZG93LCB0ZXN0UnVubmVyTmFtZS5nZXQoKSwgMCksIDAsIDAp
OwotICAgICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIGFyZ3MsIGpzY0Jhc2VkVGVz
dFJ1bm5lck5hbWUuZ2V0KCksIHdyYXBwZWRUZXN0UnVubmVyLCAwLCAwKTsKLQotICAgICAgICBK
U1ZhbHVlUmVmIGV4ID0gMDsKLSAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjb250ZXh0LCBoZWxw
ZXJTY3JpcHQuZ2V0KCksIGFyZ3MsIDAsIDAsICZleCk7Ci0gICAgICAgIGlmIChleCkgewotICAg
ICAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1zZyhBZG9wdCwgSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCBleCwgMCkpOwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJF
cnJvciBldmFsdWF0aW5nIFRlc3RSdW5uZXIgc2V0dXAtc2NyaXB0OiAlc1xuIiwgcVByaW50YWJs
ZShKU1N0cmluZ0NvcHlRU3RyaW5nKG1zZy5nZXQoKSkpKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjppbmplY3RJbnRlcm5hbHNPYmplY3QoZnJhbWUt
PmhhbmRsZSgpKTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6c2hvd1BhZ2UoKQotewotICAg
IG1fbWFpblZpZXctPnNob3coKTsKLSAgICAvLyB3ZSBuZWVkIGEgcGFpbnQgZXZlbnQgYnV0IGNh
bm5vdCBwcm9jZXNzIGFsbCB0aGUgZXZlbnRzCi0gICAgUVBpeG1hcCBwaXhtYXAobV9tYWluVmll
dy0+c2l6ZSgpKTsKLSAgICBtX21haW5WaWV3LT5yZW5kZXIoJnBpeG1hcCk7Ci19Ci0KLXZvaWQg
RHVtcFJlbmRlclRyZWU6OmhpZGVQYWdlKCkKLXsKLSAgICBtX21haW5WaWV3LT5oaWRlKCk7Ci19
Ci0KLVFTdHJpbmcgRHVtcFJlbmRlclRyZWU6OmR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFFXZWJG
cmFtZSogZnJhbWUpCi17Ci0gICAgaWYgKCFmcmFtZSB8fCAhRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6Omhhc0RvY3VtZW50RWxlbWVudChmcmFtZS0+aGFuZGxlKCkpKQotICAgICAgICByZXR1cm4g
UVN0cmluZygpOwotCi0gICAgUVN0cmluZyByZXN1bHQ7Ci0gICAgUVBvaW50IHBvcyA9IGZyYW1l
LT5zY3JvbGxQb3NpdGlvbigpOwotICAgIGlmIChwb3MueCgpID4gMCB8fCBwb3MueSgpID4gMCkg
ewotICAgICAgICBRV2ViRnJhbWUqIHBhcmVudCA9IHFvYmplY3RfY2FzdDxRV2ViRnJhbWUgKj4o
ZnJhbWUtPnBhcmVudCgpKTsKLSAgICAgICAgaWYgKHBhcmVudCkKLSAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoUVN0cmluZygiZnJhbWUgJyUxJyAiKS5hcmcoZnJhbWUtPnRpdGxlKCkpKTsKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZChRU3RyaW5nKCJzY3JvbGxlZCB0byAlMSwlMlxuIikuYXJnKHBv
cy54KCkpLmFyZyhwb3MueSgpKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fanNjQ29udHJvbGxlci0+
ZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoKSkgewotICAgICAgICBRTGlzdDxRV2ViRnJh
bWUqPiBjaGlsZHJlbiA9IGZyYW1lLT5jaGlsZEZyYW1lcygpOwotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAgICAgICAgcmVzdWx0ICs9IGR1
bXBGcmFtZVNjcm9sbFBvc2l0aW9uKGNoaWxkcmVuLmF0KGkpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotUVN0cmluZyBEdW1wUmVuZGVyVHJlZTo6ZHVtcEZyYW1lc0FzVGV4dChR
V2ViRnJhbWUqIGZyYW1lKQotewotICAgIGlmICghZnJhbWUgfHwgIUR1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpoYXNEb2N1bWVudEVsZW1lbnQoZnJhbWUtPmhhbmRsZSgpKSkKLSAgICAgICAgcmV0
dXJuIFFTdHJpbmcoKTsKLQotICAgIFFTdHJpbmcgcmVzdWx0OwotICAgIFFXZWJGcmFtZSogcGFy
ZW50ID0gcW9iamVjdF9jYXN0PFFXZWJGcmFtZSo+KGZyYW1lLT5wYXJlbnQoKSk7Ci0gICAgaWYg
KHBhcmVudCkgewotICAgICAgICByZXN1bHQuYXBwZW5kKFFMYXRpbjFTdHJpbmcoIlxuLS0tLS0t
LS1cbkZyYW1lOiAnIikpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGZyYW1lLT5mcmFtZU5hbWUo
KSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoUUxhdGluMVN0cmluZygiJ1xuLS0tLS0tLS1cbiIp
KTsKLSAgICB9Ci0KLSAgICBRU3RyaW5nIGlubmVyVGV4dCA9IGZyYW1lLT50b1BsYWluVGV4dCgp
OwotICAgIHJlc3VsdC5hcHBlbmQoaW5uZXJUZXh0KTsKLSAgICByZXN1bHQuYXBwZW5kKFFMYXRp
bjFTdHJpbmcoIlxuIikpOwotCi0gICAgaWYgKG1fanNjQ29udHJvbGxlci0+ZHVtcENoaWxkRnJh
bWVzQXNUZXh0KCkpIHsKLSAgICAgICAgUUxpc3Q8UVdlYkZyYW1lICo+IGNoaWxkcmVuID0gZnJh
bWUtPmNoaWxkRnJhbWVzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4u
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICByZXN1bHQgKz0gZHVtcEZyYW1lc0FzVGV4dChjaGls
ZHJlbi5hdChpKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIFFT
dHJpbmcgZHVtcEhpc3RvcnlJdGVtKGNvbnN0IFFXZWJIaXN0b3J5SXRlbSYgaXRlbSwgaW50IGlu
ZGVudCwgYm9vbCBjdXJyZW50KQotewotICAgIFFTdHJpbmcgcmVzdWx0OwotCi0gICAgaW50IHN0
YXJ0ID0gMDsKLSAgICBpZiAoY3VycmVudCkgewotICAgICAgICByZXN1bHQuYXBwZW5kKFFMYXRp
bjFTdHJpbmcoImN1cnItPiIpKTsKLSAgICAgICAgc3RhcnQgPSA2OwotICAgIH0KLSAgICBmb3Ig
KGludCBpID0gc3RhcnQ7IGkgPCBpbmRlbnQ7IGkrKykKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICcpOwotCi0gICAgUVN0cmluZyB1cmwgPSBpdGVtLnVybCgpLnRvU3RyaW5nKCk7Ci0gICAgaWYg
KHVybC5jb250YWlucygiZmlsZTovLyIpKSB7Ci0gICAgICAgIHN0YXRpYyBRU3RyaW5nIGxheW91
dFRlc3RzU3RyaW5nKCIvTGF5b3V0VGVzdHMvIik7Ci0gICAgICAgIHN0YXRpYyBRU3RyaW5nIGZp
bGVUZXN0U3RyaW5nKCIoZmlsZSB0ZXN0KToiKTsKLQotICAgICAgICBRU3RyaW5nIHJlcyA9IHVy
bC5taWQodXJsLmluZGV4T2YobGF5b3V0VGVzdHNTdHJpbmcpICsgbGF5b3V0VGVzdHNTdHJpbmcu
bGVuZ3RoKCkpOwotICAgICAgICBpZiAocmVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChmaWxlVGVzdFN0cmluZyk7Ci0gICAg
ICAgIHJlc3VsdC5hcHBlbmQocmVzKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQuYXBw
ZW5kKHVybCk7Ci0gICAgfQotCi0gICAgUVN0cmluZyB0YXJnZXQgPSBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6aGlzdG9yeUl0ZW1UYXJnZXQoaXRlbSk7Ci0gICAgaWYgKCF0YXJnZXQuaXNFbXB0
eSgpKQotICAgICAgICByZXN1bHQuYXBwZW5kKFFTdHJpbmcoUUxhdGluMVN0cmluZygiIChpbiBm
cmFtZSBcIiUxXCIpIikpLmFyZyh0YXJnZXQpKTsKLQotICAgIGlmIChEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6aXNUYXJnZXRJdGVtKGl0ZW0pKQotICAgICAgICByZXN1bHQuYXBwZW5kKFFMYXRp
bjFTdHJpbmcoIiAgKipuYXYgdGFyZ2V0KioiKSk7Ci0gICAgcmVzdWx0LmFwcGVuZChRTGF0aW4x
U3RyaW5nKCJcbiIpKTsKLQotICAgIFFNYXA8UVN0cmluZywgUVdlYkhpc3RvcnlJdGVtPiBjaGls
ZHJlbiA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpnZXRDaGlsZEhpc3RvcnlJdGVtcyhpdGVt
KTsKLSAgICBmb3JlYWNoIChRV2ViSGlzdG9yeUl0ZW0gaXRlbSwgY2hpbGRyZW4pCi0gICAgICAg
IHJlc3VsdCArPSBkdW1wSGlzdG9yeUl0ZW0oaXRlbSwgMTIsIGZhbHNlKTsKLQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLVFTdHJpbmcgRHVtcFJlbmRlclRyZWU6OmR1bXBCYWNrRm9yd2FyZExp
c3QoUVdlYlBhZ2UqIHBhZ2UpCi17Ci0gICAgUVdlYkhpc3RvcnkqIGhpc3RvcnkgPSBwYWdlLT5o
aXN0b3J5KCk7Ci0KLSAgICBRU3RyaW5nIHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kKFFMYXRp
bjFTdHJpbmcoIlxuPT09PT09PT09PT09PT0gQmFjayBGb3J3YXJkIExpc3QgPT09PT09PT09PT09
PT1cbiIpKTsKLQotICAgIC8vIEZPUk1BVDoKLSAgICAvLyAiICAgICAgICAoZmlsZSB0ZXN0KTpm
YXN0L2xvYWRlci9yZXNvdXJjZXMvY2xpY2stZnJhZ21lbnQtbGluay5odG1sICAqKm5hdiB0YXJn
ZXQqKiIKLSAgICAvLyAiY3Vyci0+ICAoZmlsZSB0ZXN0KTpmYXN0L2xvYWRlci9yZXNvdXJjZXMv
Y2xpY2stZnJhZ21lbnQtbGluay5odG1sI3Rlc3RmcmFnbWVudCAgKipuYXYgdGFyZ2V0KioiCi0K
LSAgICBpbnQgbWF4SXRlbXMgPSBoaXN0b3J5LT5tYXhpbXVtSXRlbUNvdW50KCk7Ci0KLSAgICBm
b3JlYWNoIChjb25zdCBRV2ViSGlzdG9yeUl0ZW0gaXRlbSwgaGlzdG9yeS0+YmFja0l0ZW1zKG1h
eEl0ZW1zKSkgewotICAgICAgICBpZiAoIWl0ZW0uaXNWYWxpZCgpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZHVtcEhpc3RvcnlJdGVtKGl0ZW0sIDgsIGZh
bHNlKSk7Ci0gICAgfQotCi0gICAgUVdlYkhpc3RvcnlJdGVtIGl0ZW0gPSBoaXN0b3J5LT5jdXJy
ZW50SXRlbSgpOwotICAgIGlmIChpdGVtLmlzVmFsaWQoKSkKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZChkdW1wSGlzdG9yeUl0ZW0oaXRlbSwgOCwgdHJ1ZSkpOwotCi0gICAgZm9yZWFjaCAoY29uc3Qg
UVdlYkhpc3RvcnlJdGVtIGl0ZW0sIGhpc3RvcnktPmZvcndhcmRJdGVtcyhtYXhJdGVtcykpIHsK
LSAgICAgICAgaWYgKCFpdGVtLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICByZXN1bHQuYXBwZW5kKGR1bXBIaXN0b3J5SXRlbShpdGVtLCA4LCBmYWxzZSkpOwotICAg
IH0KLQotICAgIHJlc3VsdC5hcHBlbmQoUUxhdGluMVN0cmluZygiPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1zdGF0aWMgY29uc3QgY2hhciAqbWV0aG9kTmFtZVN0cmluZ0ZvckZhaWxlZFRlc3QoVGVz
dFJ1bm5lciAqY29udHJvbGxlcikKLXsKLSAgICBjb25zdCBjaGFyICplcnJvck1lc3NhZ2U7Ci0g
ICAgaWYgKGNvbnRyb2xsZXItPmR1bXBBc1RleHQoKSkKLSAgICAgICAgZXJyb3JNZXNzYWdlID0g
Iltkb2N1bWVudEVsZW1lbnQgaW5uZXJUZXh0XSI7Ci0gICAgLy8gRklYTUU6IEFkZCB3aGVuIHdl
IGhhdmUgc3VwcG9ydAotICAgIC8vZWxzZSBpZiAoY29udHJvbGxlci0+ZHVtcERPTUFzV2ViQXJj
aGl2ZSgpKQotICAgIC8vICAgIGVycm9yTWVzc2FnZSA9ICJbW21haW5GcmFtZSBET01Eb2N1bWVu
dF0gd2ViQXJjaGl2ZV0iOwotICAgIC8vZWxzZSBpZiAoY29udHJvbGxlci0+ZHVtcFNvdXJjZUFz
V2ViQXJjaGl2ZSgpKQotICAgIC8vICAgIGVycm9yTWVzc2FnZSA9ICJbW21haW5GcmFtZSBkYXRh
U291cmNlXSB3ZWJBcmNoaXZlXSI7Ci0gICAgZWxzZQotICAgICAgICBlcnJvck1lc3NhZ2UgPSAi
W21haW5GcmFtZSByZW5kZXJUcmVlQXNFeHRlcm5hbFJlcHJlc2VudGF0aW9uXSI7Ci0KLSAgICBy
ZXR1cm4gZXJyb3JNZXNzYWdlOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpkdW1wKCkKLXsK
LSAgICAvLyBQcmV2ZW50IGFueSBmdXJ0aGVyIGZyYW1lIGxvYWQgb3IgcmVzb3VyY2UgbG9hZCBj
YWxsYmFja3MgZnJvbSBhcHBlYXJpbmcgYWZ0ZXIgd2UgZHVtcCB0aGUgcmVzdWx0LgotICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wRnJhbWVMb2FkZXIoZmFsc2UpOwotICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKGZhbHNlKTsKLQot
ICAgIFFXZWJGcmFtZSAqbWFpbkZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKLQotICAgIGlm
IChpc1N0YW5kQWxvbmVNb2RlKCkpIHsKLSAgICAgICAgUVN0cmluZyBtYXJrdXAgPSBtYWluRnJh
bWUtPnRvSHRtbCgpOwotICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIlNvdXJjZTpcblxuJXNcbiIs
IG1hcmt1cC50b1V0ZjgoKS5jb25zdERhdGEoKSk7Ci0gICAgfQotCi0gICAgUVN0cmluZyBtaW1l
VHlwZSA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNwb25zZU1pbWVUeXBlKG1haW5GcmFt
ZS0+aGFuZGxlKCkpOwotICAgIGlmIChtaW1lVHlwZSA9PSAidGV4dC9wbGFpbiIpCi0gICAgICAg
IG1fanNjQ29udHJvbGxlci0+c2V0RHVtcEFzVGV4dCh0cnVlKTsKLQotICAgIC8vIER1bXAgcmVu
ZGVyIHRleHQuLi4KLSAgICBRU3RyaW5nIHJlc3VsdFN0cmluZzsKLSAgICBRU3RyaW5nIHJlc3Vs
dENvbnRlbnRUeXBlID0gInRleHQvcGxhaW4iOwotICAgIFFCeXRlQXJyYXkgcmVzdWx0RGF0YTsK
LSAgICBpZiAobV9jb250cm9sbGVyLT5zaG91bGREdW1wQXNBdWRpbygpKSB7Ci0gICAgICAgIHJl
c3VsdENvbnRlbnRUeXBlID0gImF1ZGlvL3dhdiI7Ci0gICAgICAgIHJlc3VsdERhdGEgPSBtX2Nv
bnRyb2xsZXItPmF1ZGlvRGF0YSgpOwotICAgIH0gZWxzZSBpZiAobV9qc2NDb250cm9sbGVyLT5k
dW1wQXNUZXh0KCkpCi0gICAgICAgIHJlc3VsdFN0cmluZyA9IGR1bXBGcmFtZXNBc1RleHQobWFp
bkZyYW1lKTsKLSAgICBlbHNlIHsKLSAgICAgICAgcmVzdWx0U3RyaW5nID0gRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmZyYW1lUmVuZGVyVHJlZUR1bXAobWFpbkZyYW1lLT5oYW5kbGUoKSk7Ci0g
ICAgICAgIHJlc3VsdFN0cmluZyArPSBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihtYWluRnJhbWUp
OwotICAgIH0KLSAgICBpZiAoIXJlc3VsdFN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZnBy
aW50ZihzdGRvdXQsICJDb250ZW50LVR5cGU6ICVzXG4iLCByZXN1bHRDb250ZW50VHlwZS50b1V0
ZjgoKS5jb25zdERhdGEoKSk7Ci0gICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJXMiLCByZXN1bHRT
dHJpbmcudG9VdGY4KCkuY29uc3REYXRhKCkpOwotCi0gICAgICAgIGlmIChtX2pzY0NvbnRyb2xs
ZXItPmR1bXBCYWNrRm9yd2FyZExpc3QoKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRvdXQs
ICIlcyIsIGR1bXBCYWNrRm9yd2FyZExpc3Qod2ViUGFnZSgpKS50b1V0ZjgoKS5jb25zdERhdGEo
KSk7Ci0gICAgICAgICAgICBmb3JlYWNoIChRT2JqZWN0KiB3aWRnZXQsIHdpbmRvd3MpIHsKLSAg
ICAgICAgICAgICAgICBRV2ViUGFnZSogcGFnZSA9IHFvYmplY3RfY2FzdDxRV2ViUGFnZSo+KHdp
ZGdldC0+ZmluZENoaWxkPFFXZWJQYWdlKj4oKSk7Ci0gICAgICAgICAgICAgICAgZnByaW50Zihz
dGRvdXQsICIlcyIsIGR1bXBCYWNrRm9yd2FyZExpc3QocGFnZSkudG9VdGY4KCkuY29uc3REYXRh
KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICghcmVzdWx0RGF0
YS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZnByaW50ZihzdGRvdXQsICJDb250ZW50LVR5cGU6ICVz
XG4iLCByZXN1bHRDb250ZW50VHlwZS50b1V0ZjgoKS5jb25zdERhdGEoKSk7Ci0gICAgICAgIGZw
cmludGYoc3Rkb3V0LCAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0XG4iKTsKLSAg
ICAgICAgZnByaW50ZihzdGRvdXQsICIlcyIsIHJlc3VsdERhdGEudG9CYXNlNjQoKS5jb25zdERh
dGEoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHByaW50ZigiRVJST1I6IG5pbCByZXN1bHQgZnJv
bSAlcyIsIG1ldGhvZE5hbWVTdHJpbmdGb3JGYWlsZWRUZXN0KG1fanNjQ29udHJvbGxlci5nZXQo
KSkpOwotCi0gICAgLy8gc2lnbmFsIGVuZCBvZiB0ZXh0IGJsb2NrCi0gICAgZnB1dHMoIiNFT0Zc
biIsIHN0ZG91dCk7Ci0gICAgZnB1dHMoIiNFT0ZcbiIsIHN0ZGVycik7Ci0KLSAgICBpZiAobV9k
dW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgJiYgbV9qc2NDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVs
UmVzdWx0cygpKSB7Ci0gICAgICAgIFFJbWFnZSBpbWFnZTsKLSAgICAgICAgaWYgKCFtX2pzY0Nv
bnRyb2xsZXItPmlzUHJpbnRpbmcoKSkgewotICAgICAgICAgICAgaW1hZ2UgPSBRSW1hZ2UobV9w
YWdlLT52aWV3cG9ydFNpemUoKSwgUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKLSAgICAgICAgICAg
IGltYWdlLmZpbGwoUXQ6OndoaXRlKTsKLSAgICAgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJmlt
YWdlKTsKLSAgICAgICAgICAgIG1haW5GcmFtZS0+cmVuZGVyKCZwYWludGVyKTsKLSAgICAgICAg
ICAgIHBhaW50ZXIuZW5kKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaW1hZ2UgPSBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGFpbnRQYWdlc1dpdGhCb3VuZGFyaWVzKG1haW5GcmFt
ZS0+aGFuZGxlKCkpOwotCi0gICAgICAgIGlmIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dHJh
Y2tSZXBhaW50UmVjdHMobWFpbkZyYW1lQWRhcHRlcigpKSkgewotICAgICAgICAgICAgUVZlY3Rv
cjxRUmVjdD4gcmVwYWludFJlY3RzOwotICAgICAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OmdldFRyYWNrZWRSZXBhaW50UmVjdHMobWFpbkZyYW1lQWRhcHRlcigpLCByZXBhaW50UmVj
dHMpOwotICAgICAgICAgICAgUUltYWdlIG1hc2soaW1hZ2Uuc2l6ZSgpLCBpbWFnZS5mb3JtYXQo
KSk7Ci0gICAgICAgICAgICBtYXNrLmZpbGwoUUNvbG9yKDAsIDAsIDAsIDAuNjYgKiAyNTUpKTsK
LQotICAgICAgICAgICAgUVBhaW50ZXIgbWFza1BhaW50ZXIoJm1hc2spOwotICAgICAgICAgICAg
bWFza1BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVf
U291cmNlKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwYWludFJlY3RzLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgICAgIG1hc2tQYWludGVyLmZpbGxSZWN0KHJlcGFpbnRS
ZWN0c1tpXSwgUXQ6OnRyYW5zcGFyZW50KTsKLQotICAgICAgICAgICAgUVBhaW50ZXIgcGFpbnRl
cigmaW1hZ2UpOwotICAgICAgICAgICAgcGFpbnRlci5kcmF3SW1hZ2UoaW1hZ2UucmVjdCgpLCBt
YXNrKTsKLQotICAgICAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFRyYWNrUmVw
YWludFJlY3RzKG1haW5GcmFtZUFkYXB0ZXIoKSwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgUUNyeXB0b2dyYXBoaWNIYXNoIGhhc2goUUNyeXB0b2dyYXBoaWNIYXNoOjpNZDUpOwotICAg
ICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBpbWFnZS5oZWlnaHQoKTsgKytyb3cpCi0gICAg
ICAgICAgICBoYXNoLmFkZERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW1hZ2Uu
c2NhbkxpbmUocm93KSksIGltYWdlLndpZHRoKCkgKiA0KTsKLSAgICAgICAgUVN0cmluZyBhY3R1
YWxIYXNoID0gaGFzaC5yZXN1bHQoKS50b0hleCgpOwotCi0gICAgICAgIGZwcmludGYoc3Rkb3V0
LCAiXG5BY3R1YWxIYXNoOiAlc1xuIiwgcVByaW50YWJsZShhY3R1YWxIYXNoKSk7Ci0KLSAgICAg
ICAgYm9vbCBkdW1wSW1hZ2UgPSB0cnVlOwotCi0gICAgICAgIGlmICghbV9leHBlY3RlZEhhc2gu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBRX0FTU0VSVChtX2V4cGVjdGVkSGFzaC5sZW5ndGgo
KSA9PSAzMik7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIlxuRXhwZWN0ZWRIYXNoOiAl
c1xuIiwgcVByaW50YWJsZShtX2V4cGVjdGVkSGFzaCkpOwotCi0gICAgICAgICAgICBpZiAobV9l
eHBlY3RlZEhhc2ggPT0gYWN0dWFsSGFzaCkKLSAgICAgICAgICAgICAgICBkdW1wSW1hZ2UgPSBm
YWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkdW1wSW1hZ2UpIHsKLSAgICAgICAgICAg
IGltYWdlLnNldFRleHQoImNoZWNrc3VtIiwgYWN0dWFsSGFzaCk7Ci0KLSAgICAgICAgICAgIFFC
dWZmZXIgYnVmZmVyOwotICAgICAgICAgICAgYnVmZmVyLm9wZW4oUUJ1ZmZlcjo6V3JpdGVPbmx5
KTsKLSAgICAgICAgICAgIGltYWdlLnNhdmUoJmJ1ZmZlciwgIlBORyIpOwotICAgICAgICAgICAg
YnVmZmVyLmNsb3NlKCk7Ci0gICAgICAgICAgICBjb25zdCBRQnl0ZUFycmF5ICZkYXRhID0gYnVm
ZmVyLmRhdGEoKTsKLQotICAgICAgICAgICAgcHJpbnRmKCJDb250ZW50LVR5cGU6ICVzXG4iLCAi
aW1hZ2UvcG5nIik7Ci0gICAgICAgICAgICBwcmludGYoIkNvbnRlbnQtTGVuZ3RoOiAlbHVcbiIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGRhdGEubGVuZ3RoKCkpKTsKLQotICAgICAgICAg
ICAgY29uc3QgcXVpbnQzMiBieXRlc1RvV3JpdGVJbk9uZUNodW5rID0gMSA8PCAxNTsKLSAgICAg
ICAgICAgIHF1aW50MzIgZGF0YVJlbWFpbmluZ1RvV3JpdGUgPSBkYXRhLmxlbmd0aCgpOwotICAg
ICAgICAgICAgY29uc3QgY2hhciAqcHRyID0gZGF0YS5kYXRhKCk7Ci0gICAgICAgICAgICB3aGls
ZSAoZGF0YVJlbWFpbmluZ1RvV3JpdGUpIHsKLSAgICAgICAgICAgICAgICBxdWludDMyIGJ5dGVz
VG9Xcml0ZUluVGhpc0NodW5rID0gcU1pbihkYXRhUmVtYWluaW5nVG9Xcml0ZSwgYnl0ZXNUb1dy
aXRlSW5PbmVDaHVuayk7Ci0gICAgICAgICAgICAgICAgcXVpbnQzMiBieXRlc1dyaXR0ZW4gPSBm
d3JpdGUocHRyLCAxLCBieXRlc1RvV3JpdGVJblRoaXNDaHVuaywgc3Rkb3V0KTsKLSAgICAgICAg
ICAgICAgICBpZiAoYnl0ZXNXcml0dGVuICE9IGJ5dGVzVG9Xcml0ZUluVGhpc0NodW5rKQotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkYXRhUmVtYWluaW5nVG9X
cml0ZSAtPSBieXRlc1dyaXR0ZW47Ci0gICAgICAgICAgICAgICAgcHRyICs9IGJ5dGVzV3JpdHRl
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZmbHVzaChzdGRvdXQpOwot
ICAgIH0KLQotICAgIHB1dHMoIiNFT0YiKTsgICAvLyB0ZXJtaW5hdGUgdGhlIChwb3NzaWJseSBl
bXB0eSkgcGl4ZWxzIGJsb2NrCi0KLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICBmZmx1c2goc3Rk
ZXJyKTsKLQotICAgICBlbWl0IHJlYWR5KCk7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWU6OnRp
dGxlQ2hhbmdlZChjb25zdCBRU3RyaW5nICZzKQotewotICAgIGlmIChtX2pzY0NvbnRyb2xsZXIt
PmR1bXBUaXRsZUNoYW5nZXMoKSkKLSAgICAgICAgcHJpbnRmKCJUSVRMRSBDSEFOR0VEOiAnJXMn
XG4iLCBzLnRvVXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWU6OmNvbm5l
Y3RGcmFtZShRV2ViRnJhbWUgKmZyYW1lKQotewotICAgIGNvbm5lY3QoZnJhbWUsIFNJR05BTChq
YXZhU2NyaXB0V2luZG93T2JqZWN0Q2xlYXJlZCgpKSwgdGhpcywgU0xPVChpbml0SlNPYmplY3Rz
KCkpKTsKLSAgICBjb25uZWN0KGZyYW1lLCBTSUdOQUwocHJvdmlzaW9uYWxMb2FkKCkpLAotICAg
ICAgICAgICAgdGVzdFJ1bm5lcigpLCBTTE9UKHByb3Zpc2lvbmFsTG9hZCgpKSk7Ci19Ci0KLXZv
aWQgRHVtcFJlbmRlclRyZWU6OmR1bXBEYXRhYmFzZVF1b3RhKFFXZWJGcmFtZSogZnJhbWUsIGNv
bnN0IFFTdHJpbmcmIGRiTmFtZSkKLXsKLSAgICBpZiAoIW1fanNjQ29udHJvbGxlci0+ZHVtcERh
dGFiYXNlQ2FsbGJhY2tzKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBRV2ViU2VjdXJpdHlPcmln
aW4gb3JpZ2luID0gZnJhbWUtPnNlY3VyaXR5T3JpZ2luKCk7Ci0gICAgcHJpbnRmKCJVSSBERUxF
R0FURSBEQVRBQkFTRSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlP
cmlnaW46eyVzLCAlcywgJWl9IGRhdGFiYXNlOiVzXG4iLAotICAgICAgICAgICBvcmlnaW4uc2No
ZW1lKCkudG9VdGY4KCkuZGF0YSgpLAotICAgICAgICAgICBvcmlnaW4uaG9zdCgpLnRvVXRmOCgp
LmRhdGEoKSwKLSAgICAgICAgICAgb3JpZ2luLnBvcnQoKSwKLSAgICAgICAgICAgZGJOYW1lLnRv
VXRmOCgpLmRhdGEoKSk7Ci0gICAgb3JpZ2luLnNldERhdGFiYXNlUXVvdGEoZGF0YWJhc2VEZWZh
dWx0UXVvdGEpOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpkdW1wQXBwbGljYXRpb25DYWNo
ZVF1b3RhKFFXZWJTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBxdWludDY0IGRlZmF1bHRPcmlnaW5R
dW90YSwgcXVpbnQ2NCB0b3RhbFNwYWNlTmVlZGVkKQotewotICAgIGlmIChtX2pzY0NvbnRyb2xs
ZXItPmR1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3MoKSkgewotICAgICAgICAv
LyBGb3IgZXhhbXBsZSwgbnVtYmVycyBmcm9tIDMwMDAwIC0gMzk5OTkgd2lsbCBvdXRwdXQgYXMg
MzAwMDAuCi0gICAgICAgIC8vIFJvdW5kaW5nIHVwIG9yIGRvd24gbm90IHJlYWxseSBtYXR0ZXIg
Zm9yIHRoZXNlIHRlc3RzLiBJdCdzCi0gICAgICAgIC8vIHN1ZmZpY2llbnQgdG8ganVzdCBnZXQg
YSByYW5nZSBvZiAxMDAwMCB0byBkZXRlcm1pbmUgaWYgd2Ugd2VyZQotICAgICAgICAvLyBhYm92
ZSBvciBiZWxvdyBhIHRocmVzaG9sZC4KLSAgICAgICAgcXVpbnQ2NCB0cnVuY2F0ZWRTcGFjZU5l
ZWRlZCA9ICh0b3RhbFNwYWNlTmVlZGVkIC8gMTAwMDApICogMTAwMDA7Ci0gICAgICAgIHByaW50
ZigiVUkgREVMRUdBVEUgQVBQTElDQVRJT04gQ0FDSEUgQ0FMTEJBQ0s6IGV4Y2VlZGVkQXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhRm9yU2VjdXJpdHlPcmlnaW46eyVzLCAlcywgJWl9IHRvdGFs
U3BhY2VOZWVkZWQ6fiVsbHVcbiIsCi0gICAgICAgICAgICAgICBvcmlnaW4tPnNjaGVtZSgpLnRv
VXRmOCgpLmRhdGEoKSwKLSAgICAgICAgICAgICAgIG9yaWdpbi0+aG9zdCgpLnRvVXRmOCgpLmRh
dGEoKSwKLSAgICAgICAgICAgICAgIG9yaWdpbi0+cG9ydCgpLAotICAgICAgICAgICAgICAgdHJ1
bmNhdGVkU3BhY2VOZWVkZWQKLSAgICAgICAgICAgICAgICk7Ci0gICAgfQotCi0gICAgaWYgKG1f
anNjQ29udHJvbGxlci0+ZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBvcmlnaW4tPnNldEFwcGxpY2F0aW9uQ2FjaGVRdW90
YShkZWZhdWx0T3JpZ2luUXVvdGEpOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpzdGF0dXNC
YXJNZXNzYWdlKGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCFtX2pzY0NvbnRy
b2xsZXItPmR1bXBTdGF0dXNDYWxsYmFja3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJp
bnRmKCJVSSBERUxFR0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6JXNcbiIsIG1l
c3NhZ2UudG9VdGY4KCkuY29uc3REYXRhKCkpOwotfQotCi1RV2ViUGFnZSAqRHVtcFJlbmRlclRy
ZWU6OmNyZWF0ZVdpbmRvdygpCi17Ci0gICAgaWYgKCFtX2pzY0NvbnRyb2xsZXItPmNhbk9wZW5X
aW5kb3dzKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gQ3JlYXRlIGEgZHVtbXkgY29u
dGFpbmVyIG9iamVjdCB0byB0cmFjayB0aGUgcGFnZSBpbiBEUlQuCi0gICAgLy8gUU9iamVjdCBp
cyB1c2VkIGluc3RlYWQgb2YgUVdpZGdldCB0byBwcmV2ZW50IERSVCBmcm9tCi0gICAgLy8gc2hv
d2luZyB0aGUgbWFpbiB2aWV3IHdoZW4gZGVsZXRpbmcgdGhlIGNvbnRhaW5lci4KLQotICAgIFFP
YmplY3QqIGNvbnRhaW5lciA9IG5ldyBRT2JqZWN0KG1fbWFpblZpZXcpOwotICAgIC8vIGNyZWF0
ZSBhIFFXZWJQYWdlIHdlIHdhbnQgdG8gcmV0dXJuCi0gICAgUVdlYlBhZ2UqIHBhZ2UgPSBzdGF0
aWNfY2FzdDxRV2ViUGFnZSo+KG5ldyBXZWJQYWdlKGNvbnRhaW5lciwgdGhpcykpOwotICAgIC8v
IGdldHMgY2xlYW5lZCB1cCBpbiBjbG9zZVJlbWFpbmluZ1dpbmRvd3MoKQotICAgIHdpbmRvd3Mu
YXBwZW5kKGNvbnRhaW5lcik7Ci0KLSAgICAvLyBjb25uZWN0IHRoZSBuZWVkZWQgc2lnbmFscyB0
byB0aGUgcGFnZQotICAgIGNvbm5lY3QocGFnZSwgU0lHTkFMKGZyYW1lQ3JlYXRlZChRV2ViRnJh
bWUqKSksIHRoaXMsIFNMT1QoY29ubmVjdEZyYW1lKFFXZWJGcmFtZSopKSk7Ci0gICAgY29ubmVj
dEZyYW1lKHBhZ2UtPm1haW5GcmFtZSgpKTsKLSAgICBjb25uZWN0KHBhZ2UsIFNJR05BTChsb2Fk
RmluaXNoZWQoYm9vbCkpLCBtX2NvbnRyb2xsZXIsIFNMT1QobWF5YmVEdW1wKGJvb2wpKSk7Ci0g
ICAgY29ubmVjdChwYWdlLCBTSUdOQUwod2luZG93Q2xvc2VSZXF1ZXN0ZWQoKSksIHRoaXMsIFNM
T1Qod2luZG93Q2xvc2VSZXF1ZXN0ZWQoKSkpOwotCi0gICAgLy8gVXNlIGEgZnJhbWUgZ3JvdXAg
bmFtZSBmb3IgYWxsIHBhZ2VzIGNyZWF0ZWQgYnkgRHVtcFJlbmRlclRyZWUgdG8gYWxsb3cKLSAg
ICAvLyB0ZXN0aW5nIG9mIGNyb3NzLXBhZ2UgZnJhbWUgbG9va3VwLgotICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0Ojp3ZWJQYWdlU2V0R3JvdXBOYW1lKHBhZ2UtPmhhbmRsZSgpLCAib3JnLndl
YmtpdC5xdC5EdW1wUmVuZGVyVHJlZSIpOwotCi0gICAgcmV0dXJuIHBhZ2U7Ci19Ci0KLXZvaWQg
RHVtcFJlbmRlclRyZWU6OndpbmRvd0Nsb3NlUmVxdWVzdGVkKCkKLXsKLSAgICBRV2ViUGFnZSog
cGFnZSA9IHFvYmplY3RfY2FzdDxRV2ViUGFnZSo+KHNlbmRlcigpKTsKLSAgICBRT2JqZWN0KiBj
b250YWluZXIgPSBwYWdlLT5wYXJlbnQoKTsKLSAgICB3aW5kb3dzLnJlbW92ZUFsbChjb250YWlu
ZXIpOwotICAgIGNvbnRhaW5lci0+ZGVsZXRlTGF0ZXIoKTsKLX0KLQotaW50IER1bXBSZW5kZXJU
cmVlOjp3aW5kb3dDb3VudCgpIGNvbnN0Ci17Ci0vLyBpbmNsdWRlIHRoZSBtYWluIHZpZXcgaW4g
dGhlIGNvdW50Ci0gICAgcmV0dXJuIHdpbmRvd3MuY291bnQoKSArIDE7Ci19Ci0KLXZvaWQgRHVt
cFJlbmRlclRyZWU6Omdlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpIAotewotICAgIG1fcGFnZS0+
cGVybWlzc2lvblNldChRV2ViUGFnZTo6R2VvbG9jYXRpb24pOwotfQotCi12b2lkIER1bXBSZW5k
ZXJUcmVlOjpzd2l0Y2hGb2N1cyhib29sIGZvY3VzZWQpCi17Ci0gICAgUUZvY3VzRXZlbnQgZXZl
bnQoKGZvY3VzZWQpID8gUUV2ZW50OjpGb2N1c0luIDogUUV2ZW50OjpGb2N1c091dCwgUXQ6OkFj
dGl2ZVdpbmRvd0ZvY3VzUmVhc29uKTsKLSAgICBpZiAoIWlzR3JhcGhpY3NCYXNlZCgpKQotICAg
ICAgICBRQXBwbGljYXRpb246OnNlbmRFdmVudChtX21haW5WaWV3LCAmZXZlbnQpOwotICAgIGVs
c2UgewotICAgICAgICBpZiAoV2ViVmlld0dyYXBoaWNzQmFzZWQqIHZpZXcgPSBxb2JqZWN0X2Nh
c3Q8V2ViVmlld0dyYXBoaWNzQmFzZWQqPihtX21haW5WaWV3KSkKLSAgICAgICAgICAgIHZpZXct
PnNjZW5lKCktPnNlbmRFdmVudCh2aWV3LT5ncmFwaGljc1ZpZXcoKSwgJmV2ZW50KTsKLSAgICB9
Ci0KLX0KLQotUVdlYlBhZ2VBZGFwdGVyKiBEdW1wUmVuZGVyVHJlZTo6cGFnZUFkYXB0ZXIoKSBj
b25zdAotewotICAgIHJldHVybiBtX3BhZ2UtPmhhbmRsZSgpOwotfQotCi1RV2ViRnJhbWVBZGFw
dGVyKiBEdW1wUmVuZGVyVHJlZTo6bWFpbkZyYW1lQWRhcHRlcigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fcGFnZS0+bWFpbkZyYW1lKCktPmhhbmRsZSgpOwotfQotCi1RTGlzdDxXZWJQYWdlKj4g
RHVtcFJlbmRlclRyZWU6OmdldEFsbFBhZ2VzKCkgY29uc3QKLXsKLSAgICBRTGlzdDxXZWJQYWdl
Kj4gcGFnZXM7Ci0gICAgcGFnZXMuYXBwZW5kKG1fcGFnZSk7Ci0gICAgZm9yZWFjaCAoUU9iamVj
dCogd2lkZ2V0LCB3aW5kb3dzKSB7Ci0gICAgICAgIGlmIChXZWJQYWdlKiBwYWdlID0gd2lkZ2V0
LT5maW5kQ2hpbGQ8V2ViUGFnZSo+KCkpCi0gICAgICAgICAgICBwYWdlcy5hcHBlbmQocGFnZSk7
Ci0gICAgfQotICAgIHJldHVybiBwYWdlczsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6c2V0
VGltZW91dChpbnQgdGltZW91dCkKLXsKLSAgICBtX2NvbnRyb2xsZXItPnNldFRpbWVvdXQodGlt
ZW91dCk7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWU6OnNldFNob3VsZFRpbWVvdXQoYm9vbCBm
bGFnKQotewotICAgIG1fY29udHJvbGxlci0+c2V0U2hvdWxkVGltZW91dChmbGFnKTsKLX0KZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYmUxNTU5ZDMzMzMwYzIwZTIzMTZjM2FiNWNhOGIwZTViMmYwNGE5Mi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5j
LiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIER1bXBSZW5kZXJUcmVlUXRfaAot
I2RlZmluZSBEdW1wUmVuZGVyVHJlZVF0X2gKLQotI2luY2x1ZGUgPFFMaXN0PgotI2luY2x1ZGUg
PFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KLSNpbmNsdWRlIDxRT2JqZWN0PgotI2luY2x1ZGUgPFFU
ZXh0U3RyZWFtPgotI2luY2x1ZGUgPFFTb2NrZXROb3RpZmllcj4KLQotI2lmbmRlZiBRVF9OT19P
UEVOU1NMCi0jaW5jbHVkZSA8UVNzbEVycm9yPgotI2VuZGlmCi0KLSNpbmNsdWRlICJEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdC5oIgotI2luY2x1ZGUgIlRlc3RSdW5uZXIuaCIKLSNpbmNsdWRlIDxx
Z3JhcGhpY3N2aWV3Lmg+Ci0jaW5jbHVkZSA8cWdyYXBoaWNzd2Vidmlldy5oPgotI2luY2x1ZGUg
PHF3ZWJmcmFtZS5oPgotI2luY2x1ZGUgPHF3ZWJpbnNwZWN0b3IuaD4KLSNpbmNsdWRlIDxxd2Vi
cGFnZS5oPgotI2luY2x1ZGUgPHF3ZWJ2aWV3Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
Ci1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFVcmw7Ci1jbGFzcyBRRmlsZTsKLVFUX0VORF9O
QU1FU1BBQ0UKLQotY2xhc3MgUVdlYkZyYW1lQWRhcHRlcjsKLWNsYXNzIFFXZWJQYWdlQWRhcHRl
cjsKLQotY2xhc3MgVGVzdFJ1bm5lclF0OwotY2xhc3MgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ7
Ci1jbGFzcyBFdmVudFNlbmRlcjsKLWNsYXNzIFRleHRJbnB1dENvbnRyb2xsZXI7Ci1jbGFzcyBH
Q0NvbnRyb2xsZXI7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci1jbGFzcyBOZXR3b3JrQWNjZXNzTWFuYWdl
cjsKLQotY2xhc3MgRHVtcFJlbmRlclRyZWUgOiBwdWJsaWMgUU9iamVjdCB7Ci1RX09CSkVDVAot
Ci1wdWJsaWM6Ci0gICAgRHVtcFJlbmRlclRyZWUoKTsKLSAgICB2aXJ0dWFsIH5EdW1wUmVuZGVy
VHJlZSgpOwotCi0gICAgc3RhdGljIER1bXBSZW5kZXJUcmVlKiBpbnN0YW5jZSgpOwotCi0gICAg
Ly8gSW5pdGlhbGl6ZSBpbiBzaW5nbGUtZmlsZSBtb2RlLgotICAgIHZvaWQgb3Blbihjb25zdCBR
VXJsJiB1cmwpOwotCi0gICAgdm9pZCBzZXRUZXh0T3V0cHV0RW5hYmxlZChib29sIGVuYWJsZSkg
eyBtX2VuYWJsZVRleHRPdXRwdXQgPSBlbmFibGU7IH0KLSAgICBib29sIGlzVGV4dE91dHB1dEVu
YWJsZWQoKSB7IHJldHVybiBtX2VuYWJsZVRleHRPdXRwdXQ7IH0KLQotICAgIHZvaWQgc2V0R3Jh
cGhpY3NCYXNlZChib29sIGZsYWcpIHsgbV9ncmFwaGljc0Jhc2VkID0gZmxhZzsgfQotICAgIGJv
b2wgaXNHcmFwaGljc0Jhc2VkKCkgeyByZXR1cm4gbV9ncmFwaGljc0Jhc2VkOyB9Ci0KLSAgICB2
b2lkIGNsb3NlUmVtYWluaW5nV2luZG93cygpOwotICAgIHZvaWQgcmVzZXRUb0NvbnNpc3RlbnRT
dGF0ZUJlZm9yZVRlc3RpbmcoY29uc3QgUVVybCYpOwotCi0gICAgVGVzdFJ1bm5lclF0ICp0ZXN0
UnVubmVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250cm9sbGVyOyB9Ci0gICAgVGVzdFJ1bm5lciAq
anNjVGVzdFJ1bm5lcigpIGNvbnN0IHsgcmV0dXJuIG1fanNjQ29udHJvbGxlci5nZXQoKTsgfQot
ICAgIEV2ZW50U2VuZGVyICpldmVudFNlbmRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRTZW5k
ZXI7IH0KLSAgICBUZXh0SW5wdXRDb250cm9sbGVyICp0ZXh0SW5wdXRDb250cm9sbGVyKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0SW5wdXRDb250cm9sbGVyOyB9Ci0gICAgUVN0cmluZyBwZXJzaXN0
ZW50U3RvcmFnZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BlcnNpc3RlbnRTdG9yYWdlUGF0aDsg
fQotICAgIE5ldHdvcmtBY2Nlc3NNYW5hZ2VyICpuZXR3b3JrQWNjZXNzTWFuYWdlcigpIGNvbnN0
IHsgcmV0dXJuIG1fbmV0d29ya0FjY2Vzc01hbmFnZXI7IH0KLQotICAgIFFXZWJQYWdlICpjcmVh
dGVXaW5kb3coKTsKLSAgICBpbnQgd2luZG93Q291bnQoKSBjb25zdDsKLQotICAgIHZvaWQgc3dp
dGNoRm9jdXMoYm9vbCBmb2N1c2VkKTsKLQotICAgIFdlYlBhZ2UgKndlYlBhZ2UoKSBjb25zdCB7
IHJldHVybiBtX3BhZ2U7IH0KLSAgICBRV2ViUGFnZUFkYXB0ZXIgKnBhZ2VBZGFwdGVyKCkgY29u
c3Q7Ci0gICAgUVdlYkZyYW1lQWRhcHRlciAqbWFpbkZyYW1lQWRhcHRlcigpIGNvbnN0OwotCi0g
ICAgUUxpc3Q8V2ViUGFnZSo+IGdldEFsbFBhZ2VzKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHByb2Nl
c3NBcmdzTGluZShjb25zdCBRU3RyaW5nTGlzdCYpOwotICAgIHZvaWQgc2V0UmVkaXJlY3RPdXRw
dXRGaWxlTmFtZShjb25zdCBRU3RyaW5nJiBmaWxlTmFtZSkgeyBtX3JlZGlyZWN0T3V0cHV0Rmls
ZU5hbWUgPSBmaWxlTmFtZTsgfQotICAgIHZvaWQgc2V0UmVkaXJlY3RFcnJvckZpbGVOYW1lKGNv
bnN0IFFTdHJpbmcmIGZpbGVOYW1lKSB7IG1fcmVkaXJlY3RFcnJvckZpbGVOYW1lID0gZmlsZU5h
bWU7IH0KLQotICAgIHZvaWQgc2V0VGltZW91dChpbnQpOwotICAgIHZvaWQgc2V0U2hvdWxkVGlt
ZW91dChib29sIGZsYWcpOwotICAgIHZvaWQgc2V0U2hvdWxkRHVtcFBpeGVsc0ZvckFsbFRlc3Rz
KCkgeyBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0cyA9IHRydWU7IH0KLQotcHVibGljIFFfU0xPVFM6
Ci0gICAgdm9pZCBpbml0SlNPYmplY3RzKCk7Ci0KLSAgICB2b2lkIHJlYWRMaW5lKCk7Ci0gICAg
dm9pZCBwcm9jZXNzTGluZShjb25zdCBRU3RyaW5nJik7Ci0KLSAgICB2b2lkIGR1bXAoKTsKLSAg
ICB2b2lkIHRpdGxlQ2hhbmdlZChjb25zdCBRU3RyaW5nICZzKTsKLSAgICB2b2lkIGNvbm5lY3RG
cmFtZShRV2ViRnJhbWUgKmZyYW1lKTsKLSAgICB2b2lkIGR1bXBEYXRhYmFzZVF1b3RhKFFXZWJG
cmFtZSogZnJhbWUsIGNvbnN0IFFTdHJpbmcmIGRiTmFtZSk7Ci0gICAgdm9pZCBkdW1wQXBwbGlj
YXRpb25DYWNoZVF1b3RhKFFXZWJTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBxdWludDY0IGRlZmF1
bHRPcmlnaW5RdW90YSwgcXVpbnQ2NCB0b3RhbFNwYWNlTmVlZGVkKTsKLSAgICB2b2lkIHN0YXR1
c0Jhck1lc3NhZ2UoY29uc3QgUVN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCB3aW5kb3dDbG9z
ZVJlcXVlc3RlZCgpOwotCi1RX1NJR05BTFM6Ci0gICAgdm9pZCBxdWl0KCk7Ci0gICAgdm9pZCBy
ZWFkeSgpOwotCi1wcml2YXRlIFFfU0xPVFM6Ci0gICAgdm9pZCBzaG93UGFnZSgpOwotICAgIHZv
aWQgaGlkZVBhZ2UoKTsKLSAgICB2b2lkIGRyeVJ1blByaW50KFFXZWJGcmFtZSopOwotICAgIHZv
aWQgbG9hZE5leHRUZXN0SW5TdGFuZEFsb25lTW9kZSgpOwotICAgIHZvaWQgZ2VvbG9jYXRpb25Q
ZXJtaXNzaW9uU2V0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzZXRTdGFuZEFsb25lTW9kZShi
b29sIGZsYWcpIHsgbV9zdGFuZEFsb25lTW9kZSA9IGZsYWc7IH0KLSAgICBib29sIGlzU3RhbmRB
bG9uZU1vZGUoKSB7IHJldHVybiBtX3N0YW5kQWxvbmVNb2RlOyB9Ci0KLSAgICBRU3RyaW5nIGR1
bXBGcmFtZXNBc1RleHQoUVdlYkZyYW1lKiBmcmFtZSk7Ci0gICAgUVN0cmluZyBkdW1wQmFja0Zv
cndhcmRMaXN0KFFXZWJQYWdlKiBwYWdlKTsKLSAgICBRU3RyaW5nIGR1bXBGcmFtZVNjcm9sbFBv
c2l0aW9uKFFXZWJGcmFtZSogZnJhbWUpOwotICAgIFRlc3RSdW5uZXJRdCAqbV9jb250cm9sbGVy
OwotICAgIFJlZlB0cjxUZXN0UnVubmVyPiBtX2pzY0NvbnRyb2xsZXI7Ci0KLSAgICBib29sIG1f
ZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0OwotICAgIGJvb2wgbV9kdW1wUGl4ZWxzRm9yQWxsVGVz
dHM7Ci0gICAgUVN0cmluZyBtX2V4cGVjdGVkSGFzaDsKLSAgICBRU3RyaW5nTGlzdCBtX3N0YW5k
QWxvbmVNb2RlVGVzdExpc3Q7Ci0KLSAgICBXZWJQYWdlICptX3BhZ2U7Ci0gICAgUVdpZGdldCog
bV9tYWluVmlldzsKLQotICAgIEV2ZW50U2VuZGVyICptX2V2ZW50U2VuZGVyOwotICAgIFRleHRJ
bnB1dENvbnRyb2xsZXIgKm1fdGV4dElucHV0Q29udHJvbGxlcjsKLSAgICBRU2NvcGVkUG9pbnRl
cjxHQ0NvbnRyb2xsZXI+IG1fZ2NDb250cm9sbGVyOwotICAgIE5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
KiBtX25ldHdvcmtBY2Nlc3NNYW5hZ2VyOwotCi0gICAgUUZpbGUgKm1fc3RkaW47Ci0KLSAgICBR
TGlzdDxRT2JqZWN0Kj4gd2luZG93czsKLSAgICBib29sIG1fZW5hYmxlVGV4dE91dHB1dDsKLSAg
ICBib29sIG1fc3RhbmRBbG9uZU1vZGU7Ci0gICAgYm9vbCBtX2dyYXBoaWNzQmFzZWQ7Ci0gICAg
UVN0cmluZyBtX3BlcnNpc3RlbnRTdG9yYWdlUGF0aDsKLSAgICBRU3RyaW5nIG1fcmVkaXJlY3RP
dXRwdXRGaWxlTmFtZTsKLSAgICBRU3RyaW5nIG1fcmVkaXJlY3RFcnJvckZpbGVOYW1lOwotfTsK
LQotY2xhc3MgTmV0d29ya0FjY2Vzc01hbmFnZXIgOiBwdWJsaWMgUU5ldHdvcmtBY2Nlc3NNYW5h
Z2VyIHsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAgIE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKFFP
YmplY3QqIHBhcmVudCk7Ci0KLXByaXZhdGUgUV9TTE9UUzoKLSNpZm5kZWYgUVRfTk9fT1BFTlNT
TAotICAgIHZvaWQgc3NsRXJyb3JzRW5jb3VudGVyZWQoUU5ldHdvcmtSZXBseSosIGNvbnN0IFFM
aXN0PFFTc2xFcnJvcj4mKTsKLSNlbmRpZgotfTsKLQotY2xhc3MgV2ViUGFnZSA6IHB1YmxpYyBR
V2ViUGFnZSB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBXZWJQYWdlKFFPYmplY3QqIHBh
cmVudCwgRHVtcFJlbmRlclRyZWUqKTsKLSAgICB2aXJ0dWFsIH5XZWJQYWdlKCk7Ci0gICAgUVdl
Ykluc3BlY3Rvciogd2ViSW5zcGVjdG9yKCk7Ci0gICAgdm9pZCBjbG9zZVdlYkluc3BlY3Rvcigp
OwotCi0gICAgUVdlYlBhZ2UgKmNyZWF0ZVdpbmRvdyhRV2ViUGFnZTo6V2ViV2luZG93VHlwZSk7
Ci0KLSAgICB2b2lkIGphdmFTY3JpcHRBbGVydChRV2ViRnJhbWUgKmZyYW1lLCBjb25zdCBRU3Ry
aW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIGphdmFTY3JpcHRDb25zb2xlTWVzc2FnZShjb25zdCBR
U3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgUVN0cmluZyYgc291cmNlSUQp
OwotICAgIGJvb2wgamF2YVNjcmlwdENvbmZpcm0oUVdlYkZyYW1lICpmcmFtZSwgY29uc3QgUVN0
cmluZyYgbXNnKTsKLSAgICBib29sIGphdmFTY3JpcHRQcm9tcHQoUVdlYkZyYW1lICpmcmFtZSwg
Y29uc3QgUVN0cmluZyYgbXNnLCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFFTdHJpbmcq
IHJlc3VsdCk7Ci0KLSAgICB2b2lkIHJlc2V0U2V0dGluZ3MoKTsKLQotICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0V4dGVuc2lvbihRV2ViUGFnZTo6RXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIGV4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uLCBjb25zdCBF
eHRlbnNpb25PcHRpb24gKm9wdGlvbiwgRXh0ZW5zaW9uUmV0dXJuICpvdXRwdXQpOwotCi0gICAg
UU9iamVjdCogY3JlYXRlUGx1Z2luKGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRVXJsJiwgY29uc3Qg
UVN0cmluZ0xpc3QmLCBjb25zdCBRU3RyaW5nTGlzdCYpOwotCi0gICAgdm9pZCBwZXJtaXNzaW9u
U2V0KFFXZWJQYWdlOjpGZWF0dXJlIGZlYXR1cmUpOwotCi0gICAgdmlydHVhbCBib29sIHNob3Vs
ZEludGVycnVwdEphdmFTY3JpcHQoKSB7IHJldHVybiBmYWxzZTsgfQotCi1wdWJsaWMgUV9TTE9U
UzoKLSAgICB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdl
OjpGZWF0dXJlIGZlYXR1cmUpOwotICAgIHZvaWQgY2FuY2VsUGVybWlzc2lvbihRV2ViRnJhbWUq
IGZyYW1lLCBRV2ViUGFnZTo6RmVhdHVyZSBmZWF0dXJlKTsKLQotcHJvdGVjdGVkOgotICAgIGJv
b2wgYWNjZXB0TmF2aWdhdGlvblJlcXVlc3QoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUU5ldHdv
cmtSZXF1ZXN0JiByZXF1ZXN0LCBOYXZpZ2F0aW9uVHlwZSB0eXBlKTsKLSAgICBib29sIGlzVGV4
dE91dHB1dEVuYWJsZWQoKSB7IHJldHVybiBtX2RydC0+aXNUZXh0T3V0cHV0RW5hYmxlZCgpOyB9
Ci0KLXByaXZhdGUgUV9TTE9UUzoKLSAgICB2b2lkIHNldFZpZXdHZW9tZXRyeShjb25zdCBRUmVj
dCYpOwotCi1wcml2YXRlOgotICAgIFFXZWJJbnNwZWN0b3IqIG1fd2ViSW5zcGVjdG9yOwotICAg
IFFMaXN0PFFXZWJGcmFtZSo+IG1fcGVuZGluZ0dlb2xvY2F0aW9uUmVxdWVzdHM7Ci0gICAgRHVt
cFJlbmRlclRyZWUgKm1fZHJ0OwotfTsKLQotY2xhc3MgV2ViVmlld0dyYXBoaWNzQmFzZWQgOiBw
dWJsaWMgUUdyYXBoaWNzVmlldyB7Ci0gICAgUV9PQkpFQ1QKLQotcHVibGljOgotICAgIFdlYlZp
ZXdHcmFwaGljc0Jhc2VkKFFXaWRnZXQqIHBhcmVudCk7Ci0gICAgUUdyYXBoaWNzV2ViVmlldyog
Z3JhcGhpY3NWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9pdGVtOyB9Ci0gICAgdm9pZCBzZXRQYWdl
KFFXZWJQYWdlKiBwYWdlKSB7IG1faXRlbS0+c2V0UGFnZShwYWdlKTsgfQotCi1wcml2YXRlOgot
ICAgIFFHcmFwaGljc1dlYlZpZXcqIG1faXRlbTsKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRXZlbnRTZW5kZXJRdC5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9xdC9FdmVudFNlbmRlclF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMzUyZjFkZTk4NjlkMDU0N2NhNWYyNzU5NjA0YWI2MTcyZDIwM2RlYS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9x
dC9FdmVudFNlbmRlclF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc2NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXZlbnRT
ZW5kZXJRdC5oIgotCi0jaW5jbHVkZSA8UUdlc3R1cmVFdmVudD4KLSNpbmNsdWRlIDxRR3JhcGhp
Y3NTY2VuZU1vdXNlRXZlbnQ+Ci0jaW5jbHVkZSA8UXRUZXN0L1F0VGVzdD4KLSNpbmNsdWRlIDxx
cGEvcXdpbmRvd3N5c3RlbWludGVyZmFjZS5oPgotCi0jZGVmaW5lIEtFWUNPREVfREVMICAgICAg
ICAgMTI3Ci0jZGVmaW5lIEtFWUNPREVfQkFDS1NQQUNFICAgOAotI2RlZmluZSBLRVlDT0RFX0xF
RlRBUlJPVyAgIDB4ZjcwMgotI2RlZmluZSBLRVlDT0RFX1JJR0hUQVJST1cgIDB4ZjcwMwotI2Rl
ZmluZSBLRVlDT0RFX1VQQVJST1cgICAgIDB4ZjcwMAotI2RlZmluZSBLRVlDT0RFX0RPV05BUlJP
VyAgIDB4ZjcwMQotCi0vLyBQb3J0cyBsaWtlIEd0ayBhbmQgV2luZG93cyBleHBvc2UgYSBkaWZm
ZXJlbnQgYXBwcm9hY2ggZm9yIHRoZWlyIHpvb21pbmcKLS8vIEFQSSBpZiBjb21wYXJlZCB0byBR
dDogdGhleSBoYXZlIHNwZWNpZmljIG1ldGhvZHMgZm9yIHpvb21pbmcgaW4gYW5kIG91dCwKLS8v
IGFzIHdlbGwgYXMgYSBzZXR0YWJsZSB6b29tIGZhY3Rvciwgd2hpbGUgUXQgaGFzIG9ubHkgYSAn
c2V0Wm9vbVZhbHVlJyBtZXRob2QuCi0vLyBIZW5jZSBRdCBEUlQgYWRvcHRzIGEgZml4ZWQgem9v
bS1mYWN0b3IgKDEuMikgZm9yIGNvbXBhdGliaWxpdHkuCi0jZGVmaW5lIFpPT01fU1RFUCAgICAg
ICAgICAgMS4yCi0KLSNkZWZpbmUgRFJUX01FU1NBR0VfRE9ORSAoUUV2ZW50OjpVc2VyICsgMSkK
LQotc3RydWN0IERSVEV2ZW50UXVldWUgewotICAgIFFFdmVudCogbV9ldmVudDsKLSAgICBpbnQg
bV9kZWxheTsKLX07Ci0KLXN0YXRpYyBEUlRFdmVudFF1ZXVlIGV2ZW50UXVldWVbMTAyNF07Ci1z
dGF0aWMgdW5zaWduZWQgZW5kT2ZRdWV1ZTsKLXN0YXRpYyB1bnNpZ25lZCBzdGFydE9mUXVldWU7
Ci0KLUV2ZW50U2VuZGVyOjpFdmVudFNlbmRlcihRV2ViUGFnZSogcGFyZW50KQotICAgIDogUU9i
amVjdChwYXJlbnQpCi0jaWZuZGVmIFFUX05PX0dFU1RVUkVTCi0gICAgLCBtX3RhcEdlc3R1cmUo
cGFyZW50KQotICAgICwgbV90YXBBbmRIb2xkR2VzdHVyZShwYXJlbnQpCi0jZW5kaWYKLXsKLSAg
ICBtX3BhZ2UgPSBwYXJlbnQ7Ci0gICAgbV9tb3VzZUJ1dHRvblByZXNzZWQgPSBmYWxzZTsKLSAg
ICBtX2RyYWcgPSBmYWxzZTsKLSAgICBtZW1zZXQoZXZlbnRRdWV1ZSwgMCwgc2l6ZW9mKGV2ZW50
UXVldWUpKTsKLSAgICBlbmRPZlF1ZXVlID0gMDsKLSAgICBzdGFydE9mUXVldWUgPSAwOwotICAg
IG1fZXZlbnRMb29wID0gMDsKLSAgICBtX2N1cnJlbnRCdXR0b24gPSAwOwotICAgIG1fY3VycmVu
dERyYWdBY3Rpb25zQWxsb3dlZCA9IDA7Ci0gICAgcmVzZXRDbGlja0NvdW50KCk7Ci0gICAgbV9w
YWdlLT52aWV3KCktPmluc3RhbGxFdmVudEZpbHRlcih0aGlzKTsKLSAgICAvLyBUaGlzIGlzIGEg
aGFjayB0aGF0IHdvcmtzIGJlY2F1c2Ugd2Ugbm9ybWFsbHkgc2Nyb2xsIDYwIHBpeGVscyAoMyoy
MCkgcGVyIHRpY2ssIGJ1dCBBcHBsZSBzY3JvbGxzIDEyMC4KLSAgICAvLyBCdXQgQXBwbGUgYWxz
byBoYXMgYSBidWcgd2hlcmUgdGhleSByZXBvcnQgbGluZXMgaW5zdGVhZCBvZiB0aWNrcyBpbiBQ
bGF0Zm9ybVdoZWVsRXZlbnQsIG1ha2luZyAyIGxpbmVzID0gNDAgcGl4ZWxzIG1hdGNoLgotICAg
IFFBcHBsaWNhdGlvbjo6c2V0V2hlZWxTY3JvbGxMaW5lcygyKTsKLX0KLQotc3RhdGljIFF0OjpL
ZXlib2FyZE1vZGlmaWVycyBnZXRNb2RpZmllcnMoY29uc3QgUVN0cmluZ0xpc3QmIG1vZGlmaWVy
cykKLXsKLSAgICBRdDo6S2V5Ym9hcmRNb2RpZmllcnMgbW9kaWZzID0gMDsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG1vZGlmaWVycy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBRU3Ry
aW5nJiBtID0gbW9kaWZpZXJzLmF0KGkpOwotICAgICAgICBpZiAobSA9PSAiY3RybEtleSIpCi0g
ICAgICAgICAgICBtb2RpZnMgfD0gUXQ6OkNvbnRyb2xNb2RpZmllcjsKLSAgICAgICAgZWxzZSBp
ZiAobSA9PSAic2hpZnRLZXkiKQotICAgICAgICAgICAgbW9kaWZzIHw9IFF0OjpTaGlmdE1vZGlm
aWVyOwotICAgICAgICBlbHNlIGlmIChtID09ICJhbHRLZXkiKQotICAgICAgICAgICAgbW9kaWZz
IHw9IFF0OjpBbHRNb2RpZmllcjsKLSAgICAgICAgZWxzZSBpZiAobSA9PSAibWV0YUtleSIpCi0g
ICAgICAgICAgICBtb2RpZnMgfD0gUXQ6Ok1ldGFNb2RpZmllcjsKLSAgICB9Ci0gICAgcmV0dXJu
IG1vZGlmczsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6bW91c2VEb3duKGludCBidXR0b24sIGNv
bnN0IFFTdHJpbmdMaXN0JiBtb2RpZmllcnMpCi17Ci0gICAgUXQ6OktleWJvYXJkTW9kaWZpZXJz
IG1vZGlmcyA9IGdldE1vZGlmaWVycyhtb2RpZmllcnMpOwotICAgIFF0OjpNb3VzZUJ1dHRvbiBt
b3VzZUJ1dHRvbjsKLSAgICBzd2l0Y2ggKGJ1dHRvbikgewotICAgIGNhc2UgMDoKLSAgICAgICAg
bW91c2VCdXR0b24gPSBRdDo6TGVmdEJ1dHRvbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAx
OgotICAgICAgICBtb3VzZUJ1dHRvbiA9IFF0OjpNaWRCdXR0b247Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgMjoKLSAgICAgICAgbW91c2VCdXR0b24gPSBRdDo6UmlnaHRCdXR0b247Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgMzoKLSAgICAgICAgLy8gZmFzdC9ldmVudHMvbW91c2UtY2xp
Y2stZXZlbnRzIGV4cGVjdHMgdGhlIDR0aCBidXR0b24gdG8gYmUgdHJlYXRlZCBhcyB0aGUgbWlk
ZGxlIGJ1dHRvbgotICAgICAgICBtb3VzZUJ1dHRvbiA9IFF0OjpNaWRCdXR0b247Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1vdXNlQnV0dG9uID0gUXQ6OkxlZnRCdXR0
b247Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8vIG9ubHkgY29uc2lkZXIgYSBjbGlj
ayB0byBjb3VudCwgYW4gZXZlbnQgb3JpZ2luYXRlZCBieSB0aGUKLSAgICAvLyBzYW1lIHByZXZp
b3VzIGJ1dHRvbiBhbmQgYXQgdGhlIHNhbWUgcG9zaXRpb24uCi0gICAgaWYgKG1fY3VycmVudEJ1
dHRvbiA9PSBidXR0b24KLSAgICAgICAgJiYgbV9tb3VzZVBvcyA9PSBtX2NsaWNrUG9zCi0gICAg
ICAgICYmIG1fY2xpY2tUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX2NsaWNrQ291bnQrKzsK
LSAgICBlbHNlCi0gICAgICAgIG1fY2xpY2tDb3VudCA9IDE7Ci0KLSAgICBtX2N1cnJlbnRCdXR0
b24gPSBidXR0b247Ci0gICAgbV9jbGlja1BvcyA9IG1fbW91c2VQb3M7Ci0gICAgbV9tb3VzZUJ1
dHRvbnMgfD0gbW91c2VCdXR0b247Ci0KLS8vICAgICBxRGVidWcoKSA8PCAiRXZlbnRTZW5kZXI6
Om1vdXNlRG93biIgPDwgZnJhbWU7Ci0gICAgUUV2ZW50KiBldmVudDsKLSAgICBpZiAoaXNHcmFw
aGljc0Jhc2VkKCkpIHsKLSAgICAgICAgZXZlbnQgPSBjcmVhdGVHcmFwaGljc1NjZW5lTW91c2VF
dmVudCgobV9jbGlja0NvdW50ID09IDIpID8KLSAgICAgICAgICAgICAgICAgICAgUUV2ZW50OjpH
cmFwaGljc1NjZW5lTW91c2VEb3VibGVDbGljayA6IFFFdmVudDo6R3JhcGhpY3NTY2VuZU1vdXNl
UHJlc3MsCi0gICAgICAgICAgICAgICAgICAgIG1fbW91c2VQb3MsIG1fbW91c2VQb3MsIG1vdXNl
QnV0dG9uLCBtX21vdXNlQnV0dG9ucywgbW9kaWZzKTsKLSAgICB9IGVsc2UgewotICAgICAgICBl
dmVudCA9IG5ldyBRTW91c2VFdmVudCgobV9jbGlja0NvdW50ID09IDIpID8gUUV2ZW50OjpNb3Vz
ZUJ1dHRvbkRibENsaWNrIDoKLSAgICAgICAgICAgICAgICAgICAgUUV2ZW50OjpNb3VzZUJ1dHRv
blByZXNzLCBtX21vdXNlUG9zLCBtX21vdXNlUG9zLAotICAgICAgICAgICAgICAgICAgICBtb3Vz
ZUJ1dHRvbiwgbV9tb3VzZUJ1dHRvbnMsIG1vZGlmcyk7Ci0gICAgfQotCi0gICAgc2VuZE9yUXVl
dWVFdmVudChldmVudCk7Ci0KLSAgICBtX2NsaWNrVGltZXIuc3RhcnQoUUFwcGxpY2F0aW9uOjpk
b3VibGVDbGlja0ludGVydmFsKCksIHRoaXMpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjptb3Vz
ZVVwKGludCBidXR0b24pCi17Ci0gICAgUXQ6Ok1vdXNlQnV0dG9uIG1vdXNlQnV0dG9uOwotICAg
IHN3aXRjaCAoYnV0dG9uKSB7Ci0gICAgY2FzZSAwOgotICAgICAgICBtb3VzZUJ1dHRvbiA9IFF0
OjpMZWZ0QnV0dG9uOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgICAgIG1vdXNl
QnV0dG9uID0gUXQ6Ok1pZEJ1dHRvbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAg
ICAgICBtb3VzZUJ1dHRvbiA9IFF0OjpSaWdodEJ1dHRvbjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSAzOgotICAgICAgICAvLyBmYXN0L2V2ZW50cy9tb3VzZS1jbGljay1ldmVudHMgZXhwZWN0
cyB0aGUgNHRoIGJ1dHRvbiB0byBiZSB0cmVhdGVkIGFzIHRoZSBtaWRkbGUgYnV0dG9uCi0gICAg
ICAgIG1vdXNlQnV0dG9uID0gUXQ6Ok1pZEJ1dHRvbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgbW91c2VCdXR0b24gPSBRdDo6TGVmdEJ1dHRvbjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgbV9tb3VzZUJ1dHRvbnMgJj0gfm1vdXNlQnV0dG9uOwotCi0vLyAg
ICAgcURlYnVnKCkgPDwgIkV2ZW50U2VuZGVyOjptb3VzZVVwIiA8PCBmcmFtZTsKLSAgICBRRXZl
bnQqIGV2ZW50OwotICAgIGlmIChpc0dyYXBoaWNzQmFzZWQoKSkgewotICAgICAgICBldmVudCA9
IGNyZWF0ZUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50KFFFdmVudDo6R3JhcGhpY3NTY2VuZU1vdXNl
UmVsZWFzZSwKLSAgICAgICAgICAgICAgICAgICAgbV9tb3VzZVBvcywgbV9tb3VzZVBvcywgbW91
c2VCdXR0b24sIG1fbW91c2VCdXR0b25zLCBRdDo6Tm9Nb2RpZmllcik7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgZXZlbnQgPSBuZXcgUU1vdXNlRXZlbnQoUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVh
c2UsCi0gICAgICAgICAgICAgICAgICAgIG1fbW91c2VQb3MsIG1fbW91c2VQb3MsIG1vdXNlQnV0
dG9uLCBtX21vdXNlQnV0dG9ucywgUXQ6Ok5vTW9kaWZpZXIpOwotICAgIH0KLQotICAgIHNlbmRP
clF1ZXVlRXZlbnQoZXZlbnQpOwotCi0gICAgaWYgKG1fY3VycmVudERyYWdEYXRhLnVybHMoKS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGV2ZW50ID0gbmV3IFFEcm9wRXZlbnQo
bV9tb3VzZVBvcywgbV9jdXJyZW50RHJhZ0FjdGlvbnNBbGxvd2VkLCAmbV9jdXJyZW50RHJhZ0Rh
dGEsIG1fbW91c2VCdXR0b25zLCBRdDo6Tm9Nb2RpZmllcik7Ci0gICAgc2VuZEV2ZW50KG1fcGFn
ZSwgZXZlbnQpOwotICAgIG1fY3VycmVudERyYWdEYXRhLmNsZWFyKCk7Ci19Ci0KLXZvaWQgRXZl
bnRTZW5kZXI6Om1vdXNlTW92ZVRvKGludCB4LCBpbnQgeSkKLXsKLS8vICAgICBxRGVidWcoKSA8
PCAiRXZlbnRTZW5kZXI6Om1vdXNlTW92ZVRvIiA8PCB4IDw8IHk7Ci0gICAgbV9tb3VzZVBvcyA9
IFFQb2ludCh4LCB5KTsKLQotICAgIFFFdmVudCogZXZlbnQ7Ci0gICAgaWYgKGlzR3JhcGhpY3NC
YXNlZCgpKSB7Ci0gICAgICAgIGV2ZW50ID0gY3JlYXRlR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQo
UUV2ZW50OjpHcmFwaGljc1NjZW5lTW91c2VNb3ZlLAotICAgICAgICAgICAgICAgICAgICBtX21v
dXNlUG9zLCBtX21vdXNlUG9zLCBRdDo6Tm9CdXR0b24sIG1fbW91c2VCdXR0b25zLCBRdDo6Tm9N
b2RpZmllcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZXZlbnQgPSBuZXcgUU1vdXNlRXZlbnQo
UUV2ZW50OjpNb3VzZU1vdmUsCi0gICAgICAgICAgICAgICAgICAgIG1fbW91c2VQb3MsIG1fbW91
c2VQb3MsIFF0OjpOb0J1dHRvbiwgbV9tb3VzZUJ1dHRvbnMsIFF0OjpOb01vZGlmaWVyKTsKLSAg
ICB9Ci0KLSAgICBzZW5kT3JRdWV1ZUV2ZW50KGV2ZW50KTsKLQotICAgIGlmIChtX2N1cnJlbnRE
cmFnRGF0YS51cmxzKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRdDo6TW91
c2VCdXR0b25zIG1vdXNlQnV0dG9ucyA9IG1fbW91c2VCdXR0b25zIHwgUXQ6OkxlZnRCdXR0b247
Ci0gICAgZXZlbnQgPSBuZXcgUURyYWdNb3ZlRXZlbnQobV9tb3VzZVBvcywgbV9jdXJyZW50RHJh
Z0FjdGlvbnNBbGxvd2VkLCAmbV9jdXJyZW50RHJhZ0RhdGEsIG1vdXNlQnV0dG9ucywgUXQ6Ok5v
TW9kaWZpZXIpOwotICAgIHNlbmRFdmVudChtX3BhZ2UsIGV2ZW50KTsKLX0KLQotLy8gU2ltdWxh
dGVzIGEgbW91c2UgZG93biBldmVudCBmb3IgZHJhZyB3aXRob3V0IHNlbmRpbmcgYW4gYWN0dWFs
IG1vdXNlIGRvd24gZXZlbnQuCi12b2lkIEV2ZW50U2VuZGVyOjpiZWdpbkRyYWdXaXRoRmlsZXMo
Y29uc3QgUVN0cmluZ0xpc3QmIGZpbGVzKQotewotICAgIG1fY3VycmVudERyYWdEYXRhLmNsZWFy
KCk7Ci0gICAgUUxpc3Q8UVVybD4gZmlsZVVybHM7Ci0gICAgUVVybCBiYXNlVXJsID0gbV9wYWdl
LT5tYWluRnJhbWUoKS0+YmFzZVVybCgpOwotICAgIGZvcmVhY2ggKGNvbnN0IFFTdHJpbmcmIGZp
bGUsIGZpbGVzKSB7Ci0gICAgICAgIFFVcmwgcmVzb2x2ZWRVcmwgPSBiYXNlVXJsLnJlc29sdmVk
KGZpbGUpOwotICAgICAgICBmaWxlVXJscy5hcHBlbmQocmVzb2x2ZWRVcmwpOwotICAgIH0KLQot
ICAgIG1fY3VycmVudERyYWdEYXRhLnNldFVybHMoZmlsZVVybHMpOwotICAgIG1fY3VycmVudERy
YWdBY3Rpb25zQWxsb3dlZCA9IFF0OjpDb3B5QWN0aW9uOwotICAgIFF0OjpNb3VzZUJ1dHRvbnMg
bW91c2VCdXR0b25zID0gbV9tb3VzZUJ1dHRvbnMgfCBRdDo6TGVmdEJ1dHRvbjsKLSAgICBRRHJh
Z0VudGVyRXZlbnQqIGV2ZW50ID0gbmV3IFFEcmFnRW50ZXJFdmVudChtX21vdXNlUG9zLCBtX2N1
cnJlbnREcmFnQWN0aW9uc0FsbG93ZWQsICZtX2N1cnJlbnREcmFnRGF0YSwgbW91c2VCdXR0b25z
LCBRdDo6Tm9Nb2RpZmllcik7Ci0gICAgc2VuZEV2ZW50KG1fcGFnZSwgZXZlbnQpOwotfQotCi0j
aWZuZGVmIFFUX05PX1dIRUVMRVZFTlQKLXZvaWQgRXZlbnRTZW5kZXI6Om1vdXNlU2Nyb2xsQnko
aW50IHRpY2tzWCwgaW50IHRpY2tzWSkKLXsKLSAgICBjb25zdCBpbnQgdGlja1N0ZXAgPSBRQXBw
bGljYXRpb246OndoZWVsU2Nyb2xsTGluZXMoKSAqIDIwOwotICAgIGNvbnRpbnVvdXNNb3VzZVNj
cm9sbEJ5KCh0aWNrc1ggKiB0aWNrU3RlcCksICh0aWNrc1kgKiB0aWNrU3RlcCkpOwotfQotCi12
b2lkIEV2ZW50U2VuZGVyOjpjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHkpCi17
Ci0gICAgLy8gY29udGludW91c01vdXNlU2Nyb2xsQnkoKSBtaW1pY3MgZGV2aWNlcyB0aGF0IHNl
bmQgZmluZS1ncmFpbmVkIHNjcm9sbCBldmVudHMgd2hlcmUgdGhlICdkZWx0YScgc3BlY2lmaWVk
IGlzIG5vdCB0aGUgdXN1YWwKLSAgICAvLyBtdWx0aXBsZSBvZiAxMjAuIFNlZSBodHRwOi8vZG9j
LnF0Lm5va2lhLmNvbS80LjYvcXdoZWVsZXZlbnQuaHRtbCNkZWx0YSBmb3IgYSBnb29kIGV4cGxh
bmF0aW9uIG9mIHRoaXMuCi0KLSAgICAvLyBBIHdoZWVsIGRlbHRhIG9mIDEyMCAoaW4gMS84IGRl
Z3JlZXMpIGNvcnJlc3BvbmRzIHRvIG9uZSB3aGVlbCB0aWNrLCBhbmQgd2Ugc2Nyb2xsIHRpY2tT
dGVwIHBpeGVscyBwZXIgd2hlZWwgdGljay4KLSAgICBjb25zdCBpbnQgdGlja1N0ZXAgPSBRQXBw
bGljYXRpb246OndoZWVsU2Nyb2xsTGluZXMoKSAqIDIwOwotICAgIGlmICh4KSB7Ci0gICAgICAg
IFFFdmVudCogZXZlbnQ7Ci0gICAgICAgIGlmIChpc0dyYXBoaWNzQmFzZWQoKSkgewotICAgICAg
ICAgICAgZXZlbnQgPSBjcmVhdGVHcmFwaGljc1NjZW5lV2hlZWxFdmVudChRRXZlbnQ6OkdyYXBo
aWNzU2NlbmVXaGVlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbW91c2VQb3MsIG1fbW91
c2VQb3MsICh4ICogMTIwKSAvIHRpY2tTdGVwLCBRdDo6Tm9Nb2RpZmllciwgUXQ6Okhvcml6b250
YWwpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGV2ZW50ID0gbmV3IFFXaGVlbEV2ZW50
KG1fbW91c2VQb3MsIG1fbW91c2VQb3MsICh4ICogMTIwKSAvIHRpY2tTdGVwLCBtX21vdXNlQnV0
dG9ucywgUXQ6Ok5vTW9kaWZpZXIsIFF0OjpIb3Jpem9udGFsKTsKLQotICAgICAgICBzZW5kT3JR
dWV1ZUV2ZW50KGV2ZW50KTsKLSAgICB9Ci0gICAgaWYgKHkpIHsKLSAgICAgICAgUUV2ZW50KiBl
dmVudDsKLSAgICAgICAgaWYgKGlzR3JhcGhpY3NCYXNlZCgpKSB7Ci0gICAgICAgICAgICBldmVu
dCA9IGNyZWF0ZUdyYXBoaWNzU2NlbmVXaGVlbEV2ZW50KFFFdmVudDo6R3JhcGhpY3NTY2VuZVdo
ZWVsLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9tb3VzZVBvcywgbV9tb3VzZVBvcywgKHkg
KiAxMjApIC8gdGlja1N0ZXAsIFF0OjpOb01vZGlmaWVyLCBRdDo6VmVydGljYWwpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGV2ZW50ID0gbmV3IFFXaGVlbEV2ZW50KG1fbW91c2VQb3Ms
IG1fbW91c2VQb3MsICh5ICogMTIwKSAvIHRpY2tTdGVwLCBtX21vdXNlQnV0dG9ucywgUXQ6Ok5v
TW9kaWZpZXIsIFF0OjpWZXJ0aWNhbCk7Ci0KLSAgICAgICAgc2VuZE9yUXVldWVFdmVudChldmVu
dCk7Ci0gICAgfQotfQotI2VuZGlmCi0KLXZvaWQgRXZlbnRTZW5kZXI6OmxlYXBGb3J3YXJkKGlu
dCBtcykKLXsKLSAgICBldmVudFF1ZXVlW2VuZE9mUXVldWVdLm1fZGVsYXkgPSBtczsKLSAgICAv
L3FEZWJ1ZygpIDw8ICJFdmVudFNlbmRlcjo6bGVhcEZvcndhcmQiIDw8IG1zOwotfQotCi12b2lk
IEV2ZW50U2VuZGVyOjprZXlEb3duKGNvbnN0IFFTdHJpbmcmIHN0cmluZywgY29uc3QgUVN0cmlu
Z0xpc3QmIG1vZGlmaWVycywgdW5zaWduZWQgaW50IGxvY2F0aW9uKQotewotICAgIFFTdHJpbmcg
cyA9IHN0cmluZzsKLSAgICBRdDo6S2V5Ym9hcmRNb2RpZmllcnMgbW9kaWZzID0gZ2V0TW9kaWZp
ZXJzKG1vZGlmaWVycyk7Ci0gICAgaWYgKGxvY2F0aW9uID09IDMpCi0gICAgICAgIG1vZGlmcyB8
PSBRdDo6S2V5cGFkTW9kaWZpZXI7Ci0gICAgaW50IGNvZGUgPSAwOwotICAgIGlmIChzdHJpbmcu
bGVuZ3RoKCkgPT0gMSkgewotICAgICAgICBjb2RlID0gc3RyaW5nLnVuaWNvZGUoKS0+dW5pY29k
ZSgpOwotICAgICAgICAvL3FEZWJ1ZygpIDw8ICI+Pj4+Pj4+Pj4ga2V5RG93biIgPDwgY29kZSA8
PCAoY2hhciljb2RlOwotICAgICAgICAvLyBtYXAgc3BlY2lhbCBrZXljb2RlcyB1c2VkIGJ5IHRo
ZSB0ZXN0cyB0byBzb21ldGhpbmcgdGhhdCB3b3JrcyBmb3IgUXQvWDExCi0gICAgICAgIGlmIChj
b2RlID09ICdccicpIHsKLSAgICAgICAgICAgIGNvZGUgPSBRdDo6S2V5X1JldHVybjsKLSAgICAg
ICAgfSBlbHNlIGlmIChjb2RlID09ICdcdCcpIHsKLSAgICAgICAgICAgIGNvZGUgPSBRdDo6S2V5
X1RhYjsKLSAgICAgICAgICAgIGlmIChtb2RpZnMgPT0gUXQ6OlNoaWZ0TW9kaWZpZXIpCi0gICAg
ICAgICAgICAgICAgY29kZSA9IFF0OjpLZXlfQmFja3RhYjsKLSAgICAgICAgICAgIHMgPSBRU3Ry
aW5nKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSBLRVlDT0RFX0RFTCB8fCBjb2RlID09
IEtFWUNPREVfQkFDS1NQQUNFKSB7Ci0gICAgICAgICAgICBjb2RlID0gUXQ6OktleV9CYWNrc3Bh
Y2U7Ci0gICAgICAgICAgICBpZiAobW9kaWZzID09IFF0OjpBbHRNb2RpZmllcikKLSAgICAgICAg
ICAgICAgICBtb2RpZnMgPSBRdDo6Q29udHJvbE1vZGlmaWVyOwotICAgICAgICAgICAgcyA9IFFT
dHJpbmcoKTsKLSAgICAgICAgfSBlbHNlIGlmIChjb2RlID09ICdvJyAmJiBtb2RpZnMgPT0gUXQ6
OkNvbnRyb2xNb2RpZmllcikgewotICAgICAgICAgICAgLy8gTWltaWMgdGhlIGVtYWNzIGN0cmwt
byBiaW5kaW5nIG9uIE1hYyBieSBpbnNlcnRpbmcgYSBwYXJhZ3JhcGgKLSAgICAgICAgICAgIC8v
IHNlcGFyYXRvciBhbmQgdGhlbiBwdXR0aW5nIHRoZSBjdXJzb3IgYmFjayB0byBpdHMgb3JpZ2lu
YWwKLSAgICAgICAgICAgIC8vIHBvc2l0aW9uLiBBbGxvd3MgdXMgdG8gcGFzcyBlbWFjcy1jdHJs
LW8uaHRtbAotICAgICAgICAgICAgcyA9IFFMYXRpbjFTdHJpbmcoIlxuIik7Ci0gICAgICAgICAg
ICBjb2RlID0gJ1xuJzsKLSAgICAgICAgICAgIG1vZGlmcyA9IDA7Ci0gICAgICAgICAgICBRS2V5
RXZlbnQgZXZlbnQoUUV2ZW50OjpLZXlQcmVzcywgY29kZSwgbW9kaWZzLCBzKTsKLSAgICAgICAg
ICAgIHNlbmRFdmVudChtX3BhZ2UsICZldmVudCk7Ci0gICAgICAgICAgICBRS2V5RXZlbnQgZXZl
bnQyKFFFdmVudDo6S2V5UmVsZWFzZSwgY29kZSwgbW9kaWZzLCBzKTsKLSAgICAgICAgICAgIHNl
bmRFdmVudChtX3BhZ2UsICZldmVudDIpOwotICAgICAgICAgICAgcyA9IFFTdHJpbmcoKTsKLSAg
ICAgICAgICAgIGNvZGUgPSBRdDo6S2V5X0xlZnQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9
PSAneScgJiYgbW9kaWZzID09IFF0OjpDb250cm9sTW9kaWZpZXIpIHsKLSAgICAgICAgICAgIHMg
PSBRTGF0aW4xU3RyaW5nKCJjIik7Ci0gICAgICAgICAgICBjb2RlID0gJ2MnOwotICAgICAgICB9
IGVsc2UgaWYgKGNvZGUgPT0gJ2snICYmIG1vZGlmcyA9PSBRdDo6Q29udHJvbE1vZGlmaWVyKSB7
Ci0gICAgICAgICAgICBzID0gUUxhdGluMVN0cmluZygieCIpOwotICAgICAgICAgICAgY29kZSA9
ICd4JzsKLSAgICAgICAgfSBlbHNlIGlmIChjb2RlID09ICdhJyAmJiBtb2RpZnMgPT0gUXQ6OkNv
bnRyb2xNb2RpZmllcikgewotICAgICAgICAgICAgcyA9IFFTdHJpbmcoKTsKLSAgICAgICAgICAg
IGNvZGUgPSBRdDo6S2V5X0hvbWU7Ci0gICAgICAgICAgICBtb2RpZnMgPSAwOwotICAgICAgICB9
IGVsc2UgaWYgKGNvZGUgPT0gS0VZQ09ERV9MRUZUQVJST1cpIHsKLSAgICAgICAgICAgIHMgPSBR
U3RyaW5nKCk7Ci0gICAgICAgICAgICBjb2RlID0gUXQ6OktleV9MZWZ0OwotICAgICAgICAgICAg
aWYgKG1vZGlmcyAmIFF0OjpNZXRhTW9kaWZpZXIpIHsKLSAgICAgICAgICAgICAgICBjb2RlID0g
UXQ6OktleV9Ib21lOwotICAgICAgICAgICAgICAgIG1vZGlmcyAmPSB+UXQ6Ok1ldGFNb2RpZmll
cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IEtFWUNPREVfUklH
SFRBUlJPVykgewotICAgICAgICAgICAgcyA9IFFTdHJpbmcoKTsKLSAgICAgICAgICAgIGNvZGUg
PSBRdDo6S2V5X1JpZ2h0OwotICAgICAgICAgICAgaWYgKG1vZGlmcyAmIFF0OjpNZXRhTW9kaWZp
ZXIpIHsKLSAgICAgICAgICAgICAgICBjb2RlID0gUXQ6OktleV9FbmQ7Ci0gICAgICAgICAgICAg
ICAgbW9kaWZzICY9IH5RdDo6TWV0YU1vZGlmaWVyOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKGNvZGUgPT0gS0VZQ09ERV9VUEFSUk9XKSB7Ci0gICAgICAgICAgICBzID0gUVN0
cmluZygpOwotICAgICAgICAgICAgY29kZSA9IFF0OjpLZXlfVXA7Ci0gICAgICAgICAgICBpZiAo
bW9kaWZzICYgUXQ6Ok1ldGFNb2RpZmllcikgewotICAgICAgICAgICAgICAgIGNvZGUgPSBRdDo6
S2V5X1BhZ2VVcDsKLSAgICAgICAgICAgICAgICBtb2RpZnMgJj0gflF0OjpNZXRhTW9kaWZpZXI7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSBLRVlDT0RFX0RPV05B
UlJPVykgewotICAgICAgICAgICAgcyA9IFFTdHJpbmcoKTsKLSAgICAgICAgICAgIGNvZGUgPSBR
dDo6S2V5X0Rvd247Ci0gICAgICAgICAgICBpZiAobW9kaWZzICYgUXQ6Ok1ldGFNb2RpZmllcikg
ewotICAgICAgICAgICAgICAgIGNvZGUgPSBRdDo6S2V5X1BhZ2VEb3duOwotICAgICAgICAgICAg
ICAgIG1vZGlmcyAmPSB+UXQ6Ok1ldGFNb2RpZmllcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmIChjb2RlID09ICdhJyAmJiBtb2RpZnMgPT0gUXQ6OkNvbnRyb2xNb2RpZmllcikg
ewotICAgICAgICAgICAgcyA9IFFTdHJpbmcoKTsKLSAgICAgICAgICAgIGNvZGUgPSBRdDo6S2V5
X0hvbWU7Ci0gICAgICAgICAgICBtb2RpZnMgPSAwOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGNvZGUgPSBzdHJpbmcudW5pY29kZSgpLT50b1VwcGVyKCkudW5pY29kZSgpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIC8vcURlYnVnKCkgPDwgIj4+Pj4+Pj4+PiBrZXlEb3duIiA8PCBzdHJp
bmc7Ci0KLSAgICAgICAgaWYgKHN0cmluZy5zdGFydHNXaXRoKFFMYXRpbjFDaGFyKCdGJykpICYm
IHN0cmluZy5jb3VudCgpIDw9IDMpIHsKLSAgICAgICAgICAgIHMgPSBzLm1pZCgxKTsKLSAgICAg
ICAgICAgIGludCBmdW5jdGlvbktleSA9IHMudG9JbnQoKTsKLSAgICAgICAgICAgIFFfQVNTRVJU
KGZ1bmN0aW9uS2V5ID49IDEgJiYgZnVuY3Rpb25LZXkgPD0gMzUpOwotICAgICAgICAgICAgY29k
ZSA9IFF0OjpLZXlfRjEgKyAoZnVuY3Rpb25LZXkgLSAxKTsKLSAgICAgICAgLy8gbWFwIHNwZWNp
YWwga2V5Y29kZSBzdHJpbmdzIHVzZWQgYnkgdGhlIHRlc3RzIHRvIHNvbWV0aGluZyB0aGF0IHdv
cmtzIGZvciBRdC9YMTEKLSAgICAgICAgfSBlbHNlIGlmIChzdHJpbmcgPT0gUUxhdGluMVN0cmlu
ZygibGVmdEFycm93IikpIHsKLSAgICAgICAgICAgIHMgPSBRU3RyaW5nKCk7Ci0gICAgICAgICAg
ICBjb2RlID0gUXQ6OktleV9MZWZ0OwotICAgICAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBRTGF0
aW4xU3RyaW5nKCJyaWdodEFycm93IikpIHsKLSAgICAgICAgICAgIHMgPSBRU3RyaW5nKCk7Ci0g
ICAgICAgICAgICBjb2RlID0gUXQ6OktleV9SaWdodDsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJp
bmcgPT0gUUxhdGluMVN0cmluZygidXBBcnJvdyIpKSB7Ci0gICAgICAgICAgICBzID0gUVN0cmlu
ZygpOwotICAgICAgICAgICAgY29kZSA9IFF0OjpLZXlfVXA7Ci0gICAgICAgIH0gZWxzZSBpZiAo
c3RyaW5nID09IFFMYXRpbjFTdHJpbmcoImRvd25BcnJvdyIpKSB7Ci0gICAgICAgICAgICBzID0g
UVN0cmluZygpOwotICAgICAgICAgICAgY29kZSA9IFF0OjpLZXlfRG93bjsKLSAgICAgICAgfSBl
bHNlIGlmIChzdHJpbmcgPT0gUUxhdGluMVN0cmluZygicGFnZVVwIikpIHsKLSAgICAgICAgICAg
IHMgPSBRU3RyaW5nKCk7Ci0gICAgICAgICAgICBjb2RlID0gUXQ6OktleV9QYWdlVXA7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoc3RyaW5nID09IFFMYXRpbjFTdHJpbmcoInBhZ2VEb3duIikpIHsKLSAg
ICAgICAgICAgIHMgPSBRU3RyaW5nKCk7Ci0gICAgICAgICAgICBjb2RlID0gUXQ6OktleV9QYWdl
RG93bjsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJpbmcgPT0gUUxhdGluMVN0cmluZygiaG9tZSIp
KSB7Ci0gICAgICAgICAgICBzID0gUVN0cmluZygpOwotICAgICAgICAgICAgY29kZSA9IFF0OjpL
ZXlfSG9tZTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJpbmcgPT0gUUxhdGluMVN0cmluZygiZW5k
IikpIHsKLSAgICAgICAgICAgIHMgPSBRU3RyaW5nKCk7Ci0gICAgICAgICAgICBjb2RlID0gUXQ6
OktleV9FbmQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyaW5nID09IFFMYXRpbjFTdHJpbmcoImlu
c2VydCIpKSB7Ci0gICAgICAgICAgICBzID0gUVN0cmluZygpOwotICAgICAgICAgICAgY29kZSA9
IFF0OjpLZXlfSW5zZXJ0OwotICAgICAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBRTGF0aW4xU3Ry
aW5nKCJkZWxldGUiKSkgewotICAgICAgICAgICAgcyA9IFFTdHJpbmcoKTsKLSAgICAgICAgICAg
IGNvZGUgPSBRdDo6S2V5X0RlbGV0ZTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJpbmcgPT0gUUxh
dGluMVN0cmluZygicHJpbnRTY3JlZW4iKSkgewotICAgICAgICAgICAgcyA9IFFTdHJpbmcoKTsK
LSAgICAgICAgICAgIGNvZGUgPSBRdDo6S2V5X1ByaW50OwotICAgICAgICB9IGVsc2UgaWYgKHN0
cmluZyA9PSBRTGF0aW4xU3RyaW5nKCJtZW51IikpIHsKLSAgICAgICAgICAgIHMgPSBRU3RyaW5n
KCk7Ci0gICAgICAgICAgICBjb2RlID0gUXQ6OktleV9NZW51OwotICAgICAgICB9Ci0gICAgfQot
ICAgIFFLZXlFdmVudCBldmVudChRRXZlbnQ6OktleVByZXNzLCBjb2RlLCBtb2RpZnMsIHMpOwot
ICAgIHNlbmRFdmVudChtX3BhZ2UsICZldmVudCk7Ci0gICAgUUtleUV2ZW50IGV2ZW50MihRRXZl
bnQ6OktleVJlbGVhc2UsIGNvZGUsIG1vZGlmcywgcyk7Ci0gICAgc2VuZEV2ZW50KG1fcGFnZSwg
JmV2ZW50Mik7Ci19Ci0KLVFTdHJpbmdMaXN0IEV2ZW50U2VuZGVyOjpjb250ZXh0Q2xpY2soKQot
ewotICAgIFFNb3VzZUV2ZW50IGV2ZW50KFFFdmVudDo6TW91c2VCdXR0b25QcmVzcywgbV9tb3Vz
ZVBvcywgUXQ6OlJpZ2h0QnV0dG9uLCBRdDo6UmlnaHRCdXR0b24sIFF0OjpOb01vZGlmaWVyKTsK
LSAgICBzZW5kRXZlbnQobV9wYWdlLCAmZXZlbnQpOwotICAgIFFNb3VzZUV2ZW50IGV2ZW50MihR
RXZlbnQ6Ok1vdXNlQnV0dG9uUmVsZWFzZSwgbV9tb3VzZVBvcywgUXQ6OlJpZ2h0QnV0dG9uLCBR
dDo6UmlnaHRCdXR0b24sIFF0OjpOb01vZGlmaWVyKTsKLSAgICBzZW5kRXZlbnQobV9wYWdlLCAm
ZXZlbnQyKTsKLQotICAgIGlmIChpc0dyYXBoaWNzQmFzZWQoKSkgewotICAgICAgICBRR3JhcGhp
Y3NTY2VuZUNvbnRleHRNZW51RXZlbnQgY3R4RXZlbnQoUUV2ZW50OjpHcmFwaGljc1NjZW5lQ29u
dGV4dE1lbnUpOwotICAgICAgICBjdHhFdmVudC5zZXRSZWFzb24oUUdyYXBoaWNzU2NlbmVDb250
ZXh0TWVudUV2ZW50OjpNb3VzZSk7Ci0gICAgICAgIGN0eEV2ZW50LnNldFBvcyhtX21vdXNlUG9z
KTsKLSAgICAgICAgV2ViVmlld0dyYXBoaWNzQmFzZWQqIHZpZXcgPSBxb2JqZWN0X2Nhc3Q8V2Vi
Vmlld0dyYXBoaWNzQmFzZWQqPihtX3BhZ2UtPnZpZXcoKSk7Ci0gICAgICAgIGlmICh2aWV3KQot
ICAgICAgICAgICAgc2VuZEV2ZW50KHZpZXctPmdyYXBoaWNzVmlldygpLCAmY3R4RXZlbnQpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFFDb250ZXh0TWVudUV2ZW50IGN0eEV2ZW50KFFDb250ZXh0
TWVudUV2ZW50OjpNb3VzZSwgbV9tb3VzZVBvcyk7Ci0gICAgICAgIHNlbmRFdmVudChtX3BhZ2Ut
PnZpZXcoKSwgJmN0eEV2ZW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0Ojpjb250ZXh0TWVudShtX3BhZ2UtPmhhbmRsZSgpKTsKLX0KLQotdm9pZCBFdmVudFNl
bmRlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNDbGljaygpCi17Ci0gICAgUU1vdXNlRXZlbnQqIGV2
ZW50ID0gbmV3IFFNb3VzZUV2ZW50KFFFdmVudDo6TW91c2VCdXR0b25QcmVzcywgbV9tb3VzZVBv
cywgUXQ6OkxlZnRCdXR0b24sIFF0OjpSaWdodEJ1dHRvbiwgUXQ6Ok5vTW9kaWZpZXIpOwotICAg
IHBvc3RFdmVudChtX3BhZ2UsIGV2ZW50KTsKLSAgICBRTW91c2VFdmVudCogZXZlbnQyID0gbmV3
IFFNb3VzZUV2ZW50KFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlLCBtX21vdXNlUG9zLCBRdDo6
TGVmdEJ1dHRvbiwgUXQ6OlJpZ2h0QnV0dG9uLCBRdDo6Tm9Nb2RpZmllcik7Ci0gICAgcG9zdEV2
ZW50KG1fcGFnZSwgZXZlbnQyKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6YWRkVG91Y2hQb2lu
dChpbnQgeCwgaW50IHkpCi17Ci0gICAgY29uc3QgaW50IGlkID0gbV90b3VjaFBvaW50cy5pc0Vt
cHR5KCkgPyAwIDogbV90b3VjaFBvaW50cy5sYXN0KCkuaWQoKSArIDE7Ci0gICAgY29uc3QgUVBv
aW50RiBwb3MoeCwgeSk7Ci0gICAgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQgcG9pbnQoaWQpOwot
ICAgIHBvaW50LnNldFBvcyhwb3MpOwotICAgIHBvaW50LnNldFN0YXJ0UG9zKHBvcyk7Ci0gICAg
cG9pbnQuc2V0U3RhdGUoUXQ6OlRvdWNoUG9pbnRQcmVzc2VkKTsKLSAgICBpZiAoIW1fdG91Y2hQ
b2ludFJhZGl1cy5pc051bGwoKSkKLSAgICAgICAgcG9pbnQuc2V0UmVjdChRUmVjdEYocG9zIC0g
bV90b3VjaFBvaW50UmFkaXVzLCBwb3MgKyBtX3RvdWNoUG9pbnRSYWRpdXMpKTsKLSAgICBtX3Rv
dWNoUG9pbnRzLmFwcGVuZChwb2ludCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OnVwZGF0ZVRv
dWNoUG9pbnQoaW50IGluZGV4LCBpbnQgeCwgaW50IHkpCi17Ci0gICAgaWYgKGluZGV4IDwgMCB8
fCBpbmRleCA+PSBtX3RvdWNoUG9pbnRzLmNvdW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGNvbnN0IFFQb2ludEYgcG9zKHgsIHkpOwotICAgIFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50ICZw
b2ludCA9IG1fdG91Y2hQb2ludHNbaW5kZXhdOwotICAgIHBvaW50LnNldFBvcyhwb3MpOwotICAg
IHBvaW50LnNldFN0YXRlKFF0OjpUb3VjaFBvaW50TW92ZWQpOwotICAgIGlmICghbV90b3VjaFBv
aW50UmFkaXVzLmlzTnVsbCgpKQotICAgICAgICBwb2ludC5zZXRSZWN0KFFSZWN0Rihwb3MgLSBt
X3RvdWNoUG9pbnRSYWRpdXMsIHBvcyArIG1fdG91Y2hQb2ludFJhZGl1cykpOwotfQotCi12b2lk
IEV2ZW50U2VuZGVyOjpzZXRUb3VjaE1vZGlmaWVyKGNvbnN0IFFTdHJpbmcgJm1vZGlmaWVyLCBi
b29sIGVuYWJsZSkKLXsKLSAgICBRdDo6S2V5Ym9hcmRNb2RpZmllciBtb2QgPSBRdDo6Tm9Nb2Rp
ZmllcjsKLSAgICBpZiAoIW1vZGlmaWVyLmNvbXBhcmUoUUxhdGluMVN0cmluZygic2hpZnQiKSwg
UXQ6OkNhc2VJbnNlbnNpdGl2ZSkpCi0gICAgICAgIG1vZCA9IFF0OjpTaGlmdE1vZGlmaWVyOwot
ICAgIGVsc2UgaWYgKCFtb2RpZmllci5jb21wYXJlKFFMYXRpbjFTdHJpbmcoImFsdCIpLCBRdDo6
Q2FzZUluc2Vuc2l0aXZlKSkKLSAgICAgICAgbW9kID0gUXQ6OkFsdE1vZGlmaWVyOwotICAgIGVs
c2UgaWYgKCFtb2RpZmllci5jb21wYXJlKFFMYXRpbjFTdHJpbmcoIm1ldGEiKSwgUXQ6OkNhc2VJ
bnNlbnNpdGl2ZSkpCi0gICAgICAgIG1vZCA9IFF0OjpNZXRhTW9kaWZpZXI7Ci0gICAgZWxzZSBp
ZiAoIW1vZGlmaWVyLmNvbXBhcmUoUUxhdGluMVN0cmluZygiY3RybCIpLCBRdDo6Q2FzZUluc2Vu
c2l0aXZlKSkKLSAgICAgICAgbW9kID0gUXQ6OkNvbnRyb2xNb2RpZmllcjsKLQotICAgIGlmIChl
bmFibGUpCi0gICAgICAgIG1fdG91Y2hNb2RpZmllcnMgfD0gbW9kOwotICAgIGVsc2UKLSAgICAg
ICAgbV90b3VjaE1vZGlmaWVycyAmPSB+bW9kOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpzZXRU
b3VjaFBvaW50UmFkaXVzKGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKLXsKLSAgICBtX3RvdWNo
UG9pbnRSYWRpdXMgPSBRUG9pbnQocmFkaXVzWCwgcmFkaXVzWSk7Ci19Ci0KLXZvaWQgRXZlbnRT
ZW5kZXI6OnRvdWNoU3RhcnQoKQotewotICAgIGlmICghbV90b3VjaEFjdGl2ZSkgewotICAgICAg
ICBzZW5kVG91Y2hFdmVudChRRXZlbnQ6OlRvdWNoQmVnaW4pOwotICAgICAgICBtX3RvdWNoQWN0
aXZlID0gdHJ1ZTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2VuZFRvdWNoRXZlbnQoUUV2ZW50OjpU
b3VjaFVwZGF0ZSk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OnRvdWNoTW92ZSgpCi17Ci0gICAg
c2VuZFRvdWNoRXZlbnQoUUV2ZW50OjpUb3VjaFVwZGF0ZSk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5k
ZXI6OnRvdWNoRW5kKCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fdG91Y2hQb2ludHMu
Y291bnQoKTsgKytpKQotICAgICAgICBpZiAobV90b3VjaFBvaW50c1tpXS5zdGF0ZSgpICE9IFF0
OjpUb3VjaFBvaW50UmVsZWFzZWQpIHsKLSAgICAgICAgICAgIHNlbmRUb3VjaEV2ZW50KFFFdmVu
dDo6VG91Y2hVcGRhdGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgc2Vu
ZFRvdWNoRXZlbnQoUUV2ZW50OjpUb3VjaEVuZCk7Ci0gICAgbV90b3VjaEFjdGl2ZSA9IGZhbHNl
OwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjp0b3VjaENhbmNlbCgpCi17Ci0gICAgc2VuZFRvdWNo
RXZlbnQoUUV2ZW50OjpUb3VjaENhbmNlbCk7Ci0gICAgbV90b3VjaEFjdGl2ZSA9IGZhbHNlOwot
fQotCi12b2lkIEV2ZW50U2VuZGVyOjpjbGVhclRvdWNoUG9pbnRzKCkKLXsKLSAgICBtX3RvdWNo
UG9pbnRzLmNsZWFyKCk7Ci0gICAgbV90b3VjaE1vZGlmaWVycyA9IFF0OjpLZXlib2FyZE1vZGlm
aWVycygpOwotICAgIG1fdG91Y2hBY3RpdmUgPSBmYWxzZTsKLSAgICBtX3RvdWNoUG9pbnRSYWRp
dXMgPSBRUG9pbnQoKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6cmVsZWFzZVRvdWNoUG9pbnQo
aW50IGluZGV4KQotewotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbV90b3VjaFBvaW50
cy5jb3VudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3RvdWNoUG9pbnRzW2luZGV4XS5z
ZXRTdGF0ZShRdDo6VG91Y2hQb2ludFJlbGVhc2VkKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6
Y2FuY2VsVG91Y2hQb2ludChpbnQgaW5kZXgpCi17Ci0gICAgLy8gRklYTUU6IE5vIGNhbmNlbGxh
dGlvbiBzdGF0ZSBpbiBRdCA1LCBtYXBwZWQgdG8gcmVsZWFzZSBpbnN0ZWFkLgotICAgIC8vIFBs
YXRmb3JtVG91Y2hFdmVudCBjb252ZXJzaW9uIGxhdGVyIHdpbGwgbWFwIGFsbCB0b3VjaCBwb2lu
dHMgdG8KLSAgICAvLyBjYW5jZWxsZWQuCi0gICAgcmVsZWFzZVRvdWNoUG9pbnQoaW5kZXgpOwot
fQotCi12b2lkIEV2ZW50U2VuZGVyOjpzZW5kVG91Y2hFdmVudChRRXZlbnQ6OlR5cGUgdHlwZSkK
LXsKLSAgICBzdGF0aWMgUVRvdWNoRGV2aWNlKiBkZXZpY2UgPSAwOwotICAgIGlmICghZGV2aWNl
KSB7Ci0gICAgICAgIGRldmljZSA9IG5ldyBRVG91Y2hEZXZpY2U7Ci0gICAgICAgIGRldmljZS0+
c2V0VHlwZShRVG91Y2hEZXZpY2U6OlRvdWNoU2NyZWVuKTsKLSAgICAgICAgUVdpbmRvd1N5c3Rl
bUludGVyZmFjZTo6cmVnaXN0ZXJUb3VjaERldmljZShkZXZpY2UpOwotICAgIH0KLQotICAgIFFU
b3VjaEV2ZW50IGV2ZW50KHR5cGUsIGRldmljZSwgbV90b3VjaE1vZGlmaWVycyk7Ci0gICAgZXZl
bnQuc2V0VG91Y2hQb2ludHMobV90b3VjaFBvaW50cyk7Ci0gICAgc2VuZEV2ZW50KG1fcGFnZSwg
JmV2ZW50KTsKLSAgICBRTGlzdDxRVG91Y2hFdmVudDo6VG91Y2hQb2ludD46Okl0ZXJhdG9yIGl0
ID0gbV90b3VjaFBvaW50cy5iZWdpbigpOwotICAgIHdoaWxlIChpdCAhPSBtX3RvdWNoUG9pbnRz
LmVuZCgpKSB7Ci0gICAgICAgIGlmIChpdC0+c3RhdGUoKSA9PSBRdDo6VG91Y2hQb2ludFJlbGVh
c2VkKQotICAgICAgICAgICAgaXQgPSBtX3RvdWNoUG9pbnRzLmVyYXNlKGl0KTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBpdC0+c2V0U3RhdGUoUXQ6OlRvdWNoUG9pbnRTdGF0aW9uYXJ5
KTsKLSAgICAgICAgICAgICsraXQ7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLSNpZm5kZWYgUVRf
Tk9fR0VTVFVSRVMKLXZvaWQgRXZlbnRTZW5kZXI6Omdlc3R1cmVUYXAoaW50IHgsIGludCB5KQot
ewotICAgIG1fdGFwR2VzdHVyZS5zZXRQb3NpdGlvbihRUG9pbnRGKHgsIHkpKTsKLSAgICBtX2dl
c3R1cmVzLmNsZWFyKCk7Ci0gICAgbV9nZXN0dXJlcy5hcHBlbmQoJm1fdGFwR2VzdHVyZSk7Ci0g
ICAgUUdlc3R1cmVFdmVudCBldmVudChtX2dlc3R1cmVzKTsKLSAgICBzZW5kRXZlbnQobV9wYWdl
LCAmZXZlbnQpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpnZXN0dXJlTG9uZ1ByZXNzKGludCB4
LCBpbnQgeSkKLXsKLSAgICBtX3RhcEFuZEhvbGRHZXN0dXJlLnNldFBvc2l0aW9uKFFQb2ludEYo
eCwgeSkpOwotICAgIG1fZ2VzdHVyZXMuY2xlYXIoKTsKLSAgICBtX2dlc3R1cmVzLmFwcGVuZCgm
bV90YXBBbmRIb2xkR2VzdHVyZSk7Ci0gICAgUUdlc3R1cmVFdmVudCBldmVudChtX2dlc3R1cmVz
KTsKLSAgICBzZW5kRXZlbnQobV9wYWdlLCAmZXZlbnQpOwotfQotI2VuZGlmCi0KLXZvaWQgRXZl
bnRTZW5kZXI6Onpvb21QYWdlSW4oKQotewotICAgIGlmIChRV2ViRnJhbWUqIGZyYW1lID0gbV9w
YWdlLT5tYWluRnJhbWUoKSkKLSAgICAgICAgZnJhbWUtPnNldFpvb21GYWN0b3IoZnJhbWUtPnpv
b21GYWN0b3IoKSAqIFpPT01fU1RFUCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6Onpvb21QYWdl
T3V0KCkKLXsKLSAgICBpZiAoUVdlYkZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCkp
Ci0gICAgICAgIGZyYW1lLT5zZXRab29tRmFjdG9yKGZyYW1lLT56b29tRmFjdG9yKCkgLyBaT09N
X1NURVApOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjp0ZXh0Wm9vbUluKCkKLXsKLSAgICBpZiAo
UVdlYkZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgIGZyYW1lLT5z
ZXRUZXh0U2l6ZU11bHRpcGxpZXIoZnJhbWUtPnRleHRTaXplTXVsdGlwbGllcigpICogWk9PTV9T
VEVQKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6dGV4dFpvb21PdXQoKQotewotICAgIGlmIChR
V2ViRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKSkKLSAgICAgICAgZnJhbWUtPnNl
dFRleHRTaXplTXVsdGlwbGllcihmcmFtZS0+dGV4dFNpemVNdWx0aXBsaWVyKCkgLyBaT09NX1NU
RVApOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpzY2FsZVBhZ2VCeShmbG9hdCBzY2FsZUZhY3Rv
ciwgZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBpZiAoUVdlYkZyYW1lKiBmcmFtZSA9IG1fcGFn
ZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzY2FsZVBh
Z2VCeShmcmFtZS0+aGFuZGxlKCksIHNjYWxlRmFjdG9yLCBRUG9pbnQoeCwgeSkpOwotfQotCi1R
V2ViRnJhbWUqIEV2ZW50U2VuZGVyOjpmcmFtZVVuZGVyTW91c2UoKSBjb25zdAotewotICAgIFFX
ZWJGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOwotCi1yZWRvOgotICAgIFFMaXN0
PFFXZWJGcmFtZSo+IGNoaWxkcmVuID0gZnJhbWUtPmNoaWxkRnJhbWVzKCk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoY2hpbGRy
ZW4uYXQoaSktPmdlb21ldHJ5KCkuY29udGFpbnMobV9tb3VzZVBvcykpIHsKLSAgICAgICAgICAg
IGZyYW1lID0gY2hpbGRyZW4uYXQoaSk7Ci0gICAgICAgICAgICBnb3RvIHJlZG87Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgaWYgKGZyYW1lLT5nZW9tZXRyeSgpLmNvbnRhaW5zKG1fbW91c2VQb3Mp
KQotICAgICAgICByZXR1cm4gZnJhbWU7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgRXZlbnRT
ZW5kZXI6OnNlbmRPclF1ZXVlRXZlbnQoUUV2ZW50KiBldmVudCkKLXsKLSAgICAvLyBNb3VzZSBt
b3ZlIGV2ZW50cyBhcmUgcXVldWVkIGlmCi0gICAgLy8gMS4gQSBwcmV2aW91cyBldmVudCB3YXMg
cXVldWVkLgotICAgIC8vIDIuIEEgZGVsYXkgd2FzIHNldC11cCBieSBsZWFwRm9yd2FyZCgpLgot
ICAgIC8vIDMuIEEgY2FsbCB0byBtb3VzZU1vdmVUbyB3aGlsZSB0aGUgbW91c2UgYnV0dG9uIGlz
IHByZXNzZWQgY291bGQgaW5pdGlhdGUgYSBkcmFnIG9wZXJhdGlvbiwgYW5kIHRoYXQgZG9lcyBu
b3QgcmV0dXJuIHVudGlsIG1vdXNlVXAgaXMgcHJvY2Vzc2VkLgotICAgIC8vIFRvIGJlIHNhZmUg
YW5kIGF2b2lkIGEgZGVhZGxvY2ssIHRoaXMgZXZlbnQgaXMgcXVldWVkLgotICAgIGlmIChlbmRP
ZlF1ZXVlID09IHN0YXJ0T2ZRdWV1ZSAmJiAhZXZlbnRRdWV1ZVtlbmRPZlF1ZXVlXS5tX2RlbGF5
ICYmICghKG1fbW91c2VCdXR0b25QcmVzc2VkICYmIChtX2V2ZW50TG9vcCAmJiBldmVudC0+dHlw
ZSgpID09IFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlKSkpKSB7Ci0gICAgICAgIHNlbmRFdmVu
dChtX3BhZ2UtPnZpZXcoKSwgZXZlbnQpOwotICAgICAgICBkZWxldGUgZXZlbnQ7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgZXZlbnRRdWV1ZVtlbmRPZlF1ZXVlKytdLm1fZXZlbnQgPSBl
dmVudDsKLSAgICBldmVudFF1ZXVlW2VuZE9mUXVldWVdLm1fZGVsYXkgPSAwOwotICAgIHJlcGxh
eVNhdmVkRXZlbnRzKGV2ZW50LT50eXBlKCkgIT0gUUV2ZW50OjpNb3VzZU1vdmUpOwotfQotCi12
b2lkIEV2ZW50U2VuZGVyOjpyZXBsYXlTYXZlZEV2ZW50cyhib29sIGZsdXNoKQotewotICAgIGlm
IChzdGFydE9mUXVldWUgPCBlbmRPZlF1ZXVlKSB7Ci0gICAgICAgIC8vIEZpcnN0IHNlbmQgYWxs
IHRoZSBldmVudHMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgc2VudAotICAgICAgICB3aGlsZSAoIWV2
ZW50UXVldWVbc3RhcnRPZlF1ZXVlXS5tX2RlbGF5ICYmIHN0YXJ0T2ZRdWV1ZSA8IGVuZE9mUXVl
dWUpIHsKLSAgICAgICAgICAgIFFFdmVudCogZXYgPSBldmVudFF1ZXVlW3N0YXJ0T2ZRdWV1ZSsr
XS5tX2V2ZW50OwotICAgICAgICAgICAgcG9zdEV2ZW50KG1fcGFnZS0+dmlldygpLCBldik7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHN0YXJ0T2ZRdWV1ZSA9PSBlbmRPZlF1ZXVlKSB7Ci0gICAg
ICAgICAgICAvLyBSZXNldCB0aGUgcXVldWUKLSAgICAgICAgICAgIHN0YXJ0T2ZRdWV1ZSA9IDA7
Ci0gICAgICAgICAgICBlbmRPZlF1ZXVlID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIFFUZXN0OjpxV2FpdChldmVudFF1ZXVlW3N0YXJ0T2ZRdWV1ZV0ubV9kZWxheSk7Ci0gICAg
ICAgICAgICBldmVudFF1ZXVlW3N0YXJ0T2ZRdWV1ZV0ubV9kZWxheSA9IDA7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgaWYgKCFmbHVzaCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU2VuZCBh
IG1hcmtlciBldmVudCwgaXQgd2lsbCB0ZWxsIHVzIHdoZW4gaXQgaXMgc2FmZSB0byBleGl0IHRo
ZSBuZXcgZXZlbnQgbG9vcAotICAgIFFFdmVudCogZHJ0RXZlbnQgPSBuZXcgUUV2ZW50KChRRXZl
bnQ6OlR5cGUpRFJUX01FU1NBR0VfRE9ORSk7Ci0gICAgUUFwcGxpY2F0aW9uOjpwb3N0RXZlbnQo
bV9wYWdlLT52aWV3KCksIGRydEV2ZW50KTsKLQotICAgIC8vIFN0YXJ0IGFuIGV2ZW50IGxvb3Ag
Zm9yIGFzeW5jIGhhbmRsaW5nIG9mIERyYWcgJiBEcm9wCi0gICAgbV9ldmVudExvb3AgPSBuZXcg
UUV2ZW50TG9vcDsKLSAgICBtX2V2ZW50TG9vcC0+ZXhlYygpOwotICAgIGRlbGV0ZSBtX2V2ZW50
TG9vcDsKLSAgICBtX2V2ZW50TG9vcCA9IDA7Ci19Ci0KLWJvb2wgRXZlbnRTZW5kZXI6OmV2ZW50
RmlsdGVyKFFPYmplY3QqIHdhdGNoZWQsIFFFdmVudCogZXZlbnQpCi17Ci0gICAgaWYgKHdhdGNo
ZWQgIT0gbV9wYWdlLT52aWV3KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBzd2l0Y2gg
KGV2ZW50LT50eXBlKCkpIHsKLSAgICBjYXNlIFFFdmVudDo6TGVhdmU6Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIGNhc2UgUUV2ZW50OjpNb3VzZUJ1dHRvblByZXNzOgotICAgIGNhc2UgUUV2
ZW50OjpHcmFwaGljc1NjZW5lTW91c2VQcmVzczoKLSAgICAgICAgbV9tb3VzZUJ1dHRvblByZXNz
ZWQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFFFdmVudDo6TW91c2VNb3ZlOgot
ICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1NjZW5lTW91c2VNb3ZlOgotICAgICAgICBpZiAobV9t
b3VzZUJ1dHRvblByZXNzZWQpCi0gICAgICAgICAgICBtX2RyYWcgPSB0cnVlOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlOgotICAgIGNhc2UgUUV2
ZW50OjpHcmFwaGljc1NjZW5lTW91c2VSZWxlYXNlOgotICAgICAgICBtX21vdXNlQnV0dG9uUHJl
c3NlZCA9IGZhbHNlOwotICAgICAgICBtX2RyYWcgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBEUlRfTUVTU0FHRV9ET05FOgotICAgICAgICBtX2V2ZW50TG9vcC0+ZXhpdCgpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IEV2ZW50U2VuZGVyOjp0aW1lckV2ZW50KFFUaW1lckV2ZW50KiBldikKLXsKLSAgICBtX2NsaWNr
VGltZXIuc3RvcCgpOwotfQotCi1RR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqIEV2ZW50U2VuZGVy
OjpjcmVhdGVHcmFwaGljc1NjZW5lTW91c2VFdmVudChRRXZlbnQ6OlR5cGUgdHlwZSwgY29uc3Qg
UVBvaW50JiBwb3MsIGNvbnN0IFFQb2ludCYgc2NyZWVuUG9zLCBRdDo6TW91c2VCdXR0b24gYnV0
dG9uLCBRdDo6TW91c2VCdXR0b25zIGJ1dHRvbnMsIFF0OjpLZXlib2FyZE1vZGlmaWVycyBtb2Rp
ZmllcnMpCi17Ci0gICAgUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50KiBldmVudDsKLSAgICBldmVu
dCA9IG5ldyBRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQodHlwZSk7Ci0gICAgZXZlbnQtPnNldFBv
cyhwb3MpOwotICAgIGV2ZW50LT5zZXRTY3JlZW5Qb3Moc2NyZWVuUG9zKTsKLSAgICBldmVudC0+
c2V0QnV0dG9uKGJ1dHRvbik7Ci0gICAgZXZlbnQtPnNldEJ1dHRvbnMoYnV0dG9ucyk7Ci0gICAg
ZXZlbnQtPnNldE1vZGlmaWVycyhtb2RpZmllcnMpOwotCi0gICAgcmV0dXJuIGV2ZW50OwotfQot
Ci1RR3JhcGhpY3NTY2VuZVdoZWVsRXZlbnQqIEV2ZW50U2VuZGVyOjpjcmVhdGVHcmFwaGljc1Nj
ZW5lV2hlZWxFdmVudChRRXZlbnQ6OlR5cGUgdHlwZSwgY29uc3QgUVBvaW50JiBwb3MsIGNvbnN0
IFFQb2ludCYgc2NyZWVuUG9zLCBpbnQgZGVsdGEsIFF0OjpLZXlib2FyZE1vZGlmaWVycyBtb2Rp
ZmllcnMsIFF0OjpPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBRR3JhcGhpY3NTY2Vu
ZVdoZWVsRXZlbnQqIGV2ZW50OwotICAgIGV2ZW50ID0gbmV3IFFHcmFwaGljc1NjZW5lV2hlZWxF
dmVudCh0eXBlKTsKLSAgICBldmVudC0+c2V0UG9zKHBvcyk7Ci0gICAgZXZlbnQtPnNldFNjcmVl
blBvcyhzY3JlZW5Qb3MpOwotICAgIGV2ZW50LT5zZXREZWx0YShkZWx0YSk7Ci0gICAgZXZlbnQt
PnNldE1vZGlmaWVycyhtb2RpZmllcnMpOwotICAgIGV2ZW50LT5zZXRPcmllbnRhdGlvbihvcmll
bnRhdGlvbik7Ci0KLSAgICByZXR1cm4gZXZlbnQ7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OnNl
bmRFdmVudChRT2JqZWN0KiByZWNlaXZlciwgUUV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoV2Vi
Vmlld0dyYXBoaWNzQmFzZWQqIHZpZXcgPSBxb2JqZWN0X2Nhc3Q8V2ViVmlld0dyYXBoaWNzQmFz
ZWQqPihyZWNlaXZlcikpCi0gICAgICAgIHZpZXctPnNjZW5lKCktPnNlbmRFdmVudCh2aWV3LT5n
cmFwaGljc1ZpZXcoKSwgZXZlbnQpOwotICAgIGVsc2UKLSAgICAgICAgUUFwcGxpY2F0aW9uOjpz
ZW5kRXZlbnQocmVjZWl2ZXIsIGV2ZW50KTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6cG9zdEV2
ZW50KFFPYmplY3QqIHJlY2VpdmVyLCBRRXZlbnQqIGV2ZW50KQotewotICAgIC8vIFFHcmFwaGlj
c1NjZW5lIGRvZXMgbm90IGhhdmUgYSBwb3N0RXZlbnQgbWV0aG9kLCBzbyBzZW5kIHRoZSBldmVu
dCBpbiB0aGlzIGNhc2UKLSAgICAvLyBhbmQgZGVsZXRlIGl0IGFmdGVyIHRoYXQuCi0gICAgaWYg
KFdlYlZpZXdHcmFwaGljc0Jhc2VkKiB2aWV3ID0gcW9iamVjdF9jYXN0PFdlYlZpZXdHcmFwaGlj
c0Jhc2VkKj4ocmVjZWl2ZXIpKSB7Ci0gICAgICAgIHZpZXctPnNjZW5lKCktPnNlbmRFdmVudCh2
aWV3LT5ncmFwaGljc1ZpZXcoKSwgZXZlbnQpOwotICAgICAgICBkZWxldGUgZXZlbnQ7Ci0gICAg
fSBlbHNlCi0gICAgICAgIFFBcHBsaWNhdGlvbjo6cG9zdEV2ZW50KHJlY2VpdmVyLCBldmVudCk7
IC8vIGV2ZW50IGRlbGV0ZWQgYnkgdGhlIHN5c3RlbQotfQotCi0jaW5jbHVkZSAibW9jX0V2ZW50
U2VuZGVyUXQuY3BwIgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRXZlbnRT
ZW5kZXJRdC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRXZlbnRTZW5kZXJRdC5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDEzY2FkYjZkMjAyNTI2M2M0OWE3NTlmZDRhNzNi
MTNmOTExNDE5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0V2ZW50U2VuZGVyUXQuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDA5IFRv
cmNoIE1vYmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIEV2ZW50U2Vu
ZGVyUXRfaAotI2RlZmluZSBFdmVudFNlbmRlclF0X2gKLQotCi0jaW5jbHVkZSAiRHVtcFJlbmRl
clRyZWVRdC5oIgotCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFCYXNpY1Rp
bWVyPgotI2luY2x1ZGUgPFFFdmVudD4KLSNpbmNsdWRlIDxRRXZlbnRMb29wPgotI2luY2x1ZGUg
PFFHZXN0dXJlPgotI2luY2x1ZGUgPFFNaW1lRGF0YT4KLSNpbmNsdWRlIDxRTW91c2VFdmVudD4K
LSNpbmNsdWRlIDxRT2JqZWN0PgotI2luY2x1ZGUgPFFQb2ludD4KLSNpbmNsdWRlIDxRU3RyaW5n
PgotI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgotI2luY2x1ZGUgPFFUb3VjaEV2ZW50PgotI2luY2x1
ZGUgPFF0PgotCi0jaW5jbHVkZSA8cXdlYnBhZ2UuaD4KLSNpbmNsdWRlIDxxd2ViZnJhbWUuaD4K
LQotCi1jbGFzcyBFdmVudFNlbmRlciA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAot
cHVibGljOgotICAgIEV2ZW50U2VuZGVyKFFXZWJQYWdlKiBwYXJlbnQpOwotICAgIHZpcnR1YWwg
Ym9vbCBldmVudEZpbHRlcihRT2JqZWN0KiB3YXRjaGVkLCBRRXZlbnQqIGV2ZW50KTsKLSAgICB2
b2lkIHJlc2V0Q2xpY2tDb3VudCgpIHsgbV9jbGlja0NvdW50ID0gMDsgfQotCi1wdWJsaWMgUV9T
TE9UUzoKLSAgICB2b2lkIG1vdXNlRG93bihpbnQgYnV0dG9uID0gMCwgY29uc3QgUVN0cmluZ0xp
c3QmIG1vZGlmaWVycyA9IFFTdHJpbmdMaXN0KCkpOwotICAgIHZvaWQgbW91c2VVcChpbnQgYnV0
dG9uID0gMCk7Ci0gICAgdm9pZCBtb3VzZU1vdmVUbyhpbnQgeCwgaW50IHkpOwotI2lmbmRlZiBR
VF9OT19XSEVFTEVWRU5UCi0gICAgdm9pZCBtb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSk7Ci0g
ICAgdm9pZCBjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHkpOwotI2VuZGlmCi0g
ICAgdm9pZCBsZWFwRm9yd2FyZChpbnQgbXMpOwotICAgIHZvaWQga2V5RG93bihjb25zdCBRU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IFFTdHJpbmdMaXN0JiBtb2RpZmllcnMgPSBRU3RyaW5nTGlzdCgp
LCB1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwKTsKLSAgICB2b2lkIGNsZWFyS2lsbFJpbmcoKSB7
fQotICAgIFFTdHJpbmdMaXN0IGNvbnRleHRDbGljaygpOwotICAgIHZvaWQgc2NoZWR1bGVBc3lu
Y2hyb25vdXNDbGljaygpOwotICAgIHZvaWQgYWRkVG91Y2hQb2ludChpbnQgeCwgaW50IHkpOwot
ICAgIHZvaWQgdXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSk7Ci0gICAg
dm9pZCBzZXRUb3VjaE1vZGlmaWVyKGNvbnN0IFFTdHJpbmcgJm1vZGlmaWVyLCBib29sIGVuYWJs
ZSk7Ci0gICAgdm9pZCBzZXRUb3VjaFBvaW50UmFkaXVzKGludCByYWRpdXNYLCBpbnQgcmFkaXVz
WSk7Ci0gICAgdm9pZCB0b3VjaFN0YXJ0KCk7Ci0gICAgdm9pZCB0b3VjaE1vdmUoKTsKLSAgICB2
b2lkIHRvdWNoRW5kKCk7Ci0gICAgdm9pZCB0b3VjaENhbmNlbCgpOwotICAgIHZvaWQgem9vbVBh
Z2VJbigpOwotICAgIHZvaWQgem9vbVBhZ2VPdXQoKTsKLSAgICB2b2lkIHRleHRab29tSW4oKTsK
LSAgICB2b2lkIHRleHRab29tT3V0KCk7Ci0gICAgdm9pZCBzY2FsZVBhZ2VCeShmbG9hdCBzY2Fs
ZUZhY3RvciwgZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgdm9pZCBjbGVhclRvdWNoUG9pbnRzKCk7
Ci0gICAgdm9pZCByZWxlYXNlVG91Y2hQb2ludChpbnQgaW5kZXgpOwotICAgIHZvaWQgY2FuY2Vs
VG91Y2hQb2ludChpbnQgaW5kZXgpOwotI2lmbmRlZiBRVF9OT19HRVNUVVJFUwotICAgIHZvaWQg
Z2VzdHVyZVRhcChpbnQgeCwgaW50IHkpOwotICAgIHZvaWQgZ2VzdHVyZUxvbmdQcmVzcyhpbnQg
eCwgaW50IHkpOwotI2VuZGlmCi0gICAgdm9pZCBiZWdpbkRyYWdXaXRoRmlsZXMoY29uc3QgUVN0
cmluZ0xpc3QmIGZpbGVzKTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgdGltZXJFdmVudChRVGlt
ZXJFdmVudCopOwotCi1wcml2YXRlOgotICAgIGJvb2wgaXNHcmFwaGljc0Jhc2VkKCkgY29uc3Qg
eyByZXR1cm4gcW9iamVjdF9jYXN0PFdlYlZpZXdHcmFwaGljc0Jhc2VkKj4obV9wYWdlLT52aWV3
KCkpOyB9Ci0gICAgUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50KiBjcmVhdGVHcmFwaGljc1NjZW5l
TW91c2VFdmVudChRRXZlbnQ6OlR5cGUsIGNvbnN0IFFQb2ludCYgcG9zLCBjb25zdCBRUG9pbnQm
IHNjcmVlblBvcywgUXQ6Ok1vdXNlQnV0dG9uLCBRdDo6TW91c2VCdXR0b25zLCBRdDo6S2V5Ym9h
cmRNb2RpZmllcnMpOwotICAgIFFHcmFwaGljc1NjZW5lV2hlZWxFdmVudCogY3JlYXRlR3JhcGhp
Y3NTY2VuZVdoZWVsRXZlbnQoUUV2ZW50OjpUeXBlLCBjb25zdCBRUG9pbnQmIHBvcywgY29uc3Qg
UVBvaW50JiBzY3JlZW5Qb3MsIGludCBkZWx0YSwgUXQ6OktleWJvYXJkTW9kaWZpZXJzLCBRdDo6
T3JpZW50YXRpb24pOwotICAgIHZvaWQgc2VuZEV2ZW50KFFPYmplY3QqIHJlY2VpdmVyLCBRRXZl
bnQqIGV2ZW50KTsKLSAgICB2b2lkIHBvc3RFdmVudChRT2JqZWN0KiByZWNlaXZlciwgUUV2ZW50
KiBldmVudCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzZW5kVG91Y2hFdmVudChRRXZlbnQ6OlR5
cGUpOwotICAgIHZvaWQgc2VuZE9yUXVldWVFdmVudChRRXZlbnQqKTsKLSAgICB2b2lkIHJlcGxh
eVNhdmVkRXZlbnRzKGJvb2wgZmx1c2gpOwotICAgIFFQb2ludCBtX21vdXNlUG9zOwotICAgIFFQ
b2ludCBtX2NsaWNrUG9zOwotICAgIFFQb2ludCBtX3RvdWNoUG9pbnRSYWRpdXM7Ci0gICAgUXQ6
Ok1vdXNlQnV0dG9ucyBtX21vdXNlQnV0dG9uczsKLSAgICBRV2ViUGFnZSogbV9wYWdlOwotICAg
IGludCBtX2NsaWNrQ291bnQ7Ci0gICAgaW50IG1fY3VycmVudEJ1dHRvbjsKLSAgICBib29sIG1f
bW91c2VCdXR0b25QcmVzc2VkOwotICAgIGJvb2wgbV9kcmFnOwotICAgIFFNaW1lRGF0YSBtX2N1
cnJlbnREcmFnRGF0YTsKLSAgICBRdDo6RHJvcEFjdGlvbnMgbV9jdXJyZW50RHJhZ0FjdGlvbnNB
bGxvd2VkOwotICAgIFFFdmVudExvb3AqIG1fZXZlbnRMb29wOwotICAgIFFXZWJGcmFtZSogZnJh
bWVVbmRlck1vdXNlKCkgY29uc3Q7Ci0gICAgUUJhc2ljVGltZXIgbV9jbGlja1RpbWVyOwotICAg
IFFMaXN0PFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50PiBtX3RvdWNoUG9pbnRzOwotICAgIFF0OjpL
ZXlib2FyZE1vZGlmaWVycyBtX3RvdWNoTW9kaWZpZXJzOwotI2lmbmRlZiBRVF9OT19HRVNUVVJF
UwotICAgIFFUYXBHZXN0dXJlIG1fdGFwR2VzdHVyZTsKLSAgICBRVGFwQW5kSG9sZEdlc3R1cmUg
bV90YXBBbmRIb2xkR2VzdHVyZTsKLSAgICBRTGlzdDxRR2VzdHVyZSo+IG1fZ2VzdHVyZXM7Ci0j
ZW5kaWYKLSAgICBib29sIG1fdG91Y2hBY3RpdmU7Ci19OwotI2VuZGlmIC8vICBFdmVudFNlbmRl
clF0X2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0dDQ29udHJvbGxlclF0
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0dDQ29udHJvbGxlclF0LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY5MzY5OGQ3NzhmMzllM2U3NDRmZTdjZTBlMTZmMDQ5
NzFmMGZlYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9xdC9HQ0NvbnRyb2xsZXJRdC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDA5IFRv
cmNoIE1vYmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkR1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0LmgiCi0KLXZvaWQgR0NDb250cm9sbGVyOjpjb2xsZWN0KCkgY29uc3QKLXsK
LSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Z2FyYmFnZUNvbGxlY3RvckNvbGxlY3QoKTsK
LX0KLQotdm9pZCBHQ0NvbnRyb2xsZXI6OmNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZChib29sIHdh
aXRVbnRpbERvbmUpIGNvbnN0Ci17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmdhcmJh
Z2VDb2xsZWN0b3JDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQod2FpdFVudGlsRG9uZSk7Ci19Ci0K
LXNpemVfdCBHQ0NvbnRyb2xsZXI6OmdldEpTT2JqZWN0Q291bnQoKSBjb25zdAotewotICAgIHJl
dHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6amF2YVNjcmlwdE9iamVjdHNDb3VudCgpOwot
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvVGVzdE5ldHNjYXBlUGx1Z2lu
L1Rlc3ROZXRzY2FwZVBsdWdpbi5wcm8gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0TmV0
c2NhcGVQbHVnaW4vVGVzdE5ldHNjYXBlUGx1Z2luLnBybwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggM2I2ZGRmYzYxOTFmYWY1ZGRhZDUxOTEzODUwMjM5ZGIxNGEyNTFhMC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9xdC9UZXN0TmV0c2NhcGVQbHVnaW4vVGVzdE5ldHNjYXBlUGx1Z2luLnBybworKysgL2Rl
di9udWxsCkBAIC0xLDYyICswLDAgQEAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQcm9qZWN0IGZpbGUgZm9y
IHRoZSBOUEFQSSB0ZXN0IHBsdWdpbgotIwotIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9y
IGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0ZW0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1URU1QTEFU
RSA9IGxpYgotVEFSR0VUID0gVGVzdE5ldHNjYXBlUGx1Z0luCi0KLUNPTkZJRyArPSBwbHVnaW4K
LQotU09VUkNFUyArPSBcCi0gICAgUGx1Z2luT2JqZWN0LmNwcCBcCi0gICAgUGx1Z2luVGVzdC5j
cHAgXAotICAgIFRlc3RPYmplY3QuY3BwIFwKLSAgICBtYWluLmNwcCBcCi0gICAgVGVzdHMvRG9j
dW1lbnRPcGVuSW5EZXN0cm95U3RyZWFtLmNwcCBcCi0gICAgVGVzdHMvRXZhbHVhdGVKU0FmdGVy
UmVtb3ZpbmdQbHVnaW5FbGVtZW50LmNwcCBcCi0gICAgVGVzdHMvRm9ybVZhbHVlLmNwcCBcCi0g
ICAgVGVzdHMvR2V0VVJMTm90aWZ5V2l0aFVSTFRoYXRGYWlsc1RvTG9hZC5jcHAgXAotICAgIFRl
c3RzL0dldFVSTFdpdGhKYXZhU2NyaXB0VVJMLmNwcCBcCi0gICAgVGVzdHMvR2V0VVJMV2l0aEph
dmFTY3JpcHRVUkxEZXN0cm95aW5nUGx1Z2luLmNwcCBcCi0gICAgVGVzdHMvR2V0VXNlckFnZW50
V2l0aE51bGxOUFBGcm9tTlBQTmV3LmNwcCBcCi0gICAgVGVzdHMvTlBEZWFsbG9jYXRlQ2FsbGVk
QmVmb3JlTlBTaHV0ZG93bi5jcHAgXAotICAgIFRlc3RzL05QUE5ld0ZhaWxzLmNwcCBcCi0gICAg
VGVzdHMvTlBQU2V0V2luZG93Q2FsbGVkRHVyaW5nRGVzdHJ1Y3Rpb24uY3BwIFwKLSAgICBUZXN0
cy9OUFJ1bnRpbWVDYWxsc1dpdGhOdWxsTlBQLmNwcCBcCi0gICAgVGVzdHMvTlBSdW50aW1lT2Jq
ZWN0RnJvbURlc3Ryb3llZFBsdWdpbi5jcHAgXAotICAgIFRlc3RzL05QUnVudGltZVJlbW92ZVBy
b3BlcnR5LmNwcCBcCi0gICAgVGVzdHMvTnVsbE5QUEdldFZhbHVlUG9pbnRlci5jcHAgXAotICAg
IFRlc3RzL1Bhc3NEaWZmZXJlbnROUFBTdHJ1Y3QuY3BwIFwKLSAgICBUZXN0cy9QbHVnaW5TY3Jp
cHRhYmxlTlBPYmplY3RJbnZva2VEZWZhdWx0LmNwcCBcCi0gICAgVGVzdHMvUGx1Z2luU2NyaXB0
YWJsZU9iamVjdE92ZXJyaWRlc0FsbFByb3BlcnRpZXMuY3BwIFwKLSAgICBUZXN0cy9Qcml2YXRl
QnJvd3NpbmcuY3BwIFwKLSAgICBUZXN0cy9Ub1N0cmluZ0FuZFZhbHVlT2ZPYmplY3QuY3BwCi0K
LVdFQktJVCArPSB3ZWJjb3JlICMgRm9yIE5QQVBJIGhlYWRlcnMKLQotVlBBVEggPSAuLi8uLi91
bml4L1Rlc3ROZXRzY2FwZVBsdWdpbiAuLi8uLi9UZXN0TmV0c2NhcGVQbHVnSW4KLQotCi1JTkNM
VURFUEFUSCArPSBcCi0gICAgLi4vLi4vVGVzdE5ldHNjYXBlUGx1Z0luL3VuaXgvRm9yd2FyZGlu
Z0hlYWRlcnMgXAotICAgIC4uLy4uL1Rlc3ROZXRzY2FwZVBsdWdJbi91bml4L0ZvcndhcmRpbmdI
ZWFkZXJzL1dlYktpdCBcCi0gICAgLi4vLi4vVGVzdE5ldHNjYXBlUGx1Z0luCi0KLURFU1RESVIg
PSAkJHtST09UX0JVSUxEX0RJUn0vbGliL3BsdWdpbnMKLQotbWFjIHsKLSAgICBDT05GSUcgKz0g
cGx1Z2luX2J1bmRsZQotICAgIFFNQUtFX0lORk9fUExJU1QgPSAuLi8uLi9UZXN0TmV0c2NhcGVQ
bHVnSW4vbWFjL0luZm8ucGxpc3QKLSAgICBRTUFLRV9QTFVHSU5fQlVORExFX05BTUUgPSAkJFRB
UkdFVAotICAgIFFNQUtFX0JVTkRMRV9MT0NBVElPTiArPSAiQ29udGVudHMvTWFjT1MiCi0KLSAg
ICBPQkpFQ1RJVkVfU09VUkNFUyArPSBQbHVnaW5PYmplY3RNYWMubW0KLSAgICBMSUJTICs9IC1m
cmFtZXdvcmsgQ2FyYm9uIC1mcmFtZXdvcmsgQ29jb2EgLWZyYW1ld29yayBRdWFydHpDb3JlCi19
Ci0KLSF3aW4zMjohZW1iZWRkZWQ6IW1hYyB7Ci0gICAgTElCUyArPSAtbFgxMQotICAgIERFRklO
RVMgKz0gWFBfVU5JWAotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvVGVz
dFJ1bm5lclF0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NGMwMGZmMTNlYzRhM2UwM2RiOWEwNzI1
OWU2YzA5MWNiZjcxMTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvVGVzdFJ1bm5lclF0LmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDEyMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RSdW5uZXJRdC5oIgotCi0jaW5jbHVkZSAiRHVtcFJl
bmRlclRyZWVRdC5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgiCi0jaW5j
bHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaCIKLSNpbmNsdWRlICJXb3JrUXVl
dWUuaCIKLSNpbmNsdWRlICJXb3JrUXVldWVJdGVtUXQuaCIKLSNpbmNsdWRlIDxKU1N0cmluZ1Jl
ZlF0Lmg+Ci0jaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRRGlyPgotI2lu
Y2x1ZGUgPFFMb2NhbGU+Ci0jaW5jbHVkZSA8cXdlYnNldHRpbmdzLmg+Ci0KLVRlc3RSdW5uZXJR
dDo6VGVzdFJ1bm5lclF0KER1bXBSZW5kZXJUcmVlKiBkcnQpCi0gICAgOiBRT2JqZWN0KCkKLSAg
ICAsIG1fZHJ0KGRydCkKLSAgICAsIG1fc2hvdWxkVGltZW91dCh0cnVlKQotICAgICwgbV90aW1l
b3V0KDMwMDAwKQotewotICAgIHJlc2V0KCk7Ci19Ci0KLVRlc3RSdW5uZXI6On5UZXN0UnVubmVy
KCkKLXsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6OnJlc2V0KCkKLXsKLSAgICBtX2hhc0R1bXBl
ZCA9IGZhbHNlOwotICAgIG1fbG9hZEZpbmlzaGVkID0gZmFsc2U7Ci0gICAgbV9hdWRpb0R1bXAg
PSBmYWxzZTsKLSAgICBtX3dhaXRGb3JEb25lID0gZmFsc2U7Ci0gICAgbV90aW1lb3V0VGltZXIu
c3RvcCgpOwotICAgIG1fdG9wTG9hZGluZ0ZyYW1lID0gMDsKLSAgICBtX3dhaXRGb3JQb2xpY3kg
PSBmYWxzZTsKLSAgICBtX2hhbmRsZUVycm9yUGFnZXMgPSBmYWxzZTsKLSAgICBtX3dlYkhpc3Rv
cnkgPSAwOwotICAgIG1fZ2xvYmFsRmxhZyA9IGZhbHNlOwotICAgIG1fdXNlclN0eWxlU2hlZXRF
bmFibGVkID0gZmFsc2U7Ci0gICAgbV9pZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uID0gZmFsc2U7
Ci0gICAgbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCA9IGZhbHNlOwotICAgIG1fZ2VvbG9j
YXRpb25QZXJtaXNzaW9uID0gZmFsc2U7Ci0gICAgbV9hdWRpb0RhdGEuY2xlYXIoKTsKLQotICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wRWRpdGluZ0NhbGxiYWNrcyhmYWxzZSk7Ci0g
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBGcmFtZUxvYWRlcihmYWxzZSk7Ci0gICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soZmFs
c2UpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wVXNlckdlc3R1cmVJbkZyYW1l
TG9hZGVyKGZhbHNlKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFJlc291cmNl
TG9hZENhbGxiYWNrcyhmYWxzZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBS
ZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKGZhbHNlKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6ZHVtcFdpbGxDYWNoZVJlc3BvbnNlQ2FsbGJhY2tzKGZhbHNlKTsKLSAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCh0cnVlKTsKLSAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxP
blJlZGlyZWN0KGZhbHNlKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2lsbFNl
bmRSZXF1ZXN0UmV0dXJuc051bGwoZmFsc2UpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcnMoUVN0cmluZ0xpc3QoKSk7Ci0gICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFyU2NyaXB0V29ybGRzKCk7Ci0gICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGZhbHNlLCBmYWxzZSk7Ci0g
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBIaXN0b3J5Q2FsbGJhY2tzKGZhbHNlKTsK
LSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNrcyhm
YWxzZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0R2VvbG9jYXRpb25Nb2Nr
KG1fZHJ0LT5wYWdlQWRhcHRlcigpKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVt
cE5vdGlmaWNhdGlvbihmYWxzZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFNo
b3VsZFVzZUZvbnRTbW9vdGhpbmcoZmFsc2UpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpkaXNhYmxlRGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoKTsKLSAgICBzZXRJY29uRGF0YWJh
c2VFbmFibGVkKGZhbHNlKTsKLSAgICBjbGVhckFsbERhdGFiYXNlcygpOwotICAgIHJlbW92ZUFs
bFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25zKCk7Ci0gICAgLy8gVGhlIGRlZmF1bHQgc3RhdGUg
Zm9yIERSVCBpcyB0byBibG9jayB0aGlyZC1wYXJ0eSBjb29raWVzLCBtaW1pY2luZyB0aGUgTWFj
IHBvcnQKLSAgICBzZXRBbHdheXNBY2NlcHRDb29raWVzKGZhbHNlKTsKLSAgICBlbWl0IGhpZGVQ
YWdlKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lclF0OjpkdW1wTm90aWZpY2F0aW9ucygpCi17Ci0g
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBOb3RpZmljYXRpb24odHJ1ZSk7Ci19Ci0K
LXZvaWQgVGVzdFJ1bm5lclF0Ojpwcm9jZXNzV29yaygpCi17Ci0gICAgLy8gcURlYnVnKCkgPDwg
Ij4+PnByb2Nlc3NXb3JrIjsKLQotICAgIC8vIGlmIHdlIGRpZG4ndCBzdGFydCBhIG5ldyBsb2Fk
LCB0aGVuIHdlIGZpbmlzaGVkIGFsbCB0aGUgY29tbWFuZHMsIHNvIHdlJ3JlIHJlYWR5IHRvIGR1
bXAgc3RhdGUKLSAgICBpZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+cHJvY2Vzc1dvcmsoKSAmJiAh
c2hvdWxkV2FpdFVudGlsRG9uZSgpKSB7Ci0gICAgICAgIGVtaXQgZG9uZSgpOwotICAgICAgICBt
X2hhc0R1bXBlZCA9IHRydWU7Ci0gICAgfQotfQotCi0vLyBDYWxsZWQgb24gbG9hZEZpbmlzaGVk
IG9uIFdlYlBhZ2UKLXZvaWQgVGVzdFJ1bm5lclF0OjptYXliZUR1bXAoYm9vbCAvKnN1Y2Nlc3Mq
LykKLXsKLQotICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBvbiBhbnkgb2YgdGhlIGh0dHAvdGVzdHMv
c2VjdXJpdHkvd2luZG93LWV2ZW50cy0qLmh0bWwgdGVzdHMsIHdoZXJlIHRoZSB0ZXN0IG9wZW5z
Ci0gICAgLy8gYSBuZXcgd2luZG93LCBjYWxscyB0aGUgdW5sb2FkIGFuZCBsb2FkIGV2ZW50IGhh
bmRsZXJzIG9uIHRoZSB3aW5kb3cncyBwYWdlLCBhbmQgdGhlbiBpbW1lZGlhdGVseQotICAgIC8v
IGlzc3VlcyBhIG5vdGlmeURvbmUuIE5lZWRzIGludmVzdGlnYXRpb24uCi0gICAgaWYgKCFtX3Rv
cExvYWRpbmdGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSXQgaXMgcG9zc2libGUg
dGhhdCB3ZSBnZXQgY2FsbGVkIGJ5IHdpbmRvd3MgY3JlYXRlZCBmcm9tIHRoZSBtYWluIHBhZ2Ug
dGhhdCBoYXZlIGZpbmlzaGVkCi0gICAgLy8gbG9hZGluZywgc28gd2UgZG9uJ3QgQVNTRVJUIGhl
cmUuIEF0IHRoZSBtb21lbnQgd2UgZG8gbm90IGdhdGhlciByZXN1bHRzIGZyb20gc3VjaCB3aW5k
b3dzLAotICAgIC8vIGJ1dCBtYXkgbmVlZCB0byBpbiBmdXR1cmUuCi0gICAgaWYgKHNlbmRlcigp
ICE9IG1fdG9wTG9hZGluZ0ZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
bG9hZEZpbmlzaGVkID0gdHJ1ZTsKLSAgICAvLyBhcyB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIG9u
IGxvYWRGaW5pc2hlZCwgdGhlIHRlc3QgbWlnaHQKLSAgICAvLyBhbHJlYWR5IGhhdmUgZHVtcGVk
IGFuZCB0aHVzIG5vIGxvbmdlciBiZSBhY3RpdmUsIHRodXMKLSAgICAvLyBiYWlsIG91dCBoZXJl
LgotICAgIGlmIChtX2hhc0R1bXBlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV29ya1F1ZXVl
OjpzaGFyZWQoKS0+c2V0RnJvemVuKHRydWUpOyAvLyBmaXJzdCBjb21wbGV0ZSBsb2FkIGZyZWV6
ZXMgdGhlIHF1ZXVlIGZvciB0aGUgcmVzdCBvZiB0aGlzIHRlc3QKLSAgICBpZiAoV29ya1F1ZXVl
OjpzaGFyZWQoKS0+Y291bnQoKSkKLSAgICAgICAgUVRpbWVyOjpzaW5nbGVTaG90KDAsIHRoaXMs
IFNMT1QocHJvY2Vzc1dvcmsoKSkpOwotICAgIGVsc2UgaWYgKCFzaG91bGRXYWl0VW50aWxEb25l
KCkpIHsKLSAgICAgICAgZW1pdCBkb25lKCk7Ci0gICAgICAgIG1faGFzRHVtcGVkID0gdHJ1ZTsK
LSAgICB9Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lclF0Ojp3YWl0VW50aWxEb25lKCkKLXsKLSAgICAv
L3FEZWJ1ZygpIDw8ICI+Pj4+d2FpdEZvckRvbmUiOwotICAgIG1fd2FpdEZvckRvbmUgPSB0cnVl
OwotCi0gICAgaWYgKCFtX3Nob3VsZFRpbWVvdXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
dGltZW91dFRpbWVyLnN0YXJ0KG1fdGltZW91dCwgdGhpcyk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5l
clF0OjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShjb25zdCBRU3RyaW5nJiBtb2RlKQotewotICAg
IG1fZHJ0LT53ZWJQYWdlKCktPnNldFByb3BlcnR5KCJfcV92aWV3TW9kZSIsIG1vZGUpOwotfQot
Ci1pbnQgVGVzdFJ1bm5lclF0Ojp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKLXsKLSAgICBpZiAoIW1f
d2ViSGlzdG9yeSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgLy8gU3VidHJhY3Qgb25lIGhl
cmUgYXMgb3VyIFFXZWJIaXN0b3J5Ojpjb3VudCgpIGluY2x1ZGVzIHRoZSBhY3R1YWwgcGFnZSwK
LSAgICAvLyB3aGljaCBpcyBub3QgY29uc2lkZXJlZCBpbiB0aGUgRFJUIHRlc3RzLgotICAgIHJl
dHVybiBtX3dlYkhpc3RvcnktPmNvdW50KCkgLSAxOwotfQotCi12b2lkIFRlc3RSdW5uZXJRdDo6
a2VlcFdlYkhpc3RvcnkoKQotewotICAgIG1fd2ViSGlzdG9yeSA9IG1fZHJ0LT53ZWJQYWdlKCkt
Pmhpc3RvcnkoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6Om5vdGlmeURvbmUoKQotewotICAg
IHFEZWJ1ZygpIDw8ICI+Pj4+bm90aWZ5RG9uZSI7Ci0KLSAgICBpZiAobV9zaG91bGRUaW1lb3V0
ICYmICFtX3RpbWVvdXRUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3RpbWVvdXRUaW1lci5zdG9wKCk7Ci0gICAgbV93YWl0Rm9yRG9uZSA9IGZhbHNlOwotCi0gICAg
Ly8gSWYgdGhlIHBhZ2UgaGFzIG5vdCBmaW5pc2hlZCBsb2FkaW5nIChpLmUuIGxvYWRGaW5pc2hl
ZCgpIGhhcyBub3QgYmVlbiBlbWl0dGVkKSB0aGVuCi0gICAgLy8gY29udGVudCBjcmVhdGVkIGJ5
IHRoZSBsaWtlcyBvZiBkb2N1bWVudC53cml0ZSgpIEpTIG1ldGhvZHMgd2lsbCBub3QgYmUgYXZh
aWxhYmxlIHlldC4KLSAgICAvLyBXaGVuIHRoZSBwYWdlIGhhcyBmaW5pc2hlZCBsb2FkaW5nLCBt
YXliZUR1bXAgYWJvdmUgd2lsbCBkdW1wIHRoZSByZXN1bHRzIG5vdyB0aGF0IHdlIGhhdmUKLSAg
ICAvLyBqdXN0IHNldCBzaG91bGRXYWl0VW50aWxEb25lIHRvIGZhbHNlLgotICAgIGlmICghbV9s
b2FkRmluaXNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGVtaXQgZG9uZSgpOwotCi0gICAg
Ly8gRklYTUU6IGludmVzdGlnYXRlIHdoeSBhbHdheXMgcmVzZXR0aW5nIHRoZXNlIHJlc3VsdCBp
biB0aW1lb3V0cwotICAgIG1faGFzRHVtcGVkID0gdHJ1ZTsKLSAgICBtX3dhaXRGb3JQb2xpY3kg
PSBmYWxzZTsKLX0KLQotaW50IFRlc3RSdW5uZXJRdDo6d2luZG93Q291bnQoKQotewotICAgIHJl
dHVybiBtX2RydC0+d2luZG93Q291bnQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6OmdyYW50
V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihjb25zdCBRU3RyaW5nJiBvcmlnaW4pCi17Ci0gICAg
UVdlYkZyYW1lKiBmcmFtZSA9IG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpOwotICAgIG1f
ZHJ0LT53ZWJQYWdlKCktPnNldEZlYXR1cmVQZXJtaXNzaW9uKGZyYW1lLCBRV2ViUGFnZTo6Tm90
aWZpY2F0aW9ucywgUVdlYlBhZ2U6OlBlcm1pc3Npb25HcmFudGVkQnlVc2VyKTsKLX0KLQotdm9p
ZCBUZXN0UnVubmVyUXQ6Omlnbm9yZUxlZ2FjeVdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1
ZXN0cygpCi17Ci0gICAgbV9pZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uID0gdHJ1ZTsKLX0KLQot
dm9pZCBUZXN0UnVubmVyUXQ6OmRlbnlXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IFFT
dHJpbmcmIG9yaWdpbikKLXsKLSAgICBRV2ViRnJhbWUqIGZyYW1lID0gbV9kcnQtPndlYlBhZ2Uo
KS0+bWFpbkZyYW1lKCk7Ci0gICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0RmVhdHVyZVBlcm1pc3Np
b24oZnJhbWUsIFFXZWJQYWdlOjpOb3RpZmljYXRpb25zLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRl
bmllZEJ5VXNlcik7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lclF0OjpyZW1vdmVBbGxXZWJOb3RpZmlj
YXRpb25QZXJtaXNzaW9ucygpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFy
Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6OnNpbXVs
YXRlTGVnYWN5V2ViTm90aWZpY2F0aW9uQ2xpY2soY29uc3QgUVN0cmluZyYgdGl0bGUpCi17Ci0g
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNs
aWNrKHRpdGxlKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6OmRpc3BsYXkoKQotewotICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRUcmFja1JlcGFpbnRSZWN0cyhtX3RvcExvYWRpbmdG
cmFtZS0+aGFuZGxlKCksIHRydWUpOwotICAgIGVtaXQgc2hvd1BhZ2UoKTsKLX0KLQotdm9pZCBU
ZXN0UnVubmVyUXQ6OmRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbigpCi17Ci0gICAgZGlzcGxheSgp
OwotfQotCi12b2lkIFRlc3RSdW5uZXJRdDo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQotewotICAg
IG1fZHJ0LT53ZWJQYWdlKCktPmhpc3RvcnkoKS0+Y2xlYXIoKTsKLX0KLQotUVN0cmluZyBUZXN0
UnVubmVyUXQ6OnBhdGhUb0xvY2FsUmVzb3VyY2UoY29uc3QgUVN0cmluZyYgdXJsKQotewotICAg
IFFTdHJpbmcgbG9jYWxUbXBVcmwoUUxhdGluMVN0cmluZygiZmlsZTovLy90bXAvTGF5b3V0VGVz
dHMiKSk7Ci0KLSAgICAvLyBUcmFuc2xhdGUgYSByZXF1ZXN0IGZvciAvdG1wL0xheW91dFRlc3Rz
IHRvIHRoZSByZXBvc2l0b3J5IExheW91dFRlc3RzIGRpcmVjdG9yeS4KLSAgICAvLyBEbyBub3Qg
cmVseSBvbiBhIHN5bWxpbmsgdG8gYmUgY3JlYXRlZCB2aWEgdGhlIHRlc3QgcnVubmVyLCB3aGlj
aCB3aWxsIG5vdCB3b3JrIG9uIFdpbmRvd3MuCi0gICAgaWYgKHVybC5zdGFydHNXaXRoKGxvY2Fs
VG1wVXJsKSkgewotICAgICAgICAvLyBEdW1wUmVuZGVyVHJlZSBsaXZlcyBpbiBXZWJLaXQvV2Vi
S2l0QnVpbGQvPGJ1aWxkX21vZGU+L2Jpbi4KLSAgICAgICAgLy8gVHJhbnNsYXRlIGZyb20gV2Vi
S2l0L1dlYktpdEJ1aWxkL1JlbGVhc2UvYmluID0+IFdlYktpdC9MYXlvdXRUZXN0cy4KLSAgICAg
ICAgUUZpbGVJbmZvIGxheW91dFRlc3RzUm9vdChRQ29yZUFwcGxpY2F0aW9uOjphcHBsaWNhdGlv
bkRpclBhdGgoKSArIFFMYXRpbjFTdHJpbmcoIi8uLi8uLi8uLi9MYXlvdXRUZXN0cy8iKSk7Ci0g
ICAgICAgIGlmIChsYXlvdXRUZXN0c1Jvb3QuZXhpc3RzKCkpCi0gICAgICAgICAgICByZXR1cm4g
UUxhdGluMVN0cmluZygiZmlsZTovLyIpICsgbGF5b3V0VGVzdHNSb290LmFic29sdXRlUGF0aCgp
ICsgdXJsLm1pZChsb2NhbFRtcFVybC5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHVy
bDsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6OmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkKLXsKLSAg
ICBxRGVidWcoKSA8PCAiPj4+ZHVtcEVkaXRpbmdDYWxsYmFja3MiOwotICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpkdW1wRWRpdGluZ0NhbGxiYWNrcyh0cnVlKTsKLX0KLQotdm9pZCBUZXN0
UnVubmVyUXQ6OmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKQotewotICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpkdW1wRnJhbWVMb2FkZXIodHJ1ZSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lclF0
OjpkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayh0cnVlKTsKLX0KLQotdm9pZCBU
ZXN0UnVubmVyUXQ6OmR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKCkKLXsKLSAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRlcih0
cnVlKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6OmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3Mo
KQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wUmVzb3VyY2VMb2FkQ2FsbGJh
Y2tzKHRydWUpOwotfQotCi12b2lkIFRlc3RSdW5uZXJRdDo6ZHVtcFJlc291cmNlUmVzcG9uc2VN
SU1FVHlwZXMoKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wUmVzb3VyY2VS
ZXNwb25zZU1JTUVUeXBlcyh0cnVlKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6OmR1bXBXaWxs
Q2FjaGVSZXNwb25zZSgpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBXaWxs
Q2FjaGVSZXNwb25zZUNhbGxiYWNrcyh0cnVlKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6OmR1
bXBIaXN0b3J5Q2FsbGJhY2tzKCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVt
cEhpc3RvcnlDYWxsYmFja3ModHJ1ZSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lclF0OjpzZXRXaWxs
U2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoYm9vbCBlbmFibGVkKQotewotICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVk
aXJlY3QoZW5hYmxlZCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lclF0OjpzZXRXaWxsU2VuZFJlcXVl
c3RSZXR1cm5zTnVsbChib29sIGVuYWJsZWQpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKGVuYWJsZWQpOwotfQotCi12b2lkIFRl
c3RSdW5uZXJRdDo6c2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIoY29uc3QgUVN0cmluZ0xp
c3QmIGhlYWRlcnMpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFdpbGxTZW5k
UmVxdWVzdENsZWFySGVhZGVycyhoZWFkZXJzKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6OnNl
dERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoYm9vbCBkZWZlcikKLXsKLSAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChkZWZlcik7Ci19Ci0K
LXZvaWQgVGVzdFJ1bm5lclF0OjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKGludCBob3dGYXJCYWNrd2Fy
ZCkKLXsKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj5xdWV1ZUJhY2tOYXZpZ2F0aW9uIiA8PCBob3dG
YXJCYWNrd2FyZDsKLSAgICBmb3IgKGludCBpID0gMDsgaSAhPSBob3dGYXJCYWNrd2FyZDsgKytp
KQotICAgICAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgQmFja0l0ZW0oMSkpOwot
fQotCi12b2lkIFRlc3RSdW5uZXJRdDo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbihpbnQgaG93RmFy
Rm9yd2FyZCkKLXsKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj5xdWV1ZUZvcndhcmROYXZpZ2F0aW9u
IiA8PCBob3dGYXJGb3J3YXJkOwotICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGhvd0ZhckZvcndh
cmQ7ICsraSkKLSAgICAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IEZvcndhcmRJ
dGVtKDEpKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoY29u
c3QgUVN0cmluZyYgY29udGVudCwgY29uc3QgUVN0cmluZyYgYmFzZVVSTCwgY29uc3QgUVN0cmlu
ZyYgZmFpbGluZ1VSTCkKLXsKLSAgICBpZiAoZmFpbGluZ1VSTC5pc0VtcHR5KCkpCi0gICAgICAg
IFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSFRNTFN0cmluZ0l0ZW0oSlNTdHJp
bmdDcmVhdGVXaXRoUVN0cmluZyhjb250ZW50KS5nZXQoKSwgSlNTdHJpbmdDcmVhdGVXaXRoUVN0
cmluZyhiYXNlVVJMKS5nZXQoKSkpOwotICAgIGVsc2UKLSAgICAgICAgV29ya1F1ZXVlOjpzaGFy
ZWQoKS0+cXVldWUobmV3IExvYWRBbHRlcm5hdGVIVE1MU3RyaW5nSXRlbShKU1N0cmluZ0NyZWF0
ZVdpdGhRU3RyaW5nKGNvbnRlbnQpLCBKU1N0cmluZ0NyZWF0ZVdpdGhRU3RyaW5nKGJhc2VVUkwp
LCBKU1N0cmluZ0NyZWF0ZVdpdGhRU3RyaW5nKGZhaWxpbmdVUkwpKSk7Ci19Ci0KLXZvaWQgVGVz
dFJ1bm5lclF0OjpxdWV1ZVJlbG9hZCgpCi17Ci0gICAgLy9xRGVidWcoKSA8PCAiPj4+cXVldWVS
ZWxvYWQiOwotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBSZWxvYWRJdGVtKCkp
OwotfQotCi12b2lkIFRlc3RSdW5uZXJRdDo6cXVldWVMb2FkaW5nU2NyaXB0KGNvbnN0IFFTdHJp
bmcmIHNjcmlwdCkKLXsKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj5xdWV1ZUxvYWRpbmdTY3JpcHQi
IDw8IHNjcmlwdDsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZGluZ1Nj
cmlwdEl0ZW0oSlNTdHJpbmdDcmVhdGVXaXRoUVN0cmluZyhzY3JpcHQpLmdldCgpKSk7Ci19Ci0K
LXZvaWQgVGVzdFJ1bm5lclF0OjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoY29uc3QgUVN0cmluZyYg
c2NyaXB0KQotewotICAgIC8vcURlYnVnKCkgPDwgIj4+PnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCIg
PDwgc2NyaXB0OwotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBOb25Mb2FkaW5n
U2NyaXB0SXRlbShKU1N0cmluZ0NyZWF0ZVdpdGhRU3RyaW5nKHNjcmlwdCkuZ2V0KCkpKTsKLX0K
LQotdm9pZCBUZXN0UnVubmVyUXQ6OnByb3Zpc2lvbmFsTG9hZCgpCi17Ci0gICAgUVdlYkZyYW1l
KiBmcmFtZSA9IHFvYmplY3RfY2FzdDxRV2ViRnJhbWUqPihzZW5kZXIoKSk7Ci0gICAgaWYgKCFt
X3RvcExvYWRpbmdGcmFtZSAmJiAhbV9oYXNEdW1wZWQpCi0gICAgICAgIG1fdG9wTG9hZGluZ0Zy
YW1lID0gZnJhbWU7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lclF0Ojp0aW1lckV2ZW50KFFUaW1lckV2
ZW50ICpldikKLXsKLSAgICBpZiAoZXYtPnRpbWVySWQoKSA9PSBtX3RpbWVvdXRUaW1lci50aW1l
cklkKCkpIHsKLSAgICAgICAgY29uc3QgY2hhciogbWVzc2FnZSA9ICJGQUlMOiBUaW1lZCBvdXQg
d2FpdGluZyBmb3Igbm90aWZ5RG9uZSB0byBiZSBjYWxsZWRcbiI7Ci0gICAgICAgIGZwcmludGYo
c3RkZXJyLCAiJXMiLCBtZXNzYWdlKTsKLSAgICAgICAgZnByaW50ZihzdGRvdXQsICIlcyIsIG1l
c3NhZ2UpOwotICAgICAgICBub3RpZnlEb25lKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIFFPYmpl
Y3Q6OnRpbWVyRXZlbnQoZXYpOwotfQotCi1RU3RyaW5nIFRlc3RSdW5uZXJRdDo6ZW5jb2RlSG9z
dE5hbWUoY29uc3QgUVN0cmluZyYgaG9zdCkKLXsKLSAgICBRU3RyaW5nIGVuY29kZWQgPSBRU3Ry
aW5nOjpmcm9tTGF0aW4xKFFVcmw6OnRvQWNlKGhvc3QgKyBRTGF0aW4xU3RyaW5nKCIubm8iKSkp
OwotICAgIGVuY29kZWQudHJ1bmNhdGUoZW5jb2RlZC5sZW5ndGgoKSAtIDMpOyAvLyBzdHJpcCAu
bm8KLSAgICByZXR1cm4gZW5jb2RlZDsKLX0KLQotUVN0cmluZyBUZXN0UnVubmVyUXQ6OmRlY29k
ZUhvc3ROYW1lKGNvbnN0IFFTdHJpbmcmIGhvc3QpCi17Ci0gICAgUVN0cmluZyBkZWNvZGVkID0g
UVVybDo6ZnJvbUFjZShob3N0LnRvTGF0aW4xKCkgKyBRQnl0ZUFycmF5KCIubm8iKSk7Ci0gICAg
ZGVjb2RlZC50cnVuY2F0ZShkZWNvZGVkLmxlbmd0aCgpIC0gMyk7Ci0gICAgcmV0dXJuIGRlY29k
ZWQ7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lclF0OjpjbG9zZVdlYkluc3BlY3RvcigpCi17Ci0gICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvckNsb3NlKG1fZHJ0LT5wYWdlQWRh
cHRlcigpKTsKLSAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUo
UVdlYlNldHRpbmdzOjpEZXZlbG9wZXJFeHRyYXNFbmFibGVkLCBmYWxzZSk7Ci19Ci0KLXZvaWQg
VGVzdFJ1bm5lclF0OjpzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsK
LSAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRp
bmdzOjpEZXZlbG9wZXJFeHRyYXNFbmFibGVkLCBlbmFibGVkKTsKLX0KLQotdm9pZCBUZXN0UnVu
bmVyUXQ6OnNob3dXZWJJbnNwZWN0b3IoKQotewotICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRp
bmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkRldmVsb3BlckV4dHJhc0VuYWJsZWQs
IHRydWUpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNwZWN0b3JTaG93KG1f
ZHJ0LT5wYWdlQWRhcHRlcigpKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6OmV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKLXsKLSAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9yRXhlY3V0ZVNjcmlwdChtX2RydC0+
cGFnZUFkYXB0ZXIoKSwgY2FsbElkLCBzY3JpcHQpOwotfQotCi12b2lkIFRlc3RSdW5uZXJRdDo6
c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQotewotICAg
IG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6
OkxvY2FsQ29udGVudENhbkFjY2Vzc1JlbW90ZVVybHMsIGVuYWJsZWQpOwotfQotCi12b2lkIFRl
c3RSdW5uZXJRdDo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkK
LXsKLSAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNl
dHRpbmdzOjpMb2NhbENvbnRlbnRDYW5BY2Nlc3NGaWxlVXJscywgZW5hYmxlZCk7Ci19Ci0KLXZv
aWQgVGVzdFJ1bm5lclF0OjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9u
ZyBxdW90YSkKLXsKLSAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRPZmZsaW5l
V2ViQXBwbGljYXRpb25DYWNoZVF1b3RhKHF1b3RhKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6
OnNldFZhbHVlRm9yVXNlcihjb25zdCBRV2ViRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUVN0cmlu
ZyYgdmFsdWUpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFZhbHVlRm9yVXNl
cihlbGVtZW50LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lclF0OjpzZXRGaXhlZENvbnRl
bnRzU2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgbV90b3BMb2FkaW5nRnJhbWUt
PnBhZ2UoKS0+c2V0UHJlZmVycmVkQ29udGVudHNTaXplKFFTaXplKHdpZHRoLCBoZWlnaHQpKTsK
LX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBl
bmFibGUpCi17Ci0gICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRl
KFFXZWJTZXR0aW5nczo6UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCwgZW5hYmxlKTsKLX0KLQotdm9p
ZCBUZXN0UnVubmVyUXQ6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZSkK
LXsKLSAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNl
dHRpbmdzOjpTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQsIGVuYWJsZSk7Ci19Ci0KLXZvaWQgVGVz
dFJ1bm5lclF0OjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGVuYWJsZSkKLXsKLSAgICBt
X2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpK
YXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MsICFlbmFibGUpOwotfQotCi12b2lkIFRlc3RSdW5uZXJR
dDo6c2V0UE9TSVhMb2NhbGUoY29uc3QgUVN0cmluZyYgbG9jYWxlKQotewotICAgIFFMb2NhbGUg
cWxvY2FsZShsb2NhbGUpOwotICAgIFFMb2NhbGU6OnNldERlZmF1bHQocWxvY2FsZSk7Ci19IAot
Ci12b2lkIFRlc3RSdW5uZXJRdDo6c2V0V2luZG93SXNLZXkoYm9vbCBpc0tleSkKLXsKLSAgICBt
X2RydC0+c3dpdGNoRm9jdXMoaXNLZXkpOwotfQotCi12b2lkIFRlc3RSdW5uZXJRdDo6c2V0SmF2
YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGVuYWJsZSkKLXsKLSAgICBtX2RydC0+d2Vi
UGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0
Q2FuQWNjZXNzQ2xpcGJvYXJkLCBlbmFibGUpOwotfQotCi12b2lkIFRlc3RSdW5uZXJRdDo6c2V0
WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBlbmFibGUpCi17Ci0gICAgLy8gU2V0IFhTU0F1ZGl0aW5n
RW5hYmxlZCBnbG9iYWxseSBzbyB0aGF0IHdpbmRvd3MgY3JlYXRlZCBieSB0aGUgdGVzdCBpbmhl
cml0IGl0IHRvby4KLSAgICAvLyByZXNldFNldHRpbmdzKCkgd2lsbCBjYWxsIHRoaXMgdG8gcmVz
ZXQgdGhlIHBhZ2UgYW5kIGdsb2JhbCBzZXR0aW5nIHRvIGZhbHNlIGFnYWluLgotICAgIC8vIE5l
ZWRlZCBieSBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvbGluay1vcGVucy1uZXctd2lu
ZG93Lmh0bWwKLSAgICBRV2ViU2V0dGluZ3MqIGdsb2JhbFNldHRpbmdzID0gUVdlYlNldHRpbmdz
OjpnbG9iYWxTZXR0aW5ncygpOwotICAgIGdsb2JhbFNldHRpbmdzLT5zZXRBdHRyaWJ1dGUoUVdl
YlNldHRpbmdzOjpYU1NBdWRpdGluZ0VuYWJsZWQsIGVuYWJsZSk7Ci0gICAgbV9kcnQtPndlYlBh
Z2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6WFNTQXVkaXRpbmdF
bmFibGVkLCBlbmFibGUpOwotfQotCi12b2lkIFRlc3RSdW5uZXJRdDo6Y2xlYXJBbGxBcHBsaWNh
dGlvbkNhY2hlcygpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFyQWxsQXBw
bGljYXRpb25DYWNoZXMoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6OnNldEFwcGxpY2F0aW9u
Q2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCi17Ci0gICAgaWYgKCFt
X3RvcExvYWRpbmdGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fdG9wTG9hZGluZ0ZyYW1l
LT5zZWN1cml0eU9yaWdpbigpLnNldEFwcGxpY2F0aW9uQ2FjaGVRdW90YShxdW90YSk7Ci19Ci0K
LVFTdHJpbmdMaXN0IFRlc3RSdW5uZXJRdDo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKCkK
LXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIGdldCBvcmlnaW5zIHRoYXQgaGF2ZSBhcHBs
aWNhdGlvbiBjYWNoZXMuCi0gICAgcmV0dXJuIFFTdHJpbmdMaXN0KCk7Ci19Ci0KLXZvaWQgVGVz
dFJ1bm5lclF0OjpzZXREYXRhYmFzZVF1b3RhKGludCBzaXplKQotewotICAgIGlmICghbV90b3BM
b2FkaW5nRnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3RvcExvYWRpbmdGcmFtZS0+c2Vj
dXJpdHlPcmlnaW4oKS5zZXREYXRhYmFzZVF1b3RhKHNpemUpOwotfQotCi12b2lkIFRlc3RSdW5u
ZXJRdDo6Y2xlYXJBbGxEYXRhYmFzZXMoKQotewotICAgIFFXZWJEYXRhYmFzZTo6cmVtb3ZlQWxs
RGF0YWJhc2VzKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lclF0OjphZGRPcmlnaW5BY2Nlc3NXaGl0
ZWxpc3RFbnRyeShjb25zdCBRU3RyaW5nJiBzb3VyY2VPcmlnaW4sIGNvbnN0IFFTdHJpbmcmIGRl
c3RpbmF0aW9uUHJvdG9jb2wsIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBh
bGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6d2hpdGVMaXN0QWNjZXNzRnJvbU9yaWdpbihzb3VyY2VPcmlnaW4sIGRlc3RpbmF0aW9uUHJv
dG9jb2wsIGRlc3RpbmF0aW9uSG9zdCwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwotfQot
Ci12b2lkIFRlc3RSdW5uZXJRdDo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29u
c3QgUVN0cmluZyYgc291cmNlT3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvblByb3Rv
Y29sLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlv
blN1YmRvbWFpbnMpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlbW92ZVdoaXRl
TGlzdEFjY2Vzc0Zyb21PcmlnaW4oc291cmNlT3JpZ2luLCBkZXN0aW5hdGlvblByb3RvY29sLCBk
ZXN0aW5hdGlvbkhvc3QsIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKLX0KLQotdm9pZCBU
ZXN0UnVubmVyUXQ6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgZW5hYmxlZCwgYm9vbCBw
ZXJtaXNzaXZlKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRDdXN0b21Qb2xp
Y3lEZWxlZ2F0ZShlbmFibGVkLCBwZXJtaXNzaXZlKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6
OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCi17Ci0gICAgc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUo
dHJ1ZSk7Ci0gICAgbV93YWl0Rm9yUG9saWN5ID0gdHJ1ZTsKLSAgICB3YWl0VW50aWxEb25lKCk7
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lclF0OjpvdmVycmlkZVByZWZlcmVuY2UoY29uc3QgUVN0cmlu
ZyYgbmFtZSwgY29uc3QgUVZhcmlhbnQmIHZhbHVlKQotewotICAgIFFXZWJTZXR0aW5ncyogc2V0
dGluZ3MgPSBtX3RvcExvYWRpbmdGcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpOwotCi0gICAgaWYg
KG5hbWUgPT0gIldlYktpdEphdmFTY3JpcHRFbmFibGVkIikKLSAgICAgICAgc2V0dGluZ3MtPnNl
dEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRFbmFibGVkLCB2YWx1ZS50b0Jvb2wo
KSk7Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiV2ViS2l0VGFiVG9MaW5rc1ByZWZlcmVuY2VLZXki
KQotICAgICAgICBzZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6TGlua3NJbmNs
dWRlZEluRm9jdXNDaGFpbiwgdmFsdWUudG9Cb29sKCkpOwotICAgIGVsc2UgaWYgKG5hbWUgPT0g
IldlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCIpCi0gICAgICAgIHNldHRp
bmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNo
ZUVuYWJsZWQsIHZhbHVlLnRvQm9vbCgpKTsKLSAgICBlbHNlIGlmIChuYW1lID09ICJXZWJLaXRE
ZWZhdWx0Rm9udFNpemUiKQotICAgICAgICBzZXR0aW5ncy0+c2V0Rm9udFNpemUoUVdlYlNldHRp
bmdzOjpEZWZhdWx0Rm9udFNpemUsIHZhbHVlLnRvSW50KCkpOwotICAgIGVsc2UgaWYgKG5hbWUg
PT0gIldlYktpdFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5IikKLSAgICAgICAgUVdlYlNldHRp
bmdzOjpzZXRNYXhpbXVtUGFnZXNJbkNhY2hlKHZhbHVlLnRvSW50KCkpOwotICAgIGVsc2UgaWYg
KG5hbWUgPT0gIldlYktpdEVuYWJsZUNhcmV0QnJvd3NpbmciKQotICAgICAgICBzZXRDYXJldEJy
b3dzaW5nRW5hYmxlZCh2YWx1ZS50b0Jvb2woKSk7Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiV2Vi
S2l0UGx1Z2luc0VuYWJsZWQiKQotICAgICAgICBzZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJT
ZXR0aW5nczo6UGx1Z2luc0VuYWJsZWQsIHZhbHVlLnRvQm9vbCgpKTsKLSAgICBlbHNlIGlmIChu
YW1lID09ICJXZWJLaXRXZWJHTEVuYWJsZWQiKQotICAgICAgICBzZXR0aW5ncy0+c2V0QXR0cmli
dXRlKFFXZWJTZXR0aW5nczo6V2ViR0xFbmFibGVkLCB2YWx1ZS50b0Jvb2woKSk7Ci0gICAgZWxz
ZSBpZiAobmFtZSA9PSAiV2ViS2l0Q1NTUmVnaW9uc0VuYWJsZWQiKQotICAgICAgICBzZXR0aW5n
cy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6Q1NTUmVnaW9uc0VuYWJsZWQsIHZhbHVlLnRv
Qm9vbCgpKTsKLSAgICBlbHNlIGlmIChuYW1lID09ICJXZWJLaXRDU1NHcmlkTGF5b3V0RW5hYmxl
ZCIpCi0gICAgICAgIHNldHRpbmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpDU1NHcmlk
TGF5b3V0RW5hYmxlZCwgdmFsdWUudG9Cb29sKCkpOwotICAgIGVsc2UgaWYgKG5hbWUgPT0gIldl
YktpdEh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCIpCi0gICAgICAgIHNldHRpbmdzLT5zZXRBdHRy
aWJ1dGUoUVdlYlNldHRpbmdzOjpIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQsIHZhbHVlLnRvQm9v
bCgpKTsKLSAgICBlbHNlIGlmIChuYW1lID09ICJXZWJLaXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
RW5hYmxlZCIpCi0gICAgICAgIHNldHRpbmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgdmFsdWUudG9Cb29sKCkpOwotICAgIGVsc2Ug
aWYgKG5hbWUgPT0gIldlYktpdERpc3BsYXlJbWFnZXNLZXkiKQotICAgICAgICBzZXR0aW5ncy0+
c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6QXV0b0xvYWRJbWFnZXMsIHZhbHVlLnRvQm9vbCgp
KTsKLSAgICBlbHNlIGlmIChuYW1lID09ICJXZWJLaXRXZWJBdWRpb0VuYWJsZWQiKQotICAgICAg
ICBzZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6V2ViQXVkaW9FbmFibGVkLCB2
YWx1ZS50b0Jvb2woKSk7Ci0gICAgZWxzZQotICAgICAgICBwcmludGYoIkVSUk9SOiBUZXN0UnVu
bmVyOjpvdmVycmlkZVByZWZlcmVuY2UoKSBkb2VzIG5vdCBzdXBwb3J0IHRoZSAnJXMnIHByZWZl
cmVuY2VcbiIsCi0gICAgICAgICAgICBuYW1lLnRvTGF0aW4xKCkuZGF0YSgpKTsKLX0KLQotdm9p
ZCBUZXN0UnVubmVyUXQ6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29uc3QgUVN0cmluZyYg
dXJsKQotewotICAgIFFCeXRlQXJyYXkgdXJsRGF0YSA9IHBhdGhUb0xvY2FsUmVzb3VyY2UodXJs
KS50b0xhdGluMSgpOwotICAgIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IFFVcmw6OmZyb21F
bmNvZGVkKHVybERhdGEsIFFVcmw6OlN0cmljdE1vZGUpOwotCi0gICAgaWYgKG1fdXNlclN0eWxl
U2hlZXRFbmFibGVkKQotICAgICAgICBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQodHJ1ZSk7Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lclF0OjpzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChib29sIHZhbHVl
KQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRDYXJldEJyb3dzaW5nRW5hYmxl
ZChtX2RydC0+cGFnZUFkYXB0ZXIoKSwgdmFsdWUpOwotfQotCi12b2lkIFRlc3RSdW5uZXJRdDo6
c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQobV9kcnQtPnBh
Z2VBZGFwdGVyKCksIHZhbHVlKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6OnNldFVzZXJTdHls
ZVNoZWV0RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV91c2VyU3R5bGVTaGVldEVuYWJs
ZWQgPSBlbmFibGVkOwotCi0gICAgaWYgKGVuYWJsZWQpCi0gICAgICAgIG1fZHJ0LT53ZWJQYWdl
KCktPnNldHRpbmdzKCktPnNldFVzZXJTdHlsZVNoZWV0VXJsKG1fdXNlclN0eWxlU2hlZXRMb2Nh
dGlvbik7Ci0gICAgZWxzZQotICAgICAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5z
ZXRVc2VyU3R5bGVTaGVldFVybChRVXJsKCkpOwotfQotCi12b2lkIFRlc3RSdW5uZXJRdDo6c2V0
RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgY29u
c3QgUVN0cmluZyYgc2NoZW1lKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRE
b21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGZvcmJpZGRlbiwgc2NoZW1lKTsK
LX0KLQotYm9vbCBUZXN0UnVubmVyUXQ6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCi17Ci0g
ICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzaG91bGRDbG9zZShtX2RydC0+bWFp
bkZyYW1lQWRhcHRlcigpKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6OnNldFNjcm9sbGJhclBv
bGljeShjb25zdCBRU3RyaW5nJiBvcmllbnRhdGlvbiwgY29uc3QgUVN0cmluZyYgcG9saWN5KQot
ewotICAgIFF0OjpPcmllbnRhdGlvbiBvOwotICAgIFF0OjpTY3JvbGxCYXJQb2xpY3kgcDsKLQot
ICAgIGlmIChvcmllbnRhdGlvbiA9PSAidmVydGljYWwiKQotICAgICAgICBvID0gUXQ6OlZlcnRp
Y2FsOwotICAgIGVsc2UgaWYgKG9yaWVudGF0aW9uID09ICJob3Jpem9udGFsIikKLSAgICAgICAg
byA9IFF0OjpIb3Jpem9udGFsOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KHBvbGljeSA9PSAib24iKQotICAgICAgICBwID0gUXQ6OlNjcm9sbEJhckFsd2F5c09uOwotICAg
IGVsc2UgaWYgKHBvbGljeSA9PSAiYXV0byIpCi0gICAgICAgIHAgPSBRdDo6U2Nyb2xsQmFyQXNO
ZWVkZWQ7Ci0gICAgZWxzZSBpZiAocG9saWN5ID09ICJvZmYiKQotICAgICAgICBwID0gUXQ6OlNj
cm9sbEJhckFsd2F5c09mZjsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZHJ0
LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpLT5zZXRTY3JvbGxCYXJQb2xpY3kobywgcCk7Ci19Ci0K
LXZvaWQgVGVzdFJ1bm5lclF0OjpleGVjQ29tbWFuZChjb25zdCBRU3RyaW5nJiBuYW1lLCBjb25z
dCBRU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZXhlY3V0
ZUNvcmVDb21tYW5kQnlOYW1lKG1fZHJ0LT5wYWdlQWRhcHRlcigpLCBuYW1lLCB2YWx1ZSk7Ci19
Ci0KLWJvb2wgVGVzdFJ1bm5lclF0Ojppc0NvbW1hbmRFbmFibGVkKGNvbnN0IFFTdHJpbmcmIG5h
bWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojppc0NvbW1h
bmRFbmFibGVkKG1fZHJ0LT5wYWdlQWRhcHRlcigpLCBuYW1lKTsKLX0KLQotYm9vbCBUZXN0UnVu
bmVyOjpmaW5kU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiBzdHJpbmcs
IEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSkKLXsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gbGVuZ3RoUHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFBy
b3BlcnR5KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAw
KTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFFXZWJQYWdlOjpGaW5kRmxhZ3MgZmluZEZsYWdzID0g
UVdlYlBhZ2U6OkZpbmRDYXNlU2Vuc2l0aXZlbHk7Ci0KLSAgICBpbnQgbGVuZ3RoID0gc3RhdGlj
X2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWVSZWYg
dmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBvcHRpb25zQXJyYXks
IGksIDApOwotICAgICAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
b3B0aW9uTmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCkp
OwotICAgICAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdl
dCgpLCAiQ2FzZUluc2Vuc2l0aXZlIikpCi0gICAgICAgICAgICBmaW5kRmxhZ3MgJj0gflFXZWJQ
YWdlOjpGaW5kQ2FzZVNlbnNpdGl2ZWx5OwotICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJBdFdvcmRTdGFydHMiKSkKLSAgICAg
ICAgICAgIGZpbmRGbGFncyB8PSBRV2ViUGFnZTo6RmluZEF0V29yZEJlZ2lubmluZ3NPbmx5Owot
ICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUu
Z2V0KCksICJUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCIpKQotICAgICAgICAgICAgZmlu
ZEZsYWdzIHw9ICBRV2ViUGFnZTo6VHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkQmVnaW5uaW5nOwot
ICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUu
Z2V0KCksICJCYWNrd2FyZHMiKSkKLSAgICAgICAgICAgIGZpbmRGbGFncyB8PSAgUVdlYlBhZ2U6
OkZpbmRCYWNrd2FyZDsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhvcHRpb25OYW1lLmdldCgpLCAiV3JhcEFyb3VuZCIpKQotICAgICAgICAgICAgZmluZEZs
YWdzIHw9ICBRV2ViUGFnZTo6RmluZFdyYXBzQXJvdW5kRG9jdW1lbnQ7Ci0gICAgICAgIGVsc2Ug
aWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIlN0YXJ0
SW5TZWxlY3Rpb24iKSkKLSAgICAgICAgICAgIGZpbmRGbGFncyB8PSAgUVdlYlBhZ2U6OkZpbmRC
ZWdpbnNJblNlbGVjdGlvbjsKLSAgICB9Ci0KLSAgICBEdW1wUmVuZGVyVHJlZSogZHJ0ID0gRHVt
cFJlbmRlclRyZWU6Omluc3RhbmNlKCk7Ci0gICAgcmV0dXJuIGRydC0+d2ViUGFnZSgpLT5maW5k
VGV4dChKU1N0cmluZ0NvcHlRU3RyaW5nKHN0cmluZyksIGZpbmRGbGFncyk7Ci19Ci0KLXZvaWQg
VGVzdFJ1bm5lclF0OjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgZW5hYmxlKQotewotICAg
IGlmIChlbmFibGUgJiYgIW1fZHJ0LT5wZXJzaXN0ZW50U3RvcmFnZVBhdGgoKS5pc0VtcHR5KCkp
Ci0gICAgICAgIFFXZWJTZXR0aW5nczo6c2V0SWNvbkRhdGFiYXNlUGF0aChtX2RydC0+cGVyc2lz
dGVudFN0b3JhZ2VQYXRoKCkpOwotICAgIGVsc2UKLSAgICAgICAgUVdlYlNldHRpbmdzOjpzZXRJ
Y29uRGF0YWJhc2VQYXRoKFFTdHJpbmcoKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lclF0OjpzZXRN
b2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwg
Ym9vbCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBk
b3VibGUgZ2FtbWEpCi17Ci0gICAgUUxpc3Q8V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFs
bFBhZ2VzKCk7Ci0gICAgZm9yZWFjaCAoV2ViUGFnZSogcGFnZSwgcGFnZXMpCi0gICAgICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24ocGFnZS0+aGFu
ZGxlKCksIGNhblByb3ZpZGVBbHBoYSwgYWxwaGEsIGNhblByb3ZpZGVCZXRhLCBiZXRhLCBjYW5Q
cm92aWRlR2FtbWEsIGdhbW1hKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyUXQ6OnNldEdlb2xvY2F0
aW9uUGVybWlzc2lvbihib29sIGFsbG93KQotewotICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lv
bkNvbW1vbihhbGxvdyk7Ci0gICAgUUxpc3Q8V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFs
bFBhZ2VzKCk7Ci0gICAgZm9yZWFjaCAoV2ViUGFnZSogcGFnZSwgcGFnZXMpCi0gICAgICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKHBhZ2Ut
PmhhbmRsZSgpLCBhbGxvdyk7Ci19Ci0KLWludCBUZXN0UnVubmVyUXQ6Om51bWJlck9mUGVuZGlu
Z0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKLXsKLSAgICBpbnQgcGVuZGluZ1Blcm1p
c3Npb25Db3VudCA9IDA7Ci0gICAgUUxpc3Q8V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFs
bFBhZ2VzKCk7Ci0gICAgZm9yZWFjaCAoV2ViUGFnZSogcGFnZSwgcGFnZXMpCi0gICAgICAgIHBl
bmRpbmdQZXJtaXNzaW9uQ291bnQgKz0gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om51bWJlck9m
UGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKHBhZ2UtPmhhbmRsZSgpKTsKLQot
ICAgIHJldHVybiBwZW5kaW5nUGVybWlzc2lvbkNvdW50OwotfQotCi12b2lkIFRlc3RSdW5uZXJR
dDo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxsb3cpCi17Ci0gICAgIG1f
aXNHZW9sb2NhdGlvblBlcm1pc3Npb25TZXQgPSB0cnVlOwotICAgICBtX2dlb2xvY2F0aW9uUGVy
bWlzc2lvbiA9IGFsbG93OwotfQotCi12b2lkIFRlc3RSdW5uZXJRdDo6c2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpCi17Ci0g
ICAgUUxpc3Q8V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFsbFBhZ2VzKCk7Ci0gICAgZm9y
ZWFjaCAoV2ViUGFnZSogcGFnZSwgcGFnZXMpCi0gICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IocGFnZS0+aGFu
ZGxlKCksIG1lc3NhZ2UpOwotfQotCi12b2lkIFRlc3RSdW5uZXJRdDo6c2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNj
dXJhY3kpCi17Ci0gICAgUUxpc3Q8V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFsbFBhZ2Vz
KCk7Ci0gICAgZm9yZWFjaCAoV2ViUGFnZSogcGFnZSwgcGFnZXMpCi0gICAgICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihwYWdlLT5oYW5kbGUo
KSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kpOwotfQotCi12b2lkIFRlc3RSdW5uZXJR
dDo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKLXsKLSAgICBRV2ViSGlzdG9yeSogaGlzdG9yeSA9
IG1fZHJ0LT53ZWJQYWdlKCktPmhpc3RvcnkoKTsKLSAgICBoaXN0b3J5LT5jbGVhcigpOwotICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2tzKHRydWUp
OwotfQotCi12b2lkIFRlc3RSdW5uZXJRdDo6YWRkVVJMVG9SZWRpcmVjdChjb25zdCBRU3RyaW5n
JiBvcmlnaW4sIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uKQotewotICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjphZGRVUkxUb1JlZGlyZWN0KG9yaWdpbiwgZGVzdGluYXRpb24pOwotfQot
Ci12b2lkIFRlc3RSdW5uZXJRdDo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFjY2VwdCkK
LXsKLSAgICBRV2ViU2V0dGluZ3MqIGdsb2JhbFNldHRpbmdzID0gUVdlYlNldHRpbmdzOjpnbG9i
YWxTZXR0aW5ncygpOwotICAgIGlmIChhY2NlcHQpCi0gICAgICAgIGdsb2JhbFNldHRpbmdzLT5z
ZXRUaGlyZFBhcnR5Q29va2llUG9saWN5KFFXZWJTZXR0aW5nczo6QWx3YXlzQWxsb3dUaGlyZFBh
cnR5Q29va2llcyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgU2Fm
YXJpIHRoaXJkLXBhcnR5IGNvb2tpZSBibG9ja2luZyBwb2xpY3kgdGVzdGVkIGluIHRoaXJkLXBh
cnR5LWNvb2tpZS1yZWxheGluZy5odG1sCi0gICAgICAgIGdsb2JhbFNldHRpbmdzLT5zZXRUaGly
ZFBhcnR5Q29va2llUG9saWN5KFFXZWJTZXR0aW5nczo6QWxsb3dUaGlyZFBhcnR5V2l0aEV4aXN0
aW5nQ29va2llcyk7Ci0gICAgfQotfQotCi12b2lkIFRlc3RSdW5uZXJRdDo6c2V0QWx3YXlzQmxv
Y2tDb29raWVzKGJvb2wgYmxvY2spCi17Ci0gICAgUVdlYlNldHRpbmdzKiBnbG9iYWxTZXR0aW5n
cyA9IFFXZWJTZXR0aW5nczo6Z2xvYmFsU2V0dGluZ3MoKTsKLSAgICBpZiAoYmxvY2spCi0gICAg
ICAgIGdsb2JhbFNldHRpbmdzLT5zZXRUaGlyZFBhcnR5Q29va2llUG9saWN5KFFXZWJTZXR0aW5n
czo6QWx3YXlzQmxvY2tUaGlyZFBhcnR5Q29va2llcyk7Ci0gICAgZWxzZQotICAgICAgICBnbG9i
YWxTZXR0aW5ncy0+c2V0VGhpcmRQYXJ0eUNvb2tpZVBvbGljeShRV2ViU2V0dGluZ3M6OkFsd2F5
c0FsbG93VGhpcmRQYXJ0eUNvb2tpZXMpOwotfQotCi12b2lkIFRlc3RSdW5uZXJRdDo6c2V0QXVk
aW9SZXN1bHQoY29uc3QgUUJ5dGVBcnJheSYgYXVkaW9EYXRhKQotewotICAgIG1fYXVkaW9EYXRh
ID0gYXVkaW9EYXRhOwotICAgIG1fYXVkaW9EdW1wID0gdHJ1ZTsKLX0KLQotLy8gLS0tIEpTQyBD
IEFQSSBzdHVicwotCi12b2lkIFRlc3RSdW5uZXI6OmFkZERpc2FsbG93ZWRVUkwoSlNTdHJpbmdS
ZWYgdXJsKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1
cmwsIEpTU3RyaW5nUmVmIHRhcmdldCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZSogZHJ0ID0gRHVt
cFJlbmRlclRyZWU6Omluc3RhbmNlKCk7Ci0gICAgUVVybCBtYWluUmVzb3VyY2VVcmwgPSBkcnQt
PndlYlBhZ2UoKS0+bWFpbkZyYW1lKCktPnVybCgpOwotICAgIFFTdHJpbmcgYWJzb2x1dGVVcmwg
PSBtYWluUmVzb3VyY2VVcmwucmVzb2x2ZWQoUVVybChKU1N0cmluZ0NvcHlRU3RyaW5nKHVybCkp
KS50b0VuY29kZWQoKTsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEl0
ZW0oSlNTdHJpbmdDcmVhdGVXaXRoUVN0cmluZyhhYnNvbHV0ZVVybCkuZ2V0KCksIHRhcmdldCkp
OwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpCi17Ci19Ci0K
LXZvaWQgVGVzdFJ1bm5lcjo6c2V0QWNjZXB0c0VkaXRpbmcoYm9vbCkKLXsKLX0KLQotdm9pZCBU
ZXN0UnVubmVyOjpzaW11bGF0ZUxlZ2FjeVdlYk5vdGlmaWNhdGlvbkNsaWNrKEpTU3RyaW5nUmVm
IHRpdGxlKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFdpbmRvd0lzS2V5KGJvb2wpCi17
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sKQotewot
fQotCi12b2lkIFRlc3RSdW5uZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3Ry
aW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNT
dHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5z
KQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sKQotewot
fQotCi12b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQotewotfQot
Ci12b2lkIFRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0aW9u
TmFtZSkKLXsKLSAgICBRV2ViUGFnZSogd2ViUGFnZSA9IER1bXBSZW5kZXJUcmVlOjppbnN0YW5j
ZSgpLT53ZWJQYWdlKCk7Ci0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoZGly
ZWN0aW9uTmFtZSwgImF1dG8iKSkKLSAgICAgICAgd2ViUGFnZS0+dHJpZ2dlckFjdGlvbihRV2Vi
UGFnZTo6U2V0VGV4dERpcmVjdGlvbkRlZmF1bHQpOwotICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoZGlyZWN0aW9uTmFtZSwgInJ0bCIpKQotICAgICAgICB3ZWJQYWdl
LT50cmlnZ2VyQWN0aW9uKFFXZWJQYWdlOjpTZXRUZXh0RGlyZWN0aW9uUmlnaHRUb0xlZnQpOwot
ICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoZGlyZWN0aW9uTmFtZSwg
Imx0ciIpKQotICAgICAgICB3ZWJQYWdlLT50cmlnZ2VyQWN0aW9uKFFXZWJQYWdlOjpTZXRUZXh0
RGlyZWN0aW9uTGVmdFRvUmlnaHQpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6Om5vdGlmeURvbmUo
KQotewotfQotCi1pbnQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdHMoKQotewotICAgIHJldHVybiAwOwotfQotCi12b2lkIFRlc3RSdW5uZXI6
Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBrZXksIEpTU3RyaW5nUmVmIHZhbHVlKQot
ewotfQotCi1KU1N0cmluZ1JlZiBUZXN0UnVubmVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTQ29u
dGV4dFJlZiwgSlNTdHJpbmdSZWYgdXJsKQotewotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygwKTsgLy8gIyMjIFRha2UgaW1wbCBmcm9tIFdUUgotfQotCi12b2lkIFRl
c3RSdW5uZXI6OnJlbW92ZUFsbFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25zKCkKLXsKLX0KLQot
dm9pZCBUZXN0UnVubmVyOjpzaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKEpTVmFsdWVSZWYg
bm90aWZpY2F0aW9uKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OmNsb3NlSWRsZUxvY2FsU3Rv
cmFnZURhdGFiYXNlcygpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6Zm9jdXNXZWJWaWV3KCkK
LXsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlKQot
ewotfQotCi12b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUNocm9tZUlucHV0RmllbGQoKQotewotfQot
Ci12b2lkIFRlc3RSdW5uZXI6OmFkZENocm9tZUlucHV0RmllbGQoKQotewotfQotCi1KU1ZhbHVl
UmVmIFRlc3RSdW5uZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZiBjb250
ZXh0KQotewotICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bGwoY29udGV4dCk7Ci19Ci0KLXZvaWQg
VGVzdFJ1bm5lcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkKLXsKLX0KLQotdm9pZCBUZXN0UnVu
bmVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRlbnRp
ZmllcikKLXsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3Rp
ZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcikKLXsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzeW5j
TG9jYWxTdG9yYWdlKCkKLXsKLX0KLQotaW50IFRlc3RSdW5uZXI6OndpbmRvd0NvdW50KCkKLXsK
LSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRXYWl0VG9EdW1wKGJvb2wp
Ci17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKCkKLXsKLX0K
LQotc2l6ZV90IFRlc3RSdW5uZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQotewotICAgIHJldHVy
biAwOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNob3dXZWJJbnNwZWN0b3IoKQotewotfQotCi12
b2lkIFRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKLXsKLX0KLQotdm9pZCBUZXN0UnVu
bmVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0cmluZ1JlZiBzY3Jp
cHQpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wp
Ci17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVS
TChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKLXsKLX0KLQotdm9p
ZCBUZXN0UnVubmVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNldERlbGVnYXRlLCBi
b29sIHBlcm1pc3NpdmUpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90
YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0
RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgSlNT
dHJpbmdSZWYgc2NoZW1lKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OnJlc2V0UGFnZVZpc2li
aWxpdHkoKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldFBhZ2VWaXNpYmls
aXR5KER1bXBSZW5kZXJUcmVlOjppbnN0YW5jZSgpLT5wYWdlQWRhcHRlcigpKTsKLX0KLQotdm9p
ZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKiB2aXNpYmlsaXR5KQot
ewotICAgIFFMYXRpbjFTdHJpbmcgbmV3VmlzaWJpbGl0eSA9IFFMYXRpbjFTdHJpbmcodmlzaWJp
bGl0eSk7Ci0gICAgaWYgKG5ld1Zpc2liaWxpdHkgPT0gUVN0cmluZ0xpdGVyYWwoInZpc2libGUi
KSkKLSAgICAgICAgRHVtcFJlbmRlclRyZWU6Omluc3RhbmNlKCktPndlYlBhZ2UoKS0+c2V0Vmlz
aWJpbGl0eVN0YXRlKFFXZWJQYWdlOjpWaXNpYmlsaXR5U3RhdGVWaXNpYmxlKTsKLSAgICBlbHNl
IGlmIChuZXdWaXNpYmlsaXR5ID09IFFTdHJpbmdMaXRlcmFsKCJoaWRkZW4iKSkKLSAgICAgICAg
RHVtcFJlbmRlclRyZWU6Omluc3RhbmNlKCktPndlYlBhZ2UoKS0+c2V0VmlzaWJpbGl0eVN0YXRl
KFFXZWJQYWdlOjpWaXNpYmlsaXR5U3RhdGVIaWRkZW4pOwotICAgIGVsc2UgaWYgKG5ld1Zpc2li
aWxpdHkgPT0gUVN0cmluZ0xpdGVyYWwoInByZXJlbmRlciIpKQotICAgICAgICBEdW1wUmVuZGVy
VHJlZTo6aW5zdGFuY2UoKS0+d2ViUGFnZSgpLT5zZXRWaXNpYmlsaXR5U3RhdGUoUVdlYlBhZ2U6
OlZpc2liaWxpdHlTdGF0ZVByZXJlbmRlcik7Ci0gICAgZWxzZSBpZiAobmV3VmlzaWJpbGl0eSA9
PSBRU3RyaW5nTGl0ZXJhbCgidW5sb2FkZWQiKSkKLSAgICAgICAgRHVtcFJlbmRlclRyZWU6Omlu
c3RhbmNlKCktPndlYlBhZ2UoKS0+c2V0VmlzaWJpbGl0eVN0YXRlKFFXZWJQYWdlOjpWaXNpYmls
aXR5U3RhdGVVbmxvYWRlZCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6a2VlcFdlYkhpc3Rvcnko
KQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OmdvQmFjaygpCi17Ci0gICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmdvQmFjayhEdW1wUmVuZGVyVHJlZTo6aW5zdGFuY2UoKS0+cGFnZUFkYXB0
ZXIoKSk7Ci19Ci0KLUpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlv
bkNhY2hlKEpTQ29udGV4dFJlZiBjb250ZXh0KQotewotICAgIHJldHVybiBKU1ZhbHVlTWFrZU51
bGwoY29udGV4dCk7Ci19Ci0KLWxvbmcgbG9uZyBUZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hl
RGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG5hbWUpCi17Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheSgpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6
ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKCkKLXsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpj
bGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgpCi17Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6
Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUpT
U3RyaW5nUmVmIFRlc3RSdW5uZXI6OmNvcHlEZWNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFt
ZSkKLXsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoMCk7Ci19Ci0K
LXZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQotewotfQotCi12b2lkIFRl
c3RSdW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKLXsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpj
bGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oSlNTdHJpbmdSZWYgbmFtZSkKLXsKLX0KLQot
dm9pZCBUZXN0UnVubmVyOjphcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQotewot
fQotCi12b2lkIFRlc3RSdW5uZXI6OmF1dGhlbnRpY2F0ZVNlc3Npb24oSlNTdHJpbmdSZWYgdXJs
LCBKU1N0cmluZ1JlZiB1c2VybmFtZSwgSlNTdHJpbmdSZWYgcGFzc3dvcmQpCi17Ci19Ci0KLXZv
aWQgVGVzdFJ1bm5lcjo6YWJvcnRNb2RhbCgpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0
U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSkKLXsKLX0KLQotdm9pZCBUZXN0UnVu
bmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGZsYWcpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1
bm5lcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wpCi17Ci19Ci0KLXZvaWQgVGVz
dFJ1bm5lcjo6c2V0U2Nyb2xsYmFyUG9saWN5KEpTU3RyaW5nUmVmIG9yaWVudGF0aW9uLCBKU1N0
cmluZ1JlZiBwb2xpY3kpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0SmF2YVNjcmlwdENh
bkFjY2Vzc0NsaXBib2FyZChib29sIGZsYWcpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0
QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCBmbGFnKQotewotfQotCi12b2lkIFRl
c3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29sIGZsYWcpCi17Ci19Ci0KLXZv
aWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBwYXRo
KQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlN
b2RlKGJvb2wgZmxhZykKLXsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNU
aHJvdWdoRWxlbWVudHMoYm9vbCkKLXsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRQcml2YXRl
QnJvd3NpbmdFbmFibGVkKGJvb2wpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0UGx1Z2lu
c0VuYWJsZWQoYm9vbCkKLXsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRQb3B1cEJsb2NraW5n
RW5hYmxlZChib29sKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tTcGVlY2hJbnB1
dER1bXBSZWN0KGJvb2wgZmxhZykKLXsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRQZXJzaXN0
ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBwYXRoKQotewotfQotCi12b2lk
IFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwg
ZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUs
IGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBh
bHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJv
b2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6
OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihKU1N0cmluZ1JlZiBt
ZXNzYWdlKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlv
bihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3ZpZGVCZXRh
LCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSkKLXsKLX0K
LQotdm9pZCBUZXN0UnVubmVyOjpzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wgZmxh
ZykKLXsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wp
Ci17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wg
YWxsb3cpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGZs
YWcpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldERlZmVyc0xvYWRpbmcoRHVt
cFJlbmRlclRyZWU6Omluc3RhbmNlKCktPnBhZ2VBZGFwdGVyKCksIGZsYWcpOwotfQotCi12b2lk
IFRlc3RSdW5uZXI6OnNldENhY2hlTW9kZWwoaW50KQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6
OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1
bm5lcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpCi17Ci19Ci0KLXZvaWQg
VGVzdFJ1bm5lcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgcXVv
dGEpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9t
RmlsZVVSTHMoYm9vbCkKLXsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRBcHBsaWNhdGlvbkNh
Y2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nKQotewotfQotCi12b2lkIFRlc3RSdW5u
ZXI6OmRlbnlXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTU3RyaW5nUmVmIG9yaWdpbikKLXsK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjpncmFudFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSlNT
dHJpbmdSZWYgb3JpZ2luKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFZhbHVlRm9yVXNl
cihKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgSlNTdHJpbmdSZWYgdmFsdWUp
Ci17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0Vmlld01vZGVNZWRpYUZlYXR1cmUoSlNTdHJp
bmdSZWYpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0
KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIEpTU3RyaW5nUmVmIGxhbmd1
YWdlKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlz
dEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Q
cm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRp
b25TdWJkb21haW5zKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQoSlNT
dHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQotewotfQot
Ci1ib29sIFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFtZSkKLXsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0
LCBKU1N0cmluZ1JlZiBzY3JpcHQpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKER1bXBSZW5kZXJUcmVlOjppbnN0YW5jZSgpLT5t
YWluRnJhbWVBZGFwdGVyKCksIHdvcmxkSUQsIEpTU3RyaW5nQ29weVFTdHJpbmcoc2NyaXB0KSk7
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRS
ZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpT
U3RyaW5nUmVmIHNjcmlwdCkKLXsKLX0KLQotSlNTdHJpbmdSZWYgVGVzdFJ1bm5lcjo6Y29weUVu
Y29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKQotewotICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygwKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU3R5
bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQotewotICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjphZGRVc2VyU3R5bGVTaGVldChEdW1wUmVuZGVyVHJlZTo6aW5z
dGFuY2UoKS0+cGFnZUFkYXB0ZXIoKSwgSlNTdHJpbmdDb3B5UVN0cmluZyhzb3VyY2UpKTsKLX0K
LQotdm9pZCBUZXN0UnVubmVyOjpleGVjQ29tbWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmlu
Z1JlZiB2YWx1ZSkKLXsKLX0KLQotbG9uZyBsb25nIFRlc3RSdW5uZXI6OmxvY2FsU3RvcmFnZURp
c2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKQotewotICAgIHJl
dHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0UnVu
bmVyUXQuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjAyNmUxNDFiOGY4Y2Q5ZWNjYjdkYjBiOTg1MDQwY2Q2
MjMyM2M4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5oCisrKyAvZGV2L251bGwKQEAgLTEs
MjI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2gg
TW9iaWxlIEluYy4gaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVGVzdFJ1bm5lclF0
X2gKLSNkZWZpbmUgVGVzdFJ1bm5lclF0X2gKLQotI2luY2x1ZGUgPFFCYXNpY1RpbWVyPgotI2lu
Y2x1ZGUgPFFPYmplY3Q+Ci0jaW5jbHVkZSA8UVNpemU+Ci0jaW5jbHVkZSA8UVN0cmluZz4KLSNp
bmNsdWRlIDxRVGltZXI+Ci0jaW5jbHVkZSA8UVRpbWVyRXZlbnQ+Ci0jaW5jbHVkZSA8UVZhcmlh
bnQ+Ci0jaW5jbHVkZSA8UXREZWJ1Zz4KLQotI2luY2x1ZGUgPHF3ZWJkYXRhYmFzZS5oPgotI2lu
Y2x1ZGUgPHF3ZWJlbGVtZW50Lmg+Ci0jaW5jbHVkZSA8cXdlYmZyYW1lLmg+Ci0jaW5jbHVkZSA8
cXdlYmhpc3RvcnkuaD4KLSNpbmNsdWRlIDxxd2VicGFnZS5oPgotI2luY2x1ZGUgPHF3ZWJzZWN1
cml0eW9yaWdpbi5oPgotCi1jbGFzcyBRV2ViRnJhbWU7Ci1jbGFzcyBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDsKLWNsYXNzIER1bXBSZW5kZXJUcmVlOwotCi1jbGFzcyBUZXN0UnVubmVyUXQgOiBw
dWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLSAgICBRX1BST1BFUlRZKGludCB3ZWJIaXN0
b3J5SXRlbUNvdW50IFJFQUQgd2ViSGlzdG9yeUl0ZW1Db3VudCkKLSAgICBRX1BST1BFUlRZKGJv
b2wgZ2xvYmFsRmxhZyBSRUFEIGdsb2JhbEZsYWcgV1JJVEUgc2V0R2xvYmFsRmxhZykKLXB1Ymxp
YzoKLSAgICBUZXN0UnVubmVyUXQoRHVtcFJlbmRlclRyZWUqKTsKLQotICAgIGJvb2wgc2hvdWxk
RHVtcEFzQXVkaW8oKSBjb25zdCB7IHJldHVybiBtX2F1ZGlvRHVtcDsgfQotICAgIGJvb2wgc2hv
dWxkV2FpdFVudGlsRG9uZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2FpdEZvckRvbmU7IH0KLSAgICBi
b29sIHNob3VsZEhhbmRsZUVycm9yUGFnZXMoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZUVycm9y
UGFnZXM7IH0KLSAgICBib29sIHdhaXRGb3JQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX3dhaXRG
b3JQb2xpY3k7IH0KLSAgICBib29sIGlnbm9yZVJlcWVzdEZvclBlcm1pc3Npb24oKSBjb25zdCB7
IHJldHVybiBtX2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb247IH0KLQotICAgIGNvbnN0IFFCeXRl
QXJyYXkmIGF1ZGlvRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYXVkaW9EYXRhOyB9Ci0KLSAgICB2
b2lkIHJlc2V0KCk7Ci0KLSAgICB2b2lkIHNldFRpbWVvdXQoaW50IHRpbWVvdXQpIHsgbV90aW1l
b3V0ID0gdGltZW91dDsgfQotICAgIHZvaWQgc2V0U2hvdWxkVGltZW91dChib29sIGZsYWcpIHsg
bV9zaG91bGRUaW1lb3V0ID0gZmxhZzsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCB0aW1lckV2
ZW50KFFUaW1lckV2ZW50Kik7Ci0KLVFfU0lHTkFMUzoKLSAgICB2b2lkIGRvbmUoKTsKLQotICAg
IHZvaWQgc2hvd1BhZ2UoKTsKLSAgICB2b2lkIGhpZGVQYWdlKCk7Ci0gICAgdm9pZCBnZW9sb2Nh
dGlvblBlcm1pc3Npb25TZXQoKTsKLQotcHVibGljIFFfU0xPVFM6Ci0gICAgdm9pZCBtYXliZUR1
bXAoYm9vbCBvayk7Ci0gICAgdm9pZCBkdW1wTm90aWZpY2F0aW9ucygpOwotICAgIHZvaWQgd2Fp
dFVudGlsRG9uZSgpOwotICAgIGludCB3ZWJIaXN0b3J5SXRlbUNvdW50KCk7Ci0gICAgdm9pZCBr
ZWVwV2ViSGlzdG9yeSgpOwotICAgIHZvaWQgbm90aWZ5RG9uZSgpOwotICAgIGJvb2wgZ2xvYmFs
RmxhZygpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsRmxhZzsgfQotICAgIHZvaWQgc2V0R2xvYmFs
RmxhZyhib29sIGZsYWcpIHsgbV9nbG9iYWxGbGFnID0gZmxhZzsgfQotICAgIHZvaWQgaGFuZGxl
RXJyb3JQYWdlcygpIHsgbV9oYW5kbGVFcnJvclBhZ2VzID0gdHJ1ZTsgfQotICAgIHZvaWQgZHVt
cEVkaXRpbmdDYWxsYmFja3MoKTsKLSAgICB2b2lkIGR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKTsK
LSAgICB2b2lkIGR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soKTsKLSAgICB2b2lkIGR1bXBV
c2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKCk7Ci0gICAgdm9pZCBkdW1wUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzKCk7Ci0gICAgdm9pZCBkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygp
OwotICAgIHZvaWQgZHVtcFdpbGxDYWNoZVJlc3BvbnNlKCk7Ci0gICAgdm9pZCBkdW1wSGlzdG9y
eUNhbGxiYWNrcygpOwotICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJl
ZGlyZWN0KGJvb2wgZW5hYmxlZCk7Ci0gICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5z
TnVsbChib29sIGVuYWJsZWQpOwotICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFk
ZXIoY29uc3QgUVN0cmluZ0xpc3QmIGhlYWRlcnMpOwotICAgIHZvaWQgcXVldWVCYWNrTmF2aWdh
dGlvbihpbnQgaG93RmFyQmFja3dhcmQpOwotICAgIHZvaWQgcXVldWVGb3J3YXJkTmF2aWdhdGlv
bihpbnQgaG93RmFyRm9yd2FyZCk7Ci0gICAgdm9pZCBxdWV1ZUxvYWRIVE1MU3RyaW5nKGNvbnN0
IFFTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFFTdHJpbmcmIGJhc2VVUkwgPSBRU3RyaW5nKCksIGNv
bnN0IFFTdHJpbmcmIGZhaWxpbmdVUkwgPSBRU3RyaW5nKCkpOwotICAgIHZvaWQgcXVldWVSZWxv
YWQoKTsKLSAgICB2b2lkIHF1ZXVlTG9hZGluZ1NjcmlwdChjb25zdCBRU3RyaW5nJiBzY3JpcHQp
OwotICAgIHZvaWQgcXVldWVOb25Mb2FkaW5nU2NyaXB0KGNvbnN0IFFTdHJpbmcmIHNjcmlwdCk7
Ci0gICAgdm9pZCBwcm92aXNpb25hbExvYWQoKTsKLSAgICBpbnQgd2luZG93Q291bnQoKTsKLSAg
ICB2b2lkIGlnbm9yZUxlZ2FjeVdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpOwot
ICAgIHZvaWQgc2ltdWxhdGVMZWdhY3lXZWJOb3RpZmljYXRpb25DbGljayhjb25zdCBRU3RyaW5n
JiB0aXRsZSk7Ci0gICAgdm9pZCBncmFudFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oY29uc3Qg
UVN0cmluZyYgb3JpZ2luKTsKLSAgICB2b2lkIGRlbnlXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9u
KGNvbnN0IFFTdHJpbmcmIG9yaWdpbik7Ci0gICAgdm9pZCByZW1vdmVBbGxXZWJOb3RpZmljYXRp
b25QZXJtaXNzaW9ucygpOwotICAgIHZvaWQgZGlzcGxheSgpOwotICAgIHZvaWQgZGlzcGxheUlu
dmFsaWRhdGVkUmVnaW9uKCk7Ci0gICAgdm9pZCBjbGVhckJhY2tGb3J3YXJkTGlzdCgpOwotICAg
IFFTdHJpbmcgcGF0aFRvTG9jYWxSZXNvdXJjZShjb25zdCBRU3RyaW5nJiB1cmwpOwotICAgIFFT
dHJpbmcgZW5jb2RlSG9zdE5hbWUoY29uc3QgUVN0cmluZyYgaG9zdCk7Ci0gICAgUVN0cmluZyBk
ZWNvZGVIb3N0TmFtZShjb25zdCBRU3RyaW5nJiBob3N0KTsKLSAgICB2b2lkIGR1bXBTZWxlY3Rp
b25SZWN0KCkgY29uc3QgeyB9Ci0gICAgdm9pZCBzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJv
b2wpOwotICAgIHZvaWQgc2hvd1dlYkluc3BlY3RvcigpOwotICAgIHZvaWQgY2xvc2VXZWJJbnNw
ZWN0b3IoKTsKLSAgICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIGNv
bnN0IFFTdHJpbmcmIHNjcmlwdCk7Ci0gICAgdm9pZCByZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsK
LSAgICB2b2lkIHNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxl
KTsKLSAgICB2b2lkIHNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZSk7
Ci0gICAgdm9pZCBzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90
YSk7Ci0gICAgdm9pZCBzZXRWYWx1ZUZvclVzZXIoY29uc3QgUVdlYkVsZW1lbnQmLCBjb25zdCBR
U3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBzZXRGaXhlZENvbnRlbnRzU2l6ZShpbnQgd2lkdGgs
IGludCBoZWlnaHQpOwotICAgIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sKTsK
LSAgICB2b2lkIHNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNl
dFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wpOwotICAgIHZvaWQgc2V0UE9TSVhMb2NhbGUoY29u
c3QgUVN0cmluZyYgbG9jYWxlKTsKLSAgICB2b2lkIHJlc2V0TG9hZEZpbmlzaGVkKCkgeyBtX2xv
YWRGaW5pc2hlZCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRXaW5kb3dJc0tleShib29sKTsKLSAg
ICB2b2lkIHNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRK
YXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZW5hYmxlKTsKLSAgICB2b2lkIHNldFhT
U0F1ZGl0b3JFbmFibGVkKGJvb2wpOwotICAgIHZvaWQgc2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQo
Ym9vbCk7Ci0gICAgdm9pZCBzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sKTsKLSAg
ICB2b2lkIHNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKGNvbnN0IFFTdHJpbmcmIG1vZGUpOwotICAg
IHZvaWQgZXhlY0NvbW1hbmQoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVN0cmluZyYgdmFs
dWUgPSBRU3RyaW5nKCkpOwotICAgIGJvb2wgaXNDb21tYW5kRW5hYmxlZChjb25zdCBRU3RyaW5n
JiBuYW1lKSBjb25zdDsKLQotICAgIHZvaWQgYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnko
Y29uc3QgUVN0cmluZyYgc291cmNlT3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvblBy
b3RvY29sLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5h
dGlvblN1YmRvbWFpbnMpOwotICAgIHZvaWQgcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkoY29uc3QgUVN0cmluZyYgc291cmNlT3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlv
blByb3RvY29sLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0
aW5hdGlvblN1YmRvbWFpbnMpOwotCi0gICAgdm9pZCBjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVz
KCk7Ci0gICAgdm9pZCBzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9u
ZyBsb25nKTsKLSAgICBRU3RyaW5nTGlzdCBvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoKTsK
LQotICAgIHZvaWQgc2V0RGF0YWJhc2VRdW90YShpbnQgc2l6ZSk7Ci0gICAgdm9pZCBjbGVhckFs
bERhdGFiYXNlcygpOwotICAgIHZvaWQgc2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sKTsKLQot
ICAgIHZvaWQgc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCBlbmFibGVkLCBib29sIHBlcm1p
c3NpdmUgPSBmYWxzZSk7Ci0gICAgdm9pZCB3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKTsKLQotICAg
IHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKGNvbnN0IFFTdHJpbmcmIG5hbWUsIGNvbnN0IFFWYXJp
YW50JiB2YWx1ZSk7Ci0gICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IFFT
dHJpbmcmIHVybCk7Ci0gICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCk7Ci0g
ICAgdm9pZCBzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9y
YmlkZGVuLCBjb25zdCBRU3RyaW5nJiBzY2hlbWUpOwotICAgIGJvb2wgY2FsbFNob3VsZENsb3Nl
T25XZWJWaWV3KCk7Ci0KLSAgICB2b2lkIHNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sIGNh
blByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3ZpZGVCZXRhLCBkb3VibGUg
YmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSk7Ci0KLSAgICB2b2lkIHNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihjb25zdCBRU3RyaW5nJiBt
ZXNzYWdlKTsKLSAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRp
dHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KTsKLSAgICB2b2lkIHNldEdl
b2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KTsKLSAgICBpbnQgbnVtYmVyT2ZQZW5kaW5n
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKTsKLSAgICBib29sIGlzR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNl
dDsgfQotICAgIGJvb2wgZ2VvbG9jYXRpb25QZXJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9n
ZW9sb2NhdGlvblBlcm1pc3Npb247IH0KLQotICAgIHZvaWQgYWRkVVJMVG9SZWRpcmVjdChjb25z
dCBRU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uKTsKLQotICAgIC8q
Ci0gICAgICAgIFBvbGljeSB2YWx1ZXM6ICdvbicsICdhdXRvJyBvciAnb2ZmJy4KLSAgICAgICAg
T3JpZW50YXRpb24gdmFsdWVzOiAndmVydGljYWwnIG9yICdob3Jpem9udGFsJy4KLSAgICAqLwot
ICAgIHZvaWQgc2V0U2Nyb2xsYmFyUG9saWN5KGNvbnN0IFFTdHJpbmcmIG9yaWVudGF0aW9uLCBj
b25zdCBRU3RyaW5nJiBwb2xpY3kpOwotCi0gICAgdm9pZCBzZXRBbHdheXNBY2NlcHRDb29raWVz
KGJvb2wpOwotICAgIHZvaWQgc2V0QWx3YXlzQmxvY2tDb29raWVzKGJvb2wpOwotCi0gICAgdm9p
ZCBzZXRBdWRpb1Jlc3VsdChjb25zdCBRQnl0ZUFycmF5Jik7Ci0KLXByaXZhdGUgUV9TTE9UUzoK
LSAgICB2b2lkIHByb2Nlc3NXb3JrKCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzZXRHZW9sb2Nh
dGlvblBlcm1pc3Npb25Db21tb24oYm9vbCBhbGxvdyk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBt
X2hhc0R1bXBlZDsKLSAgICBib29sIG1fYXVkaW9EdW1wOwotICAgIGJvb2wgbV9kaXNhbGxvd0lu
Y3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhOwotICAgIGJvb2wgbV9jYW5PcGVuV2luZG93
czsKLSAgICBib29sIG1fd2FpdEZvckRvbmU7Ci0gICAgYm9vbCBtX3dhaXRGb3JQb2xpY3k7Ci0g
ICAgYm9vbCBtX2hhbmRsZUVycm9yUGFnZXM7Ci0gICAgYm9vbCBtX2xvYWRGaW5pc2hlZDsKLSAg
ICBib29sIG1fZ2xvYmFsRmxhZzsKLSAgICBib29sIG1fdXNlclN0eWxlU2hlZXRFbmFibGVkOwot
ICAgIGJvb2wgbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldDsKLSAgICBib29sIG1fZ2VvbG9j
YXRpb25QZXJtaXNzaW9uOwotCi0gICAgUVVybCBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb247Ci0g
ICAgUUJhc2ljVGltZXIgbV90aW1lb3V0VGltZXI7Ci0gICAgUVdlYkZyYW1lKiBtX3RvcExvYWRp
bmdGcmFtZTsKLSAgICBEdW1wUmVuZGVyVHJlZSogbV9kcnQ7Ci0gICAgUVdlYkhpc3RvcnkqIG1f
d2ViSGlzdG9yeTsKLSAgICBib29sIG1faWdub3JlRGVza3RvcE5vdGlmaWNhdGlvbjsKLQotICAg
IFFCeXRlQXJyYXkgbV9hdWRpb0RhdGE7Ci0KLSAgICBib29sIG1fc2hvdWxkVGltZW91dDsKLSAg
ICBpbnQgbV90aW1lb3V0OwotfTsKLQotI2VuZGlmIC8vIFRlc3RSdW5uZXJRdF9oCmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXh0SW5wdXRDb250cm9sbGVyUXQuY3BwIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvVGV4dElucHV0Q29udHJvbGxlclF0LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhlNDg5ZDc4ZjczNmYzMjQwYjUwMTIzMTJmZjcwNWNk
Yzc0NWYxNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXh0SW5wdXRDb250cm9sbGVyUXQuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0SW5wdXRDb250cm9sbGVyUXQuaCIKLSNpbmNsdWRl
ICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oIgotCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgot
I2luY2x1ZGUgPFFJbnB1dE1ldGhvZEV2ZW50PgotI2luY2x1ZGUgPFFLZXlFdmVudD4KLQotVGV4
dElucHV0Q29udHJvbGxlcjo6VGV4dElucHV0Q29udHJvbGxlcihRV2ViUGFnZSogcGFyZW50KQot
ICAgIDogUU9iamVjdChwYXJlbnQpCi17Ci19Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6
ZG9Db21tYW5kKGNvbnN0IFFTdHJpbmcmIGNvbW1hbmQpCi17Ci0gICAgUXQ6OktleWJvYXJkTW9k
aWZpZXJzIG1vZGlmaWVycyA9IFF0OjpOb01vZGlmaWVyOwotICAgIGludCBrZXljb2RlID0gMDsK
LSAgICBpZiAoY29tbWFuZCA9PSAibW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uOiIpIHsK
LSAgICAgICAgbW9kaWZpZXJzIHw9IFF0OjpTaGlmdE1vZGlmaWVyOwotICAgICAgICBrZXljb2Rl
ID0gUXQ6OktleV9MZWZ0OwotICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSJtb3ZlRG93bjoiKSB7
Ci0gICAgICAgIGtleWNvZGUgPSBRdDo6S2V5X0Rvd247Ci0gICAgfSBlbHNlIGlmIChjb21tYW5k
ID09Im1vdmVEb3duQW5kTW9kaWZ5U2VsZWN0aW9uOiIpIHsKLSAgICAgICAgbW9kaWZpZXJzIHw9
IFF0OjpTaGlmdE1vZGlmaWVyOwotICAgICAgICBrZXljb2RlID0gUXQ6OktleV9Eb3duOwotICAg
IH0gZWxzZSBpZiAoY29tbWFuZCA9PSJtb3ZlRm9yd2FyZDoiKSB7Ci0gICAgICAgIGtleWNvZGUg
PSBRdDo6S2V5X1JpZ2h0OwotICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSJtb3ZlRm9yd2FyZEFu
ZE1vZGlmeVNlbGVjdGlvbjoiKSB7Ci0gICAgICAgIG1vZGlmaWVycyB8PSBRdDo6U2hpZnRNb2Rp
ZmllcjsKLSAgICAgICAga2V5Y29kZSA9IFF0OjpLZXlfUmlnaHQ7Ci0gICAgfSBlbHNlIGlmIChj
b21tYW5kID09Im1vdmVMZWZ0OiIpIHsKLSAgICAgICAga2V5Y29kZSA9IFF0OjpLZXlfTGVmdDsK
LSAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0ibW92ZUxlZnRBbmRNb2RpZnlTZWxlY3Rpb246Iikg
ewotICAgICAgICBtb2RpZmllcnMgfD0gUXQ6OlNoaWZ0TW9kaWZpZXI7Ci0gICAgICAgIGtleWNv
ZGUgPSBRdDo6S2V5X0xlZnQ7Ci0gICAgfSBlbHNlIGlmIChjb21tYW5kID09Im1vdmVSaWdodDoi
KSB7Ci0gICAgICAgIGtleWNvZGUgPSBRdDo6S2V5X1JpZ2h0OwotICAgIH0gZWxzZSBpZiAoY29t
bWFuZCA9PSJtb3ZlUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb246IikgewotICAgICAgICBtb2RpZmll
cnMgfD0gUXQ6OlNoaWZ0TW9kaWZpZXI7Ci0gICAgICAgIGtleWNvZGUgPSBRdDo6S2V5X1JpZ2h0
OwotICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSJtb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50OiIp
IHsKLSAgICAgICAgbW9kaWZpZXJzIHw9IFF0OjpDb250cm9sTW9kaWZpZXI7Ci0gICAgICAgIGtl
eWNvZGUgPSBRdDo6S2V5X0hvbWU7Ci0gICAgfSBlbHNlIGlmIChjb21tYW5kID09Im1vdmVUb0Jl
Z2lubmluZ09mTGluZToiKSB7Ci0gICAgICAgIGtleWNvZGUgPSBRdDo6S2V5X0hvbWU7Ci0vLyAg
ICAgfSBlbHNlIGlmIChjb21tYW5kID09Im1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoOiIpIHsK
LSAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0ibW92ZVRvRW5kT2ZEb2N1bWVudDoiKSB7Ci0gICAg
ICAgIG1vZGlmaWVycyB8PSBRdDo6Q29udHJvbE1vZGlmaWVyOwotICAgICAgICBrZXljb2RlID0g
UXQ6OktleV9FbmQ7Ci0gICAgfSBlbHNlIGlmIChjb21tYW5kID09Im1vdmVUb0VuZE9mTGluZToi
KSB7Ci0gICAgICAgIGtleWNvZGUgPSBRdDo6S2V5X0VuZDsKLS8vICAgICB9IGVsc2UgaWYgKGNv
bW1hbmQgPT0ibW92ZVRvRW5kT2ZQYXJhZ3JhcGg6IikgewotICAgIH0gZWxzZSBpZiAoY29tbWFu
ZCA9PSJtb3ZlVXA6IikgewotICAgICAgICBrZXljb2RlID0gUXQ6OktleV9VcDsKLSAgICB9IGVs
c2UgaWYgKGNvbW1hbmQgPT0ibW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uOiIpIHsKLSAgICAgICAg
bW9kaWZpZXJzIHw9IFF0OjpTaGlmdE1vZGlmaWVyOwotICAgICAgICBrZXljb2RlID0gUXQ6Oktl
eV9VcDsKLSAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0ibW92ZVdvcmRCYWNrd2FyZDoiKSB7Ci0g
ICAgICAgIG1vZGlmaWVycyB8PSBRdDo6Q29udHJvbE1vZGlmaWVyOwotICAgICAgICBrZXljb2Rl
ID0gUXQ6OktleV9VcDsKLSAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0ibW92ZVdvcmRCYWNrd2Fy
ZEFuZE1vZGlmeVNlbGVjdGlvbjoiKSB7Ci0gICAgICAgIG1vZGlmaWVycyB8PSBRdDo6U2hpZnRN
b2RpZmllcjsKLSAgICAgICAgbW9kaWZpZXJzIHw9IFF0OjpDb250cm9sTW9kaWZpZXI7Ci0gICAg
ICAgIGtleWNvZGUgPSBRdDo6S2V5X0xlZnQ7Ci0gICAgfSBlbHNlIGlmIChjb21tYW5kID09Im1v
dmVXb3JkRm9yd2FyZDoiKSB7Ci0gICAgICAgIG1vZGlmaWVycyB8PSBRdDo6Q29udHJvbE1vZGlm
aWVyOwotICAgICAgICBrZXljb2RlID0gUXQ6OktleV9SaWdodDsKLSAgICB9IGVsc2UgaWYgKGNv
bW1hbmQgPT0ibW92ZVdvcmRGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uOiIpIHsKLSAgICAgICAg
bW9kaWZpZXJzIHw9IFF0OjpDb250cm9sTW9kaWZpZXI7Ci0gICAgICAgIG1vZGlmaWVycyB8PSBR
dDo6U2hpZnRNb2RpZmllcjsKLSAgICAgICAga2V5Y29kZSA9IFF0OjpLZXlfUmlnaHQ7Ci0gICAg
fSBlbHNlIGlmIChjb21tYW5kID09Im1vdmVXb3JkTGVmdDoiKSB7Ci0gICAgICAgIG1vZGlmaWVy
cyB8PSBRdDo6Q29udHJvbE1vZGlmaWVyOwotICAgICAgICBrZXljb2RlID0gUXQ6OktleV9MZWZ0
OwotICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSJtb3ZlV29yZFJpZ2h0OiIpIHsKLSAgICAgICAg
bW9kaWZpZXJzIHw9IFF0OjpDb250cm9sTW9kaWZpZXI7Ci0gICAgICAgIGtleWNvZGUgPSBRdDo6
S2V5X0xlZnQ7Ci0gICAgfSBlbHNlIGlmIChjb21tYW5kID09Im1vdmVXb3JkUmlnaHRBbmRNb2Rp
ZnlTZWxlY3Rpb246IikgewotICAgICAgICBtb2RpZmllcnMgfD0gUXQ6OlNoaWZ0TW9kaWZpZXI7
Ci0gICAgICAgIG1vZGlmaWVycyB8PSBRdDo6Q29udHJvbE1vZGlmaWVyOwotICAgICAgICBrZXlj
b2RlID0gUXQ6OktleV9SaWdodDsKLSAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0ibW92ZVdvcmRM
ZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uOiIpIHsKLSAgICAgICAgbW9kaWZpZXJzIHw9IFF0OjpTaGlm
dE1vZGlmaWVyOwotICAgICAgICBtb2RpZmllcnMgfD0gUXQ6OkNvbnRyb2xNb2RpZmllcjsKLSAg
ICAgICAga2V5Y29kZSA9IFF0OjpLZXlfTGVmdDsKLSAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0i
cGFnZURvd246IikgewotICAgICAgICBrZXljb2RlID0gUXQ6OktleV9QYWdlRG93bjsKLSAgICB9
IGVsc2UgaWYgKGNvbW1hbmQgPT0icGFnZVVwOiIpIHsKLSAgICAgICAga2V5Y29kZSA9IFF0OjpL
ZXlfUGFnZVVwOwotICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSAiZGVsZXRlV29yZEJhY2t3YXJk
OiIpIHsKLSAgICAgICAgbW9kaWZpZXJzIHw9IFF0OjpDb250cm9sTW9kaWZpZXI7Ci0gICAgICAg
IGtleWNvZGUgPSBRdDo6S2V5X0JhY2tzcGFjZTsKLSAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0g
ImRlbGV0ZUJhY2t3YXJkOiIpIHsKLSAgICAgICAga2V5Y29kZSA9IFF0OjpLZXlfQmFja3NwYWNl
OwotICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSAiZGVsZXRlRm9yd2FyZDoiKSB7Ci0gICAgICAg
IGtleWNvZGUgPSBRdDo6S2V5X0RlbGV0ZTsKLSAgICB9Ci0KLSAgICBRS2V5RXZlbnQgZXZlbnQo
UUV2ZW50OjpLZXlQcmVzcywga2V5Y29kZSwgbW9kaWZpZXJzKTsKLSAgICBRQXBwbGljYXRpb246
OnNlbmRFdmVudChwYXJlbnQoKSwgJmV2ZW50KTsKLSAgICBRS2V5RXZlbnQgZXZlbnQyKFFFdmVu
dDo6S2V5UmVsZWFzZSwga2V5Y29kZSwgbW9kaWZpZXJzKTsKLSAgICBRQXBwbGljYXRpb246OnNl
bmRFdmVudChwYXJlbnQoKSwgJmV2ZW50Mik7Ci19Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxl
cjo6c2V0TWFya2VkVGV4dChjb25zdCBRU3RyaW5nJiBzdHJpbmcsIGludCBzdGFydCwgaW50IGVu
ZCkKLXsKLSAgICBRTGlzdDxRSW5wdXRNZXRob2RFdmVudDo6QXR0cmlidXRlPiBhdHRyaWJ1dGVz
OwotICAgIFFJbnB1dE1ldGhvZEV2ZW50OjpBdHRyaWJ1dGUgc2VsZWN0aW9uKFFJbnB1dE1ldGhv
ZEV2ZW50OjpTZWxlY3Rpb24sIHN0YXJ0LCBlbmQsIFFWYXJpYW50KCkpOwotICAgIGF0dHJpYnV0
ZXMgPDwgc2VsZWN0aW9uOwotICAgIFFJbnB1dE1ldGhvZEV2ZW50IGV2ZW50KHN0cmluZywgYXR0
cmlidXRlcyk7Ci0gICAgUUFwcGxpY2F0aW9uOjpzZW5kRXZlbnQocGFyZW50KCksICZldmVudCk7
Ci19Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6aW5zZXJ0VGV4dChjb25zdCBRU3RyaW5n
JiBzdHJpbmcpCi17Ci0gICAgUUxpc3Q8UUlucHV0TWV0aG9kRXZlbnQ6OkF0dHJpYnV0ZT4gYXR0
cmlidXRlczsKLSAgICBRSW5wdXRNZXRob2RFdmVudCBldmVudChzdHJpbmcsIGF0dHJpYnV0ZXMp
OwotICAgIGV2ZW50LnNldENvbW1pdFN0cmluZyhzdHJpbmcpOwotICAgIFFBcHBsaWNhdGlvbjo6
c2VuZEV2ZW50KHBhcmVudCgpLCAmZXZlbnQpOwotfQotCi1RVmFyaWFudExpc3QgVGV4dElucHV0
Q29udHJvbGxlcjo6c2VsZWN0ZWRSYW5nZSgpCi17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpzZWxlY3RlZFJhbmdlKHFvYmplY3RfY2FzdDxRV2ViUGFnZSo+KHBhcmVudCgp
KS0+aGFuZGxlKCkpOwotfQotCi1RVmFyaWFudExpc3QgVGV4dElucHV0Q29udHJvbGxlcjo6Zmly
c3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UoaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoKQotewotICAg
IHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFu
Z2UocW9iamVjdF9jYXN0PFFXZWJQYWdlKj4ocGFyZW50KCkpLT5oYW5kbGUoKSwgbG9jYXRpb24s
IGxlbmd0aCk7Ci19Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6dW5tYXJrVGV4dCgpCi17
Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNvbmZpcm1Db21wb3NpdGlvbihxb2JqZWN0
X2Nhc3Q8UVdlYlBhZ2UqPihwYXJlbnQoKSktPmhhbmRsZSgpLCAwKTsKLX0KZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1RleHRJbnB1dENvbnRyb2xsZXJRdC5oIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvVGV4dElucHV0Q29udHJvbGxlclF0LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDI5NDAyNzM0MDkzNzk0NTUxZjUwNjFmMmFjNTJkNzBjZjNhY2I4M2Qu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvVGV4dElucHV0Q29udHJvbGxlclF0LmgKKysrIC9kZXYvbnVsbApAQCAt
MSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNo
IE1vYmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIFRleHRJbnB1dENv
bnRyb2xsZXJRdF9oCi0jZGVmaW5lIFRleHRJbnB1dENvbnRyb2xsZXJRdF9oCi0KLSNpbmNsdWRl
IDxRTGlzdD4KLSNpbmNsdWRlIDxRT2JqZWN0PgotI2luY2x1ZGUgPFFWYXJpYW50PgotI2luY2x1
ZGUgPFFTdHJpbmc+Ci0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKLQotY2xhc3MgVGV4dElucHV0Q29u
dHJvbGxlciA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAgIFRl
eHRJbnB1dENvbnRyb2xsZXIoUVdlYlBhZ2UqIHBhcmVudCk7Ci0KLXB1YmxpYyBRX1NMT1RTOgot
ICAgIHZvaWQgZG9Db21tYW5kKGNvbnN0IFFTdHJpbmcmIGNvbW1hbmQpOwotICAgIHZvaWQgc2V0
TWFya2VkVGV4dChjb25zdCBRU3RyaW5nJiBzdHJpbmcsIGludCBzdGFydCwgaW50IGVuZCk7Ci0v
LyAgICAgYm9vbCBoYXNNYXJrZWRUZXh0KCk7Ci0gICAgIHZvaWQgdW5tYXJrVGV4dCgpOwotLy8g
ICAgIFFMaXN0PGludD4gbWFya2VkUmFuZ2UoKTsKLSAgICBRVmFyaWFudExpc3Qgc2VsZWN0ZWRS
YW5nZSgpOwotLy8gICAgIHZvaWQgdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dCgpOwotICAg
IHZvaWQgaW5zZXJ0VGV4dChjb25zdCBRU3RyaW5nJiBzdHJpbmcpOwotICAgIFFWYXJpYW50TGlz
dCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShpbnQgbG9jYXRpb24sIGludCBsZW5ndGgpOwot
Ly8gICAgIHZvaWQgY2hhcmFjdGVySW5kZXhGb3JQb2ludChpbnQsIGludCk7Ci0vLyAgICAgdm9p
ZCBzdWJzdHJpbmdGcm9tUmFuZ2UoaW50LCBpbnQpOwotLy8gICAgIHZvaWQgY29udmVyc2F0aW9u
SWRlbnRpZmllcigpOwotfTsKLSNlbmRpZiAvLyBUZXh0SW5wdXRDb250cm9sbGVyUXRfaApkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvV29ya1F1ZXVlSXRlbVF0LmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L1dvcmtRdWV1ZUl0ZW1RdC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDI0MjNhM2I0OGM3NDY3N2EzNjhiNWJmYWZlZTFjZjg5MjYyMGE5NTAu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvV29ya1F1ZXVlSXRlbVF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEy
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1v
YmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiV29ya1F1ZXVlSXRlbVF0LmgiCi0KLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVF0
LmgiCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaCIKLSNpbmNsdWRlICJKU1N0
cmluZ1JlZlF0LmgiCi0KLVFXZWJGcmFtZSogZmluZEZyYW1lTmFtZWQoY29uc3QgUVN0cmluZyYg
ZnJhbWVOYW1lLCBRV2ViRnJhbWUqIGZyYW1lKQotewotICAgIGlmIChmcmFtZS0+ZnJhbWVOYW1l
KCkgPT0gZnJhbWVOYW1lKQotICAgICAgICByZXR1cm4gZnJhbWU7Ci0KLSAgICBmb3JlYWNoIChR
V2ViRnJhbWUqIGNoaWxkRnJhbWUsIGZyYW1lLT5jaGlsZEZyYW1lcygpKQotICAgICAgICBpZiAo
UVdlYkZyYW1lKiBmID0gZmluZEZyYW1lTmFtZWQoZnJhbWVOYW1lLCBjaGlsZEZyYW1lKSkKLSAg
ICAgICAgICAgIHJldHVybiBmOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgTG9hZEl0ZW06
Omludm9rZSgpIGNvbnN0Ci17Ci0gICAgLy9xRGVidWcoKSA8PCAiPj4+TG9hZEl0ZW06Omludm9r
ZSI7Ci0gICAgV2ViUGFnZSogd2ViUGFnZSA9IER1bXBSZW5kZXJUcmVlOjppbnN0YW5jZSgpLT53
ZWJQYWdlKCk7Ci0gICAgUV9BU1NFUlQod2ViUGFnZSk7Ci0KLSAgICBRV2ViRnJhbWUqIGZyYW1l
ID0gMDsKLSAgICBpZiAoSlNTdHJpbmdHZXRMZW5ndGgobV90YXJnZXQuZ2V0KCkpKQotICAgICAg
ICBmcmFtZSA9IGZpbmRGcmFtZU5hbWVkKEpTU3RyaW5nQ29weVFTdHJpbmcobV90YXJnZXQuZ2V0
KCkpLCB3ZWJQYWdlLT5tYWluRnJhbWUoKSk7Ci0gICAgZWxzZQotICAgICAgICBmcmFtZSA9IHdl
YlBhZ2UtPm1haW5GcmFtZSgpOwotCi0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgZnJhbWUtPmxvYWQoUVVybChKU1N0cmluZ0NvcHlRU3RyaW5nKG1fdXJsLmdl
dCgpKSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIExvYWRIVE1MU3RyaW5nSXRlbTo6
aW52b2tlKCkgY29uc3QKLXsKLSAgICBXZWJQYWdlKiB3ZWJQYWdlID0gRHVtcFJlbmRlclRyZWU6
Omluc3RhbmNlKCktPndlYlBhZ2UoKTsKLSAgICBRX0FTU0VSVCh3ZWJQYWdlKTsKLQotICAgIFFX
ZWJGcmFtZSogZnJhbWUgPSB3ZWJQYWdlLT5tYWluRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmcmFtZS0+c2V0SHRtbChKU1N0cmluZ0NvcHlR
U3RyaW5nKG1fY29udGVudC5nZXQoKSksIFFVcmwoSlNTdHJpbmdDb3B5UVN0cmluZyhtX2Jhc2VV
UkwuZ2V0KCkpKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTG9hZEFsdGVybmF0ZUhU
TUxTdHJpbmdJdGVtOjppbnZva2UoKSBjb25zdAotewotICAgIFdlYlBhZ2UqIHdlYlBhZ2UgPSBE
dW1wUmVuZGVyVHJlZTo6aW5zdGFuY2UoKS0+d2ViUGFnZSgpOwotICAgIFFfQVNTRVJUKHdlYlBh
Z2UpOwotCi0gICAgUVdlYkZyYW1lKiBmcmFtZSA9IHdlYlBhZ2UtPm1haW5GcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpzZXRBbHRlcm5hdGVIdG1sKGZyYW1lLT5oYW5kbGUoKSwgSlNTdHJpbmdDb3B5
UVN0cmluZyhtX2NvbnRlbnQuZ2V0KCkpLCBRVXJsKEpTU3RyaW5nQ29weVFTdHJpbmcobV9iYXNl
VVJMLmdldCgpKSksIFFVcmwoSlNTdHJpbmdDb3B5UVN0cmluZyhtX2ZhaWxpbmdVUkwuZ2V0KCkp
KSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVsb2FkSXRlbTo6aW52b2tlKCkgY29u
c3QKLXsKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj5SZWxvYWRJdGVtOjppbnZva2UiOwotICAgIFdl
YlBhZ2UqIHdlYlBhZ2UgPSBEdW1wUmVuZGVyVHJlZTo6aW5zdGFuY2UoKS0+d2ViUGFnZSgpOwot
ICAgIFFfQVNTRVJUKHdlYlBhZ2UpOwotICAgIHdlYlBhZ2UtPnRyaWdnZXJBY3Rpb24oUVdlYlBh
Z2U6OlJlbG9hZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU2NyaXB0SXRlbTo6aW52
b2tlKCkgY29uc3QKLXsKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj5TY3JpcHRJdGVtOjppbnZva2Ui
OwotICAgIFdlYlBhZ2UqIHdlYlBhZ2UgPSBEdW1wUmVuZGVyVHJlZTo6aW5zdGFuY2UoKS0+d2Vi
UGFnZSgpOwotICAgIFFfQVNTRVJUKHdlYlBhZ2UpOwotICAgIHdlYlBhZ2UtPm1haW5GcmFtZSgp
LT5ldmFsdWF0ZUphdmFTY3JpcHQoSlNTdHJpbmdDb3B5UVN0cmluZyhtX3NjcmlwdC5nZXQoKSkp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJhY2tGb3J3YXJkSXRlbTo6aW52b2tlKCkg
Y29uc3QKLXsKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj5CYWNrRm9yd2FyZEl0ZW06Omludm9rZSI7
Ci0gICAgV2ViUGFnZSogd2ViUGFnZSA9IER1bXBSZW5kZXJUcmVlOjppbnN0YW5jZSgpLT53ZWJQ
YWdlKCk7Ci0gICAgUV9BU1NFUlQod2ViUGFnZSk7Ci0gICAgaWYgKCFtX2hvd0ZhcikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1faG93RmFyID4gMCkgewotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSAhPSBtX2hvd0ZhcjsgKytpKQotICAgICAgICAgICAgd2ViUGFnZS0+dHJp
Z2dlckFjdGlvbihRV2ViUGFnZTo6Rm9yd2FyZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgIT0gbV9ob3dGYXI7IC0taSkKLSAgICAgICAgICAgIHdlYlBhZ2UtPnRy
aWdnZXJBY3Rpb24oUVdlYlBhZ2U6OkJhY2spOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1dvcmtRdWV1ZUl0ZW1RdC5oIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvV29ya1F1ZXVlSXRlbVF0LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGY1N2FiYjBlMjk5YTc0ZGYzZDAwYjMzZjNiNmY4NDFlZjVjNDkxOGMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvV29ya1F1ZXVlSXRlbVF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gaHR0cDov
L3d3dy50b3JjaG1vYmlsZS5jb20vCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXb3JrUXVldWVJdGVtUXRfaAotI2RlZmluZSBX
b3JrUXVldWVJdGVtUXRfaAotCi0jaW5jbHVkZSAiV29ya1F1ZXVlSXRlbS5oIgotI2luY2x1ZGUg
PHF3ZWJmcmFtZS5oPgotI2luY2x1ZGUgPHF3ZWJwYWdlLmg+Ci0KLWNsYXNzIExvYWRBbHRlcm5h
dGVIVE1MU3RyaW5nSXRlbSA6IHB1YmxpYyBXb3JrUXVldWVJdGVtIHsKLXB1YmxpYzoKLSAgICBM
b2FkQWx0ZXJuYXRlSFRNTFN0cmluZ0l0ZW0oY29uc3QgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
JiBjb250ZW50LCBjb25zdCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4mIGJhc2VVUkwsICBjb25z
dCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4mIGZhaWxpbmdVUkwpCi0gICAgICAgIDogbV9jb250
ZW50KGNvbnRlbnQpCi0gICAgICAgICwgbV9iYXNlVVJMKGJhc2VVUkwpCi0gICAgICAgICwgbV9m
YWlsaW5nVVJMKGZhaWxpbmdVUkwpCi0gICAgewotICAgIH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0
dWFsIGJvb2wgaW52b2tlKCkgY29uc3Q7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
bV9jb250ZW50OwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtX2Jhc2VVUkw7Ci0gICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1fZmFpbGluZ1VSTDsKLX07Ci0KLSNlbmRpZiAvLyAh
ZGVmaW5lZChXb3JrUXVldWVJdGVtUXRfaCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L3Jlc291cmNlcy91c2VyLmNzcyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L3Jlc291
cmNlcy91c2VyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYzOTgxOTk1YjZh
MGUyMmE0MzI5MDA1ODQ0ZDFiZDdhYTQ2NDIzNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9yZXNvdXJjZXMvdXNl
ci5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJvZHkgewotICAgIGZvbnQtc2l6
ZTogNTBweDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDApOwotfQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3F0L3Rlc3RwbHVnaW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1YjhiYzdlZTQ3YWZiODBmOTNjZmZk
OTJjZTgwYTU1ODE2YjE0NWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSAidGVzdHBsdWdpbi5o
IgotCi1UZXN0UGx1Z2luOjpUZXN0UGx1Z2luKFFPYmplY3QgKnBhcmVudCkKLSAgICA6IFFXZWJQ
bHVnaW5GYWN0b3J5KHBhcmVudCkKLXsKLX0KLQotVGVzdFBsdWdpbjo6flRlc3RQbHVnaW4oKQot
ewotfQotCi1RTGlzdDxRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2luPiBUZXN0UGx1Z2luOjpwbHVn
aW5zKCkgY29uc3QKLXsKLSAgICBRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2luIHBsdWdpbjsKLQot
ICAgIHBsdWdpbi5uYW1lID0gInRlc3RwbHVnaW4iOwotICAgIHBsdWdpbi5kZXNjcmlwdGlvbiA9
ICJ0ZXN0ZGVzY3JpcHRpb24iOwotICAgIE1pbWVUeXBlIG1pbWVUeXBlOwotICAgIG1pbWVUeXBl
Lm5hbWUgPSAidGVzdHR5cGUiOwotICAgIG1pbWVUeXBlLmZpbGVFeHRlbnNpb25zLmFwcGVuZCgi
dGVzdHN1ZmZpeGVzIik7Ci0gICAgcGx1Z2luLm1pbWVUeXBlcy5hcHBlbmQobWltZVR5cGUpOwot
Ci0gICAgcGx1Z2luLm5hbWUgPSAidGVzdHBsdWdpbjIiOwotICAgIHBsdWdpbi5kZXNjcmlwdGlv
biA9ICJ0ZXN0ZGVzY3JpcHRpb24yIjsKLSAgICBtaW1lVHlwZS5uYW1lID0gInRlc3R0eXBlMiI7
Ci0gICAgbWltZVR5cGUuZmlsZUV4dGVuc2lvbnMuYXBwZW5kKCJ0ZXN0c3VmZml4ZXMyIik7Ci0g
ICAgbWltZVR5cGUuZmlsZUV4dGVuc2lvbnMuYXBwZW5kKCJ0ZXN0c3VmZml4ZXMzIik7Ci0gICAg
cGx1Z2luLm1pbWVUeXBlcy5hcHBlbmQobWltZVR5cGUpOwotCi0gICAgcmV0dXJuIFFMaXN0PFFX
ZWJQbHVnaW5GYWN0b3J5OjpQbHVnaW4+KCkgPDwgcGx1Z2luOwotfQotCi1RT2JqZWN0ICpUZXN0
UGx1Z2luOjpjcmVhdGUoY29uc3QgUVN0cmluZyYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUVVybCYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmlu
Z0xpc3QmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0Jikg
Y29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvdGVzdHBsdWdpbi5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdp
bi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDhhMjhjZjM5ZmU4MTZiNmI5MDFl
MzllZWJmZjE2YjA2YTRlNWY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L3Rlc3RwbHVnaW4uaAorKysgL2Rldi9u
dWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxxd2VicGx1Z2luZmFj
dG9yeS5oPgotCi0KLWNsYXNzIFRlc3RQbHVnaW4gOiBwdWJsaWMgUVdlYlBsdWdpbkZhY3RvcnkK
LXsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXN0UGx1Z2luKFFPYmplY3QgKnBhcmVudCA9IDAp
OwotICAgIHZpcnR1YWwgflRlc3RQbHVnaW4oKTsKLQotICAgIHZpcnR1YWwgUUxpc3Q8UGx1Z2lu
PiBwbHVnaW5zKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFFPYmplY3QgKmNyZWF0ZShjb25zdCBR
U3RyaW5nICZtaW1lVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRVXJs
ICZ1cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFy
Z3VtZW50TmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xp
c3QgJmFyZ3VtZW50VmFsdWVzKSBjb25zdDsKLQotfTsKLQpkaWZmIC0tZ2l0IGEvVG9vbHMvSW1h
Z2VEaWZmL0ltYWdlRGlmZi5wcm8gYi9Ub29scy9JbWFnZURpZmYvSW1hZ2VEaWZmLnBybwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNlOGE0OTEwMjM1ZWFhN2ExNDgwMTMwMDdkNjFi
ZDRkMWQ2M2EzYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Ub29scy9JbWFnZURpZmYvSW1hZ2VEaWZmLnBybworKysgL2Rldi9udWxsCkBAIC0xLDE0ICsw
LDAgQEAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQcm9qZWN0IGZpbGUgZm9yIHRoZSBJbWFnZURpZmYgYmlu
YXJ5Ci0jCi0jIFNlZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhl
IGJ1aWxkIHN5c3RlbQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRFTVBMQVRFID0gYXBwCi0KLVRBUkdFVCA9
IEltYWdlRGlmZgotREVTVERJUiA9ICQkUk9PVF9CVUlMRF9ESVIvYmluCi0KLVFUID0gY29yZSBn
dWkgd2lkZ2V0cwotCi1TT1VSQ0VTID0gcXQvSW1hZ2VEaWZmLmNwcApkaWZmIC0tZ2l0IGEvVG9v
bHMvSW1hZ2VEaWZmL3F0L0ltYWdlRGlmZi5jcHAgYi9Ub29scy9JbWFnZURpZmYvcXQvSW1hZ2VE
aWZmLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE2MDg2YWE2MTU5NThiOGI1
MDQ3ZDUyNWJlZTM3MmE1OTg5MjExYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Ub29scy9JbWFnZURpZmYvcXQvSW1hZ2VEaWZmLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSA8UXRD
b3JlL3FtYXRoLmg+Ci0KLSNpbmNsdWRlIDxRQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UUJ1ZmZl
cj4KLSNpbmNsdWRlIDxRQnl0ZUFycmF5PgotI2luY2x1ZGUgPFFJbWFnZT4KLSNpbmNsdWRlIDxR
U3RyaW5nTGlzdD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLWludCBtYWluKGludCBhcmdjLCBj
aGFyKiBhcmd2W10pCi17Ci0gICAgUUNvcmVBcHBsaWNhdGlvbiBhcHAoYXJnYywgYXJndik7Ci0K
LSAgICBxcmVhbCB0b2xlcmFuY2UgPSAwOyAvLyBUb2xlcmF0ZWQgcGVyY2VudGFnZSBvZiBlcnJv
ciBwaXhlbHMuCi0KLSAgICBRU3RyaW5nTGlzdCBhcmdzID0gYXBwLmFyZ3VtZW50cygpOwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgYXJnYzsgKytpKQotICAgICAgICBpZiAoYXJnc1tpXSA9PSAi
LXQiIHx8IGFyZ3NbaV0gPT0gIi0tdG9sZXJhbmNlIikKLSAgICAgICAgICAgIHRvbGVyYW5jZSA9
IGFyZ3NbaSArIDFdLnRvRG91YmxlKCk7Ci0KLSAgICBjaGFyIGJ1ZmZlclsyMDQ4XTsKLSAgICBR
SW1hZ2UgYWN0dWFsSW1hZ2U7Ci0gICAgUUltYWdlIGJhc2VsaW5lSW1hZ2U7Ci0KLSAgICB3aGls
ZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RkaW4pKSB7Ci0gICAgICAgIC8vIHJl
bW92ZSB0aGUgQ1IKLSAgICAgICAgY2hhciogbmV3TGluZUNoYXJhY3RlciA9IHN0cmNocihidWZm
ZXIsICdcbicpOwotICAgICAgICBpZiAobmV3TGluZUNoYXJhY3RlcikKLSAgICAgICAgICAgICpu
ZXdMaW5lQ2hhcmFjdGVyID0gJ1wwJzsKLQotICAgICAgICBpZiAoIXN0cm5jbXAoIkNvbnRlbnQt
TGVuZ3RoOiAiLCBidWZmZXIsIDE2KSkgewotICAgICAgICAgICAgc3RydG9rKGJ1ZmZlciwgIiAi
KTsKLSAgICAgICAgICAgIGludCBpbWFnZVNpemUgPSBzdHJ0b2woc3RydG9rKDAsICIgIiksIDAs
IDEwKTsKLQotICAgICAgICAgICAgaWYgKGltYWdlU2l6ZSA8PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgZnB1dHMoImVycm9yLCBpbWFnZSBzaXplIG11c3QgYmUgc3BlY2lmaWVkLlxuIiwgc3Rkb3V0
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBi
dWZmZXJbMjA0OF07Ci0gICAgICAgICAgICAgICAgUUJ1ZmZlciBkYXRhOwotCi0gICAgICAgICAg
ICAgICAgLy8gUmVhZCBhbGwgdGhlIGluY29taW5nIGNodW5rcwotICAgICAgICAgICAgICAgIGRh
dGEub3BlbihRQnVmZmVyOjpXcml0ZU9ubHkpOwotICAgICAgICAgICAgICAgIHdoaWxlIChpbWFn
ZVNpemUgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNpemVfdCBieXRlc1RvUmVhZCA9IHFN
aW4oaW1hZ2VTaXplLCAyMDQ4KTsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ5dGVzUmVh
ZCA9IGZyZWFkKGJ1ZmZlciwgMSwgYnl0ZXNUb1JlYWQsIHN0ZGluKTsKLSAgICAgICAgICAgICAg
ICAgICAgZGF0YS53cml0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpLCBi
eXRlc1JlYWQpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZVNpemUgLT0gc3RhdGljX2Nhc3Q8
aW50PihieXRlc1JlYWQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IENvbnZlcnQgaW50byBRSW1hZ2UKLSAgICAgICAgICAgICAgICBRSW1hZ2UgZGVjb2RlZEltYWdl
OwotICAgICAgICAgICAgICAgIGRlY29kZWRJbWFnZS5sb2FkRnJvbURhdGEoZGF0YS5kYXRhKCks
ICJQTkciKTsKLSAgICAgICAgICAgICAgICBkZWNvZGVkSW1hZ2UgPSBkZWNvZGVkSW1hZ2UuY29u
dmVydFRvRm9ybWF0KFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7Ci0KLSAgICAgICAgICAgICAgICAv
LyBQbGFjZSBpdCBpbiB0aGUgcmlnaHQgcGxhY2UKLSAgICAgICAgICAgICAgICBpZiAoYWN0dWFs
SW1hZ2UuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIGFjdHVhbEltYWdlID0gZGVjb2Rl
ZEltYWdlOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFzZWxp
bmVJbWFnZSA9IGRlY29kZWRJbWFnZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICghYWN0dWFsSW1hZ2UuaXNOdWxsKCkgJiYgIWJhc2VsaW5lSW1hZ2UuaXNOdWxsKCkp
IHsKLQotICAgICAgICAgICAgaWYgKGFjdHVhbEltYWdlLnNpemUoKSAhPSBiYXNlbGluZUltYWdl
LnNpemUoKSkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiZGlmZjogMTAwJSUg
ZmFpbGVkXG4iKTsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yLCB0ZXN0
IGFuZCByZWZlcmVuY2UgaW1hZ2UgaGF2ZSBkaWZmZXJlbnQgcHJvcGVydGllcy5cbiIpOwotICAg
ICAgICAgICAgICAgIGZmbHVzaChzdGRlcnIpOwotICAgICAgICAgICAgICAgIGZmbHVzaChzdGRv
dXQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLQotICAgICAgICAgICAgICAgIGludCB3ID0gYWN0
dWFsSW1hZ2Uud2lkdGgoKTsKLSAgICAgICAgICAgICAgICBpbnQgaCA9IGFjdHVhbEltYWdlLmhl
aWdodCgpOwotICAgICAgICAgICAgICAgIFFJbWFnZSBkaWZmSW1hZ2UodywgaCwgUUltYWdlOjpG
b3JtYXRfQVJHQjMyKTsKLQotICAgICAgICAgICAgICAgIGludCBlcnJvckNvdW50ID0gMDsKLQot
ICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgKyt4KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgKyt5KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBRUmdiIHBpeGVsID0gYWN0dWFsSW1hZ2UucGl4ZWwoeCwgeSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBRUmdiIGJhc2VQaXhlbCA9IGJhc2VsaW5lSW1hZ2UucGl4ZWwoeCwgeSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBxcmVhbCByZWQgPSAocVJlZChwaXhlbCkgLSBxUmVk
KGJhc2VQaXhlbCkpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHFNYXgoMjU1IC0gcVJlZChiYXNlUGl4
ZWwpLCBxUmVkKGJhc2VQaXhlbCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHFyZWFsIGdy
ZWVuID0gKHFHcmVlbihwaXhlbCkgLSBxR3JlZW4oYmFzZVBpeGVsKSkgLyBzdGF0aWNfY2FzdDxm
bG9hdD4ocU1heCgyNTUgLSBxR3JlZW4oYmFzZVBpeGVsKSwgcUdyZWVuKGJhc2VQaXhlbCkpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHFyZWFsIGJsdWUgPSAocUJsdWUocGl4ZWwpIC0gcUJs
dWUoYmFzZVBpeGVsKSkgLyBzdGF0aWNfY2FzdDxmbG9hdD4ocU1heCgyNTUgLSBxQmx1ZShiYXNl
UGl4ZWwpLCBxQmx1ZShiYXNlUGl4ZWwpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxcmVh
bCBhbHBoYSA9IChxQWxwaGEocGl4ZWwpIC0gcUFscGhhKGJhc2VQaXhlbCkpIC8gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHFNYXgoMjU1IC0gcUFscGhhKGJhc2VQaXhlbCksIHFBbHBoYShiYXNlUGl4ZWwp
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxcmVhbCBkaXN0YW5jZSA9IHFTcXJ0KHJlZCAq
IHJlZCArIGdyZWVuICogZ3JlZW4gKyBibHVlICogYmx1ZSArIGFscGhhICogYWxwaGEpIC8gMi4w
ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSAxIC8gcXJlYWwoMjU1
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ291bnQrKzsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaWZmSW1hZ2Uuc2V0UGl4ZWwoeCwgeSwgcVJnYigyNTUsIDAs
IDApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZmZJbWFnZS5zZXRQaXhlbCh4LCB5LCBxUmdiYShxUmVkKGJhc2VQaXhlbCks
IHFHcmVlbihiYXNlUGl4ZWwpLCBxQmx1ZShiYXNlUGl4ZWwpLCBxQWxwaGEoYmFzZVBpeGVsKSAq
IDAuNSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgcXJlYWwgZGlmZmVyZW5jZSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGVy
cm9yQ291bnQpCi0gICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UgPSAxMDAgKiBlcnJvckNv
dW50IC8gc3RhdGljX2Nhc3Q8cXJlYWw+KHcgKiBoKTsKLQotICAgICAgICAgICAgICAgIGlmIChk
aWZmZXJlbmNlIDw9IHRvbGVyYW5jZSkKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRv
dXQsICJkaWZmOiAlMDEuMmYlJSBwYXNzZWRcbiIsIGRpZmZlcmVuY2UpOwotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBRQnVmZmVyIGJ1ZmZlcjsKLSAgICAgICAg
ICAgICAgICAgICAgYnVmZmVyLm9wZW4oUUJ1ZmZlcjo6V3JpdGVPbmx5KTsKLSAgICAgICAgICAg
ICAgICAgICAgZGlmZkltYWdlLnNhdmUoJmJ1ZmZlciwgIlBORyIpOwotICAgICAgICAgICAgICAg
ICAgICBidWZmZXIuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUUJ5dGVBcnJh
eSAmZGF0YSA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiQ29u
dGVudC1MZW5ndGg6ICVsdVxuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oZGF0YS5sZW5n
dGgoKSkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gdXNlIHRoZSByZXR1
cm4gdmFsdWUgb2YgZndyaXRlIHRvIGF2b2lkICJpZ25vcmluZyByZXR1cm4gdmFsdWUiIGdjYyB3
YXJuaW5nCi0gICAgICAgICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDUzODQgZm9yIGRldGFpbHMuCi0gICAgICAgICAgICAgICAgICAg
IGlmIChmd3JpdGUoZGF0YS5jb25zdERhdGEoKSwgMSwgZGF0YS5sZW5ndGgoKSwgc3Rkb3V0KSkg
e30KLQotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgImRpZmY6ICUwMS4yZiUl
IGZhaWxlZFxuIiwgZGlmZmVyZW5jZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhY3R1YWxJ
bWFnZSA9IFFJbWFnZSgpOwotICAgICAgICAgICAgYmFzZWxpbmVJbWFnZSA9IFFJbWFnZSgpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9N
aW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jy
b3dzZXJXaW5kb3cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDcyZDVjZmQw
YzNhZDc1NjE5ODdlYmE3NDgyMDhiNGYyNWMzMmRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJCcm93c2VyV2luZG93LmgiCi0KLSNp
bmNsdWRlICJwcml2YXRlL3FxdWlja3dlYnBhZ2VfcC5oIgotI2luY2x1ZGUgInByaXZhdGUvcXF1
aWNrd2Vidmlld19wLmgiCi0jaW5jbHVkZSAidXRpbHMuaCIKLQotI2luY2x1ZGUgPFFRbWxFbmdp
bmU+Ci0jaW5jbHVkZSA8UURpcj4KLSNpbmNsdWRlIDxRUG9pbnRGPgotCi1Ccm93c2VyV2luZG93
OjpCcm93c2VyV2luZG93KFdpbmRvd09wdGlvbnMqIG9wdGlvbnMpCi0gICAgOiBtX3dpbmRvd09w
dGlvbnMob3B0aW9ucykKLXsKLSAgICBzZXRUaXRsZSgiTWluaUJyb3dzZXIiKTsKLSAgICBzZXRG
bGFncyhRdDo6V2luZG93IHwgUXQ6OldpbmRvd1RpdGxlSGludCB8IFF0OjpXaW5kb3dNaW5NYXhC
dXR0b25zSGludCB8IFF0OjpXaW5kb3dDbG9zZUJ1dHRvbkhpbnQpOwotICAgIHNldFJlc2l6ZU1v
ZGUoUVF1aWNrVmlldzo6U2l6ZVJvb3RPYmplY3RUb1ZpZXcpOwotCi0gICAgLy8gVGhpcyBhbGxv
d3Mgc3RhcnRpbmcgTWluaUJyb3dzZXIgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5IHdpdGhvdXQg
cHJldmlvdXNseSBkZWZpbmluZyBRTUxfSU1QT1JUX1BBVEguCi0gICAgUURpciBxbWxJbXBvcnRE
aXIgPSBRRGlyKFFDb3JlQXBwbGljYXRpb246OmFwcGxpY2F0aW9uRGlyUGF0aCgpKTsKLSAgICBx
bWxJbXBvcnREaXIuY2QoIi4uL2ltcG9ydHMiKTsKLSAgICBlbmdpbmUoKS0+YWRkSW1wb3J0UGF0
aChxbWxJbXBvcnREaXIuY2Fub25pY2FsUGF0aCgpKTsKLQotICAgIFV0aWxzKiB1dGlscyA9IG5l
dyBVdGlscyh0aGlzKTsKLSAgICBlbmdpbmUoKS0+cm9vdENvbnRleHQoKS0+c2V0Q29udGV4dFBy
b3BlcnR5KCJ1dGlscyIsIHV0aWxzKTsKLSAgICBlbmdpbmUoKS0+cm9vdENvbnRleHQoKS0+c2V0
Q29udGV4dFByb3BlcnR5KCJvcHRpb25zIiwgb3B0aW9ucyk7Ci0gICAgc2V0U291cmNlKFFVcmwo
InFyYzovLy9xbWwvQnJvd3NlcldpbmRvdy5xbWwiKSk7Ci0gICAgY29ubmVjdChyb290T2JqZWN0
KCksIFNJR05BTChwYWdlVGl0bGVDaGFuZ2VkKFFTdHJpbmcpKSwgdGhpcywgU0xPVChvblRpdGxl
Q2hhbmdlZChRU3RyaW5nKSkpOwotICAgIGNvbm5lY3Qocm9vdE9iamVjdCgpLCBTSUdOQUwobmV3
V2luZG93KFFTdHJpbmcpKSwgdGhpcywgU0xPVChuZXdXaW5kb3coUVN0cmluZykpKTsKLSAgICBp
ZiAob3B0aW9ucy0+c3RhcnRGdWxsU2NyZWVuKCkpCi0gICAgICAgIHNob3dGdWxsU2NyZWVuKCk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChvcHRpb25zLT5zdGFydE1heGltaXplZCgpKQotICAg
ICAgICAgICAgc2V0V2luZG93U3RhdGUoUXQ6OldpbmRvd01heGltaXplZCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJlc2l6ZShvcHRpb25zLT5yZXF1ZXN0ZWRXaW5kb3dTaXplKCkpOwot
ICAgICAgICBzaG93KCk7Ci0gICAgfQotCi0gICAgUVFtbENvbnRleHQqIGNvbnRleHQgPSByb290
Q29udGV4dCgpOwotICAgIGNvbnRleHQtPnNldENvbnRleHRQcm9wZXJ0eSgiV2luZG93IiwgdGhp
cyk7Ci0KLSAgICBpZiAoIW9wdGlvbnMtPnVzZXJBZ2VudCgpLmlzTnVsbCgpKQotICAgICAgICB3
ZWJWaWV3RXhwZXJpbWVudGFsKCktPnNldFVzZXJBZ2VudChvcHRpb25zLT51c2VyQWdlbnQoKSk7
Ci0KLSAgICAvLyBab29tIHZhbHVlcyBhcmUgY2hvc2VuIHRvIGJlIGxpa2UgaW4gTW96aWxsYSBG
aXJlZm94IDMuCi0gICAgbV96b29tTGV2ZWxzIDw8IDAuMyA8PCAwLjUgPDwgMC42NyA8PCAwLjgg
PDwgMC45Ci0gICAgICAgICAgICAgICAgIDw8IDEKLSAgICAgICAgICAgICAgICAgPDwgMS4xMSA8
PCAxLjIyIDw8IDEuMzMgPDwgMS41IDw8IDEuNyA8PCAyIDw8IDIuNCA8PCAzOwotCi0gICAgbV9j
dXJyZW50Wm9vbUxldmVsID0gbV96b29tTGV2ZWxzLmluZGV4T2YoMSk7Ci19Ci0KLVFRdWlja1dl
YlZpZXcqIEJyb3dzZXJXaW5kb3c6OndlYlZpZXcoKSBjb25zdAotewotICAgIHJldHVybiByb290
T2JqZWN0KCktPnByb3BlcnR5KCJ3ZWJ2aWV3IikudmFsdWU8UVF1aWNrV2ViVmlldyo+KCk7Ci19
Ci0KLVFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwqIEJyb3dzZXJXaW5kb3c6OndlYlZpZXdFeHBl
cmltZW50YWwoKSBjb25zdAotewotICAgIHJldHVybiB3ZWJWaWV3KCktPnByb3BlcnR5KCJleHBl
cmltZW50YWwiKS52YWx1ZTxRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsKj4oKTsKLX0KLQotdm9p
ZCBCcm93c2VyV2luZG93Ojpsb2FkKGNvbnN0IFFTdHJpbmcmIHVybCkKLXsKLSAgICBRVXJsIGNv
bXBsZXRlZFVybCA9IFV0aWxzOjp1cmxGcm9tVXNlcklucHV0KHVybCk7Ci0gICAgUU1ldGFPYmpl
Y3Q6Omludm9rZU1ldGhvZChyb290T2JqZWN0KCksICJsb2FkIiwgUXQ6OkRpcmVjdENvbm5lY3Rp
b24sIFFfQVJHKFFWYXJpYW50LCBjb21wbGV0ZWRVcmwpKTsKLX0KLQotdm9pZCBCcm93c2VyV2lu
ZG93OjpyZWxvYWQoKQotewotICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2Qocm9vdE9iamVj
dCgpLCAicmVsb2FkIiwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotfQotCi12b2lkIEJyb3dzZXJX
aW5kb3c6OmZvY3VzQWRkcmVzc0JhcigpCi17Ci0gICAgUU1ldGFPYmplY3Q6Omludm9rZU1ldGhv
ZChyb290T2JqZWN0KCksICJmb2N1c0FkZHJlc3NCYXIiLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7
Ci19Ci0KLXZvaWQgQnJvd3NlcldpbmRvdzo6dG9nZ2xlRmluZCgpCi17Ci0gICAgUU1ldGFPYmpl
Y3Q6Omludm9rZU1ldGhvZChyb290T2JqZWN0KCksICJ0b2dnbGVGaW5kIiwgUXQ6OkRpcmVjdENv
bm5lY3Rpb24pOwotfQotCi1Ccm93c2VyV2luZG93KiBCcm93c2VyV2luZG93OjpuZXdXaW5kb3co
Y29uc3QgUVN0cmluZyYgdXJsKQotewotICAgIEJyb3dzZXJXaW5kb3cqIHdpbmRvdyA9IG5ldyBC
cm93c2VyV2luZG93KG1fd2luZG93T3B0aW9ucyk7Ci0gICAgd2luZG93LT5sb2FkKHVybCk7Ci0g
ICAgcmV0dXJuIHdpbmRvdzsKLX0KLQotdm9pZCBCcm93c2VyV2luZG93Ojp1cGRhdGVWaXN1YWxN
b2NrVG91Y2hQb2ludHMoY29uc3QgUUxpc3Q8UVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQ+JiB0b3Vj
aFBvaW50cykKLXsKLSAgICBpZiAodG91Y2hQb2ludHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8v
IEhpZGUgYWxsIHRvdWNoIGluZGljYXRvciBpdGVtcy4KLSAgICAgICAgZm9yZWFjaCAoUVF1aWNr
SXRlbSogaXRlbSwgbV9hY3RpdmVNb2NrQ29tcG9uZW50cy52YWx1ZXMoKSkKLSAgICAgICAgICAg
IGl0ZW0tPnNldFByb3BlcnR5KCJwcmVzc2VkIiwgZmFsc2UpOwotCi0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBmb3JlYWNoIChjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgdG91
Y2hQb2ludCwgdG91Y2hQb2ludHMpIHsKLSAgICAgICAgUVF1aWNrSXRlbSogbW9ja1RvdWNoUG9p
bnRJdGVtID0gbV9hY3RpdmVNb2NrQ29tcG9uZW50cy52YWx1ZSh0b3VjaFBvaW50LmlkKCkpOwot
Ci0gICAgICAgIGlmICghbW9ja1RvdWNoUG9pbnRJdGVtKSB7Ci0gICAgICAgICAgICBRUW1sQ29t
cG9uZW50IHRvdWNoTW9ja1BvaW50Q29tcG9uZW50KGVuZ2luZSgpLCBRVXJsKCJxcmM6Ly8vcW1s
L01vY2tUb3VjaFBvaW50LnFtbCIpKTsKLSAgICAgICAgICAgIG1vY2tUb3VjaFBvaW50SXRlbSA9
IHFvYmplY3RfY2FzdDxRUXVpY2tJdGVtKj4odG91Y2hNb2NrUG9pbnRDb21wb25lbnQuY3JlYXRl
KCkpOwotICAgICAgICAgICAgUV9BU1NFUlQobW9ja1RvdWNoUG9pbnRJdGVtKTsKLSAgICAgICAg
ICAgIG1fYWN0aXZlTW9ja0NvbXBvbmVudHMuaW5zZXJ0KHRvdWNoUG9pbnQuaWQoKSwgbW9ja1Rv
dWNoUG9pbnRJdGVtKTsKLSAgICAgICAgICAgIG1vY2tUb3VjaFBvaW50SXRlbS0+c2V0UHJvcGVy
dHkoInBvaW50SWQiLCBRVmFyaWFudCh0b3VjaFBvaW50LmlkKCkpKTsKLSAgICAgICAgICAgIG1v
Y2tUb3VjaFBvaW50SXRlbS0+c2V0UGFyZW50KHJvb3RPYmplY3QoKSk7Ci0gICAgICAgICAgICBt
b2NrVG91Y2hQb2ludEl0ZW0tPnNldFBhcmVudEl0ZW0ocm9vdE9iamVjdCgpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFFSZWN0RiB0b3VjaFJlY3QgPSB0b3VjaFBvaW50LnJlY3QoKTsKLSAgICAg
ICAgbW9ja1RvdWNoUG9pbnRJdGVtLT5zZXRYKHRvdWNoUmVjdC5jZW50ZXIoKS54KCkpOwotICAg
ICAgICBtb2NrVG91Y2hQb2ludEl0ZW0tPnNldFkodG91Y2hSZWN0LmNlbnRlcigpLnkoKSk7Ci0g
ICAgICAgIG1vY2tUb3VjaFBvaW50SXRlbS0+c2V0V2lkdGgodG91Y2hSZWN0LndpZHRoKCkpOwot
ICAgICAgICBtb2NrVG91Y2hQb2ludEl0ZW0tPnNldEhlaWdodCh0b3VjaFJlY3QuaGVpZ2h0KCkp
OwotICAgICAgICBtb2NrVG91Y2hQb2ludEl0ZW0tPnNldFByb3BlcnR5KCJwcmVzc2VkIiwgUVZh
cmlhbnQodG91Y2hQb2ludC5zdGF0ZSgpICE9IFF0OjpUb3VjaFBvaW50UmVsZWFzZWQpKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgQnJvd3NlcldpbmRvdzo6c2NyZWVuc2hvdCgpCi17Ci19Ci0KLUJyb3dz
ZXJXaW5kb3c6On5Ccm93c2VyV2luZG93KCkKLXsKLX0KLQotdm9pZCBCcm93c2VyV2luZG93Ojpv
blRpdGxlQ2hhbmdlZChRU3RyaW5nIHRpdGxlKQotewotICAgIGlmICh0aXRsZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHRpdGxlID0gUUxhdGluMVN0cmluZygiTWluaUJyb3dzZXIiKTsKLSAgICBzZXRU
aXRsZSh0aXRsZSk7Ci19Ci0KLXZvaWQgQnJvd3NlcldpbmRvdzo6em9vbUluKCkKLXsKLSAgICBp
ZiAobV9jdXJyZW50Wm9vbUxldmVsIDwgbV96b29tTGV2ZWxzLnNpemUoKSAtIDEpCi0gICAgICAg
ICsrbV9jdXJyZW50Wm9vbUxldmVsOwotICAgIHdlYlZpZXcoKS0+c2V0Wm9vbUZhY3RvcihtX3pv
b21MZXZlbHNbbV9jdXJyZW50Wm9vbUxldmVsXSk7Ci19Ci0KLXZvaWQgQnJvd3NlcldpbmRvdzo6
em9vbU91dCgpCi17Ci0gICAgaWYgKG1fY3VycmVudFpvb21MZXZlbCA+IDApCi0gICAgICAgIC0t
bV9jdXJyZW50Wm9vbUxldmVsOwotICAgIHdlYlZpZXcoKS0+c2V0Wm9vbUZhY3RvcihtX3pvb21M
ZXZlbHNbbV9jdXJyZW50Wm9vbUxldmVsXSk7Ci19Ci0KLXZvaWQgQnJvd3NlcldpbmRvdzo6a2V5
UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2ZW50KQotewotCi0gICAgaWYgKGV2ZW50LT5tb2RpZmll
cnMoKSAmIFF0OjpDb250cm9sTW9kaWZpZXIpIHsKLSAgICAgICAgYm9vbCBoYW5kbGVkOwotICAg
ICAgICBpZiAoKGhhbmRsZWQgPSBldmVudC0+a2V5KCkgPT0gUXQ6OktleV9QbHVzKSkKLSAgICAg
ICAgICAgIHpvb21JbigpOwotICAgICAgICBlbHNlIGlmICgoaGFuZGxlZCA9IGV2ZW50LT5rZXko
KSA9PSBRdDo6S2V5X01pbnVzKSkKLSAgICAgICAgICAgIHpvb21PdXQoKTsKLQotICAgICAgICBp
ZiAoaGFuZGxlZCkgewotICAgICAgICAgICAgZXZlbnQtPmFjY2VwdCgpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIFFRdWlja1ZpZXc6OmtleVByZXNzRXZlbnQo
ZXZlbnQpOwotfQotCi12b2lkIEJyb3dzZXJXaW5kb3c6OndoZWVsRXZlbnQoUVdoZWVsRXZlbnQq
IGV2ZW50KQotewotICAgIGlmIChldmVudC0+bW9kaWZpZXJzKCkgJiBRdDo6Q29udHJvbE1vZGlm
aWVyICYmIGV2ZW50LT5vcmllbnRhdGlvbigpID09IFF0OjpWZXJ0aWNhbCkgewotICAgICAgICBp
ZiAoZXZlbnQtPmRlbHRhKCkgPiAwKQotICAgICAgICAgICAgem9vbUluKCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHpvb21PdXQoKTsKLQotICAgICAgICBldmVudC0+YWNjZXB0KCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUVF1aWNrVmlldzo6d2hlZWxFdmVudChldmVudCk7
Ci19CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmggYi9U
b29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDJlY2ZjMTQ1M2EzMjhkMWY1ZjgxZWMxODU0ZjM5ZDA2OTRhNWIyZGIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvTWluaUJyb3dz
ZXIvcXQvQnJvd3NlcldpbmRvdy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAot
ICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBCcm93c2VyV2luZG93
X2gKLSNkZWZpbmUgQnJvd3NlcldpbmRvd19oCi0KLSNpbmNsdWRlICJNaW5pQnJvd3NlckFwcGxp
Y2F0aW9uLmgiCi0jaW5jbHVkZSA8UVN0cmluZ0xpc3Q+Ci0jaW5jbHVkZSA8UXRRdWljay9RUXVp
Y2tWaWV3PgotCi1jbGFzcyBRUXVpY2tXZWJWaWV3OwotY2xhc3MgUVF1aWNrV2ViVmlld0V4cGVy
aW1lbnRhbDsKLQotY2xhc3MgQnJvd3NlcldpbmRvdyA6IHB1YmxpYyBRUXVpY2tWaWV3IHsKLSAg
ICBRX09CSkVDVAotCi1wdWJsaWM6Ci0gICAgQnJvd3NlcldpbmRvdyhXaW5kb3dPcHRpb25zKik7
Ci0gICAgfkJyb3dzZXJXaW5kb3coKTsKLSAgICB2b2lkIGxvYWQoY29uc3QgUVN0cmluZyYgdXJs
KTsKLSAgICB2b2lkIHJlbG9hZCgpOwotICAgIHZvaWQgZm9jdXNBZGRyZXNzQmFyKCk7Ci0gICAg
dm9pZCB0b2dnbGVGaW5kKCk7Ci0gICAgUVF1aWNrV2ViVmlldyogd2ViVmlldygpIGNvbnN0Owot
ICAgIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwqIHdlYlZpZXdFeHBlcmltZW50YWwoKSBjb25z
dDsKLQotICAgIHZvaWQgdXBkYXRlVmlzdWFsTW9ja1RvdWNoUG9pbnRzKGNvbnN0IFFMaXN0PFFU
b3VjaEV2ZW50OjpUb3VjaFBvaW50PiYgdG91Y2hQb2ludHMpOwotCi1wdWJsaWMgUV9TTE9UUzoK
LSAgICBCcm93c2VyV2luZG93KiBuZXdXaW5kb3coY29uc3QgUVN0cmluZyYgdXJsID0gImFib3V0
OmJsYW5rIik7Ci0KLXByb3RlY3RlZCBRX1NMT1RTOgotICAgIHZvaWQgc2NyZWVuc2hvdCgpOwot
Ci1wcml2YXRlIFFfU0xPVFM6Ci0gICAgdm9pZCBvblRpdGxlQ2hhbmdlZChRU3RyaW5nKTsKLQot
cHJpdmF0ZToKLSAgICB2b2lkIHpvb21JbigpOwotICAgIHZvaWQgem9vbU91dCgpOwotCi0gICAg
dmlydHVhbCB2b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lk
IHdoZWVsRXZlbnQoUVdoZWVsRXZlbnQqKTsKLQotICAgIFdpbmRvd09wdGlvbnMqIG1fd2luZG93
T3B0aW9uczsKLSAgICBRSGFzaDxpbnQsIFFRdWlja0l0ZW0qPiBtX2FjdGl2ZU1vY2tDb21wb25l
bnRzOwotICAgIFFWZWN0b3I8cXJlYWw+IG1fem9vbUxldmVsczsKLSAgICB1bnNpZ25lZCBtX2N1
cnJlbnRab29tTGV2ZWw7Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93
c2VyL3F0L01pbmlCcm93c2VyLnBybyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2Vy
LnBybwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RiMWM3ODg3YzQyOWYwM2E1YjM2
OTAxZWViZmNkYmU2YmI1MWE2OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5wcm8KKysrIC9kZXYv
bnVsbApAQCAtMSwzOCArMCwwIEBACi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUHJvamVjdCBmaWxlIGZvciB0
aGUgV2ViS2l0MiBNaW5pQnJvd3NlciBiaW5hcnkKLSMKLSMgU2VlICdUb29scy9xbWFrZS9SRUFE
TUUnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgYnVpbGQgc3lzdGVtCi0jIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
VEVNUExBVEUgPSBhcHAKLQotV0VCS0lUICs9IHd0ZgotCi1JTkNMVURFUEFUSCArPSBcCi0gICAg
JCR7Uk9PVF9XRUJLSVRfRElSfS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdCBcCi0gICAgJCR7
Uk9PVF9XRUJLSVRfRElSfS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC8KLQotU09VUkNFUyArPSBc
Ci0gICAgQnJvd3NlcldpbmRvdy5jcHAgXAotICAgIG1haW4uY3BwIFwKLSAgICBNaW5pQnJvd3Nl
ckFwcGxpY2F0aW9uLmNwcCBcCi0gICAgVXJsTG9hZGVyLmNwcCBcCi0gICAgdXRpbHMuY3BwIFwK
LQotSEVBREVSUyArPSBcCi0gICAgQnJvd3NlcldpbmRvdy5oIFwKLSAgICBNaW5pQnJvd3NlckFw
cGxpY2F0aW9uLmggXAotICAgIFVybExvYWRlci5oIFwKLSAgICB1dGlscy5oIFwKLQotVEFSR0VU
ID0gTWluaUJyb3dzZXIKLURFU1RESVIgPSAkJHtST09UX0JVSUxEX0RJUn0vYmluCi0KLWhhdmU/
KEZPTlRDT05GSUcpOiBQS0dDT05GSUcgKz0gZm9udGNvbmZpZwotCi1RVCArPSBuZXR3b3JrIGd1
aS1wcml2YXRlIHF1aWNrIHF1aWNrLXByaXZhdGUgd2Via2l0IHdlYmtpdC1wcml2YXRlCi1tYWN4
OiBRVCArPSB4bWwKLQotUkVTT1VSQ0VTICs9IE1pbmlCcm93c2VyLnFyYwotCi1PVEhFUl9GSUxF
UyArPSBxbWwvKgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIu
cXJjIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucXJjCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzZmE2MjA4YTBlNGQyZjZiZDA1ZWQzN2FlNjEwZmYyZTM0MGJlYmY4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01p
bmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnFyYworKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAg
QEAKLTxSQ0M+Ci0gICAgPHFyZXNvdXJjZSBwcmVmaXg9Ii8iPgotICAgICAgICA8ZmlsZT5pY29u
cy9jaGVja2JveF9jaGVja2VkLnBuZzwvZmlsZT4KLSAgICAgICAgPGZpbGU+aWNvbnMvY2hlY2ti
b3hfdW5jaGVja2VkLnBuZzwvZmlsZT4KLSAgICAgICAgPGZpbGU+aWNvbnMvY29udGVudHNfd2lk
dGgucG5nPC9maWxlPgotICAgICAgICA8ZmlsZT5pY29ucy9mYXZpY29uLnBuZzwvZmlsZT4KLSAg
ICAgICAgPGZpbGU+aWNvbnMvZmluZC5wbmc8L2ZpbGU+Ci0gICAgICAgIDxmaWxlPmljb25zL2Zv
bGRlci5wbmc8L2ZpbGU+Ci0gICAgICAgIDxmaWxlPmljb25zL2luZm8ucG5nPC9maWxlPgotICAg
ICAgICA8ZmlsZT5pY29ucy9uZXh0LnBuZzwvZmlsZT4KLSAgICAgICAgPGZpbGU+aWNvbnMvcGx1
cy5wbmc8L2ZpbGU+Ci0gICAgICAgIDxmaWxlPmljb25zL3ByZXZpb3VzLnBuZzwvZmlsZT4KLSAg
ICAgICAgPGZpbGU+aWNvbnMvcmVmcmVzaC5wbmc8L2ZpbGU+Ci0gICAgICAgIDxmaWxlPmljb25z
L3N0b3AucG5nPC9maWxlPgotICAgICAgICA8ZmlsZT5pY29ucy90aXRsZWJhci5wbmc8L2ZpbGU+
Ci0gICAgICAgIDxmaWxlPmljb25zL3RvdWNoLnBuZzwvZmlsZT4KLSAgICAgICAgPGZpbGU+aWNv
bnMvdG91Y2hwb2ludC5wbmc8L2ZpbGU+Ci0gICAgICAgIDxmaWxlPmljb25zL3VwLnBuZzwvZmls
ZT4KLSAgICAgICAgPGZpbGU+anMvTXVsdGlTZWxlY3QuanM8L2ZpbGU+Ci0gICAgICAgIDxmaWxl
PnFtbC9BbGVydERpYWxvZy5xbWw8L2ZpbGU+Ci0gICAgICAgIDxmaWxlPnFtbC9BdXRoZW50aWNh
dGlvbkRpYWxvZy5xbWw8L2ZpbGU+Ci0gICAgICAgIDxmaWxlPnFtbC9Ccm93c2VyV2luZG93LnFt
bDwvZmlsZT4KLSAgICAgICAgPGZpbGU+cW1sL0NoZWNrQm94LnFtbDwvZmlsZT4KLSAgICAgICAg
PGZpbGU+cW1sL0NvbG9yQ2hvb3Nlci5xbWw8L2ZpbGU+Ci0gICAgICAgIDxmaWxlPnFtbC9Db25m
aXJtRGlhbG9nLnFtbDwvZmlsZT4KLSAgICAgICAgPGZpbGU+cW1sL0RpYWxvZy5xbWw8L2ZpbGU+
Ci0gICAgICAgIDxmaWxlPnFtbC9EaWFsb2dCdXR0b24ucW1sPC9maWxlPgotICAgICAgICA8Zmls
ZT5xbWwvRGlhbG9nTGluZUlucHV0LnFtbDwvZmlsZT4KLSAgICAgICAgPGZpbGU+cW1sL0ZpbGVQ
aWNrZXIucW1sPC9maWxlPgotICAgICAgICA8ZmlsZT5xbWwvSXRlbVNlbGVjdG9yLnFtbDwvZmls
ZT4KLSAgICAgICAgPGZpbGU+cW1sL01vY2tUb3VjaFBvaW50LnFtbDwvZmlsZT4KLSAgICAgICAg
PGZpbGU+cW1sL1Byb21wdERpYWxvZy5xbWw8L2ZpbGU+Ci0gICAgICAgIDxmaWxlPnFtbC9Qcm94
eUF1dGhlbnRpY2F0aW9uRGlhbG9nLnFtbDwvZmlsZT4KLSAgICAgICAgPGZpbGU+cW1sL1Njcm9s
bEluZGljYXRvci5xbWw8L2ZpbGU+Ci0gICAgICAgIDxmaWxlPnFtbC9WaWV3cG9ydEluZm9JdGVt
LnFtbDwvZmlsZT4KLSAgICA8L3FyZXNvdXJjZT4KLTwvUkNDPgpkaWZmIC0tZ2l0IGEvVG9vbHMv
TWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXJBcHBsaWNhdGlvbi5jcHAgYi9Ub29scy9NaW5pQnJv
d3Nlci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTkxNWU3NzM0OGY1NzAzZTA0NGUyNDNlMmVmNzY5OGMxMDNhNTU3NS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9NaW5pQnJvd3Nl
ci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM3OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkg
b2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIk1pbmlCcm93c2VyQXBwbGljYXRpb24uaCIKLQot
I2luY2x1ZGUgIkJyb3dzZXJXaW5kb3cuaCIKLSNpZiBIQVZFKFFUVEVTVFNVUFBPUlQpCi0jaW5j
bHVkZSAiUXRUZXN0U3VwcG9ydC5oIgotI2VuZGlmCi0jaW5jbHVkZSAicHJpdmF0ZS9xcXVpY2t3
ZWJ2aWV3X3AuaCIKLSNpbmNsdWRlICJ1dGlscy5oIgotI2luY2x1ZGUgPFFSZWdFeHA+Ci0jaW5j
bHVkZSA8UUV2ZW50PgotI2luY2x1ZGUgPFFNb3VzZUV2ZW50PgotI2luY2x1ZGUgPFFUb3VjaEV2
ZW50PgotCi1zdGF0aWMgaW5saW5lIFFSZWN0RiB0b3VjaFJlY3RGb3JQb3NpdGlvbihRUG9pbnRG
IGNlbnRlclBvaW50KQotewotICAgIFFSZWN0RiB0b3VjaFJlY3QoMCwgMCwgNDAsIDQwKTsKLSAg
ICB0b3VjaFJlY3QubW92ZUNlbnRlcihjZW50ZXJQb2ludCk7Ci0gICAgcmV0dXJuIHRvdWNoUmVj
dDsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzVG91Y2hFdmVudChjb25zdCBRRXZlbnQqIGV2
ZW50KQotewotICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUoKSkgewotICAgIGNhc2UgUUV2ZW50OjpU
b3VjaEJlZ2luOgotICAgIGNhc2UgUUV2ZW50OjpUb3VjaFVwZGF0ZToKLSAgICBjYXNlIFFFdmVu
dDo6VG91Y2hFbmQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc01vdXNlRXZl
bnQoY29uc3QgUUV2ZW50KiBldmVudCkKLXsKLSAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKCkpIHsK
LSAgICBjYXNlIFFFdmVudDo6TW91c2VCdXR0b25QcmVzczoKLSAgICBjYXNlIFFFdmVudDo6TW91
c2VNb3ZlOgotICAgIGNhc2UgUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVhc2U6Ci0gICAgY2FzZSBR
RXZlbnQ6Ok1vdXNlQnV0dG9uRGJsQ2xpY2s6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLU1pbmlCcm93c2VyQXBw
bGljYXRpb246Ok1pbmlCcm93c2VyQXBwbGljYXRpb24oaW50JiBhcmdjLCBjaGFyKiogYXJndikK
LSAgICA6IFFHdWlBcHBsaWNhdGlvbihhcmdjLCBhcmd2KQotICAgICwgbV9yZWFsVG91Y2hFdmVu
dFJlY2VpdmVkKGZhbHNlKQotICAgICwgbV9wZW5kaW5nRmFrZVRvdWNoRXZlbnRDb3VudCgwKQot
ICAgICwgbV9pc1JvYm90aXplZChmYWxzZSkKLSAgICAsIG1fcm9ib3RUaW1lb3V0U2Vjb25kcygw
KQotICAgICwgbV9yb2JvdEV4dHJhVGltZVNlY29uZHMoMCkKLSAgICAsIG1fd2luZG93T3B0aW9u
cyh0aGlzKQotICAgICwgbV9ob2xkaW5nQ29udHJvbChmYWxzZSkKLXsKLSAgICBzZXRPcmdhbml6
YXRpb25OYW1lKCJRdFByb2plY3QiKTsKLSAgICBzZXRBcHBsaWNhdGlvbk5hbWUoIlF0TWluaUJy
b3dzZXIiKTsKLSAgICBzZXRBcHBsaWNhdGlvblZlcnNpb24oIjAuMSIpOwotCi0gICAgaGFuZGxl
VXNlck9wdGlvbnMoKTsKLX0KLQotYm9vbCBNaW5pQnJvd3NlckFwcGxpY2F0aW9uOjpub3RpZnko
UU9iamVjdCogdGFyZ2V0LCBRRXZlbnQqIGV2ZW50KQotewotICAgIC8vIFdlIHRyeSB0byBiZSBz
bWFydCwgaWYgd2UgcmVjZWl2ZWQgcmVhbCB0b3VjaCBldmVudCwgd2UgYXJlIHByb2JhYmx5IG9u
IGEgZGV2aWNlCi0gICAgLy8gd2l0aCB0b3VjaCBzY3JlZW4sIGFuZCB3ZSBzaG91bGQgbm90IGhh
dmUgdG91Y2ggbW9ja2luZy4KLQotICAgIGlmICghZXZlbnQtPnNwb250YW5lb3VzKCkgfHwgbV9y
ZWFsVG91Y2hFdmVudFJlY2VpdmVkIHx8ICFtX3dpbmRvd09wdGlvbnMudG91Y2hNb2NraW5nRW5h
YmxlZCgpKQotICAgICAgICByZXR1cm4gUUd1aUFwcGxpY2F0aW9uOjpub3RpZnkodGFyZ2V0LCBl
dmVudCk7Ci0KLSAgICBpZiAoaXNUb3VjaEV2ZW50KGV2ZW50KSkgewotICAgICAgICBpZiAobV9w
ZW5kaW5nRmFrZVRvdWNoRXZlbnRDb3VudCkKLSAgICAgICAgICAgIC0tbV9wZW5kaW5nRmFrZVRv
dWNoRXZlbnRDb3VudDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9yZWFsVG91Y2hFdmVu
dFJlY2VpdmVkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIFFHdWlBcHBsaWNhdGlvbjo6bm90aWZ5
KHRhcmdldCwgZXZlbnQpOwotICAgIH0KLQotICAgIEJyb3dzZXJXaW5kb3cqIGJyb3dzZXJXaW5k
b3cgPSBxb2JqZWN0X2Nhc3Q8QnJvd3NlcldpbmRvdyo+KHRhcmdldCk7Ci0gICAgaWYgKCFicm93
c2VyV2luZG93KQotICAgICAgICByZXR1cm4gUUd1aUFwcGxpY2F0aW9uOjpub3RpZnkodGFyZ2V0
LCBldmVudCk7Ci0KLSAgICBtX2hvbGRpbmdDb250cm9sID0gUUd1aUFwcGxpY2F0aW9uOjprZXli
b2FyZE1vZGlmaWVycygpLnRlc3RGbGFnKFF0OjpDb250cm9sTW9kaWZpZXIpOwotCi0gICAgLy8g
SW4gUU1MIGV2ZW50cyBhcmUgcHJvcGFnYXRlZCB0aHJvdWdoIHBhcmVudHMuIEJ1dCBzaW5jZSB0
aGUgV2ViVmlldwotICAgIC8vIG1heSBjb25zdW1lIGtleSBldmVudHMsIGEgc2hvcnRjdXQgbWln
aHQgbmV2ZXIgcmVhY2ggdGhlIHRvcCBRUXVpY2tJdGVtLgotICAgIC8vIFRoZXJlZm9yZSB3ZSBh
cmUgY2hlY2tpbmcgaGVyZSBmb3Igc2hvcnRjdXRzLgotICAgIGlmIChldmVudC0+dHlwZSgpID09
IFFFdmVudDo6S2V5UHJlc3MpIHsKLSAgICAgICAgUUtleUV2ZW50KiBrZXlFdmVudCA9IHN0YXRp
Y19jYXN0PFFLZXlFdmVudCo+KGV2ZW50KTsKLSAgICAgICAgaWYgKChrZXlFdmVudC0+a2V5KCkg
PT0gUXQ6OktleV9SICYmIGtleUV2ZW50LT5tb2RpZmllcnMoKSA9PSBRdDo6Q29udHJvbE1vZGlm
aWVyKSB8fCBrZXlFdmVudC0+a2V5KCkgPT0gUXQ6OktleV9GNSkgewotICAgICAgICAgICAgYnJv
d3NlcldpbmRvdy0+cmVsb2FkKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoKGtleUV2ZW50LT5rZXkoKSA9PSBRdDo6S2V5X0wgJiYga2V5RXZlbnQt
Pm1vZGlmaWVycygpID09IFF0OjpDb250cm9sTW9kaWZpZXIpIHx8IGtleUV2ZW50LT5rZXkoKSA9
PSBRdDo6S2V5X0Y2KSB7Ci0gICAgICAgICAgICBicm93c2VyV2luZG93LT5mb2N1c0FkZHJlc3NC
YXIoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICgo
a2V5RXZlbnQtPmtleSgpID09IFF0OjpLZXlfRiAmJiBrZXlFdmVudC0+bW9kaWZpZXJzKCkgPT0g
UXQ6OkNvbnRyb2xNb2RpZmllcikgfHwga2V5RXZlbnQtPmtleSgpID09IFF0OjpLZXlfRjMpIHsK
LSAgICAgICAgICAgIGJyb3dzZXJXaW5kb3ctPnRvZ2dsZUZpbmQoKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0g
UUV2ZW50OjpLZXlSZWxlYXNlICYmIHN0YXRpY19jYXN0PFFLZXlFdmVudCo+KGV2ZW50KS0+a2V5
KCkgPT0gUXQ6OktleV9Db250cm9sKSB7Ci0gICAgICAgIGZvcmVhY2ggKGludCBpZCwgbV9oZWxk
VG91Y2hQb2ludHMpCi0gICAgICAgICAgICBpZiAobV90b3VjaFBvaW50cy5jb250YWlucyhpZCkg
JiYgIVFHdWlBcHBsaWNhdGlvbjo6bW91c2VCdXR0b25zKCkudGVzdEZsYWcoUXQ6Ok1vdXNlQnV0
dG9uKGlkKSkpIHsKLSAgICAgICAgICAgICAgICBtX3RvdWNoUG9pbnRzW2lkXS5zZXRTdGF0ZShR
dDo6VG91Y2hQb2ludFJlbGVhc2VkKTsKLSAgICAgICAgICAgICAgICBtX2hlbGRUb3VjaFBvaW50
cy5yZW1vdmUoaWQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV90b3Vj
aFBvaW50c1tpZF0uc2V0U3RhdGUoUXQ6OlRvdWNoUG9pbnRTdGF0aW9uYXJ5KTsKLQotICAgICAg
ICBzZW5kVG91Y2hFdmVudChicm93c2VyV2luZG93LCBtX2hlbGRUb3VjaFBvaW50cy5pc0VtcHR5
KCkgPyBRRXZlbnQ6OlRvdWNoRW5kIDogUUV2ZW50OjpUb3VjaFVwZGF0ZSwgc3RhdGljX2Nhc3Q8
UUtleUV2ZW50Kj4oZXZlbnQpLT50aW1lc3RhbXAoKSk7Ci0gICAgfQotCi0gICAgaWYgKGlzTW91
c2VFdmVudChldmVudCkpIHsKLSAgICAgICAgY29uc3QgUU1vdXNlRXZlbnQqIGNvbnN0IG1vdXNl
RXZlbnQgPSBzdGF0aWNfY2FzdDxRTW91c2VFdmVudCo+KGV2ZW50KTsKLQotICAgICAgICBRVG91
Y2hFdmVudDo6VG91Y2hQb2ludCB0b3VjaFBvaW50OwotICAgICAgICB0b3VjaFBvaW50LnNldFBy
ZXNzdXJlKDEpOwotCi0gICAgICAgIFFFdmVudDo6VHlwZSB0b3VjaFR5cGUgPSBRRXZlbnQ6Ok5v
bmU7Ci0KLSAgICAgICAgc3dpdGNoIChtb3VzZUV2ZW50LT50eXBlKCkpIHsKLSAgICAgICAgY2Fz
ZSBRRXZlbnQ6Ok1vdXNlQnV0dG9uUHJlc3M6Ci0gICAgICAgICAgICB0b3VjaFBvaW50LnNldElk
KG1vdXNlRXZlbnQtPmJ1dHRvbigpKTsKLSAgICAgICAgICAgIGlmIChtX3RvdWNoUG9pbnRzLmNv
bnRhaW5zKHRvdWNoUG9pbnQuaWQoKSkpIHsKLSAgICAgICAgICAgICAgICB0b3VjaFBvaW50LnNl
dFN0YXRlKFF0OjpUb3VjaFBvaW50TW92ZWQpOwotICAgICAgICAgICAgICAgIHRvdWNoVHlwZSA9
IFFFdmVudDo6VG91Y2hVcGRhdGU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIHRvdWNoUG9pbnQuc2V0U3RhdGUoUXQ6OlRvdWNoUG9pbnRQcmVzc2VkKTsKLSAgICAgICAg
ICAgICAgICAvLyBDaGVjayBpZiBtb3JlIGJ1dHRvbnMgYXJlIGhlbGQgZG93biB0aGFuIGp1c3Qg
dGhlIGV2ZW50IHRyaWdnZXJpbmcgb25lLgotICAgICAgICAgICAgICAgIGlmIChtb3VzZUV2ZW50
LT5idXR0b25zKCkgPiBtb3VzZUV2ZW50LT5idXR0b24oKSkKLSAgICAgICAgICAgICAgICAgICAg
dG91Y2hUeXBlID0gUUV2ZW50OjpUb3VjaFVwZGF0ZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHRvdWNoVHlwZSA9IFFFdmVudDo6VG91Y2hCZWdpbjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFFdmVudDo6TW91c2VN
b3ZlOgotICAgICAgICAgICAgaWYgKCFtb3VzZUV2ZW50LT5idXR0b25zKCkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBXZSBoYXZlIHRvIHN3YWxsb3cgdGhlIGV2ZW50IGluc3RlYWQgb2YgcHJvcGFn
YXRpbmcgaXQsCi0gICAgICAgICAgICAgICAgLy8gc2luY2Ugd2UgYXZvaWQgc2VuZGluZyB0aGUg
bW91c2UgcmVsZWFzZSBldmVudHMgYW5kIGlmIHRoZQotICAgICAgICAgICAgICAgIC8vIEZsaWNr
YWJsZSBpcyB0aGUgbW91c2UgZ3JhYmJlciBpdCB3b3VsZCByZWNlaXZlIHRoZSBldmVudAotICAg
ICAgICAgICAgICAgIC8vIGFuZCB3b3VsZCBtb3ZlIHRoZSBjb250ZW50LgotICAgICAgICAgICAg
ICAgIGV2ZW50LT5hY2NlcHQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHRvdWNoVHlwZSA9IFFFdmVudDo6VG91Y2hVcGRhdGU7Ci0g
ICAgICAgICAgICB0b3VjaFBvaW50LnNldElkKG1vdXNlRXZlbnQtPmJ1dHRvbnMoKSk7Ci0gICAg
ICAgICAgICB0b3VjaFBvaW50LnNldFN0YXRlKFF0OjpUb3VjaFBvaW50TW92ZWQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVhc2U6Ci0g
ICAgICAgICAgICAvLyBDaGVjayBpZiBhbnkgYnV0dG9ucyBhcmUgc3RpbGwgaGVsZCBkb3duIGFm
dGVyIHRoaXMgZXZlbnQuCi0gICAgICAgICAgICBpZiAobW91c2VFdmVudC0+YnV0dG9ucygpKQot
ICAgICAgICAgICAgICAgIHRvdWNoVHlwZSA9IFFFdmVudDo6VG91Y2hVcGRhdGU7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdG91Y2hUeXBlID0gUUV2ZW50OjpUb3VjaEVuZDsK
LSAgICAgICAgICAgIHRvdWNoUG9pbnQuc2V0SWQobW91c2VFdmVudC0+YnV0dG9uKCkpOwotICAg
ICAgICAgICAgdG91Y2hQb2ludC5zZXRTdGF0ZShRdDo6VG91Y2hQb2ludFJlbGVhc2VkKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFFdmVudDo6TW91c2VCdXR0b25EYmxDbGlj
azoKLSAgICAgICAgICAgIC8vIEVhdCBkb3VibGUtY2xpY2tzLCB0aGVpciBhY2NvbXBhbnlpbmcg
cHJlc3MgZXZlbnQgaXMgYWxsIHdlIG5lZWQuCi0gICAgICAgICAgICBldmVudC0+YWNjZXB0KCk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFFfQVNTRVJUX1goZmFsc2UsICJtdWx0aS10b3VjaCBtb2NraW5nIiwgInVuaGFuZGxlZCBldmVu
dCB0eXBlIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBIG1vdmUgY2FuIGhhdmUgcmVzdWx0
ZWQgaW4gbXVsdGlwbGUgYnV0dG9ucywgc28gd2UgbmVlZCBjaGVjayB0aGVtIGluZGl2aWR1YWxs
eS4KLSAgICAgICAgaWYgKHRvdWNoUG9pbnQuaWQoKSAmIFF0OjpMZWZ0QnV0dG9uKQotICAgICAg
ICAgICAgdXBkYXRlVG91Y2hQb2ludChtb3VzZUV2ZW50LCB0b3VjaFBvaW50LCBRdDo6TGVmdEJ1
dHRvbik7Ci0gICAgICAgIGlmICh0b3VjaFBvaW50LmlkKCkgJiBRdDo6TWlkQnV0dG9uKQotICAg
ICAgICAgICAgdXBkYXRlVG91Y2hQb2ludChtb3VzZUV2ZW50LCB0b3VjaFBvaW50LCBRdDo6TWlk
QnV0dG9uKTsKLSAgICAgICAgaWYgKHRvdWNoUG9pbnQuaWQoKSAmIFF0OjpSaWdodEJ1dHRvbikK
LSAgICAgICAgICAgIHVwZGF0ZVRvdWNoUG9pbnQobW91c2VFdmVudCwgdG91Y2hQb2ludCwgUXQ6
OlJpZ2h0QnV0dG9uKTsKLQotICAgICAgICBpZiAobV9ob2xkaW5nQ29udHJvbCAmJiB0b3VjaFBv
aW50LnN0YXRlKCkgPT0gUXQ6OlRvdWNoUG9pbnRSZWxlYXNlZCkgewotICAgICAgICAgICAgLy8g
V2UgYXZvaWQgc2VuZGluZyB0aGUgcmVsZWFzZSBldmVudCBiZWNhdXNlIHRoZSBGbGlja2FibGUg
aXMKLSAgICAgICAgICAgIC8vIGxpc3RlbmluZyB0byBtb3VzZSBldmVudHMgYW5kIHdvdWxkIHN0
YXJ0IGEgYm91bmNlLWJhY2sKLSAgICAgICAgICAgIC8vIGFuaW1hdGlvbiBpZiBpdCByZWNlaXZl
ZCBhIG1vdXNlIHJlbGVhc2UuCi0gICAgICAgICAgICBldmVudC0+YWNjZXB0KCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVwZGF0ZSBzdGF0ZXMg
Zm9yIGFsbCBvdGhlciB0b3VjaC1wb2ludHMKLSAgICAgICAgZm9yIChRSGFzaDxpbnQsIFFUb3Vj
aEV2ZW50OjpUb3VjaFBvaW50Pjo6aXRlcmF0b3IgaXQgPSBtX3RvdWNoUG9pbnRzLmJlZ2luKCks
IGVuZCA9IG1fdG91Y2hQb2ludHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgaWYgKCEoaXQudmFsdWUoKS5pZCgpICYgdG91Y2hQb2ludC5pZCgpKSkKLSAgICAgICAgICAg
ICAgICBpdC52YWx1ZSgpLnNldFN0YXRlKFF0OjpUb3VjaFBvaW50U3RhdGlvbmFyeSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBRX0FTU0VSVCh0b3VjaFR5cGUgIT0gUUV2ZW50OjpOb25lKTsKLQot
ICAgICAgICBpZiAoIXNlbmRUb3VjaEV2ZW50KGJyb3dzZXJXaW5kb3csIHRvdWNoVHlwZSwgbW91
c2VFdmVudC0+dGltZXN0YW1wKCkpKQotICAgICAgICAgICAgcmV0dXJuIFFHdWlBcHBsaWNhdGlv
bjo6bm90aWZ5KHRhcmdldCwgZXZlbnQpOwotCi0gICAgICAgIGV2ZW50LT5hY2NlcHQoKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIFFHdWlBcHBsaWNhdGlvbjo6
bm90aWZ5KHRhcmdldCwgZXZlbnQpOwotfQotCi12b2lkIE1pbmlCcm93c2VyQXBwbGljYXRpb246
OnVwZGF0ZVRvdWNoUG9pbnQoY29uc3QgUU1vdXNlRXZlbnQqIG1vdXNlRXZlbnQsIFFUb3VjaEV2
ZW50OjpUb3VjaFBvaW50IHRvdWNoUG9pbnQsIFF0OjpNb3VzZUJ1dHRvbiBtb3VzZUJ1dHRvbikK
LXsKLSAgICAvLyBJZ25vcmUgaW5zZXJ0aW5nIGFkZGl0aW9uYWwgdG91Y2ggcG9pbnRzIGlmIEN0
cmwgaXNuJ3QgaGVsZCBiZWNhdXNlIGl0IHByb2R1Y2VzCi0gICAgLy8gaW5jb25zaXN0ZW50IHRv
dWNoIGV2ZW50cyBhbmQgcmVzdWx0cyBpbiBhc3NlcnMgaW4gdGhlIGdlc3R1cmUgcmVjb2duaXpl
cnMuCi0gICAgaWYgKCFtX2hvbGRpbmdDb250cm9sICYmIG1fdG91Y2hQb2ludHMuc2l6ZSgpICYm
ICFtX3RvdWNoUG9pbnRzLmNvbnRhaW5zKG1vdXNlQnV0dG9uKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faG9sZGluZ0NvbnRyb2wgJiYgdG91Y2hQb2ludC5zdGF0ZSgpID09IFF0OjpU
b3VjaFBvaW50UmVsZWFzZWQpIHsKLSAgICAgICAgbV9oZWxkVG91Y2hQb2ludHMuaW5zZXJ0KG1v
dXNlQnV0dG9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEdlc3R1cmUgcmVj
b2duaXRpb24gdXNlcyB0aGUgc2NyZWVuIHBvc2l0aW9uIGZvciB0aGUgaW5pdGlhbCB0aHJlc2hv
bGQKLSAgICAvLyBidXQgc2luY2UgdGhlIGNhbnZhcyB0cmFuc2xhdGVzIHRvdWNoIGV2ZW50cyB3
ZSBhY3R1YWxseSBuZWVkIHRvIHBhc3MKLSAgICAvLyB0aGUgc2NyZWVuIHBvc2l0aW9uIGFzIHRo
ZSBzY2VuZSBwb3NpdGlvbiB0byBkZWxpdmVyIHRoZSBhcHByb3ByaWF0ZQotICAgIC8vIGNvb3Jk
aW5hdGVzIHRvIHRoZSB0YXJnZXQuCi0gICAgdG91Y2hQb2ludC5zZXRSZWN0KHRvdWNoUmVjdEZv
clBvc2l0aW9uKG1vdXNlRXZlbnQtPmxvY2FsUG9zKCkpKTsKLSAgICB0b3VjaFBvaW50LnNldFNj
ZW5lUmVjdCh0b3VjaFJlY3RGb3JQb3NpdGlvbihtb3VzZUV2ZW50LT5zY3JlZW5Qb3MoKSkpOwot
Ci0gICAgaWYgKHRvdWNoUG9pbnQuc3RhdGUoKSA9PSBRdDo6VG91Y2hQb2ludFByZXNzZWQpCi0g
ICAgICAgIHRvdWNoUG9pbnQuc2V0U3RhcnRTY2VuZVBvcyhtb3VzZUV2ZW50LT5zY3JlZW5Qb3Mo
KSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiBv
bGRUb3VjaFBvaW50ID0gbV90b3VjaFBvaW50c1ttb3VzZUJ1dHRvbl07Ci0gICAgICAgIHRvdWNo
UG9pbnQuc2V0U3RhcnRTY2VuZVBvcyhvbGRUb3VjaFBvaW50LnN0YXJ0U2NlbmVQb3MoKSk7Ci0g
ICAgICAgIHRvdWNoUG9pbnQuc2V0TGFzdFBvcyhvbGRUb3VjaFBvaW50LnBvcygpKTsKLSAgICAg
ICAgdG91Y2hQb2ludC5zZXRMYXN0U2NlbmVQb3Mob2xkVG91Y2hQb2ludC5zY2VuZVBvcygpKTsK
LSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgY3VycmVudCB0b3VjaC1wb2ludC4KLSAgICB0b3VjaFBv
aW50LnNldElkKG1vdXNlQnV0dG9uKTsKLSAgICBtX3RvdWNoUG9pbnRzLmluc2VydChtb3VzZUJ1
dHRvbiwgdG91Y2hQb2ludCk7Ci19Ci0KLQotYm9vbCBNaW5pQnJvd3NlckFwcGxpY2F0aW9uOjpz
ZW5kVG91Y2hFdmVudChCcm93c2VyV2luZG93KiBicm93c2VyV2luZG93LCBRRXZlbnQ6OlR5cGUg
dHlwZSwgdWxvbmcgdGltZXN0YW1wKQotewotICAgIHN0YXRpYyBRVG91Y2hEZXZpY2UqIGRldmlj
ZSA9IDA7Ci0gICAgaWYgKCFkZXZpY2UpIHsKLSAgICAgICAgZGV2aWNlID0gbmV3IFFUb3VjaERl
dmljZTsKLSAgICAgICAgZGV2aWNlLT5zZXRUeXBlKFFUb3VjaERldmljZTo6VG91Y2hTY3JlZW4p
OwotICAgICAgICBRV2luZG93U3lzdGVtSW50ZXJmYWNlOjpyZWdpc3RlclRvdWNoRGV2aWNlKGRl
dmljZSk7Ci0gICAgfQotCi0gICAgbV9wZW5kaW5nRmFrZVRvdWNoRXZlbnRDb3VudCsrOwotCi0g
ICAgY29uc3QgUUxpc3Q8UVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQ+JiBjdXJyZW50VG91Y2hQb2lu
dHMgPSBtX3RvdWNoUG9pbnRzLnZhbHVlcygpOwotICAgIFF0OjpUb3VjaFBvaW50U3RhdGVzIHRv
dWNoUG9pbnRTdGF0ZXMgPSAwOwotICAgIGZvcmVhY2ggKGNvbnN0IFFUb3VjaEV2ZW50OjpUb3Vj
aFBvaW50JiB0b3VjaFBvaW50LCBjdXJyZW50VG91Y2hQb2ludHMpCi0gICAgICAgIHRvdWNoUG9p
bnRTdGF0ZXMgfD0gdG91Y2hQb2ludC5zdGF0ZSgpOwotCi0gICAgUVRvdWNoRXZlbnQgZXZlbnQo
dHlwZSwgZGV2aWNlLCBRdDo6Tm9Nb2RpZmllciwgdG91Y2hQb2ludFN0YXRlcywgY3VycmVudFRv
dWNoUG9pbnRzKTsKLSAgICBldmVudC5zZXRUaW1lc3RhbXAodGltZXN0YW1wKTsKLSAgICBldmVu
dC5zZXRBY2NlcHRlZChmYWxzZSk7Ci0KLSAgICBRR3VpQXBwbGljYXRpb246Om5vdGlmeShicm93
c2VyV2luZG93LCAmZXZlbnQpOwotCi0gICAgaWYgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6
OmZsaWNrYWJsZVZpZXdwb3J0RW5hYmxlZCgpKQotICAgICAgICBicm93c2VyV2luZG93LT51cGRh
dGVWaXN1YWxNb2NrVG91Y2hQb2ludHMobV9ob2xkaW5nQ29udHJvbCA/IGN1cnJlbnRUb3VjaFBv
aW50cyA6IFFMaXN0PFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50PigpKTsKLQotICAgIC8vIEdldCBy
aWQgb2YgdG91Y2gtcG9pbnRzIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZAotICAgIGZvcmVhY2gg
KGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiB0b3VjaFBvaW50LCBjdXJyZW50VG91Y2hQ
b2ludHMpIHsKLSAgICAgICAgaWYgKHRvdWNoUG9pbnQuc3RhdGUoKSA9PSAgUXQ6OlRvdWNoUG9p
bnRSZWxlYXNlZCkKLSAgICAgICAgICAgIG1fdG91Y2hQb2ludHMucmVtb3ZlKHRvdWNoUG9pbnQu
aWQoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGV2ZW50LmlzQWNjZXB0ZWQoKTsKLX0KLQotc3Rh
dGljIHZvaWQgcHJpbnRIZWxwKGNvbnN0IFFTdHJpbmcmIHByb2dyYW1OYW1lKQotewotICAgIHFE
ZWJ1ZygpIDw8ICJVc2FnZToiIDw8IHByb2dyYW1OYW1lLnRvTGF0aW4xKCkuZGF0YSgpCi0gICAg
ICAgICA8PCAiWy0tZGVza3RvcF0iCi0gICAgICAgICA8PCAiWy1yIGxpc3RdIgotICAgICAgICAg
PDwgIlstLXJvYm90LXRpbWVvdXQgc2Vjb25kc10iCi0gICAgICAgICA8PCAiWy0tcm9ib3QtZXh0
cmEtdGltZSBzZWNvbmRzXSIKLSAgICAgICAgIDw8ICJbLS13aW5kb3ctc2l6ZSAod2lkdGgpeCho
ZWlnaHQpXSIKLSAgICAgICAgIDw8ICJbLS1tYXhpbWl6ZV0iCi0gICAgICAgICA8PCAiWy1mXSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bGwgc2NyZWVuIG1vZGUuIgotICAg
ICAgICAgPDwgIlstLXVzZXItYWdlbnQgc3RyaW5nXSIKLSAgICAgICAgIDw8ICJbLXZdIgotICAg
ICAgICAgPDwgIlVSTCI7Ci19Ci0KLXZvaWQgTWluaUJyb3dzZXJBcHBsaWNhdGlvbjo6aGFuZGxl
VXNlck9wdGlvbnMoKQotewotICAgIFFTdHJpbmdMaXN0IGFyZ3MgPSBhcmd1bWVudHMoKTsKLSAg
ICBRRmlsZUluZm8gcHJvZ3JhbShhcmdzLnRha2VBdCgwKSk7Ci0gICAgUVN0cmluZyBwcm9ncmFt
TmFtZSgiTWluaUJyb3dzZXIiKTsKLSAgICBpZiAocHJvZ3JhbS5leGlzdHMoKSkKLSAgICAgICAg
cHJvZ3JhbU5hbWUgPSBwcm9ncmFtLmJhc2VOYW1lKCk7Ci0KLSAgICBpZiAodGFrZU9wdGlvbkZs
YWcoJmFyZ3MsICItLWhlbHAiKSkgewotICAgICAgICBwcmludEhlbHAocHJvZ3JhbU5hbWUpOwot
ICAgICAgICBhcHBRdWl0KDApOwotICAgIH0KLQotICAgIGNvbnN0IGJvb2wgdXNlRGVza3RvcEJl
aGF2aW9yID0gdGFrZU9wdGlvbkZsYWcoJmFyZ3MsICItLWRlc2t0b3AiKTsKLSAgICBpZiAodXNl
RGVza3RvcEJlaGF2aW9yKQotICAgICAgICB3aW5kb3dPcHRpb25zKCktPnNldFRvdWNoTW9ja2lu
Z0VuYWJsZWQoZmFsc2UpOwotCi0gICAgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Rmxp
Y2thYmxlVmlld3BvcnRFbmFibGVkKCF1c2VEZXNrdG9wQmVoYXZpb3IpOwotICAgIGlmICghdXNl
RGVza3RvcEJlaGF2aW9yKQotICAgICAgICBxcHV0ZW52KCJRVF9XRUJLSVRfVVNFX01PQklMRV9U
SEVNRSIsIFFCeXRlQXJyYXkoIjEiKSk7Ci0gICAgbV93aW5kb3dPcHRpb25zLnNldFByaW50TG9h
ZGVkVXJscyh0YWtlT3B0aW9uRmxhZygmYXJncywgIi12IikpOwotICAgIG1fd2luZG93T3B0aW9u
cy5zZXRTdGFydE1heGltaXplZCh0YWtlT3B0aW9uRmxhZygmYXJncywgIi0tbWF4aW1pemUiKSk7
Ci0gICAgbV93aW5kb3dPcHRpb25zLnNldFN0YXJ0RnVsbFNjcmVlbih0YWtlT3B0aW9uRmxhZygm
YXJncywgIi1mIikpOwotCi0gICAgaWYgKGFyZ3MuY29udGFpbnMoIi0tdXNlci1hZ2VudCIpKQot
ICAgICAgICBtX3dpbmRvd09wdGlvbnMuc2V0VXNlckFnZW50KHRha2VPcHRpb25WYWx1ZSgmYXJn
cywgIi0tdXNlci1hZ2VudCIpKTsKLQotICAgIGlmIChhcmdzLmNvbnRhaW5zKCItLXdpbmRvdy1z
aXplIikpIHsKLSAgICAgICAgUVN0cmluZyB2YWx1ZSA9IHRha2VPcHRpb25WYWx1ZSgmYXJncywg
Ii0td2luZG93LXNpemUiKTsKLSAgICAgICAgUVN0cmluZ0xpc3QgbGlzdCA9IHZhbHVlLnNwbGl0
KFFSZWdFeHAoIlxcRCsiKSwgUVN0cmluZzo6U2tpcEVtcHR5UGFydHMpOwotICAgICAgICBpZiAo
bGlzdC5sZW5ndGgoKSA9PSAyKQotICAgICAgICAgICAgbV93aW5kb3dPcHRpb25zLnNldFJlcXVl
c3RlZFdpbmRvd1NpemUoUVNpemUobGlzdC5hdCgwKS50b0ludCgpLCBsaXN0LmF0KDEpLnRvSW50
KCkpKTsKLSAgICB9Ci0KLSNpZiBIQVZFKFFUVEVTVFNVUFBPUlQpCi0gICAgaWYgKHRha2VPcHRp
b25GbGFnKCZhcmdzLCBRU3RyaW5nTGl0ZXJhbCgiLS11c2UtdGVzdC1mb250cyIpKSkKLSAgICAg
ICAgV2ViS2l0OjpRdFRlc3RTdXBwb3J0Ojppbml0aWFsaXplVGVzdEZvbnRzKCk7Ci0jZW5kaWYK
LQotICAgIGlmIChhcmdzLmNvbnRhaW5zKCItciIpKSB7Ci0gICAgICAgIFFTdHJpbmcgbGlzdEZp
bGUgPSB0YWtlT3B0aW9uVmFsdWUoJmFyZ3MsICItciIpOwotICAgICAgICBpZiAobGlzdEZpbGUu
aXNFbXB0eSgpKQotICAgICAgICAgICAgYXBwUXVpdCgxLCAiLXIgbmVlZHMgYSBsaXN0IGZpbGUg
dG8gc3RhcnQgaW4gcm9ib3RpemVkIG1vZGUiKTsKLSAgICAgICAgaWYgKCFRRmlsZTo6ZXhpc3Rz
KGxpc3RGaWxlKSkKLSAgICAgICAgICAgIGFwcFF1aXQoMSwgIlRoZSBsaXN0IGZpbGUgc3VwcGxp
ZWQgdG8gLXIgZG9lcyBub3QgZXhpc3QuIik7Ci0KLSAgICAgICAgbV9pc1JvYm90aXplZCA9IHRy
dWU7Ci0gICAgICAgIG1fdXJscyA9IFFTdHJpbmdMaXN0KGxpc3RGaWxlKTsKLQotICAgICAgICAv
LyB0b0ludCgpIHJldHVybnMgMCBpZiBpdCBmYWlscyBwYXJzaW5nLgotICAgICAgICBtX3JvYm90
VGltZW91dFNlY29uZHMgPSB0YWtlT3B0aW9uVmFsdWUoJmFyZ3MsICItLXJvYm90LXRpbWVvdXQi
KS50b0ludCgpOwotICAgICAgICBtX3JvYm90RXh0cmFUaW1lU2Vjb25kcyA9IHRha2VPcHRpb25W
YWx1ZSgmYXJncywgIi0tcm9ib3QtZXh0cmEtdGltZSIpLnRvSW50KCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaW50IHVybEFyZzsKLQotICAgICAgICB3aGlsZSAoKHVybEFyZyA9IGFyZ3MuaW5k
ZXhPZihRUmVnRXhwKCJeW14tXS4qIikpKSAhPSAtMSkKLSAgICAgICAgICAgIG1fdXJscyArPSBh
cmdzLnRha2VBdCh1cmxBcmcpOwotICAgIH0KLQotICAgIGlmICghYXJncy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgcHJpbnRIZWxwKHByb2dyYW1OYW1lKTsKLSAgICAgICAgYXBwUXVpdCgxLCBRU3Ry
aW5nKCJVbmtub3duIGFyZ3VtZW50KHMpOiAlMSIpLmFyZyhhcmdzLmpvaW4oIiwiKSkpOwotICAg
IH0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyQXBwbGlj
YXRpb24uaCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyQXBwbGljYXRpb24uaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RjMzgwYWVjNGRmZTRiZWUwNDFjMTdkMzJl
NGRjYmMwYTkwYTI3MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBNaW5pQnJvd3NlckFwcGxpY2F0aW9uX2gKLSNkZWZpbmUgTWluaUJy
b3dzZXJBcHBsaWNhdGlvbl9oCi0KLSNpbmNsdWRlIDxRSGFzaD4KLSNpbmNsdWRlIDxRT2JqZWN0
PgotI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgotI2luY2x1ZGUgPFF0UW1sPgotI2luY2x1ZGUgPFFH
dWlBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRVG91Y2hFdmVudD4KLSNpbmNsdWRlIDxRVXJsPgot
I2luY2x1ZGUgPHFwYS9xd2luZG93c3lzdGVtaW50ZXJmYWNlLmg+Ci0KLWNsYXNzIEJyb3dzZXJX
aW5kb3c7Ci0KLWNsYXNzIFdpbmRvd09wdGlvbnMgOiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9P
QkpFQ1QKLSAgICBRX1BST1BFUlRZKGJvb2wgcHJpbnRMb2FkZWRVcmxzIFJFQUQgcHJpbnRMb2Fk
ZWRVcmxzKQotICAgIFFfUFJPUEVSVFkoYm9vbCBzdGFydE1heGltaXplZCBSRUFEIHN0YXJ0TWF4
aW1pemVkKQotICAgIFFfUFJPUEVSVFkoYm9vbCB0b3VjaE1vY2tpbmdFbmFibGVkIFJFQUQgdG91
Y2hNb2NraW5nRW5hYmxlZCBXUklURSBzZXRUb3VjaE1vY2tpbmdFbmFibGVkIE5PVElGWSB0b3Vj
aE1vY2tpbmdFbmFibGVkQ2hhbmdlZCkKLQotcHVibGljOgotICAgIFdpbmRvd09wdGlvbnMoUU9i
amVjdCogcGFyZW50ID0gMCkKLSAgICAgICAgOiBRT2JqZWN0KHBhcmVudCkKLSAgICAgICAgLCBt
X3ByaW50TG9hZGVkVXJscyhmYWxzZSkKLSAgICAgICAgLCBtX3N0YXJ0TWF4aW1pemVkKGZhbHNl
KQotICAgICAgICAsIG1fdG91Y2hNb2NraW5nRW5hYmxlZCh0cnVlKQotICAgICAgICAsIG1fd2lu
ZG93U2l6ZShRU2l6ZSg5ODAsIDczNSkpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgc2V0UHJp
bnRMb2FkZWRVcmxzKGJvb2wgZW5hYmxlZCkgeyBtX3ByaW50TG9hZGVkVXJscyA9IGVuYWJsZWQ7
IH0KLSAgICBib29sIHByaW50TG9hZGVkVXJscygpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRMb2Fk
ZWRVcmxzOyB9Ci0gICAgdm9pZCBzZXRTdGFydE1heGltaXplZChib29sIGVuYWJsZWQpIHsgbV9z
dGFydE1heGltaXplZCA9IGVuYWJsZWQ7IH0KLSAgICBib29sIHN0YXJ0TWF4aW1pemVkKCkgY29u
c3QgeyByZXR1cm4gbV9zdGFydE1heGltaXplZDsgfQotICAgIHZvaWQgc2V0U3RhcnRGdWxsU2Ny
ZWVuKGJvb2wgZW5hYmxlZCkgeyBtX3N0YXJ0RnVsbFNjcmVlbiA9IGVuYWJsZWQ7IH0KLSAgICBi
b29sIHN0YXJ0RnVsbFNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRGdWxsU2NyZWVuOyB9
Ci0gICAgdm9pZCBzZXRSZXF1ZXN0ZWRXaW5kb3dTaXplKGNvbnN0IFFTaXplJiBzaXplKSB7IG1f
d2luZG93U2l6ZSA9IHNpemU7IH0KLSAgICBRU2l6ZSByZXF1ZXN0ZWRXaW5kb3dTaXplKCkgY29u
c3QgeyByZXR1cm4gbV93aW5kb3dTaXplOyB9Ci0gICAgdm9pZCBzZXRVc2VyQWdlbnQoY29uc3Qg
UVN0cmluZyYgdXNlckFnZW50KSB7IG1fdXNlckFnZW50ID0gdXNlckFnZW50OyB9Ci0gICAgUVN0
cmluZyB1c2VyQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJBZ2VudDsgfQotICAgIGJvb2wg
dG91Y2hNb2NraW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdG91Y2hNb2NraW5nRW5hYmxl
ZDsgfQotICAgIHZvaWQgc2V0VG91Y2hNb2NraW5nRW5hYmxlZChib29sIGVuYWJsZWQpCi0gICAg
ewotICAgICAgICBpZiAoZW5hYmxlZCAhPSBtX3RvdWNoTW9ja2luZ0VuYWJsZWQpIHsKLSAgICAg
ICAgICAgIG1fdG91Y2hNb2NraW5nRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgICAgICAgICBlbWl0
IHRvdWNoTW9ja2luZ0VuYWJsZWRDaGFuZ2VkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLVFfU0lH
TkFMUzoKLSAgICB2b2lkIHRvdWNoTW9ja2luZ0VuYWJsZWRDaGFuZ2VkKCk7Ci0KLXByaXZhdGU6
Ci0gICAgYm9vbCBtX3ByaW50TG9hZGVkVXJsczsKLSAgICBib29sIG1fc3RhcnRNYXhpbWl6ZWQ7
Ci0gICAgYm9vbCBtX3N0YXJ0RnVsbFNjcmVlbjsKLSAgICBib29sIG1fdG91Y2hNb2NraW5nRW5h
YmxlZDsKLSAgICBRU2l6ZSBtX3dpbmRvd1NpemU7Ci0gICAgUVN0cmluZyBtX3VzZXJBZ2VudDsK
LX07Ci0KLWNsYXNzIE1pbmlCcm93c2VyQXBwbGljYXRpb24gOiBwdWJsaWMgUUd1aUFwcGxpY2F0
aW9uIHsKLSAgICBRX09CSkVDVAotCi1wdWJsaWM6Ci0gICAgTWluaUJyb3dzZXJBcHBsaWNhdGlv
bihpbnQmIGFyZ2MsIGNoYXIqKiBhcmd2KTsKLSAgICBRU3RyaW5nTGlzdCB1cmxzKCkgY29uc3Qg
eyByZXR1cm4gbV91cmxzOyB9Ci0gICAgYm9vbCBpc1JvYm90aXplZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNSb2JvdGl6ZWQ7IH0KLSAgICBpbnQgcm9ib3RUaW1lb3V0KCkgY29uc3QgeyByZXR1cm4g
bV9yb2JvdFRpbWVvdXRTZWNvbmRzOyB9Ci0gICAgaW50IHJvYm90RXh0cmFUaW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9yb2JvdEV4dHJhVGltZVNlY29uZHM7IH0KLSAgICBXaW5kb3dPcHRpb25zKiB3
aW5kb3dPcHRpb25zKCkgeyByZXR1cm4gJm1fd2luZG93T3B0aW9uczsgfQotCi0gICAgdmlydHVh
bCBib29sIG5vdGlmeShRT2JqZWN0KiwgUUV2ZW50Kik7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1
cGRhdGVUb3VjaFBvaW50KGNvbnN0IFFNb3VzZUV2ZW50KiwgUVRvdWNoRXZlbnQ6OlRvdWNoUG9p
bnQsIFF0OjpNb3VzZUJ1dHRvbik7Ci0gICAgYm9vbCBzZW5kVG91Y2hFdmVudChCcm93c2VyV2lu
ZG93KiwgUUV2ZW50OjpUeXBlLCB1bG9uZyB0aW1lc3RhbXApOwotICAgIHZvaWQgaGFuZGxlVXNl
ck9wdGlvbnMoKTsKLQotcHJpdmF0ZToKLSAgICBib29sIG1fcmVhbFRvdWNoRXZlbnRSZWNlaXZl
ZDsKLSAgICBpbnQgbV9wZW5kaW5nRmFrZVRvdWNoRXZlbnRDb3VudDsKLSAgICBib29sIG1faXNS
b2JvdGl6ZWQ7Ci0gICAgaW50IG1fcm9ib3RUaW1lb3V0U2Vjb25kczsKLSAgICBpbnQgbV9yb2Jv
dEV4dHJhVGltZVNlY29uZHM7Ci0gICAgUVN0cmluZ0xpc3QgbV91cmxzOwotCi0gICAgUUhhc2g8
aW50LCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludD4gbV90b3VjaFBvaW50czsKLSAgICBRU2V0PGlu
dD4gbV9oZWxkVG91Y2hQb2ludHM7Ci0KLSAgICBXaW5kb3dPcHRpb25zIG1fd2luZG93T3B0aW9u
czsKLSAgICBib29sIG1faG9sZGluZ0NvbnRyb2w7Ci19OwotCi1RTUxfREVDTEFSRV9UWVBFKFdp
bmRvd09wdGlvbnMpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0
L1VybExvYWRlci5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9VcmxMb2FkZXIuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDY1OGU5ODNjZDkyNjQ2NTI5NmYzNzRiMGQwOTYz
ZGRmOTc5M2VmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1Rvb2xzL01pbmlCcm93c2VyL3F0L1VybExvYWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
NDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAwOSBVbml2ZXJz
aXR5IG9mIFN6ZWdlZAotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgIlVybExvYWRlci5oIgotI2luY2x1ZGUgInByaXZhdGUvcXF1aWNrd2Vidmlld19wLmgiCi0j
aW5jbHVkZSAicHJpdmF0ZS9xd2VibG9hZHJlcXVlc3RfcC5oIgotCi0jaW5jbHVkZSA8UURlYnVn
PgotI2luY2x1ZGUgPFFGaWxlPgotCi1VcmxMb2FkZXI6OlVybExvYWRlcihCcm93c2VyV2luZG93
KiBicm93c2VyV2luZG93LCBjb25zdCBRU3RyaW5nJiBpbnB1dEZpbGVOYW1lLCBpbnQgdGltZW91
dFNlY29uZHMsIGludCBleHRyYVRpbWVTZWNvbmRzKQotICAgIDogbV9icm93c2VyV2luZG93KGJy
b3dzZXJXaW5kb3cpCi0gICAgLCBtX3N0ZE91dChzdGRvdXQpCi0gICAgLCBtX2xvYWRlZCgwKQot
ICAgICwgbV9udW1GcmFtZXNMb2FkaW5nKDApCi17Ci0gICAgbV9jaGVja0lmRmluaXNoZWRUaW1l
ci5zZXRJbnRlcnZhbCgyMDApOwotICAgIG1fY2hlY2tJZkZpbmlzaGVkVGltZXIuc2V0U2luZ2xl
U2hvdCh0cnVlKTsKLSAgICBjb25uZWN0KCZtX2NoZWNrSWZGaW5pc2hlZFRpbWVyLCBTSUdOQUwo
dGltZW91dCgpKSwgdGhpcywgU0xPVChjaGVja0lmRmluaXNoZWQoKSkpOwotICAgIC8vIGxvYWRT
dGFydGVkIGFuZCBsb2FkRmluaXNoZWQgb24gUVdlYlBhZ2UgaXMgZW1pdHRlZCBmb3IgZWFjaCBm
cmFtZS9zdWItZnJhbWUKLSAgICBjb25uZWN0KG1fYnJvd3NlcldpbmRvdy0+d2ViVmlldygpLCBT
SUdOQUwobG9hZGluZ0NoYW5nZWQoUVdlYkxvYWRSZXF1ZXN0KikpLCB0aGlzLCBTTE9UKGxvYWRp
bmdDaGFuZ2VkKFFXZWJMb2FkUmVxdWVzdCopKSk7Ci0gICAgY29ubmVjdCh0aGlzLCBTSUdOQUwo
bG9hZFN0YXJ0ZWQoKSksIHRoaXMsIFNMT1QoZnJhbWVMb2FkU3RhcnRlZCgpKSk7Ci0gICAgY29u
bmVjdCh0aGlzLCBTSUdOQUwobG9hZEZpbmlzaGVkKCkpLCB0aGlzLCBTTE9UKGZyYW1lTG9hZEZp
bmlzaGVkKCkpKTsKLQotICAgIGlmICh0aW1lb3V0U2Vjb25kcykgewotICAgICAgICBtX3RpbWVv
dXRUaW1lci5zZXRJbnRlcnZhbCh0aW1lb3V0U2Vjb25kcyAqIDEwMDApOwotICAgICAgICBtX3Rp
bWVvdXRUaW1lci5zZXRTaW5nbGVTaG90KHRydWUpOwotICAgICAgICBjb25uZWN0KHRoaXMsIFNJ
R05BTChsb2FkU3RhcnRlZCgpKSwgJm1fdGltZW91dFRpbWVyLCBTTE9UKHN0YXJ0KCkpKTsKLSAg
ICAgICAgY29ubmVjdCgmbV90aW1lb3V0VGltZXIsIFNJR05BTCh0aW1lb3V0KCkpLCB0aGlzLCBT
TE9UKGxvYWROZXh0KCkpKTsKLSAgICB9Ci0gICAgaWYgKGV4dHJhVGltZVNlY29uZHMpIHsKLSAg
ICAgICAgbV9leHRyYVRpbWVUaW1lci5zZXRJbnRlcnZhbChleHRyYVRpbWVTZWNvbmRzICogMTAw
MCk7Ci0gICAgICAgIG1fZXh0cmFUaW1lVGltZXIuc2V0U2luZ2xlU2hvdCh0cnVlKTsKLSAgICAg
ICAgY29ubmVjdCh0aGlzLCBTSUdOQUwocGFnZUxvYWRGaW5pc2hlZCgpKSwgJm1fZXh0cmFUaW1l
VGltZXIsIFNMT1Qoc3RhcnQoKSkpOwotICAgICAgICBjb25uZWN0KCZtX2V4dHJhVGltZVRpbWVy
LCBTSUdOQUwodGltZW91dCgpKSwgdGhpcywgU0xPVChsb2FkTmV4dCgpKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKHBhZ2VMb2FkRmluaXNoZWQoKSksIHRoaXMs
IFNMT1QobG9hZE5leHQoKSkpOwotICAgIGxvYWRVcmxMaXN0KGlucHV0RmlsZU5hbWUpOwotfQot
Ci12b2lkIFVybExvYWRlcjo6bG9hZE5leHQoKQotewotICAgIG1fdGltZW91dFRpbWVyLnN0b3Ao
KTsKLSAgICBtX2V4dHJhVGltZVRpbWVyLnN0b3AoKTsKLSAgICBtX2NoZWNrSWZGaW5pc2hlZFRp
bWVyLnN0b3AoKTsKLSAgICBtX251bUZyYW1lc0xvYWRpbmcgPSAwOwotICAgIFFTdHJpbmcgcXN0
cjsKLSAgICBpZiAoZ2V0VXJsKHFzdHIpKSB7Ci0gICAgICAgIFFVcmwgdXJsKHFzdHIsIFFVcmw6
OlN0cmljdE1vZGUpOwotICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkgewotICAgICAgICAgICAg
bV9zdGRPdXQgPDwgIkxvYWRpbmcgIiA8PCBxc3RyIDw8ICIgLi4uLi4uIiA8PCArK21fbG9hZGVk
IDw8IGVuZGw7Ci0gICAgICAgICAgICBtX2Jyb3dzZXJXaW5kb3ctPmxvYWQodXJsLnRvU3RyaW5n
KCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGxvYWROZXh0KCk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGRpc2Nvbm5lY3QobV9icm93c2VyV2luZG93LCAwLCB0aGlzLCAwKTsKLX0KLQot
dm9pZCBVcmxMb2FkZXI6OmNoZWNrSWZGaW5pc2hlZCgpCi17Ci0gICAgaWYgKCFtX251bUZyYW1l
c0xvYWRpbmcpCi0gICAgICAgIGVtaXQgcGFnZUxvYWRGaW5pc2hlZCgpOwotfQotCi12b2lkIFVy
bExvYWRlcjo6ZnJhbWVMb2FkU3RhcnRlZCgpCi17Ci0gICAgKyttX251bUZyYW1lc0xvYWRpbmc7
Ci0gICAgbV9jaGVja0lmRmluaXNoZWRUaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgVXJsTG9hZGVy
OjpmcmFtZUxvYWRGaW5pc2hlZCgpCi17Ci0gICAgUV9BU1NFUlQobV9udW1GcmFtZXNMb2FkaW5n
ID4gMCk7Ci0gICAgLS1tX251bUZyYW1lc0xvYWRpbmc7Ci0gICAgLy8gT25jZSBvdXIgZnJhbWUg
aGFzIGZpbmlzaGVkIGxvYWRpbmcsIHdhaXQgYSBtb21lbnQgdG8gY2FsbCBsb2FkTmV4dCBmb3Ig
Y2FzZXMKLSAgICAvLyB3aGVyZSBhIHN1Yi1mcmFtZSBzdGFydHMgbG9hZGluZyBvciBhbm90aGVy
IGZyYW1lIGlzIGxvYWRlZCB0aHJvdWdoIEphdmFTY3JpcHQuCi0gICAgbV9jaGVja0lmRmluaXNo
ZWRUaW1lci5zdGFydCgpOwotfQotCi12b2lkIFVybExvYWRlcjo6bG9hZFVybExpc3QoY29uc3Qg
UVN0cmluZyYgaW5wdXRGaWxlTmFtZSkKLXsKLSAgICBRRmlsZSBpbnB1dEZpbGUoaW5wdXRGaWxl
TmFtZSk7Ci0gICAgaWYgKGlucHV0RmlsZS5vcGVuKFFJT0RldmljZTo6UmVhZE9ubHkgfCBRSU9E
ZXZpY2U6OlRleHQpKSB7Ci0gICAgICAgIFFUZXh0U3RyZWFtIHN0cmVhbSgmaW5wdXRGaWxlKTsK
LSAgICAgICAgUVN0cmluZyBsaW5lOwotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAg
ICAgbGluZSA9IHN0cmVhbS5yZWFkTGluZSgpOwotICAgICAgICAgICAgaWYgKGxpbmUuaXNOdWxs
KCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX3VybHMuYXBwZW5kKGxp
bmUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcURlYnVnKCkgPDwgIkNhbid0
IG9wZW4gbGlzdCBmaWxlIjsKLSAgICAgICAgZXhpdCgwKTsKLSAgICB9Ci0gICAgbV9pbmRleCA9
IDA7Ci0gICAgaW5wdXRGaWxlLmNsb3NlKCk7Ci19Ci0KLWJvb2wgVXJsTG9hZGVyOjpnZXRVcmwo
UVN0cmluZyYgcXN0cikKLXsKLSAgICBpZiAobV9pbmRleCA9PSBtX3VybHMuc2l6ZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBxc3RyID0gbV91cmxzW21faW5kZXgrK107Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVXJsTG9hZGVyOjpsb2FkaW5nQ2hhbmdlZChRV2ViTG9h
ZFJlcXVlc3QqIGxvYWRSZXF1ZXN0KQotewotICAgIHN3aXRjaCAobG9hZFJlcXVlc3QtPnN0YXR1
cygpKSB7Ci0gICAgY2FzZSBRUXVpY2tXZWJWaWV3OjpMb2FkU3RhcnRlZFN0YXR1czoKLSAgICAg
ICAgZW1pdCBsb2FkU3RhcnRlZCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFFRdWlja1dl
YlZpZXc6OkxvYWRTdG9wcGVkU3RhdHVzOgotICAgIGNhc2UgUVF1aWNrV2ViVmlldzo6TG9hZFN1
Y2NlZWRlZFN0YXR1czoKLSAgICBjYXNlIFFRdWlja1dlYlZpZXc6OkxvYWRGYWlsZWRTdGF0dXM6
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdCBsb2FkRmluaXNoZWQoKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvVXJsTG9hZGVy
LmggYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9VcmxMb2FkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYTY0NTQ4YTAyMzRmYmJhMDNmN2ZhMDUyODNiZjNlNGM1N2NjODc0ZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9NaW5pQnJv
d3Nlci9xdC9VcmxMb2FkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAq
Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVXJsTG9hZGVyX2gKLSNk
ZWZpbmUgVXJsTG9hZGVyX2gKLQotI2luY2x1ZGUgIkJyb3dzZXJXaW5kb3cuaCIKLQotI2luY2x1
ZGUgPFFUZXh0U3RyZWFtPgotI2luY2x1ZGUgPFFUaW1lcj4KLSNpbmNsdWRlIDxRVmVjdG9yPgot
Ci1jbGFzcyBRV2ViTG9hZFJlcXVlc3Q7Ci0KLWNsYXNzIFVybExvYWRlciA6IHB1YmxpYyBRT2Jq
ZWN0IHsKLSAgICBRX09CSkVDVAotCi1wdWJsaWM6Ci0gICAgVXJsTG9hZGVyKEJyb3dzZXJXaW5k
b3cqLCBjb25zdCBRU3RyaW5nJiwgaW50LCBpbnQpOwotCi1wdWJsaWMgUV9TTE9UUzoKLSAgICB2
b2lkIGxvYWROZXh0KCk7Ci0KLXByaXZhdGUgUV9TTE9UUzoKLSAgICB2b2lkIGNoZWNrSWZGaW5p
c2hlZCgpOwotICAgIHZvaWQgZnJhbWVMb2FkU3RhcnRlZCgpOwotICAgIHZvaWQgZnJhbWVMb2Fk
RmluaXNoZWQoKTsKLSAgICB2b2lkIGxvYWRpbmdDaGFuZ2VkKFFXZWJMb2FkUmVxdWVzdCopOwot
Ci1RX1NJR05BTFM6Ci0gICAgdm9pZCBwYWdlTG9hZEZpbmlzaGVkKCk7Ci0gICAgdm9pZCBsb2Fk
U3RhcnRlZCgpOwotICAgIHZvaWQgbG9hZEZpbmlzaGVkKCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9p
ZCBsb2FkVXJsTGlzdChjb25zdCBRU3RyaW5nJiBpbnB1dEZpbGVOYW1lKTsKLSAgICBib29sIGdl
dFVybChRU3RyaW5nJiBxc3RyKTsKLQotcHJpdmF0ZToKLSAgICBRVmVjdG9yPFFTdHJpbmc+IG1f
dXJsczsKLSAgICBpbnQgbV9pbmRleDsKLSAgICBCcm93c2VyV2luZG93KiBtX2Jyb3dzZXJXaW5k
b3c7Ci0gICAgUVRleHRTdHJlYW0gbV9zdGRPdXQ7Ci0gICAgaW50IG1fbG9hZGVkOwotICAgIFFU
aW1lciBtX3RpbWVvdXRUaW1lcjsKLSAgICBRVGltZXIgbV9leHRyYVRpbWVUaW1lcjsKLSAgICBR
VGltZXIgbV9jaGVja0lmRmluaXNoZWRUaW1lcjsKLSAgICBpbnQgbV9udW1GcmFtZXNMb2FkaW5n
OwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9pY29ucy9j
aGVja2JveF9jaGVja2VkLnBuZyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L2ljb25zL2NoZWNrYm94
X2NoZWNrZWQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmYwNmY2NTEzZDZi
MTE3MjEyOTBjM2YwZjNiZTViZDJkMTU3ZTg0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRl
cmFsIDI2Mwp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwQEFrNHU2QnlUKkBgM3xJKmlrJjx8STU8
TXp4UGImRU9JI3lMZzdlYyMKeiRgZ3hIOE9xRGNeKW1DYWk8MSl6UXVYcVMocjNUM2twZTIzP2Rq
cWVCNV5yNlZAPH1OTSRzPz5sWWhycTQrZWMjCnoreUJPfj9ZcjlIckZKRU1AKjU1b2VfblJTY0I/
QDVtQTVhfitEcmU+enRnRXduIyZmaj09MFRFXldPTFZVdylfaAp6R1ZBb0h7a3VRQEAyWmFIXloj
fH0kTnVqfWtBTEhyRW0tLXVkLWd4R2ZBNSlKejQtQkMmLVolZk5tdHRZZTYxWnkKelVpWih3Pnxu
T1k8OE9YTSNqM1piVSRQMXVTTVlURl5MM0FTX3heJWJ3c1F0NzN7JnNAeFI2a3ZZNil+RWdRdSZY
CkolUX5sb0NJQmV5YmxVJmAKCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9pY29u
cy9jaGVja2JveF91bmNoZWNrZWQucG5nIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvaWNvbnMvY2hl
Y2tib3hfdW5jaGVja2VkLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY1NDY1
NTgyYTlhMmU2YTg1YWRiZTA3YTRhMmRhNWU4MGI4YjAxNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAw
MQoKbGl0ZXJhbCAxNTkKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cEBBazR1NkJ5VCpAYDN8SSpp
ayY8fEk1PE16eFBiJkVPSSN5TGc3ZWMjCnokYGd4SDhPcURjXiltQ2FpPDEpelF1WHFTKHIzVDNr
cGUwKl9IPU8haytfX2t1X29oQnFpQzNjJC1tPlEyWk8kPQp6P1NKRmdfRmU3cFFvRThyYDNgT0pS
JjVoUjxtdy1DQHk8ISlWRUVlcUd2dXU3ZVZ9ZHoyMldRJW12djRGTyNzU0IKQkd1SHFCCgpkaWZm
IC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvaWNvbnMvY29udGVudHNfd2lkdGgucG5nIGIv
VG9vbHMvTWluaUJyb3dzZXIvcXQvaWNvbnMvY29udGVudHNfd2lkdGgucG5nCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmMmE3OWViYmNlYmQ0YzcyYWIxYmZjMGViYzkwZWEyZDBlNGFj
NjQwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkg
cGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDIwOTcKemNtY0lqJnIySW81U3xU
YlZ3Rkc+S316WXRuYGVwOCMkeEAhWUspfilxekJFI2w1QG4wQGg7eCN3RmhDQEwtRWpwCnoyY2NM
KjQ/U2hZbGluMU97c1Y9JCtNdnlrQ1FSUTxlQWBfJmk1c2REPUZQbkNlZT0hUm0tanhyblQmX3Bw
UkB4Jgp6Q140PjFpUCVObjc3KE5IRSZXMFNXcE9HIzAtSnxWZX5MKlVeKHc5YygobHZ2RkNQVytA
Y3NEQUIweHRjeGROTDAKelNiKUp5O2BNMG9OOHJKdSZRUnA9RUdDZXozM2Q0R15SVihjSTh6amlg
IVIpTjUlRXNkNi01RGBSMX1se1I8fjxkCnohbWAwI01WRH1LVip9M3oxfjVONmk8USQ7eykqRGg0
cWw5bnY2cHN0OExPT307SUN3b28kfFVIeDt8cU81WEBLJQp6T1c3PXo0Rm1KQF5FR1U2a1RKcnxw
JmBjZD1gPEdCKlYqJVBiQnFhYjhOcStFUShHenBta1NIdkA5bC1eKEdmNUUKeiFlTlclaSRwbEQ5
MmBLJEAtcFh6d0taJHFrJSVAbD1XZGpmN3FfPFhUdlp0PkA5a2woci0hfH56dDAkYlN2OGtxCnpy
PGBofTF8X1o/NkcmJVUmQD4yNE93YmZBbXpFJTs+JE48U2Z2e25LS05eTWRfQkxid3pDTW53IVFM
JmAtSG02Xwp6Q3w8M3VWJTBRaCVrVyMqKGRfU01yPHx9cSRII2F2SjxVIXpWWnZrdD53KFo2NnZs
SGBYT0RvPzViQHN3QG1UQWIKej1ETnE4RHttcHo2fUNVa1RrND9eKkNwSkQqc01YbDhpJWtYd0RL
b1B1Qj4lektyR1VuMkZ2WjNtdDU5ZmJEaF9YCnopWEJ0Uk9WYGY2VGRFYzJ5bHpzXlBPUDxSSlc4
JnRsfXlKTzZMXnkjaU9waVk4dGRnWER7T1Uqal5mQGRgfE0+PgpSKTl7S0tCdHxGSSY1P0kyZSp3
VCNWVWhwPAoKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L2ljb25zL2Zhdmljb24u
cG5nIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvaWNvbnMvZmF2aWNvbi5wbmcKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDMyNWQ1YmQxZTFlMWUwYWNmYWY5NGE1MmRjY2I1NDYxMmEyZThl
MTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBw
YXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgODE0CnpjbVYrfTFKVjQ2UCk8aDsz
S3xMazAwMGUxTkpMVHEwMDBtRzAwMG1PMV5AczZBTV5pVjAwMDA5YTdiQm0wMDBYVQp6MDAwWFUw
UldudTd5dGtROzdMUzVSNSo+TGxnbiNkMXIpfUFfcylJSCZBbGBDSDhVOTxzZFAkU2creml1dFUo
bF8KejMmbGtqTFFETTwrXzxrb0hqI3FoS09uZUswdT5ic3hAdThfbCstZSZwfE1Ua2tWc34xR00j
M2VTMkNHOV92Snp6Cnp0eE5zall6fkt5P3tfI3lofnQ/NUJrQTliUzYrSyhNajI3eD9EOzQyVDJo
Kz1ASH10Uk5he0Mqe14wWCMqRkwhVwp6JncxZ20xYW90OUBgS2k/T1UxS09tIUYlVDloLVkqb0ZA
eVRCbyZkO1BrVUBfQDNRe0ctU1kwZWAlNDlAdlJvPmEKentLcGRQd35IND8kN2lxMXpXIT9kP2Vr
fWAzPm8yMUl4VlU0eil2eDBvRW1FbHZANndaREZRd0w1Q0lKNXJSbjROCnpzbH11R095MTJ7NytR
aVRpVjVSQz5nSEM5P1NucGQ5PiVvWW5TNTYtRSgqXjE+MHRzLUlkZFYlanVwRXRma3hNLQp6PVM2
JlJ5VXpUQyNtNmlBVHdpWXhnZlpRTFBjS3Ztb3pxM0ItTTlkM05DMl4kSjE2R3o9KGZoS29pM0Z8
QTQ4TSkKelh5dCVaUXBRWm5nZHdQMmYrSU9XSX5wWnl5NjEpbjNEY1pQSVRtP1NCTjd0NGAoPWV7
R3Z3TFI3Q1ZpQSQkfnx9CnopZnUlbGE7QXBzSTtncXEpRFNeNzZ6c0h3Vj03b0Y0TW1wT1lRKmZj
ZUJPRT8mJSVWa3I/KG4+Yk5ARktNTU13LQp6MHo+fSQ0KWkzT21kWD1PZElaYlZOaExLVE1MYHJy
LWs4PF94YiVGNm1uWU1ffE1qbSNnQStRa3pkMXh1TVNwY2YKel5mMSNwaiVESndIcmIzcEhlKm4z
MzVjU0FwKFlzMUM5eldtbWdKTXhndz4lemR8YmFPXzc4VjtSbUhYcD5gVmVUCnpDKnRJdylQXlZ5
aVF8eTMkfXVUVE1MY1Fsc3tQfXVMeGJ3fDQ+JFVVbUJvSSZUOVhuWHJVe2t9anNzNy01cGZpOQp6
dUxHNSVrcDgyQ1Q3MH59U28tWH1qaUV0aVZYMDg5YHNNUFNtRjJ5KUE4VXZFSDNuVn1TJm8+SGRR
X1NuekFlfE8KenRnWTN5KlM9ZjZ6MX1FaTdNMlJiQj9fTTAzRlZYRW0rSH10UFVwczlaNz1nO0hm
TjhnWSgyTGNpdiZTYi0+ViRfCnN5dTApMGAtamI3SnI/M1hAVStmaiYtN3BRSjQoJGhAPTZgTDFP
TmE0MDcqcW9NNk48JGYmbmdwalF7YHUKCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9x
dC9pY29ucy9maW5kLnBuZyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L2ljb25zL2ZpbmQucG5nCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzZhZmEzOThiOTJkMGQ3ZWMyN2E2NDQ5MmFk
NTZkMzc4YWFjZjc0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJ
VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDkzMAp6Y21WO1Qx
Nn0teVApPGg7M0t8TGswMDBlMU5KTFRxMDAwJk0wMDB5UzFPTmE0Qlh0RzQwMDA4flgrdUwkWD03
c20KejBDP0pzbGduPSNSVFJkNVZ+P2ttNjB5T3cjajRPMWkjOT9ARzx+UXxnbEtFV3U5WT96WW5s
YCVMYUhYP1lrU0RlCnpjelMxP0tHWCYzaDgtPTRKPm5yJmB+ZWx9Zj9aY0FtOHlifUQlTW04Ukg+
Kk5STHNKVW5VKzh+dDg+NWVvJHF9Mgp6VHdUYjA+Vn4xcDItcGxfP05tI212QVFPOXtYflhXblZg
VWc+cVRMKVVTOSVtISUqPiRjPTdgVnpgZEVCPjtELU8Kek8mTkokPjt9NWMkbEM8dEdHeHp0cF5t
fTQzKFFATCF4KGJBZnhLPzR1MGRgO2taJXVpOF8ySEBALW1SdSVnekdpCno4byowbCQ4QUVjMTVC
QHtAT0NPNmNtTjxAbTRWZDBDIUFfWSlPRU16RTE5elVnN1d7MlAxUElDZGx7R3Y8QnxnJAp6MFJD
dnsoPHtJZjc9XjJ5PCMmTlNWM2hvTGFlMFYwZzd3LXYxSFNSV00pI35VPGIyKGY8cTl3aiNfZWU5
VHhHPCQKeitGN1UjSWxzS2BvflopYEYjWmJUYGNObWNGSHA2bWZxdiRNajRKMHdjKntTJUlLKjNf
c3hKLW5HYXU9bXZqViZoCnpuUXZXUHNTZiFNV1V3O3EmMVJaemA3QUlDKih2SHNHJWI3LTAqNUxr
MVhVeWY1N0dFfGJnODUxaiMrSVVqO2p+eAp6QXJVeTdyKnlOPm5AVXUhPmtHY09lZEV6SC1RQ29i
SGopNTJvPkVQbkJSMG0mOE54KjImYjhiNzV7PilqdEByTHQKei1ubTgqZ2AkbVE2TnlpTkJ1WGl5
SmhYekZnKyMmSXpWUyRZU2JJfEFgZ0RUWUtpYT85X3dDUV51azJze1drPkRqCnpjMnJFd21qcFl5
bW5jP0lWfjBEbGQ9eCRfMW8mSitxS1ItKDFZQUwrY1FOV1ZVbyNKeGl7X2o7azEkVn5yXzIqKAp6
Kl88PXFHP3p2VXQ3NFV7QkVvdlpuenMmRlhSS20hNllIUT13JnR5YVJeXiEmQEtTZTh6bzFPOVdO
SVRidFJzb28Keks7eUg4TD1obiZtWH45SWc+SEM3YHxWQ0Y0JV94fFE0QipSI2JWJmlQNzdCbHE1
WEN6ailhengpTFhKU09KajlTCno0OEclSTJMbXduWSRzVSFIb1d5YVdiWT19U2BXVTdWREhmY248
fkk3cFRWdFRVUWNmZ3xGPmEkNF5pdkw7bFhMTAp6MWk3RjR7bF5EaipDKzd3PDlgM29GWiV0YlVx
YmMpZTVke2ZzVXImM3gpWitHMDAwMDJWb09JdjBSTS1OJSliQnQKejAxMHFOUyN0bVkzbGpoVTNs
amtWbnclSF8wMDBNY05saXJ1K3pBWns0Knt0aCtsfk1MMDRxc0VLfnlOdVZfPzdvCnoqbzdJJDJh
RzdafE09QX5reno2bjUld3tWVyUzfFZKUXtSXlAlLVRRMEd0MjxLTHVhLSN7ZDhUMDcqcW9NNk48
JApFZzJXQE0qWj0/awoKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L2ljb25zL2Zv
bGRlci5wbmcgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9pY29ucy9mb2xkZXIucG5nCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTNlMmFkNDY0ZWI5OTMyNTZhNmMzNTY3ZmM5NDA0OThl
MjZmYzhiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5h
cnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDE4NDEKemNtVi0xMmhSQTNQ
KTxoOzNLfExrMDAwZTFOSkxUcTAwMUJXMDAxQmUxXkBzNmI5I0Y4MDAwMDRiMyNjfTJuWXhXCnpk
PGJOUzAwMDA5YTdiQm0wMDAkITAwMCQhMFkmPSFwOHg7PThGV1FoYlc/OTtiYSFFTFdkTF9+Y1A/
cGVZamF+Xgp6YUFodVVhJVk/RkpRQEgxMkNoaiZLfnp8VXlfUldnUk0hPjl8TDQ5cGAjeFU0R1pA
PHc7fjRMSXokdnpJMFcqTjMKemtgXl9CRypWM3hzYXVpe0VOeFJNUWtBSGIobnlnPS1CYmRIQnJU
O1JPKVV+cWx0ZHtwVGs0ZTUhVnJhazg5WCsmCnpuWkBKciUkcGd7YXtJd0hIZkJzYkNHQWdvQUZs
M3U9bCQrRT1lfkR8YkI/KGZqb090Sjc1VUVeNEJBP35VYWJPdwp6Y3w4ODF2dTdARDlVVUYtelQ8
Jj1LJTZ9d0IyI203PDtPcEg+ZnZRZXZlT2hNdmxlbz4wMDhpZk84SUdOaEw2bDwKenthVVpyZkEo
JWNFdGQzNnJEYmB+NWgmaUA/Pmg0Tj1aPlNDXk1TN3YwUHIzQWhQdld7IVl0Qzg8V1E8K3JXYVkl
CnprU25WK01FR0ZRQko7K1A1JGB8ZDF8dVRuaWpfc2orUz0/NXh3Y0Y+S3A2N3tZZXo8V0ZLcGJq
KHRHO1VnJStQTAp6YVBlKmVBPHc4Y1c7RTV5NyUzMytkIVcpdFU7K20qTFNEV1o4KE9RPzhqYlJK
TU1lSGdKdn4/VjB0Zip9RD1FcF8KenlrJCQlXll6fi0oayhCfVZwQFk3MDF5ZXFTVTdBXjZfc1JM
bW5fTlhFLUI2WFA0OShrJiY/K2dfS2w1Q2gpZ0d8CnpVJEdmSnBBWEp+WVh9NTkyISp8ZmIyaz1T
NklrMClycGpNdC1TeXk9cHtGX0xUJkdpIUlaWT9hJDslS2t2KCU2KQp6MWFPYEowTFlhTGF3VVVT
Wi1UKkNwfFY9amVwWCZfLV9vOWNVO1Ria2ZqfVN9a0h1cEUwSGVfZXFwfFlWV0ZRYmcKemV9NWtv
PGJxITdWSyY+YWlvKipnQnB7UEJzNUFuQTFTVGRETnZhSlAlcmFFMyRkVVF8SElMWUFTdHRBWWhG
LW0rCnoxWDNeQGklJHY2TVhTfUtzSHA3TFNkdF8tb2VxcnBoOU9CRmdvN0BTLX56RkQoJnFzezVQ
YGItSmYrdjstPj1pRAp6fDMlWj1rY2dIN2Mmdzs2YHt4I21SaDY1MktndnEwKDlxQ2BeNzhVfDFJ
e0tBaU5IREZmWktCZUxDSiR+I0QhPyQKejF7a3xATEJvUipqe05EPTJtdyRQNmw1UlR3NWlGU28w
cTBFbktoIT50YzReKztKUGA2RF8yfiZiWkcjcW5fQUc7CnpfQmhoaCgtJE5JME1UZF5nTSZfdHhT
UitDKz5wWEk1czN+MDZiMW1peGFZVytZJk9lbGR3JWBZSGRBX3RPKmhWNQp6NV4paWl6aXtMSTZC
a2ZqeSRVO2J7dUZBcGRjaCpvIzl9Y3g5RE8qfntURmNOIUglYXBoOGJmKnRIQ19+JUs/QjEKekYl
JVhWQCNBTTJxMUN6M2BwX0RAQD04MTZAJWR8PTN7ZXpldWBFRj5zejdqRDFVTHM5Xk4pM1krSUBM
SjBmLVZQCnp0NHpudi1SbSRrQCtxMnw+KFNaU25VYUpjMnB8Iz1pXmFqZyFDV2B9YH5MZG9DIVVt
b2h6VUhuJThESmsqUTJaSgp6RDg5TC01ZXxuVmJwWn1BJlV4PjNocyFmSUNaKTZ6MDhwd3BTfmxB
NyNGTz1TOz5vUXphXiFHSTBzc2RDZktXS1AKenxOUnBeO2drKWdOWHc5Nj1XYVh4KzVJbHMrOCNx
RjZxQCY1QV83MiYjUy04ZyF+aEB8MnBAWCkqIWkqbFJzYUJxCnpNWHtsXjAxWnRgdjk2Xk55fWlC
ai1wZmNwSlUtZDwzOztPaXs+VmhFYHw9azxfdV95PUFfaStWIT9WQm1IbEJaQgp6N3V3cmpQQSpH
cXN0MllAMDAzXjZmQThDR3JQaHF8QTteT0chSD01SipMTXprX3dHcSVmY1J0eVcmfTlyVTYoRW4K
ejJFRmJHNXtXeGNOdlNkc15gckckcjVHT1cjbGVGSVprd0FhIUtANGJLcCt0NnhibyNxSUlvNF5h
Wk1tUCZ0R2shCnpMPyF9d2N1Tmg9ZkEjQDdKTzRII3pAYFEwYzdnSG4oMkt2X2NsNUt2aGQ8PGwx
M25EKWhjUipeZns+S2o3akhKOQp6dW92NE5aTiN5Ni1vVTktVD52Sng7LW08PntYRD1xX1hEVVJx
S3E/VkY4OzJ0RmxWIVVMIz5kUFlrXkc4cGZgJXAKej5PPkh3Q0p+VHNWRWZ9Typ0S0heeTFHN3JE
OVdZO2h8TjZAT3BDWXhZI30xKj5BQ3VoJjZmNGNSU2wpdTJPZTBDCnpRSTgwblVXREV0TEoke2o1
KTJLWHElPDRkLVFCa2BLKlRgRmpeKVc5cUxtcSRoSikycjFeMklPc1VmWEs0VUpCTwp6LVk3eiRV
fCReb2ZiK1ReQUFMQkN0PWteSyQqIzk/c04pQDEoaE1ZbmJBQUBVYXcwT0ZKbFY2cXhIJEtfPitR
OXwKeigoSmBoQz5hYiE4UHI8Z3R9KEs2XmNXcEk0QHJgeTdMYEg8bDBpZzIlK0kmfXM7UXw9VXNG
PkV4bT1qKzZUSnc9CnpsOSVWcVgkT1Z8V2lYbSFjO21KQS0xajZmT1FiM3opNmh7QFRVZmV3VHtV
VWNEKExoZ2JWZUN1dmZEKT47VystIwp6ZWl9dWtJciF1MkMlenRtU3Q1RitRdWIwPWBGKVN0KlZs
P3hZYk1tMSQqZD88R3Z6c1B7N1gwby04Z3I7X3Y7bXkKekJlVDdyemBBZXM+UGxsKClpTmopbE1T
b1VpRXYmWSRNNCghNCE2dGlVVF9ucDNnYFIpZkNFSFN3c142cnFwcSY3CnphP1A0KlFtWWx2WHE3
T1R3RDVZeT4zXjFpeGUkPzdySXpvakQ5XygreDdVaWt1XnwzQF8rdmpmPWx9UE1oYHdqRApmRXBw
NHs7PjNSZCYhK1lOendBYmUwMDAwME5rdlhYdTBtamZNSCo8LQoKZGlmZiAtLWdpdCBhL1Rvb2xz
L01pbmlCcm93c2VyL3F0L2ljb25zL2luZm8ucG5nIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvaWNv
bnMvaW5mby5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiNDgzZmYxMDBmMTRl
NzljMWM2MTg1ZTE5YjMxZmUxNGZhZWRlOWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVy
YWwgMzQwCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeVmojQEgxfCpNYyQqfjRmakt4OWpQN0xl
TCQtRCR8KnBqXjZUXlJtQAp6O0RXdSZDaiYofDNwXnI9ODVwPlFMNzAoWSkqSzAtQWJXfFl1UGdn
KVpaUUZBdkczbENtSTgmWWMpQj0tU2UkLSkKeld2Pl5ycVhfR1JeUUtEXkJvI3duT143O249JHlM
OFJeTU4kM2o1QjY5VzJfKUQ8KVEhQipzKzlFJllgPHNBY08rCnp0KEwhdlE1dSM3Skl8Y0FFVmR8
VVNGViMqRkt0KVVYMzh0PEVWZztiY3NfTXJTbX5YKCEtcjRMe2MzV0pIfHx4Mwp6WFkmVlh3SCpn
SWBVfnNKMHp8NDhOantMQnBFfmF3ZjhuMCkhWitRXng7QCNxSkQ9SGo+fjZue3BtTjFndyhGXyQK
ej5QIW8oYmIwUzVjZFJ5QjZ1WEZIPE44fX0qVGE3Qm9VKno1dVhpVlpXTUohPjZ9dCtBLTJhXkt3
XzdCeXt6WEp8CmUrZVcpcjlge0Fkdn1ObEooc1k2VFdBSnFLYjZNdzwmOyRVJVZTdUlwCgpkaWZm
IC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvaWNvbnMvbmV4dC5wbmcgYi9Ub29scy9NaW5p
QnJvd3Nlci9xdC9pY29ucy9uZXh0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NmYzZjY1ZDMzZDMwMzMxNWYwZDhkOWRkMDNjN2U3ZTI0MjdkNDk1MC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21W
P2QwMDAwMQoKbGl0ZXJhbCA5MzAKemNtVjtUMTZ9LXlQKTxoOzNLfExrMDAwZTFOSkxUcTAwMCZN
MDAwJlUxXkBzNiNJJFRYMDAwMDRiMyNjfTJuWXhXCnpkPGJOUzAwMDBQYlZYUW5RKlVOO2NWVGo2
MEMjdEhFQF5JU2I3TnN9V2lEQFdYUGZSazhVTyRURylZODNSNSo+Ygp6bTBNXlhSVFBINUhNOGdC
VihtcEtESmEkX1p8I0dIM04/dylmPnMxVU1YbVpHUWwlN3BYLVA+N2Z9JnRpcSgxYVQKelApbGpk
THhAQG1EUGxgQmg5OyZlbmllJVEjIUorc3ZCbV9gbGpPezAmdDUqOUlkemdZKFQ4LXcmJi1CMy1g
ZkEkCnppYGs7OFQjZkxxM2liYmo4PUhmIWBYPSs+bDdyUTtkMlFWLT8+OUNWYn11T3lWOF9FUlJJ
al52PEUhYFZIRShhKgp6Q2pPRnZlTHZ1bCZEKDE+dC1Kcn1eSmA3I21naTtKViktViZYbE1AcHop
XlF1YnQ5cDN3KSlLWlA4djZDdHktfmMKelJsfj05WlQqfH0lOWhpdz4mVFZCa3tgRSpKJVI0dSop
a19WKXVBWCg5Ykg0TTJwKUg9WDwlJTgpRSg8O2BQKjgxCnpAODx7Tnt7SUJPdmcySiZ7blZhODZ+
JlJkNnNIY1NtZWc1TndjSipCSHlWMiF7cDlkV0RKKHY5Pko4ZzUkTDBKPQp6c2syMTNMfVd8RVgt
SCY0a35BVm9MdCt+ZXJ5O1F8QHkraWl4UntSZDxPNGdlUyNqO153dVVgSCkxcU1PNT11I3QKeiQ9
TlkzNm8obX57KjleOXBNPHRaTFAjblJQR1gkSTN8IzE4WHlPWVZ5WUhGVzh8IVgqeHZ8K0N0Wj5Z
SGE1MD1ACnpjO1pgPmEqTTxSS2spRks7MEhiaFFAfUdtO3NocnRZTkdOfTVKWVpSNVMrTVo0bTdD
cEZvbSlfQlkzX0FFWTJ5bgp6dUI+Tkc7ZFZZZWFiJExDZGc0JVRaTXRoZ2E2YklOIXcpPTZtM09J
dFg5UTA/KjAwKSVLZjljXmo+RUlsUSMxUWMKekE1N2w/O0g3ekI1ZWUjPiVGRCskPl9ZKDBORXZQ
Zi12fXFpLWxWcHNoQzhvK2kxQ3BySiRBZmhYN1pRbCszKHQyCnpIJjY+MDVzNmVhRiZXZVYxJT5n
cStWLSEkWjBBUGUtT3MmUHNQPm4kQHchSmpfeC11Rl5SdHJeIUBhdEZ3OWdGegp6SFQqaldEazVv
UiQzRWNxOWtBPHhzIVl8RF94ZEsmPnImO2VsfjImcS00bE8oX1JGNktLQ3J0a2pfPzt5MDM0OEoK
enZWZDglJE4zMExBcz5DKDVmMlV5X01BRTVVUH5pcDdEO3klYUs0KEtERnlffUJocjRuSFU5Tzco
TC1uN2JGRW8hCnprfTF4PCVkNlo5UmtiMlExfG56ODB3enVMc35gSkVTX1kxfj95UWlAS2BRVkJD
O18zVz5ZUlV0bDw3ZyUra289YQp6UjIpZG9mekVSbzBnPFpPT1JSLTFReFdrZ3BSfUotI1pDVU9R
b1JEP0ExeDxgendfYk5HeW5ocTA3KnFvTTZOPCQKRWc1LXcwTEkzfiYKCmRpZmYgLS1naXQgYS9U
b29scy9NaW5pQnJvd3Nlci9xdC9pY29ucy9wbHVzLnBuZyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0
L2ljb25zL3BsdXMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmRmYmQwMmQw
MDJlNjNhMTIyMGI0NzI5ZDEyNjEyMTQ3YzNlNmExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgps
aXRlcmFsIDE0ODAKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF5WbjhneSEyJT9lT0lkZF9GZmpl
ZWJhb0VOT2lwSENzSlBXVGBFPFQ/CnpzS35NVTxvQE1UZypHMUNhJiotTihRWSMqUG18Z2V6QVlL
cSRKYjNZbGdPU1dxVkJYeD9Rd1NYaUwoX3w+MnZJXgp6dSliPU8pJE9vLXEheyp4UVM/PClZYERo
TVJaU0RMdTd6LWZ0WHZALWFeX0l+JXhNbW10QmQhNHA4TE0kZHJhKCEKeitFO0IwUGpUR2ZOcVFV
Tnk9ZGJ1d1gobDFaUShOKTlCNnMlbnolNzhvfmh0KXp7bWNJUHQwcndfUmdJOWBvRTtHCnp1VmlK
eThANjMlUHV5bUNZP059b2RTVHplSj18d3Z5QURlZj9RWXpZd2BRR1ZwOGJTO3t2em9VPi1qJCFP
fUt2Zwp6OU1jbzIxS3g0UmJEaD5QYD5iRjdwLWZBQGY8WW1FWVU3b0M+VHxMQHVhc19vc3klYmxA
MXtAeGR3ajEtcFJKYWgKeiFTaT8kdmtiJChqRio/UzR+UiYjdUFjan15d05zYyVBYm5EJGAxM1V1
ZVlxM19rQkYqX0ktYDxsYlg5em9ebCFSCno5KCRZZEl3dGtWJlJkWnljckV3dWN8VUlAR3BvVHJ1
RSlPdSlIbXd+WStjJHxfcEdIeT4kekxTWTVUbnZOMV8rNQp6KCZ6blJFZE8lZVd+TSFTR3hLOShT
TXZTalB1WERmPTR7JW15cWBKLSsmNDh9ZDY/K2RoJW1LbHNqYEhzRiFFcGcKelFCa3NUQHlvdSpU
KURwMDt4ODJpRSNAcFEqP2VLUFNJRH44LTIxbElLRTd5dF93SlBgV3xKNSE9TFB4QlJXPl96CnpN
KUh1JCEqZzQye30kQH57Y1A+YGNmUipfeChUKX0+UC0+dV5sd257KHArTSpyRD1BbiVmWnxHSzY9
emVSMGxvJgp6Um5tMEp7P2A3Ui1gfTJweVolbDV8NVckNCYmeHU1JlE1MnMtWmZuI0VISnM8ZFVL
NzRvaUB2bDdeZypAMSVXSXYKemohVmk3VXp4PWxeVXYmbEhwakJ4ejw8e0FHczA7JT1OUjhObmVO
ODNJJSg9IXI5KU1SWEttKztPa2F+IUI+WnxvCno9KGNCVG81UDtZNiNvIVo/ej99MSYmSEgyVyNj
dTxvaWBqRloqRnhGUjgqV2NKLU1NWnVmcH5CVFIkRFgrdXNUVQp6ZDdNPmBDT3RVbyN+clNAQE5i
IVZVKDIrS1NFNHNyZE1CNnFeNll6QCUrNzReRWtgfSNrSitCRCkrejdSWmJiMyMKej5yOGxtayE3
fmwwcXl3KipDeG1MPWt4eUdvPjs+bGAxLWBkZ1BFSUhjRnpDKF9jKGpQYkBkTmw5QHFVcHVtOWBz
CnpAXzQ2amo1Vyp1djhgMCp5MCVNci13an1QVWBxMEtjVlM+eSl2SWctPFole3dMPjRuSmEwYFBs
QmczcFk1KTJIQwp6UWwyaTNBc1hqZkMpeFRqSk15XkEtK1FseHQlYWV9aitLe3YhOSVgKTB2NW1I
dFVETzRGSWQ4JCsxMjkwbHo0Mn0KemprNlF9SGtLTXtfd0xfbmR0VXhhUWR3LWlqXzBNNiVEVVRV
QmpldiNGZ1EpOXZWN2FrJUF2KWl6VSZDKzNhX3U3CnpoQWJaaEFJP3VVeHhlc14tXn5ySTNJY09I
b0VCSXhvJExyWVZEUml0O2tOSjdTaFh3ITZ3UCg0ViRiKG9fbTdgRwp6SCpjclA+S29FKWsxYi1I
QWxkemA/RTFGUDJORy0rKzR8MHMtKlIpX2YtTXVjaDEzSUI0KVdSVEZTdWUtYV5VJC0Kem5NUXx8
X2cweTw5X1FJUHA/fnVFU3JmJFd7U0tgPDVFYiNnejJCT2QjZE1tb2UofWVhNHx+QHZEczlhUHxN
fDUlCnpAOH4+cz9KdHxHcihYU2tGUUNRMj9jfEZPVDNsOzl1ZkxSZz9gZERYUW5xPlBLWlpsRCR3
OGFrVl9BVmdyJns2fgp6UUllOGFsNF9NKWxuU0k2ajBfQm9iUFd1M2pWd1k4RXY8fT10JkErUjRH
Z1VlM3xqOXApfVV5fSV9PmNwdEhpRDAKek9UKjNzS24pVGc4LVBXZDZ7elQ5Tlh7dEQlVF8yKUVM
S1IlRlU/Qz9eKktmbHM3M14pMjJ9M3BDMXNZeHI9JTg/CnpXSDRCMHckPXB6PHdhNUNsazs9KGl7
ZVd2M3NNPSgqdTBpJjB+Slc0RDlGcSFOaUU3ck9pcW9ATyliZ0RQaGx8bAp6Wk96XlRSMz9MPnRV
TlFOQnRzYDdIOFZZPGd1JW8+TjVSOzlRS2tXP3tNQ1N8MTFHR0NfQGROZVRPJGkmUXlxbSQKY0J6
OT9EVz1YTkZWVXVRJjlaKE8wcj5tZEtJO1ZzdDBLQE5qd2czUEMKCmRpZmYgLS1naXQgYS9Ub29s
cy9NaW5pQnJvd3Nlci9xdC9pY29ucy9wcmV2aW91cy5wbmcgYi9Ub29scy9NaW5pQnJvd3Nlci9x
dC9pY29ucy9wcmV2aW91cy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzYmUz
ZDFlZTZiOTA4NDNkN2RmMGY1MTc3MzNmNjNjZTcyZjQ2MTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAw
MDEKCmxpdGVyYWwgOTU1CnpjbVY7czE0UjZaUCk8aDszS3xMazAwMGUxTkpMVHEwMDAmTTAwMCZV
MV5AczYjSSRUWDAwMDA0YjMjY30ybll4Vwp6ZDxiTlMwMDAwUGJWWFFuUSpVTjtjVlRqNjBDI3RI
RUBeSVNiN05zfVdpREBXWFBmUms4VU8kVE8tViNTUjUqPmIKemx9JV98UlR6ZSFAMEBlKiY3Vl5I
Qk4mWXwxJnhUSGcydEdjRVpRZyRzbG9hbWlkeyhRclltYWBwKVI2YDh4ZSR4CnpFPSlKQVZzJWxD
QjA/Pjs4eDxtKkRrejlTbHZ2WTxwKkNzZ1dNPU5VX2o1NktrfTstWlQ9Yy1wSWc1fHlkJXVAXgp6
P2gjZXhOLVQzbHNEUyVGI2w4RTMwVEIqX1pOQzUxc1FOfj1ZailmPjY3SWN6UXxFXzlZfk5aOHtV
PXluNXxiTnQKelp7Rk4tYD5UNWY1NDJlMCh6T19BKm0rPUJUNjV5WXlLbWleenB3a3pyb2VAM1ZL
eFRtcE88I1FvJDl9UE45VWJnCnpfWGdpaWVAQFRsTDUhblBVVH0tS3tsUCEjI1Z7TVJgdTFBKHRB
Y1lRO1RfZ0FvZnpEPF5QMX42LUMhckNKX1ZFewp6Tz9ZOX5UZ15yY2YqYFYtPG1sTSRfMjM8X0k9
Sl5heDRwSHc/ZFpjPnBLZGRlR0JOY0RNbDk5QGRAKj8jQk11YDUKelliPTY2TTk2UD55bTF0ezti
N21vdDJleTdxa21WK2BOYilJSzY/Z2gwLU9tKkg2PXxHdFpeOHpffCN4QiQ0TUhhCnpENiQkaktq
SUZ5WnxyenhBcGNtKTxvUiF5cDhJSlRzMG8zanFfI3B1SmMtN2o7MFRIQVJkfGhBZDRyYzc4YD8z
NQp6a2BWaDZXblV4fmk9eDtOeisrSTE2fnQ3JVh7dS1taXNeLWFNWHs5clNJeDsyPWw9WnQmX15m
Vnk+ISF0Wm8wMCQKemhxNW57bmlBTHdFYHFTeDYxNztHU31qcCleJkIpQ1FtSUBYdGZRS0t7aEh0
UipYKUppVzUqOHsqTX1ZU2JVczg3CnoxbFlqZkxQSFJsRHRybFFhZ283VEw0ayNIJWU8djFMP2km
Qmk4dVRRdz4/I3k4Qmc5amEpMG1rdyFZM01yNy0oMwp6WUFRVXE8eW85Xyp1YkV3cStVc1Vid148
NDNAc3VPdDdffnJyfnxARyhHVHdALWAkdyFrPmheK28hbmo5SHMpe0gKej19eWxjTHNOTUQmQDFJ
fkZeKlBfRS0qS0w3NlhKTGxHR2dBT3M9Tml6RClqQHxDT1B7cEZCOCFhbFJ8cEdaYm5mCnojQU9X
JVdCITVpTUhZWl5yYyQ9b1NnenF1WG52WjchclJILUxnRG51JnJYYiY3bUtBdjxAR0RBSVppVjlJ
YDxWbwp6ZDxpWCNyN3U+N2V3bjtmSmhGIzBqbEB2UVQqZ19RVSFpSWdzX0kxfmk+bGhPdTh7LVdf
ZVlibCVIWWg4Pm8me28KekJ4V3VmLVBnZm1VPWIqKHMhSUtoa3QjZ15xSEszezZHJGVfUjZrYElE
NjF+TkRzczhVUjc1UCpANyZnQEhjZjQhCmQxVzByaCRscjExU2h+QzwmYUQ2ZDAwMm92UERITGtW
MWhpdyNjbHVxCgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvaWNvbnMvcmVmcmVz
aC5wbmcgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9pY29ucy9yZWZyZXNoLnBuZwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiNGQwMmM3NTY1MDJmOTIyYmJmZjM0ZGYzNGMwMDU2NDA2
YmQ5Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5
IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAxMzY0CnpjbVYtYTEqYGdyUCk8
aDszS3xMazAwMGUxTkpMVHEwMDAmTTAwMCZVMV5AczYjSSRUWDAwMDA0YjMjY30ybll4Vwp6ZDxi
TlMwMDAwUGJWWFFuUSpVTjtjVlRqNjBDI3RIRUBeSVNiN05zfVdpREBXWFBmUms4VU8kVT0xRHxC
UjUqPmIKem0xI15BWEJmeC0/PmpSKXlSJUM8bVJzWnlZbXVOOU1XfD5Ta0Q0Wn1GPV5UbWZ8ezc3
MEBoRXFPJXN6UXtuOWlzCnpIRUdnWDZlS21hZlRUMk93WHNLSEpXOHohMVZMS2BMT2w9YDBkYXg3
PVhqcmZVP0NpU0BKbEU4WE9mdmBlKUY0Vwp6b3wlXnM1Jm47aktUQTxyUyZRXjZic1AzS1hQM1Up
a15saGdYfnJkJC0+eSY7XiY+RUJIQkJvYDVFT3xzS2omPUoKejVfQ2IzWGJ9fG5xb2NPY243UVZx
ZVd6MGRyQHVAS1RSWkQzOT9TelgyM0dvQmIzTVN5VXcoMF5aRG1mZj5+Z0IkCnpvSSUkTzFWUlFM
SmVzc19ebSttIzt7a349OVFKZU4zend2Rz0pQnokVmcpZ2cpbHNgPVU+PG5tZiMjRmhYPm56SAp6
VVNGKzYzPTAkZkZrJjxubnlOdEowT0pneFgjOztTZj1pd0UhYEpeRihuLUx4c1c1QlZ0Xk5eWGF3
Mz5fP1ptREAKemM/TWNrXjw3RFZPTTgySkBpT2h9bVVjMWI0UlghX1ZHJDk3bmQpfGhOKHdUWmcp
Z0teTF9vK09ZK2F2Z0ZVcnJiCnpfZGszUl5KLUJSPipeZ2dicz5wKUZWOE0zKXo3KDlYWkBLQG5o
RkBxVk9QU0k1Wl87YHQ+N1YhNndpbyVgPz1QPgp6QTNwdTJIUTNmT09pb3E4KDBCKz4wdyZoeXIh
eig3dXEqLUQ5LWE+ZCEpcFY+bGd1MyM8NldNZWRQQ1B1RkNhYiMKemZTV1pILXVDKjZ3a3RLfDwl
VnU7e1FYS19gLXZZcmc3RlRIJXA/dCRaakN+Ykk0bUpwV1Q3eiRzRzM2XiVGSVp2CnpqbihXOFY3
JCpGbnxJO0Z3QUVFfj40dGV8RHhnYS00aDJLd0FxVzY9Z35QSWxETUEoaUZ4ejhHaCt2fTJAbnd2
fAp6ezxFJkRrMTRgViNWayNwU19tJHhZRndxciglSV5faXF4Y2Q0UVl1XlklV05Lc3pAKmVGYEtt
aj5ffChgSWc4OFUKeiUtJU55MEhBV2txV0xiV1lEaTxtZjNxeW9qPCZRJU5Eem5zIXRgRFV2Z3VZ
cDBDUFQmOztOPUcyRGxjezAxJn4pCnp4WSsqMD1JKEwlTWpUSjgwUlYtZHd4OE5OTig3U1U5RkpA
R1dRU34lSVJGTzZmVXNgajxHUishe2dLSnt1T0h2dAp6OWolS0ArdCg+VHlqRUlKNzxSfCNAIWtK
RUVGQnp1VHR8ZSZkOTQ1dXYpZzFgeEhTUj5MVE8kU24kRiplNDI9NFkKendqSk5xdStVQngmSjst
JSQ1ZTshcl4mRUxuKCtJcFlfZT80b1MhcHApMFQhUWtkZiNGMUpLPCtNeDMhIyNxVHNQCnpVRyZA
JXAwZ35tVmJUfWVlZiE/dmhyVTJLbntuS296NDVGdGglbz9iYV5mJko5PmtFQjxIJig2X05NYmEr
czw5LQp6Pzx1S25gYnQ+VDBiJkRPdjFCNlloKGxINGRoUU53d2taPDFWPlFEJjV2cEdWb3xhfF5o
SUhnRmlBQlY7KDBSe2AKelJ8KyR3O3swXjI8SWVDMHAyeG5oWFV4YU9DeFRBTiMqcElIa2U4RTsj
NWdCd3tHfV9iblI/P1FGbFVWMmU+ODxkCnpISjJ0aDFLK1Z9eG95azNFVzA7ZyFYbHRCRkhKNzZR
ZUJLcV9zPFhuKC1mSFNONmA0fDRabWQ9MlFReDc4PWpSVQp6QX40M0peXzJ9cXRrVnxnQDRDM2Qo
e2JpZT92fjEoP2peYV50RGpISCRqP250R0UteGooX3VyejVITCYmbEt+eEYKenkmaUcoPTBpTz1G
PjwqM151WmJjVkV8encocjNXLWJeOTg7ZSRWWiktZ0JTKjFIY2lESiQ+IVlIN1A1JWxgQzVPCnpU
NXpVMVJtQktLT288Mig1I09KcWVYWWpedH5QWjgydF5ZbHFUbWRldD1AZz8mNl5HVEY5V2F4UTBH
TDZNdnxPdgp6Ql9YM0FBP098VTIxZmg1MFFCZndOMXsrNGZDdiVNcU5SeTNDZTRBKEw8UyZYYFpz
U3lWPz82XkZwMD5UJWxRdX0KV1g8VjllK31+Z1QwMDAwPE1OVU1uTFNUWk08YXczPQoKZGlmZiAt
LWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L2ljb25zL3N0b3AucG5nIGIvVG9vbHMvTWluaUJy
b3dzZXIvcXQvaWNvbnMvc3RvcC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2
ODI5MGJmMWViZjU2OGQ4YWIwODBhNGUzZWM3ZDc1MDQ4ZWM0NjEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9k
MDAwMDEKCmxpdGVyYWwgMTI3Mgp6Y21WPFUxUEEreFApPGg7M0t8TGswMDBlMU5KTFRxMDAwJk0w
MDAmVTFeQHM2I0kkVFgwMDAwNlZvT0l2MDAwMDAKejAwOCt6eU1GKXgwMTBxTlMjdG1ZM2xqaFUz
bGprVm53JUhfMDAwTWNObGlydSlkfj84RCohXylOQmFOKDFjZ2FOCnpLfnktKWpnP3p5UjdWKWNl
eztAbV9MNk1rNFlqcHVOTHgofTdUampWNyE0TWNRVk1+LU04cFBedyU5QGB3cDVHSgp6MmJJS25m
JT8jZ0xpLWs+UChjdT50K29sSkRCNk9pNzwxOUlOdEBmY3lHaCpMP0FoeCViRVhmd3VFcz5eentm
bnkKeiV4fUs9Rjg+aWNWO3FNaWZPeTgxTkRKNj1Fajt6bU4lJXMrcnZsXyQ+azJkaD1Pdyg7MF91
TihQcn5XeWhLNyV9CnpIWnszKm1rWDNDbnpDKU1FVVorRHBXRTlyZ01FRzlPVzUteWQ9fmZ3b1Q7
dl98NnRxQm8kaCNGQUYxKGl1eCtzSQp6SlhBYFFsKC1peVYqWipuVHNlMHhHdH1Hci1SSlBgO35m
MTc9dlVRc2I/PE42d2FYTGw+bXdac0F3PVBCcjU/Pm4KelZIcE9OVk5nP0Y/fSowWil2dHhhJVJB
dFFTPk99IV8zQSlpJi1VaEtQcHFlaGJSPEh8PDNURWclZUg1UCF3YGIkCnprYGYlVDctbGxibilV
MFFRP1hjMD9abXs9NCowMUVKXnxtWl9XUFQrQDgwYystbzh5YjUrVWsjQmRWJiVtP21+TQp6VFpB
V3NBbVFgalVBdlplSUUqNn0hJUMlaSNxVzFVNk4kQzg2QjckTjtFRHp5OUZGKDRII2Q4dFUwcX5D
QSN6SFEKendKYTl3KnVtMCRgJCtrR09iZGFiWCY3Wj90WkhwIyNvb1BgTFhjSnBCTkV9azsyPk1L
WjFIRncmbkV5SGZVZklrCnpMWGZfSDl8fStSU3s5KSpYQW5aTD83I3QxPD5lVHFyTSVxUWluRndv
ellaUDNaSk18TXI0Jlh1aklMPkBMTXxNfAp6eD5QRWtjX0JiNERyfXFoKUQqJGZyJikzRUFUSigy
ajs/OEZOLT1Rd0ZhKDQ2YXlnVnpENWJFSzB4NjQwKSplOzcKekR3Zm0za31BKlRVfi1iRjNtMCZE
SlVHMnhBe1FAV2pnMXdkd3J5aVNndiY/MDxhaXY2WlJiN0xeN2tjbDlxRCRuCnp4VW1zVTJzR2Zp
I3p4fHxaZWRBQD5oNENHQ2JucyFHITA1aF4zS2lqU2p2MWVOSiM9UEpSVio7Yl97MSg4VUxJKgp6
TWNAQVlYaEtrUF5lOXV+PEhWJlQrMCNTdi1hVS18ZSZwfmx3clMxO0taR2hOJHcqMFotYUo7ZHdW
YHt4e04yX0AKenJtS3RTKnxZUT9JZkIjV1ZxPCRkOEpDTGBjQD1ValVYMWVqV2A7c2FpOChsa24z
XklMM31UcmtZfSFRUD0xdU5qCnp4PHV+IWJ4S0ReREYrZ2xGVm40UXl3S0V5dEQqdWNGRyVQdjdo
PnRzbkp2QXx3eW0rQDtrdERWNGJFSTdMVCtMTAp6WENsRmFhMlBjKmZAZmQ9eTh6SXByLXxPVkxv
UyliNl4pVmA4TnN1MUJ+Xmd7SnZWTmNwfj1iSDlxXjN+JjtlS0wKelFZa2UkSG53cnk9RlFIV1ZV
UCgxKFQwWjVMIWx6bkV8Xm5GYT1wRHxNQEFeRXRmVnAhOzcpSV5gUkNvY2Y3dE1QCnpDczsrVD16
eXltKGBoKzZLMz95eXVYcEI+TndWPkg1dkp5dCVQSzJiU3pGOFJvdEBlS3Y5VnVtYyhWbnZ2KCY4
dgp6dUdNOFM9NGRkdSRzWShmYkQwZDtiUSpMV3JSJCgrc0RoUE9SazdVZj1oYHA3V1FKbX5BOG1O
TTErMXModUBoTUcKekY/PzN6XkxfWiVoN0Jkb2BTVEhGVyU9U1NYdEkoTDxATTVlez1DXjhrTkBe
MTlJX3otZ257JnY7OEl7WUBJMGByCnozM2p7K1p2YUImX1ghMDs8ZkVWanJ+JkEyaGpZTDw1Q3J9
TzFfNHZkQGx8O05BNVp9LTFRcX5gZk8mLSU4OSpGKAppUF9RVTQ0YTZ3Szd2TWpibXRecHdjP2sw
VzAwMDA8TU5VTW5MU1RYITVtJE51CgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQv
aWNvbnMvdGl0bGViYXIucG5nIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvaWNvbnMvdGl0bGViYXIu
cG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2QxOGFhODJlOTNkODk5YWY4M2E5
ZDg2YjhjMGFhYzFmNmVhMmEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDE5Nwp6
Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXjIwKk9DITJ+NE5sJmtAOTc+azQ0b2Z5YGdsWChmYHUl
dFdzSXg7WTkKej9DMVdJJE9gMGg3STtKIUdjWDkxZkgzMnxIMkRna1YzZW5lVkBRUGkrZTtlLTg0
TmclN19nPU11YXQxcVpOMHFmCno7Z3RFYy09NXZIejN1cEdWdkVxRWhBTD88NTJqYlM4ajc0Tnds
OGNeUyNZbG56YVY/ZmpMMG5LN3hRbGNaREhfcQpMXj5iUDBsK1hrSz87U3UoCgpkaWZmIC0tZ2l0
IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvaWNvbnMvdG91Y2gucG5nIGIvVG9vbHMvTWluaUJyb3dz
ZXIvcXQvaWNvbnMvdG91Y2gucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODJh
ZTBmZThmZWNjMDkwY2NkYThjOGMxMzA3NjZjMzE4MmUwNDM5Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAw
MDAxCgpsaXRlcmFsIDY4MDMKemNtWntwUlpOez52IzM5Y3lTbz1IJkhfcGNFREZXRlNoMiN3cjhv
PEJjUFFAS0xNaVU8PyhYakg/cmBgfHZYbEteCno/MkNDTl5Hc2dOT2ZuUGxPPG4+V2cjLWx2MENY
dXlRS2gkQDs2SCl7X3RzaTk9YWN+ZUE9RkduPGVRbSswUlQ4Sgp6I0F9IyohJnxPZFVZX0k8TnVv
eW95dnJ5WjgzVDw8NlB0KCV7RGVrfjkyJHh2c3Q1LU0yUVB8KyVfU15gQ21TcUAKejEqSG8xJkdK
UlleMXRvMFg/MjQleUVAI0tQOFpKVHhTY3s5M0pPUEl1PEVjUl5DWXMjZk5AU19HKHUpJlRYdChv
CnorWVA4THtRRUxMI3kmV3UmMyRAI2BJfEdabz84aVQwNj0zI29ZK0A5VFpLMlZrcmNvT1l+T2lq
dHZVYlgySkIjZgp6WDM8PE85SDVMNWg/MUFqVmdQZz5WWjJrPHd+dH1IcihwbzZJcmIkNFVgZT51
aDd6I2hUS1h7cmxxbXhBTzFlfXUKelh4YGtZej1xVVI4NXtzWV9ITSgrbD97VyozV21pKCVVfTB0
MmowTnxXbyYkV0FCbHZyMEFTMVNXZ1lqJUl6IWtDCnozPTctJnZIX2BseVFTRkF0UWkjZU5lPlhW
LWREPFQjU3BLYlhZWVdKNEJkbHd6IVFNPGd8KXAwOWpKckJpYSElSQp6emc/WFpVfGt4PDF0ZnVC
SFE2WFg4byZtSXMoczN0RC0kOXBzYnBBYEs0PmlgWSFoNCQ1Nys9eU0oMHVgVU4kMHsKemI7K0hT
blpaSUBad0c9RVQ2amtjdzM7dmZYODJWOWVCKH1seVJHfDVJdk4wQyhlfjdmIUB7diVlPCh5JGBR
KT57CnpiSFBsZ08ofFZqYiszeGJsUG1GZ3smbDh+MTRueGFNdS1HSiN8V2B+amNzSzNHYDU1Ul9g
ezZabF83RipBbGg+SAp6c1IjUzI+akxQJClIbSEzJnhvZmVXQGorXlJCIylAUGwrOXczQnp9Tz9L
dG16VkR6eHc0WVUjfkJmJWx+MyptSU4KemplY28oblYqP3w/TCZTQClrQylTaFNCck5QKSQrIXRO
USlyVS0kZyRsfkBeNzVeZlE0MCRmMEFJPkprYUZBT3luCnpyWHY8U2JyY2RCbDIyMFckIWkrWmRG
aDdOPSlwVGBFWkFyKV9eUUApKkVVako7SjdxIzhGRm42UGFsQEFteS0wcwp6KnFkMHRmaHpKYC0j
MDdWT3FWWVMrMVAqSUFTTFBLJVokZDtzO2c0cXgzflMhM0x8eGkmXkV5JWh7RHFQPWc8TmAKelF1
bDsxYWFHd0ZvR21VTm44YDRgUDdjbENuYWBGN1VzZCgmO3MqUW1gbHB2STM+PCo5Zzd+YGVUTU11
XjElZyp3Cno+JDA4IUAmVW1BdWF8OEY5azdNdT9LVXdiRG43eEUwU21PanFMI3QoQjYlfVBgVW8p
a2sobH1qNjhYVztgTz8oKwp6QFpRMVRjVGtmTU1XT0FOaz1zI0ctZ0h0azJMMWRPZk02TzM5WWF4
RDw2SDd8O3thJlIkaSgkPGpDQzx1SXpoZnYKenFXPENFdXdYPmRxSmB0SWN0akM3TU9tPWl5NVBe
bi0kaWxJQjFubCZNM1lNais1c09WQkI+KyNHOyt4NkJiVVN3CnpxVnhLUUtvUmNabz5geWJ7TyRn
e3xIc2sqR2M3RmxqZWlQIyoqN3JUKXw4fEhtc05DZGpOfVQ+Nn1kVGJNTVBwdQp6KEhgTUI1U0VO
Tmw5MGhpeG8zWkUkUl9kPTxxeVY0cFRWeH1iIWkpKHkyKDA+Q0Nlb2FEP0h2WHRxdnEyYy0tRE4K
elBMQ2xIWHp4RkR2VjsoUC1FRFBQTjk0b3l6O2FGdDQ2V3xpXkEyYWFDVztrPSgqVnApaEUzPWgt
SlI9YCpwdTg3CnprfClrPHgpOVlGJktBLUZvVmhQQXdRcEpjSD0kMm9Pe3dqJTVzLTJIdHdyQX1k
akF2VXJzQmhhNE1GWkErdEF6aQp6dSkodXxXZ0FvMSpFSy1mbGhiM156dHhHPzg4QHViVklQd3BZ
WmttdUpfK0pOdFZGQSVzSEF+JUskJEtEY2xkVE4KemJgWGJSaFh6XkZTbk9DM1NnY3NFU3IjPTAp
YTVJZTN8LW5VMF47TFVWXmtCVGxqRDBEQkM1bCQoR0pPSElBYGNeCnoyJkpNOCNWX2RTVm87PFFC
KC16JGFAWSspOFZNRyVIYEVNS3NRblJKUnV7fHs/QDBxSiFLdnQ0OTlqZmdAUVpYYwp6KUhUMTNo
S0BpLV5oY2dZVz1De0t5WXJNfnFqbnQ3S0QjN2FJNkZmLTZgTHhrenxMS2QpVmoqSHtae3g2JWJH
eUgKek9DbUhodGRETmNzMnpXKEk8XyNPRnhBfUdfbThDRjVUbldmaEJXeSR5LWBlUjgqOHMrQ3dZ
N049PD85PUQ3ZCQ/CnpgJW45M2R1KWV0SjJjKVRqPEE8YCg3Y25oeVliZzgqKHVFbXJUY3EjZFV0
Qn5kaVQ4aHombkR3ZlYrciRrLU4ofgp6dHZpVzNGUWl+cGJ0Rip+Sm1lfnJDY0d7PGVFNCt1U29s
SVhZbV5aYlRoeDcyI2VmVXs1bzlvfmNtUkhZd3RwP2sKekVYcG1pN2NNcV9JWmsjTThOb2g1R1g2
RmA0P3pTTEU1UntkST5EYns7P1ZKfihDKDZ1WDJNLTtVaEgydT82e31jCnpuWHk8MldlSmpUcFhr
VGclVU0xIT82VzFhJmNEQWAzS2YlPFV7V2JpS00wJmt0NGd8fS0/IWhWLSF9bWJmJXJoewp6cGo9
UmA1ck5eaEE9dD1pdXgzRU18OW8pMUZTbm5remQ0RndraEgoSWY0MSs3M0tpb1hxYkwpWkJHRVRk
ZD47SHgKemR9Y2dLIyV5VSNZM15KYVh9YG0+TDtLbjhxQyQ7Wl8yZTlqLSlUOFpJUlo1cVBSLThg
Tjd1IU5VI3l+NSkrKTEyCnpKQ0QlfG5OcFkobkgtbyNScUl0T1JWIThiUmxYRXtDe1ViY254Wkko
b28xYmBvTFpkUDwlIzN8JTNaKm5WWEROPAp6WWohZnpsenAhKHFaTzl6cGxQbkRyTzdZVXNQdEhs
UTV6WDY/PXdRSy1CZ2xxbTJpVDtPYjJGZGhISGtwVz9zYyMKeihfQVlZQ3xKZlY1Pj1GMlpUa0Q8
MnhxbChgWURSb2JeQEokMHtAOFBpMkkyMWg7UX5OXnxiZH5fbmdZJiQtYkFCCnpQaj1eNDx1cHB0
O253RHU8UW44UzFvYjlzQ0dSSFJZVDBQaVh+ayhaUm00QEhSYSNWfVJaZGhie0cydzVzSTk0Rgp6
dE1JZy0oSEUmVXQ0Z2sldHtFO25FfmxCVlV4OzZmU1klJHtJXnpHQm9vY35Mekk0P2crKFhAeUom
akZmTnJ1VlMKelZqbHd5ZypGXz8rQm4qaypteGZQSzhRSzdUYTRkMElDWSk0WmNOUXo2cytBbnhp
fD9xO1Q0enp5TXN4PDFPbWZnCnpPeUB7ZiVkPiZBaEYjVkB4bDV9ez5JZGgkc1lteGtpfUwlaTlW
disxRCVxLXApPmNpOU1nMVllOV50bXJibXNEeAp6dX4mQ011I0ljWXV1Vkc0S3YhPDltTVMlQ0Fu
UzdoYWRqTFl0XzlmLUc2OGFaRUlYPCM/U0kwMUs0YllEZXIwfW8KemxrNEteYm5CSmVUJC1PUDF2
fmhEXlhYR2hhOSlVUlh+dm5UJFojdiQzKSNEJnNtVTczRGlvUG9ORlB5WWhoJklRCnpNb2ZuQjxN
SDtFOEJGIWtvTkh8Pzs/JntwQSR4PmVnZiF5eCMtUFBBI1NwfVRWQEM2QXsmd1lEPHVkKTxgUCg4
Pgp6RGErcjJ6Ykwpek5+OFZXIXxnI21QXnphfm1YP2UwUWFuTHJXfjhYIV43fHI1T3tLLUpDQ0BL
ZmJkTiRldiphMjQKemUyJD88T0VwbWEjT2FkMVdIbl5zQmImPClqZko8bVpsLVB6Jn1rXjxacGpZ
KD8pNlVMUl5uREUtWnhhJitrejk7CnojbTRWTW5zY29SPTgkUjZqK2RuOFUhbWNsQnA1YW5sS2RS
REhrMGkjLTVjRjUtNE0pcyRfQjA5aWJ+bzhOLTY0bQp6biNQYkJOQS11Wm1ybXlHXj0lc2J6eGJe
MjlyNSs/czFtLXYme1Q9bChufD5QTUBuQzg7fmNPMElTVU9FZTtTJWcKenwzdDJxczx1ODlJSXlD
ZXtrKT5pdUFUe2J5JVplXjhBbkpBJW4oMkI+NTEpTnhhRy1+M3ozYDViNX1zO1BVV3BsCnp8MVJp
SjZpYGR8aWsyb05hUVJ9PEhaUVN6R193NHU2IzgtbnBOdHckXzxgX31qWEZfQGVZaVRYSG5QVTA3
UUpTJQp6V181NHV3OWVWKGNeZy1hd25YS31jNn4hPlklYkpmY2NIcTxlNj9YdXlLPVUoTH1CVHle
fUsxWkBLTnM8Uk4rO3cKekcxYlhSVzk2WDUoKFpBQSs+Yy1GPFkzd0liYjg7aUluVXUjRGJza2hg
IVZIfntsQCRuOytwbEdXaHZ5OFduaTxaCnp5QmpxPWNDQn4wdTd6bnl1fGpHfk1DYHV4dmUkMzAr
V1NZckgmWWZJO21ZXlF2T2otdVh+fS1aZXhZTzYjTnRCdAp6UklwUnNhaFJaM0pZSHo5VzhrcV92
Tl83fDUwfWUmVzNAPjMjOWhXeT5xN29XZG95bGZEJkF+eC17JkBVUmJnYnoKekIqNnFLWHlmX3Np
U2hOa2dKRHlfMUY4ZCF5JHJ2djkpKlgld1dRcUBvTH4zdz0yQDR2Tk8oYlhgbjIlV0V6fkQ4Cno4
bEYyWmRtRmQ2QEhlRkE2I19FSjNtcHNEWE1XR2w/RD5RWDBZRG9KS3RoNlliYEo7NGxYYD1Jd3ZM
O18paXRMegp6RUMzRz5oYFIxV2JBe1V0PmVvRnoqWSpkIVB3eCt5X1oxNnNmSGViYWd2YlJnTjc4
dDZNSVUxMnJuYGtGY0EwZEgKelZ3bj04VlNtUjghMjs5TkZ6VF9ATHdeMWNTOVBwaWw3V30mZXdN
QnJBVUhKVkVoPX5AYTQ8I3NgUFZkSkA4MlE4CnohTFVebz0rbj07JmJqV2J5OFcyP2JnfXlGeGF6
Pis/fkMkb2hPeS0kRFZ4TjMkYnxCMHUoaTZrKzd1R3RROCg/Jgp6bGJpajhySVc+cSs/Q1BeRkUx
ZlMtNSpodSh9TD4hcU0kZ2syQ1I8K0Q+RDNxaVdKR0BWcXVQPDxLZiQzK0Y2KnIKekplKEM5PGhX
ZnBmXj80YmAxRnJ8OEZRWmBrTDgkR3JEYk9Pc1NNRmZ6TUZfeWF4SnJeND4kWEhGIVp2R2tWUChV
CnpmcnNrVlBjJkRRVVVxJHhuPlBiU1pfdGxoKSRCS2c5QHs2b3RBajhTQGUpb0w3aE9NOTNwRDtO
eTRaO0pETDZsdgp6e3shdmFgTUxBKyVlMDVVT1NiMXVtcjdAOVBrQWheK35zZ3UtbW9UVXY/e35I
IXxNRnFgVE9re14rTnFyPDNgMXgKelZXVX1RVktyc0chNG1EJGxtO0lNV21oPXMme2RfVFZ2cFhk
NjA9aEcoPnltOWs5UXV1QyMxYG4kSlU7MEx9VFFsCnoyJmI1Oz0pS0A3QjViMWp5TUs/aWA+fCh2
bmhMV1M0cXllaD49KnFUcXN6aihTeUJuKUtPelM0bzd1UHB4UCNWSwp6YXM7akRFX3VBJkpsQ0VM
bW1jbG15RzMwYFMzI0FPbFkrQDM8cyVWOHlqfj5fY0kkXjd3X15iJkdDZn5INkQ3T34Kek4ob0Fm
VlowSUYyYyF1JSt5MUVJU0kxYjFZIWgqbzUqU3IhQmtTSDZgNjtpJnorQmN9SFZDeT9vNyQ/I2Fr
bDlfCnpKSzhHVkszdmJsLW9nWG57U0FvPXk5cF9sK0xOVDBPaSVEK0ZRZ0A4VGd+RzVsaFlLTD9R
WilWNkI+UXNTaU1NNgp6bHlhalB1O0FCIzJXRUtnaC1lT2txb0xXUGpZWEs7LTY8aylPJVZRR0tP
Xl8/KSp8bkNUK1NXQ0Y3aU8kYjtPbkoKenBrJV96IWZKSVgpNVlGcCMlMF4zX3BaKXI8Xzc7bGRs
N1VweTl1RjshWCtYemwqUndjMjhTOFE5ZExxamk4fWsmCnpjSUB4XzYwcnBGWmMoaStxI3BPK1de
d2xMT0ZjPUAtXzIyNFQ4MEM8N3VmXlo1b3UyT1psJStsPEs9QG1jYDM/JQp6I15JJGp4X0YtMlZt
Q0wzbkBEbV9laCl7RFpQVE5LSWd5M1JERV5HdU02ZGp7eSVsZ2t4UUV1d0F8V3lQbV9Te04KemBi
KDV5aHxMRUdAdmRIaVU2Rmg0aFdZa1RebXN3PHc0VmZHV1ctY2NOcVc5a1FFJDRnSWhKWGhWRSNu
YWQ3TSRACnpyckJ2aTZxbDM8PkloSFRZNW0jM2hDQX5fJnA2dzd3JihvQ3opcz1TTlNabW1jRW9J
fF5fMFd1c1pgeSpxcztOZwp6LVEjPEglK3MzTkAyaVdgZ2Y2U35rWEBmSDtJTTZEdCF3T2c5Zn5P
PDBpc1ooVG0rOWhHaEx2KVRITUBzNSsqYHMKelN7NUdwSm1MZmlLMncwQiYqJSs2eU8hZ1BxNH1H
V0NNIS11X008RFdYSFQwT1goI1Q+Z3A8fXF0RjNKRSZxU0t9Cno4ckx0KXVOezNsRGlxQkBWTGtx
M1pnJj5HKU95aipAbipjMHlrVUlJcT0kST5aMSkwTV8+VmV+PFl7STxxfmNVZwp6UjVIKzMkWFl5
fUI7WWpSLTI1fDt5enVENHF7MzNBO1VySUAzZ1RObmFJeUIlbWxtdiopVCFwWFlYNz5wTFhnTHwK
elJIZHZnSzJSbEA8JVhDUUEwWGA/OU10YmtlbCNZKkJjMzVpPVZ7VG1vMjs1RzhoeSY+d2o0RDd6
RlRaPWFiYU9fCnpiYWQyeCstbFhae3B+OyFJXmpVaV9yPm4+M0NYR1BrLVZNUGs+YWtAP1pocDtH
di1+S0hPOUkyPjckMkM5d2YzPQp6MWZXfjkpcGQhWVIxTjFOYXAkSWBRZW5Bcm0+V0w+UWl6VUt5
UF9wZThLcVVjPzUpRFpTYTk1dUdxNHk0Wn5lO3wKemJvZ0ppemVAZGYrMVNuYih+cj9WXyNxO24h
cHV+MmFBdFZfP3V2XnptRnFtJnF+ZldAKXx6eGxDeCpPMiNEcm1TCnpxK2VTTjh0Tm8qIXI4dylf
I0VXflptcHhURkxrN3JTPkoxXmN9NUgrTGl+YUdsSz5VM2wpX2JjTFRmP0VAeXRmNAp6LVlHeVFT
OWlOM0k9VWNpOGVpZztWbGFQUnFwe0hIX0kmeGVRUW5ZU2wtRClBJTU+dDMoVV5yM1VtNHhBP0VG
MEgKej9uITI1UTwtfjZyRH4wKEtfZ1VSWmhNRzFzM2hhNCQ/bil1P2V3fmwqVUF4Y1RKS3RVSmFm
TXw+P0ZUYmQ7KWVxCno2QHMpc3JAZkc0SS09dkRlPyhnKiYhRUoxRn0oYj1GRXU+KlZqe3p5MThI
Ymt4T0tHO3xKZVN6diZqRXN6aGlPeAp6KUdvR1AmRXBMKjVke0ReUiZRNVM7RmwjWlZoKjU+MEhB
SWwjfVF4dmQ4ZXt2TUs9UTVYKXJsVEZRPlAjRmxiM1cKenV5OF5zQUg4QWIrS3EjS1dqX0plSHBC
PmVCKkl3MnFPaTgyQDF2TGRZOyNEN0JAfFVxcylhaG8rXmdVe2Y/d0xDCnopezFPeD4rRjdEcDVX
NV5Zdl9manZ3alRrVUZTS3x5UiZvdTB3WGEtSC0/UHZafkwyTEpXTzRkT248fUImWH0pewp6eU12
fGVYIU9WRVE/eXUrNSNrX0YkWV9wY1A4Z0RrQyleLVVAU1kpN1Z5PGNxcXE0WD5zMnROYSR0Rz1B
V3ZnZzYKelg3Z3dFcDdLTjhiQTlXQChZRVNWYkZha2k/JmN7JEZtND40SjhoTlBvVGZqT29lYTBh
a2o0LTdDcUwwJmhRJXJeCnpfOT9QZTdHLUl6T19eVzReQEVrSjhkU0VJdTJvNi1SNDU4dClFQHU2
aDtMPmEqVXIhI1B4M0sxa1kzOWxXWHtoUwp6an5SVGo7NUtWQTlJKlBVWWh7TFFvTlZuZF5IOSRe
RTxkfmkjcUhEISs3ISVWK1ducm1ZYytIZE5ZUzZNK2JzQksKelk5VzgjZD9JbWtpKkFhUm1LekYz
OHNIbyM5KDBXU01kQUBGcEZFIVFuZVRnOCVhOz5fQ1dEVDgrS2VzI3hFMWJ9CnpWJFhlYVZzbmw0
I2h3YVNyPjIkZGJncWhDZWtWR3dnMGl3YiQjVUhnT1hCOUhxS2V7eipGRSomK2Y1NHdKZCkhUwp6
cjQ7Xj07RWNsaGVeWiolRXNvdV9tbHFEX0Nyem1gUDkxSlJyeyk1RWx4ZmEmYC0tb1YtbiVsVCgh
S1dkSTwzb30KenN8OUYySCRJZUckLUF+Wmd0Zzc0b0NjenZDSlpGVnNwJUFoV0BaMllNeGc4K3ly
PlhOUlhkSj01NW9SOElFRX0tCnppZ3BIbl8tSjhTWSVmfmV7STdoYGlnO3AxaWR1MXozMGRpVFQ0
YWR3bjFzSH05b241OVpUe3RRPmh6OFRaaG5NcQp6e0EqNkByNW1sZERvQmR7MnB3OSMoS3pHZ2d3
cGdEK1QhfWA8Q0VLdHk0P05tIUNAM0tmXllyK2VhM3g7bXpISiUKemRxVGt1eFRqQUFYP0BfJjBF
Yyk0YFZEWG41Tz57WUZ2b1l1Zjl8KkoyNnhBZjc3amR5dmo7KV5VVzxoU3ZRbnt2CnojLWVQSkM4
UEViSUkmMnZ0clBtPChQQXMmenNGPDg3e3pFT0pUa3FpPldQSWskeEZ9TWMoZXVuaDxCWDZKP0oy
agp6UHIyOWg7N2U9QmExRlcrTGRPIShwcG5gOTc3UEE2WSluSiZGRT5UPy0hKm4+dVZkMjxNWEVH
ZVZFU0JJQHNFbGgKens3VkReUlJZUlFCQGIpN3tQKjlqP35rbFd6WSpUVzkrMF9uWitSclNJd0t0
RzxWZFJneEdHbDFjMiEha1glaGN4Cnp3am97TkMyZDBUSStKdnptOF8pVXZQZSkjPEpoI2M5WEh1
NSFDKDZzUWp5Z1pXZXN0TlVoJT1+d3hyODduJX1tSwp6ZV5JVEc7UTg1Z0ZjKD54ZXokYTJ2b0Nk
LXAxXkZmSTB8WEslZXBwdDlOTnk2UGhkTUlicGA5eER4SW9hSWJOWSgKemVXNyMpUDJIWGl7ODNo
ajZrdjhPZV5pfEBKI2ZCQWpqUHFsUShDYzMtaFRlfThlJCMhNSVURD1IUTIlMWEoYUwmCnpBOWdN
aTxoMkIkZXpEZ25lciRlKXFrXlRCXmtHVyFDR3s2VXohVHdHM2JhKWg1c2l4SUJjUjNvOUp1dD1f
IzJ4Rgp6WDZ8cGRAc0lYNjY3OSlyTTBKYD1HfnZXdFR7ensrYkY/fld0O0NRKEZWUXRSWFBnMSMo
cU5AN3F6I3UxcmRVPkcKejt6XyhwaWM2Z3hXQ0MhNGUhfVBQNTtJKTFDP0RkdjxzR1JZTSNfNXBC
V3lpN3tuUGBCejQtKDRvIWJoKzl+a1B2CnpGMk1xY0YxVTlwY1JQM05OUU91WU5hdmAtRDdWMzZf
YF43VkxLa0tCcT94M3BCKlhlOGA8Vkw3YFdHNFJuRXhgeAp6bW1HZWhTWiZNSUZISEZ9UXx2UXFL
bDVgWWQoVWAoKmdBKDttUk85fmkrN2xsdXg3OTlxRUBmRVN6aUkjIz1wYncKekNzVEFOPEFuSCZS
T2V5RUdTJEpPQHJtcklfbnE+O3F4Un0tNTxQQTEjXjdHWHNsRUhUVl9Tam4xYj97QFhuJkJoCnpX
JHBXWSVqQnR8PkVpKFlKRXhmfiM/ekxSIS1RSU9uKzZXIVJ7aW1fX1RVWTZ4eyV5ZTQySHh+bF5x
cFp3T1B1Xgp6UXNSPVo1fGh2NFcyUFE8ND1VfHU1ZWQ4fHp0VnAtbjY1QypNPkB6dGg+d35VcnJy
UGkmM3BRT3A4azhxIXtoUGMKejUpbDttTHtTaiM/JmZ9Q2JfRVJ9dzEkdlZxTFp0b0Mxb35VU2p8
QDVLaTwhU0RGd1lNbDlgak5wUHchVWs3amVOCnphYVR7LSRrZG5XP2l8Zl9DbmtPK1FRezhqNDk8
UzlRIWB+d3w1RVFZO3B0Y2NEJntMckN+bmItKWU2JSMqVmNqIQp6IyNCezwxcHQzVDZtUEhVbmow
fCFaKWFmNVdQRC00Wmdeb35SMTtXMl4pQzRieHk1Kms4NXJKd29Cezh+X3FkQk0Kem1ydCk9eity
d0tRezkxdD0zOVJHb3hZNjNUVWFUR3BhSCRqa1ptTTJwYTZpMWB5WVY7UXFxWHRvUWpve3NJVXMt
CnpYdkFjKHdUZHR2e01sO0x1TVUqMlFiSmZiRihoUTZSOGQ0TT9fZWxvWSg5UFVyNGBtb3JMeSZw
cCVTQTAjdDY1Swp6M0JYN1Z3ayFqdzZecGY4ITUpbnMqMHR6aG53flZiLTQqRF8qN3hYc3k1NnJk
T1k2PjRnO3Fgamt3Tz9YdzZtYFkKelkmSWcwaT0jNWRoR31mVl5iVFk9bSY2cjFNNn5IVXpucH1I
PVAtRUlLMlp4c0Z+VExhI1ZVNUJzJDJvKnFCSFN8CnpMTEJzX2loWDtoVCZuKSVeST00KGtlbitt
OHxBNlhhYTBlejg0dlZDXmwpJk9PbitxZGZLVjxEb2xgV2o3Pzs5Qwp6P1RIV2pLe3JBcnVOVTkk
TTdYTU1zTzkzdnNTS3RGeXMhWFlHQj9CdEc1RDFNIXg0Vi1pa1BzbW5hPjtidm9wXloKendWV1Ey
UXxlUmkzRiM+d1Byfjw9MVcqayFPX3B+dDxoS1B+Xm9PT1lyXng3Q0opS3VzOG82aHxHeksyOXVw
O3I8CnpUalMlfDRjbW89NU49aE9ueWEwNGJlWVRQeH04dlBAO35tMjUmNzVAZF94JmNgeHV1d2cr
WitrczFhc3NseUArVwp6eEYwfGBaJSslKipeODskOHx2OGBAZnB8fHk+JFNIZ0E+SGMhTzY8O05k
PzVvJE1jendnTks9ZWxhR1U9YTdUO3AKenpZSHZgNGI2O1F7JT9iWSM/OFB0MUVUK3xASyZZYWAl
ZWBIRmZldG5HTipGVmdIam49SjZJVk9UPmZCdFdBT2ZtCnpgQS1SbFAyYkVPVnJYUlptZTJuNUE7
OXo3bjshcWFeYWo9eileLXFrN2FKcXNCWjcxdV5CWHw9VXgxbUZ5Xik9VAp6b2BEZz4oI1lQXys3
UkcpPFZPc0QhXnIqJWIyMmx1SClTejNHQll1PzJTNlllRGlGeFROMzh5aFdCZWNQfDlANnoKcGhA
QkE+NEVuXnkhJFJmcXpzMyQkWDcqNHByfCQ8bCE4YVF+Tj0jbX48ZzJkbHt7dmdRXn5DQEgKCmRp
ZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9pY29ucy90b3VjaHBvaW50LnBuZyBiL1Rv
b2xzL01pbmlCcm93c2VyL3F0L2ljb25zL3RvdWNocG9pbnQucG5nCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3NjQ5ZWU5OTFhOGM3YzcyNGYxNWFmMjMyZTg1OGRkOTJjMWI2NzIxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gK
bGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDEzMzEKemNtVi0zMTxkLTFQKTxoOzNLfExr
MDAwZTFOSkxUcTAwMWxpMDAxZm8xXkBzNiRsYlhkMDAwMDFiNWNoXzBJdHApCno9PlB4IzI0WUpg
TDsoSyl7e2E3Pnl7RDReMDAwU2FOTGgwTDAxRmNVMDFGY1YwR2daXzAwMDA3YlYqR2AyaXB0Pgp6
M15oQ1VEblNBTzAwZ3MxTF90KG8hX31FeE9qfjZiJE4lU1RQZFdYVG1YPC1HNEolO19HaVZzSE1U
T35MNjY0TUEKeiFqSHJ5Kz5tJm8oSG9aRmwkcWNwI3RUUT4tRUtAVWFxKHUwaU9Db1lRbit3e1Ep
aDQqViN7fDIjVEg3eGQlbkI/CnppRns8ZEojOFdUVSFMPXY9bHNybHtfcDMqQVBhU1NybWI7YVk2
NVR5enwjUFowPFoleDBUMlBpMDBhUXwwODljSAp6RF5RY1dwVDFOUFJRZ1V2JHdRcmstWmxWbDE5
KE5AZCt6fUZ1Qlh9a088c1hKMmZaQnRKXjxpQVpuT3hYeDJNX3QKeldsbilWQURLTkxOZWV2eWp3
MyglT1VJSlZQdEhgXyR7UDY2cCFjZUAoVyhjYi1reFVuaGwrcWIpMnBXMi1xN358CnpUNXohSFoq
KUhPIzthQTxefVRNQXkpSTc3aHBvNTBwQEJueTElUV4zeHdWMWU+NSFFZ189bDxCTyN0O2NKa3tV
dgp6dUhLe3F7JGd+ZFBtdHZYckVkfT84RzxOKjdiUz9JbG5yITR3YGFRVnVeenRsRiEwYChLa3tg
WlN0Vko8cWV2UncKel4oMUIhSld8czNab3g3VkR6cSR8Q0p5Qlc0T0ErVTVwfWdxX3hePXZPME1r
IVVKTko4dTF6ZFgwbnBNV2RsWDR3CnpFRCp5I2Y9bUB9Q1AyTWk1MHt6Q2dnTWJ4UShTZS1aZGxs
NmlKX1UqRT9RVmdsSlZQZTNfdHAjKVVXXiRtVmtrIQp6NyQqRllPemZmXm5oQUk5XjY8bHpjc3RH
MHZNbDRMcjZfKTBPRFo8IWdHZF5sI2RUYHZ4JUZoYkh4I2VoMGBDN2kKekxfSWJCNXNjJXtOSUw2
Yno/VHM1JVd7bDV7QDB+Z2B4Zng7T1ZQSno5dHVRTHhFRDwzWjB2ZHZObj5fQk1ITT80Cnoqa0J8
ODVLOGk4RyolY31pUlhPNDliYnQ7bD1rbGpETTJjbVRUMypNJCkoODBSSU04cXUkLTIxNGpkTU1n
KHpKcwp6JiNhfStrZCp7fmt8dm47KkQyOSNtQGZCOW9JZ2d3MzkqVk0qZE5heXVyRGM0I2Y5UjBF
czJSekRVfkk3SWQ4eSUKejFTJWlMYyVoVUNmQHF8ZkM8d3pLcE9XU01mcTc5ajU8RSNfNyFYI2Fp
dEhDaDJtP1VNRkFHSVhmdHJhQjlaVVEpCnozNXp0VXl1b1QhR1N3PGgkRXk2S2tXKXw1QnJWciNA
JkBlRygmYUFGdlF4eVNYWWJQbHlBMWdRYntoKyo7X1EwJQp6S0I9fUZLQk18Tm9kKUZ2eCRtUGs0
UkQwQUY8ZlRPTGpiXzAqRE8kTncyQlJvTnA4cEVRI1I5UHJ7MiVNV1dpelAKek1oTzVzWXQhR0xO
bldVQmFuYEVPOFNIWnc0bzNfdVJjd3ZqYUFSdz1jREI7ZUxIbzFhN0E8Tm1ULUxCQmoyaEd3Cno+
OFJ1RE57IWRJP0tvO21IWklWcCl+M2hISGt+NFNOVjFJNlJ0fjMyM303ZnsmcXxCLXkySCMoP0hh
R1VoSjB+ZQp6bEJxWUx0NFJVbCVNcntjPV9WQmklYj4xVTUxWU9xbFckRENkJE9kO1JqNkE0MFFM
WHhKbnR9SF52dGhPWn1TVHwKekhDa01TMiohOSFOMFY0ZzJuZ15abjlaJWUkVmV6dzZGNHt4b0Yp
IyVseiFkekglcDhjfEFYQ2dNKlFtRGR8eDElCnpla1U3JE59RFMkbiVANjc4OHp4fUtXY1BjKm1u
eFFKblMxdWleQC1iYXY9aFlVVEpuV1FrfHs2ZEJXYUdmYm0xKgp6OWRBOHVZbyQ2ezFBdUN+QV4z
Vz0/SG1GNjQqfENTd014c214LXdIeChXPnQ5dTx2U0dsbj4tVVRnQD1OLUF6WjgKejljYl85aTAx
PipiWTRwYTdMTSlnYytyYEMkemFEZy1OOCQ4UEt6PnhMR1A4TzkyYUdGPmU4VU1PP25jX1VWQilA
CnA4aT1NZERsQSZHP0E/d1JvUWV5Snt7ckFmI2d6aGNYcy1ZTzAwMm92UERITGtWMW5iP1dVPkdO
CgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvaWNvbnMvdXAucG5nIGIvVG9vbHMv
TWluaUJyb3dzZXIvcXQvaWNvbnMvdXAucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiMDVmODAyNWQwMTU3YTVlN2IyNzkyYjA1OGNkYjQ1NTNiMWQ2YmZmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhj
bVY/ZDAwMDAxCgpsaXRlcmFsIDY2Mgp6Y21WO0gwJWBxO1ApPGg7M0t8TGswMDBlMU5KTFRxMDAw
c0kwMDBzUTFeQHM2Uj9kIUIwMDAwMWI1Y2hfMEl0cCkKej0+UHgjMjRZSmBMOyhLKXt7YTc+eXtE
NF4wMDBTYU5MaDBMMDFGY1UwMUZjVjBHZ1pfMDAwMDdiVipHYDJpWFNACnowNT1xbzBUX1YqMDBJ
X0NMX3QoSSVlfEQoWVpFfmYkM0pnb0hgJG0zQH1vXm13VGQxRDUlcHhYMjE4WFdkaHA7TQp6cGh3
JF8pUlclNER8cWtDS2Z3UCQ1RU1LfVFOKXY9MnI1LWNIRURpcWxiWT04ZGd5SyYobCtZRjJhZyQ7
bmF9JmEKem5mQ18lcWdrUGtIMnNKNVFZQH0tWWc7WkVGWCNYKGZjYU0/NlJFVmxjPTc3TiZoPVo5
eX5EQCFRPWtJR3sjS0RfCnpFZD9pRy04bmJBfDdMa00/ZC1gX2J2bn5LO0k9dXMqNXJlNF8mJSZg
OCVTI0BXT0J+S3NZLUVmYGEpOXNkS3UlcAp6V2ImeCY3P1c8MzZZVTE/ZThWQHUtd2prdXJ0R18/
JTd3WWc8c0BRUEByO1g3MGFgO1k1ODFxd255VmJDdWthcVcKelYxdUImc2tEOHNlNy1iNEooSldy
ekpsa3FQfnV9TCg0cHRAa1E8a1lXfVFSekFBQUQ3MCVqMCY8QDhLITtwOXsmCno4JXMyUjRvZHRA
S209UU4hOGZRPk83P1pUPFFwfkswSlQ5LT1nVVgkKlVNKyNjeShENyZ6d3lGSiopXktVQEteQAp6
IXM3a0Z5anxpfHFzQWxQSFBCWkJwd0dZcTtGXyUrbDE+SSZ6elc/Q2Z0Ryo+TzwqMikwO35pNlY4
c1QyMlhzWmkKemteb0J1czR5al5LdGc1VlVLZHljYGFtI1RgYXg3NUkqY0FjbG1leH1SKVA+akt+
M34oSk5BJGVBaWhDLTVDSGBVCno4Kj9xZXRfP1lDZXlpMn5gUW13ZCV5bDtvaXdjMVB7WFE1JkVs
TyFDXzt6IUU4XkgwZnVrO1MtRjlEQiVjNjFkbwp3O19IWTNhbGpyezREYGErK0VnVll4P2VgRDJT
WCNqMHNYcTlHUz1hdU5kTiE8MDcqcW9NNk48JGc4Ym5oTWdSWisKCmRpZmYgLS1naXQgYS9Ub29s
cy9NaW5pQnJvd3Nlci9xdC9qcy9NdWx0aVNlbGVjdC5qcyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0
L2pzL011bHRpU2VsZWN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTg3ZjVk
Y2NmMTJhMmVlZGFhYjhjMGJkYzc0NzAxZmQ1NDQ2MWEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L2pzL011bHRpU2Vs
ZWN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0K
LQotdmFyIHZhbHVlcyA9IFtdCi0KLWZ1bmN0aW9uIHNlbGVjdGVkVmFsdWVzKCkgewotICAgIHJl
dHVybiB2YWx1ZXMKLX0KLQotZnVuY3Rpb24gaXNTZWxlY3RlZCh2YWx1ZSkgewotICAgIHJldHVy
biAodmFsdWVzLmluZGV4T2YodmFsdWUpICE9IC0xKQotfQotCi1mdW5jdGlvbiBhZGRWYWx1ZSh2
YWx1ZSkgewotICAgIGlmICh2YWx1ZXMuaW5kZXhPZih2YWx1ZSkgIT0gLTEpCi0gICAgICAgIHJl
dHVybgotICAgIHZhbHVlcy5wdXNoKHZhbHVlKQotfQotCi1mdW5jdGlvbiByZW1vdmVWYWx1ZSh2
YWx1ZSkgewotICAgIHZhciBpbmRleCA9IHZhbHVlcy5pbmRleE9mKHZhbHVlKQotCi0gICAgaWYg
KGluZGV4ID09IC0xKQotICAgICAgICByZXR1cm4KLSAgICB2YWx1ZXMuc3BsaWNlKGluZGV4LCAx
KQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAgYi9Ub29scy9N
aW5pQnJvd3Nlci9xdC9tYWluLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM4
Y2Q5MmFiNjY4NGRhM2YyMzQ4MTE4NzliMDU3ZjAyZThkZTcxMi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqCi0gKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJCcm93c2VyV2luZG93LmgiCi0KLSNpbmNsdWRlICJN
aW5pQnJvd3NlckFwcGxpY2F0aW9uLmgiCi0jaW5jbHVkZSAiVXJsTG9hZGVyLmgiCi0KLSNpbmNs
dWRlIDxxcW1sLmg+Ci0KLSNpbmNsdWRlIDxRRGlyPgotI2luY2x1ZGUgPFFMYXRpbjFTdHJpbmc+
Ci0jaW5jbHVkZSA8UVJlZ0V4cD4KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQot
ewotICAgIE1pbmlCcm93c2VyQXBwbGljYXRpb24gYXBwKGFyZ2MsIGFyZ3YpOwotCi0gICAgaWYg
KGFwcC5pc1JvYm90aXplZCgpKSB7Ci0gICAgICAgIEJyb3dzZXJXaW5kb3cqIHdpbmRvdyA9IG5l
dyBCcm93c2VyV2luZG93KGFwcC53aW5kb3dPcHRpb25zKCkpOwotICAgICAgICBVcmxMb2FkZXIg
bG9hZGVyKHdpbmRvdywgYXBwLnVybHMoKS5hdCgwKSwgYXBwLnJvYm90VGltZW91dCgpLCBhcHAu
cm9ib3RFeHRyYVRpbWUoKSk7Ci0gICAgICAgIGxvYWRlci5sb2FkTmV4dCgpOwotICAgICAgICB3
aW5kb3ctPnNob3coKTsKLSAgICAgICAgcmV0dXJuIGFwcC5leGVjKCk7Ci0gICAgfQotCi0gICAg
UVN0cmluZ0xpc3QgdXJscyA9IGFwcC51cmxzKCk7Ci0KLSAgICBpZiAodXJscy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgUVN0cmluZyBkZWZhdWx0SW5kZXhGaWxlID0gUVN0cmluZygiJTEvJTIiKS5h
cmcoUURpcjo6aG9tZVBhdGgoKSkuYXJnKFFMYXRpbjFTdHJpbmcoImluZGV4Lmh0bWwiKSk7Ci0g
ICAgICAgIGlmIChRRmlsZShkZWZhdWx0SW5kZXhGaWxlKS5leGlzdHMoKSkKLSAgICAgICAgICAg
IHVybHMuYXBwZW5kKFFTdHJpbmcoImZpbGU6Ly8iKSArIGRlZmF1bHRJbmRleEZpbGUpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB1cmxzLmFwcGVuZCgiaHR0cDovL3d3dy5nb29nbGUuY29t
Iik7Ci0gICAgfQotCi0gICAgQnJvd3NlcldpbmRvdyogd2luZG93ID0gbmV3IEJyb3dzZXJXaW5k
b3coYXBwLndpbmRvd09wdGlvbnMoKSk7Ci0gICAgd2luZG93LT5sb2FkKHVybHMuYXQoMCkpOwot
Ci0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCB1cmxzLnNpemUoKTsgKytpKQotICAgICAgICB3aW5k
b3ctPm5ld1dpbmRvdyh1cmxzLmF0KGkpKTsKLQotICAgIGFwcC5leGVjKCk7Ci0KLSAgICByZXR1
cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9BbGVydERpYWxv
Zy5xbWwgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQWxlcnREaWFsb2cucW1sCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGViMWE1OGIyMDZiOGNiYWI4MmY0ODczOWU5YmNiOTkz
MTg3MmE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rv
b2xzL01pbmlCcm93c2VyL3F0L3FtbC9BbGVydERpYWxvZy5xbWwKKysrIC9kZXYvbnVsbApAQCAt
MSwzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotaW1wb3J0IFF0UXVpY2sgMi4wCi0KLURpYWxvZyB7Ci0gICAgdGl0bGU6ICJKYXZh
U2NyaXB0IEFsZXJ0IgotICAgIG1lc3NhZ2U6IG1vZGVsLm1lc3NhZ2UKLQotICAgIERpYWxvZ0J1
dHRvbiB7Ci0gICAgICAgIHRleHQ6ICJPSyIKLSAgICAgICAgb25DbGlja2VkOiBtb2RlbC5kaXNt
aXNzKCkKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQXV0
aGVudGljYXRpb25EaWFsb2cucW1sIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0F1dGhlbnRp
Y2F0aW9uRGlhbG9nLnFtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ4OGQzZjE1
MGUxZGE5MGRmMDUzOGEzNzdlOGQzOWU1Y2MzY2ZiNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQXV0aGVudGlj
YXRpb25EaWFsb2cucW1sCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLWltcG9ydCBRdFF1aWNr
IDIuMAotCi1EaWFsb2cgewotICAgIGlkOiBkaWFsb2cKLQotICAgIHRpdGxlOiAiQXV0aGVudGlj
YXRpb24gcmVxdWlyZWQuIiAKLSAgICBtZXNzYWdlOiBtb2RlbC5ob3N0bmFtZSArICIgcmVxdWly
ZXMgYXV0aGVudGljYXRpb24uIgotCi0gICAgaGVpZ2h0OiAyNTAKLQotICAgIERpYWxvZ0xpbmVJ
bnB1dCB7Ci0gICAgICAgIGlkOiBpbnB1dAotICAgICAgICB3aWR0aDogZGlhbG9nLndpZHRoIC0g
MzAKLSAgICAgICAgdGV4dDogbW9kZWwucHJlZmlsbGVkVXNlcm5hbWUKLQotICAgICAgICBvbkFj
Y2VwdGVkOiBtb2RlbC5hY2NlcHQoaW5wdXQudGV4dCwgcGFzc3dvcmRJbnB1dC50ZXh0KQotICAg
IH0KLQotICAgIERpYWxvZ0xpbmVJbnB1dCB7Ci0gICAgICAgIGlkOiBwYXNzd29yZElucHV0Ci0g
ICAgICAgIHRleHQ6ICIiIAotICAgICAgICB3aWR0aDogZGlhbG9nLndpZHRoIC0gMzAKLSAgICAg
ICAgZWNob01vZGU6IFRleHRJbnB1dC5QYXNzd29yZEVjaG9PbkVkaXQKLQotICAgICAgICBvbkFj
Y2VwdGVkOiBtb2RlbC5hY2NlcHQoaW5wdXQudGV4dCwgcGFzc3dvcmRJbnB1dC50ZXh0KQotICAg
IH0KLQotICAgIFJvdyB7Ci0gICAgICAgIGlkOiBidXR0b25Sb3cKLSAgICAgICAgc3BhY2luZzog
NQotICAgICAgICBhbmNob3JzLmhvcml6b250YWxDZW50ZXI6IHBhcmVudC5ob3Jpem9udGFsQ2Vu
dGVyCi0KLSAgICAgICAgRGlhbG9nQnV0dG9uIHsKLSAgICAgICAgICAgIHRleHQ6ICJPSyIKLSAg
ICAgICAgICAgIG9uQ2xpY2tlZDogbW9kZWwuYWNjZXB0KGlucHV0LnRleHQsIHBhc3N3b3JkSW5w
dXQudGV4dCkKLSAgICAgICAgfQotCi0gICAgICAgIERpYWxvZ0J1dHRvbiB7Ci0gICAgICAgICAg
ICB0ZXh0OiAiQ2FuY2VsIgotICAgICAgICAgICAgb25DbGlja2VkOiBtb2RlbC5yZWplY3QoKQot
ICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1s
L0Jyb3dzZXJXaW5kb3cucW1sIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5k
b3cucW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGI1YmMwOTI2OGNiYjNjZjM0
OWMwOGEwNmM3YzJhOTVkY2NlYTY1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbAor
KysgL2Rldi9udWxsCkBAIC0xLDU4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJp
Z2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIg
SGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KLSAqCi0gKiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLWltcG9ydCBRdFF1aWNrIDIuMAotaW1wb3J0IFF0V2ViS2l0
IDMuMAotaW1wb3J0IFF0V2ViS2l0LmV4cGVyaW1lbnRhbCAxLjAKLQotUmVjdGFuZ2xlIHsKLSAg
ICBpZDogcm9vdAotICAgIC8vIERvIG5vdCBkZWZpbmUgYW5jaG9ycyBvciBhbiBpbml0aWFsIHNp
emUgaGVyZSEgVGhpcyB3b3VsZCBtZXNzIHVwIHdpdGggUVNHVmlldzo6U2l6ZVJvb3RPYmplY3RU
b1ZpZXcuCi0KLSAgICBwcm9wZXJ0eSBhbGlhcyB3ZWJ2aWV3OiB3ZWJWaWV3Ci0gICAgY29sb3I6
ICIjMzMzIgotCi0gICAgc2lnbmFsIHBhZ2VUaXRsZUNoYW5nZWQoc3RyaW5nIHRpdGxlKQotICAg
IHNpZ25hbCBuZXdXaW5kb3coc3RyaW5nIHVybCkKLQotICAgIGZ1bmN0aW9uIGxvYWQoYWRkcmVz
cykgewotICAgICAgICB3ZWJWaWV3LnVybCA9IGFkZHJlc3MKLSAgICAgICAgd2ViVmlldy5mb3Jj
ZUFjdGl2ZUZvY3VzKCkKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiByZWxvYWQoKSB7Ci0gICAgICAg
IHdlYlZpZXcucmVsb2FkKCkKLSAgICAgICAgd2ViVmlldy5mb3JjZUFjdGl2ZUZvY3VzKCkKLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiBmb2N1c0FkZHJlc3NCYXIoKSB7Ci0gICAgICAgIGFkZHJlc3NM
aW5lLmZvcmNlQWN0aXZlRm9jdXMoKQotICAgICAgICBhZGRyZXNzTGluZS5zZWxlY3RBbGwoKQot
ICAgIH0KLSAgICBmdW5jdGlvbiB0b2dnbGVGaW5kKCkgewotICAgICAgICBmaW5kQmFyLnRvZ2ds
ZSgpCi0gICAgfQotICAgIFJlY3RhbmdsZSB7Ci0gICAgICAgIGlkOiBmaW5kQmFyCi0gICAgICAg
IHo6IHdlYlZpZXcueiArIDEKLSAgICAgICAgeTogbmF2aWdhdGlvbkJhci55Ci0gICAgICAgIGFu
Y2hvcnMgewotICAgICAgICAgICAgbGVmdDogcGFyZW50LmxlZnQKLSAgICAgICAgICAgIHJpZ2h0
OiBwYXJlbnQucmlnaHQKLSAgICAgICAgfQotICAgICAgICBoZWlnaHQ6IG5hdmlnYXRpb25CYXIu
aGVpZ2h0Ci0gICAgICAgIGNvbG9yOiAiI2VmZWZlZiIKLSAgICAgICAgdmlzaWJsZTogeSA+IG5h
dmlnYXRpb25CYXIueQotCi0gICAgICAgIEJlaGF2aW9yIG9uIHkge051bWJlckFuaW1hdGlvbiB7
ZHVyYXRpb246IDI1MH19Ci0KLSAgICAgICAgZnVuY3Rpb24gdG9nZ2xlKCkgewotICAgICAgICAg
ICAgaWYgKHkgPT0gbmF2aWdhdGlvbkJhci55KSB7Ci0gICAgICAgICAgICAgICAgZmluZFRleHRJ
bnB1dC5mb3JjZUFjdGl2ZUZvY3VzKCkKLSAgICAgICAgICAgICAgICB5ICs9IGhlaWdodAotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3ZWJWaWV3LmZvcmNlQWN0aXZlRm9j
dXMoKQotICAgICAgICAgICAgICAgIHkgPSBuYXZpZ2F0aW9uQmFyLnkKLSAgICAgICAgICAgICAg
ICBmaW5kKCIiLDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rp
b24gZmluZChzdHIsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBmaW5kT3B0aW9ucyA9IG9w
dGlvbnMgfCBXZWJWaWV3RXhwZXJpbWVudGFsLkZpbmRIaWdobGlnaHRBbGxPY2N1cnJlbmNlcwot
ICAgICAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViVmlld0V4cGVyaW1lbnRhbC5GaW5kV3JhcHNB
cm91bmREb2N1bWVudAotICAgICAgICAgICAgd2ViVmlldy5leHBlcmltZW50YWwuZmluZFRleHQo
c3RyLCBmaW5kT3B0aW9ucykKLSAgICAgICAgfQotCi0gICAgICAgIENvbm5lY3Rpb25zIHsKLSAg
ICAgICAgICAgIHRhcmdldDogd2ViVmlldy5leHBlcmltZW50YWwKLSAgICAgICAgICAgIG9uVGV4
dEZvdW5kOiB7Ci0gICAgICAgICAgICAgICAgZmFpbGVkT3ZlcmxheS52aXNpYmxlID0gbWF0Y2hD
b3VudCA9PSAwCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgSXRlbSB7Ci0gICAg
ICAgICAgICBhbmNob3JzLmZpbGw6IHBhcmVudAotICAgICAgICAgICAgUmVjdGFuZ2xlIHsKLSAg
ICAgICAgICAgICAgICBpZDogaW5wdXRBcmVhCi0gICAgICAgICAgICAgICAgaGVpZ2h0OiAyNgot
ICAgICAgICAgICAgICAgIGFuY2hvcnMgewotICAgICAgICAgICAgICAgICAgICBsZWZ0OiBwYXJl
bnQubGVmdAotICAgICAgICAgICAgICAgICAgICByaWdodDogcHJldkJ1dHRvbi5sZWZ0Ci0gICAg
ICAgICAgICAgICAgICAgIG1hcmdpbnM6IDYKLSAgICAgICAgICAgICAgICAgICAgdmVydGljYWxD
ZW50ZXI6IHBhcmVudC52ZXJ0aWNhbENlbnRlcgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBjb2xvcjogIndoaXRlIgotICAgICAgICAgICAgICAgIGJvcmRlci53aWR0aDogMQot
ICAgICAgICAgICAgICAgIGJvcmRlci5jb2xvcjogIiNiZmJmYmYiCi0gICAgICAgICAgICAgICAg
cmFkaXVzOiAzCi0gICAgICAgICAgICAgICAgUmVjdGFuZ2xlIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWQ6IGZhaWxlZE92ZXJsYXkKLSAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5maWxsOiBw
YXJlbnQKLSAgICAgICAgICAgICAgICAgICAgY29sb3I6ICJyZWQiCi0gICAgICAgICAgICAgICAg
ICAgIG9wYWNpdHk6IDAuNQotICAgICAgICAgICAgICAgICAgICByYWRpdXM6IDYKLSAgICAgICAg
ICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgVGV4dElucHV0IHsKLSAgICAgICAgICAgICAgICAgICAgaWQ6IGZpbmRUZXh0SW5wdXQK
LSAgICAgICAgICAgICAgICAgICAgY2xpcDogdHJ1ZQotICAgICAgICAgICAgICAgICAgICBzZWxl
Y3RCeU1vdXNlOiB0cnVlCi0gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6
IFRleHRJbnB1dC5BbGlnbkxlZnQKLSAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5maWxsOiBw
YXJlbnQKLSAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5tYXJnaW5zOiAzCi0gICAgICAgICAg
ICAgICAgICAgIGZvbnQgewotICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRTaXplOiAxMQot
ICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5OiAiU2FucyIKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiIgotICAgICAgICAgICAgICAgICAgICBy
ZWFkT25seTogIWZpbmRCYXIudmlzaWJsZQotICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBk
b0ZpbmQoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbmRCYXIudmlzaWJsZSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kVGV4dElucHV0LnRleHQg
PT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWRPdmVybGF5LnZpc2li
bGUgPSBmYWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgZmluZEJhci5maW5kKGZpbmRUZXh0SW5wdXQudGV4dCkKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBvblRleHRDaGFuZ2VkOiB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkb0ZpbmQoKQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIEtleXMub25SZXR1cm5QcmVzc2VkOnsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRv
RmluZCgpCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBSZWN0YW5nbGUgewotICAgICAgICAgICAgICAgIGlkOiBwcmV2
QnV0dG9uCi0gICAgICAgICAgICAgICAgaGVpZ2h0OiBpbnB1dEFyZWEuaGVpZ2h0Ci0gICAgICAg
ICAgICAgICAgd2lkdGg6IGhlaWdodAotICAgICAgICAgICAgICAgIGFuY2hvcnMucmlnaHQ6IG5l
eHRCdXR0b24ubGVmdAotICAgICAgICAgICAgICAgIGFuY2hvcnMudmVydGljYWxDZW50ZXI6IHBh
cmVudC52ZXJ0aWNhbENlbnRlcgotICAgICAgICAgICAgICAgIGNvbG9yOiAiI2VmZWZlZiIKLSAg
ICAgICAgICAgICAgICByYWRpdXM6IDYKLQotICAgICAgICAgICAgICAgIEltYWdlIHsKLSAgICAg
ICAgICAgICAgICAgICAgYW5jaG9ycy5jZW50ZXJJbjogcGFyZW50Ci0gICAgICAgICAgICAgICAg
ICAgIHNvdXJjZTogIi4uL2ljb25zL3ByZXZpb3VzLnBuZyIKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBSZWN0YW5nbGUgewotICAgICAgICAgICAgICAgICAgICBhbmNob3Jz
LmZpbGw6IHBhcmVudAotICAgICAgICAgICAgICAgICAgICBjb2xvcjogcGFyZW50LmNvbG9yCi0g
ICAgICAgICAgICAgICAgICAgIHJhZGl1czogcGFyZW50LnJhZGl1cwotICAgICAgICAgICAgICAg
ICAgICBvcGFjaXR5OiAwLjgKLSAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogIXBhcmVudC5l
bmFibGVkCi0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgTW91c2VBcmVhIHsK
LSAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5maWxsOiBwYXJlbnQKLSAgICAgICAgICAgICAg
ICAgICAgb25QcmVzc2VkOiB7IGlmIChwYXJlbnQuZW5hYmxlZCkgcGFyZW50LmNvbG9yID0gIiNj
ZmNmY2YiIH0KLSAgICAgICAgICAgICAgICAgICAgb25SZWxlYXNlZDogeyBwYXJlbnQuY29sb3Ig
PSAiI2VmZWZlZiIgfQotICAgICAgICAgICAgICAgICAgICBvbkNsaWNrZWQ6IHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZpbmRCYXIuZmluZChmaW5kVGV4dElucHV0LnRleHQsIFdlYlZpZXdF
eHBlcmltZW50YWwuRmluZEJhY2t3YXJkKQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVjdGFuZ2xlIHsKLSAgICAg
ICAgICAgICAgICBpZDogbmV4dEJ1dHRvbgotICAgICAgICAgICAgICAgIGhlaWdodDogaW5wdXRB
cmVhLmhlaWdodAotICAgICAgICAgICAgICAgIHdpZHRoOiBoZWlnaHQKLSAgICAgICAgICAgICAg
ICBhbmNob3JzLnJpZ2h0OiBwYXJlbnQucmlnaHQKLSAgICAgICAgICAgICAgICBhbmNob3JzLnZl
cnRpY2FsQ2VudGVyOiBwYXJlbnQudmVydGljYWxDZW50ZXIKLSAgICAgICAgICAgICAgICBjb2xv
cjogIiNlZmVmZWYiCi0gICAgICAgICAgICAgICAgcmFkaXVzOiA2Ci0KLSAgICAgICAgICAgICAg
ICBJbWFnZSB7Ci0gICAgICAgICAgICAgICAgICAgIGFuY2hvcnMuY2VudGVySW46IHBhcmVudAot
ICAgICAgICAgICAgICAgICAgICBzb3VyY2U6ICIuLi9pY29ucy9uZXh0LnBuZyIKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBSZWN0YW5nbGUgewotICAgICAgICAgICAgICAg
ICAgICBhbmNob3JzLmZpbGw6IHBhcmVudAotICAgICAgICAgICAgICAgICAgICBjb2xvcjogcGFy
ZW50LmNvbG9yCi0gICAgICAgICAgICAgICAgICAgIHJhZGl1czogcGFyZW50LnJhZGl1cwotICAg
ICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjgKLSAgICAgICAgICAgICAgICAgICAgdmlzaWJs
ZTogIXBhcmVudC5lbmFibGVkCi0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
TW91c2VBcmVhIHsKLSAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5maWxsOiBwYXJlbnQKLSAg
ICAgICAgICAgICAgICAgICAgb25QcmVzc2VkOiB7IGlmIChwYXJlbnQuZW5hYmxlZCkgcGFyZW50
LmNvbG9yID0gIiNjZmNmY2YiIH0KLSAgICAgICAgICAgICAgICAgICAgb25SZWxlYXNlZDogeyBw
YXJlbnQuY29sb3IgPSAiI2VmZWZlZiIgfQotICAgICAgICAgICAgICAgICAgICBvbkNsaWNrZWQ6
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRCYXIuZmluZChmaW5kVGV4dElucHV0LnRl
eHQsIDApCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgUmVjdGFuZ2xlIHsKLSAgICAgICAgaWQ6IG5h
dmlnYXRpb25CYXIKLSAgICAgICAgY29sb3I6ICIjZWZlZmVmIgotICAgICAgICBoZWlnaHQ6IDM4
Ci0gICAgICAgIHo6IHdlYlZpZXcueiArIDEKLSAgICAgICAgYW5jaG9ycyB7Ci0gICAgICAgICAg
ICB0b3A6IHBhcmVudC50b3AKLSAgICAgICAgICAgIGxlZnQ6IHBhcmVudC5sZWZ0Ci0gICAgICAg
ICAgICByaWdodDogcGFyZW50LnJpZ2h0Ci0gICAgICAgIH0KLQotICAgICAgICBSb3cgewotICAg
ICAgICAgICAgaGVpZ2h0OiBwYXJlbnQuaGVpZ2h0IC0gNgotICAgICAgICAgICAgYW5jaG9ycyB7
Ci0gICAgICAgICAgICAgICAgdmVydGljYWxDZW50ZXI6IHBhcmVudC52ZXJ0aWNhbENlbnRlcgot
ICAgICAgICAgICAgICAgIGxlZnQ6IHBhcmVudC5sZWZ0Ci0gICAgICAgICAgICAgICAgbGVmdE1h
cmdpbjogMwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3BhY2luZzogMwotICAgICAgICAg
ICAgaWQ6IGNvbnRyb2xzUm93Ci0gICAgICAgICAgICBSZWN0YW5nbGUgewotICAgICAgICAgICAg
ICAgIGlkOiBiYWNrQnV0dG9uCi0gICAgICAgICAgICAgICAgaGVpZ2h0OiBwYXJlbnQuaGVpZ2h0
Ci0gICAgICAgICAgICAgICAgd2lkdGg6IGhlaWdodAotICAgICAgICAgICAgICAgIGNvbG9yOiAi
I2VmZWZlZiIKLSAgICAgICAgICAgICAgICByYWRpdXM6IDYKLQotICAgICAgICAgICAgICAgIHBy
b3BlcnR5IGFsaWFzIGVuYWJsZWQ6IHdlYlZpZXcuY2FuR29CYWNrCi0KLSAgICAgICAgICAgICAg
ICBJbWFnZSB7Ci0gICAgICAgICAgICAgICAgICAgIGFuY2hvcnMuY2VudGVySW46IHBhcmVudAot
ICAgICAgICAgICAgICAgICAgICBzb3VyY2U6ICIuLi9pY29ucy9wcmV2aW91cy5wbmciCi0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgUmVjdGFuZ2xlIHsKLSAgICAgICAgICAg
ICAgICAgICAgYW5jaG9ycy5maWxsOiBwYXJlbnQKLSAgICAgICAgICAgICAgICAgICAgY29sb3I6
IHBhcmVudC5jb2xvcgotICAgICAgICAgICAgICAgICAgICByYWRpdXM6IHBhcmVudC5yYWRpdXMK
LSAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC44Ci0gICAgICAgICAgICAgICAgICAgIHZp
c2libGU6ICFwYXJlbnQuZW5hYmxlZAotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIE1vdXNlQXJlYSB7Ci0gICAgICAgICAgICAgICAgICAgIGFuY2hvcnMuZmlsbDogcGFyZW50
Ci0gICAgICAgICAgICAgICAgICAgIG9uUHJlc3NlZDogeyBpZiAocGFyZW50LmVuYWJsZWQpIHBh
cmVudC5jb2xvciA9ICIjY2ZjZmNmIiB9Ci0gICAgICAgICAgICAgICAgICAgIG9uUmVsZWFzZWQ6
IHsgcGFyZW50LmNvbG9yID0gIiNlZmVmZWYiIH0KLSAgICAgICAgICAgICAgICAgICAgb25DbGlj
a2VkOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50LmVuYWJsZWQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiTWluaUJyb3dzZXI6IEdvaW5n
IGJhY2t3YXJkIGluIHNlc3Npb24gaGlzdG9yeS4iKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdlYlZpZXcuZ29CYWNrKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJWaWV3
LmZvcmNlQWN0aXZlRm9jdXMoKQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgUmVjdGFuZ2xlIHsKLSAgICAgICAgICAgICAgICBpZDogZm9yd2FyZEJ1dHRvbgotICAgICAg
ICAgICAgICAgIGhlaWdodDogcGFyZW50LmhlaWdodAotICAgICAgICAgICAgICAgIHdpZHRoOiBo
ZWlnaHQKLSAgICAgICAgICAgICAgICBjb2xvcjogIiNlZmVmZWYiCi0gICAgICAgICAgICAgICAg
cmFkaXVzOiA2Ci0KLSAgICAgICAgICAgICAgICBwcm9wZXJ0eSBhbGlhcyBlbmFibGVkOiB3ZWJW
aWV3LmNhbkdvRm9yd2FyZAotCi0gICAgICAgICAgICAgICAgSW1hZ2UgewotICAgICAgICAgICAg
ICAgICAgICBhbmNob3JzLmNlbnRlckluOiBwYXJlbnQKLSAgICAgICAgICAgICAgICAgICAgc291
cmNlOiAiLi4vaWNvbnMvbmV4dC5wbmciCi0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgUmVjdGFuZ2xlIHsKLSAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5maWxsOiBwYXJl
bnQKLSAgICAgICAgICAgICAgICAgICAgY29sb3I6IHBhcmVudC5jb2xvcgotICAgICAgICAgICAg
ICAgICAgICByYWRpdXM6IHBhcmVudC5yYWRpdXMKLSAgICAgICAgICAgICAgICAgICAgb3BhY2l0
eTogMC44Ci0gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICFwYXJlbnQuZW5hYmxlZAotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIE1vdXNlQXJlYSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGFuY2hvcnMuZmlsbDogcGFyZW50Ci0gICAgICAgICAgICAgICAgICAgIG9uUHJl
c3NlZDogeyBpZiAocGFyZW50LmVuYWJsZWQpIHBhcmVudC5jb2xvciA9ICIjY2ZjZmNmIiB9Ci0g
ICAgICAgICAgICAgICAgICAgIG9uUmVsZWFzZWQ6IHsgcGFyZW50LmNvbG9yID0gIiNlZmVmZWYi
IH0KLSAgICAgICAgICAgICAgICAgICAgb25DbGlja2VkOiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocGFyZW50LmVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zb2xlLmxvZygiTWluaUJyb3dzZXI6IEdvaW5nIGZvcndhcmQgaW4gc2Vzc2lvbiBoaXN0b3J5
LiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViVmlldy5nb0ZvcndhcmQoKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdlYlZpZXcuZm9yY2VBY3RpdmVGb2N1cygpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWN0YW5nbGUgewotICAgICAgICAg
ICAgICAgIGlkOiByZWxvYWRCdXR0b24KLSAgICAgICAgICAgICAgICBoZWlnaHQ6IHBhcmVudC5o
ZWlnaHQKLSAgICAgICAgICAgICAgICB3aWR0aDogaGVpZ2h0Ci0gICAgICAgICAgICAgICAgY29s
b3I6ICIjZWZlZmVmIgotICAgICAgICAgICAgICAgIHJhZGl1czogNgotCi0gICAgICAgICAgICAg
ICAgSW1hZ2UgewotICAgICAgICAgICAgICAgICAgICBhbmNob3JzLmNlbnRlckluOiBwYXJlbnQK
LSAgICAgICAgICAgICAgICAgICAgc291cmNlOiB3ZWJWaWV3LmxvYWRpbmcgPyAiLi4vaWNvbnMv
c3RvcC5wbmciIDogIi4uL2ljb25zL3JlZnJlc2gucG5nIgotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIE1vdXNlQXJlYSB7Ci0gICAgICAgICAgICAgICAgICAgIGFuY2hvcnMu
ZmlsbDogcGFyZW50Ci0gICAgICAgICAgICAgICAgICAgIG9uUHJlc3NlZDogeyBwYXJlbnQuY29s
b3IgPSAiI2NmY2ZjZiIgfQotICAgICAgICAgICAgICAgICAgICBvblJlbGVhc2VkOiB7IHBhcmVu
dC5jb2xvciA9ICIjZWZlZmVmIiB9Ci0gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tlZDogewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdlYlZpZXcubG9hZGluZykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdlYlZpZXcuc3RvcCgpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbG9hZCgpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJlY3RhbmdsZSB7Ci0gICAgICAgICAg
ICAgICAgaWQ6IHZpZXdwb3J0SW5mb0J1dHRvbgotICAgICAgICAgICAgICAgIGhlaWdodDogcGFy
ZW50LmhlaWdodAotICAgICAgICAgICAgICAgIHdpZHRoOiBoZWlnaHQKLSAgICAgICAgICAgICAg
ICBjb2xvcjogeyB2aWV3cG9ydEluZm9JdGVtLnZpc2libGUgPyAiI2NmY2ZjZiIgOiAiI2VmZWZl
ZiIgfQotICAgICAgICAgICAgICAgIHJhZGl1czogNgotCi0gICAgICAgICAgICAgICAgSW1hZ2Ug
ewotICAgICAgICAgICAgICAgICAgICBhbmNob3JzLmNlbnRlckluOiBwYXJlbnQKLSAgICAgICAg
ICAgICAgICAgICAgc291cmNlOiAiLi4vaWNvbnMvaW5mby5wbmciCi0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgTW91c2VBcmVhIHsKLSAgICAgICAgICAgICAgICAgICAgYW5j
aG9ycy5maWxsOiBwYXJlbnQKLSAgICAgICAgICAgICAgICAgICAgb25DbGlja2VkOiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0SW5mb0l0ZW0udmlzaWJsZSA9ICF2aWV3cG9ydElu
Zm9JdGVtLnZpc2libGUKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUmVjdGFuZ2xlIHsKLSAgICAgICAgICAgICAg
ICBpZDogcHJlZmVycmVkTWluaW51bUNvbnRlbnRzV2lkdGhCdXR0b24KLSAgICAgICAgICAgICAg
ICBoZWlnaHQ6IHBhcmVudC5oZWlnaHQKLSAgICAgICAgICAgICAgICB3aWR0aDogaGVpZ2h0Ci0g
ICAgICAgICAgICAgICAgY29sb3I6ICIjZWZlZmVmIgotICAgICAgICAgICAgICAgIG9wYWNpdHk6
IHsgd2ViVmlldy5leHBlcmltZW50YWwucHJlZmVycmVkTWluaW11bUNvbnRlbnRzV2lkdGggPT09
IDAgPyAwLjEgOiAwLjYgfQotICAgICAgICAgICAgICAgIHJhZGl1czogNgotCi0gICAgICAgICAg
ICAgICAgSW1hZ2UgewotICAgICAgICAgICAgICAgICAgICBhbmNob3JzLmNlbnRlckluOiBwYXJl
bnQKLSAgICAgICAgICAgICAgICAgICAgc291cmNlOiAiLi4vaWNvbnMvY29udGVudHNfd2lkdGgu
cG5nIgotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIE1vdXNlQXJlYSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGFuY2hvcnMuZmlsbDogcGFyZW50Ci0gICAgICAgICAgICAgICAg
ICAgIG9uQ2xpY2tlZDogewotICAgICAgICAgICAgICAgICAgICAgICAgd2ViVmlldy5leHBlcmlt
ZW50YWwucHJlZmVycmVkTWluaW11bUNvbnRlbnRzV2lkdGggPSB3ZWJWaWV3LmV4cGVyaW1lbnRh
bC5wcmVmZXJyZWRNaW5pbXVtQ29udGVudHNXaWR0aCA9PT0gMCA/IDk4MCA6IDAKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgUmVjdGFuZ2xlIHsKLSAgICAgICAgICAgICAgICBpZDogZmluZEJ1dHRvbgotICAgICAg
ICAgICAgICAgIGhlaWdodDogcGFyZW50LmhlaWdodAotICAgICAgICAgICAgICAgIHdpZHRoOiBo
ZWlnaHQKLSAgICAgICAgICAgICAgICBjb2xvcjogIiNlZmVmZWYiCi0gICAgICAgICAgICAgICAg
cmFkaXVzOiA2Ci0KLSAgICAgICAgICAgICAgICBJbWFnZSB7Ci0gICAgICAgICAgICAgICAgICAg
IGFuY2hvcnMuY2VudGVySW46IHBhcmVudAotICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAw
LjYKLSAgICAgICAgICAgICAgICAgICAgc291cmNlOiAiLi4vaWNvbnMvZmluZC5wbmciCi0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgTW91c2VBcmVhIHsKLSAgICAgICAgICAg
ICAgICAgICAgYW5jaG9ycy5maWxsOiBwYXJlbnQKLSAgICAgICAgICAgICAgICAgICAgb25DbGlj
a2VkOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5kQmFyLnRvZ2dsZSgpCi0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIFJlY3RhbmdsZSB7Ci0gICAgICAgICAgICAgICAgaWQ6IHRvdWNoRXZlbnRzQnV0dG9u
Ci0gICAgICAgICAgICAgICAgaGVpZ2h0OiBwYXJlbnQuaGVpZ2h0Ci0gICAgICAgICAgICAgICAg
d2lkdGg6IGhlaWdodAotICAgICAgICAgICAgICAgIGNvbG9yOiAiI2VmZWZlZiIKLSAgICAgICAg
ICAgICAgICByYWRpdXM6IDYKLQotICAgICAgICAgICAgICAgIEltYWdlIHsKLSAgICAgICAgICAg
ICAgICAgICAgYW5jaG9ycy5jZW50ZXJJbjogcGFyZW50Ci0gICAgICAgICAgICAgICAgICAgIG9w
YWNpdHk6IG9wdGlvbnMudG91Y2hNb2NraW5nRW5hYmxlZCA/IDAuNiA6IDAuMQotICAgICAgICAg
ICAgICAgICAgICBzb3VyY2U6ICIuLi9pY29ucy90b3VjaC5wbmciCi0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgTW91c2VBcmVhIHsKLSAgICAgICAgICAgICAgICAgICAgYW5j
aG9ycy5maWxsOiBwYXJlbnQKLSAgICAgICAgICAgICAgICAgICAgb25DbGlja2VkOiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy50b3VjaE1vY2tpbmdFbmFibGVkKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIlRvdWNoIE1vY2tpbmcgRGlz
YWJsZWQiKQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zb2xlLmxvZygiVG91Y2ggTW9ja2luZyBFbmFibGVkIikKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50
b3VjaE1vY2tpbmdFbmFibGVkID0gIW9wdGlvbnMudG91Y2hNb2NraW5nRW5hYmxlZAotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBSZWN0YW5nbGUgewotICAgICAgICAgICAgICAgIGlkOiBuZXdCcm93c2VyV2luZG93
QnV0dG9uCi0gICAgICAgICAgICAgICAgaGVpZ2h0OiBwYXJlbnQuaGVpZ2h0Ci0gICAgICAgICAg
ICAgICAgd2lkdGg6IGhlaWdodAotICAgICAgICAgICAgICAgIGNvbG9yOiAiI2VmZWZlZiIKLSAg
ICAgICAgICAgICAgICByYWRpdXM6IDYKLQotICAgICAgICAgICAgICAgIEltYWdlIHsKLSAgICAg
ICAgICAgICAgICAgICAgYW5jaG9ycy5jZW50ZXJJbjogcGFyZW50Ci0gICAgICAgICAgICAgICAg
ICAgIHNvdXJjZTogIi4uL2ljb25zL3BsdXMucG5nIgotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIE1vdXNlQXJlYSB7Ci0gICAgICAgICAgICAgICAgICAgIGFuY2hvcnMuZmls
bDogcGFyZW50Ci0gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tlZDogewotICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3V2luZG93KCJhYm91dDpibGFuayIpCi0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
UmVjdGFuZ2xlIHsKLSAgICAgICAgICAgIGNvbG9yOiAid2hpdGUiCi0gICAgICAgICAgICBoZWln
aHQ6IDI2Ci0gICAgICAgICAgICBib3JkZXIud2lkdGg6IDEKLSAgICAgICAgICAgIGJvcmRlci5j
b2xvcjogIiNiZmJmYmYiCi0gICAgICAgICAgICByYWRpdXM6IDMKLSAgICAgICAgICAgIGFuY2hv
cnMgewotICAgICAgICAgICAgICAgIGxlZnQ6IGNvbnRyb2xzUm93LnJpZ2h0Ci0gICAgICAgICAg
ICAgICAgcmlnaHQ6IHBhcmVudC5yaWdodAotICAgICAgICAgICAgICAgIG1hcmdpbnM6IDYKLSAg
ICAgICAgICAgICAgICB2ZXJ0aWNhbENlbnRlcjogcGFyZW50LnZlcnRpY2FsQ2VudGVyCi0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBSZWN0YW5nbGUgewotICAgICAgICAgICAgICAgIGFuY2hv
cnMgewotICAgICAgICAgICAgICAgICAgICB0b3A6IHBhcmVudC50b3AKLSAgICAgICAgICAgICAg
ICAgICAgYm90dG9tOiBwYXJlbnQuYm90dG9tCi0gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHBh
cmVudC5sZWZ0Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJhZGl1czogMwot
ICAgICAgICAgICAgICAgIHdpZHRoOiBwYXJlbnQud2lkdGggLyAxMDAgKiBNYXRoLm1heCg1LCB3
ZWJWaWV3LmxvYWRQcm9ncmVzcykKLSAgICAgICAgICAgICAgICBjb2xvcjogImJsdWUiCi0gICAg
ICAgICAgICAgICAgb3BhY2l0eTogMC4zCi0gICAgICAgICAgICAgICAgdmlzaWJsZTogd2ViVmll
dy5sb2FkaW5nCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBJbWFnZSB7Ci0gICAgICAgICAg
ICAgICAgaWQ6IGZhdkljb24KLSAgICAgICAgICAgICAgICBzb3VyY2U6IHdlYlZpZXcuaWNvbiAh
PSAnJyA/IHdlYlZpZXcuaWNvbiA6ICcuLi9pY29ucy9mYXZpY29uLnBuZycKLSAgICAgICAgICAg
ICAgICB3aWR0aDogMTYKLSAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2Ci0gICAgICAgICAgICAg
ICAgYW5jaG9ycyB7Ci0gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHBhcmVudC5sZWZ0Ci0gICAg
ICAgICAgICAgICAgICAgIGxlZnRNYXJnaW46IDYKLSAgICAgICAgICAgICAgICAgICAgdmVydGlj
YWxDZW50ZXI6IHBhcmVudC52ZXJ0aWNhbENlbnRlcgotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIFRleHRJbnB1dCB7Ci0gICAgICAgICAgICAgICAgaWQ6IGFk
ZHJlc3NMaW5lCi0gICAgICAgICAgICAgICAgY2xpcDogdHJ1ZQotICAgICAgICAgICAgICAgIHNl
bGVjdEJ5TW91c2U6IHRydWUKLSAgICAgICAgICAgICAgICBob3Jpem9udGFsQWxpZ25tZW50OiBU
ZXh0SW5wdXQuQWxpZ25MZWZ0Ci0gICAgICAgICAgICAgICAgZm9udCB7Ci0gICAgICAgICAgICAg
ICAgICAgIHBvaW50U2l6ZTogMTEKLSAgICAgICAgICAgICAgICAgICAgZmFtaWx5OiAiU2FucyIK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYW5jaG9ycyB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZlcnRpY2FsQ2VudGVyOiBwYXJlbnQudmVydGljYWxDZW50ZXIKLSAgICAgICAg
ICAgICAgICAgICAgbGVmdDogZmF2SWNvbi5yaWdodAotICAgICAgICAgICAgICAgICAgICByaWdo
dDogcGFyZW50LnJpZ2h0Ci0gICAgICAgICAgICAgICAgICAgIG1hcmdpbnM6IDYKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBLZXlzLm9uUmV0dXJuUHJlc3NlZDp7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJOYXZpZ2F0aW5nIHRvOiAiLCBhZGRyZXNzTGlu
ZS50ZXh0KQotICAgICAgICAgICAgICAgICAgICBsb2FkKHV0aWxzLnVybEZyb21Vc2VySW5wdXQo
YWRkcmVzc0xpbmUudGV4dCkpCi0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
cHJvcGVydHkgdXJsIHVybAotCi0gICAgICAgICAgICAgICAgb25VcmxDaGFuZ2VkOiB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChhY3RpdmVGb2N1cykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdXJsCi0gICAgICAgICAgICAg
ICAgICAgIGN1cnNvclBvc2l0aW9uID0gMAotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIG9uQWN0aXZlRm9jdXNDaGFuZ2VkOiB1cmwgPSB3ZWJWaWV3LnVybAotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgV2ViVmlldyB7Ci0gICAgICAgIGlkOiB3ZWJW
aWV3Ci0gICAgICAgIGNsaXA6IGZhbHNlCi0KLSAgICAgICAgYW5jaG9ycyB7Ci0gICAgICAgICAg
ICB0b3A6IGZpbmRCYXIuYm90dG9tCi0gICAgICAgICAgICBsZWZ0OiBwYXJlbnQubGVmdAotICAg
ICAgICAgICAgcmlnaHQ6IHBhcmVudC5yaWdodAotICAgICAgICAgICAgYm90dG9tOiBwYXJlbnQu
Ym90dG9tCi0gICAgICAgIH0KLQotICAgICAgICBvblRpdGxlQ2hhbmdlZDogcGFnZVRpdGxlQ2hh
bmdlZCh0aXRsZSkKLSAgICAgICAgb25VcmxDaGFuZ2VkOiB7Ci0gICAgICAgICAgICBhZGRyZXNz
TGluZS51cmwgPSB3ZWJWaWV3LnVybAotCi0gICAgICAgICAgICBpZiAob3B0aW9ucy5wcmludExv
YWRlZFVybHMpCi0gICAgICAgICAgICAgICAgY29uc29sZS5sb2coIldlYlZpZXcgdXJsIGNoYW5n
ZWQ6Iiwgd2ViVmlldy51cmwudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBvbkxv
YWRpbmdDaGFuZ2VkOiB7Ci0gICAgICAgICAgICBpZiAoIWxvYWRpbmcgJiYgbG9hZFJlcXVlc3Qu
c3RhdHVzID09IFdlYlZpZXcuTG9hZEZhaWxlZFN0YXR1cykKLSAgICAgICAgICAgICAgICB3ZWJW
aWV3LmxvYWRIdG1sKCJGYWlsZWQgdG8gbG9hZCAiICsgbG9hZFJlcXVlc3QudXJsLCAiIiwgbG9h
ZFJlcXVlc3QudXJsKQotICAgICAgICB9Ci0KLSAgICAgICAgZXhwZXJpbWVudGFsLnByZWZlcmVu
Y2VzLmZ1bGxTY3JlZW5FbmFibGVkOiB0cnVlCi0gICAgICAgIGV4cGVyaW1lbnRhbC5wcmVmZXJl
bmNlcy53ZWJHTEVuYWJsZWQ6IHRydWUKLSAgICAgICAgZXhwZXJpbWVudGFsLnByZWZlcmVuY2Vz
LndlYkF1ZGlvRW5hYmxlZDogdHJ1ZQotICAgICAgICBleHBlcmltZW50YWwucHJlZmVycmVkTWlu
aW11bUNvbnRlbnRzV2lkdGg6IDk4MAotICAgICAgICBleHBlcmltZW50YWwuaXRlbVNlbGVjdG9y
OiBJdGVtU2VsZWN0b3IgeyB9Ci0gICAgICAgIGV4cGVyaW1lbnRhbC5hbGVydERpYWxvZzogQWxl
cnREaWFsb2cgeyB9Ci0gICAgICAgIGV4cGVyaW1lbnRhbC5jb25maXJtRGlhbG9nOiBDb25maXJt
RGlhbG9nIHsgfQotICAgICAgICBleHBlcmltZW50YWwucHJvbXB0RGlhbG9nOiBQcm9tcHREaWFs
b2cgeyB9Ci0gICAgICAgIGV4cGVyaW1lbnRhbC5hdXRoZW50aWNhdGlvbkRpYWxvZzogQXV0aGVu
dGljYXRpb25EaWFsb2cgeyB9Ci0gICAgICAgIGV4cGVyaW1lbnRhbC5wcm94eUF1dGhlbnRpY2F0
aW9uRGlhbG9nOiBQcm94eUF1dGhlbnRpY2F0aW9uRGlhbG9nIHsgfQotICAgICAgICBleHBlcmlt
ZW50YWwuZmlsZVBpY2tlcjogRmlsZVBpY2tlciB7IH0KLSAgICAgICAgZXhwZXJpbWVudGFsLnBy
ZWZlcmVuY2VzLmRldmVsb3BlckV4dHJhc0VuYWJsZWQ6IHRydWUKLSAgICAgICAgZXhwZXJpbWVu
dGFsLmRhdGFiYXNlUXVvdGFEaWFsb2c6IEl0ZW0gewotICAgICAgICAgICAgVGltZXIgewotICAg
ICAgICAgICAgICAgIGludGVydmFsOiAxCi0gICAgICAgICAgICAgICAgcnVubmluZzogdHJ1ZQot
ICAgICAgICAgICAgICAgIG9uVHJpZ2dlcmVkOiB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBz
aXplID0gbW9kZWwuZXhwZWN0ZWRVc2FnZSAvIDEwMjQgLyAxMDI0Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnNvbGUubG9nKCJDcmVhdGluZyBkYXRhYmFzZSAnIiArIG1vZGVsLmRpc3BsYXlOYW1l
ICsgIicgb2Ygc2l6ZSAiICsgc2l6ZS50b0ZpeGVkKDIpICsgIiBNQiBmb3IgIiArIG1vZGVsLm9y
aWdpbi5zY2hlbWUgKyAiOi8vIiArIG1vZGVsLm9yaWdpbi5ob3N0ICsgIjoiICsgbW9kZWwub3Jp
Z2luLnBvcnQpCi0gICAgICAgICAgICAgICAgICAgIG1vZGVsLmFjY2VwdChtb2RlbC5leHBlY3Rl
ZFVzYWdlKQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBleHBlcmltZW50YWwuY29sb3JDaG9vc2VyOiBDb2xvckNob29zZXIgeyB9Ci0gICAgICAg
IGV4cGVyaW1lbnRhbC5vbkVudGVyRnVsbFNjcmVlblJlcXVlc3RlZCA6IHsKLSAgICAgICAgICAg
IG5hdmlnYXRpb25CYXIudmlzaWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgV2luZG93LnNob3dG
dWxsU2NyZWVuKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZXhwZXJpbWVudGFsLm9uRXhpdEZ1bGxT
Y3JlZW5SZXF1ZXN0ZWQgOiB7Ci0gICAgICAgICAgICBXaW5kb3cuc2hvd05vcm1hbCgpOwotICAg
ICAgICAgICAgbmF2aWdhdGlvbkJhci52aXNpYmxlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIFNjcm9sbEluZGljYXRvciB7Ci0gICAgICAgIGZsaWNrYWJsZUl0ZW06IHdlYlZpZXcK
LSAgICB9Ci0KLSAgICBWaWV3cG9ydEluZm9JdGVtIHsKLSAgICAgICAgaWQ6IHZpZXdwb3J0SW5m
b0l0ZW0KLSAgICAgICAgYW5jaG9ycyB7Ci0gICAgICAgICAgICB0b3A6IG5hdmlnYXRpb25CYXIu
Ym90dG9tCi0gICAgICAgICAgICBsZWZ0OiBwYXJlbnQubGVmdAotICAgICAgICAgICAgcmlnaHQ6
IHBhcmVudC5yaWdodAotICAgICAgICAgICAgYm90dG9tOiBwYXJlbnQuYm90dG9tCi0gICAgICAg
IH0KLSAgICAgICAgdmlzaWJsZTogZmFsc2UKLSAgICAgICAgdGVzdCA6IHdlYlZpZXcuZXhwZXJp
bWVudGFsLnRlc3QKLSAgICAgICAgcHJlZmVycmVkTWluaW11bUNvbnRlbnRzV2lkdGg6IHdlYlZp
ZXcuZXhwZXJpbWVudGFsLnByZWZlcnJlZE1pbmltdW1Db250ZW50c1dpZHRoCi0gICAgfQotfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0NoZWNrQm94LnFtbCBiL1Rvb2xz
L01pbmlCcm93c2VyL3F0L3FtbC9DaGVja0JveC5xbWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDA4NWI4MTExM2I5OWMyMWM0Mjc3MDU2MWRiNTJhZTRiMmE2NzU1ZTguLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIv
cXQvcW1sL0NoZWNrQm94LnFtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICoKLSAqLwotCi1pbXBvcnQgUXRRdWljayAyLjAKLQotSXRlbSB7Ci0gICAgaWQ6IGNoZWNr
Ym94Ci0gICAgd2lkdGg6IDUwCi0gICAgaGVpZ2h0OiBwYXJlbnQuaGVpZ2h0Ci0gICAgcHJvcGVy
dHkgYm9vbCBjaGVja2VkCi0KLSAgICBJbWFnZSB7Ci0gICAgICAgIHdpZHRoOiAyNAotICAgICAg
ICBoZWlnaHQ6IDI0Ci0gICAgICAgIHNvdXJjZTogcGFyZW50LmNoZWNrZWQgPyAnLi4vaWNvbnMv
Y2hlY2tib3hfY2hlY2tlZC5wbmcnIDogJy4uL2ljb25zL2NoZWNrYm94X3VuY2hlY2tlZC5wbmcn
Ci0gICAgICAgIGFuY2hvcnMudmVydGljYWxDZW50ZXI6IHBhcmVudC52ZXJ0aWNhbENlbnRlcgot
ICAgIH0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Db2xvckNob29z
ZXIucW1sIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0NvbG9yQ2hvb3Nlci5xbWwKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNWE5YTcxNmZmZDM0NjU1YjRjZjYxNGU2Zjc1NzE0
M2YwZGZkNzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
VG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0NvbG9yQ2hvb3Nlci5xbWwKKysrIC9kZXYvbnVsbApA
QCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLWltcG9ydCBRdFF1aWNrIDIuMAotCi1Nb3VzZUFyZWEgewotICAgIGFuY2hvcnMuZmls
bDogcGFyZW50Ci0gICAgb25DbGlja2VkOiBtb2RlbC5yZWplY3QoKQotCi0gICAgUmVjdGFuZ2xl
IHsKLSAgICAgICAgaWQ6IGRpYWxvZwotICAgICAgICBwcm9wZXJ0eSBpbnQgc3BhY2luZzogMTAK
LQotICAgICAgICBjb2xvcjogImdhaW5zYm9ybyIKLSAgICAgICAgb3BhY2l0eTogMC44Ci0gICAg
ICAgIHJhZGl1czogNQotICAgICAgICB3aWR0aDogMjAwCi0gICAgICAgIGhlaWdodDogMjAwCi0g
ICAgICAgIHg6IChtb2RlbC5lbGVtZW50UmVjdC54ICsgd2lkdGggPiBwYXJlbnQud2lkdGgpID8g
cGFyZW50LndpZHRoIC0gd2lkdGggOiBtb2RlbC5lbGVtZW50UmVjdC54Ci0gICAgICAgIHk6ICht
b2RlbC5lbGVtZW50UmVjdC55ICsgbW9kZWwuZWxlbWVudFJlY3QuaGVpZ2h0ICsgaGVpZ2h0IDwg
cGFyZW50LmhlaWdodCApID8gbW9kZWwuZWxlbWVudFJlY3QueSArIG1vZGVsLmVsZW1lbnRSZWN0
LmhlaWdodAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1vZGVsLmVsZW1lbnRSZWN0
LnkgLSBoZWlnaHQ7Ci0KLSAgICAgICAgUmVjdGFuZ2xlIHsKLSAgICAgICAgICAgIGNvbG9yOiAi
cmVkIgotICAgICAgICAgICAgYW5jaG9ycy5sZWZ0OiBwYXJlbnQubGVmdAotICAgICAgICAgICAg
YW5jaG9ycy50b3A6IHBhcmVudC50b3AKLSAgICAgICAgICAgIGFuY2hvcnMubWFyZ2luczogZGlh
bG9nLnNwYWNpbmcKLSAgICAgICAgICAgIHdpZHRoOiBwYXJlbnQud2lkdGggLyAyIC0gZGlhbG9n
LnNwYWNpbmcKLSAgICAgICAgICAgIGhlaWdodDogcGFyZW50LmhlaWdodCAvIDIgLSBkaWFsb2cu
c3BhY2luZwotCi0gICAgICAgICAgICBNb3VzZUFyZWEgewotICAgICAgICAgICAgICAgIGFuY2hv
cnMuZmlsbDogcGFyZW50Ci0gICAgICAgICAgICAgICAgb25DbGlja2VkOiBtb2RlbC5hY2NlcHQo
cGFyZW50LmNvbG9yKQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgUmVjdGFu
Z2xlIHsKLSAgICAgICAgICAgIGNvbG9yOiAiYmx1ZSIKLSAgICAgICAgICAgIGFuY2hvcnMucmln
aHQ6IHBhcmVudC5yaWdodAotICAgICAgICAgICAgYW5jaG9ycy50b3A6IHBhcmVudC50b3AKLSAg
ICAgICAgICAgIGFuY2hvcnMubWFyZ2luczogZGlhbG9nLnNwYWNpbmcKLSAgICAgICAgICAgIHdp
ZHRoOiBwYXJlbnQud2lkdGggLyAyIC0gZGlhbG9nLnNwYWNpbmcKLSAgICAgICAgICAgIGhlaWdo
dDogcGFyZW50LmhlaWdodCAvIDIgLSBkaWFsb2cuc3BhY2luZwotCi0gICAgICAgICAgICBNb3Vz
ZUFyZWEgewotICAgICAgICAgICAgICAgIGFuY2hvcnMuZmlsbDogcGFyZW50Ci0gICAgICAgICAg
ICAgICAgb25DbGlja2VkOiBtb2RlbC5hY2NlcHQocGFyZW50LmNvbG9yKQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgUmVjdGFuZ2xlIHsKLSAgICAgICAgICAgIGNvbG9yOiAi
Z3JlZW4iCi0gICAgICAgICAgICBhbmNob3JzLmJvdHRvbTogcGFyZW50LmJvdHRvbQotICAgICAg
ICAgICAgYW5jaG9ycy5sZWZ0OiBwYXJlbnQubGVmdAotICAgICAgICAgICAgYW5jaG9ycy5tYXJn
aW5zOiBkaWFsb2cuc3BhY2luZwotICAgICAgICAgICAgd2lkdGg6IHBhcmVudC53aWR0aCAvIDIg
LSBkaWFsb2cuc3BhY2luZwotICAgICAgICAgICAgaGVpZ2h0OiBwYXJlbnQuaGVpZ2h0IC8gMiAt
IGRpYWxvZy5zcGFjaW5nCi0KLSAgICAgICAgICAgIE1vdXNlQXJlYSB7Ci0gICAgICAgICAgICAg
ICAgYW5jaG9ycy5maWxsOiBwYXJlbnQKLSAgICAgICAgICAgICAgICBvbkNsaWNrZWQ6IG1vZGVs
LmFjY2VwdChwYXJlbnQuY29sb3IpCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBSZWN0YW5nbGUgewotICAgICAgICAgICAgY29sb3I6IG1vZGVsLmN1cnJlbnRDb2xvcgotICAg
ICAgICAgICAgYW5jaG9ycy5ib3R0b206IHBhcmVudC5ib3R0b20KLSAgICAgICAgICAgIGFuY2hv
cnMucmlnaHQ6IHBhcmVudC5yaWdodAotICAgICAgICAgICAgYW5jaG9ycy5tYXJnaW5zOiBkaWFs
b2cuc3BhY2luZyAqIDIKLSAgICAgICAgICAgIHdpZHRoOiBwYXJlbnQud2lkdGggLyAyIC0gZGlh
bG9nLnNwYWNpbmcgKiA0Ci0gICAgICAgICAgICBoZWlnaHQ6IHBhcmVudC5oZWlnaHQgLyAyIC0g
ZGlhbG9nLnNwYWNpbmcgKiA0Ci0KLSAgICAgICAgICAgIFRleHQgewotICAgICAgICAgICAgICAg
IHRleHQ6ICJDdXJyZW50IgotICAgICAgICAgICAgICAgIGFuY2hvcnMuYm90dG9tOiBwYXJlbnQu
dG9wCi0gICAgICAgICAgICAgICAgYW5jaG9ycy5ob3Jpem9udGFsQ2VudGVyOiBwYXJlbnQuaG9y
aXpvbnRhbENlbnRlcgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0NvbmZpcm1EaWFsb2cucW1sIGIvVG9vbHMv
TWluaUJyb3dzZXIvcXQvcW1sL0NvbmZpcm1EaWFsb2cucW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5NzRkMDY1Yjc4ZGZkNGUxZDAzZTYwMmY5ZDljZjhjMDYzYmNiN2NjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93
c2VyL3F0L3FtbC9Db25maXJtRGlhbG9nLnFtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1p
bXBvcnQgUXRRdWljayAyLjAKLQotRGlhbG9nIHsKLSAgICB0aXRsZTogIkphdmFTY3JpcHQgQ29u
ZmlybWF0aW9uIgotICAgIG1lc3NhZ2U6IG1vZGVsLm1lc3NhZ2UKLQotICAgIFJvdyB7Ci0gICAg
ICAgIHNwYWNpbmc6IDUKLQotICAgICAgICBEaWFsb2dCdXR0b24gewotICAgICAgICAgICAgdGV4
dDogIk9LIgotICAgICAgICAgICAgb25DbGlja2VkOiBtb2RlbC5hY2NlcHQoKQotICAgICAgICB9
Ci0KLSAgICAgICAgRGlhbG9nQnV0dG9uIHsKLSAgICAgICAgICAgIHRleHQ6ICJDYW5jZWwiCi0g
ICAgICAgICAgICBvbkNsaWNrZWQ6IG1vZGVsLnJlamVjdCgpCi0gICAgICAgIH0KLSAgICB9Ci19
CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvRGlhbG9nLnFtbCBiL1Rvb2xz
L01pbmlCcm93c2VyL3F0L3FtbC9EaWFsb2cucW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyM2IxNGNkMzc1Zjc4MTVmNzA3ZmY3OWEzYmQ4NjQ3YThiNmI3NTYxLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0
L3FtbC9EaWFsb2cucW1sCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1pbXBvcnQgUXRRdWlj
ayAyLjAKLQotSXRlbSB7Ci0gICAgaWQ6IGRpYWxvZwotCi0gICAgYW5jaG9ycy5maWxsOiBwYXJl
bnQKLSAgICB6OiAxMDAwCi0KLSAgICAvLyBXZSB3YW50IHRvIGJlIGEgY2hpbGQgb2YgdGhlIHJv
b3QgaXRlbSBzbyB0aGF0IHdlIGNhbiBjb3ZlcgotICAgIC8vIHRoZSB3aG9sZSBzY2VuZSB3aXRo
IG91ciAiZGltIiBvdmVybGF5LgotICAgIHBhcmVudDogcm9vdAotCi0gICAgcHJvcGVydHkgYWxp
YXMgdGl0bGU6IHRpdGxlVGV4dC50ZXh0Ci0gICAgcHJvcGVydHkgYWxpYXMgbWVzc2FnZTogbWVz
c2FnZVRleHQudGV4dAotCi0gICAgZGVmYXVsdCBwcm9wZXJ0eSBhbGlhcyBfX2NoaWxkcmVuOiBk
eW5hbWljQ29sdW1uLmNoaWxkcmVuCi0KLSAgICBNb3VzZUFyZWEgewotICAgICAgICBpZDogbW91
c2VCbG9ja2VyCi0gICAgICAgIGFuY2hvcnMuZmlsbDogcGFyZW50Ci0gICAgICAgIG9uUHJlc3Nl
ZDogbW91c2UuYWNjZXB0ZWQgPSB0cnVlCi0KLSAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBu
b3QgYmxvY2sgdG91Y2ggZXZlbnRzIDooCi0gICAgfQotCi0gICAgUmVjdGFuZ2xlIHsKLSAgICAg
ICAgaWQ6IGRpbUJhY2tncm91bmQKLSAgICAgICAgYW5jaG9ycy5maWxsOiBwYXJlbnQKLSAgICAg
ICAgY29sb3I6ICJibGFjayIKLSAgICAgICAgb3BhY2l0eTogMC40Ci0gICAgfQotCi0gICAgUmVj
dGFuZ2xlIHsKLSAgICAgICAgaWQ6IGRpYWxvZ1dpbmRvdwotCi0gICAgICAgIGNvbG9yOiAiI2Vm
ZWZlZiIKLQotICAgICAgICB3aWR0aDogMzAwCi0gICAgICAgIGhlaWdodDogMTUwCi0KLSAgICAg
ICAgYm9yZGVyIHsKLSAgICAgICAgICAgIHdpZHRoOiAxCi0gICAgICAgICAgICBjb2xvcjogIiNi
ZmJmYmYiCi0gICAgICAgIH0KLQotICAgICAgICBzbW9vdGg6IHRydWUKLSAgICAgICAgcmFkaXVz
OiA1Ci0KLSAgICAgICAgYW5jaG9ycy5jZW50ZXJJbjogcGFyZW50Ci0KLSAgICAgICAgSXRlbSB7
Ci0gICAgICAgICAgICBpZDogc3RhdGljQ29udGVudAotICAgICAgICAgICAgYW5jaG9ycy5jZW50
ZXJJbjogcGFyZW50Ci0gICAgICAgICAgICBhbmNob3JzLmZpbGw6IHBhcmVudAotICAgICAgICAg
ICAgYW5jaG9ycy5tYXJnaW5zOiAxMAotCi0gICAgICAgICAgICBUZXh0IHsKLSAgICAgICAgICAg
ICAgICBpZDogdGl0bGVUZXh0Ci0gICAgICAgICAgICAgICAgd2lkdGg6IHBhcmVudC53aWR0aAot
ICAgICAgICAgICAgICAgIGFuY2hvcnMuaG9yaXpvbnRhbENlbnRlcjogcGFyZW50Lmhvcml6b250
YWxDZW50ZXIKLSAgICAgICAgICAgICAgICBmb250LnBpeGVsU2l6ZTogMTYKLSAgICAgICAgICAg
ICAgICBmb250LndlaWdodDogRm9udC5Cb2xkCi0gICAgICAgICAgICAgICAgZWxpZGU6IFRleHQu
RWxpZGVSaWdodAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBUZXh0IHsKLSAgICAgICAg
ICAgICAgICBpZDogbWVzc2FnZVRleHQKLSAgICAgICAgICAgICAgICB3aWR0aDogcGFyZW50Lndp
ZHRoCi0gICAgICAgICAgICAgICAgd3JhcE1vZGU6IFRleHQuV29yZFdyYXAKLSAgICAgICAgICAg
ICAgICBhbmNob3JzLmNlbnRlckluOiBwYXJlbnQKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgQ29sdW1uIHsKLSAgICAgICAgICAgICAgICBpZDogZHluYW1pY0NvbHVtbgotICAgICAgICAg
ICAgICAgIHNwYWNpbmc6IDUKLSAgICAgICAgICAgICAgICBhbmNob3JzIHsKLSAgICAgICAgICAg
ICAgICAgICAgbWFyZ2luczogMTAKLSAgICAgICAgICAgICAgICAgICAgYm90dG9tOiBzdGF0aWND
b250ZW50LmJvdHRvbQotICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsQ2VudGVyOiBzdGF0
aWNDb250ZW50Lmhvcml6b250YWxDZW50ZXIKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9x
dC9xbWwvRGlhbG9nQnV0dG9uLnFtbCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9EaWFsb2dC
dXR0b24ucW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWExZjYxNTM5NzU0NWI1
Njc0YzI4ZWFkZjQ1MDkwMmZmMDY2YTQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9EaWFsb2dCdXR0b24ucW1s
CisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLWltcG9ydCBRdFF1aWNrIDIuMAotCi1SZWN0YW5n
bGUgewotICAgIGlkOiBidXR0b24KLQotICAgIHByb3BlcnR5IGFsaWFzIHRleHQ6IGJ1dHRvblRl
eHQudGV4dAotCi0gICAgc2lnbmFsIGNsaWNrZWQKLQotICAgIGNvbG9yOiBtb3VzZUFyZWEucHJl
c3NlZCA/ICIjZWFlYWVhIiA6ICIjZmJmYmZiIgotCi0gICAgd2lkdGg6IDYwCi0gICAgaGVpZ2h0
OiAyMAotCi0gICAgYm9yZGVyIHsKLSAgICAgICAgd2lkdGg6IDEKLSAgICAgICAgY29sb3I6ICIj
YWVhZWFlIgotICAgIH0KLQotICAgIHNtb290aDogdHJ1ZQotICAgIHJhZGl1czogNQotCi0gICAg
VGV4dCB7Ci0gICAgICAgIGlkOiBidXR0b25UZXh0Ci0gICAgICAgIGFuY2hvcnMuY2VudGVySW46
IHBhcmVudAotICAgIH0KLQotICAgIE1vdXNlQXJlYSB7Ci0gICAgICAgIGlkOiBtb3VzZUFyZWEK
LSAgICAgICAgYW5jaG9ycy5maWxsOiBwYXJlbnQKLSAgICAgICAgb25DbGlja2VkOiBidXR0b24u
Y2xpY2tlZCgpCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1s
L0RpYWxvZ0xpbmVJbnB1dC5xbWwgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvRGlhbG9nTGlu
ZUlucHV0LnFtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRmYWE1NTEwZTM4Mjlj
NzQzNzE3MGYyNjA1ZmU3NTMzODk0NmQwZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvRGlhbG9nTGluZUlucHV0
LnFtbAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1pbXBvcnQgUXRRdWljayAyLjAKLQotUmVj
dGFuZ2xlIHsKLSAgICBpZDogZGlhbG9nTGluZUlucHV0Ci0KLSAgICBwcm9wZXJ0eSBhbGlhcyB0
ZXh0OiBpbnB1dC50ZXh0Ci0gICAgcHJvcGVydHkgYWxpYXMgZWNob01vZGU6IGlucHV0LmVjaG9N
b2RlCi0gICAgc2lnbmFsIGFjY2VwdGVkKCkKLQotICAgIGhlaWdodDogMjAKLSAgICBjb2xvcjog
IiNmZWZlZmUiCi0KLSAgICBib3JkZXIgewotICAgICAgICB3aWR0aDogMQotICAgICAgICBjb2xv
cjogIiNhZWFlYWUiCi0gICAgfQotCi0gICAgc21vb3RoOiB0cnVlCi0gICAgcmFkaXVzOiAzCi0g
ICAgY2xpcDogdHJ1ZQotCi0gICAgVGV4dElucHV0IHsKLSAgICAgICAgaWQ6IGlucHV0Ci0gICAg
ICAgIGZvY3VzOiB0cnVlCi0gICAgICAgIGFuY2hvcnMuZmlsbDogcGFyZW50Ci0KLSAgICAgICAg
b25BY2NlcHRlZDogZGlhbG9nTGluZUlucHV0LmFjY2VwdGVkKCkKLSAgICB9Ci19CmRpZmYgLS1n
aXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvRmlsZVBpY2tlci5xbWwgYi9Ub29scy9NaW5p
QnJvd3Nlci9xdC9xbWwvRmlsZVBpY2tlci5xbWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDIyMmQ0YzMxZmYxYmRkZmE2OTNhNGFiMWUyMGY4ZTUzZDljNTU4ZGUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQv
cW1sL0ZpbGVQaWNrZXIucW1sCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICoKLSAqLwotCi1pbXBvcnQgUXRRdWljayAyLjAKLWltcG9ydCBRdC5sYWJzLmZvbGRlcmxp
c3Rtb2RlbCAxLjAKLWltcG9ydCAiLi4vanMvTXVsdGlTZWxlY3QuanMiIGFzIE11bHRpU2VsZWN0
Ci0KLVJlY3RhbmdsZSB7Ci0gICAgaWQ6IGZpbGVQaWNrZXIKLQotICAgIHByb3BlcnR5IFF0T2Jq
ZWN0IGZpbGVNb2RlbDogbW9kZWwKLSAgICBwcm9wZXJ0eSBhbGlhcyBmb2xkZXI6IGZvbGRlcnMu
Zm9sZGVyCi0KLSAgICBjb2xvcjogIndoaXRlIgotICAgIHdpZHRoOiA0MDAKLSAgICBoZWlnaHQ6
IDUwMAotCi0gICAgc21vb3RoOiB0cnVlCi0gICAgcmFkaXVzOiA1Ci0gICAgYW5jaG9ycy5jZW50
ZXJJbjogcGFyZW50Ci0KLSAgICBib3JkZXIgewotICAgICAgICB3aWR0aDogMQotICAgICAgICBj
b2xvcjogIiNiZmJmYmYiCi0gICAgfQotCi0gICAgQm9yZGVySW1hZ2UgewotICAgICAgICBzb3Vy
Y2U6ICIuLi9pY29ucy90aXRsZWJhci5wbmciOwotICAgICAgICB3aWR0aDogcGFyZW50LndpZHRo
OwotICAgICAgICBoZWlnaHQ6IDUwCi0gICAgICAgIHk6IC03Ci0gICAgICAgIGlkOiB0aXRsZUJh
cgotCi0gICAgICAgIGFuY2hvcnMgewotICAgICAgICAgICAgdG9wOiBwYXJlbnQudG9wCi0gICAg
ICAgICAgICBib3R0b206IGZvbGRlckxpc3RWaWV3LnRvcAotICAgICAgICB9Ci0gICAgICAgIFJl
Y3RhbmdsZSB7Ci0gICAgICAgICAgICBpZDogdXBCdXR0b24KLSAgICAgICAgICAgIHdpZHRoOiA0
OAotICAgICAgICAgICAgaGVpZ2h0OiB0aXRsZUJhci5oZWlnaHQgLSA3Ci0gICAgICAgICAgICBj
b2xvcjogInRyYW5zcGFyZW50IgotICAgICAgICAgICAgSW1hZ2UgeyBhbmNob3JzLmNlbnRlcklu
OiBwYXJlbnQ7IHNvdXJjZTogIi4uL2ljb25zL3VwLnBuZyIgfQotICAgICAgICAgICAgTW91c2VB
cmVhIHsgaWQ6IHVwUmVnaW9uOyBhbmNob3JzLmNlbnRlckluOiBwYXJlbnQKLSAgICAgICAgICAg
ICAgICB3aWR0aDogNDgKLSAgICAgICAgICAgICAgICBoZWlnaHQ6IDQ4Ci0gICAgICAgICAgICAg
ICAgb25DbGlja2VkOiBpZiAoZm9sZGVycy5wYXJlbnRGb2xkZXIgIT0gIiIpIHVwKCkKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFJlY3RhbmdsZSB7Ci0gICAgICAgICAgICBj
b2xvcjogImdyYXkiCi0gICAgICAgICAgICB4OiA0OAotICAgICAgICAgICAgd2lkdGg6IDEKLSAg
ICAgICAgICAgIGhlaWdodDogNDQKLSAgICAgICAgfQotCi0gICAgICAgIFRleHQgewotICAgICAg
ICAgICAgYW5jaG9ycyB7Ci0gICAgICAgICAgICAgICAgbGVmdDogdXBCdXR0b24ucmlnaHQKLSAg
ICAgICAgICAgICAgICByaWdodDogcGFyZW50LnJpZ2h0Ci0gICAgICAgICAgICAgICAgbGVmdE1h
cmdpbjogNAotICAgICAgICAgICAgICAgIHJpZ2h0TWFyZ2luOiA0Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGhlaWdodDogcGFyZW50LmhlaWdodAotICAgICAgICAgICAgdGV4dDogZm9s
ZGVycy5mb2xkZXIKLSAgICAgICAgICAgIGNvbG9yOiAid2hpdGUiCi0gICAgICAgICAgICBlbGlk
ZTogVGV4dC5FbGlkZUxlZnQ7Ci0gICAgICAgICAgICBob3Jpem9udGFsQWxpZ25tZW50OiBUZXh0
LkFsaWduTGVmdDsKLSAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBUZXh0LkFsaWduVkNl
bnRlcgotICAgICAgICAgICAgZm9udC5waXhlbFNpemU6IDI0Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBMaXN0VmlldyB7Ci0gICAgICAgIGlkOiBmb2xkZXJMaXN0VmlldwotCi0gICAgICAgIHdp
ZHRoOiBwYXJlbnQud2lkdGgKLSAgICAgICAgaGVpZ2h0OiA0MDAKLSAgICAgICAgYW5jaG9ycy5j
ZW50ZXJJbjogcGFyZW50Ci0gICAgICAgIHNwYWNpbmc6IDIKLSAgICAgICAgY2xpcDogdHJ1ZQot
Ci0gICAgICAgIEZvbGRlckxpc3RNb2RlbCB7Ci0gICAgICAgICAgICBpZDogZm9sZGVycwotICAg
ICAgICB9Ci0KLSAgICAgICAgQ29tcG9uZW50IHsKLSAgICAgICAgICAgIGlkOiBmaWxlRGVsZWdh
dGUKLQotICAgICAgICAgICAgUmVjdGFuZ2xlIHsKLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBz
ZWxlY3RlZCgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRlcnMuaXNGb2xkZXIoaW5k
ZXgpKQotICAgICAgICAgICAgICAgICAgICAgICAgb3BlbkZvbGRlcihmaWxlUGF0aCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmls
ZU1vZGVsLmFsbG93TXVsdGlwbGVGaWxlcykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoZWNrYm94LmNoZWNrZWQgPSAhY2hlY2tib3guY2hlY2tlZAotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGNoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE11bHRpU2VsZWN0LmFkZFZhbHVlKGZpbGVQYXRoKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVsdGlT
ZWxlY3QucmVtb3ZlVmFsdWUoZmlsZVBhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmlsZU1vZGVsLmFjY2VwdChmaWxlUGF0aCkKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGhlaWdodDogNTAKLSAgICAgICAgICAgICAg
ICB3aWR0aDogcGFyZW50LndpZHRoCi0gICAgICAgICAgICAgICAgY29sb3I6IGZvbGRlcnMuaXNG
b2xkZXIoaW5kZXgpID8gImxpZ2h0Z3JheSI6ICJkYXJrZ3JheSIKLQotICAgICAgICAgICAgICAg
IEl0ZW0gewotICAgICAgICAgICAgICAgICAgICB3aWR0aDogNTAKLSAgICAgICAgICAgICAgICAg
ICAgaGVpZ2h0OiA0OAotICAgICAgICAgICAgICAgICAgICBJbWFnZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzb3VyY2U6ICIuLi9pY29ucy9mb2xkZXIucG5nIgotICAgICAgICAgICAgICAg
ICAgICAgICAgYW5jaG9ycy5jZW50ZXJJbjogcGFyZW50Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2aXNpYmxlOiBmb2xkZXJzLmlzRm9sZGVyKGluZGV4KQotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgVGV4dCB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlkOiBmaWxlTmFtZVRleHQKLSAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5j
ZW50ZXJJbjogcGFyZW50Ci0gICAgICAgICAgICAgICAgICAgIGFuY2hvcnMubGVmdE1hcmdpbjog
MjAKLSAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwMAotICAgICAgICAgICAgICAgICAgICB0
ZXh0OiBmaWxlTmFtZQotICAgICAgICAgICAgICAgICAgICBlbGlkZTogVGV4dC5FbGlkZUxlZnQ7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgQ2hlY2tCb3ggewotICAgICAg
ICAgICAgICAgICAgICBpZDogY2hlY2tib3gKLQotICAgICAgICAgICAgICAgICAgICBhbmNob3Jz
LnJpZ2h0OiBwYXJlbnQucmlnaHQKLSAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy52ZXJ0aWNh
bENlbnRlcjogcGFyZW50LnZlcnRpY2FsQ2VudGVyCi0KLSAgICAgICAgICAgICAgICAgICAgY2hl
Y2tlZDogTXVsdGlTZWxlY3QuaXNTZWxlY3RlZChmaWxlUGF0aCkKLSAgICAgICAgICAgICAgICAg
ICAgdmlzaWJsZTogZmlsZU1vZGVsLmFsbG93TXVsdGlwbGVGaWxlcyAmJiAhZm9sZGVycy5pc0Zv
bGRlcihpbmRleCkKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBNb3VzZUFy
ZWEgewotICAgICAgICAgICAgICAgICAgICBhbmNob3JzLmZpbGw6IHBhcmVudAotICAgICAgICAg
ICAgICAgICAgICBvbkNsaWNrZWQ6IHNlbGVjdGVkKCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1vZGVsOiBmb2xkZXJzCi0gICAgICAgIGRl
bGVnYXRlOiBmaWxlRGVsZWdhdGUKLSAgICB9Ci0KLSAgICBSZWN0YW5nbGUgewotICAgICAgICBp
ZDogYnV0dG9uCi0KLSAgICAgICAgaGVpZ2h0OiA1MAotCi0gICAgICAgIGJvcmRlciB7Ci0gICAg
ICAgICAgICB3aWR0aDogMQotICAgICAgICAgICAgY29sb3I6ICIjYmZiZmJmIgotICAgICAgICB9
Ci0KLSAgICAgICAgYW5jaG9ycyB7Ci0gICAgICAgICAgICBib3R0b206IHBhcmVudC5ib3R0b20K
LSAgICAgICAgICAgIHRvcDogZm9sZGVyTGlzdFZpZXcuYm90dG9tCi0gICAgICAgICAgICBsZWZ0
OiBwYXJlbnQubGVmdAotICAgICAgICAgICAgcmlnaHQ6IHBhcmVudC5yaWdodAotICAgICAgICB9
Ci0KLSAgICAgICAgUm93IHsKLSAgICAgICAgICAgIGlkOiBidXR0b25Sb3cKLSAgICAgICAgICAg
IHNwYWNpbmc6IDEwCi0gICAgICAgICAgICBhbmNob3JzLmhvcml6b250YWxDZW50ZXI6IHBhcmVu
dC5ob3Jpem9udGFsQ2VudGVyCi0gICAgICAgICAgICBhbmNob3JzLnZlcnRpY2FsQ2VudGVyOiBw
YXJlbnQudmVydGljYWxDZW50ZXIKLQotICAgICAgICAgICAgRGlhbG9nQnV0dG9uIHsKLSAgICAg
ICAgICAgICAgICBpZDogY2FuY2VsCi0gICAgICAgICAgICAgICAgdGV4dDogIkNhbmNlbCIKLSAg
ICAgICAgICAgICAgICBvbkNsaWNrZWQ6IGZpbGVNb2RlbC5yZWplY3QoKQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBEaWFsb2dCdXR0b24gewotICAgICAgICAgICAgICAgIGlkOiBhY2Nl
cHQKLSAgICAgICAgICAgICAgICB0ZXh0OiAiT2siCi0gICAgICAgICAgICAgICAgdmlzaWJsZTog
ZmlsZU1vZGVsLmFsbG93TXVsdGlwbGVGaWxlcwotICAgICAgICAgICAgICAgIG9uQ2xpY2tlZDoK
LSAgICAgICAgICAgICAgICAgICAgZmlsZU1vZGVsLmFjY2VwdChNdWx0aVNlbGVjdC5zZWxlY3Rl
ZFZhbHVlcygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0
aW9uIG9wZW5Gb2xkZXIocGF0aCkgewotICAgICAgICBmb2xkZXJzLmZvbGRlciA9IHBhdGg7Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gdXAoKSB7Ci0gICAgICAgIGZvbGRlcnMuZm9sZGVyID0gZm9s
ZGVycy5wYXJlbnRGb2xkZXI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dz
ZXIvcXQvcW1sL0l0ZW1TZWxlY3Rvci5xbWwgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvSXRl
bVNlbGVjdG9yLnFtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI4OGQyMmJhYWM2
NmE2ZmIzOWJjNDBjNTRkZWU0OTA3ZjlmYjdlNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvSXRlbVNlbGVjdG9y
LnFtbAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1pbXBvcnQgUXRRdWljayAyLjAKLQotTW91
c2VBcmVhIHsKLSAgICAvLyBUbyBhdm9pZCBjb25mbGljdGluZyB3aXRoIExpc3RWaWV3Lm1vZGVs
IHdoZW4gaW5zaWRlIExpc3RWaWV3IGNvbnRleHQuCi0gICAgcHJvcGVydHkgUXRPYmplY3Qgc2Vs
ZWN0b3JNb2RlbDogbW9kZWwKLSAgICBhbmNob3JzLmZpbGw6IHBhcmVudAotICAgIG9uQ2xpY2tl
ZDogc2VsZWN0b3JNb2RlbC5yZWplY3QoKQotCi0gICAgUmVjdGFuZ2xlIHsKLSAgICAgICAgY2xp
cDogdHJ1ZQotICAgICAgICB3aWR0aDogMjAwCi0gICAgICAgIGhlaWdodDogTWF0aC5taW4obGlz
dFZpZXcuY29udGVudEl0ZW0uaGVpZ2h0ICsgbGlzdFZpZXcuYW5jaG9ycy50b3BNYXJnaW4gKyBs
aXN0Vmlldy5hbmNob3JzLmJvdHRvbU1hcmdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICwg
TWF0aC5tYXgoc2VsZWN0b3JNb2RlbC5lbGVtZW50UmVjdC55LCBwYXJlbnQuaGVpZ2h0IC0gc2Vs
ZWN0b3JNb2RlbC5lbGVtZW50UmVjdC55IC0gc2VsZWN0b3JNb2RlbC5lbGVtZW50UmVjdC5oZWln
aHQpKQotICAgICAgICB4OiAoc2VsZWN0b3JNb2RlbC5lbGVtZW50UmVjdC54ICsgMjAwID4gcGFy
ZW50LndpZHRoKSA/IHBhcmVudC53aWR0aCAtIDIwMCA6IHNlbGVjdG9yTW9kZWwuZWxlbWVudFJl
Y3QueAotICAgICAgICB5OiAoc2VsZWN0b3JNb2RlbC5lbGVtZW50UmVjdC55ICsgc2VsZWN0b3JN
b2RlbC5lbGVtZW50UmVjdC5oZWlnaHQgKyBoZWlnaHQgPCBwYXJlbnQuaGVpZ2h0ICkgPyBzZWxl
Y3Rvck1vZGVsLmVsZW1lbnRSZWN0LnkgKyBzZWxlY3Rvck1vZGVsLmVsZW1lbnRSZWN0LmhlaWdo
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBzZWxlY3Rvck1vZGVsLmVsZW1lbnRSZWN0LnkgLSBoZWlnaHQ7Ci0gICAgICAgIHJhZGl1
czogNQotICAgICAgICBjb2xvcjogImdhaW5zYm9ybyIKLSAgICAgICAgb3BhY2l0eTogMC44Ci0K
LSAgICAgICAgTGlzdFZpZXcgewotICAgICAgICAgICAgaWQ6IGxpc3RWaWV3Ci0gICAgICAgICAg
ICBhbmNob3JzLmZpbGw6IHBhcmVudAotICAgICAgICAgICAgYW5jaG9ycy5tYXJnaW5zOiAxMAot
ICAgICAgICAgICAgc3BhY2luZzogNQotICAgICAgICAgICAgbW9kZWw6IHNlbGVjdG9yTW9kZWwu
aXRlbXMKLQotICAgICAgICAgICAgZGVsZWdhdGU6IFJlY3RhbmdsZSB7Ci0gICAgICAgICAgICAg
ICAgY29sb3I6IG1vZGVsLnNlbGVjdGVkID8gImdvbGQiIDogInNpbHZlciIKLSAgICAgICAgICAg
ICAgICBoZWlnaHQ6IDUwCi0gICAgICAgICAgICAgICAgd2lkdGg6IHBhcmVudC53aWR0aAotCi0g
ICAgICAgICAgICAgICAgVGV4dCB7Ci0gICAgICAgICAgICAgICAgICAgIGFuY2hvcnMuY2VudGVy
SW46IHBhcmVudAotICAgICAgICAgICAgICAgICAgICB0ZXh0OiBtb2RlbC50ZXh0Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbG9yOiBtb2RlbC5lbmFibGVkID8gImJsYWNrIiA6ICJnYWluc2Jvcm8i
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgTW91c2VBcmVhIHsKLSAgICAg
ICAgICAgICAgICAgICAgYW5jaG9ycy5maWxsOiBwYXJlbnQKLSAgICAgICAgICAgICAgICAgICAg
ZW5hYmxlZDogbW9kZWwuZW5hYmxlZAotICAgICAgICAgICAgICAgICAgICBvbkNsaWNrZWQ6IHNl
bGVjdG9yTW9kZWwuYWNjZXB0KG1vZGVsLmluZGV4KQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgc2VjdGlvbi5wcm9wZXJ0eTogImdyb3VwIgotICAgICAg
ICAgICAgc2VjdGlvbi5kZWxlZ2F0ZTogUmVjdGFuZ2xlIHsKLSAgICAgICAgICAgICAgICBoZWln
aHQ6IDMwCi0gICAgICAgICAgICAgICAgd2lkdGg6IHBhcmVudC53aWR0aAotICAgICAgICAgICAg
ICAgIGNvbG9yOiAic2lsdmVyIgotICAgICAgICAgICAgICAgIFRleHQgewotICAgICAgICAgICAg
ICAgICAgICBhbmNob3JzLmNlbnRlckluOiBwYXJlbnQKLSAgICAgICAgICAgICAgICAgICAgdGV4
dDogc2VjdGlvbgotICAgICAgICAgICAgICAgICAgICBmb250LmJvbGQ6IHRydWUKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQg
YS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvTW9ja1RvdWNoUG9pbnQucW1sIGIvVG9vbHMvTWlu
aUJyb3dzZXIvcXQvcW1sL01vY2tUb3VjaFBvaW50LnFtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNGNjNWMyYzY2ZDE5ZmUwNzZiMzk3ODMzZWVlM2IyMGIzNWU3NWMyZC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9NaW5pQnJvd3Nl
ci9xdC9xbWwvTW9ja1RvdWNoUG9pbnQucW1sCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLWlt
cG9ydCBRdFF1aWNrIDIuMAotCi1JdGVtIHsKLSAgICBpZDogbW9ja1RvdWNoUG9pbnQKLQotICAg
IHByb3BlcnR5IGJvb2wgcHJlc3NlZDogZmFsc2UKLSAgICBwcm9wZXJ0eSBpbnQgcG9pbnRJZDog
MAotCi0gICAgSW1hZ2UgewotICAgICAgICBzb3VyY2U6ICIuLi9pY29ucy90b3VjaHBvaW50LnBu
ZyIKLSAgICAgICAgeDogLSh3aWR0aCAvIDIpCi0gICAgICAgIHk6IC0oaGVpZ2h0IC8gMikKLSAg
ICAgICAgaGVpZ2h0OiBwYXJlbnQuaGVpZ2h0Ci0gICAgICAgIHdpZHRoOiBwYXJlbnQud2lkdGgK
LSAgICAgICAgb3BhY2l0eTogcGFyZW50LnByZXNzZWQgPyAwLjYgOiAwLjAKLQotICAgICAgICBC
ZWhhdmlvciBvbiBvcGFjaXR5IHsKLSAgICAgICAgICAgIE51bWJlckFuaW1hdGlvbiB7IGR1cmF0
aW9uOiAyMDAgfQotICAgICAgICB9Ci0KLSAgICAgICAgVGV4dCB7Ci0gICAgICAgICAgICB0ZXh0
OiBtb2NrVG91Y2hQb2ludC5wb2ludElkCi0gICAgICAgICAgICBhbmNob3JzLmNlbnRlckluOiBw
YXJlbnQKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2Vy
L3F0L3FtbC9Qcm9tcHREaWFsb2cucW1sIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL1Byb21w
dERpYWxvZy5xbWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYzU5NDYyMmJlMGM0
YjdiNjY1NWQyYTM4ZDExYTNjMGFhYzc2ODkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL1Byb21wdERpYWxvZy5x
bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotaW1wb3J0IFF0UXVpY2sgMi4wCi0KLURpYWxv
ZyB7Ci0gICAgaWQ6IGRpYWxvZwotCi0gICAgdGl0bGU6ICJKYXZhU2NyaXB0IFByb21wdCIKLSAg
ICBtZXNzYWdlOiBtb2RlbC5tZXNzYWdlCi0KLSAgICBoZWlnaHQ6IDE4MAotCi0gICAgRGlhbG9n
TGluZUlucHV0IHsKLSAgICAgICAgaWQ6IGlucHV0Ci0gICAgICAgIHdpZHRoOiBkaWFsb2cud2lk
dGggLSAzMAotICAgICAgICB0ZXh0OiBtb2RlbC5kZWZhdWx0VmFsdWUKLQotICAgICAgICBvbkFj
Y2VwdGVkOiBtb2RlbC5hY2NlcHQoaW5wdXQudGV4dCkKLSAgICB9Ci0KLSAgICBSb3cgewotICAg
ICAgICBpZDogYnV0dG9uUm93Ci0gICAgICAgIHNwYWNpbmc6IDUKLSAgICAgICAgYW5jaG9ycy5o
b3Jpem9udGFsQ2VudGVyOiBwYXJlbnQuaG9yaXpvbnRhbENlbnRlcgotCi0gICAgICAgIERpYWxv
Z0J1dHRvbiB7Ci0gICAgICAgICAgICB0ZXh0OiAiT0siCi0gICAgICAgICAgICBvbkNsaWNrZWQ6
IG1vZGVsLmFjY2VwdChpbnB1dC50ZXh0KQotICAgICAgICB9Ci0KLSAgICAgICAgRGlhbG9nQnV0
dG9uIHsKLSAgICAgICAgICAgIHRleHQ6ICJDYW5jZWwiCi0gICAgICAgICAgICBvbkNsaWNrZWQ6
IG1vZGVsLnJlamVjdCgpCi0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Ub29scy9N
aW5pQnJvd3Nlci9xdC9xbWwvUHJveHlBdXRoZW50aWNhdGlvbkRpYWxvZy5xbWwgYi9Ub29scy9N
aW5pQnJvd3Nlci9xdC9xbWwvUHJveHlBdXRoZW50aWNhdGlvbkRpYWxvZy5xbWwKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMjdmMjY1M2FkYjg5MDNiMjkxN2NhZTM3ZjE2ZjNjNDBj
MDEyMjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9v
bHMvTWluaUJyb3dzZXIvcXQvcW1sL1Byb3h5QXV0aGVudGljYXRpb25EaWFsb2cucW1sCisrKyAv
ZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLWltcG9ydCBRdFF1aWNrIDIuMAotCi1BdXRoZW50aWNhdGlv
bkRpYWxvZyB7Ci0gICAgaWQ6IGRpYWxvZwotCi0gICAgdGl0bGU6ICJQcm94eSBhdXRoZW50aWNh
dGlvbiByZXF1aXJlZC4iCi0gICAgbWVzc2FnZTogbW9kZWwuaG9zdG5hbWUgKyAiOiIgKyBtb2Rl
bC5wb3J0ICsgIiByZXF1aXJlcyBhdXRoZW50aWNhdGlvbi4iCi19CmRpZmYgLS1naXQgYS9Ub29s
cy9NaW5pQnJvd3Nlci9xdC9xbWwvU2Nyb2xsSW5kaWNhdG9yLnFtbCBiL1Rvb2xzL01pbmlCcm93
c2VyL3F0L3FtbC9TY3JvbGxJbmRpY2F0b3IucW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA5ZjEwMGJlZDJhNmVkYjJhZWJkZmU4NzZjMTAwNGNlN2ZmMTRlNjJhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0
L3FtbC9TY3JvbGxJbmRpY2F0b3IucW1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1pbXBv
cnQgUXRRdWljayAyLjAKLQotSXRlbSB7Ci0gICAgaWQ6IHJvb3QKLQotICAgIHByb3BlcnR5IEZs
aWNrYWJsZSBmbGlja2FibGVJdGVtCi0KLSAgICBhbmNob3JzIHsKLSAgICAgICAgZmlsbDogZmxp
Y2thYmxlSXRlbQotICAgICAgICBtYXJnaW5zOiA1Ci0gICAgfQotCi0gICAgcHJvcGVydHkgYm9v
bCBfX21vdmluZ0hvcml6b250YWxseTogZmxpY2thYmxlSXRlbSA/IGZsaWNrYWJsZUl0ZW0ubW92
aW5nSG9yaXpvbnRhbGx5IDogZmFsc2UKLSAgICBwcm9wZXJ0eSBib29sIF9fbW92aW5nVmVydGlj
YWxseTogZmxpY2thYmxlSXRlbSA/IGZsaWNrYWJsZUl0ZW0ubW92aW5nVmVydGljYWxseSA6IGZh
bHNlCi0KLSAgICBwcm9wZXJ0eSByZWFsIF9fdmlld1dpZHRoOiAgZmxpY2thYmxlSXRlbSA/IGZs
aWNrYWJsZUl0ZW0ud2lkdGggLSAoYW5jaG9ycy5tYXJnaW5zICogMikgOiAwCi0gICAgcHJvcGVy
dHkgcmVhbCBfX3ZpZXdIZWlnaHQ6ICBmbGlja2FibGVJdGVtID8gZmxpY2thYmxlSXRlbS5oZWln
aHQgLSAoYW5jaG9ycy5tYXJnaW5zICogMikgOiAwCi0KLSAgICBwcm9wZXJ0eSBpbnQgX19oaWRl
VGltZW91dDogODAwCi0gICAgcHJvcGVydHkgcmVhbCBfX2luZGljYXRvclNpemU6IDUKLSAgICBw
cm9wZXJ0eSByZWFsIF9faW5kaWNhdG9yQm9yZGVyOiAxCi0KLSAgICBJdGVtIHsKLSAgICAgICAg
aWQ6IGhvcml6b250YWxJbmRpY2F0b3IKLSAgICAgICAgb3BhY2l0eTogMAotCi0gICAgICAgIHdp
ZHRoOiBfX3ZpZXdXaWR0aCAtIF9faW5kaWNhdG9yU2l6ZQotICAgICAgICBoZWlnaHQ6IF9faW5k
aWNhdG9yU2l6ZQotCi0gICAgICAgIGFuY2hvcnMuYm90dG9tOiByb290LmJvdHRvbQotCi0gICAg
ICAgIFJlY3RhbmdsZSB7Ci0gICAgICAgICAgICByYWRpdXM6IDEwCi0gICAgICAgICAgICBjb2xv
cjogImJsYWNrIgotICAgICAgICAgICAgYm9yZGVyLmNvbG9yOiAiZ3JheSIKLSAgICAgICAgICAg
IGJvcmRlci53aWR0aDogMQotICAgICAgICAgICAgb3BhY2l0eTogMC41Ci0gICAgICAgICAgICBz
bW9vdGg6IHRydWUKLQotICAgICAgICAgICAgd2lkdGg6IGZsaWNrYWJsZUl0ZW0gPyBmbGlja2Fi
bGVJdGVtLnZpc2libGVBcmVhLndpZHRoUmF0aW8gKiBob3Jpem9udGFsSW5kaWNhdG9yLndpZHRo
OiAwOwotICAgICAgICAgICAgaGVpZ2h0OiBfX2luZGljYXRvclNpemUKLQotICAgICAgICAgICAg
eDogZmxpY2thYmxlSXRlbSA/IE1hdGgubWluKHBhcmVudC53aWR0aCAtIHdpZHRoLCBNYXRoLm1h
eCgwLCBmbGlja2FibGVJdGVtLnZpc2libGVBcmVhLnhQb3NpdGlvbiAqIGhvcml6b250YWxJbmRp
Y2F0b3Iud2lkdGgpKSA6IDA7Ci0gICAgICAgICAgICB5OiAwCi0gICAgICAgIH0KLQotICAgICAg
ICBzdGF0ZXM6IFsKLSAgICAgICAgICAgIFN0YXRlIHsKLSAgICAgICAgICAgICAgICBuYW1lOiAi
c2hvdyIKLSAgICAgICAgICAgICAgICB3aGVuOiBfX21vdmluZ0hvcml6b250YWxseQotICAgICAg
ICAgICAgICAgIFByb3BlcnR5Q2hhbmdlcyB7Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldDog
aG9yaXpvbnRhbEluZGljYXRvcgotICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBdCi0KLSAgICAgICAgdHJhbnNp
dGlvbnM6IFsKLSAgICAgICAgICAgIFRyYW5zaXRpb24gewotICAgICAgICAgICAgICAgIE51bWJl
ckFuaW1hdGlvbiB7Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldDogaG9yaXpvbnRhbEluZGlj
YXRvcgotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiAib3BhY2l0eSIKLSAgICAgICAg
ICAgICAgICAgICAgZHVyYXRpb246IF9faGlkZVRpbWVvdXQKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIF0KLSAgICB9Ci0KLSAgICBJdGVtIHsKLSAgICAgICAgaWQ6
IHZlcnRpY2FsSW5kaWNhdG9yCi0gICAgICAgIG9wYWNpdHk6IDAKLQotICAgICAgICB3aWR0aDog
X19pbmRpY2F0b3JTaXplCi0gICAgICAgIGhlaWdodDogX192aWV3SGVpZ2h0IC0gX19pbmRpY2F0
b3JTaXplCi0KLSAgICAgICAgYW5jaG9ycy5yaWdodDogcm9vdC5yaWdodAotCi0gICAgICAgIFJl
Y3RhbmdsZSB7Ci0gICAgICAgICAgICByYWRpdXM6IDEwCi0gICAgICAgICAgICBjb2xvcjogImJs
YWNrIgotICAgICAgICAgICAgYm9yZGVyLmNvbG9yOiAiZ3JheSIKLSAgICAgICAgICAgIGJvcmRl
ci53aWR0aDogMQotICAgICAgICAgICAgb3BhY2l0eTogMC41Ci0gICAgICAgICAgICBzbW9vdGg6
IHRydWU7Ci0KLSAgICAgICAgICAgIHdpZHRoOiBfX2luZGljYXRvclNpemUKLSAgICAgICAgICAg
IGhlaWdodDogZmxpY2thYmxlSXRlbSA/IGZsaWNrYWJsZUl0ZW0udmlzaWJsZUFyZWEuaGVpZ2h0
UmF0aW8gKiB2ZXJ0aWNhbEluZGljYXRvci5oZWlnaHQgOiAwOwotCi0gICAgICAgICAgICB4OiAw
Ci0gICAgICAgICAgICB5OiBmbGlja2FibGVJdGVtID8gTWF0aC5taW4ocGFyZW50LmhlaWdodCAt
IGhlaWdodCwgTWF0aC5tYXgoMCwgZmxpY2thYmxlSXRlbS52aXNpYmxlQXJlYS55UG9zaXRpb24g
KiB2ZXJ0aWNhbEluZGljYXRvci5oZWlnaHQpKSA6IDAKLSAgICAgICAgfQotCi0gICAgICAgIHN0
YXRlczogWwotICAgICAgICAgICAgU3RhdGUgewotICAgICAgICAgICAgICAgIG5hbWU6ICJzaG93
IgotICAgICAgICAgICAgICAgIHdoZW46IF9fbW92aW5nVmVydGljYWxseQotICAgICAgICAgICAg
ICAgIFByb3BlcnR5Q2hhbmdlcyB7Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldDogdmVydGlj
YWxJbmRpY2F0b3IKLSAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgXQotCi0gICAgICAgIHRyYW5zaXRpb25zOiBb
Ci0gICAgICAgICAgICBUcmFuc2l0aW9uIHsKLSAgICAgICAgICAgICAgICBOdW1iZXJBbmltYXRp
b24gewotICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHZlcnRpY2FsSW5kaWNhdG9yCi0gICAg
ICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6ICJvcGFjaXR5IgotICAgICAgICAgICAgICAgICAg
ICBkdXJhdGlvbjogX19oaWRlVGltZW91dAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgXQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0
L3FtbC9WaWV3cG9ydEluZm9JdGVtLnFtbCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9WaWV3
cG9ydEluZm9JdGVtLnFtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg0Y2M3MDli
NDk3MTg1ZjllMWIzMDU4YjBkOGI0OWEwMTA5YmFlOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvVmlld3BvcnRJ
bmZvSXRlbS5xbWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotaW1wb3J0IFF0UXVp
Y2sgMi4wCi1pbXBvcnQgUXRXZWJLaXQgMy4wCi0KLUl0ZW0gewotICAgIHByb3BlcnR5IHZhciB0
ZXN0Ci0gICAgcHJvcGVydHkgdmFyIHByZWZlcnJlZE1pbmltdW1Db250ZW50c1dpZHRoCi0KLSAg
ICBmdW5jdGlvbiBmb3JtYXRTY2FsZSh2YWx1ZSkgewotICAgICAgICByZXR1cm4gIjxiPiIgKyBw
YXJzZUZsb2F0KHZhbHVlLnRvRml4ZWQoNCkpICsgIjwvYj54IjsKLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiBmb3JtYXRTaXplKHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiAiPGI+IiArIHZhbHVlLndp
ZHRoLnRvRml4ZWQoKSArICJ4IiArIHZhbHVlLmhlaWdodC50b0ZpeGVkKCkgKyAiPC9iPnB4Igot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIGZvcm1hdEJvb2wodmFsdWUpIHsKLSAgICAgICAgcmV0dXJu
ICI8Yj4iICsgKHZhbHVlID8gInllcyIgOiAibm8iKSArICI8L2I+IgotICAgIH0KLQotICAgIFJl
Y3RhbmdsZSB7Ci0gICAgICAgIGlkOiB0aXRsZTsKLQotICAgICAgICBhbmNob3JzIHsKLSAgICAg
ICAgICAgIHRvcDogcGFyZW50LnRvcAotICAgICAgICAgICAgbGVmdDogcGFyZW50LmxlZnQKLSAg
ICAgICAgICAgIG1hcmdpbnM6IDEwCi0gICAgICAgIH0KLQotICAgICAgICBoZWlnaHQ6IDUwCi0g
ICAgICAgIHdpZHRoOiAyNTAKLQotICAgICAgICBjb2xvcjogImJsdWUiCi0KLSAgICAgICAgVGV4
dCB7Ci0gICAgICAgICAgICBpZDogdmlld3BvcnRJbmZvTGFiZWwKLQotICAgICAgICAgICAgYW5j
aG9ycyB7Ci0gICAgICAgICAgICAgICAgdmVydGljYWxDZW50ZXI6IHBhcmVudC52ZXJ0aWNhbENl
bnRlcgotICAgICAgICAgICAgICAgIGxlZnQ6IHBhcmVudC5sZWZ0Ci0gICAgICAgICAgICAgICAg
bGVmdE1hcmdpbjogMTAKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGV4dDogIlZpZXdw
b3J0IEluZm8iCi0gICAgICAgICAgICBjb2xvcjogIndoaXRlIgotICAgICAgICAgICAgZm9udC5m
YW1pbHk6ICJOb2tpYSBQdXJlIgotICAgICAgICAgICAgZm9udC5wb2ludFNpemU6IDI0Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBSZWN0YW5nbGUgewotICAgICAgICBjb2xvcjogImdyYXkiCi0g
ICAgICAgIG9wYWNpdHk6IDAuOQotCi0gICAgICAgIGFuY2hvcnMgewotICAgICAgICAgICAgdG9w
OiB0aXRsZS5ib3R0b20KLSAgICAgICAgICAgIGxlZnQ6IHRpdGxlLmxlZnQKLSAgICAgICAgICAg
IHRvcE1hcmdpbjogMTAKLSAgICAgICAgfQotCi0gICAgICAgIHdpZHRoOiAzNDAKLSAgICAgICAg
aGVpZ2h0OiAyNzAKLQotICAgICAgICBJdGVtIHsKLSAgICAgICAgICAgIGlkOiB0ZXh0Qm94Ci0K
LSAgICAgICAgICAgIGFuY2hvcnMgewotICAgICAgICAgICAgICAgIGZpbGw6IHBhcmVudAotICAg
ICAgICAgICAgICAgIG1hcmdpbnM6IDEwCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBy
b3BlcnR5IHN0cmluZyBmb250RmFtaWx5OiAiTm9raWEgUHVyZSIKLSAgICAgICAgICAgIHByb3Bl
cnR5IGNvbG9yIGZvbnRDb2xvcjogImJsYWNrIgotCi0gICAgICAgICAgICBDb2x1bW4gewotICAg
ICAgICAgICAgICAgIGFuY2hvcnMuZmlsbDogcGFyZW50Ci0gICAgICAgICAgICAgICAgc3BhY2lu
ZzogMjAKLSAgICAgICAgICAgICAgICBDb2x1bW4gewotICAgICAgICAgICAgICAgICAgICBUZXh0
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJDdXJyZW50IHNjYWxlOiAiICsgZm9y
bWF0U2NhbGUodGVzdC5jb250ZW50c1NjYWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9u
dC5mYW1pbHk6IHRleHRCb3guZm9udEZhbWlseQotICAgICAgICAgICAgICAgICAgICAgICAgY29s
b3I6IHRleHRCb3guZm9udENvbG9yCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBDb2x1bW4gewotICAgICAgICAgICAgICAgICAgICBU
ZXh0IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJNaW5pbXVtIHNjYWxlOiAiICsg
Zm9ybWF0U2NhbGUodGVzdC52aWV3cG9ydC5taW5pbXVtU2NhbGUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBmb250LmZhbWlseTogdGV4dEJveC5mb250RmFtaWx5Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb2xvcjogdGV4dEJveC5mb250Q29sb3IKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBUZXh0IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6
ICJNYXhpbXVtIHNjYWxlOiAiICsgZm9ybWF0U2NhbGUodGVzdC52aWV3cG9ydC5tYXhpbXVtU2Nh
bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb250LmZhbWlseTogdGV4dEJveC5mb250RmFt
aWx5Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGV4dEJveC5mb250Q29sb3IKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IENvbHVtbiB7Ci0gICAgICAgICAgICAgICAgICAgIFRleHQgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dDogIkRldmljZSBwaXhlbCByYXRpbzogIiArIGZvcm1hdFNjYWxlKHRlc3QuZGV2
aWNlUGl4ZWxSYXRpbykKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQuZmFtaWx5OiB0ZXh0
Qm94LmZvbnRGYW1pbHkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0ZXh0Qm94LmZv
bnRDb2xvcgotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIFRleHQg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogIkNvbnRlbnRzIHNpemU6ICIgKyBmb3Jt
YXRTaXplKHRlc3QuY29udGVudHNTaXplKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5m
YW1pbHk6IHRleHRCb3guZm9udEZhbWlseQotICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6
IHRleHRCb3guZm9udENvbG9yCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgVGV4dCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiVmlld3BvcnQgbGF5
b3V0IHNpemU6ICIgKyBmb3JtYXRTaXplKHRlc3Qudmlld3BvcnQubGF5b3V0U2l6ZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvbnQuZmFtaWx5OiB0ZXh0Qm94LmZvbnRGYW1pbHkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0ZXh0Qm94LmZvbnRDb2xvcgotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgQ29sdW1uIHsK
LSAgICAgICAgICAgICAgICAgICAgVGV4dCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
OiAiQWRhcHQgZm9yIHNtYWxsIHNjcmVlbnM6ICIgKyBmb3JtYXRCb29sKHByZWZlcnJlZE1pbmlt
dW1Db250ZW50c1dpZHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5mYW1pbHk6IHRl
eHRCb3guZm9udEZhbWlseQotICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRleHRCb3gu
Zm9udENvbG9yCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgVGV4
dCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiQWxsb3dzIHNjYWxpbmc6ICIgKyBm
b3JtYXRCb29sKHRlc3Qudmlld3BvcnQuaXNTY2FsYWJsZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZvbnQuZmFtaWx5OiB0ZXh0Qm94LmZvbnRGYW1pbHkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbG9yOiB0ZXh0Qm94LmZvbnRDb2xvcgotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcmF3L0Rlcml2ZWRTb3VyY2VzLnByaSBiL1Rvb2xz
L01pbmlCcm93c2VyL3F0L3Jhdy9EZXJpdmVkU291cmNlcy5wcmkKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGRjNGQyZjRmZjIyZDI0YzBmMWQ0OWMyZWNjM2JlYzViMDRjNmU5ZDcuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvTWluaUJy
b3dzZXIvcXQvcmF3L0Rlcml2ZWRTb3VyY2VzLnByaQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAs
MCBAQAotVEVNUExBVEUgPSBkZXJpdmVkCi0KLSMgTWFrZSBzdXJlIGZvcndhcmRlZCBoZWFkZXJz
IG5lZWRlZCBieSB0aGlzIHByb2plY3QgYXJlIHByZXNlbnQKLWZ3aGVhZGVyX2dlbmVyYXRvci5j
b21tYW5kcyA9IHBlcmwgJCR7Uk9PVF9XRUJLSVRfRElSfS9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRz
L2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVycy5wbCAkJHtST09UX1dFQktJVF9ESVJ9L1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIgJCR7Uk9PVF9CVUlMRF9ESVJ9L1NvdXJjZS9pbmNsdWRlIHF0Ci1m
d2hlYWRlcl9nZW5lcmF0b3IuZGVwZW5kcyAgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9X
ZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsCi1HRU5FUkFUT1JT
ICs9IGZ3aGVhZGVyX2dlbmVyYXRvcgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQv
cmF3L01pbmlCcm93c2VyUmF3LnBybyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3Jhdy9NaW5pQnJv
d3NlclJhdy5wcm8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MDMxMDRjMGI1Y2I3
NzRjMTNhZDBmOGU2ZGIwMzdmYTA1Mjg2NmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcmF3L01pbmlCcm93c2VyUmF3
LnBybworKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotVEVNUExBVEUgPSBzdWJkaXJzCi1D
T05GSUcgKz0gb3JkZXJlZAotCi1kZXJpdmVkX3NvdXJjZXMuZmlsZSA9IERlcml2ZWRTb3VyY2Vz
LnByaQotdGFyZ2V0LmZpbGUgPSBUYXJnZXQucHJpCi0KLVNVQkRJUlMgPSBkZXJpdmVkX3NvdXJj
ZXMgdGFyZ2V0Ci0KLWFkZFN0cmljdFN1YmRpck9yZGVyQmV0d2VlbihkZXJpdmVkX3NvdXJjZXMs
IHRhcmdldCkKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3Jhdy9UYXJnZXQucHJp
IGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcmF3L1RhcmdldC5wcmkKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFmYzM4Y2U1ZjBhYThhMjIwZWVhZjQwZjViZTdkMmQ1YTAwYjhmMzkuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvTWluaUJy
b3dzZXIvcXQvcmF3L1RhcmdldC5wcmkKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1U
RU1QTEFURSA9IGFwcAotVEFSR0VUID0gTWluaUJyb3dzZXJSYXcKLQotSEVBREVSUyArPSBcCi0g
ICAgVmlldy5oCi0KLVNPVVJDRVMgKz0gXAotICAgIFZpZXcuY3BwCi0KLURFU1RESVIgPSAkJHtS
T09UX0JVSUxEX0RJUn0vYmluCi0KLVFUID0gY29yZSBndWkgbmV0d29yayB3ZWJraXR3aWRnZXRz
Ci0KLVdFQktJVCArPSB3dGYgamF2YXNjcmlwdGNvcmUgd2Via2l0MgpkaWZmIC0tZ2l0IGEvVG9v
bHMvTWluaUJyb3dzZXIvcXQvcmF3L1ZpZXcuY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcmF3
L1ZpZXcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzRkNTI4NTUzMTQ5YjNi
ZmNlZDZjOTZkNDM1NTUwNmMzMmYwYTA5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3Jhdy9WaWV3LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAi
Vmlldy5oIgotCi0jaW5jbHVkZSA8UURlYnVnPgotI2luY2x1ZGUgPFFFeHBvc2VFdmVudD4KLSNp
bmNsdWRlIDxRR3VpQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UUtleUV2ZW50PgotI2luY2x1ZGUg
PFFNYXRyaXg0eDQ+Ci0jaW5jbHVkZSA8UVJlc2l6ZUV2ZW50PgotI2luY2x1ZGUgPFFVcmw+Ci0K
LSNpbmNsdWRlIDxXZWJLaXQyL1dLQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tQYWdl
R3JvdXAuaD4KLSNpbmNsdWRlIDxXZWJLaXQyL1dLUHJlZmVyZW5jZXMuaD4KLSNpbmNsdWRlIDxX
ZWJLaXQyL1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmlu
Z1F0Lmg+Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XS1VSTC5oPgotCi0KLXN0YXRpYyBXS0NvbnRleHRS
ZWYgY3JlYXRlV2ViQ29udGV4dCgpCi17Ci0gICAgcmV0dXJuIFdLQ29udGV4dENyZWF0ZSgpOwot
fQotCi1zdGF0aWMgV0tQYWdlR3JvdXBSZWYgY3JlYXRlV2ViUGFnZUdyb3VwKGNvbnN0IFFTdHJp
bmcmIG5hbWUpCi17Ci0gICAgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwID1XS1BhZ2VHcm91cENy
ZWF0ZVdpdGhJZGVudGlmaWVyKFdLU3RyaW5nQ3JlYXRlV2l0aFFTdHJpbmcobmFtZSkpOwotICAg
IFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXMgPSBXS1BhZ2VHcm91cEdldFByZWZlcmVuY2Vz
KHBhZ2VHcm91cCk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdF
bmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0RnJhbWVGbGF0
dGVuaW5nRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7Ci0KLSAgICByZXR1cm4gcGFnZUdyb3Vw
OwotfQotCi1WaWV3Ojp+VmlldygpCi17Ci0gICAgZGVsZXRlIG1fY29udGV4dDsKLSAgICBkZWxl
dGUgbV93ZWJWaWV3OwotfQotCi1WaWV3OjpWaWV3KGNvbnN0IFFTdHJpbmcmIHVybCkKLSAgICA6
IG1fdXJsKHVybCkKLSAgICAsIG1fYWN0aXZlKGZhbHNlKQotewotICAgIHNldFN1cmZhY2VUeXBl
KE9wZW5HTFN1cmZhY2UpOwotICAgIHNldEdlb21ldHJ5KDUwLCA1MCwgOTgwLCA2MDApOwotICAg
IHNldEZsYWdzKFF0OjpXaW5kb3cgfCBRdDo6V2luZG93VGl0bGVIaW50KTsKLSAgICBjcmVhdGUo
KTsKLQotICAgIG1fY29udGV4dCA9IG5ldyBRT3BlbkdMQ29udGV4dDsKLSAgICBtX2NvbnRleHQt
PmNyZWF0ZSgpOwotCi0gICAgbV93ZWJWaWV3ID0gbmV3IFFSYXdXZWJWaWV3KGNyZWF0ZVdlYkNv
bnRleHQoKSwgY3JlYXRlV2ViUGFnZUdyb3VwKFFTdHJpbmcoKSksIHRoaXMpOwotICAgIG1fd2Vi
Vmlldy0+Y3JlYXRlKCk7Ci0gICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQobV93ZWJWaWV3LT5w
YWdlUmVmKCksIHRydWUpOwotfQotCi0KLXZvaWQgVmlldzo6ZXhwb3NlRXZlbnQoUUV4cG9zZUV2
ZW50KiBldmVudCkKLXsKLSAgICBpZiAoIW1fYWN0aXZlKSB7Ci0gICAgICAgIG1fYWN0aXZlID0g
dHJ1ZTsKLSAgICAgICAgV0tQYWdlTG9hZFVSTChtX3dlYlZpZXctPnBhZ2VSZWYoKSwgV0tVUkxD
cmVhdGVXaXRoVVRGOENTdHJpbmcobV91cmwudG9Mb2NhbDhCaXQoKS5kYXRhKCkpKTsKLQotICAg
ICAgICBtX3dlYlZpZXctPnNldEZvY3VzZWQodHJ1ZSk7Ci0gICAgICAgIG1fd2ViVmlldy0+c2V0
VmlzaWJsZSh0cnVlKTsKLSAgICAgICAgbV93ZWJWaWV3LT5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAg
fQotfQotCi12b2lkIFZpZXc6OnJlc2l6ZUV2ZW50KFFSZXNpemVFdmVudCogZXZlbnQpCi17Ci0g
ICAgbV93ZWJWaWV3LT5zZXRTaXplKGV2ZW50LT5zaXplKCkpOwotfQotCi12b2lkIFZpZXc6OnRp
bWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2ZW50KQotewotICAgIGlmIChldmVudC0+dGltZXJJZCgp
ID09IG1fcGFpbnRUaW1lci50aW1lcklkKCkpIHsKLSAgICAgICAgbV9wYWludFRpbWVyLnN0b3Ao
KTsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ3VycmVudCh0aGlzKTsKLSAgICAgICAgbV93ZWJW
aWV3LT5wYWludChRTWF0cml4NHg0KCksIDEsIDApOwotICAgICAgICBtX2NvbnRleHQtPnN3YXBC
dWZmZXJzKHRoaXMpOwotICAgIH0KLX0KLQotdm9pZCBWaWV3Ojp2aWV3TmVlZHNEaXNwbGF5KGNv
bnN0IFFSZWN0JikKLXsKLSAgICBpZiAoIW1fcGFpbnRUaW1lci5pc0FjdGl2ZSgpKQotICAgICAg
ICBtX3BhaW50VGltZXIuc3RhcnQoMCwgdGhpcyk7Ci19Ci0KLXZvaWQgVmlldzo6dmlld1JlcXVl
c3RlZEN1cnNvck92ZXJyaWRlKGNvbnN0IFFDdXJzb3ImIGN1cnNvcikKLXsKLSAgICBRR3VpQXBw
bGljYXRpb246OnNldE92ZXJyaWRlQ3Vyc29yKGN1cnNvcik7Ci19Ci0KLXZvaWQgVmlldzo6ZG9u
ZVdpdGhLZXlFdmVudChjb25zdCBRS2V5RXZlbnQqIGV2ZW50LCBib29sIHdhc0hhbmRsZWQpCi17
Ci0gICAgaWYgKHdhc0hhbmRsZWQgfHwgZXZlbnQtPmlzQWNjZXB0ZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgc3dpdGNoIChldmVudC0+a2V5KCkpIHsKLSAgICBjYXNlIFF0OjpLZXlfQmFj
a3NwYWNlOiB7Ci0gICAgICAgIFdLUGFnZVJlZiBwYWdlID0gbV93ZWJWaWV3LT5wYWdlUmVmKCk7
Ci0gICAgICAgIGlmIChXS1BhZ2VDYW5Hb0JhY2socGFnZSkpCi0gICAgICAgICAgICBXS1BhZ2VH
b0JhY2socGFnZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci19Ci0KLWludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBRR3VpQXBwbGljYXRpb24gYXBwKGFyZ2Ms
IGFyZ3YpOwotCi0gICAgVmlldyB2aWV3KGFwcC5hcmd1bWVudHMoKS5zaXplKCkgPiAxID8gYXBw
LmFyZ3VtZW50cygpLmF0KDEpIDogUVN0cmluZ0xpdGVyYWwoImh0dHA6Ly93d3cuZ29vZ2xlLmNv
bSIpKTsKLSAgICB2aWV3LnNob3coKTsKLSAgICByZXR1cm4gYXBwLmV4ZWMoKTsKLX0KZGlmZiAt
LWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3Jhdy9WaWV3LmggYi9Ub29scy9NaW5pQnJvd3Nl
ci9xdC9yYXcvVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTMyMjNmODk2
ZTMyOGZjMjlmNzczNTk5OGIyYmI5MTYwNGY0ZjgxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3Jhdy9WaWV3LmgKKysr
IC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMiBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVm
IFZpZXdfaAotI2RlZmluZSBWaWV3X2gKLQotI2luY2x1ZGUgPFFCYXNpY1RpbWVyPgotI2luY2x1
ZGUgPFFPcGVuR0xDb250ZXh0PgotI2luY2x1ZGUgPFFXaW5kb3c+Ci0jaW5jbHVkZSA8V2ViS2l0
Mi9xcmF3d2Vidmlld19wLmg+Ci0KLQotY2xhc3MgVmlldyA6ICBwdWJsaWMgUVdpbmRvdywgcHJp
dmF0ZSBRUmF3V2ViVmlld0NsaWVudCB7Ci1wdWJsaWM6Ci0gICAgVmlldyhjb25zdCBRU3RyaW5n
JiB1cmwpOwotICAgIH5WaWV3KCk7Ci0KLXB1YmxpYzogLy8gUVJhd1dlYlZpZXdDbGllbnQKLSAg
ICB2aXJ0dWFsIHZvaWQgdmlld05lZWRzRGlzcGxheShjb25zdCBRUmVjdCYpOwotICAgIHZpcnR1
YWwgdm9pZCB2aWV3UmVxdWVzdGVkU2Nyb2xsKGNvbnN0IFFQb2ludCYpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCB2aWV3UHJvY2Vzc0NyYXNoZWQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdmlld1By
b2Nlc3NSZWxhdW5jaGVkKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHZpZXdDb250ZW50U2l6ZUNo
YW5nZWQoY29uc3QgUVNpemUmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdmlld1JlcXVlc3RlZEN1
cnNvck92ZXJyaWRlKGNvbnN0IFFDdXJzb3ImKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9uZVdpdGhL
ZXlFdmVudChjb25zdCBRS2V5RXZlbnQqLCBib29sIHdhc0hhbmRsZWQpOwotICAgIHZpcnR1YWwg
dm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgUVRvdWNoRXZlbnQqLCBib29sIHdhc0hhbmRs
ZWQpIHsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGV4cG9zZUV2ZW50KFFFeHBv
c2VFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCByZXNpemVFdmVudChRUmVzaXplRXZlbnQqKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBrZXlQcmVzc0V2ZW50KFFLZXlFdmVudCogZXZlbnQpIHsgbV93
ZWJWaWV3LT5zZW5kS2V5RXZlbnQoZXZlbnQpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGtleVJlbGVh
c2VFdmVudChRS2V5RXZlbnQqIGV2ZW50KSB7IG1fd2ViVmlldy0+c2VuZEtleUV2ZW50KGV2ZW50
KTsgfQotCi0gICAgdmlydHVhbCB2b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVudChRTW91c2VFdmVu
dCogZXZlbnQpIHsgbV93ZWJWaWV3LT5zZW5kTW91c2VFdmVudChldmVudCwgMik7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgbW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQqIGV2ZW50KSB7IG1fd2ViVmll
dy0+c2VuZE1vdXNlRXZlbnQoZXZlbnQpOyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlUHJlc3NF
dmVudChRTW91c2VFdmVudCogZXZlbnQpIHsgbV93ZWJWaWV3LT5zZW5kTW91c2VFdmVudChldmVu
dCwgMSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQq
IGV2ZW50KSB7IG1fd2ViVmlldy0+c2VuZE1vdXNlRXZlbnQoZXZlbnQpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgUVJhd1dlYlZpZXcqIG1fd2ViVmlldzsKLSAgICBRT3BlbkdMQ29udGV4dCAqbV9jb250
ZXh0OwotICAgIFFCYXNpY1RpbWVyIG1fcGFpbnRUaW1lcjsKLQotICAgIFFTdHJpbmcgbV91cmw7
Ci0gICAgYm9vbCBtX2FjdGl2ZTsKLQotICAgIHZpcnR1YWwgdm9pZCB0aW1lckV2ZW50KFFUaW1l
ckV2ZW50Kik7Ci19OwotCi0jZW5kaWYgLy8gVmlld19oCmRpZmYgLS1naXQgYS9Ub29scy9NaW5p
QnJvd3Nlci9xdC91dGlscy5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC91dGlscy5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NDkxY2M0ZTBmODQzN2Q0MmRjZTJiMTU1NTU3
MjZkOWRhMzc4NmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvdXRpbHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
InV0aWxzLmgiCi0KLWJvb2wgdGFrZU9wdGlvbkZsYWcoUVN0cmluZ0xpc3QqIGFyZ3VtZW50cywg
Y29uc3QgUVN0cmluZyYgbmFtZSkKLXsKLSAgICBpbnQgaW5kZXggPSBhcmd1bWVudHMtPmluZGV4
T2YobmFtZSk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICBhcmd1bWVudHMtPnJlbW92
ZUF0KGluZGV4KTsKLSAgICByZXR1cm4gaW5kZXggIT0gLTE7Ci19Ci0KLVFTdHJpbmcgdGFrZU9w
dGlvblZhbHVlKFFTdHJpbmdMaXN0KiBhcmd1bWVudHMsIGNvbnN0IFFTdHJpbmcmIG5hbWUpCi17
Ci0gICAgUVN0cmluZyByZXN1bHQ7Ci0KLSAgICBpbnQgaW5kZXggPSBhcmd1bWVudHMtPmluZGV4
T2YobmFtZSk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgICAgIGFyZ3VtZW50cy0+cmVt
b3ZlQXQoaW5kZXgpOwotICAgICAgICBpZiAoaW5kZXggPCBhcmd1bWVudHMtPmNvdW50KCkgJiYg
IWFyZ3VtZW50cy0+YXQoaW5kZXgpLnN0YXJ0c1dpdGgoIi0iKSkKLSAgICAgICAgICAgIHJlc3Vs
dCA9IGFyZ3VtZW50cy0+dGFrZUF0KGluZGV4KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1RU3RyaW5nIGZvcm1hdEtleXMoUUxpc3Q8UVN0cmluZz4ga2V5cykKLXsKLSAgICBR
U3RyaW5nIHJlc3VsdDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGtleXMuY291bnQoKSAtIDE7
IGkrKykKLSAgICAgICAgcmVzdWx0LmFwcGVuZChrZXlzLmF0KGkpICsgInwiKTsKLSAgICByZXN1
bHQuYXBwZW5kKGtleXMubGFzdCgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1RTGlzdDxR
U3RyaW5nPiBlbnVtVG9LZXlzKGNvbnN0IFFNZXRhT2JqZWN0IG8sIGNvbnN0IFFTdHJpbmcmIG5h
bWUsIGNvbnN0IFFTdHJpbmcmIHN0cmlwKQotewotICAgIFFMaXN0PFFTdHJpbmc+IGxpc3Q7Ci0K
LSAgICBpbnQgZW51bUluZGV4ID0gby5pbmRleE9mRW51bWVyYXRvcihuYW1lLnRvTGF0aW4xKCku
ZGF0YSgpKTsKLSAgICBRTWV0YUVudW0gZW51bWVyYXRvciA9IG8uZW51bWVyYXRvcihlbnVtSW5k
ZXgpOwotCi0gICAgaWYgKGVudW1lcmF0b3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZW51bWVyYXRvci5rZXlDb3VudCgpOyBpKyspIHsKLSAgICAgICAgICAgIFFT
dHJpbmcga2V5KGVudW1lcmF0b3IudmFsdWVUb0tleShpKSk7Ci0gICAgICAgICAgICBsaXN0LmFw
cGVuZChrZXkucmVtb3ZlKHN0cmlwKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
bGlzdDsKLX0KLQotdm9pZCBhcHBRdWl0KGludCBleGl0Q29kZSwgY29uc3QgUVN0cmluZyYgbXNn
KQotewotICAgIGlmICghbXNnLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoZXhpdENvZGUgPiAw
KQotICAgICAgICAgICAgcURlYnVnKCJFUlJPUjogJXMiLCBtc2cudG9MYXRpbjEoKS5kYXRhKCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBxRGVidWcoKSA8PCBtc2c7Ci0gICAgfQotICAg
IGV4aXQoZXhpdENvZGUpOwotfQotCi1RVXJsIFV0aWxzOjp1cmxGcm9tVXNlcklucHV0KGNvbnN0
IFFTdHJpbmcmIHN0cmluZykKLXsKLSAgICBRU3RyaW5nIGlucHV0KHN0cmluZyk7Ci0gICAgUUZp
bGVJbmZvIGZpKGlucHV0KTsKLSAgICBpZiAoZmkuZXhpc3RzKCkgJiYgZmkuaXNSZWxhdGl2ZSgp
KQotICAgICAgICBpbnB1dCA9IGZpLmFic29sdXRlRmlsZVBhdGgoKTsKLQotICAgIHJldHVybiBR
VXJsOjpmcm9tVXNlcklucHV0KGlucHV0KTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93
c2VyL3F0L3V0aWxzLmggYi9Ub29scy9NaW5pQnJvd3Nlci9xdC91dGlscy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAxNTRhZmJlNGVjYTlmNmM5ZmYxYzIyYmEwNTEzNGRmNjkxN2Ez
ZTgzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xz
L01pbmlCcm93c2VyL3F0L3V0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
Ci0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIHV0aWxzX2gKLSNk
ZWZpbmUgdXRpbHNfaAotCi0jaW5jbHVkZSA8UXRDb3JlPgotCi0jaWZuZGVmIE5PX1JFVFVSTgot
I2lmIGRlZmluZWQoX19DQ19BUk0pIHx8IGRlZmluZWQoX19BUk1DQ19fKQotI2RlZmluZSBOT19S
RVRVUk4gX19kZWNsc3BlYyhub3JldHVybikKLSNlbGlmIGRlZmluZWQoX19HTlVDX18pCi0jZGVm
aW5lIE5PX1JFVFVSTiBfX2F0dHJpYnV0ZSgoX19ub3JldHVybl9fKSkKLSNlbHNlCi0jZGVmaW5l
IE5PX1JFVFVSTgotI2VuZGlmCi0jZW5kaWYKLQotLy8gb3B0aW9ucyBoYW5kbGluZwotY2xhc3Mg
VXRpbHMgOiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBVdGls
cyhRT2JqZWN0KiBwYXJlbnQgPSAwKQotICAgICAgICA6IFFPYmplY3QocGFyZW50KSB7IH0KLQot
ICAgIFFfSU5WT0tBQkxFIHN0YXRpYyBRVXJsIHVybEZyb21Vc2VySW5wdXQoY29uc3QgUVN0cmlu
ZyYgaW5wdXQpOwotfTsKLQotYm9vbCB0YWtlT3B0aW9uRmxhZyhRU3RyaW5nTGlzdCogYXJndW1l
bnRzLCBjb25zdCBRU3RyaW5nJiBuYW1lKTsKLVFTdHJpbmcgdGFrZU9wdGlvblZhbHVlKFFTdHJp
bmdMaXN0KiBhcmd1bWVudHMsIGNvbnN0IFFTdHJpbmcmIG5hbWUpOwotUVN0cmluZyBmb3JtYXRL
ZXlzKFFMaXN0PFFTdHJpbmc+IGtleXMpOwotUUxpc3Q8UVN0cmluZz4gZW51bVRvS2V5cyhjb25z
dCBRTWV0YU9iamVjdCwgY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcmKTsKLQotTk9fUkVU
VVJOIHZvaWQgYXBwUXVpdChpbnQgc3RhdHVzLCBjb25zdCBRU3RyaW5nJiBtc2cgPSBRU3RyaW5n
KCkpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIvUXRUZXN0QnJv
d3Nlci5wcm8gYi9Ub29scy9RdFRlc3RCcm93c2VyL1F0VGVzdEJyb3dzZXIucHJvCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjZkMGJkNWEyYTgwNDQzYzY0MjFkNTc1OTdmYzY4M2Vm
ZTI0ZDEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rv
b2xzL1F0VGVzdEJyb3dzZXIvUXRUZXN0QnJvd3Nlci5wcm8KKysrIC9kZXYvbnVsbApAQCAtMSw1
NyArMCwwIEBACi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUHJvamVjdCBmaWxlIGZvciB0aGUgUXRUZXN0QnJv
d3NlciBiaW5hcnkKLSMKLSMgU2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBvdmVydmll
dyBvZiB0aGUgYnVpbGQgc3lzdGVtCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVEVNUExBVEUgPSBhcHAKLQot
SU5DTFVERVBBVEggKz0gXAotICAgICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQgXAotICAgICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydCBcCi0gICAgJCR7Uk9PVF9XRUJLSVRfRElSfS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9xdC8gXAotICAgICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dURgotCi1TT1VSQ0VT
ICs9IFwKLSAgICBsb2NhdGlvbmVkaXQuY3BwIFwKLSAgICBsYXVuY2hlcndpbmRvdy5jcHAgXAot
ICAgIHF0dGVzdGJyb3dzZXIuY3BwIFwKLSAgICBtYWlud2luZG93LmNwcCBcCi0gICAgdXJsbG9h
ZGVyLmNwcCBcCi0gICAgdXRpbHMuY3BwIFwKLSAgICB3ZWJwYWdlLmNwcCBcCi0gICAgd2Vidmll
dy5jcHAgXAotICAgIGZwc3RpbWVyLmNwcCBcCi0gICAgY29va2llamFyLmNwcAotCi1IRUFERVJT
ICs9IFwKLSAgICBsb2NhdGlvbmVkaXQuaCBcCi0gICAgbGF1bmNoZXJ3aW5kb3cuaCBcCi0gICAg
bWFpbndpbmRvdy5oIFwKLSAgICB1cmxsb2FkZXIuaCBcCi0gICAgdXRpbHMuaCBcCi0gICAgd2Vi
aW5zcGVjdG9yLmggXAotICAgIHdlYnBhZ2UuaCBcCi0gICAgd2Vidmlldy5oIFwKLSAgICBmcHN0
aW1lci5oIFwKLSAgICBjb29raWVqYXIuaAotCi0KLVdFQktJVCArPSB3dGYgd2ViY29yZQotCi1E
RVNURElSID0gJCRST09UX0JVSUxEX0RJUi9iaW4KLQotUVQgKz0gbmV0d29yayB3ZWJraXR3aWRn
ZXRzIHdpZGdldHMKLWhhdmU/KFFUUFJJTlRTVVBQT1JUKTogUVQgKz0gcHJpbnRzdXBwb3J0Ci0K
LW1hY3g6UVQgKz0geG1sCi0KLWhhdmU/KEZPTlRDT05GSUcpOiBQS0dDT05GSUcgKz0gZm9udGNv
bmZpZwotCi1xdEhhdmVNb2R1bGUob3BlbmdsKSB7Ci0gICAgUVQgKz0gb3BlbmdsCi0gICAgREVG
SU5FUyArPSBRVF9DT05GSUdVUkVEX1dJVEhfT1BFTkdMCi19Ci0KLVJFU09VUkNFUyArPSBcCi0g
ICAgUXRUZXN0QnJvd3Nlci5xcmMKZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIvUXRU
ZXN0QnJvd3Nlci5xcmMgYi9Ub29scy9RdFRlc3RCcm93c2VyL1F0VGVzdEJyb3dzZXIucXJjCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjAzNmU4OWQxODdhZThjZWZmYzE4MzM4MjU4
ZGFmNTdmZTYwZDcwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIvUXRUZXN0QnJvd3Nlci5xcmMKKysrIC9kZXYvbnVsbApA
QCAtMSw2ICswLDAgQEAKLTxSQ0M+Ci0gICAgPHFyZXNvdXJjZSBwcmVmaXg9Ii8iPgotICAgICAg
ICA8ZmlsZT51c2VyYWdlbnRsaXN0LnR4dDwvZmlsZT4KLSAgICAgICAgPGZpbGU+ZmF2aWNvbi5w
bmc8L2ZpbGU+Ci0gICAgPC9xcmVzb3VyY2U+Ci08L1JDQz4KZGlmZiAtLWdpdCBhL1Rvb2xzL1F0
VGVzdEJyb3dzZXIvY29va2llamFyLmNwcCBiL1Rvb2xzL1F0VGVzdEJyb3dzZXIvY29va2llamFy
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ExYjg0NjM3OWQ1ZTVkMDE1YjQy
NTc4ZjdkMzAzZDdiYzcyNTZmOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Ub29scy9RdFRlc3RCcm93c2VyL2Nvb2tpZWphci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgImNvb2tpZWph
ci5oIgotCi0jaW5jbHVkZSA8UVN0YW5kYXJkUGF0aHM+Ci0jaW5jbHVkZSA8UURpcj4KLSNpbmNs
dWRlIDxRVGV4dFN0cmVhbT4KLQotVGVzdEJyb3dzZXJDb29raWVKYXI6OlRlc3RCcm93c2VyQ29v
a2llSmFyKFFPYmplY3QqIHBhcmVudCkKLSAgICA6IFFOZXR3b3JrQ29va2llSmFyKHBhcmVudCkK
LSAgICAsIG1fc3RvcmFnZUVuYWJsZWQoZmFsc2UpCi17Ci0gICAgLy8gV2UgdXNlIGEgdGltZXIg
Zm9yIHRoZSByZWFsIGRpc2sgd3JpdGUgdG8gYXZvaWQgbXVsdGlwbGUgSU8KLSAgICAvLyBzeXNj
YWxscyBpbiBzZXF1ZW5jZSAod2hlbiBsb2FkaW5nIHBhZ2VzIHdoaWNoIHNldCBtdWx0aXBsZSBj
b29raWVzKS4KLSAgICBtX3RpbWVyLnNldEludGVydmFsKDEwMDAwKTsKLSAgICBtX3RpbWVyLnNl
dFNpbmdsZVNob3QodHJ1ZSk7Ci0gICAgY29ubmVjdCgmbV90aW1lciwgU0lHTkFMKHRpbWVvdXQo
KSksIHRoaXMsIFNMT1Qoc2F2ZVRvRGlzaygpKSk7Ci0KLSNpZm5kZWYgUVRfTk9fREVTS1RPUFNF
UlZJQ0VTCi0gICAgUVN0cmluZyBwYXRoID0gUVN0YW5kYXJkUGF0aHM6OndyaXRhYmxlTG9jYXRp
b24oUVN0YW5kYXJkUGF0aHM6OkNhY2hlTG9jYXRpb24pOwotI2Vsc2UKLSAgICBRU3RyaW5nIHBh
dGggPSBRRGlyOjpob21lUGF0aCgpICsgIi8uUXRUZXN0QnJvd3NlciI7Ci0jZW5kaWYKLQotICAg
IFFEaXIoKS5ta3BhdGgocGF0aCk7Ci0gICAgbV9maWxlLnNldEZpbGVOYW1lKHBhdGggKyAiL2Nv
b2tpZUphciIpOwotfQotCi1UZXN0QnJvd3NlckNvb2tpZUphcjo6flRlc3RCcm93c2VyQ29va2ll
SmFyKCkKLXsKLSAgICBpZiAobV9zdG9yYWdlRW5hYmxlZCkgewotICAgICAgICBleHRyYWN0UmF3
Q29va2llcygpOwotICAgICAgICBzYXZlVG9EaXNrKCk7Ci0gICAgfQotfQotCi1ib29sIFRlc3RC
cm93c2VyQ29va2llSmFyOjpzZXRDb29raWVzRnJvbVVybChjb25zdCBRTGlzdDxRTmV0d29ya0Nv
b2tpZT4mIGNvb2tpZUxpc3QsIGNvbnN0IFFVcmwmIHVybCkKLXsKLSAgICBib29sIHN0YXR1cyA9
IFFOZXR3b3JrQ29va2llSmFyOjpzZXRDb29raWVzRnJvbVVybChjb29raWVMaXN0LCB1cmwpOwot
ICAgIGlmIChzdGF0dXMgJiYgbV9zdG9yYWdlRW5hYmxlZCkKLSAgICAgICAgc2NoZWR1bGVTYXZl
VG9EaXNrKCk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotdm9pZCBUZXN0QnJvd3NlckNvb2tp
ZUphcjo6c2V0RGlza1N0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBtX3N0b3Jh
Z2VFbmFibGVkID0gZW5hYmxlZDsKLQotICAgIGlmIChlbmFibGVkICYmIGFsbENvb2tpZXMoKS5p
c0VtcHR5KCkpCi0gICAgICAgIGxvYWRGcm9tRGlzaygpOwotCi0gICAgLy8gV2hlbiBkaXNhYmxp
bmcsIHNhdmUgY3VycmVudCBjb29raWVzLgotICAgIGlmICghZW5hYmxlZCAmJiAhYWxsQ29va2ll
cygpLmlzRW1wdHkoKSkKLSAgICAgICAgc2NoZWR1bGVTYXZlVG9EaXNrKCk7Ci19Ci0KLXZvaWQg
VGVzdEJyb3dzZXJDb29raWVKYXI6OnNjaGVkdWxlU2F2ZVRvRGlzaygpCi17Ci0gICAgLy8gV2Ug
ZXh0cmFjdCB0aGUgcmF3IGNvb2tpZXMgaGVyZSBiZWNhdXNlIHRoZSB1c2VyIG1heQotICAgIC8v
IGVuYWJsZS9kaXNhYmxlL2NsZWFyIGNvb2tpZXMgd2hpbGUgdGhlIHRpbWVyIGlzIHJ1bm5pbmcu
Ci0gICAgZXh0cmFjdFJhd0Nvb2tpZXMoKTsKLSAgICBtX3RpbWVyLnN0YXJ0KCk7Ci19Ci0KLXZv
aWQgVGVzdEJyb3dzZXJDb29raWVKYXI6OmV4dHJhY3RSYXdDb29raWVzKCkKLXsKLSAgICBRTGlz
dDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGFsbENvb2tpZXMoKTsKLSAgICBtX3Jhd0Nvb2tp
ZXMuY2xlYXIoKTsKLQotICAgIGZvcmVhY2ggKGNvbnN0IFFOZXR3b3JrQ29va2llICZjb29raWUs
IGNvb2tpZXMpIHsKLSAgICAgICAgaWYgKCFjb29raWUuaXNTZXNzaW9uQ29va2llKCkpCi0gICAg
ICAgICAgICBtX3Jhd0Nvb2tpZXMuYXBwZW5kKGNvb2tpZS50b1Jhd0Zvcm0oKSk7Ci0gICAgfQot
fQotCi12b2lkIFRlc3RCcm93c2VyQ29va2llSmFyOjpzYXZlVG9EaXNrKCkKLXsKLSAgICBtX3Rp
bWVyLnN0b3AoKTsKLQotICAgIGlmIChtX2ZpbGUub3BlbihRSU9EZXZpY2U6OldyaXRlT25seSB8
IFFJT0RldmljZTo6VGV4dCkpIHsKLSAgICAgICAgUVRleHRTdHJlYW0gb3V0KCZtX2ZpbGUpOwot
ICAgICAgICBmb3JlYWNoIChjb25zdCBRQnl0ZUFycmF5ICZjb29raWUsIG1fcmF3Q29va2llcykK
LSAgICAgICAgICAgIG91dCA8PCBjb29raWUgKyAiXG4iOwotICAgICAgICBtX2ZpbGUuY2xvc2Uo
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcVdhcm5pbmcoIklPIGVycm9yIGhhbmRsaW5nIGNvb2tp
ZWphciBmaWxlIik7Ci19Ci0KLXZvaWQgVGVzdEJyb3dzZXJDb29raWVKYXI6OmxvYWRGcm9tRGlz
aygpCi17Ci0gICAgaWYgKCFtX2ZpbGUuZXhpc3RzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzOwotCi0gICAgaWYgKG1fZmlsZS5vcGVuKFFJ
T0RldmljZTo6UmVhZE9ubHkgfCBRSU9EZXZpY2U6OlRleHQpKSB7Ci0gICAgICAgIFFUZXh0U3Ry
ZWFtIGluKCZtX2ZpbGUpOwotICAgICAgICB3aGlsZSAoIWluLmF0RW5kKCkpCi0gICAgICAgICAg
ICBjb29raWVzLmFwcGVuZChRTmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKGluLnJlYWRMaW5l
KCkudG9VdGY4KCkpKTsKLSAgICAgICAgbV9maWxlLmNsb3NlKCk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHFXYXJuaW5nKCJJTyBlcnJvciBoYW5kbGluZyBjb29raWVqYXIgZmlsZSIpOwotCi0gICAg
c2V0QWxsQ29va2llcyhjb29raWVzKTsKLX0KLQotdm9pZCBUZXN0QnJvd3NlckNvb2tpZUphcjo6
cmVzZXQoKQotewotICAgIHNldEFsbENvb2tpZXMoUUxpc3Q8UU5ldHdvcmtDb29raWU+KCkpOwot
ICAgIGlmIChtX3N0b3JhZ2VFbmFibGVkKQotICAgICAgICBzY2hlZHVsZVNhdmVUb0Rpc2soKTsK
LX0KZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIvY29va2llamFyLmggYi9Ub29scy9R
dFRlc3RCcm93c2VyL2Nvb2tpZWphci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
YTYyZmI4MjlmZjA5ZDQyNjEzMGEwNDg0OTU1MzM1ZDI0YTM4YWMwLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIvY29va2ll
amFyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoK
LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBjb29raWVqYXJfaAotI2Rl
ZmluZSBjb29raWVqYXJfaAotCi0jaW5jbHVkZSA8UUZpbGU+Ci0jaW5jbHVkZSA8UU5ldHdvcmtD
b29raWU+Ci0jaW5jbHVkZSA8UU5ldHdvcmtDb29raWVKYXI+Ci0jaW5jbHVkZSA8UVRpbWVyPgot
Ci1jbGFzcyBUZXN0QnJvd3NlckNvb2tpZUphciA6IHB1YmxpYyBRTmV0d29ya0Nvb2tpZUphciB7
Ci0gICAgUV9PQkpFQ1QKLQotcHVibGljOgotICAgIFRlc3RCcm93c2VyQ29va2llSmFyKFFPYmpl
Y3QqIHBhcmVudCA9IDApOwotICAgIHZpcnR1YWwgflRlc3RCcm93c2VyQ29va2llSmFyKCk7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgc2V0Q29va2llc0Zyb21VcmwoY29uc3QgUUxpc3Q8UU5ldHdvcmtD
b29raWU+JiwgY29uc3QgUVVybCYpOwotCi0gICAgdm9pZCBzZXREaXNrU3RvcmFnZUVuYWJsZWQo
Ym9vbCk7Ci0KLXB1YmxpYyBRX1NMT1RTOgotICAgIHZvaWQgc2NoZWR1bGVTYXZlVG9EaXNrKCk7
Ci0gICAgdm9pZCBsb2FkRnJvbURpc2soKTsKLSAgICB2b2lkIHJlc2V0KCk7Ci0KLXByaXZhdGUg
UV9TTE9UUzoKLSAgICB2b2lkIHNhdmVUb0Rpc2soKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGV4
dHJhY3RSYXdDb29raWVzKCk7Ci0KLSAgICBRTGlzdDxRQnl0ZUFycmF5PiBtX3Jhd0Nvb2tpZXM7
Ci0gICAgYm9vbCBtX3N0b3JhZ2VFbmFibGVkOwotICAgIFFGaWxlIG1fZmlsZTsKLSAgICBRVGlt
ZXIgbV90aW1lcjsKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvUXRUZXN0QnJvd3Nl
ci9mYXZpY29uLnBuZyBiL1Rvb2xzL1F0VGVzdEJyb3dzZXIvZmF2aWNvbi5wbmcKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NjI3NTJhNTNiYWViMDVkOWE5OGY4YWUyM2ZhODA3ZTdj
ZWVlNGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFy
eSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgODkxCnpjbVYtPjFCQ3BFUCk8
aDszS3xMazAwMGUxTkpMVHEwMDBtRzAwMG1PMV5AczZBTV5pVjAwMDAxYjVjaF8wSXRwKQp6PT5Q
eCZIQXpINFI1KHVzIU9jJDtYOF4kQS19fXh4R2RyKiE0Ny1iaFZKJDQhcVJAYnZHKTteI3swK1Ny
KUFaKVcKekcoR2VXRDVzdSMpa0R2e247elFRIyZ+TkpRZDV5dTVuK0xhbTFURVhjNll3I29qIzhN
Xytvd2l1ey1OTkcjcnlHCnozPCpYTmNGclVkMkJxcEgjdFNhMyhfXiQhbjVOQjFxan1QOG9qcmEy
Oz5CYSooS2xhajNfR29GXkUxO1ZMU2M8TAp6M2BQTl5ZTUpzPm5VNm5OO3Jma2JDTXkrYFdyMVot
dTJ1XzJqbUU4S3p4XlZWQT4/PVk9XnwwO1E9WH1qZFBETVYKemZ0bEpvaX1nQnx2TTNZXlNoa0hI
TVRCWEJwVCFpNUU+WT9+R15WODdzNGd1clVNd01uamNyKkotM29KYTMoUVEtCnpBZi1ZWWxBTFdM
NWdaO0koQWEmMFA5Pm88a3NfQnpzeGlqaDNXbV4+aWJkajdsWkcrUDR7Y2lBYjFZfF5MVmtqQgp6
V3MzUWF0YFV0PUJDaylyeW5yJHMyZzZaLUxEaWsyKlk1RHtWNHQxRjVuNSokWH54YWZQcX15SjQj
JXcpUGs7WGQKektoQjc+TClfZChObUchOURYKEBtTiY1a19ePXI4MERAO3NDanRAP05ndVQ2OHtg
JkpERTxCRylEVGcqUExMR3VFCnpwXlRoRUNeVkNrNiZCYSh0UztZUmB8VTJUfDkjMUwhNkVTczA/
Kl5+K3NreDFVMFU1OVFmZFolT3B0MSVaRCE9Ngp6Z25aNWRvZSV+LWkqcSVVSGMmeHxCKlQmeGJG
KCRwQDdeV3lgaU1CZ2t8NnlII0RufHl2ajw7Jk5vRS1ReX04TkMKekBeIzlTNj5RcmtPJWpxTUxJ
XjwrI2BGZ1JhPCltfWRIbnFBR3YwMSpxazZwX2FoZyVlPU5OaDtmKj5IdkdMKHxVCnppRHV7aEpH
JEwtZio+RmpubHl+S3h3PVhrTWBXcGlGPFlEOFhucmBSU2plO0FKaXReSVpyTFUwKmxmTXRWbUtP
Kwp6N1k9emw0PjNxKCgoWlI/b300bDBeLXomTXIqfiVZXjFvTGtOeWNmbmh1ZG1sK1pMJllPUDht
eWx9UnYrTlRrTHgKejtQa0FgemBzRTIxZnxSaHhrM0Bzdj5DVUBYbSZjcG5XbzwjYU1XcmRnYTkl
ZVE7fGZQdH5hM0g+bDYwfGw8aExjCnopc0A+SyhCOGVQbSMwQ2V5ZyUzeyQ+Nmx6VmQjZms0Mkw4
LXFnWDhCUEVOM1FjISltPXhnczFFT09zRUcjKyQ5QAp6WWlwbSlFWSlrYjdWMzM2b2k+QzExKDZt
QSF6OSlUWCRGSH4kVnVtJUkwZmJUUjhkZDl8TE1tY3tzJTQkZzw0K2UKUkVmND96MDAyb3ZQREhM
a1YxbmxqbyFrSGIKCmRpZmYgLS1naXQgYS9Ub29scy9RdFRlc3RCcm93c2VyL2Zwc3RpbWVyLmNw
cCBiL1Rvb2xzL1F0VGVzdEJyb3dzZXIvZnBzdGltZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlYWUzZDljMDA4YjQ0M2ExYzA2NWEwYjQ2YjFjYTg1YmMxYzQ2ODcyLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1F0VGVzdEJy
b3dzZXIvZnBzdGltZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJm
cHN0aW1lci5oIgotCi0jaW5jbHVkZSA8UURhdGVUaW1lPgotI2luY2x1ZGUgPFFUaW1lckV2ZW50
PgotCi0vLyBXZSBzYXZlIGEgbWF4aW11bSBvZiAxMDAwMCBmcmFtZXMsIGFuZCBwdXJnZSAyMDAw
IGF0IGEgdGltZQotI2RlZmluZSBNQVhfRlJBTUVTX1NBVkVEIDEwMDAwCi0jZGVmaW5lIEZSQU1F
U19UT19QVVJHRV9XSEVOX0ZVTEwgMjAwMAotLy8gNjAgRlBTCi0jZGVmaW5lIEZQU19NRUFTVVJF
X0lOVEVSVkFMIDEwMDAgLyA2MAotCi1GcHNUaW1lcjo6RnBzVGltZXIoUU9iamVjdCogcGFyZW50
KQotICAgIDogUU9iamVjdChwYXJlbnQpCi0gICAgLCBtX3RpbWVyKDApCi17Ci19Ci0KLWludCBG
cHNUaW1lcjo6bnVtRnJhbWVzKGludCBzcGFuTWlsbGlzKSBjb25zdAotewotICAgIGNvbnN0IFFU
aW1lIG5vdyA9IFFUaW1lOjpjdXJyZW50VGltZSgpOwotCi0gICAgaW50IGNvdW50ID0gMDsKLSAg
ICBmb3IgKGludCBpID0gbV9mcmFtZXMubGVuZ3RoKCkgLSAxOyBpID49IDA7IC0taSwgKytjb3Vu
dCkgewotICAgICAgICBpbnQgbXNlY3MgPSBtX2ZyYW1lc1tpXS5tc2Vjc1RvKG5vdyk7Ci0gICAg
ICAgIGlmIChtc2VjcyA8IDApCi0gICAgICAgICAgICBtc2VjcyArPSAyNCAqIDYwICogNjAgKiAx
MDAwOwotICAgICAgICBpZiAobXNlY3MgPiBzcGFuTWlsbGlzKQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdm9pZCBGcHNUaW1lcjo6c3RhcnQoKQot
ewotICAgIG1fdGltZXIgPSBzdGFydFRpbWVyKEZQU19NRUFTVVJFX0lOVEVSVkFMKTsKLX0KLQot
dm9pZCBGcHNUaW1lcjo6c3RvcCgpCi17Ci0gICAgaWYgKCFtX3RpbWVyKQotICAgICAgICByZXR1
cm47Ci0gICAga2lsbFRpbWVyKG1fdGltZXIpOwotICAgIG1fZnJhbWVzLmNsZWFyKCk7Ci19Ci0K
LXZvaWQgRnBzVGltZXI6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2ZW50KQotewotICAgIGlm
IChldmVudC0+dGltZXJJZCgpICE9IG1fdGltZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Zy
YW1lcy5hcHBlbmQoUVRpbWU6OmN1cnJlbnRUaW1lKCkpOwotICAgIGlmIChtX2ZyYW1lcy5sZW5n
dGgoKSA+IE1BWF9GUkFNRVNfU0FWRUQpCi0gICAgICAgIG1fZnJhbWVzLmVyYXNlKG1fZnJhbWVz
LmJlZ2luKCksIG1fZnJhbWVzLmJlZ2luKCkgKyBGUkFNRVNfVE9fUFVSR0VfV0hFTl9GVUxMKTsK
LX0KZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIvZnBzdGltZXIuaCBiL1Rvb2xzL1F0
VGVzdEJyb3dzZXIvZnBzdGltZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU2
NzQ1YWE4NzFiZGNmN2Y4ZTAyMzg0MjU2OTViYjhhZjNlZjkwOC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9RdFRlc3RCcm93c2VyL2Zwc3RpbWVy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBmcHN0aW1lcl9oCi0jZGVmaW5l
IGZwc3RpbWVyX2gKLQotI2luY2x1ZGUgPFFPYmplY3Q+Ci0jaW5jbHVkZSA8UVNldD4KLSNpbmNs
dWRlIDxRVGltZT4KLQotY2xhc3MgRnBzVGltZXIgOiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9P
QkpFQ1QKLQotcHVibGljOgotICAgIEZwc1RpbWVyKFFPYmplY3QqIHBhcmVudCA9IDApOwotICAg
IGludCBudW1GcmFtZXMoaW50IHNwYW5NaWxsaXMgPSAxMDAwKSBjb25zdDsKLQotcHVibGljIFFf
U0xPVFM6Ci0gICAgdm9pZCBzdGFydCgpOwotICAgIHZvaWQgc3RvcCgpOwotCi1wcm90ZWN0ZWQg
UV9TTE9UUzoKLSAgICB2aXJ0dWFsIHZvaWQgdGltZXJFdmVudChRVGltZXJFdmVudCopOwotCi1w
cml2YXRlOgotICAgIGludCBtX3RpbWVyOwotICAgIFFMaXN0PFFUaW1lPiBtX2ZyYW1lczsKLX07
Ci0KLSNlbmRpZiAvLyBGUFNNRUFTVVJFX0gKZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdEJyb3dz
ZXIvbGF1bmNoZXJ3aW5kb3cuY3BwIGIvVG9vbHMvUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRv
dy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYWRmNDY4OGQzODRiZjliZTJh
ZmI1ODZjNjU1NmZiZTZiNDdlMDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvVG9vbHMvUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMTk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqIENvcHlyaWdodCAoQykgMjAxMSBLcmlz
dG9mIEtvc3p0eW8gPEtvc3p0eW8uS3Jpc3RvZkBzdHVkLnUtc3plZ2VkLmh1PgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEdpcmlzaCBSYW1ha3Jpc2huYW4gPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4K
LSAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAqCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUg
ImxhdW5jaGVyd2luZG93LmgiCi0jaW5jbHVkZSAiY29va2llamFyLmgiCi0jaW5jbHVkZSAidXJs
bG9hZGVyLmgiCi0KLSNpbmNsdWRlIDxRQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UUNoZWNrQm94
PgotI2luY2x1ZGUgPFFDb21ib0JveD4KLSNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgotI2lu
Y2x1ZGUgPFFEaWFsb2dCdXR0b25Cb3g+Ci0jaW5jbHVkZSA8UUlucHV0RGlhbG9nPgotI2luY2x1
ZGUgPFFMYWJlbD4KLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLSNpbmNsdWRlIDxRTGluZUVkaXQ+
Ci0jZW5kaWYKLSNpZm5kZWYgUVRfTk9fU0hPUlRDVVQKLSNpbmNsdWRlIDxRTWVudUJhcj4KLSNl
bmRpZgotI2lmICFkZWZpbmVkKFFUX05PX1BSSU5UUFJFVklFV0RJQUxPRykgJiYgSEFWRShRVFBS
SU5UU1VQUE9SVCkKLSNpbmNsdWRlIDxRUHJpbnRQcmV2aWV3RGlhbG9nPgotI2VuZGlmCi0jaW5j
bHVkZSA8UVNsaWRlcj4KLSNpbmNsdWRlIDxRU3BsaXR0ZXI+Ci0jaW5jbHVkZSA8UVN0YXR1c0Jh
cj4KLSNpbmNsdWRlIDxRVG9vbEJ1dHRvbj4KLSNpbmNsdWRlIDxRVG9vbFRpcD4KLSNpbmNsdWRl
IDxRVkJveExheW91dD4KLQotI2lmICFkZWZpbmVkKFFUX05PX0ZJTEVESUFMT0cpICYmICFkZWZp
bmVkKFFUX05PX01FU1NBR0VCT1gpCi0jaW5jbHVkZSA8UUZpbGVEaWFsb2c+Ci0jaW5jbHVkZSA8
UUZpbGVJbmZvPgotI2luY2x1ZGUgPFFNZXNzYWdlQm94PgotI2luY2x1ZGUgPFFOZXR3b3JrUmVw
bHk+Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFFUX05PX05FVFdPUktESVNLQ0FDSEUpICYmICFk
ZWZpbmVkKFFUX05PX0RFU0tUT1BTRVJWSUNFUykKLSNpbmNsdWRlIDxRU3RhbmRhcmRQYXRocz4K
LSNpbmNsdWRlIDxRdE5ldHdvcmsvUU5ldHdvcmtEaXNrQ2FjaGU+Ci0jZW5kaWYKLQotc3RydWN0
IEhpZ2hsaWdodGVkRWxlbWVudCB7Ci0gICAgUVdlYkVsZW1lbnQgbV9lbGVtZW50OwotICAgIFFT
dHJpbmcgbV9wcmV2aW91c1N0eWxlOwotfTsKLQotY29uc3QgaW50IGdFeGl0Q2xpY2tBcmVhID0g
ODA7Ci1RVmVjdG9yPGludD4gTGF1bmNoZXJXaW5kb3c6Om1fem9vbUxldmVsczsKLQotc3RhdGlj
IFRlc3RCcm93c2VyQ29va2llSmFyKiB0ZXN0QnJvd3NlckNvb2tpZUphckluc3RhbmNlKCkKLXsK
LSAgICBzdGF0aWMgVGVzdEJyb3dzZXJDb29raWVKYXIqIGNvb2tpZUphciA9IG5ldyBUZXN0QnJv
d3NlckNvb2tpZUphcihxQXBwKTsKLSAgICByZXR1cm4gY29va2llSmFyOwotfQotCi1MYXVuY2hl
cldpbmRvdzo6TGF1bmNoZXJXaW5kb3coV2luZG93T3B0aW9ucyogZGF0YSwgUUdyYXBoaWNzU2Nl
bmUqIHNoYXJlZFNjZW5lKQotICAgIDogTWFpbldpbmRvdygpCi0gICAgLCBtX2N1cnJlbnRab29t
KDEwMCkKLSAgICAsIG1fdXJsTG9hZGVyKDApCi0gICAgLCBtX3ZpZXcoMCkKLSAgICAsIG1faW5z
cGVjdG9yKDApCi0gICAgLCBtX2Zvcm1hdE1lbnVBY3Rpb24oMCkKLSAgICAsIG1fem9vbUFuaW1h
dGlvbigwKQotI2lmICFkZWZpbmVkKFFUX05PX0ZJTEVESUFMT0cpICYmICFkZWZpbmVkKFFUX05P
X01FU1NBR0VCT1gpCi0gICAgLCBtX3JlcGx5KDApCi0jZW5kaWYKLSNpZm5kZWYgUVRfTk9fTElO
RUVESVQKLSAgICAsIG1fZmluZEZsYWcoMCkKLSNlbmRpZgotewotICAgIGlmIChkYXRhKQotICAg
ICAgICBtX3dpbmRvd09wdGlvbnMgPSAqZGF0YTsKLQotICAgIGluaXQoKTsKLSAgICBpZiAoc2hh
cmVkU2NlbmUgJiYgZGF0YS0+dXNlR3JhcGhpY3NWaWV3KQotICAgICAgICBzdGF0aWNfY2FzdDxR
R3JhcGhpY3NWaWV3Kj4obV92aWV3KS0+c2V0U2NlbmUoc2hhcmVkU2NlbmUpOwotCi0gICAgY3Jl
YXRlQ2hyb21lKCk7Ci0jaWYgIWRlZmluZWQoUVRfTk9fRklMRURJQUxPRykgJiYgIWRlZmluZWQo
UVRfTk9fTUVTU0FHRUJPWCkKLSAgICBjb25uZWN0KHBhZ2UoKSwgU0lHTkFMKGRvd25sb2FkUmVx
dWVzdGVkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYpKSwgdGhpcywgU0xPVChkb3dubG9hZFJlcXVl
c3QoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JikpKTsKLSNlbmRpZgotfQotCi1MYXVuY2hlcldpbmRv
dzo6fkxhdW5jaGVyV2luZG93KCkKLXsKLSAgICBkZWxldGUgbV91cmxMb2FkZXI7Ci19Ci0KLXZv
aWQgTGF1bmNoZXJXaW5kb3c6OmluaXQoKQotewotICAgIFFTcGxpdHRlciogc3BsaXR0ZXIgPSBu
ZXcgUVNwbGl0dGVyKFF0OjpWZXJ0aWNhbCwgdGhpcyk7Ci0gICAgc2V0Q2VudHJhbFdpZGdldChz
cGxpdHRlcik7Ci0KLSAgICBpZiAobV93aW5kb3dPcHRpb25zLnN0YXJ0TWF4aW1pemVkKQotICAg
ICAgICBzZXRXaW5kb3dTdGF0ZSh3aW5kb3dTdGF0ZSgpIHwgUXQ6OldpbmRvd01heGltaXplZCk7
Ci0gICAgZWxzZQotICAgICAgICByZXNpemUoODAwLCA2MDApOwotCi0gICAgbV9pbnNwZWN0b3Ig
PSBuZXcgV2ViSW5zcGVjdG9yOwotI2lmbmRlZiBRVF9OT19QUk9QRVJUSUVTCi0gICAgaWYgKCFt
X3dpbmRvd09wdGlvbnMuaW5zcGVjdG9yVXJsLmlzRW1wdHkoKSkKLSAgICAgICAgbV9pbnNwZWN0
b3ItPnNldFByb3BlcnR5KCJfcV9pbnNwZWN0b3JVcmwiLCBtX3dpbmRvd09wdGlvbnMuaW5zcGVj
dG9yVXJsKTsKLSNlbmRpZgotICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGRlc3Ryb3llZCgpKSwg
bV9pbnNwZWN0b3IsIFNMT1QoZGVsZXRlTGF0ZXIoKSkpOwotCi0gICAgLy8gdGhlIHpvb20gdmFs
dWVzIGFyZSBjaG9zZW4gdG8gYmUgbGlrZSBpbiBNb3ppbGxhIEZpcmVmb3ggMwotICAgIGlmICgh
bV96b29tTGV2ZWxzLmNvdW50KCkpIHsKLSAgICAgICAgbV96b29tTGV2ZWxzIDw8IDMwIDw8IDUw
IDw8IDY3IDw8IDgwIDw8IDkwOwotICAgICAgICBtX3pvb21MZXZlbHMgPDwgMTAwOwotICAgICAg
ICBtX3pvb21MZXZlbHMgPDwgMTEwIDw8IDEyMCA8PCAxMzMgPDwgMTUwIDw8IDE3MCA8PCAyMDAg
PDwgMjQwIDw8IDMwMDsKLSAgICB9Ci0KLSAgICBpbml0aWFsaXplVmlldygpOwotfQotCi12b2lk
IExhdW5jaGVyV2luZG93Ojppbml0aWFsaXplVmlldygpCi17Ci0gICAgZGVsZXRlIG1fdmlldzsK
LQotICAgIG1faW5wdXRVcmwgPSBhZGRyZXNzVXJsKCk7Ci0gICAgUVVybCB1cmwgPSBwYWdlKCkt
Pm1haW5GcmFtZSgpLT51cmwoKTsKLSAgICBzZXRQYWdlKG5ldyBXZWJQYWdlKHRoaXMpKTsKLSAg
ICBzZXREaXNrQ2FjaGUobV93aW5kb3dPcHRpb25zLnVzZURpc2tDYWNoZSk7Ci0gICAgc2V0VXNl
RGlza0Nvb2tpZXMobV93aW5kb3dPcHRpb25zLnVzZURpc2tDb29raWVzKTsKLQotICAgIC8vIFdl
IHJldXNlIHRoZSBzYW1lIGNvb2tpZUphciBvbiBtdWx0aXBsZSBRTkFNcywgd2hpY2ggaXMgT0su
Ci0gICAgUU9iamVjdCogY29va2llSmFyUGFyZW50ID0gdGVzdEJyb3dzZXJDb29raWVKYXJJbnN0
YW5jZSgpLT5wYXJlbnQoKTsKLSAgICBwYWdlKCktPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPnNl
dENvb2tpZUphcih0ZXN0QnJvd3NlckNvb2tpZUphckluc3RhbmNlKCkpOwotICAgIHRlc3RCcm93
c2VyQ29va2llSmFySW5zdGFuY2UoKS0+c2V0UGFyZW50KGNvb2tpZUphclBhcmVudCk7Ci0KLSAg
ICBRU3BsaXR0ZXIqIHNwbGl0dGVyID0gc3RhdGljX2Nhc3Q8UVNwbGl0dGVyKj4oY2VudHJhbFdp
ZGdldCgpKTsKLQotICAgIGlmICghbV93aW5kb3dPcHRpb25zLnVzZUdyYXBoaWNzVmlldykgewot
ICAgICAgICBXZWJWaWV3VHJhZGl0aW9uYWwqIHZpZXcgPSBuZXcgV2ViVmlld1RyYWRpdGlvbmFs
KHNwbGl0dGVyKTsKLSAgICAgICAgdmlldy0+c2V0UGFnZShwYWdlKCkpOwotCi0gICAgICAgIHZp
ZXctPmluc3RhbGxFdmVudEZpbHRlcih0aGlzKTsKLQotICAgICAgICBtX3ZpZXcgPSB2aWV3Owot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFdlYlZpZXdHcmFwaGljc0Jhc2VkKiB2aWV3ID0gbmV3IFdl
YlZpZXdHcmFwaGljc0Jhc2VkKHNwbGl0dGVyKTsKLSAgICAgICAgbV92aWV3ID0gdmlldzsKLSNp
Zm5kZWYgUVRfTk9fT1BFTkdMCi0gICAgICAgIHRvZ2dsZVFHTFdpZGdldFZpZXdwb3J0KG1fd2lu
ZG93T3B0aW9ucy51c2VRR0xXaWRnZXRWaWV3cG9ydCk7Ci0jZW5kaWYKLSAgICAgICAgdmlldy0+
c2V0UGFnZShwYWdlKCkpOwotCi0gICAgICAgIGNvbm5lY3QodmlldywgU0lHTkFMKGN1cnJlbnRG
UFNVcGRhdGVkKGludCkpLCB0aGlzLCBTTE9UKHVwZGF0ZUZQUyhpbnQpKSk7Ci0KLSAgICAgICAg
dmlldy0+aW5zdGFsbEV2ZW50RmlsdGVyKHRoaXMpOwotICAgICAgICAvLyBUaGUgaW1wbGVtZW50
YXRpb24gb2YgUUFic3RyYWN0U2Nyb2xsQXJlYTo6ZXZlbnRGaWx0ZXIgbWFrZXMgdXMgbmVlZAot
ICAgICAgICAvLyB0byBpbnN0YWxsIHRoZSBldmVudCBmaWx0ZXIgYWxzbyBvbiB0aGUgdmlld3Bv
cnQgb2YgYSBRR3JhcGhpY3NWaWV3LgotICAgICAgICB2aWV3LT52aWV3cG9ydCgpLT5pbnN0YWxs
RXZlbnRGaWx0ZXIodGhpcyk7Ci0gICAgfQotCi0gICAgbV90b3VjaE1vY2tpbmcgPSBmYWxzZTsK
LQotICAgIGNvbm5lY3QocGFnZSgpLCBTSUdOQUwobG9hZFN0YXJ0ZWQoKSksIHRoaXMsIFNMT1Qo
bG9hZFN0YXJ0ZWQoKSkpOwotICAgIGNvbm5lY3QocGFnZSgpLCBTSUdOQUwobG9hZEZpbmlzaGVk
KGJvb2wpKSwgdGhpcywgU0xPVChsb2FkRmluaXNoZWQoKSkpOwotICAgIGNvbm5lY3QocGFnZSgp
LCBTSUdOQUwobGlua0hvdmVyZWQoY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcmLCBjb25z
dCBRU3RyaW5nJikpLAotICAgICAgICAgICAgdGhpcywgU0xPVChzaG93TGlua0hvdmVyKGNvbnN0
IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5nJikpKTsKLSAgICBjb25uZWN0KHRoaXMsIFNJR05BTChl
bnRlcmVkRnVsbFNjcmVlbk1vZGUoYm9vbCkpLCB0aGlzLCBTTE9UKHRvZ2dsZUZ1bGxTY3JlZW5N
b2RlKGJvb2wpKSk7Ci0KLSAgICBpZiAobV93aW5kb3dPcHRpb25zLnByaW50TG9hZGVkVXJscykK
LSAgICAgICAgY29ubmVjdChwYWdlKCktPm1haW5GcmFtZSgpLCBTSUdOQUwodXJsQ2hhbmdlZChR
VXJsKSksIHRoaXMsIFNMT1QocHJpbnRVUkwoUVVybCkpKTsKLQotICAgIGFwcGx5UHJlZnMoKTsK
LQotICAgIHNwbGl0dGVyLT5hZGRXaWRnZXQobV9pbnNwZWN0b3IpOwotICAgIG1faW5zcGVjdG9y
LT5zZXRQYWdlKHBhZ2UoKSk7Ci0gICAgbV9pbnNwZWN0b3ItPmhpZGUoKTsKLQotICAgIGlmICht
X3dpbmRvd09wdGlvbnMucmVtb3RlSW5zcGVjdG9yUG9ydCkKLSAgICAgICAgcGFnZSgpLT5zZXRQ
cm9wZXJ0eSgiX3Ffd2ViSW5zcGVjdG9yU2VydmVyUG9ydCIsIG1fd2luZG93T3B0aW9ucy5yZW1v
dGVJbnNwZWN0b3JQb3J0KTsKLQotICAgIGlmICh1cmwuaXNWYWxpZCgpKQotICAgICAgICBwYWdl
KCktPm1haW5GcmFtZSgpLT5sb2FkKHVybCk7Ci0gICAgZWxzZSAgewotICAgICAgICBzZXRBZGRy
ZXNzVXJsKG1faW5wdXRVcmwpOwotICAgICAgICBtX2lucHV0VXJsID0gUVN0cmluZygpOwotICAg
IH0KLX0KLQotdm9pZCBMYXVuY2hlcldpbmRvdzo6YXBwbHlQcmVmcygpCi17Ci0gICAgUVdlYlNl
dHRpbmdzKiBzZXR0aW5ncyA9IHBhZ2UoKS0+c2V0dGluZ3MoKTsKLSAgICBzZXR0aW5ncy0+c2V0
QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIG1f
d2luZG93T3B0aW9ucy51c2VDb21wb3NpdGluZyk7Ci0gICAgc2V0dGluZ3MtPnNldEF0dHJpYnV0
ZShRV2ViU2V0dGluZ3M6OlRpbGVkQmFja2luZ1N0b3JlRW5hYmxlZCwgbV93aW5kb3dPcHRpb25z
LnVzZVRpbGVkQmFja2luZ1N0b3JlKTsKLSAgICBzZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJT
ZXR0aW5nczo6RnJhbWVGbGF0dGVuaW5nRW5hYmxlZCwgbV93aW5kb3dPcHRpb25zLnVzZUZyYW1l
RmxhdHRlbmluZyk7Ci0gICAgc2V0dGluZ3MtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6Oldl
YkdMRW5hYmxlZCwgbV93aW5kb3dPcHRpb25zLnVzZVdlYkdMKTsKLSAgICBtX3dpbmRvd09wdGlv
bnMudXNlV2ViQXVkaW8gPSBzZXR0aW5ncy0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6Oldl
YkF1ZGlvRW5hYmxlZCk7Ci0KLSAgICBpZiAoIWlzR3JhcGhpY3NCYXNlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBXZWJWaWV3R3JhcGhpY3NCYXNlZCogdmlldyA9IHN0YXRpY19jYXN0PFdl
YlZpZXdHcmFwaGljc0Jhc2VkKj4obV92aWV3KTsKLSAgICB2aWV3LT5zZXRWaWV3cG9ydFVwZGF0
ZU1vZGUobV93aW5kb3dPcHRpb25zLnZpZXdwb3J0VXBkYXRlTW9kZSk7Ci0gICAgdmlldy0+c2V0
RnJhbWVSYXRlTWVhc3VyZW1lbnRFbmFibGVkKG1fd2luZG93T3B0aW9ucy5zaG93RnJhbWVSYXRl
KTsKLSAgICB2aWV3LT5zZXRJdGVtQ2FjaGVNb2RlKG1fd2luZG93T3B0aW9ucy5jYWNoZVdlYlZp
ZXcgPyBRR3JhcGhpY3NJdGVtOjpEZXZpY2VDb29yZGluYXRlQ2FjaGUgOiBRR3JhcGhpY3NJdGVt
OjpOb0NhY2hlKTsKLQotICAgIGlmIChtX3dpbmRvd09wdGlvbnMucmVzaXplc1RvQ29udGVudHMp
Ci0gICAgICAgIHRvZ2dsZVJlc2l6ZXNUb0NvbnRlbnRzKG1fd2luZG93T3B0aW9ucy5yZXNpemVz
VG9Db250ZW50cyk7Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OmNyZWF0ZUNocm9tZSgpCi17
Ci0jaWZuZGVmIFFUX05PX1NIT1JUQ1VUCi0gICAgUU1lbnUqIGZpbGVNZW51ID0gbWVudUJhcigp
LT5hZGRNZW51KCImRmlsZSIpOwotICAgIGZpbGVNZW51LT5hZGRBY3Rpb24oIk5ldyBXaW5kb3ci
LCB0aGlzLCBTTE9UKG5ld1dpbmRvdygpKSwgUUtleVNlcXVlbmNlOjpOZXcpOwotICAgIGZpbGVN
ZW51LT5hZGRBY3Rpb24odHIoIk9wZW4gRmlsZS4uLiIpLCB0aGlzLCBTTE9UKG9wZW5GaWxlKCkp
LCBRS2V5U2VxdWVuY2U6Ok9wZW4pOwotICAgIGZpbGVNZW51LT5hZGRBY3Rpb24odHIoIk9wZW4g
TG9jYXRpb24uLi4iKSwgdGhpcywgU0xPVChvcGVuTG9jYXRpb24oKSksIFFLZXlTZXF1ZW5jZShR
dDo6Q1RSTCB8IFF0OjpLZXlfTCkpOwotICAgIGZpbGVNZW51LT5hZGRBY3Rpb24oIkNsb3NlIFdp
bmRvdyIsIHRoaXMsIFNMT1QoY2xvc2UoKSksIFFLZXlTZXF1ZW5jZTo6Q2xvc2UpOwotICAgIGZp
bGVNZW51LT5hZGRTZXBhcmF0b3IoKTsKLSAgICBmaWxlTWVudS0+YWRkQWN0aW9uKCJUYWtlIFNj
cmVlbiBTaG90Li4uIiwgdGhpcywgU0xPVChzY3JlZW5zaG90KCkpKTsKLSNpZiAhZGVmaW5lZChR
VF9OT19QUklOVEVSKSAmJiBIQVZFKFFUUFJJTlRTVVBQT1JUKQotICAgIGZpbGVNZW51LT5hZGRB
Y3Rpb24odHIoIlByaW50Li4uIiksIHRoaXMsIFNMT1QocHJpbnQoKSksIFFLZXlTZXF1ZW5jZTo6
UHJpbnQpOwotI2VuZGlmCi0gICAgZmlsZU1lbnUtPmFkZFNlcGFyYXRvcigpOwotICAgIGZpbGVN
ZW51LT5hZGRBY3Rpb24oIlF1aXQiLCBRQXBwbGljYXRpb246Omluc3RhbmNlKCksIFNMT1QoY2xv
c2VBbGxXaW5kb3dzKCkpLCBRS2V5U2VxdWVuY2UoUXQ6OkNUUkwgfCBRdDo6S2V5X1EpKTsKLQot
ICAgIFFNZW51KiBlZGl0TWVudSA9IG1lbnVCYXIoKS0+YWRkTWVudSgiJkVkaXQiKTsKLSAgICBl
ZGl0TWVudS0+YWRkQWN0aW9uKHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpVbmRvKSk7Ci0gICAg
ZWRpdE1lbnUtPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV2ViUGFnZTo6UmVkbykpOwotICAg
IGVkaXRNZW51LT5hZGRTZXBhcmF0b3IoKTsKLSAgICBlZGl0TWVudS0+YWRkQWN0aW9uKHBhZ2Uo
KS0+YWN0aW9uKFFXZWJQYWdlOjpDdXQpKTsKLSAgICBlZGl0TWVudS0+YWRkQWN0aW9uKHBhZ2Uo
KS0+YWN0aW9uKFFXZWJQYWdlOjpDb3B5KSk7Ci0gICAgZWRpdE1lbnUtPmFkZEFjdGlvbihwYWdl
KCktPmFjdGlvbihRV2ViUGFnZTo6UGFzdGUpKTsKLSAgICBlZGl0TWVudS0+YWRkU2VwYXJhdG9y
KCk7Ci0jaWZuZGVmIFFUX05PX0xJTkVFRElUCi0gICAgZWRpdE1lbnUtPmFkZEFjdGlvbigiJkZp
bmQiLCB0aGlzLCBTTE9UKHNob3dGaW5kQmFyKCkpLCBRS2V5U2VxdWVuY2UoUXQ6OkNUUkwgfCBR
dDo6S2V5X0YpKTsKLSAgICBlZGl0TWVudS0+YWRkU2VwYXJhdG9yKCk7Ci0jZW5kaWYKLSAgICBR
QWN0aW9uKiBzZXRFZGl0YWJsZSA9IGVkaXRNZW51LT5hZGRBY3Rpb24oIlNldCBFZGl0YWJsZSIs
IHRoaXMsIFNMT1Qoc2V0RWRpdGFibGUoYm9vbCkpKTsKLSAgICBzZXRFZGl0YWJsZS0+c2V0Q2hl
Y2thYmxlKHRydWUpOwotCi0gICAgZWRpdE1lbnUtPmFkZEFjdGlvbigiQ2xlYXIgQ29va2llcyIs
IHRoaXMsIFNMT1QoY2xlYXJDb29raWVzKCkpKTsKLQotICAgIFFNZW51KiB2aWV3TWVudSA9IG1l
bnVCYXIoKS0+YWRkTWVudSgiJlZpZXciKTsKLSAgICB2aWV3TWVudS0+YWRkQWN0aW9uKHBhZ2Uo
KS0+YWN0aW9uKFFXZWJQYWdlOjpTdG9wKSk7Ci0gICAgdmlld01lbnUtPmFkZEFjdGlvbihwYWdl
KCktPmFjdGlvbihRV2ViUGFnZTo6UmVsb2FkKSk7Ci0gICAgdmlld01lbnUtPmFkZFNlcGFyYXRv
cigpOwotICAgIFFBY3Rpb24qIHpvb21JbiA9IHZpZXdNZW51LT5hZGRBY3Rpb24oIlpvb20gJklu
IiwgdGhpcywgU0xPVCh6b29tSW4oKSkpOwotICAgIFFBY3Rpb24qIHpvb21PdXQgPSB2aWV3TWVu
dS0+YWRkQWN0aW9uKCJab29tICZPdXQiLCB0aGlzLCBTTE9UKHpvb21PdXQoKSkpOwotICAgIFFB
Y3Rpb24qIHJlc2V0Wm9vbSA9IHZpZXdNZW51LT5hZGRBY3Rpb24oIlJlc2V0IFpvb20iLCB0aGlz
LCBTTE9UKHJlc2V0Wm9vbSgpKSk7Ci0gICAgUUFjdGlvbiogem9vbVRleHRPbmx5ID0gdmlld01l
bnUtPmFkZEFjdGlvbigiWm9vbSBUZXh0IE9ubHkiLCB0aGlzLCBTTE9UKHRvZ2dsZVpvb21UZXh0
T25seShib29sKSkpOwotICAgIHpvb21UZXh0T25seS0+c2V0Q2hlY2thYmxlKHRydWUpOwotICAg
IHpvb21UZXh0T25seS0+c2V0Q2hlY2tlZChmYWxzZSk7Ci0gICAgdmlld01lbnUtPmFkZFNlcGFy
YXRvcigpOwotICAgIHZpZXdNZW51LT5hZGRBY3Rpb24oIkR1bXAgSFRNTCIsIHRoaXMsIFNMT1Qo
ZHVtcEh0bWwoKSkpOwotICAgIC8vIHZpZXdNZW51LT5hZGRBY3Rpb24oIkR1bXAgcGx1Z2lucyIs
IHRoaXMsIFNMT1QoZHVtcFBsdWdpbnMoKSkpOwotCi0gICAgem9vbUluLT5zZXRTaG9ydGN1dChR
S2V5U2VxdWVuY2UoUXQ6OkNUUkwgfCBRdDo6S2V5X1BsdXMpKTsKLSAgICB6b29tT3V0LT5zZXRT
aG9ydGN1dChRS2V5U2VxdWVuY2UoUXQ6OkNUUkwgfCBRdDo6S2V5X01pbnVzKSk7Ci0gICAgcmVz
ZXRab29tLT5zZXRTaG9ydGN1dChRS2V5U2VxdWVuY2UoUXQ6OkNUUkwgfCBRdDo6S2V5XzApKTsK
LQotICAgIFFNZW51KiBmb3JtYXRNZW51ID0gbmV3IFFNZW51KCJGJm9ybWF0IiwgdGhpcyk7Ci0g
ICAgbV9mb3JtYXRNZW51QWN0aW9uID0gbWVudUJhcigpLT5hZGRNZW51KGZvcm1hdE1lbnUpOwot
ICAgIG1fZm9ybWF0TWVudUFjdGlvbi0+c2V0VmlzaWJsZShmYWxzZSk7Ci0gICAgZm9ybWF0TWVu
dS0+YWRkQWN0aW9uKHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpUb2dnbGVCb2xkKSk7Ci0gICAg
Zm9ybWF0TWVudS0+YWRkQWN0aW9uKHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpUb2dnbGVJdGFs
aWMpKTsKLSAgICBmb3JtYXRNZW51LT5hZGRBY3Rpb24ocGFnZSgpLT5hY3Rpb24oUVdlYlBhZ2U6
OlRvZ2dsZVVuZGVybGluZSkpOwotICAgIFFNZW51KiB3cml0aW5nTWVudSA9IGZvcm1hdE1lbnUt
PmFkZE1lbnUodHIoIldyaXRpbmcgRGlyZWN0aW9uIikpOwotICAgIHdyaXRpbmdNZW51LT5hZGRB
Y3Rpb24ocGFnZSgpLT5hY3Rpb24oUVdlYlBhZ2U6OlNldFRleHREaXJlY3Rpb25EZWZhdWx0KSk7
Ci0gICAgd3JpdGluZ01lbnUtPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV2ViUGFnZTo6U2V0
VGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0KSk7Ci0gICAgd3JpdGluZ01lbnUtPmFkZEFjdGlvbihw
YWdlKCktPmFjdGlvbihRV2ViUGFnZTo6U2V0VGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0KSk7Ci0K
LSAgICBRTWVudSogd2luZG93TWVudSA9IG1lbnVCYXIoKS0+YWRkTWVudSgiJldpbmRvdyIpOwot
ICAgIFFBY3Rpb24qIHRvZ2dsZUZ1bGxTY3JlZW4gPSB3aW5kb3dNZW51LT5hZGRBY3Rpb24oIlRv
Z2dsZSBGdWxsU2NyZWVuIiwgdGhpcywgU0lHTkFMKGVudGVyZWRGdWxsU2NyZWVuTW9kZShib29s
KSkpOwotICAgIHRvZ2dsZUZ1bGxTY3JlZW4tPnNldFNob3J0Y3V0KFF0OjpLZXlfRjExKTsKLSAg
ICB0b2dnbGVGdWxsU2NyZWVuLT5zZXRDaGVja2FibGUodHJ1ZSk7Ci0gICAgdG9nZ2xlRnVsbFNj
cmVlbi0+c2V0Q2hlY2tlZChmYWxzZSk7Ci0gICAgLy8gV2hlbiBleGl0IGZ1bGxzY3JlZW4gbW9k
ZSBieSBjbGlja2luZyBvbiB0aGUgZXhpdCBhcmVhIChib3R0b20gcmlnaHQgY29ybmVyKSB3ZSBt
dXN0Ci0gICAgLy8gdW5jaGVjayB0aGUgVG9nZ2xlIEZ1bGxTY3JlZW4gYWN0aW9uLgotICAgIHRv
Z2dsZUZ1bGxTY3JlZW4tPmNvbm5lY3QodGhpcywgU0lHTkFMKGVudGVyZWRGdWxsU2NyZWVuTW9k
ZShib29sKSksIFNMT1Qoc2V0Q2hlY2tlZChib29sKSkpOwotCi0gICAgUVdlYlNldHRpbmdzKiBz
ZXR0aW5ncyA9IHBhZ2UoKS0+c2V0dGluZ3MoKTsKLQotICAgIFFNZW51KiB0b29sc01lbnUgPSBt
ZW51QmFyKCktPmFkZE1lbnUoIiZEZXZlbG9wIik7Ci0gICAgUU1lbnUqIGdyYXBoaWNzVmlld01l
bnUgPSB0b29sc01lbnUtPmFkZE1lbnUoIlFHcmFwaGljc1ZpZXciKTsKLSAgICBRQWN0aW9uKiB0
b2dnbGVHcmFwaGljc1ZpZXcgPSBncmFwaGljc1ZpZXdNZW51LT5hZGRBY3Rpb24oIlRvZ2dsZSB1
c2Ugb2YgUUdyYXBoaWNzVmlldyIsIHRoaXMsIFNMT1QodG9nZ2xlV2ViVmlldyhib29sKSkpOwot
ICAgIHRvZ2dsZUdyYXBoaWNzVmlldy0+c2V0Q2hlY2thYmxlKHRydWUpOwotICAgIHRvZ2dsZUdy
YXBoaWNzVmlldy0+c2V0Q2hlY2tlZChpc0dyYXBoaWNzQmFzZWQoKSk7Ci0KLSAgICBRQWN0aW9u
KiB0b2dnbGVXZWJHTCA9IHRvb2xzTWVudS0+YWRkQWN0aW9uKCJUb2dnbGUgV2ViR0wiLCB0aGlz
LCBTTE9UKHRvZ2dsZVdlYkdMKGJvb2wpKSk7Ci0gICAgdG9nZ2xlV2ViR0wtPnNldENoZWNrYWJs
ZSh0cnVlKTsKLSAgICB0b2dnbGVXZWJHTC0+c2V0Q2hlY2tlZChzZXR0aW5ncy0+dGVzdEF0dHJp
YnV0ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCkpOwotI2lmICFFTkFCTEUoV0VCR0wpCi0g
ICAgdG9nZ2xlV2ViR0wtPnNldEVuYWJsZWQoZmFsc2UpOwotI2VuZGlmCi0KLSAgICBRQWN0aW9u
KiB0b2dnbGVXZWJBdWRpbyA9IHRvb2xzTWVudS0+YWRkQWN0aW9uKCJUb2dnbGUgV2ViQXVkaW8i
LCB0aGlzLCBTTE9UKHRvZ2dsZVdlYkF1ZGlvKGJvb2wpKSk7Ci0gICAgdG9nZ2xlV2ViQXVkaW8t
PnNldENoZWNrYWJsZSh0cnVlKTsKLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotICAgIHRvZ2dsZVdl
YkF1ZGlvLT5zZXRDaGVja2VkKG1fd2luZG93T3B0aW9ucy51c2VXZWJBdWRpbyk7Ci0jZWxzZQot
ICAgIHRvZ2dsZVdlYkF1ZGlvLT5zZXRFbmFibGVkKGZhbHNlKTsKLSNlbmRpZgotCi0gICAgUUFj
dGlvbiogc3BhdGlhbE5hdmlnYXRpb25BY3Rpb24gPSB0b29sc01lbnUtPmFkZEFjdGlvbigiVG9n
Z2xlIFNwYXRpYWwgTmF2aWdhdGlvbiIsIHRoaXMsIFNMT1QodG9nZ2xlU3BhdGlhbE5hdmlnYXRp
b24oYm9vbCkpKTsKLSAgICBzcGF0aWFsTmF2aWdhdGlvbkFjdGlvbi0+c2V0Q2hlY2thYmxlKHRy
dWUpOwotICAgIHNwYXRpYWxOYXZpZ2F0aW9uQWN0aW9uLT5zZXRTaG9ydGN1dChRS2V5U2VxdWVu
Y2UoUXQ6OkNUUkwgfCBRdDo6U0hJRlQgfCBRdDo6S2V5X1MpKTsKLQotICAgIFFBY3Rpb24qIHRv
Z2dsZUZyYW1lRmxhdHRlbmluZyA9IHRvb2xzTWVudS0+YWRkQWN0aW9uKCJUb2dnbGUgRnJhbWUg
RmxhdHRlbmluZyIsIHRoaXMsIFNMT1QodG9nZ2xlRnJhbWVGbGF0dGVuaW5nKGJvb2wpKSk7Ci0g
ICAgdG9nZ2xlRnJhbWVGbGF0dGVuaW5nLT5zZXRDaGVja2FibGUodHJ1ZSk7Ci0gICAgdG9nZ2xl
RnJhbWVGbGF0dGVuaW5nLT5zZXRDaGVja2VkKHNldHRpbmdzLT50ZXN0QXR0cmlidXRlKFFXZWJT
ZXR0aW5nczo6RnJhbWVGbGF0dGVuaW5nRW5hYmxlZCkpOwotCi0gICAgUUFjdGlvbiogdG91Y2hN
b2NrQWN0aW9uID0gdG9vbHNNZW51LT5hZGRBY3Rpb24oIlRvZ2dsZSB0b3VjaCBtb2NraW5nIiwg
dGhpcywgU0xPVChzZXRUb3VjaE1vY2tpbmcoYm9vbCkpKTsKLSAgICB0b3VjaE1vY2tBY3Rpb24t
PnNldENoZWNrYWJsZSh0cnVlKTsKLSAgICB0b3VjaE1vY2tBY3Rpb24tPnNldFNob3J0Y3V0KFFL
ZXlTZXF1ZW5jZShRdDo6Q1RSTCB8IFF0OjpBTFQgfCBRdDo6S2V5X1QpKTsKLQotICAgIHRvb2xz
TWVudS0+YWRkU2VwYXJhdG9yKCk7Ci0KLSAgICBRQWN0aW9uKiB0b2dnbGVMb2NhbFN0b3JhZ2Ug
PSB0b29sc01lbnUtPmFkZEFjdGlvbigiRW5hYmxlIExvY2FsIFN0b3JhZ2UiLCB0aGlzLCBTTE9U
KHRvZ2dsZUxvY2FsU3RvcmFnZShib29sKSkpOwotICAgIHRvZ2dsZUxvY2FsU3RvcmFnZS0+c2V0
Q2hlY2thYmxlKHRydWUpOwotICAgIHRvZ2dsZUxvY2FsU3RvcmFnZS0+c2V0Q2hlY2tlZChtX3dp
bmRvd09wdGlvbnMudXNlTG9jYWxTdG9yYWdlKTsKLQotICAgIFFBY3Rpb24qIHRvZ2dsZU9mZmxp
bmVTdG9yYWdlRGF0YWJhc2UgPSB0b29sc01lbnUtPmFkZEFjdGlvbigiRW5hYmxlIE9mZmxpbmUg
U3RvcmFnZSBEYXRhYmFzZSIsIHRoaXMsIFNMT1QodG9nZ2xlT2ZmbGluZVN0b3JhZ2VEYXRhYmFz
ZShib29sKSkpOwotICAgIHRvZ2dsZU9mZmxpbmVTdG9yYWdlRGF0YWJhc2UtPnNldENoZWNrYWJs
ZSh0cnVlKTsKLSAgICB0b2dnbGVPZmZsaW5lU3RvcmFnZURhdGFiYXNlLT5zZXRDaGVja2VkKG1f
d2luZG93T3B0aW9ucy51c2VPZmZsaW5lU3RvcmFnZURhdGFiYXNlKTsKLQotICAgIFFBY3Rpb24q
IHRvZ2dsZU9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlID0gdG9vbHNNZW51LT5hZGRBY3Rpb24o
IkVuYWJsZSBPZmZsaW5lIFdlYiBBcHBsaWNhdGlvbiBDYWNoZSIsIHRoaXMsIFNMT1QodG9nZ2xl
T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUoYm9vbCkpKTsKLSAgICB0b2dnbGVPZmZsaW5lV2Vi
QXBwbGljYXRpb25DYWNoZS0+c2V0Q2hlY2thYmxlKHRydWUpOwotICAgIHRvZ2dsZU9mZmxpbmVX
ZWJBcHBsaWNhdGlvbkNhY2hlLT5zZXRDaGVja2VkKG1fd2luZG93T3B0aW9ucy51c2VPZmZsaW5l
V2ViQXBwbGljYXRpb25DYWNoZSk7Ci0KLSAgICBRQWN0aW9uKiBvZmZsaW5lU3RvcmFnZURlZmF1
bHRRdW90YUFjdGlvbiA9IHRvb2xzTWVudS0+YWRkQWN0aW9uKCJTZXQgT2ZmbGluZSBTdG9yYWdl
IERlZmF1bHQgUXVvdGEgU2l6ZSIsIHRoaXMsIFNMT1Qoc2V0T2ZmbGluZVN0b3JhZ2VEZWZhdWx0
UXVvdGEoKSkpOwotICAgIG9mZmxpbmVTdG9yYWdlRGVmYXVsdFF1b3RhQWN0aW9uLT5zZXRDaGVj
a2FibGUodHJ1ZSk7Ci0gICAgb2ZmbGluZVN0b3JhZ2VEZWZhdWx0UXVvdGFBY3Rpb24tPnNldENo
ZWNrZWQobV93aW5kb3dPcHRpb25zLm9mZmxpbmVTdG9yYWdlRGVmYXVsdFF1b3RhU2l6ZSk7Ci0K
LSAgICB0b29sc01lbnUtPmFkZFNlcGFyYXRvcigpOwotCi0gICAgUUFjdGlvbiogdXNlckFnZW50
QWN0aW9uID0gdG9vbHNNZW51LT5hZGRBY3Rpb24oIkNoYW5nZSBVc2VyIEFnZW50IiwgdGhpcywg
U0xPVChzaG93VXNlckFnZW50RGlhbG9nKCkpKTsKLSAgICB1c2VyQWdlbnRBY3Rpb24tPnNldFNo
b3J0Y3V0KFFLZXlTZXF1ZW5jZShRdDo6Q1RSTCB8IFF0OjpTSElGVCB8IFF0OjpLZXlfVSkpOwot
Ci0gICAgdG9vbHNNZW51LT5hZGRBY3Rpb24oIlNlbGVjdCBFbGVtZW50cy4uLiIsIHRoaXMsIFNM
T1Qoc2VsZWN0RWxlbWVudHMoKSkpOwotCi0gICAgdG9vbHNNZW51LT5hZGRBY3Rpb24oIkNsZWFy
IHNlbGVjdGlvbiIsIHRoaXMsIFNMT1QoY2xlYXJTZWxlY3Rpb24oKSkpOwotCi0gICAgUUFjdGlv
biogc2hvd0luc3BlY3RvckFjdGlvbiA9IHRvb2xzTWVudS0+YWRkQWN0aW9uKCJTaG93IFdlYiBJ
bnNwZWN0b3IiLCBtX2luc3BlY3RvciwgU0xPVChzZXRWaXNpYmxlKGJvb2wpKSwgUUtleVNlcXVl
bmNlKFF0OjpDVFJMIHwgUXQ6OkFMVCB8IFF0OjpLZXlfSSkpOwotICAgIHNob3dJbnNwZWN0b3JB
Y3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKLSAgICBzaG93SW5zcGVjdG9yQWN0aW9uLT5jb25u
ZWN0KG1faW5zcGVjdG9yLCBTSUdOQUwodmlzaWJsZUNoYW5nZWQoYm9vbCkpLCBTTE9UKHNldENo
ZWNrZWQoYm9vbCkpKTsKLSAgICB0b29sc01lbnUtPmFkZFNlcGFyYXRvcigpOwotICAgIHRvb2xz
TWVudS0+YWRkQWN0aW9uKCJMb2FkIFVSTHMgZnJvbSBmaWxlIiwgdGhpcywgU0xPVChsb2FkVVJM
TGlzdEZyb21GaWxlKCkpKTsKLQotICAgIC8vIEdyYXBoaWNzVmlldyBzdWIgbWVudS4KLSAgICBR
QWN0aW9uKiB0b2dnbGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nID0gZ3JhcGhpY3NWaWV3TWVudS0+
YWRkQWN0aW9uKCJUb2dnbGUgQWNjZWxlcmF0ZWQgQ29tcG9zaXRpbmciLCB0aGlzLCBTTE9UKHRv
Z2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoYm9vbCkpKTsKLSAgICB0b2dnbGVBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nLT5zZXRDaGVja2FibGUodHJ1ZSk7Ci0gICAgdG9nZ2xlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZy0+c2V0Q2hlY2tlZChzZXR0aW5ncy0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGlu
Z3M6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKSk7Ci0gICAgdG9nZ2xlQWNjZWxlcmF0
ZWRDb21wb3NpdGluZy0+c2V0RW5hYmxlZChpc0dyYXBoaWNzQmFzZWQoKSk7Ci0gICAgdG9nZ2xl
QWNjZWxlcmF0ZWRDb21wb3NpdGluZy0+Y29ubmVjdCh0b2dnbGVHcmFwaGljc1ZpZXcsIFNJR05B
TCh0b2dnbGVkKGJvb2wpKSwgU0xPVChzZXRFbmFibGVkKGJvb2wpKSk7Ci0KLSAgICBRQWN0aW9u
KiB0b2dnbGVSZXNpemVzVG9Db250ZW50cyA9IGdyYXBoaWNzVmlld01lbnUtPmFkZEFjdGlvbigi
VG9nZ2xlIFJlc2l6ZXMgVG8gQ29udGVudHMgTW9kZSIsIHRoaXMsIFNMT1QodG9nZ2xlUmVzaXpl
c1RvQ29udGVudHMoYm9vbCkpKTsKLSAgICB0b2dnbGVSZXNpemVzVG9Db250ZW50cy0+c2V0Q2hl
Y2thYmxlKHRydWUpOwotICAgIHRvZ2dsZVJlc2l6ZXNUb0NvbnRlbnRzLT5zZXRDaGVja2VkKG1f
d2luZG93T3B0aW9ucy5yZXNpemVzVG9Db250ZW50cyk7Ci0gICAgdG9nZ2xlUmVzaXplc1RvQ29u
dGVudHMtPnNldEVuYWJsZWQoaXNHcmFwaGljc0Jhc2VkKCkpOwotICAgIHRvZ2dsZVJlc2l6ZXNU
b0NvbnRlbnRzLT5jb25uZWN0KHRvZ2dsZUdyYXBoaWNzVmlldywgU0lHTkFMKHRvZ2dsZWQoYm9v
bCkpLCBTTE9UKHNldEVuYWJsZWQoYm9vbCkpKTsKLQotICAgIFFBY3Rpb24qIHRvZ2dsZVRpbGVk
QmFja2luZ1N0b3JlID0gZ3JhcGhpY3NWaWV3TWVudS0+YWRkQWN0aW9uKCJUb2dnbGUgVGlsZWQg
QmFja2luZyBTdG9yZSIsIHRoaXMsIFNMT1QodG9nZ2xlVGlsZWRCYWNraW5nU3RvcmUoYm9vbCkp
KTsKLSAgICB0b2dnbGVUaWxlZEJhY2tpbmdTdG9yZS0+c2V0Q2hlY2thYmxlKHRydWUpOwotICAg
IHRvZ2dsZVRpbGVkQmFja2luZ1N0b3JlLT5zZXRDaGVja2VkKG1fd2luZG93T3B0aW9ucy51c2VU
aWxlZEJhY2tpbmdTdG9yZSk7Ci0gICAgdG9nZ2xlVGlsZWRCYWNraW5nU3RvcmUtPnNldEVuYWJs
ZWQoaXNHcmFwaGljc0Jhc2VkKCkpOwotICAgIHRvZ2dsZVRpbGVkQmFja2luZ1N0b3JlLT5jb25u
ZWN0KHRvZ2dsZUdyYXBoaWNzVmlldywgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBTTE9UKHNldEVu
YWJsZWQoYm9vbCkpKTsKLQotI2lmbmRlZiBRVF9OT19PUEVOR0wKLSAgICBRQWN0aW9uKiB0b2dn
bGVRR0xXaWRnZXRWaWV3cG9ydCA9IGdyYXBoaWNzVmlld01lbnUtPmFkZEFjdGlvbigiVG9nZ2xl
IHVzZSBvZiBRR0xXaWRnZXQgVmlld3BvcnQiLCB0aGlzLCBTTE9UKHRvZ2dsZVFHTFdpZGdldFZp
ZXdwb3J0KGJvb2wpKSk7Ci0gICAgdG9nZ2xlUUdMV2lkZ2V0Vmlld3BvcnQtPnNldENoZWNrYWJs
ZSh0cnVlKTsKLSAgICB0b2dnbGVRR0xXaWRnZXRWaWV3cG9ydC0+c2V0Q2hlY2tlZChtX3dpbmRv
d09wdGlvbnMudXNlUUdMV2lkZ2V0Vmlld3BvcnQpOwotICAgIHRvZ2dsZVFHTFdpZGdldFZpZXdw
b3J0LT5zZXRFbmFibGVkKGlzR3JhcGhpY3NCYXNlZCgpKTsKLSAgICB0b2dnbGVRR0xXaWRnZXRW
aWV3cG9ydC0+Y29ubmVjdCh0b2dnbGVHcmFwaGljc1ZpZXcsIFNJR05BTCh0b2dnbGVkKGJvb2wp
KSwgU0xPVChzZXRFbmFibGVkKGJvb2wpKSk7Ci0jZW5kaWYKLQotICAgIFFNZW51KiB2aWV3cG9y
dFVwZGF0ZU1lbnUgPSBncmFwaGljc1ZpZXdNZW51LT5hZGRNZW51KCJDaGFuZ2UgVmlld3BvcnQg
VXBkYXRlIE1vZGUiKTsKLSAgICB2aWV3cG9ydFVwZGF0ZU1lbnUtPnNldEVuYWJsZWQoaXNHcmFw
aGljc0Jhc2VkKCkpOwotICAgIHZpZXdwb3J0VXBkYXRlTWVudS0+Y29ubmVjdCh0b2dnbGVHcmFw
aGljc1ZpZXcsIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgU0xPVChzZXRFbmFibGVkKGJvb2wpKSk7
Ci0KLSAgICBRQWN0aW9uKiBmdWxsVXBkYXRlID0gdmlld3BvcnRVcGRhdGVNZW51LT5hZGRBY3Rp
b24oIkZ1bGxWaWV3cG9ydFVwZGF0ZSIpOwotICAgIGZ1bGxVcGRhdGUtPnNldENoZWNrYWJsZSh0
cnVlKTsKLSAgICBmdWxsVXBkYXRlLT5zZXRDaGVja2VkKChtX3dpbmRvd09wdGlvbnMudmlld3Bv
cnRVcGRhdGVNb2RlID09IFFHcmFwaGljc1ZpZXc6OkZ1bGxWaWV3cG9ydFVwZGF0ZSkgPyB0cnVl
IDogZmFsc2UpOwotCi0gICAgUUFjdGlvbiogbWluaW1hbFVwZGF0ZSA9IHZpZXdwb3J0VXBkYXRl
TWVudS0+YWRkQWN0aW9uKCJNaW5pbWFsVmlld3BvcnRVcGRhdGUiKTsKLSAgICBtaW5pbWFsVXBk
YXRlLT5zZXRDaGVja2FibGUodHJ1ZSk7Ci0gICAgbWluaW1hbFVwZGF0ZS0+c2V0Q2hlY2tlZCgo
bV93aW5kb3dPcHRpb25zLnZpZXdwb3J0VXBkYXRlTW9kZSA9PSBRR3JhcGhpY3NWaWV3OjpNaW5p
bWFsVmlld3BvcnRVcGRhdGUpID8gdHJ1ZSA6IGZhbHNlKTsKLQotICAgIFFBY3Rpb24qIHNtYXJ0
VXBkYXRlID0gdmlld3BvcnRVcGRhdGVNZW51LT5hZGRBY3Rpb24oIlNtYXJ0Vmlld3BvcnRVcGRh
dGUiKTsKLSAgICBzbWFydFVwZGF0ZS0+c2V0Q2hlY2thYmxlKHRydWUpOwotICAgIHNtYXJ0VXBk
YXRlLT5zZXRDaGVja2VkKChtX3dpbmRvd09wdGlvbnMudmlld3BvcnRVcGRhdGVNb2RlID09IFFH
cmFwaGljc1ZpZXc6OlNtYXJ0Vmlld3BvcnRVcGRhdGUpID8gdHJ1ZSA6IGZhbHNlKTsKLQotICAg
IFFBY3Rpb24qIGJvdW5kaW5nUmVjdFVwZGF0ZSA9IHZpZXdwb3J0VXBkYXRlTWVudS0+YWRkQWN0
aW9uKCJCb3VuZGluZ1JlY3RWaWV3cG9ydFVwZGF0ZSIpOwotICAgIGJvdW5kaW5nUmVjdFVwZGF0
ZS0+c2V0Q2hlY2thYmxlKHRydWUpOwotICAgIGJvdW5kaW5nUmVjdFVwZGF0ZS0+c2V0Q2hlY2tl
ZCgobV93aW5kb3dPcHRpb25zLnZpZXdwb3J0VXBkYXRlTW9kZSA9PSBRR3JhcGhpY3NWaWV3OjpC
b3VuZGluZ1JlY3RWaWV3cG9ydFVwZGF0ZSkgPyB0cnVlIDogZmFsc2UpOwotCi0gICAgUUFjdGlv
biogbm9VcGRhdGUgPSB2aWV3cG9ydFVwZGF0ZU1lbnUtPmFkZEFjdGlvbigiTm9WaWV3cG9ydFVw
ZGF0ZSIpOwotICAgIG5vVXBkYXRlLT5zZXRDaGVja2FibGUodHJ1ZSk7Ci0gICAgbm9VcGRhdGUt
PnNldENoZWNrZWQoKG1fd2luZG93T3B0aW9ucy52aWV3cG9ydFVwZGF0ZU1vZGUgPT0gUUdyYXBo
aWNzVmlldzo6Tm9WaWV3cG9ydFVwZGF0ZSkgPyB0cnVlIDogZmFsc2UpOwotCi0gICAgUVNpZ25h
bE1hcHBlciogc2lnbmFsTWFwcGVyID0gbmV3IFFTaWduYWxNYXBwZXIodmlld3BvcnRVcGRhdGVN
ZW51KTsKLSAgICBzaWduYWxNYXBwZXItPnNldE1hcHBpbmcoZnVsbFVwZGF0ZSwgUUdyYXBoaWNz
Vmlldzo6RnVsbFZpZXdwb3J0VXBkYXRlKTsKLSAgICBzaWduYWxNYXBwZXItPnNldE1hcHBpbmco
bWluaW1hbFVwZGF0ZSwgUUdyYXBoaWNzVmlldzo6TWluaW1hbFZpZXdwb3J0VXBkYXRlKTsKLSAg
ICBzaWduYWxNYXBwZXItPnNldE1hcHBpbmcoc21hcnRVcGRhdGUsIFFHcmFwaGljc1ZpZXc6OlNt
YXJ0Vmlld3BvcnRVcGRhdGUpOwotICAgIHNpZ25hbE1hcHBlci0+c2V0TWFwcGluZyhib3VuZGlu
Z1JlY3RVcGRhdGUsIFFHcmFwaGljc1ZpZXc6OkJvdW5kaW5nUmVjdFZpZXdwb3J0VXBkYXRlKTsK
LSAgICBzaWduYWxNYXBwZXItPnNldE1hcHBpbmcobm9VcGRhdGUsIFFHcmFwaGljc1ZpZXc6Ok5v
Vmlld3BvcnRVcGRhdGUpOwotCi0gICAgY29ubmVjdChmdWxsVXBkYXRlLCBTSUdOQUwodHJpZ2dl
cmVkKCkpLCBzaWduYWxNYXBwZXIsIFNMT1QobWFwKCkpKTsKLSAgICBjb25uZWN0KG1pbmltYWxV
cGRhdGUsIFNJR05BTCh0cmlnZ2VyZWQoKSksIHNpZ25hbE1hcHBlciwgU0xPVChtYXAoKSkpOwot
ICAgIGNvbm5lY3Qoc21hcnRVcGRhdGUsIFNJR05BTCh0cmlnZ2VyZWQoKSksIHNpZ25hbE1hcHBl
ciwgU0xPVChtYXAoKSkpOwotICAgIGNvbm5lY3QoYm91bmRpbmdSZWN0VXBkYXRlLCBTSUdOQUwo
dHJpZ2dlcmVkKCkpLCBzaWduYWxNYXBwZXIsIFNMT1QobWFwKCkpKTsKLSAgICBjb25uZWN0KG5v
VXBkYXRlLCBTSUdOQUwodHJpZ2dlcmVkKCkpLCBzaWduYWxNYXBwZXIsIFNMT1QobWFwKCkpKTsK
LQotICAgIGNvbm5lY3Qoc2lnbmFsTWFwcGVyLCBTSUdOQUwobWFwcGVkKGludCkpLCB0aGlzLCBT
TE9UKGNoYW5nZVZpZXdwb3J0VXBkYXRlTW9kZShpbnQpKSk7Ci0KLSAgICBRQWN0aW9uR3JvdXAq
IHZpZXdwb3J0VXBkYXRlTW9kZUFjdGlvbnMgPSBuZXcgUUFjdGlvbkdyb3VwKHZpZXdwb3J0VXBk
YXRlTWVudSk7Ci0gICAgdmlld3BvcnRVcGRhdGVNb2RlQWN0aW9ucy0+YWRkQWN0aW9uKGZ1bGxV
cGRhdGUpOwotICAgIHZpZXdwb3J0VXBkYXRlTW9kZUFjdGlvbnMtPmFkZEFjdGlvbihtaW5pbWFs
VXBkYXRlKTsKLSAgICB2aWV3cG9ydFVwZGF0ZU1vZGVBY3Rpb25zLT5hZGRBY3Rpb24oc21hcnRV
cGRhdGUpOwotICAgIHZpZXdwb3J0VXBkYXRlTW9kZUFjdGlvbnMtPmFkZEFjdGlvbihib3VuZGlu
Z1JlY3RVcGRhdGUpOwotICAgIHZpZXdwb3J0VXBkYXRlTW9kZUFjdGlvbnMtPmFkZEFjdGlvbihu
b1VwZGF0ZSk7Ci0KLSAgICBncmFwaGljc1ZpZXdNZW51LT5hZGRTZXBhcmF0b3IoKTsKLQotICAg
IFFBY3Rpb24qIGZsaXBBbmltYXRlZCA9IGdyYXBoaWNzVmlld01lbnUtPmFkZEFjdGlvbigiQW5p
bWF0ZWQgRmxpcCIpOwotICAgIGZsaXBBbmltYXRlZC0+Y29ubmVjdCh0b2dnbGVHcmFwaGljc1Zp
ZXcsIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgU0xPVChzZXRFbmFibGVkKGJvb2wpKSk7Ci0gICAg
ZmxpcEFuaW1hdGVkLT5zZXRFbmFibGVkKGlzR3JhcGhpY3NCYXNlZCgpKTsKLSAgICBjb25uZWN0
KGZsaXBBbmltYXRlZCwgU0lHTkFMKHRyaWdnZXJlZCgpKSwgU0xPVChhbmltYXRlZEZsaXAoKSkp
OwotCi0gICAgUUFjdGlvbiogZmxpcFlBbmltYXRlZCA9IGdyYXBoaWNzVmlld01lbnUtPmFkZEFj
dGlvbigiQW5pbWF0ZWQgWS1GbGlwIik7Ci0gICAgZmxpcFlBbmltYXRlZC0+Y29ubmVjdCh0b2dn
bGVHcmFwaGljc1ZpZXcsIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgU0xPVChzZXRFbmFibGVkKGJv
b2wpKSk7Ci0gICAgZmxpcFlBbmltYXRlZC0+c2V0RW5hYmxlZChpc0dyYXBoaWNzQmFzZWQoKSk7
Ci0gICAgY29ubmVjdChmbGlwWUFuaW1hdGVkLCBTSUdOQUwodHJpZ2dlcmVkKCkpLCBTTE9UKGFu
aW1hdGVkWUZsaXAoKSkpOwotCi0gICAgUUFjdGlvbiogY2xvbmVXaW5kb3cgPSBncmFwaGljc1Zp
ZXdNZW51LT5hZGRBY3Rpb24oIkNsb25lIFdpbmRvdyIsIHRoaXMsIFNMT1QoY2xvbmVXaW5kb3co
KSkpOwotICAgIGNsb25lV2luZG93LT5jb25uZWN0KHRvZ2dsZUdyYXBoaWNzVmlldywgU0lHTkFM
KHRvZ2dsZWQoYm9vbCkpLCBTTE9UKHNldEVuYWJsZWQoYm9vbCkpKTsKLSAgICBjbG9uZVdpbmRv
dy0+c2V0RW5hYmxlZChpc0dyYXBoaWNzQmFzZWQoKSk7Ci0KLSAgICBncmFwaGljc1ZpZXdNZW51
LT5hZGRTZXBhcmF0b3IoKTsKLQotICAgIFFBY3Rpb24qIHNob3dGUFMgPSBncmFwaGljc1ZpZXdN
ZW51LT5hZGRBY3Rpb24oIlNob3cgRlBTIiwgdGhpcywgU0xPVChzaG93RlBTKGJvb2wpKSk7Ci0g
ICAgc2hvd0ZQUy0+c2V0Q2hlY2thYmxlKHRydWUpOwotICAgIHNob3dGUFMtPnNldEVuYWJsZWQo
aXNHcmFwaGljc0Jhc2VkKCkpOwotICAgIHNob3dGUFMtPmNvbm5lY3QodG9nZ2xlR3JhcGhpY3NW
aWV3LCBTSUdOQUwodG9nZ2xlZChib29sKSksIFNMT1Qoc2V0RW5hYmxlZChib29sKSkpOwotICAg
IHNob3dGUFMtPnNldENoZWNrZWQobV93aW5kb3dPcHRpb25zLnNob3dGcmFtZVJhdGUpOwotCi0g
ICAgUU1lbnUqIHNldHRpbmdzTWVudSA9IG1lbnVCYXIoKS0+YWRkTWVudSgiJlNldHRpbmdzIik7
Ci0KLSNpZiAhZGVmaW5lZChRVF9OT19ORVRXT1JLRElTS0NBQ0hFKSAmJiAhZGVmaW5lZChRVF9O
T19ERVNLVE9QU0VSVklDRVMpCi0gICAgUUFjdGlvbiogdG9nZ2xlRGlza0NhY2hlID0gc2V0dGlu
Z3NNZW51LT5hZGRBY3Rpb24oIlVzZSBEaXNrIENhY2hlIiwgdGhpcywgU0xPVChzZXREaXNrQ2Fj
aGUoYm9vbCkpKTsKLSAgICB0b2dnbGVEaXNrQ2FjaGUtPnNldENoZWNrYWJsZSh0cnVlKTsKLSAg
ICB0b2dnbGVEaXNrQ2FjaGUtPnNldENoZWNrZWQobV93aW5kb3dPcHRpb25zLnVzZURpc2tDYWNo
ZSk7Ci0jZW5kaWYKLQotICAgIFFBY3Rpb24qIHRvZ2dsZUF1dG9Mb2FkSW1hZ2VzID0gc2V0dGlu
Z3NNZW51LT5hZGRBY3Rpb24oIkRpc2FibGUgQXV0byBMb2FkIEltYWdlcyIsIHRoaXMsIFNMT1Qo
dG9nZ2xlQXV0b0xvYWRJbWFnZXMoYm9vbCkpKTsKLSAgICB0b2dnbGVBdXRvTG9hZEltYWdlcy0+
c2V0Q2hlY2thYmxlKHRydWUpOwotICAgIHRvZ2dsZUF1dG9Mb2FkSW1hZ2VzLT5zZXRDaGVja2Vk
KGZhbHNlKTsKLQotICAgIFFBY3Rpb24qIHRvZ2dsZVBsdWdpbnMgPSBzZXR0aW5nc01lbnUtPmFk
ZEFjdGlvbigiRGlzYWJsZSBQbHVnaW5zIiwgdGhpcywgU0xPVCh0b2dnbGVQbHVnaW5zKGJvb2wp
KSk7Ci0gICAgdG9nZ2xlUGx1Z2lucy0+c2V0Q2hlY2thYmxlKHRydWUpOwotICAgIHRvZ2dsZVBs
dWdpbnMtPnNldENoZWNrZWQoZmFsc2UpOwotCi0gICAgUUFjdGlvbiogdG9nZ2xlU2Nyb2xsQW5p
bWF0b3IgPSBzZXR0aW5nc01lbnUtPmFkZEFjdGlvbigiRW5hYmxlIFNjcm9sbCBBbmltYXRvciIs
IHRoaXMsIFNMT1QodG9nZ2xlU2Nyb2xsQW5pbWF0b3IoYm9vbCkpKTsKLSNpZiBFTkFCTEUoU01P
T1RIX1NDUk9MTElORykKLSAgICB0b2dnbGVTY3JvbGxBbmltYXRvci0+c2V0Q2hlY2thYmxlKHRy
dWUpOwotI2Vsc2UKLSAgICB0b2dnbGVTY3JvbGxBbmltYXRvci0+c2V0Q2hlY2thYmxlKGZhbHNl
KTsKLSNlbmRpZgotICAgIHRvZ2dsZVNjcm9sbEFuaW1hdG9yLT5zZXRDaGVja2VkKGZhbHNlKTsK
LQotICAgIFFBY3Rpb24qIHRvZ2dsZUphdmFTY3JpcHRFbmFibGVkID0gc2V0dGluZ3NNZW51LT5h
ZGRBY3Rpb24oIkVuYWJsZSBKYXZhc2NyaXB0IiwgdGhpcywgU0xPVCh0b2dnbGVKYXZhU2NyaXB0
RW5hYmxlZChib29sKSkpOwotICAgIHRvZ2dsZUphdmFTY3JpcHRFbmFibGVkLT5zZXRDaGVja2Fi
bGUodHJ1ZSk7Ci0gICAgdG9nZ2xlSmF2YVNjcmlwdEVuYWJsZWQtPnNldENoZWNrZWQoc2V0dGlu
Z3MtPnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0RW5hYmxlZCkpOwotCi0g
ICAgUUFjdGlvbiogdG9nZ2xlSW50ZXJydXB0aW5nSmF2YVNjcmlwdGVFbmFibGVkID0gc2V0dGlu
Z3NNZW51LT5hZGRBY3Rpb24oIkVuYWJsZSBpbnRlcnJ1cHRpbmcganMgc2NyaXB0cyIsIHRoaXMs
IFNMT1QodG9nZ2xlSW50ZXJydXB0aW5nSmF2YVNjcmlwdEVuYWJsZWQoYm9vbCkpKTsKLSAgICB0
b2dnbGVJbnRlcnJ1cHRpbmdKYXZhU2NyaXB0ZUVuYWJsZWQtPnNldENoZWNrYWJsZSh0cnVlKTsK
LSAgICB0b2dnbGVJbnRlcnJ1cHRpbmdKYXZhU2NyaXB0ZUVuYWJsZWQtPnNldENoZWNrZWQoZmFs
c2UpOwotCi0gICAgUUFjdGlvbiogdG9nZ2xlSmF2YXNjcmlwdENhbk9wZW5XaW5kb3dzID0gc2V0
dGluZ3NNZW51LT5hZGRBY3Rpb24oIkVuYWJsZSBqcyBwb3B1cCB3aW5kb3dzIiwgdGhpcywgU0xP
VCh0b2dnbGVKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MoYm9vbCkpKTsKLSAgICB0b2dnbGVKYXZh
c2NyaXB0Q2FuT3BlbldpbmRvd3MtPnNldENoZWNrYWJsZSh0cnVlKTsKLSAgICB0b2dnbGVKYXZh
c2NyaXB0Q2FuT3BlbldpbmRvd3MtPnNldENoZWNrZWQoZmFsc2UpOwotCi0gICAgUUFjdGlvbiog
dG9nZ2xlVXNlRGlza0Nvb2tpZXMgPSBzZXR0aW5nc01lbnUtPmFkZEFjdGlvbigiU2F2ZSBDb29r
aWVzIG9uIERpc2siLCB0aGlzLCBTTE9UKHNldFVzZURpc2tDb29raWVzKGJvb2wpKSk7Ci0gICAg
dG9nZ2xlVXNlRGlza0Nvb2tpZXMtPnNldENoZWNrYWJsZSh0cnVlKTsKLSAgICB0b2dnbGVVc2VE
aXNrQ29va2llcy0+c2V0Q2hlY2tlZChtX3dpbmRvd09wdGlvbnMudXNlRGlza0Nvb2tpZXMpOwot
Ci0jaWZuZGVmIFFUX05PX0xJTkVFRElUCi0gICAgbV9maW5kQmFyID0gbmV3IFFUb29sQmFyKCJG
aW5kIiwgdGhpcyk7Ci0gICAgYWRkVG9vbEJhcihRdDo6Qm90dG9tVG9vbEJhckFyZWEsIG1fZmlu
ZEJhcik7Ci0KLSAgICBRVG9vbEJ1dHRvbiogZmluZENsb3NlID0gbmV3IFFUb29sQnV0dG9uKG1f
ZmluZEJhcik7Ci0gICAgZmluZENsb3NlLT5zZXRUZXh0KCJYIik7Ci0gICAgbV9saW5lRWRpdCA9
IG5ldyBRTGluZUVkaXQobV9maW5kQmFyKTsKLSAgICBtX2xpbmVFZGl0LT5zZXRNYXhpbXVtV2lk
dGgoMjAwKTsKLSAgICBRVG9vbEJ1dHRvbiogZmluZFByZXZpb3VzID0gbmV3IFFUb29sQnV0dG9u
KG1fZmluZEJhcik7Ci0gICAgZmluZFByZXZpb3VzLT5zZXRBcnJvd1R5cGUoUXQ6OkxlZnRBcnJv
dyk7Ci0gICAgUVRvb2xCdXR0b24qIGZpbmROZXh0ID0gbmV3IFFUb29sQnV0dG9uKG1fZmluZEJh
cik7Ci0gICAgZmluZE5leHQtPnNldEFycm93VHlwZShRdDo6UmlnaHRBcnJvdyk7Ci0gICAgUUNo
ZWNrQm94KiBmaW5kQ2FzZVNlbnNpdGl2ZSA9IG5ldyBRQ2hlY2tCb3goIkNhc2UgU2Vuc2l0aXZl
IiwgbV9maW5kQmFyKTsKLSAgICBRQ2hlY2tCb3gqIGZpbmRXcmFwQXJvdW5kID0gbmV3IFFDaGVj
a0JveCgiV3JhcCBBcm91bmQiLCBtX2ZpbmRCYXIpOwotICAgIFFDaGVja0JveCogZmluZEhpZ2hM
aWdodEFsbCA9IG5ldyBRQ2hlY2tCb3goIkhpZ2hMaWdodCBBbGwiLCBtX2ZpbmRCYXIpOwotCi0g
ICAgUVNpZ25hbE1hcHBlciogZmluZFNpZ25hbE1hcHBlciA9IG5ldyBRU2lnbmFsTWFwcGVyKG1f
ZmluZEJhcik7Ci0gICAgZmluZFNpZ25hbE1hcHBlci0+c2V0TWFwcGluZyhtX2xpbmVFZGl0LCBz
X2ZpbmROb3JtYWxGbGFnKTsKLSAgICBmaW5kU2lnbmFsTWFwcGVyLT5zZXRNYXBwaW5nKGZpbmRQ
cmV2aW91cywgUVdlYlBhZ2U6OkZpbmRCYWNrd2FyZCk7Ci0gICAgZmluZFNpZ25hbE1hcHBlci0+
c2V0TWFwcGluZyhmaW5kTmV4dCwgc19maW5kTm9ybWFsRmxhZyk7Ci0gICAgZmluZFNpZ25hbE1h
cHBlci0+c2V0TWFwcGluZyhmaW5kQ2FzZVNlbnNpdGl2ZSwgUVdlYlBhZ2U6OkZpbmRDYXNlU2Vu
c2l0aXZlbHkpOwotICAgIGZpbmRTaWduYWxNYXBwZXItPnNldE1hcHBpbmcoZmluZFdyYXBBcm91
bmQsIFFXZWJQYWdlOjpGaW5kV3JhcHNBcm91bmREb2N1bWVudCk7Ci0gICAgZmluZFNpZ25hbE1h
cHBlci0+c2V0TWFwcGluZyhmaW5kSGlnaExpZ2h0QWxsLCBRV2ViUGFnZTo6SGlnaGxpZ2h0QWxs
T2NjdXJyZW5jZXMpOwotCi0gICAgY29ubmVjdChmaW5kQ2xvc2UsIFNJR05BTChjbGlja2VkKCkp
LCB0aGlzLCBTTE9UKHNob3dGaW5kQmFyKCkpKTsKLSAgICBjb25uZWN0KG1fbGluZUVkaXQsIFNJ
R05BTCh0ZXh0Q2hhbmdlZChjb25zdCBRU3RyaW5nICYpKSwgZmluZFNpZ25hbE1hcHBlciwgU0xP
VChtYXAoKSkpOwotICAgIGNvbm5lY3QoZmluZFByZXZpb3VzLCBTSUdOQUwocHJlc3NlZCgpKSwg
ZmluZFNpZ25hbE1hcHBlciwgU0xPVChtYXAoKSkpOwotICAgIGNvbm5lY3QoZmluZE5leHQsIFNJ
R05BTChwcmVzc2VkKCkpLCBmaW5kU2lnbmFsTWFwcGVyLCBTTE9UKG1hcCgpKSk7Ci0gICAgY29u
bmVjdChmaW5kQ2FzZVNlbnNpdGl2ZSwgU0lHTkFMKHN0YXRlQ2hhbmdlZChpbnQpKSwgZmluZFNp
Z25hbE1hcHBlciwgU0xPVChtYXAoKSkpOwotICAgIGNvbm5lY3QoZmluZFdyYXBBcm91bmQsIFNJ
R05BTChzdGF0ZUNoYW5nZWQoaW50KSksIGZpbmRTaWduYWxNYXBwZXIsIFNMT1QobWFwKCkpKTsK
LSAgICBjb25uZWN0KGZpbmRIaWdoTGlnaHRBbGwsIFNJR05BTChzdGF0ZUNoYW5nZWQoaW50KSks
IGZpbmRTaWduYWxNYXBwZXIsIFNMT1QobWFwKCkpKTsKLQotICAgIGNvbm5lY3QoZmluZFNpZ25h
bE1hcHBlciwgU0lHTkFMKG1hcHBlZChpbnQpKSwgdGhpcywgU0xPVChmaW5kKGludCkpKTsKLQot
ICAgIG1fZmluZEJhci0+YWRkV2lkZ2V0KGZpbmRDbG9zZSk7Ci0gICAgbV9maW5kQmFyLT5hZGRX
aWRnZXQobV9saW5lRWRpdCk7Ci0gICAgbV9maW5kQmFyLT5hZGRXaWRnZXQoZmluZFByZXZpb3Vz
KTsKLSAgICBtX2ZpbmRCYXItPmFkZFdpZGdldChmaW5kTmV4dCk7Ci0gICAgbV9maW5kQmFyLT5h
ZGRXaWRnZXQoZmluZENhc2VTZW5zaXRpdmUpOwotICAgIG1fZmluZEJhci0+YWRkV2lkZ2V0KGZp
bmRXcmFwQXJvdW5kKTsKLSAgICBtX2ZpbmRCYXItPmFkZFdpZGdldChmaW5kSGlnaExpZ2h0QWxs
KTsKLSAgICBtX2ZpbmRCYXItPnNldE1vdmFibGUoZmFsc2UpOwotICAgIG1fZmluZEJhci0+c2V0
VmlzaWJsZShmYWxzZSk7Ci0jZW5kaWYKLSNlbmRpZgotfQotCi1ib29sIExhdW5jaGVyV2luZG93
Ojppc0dyYXBoaWNzQmFzZWQoKSBjb25zdAotewotICAgIHJldHVybiBib29sKHFvYmplY3RfY2Fz
dDxRR3JhcGhpY3NWaWV3Kj4obV92aWV3KSk7Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OnNl
bmRUb3VjaEV2ZW50KCkKLXsKLSAgICBpZiAobV90b3VjaFBvaW50cy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFFFdmVudDo6VHlwZSB0eXBlID0gUUV2ZW50OjpUb3VjaFVwZGF0
ZTsKLSAgICBpZiAobV90b3VjaFBvaW50cy5zaXplKCkgPT0gMSkgewotICAgICAgICBpZiAobV90
b3VjaFBvaW50c1swXS5zdGF0ZSgpID09IFF0OjpUb3VjaFBvaW50UmVsZWFzZWQpCi0gICAgICAg
ICAgICB0eXBlID0gUUV2ZW50OjpUb3VjaEVuZDsKLSAgICAgICAgZWxzZSBpZiAobV90b3VjaFBv
aW50c1swXS5zdGF0ZSgpID09IFF0OjpUb3VjaFBvaW50UHJlc3NlZCkKLSAgICAgICAgICAgIHR5
cGUgPSBRRXZlbnQ6OlRvdWNoQmVnaW47Ci0gICAgfQotCi0gICAgUVRvdWNoRXZlbnQgdG91Y2hF
dih0eXBlKTsKLSAgICB0b3VjaEV2LnNldFRvdWNoUG9pbnRzKG1fdG91Y2hQb2ludHMpOwotICAg
IFFDb3JlQXBwbGljYXRpb246OnNlbmRFdmVudChwYWdlKCksICZ0b3VjaEV2KTsKLQotICAgIC8v
IEFmdGVyIHNlbmRpbmcgdGhlIGV2ZW50LCByZW1vdmUgYWxsIHRvdWNocG9pbnRzIHRoYXQgd2Vy
ZSByZWxlYXNlZAotICAgIGlmIChtX3RvdWNoUG9pbnRzWzBdLnN0YXRlKCkgPT0gUXQ6OlRvdWNo
UG9pbnRSZWxlYXNlZCkKLSAgICAgICAgbV90b3VjaFBvaW50cy5yZW1vdmVBdCgwKTsKLSAgICBp
ZiAobV90b3VjaFBvaW50cy5zaXplKCkgPiAxICYmIG1fdG91Y2hQb2ludHNbMV0uc3RhdGUoKSA9
PSBRdDo6VG91Y2hQb2ludFJlbGVhc2VkKQotICAgICAgICBtX3RvdWNoUG9pbnRzLnJlbW92ZUF0
KDEpOwotfQotCi1ib29sIExhdW5jaGVyV2luZG93OjpldmVudEZpbHRlcihRT2JqZWN0KiBvYmos
IFFFdmVudCogZXZlbnQpCi17Ci0gICAgLy8gSWYgY2xpY2sgcG9zIGlzIHRoZSBib3R0b20gcmln
aHQgY29ybmVyIChzcXVhcmUgd2l0aCBzaXplIGRlZmluZWQgYnkgZ0V4aXRDbGlja0FyZWEpCi0g
ICAgLy8gYW5kIHRoZSB3aW5kb3cgaXMgb24gRnVsbFNjcmVlbiwgdGhlIHdpbmRvdyBtdXN0IHJl
dHVybiB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gUUV2
ZW50OjpNb3VzZUJ1dHRvblJlbGVhc2UpIHsKLSAgICAgICAgUU1vdXNlRXZlbnQqIGV2ID0gc3Rh
dGljX2Nhc3Q8UU1vdXNlRXZlbnQqPihldmVudCk7Ci0gICAgICAgIGlmICh3aW5kb3dTdGF0ZSgp
ID09IFF0OjpXaW5kb3dGdWxsU2NyZWVuCi0gICAgICAgICAgICAmJiBldi0+cG9zKCkueCgpID4g
KHdpZHRoKCkgLSBnRXhpdENsaWNrQXJlYSkKLSAgICAgICAgICAgICYmIGV2LT5wb3MoKS55KCkg
PiAoaGVpZ2h0KCkgLSBnRXhpdENsaWNrQXJlYSkpIHsKLQotICAgICAgICAgICAgZW1pdCBlbnRl
cmVkRnVsbFNjcmVlbk1vZGUoZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFt
X3RvdWNoTW9ja2luZykKLSAgICAgICAgcmV0dXJuIFFPYmplY3Q6OmV2ZW50RmlsdGVyKG9iaiwg
ZXZlbnQpOwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpNb3VzZUJ1dHRvblBy
ZXNzCi0gICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVh
c2UKLSAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6Ok1vdXNlQnV0dG9uRGJsQ2xp
Y2sKLSAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6Ok1vdXNlTW92ZSkgewotCi0g
ICAgICAgIFFNb3VzZUV2ZW50KiBldiA9IHN0YXRpY19jYXN0PFFNb3VzZUV2ZW50Kj4oZXZlbnQp
OwotICAgICAgICBpZiAoZXYtPnR5cGUoKSA9PSBRRXZlbnQ6Ok1vdXNlTW92ZQotICAgICAgICAg
ICAgJiYgIShldi0+YnV0dG9ucygpICYgUXQ6OkxlZnRCdXR0b24pKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50IHRvdWNoUG9pbnQ7
Ci0gICAgICAgIHRvdWNoUG9pbnQuc2V0U3RhdGUoUXQ6OlRvdWNoUG9pbnRNb3ZlZCk7Ci0gICAg
ICAgIGlmICgoZXYtPnR5cGUoKSA9PSBRRXZlbnQ6Ok1vdXNlQnV0dG9uUHJlc3MKLSAgICAgICAg
ICAgICB8fCBldi0+dHlwZSgpID09IFFFdmVudDo6TW91c2VCdXR0b25EYmxDbGljaykpCi0gICAg
ICAgICAgICB0b3VjaFBvaW50LnNldFN0YXRlKFF0OjpUb3VjaFBvaW50UHJlc3NlZCk7Ci0gICAg
ICAgIGVsc2UgaWYgKGV2LT50eXBlKCkgPT0gUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVhc2UpCi0g
ICAgICAgICAgICB0b3VjaFBvaW50LnNldFN0YXRlKFF0OjpUb3VjaFBvaW50UmVsZWFzZWQpOwot
Ci0gICAgICAgIHRvdWNoUG9pbnQuc2V0SWQoMCk7Ci0gICAgICAgIHRvdWNoUG9pbnQuc2V0U2Ny
ZWVuUG9zKGV2LT5nbG9iYWxQb3MoKSk7Ci0gICAgICAgIHRvdWNoUG9pbnQuc2V0UG9zKGV2LT5w
b3MoKSk7Ci0gICAgICAgIHRvdWNoUG9pbnQuc2V0UHJlc3N1cmUoMSk7Ci0KLSAgICAgICAgLy8g
SWYgdGhlIHBvaW50IGFscmVhZHkgZXhpc3RzLCB1cGRhdGUgaXQuIE90aGVyd2lzZSBjcmVhdGUg
aXQuCi0gICAgICAgIGlmIChtX3RvdWNoUG9pbnRzLnNpemUoKSA+IDAgJiYgIW1fdG91Y2hQb2lu
dHNbMF0uaWQoKSkKLSAgICAgICAgICAgIG1fdG91Y2hQb2ludHNbMF0gPSB0b3VjaFBvaW50Owot
ICAgICAgICBlbHNlIGlmIChtX3RvdWNoUG9pbnRzLnNpemUoKSA+IDEgJiYgIW1fdG91Y2hQb2lu
dHNbMV0uaWQoKSkKLSAgICAgICAgICAgIG1fdG91Y2hQb2ludHNbMV0gPSB0b3VjaFBvaW50Owot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3RvdWNoUG9pbnRzLmFwcGVuZCh0b3VjaFBvaW50
KTsKLQotICAgICAgICBzZW5kVG91Y2hFdmVudCgpOwotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBRRXZlbnQ6OktleVByZXNzCi0gICAgICAgICYmIHN0YXRpY19jYXN0PFFLZXlFdmVu
dCo+KGV2ZW50KS0+a2V5KCkgPT0gUXQ6OktleV9GCi0gICAgICAgICYmIHN0YXRpY19jYXN0PFFL
ZXlFdmVudCo+KGV2ZW50KS0+bW9kaWZpZXJzKCkgPT0gUXQ6OkNvbnRyb2xNb2RpZmllcikgewot
Ci0gICAgICAgIC8vIElmIHRoZSBrZXlib2FyZCBwb2ludCBpcyBhbHJlYWR5IHByZXNzZWQsIHJl
bGVhc2UgaXQuCi0gICAgICAgIC8vIE90aGVyd2lzZSBjcmVhdGUgaXQgYW5kIGFwcGVuZCB0byBt
X3RvdWNoUG9pbnRzLgotICAgICAgICBpZiAobV90b3VjaFBvaW50cy5zaXplKCkgPiAwICYmIG1f
dG91Y2hQb2ludHNbMF0uaWQoKSA9PSAxKSB7Ci0gICAgICAgICAgICBtX3RvdWNoUG9pbnRzWzBd
LnNldFN0YXRlKFF0OjpUb3VjaFBvaW50UmVsZWFzZWQpOwotICAgICAgICAgICAgc2VuZFRvdWNo
RXZlbnQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChtX3RvdWNoUG9pbnRzLnNpemUoKSA+IDEgJiYg
bV90b3VjaFBvaW50c1sxXS5pZCgpID09IDEpIHsKLSAgICAgICAgICAgIG1fdG91Y2hQb2ludHNb
MV0uc2V0U3RhdGUoUXQ6OlRvdWNoUG9pbnRSZWxlYXNlZCk7Ci0gICAgICAgICAgICBzZW5kVG91
Y2hFdmVudCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUVRvdWNoRXZlbnQ6OlRv
dWNoUG9pbnQgdG91Y2hQb2ludDsKLSAgICAgICAgICAgIHRvdWNoUG9pbnQuc2V0U3RhdGUoUXQ6
OlRvdWNoUG9pbnRQcmVzc2VkKTsKLSAgICAgICAgICAgIHRvdWNoUG9pbnQuc2V0SWQoMSk7Ci0g
ICAgICAgICAgICB0b3VjaFBvaW50LnNldFNjcmVlblBvcyhRQ3Vyc29yOjpwb3MoKSk7Ci0gICAg
ICAgICAgICB0b3VjaFBvaW50LnNldFBvcyhtX3ZpZXctPm1hcEZyb21HbG9iYWwoUUN1cnNvcjo6
cG9zKCkpKTsKLSAgICAgICAgICAgIHRvdWNoUG9pbnQuc2V0UHJlc3N1cmUoMSk7Ci0gICAgICAg
ICAgICBtX3RvdWNoUG9pbnRzLmFwcGVuZCh0b3VjaFBvaW50KTsKLSAgICAgICAgICAgIHNlbmRU
b3VjaEV2ZW50KCk7Ci0KLSAgICAgICAgICAgIC8vIEFmdGVyIHNlbmRpbmcgdGhlIGV2ZW50LCBj
aGFuZ2UgdGhlIHRvdWNocG9pbnQgc3RhdGUgdG8gc3RhdGlvbmFyeQotICAgICAgICAgICAgbV90
b3VjaFBvaW50cy5sYXN0KCkuc2V0U3RhdGUoUXQ6OlRvdWNoUG9pbnRTdGF0aW9uYXJ5KTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBMYXVuY2hlcldp
bmRvdzo6bG9hZFN0YXJ0ZWQoKQotewotICAgIG1fdmlldy0+c2V0Rm9jdXMoUXQ6Ok90aGVyRm9j
dXNSZWFzb24pOwotfQotCi12b2lkIExhdW5jaGVyV2luZG93Ojpsb2FkRmluaXNoZWQoKQotewot
ICAgIFFVcmwgdXJsID0gcGFnZSgpLT5tYWluRnJhbWUoKS0+dXJsKCk7Ci0gICAgYWRkQ29tcGxl
dGVyRW50cnkodXJsKTsKLSAgICBpZiAobV9pbnB1dFVybC5pc0VtcHR5KCkpCi0gICAgICAgIHNl
dEFkZHJlc3NVcmwodXJsLnRvU3RyaW5nKFFVcmw6OlJlbW92ZVVzZXJJbmZvKSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIHNldEFkZHJlc3NVcmwobV9pbnB1dFVybCk7Ci0gICAgICAgIG1faW5wdXRV
cmwgPSBRU3RyaW5nKCk7Ci0gICAgfQotfQotCi12b2lkIExhdW5jaGVyV2luZG93OjpzaG93TGlu
a0hvdmVyKGNvbnN0IFFTdHJpbmcgJmxpbmssIGNvbnN0IFFTdHJpbmcgJnRvb2xUaXApCi17Ci0g
ICAgc3RhdHVzQmFyKCktPnNob3dNZXNzYWdlKGxpbmspOwotI2lmbmRlZiBRVF9OT19UT09MVElQ
Ci0gICAgaWYgKCF0b29sVGlwLmlzRW1wdHkoKSkKLSAgICAgICAgUVRvb2xUaXA6OnNob3dUZXh0
KFFDdXJzb3I6OnBvcygpLCB0b29sVGlwKTsKLSNlbmRpZgotfQotCi12b2lkIExhdW5jaGVyV2lu
ZG93Ojp6b29tQW5pbWF0aW9uRmluaXNoZWQoKQotewotICAgIGlmICghaXNHcmFwaGljc0Jhc2Vk
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBRR3JhcGhpY3NXZWJWaWV3KiB2aWV3ID0gc3RhdGlj
X2Nhc3Q8V2ViVmlld0dyYXBoaWNzQmFzZWQqPihtX3ZpZXcpLT5ncmFwaGljc1dlYlZpZXcoKTsK
LSAgICB2aWV3LT5zZXRUaWxlZEJhY2tpbmdTdG9yZUZyb3plbihmYWxzZSk7Ci19Ci0KLXZvaWQg
TGF1bmNoZXJXaW5kb3c6OmFwcGx5Wm9vbSgpCi17Ci0jaWZuZGVmIFFUX05PX0FOSU1BVElPTgot
ICAgIGlmIChpc0dyYXBoaWNzQmFzZWQoKSAmJiBwYWdlKCktPnNldHRpbmdzKCktPnRlc3RBdHRy
aWJ1dGUoUVdlYlNldHRpbmdzOjpUaWxlZEJhY2tpbmdTdG9yZUVuYWJsZWQpKSB7Ci0gICAgICAg
IFFHcmFwaGljc1dlYlZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxXZWJWaWV3R3JhcGhpY3NCYXNl
ZCo+KG1fdmlldyktPmdyYXBoaWNzV2ViVmlldygpOwotICAgICAgICB2aWV3LT5zZXRUaWxlZEJh
Y2tpbmdTdG9yZUZyb3plbih0cnVlKTsKLSAgICAgICAgaWYgKCFtX3pvb21BbmltYXRpb24pIHsK
LSAgICAgICAgICAgIG1fem9vbUFuaW1hdGlvbiA9IG5ldyBRUHJvcGVydHlBbmltYXRpb24odmll
dywgInNjYWxlIik7Ci0gICAgICAgICAgICBtX3pvb21BbmltYXRpb24tPnNldFN0YXJ0VmFsdWUo
dmlldy0+c2NhbGUoKSk7Ci0gICAgICAgICAgICBjb25uZWN0KG1fem9vbUFuaW1hdGlvbiwgU0lH
TkFMKGZpbmlzaGVkKCkpLCB0aGlzLCBTTE9UKHpvb21BbmltYXRpb25GaW5pc2hlZCgpKSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3pvb21BbmltYXRpb24tPnN0b3AoKTsKLSAg
ICAgICAgICAgIG1fem9vbUFuaW1hdGlvbi0+c2V0U3RhcnRWYWx1ZShtX3pvb21BbmltYXRpb24t
PmN1cnJlbnRWYWx1ZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fem9vbUFuaW1hdGlvbi0+
c2V0RHVyYXRpb24oMzAwKTsKLSAgICAgICAgbV96b29tQW5pbWF0aW9uLT5zZXRFbmRWYWx1ZShx
cmVhbChtX2N1cnJlbnRab29tKSAvIDEwMC4pOwotICAgICAgICBtX3pvb21BbmltYXRpb24tPnN0
YXJ0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAgICBwYWdlKCktPm1haW5G
cmFtZSgpLT5zZXRab29tRmFjdG9yKHFyZWFsKG1fY3VycmVudFpvb20pIC8gMTAwLjApOwotfQot
Ci12b2lkIExhdW5jaGVyV2luZG93Ojp6b29tSW4oKQotewotICAgIGludCBpID0gbV96b29tTGV2
ZWxzLmluZGV4T2YobV9jdXJyZW50Wm9vbSk7Ci0gICAgUV9BU1NFUlQoaSA+PSAwKTsKLSAgICBp
ZiAoaSA8IG1fem9vbUxldmVscy5jb3VudCgpIC0gMSkKLSAgICAgICAgbV9jdXJyZW50Wm9vbSA9
IG1fem9vbUxldmVsc1tpICsgMV07Ci0KLSAgICBhcHBseVpvb20oKTsKLX0KLQotdm9pZCBMYXVu
Y2hlcldpbmRvdzo6em9vbU91dCgpCi17Ci0gICAgaW50IGkgPSBtX3pvb21MZXZlbHMuaW5kZXhP
ZihtX2N1cnJlbnRab29tKTsKLSAgICBRX0FTU0VSVChpID49IDApOwotICAgIGlmIChpID4gMCkK
LSAgICAgICAgbV9jdXJyZW50Wm9vbSA9IG1fem9vbUxldmVsc1tpIC0gMV07Ci0KLSAgICBhcHBs
eVpvb20oKTsKLX0KLQotdm9pZCBMYXVuY2hlcldpbmRvdzo6cmVzZXRab29tKCkKLXsKLSAgICBt
X2N1cnJlbnRab29tID0gMTAwOwotICAgIGFwcGx5Wm9vbSgpOwotfQotCi12b2lkIExhdW5jaGVy
V2luZG93Ojp0b2dnbGVab29tVGV4dE9ubHkoYm9vbCBiKQotewotICAgIHBhZ2UoKS0+c2V0dGlu
Z3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6Wm9vbVRleHRPbmx5LCBiKTsKLX0KLQot
dm9pZCBMYXVuY2hlcldpbmRvdzo6cHJpbnQoKQotewotI2lmICFkZWZpbmVkKFFUX05PX1BSSU5U
UFJFVklFV0RJQUxPRykgJiYgSEFWRShRVFBSSU5UU1VQUE9SVCkKLSAgICBRUHJpbnRQcmV2aWV3
RGlhbG9nIGRsZyh0aGlzKTsKLSAgICBjb25uZWN0KCZkbGcsIFNJR05BTChwYWludFJlcXVlc3Rl
ZChRUHJpbnRlciopKSwKLSAgICAgICAgICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCksIFNMT1QocHJp
bnQoUVByaW50ZXIqKSkpOwotICAgIGRsZy5leGVjKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBMYXVu
Y2hlcldpbmRvdzo6c2NyZWVuc2hvdCgpCi17Ci0gICAgUVBpeG1hcCBwaXhtYXAgPSBRUGl4bWFw
OjpncmFiV2lkZ2V0KG1fdmlldyk7Ci0gICAgUUxhYmVsKiBsYWJlbCA9IDA7Ci0gICAgbGFiZWwg
PSBuZXcgUUxhYmVsOwotICAgIGxhYmVsLT5zZXRBdHRyaWJ1dGUoUXQ6OldBX0RlbGV0ZU9uQ2xv
c2UpOwotICAgIGxhYmVsLT5zZXRXaW5kb3dUaXRsZSgiU2NyZWVuc2hvdCAtIFByZXZpZXciKTsK
LSAgICBsYWJlbC0+c2V0UGl4bWFwKHBpeG1hcCk7Ci0gICAgbGFiZWwtPnNob3coKTsKLQotI2lm
bmRlZiBRVF9OT19GSUxFRElBTE9HCi0gICAgUVN0cmluZyBmaWxlTmFtZSA9IFFGaWxlRGlhbG9n
OjpnZXRTYXZlRmlsZU5hbWUobGFiZWwsICJTY3JlZW5zaG90Iik7Ci0gICAgaWYgKCFmaWxlTmFt
ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcGl4bWFwLnNhdmUoZmlsZU5hbWUsICJwbmciKTsKLSAg
ICAgICAgaWYgKGxhYmVsKQotICAgICAgICAgICAgbGFiZWwtPnNldFdpbmRvd1RpdGxlKFFTdHJp
bmcoIlNjcmVlbnNob3QgLSBTYXZlZCBhdCAlMSIpLmFyZyhmaWxlTmFtZSkpOwotICAgIH0KLSNl
bmRpZgotCi0jaWZuZGVmIFFUX05PX09QRU5HTAotICAgIHRvZ2dsZVFHTFdpZGdldFZpZXdwb3J0
KG1fd2luZG93T3B0aW9ucy51c2VRR0xXaWRnZXRWaWV3cG9ydCk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBMYXVuY2hlcldpbmRvdzo6c2V0RWRpdGFibGUoYm9vbCBvbikKLXsKLSAgICBwYWdlKCktPnNl
dENvbnRlbnRFZGl0YWJsZShvbik7Ci0jaWZuZGVmIFFUX05PX1NIT1JUQ1VUCi0gICAgbV9mb3Jt
YXRNZW51QWN0aW9uLT5zZXRWaXNpYmxlKG9uKTsKLSNlbmRpZgotfQotCi0vKgotdm9pZCBMYXVu
Y2hlcldpbmRvdzo6ZHVtcFBsdWdpbnMoKSB7Ci0gICAgUUxpc3Q8UVdlYlBsdWdpbkluZm8+IHBs
dWdpbnMgPSBRV2ViU2V0dGluZ3M6OnBsdWdpbkRhdGFiYXNlKCktPnBsdWdpbnMoKTsKLSAgICBm
b3JlYWNoIChjb25zdCBRV2ViUGx1Z2luSW5mbyBwbHVnaW4sIHBsdWdpbnMpIHsKLSAgICAgICAg
cURlYnVnKCkgPDwgIlBsdWdpbjoiIDw8IHBsdWdpbi5uYW1lKCk7Ci0gICAgICAgIGZvcmVhY2gg
KGNvbnN0IFFXZWJQbHVnaW5JbmZvOjpNaW1lVHlwZSBtaW1lLCBwbHVnaW4ubWltZVR5cGVzKCkp
IHsKLSAgICAgICAgICAgIHFEZWJ1ZygpIDw8ICIgICAiIDw8IG1pbWUubmFtZTsKLSAgICAgICAg
fQotICAgIH0KLX0KLSovCi0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OmR1bXBIdG1sKCkKLXsKLSAg
ICBxRGVidWcoKSA8PCAiSFRNTDogIiA8PCBwYWdlKCktPm1haW5GcmFtZSgpLT50b0h0bWwoKTsK
LX0KLQotdm9pZCBMYXVuY2hlcldpbmRvdzo6c2VsZWN0RWxlbWVudHMoKQotewotI2lmbmRlZiBR
VF9OT19JTlBVVERJQUxPRwotICAgIGJvb2wgb2s7Ci0gICAgUVN0cmluZyBzdHIgPSBRSW5wdXRE
aWFsb2c6OmdldFRleHQodGhpcywgIlNlbGVjdCBlbGVtZW50cyIsICJDaG9vc2UgZWxlbWVudHMi
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFMaW5lRWRpdDo6Tm9y
bWFsLCAiYSIsICZvayk7Ci0KLSAgICBpZiAob2sgJiYgIXN0ci5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgY2xlYXJTZWxlY3Rpb24oKTsKLSAgICAgICAgUVdlYkVsZW1lbnRDb2xsZWN0aW9uIHJlc3Vs
dCA9ICBwYWdlKCktPm1haW5GcmFtZSgpLT5maW5kQWxsRWxlbWVudHMoc3RyKTsKLSAgICAgICAg
Zm9yZWFjaCAoUVdlYkVsZW1lbnQgZSwgcmVzdWx0KSB7Ci0gICAgICAgICAgICBIaWdobGlnaHRl
ZEVsZW1lbnQgZWwgPSB7IGUsIGUuc3R5bGVQcm9wZXJ0eSgiYmFja2dyb3VuZC1jb2xvciIsIFFX
ZWJFbGVtZW50OjpJbmxpbmVTdHlsZSkgfTsKLSAgICAgICAgICAgIG1faGlnaGxpZ2h0ZWRFbGVt
ZW50cy5hcHBlbmQoZWwpOwotICAgICAgICAgICAgZS5zZXRTdHlsZVByb3BlcnR5KCJiYWNrZ3Jv
dW5kLWNvbG9yIiwgInllbGxvdyIpOwotICAgICAgICB9Ci0gICAgICAgIHN0YXR1c0JhcigpLT5z
aG93TWVzc2FnZShRU3RyaW5nKCIlMSBlbGVtZW50KHMpIHNlbGVjdGVkIikuYXJnKHJlc3VsdC5j
b3VudCgpKSwgNTAwMCk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6
OmNsZWFyU2VsZWN0aW9uKCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faGlnaGxpZ2h0
ZWRFbGVtZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9oaWdobGlnaHRlZEVsZW1lbnRzW2ld
Lm1fZWxlbWVudC5zZXRTdHlsZVByb3BlcnR5KCJiYWNrZ3JvdW5kLWNvbG9yIiwgbV9oaWdobGln
aHRlZEVsZW1lbnRzW2ldLm1fcHJldmlvdXNTdHlsZSk7Ci0gICAgbV9oaWdobGlnaHRlZEVsZW1l
bnRzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OnNldERpc2tDYWNoZShib29s
IGVuYWJsZSkKLXsKLSNpZiAhZGVmaW5lZChRVF9OT19ORVRXT1JLRElTS0NBQ0hFKSAmJiAhZGVm
aW5lZChRVF9OT19ERVNLVE9QU0VSVklDRVMpCi0gICAgbV93aW5kb3dPcHRpb25zLnVzZURpc2tD
YWNoZSA9IGVuYWJsZTsKLSAgICBRTmV0d29ya0Rpc2tDYWNoZSogY2FjaGUgPSAwOwotICAgIGlm
IChlbmFibGUpIHsKLSAgICAgICAgY2FjaGUgPSBuZXcgUU5ldHdvcmtEaXNrQ2FjaGUoKTsKLSAg
ICAgICAgUVN0cmluZyBjYWNoZUxvY2F0aW9uID0gUVN0YW5kYXJkUGF0aHM6OndyaXRhYmxlTG9j
YXRpb24oUVN0YW5kYXJkUGF0aHM6OkNhY2hlTG9jYXRpb24pOwotICAgICAgICBjYWNoZS0+c2V0
Q2FjaGVEaXJlY3RvcnkoY2FjaGVMb2NhdGlvbik7Ci0gICAgfQotICAgIHBhZ2UoKS0+bmV0d29y
a0FjY2Vzc01hbmFnZXIoKS0+c2V0Q2FjaGUoY2FjaGUpOwotI2VuZGlmCi19Ci0KLXZvaWQgTGF1
bmNoZXJXaW5kb3c6OnNldFRvdWNoTW9ja2luZyhib29sIG9uKQotewotICAgIG1fdG91Y2hNb2Nr
aW5nID0gb247Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZVdlYlZpZXcoYm9vbCBn
cmFwaGljc0Jhc2VkKQotewotICAgIG1fd2luZG93T3B0aW9ucy51c2VHcmFwaGljc1ZpZXcgPSBn
cmFwaGljc0Jhc2VkOwotICAgIGluaXRpYWxpemVWaWV3KCk7Ci0jaWZuZGVmIFFUX05PX1NIT1JU
Q1VUCi0gICAgbWVudUJhcigpLT5jbGVhcigpOwotI2VuZGlmCi0gICAgY3JlYXRlQ2hyb21lKCk7
Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmco
Ym9vbCB0b2dnbGUpCi17Ci0gICAgbV93aW5kb3dPcHRpb25zLnVzZUNvbXBvc2l0aW5nID0gdG9n
Z2xlOwotICAgIHBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIHRvZ2dsZSk7Ci19Ci0KLXZvaWQgTGF1bmNo
ZXJXaW5kb3c6OnRvZ2dsZVRpbGVkQmFja2luZ1N0b3JlKGJvb2wgdG9nZ2xlKQotewotICAgIHBh
Z2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6VGlsZWRCYWNraW5n
U3RvcmVFbmFibGVkLCB0b2dnbGUpOwotfQotCi12b2lkIExhdW5jaGVyV2luZG93Ojp0b2dnbGVS
ZXNpemVzVG9Db250ZW50cyhib29sIHRvZ2dsZSkKLXsKLSAgICBtX3dpbmRvd09wdGlvbnMucmVz
aXplc1RvQ29udGVudHMgPSB0b2dnbGU7Ci0gICAgc3RhdGljX2Nhc3Q8V2ViVmlld0dyYXBoaWNz
QmFzZWQqPihtX3ZpZXcpLT5zZXRSZXNpemVzVG9Db250ZW50cyh0b2dnbGUpOwotfQotCi12b2lk
IExhdW5jaGVyV2luZG93Ojp0b2dnbGVXZWJHTChib29sIHRvZ2dsZSkKLXsKLSAgICBtX3dpbmRv
d09wdGlvbnMudXNlV2ViR0wgPSB0b2dnbGU7Ci0gICAgcGFnZSgpLT5zZXR0aW5ncygpLT5zZXRB
dHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQsIHRvZ2dsZSk7Ci19Ci0KLXZvaWQg
TGF1bmNoZXJXaW5kb3c6OnRvZ2dsZVdlYkF1ZGlvKGJvb2wgdG9nZ2xlKQotewotICAgIG1fd2lu
ZG93T3B0aW9ucy51c2VXZWJBdWRpbyA9IHRvZ2dsZTsKLSAgICBwYWdlKCktPnNldHRpbmdzKCkt
PnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OldlYkF1ZGlvRW5hYmxlZCwgdG9nZ2xlKTsKLX0K
LQotdm9pZCBMYXVuY2hlcldpbmRvdzo6YW5pbWF0ZWRGbGlwKCkKLXsKLSAgICBxb2JqZWN0X2Nh
c3Q8V2ViVmlld0dyYXBoaWNzQmFzZWQqPihtX3ZpZXcpLT5hbmltYXRlZEZsaXAoKTsKLX0KLQot
dm9pZCBMYXVuY2hlcldpbmRvdzo6YW5pbWF0ZWRZRmxpcCgpCi17Ci0gICAgcW9iamVjdF9jYXN0
PFdlYlZpZXdHcmFwaGljc0Jhc2VkKj4obV92aWV3KS0+YW5pbWF0ZWRZRmxpcCgpOwotfQotdm9p
ZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xlU3BhdGlhbE5hdmlnYXRpb24oYm9vbCBiKQotewotICAg
IHBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6U3BhdGlhbE5h
dmlnYXRpb25FbmFibGVkLCBiKTsKLX0KLQotdm9pZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xlRnVs
bFNjcmVlbk1vZGUoYm9vbCBlbmFibGUpCi17Ci0gICAgYm9vbCBhbHJlYWR5RW5hYmxlZCA9IHdp
bmRvd1N0YXRlKCkgJiBRdDo6V2luZG93RnVsbFNjcmVlbjsKLSAgICBpZiAoZW5hYmxlIF4gYWxy
ZWFkeUVuYWJsZWQpCi0gICAgICAgIHNldFdpbmRvd1N0YXRlKHdpbmRvd1N0YXRlKCkgXiBRdDo6
V2luZG93RnVsbFNjcmVlbik7Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZUZyYW1l
RmxhdHRlbmluZyhib29sIHRvZ2dsZSkKLXsKLSAgICBtX3dpbmRvd09wdGlvbnMudXNlRnJhbWVG
bGF0dGVuaW5nID0gdG9nZ2xlOwotICAgIHBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRl
KFFXZWJTZXR0aW5nczo6RnJhbWVGbGF0dGVuaW5nRW5hYmxlZCwgdG9nZ2xlKTsKLX0KLQotdm9p
ZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xlSmF2YVNjcmlwdEVuYWJsZWQoYm9vbCBlbmFibGUpCi17
Ci0gICAgcGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZh
c2NyaXB0RW5hYmxlZCwgZW5hYmxlKTsKLX0KLQotdm9pZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xl
SW50ZXJydXB0aW5nSmF2YVNjcmlwdEVuYWJsZWQoYm9vbCBlbmFibGUpCi17Ci0gICAgcGFnZSgp
LT5zZXRJbnRlcnJ1cHRpbmdKYXZhU2NyaXB0RW5hYmxlZChlbmFibGUpOwotfQotCi12b2lkIExh
dW5jaGVyV2luZG93Ojp0b2dnbGVKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MoYm9vbCBlbmFibGUp
Ci17Ci0gICAgcGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpK
YXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MsIGVuYWJsZSk7Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5k
b3c6OnNldFVzZURpc2tDb29raWVzKGJvb2wgZW5hYmxlKQotewotICAgIHRlc3RCcm93c2VyQ29v
a2llSmFySW5zdGFuY2UoKS0+c2V0RGlza1N0b3JhZ2VFbmFibGVkKGVuYWJsZSk7Ci19Ci0KLXZv
aWQgTGF1bmNoZXJXaW5kb3c6OmNsZWFyQ29va2llcygpCi17Ci0gICAgdGVzdEJyb3dzZXJDb29r
aWVKYXJJbnN0YW5jZSgpLT5yZXNldCgpOwotfQotCi12b2lkIExhdW5jaGVyV2luZG93Ojp0b2dn
bGVBdXRvTG9hZEltYWdlcyhib29sIGVuYWJsZSkKLXsKLSAgICBwYWdlKCktPnNldHRpbmdzKCkt
PnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkF1dG9Mb2FkSW1hZ2VzLCAhZW5hYmxlKTsKLX0K
LQotdm9pZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xlUGx1Z2lucyhib29sIGVuYWJsZSkKLXsKLSAg
ICBwYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlBsdWdpbnNF
bmFibGVkLCAhZW5hYmxlKTsKLX0KLQotI2lmbmRlZiBRVF9OT19PUEVOR0wKLXZvaWQgTGF1bmNo
ZXJXaW5kb3c6OnRvZ2dsZVFHTFdpZGdldFZpZXdwb3J0KGJvb2wgZW5hYmxlKQotewotICAgIGlm
ICghaXNHcmFwaGljc0Jhc2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fd2luZG93T3B0
aW9ucy51c2VRR0xXaWRnZXRWaWV3cG9ydCA9IGVuYWJsZTsKLSAgICBXZWJWaWV3R3JhcGhpY3NC
YXNlZCogdmlldyA9IHN0YXRpY19jYXN0PFdlYlZpZXdHcmFwaGljc0Jhc2VkKj4obV92aWV3KTsK
LQotICAgIHZpZXctPnNldFZpZXdwb3J0KGVuYWJsZSA/IG5ldyBRR0xXaWRnZXQoKSA6IDApOwot
fQotI2VuZGlmCi0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OmNoYW5nZVZpZXdwb3J0VXBkYXRlTW9k
ZShpbnQgbW9kZSkKLXsKLSAgICBtX3dpbmRvd09wdGlvbnMudmlld3BvcnRVcGRhdGVNb2RlID0g
UUdyYXBoaWNzVmlldzo6Vmlld3BvcnRVcGRhdGVNb2RlKG1vZGUpOwotCi0gICAgaWYgKCFpc0dy
YXBoaWNzQmFzZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViVmlld0dyYXBoaWNzQmFz
ZWQqIHZpZXcgPSBzdGF0aWNfY2FzdDxXZWJWaWV3R3JhcGhpY3NCYXNlZCo+KG1fdmlldyk7Ci0g
ICAgdmlldy0+c2V0Vmlld3BvcnRVcGRhdGVNb2RlKG1fd2luZG93T3B0aW9ucy52aWV3cG9ydFVw
ZGF0ZU1vZGUpOwotfQotCi12b2lkIExhdW5jaGVyV2luZG93OjpzaG93RlBTKGJvb2wgZW5hYmxl
KQotewotICAgIGlmICghaXNHcmFwaGljc0Jhc2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fd2luZG93T3B0aW9ucy5zaG93RnJhbWVSYXRlID0gZW5hYmxlOwotICAgIFdlYlZpZXdHcmFw
aGljc0Jhc2VkKiB2aWV3ID0gc3RhdGljX2Nhc3Q8V2ViVmlld0dyYXBoaWNzQmFzZWQqPihtX3Zp
ZXcpOwotICAgIHZpZXctPnNldEZyYW1lUmF0ZU1lYXN1cmVtZW50RW5hYmxlZChlbmFibGUpOwot
Ci0gICAgaWYgKCFlbmFibGUpCi0gICAgICAgIHN0YXR1c0JhcigpLT5jbGVhck1lc3NhZ2UoKTsK
LX0KLQotdm9pZCBMYXVuY2hlcldpbmRvdzo6c2hvd1VzZXJBZ2VudERpYWxvZygpCi17Ci0gICAg
UVN0cmluZ0xpc3QgaXRlbXM7Ci0gICAgUUZpbGUgZmlsZSgiOi91c2VyYWdlbnRsaXN0LnR4dCIp
OwotICAgIGlmIChmaWxlLm9wZW4oUUlPRGV2aWNlOjpSZWFkT25seSkpIHsKLSAgICAgICAgIHdo
aWxlICghZmlsZS5hdEVuZCgpKQotICAgICAgICAgICAgaXRlbXMgPDwgZmlsZS5yZWFkTGluZSgp
LnRyaW1tZWQoKTsKLSAgICAgICAgZmlsZS5jbG9zZSgpOwotICAgIH0KLQotICAgIFFTZXR0aW5n
cyBzZXR0aW5nczsKLSAgICBRU3RyaW5nIGN1c3RvbVVzZXJBZ2VudCA9IHNldHRpbmdzLnZhbHVl
KCJDdXN0b21Vc2VyQWdlbnQiKS50b1N0cmluZygpOwotICAgIGlmICghaXRlbXMuY29udGFpbnMo
Y3VzdG9tVXNlckFnZW50KSAmJiAhY3VzdG9tVXNlckFnZW50LmlzRW1wdHkoKSkKLSAgICAgICAg
aXRlbXMgPDwgY3VzdG9tVXNlckFnZW50OwotCi0gICAgUURpYWxvZyogZGlhbG9nID0gbmV3IFFE
aWFsb2codGhpcyk7Ci0gICAgZGlhbG9nLT5yZXNpemUoc2l6ZSgpLndpZHRoKCkgKiAwLjcsIGRp
YWxvZy0+c2l6ZSgpLmhlaWdodCgpKTsKLSAgICBkaWFsb2ctPnNldFdpbmRvd1RpdGxlKCJDaGFu
Z2UgVXNlciBBZ2VudCIpOwotCi0gICAgUVZCb3hMYXlvdXQqIGxheW91dCA9IG5ldyBRVkJveExh
eW91dChkaWFsb2cpOwotICAgIGRpYWxvZy0+c2V0TGF5b3V0KGxheW91dCk7Ci0KLSNpZm5kZWYg
UVRfTk9fQ09NQk9CT1gKLSAgICBRQ29tYm9Cb3gqIGNvbWJvID0gbmV3IFFDb21ib0JveChkaWFs
b2cpOwotICAgIGNvbWJvLT5zZXRTaXplQWRqdXN0UG9saWN5KFFDb21ib0JveDo6QWRqdXN0VG9N
aW5pbXVtQ29udGVudHNMZW5ndGgpOwotICAgIGNvbWJvLT5zZXRFZGl0YWJsZSh0cnVlKTsKLSAg
ICBjb21iby0+aW5zZXJ0SXRlbXMoMCwgaXRlbXMpOwotICAgIGxheW91dC0+YWRkV2lkZ2V0KGNv
bWJvKTsKLQotICAgIGludCBpbmRleCA9IGNvbWJvLT5maW5kVGV4dChwYWdlKCktPnVzZXJBZ2Vu
dEZvclVybChRVXJsKCkpKTsKLSAgICBjb21iby0+c2V0Q3VycmVudEluZGV4KGluZGV4KTsKLSNl
bmRpZgotCi0gICAgUURpYWxvZ0J1dHRvbkJveCogYnV0dG9uQm94ID0gbmV3IFFEaWFsb2dCdXR0
b25Cb3goUURpYWxvZ0J1dHRvbkJveDo6T2sKLSAgICAgICAgICAgIHwgUURpYWxvZ0J1dHRvbkJv
eDo6Q2FuY2VsLCBRdDo6SG9yaXpvbnRhbCwgZGlhbG9nKTsKLSAgICBjb25uZWN0KGJ1dHRvbkJv
eCwgU0lHTkFMKGFjY2VwdGVkKCkpLCBkaWFsb2csIFNMT1QoYWNjZXB0KCkpKTsKLSAgICBjb25u
ZWN0KGJ1dHRvbkJveCwgU0lHTkFMKHJlamVjdGVkKCkpLCBkaWFsb2csIFNMT1QocmVqZWN0KCkp
KTsKLSAgICBsYXlvdXQtPmFkZFdpZGdldChidXR0b25Cb3gpOwotCi0jaWZuZGVmIFFUX05PX0NP
TUJPQk9YCi0gICAgaWYgKGRpYWxvZy0+ZXhlYygpICYmICFjb21iby0+Y3VycmVudFRleHQoKS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgcGFnZSgpLT5zZXRVc2VyQWdlbnQoY29tYm8tPmN1cnJlbnRU
ZXh0KCkpOwotICAgICAgICBpZiAoIWl0ZW1zLmNvbnRhaW5zKGNvbWJvLT5jdXJyZW50VGV4dCgp
KSkKLSAgICAgICAgICAgIHNldHRpbmdzLnNldFZhbHVlKCJDdXN0b21Vc2VyQWdlbnQiLCBjb21i
by0+Y3VycmVudFRleHQoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBkZWxldGUgZGlhbG9nOwot
fQotCi12b2lkIExhdW5jaGVyV2luZG93Ojpsb2FkVVJMTGlzdEZyb21GaWxlKCkKLXsKLSAgICBR
U3RyaW5nIHNlbGVjdGVkRmlsZTsKLSNpZm5kZWYgUVRfTk9fRklMRURJQUxPRwotICAgIHNlbGVj
dGVkRmlsZSA9IFFGaWxlRGlhbG9nOjpnZXRPcGVuRmlsZU5hbWUodGhpcywgdHIoIkxvYWQgVVJM
IGxpc3QgZnJvbSBmaWxlIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIFFTdHJpbmcoKSwgdHIoIlRleHQgRmlsZXMgKCoudHh0KTs7QWxs
IEZpbGVzICgqKSIpKTsKLSNlbmRpZgotICAgIGlmIChzZWxlY3RlZEZpbGUuaXNFbXB0eSgpKQot
ICAgICAgIHJldHVybjsKLQotICAgIG1fdXJsTG9hZGVyID0gbmV3IFVybExvYWRlcih0aGlzLT5w
YWdlKCktPm1haW5GcmFtZSgpLCBzZWxlY3RlZEZpbGUsIDAsIDApOwotICAgIG1fdXJsTG9hZGVy
LT5sb2FkTmV4dCgpOwotfQotCi12b2lkIExhdW5jaGVyV2luZG93OjpwcmludFVSTChjb25zdCBR
VXJsJiB1cmwpCi17Ci0gICAgUVRleHRTdHJlYW0gb3V0cHV0KHN0ZG91dCk7Ci0gICAgb3V0cHV0
IDw8ICJMb2FkZWQ6ICIgPDwgdXJsLnRvU3RyaW5nKCkgPDwgZW5kbDsKLX0KLQotI2lmICFkZWZp
bmVkKFFUX05PX0ZJTEVESUFMT0cpICYmICFkZWZpbmVkKFFUX05PX01FU1NBR0VCT1gpCi12b2lk
IExhdW5jaGVyV2luZG93Ojpkb3dubG9hZFJlcXVlc3QoY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZy
ZXF1ZXN0KQotewotICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbWFuYWdlciA9IG5ldyBRTmV0
d29ya0FjY2Vzc01hbmFnZXIodGhpcyk7Ci0gICAgbV9yZXBseSA9IG1hbmFnZXItPmdldChyZXF1
ZXN0KTsKLSAgICBjb25uZWN0KG1fcmVwbHksIFNJR05BTChmaW5pc2hlZCgpKSwgdGhpcywgU0xP
VChmaWxlRG93bmxvYWRGaW5pc2hlZCgpKSk7Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OmZp
bGVEb3dubG9hZEZpbmlzaGVkKCkKLXsKLSAgICBRRmlsZUluZm8gZmlsZUluZihtX3JlcGx5LT5y
ZXF1ZXN0KCkudXJsKCkudG9TdHJpbmcoKSk7Ci0gICAgUVN0cmluZyByZXF1ZXN0RmlsZU5hbWUg
PSBRRGlyOjpob21lUGF0aCgpICsgIi8iICsgZmlsZUluZi5maWxlTmFtZSgpOwotICAgIFFTdHJp
bmcgZmlsZU5hbWUgPSBRRmlsZURpYWxvZzo6Z2V0U2F2ZUZpbGVOYW1lKHRoaXMsICJTYXZlIGFz
Li4uIiwgcmVxdWVzdEZpbGVOYW1lLCAiQWxsIEZpbGVzICgqKSIpOwotCi0gICAgaWYgKGZpbGVO
YW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX3JlcGx5LT5lcnJvcigp
ICE9IFFOZXR3b3JrUmVwbHk6Ok5vRXJyb3IpCi0gICAgICAgIFFNZXNzYWdlQm94Ojpjcml0aWNh
bCh0aGlzLCBRU3RyaW5nKCJEb3dubG9hZCIpLCBRU3RyaW5nKCJEb3dubG9hZCBmYWlsZWQuIikp
OwotICAgIGVsc2UgewotICAgICAgICBRRmlsZSBmaWxlKGZpbGVOYW1lKTsKLSAgICAgICAgZmls
ZS5vcGVuKFFJT0RldmljZTo6V3JpdGVPbmx5KTsKLSAgICAgICAgZmlsZS53cml0ZShtX3JlcGx5
LT5yZWFkQWxsKCkpOwotICAgICAgICBmaWxlLmNsb3NlKCk7Ci0gICAgICAgIFFNZXNzYWdlQm94
OjppbmZvcm1hdGlvbih0aGlzLCBRU3RyaW5nKCJEb3dubG9hZCIpLCBmaWxlTmFtZSArIFFTdHJp
bmcoIiBkb3dubG9hZGVkIHN1Y2Nlc3NmdWxseS4iKSk7Ci0gICAgfQotfQotI2VuZGlmCi0KLXZv
aWQgTGF1bmNoZXJXaW5kb3c6OnVwZGF0ZUZQUyhpbnQgZnBzKQotewotICAgIFFTdHJpbmcgZnBz
U3RhdHVzVGV4dCA9IFFTdHJpbmcoIkN1cnJlbnQgRlBTOiAlMSIpLmFyZyhmcHMpOwotCi0gICAg
c3RhdHVzQmFyKCktPnNob3dNZXNzYWdlKGZwc1N0YXR1c1RleHQpOwotfQotCi12b2lkIExhdW5j
aGVyV2luZG93Ojp0b2dnbGVMb2NhbFN0b3JhZ2UoYm9vbCB0b2dnbGUpCi17Ci0gICAgbV93aW5k
b3dPcHRpb25zLnVzZUxvY2FsU3RvcmFnZSA9IHRvZ2dsZTsKLSAgICBwYWdlKCktPnNldHRpbmdz
KCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkxvY2FsU3RvcmFnZUVuYWJsZWQsIHRvZ2ds
ZSk7Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZU9mZmxpbmVTdG9yYWdlRGF0YWJh
c2UoYm9vbCB0b2dnbGUpCi17Ci0gICAgbV93aW5kb3dPcHRpb25zLnVzZU9mZmxpbmVTdG9yYWdl
RGF0YWJhc2UgPSB0b2dnbGU7Ci0gICAgcGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUo
UVdlYlNldHRpbmdzOjpPZmZsaW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZCwgdG9nZ2xlKTsKLX0K
LQotdm9pZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xlT2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUo
Ym9vbCB0b2dnbGUpCi17Ci0gICAgbV93aW5kb3dPcHRpb25zLnVzZU9mZmxpbmVXZWJBcHBsaWNh
dGlvbkNhY2hlID0gdG9nZ2xlOwotICAgIHBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRl
KFFXZWJTZXR0aW5nczo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkLCB0b2dnbGUp
OwotfQotCi12b2lkIExhdW5jaGVyV2luZG93OjpzZXRPZmZsaW5lU3RvcmFnZURlZmF1bHRRdW90
YSgpCi17Ci0gICAgLy8gRm9yIGNvbW1hbmQgbGluZSBleGVjdXRpb24sIHF1b3RhIHNpemUgaXMg
dGFrZW4gZnJvbSBjb21tYW5kIGxpbmUuICAgCi0gICAgaWYgKG1fd2luZG93T3B0aW9ucy5vZmZs
aW5lU3RvcmFnZURlZmF1bHRRdW90YVNpemUpCi0gICAgICAgIHBhZ2UoKS0+c2V0dGluZ3MoKS0+
c2V0T2ZmbGluZVN0b3JhZ2VEZWZhdWx0UXVvdGEobV93aW5kb3dPcHRpb25zLm9mZmxpbmVTdG9y
YWdlRGVmYXVsdFF1b3RhU2l6ZSk7Ci0gICAgZWxzZSB7Ci0jaWZuZGVmIFFUX05PX0lOUFVURElB
TE9HCi0gICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIC8vIE1heGltdW0gc2l6ZSBpcyBzZXQgdG8g
MjUgKiAxMDI0ICogMTAyNC4KLSAgICAgICAgaW50IHF1b3RhU2l6ZSA9IFFJbnB1dERpYWxvZzo6
Z2V0SW50KHRoaXMsICJPZmZsaW5lIFN0b3JhZ2UgRGVmYXVsdCBRdW90YSBTaXplIiAsICJRdW90
YSBTaXplIiwgMCwgMCwgMjYyMTQ0MDAsIDEsICZvayk7Ci0gICAgICAgIGlmIChvaykgCi0gICAg
ICAgICAgICBwYWdlKCktPnNldHRpbmdzKCktPnNldE9mZmxpbmVTdG9yYWdlRGVmYXVsdFF1b3Rh
KHF1b3RhU2l6ZSk7Ci0jZW5kaWYKLSAgICB9Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OnRv
Z2dsZVNjcm9sbEFuaW1hdG9yKGJvb2wgdG9nZ2xlKQotewotICAgIG1fd2luZG93T3B0aW9ucy5l
bmFibGVTY3JvbGxBbmltYXRvciA9IHRvZ2dsZTsKLSAgICBwYWdlKCktPnNldHRpbmdzKCktPnNl
dEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlNjcm9sbEFuaW1hdG9yRW5hYmxlZCwgdG9nZ2xlKTsK
LX0KLQotTGF1bmNoZXJXaW5kb3cqIExhdW5jaGVyV2luZG93OjpuZXdXaW5kb3coKQotewotICAg
IExhdW5jaGVyV2luZG93KiBtdyA9IG5ldyBMYXVuY2hlcldpbmRvdygmbV93aW5kb3dPcHRpb25z
KTsKLSAgICBtdy0+c2hvdygpOwotICAgIHJldHVybiBtdzsKLX0KLQotTGF1bmNoZXJXaW5kb3cq
IExhdW5jaGVyV2luZG93OjpjbG9uZVdpbmRvdygpCi17Ci0gICAgTGF1bmNoZXJXaW5kb3cqIG13
ID0gbmV3IExhdW5jaGVyV2luZG93KCZtX3dpbmRvd09wdGlvbnMsIHFvYmplY3RfY2FzdDxRR3Jh
cGhpY3NWaWV3Kj4obV92aWV3KS0+c2NlbmUoKSk7Ci0gICAgbXctPnNob3coKTsKLSAgICByZXR1
cm4gbXc7Ci19Ci0KLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLXZvaWQgTGF1bmNoZXJXaW5kb3c6
OnNob3dGaW5kQmFyKCkKLXsKLSAgICBpZiAoIW1fZmluZEJhci0+aXNWaXNpYmxlKCkpIHsKLSAg
ICAgICAgbV9maW5kQmFyLT5zZXRWaXNpYmxlKHRydWUpOwotICAgICAgICBtX2xpbmVFZGl0LT5z
ZXRUZXh0KHBhZ2UoKS0+c2VsZWN0ZWRUZXh0KCkpOwotICAgICAgICBtX2xpbmVFZGl0LT5zZXRG
b2N1cyhRdDo6UG9wdXBGb2N1c1JlYXNvbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9maW5k
QmFyLT5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgICAgICAgcGFnZSgpLT5maW5kVGV4dCgiIiwgUVdl
YlBhZ2U6OkhpZ2hsaWdodEFsbE9jY3VycmVuY2VzKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF1bmNo
ZXJXaW5kb3c6OmZpbmQoaW50IG1vZGUgPSBzX2ZpbmROb3JtYWxGbGFnKQotewotICAgIFFQYWxl
dHRlIHBhbGV0dGU7Ci0gICAgYm9vbCBmb3VuZDsKLSAgICBwYWxldHRlLnNldENvbG9yKG1fbGlu
ZUVkaXQtPmJhY2tncm91bmRSb2xlKCksIFF0Ojp3aGl0ZSk7Ci0gICAgcGFnZSgpLT5maW5kVGV4
dCgiIiwgUUZsYWcoUVdlYlBhZ2U6OkhpZ2hsaWdodEFsbE9jY3VycmVuY2VzKSk7Ci0KLSAgICBt
X2ZpbmRGbGFnID0gbV9maW5kRmxhZyBeIG1vZGU7Ci0gICAgaWYgKG1vZGUgPT0gc19maW5kTm9y
bWFsRmxhZyB8fCBtb2RlID09IFFXZWJQYWdlOjpGaW5kQmFja3dhcmQpIHsKLSAgICAgICAgZm91
bmQgPSBwYWdlKCktPmZpbmRUZXh0KG1fbGluZUVkaXQtPnRleHQoKSwgUUZsYWcobV9maW5kRmxh
ZyAmIH5RV2ViUGFnZTo6SGlnaGxpZ2h0QWxsT2NjdXJyZW5jZXMpKTsKLSAgICAgICAgbV9maW5k
RmxhZyA9IG1fZmluZEZsYWcgXiBtb2RlOwotCi0gICAgICAgIGlmIChmb3VuZCB8fCBtX2xpbmVF
ZGl0LT50ZXh0KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9saW5lRWRpdC0+c2V0UGFsZXR0
ZShwYWxldHRlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwYWxldHRlLnNldENvbG9y
KG1fbGluZUVkaXQtPmJhY2tncm91bmRSb2xlKCksIFFDb2xvcigyNTUsIDAsIDAsIDEyNykpOwot
ICAgICAgICAgICAgbV9saW5lRWRpdC0+c2V0UGFsZXR0ZShwYWxldHRlKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChtX2ZpbmRGbGFnICYgUVdlYlBhZ2U6OkhpZ2hsaWdodEFsbE9jY3Vy
cmVuY2VzKQotICAgICAgICBwYWdlKCktPmZpbmRUZXh0KG1fbGluZUVkaXQtPnRleHQoKSwgUUZs
YWcobV9maW5kRmxhZykpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9RdFRlc3RCcm93
c2VyL2xhdW5jaGVyd2luZG93LmggYi9Ub29scy9RdFRlc3RCcm93c2VyL2xhdW5jaGVyd2luZG93
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NWYyMWI3NDBlMjUwODhhY2UwYTBm
ZjMwNzAwYzFhMGQ2MmIzMWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvVG9vbHMvUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5oCisrKyAvZGV2L251
bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR2lyaXNoIFJhbWFrcmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2
IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgotICoKLSAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBsYXVuY2hlcndpbmRvd19oCi0jZGVmaW5lIGxhdW5jaGVy
d2luZG93X2gKLQotI2luY2x1ZGUgPFF0TmV0d29yay9RTmV0d29ya1JlcXVlc3Q+Ci0KLSNpZm5k
ZWYgUVRfTk9fT1BFTkdMCi0jaW5jbHVkZSA8UXRPcGVuR0wvUUdMV2lkZ2V0PgotI2VuZGlmCi0K
LSNpbmNsdWRlIDxRRGVidWc+Ci0KLSNpbmNsdWRlIDxjc3RkaW8+Ci0jaW5jbHVkZSA8cWV2ZW50
Lmg+Ci0jaW5jbHVkZSA8cXdlYmVsZW1lbnQuaD4KLSNpbmNsdWRlIDxxd2ViZnJhbWUuaD4KLSNp
bmNsdWRlIDxxd2ViaW5zcGVjdG9yLmg+Ci0jaW5jbHVkZSA8cXdlYnNldHRpbmdzLmg+Ci0KLSNp
bmNsdWRlICJtYWlud2luZG93LmgiCi0jaW5jbHVkZSAidXJsbG9hZGVyLmgiCi0jaW5jbHVkZSAi
dXRpbHMuaCIKLSNpbmNsdWRlICJ3ZWJpbnNwZWN0b3IuaCIKLSNpbmNsdWRlICJ3ZWJwYWdlLmgi
Ci0jaW5jbHVkZSAid2Vidmlldy5oIgotCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFQcm9w
ZXJ0eUFuaW1hdGlvbjsKLWNsYXNzIFFMaW5lRWRpdDsKLVFUX0VORF9OQU1FU1BBQ0UKLQotc3Ry
dWN0IEhpZ2hsaWdodGVkRWxlbWVudDsKLQotY2xhc3MgV2luZG93T3B0aW9ucyB7Ci1wdWJsaWM6
Ci0gICAgV2luZG93T3B0aW9ucygpCi0gICAgICAgIDogdXNlR3JhcGhpY3NWaWV3KGZhbHNlKQot
ICAgICAgICAsIHVzZURpc2tDYWNoZShmYWxzZSkKLSAgICAgICAgLCB1c2VDb21wb3NpdGluZyh0
cnVlKQotICAgICAgICAsIHVzZVRpbGVkQmFja2luZ1N0b3JlKGZhbHNlKQotICAgICAgICAsIHVz
ZVdlYkdMKGZhbHNlKQotICAgICAgICAsIHVzZVdlYkF1ZGlvKGZhbHNlKQotICAgICAgICAsIHVz
ZUZyYW1lRmxhdHRlbmluZyhmYWxzZSkKLSAgICAgICAgLCBjYWNoZVdlYlZpZXcoZmFsc2UpCi0g
ICAgICAgICwgc2hvd0ZyYW1lUmF0ZShmYWxzZSkKLSAgICAgICAgLCByZXNpemVzVG9Db250ZW50
cyhmYWxzZSkKLSAgICAgICAgLCB2aWV3cG9ydFVwZGF0ZU1vZGUoUUdyYXBoaWNzVmlldzo6TWlu
aW1hbFZpZXdwb3J0VXBkYXRlKQotICAgICAgICAsIHVzZUxvY2FsU3RvcmFnZShmYWxzZSkKLSAg
ICAgICAgLCB1c2VPZmZsaW5lU3RvcmFnZURhdGFiYXNlKGZhbHNlKQotICAgICAgICAsIHVzZU9m
ZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlKGZhbHNlKQotICAgICAgICAsIHVzZURpc2tDb29raWVz
KHRydWUpCi0gICAgICAgICwgZW5hYmxlU2Nyb2xsQW5pbWF0b3IoZmFsc2UpCi0gICAgICAgICwg
b2ZmbGluZVN0b3JhZ2VEZWZhdWx0UXVvdGFTaXplKDApCi0jaWZuZGVmIFFUX05PX09QRU5HTAot
ICAgICAgICAsIHVzZVFHTFdpZGdldFZpZXdwb3J0KGZhbHNlKQotI2VuZGlmCi0gICAgICAgICwg
cHJpbnRMb2FkZWRVcmxzKGZhbHNlKQotICAgICAgICAsIHN0YXJ0TWF4aW1pemVkKGZhbHNlKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBib29sIHVzZUdyYXBoaWNzVmlldzsKLSAgICBib29sIHVzZURp
c2tDYWNoZTsKLSAgICBib29sIHVzZUNvbXBvc2l0aW5nOwotICAgIGJvb2wgdXNlVGlsZWRCYWNr
aW5nU3RvcmU7Ci0gICAgYm9vbCB1c2VXZWJHTDsKLSAgICBib29sIHVzZVdlYkF1ZGlvOwotICAg
IGJvb2wgdXNlRnJhbWVGbGF0dGVuaW5nOwotICAgIGJvb2wgY2FjaGVXZWJWaWV3OwotICAgIGJv
b2wgc2hvd0ZyYW1lUmF0ZTsKLSAgICBib29sIHJlc2l6ZXNUb0NvbnRlbnRzOwotICAgIFFHcmFw
aGljc1ZpZXc6OlZpZXdwb3J0VXBkYXRlTW9kZSB2aWV3cG9ydFVwZGF0ZU1vZGU7Ci0gICAgYm9v
bCB1c2VMb2NhbFN0b3JhZ2U7Ci0gICAgYm9vbCB1c2VPZmZsaW5lU3RvcmFnZURhdGFiYXNlOwot
ICAgIGJvb2wgdXNlT2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGU7Ci0gICAgYm9vbCB1c2VEaXNr
Q29va2llczsKLSAgICBib29sIGVuYWJsZVNjcm9sbEFuaW1hdG9yOwotICAgIHF1aW50NjQgb2Zm
bGluZVN0b3JhZ2VEZWZhdWx0UXVvdGFTaXplOwotI2lmbmRlZiBRVF9OT19PUEVOR0wKLSAgICBi
b29sIHVzZVFHTFdpZGdldFZpZXdwb3J0OwotI2VuZGlmCi0gICAgYm9vbCBwcmludExvYWRlZFVy
bHM7Ci0gICAgUVVybCBpbnNwZWN0b3JVcmw7Ci0gICAgcXVpbnQxNiByZW1vdGVJbnNwZWN0b3JQ
b3J0OwotICAgIGJvb2wgc3RhcnRNYXhpbWl6ZWQ7Ci19OwotCi1jbGFzcyBMYXVuY2hlcldpbmRv
dyA6IHB1YmxpYyBNYWluV2luZG93IHsKLSAgICBRX09CSkVDVAotCi1wdWJsaWM6Ci0gICAgTGF1
bmNoZXJXaW5kb3coV2luZG93T3B0aW9ucyogZGF0YSA9IDAsIFFHcmFwaGljc1NjZW5lKiBzaGFy
ZWRTY2VuZSA9IDApOwotICAgIHZpcnR1YWwgfkxhdW5jaGVyV2luZG93KCk7Ci0KLSAgICB2b2lk
IHNlbmRUb3VjaEV2ZW50KCk7Ci0KLSAgICBib29sIGV2ZW50RmlsdGVyKFFPYmplY3QqIG9iaiwg
UUV2ZW50KiBldmVudCk7Ci0KLXByb3RlY3RlZCBRX1NMT1RTOgotICAgIHZvaWQgbG9hZFN0YXJ0
ZWQoKTsKLSAgICB2b2lkIGxvYWRGaW5pc2hlZCgpOwotCi0gICAgdm9pZCBzaG93TGlua0hvdmVy
KGNvbnN0IFFTdHJpbmcgJmxpbmssIGNvbnN0IFFTdHJpbmcgJnRvb2xUaXApOwotCi0gICAgdm9p
ZCB6b29tSW4oKTsKLSAgICB2b2lkIHpvb21PdXQoKTsKLSAgICB2b2lkIHJlc2V0Wm9vbSgpOwot
ICAgIHZvaWQgdG9nZ2xlWm9vbVRleHRPbmx5KGJvb2wgb24pOwotICAgIHZvaWQgem9vbUFuaW1h
dGlvbkZpbmlzaGVkKCk7Ci0KLSAgICB2b2lkIHByaW50KCk7Ci0gICAgdm9pZCBzY3JlZW5zaG90
KCk7Ci0KLSAgICB2b2lkIHNldEVkaXRhYmxlKGJvb2wgb24pOwotCi0gICAgLyogdm9pZCBkdW1w
UGx1Z2lucygpICovCi0gICAgdm9pZCBkdW1wSHRtbCgpOwotCi0gICAgdm9pZCBsb2FkVVJMTGlz
dEZyb21GaWxlKCk7Ci0KLSAgICB2b2lkIHNldERpc2tDYWNoZShib29sIGVuYWJsZSk7Ci0gICAg
dm9pZCBzZXRUb3VjaE1vY2tpbmcoYm9vbCBvbik7Ci0gICAgdm9pZCB0b2dnbGVXZWJWaWV3KGJv
b2wgZ3JhcGhpY3NCYXNlZCk7Ci0gICAgdm9pZCB0b2dnbGVBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KGJvb2wgdG9nZ2xlKTsKLSAgICB2b2lkIHRvZ2dsZVRpbGVkQmFja2luZ1N0b3JlKGJvb2wgdG9n
Z2xlKTsKLSAgICB2b2lkIHRvZ2dsZVJlc2l6ZXNUb0NvbnRlbnRzKGJvb2wgdG9nZ2xlKTsKLSAg
ICB2b2lkIHRvZ2dsZVdlYkdMKGJvb2wgdG9nZ2xlKTsKLSAgICB2b2lkIHRvZ2dsZVdlYkF1ZGlv
KGJvb2wgdG9nZ2xlKTsKLSAgICB2b2lkIHRvZ2dsZVNwYXRpYWxOYXZpZ2F0aW9uKGJvb2wgYik7
Ci0gICAgdm9pZCB0b2dnbGVGdWxsU2NyZWVuTW9kZShib29sIGVuYWJsZSk7Ci0gICAgdm9pZCB0
b2dnbGVGcmFtZUZsYXR0ZW5pbmcoYm9vbCB0b2dnbGUpOwotICAgIHZvaWQgdG9nZ2xlSmF2YVNj
cmlwdEVuYWJsZWQoYm9vbCBlbmFibGUpOwotICAgIHZvaWQgdG9nZ2xlSW50ZXJydXB0aW5nSmF2
YVNjcmlwdEVuYWJsZWQoYm9vbCBlbmFibGUpOwotICAgIHZvaWQgdG9nZ2xlSmF2YXNjcmlwdENh
bk9wZW5XaW5kb3dzKGJvb2wgZW5hYmxlKTsKLSAgICB2b2lkIHRvZ2dsZUF1dG9Mb2FkSW1hZ2Vz
KGJvb2wgZW5hYmxlKTsKLSAgICB2b2lkIHNldFVzZURpc2tDb29raWVzKGJvb2wgZW5hYmxlKTsK
LSAgICB2b2lkIGNsZWFyQ29va2llcygpOwotICAgIHZvaWQgdG9nZ2xlUGx1Z2lucyhib29sIGVu
YWJsZSk7Ci0gICAgdm9pZCB0b2dnbGVMb2NhbFN0b3JhZ2UoYm9vbCB0b2dnbGUpOwotICAgIHZv
aWQgdG9nZ2xlT2ZmbGluZVN0b3JhZ2VEYXRhYmFzZShib29sIHRvZ2dsZSk7Ci0gICAgdm9pZCB0
b2dnbGVPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZShib29sIHRvZ2dsZSk7Ci0gICAgdm9pZCB0
b2dnbGVTY3JvbGxBbmltYXRvcihib29sIHRvZ2dsZSk7Ci0gICAgdm9pZCBzZXRPZmZsaW5lU3Rv
cmFnZURlZmF1bHRRdW90YSgpOwotI2lmbmRlZiBRVF9OT19MSU5FRURJVAotICAgIHZvaWQgc2hv
d0ZpbmRCYXIoKTsKLSAgICB2b2lkIGZpbmQoaW50IG1vZGUpOwotI2VuZGlmCi0jaWZuZGVmIFFU
X05PX09QRU5HTAotICAgIHZvaWQgdG9nZ2xlUUdMV2lkZ2V0Vmlld3BvcnQoYm9vbCBlbmFibGUp
OwotI2VuZGlmCi0KLSAgICB2b2lkIGNoYW5nZVZpZXdwb3J0VXBkYXRlTW9kZShpbnQgbW9kZSk7
Ci0gICAgdm9pZCBhbmltYXRlZEZsaXAoKTsKLSAgICB2b2lkIGFuaW1hdGVkWUZsaXAoKTsKLSAg
ICB2b2lkIHNlbGVjdEVsZW1lbnRzKCk7Ci0gICAgdm9pZCBjbGVhclNlbGVjdGlvbigpOwotICAg
IHZvaWQgc2hvd0ZQUyhib29sIGVuYWJsZSk7Ci0gICAgdm9pZCBzaG93VXNlckFnZW50RGlhbG9n
KCk7Ci0KLSAgICB2b2lkIHByaW50VVJMKGNvbnN0IFFVcmwmKTsKLSNpZiAhZGVmaW5lZChRVF9O
T19GSUxFRElBTE9HKSAmJiAhZGVmaW5lZChRVF9OT19NRVNTQUdFQk9YKQotICAgIHZvaWQgZG93
bmxvYWRSZXF1ZXN0KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYpOwotICAgIHZvaWQgZmlsZURvd25s
b2FkRmluaXNoZWQoKTsKLSNlbmRpZgotCi1wdWJsaWMgUV9TTE9UUzoKLSAgICBMYXVuY2hlcldp
bmRvdyogbmV3V2luZG93KCk7Ci0gICAgTGF1bmNoZXJXaW5kb3cqIGNsb25lV2luZG93KCk7Ci0g
ICAgdm9pZCB1cGRhdGVGUFMoaW50IGZwcyk7Ci0KLVFfU0lHTkFMUzoKLSAgICB2b2lkIGVudGVy
ZWRGdWxsU2NyZWVuTW9kZShib29sIG9uKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGluaXQoKTsK
LSAgICB2b2lkIGluaXRpYWxpemVWaWV3KCk7Ci0gICAgdm9pZCBjcmVhdGVDaHJvbWUoKTsKLSAg
ICB2b2lkIGFwcGx5UHJlZnMoKTsKLSAgICB2b2lkIGFwcGx5Wm9vbSgpOwotCi0gICAgYm9vbCBp
c0dyYXBoaWNzQmFzZWQoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgUVZlY3Rvcjxp
bnQ+IG1fem9vbUxldmVsczsKLSAgICBpbnQgbV9jdXJyZW50Wm9vbTsKLQotICAgIFVybExvYWRl
ciogbV91cmxMb2FkZXI7Ci0KLSAgICBRV2lkZ2V0KiBtX3ZpZXc7Ci0gICAgV2ViSW5zcGVjdG9y
KiBtX2luc3BlY3RvcjsKLQotICAgIFdpbmRvd09wdGlvbnMgbV93aW5kb3dPcHRpb25zOwotCi0g
ICAgUUFjdGlvbiogbV9mb3JtYXRNZW51QWN0aW9uOwotCi0gICAgUVByb3BlcnR5QW5pbWF0aW9u
KiBtX3pvb21BbmltYXRpb247Ci0jaWYgIWRlZmluZWQoUVRfTk9fRklMRURJQUxPRykgJiYgIWRl
ZmluZWQoUVRfTk9fTUVTU0FHRUJPWCkKLSAgICBRTmV0d29ya1JlcGx5KiBtX3JlcGx5OwotI2Vu
ZGlmCi0gICAgUUxpc3Q8UVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQ+IG1fdG91Y2hQb2ludHM7Ci0g
ICAgUUxpc3Q8SGlnaGxpZ2h0ZWRFbGVtZW50PiBtX2hpZ2hsaWdodGVkRWxlbWVudHM7Ci0gICAg
Ym9vbCBtX3RvdWNoTW9ja2luZzsKLQotICAgIFFTdHJpbmcgbV9pbnB1dFVybDsKLSNpZm5kZWYg
UVRfTk9fTElORUVESVQKLSAgICBRVG9vbEJhciogbV9maW5kQmFyOwotICAgIFFMaW5lRWRpdCog
bV9saW5lRWRpdDsKLSAgICBpbnQgbV9maW5kRmxhZzsKLSAgICBzdGF0aWMgY29uc3QgaW50IHNf
ZmluZE5vcm1hbEZsYWcgPSAwOwotI2VuZGlmCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rv
b2xzL1F0VGVzdEJyb3dzZXIvbG9jYXRpb25lZGl0LmNwcCBiL1Rvb2xzL1F0VGVzdEJyb3dzZXIv
bG9jYXRpb25lZGl0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ4OWIyYjJl
MmMxZWZmZTk0ZjY1MDYxNTUyYzY1MmEyYjk3YjlhZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9RdFRlc3RCcm93c2VyL2xvY2F0aW9uZWRpdC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBBbmRyZWFzIEtsaW5nIDxrbGluZ0B3ZWJraXQub3JnPgotICoKLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImxvY2F0aW9uZWRpdC5oIgot
Ci0jaWZuZGVmIFFUX05PX0lOUFVURElBTE9HCi0KLXN0YXRpYyBjb25zdCBRU2l6ZSBnUGFnZUlj
b25TaXplKDE2LCAxNik7Ci0KLXN0YXRpYyBRUGl4bWFwIGRlZmF1bHRQYWdlSWNvbigpCi17Ci0g
ICAgc3RhdGljIFFQaXhtYXAgaWNvbjsKLSAgICBpZiAoaWNvbi5pc051bGwoKSkKLSAgICAgICAg
aWNvbi5sb2FkKCI6L2Zhdmljb24ucG5nIik7Ci0KLSAgICByZXR1cm4gaWNvbjsKLX0KLQotTG9j
YXRpb25FZGl0OjpMb2NhdGlvbkVkaXQoUVdpZGdldCogcGFyZW50KQotICAgIDogUUxpbmVFZGl0
KHBhcmVudCkKLSAgICAsIG1fcHJvZ3Jlc3MoMCkKLXsKLSAgICBtX2NsZWFyVGltZXIuc2V0U2lu
Z2xlU2hvdCh0cnVlKTsKLSAgICBjb25uZWN0KCZtX2NsZWFyVGltZXIsIFNJR05BTCh0aW1lb3V0
KCkpLCB0aGlzLCBTTE9UKHJlc2V0KCkpKTsKLQotICAgIG1fcGFnZUljb25MYWJlbCA9IG5ldyBR
TGFiZWwodGhpcyk7Ci0gICAgbV9wYWdlSWNvbkxhYmVsLT5zZXRGaXhlZFNpemUoZ1BhZ2VJY29u
U2l6ZSk7Ci0gICAgbV9wYWdlSWNvbkxhYmVsLT5zZXRQaXhtYXAoZGVmYXVsdFBhZ2VJY29uKCkp
OwotfQotCi12b2lkIExvY2F0aW9uRWRpdDo6c2V0UGFnZUljb24oY29uc3QgUUljb24mIGljb24p
Ci17Ci0gICAgaWYgKGljb24uaXNOdWxsKCkpCi0gICAgICAgIG1fcGFnZUljb25MYWJlbC0+c2V0
UGl4bWFwKGRlZmF1bHRQYWdlSWNvbigpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcGFnZUljb25M
YWJlbC0+c2V0UGl4bWFwKGljb24ucGl4bWFwKGdQYWdlSWNvblNpemUpKTsKLX0KLQotdm9pZCBM
b2NhdGlvbkVkaXQ6OnNldFByb2dyZXNzKGludCBwcm9ncmVzcykKLXsKLSAgICBtX2NsZWFyVGlt
ZXIuc3RvcCgpOwotICAgIG1fcHJvZ3Jlc3MgPSBwcm9ncmVzczsKLSAgICB1cGRhdGUoKTsKLX0K
LQotdm9pZCBMb2NhdGlvbkVkaXQ6OnJlc2V0KCkKLXsKLSAgICBzZXRQcm9ncmVzcygwKTsKLX0K
LQotdm9pZCBMb2NhdGlvbkVkaXQ6OnJlc2l6ZUV2ZW50KFFSZXNpemVFdmVudCopCi17Ci0gICAg
dXBkYXRlSW50ZXJuYWxHZW9tZXRyeSgpOwotfQotCi12b2lkIExvY2F0aW9uRWRpdDo6dXBkYXRl
SW50ZXJuYWxHZW9tZXRyeSgpCi17Ci0gICAgUVN0eWxlT3B0aW9uRnJhbWVWMyBzdHlsZU9wdGlv
bjsKLSAgICBpbml0U3R5bGVPcHRpb24oJnN0eWxlT3B0aW9uKTsKLQotICAgIFFSZWN0IHRleHRS
ZWN0ID0gc3R5bGUoKS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9MaW5lRWRpdENvbnRlbnRz
LCAmc3R5bGVPcHRpb24sIHRoaXMpOwotCi0gICAgY29uc3QgaW50IHNwYWNpbmcgPSAyOwotCi0g
ICAgaW50IHggPSB0ZXh0UmVjdC54KCkgKyBzcGFjaW5nOwotICAgIGludCB5ID0gKHRleHRSZWN0
LmNlbnRlcigpLnkoKSArIDEpIC0gZ1BhZ2VJY29uU2l6ZS5oZWlnaHQoKSAvIDI7Ci0KLSAgICBt
X3BhZ2VJY29uTGFiZWwtPm1vdmUoeCwgeSk7Ci0KLSAgICBRTWFyZ2lucyBtYXJnaW5zID0gdGV4
dE1hcmdpbnMoKTsKLSAgICBtYXJnaW5zLnNldExlZnQobV9wYWdlSWNvbkxhYmVsLT5zaXplSGlu
dCgpLndpZHRoKCkgKyBzcGFjaW5nKTsKLSAgICBzZXRUZXh0TWFyZ2lucyhtYXJnaW5zKTsKLX0K
LQotdm9pZCBMb2NhdGlvbkVkaXQ6OnBhaW50RXZlbnQoUVBhaW50RXZlbnQqIGV2KQotewotICAg
IFFDb2xvciBiYWNrZ3JvdW5kQ29sb3IgPSBRQXBwbGljYXRpb246OnBhbGV0dGUoKS5jb2xvcihR
UGFsZXR0ZTo6QmFzZSk7Ci0gICAgUUNvbG9yIHByb2dyZXNzQ29sb3IgPSBRQ29sb3IoMTIwLCAx
ODAsIDI0MCk7Ci0gICAgUVBhbGV0dGUgcCA9IHBhbGV0dGUoKTsKLQotICAgIGlmICghbV9wcm9n
cmVzcykKLSAgICAgICAgcC5zZXRCcnVzaChRUGFsZXR0ZTo6QmFzZSwgYmFja2dyb3VuZENvbG9y
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgUUxpbmVhckdyYWRpZW50IGdyYWRpZW50KDAsIDAsIHdp
ZHRoKCksIDApOwotICAgICAgICBncmFkaWVudC5zZXRDb2xvckF0KDAsIHByb2dyZXNzQ29sb3Ip
OwotICAgICAgICBncmFkaWVudC5zZXRDb2xvckF0KCgoZG91YmxlKSBtX3Byb2dyZXNzKSAvIDEw
MCwgcHJvZ3Jlc3NDb2xvcik7Ci0gICAgICAgIGlmIChtX3Byb2dyZXNzICE9IDEwMCkKLSAgICAg
ICAgICAgIGdyYWRpZW50LnNldENvbG9yQXQoKGRvdWJsZSkgbV9wcm9ncmVzcyAvIDEwMCArIDAu
MDAxLCBiYWNrZ3JvdW5kQ29sb3IpOwotICAgICAgICBwLnNldEJydXNoKFFQYWxldHRlOjpCYXNl
LCBncmFkaWVudCk7Ci0gICAgfQotICAgIHNldFBhbGV0dGUocCk7Ci0KLSAgICBRTGluZUVkaXQ6
OnBhaW50RXZlbnQoZXYpOwotCi0gICAgaWYgKG1fcHJvZ3Jlc3MgPT0gMTAwKQotICAgICAgICBt
X2NsZWFyVGltZXIuc3RhcnQoMTAwKTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9R
dFRlc3RCcm93c2VyL2xvY2F0aW9uZWRpdC5oIGIvVG9vbHMvUXRUZXN0QnJvd3Nlci9sb2NhdGlv
bmVkaXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFlMDY5ZDdiNzBjNzZmNDNk
NzNiYzcxYTZiNjk4NjRhMWIwNWM3My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Ub29scy9RdFRlc3RCcm93c2VyL2xvY2F0aW9uZWRpdC5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgbG9jYXRpb25lZGl0X2gKLSNkZWZpbmUgbG9jYXRp
b25lZGl0X2gKLQotI2lmbmRlZiBRVF9OT19JTlBVVERJQUxPRwotI2luY2x1ZGUgPFFBcHBsaWNh
dGlvbj4KLSNpbmNsdWRlIDxRSWNvbj4KLSNpbmNsdWRlIDxRTGFiZWw+Ci0jaW5jbHVkZSA8UUxp
bmVFZGl0PgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkZyYW1lVjM+Ci0jaW5jbHVkZSA8UVRpbWVy
PgotCi1jbGFzcyBMb2NhdGlvbkVkaXQgOiBwdWJsaWMgUUxpbmVFZGl0IHsKLSAgICBRX09CSkVD
VAotCi1wdWJsaWM6Ci0gICAgTG9jYXRpb25FZGl0KFFXaWRnZXQqIHBhcmVudCA9IDApOwotCi0g
ICAgdm9pZCBzZXRQYWdlSWNvbihjb25zdCBRSWNvbiYpOwotCi1wdWJsaWMgUV9TTE9UUzoKLSAg
ICB2b2lkIHNldFByb2dyZXNzKGludCBwcm9ncmVzcyk7Ci0KLXByaXZhdGUgUV9TTE9UUzoKLSAg
ICB2b2lkIHJlc2V0KCk7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRFdmVu
dChRUGFpbnRFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCByZXNpemVFdmVudChRUmVzaXplRXZl
bnQqKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0ZUludGVybmFsR2VvbWV0cnkoKTsKLQot
ICAgIGludCBtX3Byb2dyZXNzOwotICAgIFFUaW1lciBtX2NsZWFyVGltZXI7Ci0gICAgUUxhYmVs
KiBtX3BhZ2VJY29uTGFiZWw7Ci19OwotCi0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9v
bHMvUXRUZXN0QnJvd3Nlci9tYWlud2luZG93LmNwcCBiL1Rvb2xzL1F0VGVzdEJyb3dzZXIvbWFp
bndpbmRvdy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MjE3Njk2YmQ0MmQx
NzY5Zjg5NmY5NzBhYTEwNzgxMDU3NzhlN2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvUXRUZXN0QnJvd3Nlci9tYWlud2luZG93LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0
IChDKSAyMDA5IEdpcmlzaCBSYW1ha3Jpc2huYW4gPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4KLSAq
IENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAqCi0gKiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJtYWlud2luZG93LmgiCi0KLSNpbmNsdWRl
ICJsb2NhdGlvbmVkaXQuaCIKLSNpbmNsdWRlICJ1dGlscy5oIgotCi0jaW5jbHVkZSA8UUFjdGlv
bj4KLSNpZm5kZWYgUVRfTk9fSU5QVVRESUFMT0cKLSNpbmNsdWRlIDxRQ29tcGxldGVyPgotI2Vu
ZGlmCi0jaWZuZGVmIFFUX05PX0ZJTEVESUFMT0cKLSNpbmNsdWRlIDxRRmlsZURpYWxvZz4KLSNl
bmRpZgotCi1NYWluV2luZG93OjpNYWluV2luZG93KCkKLSAgICA6IG1fcGFnZShuZXcgV2ViUGFn
ZSh0aGlzKSkKLSAgICAsIG1fdG9vbEJhcigwKQotICAgICwgdXJsRWRpdCgwKQotewotICAgIHNl
dEF0dHJpYnV0ZShRdDo6V0FfRGVsZXRlT25DbG9zZSk7Ci0gICAgaWYgKHFnZXRlbnYoIlFUVEVT
VEJST1dTRVJfVVNFX0FSR0JfVklTVUFMUyIpLnRvSW50KCkgPT0gMSkKLSAgICAgICAgc2V0QXR0
cmlidXRlKFF0OjpXQV9UcmFuc2x1Y2VudEJhY2tncm91bmQpOwotCi0gICAgYnVpbGRVSSgpOwot
fQotCi12b2lkIE1haW5XaW5kb3c6OmJ1aWxkVUkoKQotewotICAgIGRlbGV0ZSBtX3Rvb2xCYXI7
Ci0KLSAgICBtX3Rvb2xCYXIgPSBhZGRUb29sQmFyKCJOYXZpZ2F0aW9uIik7Ci0gICAgUUFjdGlv
biogcmVsb2FkQWN0aW9uID0gcGFnZSgpLT5hY3Rpb24oUVdlYlBhZ2U6OlJlbG9hZCk7Ci0gICAg
Y29ubmVjdChyZWxvYWRBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoKSksIHRoaXMsIFNMT1QoY2hh
bmdlTG9jYXRpb24oKSkpOwotCi0gICAgbV90b29sQmFyLT5hZGRBY3Rpb24ocGFnZSgpLT5hY3Rp
b24oUVdlYlBhZ2U6OkJhY2spKTsKLSAgICBtX3Rvb2xCYXItPmFkZEFjdGlvbihwYWdlKCktPmFj
dGlvbihRV2ViUGFnZTo6Rm9yd2FyZCkpOwotICAgIG1fdG9vbEJhci0+YWRkQWN0aW9uKHJlbG9h
ZEFjdGlvbik7Ci0gICAgbV90b29sQmFyLT5hZGRBY3Rpb24ocGFnZSgpLT5hY3Rpb24oUVdlYlBh
Z2U6OlN0b3ApKTsKLQotI2lmbmRlZiBRVF9OT19JTlBVVERJQUxPRwotICAgIHVybEVkaXQgPSBu
ZXcgTG9jYXRpb25FZGl0KG1fdG9vbEJhcik7Ci0gICAgdXJsRWRpdC0+c2V0U2l6ZVBvbGljeShR
U2l6ZVBvbGljeTo6RXhwYW5kaW5nLCB1cmxFZGl0LT5zaXplUG9saWN5KCkudmVydGljYWxQb2xp
Y3koKSk7Ci0gICAgY29ubmVjdCh1cmxFZGl0LCBTSUdOQUwocmV0dXJuUHJlc3NlZCgpKSwgU0xP
VChjaGFuZ2VMb2NhdGlvbigpKSk7Ci0gICAgUUNvbXBsZXRlciogY29tcGxldGVyID0gbmV3IFFD
b21wbGV0ZXIobV90b29sQmFyKTsKLSAgICB1cmxFZGl0LT5zZXRDb21wbGV0ZXIoY29tcGxldGVy
KTsKLSAgICBjb21wbGV0ZXItPnNldE1vZGVsKCZ1cmxNb2RlbCk7Ci0gICAgbV90b29sQmFyLT5h
ZGRXaWRnZXQodXJsRWRpdCk7Ci0KLSAgICBjb25uZWN0KHBhZ2UoKS0+bWFpbkZyYW1lKCksIFNJ
R05BTCh1cmxDaGFuZ2VkKFFVcmwpKSwgdGhpcywgU0xPVChzZXRBZGRyZXNzVXJsKFFVcmwpKSk7
Ci0gICAgY29ubmVjdChwYWdlKCksIFNJR05BTChsb2FkUHJvZ3Jlc3MoaW50KSksIHVybEVkaXQs
IFNMT1Qoc2V0UHJvZ3Jlc3MoaW50KSkpOwotI2VuZGlmCi0KLSAgICBjb25uZWN0KHBhZ2UoKS0+
bWFpbkZyYW1lKCksIFNJR05BTChsb2FkU3RhcnRlZCgpKSwgdGhpcywgU0xPVChvbkxvYWRTdGFy
dGVkKCkpKTsKLSAgICBjb25uZWN0KHBhZ2UoKS0+bWFpbkZyYW1lKCksIFNJR05BTChpY29uQ2hh
bmdlZCgpKSwgdGhpcywgU0xPVChvbkljb25DaGFuZ2VkKCkpKTsKLSAgICBjb25uZWN0KHBhZ2Uo
KS0+bWFpbkZyYW1lKCksIFNJR05BTCh0aXRsZUNoYW5nZWQoUVN0cmluZykpLCB0aGlzLCBTTE9U
KG9uVGl0bGVDaGFuZ2VkKFFTdHJpbmcpKSk7Ci0gICAgY29ubmVjdChwYWdlKCksIFNJR05BTCh3
aW5kb3dDbG9zZVJlcXVlc3RlZCgpKSwgdGhpcywgU0xPVChjbG9zZSgpKSk7Ci0KLSNpZm5kZWYg
UVRfTk9fU0hPUlRDVVQKLSAgICAvLyBzaG9ydC1jdXRzCi0gICAgcGFnZSgpLT5hY3Rpb24oUVdl
YlBhZ2U6OkJhY2spLT5zZXRTaG9ydGN1dChRS2V5U2VxdWVuY2U6OkJhY2spOwotICAgIHBhZ2Uo
KS0+YWN0aW9uKFFXZWJQYWdlOjpTdG9wKS0+c2V0U2hvcnRjdXQoUXQ6OktleV9Fc2NhcGUpOwot
ICAgIHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpGb3J3YXJkKS0+c2V0U2hvcnRjdXQoUUtleVNl
cXVlbmNlOjpGb3J3YXJkKTsKLSAgICBwYWdlKCktPmFjdGlvbihRV2ViUGFnZTo6UmVsb2FkKS0+
c2V0U2hvcnRjdXQoUUtleVNlcXVlbmNlOjpSZWZyZXNoKTsKLSNpZm5kZWYgUVRfTk9fVU5ET1NU
QUNLCi0gICAgcGFnZSgpLT5hY3Rpb24oUVdlYlBhZ2U6OlVuZG8pLT5zZXRTaG9ydGN1dChRS2V5
U2VxdWVuY2U6OlVuZG8pOwotICAgIHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpSZWRvKS0+c2V0
U2hvcnRjdXQoUUtleVNlcXVlbmNlOjpSZWRvKTsKLSNlbmRpZgotICAgIHBhZ2UoKS0+YWN0aW9u
KFFXZWJQYWdlOjpDdXQpLT5zZXRTaG9ydGN1dChRS2V5U2VxdWVuY2U6OkN1dCk7Ci0gICAgcGFn
ZSgpLT5hY3Rpb24oUVdlYlBhZ2U6OkNvcHkpLT5zZXRTaG9ydGN1dChRS2V5U2VxdWVuY2U6OkNv
cHkpOwotICAgIHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpQYXN0ZSktPnNldFNob3J0Y3V0KFFL
ZXlTZXF1ZW5jZTo6UGFzdGUpOwotICAgIHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpTZWxlY3RB
bGwpLT5zZXRTaG9ydGN1dChRS2V5U2VxdWVuY2U6OlNlbGVjdEFsbCk7Ci0KLSAgICBwYWdlKCkt
PmFjdGlvbihRV2ViUGFnZTo6VG9nZ2xlQm9sZCktPnNldFNob3J0Y3V0KFFLZXlTZXF1ZW5jZShR
dDo6Q1RSTCB8IFF0OjpLZXlfQikpOwotICAgIHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpUb2dn
bGVJdGFsaWMpLT5zZXRTaG9ydGN1dChRS2V5U2VxdWVuY2UoUXQ6OkNUUkwgfCBRdDo6S2V5X0kp
KTsKLSAgICBwYWdlKCktPmFjdGlvbihRV2ViUGFnZTo6VG9nZ2xlVW5kZXJsaW5lKS0+c2V0U2hv
cnRjdXQoUUtleVNlcXVlbmNlKFF0OjpDVFJMIHwgUXQ6OktleV9VKSk7Ci0jZW5kaWYKLX0KLQot
dm9pZCBNYWluV2luZG93OjpzZXRQYWdlKFdlYlBhZ2UqIHBhZ2UpCi17Ci0gICAgaWYgKHBhZ2Ug
JiYgbV9wYWdlKQotICAgICAgICBwYWdlLT5zZXRVc2VyQWdlbnQobV9wYWdlLT51c2VyQWdlbnRG
b3JVcmwoUVVybCgpKSk7Ci0KLSAgICBkZWxldGUgbV9wYWdlOwotICAgIG1fcGFnZSA9IHBhZ2U7
Ci0KLSAgICBidWlsZFVJKCk7Ci19Ci0KLVdlYlBhZ2UqIE1haW5XaW5kb3c6OnBhZ2UoKSBjb25z
dAotewotICAgIHJldHVybiBtX3BhZ2U7Ci19Ci0KLXZvaWQgTWFpbldpbmRvdzo6c2V0QWRkcmVz
c1VybChjb25zdCBRVXJsJiB1cmwpCi17Ci0gICAgc2V0QWRkcmVzc1VybCh1cmwudG9TdHJpbmco
UVVybDo6UmVtb3ZlVXNlckluZm8pKTsKLX0KLQotdm9pZCBNYWluV2luZG93OjpzZXRBZGRyZXNz
VXJsKGNvbnN0IFFTdHJpbmcmIHVybCkKLXsKLSNpZm5kZWYgUVRfTk9fSU5QVVRESUFMT0cKLSAg
ICBpZiAoIXVybC5jb250YWlucygiYWJvdXQ6IikpCi0gICAgICAgIHVybEVkaXQtPnNldFRleHQo
dXJsKTsKLSNlbmRpZgotfQotCi12b2lkIE1haW5XaW5kb3c6OmFkZENvbXBsZXRlckVudHJ5KGNv
bnN0IFFVcmwmIHVybCkKLXsKLSAgICBRVXJsOjpGb3JtYXR0aW5nT3B0aW9ucyBvcHRzOwotICAg
IG9wdHMgfD0gUVVybDo6UmVtb3ZlU2NoZW1lOwotICAgIG9wdHMgfD0gUVVybDo6UmVtb3ZlVXNl
ckluZm87Ci0gICAgb3B0cyB8PSBRVXJsOjpTdHJpcFRyYWlsaW5nU2xhc2g7Ci0gICAgUVN0cmlu
ZyBzID0gdXJsLnRvU3RyaW5nKG9wdHMpOwotICAgIHMgPSBzLm1pZCgyKTsKLSAgICBpZiAocy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghdXJsTGlzdC5jb250YWlucyhz
KSkKLSAgICAgICAgdXJsTGlzdCArPSBzOwotICAgIHVybE1vZGVsLnNldFN0cmluZ0xpc3QodXJs
TGlzdCk7Ci19Ci0KLXZvaWQgTWFpbldpbmRvdzo6bG9hZChjb25zdCBRU3RyaW5nJiB1cmwpCi17
Ci0gICAgUVVybCBxdXJsID0gdXJsRnJvbVVzZXJJbnB1dCh1cmwpOwotICAgIGlmIChxdXJsLnNj
aGVtZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgcXVybCA9IFFVcmwoImh0dHA6Ly8iICsgdXJsICsg
Ii8iKTsKLSAgICBsb2FkKHF1cmwpOwotfQotCi12b2lkIE1haW5XaW5kb3c6OmxvYWQoY29uc3Qg
UVVybCYgdXJsKQotewotICAgIGlmICghdXJsLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgc2V0QWRkcmVzc1VybCh1cmwudG9TdHJpbmcoKSk7Ci0gICAgcGFnZSgpLT5tYWluRnJh
bWUoKS0+bG9hZCh1cmwpOwotfQotCi1RU3RyaW5nIE1haW5XaW5kb3c6OmFkZHJlc3NVcmwoKSBj
b25zdAotewotI2lmbmRlZiBRVF9OT19JTlBVVERJQUxPRwotICAgIHJldHVybiB1cmxFZGl0LT50
ZXh0KCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gUVN0cmluZygpOwotfQotCi12b2lkIE1haW5XaW5k
b3c6OmNoYW5nZUxvY2F0aW9uKCkKLXsKLSNpZm5kZWYgUVRfTk9fSU5QVVRESUFMT0cKLSAgICBR
U3RyaW5nIHN0cmluZyA9IHVybEVkaXQtPnRleHQoKTsKLSAgICBRVXJsIG1haW5GcmFtZVVSTCA9
IHBhZ2UoKS0+bWFpbkZyYW1lKCktPnVybCgpOwotCi0gICAgaWYgKG1haW5GcmFtZVVSTC5pc1Zh
bGlkKCkgJiYgc3RyaW5nID09IG1haW5GcmFtZVVSTC50b1N0cmluZygpKSB7Ci0gICAgICAgIHBh
Z2UoKS0+dHJpZ2dlckFjdGlvbihRV2ViUGFnZTo6UmVsb2FkKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGxvYWQoc3RyaW5nKTsKLSNlbmRpZgotfQotCi12b2lkIE1haW5XaW5kb3c6
Om9wZW5GaWxlKCkKLXsKLSNpZm5kZWYgUVRfTk9fRklMRURJQUxPRwotICAgIHN0YXRpYyBjb25z
dCBRU3RyaW5nIGZpbHRlcigiSFRNTCBGaWxlcyAoKi5odG0gKi5odG1sKTs7VGV4dCBGaWxlcyAo
Ki50eHQpOztJbWFnZSBGaWxlcyAoKi5naWYgKi5qcGcgKi5wbmcpOztBbGwgRmlsZXMgKCopIik7
Ci0KLSAgICBRRmlsZURpYWxvZyBmaWxlRGlhbG9nKHRoaXMsIHRyKCJPcGVuIiksIFFTdHJpbmco
KSwgZmlsdGVyKTsKLSAgICBmaWxlRGlhbG9nLnNldEFjY2VwdE1vZGUoUUZpbGVEaWFsb2c6OkFj
Y2VwdE9wZW4pOwotICAgIGZpbGVEaWFsb2cuc2V0RmlsZU1vZGUoUUZpbGVEaWFsb2c6OkV4aXN0
aW5nRmlsZSk7Ci0gICAgZmlsZURpYWxvZy5zZXRPcHRpb25zKFFGaWxlRGlhbG9nOjpSZWFkT25s
eSk7Ci0KLSAgICBpZiAoZmlsZURpYWxvZy5leGVjKCkpIHsKLSAgICAgICAgUVN0cmluZyBzZWxl
Y3RlZEZpbGUgPSBmaWxlRGlhbG9nLnNlbGVjdGVkRmlsZXMoKVswXTsKLSAgICAgICAgaWYgKCFz
ZWxlY3RlZEZpbGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgbG9hZChRVXJsOjpmcm9tTG9jYWxG
aWxlKHNlbGVjdGVkRmlsZSkpOwotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIE1haW5XaW5kb3c6
Om9wZW5Mb2NhdGlvbigpCi17Ci0jaWZuZGVmIFFUX05PX0lOUFVURElBTE9HCi0gICAgdXJsRWRp
dC0+c2VsZWN0QWxsKCk7Ci0gICAgdXJsRWRpdC0+c2V0Rm9jdXMoKTsKLSNlbmRpZgotfQotCi12
b2lkIE1haW5XaW5kb3c6Om9uSWNvbkNoYW5nZWQoKQotewotI2lmbmRlZiBRVF9OT19JTlBVVERJ
QUxPRwotICAgIHVybEVkaXQtPnNldFBhZ2VJY29uKHBhZ2UoKS0+bWFpbkZyYW1lKCktPmljb24o
KSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBNYWluV2luZG93OjpvbkxvYWRTdGFydGVkKCkKLXsKLSNp
Zm5kZWYgUVRfTk9fSU5QVVRESUFMT0cKLSAgICB1cmxFZGl0LT5zZXRQYWdlSWNvbihRSWNvbigp
KTsKLSNlbmRpZgotfQotCi12b2lkIE1haW5XaW5kb3c6Om9uVGl0bGVDaGFuZ2VkKGNvbnN0IFFT
dHJpbmcmIHRpdGxlKQotewotICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpCi0gICAgICAgIHNldFdp
bmRvd1RpdGxlKFFDb3JlQXBwbGljYXRpb246OmFwcGxpY2F0aW9uTmFtZSgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIHNldFdpbmRvd1RpdGxlKFFTdHJpbmc6OmZyb21MYXRpbjEoIiUxIC0gJTIiKS5h
cmcodGl0bGUpLmFyZyhRQ29yZUFwcGxpY2F0aW9uOjphcHBsaWNhdGlvbk5hbWUoKSkpOwotfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvUXRUZXN0QnJvd3Nlci9tYWlud2luZG93LmggYi9Ub29scy9RdFRl
c3RCcm93c2VyL21haW53aW5kb3cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAz
Njk1MjQ3Y2MwZTNhMTc2OGVhN2QzY2FjZDFkMDlkYmI3Mjk5Mi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9RdFRlc3RCcm93c2VyL21haW53aW5k
b3cuaAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR2lyaXNoIFJhbWFrcmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFz
LmluPgotICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgotICoKLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBtYWlud2luZG93X2gKLSNkZWZp
bmUgbWFpbndpbmRvd19oCi0KLSNpbmNsdWRlICJ3ZWJwYWdlLmgiCi0KLSNpbmNsdWRlIDxRTWFp
bldpbmRvdz4KLSNpbmNsdWRlIDxRU3RyaW5nTGlzdE1vZGVsPgotI2luY2x1ZGUgPFFUb29sQmFy
PgotCi1jbGFzcyBMb2NhdGlvbkVkaXQ7Ci0KLWNsYXNzIE1haW5XaW5kb3cgOiBwdWJsaWMgUU1h
aW5XaW5kb3cgewotICAgIFFfT0JKRUNUCi0KLXB1YmxpYzoKLSAgICBNYWluV2luZG93KCk7Ci0K
LSAgICB2b2lkIGFkZENvbXBsZXRlckVudHJ5KGNvbnN0IFFVcmwmIHVybCk7Ci0KLSAgICB2b2lk
IGxvYWQoY29uc3QgUVN0cmluZyYgdXJsKTsKLSAgICB2b2lkIGxvYWQoY29uc3QgUVVybCYgdXJs
KTsKLQotICAgIFdlYlBhZ2UqIHBhZ2UoKSBjb25zdDsKLSAgICB2b2lkIHNldFBhZ2UoV2ViUGFn
ZSopOwotCi1wcm90ZWN0ZWQgUV9TTE9UUzoKLSAgICB2b2lkIHNldEFkZHJlc3NVcmwoY29uc3Qg
UVN0cmluZyYgdXJsKTsKLSAgICB2b2lkIHNldEFkZHJlc3NVcmwoY29uc3QgUVVybCYgdXJsKTsK
LSAgICB2b2lkIG9wZW5GaWxlKCk7Ci0gICAgdm9pZCBvcGVuTG9jYXRpb24oKTsKLSAgICB2b2lk
IGNoYW5nZUxvY2F0aW9uKCk7Ci0gICAgdm9pZCBvbkljb25DaGFuZ2VkKCk7Ci0gICAgdm9pZCBv
bkxvYWRTdGFydGVkKCk7Ci0gICAgdm9pZCBvblRpdGxlQ2hhbmdlZChjb25zdCBRU3RyaW5nJik7
Ci0KLXByb3RlY3RlZDoKLSAgICBRU3RyaW5nIGFkZHJlc3NVcmwoKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICB2b2lkIGJ1aWxkVUkoKTsKLQotICAgIFdlYlBhZ2UqIG1fcGFnZTsKLSAgICBRVG9v
bEJhciogbV90b29sQmFyOwotICAgIFFTdHJpbmdMaXN0TW9kZWwgdXJsTW9kZWw7Ci0gICAgUVN0
cmluZ0xpc3QgdXJsTGlzdDsKLSAgICBMb2NhdGlvbkVkaXQqIHVybEVkaXQ7Ci19OwotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIvcXR0ZXN0YnJvd3Nlci5jcHAgYi9U
b29scy9RdFRlc3RCcm93c2VyL3F0dGVzdGJyb3dzZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5ZmQ3ZDBjMjIyOGQ0OTY2YTg5ZTYzZDU2YjJiZDczYTJmMjUwMTBlLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1F0VGVzdEJy
b3dzZXIvcXR0ZXN0YnJvd3Nlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpLgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDA5IEdpcmlzaCBSYW1ha3Jp
c2huYW4gPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9y
Z2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsg
TXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVz
aW4gPHphY2tAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8
aGF1c21hbm5Aa2RlLm9yZz4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oIgotI2luY2x1ZGUgIlF0VGVzdFN1cHBv
cnQuaCIKLSNpbmNsdWRlICJsYXVuY2hlcndpbmRvdy5oIgotI2luY2x1ZGUgInVybGxvYWRlci5o
IgotCi1XaW5kb3dPcHRpb25zIHdpbmRvd09wdGlvbnM7Ci0KLSNpbmNsdWRlIDxRQXBwbGljYXRp
b24+Ci0jaW5jbHVkZSA8UURpcj4KLSNpbmNsdWRlIDxRRmlsZT4KLSNpbmNsdWRlIDxRRmlsZUlu
Zm8+Ci0jaW5jbHVkZSA8UUZvbnREYXRhYmFzZT4KLQotaW50IGxhdW5jaGVyTWFpbihjb25zdCBR
QXBwbGljYXRpb24mIGFwcCkKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgaW50IHJldFZhbCA9IGFw
cC5leGVjKCk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmdhcmJhZ2VDb2xsZWN0b3JD
b2xsZWN0KCk7Ci0gICAgUVdlYlNldHRpbmdzOjpjbGVhck1lbW9yeUNhY2hlcygpOwotICAgIHJl
dHVybiByZXRWYWw7Ci0jZWxzZQotICAgIHJldHVybiBhcHAuZXhlYygpOwotI2VuZGlmCi19Ci0K
LWNsYXNzIExhdW5jaGVyQXBwbGljYXRpb24gOiBwdWJsaWMgUUFwcGxpY2F0aW9uIHsKLSAgICBR
X09CSkVDVAotCi1wdWJsaWM6Ci0gICAgTGF1bmNoZXJBcHBsaWNhdGlvbihpbnQmIGFyZ2MsIGNo
YXIqKiBhcmd2KTsKLSAgICBRU3RyaW5nTGlzdCB1cmxzKCkgY29uc3QgeyByZXR1cm4gbV91cmxz
OyB9Ci0gICAgYm9vbCBpc1JvYm90aXplZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNSb2JvdGl6ZWQ7
IH0KLSAgICBpbnQgcm9ib3RUaW1lb3V0KCkgY29uc3QgeyByZXR1cm4gbV9yb2JvdFRpbWVvdXRT
ZWNvbmRzOyB9Ci0gICAgaW50IHJvYm90RXh0cmFUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9yb2Jv
dEV4dHJhVGltZVNlY29uZHM7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGhhbmRsZVVzZXJPcHRp
b25zKCk7Ci0gICAgdm9pZCBhcHBseURlZmF1bHRTZXR0aW5ncygpOwotCi1wcml2YXRlOgotICAg
IGJvb2wgbV9pc1JvYm90aXplZDsKLSAgICBpbnQgbV9yb2JvdFRpbWVvdXRTZWNvbmRzOwotICAg
IGludCBtX3JvYm90RXh0cmFUaW1lU2Vjb25kczsKLSAgICBRU3RyaW5nTGlzdCBtX3VybHM7Ci19
OwotCi12b2lkIExhdW5jaGVyQXBwbGljYXRpb246OmFwcGx5RGVmYXVsdFNldHRpbmdzKCkKLXsK
LSAgICBRV2ViU2V0dGluZ3M6OnNldE1heGltdW1QYWdlc0luQ2FjaGUoNCk7Ci0KLSAgICBRV2Vi
U2V0dGluZ3M6OnNldE9iamVjdENhY2hlQ2FwYWNpdGllcygoMTYqMTAyNCoxMDI0KSAvIDgsICgx
NioxMDI0KjEwMjQpIC8gOCwgMTYqMTAyNCoxMDI0KTsKLQotICAgIFFXZWJTZXR0aW5nczo6Z2xv
YmFsU2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UGx1Z2luc0VuYWJsZWQs
IHRydWUpOwotICAgIFFXZWJTZXR0aW5nczo6Z2xvYmFsU2V0dGluZ3MoKS0+c2V0QXR0cmlidXRl
KFFXZWJTZXR0aW5nczo6RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCwgdHJ1ZSk7Ci0gICAgUVdlYlNl
dHRpbmdzOjplbmFibGVQZXJzaXN0ZW50U3RvcmFnZSgpOwotfQotCi1MYXVuY2hlckFwcGxpY2F0
aW9uOjpMYXVuY2hlckFwcGxpY2F0aW9uKGludCYgYXJnYywgY2hhcioqIGFyZ3YpCi0gICAgOiBR
QXBwbGljYXRpb24oYXJnYywgYXJndikKLSAgICAsIG1faXNSb2JvdGl6ZWQoZmFsc2UpCi0gICAg
LCBtX3JvYm90VGltZW91dFNlY29uZHMoMCkKLSAgICAsIG1fcm9ib3RFeHRyYVRpbWVTZWNvbmRz
KDApCi17Ci0gICAgLy8gVG8gYWxsb3cgUVdlYkluc3BlY3RvcidzIGNvbmZpZ3VyYXRpb24gcGVy
c2lzdGVuY2UKLSAgICBzZXRPcmdhbml6YXRpb25OYW1lKCJRdFByb2plY3QiKTsKLSAgICBzZXRB
cHBsaWNhdGlvbk5hbWUoIlF0VGVzdEJyb3dzZXIiKTsKLSAgICBzZXRBcHBsaWNhdGlvblZlcnNp
b24oIjAuMSIpOwotCi0gICAgYXBwbHlEZWZhdWx0U2V0dGluZ3MoKTsKLQotICAgIGhhbmRsZVVz
ZXJPcHRpb25zKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcXVpcmVzR3JhcGhpY3NWaWV3KGNvbnN0
IFFTdHJpbmcmIG9wdGlvbikKLXsKLSAgICBpZiAod2luZG93T3B0aW9ucy51c2VHcmFwaGljc1Zp
ZXcpCi0gICAgICAgIHJldHVybjsKLSAgICBhcHBRdWl0KDEsIFFTdHJpbmcoIiUxIG9ubHkgd29y
a3MgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgLWdyYXBoaWNzYmFzZWQgb3B0aW9uIikuYXJnKG9w
dGlvbikpOwotfQotCi12b2lkIExhdW5jaGVyQXBwbGljYXRpb246OmhhbmRsZVVzZXJPcHRpb25z
KCkKLXsKLSAgICBRU3RyaW5nTGlzdCBhcmdzID0gYXJndW1lbnRzKCk7Ci0gICAgUUZpbGVJbmZv
IHByb2dyYW0oYXJncy5hdCgwKSk7Ci0gICAgUVN0cmluZyBwcm9ncmFtTmFtZSgiUXRUZXN0QnJv
d3NlciIpOwotICAgIGlmIChwcm9ncmFtLmV4aXN0cygpKQotICAgICAgICBwcm9ncmFtTmFtZSA9
IHByb2dyYW0uYmFzZU5hbWUoKTsKLQotICAgIFFMaXN0PFFTdHJpbmc+IHVwZGF0ZU1vZGVzKGVu
dW1Ub0tleXMoUUdyYXBoaWNzVmlldzo6c3RhdGljTWV0YU9iamVjdCwKLSAgICAgICAgICAgICJW
aWV3cG9ydFVwZGF0ZU1vZGUiLCAiVmlld3BvcnRVcGRhdGUiKSk7Ci0KLSAgICBpZiAoYXJncy5j
b250YWlucygiLWhlbHAiKSkgewotICAgICAgICBxRGVidWcoKSA8PCAiVXNhZ2U6IiA8PCBwcm9n
cmFtTmFtZS50b0xhdGluMSgpLmRhdGEoKQotICAgICAgICAgICAgIDw8ICJbLWdyYXBoaWNzYmFz
ZWRdIgotICAgICAgICAgICAgIDw8ICJbLW5vLWNvbXBvc2l0aW5nXSIKLSNpZiBkZWZpbmVkKFFU
X0NPTkZJR1VSRURfV0lUSF9PUEVOR0wpCi0gICAgICAgICAgICAgPDwgIlstZ2wtdmlld3BvcnRd
IgotICAgICAgICAgICAgIDw8ICJbLXdlYmdsXSIKLSNlbmRpZgotICAgICAgICAgICAgIDw8IFFT
dHJpbmcoIlstdmlld3BvcnQtdXBkYXRlLW1vZGUgJTFdIikuYXJnKGZvcm1hdEtleXModXBkYXRl
TW9kZXMpKS50b0xhdGluMSgpLmRhdGEoKQotI2lmICFkZWZpbmVkKFFUX05PX05FVFdPUktESVNL
Q0FDSEUpICYmICFkZWZpbmVkKFFUX05PX0RFU0tUT1BTRVJWSUNFUykKLSAgICAgICAgICAgICA8
PCAiWy1kaXNrLWNhY2hlXSIKLSNlbmRpZgotICAgICAgICAgICAgIDw8ICJbLWNhY2hlLXdlYnZp
ZXddIgotICAgICAgICAgICAgIDw8ICJbLW1heGltaXplXSIKLSAgICAgICAgICAgICA8PCAiWy1z
aG93LWZwc10iCi0gICAgICAgICAgICAgPDwgIlstciBsaXN0XSIKLSAgICAgICAgICAgICA8PCAi
Wy1yb2JvdC10aW1lb3V0IHNlY29uZHNdIgotICAgICAgICAgICAgIDw8ICJbLXJvYm90LWV4dHJh
LXRpbWUgc2Vjb25kc10iCi0gICAgICAgICAgICAgPDwgIlstaW5zcGVjdG9yLXVybCBsb2NhdGlv
bl0iCi0gICAgICAgICAgICAgPDwgIlstdGlsZWQtYmFja2luZy1zdG9yZV0iCi0gICAgICAgICAg
ICAgPDwgIlstcmVzaXplcy10by1jb250ZW50c10iCi0gICAgICAgICAgICAgPDwgIlstbG9jYWwt
c3RvcmFnZS1lbmFibGVkXSIKLSAgICAgICAgICAgICA8PCAiWy1uby1kaXNrLWNvb2tpZXNdIgot
ICAgICAgICAgICAgIDw8ICJbLW9mZmxpbmUtc3RvcmFnZS1kYXRhYmFzZS1lbmFibGVkXSIKLSAg
ICAgICAgICAgICA8PCAiWy1vZmZsaW5lLXdlYi1hcHBsaWNhdGlvbi1jYWNoZS1lbmFibGVkXSIK
LSAgICAgICAgICAgICA8PCAiWy1zZXQtb2ZmbGluZS1zdG9yYWdlLWRlZmF1bHQtcXVvdGEgbWF4
U2l6ZV0iCi0gICAgICAgICAgICAgPDwgIlstdXNlLXRlc3QtZm9udHNdIgotICAgICAgICAgICAg
IDw8ICJbLXByaW50LWxvYWRlZC11cmxzXSIKLSAgICAgICAgICAgICA8PCAiVVJMcyI7Ci0gICAg
ICAgIGFwcFF1aXQoMCk7Ci0gICAgfQotCi0gICAgY29uc3QgYm9vbCBkZWZhdWx0Rm9yQW5pbWF0
aW9ucyA9IGFyZ3MuY29udGFpbnMoIi1kZWZhdWx0LWFuaW1hdGlvbnMiKTsKLSAgICBpZiAoYXJn
cy5jb250YWlucygiLWdyYXBoaWNzYmFzZWQiKSB8fCBkZWZhdWx0Rm9yQW5pbWF0aW9ucykKLSAg
ICAgICAgd2luZG93T3B0aW9ucy51c2VHcmFwaGljc1ZpZXcgPSB0cnVlOwotCi0gICAgaWYgKGFy
Z3MuY29udGFpbnMoIi1uby1jb21wb3NpdGluZyIpKSB7Ci0gICAgICAgIHJlcXVpcmVzR3JhcGhp
Y3NWaWV3KCItbm8tY29tcG9zaXRpbmciKTsKLSAgICAgICAgd2luZG93T3B0aW9ucy51c2VDb21w
b3NpdGluZyA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChhcmdzLmNvbnRhaW5zKCItc2hvdy1m
cHMiKSkgewotICAgICAgICByZXF1aXJlc0dyYXBoaWNzVmlldygiLXNob3ctZnBzIik7Ci0gICAg
ICAgIHdpbmRvd09wdGlvbnMuc2hvd0ZyYW1lUmF0ZSA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYg
KGFyZ3MuY29udGFpbnMoIi1kaXNrLWNhY2hlIikpIHsKLSNpZiAhZGVmaW5lZChRVF9OT19ORVRX
T1JLRElTS0NBQ0hFKSAmJiAhZGVmaW5lZChRVF9OT19ERVNLVE9QU0VSVklDRVMpCi0gICAgICAg
IHdpbmRvd09wdGlvbnMudXNlRGlza0NhY2hlID0gdHJ1ZTsKLSNlbHNlCi0gICAgYXBwUXVpdCgx
LCAiLWRpc2stY2FjaGUgb25seSB3b3JrcyBpZiBRTmV0d29ya0Rpc2tDYWNoZSBhbmQgUURlc2t0
b3BTZXJ2aWNlcyBpcyBlbmFibGVkIGluIHlvdXIgUXQgYnVpbGQuIik7Ci0jZW5kaWYKLSAgICB9
Ci0KLSAgICBpZiAoYXJncy5jb250YWlucygiLWNhY2hlLXdlYnZpZXciKSB8fCBkZWZhdWx0Rm9y
QW5pbWF0aW9ucykgewotICAgICAgICByZXF1aXJlc0dyYXBoaWNzVmlldygiLWNhY2hlLXdlYnZp
ZXciKTsKLSAgICAgICAgd2luZG93T3B0aW9ucy5jYWNoZVdlYlZpZXcgPSB0cnVlOwotICAgIH0K
LQotICAgIGlmIChhcmdzLmNvbnRhaW5zKCItdGlsZWQtYmFja2luZy1zdG9yZSIpKSB7Ci0gICAg
ICAgIHJlcXVpcmVzR3JhcGhpY3NWaWV3KCItdGlsZWQtYmFja2luZy1zdG9yZSIpOwotICAgICAg
ICB3aW5kb3dPcHRpb25zLnVzZVRpbGVkQmFja2luZ1N0b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBpZiAoYXJncy5jb250YWlucygiLXJlc2l6ZXMtdG8tY29udGVudHMiKSkgewotICAgICAgICBy
ZXF1aXJlc0dyYXBoaWNzVmlldygiLXJlc2l6ZXMtdG8tY29udGVudHMiKTsKLSAgICAgICAgd2lu
ZG93T3B0aW9ucy5yZXNpemVzVG9Db250ZW50cyA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIGlm
IChhcmdzLmNvbnRhaW5zKCItbG9jYWwtc3RvcmFnZS1lbmFibGVkIikpCi0gICAgICAgIHdpbmRv
d09wdGlvbnMudXNlTG9jYWxTdG9yYWdlID0gdHJ1ZTsKLQotICAgIGlmIChhcmdzLmNvbnRhaW5z
KCItbm8tZGlzay1jb29raWVzIikpCi0gICAgICAgIHdpbmRvd09wdGlvbnMudXNlRGlza0Nvb2tp
ZXMgPSBmYWxzZTsKLQotICAgIGlmIChhcmdzLmNvbnRhaW5zKCItbWF4aW1pemUiKSkKLSAgICAg
ICAgd2luZG93T3B0aW9ucy5zdGFydE1heGltaXplZCA9IHRydWU7Ci0KLSAgICBpZiAoYXJncy5j
b250YWlucygiLW9mZmxpbmUtc3RvcmFnZS1kYXRhYmFzZS1lbmFibGVkIikpCi0gICAgICAgIHdp
bmRvd09wdGlvbnMudXNlT2ZmbGluZVN0b3JhZ2VEYXRhYmFzZSA9IHRydWU7Ci0gICAgICAgIAot
ICAgIGlmIChhcmdzLmNvbnRhaW5zKCItb2ZmbGluZS13ZWItYXBwbGljYXRpb24tY2FjaGUtZW5h
YmxlZCIpKSAgIAotICAgICAgICB3aW5kb3dPcHRpb25zLnVzZU9mZmxpbmVXZWJBcHBsaWNhdGlv
bkNhY2hlID0gdHJ1ZTsKLSAgICAKLSAgICBpbnQgc2V0T2ZmbGluZVN0b3JhZ2VEZWZhdWx0UXVv
dGFJbmRleCA9IGFyZ3MuaW5kZXhPZigiLXNldC1vZmZsaW5lLXN0b3JhZ2UtZGVmYXVsdC1xdW90
YSIpOwotICAgIGlmIChzZXRPZmZsaW5lU3RvcmFnZURlZmF1bHRRdW90YUluZGV4ICE9IC0xKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGludCBtYXhTaXplID0gdGFrZU9wdGlvblZhbHVlKCZhcmdzLCBz
ZXRPZmZsaW5lU3RvcmFnZURlZmF1bHRRdW90YUluZGV4KS50b1VJbnQoKTsKLSAgICAgICAgd2lu
ZG93T3B0aW9ucy5vZmZsaW5lU3RvcmFnZURlZmF1bHRRdW90YVNpemUgPSBtYXhTaXplOwotICAg
IH0gICAKLSAgICAKLSAgICBpZiAoZGVmYXVsdEZvckFuaW1hdGlvbnMpCi0gICAgICAgIHdpbmRv
d09wdGlvbnMudmlld3BvcnRVcGRhdGVNb2RlID0gUUdyYXBoaWNzVmlldzo6Qm91bmRpbmdSZWN0
Vmlld3BvcnRVcGRhdGU7Ci0KLSAgICBRU3RyaW5nIGFyZzEoIi12aWV3cG9ydC11cGRhdGUtbW9k
ZSIpOwotICAgIGludCBtb2RlSW5kZXggPSBhcmdzLmluZGV4T2YoYXJnMSk7Ci0gICAgaWYgKG1v
ZGVJbmRleCAhPSAtMSkgewotICAgICAgICByZXF1aXJlc0dyYXBoaWNzVmlldyhhcmcxKTsKLQot
ICAgICAgICBRU3RyaW5nIG1vZGUgPSB0YWtlT3B0aW9uVmFsdWUoJmFyZ3MsIG1vZGVJbmRleCk7
Ci0gICAgICAgIGlmIChtb2RlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFwcFF1aXQoMSwgUVN0
cmluZygiJTEgbmVlZHMgYSB2YWx1ZSBvZiBvbmUgb2YgWyUyXSIpLmFyZyhhcmcxKS5hcmcoZm9y
bWF0S2V5cyh1cGRhdGVNb2RlcykpKTsKLSAgICAgICAgaW50IGlkeCA9IHVwZGF0ZU1vZGVzLmlu
ZGV4T2YobW9kZSk7Ci0gICAgICAgIGlmIChpZHggPT0gLTEpCi0gICAgICAgICAgICBhcHBRdWl0
KDEsIFFTdHJpbmcoIiUxIHZhbHVlIGhhcyB0byBiZSBvbmUgb2YgWyUyXSIpLmFyZyhhcmcxKS5h
cmcoZm9ybWF0S2V5cyh1cGRhdGVNb2RlcykpKTsKLQotICAgICAgICB3aW5kb3dPcHRpb25zLnZp
ZXdwb3J0VXBkYXRlTW9kZSA9IHN0YXRpY19jYXN0PFFHcmFwaGljc1ZpZXc6OlZpZXdwb3J0VXBk
YXRlTW9kZT4oaWR4KTsKLSAgICB9Ci0jaWZkZWYgUVRfQ09ORklHVVJFRF9XSVRIX09QRU5HTAot
ICAgIGlmIChhcmdzLmNvbnRhaW5zKCItZ2wtdmlld3BvcnQiKSB8fCBkZWZhdWx0Rm9yQW5pbWF0
aW9ucykgewotICAgICAgICByZXF1aXJlc0dyYXBoaWNzVmlldygiLWdsLXZpZXdwb3J0Iik7Ci0g
ICAgICAgIHdpbmRvd09wdGlvbnMudXNlUUdMV2lkZ2V0Vmlld3BvcnQgPSB0cnVlOwotICAgIH0K
LQotICAgIGlmIChhcmdzLmNvbnRhaW5zKCItd2ViZ2wiKSkgewotICAgICAgICByZXF1aXJlc0dy
YXBoaWNzVmlldygiLXdlYmdsIik7Ci0gICAgICAgIHdpbmRvd09wdGlvbnMudXNlV2ViR0wgPSB0
cnVlOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKGFyZ3MuY29udGFpbnMoIi11c2UtdGVzdC1m
b250cyIpKQotICAgICAgICBXZWJLaXQ6OlF0VGVzdFN1cHBvcnQ6OmluaXRpYWxpemVUZXN0Rm9u
dHMoKTsKLQotICAgIGlmIChhcmdzLmNvbnRhaW5zKCItcHJpbnQtbG9hZGVkLXVybHMiKSkKLSAg
ICAgICAgd2luZG93T3B0aW9ucy5wcmludExvYWRlZFVybHMgPSB0cnVlOwotCi0gICAgUVN0cmlu
ZyBpbnNwZWN0b3JVcmxBcmcoIi1pbnNwZWN0b3ItdXJsIik7Ci0gICAgaW50IGluc3BlY3RvclVy
bEluZGV4ID0gYXJncy5pbmRleE9mKGluc3BlY3RvclVybEFyZyk7Ci0gICAgaWYgKGluc3BlY3Rv
clVybEluZGV4ICE9IC0xKQotICAgICAgIHdpbmRvd09wdGlvbnMuaW5zcGVjdG9yVXJsID0gdGFr
ZU9wdGlvblZhbHVlKCZhcmdzLCBpbnNwZWN0b3JVcmxJbmRleCk7Ci0KLSAgICBRU3RyaW5nIHJl
bW90ZUluc3BlY3RvclBvcnRBcmcoIi1yZW1vdGUtaW5zcGVjdG9yLXBvcnQiKTsKLSAgICBpbnQg
cmVtb3RlSW5zcGVjdG9yUG9ydEluZGV4ID0gYXJncy5pbmRleE9mKHJlbW90ZUluc3BlY3RvclBv
cnRBcmcpOwotICAgIGlmIChyZW1vdGVJbnNwZWN0b3JQb3J0SW5kZXggIT0gLTEpCi0gICAgICAg
IHdpbmRvd09wdGlvbnMucmVtb3RlSW5zcGVjdG9yUG9ydCA9IHRha2VPcHRpb25WYWx1ZSgmYXJn
cywgcmVtb3RlSW5zcGVjdG9yUG9ydEluZGV4KS50b0ludCgpOwotCi0gICAgaW50IHJvYm90SW5k
ZXggPSBhcmdzLmluZGV4T2YoIi1yIik7Ci0gICAgaWYgKHJvYm90SW5kZXggIT0gLTEpIHsKLSAg
ICAgICAgUVN0cmluZyBsaXN0RmlsZSA9IHRha2VPcHRpb25WYWx1ZSgmYXJncywgcm9ib3RJbmRl
eCk7Ci0gICAgICAgIGlmIChsaXN0RmlsZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhcHBRdWl0
KDEsICItciBuZWVkcyBhIGxpc3QgZmlsZSB0byBzdGFydCBpbiByb2JvdGl6ZWQgbW9kZSIpOwot
ICAgICAgICBpZiAoIVFGaWxlOjpleGlzdHMobGlzdEZpbGUpKQotICAgICAgICAgICAgYXBwUXVp
dCgxLCAiVGhlIGxpc3QgZmlsZSBzdXBwbGllZCB0byAtciBkb2VzIG5vdCBleGlzdC4iKTsKLQot
ICAgICAgICBtX2lzUm9ib3RpemVkID0gdHJ1ZTsKLSAgICAgICAgbV91cmxzID0gUVN0cmluZ0xp
c3QobGlzdEZpbGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBsYXN0QXJnID0gYXJncy5s
YXN0SW5kZXhPZihRUmVnRXhwKCJeLS4qIikpOwotICAgICAgICBtX3VybHMgPSAobGFzdEFyZyAh
PSAtMSkgPyBhcmdzLm1pZCgrK2xhc3RBcmcpIDogYXJncy5taWQoMSk7Ci0gICAgfQotCi0gICAg
aW50IHJvYm90VGltZW91dEluZGV4ID0gYXJncy5pbmRleE9mKCItcm9ib3QtdGltZW91dCIpOwot
ICAgIGlmIChyb2JvdFRpbWVvdXRJbmRleCAhPSAtMSkKLSAgICAgICAgbV9yb2JvdFRpbWVvdXRT
ZWNvbmRzID0gdGFrZU9wdGlvblZhbHVlKCZhcmdzLCByb2JvdFRpbWVvdXRJbmRleCkudG9JbnQo
KTsKLQotICAgIGludCByb2JvdEV4dHJhVGltZUluZGV4ID0gYXJncy5pbmRleE9mKCItcm9ib3Qt
ZXh0cmEtdGltZSIpOwotICAgIGlmIChyb2JvdEV4dHJhVGltZUluZGV4ICE9IC0xKQotICAgICAg
ICBtX3JvYm90RXh0cmFUaW1lU2Vjb25kcyA9IHRha2VPcHRpb25WYWx1ZSgmYXJncywgcm9ib3RF
eHRyYVRpbWVJbmRleCkudG9JbnQoKTsKLX0KLQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAq
KmFyZ3YpCi17Ci0gICAgTGF1bmNoZXJBcHBsaWNhdGlvbiBhcHAoYXJnYywgYXJndik7Ci0KLSAg
ICBpZiAoYXBwLmlzUm9ib3RpemVkKCkpIHsKLSAgICAgICAgTGF1bmNoZXJXaW5kb3cqIHdpbmRv
dyA9IG5ldyBMYXVuY2hlcldpbmRvdygpOwotICAgICAgICBVcmxMb2FkZXIgbG9hZGVyKHdpbmRv
dy0+cGFnZSgpLT5tYWluRnJhbWUoKSwgYXBwLnVybHMoKS5hdCgwKSwgYXBwLnJvYm90VGltZW91
dCgpLCBhcHAucm9ib3RFeHRyYVRpbWUoKSk7Ci0gICAgICAgIGxvYWRlci5sb2FkTmV4dCgpOwot
ICAgICAgICB3aW5kb3ctPnNob3coKTsKLSAgICAgICAgcmV0dXJuIGxhdW5jaGVyTWFpbihhcHAp
OwotICAgIH0KLQotICAgIFFTdHJpbmdMaXN0IHVybHMgPSBhcHAudXJscygpOwotCi0gICAgaWYg
KHVybHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFFTdHJpbmcgZGVmYXVsdEluZGV4RmlsZSA9IFFT
dHJpbmcoIiUxLyUyIikuYXJnKFFEaXI6OmhvbWVQYXRoKCkpLmFyZyhRTGF0aW4xU3RyaW5nKCJp
bmRleC5odG1sIikpOwotICAgICAgICBpZiAoUUZpbGUoZGVmYXVsdEluZGV4RmlsZSkuZXhpc3Rz
KCkpCi0gICAgICAgICAgICB1cmxzLmFwcGVuZChRU3RyaW5nKCJmaWxlOi8vIikgKyBkZWZhdWx0
SW5kZXhGaWxlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdXJscy5hcHBlbmQoImh0dHA6
Ly93d3cuZ29vZ2xlLmNvbS8iKTsKLSAgICB9Ci0KLSAgICBMYXVuY2hlcldpbmRvdyogd2luZG93
ID0gMDsKLSAgICBmb3JlYWNoIChRU3RyaW5nIHVybCwgdXJscykgewotICAgICAgICBMYXVuY2hl
cldpbmRvdyogbmV3V2luZG93OwotICAgICAgICBpZiAoIXdpbmRvdykKLSAgICAgICAgICAgIG5l
d1dpbmRvdyA9IHdpbmRvdyA9IG5ldyBMYXVuY2hlcldpbmRvdygmd2luZG93T3B0aW9ucyk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld1dpbmRvdyA9IHdpbmRvdy0+bmV3V2luZG93KCk7
Ci0KLSAgICAgICAgbmV3V2luZG93LT5sb2FkKHVybCk7Ci0gICAgfQotCi0gICAgd2luZG93LT5z
aG93KCk7Ci0gICAgcmV0dXJuIGxhdW5jaGVyTWFpbihhcHApOwotfQotCi0jaW5jbHVkZSAicXR0
ZXN0YnJvd3Nlci5tb2MiCmRpZmYgLS1naXQgYS9Ub29scy9RdFRlc3RCcm93c2VyL3VybGxvYWRl
ci5jcHAgYi9Ub29scy9RdFRlc3RCcm93c2VyL3VybGxvYWRlci5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDJhZTcyMmJkOTg5OWMwZmI3ZjFkNzY1OWJjZWJiOGM1YTgyZDg1NzAu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvUXRU
ZXN0QnJvd3Nlci91cmxsb2FkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVW5pdmVyc2l0eSBvZiBTemVn
ZWQKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJ1cmxsb2Fk
ZXIuaCIKLQotI2luY2x1ZGUgPFFGaWxlPgotI2luY2x1ZGUgPFFEZWJ1Zz4KLSNpbmNsdWRlIDxR
V2ViUGFnZT4KLQotVXJsTG9hZGVyOjpVcmxMb2FkZXIoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3Qg
UVN0cmluZyYgaW5wdXRGaWxlTmFtZSwgaW50IHRpbWVvdXRTZWNvbmRzLCBpbnQgZXh0cmFUaW1l
U2Vjb25kcykKLSAgICA6IG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX3N0ZE91dChzdGRvdXQpCi0g
ICAgLCBtX2xvYWRlZCgwKQotICAgICwgbV9udW1GcmFtZXNMb2FkaW5nKDApCi17Ci0gICAgbV9j
aGVja0lmRmluaXNoZWRUaW1lci5zZXRJbnRlcnZhbCgyMDApOwotICAgIG1fY2hlY2tJZkZpbmlz
aGVkVGltZXIuc2V0U2luZ2xlU2hvdCh0cnVlKTsKLSAgICBjb25uZWN0KCZtX2NoZWNrSWZGaW5p
c2hlZFRpbWVyLCBTSUdOQUwodGltZW91dCgpKSwgdGhpcywgU0xPVChjaGVja0lmRmluaXNoZWQo
KSkpOwotICAgIC8vIGxvYWRTdGFydGVkIGFuZCBsb2FkRmluaXNoZWQgb24gUVdlYlBhZ2UgaXMg
ZW1pdHRlZCBmb3IgZWFjaCBmcmFtZS9zdWItZnJhbWUKLSAgICBjb25uZWN0KG1fZnJhbWUtPnBh
Z2UoKSwgU0lHTkFMKGxvYWRTdGFydGVkKCkpLCB0aGlzLCBTTE9UKGZyYW1lTG9hZFN0YXJ0ZWQo
KSkpOwotICAgIGNvbm5lY3QobV9mcmFtZS0+cGFnZSgpLCBTSUdOQUwobG9hZEZpbmlzaGVkKGJv
b2wpKSwgdGhpcywgU0xPVChmcmFtZUxvYWRGaW5pc2hlZCgpKSk7Ci0KLSAgICBpZiAodGltZW91
dFNlY29uZHMpIHsKLSAgICAgICAgbV90aW1lb3V0VGltZXIuc2V0SW50ZXJ2YWwodGltZW91dFNl
Y29uZHMgKiAxMDAwKTsKLSAgICAgICAgbV90aW1lb3V0VGltZXIuc2V0U2luZ2xlU2hvdCh0cnVl
KTsKLSAgICAgICAgY29ubmVjdChmcmFtZSwgU0lHTkFMKGxvYWRTdGFydGVkKCkpLCAmbV90aW1l
b3V0VGltZXIsIFNMT1Qoc3RhcnQoKSkpOwotICAgICAgICBjb25uZWN0KCZtX3RpbWVvdXRUaW1l
ciwgU0lHTkFMKHRpbWVvdXQoKSksIHRoaXMsIFNMT1QobG9hZE5leHQoKSkpOwotICAgIH0KLSAg
ICBpZiAoZXh0cmFUaW1lU2Vjb25kcykgewotICAgICAgICBtX2V4dHJhVGltZVRpbWVyLnNldElu
dGVydmFsKGV4dHJhVGltZVNlY29uZHMgKiAxMDAwKTsKLSAgICAgICAgbV9leHRyYVRpbWVUaW1l
ci5zZXRTaW5nbGVTaG90KHRydWUpOwotICAgICAgICBjb25uZWN0KHRoaXMsIFNJR05BTChwYWdl
TG9hZEZpbmlzaGVkKCkpLCAmbV9leHRyYVRpbWVUaW1lciwgU0xPVChzdGFydCgpKSk7Ci0gICAg
ICAgIGNvbm5lY3QoJm1fZXh0cmFUaW1lVGltZXIsIFNJR05BTCh0aW1lb3V0KCkpLCB0aGlzLCBT
TE9UKGxvYWROZXh0KCkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29ubmVjdCh0aGlzLCBTSUdO
QUwocGFnZUxvYWRGaW5pc2hlZCgpKSwgdGhpcywgU0xPVChsb2FkTmV4dCgpKSk7Ci0gICAgbG9h
ZFVybExpc3QoaW5wdXRGaWxlTmFtZSk7Ci19Ci0KLXZvaWQgVXJsTG9hZGVyOjpsb2FkTmV4dCgp
Ci17Ci0gICAgbV90aW1lb3V0VGltZXIuc3RvcCgpOwotICAgIG1fZXh0cmFUaW1lVGltZXIuc3Rv
cCgpOwotICAgIG1fY2hlY2tJZkZpbmlzaGVkVGltZXIuc3RvcCgpOwotICAgIG1fbnVtRnJhbWVz
TG9hZGluZyA9IDA7Ci0gICAgUVN0cmluZyBxc3RyOwotICAgIGlmIChnZXRVcmwocXN0cikpIHsK
LSAgICAgICAgUVVybCB1cmwocXN0ciwgUVVybDo6U3RyaWN0TW9kZSk7Ci0gICAgICAgIGlmICh1
cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBtX3N0ZE91dCA8PCAiTG9hZGluZyAiIDw8IHFz
dHIgPDwgIiAuLi4uLi4iIDw8ICsrbV9sb2FkZWQgPDwgZW5kbDsKLSAgICAgICAgICAgIG1fZnJh
bWUtPmxvYWQodXJsKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBsb2FkTmV4dCgpOwot
ICAgIH0gZWxzZQotICAgICAgICBkaXNjb25uZWN0KG1fZnJhbWUsIDAsIHRoaXMsIDApOwotfQot
Ci12b2lkIFVybExvYWRlcjo6Y2hlY2tJZkZpbmlzaGVkKCkKLXsKLSAgICBpZiAoIW1fbnVtRnJh
bWVzTG9hZGluZykKLSAgICAgICAgZW1pdCBwYWdlTG9hZEZpbmlzaGVkKCk7Ci19Ci0KLXZvaWQg
VXJsTG9hZGVyOjpmcmFtZUxvYWRTdGFydGVkKCkKLXsKLSAgICArK21fbnVtRnJhbWVzTG9hZGlu
ZzsKLSAgICBtX2NoZWNrSWZGaW5pc2hlZFRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBVcmxMb2Fk
ZXI6OmZyYW1lTG9hZEZpbmlzaGVkKCkKLXsKLSAgICBRX0FTU0VSVChtX251bUZyYW1lc0xvYWRp
bmcgPiAwKTsKLSAgICAtLW1fbnVtRnJhbWVzTG9hZGluZzsKLSAgICAvLyBPbmNlIG91ciBmcmFt
ZSBoYXMgZmluaXNoZWQgbG9hZGluZywgd2FpdCBhIG1vbWVudCB0byBjYWxsIGxvYWROZXh0IGZv
ciBjYXNlcwotICAgIC8vIHdoZXJlIGEgc3ViLWZyYW1lIHN0YXJ0cyBsb2FkaW5nIG9yIGFub3Ro
ZXIgZnJhbWUgaXMgbG9hZGVkIHRocm91Z2ggSmF2YVNjcmlwdC4KLSAgICBtX2NoZWNrSWZGaW5p
c2hlZFRpbWVyLnN0YXJ0KCk7Ci19Ci0KLXZvaWQgVXJsTG9hZGVyOjpsb2FkVXJsTGlzdChjb25z
dCBRU3RyaW5nJiBpbnB1dEZpbGVOYW1lKQotewotICAgIFFGaWxlIGlucHV0RmlsZShpbnB1dEZp
bGVOYW1lKTsKLSAgICBpZiAoaW5wdXRGaWxlLm9wZW4oUUlPRGV2aWNlOjpSZWFkT25seSB8IFFJ
T0RldmljZTo6VGV4dCkpIHsKLSAgICAgICAgUVRleHRTdHJlYW0gc3RyZWFtKCZpbnB1dEZpbGUp
OwotICAgICAgICBRU3RyaW5nIGxpbmU7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
ICAgICBsaW5lID0gc3RyZWFtLnJlYWRMaW5lKCk7Ci0gICAgICAgICAgICBpZiAobGluZS5pc051
bGwoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1fdXJscy5hcHBlbmQo
bGluZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBxRGVidWcoKSA8PCAiQ2Fu
J3Qgb3BlbiBsaXN0IGZpbGUiOwotICAgICAgICBleGl0KDApOwotICAgIH0KLSAgICBtX2luZGV4
ID0gMDsKLSAgICBpbnB1dEZpbGUuY2xvc2UoKTsKLX0KLQotYm9vbCBVcmxMb2FkZXI6OmdldFVy
bChRU3RyaW5nJiBxc3RyKQotewotICAgIGlmIChtX2luZGV4ID09IG1fdXJscy5zaXplKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHFzdHIgPSBtX3VybHNbbV9pbmRleCsrXTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIvdXJsbG9h
ZGVyLmggYi9Ub29scy9RdFRlc3RCcm93c2VyL3VybGxvYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4NDI1NDA5MGY4OGQwY2E2OTFmMmNjMThiMjQwYWVlMzM1MDExNzhkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1F0VGVz
dEJyb3dzZXIvdXJsbG9hZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDA5IFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0g
KgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIHVybGxvYWRlcl9oCi0j
ZGVmaW5lIHVybGxvYWRlcl9oCi0KLSNpbmNsdWRlICJxd2ViZnJhbWUuaCIKLQotI2luY2x1ZGUg
PFFUZXh0U3RyZWFtPgotI2luY2x1ZGUgPFFUaW1lcj4KLSNpbmNsdWRlIDxRVmVjdG9yPgotCi1j
bGFzcyBVcmxMb2FkZXIgOiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLQotcHVibGlj
OgotICAgIFVybExvYWRlcihRV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBRU3RyaW5nJiBpbnB1dEZp
bGVOYW1lLCBpbnQgdGltZW91dFNlY29uZHMsIGludCBleHRyYVRpbWVTZWNvbmRzKTsKLQotcHVi
bGljIFFfU0xPVFM6Ci0gICAgdm9pZCBsb2FkTmV4dCgpOwotCi1wcml2YXRlIFFfU0xPVFM6Ci0g
ICAgdm9pZCBjaGVja0lmRmluaXNoZWQoKTsKLSAgICB2b2lkIGZyYW1lTG9hZFN0YXJ0ZWQoKTsK
LSAgICB2b2lkIGZyYW1lTG9hZEZpbmlzaGVkKCk7Ci0KLVFfU0lHTkFMUzoKLSAgICB2b2lkIHBh
Z2VMb2FkRmluaXNoZWQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRVcmxMaXN0KGNvbnN0
IFFTdHJpbmcmIGlucHV0RmlsZU5hbWUpOwotICAgIGJvb2wgZ2V0VXJsKFFTdHJpbmcmIHFzdHIp
OwotCi1wcml2YXRlOgotICAgIFFWZWN0b3I8UVN0cmluZz4gbV91cmxzOwotICAgIGludCBtX2lu
ZGV4OwotICAgIFFXZWJGcmFtZSogbV9mcmFtZTsKLSAgICBRVGV4dFN0cmVhbSBtX3N0ZE91dDsK
LSAgICBpbnQgbV9sb2FkZWQ7Ci0gICAgUVRpbWVyIG1fdGltZW91dFRpbWVyOwotICAgIFFUaW1l
ciBtX2V4dHJhVGltZVRpbWVyOwotICAgIFFUaW1lciBtX2NoZWNrSWZGaW5pc2hlZFRpbWVyOwot
ICAgIGludCBtX251bUZyYW1lc0xvYWRpbmc7Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rv
b2xzL1F0VGVzdEJyb3dzZXIvdXNlcmFnZW50bGlzdC50eHQgYi9Ub29scy9RdFRlc3RCcm93c2Vy
L3VzZXJhZ2VudGxpc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWNmMTA0
M2UxODQ1M2QwNWMzOTIxODE0OGVmZDk4NDM5NWZlMTMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIvdXNlcmFnZW50bGlz
dC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1Nb3ppbGxhLzUuMCAoWDExOyBM
aW51eCBpNjg2KSBBcHBsZVdlYktpdC81MzUuMSAoS0hUTUwsIGxpa2UgR2Vja28pIFF0VGVzdEJy
b3dzZXIvMC4xIFNhZmFyaS81MzUuMQotTW96aWxsYS81LjAgKFN5bWJpYW5PUy85LjQ7IFU7IFNl
cmllczYwLzUuMCkgQXBwbGVXZWJLaXQvNTM1LjEgKEtIVE1MLCBsaWtlIEdlY2tvKSBRdFRlc3RC
cm93c2VyLzAuMSBNb2JpbGUgU2FmYXJpLzUzNS4xCi1Nb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBQ
UEMgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzEyNS4yIChLSFRNTCwgbGlrZSBHZWNrbykgU2FmYXJp
LzEyNS44Ci1Nb3ppbGxhLzUuMCAoVW5rbm93bjsgbGlrZSBBbmRyb2lkIDIuMjsgSW50ZWwgTWFj
IE9TIFggMTBfNikgQXBwbGVXZWJLaXQvNTMzLjMgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9u
LzQuMC4zIE1vYmlsZSBTYWZhcmkvNTMzLjMKLU1vemlsbGEvNS4wIChpUGhvbmU7IENQVSBPUyAz
XzIgbGlrZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvNTMxLjIxLjEwIChLSFRNTCwgbGlrZSBHZWNr
bykgVmVyc2lvbi80LjAuNCBNb2JpbGUvN0IzMzRiIFNhZmFyaS81MzEuMjEuMTAKLU1vemlsbGEv
NS4wIChpUGhvbmU7IFU7IENQVSBpUGhvbmUgT1MgNF8wIGxpa2UgTWFjIE9TIFg7IGVuLXVzKSBB
cHBsZVdlYktpdC81MzIuOSAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wLjUgTW9iaWxl
LzhBMjkzIFNhZmFyaS82NTMxLjIyLjcKLU1vemlsbGEvNS4wIChpUGFkOyBVOyBDUFUgT1MgM18y
IGxpa2UgTWFjIE9TIFg7IGVuLXVzKSBBcHBsZVdlYktpdC81MzEuMjEuMTAgKEtIVE1MLCBsaWtl
IEdlY2tvKSBWZXJzaW9uLzQuMC40IE1vYmlsZS83QjMzNGIgU2FmYXJpLzUzMS4yMS4xMAotT3Bl
cmEvOS44MCAoV2luZG93cyBOVCA2LjA7IFU7IGVuKSBQcmVzdG8vMi44Ljk5IFZlcnNpb24vMTEu
MTAKLU1vemlsbGEvNS4wIChTeW1iaWFuT1MvOS40OyBVOyBTZXJpZXM2MC81LjAgTm9raWE1ODAw
ZC0xYi8yMC4yLjAxNDsgUHJvZmlsZS9NSURQLTIuMSBDb25maWd1cmF0aW9uL0NMREMtMS4xKSBB
cHBsZVdlYktpdC80MTMgKEtIVE1MLCBsaWtlIEdlY2tvKSBTYWZhcmkvNDEzCi1Nb3ppbGxhLzQu
MCAoY29tcGF0aWJsZTsgTVNJRSA4LjA7IFdpbmRvd3MgTlQgNi4yOyBUcmlkZW50LzQuMDsgU0xD
QzI7IC5ORVQgQ0xSIDIuMC41MDcyNzsgLk5FVCBDTFIgMy41LjMwNzI5OyAuTkVUIENMUiAzLjAu
MzA3Mjk7IE1lZGlhIENlbnRlciBQQyA2LjApCi1Nb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgTVNJ
RSA5LjA7IFdpbmRvd3MgTlQgNi4xOyBUcmlkZW50LzUuMCkKLU1vemlsbGEvNS4wIChXaW5kb3dz
OyBXaW5kb3dzIE5UIDUuMSkgQXBwbGVXZWJLaXQvNTM0LjI0IChLSFRNTCwgbGlrZSBHZWNrbykg
Q2hyb21lLzExLjAuNjk2LjY4IFNhZmFyaS81MzQuMjQKLU1vemlsbGEvNS4wIChXaW5kb3dzIE5U
IDYuMTsgcnY6Mi4wLjEpIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvNC4wLjEKZGlmZiAtLWdpdCBh
L1Rvb2xzL1F0VGVzdEJyb3dzZXIvdXRpbHMuY3BwIGIvVG9vbHMvUXRUZXN0QnJvd3Nlci91dGls
cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2N2M5ODlmN2UzNjAxMmJkNDZk
Y2RlNGQxMWM4NzJlMzY1ODU3OTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvVG9vbHMvUXRUZXN0QnJvd3Nlci91dGlscy5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgInV0aWxzLmgiCi0KLQotUVN0cmluZyB0YWtlT3B0aW9uVmFs
dWUoUVN0cmluZ0xpc3QqIGFyZ3VtZW50cywgaW50IGluZGV4KQotewotICAgIFFTdHJpbmcgcmVz
dWx0OwotCi0gICAgaWYgKCsraW5kZXggPCBhcmd1bWVudHMtPmNvdW50KCkgJiYgIWFyZ3VtZW50
cy0+YXQoaW5kZXgpLnN0YXJ0c1dpdGgoIi0iKSkKLSAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRz
LT50YWtlQXQoaW5kZXgpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUVN0cmluZyBmb3Jt
YXRLZXlzKFFMaXN0PFFTdHJpbmc+IGtleXMpCi17Ci0gICAgUVN0cmluZyByZXN1bHQ7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBrZXlzLmNvdW50KCkgLSAxOyBpKyspCi0gICAgICAgIHJlc3Vs
dC5hcHBlbmQoa2V5cy5hdChpKSArICJ8Iik7Ci0gICAgcmVzdWx0LmFwcGVuZChrZXlzLmxhc3Qo
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUUxpc3Q8UVN0cmluZz4gZW51bVRvS2V5cyhj
b25zdCBRTWV0YU9iamVjdCBvLCBjb25zdCBRU3RyaW5nJiBuYW1lLCBjb25zdCBRU3RyaW5nJiBz
dHJpcCkKLXsKLSAgICBRTGlzdDxRU3RyaW5nPiBsaXN0OwotCi0gICAgaW50IGVudW1JbmRleCA9
IG8uaW5kZXhPZkVudW1lcmF0b3IobmFtZS50b0xhdGluMSgpLmRhdGEoKSk7Ci0gICAgUU1ldGFF
bnVtIGVudW1lcmF0b3IgPSBvLmVudW1lcmF0b3IoZW51bUluZGV4KTsKLQotICAgIGlmIChlbnVt
ZXJhdG9yLmlzVmFsaWQoKSkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudW1lcmF0
b3Iua2V5Q291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBRU3RyaW5nIGtleShlbnVtZXJhdG9y
LnZhbHVlVG9LZXkoaSkpOwotICAgICAgICAgICAgbGlzdC5hcHBlbmQoa2V5LnJlbW92ZShzdHJp
cCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGxpc3Q7Ci19Ci0KLXZvaWQgYXBw
UXVpdChpbnQgZXhpdENvZGUsIGNvbnN0IFFTdHJpbmcmIG1zZykKLXsKLSAgICBpZiAoIW1zZy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKGV4aXRDb2RlID4gMCkKLSAgICAgICAgICAgIHFEZWJ1
ZygiRVJST1I6ICVzIiwgbXNnLnRvTGF0aW4xKCkuZGF0YSgpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcURlYnVnKCkgPDwgbXNnOwotICAgIH0KLSAgICBleGl0KGV4aXRDb2RlKTsKLX0K
LQotUVVybCB1cmxGcm9tVXNlcklucHV0KGNvbnN0IFFTdHJpbmcmIHN0cmluZykKLXsKLSAgICBR
U3RyaW5nIGlucHV0KHN0cmluZyk7Ci0gICAgUUZpbGVJbmZvIGZpKGlucHV0KTsKLSAgICBpZiAo
ZmkuZXhpc3RzKCkgJiYgZmkuaXNSZWxhdGl2ZSgpKQotICAgICAgICBpbnB1dCA9IGZpLmFic29s
dXRlRmlsZVBhdGgoKTsKLQotICAgIHJldHVybiBRVXJsOjpmcm9tVXNlcklucHV0KGlucHV0KTsK
LX0KLQotCmRpZmYgLS1naXQgYS9Ub29scy9RdFRlc3RCcm93c2VyL3V0aWxzLmggYi9Ub29scy9R
dFRlc3RCcm93c2VyL3V0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NzM1
MWUzZDVkZTg4ZDJhMzdjOWZhM2FjNjU5MWFjNjNhZDc0ZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvUXRUZXN0QnJvd3Nlci91dGlscy5oCisr
KyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgdXRpbHNfaAotI2RlZmluZSB1dGlsc19o
Ci0KLSNpbmNsdWRlIDxRdENvcmU+Ci0KLSNpZm5kZWYgTk9fUkVUVVJOCi0jaWYgZGVmaW5lZChf
X0NDX0FSTSkgfHwgZGVmaW5lZChfX0FSTUNDX18pCi0jZGVmaW5lIE5PX1JFVFVSTiBfX2RlY2xz
cGVjKG5vcmV0dXJuKQotI2VsaWYgZGVmaW5lZChfX0dOVUNfXykKLSNkZWZpbmUgTk9fUkVUVVJO
IF9fYXR0cmlidXRlKChfX25vcmV0dXJuX18pKQotI2Vsc2UKLSNkZWZpbmUgTk9fUkVUVVJOCi0j
ZW5kaWYKLSNlbmRpZgotCi0vLyBvcHRpb25zIGhhbmRsaW5nCi1RU3RyaW5nIHRha2VPcHRpb25W
YWx1ZShRU3RyaW5nTGlzdCogYXJndW1lbnRzLCBpbnQgaW5kZXgpOwotUVN0cmluZyBmb3JtYXRL
ZXlzKFFMaXN0PFFTdHJpbmc+IGtleXMpOwotUUxpc3Q8UVN0cmluZz4gZW51bVRvS2V5cyhjb25z
dCBRTWV0YU9iamVjdCBvLCBjb25zdCBRU3RyaW5nJiBuYW1lLCBjb25zdCBRU3RyaW5nJiBzdHJp
cCk7Ci0KLU5PX1JFVFVSTiB2b2lkIGFwcFF1aXQoaW50IHN0YXR1cywgY29uc3QgUVN0cmluZyYg
bXNnID0gUVN0cmluZygpKTsKLQotUVVybCB1cmxGcm9tVXNlcklucHV0KGNvbnN0IFFTdHJpbmcm
IGlucHV0KTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9RdFRlc3RCcm93c2VyL3dlYmlu
c3BlY3Rvci5oIGIvVG9vbHMvUXRUZXN0QnJvd3Nlci93ZWJpbnNwZWN0b3IuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYzc1YmJkYzJmYjBkMGIwOGFmNGU4NmNkMWVhMjQ5MWQ1YWMy
OTliNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29s
cy9RdFRlc3RCcm93c2VyL3dlYmluc3BlY3Rvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiB3ZWJpbnNwZWN0b3JfaAotI2RlZmluZSB3ZWJpbnNwZWN0b3JfaAotCi0j
aW5jbHVkZSAicXdlYmluc3BlY3Rvci5oIgotCi1jbGFzcyBXZWJJbnNwZWN0b3IgOiBwdWJsaWMg
UVdlYkluc3BlY3RvciB7Ci0gICAgUV9PQkpFQ1QKLQotcHVibGljOgotICAgIFdlYkluc3BlY3Rv
cihRV2lkZ2V0KiBwYXJlbnQgPSAwKSA6IFFXZWJJbnNwZWN0b3IocGFyZW50KSB7fQotCi1RX1NJ
R05BTFM6Ci0gICAgdm9pZCB2aXNpYmxlQ2hhbmdlZChib29sIG5vd1Zpc2libGUpOwotCi1wcm90
ZWN0ZWQ6Ci0gICAgdm9pZCBzaG93RXZlbnQoUVNob3dFdmVudCogZXZlbnQpCi0gICAgewotICAg
ICAgICBRV2ViSW5zcGVjdG9yOjpzaG93RXZlbnQoZXZlbnQpOwotICAgICAgICBlbWl0IHZpc2li
bGVDaGFuZ2VkKHRydWUpOwotICAgIH0KLSAgICB2b2lkIGhpZGVFdmVudChRSGlkZUV2ZW50KiBl
dmVudCkKLSAgICB7Ci0gICAgICAgIFFXZWJJbnNwZWN0b3I6OmhpZGVFdmVudChldmVudCk7Ci0g
ICAgICAgIGVtaXQgdmlzaWJsZUNoYW5nZWQoZmFsc2UpOwotICAgIH0KLX07Ci0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvVG9vbHMvUXRUZXN0QnJvd3Nlci93ZWJwYWdlLmNwcCBiL1Rvb2xzL1F0VGVz
dEJyb3dzZXIvd2VicGFnZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YmM3
OGY4ZjMwYmI4Mzg1YWM4YjE1NGIxYzA1YmVkZjc4ODYyZjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvUXRUZXN0QnJvd3Nlci93ZWJwYWdlLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR2lyaXNoIFJhbWFrcmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRi
aWFzLmluPgotICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtk
ZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgotICoK
LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgIndlYnBhZ2UuaCIKLQot
I2luY2x1ZGUgImxhdW5jaGVyd2luZG93LmgiCi0KLSNpbmNsdWRlIDxRQWN0aW9uPgotI2luY2x1
ZGUgPFFBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRQXV0aGVudGljYXRvcj4KLSNpZm5kZWYgUVRf
Tk9fREVTS1RPUFNFUlZJQ0VTCi0jaW5jbHVkZSA8UURlc2t0b3BTZXJ2aWNlcz4KLSNlbmRpZgot
I2luY2x1ZGUgPFFEaWFsb2c+Ci0jaW5jbHVkZSA8UURpYWxvZ0J1dHRvbkJveD4KLSNpbmNsdWRl
IDxRTGFiZWw+Ci0jaW5jbHVkZSA8UUxheW91dD4KLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLSNp
bmNsdWRlIDxRTGluZUVkaXQ+Ci0jZW5kaWYKLSNpbmNsdWRlIDxRUHJvZ3Jlc3NCYXI+Ci0jaW5j
bHVkZSA8UXROZXR3b3JrL1FOZXR3b3JrUmVwbHk+Ci0jaW5jbHVkZSA8UXROZXR3b3JrL1FOZXR3
b3JrUmVxdWVzdD4KLSNpbmNsdWRlIDxRdE5ldHdvcmsvUU5ldHdvcmtQcm94eT4KLQotV2ViUGFn
ZTo6V2ViUGFnZShRT2JqZWN0KiBwYXJlbnQpCi0gICAgOiBRV2ViUGFnZShwYXJlbnQpCi0gICAg
LCBtX3VzZXJBZ2VudCgpCi0gICAgLCBtX2ludGVycnVwdGluZ0phdmFTY3JpcHRFbmFibGVkKGZh
bHNlKQotewotICAgIGFwcGx5UHJveHkoKTsKLQotICAgIGNvbm5lY3QobmV0d29ya0FjY2Vzc01h
bmFnZXIoKSwgU0lHTkFMKGF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoUU5ldHdvcmtSZXBseSosIFFB
dXRoZW50aWNhdG9yKikpLAotICAgICAgICAgICAgdGhpcywgU0xPVChhdXRoZW50aWNhdGlvblJl
cXVpcmVkKFFOZXR3b3JrUmVwbHkqLCBRQXV0aGVudGljYXRvciopKSk7Ci0gICAgY29ubmVjdCh0
aGlzLCBTSUdOQUwoZmVhdHVyZVBlcm1pc3Npb25SZXF1ZXN0ZWQoUVdlYkZyYW1lKiwgUVdlYlBh
Z2U6OkZlYXR1cmUpKSwgdGhpcywgU0xPVChyZXF1ZXN0UGVybWlzc2lvbihRV2ViRnJhbWUqLCBR
V2ViUGFnZTo6RmVhdHVyZSkpKTsKLSAgICBjb25uZWN0KHRoaXMsIFNJR05BTChmZWF0dXJlUGVy
bWlzc2lvblJlcXVlc3RDYW5jZWxlZChRV2ViRnJhbWUqLCBRV2ViUGFnZTo6RmVhdHVyZSkpLCB0
aGlzLCBTTE9UKGZlYXR1cmVQZXJtaXNzaW9uUmVxdWVzdENhbmNlbGVkKFFXZWJGcmFtZSosIFFX
ZWJQYWdlOjpGZWF0dXJlKSkpOwotfQotCi12b2lkIFdlYlBhZ2U6OmFwcGx5UHJveHkoKQotewot
ICAgIFFVcmwgcHJveHlVcmwocWdldGVudigiaHR0cF9wcm94eSIpKTsKLQotICAgIGlmIChwcm94
eVVybC5pc1ZhbGlkKCkgJiYgIXByb3h5VXJsLmhvc3QoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
aW50IHByb3h5UG9ydCA9IChwcm94eVVybC5wb3J0KCkgPiAwKSA/IHByb3h5VXJsLnBvcnQoKSA6
IDgwODA7Ci0gICAgICAgIG5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPnNldFByb3h5KFFOZXR3b3Jr
UHJveHkoUU5ldHdvcmtQcm94eTo6SHR0cFByb3h5LCBwcm94eVVybC5ob3N0KCksIHByb3h5UG9y
dCkpOwotICAgIH0KLX0KLQotYm9vbCBXZWJQYWdlOjpzdXBwb3J0c0V4dGVuc2lvbihRV2ViUGFn
ZTo6RXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QKLXsKLSAgICBpZiAoZXh0ZW5zaW9uID09IFFX
ZWJQYWdlOjpFcnJvclBhZ2VFeHRlbnNpb24pCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBXZWJQYWdlOjpleHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVu
c2lvbiwgY29uc3QgRXh0ZW5zaW9uT3B0aW9uKiBvcHRpb24sIEV4dGVuc2lvblJldHVybiogb3V0
cHV0KQotewotICAgIGNvbnN0IFFXZWJQYWdlOjpFcnJvclBhZ2VFeHRlbnNpb25PcHRpb24qIGlu
Zm8gPSBzdGF0aWNfY2FzdDxjb25zdCBRV2ViUGFnZTo6RXJyb3JQYWdlRXh0ZW5zaW9uT3B0aW9u
Kj4ob3B0aW9uKTsKLSAgICBRV2ViUGFnZTo6RXJyb3JQYWdlRXh0ZW5zaW9uUmV0dXJuKiBlcnJv
clBhZ2UgPSBzdGF0aWNfY2FzdDxRV2ViUGFnZTo6RXJyb3JQYWdlRXh0ZW5zaW9uUmV0dXJuKj4o
b3V0cHV0KTsKLQotICAgIGVycm9yUGFnZS0+Y29udGVudCA9IFFTdHJpbmcoIjxodG1sPjxoZWFk
Pjx0aXRsZT5GYWlsZWQgbG9hZGluZyBwYWdlPC90aXRsZT48L2hlYWQ+PGJvZHk+JTE8L2JvZHk+
PC9odG1sPiIpCi0gICAgICAgIC5hcmcoaW5mby0+ZXJyb3JTdHJpbmcpLnRvVXRmOCgpOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViUGFnZTo6YWNjZXB0TmF2aWdhdGlvblJlcXVl
c3QoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBOYXZp
Z2F0aW9uVHlwZSB0eXBlKQotewotICAgIFFPYmplY3QqIHZpZXcgPSBwYXJlbnQoKTsKLQotICAg
IFFWYXJpYW50IHZhbHVlID0gdmlldy0+cHJvcGVydHkoImtleWJvYXJkTW9kaWZpZXJzIik7Ci0K
LSAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKSB7Ci0gICAgICAgIFF0OjpLZXlib2FyZE1vZGlmaWVy
cyBtb2RpZmllcnMgPSBRdDo6S2V5Ym9hcmRNb2RpZmllcnModmFsdWUudG9JbnQoKSk7Ci0KLSAg
ICAgICAgaWYgKG1vZGlmaWVycyAmIFF0OjpTaGlmdE1vZGlmaWVyKSB7Ci0gICAgICAgICAgICBR
V2ViUGFnZSogcGFnZSA9IGNyZWF0ZVdpbmRvdyhRV2ViUGFnZTo6V2ViQnJvd3NlcldpbmRvdyk7
Ci0gICAgICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS0+bG9hZChyZXF1ZXN0KTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtb2RpZmllcnMgJiBR
dDo6QWx0TW9kaWZpZXIpIHsKLSAgICAgICAgICAgIG9wZW5VcmxJbkRlZmF1bHRCcm93c2VyKHJl
cXVlc3QudXJsKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIFFXZWJQYWdlOjphY2NlcHROYXZpZ2F0aW9uUmVxdWVzdChmcmFtZSwg
cmVxdWVzdCwgdHlwZSk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6b3BlblVybEluRGVmYXVsdEJyb3dz
ZXIoY29uc3QgUVVybCYgdXJsKQotewotI2lmbmRlZiBRVF9OT19ERVNLVE9QU0VSVklDRVMKLSAg
ICBpZiAoUUFjdGlvbiogYWN0aW9uID0gcW9iamVjdF9jYXN0PFFBY3Rpb24qPihzZW5kZXIoKSkp
Ci0gICAgICAgIFFEZXNrdG9wU2VydmljZXM6Om9wZW5VcmwoYWN0aW9uLT5kYXRhKCkudG9Vcmwo
KSk7Ci0gICAgZWxzZQotICAgICAgICBRRGVza3RvcFNlcnZpY2VzOjpvcGVuVXJsKHVybCk7Ci0j
ZW5kaWYKLX0KLQotUVN0cmluZyBXZWJQYWdlOjp1c2VyQWdlbnRGb3JVcmwoY29uc3QgUVVybCYg
dXJsKSBjb25zdAotewotICAgIGlmICghbV91c2VyQWdlbnQuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gbV91c2VyQWdlbnQ7Ci0gICAgcmV0dXJuIFFXZWJQYWdlOjp1c2VyQWdlbnRGb3JVcmwo
dXJsKTsKLX0KLQotYm9vbCBXZWJQYWdlOjpzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkKLXsK
LSAgICBpZiAoIW1faW50ZXJydXB0aW5nSmF2YVNjcmlwdEVuYWJsZWQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gUVdlYlBhZ2U6OnNob3VsZEludGVycnVwdEphdmFTY3JpcHQo
KTsKLX0KLQotdm9pZCBXZWJQYWdlOjphdXRoZW50aWNhdGlvblJlcXVpcmVkKFFOZXR3b3JrUmVw
bHkqIHJlcGx5LCBRQXV0aGVudGljYXRvciogYXV0aGVudGljYXRvcikKLXsKLSAgICBRRGlhbG9n
KiBkaWFsb2cgPSBuZXcgUURpYWxvZyhRQXBwbGljYXRpb246OmFjdGl2ZVdpbmRvdygpKTsKLSAg
ICBkaWFsb2ctPnNldFdpbmRvd1RpdGxlKCJIVFRQIEF1dGhlbnRpY2F0aW9uIik7Ci0KLSAgICBR
R3JpZExheW91dCogbGF5b3V0ID0gbmV3IFFHcmlkTGF5b3V0KGRpYWxvZyk7Ci0gICAgZGlhbG9n
LT5zZXRMYXlvdXQobGF5b3V0KTsKLQotICAgIFFMYWJlbCogbWVzc2FnZUxhYmVsID0gbmV3IFFM
YWJlbChkaWFsb2cpOwotICAgIG1lc3NhZ2VMYWJlbC0+c2V0V29yZFdyYXAodHJ1ZSk7Ci0gICAg
UVN0cmluZyBtZXNzYWdlU3RyID0gUVN0cmluZygiRW50ZXIgd2l0aCB1c2VybmFtZSBhbmQgcGFz
c3dvcmQgZm9yOiAlMSIpOwotICAgIG1lc3NhZ2VMYWJlbC0+c2V0VGV4dChtZXNzYWdlU3RyLmFy
ZyhyZXBseS0+dXJsKCkudG9TdHJpbmcoKSkpOwotICAgIGxheW91dC0+YWRkV2lkZ2V0KG1lc3Nh
Z2VMYWJlbCwgMCwgMSk7Ci0KLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLSAgICBRTGFiZWwqIHVz
ZXJMYWJlbCA9IG5ldyBRTGFiZWwoIlVzZXJuYW1lOiIsIGRpYWxvZyk7Ci0gICAgbGF5b3V0LT5h
ZGRXaWRnZXQodXNlckxhYmVsLCAxLCAwKTsKLSAgICBRTGluZUVkaXQqIHVzZXJJbnB1dCA9IG5l
dyBRTGluZUVkaXQoZGlhbG9nKTsKLSAgICBsYXlvdXQtPmFkZFdpZGdldCh1c2VySW5wdXQsIDEs
IDEpOwotCi0gICAgUUxhYmVsKiBwYXNzTGFiZWwgPSBuZXcgUUxhYmVsKCJQYXNzd29yZDoiLCBk
aWFsb2cpOwotICAgIGxheW91dC0+YWRkV2lkZ2V0KHBhc3NMYWJlbCwgMiwgMCk7Ci0gICAgUUxp
bmVFZGl0KiBwYXNzSW5wdXQgPSBuZXcgUUxpbmVFZGl0KGRpYWxvZyk7Ci0gICAgcGFzc0lucHV0
LT5zZXRFY2hvTW9kZShRTGluZUVkaXQ6OlBhc3N3b3JkKTsKLSAgICBsYXlvdXQtPmFkZFdpZGdl
dChwYXNzSW5wdXQsIDIsIDEpOwotI2VuZGlmCi0KLSAgICBRRGlhbG9nQnV0dG9uQm94KiBidXR0
b25Cb3ggPSBuZXcgUURpYWxvZ0J1dHRvbkJveChRRGlhbG9nQnV0dG9uQm94OjpPawotICAgICAg
ICAgICAgfCBRRGlhbG9nQnV0dG9uQm94OjpDYW5jZWwsIFF0OjpIb3Jpem9udGFsLCBkaWFsb2cp
OwotICAgIGNvbm5lY3QoYnV0dG9uQm94LCBTSUdOQUwoYWNjZXB0ZWQoKSksIGRpYWxvZywgU0xP
VChhY2NlcHQoKSkpOwotICAgIGNvbm5lY3QoYnV0dG9uQm94LCBTSUdOQUwocmVqZWN0ZWQoKSks
IGRpYWxvZywgU0xPVChyZWplY3QoKSkpOwotICAgIGxheW91dC0+YWRkV2lkZ2V0KGJ1dHRvbkJv
eCwgMywgMSk7Ci0KLSAgICBpZiAoZGlhbG9nLT5leGVjKCkgPT0gUURpYWxvZzo6QWNjZXB0ZWQp
IHsKLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLSAgICAgICAgYXV0aGVudGljYXRvci0+c2V0VXNl
cih1c2VySW5wdXQtPnRleHQoKSk7Ci0gICAgICAgIGF1dGhlbnRpY2F0b3ItPnNldFBhc3N3b3Jk
KHBhc3NJbnB1dC0+dGV4dCgpKTsKLSNlbmRpZgotICAgIH0KLQotICAgIGRlbGV0ZSBkaWFsb2c7
Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cmVxdWVzdFBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwg
UVdlYlBhZ2U6OkZlYXR1cmUgZmVhdHVyZSkKLXsKLSAgICBzZXRGZWF0dXJlUGVybWlzc2lvbihm
cmFtZSwgZmVhdHVyZSwgUGVybWlzc2lvbkdyYW50ZWRCeVVzZXIpOwotfQotCi12b2lkIFdlYlBh
Z2U6OmZlYXR1cmVQZXJtaXNzaW9uUmVxdWVzdENhbmNlbGVkKFFXZWJGcmFtZSosIFFXZWJQYWdl
OjpGZWF0dXJlKQotewotfQotCi1RV2ViUGFnZSogV2ViUGFnZTo6Y3JlYXRlV2luZG93KFFXZWJQ
YWdlOjpXZWJXaW5kb3dUeXBlIHR5cGUpCi17Ci0gICAgTGF1bmNoZXJXaW5kb3cqIG13ID0gbmV3
IExhdW5jaGVyV2luZG93OwotICAgIGlmICh0eXBlID09IFdlYk1vZGFsRGlhbG9nKQotICAgICAg
ICBtdy0+c2V0V2luZG93TW9kYWxpdHkoUXQ6OkFwcGxpY2F0aW9uTW9kYWwpOwotICAgIG13LT5z
aG93KCk7Ci0gICAgcmV0dXJuIG13LT5wYWdlKCk7Ci19Ci0KLVFPYmplY3QqIFdlYlBhZ2U6OmNy
ZWF0ZVBsdWdpbihjb25zdCBRU3RyaW5nICZjbGFzc0lkLCBjb25zdCBRVXJsJiwgY29uc3QgUVN0
cmluZ0xpc3QmLCBjb25zdCBRU3RyaW5nTGlzdCYpCi17Ci0gICAgaWYgKGNsYXNzSWQgPT0gImFs
aWVuX1FMYWJlbCIpIHsKLSAgICAgICAgUUxhYmVsKiBsID0gbmV3IFFMYWJlbDsKLSAgICAgICAg
bC0+d2luSWQoKTsKLSAgICAgICAgcmV0dXJuIGw7Ci0gICAgfQotCi0gICAgaWYgKGNsYXNzSWQg
PT0gUUxhdGluMVN0cmluZygiUVByb2dyZXNzQmFyIikpCi0gICAgICAgIHJldHVybiBuZXcgUVBy
b2dyZXNzQmFyKHZpZXcoKSk7Ci0gICAgaWYgKGNsYXNzSWQgPT0gUUxhdGluMVN0cmluZygiUUxh
YmVsIikpCi0gICAgICAgIHJldHVybiBuZXcgUUxhYmVsKHZpZXcoKSk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIvd2VicGFnZS5oIGIvVG9vbHMv
UXRUZXN0QnJvd3Nlci93ZWJwYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5
NjViNTZjOTY5NzBlNTQxNTdmNDczMWI2Y2EwODFkMWRlNGU0NTguLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvUXRUZXN0QnJvd3Nlci93ZWJwYWdl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdpcmlzaCBSYW1ha3Jpc2huYW4gPGdpcmlzaEBmb3J3YXJkYmlhcy5p
bj4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3Jn
PgotICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAqCi0gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgd2VicGFnZV9oCi0jZGVmaW5lIHdl
YnBhZ2VfaAotCi0jaW5jbHVkZSA8cXdlYmZyYW1lLmg+Ci0jaW5jbHVkZSA8cXdlYnBhZ2UuaD4K
LQotY2xhc3MgV2ViUGFnZSA6IHB1YmxpYyBRV2ViUGFnZSB7Ci0gICAgUV9PQkpFQ1QKLQotcHVi
bGljOgotICAgIFdlYlBhZ2UoUU9iamVjdCogcGFyZW50ID0gMCk7Ci0KLSAgICB2aXJ0dWFsIFFX
ZWJQYWdlKiBjcmVhdGVXaW5kb3coUVdlYlBhZ2U6OldlYldpbmRvd1R5cGUpOwotICAgIHZpcnR1
YWwgUU9iamVjdCogY3JlYXRlUGx1Z2luKGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRVXJsJiwgY29u
c3QgUVN0cmluZ0xpc3QmLCBjb25zdCBRU3RyaW5nTGlzdCYpOwotICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0V4dGVuc2lvbihRV2ViUGFnZTo6RXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIGV4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uLCBjb25zdCBFeHRl
bnNpb25PcHRpb24qIG9wdGlvbiwgRXh0ZW5zaW9uUmV0dXJuKiBvdXRwdXQpOwotCi0gICAgdmly
dHVhbCBib29sIGFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSogZnJhbWUsIGNvbnN0
IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCwgTmF2aWdhdGlvblR5cGUgdHlwZSk7Ci0KLSAgICBR
U3RyaW5nIHVzZXJBZ2VudEZvclVybChjb25zdCBRVXJsJiB1cmwpIGNvbnN0OwotICAgIHZvaWQg
c2V0SW50ZXJydXB0aW5nSmF2YVNjcmlwdEVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1faW50ZXJy
dXB0aW5nSmF2YVNjcmlwdEVuYWJsZWQgPSBlbmFibGVkOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpOwotCi1wdWJsaWMgUV9TTE9UUzoKLSAgICB2b2lk
IG9wZW5VcmxJbkRlZmF1bHRCcm93c2VyKGNvbnN0IFFVcmwmIHVybCA9IFFVcmwoKSk7Ci0gICAg
dm9pZCBzZXRVc2VyQWdlbnQoY29uc3QgUVN0cmluZyYgdWEpIHsgbV91c2VyQWdlbnQgPSB1YTsg
fQotICAgIHZvaWQgYXV0aGVudGljYXRpb25SZXF1aXJlZChRTmV0d29ya1JlcGx5KiwgUUF1dGhl
bnRpY2F0b3IqKTsKLSAgICB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUs
IFFXZWJQYWdlOjpGZWF0dXJlIGZlYXR1cmUpOwotICAgIHZvaWQgZmVhdHVyZVBlcm1pc3Npb25S
ZXF1ZXN0Q2FuY2VsZWQoUVdlYkZyYW1lKiBmcmFtZSwgUVdlYlBhZ2U6OkZlYXR1cmUgZmVhdHVy
ZSk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBhcHBseVByb3h5KCk7Ci0gICAgUVN0cmluZyBtX3Vz
ZXJBZ2VudDsKLSAgICBib29sIG1faW50ZXJydXB0aW5nSmF2YVNjcmlwdEVuYWJsZWQ7Ci19Owot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIvd2Vidmlldy5jcHAgYi9U
b29scy9RdFRlc3RCcm93c2VyL3dlYnZpZXcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0ZmFjY2JkNTgzNDlhNDlkNTgzY2RkM2MyMDViNjFmZDhlMTljNTAwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIv
d2Vidmlldy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHaXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9y
d2FyZGJpYXMuaW4+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlr
b3NAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJA
a2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+
Ci0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAid2Vidmlldy5o
IgotCi0jaW5jbHVkZSA8UUFjdGlvbj4KLSNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZT4KLSNpbmNs
dWRlIDxRR3JhcGhpY3NTY2VuZUNvbnRleHRNZW51RXZlbnQ+Ci0jaW5jbHVkZSA8UUdyYXBoaWNz
U2NlbmVNb3VzZUV2ZW50PgotI2luY2x1ZGUgPFFNZW51PgotI2luY2x1ZGUgPFFTY3JvbGxCYXI+
Ci0jaW5jbHVkZSA8UVRpbWVyPgotCi0jaWZuZGVmIFFUX05PX0FOSU1BVElPTgotI2luY2x1ZGUg
PFFBYnN0cmFjdEFuaW1hdGlvbj4KLSNpbmNsdWRlIDxRQWJzdHJhY3RUcmFuc2l0aW9uPgotI2lu
Y2x1ZGUgPFFGaW5hbFN0YXRlPgotI2luY2x1ZGUgPFFQcm9wZXJ0eUFuaW1hdGlvbj4KLSNpbmNs
dWRlIDxRU3RhdGU+Ci0jaW5jbHVkZSA8UVN0YXRlTWFjaGluZT4KLSNlbmRpZgotCi1XZWJWaWV3
R3JhcGhpY3NCYXNlZDo6V2ViVmlld0dyYXBoaWNzQmFzZWQoUVdpZGdldCogcGFyZW50KQotICAg
IDogUUdyYXBoaWNzVmlldyhwYXJlbnQpCi0gICAgLCBtX2l0ZW0obmV3IEdyYXBoaWNzV2ViVmll
dykKLSAgICAsIG1fbnVtUGFpbnRzVG90YWwoMCkKLSAgICAsIG1fbnVtUGFpbnRzU2luY2VMYXN0
TWVhc3VyZSgwKQotICAgICwgbV9tZWFzdXJlRnBzKGZhbHNlKQotICAgICwgbV9yZXNpemVzVG9D
b250ZW50cyhmYWxzZSkKLSAgICAsIG1fbWFjaGluZSgwKQotewotICAgIHNldFNjZW5lKG5ldyBR
R3JhcGhpY3NTY2VuZSh0aGlzKSk7Ci0gICAgc2NlbmUoKS0+YWRkSXRlbShtX2l0ZW0pOwotICAg
IHNjZW5lKCktPnNldEZvY3VzSXRlbShtX2l0ZW0pOwotCi0gICAgc2V0RnJhbWVTaGFwZShRRnJh
bWU6Ok5vRnJhbWUpOwotICAgIHNldEhvcml6b250YWxTY3JvbGxCYXJQb2xpY3koUXQ6OlNjcm9s
bEJhckFsd2F5c09mZik7Ci0gICAgc2V0VmVydGljYWxTY3JvbGxCYXJQb2xpY3koUXQ6OlNjcm9s
bEJhckFsd2F5c09mZik7Ci0KLSAgICBtX3VwZGF0ZVRpbWVyID0gbmV3IFFUaW1lcih0aGlzKTsK
LSAgICBtX3VwZGF0ZVRpbWVyLT5zZXRJbnRlcnZhbCgxMDAwKTsKLSAgICBjb25uZWN0KG1fdXBk
YXRlVGltZXIsIFNJR05BTCh0aW1lb3V0KCkpLCB0aGlzLCBTTE9UKHVwZGF0ZUZyYW1lUmF0ZSgp
KSk7Ci19Ci0KLXZvaWQgV2ViVmlld0dyYXBoaWNzQmFzZWQ6OnNldFBhZ2UoUVdlYlBhZ2UqIHBh
Z2UpCi17Ci0gICAgY29ubmVjdChwYWdlLT5tYWluRnJhbWUoKSwgU0lHTkFMKGNvbnRlbnRzU2l6
ZUNoYW5nZWQoY29uc3QgUVNpemUmKSksIFNMT1QoY29udGVudHNTaXplQ2hhbmdlZChjb25zdCBR
U2l6ZSYpKSk7Ci0gICAgY29ubmVjdChwYWdlLCBTSUdOQUwoc2Nyb2xsUmVxdWVzdGVkKGludCwg
aW50LCBjb25zdCBRUmVjdCYpKSwgU0xPVChzY3JvbGxSZXF1ZXN0ZWQoaW50LCBpbnQpKSk7Ci0g
ICAgZ3JhcGhpY3NXZWJWaWV3KCktPnNldFBhZ2UocGFnZSk7Ci19Ci0KLXZvaWQgV2ViVmlld0dy
YXBoaWNzQmFzZWQ6OnNjcm9sbFJlcXVlc3RlZChpbnQgeCwgaW50IHkpCi17Ci0gICAgaWYgKCFt
X3Jlc2l6ZXNUb0NvbnRlbnRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUdXJuIG9mZiBp
bnRlcmFjdGl2ZSBtb2RlIHdoaWxlIHNjcm9sbGluZywgb3IgUUdyYXBoaWNzVmlldyB3aWxsIHJl
cGxheSB0aGUKLSAgICAvLyBsYXN0IG1vdXNlIGV2ZW50IHdoaWNoIG1heSBjYXVzZSBXZWJLaXQg
dG8gaW5pdGlhdGUgYSBkcmFnIG9wZXJhdGlvbi4KLSAgICBib29sIGludGVyYWN0aXZlID0gaXNJ
bnRlcmFjdGl2ZSgpOwotICAgIHNldEludGVyYWN0aXZlKGZhbHNlKTsKLQotICAgIHZlcnRpY2Fs
U2Nyb2xsQmFyKCktPnNldFZhbHVlKC15KTsKLSAgICBob3Jpem9udGFsU2Nyb2xsQmFyKCktPnNl
dFZhbHVlKC14KTsKLQotICAgIHNldEludGVyYWN0aXZlKGludGVyYWN0aXZlKTsKLX0KLQotdm9p
ZCBXZWJWaWV3R3JhcGhpY3NCYXNlZDo6Y29udGVudHNTaXplQ2hhbmdlZChjb25zdCBRU2l6ZSYg
c2l6ZSkKLXsKLSAgICBpZiAobV9yZXNpemVzVG9Db250ZW50cykKLSAgICAgICAgc2NlbmUoKS0+
c2V0U2NlbmVSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLXZv
aWQgV2ViVmlld0dyYXBoaWNzQmFzZWQ6OnNldFJlc2l6ZXNUb0NvbnRlbnRzKGJvb2wgYikKLXsK
LSAgICBpZiAoYiA9PSBtX3Jlc2l6ZXNUb0NvbnRlbnRzKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3Jlc2l6ZXNUb0NvbnRlbnRzID0gYjsKLSAgICBncmFwaGljc1dlYlZpZXcoKS0+c2V0UmVz
aXplc1RvQ29udGVudHMobV9yZXNpemVzVG9Db250ZW50cyk7Ci0KLSAgICAvLyBXaGVuIHNldHRp
bmcgcmVzaXplc1RvQ29udGVudHMgT04sIG91ciB3ZWIgdmlldyB3aWRnZXQgd2lsbCBhbHdheXMg
c2l6ZSBhcyBiaWcgYXMgdGhlCi0gICAgLy8gd2ViIGNvbnRlbnQgYmVpbmcgZGlzcGxheWVkLCBh
bmQgc28gd2lsbCB0aGUgUVdlYlBhZ2UncyB2aWV3cG9ydC4gSXQgaW1wbGllcyB0aGF0IGludGVy
bmFsbHkKLSAgICAvLyBXZWJDb3JlIHdpbGwgd29yayBhcyBpZiB0aGVyZSB3YXMgbm8gY29udGVu
dCByZW5kZXJlZCBvZmZzY3JlZW4sIGFuZCB0aGVuIG5vIHNjcm9sbGJhcnMgbmVlZAotICAgIC8v
IGRyYXdpbmcuIEluIG9yZGVyIHRvIGtlZXAgc2Nyb2xsaW5nIHdvcmtpbmcsIHdlOgotICAgIC8v
Ci0gICAgLy8gMSkgU2V0IFFHcmFwaGljc1ZpZXcncyBzY3JvbGxiYXJzIHBvbGljeSBiYWNrIHRv
ICdhdXRvJy4KLSAgICAvLyAyKSBTZXQgc2NlbmUncyBib3VuZGFyaWVzIHJlY3QgdG8gYW4gaW52
YWxpZCBzaXplLCB3aGljaCBhdXRvbWF0aWNhbGx5IG1ha2VzIGl0IHRvIGJlIGFzIGJpZwotICAg
IC8vICAgIGFzIGl0IG5lZWRzIHRvIGVuY2xvc2UgYWxsIGl0ZW1zIG9udG8gaXQuIFdlIGRvIHRo
YXQgYmVjYXVzZSBRR3JhcGhpY3NWaWV3IGFsc28gY2FsY3VsYXRlcwotICAgIC8vICAgIHRoZSBz
aXplIG9mIGl0cyBzY3JvbGxhYmxlIGFyZWEgYWNjb3JkaW5nIHRvIHRoZSBhbW91bnQgb2YgY29u
dGVudCBpbiBzY2VuZSB0aGF0IGlzIHJlbmRlcmVkCi0gICAgLy8gICAgb2Zmc2NyZWVuLgotICAg
IC8vIDMpIFNldCBRV2ViUGFnZSdzIHByZWZlcnJlZENvbnRlbnRzU2l6ZSBhY2NvcmRpbmcgdG8g
dGhlIHNpemUgb2YgUUdyYXBoaWNzVmlldydzIHZpZXdwb3J0LAotICAgIC8vICAgIHNvIFdlYkNv
cmUgcHJvcGVybHkgbGF5cyBwYWdlcyBvdXQuCi0gICAgLy8KLSAgICAvLyBPbiB0aGUgb3RoZXIg
aGFuZCwgd2hlbiB0b2dnbGluZyByZXNpemVzVG9Db250ZW50cyBPRkYsIHdlIHNldCBiYWNrIHRo
ZSBkZWZhdWx0IHZhbHVlcywgYXMKLSAgICAvLyBvcHBvc2l0ZSBhcyBkZXNjcmliZWQgYWJvdmUu
Ci0gICAgaWYgKG1fcmVzaXplc1RvQ29udGVudHMpIHsKLSAgICAgICAgc2V0SG9yaXpvbnRhbFNj
cm9sbEJhclBvbGljeShRdDo6U2Nyb2xsQmFyQXNOZWVkZWQpOwotICAgICAgICBzZXRWZXJ0aWNh
bFNjcm9sbEJhclBvbGljeShRdDo6U2Nyb2xsQmFyQXNOZWVkZWQpOwotICAgICAgICBncmFwaGlj
c1dlYlZpZXcoKS0+cGFnZSgpLT5zZXRQcmVmZXJyZWRDb250ZW50c1NpemUoc2l6ZSgpKTsKLSAg
ICAgICAgUVJlY3RGIGl0ZW1SZWN0KGdyYXBoaWNzV2ViVmlldygpLT5nZW9tZXRyeSgpLnRvcExl
ZnQoKSwgZ3JhcGhpY3NXZWJWaWV3KCktPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmNvbnRlbnRzU2l6
ZSgpKTsKLSAgICAgICAgZ3JhcGhpY3NXZWJWaWV3KCktPnNldEdlb21ldHJ5KGl0ZW1SZWN0KTsK
LSAgICAgICAgc2NlbmUoKS0+c2V0U2NlbmVSZWN0KGl0ZW1SZWN0KTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBzZXRIb3Jpem9udGFsU2Nyb2xsQmFyUG9saWN5KFF0OjpTY3JvbGxCYXJBbHdheXNP
ZmYpOwotICAgICAgICBzZXRWZXJ0aWNhbFNjcm9sbEJhclBvbGljeShRdDo6U2Nyb2xsQmFyQWx3
YXlzT2ZmKTsKLSAgICAgICAgZ3JhcGhpY3NXZWJWaWV3KCktPnBhZ2UoKS0+c2V0UHJlZmVycmVk
Q29udGVudHNTaXplKFFTaXplKCkpOwotICAgICAgICBRUmVjdCB2aWV3cG9ydFJlY3QoUVBvaW50
KDAsIDApLCBzaXplKCkpOwotICAgICAgICBncmFwaGljc1dlYlZpZXcoKS0+c2V0R2VvbWV0cnko
dmlld3BvcnRSZWN0KTsKLSAgICAgICAgc2NlbmUoKS0+c2V0U2NlbmVSZWN0KHZpZXdwb3J0UmVj
dCk7Ci0gICAgfQotfQotCi12b2lkIFdlYlZpZXdHcmFwaGljc0Jhc2VkOjpyZXNpemVFdmVudChR
UmVzaXplRXZlbnQqIGV2ZW50KQotewotICAgIFFHcmFwaGljc1ZpZXc6OnJlc2l6ZUV2ZW50KGV2
ZW50KTsKLQotICAgIFFTaXplIHNpemUoZXZlbnQtPnNpemUoKSk7Ci0KLSAgICBpZiAobV9yZXNp
emVzVG9Db250ZW50cykgewotICAgICAgICBncmFwaGljc1dlYlZpZXcoKS0+cGFnZSgpLT5zZXRQ
cmVmZXJyZWRDb250ZW50c1NpemUoc2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBRUmVjdEYgcmVjdChRUG9pbnQoMCwgMCksIHNpemUpOwotICAgIGdyYXBoaWNzV2ViVmlldygp
LT5zZXRHZW9tZXRyeShyZWN0KTsKLSAgICBzY2VuZSgpLT5zZXRTY2VuZVJlY3QocmVjdCk7Ci19
Ci0KLXZvaWQgV2ViVmlld0dyYXBoaWNzQmFzZWQ6OnNldEZyYW1lUmF0ZU1lYXN1cmVtZW50RW5h
YmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9tZWFzdXJlRnBzID0gZW5hYmxlZDsKLSAgICBp
ZiAobV9tZWFzdXJlRnBzKSB7Ci0gICAgICAgIG1fbGFzdENvbnN1bHRUaW1lID0gbV9zdGFydFRp
bWUgPSBRVGltZTo6Y3VycmVudFRpbWUoKTsKLSAgICAgICAgbV9mcHNUaW1lci5zdGFydCgpOwot
ICAgICAgICBtX3VwZGF0ZVRpbWVyLT5zdGFydCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1f
ZnBzVGltZXIuc3RvcCgpOwotICAgICAgICBtX3VwZGF0ZVRpbWVyLT5zdG9wKCk7Ci0gICAgfQot
fQotCi12b2lkIFdlYlZpZXdHcmFwaGljc0Jhc2VkOjp1cGRhdGVGcmFtZVJhdGUoKQotewotICAg
IGNvbnN0IFFUaW1lIG5vdyA9IFFUaW1lOjpjdXJyZW50VGltZSgpOwotICAgIGludCBpbnRlcnZh
bCA9IG1fbGFzdENvbnN1bHRUaW1lLm1zZWNzVG8obm93KTsKLSAgICBpbnQgZnJhbWVzID0gbV9m
cHNUaW1lci5udW1GcmFtZXMoaW50ZXJ2YWwpOwotICAgIGludCBjdXJyZW50ID0gaW50ZXJ2YWwg
PyBmcmFtZXMgKiAxMDAwIC8gaW50ZXJ2YWwgOiAwOwotCi0gICAgZW1pdCBjdXJyZW50RlBTVXBk
YXRlZChjdXJyZW50KTsKLQotICAgIG1fbGFzdENvbnN1bHRUaW1lID0gbm93OwotfQotCi12b2lk
IFdlYlZpZXdHcmFwaGljc0Jhc2VkOjphbmltYXRlZEZsaXAoKQotewotI2lmbmRlZiBRVF9OT19B
TklNQVRJT04KLSAgICBRU2l6ZUYgY2VudGVyID0gZ3JhcGhpY3NXZWJWaWV3KCktPmJvdW5kaW5n
UmVjdCgpLnNpemUoKSAvIDI7Ci0gICAgUVBvaW50RiBjZW50ZXJQb2ludCA9IFFQb2ludEYoY2Vu
dGVyLndpZHRoKCksIGNlbnRlci5oZWlnaHQoKSk7Ci0gICAgZ3JhcGhpY3NXZWJWaWV3KCktPnNl
dFRyYW5zZm9ybU9yaWdpblBvaW50KGNlbnRlclBvaW50KTsKLQotICAgIFFQcm9wZXJ0eUFuaW1h
dGlvbiogYW5pbWF0aW9uID0gbmV3IFFQcm9wZXJ0eUFuaW1hdGlvbihncmFwaGljc1dlYlZpZXco
KSwgInJvdGF0aW9uIiwgdGhpcyk7Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbigxMDAwKTsK
LQotICAgIGludCByb3RhdGlvbiA9IGludChncmFwaGljc1dlYlZpZXcoKS0+cm90YXRpb24oKSk7
Ci0KLSAgICBhbmltYXRpb24tPnNldFN0YXJ0VmFsdWUocm90YXRpb24pOwotICAgIGFuaW1hdGlv
bi0+c2V0RW5kVmFsdWUocm90YXRpb24gKyAxODAgLSAocm90YXRpb24gJSAxODApKTsKLQotICAg
IGFuaW1hdGlvbi0+c3RhcnQoUUFic3RyYWN0QW5pbWF0aW9uOjpEZWxldGVXaGVuU3RvcHBlZCk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJWaWV3R3JhcGhpY3NCYXNlZDo6YW5pbWF0ZWRZRmxpcCgp
Ci17Ci0jaWZuZGVmIFFUX05PX0FOSU1BVElPTgotICAgIGlmICghbV9tYWNoaW5lKSB7Ci0gICAg
ICAgIG1fbWFjaGluZSA9IG5ldyBRU3RhdGVNYWNoaW5lKHRoaXMpOwotCi0gICAgICAgIFFTdGF0
ZSogczAgPSBuZXcgUVN0YXRlKG1fbWFjaGluZSk7Ci0gICAgICAgIHMwLT5hc3NpZ25Qcm9wZXJ0
eSh0aGlzLCAieVJvdGF0aW9uIiwgMCk7Ci0KLSAgICAgICAgUVN0YXRlKiBzMSA9IG5ldyBRU3Rh
dGUobV9tYWNoaW5lKTsKLSAgICAgICAgczEtPmFzc2lnblByb3BlcnR5KHRoaXMsICJ5Um90YXRp
b24iLCA5MCk7Ci0KLSAgICAgICAgUUFic3RyYWN0VHJhbnNpdGlvbiogdDEgPSBzMC0+YWRkVHJh
bnNpdGlvbihzMSk7Ci0gICAgICAgIFFQcm9wZXJ0eUFuaW1hdGlvbiogeVJvdGF0aW9uQW5pbSA9
IG5ldyBRUHJvcGVydHlBbmltYXRpb24odGhpcywgInlSb3RhdGlvbiIsIHRoaXMpOwotICAgICAg
ICB0MS0+YWRkQW5pbWF0aW9uKHlSb3RhdGlvbkFuaW0pOwotCi0gICAgICAgIFFTdGF0ZSogczIg
PSBuZXcgUVN0YXRlKG1fbWFjaGluZSk7Ci0gICAgICAgIHMyLT5hc3NpZ25Qcm9wZXJ0eSh0aGlz
LCAieVJvdGF0aW9uIiwgLTkwKTsKLSAgICAgICAgczEtPmFkZFRyYW5zaXRpb24oczEsIFNJR05B
TChwcm9wZXJ0aWVzQXNzaWduZWQoKSksIHMyKTsKLQotICAgICAgICBRU3RhdGUqIHMzID0gbmV3
IFFTdGF0ZShtX21hY2hpbmUpOwotICAgICAgICBzMy0+YXNzaWduUHJvcGVydHkodGhpcywgInlS
b3RhdGlvbiIsIDApOwotCi0gICAgICAgIFFBYnN0cmFjdFRyYW5zaXRpb24qIHQyID0gczItPmFk
ZFRyYW5zaXRpb24oczMpOwotICAgICAgICB0Mi0+YWRkQW5pbWF0aW9uKHlSb3RhdGlvbkFuaW0p
OwotCi0gICAgICAgIFFGaW5hbFN0YXRlKiBmaW5hbCA9IG5ldyBRRmluYWxTdGF0ZShtX21hY2hp
bmUpOwotICAgICAgICBzMy0+YWRkVHJhbnNpdGlvbihzMywgU0lHTkFMKHByb3BlcnRpZXNBc3Np
Z25lZCgpKSwgZmluYWwpOwotCi0gICAgICAgIG1fbWFjaGluZS0+c2V0SW5pdGlhbFN0YXRlKHMw
KTsKLSAgICAgICAgeVJvdGF0aW9uQW5pbS0+c2V0RHVyYXRpb24oMTAwMCk7Ci0gICAgfQotCi0g
ICAgbV9tYWNoaW5lLT5zdGFydCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViVmlld0dyYXBoaWNz
QmFzZWQ6OnBhaW50RXZlbnQoUVBhaW50RXZlbnQqIGV2ZW50KQotewotICAgIFFHcmFwaGljc1Zp
ZXc6OnBhaW50RXZlbnQoZXZlbnQpOwotICAgIGlmICghbV9tZWFzdXJlRnBzKQotICAgICAgICBy
ZXR1cm47Ci19Ci0KLXN0YXRpYyBRTWVudSogY3JlYXRlQ29udGV4dE1lbnUoUVdlYlBhZ2UqIHBh
Z2UsIFFQb2ludCBwb3NpdGlvbikKLXsKLSAgICBRTWVudSogbWVudSA9IHBhZ2UtPmNyZWF0ZVN0
YW5kYXJkQ29udGV4dE1lbnUoKTsKLQotICAgIFFXZWJIaXRUZXN0UmVzdWx0IHIgPSBwYWdlLT5t
YWluRnJhbWUoKS0+aGl0VGVzdENvbnRlbnQocG9zaXRpb24pOwotCi0gICAgaWYgKCFyLmxpbmtV
cmwoKS5pc0VtcHR5KCkpIHsKLSNpZm5kZWYgUVRfTk9fREVTS1RPUFNFUlZJQ0VTCi0gICAgICAg
IFdlYlBhZ2UqIHdlYlBhZ2UgPSBxb2JqZWN0X2Nhc3Q8V2ViUGFnZSo+KHBhZ2UpOwotICAgICAg
ICBRQWN0aW9uKiBuZXdUYWJBY3Rpb24gPSBtZW51LT5hZGRBY3Rpb24oIk9wZW4gaW4gRGVmYXVs
dCAmQnJvd3NlciIsIHdlYlBhZ2UsIFNMT1Qob3BlblVybEluRGVmYXVsdEJyb3dzZXIoKSkpOwot
ICAgICAgICBuZXdUYWJBY3Rpb24tPnNldERhdGEoci5saW5rVXJsKCkpOwotICAgICAgICBtZW51
LT5pbnNlcnRBY3Rpb24obWVudS0+YWN0aW9ucygpLmF0KDIpLCBuZXdUYWJBY3Rpb24pOwotI2Vu
ZGlmCi0gICAgICAgIGlmIChyLmxpbmtUYXJnZXRGcmFtZSgpICE9IHIuZnJhbWUoKSkKLSAgICAg
ICAgICAgIG1lbnUtPmluc2VydEFjdGlvbihtZW51LT5hY3Rpb25zKCkuYXQoMCksIHBhZ2UtPmFj
dGlvbihRV2ViUGFnZTo6T3BlbkxpbmtJblRoaXNXaW5kb3cpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IG1lbnU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NXZWJWaWV3Ojptb3VzZVByZXNzRXZlbnQoUUdyYXBo
aWNzU2NlbmVNb3VzZUV2ZW50KiBldmVudCkKLXsKLSAgICBzZXRQcm9wZXJ0eSgibW91c2VCdXR0
b25zIiwgUVZhcmlhbnQ6OmZyb21WYWx1ZShpbnQoZXZlbnQtPmJ1dHRvbnMoKSkpKTsKLSAgICBz
ZXRQcm9wZXJ0eSgia2V5Ym9hcmRNb2RpZmllcnMiLCBRVmFyaWFudDo6ZnJvbVZhbHVlKGludChl
dmVudC0+bW9kaWZpZXJzKCkpKSk7Ci0KLSAgICBRR3JhcGhpY3NXZWJWaWV3Ojptb3VzZVByZXNz
RXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFdlYlZpZXdUcmFkaXRpb25hbDo6bW91c2VQcmVzc0V2
ZW50KFFNb3VzZUV2ZW50KiBldmVudCkKLXsKLSAgICBzZXRQcm9wZXJ0eSgibW91c2VCdXR0b25z
IiwgUVZhcmlhbnQ6OmZyb21WYWx1ZShpbnQoZXZlbnQtPmJ1dHRvbnMoKSkpKTsKLSAgICBzZXRQ
cm9wZXJ0eSgia2V5Ym9hcmRNb2RpZmllcnMiLCBRVmFyaWFudDo6ZnJvbVZhbHVlKGludChldmVu
dC0+bW9kaWZpZXJzKCkpKSk7Ci0KLSAgICBRV2ViVmlldzo6bW91c2VQcmVzc0V2ZW50KGV2ZW50
KTsKLX0KLQotdm9pZCBHcmFwaGljc1dlYlZpZXc6OmNvbnRleHRNZW51RXZlbnQoUUdyYXBoaWNz
U2NlbmVDb250ZXh0TWVudUV2ZW50KiBldmVudCkKLXsKLSAgICBRTWVudSogbWVudSA9IGNyZWF0
ZUNvbnRleHRNZW51KHBhZ2UoKSwgZXZlbnQtPnBvcygpLnRvUG9pbnQoKSk7Ci0gICAgbWVudS0+
ZXhlYyhldmVudC0+c2NyZWVuUG9zKCkpOwotICAgIGRlbGV0ZSBtZW51OwotfQotCi12b2lkIFdl
YlZpZXdUcmFkaXRpb25hbDo6Y29udGV4dE1lbnVFdmVudChRQ29udGV4dE1lbnVFdmVudCogZXZl
bnQpCi17Ci0gICAgUU1lbnUqIG1lbnUgPSBjcmVhdGVDb250ZXh0TWVudShwYWdlKCksIGV2ZW50
LT5wb3MoKSk7Ci0gICAgbWVudS0+ZXhlYyhldmVudC0+Z2xvYmFsUG9zKCkpOwotICAgIGRlbGV0
ZSBtZW51OwotfQotCmRpZmYgLS1naXQgYS9Ub29scy9RdFRlc3RCcm93c2VyL3dlYnZpZXcuaCBi
L1Rvb2xzL1F0VGVzdEJyb3dzZXIvd2Vidmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1NmE2MTY4OGFjNjdlYTY4NDQ3Nzk2ZThjYjYwOTczMWYxNzkzNDY4Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIv
d2Vidmlldy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR2lyaXNoIFJhbWFrcmlzaG5hbiA8Z2lyaXNoQGZvcndh
cmRiaWFzLmluPgotICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29z
QGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtk
ZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgot
ICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiB3ZWJ2aWV3X2gKLSNk
ZWZpbmUgd2Vidmlld19oCi0KLSNpbmNsdWRlICJmcHN0aW1lci5oIgotI2luY2x1ZGUgIndlYnBh
Z2UuaCIKLSNpbmNsdWRlIDxxd2Vidmlldy5oPgotI2luY2x1ZGUgPHFncmFwaGljc3dlYnZpZXcu
aD4KLSNpbmNsdWRlIDxRR3JhcGhpY3NWaWV3PgotI2luY2x1ZGUgPFFHcmFwaGljc1dpZGdldD4K
LSNpbmNsdWRlIDxRVGltZT4KLQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRU3RhdGVNYWNo
aW5lOwotUVRfRU5EX05BTUVTUEFDRQotCi1jbGFzcyBXZWJWaWV3VHJhZGl0aW9uYWwgOiBwdWJs
aWMgUVdlYlZpZXcgewotICAgIFFfT0JKRUNUCi0KLXB1YmxpYzoKLSAgICBXZWJWaWV3VHJhZGl0
aW9uYWwoUVdpZGdldCogcGFyZW50KSA6IFFXZWJWaWV3KHBhcmVudCkge30KLQotcHJvdGVjdGVk
OgotICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUV2ZW50KFFDb250ZXh0TWVudUV2ZW50Kik7
Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCopOwotfTsKLQot
Ci1jbGFzcyBHcmFwaGljc1dlYlZpZXcgOiBwdWJsaWMgUUdyYXBoaWNzV2ViVmlldyB7Ci0gICAg
UV9PQkpFQ1QKLQotcHVibGljOgotICAgIEdyYXBoaWNzV2ViVmlldyhRR3JhcGhpY3NJdGVtKiBw
YXJlbnQgPSAwKSA6IFFHcmFwaGljc1dlYlZpZXcocGFyZW50KSB7fTsKLQotcHJvdGVjdGVkOgot
ICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUV2ZW50KFFHcmFwaGljc1NjZW5lQ29udGV4dE1l
bnVFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBtb3VzZVByZXNzRXZlbnQoUUdyYXBoaWNzU2Nl
bmVNb3VzZUV2ZW50Kik7Ci19OwotCi0KLWNsYXNzIFdlYlZpZXdHcmFwaGljc0Jhc2VkIDogcHVi
bGljIFFHcmFwaGljc1ZpZXcgewotICAgIFFfT0JKRUNUCi0gICAgUV9QUk9QRVJUWShxcmVhbCB5
Um90YXRpb24gUkVBRCB5Um90YXRpb24gV1JJVEUgc2V0WVJvdGF0aW9uKQotCi1wdWJsaWM6Ci0g
ICAgV2ViVmlld0dyYXBoaWNzQmFzZWQoUVdpZGdldCogcGFyZW50KTsKLSAgICB2b2lkIHNldFBh
Z2UoUVdlYlBhZ2UqIHBhZ2UpOwotCi0gICAgdm9pZCBzZXRJdGVtQ2FjaGVNb2RlKFFHcmFwaGlj
c0l0ZW06OkNhY2hlTW9kZSBtb2RlKSB7IGdyYXBoaWNzV2ViVmlldygpLT5zZXRDYWNoZU1vZGUo
bW9kZSk7IH0KLSAgICBRR3JhcGhpY3NJdGVtOjpDYWNoZU1vZGUgaXRlbUNhY2hlTW9kZSgpIHsg
cmV0dXJuIGdyYXBoaWNzV2ViVmlldygpLT5jYWNoZU1vZGUoKTsgfQotCi0gICAgdm9pZCBzZXRG
cmFtZVJhdGVNZWFzdXJlbWVudEVuYWJsZWQoYm9vbCBlbmFibGVkKTsKLSAgICBib29sIGZyYW1l
UmF0ZU1lYXN1cmVtZW50RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVhc3VyZUZwczsgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHJlc2l6ZUV2ZW50KFFSZXNpemVFdmVudCopOwotICAgIHZpcnR1
YWwgdm9pZCBwYWludEV2ZW50KFFQYWludEV2ZW50KiBldmVudCk7Ci0KLSAgICB2b2lkIHNldFJl
c2l6ZXNUb0NvbnRlbnRzKGJvb2wgYik7Ci0gICAgYm9vbCByZXNpemVzVG9Db250ZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVzaXplc1RvQ29udGVudHM7IH0KLQotICAgIHZvaWQgc2V0WVJvdGF0
aW9uKHFyZWFsIGFuZ2xlKTsKLSAgICBxcmVhbCB5Um90YXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3lSb3RhdGlvbjsgfQotCi0gICAgR3JhcGhpY3NXZWJWaWV3KiBncmFwaGljc1dlYlZpZXcoKSBj
b25zdCB7IHJldHVybiBtX2l0ZW07IH0KLQotcHVibGljIFFfU0xPVFM6Ci0gICAgdm9pZCB1cGRh
dGVGcmFtZVJhdGUoKTsKLSAgICB2b2lkIGFuaW1hdGVkRmxpcCgpOwotICAgIHZvaWQgYW5pbWF0
ZWRZRmxpcCgpOwotICAgIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChjb25zdCBRU2l6ZSYpOwot
ICAgIHZvaWQgc2Nyb2xsUmVxdWVzdGVkKGludCwgaW50KTsKLQotUV9TSUdOQUxTOgotICAgIHZv
aWQgY3VycmVudEZQU1VwZGF0ZWQoaW50IGZwcyk7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NX
ZWJWaWV3KiBtX2l0ZW07Ci0gICAgaW50IG1fbnVtUGFpbnRzVG90YWw7Ci0gICAgaW50IG1fbnVt
UGFpbnRzU2luY2VMYXN0TWVhc3VyZTsKLSAgICBRVGltZSBtX3N0YXJ0VGltZTsKLSAgICBRVGlt
ZSBtX2xhc3RDb25zdWx0VGltZTsKLSAgICBRVGltZXIqIG1fdXBkYXRlVGltZXI7Ci0gICAgYm9v
bCBtX21lYXN1cmVGcHM7Ci0gICAgcXJlYWwgbV95Um90YXRpb247Ci0gICAgYm9vbCBtX3Jlc2l6
ZXNUb0NvbnRlbnRzOwotICAgIFFTdGF0ZU1hY2hpbmUqIG1fbWFjaGluZTsKLSAgICBGcHNUaW1l
ciBtX2Zwc1RpbWVyOwotfTsKLQotaW5saW5lIHZvaWQgV2ViVmlld0dyYXBoaWNzQmFzZWQ6OnNl
dFlSb3RhdGlvbihxcmVhbCBhbmdsZSkKLXsKLSAgICBRUmVjdEYgciA9IGdyYXBoaWNzV2ViVmll
dygpLT5ib3VuZGluZ1JlY3QoKTsKLSAgICBncmFwaGljc1dlYlZpZXcoKS0+c2V0VHJhbnNmb3Jt
KFFUcmFuc2Zvcm0oKQotICAgICAgICAudHJhbnNsYXRlKHIud2lkdGgoKSAvIDIsIHIuaGVpZ2h0
KCkgLyAyKQotICAgICAgICAucm90YXRlKGFuZ2xlLCBRdDo6WUF4aXMpCi0gICAgICAgIC50cmFu
c2xhdGUoLXIud2lkdGgoKSAvIDIsIC1yLmhlaWdodCgpIC8gMikpOwotICAgIG1feVJvdGF0aW9u
ID0gYW5nbGU7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9E
ZXJpdmVkU291cmNlcy5wcmkgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0Rlcml2ZWRTb3VyY2VzLnBy
aQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IzOTFhZDU5YzI1NzM5Y2I0YWIxOTVj
N2JhMzFlNDI4NTVhYjk0NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0Rlcml2ZWRTb3VyY2VzLnByaQorKysgL2Rldi9u
dWxsCkBAIC0xLDEyICswLDAgQEAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZXJpdmVkIHNvdXJjZXMgZm9y
IFRlc3RXZWJLaXRBUEkKLSMKLSMgU2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBvdmVy
dmlldyBvZiB0aGUgYnVpbGQgc3lzdGVtCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVEVNUExBVEUgPSBkZXJp
dmVkCi0KLSMgTWFrZSBzdXJlIGZvcndhcmRlZCBoZWFkZXJzIG5lZWRlZCBieSB0aGlzIHByb2pl
Y3QgYXJlIHByZXNlbnQKLWZ3aGVhZGVyX2dlbmVyYXRvci5jb21tYW5kcyA9IHBlcmwgJCR7Uk9P
VF9XRUJLSVRfRElSfS9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmct
aGVhZGVycy5wbCAkJHtST09UX1dFQktJVF9ESVJ9L1Rvb2xzL1Rlc3RXZWJLaXRBUEkgJCR7Uk9P
VF9CVUlMRF9ESVJ9L1NvdXJjZS9pbmNsdWRlIHF0Ci1md2hlYWRlcl9nZW5lcmF0b3IuZGVwZW5k
cyAgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUt
Zm9yd2FyZGluZy1oZWFkZXJzLnBsCi1HRU5FUkFUT1JTICs9IGZ3aGVhZGVyX2dlbmVyYXRvcgpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZS5wcmkgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlLnByaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMTcxYTIwMGYwZGI3NGMyOTg2NjM2Yjk1MWVlMGYyMjEzNTQ1ZjFjYS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL0luamVjdGVkQnVuZGxlLnByaQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLSMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotIyBQcm9qZWN0IGZpbGUgZm9yIFRlc3RXZWJLaXRBUEkncyBJbmplY3RlZEJ1
bmRsZQotIwotIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9yIGFuIG92ZXJ2aWV3IG9mIHRo
ZSBidWlsZCBzeXN0ZW0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1URU1QTEFURSA9IGxpYgotVEFSR0VUID0g
VGVzdFdlYktpdEFQSUluamVjdGVkQnVuZGxlCi0KLUlOQ0xVREVQQVRIICs9ICQkUFdECi1JTkNM
VURFUEFUSCArPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9UaGlyZFBhcnR5L2d0ZXN0L2lu
Y2x1ZGUKLQotU09VUkNFUyArPSBcCi0gICAgJCRQV0QvSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVy
LmNwcCBcCi0gICAgJCRQV0QvSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyLmggXAotICAgICQkUFdE
L0luamVjdGVkQnVuZGxlTWFpbi5jcHAgXAotICAgICQkUFdEL0luamVjdGVkQnVuZGxlVGVzdC5o
IFwKLSAgICAkJFBXRC9QbGF0Zm9ybVV0aWxpdGllcy5jcHAgXAotICAgICQkUFdEL1BsYXRmb3Jt
VXRpbGl0aWVzLmggXAotICAgICQkUFdEL3F0L0luamVjdGVkQnVuZGxlQ29udHJvbGxlclF0LmNw
cCBcCi0gICAgJCRQV0QvcXQvUGxhdGZvcm1VdGlsaXRpZXNRdC5jcHAgXAotICAgICQkUFdEL1Rl
c3RzL1dlYktpdDIvQ2FuSGFuZGxlUmVxdWVzdF9CdW5kbGUuY3BwIFwKLSAgICAkJFBXRC9UZXN0
cy9XZWJLaXQyL0RvY3VtZW50U3RhcnRVc2VyU2NyaXB0QWxlcnRDcmFzaF9CdW5kbGUuY3BwIFwK
LSAgICAkJFBXRC9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbkJhc2ljX0J1bmRsZS5j
cHAgXAotICAgICQkUFdEL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9C
dW5kbGUuY3BwIFwKLSAgICAkJFBXRC9UZXN0cy9XZWJLaXQyL0dldEluamVjdGVkQnVuZGxlSW5p
dGlhbGl6YXRpb25Vc2VyRGF0YUNhbGxiYWNrX0J1bmRsZS5jcHAgXAotICAgICQkUFdEL1Rlc3Rz
L1dlYktpdDIvSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGVfQnVuZGxlLmNwcCBcCi0gICAgJCRQV0Qv
VGVzdHMvV2ViS2l0Mi9JbmplY3RlZEJ1bmRsZUJhc2ljX0J1bmRsZS5jcHAgXAotICAgICQkUFdE
L1Rlc3RzL1dlYktpdDIvSW5qZWN0ZWRCdW5kbGVGcmFtZUhpdFRlc3RfQnVuZGxlLmNwcCBcCi0g
ICAgJCRQV0QvVGVzdHMvV2ViS2l0Mi9JbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRh
dGFDYWxsYmFja1dpbnNfQnVuZGxlLmNwcCBcCi0gICAgJCRQV0QvVGVzdHMvV2ViS2l0Mi9Mb2Fk
Q2FuY2VsZWROb1NlcnZlclJlZGlyZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcCBcCi0gICAgJCRQV0Qv
VGVzdHMvV2ViS2l0Mi9Nb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5jcHAgXAotICAgICQkUFdE
L1Rlc3RzL1dlYktpdDIvTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0X0J1bmRsZS5jcHAg
XAotICAgICQkUFdEL1Rlc3RzL1dlYktpdDIvTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0
RmFpbHNfQnVuZGxlLmNwcCBcCi0gICAgJCRQV0QvVGVzdHMvV2ViS2l0Mi9OZXdGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCBcCi0gICAgJCRQV0QvVGVzdHMv
V2ViS2l0Mi9OZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGcmFtZXNfQnVuZGxlLmNwcCBc
Ci0gICAgJCRQV0QvVGVzdHMvV2ViS2l0Mi9QYXJlbnRGcmFtZV9CdW5kbGUuY3BwIFwKLSAgICAk
JFBXRC9UZXN0cy9XZWJLaXQyL1Jlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRGaXJlRWFybHlfQnVu
ZGxlLmNwcCBcCi0gICAgJCRQV0QvVGVzdHMvV2ViS2l0Mi9TaG91bGRHb1RvQmFja0ZvcndhcmRM
aXN0SXRlbV9CdW5kbGUuY3BwIFwKLSAgICAkJFBXRC9UZXN0cy9XZWJLaXQyL1VzZXJNZXNzYWdl
X0J1bmRsZS5jcHAgXAotICAgICQkUFdEL1Rlc3RzL1dlYktpdDIvV2lsbFNlbmRTdWJtaXRFdmVu
dF9CdW5kbGUuY3BwIFwKLSAgICAkJFBXRC9UZXN0cy9XZWJLaXQyL1dLQ29ubmVjdGlvbl9CdW5k
bGUuY3BwCi0KLQotREVTVERJUiA9ICQke1JPT1RfQlVJTERfRElSfS9saWIKLQotUVQgKz0gY29y
ZSB3ZWJraXQKLQotV0VCS0lUICs9IHd0ZiBqYXZhc2NyaXB0Y29yZSB3ZWJjb3JlIHdlYmtpdDIK
LQotQ09ORklHICs9IHBsdWdpbiBycGF0aCBjb21waWxpbmdfdGhpcmRwYXJ0eV9jb2RlCi0KLUxJ
QlMgKz0gLUwkJHtST09UX0JVSUxEX0RJUn0vU291cmNlL1RoaXJkUGFydHkvZ3Rlc3QvJCR0YXJn
ZXRTdWJEaXIoKSAtbGd0ZXN0Ci0KLURFRklORVMgKz0gQVBJVEVTVF9TT1VSQ0VfRElSPVxcXCIk
JFBXRFxcXCIgXAotICAgICAgICAgICBST09UX0JVSUxEX0RJUj1cXFwiJCR7Uk9PVF9CVUlMRF9E
SVJ9XFxcIgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcu
aCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKaW5kZXggM2ViNzkxYTE5
ZWM1NzNjNzYxOTgyMjRiMDVlYTIyMzIxYWE0YTlkNC4uZThjZjFiZTA1MzJiNWFmYThiZGQwMDc4
MGNhNTVmY2Q0OWRlNGRiMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9y
bVdlYlZpZXcuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCkBA
IC01NSwxMyArNTUsNiBAQCB0eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7
CiAjZW5kaWYKIHR5cGVkZWYgRXZhc19PYmplY3QqIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBF
Y29yZV9FdmFzKiBQbGF0Zm9ybVdpbmRvdzsKLSNlbGlmIFBMQVRGT1JNKFFUKQotUVRfQkVHSU5f
TkFNRVNQQUNFCi1jbGFzcyBRUXVpY2tWaWV3OwotUVRfRU5EX05BTUVTUEFDRQotY2xhc3MgUVF1
aWNrV2ViVmlldzsKLXR5cGVkZWYgUVF1aWNrV2ViVmlldyogUGxhdGZvcm1XS1ZpZXc7Ci10eXBl
ZGVmIFFRdWlja1ZpZXcqIFBsYXRmb3JtV2luZG93OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS5wcmkgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkucHJpCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBkZGM5OTM0ZjQ0YTRmMDk3OGE1YTlmMmFkZmVlNWUwOTg4OTUx
NDlkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS5wcmkKKysrIC9kZXYvbnVsbApAQCAtMSwyMiAr
MCwwIEBACi0KLUlOQ0xVREVQQVRIICs9ICQkUFdEICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNl
L1RoaXJkUGFydHkvZ3Rlc3QvaW5jbHVkZQotV0VCS0lUICs9IHd0ZiBqYXZhc2NyaXB0Y29yZSB3
ZWJraXQyCi0KLURFRklORVMgKz0gUVRfTk9fQ0FTVF9GUk9NX0FTQ0lJCi0KLVFUICs9IGNvcmUg
Y29yZS1wcml2YXRlIGd1aSBndWktcHJpdmF0ZSB3ZWJraXQgcXVpY2sgcXVpY2stcHJpdmF0ZQot
Ci1DT05GSUcgKz0gY29tcGlsaW5nX3RoaXJkcGFydHlfY29kZQotCi1TT1VSQ0VTICs9IFwKLSAg
ICAkJFBXRC9KYXZhU2NyaXB0VGVzdC5jcHAgXAotICAgICQkUFdEL1BsYXRmb3JtVXRpbGl0aWVz
LmNwcCBcCi0gICAgJCRQV0QvVGVzdHNDb250cm9sbGVyLmNwcCBcCi0gICAgJCRQV0QvcXQvbWFp
bi5jcHAgXAotICAgICQkUFdEL3F0L1BsYXRmb3JtVXRpbGl0aWVzUXQuY3BwIFwKLSAgICAkJFBX
RC9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHAKLQotTElCUyArPSAtTCQke1JPT1RfQlVJTERfRElS
fS9Tb3VyY2UvVGhpcmRQYXJ0eS9ndGVzdC8kJHRhcmdldFN1YkRpcigpIC1sZ3Rlc3QKLQotREVG
SU5FUyArPSBST09UX0JVSUxEX0RJUj1cXFwiJCR7Uk9PVF9CVUlMRF9ESVJ9XFxcIgotCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkucHJvIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnBybwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYjlkMGNkNWI2MDJmNTExNWZjZWRmMWU5MzdhNzkwZDNjMzk5NmE2YS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkucHJvCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotVEVNUExBVEUg
PSBzdWJkaXJzCi1DT05GSUcgKz0gb3JkZXJlZAotCi1kZXJpdmVkX3NvdXJjZXMuZmlsZSA9IERl
cml2ZWRTb3VyY2VzLnByaQotaW5qZWN0ZWRfYnVuZGxlLmZpbGUgPSBJbmplY3RlZEJ1bmRsZS5w
cmkKLXRlc3RzLmZpbGUgPSBUZXN0cy5wcmkKLQotU1VCRElSUyArPSBkZXJpdmVkX3NvdXJjZXMg
aW5qZWN0ZWRfYnVuZGxlIHRlc3RzCi0KLWFkZFN0cmljdFN1YmRpck9yZGVyQmV0d2VlbihkZXJp
dmVkX3NvdXJjZXMsIGluamVjdGVkX2J1bmRsZSkKLWFkZFN0cmljdFN1YmRpck9yZGVyQmV0d2Vl
bihkZXJpdmVkX3NvdXJjZXMsIHRlc3RzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy5wcmkgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzLnByaQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMTVlODFjMDk0ZDJkMjc5MTM0OTY0ZmFiNTMyZmM2ZTdjM2NjNGY1
Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzLnByaQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotVEVN
UExBVEUgPSBzdWJkaXJzCi0KLVNVQkRJUlMgKz0gVGVzdHMvV1RGIFRlc3RzL0phdmFTY3JpcHRD
b3JlIFRlc3RzL1dlYktpdDIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDlkNDRmYWQwZTc3N2UyZGQyODhmYjJlZGQxMTBlZGY4YTgxYTc1YWMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KKysrIC9kZXYv
bnVsbApAQCAtMSw4ICswLDAgQEAKLVRFTVBMQVRFID0gYXBwCi1UQVJHRVQgPSB0c3RfanNjCi0K
LVNPVVJDRVMgKz0gKi5jcHAKLQotaW5jbHVkZSguLi8uLi9UZXN0V2ViS2l0QVBJLnByaSkKLQot
REVGSU5FUyArPSBBUElURVNUX1NPVVJDRV9ESVI9XFxcIiQkUFdEXFxcIgpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9JbnRlZ2VyVG9TdHJpbmdDb252ZXJz
aW9uLmNwcAppbmRleCA2YjlkOGRmNzI3NmRlYjBiNDljZjRmN2UzNTIwNTcyYTQ5NWFhNzBkLi40
OWEyZGUzMjZiODZhOTcxMWNlNGJiNDJjODM0NzQ0YTk3MWQ0NDY2IDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmNwcAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9JbnRlZ2VyVG9TdHJpbmdDb252ZXJz
aW9uLmNwcApAQCAtNDIsMTEgKzQyLDExIEBAIHRlbXBsYXRlPD4gc3RydWN0IFByaW50ZkZvcm1h
dFRyYWl0PGxvbmc+IHsgc3RhdGljIGNvbnN0IGNoYXIgZm9ybWF0W107IH07CiBjb25zdCBjaGFy
IFByaW50ZkZvcm1hdFRyYWl0PGxvbmc+Ojpmb3JtYXRbXSA9ICIlbGQiOwogCiB0ZW1wbGF0ZTw+
IHN0cnVjdCBQcmludGZGb3JtYXRUcmFpdDxsb25nIGxvbmc+IHsgc3RhdGljIGNvbnN0IGNoYXIg
Zm9ybWF0W107IH07Ci0jaWYgT1MoV0lORE9XUykgJiYgIVBMQVRGT1JNKFFUKQorI2lmIE9TKFdJ
TkRPV1MpCiBjb25zdCBjaGFyIFByaW50ZkZvcm1hdFRyYWl0PGxvbmcgbG9uZz46OmZvcm1hdFtd
ID0gIiVJNjRpIjsKICNlbHNlCiBjb25zdCBjaGFyIFByaW50ZkZvcm1hdFRyYWl0PGxvbmcgbG9u
Zz46OmZvcm1hdFtdID0gIiVsbGkiOwotI2VuZGlmIC8vIE9TKFdJTkRPV1MpICYmICFQTEFURk9S
TShRVCkKKyNlbmRpZiAvLyBPUyhXSU5ET1dTKQogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBQcmludGZG
b3JtYXRUcmFpdDx1bnNpZ25lZCBzaG9ydD4geyBzdGF0aWMgY29uc3QgY2hhciBmb3JtYXRbXTsg
fTsKIGNvbnN0IGNoYXIgUHJpbnRmRm9ybWF0VHJhaXQ8dW5zaWduZWQgc2hvcnQ+Ojpmb3JtYXRb
XSA9ICIlaHUiOwpAQCAtNTgsMTEgKzU4LDExIEBAIHRlbXBsYXRlPD4gc3RydWN0IFByaW50ZkZv
cm1hdFRyYWl0PHVuc2lnbmVkIGxvbmc+IHsgc3RhdGljIGNvbnN0IGNoYXIgZm9ybWF0W107CiBj
b25zdCBjaGFyIFByaW50ZkZvcm1hdFRyYWl0PHVuc2lnbmVkIGxvbmc+Ojpmb3JtYXRbXSA9ICIl
bHUiOwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBQcmludGZGb3JtYXRUcmFpdDx1bnNpZ25lZCBsb25n
IGxvbmc+IHsgc3RhdGljIGNvbnN0IGNoYXIgZm9ybWF0W107IH07Ci0jaWYgT1MoV0lORE9XUykg
JiYgIVBMQVRGT1JNKFFUKQorI2lmIE9TKFdJTkRPV1MpCiBjb25zdCBjaGFyIFByaW50ZkZvcm1h
dFRyYWl0PHVuc2lnbmVkIGxvbmcgbG9uZz46OmZvcm1hdFtdID0gIiVJNjR1IjsKICNlbHNlCiBj
b25zdCBjaGFyIFByaW50ZkZvcm1hdFRyYWl0PHVuc2lnbmVkIGxvbmcgbG9uZz46OmZvcm1hdFtd
ID0gIiVsbHUiOwotI2VuZGlmIC8vIE9TKFdJTkRPV1MpICYmICFQTEFURk9STShRVCkKKyNlbmRp
ZiAvLyBPUyhXSU5ET1dTKQogCiAKIC8vIEZJWE1FOiB1c2Ugc25wcmludGYgZnJvbSBTdHJpbmdF
eHRyYXMuaApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvV1RGLnBy
byBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1dURi5wcm8KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDkyODBjY2ZiYTFjYTQ1NDIwYzBjOGI1Njk1MDU5Njk3NzZlYWVkZWQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvV1RGLnBybworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAg
QEAKLVRFTVBMQVRFID0gYXBwCi1UQVJHRVQgPSB0c3Rfd3RmCi0KLVNPVVJDRVMgKz0gXAotICAg
IEF0b21pY1N0cmluZy5jcHAgXAotICAgIENoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAg
XAotICAgIENTdHJpbmcuY3BwIFwKLSAgICBGdW5jdGlvbmFsLmNwcCBcCi0gICAgSGFzaE1hcC5j
cHAgXAotICAgIEhhc2hTZXQuY3BwIFwKLSAgICBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmNw
cCBcCi0gICAgTGlzdEhhc2hTZXQuY3BwIFwKLSAgICBNRDUuY3BwIFwKLSAgICBNYXRoRXh0cmFz
LmNwcCBcCi0gICAgTWVkaWFUaW1lLmNwcCBcCi0gICAgUmVkQmxhY2tUcmVlLmNwcCBcCi0gICAg
U0hBMS5jcHAgXAotICAgIFNhdHVyYXRlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCBcCi0gICAg
U3RyaW5nQnVpbGRlci5jcHAgXAotICAgIFN0cmluZ0hhc2hlci5jcHAgXAotICAgIFN0cmluZ0lt
cGwuY3BwIFwKLSAgICBTdHJpbmdPcGVyYXRvcnMuY3BwIFwKLSAgICBUZW1wb3JhcnlDaGFuZ2Uu
Y3BwIFwKLSAgICBWZWN0b3IuY3BwIFwKLSAgICBXVEZTdHJpbmcuY3BwCi0KLWluY2x1ZGUoLi4v
Li4vVGVzdFdlYktpdEFQSS5wcmkpCi0KLURFRklORVMgKz0gQVBJVEVTVF9TT1VSQ0VfRElSPVxc
XCIkJFBXRFxcXCIKLQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyL1dlYktpdDIucHJvIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1dlYktp
dDIucHJvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTkzNjQzZmM2YjNiNDg0Mjdj
MWQ2ZjQ4ZmQ0YzJjZDE3NDNhMDE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9XZWJLaXQyLnBy
bworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLVRFTVBMQVRFID0gYXBwCi1UQVJHRVQg
PSB0c3Rfd2Via2l0MgotCi1TT1VSQ0VTICs9IFwKLSAgICBBYm91dEJsYW5rTG9hZC5jcHAgXAot
ICAgIERvY3VtZW50U3RhcnRVc2VyU2NyaXB0QWxlcnRDcmFzaC5jcHAgXAotICAgIERPTVdpbmRv
d0V4dGVuc2lvbkJhc2ljLmNwcCBcCi0gICAgRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZS5jcHAg
XAotICAgIERvY3VtZW50U3RhcnRVc2VyU2NyaXB0QWxlcnRDcmFzaC5jcHAgXAotICAgIEV2YWx1
YXRlSmF2YVNjcmlwdC5jcHAgXAotICAgIEZhaWxlZExvYWQuY3BwIFwKLSAgICBGaW5kLmNwcCBc
Ci0gICAgRnJhbWVNSU1FVHlwZUhUTUwuY3BwIFwKLSAgICBGcmFtZU1JTUVUeXBlUE5HLmNwcCBc
Ci0gICAgR2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhQ2FsbGJhY2suY3Bw
IFwKLSAgICBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZS5jcHAgXAotICAgIEluamVjdGVkQnVuZGxl
QmFzaWMuY3BwIFwKLSAgICBJbmplY3RlZEJ1bmRsZUZyYW1lSGl0VGVzdC5jcHAgXAotICAgIElu
amVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YUNhbGxiYWNrV2lucy5jcHAgXAotICAg
IExvYWRBbHRlcm5hdGVIVE1MU3RyaW5nV2l0aE5vbkRpcmVjdG9yeVVSTC5jcHAgXAotICAgIExv
YWRDYW5jZWxlZE5vU2VydmVyUmVkaXJlY3RDYWxsYmFjay5jcHAgXAotICAgIExvYWRQYWdlT25D
cmFzaC5jcHAgXAotICAgIE1vdXNlTW92ZUFmdGVyQ3Jhc2guY3BwIFwKLSAgICBQYWdlTG9hZEJh
c2ljLmNwcCBcCi0gICAgUGFnZUxvYWREaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2VGb3JGcmFt
ZS5jcHAgXAotICAgIFBhZ2VWaXNpYmlsaXR5U3RhdGUuY3BwIFwKLSAgICBQYXJlbnRGcmFtZS5j
cHAgXAotICAgIFByZXZlbnRFbXB0eVVzZXJBZ2VudC5jcHAgXAotICAgIFByaXZhdGVCcm93c2lu
Z1B1c2hTdGF0ZU5vSGlzdG9yeUNhbGxiYWNrLmNwcCBcCi0gICAgUmVsb2FkUGFnZUFmdGVyQ3Jh
c2guY3BwIFwKLSAgICBSZXNpemVXaW5kb3dBZnRlckNyYXNoLmNwcCBcCi0gICAgUmVzcG9uc2l2
ZW5lc3NUaW1lckRvZXNudEZpcmVFYXJseS5jcHAgXAotICAgIFRlcm1pbmF0ZVR3aWNlLmNwcCBc
Ci0gICAgVXNlck1lc3NhZ2UuY3BwIFwKLSAgICBXaWxsU2VuZFN1Ym1pdEV2ZW50LmNwcCBcCi0g
ICAgV0tDb25uZWN0aW9uLmNwcCBcCi0gICAgV0tTdHJpbmcuY3BwIFwKLSAgICBXS1N0cmluZ0pT
U3RyaW5nLmNwcCBcCi0gICAgV0tVUkwuY3BwCi0KLUZBSUxJTkdfU09VUkNFUyA9IFwKLSAgICBD
YW5IYW5kbGVSZXF1ZXN0LmNwcCBcCi0KLUZBSUxJTkdfU09VUkNFUyArPSBTaG91bGRHb1RvQmFj
a0ZvcndhcmRMaXN0SXRlbS5jcHAgIyBPbmx5IHN0YWxscyBpbiBmbGlja2FibGUgbW9kZS4KLUZB
SUxJTkdfU09VUkNFUyArPSBTcGFjZWJhclNjcm9sbGluZy5jcHAgIyBPbmx5IGZhaWxzIGluIGZs
aWNrYWJsZSBtb2RlLgotCi1TT1VSQ0VTICs9ICQkRkFJTElOR19TT1VSQ0VTCi0KLSMgVGVzdHMg
c2tpcHBlZCBiZWNhdXNlIHRoZXkgY3Jhc2gsIHN0YWxsIG9yIGRvIG5vdCBjb21waWxlLgotU0tJ
UFBFRF9TT1VSQ0VTID0gXAotICAgIENvb2tpZU1hbmFnZXIuY3BwIFwKLSAgICBEb3dubG9hZERl
Y2lkZURlc3RpbmF0aW9uQ3Jhc2guY3BwIFwKLSAgICBGb3JjZVJlcGFpbnQuY3BwIFwKLSAgICBO
ZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQuY3BwIFwKLSAgICBOZXdGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXRGYWlscy5jcHAgXAotICAgIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxh
eW91dEZvckltYWdlcy5jcHAgXAotICAgIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZy
YW1lcy5jcHAgXAotICAgIFJlc3RvcmVTZXNzaW9uU3RhdGVDb250YWluaW5nRm9ybURhdGEuY3Bw
IFwKLSAgICBXZWJDb3JlU3RhdGlzdGljc1dpdGhOb1dlYlByb2Nlc3MuY3BwCi0KLWluY2x1ZGUo
Li4vLi4vVGVzdFdlYktpdEFQSS5wcmkpCi0KLURFRklORVMgKz0gQVBJVEVTVF9TT1VSQ0VfRElS
PVxcXCIkJFBXRFxcXCIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvcXQvSW5qZWN0
ZWRCdW5kbGVDb250cm9sbGVyUXQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9xdC9JbmplY3Rl
ZEJ1bmRsZUNvbnRyb2xsZXJRdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVk
NTUwMDJjY2JjZjFkMjVmNmNjODNiZGVmNGJiOWZjMDlkNmIzZTUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9xdC9Jbmpl
Y3RlZEJ1bmRsZUNvbnRyb2xsZXJRdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuaCIKLQot
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewotCi12b2lkIEluamVjdGVkQnVuZGxlQ29udHJvbGxl
cjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9xdC9QbGF0Zm9ybVV0aWxpdGll
c1F0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvcXQvUGxhdGZvcm1VdGlsaXRpZXNRdC5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhM2MxM2E2NjE2NmNkZjI2ODBlZTFmMWU4
OTdmNjhiY2M3NWYxYTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9xdC9QbGF0Zm9ybVV0aWxpdGllc1F0LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgRGln
aWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVV0aWxpdGllcy5oIgotCi0jaW5jbHVkZSA8V2ViS2l0Mi9X
S1N0cmluZ1F0Lmg+Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XS05hdGl2ZUV2ZW50Lmg+Ci0jaW5jbHVk
ZSA8V2ViS2l0Mi9XS1VSTFF0Lmg+Ci0KLSNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgotI2lu
Y2x1ZGUgPFFEaXI+Ci0jaW5jbHVkZSA8UVVybD4KLSNpbmNsdWRlIDxRVGhyZWFkPgotCi1uYW1l
c3BhY2UgVGVzdFdlYktpdEFQSSB7Ci1uYW1lc3BhY2UgVXRpbCB7Ci0KLXZvaWQgcnVuKGJvb2wq
IGRvbmUpCi17Ci0gICAgd2hpbGUgKCEqZG9uZSkKLSAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6
cHJvY2Vzc0V2ZW50cygpOwotfQotCi12b2lkIHNsZWVwKGRvdWJsZSBzZWNvbmRzKQotewotICAg
IFFUaHJlYWQ6OnNsZWVwKHNlY29uZHMpOwotfQotCi1XS1N0cmluZ1JlZiBjcmVhdGVJbmplY3Rl
ZEJ1bmRsZVBhdGgoKQotewotICAgIFFTdHJpbmcgcGF0aCA9IFFGaWxlSW5mbyhRU3RyaW5nTGl0
ZXJhbChST09UX0JVSUxEX0RJUiAiL2xpYi9saWJUZXN0V2ViS2l0QVBJSW5qZWN0ZWRCdW5kbGUi
KSkuYWJzb2x1dGVGaWxlUGF0aCgpOwotCi0gICAgcmV0dXJuIFdLU3RyaW5nQ3JlYXRlV2l0aFFT
dHJpbmcocGF0aCk7Ci19Ci0KLVdLVVJMUmVmIGNyZWF0ZVVSTEZvclJlc291cmNlKGNvbnN0IGNo
YXIqIHJlc291cmNlLCBjb25zdCBjaGFyKiBleHRlbnNpb24pCi17Ci0gICAgUURpciBwYXRoKFFT
dHJpbmdMaXRlcmFsKEFQSVRFU1RfU09VUkNFX0RJUikpOwotICAgIFFTdHJpbmcgZmlsZW5hbWUg
PSBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHJlc291cmNlKSArIFFTdHJpbmdMaXRlcmFsKCIuIikg
KyBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGV4dGVuc2lvbik7Ci0KLSAgICByZXR1cm4gV0tVUkxD
cmVhdGVXaXRoUVVybChRVXJsOjpmcm9tTG9jYWxGaWxlKHBhdGguYWJzb2x1dGVGaWxlUGF0aChm
aWxlbmFtZSkpKTsKLX0KLQotV0tVUkxSZWYgVVJMRm9yTm9uRXhpc3RlbnRSZXNvdXJjZSgpCi17
Ci0gICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJmaWxlOi8vL2RvZXMtbm90
LWV4aXN0Lmh0bWwiKTsKLX0KLQotYm9vbCBpc0tleURvd24oV0tOYXRpdmVFdmVudFB0ciBldmVu
dCkKLXsKLSAgICByZXR1cm4gZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OktleVByZXNzOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBVdGlsCi19IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL3F0L1BsYXRmb3JtV2ViVmlld1F0LmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvcXQvUGxhdGZvcm1XZWJWaWV3UXQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4ZjU3MWM1NDQ4ODhiNTE5MDY3OTU1MTcwYWRkMzVhODM3YzQ2OGQ3
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvcXQvUGxhdGZvcm1XZWJWaWV3UXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIERpZ2lhIFBsYy4g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW5jbHVkZSAi
cXF1aWNrd2VicGFnZV9wLmgiCi0jaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCi0KLSNpbmNs
dWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+Ci0KLSNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9u
PgotI2luY2x1ZGUgPFFFdmVudExvb3A+Ci0jaW5jbHVkZSA8UVFtbFByb3BlcnR5PgotI2luY2x1
ZGUgPFF0UXVpY2svUVF1aWNrVmlldz4KLSNpbmNsdWRlIDxxcGEvcXdpbmRvd3N5c3RlbWludGVy
ZmFjZS5oPgotCi1uYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0KLWNsYXNzIFdyYXBwZXJXaW5k
b3cgOiBwdWJsaWMgUVF1aWNrVmlldyB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBXcmFw
cGVyV2luZG93KFFRdWlja1dlYlZpZXcqIHZpZXcpCi0gICAgICAgIDogUVF1aWNrVmlldyhRVXJs
KFFTdHJpbmdMaXRlcmFsKCJkYXRhOnRleHQvcGxhaW4saW1wb3J0IFF0UXVpY2sgMi4wXG5JdGVt
IHsgb2JqZWN0TmFtZTogJ3Jvb3QnIH0iKSkpCi0gICAgICAgICwgbV92aWV3KHZpZXcpCi0gICAg
ewotICAgICAgICBpZiAoc3RhdHVzKCkgPT0gUVF1aWNrVmlldzo6UmVhZHkpCi0gICAgICAgICAg
ICBoYW5kbGVTdGF0dXNDaGFuZ2VkKFFRdWlja1ZpZXc6OlJlYWR5KTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoc3RhdHVzQ2hhbmdlZChRUXVpY2tWaWV3
OjpTdGF0dXMpKSwgU0xPVChoYW5kbGVTdGF0dXNDaGFuZ2VkKFFRdWlja1ZpZXc6OlN0YXR1cykp
KTsKLSAgICB9Ci0KLXByaXZhdGUgUV9TTE9UUzoKLSAgICB2b2lkIGhhbmRsZVN0YXR1c0NoYW5n
ZWQoUVF1aWNrVmlldzo6U3RhdHVzIHN0YXR1cykKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0dXMg
IT0gUVF1aWNrVmlldzo6UmVhZHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgc2V0
R2VvbWV0cnkoMCwgMCwgODAwLCA2MDApOwotCi0gICAgICAgIHNldFJlc2l6ZU1vZGUoUVF1aWNr
Vmlldzo6U2l6ZVJvb3RPYmplY3RUb1ZpZXcpOwotICAgICAgICBtX3ZpZXctPnNldFBhcmVudEl0
ZW0ocm9vdE9iamVjdCgpKTsKLSAgICAgICAgUVFtbFByb3BlcnR5Ojp3cml0ZShtX3ZpZXcsIFFT
dHJpbmdMaXRlcmFsKCJhbmNob3JzLmZpbGwiKSwgcVZhcmlhbnRGcm9tVmFsdWUocm9vdE9iamVj
dCgpKSk7Ci0KLSAgICAgICAgbV92aWV3LT5leHBlcmltZW50YWwoKS0+c2V0UmVuZGVyVG9PZmZz
Y3JlZW5CdWZmZXIodHJ1ZSk7Ci0KLSAgICAgICAgUVdpbmRvd1N5c3RlbUludGVyZmFjZTo6aGFu
ZGxlV2luZG93QWN0aXZhdGVkKHRoaXMpOwotICAgICAgICBtX3ZpZXctPnBhZ2UoKS0+c2V0Rm9j
dXModHJ1ZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFFRdWlja1dlYlZpZXcqIG1fdmlldzsK
LX07Ci0KLVBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiBjb250
ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCi17Ci0gICAgbV92aWV3ID0gbmV3
IFFRdWlja1dlYlZpZXcoY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKTsKLSAgICBtX3ZpZXctPnNl
dEFsbG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckxvY2FsSG9zdCh0cnVlKTsKLSAgICBtX3ZpZXct
PmNvbXBvbmVudENvbXBsZXRlKCk7Ci0KLSAgICBtX3dpbmRvdyA9IG5ldyBXcmFwcGVyV2luZG93
KG1fdmlldyk7Ci19Ci0KLVBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygpCi17Ci0g
ICAgZGVsZXRlIG1fd2luZG93OwotfQotCi12b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8o
dW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICAvLyBJZiB3ZSBkbyBub3Qg
aGF2ZSBhIHBsYXRmb3JtIHdpbmRvdyB3ZSB3aWxsIG5ldmVyIGdldCB0aGUgbmVjZXNzYXJ5Ci0g
ICAgLy8gcmVzaXplIGV2ZW50LCBzbyBzaW11bGF0ZSBpdCBpbiB0aGF0IGNhc2UgdG8gbWFrZSBz
dXJlIHRoZSBxdWlja3ZpZXcgaXMKLSAgICAvLyByZXNpemVkIHRvIHdoYXQgdGhlIGFwaSB0ZXN0
cyBleHBlY3RzLgotICAgIGlmICghbV93aW5kb3ctPmhhbmRsZSgpKSB7Ci0gICAgICAgIFFSZWN0
IG5ld0dlb21ldHJ5KG1fd2luZG93LT54KCksIG1fd2luZG93LT55KCksIHdpZHRoLCBoZWlnaHQp
OwotICAgICAgICBRV2luZG93U3lzdGVtSW50ZXJmYWNlOjpoYW5kbGVHZW9tZXRyeUNoYW5nZSht
X3dpbmRvdywgbmV3R2VvbWV0cnkpOwotICAgICAgICBRV2luZG93U3lzdGVtSW50ZXJmYWNlOjpm
bHVzaFdpbmRvd1N5c3RlbUV2ZW50cygpOwotICAgIH0KLQotICAgIG1fd2luZG93LT5yZXNpemUo
d2lkdGgsIGhlaWdodCk7Ci19Ci0KLVdLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBhZ2UoKSBj
b25zdAotewotICAgIHJldHVybiBtX3ZpZXctPnBhZ2VSZWYoKTsKLX0KLQotdm9pZCBQbGF0Zm9y
bVdlYlZpZXc6OmZvY3VzKCkKLXsKLSAgICBtX3ZpZXctPnNldEZvY3VzKHRydWUpOwotfQotCi12
b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVTcGFjZWJhcktleVByZXNzKCkKLXsKLSAgICBR
S2V5RXZlbnQgZXZlbnQoUUV2ZW50OjpLZXlQcmVzcywgUXQ6OktleV9TcGFjZSwgUXQ6Ok5vTW9k
aWZpZXIpOwotICAgIFFDb3JlQXBwbGljYXRpb246OnNlbmRFdmVudChtX3dpbmRvdywgJmV2ZW50
KTsKLSAgICBRS2V5RXZlbnQgZXZlbnQyKFFFdmVudDo6S2V5UmVsZWFzZSwgUXQ6OktleV9TcGFj
ZSwgUXQ6Ok5vTW9kaWZpZXIpOwotICAgIFFDb3JlQXBwbGljYXRpb246OnNlbmRFdmVudChtX3dp
bmRvdywgJmV2ZW50Mik7Ci19Ci0KLXZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZUFsdEtl
eVByZXNzKCkKLXsKLSAgICBRS2V5RXZlbnQgZXZlbnQoUUV2ZW50OjpLZXlQcmVzcywgUXQ6Oktl
eV9BbHQsIFF0OjpOb01vZGlmaWVyKTsKLSAgICBRQ29yZUFwcGxpY2F0aW9uOjpzZW5kRXZlbnQo
bV93aW5kb3csICZldmVudCk7Ci0gICAgUUtleUV2ZW50IGV2ZW50MihRRXZlbnQ6OktleVJlbGVh
c2UsIFF0OjpLZXlfQWx0LCBRdDo6Tm9Nb2RpZmllcik7Ci0gICAgUUNvcmVBcHBsaWNhdGlvbjo6
c2VuZEV2ZW50KG1fd2luZG93LCAmZXZlbnQyKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVdlYlZpZXc6
OnNpbXVsYXRlTW91c2VNb3ZlKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHkpCi17Ci0gICAgUVBvaW50
RiBtb3VzZVBvcyh4LCB5KTsKLSAgICBRTW91c2VFdmVudCBldmVudChRRXZlbnQ6Ok1vdXNlTW92
ZSwgbW91c2VQb3MsIFF0OjpOb0J1dHRvbiwgUXQ6Ok5vQnV0dG9uLCBRdDo6Tm9Nb2RpZmllcik7
Ci0gICAgUUNvcmVBcHBsaWNhdGlvbjo6c2VuZEV2ZW50KG1fd2luZG93LCAmZXZlbnQpOwotfQot
Ci12b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVSaWdodENsaWNrKHVuc2lnbmVkIHgsIHVu
c2lnbmVkIHkpCi17Ci0gICAgUVBvaW50RiBtb3VzZVBvcyh4LCB5KTsKLSAgICBRTW91c2VFdmVu
dCBldmVudDIoUUV2ZW50OjpNb3VzZUJ1dHRvblByZXNzLCBtb3VzZVBvcywgUXQ6OlJpZ2h0QnV0
dG9uLCBRdDo6UmlnaHRCdXR0b24sIFF0OjpOb01vZGlmaWVyKTsKLSAgICBRQ29yZUFwcGxpY2F0
aW9uOjpzZW5kRXZlbnQobV93aW5kb3csICZldmVudDIpOwotICAgIFFNb3VzZUV2ZW50IGV2ZW50
MyhRRXZlbnQ6Ok1vdXNlQnV0dG9uUmVsZWFzZSwgbW91c2VQb3MsICBRdDo6UmlnaHRCdXR0b24s
IFF0OjpOb0J1dHRvbiwgUXQ6Ok5vTW9kaWZpZXIpOwotICAgIFFDb3JlQXBwbGljYXRpb246OnNl
bmRFdmVudChtX3dpbmRvdywgJmV2ZW50Myk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkKLQotI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlld1F0Lm1vYyIKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvcXQvbWFpbi5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL3F0L21h
aW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmFkNWJiYjNhYjkzYmJkYjE1
NzYzNzZkZDc0YTYyZDVhOTIxMzE0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvcXQvbWFpbi5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIERpZ2lhIFBsYyBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdHNDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIK
LSNpbmNsdWRlIDxRR3VpQXBwbGljYXRpb24+Ci0KLXZvaWQgYWRkUXRXZWJQcm9jZXNzVG9QYXRo
KCkKLXsKLSAgICAvLyBTaW5jZSB0ZXN0cyB3b24ndCBmaW5kIC4vUXRXZWJQcm9jZXNzLCBhZGQg
aXQgdG8gUEFUSCAoYXQgdGhlIGVuZCB0byBwcmV2ZW50IHN1cnByaXNlcykuCi0gICAgLy8gUk9P
VF9CVUlMRF9ESVIgc2hvdWxkIGJlIGRlZmluZWQgYnkgcW1ha2UuCi0gICAgcXB1dGVudigiUEFU
SCIsIHFnZXRlbnYoIlBBVEgiKSArIFFCeXRlQXJyYXkoIjoiIFJPT1RfQlVJTERfRElSICIvYmlu
IikpOwotfQotCi12b2lkIG1lc3NhZ2VIYW5kbGVyKFF0TXNnVHlwZSB0eXBlLCBjb25zdCBRTWVz
c2FnZUxvZ0NvbnRleHQmLCBjb25zdCBRU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICh0eXBl
ID09IFF0Q3JpdGljYWxNc2cpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgcVBy
aW50YWJsZShtZXNzYWdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBEbyBu
b3RoaW5nCi19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBib29s
IHN1cHByZXNzUXREZWJ1Z091dHB1dCA9IHRydWU7IC8vIFN1cHByZXNzIGRlYnVnIG91dHB1dCBm
cm9tIFF0IGlmIG5vdCBzdGFydGVkIHdpdGggLS12ZXJib3NlLgotICAgIGJvb2wgdXNlRGVza3Rv
cEJlaGF2aW9yID0gdHJ1ZTsgLy8gVXNlIHRyYWRpdGlvbmFsIGRlc2t0b3AgYmVoYXZpb3IgaWYg
bm90IHN0YXJ0ZWQgd2l0aCAtLWZsaWNrYWJsZS4KLQotICAgIGZvciAoaW50IGkgPSAxOyBpIDwg
YXJnYzsgKytpKSB7Ci0gICAgICAgIGlmICghcXN0cmNtcChhcmd2W2ldLCAiLS12ZXJib3NlIikp
Ci0gICAgICAgICAgICBzdXBwcmVzc1F0RGVidWdPdXRwdXQgPSBmYWxzZTsKLSAgICAgICAgZWxz
ZSBpZiAoIXFzdHJjbXAoYXJndltpXSwgIi0tZmxpY2thYmxlIikpCi0gICAgICAgICAgICB1c2VE
ZXNrdG9wQmVoYXZpb3IgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBRUXVpY2tXZWJWaWV3RXhwZXJp
bWVudGFsOjpzZXRGbGlja2FibGVWaWV3cG9ydEVuYWJsZWQoIXVzZURlc2t0b3BCZWhhdmlvcik7
Ci0KLSAgICAvLyBIYXMgdG8gYmUgZG9uZSBiZWZvcmUgUUFwcGxpY2F0aW9uIGlzIGNvbnN0cnVj
dGVkIGluIGNhc2UKLSAgICAvLyBRQXBwbGljYXRpb24gaXRzZWxmIHByb2R1Y2VzIGRlYnVnIG91
dHB1dC4KLSAgICBpZiAoc3VwcHJlc3NRdERlYnVnT3V0cHV0KSB7Ci0gICAgICAgIHFJbnN0YWxs
TWVzc2FnZUhhbmRsZXIobWVzc2FnZUhhbmRsZXIpOwotICAgICAgICBpZiAocWdldGVudigiUVRf
V0VCS0lUX1NVUFBSRVNTX1dFQl9QUk9DRVNTX09VVFBVVCIpLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIHFwdXRlbnYoIlFUX1dFQktJVF9TVVBQUkVTU19XRUJfUFJPQ0VTU19PVVRQVVQiLCAiMSIp
OwotICAgIH0KLQotICAgIFFHdWlBcHBsaWNhdGlvbiBhcHAoYXJnYywgYXJndik7Ci0gICAgYWRk
UXRXZWJQcm9jZXNzVG9QYXRoKCk7Ci0KLSAgICByZXR1cm4gVGVzdFdlYktpdEFQSTo6VGVzdHND
b250cm9sbGVyOjpzaGFyZWQoKS5ydW4oYXJnYywgYXJndikgPyBFWElUX1NVQ0NFU1MgOiBFWElU
X0ZBSUxVUkU7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9Ub29scy5wcm8gYi9Ub29scy9Ub29scy5w
cm8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMmE0NWQ3MzdiYTEwY2I5Y2FlODZi
NzNhYTRjODJkNWIxZDQ5MjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvVG9vbHMvVG9vbHMucHJvCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAot
IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0jIFJvb3QgcHJvamVjdCBmaWxlIGZvciB0b29scwotIwotIyBTZWUgJ1Rv
b2xzL3FtYWtlL1JFQURNRScgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0ZW0KLSMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1URU1QTEFURSA9IHN1YmRpcnMKLUNPTkZJRyArPSBvcmRlcmVkCi0KLWJ1
aWxkPyh3ZWJraXQxKSB7Ci0gICAgYnVpbGQ/KHRlc3Ricm93c2VyKTogU1VCRElSUyArPSBRdFRl
c3RCcm93c2VyL1F0VGVzdEJyb3dzZXIucHJvCi0gICAgYnVpbGQ/KGRydCk6IFNVQkRJUlMgKz0g
RHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvCi19Ci0KLWJ1aWxkPyh3ZWJraXQy
KSB7Ci0gICAgIyBXVFIncyBJbmplY3RlZEJ1bmRsZSBkZXBlbmRzIGN1cnJlbnRseSBvbiBXSzEn
cyBEdW1wUmVuZGVyVHJlZVN1cHBvcnQKLSAgICBidWlsZD8od2Via2l0MSk6YnVpbGQ/KHd0cik6
aGF2ZT8oUVRRVUlDSyk6IFNVQkRJUlMgKz0gV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVu
bmVyLnBybwotCi0gICAgYnVpbGQ/KG1pbmlicm93c2VyKSB7Ci0gICAgICAgIGhhdmU/KFFUUVVJ
Q0spOiBTVUJESVJTICs9IE1pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnBybwotICAgICAgICBT
VUJESVJTICs9IE1pbmlCcm93c2VyL3F0L3Jhdy9NaW5pQnJvd3NlclJhdy5wcm8KLSAgICB9Ci0K
LSAgICAhcHJvZHVjdGlvbl9idWlsZCB7Ci0gICAgICAgICMgT25seSB0ZXN0ZWQgb24gTGludXgg
c28gZmFyLgotICAgICAgICBsaW51eCogewotICAgICAgICAgICAgU1VCRElSUyArPSBUZXN0V2Vi
S2l0QVBJCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJ1aWxkPyhpbWFnZWRpZmYpOiBTVUJESVJT
ICs9IEltYWdlRGlmZi9JbWFnZURpZmYucHJvCi0KLWJ1aWxkPyh0ZXN0X25wYXBpKTogU1VCRElS
UyArPSBEdW1wUmVuZGVyVHJlZS9xdC9UZXN0TmV0c2NhcGVQbHVnaW4vVGVzdE5ldHNjYXBlUGx1
Z2luLnBybwotCi1PVEhFUl9GSUxFUyA9IFwKLSAgICBTY3JpcHRzLyogXAotICAgICQkZmlsZXMo
U2NyaXB0cy93ZWJraXRweS8qLnB5LCB0cnVlKSBcCi0gICAgJCRmaWxlcyhTY3JpcHRzL3dlYmtp
dHBlcmwvKi5wW2x8bV0sIHRydWUpIFwKLSAgICBxbWFrZS9SRUFETUUgXAotICAgIHFtYWtlL2R1
bXAtZmVhdHVyZXMucGwgXAotICAgIHFtYWtlL2NvbmZpZy50ZXN0cy9SRUFETUUgXAotICAgIHFt
YWtlL2NvbmZpZy50ZXN0cy9mb250Y29uZmlnLyogXAotICAgIHFtYWtlL2NvbmZpZy50ZXN0cy9n
Y2NkZXBlbmRzLyogXAotICAgIHFtYWtlL2NvbmZpZy50ZXN0cy9saWJleGVjZGlyLyogXAotICAg
IHFtYWtlL21rc3BlY3MvbW9kdWxlcy8qIFwKLSAgICBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzLyou
cHJmIFwKLSAgICBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzLyoucHJpIFwKLSAgICBxbWFrZS9ta3Nw
ZWNzL2ZlYXR1cmVzL21hYy8qLnByZiBcCi0gICAgcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy91bml4
LyoucHJmIFwKLSAgICBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3dpbjMyLyoucHJmCmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0Rlcml2ZWRTb3VyY2VzLnByaSBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvRGVyaXZlZFNvdXJjZXMucHJpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkMWU5MmFkNDg5NzI5NmJmOTg4NmRlYjZkZGE3N2UyN2Q2YWI4ZWUzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvRGVyaXZlZFNvdXJjZXMucHJpCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAot
IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0jIERlcml2ZWQgc291cmNlcyBmb3IgV2ViS2l0VGVzdFJ1bm5lcgotIwot
IyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBz
eXN0ZW0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1URU1QTEFURSA9IGRlcml2ZWQKLQotIyBNYWtlIHN1cmUg
Zm9yd2FyZGVkIGhlYWRlcnMgbmVlZGVkIGJ5IHRoaXMgcHJvamVjdCBhcmUgcHJlc2VudAotZndo
ZWFkZXJfZ2VuZXJhdG9yLmNvbW1hbmRzID0gcGVybCAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJj
ZS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsICQke1JPT1Rf
V0VCS0lUX0RJUn0vVG9vbHMvV2ViS2l0VGVzdFJ1bm5lciAkJHtST09UX0JVSUxEX0RJUn0vU291
cmNlL2luY2x1ZGUgcXQKLWZ3aGVhZGVyX2dlbmVyYXRvci5kZXBlbmRzICA9ICQke1JPT1RfV0VC
S0lUX0RJUn0vU291cmNlL1dlYktpdDIvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRl
cnMucGwKLUdFTkVSQVRPUlMgKz0gZndoZWFkZXJfZ2VuZXJhdG9yCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oCmluZGV4IGU5NmQ0MmZiYzUzZWNkYjBmMjhkOWU4MjU0
OTRmOTIwM2VlNzU4ZTguLjVkM2EwNDhlNjVhMTRlMGFmZGE2MzYxZmRlYjNjMmFlNDE0YjYwMjIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oCkBAIC0yOSwxMCAr
MjksNyBAQAogCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAKLSNpZiBQTEFURk9STShRVCkKLSNp
bmNsdWRlIDxRRXZlbnQ+Ci0jaW5jbHVkZSA8UVRvdWNoRXZlbnQ+Ci0jZWxpZiBQTEFURk9STShH
VEspCisjaWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgPGdkay9nZGsuaD4KICNlbGlmIFBMQVRG
T1JNKEVGTCkKICNpbmNsdWRlIDxXZWJLaXQyL0VXZWJLaXQyLmg+CkBAIC04NiwxNiArODMsMTEg
QEAgcHJpdmF0ZToKICAgICBkb3VibGUgY3VycmVudEV2ZW50VGltZSgpIHsgcmV0dXJuIG1fdGlt
ZTsgfQogICAgIHZvaWQgdXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0dG9uKTsKIAot
I2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKKyNpZiBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKICAgICB2b2lkIHJlcGxheVNhdmVkRXZlbnRz
KCk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFFUKQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
Ci0gICAgdm9pZCBzZW5kVG91Y2hFdmVudChRRXZlbnQ6OlR5cGUpOwotI2VuZGlmCi0gICAgdm9p
ZCBzZW5kT3JRdWV1ZUV2ZW50KFFFdmVudCopOwotI2VsaWYgUExBVEZPUk0oR1RLKQorI2lmIFBM
QVRGT1JNKEdUSykKICAgICB2b2lkIHNlbmRPclF1ZXVlRXZlbnQoR2RrRXZlbnQqKTsKICAgICBH
ZGtFdmVudCogY3JlYXRlTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUsIHVuc2lnbmVkIGJ1
dHRvbiwgV0tFdmVudE1vZGlmaWVycyk7CiAjZWxpZiBQTEFURk9STShFRkwpCkBAIC0xMTgsMTUg
KzExMCw2IEBAIHByaXZhdGU6CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgRGVxdWU8V1RSRXZl
bnRRdWV1ZUl0ZW0+IG1fZXZlbnRRdWV1ZTsKICAgICB1bnNpZ25lZCBtX21vdXNlQnV0dG9uQ3Vy
cmVudGx5RG93bjsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgIFF0OjpNb3VzZUJ1dHRvbnMgbV9t
b3VzZUJ1dHRvbnM7Ci0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIFFMaXN0PFFUb3Vj
aEV2ZW50OjpUb3VjaFBvaW50PiBtX3RvdWNoUG9pbnRzOwotICAgIFF0OjpLZXlib2FyZE1vZGlm
aWVycyBtX3RvdWNoTW9kaWZpZXJzOwotICAgIFFQb2ludCBtX3RvdWNoUG9pbnRSYWRpdXM7Ci0g
ICAgYm9vbCBtX3RvdWNoQWN0aXZlOwotI2VuZGlmCiAjZWxpZiBQTEFURk9STShFRkwpCiAgICAg
RGVxdWU8V1RSRXZlbnQ+IG1fZXZlbnRRdWV1ZTsKICAgICBXS0V2ZW50TW91c2VCdXR0b24gbV9t
b3VzZUJ1dHRvbjsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvRGVyaXZlZFNvdXJjZXMucHJpIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9EZXJpdmVkU291cmNlcy5wcmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDU0ZTRkMzRiODg1NmExYjRlZTVhZDI4YWM0YmIzZmM5MWEzODQ4MzguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9EZXJpdmVkU291cmNlcy5wcmkKKysrIC9kZXYvbnVsbApAQCAtMSwzOSAr
MCwwIEBACi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRGVyaXZlZCBzb3VyY2VzIGZvciBXZWJLaXRUZXN0UnVu
bmVyJ3MgSW5qZWN0ZWRCdW5kbGUKLSMKLSMgU2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBh
biBvdmVydmlldyBvZiB0aGUgYnVpbGQgc3lzdGVtCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIyBUaGlzIGZp
bGUgaXMgYm90aCBhIHRvcCBsZXZlbCB0YXJnZXQsIGFuZCBpbmNsdWRlZCBmcm9tIFRhcmdldC5w
cmksCi0jIHNvIHRoYXQgdGhlIHJlc3VsdGluZyBnZW5lcmF0ZWQgc291cmNlcyBjYW4gYmUgYWRk
ZWQgdG8gU09VUkNFUy4KLSMgV2Ugb25seSBzZXQgdGhlIHRlbXBsYXRlIGlmIHdlJ3JlIGEgdG9w
IGxldmVsIHRhcmdldCwgc28gdGhhdCB3ZQotIyBkb24ndCBvdmVycmlkZSB3aGF0IFRhcmdldC5w
cmkgaGFzIGFscmVhZHkgc2V0Lgotc2FuaXRpemVkRmlsZSA9ICQkdG9TYW5pdGl6ZWRQYXRoKCQk
X0ZJTEVfKQotZXF1YWxzKHNhbml0aXplZEZpbGUsICQkdG9TYW5pdGl6ZWRQYXRoKCQkX1BST19G
SUxFXykpOlRFTVBMQVRFID0gZGVyaXZlZAotCi1JRExfQklORElOR1MgKz0gXAotICAgIEJpbmRp
bmdzL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmlkbCBcCi0gICAgQmluZGluZ3MvQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIuaWRsIFwKLSAgICBCaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
clJhbmdlLmlkbCBcCi0gICAgQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwgXAot
ICAgIEJpbmRpbmdzL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaWRsIFwKLSAgICBCaW5kaW5ncy9H
Q0NvbnRyb2xsZXIuaWRsIFwKLSAgICBCaW5kaW5ncy9UZXN0UnVubmVyLmlkbCBcCi0gICAgQmlu
ZGluZ3MvVGV4dElucHV0Q29udHJvbGxlci5pZGwgXAotCi1xdFByZXBhcmVUb29sKFFNQUtFX01P
QywgbW9jKQotCi0jIEdFTkVSQVRPUiAxOiBJREwgY29tcGlsZXIKLWlkbC5vdXRwdXQgPSBKUyR7
UU1BS0VfRklMRV9CQVNFfS5jcHAKLWlkbC5pbnB1dCA9IElETF9CSU5ESU5HUwotaWRsLnNjcmlw
dCA9ICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9n
ZW5lcmF0ZS1iaW5kaW5ncy5wbAotaWRsLmNvbW1hbmRzID0gcGVybCAtSSQke1JPT1RfV0VCS0lU
X0RJUn0vU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cyAtSSQkUFdEL0JpbmRpbmdzICQk
aWRsLnNjcmlwdCAtLWRlZmluZXMgXCIkJGphdmFzY3JpcHRGZWF0dXJlRGVmaW5lcygpXCIgLS1n
ZW5lcmF0b3IgVGVzdFJ1bm5lciAtLWluY2x1ZGUgJCRQV0QvQmluZGluZ3MgLS1vdXRwdXREaXIg
JHtRTUFLRV9GVU5DX0ZJTEVfT1VUX1BBVEh9IC0tcHJlcHJvY2Vzc29yIFwiJCR7UU1BS0VfTU9D
fSAtRVwiICR7UU1BS0VfRklMRV9OQU1FfQotaWRsLmRlcGVuZHMgPSAkJHtST09UX1dFQktJVF9E
SVJ9L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbSBcCi0g
ICAgICAgICAgICAgICQkUFdEL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtIFwK
LSAgICAgICAgICAgICAgJCR7Uk9PVF9XRUJLSVRfRElSfS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0lETFBhcnNlci5wbSBcCi0gICAgICAgICAgICAgICQke1JPT1RfV0VCS0lUX0RJ
Un0vU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JbkZpbGVzUGFyc2VyLnBtIFwKLSAg
ICAgICAgICAgICAgJCR7Uk9PVF9XRUJLSVRfRElSfS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsCi1HRU5FUkFUT1JTICs9IGlkbAotCi1JTkNMVURF
UEFUSCArPSAkJHtST09UX0JVSUxEX0RJUn0vVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS8kJHtHRU5FUkFURURfU09VUkNFU19ERVNURElSfQotCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLnBybyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUucHJvCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODg0MmRkNTM3MjdiYmIzODg1ZDc5MzE2ZDNh
OThlYWU3N2I1Y2UwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
cHJvCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIE1haW4g
cHJvamVjdCBmaWxlIGZvciBXZWJLaXRUZXN0UnVubmVyJ3MgSW5qZWN0ZWRCdW5kbGUKLSMKLSMg
U2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgYnVpbGQgc3lz
dGVtCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotVEVNUExBVEUgPSBzdWJkaXJzCi1DT05GSUcgKz0gb3JkZXJl
ZAotCi1kZXJpdmVkX3NvdXJjZXMuZmlsZSA9IERlcml2ZWRTb3VyY2VzLnByaQotdGFyZ2V0LmZp
bGUgPSBUYXJnZXQucHJpCi0KLVNVQkRJUlMgPSBkZXJpdmVkX3NvdXJjZXMgdGFyZ2V0Ci0KLWFk
ZFN0cmljdFN1YmRpck9yZGVyQmV0d2VlbihkZXJpdmVkX3NvdXJjZXMsIHRhcmdldCkKLQpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2UuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZVBhZ2UuY3BwCmluZGV4IGQ3YmFkNzdjYzQ1YmFlYzk1MWZjZmY0MmZkOGZiYWQy
NWJiMDlhYjguLmQ2NzRiMzA1NDgyOWIzMzY5ODcxOWQzYTg4YzVmOWZhMGU0Njk0ZGMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVQYWdlLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlUGFnZS5jcHAKQEAgLTQ4LDE0ICs0OCwxMCBAQAogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNp
ZiBVU0UoQ0YpICYmICFQTEFURk9STShRVCkKKyNpZiBVU0UoQ0YpCiAjaW5jbHVkZSAiV2ViQXJj
aGl2ZUR1bXBTdXBwb3J0LmgiCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUg
IkR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgiCi0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIAogbmFtZXNwYWNlIFdUUiB7CkBAIC00MjgsMTEgKzQyNCw3IEBAIHZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpyZXNldEFmdGVyVGVzdCgpCiB7CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFt
ZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpOwogICAgIEpTR2xvYmFsQ29udGV4
dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsK
LSNpZiBQTEFURk9STShRVCkKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRJbnRl
cm5hbHNPYmplY3QoY29udGV4dCk7Ci0jZWxzZQogICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6cmVz
ZXRJbnRlcm5hbHNPYmplY3QoY29udGV4dCk7Ci0jZW5kaWYKICAgICBhc3NpZ25lZFVybHNDYWNo
ZS5jbGVhcigpOwogfQogCkBAIC04MjcsMTQgKzgxOSwxMSBAQCB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZHVtcEFsbEZyYW1lc1RleHQoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIAog
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBET01Bc1dlYkFyY2hpdmUoV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKLSNpZiBVU0UoQ0Yp
ICYmICFQTEFURk9STShRVCkKKyNpZiBVU0UoQ0YpCiAgICAgV0tSZXRhaW5QdHI8V0tEYXRhUmVm
PiB3a0RhdGEgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5V2ViQXJjaGl2ZShmcmFtZSkpOwog
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKDAs
IFdLRGF0YUdldEJ5dGVzKHdrRGF0YS5nZXQoKSksIFdLRGF0YUdldFNpemUod2tEYXRhLmdldCgp
KSkpOwogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZTdHJpbmcgPSBhZG9wdENGKGNyZWF0
ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShjZkRhdGEuZ2V0KCkpKTsKICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChjZlN0cmluZy5nZXQoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShm
cmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0cmluZ0J1aWxkZXIpOwogI2VuZGlmCiB9CiAKQEAg
LTk2NCwxMSArOTUzLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93
Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tCdW5kbGUKICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkudGV4dElucHV0Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNv
bnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7CiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2lu
ZG93LCAmZXhjZXB0aW9uKTsKIAotI2lmIFBMQVRGT1JNKFFUKQotICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjppbmplY3RJbnRlcm5hbHNPYmplY3QoY29udGV4dCk7Ci0jZWxzZQogICAgIFdl
YkNvcmVUZXN0U3VwcG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOwotI2VuZGlm
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZv
ckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RhcmdldC5wcmkgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1RhcmdldC5wcmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGIwMDkxMTk0YTY3NWNhM2E2YTNjNWU5OWRmNzU0N2NhMWYwYmFiNTkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UYXJnZXQucHJpCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBA
QAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0jIFByb2plY3QgZmlsZSBmb3IgV2ViS2l0VGVzdFJ1bm5lcidzIElu
amVjdGVkQnVuZGxlCi0jCi0jIFNlZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBmb3IgYW4gb3ZlcnZp
ZXcgb2YgdGhlIGJ1aWxkIHN5c3RlbQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRFTVBMQVRFID0gbGliCi1U
QVJHRVQgPSBXVFJJbmplY3RlZEJ1bmRsZQotCi1TT1VSQ0VTICs9IFwKLSAgICBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5jcHAgXAotICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNwcCBcCi0g
ICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZS5jcHAgXAotICAgIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuY3BwIFwKLSAgICBJbmplY3RlZEJ1bmRsZS5jcHAgXAotICAgIEluamVjdGVkQnVu
ZGxlLmggXAotICAgIEluamVjdGVkQnVuZGxlTWFpbi5jcHAgXAotICAgIEluamVjdGVkQnVuZGxl
UGFnZS5jcHAgXAotICAgIEluamVjdGVkQnVuZGxlUGFnZS5oIFwKLSAgICBFdmVudFNlbmRpbmdD
b250cm9sbGVyLmNwcCBcCi0gICAgRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oIFwKLSAgICBHQ0Nv
bnRyb2xsZXIuY3BwIFwKLSAgICBHQ0NvbnRyb2xsZXIuaCBcCi0gICAgVGVzdFJ1bm5lci5jcHAg
XAotICAgIFRlc3RSdW5uZXIuaCBcCi0gICAgVGV4dElucHV0Q29udHJvbGxlci5jcHAgXAotICAg
IFRleHRJbnB1dENvbnRyb2xsZXIuaCBcCi0gICAgQmluZGluZ3MvSlNXcmFwcGVyLmNwcCBcCi0g
ICAgcXQvQWN0aXZhdGVGb250c1F0LmNwcCBcCi0gICAgcXQvSW5qZWN0ZWRCdW5kbGVRdC5jcHAg
XAotICAgIHF0L1Rlc3RSdW5uZXJRdC5jcHAKLQotIyBBZGRzIHRoZSBnZW5lcmF0ZWQgc291cmNl
cyB0byBTT1VSQ0VTCi1pbmNsdWRlKERlcml2ZWRTb3VyY2VzLnByaSkKLQotSEVBREVSUyArPSBc
Ci0gICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCBcCi0gICAgQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIuaCBcCi0gICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZS5oIFwKLSAgICBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50LmggXAotICAgIEFjdGl2YXRlRm9udHMuaCBcCi0gICAgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlci5oIFwKLSAgICBHQ0NvbnRyb2xsZXIuaCBcCi0gICAgSW5qZWN0ZWRC
dW5kbGUuaCBcCi0gICAgSW5qZWN0ZWRCdW5kbGVQYWdlLmggXAotICAgIFRlc3RSdW5uZXIuaCBc
Ci0gICAgVGV4dElucHV0Q29udHJvbGxlci5oIFwKLQotREVTVERJUiA9ICQke1JPT1RfQlVJTERf
RElSfS9saWIKLQotUVQgKz0gd2lkZ2V0cyB3ZWJraXQKLQotV0VCS0lUICs9IHd0ZiBqYXZhc2Ny
aXB0Y29yZSB3ZWJjb3JlCi0KLUNPTkZJRyArPSBwbHVnaW4gcnBhdGgKLQotaGF2ZT8oRk9OVENP
TkZJRyk6IFBLR0NPTkZJRyArPSBmb250Y29uZmlnCi0KLUlOQ0xVREVQQVRIICs9IFwKLSAgICAk
JFBXRCBcCi0gICAgJCRQV0QvLi4gXAotICAgICQkUFdEL0JpbmRpbmdzIFwKLSAgICAkJHtST09U
X1dFQktJVF9ESVJ9L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0IFwKLSAgICAkJHtST09UX1dF
QktJVF9ESVJ9L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMgXAotICAgICQke1JPT1RfV0VCS0lU
X0RJUn0vU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydAotCi1QUkVGSVhfSEVBREVSID0g
JCRQV0QvLi4vV2ViS2l0VGVzdFJ1bm5lclByZWZpeC5oCi0qLWcrKyo6UU1BS0VfQ1hYRkxBR1Mg
Kz0gIi1pbmNsdWRlICQkUFJFRklYX0hFQURFUiIKLQotbGludXgtKiB7Ci0gICAgUU1BS0VfTEZM
QUdTICs9IC1XbCwtLW5vLXVuZGVmaW5lZAotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRleCA2MjdkNmQ0MGYwMzdlZDA1MDI5
OWIyMjA4MWQ5YmYyYzRkN2JjNjc5Li4zOGNlZjZiNzg4OGUwMGE1MDQ4YWU1ZTEwNTQ0NzI3NzVm
MTg0MWQ3IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1Rlc3RSdW5uZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1Rlc3RSdW5uZXIuaApAQCAtMzksOSArMzksNiBAQAogdHlwZWRlZiBSZXRhaW5QdHI8Q0ZSdW5M
b29wVGltZXJSZWY+IFBsYXRmb3JtVGltZXJSZWY7CiAjZWxpZiBQTEFURk9STShXSU4pCiB0eXBl
ZGVmIFVJTlRfUFRSIFBsYXRmb3JtVGltZXJSZWY7Ci0jZWxpZiBQTEFURk9STShRVCkKLSNpbmNs
dWRlIDxRVGltZXI+Ci10eXBlZGVmIFFUaW1lciBQbGF0Zm9ybVRpbWVyUmVmOwogI2VsaWYgUExB
VEZPUk0oR1RLKQogdHlwZWRlZiB1bnNpZ25lZCBpbnQgUGxhdGZvcm1UaW1lclJlZjsKICNlbGlm
IFBMQVRGT1JNKEVGTCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvcXQvQWN0aXZhdGVGb250c1F0LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvcXQvQWN0aXZhdGVGb250c1F0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZmYyNGFhNWNhMzZlMDI2MzA1MWUxMTg4NWRlYTE1MzdjYWNhMTdlNy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3F0L0FjdGl2YXRlRm9udHNRdC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBY3RpdmF0ZUZvbnRzLmgiCi0jaW5jbHVkZSAiRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQuaCIKLSNpbmNsdWRlICJRdFRlc3RTdXBwb3J0LmgiCi0jaW5j
bHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KLQotbmFtZXNwYWNlIFdUUiB7Ci0KLXZvaWQgYWN0aXZh
dGVGb250cygpCi17Ci0gICAgV2ViS2l0OjpRdFRlc3RTdXBwb3J0Ojppbml0aWFsaXplVGVzdEZv
bnRzKCk7Ci0gICAgUUNvcmVBcHBsaWNhdGlvbjo6c2V0QXR0cmlidXRlKFF0OjpBQV9Vc2U5NkRw
aSwgdHJ1ZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmRpc2FibGVEZWZhdWx0VHlw
ZXNldHRpbmdGZWF0dXJlcygpOwotfQotCi19CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL3F0L0luamVjdGVkQnVuZGxlUXQuY3BwIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9xdC9JbmplY3RlZEJ1bmRsZVF0LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI3NzE4OWZjMTc1OWJlNjViNjlhYzM0MGQ1Yjg1
MGU4ZmIyYWY5YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3F0L0luamVjdGVkQnVuZGxl
UXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgotI2lu
Y2x1ZGUgPFFBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRQnl0ZUFycmF5PgotI2luY2x1ZGUgPFFT
dHlsZT4KLSNpbmNsdWRlIDxRU3R5bGVGYWN0b3J5PgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5j
bHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNl
IFdUUiB7Ci0KLXZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBsYXRmb3JtSW5pdGlhbGl6ZShXS1R5cGVS
ZWYpCi17Ci0gICAgUVN0eWxlKiBzdHlsZUZvclRlc3RzID0gUVN0eWxlRmFjdG9yeTo6Y3JlYXRl
KFFMYXRpbjFTdHJpbmcoIndpbmRvd3MiKSk7Ci0gICAgUUFwcGxpY2F0aW9uOjpzZXRTdHlsZShz
dHlsZUZvclRlc3RzKTsKLSAgICAvLyBGb3JjZSBRdCB0byB1c2UgdGhlIHN0eWxlJ3Mgc3RhbmRh
cmQgcGFsZXR0ZSwgaW5zdGVhZCBvZiBwbGF0Zm9ybSBkZWZhdWx0IHBhbGV0dGUuIFRoaXMgaXMg
bmVlZGVkCi0gICAgLy8gYmVjYXVzZSB3ZSBhcmUgc2V0dGluZyB0aGUgc3R5bGUgYWZ0ZXIgUUFw
cGxpY2F0aW9uIGlzIGluc3RhbnRpYXRlZC4KLSAgICBRQXBwbGljYXRpb246OnNldFBhbGV0dGUo
c3R5bGVGb3JUZXN0cy0+c3RhbmRhcmRQYWxldHRlKCkpOwotCi0gICAgaWYgKHFnZXRlbnYoIlFU
X1dFQktJVDJfREVCVUciKSA9PSAiMSIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdURkluc3Rh
bGxSZXBvcnRCYWNrdHJhY2VPbkNyYXNoSG9vaygpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVFIK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvcXQvVGVz
dFJ1bm5lclF0LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvcXQv
VGVzdFJ1bm5lclF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVlZDQ2ZDAw
NGVmZjk5OGRkZDQxZjVhMjBiNTc2ZTk2YzI0NGRiNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL3F0L1Rlc3RSdW5uZXJRdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0
UnVubmVyLmgiCi0KLSNpbmNsdWRlICJBY3RpdmF0ZUZvbnRzLmgiCi0jaW5jbHVkZSAiSW5qZWN0
ZWRCdW5kbGUuaCIKLSNpbmNsdWRlICJRdFRlc3RTdXBwb3J0LmgiCi0jaW5jbHVkZSA8UUNvcmVB
cHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRRGlyPgotI2luY2x1ZGUgPFFGb250RGF0YWJhc2U+Ci0j
aW5jbHVkZSA8UU9iamVjdD4KLSNpbmNsdWRlIDxRdENvcmUvcWdsb2JhbC5oPgotI2luY2x1ZGUg
PHF3ZWJzZXR0aW5ncy5oPgotCi1uYW1lc3BhY2UgV1RSIHsKLQotY2xhc3MgV2F0Y2hkb2dUaW1l
ckhlbHBlciA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotCi1wdWJsaWM6Ci0gICAg
c3RhdGljIFdhdGNoZG9nVGltZXJIZWxwZXIqIGluc3RhbmNlKCkKLSAgICB7Ci0gICAgICAgIHN0
YXRpYyBXYXRjaGRvZ1RpbWVySGVscGVyKiB0aGVJbnN0YW5jZSA9IG5ldyBXYXRjaGRvZ1RpbWVy
SGVscGVyOwotICAgICAgICByZXR1cm4gdGhlSW5zdGFuY2U7Ci0gICAgfQotCi1wdWJsaWMgUV9T
TE9UUzoKLSAgICB2b2lkIHRpbWVyRmlyZWQoKQotICAgIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgp
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBXYXRjaGRvZ1RpbWVySGVscGVyKCkge30KLX07Ci0K
LXZvaWQgVGVzdFJ1bm5lcjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKLXsKLSAgICBXZWJLaXQ6OlF0
VGVzdFN1cHBvcnQ6OmNsZWFyTWVtb3J5Q2FjaGVzKCk7Ci0gICAgYWN0aXZhdGVGb250cygpOwot
Ci0gICAgUU9iamVjdDo6Y29ubmVjdCgmbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciwgU0lHTkFM
KHRpbWVvdXQoKSksIFdhdGNoZG9nVGltZXJIZWxwZXI6Omluc3RhbmNlKCksIFNMT1QodGltZXJG
aXJlZCgpKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6aW52YWxpZGF0ZVdhaXRUb0R1bXBXYXRj
aGRvZ1RpbWVyKCkKLXsKLSAgICBtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyLnN0b3AoKTsKLX0K
LQotdm9pZCBUZXN0UnVubmVyOjppbml0aWFsaXplV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJZk5l
ZWRlZCgpCi17Ci0gICAgaW50IHRpbWVySW50ZXJ2YWw7Ci0gICAgaWYgKHFnZXRlbnYoIlFUX1dF
QktJVDJfREVCVUciKSA9PSAiMSIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3dhaXRU
b0R1bXBXYXRjaGRvZ1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
bV90aW1lb3V0ID4gMCkKLSAgICAgICAgdGltZXJJbnRlcnZhbCA9IG1fdGltZW91dDsKLSAgICBl
bHNlCi0gICAgICAgIHRpbWVySW50ZXJ2YWwgPSB3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckludGVy
dmFsICogMTAwMDsKLQotICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIuc3RhcnQodGltZXJJ
bnRlcnZhbCk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjpwYXRo
VG9Mb2NhbFJlc291cmNlKEpTU3RyaW5nUmVmIHVybCkKLXsKLSAgICBRU3RyaW5nIGxvY2FsVG1w
VXJsKFFTdHJpbmdMaXRlcmFsKCJmaWxlOi8vL3RtcC9MYXlvdXRUZXN0cyIpKTsKLSAgICBRU3Ry
aW5nIGdpdmVuVXJsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihKU1N0cmluZ0dldENo
YXJhY3RlcnNQdHIodXJsKSksIEpTU3RyaW5nR2V0TGVuZ3RoKHVybCkpOwotCi0gICAgLy8gVHJh
bnNsYXRlIGEgcmVxdWVzdCBmb3IgL3RtcC9MYXlvdXRUZXN0cyB0byB0aGUgcmVwb3NpdG9yeSBM
YXlvdXRUZXN0cyBkaXJlY3RvcnkuCi0gICAgLy8gRG8gbm90IHJlbHkgb24gYSBzeW1saW5rIHRv
IGJlIGNyZWF0ZWQgdmlhIHRoZSB0ZXN0IHJ1bm5lciwgd2hpY2ggd2lsbCBub3Qgd29yayBvbiBX
aW5kb3dzLgotICAgIGlmIChnaXZlblVybC5zdGFydHNXaXRoKGxvY2FsVG1wVXJsKSkgewotICAg
ICAgICAvLyBEdW1wUmVuZGVyVHJlZSBsaXZlcyBpbiBXZWJLaXQvV2ViS2l0QnVpbGQvPGJ1aWxk
X21vZGU+L2Jpbi4KLSAgICAgICAgLy8gVHJhbnNsYXRlIGZyb20gV2ViS2l0L1dlYktpdEJ1aWxk
L1JlbGVhc2UvYmluID0+IFdlYktpdC9MYXlvdXRUZXN0cy4KLSAgICAgICAgUUZpbGVJbmZvIGxh
eW91dFRlc3RzUm9vdChRQ29yZUFwcGxpY2F0aW9uOjphcHBsaWNhdGlvbkRpclBhdGgoKSArIFFT
dHJpbmdMaXRlcmFsKCIvLi4vLi4vLi4vTGF5b3V0VGVzdHMvIikpOwotICAgICAgICBpZiAobGF5
b3V0VGVzdHNSb290LmV4aXN0cygpKSB7Ci0gICAgICAgICAgICBRU3RyaW5nIHBhdGggPSBRU3Ry
aW5nTGl0ZXJhbCgiZmlsZTovLyIpICsgbGF5b3V0VGVzdHNSb290LmFic29sdXRlUGF0aCgpICsg
Z2l2ZW5VcmwubWlkKGxvY2FsVG1wVXJsLmxlbmd0aCgpKTsKLSAgICAgICAgICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSlNDaGFy
Kj4ocGF0aC5jb25zdERhdGEoKSksIHBhdGgubGVuZ3RoKCkpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiB1cmw7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVy
OjpwbGF0Zm9ybU5hbWUoKQotewotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwbGF0Zm9y
bU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJxdCIpKTsKLSAgICBy
ZXR1cm4gcGxhdGZvcm1OYW1lOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVFIKLQotI2luY2x1ZGUg
IlRlc3RSdW5uZXJRdC5tb2MiCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Bs
YXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcu
aAppbmRleCBlMmNhYmZhMjlkYmZiZjM4YzBjMDk4ZjMzN2ZmNTM5NTJhNGJmMTkxLi4yM2Y0OGE3
YzgyNjA0OTkyYjI0ODI0MjliZWViOGIyYjM2ZWEyYTc3IDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvUGxhdGZvcm1XZWJWaWV3LmgKQEAgLTI4LDE1ICsyOCw3IEBACiAKICNpbmNsdWRlIDxXZWJL
aXQyL1dLUmV0YWluUHRyLmg+CiAKLSNpZiBkZWZpbmVkKEJVSUxESU5HX1FUX18pCi1RVF9CRUdJ
Tl9OQU1FU1BBQ0UKLWNsYXNzIFFRdWlja1ZpZXc7Ci1jbGFzcyBRRXZlbnRMb29wOwotUVRfRU5E
X05BTUVTUEFDRQotY2xhc3MgUVF1aWNrV2ViVmlldzsKLXR5cGVkZWYgUVF1aWNrV2ViVmlldyog
UGxhdGZvcm1XS1ZpZXc7Ci10eXBlZGVmIFFRdWlja1ZpZXcqIFBsYXRmb3JtV2luZG93OwotI2Vs
aWYgZGVmaW5lZChfX0FQUExFX18pICYmIF9fQVBQTEVfXworI2lmIGRlZmluZWQoX19BUFBMRV9f
KSAmJiBfX0FQUExFX18KICNpZmRlZiBfX09CSkNfXwogQGNsYXNzIFdLVmlldzsKIEBjbGFzcyBX
ZWJLaXRUZXN0UnVubmVyV2luZG93OwpAQCAtNzcsMTYgKzY5LDggQEAgcHVibGljOgogICAgIHZv
aWQgcmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7CiAgICAgdm9pZCBm
b2N1cygpOwogCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgYm9vbCBzZW5kRXZlbnQoUUV2ZW50Kik7
Ci0gICAgdm9pZCBwb3N0RXZlbnQoUUV2ZW50Kik7Ci0gICAgdm9pZCBzZXRNb2RhbEV2ZW50TG9v
cChRRXZlbnRMb29wKiBldmVudExvb3ApIHsgbV9tb2RhbEV2ZW50TG9vcCA9IGV2ZW50TG9vcDsg
fQotICAgIC8vIFdpbmRvdyBzbmFwc2hvdCBjYW4gYmUgZGlzYWJsZWQgb24gUXQgd2l0aCBRVF9X
RUJLSVRfRElTQUJMRV9VSVBST0NFU1NfRFVNUFBJWEVMUz0xIGVudmlyb25tZW50IHZhcmlhYmxl
IChuZWNlc3NhcnkgZm9yIHh2ZmIpCi0gICAgc3RhdGljIGJvb2wgd2luZG93U25hcHNob3RFbmFi
bGVkKCk7Ci0jZWxzZQogICAgIC8vIFdpbmRvdyBzbmFwc2hvdCBpcyBhbHdheXMgZW5hYmxlZCBi
eSBkZWZhdWx0IG9uIGFsbCBvdGhlciBwbGF0Zm9ybS4KICAgICBzdGF0aWMgYm9vbCB3aW5kb3dT
bmFwc2hvdEVuYWJsZWQoKSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKIAogICAgIFdLUmVjdCB3
aW5kb3dGcmFtZSgpOwogICAgIHZvaWQgc2V0V2luZG93RnJhbWUoV0tSZWN0KTsKQEAgLTk5LDcg
KzgzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2luZG93SXNLZXkoYm9vbCBpc0tleSkgeyBt
X3dpbmRvd0lzS2V5ID0gaXNLZXk7IH0KICAgICBib29sIHdpbmRvd0lzS2V5KCkgY29uc3QgeyBy
ZXR1cm4gbV93aW5kb3dJc0tleTsgfQogCi0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShF
RkwpIHx8IFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oRUZMKQog
ICAgIGJvb2wgdmlld1N1cHBvcnRzT3B0aW9ucyhXS0RpY3Rpb25hcnlSZWYpIGNvbnN0OwogI2Vs
c2UKICAgICBib29sIHZpZXdTdXBwb3J0c09wdGlvbnMoV0tEaWN0aW9uYXJ5UmVmKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CkBAIC0xMTMsMTIgKzk3LDkgQEAgcHJpdmF0ZToKICAgICBQbGF0Zm9y
bVdpbmRvdyBtX3dpbmRvdzsKICAgICBib29sIG1fd2luZG93SXNLZXk7CiAgICAgV0tSZXRhaW5Q
dHI8V0tEaWN0aW9uYXJ5UmVmPiBtX29wdGlvbnM7Ci0jaWYgUExBVEZPUk0oRUZMKSB8fCBQTEFU
Rk9STShRVCkKKyNpZiBQTEFURk9STShFRkwpCiAgICAgYm9vbCBtX3VzaW5nRml4ZWRMYXlvdXQ7
CiAjZW5kaWYKLSNpZiBQTEFURk9STShRVCkKLSAgICBRRXZlbnRMb29wKiBtX21vZGFsRXZlbnRM
b29wOwotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGFyZ2V0LnByaSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGFy
Z2V0LnByaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk4MDBhYjhkY2ZmM2NkNDRl
YzI5MTY2ZDM3MWJjZGUyZDQ0MGE2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1RhcmdldC5wcmkKKysrIC9kZXYv
bnVsbApAQCAtMSw0OSArMCwwIEBACi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUHJvamVjdCBmaWxlIGZvciBX
ZWJLaXRUZXN0UnVubmVyIGJpbmFyeSAoV1RSKQotIwotIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURN
RScgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0ZW0KLSMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1U
RU1QTEFURSA9IGFwcAotVEFSR0VUID0gV2ViS2l0VGVzdFJ1bm5lcgotCi1IRUFERVJTICs9IFwK
LSAgICBFdmVudFNlbmRlclByb3h5LmggXAotICAgIEdlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmgg
XAotICAgIFBsYXRmb3JtV2ViVmlldy5oIFwKLSAgICBTdHJpbmdGdW5jdGlvbnMuaCBcCi0gICAg
VGVzdENvbnRyb2xsZXIuaCBcCi0gICAgVGVzdEludm9jYXRpb24uaCBcCi0gICAgV2ViTm90aWZp
Y2F0aW9uUHJvdmlkZXIuaCBcCi0gICAgV29ya1F1ZXVlTWFuYWdlci5oCi0KLVNPVVJDRVMgKz0g
XAotICAgIHF0L21haW4uY3BwIFwKLSAgICBxdC9FdmVudFNlbmRlclByb3h5UXQuY3BwIFwKLSAg
ICBxdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHAgXAotICAgIHF0L1Rlc3RDb250cm9sbGVyUXQuY3Bw
IFwKLSAgICBxdC9UZXN0SW52b2NhdGlvblF0LmNwcCBcCi0gICAgR2VvbG9jYXRpb25Qcm92aWRl
ck1vY2suY3BwIFwKLSAgICBUZXN0Q29udHJvbGxlci5jcHAgXAotICAgIFRlc3RJbnZvY2F0aW9u
LmNwcCBcCi0gICAgV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwIFwKLSAgICBXb3JrUXVldWVN
YW5hZ2VyLmNwcAotCi1ERVNURElSID0gJCR7Uk9PVF9CVUlMRF9ESVJ9L2JpbgotCi1RVCA9IGNv
cmUgY29yZS1wcml2YXRlIGd1aSBndWktcHJpdmF0ZSB3aWRnZXRzIG5ldHdvcmsgdGVzdGxpYiBx
dWljayBxdWljay1wcml2YXRlIHdlYmtpdHdpZGdldHMgcW1sLXByaXZhdGUgdjgtcHJpdmF0ZQot
Ci1XRUJLSVQgKz0gd3RmIGphdmFzY3JpcHRjb3JlIHdlYmtpdDIKLQotREVGSU5FUyArPSBVU0Vf
U1lTVEVNX01BTExPQz0xCi0KLUlOQ0xVREVQQVRIICs9IFwKLSAgICAkJFBXRCBcCi0gICAgJCR7
Uk9PVF9XRUJLSVRfRElSfS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdCBcCi0gICAgJCR7Uk9P
VF9XRUJLSVRfRElSfS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdAotCi1QUkVGSVhfSEVBREVSID0g
V2ViS2l0VGVzdFJ1bm5lclByZWZpeC5oCi0qLWcrKyo6UU1BS0VfQ1hYRkxBR1MgKz0gIi1pbmNs
dWRlICQkUFJFRklYX0hFQURFUiIKLSotY2xhbmcqOlFNQUtFX0NYWEZMQUdTICs9ICItaW5jbHVk
ZSAkJFBSRUZJWF9IRUFERVIiCi0KLVJFU09VUkNFUyA9IHF0L1dlYktpdFRlc3RSdW5uZXIucXJj
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IGQ2OTFhY2Qw
NTIyNjRiOTg5OTBjOWU0ZWY4MWVkNDhlYmNhYTY5MjEuLjY0ZmZhMzhkNTkyZjE5ZWFmOTMxNTc3
ZWMyNjVmOWE1MTI1NjA1NzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwCkBAIC01NzAsNyArNTcwLDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0
ZVRvQ29uc2lzdGVudFZhbHVlcygpCiAgICAgV0tQcmVmZXJlbmNlc1NldEludGVyYWN0aXZlRm9y
bVZhbGlkYXRpb25FbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKICAgICBXS1ByZWZlcmVuY2Vz
U2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKIAotI2lmICFQTEFU
Rk9STShRVCkKICAgICBzdGF0aWMgV0tTdHJpbmdSZWYgc3RhbmRhcmRGb250RmFtaWx5ID0gV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRpbWVzIik7CiAgICAgc3RhdGljIFdLU3RyaW5n
UmVmIGN1cnNpdmVGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFw
cGxlIENoYW5jZXJ5Iik7CiAgICAgc3RhdGljIFdLU3RyaW5nUmVmIGZhbnRhc3lGb250RmFtaWx5
ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBhcHlydXMiKTsKQEAgLTU4Niw3ICs1
ODUsNiBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVz
KCkKICAgICBXS1ByZWZlcmVuY2VzU2V0UGljdG9ncmFwaEZvbnRGYW1pbHkocHJlZmVyZW5jZXMs
IHBpY3RvZ3JhcGhGb250RmFtaWx5KTsKICAgICBXS1ByZWZlcmVuY2VzU2V0U2Fuc1NlcmlmRm9u
dEZhbWlseShwcmVmZXJlbmNlcywgc2Fuc1NlcmlmRm9udEZhbWlseSk7CiAgICAgV0tQcmVmZXJl
bmNlc1NldFNlcmlmRm9udEZhbWlseShwcmVmZXJlbmNlcywgc2VyaWZGb250RmFtaWx5KTsKLSNl
bmRpZgogICAgIFdLUHJlZmVyZW5jZXNTZXRTY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZChw
cmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEluc3BlY3RvclVzZXNXZWJL
aXRVc2VySW50ZXJmYWNlKHByZWZlcmVuY2VzLCB0cnVlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0
QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQocHJlZmVyZW5jZXMsIGZhbHNlKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAppbmRleCA3MDEwZWEyOTMwMWZkZTg2
ZmEzYWIzYzc2MjMzMmZkYWFlMDc0YmZhLi4yZThiMzE3ODcyYzBhYzNlNzdhYWM4MTVjY2RiZTYx
MWIxZDJhM2M5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCkBAIC0y
MTksMTEgKzIxOSw2IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8RXZlbnRTZW5kZXJQcm94eT4g
bV9ldmVudFNlbmRlclByb3h5OwogCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgY2xhc3MgUnVuTG9v
cDsKLSAgICBSdW5Mb29wKiBtX3J1bkxvb3A7Ci0jZW5kaWYKLQogICAgIFdvcmtRdWV1ZU1hbmFn
ZXIgbV93b3JrUXVldWVNYW5hZ2VyOwogfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnBybyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2Vi
S2l0VGVzdFJ1bm5lci5wcm8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMGE0NTQ3
MTc3ZmE0N2QyYWMzODMwZDI2MTY5OWIwNGZlMThmMGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0
UnVubmVyLnBybworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
IyBNYWluIHByb2plY3QgZmlsZSBmb3IgV2ViS2l0VGVzdFJ1bm5lciAoV1RSKQotIwotIyBTZWUg
J1Rvb2xzL3FtYWtlL1JFQURNRScgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0ZW0K
LSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1URU1QTEFURSA9IHN1YmRpcnMKLUNPTkZJRyArPSBvcmRlcmVkCi0K
LWRlcml2ZWRfc291cmNlcy5maWxlID0gRGVyaXZlZFNvdXJjZXMucHJpCi10YXJnZXQuZmlsZSA9
IFRhcmdldC5wcmkKLQotU1VCRElSUyA9IGRlcml2ZWRfc291cmNlcyB0YXJnZXQKLQotYWRkU3Ry
aWN0U3ViZGlyT3JkZXJCZXR3ZWVuKGRlcml2ZWRfc291cmNlcywgdGFyZ2V0KQotCi1pbmplY3Rl
ZF9idW5kbGUuZmlsZSA9IEluamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLnBybwotaW5qZWN0
ZWRfYnVuZGxlLm1ha2VmaWxlID0gTWFrZWZpbGUuSW5qZWN0ZWRCdW5kbGUKLVNVQkRJUlMgKz0g
aW5qZWN0ZWRfYnVuZGxlCi0KLQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9x
dC9FdmVudFNlbmRlclByb3h5UXQuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9FdmVu
dFNlbmRlclByb3h5UXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTZlM2Vm
ZTAwOWZjMmE0M2QyMTE0ZTkyNzRhZmY5ZWI1NzM3N2U2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvRXZlbnRT
ZW5kZXJQcm94eVF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV2ZW50
U2VuZGVyUHJveHkuaCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgotI2luY2x1ZGUg
IlRlc3RDb250cm9sbGVyLmgiCi0jaW5jbHVkZSA8UUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50Pgot
I2luY2x1ZGUgPFFLZXlFdmVudD4KLSNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0PgotI2luY2x1ZGUg
PFdlYktpdDIvV0tQYWdlUHJpdmF0ZS5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmdRdC5o
PgotI2luY2x1ZGUgPHFwYS9xd2luZG93c3lzdGVtaW50ZXJmYWNlLmg+Ci0KLW5hbWVzcGFjZSBX
VFIgewotCi0jZGVmaW5lIEtFWUNPREVfREVMICAgICAgICAgMTI3Ci0jZGVmaW5lIEtFWUNPREVf
QkFDS1NQQUNFICAgOAotI2RlZmluZSBLRVlDT0RFX0xFRlRBUlJPVyAgIDB4ZjcwMgotI2RlZmlu
ZSBLRVlDT0RFX1JJR0hUQVJST1cgIDB4ZjcwMwotI2RlZmluZSBLRVlDT0RFX1VQQVJST1cgICAg
IDB4ZjcwMAotI2RlZmluZSBLRVlDT0RFX0RPV05BUlJPVyAgIDB4ZjcwMQotCi1zdHJ1Y3QgV1RS
RXZlbnRRdWV1ZSB7Ci0gICAgUUV2ZW50KiBtX2V2ZW50OwotICAgIGludCBtX2RlbGF5OwotfTsK
LQotc3RhdGljIFdUUkV2ZW50UXVldWUgZXZlbnRRdWV1ZVsxMDI0XTsKLXN0YXRpYyB1bnNpZ25l
ZCBlbmRPZlF1ZXVlOwotc3RhdGljIGJvb2wgaXNSZXBsYXlpbmdFdmVudHM7Ci0KLUV2ZW50U2Vu
ZGVyUHJveHk6OkV2ZW50U2VuZGVyUHJveHkoVGVzdENvbnRyb2xsZXIqIHRlc3RDb250cm9sbGVy
KQotICAgIDogbV90ZXN0Q29udHJvbGxlcih0ZXN0Q29udHJvbGxlcikKLSAgICAsIG1fdGltZSgw
KQotICAgICwgbV9wb3NpdGlvbigpCi0gICAgLCBtX2xlZnRNb3VzZUJ1dHRvbkRvd24oZmFsc2Up
Ci0gICAgLCBtX2NsaWNrQ291bnQoMCkKLSAgICAsIG1fY2xpY2tUaW1lKDApCi0gICAgLCBtX2Ns
aWNrUG9zaXRpb24oKQotICAgICwgbV9jbGlja0J1dHRvbihrV0tFdmVudE1vdXNlQnV0dG9uTm9C
dXR0b24pCi0gICAgLCBtX21vdXNlQnV0dG9ucygwKQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
Ci0gICAgLCBtX3RvdWNoQWN0aXZlKGZhbHNlKQotI2VuZGlmCi17Ci0gICAgbWVtc2V0KGV2ZW50
UXVldWUsIDAsIHNpemVvZihldmVudFF1ZXVlKSk7Ci0gICAgZW5kT2ZRdWV1ZSA9IDA7Ci0gICAg
aXNSZXBsYXlpbmdFdmVudHMgPSBmYWxzZTsKLX0KLQotRXZlbnRTZW5kZXJQcm94eTo6fkV2ZW50
U2VuZGVyUHJveHkoKQotewotfQotCi1zdGF0aWMgUXQ6Ok1vdXNlQnV0dG9uIGdldE1vdXNlQnV0
dG9uKHVuc2lnbmVkIGJ1dHRvbikKLXsKLSAgICBRdDo6TW91c2VCdXR0b24gbW91c2VCdXR0b247
Ci0gICAgc3dpdGNoIChidXR0b24pIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIG1vdXNlQnV0dG9u
ID0gUXQ6OkxlZnRCdXR0b247Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICAgICAg
bW91c2VCdXR0b24gPSBRdDo6TWlkQnV0dG9uOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6
Ci0gICAgICAgIG1vdXNlQnV0dG9uID0gUXQ6OlJpZ2h0QnV0dG9uOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIDM6Ci0gICAgICAgIC8vIGZhc3QvZXZlbnRzL21vdXNlLWNsaWNrLWV2ZW50cyBl
eHBlY3RzIHRoZSA0dGggYnV0dG9uIHRvIGJlIHRyZWF0ZWQgYXMgdGhlIG1pZGRsZSBidXR0b24K
LSAgICAgICAgbW91c2VCdXR0b24gPSBRdDo6TWlkQnV0dG9uOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBtb3VzZUJ1dHRvbiA9IFF0OjpMZWZ0QnV0dG9uOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIG1vdXNlQnV0dG9uOwotfQotCi1zdGF0aWMgUXQ6
OktleWJvYXJkTW9kaWZpZXJzIGdldE1vZGlmaWVycyhXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVy
c1JlZikKLXsKLSAgICBRdDo6S2V5Ym9hcmRNb2RpZmllcnMgbW9kaWZpZXJzID0gMDsKLQotICAg
IGlmIChtb2RpZmllcnNSZWYgJiBrV0tFdmVudE1vZGlmaWVyc0NvbnRyb2xLZXkpCi0gICAgICAg
IG1vZGlmaWVycyB8PSBRdDo6Q29udHJvbE1vZGlmaWVyOwotICAgIGlmIChtb2RpZmllcnNSZWYg
JiBrV0tFdmVudE1vZGlmaWVyc1NoaWZ0S2V5KQotICAgICAgICBtb2RpZmllcnMgfD0gUXQ6OlNo
aWZ0TW9kaWZpZXI7Ci0gICAgaWYgKG1vZGlmaWVyc1JlZiAmIGtXS0V2ZW50TW9kaWZpZXJzQWx0
S2V5KQotICAgICAgICBtb2RpZmllcnMgfD0gUXQ6OkFsdE1vZGlmaWVyOwotICAgIGlmIChtb2Rp
ZmllcnNSZWYgJiBrV0tFdmVudE1vZGlmaWVyc01ldGFLZXkpCi0gICAgICAgIG1vZGlmaWVycyB8
PSBRdDo6TWV0YU1vZGlmaWVyOwotCi0gICAgcmV0dXJuIG1vZGlmaWVyczsKLX0KLQotdm9pZCBF
dmVudFNlbmRlclByb3h5OjprZXlEb3duKFdLU3RyaW5nUmVmIGtleVJlZiwgV0tFdmVudE1vZGlm
aWVycyBtb2RpZmllcnNSZWYsIHVuc2lnbmVkIGxvY2F0aW9uKQotewotICAgIGNvbnN0IFFTdHJp
bmcga2V5ID0gV0tTdHJpbmdDb3B5UVN0cmluZyhrZXlSZWYpOwotICAgIFFTdHJpbmcga2V5VGV4
dCA9IGtleTsKLQotICAgIFF0OjpLZXlib2FyZE1vZGlmaWVycyBtb2RpZmllcnMgPSBnZXRNb2Rp
ZmllcnMobW9kaWZpZXJzUmVmKTsKLQotICAgIGlmIChsb2NhdGlvbiA9PSAzKQotICAgICAgICBt
b2RpZmllcnMgfD0gUXQ6OktleXBhZE1vZGlmaWVyOwotICAgIGludCBjb2RlID0gMDsKLSAgICBp
ZiAoa2V5Lmxlbmd0aCgpID09IDEpIHsKLSAgICAgICAgY29kZSA9IGtleS51bmljb2RlKCktPnVu
aWNvZGUoKTsKLSAgICAgICAgLy8gbWFwIHNwZWNpYWwga2V5Y29kZXMgdXNlZCBieSB0aGUgdGVz
dHMgdG8gc29tZXRoaW5nIHRoYXQgd29ya3MgZm9yIFF0L1gxMQotICAgICAgICBpZiAoY29kZSA9
PSAnXHInKSB7Ci0gICAgICAgICAgICBjb2RlID0gUXQ6OktleV9SZXR1cm47Ci0gICAgICAgIH0g
ZWxzZSBpZiAoY29kZSA9PSAnXHQnKSB7Ci0gICAgICAgICAgICBjb2RlID0gUXQ6OktleV9UYWI7
Ci0gICAgICAgICAgICBpZiAobW9kaWZpZXJzID09IFF0OjpTaGlmdE1vZGlmaWVyKQotICAgICAg
ICAgICAgICAgIGNvZGUgPSBRdDo6S2V5X0JhY2t0YWI7Ci0gICAgICAgICAgICBrZXlUZXh0ID0g
UVN0cmluZ0xpdGVyYWwoIlx0Iik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSBLRVlDT0RF
X0RFTCB8fCBjb2RlID09IEtFWUNPREVfQkFDS1NQQUNFKSB7Ci0gICAgICAgICAgICBjb2RlID0g
UXQ6OktleV9CYWNrc3BhY2U7Ci0gICAgICAgICAgICBpZiAobW9kaWZpZXJzID09IFF0OjpBbHRN
b2RpZmllcikKLSAgICAgICAgICAgICAgICBtb2RpZmllcnMgPSBRdDo6Q29udHJvbE1vZGlmaWVy
OwotICAgICAgICAgICAga2V5VGV4dCA9IFFTdHJpbmcoKTsKLSAgICAgICAgfSBlbHNlIGlmIChj
b2RlID09ICdvJyAmJiBtb2RpZmllcnMgPT0gUXQ6OkNvbnRyb2xNb2RpZmllcikgewotICAgICAg
ICAgICAgLy8gTWltaWMgdGhlIGVtYWNzIGN0cmwtbyBiaW5kaW5nIG9uIE1hYyBieSBpbnNlcnRp
bmcgYSBwYXJhZ3JhcGgKLSAgICAgICAgICAgIC8vIHNlcGFyYXRvciBhbmQgdGhlbiBwdXR0aW5n
IHRoZSBjdXJzb3IgYmFjayB0byBpdHMgb3JpZ2luYWwKLSAgICAgICAgICAgIC8vIHBvc2l0aW9u
LiBBbGxvd3MgdXMgdG8gcGFzcyBlbWFjcy1jdHJsLW8uaHRtbAotICAgICAgICAgICAga2V5VGV4
dCA9IFFMYXRpbjFTdHJpbmcoIlxuIik7Ci0gICAgICAgICAgICBjb2RlID0gJ1xuJzsKLSAgICAg
ICAgICAgIG1vZGlmaWVycyA9IDA7Ci0gICAgICAgICAgICBRS2V5RXZlbnQgZXZlbnQoUUV2ZW50
OjpLZXlQcmVzcywgY29kZSwgbW9kaWZpZXJzLCBrZXlUZXh0KTsKLSAgICAgICAgICAgIG1fdGVz
dENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnNlbmRFdmVudCgmZXZlbnQpOwotICAgICAgICAg
ICAgUUtleUV2ZW50IGV2ZW50MihRRXZlbnQ6OktleVJlbGVhc2UsIGNvZGUsIG1vZGlmaWVycywg
a2V5VGV4dCk7Ci0gICAgICAgICAgICBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5z
ZW5kRXZlbnQoJmV2ZW50Mik7Ci0gICAgICAgICAgICBrZXlUZXh0ID0gUVN0cmluZygpOwotICAg
ICAgICAgICAgY29kZSA9IFF0OjpLZXlfTGVmdDsKLSAgICAgICAgfSBlbHNlIGlmIChjb2RlID09
ICd5JyAmJiBtb2RpZmllcnMgPT0gUXQ6OkNvbnRyb2xNb2RpZmllcikgewotICAgICAgICAgICAg
a2V5VGV4dCA9IFFMYXRpbjFTdHJpbmcoImMiKTsKLSAgICAgICAgICAgIGNvZGUgPSAnYyc7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAnaycgJiYgbW9kaWZpZXJzID09IFF0OjpDb250cm9s
TW9kaWZpZXIpIHsKLSAgICAgICAgICAgIGtleVRleHQgPSBRTGF0aW4xU3RyaW5nKCJ4Iik7Ci0g
ICAgICAgICAgICBjb2RlID0gJ3gnOwotICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gJ2EnICYm
IG1vZGlmaWVycyA9PSBRdDo6Q29udHJvbE1vZGlmaWVyKSB7Ci0gICAgICAgICAgICBrZXlUZXh0
ID0gUVN0cmluZygpOwotICAgICAgICAgICAgY29kZSA9IFF0OjpLZXlfSG9tZTsKLSAgICAgICAg
ICAgIG1vZGlmaWVycyA9IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSBLRVlDT0RFX0xF
RlRBUlJPVykgewotICAgICAgICAgICAga2V5VGV4dCA9IFFTdHJpbmcoKTsKLSAgICAgICAgICAg
IGNvZGUgPSBRdDo6S2V5X0xlZnQ7Ci0gICAgICAgICAgICBpZiAobW9kaWZpZXJzICYgUXQ6Ok1l
dGFNb2RpZmllcikgewotICAgICAgICAgICAgICAgIGNvZGUgPSBRdDo6S2V5X0hvbWU7Ci0gICAg
ICAgICAgICAgICAgbW9kaWZpZXJzICY9IH5RdDo6TWV0YU1vZGlmaWVyOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gS0VZQ09ERV9SSUdIVEFSUk9XKSB7Ci0gICAg
ICAgICAgICBrZXlUZXh0ID0gUVN0cmluZygpOwotICAgICAgICAgICAgY29kZSA9IFF0OjpLZXlf
UmlnaHQ7Ci0gICAgICAgICAgICBpZiAobW9kaWZpZXJzICYgUXQ6Ok1ldGFNb2RpZmllcikgewot
ICAgICAgICAgICAgICAgIGNvZGUgPSBRdDo6S2V5X0VuZDsKLSAgICAgICAgICAgICAgICBtb2Rp
ZmllcnMgJj0gflF0OjpNZXRhTW9kaWZpZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAoY29kZSA9PSBLRVlDT0RFX1VQQVJST1cpIHsKLSAgICAgICAgICAgIGtleVRleHQgPSBR
U3RyaW5nKCk7Ci0gICAgICAgICAgICBjb2RlID0gUXQ6OktleV9VcDsKLSAgICAgICAgICAgIGlm
IChtb2RpZmllcnMgJiBRdDo6TWV0YU1vZGlmaWVyKSB7Ci0gICAgICAgICAgICAgICAgY29kZSA9
IFF0OjpLZXlfUGFnZVVwOwotICAgICAgICAgICAgICAgIG1vZGlmaWVycyAmPSB+UXQ6Ok1ldGFN
b2RpZmllcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IEtFWUNP
REVfRE9XTkFSUk9XKSB7Ci0gICAgICAgICAgICBrZXlUZXh0ID0gUVN0cmluZygpOwotICAgICAg
ICAgICAgY29kZSA9IFF0OjpLZXlfRG93bjsKLSAgICAgICAgICAgIGlmIChtb2RpZmllcnMgJiBR
dDo6TWV0YU1vZGlmaWVyKSB7Ci0gICAgICAgICAgICAgICAgY29kZSA9IFF0OjpLZXlfUGFnZURv
d247Ci0gICAgICAgICAgICAgICAgbW9kaWZpZXJzICY9IH5RdDo6TWV0YU1vZGlmaWVyOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNvZGUgPSBrZXkudW5pY29k
ZSgpLT50b1VwcGVyKCkudW5pY29kZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChrZXku
c3RhcnRzV2l0aChRTGF0aW4xQ2hhcignRicpKSAmJiBrZXkuY291bnQoKSA8PSAzKSB7Ci0gICAg
ICAgICAgICBrZXlUZXh0ID0ga2V5VGV4dC5taWQoMSk7Ci0gICAgICAgICAgICBpbnQgZnVuY3Rp
b25LZXkgPSBrZXlUZXh0LnRvSW50KCk7Ci0gICAgICAgICAgICBRX0FTU0VSVChmdW5jdGlvbktl
eSA+PSAxICYmIGZ1bmN0aW9uS2V5IDw9IDM1KTsKLSAgICAgICAgICAgIGNvZGUgPSBRdDo6S2V5
X0YxICsgKGZ1bmN0aW9uS2V5IC0gMSk7Ci0gICAgICAgIC8vIG1hcCBzcGVjaWFsIGtleWNvZGUg
c3RyaW5ncyB1c2VkIGJ5IHRoZSB0ZXN0cyB0byBzb21ldGhpbmcgdGhhdCB3b3JrcyBmb3IgUXQv
WDExCi0gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09IFFMYXRpbjFTdHJpbmcoImxlZnRBcnJvdyIp
KSB7Ci0gICAgICAgICAgICBrZXlUZXh0ID0gUVN0cmluZygpOwotICAgICAgICAgICAgY29kZSA9
IFF0OjpLZXlfTGVmdDsKLSAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gUUxhdGluMVN0cmluZygi
cmlnaHRBcnJvdyIpKSB7Ci0gICAgICAgICAgICBrZXlUZXh0ID0gUVN0cmluZygpOwotICAgICAg
ICAgICAgY29kZSA9IFF0OjpLZXlfUmlnaHQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09IFFM
YXRpbjFTdHJpbmcoInVwQXJyb3ciKSkgewotICAgICAgICAgICAga2V5VGV4dCA9IFFTdHJpbmco
KTsKLSAgICAgICAgICAgIGNvZGUgPSBRdDo6S2V5X1VwOwotICAgICAgICB9IGVsc2UgaWYgKGtl
eSA9PSBRTGF0aW4xU3RyaW5nKCJkb3duQXJyb3ciKSkgewotICAgICAgICAgICAga2V5VGV4dCA9
IFFTdHJpbmcoKTsKLSAgICAgICAgICAgIGNvZGUgPSBRdDo6S2V5X0Rvd247Ci0gICAgICAgIH0g
ZWxzZSBpZiAoa2V5ID09IFFMYXRpbjFTdHJpbmcoInBhZ2VVcCIpKSB7Ci0gICAgICAgICAgICBr
ZXlUZXh0ID0gUVN0cmluZygpOwotICAgICAgICAgICAgY29kZSA9IFF0OjpLZXlfUGFnZVVwOwot
ICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSBRTGF0aW4xU3RyaW5nKCJwYWdlRG93biIpKSB7Ci0g
ICAgICAgICAgICBrZXlUZXh0ID0gUVN0cmluZygpOwotICAgICAgICAgICAgY29kZSA9IFF0OjpL
ZXlfUGFnZURvd247Ci0gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09IFFMYXRpbjFTdHJpbmcoImhv
bWUiKSkgewotICAgICAgICAgICAga2V5VGV4dCA9IFFTdHJpbmcoKTsKLSAgICAgICAgICAgIGNv
ZGUgPSBRdDo6S2V5X0hvbWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09IFFMYXRpbjFTdHJp
bmcoImVuZCIpKSB7Ci0gICAgICAgICAgICBrZXlUZXh0ID0gUVN0cmluZygpOwotICAgICAgICAg
ICAgY29kZSA9IFF0OjpLZXlfRW5kOwotICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSBRTGF0aW4x
U3RyaW5nKCJpbnNlcnQiKSkgewotICAgICAgICAgICAga2V5VGV4dCA9IFFTdHJpbmcoKTsKLSAg
ICAgICAgICAgIGNvZGUgPSBRdDo6S2V5X0luc2VydDsKLSAgICAgICAgfSBlbHNlIGlmIChrZXkg
PT0gUUxhdGluMVN0cmluZygiZGVsZXRlIikpIHsKLSAgICAgICAgICAgIGtleVRleHQgPSBRU3Ry
aW5nKCk7Ci0gICAgICAgICAgICBjb2RlID0gUXQ6OktleV9EZWxldGU7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoa2V5ID09IFFMYXRpbjFTdHJpbmcoInByaW50U2NyZWVuIikpIHsKLSAgICAgICAgICAg
IGtleVRleHQgPSBRU3RyaW5nKCk7Ci0gICAgICAgICAgICBjb2RlID0gUXQ6OktleV9QcmludDsK
LSAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gUUxhdGluMVN0cmluZygibWVudSIpKSB7Ci0gICAg
ICAgICAgICBrZXlUZXh0ID0gUVN0cmluZygpOwotICAgICAgICAgICAgY29kZSA9IFF0OjpLZXlf
TWVudTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFFLZXlFdmVudCogcHJlc3NFdmVudCA9IG5l
dyBRS2V5RXZlbnQoUUV2ZW50OjpLZXlQcmVzcywgY29kZSwgbW9kaWZpZXJzLCBrZXlUZXh0KTsK
LSAgICBzZW5kT3JRdWV1ZUV2ZW50KHByZXNzRXZlbnQpOwotICAgIFFLZXlFdmVudCogcmVsZWFz
ZUV2ZW50ID0gbmV3IFFLZXlFdmVudChRRXZlbnQ6OktleVJlbGVhc2UsIGNvZGUsIG1vZGlmaWVy
cywga2V5VGV4dCk7Ci0gICAgc2VuZE9yUXVldWVFdmVudChyZWxlYXNlRXZlbnQpOwotCi19Ci0K
LXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0
dG9uKQotewotICAgIGlmIChtX3RpbWUgLSBtX2NsaWNrVGltZSA8IFFBcHBsaWNhdGlvbjo6ZG91
YmxlQ2xpY2tJbnRlcnZhbCgpICYmIG1fcG9zaXRpb24gPT0gbV9jbGlja1Bvc2l0aW9uICYmIGJ1
dHRvbiA9PSBtX2NsaWNrQnV0dG9uKSB7Ci0gICAgICAgIG1fY2xpY2tUaW1lID0gbV90aW1lOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jbGlja1RpbWUgPSBtX3RpbWU7Ci0gICAg
bV9jbGlja1Bvc2l0aW9uID0gbV9wb3NpdGlvbjsKLSAgICBtX2NsaWNrQnV0dG9uID0gYnV0dG9u
OwotfQotCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRG93bih1bnNpZ25lZCBidXR0b24s
IFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMpCi17Ci0gICAgUXQ6OktleWJvYXJkTW9kaWZp
ZXJzIG1vZGlmaWVycyA9IGdldE1vZGlmaWVycyh3a01vZGlmaWVycyk7Ci0gICAgUXQ6Ok1vdXNl
QnV0dG9uIG1vdXNlQnV0dG9uID0gZ2V0TW91c2VCdXR0b24oYnV0dG9uKTsKLQotICAgIHVwZGF0
ZUNsaWNrQ291bnRGb3JCdXR0b24oYnV0dG9uKTsKLQotICAgIG1fbW91c2VCdXR0b25zIHw9IG1v
dXNlQnV0dG9uOwotCi0gICAgUVBvaW50IG1vdXNlUG9zKG1fcG9zaXRpb24ueCwgbV9wb3NpdGlv
bi55KTsKLSAgICBRTW91c2VFdmVudCogZXZlbnQgPSBuZXcgUU1vdXNlRXZlbnQoUUV2ZW50OjpN
b3VzZUJ1dHRvblByZXNzLAotICAgICAgICBtb3VzZVBvcywgbW91c2VQb3MsIG1vdXNlQnV0dG9u
LCBtX21vdXNlQnV0dG9ucywgbW9kaWZpZXJzKTsKLQotICAgIC8vIFdlIGFyZW4ndCBnZW5lcmF0
aW5nIE1vdXNlQnV0dG9uRGJsQ2xpY2sgZXZlbnRzIGFzIHRoZXkgYXJlbid0IHVzZWQuCi0gICAg
c2VuZE9yUXVldWVFdmVudChldmVudCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91
c2VVcCh1bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMpCi17Ci0gICAgUXQ6Ok1vdXNl
QnV0dG9uIG1vdXNlQnV0dG9uID0gZ2V0TW91c2VCdXR0b24oYnV0dG9uKTsKLSAgICBtX21vdXNl
QnV0dG9ucyAmPSB+bW91c2VCdXR0b247Ci0KLSAgICBRUG9pbnQgbW91c2VQb3MobV9wb3NpdGlv
bi54LCBtX3Bvc2l0aW9uLnkpOwotICAgIFFNb3VzZUV2ZW50KiBldmVudCA9IG5ldyBRTW91c2VF
dmVudChRRXZlbnQ6Ok1vdXNlQnV0dG9uUmVsZWFzZSwKLSAgICAgICAgbW91c2VQb3MsIG1vdXNl
UG9zLCBtb3VzZUJ1dHRvbiwgbV9tb3VzZUJ1dHRvbnMsIFF0OjpOb01vZGlmaWVyKTsKLQotICAg
IHNlbmRPclF1ZXVlRXZlbnQoZXZlbnQpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1v
dXNlTW92ZVRvKGRvdWJsZSB4LCBkb3VibGUgeSkKLXsKLSAgICBtX3Bvc2l0aW9uLnggPSB4Owot
ICAgIG1fcG9zaXRpb24ueSA9IHk7Ci0KLSAgICBRUG9pbnQgbW91c2VQb3MobV9wb3NpdGlvbi54
LCBtX3Bvc2l0aW9uLnkpOwotICAgIFFNb3VzZUV2ZW50KiBldmVudCA9IG5ldyBRTW91c2VFdmVu
dChRRXZlbnQ6Ok1vdXNlTW92ZSwKLSAgICAgICAgbW91c2VQb3MsIG1vdXNlUG9zLCBRdDo6Tm9C
dXR0b24sIG1fbW91c2VCdXR0b25zLCBRdDo6Tm9Nb2RpZmllcik7Ci0KLSAgICBzZW5kT3JRdWV1
ZUV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5
KGludCwgaW50KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLX0KLQotdm9pZCBF
dmVudFNlbmRlclByb3h5Ojpjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQsIGludCwgYm9vbCkK
LXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi19Ci0KLXZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6bGVhcEZvcndhcmQoaW50IG1zKQotewotICAgIGV2ZW50UXVldWVbZW5kT2ZRdWV1ZV0u
bV9kZWxheSA9IG1zOwotICAgIG1fdGltZSArPSBtczsKLX0KLQotI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6OmFkZFRvdWNoUG9pbnQoaW50IHgsIGludCB5
KQotewotICAgIGNvbnN0IGludCBpZCA9IG1fdG91Y2hQb2ludHMuaXNFbXB0eSgpID8gMCA6IG1f
dG91Y2hQb2ludHMubGFzdCgpLmlkKCkgKyAxOwotICAgIGNvbnN0IFFQb2ludEYgcG9zKHgsIHkp
OwotICAgIFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50IHBvaW50KGlkKTsKLSAgICBwb2ludC5zZXRQ
b3MocG9zKTsKLSAgICBwb2ludC5zZXRTdGFydFBvcyhwb3MpOwotICAgIHBvaW50LnNldFN0YXRl
KFF0OjpUb3VjaFBvaW50UHJlc3NlZCk7Ci0gICAgaWYgKCFtX3RvdWNoUG9pbnRSYWRpdXMuaXNO
dWxsKCkpCi0gICAgICAgIHBvaW50LnNldFJlY3QoUVJlY3RGKHBvcyAtIG1fdG91Y2hQb2ludFJh
ZGl1cywgcG9zICsgbV90b3VjaFBvaW50UmFkaXVzKSk7Ci0gICAgbV90b3VjaFBvaW50cy5hcHBl
bmQocG9pbnQpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQo
aW50IGluZGV4LCBpbnQgeCwgaW50IHkpCi17Ci0gICAgQVNTRVJUKGluZGV4ID49IDAgJiYgaW5k
ZXggPCBtX3RvdWNoUG9pbnRzLmNvdW50KCkpOwotICAgIFFQb2ludEYgcG9zKHgsIHkpOwotICAg
IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50ICZwID0gbV90b3VjaFBvaW50c1tpbmRleF07Ci0gICAg
cC5zZXRQb3MocG9zKTsKLSAgICBwLnNldFN0YXRlKFF0OjpUb3VjaFBvaW50TW92ZWQpOwotICAg
IGlmICghbV90b3VjaFBvaW50UmFkaXVzLmlzTnVsbCgpKQotICAgICAgICBwLnNldFJlY3QoUVJl
Y3RGKHBvcyAtIG1fdG91Y2hQb2ludFJhZGl1cywgcG9zICsgbV90b3VjaFBvaW50UmFkaXVzKSk7
Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2RpZmllcihXS0V2ZW50TW9k
aWZpZXJzIG1vZGlmaWVyLCBib29sIGVuYWJsZSkKLXsKLSAgICBRdDo6S2V5Ym9hcmRNb2RpZmll
cnMgbW9kID0gZ2V0TW9kaWZpZXJzKG1vZGlmaWVyKTsKLQotICAgIGlmIChlbmFibGUpCi0gICAg
ICAgIG1fdG91Y2hNb2RpZmllcnMgfD0gbW9kOwotICAgIGVsc2UKLSAgICAgICAgbV90b3VjaE1v
ZGlmaWVycyAmPSB+bW9kOwotfQotCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoUG9p
bnRSYWRpdXMoaW50IHJhZGl1c1gsIGludCByYWRpdXNZKQotewotICAgIG1fdG91Y2hQb2ludFJh
ZGl1cyA9IFFQb2ludChyYWRpdXNYLCByYWRpdXNZKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlclBy
b3h5Ojp0b3VjaFN0YXJ0KCkKLXsKLSAgICBpZiAoIW1fdG91Y2hBY3RpdmUpIHsKLSAgICAgICAg
c2VuZFRvdWNoRXZlbnQoUUV2ZW50OjpUb3VjaEJlZ2luKTsKLSAgICAgICAgbV90b3VjaEFjdGl2
ZSA9IHRydWU7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNlbmRUb3VjaEV2ZW50KFFFdmVudDo6VG91
Y2hVcGRhdGUpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoTW92ZSgpCi17Ci0g
ICAgc2VuZFRvdWNoRXZlbnQoUUV2ZW50OjpUb3VjaFVwZGF0ZSk7Ci19Ci0KLXZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6dG91Y2hFbmQoKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV90b3Vj
aFBvaW50cy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fdG91Y2hQb2ludHNbaV0uc3Rh
dGUoKSAhPSBRdDo6VG91Y2hQb2ludFJlbGVhc2VkKSB7Ci0gICAgICAgICAgICBzZW5kVG91Y2hF
dmVudChRRXZlbnQ6OlRvdWNoVXBkYXRlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLSAgICBzZW5kVG91Y2hFdmVudChRRXZlbnQ6OlRvdWNoRW5kKTsKLSAgICBtX3Rv
dWNoQWN0aXZlID0gZmFsc2U7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dG91Y2hDYW5j
ZWwoKQotewotICAgIHNlbmRUb3VjaEV2ZW50KFFFdmVudDo6VG91Y2hDYW5jZWwpOwotICAgIG1f
dG91Y2hBY3RpdmUgPSBmYWxzZTsKLX0KLQotdm9pZCBFdmVudFNlbmRlclByb3h5OjpjbGVhclRv
dWNoUG9pbnRzKCkKLXsKLSAgICBtX3RvdWNoUG9pbnRzLmNsZWFyKCk7Ci0gICAgbV90b3VjaE1v
ZGlmaWVycyA9IFF0OjpLZXlib2FyZE1vZGlmaWVycygpOwotICAgIG1fdG91Y2hBY3RpdmUgPSBm
YWxzZTsKLSAgICBtX3RvdWNoUG9pbnRSYWRpdXMgPSBRUG9pbnQoKTsKLX0KLQotdm9pZCBFdmVu
dFNlbmRlclByb3h5OjpyZWxlYXNlVG91Y2hQb2ludChpbnQgaW5kZXgpCi17Ci0gICAgaWYgKGlu
ZGV4IDwgMCB8fCBpbmRleCA+PSBtX3RvdWNoUG9pbnRzLmNvdW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fdG91Y2hQb2ludHNbaW5kZXhdLnNldFN0YXRlKFF0OjpUb3VjaFBvaW50UmVs
ZWFzZWQpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNhbmNlbFRvdWNoUG9pbnQoaW50
IGluZGV4KQotewotICAgIC8vIEZJWE1FOiBObyBjYW5jZWxsYXRpb24gc3RhdGUgaW4gUXQgNSwg
bWFwcGVkIHRvIHJlbGVhc2UgaW5zdGVhZC4KLSAgICAvLyBQbGF0Zm9ybVRvdWNoRXZlbnQgY29u
dmVyc2lvbiBsYXRlciB3aWxsIG1hcCBhbGwgdG91Y2ggcG9pbnRzIHRvCi0gICAgLy8gY2FuY2Vs
bGVkLgotICAgIHJlbGVhc2VUb3VjaFBvaW50KGluZGV4KTsKLX0KLQotdm9pZCBFdmVudFNlbmRl
clByb3h5OjpzZW5kVG91Y2hFdmVudChRRXZlbnQ6OlR5cGUgdHlwZSkKLXsKLSAgICBzdGF0aWMg
UVRvdWNoRGV2aWNlKiBkZXZpY2UgPSAwOwotICAgIGlmICghZGV2aWNlKSB7Ci0gICAgICAgIGRl
dmljZSA9IG5ldyBRVG91Y2hEZXZpY2U7Ci0gICAgICAgIGRldmljZS0+c2V0VHlwZShRVG91Y2hE
ZXZpY2U6OlRvdWNoU2NyZWVuKTsKLSAgICAgICAgUVdpbmRvd1N5c3RlbUludGVyZmFjZTo6cmVn
aXN0ZXJUb3VjaERldmljZShkZXZpY2UpOwotICAgIH0KLQotICAgIFF0OjpUb3VjaFBvaW50U3Rh
dGVzIGV2ZW50U3RhdGVzOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV90b3VjaFBvaW50cy5j
b3VudCgpOyBpKyspCi0gICAgICAgIGV2ZW50U3RhdGVzIHw9IG1fdG91Y2hQb2ludHNbaV0uc3Rh
dGUoKTsKLSAgICBRVG91Y2hFdmVudCBldmVudCh0eXBlLCBkZXZpY2UsIG1fdG91Y2hNb2RpZmll
cnMsIGV2ZW50U3RhdGVzKTsKLSAgICBldmVudC5zZXRUb3VjaFBvaW50cyhtX3RvdWNoUG9pbnRz
KTsKLSAgICBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5zZW5kRXZlbnQoJmV2ZW50
KTsKLSAgICBRTGlzdDxRVG91Y2hFdmVudDo6VG91Y2hQb2ludD46Okl0ZXJhdG9yIGl0ID0gbV90
b3VjaFBvaW50cy5iZWdpbigpOwotICAgIHdoaWxlIChpdCAhPSBtX3RvdWNoUG9pbnRzLmVuZCgp
KSB7Ci0gICAgICAgIGlmIChpdC0+c3RhdGUoKSA9PSBRdDo6VG91Y2hQb2ludFJlbGVhc2VkKQot
ICAgICAgICAgICAgaXQgPSBtX3RvdWNoUG9pbnRzLmVyYXNlKGl0KTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBpdC0+c2V0U3RhdGUoUXQ6OlRvdWNoUG9pbnRTdGF0aW9uYXJ5KTsKLSAg
ICAgICAgICAgICsraXQ7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0jZW5kaWYKLQotdm9pZCBFdmVu
dFNlbmRlclByb3h5OjpzZW5kT3JRdWV1ZUV2ZW50KFFFdmVudCogZXZlbnQpCi17Ci0gICAgaWYg
KCFlbmRPZlF1ZXVlICYmICFldmVudFF1ZXVlW2VuZE9mUXVldWVdLm1fZGVsYXkpIHsKLSAgICAg
ICAgbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+c2VuZEV2ZW50KGV2ZW50KTsKLSAg
ICAgICAgZGVsZXRlIGV2ZW50OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZXZlbnRR
dWV1ZVtlbmRPZlF1ZXVlKytdLm1fZXZlbnQgPSBldmVudDsKLSAgICByZXBsYXlTYXZlZEV2ZW50
cygpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6OnJlcGxheVNhdmVkRXZlbnRzKCkKLXsK
LSAgICBpZiAoaXNSZXBsYXlpbmdFdmVudHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlzUmVw
bGF5aW5nRXZlbnRzID0gdHJ1ZTsKLSAgICBpbnQgaSA9IDA7Ci0KLSAgICB3aGlsZSAoaSA8IGVu
ZE9mUXVldWUpIHsKLSAgICAgICAgV1RSRXZlbnRRdWV1ZSYgZXYgPSBldmVudFF1ZXVlW2ldOwot
ICAgICAgICBpZiAoZXYubV9kZWxheSkKLSAgICAgICAgICAgIFFUZXN0OjpxV2FpdChldi5tX2Rl
bGF5KTsKLSAgICAgICAgaSsrOwotICAgICAgICBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmll
dygpLT5zZW5kRXZlbnQoZXYubV9ldmVudCk7Ci0gICAgICAgIGRlbGV0ZSBldi5tX2V2ZW50Owot
ICAgICAgICBldi5tX2RlbGF5ID0gMDsKLSAgICB9Ci0KLSAgICBlbmRPZlF1ZXVlID0gMDsKLSAg
ICBpc1JlcGxheWluZ0V2ZW50cyA9IGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVFIKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1XZWJWaWV3UXQuY3Bw
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMGIwNDY1ZTQ1YTI3MmMxNTQxNTIzMDUwOWQyMGQy
M2JhM2JkMGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0
eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNpbmNs
dWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKLSNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKLQot
I2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UUV2ZW50TG9vcD4KLSNpbmNs
dWRlIDxRUW1sUHJvcGVydHk+Ci0jaW5jbHVkZSA8UXRRdWljay9RUXVpY2tWaWV3PgotI2luY2x1
ZGUgPFF0UXVpY2svcHJpdmF0ZS9xcXVpY2t3aW5kb3dfcC5oPgotI2luY2x1ZGUgPFdlYktpdDIv
V0tJbWFnZVF0Lmg+Ci0jaW5jbHVkZSA8cXBhL3F3aW5kb3dzeXN0ZW1pbnRlcmZhY2UuaD4KLQot
bmFtZXNwYWNlIFdUUiB7Ci0KLWNsYXNzIFdyYXBwZXJXaW5kb3cgOiBwdWJsaWMgUVF1aWNrVmll
dyB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBXcmFwcGVyV2luZG93KFFRdWlja1dlYlZp
ZXcqIHZpZXcpCi0gICAgICAgIDogUVF1aWNrVmlldyhRVXJsKCJkYXRhOnRleHQvcGxhaW4saW1w
b3J0IFF0UXVpY2sgMi4wXG5JdGVtIHsgb2JqZWN0TmFtZTogJ3Jvb3QnIH0iKSkKLSAgICAgICAg
LCBtX3ZpZXcodmlldykKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0dXMoKSA9PSBRUXVpY2tWaWV3
OjpSZWFkeSkKLSAgICAgICAgICAgIGhhbmRsZVN0YXR1c0NoYW5nZWQoUVF1aWNrVmlldzo6UmVh
ZHkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb25uZWN0KHRoaXMsIFNJR05BTChzdGF0
dXNDaGFuZ2VkKFFRdWlja1ZpZXc6OlN0YXR1cykpLCBTTE9UKGhhbmRsZVN0YXR1c0NoYW5nZWQo
UVF1aWNrVmlldzo6U3RhdHVzKSkpOwotICAgIH0KLQotcHJpdmF0ZSBRX1NMT1RTOgotICAgIHZv
aWQgaGFuZGxlU3RhdHVzQ2hhbmdlZChRUXVpY2tWaWV3OjpTdGF0dXMgc3RhdHVzKQotICAgIHsK
LSAgICAgICAgaWYgKHN0YXR1cyAhPSBRUXVpY2tWaWV3OjpSZWFkeSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBzZXRHZW9tZXRyeSgwLCAwLCA4MDAsIDYwMCk7Ci0KLSAgICAgICAg
c2V0UmVzaXplTW9kZShRUXVpY2tWaWV3OjpTaXplUm9vdE9iamVjdFRvVmlldyk7Ci0gICAgICAg
IG1fdmlldy0+c2V0UGFyZW50SXRlbShyb290T2JqZWN0KCkpOwotICAgICAgICBRUW1sUHJvcGVy
dHk6OndyaXRlKG1fdmlldywgImFuY2hvcnMuZmlsbCIsIHFWYXJpYW50RnJvbVZhbHVlKHJvb3RP
YmplY3QoKSkpOwotCi0gICAgICAgIGlmIChQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd1NuYXBzaG90
RW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBzZXRTdXJmYWNlVHlwZShPcGVuR0xTdXJmYWNlKTsK
LSAgICAgICAgICAgIGNyZWF0ZSgpOwotI2lmIFFUX1ZFUlNJT04gPCBRVF9WRVJTSU9OX0NIRUNL
KDUsIDEsIDApCi0gICAgICAgICAgICBRUXVpY2tXaW5kb3dQcml2YXRlOjpnZXQodGhpcyktPnNl
dFJlbmRlcldpdGhvdXRTaG93aW5nKHRydWUpOwotI2Vsc2UKLSAgICAgICAgICAgIG1fdmlldy0+
ZXhwZXJpbWVudGFsKCktPnNldFJlbmRlclRvT2Zmc2NyZWVuQnVmZmVyKHRydWUpOwotI2VuZGlm
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV92aWV3LT5leHBlcmltZW50YWwoKS0+c2V0
UmVuZGVyVG9PZmZzY3JlZW5CdWZmZXIodHJ1ZSk7Ci0KLSAgICAgICAgUVdpbmRvd1N5c3RlbUlu
dGVyZmFjZTo6aGFuZGxlV2luZG93QWN0aXZhdGVkKHRoaXMpOwotICAgICAgICBtX3ZpZXctPnBh
Z2UoKS0+c2V0Rm9jdXModHJ1ZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFFRdWlja1dlYlZp
ZXcqIG1fdmlldzsKLX07Ci0KLVBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29u
dGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFdLUGFnZVJl
ZiAvKiByZWxhdGVkUGFnZSAqLywgV0tEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpCi0gICAgOiBtX3dp
bmRvd0lzS2V5KHRydWUpCi0gICAgLCBtX29wdGlvbnMob3B0aW9ucykKLSAgICAsIG1fbW9kYWxF
dmVudExvb3AoMCkKLXsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXNlRml4ZWRMYXlv
dXRLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVzZUZpeGVkTGF5
b3V0IikpOwotICAgIG1fdXNpbmdGaXhlZExheW91dCA9IG9wdGlvbnMgPyBXS0Jvb2xlYW5HZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
b3B0aW9ucywgdXNlRml4ZWRMYXlvdXRLZXkuZ2V0KCkpKSkgOiBmYWxzZTsKLSAgICBRUXVpY2tX
ZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRGbGlja2FibGVWaWV3cG9ydEVuYWJsZWQobV91c2luZ0Zp
eGVkTGF5b3V0KTsKLQotICAgIG1fdmlldyA9IG5ldyBRUXVpY2tXZWJWaWV3KGNvbnRleHRSZWYs
IHBhZ2VHcm91cFJlZik7Ci0gICAgbV92aWV3LT5zZXRBbGxvd0FueUhUVFBTQ2VydGlmaWNhdGVG
b3JMb2NhbEhvc3QodHJ1ZSk7Ci0gICAgbV92aWV3LT5jb21wb25lbnRDb21wbGV0ZSgpOwotCi0g
ICAgbV93aW5kb3cgPSBuZXcgV3JhcHBlcldpbmRvdyhtX3ZpZXcpOwotfQotCi1QbGF0Zm9ybVdl
YlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQotewotICAgIGRlbGV0ZSBtX3dpbmRvdzsKLSAgICBp
ZiAobV9tb2RhbEV2ZW50TG9vcCkKLSAgICAgICAgbV9tb2RhbEV2ZW50TG9vcC0+ZXhpdCgpOwot
fQotCi12b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVuc2ln
bmVkIGhlaWdodCkKLXsKLSAgICAvLyBJZiB3ZSBkbyBub3QgaGF2ZSBhIHBsYXRmb3JtIHdpbmRv
dyB3ZSB3aWxsIG5ldmVyIGdldCB0aGUgbmVjZXNzYXJ5Ci0gICAgLy8gcmVzaXplIGV2ZW50LCBz
byBzaW11bGF0ZSBpdCBpbiB0aGF0IGNhc2UgdG8gbWFrZSBzdXJlIHRoZSBxdWlja3ZpZXcgaXMK
LSAgICAvLyByZXNpemVkIHRvIHdoYXQgdGhlIGxheW91dCB0ZXN0IGV4cGVjdHMuCi0gICAgaWYg
KCFtX3dpbmRvdy0+aGFuZGxlKCkpIHsKLSAgICAgICAgUVJlY3QgbmV3R2VvbWV0cnkobV93aW5k
b3ctPngoKSwgbV93aW5kb3ctPnkoKSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIFFXaW5kb3dT
eXN0ZW1JbnRlcmZhY2U6OmhhbmRsZUdlb21ldHJ5Q2hhbmdlKG1fd2luZG93LCBuZXdHZW9tZXRy
eSk7Ci0gICAgICAgIFFXaW5kb3dTeXN0ZW1JbnRlcmZhY2U6OmZsdXNoV2luZG93U3lzdGVtRXZl
bnRzKCk7Ci0gICAgfQotCi0gICAgbV93aW5kb3ctPnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLX0K
LQotV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpCi17Ci0gICAgcmV0dXJuIG1fdmll
dy0+cGFnZVJlZigpOwotfQotCi12b2lkIFBsYXRmb3JtV2ViVmlldzo6Zm9jdXMoKQotewotICAg
IFFXaW5kb3dTeXN0ZW1JbnRlcmZhY2U6OmhhbmRsZVdpbmRvd0FjdGl2YXRlZChtX3dpbmRvdyk7
Ci0gICAgbV92aWV3LT5zZXRGb2N1cyh0cnVlKTsKLX0KLQotV0tSZWN0IFBsYXRmb3JtV2ViVmll
dzo6d2luZG93RnJhbWUoKQotewotICAgIFFSZWN0IHdpbmRvd1JlY3QgPSBtX3dpbmRvdy0+Z2Vv
bWV0cnkoKTsKLSAgICBXS1JlY3Qgd2tGcmFtZTsKLSAgICB3a0ZyYW1lLm9yaWdpbi54ID0gd2lu
ZG93UmVjdC54KCk7Ci0gICAgd2tGcmFtZS5vcmlnaW4ueSA9IHdpbmRvd1JlY3QueSgpOwotICAg
IHdrRnJhbWUuc2l6ZS53aWR0aCA9IHdpbmRvd1JlY3Quc2l6ZSgpLndpZHRoKCk7Ci0gICAgd2tG
cmFtZS5zaXplLmhlaWdodCA9IHdpbmRvd1JlY3Quc2l6ZSgpLmhlaWdodCgpOwotICAgIHJldHVy
biB3a0ZyYW1lOwotfQotCi12b2lkIFBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUoV0tS
ZWN0IHdrUmVjdCkKLXsKLSAgICBtX3dpbmRvdy0+c2V0R2VvbWV0cnkod2tSZWN0Lm9yaWdpbi54
LCB3a1JlY3Qub3JpZ2luLnksIHdrUmVjdC5zaXplLndpZHRoLCB3a1JlY3Quc2l6ZS5oZWlnaHQp
OwotfQotCi1ib29sIFBsYXRmb3JtV2ViVmlldzo6c2VuZEV2ZW50KFFFdmVudCogZXZlbnQpCi17
Ci0gICAgcmV0dXJuIFFDb3JlQXBwbGljYXRpb246OnNlbmRFdmVudChtX3dpbmRvdywgZXZlbnQp
OwotfQotCi12b2lkIFBsYXRmb3JtV2ViVmlldzo6cG9zdEV2ZW50KFFFdmVudCogZXZlbnQpCi17
Ci0gICAgUUNvcmVBcHBsaWNhdGlvbjo6cG9zdEV2ZW50KG1fd2luZG93LCBldmVudCk7Ci19Ci0K
LXZvaWQgUGxhdGZvcm1XZWJWaWV3OjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKLXsKLX0KLQotdm9p
ZCBQbGF0Zm9ybVdlYlZpZXc6OnJlbW92ZUNocm9tZUlucHV0RmllbGQoKQotewotfQotCi12b2lk
IFBsYXRmb3JtV2ViVmlldzo6bWFrZVdlYlZpZXdGaXJzdFJlc3BvbmRlcigpCi17Ci19Ci0KLVdL
UmV0YWluUHRyPFdLSW1hZ2VSZWY+IFBsYXRmb3JtV2ViVmlldzo6d2luZG93U25hcHNob3RJbWFn
ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0V0soV0tJbWFnZUNyZWF0ZUZyb21RSW1hZ2UobV93aW5k
b3ctPmdyYWJXaW5kb3coKSkpOwotfQotCi1ib29sIFBsYXRmb3JtV2ViVmlldzo6d2luZG93U25h
cHNob3RFbmFibGVkKCkKLXsKLSAgICAvLyBXZSBuZWVkIGEgd2F5IHRvIGRpc2FibGUgVUkgc2lk
ZSByZW5kZXJpbmcgZm9yIHRlc3RzIGJlY2F1c2UgaXQgaXMKLSAgICAvLyB0b28gc2xvdyB3aXRo
b3V0IGFwcHJvcHJpYXRlIGhhcmR3YXJlLgotICAgIHN0YXRpYyBib29sIHJlc3VsdDsKLSAgICBz
dGF0aWMgYm9vbCBoYXNDaGVja2VkID0gZmFsc2U7Ci0gICAgaWYgKCFoYXNDaGVja2VkKQotICAg
ICAgICByZXN1bHQgPSBxZ2V0ZW52KCJRVF9XRUJLSVRfRElTQUJMRV9VSVBST0NFU1NfRFVNUFBJ
WEVMUyIpICE9ICIxIjsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFBsYXRmb3JtV2Vi
Vmlldzo6dmlld1N1cHBvcnRzT3B0aW9ucyhXS0RpY3Rpb25hcnlSZWYgb3B0aW9ucykgY29uc3QK
LXsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXNlRml4ZWRMYXlvdXRLZXkoQWRvcHRX
SywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVzZUZpeGVkTGF5b3V0IikpOwotCi0g
ICAgcmV0dXJuIG1fdXNpbmdGaXhlZExheW91dCA9PSAob3B0aW9ucyA/IFdLQm9vbGVhbkdldFZh
bHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShv
cHRpb25zLCB1c2VGaXhlZExheW91dEtleS5nZXQoKSkpKSA6IGZhbHNlKTsKLX0KLQotdm9pZCBQ
bGF0Zm9ybVdlYlZpZXc6OmRpZEluaXRpYWxpemVDbGllbnRzKCkKLXsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV1RSCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXdRdC5tb2MiCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1Rlc3RDb250cm9sbGVyUXQuY3BwIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9xdC9UZXN0Q29udHJvbGxlclF0LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOWQzNTE1YzgyMzFiYTUyODM3OTk5MmNmOGZlNjg3YWFlMmJkYjBkOS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL3F0L1Rlc3RDb250cm9sbGVyUXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJQbGF0Zm9y
bVdlYlZpZXcuaCIKLSNpbmNsdWRlICJXS1N0cmluZ1F0LmgiCi0KLSNpbmNsdWRlIDxjc3RkbGli
PgotI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UUV2ZW50TG9vcD4KLSNp
bmNsdWRlIDxRRmlsZUluZm8+Ci0jaW5jbHVkZSA8UUxpYnJhcnk+Ci0jaW5jbHVkZSA8UU9iamVj
dD4KLSNpbmNsdWRlIDxRVGltZXI+Ci0jaW5jbHVkZSA8UXRHbG9iYWw+Ci0jaW5jbHVkZSA8cXF1
aWNrd2Vidmlld19wLmg+Ci0jaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXVFIgewotCi1jbGFzcyBUZXN0Q29udHJv
bGxlcjo6UnVuTG9vcCA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotcHVibGljOgot
ICAgIFJ1bkxvb3AoKTsKLQotICAgIHZvaWQgcnVuVW50aWwoZG91YmxlIHRpbWVvdXQpOwotICAg
IHZvaWQgbm90aWZ5RG9uZSgpOwotICAgIHZvaWQgcnVuTW9kYWwoUGxhdGZvcm1XZWJWaWV3Kik7
Ci1wdWJsaWMgUV9TTE9UUzoKLSAgICB2b2lkIHRpbWVyRmlyZWQoKTsKLXByaXZhdGU6Ci0gICAg
UUV2ZW50TG9vcCBtX3J1blVudGlsTG9vcDsKLSAgICBRRXZlbnRMb29wIG1fbW9kYWxMb29wOwot
ICAgIFFUaW1lciBtX3J1blVudGlsTG9vcFRpbWVyOwotICAgIGJvb2wgbV9ydW5VbnRpbExvb3BD
bG9zZVBlbmRpbmc7Ci19OwotCi1UZXN0Q29udHJvbGxlcjo6UnVuTG9vcDo6UnVuTG9vcCgpCi0g
ICAgOiBtX3J1blVudGlsTG9vcENsb3NlUGVuZGluZyhmYWxzZSkKLXsKLSAgICBtX3J1blVudGls
TG9vcFRpbWVyLnNldFNpbmdsZVNob3QodHJ1ZSk7Ci0gICAgUU9iamVjdDo6Y29ubmVjdCgmbV9y
dW5VbnRpbExvb3BUaW1lciwgU0lHTkFMKHRpbWVvdXQoKSksIHRoaXMsIFNMT1QodGltZXJGaXJl
ZCgpKSk7Ci19Ci0KLXZvaWQgVGVzdENvbnRyb2xsZXI6OlJ1bkxvb3A6OnJ1blVudGlsKGRvdWJs
ZSB0aW1lb3V0KQotewotICAgIEFTU0VSVCghbV9ydW5VbnRpbExvb3AuaXNSdW5uaW5nKCkpOwot
ICAgIGlmICh0aW1lb3V0KSB7Ci0gICAgICAgIGNvbnN0IGludCB0aW1lb3V0SW5NaWxsaVNlY3Mg
PSB0aW1lb3V0ICogMTAwMDsKLSAgICAgICAgbV9ydW5VbnRpbExvb3BUaW1lci5zdGFydCh0aW1l
b3V0SW5NaWxsaVNlY3MpOwotICAgIH0KLSAgICBtX3J1blVudGlsTG9vcC5leGVjKFFFdmVudExv
b3A6OkV4Y2x1ZGVVc2VySW5wdXRFdmVudHMpOwotfQotCi12b2lkIFRlc3RDb250cm9sbGVyOjpS
dW5Mb29wOjpub3RpZnlEb25lKCkKLXsKLSAgICBpZiAobV9tb2RhbExvb3AuaXNSdW5uaW5nKCkp
IHsKLSAgICAgICAgLy8gV2FpdCBmb3IgdGhlIG1vZGFsIGxvb3AgZmlyc3QuIFdlIG9ubHkga2ls
bCBpdCBpZiB3ZSB0aW1lb3V0LgotICAgICAgICBtX3J1blVudGlsTG9vcENsb3NlUGVuZGluZyA9
IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3J1blVudGlsTG9vcFRpbWVy
LnN0b3AoKTsKLSAgICBtX3J1blVudGlsTG9vcC5leGl0KCk7Ci19Ci0KLXZvaWQgVGVzdENvbnRy
b2xsZXI6OlJ1bkxvb3A6OnRpbWVyRmlyZWQoKQotewotICAgIGlmIChtX21vZGFsTG9vcC5pc1J1
bm5pbmcoKSkgewotICAgICAgICBtX3J1blVudGlsTG9vcENsb3NlUGVuZGluZyA9IHRydWU7Ci0g
ICAgICAgIG1fbW9kYWxMb29wLmV4aXQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fcnVuVW50aWxMb29wLmV4aXQoKTsKLX0KLQotdm9pZCBUZXN0Q29udHJvbGxlcjo6UnVuTG9v
cDo6cnVuTW9kYWwoUGxhdGZvcm1XZWJWaWV3KiB2aWV3KQotewotICAgIEFTU0VSVCghbV9tb2Rh
bExvb3AuaXNSdW5uaW5nKCkpOwotICAgIHZpZXctPnNldE1vZGFsRXZlbnRMb29wKCZtX21vZGFs
TG9vcCk7Ci0gICAgbV9tb2RhbExvb3AuZXhlYyhRRXZlbnRMb29wOjpFeGNsdWRlVXNlcklucHV0
RXZlbnRzKTsKLQotICAgIGlmIChtX3J1blVudGlsTG9vcENsb3NlUGVuZGluZykKLSAgICAgICAg
bV9ydW5VbnRpbExvb3AuZXhpdCgpOwotfQotCi12b2lkIFRlc3RDb250cm9sbGVyOjpub3RpZnlE
b25lKCkKLXsKLSAgICBtX3J1bkxvb3AtPm5vdGlmeURvbmUoKTsKLX0KLQotdm9pZCBUZXN0Q29u
dHJvbGxlcjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKLXsKLSAgICBtX3J1bkxvb3AgPSBuZXcgUnVu
TG9vcDsKLSAgICBRUXVpY2tXZWJWaWV3OjpwbGF0Zm9ybUluaXRpYWxpemUoKTsKLX0KLQotdm9p
ZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLSAgICBkZWxldGUgbV9ydW5M
b29wOwotfQotCi12b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJ1blVudGlsKGJvb2wmIGNv
bmRpdGlvbiwgZG91YmxlIHRpbWVvdXQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbmRpdGlvbik7
Ci0gICAgY29uc3QgYm9vbCBzaG91bGRUaW1lb3V0ID0gIShxZ2V0ZW52KCJRVF9XRUJLSVQyX0RF
QlVHIikgPT0gIjEiIHx8IHRpbWVvdXQgPT0gbV9ub1RpbWVvdXQpOwotICAgIG1fcnVuTG9vcC0+
cnVuVW50aWwoc2hvdWxkVGltZW91dCA/IHRpbWVvdXQgOiAwKTsKLX0KLQotc3RhdGljIGJvb2wg
aXNFeGlzdGluZ0xpYnJhcnkoY29uc3QgUVN0cmluZyYgcGF0aCkKLXsKLSNpZiBPUyhXSU5ET1dT
KQotICAgIGNvbnN0IGNoYXIqIGxpYnJhcnlTdWZmaXhlc1tdID0geyAiLmRsbCIgfTsKLSNlbGlm
IE9TKE1BQ19PU19YKQotICAgIGNvbnN0IGNoYXIqIGxpYnJhcnlTdWZmaXhlc1tdID0geyAiLmJ1
bmRsZSIsICIuZHlsaWIiLCAiLnNvIiB9OwotI2VsaWYgT1MoVU5JWCkKLSAgICBjb25zdCBjaGFy
KiBsaWJyYXJ5U3VmZml4ZXNbXSA9IHsgIi5zbyIgfTsKLSNlbHNlCi0jZXJyb3IgTGlicmFyeSBw
YXRoIHN1ZmZpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGZvciB0aGlzIHBsYXRmb3JtCi0jZW5kaWYK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKGxpYnJhcnlTdWZmaXhlcykgLyBz
aXplb2YoY29uc3QgY2hhciopOyArK2kpIHsKLSAgICAgICAgaWYgKFFMaWJyYXJ5Ojppc0xpYnJh
cnkocGF0aCArIGxpYnJhcnlTdWZmaXhlc1tpXSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVGVzdENvbnRyb2xsZXI6Omlu
aXRpYWxpemVJbmplY3RlZEJ1bmRsZVBhdGgoKQotewotICAgIFFTdHJpbmcgcGF0aCA9IFFMYXRp
bjFTdHJpbmcoZ2V0ZW52KCJXVFJfSU5KRUNURURCVU5ETEVfUEFUSCIpKTsKLSAgICBpZiAocGF0
aC5pc0VtcHR5KCkpCi0gICAgICAgIHBhdGggPSBRRmlsZUluZm8oUUNvcmVBcHBsaWNhdGlvbjo6
YXBwbGljYXRpb25EaXJQYXRoKCkgKyAiLy4uL2xpYi9saWJXVFJJbmplY3RlZEJ1bmRsZSIpLmFi
c29sdXRlRmlsZVBhdGgoKTsKLSAgICBpZiAoIWlzRXhpc3RpbmdMaWJyYXJ5KHBhdGgpKQotICAg
ICAgICBxRmF0YWwoIkNhbm5vdCBmaW5kIHRoZSBpbmplY3RlZCBidW5kbGUgYXQgJXNcbiIsIHFQ
cmludGFibGUocGF0aCkpOwotCi0gICAgbV9pbmplY3RlZEJ1bmRsZVBhdGguYWRvcHQoV0tTdHJp
bmdDcmVhdGVXaXRoUVN0cmluZyhwYXRoKSk7Ci19Ci0KLXZvaWQgVGVzdENvbnRyb2xsZXI6Omlu
aXRpYWxpemVUZXN0UGx1Z2luRGlyZWN0b3J5KCkKLXsKLSAgICBtX3Rlc3RQbHVnaW5EaXJlY3Rv
cnkuYWRvcHQoV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocWdldGVudigiUVRXRUJLSVRf
UExVR0lOX1BBVEgiKS5jb25zdERhdGEoKSkpOwotfQotCi12b2lkIFRlc3RDb250cm9sbGVyOjpw
bGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCkKLXsKLX0KLQotdm9pZCBUZXN0Q29udHJvbGxlcjo6
cnVuTW9kYWwoUGxhdGZvcm1XZWJWaWV3KiB2aWV3KQotewotICAgIHNoYXJlZCgpLm1fcnVuTG9v
cC0+cnVuTW9kYWwodmlldyk7Ci19Ci0KLWNvbnN0IGNoYXIqIFRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybUxpYnJhcnlQYXRoRm9yVGVzdGluZygpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdUUgotCi0jaW5jbHVkZSAiVGVzdENvbnRyb2xsZXJRdC5tb2MiCmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1Rlc3RJbnZvY2F0aW9uUXQuY3BwIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9UZXN0SW52b2NhdGlvblF0LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYWM2YWFmMWVjYWZiNDMyZTZkNDRjMzYwMmMzNjIyNmU2NTNiZWNj
YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL3F0L1Rlc3RJbnZvY2F0aW9uUXQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNs
dWRlICJUZXN0SW52b2NhdGlvbi5oIgotCi0jaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0j
aW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlIDxRQnVmZmVyPgotI2luY2x1ZGUg
PFFDcnlwdG9ncmFwaGljSGFzaD4KLSNpbmNsdWRlIDxRdEd1aS9RUGFpbnRlcj4KLSNpbmNsdWRl
IDxXZWJLaXQyL1dLSW1hZ2VRdC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIFdUUiB7Ci0KLXN0YXRpYyB2b2lkIGR1bXBJbWFn
ZShjb25zdCBRSW1hZ2UmIGltYWdlKQotewotICAgIFFCdWZmZXIgYnVmZmVyOwotICAgIGJ1ZmZl
ci5vcGVuKFFCdWZmZXI6OldyaXRlT25seSk7Ci0gICAgaW1hZ2Uuc2F2ZSgmYnVmZmVyLCAiUE5H
Iik7Ci0gICAgYnVmZmVyLmNsb3NlKCk7Ci0gICAgY29uc3QgUUJ5dGVBcnJheSYgZGF0YSA9IGJ1
ZmZlci5kYXRhKCk7Ci0KLSAgICBwcmludGYoIkNvbnRlbnQtVHlwZTogJXNcbiIsICJpbWFnZS9w
bmciKTsKLSAgICBwcmludGYoIkNvbnRlbnQtTGVuZ3RoOiAlbHVcbiIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmc+KGRhdGEubGVuZ3RoKCkpKTsKLQotICAgIGNvbnN0IHF1aW50MzIgYnl0ZXNU
b1dyaXRlSW5PbmVDaHVuayA9IDEgPDwgMTU7Ci0gICAgcXVpbnQzMiBkYXRhUmVtYWluaW5nVG9X
cml0ZSA9IGRhdGEubGVuZ3RoKCk7Ci0gICAgY29uc3QgY2hhciogcHRyID0gZGF0YS5kYXRhKCk7
Ci0gICAgd2hpbGUgKGRhdGFSZW1haW5pbmdUb1dyaXRlKSB7Ci0gICAgICAgIHF1aW50MzIgYnl0
ZXNUb1dyaXRlSW5UaGlzQ2h1bmsgPSBxTWluKGRhdGFSZW1haW5pbmdUb1dyaXRlLCBieXRlc1Rv
V3JpdGVJbk9uZUNodW5rKTsKLSAgICAgICAgcXVpbnQzMiBieXRlc1dyaXR0ZW4gPSBmd3JpdGUo
cHRyLCAxLCBieXRlc1RvV3JpdGVJblRoaXNDaHVuaywgc3Rkb3V0KTsKLSAgICAgICAgaWYgKGJ5
dGVzV3JpdHRlbiAhPSBieXRlc1RvV3JpdGVJblRoaXNDaHVuaykKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBkYXRhUmVtYWluaW5nVG9Xcml0ZSAtPSBieXRlc1dyaXR0ZW47Ci0gICAgICAg
IHB0ciArPSBieXRlc1dyaXR0ZW47Ci0gICAgfQotCi0gICAgZmZsdXNoKHN0ZG91dCk7Ci19Ci0K
LXZvaWQgVGVzdEludm9jYXRpb246OmR1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKFdL
SW1hZ2VSZWYgaW1hZ2VSZWYsIFdLQXJyYXlSZWYgcmVwYWludFJlY3RzKQotewotICAgIFFJbWFn
ZSBpbWFnZTsKLSAgICBpZiAoUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdEVuYWJsZWQo
KSkgewotICAgICAgICBpbWFnZSA9IFdLSW1hZ2VDcmVhdGVRSW1hZ2UoVGVzdENvbnRyb2xsZXI6
OnNoYXJlZCgpLm1haW5XZWJWaWV3KCktPndpbmRvd1NuYXBzaG90SW1hZ2UoKS5nZXQoKSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIGltYWdlID0gV0tJbWFnZUNyZWF0ZVFJbWFnZShpbWFnZVJlZik7
Ci0KLSAgICBpZiAocmVwYWludFJlY3RzKSB7Ci0gICAgICAgIFFJbWFnZSBtYXNrKGltYWdlLnNp
emUoKSwgaW1hZ2UuZm9ybWF0KCkpOwotICAgICAgICBtYXNrLmZpbGwoUUNvbG9yKDAsIDAsIDAs
IDAuNjYgKiAyNTUpKTsKLQotICAgICAgICBRUGFpbnRlciBtYXNrUGFpbnRlcigmbWFzayk7Ci0g
ICAgICAgIG1hc2tQYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRp
b25Nb2RlX1NvdXJjZSk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHJl
cGFpbnRSZWN0cyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkg
ewotICAgICAgICAgICAgV0tSZWN0IHdrUmVjdCA9IFdLUmVjdEdldFZhbHVlKHN0YXRpY19jYXN0
PFdLUmVjdFJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHJlcGFpbnRSZWN0cywgaSkpKTsKLSAg
ICAgICAgICAgIFFSZWN0RiByZWN0KHdrUmVjdC5vcmlnaW4ueCwgd2tSZWN0Lm9yaWdpbi55LCB3
a1JlY3Quc2l6ZS53aWR0aCwgd2tSZWN0LnNpemUuaGVpZ2h0KTsKLSAgICAgICAgICAgIG1hc2tQ
YWludGVyLmZpbGxSZWN0KHJlY3QsIFF0Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBRUGFpbnRlciBwYWludGVyKCZpbWFnZSk7Ci0gICAgICAgIHBhaW50ZXIuZHJhd0ltYWdl
KGltYWdlLnJlY3QoKSwgbWFzayk7Ci0gICAgfQotCi0gICAgUUNyeXB0b2dyYXBoaWNIYXNoIGhh
c2goUUNyeXB0b2dyYXBoaWNIYXNoOjpNZDUpOwotICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsg
cm93IDwgaW1hZ2UuaGVpZ2h0KCk7ICsrcm93KQotICAgICAgICBoYXNoLmFkZERhdGEocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW1hZ2UuY29uc3RTY2FuTGluZShyb3cpKSwgaW1hZ2Uu
Ynl0ZXNQZXJMaW5lKCkpOwotCi0gICAgUUJ5dGVBcnJheSBhY3R1YWxIYXNoID0gaGFzaC5yZXN1
bHQoKS50b0hleCgpOwotICAgIEFTU0VSVChhY3R1YWxIYXNoLnNpemUoKSA9PSAzMik7Ci0gICAg
aWYgKCFjb21wYXJlQWN0dWFsSGFzaFRvRXhwZWN0ZWRBbmREdW1wUmVzdWx0cyhhY3R1YWxIYXNo
KSkgewotICAgICAgICBpbWFnZS5zZXRUZXh0KCJjaGVja3N1bSIsIGFjdHVhbEhhc2gpOwotICAg
ICAgICBkdW1wSW1hZ2UoaW1hZ2UpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RSCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1dlYktpdFRlc3RSdW5uZXIucXJj
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9XZWJLaXRUZXN0UnVubmVyLnFyYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFkMTYzYWE3YTlmM2MyYzkxY2M3NjIxNzc1YTMwMmE4
YTU0NjZhOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1dlYktpdFRlc3RSdW5uZXIucXJjCisrKyAvZGV2L251
bGwKQEAgLTEsNSArMCwwIEBACi08UkNDPgotICAgIDxxcmVzb3VyY2UgcHJlZml4PSIvIj4KLSAg
ICAgICAgPGZpbGU+cmVzb3VyY2VzL3VzZXIuY3NzPC9maWxlPgotICAgIDwvcXJlc291cmNlPgot
PC9SQ0M+CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3F0L21haW4uY3BwIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9tYWluLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYWMwZWUyNGE1OGE1MjFiYjU1NmU2NzdlYTQzNmQ3OTA3MmQ1ZmZkYi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL3F0L21haW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJRdFRlc3RTdXBwb3J0LmgiCi0jaW5jbHVkZSAi
VGVzdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKLQotI2luY2x1
ZGUgPHN0ZGlvLmg+Ci0jaWYgIWRlZmluZWQoTkRFQlVHKSAmJiBkZWZpbmVkKFFfT1NfVU5JWCkK
LSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotCi0jaW5j
bHVkZSA8UUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFPYmplY3Q+Ci0jaW5jbHVkZSA8UVRpbWVy
PgotCi1jbGFzcyBMYXVuY2hlciA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotCi1w
dWJsaWM6Ci0gICAgTGF1bmNoZXIoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotICAgICAgICA6IG1f
YXJnYyhhcmdjKQotICAgICAgICAsIG1fYXJndihhcmd2KQotICAgIHsKLSAgICB9Ci0KLSAgICB+
TGF1bmNoZXIoKQotICAgIHsKLSAgICAgICAgZGVsZXRlIG1fY29udHJvbGxlcjsKLSAgICB9Ci0K
LXB1YmxpYyBRX1NMT1RTOgotICAgIHZvaWQgbGF1bmNoKCkKLSAgICB7Ci0gICAgICAgIG1fY29u
dHJvbGxlciA9IG5ldyBXVFI6OlRlc3RDb250cm9sbGVyKG1fYXJnYywgY29uc3RfY2FzdDxjb25z
dCBjaGFyKio+KG1fYXJndikpOwotICAgICAgICBRQXBwbGljYXRpb246OmV4aXQoKTsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgV1RSOjpUZXN0Q29udHJvbGxlciogbV9jb250cm9sbGVyOwotICAg
IGludCBtX2FyZ2M7Ci0gICAgY2hhcioqIG1fYXJndjsKLX07Ci0KLSNpZiAhZGVmaW5lZChOREVC
VUcpICYmIGRlZmluZWQoUV9PU19VTklYKQotc3RhdGljIHZvaWQgc2lnY29udEhhbmRsZXIoaW50
KQotewotfQotI2VuZGlmCi0KLXZvaWQgbWVzc2FnZUhhbmRsZXIoUXRNc2dUeXBlIHR5cGUsIGNv
bnN0IFFNZXNzYWdlTG9nQ29udGV4dCYsIGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAg
aWYgKHR5cGUgPT0gUXRDcml0aWNhbE1zZykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVz
XG4iLCBxUHJpbnRhYmxlKG1lc3NhZ2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIERvIG5vdGhpbmcKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewot
I2lmICFkZWZpbmVkKE5ERUJVRykgJiYgZGVmaW5lZChRX09TX1VOSVgpCi0gICAgaWYgKHFnZXRl
bnYoIlFUX1dFQktJVF9QQVVTRV9VSV9QUk9DRVNTIikgPT0gIjEiKSB7Ci0gICAgICAgIHN0cnVj
dCBzaWdhY3Rpb24gbmV3QWN0aW9uLCBvbGRBY3Rpb247Ci0gICAgICAgIG5ld0FjdGlvbi5zYV9o
YW5kbGVyID0gc2lnY29udEhhbmRsZXI7Ci0gICAgICAgIHNpZ2VtcHR5c2V0KCZuZXdBY3Rpb24u
c2FfbWFzayk7Ci0gICAgICAgIG5ld0FjdGlvbi5zYV9mbGFncyA9IDA7Ci0gICAgICAgIHNpZ2Fj
dGlvbihTSUdDT05ULCAmbmV3QWN0aW9uLCAmb2xkQWN0aW9uKTsKLSAgICAgICAgZnByaW50Zihz
dGRlcnIsICJQYXVzaW5nIFVJIHByb2Nlc3MsIHBsZWFzZSBhdHRhY2ggdG8gUElEICVkIGFuZCBz
ZW5kIHNpZ25hbCBTSUdDT05ULi4uICIsIGdldHBpZCgpKTsKLSAgICAgICAgcGF1c2UoKTsKLSAg
ICAgICAgc2lnYWN0aW9uKFNJR0NPTlQsICZvbGRBY3Rpb24sIDApOwotICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIiBPS1xuIik7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBTdXBwcmVzcyBkZWJ1
ZyBvdXRwdXQgZnJvbSBRdCBpZiBub3Qgc3RhcnRlZCB3aXRoIC0tdmVyYm9zZQotICAgIGJvb2wg
c3VwcHJlc3NRdERlYnVnT3V0cHV0ID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gMTsgaSA8IGFy
Z2M7ICsraSkgewotICAgICAgICBpZiAoIXFzdHJjbXAoYXJndltpXSwgIi0tdmVyYm9zZSIpKSB7
Ci0gICAgICAgICAgICBzdXBwcmVzc1F0RGVidWdPdXRwdXQgPSBmYWxzZTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSGFzIHRvIGJlIGRvbmUgYmVmb3Jl
IFFBcHBsaWNhdGlvbiBpcyBjb25zdHJ1Y3RlZCBpbiBjYXNlCi0gICAgLy8gUUFwcGxpY2F0aW9u
IGl0c2VsZiBwcm9kdWNlcyBkZWJ1ZyBvdXRwdXQuCi0gICAgaWYgKHN1cHByZXNzUXREZWJ1Z091
dHB1dCkgewotICAgICAgICBxSW5zdGFsbE1lc3NhZ2VIYW5kbGVyKG1lc3NhZ2VIYW5kbGVyKTsK
LSAgICAgICAgaWYgKHFnZXRlbnYoIlFUX1dFQktJVF9TVVBQUkVTU19XRUJfUFJPQ0VTU19PVVRQ
VVQiKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBxcHV0ZW52KCJRVF9XRUJLSVRfU1VQUFJFU1Nf
V0VCX1BST0NFU1NfT1VUUFVUIiwgIjEiKTsKLSAgICB9Ci0KLSAgICBxcHV0ZW52KCJRVF9XRUJL
SVRfVEhFTUVfTkFNRSIsICJxc3R5bGUiKTsKLQotICAgIFdlYktpdDo6UXRUZXN0U3VwcG9ydDo6
aW5pdGlhbGl6ZVRlc3RGb250cygpOwotICAgIFFDb3JlQXBwbGljYXRpb246OnNldEF0dHJpYnV0
ZShRdDo6QUFfVXNlOTZEcGksIHRydWUpOwotCi0gICAgUUFwcGxpY2F0aW9uIGFwcChhcmdjLCBh
cmd2KTsKLSAgICBMYXVuY2hlciBsYXVuY2hlcihhcmdjLCBhcmd2KTsKLSAgICBRVGltZXI6OnNp
bmdsZVNob3QoMCwgJmxhdW5jaGVyLCBTTE9UKGxhdW5jaCgpKSk7Ci0gICAgcmV0dXJuIGFwcC5l
eGVjKCk7OwotfQotCi0jaW5jbHVkZSAibWFpbi5tb2MiCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL3F0L3Jlc291cmNlcy91c2VyLmNzcyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvcXQvcmVzb3VyY2VzL3VzZXIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
ZjM5ODE5OTViNmEwZTIyYTQzMjkwMDU4NDRkMWJkN2FhNDY0MjM3Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQv
cmVzb3VyY2VzL3VzZXIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1ib2R5IHsK
LSAgICBmb250LXNpemU6IDUwcHg7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1
LCAwKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9x
bWFrZS8ucW1ha2UuY2FjaGUgYi9Ub29scy9xbWFrZS8ucW1ha2UuY2FjaGUKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUz
OTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKZGlmZiAtLWdpdCBh
L1Rvb2xzL3FtYWtlLy5xbWFrZS5jb25mIGIvVG9vbHMvcW1ha2UvLnFtYWtlLmNvbmYKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmMGRjODk3NjBkMDIzYTdhNzVlOGVhYzYxNzk0Njcz
MGRjMjJkMTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
VG9vbHMvcW1ha2UvLnFtYWtlLmNvbmYKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSMg
VGhpcyBmaWxlIGlzIG9ubHkgaGVyZSB0byBpc29sYXRlIHRoZSBjb25maWd1cmUgcHJvamVjdAot
IyBmcm9tIHRoZSByZXN0IG9mIHRoZSB0cmVlLgpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvUkVB
RE1FIGIvVG9vbHMvcW1ha2UvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
ZmMxNmQ4ODcwMmQzZWIxZjZiOGEwMGFkZjQxMGJhOThjMjlkZjUzLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL3FtYWtlL1JFQURNRQorKysgL2Rl
di9udWxsCkBAIC0xLDc4ICswLDAgQEAKLVRoZSBxbWFrZSBidWlsZCBzeXN0ZW0KLT09PT09PT09
PT09PT09PT09PT09PT0KLQotQmFzaWMgc3RydWN0dXJlCi0tLS0tLS0tLS0tLS0tLS0KLQotVGhl
IHFtYWtlIGJ1aWxkIGlzIHNwbGl0IGludG8gdGhyZWUgZGlmZmVyZW50IGZpbGUgdHlwZXM6Ci0K
LSAgICAqIC5wcm8gZmlsZXM6IFRoZXNlIGZpbGVzIHJlcHJlc2VudCB0b3AgbGV2ZWwgdGFyZ2V0
cyB0aGF0IGNhbiBiZQotICAgIGJ1aWx0IGluZGl2aWR1YWxseSwgb3IgYSBjb2xsZWN0aW9uIG9m
IHN1Yi10YXJnZXRzIHVzZWQgZm9yCi0gICAgb3JnYW5pemluZyB0aGUgcHJvamVjdC4KLQotICAg
ICogLnByaSBmaWxlczogVGhlc2UgZmlsZXMgYXJlIGluY2x1ZGVkIGZyb20gdG9wIGxldmVsIHRh
cmdldHMsCi0gICAgYW5kIHJlcHJlc2VudCAnaW1wbGVtZW50YXRpb24gZGV0YWlscycgb2YgaG93
IHRoZSB0YXJnZXQgaXMgYnVpbHQuCi0KLSAgICAqIC5wcmYgZmlsZXM6IFRoZXNlIGZpbGVzIHRh
a2UgY2FyZSBvZiBnZW5lcmljIGJ1aWxkIHJ1bGVzCi0gICAgdGhhdCBhcHBsaWVzIHRvIGFsbCB0
YXJnZXRzLCBvciBzcGVjaWZpYyAnZmVhdHVyZXMnIHRoYXQgY2FuCi0gICAgYmUgbG9hZGVkIG9u
IGRlbWFuZC4KLQotVGhlIGZpcnN0IHR3byBmaWxlIHR5cGVzIGFyZSBzcHJlYWQgdGhyb3VnaG91
dCB0aGUgc291cmNlIHRyZWUsIHdoaWxlCi10aGUgLnByZiBmaWxlcyBhcmUgbG9jYXRlZCBpbiAn
VG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcycgYW5kIHdpbGwKLWdldCBsb2FkZWQgYnkgcW1h
a2UgYmFzZWQgb24gc2V0dGluZyB0aGUgUU1BS0VQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLgot
Ci0KLVJvb3QgcHJvamVjdCBmaWxlCi0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgcm9vdCBwcm9q
ZWN0IGZpbGUgJ1dlYktpdC5wcm8nIGlzIGhhbmR5IGJvdGggZm9yIGxvYWRpbmcgV2ViS2l0Ci1p
biBRdCBDcmVhdG9yLCBhbmQgZm9yIGJ1aWxkaW5nIFF0V2ViS2l0LiBOb3JtYWxseSB5b3Ugd2ls
bCBidWlsZAotdXNpbmcgYnVpbGQtd2Via2l0LCBidXQgeW91IGNhbiBhbHNvIHJ1biBxbWFrZSBk
aXJlY3RseSBvbiB0aGUgcm9vdAotcHJvamVjdCBmaWxlLiBKdXN0IG1ha2Ugc3VyZSB0byBzZXQg
UU1BS0VQQVRIIGZpcnN0LCBzbyB0aGF0IHRoZQotY3VzdG9tIG1rc3BlY3MgYXJlIHBpY2tlZCB1
cC4KLQotRmVhdHVyZSBmaWxlcwotLS0tLS0tLS0tLS0tLQotCi1GZWF0dXJlIGZpbGVzICgucHJm
IGZpbGVzKSBhcmUgdXNlZCBpbiB0aGUgZm9sbG93aW5nIHdheXM6Ci0KLSAgICAxLiBFdmVyeSB0
aW1lIHFtYWtlIHBhcnNlcyBhIHByb2plY3QgZmlsZSwgaXQgd2lsbCBmaXJzdCBsb2FkCi0gICAg
YSBzcGVjaWFsIGZlYXR1cmUgZmlsZSBjYWxsZWQgJ2RlZmF1bHRzX3ByZS5wcmYnLCB0aGVuIHBh
cnNlCi0gICAgdGhlIHByb2plY3QgZmlsZSwgYW5kIHRoZW4gbG9hZCBhbm90aGVyIHNwZWNpYWwg
ZmVhdHVyZSBmaWxlCi0gICAgY2FsbGVkICdkZWZhdWx0c19wb3N0LnByZicuIFdlIHVzZSB0aGVz
ZSBzcGVjaWFsIGZpbGVzIHRvIHNldAotICAgIGRlZmF1bHQgb3B0aW9ucyB0aGF0IGFsbCBwcm9q
ZWN0IGZpbGVzIHVzZSwgZXhwb3NlIGEgZmV3IGhhbmR5Ci0gICAgZnVuY3Rpb25zLCBhbmQgdG8g
cG9zdC1wcm9jZXNzIHRoZSBidWlsZCBjb25maWcgYmFzZWQgb24gd2hhdAotICAgIHRoZSBwcm9q
ZWN0IGZpbGUgZGlkLgotCi0gICAgMi4gRGVwZW5kZW5jaWVzIG9uIG90aGVyIHRhcmdldHMgKGxp
YnJhcmllcykgYXJlIGRlY2xhcmVkIGJ5Ci0gICAgdXNpbmcgQ09ORklHKz1vdGhlcnRhcmdldC4g
VGhpcyB3aWxsIGFkZCB0aGUgY29ycmVjdCBpbmNsdWRlCi0gICAgcGF0aHMgYW5kIGxpbmtlciBv
cHRpb25zIHRvIHVzZSB0aGUgbGlicmFyeS4KLQotICAgIDMuIE9wdGlvbmFsIGZlYXR1cmVzIGNh
biBiZSBlbmFibGVkIGJ5IHBhc3NpbmcgQ09ORklHKz1mb28gb24KLSAgICB0aGUgY29tbWFuZCBs
aW5lIHdoZW4gcnVubmluZyBxbWFrZSBvbiB0aGUgcm9vdCBwcm9qZWN0IGZpbGUsCi0gICAgKG9y
IGJ5IHBhc3NpbmcgLS1tYWtlLWFyZ3M9IkNPTkZJRys9Zm9vIiB0byBidWlsZC13ZWJraXQpLiBG
b3IKLSAgICBleGFtcGxlICdDT05GSUcrPXZhbGdyaW5kJy4KLQotCi1EZXJpdmVkIHNvdXJjZXMK
LS0tLS0tLS0tLS0tLS0tLQotCi1Tb21lIHRhcmdldHMgKEphdmFTY3JpcHRDb3JlLCBXZWJDb3Jl
LCBldGMpIHJlbHkgb24gZ2VuZXJhdGVkIGZpbGVzLAotKGFrYS4gZGVyaXZlZCBzb3VyY2VzKS4g
VGhlc2UgbXVzdCBiZSBnZW5lcmF0ZWQgYmVmb3JlIHRoZSByZWFsIHRhcmdldAotaXMgYnVpbHQu
IFRoaXMgaXMgYWNoaWV2ZWQgYnkgc3BsaXR0aW5nIHRoZSB0YXJnZXQgdXAgaW50byB0d28gc3Vi
LQotcHJvamVjdHMsIG9uZSBmb3IgdGhlIGRlcml2ZWQgc291cmNlcyBhbmQgb25lIGZvciB0aGUg
cmVhbCB0YXJnZXQsCi1hbmQgdGVsbGluZyBxbWFrZSB0byBidWlsZCB0aGVtIGluIG9yZGVyIHVz
aW5nIENPTkZJRyArPSBvcmRlcmVkLgotCi0KLVRoZSBXRUJLSVQgdmFyaWFibGUKLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotVGhlIGN1c3RvbSBxbWFrZSB2YXJpYWJsZSAnV0VCS0lUJyBpcyB1c2Vk
IGZvciBzaWduYWxpbmcgdGhhdCBhCi10YXJnZXQgZGVwZW5kcyBpbiBzb21lIHdheSBvbiBvdGhl
ciBzdWJwcm9qZWN0IG9mIHRoZSBXZWJLaXQKLXByb2plY3QuIEZvciBub3cgdGhpcyBpcyBsaW1p
dGVkIHRvIHRoZSBzZXQgb2YgaW50ZXJtZWRpYXRlCi1saWJyYXJpZXM6IHd0ZiwgamF2YXNjcmlw
dGNvcmUsIHdlYmNvcmUsIGFuZCB3ZWJraXQyLgotCi1BZGRpbmcgYSBkZXBlbmRlbmN5IHJlc3Vs
dHMgaW4gYWRkaXRpb25hbCBpbmNsdWRlIHBhdGhzIGJlaW5nCi1hdmFpbGFibGUsIGFuZCBwb3Rl
bnRpYWxseSBsaW5raW5nIHRvIHRoZSBsaWJyYXJ5LiBUaGlzIGlzCi1kZWNpZGVkIGJ5IHRoZSBi
dWlsZCBzeXN0ZW0gYmFzZWQgb24gY29uZGl0aW9ucyBzdWNoIGFzIHdoYXQKLWtpbmQgb2YgdGFy
Z2V0IGlzIGJlaW5nIGJ1aWx0IGFuZCB0aGUgZ2VuZXJhbCBidWlsZCBjb25maWcuCmRpZmYgLS1n
aXQgYS9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvUkVBRE1FIGIvVG9vbHMvcW1ha2UvY29uZmln
LnRlc3RzL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEzNzA4ODU2YjJj
ZjM1MTFhNGM0NzMzY2Y1ZjIwMWU2ODFlNmE2ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvUkVBRE1FCisrKyAv
ZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1UaGlzIGRpcmVjdG9yeSBpcyB1c2VkIGZvciBjb25m
aWd1cmUtc3R5bGUgY2hlY2tzIHRoYXQgYXJlIHJ1biBieQotc3luY3F0IGR1cmluZyBwcm9jZXNz
aW5nIG9mIGNvbmZpZ3VyZS5wcm8gaW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCi0KLU5vdGU6IFRo
aXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gUXQgNSBvbmx5LgpkaWZmIC0tZ2l0IGEvVG9vbHMv
cW1ha2UvY29uZmlnLnRlc3RzL2ZvbnRjb25maWcvZm9udGNvbmZpZy5jcHAgYi9Ub29scy9xbWFr
ZS9jb25maWcudGVzdHMvZm9udGNvbmZpZy9mb250Y29uZmlnLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMmQ0M2VkMTQ5ZDBmMWVmYWZmOWRhMzQzNTgxMjE1NjI3NTY3Y2UxYy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9xbWFr
ZS9jb25maWcudGVzdHMvZm9udGNvbmZpZy9mb250Y29uZmlnLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBT
emVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+Ci0KLWludCBtYWluKGludCwgY2hhcioqKQotewot
ICAgIEZjSW5pdCgpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2Zv
bnRjb25maWcvZm9udGNvbmZpZy5wcm8gYi9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvZm9udGNv
bmZpZy9mb250Y29uZmlnLnBybwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMwNmZk
MWU4MTI1NWNlZWI5ZjkxZjBkNTJkODRiN2NiMDRlY2M3MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvZm9udGNv
bmZpZy9mb250Y29uZmlnLnBybworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotQ09ORklH
IC09IHF0Ci1TT1VSQ0VTID0gZm9udGNvbmZpZy5jcHAKLUNPTkZJRyArPSBsaW5rX3BrZ2NvbmZp
ZwotUEtHQ09ORklHICs9IGZvbnRjb25maWcKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL2NvbmZp
Zy50ZXN0cy9nY2NkZXBlbmRzL2VtcHR5LmNwcCBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9n
Y2NkZXBlbmRzL2VtcHR5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUy
OWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMApkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3Rz
L2djY2RlcGVuZHMvZ2NjZGVwZW5kcy5wcm8gYi9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvZ2Nj
ZGVwZW5kcy9nY2NkZXBlbmRzLnBybwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Qw
YTgxYTMyZmNkYzg2ZjZmYjViODg3ZWNmYzY5MzFmOWJjNDVkNi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvZ2Nj
ZGVwZW5kcy9nY2NkZXBlbmRzLnBybworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLVRF
TVBMQVRFID0gYXV4Ci1PQkpFQ1RTX0RJUiA9IG9iagotUU1BS0VfQ1hYRkxBR1MgKz0gLU1ECi0K
LWJhc2VfZmlsZW5hbWUgPSBlbXB0eQotb2JqZWN0X2ZpbGUgPSAkJE9CSkVDVFNfRElSLyQke2Jh
c2VfZmlsZW5hbWV9Lm8KLWRlcHNfZmlsZW5hbWUgPSAkJHtiYXNlX2ZpbGVuYW1lfS5kCi0KLVNP
VVJDRVMgKz0gJCR7YmFzZV9maWxlbmFtZX0uY3BwCi0KLXRlc3QuY29tbWFuZHMgPSBcCi0gICAg
IyBFYXJsaWVyIHRlYW1idWlsZGVyIGFuZCBpY2VjcmVhbSB2ZXJzaW9ucyB3b3VsZCBub3QKLSAg
ICAjIHJlc3BlY3QgdGhlIC1vIGFyZ3VtZW50IGZvciB0aGUgLmQgZmlsZSwgc28gdGhlIGZpbGUK
LSAgICAjIHdvdWxkIGVuZCB1cCBpbiB0aGUgcm9vdCBidWlsZCBkaXIuCi0gICAgdGVzdCAhIC1m
ICQke2RlcHNfZmlsZW5hbWV9ICYmIFwKLSAgICBcCi0gICAgIyBCdXQgaXQgc2hvdWxkIGVuZCB1
cCBpbiB0aGUgT0JKRUNUU19ESVIKLSAgICB0ZXN0IC1mICQkT0JKRUNUU19ESVIvJCR7ZGVwc19m
aWxlbmFtZX0gJiYgXAotICAgIFwKLSAgICAjIEljZWNyZWFtIDAuOS43IGFuZCBlYXJsaWVyIGRv
ZXMgbm90IGVuc3VyZSB0aGF0IHRoZQotICAgICMgdGFyZ2V0IHJ1bGUgbWF0Y2hlcyB0aGUgcGF0
aCBvZiB0aGUgLm8gZmlsZSwgc2luY2UKLSAgICAjIHRoZSBmaWxlIGlzIGNvbXBpbGVkIGludG8g
dGhlIGN1cnJlbnQgZGlyIGFuZCB0aGVuCi0gICAgIyBtb3ZlZC4gVmVyaWZ5IHRoYXQgd2UgZG9u
J3QgaGl0IHRoYXQgY2FzZS4KLSAgICBncmVwIC1xIFwiJCR7b2JqZWN0X2ZpbGV9OlwiICQkT0JK
RUNUU19ESVIvJCR7ZGVwc19maWxlbmFtZX0gJiYgXAotICAgIFwKLSAgICAjIElmIGV2ZXJ5dGhp
bmcgaXMgYWxsIHJpZ2h0IHdlIG1hcmsgdGhlIHRlc3QgYXMgc3VjY2VlZGVkCi0gICAgZWNobyBz
dWNjZXNzID4gJCRiYXNlbmFtZShQV0QpCi0KLXRlc3QuZGVwZW5kcyA9ICQke29iamVjdF9maWxl
fQotUU1BS0VfRVhUUkFfVEFSR0VUUyArPSB0ZXN0Ci0KLWRlZmF1bHQudGFyZ2V0ID0gYWxsCi1k
ZWZhdWx0LmRlcGVuZHMgKz0gdGVzdAotUU1BS0VfRVhUUkFfVEFSR0VUUyArPSBkZWZhdWx0CmRp
ZmYgLS1naXQgYS9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvZ2x4L2dseC5jcHAgYi9Ub29scy9x
bWFrZS9jb25maWcudGVzdHMvZ2x4L2dseC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDlkY2ZkMTc4Yzk1NzUzYTQ0Njg0ZmEyZWM4ZTdjODJlOTRmNjA2ZWEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvcW1ha2UvY29uZmlnLnRl
c3RzL2dseC9nbHguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxHTC9nbHguaD4KLQotaW50IG1h
aW4oaW50LCBjaGFyKiopCi17Ci0gICAgRGlzcGxheSogZGlzcGxheSA9IFhPcGVuRGlzcGxheSgw
KTsKLSAgICBpbnQgaXRlbXMgPSAwOwotICAgICh2b2lkKWdsWENob29zZUZCQ29uZmlnKGRpc3Bs
YXksIERlZmF1bHRTY3JlZW4oZGlzcGxheSksIDAsICZpdGVtcyk7Ci0gICAgWENsb3NlRGlzcGxh
eShkaXNwbGF5KTsKLQotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2Uv
Y29uZmlnLnRlc3RzL2dseC9nbHgucHJvIGIvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2dseC9n
bHgucHJvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTgxMDAwNDMzZTljMzBkNGU5
MDMzNzRmMDU5NTE1ZjU0ZDVmMTIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9nbHgvZ2x4LnBybworKysgL2Rl
di9udWxsCkBAIC0xLDQgKzAsMCBAQAotU09VUkNFUyA9IGdseC5jcHAKLU9CSkVDVFNfRElSID0g
b2JqCi1MSUJTICs9IC1sWDExIC1sR0wKLQpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvY29uZmln
LnRlc3RzL2dudWxkL2dudWxkLnBybyBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9nbnVsZC9n
bnVsZC5wcm8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMzlmMTNlMTgzMjZjYzE2
YmRkNjhhZjU0NDYxZjE0MTM3NzQ0YjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2dudWxkL2dudWxkLnBybwor
KysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotVEVNUExBVEUgPSBhcHAKLVRBUkdFVCA9IGdu
dWxkCi1TT1VSQ0VTID0gbWFpbi5jcHAKLVFNQUtFX0xGTEFHUyArPSAtV2wsLS1uby1rZWVwLW1l
bW9yeQpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2dudWxkL21haW4uY3Bw
IGIvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2dudWxkL21haW4uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzMWExMzM3MjZjY2VhZDlmOGE5OGZiMzQ2NTFkNTA4NTJjYTAwMTNh
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL3Ft
YWtlL2NvbmZpZy50ZXN0cy9nbnVsZC9tYWluLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAs
MCBAQAotCi1pbnQgbWFpbigpCi17Ci0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9Ub29s
cy9xbWFrZS9jb25maWcudGVzdHMvbGliWGNvbXBvc2l0ZS9saWJYY29tcG9zaXRlLmNwcCBiL1Rv
b2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJYY29tcG9zaXRlL2xpYlhjb21wb3NpdGUuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGUxMDU0YmRiYjJlZjU4YjQ0NTcxNTFlYjA5
NTk4ODlhMWEzNDFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJYY29tcG9zaXRlL2xpYlhjb21wb3NpdGUu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+Ci0K
LWludCBtYWluKGludCwgY2hhcioqKQotewotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBYT3BlbkRp
c3BsYXkoMCk7Ci0gICAgaW50IG1ham9yVmVyc2lvbjsKLSAgICBpbnQgbWlub3JWZXJzaW9uOwot
ICAgICh2b2lkKVhDb21wb3NpdGVRdWVyeVZlcnNpb24oZGlzcGxheSwgJm1ham9yVmVyc2lvbiwg
Jm1pbm9yVmVyc2lvbik7Ci0gICAgWENsb3NlRGlzcGxheShkaXNwbGF5KTsKLSAgICByZXR1cm4g
MDsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJYY29tcG9zaXRl
L2xpYlhjb21wb3NpdGUucHJvIGIvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2xpYlhjb21wb3Np
dGUvbGliWGNvbXBvc2l0ZS5wcm8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YzVj
MjkzNzk0N2FmNjU1ZTlmMDA0ZGExYTg2ZTYxMzQyNTEzM2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2xpYlhj
b21wb3NpdGUvbGliWGNvbXBvc2l0ZS5wcm8KKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAK
LVNPVVJDRVMgPSBsaWJYY29tcG9zaXRlLmNwcAotT0JKRUNUU19ESVIgPSBvYmoKLUxJQlMgKz0g
LWxYY29tcG9zaXRlIC1sWDExCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9jb25maWcudGVzdHMv
bGliWHJlbmRlci9saWJYcmVuZGVyLmNwcCBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJY
cmVuZGVyL2xpYlhyZW5kZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTI0
NTViZDJjMjUwMGQ4NmRmNTUzZTUyMDhkODQ1NWIzMzM3MzM1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJY
cmVuZGVyL2xpYlhyZW5kZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9u
cy9YcmVuZGVyLmg+Ci0KLWludCBtYWluKGludCwgY2hhcioqKQotewotICAgIERpc3BsYXkqIGRp
c3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7Ci0gICAgaW50IGV2ZW50QmFzZXA7Ci0gICAgaW50IGVy
cm9yQmFzZXA7Ci0gICAgaWYgKCFYUmVuZGVyUXVlcnlFeHRlbnNpb24oZGlzcGxheSwgJmV2ZW50
QmFzZXAsICZlcnJvckJhc2VwKSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiAwOwot
fQotCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvbGliWHJlbmRlci9saWJY
cmVuZGVyLnBybyBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJYcmVuZGVyL2xpYlhyZW5k
ZXIucHJvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2NiMWU0YjVjNGJmZDMzNzQ1
ZWVjMzIzYWZjNmY5Mzg3NmQ3Yjc5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJYcmVuZGVyL2xpYlhyZW5k
ZXIucHJvCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1TT1VSQ0VTID0gbGliWHJlbmRl
ci5jcHAKLU9CSkVDVFNfRElSID0gb2JqCi1MSUJTICs9IC1sWHJlbmRlciAtbFgxMQpkaWZmIC0t
Z2l0IGEvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2xpYndlYnAvbGlid2VicC5jcHAgYi9Ub29s
cy9xbWFrZS9jb25maWcudGVzdHMvbGlid2VicC9saWJ3ZWJwLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOTc0NjAzZDNiMjg3YmJkOWM2MmRhYzQ0YTcyOWE0MTFhMGM1YjllOC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9xbWFr
ZS9jb25maWcudGVzdHMvbGlid2VicC9saWJ3ZWJwLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFpvbHRhbiBIb3J2YXRoICh6b2x0YW5Ad2Vi
a2l0Lm9yZykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJ3ZWJwL2RlY29kZS5oIgotCi1pbnQgbWFpbihpbnQsIGNoYXIqKikKLXsKLSAg
ICBXZWJQRGVjb2RlckNvbmZpZyBjb25maWc7Ci0gICAgV2ViUEluaXREZWNvZGVyQ29uZmlnKCZj
b25maWcpOwotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvY29uZmln
LnRlc3RzL2xpYndlYnAvbGlid2VicC5wcm8gYi9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvbGli
d2VicC9saWJ3ZWJwLnBybwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI1NzI1Mjcw
ZmViM2VhZWE0ZTFkNDNhMTE2YmYzMmY0NTAwZmU1MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvbGlid2VicC9s
aWJ3ZWJwLnBybworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotU09VUkNFUyA9IGxpYndl
YnAuY3BwCi1PQkpFQ1RTX0RJUiA9IG9iagotTElCUyArPSAtbHdlYnAKZGlmZiAtLWdpdCBhL1Rv
b2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJ4bWwyL2xpYnhtbDIuY3BwIGIvVG9vbHMvcW1ha2Uv
Y29uZmlnLnRlc3RzL2xpYnhtbDIvbGlieG1sMi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDIxMTdiNWI0MTQ2ZTQ0YTkwZjVkNzMyOGY4MGQzY2UxYTJmYzQ0MzMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvcW1ha2UvY29uZmln
LnRlc3RzL2xpYnhtbDIvbGlieG1sMi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGxpYnhtbC94bWxy
ZWFkZXIuaD4KLQotaW50IG1haW4oaW50LCBjaGFyKiopCi17Ci0gICAgeG1sVGV4dFJlYWRlclNl
dHVwKDAsIDAsIDAsIDAsIDApOwotICAgIHJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9Ub29s
cy9xbWFrZS9jb25maWcudGVzdHMvbGlieG1sMi9saWJ4bWwyLnBybyBiL1Rvb2xzL3FtYWtlL2Nv
bmZpZy50ZXN0cy9saWJ4bWwyL2xpYnhtbDIucHJvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiZDcyOTQ0ZjBmODg5OGIwNTA5M2U5YWQ1OGM4NjAwMDExZmEzYjI2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL3FtYWtlL2NvbmZpZy50
ZXN0cy9saWJ4bWwyL2xpYnhtbDIucHJvCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1D
T05GSUcgLT0gcXQKLVNPVVJDRVMgPSBsaWJ4bWwyLmNwcAotbWFjIHsKLSAgICBJTkNMVURFUEFU
SCArPSAvdXNyL2luY2x1ZGUvbGlieG1sMgotICAgIExJQlMgKz0gLWx4bWwyCi19IGVsc2Ugewot
ICAgIFBLR0NPTkZJRyArPSBsaWJ4bWwtMi4wCi0gICAgQ09ORklHICs9IGxpbmtfcGtnY29uZmln
Ci19CmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvbGlieHNsdC9saWJ4c2x0
LmNwcCBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJ4c2x0L2xpYnhzbHQuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWRlZGIzNzRkNzg0Mzg5ZjRhMzQ1NWRlMjgzYmEx
MzJlNmQzZDA0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJ4c2x0L2xpYnhzbHQuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5
IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlIDxsaWJ4c2x0L3hzbHR1dGlscy5oPgotCi1pbnQgbWFpbihpbnQsIGNoYXIqKikKLXsK
LSAgICB4c2xBZGRDYWxsKDAsIDApOwotICAgIHJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9U
b29scy9xbWFrZS9jb25maWcudGVzdHMvbGlieHNsdC9saWJ4c2x0LnBybyBiL1Rvb2xzL3FtYWtl
L2NvbmZpZy50ZXN0cy9saWJ4c2x0L2xpYnhzbHQucHJvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAxOTQzNDg1ZDAwYWE4ODMzNGQ0NTBjMmUyMDEzOThjOWU0N2UyNzEyLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL3FtYWtlL2NvbmZp
Zy50ZXN0cy9saWJ4c2x0L2xpYnhzbHQucHJvCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBA
Ci1DT05GSUcgLT0gcXQKLVNPVVJDRVMgPSBsaWJ4c2x0LmNwcAotbWFjIHsKLSAgICBJTkNMVURF
UEFUSCArPSAvdXNyL2luY2x1ZGUvbGlieHNsdCAvdXNyL2luY2x1ZGUvbGlieG1sMgotICAgIExJ
QlMgKz0gLWx4c2x0Ci19IGVsc2UgewotICAgIFBLR0NPTkZJRyArPSBsaWJ4c2x0Ci0gICAgQ09O
RklHICs9IGxpbmtfcGtnY29uZmlnCi19CmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9jb25maWcu
dGVzdHMvbGliemxpYi9saWJ6bGliLmNwcCBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJ6
bGliL2xpYnpsaWIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmVhYjU3ZGM1
NTcwZmJlNmU5ZGM4MzYxOWZjYzZiNWU3NGM5MjE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJ6bGliL2xp
YnpsaWIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDx6bGliLmg+Ci0KLWludCBtYWluKGludCwg
Y2hhcioqKQotewotICAgICh2b2lkKXpsaWJWZXJzaW9uKCk7Ci0gICAgcmV0dXJuIDA7Ci19CmRp
ZmYgLS1naXQgYS9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvbGliemxpYi9saWJ6bGliLnBybyBi
L1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJ6bGliL2xpYnpsaWIucHJvCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4MTZhNDU1YzRlNTJiNGQ3OTQyNDQ5YTc4MTM0MjUyODhiYjdh
NWE2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xz
L3FtYWtlL2NvbmZpZy50ZXN0cy9saWJ6bGliL2xpYnpsaWIucHJvCisrKyAvZGV2L251bGwKQEAg
LTEsMyArMCwwIEBACi1TT1VSQ0VTID0gbGliemxpYi5jcHAKLU9CSkVDVFNfRElSID0gb2JqCi1M
SUJTICs9IC1segpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvZHVtcC1mZWF0dXJlcy5wbCBiL1Rv
b2xzL3FtYWtlL2R1bXAtZmVhdHVyZXMucGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGYwMjY0MzBmMGI0NGE0ZTdkNDkzZTRjNDRmOWMyYzRmZmJlNjA5ZGYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvcW1ha2UvZHVtcC1mZWF0dXJl
cy5wbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLSMhL3Vzci9iaW4vcGVybCAtdwot
Ci11c2Ugc3RyaWN0OwotdXNlIHdhcm5pbmdzOwotCi11c2UgRmVhdHVyZUxpc3Q7Ci0KLWZvcmVh
Y2ggbXkgJGZlYXR1cmUgKGdldEZlYXR1cmVPcHRpb25MaXN0KCkpCi17Ci0gICAgbmV4dCBpZiAk
ZmVhdHVyZS0+eydvcHRpb24nfSBlcSAnc3lzdGVtLW1hbGxvYyc7Ci0KLSAgICBteSAkZGVzYyA9
ICRmZWF0dXJlLT57J2Rlc2MnfTsKLSAgICAkZGVzYyA9fiBzL15Ub2dnbGVccy8vOwotICAgICRk
ZXNjID1+IHMvXHNzdXBwb3J0JC8vOwotICAgICRkZXNjID0gdWNmaXJzdCgkZGVzYyk7Ci0KLSAg
ICAkZGVzYyAuPSAnICcgLiAnLicgeCAoMzAgLSBsZW5ndGgoJGRlc2MpKTsKLSAgICAkZGVzYyA9
fiBzL1xzL18vZzsKLQotICAgIG15ICRkZWZpbmUgPSAkZmVhdHVyZS0+eydkZWZpbmUnfTsKLSAg
ICAkZGVmaW5lID1+IHMvXkVOQUJMRV8vLzsKLSAgICAkZGVmaW5lID0gbGMoJGRlZmluZSk7Ci0K
LSAgICAkZGVzYyAuPSAiPSRkZWZpbmUiOwotCi0gICAgcHJpbnQgIiRkZXNjICIKLX0KZGlmZiAt
LWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvY29uZmlndXJlLnByZiBiL1Rvb2xz
L3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvY29uZmlndXJlLnByZgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZjI5NWY0NjQxMjhmZWM3YzIwZDAzZGFkMmRlNWE3NDUyNWFjNDI4ZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9xbWFrZS9t
a3NwZWNzL2ZlYXR1cmVzL2NvbmZpZ3VyZS5wcmYKKysrIC9kZXYvbnVsbApAQCAtMSwyNzIgKzAs
MCBAQAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRoaXMgZmlsZSBkb2VzIGJhc2ljICdjb25maWd1cmUnIHN0
eWxlIGNoZWNrcyB0byBkZXRlcm1pbmUgdGhlCi0jIHNldCBvZiBlbmFibGUvdXNlL2hhdmUgZGVm
aW5lcyBhbmQgdGhlaXIgdmFsdWVzLgotIwotIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9y
IGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0ZW0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jIFRoaXMg
ZmlsZSBpcyByZWFkIGFmdGVyIC5xbWFrZS5jYWNoZSwgYnV0IGJlZm9yZSBjb21tYW5kIGxpbmUg
b3B0aW9ucywKLSMgd2hpY2ggbWVhbnMgd2UgbWlnaHQgaGF2ZSBhIGNvbmZpZyBmcm9tIGEgcHJl
dmlvdXMgYnVpbGQuCi0KLWxvYWQoZmVhdHVyZXMpCi1sb2FkKGNvbmZpZ3VyZSkKLQotV0VCS0lU
X1RPT0xTX0NPTkZJRyA9IFwKLSAgICBidWlsZF9kcnQgXAotICAgIGJ1aWxkX3d0ciBcCi0gICAg
YnVpbGRfaW1hZ2VkaWZmIFwKLSAgICBidWlsZF90ZXN0X25wYXBpIFwKLSAgICBidWlsZF90ZXN0
YnJvd3NlciBcCi0gICAgYnVpbGRfbWluaWJyb3dzZXIgXAotICAgIGJ1aWxkX3F0dGVzdHN1cHBv
cnQKLQotZGVmaW5lVGVzdChydW5Db25maWd1cmUpIHsKLSAgICAhd2Via2l0X2NvbmZpZ3VyZWQ6
IXByaW50X2RlZmF1bHRzIHsKLSAgICAgICAgbG9nKCQke0VPTH1SdW5uaW5nIGNvbmZpZ3VyZSB0
ZXN0cy4uLiQke0VPTH0kJHtFT0x9KQotICAgICAgICBRTUFLRV9DT05GSUdfVEVTVFNfRElSID0g
JCRST09UX1dFQktJVF9ESVIvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzCi0gICAgICAgIENPTkZJ
R19URVNUUyA9ICQkZmlsZXMoJCRRTUFLRV9DT05GSUdfVEVTVFNfRElSLyoucHJvLCB0cnVlKQot
ICAgICAgICBmb3IodGVzdCwgQ09ORklHX1RFU1RTKSB7Ci0gICAgICAgICAgICB0ZXN0ID0gJCRi
YXNlbmFtZSh0ZXN0KQotICAgICAgICAgICAgdGVzdCB+PSBzL1xcLnBybyQvLwotICAgICAgICAg
ICAgcXRDb21waWxlVGVzdCgkJHRlc3QpCi0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBDT05GSUcgKz0gc2tpcHBlZF9jb25maWdfdGVzdHMKLQotICAgICAgICAjIFNhdmUgYW5kIHJl
c2V0IGNvbmZpZ3VyYXRpb24gZnJvbSAucW1ha2UuY2FjaGUsIHNvIHRoYXQgd2UgY2FuCi0gICAg
ICAgICMgZGV0ZWN0IGNoYW5nZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGFib3J0IHRoZSBi
dWlsZC4KLSAgICAgICAgUFJFVklPVVNfV0VCS0lUX0NPTkZJRyA9ICQkV0VCS0lUX0NPTkZJRwot
ICAgICAgICB1bnNldChXRUJLSVRfQ09ORklHKQotICAgICAgICBleHBvcnQoUFJFVklPVVNfV0VC
S0lUX0NPTkZJRykKLSAgICB9Ci0KLSAgICAjIFJ1bm5pbmcgZmVhdHVyZSBkZXRlY3Rpb24gaW5z
aWRlIGEgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHdlIG9ubHkKLSAgICAjIGV4cG9ydCBXRUJLSVRf
Q09ORklHLCBhbmQgZG9uIG5vdCBtZXNzIHVwIGFueSBvdGhlciB2YXJpYWJsZXMuCi0gICAgZGV0
ZWN0RmVhdHVyZXMoKQotCi0gICAgIyBTZXQgdXAgYSBiYXNlIGxpc3Qgb2Ygb3B0aW9uYWwgdGhp
bmdzIHRvIGJ1aWxkLCB3aGljaCB3ZSBsYXRlciBvbgotICAgICMgc2FuaXRpemUgYmFzZWQgb24g
Y29uc3RyYWludHMgb2YgdGhlIHBsYXRmb3JtLgotCi0gICAgV0VCS0lUX0NPTkZJRyArPSBcCi0g
ICAgICAgIGJ1aWxkX3dlYmtpdDEgXAotICAgICAgICBidWlsZF93ZWJraXQyIFwKLSAgICAgICAg
YnVpbGRfdGVzdHMgXAotICAgICAgICAkJFdFQktJVF9UT09MU19DT05GSUcKLQotICAgICMgU2Fu
YXRpemUgV2ViS2l0MS9XZWJLaXQyLCBhcyBXZWJLaXQucHJvIHVzZXMgdGhlc2UgdHdvIG9wdGlv
bnMKLSAgICAjIHRvIGRldGVybWluZSB3aGljaCBwcm8tZmlsZXMgdG8gaW5jbHVkZS4gVGhlIHJl
bWFpbmluZyBzYW5pdGF6aW9uCi0gICAgIyBpcyBkb25lIHdoZW4gZmluYWxpemluZyBjb25maWd1
cmUuCi0KLSAgICAhcXRIYXZlTW9kdWxlKHdpZGdldHMpIHsKLSAgICAgICAgQ09ORklHVVJFX1dB
Uk5JTkdTICs9ICJNaXNzaW5nIFF0V2lkZ2V0cyBtb2R1bGUsIGRpc2FibGluZyBXZWJLaXQxIgot
ICAgICAgICBXRUJLSVRfQ09ORklHIC09IGJ1aWxkX3dlYmtpdDEKLSAgICB9Ci0KLSAgICAjIFdl
YktpdDIgcmVxdWlyZXMgT3BlbkdMIFRleHR1cmVNYXBwZXIsIHdoaWNoIHJlcXVpcmVzIDNEIEdy
YXBoaWNzCi0gICAgIXVzZT8oM2RfZ3JhcGhpY3MpOiBXRUJLSVRfQ09ORklHIC09IGJ1aWxkX3dl
YmtpdDIKLQotICAgIGV4cG9ydChDT05GSUcpCi0gICAgZXhwb3J0KFdFQktJVF9DT05GSUcpCi0g
ICAgZXhwb3J0KENPTkZJR1VSRV9XQVJOSU5HUykKLX0KLQotZGVmaW5lUmVwbGFjZShjb25maWdF
bmFibGVkKSB7Ci0gICAgdHJ1ZVZhbHVlID0gJCQyCi0gICAgaXNFbXB0eSh0cnVlVmFsdWUpOiB0
cnVlVmFsdWUgPSB5ZXMKLQotICAgIGZhbHNlVmFsdWUgPSAkJDMKLSAgICBpc0VtcHR5KGZhbHNl
VmFsdWUpOiBmYWxzZVZhbHVlID0gbm8KLQotICAgICQkMTogcmV0dXJuKCQkdHJ1ZVZhbHVlKQot
ICAgIHJldHVybigkJGZhbHNlVmFsdWUpCi19Ci0KLSMgVGhpcyBpcyBjYWxsZWQgZnJvbSBkZWZh
dWx0X3Bvc3QsIGF0IHdoaWNoIHBvaW50IHdlJ3ZlIGFsc28gcGFyc2VkCi0jIGNvbW1hbmQgbGlu
ZSBvcHRpb25zCi1kZWZpbmVUZXN0KGZpbmFsaXplQ29uZmlndXJlKSB7Ci0KLSAgICAjIFNhbml0
aXplIGNsYXNoaW5nIG9wdGlvbnMKLSAgICBzYW50aXplRmVhdHVyZXMoKQotCi0gICAgIyBTYW5p
dGl6ZSBidWlsZCBvcHRpb25zCi0gICAgIXF0SGF2ZU1vZHVsZSh0ZXN0bGliKSB7Ci0gICAgICAg
IENPTkZJR1VSRV9XQVJOSU5HUyArPSAiTWlzc2luZyBRdFRlc3QgbW9kdWxlLCBkaXNhYmxpbmcg
RHVtcFJlbmRlclRyZWUsIFdlYktpdFRlc3RSdW5uZXIgYW5kIHRlc3RzIgotICAgICAgICBXRUJL
SVRfQ09ORklHIC09IGJ1aWxkX2RydCBidWlsZF93dHIgYnVpbGRfdGVzdHMKLSAgICB9Ci0KLSAg
ICB3aW4zMnwhZW5hYmxlPyhORVRTQ0FQRV9QTFVHSU5fQVBJKTogV0VCS0lUX0NPTkZJRyAtPSBi
dWlsZF90ZXN0X25wYXBpCi0KLSAgICB3aW4qIHsKLSAgICAgICAgV0VCS0lUX0NPTkZJRyAtPSBi
dWlsZF9kcnQKLSAgICB9Ci0KLSAgICBwcm9kdWN0aW9uX2J1aWxkIHsKLSAgICAgICAgV0VCS0lU
X0NPTkZJRyAtPSAkJFdFQktJVF9UT09MU19DT05GSUcgYnVpbGRfdGVzdHMKLSAgICB9Ci0KLSAg
ICBwcmludF9kZWZhdWx0cyB7Ci0gICAgICAgIGxvZyhERUZJTkVTOiAkJGNvbmZpZ0RlZmluZXMo
KSQke0VPTH0pCi0gICAgICAgIGVycm9yKERvbmUgY29tcHV0aW5nIGRlZmF1bHRzKQotICAgIH0K
LQotICAgICMgU2FuaXR5IGNoZWNrcyB0aGF0IHdvdWxkIHByZXZlbnQgdXMgZnJvbSBidWlsZGlu
ZyB0aGUgd2hvbGUgcHJvamVjdCBhbHRvZ2V0aGVyLgotICAgICFtYWM6IWNvbnRhaW5zKFFUX0NP
TkZJRyxpY3UpIHsKLSAgICAgICAgYWRkUmVhc29uRm9yU2tpcHBpbmdCdWlsZCgiSUNVIGlzIHJl
cXVpcmVkLiBUbyBidWlsZCBRdFdlYktpdCB3aXRoIFF0IDUgeW91IG5lZWQgdG8gYnVpbGQgUXQg
NSB3aXRoIGxpYklDVSBzdXBwb3J0LiBDaGVjayBmb3IgSUNVIHN1cHBvcnQgYmVpbmcgbWVudGlv
bmVkIGluIHF0YmFzZS9jb25maWcuc3VtbWFyeS4iKQotICAgIH0KLSAgICBwcm9kdWN0aW9uX2J1
aWxkOmJsYWNrYmVycnkgewotICAgICAgICBhZGRSZWFzb25Gb3JTa2lwcGluZ0J1aWxkKCJCdWls
ZCBub3Qgc3VwcG9ydGVkIG9uIEJCMTAgeWV0LiIpCi0gICAgfQotICAgIHJlcXVpcmVkUHJvZ3Jh
bXMgPSBncGVyZiBweXRob24gcGVybCBiaXNvbiBydWJ5IGZsZXgKLSAgICBmb3IocHJvZ3JhbSwg
cmVxdWlyZWRQcm9ncmFtcyk6IFwKLSAgICAgICAgIXByb2dyYW1FeGlzdHNJblBhdGgoJCRwcm9n
cmFtKTogXAotICAgICAgICAgICAgYWRkUmVhc29uRm9yU2tpcHBpbmdCdWlsZCgiTWlzc2luZyAk
JHByb2dyYW0gZnJvbSBQQVRIIikKLQotICAgICMgRGV0ZWN0IGNoYW5nZXMgdG8gdGhlIGNvbmZp
Z3VyYXRpb24uIENoYW5nZXMgbmVlZCBhIGNsZWFuIGJ1aWxkLgotICAgIHdlYmtpdF9jb25maWd1
cmVkIHsKLSAgICAgICAgYWRkZWRfZmVhdHVyZXMgPSAkJFdFQktJVF9DT05GSUcKLSAgICAgICAg
YWRkZWRfZmVhdHVyZXMgLT0gJCRQUkVWSU9VU19XRUJLSVRfQ09ORklHCi0KLSAgICAgICAgcmVt
b3ZlZF9mZWF0dXJlcyA9ICQkUFJFVklPVVNfV0VCS0lUX0NPTkZJRwotICAgICAgICByZW1vdmVk
X2ZlYXR1cmVzIC09ICQkV0VCS0lUX0NPTkZJRwotCi0gICAgICAgICFpc0VtcHR5KGFkZGVkX2Zl
YXR1cmVzKXwhaXNFbXB0eShyZW1vdmVkX2ZlYXR1cmVzKSB7Ci0gICAgICAgICAgICBDT05GSUcg
Kz0gY29uZmlndXJhdGlvbl9jaGFuZ2VkCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZWNvbmZp
Z3VyZU1zZyA9IFwKLSAgICAgICAgIlJlY29uZmlndXJhdGlvbiBsaWtlbHkgcmVxdWlyZXMgYSBj
bGVhbiBidWlsZC4gWW91JCR7UVVPVEV9dmUgYmVlbiB3YXJuZWQhIiBcCi0gICAgICAgICJZb3Ug
bWF5IGV4ZWN1dGUgJCR7UVVPVEV9bWFrZSB3aXBlY2xlYW4kJHtRVU9URX0gdG8gd2lwZSB0aGUg
YnVpbGQgZGlyZWN0b3J5LiIKLQotICAgICMgQWRkIHRhcmdldCBmb3IgcmVjb25maWd1cmluZyB0
aGUgYnVpbGQKLSAgICByZWNvbmZpZ3VyZS50YXJnZXQgPSByZWNvbmZpZ3VyZQotICAgIGRvdWJs
ZV9xdW90ZSA9ICQkZXNjYXBlX2V4cGFuZChcIikKLSAgICByZWNvbmZpZ3VyZS5jb21tYW5kcyA9
IGVjaG8gPiAucW1ha2UuY2FjaGUgJiYgJChNQUtFKSAtZiAkKE1BS0VGSUxFKSBxbWFrZSAkJEVP
QwotICAgIHJlY29uZmlndXJlLmNvbW1hbmRzICs9IEBlY2hvICQke2RvdWJsZV9xdW90ZX1XQVJO
SU5HOiAkJGpvaW4ocmVjb25maWd1cmVNc2csXFxuLCwpXFxuJCR7ZG91YmxlX3F1b3RlfQotICAg
IFFNQUtFX0VYVFJBX1RBUkdFVFMgKz0gcmVjb25maWd1cmUKLSAgICBleHBvcnQocmVjb25maWd1
cmUudGFyZ2V0KQotICAgIGV4cG9ydChyZWNvbmZpZ3VyZS5jb21tYW5kcykKLSAgICBleHBvcnQo
UU1BS0VfRVhUUkFfVEFSR0VUUykKLQotICAgICMgQWRkIHRhcmdldCBmb3Igd2lwaW5nIGNsZWFu
IHRoZSBidWlsZAotICAgIHdpcGVjbGVhbi50YXJnZXQgPSB3aXBlY2xlYW4KLSAgICB3aW5fY21k
X3NoZWxsOiB3aXBlY2xlYW4uY29tbWFuZHMgPSBGT1IgL0QgJSVwIElOICgqKSBETyBybWRpciAi
JSVwIiAvcyAvcQotICAgIGVsc2U6IHdpcGVjbGVhbi5jb21tYW5kcyA9ICQoQ09QWV9GSUxFKSAk
KE1BS0VGSUxFKSAuJChNQUtFRklMRSkgJiYgcm0gLVJmICogJiYgJChNT1ZFKSAuJChNQUtFRklM
RSkgJChNQUtFRklMRSkKLSAgICBRTUFLRV9FWFRSQV9UQVJHRVRTICs9IHdpcGVjbGVhbgotICAg
IGV4cG9ydCh3aXBlY2xlYW4udGFyZ2V0KQotICAgIGV4cG9ydCh3aXBlY2xlYW4uY29tbWFuZHMp
Ci0gICAgZXhwb3J0KFFNQUtFX0VYVFJBX1RBUkdFVFMpCi0KLSAgICAjIFByaW50IGEgcHJldHRp
ZmllZCBkdW1wIG9mIHRoZSBjb25maWd1cmF0aW9uLCBmb3IgZWFzaWVyIGRlYnVnZ2luZwotICAg
ICF3ZWJraXRfY29uZmlndXJlZHxjb25maWd1cmF0aW9uX2NoYW5nZWR8YnVpbGRib3QgewotCi0g
ICAgICAgIHNraXBwZWRfY29uZmlnX3Rlc3RzIHsKLSAgICAgICAgICAgIGxvZygkJHtFT0x9U2tp
cHBpbmcgY29uZmlndXJlIHRlc3RzLiBFeGVjdXRlICQke1FVT1RFfW1ha2UgcmVjb25maWd1cmUk
JHtRVU9URX0gdG8gcmUtcnVuLiQke0VPTH0pCi0gICAgICAgIH0KLQotICAgICAgICBsZWZ0b3Zl
ckNvbmZpZyA9ICQkV0VCS0lUX0NPTkZJRwotCi0gICAgICAgIGZvcihjb25maWcsIFdFQktJVF9D
T05GSUcpIHsKLSAgICAgICAgICAgIG1hdGNoID0gJCRmaW5kKGNvbmZpZywgIl5idWlsZF8iKQot
ICAgICAgICAgICAgIWlzRW1wdHkobWF0Y2gpIHsKLSAgICAgICAgICAgICAgICBidWlsZCArPSAk
JHJlcGxhY2UobWF0Y2gsIF5idWlsZF8sKQotICAgICAgICAgICAgICAgIGxlZnRvdmVyQ29uZmln
IC09ICQkY29uZmlnCi0gICAgICAgICAgICAgICAgbmV4dCgpCi0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBtYXRjaCA9ICQkZmluZChjb25maWcsICJeaGF2ZV8iKQotICAgICAgICAgICAgIWlz
RW1wdHkobWF0Y2gpIHsKLSAgICAgICAgICAgICAgICBoYXZlICs9ICQkcmVwbGFjZShtYXRjaCwg
XmhhdmVfLCkKLSAgICAgICAgICAgICAgICBsZWZ0b3ZlckNvbmZpZyAtPSAkJGNvbmZpZwotICAg
ICAgICAgICAgICAgIG5leHQoKQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWF0Y2ggPSAk
JGZpbmQoY29uZmlnLCAiXnVzZV8iKQotICAgICAgICAgICAgIWlzRW1wdHkobWF0Y2gpIHsKLSAg
ICAgICAgICAgICAgICB1c2UgKz0gJCRyZXBsYWNlKG1hdGNoLCBedXNlXywpCi0gICAgICAgICAg
ICAgICAgbGVmdG92ZXJDb25maWcgLT0gJCRjb25maWcKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIHNjcmlwdHNfZGlyID0gJCR0b1N5c3RlbVBhdGgoJCRST09UX1dFQktJVF9E
SVIvVG9vbHMvU2NyaXB0cykKLSAgICAgICAgZmVhdHVyZXMgPSAkJHN5c3RlbShwZXJsIC1JICQk
e3NjcmlwdHNfZGlyfSAtSSAkJHtzY3JpcHRzX2Rpcn0kJHtRTUFLRV9ESVJfU0VQfXdlYmtpdHBl
cmwgJCR0b1N5c3RlbVBhdGgoJCRST09UX1dFQktJVF9ESVIvVG9vbHMvcW1ha2UvZHVtcC1mZWF0
dXJlcy5wbCkpCi0gICAgICAgIGZvcihmZWF0dXJlLCBmZWF0dXJlcykgewotICAgICAgICAgICAg
cGFydHMgPSAkJHNwbGl0KGZlYXR1cmUsID0pCi0gICAgICAgICAgICBkZXNjID0gJCRtZW1iZXIo
cGFydHMsIDAsIDApCi0gICAgICAgICAgICBkZXNjIH49IHMvXy8gLwotICAgICAgICAgICAgdmFs
dWUgPSAkJG1lbWJlcihwYXJ0cywgMSwgMSkKLQotICAgICAgICAgICAgY29udGFpbnMoV0VCS0lU
X0NPTkZJRywgJCR2YWx1ZSkgewotICAgICAgICAgICAgICAgIGxlZnRvdmVyQ29uZmlnIC09ICQk
dmFsdWUKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHllcwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICB2YWx1ZSA9IG5vCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZlYXR1cmVDb25maWd1cmF0aW9uICs9ICIkJGRlc2MgJCR2YWx1ZSQke0VPTH0iCi0gICAgICAg
IH0KLQotICAgICAgICBsb2coJCR7RU9MfUZpbmFsIGNvbmZpZ3VyYXRpb246JCR7RU9MfSQke0VP
TH0pCi0KLSAgICAgICAgZGVidWc6IGJ1aWxkQ29uZmlnICs9IGRlYnVnCi0gICAgICAgIHJlbGVh
c2U6IGJ1aWxkQ29uZmlnICs9IHJlbGVhc2UKLSAgICAgICAgYnVpbGRDb25maWcgPSAkJGpvaW4o
YnVpbGRDb25maWcsLywsKQotICAgICAgICBkZWJ1ZzpyZWxlYXNlOmRlYnVnX2FuZF9yZWxlYXNl
OmJ1aWxkQ29uZmlnICs9IChjb21iaW5lZCkKLQotICAgICAgICBsb2coQnVpbGQgLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLiAkJGJ1aWxkJCR7RU9MfSkKLSAgICAgICAgbG9nKENvbmZpZ3VyYXRp
b24gLi4uLi4uLi4uLi4uLi4uLi4gJCRidWlsZENvbmZpZyQke0VPTH0pCi0gICAgICAgIGxvZyhB
bGwtaW4tb25lIGZpbGVzIC4uLi4uLi4uLi4uLi4uICQkY29uZmlnRW5hYmxlZCh1c2VfYWxsX2lu
X29uZV9maWxlcykkJEVPTCkKLSAgICAgICAgbG9nKEdOVW1ha2UgLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4gJCRjb25maWdFbmFibGVkKEdOVW1ha2UpJCRFT0wpCi0gICAgICAgIGxvZyhTdGF0aWMg
bGlicyBhcyBzaGFyZWQgLi4uLi4uLi4uICQkY29uZmlnRW5hYmxlZChmb3JjZV9zdGF0aWNfbGli
c19hc19zaGFyZWQpJCRFT0wpCi0gICAgICAgIGxvZyhTdGF0aWMgbGlicyBhcyB0aGluIGFyY2hp
dmVzIC4uICQkY29uZmlnRW5hYmxlZChnbnVfdGhpbl9hcmNoaXZlcykkJEVPTCkKLSAgICAgICAg
bG9nKFByb2R1Y3Rpb24gYnVpbGQgLi4uLi4uLi4uLi4uLi4gJCRjb25maWdFbmFibGVkKHByb2R1
Y3Rpb25fYnVpbGQpJCRFT0wpCi0gICAgICAgIGxvZygkJEVPTCkKLQotICAgICAgICBsb2coSGF2
ZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAkJGhhdmUkJHtFT0x9KQotICAgICAgICBsb2co
VXNlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAkJHVzZSQke0VPTH0pCi0gICAgICAgIGxv
ZyhGZWF0dXJlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uICQke2xlZnRvdmVyQ29uZmlnfSQke0VP
TH0pCi0gICAgICAgIGxvZygkJEVPTCkKLQotICAgICAgICBmb3IoZmVhdHVyZSwgZmVhdHVyZUNv
bmZpZ3VyYXRpb24pIHsKLSAgICAgICAgICAgIGxvZygkJGZlYXR1cmUpCi0gICAgICAgIH0KLQot
ICAgICAgICAhaXNFbXB0eShDT05GSUdVUkVfV0FSTklOR1MpIHsKLSAgICAgICAgICAgIGxvZygi
JCR7RU9MfUVuY291bnRlcmVkICQkc2l6ZShDT05GSUdVUkVfV0FSTklOR1MpIGNvbmZpZ3VyYXRp
b24gd2FybmluZyhzKTokJHtFT0x9JCR7RU9MfSIpCi0gICAgICAgICAgICBmb3Iod2FybiwgQ09O
RklHVVJFX1dBUk5JTkdTKSB7Ci0gICAgICAgICAgICAgICAgbG9nKCIgISAkJHdhcm4kJHtFT0x9
IikKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgICFpc0VtcHR5KHNraXBCdWls
ZFJlYXNvbikgewotICAgICAgICAgICAgbG9nKCIkJHtFT0x9VGhlIFdlYktpdCBidWlsZCB3YXMg
ZGlzYWJsZWQgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uczogJCRza2lwQnVpbGRSZWFzb24gJCR7
RU9MfSQke0VPTH0iKQotICAgICAgICAgICAgU1VCRElSUz0KLSAgICAgICAgICAgIGV4cG9ydChT
VUJESVJTKQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbG9nKCIkJHtFT0x9V2ViS2l0
IGlzIG5vdyBjb25maWd1cmVkIGZvciBidWlsZGluZy4gSnVzdCBydW4gJ21ha2UnLiQke0VPTH0k
JHtFT0x9IikKLSAgICAgICAgfQotCi0gICAgICAgIGNvbmZpZ3VyYXRpb25fY2hhbmdlZCB7Ci0g
ICAgICAgICAgICBsb2coV0FSTklORzogVGhlIGNvbmZpZ3VyYXRpb24gd2FzIGNoYW5nZWQgc2lu
Y2UgdGhlIGxhc3QgYnVpbGQ6JCR7RU9MfSQke0VPTH0pCi0KLSAgICAgICAgICAgICFpc0VtcHR5
KGFkZGVkX2ZlYXR1cmVzKTogbG9nKCQke1RBQn1BZGRlZCBmZWF0dXJlKHMpOiAkJHthZGRlZF9m
ZWF0dXJlc30kJHtFT0x9KQotICAgICAgICAgICAgIWlzRW1wdHkocmVtb3ZlZF9mZWF0dXJlcyk6
IGxvZygkJHtUQUJ9UmVtb3ZlZCBmZWF0dXJlKHMpOiAkJHtyZW1vdmVkX2ZlYXR1cmVzfSQke0VP
TH0pCi0KLSAgICAgICAgICAgIGxvZygkJGpvaW4ocmVjb25maWd1cmVNc2csJCR7RU9MfSwkJHtF
T0x9LCQke0VPTH0kJHtFT0x9KSkKLSAgICAgICAgfQotICAgIH0KLQotICAgICMgQ2FjaGUgdGhl
IHJlc3VsdCBmb3IgYWxsIHRoZSBvdGhlciBwcm9qZWN0IGZpbGVzLCBhbmQgZm9yCi0gICAgIyB0
aGUgbmV4dCBidWlsZCwgc28gd2UgY2FuIGRldGVjdCBjaGFuZ2VzIHRvIHRoZSBjb25maWcuCi0g
ICAgIXdlYmtpdF9jb25maWd1cmVkfGNvbmZpZ3VyYXRpb25fY2hhbmdlZCB7Ci0gICAgICAgICFj
b25maWd1cmF0aW9uX2NoYW5nZWQ6IGNhY2hlKENPTkZJRywgYWRkLCAkJGxpc3Qod2Via2l0X2Nv
bmZpZ3VyZWQpKQotCi0gICAgICAgIG1zZyA9ICIkJHtFT0x9JCR7TElURVJBTF9IQVNIfSBDb25m
aWd1cmF0aW9uIGNoYW5nZWQgJCRfREFURV8iCi0gICAgICAgIHdyaXRlX2ZpbGUoJCRfUU1BS0Vf
Q0FDSEVfLCBtc2csIGFwcGVuZCkKLQotICAgICAgICAhY29uZmlndXJhdGlvbl9jaGFuZ2VkIHsK
LSAgICAgICAgICAgIGNhY2hlKFdFQktJVF9DT05GSUcsIHNldCwgV0VCS0lUX0NPTkZJRykKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICFpc0VtcHR5KGFkZGVkX2ZlYXR1cmVzKTogY2Fj
aGUoV0VCS0lUX0NPTkZJRywgYWRkLCBhZGRlZF9mZWF0dXJlcykKLSAgICAgICAgICAgICFpc0Vt
cHR5KHJlbW92ZWRfZmVhdHVyZXMpOiBjYWNoZShXRUJLSVRfQ09ORklHLCBzdWIsIHJlbW92ZWRf
ZmVhdHVyZXMpCi0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9t
a3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRfcG9zdC5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2Zl
YXR1cmVzL2RlZmF1bHRfcG9zdC5wcmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5
MmFhYTcwZGQzM2NkODMzN2I2Y2I1ODM4OWUxNDAwZTMzMmMwZGQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJl
cy9kZWZhdWx0X3Bvc3QucHJmCisrKyAvZGV2L251bGwKQEAgLTEsMzE4ICswLDAgQEAKLSMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotIyBRdFdlYktpdCBkZWZhdWx0cyBmb3IgcW1ha2UuIFRoZXNlIHJ1bGVzIGFyZSBw
YXJzZWQgYWZ0ZXIgdGhlCi0jIGFjdHVhbCBwcm9qZWN0IGZpbGUuCi0jCi0jIFNlZSAnVG9vbHMv
cW1ha2UvUkVBRE1FJyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHN5c3RlbQotIyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLSMgRmxhZyB0aGF0IHdlJ3JlIG5vdyBkb25lIHByb2Nlc3NpbmcgdGhlIHByb2pl
Y3QgZmlsZS4gVGhpcyBhbGxvd3MKLSMgYSBmZWF0dXJlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4g
YmVpbmcgcHJvY2Vzc2VkIGR1ZSB0byBhIGxvYWQoKQotIyBvciBpbmNsdWRlKCkgYW5kIGEgQ09O
RklHICs9IGZlYXR1cmUuCi1DT05GSUcgKz0gY29uZmlnX3N0ZXAKLQotIyBFbmFibGUgZHluYW1p
YyBpbnN0ZWFkIG9mIHN0YXRpYyBsaWJyYXJpZXMgZm9yIGRldmVsb3BtZW50Ci0jIEF2b2lkIGl0
IHdpdGggZGVidWdfYW5kX3JlbGVhc2UsIGl0IGNhbiBjYXVzZSB0aGUgYXBwbGljYXRpb24gdG8g
bG9hZCBib3RoIHRoZSBkZWJ1ZyBhbmQgcmVsZWFzZQotIyBkZXBlbmRlbnQgbGlicmFyaWVzIHdo
ZW4gdXNpbmcgZnJhbWV3b3JrcyBvbiBNYWMuCi0hcHJvZHVjdGlvbl9idWlsZDohZGVidWdfYW5k
X3JlbGVhc2U6IWJ1aWxkYm90OiF3aW4qOiBDT05GSUcgKz0gZm9yY2Vfc3RhdGljX2xpYnNfYXNf
c2hhcmVkCi0KLSMgRG9uJ3QgY3JlYXRlIC5wcmwgZmlsZXMgZm9yIGludGVybWVkaWF0ZSBsaWJy
YXJpZXMgYmVjYXVzZSB0aGVpciBjb250ZW50cyBnZXQgdXNlZCB3aGVuIGxpbmtpbmcgYWdhaW5z
dAotIyB0aGVtLCBicmVha2luZyAiLVdsLC13aG9sZS1hcmNoaXZlIC1sTXlJbnRlcm1lZGlhdGVM
aWIgLS1XbCwtbm8td2hvbGUtYXJjaGl2ZSIKLXN0YXRpY2xpYjogQ09ORklHIC09IGNyZWF0ZV9w
cmwKLQotcm9vdF9wcm9qZWN0X2ZpbGU6IGZpbmFsaXplQ29uZmlndXJlKCkKLQotIyBTYW5pdGl6
ZSBidWlsZCBjb25maWcgZm9yIHNpbmdsZS1jb25maWd1cmF0aW9uIGJ1aWxkcwotIWRlYnVnfCFy
ZWxlYXNlIHsKLSAgICAjIFJlbW92aW5nIGRlYnVnX2FuZF9yZWxlYXNlIGNhdXNlcyBpc3N1ZXMg
d2l0aCBsaWIgc3VmZml4ZXMgd2hlbiBidWlsZGluZyBkZWJ1ZyBvbiBXaW5kb3dzLgotICAgICMg
V29yayBhcm91bmQgaXQgYnkgb25seSByZW1vdmluZyBidWlsZF9hbGwsIGFuZCBzdGlsbCBjcmVh
dGUgdGhlIE1ha2VmaWxlcyBmb3IgYm90aCBjb25maWd1cmF0aW9ucy4KLSAgICB3aW4zMio6IENP
TkZJRyAtPSBidWlsZF9hbGwKLSAgICBlbHNlOiB7Ci0gICAgICAgIENPTkZJRyAtPSBkZWJ1Z19h
bmRfcmVsZWFzZQotICAgICAgICAjIERlZmF1bHQgdG8gcmVsZWFzZQotICAgICAgICAhZGVidWc6
IXJlbGVhc2U6IENPTkZJRyArPSByZWxlYXNlCi0gICAgfQotfSBlbHNlOmRlYnVnX2FuZF9yZWxl
YXNlIHsKLSAgICAjIE9ubHkgYnVpbGQgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgZWFjaCBhcHBsaWNh
dGlvbgotICAgIGNvbnRhaW5zKFRFTVBMQVRFLCBhcHApOiFmb3JjZV9idWlsZF9hbGwgewotICAg
ICAgICBDT05GSUcgLT0gYnVpbGRfYWxsCi0gICAgfQotfQotCi0jIEdlbmVyYWwgZGVmYXVsdCBi
dWlsZCB0d2Vha3MKLURFRklORVMgKz0gXAotICAgIEJVSUxESU5HX1FUX189MQotCi1DT05GSUco
cmVsZWFzZSwgZGVidWd8cmVsZWFzZSk6IERFRklORVMgKj0gTkRFQlVHCi0KLURFRklORVMgKz0g
JCRjb25maWdEZWZpbmVzKCkKLQotSU5DTFVERVBBVEggKz0gXAotICAgICQke1JPT1RfV0VCS0lU
X0RJUn0vU291cmNlIFwKLSAgICAkJHtST09UX0JVSUxEX0RJUn0vU291cmNlL2luY2x1ZGUgXAot
ICAgICQke1FULnNjcmlwdC5pbmNsdWRlc30KLQotQ09ORklHIC09IHdhcm5fb24KLQotIWNvbXBp
bGluZ190aGlyZHBhcnR5X2NvZGU6Ki1nKysqOiBRTUFLRV9DWFhGTEFHUyA9IFwKLSAgICAtV2Fs
bCBcCi0gICAgLVdleHRyYSBcCi0gICAgLVdyZXR1cm4tdHlwZSBcCi0gICAgLWZuby1zdHJpY3Qt
YWxpYXNpbmcgXAotICAgIC1XY2hhci1zdWJzY3JpcHRzIFwKLSAgICAtV2Zvcm1hdC1zZWN1cml0
eSBcCi0gICAgLVdyZXR1cm4tdHlwZSBcCi0gICAgLVduby11bnVzZWQtcGFyYW1ldGVyIFwKLSAg
ICAtV25vLXNpZ24tY29tcGFyZSBcCi0gICAgLVduby1zd2l0Y2ggXAotICAgIC1Xbm8tc3dpdGNo
LWVudW0gXAotICAgIC1XdW5kZWYgXAotICAgIC1XbWlzc2luZy1ub3JldHVybiBcCi0gICAgLVdp
bml0LXNlbGYgXAotICAgICQkUU1BS0VfQ1hYRkxBR1MKLQotIyBUZW1wbGF0ZSBjb25maWd1cmF0
aW9ucwotY29udGFpbnMoVEVNUExBVEUsIGRlcml2ZWQpIHsKLSAgICAjIEEgKG1vc3RseSkgbm8t
b3AgdGVtcGxhdGUKLSAgICBURU1QTEFURSA9IGF1eAotCi0gICAgIyBUcmljayBxbWFrZSBpbnRv
IG5vdCBnZW5lcmF0aW5nIGEgZGVmYXVsdCAkKERFTF9GSUxFKSBydWxlCi0gICAgQ09ORklHICs9
IGNvbXBpbGVfbGlidG9vbAotCi0gICAgQ09ORklHIC09IGRlYnVnX2FuZF9yZWxlYXNlCi0KLSAg
ICBmYWtlX2RlYnVnLnRhcmdldCA9IGRlYnVnCi0gICAgZmFrZV9kZWJ1Zy5kZXBlbmRzID0gZmly
c3QKLSAgICBRTUFLRV9FWFRSQV9UQVJHRVRTICs9IGZha2VfZGVidWcKLSAgICBmYWtlX3JlbGVh
c2UudGFyZ2V0ID0gcmVsZWFzZQotICAgIGZha2VfcmVsZWFzZS5kZXBlbmRzID0gZmlyc3QKLSAg
ICBRTUFLRV9FWFRSQV9UQVJHRVRTICs9IGZha2VfcmVsZWFzZQotCi0gICAgIyBBIGxvdCBvZiBv
dXIgY29kZSBnZW5lcmF0b3JzIHJlcXVpcmUgR05VIHRvb2xzLCByZWFkaWx5IGF2YWlsYWJsZQot
ICAgICMgb24gTGludXggYW5kIE1hYyBPUyBYLiBPbiBXaW5kb3dzIHdlIGRvIGhhdmUgYSBjb252
ZW5pZW5jZSBjb3B5IGluCi0gICAgIyBRdDUncyB0b3AtbGV2ZWwgcmVwb3NpdG9yeSwgc28gbGV0
J3MgYWRkIHRoYXQgdG8gdGhlIFBBVEggaWYgd2UgY2FuCi0gICAgIyBmaW5kIGl0LgotICAgIHdp
bjMyIHsKLSAgICAgICAgR05VVE9PTFNfRElSPSQkW1FUX0hPU1RfREFUQV0vLi4vZ251d2luMzIv
YmluCi0gICAgICAgIGV4aXN0cygkJEdOVVRPT0xTX0RJUi9ncGVyZi5leGUpIHsKLSAgICAgICAg
ICAgIEdOVVRPT0xTID0gIihzZXQgJCRlc2NhcGVfZXhwYW5kKFxcXCIpUEFUSD0kJHRvU3lzdGVt
UGF0aCgkJEdOVVRPT0xTX0RJUik7JVBBVEglJCRlc2NhcGVfZXhwYW5kKFxcXCIpKSIKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGZvcihnZW5lcmF0b3IsIEdFTkVSQVRPUlMpIHsKLSAgICAgICAg
ZXZhbCgkJHtnZW5lcmF0b3J9LkNPTkZJRyA9IHRhcmdldF9wcmVkZXBzIG5vX2xpbmspCi0gICAg
ICAgIGV2YWwoJCR7Z2VuZXJhdG9yfS5kZXBlbmRlbmN5X3R5cGUgPSBUWVBFX0MpCi0KLSAgICAg
ICAgaXNFbXB0eSgkJHtnZW5lcmF0b3J9Lm91dHB1dF9mdW5jdGlvbikgewotICAgICAgICAgICAg
cHJlcGVuZEVhY2goJCR7Z2VuZXJhdG9yfS5vdXRwdXQsICQke0dFTkVSQVRFRF9TT1VSQ0VTX0RF
U1RESVJ9LykKLSAgICAgICAgfQotCi0gICAgICAgIHNjcmlwdCA9ICQkZXZhbCgkJHtnZW5lcmF0
b3J9LnNjcmlwdCkKLSAgICAgICAgZXZhbCgkJHtnZW5lcmF0b3J9LmRlcGVuZHMgKz0gJCRzY3Jp
cHQpCi0KLSAgICAgICAgY29tbWFuZHMgPSAkJGV2YWwoJCR7Z2VuZXJhdG9yfS5jb21tYW5kcykK
LSAgICAgICAgIWlzRW1wdHkoY29tbWFuZHMpOiFpc0VtcHR5KEdOVVRPT0xTKSB7Ci0gICAgICAg
ICAgICBldmFsKCQke2dlbmVyYXRvcn0uY29tbWFuZHMgPSAkJHtHTlVUT09MU30gJiYgJCR2YWxf
ZXNjYXBlKCQke2dlbmVyYXRvcn0uY29tbWFuZHMpKQotICAgICAgICB9Ci0KLSAgICAgICAgIWlz
RW1wdHkoJCR7Z2VuZXJhdG9yfS5pbnB1dCkgewotICAgICAgICAgICAgIyBDb21waWxlci1zdHls
ZSBnZW5lcmF0b3IKLSAgICAgICAgICAgIFFNQUtFX0VYVFJBX0NPTVBJTEVSUyArPSAkJGdlbmVy
YXRvcgotICAgICAgICAgICAgREVGQVVMVF9UQVJHRVRTICs9IGNvbXBpbGVyXyQke2dlbmVyYXRv
cn1fbWFrZV9hbGwKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICMgUmVndWxhciB0YXJn
ZXQgZ2VuZXJhdG9yCi0gICAgICAgICAgICBRTUFLRV9FWFRSQV9UQVJHRVRTICs9ICQkZ2VuZXJh
dG9yCi0gICAgICAgICAgICBERUZBVUxUX1RBUkdFVFMgKz0gJCRnZW5lcmF0b3IKLSAgICAgICAg
fQotICAgIH0KLX0gZWxzZSB7Ci0gICAgIyBNYWtlIHN1cmUgdGhlIGdlbmVyYXRlZCBzb3VyY2Vz
IGFyZSBjb21waWxlZCBhcyB3ZWxsCi0gICAgZm9yKGdlbmVyYXRvciwgR0VORVJBVE9SUykgewot
ICAgICAgICBwcmVwZW5kRWFjaCgkJHtnZW5lcmF0b3J9LmV4dHJhX3NvdXJjZXMsICQke0dFTkVS
QVRFRF9TT1VSQ0VTX0RFU1RESVJ9LykKLSAgICAgICAgU09VUkNFUyArPSAkJGV2YWwoJCR7Z2Vu
ZXJhdG9yfS5leHRyYV9zb3VyY2VzKQotCi0gICAgICAgIGlzRXF1YWwoJCR7Z2VuZXJhdG9yfS5h
ZGRfb3V0cHV0X3RvX3NvdXJjZXMsIGZhbHNlKTogbmV4dCgpCi0KLSAgICAgICAgb3V0cHV0ID0g
JCRldmFsKCQke2dlbmVyYXRvcn0ub3V0cHV0KQotICAgICAgICBpbnB1dCA9ICQkZXZhbCgkJHtn
ZW5lcmF0b3J9LmlucHV0KQotICAgICAgICBpbnB1dF9maWxlcyA9ICQkZXZhbCgkJGlucHV0KQot
ICAgICAgICBvdXRwdXRfdmFyaWFibGUgPSAkJGV2YWwoJCR7Z2VuZXJhdG9yfS52YXJpYWJsZV9v
dXQpCi0gICAgICAgIGlzRW1wdHkob3V0cHV0X3ZhcmlhYmxlKTogb3V0cHV0X3ZhcmlhYmxlID0g
U09VUkNFUwotCi0gICAgICAgIGlzRW1wdHkoJCR7Z2VuZXJhdG9yfS5vdXRwdXRfZnVuY3Rpb24p
IHsKLSAgICAgICAgICAgIHByZXBlbmRFYWNoKG91dHB1dCwgJCR7R0VORVJBVEVEX1NPVVJDRVNf
REVTVERJUn0vKQotCi0gICAgICAgICAgICBmb3IoaW5wdXRfZmlsZSwgaW5wdXRfZmlsZXMpIHsK
LSAgICAgICAgICAgICAgICBiYXNlID0gJCRiYXNlbmFtZShpbnB1dF9maWxlKQotICAgICAgICAg
ICAgICAgIGJhc2Ugfj0gcy9cXC4uKy8vCi0gICAgICAgICAgICAgICAgb3V0cHV0X2ZpbGUgPSAk
JHJlcGxhY2Uob3V0cHV0LFxcJFxce1FNQUtFX0ZJTEVfQkFTRVxcfSwgJCRiYXNlKQotCi0gICAg
ICAgICAgICAgICAgZXZhbCgkJG91dHB1dF92YXJpYWJsZSArPSAkJG91dHB1dF9maWxlKQotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZnVuY3Rpb24gPSAkJGV2
YWwoJCR7Z2VuZXJhdG9yfS5vdXRwdXRfZnVuY3Rpb24pCi0gICAgICAgICAgICBmb3IoaW5wdXRf
ZmlsZSwgaW5wdXRfZmlsZXMpIHsKLSAgICAgICAgICAgICAgICBldmFsKG91dHB1dF9maWxlID0g
XCRcJCQkZnVuY3Rpb25cKCQkaW5wdXRfZmlsZVwpKQotICAgICAgICAgICAgICAgIGV2YWwoJCRv
dXRwdXRfdmFyaWFibGUgKz0gJCRvdXRwdXRfZmlsZSkKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLX0KLQotY29udGFpbnMoUVQsIHdlYmtpdCl8Y29udGFpbnMoUVQsIHdlYmtpdHdp
ZGdldHMpIHsKLSAgICAjIEluIGFkZGl0aW9uIHRvIHRoZSBtYWluIHNoYXJlZCBRdFdlYktpdCBs
aWJyYXJ5IHdlIGFsc28KLSAgICAjIG5lZWQgdG8gbGluayB0byBhbnkgaW50ZXJtZWRpYXRlIHNo
YXJlZCBsaWJyYXJpZXMuCi0gICAgZm9yY2Vfc3RhdGljX2xpYnNfYXNfc2hhcmVkIHsKLSAgICAg
ICAgV0VCS0lUICs9IHd0ZiBqYXZhc2NyaXB0Y29yZSB3ZWJjb3JlCi0gICAgICAgIGJ1aWxkPyh3
ZWJraXQxKTogV0VCS0lUICs9IHdlYmtpdDEKLSAgICAgICAgYnVpbGQ/KHdlYmtpdDIpOiBXRUJL
SVQgKz0gd2Via2l0MgotICAgIH0KLQotICAgICMgRklYTUU6IFJlcGxhY2UgdGhpcyB3aXRoIHB1
dHRpbmcgdGhlIGludGVybWVkaWF0ZSBsaWJyYXJpZXMgaW4gdGhlIHBybCBmaWxlCi19Ci0KLWRl
ZmluZVRlc3QobmVlZFRvTGluaykgewotICAgICMgVGhlIG1haW4gZHluYW1pYyBsaWJyYXJ5IGFs
d2F5cyBuZWVkcyB0byBsaW5rIGluIHRoZSBpbnRlcm1lZGlhdGUgbGlicmFyaWVzCi0gICAgY3Jl
YXRpbmdfbW9kdWxlOiByZXR1cm4odHJ1ZSkKLQotICAgIGZvcmNlX3N0YXRpY19saWJzX2FzX3No
YXJlZCB7Ci0gICAgICAgICMgU28gZG8gdGhlIGluZGl2aWR1YWwgbGlicmFyaWVzIGlmIHRoZXkg
YXJlIGR5bmFtaWMKLSAgICAgICAgY29udGFpbnMobGlicmFyaWVzLCAkJFRBUkdFVCk6IHJldHVy
bih0cnVlKQotCi0gICAgICAgICMgT3IgYW55dGhpbmcgdGhhdCB1c2VzIFF0V2ViS2l0IGluIHRo
aXMgc3BlY2lhbCBjb25maWcKLSAgICAgICAgY29udGFpbnMoUVQsIHdlYmtpdCk6IHJldHVybih0
cnVlKQotICAgIH0KLQotICAgICMgTGFzdGx5LCB3ZSBhbGxvdyBhcHBzIChqc2MpIHRvIGxpbmsg
ZGlyZWN0bHkgdG8gdGhlIGludGVybWVkaWF0ZQotICAgICMgbGlicmFyaWVzIGludGVhZCBvZiB1
c2luZyB0aGUgZXhwb3J0ZWQgc3ltYm9scyBmcm9tIFF0V2ViS2l0LgotICAgIGNvbnRhaW5zKFRF
TVBMQVRFLCBhcHApOiFjb250YWlucyhRVCwgd2Via2l0KTohY29udGFpbnMoUVQsIHdlYmtpdHdp
ZGdldHMpOiByZXR1cm4odHJ1ZSkKLQotICAgICMgQW55dGhpbmcgZWxzZSBzaG91bGQganVzdCBn
ZXQgaW5jbHVkZSBwYXRocywgZXRjLCBub3QgbGluawotICAgIHJldHVybihmYWxzZSkKLX0KLQot
IyBNYWtlIHN1cmUgd2UgaGF2ZSBsb2FkZWQgdGhlIHJlbGV2YW50IG1vZHVsZXMsIHNvIHRoZSBp
bmNsdWRlIHBhdGhzLAotIyBldGMsIGFyZSBjb3JyZWN0LCBhbmQgd2UgY2FuIHVzZSBXRUJLSVQu
Zm9vLmRlcGVuZGVudF9saWJzIGJlbG93LgotbG9hZCh3ZWJraXRfbW9kdWxlcykKLQotIyBXZSBt
aWdodCBuZWVkIHRvIGxpbmsgYWdhaW5zdCB0aGUgV2ViS2l0IGludGVybWVkaWF0ZSBsaWJyYXJp
ZXMKLW5lZWRUb0xpbmsoKSB7Ci0gICAgZm9yKGxpYnJhcnksIFdFQktJVCkgewotICAgICAgICBs
aWJyYXJ5X2lkZW50aWZpZXIgPSAkJGxvd2VyKCQkbGlicmFyeSkKLSAgICAgICAgbGlua0FnYWlu
c3RMaWJyYXJ5KCQkbGlicmFyeSwgJCRldmFsKFdFQktJVC4kJHtsaWJyYXJ5X2lkZW50aWZpZXJ9
LnJvb3Rfc291cmNlX2RpcikpCi0gICAgICAgIExJQlMgKz0gJCRldmFsKFdFQktJVC4kJHtsaWJy
YXJ5X2lkZW50aWZpZXJ9LmRlcGVuZGVudF9saWJzKQotICAgIH0KLX0KLQotY3JlYXRpbmdfbW9k
dWxlIHsKLSAgICAjIFNhbml0aXplIExJQlMsIGFzIHdlIGRvbid0IHdhbnQgYW55IG9mIHRoZXNl
IGxpYnJhcmllcwotICAgICMgdG8gZW5kIHVwIGluIGFzIHB1YmxpYyBBUEkgZGVwZW5kZW5pY2Vz
IGluIHRoZSBRdFdlYktpdCBwcmwgZmlsZS4KLSAgICBMSUJTX1BSSVZBVEUgKz0gJCRMSUJTCi0g
ICAgdW5zZXQoTElCUykKLSAgICAjIENvcHkgUXQgbW9kdWxlIGRlcGVuZGVuY2llcyBmcm9tIFFU
IHRvIFFUX1BSSVZBVEUgdG8gZW5zdXJlIHRoZQotICAgICMgUXQgbGlicmFyaWVzIGFyZSBsaW5r
ZWQgYWZ0ZXIgdGhlIHByaXZhdGUgc3RhdGljIGxpYnJhcmllcyB0aGF0Ci0gICAgIyBkZXBlbmQg
b24gdGhlbQotICAgIFFUX1BSSVZBVEUgKz0gJCRRVAotfQotCi1lcXVhbHMoX1BST19GSUxFXywg
JCR7Uk9PVF9XRUJLSVRfRElSfS9XZWJLaXQucHJvKTohaXNFbXB0eShPVkVSUklERV9TVUJESVJT
KSB7Ci0gICAgIyBUaGUgcm9vdCBXZWJLaXQgcHJvamVjdCBmaWxlIGlzIHRoZSBvbmx5IG9uZSB0
aGF0IGFsbG93cwotICAgICMgeW91IHRvIHBhc3MgYSBzZXQgb2Ygc3VidGFyZ2V0cyBvbiB0aGUg
Y29tYW5kIGxpbmUuCi0gICAgU1VCRElSUyA9ICQkT1ZFUlJJREVfU1VCRElSUwotfQotCi0jIFJl
bW92ZSBzdWJkaXJzIHRoYXQgZG8gbm90IGV4aXN0Ci1mb3Ioc3ViZGlyLCBTVUJESVJTKSB7Ci0g
ICAgcGF0aCA9ICQkZXZhbCgkJHtzdWJkaXJ9LmZpbGUpCi0gICAgaXNFbXB0eShwYXRoKTogcGF0
aCA9ICQkZXZhbCgkJHtzdWJkaXJ9LnN1YmRpcikKLSAgICBpc0VtcHR5KHBhdGgpOiBwYXRoID0g
JCR7c3ViZGlyfQotICAgICFleGlzdHMoJCR7X1BST19GSUxFX1BXRF99JCR7UU1BS0VfRElSX1NF
UH0kJHtwYXRofSkgewotICAgICAgICAjbWVzc2FnZShSZW1vdmluZyBpbnZhbGlkIHN1YnRhcmdl
dCAkJHtzdWJkaXJ9ICQke3BhdGh9KQotICAgICAgICAjU1VCRElSUyAtPSAkJHtzdWJkaXJ9Ci0g
ICAgfQotfQotCi1yb290X3Byb2plY3RfZmlsZSB7Ci0gICAgIyBUd2VhayBkb2N1bWVudGF0aW9u
IHJ1bGVzIHNvIHRoYXQgd2Ugb25seSBnZXQgZG9jdW1lbnRhdGlvbgotICAgICMgZm9yIHRoZSBR
dFdlYktpdCBzdWJkaXIsIHdoaWNoIG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gcnVuCi0gICAgIyBx
bWFrZV9hbGwgYW5kIGdlbmVyYXRlIGFsbCB0aGUgZGVyaXZlZCBzb3VyY2VzLCBqdXN0IHRvCi0g
ICAgIyBidWlsZCBkb2N1bWVudGF0aW9uLgotICAgIHByZXZpb3VzX3N1YmRpciA9Ci0gICAgZG9j
X3RhcmdldHMgPSBkb2NzIGluc3RhbGxfZG9jcyB1bmluc3RhbGxfZG9jcyBwcmVwYXJlX2RvY3Mg
Z2VuZXJhdGVfZG9jcwotICAgIGZvcihzdWJkaXIsIFNVQkRJUlMpIHsKLSAgICAgICAgZXF1YWxz
KHN1YmRpciwgUXRXZWJLaXQpIHsKLSAgICAgICAgICAgIGZvcihkb2NfdGFyZ2V0LCBkb2NfdGFy
Z2V0cykgewotICAgICAgICAgICAgICAgICMgU2luY2Ugd2UgdXNlIENPTkZJRyArPSBvcmRlcmVk
LCB3ZSBuZWVkIHRvIHByb3ZpZGUgYSBmYWtlIGR1bW15Ci0gICAgICAgICAgICAgICAgIyBkb2Mt
dGFyZ2V0IGZvciB0aGUgaW1tZWRpYXRlIGRlcGVuZGVuY3kgb2YgdGhlIFF0V2ViS2l0IHRhcmdl
dC4KLSAgICAgICAgICAgICAgICBkdW1teV90YXJnZXQgPSBzdWItJCRyZXBsYWNlKCQke3ByZXZp
b3VzX3N1YmRpcn0uZmlsZSwgW15hLXpBLVowLTlfXSwgLSktJCR7ZG9jX3RhcmdldH1fb3JkZXJl
ZAotICAgICAgICAgICAgICAgICQke2R1bW15X3RhcmdldH0udGFyZ2V0ID0gJCR7ZHVtbXlfdGFy
Z2V0fQotICAgICAgICAgICAgICAgIFFNQUtFX0VYVFJBX1RBUkdFVFMgKz0gJCR7ZHVtbXlfdGFy
Z2V0fQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJldmlv
dXNfc3ViZGlyID0gJCRzdWJkaXIgIyBTYXZlIGZvciBsYXRlcgotCi0gICAgICAgICAgICAjIEZv
ciBhbGwgdGhlIG90aGVyIHN1YmRpcnMsIHdlIGRpc2FibGUgZG9jcyB0aGUgcmVndWxhciB3YXkK
LSAgICAgICAgICAgIGZvcihkb2NfdGFyZ2V0LCBkb2NfdGFyZ2V0cyk6ICQke3N1YmRpcn0uQ09O
RklHICs9IG5vXyQke2RvY190YXJnZXR9X3RhcmdldAotICAgICAgICB9Ci0gICAgfQotfQotCi1p
bmNyZW1lbnRhbC50YXJnZXQgPSBpbmNyZW1lbnRhbAotaW5jcmVtZW50YWwuY29tbWFuZHMgPSAk
KE1BS0UpIC1mICQoTUFLRUZJTEUpIHFtYWtlX2FsbCAmJiAkKE1BS0UpIC1mICQoTUFLRUZJTEUp
Ci1RTUFLRV9FWFRSQV9UQVJHRVRTICs9IGluY3JlbWVudGFsCi0KLWNvbnRhaW5zKFRFTVBMQVRF
LCBsaWIpIHsKLSAgICAjIFRyaWdnZXJzIHRoZSByaWdodCBleHBvcnQgbWFjcm9zIGZvciBXZWJL
aXQgaW50ZXJuYWxzCi0gICAgREVGSU5FUyArPSBCVUlMRElOR18kJHtUQVJHRVR9Ci0KLSAgICAj
IFRyaWdnZXJzIHRoZSByaWdodCBleHBvcnQgbWFjcm8gZm9yIHRoZSBRdFdlYktpdCBBUEkgKHNl
ZSBxd2Via2l0Z2xvYmFsLmgpCi0gICAgIWNvbnRhaW5zKFFULCB3ZWJraXQpfGVxdWFscyhNT0RV
TEUsIHdlYmtpdHdpZGdldHMpOiBERUZJTkVTICs9IEJVSUxESU5HX1dFQktJVAotCi0gICAgIyBQ
cmV2ZW50IG5hbWUgY2xhc2hlcyB3aGVuIGJ1aWxkaW5nIGJvdGggZGVidWcgYW5kIHJlbGVhc2Uu
IFF0NSdzIG1vZHVsZQotICAgICMgc3lzdGVtIGFscmVhZHkgdGFrZXMgY2FyZSBvZiB0aGlzIGZv
ciB0aGUgdG9wIGxldmVsIFF0V2ViS2l0IGxpYnJhcnkuCi0gICAgIXF0X2luc3RhbGxfbW9kdWxl
OmRlYnVnX2FuZF9yZWxlYXNlOiBUQVJHRVQgPSAkJHF0TGlicmFyeVRhcmdldCgkJFRBUkdFVCkK
LQotICAgIGdudV90aGluX2FyY2hpdmVzIHsKLSAgICAgICAgIyBSZXBsYWNlIHRoZSBoYXJkY29k
ZWQgYXJjaGl2ZXIgY29tbWFuZCBsaW5lCi0gICAgICAgICMgb3B0aW9ucyB0byB1c2UgR05VIGFy
J3MgdGhpbiBhcmNoaXZlIGZvcm1hdC4KLSAgICAgICAgQVJfQ09NTUFORCA9ICQkc3BsaXQoUU1B
S0VfQVIsICIgIikKLSAgICAgICAgUU1BS0VfQVIgPSAkJG1lbWJlcihBUl9DT01NQU5ELCAwKSBj
cnVUCi0gICAgfQotCi0gICAgaXNFbXB0eShERVNURElSKTogREVTVERJUiA9ICQkdGFyZ2V0U3Vi
RGlyKCkKLQotICAgIERFRklORVMgKz0gUVRfQVNDSUlfQ0FTVF9XQVJOSU5HUwotCi0gICAgIXBs
dWdpbiB7Ci0gICAgICAgIGNvbnRhaW5zKFFUX0NPTkZJRywgcmVkdWNlX2V4cG9ydHMpOkNPTkZJ
RyArPSBoaWRlX3N5bWJvbHMKLSAgICAgICAgdW5peDpjb250YWlucyhRVF9DT05GSUcsIHJlZHVj
ZV9yZWxvY2F0aW9ucyk6Q09ORklHICs9IGJzeW1ib2xpY19mdW5jdGlvbnMKLSAgICB9Ci19Ci0K
LSMgUmVtb3ZlIGR1cGxpY2F0ZWQgc291cmNlcwotU09VUkNFUyA9ICQkdW5pcXVlKFNPVVJDRVMp
Ci1PQkpFQ1RJVkVfU09VUkNFUyA9ICQkdW5pcXVlKE9CSkVDVElWRV9TT1VSQ0VTKQotCi0jIFNv
bWVvbmUgbWlnaHQgcmVtb3ZlIGEgaGVhZGVyIGZyb20gdGhlIHRyZWUgd2l0aG91dCB0b3VjaGlu
ZwotIyB0aGUgY29ycmVzcG9uZGluZyBwcm9qZWN0IGZpbGUsIGZvciBleGFtcGxlIGlmIHRoZSBw
cm9qZWN0Ci0jIGZpbGUgbmV2ZXIgaGFkIHRoZSBoZWFkZXIgaW4gSEVBREVSUy4gSW4gdGhhdCBj
YXNlIHdlIGRvbid0Ci0jIHdhbnQgd2FybmluZ3MgZnJvbSBtYWtlIGFib3V0ICJObyBydWxlIHRv
IG1ha2UgdGFyZ2V0Ii4KLWlnbm9yZV9taXNzaW5nX2hlYWRlcnMudGFyZ2V0ID0gJS5oCi1pZ25v
cmVfbWlzc2luZ19oZWFkZXJzLmNvbW1hbmRzID0gJCR7TUFLRUZJTEVfTk9PUF9DT01NQU5EfQot
UU1BS0VfRVhUUkFfVEFSR0VUUyArPSBpZ25vcmVfbWlzc2luZ19oZWFkZXJzCi0KLSMgT3ZlcnJp
ZGUgZGVmYXVsdCB0YXJnZXQKLWJ1aWxkX3Bhc3M6YnVpbGRfYWxsOmRlZmF1bHRfdGFyZ2V0LnRh
cmdldCA9IGFsbAotZWxzZTogZGVmYXVsdF90YXJnZXQudGFyZ2V0ID0gZmlyc3QKLWZvcih0YXJn
ZXQsICQkbGlzdCgkJHVuaXF1ZShERUZBVUxUX1RBUkdFVFMpKSkgewotICAgIGRlZmF1bHRfdGFy
Z2V0LmRlcGVuZHMgKz0gJCR0YXJnZXQKLX0KLSFpc0VtcHR5KGRlZmF1bHRfdGFyZ2V0LmRlcGVu
ZHMpOiBRTUFLRV9FWFRSQV9UQVJHRVRTICs9IGRlZmF1bHRfdGFyZ2V0Ci0KLSMgUXQncyBkZWJ1
Z19hbmRfcmVsZWFzZSBjb25maWcgd2lsbCByZXBsYWNlIGV2ZXJ5IG9jY3VyYW5jZSBvZgotIyBS
ZWxlYXNlIG9yIERlYnVnIGluIHRoZSBkZXN0aW5hdGlvbiBkaXIuIFRoaXMgZmFpbHMgd2hlbiB0
aGUKLSMgZGVzaW5hdGlvbiBkaXIgaXMgYWJzb2x1dGUgYW5kIGNvbnRhaW5zIGEgc3RhdGljIHBh
dGggY29tcG9uZW50Ci0jIHRoYXQgYWxzbyBjb250YWlucyBlaXRoZXIgb2YgdGhvc2UgdHdvIHdv
cmRzLCBzbyB3ZSBtYWtlIERFU1RESVIKLSMgcmVsYXRpdmUuCi1ERVNURElSID0gJCRyZXBsYWNl
KERFU1RESVIsIF4kJHJlX2VzY2FwZSgkJHtST09UX0JVSUxEX0RJUn0pLCAkJHtCVUlMRF9ST09U
X1JFTEFUSVZFX1RPX09VVF9QV0R9KQotCi1sb2FkKGRlZmF1bHRfcG9zdCkgIyBMb2FkIFF0J3Mg
ZGVmYXVsdHMKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZGVmYXVs
dF9wcmUucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9kZWZhdWx0X3ByZS5wcmYK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNjk4M2E1YWUzOTE4MGFlNjcwNDM1NTQy
YTk3OWFhNmMyYzUyZGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9kZWZhdWx0X3ByZS5wcmYKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFF0V2ViS2l0IGRlZmF1
bHRzIGZvciBxbWFrZS4gVGhlc2UgcnVsZXMgYXJlIHBhcnNlZCBiZWZvcmUgdGhlCi0jIGFjdHVh
bCBwcm9qZWN0IGZpbGUuCi0jCi0jIFNlZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBmb3IgYW4gb3Zl
cnZpZXcgb2YgdGhlIGJ1aWxkIHN5c3RlbQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSMgQWxsb3cgZW52aXJv
bm1lbnQgdHdlYWtzIHRvIHByZS1sb2FkZWQgLnFtYWtlLmNhY2hlIGNvbnRlbnQKLWVudl9jYWNo
ZSA9ICQkKFFNQUtFX0NBQ0hFX0VWQUwpCi1ldmFsKCQkZW52X2NhY2hlKQotCi1sb2FkKGZ1bmN0
aW9ucykKLQotIyBGSVhNRTogSW4gdGhpcyBjYXNlIHdlIHByb2JhYmx5IHdhbnQgdG8gZXhpdCBl
YXJseSBzbyB0aGF0IHdlCi0jIGRvbid0IGxvYWQgYWxsIG9mIHRoZSBjdXN0b20gYnVpbGQgdHdl
YWtzIG5lZWRsZXNzbHkuCi1wcm9fZmlsZSA9ICQkX1BST19GSUxFXyAjIENoZWNraW5nIHRoZSB2
YXJpYWJsZSBkaXJlY3RseSBkb2VzIG5vdCB3b3JrCi1pc0VtcHR5KHByb19maWxlKTogQ09ORklH
ICs9IHJlY3Vyc2l2ZV9pbmNsdWRlCi0KLSMgUmVzb2x2ZSByb290IGRpcmVjdG9yaWVzIGZvciBz
b3VyY2UgYW5kIGJ1aWxkCi1ST09UX1dFQktJVF9ESVIgPSAkJHJlcGxhY2UoUFdELCAvVG9vbHMv
cW1ha2UvbWtzcGVjcy9mZWF0dXJlcyQsKQotV0VCS0lUX1NVQkRJUiA9ICQkcmVwbGFjZShfUFJP
X0ZJTEVfUFdEXywgJCRyZV9lc2NhcGUoJCR7Uk9PVF9XRUJLSVRfRElSfSksKQotUk9PVF9CVUlM
RF9ESVIgPSAkJHJlcGxhY2UoT1VUX1BXRCwgJCRyZV9lc2NhcGUoJCR7V0VCS0lUX1NVQkRJUn0p
JCwpCi0KLSMgTm93IHdlJ3JlIHJlYWR5IHRvIGxvYWQgZGVmYXVsdF9wcmUgZnJvbSBRdAotbG9h
ZChkZWZhdWx0X3ByZSkKLQotZXF1YWxzKE9VVF9QV0QsICQke1JPT1RfQlVJTERfRElSfSkgewot
ICAgICFyZWN1cnNpdmVfaW5jbHVkZTpDT05GSUcgKz0gcm9vdF9wcm9qZWN0X2ZpbGUKLSAgICBC
VUlMRF9ST09UX1JFTEFUSVZFX1RPX09VVF9QV0QgPSAuCi19IGVsc2UgewotICAgIHN1YmRpcl9w
YXJ0cyA9ICQkcmVwbGFjZShPVVRfUFdELCBeJCRyZV9lc2NhcGUoJCR7Uk9PVF9CVUlMRF9ESVJ9
KS8sKQotICAgIHN1YmRpcl9wYXJ0cyA9ICQkc3BsaXQoc3ViZGlyX3BhcnRzLCAvKQotICAgIGZv
cihzdWJkaXIsIHN1YmRpcl9wYXJ0cykgewotICAgICAgICBCVUlMRF9ST09UX1JFTEFUSVZFX1RP
X09VVF9QV0QgKz0gLi4KLSAgICB9Ci0gICAgQlVJTERfUk9PVF9SRUxBVElWRV9UT19PVVRfUFdE
ID0gJCRqb2luKEJVSUxEX1JPT1RfUkVMQVRJVkVfVE9fT1VUX1BXRCwgLykKLX0KLQotIyBUcnkg
dG8gZGV0ZWN0IGlmIHdlJ3JlIHJ1bm5pbmcgdW5kZXIgV2luZG93cyBjbWQuZXhlIG9yIG5vdAot
d2luMzI6aXNFbXB0eShNSU5HV19JTl9TSEVMTCk6IENPTkZJRyArPSB3aW5fY21kX3NoZWxsCi0K
LSMgRGVmYXVsdCBsb2NhdGlvbiBvZiBnZW5lcmF0ZWQgc291cmNlcwotR0VORVJBVEVEX1NPVVJD
RVNfREVTVERJUiA9IGdlbmVyYXRlZAotCi1RVU9URSA9ICIiCi1ET1VCTEVfRVNDQVBFRF9RVU9U
RSA9ICIiCi1FU0NBUEUgPSAiIgotd2luX2NtZF9zaGVsbCB7Ci0gICAgRVNDQVBFID0gIl4iCi19
IGVsc2UgewotICAgIFFVT1RFID0gIlwnIgotICAgIERPVUJMRV9FU0NBUEVEX1FVT1RFID0gIlxc
XCciCi19Ci1FT0wgPSAkJGVzY2FwZV9leHBhbmQoXFxuKQotRU9DID0gJCRlc2NhcGVfZXhwYW5k
KFxcblxcdCkKLVRBQiA9ICQkZXNjYXBlX2V4cGFuZChcXHQpCi0KLU1BS0VGSUxFX05PT1BfQ09N
TUFORCA9IEBlY2hvIC1uCi13aW4zMi1tc3ZjKjogTUFLRUZJTEVfTk9PUF9DT01NQU5EID0gQGVj
aG8gPk5VTAotCi0jIFNldCB1cCBhIGRlZmF1bHQgcHl0aG9uIHZlcnNpb24KLXNjcmF0Y2hib3g6
IFBZVEhPTiA9IHB5dGhvbjIuNgotZWxzZTogUFlUSE9OID0gcHl0aG9uCi0KLSMgV2UgdXNlIHBy
aXZhdGVfdGVzdHMgdG8gZGV0ZWN0IGRldmVsb3BlciBidWlsZCwgc2luY2UgdGhlIGRlc3RkaXIg
d2lsbAotIyBhbHdheXMgYmUgb3VyIHdlYmtpdCBidWlsZCBkaXIuIFRoaXMgbWlnaHQgY2hhbmdl
IGFzIGNvbmZpZ3VyZSBjaGFuZ2VzLgotY29udGFpbnMoUVRfQ09ORklHLCBwcml2YXRlX3Rlc3Rz
KTogQ09ORklHICs9IHF0X2RldmVsb3Blcl9idWlsZAotCi0jIEJ5IGRlZmF1bHQgd2UgZW5hYmxl
ICJwcm9kdWN0aW9uIGJ1aWxkIiwgYW5kIGJ1aWxkLXdlYmtpdCwgd2hpY2ggaXMKLSMgdXNlZCBi
eSBib3RzIGFuZCBkZXZlbG9wZXJzLCB3aWxsIGRpc2FibGUgaXQsIHRvIGVuYWJsZSB3YXJuaW5n
cyBldGMuCi1DT05GSUcgKz0gcHJvZHVjdGlvbl9idWlsZAotCi0jIFJ1biBjb25maWd1cmUgYmVm
b3JlIG1ha2luZyBkZWNpc2lvbnMgdGhhdCBkZXBlbmQgb24gdGhlIHJlc3VsdAotcm9vdF9wcm9q
ZWN0X2ZpbGUgewotICAgIGxvYWQoY29uZmlndXJlKQotICAgIHJ1bkNvbmZpZ3VyZSgpCi19Ci0K
LXVuaXg6Y29uZmlnX2djY2RlcGVuZHMgewotICAgICMgV2UgaGF2ZSBhIGNvbXBpbGVyIHRoYXQg
c3VwcG9ydHMgdGhlIC1NRCBvcHRpb24gKGFuZCBuZWl0aGVyCi0gICAgIyB0ZWFtYnVpbGRlciBu
b3IgaWNlY3JlYW0gaXMgbWVzc2luZyB1cCB0aGUgLmQgZmlsZSBvdXRwdXQpLgotICAgIENPTkZJ
RyArPSBHTlVtYWtlIGdjY19NRF9kZXBlbmRzCi19Ci0KLSMgU2V0IHNvbWUgZGVmYXVsdHMgZm9y
IHNwZWNpZmljIHBsYXRmb3JtcwotQ09ORklHICs9IGluY2x1ZGVfd2ViaW5zcGVjdG9yCi0KLSMg
TWFrZSBzdXJlIHdlIHByb2Nlc3MgdGhlIFBLR0NPTkZJRyB2YXJpYWJsZSBpZiBhcHBsaWNhYmxl
Ci0hbWFjOiBDT05GSUcgKz0gbGlua19wa2djb25maWcKLQotIyBMaW1pdCB0aGUgY3JlYXRpb24g
b2YgdGhpbiBhcmNoaXZlcyB0byBMaW51eCwgc2luY2Ugb25seSBHTlUncyBhciBzdXBwb3J0cyBp
dC4KLSFkZWJ1Z19hbmRfcmVsZWFzZTpsaW51eC1nKysqOiBDT05GSUcgKz0gZ251X3RoaW5fYXJj
aGl2ZXMKLQotIyBQaWNrIHVwIFF0J3MgZGVmYXVsdHMgZm9yIGRlYnVnL3JlbGVhc2UvZGVidWdf
YW5kX3JlbGVhc2UKLWlmKHdpbjMyfG1hYyk6IW1hY3gteGNvZGUgewotICAgIGNvbnRhaW5zKFFU
X0NPTkZJRywgZGVidWdfYW5kX3JlbGVhc2UpOiBDT05GSUcgKz0gZGVidWdfYW5kX3JlbGVhc2UK
LSAgICBjb250YWlucyhRVF9DT05GSUcsIGJ1aWxkX2FsbCk6IENPTkZJRyArPSBidWlsZF9hbGwK
LX0KLQotIyBXZWJLaXQgZGVwZW5kcyBvbiBDKysxMSBub3cuCi1DT05GSUcgKz0gYysrMTEKLQot
IyBBIG5ld2VyIHZlcnNpb24gb2YgZmxleCBpcyByZXF1aXJlZCBvbiBXaW5kb3dzLiBBdCB0aGUg
bW9tZW50IHRoZSBvbmx5Ci0jIG9uZSB0aGF0IGFwcGVhcnMgdG8gcHJvdmlkZSBiaW5hcmllcyBh
bmQgaXMgbm90IGN5Z3dpbiBpcyB3aW5mbGV4LgotRkxFWCA9IGZsZXgKLXdpbjMyOiBGTEVYID0g
d2luX2ZsZXgKLQotQklOX0VYVEVOU0lPTiA9Ci13aW4zMjogQklOX0VYVEVOU0lPTiA9IC5leGUK
ZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmIGIv
VG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGM1MzJmY2Y2ZjE4MzU0ZTRhYWJhNzgyZTA1NTEzOWMzNDEzM2NlZjEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvcW1h
a2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKKysrIC9kZXYvbnVsbApAQCAtMSwxNzgg
KzAsMCBAQAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRoaXMgZmlsZSBkb2VzIGJhc2ljICdjb25maWd1cmUn
IHN0eWxlIGNoZWNrcyB0byBkZXRlcm1pbmUgdGhlCi0jIHNldCBvZiBlbmFibGUvdXNlL2hhdmUg
ZGVmaW5lcyBhbmQgdGhlaXIgdmFsdWVzLgotIwotIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScg
Zm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0ZW0KLSMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1kZWZp
bmVUZXN0KGRldGVjdEZlYXR1cmVzKSB7Ci0KLSAgICAjIC0tLS0tLS0tLS0tLS0tIEZpbGwgaW4g
c3RhdGljIGRlZmF1bHRzIC0tLS0tLS0tLS0tLS0tCi0KLSAgICBpbmNsdWRlKGZlYXR1cmVzLnBy
aSkKLQotICAgIGZvcihmZWF0dXJlLCBGRUFUVVJFX0RFRkFVTFRTKSB7Ci0gICAgICAgIGVuYWJs
ZWRGZWF0dXJlID0gJCRmaW5kKGZlYXR1cmUsID0xJCkKLSAgICAgICAgIWlzRW1wdHkoZW5hYmxl
ZEZlYXR1cmUpIHsKLSAgICAgICAgbGluZSB+PSBzL14uK2luY2x1ZGUgXCIoLiopXCIvXFwxLwot
ICAgICAgICAgICAgZW5hYmxlZEZlYXR1cmUgfj0gcy89MSQvLwotICAgICAgICAgICAgZW5hYmxl
ZEZlYXR1cmUgfj0gcy9eRU5BQkxFXy8vCi0gICAgICAgICAgICBXRUJLSVRfQ09ORklHICs9ICQk
bG93ZXIoJCRlbmFibGVkRmVhdHVyZSkKLSAgICAgICAgfQotICAgIH0KLQotICAgIFdFQktJVF9D
T05GSUcgKz0gdXNlX3RpbGVkX2JhY2tpbmdfc3RvcmUKLSAgICBXRUJLSVRfQ09ORklHICs9IHVz
ZV9jcm9zc19wbGF0Zm9ybV9jb250ZXh0X21lbnVzCi0KLSAgICAjIC0tLS0tLS0tLS0tLS0gUHJl
cGFyZSBmb3IgZmVhdHVyZSBkZXRlY3Rpb24gLS0tLS0tLS0tLS0tLQotCi0gICAgIyAtLS0tLS0t
LS0tIER5bmFtaWNhbGx5IGRldGVjdCBvcHRpb25hbCBmZWF0dXJlcyAtLS0tLS0tLS0tLS0tCi0g
ICAgIwotICAgICMgUGxlYXNlIG5vdGU6IHN0YXRpYyBmZWF0dXJlIGRlZmF1bHRzIGdvIGluIGZl
YXR1cmVzLnByaQotICAgICMKLQotICAgIHF0SGF2ZU1vZHVsZShxdWljayk6IFdFQktJVF9DT05G
SUcgKz0gaGF2ZV9xdHF1aWNrCi0gICAgZWxzZTogQ09ORklHVVJFX1dBUk5JTkdTICs9ICJRdFF1
aWNrIG1vZHVsZSBub3QgZm91bmQsIFFNTCBBUElzIHdpbGwgbm90IGJlIGJ1aWx0IgotCi0gICAg
cXRIYXZlTW9kdWxlKHByaW50c3VwcG9ydCk6IFdFQktJVF9DT05GSUcgKz0gaGF2ZV9xdHByaW50
c3VwcG9ydAotICAgIHF0SGF2ZU1vZHVsZSh3aWRnZXRzKTogV0VCS0lUX0NPTkZJRyArPSBoYXZl
X3FzdHlsZQotICAgIHF0SGF2ZU1vZHVsZSh0ZXN0bGliKTogV0VCS0lUX0NPTkZJRyArPSBoYXZl
X3F0dGVzdGxpYgotICAgIHF0SGF2ZU1vZHVsZShwb3NpdGlvbmluZyk6IFdFQktJVF9DT05GSUcg
Kz0gaGF2ZV9xdHBvc2l0aW9uaW5nCi0gICAgcXRIYXZlTW9kdWxlKHNlbnNvcnMpOiBXRUJLSVRf
Q09ORklHICs9IGhhdmVfcXRzZW5zb3JzCi0KLSAgICBjb25maWdfbGlieG1sMjogV0VCS0lUX0NP
TkZJRyArPSB1c2VfbGlieG1sMgotICAgIGNvbmZpZ19saWJ4c2x0OiBXRUJLSVRfQ09ORklHICs9
IHhzbHQKLSAgICBjb25maWdfbGliemxpYjogV0VCS0lUX0NPTkZJRyArPSB1c2VfemxpYgotICAg
IGNvbmZpZ19saWJ3ZWJwOiBXRUJLSVRfQ09ORklHICs9IHVzZV93ZWJwCi0KLSAgICAjIFdlIGNh
bid0IHVzZSBRdCdzIDNyZHBhcnR5IHNvdXJjZXMgZm9yIGxpYmpwZWcgYW5kIGxpYnBuZyBvdXRz
aWRlIG9mIHF0YmFzZSwgYnV0IGlmIFF0Ci0gICAgIyBpcyB1c2luZyB0aGUgc3lzdGVtIGxpYnJh
cmllcywgdXNlIHRoZW0gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIFdlYkNvcmUgaW1hZ2UgZGVj
b2RlcnMgYXMgd2VsbC4KLSAgICBjb250YWlucyhRVF9DT05GSUcsIHN5c3RlbS1qcGVnKTogV0VC
S0lUX0NPTkZJRyArPSB1c2VfbGlianBlZwotICAgIGVsc2U6IENPTkZJR1VSRV9XQVJOSU5HUyAr
PSAiSlBFRyBsaWJyYXJ5IG5vdCBmb3VuZCwgUUltYWdlRGVjb2RlciB3aWxsIGRlY29kZSBKUEVH
IGltYWdlcyIKLQotICAgIGNvbnRhaW5zKFFUX0NPTkZJRywgc3lzdGVtLXBuZyk6IFdFQktJVF9D
T05GSUcgKz0gdXNlX2xpYnBuZwotICAgIGVsc2U6IENPTkZJR1VSRV9XQVJOSU5HUyArPSAiUE5H
IGxpYnJhcnkgbm90IGZvdW5kLCBRSW1hZ2VEZWNvZGVyIHdpbGwgZGVjb2RlIFBORyBpbWFnZXMi
Ci0KLSAgICBsaW51eC0qIHsKLSAgICAgICAgY29uZmlnX2xpYlhjb21wb3NpdGU6IFdFQktJVF9D
T05GSUcgKz0gaGF2ZV94Y29tcG9zaXRlCi0gICAgICAgIGNvbmZpZ19saWJYcmVuZGVyOiBXRUJL
SVRfQ09ORklHICs9IGhhdmVfeHJlbmRlcgotCi0gICAgICAgIGNvbmZpZ19nbHg6IWNvbnRhaW5z
KFFUX0NPTkZJRywgb3BlbmdsZXMyKTogV0VCS0lUX0NPTkZJRyArPSBoYXZlX2dseAotCi0gICAg
ICAgICMgV2UgbmVlZCBmb250Y29uZmlnIHRvIHNldCB1cCB0aGUgdGVzdCBmb250cyBmb3IgRHVt
cFJlbmRlclRyZWUgYW5kIFdlYktpdFRlc3RSdW5uZXIuCi0gICAgICAgIGNvbmZpZ19mb250Y29u
ZmlnOiBXRUJLSVRfQ09ORklHICs9IGhhdmVfZm9udGNvbmZpZwotICAgIH0KLQotICAgICMgTmVz
Y2FwZSBwbHVnaW5zIHN1cHBvcnQgKE5QQVBJKQotICAgIHhsaWJBdmFpbGFibGUoKSB7Ci0gICAg
ICAgIFdFQktJVF9DT05GSUcgKz0gXAotICAgICAgICAgICAgbmV0c2NhcGVfcGx1Z2luX2FwaSBc
Ci0gICAgICAgICAgICB1c2VfcGx1Z2luX2JhY2tlbmRfeGxpYgotCi0gICAgICAgICMgV2ViS2l0
MgotICAgICAgICBXRUJLSVRfQ09ORklHICs9IFwKLSAgICAgICAgICAgIHBsdWdpbl9hcmNoaXRl
Y3R1cmVfeDExIFwKLSAgICAgICAgICAgIHBsdWdpbl9wcm9jZXNzCi0KLSAgICB9IGVsc2U6IHVu
aXh8d2luMzItKjohZW1iZWRkZWQ6IXdpbmNlKiB7Ci0gICAgICAgIFdFQktJVF9DT05GSUcgKz0g
bmV0c2NhcGVfcGx1Z2luX2FwaQotICAgICAgICAjIFdlYktpdDIKLSAgICAgICAgV0VCS0lUX0NP
TkZJRyArPSBwbHVnaW5fYXJjaGl0ZWN0dXJlX3Vuc3VwcG9ydGVkCi0gICAgfSBlbHNlIHsKLSAg
ICAgICAgV0VCS0lUX0NPTkZJRyArPSBwbHVnaW5fYXJjaGl0ZWN0dXJlX3Vuc3VwcG9ydGVkCi0g
ICAgfQotCi0gICAgIyBFbmFibGUgdGhlIFVTRSgzRF9HUkFQSElDUykgZmxhZyB3aGVuIFF0T3Bl
bkdMIGlzIGVuYWJsZWQuCi0gICAgIyBEaXNhYmxlIG9uIFdpbmRvd3MgQ0UgZm9yIG5vdywgYXMg
QU5HTEUgd29uJ3QgY29tcGlsZS4KLSAgICAhd2luY2UqOmNvbnRhaW5zKFFUX0NPTkZJRywgb3Bl
bmdsKTogV0VCS0lUX0NPTkZJRyArPSB1c2VfM2RfZ3JhcGhpY3MKLQotICAgICMgVGVtcG9yYXJp
bHkgZGlzYWJsZSBGVFBESVIgb24gV2luZG93cyBDRSAobWlzc2luZyBmdW5jdGlvbnMgZnJvbSB0
aW1lLmgpCi0gICAgd2luY2UqIHsKLSAgICAgICAgV0VCS0lUX0NPTkZJRyAtPSBmdHBkaXIKLSAg
ICB9Ci0KLSAgICAjIFdlYkdMIHN1cHBvcnQgLSBvbmx5IGVuYWJsZWQgaWYgd2UgY2FuIHVzZSAz
RCBncmFwaGljcwotICAgIHVzZT8oM2RfZ3JhcGhpY3MpOiBXRUJLSVRfQ09ORklHICs9IHdlYmds
Ci0KLSAgICAjIEVuYWJsZSBDU1Mgc2hhZGVycyB3aGVuIENTUyBmaWx0ZXJzIGFuZCBXZWJHTCBh
cmUgZW5hYmxlZAotICAgIGVuYWJsZT8oY3NzX2ZpbHRlcnMpOmVuYWJsZT8od2ViZ2wpOiBXRUJL
SVRfQ09ORklHICs9IGNzc19zaGFkZXJzCi0KLSAgICAjIEhUTUw1IE1lZGlhIFN1cHBvcnQgZm9y
IG5vbi1NYWMgYnVpbGRzCi0gICAgIW1hYyB7Ci0gICAgICAgICFjb250YWlucyhRVF9DT05GSUcs
IG5vLXBrZy1jb25maWcpIHsKLSAgICAgICAgICAgIHBhY2thZ2VzRXhpc3QoImdsaWItMi4wIGdp
by0yLjAgZ3N0cmVhbWVyLTEuMCBnc3RyZWFtZXItcGx1Z2lucy1iYXNlLTEuMCIpIHsKLSAgICAg
ICAgICAgICAgICBXRUJLSVRfQ09ORklHICs9IHZpZGVvIHVzZV9nc3RyZWFtZXIKLSAgICAgICAg
ICAgIH0gZWxzZTogcGFja2FnZXNFeGlzdCgiZ2xpYi0yLjAgZ2lvLTIuMCBcJ2dzdHJlYW1lci0w
LjEwID49IDAuMTAuMzBcJyBcJ2dzdHJlYW1lci1wbHVnaW5zLWJhc2UtMC4xMCA+PSAwLjEwLjMw
XCciKSB7Ci0gICAgICAgICAgICAgICAgV0VCS0lUX0NPTkZJRyArPSB2aWRlbyB1c2VfZ3N0cmVh
bWVyIHVzZV9nc3RyZWFtZXIwMTAKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgICFlbmFibGU/KHZpZGVvKTpxdEhhdmVNb2R1bGUobXVsdGltZWRpYXdpZGdldHMpIHsKLSAg
ICAgICAgV0VCS0lUX0NPTkZJRyArPSB2aWRlbyB1c2VfcXRfbXVsdGltZWRpYQotICAgIH0KLQot
ICAgICFlbmFibGU/KHZpZGVvKSB7Ci0gICAgICAgIENPTkZJR1VSRV9XQVJOSU5HUyArPSAiTWlz
c2luZyBHU3RyZWFtZXIsIFFUS2l0IG9yIFF0TXVsdGltZWRpYSwgZGlzYWJsaW5nIG1lZGlhIGVs
ZW1lbnQgc3VwcG9ydCIKLSAgICB9Ci0KLSAgICAjIFRyeSB0byB1c2UgYW4gc3lzdGVtIHdpZGUg
U1FsaXRlIGluc3RhbGxhdGlvbgotICAgIGlmKCFjb250YWlucyhRVF9DT05GSUcsIG5vLXBrZy1j
b25maWcpOnBhY2thZ2VzRXhpc3QoInNxbGl0ZTMiKSl8bWFjIHsKLSAgICAgICAgV0VCS0lUX0NP
TkZJRyArPSBoYXZlX3NxbGl0ZTMKLSAgICB9IGVsc2UgewotICAgICAgICBTUUxJVEUzU1JDRElS
ID0gJCQoU1FMSVRFM1NSQ0RJUikKLSAgICAgICAgaXNFbXB0eShTUUxJVEUzU1JDRElSKTppc0Vt
cHR5KF9RTUFLRV9TVVBFUl9DQUNIRV8pOiBlcnJvcigiV2ViS2l0IHJlcXVpcmVzIFNRTGl0ZS4g
RWl0aGVyIG1ha2UgaXQgYXZhaWxhYmxlIHZpYSBwa2ctY29uZmlnLCBzZXQgJFNRTElURTNTUkNE
SVIgb3IgYnVpbGQgV2ViS2l0IHVuZGVyIHF0NS5naXQuIikKLSAgICB9Ci0KLSAgICAjIEdhbWVw
YWQgQVBJIFN1cHBvcnQKLSAgICBwYWNrYWdlc0V4aXN0KGxpYnVkZXYpOiBXRUJLSVRfQ09ORklH
ICs9IGdhbWVwYWQKLQotICAgICMgU3VwcG9ydCBmb3IgR3JhcGhpY3MgU3VyZmFjZQotICAgICMg
R3JhcGhpY3NTdXJmYWNlIHJlcXVpcmVzIEdyYXBoaWNzQ29udGV4dDNEIGFuZCBoZW5jZSB1c2Vf
M2RfZ3JhcGhpY3MKLSAgICB1c2U/KDNkX2dyYXBoaWNzKSB7Ci0gICAgICAgIG1hYzogV0VCS0lU
X0NPTkZJRyArPSB1c2VfZ3JhcGhpY3Nfc3VyZmFjZQotICAgICAgICB3aW4zMjpjb250YWlucyhR
VF9DT05GSUcsIG9wZW5nbGVzMik6IFdFQktJVF9DT05GSUcgKz0gdXNlX2dyYXBoaWNzX3N1cmZh
Y2UKLSAgICAgICAgaGF2ZT8oZ2x4KTpoYXZlPyh4Y29tcG9zaXRlKTpoYXZlPyh4cmVuZGVyKTog
V0VCS0lUX0NPTkZJRyArPSB1c2VfZ3JhcGhpY3Nfc3VyZmFjZSB1c2VfZ2x4Ci0gICAgfQotCi0g
ICAgIyBTbGlkZXIgVG91Y2ggaXMgc2Vuc2libGUgdG8gdXNlIHdoZW4gY29tcGlsaW5nIFdlYktp
dDIKLSAgICBlbmFibGU/KHRvdWNoX2V2ZW50cyk6IFdFQktJVF9DT05GSUcgKz0gdG91Y2hfc2xp
ZGVyCi0KLQotCi0gICAgIyAtLS0tLS0tLS0tLS0tLS0tIFNhbml0aXplIGZlYXR1cmVzIC0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotICAgIGV4cG9ydChXRUJLSVRfQ09ORklHKQotICAgIGV4cG9ydChD
T05GSUdVUkVfV0FSTklOR1MpCi19Ci0KLWRlZmluZVRlc3Qoc2FudGl6ZUZlYXR1cmVzKSB7Ci0g
ICAgIyBJZiB3ZSBhcmUgZG9pbmcgYSBwcm9kdWN0aW9uX2J1aWxkIHdlIHNob3VsZCBvbmx5IGVu
YWJsZSBHZW9sb2NhdGlvbiBzdXBwb3J0IGlmIFF0UG9zaXRpb25pbmcgZXhpc3RzLiBJbiBkZXZl
bG9wZXIgYnVpbGRzIHdlIGNhbiB1c2UgTW9jayBpbXBsZW1lbnRhdGlvbnMuCi0gICAgcHJvZHVj
dGlvbl9idWlsZDohaGF2ZT8ocXRwb3NpdGlvbmluZyk6IFdFQktJVF9DT05GSUcgLT0gZ2VvbG9j
YXRpb24KLQotICAgICMgSWYgd2UgYXJlIGRvaW5nIGEgcHJvZHVjdGlvbl9idWlsZCB3ZSBzaG91
bGQgb25seSBlbmFibGUgT3JpZW50YXRpb24gc3VwcG9ydCBpZiBRdFNlbnNvcnMgZXhpc3RzLiBJ
biBkZXZlbG9wZXIgYnVpbGRzIHdlIGNhbiB1c2UgTW9jayBpbXBsZW1lbnRhdGlvbnMuCi0gICAg
cHJvZHVjdGlvbl9idWlsZDohaGF2ZT8ocXRzZW5zb3JzKTogV0VCS0lUX0NPTkZJRyAtPSBvcmll
bnRhdGlvbl9ldmVudHMgZGV2aWNlX29yaWVudGF0aW9uCi0KLSAgICAjIERpc2FibGUgU1ZHIGZv
bnRzIGlmIFNWRyBpcyBkaXNhYmxlZAotICAgICFlbmFibGU/KHN2Zyk6IFdFQktJVF9DT05GSUcg
LT0gc3ZnX2ZvbnRzCi0KLSAgICAjIEphdmFTY3JpcHQgZGVidWdnZXIgcmVxdWlyZXMgdGhlIGlu
c3BlY3RvcgotICAgICFlbmFibGU/KGluc3BlY3Rvcik6IFdFQktJVF9DT05GSUcgLT0gamF2YXNj
cmlwdF9kZWJ1Z2dlciBpbnNwZWN0b3Jfc2VydmVyCi0KLSAgICAjIERpc2FibGUgYW5pbWF0ZWQg
c21vb3RoIHNjcm9sbGluZyBpZiByZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZSBpcyBkaXNhYmxlZAot
ICAgICFlbmFibGU/KHJlcXVlc3RfYW5pbWF0aW9uX2ZyYW1lKTogV0VCS0lUX0NPTkZJRyAtPSBz
bW9vdGhfc2Nyb2xsaW5nCi0KLSAgICAjIEZ1bGxzY3JlZW4gQVBJIHJlbGllcyBvbiBXZWJLaXQy
Ci0gICAgIWJ1aWxkPyh3ZWJraXQyKTogV0VCS0lUX0NPTkZJRyAtPSBmdWxsc2NyZWVuX2FwaQot
Ci0gICAgIyBXSzIncyBwbHVnaW4gcHJvY2VzcyBjb2RlIHJlcXVpcmVzIE5QQVBJCi0gICAgIWVu
YWJsZT8obmV0c2NhcGVfcGx1Z2luX2FwaSk6IFdFQktJVF9DT05GSUcgLT0gcGx1Z2luX3Byb2Nl
c3MKLQotICAgICMgV2ViIEF1ZGlvIHJlcXVpcmVzIEdTdHJlYW1lci4KLSAgICAhdXNlPyhnc3Ry
ZWFtZXIpOiBXRUJLSVRfQ09ORklHIC09IHdlYl9hdWRpbwotCi0gICAgIyBNaW5pYnJvd3NlciBt
dXN0IGJlIGFibGUgdG8gcXVlcnkgZm9yIFF0VGVzdFN1cHBvcnQKLSAgICBidWlsZD8ocXR0ZXN0
c3VwcG9ydCk6IFdFQktJVF9DT05GSUcgKz0gaGF2ZV9xdHRlc3RzdXBwb3J0Ci0KLSAgICBleHBv
cnQoV0VCS0lUX0NPTkZJRykKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVh
dHVyZXMvZmVhdHVyZXMucHJpIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJl
cy5wcmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1OTQ0ZDE1NjJmOWE2YTYzNjk4
MDFkNWVjZjVlMjgzOGI3ZThmYzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmkKKysr
IC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRoaXMgZmlsZSBj
b250YWlucyBhIHN0YXRpYyBsaXN0IG9mIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdGhlCi0jIEVO
QUJMRV9GT08gZmVhdHVyZXMgb2YgV2ViS2l0LgotIwotIyBJZiBhIGZlYXR1cmUgaXMgZW5hYmxl
ZCwgaXQgbW9zdCBsaWtlbHkgZG9lcyBub3QgaGF2ZSBhbnkgZGV0ZWN0aW9uCi0jIGluIGZlYXR1
cmVzLnByZiBleGNlcHQgYmFzaWMgc2FuaXRhemlvbi4gSWYgYSBmZWF0dXJlIGlzIGRpc2FibGVk
IGl0Ci0jIHdpbGwgaGF2ZSBkZXRlY3Rpb24gaW4gZmVhdHVyZXMucHJmLCB1bmxlc3MgaXQncyBz
b21ldGhpbmcgd2UKLSMgY29tcGxldGVseSBkaXNhYmxlLgotIwotIyBGSVhNRTogQWRkIHdhcm5p
bmcgYWJvdXQgYXV0by1nZW5lcmF0aW5nIHdoZW4gRmVhdHVyZXMucHkgbGFuZAotIwotIyBTZWUg
J1Rvb2xzL3FtYWtlL1JFQURNRScgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0ZW0K
LSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1GRUFUVVJFX0RFRkFVTFRTID0gXAotICAgIEVOQUJMRV8zRF9SRU5E
RVJJTkc9MSBcCi0gICAgRU5BQkxFXzhCSVRfVEVYVFJVTj0wIFwKLSAgICBFTkFCTEVfQUNDRUxF
UkFURURfMkRfQ0FOVkFTPTAgXAotICAgIEVOQUJMRV9CQVRURVJZX1NUQVRVUz0wIFwKLSAgICBF
TkFCTEVfQkxPQj0xIFwKLSAgICBFTkFCTEVfQ0FOVkFTX1BBVEg9MSBcCi0gICAgRU5BQkxFX0NB
TlZBU19QUk9YWT0wIFwKLSAgICBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkc9MSBcCi0gICAgRU5B
QkxFX0NTUF9ORVhUPTAgXAotICAgIEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUs9MSBc
Ci0gICAgRU5BQkxFX0NTU19DT01QT1NJVElORz0xIFwKLSAgICBFTkFCTEVfQ1NTX0RFVklDRV9B
REFQVEFUSU9OPTAgXAotICAgIEVOQUJMRV9DU1NfRVhDTFVTSU9OUz0xIFwKLSAgICBFTkFCTEVf
Q1NTX0ZJTFRFUlM9MSBcCi0gICAgRU5BQkxFX0NTU19JTUFHRV9PUklFTlRBVElPTj0wIFwKLSAg
ICBFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT049MCBcCi0gICAgRU5BQkxFX0NTU19JTUFHRV9T
RVQ9MSBcCi0gICAgRU5BQkxFX0NTU19SRUdJT05TPTEgXAotICAgIEVOQUJMRV9DU1NfU0hBREVS
Uz0wIFwKLSAgICBFTkFCTEVfQ1NTX1NIQVBFUz0xIFwKLSAgICBFTkFCTEVfQ1NTX1NUSUNLWV9Q
T1NJVElPTj0xIFwKLSAgICBFTkFCTEVfQ1NTX1RSQU5TRk9STVNfQU5JTUFUSU9OU19VTlBSRUZJ
WEVEPTEgXAotICAgIEVOQUJMRV9DU1NfVkFSSUFCTEVTPTAgXAotICAgIEVOQUJMRV9DU1MzX0NP
TkRJVElPTkFMX1JVTEVTPTAgXAotICAgIEVOQUJMRV9DU1MzX1RFWFQ9MCBcCi0gICAgRU5BQkxF
X0NTUzNfVEVYVF9MSU5FX0JSRUFLPTAgXAotICAgIEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRM
RVI9MCBcCi0gICAgRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUPTAgXAotICAgIEVOQUJMRV9EQVRB
R1JJRD0wIFwKLSAgICBFTkFCTEVfREFUQUxJU1RfRUxFTUVOVD0xIFwKLSAgICBFTkFCTEVfREFU
QV9UUkFOU0ZFUl9JVEVNUz0wIFwKLSAgICBFTkFCTEVfREVUQUlMU19FTEVNRU5UPTEgXAotICAg
IEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT049MSBcCi0gICAgRU5BQkxFX0RJUkVDVE9SWV9VUExP
QUQ9MCBcCi0gICAgRU5BQkxFX0RPTTRfRVZFTlRTX0NPTlNUUlVDVE9SPTAgXAotICAgIEVOQUJM
RV9ET1dOTE9BRF9BVFRSSUJVVEU9MCBcCi0gICAgRU5BQkxFX0ZBU1RfTU9CSUxFX1NDUk9MTElO
Rz0xIFwKLSAgICBFTkFCTEVfRklMVEVSUz0xIFwKLSAgICBFTkFCTEVfRk9OVF9MT0FEX0VWRU5U
Uz0wIFwKLSAgICBFTkFCTEVfRlRMX0pJVD0wIFwKLSAgICBFTkFCTEVfRlRQRElSPTEgXAotICAg
IEVOQUJMRV9GVUxMU0NSRUVOX0FQST0xIFwKLSAgICBFTkFCTEVfR0FNRVBBRD0wIFwKLSAgICBF
TkFCTEVfR0VPTE9DQVRJT049MSBcCi0gICAgRU5BQkxFX0dFU1RVUkVfRVZFTlRTPTEgXAotICAg
IEVOQUJMRV9ISUdIX0RQSV9DQU5WQVM9MCBcCi0gICAgRU5BQkxFX0lDT05EQVRBQkFTRT0xIFwK
LSAgICBFTkFCTEVfSUZSQU1FX1NFQU1MRVNTPTEgXAotICAgIEVOQUJMRV9JTkRFWEVEX0RBVEFC
QVNFPTAgXAotICAgIEVOQUJMRV9JTlBVVF9TUEVFQ0g9MCBcCi0gICAgRU5BQkxFX0lOUFVUX1RZ
UEVfQ09MT1I9MSBcCi0gICAgRU5BQkxFX0lOUFVUX1RZUEVfREFURT0wIFwKLSAgICBFTkFCTEVf
SU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFPTAgXAotICAgIEVOQUJMRV9JTlBVVF9UWVBF
X0RBVEVUSU1FTE9DQUw9MCBcCi0gICAgRU5BQkxFX0lOUFVUX1RZUEVfTU9OVEg9MCBcCi0gICAg
RU5BQkxFX0lOUFVUX1RZUEVfVElNRT0wIFwKLSAgICBFTkFCTEVfSU5QVVRfVFlQRV9XRUVLPTAg
XAotICAgIEVOQUJMRV9JTlNQRUNUT1I9MSBcCi0gICAgRU5BQkxFX0lOU1BFQ1RPUl9TRVJWRVI9
MSBcCi0gICAgRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVI9MSBcCi0gICAgRU5BQkxFX0xFR0FD
WV9DU1NfVkVORE9SX1BSRUZJWEVTPTAgXAotICAgIEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9O
Uz0xIFwKLSAgICBFTkFCTEVfTEVHQUNZX1ZJRVdQT1JUX0FEQVBUSU9OPTEgXAotICAgIEVOQUJM
RV9MRUdBQ1lfVkVORE9SX1BSRUZJWEVTPTEgXAotICAgIEVOQUJMRV9MRUdBQ1lfV0VCX0FVRElP
PTEgXAotICAgIEVOQUJMRV9MSU5LX1BSRUZFVENIPTEgXAotICAgIEVOQUJMRV9NQVRITUw9MCBc
Ci0gICAgRU5BQkxFX01FRElBX0NBUFRVUkU9MCBcCi0gICAgRU5BQkxFX01FRElBX1NPVVJDRT0w
IFwKLSAgICBFTkFCTEVfTUVESUFfU1RBVElTVElDUz0wIFwKLSAgICBFTkFCTEVfTUVESUFfU1RS
RUFNPTAgXAotICAgIEVOQUJMRV9NRVRFUl9FTEVNRU5UPTEgXAotICAgIEVOQUJMRV9NSFRNTD0x
IFwKLSAgICBFTkFCTEVfTU9VU0VfQ1VSU09SX1NDQUxFPTAgXAotICAgIEVOQUJMRV9OQVZJR0FU
T1JfQ09OVEVOVF9VVElMUz0wIFwKLSAgICBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQST0wIFwK
LSAgICBFTkFCTEVfTkVUV09SS19JTkZPPTAgXAotICAgIEVOQUJMRV9OT1NOSUZGPTAgXAotICAg
IEVOQUJMRV9OT1RJRklDQVRJT05TPTEgXAotICAgIEVOQUJMRV9PUEVOQ0w9MCBcCi0gICAgRU5B
QkxFX09SSUVOVEFUSU9OX0VWRU5UUz0xIFwKLSAgICBFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQ
ST0xIFwKLSAgICBFTkFCTEVfUEVSRk9STUFOQ0VfVElNRUxJTkU9MCBcCi0gICAgRU5BQkxFX1BS
T0dSRVNTX0VMRU1FTlQ9MSBcCi0gICAgRU5BQkxFX1BST01JU0VTPTEgXAotICAgIEVOQUJMRV9Q
Uk9YSU1JVFlfRVZFTlRTPTAgXAotICAgIEVOQUJMRV9RVU9UQT0wIFwKLSAgICBFTkFCTEVfUkVT
T0xVVElPTl9NRURJQV9RVUVSWT0xIFwKLSAgICBFTkFCTEVfUkVTT1VSQ0VfVElNSU5HPTAgXAot
ICAgIEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRT0xIFwKLSAgICBFTkFCTEVfU0NSSVBU
RURfU1BFRUNIPTAgXAotICAgIEVOQUJMRV9TRUNDT01QX0ZJTFRFUlM9MCBcCi0gICAgRU5BQkxF
X1NIQURPV19ET009MCBcCi0gICAgRU5BQkxFX1NIQVJFRF9XT1JLRVJTPTEgXAotICAgIEVOQUJM
RV9TTU9PVEhfU0NST0xMSU5HPTEgXAotICAgIEVOQUJMRV9TUUxfREFUQUJBU0U9MSBcCi0gICAg
RU5BQkxFX1NVQlBJWEVMX0xBWU9VVD0xIFwKLSAgICBFTkFCTEVfU1ZHPTEgXAotICAgIEVOQUJM
RV9TVkdfRk9OVFM9MSBcCi0gICAgRU5BQkxFX1RFTVBMQVRFX0VMRU1FTlQ9MCBcCi0gICAgRU5B
QkxFX1RFWFRfQVVUT1NJWklORz0wIFwKLSAgICBFTkFCTEVfVEhSRUFERURfSFRNTF9QQVJTRVI9
MCBcCi0gICAgRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9MSBcCi0gICAgRU5BQkxFX1RPVUNIX0VW
RU5UUz0xIFwKLSAgICBFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HPTAgXAotICAgIEVOQUJMRV9V
U0VSX1RJTUlORz0wIFwKLSAgICBFTkFCTEVfVklCUkFUSU9OPTAgXAotICAgIEVOQUJMRV9WSURF
Tz0wIFwKLSAgICBFTkFCTEVfVklERU9fVFJBQ0s9MCBcCi0gICAgRU5BQkxFX1ZJRVdfTU9ERV9D
U1NfTUVESUE9MSBcCi0gICAgRU5BQkxFX1dFQkdMPTAgXAotICAgIEVOQUJMRV9XRUJfQVVESU89
MCBcCi0gICAgRU5BQkxFX1dFQl9TT0NLRVRTPTEgXAotICAgIEVOQUJMRV9XRUJfVElNSU5HPTEg
XAotICAgIEVOQUJMRV9XT1JLRVJTPTEgXAotICAgIEVOQUJMRV9YSFJfVElNRU9VVD0xIFwKLSAg
ICBFTkFCTEVfWFNMVD0wIFwKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVy
ZXMvZm9yY2Vfc3RhdGljX2xpYnNfYXNfc2hhcmVkLnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3Mv
ZmVhdHVyZXMvZm9yY2Vfc3RhdGljX2xpYnNfYXNfc2hhcmVkLnByZgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYzMzN2NkYTZmZDk1MTIzNjFkNzZkZmFhMTEwMzgwMWIxZTBhNmIyMy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9xbWFr
ZS9ta3NwZWNzL2ZlYXR1cmVzL2ZvcmNlX3N0YXRpY19saWJzX2FzX3NoYXJlZC5wcmYKKysrIC9k
ZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRmVhdHVyZSB0byBhbGxv
dyBzcGVlZGluZyB1cCBsaW5rIHRpbWVzIGZvciBkZWJ1ZyBidWlsZHMgYnkgYXZvaWRpbmcKLSMg
cmUtbGlua2luZyB0aGUgc3RhdGljIGxpYnJhcmllcyBpbnRvIHRoZSBvbmUgYmlnIHNoYXJlZCBs
aWJyYXJ5LgotIwotIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9yIGFuIG92ZXJ2aWV3IG9m
IHRoZSBidWlsZCBzeXN0ZW0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jb250YWlucyhURU1QTEFURSwgbGli
KSB7Ci0gICAgY29udGFpbnMoQ09ORklHLCBzdGF0aWNsaWIpIHsKLSAgICAgICAgQ09ORklHIC09
IGhpZGVfc3ltYm9scwotICAgICAgICBDT05GSUcgLT0gc3RhdGljbGliCi0gICAgICAgIENPTkZJ
RyArPSBycGF0aAotICAgICAgICBRTUFLRV9DWFhGTEFHUyAtPSAkJFFNQUtFX0NYWEZMQUdTX0hJ
REVTWU1TCi0gICAgICAgIFFNQUtFX0NGTEFHUyAtPSAkJFFNQUtFX0NGTEFHU19ISURFU1lNUwot
ICAgICAgICBRTUFLRV9MRkxBR1MgLT0gJCRRTUFLRV9MRkxBR1NfSElERVNZTVMKLSAgICAgICAg
UU1BS0VfT0JKRUNUSVZFX0NGTEFHUyAtPSAkJFFNQUtFX09CSkVDVElWRV9DRkxBR1NfSElERVNZ
TVMKLSAgICAgICAgREVTVERJUiA9ICQke1JPT1RfQlVJTERfRElSfS9saWIKLQotICAgICAgICAj
IEVuc3VyZSB0aGUgaW5zdGFsbC1uYW1lIG9mIHRoZSBsaWJyYXJpZXMgYXJlIGNvcnJlY3Qgb24g
TWFjIE9TCi0gICAgICAgIG1hY3g6IFFNQUtFX0xGTEFHU19TT05BTUUgPSAkJFFNQUtFX0xGTEFH
U19TT05BTUUkJHtERVNURElSfS8KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9t
a3NwZWNzL2ZlYXR1cmVzL2Z1bmN0aW9ucy5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1
cmVzL2Z1bmN0aW9ucy5wcmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZGYwMDA3
YjRkNmE0MTFiYjM2MmE0NWRlMWI0NjI1ODU4NjAzOGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mdW5j
dGlvbnMucHJmCisrKyAvZGV2L251bGwKQEAgLTEsMzkyICswLDAgQEAKLSMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
IyBUaGlzIGZpbGUgZGVmaW5lcyBhIGZldyB1c2VmdWwgZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9z
ZWQgdG8gdGhlCi0jIHJlYWwgcHJvamVjdCBmaWxlcy4KLSMKLSMgU2VlICdUb29scy9xbWFrZS9S
RUFETUUnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgYnVpbGQgc3lzdGVtCi0jIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotZGVmaW5lUmVwbGFjZSh0b1Nhbml0aXplZFBhdGgpIHsKLSAgICBwYXRoID0gJCQxCi0gICAg
d2luMzItbXN2Yyp8d2luY2UqIHsKLSAgICAgICAgY29tcG9uZW50cyA9ICQkc3BsaXQocGF0aCwg
OikKLSAgICAgICAgY291bnQoY29tcG9uZW50cywgMik6IHBhdGggPSAkJGxvd2VyKCQkZmlyc3Qo
Y29tcG9uZW50cykpOiQkbGFzdChjb21wb25lbnRzKQotICAgICAgICByZXR1cm4oJCRyZXBsYWNl
KHBhdGgsIFxcXFwsIC8pKQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybigkJHBhdGgpCi0g
ICAgfQotfQotCi1kZWZpbmVSZXBsYWNlKHRvU3lzdGVtUGF0aCkgewotICAgIHJldHVybigkJHJl
cGxhY2UoMSwgWy9cXFxcXSwgJCR7UU1BS0VfRElSX1NFUH0pKQotfQotCi1kZWZpbmVSZXBsYWNl
KHRvRXZhbHVhdGFibGVQYXRoKSB7Ci0gICAgcmV0dXJuKCQkcmVwbGFjZSgxLCBcXFxcLCBcXFxc
XFxcXCkpCi19Ci0KLWRlZmluZVJlcGxhY2UodGFyZ2V0U3ViRGlyKSB7Ci0gICAgIyBUaGUgcGF0
aHMgdG8gdGhlIGVsZW1lbnRzIG9mIHRoZSB0aGluIGFyY2hpdmUgYXJlIHN0b3JlZAotICAgICMg
cmVsYXRpdmUgdG8gdGhlIGFyY2hpdmUgaXRzZWxmLCB0aHVzIHdlIGhhdmUgdG8gcHJldmVudAot
ICAgICMgcW1ha2UgZnJvbSBtb3ZpbmcgdGhlIGFyY2hpdmUgYWZ0ZXIgY3JlYXRpb24uCi0gICAg
Z251X3RoaW5fYXJjaGl2ZXM6IHJldHVybigpCi0gICAgZWxzZTogQ09ORklHKGRlYnVnLCBkZWJ1
Z3xyZWxlYXNlKTogcmV0dXJuKGRlYnVnKQotICAgIGVsc2U6IHJldHVybihyZWxlYXNlKQotfQot
Ci1kZWZpbmVSZXBsYWNlKGNvbXB1dGVTdWJkaXJWYXJpYWJsZXMpIHsKLSAgICB1bnNldChzdWJk
aXIpCi0gICAgc3ViZGlyID0gJCQxCi0KLSAgICBzY29wZSA9ICQkc3ViZGlyCi0gICAgcGF0aCA9
ICQkZXZhbCgkJHtzdWJkaXJ9LmZpbGUpCi0gICAgaXNFbXB0eShwYXRoKTogcGF0aCA9ICQkZXZh
bCgkJHtzdWJkaXJ9LnN1YmRpcikKLSAgICBpc0VtcHR5KHBhdGgpIHsKLSAgICAgICAgcGF0aCA9
ICQke3N1YmRpcn0KLSAgICAgICAgIyBXZSBjYW4ndCB1c2Ugc2NvcGUgYXMgYSB2YXJpYWJsZSBz
Y29wZSwgc28gdW5zZXQgaXQgZm9yCi0gICAgICAgICMgbm93IGFuZCB3ZSdsbCBjb21wdXRlIGEg
bmV3IHNjb3BlIGJhc2VkIG9uIHRoZSB0YXJnZXQuCi0gICAgICAgIHVuc2V0KHNjb3BlKQotICAg
IH0KLQotICAgICMgVGVjaG5pY2FsbHkgdGhpcyBjb3VsZCBiZSBhIGRpcmVjdG9yeSwgYnV0IHdl
IGFzc3VtZSBzYW5lIG5hbWluZy4KLSAgICBpc19maWxlID0gJCRmaW5kKHBhdGgsIFxcLnByW2lv
XSQpCi0gICAgaXNFbXB0eShpc19maWxlKSB7Ci0gICAgICAgIHN1YmRpcmVjdG9yeSA9ICQkcGF0
aAotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN1YmRpcmVjdG9yeSA9ICQkZGlybmFtZShwYXRoKQot
ICAgICAgICBmaWxlbmFtZSA9ICQkYmFzZW5hbWUocGF0aCkKLSAgICB9Ci0KLSAgICAjIE1ha2Ug
ZGlyZWN0b3J5IHJlbGF0aXZlCi0gICAgIWlzRW1wdHkoc3ViZGlyZWN0b3J5KTpzdWJkaXJlY3Rv
cnkgPSAkJHJlcGxhY2Uoc3ViZGlyZWN0b3J5LCBeJCRyZV9lc2NhcGUoJCR7X1BST19GSUxFX1BX
RF99KS8sKQotCi0gICAgIWlzRW1wdHkoc3ViZGlyZWN0b3J5KSB7Ci0gICAgICAgIHN1YmRpcl9j
b21tYW5kID0gY2QgJCR0b1N5c3RlbVBhdGgoJCR7c3ViZGlyZWN0b3J5fSQke1FNQUtFX0RJUl9T
RVB9KSAmJgotICAgIH0KLQotICAgIHRhcmdldCA9ICQkZXZhbCgkJHtzdWJkaXJ9LnRhcmdldCkK
LSAgICBpc0VtcHR5KHRhcmdldCkgewotICAgICAgICBzYW5pdGl6ZWRQYXRoID0gJCR0b1Nhbml0
aXplZFBhdGgoJCRwYXRoKQotICAgICAgICB0YXJnZXQgPSBzdWItJCRyZXBsYWNlKHNhbml0aXpl
ZFBhdGgsIFteYS16QS1aMC05X10sIC0pCi0gICAgfQotCi0gICAgaXNFbXB0eShzY29wZSk6IHNj
b3BlID0gJCR0YXJnZXQKLQotICAgIG1ha2VmaWxlID0gJCRldmFsKCQke3N1YmRpcn0ubWFrZWZp
bGUpCi0gICAgaXNFbXB0eShtYWtlZmlsZSkgewotICAgICAgICAhaXNFbXB0eShmaWxlbmFtZSkg
ewotICAgICAgICAgICAgZmlsZWJhc2UgPSAkJHJlcGxhY2UoZmlsZW5hbWUsIFxcLi4qJCwpCi0g
ICAgICAgICAgICBkaXJiYXNlID0gJCRiYXNlbmFtZShzdWJkaXJlY3RvcnkpCi0gICAgICAgICAg
ICAhZXF1YWxzKGZpbGViYXNlLCAkJGRpcmJhc2UpIHsKLSAgICAgICAgICAgICAgICBtYWtlZmls
ZSA9ICQoTUFLRUZJTEUpLiQkZmlsZWJhc2UKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgbWFrZWZpbGUgPSAkKE1BS0VGSUxFKQotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgbWFrZWZpbGUgPSAkKE1BS0VGSUxFKQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgc3ViZGlyX2NvbW1hbmQgPSAkJHRvRXZhbHVhdGFibGVQYXRoKCQkc3ViZGly
X2NvbW1hbmQpCi0gICAgZXZhbCgkJHtzY29wZX0uc3ViZGlyX2NvbW1hbmQgPSAkJHN1YmRpcl9j
b21tYW5kKQotICAgIGV4cG9ydCgkJHtzY29wZX0uc3ViZGlyX2NvbW1hbmQpCi0KLSAgICBldmFs
KCQke3Njb3BlfS50YXJnZXQgPSAkJHRhcmdldCkKLSAgICBleHBvcnQoJCR7c2NvcGV9LnRhcmdl
dCkKLQotICAgIGV2YWwoJCR7c2NvcGV9Lm1ha2VmaWxlID0gJCRtYWtlZmlsZSkKLSAgICBleHBv
cnQoJCR7c2NvcGV9Lm1ha2VmaWxlKQotCi0gICAgcmV0dXJuKCQkc2NvcGUpCi19Ci0KLSMgUW1h
a2UgaGFzIFFNQUtFX0ZJTEVfSU5fUEFUSCwgYnV0IG5vdGhpbmcgZm9yIHRoZSBvdXQgZmlsZQot
IyBUaGlzIGFsbG93cyB5b3UgZG8gZG8gJHtRTUFLRV9GVU5DX0ZJTEVfT1VUX1BBVEh9Ci1kZWZp
bmVSZXBsYWNlKFBBVEgpIHsKLSAgICByZXR1cm4oJCRkaXJuYW1lKDEpKQotfQotCi0jIFdlIG5l
ZWQgYm90aCB2ZXJzaW9ucywgaW4gY2FzZSB0aGUgZmlyc3Qgb25lIHJldHVybnMgYW4gZW1wdHkg
c3RyaW5nCi1kZWZpbmVSZXBsYWNlKEZJTEVfT1VUX1BBVEgpIHsKLSAgICByZXR1cm4oJCRkaXJu
YW1lKDIpKQotfQotCi0jIGFkZFN0cmljdFN1YmRpck9yZGVyQmV0d2VlbihmaXJzdFN1YmRpciwg
c2Vjb25kU3ViZGlyKQotZGVmaW5lVGVzdChhZGRTdHJpY3RTdWJkaXJPcmRlckJldHdlZW4pIHsK
LSAgICB1bnNldChmaXJzdFN1YmRpcikKLSAgICB1bnNldChzZWNvbmRTdWJkaXIpCi0KLSAgICBm
aXJzdFN1YmRpciA9ICQkMQotICAgIHNlY29uZFN1YmRpciA9ICQkMgotCi0gICAgZmlyc3RWYXJp
YWJsZXMgPSAkJGNvbXB1dGVTdWJkaXJWYXJpYWJsZXMoJCR7Zmlyc3RTdWJkaXJ9KQotICAgIHNl
Y29uZFZhcmlhYmxlcyA9ICQkY29tcHV0ZVN1YmRpclZhcmlhYmxlcygkJHtzZWNvbmRTdWJkaXJ9
KQotCi0gICAgIWNvbnRhaW5zKFRFTVBMQVRFLCBzdWJkaXJzKSB7Ci0gICAgICAgIGVycm9yKCJT
dHJpY3Qgc3ViZGlyIGRlcGVuZGVuY2llcyBjYW4gb25seSBiZSB1c2VkIHdpdGggc3ViZGlycyB0
ZW1wbGF0ZSIpCi0gICAgfQotCi0gICAgZmlyc3RTdWJkaXJGaWxlID0gJCRldmFsKCQke2ZpcnN0
U3ViZGlyfS5maWxlKQotICAgIHNlY29uZFN1YmRpckZpbGUgPSAkJGV2YWwoJCR7c2Vjb25kU3Vi
ZGlyfS5maWxlKQotCi0gICAgaXNFbXB0eShmaXJzdFN1YmRpckZpbGUpfGlzRW1wdHkoc2Vjb25k
U3ViZGlyRmlsZSkgewotICAgICAgICBlcnJvcigiTWlzc2luZyBzdWJkaXIgZmlsZSAoJCRmaXJz
dFN1YmRpckZpbGUsICQkc2Vjb25kU3ViZGlyRmlsZSkiKQotICAgIH0KLQotICAgICMgTWFrZSBz
dXJlIHRoZSBvcmRlciBpcyByaWdodAotICAgIFNVQkRJUlMgLT0gJCRzZWNvbmRTdWJkaXIKLSAg
ICBTVUJESVJTICs9ICQkc2Vjb25kU3ViZGlyCi0gICAgTk9fUkVDVVJTSVZFX1FNQUtFX1NVQkRJ
UlMgKz0gJCRmaXJzdFN1YmRpciAkJHNlY29uZFN1YmRpcgotICAgIENPTkZJRyAqPSBvcmRlcmVk
Ci0KLSAgICBmaXJzdF9iYXNlX3RhcmdldCA9IHN1Yi0kJHJlcGxhY2UoZmlyc3RTdWJkaXJGaWxl
LCBbXmEtekEtWjAtOV9dLCAtKQotICAgIHNlY29uZF9iYXNlX3RhcmdldCA9IHN1Yi0kJHJlcGxh
Y2Uoc2Vjb25kU3ViZGlyRmlsZSwgW15hLXpBLVowLTlfXSwgLSkKLQotICAgICMgVXNlIGEgY3Vz
dG9tIHRhcmdldCBmb3IgbWFraW5nIHRoZSBkZXJpdmVkIHNvdXJjZXMsIGFzIHRoZSBkZWZhdWx0
IHRhcmdldAotICAgICMgd2lsbCBkbyAndGVzdCAtZiAkKE1BS0VGSUxFKS5EZXJpdmVkU291cmNl
cyB8fCAkKFFNQUtFKSAuLi4nLCB3aGljaCBjbGFzaGVzCi0gICAgIyB3aXRoIHRoZSBxbWFrZS1y
dW4gb2YgdGhlIC1xbWFrZV9hbGwgdGFyZ2V0LCBhbmQgd2UgZW5kIHVwIHdpdGggYSByYWNlCi0g
ICAgIyBhbmQgcG90ZW50aWFsbHkgaGFsZi13cml0dGVuIG1ha2VmaWxlcy4gVGhlIGN1c3RvbSB0
YXJnZXQgZGVwZW5kcyBleHBsaWNpdGx5Ci0gICAgIyBvbiAtcW1ha2VfYWxsLCB0byBlbnN1cmUg
dGhhdCB3ZSBoYXZlIGEgbWFrZWZpbGUsIGFuZCB0aGVuIGNhbGxzIG1ha2UuCi0gICAgZGVyaXZl
ZF9tYWtlX2Zvcl9xbWFrZSA9ICQke2ZpcnN0X2Jhc2VfdGFyZ2V0fS1tYWtlX2Zvcl9xbWFrZQot
ICAgIGV2YWwoJCR7ZGVyaXZlZF9tYWtlX2Zvcl9xbWFrZX0uZGVwZW5kcyA9ICQke2ZpcnN0X2Jh
c2VfdGFyZ2V0fS1xbWFrZV9hbGwpCi0gICAgZXZhbCgkJHtkZXJpdmVkX21ha2VfZm9yX3FtYWtl
fS5jb21tYW5kcyA9ICQoTUFLRSkgLWYgJCRldmFsKCQke2ZpcnN0U3ViZGlyfS5tYWtlZmlsZSkp
Ci0gICAgUU1BS0VfRVhUUkFfVEFSR0VUUyArPSAkJHtkZXJpdmVkX21ha2VfZm9yX3FtYWtlfQot
Ci0gICAgIyBUaGlzIHRhcmdldCBlbnN1cmVzIHRoYXQgcnVubmluZyAibWFrZSBxbWFrZV9hbGwi
IHdpbGwgZm9yY2UgYm90aCBxbWFrZSBhbmQgbWFrZQotICAgICMgdG8gYmUgcnVuIG9uIHRoZSBk
ZXJpdmVkIHNvdXJjZXMgYmVmb3JlIHJ1bm5pbmcgcW1ha2Ugb24gdGhlIHRhcmdldCwgc28gdGhh
dAotICAgICMgcW1ha2UgY2FuIHBpY2sgdXAgdGhlIHJpZ2h0IGRlcGVuZGVuY2llcyBmb3IgdGhl
IHRhcmdldCBiYXNlZCBvbiB0aGUgZGVyaXZlZAotICAgICMgc291cmNlcyB0aGF0IHdlcmUgZ2Vu
ZXJhdGVkLgotICAgIHRhcmdldF9tYWtlX3FtYWtlID0gJCR7c2Vjb25kX2Jhc2VfdGFyZ2V0fS1x
bWFrZV9hbGwKLSAgICBldmFsKCQke3RhcmdldF9tYWtlX3FtYWtlfS5kZXBlbmRzID0gJCR7ZGVy
aXZlZF9tYWtlX2Zvcl9xbWFrZX0pCi0gICAgUU1BS0VfRVhUUkFfVEFSR0VUUyArPSAkJHt0YXJn
ZXRfbWFrZV9xbWFrZX0KLQotICAgICMgTWFrZSB0aGluZ3Mgd29yayBldmVuIGlmIHFtYWtlIC1y
IGlzIHVzZWQuCi0gICAgQ09ORklHICs9IGRvbnRfcmVjdXJzZQotCi0gICAgZXhwb3J0KFNVQkRJ
UlMpCi0gICAgZXhwb3J0KE5PX1JFQ1VSU0lWRV9RTUFLRV9TVUJESVJTKQotICAgIGV4cG9ydChD
T05GSUcpCi0gICAgZXhwb3J0KCQke3RhcmdldF9tYWtlX3FtYWtlfS50YXJnZXQpCi0gICAgZXhw
b3J0KCQke3RhcmdldF9tYWtlX3FtYWtlfS5kZXBlbmRzKQotICAgIGV4cG9ydCgkJHtkZXJpdmVk
X21ha2VfZm9yX3FtYWtlfS5kZXBlbmRzKQotICAgIGV4cG9ydCgkJHtkZXJpdmVkX21ha2VfZm9y
X3FtYWtlfS5jb21tYW5kcykKLSAgICBleHBvcnQoUU1BS0VfRVhUUkFfVEFSR0VUUykKLSAgICBy
ZXR1cm4odHJ1ZSkKLX0KLQotIyBDaGVjayBpZiB3ZSBoYXZlIHRoZSBnaXZlbiBRdCB2ZXJzaW9u
LiBUaGUgbWFqb3IgdmVyc2lvbiBuZWVkcwotIyB0byBiZSBleGFjdCwgdGhlIG1pbm9yIGFuZCBw
YXRjaCB2ZXJzaW9uIGlzIHNhbWUgb3IgaGlnaGVyCi1kZWZpbmVUZXN0KGhhdmVRdCkgewotICAg
IGNvdW50KEFSR1MsIDEsIGxlc3NUaGFuKXxjb3VudChBUkdTLCAzLCBncmVhdGVyVGhhbikgewot
ICAgICAgICBlcnJvcigiVW5leHBlY3RlZCBudW1iZXIgb2YgYXJndW1lbnRzOiBoYXZlUXQoJCRB
UkdTKSIpCi0gICAgfQotCi0gICAgIWVxdWFscyhRVF9NQUpPUl9WRVJTSU9OLCAkJDEpOiByZXR1
cm4oZmFsc2UpCi0KLSAgICBjb3VudChBUkdTLCAxLCBncmVhdGVyVGhhbikgewotICAgICAgICBs
ZXNzVGhhbihRVF9NSU5PUl9WRVJTSU9OLCAkJDIpOiByZXR1cm4oZmFsc2UpCi0gICAgICAgIGdy
ZWF0ZXJUaGFuKFFUX01JTk9SX1ZFUlNJT04sICQkMik6IHJldHVybih0cnVlKQotCi0gICAgICAg
IGNvdW50KEFSR1MsIDIsIGdyZWF0ZXJUaGFuKSB7Ci0gICAgICAgICAgICBsZXNzVGhhbihRVF9Q
QVRDSF9WRVJTSU9OLCAkJDMpOiByZXR1cm4oZmFsc2UpCi0gICAgICAgICAgICBncmVhdGVyVGhh
bihRVF9QQVRDSF9WRVJTSU9OLCAkJDMpOiByZXR1cm4odHJ1ZSkKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybih0cnVlKQotfQotCi1kZWZpbmVUZXN0KHByb2dyYW1FeGlzdHNJblBhdGgp
IHsKLSAgICB3aW4zMjogcHJvZ3JhbSA9ICQkezF9LmV4ZQotICAgIGVsc2U6IHByb2dyYW0gPSAk
JDEKLQotICAgIFBBVEggPSAiJCQoUEFUSCkiCi0gICAgcGF0aHM9JCRzcGxpdChQQVRILCAkJFFN
QUtFX0RJUkxJU1RfU0VQKQotCi0gICAgR05VVE9PTFNfRElSPSQkW1FUX0hPU1RfREFUQV0vLi4v
Z251d2luMzIvYmluCi0gICAgZXhpc3RzKCQkR05VVE9PTFNfRElSKTogcGF0aHMgKz0gJCRHTlVU
T09MU19ESVIKLQotICAgIGZvcihwLCBwYXRocyk6IGV4aXN0cygkJHAvJCRwcm9ncmFtKTpyZXR1
cm4odHJ1ZSkKLSAgICByZXR1cm4oZmFsc2UpCi19Ci0KLWRlZmluZVRlc3QoYWRkUmVhc29uRm9y
U2tpcHBpbmdCdWlsZCkgewotICAgIHNraXBCdWlsZFJlYXNvbiA9ICIkJHNraXBCdWlsZFJlYXNv
biQke0VPTH0gICAgKiAkJDEiCi0gICAgZXhwb3J0KHNraXBCdWlsZFJlYXNvbikKLX0KLQotZGVm
aW5lVGVzdChwcmVwZW5kRWFjaCkgewotICAgIHVuc2V0KHZhcmlhYmxlKQotICAgIHVuc2V0KHBy
ZWZpeCkKLQotICAgIHZhcmlhYmxlID0gJCQxCi0gICAgcHJlZml4ID0gJCQyCi0KLSAgICBvcmln
aW5hbF92YWx1ZXMgPSAkJHVuaXF1ZSgkJHZhcmlhYmxlKQotCi0gICAgZm9yKHZhbHVlLCBvcmln
aW5hbF92YWx1ZXMpIHsKLSAgICAgICAgdmFsdWVzICs9ICQke3ByZWZpeH0kJHt2YWx1ZX0KLSAg
ICB9Ci0KLSAgICBldmFsKCQkdmFyaWFibGUgPSAkJHZhbHVlcykKLSAgICBleHBvcnQoJCR2YXJp
YWJsZSkKLQotICAgIHJldHVybih0cnVlKQotfQotCi1kZWZpbmVSZXBsYWNlKHJlc29sdmVGaW5h
bExpYnJhcnlOYW1lKSB7Ci0gICAgIWRlYnVnX2FuZF9yZWxlYXNlOiByZXR1cm4oJCQxKQotCi0g
ICAgb3JpZ2luYWxfZnJhbWV3b3JrX25hbWUgPSAkJFFNQUtFX0ZSQU1FV09SS19CVU5ETEVfTkFN
RQotCi0gICAgVEVNUExBVEUgPSBsaWIgIyBTbyB0aGF0IHF0TGlicmFyeVRhcmdldCB3b3Jrcwot
ICAgIHRhcmdldCA9ICQkcXRMaWJyYXJ5VGFyZ2V0KCQkMSkKLQotICAgICMgcXRMaWJyYXJ5VGFy
Z2V0IHdpbGwgZXhwb3J0IFFNQUtFX0ZSQU1FV09SS19CVU5ETEVfTkFNRSwgd2hpY2ggZ2V0cwot
ICAgICMgZXhwb3J0ZWQgbm90IG9ubHkgdG8gdGhpcyBmdW5jdGlvbiBzY29wZSwgYnV0IHRvIG91
ciBjYWxsIHNpdGUuCi0gICAgUU1BS0VfRlJBTUVXT1JLX0JVTkRMRV9OQU1FID0gJCRvcmlnaW5h
bF9mcmFtZXdvcmtfbmFtZQotICAgIGV4cG9ydChRTUFLRV9GUkFNRVdPUktfQlVORExFX05BTUUp
Ci0KLSAgICByZXR1cm4oJCR0YXJnZXQpCi19Ci0KLWRlZmluZVRlc3QobGlua0FnYWluc3RMaWJy
YXJ5KSB7Ci0gICAgdW5zZXQodGFyZ2V0KQotICAgIHRhcmdldCA9ICQkMQotCi0gICAgdW5zZXQo
c291cmNlX2RpcikKLSAgICBzb3VyY2VfZGlyID0gJCQyCi0KLSAgICBsaWJyYXJ5ID0gJCRsb3dl
cigkJHRhcmdldCkKLQotICAgIHRhcmdldCA9ICQkcmVzb2x2ZUZpbmFsTGlicmFyeU5hbWUoJCR0
YXJnZXQpCi0KLSAgICBwYXRoID0gJCRyZXBsYWNlKHNvdXJjZV9kaXIsICQkcmVfZXNjYXBlKCQk
e1JPT1RfV0VCS0lUX0RJUn0pLCAkJHtST09UX0JVSUxEX0RJUn0pLyQkdGFyZ2V0U3ViRGlyKCkK
LQotICAgIGZvcmNlX3N0YXRpY19saWJzX2FzX3NoYXJlZCB7Ci0gICAgICAgICAgICBMSUJTICs9
IC1MJCR7Uk9PVF9CVUlMRF9ESVJ9L2xpYiAtbCQkdGFyZ2V0Ci0gICAgfSBlbHNlIHsKLQotICAg
ICAgICBtYWMgewotICAgICAgICAgICAgTElCUyArPSAtV2wsLWZvcmNlX2xvYWQsJCR7cGF0aH0k
JHtRTUFLRV9ESVJfU0VQfWxpYiQke3RhcmdldH0uYQotICAgICAgICB9IGVsc2U6d2luMzItbXN2
Yyp8d2luY2UqfHdpbjMyLWljYyB7Ci0gICAgICAgICAgICBMSUJTICs9IC9PUFQ6UkVGIC1sJCR0
YXJnZXQKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENPTkZJRyAqPSBub19zbWFydF9s
aWJyYXJ5X21lcmdlCi0gICAgICAgICAgICBMSUJTICs9IC1XbCwtd2hvbGUtYXJjaGl2ZSAtbCQk
dGFyZ2V0IC1XbCwtbm8td2hvbGUtYXJjaGl2ZQotICAgICAgICB9Ci0KLSAgICAgICAgTElCUyAr
PSAtTCQkcGF0aAotCi0gICAgICAgIHdpbjMyLW1zdmMqfHdpbmNlKnx3aW4zMi1pY2MgewotICAg
ICAgICAgICAgUE9TVF9UQVJHRVRERVBTICs9ICQke3BhdGh9JCR7UU1BS0VfRElSX1NFUH0kJHt0
YXJnZXR9LmxpYgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUE9TVF9UQVJHRVRERVBT
ICs9ICQke3BhdGh9JCR7UU1BS0VfRElSX1NFUH1saWIkJHt0YXJnZXR9LmEKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGV4cG9ydChMSUJTKQotICAgIGV4cG9ydChRTUFLRV9MSUJESVIpCi0gICAg
ZXhwb3J0KFBPU1RfVEFSR0VUREVQUykKLSAgICBleHBvcnQoQ09ORklHKQotICAgIHJldHVybih0
cnVlKQotfQotCi1kZWZpbmVUZXN0KHhsaWJBdmFpbGFibGUpIHsKLSAgICBjb250YWlucyhRVF9D
T05GSUcsIHhjYi14bGliKSB7Ci0gICAgICAgIHJldHVybih0cnVlKQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHJldHVybihmYWxzZSkKLSAgICB9Ci19Ci0KLWRlZmluZVRlc3QoYnVpbGQ/KSB7Ci0g
ICAgY29udGFpbnMoV0VCS0lUX0NPTkZJRywgYnVpbGRfJCRsb3dlcigkJDEpKTogcmV0dXJuKHRy
dWUpCi0gICAgcmV0dXJuKGZhbHNlKQotfQotCi1kZWZpbmVUZXN0KGhhdmU/KSB7Ci0gICAgY29u
dGFpbnMoV0VCS0lUX0NPTkZJRywgaGF2ZV8kJGxvd2VyKCQkMSkpOiByZXR1cm4odHJ1ZSkKLSAg
ICByZXR1cm4oZmFsc2UpCi19Ci0KLWRlZmluZVRlc3QodXNlPykgewotICAgIGNvbnRhaW5zKFdF
QktJVF9DT05GSUcsIHVzZV8kJGxvd2VyKCQkMSkpOiByZXR1cm4odHJ1ZSkKLSAgICByZXR1cm4o
ZmFsc2UpCi19Ci0KLWRlZmluZVRlc3QoZW5hYmxlPykgewotICAgIGNvbnRhaW5zKFdFQktJVF9D
T05GSUcsICQkbG93ZXIoJCQxKSk6IHJldHVybih0cnVlKQotICAgIHJldHVybihmYWxzZSkKLX0K
LQotIyBVc2VkIGJ5IGNvbmZpZ0RlZmluZXMgYmVsb3cKLWluY2x1ZGUoZmVhdHVyZXMucHJpKQot
Ci0jIFR1cm4gV2Via2l0IGNvbmZpZyBpbnRvIGRlZmluZXMKLWRlZmluZVJlcGxhY2UoY29uZmln
RGVmaW5lcykgewotICAgIHVuc2V0KGRlZmluZXMpCi0KLSAgICBhcmdzID0gJCRzcGxpdCgxLCB8
KQotCi0gICAgcG9zc2libGVfYXJncyA9IGVuYWJsZSBoYXZlIHVzZSBwbHVnaW5fYXJjaGl0ZWN0
dXJlCi0gICAgIWlzRW1wdHkoYXJncykgewotICAgICAgICBmb3IoYXJnLCBwb3NzaWJsZV9hcmdz
KTogY29udGFpbnMoYXJncywgJCRhcmcpOiBDT05GSUcgKz0gJCRhcmcKLSAgICB9IGVsc2Ugewot
ICAgICAgICBDT05GSUcgKz0gJCRwb3NzaWJsZV9hcmdzCi0gICAgfQotCi0gICAgZm9yKGNvbmZp
ZywgV0VCS0lUX0NPTkZJRykgewotICAgICAgICBtYXRjaCA9ICQkZmluZChjb25maWcsICJeYnVp
bGRfIikKLSAgICAgICAgIWlzRW1wdHkobWF0Y2gpIHsKLSAgICAgICAgICAgICMgV2UgZG9uJ3Qg
dHJhbnNsYXRlIGJ1aWxkXyB0byBkZWZpbmVzCi0gICAgICAgICAgICBuZXh0KCkKLSAgICAgICAg
fQotICAgICAgICBtYXRjaCA9ICQkZmluZChjb25maWcsICJeaGF2ZV8iKQotICAgICAgICAhaXNF
bXB0eShtYXRjaCkgewotICAgICAgICAgICAgaGF2ZTogZGVmaW5lcyArPSAkJHVwcGVyKCQkY29u
ZmlnKT0xCi0gICAgICAgICAgICBuZXh0KCkKLSAgICAgICAgfQotICAgICAgICBtYXRjaCA9ICQk
ZmluZChjb25maWcsICJecGx1Z2luX2FyY2hpdGVjdHVyZV8iKQotICAgICAgICAhaXNFbXB0eSht
YXRjaCkgewotICAgICAgICAgICAgcGx1Z2luX2FyY2hpdGVjdHVyZTogZGVmaW5lcyArPSAkJHVw
cGVyKCQkY29uZmlnKT0xCi0gICAgICAgICAgICBuZXh0KCkKLSAgICAgICAgfQotICAgICAgICBt
YXRjaCA9ICQkZmluZChjb25maWcsICJedXNlXyIpCi0gICAgICAgICFpc0VtcHR5KG1hdGNoKSB7
Ci0gICAgICAgICAgICB1c2U6IGRlZmluZXMgKz0gV1RGXyQkdXBwZXIoJCRjb25maWcpPTEKLSAg
ICAgICAgICAgIG5leHQoKQotICAgICAgICB9Ci0KLSAgICAgICAgZW5hYmxlOiBkZWZpbmVzICs9
IEVOQUJMRV8kJHVwcGVyKCQkY29uZmlnKT0xCi0gICAgfQotCi0gICAgIyBUbyBwcmV2ZW50IGNs
YXNoZXMgd2l0aCBQbGF0Zm9ybS5oLCB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkKLSAgICAjIGRpc2Fi
bGUgZmVhdHVyZXMgdGhhdCBhcmUgbm90IGVuYWJsZWQuCi0gICAgZm9yKGRlZmluZSwgRkVBVFVS
RV9ERUZBVUxUUykgewotICAgICAgICBhbnlGZWF0dXJlRGVmaW5lID0gJCRmaW5kKGRlZmluZSwg
PS4kKQotICAgICAgICBpc0VtcHR5KGFueUZlYXR1cmVEZWZpbmUpOiBuZXh0KCkKLQotICAgICAg
ICBlbmFibGVkRmVhdHVyZSA9ICQkcmVwbGFjZShhbnlGZWF0dXJlRGVmaW5lLCA9LiQsID0xKQot
ICAgICAgICBkaXNhYmxlZEZlYXR1cmUgPSAkJHJlcGxhY2UoYW55RmVhdHVyZURlZmluZSwgPS4k
LCA9MCkKLQotICAgICAgICAhY29udGFpbnMoZGVmaW5lcywgJCRlbmFibGVkRmVhdHVyZSkgewot
ICAgICAgICAgICAgZGVmaW5lcyArPSAkJGRpc2FibGVkRmVhdHVyZQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuKCQkZGVmaW5lcykKLX0KLQotZGVmaW5lUmVwbGFjZShqYXZhc2NyaXB0
RmVhdHVyZURlZmluZXMpIHsKLSAgICBkZWZpbmVzID0gTEFOR1VBR0VfSkFWQVNDUklQVD0xICQk
Y29uZmlnRGVmaW5lcyhlbmFibGUpCi0gICAgcmV0dXJuKCQkZGVmaW5lcykKLX0KLQotZGVmaW5l
UmVwbGFjZShzZXRFbnZpcm9ubWVudFZhcmlhYmxlKSB7Ci0gIHZhcmlhYmxlID0gJCQxCi0gIHZh
bHVlID0gJCQyCi0gIHdpbl9jbWRfc2hlbGwgewotICAgICAgcmV0dXJuKChzZXQgXCIkJHZhcmlh
YmxlPSQkdmFsdWVcIikpCi0gIH0KLSAgcmV0dXJuKGV4cG9ydCBcIiQkdmFyaWFibGU9JCR2YWx1
ZVwiKQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9ncHJvZi5w
cmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2dwcm9mLnByZgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNTFiNzhjM2IwOWYzMTg3ZWQ4Y2IwMDA1NGM3MmY0YWU0MTQ1Mzk5
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9x
bWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2dwcm9mLnByZgorKysgL2Rldi9udWxsCkBAIC0xLDExICsw
LDAgQEAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUaGlzIG9wdGlvbmFsIGZlYXR1cmUgZmlsZSBhZGRzIHJ1
bGVzIHRoYXQgbWFrZSBydW5uaW5nIGdwcm9mCi0jIG9uIFF0V2ViS2l0IGVhc2llci4KLSMKLSMg
U2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgYnVpbGQgc3lz
dGVtCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotYnVpbGQ/KHdlYmtpdDIpOiBlcnJvcigiV2ViS2l0MiBpcyBu
b3Qgc3VwcG9ydGVkIHdpdGggZ3Byb2YiKQotCi1RTUFLRV9DWFhGTEFHUyArPSAtcGcKLVFNQUtF
X0xGTEFHUyArPSAtcGcKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMv
bWFjL2RlZmF1bHRfcG9zdC5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL21hYy9k
ZWZhdWx0X3Bvc3QucHJmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTc4YTcwMzk0
ODEzODlmNjM5NDE4NmE0OWVmODAwNTdiZTk2YzUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvbWFjL2Rl
ZmF1bHRfcG9zdC5wcmYKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSMgTWFjIE9TIFggc3BlY2lmaWMgZGVmYXVsdHMKLSMKLSMgU2VlICdUb29scy9xbWFrZS9S
RUFETUUnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgYnVpbGQgc3lzdGVtCi0jIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotIyBXZSBkb24ndCB3YW50IHZlcmlmeSBhbmQgb3RoZXIgcGxhdGZvcm0gbWFjcm9zIHRvIHBv
bGx1dGUgdGhlIG5hbWVzcGFjZQotREVGSU5FUyArPSBfX0FTU0VSVF9NQUNST1NfREVGSU5FX1ZF
UlNJT05TX1dJVEhPVVRfVU5ERVJTQ09SRVM9MAotCi1sb2FkKGRlZmF1bHRfcG9zdCkKZGlmZiAt
LWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvbWFjL2RlZmF1bHRfcHJlLnByZiBi
L1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvbWFjL2RlZmF1bHRfcHJlLnByZgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU3YmJjNDM2YjA0ODE4M2EzNWFhMjFiODY2NmI1ODdh
NWU3OWI2MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9U
b29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL21hYy9kZWZhdWx0X3ByZS5wcmYKKysrIC9kZXYv
bnVsbApAQCAtMSwxMiArMCwwIEBACi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgTWFjIE9TIFggc3BlY2lmaWMg
ZGVmYXVsdHMKLSMKLSMgU2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBvdmVydmlldyBv
ZiB0aGUgYnVpbGQgc3lzdGVtCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ09ORklHIC09IGFwcF9idW5kbGUK
LQotbG9hZChkZWZhdWx0X3ByZSkKLQotZGVidWc6IENPTkZJRyArPSB1c2VfYWxsX2luX29uZV9m
aWxlcwotCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL21pbmltYWxf
cXQucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9taW5pbWFsX3F0LnByZgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRlMmQzOWVlZTM2NWQ3ZWJiZWJlNzI2NTU4MTU5
ZWZiMGVmZTViMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL21pbmltYWxfcXQucHJmCisrKyAvZGV2L251
bGwKQEAgLTEsMzIgKzAsMCBAQAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFByZXRlbmQgdGhhdCB3ZSBhcmUg
YnVpbGRpbmcgYWdhaW5zdCBhIG1pbmltYWwgUXQgdmVyc2lvbgotIwotIyBTZWUgJ1Rvb2xzL3Ft
YWtlL1JFQURNRScgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0ZW0KLSMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1ERUZJTkVTICo9IFwKLSAgICBRVF9OT19BTklNQVRJT04gXAotICAgIFFUX05PX0JF
QVJFUk1BTkFHRU1FTlQgXAotICAgIFFUX05PX0NMSVBCT0FSRCBcCi0gICAgUVRfTk9fQ09NQk9C
T1ggXAotICAgIFFUX05PX0NPTkNVUlJFTlQgXAotICAgIFFUX05PX0NSQVNISEFORExFUiBcCi0g
ICAgUVRfTk9fQ1VSU09SIFwKLSAgICBRVF9OT19ERVNLVE9QU0VSVklDRVMgXAotICAgIFFUX05P
X0ZJTEVESUFMT0cgXAotICAgIFFUX05PX0dSQVBISUNTRUZGRUNUIFwKLSAgICBRVF9OT19JTSBc
Ci0gICAgUVRfTk9fSU5QVVRESUFMT0cgXAotICAgIFFUX05PX0xJTkVFRElUIFwKLSAgICBRVF9O
T19NRVNTQUdFQk9YIFwKLSAgICBRVF9OT19PUEVOU1NMIFwKLSAgICBRVF9OT19QUklOVEVSIFwK
LSAgICBRVF9OT19RVVVJRF9TVFJJTkcgXAotICAgIFFUX05PX1NIT1JUQ1VUIFwKLSAgICBRVF9O
T19TVFlMRV9TVFlMRVNIRUVUIFwKLSAgICBRVF9OT19TWVNURU1UUkFZSUNPTiBcCi0gICAgUVRf
Tk9fVEVNUE9SQVJZRklMRSBcCi0gICAgUVRfTk9fVE9PTFRJUCBcCi0gICAgUVRfTk9fVU5ET0NP
TU1BTkQgXAotICAgIFFUX05PX1VORE9TVEFDSyBcCi0gICAgUVRfTk9fWFJFTkRFUgpkaWZmIC0t
Z2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9wcm9kdWN0aW9uX2J1aWxkLnByZiBi
L1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvcHJvZHVjdGlvbl9idWlsZC5wcmYKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ODBkMDlkMDk0ZjIyNjdkNTYxNzEwODdhNDA1MmU5
ZmZlOTNmM2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
VG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9wcm9kdWN0aW9uX2J1aWxkLnByZgorKysgL2Rl
di9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSMgQWxsIGluIG9uZSBmaWxlcyByZWR1Y2UgbWVtb3J5
IHVzYWdlIGF0IGxpbmsgdGltZS4gQXQgY29tcGlsZXIgdGltZSB0aGUgY29kZQotIyB2aXNpYmls
aXR5IGZvciB0aGUgY29tcGlsZXIgaW5jcmVhc2VzIGFuZCBmYXN0ZXIgbW9yZSBjb21wYWN0IGNv
ZGUgY2FuIGJlIHByb2R1Y2VkLAotIyBzbyB0dXJuIGl0IG9uIGluIHByb2R1Y3Rpb24gYnVpbGRz
LgotQ09ORklHICo9IHVzZV9hbGxfaW5fb25lX2ZpbGVzCi0KLSMgQnVpbGRzIHdpdGggZGVidWcg
ZmxhZ3MgcmVzdWx0IGluIGEgaHVnZSBhbW91bnQgb2Ygc3ltYm9scyB3aXRoIHRoZSBHTlUgdG9v
bGNoYWluLAotIyByZXN1bHRpbmcgaW4gdGhlIG5lZWQgb2Ygc2V2ZXJhbCBnaWdhYnl0ZXMgb2Yg
bWVtb3J5IGF0IGxpbmstdGltZS4gUmVkdWNlIHRoZSBwcmVzc3VyZQotIyBieSBjb21waWxpbmcg
YW55IHN0YXRpYyBsaWJyYXJ5IGxpa2UgV1RGIG9yIEpTQyB3aXRoIHJlbGVhc2UgZmxhZ3MgaW5z
dGVhZCBhbmQga2VlcCBkZWJ1ZwotIyBzeW1ib2xzIGZvciB0aGUgc3RhdGljIGxpYnJhcmllcyB0
aGF0IGltcGxlbWVudCBBUEkuCi1saW51eC0qfHdpbjMyLWcrKyo6aWYoQ09ORklHKGRlYnVnLCBk
ZWJ1Z3xyZWxlYXNlKXxjb250YWlucyhRVF9DT05GSUcsc2VwYXJhdGVfZGVidWdfaW5mbykpOmNv
bnRhaW5zKFRFTVBMQVRFLCBsaWIpOnN0YXRpY2xpYiB7Ci0gICAgIWVxdWFscyhUQVJHRVQsIFdl
YktpdDIpOiFlcXVhbHMoVEFSR0VULCBXZWJLaXRXaWRnZXRzKSB7Ci0gICAgICAgIENPTkZJRyAr
PSBub19kZWJ1Z19pbmZvCi0gICAgICAgIENPTkZJRyAtPSBzZXBhcmF0ZV9kZWJ1Z19pbmZvCi0g
ICAgICAgIFFNQUtFX0NGTEFHUyArPSAkJFFNQUtFX0NGTEFHU19SRUxFQVNFCi0gICAgICAgIFFN
QUtFX0NYWEZMQUdTICs9ICQkUU1BS0VfQ1hYRkxBR1NfUkVMRUFTRQotICAgIH0KLX0KZGlmZiAt
LWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvcnBhdGgucHJmIGIvVG9vbHMvcW1h
a2UvbWtzcGVjcy9mZWF0dXJlcy9ycGF0aC5wcmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDhkYmM0MmYxMzc4NDlhNzAxMDdmODIyNDNhM2FjYmJkOTZhN2FmMmYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9m
ZWF0dXJlcy9ycGF0aC5wcmYKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSMgU2V0IHJwYXRoIGZvciB0aGUgYXBwbGljYXRpb24vbGlicmFyeSB3ZSdyZSBidWls
ZGluZwotIwotIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9yIGFuIG92ZXJ2aWV3IG9mIHRo
ZSBidWlsZCBzeXN0ZW0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1lcXVhbHMoUk9PVF9CVUlMRF9ESVIsICQk
ZGlybmFtZShERVNURElSKSk6IFJQQVRIRElSX1JFTEFUSVZFX1RPX0RFU1RESVIgPSAuLi9saWIK
LQotbGludXgtKjohaXNFbXB0eShSUEFUSERJUl9SRUxBVElWRV9UT19ERVNURElSKSB7Ci0gICAg
IyBEbyB0aGUgcnBhdGggYnkgaGFuZCBzaW5jZSBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgT1JJ
R0lOIGluIFFNQUtFX1JQQVRIRElSCi0gICAgIyB0aGlzIGV4cGFuZHMgdG8gJE9SSUdJTiAoYWZ0
ZXIgcW1ha2UgYW5kIG1ha2UpLCBpdCBkb2VzIE5PVCByZWFkIGEgcW1ha2UgdmFyLgotICAgIFFN
QUtFX1JQQVRIRElSID0gXCRcJE9SSUdJTi8kJHtSUEFUSERJUl9SRUxBVElWRV9UT19ERVNURElS
fSAkJHtRTUFLRV9SUEFUSERJUn0KLSAgICBSUEFUSCA9ICQkam9pbihRTUFLRV9SUEFUSERJUiwg
IjoiKQotCi0gICAgUU1BS0VfTEZMQUdTICs9IC1XbCwteixvcmlnaW4gXCctV2wsLXJwYXRoLCQk
e1JQQVRIfVwnCi0gICAgUU1BS0VfUlBBVEhESVIgPQotfSBlbHNlIHsKLSAgICBRTUFLRV9SUEFU
SERJUiA9ICQke1JPT1RfQlVJTERfRElSfS9saWIgJCR7UU1BS0VfUlBBVEhESVJ9Ci19Ci0KLSMg
RklYTUU6IEZvciBRdDUgdGhpcyB3aWxsIG9ubHkgZ2l2ZSBjb3JyZWN0IHJwYXRoIGZvciB0aGUg
dG9vbHMgdGhhdCBjb21lIHdpdGggV2ViS2l0Ci0jIEFueSBjbGllbnQgYXBwbGljYXRpb24gYnVp
bHQgYWdhaW5zdCBhIGRldmVsb3Blci1idWlsZCBvZiBRdCArIFdlYktpdCAodGhhdCBkb2VzCi0j
IFFUICs9IHdlYmtpdCkgd2lsbCBub3QgZ2V0IHRoZSBycGF0aCBwb2ludGluZyB0byB0aGUgc3Rh
bmQtYWxvbmUgV2ViS2l0LWJ1aWxkLAotIyBhbmQgd2lsbCBoYXZlIHRvIHNldCBMRF9MSUJSQVJZ
X1BBVEggb3IgZG8gdGhlaXIgb3duIHJwYXRoIGxvZ2ljLiBUaGlzIG5lZWRzCi0jIHRvIGJlIGZp
eGVkIG9uIHRoZSBRdCBzaWRlLgpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0
dXJlcy91bml4L2RlZmF1bHRfcG9zdC5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVz
L3VuaXgvZGVmYXVsdF9wb3N0LnByZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGEx
YzZiNWZjYzExMzUyMzJkMzJkMjE2MmYxZGU1NWQ5NzA4YjVmNy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVz
L3VuaXgvZGVmYXVsdF9wb3N0LnByZgorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLSMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotIyBVbml4IHNwZWNpZmljIGRlZmF1bHRzCi0jCi0jIFNlZSAnVG9vbHMvcW1h
a2UvUkVBRE1FJyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHN5c3RlbQotIyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLSMgVXNlIFNTRTIgZmxvYXRpbmcgcG9pbnQgbWF0aCBvbiAzMiBiaXQgaW5zdGVhZCBv
ZiB0aGUgZGVmYXVsdAotIyAzODcgdG8gbWFrZSBsYXlvdXQgdGVzdCByZXN1bHRzIHNhbWUgb24g
MzIgYW5kIG9uIDY0IGJpdCBidWlsZHMuCi0jIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTI4MTAjYzM5IGZvciBkZXRhaWxzLgotbGludXgtZysrKjppc0VxdWFs
KFFUX0FSQ0gsaTM4NikgewotICAgIFFNQUtFX0NGTEFHUyArPSAtbWFyY2g9cGVudGl1bTQgLW1z
c2UyIC1tZnBtYXRoPXNzZQotICAgIFFNQUtFX0NYWEZMQUdTICs9IC1tYXJjaD1wZW50aXVtNCAt
bXNzZTIgLW1mcG1hdGg9c3NlCi0KLSAgICAjIFVzZSB0aGUgc3RhYnMgZm9ybWF0IGZvciAzMiBi
aXQgZGVidWcgYnVpbGRzIHRvIG1ha2UgdGhlIG9iamVjdCBmaWxlcyBhIGJpdCBzbWFsbGVyLgot
ICAgIFFNQUtFX0NYWEZMQUdTX0RFQlVHIC09IC1nCi0gICAgUU1BS0VfQ1hYRkxBR1NfREVCVUcg
Kz0gLWdzdGFicwotfQotCi1saW51eC0qZysrKiB7Ci0gICAgIXByb2R1Y3Rpb25fYnVpbGQgewot
ICAgICAgICAjIFRyZWF0IHdhcm5pbmdzIGFzIGVycm9ycyBvbiB4ODYvTGludXgvR0NDCi0gICAg
ICAgIGlzRXF1YWwoUVRfQVJDSCx4ODZfNjQpfGlzRXF1YWwoUVRfQVJDSCxpMzg2KTogUU1BS0Vf
Q1hYRkxBR1MgKz0gLVdlcnJvcgotICAgIH0KLX0KLQotY29udGFpbnMoVEVNUExBVEUsIGFwcCk6
IENPTkZJRyArPSBycGF0aAotCi1pc0VxdWFsKFFUX0FSQ0gsaTM4Nik6Q09ORklHKGRlYnVnLCBk
ZWJ1Z3xyZWxlYXNlKSB7Ci0gICMgTWFrZSBsZCBub3QgY2FjaGUgdGhlIHN5bWJvbCB0YWJsZXMg
b2YgaW5wdXQgZmlsZXMgaW4gbWVtb3J5IHRvIGF2b2lkIG1lbW9yeSBleGhhdXN0aW9uIGR1cmlu
ZyB0aGUgbGlua2luZyBwaGFzZS4KLSAgY29uZmlnX2dudWxkOiBRTUFLRV9MRkxBR1MgKz0gLVds
LC0tbm8ta2VlcC1tZW1vcnkKLX0KLQotbG9hZChkZWZhdWx0X3Bvc3QpCmRpZmYgLS1naXQgYS9U
b29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3VuaXgvZGVmYXVsdF9wcmUucHJmIGIvVG9vbHMv
cW1ha2UvbWtzcGVjcy9mZWF0dXJlcy91bml4L2RlZmF1bHRfcHJlLnByZgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYWFmYzQ4Y2ViNGUyZjlhZmU3NDI2OThlMDIyYjFlOGI5YWRiZGMz
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9x
bWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3VuaXgvZGVmYXVsdF9wcmUucHJmCisrKyAvZGV2L251bGwK
QEAgLTEsMjIgKzAsMCBAQAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFVuaXggc3BlY2lmaWMgZGVmYXVsdHMK
LSMKLSMgU2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgYnVp
bGQgc3lzdGVtCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9hZChmdW5jdGlvbnMpCi0KLUNPTkZJRyArPSBv
YmplY3RfcGFyYWxsZWxfdG9fc291cmNlCi0KLSMgRXhwb3NlIGlmIHdlIGFyZSBidWlsZGluZyBp
bnNpZGUgU2NyYXRjaGJveAotU0JPWF9DSEVDSyA9ICQkKF9TQk9YX0RJUikKLSFpc0VtcHR5KFNC
T1hfQ0hFQ0spOiBDT05GSUcgKz0gc2NyYXRjaGJveAotCi0jIElmIFF0IGlzIGNvbmZpZ3VyZWQg
d2l0aCBlbWJlZGRlZCBvciBRUEEgd2Ugc2V0IGEgY29udmVuaWVuY2UgY29uZmlnCi0jIGZsYWcg
dGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IGZvciBlaXRoZXIgb2YgdGhlc2Ugc2l0dWF0aW9ucy4K
LWNvbnRhaW5zKFFUX0NPTkZJRywgcXBhKXxjb250YWlucyhRVF9DT05GSUcsIGVtYmVkZGVkKTog
Q09ORklHICs9IGVtYmVkZGVkCi0KLSMgUmVkdWNlIGxpbmtpbmcgbWVtb3J5IHByZXNzdXJlIG9u
IDMyLWJpdCBkZWJ1ZyBidWlsZHMgb24gTGludXgKLWxpbnV4LWcrKyo6Q09ORklHKGRlYnVnLCBk
ZWJ1Z3xyZWxlYXNlKTppc0VxdWFsKFFUX0FSQ0gsaTM4Nik6IENPTkZJRyArPSB1c2VfYWxsX2lu
X29uZV9maWxlcwotCi1sb2FkKGRlZmF1bHRfcHJlKQpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2Uv
bWtzcGVjcy9mZWF0dXJlcy91bml4L2ljYy5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1
cmVzL3VuaXgvaWNjLnByZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTliZmRkZDFj
ZDMyNGE3YTBjMTVhMmFlNWZjNWJjYmI4NDNiMTFhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3VuaXgv
aWNjLnByZgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotIyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRo
aXMgb3B0aW9uYWwgZmVhdHVyZSBmaWxlIGFkZHMgcnVsZXMgdGhhdCBjb21waWxlIHVzaW5nIElu
dGVsCi0jIGNvbXBpbGVyIGVhc2llci4KLSMKLSMgU2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZv
ciBhbiBvdmVydmlldyBvZiB0aGUgYnVpbGQgc3lzdGVtCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUU1BS0Vf
Q1hYRkxBR1MgKz0gLXdkNjgsMTYxLDE3NSwxNzcsMjM5LDQxMSw2NTQsODY0LDg3MywxMTI1LDIw
ODksMjE5NgpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy91c2VfYWxs
X2luX29uZV9maWxlcy5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3VzZV9hbGxf
aW5fb25lX2ZpbGVzLnByZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE2ZGNmYzVh
YWQ4MjZlZTEwYTU4YWQ5OTQzOTI3MzU5MWJmZGE3Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3VzZV9h
bGxfaW5fb25lX2ZpbGVzLnByZgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotIyBUaGlzIGZlYXR1cmUgZW5hYmxlcyB0aGUgdXNlIG9mIEFsbEluT25lLmNwcCBm
aWxlcyBieSBhZGRpbmcgdGhlbQotIyB0byBTT1VSQ0VTIGFuZCByZW1vdmluZyB0aGUgc291cmNl
cyB0aGUgY29ycmVzcG9uZGluZyBmaWxlcyBpbmNsdWRlCi0jIGZyb20gU09VUkNFUywgdG8gYXZv
aWQgZHVwbGljYXRlZCBjb21waWxhdGlvbiB1bml0cy4KLSMKLSMgU2VlICdUb29scy9xbWFrZS9S
RUFETUUnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgYnVpbGQgc3lzdGVtCi0jIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotIyBHbG9iYmluZyBhbGwgZG9lcyBub3Qgd29yayB5ZXQsIG5vdCBhbGwgQWxsSW5PbmUgZmls
ZXMgYnVpbGQgcmVsaWFibHkgeWV0LgotIyBTbyBpbnN0ZWFkIHdlIHNlbGVjdCB0aGVtIG1hbnVh
bGx5LgotI2NvbGxlY3Rpb24gPSAkJGZpbGVzKCQkX1BST19GSUxFX1BXRF8vKkFsbEluT25lLmNw
cCwgdHJ1ZSkKLWNvbGxlY3Rpb24gPSAkJEFMTF9JTl9PTkVfU09VUkNFUwotCi1mb3IoY29sbGVj
dGlvbkZpbGUsIGNvbGxlY3Rpb24pIHsKLSAgICBsaW5lcyA9ICQkY2F0KCQkX1BST19GSUxFX1BX
RF8vJCRjb2xsZWN0aW9uRmlsZSwgbGluZXMpCi0gICAgZm9yKGxpbmUsIGxpbmVzKSB7Ci0gICAg
ICAgIGxpbmUgPSAkJGZpbmQobGluZSwgIl4uK2luY2x1ZGUgXCIoLiopXCIiKQotICAgICAgICBp
c0VtcHR5KGxpbmUpOiBuZXh0KCkKLSAgICAgICAgbGluZSB+PSBzL14uK2luY2x1ZGUgXCIoLiop
XCIvXFwxLwotICAgICAgICBzb3VyY2UgPSAkJGRpcm5hbWUoY29sbGVjdGlvbkZpbGUpLyQkbGlu
ZQotICAgICAgICBjb250YWlucyhTT1VSQ0VTLCAkJHNvdXJjZSkgewotICAgICAgICAgICAgU09V
UkNFUyAtPSAkJHNvdXJjZQotICAgICAgICAgICAgdG9va0Zyb21Tb3VyY2VzID0gdHJ1ZQotICAg
ICAgICB9Ci0gICAgfQotICAgICFpc0VtcHR5KHRvb2tGcm9tU291cmNlcyk6IFNPVVJDRVMgKj0g
JCRjb2xsZWN0aW9uRmlsZQotfQotCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL2Zl
YXR1cmVzL3ZhbGdyaW5kLnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvdmFsZ3Jp
bmQucHJmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTgxMTU0YTkxMGU2MDdlZDNj
NzFiZjViODYyZWJjMjFlYzcwYWNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvdmFsZ3JpbmQucHJmCisr
KyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRoaXMgb3B0aW9u
YWwgZmVhdHVyZSBmaWxlIGFkZHMgcnVsZXMgdGhhdCBtYWtlIHJ1bm5pbmcgdmFsZ3JpbmQKLSMg
b24gUXRXZWJLaXQgZWFzaWVyLgotIwotIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9yIGFu
IG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0ZW0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1RTUFLRV9DWFhG
TEFHUyArPSAtZwotUU1BS0VfTEZMQUdTICs9IC1nCi1ERUZJTkVTICs9IFVTRV9TWVNURU1fTUFM
TE9DPTEKLURFRklORVMgKz0gRU5BQkxFX0pJVD0wCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9t
a3NwZWNzL2ZlYXR1cmVzL3dlYmtpdF9tb2R1bGVzLnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3Mv
ZmVhdHVyZXMvd2Via2l0X21vZHVsZXMucHJmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxODkzODc4MzUyNzBjNzNlNTY5NzQxNmE3OTA3YjI0MGE1M2ZhYmI4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVh
dHVyZXMvd2Via2l0X21vZHVsZXMucHJmCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAot
IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0jIFVzZWQgZm9yIGFwcGx5aW5nIHRoZSBjb250ZW50IG9mIHRoZSBXRUJL
SVQgdmFyaWFibGUgaW50byB0aGUKLSMgZWZmZWN0IGVhY2ggbGlicmFyeS9tb2R1bGUgaGFzIG9u
IHZhcmlhYmxlcyBzdWNoIGFzIExJQlMgYW5kIFFULgotIwotIyBTZWUgJ1Rvb2xzL3FtYWtlL1JF
QURNRScgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0ZW0KLSMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0jIFJlb3JkZXIgbGlicmFyaWVzIHNvIHRoYXQgdGhlIGxpbmsgYW5kIGluY2x1ZGUgb3JkZXIg
aXMgY29ycmVjdCwKLSMgYW5kIG1ha2Ugc3VyZSB0aGUgY2FzZSBtYXRjaGVzIHRoZSBvcmlnaW5h
bCBjYXNlLgotbGlicmFyaWVzID0gV2ViS2l0MSBXZWJLaXQyIFdlYkNvcmUgQU5HTEUgSmF2YVNj
cmlwdENvcmUgV1RGCi1mb3IobGlicmFyeSwgbGlicmFyaWVzKSB7Ci0gICAgY29udGFpbnMoV0VC
S0lULCAkJGxvd2VyKCQkbGlicmFyeSkpIHsKLSAgICAgICAgV0VCS0lUIC09ICQkbG93ZXIoJCRs
aWJyYXJ5KQotICAgICAgICBXRUJLSVQgKj0gJCRsaWJyYXJ5Ci0gICAgfQotfQotCi0jIExvYWQg
dGhlIC5wcmkgZmlsZSBmb3IgZWFjaCBsaWJyYXJ5LCB0byBwaWNrIHVwIExJQlMsIElOQ0xVREVT
LAotIyBhbmQgb3RoZXIgZGVwZW5kZW5jaWVzIHRoZSBsaWJyYXJ5IGFkZHMuCi1mb3IobGlicmFy
eSwgV0VCS0lUKSB7Ci0gICAgIyBKdWdnbGUgTElCUyB0byBrZWVwIHRoZSBzdGF0aWMgbGluayBv
cmRlciBjb3JyZWN0Ci0gICAgZXhpc3RpbmdfbGlicyA9ICQkTElCUwotICAgIHVuc2V0KExJQlMp
Ci0KLSAgICAjIFdlIGRlZmluaXRseSBuZWVkIGluY2x1ZGUgcGF0aHMgYW5kIHN1Y2ggKHRoaXMg
d2lsbCBzZXQKLSAgICAjIFNPVVJDRV9ESVIgdG8gdGhlIHJpZ2h0IHBhdGggc28gd2UgY2FuIHVz
ZSBpdCBiZWxvdykuCi0gICAgbGlicmFyeV9pZGVudGlmaWVyID0gJCRsb3dlcigkJGxpYnJhcnkp
Ci0gICAgaW5jbHVkZSguLi9tb2R1bGVzLyQke2xpYnJhcnlfaWRlbnRpZmllcn0ucHJmKQotCi0g
ICAgIyBNb3JlIGp1Z2dsaW5nLCBzbyB0aGF0IHdlIGNhbiBhZGQgdGhlIGRlcGVuZGVudCBsaWJz
IGxhdGVyCi0gICAgIyBvbiBpZiB3ZSBkZWNpZGUgdGhhdCB3ZSBuZWVkIHRvIGxpbmsgdG8gdGhl
IGxpYnJhcnkuCi0gICAgZXZhbChXRUJLSVQuJCR7bGlicmFyeV9pZGVudGlmaWVyfS5kZXBlbmRl
bnRfbGlicyA9ICQkTElCUykKLSAgICBMSUJTID0gJCRleGlzdGluZ19saWJzCi0KLSAgICAjIEFu
eXRoaW5nIG5vdCBsaW5raW5nIGR5bmFtaWNhbGx5IHRvIFF0V2ViS2l0IHNob3VsZCBtYWtlIHN1
cmUgdG8gaGF2ZSBpdHMgZXhwb3J0Ci0gICAgIyBtYWNyb3Mgc3luY2hyb25pemVkIHdpdGggdGhl
IGNvZGUgdGhhdCBpdCB3aWxsIGJlIGxpbmtlZCB3aXRoIHN0YXRpY2FsbHkuCi0gICAgIWNvbnRh
aW5zKFFULCB3ZWJraXQpOiBERUZJTkVTICs9IFNUQVRJQ0FMTFlfTElOS0VEX1dJVEhfJCRsaWJy
YXJ5Ci19Ci0KLWNyZWF0aW5nX21vZHVsZSB7Ci0gICAgIyBTYW5pdGl6ZSBQS0dDT05GSUcgYXMg
d2UgZG9uJ3Qgd2FudCBhbnkgb2YgdGhlc2UgbGlicmFyaWVzCi0gICAgIyB0byBlbmQgdXAgaW4g
YXMgcHVibGljIEFQSSBkZXBlbmRlbmljZXMgaW4gdGhlIFF0V2ViS2l0IHBybCBmaWxlLgotICAg
IFBLR0NPTkZJR19QUklWQVRFICo9ICQkUEtHQ09ORklHCi0gICAgdW5zZXQoUEtHQ09ORklHKQot
Ci0gICAgIyBXZSBkbyBoYXZlIGEgbGltaXRlZCBzdWJzZXQgb2YgUXQgbW9kdWxlcyBhcyBkZXBl
bmRlbmNpZXMgZm9yIHVzaW5nCi0gICAgIyB0aGUgcHVibGljIFF0V2ViS2l0IEFQSS4gVGhlIHJl
c3Qgb2YgdGhlIG1vZHVsZXMgZ28gaW50byBRVF9QUklWQVRFLgotICAgIFFUX1BSSVZBVEUgKj0g
JCRRVAotICAgIFFUID0gJCRRVF9BUElfREVQRU5EUwotICAgIFFUX1BSSVZBVEUgLT0gJCRRVAot
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy93aW4zMi9kZWZhdWx0
X3Bvc3QucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy93aW4zMi9kZWZhdWx0X3Bv
c3QucHJmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2YyZTg2MWJkNWNkOTc1NGMw
Yjk2MTYyNzM2YWFkOTAwN2QxYmM2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvd2luMzIvZGVmYXVsdF9w
b3N0LnByZgorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLSMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBX
aW4zMiBzcGVjaWZpYyBkZWZhdWx0cwotIwotIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9y
IGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0ZW0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jIFBpY2sg
dXAgM3JkcGFydHkgbGlicmFyaWVzIGZyb20gSU5DTFVERS9MSUIganVzdCBsaWtlIHdpdGggTVNW
Qwotd2luMzItZysrKiB7Ci0gICAgVE1QUEFUSCAgICAgICAgICAgID0gJCRxdW90ZSgkJChJTkNM
VURFKSkKLSAgICBRTUFLRV9JTkNESVJfUE9TVCArPSAkJHNwbGl0KFRNUFBBVEgsIjsiKQotICAg
IFRNUFBBVEggICAgICAgICAgICA9ICQkcXVvdGUoJCQoTElCKSkKLSAgICBRTUFLRV9MSUJESVJf
UE9TVCArPSAkJHNwbGl0KFRNUFBBVEgsIjsiKQotfQotCi0jIERpc2FibGUgYSBmZXcgd2Fybmlu
Z3MuIFRoZSBzYW1lIHdhcm5pbmdzIGFyZSBhbHNvIGRpc2FibGVkCi0jIGluIFdlYktpdExpYnJh
cmllcy93aW4vdG9vbHMvdnNwcm9wcy9jb21tb24udnNwcm9wcwotd2luMzItbXN2Yyp8d2luY2Uq
OiBRTUFLRV9DWFhGTEFHUyArPSAtd2Q0MjkxIC13ZDQzNDQgLXdkNDM5NiAtd2Q0NTAzIC13ZDQ4
MDAgLXdkNDgxOSAtd2Q0OTk2Ci13aW4zMi1pY2M6IFFNQUtFX0NYWEZMQUdTICs9IC13ZDg3Mwot
Ci1sb2FkKGRlZmF1bHRfcG9zdCkKLQotIyBXaGVuIGNyZWF0aW5nIHRoZSB0YXJnZXQgRExMLCBl
eHRyYWN0IGV4cG9ydGluZyBsaW5rZXIgZGlyZWN0aXZlcyBmcm9tCi0jIGFsbCBzdGF0aWMgbGli
cmFyaWVzIHdlJ3JlIGxpbmtpbmcgaW50byB0aGUgRExMIGFuZCBtYWtlIHN1cmUgdGhleSBhcmUK
LSMgYWxzbyBleHBvcnRlZCBmcm9tIHRoZSBETEwuCi1zaGFyZWQ6Y29udGFpbnMoVEVNUExBVEUs
IGxpYikgewotICAgIGZvcih0YXJnZXQsIFBPU1RfVEFSR0VUREVQUykgewotICAgICAgICBsaWJk
ZXAgPSAkJGZpbmQodGFyZ2V0LCAuKlxcLmxpYikKLSAgICAgICAgIWlzRW1wdHkobGliZGVwKTog
TElCU1dJVEhFWFBPUlRTICs9ICQkbGliZGVwCi0gICAgfQotfQotCi0haXNFbXB0eShMSUJTV0lU
SEVYUE9SVFMpIHsKLSAgICBzdWZmaXggPQotICAgIENPTkZJRyhkZWJ1ZywgZGVidWd8cmVsZWFz
ZSk6IHN1ZmZpeCA9IGQKLSAgICBmb3J3YXJkZWRfZXhwb3J0cy50YXJnZXQgPSBmb3J3YXJkZWQt
ZXhwb3J0cyQke3N1ZmZpeH0uY3BwCi0gICAgZm9yd2FyZGVkX2V4cG9ydHMuY29tbWFuZHMgPSBw
eXRob24gJCR7Uk9PVF9XRUJLSVRfRElSfSQke1FNQUtFX0RJUl9TRVB9VG9vbHMkJHtRTUFLRV9E
SVJfU0VQfVNjcmlwdHMkJHtRTUFLRV9ESVJfU0VQfWdlbmVyYXRlLXdpbjMyLWV4cG9ydC1mb3J3
YXJkcyAkJExJQlNXSVRIRVhQT1JUUyAkJGZvcndhcmRlZF9leHBvcnRzLnRhcmdldAotICAgIGZv
cndhcmRlZF9leHBvcnRzLmRlcGVuZHMgPSAkJExJQlNXSVRIRVhQT1JUUwotICAgIFFNQUtFX0VY
VFJBX1RBUkdFVFMgKz0gZm9yd2FyZGVkX2V4cG9ydHMKLSAgICBHRU5FUkFURURfU09VUkNFUyAr
PSAkJGZvcndhcmRlZF9leHBvcnRzLnRhcmdldAotfQotCmRpZmYgLS1naXQgYS9Ub29scy9xbWFr
ZS9ta3NwZWNzL2ZlYXR1cmVzL3dpbjMyL2RlZmF1bHRfcHJlLnByZiBiL1Rvb2xzL3FtYWtlL21r
c3BlY3MvZmVhdHVyZXMvd2luMzIvZGVmYXVsdF9wcmUucHJmCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiMzA2YzNiODI5NDVmNDdmNTI4M2VmZGQ3ZjI0ZWM4MWRmOTY3MzAyLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL3FtYWtlL21r
c3BlY3MvZmVhdHVyZXMvd2luMzIvZGVmYXVsdF9wcmUucHJmCisrKyAvZGV2L251bGwKQEAgLTEs
MTAgKzAsMCBAQAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFdpbmRvd3Mgc3BlY2lmaWMgZGVmYXVsdHMKLSMK
LSMgU2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgYnVpbGQg
c3lzdGVtCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9hZChkZWZhdWx0X3ByZSkKLQotZGVidWc6IENPTkZJ
RyArPSB1c2VfYWxsX2luX29uZV9maWxlcwotCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3Nw
ZWNzL21vZHVsZXMvYW5nbGUucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9tb2R1bGVzL2FuZ2xl
LnByZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg2MzFhNzZhN2NhNzk0ZWRiZDRj
OGI2MTQ0MDFmMDE2ZmE0MWFlOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL21vZHVsZXMvYW5nbGUucHJmCisrKyAvZGV2
L251bGwKQEAgLTEsOSArMCwwIEBACi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgTW9kdWxlIGZpbGUgZm9yIEFO
R0xFLCB1c2VkIGJ5IHRhcmdldHMgdGhhdCBkZXBlbmQgb24gQU5HTEUKLSMKLSMgU2VlICdUb29s
cy9xbWFrZS9SRUFETUUnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgYnVpbGQgc3lzdGVtCi0jIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotV0VCS0lULmFuZ2xlLnJvb3Rfc291cmNlX2RpciA9ICQke1JPT1RfV0VCS0lU
X0RJUn0vU291cmNlL1RoaXJkUGFydHkvQU5HTEUKLQotaW5jbHVkZSgkJHtXRUJLSVQuYW5nbGUu
cm9vdF9zb3VyY2VfZGlyfS9BTkdMRS5wcmkpCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3Nw
ZWNzL21vZHVsZXMvamF2YXNjcmlwdGNvcmUucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9tb2R1
bGVzL2phdmFzY3JpcHRjb3JlLnByZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ5
NjU2Y2MxNWZhZWMyNjkxNTMxMjllMWVhZGQwNTAxZDFiZWQ3ZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL21vZHVsZXMv
amF2YXNjcmlwdGNvcmUucHJmCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotIyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0jIE1vZHVsZSBmaWxlIGZvciBKYXZhU2NyaXB0Q29yZSwgdXNlZCBieSB0YXJnZXRz
IHRoYXQgZGVwZW5kIG9uCi0jIEphdmFTY3JpcHRDb3JlCi0jCi0jIFNlZSAnVG9vbHMvcW1ha2Uv
UkVBRE1FJyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHN5c3RlbQotIyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLVdFQktJVC5qYXZhc2NyaXB0Y29yZS5yb290X3NvdXJjZV9kaXIgPSAkJHtST09UX1dFQktJ
VF9ESVJ9L1NvdXJjZS9KYXZhU2NyaXB0Q29yZQotCi1pbmNsdWRlKCQke1dFQktJVC5qYXZhc2Ny
aXB0Y29yZS5yb290X3NvdXJjZV9kaXJ9L0phdmFTY3JpcHRDb3JlLnByaSkKZGlmZiAtLWdpdCBh
L1Rvb2xzL3FtYWtlL21rc3BlY3MvbW9kdWxlcy93ZWJjb3JlLnByZiBiL1Rvb2xzL3FtYWtlL21r
c3BlY3MvbW9kdWxlcy93ZWJjb3JlLnByZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OWJkMTc3NmE3ZDFhMzhhOGQxZDMzMDI3MGE5NWViZDIzODQxNmIzYy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL21vZHVs
ZXMvd2ViY29yZS5wcmYKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotIyBNb2R1bGUgZmlsZSBmb3IgV2ViQ29yZSwgdXNlZCBieSB0YXJnZXRzIHRoYXQgZGVwZW5k
IG9uIFdlYkNvcmUKLSMKLSMgU2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBvdmVydmll
dyBvZiB0aGUgYnVpbGQgc3lzdGVtCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV0VCS0lULndlYmNvcmUucm9v
dF9zb3VyY2VfZGlyID0gJCR7Uk9PVF9XRUJLSVRfRElSfS9Tb3VyY2UvV2ViQ29yZQotCi1pbmNs
dWRlKCQke1dFQktJVC53ZWJjb3JlLnJvb3Rfc291cmNlX2Rpcn0vV2ViQ29yZS5wcmkpCmRpZmYg
LS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL21vZHVsZXMvd2Via2l0MS5wcmYgYi9Ub29scy9x
bWFrZS9ta3NwZWNzL21vZHVsZXMvd2Via2l0MS5wcmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGZmYWI5YTdmYzlhZjkyZWIxODZmZGI4MWIxYjNjODk3NTBjMDNiYzYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVj
cy9tb2R1bGVzL3dlYmtpdDEucHJmCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLSMgTW9kdWxlIGZpbGUgZm9yIFdlYktpdDEsIHVzZWQgYnkgdGFyZ2V0cyB0aGF0
IGRlcGVuZCBvbiBXZWJLaXQxCi0jCi0jIFNlZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBmb3IgYW4g
b3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHN5c3RlbQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdFQktJVC53ZWJr
aXQxLnJvb3Rfc291cmNlX2RpciA9ICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dlYktpdAot
Ci1pbmNsdWRlKCQke1dFQktJVC53ZWJraXQxLnJvb3Rfc291cmNlX2Rpcn0vV2ViS2l0MS5wcmkp
CmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL21vZHVsZXMvd2Via2l0Mi5wcmYgYi9U
b29scy9xbWFrZS9ta3NwZWNzL21vZHVsZXMvd2Via2l0Mi5wcmYKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGEyNTAyMTYwZGQ3ZWI2ZDVjZDIzZjBkNjFhODY0ODQxMjdiMGVmMWEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvcW1ha2Uv
bWtzcGVjcy9tb2R1bGVzL3dlYmtpdDIucHJmCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBA
Ci0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLSMgTW9kdWxlIGZpbGUgZm9yIFdlYktpdDIsIHVzZWQgYnkgdGFyZ2V0
cyB0aGF0IGRlcGVuZCBvbiBXZWJLaXQyCi0jCi0jIFNlZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBm
b3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHN5c3RlbQotIyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdFQktJ
VC53ZWJraXQyLnJvb3Rfc291cmNlX2RpciA9ICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dl
YktpdDIKLQotaW5jbHVkZSgkJHtXRUJLSVQud2Via2l0Mi5yb290X3NvdXJjZV9kaXJ9L1dlYktp
dDIucHJpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9tb2R1bGVzL3d0Zi5wcmYg
Yi9Ub29scy9xbWFrZS9ta3NwZWNzL21vZHVsZXMvd3RmLnByZgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTZkZjc0NzZiMDU5MzU0MDRjMWUzOWY3MDBhYWVjOTRlYWU0YjYyZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9xbWFrZS9t
a3NwZWNzL21vZHVsZXMvd3RmLnByZgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotIyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0jIE1vZHVsZSBmaWxlIGZvciBXVEYsIHVzZWQgYnkgdGFyZ2V0cyB0aGF0IGRl
cGVuZCBvbiBXVEYKLSMKLSMgU2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBvdmVydmll
dyBvZiB0aGUgYnVpbGQgc3lzdGVtCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV0VCS0lULnd0Zi5yb290X3Nv
dXJjZV9kaXIgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9XVEYKLQotaW5jbHVkZSgkJHtX
RUJLSVQud3RmLnJvb3Rfc291cmNlX2Rpcn0vV1RGLnByaSkK
</data>
<flag name="review"
          id="235525"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>