Announcement: pcons -- parallel cons
[email protected] Tue, 13 Jul 2004 15:59:53 -0400
| Newsgroups | gmane.comp.gnu.cons.general |
|---|---|
| Message-ID | <[email protected]> |
---------7da051105c166cf17da051105c166cf1
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
All,
I am attaching a version of cons based on 2.2 that has been modified to allow parallel compilations to happen -- within a directory. Bob Sidebotham did most of this work for us, and we have been using it here at Marconi now for a few months, and it works great.
Note that it is different than some other attempts to add parallelization to cons in the past. Those attempts did not work for us here at Marconi because we have some very complicated dependencies, and for us, that other code would build something before its dependencies had been built.
But, this version works well for us. Changes from version 2.2 are:
New command-line arguments:
-j Allow up to <jobs> jobs to be spawned in parallel
-M Display input to the MD5 algorithm (for debugging
dependancy changes)
New argument to UseCache:
partialmix:regex
When partialmix is enabled, the user supplies a regular
expression to be used to strip off some portion of the
target pathname. For example, if you have two target
platforms that each have an export/ and obj/ directory:
export/platform_1/
export/platform_2/
obj/platform_1/
obj/platform_2/
...you could supply 'partialmix:^\w+?/\w+?/' as the
modifier. This will strip off the first two directory
names. If two files underneath these two directories
are found to have the same set of inputs, they will be
able to share a cache entry, speeding up builds between
platforms.
The perldoc stuff in the code should be up-to-date.
If someone wants to post this out to the web somewhere, feel free. Also, if someone wants to post a diff/patch file for this, feel free.
And, if there are any problems, let me know.
Vic
__________________________________________________________________
Switch to Netscape Internet Service.
As low as $9.95 a month -- Sign up today at http://isp.netscape.com/register
Netscape. Just the Net You Need.
New! Netscape Toolbar for Internet Explorer
Search from anywhere on the Web and block those annoying pop-ups.
Download now at http://channels.netscape.com/ns/search/install.jsp
---------7da051105c166cf17da051105c166cf1
Content-Type: application/octet-stream; name="pcons"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="pcons"
Content-Description: pcons
IyEvdXNyL2Jpbi9lbnYgcGVybAoKIyBOT1RFOiAgQ29ucyBpbnRlbnRpb25hbGx5IGRvZXMg
bm90IHVzZSB0aGUgInBlcmwgLXciIG9wdGlvbiBvcgojICJ1c2Ugc3RyaWN0LiIgIEJlY2F1
c2UgQ29ucyAiY29uZmlndXJhdGlvbiBmaWxlcyIgYXJlIGFjdHVhbGx5CiMgUGVybCBzY3Jp
cHRzLCBlbmFibGluZyB0aG9zZSByZXN0cmljdGlvbnMgaGVyZSB3b3VsZCBmb3JjZSB0aGVt
CiMgb24gZXZlcnkgdXNlcidzIGNvbmZpZyBmaWxlcywgd2FudGVkIG9yIG5vdC4gIFdvdWxk
IHVzZXJzIHdyaXRlCiMgImJldHRlciIgQ29uc3RydWN0IGFuZCBDb25zY3JpcHQgZmlsZXMg
aWYgd2UgZm9yY2VkICJ1c2Ugc3RyaWN0IgojIG9uIHRoZW0/ICBQcm9iYWJseS4gIEJ1dCB3
ZSB3YW50IHBlb3BsZSB0byB1c2UgQ29ucyB0byBnZXQgd29yawojIGRvbmUsIG5vdCBmb3Jj
ZSBldmVyeW9uZSB0byBiZWNvbWUgYSBQZXJsIGd1cnUgdG8gdXNlIGl0LCBzbyB3ZQojIGRv
bid0IGluc2lzdC4KIwojIFRoYXQgc2FpZCwgQ29ucycgY29kZSBpcyBib3RoICJwZXJsIC13
IiBhbmQgInVzZSBzdHJpY3QiIGNsZWFuLgojIFJlZ3Jlc3Npb24gdGVzdHMga2VlcCB0aGUg
Y29kZSBob25lc3QgYnkgY2hlY2tpbmcgZm9yIHdhcm5pbmdzCiMgYW5kICJ1c2Ugc3RyaWN0
IiBmYWlsdXJlcy4KCiMgJElkOiBjb25zLnBsLHYgMS4xMjkgMjAwMC8xMS8xNiAxMjoyMjoz
NyBrbmlnaHQgRXhwICQKCiMgQ2hhbmdlIHRoaXMgdG8gMSB0byBzaG93IHBjb25zIG9wZXJh
dGlvbi4KdXNlIGNvbnN0YW50IFBDT05TX0RFQlVHID0+IDA7Cgp1c2UgdmFycyBxdyggJHZl
cl9udW0gJHZlcl9yZXYgJHZlcnNpb24gJGNhbGxlZCApOwoKJHZlcl9udW0gPSAiMi4yIjsK
JHZlcl9yZXYgPSAiLjFfbWFyY29uaV9wYXJhbGxlbF92Mi4wYiI7CiR2ZXJzaW9uID0gc3By
aW50ZiAiVGhpcyBpcyBDb25zICVzJXMgIiAuCgkgICAgJygkSWQ6IGNvbnMucGwsdiAxLjEy
OSAyMDAwLzExLzE2IDEyOjIyOjM3IGtuaWdodCBFeHAgJCknLiAiXG4iLAoJICAgICR2ZXJf
bnVtLCAkdmVyX3JldjsKCiMgQ29uczogQSBTb2Z0d2FyZSBDb25zdHJ1Y3Rpb24gVG9vbC4K
IyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4KIwoKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IK
IyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KIwojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwojIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwK
IyBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KCnJlcXVpcmUgNS4wMDI7CiMgU2VlIHRo
ZSBOT1RFIGFib3ZlIGFib3V0IHdoeSBDb25zIGRvZXNuJ3QgInVzZSBzdHJpY3QiLgp1c2Ug
aW50ZWdlcjsKdXNlIEN3ZDsKdXNlIEZpbGU6OkNvcHk7Cgp1c2UgdmFycyBxdyggJF9XSU4z
MiAkX2EgJF9leGUgJF9vICRfc28gJGNvbnNfcGlkICk7CgojLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRGV0
ZXJtaW5lIGlmIHJ1bm5pbmcgb24gd2luMzIgcGxhdGZvcm0gLSBlaXRoZXIgV2luZG93cyBO
VCBvciA5NQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp1c2UgdmFycyBxdyggJFBBVEhfU0VQQVJBVE9SICRp
c3dpbjMyICRfV0lOMzIgJHVzYWdlICRpbmRlbnQgQHRhcmdldHMgKTsKCkJFR0lOIHsKICAg
ICMgc2F2ZSBwaWQgZm9yIHVzZSB3aGVuIGVuZGluZyBzbyB0aGF0IGNoaWxkIHByb2Nlc3Nl
cyBjYW4gZWxlY3QgdG8gbm90CiAgICAjIHJ1biBmaW5hbGl6YXRpb24gY29kZSB0aGF0IGlz
IHByb3Blcmx5IHJ1biBpbiB0aGUgcGFyZW50LgogICAgJGNvbnNfcGlkID0gJCQ7CgogICAg
dXNlIENvbmZpZzsKCiAgICAjIGlmIHRoZSB2ZXJzaW9uIGlzIDUuMDAzLCB3ZSBjYW4gY2hl
Y2sgJF5PCiAgICBpZiAoJF0gPCAgNS4wMDMpIHsKCWV2YWwoInJlcXVpcmUgV2luMzIiKTsK
CSRfV0lOMzIgPSAoISRAKTsKICAgIH0gZWxzZSB7CgkkX1dJTjMyID0gKCReTyBlcSAiTVNX
aW4zMiIpID8gMSA6IDA7CiAgICB9CgogICAgIyBGZXRjaCB0aGUgUEFUSCBzZXBhcmF0b3Ig
ZnJvbSBDb25maWc7CiAgICAjIHByb3ZpZGUgb3VyIG9sZCBkZWZhdWx0cyBpbiBjYXNlIGl0
J3Mgbm90IHNldC4KICAgICRQQVRIX1NFUEFSQVRPUiA9ICRDb25maWd7cGF0aF9zZXB9Owog
ICAgJFBBVEhfU0VQQVJBVE9SID0gJF9XSU4zMiA/ICc7JyA6ICc6JyBpZiAhIGRlZmluZWQg
JFBBVEhfU0VQQVJBVE9SOwoKICAgICMgRmV0Y2ggZmlsZSBzdWZmaXhlcyBmcm9tIENvbmZp
ZywKICAgICMgYWNjb21vZGF0aW5nIGRpZmZlcmVuY2VzIGluIHRoZSBDb25maWcgdmFyaWFi
bGVzCiAgICAjIHVzZWQgYnkgZGlmZmVyZW50IFBlcmwgdmVyc2lvbnMuCiAgICAkX2V4ZSA9
ICRDb25maWd7X2V4ZX07CiAgICAkX2V4ZSA9ICRDb25maWd7ZXhlX2V4dH0gaWYgISBkZWZp
bmVkICRfZXhlOwogICAgJF9leGUgPSAkX1dJTjMyID8gJy5leGUnIDogJycgaWYgISBkZWZp
bmVkICRfZXhlOwogICAgJF9vID0gJENvbmZpZ3tfb307CiAgICAkX28gPSAkQ29uZmlne29i
al9leHR9ICBpZiAhIGRlZmluZWQgJF9vOwogICAgJF9vID0gJF9XSU4zMiA/ICcub2JqJyA6
ICcubycgaWYgISBkZWZpbmVkICRfbzsKICAgICRfYSA9ICRDb25maWd7X2F9OwogICAgJF9h
ID0gJENvbmZpZ3tsaWJfZXh0fSBpZiAhIGRlZmluZWQgJF9hOwogICAgJF9hID0gJF9XSU4z
MiA/ICcubGliJyA6ICcuYScgaWYgISBkZWZpbmVkICRfYTsKICAgICRfc28gPSAiLiRDb25m
aWd7c299IjsKICAgICRfc28gPSAkX1dJTjMyID8gJy5kbGwnIDogJy5zbycgaWYgISBkZWZp
bmVkICRfc287Cn0KCiMgRmx1c2ggc3Rkb3V0IGVhY2ggdGltZS4KJHwgPSAxOwoKIyBTZWVk
IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgpzcmFuZCh0aW1lIC4gJCQpOyAjIHRoaXMgd29y
a3MgYmV0dGVyIHRoYW4gdGltZSBeICQkIGluIHBlcmxmdW5jIG1hbnBhZ2UuCgokdXNhZ2Ug
PSBxKApVc2FnZTogY29ucyA8YXJndW1lbnRzPiAtLSA8Y29uc3RydWN0LWFyZ3M+CgpBcmd1
bWVudHMgY2FuIGJlIGFueSBvZiB0aGUgZm9sbG93aW5nLCBpbiBhbnkgb3JkZXI6CgogIDx0
YXJnZXRzPglCdWlsZCB0aGUgc3BlY2lmaWVkIHRhcmdldHMuIElmIDx0YXJnZXQ+IGlzIGEg
ZGlyZWN0b3J5CgkJcmVjdXJzaXZlbHkgYnVpbGQgZXZlcnl0aGluZyB3aXRoaW4gdGhhdCBk
aXJlY3RvcnkuCgogICs8cGF0dGVybj4JTGltaXQgdGhlIGNvbnMgc2NyaXB0cyBjb25zaWRl
cmVkIHRvIGp1c3QgdGhvc2UgdGhhdAoJCW1hdGNoIDxwYXR0ZXJuPi4gTXVsdGlwbGUgKyBh
cmd1bWVudHMgYXJlIGFjY2VwdGVkLgoKICA8bmFtZT49PHZhbD4JU2V0cyA8bmFtZT4gdG8g
dmFsdWUgPHZhbD4gaW4gdGhlIEFSRyBoYXNoIHBhc3NlZCB0byB0aGUKCQl0b3AtbGV2ZWwg
Q29uc3RydWN0IGZpbGUuCgogIC1jYyAgICAgICAgICAgU2hvdyBjb21tYW5kIHRoYXQgd291
bGQgaGF2ZSBiZWVuIGV4ZWN1dGVkLCB3aGVuCgkJcmV0cmlldmluZyBmcm9tIGNhY2hlLiBO
byBpbmRpY2F0aW9uIHRoYXQgdGhlIGZpbGUKCQloYXMgYmVlbiByZXRyaWV2ZWQgaXMgZ2l2
ZW47IHRoaXMgaXMgdXNlZnVsIGZvcgoJCWdlbmVyYXRpbmcgYnVpbGQgbG9ncyB0aGF0IGNh
biBiZSBjb21wYXJlZCB3aXRoCgkJcmVhbCBidWlsZCBsb2dzLgoKICAtY2QgICAgICAgICAg
IERpc2FibGUgYWxsIGNhY2hpbmcuIERvIG5vdCByZXRyaWV2ZSBmcm9tIGNhY2hlIG5vcgoJ
CWZsdXNoIHRvIGNhY2hlLgoKICAtY3IgICAgICAgICAgIEJ1aWxkIGRlcGVuZGVuY2llcyBp
biByYW5kb20gb3JkZXIuIFRoaXMgaXMgdXNlZnVsIHdoZW4KCQlidWlsZGluZyBtdWx0aXBs
ZSBzaW1pbGFyIHRyZWVzIHdpdGggY2FjaGluZyBlbmFibGVkLgoKICAtY3MgICAgICAgICAg
IFN5bmNocm9uaXplIGV4aXN0aW5nIGJ1aWxkIHRhcmdldHMgdGhhdCBhcmUgZm91bmQgdG8g
YmUKCQl1cC10by1kYXRlIHdpdGggY2FjaGUuIFRoaXMgaXMgdXNlZnVsIGlmIGNhY2hpbmcg
aGFzCgkJYmVlbiBkaXNhYmxlZCB3aXRoIC1jYyBvciBqdXN0IHJlY2VudGx5IGVuYWJsZWQg
d2l0aAoJCVVzZUNhY2hlLgoKICAtZCAgICAgICAgICAgIEVuYWJsZSBkZXBlbmRlbmN5IGRl
YnVnZ2luZy4KCiAgLWYgPGZpbGU+CVVzZSB0aGUgc3BlY2lmaWVkIGZpbGUgaW5zdGVhZCBv
ZiAiQ29uc3RydWN0IiAoYnV0IGZpcnN0CgkJY2hhbmdlIHRvIGNvbnRhaW5pbmcgZGlyZWN0
b3J5IG9mIDxmaWxlPikuCgogIC1oICAgICAgICAgICAgU2hvdyBhIGhlbHAgbWVzc2FnZSBs
b2NhbCB0byB0aGUgY3VycmVudCBidWlsZCBpZgoJCW9uZSBzdWNoIGlzIGRlZmluZWQsICBh
bmQgZXhpdC4KCiAgLWsJCUtlZXAgZ29pbmcgYXMgZmFyIGFzIHBvc3NpYmxlIGFmdGVyIGVy
cm9ycy4KCiAgLU0gICAgICAgICAgICBEaXNwbGF5IGlucHV0IHRvIHRoZSBNRDUgYWxnb3Jp
dGhtIChmb3IgZGVidWdnaW5nIGRlcGVuZGFuY3kKICAgICAgICAgICAgICAgIGNoYW5nZXMp
CgogIC1vIDxmaWxlPglSZWFkIG92ZXJyaWRlIGZpbGUgPGZpbGU+LgoKICAtcAkJU2hvdyBj
b25zdHJ1Y3Rpb24gcHJvZHVjdHMgaW4gc3BlY2lmaWVkIHRyZWVzLgogIC1wYQkJU2hvdyBj
b25zdHJ1Y3Rpb24gcHJvZHVjdHMgYW5kIGFzc29jaWF0ZWQgYWN0aW9ucy4KICAtcHcJCVNo
b3cgcHJvZHVjdHMgYW5kIHdoZXJlIHRoZXkgYXJlIGRlZmluZWQuCgogIC1xCQlCZSBxdWll
dCBhYm91dCBJbnN0YWxsaW5nIGFuZCBSZW1vdmluZyB0YXJnZXRzLgoKICAtcgkJUmVtb3Zl
IGNvbnN0cnVjdGlvbiBwcm9kdWN0cyBhc3NvY2lhdGVkIHdpdGggPHRhcmdldHM+CgogIC1S
IDxyZXBvcz4JU2VhcmNoIGZvciBmaWxlcyBpbiA8cmVwb3M+LiAgTXVsdGlwbGUgLVIgPHJl
cG9zPgoJCWRpcmVjdG9yaWVzIGFyZSBzZWFyY2hlZCBpbiB0aGUgb3JkZXIgc3BlY2lmaWVk
LgoKICAtdCAgICAgICAgICAgIFRyYXZlcnNlIHVwIHRoZSBkaXJlY3RvcnkgaGllcmFyY2h5
IGxvb2tpbmcgZm9yIGEKCQlDb25zdHJ1Y3QgZmlsZSwgaWYgbm9uZSBleGlzdHMgaW4gdGhl
IGN1cnJlbnQgZGlyZWN0b3J5LgoJCShUYXJnZXRzIHdpbGwgYmUgbW9kaWZpZWQgdG8gYmUg
cmVsYXRpdmUgdG8gdGhlCgkJQ29uc3RydWN0IGZpbGUuKQoKICAtdgkJU2hvdyBjb25zIHZl
cnNpb24gYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcuCiAgLVYgICAgICAgICAgICBTaG93IGNv
bnMgdmVyc2lvbiBhbmQgZXhpdC4KCiAgLXdmIDxmaWxlPiAgICBXcml0ZSBhbGwgZmlsZW5h
bWVzIGNvbnNpZGVyZWQgaW50byA8ZmlsZT4uCgogIC14CQlTaG93IHRoaXMgbWVzc2FnZSBh
bmQgZXhpdC4KCiAgLWogPGpvYnM+ICAgICBBbGxvdyB1cCB0byA8am9icz4gam9icyB0byBi
ZSBzcGF3bmVkIGluIHBhcmFsbGVsCgogICBQbGVhc2UgcmVwb3J0IGFueSBzdWdnZXN0aW9u
cyB0aHJvdWdoIHRoZSBjb25zLWRpc2N1c3NAZ251Lm9yZyBtYWlsaW5nCiAgIGxpc3QuCgog
ICBUbyBzdWJzY3JpYmUsIHNlbmQgbWFpbCB0byBjb25zLWRpc2N1c3MtcmVxdWVzdEBnbnUu
b3JnIHdpdGggYm9keQogICAnc3Vic2NyaWJlJy4KCiAgIElmIHlvdSBmaW5kIGEgYnVnLCBw
bGVhc2UgcmVwb3J0IGl0IHRocm91Z2ggdGhlIGJ1Zy1jb25zQGdudS5vcmcKICAgbWFpbGlu
ZyBsaXN0LgoKICAgSW5mb3JtYXRpb24gYWJvdXQgQ09OUyBjYW4gYmUgb2J0YWluZWQgZnJv
bSB0aGUgb2ZmaWNpYWwgY29ucyB3ZWIgc2l0ZQogICBodHRwOi8vd3d3LmRzbWl0LmNvbS9j
b25zLyBvciBpdHMgbWlycm9ycyAobGlzdGVkIHRoZXJlKS4KCiAgIFRoZSBjb25zIG1haW50
YWluZXJzIGNhbiBiZSBjb250YWN0ZWQgYnkgZW1haWwgYXQgY29ucy1tYWludGFpbmVyc0Bn
bnUub3JnCgogICBVc2VyIGRvY3VtZW50YXRpb24gb2YgY29ucyBpcyBjb250YWluZWQgaW4g
Y29ucyBhbmQgY2FuIGJlIG9idGFpbmVkCiAgIGJ5IGRvaW5nICdwZXJsZG9jIC9wYXRoL3Rv
L2NvbnMnLgoKKTsKCiMgU2ltcGxpZnkgcHJvZ3JhbSBuYW1lLCBpZiBpdCBpcyBhIHBhdGgu
CnsKICAgIG15ICgkdm9sLCAkZGlyLCAkZmlsZSkgPSBGaWxlOjpTcGVjLT5zcGxpdHBhdGgo
RmlsZTo6U3BlYy0+Y2Fub25wYXRoKCQwKSk7CiAgICAkMCA9ICRmaWxlOwp9CgojIERlZmF1
bHQgcGFyYW1ldGVycy4KJHBhcmFtOjp0b3BmaWxlID0gJ0NvbnN0cnVjdCc7CSMgVG9wLWxl
dmVsIGNvbnN0cnVjdGlvbiBmaWxlLgokcGFyYW06Omluc3RhbGwgPSAxOwkJIyBTaG93IGlu
c3RhbGxhdGlvbnMKJHBhcmFtOjpidWlsZCA9IDE7CQkjIEJ1aWxkIHRhcmdldHMKIyMjICRw
YXJhbTo6c2hvdyA9IDE7CQkjIFNob3cgYnVpbGRpbmcgb2YgdGFyZ2V0cy4KJHBhcmFtOjpz
aWdwcm8gPSAnbWQ1JzsJCSMgU2lnbmF0dXJlIHByb3RvY29sLgokcGFyYW06OmRlcGZpbGUg
PSAnJzsJCSMgV3JpdGUgYWxsIGRlcHMgb3V0IHRvIHRoaXMgZmlsZQokcGFyYW06OnNhbHQg
PSAnJzsJCSMgU2FsdCBkZXJpdmVkIGZpbGUgc2lnbmF0dXJlcyB3aXRoIHRoaXMuCiRwYXJh
bTo6cmVwX3NpZ190aW1lc19vayA9IDE7CSMgUmVwb3NpdG9yeSAuY29uc2lnbiB0aW1lcyBh
cmUgaW4gc3luYwoJCQkJIyAgIHcvZmlsZXMuCiRwYXJhbTo6Y29uc2NyaXB0X2NoZGlyID0g
MDsJIyBDaGFuZ2UgZGlyIHRvIENvbnNjcmlwdCBkaXJlY3RvcnkKJHBhcmFtOjpxdWlldCA9
IDA7CQkjIHNob3VsZCB3ZSBzaG93IHRoZSBjb21tYW5kIGJlaW5nIGV4ZWN1dGVkLgokcGFy
YW06Om1heF9qb2JzID0gMTsKIwokaW5kZW50ID0gJyc7CgojIERpc3BsYXkgYSBjb21tYW5k
IHdoaWxlIGV4ZWN1dGluZyBvciBvdGhlcndpc2UuIFRoaXMKIyBzaG91bGQgYmUgY2FsbGVk
IGJ5IGNvbW1hbmQgYnVpbGRlciBhY3Rpb24gbWV0aG9kcy4Kc3ViIHNob3djb20gewogICAg
cHJpbnQoJGluZGVudCAuICRfWzBdIC4gIlxuIik7Cn0KCiMgRGVmYXVsdCBlbnZpcm9ubWVu
dC4KIyBUaGlzIGNvbnRhaW5zIG9ubHkgdGhlIGNvbXBsZXRlbHkgcGxhdGZvcm0taW5kZXBl
bmRlbnQgaW5mb3JtYXRpb24KIyB3ZSBjYW4gZmlndXJlIG91dC4gIFBsYXRmb3JtLXNwZWNp
ZmljIGluZm9ybWF0aW9uIChVTklYLCBXaW4zMikKIyBnZXRzIGFkZGVkIGJlbG93LgpAcGFy
YW06OmRlZmF1bHRzID0gKAogICAgICdTVUZFWEUnCSAgICA9PiAkX2V4ZSwJCQkJIyAnJyBv
biBVTklYIHN5c3RlbXMKICAgICAnU1VGTElCJwkgICAgPT4gJF9hLAkJCQkjICcuYScgb24g
VU5JWCBzeXN0ZW1zCiAgICAgJ1NVRkxJQlMnICAgICAgPT4gIiRfc286JF9hIiwJCQkjICcu
c286LmEnIG9uIFVOSVgKICAgICAnU1VGT0JKJwkgICAgPT4gJF9vLAkJCQkjICcubycgb24g
VU5JWCBzeXN0ZW1zCiAgICAgJ1NVRk1BUCcgICAgICAgPT4gewoJICcuYycgID0+ICdidWls
ZDo6Y29tbWFuZDo6Y2MnLAoJICcucycgID0+ICdidWlsZDo6Y29tbWFuZDo6Y2MnLAoJICcu
UycgID0+ICdidWlsZDo6Y29tbWFuZDo6Y2MnLAoJICcuQycgID0+ICdidWlsZDo6Y29tbWFu
ZDo6Y3h4JywKCSAnLmNjJyA9PiAnYnVpbGQ6OmNvbW1hbmQ6OmN4eCcsCgkgJy5jeHgnPT4g
J2J1aWxkOjpjb21tYW5kOjpjeHgnLAoJICcuY3BwJz0+ICdidWlsZDo6Y29tbWFuZDo6Y3h4
JywKCSAnLmMrKyc9PiAnYnVpbGQ6OmNvbW1hbmQ6OmN4eCcsCgkgJy5DKysnPT4gJ2J1aWxk
Ojpjb21tYW5kOjpjeHgnLAogICAgIH0sCik7CgppZiAoJF9XSU4zMikgewogICAgIyBEZWZh
dWx0cyBmb3IgV2luMzIuCiAgICAjIERlZmluZWQgZm9yIFZDKysgNi4wIGJ5IEdyZWcgU3Bl
bmNlciA8Z3JlZ19zcGVuY2VyQGFjbS5vcmc+LgogICAgIyBZb3VyIG1pbGVhZ2UgbWF5IHZh
cnkuCiAgICBteSBAd2luID0gKAoJJ0NDJyAgICAgICAgICAgICA9PiAnY2wnLAoJJ0NGTEFH
UycgICAgICAgICA9PiAnL25vbG9nbycsCgknQ0NDT00nICAgICAgICAgID0+ICclQ0MgJUNG
TEFHUyAlX0lGTEFHUyAvYyAlPCAvRm8lPicsCgknQ1hYJyAgICAgICAgICAgID0+ICclQ0Mn
LAoJJ0NYWEZMQUdTJyAgICAgICA9PiAnJUNGTEFHUycsCgknQ1hYQ09NJyAgICAgICAgID0+
ICclQ1hYICVDWFhGTEFHUyAlX0lGTEFHUyAvYyAlPCAvRm8lPicsCgknSU5DRElSUFJFRklY
JyAgID0+ICcvSScsCgknTElOSycgICAgICAgICAgID0+ICdsaW5rJywKCSdMSU5LQ09NJyAg
ICAgICAgPT4gJyVMSU5LICVMREZMQUdTIC9vdXQ6JT4gJTwgJV9MRElSUyAlTElCUycsCgkn
TElOS01PRFVMRUNPTScgID0+ICclTEQgL3IgL28gJT4gJTwnLAoJJ0xJQkRJUlBSRUZJWCcg
ICA9PiAnL0xJQlBBVEg6JywKCSdBUicgICAgICAgICAgICAgPT4gJ2xpYicsCgknQVJGTEFH
UycgICAgICAgID0+ICcvbm9sb2dvICcsCgknQVJDT00nICAgICAgICAgID0+ICIlQVIgJUFS
RkxBR1MgL291dDolPiAlPCIsCgknUkFOTElCJyAgICAgICAgID0+ICcnLAoJJ0xEJyAgICAg
ICAgICAgICA9PiAnbGluaycsCgknTERGTEFHUycgICAgICAgID0+ICcvbm9sb2dvICcsCgkn
UFJFRkxJQicgICAgICAgID0+ICcnLAogICAgKTsKICAgIHB1c2goQHBhcmFtOjpkZWZhdWx0
cywgQHdpbik7Cn0gZWxzZSB7CiAgICAjIERlZmF1bHRzIGZvciBhIHR5cGljYWwgKD8pIFVO
SVggcGxhdGZvcm0uCiAgICAjIFlvdXIgbWlsZWFnZSBtYXkgdmFyeS4KICAgIG15IEB1bml4
ID0gKAoJJ0NDJyAgICAgICAgICAgICA9PiAnY2MnLAoJJ0NGTEFHUycgICAgICAgICA9PiAn
JywKCSdDQ0NPTScgICAgICAgICAgPT4gJyVDQyAlQ0ZMQUdTICVfSUZMQUdTIC1jICU8IC1v
ICU+JywKCSdDWFgnICAgICAgICAgICAgPT4gJyVDQycsCgknQ1hYRkxBR1MnICAgICAgID0+
ICclQ0ZMQUdTJywKCSdDWFhDT00nICAgICAgICAgPT4gJyVDWFggJUNYWEZMQUdTICVfSUZM
QUdTIC1jICU8IC1vICU+JywKCSdJTkNESVJQUkVGSVgnICAgPT4gJy1JJywKCSdMSU5LJyAg
ICAgICAgICAgPT4gJyVDWFgnLAoJJ0xJTktDT00nICAgICAgICA9PiAnJUxJTksgJUxERkxB
R1MgLW8gJT4gJTwgJV9MRElSUyAlTElCUycsCgknTElOS01PRFVMRUNPTScgID0+ICclTEQg
LXIgLW8gJT4gJTwnLAoJJ0xJQkRJUlBSRUZJWCcgICA9PiAnLUwnLAoJJ0FSJyAgICAgICAg
ICAgICA9PiAnYXInLAoJJ0FSRkxBR1MnICAgICAgICA9PiAncicsICMgcnM/CgknQVJDT00n
ICAgICAgICAgID0+ICIlQVIgJUFSRkxBR1MgJT4gJTxcbiVSQU5MSUIgJT4iLAoJJ1JBTkxJ
QicgICAgICAgICA9PiAncmFubGliJywKCSdBUycgICAgICAgICAgICAgPT4gJ2FzJywKCSdB
U0ZMQUdTJyAgICAgICAgPT4gJycsCgknQVNDT00nICAgICAgICAgID0+ICclQVMgJUFTRkxB
R1MgJTwgLW8gJT4nLAoJJ0xEJyAgICAgICAgICAgICA9PiAnbGQnLAoJJ0xERkxBR1MnICAg
ICAgICA9PiAnJywKCSdQUkVGTElCJyAgICAgICAgPT4gJ2xpYicsCgknRU5WJyAgICAgICAg
ICAgID0+IHsgJ1BBVEgnID0+ICcvYmluOi91c3IvYmluJyB9LAogICAgKTsKICAgIHB1c2go
QHBhcmFtOjpkZWZhdWx0cywgQHVuaXgpOwp9CgojIEhhbmRsZSBjb21tYW5kIGxpbmUgYXJn
dW1lbnRzLgp3aGlsZSAoQEFSR1YpIHsKICAgICRfID0gc2hpZnQgQEFSR1Y7CiAgICBsYXN0
IGlmIC9eLS0kLzsJCSMgQXJndW1lbnQgcGFzc2luZyB0byBDb25zdHJ1Y3QuCiAgICAmb3B0
aW9uLCBuZXh0CQkJaWYgcy9eLS8vOwogICAgcHVzaCAoQHBhcmFtOjppbmNsdWRlLCAkXyks
IG5leHQJaWYgcy9eXCsvLzsKICAgICZlcXVhdGUsIG5leHQJCQlpZiAvPS87CiAgICBwdXNo
IChAdGFyZ2V0cywgJF8pLCBuZXh0Owp9CgpzdWIgb3B0aW9uIHsKICAgIG15ICVvcHQgPSAo
CgkJICAgICdjYycgPT4gICBzdWIgeyAkcGFyYW06OmNhY2hlY29tID0gMTsgfSwKCQkgICAg
J2NkJyA9PiAgIHN1YiB7ICRwYXJhbTo6Y2FjaGVkaXNhYmxlID0gMTsgfSwKCQkgICAgJ2Ny
JyA9PiAgIHN1YiB7ICRwYXJhbTo6cmFuZG9tID0gMTsgfSwKCQkgICAgJ2NzJyA9PiAgIHN1
YiB7ICRwYXJhbTo6Y2FjaGVzeW5jID0gMTsgfSwKCQkgICAgJ2QnID0+ICAgIHN1YiB7ICRw
YXJhbTo6ZGVwZW5kcyA9IDE7IH0sCgkJICAgICdoJyA9PiAgICBzdWIgeyAkcGFyYW06Omxv
Y2FsaGVscCA9IDE7IH0sCgkJICAgICdrJyA9PiAgICBzdWIgeyAkcGFyYW06OmtmbGFnID0g
MTsgfSwKICAgCSAgICAgICAgICAgICdNJyA9PiAgICBzdWIgeyAkcGFyYW06Ok1ENSA9IDE7
IH0sCgkJICAgICdwJyA9PiAgICBzdWIgeyAkcGFyYW06OnBmbGFnID0gMTsKCQkJCSAgICAk
cGFyYW06OmJ1aWxkID0gMDsgfSwKCQkgICAgJ3BhJyA9PiAgIHN1YiB7ICRwYXJhbTo6cGZs
YWcgPSAxOwoJCQkJICAgICRwYXJhbTo6YWZsYWcgPSAxOwoJCQkJICAgICRpbmRlbnQgPSAi
Li4uICI7CgkJCQkgICAgJHBhcmFtOjpidWlsZCA9IDA7IH0sCgkJICAgICdwdycgPT4gICBz
dWIgeyAkcGFyYW06OnBmbGFnID0gMTsKCQkJCSAgICAkcGFyYW06OndmbGFnID0gMTsKCQkJ
CSAgICAkcGFyYW06OmJ1aWxkID0gMDsgfSwKCQkgICAgJ3EnID0+ICAgIHN1YiB7ICRwYXJh
bTo6cXVpZXQgPSAxOyB9LAoJCSAgICAncicgPT4gICAgc3ViIHsgJHBhcmFtOjpyZmxhZyA9
IDE7CgkJCQkgICAgJHBhcmFtOjpidWlsZCA9IDA7IH0sCgkJICAgICd0JyA9PiAgICBzdWIg
eyAkcGFyYW06OnRyYXZlcnNlID0gMTsgfSwKCQkgICAgJ3YnID0+ICAgIHN1YiB7IHByaW50
KCR2ZXJzaW9uKTsgfSwKCQkgICAgJ1YnID0+ICAgIHN1YiB7IHByaW50KCR2ZXJzaW9uKSwg
ZXhpdCgwKTsgfSwKCQkgICAgJ3gnID0+ICAgIHN1YiB7IHByaW50KCR1c2FnZSksIGV4aXQg
MDsgfSwKCQkpOwoKICAgIG15ICVvcHRfYXJnID0gKAoJCSAgICAnZicgPT4gICAgc3ViIHsg
JHBhcmFtOjp0b3BmaWxlID0gJF9bMF07IH0sCgkJICAgICdqJyA9PiAgICBzdWIgeyAkcGFy
YW06Om1heF9qb2JzID0gJF9bMF07IH0sCgkJICAgICdvJyA9PiAgICBzdWIgeyAkcGFyYW06
Om92ZXJmaWxlID0gJF9bMF07IH0sCgkJICAgICdSJyA9PiAgICBzdWIgeyBzY3JpcHQ6OlJl
cG9zaXRvcnkoJF9bMF0pOyB9LAoJCSAgICAnd2YnID0+ICAgc3ViIHsgJHBhcmFtOjpkZXBm
aWxlID0gJF9bMF07IH0sCgkJKTsKCiAgICBpZiAoZGVmaW5lZCAkb3B0eyRffSkgewoJJnsk
b3B0eyRffX0oKTsKCXJldHVybjsKICAgIH0KICAgICRfICA9fiBtLyguKSguKikvOwogICAg
aWYgKGRlZmluZWQgJG9wdF9hcmd7JDF9KSB7CglpZiAoISAkMikgewoJICAgICRfID0gc2hp
ZnQgQEFSR1Y7CgkgICAgZGllKCIkMDogLSQxIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVu
dC5cbiIpIGlmICEgJF87Cgl9CgkmeyRvcHRfYXJneyQxfX0oJDIgfHwgJF8pOwoJcmV0dXJu
OwogICAgfQogICAgJF8gID1+IG0vKC4uKSguKikvOwogICAgaWYgKGRlZmluZWQgJG9wdF9h
cmd7JDF9KSB7CglpZiAoISAkMikgewoJICAgICRfID0gc2hpZnQgQEFSR1Y7CgkgICAgZGll
KCIkMDogLSQxIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudC5cbiIpIGlmICEgJF87Cgl9
CgkmeyRvcHRfYXJneyQxfX0oJDIgfHwgJF8pOwoJcmV0dXJuOwogICAgfQogICAgaWYgKCRf
KSB7CglkaWUgcXEoJDA6IHVucmVjb2duaXplZCBvcHRpb24gIi0kXyIuICBVc2UgLXggZm9y
IGEgdXNhZ2UgbWVzc2FnZS5cbik7CiAgICB9Cn0KCiMgUHJvY2VzcyBhbiBlcXVhdGUgYXJn
dW1lbnQgKHZhcj12YWwpLgpzdWIgZXF1YXRlIHsKICAgIG15KCR2YXIsICR2YWwpID0gLyhb
Xj1dKik9KC4qKS87CiAgICAkc2NyaXB0OjpBUkd7JHZhcn0gPSAkdmFsOwp9CgojIERlZmlu
ZSBmaWxlIHNpZ25hdHVyZSBwcm90b2NvbC4KJ3NpZyctPnNlbGVjdCgkcGFyYW06OnNpZ3By
byk7Cgp1c2Ugc2lndHJhcCBxdyhkaWUgbm9ybWFsLXNpZ25hbHMgZXJyb3Itc2lnbmFscyk7
CgojIENsZWFudXAgYWZ0ZXIgaW50ZXJydXB0IG9yIG5vcm1hbCBlbmQgb2YgcHJvZ3JhbS4K
RU5EIHsKICAgIHJldHVybiBpZiAkY2FsbGVkKys7ICMgTWlnaHQgYmUgY2FsbGVkIHR3aWNl
Li4uCiAgICByZXR1cm4gaWYgJGNvbnNfcGlkICE9ICQkOyAjIERvbid0IHVzZSBhbnkgb2Yg
dGhpcyBpbiBhIGZhaWxlZCBjaGlsZCBwcm9jLgogICAgIyBTYXZlIGludGVuZGVkIGV4aXQg
Y29kZSwgaW4gY2FzZSBpdCBpcyBkZXN0cm95ZWQgYnkgZm9sbG93aW5nLgogICAgbXkoJGV4
aXRfY29kZSkgPSAgJD87ICMgU2V0IG1hZ2ljYWxseSBmb3IgRU5EIGJsb2NrLgogICAgZmls
ZTo6ZmluYWxpemUoKTsKICAgIHNpZzo6aGFzaDo6ZmluYWxpemUoKTsKICAgICMgUmVzdG9y
ZSB3aGF0ZXZlciB3ZSB3ZXJlIGdvaW5nIHRvIGV4aXQgd2l0aC4KICAgICQ/ID0gJGV4aXRf
Y29kZTsKfQoKaWYgKCRwYXJhbTo6ZGVwZmlsZSkgewogIG9wZW4gKG1haW46OkRFUEZJTEUs
ICI+Ii4kcGFyYW06OmRlcGZpbGUpIHx8CiAgICBkaWUgKCIkMDogY291bGRuJ3Qgb3BlbiAk
cGFyYW06OmRlcGZpbGUgKCQhKVxuIik7Cn0KCiMgSWYgdGhlIHN1cHBsaWVkIHRvcC1sZXZl
bCBDb25zY3JpcHQgZmlsZSBpcyBub3QgaW4gdGhlCiMgY3VycmVudCBkaXJlY3RvcnksIHRo
ZW4gY2hhbmdlIHRvIHRoYXQgZGlyZWN0b3J5Lgp7CiAgICBteSAoJHZvbCwgJGRpciwgJGZp
bGUpID0gRmlsZTo6U3BlYy0+c3BsaXRwYXRoKEZpbGU6OlNwZWMtPmNhbm9ucGF0aCgkcGFy
YW06OnRvcGZpbGUpKTsKICAgIGlmICgkdm9sIHx8ICRkaXIpIHsKCW15KCRjZCkgPSBGaWxl
OjpTcGVjLT5jYXRwYXRoKCR2b2wsICRkaXIsIHVuZGVmKTsKCWNoZGlyKCRjZCkgfHwgZGll
KCIkMDogY291bGRuJ3QgY2hhbmdlIHRvIGRpcmVjdG9yeSAkY2QgKCQhKVxuIik7CgkkcGFy
YW06OnRvcGZpbGUgPSAkZmlsZTsKICAgIH0KfQoKIyBXYWxrIHVwIHRoZSBkaXJlY3Rvcnkg
aGllcmFyY2h5IGxvb2tpbmcgZm9yIGEgQ29uc2NyaXB0IGZpbGUgKGlmIC10IHNldCkuCm15
KCR0YXJnZXRfdG9wKTsKbXkoQHRhcmdldGRpcikgPSAoKTsKaWYgKCRwYXJhbTo6dHJhdmVy
c2UgJiYgISAtZiAkcGFyYW06OnRvcGZpbGUpIHsKICAgIG15KCR2b2wsICRkaXJzLCAkZmls
ZSkgPSBGaWxlOjpTcGVjLT5zcGxpdHBhdGgoY3dkKCkpOwogICAgbXkoQGRpcnMpID0gKEZp
bGU6OlNwZWMtPnNwbGl0ZGlyKCRkaXJzKSwgJGZpbGUpOwogICAgd2hpbGUgKCEgLWYgRmls
ZTo6U3BlYy0+Y2F0cGF0aCgkdm9sLCBGaWxlOjpTcGVjLT5jYXRkaXIoQGRpcnMpLCAkcGFy
YW06OnRvcGZpbGUpKSB7CglkaWUoIiQwOiB1bmFibGUgdG8gZmluZCAkcGFyYW06OnRvcGZp
bGUuXG4iKSBpZiAhIEBkaXJzOwoJdW5zaGlmdChAdGFyZ2V0ZGlyLCBwb3AoQGRpcnMpKTsK
ICAgIH0KICAgIG15KCRjd2QpID0gRmlsZTo6U3BlYy0+Y2F0cGF0aCgkdm9sLCBGaWxlOjpT
cGVjLT5jYXRkaXIoQGRpcnMpLCAnJyk7CiAgICBwcmludCAiJDA6IEVudGVyaW5nIGRpcmVj
dG9yeSBgJGN3ZCdcbiI7CiAgICBjaGRpcigkY3dkKTsKICAgIEB0YXJnZXRzID0gbWFwIHtG
aWxlOjpTcGVjLT5jYXRkaXIoQHRhcmdldGRpciwgJF8pfSBAdGFyZ2V0czsKfQoKIyBTZXQg
dXAgJGRpcjo6dG9wIGFuZCAkZGlyOjpjd2QsIG5vdyB0aGF0IHdlIGFyZSBpbiB0aGUgcmln
aHQgZGlyZWN0b3J5LgpkaXI6OmluaXQoKTsKCiMKaWYgKEB0YXJnZXRkaXIpIHsKICAgICR0
YXJnZXRfdG9wID0gJGRpcjo6dG9wLT5sb29rdXBkaXIoRmlsZTo6U3BlYy0+Y2F0ZGlyKEB0
YXJnZXRkaXIpKTsKfQoKIyBOb3cgaGFuZGxlIG92ZXJyaWRlIGZpbGUuCnBhY2thZ2Ugb3Zl
cnJpZGU7CmlmICgkcGFyYW06Om92ZXJmaWxlKSB7CiAgICBteSgkb3YpID0gJHBhcmFtOjpv
dmVyZmlsZTsKICAgIGRpZSBxcSgkMDogY2FuXCd0IHJlYWQgb3ZlcnJpZGUgZmlsZSAiJG92
IiAoJCEpXG4pIGlmICEgLWYgJG92OyAjJwogICAgZG8gJG92OwogICAgaWYgKCRAKSB7Cglj
aG9wKCRAKTsKCWRpZSBxcSgkMDogZXJyb3JzIGluIG92ZXJyaWRlIGZpbGUgIiRvdiIgKCRA
KVxuKTsKICAgIH0KfQoKIyBQcm92aWRlIHRoaXMgdG8gdXNlciB0byBzZXR1cCBvdmVycmlk
ZSBwYXR0ZXJucy4Kc3ViIE92ZXJyaWRlIHsKICAgIG15KCRyZSwgQGVudikgPSBAXzsKICAg
IHJldHVybiBpZiAkcGFyYW06Om92ZXJyaWRlc3skcmV9OyAjIGlmIGlkZW50aWNhbCwgZmly
c3Qgd2lsbCB3aW4uCiAgICAkcGFyYW06Om92ZXJyaWRlcyA9IDE7CiAgICAkcGFyYW06Om92
ZXJyaWRlc3skcmV9ID0gXEBlbnY7CiAgICBwdXNoKEBwYXJhbTo6b3ZlcnJpZGVzLCAkcmUp
Owp9CgpwYWNrYWdlIG1haW47Cgp1c2UgdmFycyBxdyggJXByaW9yaXR5ICRlcnJvcnMgKTsK
CiMgQ2hlY2sgc2NyaXB0IGluY2x1c2lvbiByZWdleHBzCm15ICRyZTsKZm9yICRyZSAoQHBh
cmFtOjppbmNsdWRlKSB7CiAgICBpZiAoISBkZWZpbmVkIGV2YWwgeyIiID1+IC8kcmUvfSkg
ewoJbXkoJGVycikgPSAkQDsKCSRlcnIgPX4gcy9pbiByZWdleHAgYXQgLiokLy87CglkaWUo
IiQwOiBlcnJvciBpbiByZWdleHAgJGVyciIpOwogICAgfQp9CgojIFJlYWQgdGhlIHRvcC1s
ZXZlbCBjb25zdHJ1Y3QgZmlsZSBhbmQgaXRzIGluY2x1ZGVkIHNjcmlwdHMuCmRvc2NyaXB0
cygkcGFyYW06OnRvcGZpbGUpOwoKIyBTdGF0dXMgcHJpb3JpdGllcy4gVGhpcyBsZXRzIHVz
IGFnZ3JlZ2F0ZSBzdGF0dXMgZm9yIGRpcmVjdG9yaWVzCiMgYW5kIHByaW50IGFuIGFwcHJv
cHJpYXRlIG1lc3NhZ2UgKGF0IHRoZSB0b3AtbGV2ZWwpLgolcHJpb3JpdHkgPQogICAgKCdu
b25lJyA9PiAxLCAnaGFuZGxlZCcgPT4gMiwgJ2J1aWx0JyA9PiAzLCAndW5rbm93bicgPT4g
NCwgJ2Vycm9ycycgPT4gNSk7CgojIElmIG5vIHRhcmdldHMgd2VyZSBzcGVjaWZpZWQsIHN1
cHBseSBkZWZhdWx0IHRhcmdldHMgKGlmIGFueSkuCkB0YXJnZXRzID0gQHBhcmFtOjpkZWZh
dWx0X3RhcmdldHMgaWYgISBAdGFyZ2V0czsKCiRlcnJvcnMgPSAwOwoKIyBCdWlsZCB0aGUg
c3VwcGxpZWQgdGFyZ2V0IHBhdHRlcm5zLgpteSAkdGd0Owpmb3IgJHRndCAobWFwKCRkaXI6
OnRvcC0+bG9va3VwKCRfKSwgQHRhcmdldHMpKSB7CiAgICBpZiAoJHRhcmdldF90b3AgJiYg
ISAkdGd0LT5pc191bmRlcigkdGFyZ2V0X3RvcCkpIHsKCSMgQSAtdCBvcHRpb24gd2FzIHVz
ZWQsIGFuZCB0aGlzIHRhcmdldCBpcyBub3QgdW5kZXJuZWF0aAoJIyB0aGUgZGlyZWN0b3J5
IHdoZXJlIHdlIHdlcmUgaW52b2tlZCB2aWEgLXQuCgkjIElmIHRoZSB0YXJnZXQgaXMgYSBk
aXJlY3RvcnkgYW5kIHRoZSAtdCBkaXJlY3RvcnkKCSMgaXMgdW5kZXJuZWF0aCBpdCwgdGhl
biBidWlsZCB0aGUgLXQgZGlyZWN0b3J5LgoJaWYgKHJlZiAkdGd0IG5lICJkaXIiIHx8ICEg
JHRhcmdldF90b3AtPmlzX3VuZGVyKCR0Z3QpKSB7CgkgICAgbmV4dDsKCX0KCSR0Z3QgPSAk
dGFyZ2V0X3RvcDsKICAgIH0KICAgIGJ1aWxkdG9wdGFyZ2V0KCR0Z3QpOwp9CgpleGl0IDAg
KyAoJGVycm9ycyAhPSAwKTsKCnN1YiBidWlsZHRvcHRhcmdldCB7CiAgICBteSgkdGd0KSA9
IEBfOwogICAgcmV0dXJuIGlmICEgJHRndDsKICAgIG15KCRzdGF0dXMpID0gYnVpbGR0YXJn
ZXQoJHRndCk7CiAgICBpZiAoJHN0YXR1cyBuZSAnYnVpbHQnKSB7CglteSgkcGF0aCkgPSAk
dGd0LT5wYXRoOwoJaWYgKCRzdGF0dXMgZXEgImVycm9ycyIpIHsKCSAgICBwcmludCBxcSgk
MDogIiRwYXRoIiBub3QgcmVtYWRlIGJlY2F1c2Ugb2YgZXJyb3JzLlxuKTsKCSAgICAkZXJy
b3JzKys7Cgl9IGVsc2lmICgkc3RhdHVzIGVxICJoYW5kbGVkIikgewoJICAgIHByaW50IHFx
KCQwOiAiJHBhdGgiIGlzIHVwLXRvLWRhdGUuXG4pOwoJfSBlbHNpZiAoJHN0YXR1cyBlcSAi
dW5rbm93biIpIHsKCSAgICAjIGNvbnMgZXJyb3IgYWxyZWFkeSByZXBvcnRlZC4KCSAgICAk
ZXJyb3JzKys7Cgl9IGVsc2lmICgkc3RhdHVzIGVxICJub25lIikgewoJICAgICMgc2VhcmNo
IGZvciB0YXJnZXRzIHRoYXQgbWF5IGJlIGxpbmtlZCB0byB0aGUgZ2l2ZW4gcGF0aC4KCSAg
ICBteSBAbGlua2VkID0gZGlyOjpsaW5rZWRfdGFyZ2V0cygkdGd0KSBpZiAkdGFyZ2V0X3Rv
cDsKCSAgICBpZiAoQGxpbmtlZCkgewoJCW15IEBuYW1lcyA9IG1hcCgkXy0+cGF0aCwgQGxp
bmtlZCk7CgkJcHJpbnQgIkxpbmtlZCB0YXJnZXRzOiBAbmFtZXNcbiIgdW5sZXNzICgkcGFy
YW06OnF1aWV0KTsKCQltYXAoYnVpbGR0b3B0YXJnZXQoJF8pLCBAbGlua2VkKTsKCSAgICB9
IGVsc2UgewoJCXByaW50IHFxKCQwOiBub3RoaW5nIHRvIGJlIGJ1aWx0IGluICIkcGF0aCIu
XG4pIGlmICRwYXJhbTo6YnVpbGQ7CgkgICAgfQoJfSBlbHNlIHsKCSAgICBwcmludCBxcSgk
MDogZG9uXCd0IGtub3cgaG93IHRvIGNvbnN0cnVjdCAiJHBhdGgiLlxuKTsgIycKCSAgICAk
ZXJyb3JzKys7Cgl9CiAgICB9Cn0KCiMgQnVpbGQgdGhlIHN1cHBsaWVkIHRhcmdldCBkaXJl
Y3Rvcnkgb3IgZmlsZXMuIFJldHVybiBhZ2dyZWdhdGVkIHN0YXR1cy4Kc3ViIGJ1aWxkdGFy
Z2V0IHsKICAgIG15KCR0Z3QpID0gQF87CiAgICBpZiAocmVmKCR0Z3QpIGVxICJkaXIiKSB7
CglteSgkcmVzdWx0KSA9ICJub25lIjsKCW15KCRwcmlvcml0eSkgPSAkcHJpb3JpdHl7JHJl
c3VsdH07CglpZiAoZXhpc3RzICR0Z3QtPnttZW1iZXJ9KSB7CgkgICAgbXkoJG1lbWJlcnMp
ID0gJHRndC0+e21lbWJlcn07CgkgICAgbXkgJGVudHJ5OwoJICAgIGZvciAkZW50cnkgKHNv
cnQga2V5cyAlJG1lbWJlcnMpIHsKCQluZXh0IGlmICRlbnRyeSBlcSAkZGlyOjpDVVJESVIg
fHwgJGVudHJ5IGVxICRkaXI6OlVQRElSOwoJCW15KCR0Z3QpID0gJG1lbWJlcnMtPnskZW50
cnl9OwoJCW5leHQgaWYgcmVmKCR0Z3QpIG5lICJkaXIiICYmICFleGlzdHMoJHRndC0+e2J1
aWxkZXJ9KTsKCQlteSgkc3RhdCkgPSBidWlsZHRhcmdldCgkbWVtYmVycy0+eyRlbnRyeX0p
OwoJCW15KCRwcmkpID0gJHByaW9yaXR5eyRzdGF0fTsKCQlpZiAoJHByaSA+ICRwcmlvcml0
eSkgewoJCSAgICAkcHJpb3JpdHkgPSAkcHJpOwoJCSAgICAkcmVzdWx0ID0gJHN0YXQ7CgkJ
fQoJICAgIH0KCX0KCXJldHVybiAkcmVzdWx0OwogICAgfQogICAgaWYgKCRwYXJhbTo6ZGVw
ZW5kcykgewoJbXkoJHBhdGgpID0gJHRndC0+cGF0aDsKCWlmICgkdGd0LT57YnVpbGRlcn0p
IHsKCSAgICBteShAZGVwKSA9IChAeyR0Z3QtPntkZXB9fSwgQHskdGd0LT57c291cmNlc319
KTsKCSAgICBteSgkZGVwKSA9IGpvaW4oJyAnLG1hcCgkXy0+cGF0aCwgQGRlcCkpOwoJICAg
IHByaW50KCJUYXJnZXQgJHBhdGg6ICRkZXBcbiIpOwoJfSBlbHNlIHsKCSAgICBwcmludCgi
VGFyZ2V0ICRwYXRoOiBub3QgYSBkZXJpdmVkIGZpbGVcbiIpOwoJfQogICAgfQogICAgaWYg
KCRwYXJhbTo6YnVpbGQpIHsKCXJldHVybiBidWlsZCAkdGd0OwogICAgfSBlbHNpZiAoJHBh
cmFtOjpwZmxhZyB8fCAkcGFyYW06OndmbGFnIHx8ICRwYXJhbTo6YWZsYWcpIHsKCWlmICgk
dGd0LT57YnVpbGRlcn0pIHsKCSAgICBpZiAoJHBhcmFtOjp3ZmxhZykgewoJCXByaW50IHFx
KCR7XCR0Z3QtPnBhdGh9OiAkdGd0LT57c2NyaXB0fVxuKTsKCSAgICB9IGVsc2lmICgkcGFy
YW06OnBmbGFnKSB7CgkJcHJpbnQgcXEoJHtcJHRndC0+cGF0aH06XG4pIGlmICRwYXJhbTo6
YWZsYWc7CgkJcHJpbnQgcXEoJHtcJHRndC0+cGF0aH1cbikgaWYgISRwYXJhbTo6YWZsYWc7
CgkgICAgfQoJICAgIGlmICgkcGFyYW06OmFmbGFnKSB7CgkJJHRndC0+e2J1aWxkZXJ9LT5h
Y3Rpb24oJHRndCk7CgkgICAgfQoJfQogICAgfSBlbHNpZiAoJHBhcmFtOjpyZmxhZyAmJiAk
dGd0LT57YnVpbGRlcn0pIHsKCW15KCRwYXRoKSA9ICR0Z3QtPnBhdGg7CglpZiAoLWYgJHBh
dGgpIHsKCSAgICBpZiAodW5saW5rKCRwYXRoKSkgewoJCXByaW50KCJSZW1vdmVkICRwYXRo
XG4iKSB1bmxlc3MgKCRwYXJhbTo6cXVpZXQpOwoJICAgIH0gZWxzZSB7CgkJd2FybigiJDA6
IGNvdWxkbid0IHJlbW92ZSAkcGF0aFxuIik7CgkgICAgfQoJfQogICAgfQoKICAgIHJldHVy
biAibm9uZSI7Cn0KCnBhY2thZ2UgTmFtZVNwYWNlOwoKIyBSZXR1cm4gYSBoYXNoIHRoYXQg
bWFwcyB0aGUgbmFtZSBvZiBzeW1ib2xzIGluIGEgbmFtZXNwYWNlIHRvIGFuCiMgYXJyYXkg
b2YgcmVmcyBmb3IgYWxsIHR5cGVzIGZvciB3aGljaCB0aGUgbmFtZSBoYXMgYSBkZWZpbmVk
IHZhbHVlLgojIEEgbGlzdCBvZiBzeW1ib2xzIG1heSBiZSBzcGVjaWZpZWQ7IGRlZmF1bHQg
aXMgYWxsIHN5bWJvbHMgaW4gdGhlCiMgbmFtZSBzcGFjZS4Kc3ViIHNhdmUgewogICAgbXkg
JHBhY2thZ2UgPSBzaGlmdDsKICAgIG15KCVuYW1lcmVmcywgJHZhciwgJHR5cGUpOwogICAg
bm8gc3RyaWN0ICdyZWZzJzsKICAgIEBfID0ga2V5cyAleyRwYWNrYWdlLiI6OiJ9IGlmICEg
QF87CiAgICBmb3JlYWNoICR2YXIgKEBfKSB7CgkkbmFtZXJlZnN7JHZhcn0gPSBbXTsKCW15
ICRmcXZhciA9ICRwYWNrYWdlLiI6OiIuJHZhcjsKCSMgSWYgdGhlIHNjYWxhciBmb3IgdGhp
cyB2YXJpYWJsZSBuYW1lIGRvZXNuJ3QgYWxyZWFkeQoJIyBleGlzdCwgKmZvb3tTQ0FMQVJ9
IHdpbGwgYXV0b3ZpdmlmeSB0aGUgcmVmZXJlbmNlCgkjIGluc3RlYWQgb2YgcmV0dXJuaW5n
IHVuZGVmLCBzbyB1bmxpa2UgdGhlIG90aGVyIHR5cGVzLAoJIyB3ZSBoYXZlIHRvIGRlcmVm
ZXJlbmNlIHRvIGZpbmQgb3V0IGlmIGl0IGV4aXN0cy4KCXB1c2goQHskbmFtZXJlZnN7JHZh
cn19LCAqeyRmcXZhcn17U0NBTEFSfSkKCQkgICAgaWYgZGVmaW5lZCAkeyp7JGZxdmFyfXtT
Q0FMQVJ9fTsKCWZvcmVhY2ggJHR5cGUgKHF3KEFSUkFZIEhBU0ggQ09ERSBJTykpIHsKCSAg
ICBwdXNoKEB7JG5hbWVyZWZzeyR2YXJ9fSwgKnskZnF2YXJ9eyR0eXBlfSkKCQkJICBpZiBk
ZWZpbmVkICp7JGZxdmFyfXskdHlwZX07Cgl9CiAgICB9CiAgICByZXR1cm4gXCVuYW1lcmVm
czsKfQoKIyBSZW1vdmUgdGhlIHNwZWNpZmllZCBzeW1ib2xzIGZyb20gdGhlIG5hbWVzcGFj
ZS4KIyBEZWZhdWx0IGlzIHRvIHJlbW92ZSBhbGwuCnN1YiByZW1vdmUgewogICAgbXkgJHBh
Y2thZ2UgPSBzaGlmdDsKICAgIG15KCVuYW1lcmVmcywgJHZhcik7CiAgICBubyBzdHJpY3Qg
J3JlZnMnOwogICAgQF8gPSBrZXlzICV7JHBhY2thZ2UuIjo6In0gaWYgISBAXzsKICAgIGZv
cmVhY2ggJHZhciAoQF8pIHsKCWRlbGV0ZSAkeyRwYWNrYWdlLiI6OiJ9eyR2YXJ9OwogICAg
fQp9CgojIFJlc3RvcmUgdmFsdWVzIHRvIHN5bWJvbHMgc3BlY2lmaWVkIGluIGEgaGFzaCBh
cyByZXR1cm5lZAojIGJ5IE5hbWVTcGFjZTo6c2F2ZS4Kc3ViIHJlc3RvcmUgewogICAgbXko
JHBhY2thZ2UsICRuYW1lcmVmcykgPSBAXzsKICAgIG15KCR2YXIsICRyZWYpOwogICAgbm8g
c3RyaWN0ICdyZWZzJzsKICAgIGZvcmVhY2ggJHZhciAoa2V5cyAlJG5hbWVyZWZzKSB7Cglt
eSAkZnF2YXIgPSAkcGFja2FnZS4iOjoiLiR2YXI7Cglmb3JlYWNoICRyZWYgKEB7JG5hbWVy
ZWZzLT57JHZhcn19KSB7CgkgICAgKnskZnF2YXJ9ID0gJHJlZjsKCX0KICAgIH0KfQoKIyBT
dXBwb3J0IGZvciAiYnVpbGRpbmciIHNjcmlwdHMsIGltcG9ydGluZyBhbmQgZXhwb3J0aW5n
IHZhcmlhYmxlcy4KIyBXaXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHRvcC1sZXZlbCByb3V0
aW5lIGhlcmUgKGludm9rZWQgZnJvbSB0aGUKIyBtYWluIHBhY2thZ2UgYnkgY29ucyksIHRo
ZXNlIGFyZSBhbGwgaW52b2tlZCBieSB1c2VyIHNjcmlwdHMuCnBhY2thZ2Ugc2NyaXB0OwoK
dXNlIHZhcnMgcXcoICRBUkcgJGNhbGxlcl9kaXJfcGF0aCAlc3BlY2lhbF92YXIgKTsKCkJF
R0lOIHsKICAgICMgV2UgY2FuJ3QgRXhwb3J0IG9yIEltcG9ydCB0aGUgZm9sbG93aW5nIHZh
cmlhYmxlcyBiZWNhdXNlIFBlcmwgYWx3YXlzCiAgICAjIHRyZWF0cyB0aGVtIGFzIHBhcnQg
b2YgdGhlICJtYWluOjoiIHBhY2thZ2UgKHNlZSBwZXJsdmFyKDEpKS4KICAgICVzcGVjaWFs
X3ZhciA9IG1hcCB7JF8gPT4gMX0gcXcoRU5WIElOQyBBUkdWIEFSR1ZPVVQgU0lHCgkJCQkg
ICAgU1RESU4gU1RET1VUIFNUREVSUik7Cn0KCiMgVGhpcyBpcyBjYWxsZWQgZnJvbSBtYWlu
IHRvIGludGVycHJldC9ydW4gdGhlIHRvcC1sZXZlbCBDb25zdHJ1Y3QKIyBmaWxlLCBwYXNz
ZWQgaW4gYXMgdGhlIHNpbmdsZSBhcmd1bWVudC4Kc3ViIG1haW46OmRvc2NyaXB0cyB7CiAg
ICBteSgkc2NyaXB0KSA9IEBfOwogICAgQnVpbGQoJHNjcmlwdCk7CiAgICAjIE5vdyBzZXQg
dXAgdGhlIGluY2x1ZGVzL2V4Y2x1ZGVzIChhZnRlciB0aGUgQ29uc3RydWN0IGZpbGUgaXMg
cmVhZCkuCiAgICAkcGFyYW06OmluY2x1ZGUgPSBqb2luKCd8JywgQHBhcmFtOjppbmNsdWRl
KTsKCiAgICAjIFNhdmUgdGhlIG9yaWdpbmFsIHZhcmlhYmxlIG5hbWVzIGZyb20gdGhlIHNj
cmlwdCBwYWNrYWdlLgogICAgIyBUaGVzZSB3aWxsIHN0YXkgaW50YWN0LCBidXQgYW55IG90
aGVyICJzY3JpcHQ6OiIgdmFyaWFibGVzCiAgICAjIGRlZmluZWQgaW4gYSBDb25zY3JpcHQg
ZmlsZSB3aWxsIGdldCBzYXZlZCwgZGVsZXRlZCwKICAgICMgYW5kICh3aGVuIG5lY2Vzc2Fy
eSkgcmVzdG9yZWQuCiAgICBteSglb3JpZ19zY3JpcHRfdmFyKSA9IG1hcCB7JF8gPT4gMX0g
a2V5cyAlc2NyaXB0Ojo7CiAgICAkY2FsbGVyX2Rpcl9wYXRoID0gdW5kZWY7CiAgICBteSAk
Y3dkID0gQ3dkOjpjd2QoKTsKICAgIG15KEBzY3JpcHRzKSA9IHBvcChAcHJpdjo6c2NyaXB0
cyk7CiAgICB3aGlsZSAoJHByaXY6OnNlbGYgPSBzaGlmdChAc2NyaXB0cykpIHsKCW15KCRw
YXRoKSA9ICRwcml2OjpzZWxmLT57c2NyaXB0fS0+cnNyY3BhdGg7CglpZiAoLWYgJHBhdGgp
IHsKCSAgICAkZGlyOjpjd2QgPSAkcHJpdjo6c2VsZi0+e3NjcmlwdH0tPntkaXJ9OwoJICAg
ICMgSGFuZGxlIGNoZGlyIHRvIHRoZSBDb25zY3JpcHQgZmlsZSBkaXJlY3RvcnksIGlmIG5l
Y2Vzc2FyeS4KCSAgICBteSAoJHZvbCwgJGRpciwgJGZpbGUpOwoJICAgIGlmICgkcGFyYW06
OmNvbnNjcmlwdF9jaGRpcikgewoJCSgkdm9sLCAkZGlyLCAkZmlsZSkgPSBGaWxlOjpTcGVj
LT5zcGxpdHBhdGgoRmlsZTo6U3BlYy0+Y2Fub25wYXRoKCRwYXRoKSk7CgkJaWYgKCR2b2wg
bmUgJycgfHwgJGRpciBuZSAnJykgewoJCSAgICAkY2FsbGVyX2Rpcl9wYXRoID0gRmlsZTo6
U3BlYy0+Y2F0cGF0aCgkdm9sLCAkZGlyLCB1bmRlZik7CgkJICAgIGNoZGlyKCRjYWxsZXJf
ZGlyX3BhdGgpIHx8CgkJCWRpZSAiQ291bGQgbm90IGNoZGlyIHRvICRjYWxsZXJfZGlyX3Bh
dGg6ICQhXG4iOwoJCX0KCSAgICB9IGVsc2UgewoJCSRmaWxlID0gJHBhdGg7CgkgICAgfQoJ
ICAgICMgQWN0dWFsbHkgcHJvY2VzcyB0aGUgQ29uc2NyaXB0IGZpbGUuCgkgICAgZG8gJGZp
bGU7CgkgICAgIyBTYXZlIGFueSB2YXJpYWJsZXMgZGVmaW5lZCBieSB0aGUgQ29uc2NyaXB0
IGZpbGUKCSAgICAjIHNvIHdlIGNhbiByZXN0b3JlIHRoZW0gbGF0ZXIsIGlmIG5lZWRlZDsK
CSAgICAjIHRoZW4gZGVsZXRlIHRoZW0gZnJvbSB0aGUgc2NyaXB0OjogbmFtZXNwYWNlLgoJ
ICAgIG15KEBkZWwpID0gZ3JlcCghICRvcmlnX3NjcmlwdF92YXJ7JF99LCBrZXlzICVzY3Jp
cHQ6Oik7CgkgICAgaWYgKEBkZWwpIHsKCQkkcHJpdjo6c2VsZi0+e3NjcmlwdH0tPntwa2d2
YXJzfSA9CgkJCQkJCU5hbWVTcGFjZTo6c2F2ZSgnc2NyaXB0JywgQGRlbCk7CgkJTmFtZVNw
YWNlOjpyZW1vdmUoJ3NjcmlwdCcsIEBkZWwpOwoJICAgIH0KCSAgICBpZiAoJGNhbGxlcl9k
aXJfcGF0aCkgewoJCWNoZGlyKCRjd2QpOwoJCSRjYWxsZXJfZGlyX3BhdGggPSB1bmRlZjsK
CSAgICB9CgkgICAgaWYgKCRAKSB7CgkJY2hvbXAoJEApOwoJCW15ICRlcnIgPSAoJEAgPX4g
L1xuL21zKSA/ICI6XG4kQCIgOiAiICgkQCkiOwoJCXByaW50IHFxKCQwOiBlcnJvciBpbiBm
aWxlICIkcGF0aCIkZXJyXG4pOwoJCSRydW46OmVycm9ycysrOwoJICAgIH0gZWxzZSB7CgkJ
IyBPbmx5IHByb2Nlc3Mgc3Vic2lkaWFyeSBzY3JpcHRzIGlmIG5vIGVycm9ycyBpbiBwYXJl
bnQuCgkJdW5zaGlmdChAc2NyaXB0cywgQHByaXY6OnNjcmlwdHMpOwoJICAgIH0KCSAgICB1
bmRlZiBAcHJpdjo6c2NyaXB0czsKCX0gZWxzZSB7CgkgICAgbXkgJHdoZXJlID0gJyc7Cgkg
ICAgbXkgJGNyZWYgPSAkcHJpdjo6c2VsZi0+e3NjcmlwdH0tPmNyZWF0b3I7CgkgICAgaWYg
KGRlZmluZWQgJGNyZWYpIHsKCQlteSgkX2ZvbywgJHNjcmlwdCwgJGxpbmUsICRzdWIpID0g
QCRjcmVmOwoJCSR3aGVyZSA9ICIgKCRzdWIgaW4gJHNjcmlwdCwgbGluZSAkbGluZSkiOwoJ
ICAgIH0KCSAgICB3YXJuIHFxKElnbm9yaW5nIG1pc3Npbmcgc2NyaXB0ICIkcGF0aCIkd2hl
cmUpOwoJfQogICAgfQogICAgZGllKCIkMDogc2NyaXB0IGVycm9ycyBlbmNvdW50ZXJlZDog
Y29uc3RydWN0aW9uIGFib3J0ZWRcbiIpCglpZiAkcnVuOjplcnJvcnM7Cn0KCiMgUmV0dXJu
IGNhbGxlciBpbmZvIGFib3V0IHRoZSBtZXRob2QgYmVpbmcgaW52b2tlZC4KIyBUaGlzIGlz
IGV2ZXJ5dGhpbmcgZnJvbSB0aGUgUGVybCAiY2FsbGVyIiBidWlsdGluIGZ1bmN0aW9uLAoj
IGluY2x1ZGluZyB3aGljaCBDb25zdHJ1Y3QvQ29uc2NyaXB0IGZpbGUsIGxpbmUgbnVtYmVy
LAojIHN1YnJvdXRpbmUgbmFtZSwgZXRjLgpzdWIgY2FsbGVyX2luZm8gewogICAgbXkoJGxl
dikgPSAxOwogICAgbXkoQGZyYW1lKTsKICAgIGRvIHsKCUBmcmFtZSA9IGNhbGxlciArKyRs
ZXY7CglpZiAoZGVmaW5lZCgkZnJhbWVbM10pICYmICRmcmFtZVszXSBlcSAnKGV2YWwpJykg
ewoJICAgIEBmcmFtZSA9IGNhbGxlciAtLSRsZXY7CgkgICAgaWYgKCRjYWxsZXJfZGlyX3Bh
dGgpIHsKCQkkZnJhbWVbMV0gPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRjYWxsZXJfZGlyX3Bh
dGgsICRmcmFtZVsxXSk7CgkgICAgfQoJICAgIHJldHVybiBAZnJhbWU7Cgl9CiAgICB9IHdo
aWxlICgkZnJhbWVbM10pOwogICAgcmV0dXJuOwp9CgojIExpbmsgYSBkaXJlY3RvcnkgdG8g
YW5vdGhlci4gVGhpcyBzaW1wbHkgbWVhbnMgc2V0IHVwIHRoZSAqc291cmNlKgojIGZvciB0
aGUgZGlyZWN0b3J5IHRvIGJlIHRoZSBvdGhlciBkaXJlY3RvcnkuCnN1YiBMaW5rIHsKICAg
IGRpcjo6bGluayhAXyk7Cn0KCiMgQWRkIGRpcmVjdG9yaWVzIHRvIHRoZSByZXBvc2l0b3J5
IHNlYXJjaCBwYXRoIGZvciBmaWxlcy4KIyBXZSdyZSBjYXJlZnVsIGFib3V0IHN0cmlwcGlu
ZyBvdXIgY3VycmVudCBkaXJlY3RvcnkgZnJvbQojIHRoZSBsaXN0LCB3aGljaCB3ZSBkbyBi
eSBjb21wYXJpbmcgdGhlIGBwd2RgIHJlc3VsdHMgZnJvbQojIHRoZSBjdXJyZW50IGRpcmVj
dG9yeSBhbmQgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkuICBUaGlzCiMgaXMgY3VtYmVyc29t
ZSwgYnV0IGFzc3VyZXMgdGhhdCB0aGUgcGF0aHMgd2lsbCBiZSByZXBvcnRlZAojIHRoZSBz
YW1lIHJlZ2FyZGxlc3Mgb2Ygc3ltYm9saWMgbGlua3MuCnN1YiBSZXBvc2l0b3J5IHsKICAg
IG15KCRteV9kaXIpID0gQ3dkOjpjd2QoKTsKICAgIG15ICRkaXI7CiAgICBmb3JlYWNoICRk
aXIgKEBfKSB7CglteSgkZCkgPSBgJF5YIC1lICJ1c2UgQ3dkOyBjaGRpcignJGRpcicpICYm
IHByaW50IGN3ZCJgOwoJbmV4dCBpZiAhICRkIHx8ICEgLWQgJGQgfHwgJGQgZXEgJG15X2Rp
cjsKCSMgV2Uga25vdyB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBwYXNzaW5nIHVuZGVmIHRvIGxv
b2t1cGRpcgoJIyBhcyB0aGUgZGlyZWN0b3J5IGJlY2F1c2UgJGRpciBpcyBhbiBhYnNvbHV0
ZSBwYXRoLgoJcHVzaChAcGFyYW06OnJwYXRoLCBkaXI6Omxvb2t1cGRpcih1bmRlZiwgJGRp
cikpOwoJcHVzaCBASU5DLCAkZDsKICAgIH0KfQoKIyBSZXR1cm4gdGhlIGxpc3Qgb2YgUmVw
b3NpdG9yeSBkaXJlY3RvcmllcyBzcGVjaWZpZWQuCnN1YiBSZXBvc2l0b3J5X0xpc3Qgewog
ICAgbWFwKCRfLT5wYXRoLCBAcGFyYW06OnJwYXRoKTsKfQoKIyBTcGVjaWZ5IHdoZXRoZXIg
dGhlIC5jb25zaWduIHNpZ25hdHVyZSB0aW1lcyBpbiByZXBvc2l0b3J5IGZpbGVzIGFyZSwK
IyBpbiBmYWN0LCBjb25zaXN0ZW50IHdpdGggdGhlIHRpbWVzIG9uIHRoZSBmaWxlcyB0aGVt
c2VsdmVzLgpzdWIgUmVwb3NpdG9yeV9TaWdfVGltZXNfT0sgewogICAgJHBhcmFtOjpyZXBf
c2lnX3RpbWVzX29rID0gc2hpZnQ7Cn0KCiMgU3BlY2lmeSB3aGV0aGVyIHdlIHNob3VsZCBj
aGRpciB0byB0aGUgY29udGFpbmluZyBkaXJlY3RvcmllcwojIG9mIENvbnNjcmlwdCBmaWxl
cy4Kc3ViIENvbnNjcmlwdF9jaGRpciB7CiAgICAkcGFyYW06OmNvbnNjcmlwdF9jaGRpciA9
IHNoaWZ0Owp9CgojIFNwZWNpZnkgZmlsZXMvdGFyZ2V0cyB0aGF0IG11c3QgYmUgcHJlc2Vu
dCBhbmQgYnVpbHQgbG9jYWxseSwKIyBldmVuIGlmIHRoZXkgZXhpc3QgYWxyZWFkeS1idWls
dCBpbiBhIFJlcG9zaXRvcnkuCnN1YiBMb2NhbCB7CiAgICBteShAZmlsZXMpID0gbWFwKCRk
aXI6OmN3ZC0+bG9va3VwZmlsZSgkXyksIEBfKTsKICAgIG1hcCgkXy0+bG9jYWwoMSksIEBm
aWxlcyk7Cn0KCiMgRXhwb3J0IHZhcmlhYmxlcyB0byBhbnkgc2NyaXB0cyBpbnZva2VkIGZy
b20gdGhpcyBvbmUuCnN1YiBFeHBvcnQgewogICAgbXkoQGlsbGVnYWwpID0gZ3JlcCgkc3Bl
Y2lhbF92YXJ7JF99LCBAXyk7CiAgICBpZiAoQGlsbGVnYWwpIHsKCWRpZSBxcSgkMDogY2Fu
bm90IEV4cG9ydCBzcGVjaWFsIFBlcmwgdmFyaWFibGVzOiBAaWxsZWdhbFxuKTsKICAgIH0K
ICAgIEB7JHByaXY6OnNlbGYtPntleHBvcnRzfX0gPSBncmVwKCEgZGVmaW5lZCAkc3BlY2lh
bF92YXJ7JF99LCBAXyk7Cn0KCiMgSW1wb3J0IHZhcmlhYmxlcyBmcm9tIHRoZSBleHBvcnQg
bGlzdCBvZiB0aGUgY2FsbGVyCiMgb2YgdGhlIGN1cnJlbnQgc2NyaXB0LgpzdWIgSW1wb3J0
IHsKICAgIG15KEBpbGxlZ2FsKSA9IGdyZXAoJHNwZWNpYWxfdmFyeyRffSwgQF8pOwogICAg
aWYgKEBpbGxlZ2FsKSB7CglkaWUgcXEoJDA6IGNhbm5vdCBJbXBvcnQgc3BlY2lhbCBQZXJs
IHZhcmlhYmxlczogQGlsbGVnYWxcbik7CiAgICB9CiAgICBteSgkcGFyZW50KSA9ICRwcml2
OjpzZWxmLT57cGFyZW50fTsKICAgIG15KCRpbXBvcnRzKSA9ICRwcml2OjpzZWxmLT57aW1w
b3J0c307CiAgICBAeyRwcml2OjpzZWxmLT57ZXhwb3J0c319ID0ga2V5cyAlJGltcG9ydHM7
CiAgICBteSgkdmFyKTsKICAgIGZvcmVhY2ggJHZhciAoZ3JlcCghIGRlZmluZWQgJHNwZWNp
YWxfdmFyeyRffSwgQF8pKSB7CglpZiAoIWV4aXN0cyAkaW1wb3J0cy0+eyR2YXJ9KSB7Cgkg
ICAgbXkoJHBhdGgpID0gJHBhcmVudC0+e3NjcmlwdH0tPnBhdGg7CgkgICAgZGllIHFxKCQw
OiB2YXJpYWJsZSAiJHZhciIgbm90IGV4cG9ydGVkIGJ5IGZpbGUgIiRwYXRoIlxuKTsKCX0K
CWlmICghZGVmaW5lZCAkaW1wb3J0cy0+eyR2YXJ9KSB7CgkgICAgbXkgJHBhdGggPSAkcGFy
ZW50LT57c2NyaXB0fS0+cGF0aDsKCSAgICBteSAkZXJyID0gIiQwOiB2YXJpYWJsZSBcIiR2
YXJcIiBleHBvcnRlZCBidXQgbm90ICIgLgoJCSAgICAgICJkZWZpbmVkIGJ5IGZpbGUgXCIk
cGF0aFwiXG4iOwoJICAgIGRpZSAkZXJyOwoJfQoJJHsic2NyaXB0OjokdmFyIn0gPSAkaW1w
b3J0cy0+eyR2YXJ9OwogICAgfQp9CgojIEJ1aWxkIGFuIGluZmVyaW9yIHNjcmlwdC4gVGhh
dCBpcywgYXJyYW5nZSB0byByZWFkIGFuZCBleGVjdXRlCiMgdGhlIHNwZWNpZmllZCBzY3Jp
cHQsIHBhc3NpbmcgdG8gaXQgYW55IGV4cG9ydGVkIHZhcmlhYmxlcyBmcm9tCiMgdGhlIGN1
cnJlbnQgc2NyaXB0LgpzdWIgQnVpbGQgewogICAgbXkoQGZpbGVzKSA9IG1hcCgkZGlyOjpj
d2QtPmxvb2t1cGZpbGUoJF8pLCBAXyk7CiAgICBteSglaW1wb3J0cykgPSBtYXAgeyRfID0+
ICR7InNjcmlwdDo6JF8ifX0gQHskcHJpdjo6c2VsZi0+e2V4cG9ydHN9fTsKICAgIG15ICRm
aWxlOwogICAgZm9yICRmaWxlIChAZmlsZXMpIHsKCW5leHQgaWYgJHBhcmFtOjppbmNsdWRl
ICYmICRmaWxlLT5wYXRoICF+IC8kcGFyYW06OmluY2x1ZGUvbzsKCW15KCRzZWxmKSA9IHsn
c2NyaXB0JyA9PiAkZmlsZSwKCQkgICAgICdwYXJlbnQnID0+ICRwcml2OjpzZWxmLAoJCSAg
ICAgJ2ltcG9ydHMnID0+IFwlaW1wb3J0c307CglibGVzcyAkc2VsZjsgICMgbWF5IHdhbnQg
dG8gYmxlc3MgaW50byBjbGFzcyBvZiBwYXJlbnQgaW4gZnV0dXJlCglwdXNoKEBwcml2Ojpz
Y3JpcHRzLCAkc2VsZik7CiAgICB9Cn0KCiMgU2V0IHVwIHJlZ2V4cHMgZGVwZW5kZW5jaWVz
IHRvIGlnbm9yZS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuCnN1YiBJZ25vcmUgewog
ICAgZGllKCJJZ25vcmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlXG4iKSBpZiAkcGFyYW06Omln
bm9yZTsKICAgICRwYXJhbTo6aWdub3JlID0gam9pbigifCIsIG1hcCgiKCRfKSIsIEBfKSkg
aWYgQF87Cn0KCiMgU3BlY2lmaWNhdGlvbiBvZiBkZWZhdWx0IHRhcmdldHMuCnN1YiBEZWZh
dWx0IHsKICAgIHB1c2goQHBhcmFtOjpkZWZhdWx0X3RhcmdldHMsIG1hcCgkZGlyOjpjd2Qt
Pmxvb2t1cCgkXyktPnBhdGgsIEBfKSk7Cn0KCiMgTG9jYWwgSGVscC4gIFNob3VsZCBvbmx5
IGJlIGNhbGxlZCBvbmNlLgpzdWIgSGVscCB7CiAgICBpZiAoJHBhcmFtOjpsb2NhbGhlbHAp
IHsKCXByaW50ICJAX1xuIjsKCWV4aXQgMjsKICAgIH0KfQoKIyBSZXR1cm4gdGhlIGJ1aWxk
IG5hbWUocykgb2YgYSBmaWxlIG9yIGZpbGUgbGlzdC4Kc3ViIEZpbGVQYXRoIHsKICAgIHdh
bnRhcnJheQoJPyBtYXAoJGRpcjo6Y3dkLT5sb29rdXBmaWxlKCRfKS0+cGF0aCwgQF8pCgk6
ICRkaXI6OmN3ZC0+bG9va3VwZmlsZSgkX1swXSktPnBhdGg7Cn0KCiMgUmV0dXJuIHRoZSBi
dWlsZCBuYW1lKHMpIG9mIGEgZGlyZWN0b3J5IG9yIGRpcmVjdG9yeSBsaXN0LgpzdWIgRGly
UGF0aCB7CiAgICB3YW50YXJyYXkKCT8gbWFwKCRkaXI6OmN3ZC0+bG9va3VwZGlyKCRfKS0+
cGF0aCwgQF8pCgk6ICRkaXI6OmN3ZC0+bG9va3VwZGlyKCRfWzBdKS0+cGF0aDsKfQoKIyBT
cGxpdCB0aGUgc2VhcmNoIHBhdGggcHJvdmlkZWQgaW50byBjb21wb25lbnRzLiBMb29rIGVh
Y2ggdXAKIyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiMgVGhlIHVzdWFs
IHBhdGggc2VwYXJhdG9yIHByb2JsZW1zIGFib3VuZDsgZm9yIG5vdyB3ZSdsbCB1c2UgOgpz
dWIgU3BsaXRQYXRoIHsKICAgIG15KCRkaXJzKSA9IEBfOwogICAgaWYgKHJlZigkZGlycykg
bmUgIkFSUkFZIikgewoJJGRpcnMgPSBbIHNwbGl0KC8kbWFpbjo6UEFUSF9TRVBBUkFUT1Iv
bywgJGRpcnMpIF07CiAgICB9CiAgICBtYXAgeyBEaXJQYXRoKCRfKSB9IEAkZGlyczsKfQoK
IyBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3VwcGxpZWQgcGF0aCBpcyBhdmFpbGFibGUgYXMgYSBz
b3VyY2UgZmlsZQojIG9yIGlzIGJ1aWxkYWJsZSAoYnkgcnVsZXMgc2VlbiB0by1kYXRlIGlu
IHRoZSBidWlsZCkuCnN1YiBDb25zUGF0aCB7CiAgICBteSgkcGF0aCkgPSBAXzsKICAgIG15
KCRmaWxlKSA9ICRkaXI6OmN3ZC0+bG9va3VwKCRwYXRoKTsKICAgIHJldHVybiAkZmlsZS0+
YWNjZXNzaWJsZTsKfQoKIyBSZXR1cm4gdGhlIHNvdXJjZSBwYXRoIG9mIHRoZSBzdXBwbGll
ZCBwYXRoLgpzdWIgU291cmNlUGF0aCB7CiAgICB3YW50YXJyYXkKCT8gbWFwKCRkaXI6OmN3
ZC0+bG9va3VwZmlsZSgkXyktPnJzcmNwYXRoLCBAXykKCTogJGRpcjo6Y3dkLT5sb29rdXBm
aWxlKCRfWzBdKS0+cnNyY3BhdGg7Cn0KCiMgU2VhcmNoIHVwIHRoZSB0cmVlIGZvciB0aGUg
c3BlY2lmaWVkIGNhY2hlIGRpcmVjdG9yeSwgc3RhcnRpbmcgd2l0aAojIHRoZSBjdXJyZW50
IGRpcmVjdG9yeS4gUmV0dXJucyB1bmRlZiBpZiBub3QgZm91bmQsIDEgb3RoZXJ3aXNlLgoj
IElmIHRoZSBkaXJlY3RvcnkgaXMgZm91bmQsIHRoZW4gY2FjaGluZyBpcyBlbmFibGVkLiBU
aGUgZGlyZWN0b3J5CiMgbXVzdCBiZSByZWFkYWJsZSBhbmQgd3JpdGFibGUuIElmIHRoZSBh
cmd1bWVudCAibWl4dGFyZ2V0cyIgaXMgcHJvdmlkZWQsCiMgdGhlbiB0YXJnZXRzIG1heSBi
ZSBtaXhlZCBpbiB0aGUgY2FjaGUgKHR3byB0YXJnZXRzIG1heSBzaGFyZSB0aGUgc2FtZQoj
IGNhY2hlIGZpbGUtLW5vdCByZWNvbW1lbmRlZCkuCnN1YiBVc2VDYWNoZSgkQCkgewogICAg
bXkoJGRpciwgQGFyZ3MpID0gQF87CiAgICAjIE5PVEU6IGl0J3MgaW1wb3J0YW50IHRvIHBy
b2Nlc3MgYXJndW1lbnRzIGhlcmUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyCiAgICAjIHRoZSBj
YWNoZSBpcyBkaXNhYmxlZCB0ZW1wb3JhcmlseSwgc2luY2UgdGhlIG1peHRhcmdldHMgb3B0
aW9uIGFmZmVjdHMKICAgICMgdGhlIHNhbHQgZm9yIGRlcml2ZWQgc2lnbmF0dXJlcy4KICAg
IGZvciAoQGFyZ3MpIHsKCWlmICgkXyBlcSAibWl4dGFyZ2V0cyIpIHsKCSAgICAjIFdoZW4g
bWl4dGFyZ2V0cyBpcyBlbmFibGVkLCB3ZSBzYWx0IHRoZSB0YXJnZXQgc2lnbmF0dXJlcy4K
CSAgICAjIFRoaXMgaXMgZG9uZSBwdXJlbHkgdG8gYXZvaWQgYSBzY2VuYXJpbyB3aGVyZWJ5
IGlmCgkgICAgIyBtaXh0YXJnZXRzIGlzIHR1cm5lZCBvbiBvciBvZmYgYWZ0ZXIgZG9pbmcg
YnVpbGRzLCBhbmQKCSAgICAjIGlmIGNhY2hlIHN5bmNocm9uaXphdGlvbiB3aXRoIC1jcyBp
cyB1c2VkLCB0aGVuCgkgICAgIyBjYWNoZSBmaWxlcyBtYXkgYmUgc2hhcmVkIGluIHRoZSBj
YWNoZSBpdHNlbGYgKGxpbmtlZAoJICAgICMgdW5kZXIgbW9yZSB0aGFuIG9uZSBuYW1lIGlu
IHRoZSBjYWNoZSkuIFRoaXMgaXMgbm90IGJhZCwKCSAgICAjIHBlciBzZSwgYnV0IHNpbXBs
eSB3b3VsZCBtZWFuIHRoYXQgYSBjYWNoZSBjbGVhbmluZyBhbGdvcml0aG0KCSAgICAjIHRo
YXQgbG9va2VkIGZvciBhIGxpbmsgY291bnQgb2YgMSB3b3VsZCBuZXZlciBmaW5kIHRob3Nl
CgkgICAgIyBwYXJ0aWN1bGFyIGZpbGVzOyB0aGV5IHdvdWxkIGFsd2F5cyBhcHBlYXIgdG8g
YmUgaW4gdXNlLgoJICAgICMKCSAgICAjIFdBUk5JTkcgLSB0aGlzIGRvZXMgbm90IHdvcmsg
Y29ycmVjdGx5IHdpdGggbXVsdGktdGFyZ2V0dGVkCgkgICAgIyBjb21tYW5kcy4gIEZvciBh
IG11bHRpLXRhcmdldHRlZCBjb21tYW5kLCB0aGUgaW5wdXQgaXMKCSAgICAjIGlkZW50aWNh
bCBmb3IgYWxsIG9mIHRoZSBvdXRwdXRzLiAgVGhpcyBjYXVzZXMgYWxsIG9mIHRoZQoJICAg
ICMgb3V0cHV0cyB0byBzaGFyZSBhbiBlbnRyeSBpbiB0aGUgY2FjaGUsIHdoaWNoIGlzIG5v
dCBjb3JyZWN0LgoJICAgICMgVG8gYWRkcmVzcyB0aGlzLCBzZWUgcGFydGlhbG1peCwgYmVs
b3cuCgkgICAgJHBhcmFtOjpzYWx0ID0gJ00nIC4gJHBhcmFtOjpzYWx0OwoJICAgICRwYXJh
bTo6bWl4dGFyZ2V0cyA9IDE7CgkgIH0gZWxzaWYgKCRfID1+IC9ecGFydGlhbG1peDooLiop
LykgewoJICAgICMgV2hlbiBwYXJ0aWFsbWl4IGlzIGVuYWJsZWQsIHRoZSB1c2VyIHN1cHBs
aWVzIGEgcmVndWxhcgoJICAgICMgZXhwcmVzc2lvbiB0byBiZSB1c2VkIHRvIHN0cmlwIG9m
ZiBzb21lIHBvcnRpb24gb2YKCSAgICAjIHRoZSB0YXJnZXQgcGF0aG5hbWUuICBGb3IgZXhh
bXBsZSwgaWYgeW91IGhhdmUgdHdvCgkgICAgIyB0YXJnZXQgcGxhdGZvcm1zIHRoYXQgZWFj
aCBoYXZlIGFuIGV4cG9ydC8gYW5kIG9iai8KCSAgICAjIGRpcmVjdG9yeToKCSAgICAjICBl
eHBvcnQvcGxhdGZvcm1fMS8KCSAgICAjICBleHBvcnQvcGxhdGZvcm1fMi8KCSAgICAjICBv
YmovcGxhdGZvcm1fMS8KCSAgICAjICBvYmovcGxhdGZvcm1fMi8KCSAgICAjIC4uLnlvdSBj
b3VsZCBzdXBwbHkgYSByZWdleCB0aGF0IHN0cmlwcyBvZmYgdGhlIGxlYWRpbmcKCSAgICAj
IHR3byBkaXJlY3RvcmllcyBvZiB0aGUgcGF0aCwgc28gdGhhdCBmaWxlcyB3aGljaCBhcmUg
Y29tbW9uCgkgICAgIyBiZXR3ZWVuIHRoZSB0d28gYXJlIHNoYXJlZCB0aHJvdWdoIGNhY2hl
LgoJICAgICRwYXJhbTo6cGFydGlhbG1peCA9ICQxOwoJfSBlbHNlIHsKCSAgICBkaWUgcXEo
JDA6IFVzZUNhY2hlIHVucmVjb2duaXplZCBvcHRpb24gIiRfIlxuKTsKCX0KICAgIH0KICAg
IGlmICgkcGFyYW06OmNhY2hlZGlzYWJsZSkgewoJd2FybigiTm90ZTogY2FjaGluZyBkaXNh
YmxlZCBieSAtY2QgZmxhZ1xuIik7CglyZXR1cm4gMTsKICAgIH0KICAgIG15KCRkZXB0aCkg
PSAxNTsKICAgIHdoaWxlICgkZGVwdGgtLSAmJiAhIC1kICRkaXIpIHsKCSRkaXIgPSBGaWxl
OjpTcGVjLT5jYXRkaXIoJGRpcjo6VVBESVIsICRkaXIpOwogICAgfQogICAgaWYgKC1kICRk
aXIpIHsKCSRwYXJhbTo6Y2FjaGUgPSAkZGlyOwoJcmV0dXJuIDE7CiAgICB9CiAgICByZXR1
cm4gdW5kZWY7Cn0KCiMgU2FsdCB0aGUgc2lnbmF0dXJlIGdlbmVyYXRvci4gVGhlIHNhbHQg
KGEgbnVtYmVyIG9mIHN0cmluZykgaXMgYWRkZWQKIyBpbnRvIHRoZSBzaWduYXR1cmUgb2Yg
ZWFjaCBkZXJpdmVkIGZpbGUuIENoYW5naW5nIHRoZSBzYWx0IHdpbGwKIyBmb3JjZSByZWNv
bXBpbGF0aW9uIG9mIGFsbCBkZXJpdmVkIGZpbGVzLgpzdWIgU2FsdCgkKSB7CiAgICAjIFdl
IGFwcGVuZCB0aGUgdmFsdWUsIHNvIHRoYXQgVXNlQ2FjaGUgYW5kIFNhbHQgbWF5IGJlIHVz
ZWQKICAgICMgaW4gZWl0aGVyIG9yZGVyIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHNpZ25hdHVy
ZSBjYWxjdWxhdGlvbi4KICAgICRwYXJhbTo6c2FsdCAuPSAkX1swXTsKfQoKIyBNYXJrIGZp
bGVzIChvciBkaXJlY3RvcmllcykgdG8gbm90IGJlIHJlbW92ZWQgYmVmb3JlIGJ1aWxkaW5n
LgpzdWIgUHJlY2lvdXMgewogICAgbWFwKCRfLT57cHJlY2lvdXN9ID0gMSwgbWFwKCRkaXI6
OmN3ZC0+bG9va3VwKCRfKSwgQF8pKTsKfQoKDAojIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxh
YmxlIGZyb20gQ29uc2NyaXB0IGZpbGVzLCB2aWEgYSBjb25zCiMgb2JqZWN0LiBQcm9jcyBi
ZWdpbm5pbmcgd2l0aCBfIGFyZSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlLgpwYWNrYWdl
IGNvbnM7Cgp1c2UgdmFycyBxdyggJWVudmNhY2hlICk7CgojIFRoaXMgaXMgcGFzc2VkIHRo
ZSBuYW1lIG9mIHRoZSBiYXNlIGVudmlyb25tZW50IHRvIGluc3RhbnRpYXRlLgojIE92ZXJy
aWRlcyB0byB0aGUgYmFzZSBlbnZpcm9ubWVudCBtYXkgYWxzbyBiZSBwYXNzZWQgaW4KIyBh
cyBrZXkvdmFsdWUgcGFpcnMuCnN1YiBuZXcgewogICAgbXkoJHBhY2thZ2UpID0gc2hpZnQ7
CiAgICBteSAoJGVudikgPSB7QHBhcmFtOjpkZWZhdWx0cywgQF99OwogICAgQHskZW52LT57
X2VudmNvcHl9fSA9ICUkZW52OyAjIE5vdGU6IHdlIG5ldmVyIGNoYW5nZSBQQVRICiAgICAk
ZW52LT57X2N3ZH0gPSAkZGlyOjpjd2Q7ICMgU2F2ZSBkaXJlY3Rvcnkgb2YgZW52aXJvbm1l
bnQgZm9yCiAgICBibGVzcyAkZW52LCAkcGFja2FnZTsJIyBhbnkgZGVmZXJyZWQgbmFtZSBp
bnRlcnByZXRhdGlvbi4KfQoKIyBDbG9uZSBhbiBlbnZpcm9ubWVudC4KIyBOb3RlIHRoYXQg
dGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdGhlIGluaXRpYWwgZGlyZWN0b3J5CiMg
b2YgdGhlIG9yaWdpbmFsIGVudmlyb25tZW50LgpzdWIgY2xvbmUgewogICAgbXkoJGVudikg
PSBzaGlmdDsKICAgIG15ICRjbG9uZSA9IHtAeyRlbnYtPntfZW52Y29weX19LCBAX307CiAg
ICBAeyRjbG9uZS0+e19lbnZjb3B5fX0gPSAlJGNsb25lOyAjIE5vdGU6IHdlIG5ldmVyIGNo
YW5nZSBQQVRICiAgICAkY2xvbmUtPntfY3dkfSA9ICRlbnYtPntfY3dkfTsKICAgIGJsZXNz
ICRjbG9uZSwgcmVmICRlbnY7Cn0KCiMgQ3JlYXRlIGEgZmxhdHRlbmVkIGhhc2ggcmVwcmVz
ZW50aW5nIHRoZSBlbnZpcm9ubWVudC4KIyBJdCBhbHNvIGNvbnRhaW5zIGEgY29weSBvZiB0
aGUgUEFUSCwgc28gdGhhdCB0aGUgcGF0aAojIG1heSBiZSBtb2RpZmllZCBpZiBpdCBpcyBj
b252ZXJ0ZWQgYmFjayB0byBhIGhhc2guCnN1YiBjb3B5IHsKICAgIG15KCRlbnYpID0gc2hp
ZnQ7CiAgICAoQHskZW52LT57X2VudmNvcHl9fSwgJ0VOVicgPT4geyV7JGVudi0+e0VOVn19
fSwgQF8pCn0KCiMgUmVzb2x2ZSB3aGljaCBlbnZpcm9ubWVudCB0byBhY3R1YWxseSB1c2Ug
Zm9yIGEgZ2l2ZW4KIyB0YXJnZXQuIFRoaXMgaXMganVzdCB1c2VkIGZvciBzaW1wbGUgb3Zl
cnJpZGVzLgpzdWIgX3Jlc29sdmUgewogICAgcmV0dXJuICRfWzBdIGlmICEkcGFyYW06Om92
ZXJyaWRlczsKICAgIG15KCRlbnYsICR0Z3QpID0gQF87CiAgICBteSgkcGF0aCkgPSAkdGd0
LT5wYXRoOwogICAgbXkgJHJlOwogICAgZm9yICRyZSAoQHBhcmFtOjpvdmVycmlkZXMpIHsK
CW5leHQgaWYgJHBhdGggIX4gLyRyZS87CgkjIEZvdW5kIG9uZS4gUmV0dXJuIGEgY29tYmlu
YXRpb24gb2YgdGhlIG9yaWdpbmFsIGVudmlyb25tZW50CgkjIGFuZCB0aGUgb3ZlcnJpZGUu
CglteSgkb3ZyKSA9ICRwYXJhbTo6b3ZlcnJpZGVzeyRyZX07CglyZXR1cm4gJGVudmNhY2hl
eyRlbnYsJHJlfSBpZiAkZW52Y2FjaGV7JGVudiwkcmV9OwoJbXkoJG5ld2VudikgPSB7QHsk
ZW52LT57X2VudmNvcHl9fSwgQCRvdnJ9OwoJQHskbmV3ZW52LT57X2VudmNvcHl9fSA9ICUk
ZW52OwoJJG5ld2Vudi0+e19jd2R9ID0gJGVudi0+e19jd2R9OwoJcmV0dXJuICRlbnZjYWNo
ZXskZW52LCRyZX0gPSBibGVzcyAkbmV3ZW52LCByZWYgJGVudjsKICAgIH0KICAgIHJldHVy
biAkZW52Owp9CgojIFN1YnN0aXR1dGUgY29uc3RydWN0aW9uIGVudmlyb25tZW50IHZhcmlh
YmxlcyBpbnRvIGEgc3RyaW5nLgojIEludGVybmFsIGZ1bmN0aW9uL21ldGhvZC4Kc3ViIF9z
dWJzdCB7CiAgICBteSgkZW52LCAkc3RyKSA9IEBfOwogICAgaWYgKCEgZGVmaW5lZCAkc3Ry
KSB7CglyZXR1cm4gdW5kZWY7CiAgICB9IGVsc2lmIChyZWYoJHN0cikgZXEgIkFSUkFZIikg
ewoJcmV0dXJuIFsgbWFwKCRlbnYtPl9zdWJzdCgkXyksIEAkc3RyKSBdOwogICAgfSBlbHNl
IHsKCSMgJSBleHBhbnNpb24uICAlJSBnZXRzIGNvbnZlcnRlZCB0byAlIGxhdGVyLCBzbyBl
eHBhbmQgYW55CgkjICVrZXl3b3JkIGNvbnN0cnVjdGlvbiB0aGF0IGRvZXNuJ3QgaGF2ZSBh
ICUgaW4gZnJvbnQgb2YgaXQsCgkjIG1vZHVsbyBtdWx0aXBsZSAlJSBwYWlycyBpbiBiZXR3
ZWVuLgoJIyBJbiBQZXJsIDUuMDA1IGFuZCBsYXRlciwgd2UgY291bGQgYWN0dWFsbHkgZG8g
dGhpcyBpbiBvbmUgcmVnZXgKCSMgdXNpbmcgYSBjb25kaXRpb25hbCBleHByZXNzaW9uIGFz
IGZvbGxvd3MsCgkjCXdoaWxlICgkc3RyID1+IHMvKCRwcmUpXCUoXHspPyhbX2EtekEtWl1c
dyopKD8oMilcfSkvIiQxIi4kZW52LT57JDN9L2dlKSB7fQoJIyBUaGUgZm9sbG93aW5nIHR3
by1zdGVwIGFwcHJvYWNoIGlzIGJhY2t3YXJkcy1jb21wYXRpYmxlCgkjIHRvIChhdCBsZWFz
dCkgUGVybDUuMDAzLgoJbXkgJHByZSA9ICdefFteXCVdKD86XCVcJSkqJzsKCXdoaWxlICgo
JHN0ciA9fiBzLygkcHJlKVwlKFtfYS16QS1aXVx3KikvJDEuKCRlbnYtPnskMn18fCcnKS9n
ZSkgfHwKCSAgICAgICAoJHN0ciA9fiBzLygkcHJlKVwlXHsoW19hLXpBLVpdXHcqKVx9LyQx
LigkZW52LT57JDJ9fHwnJykvZ2UpKSB7fQoJcmV0dXJuICRzdHI7CiAgICB9Cn0KCnN1YiBJ
bnN0YWxsIHsKICAgIG15KCRlbnYpID0gc2hpZnQ7CiAgICBteSgkdGd0ZGlyKSA9ICRkaXI6
OmN3ZC0+bG9va3VwZGlyKCRlbnYtPl9zdWJzdChzaGlmdCkpOwogICAgbXkgJGZpbGU7CiAg
ICBmb3IgJGZpbGUgKG1hcCgkZGlyOjpjd2QtPmxvb2t1cGZpbGUoJGVudi0+X3N1YnN0KCRf
KSksIEBfKSkgewoJbXkoJHRndCkgPSAkdGd0ZGlyLT5sb29rdXBmaWxlKCRmaWxlLT57ZW50
cnl9KTsKCSR0Z3QtPmJpbmQoZmluZCBidWlsZDo6aW5zdGFsbCwgJGZpbGUpOwogICAgfQp9
CgpzdWIgSW5zdGFsbEFzIHsKICAgIG15ICRlbnYgPSBzaGlmdDsKICAgIG15ICR0Z3QgPSBz
aGlmdDsKICAgIG15ICRzcmMgPSBzaGlmdDsKICAgIG15IEBzb3VyY2VzID0gKCk7CiAgICBt
eSBAdGFyZ2V0cyA9ICgpOwoKICAgIGlmIChyZWYgJHRndCkgewoJZGllICJJbnN0YWxsQXM6
IFNvdXJjZSBpcyBhIGZpbGUgYW5kIHRhcmdldCBpcyBhIGxpc3QhXG4iCgkgICAgaWYgKCFy
ZWYoJHNyYykpOwoJQHNvdXJjZXMgPSBAJHNyYzsKCUB0YXJnZXRzID0gQCR0Z3Q7CiAgICB9
IGVsc2lmIChyZWYgJHNyYykgewoJZGllICJJbnN0YWxsQXM6IFRhcmdldCBpcyBhIGZpbGUg
YW5kIHNvdXJjZSBpcyBhIGxpc3QhXG4iOwogICAgfSBlbHNlIHsKCXB1c2ggQHNvdXJjZXMs
ICRzcmM7CglwdXNoIEB0YXJnZXRzLCAkdGd0OwogICAgfQoKICAgIGlmICgkI3NvdXJjZXMg
IT0gJCN0YXJnZXRzKSB7CglteSAkdG4gPSAkI3RhcmdldHMrMTsKCW15ICRzbiA9ICQjc291
cmNlcysxOwoJZGllICJJbnN0YWxsQXM6IFNvdXJjZSBmaWxlIGxpc3QgKCRzbikgYW5kIHRh
cmdldCBmaWxlIGxpc3QgKCR0bikgIiAuCgkgICAgImFyZSBpbmNvbnNpc3RlbnQgaW4gbGVu
Z3RoIVxuIjsKICAgIH0gZWxzZSB7Cglmb3JlYWNoICgwLi4kI3NvdXJjZXMpIHsKCSAgICBt
eSAkdGZpbGUgPSAkZGlyOjpjd2QtPmxvb2t1cGZpbGUoJGVudi0+X3N1YnN0KCR0YXJnZXRz
WyRfXSkpOwoJICAgIG15ICRzZmlsZSA9ICRkaXI6OmN3ZC0+bG9va3VwZmlsZSgkZW52LT5f
c3Vic3QoJHNvdXJjZXNbJF9dKSk7CgkgICAgJHRmaWxlLT5iaW5kKGZpbmQgYnVpbGQ6Omlu
c3RhbGwsICRzZmlsZSk7Cgl9CiAgICB9Cn0KCiMgSW5zdGFsbGF0aW9uIGluIGEgbG9jYWwg
YnVpbGQgZGlyZWN0b3J5LAojIGNvcHlpbmcgZnJvbSB0aGUgcmVwb3NpdG9yeSBpZiBpdCdz
IGFscmVhZHkgYnVpbHQgdGhlcmUuCiMgRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG86CiMJ
SW5zdGFsbCAkZW52ICRkaXIsICRmaWxlOwojCUxvY2FsICIkZGlyLyRmaWxlIjsKc3ViIElu
c3RhbGxfTG9jYWwgewogICAgbXkoJGVudikgPSBzaGlmdDsKICAgIG15KCR0Z3RkaXIpID0g
JGRpcjo6Y3dkLT5sb29rdXBkaXIoJGVudi0+X3N1YnN0KHNoaWZ0KSk7CiAgICBteSAkZmls
ZTsKICAgIGZvciAkZmlsZSAobWFwKCRkaXI6OmN3ZC0+bG9va3VwZmlsZSgkZW52LT5fc3Vi
c3QoJF8pKSwgQF8pKSB7CglteSgkdGd0KSA9ICR0Z3RkaXItPmxvb2t1cGZpbGUoJGZpbGUt
PntlbnRyeX0pOwoJJHRndC0+YmluZChmaW5kIGJ1aWxkOjppbnN0YWxsLCAkZmlsZSk7Cgkk
dGd0LT5sb2NhbCgxKTsKICAgIH0KfQoKc3ViIE9iamVjdHMgewogICAgbXkoJGVudikgPSBz
aGlmdDsKICAgIG1hcCgkZGlyOjpjd2QtPnJlbHBhdGgoJF8pLAoJX09iamVjdHMoJGVudiwg
bWFwKCRkaXI6OmN3ZC0+bG9va3VwZmlsZSgkZW52LT5fc3Vic3QoJF8pKSwgQF8pKSkKfQoK
IyBDYWxsZWQgd2l0aCBtdWx0aXBsZSBzb3VyY2UgZmlsZSByZWZlcmVuY2VzIChvciBvYmpl
Y3QgZmlsZXMpLgojIFJldHVybnMgY29ycmVzcG9uZGluZyBvYmplY3QgZmlsZXMgcmVmZXJl
bmNlcy4Kc3ViIF9PYmplY3RzIHsKICAgIG15KCRlbnYpID0gc2hpZnQ7CiAgICBteSgkc3Vm
Zml4KSA9ICRlbnYtPntTVUZPQkp9OwogICAgbWFwKF9PYmplY3QoJGVudiwgJF8sICRfLT57
ZGlyfS0+bG9va3VwZmlsZSgkXy0+YmFzZV9zdWYoJHN1ZmZpeCkpKSwgQF8pOwp9CgojIENh
bGxlZCB3aXRoIGFuIG9iamVjdCBhbmQgc291cmNlIHJlZmVyZW5jZS4gIElmIG5vIG9iamVj
dCByZWZlcmVuY2UKIyBpcyBzdXBwbGllZCwgdGhlbiB0aGUgb2JqZWN0IGZpbGUgaXMgZGV0
ZXJtaW5lZCBpbXBsaWNpdGx5IGZyb20gdGhlCiMgc291cmNlIGZpbGUncyBleHRlbnNpb24u
IFNldHMgdXAgdGhlIGFwcHJvcHJpYXRlIHJ1bGVzIGZvciBjcmVhdGluZwojIHRoZSBvYmpl
Y3QgZnJvbSB0aGUgc291cmNlLiAgUmV0dXJucyB0aGUgb2JqZWN0IHJlZmVyZW5jZS4Kc3Vi
IF9PYmplY3QgewogICAgbXkoJGVudiwgJHNyYywgJG9iaikgPSBAXzsKICAgIHJldHVybiAk
b2JqIGlmICRzcmMgZXEgJG9iajsgIyBkb24ndCBuZWVkIHRvIGJ1aWxkIHNlbGYgZnJvbSBz
ZWxmLgogICAgbXkoJG9iamVudikgPSAkZW52LT5fcmVzb2x2ZSgkb2JqKTsKICAgIG15KCRz
dWZmaXgpID0gJHNyYy0+c3VmZml4OwoKICAgIG15KCRidWlsZGVyKSA9ICRlbnYtPntTVUZN
QVB9eyRzdWZmaXh9OwoKICAgIGlmICgkYnVpbGRlcikgewoJJG9iai0+YmluZCgoZmluZCAk
YnVpbGRlcigkb2JqZW52KSksICRzcmMpOwogICAgfSBlbHNlIHsKCWRpZSgiZG9uJ3Qga25v
dyBob3cgdG8gY29uc3RydWN0ICR7XCRvYmotPnBhdGh9IGZyb20gIiAuCgkgICAgIiR7XCRz
cmMtPnBhdGh9LlxuIik7CiAgICB9CiAgICAkb2JqCn0KCnN1YiBQcm9ncmFtIHsKICAgIG15
KCRlbnYpID0gc2hpZnQ7CiAgICBteSgkdGd0KSA9ICRkaXI6OmN3ZC0+bG9va3VwZmlsZShm
aWxlOjphZGRzdWZmaXgoJGVudi0+X3N1YnN0KHNoaWZ0KSwKCQkJCQkJICRlbnYtPntTVUZF
WEV9KSk7CiAgICBteSgkcHJvZ2VudikgPSAkZW52LT5fcmVzb2x2ZSgkdGd0KTsKICAgICR0
Z3QtPmJpbmQoZmluZCBidWlsZDo6Y29tbWFuZDo6bGluaygkcHJvZ2VudiwgJHByb2dlbnYt
PntMSU5LQ09NfSksCgkgICAgICAgJGVudi0+X09iamVjdHMobWFwKCRkaXI6OmN3ZC0+bG9v
a3VwZmlsZSgkZW52LT5fc3Vic3QoJF8pKSwgQF8pKSk7Cn0KCnN1YiBNb2R1bGUgewogICAg
bXkoJGVudikgPSBzaGlmdDsKICAgIG15KCR0Z3QpID0gJGRpcjo6Y3dkLT5sb29rdXBmaWxl
KCRlbnYtPl9zdWJzdChzaGlmdCkpOwogICAgbXkoJG1vZGVudikgPSAkZW52LT5fcmVzb2x2
ZSgkdGd0KTsKICAgIG15KCRjb20pID0gcG9wKEBfKTsKICAgICR0Z3QtPmJpbmQoZmluZCBi
dWlsZDo6Y29tbWFuZDo6bGluaygkbW9kZW52LCAkY29tKSwKCSAgICAgICAkZW52LT5fT2Jq
ZWN0cyhtYXAoJGRpcjo6Y3dkLT5sb29rdXBmaWxlKCRlbnYtPl9zdWJzdCgkXykpLCBAXykp
KTsKfQoKc3ViIExpbmtlZE1vZHVsZSB7CiAgICBteSgkZW52KSA9IHNoaWZ0OwogICAgbXko
JHRndCkgPSAkZGlyOjpjd2QtPmxvb2t1cGZpbGUoJGVudi0+X3N1YnN0KHNoaWZ0KSk7CiAg
ICBteSgkcHJvZ2VudikgPSAkZW52LT5fcmVzb2x2ZSgkdGd0KTsKICAgICR0Z3QtPmJpbmQo
ZmluZCBidWlsZDo6Y29tbWFuZDo6bGlua2VkbW9kdWxlCgkgICAgICAgKCRwcm9nZW52LCAk
cHJvZ2Vudi0+e0xJTktNT0RVTEVDT019KSwKCSAgICAgICAkZW52LT5fT2JqZWN0cyhtYXAo
JGRpcjo6Y3dkLT5sb29rdXBmaWxlKCRlbnYtPl9zdWJzdCgkXykpLCBAXykpKTsKfQoKc3Vi
IExpYnJhcnkgewogICAgbXkoJGVudikgPSBzaGlmdDsKICAgIG15KCRsaWIpID0gJGRpcjo6
Y3dkLT5sb29rdXBmaWxlKGZpbGU6OmFkZHN1ZmZpeCgkZW52LT5fc3Vic3Qoc2hpZnQpLAoJ
CQkJCQkgJGVudi0+e1NVRkxJQn0pKTsKICAgIG15KCRsaWJlbnYpID0gJGVudi0+X3Jlc29s
dmUoJGxpYik7CiAgICAkbGliLT5iaW5kKGZpbmQgYnVpbGQ6OmNvbW1hbmQ6OmxpYnJhcnko
JGxpYmVudiksCgkgICAgICAgJGVudi0+X09iamVjdHMobWFwKCRkaXI6OmN3ZC0+bG9va3Vw
ZmlsZSgkZW52LT5fc3Vic3QoJF8pKSwgQF8pKSk7Cn0KCiMgU2ltcGxlIGRlcml2YXRpb246
IHlvdSBwcm92aWRlIHRhcmdldCwgc291cmNlKHMpLCBjb21tYW5kLgojIFNwZWNpYWwgdmFy
aWFibGVzIHN1YnN0aXR1dGUgaW50byB0aGUgcnVsZS4KIyBUYXJnZXQgbWF5IGJlIGEgcmVm
ZXJlbmNlLCBpbiB3aGljaCBjYXNlIGl0IGlzIHRha2VuCiMgdG8gYmUgYSBtdWx0aXBsZSB0
YXJnZXQgKGFsbCB0YXJnZXRzIGJ1aWx0IGF0IG9uY2UpLgpzdWIgQ29tbWFuZCB7CiAgICBt
eSgkZW52KSA9IHNoaWZ0OwogICAgbXkoJHRndCkgPSAkZW52LT5fc3Vic3Qoc2hpZnQpOwog
ICAgbXkoJGNvbSkgPSBwb3AoQF8pOwogICAgbXkoQHNvdXJjZXMpID0gbWFwKCRkaXI6OmN3
ZC0+bG9va3VwZmlsZSgkZW52LT5fc3Vic3QoJF8pKSwgQF8pOwogICAgaWYgKHJlZigkdGd0
KSkgewoJIyBBIG11bHRpLXRhcmdldCBjb21tYW5kLgoJbXkoQHRndHMpID0gbWFwKCRkaXI6
OmN3ZC0+bG9va3VwZmlsZSgkXyksIEAkdGd0KTsKCWRpZSgiZW1wdHkgdGFyZ2V0IGxpc3Qg
aW4gbXVsdGktdGFyZ2V0IGNvbW1hbmRcbiIpIGlmICFAdGd0czsKCSRlbnYgPSAkZW52LT5f
cmVzb2x2ZSgkdGd0c1swXSk7CglteSAkYnVpbGRlciA9IGZpbmQgYnVpbGQ6OmNvbW1hbmQ6
OnVzZXIoJGVudiwgJGNvbSwgJ3NjcmlwdCcpOwoJbXkoJG11bHRpKSA9IGJ1aWxkOjptdWx0
aXBsZS0+bmV3KCRidWlsZGVyLCBcQHRndHMpOwoJZm9yICR0Z3QgKEB0Z3RzKSB7CgkgICAg
JHRndC0+YmluZCgkbXVsdGksIEBzb3VyY2VzKTsKCX0KICAgIH0gZWxzZSB7CgkkdGd0ID0g
JGRpcjo6Y3dkLT5sb29rdXBmaWxlKCR0Z3QpOwoJJGVudiA9ICRlbnYtPl9yZXNvbHZlKCR0
Z3QpOwoJbXkgJGJ1aWxkZXIgPSBmaW5kIGJ1aWxkOjpjb21tYW5kOjp1c2VyKCRlbnYsICRj
b20sICdzY3JpcHQnKTsKCSR0Z3QtPmJpbmQoJGJ1aWxkZXIsIEBzb3VyY2VzKTsKICAgIH0K
fQoKc3ViIERlcGVuZHMgewogICAgbXkoJGVudikgPSBzaGlmdDsKICAgIG15KCR0Z3QpID0g
JGVudi0+X3N1YnN0KHNoaWZ0KTsKICAgIG15KEBkZXBzKSA9IG1hcCgkZGlyOjpjd2QtPmxv
b2t1cCgkZW52LT5fc3Vic3QoJF8pKSwgQF8pOwogICAgaWYgKCEgcmVmKCR0Z3QpKSB7Cgkk
dGd0ID0gWyAkdGd0IF07CiAgICB9CiAgICBteSgkdCk7CiAgICBmb3JlYWNoICR0IChtYXAo
JGRpcjo6Y3dkLT5sb29rdXBmaWxlKCRfKSwgQCR0Z3QpKSB7CglwdXNoKEB7JHQtPntkZXB9
fSwgQGRlcHMpOwogICAgfQp9CgojIFNldHVwIGEgcXVpY2sgc2Nhbm5lciBmb3IgdGhlIHNw
ZWNpZmllZCBpbnB1dCBmaWxlLCBmb3IgdGhlCiMgYXNzb2NpYXRlZCBlbnZpcm9ubWVudC4g
QW55IHVzZSBvZiB0aGUgaW5wdXQgZmlsZSB3aWxsIGNhdXNlIHRoZQojIHNjYW5uZXIgdG8g
YmUgaW52b2tlZCwgb25jZSBvbmx5LiBUaGUgc2Nhbm5lciBzZWVzIGp1c3Qgb25lIGxpbmUg
YXQKIyBhIHRpbWUgb2YgdGhlIGZpbGUsIGFuZCBpcyBleHBlY3RlZCB0byByZXR1cm4gYSBs
aXN0IG9mCiMgZGVwZW5kZW5jaWVzLgpzdWIgUXVpY2tTY2FuIHsKICAgIG15KCRlbnYsICRj
b2RlLCAkZmlsZSwgJHBhdGgpID0gQF87CiAgICAkZGlyOjpjd2QtPmxvb2t1cCgkZW52LT5f
c3Vic3QoJGZpbGUpKS0+eydzcmNzY2FuJywkZW52fSA9CglmaW5kIHNjYW46OnF1aWNrc2Nh
bigkY29kZSwgJGVudiwgJGVudi0+X3N1YnN0KCRwYXRoKSk7Cn0KDAojIEdlbmVyaWMgYnVp
bGRlciBtb2R1bGUuIEp1c3QgYSBmZXcgZGVmYXVsdCBtZXRob2RzLiAgRXZlcnkgZGVyaXZh
YmxlCiMgZmlsZSBtdXN0IGhhdmUgYSBidWlsZGVyIG9iamVjdCBvZiBzb21lIHNvcnQgYXR0
YWNoZWQuICBVc3VhbGx5CiMgYnVpbGRlciBvYmplY3RzIGFyZSBzaGFyZWQuCnBhY2thZ2Ug
YnVpbGQ7CgojIE51bGwgc2lnbmF0dXJlIGZvciBkeW5hbWljIGluY2x1ZGVzLgpzdWIgaW5j
bHVkZXMgeyAoKSB9CgojIE51bGwgc2lnbmF0dXJlIGZvciBidWlsZCBzY3JpcHQuCnN1YiBz
Y3JpcHQgeyAoKSB9CgojIE5vdCBjb21wYXRpYmxlIHdpdGggYW55IG90aGVyIGJ1aWxkZXIs
IGJ5IGRlZmF1bHQuCnN1YiBjb21wYXRpYmxlIHsgMCB9CgoMCiMgQnVpbGRlciBtb2R1bGUg
Zm9yIHRoZSBJbnN0YWxsIGNvbW1hbmQuCnBhY2thZ2UgYnVpbGQ6Omluc3RhbGw7Cgp1c2Ug
dmFycyBxdyggQElTQSAkaW5zdGFsbGVyICk7CgpCRUdJTiB7CiAgICBASVNBID0gcXcoYnVp
bGQpOwogICAgYmxlc3MgJGluc3RhbGxlciA9IHt9ICAgICMgaGFuZGxlIGZvciB0aGlzIGNs
YXNzLgp9CgpzdWIgZmluZCB7CiAgICAkaW5zdGFsbGVyCn0KCiMgQ2FjaGluZyBub3Qgc3Vw
cG9ydGVkIGZvciBJbnN0YWxsOiBnZW5lcmFsbHkgaW5zdGFsbCBpcyB0cml2aWFsIGFueXdh
eSwKIyBhbmQgd2UgZG9uJ3Qgd2FudCB0byBjbHV0dGVyIHRoZSBjYWNoZS4Kc3ViIGNhY2hp
biB7IHVuZGVmIH0Kc3ViIGNhY2hvdXQgeyB9CgojIERvIHRoZSBpbnN0YWxsYXRpb24uCnN1
YiBhY3Rpb24gewogICAgbXkoJHNlbGYsICR0Z3QpID0gQF87CiAgICBteSgkc3JjKSA9ICR0
Z3QtPntzb3VyY2VzfVswXTsKICAgIG1haW46OnNob3djb20oIkluc3RhbGwgJHtcJHNyYy0+
cnBhdGh9IGFzICR7XCR0Z3QtPnBhdGh9IikKCWlmICgkcGFyYW06Omluc3RhbGwgJiYgISRw
YXJhbTo6cXVpZXQpOwogICAgcmV0dXJuIHVubGVzcyAkcGFyYW06OmJ1aWxkOwogICAgZnV0
aWw6Omluc3RhbGwoJHNyYy0+cnBhdGgsICR0Z3QpOwogICAgcmV0dXJuIDE7Cn0KCgwKIyBC
dWlsZGVyIG1vZHVsZSBmb3IgZ2VuZXJpYyBVTklYIGNvbW1hbmRzLgpwYWNrYWdlIGJ1aWxk
Ojpjb21tYW5kOwoKdXNlIHZhcnMgcXcoIEBJU0EgJWNvbSApOwoKQkVHSU4geyBASVNBID0g
cXcoYnVpbGQpIH0KCnN1YiBmaW5kIHsKICAgIG15ICgkY2xhc3MsICRlbnYsICRjb20sICRw
YWNrYWdlKSA9IEBfOwogICAgJGNvbSA9ICRlbnYtPl9zdWJzdCgkY29tKTsKICAgICRwYWNr
YWdlIHx8PSAnJzsKICAgICRjb217JGVudiwkY29tLCRwYWNrYWdlfSB8fCBkbyB7CgkjIFJl
bW92ZSB1bndhbnRlZCBiaXRzIGZyb20gc2lnbmF0dXJlIC0tIHRob3NlIGJyYWNrZXRlZCBi
eSAlKCAuLi4gJSkKCW15ICRjb21zaWcgPSAkY29tOwoJJGNvbXNpZyA9fiBzL15cQFxzKi8v
bWc7Cgl3aGlsZSAoJGNvbXNpZyA9fiBzLyVcKChbXiVdfCVbXlwoXSkqPyVcKS8vZykgeyB9
CglteSAkc2VsZiA9IHsgZW52ID0+ICRlbnYsIGNvbSA9PiAkY29tLCAncGFja2FnZScgPT4g
JHBhY2thZ2UsCgkJICAgICBjb21zaWcgPT4gJGNvbXNpZyB9OwoJJGNvbXskZW52LCRjb20s
JHBhY2thZ2V9ID0gYmxlc3MgJHNlbGYsICRjbGFzczsKICAgIH0KfQoKIyBEZWZhdWx0IGNh
Y2hlIGluIGZ1bmN0aW9uLgpzdWIgY2FjaGluIHsKICAgIG15KCRzZWxmLCAkdGd0LCAkc2ln
KSA9IEBfOwogICAgaWYgKGNhY2hlOjppbigkdGd0LCAkc2lnKSkgewoJaWYgKCRwYXJhbTo6
Y2FjaGVjb20pIHsKCSAgICBtYXAgeyBpZiAoISBzL15cQFxzKi8vKSB7IG1haW46OnNob3dj
b20oJF8pIH0gfSAkc2VsZi0+Z2V0Y29tcygkdGd0KTsKCX0gZWxzZSB7CgkgICAgcHJpbnRm
KCJSZXRyaWV2ZWQgJXMgZnJvbSBjYWNoZVxuIiwgJHRndC0+cGF0aCkKCQl1bmxlc3MgKCRw
YXJhbTo6cXVpZXQpOwoJfQoJcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gdW5kZWY7Cn0K
CiMgRGVmYXVsdCBjYWNoZSBvdXQgZnVuY3Rpb24uCnN1YiBjYWNob3V0IHsKICAgIG15KCRz
ZWxmLCAkdGd0LCAkc2lnKSA9IEBfOwogICAgY2FjaGU6Om91dCgkdGd0LCAkc2lnKTsKfQoK
IyBpbnRlcm5hbCByb3V0aW5lIHRvIHByb2Nlc3MgdmFyaWFibGUgb3B0aW9ucy4KIyBmOiBy
ZXR1cm4gZmlsZSBwYXJ0CiMgRjogcmV0dXJuIGZpbGUgcGFydCwgYnV0IHN0cmlwIGFueSBz
dWZmaXgKIyBkOiByZXR1cm4gZGlyZWN0b3J5IHBhcnQKIyBiOiByZXR1cm4gZnVsbCBwYXRo
LCBidXQgc3RyaXAgYW55IHN1ZmZpeCAoYS5rLmEuIHJldHVybiBiYXNlbmFtZSkKIyBzOiBy
ZXR1cm4gb25seSB0aGUgc3VmZml4IChvciBhbiBlbXB0eSBzdHJpbmcsIGlmIG5vIHN1ZmZp
eCBpcyB0aGVyZSkKIyBhOiByZXR1cm4gdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGUK
IyBubyBvcHRpb246IHJldHVybiBmdWxsIHBhdGggdG8gZmlsZQpzdWIgX3ZhcmlhbnQgewog
ICAgbXkoJG9wdCwgJGZpbGUpID0gQF87CiAgICAkb3B0ID0gJycgaWYgISBkZWZpbmVkICRv
cHQ7CiAgICBpZiAoJG9wdCBlcSAnZicpIHsgcmV0dXJuICRmaWxlLT57ZW50cnl9OyB9CiAg
ICBlbHNpZiAoJG9wdCBlcSAnZCcpIHsgcmV0dXJuICRmaWxlLT57ZGlyfS0+cGF0aDsgfQog
ICAgZWxzaWYgKCRvcHQgZXEgJ0YnKSB7CglteSAkc3Vic3QgPSAkZmlsZS0+e2VudHJ5fTsK
CSRzdWJzdCA9fiBzL1wuW15cLl0rJC8vOwoJcmV0dXJuICRzdWJzdDsKICAgIH0KICAgIGVs
c2lmICgkb3B0IGVxICdiJykgewoJbXkgJHN1YnN0ID0gJGZpbGUtPnBhdGg7Cgkkc3Vic3Qg
PX4gcy9cLlteXC5dKyQvLzsKCXJldHVybiAkc3Vic3Q7CiAgICB9CiAgICBlbHNpZiAoJG9w
dCBlcSAncycpIHsKCW15ICRzdWJzdCA9ICRmaWxlLT57ZW50cnl9OwoJJHN1YnN0ID1+IG0v
KFwuW15cLl0rKSQvOwoJcmV0dXJuICQxOwogICAgfQogICAgZWxzaWYgKCRvcHQgZXEgJ2En
KSB7CglteSAkcGF0aCA9ICRmaWxlLT5wYXRoOwoJaWYgKCEgRmlsZTo6U3BlYy0+ZmlsZV9u
YW1lX2lzX2Fic29sdXRlKCRwYXRoKSkgewoJICAgICRwYXRoID0gRmlsZTo6U3BlYy0+Y2F0
ZmlsZShDd2Q6OmN3ZCgpLCAkcGF0aCk7Cgl9CglyZXR1cm4gJHBhdGg7CiAgICB9CiAgICBl
bHNlIHsgcmV0dXJuICRmaWxlLT5wYXRoOyB9Cn0KCiMgRm9yIHRoZSBzaWduYXR1cmUgb2Yg
YSBiYXNpYyBjb21tYW5kLCB3ZSBkb24ndCBib3RoZXIKIyBpbmNsdWRpbmcgdGhlIGNvbW1h
bmQgaXRzZWxmLiBUaGlzIGlzIG5vdCBzdHJpY3RseSBjb3JyZWN0LAojIGFuZCBpZiB3ZSB3
YW50ZWQgdG8gYmUgcmlnb3JvdXMsIHdlIG1pZ2h0IHdhbnQgdG8gaW5zaXN0CiMgdGhhdCB0
aGUgY29tbWFuZCB3YXMgY2hlY2tlZCBmb3IgYWxsIHRoZSBiYXNpYyBjb21tYW5kcwojIGxp
a2UgZ2NjLCBldGMuIEZvciB0aGlzIHJlYXNvbiB3ZSBkb24ndCBoYXZlIGFuIGluY2x1ZGVz
CiMgbWV0aG9kLgoKIyBDYWxsIHRoaXMgdG8gZ2V0IHRoZSBjb21tYW5kIGxpbmUgc2NyaXB0
OiBhbiBhcnJheSBvZgojIGZ1bGx5IHN1YnN0aXR1dGVkIGNvbW1hbmRzLgpzdWIgZ2V0Y29t
cyB7CiAgICBteSgkc2VsZiwgJHRndCkgPSBAXzsKICAgIG15KEBjb21zKTsKICAgIG15ICRj
b207CiAgICBmb3IgJGNvbSAoc3BsaXQoL1xuLywgJHNlbGYtPntjb219KSkgewoJbXkoQHNy
YykgPSAodW5kZWYsIEB7JHRndC0+e3NvdXJjZXN9fSk7CglteShAc3JjMSkgPSBAc3JjOwoK
CW5leHQgaWYgJGNvbSA9fiAvXlxzKiQvOwoKCSMgTk9URTogd2UgdXNlZCB0byBoYXZlIGEg
bW9yZSBlbGVnYW50IHMvLy4uLi9lIHNvbHV0aW9uCgkjIGZvciB0aGUgaXRlbXMgYmVsb3cs
IGJ1dCB0aGlzIGNhdXNlZCBhIGJ1cyBlcnJvci4uLgoKCSMgUmVtb3ZlICUoIGFuZCAlKSAt
LSB0aG9zZSBhcmUgb25seSB1c2VkIHRvIGJyYWNrZXQgcGFydHMKCSMgb2YgdGhlIGNvbW1h
bmQgdGhhdCB3ZSBkb24ndCBkZXBlbmQgb24uCgkkY29tID1+IHMvJVsoKV0vL2c7CgoJIyBE
ZWFsIHdpdGggJW4sIG49MSw5IGFuZCB2YXJpYW50cy4KCXdoaWxlICgkY29tID1+IC8lKFsx
LTldKSg6KFtmZGJzRmFdPykpPy8pIHsKCSAgICBteSgkbWF0Y2gpID0gJCY7CgkgICAgbXko
JHNyYykgPSAkc3JjMVskMV07CgkgICAgbXkoJHN1YnN0KSA9IF92YXJpYW50KCQzLCAkc3Jj
MVskMV0tPnJmaWxlKTsKCSAgICB1bmRlZiAkc3JjWyQxXTsKCSAgICAkY29tID1+IHMvJG1h
dGNoLyRzdWJzdC87Cgl9CgoJIyBEZWFsIHdpdGggJTAgYWthICU+IGFuZCB2YXJpYW50cy4K
CXdoaWxlICgkY29tID1+IC8lWzA+XSg6KFtmZGJzRmFdPykpPy8pIHsKCSAgICBteSgkbWF0
Y2gpID0gJCY7CgkgICAgbXkoJHN1YnN0KSA9IF92YXJpYW50KCQyLCAkdGd0KTsKCSAgICAk
Y29tID1+IHMvJG1hdGNoLyRzdWJzdC87Cgl9CgoJIyBEZWFsIHdpdGggJTwgKGFsbCBzb3Vy
Y2VzIGV4Y2VwdCAlbidzIGFscmVhZHkgdXNlZCkKCXdoaWxlICgkY29tID1+IC8lPCg6KFtm
ZGJzRmFdPykpPy8pIHsKCSAgICBteSgkbWF0Y2gpID0gJCY7CgkgICAgbXkgQGxpc3QgPSAo
KTsKCSAgICBmb3JlYWNoIChAc3JjKSB7CgkJcHVzaChAbGlzdCwgX3ZhcmlhbnQoJDIsICRf
LT5yZmlsZSkpIGlmICRfOwoJICAgIH0KCSAgICBteSgkc3Vic3QpID0gam9pbignICcsIEBs
aXN0KTsKCSAgICAkY29tID1+IHMvJG1hdGNoLyRzdWJzdC87Cgl9CgoJIyBEZWFsIHdpdGgg
JVsgJV0uCgkkY29tID1+IHN7JVxbKC4qPyklXF19ewoJICAgIG15KCRmdW5jLCBAYXJncykg
PSBncmVwIHsgJF8gbmUgJycgfSBzcGxpdCgvXHMrLywgJDEpOwoJICAgIGRpZSgiJDA6IFwi
JGZ1bmNcIiBpcyBub3QgZGVmaW5lZC5cbiIpCgkJdW5sZXNzICgkc2VsZi0+e2Vudn0tPnsk
ZnVuY30pOwoJICAgICZ7JHNlbGYtPntlbnZ9LT57JGZ1bmN9fShAYXJncyk7Cgl9Z2V4OwoK
CSMgQ29udmVydCBsZWZ0LW92ZXIgJSUgaW50byAlLgoJJGNvbSA9fiBzLyUlLyUvZzsKCgkj
IFdoaXRlIHNwYWNlIGNsZWFudXAuIFhYWCBOTyBXQVkgRk9SIFVTRVIgVE8gSEFWRSBRVU9U
RUQgU1BBQ0VTCgkkY29tID0gam9pbignICcsIHNwbGl0KCcgJywgJGNvbSkpOwoJbmV4dCBp
ZiAkY29tID1+IC9eOi8gJiYgJGNvbSAhfiAvXjpcUy87CglwdXNoKEBjb21zLCAkY29tKTsK
ICAgIH0KICAgIEBjb21zCn0KCiMgQnVpbGQgdGhlIHRhcmdldCB1c2luZyB0aGUgcHJldmlv
dXNseSBzcGVjaWZpZWQgY29tbWFuZHMuCnN1YiBhY3Rpb24gewogICAgbXkoJHNlbGYsICR0
Z3QpID0gQF87CiAgICBteSgkZW52KSA9ICRzZWxmLT57ZW52fTsKCiAgICBpZiAoJHBhcmFt
OjpidWlsZCkgewoJZnV0aWw6Om1rZGlyKCR0Z3QtPntkaXJ9KTsKCXVubGluaygkdGd0LT5w
YXRoKSBpZiAhICR0Z3QtPnByZWNpb3VzOwogICAgfQoKICAgICMgU2V0IGVudmlyb25tZW50
LgogICAgbWFwKGRlbGV0ZSAkRU5WeyRffSwga2V5cyAlRU5WKTsKICAgICVFTlYgPSAleyRl
bnYtPntFTlZ9fTsKCiAgICAjIEhhbmRsZSBtdWx0aS1saW5lIGNvbW1hbmRzLgogICAgbXko
QGNvbXMpID0gJHNlbGYtPmdldGNvbXMoJHRndCk7CiAgICB3aGlsZSAoQGNvbXMpIHsKCW15
ICRjb20gPSBzaGlmdCBAY29tczsKCW15KCRzaG93Y29tKSA9IDEgdW5sZXNzICRjb20gPX4g
cy9eXEBccyovLzsKCWlmICghJHBhcmFtOjpidWlsZCkgewoJICAgIG1haW46OnNob3djb20o
JGNvbSk7Cgl9IGVsc2UgewoJICAgIGlmICgkY29tID1+IC9eXFtwZXJsXF1ccyovKSB7CgkJ
bWFpbjo6c2hvd2NvbSgkY29tKSBpZiAkc2hvd2NvbTsKCQlteSAkcGVybGNtZCA9ICQnOwoJ
CW15ICRzdGF0dXM7CgkJewoJCSAgICAjIFJlc3RvcmUgdGhlIHNjcmlwdCBwYWNrYWdlIHZh
cmlhYmxlcyB0aGF0IHdlcmUgZGVmaW5lZAoJCSAgICAjIGluIHRoZSBDb25zY3JpcHQgZmls
ZSB0aGF0IGRlZmluZWQgdGhpcyBbcGVybF0gYnVpbGQsCgkJICAgICMgc28gdGhlIGNvZGUg
ZXhlY3V0ZXMgd2l0aCB0aGUgZXhwZWN0ZWQgdmFyaWFibGVzLgoJCSAgICBteSgkcGFja2Fn
ZSkgPSAkc2VsZi0+eydwYWNrYWdlJ307CgkJICAgIG15KCRwa2d2YXJzKSA9ICR0Z3QtPntj
b25zY3JpcHR9LT57cGtndmFyc307CgkJICAgIE5hbWVTcGFjZTo6cmVzdG9yZSgkcGFja2Fn
ZSwgJHBrZ3ZhcnMpIGlmICRwa2d2YXJzOwoJCSAgICAjIEFjdHVhbGx5IGV4ZWN1dGUgdGhl
IFtwZXJsXSBjb21tYW5kIHRvIGJ1aWxkIHRoZSB0YXJnZXQuCgkJICAgICRzdGF0dXMgPSBl
dmFsICJwYWNrYWdlICRwYWNrYWdlOyAkcGVybGNtZCI7CgkJICAgICMgQ2xlYW4gdXAgdGhl
IG5hbWVzcGFjZSBieSBkZWxldGluZyB0aGUgcGFja2FnZSB2YXJpYWJsZXMKCQkgICAgIyB3
ZSBqdXN0IHJlc3RvcmVkLgoJCSAgICBOYW1lU3BhY2U6OnJlbW92ZSgkcGFja2FnZSwga2V5
cyAlJHBrZ3ZhcnMpIGlmICRwa2d2YXJzOwoJCX0KCQlpZiAoIWRlZmluZWQoJHN0YXR1cykp
IHsKCQkgICAgd2FybiAiJDA6ICoqKiBFcnJvciBkdXJpbmcgcGVybCBjb21tYW5kIGV2YWw6
ICRALlxuIjsKCQkgICAgcmV0dXJuIHVuZGVmOwoJCX0gZWxzaWYgKCRzdGF0dXMgPT0gMCkg
ewoJCSAgICB3YXJuICIkMDogKioqIFBlcmwgY29tbWFuZCByZXR1cm5lZCAkc3RhdHVzICh0
aGlzIGluZGljYXRlcyBhbiBlcnJvcikuXG4iOwoJCSAgICByZXR1cm4gdW5kZWY7CgkJfQoJ
CW5leHQ7CgkgICAgfQoJICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgICAjIENhbid0
IGZvcmsgb24gV2luMzIKCSAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICAgaWYgKCRt
YWluOjpfV0lOMzIpIHsKCQltYWluOjpzaG93Y29tKCRjb20pIGlmICRzaG93Y29tOwoJCXN5
c3RlbSgkY29tKTsKCQlpZiAoJD8pIHsKCQkgICAgbXkgKCRiMCwgJGIxKSA9ICgkPyAmIDB4
RkYsICQ/ID4+IDgpOwoJCSAgICBteSAkZXJyID0gJGIxIHx8ICQ/OwoJCSAgICBteSAkcGF0
aCA9ICR0Z3QtPnBhdGg7CgkJICAgIG15ICR3YXJuID0gcXEoJDA6ICoqKiBbJHBhdGhdIEVy
cm9yICRlcnIpOwoJCSAgICAkd2FybiAuPSAiIChleGVjdXRhYmxlIG5vdCBmb3VuZCBpbiBw
YXRoPykiIGlmICRiMSA9PSAweEZGOwoJCSAgICB3YXJuICIkd2FyblxuIjsKCQkgICAgcmV0
dXJuIHVuZGVmOwoJCX0KCSAgICB9IGVsc2UgewoJCWZpbGU6OndhaXRfZm9yX21heF9qb2Jz
KCk7CgkJbWFpbjo6c2hvd2NvbSgkY29tKSBpZiAkc2hvd2NvbTsKCQlteSgkZmluYWwpID0g
QGNvbXMgPT0gMDsKCQkkdGd0LT5jcmVhdGVfam9iKCRjb20sICRmaW5hbCk7CgkJaWYgKCEk
ZmluYWwpIHsKCQkgICAgIyBNb3JlIHN0ZXBzIG5lZWRlZCBmb3IgdGhpcyB0YXJnZXQuCgkJ
ICAgICMgV2FpdCBmb3IgdGhpcyBzdGVwLCB0aGVuIHN0YXJ0IG92ZXIuCgkJICAgIHJldHVy
biB1bmRlZiBpZiAkdGd0LT5wd2FpdCgpIGVxICdlcnJvcnMnOwoJCSAgICBkZWxldGUgJHRn
dC0+e3N0YXR1c307CgkJfQoJICAgIH0KCX0KICAgIH0KCiAgICAjIHN1Y2Nlc3MgKG9yIGFz
eW5jaHJvbm91c2x5IHNjaGVkdWxlZCkKICAgIHJldHVybiAxOwp9CgojIFJldHVybiBzY3Jp
cHQgc2lnbmF0dXJlLgpzdWIgc2NyaXB0IHsKICAgICRfWzBdLT57Y29tc2lnfQp9CgoMCiMg
Q3JlYXRlIGEgbGlua2VkIG1vZHVsZS4KcGFja2FnZSBidWlsZDo6Y29tbWFuZDo6bGluazsK
CnVzZSB2YXJzIHF3KCBASVNBICk7CgpCRUdJTiB7IEBJU0EgPSBxdyhidWlsZDo6Y29tbWFu
ZCkgfQoKIyBGaW5kIGFuIGFwcHJvcHJpYXRlIGxpbmtlci4Kc3ViIGZpbmQgewogICAgbXko
JGNsYXNzLCAkZW52LCAkY29tbWFuZCkgPSBAXzsKICAgIGlmICghZXhpc3RzICRlbnYtPntf
TERJUlN9KSB7CglteSgkbGRpcnMpID0gJyc7CglteSgkd2QpID0gJGVudi0+e19jd2R9OwoJ
bXkoJHBkaXJzKSA9ICRlbnYtPntMSUJQQVRIfTsKCWlmICghIGRlZmluZWQgJHBkaXJzKSB7
CgkgICAgJHBkaXJzID0gWyBdOwoJfSBlbHNpZiAocmVmKCRwZGlycykgbmUgJ0FSUkFZJykg
ewoJICAgICRwZGlycyA9IFsgc3BsaXQoLyRtYWluOjpQQVRIX1NFUEFSQVRPUi9vLCAkcGRp
cnMpIF07Cgl9CglteSAkZGlyOwoJZm9yICRkaXIgKG1hcCgkd2QtPmxvb2t1cGRpcigkZW52
LT5fc3Vic3QoJF8pKSwgQCRwZGlycykpIHsKCSAgICBteSgkZHBhdGgpID0gJGRpci0+cGF0
aDsKCSAgICAkbGRpcnMgLj0gIiAiLiRlbnYtPntMSUJESVJQUkVGSVh9LiRkcGF0aDsKCSAg
ICBuZXh0IGlmIEZpbGU6OlNwZWMtPmZpbGVfbmFtZV9pc19hYnNvbHV0ZSgkZHBhdGgpOwoJ
ICAgIGlmIChAcGFyYW06OnJwYXRoKSB7CgkJbXkgJGQ7CgkJaWYgKCRkcGF0aCBlcSAkZGly
OjpDVVJESVIpIHsKCQkgICAgZm9yZWFjaCAkZCAobWFwKCRfLT5wYXRoLCBAcGFyYW06OnJw
YXRoKSkgewoJCQkkbGRpcnMgLj0gIiAiLiRlbnYtPntMSUJESVJQUkVGSVh9LiRkOwoJCSAg
ICB9CgkJfSBlbHNlIHsKCQkgICAgZm9yZWFjaCAkZCAobWFwKCRfLT5wYXRoLCBAcGFyYW06
OnJwYXRoKSkgewoJCQkkbGRpcnMgLj0gIiAiLiRlbnYtPntMSUJESVJQUkVGSVh9LkZpbGU6
OlNwZWMtPmNhdGZpbGUoJGQsICRkcGF0aCk7CgkJICAgIH0KCQl9CgkgICAgfQoJfQoJJGVu
di0+e19MRElSU30gPSAiJSgkbGRpcnMlKSI7CiAgICB9CgogICAgIyBJbnRyb2R1Y2UgYSBu
ZXcgbWFnaWMgX0xJQlMgc3ltYm9sIHdoaWNoIGFsbG93cyB0byB1c2UgdGhlCiAgICAjIFVu
aXgtc3R5bGUgLWxOQU1FIHN5bnRheCBmb3IgV2luMzIgb25seS4gLWxOQU1FIHdpbGwgYmUg
cmVwbGFjZWQKICAgICMgd2l0aCAle1BSRUZMSUJ9TkFNRSV7U1VGTElCfS4gPHNjaHdhcnpl
QGlzYS5kZT4gMTk5OC0wNi0xOAoKICAgIGlmICgkbWFpbjo6X1dJTjMyICYmICFleGlzdHMg
JGVudi0+e19MSUJTfSkgewoJbXkgJGxpYnM7CglteSAkbmFtZTsKCWZvciAkbmFtZSAoc3Bs
aXQoJyAnLCAkZW52LT5fc3Vic3QoJGVudi0+e0xJQlN9IHx8ICcnKSkpIHsKCSAgICBpZiAo
JG5hbWUgPX4gL14tbCguKikvKSB7CgkJJG5hbWUgPSAiJGVudi0+e1BSRUZMSUJ9JDEkZW52
LT57U1VGTElCfSI7CgkgICAgfQoJICAgICRsaWJzIC49ICcgJyAuICRuYW1lOwoJfQoJJGVu
di0+e19MSUJTfSA9ICRsaWJzID8gIiUoJGxpYnMlKSIgOiAnJzsKICAgIH0KICAgIGJsZXNz
IGZpbmQgYnVpbGQ6OmNvbW1hbmQoJGVudiwgJGNvbW1hbmQpOwp9CgojIENhbGxlZCBmcm9t
IGZpbGU6OmJ1aWxkLiBNYWtlIHN1cmUgYW55IGxpYnJhcmllcyBuZWVkZWQgYnkgdGhlCiMg
ZW52aXJvbm1lbnQgYXJlIGJ1aWx0LCBhbmQgcmV0dXJuIHRoZSBjb2xsZWN0ZWQgc2lnbmF0
dXJlcwojIG9mIHRoZSBsaWJyYXJpZXMgaW4gdGhlIHBhdGguCnN1YiBpbmNsdWRlcyB7CiAg
ICByZXR1cm4gJF9bMF0tPntzaWd9IGlmIGV4aXN0cyAkX1swXS0+e3NpZ307CiAgICBteSgk
c2VsZiwgJHRndCkgPSBAXzsKICAgIG15KCRlbnYpID0gJHNlbGYtPntlbnZ9OwogICAgbXko
JGV3ZCkgPSAkZW52LT57X2N3ZH07CiAgICBteSAkbGRpcnMgPSAkZW52LT57TElCUEFUSH07
CiAgICBpZiAoISBkZWZpbmVkICRsZGlycykgewoJJGxkaXJzID0gWyBdOwogICAgfSBlbHNp
ZiAocmVmKCRsZGlycykgbmUgJ0FSUkFZJykgewoJJGxkaXJzID0gWyBzcGxpdCgvJG1haW46
OlBBVEhfU0VQQVJBVE9SL28sICRsZGlycykgXTsKICAgIH0KICAgIG15IEBscGF0aCA9IG1h
cCgkZXdkLT5sb29rdXBkaXIoJF8pLCBAJGxkaXJzKTsKICAgIG15KEBzaWdzKTsKICAgIG15
KEBuYW1lcyk7CgogICAgaWYgKCRtYWluOjpfV0lOMzIpIHsKCSMgUGFzcyAlTElCUyBzeW1i
b2wgdGhyb3VnaCAlLXN1YnN0aXR1aXRpb24KCSMgPHNjaHdhcnplQGlzYS5kZT4gMTk5OC0w
Ni0xOAoJQG5hbWVzID0gc3BsaXQoJyAnLCAkZW52LT5fc3Vic3QoJGVudi0+e0xJQlN9IHx8
ICcnKSk7CiAgICB9IGVsc2UgewoJQG5hbWVzID0gc3BsaXQoJyAnLCAkZW52LT57TElCU30g
fHwgJycpOwogICAgfQogICAgbXkgJG5hbWU7CiAgICBmb3IgJG5hbWUgKEBuYW1lcykgewoJ
bXkgKCRscGF0aCwgQGFsbG5hbWVzKTsKCWlmICgkbmFtZSA9fiAvXi1sKC4qKS8pIHsKCSAg
ICAjIC1sIHN0eWxlIG5hbWVzIGFyZSBsb29rZWQgdXAgb24gTElCUEFUSCwgdXNpbmcgYWxs
CgkgICAgIyBwb3NzaWJsZSBsaWIgc3VmZml4ZXMgaW4gdGhlIHNhbWUgc2VhcmNoIG9yZGVy
IHRoZQoJICAgICMgbGlua2VyIHVzZXMgKGFjY29yZGluZyB0byBTVUZMSUJTKS4KCSAgICAj
IFJlY29nbml6ZSBuZXcgUFJFRkxJQiBzeW1ib2wsIHdoaWNoIHNob3VsZCBiZSAnbGliJyBv
bgoJICAgICMgVW5peCwgYW5kIGVtcHR5IG9uIFdpbjMyLiBUT0RPOiBXaGF0IGFib3V0IHNo
YXJlZAoJICAgICMgbGlicmFyeSBzdWZmaXhlcz8gIDxzY2h3YXJ6ZUBpc2EuZGU+IDE5OTgt
MDUtMTMKCSAgIEBhbGxuYW1lcyA9IG1hcCgiJGVudi0+e1BSRUZMSUJ9JDEkXyIsCgkJCSAg
IHNwbGl0KC86LywgJGVudi0+e1NVRkxJQlN9KSk7CgkgICAgJGxwYXRoID0gXEBscGF0aDsK
CX0gZWxzZSB7CgkgICAgQGFsbG5hbWVzID0gKCRuYW1lKTsKCSAgICAjIE9uIFdpbjMyLCBh
bGwgbGlicmFyeSBuYW1lcyBhcmUgbG9va2VkIHVwIGluIExJQlBBVEgKCSAgICAjIDxzY2h3
YXJ6ZUBpc2EuZGU+IDE5OTgtMDUtMTMKCSAgICBpZiAoJG1haW46Ol9XSU4zMikgewoJCSRs
cGF0aCA9IFskZGlyOjp0b3AsIEBscGF0aF07CgkgICAgfQoJICAgIGVsc2UgewoJCSRscGF0
aCA9IFskZGlyOjp0b3BdOwoJICAgIH0KCX0KCW15ICRkaXI7CglESVI6IGZvciAkZGlyIChA
JGxwYXRoKSB7CgkgICAgbXkgJG47CgkgICAgZm9yICRuIChAYWxsbmFtZXMpIHsKCQlteSgk
bGliKSA9ICRkaXItPmxvb2t1cF9hY2Nlc3NpYmxlKCRuKTsKCQlpZiAoJGxpYikgewoJCSAg
ICBsYXN0IERJUiBpZiAkbGliLT5pZ25vcmU7CgkJICAgIGlmICgoYnVpbGQgJGxpYikgZXEg
J2Vycm9ycycpIHsKCQkJJHRndC0+e3N0YXR1c30gPSAnZXJyb3JzJzsKCQkJcmV0dXJuIHVu
ZGVmOwoJCSAgICB9CgkJICAgIHB1c2goQHNpZ3MsICdzaWcnLT5zaWduYXR1cmUoJGxpYikp
OwoJCSAgICBsYXN0IERJUjsKCQl9CgkgICAgfQoJfQogICAgfQogICAgJHNlbGYtPntzaWd9
ID0gJ3NpZyctPmNvbGxlY3QoQHNpZ3MpOwp9CgojIEFsd2F5cyBjb21wYXRpYmxlIHdpdGgg
b3RoZXIgc3VjaCBidWlsZGVycywgc28gdGhlIHVzZXIKIyBjYW4gZGVmaW5lIGEgc2luZ2xl
IHByb2dyYW0gb3IgbW9kdWxlIGZyb20gbXVsdGlwbGUgcGxhY2VzLgpzdWIgY29tcGF0aWJs
ZSB7CiAgICBteSgkc2VsZiwgJG90aGVyKSA9IEBfOwogICAgcmVmKCRvdGhlcikgZXEgImJ1
aWxkOjpjb21tYW5kOjpsaW5rIjsKfQoKIyBMaW5rIGEgcHJvZ3JhbS4KcGFja2FnZSBidWls
ZDo6Y29tbWFuZDo6bGlua2VkbW9kdWxlOwoKdXNlIHZhcnMgcXcoIEBJU0EgKTsKCkJFR0lO
IHsgQElTQSA9IHF3KGJ1aWxkOjpjb21tYW5kKSB9CgojIEFsd2F5cyBjb21wYXRpYmxlIHdp
dGggb3RoZXIgc3VjaCBidWlsZGVycywgc28gdGhlIHVzZXIKIyBjYW4gZGVmaW5lIGEgc2lu
Z2xlIGxpbmtlZCBtb2R1bGUgZnJvbSBtdWx0aXBsZSBwbGFjZXMuCnN1YiBjb21wYXRpYmxl
IHsKICAgIG15KCRzZWxmLCAkb3RoZXIpID0gQF87CiAgICByZWYoJG90aGVyKSBlcSAiYnVp
bGQ6OmNvbW1hbmQ6OmxpbmtlZG1vZHVsZSI7Cn0KDAojIEJ1aWxkZXIgZm9yIGEgQyBtb2R1
bGUKcGFja2FnZSBidWlsZDo6Y29tbWFuZDo6Y2M7Cgp1c2UgdmFycyBxdyggQElTQSApOwoK
QkVHSU4geyBASVNBID0gcXcoYnVpbGQ6OmNvbW1hbmQpIH0KCnN1YiBmaW5kIHsKICAgICRf
WzFdLT57X2NjfSB8fCBkbyB7CglteSgkY2xhc3MsICRlbnYpID0gQF87CglteSgkY3BwcGF0
aCkgPSAkZW52LT5fc3Vic3QoJGVudi0+e0NQUFBBVEh9KTsKCW15KCRjc2Nhbm5lcikgPSBm
aW5kIHNjYW46OmNwcCgkZW52LT57X2N3ZH0sICRjcHBwYXRoKTsKCSRlbnYtPntfSUZMQUdT
fSA9ICIlKCIgLiAkY3NjYW5uZXItPmlmbGFncygkZW52KSAuICIlKSI7CglteSgkc2VsZikg
PSBmaW5kIGJ1aWxkOjpjb21tYW5kKCRlbnYsICRlbnYtPntDQ0NPTX0pOwoJJHNlbGYtPntz
Y2FubmVyfSA9ICRjc2Nhbm5lcjsKCWJsZXNzICRlbnYtPntfY2N9ID0gJHNlbGY7CiAgICB9
Cn0KCiMgSW52b2tlIHRoZSBhc3NvY2lhdGVkCSBDIHNjYW5uZXIgdG8gZ2V0IHNpZ25hdHVy
ZSBvZiBpbmNsdWRlZCBmaWxlcy4Kc3ViIGluY2x1ZGVzIHsKICAgIG15KCRzZWxmLCAkdGd0
KSA9IEBfOwogICAgJHNlbGYtPntzY2FubmVyfS0+aW5jbHVkZXMoJHRndCwgJHRndC0+e3Nv
dXJjZXN9WzBdKTsKfQoMCiMgQnVpbGRlciBmb3IgYSBDKysgbW9kdWxlCnBhY2thZ2UgYnVp
bGQ6OmNvbW1hbmQ6OmN4eDsKCnVzZSB2YXJzIHF3KCBASVNBICk7CgpCRUdJTiB7IEBJU0Eg
PSBxdyhidWlsZDo6Y29tbWFuZCkgfQoKc3ViIGZpbmQgewogICAgJF9bMV0tPntfY3h4fSB8
fCBkbyB7CglteSgkY2xhc3MsICRlbnYpID0gQF87CglteSgkY3BwcGF0aCkgPSAkZW52LT5f
c3Vic3QoJGVudi0+e0NQUFBBVEh9KTsKCW15KCRjc2Nhbm5lcikgPSBmaW5kIHNjYW46OmNw
cCgkZW52LT57X2N3ZH0sICRjcHBwYXRoKTsKCSRlbnYtPntfSUZMQUdTfSA9ICIlKCIgLiAk
Y3NjYW5uZXItPmlmbGFncygkZW52KSAuICIlKSI7CglteSgkc2VsZikgPSBmaW5kIGJ1aWxk
Ojpjb21tYW5kKCRlbnYsICRlbnYtPntDWFhDT019KTsKCSRzZWxmLT57c2Nhbm5lcn0gPSAk
Y3NjYW5uZXI7CglibGVzcyAkZW52LT57X2N4eH0gPSAkc2VsZjsKICAgIH0KfQoKIyBJbnZv
a2UgdGhlIGFzc29jaWF0ZWQJIEMgc2Nhbm5lciB0byBnZXQgc2lnbmF0dXJlIG9mIGluY2x1
ZGVkIGZpbGVzLgpzdWIgaW5jbHVkZXMgewogICAgbXkoJHNlbGYsICR0Z3QpID0gQF87CiAg
ICAkc2VsZi0+e3NjYW5uZXJ9LT5pbmNsdWRlcygkdGd0LCAkdGd0LT57c291cmNlc31bMF0p
Owp9CgwKIyBCdWlsZGVyIGZvciBhIHVzZXIgY29tbWFuZCAoY29uczo6Q29tbWFuZCkuICBX
ZSBhc3N1bWUgdGhhdCBhIHVzZXIKIyBjb21tYW5kIG1pZ2h0IGJlIGJ1aWx0IGFuZCBpbXBs
ZW1lbnQgdGhlIGFwcHJvcHJpYXRlIGRlcGVuZGVuY2llcyBvbgojIHRoZSBjb21tYW5kIGl0
c2VsZiAoYWN0dWFsbHksIGp1c3Qgb24gdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGNvbW1hbmQK
IyBsaW5lKS4KcGFja2FnZSBidWlsZDo6Y29tbWFuZDo6dXNlcjsKCnVzZSB2YXJzIHF3KCBA
SVNBICk7CgpCRUdJTiB7IEBJU0EgPSBxdyhidWlsZDo6Y29tbWFuZCkgfQoKIyBYWFggT3B0
aW1pemUgdGhpcyB0byBub3QgdXNlIGlnbm9yZWQgcGF0aHMuCnN1YiBjb21zaWcgewogICAg
cmV0dXJuICRfWzBdLT57X2NvbXNpZ30gaWYgZXhpc3RzICRfWzBdLT57X2NvbXNpZ307CiAg
ICBteSgkc2VsZiwgJHRndCkgPSBAXzsKICAgIG15KCRlbnYpID0gJHNlbGYtPntlbnZ9Owog
ICAgJHNlbGYtPntfY29tc2lnfSA9ICcnOwogICAgbXkgJGNvbTsKICBjb206CiAgICBmb3Ig
JGNvbSAoc3BsaXQoL1tcbjtdLywgJHNlbGYtPnNjcmlwdCkpIHsKCSMgSXNvbGF0ZSBjb21t
YW5kIHdvcmQuCgkkY29tID1+IHMvXlxzKi8vOwoJJGNvbSA9fiBzL1xzLiovLzsKCW5leHQg
aWYgISRjb207ICMgYmxhbmsgbGluZQoJbXkoJHBkaXJzKSA9ICRlbnYtPntFTlZ9LT57UEFU
SH07CglpZiAoISBkZWZpbmVkICRwZGlycykgewoJICAgICRwZGlycyA9IFsgXTsKCX0gZWxz
aWYgKHJlZigkcGRpcnMpIG5lICdBUlJBWScpIHsKCSAgICAkcGRpcnMgPSBbIHNwbGl0KC8k
bWFpbjo6UEFUSF9TRVBBUkFUT1IvbywgJHBkaXJzKSBdOwoJfQoJbXkgJGRpcjsKCWZvciAk
ZGlyIChtYXAoJGRpcjo6dG9wLT5sb29rdXBkaXIoJF8pLCBAJHBkaXJzKSkgewoJICAgIG15
KCRwcm9nKSA9ICRkaXItPmxvb2t1cF9hY2Nlc3NpYmxlKCRjb20pOwoJICAgIGlmICgkcHJv
ZykgeyAjIFhYWCBOb3QgY2hlY2tpbmcgZXhlY3V0ZSBwZXJtaXNzaW9uLgoJCWlmICgoYnVp
bGQgJHByb2cpIGVxICdlcnJvcnMnKSB7CgkJICAgICR0Z3QtPntzdGF0dXN9ID0gJ2Vycm9y
cyc7CgkJICAgIHJldHVybiB1bmRlZjsKCQl9CgkJbmV4dCBjb20gaWYgJHByb2ctPmlnbm9y
ZTsKCQkkc2VsZi0+e19jb21zaWd9IC49ICdzaWcnLT5zaWduYXR1cmUoJHByb2cpOwoJCW5l
eHQgY29tOwoJICAgIH0KCX0KCSMgTm90IGZvdW5kOiBsZXQgc2hlbGwgZ2l2ZSBhbiBlcnJv
ci4KICAgIH0KICAgICRzZWxmLT57X2NvbXNpZ30KfQoKc3ViIGluY2x1ZGVzIHsKICAgIG15
KCRzZWxmLCAkdGd0KSA9IEBfOwogICAgbXkoJHNpZykgPSAnJzsKCiAgICAjIENoZWNrIGZv
ciBhbnkgcXVpY2sgc2Nhbm5lcnMgYXR0YWNoZWQgdG8gc291cmNlIGZpbGVzLgogICAgbXkg
JGRlcDsKICAgIGZvciAkZGVwIChAeyR0Z3QtPntkZXB9fSwgQHskdGd0LT57c291cmNlc319
KSB7CglteSgkc2Nhbm5lcikgPSAkZGVwLT57J3NyY3NjYW4nLCRzZWxmLT57ZW52fX07Cglp
ZiAoJHNjYW5uZXIpIHsKCSAgICAkc2lnIC49ICRzY2FubmVyLT5pbmNsdWRlcygkdGd0LCAk
ZGVwKTsKCX0KICAgIH0KCiAgICAjIEFkZCB0aGUgY29tbWFuZCBzaWduYXR1cmUuCiAgICBy
ZXR1cm4gJmNvbXNpZyAuICRzaWc7Cn0KCgwKIyBCdWlsZGVyIGZvciBhIGxpYnJhcnkgbW9k
dWxlIChhcmNoaXZlKS4KIyBXZSBhc3N1bWUgdGhhdCBhIHVzZXIgY29tbWFuZCBtaWdodCBi
ZSBidWlsdCBhbmQgaW1wbGVtZW50IHRoZQojIGFwcHJvcHJpYXRlIGRlcGVuZGVuY2llcyBv
biB0aGUgY29tbWFuZCBpdHNlbGYuCnBhY2thZ2UgYnVpbGQ6OmNvbW1hbmQ6OmxpYnJhcnk7
Cgp1c2UgdmFycyBxdyggQElTQSApOwoKQkVHSU4geyBASVNBID0gcXcoYnVpbGQ6OmNvbW1h
bmQpIH0KCnN1YiBmaW5kIHsKICAgIG15KCRjbGFzcywgJGVudikgPSBAXzsKICAgIGJsZXNz
IGZpbmQgYnVpbGQ6OmNvbW1hbmQoJGVudiwgJGVudi0+e0FSQ09NfSkKfQoKIyBBbHdheXMg
Y29tcGF0aWJsZSB3aXRoIG90aGVyIGxpYnJhcnkgYnVpbGRlcnMsIHNvIHRoZSB1c2VyCiMg
Y2FuIGRlZmluZSBhIHNpbmdsZSBsaWJyYXJ5IGZyb20gbXVsdGlwbGUgcGxhY2VzLgpzdWIg
Y29tcGF0aWJsZSB7CiAgICBteSgkc2VsZiwgJG90aGVyKSA9IEBfOwogICAgcmVmKCRvdGhl
cikgZXEgImJ1aWxkOjpjb21tYW5kOjpsaWJyYXJ5IjsKfQoMCiMgQSBtdWx0aS10YXJnZXQg
YnVpbGRlci4KIyBUaGlzIGFsbG93cyBtdWx0aXBsZSB0YXJnZXRzIHRvIGJlIGFzc29jaWF0
ZWQgd2l0aCBhIHNpbmdsZSBidWlsZAojIHNjcmlwdCwgd2l0aG91dCBmb3JjaW5nIGFsbCB0
aGUgY29kZSB0byBiZSBhd2FyZSBvZiBtdWx0aXBsZSB0YXJnZXRzLgpwYWNrYWdlIGJ1aWxk
OjptdWx0aXBsZTsKCnN1YiBuZXcgewogICAgbXkoJGNsYXNzLCAkYnVpbGRlciwgJHRndHMp
ID0gQF87CiAgICBibGVzcyB7ICdidWlsZGVyJyA9PiAkYnVpbGRlciwgJ3RndHMnID0+ICR0
Z3RzIH07Cn0KCnN1YiBzY3JpcHQgewogICAgbXkoJHNlbGYsICR0Z3QpID0gQF87CiAgICAk
c2VsZi0+e2J1aWxkZXJ9LT5zY3JpcHQoJHRndCk7Cn0KCnN1YiBpbmNsdWRlcyB7CiAgICBt
eSgkc2VsZiwgJHRndCkgPSBAXzsKICAgICRzZWxmLT57YnVpbGRlcn0tPmluY2x1ZGVzKCR0
Z3QpOwp9CgpzdWIgY29tcGF0aWJsZSB7CiAgICBteSgkc2VsZiwgJHRndCkgPSBAXzsKICAg
ICRzZWxmLT57YnVpbGRlcn0tPmNvbXBhdGlibGUoJHRndCk7Cn0KCnN1YiBjYWNoaW4gewog
ICAgbXkoJHNlbGYsICR0Z3QsICRzaWcpID0gQF87CiAgICAkc2VsZi0+e2J1aWxkZXJ9LT5j
YWNoaW4oJHRndCwgJHNpZyk7Cn0KCnN1YiBjYWNob3V0IHsKICAgIG15KCRzZWxmLCAkdGd0
LCAkc2lnKSA9IEBfOwogICAgJHNlbGYtPntidWlsZGVyfS0+Y2FjaG91dCgkdGd0LCAkc2ln
KTsKfQoKc3ViIGFjdGlvbiB7CiAgICBteSgkc2VsZiwgJGludm9rZWRfdGd0KSA9IEBfOwog
ICAgcmV0dXJuICRzZWxmLT57YnVpbHR9IGlmIGV4aXN0cyAkc2VsZi0+e2J1aWx0fTsKCiAg
ICAjIE1ha2Ugc3VyZSBhbGwgdGFyZ2V0cyBpbiB0aGUgZ3JvdXAgYXJlIHVubGlua2VkIGJl
Zm9yZSBidWlsZGluZyBhbnkuCiAgICBteSgkdGd0cykgPSAkc2VsZi0+e3RndHN9OwogICAg
bXkgJHRndDsKICAgIGZvciAkdGd0IChAJHRndHMpIHsKCWZ1dGlsOjpta2RpcigkdGd0LT57
ZGlyfSk7Cgl1bmxpbmsoJHRndC0+cGF0aCkgaWYgISAkdGd0LT5wcmVjaW91czsKICAgIH0K
CiAgICAjIE5vdyBkbyB0aGUgYWN0aW9uIHRvIGJ1aWxkIGFsbCB0aGUgdGFyZ2V0cy4gRm9y
IGNvbnNpc3RlbmN5CiAgICAjIHdlIGFsd2F5cyBjYWxsIHRoZSBhY3Rpb24gb24gdGhlIGZp
cnN0IHRhcmdldCwganVzdCBzbyB0aGF0CiAgICAjICQ+IGlzIGRldGVybWluaXN0aWMuCiAg
ICB7Cgkkc2VsZi0+e2J1aWxkZXJ9LT5hY3Rpb24oJHRndHMtPlswXSk7CgkjIGFjdGlvbiBu
b3cgaXMgbm9uLWJsb2NraW5nLCBzbyB3YWl0IGZvciB0aGUgdGFyZ2V0IHRvIGJlIGJ1aWx0
LgoJJHRndHMtPlswXS0+cHdhaXQoKTsKCSRzZWxmLT57YnVpbHR9ID0gJHNlbGYtPntzdGF0
dXN9IGVxICdlcnJvcnMnID8gdW5kZWYgOiAxOwogICAgfQoKICAgICMgTm93ICJidWlsZCIg
YWxsIHRoZSBvdGhlciB0YXJnZXRzIChleGNlcHQgZm9yIHRoZSBvbmUKICAgICMgd2Ugd2Vy
ZSBjYWxsZWQgd2l0aCkuIFRoaXMgZ3VhcmFudGVlcyB0aGF0IHRoZSBzaWduYXR1cmUKICAg
ICMgb2YgZWFjaCB0YXJnZXQgaXMgdXBkYXRlZCBhcHByb3ByaWF0ZWx5LiBXZSBmb3JjZSB0
aGUKICAgICMgdGFyZ2V0cyB0byBiZSBidWlsdCBldmVuIGlmIHRoZXkgaGF2ZSBiZWVuIHBy
ZXZpb3VzbHkKICAgICMgY29uc2lkZXJlZCBhbmQgZm91bmQgdG8gYmUgT0s7IHRoZSBvbmx5
IGVmZmVjdCB0aGlzCiAgICAjIGhhcyBpcyB0byBtYWtlIHN1cmUgdGhhdCBzaWduYXR1cmUg
ZmlsZXMgYXJlIHVwZGF0ZWQKICAgICMgY29ycmVjdGx5LgogICAgZm9yICR0Z3QgKEAkdGd0
cykgewoJaWYgKCR0Z3QgbmUgJGludm9rZWRfdGd0KSB7CgkgICAgZGVsZXRlICR0Z3QtPntz
dGF0dXN9OwoJICAgICdzaWcnLT5pbnZhbGlkYXRlKCR0Z3QpOwoJICAgIGJ1aWxkICR0Z3Q7
Cgl9CiAgICB9CgogICAgIyBTdGF0dXMgb2YgYWN0aW9uLgogICAgJHNlbGYtPntidWlsdH07
Cn0KCgwKIyBHZW5lcmljIHNjYW5uaW5nIG1vZHVsZS4KcGFja2FnZSBzY2FuOwoKIyBSZXR1
cm5zIHRoZSBzaWduYXR1cmUgb2YgZmlsZXMgaW5jbHVkZWQgYnkgdGhlIHNwZWNpZmllZCBm
aWxlcyBvbgojIGJlaGFsZiBvZiB0aGUgYXNzb2NpYXRlZCB0YXJnZXQuIEFueSBlcnJvcnMg
aW4gaGFuZGxpbmcgdGhlIGluY2x1ZGVkCiMgZmlsZXMgYXJlIHByb3BhZ2F0ZWQgdG8gdGhl
IHRhcmdldCBvbiB3aG9zZSBiZWhhbGYgdGhpcyBwcm9jZXNzaW5nCiMgaXMgYmVpbmcgZG9u
ZS4gU2lnbmF0dXJlcyBhcmUgY2FjaGVkIGZvciBlYWNoIHVuaXF1ZSBmaWxlL3NjYW5uZXIK
IyBwYWlyLgpzdWIgaW5jbHVkZXMgewogICAgbXkoJHNlbGYsICR0Z3QsIEBmaWxlcykgPSBA
XzsKICAgIG15KCVmaWxlcywgJGZpbGUpOwogICAgbXkoJGluYykgPSAkc2VsZi0+e2luY2x1
ZGVzfSB8fCAoJHNlbGYtPntpbmNsdWRlc30gPSB7fSk7CiAgICB3aGlsZSAoJGZpbGUgPSBw
b3AgQGZpbGVzKSB7CgluZXh0IGlmIGV4aXN0cyAkZmlsZXN7JGZpbGV9OwoJaWYgKCRpbmMt
PnskZmlsZX0pIHsKCSAgICBwdXNoKEBmaWxlcywgQHskaW5jLT57JGZpbGV9fSk7CgkgICAg
JGZpbGVzeyRmaWxlfSA9ICdzaWcnLT5zaWduYXR1cmUoJGZpbGUtPnJmaWxlKTsKCX0gZWxz
ZSB7CgkgICAgaWYgKChidWlsZCAkZmlsZSkgZXEgJ2Vycm9ycycpIHsKCQkkdGd0LT57c3Rh
dHVzfSA9ICdlcnJvcnMnOyAjIHRndCBpbmhlcml0cyBidWlsZCBzdGF0dXMKCQlyZXR1cm4g
KCk7CgkgICAgfQoJICAgICRmaWxlc3skZmlsZX0gPSAnc2lnJy0+c2lnbmF0dXJlKCRmaWxl
LT5yZmlsZSk7CgkgICAgbXkoQGluY2x1ZGVzKSA9ICRzZWxmLT5zY2FuKCRmaWxlKTsKCSAg
ICAkaW5jLT57JGZpbGV9ID0gXEBpbmNsdWRlczsKCSAgICBwdXNoKEBmaWxlcywgQGluY2x1
ZGVzKTsKCX0KICAgIH0KICAgICdzaWcnLT5jb2xsZWN0KHNvcnQgdmFsdWVzICVmaWxlcykK
fQoKDAojIEEgc2ltcGxlIHNjYW5uZXIuIFRoaXMgaXMgdXNlZCBieSB0aGUgUXVpY2tTY2Fu
ZnVuY3Rpb24sIHRvIHNldHVwCiMgb25lLXRpbWUgdGFyZ2V0IGFuZCBlbnZpcm9ubWVudC1p
bmRlcGVuZGVudCBzY2FubmluZyBmb3IgYSBzb3VyY2UKIyBmaWxlLiBPbmx5IHVzZWQgZm9y
IGNvbW1hbmRzIHJ1biBieSB0aGUgQ29tbWFuZCBtZXRob2QuCnBhY2thZ2Ugc2Nhbjo6cXVp
Y2tzY2FuOwoKdXNlIHZhcnMgcXcoIEBJU0EgJXNjYW5uZXIgKTsKCkJFR0lOIHsgQElTQSA9
IHF3KHNjYW4pIH0KCnN1YiBmaW5kIHsKICAgIG15KCRjbGFzcywgJGNvZGUsICRlbnYsICRw
ZGlycykgPSBAXzsKICAgIGlmICghIGRlZmluZWQgJHBkaXJzKSB7CgkkcGRpcnMgPSBbIF0g
OwogICAgfSBlbHNpZiAocmVmKCRwZGlycykgbmUgJ0FSUkFZJykgewoJJHBkaXJzID0gWyBz
cGxpdCgvJG1haW46OlBBVEhfU0VQQVJBVE9SL28sICRwZGlycykgXTsKICAgIH0KICAgIG15
KEBwYXRoKSA9IG1hcCB7ICRkaXI6OmN3ZC0+bG9va3VwZGlyKCRfKSB9IEAkcGRpcnM7CiAg
ICBteSgkc3BhdGgpID0gIkBwYXRoIjsKICAgICRzY2FubmVyeyRjb2RlLCRlbnYsJHNwYXRo
fSB8fCBkbyB7CglteSgkc2VsZikgPSB7IGNvZGUgPT4gJGNvZGUsIGVudiA9PiAkZW52LCBw
YXRoID0+IFxAcGF0aCB9OwoJJHNjYW5uZXJ7JGNvZGUsJGVudiwkc3BhdGh9ID0gYmxlc3Mg
JHNlbGY7CiAgICB9Cn0KCiMgU2NhbiB0aGUgc3BlY2lmaWVkIGZpbGUgZm9yIGluY2x1ZGVk
IGZpbGUgbmFtZXMuCnN1YiBzY2FuIHsKICAgIG15KCRzZWxmLCAkZmlsZSkgPSBAXzsKICAg
IG15KCRjb2RlKSA9ICRzZWxmLT57Y29kZX07CiAgICBteShAaW5jbHVkZXMpOwogICAgIyBG
aWxlIHNob3VsZCBoYXZlIGJlZW4gYnVpbHQgYnkgbm93LiBJZiBub3QsIHdlJ2xsIGlnbm9y
ZSBpdC4KICAgIHJldHVybiAoKSB1bmxlc3Mgb3BlbihTQ0FOLCAkZmlsZS0+cnBhdGgpOwog
ICAgd2hpbGUoPFNDQU4+KSB7CglwdXNoKEBpbmNsdWRlcywgZ3JlcCgkXyBuZSAnJywgJiRj
b2RlKSk7CiAgICB9CiAgICBjbG9zZShTQ0FOKTsKICAgIG15KCR3ZCkgPSAkZmlsZS0+e2Rp
cn07CiAgICBteShAZmlsZXMpOwogICAgbXkgJG5hbWU7CiAgICBmb3IgJG5hbWUgKEBpbmNs
dWRlcykgewoJbXkgJGRpcjsKCWZvciAkZGlyICgkZmlsZS0+e2Rpcn0sIEB7JHNlbGYtPntw
YXRofX0pIHsKCSAgICBteSgkaW5jbHVkZSkgPSAkZGlyLT5sb29rdXBfYWNjZXNzaWJsZSgk
bmFtZSk7CgkgICAgaWYgKCRpbmNsdWRlKSB7CgkJcHVzaChAZmlsZXMsICRpbmNsdWRlKSB1
bmxlc3MgJGluY2x1ZGUtPmlnbm9yZTsKCQlsYXN0OwoJICAgIH0KCX0KICAgIH0KICAgIEBm
aWxlcwp9CgoMCiMgQ1BQIChDIHByZXByb2Nlc3Nvcikgc2Nhbm5pbmcgbW9kdWxlCnBhY2th
Z2Ugc2Nhbjo6Y3BwOwoKdXNlIHZhcnMgcXcoIEBJU0EgJXNjYW5uZXIgKTsKCkJFR0lOIHsg
QElTQSA9IHF3KHNjYW4pIH0KCiMgRm9yIHRoaXMgY29uc3RydWN0b3IsIHByb3ZpZGUgdGhl
IGluY2x1ZGUgcGF0aCBhcmd1bWVudCAoY29sb24KIyBzZXBhcmF0ZWQpLiBFYWNoIHBhdGgg
aXMgdGFrZW4gcmVsYXRpdmUgdG8gdGhlIHByb3ZpZGVkIGRpcmVjdG9yeS4KCiMgTm90ZTog
YSBwYXJ0aWN1bGFyIHNjYW5uaW5nIG9iamVjdCBpcyBhc3N1bWVkIHRvIGFsd2F5cyByZXR1
cm4gdGhlCiMgc2FtZSByZXN1bHQgZm9yIHRoZSBzYW1lIGlucHV0LiBUaGlzIGlzIHdoeSB0
aGUgc2VhcmNoIHBhdGggaXMgYQojIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgZm9y
IGEgQ1BQIHNjYW5uaW5nIG9iamVjdC4gV2UgZ28gdG8KIyBzb21lIHBhaW5zIHRvIG1ha2Ug
c3VyZSB0aGF0IHdlIHJldHVybiB0aGUgc2FtZSBzY2FubmVyIG9iamVjdAojIGZvciB0aGUg
c2FtZSBwYXRoOiBvdGhlcndpc2Ugd2Ugd2lsbCB1bmVjZXNzYXJpbHkgc2NhbiBmaWxlcy4K
c3ViIGZpbmQgewogICAgbXkoJGNsYXNzLCAkZGlyLCAkcGRpcnMpID0gQF87CiAgICBpZiAo
ISBkZWZpbmVkICRwZGlycykgewoJJHBkaXJzID0gWyBdOwogICAgfSBlbHNpZiAocmVmKCRw
ZGlycykgbmUgJ0FSUkFZJykgewoJJHBkaXJzID0gWyBzcGxpdCgvJG1haW46OlBBVEhfU0VQ
QVJBVE9SL28sICRwZGlycykgXTsKICAgIH0KICAgIG15IEBwYXRoID0gbWFwKCRkaXItPmxv
b2t1cGRpcigkXyksIEAkcGRpcnMpOwogICAgbXkoJHNwYXRoKSA9ICJAcGF0aCI7CiAgICAk
c2Nhbm5lcnskc3BhdGh9IHx8IGRvIHsKCW15KCRzZWxmKSA9IHsncGF0aCcgPT4gXEBwYXRo
fTsKCSRzY2FubmVyeyRzcGF0aH0gPSBibGVzcyAkc2VsZjsKICAgIH0KfQoKIyBTY2FuIHRo
ZSBzcGVjaWZpZWQgZmlsZSBmb3IgaW5jbHVkZSBsaW5lcy4Kc3ViIHNjYW4gewogICAgbXko
JHNlbGYsICRmaWxlKSA9IEBfOwogICAgbXkoJGFuZ2xlcywgJHF1b3Rlcyk7CgogICAgaWYg
KGV4aXN0cyAkZmlsZS0+e2FuZ2xlc30pIHsKCSRhbmdsZXMgPSAkZmlsZS0+e2FuZ2xlc307
CgkkcXVvdGVzID0gJGZpbGUtPntxdW90ZXN9OwogICAgfSBlbHNlIHsKCW15KEBhbmdsZW5h
bWVzLCBAcXVvdGVuYW1lcyk7CglyZXR1cm4gKCkgdW5sZXNzIG9wZW4oU0NBTiwgJGZpbGUt
PnJwYXRoKTsKCXdoaWxlICg8U0NBTj4pIHsKCSAgICBuZXh0IHVubGVzcyAvXlxzKiMvOwoJ
ICAgIGlmICgvXlxzKiNccyppbmNsdWRlXHMqKFs8Il0pKC4qPylbPiJdLykgewoJCWlmICgk
MSBlcSAiPCIpIHsKCQkgICAgcHVzaChAYW5nbGVuYW1lcywgJDIpOwoJCX0gZWxzZSB7CgkJ
ICAgIHB1c2goQHF1b3RlbmFtZXMsICQyKTsKCQl9CgkgICAgfQoJfQoJY2xvc2UoU0NBTik7
CgkkYW5nbGVzID0gJGZpbGUtPnthbmdsZXN9ID0gXEBhbmdsZW5hbWVzOwoJJHF1b3RlcyA9
ICRmaWxlLT57cXVvdGVzfSA9IFxAcXVvdGVuYW1lczsKICAgIH0KCgogICAgbXkoQHNob3J0
cGF0aCkgPSBAeyRzZWxmLT57cGF0aH19OwkgICMgcGF0aCBmb3IgPD4gc3R5bGUgaW5jbHVk
ZXMKICAgIG15KEBsb25ncGF0aCkgPSAoJGZpbGUtPntkaXJ9LCBAc2hvcnRwYXRoKTsgIyBw
YXRoIGZvciAiIiBzdHlsZSBpbmNsdWRlcwoKICAgIG15KEBpbmNsdWRlcyk7CgogICAgbXkg
JG5hbWU7CiAgICBmb3IgJG5hbWUgKEAkYW5nbGVzKSB7CglteSAkZGlyOwoJZm9yICRkaXIg
KEBzaG9ydHBhdGgpIHsKCSAgICBteSgkaW5jbHVkZSkgPSAkZGlyLT5sb29rdXBfYWNjZXNz
aWJsZSgkbmFtZSk7CgkgICAgaWYgKCRpbmNsdWRlKSB7CgkJcHVzaChAaW5jbHVkZXMsICRp
bmNsdWRlKSB1bmxlc3MgJGluY2x1ZGUtPmlnbm9yZTsKCQlsYXN0OwoJICAgIH0KCX0KICAg
IH0KCiAgICBmb3IgJG5hbWUgKEAkcXVvdGVzKSB7CglteSAkZGlyOwoJZm9yICRkaXIoQGxv
bmdwYXRoKSB7CgkgICAgbXkoJGluY2x1ZGUpID0gJGRpci0+bG9va3VwX2FjY2Vzc2libGUo
JG5hbWUpOwoJICAgIGlmICgkaW5jbHVkZSkgewoJCXB1c2goQGluY2x1ZGVzLCAkaW5jbHVk
ZSkgdW5sZXNzICRpbmNsdWRlLT5pZ25vcmU7CgkJbGFzdDsKCSAgICB9Cgl9CiAgICB9Cgog
ICAgcmV0dXJuIEBpbmNsdWRlcwp9CgojIFJldHVybiB0aGUgaW5jbHVkZSBmbGFncyB0aGF0
IHdvdWxkIGJlIHVzZWQgZm9yIGEgQyBDb21waWxlLgpzdWIgaWZsYWdzIHsKICAgIG15KCRz
ZWxmLCAkZW52KSA9IEBfOwogICAgbXkoJGlmbGFncykgPSAnJzsKICAgIG15KCRkcGF0aCk7
CiAgICBmb3IgJGRwYXRoIChtYXAoJF8tPnBhdGgsIEB7JHNlbGYtPntwYXRofX0pKSB7Cgkk
aWZsYWdzIC49ICIgIi4kZW52LT57SU5DRElSUFJFRklYfS4kZHBhdGg7CgluZXh0IGlmIEZp
bGU6OlNwZWMtPmZpbGVfbmFtZV9pc19hYnNvbHV0ZSgkZHBhdGgpOwoJaWYgKEBwYXJhbTo6
cnBhdGgpIHsKCSAgICBteSAkZDsKCSAgICBpZiAoJGRwYXRoIGVxICRkaXI6OkNVUkRJUikg
ewoJCWZvcmVhY2ggJGQgKG1hcCgkXy0+cGF0aCwgQHBhcmFtOjpycGF0aCkpIHsKCQkgICAg
JGlmbGFncyAuPSAiICIuJGVudi0+e0lOQ0RJUlBSRUZJWH0uJGQ7CgkJfQoJICAgIH0gZWxz
ZSB7CgkJZm9yZWFjaCAkZCAobWFwKCRfLT5wYXRoLCBAcGFyYW06OnJwYXRoKSkgewoJCSAg
ICAkaWZsYWdzIC49ICIgIi4kZW52LT57SU5DRElSUFJFRklYfS5GaWxlOjpTcGVjLT5jYXRm
aWxlKCRkLCAkZHBhdGgpOwoJCX0KCSAgICB9Cgl9CiAgICB9CiAgICAkaWZsYWdzCn0KDApw
YWNrYWdlIEZpbGU6OlNwZWM7Cgp1c2UgdmFycyBxdyggJF9TRVAgJF9NQVRDSF9TRVAgJF9N
QVRDSF9WT0wgKTsKCiMgQ29ucyBpcyBtaWdyYXRpbmcgdG8gdXNpbmcgRmlsZTo6U3BlYyBm
b3IgcG9ydGFibGUgcGF0aCBuYW1lCiMgbWFuaXB1bGF0aW9uLiAgVGhpcyBpcyB0aGUgcmln
aHQgbG9uZy10ZXJtIGRpcmVjdGlvbiwgYnV0IHRoZXJlIGFyZQojIHNvbWUgcHJvYmxlbXMg
d2l0aCBtYWtpbmcgdGhlIHRyYW5zaXRpb246CiMKIwlGb3IgbXVsdGktdm9sdW1lIHN1cHBv
cnQsIHdlIG5lZWQgdG8gdXNlIG5ld2VyIGludGVyZmFjZXMKIwkoc3BsaXRwYXRoLCBjYXRw
YXRoLCBzcGxpdGRpcikgdGhhdCBhcmUgb25seSBhdmFpbGFibGUgaW4KIwlGaWxlOjpTcGVj
IDAuOC4KIwojCUZpbGU6OlNwZWMgMC44IGRvZXNuJ3Qgd29yayB3aXRoIFBlcmwgNS4wMFsz
NF0gZHVlIHRvCiMJcmVndWxhciBleHByZXNzaW9uIGluY29tcGF0aWJpbGl0aWVzICh1c2Ug
b2YgXHopLgojCiMJRm9yY2luZyBwZW9wbGUgdG8gdXNlIGEgbmV3IHZlcnNpb24gb2YgYSBt
b2R1bGUgaXMgcGFpbmZ1bAojCWJlY2F1c2UgKGluIHRoZSB3b3JrcGxhY2UpIHRoZWlyIGFk
bWluaXN0cmF0b3JzIGFyZW4ndAojCWFsd2F5cyBnb2luZyB0byBhZ3JlZSB0byBpbnN0YWxs
IGl0IGV2ZXJ5d2hlcmUuCiMKIyBBcyBhIG1pZGRsZSBncm91bmQsIHdlIHByb3ZpZGUgb3Vy
IG93biB2ZXJzaW9ucyBvZiBhbGwgdGhlIEZpbGU6OlNwZWMKIyBtZXRob2RzIHdlIHVzZSwg
c3VwcG9ydGluZyBib3RoIFVOSVggYW5kIFdpbjMyLiAgU29tZSBvZiB0aGVzZSBtZXRob2Rz
CiMgYXJlIGhvbWUgYnJldywgc29tZSBhcmUgY3V0LWFuZC1wYXN0ZWQgZnJvbSB0aGUgcmVh
bCBGaWxlOjpTcGVjIG1ldGhvZHMuCiMgVGhpcyB3YXksIHdlJ3JlIG5vdCByZWludmVudGlu
ZyB0aGUgd2hvbGUgd2hlZWwsIGF0IGxlYXN0LgojCiMgV2UgY2FuIChhbmQgc2hvdWxkKSBn
ZXQgcmlkIG9mIHRoaXMgY2xhc3Mgd2hlbmV2ZXIgNS4wMFszNF0gYW5kCiMgdmVyc2lvbnMg
b2YgRmlsZTo6U3BlYyBwcmlvciB0byAwLjkgKD8pIGhhdmUgZmFkZWQgc3VmZmljaWVudGx5
LgojIFdlIGFsc28gbWF5IG5lZWQgdG8gcmV2aXNpdCB3aGVuZXZlciBzb21lb25lIGZpcnN0
IHdhbnRzIHRvIHVzZQojIENvbnMgb24gc29tZSBwbGF0Zm9ybSBvdGhlciB0aGFuIFVOSVgg
b3IgV2luMzIuCgpCRUdJTiB7CiAgICBpZiAoJG1haW46Ol9XSU4zMikgewoJJF9TRVAgPSAn
XFwnOwoJJF9NQVRDSF9TRVAgPSAiW1xRLyRfU0VQXEVdIjsKCSRfTUFUQ0hfVk9MID0gIihb
YS16XTopPyRfTUFUQ0hfU0VQIjsKICAgIH0gZWxzZSB7CgkkX1NFUCA9ICcvJzsKCSRfTUFU
Q0hfU0VQID0gIlxRJF9TRVBcRSI7CgkkX01BVENIX1ZPTCA9ICRfTUFUQ0hfU0VQOwogICAg
fQp9CgpzdWIgY2Fub25wYXRoIHsKICAgIG15ICgkc2VsZiwgJHBhdGgpID0gQF87CiAgICBp
ZiAoJG1haW46Ol9XSU4zMikgewoJJHBhdGggPX4gcy9eKFthLXpdOikvXHUkMS9zOwoJJHBh
dGggPX4gc3wvfFxcfGc7CgkkcGF0aCA9fiBzfChbXlxcXSlcXCt8JDFcXHxnOyAgICAgICAg
ICAgICAgICAgICMgeHgvLy8veHggIC0+IHh4L3h4CgkkcGF0aCA9fiBzfChcXFwuKStcXHxc
XHxnOyAgICAgICAgICAgICAgICAgICAgICMgeHgvLi8uL3h4IC0+IHh4L3h4CgkkcGF0aCA9
fiBzfF4oXC5cXCkrfHxzIHVubGVzcyAkcGF0aCBlcSAiLlxcIjsgICMgLi94eCAgICAgIC0+
IHh4CgkkcGF0aCA9fiBzfFxcJHx8CgkJIHVubGVzcyAkcGF0aCA9fiBtI14oW0EtWl06KT9c
XCQjczsgICAjIHh4LyAgICAgICAtPiB4eAogICAgfSBlbHNlIHsKCSRwYXRoID1+IHN8Lyt8
L3xnIHVubGVzcygkXk8gZXEgJ2N5Z3dpbicpOyAgICAgIyB4eC8vLy94eCAgLT4geHgveHgK
CSRwYXRoID1+IHN8KC9cLikrL3wvfGc7ICAgICAgICAgICAgICAgICAgICAgICAgIyB4eC8u
Ly4veHggLT4geHgveHgKCSRwYXRoID1+IHN8XihcLi8pK3x8cyB1bmxlc3MgJHBhdGggZXEg
Ii4vIjsgICAgIyAuL3h4ICAgICAgLT4geHgKCSRwYXRoID1+IHN8Xi8oXC5cLi8pK3wvfHM7
ICAgICAgICAgICAgICAgICAgICAgIyAvLi4vLi4veHggLT4geHgKCSRwYXRoID1+IHN8LyR8
fCB1bmxlc3MgJHBhdGggZXEgIi8iOyAgICAgICAgICAjIHh4LyAgICAgICAtPiB4eAogICAg
fQogICAgcmV0dXJuICRwYXRoOwp9CgpzdWIgY2F0ZGlyIHsKICAgIG15ICRzZWxmID0gc2hp
ZnQ7CiAgICBteSBAYXJncyA9IEBfOwogICAgZm9yZWFjaCAoQGFyZ3MpIHsKCSMgYXBwZW5k
IGEgc2xhc2ggdG8gZWFjaCBhcmd1bWVudCB1bmxlc3MgaXQgaGFzIG9uZSB0aGVyZQoJJF8g
Lj0gJF9TRVAgaWYgJF8gZXEgJycgfHwgc3Vic3RyKCRfLC0xKSBuZSAkX1NFUDsKICAgIH0K
ICAgIHJldHVybiAkc2VsZi0+Y2Fub25wYXRoKGpvaW4oJycsIEBhcmdzKSk7Cn0KCnN1YiBj
YXRmaWxlIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICBteSAkZmlsZSA9IHBvcCBAXzsK
ICAgIHJldHVybiAkZmlsZSB1bmxlc3MgQF87CiAgICBteSAkZGlyID0gJHNlbGYtPmNhdGRp
cihAXyk7CiAgICAkZGlyIC49ICRfU0VQIHVubGVzcyBzdWJzdHIoJGRpciwtMSkgZXEgJF9T
RVA7CiAgICAkZmlsZSA9ICcnIGlmICEgZGVmaW5lZCgkZmlsZSk7CiAgICByZXR1cm4gJGRp
ci4kZmlsZTsKfQoKc3ViIGNhdHBhdGggewogICAgbXkgJHBhdGggPSAkX1sxXSAuICRfWzBd
LT5jYXRmaWxlKEBfWzIuLiQjX10pOwogICAgJHBhdGggPX4gcy8oLikkX01BVENIX1NFUCok
LyQxLzsKICAgICRwYXRoOwp9CgpzdWIgY3VyZGlyIHsKICAgICcuJwp9CgpzdWIgZmlsZV9u
YW1lX2lzX2Fic29sdXRlIHsKICAgIG15ICgkc2VsZiwgJGZpbGUpID0gQF87CiAgICByZXR1
cm4gc2NhbGFyKCRmaWxlID1+IG17XiRfTUFUQ0hfVk9MfWlzKTsKfQoKc3ViIHNwbGl0ZGly
IHsKICAgIG15IEBkaXJzID0gc3BsaXQoLyRfTUFUQ0hfU0VQLywgJF9bMV0sIC0xKTsKICAg
IHB1c2goQGRpcnMsICcnKSBpZiAkZGlyc1skI2RpcnNdOwogICAgQGRpcnM7Cn0KCnN1YiBz
cGxpdHBhdGggewogICAgbXkgKCRzZWxmLCAkcGF0aCkgPSBAXzsKICAgIG15ICR2b2wgPSAn
JzsKICAgIG15ICRzZXAgPSAkX1NFUDsKICAgIGlmICgkbWFpbjo6X1dJTjMyKSB7CglpZiAo
JHBhdGggPX4gcyNeKFtBLVphLXpdOnwoPzpcXFxcfC8vKVteXFwvXStbXFwvXVteXFwvXSsp
KFtcXC9dKSMkMiMpIHsKCSAgICAkdm9sID0gJDE7CgkgICAgJHNlcCA9ICQyOwoJfQogICAg
fQogICAgbXkoQHBhdGgpID0gc3BsaXQoLyRfTUFUQ0hfU0VQLywgJHBhdGgsIC0xKTsKICAg
IG15ICRmaWxlID0gcG9wIEBwYXRoOwogICAgbXkgJGRpcnMgPSBqb2luKCRzZXAsIEBwYXRo
LCAnJyk7CiAgICByZXR1cm4gKCR2b2wsICRkaXJzLCAkZmlsZSk7Cn0KCnN1YiB1cGRpciB7
CiAgICAnLi4nCn0KCnN1YiBjYXNlX3RvbGVyYW50IHsKICAgIHJldHVybiAkbWFpbjo6X1dJ
TjMyOwp9CgwKIyBEaXJlY3RvcnkgYW5kIGZpbGUgaGFuZGxpbmcuIEZpbGVzL2RpcnMgYXJl
IHJlcHJlc2VudGVkIGJ5IG9iamVjdHMuCiMgT3RoZXIgcGFja2FnZXMgYXJlIHdlbGNvbWUg
dG8gYWRkIGNvbXBvbmVudC1zcGVjaWZpYyBhdHRyaWJ1dGVzLgpwYWNrYWdlIGRpcjsKCnVz
ZSB2YXJzIHF3KCAkU0VQQVJBVE9SICRNQVRDSF9TRVBBUkFUT1IgJENVUkRJUiAkVVBESVIK
CSAgICAgJGN3ZF92b2wgJXJvb3QgJHRvcCAkY3dkICk7CgpCRUdJTiB7CiAgICAjIEEgcG9y
dGFibGUgd2F5IG9mIGRldGVybWluZyBvdXIgZGlyZWN0b3J5IHNlcGFyYXRvci4KICAgICRT
RVBBUkFUT1IgPSBGaWxlOjpTcGVjLT5jYXRkaXIoJycsICcnKTsKICAgICMgQSBmYXN0LXBh
dGggcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGEgZGlyZWN0b3J5IHNlcGFyYXRvcgog
ICAgIyBhbnl3aGVyZSBpbiBhIHBhdGggbmFtZS4KICAgIGlmICgkU0VQQVJBVE9SIGVxICcv
JykgewoJJE1BVENIX1NFUEFSQVRPUiA9ICJcUSRTRVBBUkFUT1JcRSI7CiAgICB9IGVsc2Ug
ewoJJE1BVENIX1NFUEFSQVRPUiA9ICJbXFEvJFNFUEFSQVRPUlxFXSI7CiAgICB9CiAgICAj
IENhY2hlIHRoZXNlIHZhbHVlcyBzbyB3ZSBkb24ndCBoYXZlIHRvIG1ha2UgYSBtZXRob2Qg
Y2FsbAogICAgIyBldmVyeSB0aW1lIHdlIG5lZWQgdGhlbS4KICAgICRDVVJESVIgPSBGaWxl
OjpTcGVjLT5jdXJkaXI7CSMgJy4nIG9uIFVOSVgKICAgICRVUERJUiA9IEZpbGU6OlNwZWMt
PnVwZGlyOwkjICcuLicgb24gVU5JWAogICAgIwogICAgJGN3ZF92b2wgPSAnJzsKfQoKIyBB
bm5vdGF0ZSBhIG5vZGUgKGZpbGUgb3IgZGlyZWN0b3J5KSB3aXRoIGluZm8gYWJvdXQgdGhl
CiMgbWV0aG9kIHRoYXQgY3JlYXRlZCBpdC4Kc3ViIGNyZWF0b3IgewogICAgbXkoJHNlbGYs
IEBmcmFtZSkgPSBAXzsKICAgICRzZWxmLT57J2NyZWF0b3InfSA9IFxAZnJhbWUgaWYgQGZy
YW1lOwogICAgJHNlbGYtPnsnY3JlYXRvcid9Owp9CgojIEhhbmRsZSBhIGZpbGV8ZGlyIHR5
cGUgZXhjZXB0aW9uLiAgV2Ugb25seSBkaWUgaWYgd2UgZmluZCB3ZSB3ZXJlCiMgaW52b2tl
ZCBieSBzb21ldGhpbmcgaW4gYSBDb25zY3JpcHQvQ29uc3RydWN0IGZpbGUsIGJlY2F1c2UK
IyBkZXBlbmRlbmNpZXMgY3JlYXRlZCBkaXJlY3RseSBieSBDb25zJyBhbmFseXNpcyBzaG91
bGRuJ3QgY2F1c2UKIyBhbiBlcnJvci4Kc3ViIF90eXBlX2V4Y2VwdGlvbiB7CiAgICBteSgk
ZSkgPSBAXzsKICAgIG15KCRsaW5lLCAkc3ViKTsKICAgICh1bmRlZiwgdW5kZWYsICRsaW5l
LCAkc3ViKSA9IHNjcmlwdDo6Y2FsbGVyX2luZm87CiAgICBpZiAoZGVmaW5lZCAkbGluZSkg
ewoJbXkgJGVyciA9ICJcIiR7XCRlLT5wYXRofVwiIGFscmVhZHkgaW4gdXNlIGFzIGEgIiAu
IHJlZigkZSkgLiAiIGJlZm9yZSAkc3ViIG9uIGxpbmUgJGxpbmUiOwoJaWYgKCRlLT57J2Ny
ZWF0b3InfSkgewoJICAgIG15ICRzY3JpcHQ7CgkgICAgKHVuZGVmLCAkc2NyaXB0LCAkbGlu
ZSwgJHN1YikgPSBAeyRlLT57J2NyZWF0b3InfX07CgkgICAgJGVyciA9ICJcdCIgLiAkZXJy
IC4gIixcblx0XHRkZWZpbmVkIGJ5ICRzdWIgaW4gJHNjcmlwdCwgbGluZSAkbGluZSI7Cgl9
CgkkZXJyIC49ICJcbiI7CglkaWUgJGVycjsKICAgIH0KfQoKIyBUaGlzIHdyYXBzIHVwIGFs
bCB0aGUgY29tbW9uIEZpbGU6OlNwZWMgbG9naWMgdGhhdCB3ZSB1c2UgZm9yIHBhcnNpbmcK
IyBkaXJlY3Rvcnkgc2VwYXJhdG9ycyBpbiBhIHBhdGggYW5kIHR1cm5pbmcgaXQgaW50byBp
bmRpdmlkdWFsCiMgc3ViZGlyZWN0b3JpZXMgdGhhdCB3ZSBtdXN0IGNyZWF0ZSwgYXMgd2Vs
bCBhcyBjcmVhdGlvbiBvZiByb290CiMgbm9kZXMgZm9yIGFueSBuZXcgZmlsZSBzeXN0ZW0g
dm9sdW1lcyB3ZSBmaW5kLiAgRmlsZTo6U3BlYyBkb2Vzbid0IGhhdmUKIyBpbnR1aXRpdmVs
eSBvYnZpb3VzIGludGVyZmFjZXMsIHNvIHRoaXMgaXMgaGVhdmlseSBjb21tZW50ZWQuCiMK
IyBOb3RlOiAgVGhpcyBpcyBOT1QgYW4gb2JqZWN0IG9yIGNsYXNzIG1ldGhvZDsKIyBpdCdz
IGp1c3QgYSB1dGlsaXR5IHN1YnJvdXRpbmUuCnN1YiBfcGFyc2VfcGF0aCB7CiAgICBteSgk
ZGlyLCAkcGF0aCkgPSBAXzsKCiAgICAjIENvbnZlcnQgYWxsIHNsYXNoZXMgdG8gdGhlIG5h
dGl2ZSBkaXJlY3Rvcnkgc2VwYXJhdG9yLgogICAgIyBUaGlzIGFsbG93cyBDb25zdHJ1Y3Qg
ZmlsZXMgdG8gYWx3YXlzIGJlIHdyaXR0ZW4gd2l0aCBnb29kCiAgICAjIG9sZCBQT1NJWCBw
YXRoIG5hbWVzLCByZWdhcmRsZXNzIG9mIHdoYXQgd2UncmUgcnVubmluZyBvbi4KICAgICRw
YXRoID0gRmlsZTo6U3BlYy0+Y2Fub25wYXRoKCRwYXRoKTsKCiAgICAjIEZpbGU6OlNwZWMg
ZG9lc24ndCB1bmRlcnN0YW5kIHRoZSBDb25zIGNvbnZlbnRpb24gb2YKICAgICMgYW4gaW5p
dGlhbCAnIycgZm9yIHRvcC1yZWxhdGl2ZSBmaWxlcy4gIFN0cmlwIGl0LgogICAgbXkoJHRv
cHJlbCkgPSAkcGF0aCA9fiBzL14jLy87CgogICAgIyBMZXQgRmlsZTo6U3BlYyBkbyB0aGUg
aGVhdnkgbGlmdGluZyBvZiBwYXJzaW5nIHRoZSBwYXRoIG5hbWUuCiAgICBteSgkdm9sLCAk
ZGlyZWN0b3JpZXMsICRlbnRyeSkgPSBGaWxlOjpTcGVjLT5zcGxpdHBhdGgoJHBhdGgpOwog
ICAgbXkgQGRpcnMgPSBGaWxlOjpTcGVjLT5zcGxpdGRpcigkZGlyZWN0b3JpZXMpOwoKICAg
ICMgSWYgdGhlcmUgd2FzIGEgZmlsZSBlbnRyeSBvbiB0aGUgZW5kIG9mIHRoZSBwYXRoLCB0
aGVuIHRoZQogICAgIyBsYXN0IEBkaXJzIGVsZW1lbnQgaXMgJycgYW5kIHdlIGRvbid0IG5l
ZWQgaXQuICBJZiB0aGVyZQogICAgIyB3YXNuJ3QgYSBmaWxlIGVudHJ5IG9uIHRoZSBlbmQg
KEZpbGU6OlNwZWMtPnNwbGl0cGF0aCgpIGtuZXcKICAgICMgdGhlIGxhc3QgY29tcG9uZW50
IHdhcyBhIGRpcmVjdG9yeSksIHRoZW4gdGhlIGxhc3QgQGRpcnMKICAgICMgZWxlbWVudCBi
ZWNvbWVzIHRoZSBlbnRyeSB3ZSB3YW50IHRvIGxvb2sgdXAuCiAgICBteSgkZSkgPSBwb3Ag
QGRpcnM7CiAgICAkZW50cnkgPSAkZSBpZiAkZW50cnkgZXEgJyc7CgogICAgaWYgKEZpbGU6
OlNwZWMtPmZpbGVfbmFtZV9pc19hYnNvbHV0ZSgkcGF0aCkpIHsKCSMgQW4gYWJzb2x1dGUg
cGF0aCBuYW1lLiAgSWYgbm8gdm9sdW1lIHdhcyBzdXBwbGllZCwKCSMgdXNlIHRoZSB2b2x1
bWUgb2Ygb3VyIGN1cnJlbnQgZGlyZWN0b3J5LgoJJHZvbCA9ICRjd2Rfdm9sIGlmICR2b2wg
ZXEgJyc7Cgkkdm9sID0gdWMoJHZvbCkgaWYgRmlsZTo6U3BlYy0+Y2FzZV90b2xlcmFudDsK
CWlmICghIGRlZmluZWQgJHJvb3R7JHZvbH0pIHsKCSAgICAjIFRoaXMgaXMgb3VyIGZpcnN0
IHRpbWUgbG9va2luZyB1cCBhIHBhdGggbmFtZQoJICAgICMgb24gdGhpcyB2b2x1bWUsIHNv
IGNyZWF0ZSBhIHJvb3Qgbm9kZSBmb3IgaXQuCgkgICAgIyAoT24gVU5JWCBzeXN0ZW1zLCAk
dm9sIGlzIGFsd2F5cyAnJywgc28gJy8nCgkgICAgIyBhbHdheXMgbWFwcyB0byB0aGUgJHJv
b3R7Jyd9IG5vZGUuKQoJICAgICRyb290eyR2b2x9ID0ge3BhdGggPT4gJHZvbC4kU0VQQVJB
VE9SLAoJCQlwcmVmaXggPT4gJHZvbC4kU0VQQVJBVE9SLAoJCQlzcmNwYXRoID0+ICR2b2wu
JFNFUEFSQVRPUiwKCQkJJ2V4aXN0cycgPT4gMSB9OwoJICAgICRyb290eyR2b2x9LT57J3Ny
Y2Rpcid9ID0gJHJvb3R7JHZvbH07CgkgICAgYmxlc3MgJHJvb3R7JHZvbH07Cgl9CgkjIFdl
J3JlIGF0IHRoZSB0b3AsIHNvIHN0cmlwIHRoZSBibGFuayBlbnRyeSBmcm9tIHRoZSBmcm9u
dCBvZgoJIyB0aGUgQGRpcnMgYXJyYXkgc2luY2UgdGhlIGluaXRpYWwgJy8nIGl0IHJlcHJl
c2VudHMgd2lsbCBub3cKCSMgYmUgc3VwcGxpZWQgYnkgdGhlIHJvb3Qgbm9kZSB3ZSByZXR1
cm4uCglzaGlmdCBAZGlyczsKCSRkaXIgPSAkcm9vdHskdm9sfTsKICAgIH0gZWxzaWYgKCR0
b3ByZWwpIHsKCSRkaXIgPSAkZGlyOjp0b3A7CiAgICB9CiAgICAoJGRpciwgXEBkaXJzLCAk
ZW50cnkpOwp9CgojIENvbW1vbiBzdWJyb3V0aW5lIGZvciBjcmVhdGluZyBkaXJlY3Rvcnkg
bm9kZXMuCnN1YiBfY3JlYXRlX2RpcnMgewogICAgbXkgKCRkaXIsIEBkaXJzKSA9IEBfOwog
ICAgbXkgJGU7CiAgICBmb3JlYWNoICRlIChAZGlycykgewoJbXkgJGQgPSAkZGlyLT57bWVt
YmVyfS0+eyRlfTsKCWlmICghIGRlZmluZWQgJGQpIHsKCSAgICBibGVzcyAkZCA9IHsgJ2Vu
dHJ5JyA9PiAkZSwgJ2RpcicgPT4gJGRpciwgfSwgJ2Rpcic7CgkgICAgJGQtPmNyZWF0b3Io
c2NyaXB0OjpjYWxsZXJfaW5mbyk7CgkgICAgJGQtPnttZW1iZXJ9LT57JGRpcjo6Q1VSRElS
fSA9ICRkOwoJICAgICRkLT57bWVtYmVyfS0+eyRkaXI6OlVQRElSfSA9ICRkaXI7CgkgICAg
JGRpci0+e21lbWJlcn0tPnskZX0gPSAkZDsKCX0gZWxzaWYgKHJlZiAkZCBlcSAnZW50cnkn
KSB7CgkgICAgYmxlc3MgJGQsICdkaXInOwoJICAgICRkLT57bWVtYmVyfS0+eyRkaXI6OkNV
UkRJUn0gPSAkZDsKCSAgICAkZC0+e21lbWJlcn0tPnskZGlyOjpVUERJUn0gPSAkZGlyOwoJ
fSBlbHNpZiAocmVmICRkIGVxICdmaWxlJykgewoJICAgICMgVGhpcyBjbGF1c2UgaXMgdG8g
c3VwcGx5IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LAoJICAgICMgd2l0aCBhIHdhcm5pbmcs
IGZvciBhbnlvbmUgdGhhdCdzIHVzZWQgRmlsZVBhdGgKCSAgICAjIHRvIHJlZmVyIHRvIGEg
ZGlyZWN0b3J5LiAgQWZ0ZXIgcGVvcGxlIGhhdmUgdXNpbmcKCSAgICAjIDEuOCBoYXZlIGhh
ZCB0aW1lIHRvIGFkanVzdCAoc29tZXRpbWUgaW4gdmVyc2lvbgoJICAgICMgMS45IG9yIGxh
dGVyKSwgd2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGVudGlyZSBjbGF1c2UuCgkgICAgbXkoJHNj
cmlwdCwgJGxpbmUsICRzdWIpOwoJICAgICh1bmRlZiwgJHNjcmlwdCwgJGxpbmUsICRzdWIp
ID0gQHskZC0+eydjcmVhdG9yJ319OwoJICAgIGlmICgkc3ViIGVxICdzY3JpcHQ6OkZpbGVQ
YXRoJykgewoJCXByaW50IFNUREVSUiAiJDA6ICBXYXJuaW5nOiAgJHN1YiB1c2VkIHRvIHJl
ZmVyIHRvIGEgZGlyZWN0b3J5XG4iCgkJCS4gIlx0YXQgbGluZSAkbGluZSBvZiAkc2NyaXB0
LiAgVXNlIERpclBhdGggaW5zdGVhZC5cbiI7CgkJYmxlc3MgJGQsICdkaXInOwoJICAgIH0g
ZWxzZSB7CgkJX3R5cGVfZXhjZXB0aW9uKCRkKTsKCSAgICB9Cgl9IGVsc2lmIChyZWYgJGQg
bmUgJ2RpcicpIHsKCSAgICBfdHlwZV9leGNlcHRpb24oJGQpOwoJfQoJJGRpciA9ICRkOwog
ICAgfQogICAgJGRpcjsKfQoKIyBMb29rIHVwIGFuIGVudHJ5IGluIGEgZGlyZWN0b3J5LiAg
VGhpcyBtZXRob2QgaXMgZm9yIHdoZW4gd2UgZG9uJ3QKIyBjYXJlIHdoZXRoZXIgYSBmaWxl
IG9yIGRpcmVjdG9yeSBpcyByZXR1cm5lZCwgc28gaWYgdGhlIGVudHJ5IGFscmVhZHkKIyBl
eGlzdHMsIGl0IHdpbGwgc2ltcGx5IGJlIHJldHVybmVkLiAgSWYgbm90LCB3ZSBjcmVhdGUg
aXQgYXMgYQojIGdlbmVyaWMgImVudHJ5IiB3aGljaCBjYW4gYmUgbGF0ZXIgdHVybmVkIGlu
dG8gYSBmaWxlIG9yIGRpcmVjdG9yeQojIGJ5IGEgbW9yZS1zcGVjaWZpYyBsb29rdXAuCiMK
IyBUaGUgZmlsZSBlbnRyeSBtYXkgYmUgc3BlY2lmaWVkIGFzIHJlbGF0aXZlLCBhYnNvbHV0
ZSAoc3RhcnRzIHdpdGggLyksCiMgb3IgdG9wLXJlbGF0aXZlIChzdGFydHMgd2l0aCAjKS4K
c3ViIGxvb2t1cCB7CiAgICBteSgkZGlyLCAkZW50cnkpID0gQF87CgogICAgaWYgKCRlbnRy
eSAhfiBtIyRNQVRDSF9TRVBBUkFUT1IjbykgewoJIyBGYXN0IHBhdGg6IHNpbXBsZSBlbnRy
eSBuYW1lIGluIGEga25vd24gZGlyZWN0b3J5LgoJaWYgKCRlbnRyeSA9fiBzL14jLy8pIHsK
CSAgICAjIFRvcC1yZWxhdGl2ZSBuYW1lcyBiZWdpbiB3aXRoICMuCgkgICAgJGRpciA9ICRk
aXI6OnRvcDsKCX0KICAgIH0gZWxzZSB7CglteSAkZGlyc3JlZjsKCSgkZGlyLCAkZGlyc3Jl
ZiwgJGVudHJ5KSA9IF9wYXJzZV9wYXRoKCRkaXIsICRlbnRyeSk7CgkkZGlyID0gX2NyZWF0
ZV9kaXJzKCRkaXIsIEAkZGlyc3JlZikgaWYgQCRkaXJzcmVmOwoJcmV0dXJuIGlmICEgZGVm
aW5lZCAkZGlyOwoJcmV0dXJuICRkaXIgaWYgJGVudHJ5IGVxICcnOwogICAgfQoKICAgIG15
ICRlID0gJGRpci0+e21lbWJlcn0tPnskZW50cnl9OwogICAgaWYgKCEgZGVmaW5lZCAkZSkg
ewoJYmxlc3MgJGUgPSB7ICdlbnRyeScgPT4gJGVudHJ5LCAnZGlyJyA9PiAkZGlyLCB9LCAn
ZW50cnknOwoJJGUtPmNyZWF0b3Ioc2NyaXB0OjpjYWxsZXJfaW5mbyk7CgkkZGlyLT57bWVt
YmVyfS0+eyRlbnRyeX0gPSAkZTsKICAgIH0KCiAgICAkZTsKfQoKIyBMb29rIHVwIGEgZmls
ZSBlbnRyeSBpbiBhIGRpcmVjdG9yeS4KIwojIFRoZSBmaWxlIGVudHJ5IG1heSBiZSBzcGVj
aWZpZWQgYXMgcmVsYXRpdmUsIGFic29sdXRlIChzdGFydHMgd2l0aCAvKSwKIyBvciB0b3At
cmVsYXRpdmUgKHN0YXJ0cyB3aXRoICMpLgpzdWIgbG9va3VwZmlsZSB7CiAgICBteSgkZGly
LCAkZW50cnkpID0gQF87CgogICAgaWYgKCRlbnRyeSAhfiBtIyRNQVRDSF9TRVBBUkFUT1Ij
bykgewoJIyBGYXN0IHBhdGg6IHNpbXBsZSBlbnRyeSBuYW1lIGluIGEga25vd24gZGlyZWN0
b3J5LgoJaWYgKCRlbnRyeSA9fiBzL14jLy8pIHsKCSAgICAjIFRvcC1yZWxhdGl2ZSBuYW1l
cyBiZWdpbiB3aXRoICMuCgkgICAgJGRpciA9ICRkaXI6OnRvcDsKCX0KICAgIH0gZWxzZSB7
CglteSAkZGlyc3JlZjsKCSgkZGlyLCAkZGlyc3JlZiwgJGVudHJ5KSA9IF9wYXJzZV9wYXRo
KCRkaXIsICRlbnRyeSk7CgkkZGlyID0gX2NyZWF0ZV9kaXJzKCRkaXIsIEAkZGlyc3JlZikg
aWYgQCRkaXJzcmVmOwoJcmV0dXJuIHVuZGVmIGlmICRlbnRyeSBlcSAnJzsKICAgIH0KCiAg
ICBteSAkZiA9ICRkaXItPnttZW1iZXJ9LT57JGVudHJ5fTsKICAgIGlmICghIGRlZmluZWQg
JGYpIHsKCWJsZXNzICRmID0geyAnZW50cnknID0+ICRlbnRyeSwgJ2RpcicgPT4gJGRpciwg
fSwgJ2ZpbGUnOwoJJGYtPmNyZWF0b3Ioc2NyaXB0OjpjYWxsZXJfaW5mbyk7CgkkZGlyLT57
bWVtYmVyfS0+eyRlbnRyeX0gPSAkZjsKICAgIH0gZWxzaWYgKHJlZiAkZiBlcSAnZW50cnkn
KSB7CglibGVzcyAkZiwgJ2ZpbGUnOwogICAgfSBlbHNpZiAocmVmICRmIG5lICdmaWxlJykg
ewoJX3R5cGVfZXhjZXB0aW9uKCRmKTsKICAgIH0KCiAgICAkZjsKfQoKIyBMb29rIHVwIGEg
KHN1Yi0pZGlyZWN0b3J5IGVudHJ5IGluIGEgZGlyZWN0b3J5LgojCiMgVGhlIChzdWItKWRp
cmVjdG9yeSBlbnRyeSBtYXkgYmUgc3BlY2lmaWVkIGFzIHJlbGF0aXZlLCBhYnNvbHV0ZQoj
IChzdGFydHMgd2l0aCAvKSwgb3IgdG9wLXJlbGF0aXZlIChzdGFydHMgd2l0aCAjKS4Kc3Vi
IGxvb2t1cGRpciB7CiAgICBteSgkZGlyLCAkZW50cnkpID0gQF87CgogICAgbXkgJGRpcnNy
ZWY7CiAgICBpZiAoJGVudHJ5ICF+IG0jJE1BVENIX1NFUEFSQVRPUiNvKSB7CgkjIEZhc3Qg
cGF0aDogc2ltcGxlIGVudHJ5IG5hbWUgaW4gYSBrbm93biBkaXJlY3RvcnkuCglpZiAoJGVu
dHJ5ID1+IHMvXiMvLykgewoJICAgICMgVG9wLXJlbGF0aXZlIG5hbWVzIGJlZ2luIHdpdGgg
Iy4KCSAgICAkZGlyID0gJGRpcjo6dG9wOwoJfQogICAgfSBlbHNlIHsKCSgkZGlyLCAkZGly
c3JlZiwgJGVudHJ5KSA9IF9wYXJzZV9wYXRoKCRkaXIsICRlbnRyeSk7CiAgICB9CiAgICBf
Y3JlYXRlX2RpcnMoJGRpciwgQCRkaXJzcmVmLCAkZW50cnkpOwp9CgojIExvb2sgdXAgYSBm
aWxlIGVudHJ5IGFuZCByZXR1cm4gaXQgaWYgaXQncyBhY2Nlc3NpYmxlLgpzdWIgbG9va3Vw
X2FjY2Vzc2libGUgewogICAgbXkgJGZpbGUgPSAkX1swXS0+bG9va3VwZmlsZSgkX1sxXSk7
CiAgICByZXR1cm4gKCRmaWxlICYmICRmaWxlLT5hY2Nlc3NpYmxlKSA/ICRmaWxlIDogdW5k
ZWY7Cn0KCiMgUmV0dXJuIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHdpdGhvdXQgZG9pbmcgYSBs
b29rdXBkaXIsCiMgd2hpY2ggd291bGQgY3JlYXRlIGEgcGFyZW50IGlmIGl0IGRvZXNuJ3Qg
YWxyZWFkeSBleGlzdC4KIyBBIHJldHVybiB2YWx1ZSBvZiB1bmRlZiAoISAkZGlyLT51cCkg
aW5kaWNhdGVzIGEgcm9vdCBkaXJlY3RvcnkuCnN1YiB1cCB7CiAgICAkX1swXS0+e21lbWJl
cn0tPnskZGlyOjpVUERJUn07Cn0KCiMgUmV0dXJuIHdoZXRoZXIgdGhpcyBpcyBhbiBlbnRy
eSBzb21ld2hlcmUgdW5kZXJuZWF0aCB0aGUKIyBzcGVjaWZpZWQgZGlyZWN0b3J5LgpzdWIg
aXNfdW5kZXIgewogICAgbXkgJGRpciA9ICRfWzBdOwogICAgd2hpbGUgKCRkaXIpIHsKCXJl
dHVybiAxIGlmICRfWzFdID09ICRkaXI7CgkkZGlyID0gJGRpci0+dXA7CiAgICB9CiAgICBy
ZXR1cm4gdW5kZWY7Cn0KCiMgUmV0dXJuIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGNh
bGxpbmcgZGlyZWN0b3J5ICgkX1sxXSkKIyB0byB0aGUgb2JqZWN0LiAgSWYgdGhlIG9iamVj
dCBpcyBub3QgdW5kZXIgdGhlIGRpcmVjdG9yeSwgdGhlbgojIHdlIHJldHVybiBpdCBhcyBh
IHRvcC1yZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoIG5hbWUuCnN1YiByZWxwYXRoIHsKICAg
IG15ICgkZGlyLCAkb2JqKSA9IEBfOwogICAgbXkgQGRpcnM7CiAgICBteSAkbyA9ICRvYmo7
CiAgICB3aGlsZSAoJG8pIHsKCWlmICgkZGlyID09ICRvKSB7CgkgICAgaWYgKEBkaXJzIDwg
MikgewoJCXJldHVybiAkZGlyc1swXSB8fCAnJzsKCSAgICB9IGVsc2UgewoJCXJldHVybiBG
aWxlOjpTcGVjLT5jYXRkaXIoQGRpcnMpOwoJICAgIH0KCX0KCXVuc2hpZnQoQGRpcnMsICRv
LT57ZW50cnl9KTsKCSRvID0gJG8tPnVwOwogICAgfQogICAgIyBUaGUgb2JqZWN0IHdhcyBu
b3QgdW5kZXJuZWF0aCB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeS4KICAgICMgVXNlIHRoZSBu
b2RlJ3MgY2FjaGVkIHBhdGgsIHdoaWNoIGlzIGVpdGhlciB0b3AtcmVsYXRpdmUKICAgICMg
KGluIHdoaWNoIGNhc2Ugd2UgYXBwZW5kICcjJyB0byB0aGUgYmVnaW5uaW5nKSBvcgogICAg
IyBhYnNvbHV0ZS4KICAgIG15ICRwID0gJG9iai0+cGF0aDsKICAgICRwID0gJyMnIC4gJHAg
aWYgISBGaWxlOjpTcGVjLT5maWxlX25hbWVfaXNfYWJzb2x1dGUoJHApOwogICAgcmV0dXJu
ICRwOwp9CgojIFJldHVybiB0aGUgcGF0aCBvZiB0aGUgZGlyZWN0b3J5IChmaWxlIHBhdGhz
IGltcGxlbWVudGVkCiMgc2VwYXJhdGVseSwgYmVsb3cpLgpzdWIgcGF0aCB7CiAgICAkX1sw
XS0+e3BhdGh9IHx8CgkoJF9bMF0tPntwYXRofSA9ICRfWzBdLT57ZGlyfS0+cHJlZml4IC4g
JF9bMF0tPntlbnRyeX0pOwp9CgojIFJldHVybiB0aGUgcGF0aG5hbWUgYXMgYSBwcmVmaXgg
dG8gYmUgY29uY2F0ZW5hdGVkIHdpdGggYW4gZW50cnkuCnN1YiBwcmVmaXggewogICAgcmV0
dXJuICRfWzBdLT57cHJlZml4fSBpZiBleGlzdHMgJF9bMF0tPntwcmVmaXh9OwogICAgJF9b
MF0tPntwcmVmaXh9ID0gJF9bMF0tPnBhdGggLiAkU0VQQVJBVE9SOwp9CgojIFJldHVybiB0
aGUgcmVsYXRlZCBzb3VyY2UgcGF0aCBwcmVmaXguCnN1YiBzcmNwcmVmaXggewogICAgcmV0
dXJuICRfWzBdLT57c3JjcHJlZml4fSBpZiBleGlzdHMgJF9bMF0tPntzcmNwcmVmaXh9Owog
ICAgbXkoJHNyY2RpcikgPSAkX1swXS0+c3JjZGlyOwogICAgJHNyY2Rpci0+e3NyY3ByZWZp
eH0gPSAkc3JjZGlyIGVxICRfWzBdID8gJHNyY2Rpci0+cHJlZml4CgkJCQkJICAgIDogJHNy
Y2Rpci0+c3JjcHJlZml4Owp9CgojIFJldHVybiB0aGUgcmVsYXRlZCBzb3VyY2UgZGlyZWN0
b3J5LgpzdWIgc3JjZGlyIHsKICAgICRfWzBdLT57J3NyY2Rpcid9IHx8CgkoJF9bMF0tPnsn
c3JjZGlyJ30gPSAkX1swXS0+e2Rpcn0tPnNyY2Rpci0+bG9va3VwZGlyKCRfWzBdLT57ZW50
cnl9KSkKfQoKIyBSZXR1cm4gaWYgdGhlIGRpcmVjdG9yeSBpcyBsaW5rZWQgdG8gYSBzZXBh
cmF0ZSBzb3VyY2UgZGlyZWN0b3J5LgpzdWIgaXNfbGlua2VkIHsKICAgIHJldHVybiAkX1sw
XS0+e2lzX2xpbmtlZH0gaWYgZGVmaW5lZCAkX1swXS0+e2lzX2xpbmtlZH07CiAgICAkX1sw
XS0+e2lzX2xpbmtlZH0gPSAkX1swXS0+cGF0aCBuZSAkX1swXS0+c3JjZGlyLT5wYXRoOwp9
CgpzdWIgbGluayB7CiAgICBteShAcGF0aHMpID0gQF87CiAgICBteSgkc3JjZGlyKSA9ICRk
aXI6OmN3ZC0+bG9va3VwZGlyKHBvcCBAcGF0aHMpLT5zcmNkaXI7CiAgICBtYXAoJGRpcjo6
Y3dkLT5sb29rdXBkaXIoJF8pLT57J3NyY2Rpcid9ID0gJHNyY2RpciwgQHBhdGhzKTsKCiAg
ICAjIG1ha2UgYSByZXZlcnNlIGxvb2t1cCBmb3IgdGhlIGxpbmsuCiAgICAkc3JjZGlyLT57
bGlua3N9ID0gW10gaWYgISAkc3JjZGlyLT57bGlua3N9OwogICAgcHVzaCBAeyRzcmNkaXIt
PntsaW5rc319LCBAcGF0aHM7Cn0KCnVzZSB2YXJzIHF3KCBAdGFpbCApOyAjIFRPRE86IFdo
eSBnbG9iYWwgPz8/PwoKc3ViIGxpbmtlZF90YXJnZXRzIHsKICAgIG15ICR0Z3QgPSBzaGlm
dDsKICAgIG15IEB0YXJnZXRzID0gKCk7CiAgICBteSAkZGlyOwogICAgaWYgKHJlZiAkdGd0
IGVxICdkaXInKSB7CgkkZGlyID0gJHRndDsKICAgIH0gZWxzZSB7CglwdXNoIEB0YWlsLCAk
dGd0OwoJJGRpciA9ICR0Z3QtPntkaXJ9OwogICAgfQogICAgd2hpbGUgKCRkaXIpIHsKCWlm
IChkZWZpbmVkICRkaXItPntsaW5rc30gJiYgQHskZGlyLT57bGlua3N9fSkgewoJICAgIHB1
c2goQHRhcmdldHMsIG1hcChGaWxlOjpTcGVjLT5jYXRkaXIoJF8sIEB0YWlsKSwgQHskZGly
LT57bGlua3N9fSkpOwoJICAgICNwcmludCBTVERFUlIgIkZvdW5kIExpbms6ICR7XCRkaXIt
PnBhdGh9IC0+IEB7XCRkaXItPntsaW5rc319XG4iOwoJfQoJdW5zaGlmdCBAdGFpbCwgJGRp
ci0+e2VudHJ5fTsKCSRkaXIgPSAkZGlyLT51cDsKICAgIH0KCiAgICByZXR1cm4gbWFwKCRk
aXI6OnRvcC0+bG9va3VwZGlyKCRfKSwgQHRhcmdldHMpOwp9CgpzdWIgYWNjZXNzaWJsZSB7
CiAgICBteSAkcGF0aCA9ICRfWzBdLT5wYXRoOwogICAgbXkgJGVyciA9ICIkMDogeW91IGhh
dmUgYXR0ZW1wdGVkIHRvIHVzZSBwYXRoIFwiJHBhdGhcIiBib3RoIGFzIGEgZmlsZSAiIC4K
CSAgICAgICJhbmQgYXMgYSBkaXJlY3RvcnkhXG4iOwogICAgZGllICRlcnI7Cn0KCnN1YiBp
bml0IHsKICAgIG15ICRwYXRoID0gQ3dkOjpjd2QoKTsKCiAgICAjIFdlIGtub3cgd2UgY2Fu
IGdldCBhd2F5IHdpdGggcGFzc2luZyB1bmRlZiB0byBsb29rdXBkaXIKICAgICMgYXMgdGhl
IGRpcmVjdG9yeSBiZWNhdXNlICRkaXIgaXMgYW4gYWJzb2x1dGUgcGF0aC4KICAgICR0b3Ag
PSBsb29rdXBkaXIodW5kZWYsICRwYXRoKTsKICAgICR0b3AtPnsncGF0aCd9ID0gJHRvcC0+
e3NyY3BhdGh9ID0gJGRpcjo6Q1VSRElSOwogICAgJHRvcC0+eydwcmVmaXgnfSA9ICcnOwog
ICAgJHRvcC0+eydzcmNkaXInfSA9ICR0b3A7CgogICAgJGN3ZCA9ICR0b3A7CgogICAgKCRj
d2Rfdm9sLCB1bmRlZiwgdW5kZWYpID0gRmlsZTo6U3BlYy0+c3BsaXRwYXRoKCRwYXRoKTsK
ICAgICRjd2Rfdm9sID0gJycgaWYgISBkZWZpbmVkICRjd2Rfdm9sOwogICAgJGN3ZF92b2wg
PSB1YygkY3dkX3ZvbCkgaWYgRmlsZTo6U3BlYy0+Y2FzZV90b2xlcmFudDsKfQoMCnBhY2th
Z2UgZmlsZTsKCnVzZSB2YXJzIHF3KCBASVNBICRsZXZlbCAkbmpvYnMgJWFzeW5jX3Rhcmdl
dHMgKTsKCkJFR0lOIHsgQElTQSA9IHF3KGRpcik7ICRsZXZlbCA9IDAgfQoKc3ViIGZpbmFs
aXplIHsKICAgICMgQ2FsbGVkIG9uIGludGVycnVwdCBvciBhdCBjb21wbGV0aW9uLgogICAg
IyBXYWl0IGZvciBhbnkgYXN5bmNocm9ub3VzbHkgc3Bhd25lZCBqb2JzLiBUaGlzIGFsbG93
cyB0aGVtIHRvIGNvbXBsZXRlCiAgICAjIGFuZCBoYW5kbGUgc2lnbmF0dXJlIGFuZCBjYWNo
ZSB1cGRhdGVzLgogICAgZmlsZTo6d2FpdF9mb3JfYWxsX2pvYnMoKTsKfQoKIyBSZXR1cm4g
dGhlIHBhdGhuYW1lIG9mIHRoZSBmaWxlLgojIERlZmluZSB0aGlzIHNlcGFyYXRlbHkgZnJv
bSBkaXI6OnBhdGggYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvCiMgY2FjaGUgYWxsIGZpbGUg
cGF0aG5hbWVzIChqdXN0IGRpcmVjdG9yeSBwYXRobmFtZXMpLgpzdWIgcGF0aCB7CiAgICAk
X1swXS0+e2Rpcn0tPnByZWZpeCAuICRfWzBdLT57ZW50cnl9Cn0KCiMgUmV0dXJuIHRoZSBy
ZWxhdGVkIHNvdXJjZSBmaWxlIHBhdGguCnN1YiBzcmNwYXRoIHsKICAgICRfWzBdLT57ZGly
fS0+c3JjcHJlZml4IC4gJF9bMF0tPntlbnRyeX0KfQoKIyBSZXR1cm4gaWYgdGhlIGZpbGUg
aXMgKHNob3VsZCBiZSkgbGlua2VkIHRvIGEgc2VwYXJhdGUgc291cmNlIGZpbGUuCnN1YiBp
c19saW5rZWQgewogICAgJF9bMF0tPntkaXJ9LT5pc19saW5rZWQKfQoKIyBSZXBvc2l0b3J5
IGZpbGUgc2VhcmNoLiAgSWYgdGhlIGxvY2FsIGZpbGUgZXhpc3RzLCB0aGF0IHdpbnMuCiMg
T3RoZXJ3aXNlLCByZXR1cm4gdGhlIGZpcnN0IGV4aXN0aW5nIHNhbWUtbmFtZWQgZmlsZSB1
bmRlciBhCiMgUmVwb3NpdG9yeSBkaXJlY3RvcnkuICBJZiB0aGVyZSBpc24ndCBhbnl0aGlu
ZyB3aXRoIHRoZSBzYW1lIG5hbWUKIyB1bmRlciBhIFJlcG9zaXRvcnkgZGlyZWN0b3J5LCBy
ZXR1cm4gdGhlIGxvY2FsIGZpbGUgbmFtZSBhbnl3YXkKIyBzbyB0aGF0IHNvbWUgaGlnaGVy
IGxheWVyIGNhbiB0cnkgdG8gY29uc3RydWN0IGl0LgpzdWIgcmZpbGUgewogICAgcmV0dXJu
ICRfWzBdLT57cmZpbGV9IGlmIGV4aXN0cyAkX1swXS0+e3JmaWxlfTsKICAgIG15KCRzZWxm
KSA9IEBfOwogICAgbXkoJHJmaWxlKSA9ICRzZWxmOwogICAgaWYgKEBwYXJhbTo6cnBhdGgp
IHsKCW15KCRwYXRoKSA9ICRzZWxmLT5wYXRoOwoJaWYgKCEgRmlsZTo6U3BlYy0+ZmlsZV9u
YW1lX2lzX2Fic29sdXRlKCRwYXRoKSAmJiAhIC1mICRwYXRoKSB7CgkgICAgbXkoJGRpcik7
CgkgICAgZm9yZWFjaCAkZGlyIChAcGFyYW06OnJwYXRoKSB7CgkJbXkoJHQpID0gJGRpci0+
cHJlZml4IC4gJHBhdGg7CgkJaWYgKC1mICR0KSB7CgkJICAgICRyZmlsZSA9ICRfWzBdLT5s
b29rdXBmaWxlKCR0KTsKCQkgICAgJHJmaWxlLT57aXNfb25fcnBhdGh9ID0gMTsKCQkgICAg
bGFzdDsKCQl9CgkgICAgfQoJfQogICAgfQogICAgJHNlbGYtPntyZmlsZX0gPSAkcmZpbGU7
Cn0KCiMgcmV0dXJucyB0aGUgInByZWNpb3VzIiBzdGF0dXMgb2YgdGhpcyBmaWxlLgpzdWIg
cHJlY2lvdXMgewogICAgcmV0dXJuICRfWzBdLT57cHJlY2lvdXN9Owp9CgojICJFcmFzZSIg
cmVmZXJlbmNlIHRvIGEgUmVwb3NpdG9yeSBmaWxlLAojIG1ha2luZyB0aGlzIGEgY29tcGxl
dGVseSBsb2NhbCBmaWxlIG9iamVjdAojIGJ5IHBvaW50aW5nIGl0IGJhY2sgdG8gaXRzZWxm
LgpzdWIgbm9fcmZpbGUgewogICAgJF9bMF0tPnsncmZpbGUnfSA9ICRfWzBdOwp9CgojIFJl
dHVybiBhIHBhdGggdG8gdGhlIGZpcnN0IGV4aXN0aW5nIGZpbGUgdW5kZXIgYSBSZXBvc2l0
b3J5IGRpcmVjdG9yeSwKIyBpbXBsaWNpdGx5IHJldHVybmluZyB0aGUgY3VycmVudCBmaWxl
J3MgcGF0aCBpZiB0aGVyZSBpc24ndCBhCiMgc2FtZS1uYW1lZCBmaWxlIHVuZGVyIGEgUmVw
b3NpdG9yeSBkaXJlY3RvcnkuCnN1YiBycGF0aCB7CiAgICAkX1swXS0+e3JwYXRofSB8fAoJ
KCRfWzBdLT57cnBhdGh9ID0gJF9bMF0tPnJmaWxlLT5wYXRoKQp9CgojIFJldHVybiBhIHBh
dGggdG8gdGhlIGZpcnN0IGxpbmtlZCBzcmNwYXRoIGZpbGUgdW5kZXIgYSBSZXBvc2l0b3kK
IyBkaXJlY3RvcnksIGltcGxpY2l0bHkgcmV0dXJuaW5nIHRoZSBjdXJyZW50IGZpbGUncyBz
cmNwYXRoIGlmIHRoZXJlCiMgaXNuJ3QgYSBzYW1lLW5hbWVkIGZpbGUgdW5kZXIgYSBSZXBv
c2l0b3J5IGRpcmVjdG9yeS4Kc3ViIHJzcmNwYXRoIHsKICAgIHJldHVybiAkX1swXS0+e3Jz
cmNwYXRofSBpZiBleGlzdHMgJF9bMF0tPntyc3JjcGF0aH07CiAgICBteSgkc2VsZikgPSBA
XzsKICAgIG15KCRwYXRoKSA9ICRzZWxmLT57cnNyY3BhdGh9ID0gJHNlbGYtPnNyY3BhdGg7
CiAgICBpZiAoQHBhcmFtOjpycGF0aCAmJiAhIEZpbGU6OlNwZWMtPmZpbGVfbmFtZV9pc19h
YnNvbHV0ZSgkcGF0aCkgJiYgISAtZiAkcGF0aCkgewoJbXkoJGRpcik7Cglmb3JlYWNoICRk
aXIgKEBwYXJhbTo6cnBhdGgpIHsKCSAgICBteSgkdCkgPSAkZGlyLT5wcmVmaXggLiAkcGF0
aDsKCSAgICBpZiAoLWYgJHQpIHsKCQkkc2VsZi0+e3JzcmNwYXRofSA9ICR0OwoJCWxhc3Q7
CgkgICAgfQoJfQogICAgfQogICAgJHNlbGYtPntyc3JjcGF0aH07Cn0KCiMgUmV0dXJuIGlm
IGEgc2FtZS1uYW1lZCBmaWxlIHNvdXJjZSBmaWxlIGV4aXN0cy4KIyBUaGlzIGhhbmRsZXMg
dGhlIGludGVyYWN0aW9uIG9mIExpbmsgYW5kIFJlcG9zaXRvcnkgbG9naWMuCiMgQXMgYSBz
aWRlIGVmZmVjdCwgaXQgd2lsbCBsaW5rIGEgc291cmNlIGZpbGUgZnJvbSBpdHMgTGlua2Vk
CiMgZGlyZWN0b3J5IChwcmVmZXJhYmx5IGxvY2FsLCBidXQgbWF5YmUgaW4gYSByZXBvc2l0
b3J5KQojIGludG8gYSBidWlsZCBkaXJlY3RvcnkgZnJvbSBpdHMgcHJvcGVyIExpbmtlZCBk
aXJlY3RvcnkuCnN1YiBzb3VyY2VfZXhpc3RzIHsKICAgIHJldHVybiAkX1swXS0+e3NvdXJj
ZV9leGlzdHN9IGlmIGRlZmluZWQgJF9bMF0tPntzb3VyY2VfZXhpc3RzfTsKICAgIG15KCRz
ZWxmKSA9IEBfOwogICAgbXkoJHBhdGgpID0gJHNlbGYtPnBhdGg7CiAgICBteSgkdGltZSkg
PSAoc3RhdCgkcGF0aCkpWzldOwogICAgaWYgKCRzZWxmLT5pc19saW5rZWQpIHsKCSMgTGlu
a2VkIGRpcmVjdG9yeSwgbG9jYWwgbG9naWMuCglteSgkc3JjcGF0aCkgPSAkc2VsZi0+c3Jj
cGF0aDsKCW15KCRzcmN0aW1lKSA9IChzdGF0KCRzcmNwYXRoKSlbOV07CglpZiAoJHNyY3Rp
bWUpIHsKCSAgICBpZiAoISAkdGltZSB8fCAkc3JjdGltZSAhPSAkdGltZSkgewoJCWZ1dGls
OjppbnN0YWxsKCRzcmNwYXRoLCAkc2VsZik7CgkgICAgfQoJICAgIHJldHVybiAkc2VsZi0+
e3NvdXJjZV9leGlzdHN9ID0gMTsKCX0KCSMgTGlua2VkIGRpcmVjdG9yeSwgcmVwb3NpdG9y
eSBsb2dpYy4KCWlmIChAcGFyYW06OnJwYXRoKSB7CgkgICAgaWYgKCRzZWxmICE9ICRzZWxm
LT5yZmlsZSkgewoJCXJldHVybiAkc2VsZi0+e3NvdXJjZV9leGlzdHN9ID0gMTsKCSAgICB9
CgkgICAgbXkoJHJzcmNwYXRoKSA9ICRzZWxmLT5yc3JjcGF0aDsKCSAgICBpZiAoJHBhdGgg
bmUgJHJzcmNwYXRoKSB7CgkJbXkoJHJzcmN0aW1lKSA9IChzdGF0KCRyc3JjcGF0aCkpWzld
OwoJCWlmICgkcnNyY3RpbWUpIHsKCQkgICAgaWYgKCEgJHRpbWUgfHwgJHJzcmN0aW1lICE9
ICR0aW1lKSB7CgkJCWZ1dGlsOjppbnN0YWxsKCRyc3JjcGF0aCwgJHNlbGYpOwoJCSAgICB9
CgkJICAgIHJldHVybiAkc2VsZi0+e3NvdXJjZV9leGlzdHN9ID0gMTsKCQl9CgkgICAgfQoJ
fQoJIyBUaGVyZSB3YXMgbm8gc291cmNlIGZpbGUgaW4gYW55IExpbmtlZCBkaXJlY3RvcnkK
CSMgdW5kZXIgYW55IFJlcG9zaXRvcnkuICBJZiB0aGVyZSdzIG9uZSBpbiB0aGUgbG9jYWwK
CSMgYnVpbGQgZGlyZWN0b3J5LCBpdCBubyBsb25nZXIgYmVsb25ncyB0aGVyZS4KCWlmICgk
dGltZSkgewoJICAgIHVubGluaygkcGF0aCkgfHwgZGllKCIkMDogY291bGRuJ3QgdW5saW5r
ICRwYXRoICgkISlcbiIpOwoJfQoJcmV0dXJuICRzZWxmLT57c291cmNlX2V4aXN0c30gPSAn
JzsKICAgIH0gZWxzZSB7CglpZiAoJHRpbWUpIHsKCSAgICByZXR1cm4gJHNlbGYtPntzb3Vy
Y2VfZXhpc3RzfSA9IDE7Cgl9CglpZiAoQHBhcmFtOjpycGF0aCAmJiAkc2VsZiAhPSAkc2Vs
Zi0+cmZpbGUpIHsKCSAgICByZXR1cm4gJHNlbGYtPntzb3VyY2VfZXhpc3RzfSA9IDE7Cgl9
CglyZXR1cm4gJHNlbGYtPntzb3VyY2VfZXhpc3RzfSA9ICcnOwogICAgfQp9CgojIFJldHVy
biBpZiBhIHNhbWUtbmFtZWQgZGVyaXZlZCBmaWxlIGV4aXN0cyB1bmRlciBhIFJlcG9zaXRv
cnkgZGlyZWN0b3J5LgpzdWIgZGVyaXZlZF9leGlzdHMgewogICAgJF9bMF0tPntkZXJpdmVk
X2V4aXN0c30gfHwKCSgkX1swXS0+e2Rlcml2ZWRfZXhpc3RzfSA9ICgkX1swXSAhPSAkX1sw
XS0+cmZpbGUpKTsKfQoKIyBSZXR1cm4gaWYgdGhpcyBmaWxlIGlzIHNvbWV3aGVyZSB1bmRl
ciBhIFJlcG9zaXRvcnkgZGlyZWN0b3J5LgpzdWIgaXNfb25fcnBhdGggewogICAgJF9bMF0t
Pntpc19vbl9ycGF0aH07Cn0KCnN1YiBsb2NhbCB7CiAgICBteSgkc2VsZiwgJGFyZykgPSBA
XzsKICAgIGlmIChkZWZpbmVkICRhcmcpIHsKCSRzZWxmLT57J2xvY2FsJ30gPSAkYXJnOwog
ICAgfQogICAgJHNlbGYtPnsnbG9jYWwnfTsKfQoKIyBSZXR1cm4gdGhlIGVudHJ5IG5hbWUg
b2YgdGhlIHNwZWNpZmllZCBmaWxlIHdpdGggdGhlIHNwZWNpZmllZAojIHN1ZmZpeCBhcHBl
bmRlZC4gIExlYXZlIGl0IHVudG91Y2hlZCBpZiB0aGUgc3VmZml4IGlzIGFscmVhZHkgdGhl
cmUuCiMgRGlmZmVycyBmcm9tIHRoZSBhZGRzdWZmaXggZnVuY3Rpb24sIGJlbG93LCBpbiB0
aGF0IHRoaXMgc3RyaXBzCiMgdGhlIGV4aXN0aW5nIHN1ZmZpeCAoaWYgYW55KSBiZWZvcmUg
YXBwZW5kaW5nIHRoZSBkZXNpcmVkIG9uZS4Kc3ViIGJhc2Vfc3VmIHsKICAgIG15KCRlbnRy
eSkgPSAkX1swXS0+e2VudHJ5fTsKICAgIGlmICgkZW50cnkgIX4gbS8kX1sxXSQvKSB7Cgkk
ZW50cnkgPX4gcy9cLlteXC5dKiQvLzsKCSRlbnRyeSAuPSAkX1sxXTsKICAgIH0KICAgICRl
bnRyeTsKfQoKIyBSZXR1cm4gdGhlIHN1ZmZpeCBvZiB0aGUgZmlsZSwgZm9yIHVwIHRvIGEg
MyBjaGFyYWN0ZXIKIyBzdWZmaXguIEFueXRoaW5nIGxlc3MgcmV0dXJucyBub3RoaW5nLgpz
dWIgc3VmZml4IHsKICBpZiAoISAkbWFpbjo6X1dJTjMyKSB7CiAgICAkX1swXS0+e2VudHJ5
fSA9fiAvXC5bXlwuXC9dezAsM30kLzsKICAgICQmCiAgfSBlbHNlIHsKICAgIG15IEBwaWVj
ZXMgPSBzcGxpdCgvXC4vLCAkX1swXS0+e2VudHJ5fSk7CiAgICBteSAkc3VmZml4ID0gcG9w
KEBwaWVjZXMpOwogICAgcmV0dXJuICIuJHN1ZmZpeCI7CiAgfQp9CgojIENhbGxlZCBhcyBh
IHNpbXBsZSBmdW5jdGlvbiBmaWxlOjphZGRzdWZmaXgobmFtZSwgc3VmZml4KQpzdWIgYWRk
c3VmZml4IHsKICAgIG15KCRuYW1lLCAkc3VmZml4KSA9IEBfOwoKICAgIGlmICgkc3VmZml4
ICYmIHN1YnN0cigkbmFtZSwgLWxlbmd0aCgkc3VmZml4KSkgbmUgJHN1ZmZpeCkgewoJcmV0
dXJuICRuYW1lIC49ICRzdWZmaXg7CiAgICB9CiAgICAkbmFtZTsKfQoKIyBSZXR1cm4gdHJ1
ZSBpZiB0aGUgZmlsZSBpcyAob3Igd2lsbCBiZSkgYWNjZXNzaWJsZS4KIyBUaGF0IGlzLCBp
ZiB3ZSBjYW4gYnVpbGQgaXQsIG9yIGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudC4Kc3ViIGFj
Y2Vzc2libGUgewogICAgKGV4aXN0cyAkX1swXS0+e2J1aWxkZXJ9KSB8fCAoJF9bMF0tPnNv
dXJjZV9leGlzdHMpOwp9CgojIFJldHVybiB0cnVlIGlmIHRoZSBmaWxlIHNob3VsZCBiZSBp
Z25vcmVkIGZvciB0aGUgcHVycG9zZQojIG9mIGNvbXB1dGluZyBkZXBlbmRlbmN5IGluZm9y
bWF0aW9uIChzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQKIyBhcyBhIGRlcGVuZGVuY3kgYW5k
LCBmdXJ0aGVyLCBzaG91bGQgbm90IGJlIHNjYW5uZWQgZm9yCiMgZGVwZW5kZW5jaWVzKS4K
c3ViIGlnbm9yZSB7CiAgICByZXR1cm4gMCBpZiAhJHBhcmFtOjppZ25vcmU7CiAgICByZXR1
cm4gJF9bMF0tPntpZ25vcmV9IGlmIGV4aXN0cyAkX1swXS0+e2lnbm9yZX07CiAgICAkX1sw
XS0+e2lnbm9yZX0gPSAkX1swXS0+cGF0aCA9fiAvJHBhcmFtOjppZ25vcmUvbzsKfQoKIyBC
dWlsZCB0aGUgZmlsZSwgaWYgbmVjZXNzYXJ5LgpzdWIgYnVpbGQgewogICAgJF9bMF0tPntz
dGF0dXN9IHx8ICZfYnVpbGQ7Cn0KCnN1YiBfYnVpbGQgewogICAgbXkoJHRndCkgPSBAXzsK
ICAgIHBidWlsZCAkdGd0OwogICAgcmV0dXJuICR0Z3QtPnB3YWl0KCk7Cn0KCnN1YiBwYnVp
bGQgewogICAgcmV0dXJuIGlmICRfWzBdLT57c3RhdHVzfTsgIyBBbHJlYWR5IGJ1aWx0Lgog
ICAgcmV0dXJuIGlmIGV4aXN0cyAkX1swXS0+e2FzeW5jfTsgIyBBbHJlYWR5IGJ1aWxkaW5n
IGFzeW5jaHJvbm91c2x5LgogICAgbXkoJHNlbGYpID0gQF87CiAgICBwcmludCBtYWluOjpE
RVBGSUxFICRzZWxmLT5wYXRoLCAiXG4iIGlmICRwYXJhbTo6ZGVwZmlsZTsKICAgIHByaW50
KCgnICcgeCAkbGV2ZWwpLCAiQ2hlY2tpbmcgIiwgJHNlbGYtPnBhdGgsICJcbiIpIGlmICRw
YXJhbTo6ZGVwZW5kczsKICAgIGlmICghZXhpc3RzICRzZWxmLT57YnVpbGRlcn0pIHsKCSMg
V2UgZG9uJ3Qga25vdyBob3cgdG8gYnVpbGQgdGhlIGZpbGUuIFRoaXMgaXMgT0ssIGlmCgkj
IHRoZSBmaWxlIGlzIHByZXNlbnQgYXMgYSBzb3VyY2UgZmlsZSwgdW5kZXIgZWl0aGVyIHRo
ZQoJIyBsb2NhbCB0cmVlIG9yIGEgUmVwb3NpdG9yeS4KCWlmICgkc2VsZi0+c291cmNlX2V4
aXN0cykgewoJICAgICRzZWxmLT57c3RhdHVzfSA9ICdoYW5kbGVkJzsKCX0gZWxzZSB7Cgkg
ICAgbXkoJG5hbWUpID0gJHNlbGYtPnBhdGg7CgkgICAgIyBwY29uczogdGhpcyBpcyBib2d1
cyAoc2hvdWxkIGp1c3QgdXNlIGRpZSksIGJ1dCB3YW50IHRvIG1haW50YWluCgkgICAgIyBj
b21wYXRpYmlsaXR5IGZvciBub3cgd2l0aCBjb25zLTIuMi4wIHRlc3Qgc2NyaXB0cy4KCSAg
ICBwcmludCgiJDA6IGRvbid0IGtub3cgaG93IHRvIGNvbnN0cnVjdCBcIiRuYW1lXCJcbiIp
OwoJICAgIGlmICghJHBhcmFtOjprZmxhZykgewoJICAgICAgZmlsZTo6d2FpdF9mb3JfYWxs
X2pvYnMoKTsgCgkgICAgICBleGl0KDEpOwoJICAgIH0KCSAgICAkc2VsZi0+e3N0YXR1c30g
PSAnZXJyb3JzJzsKCX0KCXJldHVybjsKICAgIH0KCiAgICAjIEFuIGFzc29jaWF0ZWQgYnVp
bGQgb2JqZWN0IGV4aXN0cywgc28gd2Uga25vdyBob3cgdG8gYnVpbGQKICAgICMgdGhlIGZp
bGUuIFdlIGZpcnN0IGNvbXB1dGUgdGhlIHNpZ25hdHVyZSBvZiB0aGUgZmlsZSwgYmFzZWQK
ICAgICMgb24gaXRzIGRlcGVuZGVuZGVuY2llcywgdGhlbiBvbmx5IHJlYnVpbGQgdGhlIGZp
bGUgaWYgdGhlCiAgICAjIHNpZ25hdHVyZSBoYXMgY2hhbmdlZC4KICAgIG15KCRidWlsZGVy
KSA9ICRzZWxmLT57YnVpbGRlcn07CiAgICAkbGV2ZWwgKz0gMjsKCiAgICBteShAZGVwcykg
PSAoQHskc2VsZi0+e2RlcH19LCBAeyRzZWxmLT57c291cmNlc319KTsKICAgIG15KCRyZGVw
cykgPSBcQGRlcHM7CgogICAgaWYgKCRwYXJhbTo6cmFuZG9tKSB7CgkjIElmIHJlcXVlc3Rl
ZCwgYnVpbGQgaW4gYSByYW5kb20gb3JkZXIsIGluc3RlYWQgb2YgdGhlCgkjIG9yZGVyIHRo
YXQgdGhlIGRlcGVuZGVuY2llcyB3ZXJlIGxpc3RlZC4KCW15KCVyZGVwcyk7CgltYXAgeyAk
cmRlcHN7JF8sJyonIHggaW50KHJhbmQgMTApfSA9ICRfIH0gQGRlcHM7CgkkcmRlcHMgPSBb
dmFsdWVzKCVyZGVwcyldOwogICAgfQoKICAgICRzZWxmLT57c3RhdHVzfSA9ICcnOwoKICAg
IG15ICRkZXA7CiAgICBteSAkc2lnOwogICAgewoJIyBTdGFydCBkZXBlbmRlbmN5IGJ1aWxk
cyBhc3luY2hyb25vdXNseSAobWF5YmUpLgoJZm9yICRkZXAgKEAkcmRlcHMpIHsKCSAgICBw
YnVpbGQgJGRlcDsKCX0KCSMgVGhlbiB3YWl0IGZvciB0aGVtLgoJZm9yICRkZXAgKEAkcmRl
cHMpIHsKCSAgICBpZiAoKHB3YWl0ICRkZXApIGVxICdlcnJvcnMnKSB7CgkJJHNlbGYtPntz
dGF0dXN9ID0gJ2Vycm9ycyc7CgkgICAgfQoJfQogICAgfQoKICAgICMgSWYgYW55IGRlcGVu
ZGVudHMgaGFkIGVycm9ycywgdGhlbiB3ZSBhYm9ydC4KICAgIGlmICgkc2VsZi0+e3N0YXR1
c30gZXEgJ2Vycm9ycycpIHsKCSRsZXZlbCAtPSAyOwoJcmV0dXJuOwogICAgfQoKICAgICMg
Q29tcHV0ZSB0aGUgZmluYWwgc2lnbmF0dXJlIG9mIHRoZSBmaWxlLCBiYXNlZCBvbgogICAg
IyB0aGUgc3RhdGljIGRlcGVuZGVuY2llcyAoaW4gb3JkZXIpLCBkeW5hbWljIGRlcGVuZGVu
Y2llcywKICAgICMgb3V0cHV0IHBhdGggbmFtZSwgYW5kIChub24tc3Vic3RpdHV0ZWQpIGJ1
aWxkIHNjcmlwdC4KICAgICRzaWcgPSBzaWctPmNvbGxlY3QobWFwKHNpZy0+c2lnbmF0dXJl
KCRfLT5yZmlsZSksIEBkZXBzKSwKCQkJJGJ1aWxkZXItPmluY2x1ZGVzKCRzZWxmKSwKCQkJ
JGJ1aWxkZXItPnNjcmlwdCk7CgogICAgIyBNYXkgaGF2ZSBnb3R0ZW4gZXJyb3JzIGR1cmlu
ZyBjb21wdXRhdGlvbiBvZiBkeW5hbWljCiAgICAjIGRlcGVuZGVuY3kgc2lnbmF0dXJlLCBh
Ym92ZS4KICAgICRsZXZlbCAtPSAyOwogICAgcmV0dXJuIGlmICRzZWxmLT57c3RhdHVzfSBl
cSAnZXJyb3JzJzsKCiAgICBpZiAoQHBhcmFtOjpycGF0aCAmJiAkc2VsZi0+ZGVyaXZlZF9l
eGlzdHMpIHsKCSMgVGhlcmUgaXMgbm8gbG9jYWwgZmlsZSBvZiB0aGlzIG5hbWUsIGJ1dCB0
aGVyZSBpcyBvbmUKCSMgdW5kZXIgYSBSZXBvc2l0b3J5IGRpcmVjdG9yeS4KCglpZiAoJ3Np
ZyctPmN1cnJlbnQoJHNlbGYtPnJmaWxlLCAkc2lnKSkgewoJICAgICMgVGhlIFJlcG9zaXRv
cnkgY29weSBpcyBjdXJyZW50IChpdHMgc2lnbmF0dXJlIG1hdGNoZXMKCSAgICAjIG91ciBj
YWxjdWxhdGVkIHNpZ25hdHVyZSkuCgkgICAgaWYgKCRzZWxmLT5sb2NhbCkgewoJCSMgLi4u
YnV0IHRoZXkgd2FudCBhIGxvY2FsIGNvcHksIHNvIHByb3ZpZGUgaXQuCgkJbWFpbjo6c2hv
d2NvbSgiTG9jYWwgY29weSBvZiAke1wkc2VsZi0+cGF0aH0gZnJvbSAiIC4KCQkJICAgICAg
IiR7XCRzZWxmLT5ycGF0aH0iKTsKCQlmdXRpbDo6aW5zdGFsbCgkc2VsZi0+cnBhdGgsICRz
ZWxmKTsKCQknc2lnJy0+c2V0KCRzZWxmLCAkc2lnKTsKCSAgICB9CgkgICAgJHNlbGYtPntz
dGF0dXN9ID0gJ2hhbmRsZWQnOwoJICAgIHJldHVybjsKCX0KCgkjIFRoZSBzaWduYXR1cmVz
IGRvbid0IG1hdGNoLCBpbXBsaWNpdGx5IGJlY2F1c2Ugc29tZXRoaW5nCgkjIG9uIHdoaWNo
IHdlIGRlcGVuZCBleGlzdHMgbG9jYWxseS4gIEdldCByaWQgb2YgdGhlIHJlZmVyZW5jZQoJ
IyB0byB0aGUgUmVwb3NpdG9yeSBmaWxlOyB3ZSdsbCBidWlsZCB0aGlzIChhbmQgYW55dGhp
bmcgdGhhdAoJIyBkZXBlbmRzIG9uIGl0KSBsb2NhbGx5LgoJJHNlbGYtPm5vX3JmaWxlOwog
ICAgfQoKICAgICMgVGhlbiBjaGVjayBmb3IgY3VycmVuY3kuCiAgICBpZiAoISAnc2lnJy0+
Y3VycmVudCgkc2VsZiwgJHNpZykpIHsKCSMgV2UgaGF2ZSB0byBidWlsZC9kZXJpdmUgdGhl
IGZpbGUuCglwcmludCgoJyAnIHggJGxldmVsKSwgIlJlYnVpbGRpbmcgIiwgJHNlbGYtPnBh
dGgsICI6IG91dCBvZiBkYXRlLlxuIikKCQlpZiAkcGFyYW06OmRlcGVuZHM7CgkjIEZpcnN0
IGNoZWNrIHRvIHNlZSBpZiB0aGUgYnVpbHQgZmlsZSBpcyBjYWNoZWQuCglpZiAoJGJ1aWxk
ZXItPmNhY2hpbigkc2VsZiwgJHNpZykpIHsKCSAgICAnc2lnJy0+c2V0KCRzZWxmLCAkc2ln
KTsKCSAgICAkc2VsZi0+e3N0YXR1c30gPSAnYnVpbHQnOwoJfSBlbHNlIHsKCSAgICAjIFNx
dWlycmVsIHRoZSBzaWduYXR1cmUgYXdheSBmb3Igd2hlbiB0aGUgdGFyZ2V0IGNvbXBsZXRl
cy4KCSAgICAkc2VsZi0+e3NpZ259ID0gJHNpZzsKCSAgICBpZiAoJGJ1aWxkZXItPmFjdGlv
bigkc2VsZikpIHsKCQkjIElmIHRoZSBhY3Rpb24gaXMgYnVpbGRpbmcgdGhlIHRhcmdldCBh
c3luY2hyb25vdXNseSAKCQkjIHRoZW4gZG9uJ3Qgc2V0IHRoZSBzaWduYXR1cmUvc3RhdHVz
L2NhY2hlLCB5ZXQuCgkJaWYgKCFleGlzdHMgJHNlbGYtPnthc3luY30pIHsKCQkgICAgJGJ1
aWxkZXItPmNhY2hvdXQoJHNlbGYsICRzaWcpOwoJCSAgICAnc2lnJy0+c2V0KCRzZWxmLCAk
c2lnKTsKCQkgICAgJHNlbGYtPntzdGF0dXN9ID0gJ2J1aWx0JzsKCQkgICAgZGVsZXRlICRz
ZWxmLT57c2lnbn07CgkJfQoJICAgIH0gZWxzZSB7CgkJZGllKCIkMDogZXJyb3JzIGNvbnN0
cnVjdGluZyAke1wkc2VsZi0+cGF0aH1cbiIpCgkJICAgIHVubGVzcyAkcGFyYW06OmtmbGFn
OwoJCSRzZWxmLT57c3RhdHVzfSA9ICdlcnJvcnMnOwoJICAgIH0KCX0KICAgIH0gZWxzZSB7
CgkjIFB1c2ggdGhpcyBvdXQgdG8gdGhlIGNhY2hlIGlmIHdlJ3ZlIGJlZW4gYXNrZWQgdG8g
KC1DIG9wdGlvbikuCgkjIERvbid0IG5vcm1hbGx5IGRvIHRoaXMgYmVjYXVzZSBpdCBzbG93
cyB1cyBkb3duLgoJIyBJbiBhIGZ1bGx5IGJ1aWx0IHN5c3RlbSwgbm8gYWNjZXNzZXMgdG8g
dGhlIGNhY2hlIGRpcmVjdG9yeQoJIyBhcmUgcmVxdWlyZWQgdG8gY2hlY2sgYW55IGZpbGVz
LiBUaGlzIGlzIGEgd2luIGlmIGNhY2hlIGlzCgkjIGhlYXZpbHkgc2hhcmVkLiBFbmFibGlu
ZyB0aGlzIG9wdGlvbiBwdXRzIHRoZSBkaXJlY3RvcnkgaW4gdGhlCgkjIGxvb3AuIFVzZWZ1
bCBvbmx5IHdoZW4geW91IHdpc2ggdG8gcmVjcmVhdGUgYSBjYWNoZSBmcm9tIGEgYnVpbGQu
CglpZiAoJHBhcmFtOjpjYWNoZXN5bmMpIHsKCSAgICAkYnVpbGRlci0+Y2FjaG91dCgkc2Vs
ZiwgJHNpZyk7CgkgICAgJ3NpZyctPnNldCgkc2VsZiwgJHNpZyk7Cgl9Cgkkc2VsZi0+e3N0
YXR1c30gPSAnaGFuZGxlZCc7CiAgICB9Cn0KCiMgQ3JlYXRlIGEgbmV3IGpvYiBieSBmb3Jr
aW5nIHRoaXMgcHJvY2Vzcy4gQXNzdW1lcyB0aGF0IGEgc2xvdCBpcwojIGF2YWlsYWJsZSAo
aS5lLiB3YWl0X2Zvcl9tYXhfam9icyBoYXMgYmVlbiBjYWxsZWQpLgojIFBhcmFtZXRlcnM6
IFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUgYW5kIHdoZXRoZXIgb3Igbm90IGl0IGlzIHRoZQoj
IGZpbmFsIHN0YWdlIG9mIGEgY29tbWFuZCBzZXF1ZW5jZSBmb3IgdGhlIHNhbWUgdGFyZ2V0
LiBUaGUgbGF0dGVyCiMgaW5mbyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5v
dCB0byB3cml0ZSB0aGUgc2lnbmF0dXJlCiMgb2YgdGhlIGZpbGUgd2hlbiBpdCBjb21wbGV0
ZXMgYXN5bmNocm9ub3VzbHkuCnN1YiBjcmVhdGVfam9iIHsKICAgIG15KCRzZWxmLCAkY29t
LCAkZmluYWwpID0gQF87CiAgICBteSgkcGlkKSA9IGZvcmsoKTsKICAgIGRpZSgiJDA6IHVu
YWJsZSB0byBmb3JrIGNoaWxkIHByb2Nlc3MgKCQhKVxuIikgaWYgIWRlZmluZWQgJHBpZDsK
ICAgIGlmICghJHBpZCkgewoJIyBUaGlzIGlzIHRoZSBjaGlsZC4KCWV4ZWMoJGNvbSk7Cgkk
Y29tID1+IHMvXHMuKi8vOwoJZGllIHFxKCQwOiBmYWlsZWQgdG8gZXhlY3V0ZSAiJGNvbSIg
KCQhKS4gKQoJICAgIC4gcXEoSXMgdGhpcyBhbiBleGVjdXRhYmxlIG9uIHBhdGggIiRFTlZ7
UEFUSH0iP1xuKTsKICAgIH0KICAgICRuam9icysrOwogICAgJHNlbGYtPnthc3luY30gPSBb
JGZpbmFsLCAkY29tXTsKICAgICRhc3luY190YXJnZXRzeyRwaWR9ID0gJHNlbGY7Cn0KCiMg
V2FpdCBmb3IgYSB0YXJnZXQgdGhhdCBtaWdodCBiZSBiZWluZyBidWlsdCBhc3luY2hyb25v
dXNseSB0byBiZSBidWlsdC4Kc3ViIHB3YWl0IHsKICAgIHJldHVybiAkX1swXS0+e3N0YXR1
c30gdW5sZXNzIGV4aXN0cyAkX1swXS0+e2FzeW5jfTsKICAgIG15KCRzZWxmKSA9IEBfOwog
ICAgIyB3YWl0IGZvciBhIHJhbmRvbSBjaGlsZCB0byBjb21wbGV0ZS4KICAgICMgV2hlbiB3
ZSBnZXQgdGhlIG9uZSB3ZSdyZSB3YWl0aW5nIGZvciwgdGhlbiByZXR1cm4uCiAgICBwcmlu
dCAiV2FpdCBmb3IgIiwgJHNlbGYtPnBhdGgsICJcbiIKCWlmIG1haW46OlBDT05TX0RFQlVH
ICYmCgkgIGV4aXN0cyAkc2VsZi0+e2FzeW5jfSAmJiAkc2VsZi0+e2FzeW5jfS0+WzBdID09
IDE7CiAgICBkbyB7Cgl3YWl0X2Zvcl9jaGlsZCgpOwogICAgfSB3aGlsZSAoZXhpc3RzICRz
ZWxmLT57YXN5bmN9KTsKICAgICRzZWxmLT57c3RhdHVzfQp9CgojIFdhaXQgZm9yIGFuIGF2
YWlsYWJsZSBqb2IuCnN1YiB3YWl0X2Zvcl9tYXhfam9icyB7CiAgICB3aGlsZSAoJG5qb2Jz
ID49ICRwYXJhbTo6bWF4X2pvYnMpIHsKCXdhaXRfZm9yX2NoaWxkKCk7CiAgICB9Cn0KCiMg
V2FpdCBmb3IgYWxsIGFzeW5jaHJvbm91c2x5IHNwYXduZWQgam9icyB0byBjb21wbGV0ZS4K
IyBEbyBub3QgdXNlICRuam9icyBmb3IgdGhpczogJG5qb2JzIG1heSBiZSBpbmNvcnJlY3Qg
YWZ0ZXIgYW4KIyBpbnRlcnJ1cHQuIEp1c3QgbG9vcCB1bnRpbCBubyBtb3JlIGNoaWxkcmVu
LgpzdWIgd2FpdF9mb3JfYWxsX2pvYnMgewogICAgd2hpbGUgKHdhaXRfZm9yX2NoaWxkKDEp
KSB7IH0KfQoKIyBXYWl0cyBmb3IgYSBjaGlsZCBwcm9jZXNzIChhbnkgY2hpbGQpIHRvIGNv
bXBsZXRlLiBVcGRhdGVzIHRoZSBzdGF0dXMKIyBpbiB0aGUgYXNzb2NpYXRlZCB0YXJnZXQg
ZmlsZSBmb3IgdGhhdCBwcm9jZXNzLgojIFJldHVybnMgdHJ1ZSBpZiBhIGNoaWxkIHdhcyB3
YWl0ZWQgZm9yIChvciBkaWVzKS4Kc3ViIHdhaXRfZm9yX2NoaWxkIHsKICAgIG15KCRkb250
ZGllKSA9IEBfOyAjIGRvbid0IGRpZSBpZiB0aGlzIGlzIHNldC4KICAgIG15KCRwaWQpID0g
d2FpdCgpOwogICAgaWYoICRwaWQgPCAxICkgewoJZGllICJ3YWl0IHJldHVybmVkIGludmFs
aWQgcGlkICRwaWQuIiB1bmxlc3MgJGRvbnRkaWU7CglyZXR1cm4gdW5kZWY7CiAgICB9CiAg
ICAkbmpvYnMtLTsKICAgIG15ICR0Z3QgPSAkYXN5bmNfdGFyZ2V0c3skcGlkfTsKICAgIGRl
bGV0ZSAkYXN5bmNfdGFyZ2V0c3skcGlkfTsKCiAgICAjIFJldHVybiBoZXJlIGluIGNhc2Ug
b2YgcmFjZSAoanVzdCBhZnRlciBqb2Igd2FzIGZvcmtlZCwgbWF5IG5vdCBoYXZlCiAgICAj
IHNldCBwYXJhbWV0ZXJzIGlmIGludGVycnVwdCBvY2N1cnMpCiAgICByZXR1cm4gMSB1bmxl
c3MgJHRndDsKCiAgICBteSgkZmluYWwsICRjb20pID0gQHskdGd0LT57YXN5bmN9fTsKICAg
IGRlbGV0ZSAkdGd0LT57YXN5bmN9OwoKICAgICMgRGl0dG8gZm9yIHJhY2UgY29uZGl0aW9u
LgogICAgcmV0dXJuIDEgdW5sZXNzICRjb207CgogICAgIyBFdmFsdWF0ZSBleGl0IHN0YXR1
cy4KICAgIG15KCRiMCwgJGIxICkgPSAoJD8gJiAweEZGLCAkPyA+PiA4KTsKICAgICAgIyBE
b24ndCBhY3R1YWxseSBzZWUgMDE3NyBvbiBzdG9wcGVkIHByb2Nlc3M7IGlzIHRoaXMgbmVj
ZXNzYXJ5PwogICAgICAjIG5leHQgaWYgJGIwID09IDAxNzc7ICMgcHJvY2VzcyBzdG9wcGVk
OyB3ZSBjYW4gd2FpdC4KICAgIGlmICgkYjApIHsKCW15KCRjb3JlLCAkc2lnKSA9ICgkYjAg
JiAwMjAwLCAkYjAgJiAwMTc3KTsKCW15KCRjb3JlbXNnKSA9ICRjb3JlID8gIjsgY29yZSBk
dW1wZWQiIDogIiI7CgkkY29tID1+IHMvXHMuKi8vOwoJbXkoJHBhdGgpID0gJHRndC0+cGF0
aDsKCXdhcm4gcXEoJDA6ICoqKiBbJHBhdGhdICRjb20gdGVybWluYXRlZCBieSBzaWduYWwg
JHNpZyRjb3JlbXNnXG4pOwoJJHRndC0+e3N0YXR1c30gPSAnZXJyb3JzJzsKICAgIH0KICAg
IGlmICgkYjEpIHsKCW15KCRwYXRoKSA9ICR0Z3QtPnBhdGg7Cgl3YXJuIHFxKCQwOiAqKiog
WyRwYXRoXSBFcnJvciAkYjFcbik7ICMgdHJ5aW5nIHRvIGJlIGxpa2UgbWFrZS4KCSR0Z3Qt
PntzdGF0dXN9ID0gJ2Vycm9ycyc7CiAgICB9CiAgICBpZiAoJHRndC0+e3N0YXR1c30gbmUg
J2Vycm9ycycpIHsKCWlmICgkZmluYWwpIHsKCSAgICAjIFRoaXMgaXMgdGhlIGZpbmFsIGFu
ZCBzdWNjZXNzZnVsIHBoYXNlIG9mCgkgICAgIyBhIHBvc3NpYmx5IG11bHRpLWxpbmUgY29t
bWFuZC4KCSAgICAkdGd0LT57YnVpbGRlcn0tPmNhY2hvdXQoJHRndCwgJHRndC0+e3NpZ259
KTsKCSAgICBzaWctPnNldCgkdGd0LCAkdGd0LT57c2lnbn0pOwoJICAgIGRlbGV0ZSAkdGd0
LT57c2lnbn07CgkgICAgJHRndC0+e3N0YXR1c30gPSAnYnVpbHQnOwoJICAgIHByaW50ICJG
aW5pc2hlZCAiLCAkdGd0LT5wYXRoLCAiXG4iIGlmIG1haW46OlBDT05TX0RFQlVHOwoJfQog
ICAgfSBlbHNlIHsKCXdhcm4oIiQwOiBlcnJvcnMgY29uc3RydWN0aW5nICR7XCR0Z3QtPnBh
dGh9XG4iKTsKCWV4aXQgMSB1bmxlc3MgJGRvbnRkaWUgfHwgJHBhcmFtOjprZmxhZzsKICAg
IH0KICAgIHJldHVybiAxOwp9CgojIEJpbmQgYW4gYWN0aW9uIHRvIGEgZmlsZSwgd2l0aCB0
aGUgc3BlY2lmaWVkIHNvdXJjZXMuIE5vIHJldHVybiB2YWx1ZS4Kc3ViIGJpbmQgewogICAg
bXkoJHNlbGYsICRidWlsZGVyLCBAc291cmNlcykgPSBAXzsKICAgIGlmICgkc2VsZi0+e2J1
aWxkZXJ9ICYmICEkc2VsZi0+e2J1aWxkZXJ9LT5jb21wYXRpYmxlKCRidWlsZGVyKSkgewoJ
IyBFdmVuIGlmIG5vdCAiY29tcGF0aWJsZSIsIHdlIGNhbiBzdGlsbCBjaGVjayB0byBzZWUg
aWYgdGhlCgkjIGRlcml2YXRpb24gaXMgaWRlbnRpY2FsLiBJdCBzaG91bGQgYmUgaWRlbnRp
Y2FsIGlmIHRoZSBidWlsZGVyIGlzCgkjIHRoZSBzYW1lIGFuZCB0aGUgc291cmNlcyBhcmUg
dGhlIHNhbWUuCglpZiAoIiRzZWxmLT57YnVpbGRlcn0gQHskc2VsZi0+e3NvdXJjZXN9fSIg
bmUgIiRidWlsZGVyIEBzb3VyY2VzIikgewoJICAgICRtYWluOjplcnJvcnMrKzsKCSAgICBt
eSgkX2ZvbzEsICRzY3JpcHQxLCAkbGluZTEsICRzdWIxKSA9IEB7JHNlbGYtPmNyZWF0b3J9
OwoJICAgIG15KCRfZm9vMiwgJHNjcmlwdDIsICRsaW5lMiwgJHN1YjIpID0gc2NyaXB0Ojpj
YWxsZXJfaW5mbzsKCSAgICBteSAkZXJyID0gIlx0JHtcJHNlbGYtPnBhdGh9XG4iIC4KCQkg
ICAgICAiXHRidWlsdCAoYXQgbGVhc3QpIHR3byBkaWZmZXJlbnQgd2F5czpcbiIgLgoJCSAg
ICAgICJcdFx0JHNjcmlwdDEsIGxpbmUgJGxpbmUxOiAgJHN1YjFcbiIgLgoJCSAgICAgICJc
dFx0JHNjcmlwdDIsIGxpbmUgJGxpbmUyOiAgJHN1YjJcbiI7CgkgICAgZGllICRlcnI7Cgl9
CglyZXR1cm47CiAgICB9CiAgICBpZiAoJHBhcmFtOjp3ZmxhZykgewoJbXkoJHNjcmlwdCwg
JGxpbmUsICRzdWIpOwoJKHVuZGVmLCAkc2NyaXB0LCAkbGluZSwgJHN1YikgPSBzY3JpcHQ6
OmNhbGxlcl9pbmZvOwoJJHNlbGYtPntzY3JpcHR9ID0gJycgaWYgISBkZWZpbmVkICRzZWxm
LT57c2NyaXB0fTsKCSRzZWxmLT57c2NyaXB0fSAuPSAiOyAiIGlmICRzZWxmLT57c2NyaXB0
fTsKCSRzZWxmLT57c2NyaXB0fSAuPSBxcSgkc3ViIGluICIkc2NyaXB0IiwgbGluZSAkbGlu
ZSk7CiAgICB9CiAgICAkc2VsZi0+e2J1aWxkZXJ9ID0gJGJ1aWxkZXI7CiAgICBwdXNoKEB7
JHNlbGYtPntzb3VyY2VzfX0sIEBzb3VyY2VzKTsKICAgIEB7JHNlbGYtPntkZXB9fSA9ICgp
IGlmICEgZGVmaW5lZCAkc2VsZi0+e2RlcH07CiAgICAkc2VsZi0+e2NvbnNjcmlwdH0gPSAk
cHJpdjo6c2VsZi0+e3NjcmlwdH07Cn0KCnN1YiBpc191bmRlciB7CiAgICAkX1swXS0+e2Rp
cn0tPmlzX3VuZGVyKCRfWzFdKTsKfQoKc3ViIHJlbHBhdGggewogICAgbXkgJGRpcnBhdGgg
PSAkX1swXS0+cmVscGF0aCgkX1sxXS0+e2Rpcn0pOwogICAgaWYgKCEgJGRpcnBhdGgpIHsK
CXJldHVybiAkX1sxXS0+e2VudHJ5fTsKICAgIH0gZWxzZSB7CglGaWxlOjpTcGVjLT5jYXRm
aWxlKCRkaXJwYXRoLCAkX1sxXS0+e2VudHJ5fSk7CiAgICB9Cn0KDAojIEdlbmVyaWMgZW50
cnkgKGZpbGUgb3IgZGlyZWN0b3J5KSBoYW5kbGluZy4KIyBUaGlzIGlzIGFuIGVtcHR5IHN1
YmNsYXNzIGZvciBub2RlcyB0aGF0IGhhdmVuJ3QKIyBxdWl0ZSBkZWNpZGVkIHdoZXRoZXIg
dGhleSdyZSBmaWxlcyBvciBkaXJzLgojIFVzZSBmaWxlIG1ldGhvZHMgdW50aWwgc29tZW9u
ZSBibGVzc2VzIHRoZW0gb25lIHdheSBvciB0aGUgb3RoZXIuCnBhY2thZ2UgZW50cnk7Cgp1
c2UgdmFycyBxdyggQElTQSApOwoKQkVHSU4geyBASVNBID0gcXcoZmlsZSkgfQoMCiMgRmls
ZSB1dGlsaXRpZXMKcGFja2FnZSBmdXRpbDsKCiMgSW5zdGFsbCBvbmUgZmlsZSBhcyBhbm90
aGVyLgojIExpbmtzIHRoZW0gaWYgcG9zc2libGUgKGhhcmQgbGluayksIG90aGVyd2lzZSBj
b3BpZXMuCiMgRG9uJ3QgYXNrIHdoeSwgYnV0IHRoZSBzb3VyY2UgaXMgYSBwYXRoLCB0aGUg
dGd0IGlzIGEgZmlsZSBvYmouCnN1YiBpbnN0YWxsIHsKICAgIG15KCRzcCwgJHRndCkgPSBA
XzsKICAgIG15KCR0cCkgPSAkdGd0LT5wYXRoOwogICAgcmV0dXJuIDEgaWYgJHRwIGVxICRz
cDsKICAgIHJldHVybiAxIGlmIGV2YWwgeyBsaW5rKCRzcCwgJHRwKSB9OwogICAgdW5saW5r
KCR0cCk7CiAgICBpZiAoISBmdXRpbDo6bWtkaXIoJHRndC0+e2Rpcn0pKSB7CglyZXR1cm4g
dW5kZWY7CiAgICB9CiAgICByZXR1cm4gMSBpZiBldmFsIHsgbGluaygkc3AsICR0cCkgfTsK
ICAgIGZ1dGlsOjpjb3B5KCRzcCwgJHRwKTsKfQoKIyBDb3B5IG9uZSBmaWxlIHRvIGFub3Ro
ZXIuIEFyZ3VtZW50cyBhcmUgYWN0dWFsIGZpbGUgbmFtZXMuCiMgUmV0dXJucyB1bmRlZiBv
biBmYWlsdXJlLiBQcmVzZXJ2ZXMgbXRpbWUgYW5kIG1vZGUuCnN1YiBjb3B5IHsKICAgIG15
ICgkc3AsICR0cCkgPSBAXzsKICAgIG15ICgkbW9kZSwgJGxlbmd0aCwgJGF0aW1lLCAkbXRp
bWUpID0gKHN0YXQoJHNwKSlbMiw3LDgsOV07CgogICAgIyBVc2UgUGVybCBzdGFuZGFyZCBs
aWJyYXJ5IG1vZHVsZSBmb3IgZmlsZSBjb3B5aW5nLCB3aGljaCBoYW5kbGVzCiAgICAjIGJp
bmFyeSBjb3BpZXMuIDxzY2h3YXJ6ZUBpc2EuZGU+IDE5OTgtMDYtMTgKICAgIGlmICghIEZp
bGU6OkNvcHk6OmNvcHkoJHNwLCAkdHApKSB7Cgl3YXJuIHFxKCQwOiBjYW5cJ3QgaW5zdGFs
bCAiJHNwIiB0byAiJHRwIiAoJCEpXG4pOyAjJwoJcmV0dXJuIHVuZGVmOwogICAgfQogICAg
IyBUaGUgZmlsZSBoYXMgYmVlbiBjcmVhdGVkLCBzbyB0cnkgYm90aCB0aGUgY2htb2QgYW5k
IHV0aW1lLAogICAgIyBmaXJzdCBtYWtpbmcgc3VyZSB0aGUgY29weSBpcyB3cml0YWJsZSAo
YmVjYXVzZSBwZXJtaXNzaW9ucwogICAgIyBhZmZlY3QgdGhlIGFiaWxpdHkgdG8gbW9kaWZ5
IGZpbGUgdGltZXMgb24gc29tZSBvcGVyYXRpbmcKICAgICMgc3lzdGVtcyksIGFuZCB0aGVu
IGNoYW5naW5nIHBlcm1pc3Npb25zIGJhY2sgaWYgbmVjZXNzYXJ5LgogICAgbXkgJHJldCA9
IDE7CiAgICBteSAkd21vZGUgPSAkbW9kZSB8IDA3MDA7CiAgICBpZiAoISBjaG1vZCAkd21v
ZGUsICR0cCkgewoJd2FybiBxcSgkMDogY2FuXCd0IHNldCBtb2RlICR3bW9kZSBvbiBmaWxl
ICIkdHAiICgkISlcbik7ICMnCgkkcmV0ID0gdW5kZWY7CiAgICB9CiAgICBpZiAoISB1dGlt
ZSAkYXRpbWUsICRtdGltZSwgJHRwKSB7Cgl3YXJuIHFxKCQwOiBjYW5cJ3Qgc2V0IG1vZGlm
aWNhdGlvbiB0aW1lIGZvciBmaWxlICIkdHAiICgkISlcbik7ICMnCgkkcmV0ID0gdW5kZWY7
CiAgICB9CiAgICBpZiAoJG1vZGUgIT0gICR3bW9kZSAmJiAhIGNobW9kICRtb2RlLCAkdHAp
IHsKCXdhcm4gcXEoJDA6IGNhblwndCBzZXQgbW9kZSAkbW9kZSBvbiBmaWxlICIkdHAiICgk
ISlcbik7ICMnCgkkcmV0ID0gdW5kZWY7CiAgICB9CiAgICByZXR1cm4gJHJldDsKfQoKIyBF
bnN1cmUgdGhhdCB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBleGlzdHMuCiMgQWJvcnRzIG9u
IGZhaWx1cmUuCnN1YiBta2RpciB7CiAgICByZXR1cm4gMSBpZiAkX1swXS0+eydleGlzdHMn
fTsKICAgIGlmICghIGZ1dGlsOjpta2RpcigkX1swXS0+e2Rpcn0pKSB7ICMgUmVjdXJzaXZl
bHkgbWFrZSBwYXJlbnQuCglyZXR1cm4gdW5kZWY7CiAgICB9CiAgICBteSgkcGF0aCkgPSAk
X1swXS0+cGF0aDsKICAgIGlmICghLWQgJHBhdGggJiYgIW1rZGlyKCRwYXRoLCAwNzc3KSkg
ewoJd2FybiBxcSgkMDogY2FuJ3QgY3JlYXRlIGRpcmVjdG9yeSAkcGF0aCAoJCEpLlxuKTsg
IycKCXJldHVybiB1bmRlZjsKICAgIH0KICAgICRfWzBdLT57J2V4aXN0cyd9ID0gMTsKfQoK
DAojIFNpZ25hdHVyZSBwYWNrYWdlLgpwYWNrYWdlIHNpZzo6aGFzaDsKCnN1YiBpbml0IHsK
ICAgIG15KCRkaXIpID0gQF87CiAgICBteSgkY29uc2lnbikgPSAkZGlyLT5wcmVmaXggLiAi
LmNvbnNpZ24iOwogICAgbXkoJGRoYXNoKSA9ICRkaXItPntjb25zaWdufSA9IHt9OwogICAg
aWYgKC1mICRjb25zaWduKSB7CglvcGVuKENPTlNJR04sICRjb25zaWduKSB8fCBkaWUoIiQw
OiBjYW4ndCBvcGVuICRjb25zaWduICgkISlcbiIpOwoJd2hpbGUoPENPTlNJR04+KSB7Cgkg
ICAgY2hvcDsKCSAgICBteSAoJGZpbGUsICRzaWcpID0gc3BsaXQoLzovLCRfKTsKCSAgICAk
ZGhhc2gtPnskZmlsZX0gPSAkc2lnOwoJfQoJY2xvc2UoQ09OU0lHTik7CiAgICB9CiAgICAk
ZGhhc2gKfQoKIyBSZWFkIHRoZSBoYXNoIGVudHJ5IGZvciBhIHBhcnRpY3VsYXIgZmlsZS4K
c3ViIGluIHsKICAgIG15KCRkaXIpID0gJF9bMF0tPntkaXJ9OwogICAgKCRkaXItPntjb25z
aWdufSB8fCBpbml0KCRkaXIpKS0+eyRfWzBdLT57ZW50cnl9fQp9CgojIFdyaXRlIHRoZSBo
YXNoIGVudHJ5IGZvciBhIHBhcnRpY3VsYXIgZmlsZS4Kc3ViIG91dCB7CiAgICBteSgkZmls
ZSwgJHNpZykgPSBAXzsKICAgIG15KCRkaXIpID0gJGZpbGUtPntkaXJ9OwogICAgKCRkaXIt
Pntjb25zaWdufSB8fCBpbml0KCRkaXIpKS0+eyRmaWxlLT57ZW50cnl9fSA9ICRzaWc7CiAg
ICAkc2lnOjpoYXNoOjpkaXJ0eXskZGlyfSA9ICRkaXI7Cn0KCiMgRmx1c2ggaGFzaCBlbnRy
aWVzLiBDYWxsZWQgYXQgZW5kIG9yIHZpYSBeQyBpbnRlcnJ1cHQuCnN1YiBmaW5hbGl6ZSB7
CiAgICBjbG9zZShDT05TSUdOKTsgIyBpbiBjYXNlIHRoaXMgY2FtZSBpbiB2aWEgXkMuCiAg
ICBteSAkZGlyOwogICAgZm9yICRkaXIgKHZhbHVlcyAlc2lnOjpoYXNoOjpkaXJ0eSkgewoJ
bXkoJGNvbnNpZ24pID0gJGRpci0+cHJlZml4IC4gIi5jb25zaWduIjsKCW15KCRjb25zdGVt
cCkgPSAkY29uc2lnbiAuICIuJCQiOwoJaWYgKCEgb3BlbihDT05TSUdOLCAiPiRjb25zdGVt
cCIpKSB7CgkgICAgZGllKCIkMDogY2FuJ3QgY3JlYXRlICRjb25zdGVtcCAoJCEpXG4iKTsK
CX0KCW15KCRlbnRyeSwgJHNpZyk7Cgl3aGlsZSAoKCRlbnRyeSwgJHNpZykgPSBlYWNoICV7
JGRpci0+e2NvbnNpZ259fSkgewoJICAgIGlmICghIHByaW50IENPTlNJR04gIiRlbnRyeTok
c2lnXG4iKSB7CgkJZGllKCIkMDogZXJyb3Igd3JpdGluZyB0byAkY29uc3RlbXAgKCQhKVxu
Iik7CgkgICAgfQoJfQoJY2xvc2UoQ09OU0lHTik7CglpZiAoISByZW5hbWUoJGNvbnN0ZW1w
LCAkY29uc2lnbikpIHsKCSAgICBpZiAoZnV0aWw6OmNvcHkoJGNvbnN0ZW1wLCAkY29uc2ln
bikpIHsKCQl1bmxpbmsoJGNvbnN0ZW1wKTsKCSAgICB9IGVsc2UgewoJCWRpZSgiJDA6IGNv
dWxkbid0IHJlbmFtZSBvciBjb3B5ICRjb25zdGVtcCB0byAkY29uc2lnbiAiIC4KCQkgICAg
IigkISlcbiIpOwoJICAgIH0KCX0KICAgIH0KfQoKDAojIERlcml2ZWQgZmlsZSBjYWNoaW5n
LgpwYWNrYWdlIGNhY2hlOwoKIyBGaW5kIGEgZmlsZSBpbiB0aGUgY2FjaGUuIFJldHVybiBu
b24tbnVsbCBpZiB0aGUgZmlsZSBpcyBpbiB0aGUgY2FjaGUuCnN1YiBpbiB7CiAgICByZXR1
cm4gdW5kZWYgdW5sZXNzICRwYXJhbTo6Y2FjaGU7CiAgICBteSgkZmlsZSwgJHNpZykgPSBA
XzsKICAgICMgQWRkIHRoZSBwYXRoIHRvIHRoZSBzaWduYXR1cmUsIHRvIG1ha2UgaXQgdW5p
cXVlLgogICAgaWYgKCEkcGFyYW06Om1peHRhcmdldHMpIHsKICAgICAgbXkgJHRtcCA9ICRm
aWxlLT5wYXRoOwogICAgICBpZiAoJHBhcmFtOjpwYXJ0aWFsbWl4KSB7CgkkdG1wID1+IHMv
JHBhcmFtOjpwYXJ0aWFsbWl4Ly87CiAgICAgIH0KICAgICAgJHNpZyA9ICdzaWcnLT5jb2xs
ZWN0KCRzaWcsICR0bXApOwogICAgfQogICAgbXkoJGRpcikgPSBzdWJzdHIoJHNpZywgMCwg
MSk7CiAgICBteSgkY3ApID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkcGFyYW06OmNhY2hlLCAk
ZGlyLCAkc2lnKTsKICAgIHJldHVybiAtZiAkY3AgJiYgZnV0aWw6Omluc3RhbGwoJGNwLCAk
ZmlsZSk7Cn0KCiMgVHJ5IHRvIGZsdXNoIGEgZmlsZSB0byB0aGUgY2FjaGUsIGlmIG5vdCBh
bHJlYWR5IHRoZXJlLgojIElmIGl0IGRvZXNuJ3QgbWFrZSBpdCBvdXQsIGR1ZSB0byBhbiBl
cnJvciwgdGhlbiB0aGF0IGRvZXNuJ3QKIyByZWFsbHkgbWF0dGVyLgpzdWIgb3V0IHsKICAg
IHJldHVybiB1bmxlc3MgJHBhcmFtOjpjYWNoZTsKICAgIG15KCRmaWxlLCAkc2lnKSA9IEBf
OwoKICAgICMgQWRkIHRoZSBwYXRoIHRvIHRoZSBzaWduYXR1cmUsIHRvIG1ha2UgaXQgdW5p
cXVlLgogICAgaWYgKCEkcGFyYW06Om1peHRhcmdldHMpIHsKICAgICAgbXkgJHRtcCA9ICRm
aWxlLT5wYXRoOwogICAgICBpZiAoJHBhcmFtOjpwYXJ0aWFsbWl4KSB7CgkkdG1wID1+IHMv
JHBhcmFtOjpwYXJ0aWFsbWl4Ly87CiAgICAgIH0KICAgICAgJHNpZyA9ICdzaWcnLT5jb2xs
ZWN0KCRzaWcsICR0bXApOwogICAgfQoKICAgIG15KCRkaXIpID0gc3Vic3RyKCRzaWcsIDAs
IDEpOwogICAgbXkoJHNwKSA9ICRmaWxlLT5wYXRoOwogICAgbXkoJGNwKSA9IEZpbGU6OlNw
ZWMtPmNhdGZpbGUoJHBhcmFtOjpjYWNoZSwgJGRpciwgJHNpZyk7CiAgICBteSgkY2Rpcikg
PSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRwYXJhbTo6Y2FjaGUsICRkaXIpOwogICAgaWYgKCEg
LWQgJGNkaXIpIHsKCW1rZGlyKCRjZGlyLCAwNzc3KSB8fAoJICAgIGRpZSgiJDA6IGNhbid0
IGNyZWF0ZSBjYWNoZSBkaXJlY3RvcnkgJGNkaXIgKCQhKS5cbiIpOwogICAgfSBlbHNpZiAo
LWYgJGNwKSB7CgkjIEFscmVhZHkgY2FjaGVkOiB0cnkgdG8gdXNlIHRoYXQgaW5zdGVhZCwg
dG8gc2F2ZSBzcGFjZS4KCSMgVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSAtY3Mgb3B0aW9uIGlz
IHVzZWQgb24gYSBwcmV2aW91c2x5CgkjIHVuY2FjaGVkIGJ1aWxkLCBvciBpZiB0d28gYnVp
bGRzIG9jY3VyIHNpbXVsdGFuZW91c2x5LgoJbXkoJGxwKSA9ICIuJHNpZyI7Cgl1bmxpbmso
JGxwKTsKCXJldHVybiBpZiAhIGV2YWwgeyBsaW5rKCRjcCwgJGxwKSB9OwoJcmVuYW1lKCRs
cCwgJHNwKTsKCSMgVW5peDk4IHNheXMsICJJZiB0aGUgb2xkIGFyZ3VtZW50IGFuZCB0aGUg
bmV3IGFyZ3VtZW50IGJvdGgKCSMgW3JlZmVyXSB0byB0aGUgc2FtZSBleGlzdGluZyBmaWxl
LCB0aGUgcmVuYW1lKCkgZnVuY3Rpb24KCSMgcmV0dXJucyBzdWNjZXNzZnVsbHkgYW5kIHBl
cmZvcm1zIG5vIG90aGVyIGFjdGlvbi4iICBTbywgaWYKCSMgJGxwIGFuZCAkc3AgYXJlIGxp
bmtzIChpLmUuLCAkY3AgYW5kICRzcCBhcmUgbGlua3MpLCAkbHAgaXMKCSMgbGVmdCwgYW5k
IHdlIG11c3QgdW5saW5rIGl0IG91cnNlbHZlcy4gIElmIHRoZSByZW5hbWUgZmFpbGVkCgkj
IGZvciBhbnkgcmVhc29uLCBpdCBpcyBhbHNvIGdvb2QgZm9ybSB0byB1bmxpbmsgdGhlIHRl
bXBvcmFyeQoJIyAkbHAuICBPdGhlcndpc2UgJGxwIG5vIGxvbmdlciBleGlzdHMgYW5kLCBi
YXJyaW5nIHNvbWUgcmFjZSwKCSMgdGhlIHVubGluayBmYWlscyBzaWxlbnRseS4KCXVubGlu
aygkbHApOwoJcmV0dXJuOwogICAgfQoKICAgIHJldHVybiBpZiBldmFsIHsgbGluaygkc3As
ICRjcCkgfTsKICAgIHJldHVybiBpZiAhIC1mICRzcDsgIyBpZiBub3RoaW5nIHRvIGNhY2hl
LgogICAgaWYgKGZ1dGlsOjpjb3B5KCRzcCwgIiRjcC5uZXciKSkgewoJcmVuYW1lKCIkY3Au
bmV3IiwgJGNwKTsKICAgIH0KfQoKDAojIEdlbmVyaWMgc2lnbmF0dXJlIGhhbmRsaW5nCnBh
Y2thZ2Ugc2lnOwoKdXNlIHZhcnMgcXcoIEBJU0EgKTsKCnN1YiBzZWxlY3QgewogICAgbXko
JHBhY2thZ2UsICRzdWJjbGFzcykgPSBAXzsKICAgIEBJU0EgPSAoJHBhY2thZ2UgLiAiOjoi
IC4gJHN1YmNsYXNzKTsKfTsKCgwKIyBNRDUtYmFzZWQgc2lnbmF0dXJlIHBhY2thZ2UuCnBh
Y2thZ2Ugc2lnOjptZDU7Cgp1c2UgdmFycyBxdyggJG1kNSApOwoKQkVHSU4gewogICAgbXkg
JG1vZHVsZTsKICAgIG15IEBtZDVfbW9kdWxlcyA9IHF3KERpZ2VzdDo6TUQ1IE1ENSk7CiAg
ICBmb3IgKEBtZDVfbW9kdWxlcykgewoJZXZhbCAidXNlICRfIjsKCWlmICghICRAKSB7Cgkg
ICAgJG1vZHVsZSA9ICRfOwoJICAgIGxhc3Q7Cgl9CiAgICB9CiAgICBkaWUgIkNhbm5vdCBm
aW5kIGFueSBNRDUgbW9kdWxlIGZyb206ICBAbWQ1X21vZHVsZXMiIGlmICRAOwoKICAgICRt
ZDUgPSBuZXcgJG1vZHVsZTsKfQoKCiMgSW52YWxpZGF0ZSBhIGNhY2hlIGVudHJ5LgpzdWIg
aW52YWxpZGF0ZSB7CiAgICBkZWxldGUgJF9bMV0tPntzaWd9Cn0KCiMgRGV0ZXJtaW5lIHRo
ZSBjdXJyZW50IHNpZ25hdHVyZSBvZiBhbiBhbHJlYWR5LWV4aXN0aW5nIG9yCiMgbm9uLWV4
aXN0YW50IGZpbGUuCnN1YiBzaWduYXR1cmUgewogICAgaWYgKGRlZmluZWQgJF9bMV0tPntz
aWd9KSB7CglyZXR1cm4gJF9bMV0tPntzaWd9OwogICAgfQogICAgbXkgKCRzZWxmLCAkZmls
ZSkgPSBAXzsKICAgIG15KCRwYXRoKSA9ICRmaWxlLT5wYXRoOwogICAgbXkoJHRpbWUpID0g
KHN0YXQoJHBhdGgpKVs5XTsKICAgIGlmICgkdGltZSkgewoJbXkoJHNpZ3RpbWUpID0gc2ln
OjpoYXNoOjppbigkZmlsZSk7CglpZiAoJGZpbGUtPmlzX29uX3JwYXRoKSB7CgkgICAgaWYg
KCRzaWd0aW1lKSB7CgkJbXkgKCRodGltZSwgJGhzaWcpID0gc3BsaXQoJyAnLCRzaWd0aW1l
KTsKCQlpZiAoISAkaHNpZykgewoJCSAgICAjIFRoZXJlIHdhcyBubyBzZXBhcmF0ZSAkaHRp
bWUgcmVjb3JkZWQgaW4KCQkgICAgIyB0aGUgLmNvbnNpZ24gZmlsZSwgd2hpY2ggaW1wbGll
cyB0aGF0IHRoaXMKCQkgICAgIyBpcyBhIHNvdXJjZSBmaWxlIGluIHRoZSByZXBvc2l0b3J5
LgoJCSAgICAjIChTb3VyY2UgZmlsZSAuY29uc2lnbiBlbnRyaWVzIGRvbid0IHJlY29yZAoJ
CSAgICAjICRodGltZS4pICBKdXN0IHJldHVybiB0aGUgc2lnbmF0dXJlIHRoYXQKCQkgICAg
IyBzb21lb25lIGVsc2UgY29udmVuaWVudGx5IGNhbGN1bGF0ZWQgZm9yIHVzLgoJCSAgICBy
ZXR1cm4gJGh0aW1lOwkjIGFjdHVhbGx5IHRoZSBzaWduYXR1cmUKCQl9IGVsc2UgewoJCSAg
ICBpZiAoISAkcGFyYW06OnJlcF9zaWdfdGltZXNfb2sgfHwgJGh0aW1lID09ICR0aW1lKSB7
CgkJCXJldHVybiAkZmlsZS0+e3NpZ30gPSAkaHNpZzsKCQkgICAgfQoJCX0KCSAgICB9Cgkg
ICAgcmV0dXJuICRmaWxlLT57c2lnfSA9ICRmaWxlLT5wYXRoIC4gJHRpbWU7Cgl9CglpZiAo
JHNpZ3RpbWUpIHsKCSAgICBteSAoJGh0aW1lLCAkaHNpZykgPSBzcGxpdCgnICcsJHNpZ3Rp
bWUpOwoJICAgIGlmICgkaHRpbWUgZXEgJHRpbWUpIHsKCQlyZXR1cm4gJGZpbGUtPntzaWd9
ID0gJGhzaWc7CgkgICAgfQoJfQoJaWYgKCEgRmlsZTo6U3BlYy0+ZmlsZV9uYW1lX2lzX2Fi
c29sdXRlKCRwYXRoKSkgewoJICAgICMgQSBmaWxlIGluIHRoZSBsb2NhbCBidWlsZCBkaXJl
Y3RvcnkuIEFzc3VtZSB3ZSBjYW4gd3JpdGUKCSAgICAjIGEgc2lnbmF0dXJlIGZpbGUgZm9y
IGl0LCBhbmQgY29tcHV0ZSB0aGUgYWN0dWFsIHNvdXJjZQoJICAgICMgc2lnbmF0dXJlLiBX
ZSBjb21wdXRlIHRoZSBmaWxlIGJhc2VkIG9uIHRoZSBidWlsZCBwYXRoLAoJICAgICMgbm90
IHNvdXJjZSBwYXRoLCBvbmx5IGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgcGFyYWxsZWwKCSAg
ICAjIGJ1aWxkcyBnb2luZyBvbi4uLiBJbiBwcmluY2lwbGUsIHdlIGNvdWxkIHVzZSB0aGUg
c291cmNlCgkgICAgIyBwYXRoIGFuZCBvbmx5IGNvbXB1dGUgdGhpcyBvbmNlLgoJICAgIG15
KCRzaWcpID0gc3Jjc2lnKCRwYXRoKTsKCSAgICBzaWc6Omhhc2g6Om91dCgkZmlsZSwgJHNp
Zyk7CgkgICAgcmV0dXJuICRmaWxlLT57c2lnfSA9ICRzaWc7Cgl9IGVsc2UgewoJICAgIHJl
dHVybiAkZmlsZS0+e3NpZ30gPSAkZmlsZS0+e2VudHJ5fSAuICR0aW1lOwoJfQogICAgfQog
ICAgJGZpbGUtPntzaWd9ID0gJyc7Cn0KCiMgSXMgdGhlIHByb3ZpZGVkIHNpZ25hdHVyZSBl
cXVhbCB0byB0aGUgc2lnbmF0dXJlIG9mIHRoZSBjdXJyZW50CiMgaW5zdGFudGlhdGlvbiBv
ZiB0aGUgdGFyZ2V0IChhbmQgZG9lcyB0aGUgdGFyZ2V0IGV4aXN0KT8Kc3ViIGN1cnJlbnQg
ewogICAgbXkoJHNlbGYsICRmaWxlLCAkc2lnKSA9IEBfOwogICAgIyBVbmNvbW1lbnQgdGhp
cyB0byBkZWJ1ZyBjaGVja3MgZm9yIHNpZ25hdHVyZSBjdXJyZW5jeS4KICAgICMgPGtuaWdo
dEBiYWxkbXQuY29tPiAxOTk4LTEwLTI5CiAgICAjIG15ICRmc2lnID0gJHNlbGYtPnNpZ25h
dHVyZSgkZmlsZSk7CiAgICAjIHByaW50IFNURE9VVCAiXCRzZWxmLT5zaWduYXR1cmUoJHtc
JGZpbGUtPnBhdGh9KQogICAgIyAgICAnJGZzaWcnIGVxIFwkc2lnICckc2lnJ1xuIjsKICAg
ICMgcmV0dXJuICRmc2lnIGVxICRzaWc7CiAgICAkc2VsZi0+c2lnbmF0dXJlKCRmaWxlKSBl
cSAkc2lnOwp9CgojIFN0b3JlIHRoZSBzaWduYXR1cmUgZm9yIGEgZmlsZS4Kc3ViIHNldCB7
CiAgICBteSgkc2VsZiwgJGZpbGUsICRzaWcpID0gQF87CiAgICBteSgkdGltZSkgPSAoc3Rh
dCgkZmlsZS0+cGF0aCkpWzldOwogICAgc2lnOjpoYXNoOjpvdXQoJGZpbGUsICIkdGltZSAk
c2lnIik7CiAgICAkZmlsZS0+e3NpZ30gPSAkc2lnCn0KCiMgUmV0dXJuIGFuIGFnZ3JlZ2F0
ZSBzaWduYXR1cmUKc3ViIGNvbGxlY3QgewogICAgbXkoJHNlbGYsIEBzaWdzKSA9IEBfOwog
ICAgIyBUaGUgZm9sbG93aW5nIHNlcXVlbmNlIGlzIGZhc3RlciB0aGFuIGNhbGxpbmcgdGhl
IGhleCBpbnRlcmZhY2UuCiAgICAkbWQ1LT5yZXNldCgpOwogICAgJG1kNS0+YWRkKGpvaW4o
JycsICRwYXJhbTo6c2FsdCwgQHNpZ3MpKTsKCiAgICAjIFVuY29tbWVudCB0aGlzIHRvIGRl
YnVnIGRlcGVuZGVuY3kgc2lnbmF0dXJlcy4KICAgICMgPHNjaHdhcnplQGlzYS5kZT4gMTk5
OC0wNS0wOAogICAgaWYgKCRwYXJhbTo6TUQ1KSB7CiAgICAgIG15ICRidWYgPSBqb2luKCcs
ICcsICRwYXJhbTo6c2FsdCwgQHNpZ3MpOwogICAgICBwcmludCBTVERPVVQgInNpZ2J1Zj1b
JGJ1Zl1cbiI7CiAgICB9CiAgICAjIFVuY29tbWVudCB0aGlzIHRvIHByaW50IHRoZSByZXN1
bHQgb2YgZGVwZW5kZW5jeSBzaWduYXR1cmUgY2FsY3VsYXRpb24uCiAgICAjIDxrbmlnaHRA
YmFsZG10LmNvbT4gMTk5OC0xMC0xMwogICAgaWYgKCRwYXJhbTo6TUQ1KSB7CiAgICAgIG15
ICRidWYgPSB1bnBhY2soIkgqIiwgJG1kNS0+ZGlnZXN0KCkpOwogICAgICBwcmludCBTVERP
VVQgIlx0PT5bJGJ1Zl1cbiI7CiAgICAgIHJldHVybiAkYnVmOwogICAgfSBlbHNlIHsKICAg
ICAgdW5wYWNrKCJIKiIsICRtZDUtPmRpZ2VzdCgpKTsKICAgIH0KfQoKIyBEaXJlY3RseSBj
b21wdXRlIGEgZmlsZSBzaWduYXR1cmUgYXMgdGhlIE1ENSBjaGVja3N1bSBvZiB0aGUKIyBi
eXRlcyBpbiB0aGUgZmlsZS4Kc3ViIHNyY3NpZyB7CiAgICBteSgkcGF0aCkgPSBAXzsKICAg
ICRtZDUtPnJlc2V0KCk7CiAgICBvcGVuKEZJTEUsICRwYXRoKSB8fCByZXR1cm4gJyc7CiAg
ICBiaW5tb2RlKEZJTEUpOwogICAgJG1kNS0+YWRkZmlsZShcKkZJTEUpOwogICAgY2xvc2Uo
RklMRSk7CiAgICAjIFVuY29tbWVudCB0aGlzIHRvIHByaW50IHRoZSByZXN1bHQgb2YgZmls
ZSBzaWduYXR1cmUgY2FsY3VsYXRpb24uCiAgICAjIDxrbmlnaHRAYmFsZG10LmNvbT4gMTk5
OC0xMC0xMwogICAgaWYgKCRwYXJhbTo6TUQ1KSB7CiAgICAgIG15ICRidWYgPSB1bnBhY2so
IkgqIiwgJG1kNS0+ZGlnZXN0KCkpOwogICAgICBwcmludCBTVERPVVQgImZpbGU6JHBhdGg9
WyRidWZdXG4iOwogICAgICByZXR1cm4gJGJ1ZjsKICAgIH0gZWxzZSB7CiAgICAgIHVucGFj
aygiSCoiLCAkbWQ1LT5kaWdlc3QoKSk7CiAgICB9Cn0KCl9fRU5EX187Cgo9aGVhZDEgTkFN
RQoKQ29ucyAtIEEgU29mdHdhcmUgQ29uc3RydWN0aW9uIFN5c3RlbQoKPWhlYWQxIERFU0NS
SVBUSU9OCgpBIGd1aWRlIGFuZCByZWZlcmVuY2UgZm9yIHZlcnNpb24gMi4yLjAKCkNvcHly
aWdodCAoYykgMTk5Ni0yMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgoKVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkKaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KClRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCkdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgpZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQph
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3Qs
IHdyaXRlIHRvCnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSAtIFN1aXRlIDMzMCwKQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCgo9aGVh
ZDEgSW50cm9kdWN0aW9uCgpCPENvbnM+IGlzIGEgc3lzdGVtIGZvciBjb25zdHJ1Y3Rpbmcs
IHByaW1hcmlseSwgc29mdHdhcmUsIGJ1dCBpcyBxdWl0ZQpkaWZmZXJlbnQgZnJvbSBwcmV2
aW91cyBzb2Z0d2FyZSBjb25zdHJ1Y3Rpb24gc3lzdGVtcy4gQ29ucyB3YXMgZGVzaWduZWQK
ZnJvbSB0aGUgZ3JvdW5kIHVwIHRvIGRlYWwgZWFzaWx5IHdpdGggdGhlIGNvbnN0cnVjdGlv
biBvZiBzb2Z0d2FyZSBzcHJlYWQKb3ZlciBtdWx0aXBsZSBzb3VyY2UgZGlyZWN0b3JpZXMu
IENvbnMgbWFrZXMgaXQgZWFzeSB0byBjcmVhdGUgYnVpbGQgc2NyaXB0cwp0aGF0IGFyZSBz
aW1wbGUsIHVuZGVyc3RhbmRhYmxlIGFuZCBtYWludGFpbmFibGUuIENvbnMgZW5zdXJlcyB0
aGF0IGNvbXBsZXgKc29mdHdhcmUgaXMgZWFzaWx5IGFuZCBhY2N1cmF0ZWx5IHJlcHJvZHVj
aWJsZS4KCkNvbnMgdXNlcyBhIG51bWJlciBvZiB0ZWNobmlxdWVzIHRvIGFjY29tcGxpc2gg
YWxsIG9mIHRoaXMuIENvbnN0cnVjdGlvbgpzY3JpcHRzIGFyZSBqdXN0IFBlcmwgc2NyaXB0
cywgbWFraW5nIHRoZW0gYm90aCBlYXN5IHRvIGNvbXByZWhlbmQgYW5kIHZlcnkKZmxleGli
bGUuIEdsb2JhbCBzY29waW5nIG9mIHZhcmlhYmxlcyBpcyByZXBsYWNlZCB3aXRoIGFuIGlt
cG9ydC9leHBvcnQKbWVjaGFuaXNtIGZvciBzaGFyaW5nIGluZm9ybWF0aW9uIGJldHdlZW4g
c2NyaXB0cywgc2lnbmlmaWNhbnRseSBpbXByb3ZpbmcKdGhlIHJlYWRhYmlsaXR5IGFuZCBt
YWludGFpbmFiaWxpdHkgb2YgZWFjaCBzY3JpcHQuIEI8Q29uc3RydWN0aW9uCmVudmlyb25t
ZW50cz4gYXJlIGludHJvZHVjZWQ6IHRoZXNlIGFyZSBQZXJsIG9iamVjdHMgdGhhdCBjYXB0
dXJlIHRoZQppbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgY29udHJvbGxpbmcgdGhlIGJ1aWxk
IHByb2Nlc3MuIE11bHRpcGxlCmVudmlyb25tZW50cyBhcmUgdXNlZCB3aGVuIGRpZmZlcmVu
dCBzZW1hbnRpY3MgYXJlIHJlcXVpcmVkIGZvciBnZW5lcmF0aW5nCnByb2R1Y3RzIGluIHRo
ZSBidWlsZCB0cmVlLiBDb25zIGltcGxlbWVudHMgYXV0b21hdGljIGRlcGVuZGVuY3kgYW5h
bHlzaXMKYW5kIHVzZXMgdGhpcyB0byBnbG9iYWxseSBzZXF1ZW5jZSB0aGUgZW50aXJlIGJ1
aWxkLiBWYXJpYW50IGJ1aWxkcyBhcmUKZWFzaWx5IHByb2R1Y2VkIGZyb20gYSBzaW5nbGUg
c291cmNlIHRyZWUuIEludGVsbGlnZW50IGJ1aWxkIHN1YnNldHRpbmcgaXMKcG9zc2libGUs
IHdoZW4gd29ya2luZyBvbiBsb2NhbGl6ZWQgY2hhbmdlcy4gT3ZlcnJpZGVzIGNhbiBiZSBz
ZXR1cCB0bwplYXNpbHkgb3ZlcnJpZGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIHdpdGhvdXQgbW9k
aWZ5aW5nIGFueSBzY3JpcHRzLiBNRDUKY3J5cHRvZ3JhcGhpYyBCPHNpZ25hdHVyZXM+IGFy
ZSBhc3NvY2lhdGVkIHdpdGggZGVyaXZlZCBmaWxlcywgYW5kIGFyZSB1c2VkCnRvIGFjY3Vy
YXRlbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYSBnaXZlbiBmaWxlIG5lZWRzIHRvIGJlIHJlYnVp
bHQuCgpXaGlsZSBvZmZlcmluZyBhbGwgb2YgdGhlIGFib3ZlLCBhbmQgbW9yZSwgQ29ucyBy
ZW1haW5zIHNpbXBsZSBhbmQgZWFzeSB0bwp1c2UuIFRoaXMgd2lsbCwgaG9wZWZ1bGx5LCBi
ZWNvbWUgY2xlYXIgYXMgeW91IHJlYWQgdGhlIHJlbWFpbmRlciBvZiB0aGlzCmRvY3VtZW50
LgoKCj1oZWFkMSBXaHkgQ29ucz8gV2h5IG5vdCBNYWtlPwoKQ29ucyBpcyBhIEI8bWFrZT4g
cmVwbGFjZW1lbnQuIEluIHRoZSBmb2xsb3dpbmcgcGFyYWdyYXBocywgd2UgbG9vayBhdCBh
IGZldwpvZiB0aGUgdW5kZXNpcmFibGUgY2hhcmFjdGVyaXN0aWNzIG9mIG1ha2UtLWFuZCB0
eXBpY2FsIGJ1aWxkIGVudmlyb25tZW50cwpiYXNlZCBvbiBtYWtlLS10aGF0IG1vdGl2YXRl
ZCB0aGUgZGV2ZWxvcG1lbnQgb2YgQ29ucy4KCj1oZWFkMiBCdWlsZCBjb21wbGV4aXR5CgpU
cmFkaXRpb25hbCBtYWtlLWJhc2VkIHN5c3RlbXMgb2YgYW55IHNpemUgdGVuZCB0byBiZWNv
bWUgcXVpdGUgY29tcGxleC4gVGhlCm9yaWdpbmFsIG1ha2UgdXRpbGl0eSBhbmQgaXRzIGRl
cml2YXRpdmVzIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyB0ZW5kZW5jeQppbiBhIG51bWJl
ciBvZiB3YXlzLiBNYWtlIGlzIG5vdCBnb29kIGF0IGRlYWxpbmcgd2l0aCBzeXN0ZW1zIHRo
YXQgYXJlCnNwcmVhZCBvdmVyIG11bHRpcGxlIGRpcmVjdG9yaWVzLiBWYXJpb3VzIHdvcmst
YXJvdW5kcyBhcmUgdXNlZCB0byBvdmVyY29tZQp0aGlzIGRpZmZpY3VsdHk7IHRoZSB1c3Vh
bCBjaG9pY2UgaXMgZm9yIG1ha2UgdG8gaW52b2tlIGl0c2VsZiByZWN1cnNpdmVseQpmb3Ig
ZWFjaCBzdWItZGlyZWN0b3J5IG9mIGEgYnVpbGQuIFRoaXMgbGVhZHMgdG8gY29tcGxpY2F0
ZWQgY29kZSwgaW4gd2hpY2gKaXQgaXMgb2Z0ZW4gdW5jbGVhciBob3cgYSB2YXJpYWJsZSBp
cyBzZXQsIG9yIHdoYXQgZWZmZWN0IHRoZSBzZXR0aW5nIG9mIGEKdmFyaWFibGUgd2lsbCBo
YXZlIG9uIHRoZSBidWlsZCBhcyBhIHdob2xlLiBUaGUgbWFrZSBzY3JpcHRpbmcgbGFuZ3Vh
Z2UgaGFzCmdyYWR1YWxseSBiZWVuIGV4dGVuZGVkIHRvIHByb3ZpZGUgbW9yZSBwb3NzaWJp
bGl0aWVzLCBidXQgdGhlc2UgaGF2ZQpsYXJnZWx5IHNlcnZlZCB0byBjbHV0dGVyIGFuIGFs
cmVhZHkgb3ZlcmV4dGVuZGVkIGxhbmd1YWdlLiBPZnRlbiwgYnVpbGRzCmFyZSBkb25lIGlu
IG11bHRpcGxlIHBhc3NlcyBpbiBvcmRlciB0byBwcm92aWRlIGFwcHJvcHJpYXRlIHByb2R1
Y3RzIGZyb20Kb25lIGRpcmVjdG9yeSB0byBhbm90aGVyIGRpcmVjdG9yeS4gVGhpcyByZXBy
ZXNlbnRzIGEgZnVydGhlciBpbmNyZWFzZSBpbgpidWlsZCBjb21wbGV4aXR5LgoKCj1oZWFk
MiBCdWlsZCByZXByb2R1Y2liaWxpdHkKClRoZSBiYW5lIG9mIGFsbCBtYWtlcyBoYXMgYWx3
YXlzIGJlZW4gdGhlIGNvcnJlY3QgaGFuZGxpbmcgb2YKZGVwZW5kZW5jaWVzLiBNb3N0IG9m
dGVuLCBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gZG8gYSByZWFzb25hYmxlIGpvYiBvZgpkZXBl
bmRlbmNpZXMgd2l0aGluIGEgc2luZ2xlIGRpcmVjdG9yeSwgYnV0IG5vIHNlcmlvdXMgYXR0
ZW1wdCBpcyBtYWRlIHRvIGRvCnRoZSBqb2IgYmV0d2VlbiBkaXJlY3Rvcmllcy4gRXZlbiB3
aGVuIGRlcGVuZGVuY2llcyBhcmUgd29ya2luZyBjb3JyZWN0bHksCm1ha2UncyByZWxpYW5j
ZSBvbiBhIHNpbXBsZSB0aW1lIHN0YW1wIGNvbXBhcmlzb24gdG8gZGV0ZXJtaW5lIHdoZXRo
ZXIgYQpmaWxlIGlzIG91dCBvZiBkYXRlIHdpdGggcmVzcGVjdCB0byBpdHMgZGVwZW5kZW50
cyBpcyBub3QsIGluIGdlbmVyYWwsCmFkZXF1YXRlIGZvciBkZXRlcm1pbmluZyB3aGVuIGEg
ZmlsZSBzaG91bGQgYmUgcmVkZXJpdmVkLiBJZiBhbiBleHRlcm5hbApsaWJyYXJ5LCBmb3Ig
ZXhhbXBsZSwgaXMgcmVidWlsdCBhbmQgdGhlbiBgYHNuYXBwZWQnJyBpbnRvIHBsYWNlLCB0
aGUKdGltZXN0YW1wcyBvbiBpdHMgbmV3bHkgY3JlYXRlZCBmaWxlcyBtYXkgd2VsbCBiZSBl
YXJsaWVyIHRoYW4gdGhlIGxhc3QKbG9jYWwgYnVpbGQsIHNpbmNlIGl0IHdhcyBidWlsdCBi
ZWZvcmUgaXQgYmVjYW1lIHZpc2libGUuCgoKPWhlYWQyIFZhcmlhbnQgYnVpbGRzCgpNYWtl
IHByb3ZpZGVzIG9ubHkgbGltaXRlZCBmYWNpbGl0aWVzIGZvciBoYW5kbGluZyB2YXJpYW50
IGJ1aWxkcy4gV2l0aCB0aGUKcHJvbGlmZXJhdGlvbiBvZiBoYXJkd2FyZSBwbGF0Zm9ybXMg
YW5kIHRoZSBuZWVkIGZvciBkZWJ1Z2dhYmxlCnZzLiBvcHRpbWl6ZWQgY29kZSwgdGhlIGFi
aWxpdHkgdG8gZWFzaWx5IGNyZWF0ZSB0aGVzZSB2YXJpYW50cyBpcwplc3NlbnRpYWwuIE1v
cmUgaW1wb3J0YW50bHksIGlmIHZhcmlhbnRzIGFyZSBjcmVhdGVkLCBpdCBpcyBpbXBvcnRh
bnQgdG8KZWl0aGVyIGJlIGFibGUgdG8gc2VwYXJhdGUgdGhlIHZhcmlhbnRzIG9yIHRvIGJl
IGFibGUgdG8gcmVwcm9kdWNlIHRoZQpvcmlnaW5hbCBvciB2YXJpYW50IGF0IHdpbGwuIFdp
dGggbWFrZSBpdCBpcyB2ZXJ5IGRpZmZpY3VsdCB0byBzZXBhcmF0ZSB0aGUKYnVpbGRzIGlu
dG8gbXVsdGlwbGUgYnVpbGQgZGlyZWN0b3JpZXMsIHNlcGFyYXRlIGZyb20gdGhlIHNvdXJj
ZS4gQW5kIGlmCnRoaXMgdGVjaG5pcXVlIGlzbid0IHVzZWQsIGl0J3MgYWxzbyB2aXJ0dWFs
bHkgaW1wb3NzaWJsZSB0byBndWFyYW50ZWUgYXQKYW55IGdpdmVuIHRpbWUgd2hpY2ggdmFy
aWFudCBpcyBwcmVzZW50IGluIHRoZSB0cmVlLCB3aXRob3V0IHJlc29ydGluZyB0byBhCmNv
bXBsZXRlIHJlYnVpbGQuCgoKPWhlYWQyIFJlcG9zaXRvcmllcwoKTWFrZSBwcm92aWRlcyBv
bmx5IGxpbWl0ZWQgc3VwcG9ydCBmb3IgYnVpbGRpbmcgc29mdHdhcmUgZnJvbSBjb2RlIHRo
YXQKZXhpc3RzIGluIGEgY2VudHJhbCByZXBvc2l0b3J5IGRpcmVjdG9yeSBzdHJ1Y3R1cmUu
ICBUaGUgVlBBVEggZmVhdHVyZSBvZgpHTlUgbWFrZSAoYW5kIHNvbWUgb3RoZXIgbWFrZSBp
bXBsZW1lbnRhdGlvbnMpIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgdGhpcywKYnV0IGRvZXNu
J3Qgd29yayBhcyBleHBlY3RlZDogaXQgY2hhbmdlcyB0aGUgcGF0aCBvZiB0YXJnZXQgZmls
ZSB0byB0aGUKVlBBVEggbmFtZSB0b28gZWFybHkgaW4gaXRzIGFuYWx5c2lzLCBhbmQgdGhl
cmVmb3JlIHNlYXJjaGVzIGZvciBhbGwKZGVwZW5kZW5jaWVzIGluIHRoZSBWUEFUSCBkaXJl
Y3RvcnkuICBUbyBlbnN1cmUgY29ycmVjdCBkZXZlbG9wbWVudCBidWlsZHMsCml0IGlzIGlt
cG9ydGFudCB0byBiZSBhYmxlIHRvIGNyZWF0ZSBhIGZpbGUgaW4gYSBsb2NhbCBidWlsZCBk
aXJlY3RvcnkgYW5kCmhhdmUgYW55IGZpbGVzIGluIGEgY29kZSByZXBvc2l0b3J5IChhIFZQ
QVRIIGRpcmVjdG9yeSwgaW4gbWFrZSB0ZXJtcykgdGhhdApkZXBlbmQgb24gdGhlIGxvY2Fs
IGZpbGUgZ2V0IHJlYnVpbHQgcHJvcGVybHkuICBUaGlzIGlzbid0IHBvc3NpYmxlIHdpdGgK
VlBBVEgsIHdpdGhvdXQgY29kaW5nIGEgbG90IG9mIGNvbXBsZXggcmVwb3NpdG9yeSBrbm93
bGVkZ2UgZGlyZWN0bHkgaW50bwp0aGUgbWFrZWZpbGVzLgoKCj1oZWFkMSBLZWVwaW5nIGl0
IHNpbXBsZQoKQSBmZXcgb2YgdGhlIGRpZmZpY3VsdGllcyB3aXRoIG1ha2UgaGF2ZSBiZWVu
IGNpdGVkIGFib3ZlLiBJbiB0aGlzIGFuZApzdWJzZXF1ZW50IHNlY3Rpb25zLCB3ZSBzaGFs
bCBpbnRyb2R1Y2UgQ29ucyBhbmQgc2hvdyBob3cgdGhlc2UgaXNzdWVzIGFyZQphZGRyZXNz
ZWQuCgo9aGVhZDIgUGVybCBzY3JpcHRzCgpDb25zIGlzIFBlcmwtYmFzZWQuIFRoYXQgaXMs
IENvbnMgc2NyaXB0cy0tRjxDb25zY3JpcHQ+IGFuZCBGPENvbnN0cnVjdD4KZmlsZXMsIHRo
ZSBlcXVpdmFsZW50IHRvIEY8TWFrZWZpbGU+IG9yIEY8bWFrZWZpbGU+LS1hcmUgYWxsIHdy
aXR0ZW4gaW4KUGVybC4gVGhpcyBwcm92aWRlcyBhbiBpbW1lZGlhdGUgYmVuZWZpdDogdGhl
IGxhbmd1YWdlIGZvciB3cml0aW5nIHNjcmlwdHMKaXMgYSBmYW1pbGlhciBvbmUuIEV2ZW4g
aWYgeW91IGRvbid0IGhhcHBlbiB0byBiZSBhIFBlcmwgcHJvZ3JhbW1lciwgaXQKaGVscHMg
dG8ga25vdyB0aGF0IFBlcmwgaXMgYmFzaWNhbGx5IGp1c3QgYSBzaW1wbGUgZGVjbGFyYXRp
dmUgbGFuZ3VhZ2UsCndpdGggYSB3ZWxsLWRlZmluZWQgZmxvdyBvZiBjb250cm9sLCBhbmQg
ZmFtaWxpYXIgc2VtYW50aWNzLiBJdCBoYXMKdmFyaWFibGVzIHRoYXQgYmVoYXZlIGJhc2lj
YWxseSB0aGUgd2F5IHlvdSB3b3VsZCBleHBlY3QgdGhlbSB0bywKc3Vicm91dGluZXMsIGZs
b3cgb2YgY29udHJvbCwgYW5kIHNvIG9uLiBUaGVyZSBpcyBubyBzcGVjaWFsIHN5bnRheApp
bnRyb2R1Y2VkIGZvciBDb25zLiBUaGUgdXNlIG9mIFBlcmwgYXMgYSBzY3JpcHRpbmcgbGFu
Z3VhZ2Ugc2ltcGxpZmllcwp0aGUgdGFzayBvZiBleHByZXNzaW5nIHRoZSBhcHByb3ByaWF0
ZSBzb2x1dGlvbiB0byB0aGUgb2Z0ZW4gY29tcGxleApyZXF1aXJlbWVudHMgb2YgYSBidWls
ZC4KCgo9aGVhZDIgSGVsbG8sIFdvcmxkIQoKVG8gZ3JvdW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y3Vzc2lvbiwgaGVyZSdzIGhvdyB5b3UgY291bGQgYnVpbGQgdGhlIEI8SGVsbG8sCldvcmxk
IT4gQyBhcHBsaWNhdGlvbiB3aXRoIENvbnM6CgoKCiAgJGVudiA9IG5ldyBjb25zKCk7CiAg
UHJvZ3JhbSAkZW52ICdoZWxsbycsICdoZWxsby5jJzsKCklmIHlvdSBpbnN0YWxsIHRoaXMg
c2NyaXB0IGluIGEgZGlyZWN0b3J5LCBuYW1pbmcgdGhlIHNjcmlwdCBGPENvbnN0cnVjdD4s
CmFuZCBjcmVhdGUgdGhlIEY8aGVsbG8uYz4gc291cmNlIGZpbGUgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LCB0aGVuIHlvdSBjYW4KdHlwZSBDPGNvbnMgaGVsbG8+IHRvIGJ1aWxkIHRoZSBh
cHBsaWNhdGlvbjoKCgoKICAlIGNvbnMgaGVsbG8KICBjYyAtYyBoZWxsby5jIC1vIGhlbGxv
Lm8KICBjYyAtbyBoZWxsbyBoZWxsby5vCgoKPWhlYWQyIENvbnN0cnVjdGlvbiBlbnZpcm9u
bWVudHMKCkEga2V5IHNpbXBsaWZpY2F0aW9uIG9mIENvbnMgaXMgdGhlIGlkZWEgb2YgYSBC
PGNvbnN0cnVjdGlvbiBlbnZpcm9ubWVudD4uIEEKY29uc3RydWN0aW9uIGVudmlyb25tZW50
IGlzIGFuIEI8b2JqZWN0PiBjaGFyYWN0ZXJpemVkIGJ5IGEgc2V0IG9mIGtleS92YWx1ZQpw
YWlycyBhbmQgYSBzZXQgb2YgQjxtZXRob2RzLiA+SW4gb3JkZXIgdG8gdGVsbCBDb25zIGhv
dyB0byBidWlsZCBzb21ldGhpbmcsCnlvdSBpbnZva2UgdGhlIGFwcHJvcHJpYXRlIG1ldGhv
ZCB2aWEgYW4gYXBwcm9wcmlhdGUgY29uc3RydWN0aW9uCmVudmlyb25tZW50LiBDb25zaWRl
ciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CgoKCiAgJGVudiA9IG5ldyBjb25zKAoJQ0MJPT4J
J2djYycsCglMSUJTCT0+CSdsaWJ3b3JsZC5hJwogICk7CgogIFByb2dyYW0gJGVudiAnaGVs
bG8nLCAnaGVsbG8uYyc7CgpJbiB0aGlzIGNhc2UsIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBk
ZWZhdWx0IGNvbnN0cnVjdGlvbiBlbnZpcm9ubWVudCwgYXMgaXMsCndlIGhhdmUgb3ZlcnJp
ZGRlbiB0aGUgdmFsdWUgb2YgQzxDQz4gc28gdGhhdCB0aGUgR05VIEMgQ29tcGlsZXIgZXF1
aXZhbGVudAppcyB1c2VkLCBpbnN0ZWFkLiBTaW5jZSB0aGlzIHZlcnNpb24gb2YgQjxIZWxs
bywgV29ybGQhPiByZXF1aXJlcyBhIGxpYnJhcnksCkY8bGlid29ybGQuYT4sIHdlIGhhdmUg
c3BlY2lmaWVkIHRoYXQgYW55IHByb2dyYW0gbGlua2VkIGluIHRoaXMgZW52aXJvbm1lbnQK
c2hvdWxkIGJlIGxpbmtlZCB3aXRoIHRoYXQgbGlicmFyeS4gSWYgdGhlIGxpYnJhcnkgZXhp
c3RzIGFscmVhZHksIHdlbGwgYW5kCmdvb2QsIGJ1dCBpZiBub3QsIHRoZW4gd2UnbGwgYWxz
byBoYXZlIHRvIGluY2x1ZGUgdGhlIHN0YXRlbWVudDoKCgoKICBMaWJyYXJ5ICRlbnYgJ2xp
YndvcmxkJywgJ3dvcmxkLmMnOwoKTm93IGlmIHlvdSB0eXBlIEM8Y29ucyBoZWxsbz4sIHRo
ZSBsaWJyYXJ5IHdpbGwgYmUgYnVpbHQgYmVmb3JlIHRoZSBwcm9ncmFtCmlzIGxpbmtlZCwg
YW5kLCBvZiBjb3Vyc2UsIEM8Z2NjPiB3aWxsIGJlIHVzZWQgdG8gY29tcGlsZSBib3RoIG1v
ZHVsZXM6CgoKCiAgJSBjb25zIGhlbGxvCiAgZ2NjIC1jIGhlbGxvLmMgLW8gaGVsbG8ubwog
IGdjYyAtYyB3b3JsZC5jIC1vIHdvcmxkLm8KICBhciByIGxpYndvcmxkLmEgd29ybGQubwog
IGFyOiBjcmVhdGluZyBsaWJ3b3JsZC5hCiAgcmFubGliIGxpYndvcmxkLmEKICBnY2MgLW8g
aGVsbG8gaGVsbG8ubyBsaWJ3b3JsZC5hCgoKPWhlYWQyIEF1dG9tYXRpYyBhbmQgY29tcGxl
dGUgZGVwZW5kZW5jeSBhbmFseXNpcwoKV2l0aCBDb25zLCBkZXBlbmRlbmNpZXMgYXJlIGhh
bmRsZWQgYXV0b21hdGljYWxseS4gQ29udGludWluZyB0aGUgcHJldmlvdXMKZXhhbXBsZSwg
bm90ZSB0aGF0IHdoZW4gd2UgbW9kaWZ5IEY8d29ybGQuYz4sIEY8d29ybGQubz4gaXMgcmVj
b21waWxlZCwKRjxsaWJ3b3JsZC5hPiByZWNyZWF0ZWQsIGFuZCBGPGhlbGxvPiByZWxpbmtl
ZDoKCgoKICAlIHZpIHdvcmxkLmMKICAgIFtFRElUXQogICUgY29ucyBoZWxsbwogIGdjYyAt
YyB3b3JsZC5jIC1vIHdvcmxkLm8KICBhciByIGxpYndvcmxkLmEgd29ybGQubwogIGFyOiBj
cmVhdGluZyBsaWJ3b3JsZC5hCiAgcmFubGliIGxpYndvcmxkLmEKICBnY2MgLW8gaGVsbG8g
aGVsbG8ubyBsaWJ3b3JsZC5hCgpUaGlzIGlzIGEgcmVsYXRpdmVseSBzaW1wbGUgZXhhbXBs
ZTogQ29ucyBgYGtub3dzJycgRjx3b3JsZC5vPiBkZXBlbmRzIHVwb24KRjx3b3JsZC5jPiwg
YmVjYXVzZSB0aGUgZGVwZW5kZW5jeSBpcyBleHBsaWNpdGx5IHNldCB1cCBieSB0aGUgQzxM
aWJyYXJ5PgptZXRob2QuIEl0IGFsc28ga25vd3MgdGhhdCBGPGxpYndvcmxkLmE+IGRlcGVu
ZHMgdXBvbiBGPHdvcmxkLm8+IGFuZCB0aGF0CkY8aGVsbG8+IGRlcGVuZHMgdXBvbiBGPGxp
YndvcmxkLmE+LCBhbGwgZm9yIHNpbWlsYXIgcmVhc29ucy4KCk5vdyBpdCB0dXJucyBvdXQg
dGhhdCBGPGhlbGxvLmM+IGFsc28gaW5jbHVkZXMgdGhlIGludGVyZmFjZSBkZWZpbml0aW9u
CmZpbGUsIEY8d29ybGQuaD46CgoKCiAgJSBlbWFjcyB3b3JsZC5oCiAgICBbRURJVF0KICAl
IGNvbnMgaGVsbG8KICBnY2MgLWMgaGVsbG8uYyAtbyBoZWxsby5vCiAgZ2NjIC1vIGhlbGxv
IGhlbGxvLm8gbGlid29ybGQuYQoKSG93IGRvZXMgQ29ucyBrbm93IHRoYXQgRjxoZWxsby5j
PiBpbmNsdWRlcyBGPHdvcmxkLmg+LCBhbmQgdGhhdCBGPGhlbGxvLm8+Cm11c3QgdGhlcmVm
b3JlIGJlIHJlY29tcGlsZWQ/IEZvciBub3csIHN1ZmZpY2UgaXQgdG8gc2F5IHRoYXQgd2hl
bgpjb25zaWRlcmluZyB3aGV0aGVyIG9yIG5vdCBGPGhlbGxvLm8+IGlzIHVwLXRvLWRhdGUs
IENvbnMgaW52b2tlcyBhIHNjYW5uZXIKZm9yIGl0cyBkZXBlbmRlbmN5LCBGPGhlbGxvLmM+
LiBUaGlzIHNjYW5uZXIgZW51bWVyYXRlcyB0aGUgZmlsZXMgaW5jbHVkZWQKYnkgRjxoZWxs
by5jPiB0byBjb21lIHVwIHdpdGggYSBsaXN0IG9mIGZ1cnRoZXIgZGVwZW5kZW5jaWVzLCBi
ZXlvbmQgdGhvc2UKbWFkZSBleHBsaWNpdCBieSB0aGUgQ29ucyBzY3JpcHQuIFRoaXMgcHJv
Y2VzcyBpcyByZWN1cnNpdmU6IGFueSBmaWxlcwppbmNsdWRlZCBieSBpbmNsdWRlZCBmaWxl
cyB3aWxsIGFsc28gYmUgc2Nhbm5lZC4KCklzbid0IHRoaXMgZXhwZW5zaXZlPyBUaGUgYW5z
d2VyIGlzLS1pdCBkZXBlbmRzLiBJZiB5b3UgZG8gYSBmdWxsIGJ1aWxkIG9mIGEKbGFyZ2Ug
c3lzdGVtLCB0aGUgc2Nhbm5pbmcgdGltZSBpcyBpbnNpZ25pZmljYW50LiBJZiB5b3UgZG8g
YSByZWJ1aWxkIG9mIGEKbGFyZ2Ugc3lzdGVtLCB0aGVuIENvbnMgd2lsbCBzcGVuZCBhIGZh
aXIgYW1vdW50IG9mIHRpbWUgdGhpbmtpbmcgYWJvdXQgaXQKYmVmb3JlIGl0IGRlY2lkZXMg
dGhhdCBub3RoaW5nIGhhcyB0byBiZSBkb25lIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkg
bW9yZQp0aW1lIHRoYW4gbWFrZSEpLiBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgQ29ucyBtYWtl
cyBpdCB2ZXJ5IGVhc3kgdG8KaW50ZWxsaWdlbnRseSBzdWJzZXQgeW91ciBidWlsZCwgd2hl
biB5b3UgYXJlIHdvcmtpbmcgb24gbG9jYWxpemVkIGNoYW5nZXMuCgoKPWhlYWQyIEF1dG9t
YXRpYyBnbG9iYWwgYnVpbGQgc2VxdWVuY2luZwoKQmVjYXVzZSBDb25zIGRvZXMgZnVsbCBh
bmQgYWNjdXJhdGUgZGVwZW5kZW5jeSBhbmFseXNpcywgYW5kIGRvZXMgdGhpcwpnbG9iYWxs
eSwgZm9yIHRoZSBlbnRpcmUgYnVpbGQsIENvbnMgaXMgYWJsZSB0byB1c2UgdGhpcyBpbmZv
cm1hdGlvbiB0byB0YWtlCmZ1bGwgY29udHJvbCBvZiB0aGUgQjxzZXF1ZW5jaW5nPiBvZiB0
aGUgYnVpbGQuIFRoaXMgc2VxdWVuY2luZyBpcyBldmlkZW50CmluIHRoZSBhYm92ZSBleGFt
cGxlcywgYW5kIGlzIGVxdWl2YWxlbnQgdG8gd2hhdCB5b3Ugd291bGQgZXhwZWN0IGZvciBt
YWtlLApnaXZlbiBhIGZ1bGwgc2V0IG9mIGRlcGVuZGVuY2llcy4gV2l0aCBDb25zLCB0aGlz
IGV4dGVuZHMgdHJpdmlhbGx5IHRvCmxhcmdlciwgbXVsdGktZGlyZWN0b3J5IGJ1aWxkcy4g
QXMgYSByZXN1bHQsIGFsbCBvZiB0aGUgY29tcGxleGl0eSBpbnZvbHZlZAppbiBtYWtpbmcg
c3VyZSB0aGF0IGEgYnVpbGQgaXMgb3JnYW5pemVkIGNvcnJlY3RseS0taW5jbHVkaW5nIG11
bHRpLXBhc3MKaGllcmFyY2hpY2FsIGJ1aWxkcy0taXMgZWxpbWluYXRlZC4gV2UnbGwgZGlz
Y3VzcyB0aGlzIGZ1cnRoZXIgaW4gdGhlIG5leHQKc2VjdGlvbnMuCgo9aGVhZDEgQnVpbGRp
bmcgbGFyZ2UgdHJlZXMtLXN0aWxsIGp1c3QgYXMgc2ltcGxlCgoKPWhlYWQyIEEgaGllcmFy
Y2h5IG9mIGJ1aWxkIHNjcmlwdHMKCkEgbGFyZ2VyIGJ1aWxkLCBpbiBDb25zLCBpcyBvcmdh
bml6ZWQgYnkgY3JlYXRpbmcgYSBoaWVyYXJjaHkgb2YgQjxidWlsZApzY3JpcHRzPi4gQXQg
dGhlIHRvcCBvZiB0aGUgdHJlZSBpcyBhIHNjcmlwdCBjYWxsZWQgRjxDb25zdHJ1Y3Q+LiBU
aGUgcmVzdApvZiB0aGUgc2NyaXB0cywgYnkgY29udmVudGlvbiwgYXJlIGVhY2ggY2FsbGVk
IEY8Q29uc2NyaXB0Pi4gVGhlc2Ugc2NyaXB0cwphcmUgY29ubmVjdGVkIHRvZ2V0aGVyLCB2
ZXJ5IHNpbXBseSwgYnkgdGhlIEM8QnVpbGQ+LCBDPEV4cG9ydD4sIGFuZApDPEltcG9ydD4g
Y29tbWFuZHMuCgoKPWhlYWQyIFRoZSBCdWlsZCBjb21tYW5kCgpUaGUgQzxCdWlsZD4gY29t
bWFuZCB0YWtlcyBhIGxpc3Qgb2YgRjxDb25zY3JpcHQ+IGZpbGUgbmFtZXMsIGFuZCBhcnJh
bmdlcwpmb3IgdGhlbSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIEZvciBleGFtcGxl
OgoKICBCdWlsZCBxdygKCWRyaXZlcnMvZGlzcGxheS9Db25zY3JpcHQKCWRyaXZlcnMvbW91
c2UvQ29uc2NyaXB0CglwYXJzZXIvQ29uc2NyaXB0Cgl1dGlsaXRpZXMvQ29uc2NyaXB0CiAg
KTsKClRoaXMgaXMgYSBzaW1wbGUgdHdvLWxldmVsIGhpZXJhcmNoeSBvZiBidWlsZCBzY3Jp
cHRzOiBhbGwgdGhlIHN1YnNpZGlhcnkKRjxDb25zY3JpcHQ+IGZpbGVzIGFyZSBtZW50aW9u
ZWQgaW4gdGhlIHRvcC1sZXZlbCBGPENvbnN0cnVjdD4gZmlsZS4gTm90aWNlCnRoYXQgbm90
IGFsbCBkaXJlY3RvcmllcyBpbiB0aGUgdHJlZSBuZWNlc3NhcmlseSBoYXZlIGJ1aWxkIHNj
cmlwdHMKYXNzb2NpYXRlZCB3aXRoIHRoZW0uCgpUaGlzIGNvdWxkIGFsc28gYmUgd3JpdHRl
biBhcyBhIG11bHRpLWxldmVsIHNjcmlwdC4gRm9yIGV4YW1wbGUsIHRoZQpGPENvbnN0cnVj
dD4gZmlsZSBtaWdodCBjb250YWluIHRoaXMgY29tbWFuZDoKCiAgQnVpbGQgcXcoCglwYXJz
ZXIvQ29uc2NyaXB0Cglkcml2ZXJzL0NvbnNjcmlwdAoJdXRpbGl0aWVzL0NvbnNjcmlwdAog
ICk7CgphbmQgdGhlIEY8Q29uc2NyaXB0PiBmaWxlIGluIHRoZSBGPGRyaXZlcnM+IGRpcmVj
dG9yeSBtaWdodCBjb250YWluIHRoaXM6CgogIEJ1aWxkIHF3KAoJZGlzcGxheS9Db25zY3Jp
cHQKCW1vdXNlL0NvbnNjcmlwdAogICk7CgpFeHBlcmllbmNlIGhhcyBzaG93biB0aGF0IHRo
ZSBmb3JtZXIgbW9kZWwgaXMgYSBsaXR0bGUgZWFzaWVyIHRvIHVuZGVyc3RhbmQsCnNpbmNl
IHRoZSB3aG9sZSBjb25zdHJ1Y3Rpb24gdHJlZSBpcyBsYWlkIG91dCBpbiBmcm9udCBvZiB5
b3UsIGF0IHRoZQp0b3AtbGV2ZWwuIEh5YnJpZCBzY2hlbWVzIGFyZSBhbHNvIHBvc3NpYmxl
LiBBIHNlcGFyYXRlbHkgbWFpbnRhaW5lZApjb21wb25lbnQgdGhhdCBuZWVkcyB0byBiZSBp
bmNvcnBvcmF0ZWQgaW50byBhIGJ1aWxkIHRyZWUsIGZvciBleGFtcGxlLAptaWdodCBob29r
IGludG8gdGhlIGJ1aWxkIHRyZWUgaW4gb25lIHBsYWNlLCBidXQgZGVmaW5lIGl0cyBvd24g
Y29uc3RydWN0aW9uCmhpZXJhcmNoeS4KCkJ5IGRlZmF1bHQsIENvbnMgZG9lcyBub3QgY2hh
bmdlIGl0cyB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgZGlyZWN0b3J5CmNvbnRhaW5pbmcg
YSBzdWJzaWRpYXJ5IEY8Q29uc2NyaXB0PiBmaWxlIGl0IGlzIGluY2x1ZGluZy4gIFRoaXMg
YmVoYXZpb3IKY2FuIGJlIGVuYWJsZWQgZm9yIGEgYnVpbGQgYnkgc3BlY2lmeWluZywgaW4g
dGhlIHRvcC1sZXZlbCBGPENvbnN0cnVjdD4KZmlsZToKCiAgQ29uc2NyaXB0X2NoZGlyIDE7
CgpXaGVuIGVuYWJsZWQsIENvbnMgd2lsbCBjaGFuZ2UgdG8gdGhlIHN1YnNpZGlhcnkgRjxD
b25zY3JpcHQ+IGZpbGUncwpjb250YWluaW5nIGRpcmVjdG9yeSB3aGlsZSByZWFkaW5nIGlu
IHRoYXQgZmlsZSwgYW5kIHRoZW4gY2hhbmdlIGJhY2sKdG8gdGhlIHRvcC1sZXZlbCBkaXJl
Y3Rvcnkgb25jZSB0aGUgZmlsZSBoYXMgYmVlbiBwcm9jZXNzZWQuCgpJdCBpcyBleHBlY3Rl
ZCB0aGF0IHRoaXMgYmVoYXZpb3Igd2lsbCBiZWNvbWUgdGhlIGRlZmF1bHQgaW4gc29tZSBm
dXR1cmUKdmVyc2lvbiBvZiBDb25zLiAgVG8gcHJlcGFyZSBmb3IgdGhpcyB0cmFuc2l0aW9u
LCBidWlsZHMgdGhhdCBleHBlY3QKQ29ucyB0byByZW1haW4gYXQgdGhlIHRvcCBvZiB0aGUg
YnVpbGQgd2hpbGUgaXQgcmVhZHMgaW4gYSBzdWJzaWRpYXJ5CkY8Q29uc2NyaXB0PiBmaWxl
IHNob3VsZCBleHBsaWNpdGx5IGRpc2FibGUgdGhpcyBmZWF0dXJlIGFzIGZvbGxvd3M6Cgog
IENvbnNjcmlwdF9jaGRpciAwOwoKCj1oZWFkMiBSZWxhdGl2ZSwgdG9wLXJlbGF0aXZlLCBh
bmQgYWJzb2x1dGUgZmlsZSBuYW1lcwoKWW91IG1heSBoYXZlIG5vdGljZWQgdGhhdCB0aGUg
ZmlsZSBuYW1lcyBzcGVjaWZpZWQgdG8gdGhlIEJ1aWxkIGNvbW1hbmQgYXJlCnJlbGF0aXZl
IHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgc2NyaXB0IGl0IGlzIGludm9rZWQgZnJvbS4gVGhp
cyBpcyBnZW5lcmFsbHkKdHJ1ZSBmb3Igb3RoZXIgZmlsZW5hbWUgYXJndW1lbnRzIHRvIG90
aGVyIGNvbW1hbmRzLCB0b28sIGFsdGhvdWdoIHdlIG1pZ2h0CmFzIHdlbGwgbWVudGlvbiBo
ZXJlIHRoYXQgaWYgeW91IGJlZ2luIGEgZmlsZSBuYW1lIHdpdGggYSBoYXNoIG1hcmssIGBg
IycnLAp0aGVuIHRoYXQgZmlsZSBpcyBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUgdG9w
LWxldmVsIGRpcmVjdG9yeSAod2hlcmUgdGhlCkY8Q29uc3RydWN0PiBmaWxlIHJlc2lkZXMp
LiBBbmQsIG5vdCBzdXJwcmlzaW5nbHksIGlmIHlvdSBiZWdpbiBpdCB3aXRoIGBgLycnLAp0
aGVuIGl0IGlzIGNvbnNpZGVyZWQgdG8gYmUgYW4gYWJzb2x1dGUgcGF0aG5hbWUuIFRoaXMg
aXMgdHJ1ZSBldmVuIG9uCnN5c3RlbXMgd2hpY2ggdXNlIGEgYmFjayBzbGFzaCByYXRoZXIg
dGhhbiBhIGZvcndhcmQgc2xhc2ggdG8gbmFtZSBhYnNvbHV0ZQpwYXRocy4KCgo9aGVhZDIg
VXNpbmcgbW9kdWxlcyBpbiBidWlsZCBzY3JpcHRzCgpZb3UgbWF5IHB1bGwgbW9kdWxlcyBp
bnRvIGVhY2ggRjxDb25zY3JpcHQ+IGZpbGUgdXNpbmcgdGhlIG5vcm1hbCBQZXJsCkM8dXNl
PiBvciBDPHJlcXVpcmU+IHN0YXRlbWVudHM6CgogIHVzZSBFbmdsaXNoOwogIHJlcXVpcmUg
TXk6Ok1vZHVsZTsKCkVhY2ggQzx1c2U+IG9yIEM8cmVxdWlyZT4gb25seSBhZmZlY3RzIHRo
ZSBvbmUgRjxDb25zY3JpcHQ+IGZpbGUgaW4gd2hpY2gKaXQgYXBwZWFycy4gIFRvIHVzZSBh
IG1vZHVsZSBpbiBtdWx0aXBsZSBGPENvbnNjcmlwdD4gZmlsZXMsIHlvdSBtdXN0CnB1dCBh
IEM8dXNlPiBvciBDPHJlcXVpcmU+IHN0YXRlbWVudCBpbiBlYWNoIG9uZSB0aGF0IG5lZWRz
IHRoZSBtb2R1bGUuCgoKPWhlYWQyIFNjb3BlIG9mIHZhcmlhYmxlcwoKVGhlIHRvcC1sZXZl
bCBGPENvbnN0cnVjdD4gZmlsZSBhbmQgYWxsIEY8Q29uc2NyaXB0PiBmaWxlcyBiZWdpbiBs
aWZlIGluCmEgY29tbW9uLCBzZXBhcmF0ZSBQZXJsIHBhY2thZ2UuICBCPENvbnM+IGNvbnRy
b2xzIHRoZSBzeW1ib2wgdGFibGUgZm9yCnRoZSBwYWNrYWdlIHNvIHRoYXQsIHRoZSBzeW1i
b2wgdGFibGUgZm9yIGVhY2ggc2NyaXB0IGlzIGVtcHR5LCBleGNlcHQKZm9yIHRoZSBGPENv
bnN0cnVjdD4gZmlsZSwgd2hpY2ggZ2V0cyBzb21lIG9mIHRoZSBjb21tYW5kIGxpbmUgYXJn
dW1lbnRzLgpBbGwgb2YgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBzZXQgb3IgdXNlZCwgdGhl
cmVmb3JlLCBhcmUgc2V0IGJ5IHRoZQpzY3JpcHQgaXRzZWxmLS1ub3QgYnkgc29tZSBleHRl
cm5hbCBzY3JpcHQuCgpWYXJpYWJsZXMgY2FuIGJlIGV4cGxpY2l0bHkgQjxpbXBvcnRlZD4g
YnkgYSBzY3JpcHQgZnJvbSBpdHMgcGFyZW50CnNjcmlwdC4gVG8gaW1wb3J0IGEgdmFyaWFi
bGUsIGl0IG11c3QgaGF2ZSBiZWVuIEI8ZXhwb3J0ZWQ+IGJ5IHRoZSBwYXJlbnQKYW5kIGlu
aXRpYWxpemVkIChvdGhlcndpc2UgYW4gZXJyb3Igd2lsbCBvY2N1cikuCgoKPWhlYWQyIFRo
ZSBFeHBvcnQgY29tbWFuZAoKVGhlIEM8RXhwb3J0PiBjb21tYW5kIGlzIHVzZWQgYXMgaW4g
dGhlIGZvbGxvd2luZyBleGFtcGxlOgoKICAkZW52ID0gbmV3IGNvbnMoKTsKICAkSU5DTFVE
RSA9ICIjZXhwb3J0L2luY2x1ZGUiOwogICRMSUIgPSAiI2V4cG9ydC9saWIiOwogIEV4cG9y
dCBxdyggZW52IElOQ0xVREUgTElCICk7CiAgQnVpbGQgcXcoIHV0aWwvQ29uc2NyaXB0ICk7
CgpUaGUgdmFsdWVzIG9mIHRoZSBzaW1wbGUgdmFyaWFibGVzIG1lbnRpb25lZCBpbiB0aGUg
QzxFeHBvcnQ+IGxpc3Qgd2lsbCBiZQpzcXVpcnJlbGVkIGF3YXkgYnkgYW55IHN1YnNlcXVl
bnQgQzxCdWlsZD4gY29tbWFuZHMuIFRoZSBDPEV4cG9ydD4gY29tbWFuZAp3aWxsIG9ubHkg
ZXhwb3J0IFBlcmwgQjxzY2FsYXI+IHZhcmlhYmxlcywgdGhhdCBpcywgdmFyaWFibGVzIHdo
b3NlIG5hbWUKYmVnaW5zIHdpdGggQzwkPi4gT3RoZXIgdmFyaWFibGVzLCBvYmplY3RzLCBl
dGMuIGNhbiBiZSBleHBvcnRlZCBieQpyZWZlcmVuY2UtLWJ1dCBhbGwgc2NyaXB0cyB3aWxs
IHJlZmVyIHRvIHRoZSBzYW1lIG9iamVjdCwgYW5kIHRoaXMgb2JqZWN0CnNob3VsZCBiZSBj
b25zaWRlcmVkIHRvIGJlIHJlYWQtb25seSBieSB0aGUgc3Vic2lkaWFyeSBzY3JpcHRzIGFu
ZCBieSB0aGUKb3JpZ2luYWwgZXhwb3J0aW5nIHNjcmlwdC4gSXQncyBhY2NlcHRhYmxlLCBo
b3dldmVyLCB0byBhc3NpZ24gYSBuZXcgdmFsdWUKdG8gdGhlIGV4cG9ydGVkIHNjYWxhciB2
YXJpYWJsZS0tdGhhdCB3b24ndCBjaGFuZ2UgdGhlIHVuZGVybHlpbmcgdmFyaWFibGUKcmVm
ZXJlbmNlZC4gVGhpcyBzZXF1ZW5jZSwgZm9yIGV4YW1wbGUsIGlzIE9LOgoKICAkZW52ID0g
bmV3IGNvbnMoKTsKICBFeHBvcnQgcXcoIGVudiBJTkNMVURFIExJQiApOwogIEJ1aWxkIHF3
KCB1dGlsL0NvbnNjcmlwdCApOwogICRlbnYgPSBuZXcgY29ucyhDRkxBR1MgPT4gJy1PJyk7
CiAgQnVpbGQgcXcoIG90aGVyL0NvbnNjcmlwdCApOwoKSXQgZG9lc24ndCBtYXR0ZXIgd2hl
dGhlciB0aGUgdmFyaWFibGUgaXMgc2V0IGJlZm9yZSBvciBhZnRlciB0aGUgQzxFeHBvcnQ+
CmNvbW1hbmQuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhlIHZhbHVlIG9mIHRoZSB2YXJp
YWJsZSBhdCB0aGUgdGltZSB0aGUKQzxCdWlsZD4gY29tbWFuZCBpcyBleGVjdXRlZC4gVGhp
cyBpcyB3aGF0IGdldHMgc3F1aXJyZWxlZCBhd2F5LiBBbnkKc3Vic2VxdWVudCBDPEV4cG9y
dD4gY29tbWFuZHMsIGJ5IHRoZSB3YXksIGludmFsaWRhdGUgdGhlIGZpcnN0OiB5b3UgbXVz
dAptZW50aW9uIGFsbCB0aGUgdmFyaWFibGVzIHlvdSB3aXNoIHRvIGV4cG9ydCBvbiBlYWNo
IEM8RXhwb3J0PiBjb21tYW5kLgoKCj1oZWFkMiBUaGUgSW1wb3J0IGNvbW1hbmQKClZhcmlh
YmxlcyBleHBvcnRlZCBieSB0aGUgQzxFeHBvcnQ+IGNvbW1hbmQgY2FuIGJlIGltcG9ydGVk
IGludG8gc3Vic2lkaWFyeQpzY3JpcHRzIGJ5IHRoZSBDPEltcG9ydD4gY29tbWFuZC4gVGhl
IHN1YnNpZGlhcnkgc2NyaXB0IGFsd2F5cyBpbXBvcnRzCnZhcmlhYmxlcyBkaXJlY3RseSBm
cm9tIHRoZSBzdXBlcmlvciBzY3JpcHQuIENvbnNpZGVyIHRoaXMgZXhhbXBsZToKCiAgSW1w
b3J0IHF3KCBlbnYgSU5DTFVERSApOwoKVGhpcyBpcyBvbmx5IGxlZ2FsIGlmIHRoZSBwYXJl
bnQgc2NyaXB0IGV4cG9ydGVkIGJvdGggQzwkZW52PiBhbmQKQzwkSU5DTFVERT4uIEl0IGFs
c28gbXVzdCBoYXZlIGdpdmVuIGVhY2ggb2YgdGhlc2UgdmFyaWFibGVzIHZhbHVlcy4gSXQg
aXMKT0sgZm9yIHRoZSBzdWJzaWRpYXJ5IHNjcmlwdCB0byBvbmx5IGltcG9ydCBhIHN1YnNl
dCBvZiB0aGUgZXhwb3J0ZWQKdmFyaWFibGVzIChpbiB0aGlzIGV4YW1wbGUsIEM8JExJQj4s
IHdoaWNoIHdhcyBleHBvcnRlZCBieSB0aGUgcHJldmlvdXMKZXhhbXBsZSwgaXMgbm90IGlt
cG9ydGVkKS4KCkFsbCB0aGUgaW1wb3J0ZWQgdmFyaWFibGVzIGFyZSBhdXRvbWF0aWNhbGx5
IHJlLWV4cG9ydGVkLCBzbyB0aGUgc2VxdWVuY2U6CgogIEltcG9ydCBxdyAoIGVudiBJTkNM
VURFICk7CiAgQnVpbGQgcXcgKCBiZW5lYXRoLW1lL0NvbnNjcmlwdCApOwoKd2lsbCBzdXBw
bHkgYm90aCBDPCRlbnY+IGFuZCBDPCRJTkNMVURFPiB0byB0aGUgc3Vic2lkaWFyeSBmaWxl
LiBJZiBvbmx5CkM8JGVudj4gaXMgdG8gYmUgZXhwb3J0ZWQsIHRoZW4gdGhlIGZvbGxvd2lu
ZyB3aWxsIHN1ZmZpY2U6CgogIEltcG9ydCBxdyAoIGVudiBJTkNMVURFICk7CiAgRXhwb3J0
IHF3ICggZW52ICk7CiAgQnVpbGQgcXcgKCBiZW5lYXRoLW1lL0NvbnNjcmlwdCApOwoKTmVl
ZGxlc3MgdG8gc2F5LCB0aGUgdmFyaWFibGVzIG1heSBiZSBtb2RpZmllZCBsb2NhbGx5IGJl
Zm9yZSBpbnZva2luZwpDPEJ1aWxkPiBvbiB0aGUgc3Vic2lkaWFyeSBzY3JpcHQuCgoKPWhl
YWQyIEJ1aWxkIHNjcmlwdCBldmFsdWF0aW9uIG9yZGVyCgpUaGUgb25seSBjb25zdHJhaW50
IG9uIHRoZSBvcmRlcmluZyBvZiBidWlsZCBzY3JpcHRzIGlzIHRoYXQgc3VwZXJpb3IKc2Ny
aXB0cyBhcmUgZXZhbHVhdGVkIGJlZm9yZSB0aGVpciBpbmZlcmlvciBzY3JpcHRzLiBUaGUg
dG9wLWxldmVsCkY8Q29uc3RydWN0PiBmaWxlLCBmb3IgaW5zdGFuY2UsIGlzIGV2YWx1YXRl
ZCBmaXJzdCwgZm9sbG93ZWQgYnkgYW55CmluZmVyaW9yIHNjcmlwdHMuIFRoaXMgaXMgYWxs
IHlvdSByZWFsbHkgbmVlZCB0byBrbm93IGFib3V0IHRoZSBldmFsdWF0aW9uCm9yZGVyLCBz
aW5jZSBvcmRlciBpcyBnZW5lcmFsbHkgaXJyZWxldmFudC4gQ29uc2lkZXIgdGhlIGZvbGxv
d2luZyBDPEJ1aWxkPgpjb21tYW5kOgoKICBCdWlsZCBxdygKCWRyaXZlcnMvZGlzcGxheS9D
b25zY3JpcHQKCWRyaXZlcnMvbW91c2UvQ29uc2NyaXB0CglwYXJzZXIvQ29uc2NyaXB0Cgl1
dGlsaXRpZXMvQ29uc2NyaXB0CiAgKTsKCldlJ3ZlIGNob3NlbiB0byBwdXQgdGhlIHNjcmlw
dCBuYW1lcyBpbiBhbHBoYWJldGljYWwgb3JkZXIsIHNpbXBseSBiZWNhdXNlCnRoYXQncyB0
aGUgbW9zdCBjb252ZW5pZW50IGZvciBtYWludGVuYW5jZSBwdXJwb3Nlcy4gQ2hhbmdpbmcg
dGhlIG9yZGVyIHdpbGwKbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBidWlsZC4KCgo9aGVh
ZDEgQSBNb2RlbCBmb3Igc2hhcmluZyBmaWxlcwoKCj1oZWFkMiBTb21lIHNpbXBsZSBjb252
ZW50aW9ucwoKSW4gYW55IGNvbXBsZXggc29mdHdhcmUgc3lzdGVtLCBhIG1ldGhvZCBmb3Ig
c2hhcmluZyBidWlsZCBwcm9kdWN0cyBuZWVkcyB0bwpiZSBlc3RhYmxpc2hlZC4gV2UgcHJv
cG9zZSBhIHNpbXBsZSBzZXQgb2YgY29udmVudGlvbnMgd2hpY2ggYXJlIHRyaXZpYWwgdG8K
aW1wbGVtZW50IHdpdGggQ29ucywgYnV0IHZlcnkgZWZmZWN0aXZlLgoKVGhlIGJhc2ljIHJ1
bGUgaXMgdG8gcmVxdWlyZSB0aGF0IGFsbCBidWlsZCBwcm9kdWN0cyB3aGljaCBuZWVkIHRv
IGJlIHNoYXJlZApiZXR3ZWVuIGRpcmVjdG9yaWVzIGFyZSBzaGFyZWQgdmlhIGFuIGludGVy
bWVkaWF0ZSBkaXJlY3RvcnkuIFdlIGhhdmUKdHlwaWNhbGx5IGNhbGxlZCB0aGlzIEY8ZXhw
b3J0PiwgYW5kLCBpbiBhIEMgZW52aXJvbm1lbnQsIHByb3ZpZGVkCmNvbnZlbnRpb25hbCBz
dWItZGlyZWN0b3JpZXMgb2YgdGhpcyBkaXJlY3RvcnksIHN1Y2ggYXMgRjxpbmNsdWRlPiwg
RjxsaWI+LApGPGJpbj4sIGV0Yy4KClRoZXNlIGRpcmVjdG9yaWVzIGFyZSBkZWZpbmVkIGJ5
IHRoZSB0b3AtbGV2ZWwgRjxDb25zdHJ1Y3Q+IGZpbGUuIEEgc2ltcGxlCkY8Q29uc3RydWN0
PiBmaWxlIGZvciBhIEI8SGVsbG8sIFdvcmxkIT4gYXBwbGljYXRpb24sIG9yZ2FuaXplZCB1
c2luZwptdWx0aXBsZSBkaXJlY3RvcmllcywgbWlnaHQgbG9vayBsaWtlIHRoaXM6CgogICMg
Q29uc3RydWN0IGZpbGUgZm9yIEhlbGxvLCBXb3JsZCEKCiAgIyBXaGVyZSB0byBwdXQgYWxs
IG91ciBzaGFyZWQgcHJvZHVjdHMuCiAgJEVYUE9SVCA9ICcjZXhwb3J0JzsKCiAgRXhwb3J0
IHF3KCBDT05TIElOQ0xVREUgTElCIEJJTiApOwoKICAjIFN0YW5kYXJkIGRpcmVjdG9yaWVz
IGZvciBzaGFyaW5nIHByb2R1Y3RzLgogICRJTkNMVURFID0gIiRFWFBPUlQvaW5jbHVkZSI7
CiAgJExJQiA9ICIkRVhQT1JUL2xpYiI7CiAgJEJJTiA9ICIkRVhQT1JUL2JpbiI7CgogICMg
QSBzdGFuZGFyZCBjb25zdHJ1Y3Rpb24gZW52aXJvbm1lbnQuCiAgJENPTlMgPSBuZXcgY29u
cyAoCglDUFBQQVRIID0+ICRJTkNMVURFLAkjIEluY2x1ZGUgcGF0aCBmb3IgQyBDb21waWxh
dGlvbnMKCUxJQlBBVEggPT4gJExJQiwJIyBMaWJyYXJ5IHBhdGggZm9yIGxpbmtpbmcgcHJv
Z3JhbXMKCUxJQlMgPT4gJy1sd29ybGQnLAkjIExpc3Qgb2Ygc3RhbmRhcmQgbGlicmFyaWVz
CiAgKTsKCiAgQnVpbGQgcXcoCgloZWxsby9Db25zY3JpcHQKCXdvcmxkL0NvbnNjcmlwdAog
ICk7CgpUaGUgRjx3b3JsZD4gZGlyZWN0b3J5J3MgRjxDb25zY3JpcHQ+IGZpbGUgbG9va3Mg
bGlrZSB0aGlzOgoKICAjIENvbnNjcmlwdCBmaWxlIGZvciBkaXJlY3Rvcnkgd29ybGQKICBJ
bXBvcnQgcXcoIENPTlMgSU5DTFVERSBMSUIgKTsKCiAgIyBJbnN0YWxsIHRoZSBwcm9kdWN0
cyBvZiB0aGlzIGRpcmVjdG9yeQogIEluc3RhbGwgJENPTlMgJExJQiwgJ2xpYndvcmxkLmEn
OwogIEluc3RhbGwgJENPTlMgJElOQ0xVREUsICd3b3JsZC5oJzsKCiAgIyBJbnRlcm5hbCBw
cm9kdWN0cwogIExpYnJhcnkgJENPTlMgJ2xpYndvcmxkLmEnLCAnd29ybGQuYyc7CgphbmQg
dGhlIEY8aGVsbG8+IGRpcmVjdG9yeSdzIEY8Q29uc2NyaXB0PiBmaWxlIGxvb2tzIGxpa2Ug
dGhpczoKCiAgIyBDb25zY3JpcHQgZmlsZSBmb3IgZGlyZWN0b3J5IGhlbGxvCiAgSW1wb3J0
IHF3KCBDT05TIEJJTiApOwoKICAjIEV4cG9ydGVkIHByb2R1Y3RzCiAgSW5zdGFsbCAkQ09O
UyAkQklOLCAnaGVsbG8nOwoKICAjIEludGVybmFsIHByb2R1Y3RzCiAgUHJvZ3JhbSAkQ09O
UyAnaGVsbG8nLCAnaGVsbG8uYyc7CgpUbyBjb25zdHJ1Y3QgYSBCPEhlbGxvLCBXb3JsZCE+
IHByb2dyYW0gd2l0aCB0aGlzIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIGdvIHRvCnRoZSB0b3At
bGV2ZWwgZGlyZWN0b3J5LCBhbmQgaW52b2tlIEM8Y29ucz4gd2l0aCB0aGUgYXBwcm9wcmlh
dGUKYXJndW1lbnRzLiBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHdlIHRlbGwgQ29ucyB0
byBidWlsZCB0aGUgZGlyZWN0b3J5CkY8ZXhwb3J0Pi4gVG8gYnVpbGQgYSBkaXJlY3Rvcnks
IENvbnMgcmVjdXJzaXZlbHkgYnVpbGRzIGFsbCBrbm93biBwcm9kdWN0cwp3aXRoaW4gdGhh
dCBkaXJlY3RvcnkgKG9ubHkgaWYgdGhleSBuZWVkIHJlYnVpbGRpbmcsIG9mIGNvdXJzZSku
IElmIGFueSBvZgp0aG9zZSBwcm9kdWN0cyBkZXBlbmQgdXBvbiBvdGhlciBwcm9kdWN0cyBp
biBvdGhlciBkaXJlY3RvcmllcywgdGhlbiB0aG9zZQp3aWxsIGJlIGJ1aWx0LCB0b28uCgog
ICUgY29ucyBleHBvcnQKICBJbnN0YWxsIHdvcmxkL3dvcmxkLmggYXMgZXhwb3J0L2luY2x1
ZGUvd29ybGQuaAogIGNjIC1JZXhwb3J0L2luY2x1ZGUgLWMgaGVsbG8vaGVsbG8uYyAtbyBo
ZWxsby9oZWxsby5vCiAgY2MgLUlleHBvcnQvaW5jbHVkZSAtYyB3b3JsZC93b3JsZC5jIC1v
IHdvcmxkL3dvcmxkLm8KICBhciByIHdvcmxkL2xpYndvcmxkLmEgd29ybGQvd29ybGQubwog
IGFyOiBjcmVhdGluZyB3b3JsZC9saWJ3b3JsZC5hCiAgcmFubGliIHdvcmxkL2xpYndvcmxk
LmEKICBJbnN0YWxsIHdvcmxkL2xpYndvcmxkLmEgYXMgZXhwb3J0L2xpYi9saWJ3b3JsZC5h
CiAgY2MgLW8gaGVsbG8vaGVsbG8gaGVsbG8vaGVsbG8ubyAtTGV4cG9ydC9saWIgLWx3b3Js
ZAogIEluc3RhbGwgaGVsbG8vaGVsbG8gYXMgZXhwb3J0L2Jpbi9oZWxsbwoKCj1oZWFkMiBD
bGVhbiwgdW5kZXJzdGFuZGFibGUsIGxvY2F0aW9uLWluZGVwZW5kZW50IHNjcmlwdHMKCllv
dSdsbCBub3RlIHRoYXQgdGhlIHR3byBGPENvbnNjcmlwdD4gZmlsZXMgYXJlIHZlcnkgY2xl
YW4gYW5kCnRvLXRoZS1wb2ludC4gVGhleSBzaW1wbHkgc3BlY2lmeSBwcm9kdWN0cyBvZiB0
aGUgZGlyZWN0b3J5IGFuZCBob3cgdG8gYnVpbGQKdGhvc2UgcHJvZHVjdHMuIFRoZSBidWls
ZCBpbnN0cnVjdGlvbnMgYXJlIG1pbmltYWw6IHRoZXkgc3BlY2lmeSB3aGljaApjb25zdHJ1
Y3Rpb24gZW52aXJvbm1lbnQgdG8gdXNlLCB0aGUgbmFtZSBvZiB0aGUgcHJvZHVjdCwgYW5k
IHRoZSBuYW1lIG9mCnRoZSBpbnB1dHMuIE5vdGUgYWxzbyB0aGF0IHRoZSBzY3JpcHRzIGFy
ZSBsb2NhdGlvbi1pbmRlcGVuZGVudDogaWYgeW91IHdpc2gKdG8gcmVvcmdhbml6ZSB5b3Vy
IHNvdXJjZSB0cmVlLCB5b3UgYXJlIGZyZWUgdG8gZG8gc286IHlvdSBvbmx5IGhhdmUgdG8K
Y2hhbmdlIHRoZSBGPENvbnN0cnVjdD4gZmlsZSAoaW4gdGhpcyBleGFtcGxlKSwgdG8gc3Bl
Y2lmeSB0aGUgbmV3IGxvY2F0aW9ucwpvZiB0aGUgRjxDb25zY3JpcHQ+IGZpbGVzLiBUaGUg
dXNlIG9mIGFuIGV4cG9ydCB0cmVlIG1ha2VzIHRoaXMgZ29hbCBlYXN5LgoKTm90ZSwgdG9v
LCBob3cgQ29ucyB0YWtlcyBjYXJlIG9mIGxpdHRsZSBkZXRhaWxzIGZvciB5b3UuIEFsbCB0
aGUgRjxleHBvcnQ+CmRpcmVjdG9yaWVzLCBmb3IgZXhhbXBsZSwgd2VyZSBtYWRlIGF1dG9t
YXRpY2FsbHkuIEFuZCB0aGUgaW5zdGFsbGVkIGZpbGVzCndlcmUgcmVhbGx5IGhhcmQtbGlu
a2VkIGludG8gdGhlIHJlc3BlY3RpdmUgZXhwb3J0IGRpcmVjdG9yaWVzLCB0byBzYXZlCnNw
YWNlIGFuZCB0aW1lLiBUaGlzIGF0dGVudGlvbiB0byBkZXRhaWwgc2F2ZXMgY29uc2lkZXJh
YmxlIHdvcmssIGFuZCBtYWtlcwppdCBldmVuIGVhc2llciB0byBwcm9kdWNlIHNpbXBsZSwg
bWFpbnRhaW5hYmxlIHNjcmlwdHMuCgoKPWhlYWQxIFNlcGFyYXRpbmcgc291cmNlIGFuZCBi
dWlsZCB0cmVlcwoKSXQncyBvZnRlbiBkZXNpcmFibGUgdG8ga2VlcCBhbnkgZGVyaXZlZCBm
aWxlcyBmcm9tIHRoZSBidWlsZCBjb21wbGV0ZWx5CnNlcGFyYXRlIGZyb20gdGhlIHNvdXJj
ZSBmaWxlcy4gVGhpcyBtYWtlcyBpdCBtdWNoIGVhc2llciB0byBrZWVwIHRyYWNrIG9mCmp1
c3Qgd2hhdCBpcyBhIHNvdXJjZSBmaWxlLCBhbmQgYWxzbyBtYWtlcyBpdCBzaW1wbGVyIHRv
IGhhbmRsZSBCPHZhcmlhbnQ+CmJ1aWxkcywgZXNwZWNpYWxseSBpZiB5b3Ugd2FudCB0aGUg
dmFyaWFudCBidWlsZHMgdG8gY28tZXhpc3QuCgoKPWhlYWQyIFNlcGFyYXRpbmcgYnVpbGQg
YW5kIHNvdXJjZSBkaXJlY3RvcmllcyB1c2luZyB0aGUgTGluayBjb21tYW5kCgpDb25zIHBy
b3ZpZGVzIGEgc2ltcGxlIG1lY2hhbmlzbSB0aGF0IGhhbmRsZXMgYWxsIG9mIHRoZXNlIHJl
cXVpcmVtZW50cy4gVGhlCkM8TGluaz4gY29tbWFuZCBpcyBpbnZva2VkIGFzIGluIHRoaXMg
ZXhhbXBsZToKCiAgTGluayAnYnVpbGQnID0+ICdzcmMnOwoKVGhlIHNwZWNpZmllZCBkaXJl
Y3RvcmllcyBhcmUgYGBsaW5rZWQnJyB0byB0aGUgc3BlY2lmaWVkIHNvdXJjZQpkaXJlY3Rv
cnkuIExldCdzIHN1cHBvc2UgdGhhdCB5b3Ugc2V0dXAgYSBzb3VyY2UgZGlyZWN0b3J5LCBG
PHNyYz4sIHdpdGggdGhlCnN1Yi1kaXJlY3RvcmllcyBGPHdvcmxkPiBhbmQgRjxoZWxsbz4g
YmVsb3cgaXQsIGFzIGluIHRoZSBwcmV2aW91cwpleGFtcGxlLiBZb3UgY291bGQgdGhlbiBz
dWJzdGl0dXRlIGZvciB0aGUgb3JpZ2luYWwgYnVpbGQgbGluZXMgdGhlCmZvbGxvd2luZzoK
CiAgQnVpbGQgcXcoCglidWlsZC93b3JsZC9Db25zY3JpcHQKCWJ1aWxkL2hlbGxvL0NvbnNj
cmlwdAogICk7CgpOb3RpY2UgdGhhdCB5b3UgdHJlYXQgdGhlIEY8Q29uc2NyaXB0PiBmaWxl
IGFzIGlmIGl0IGV4aXN0ZWQgaW4gdGhlIGJ1aWxkCmRpcmVjdG9yeS4gTm93IGlmIHlvdSB0
eXBlIHRoZSBzYW1lIGNvbW1hbmQgYXMgYmVmb3JlLCB5b3Ugd2lsbCBnZXQgdGhlCmZvbGxv
d2luZyByZXN1bHRzOgoKICAlIGNvbnMgZXhwb3J0CiAgSW5zdGFsbCBidWlsZC93b3JsZC93
b3JsZC5oIGFzIGV4cG9ydC9pbmNsdWRlL3dvcmxkLmgKICBjYyAtSWV4cG9ydC9pbmNsdWRl
IC1jIGJ1aWxkL2hlbGxvL2hlbGxvLmMgLW8gYnVpbGQvaGVsbG8vaGVsbG8ubwogIGNjIC1J
ZXhwb3J0L2luY2x1ZGUgLWMgYnVpbGQvd29ybGQvd29ybGQuYyAtbyBidWlsZC93b3JsZC93
b3JsZC5vCiAgYXIgciBidWlsZC93b3JsZC9saWJ3b3JsZC5hIGJ1aWxkL3dvcmxkL3dvcmxk
Lm8KICBhcjogY3JlYXRpbmcgYnVpbGQvd29ybGQvbGlid29ybGQuYQogIHJhbmxpYiBidWls
ZC93b3JsZC9saWJ3b3JsZC5hCiAgSW5zdGFsbCBidWlsZC93b3JsZC9saWJ3b3JsZC5hIGFz
IGV4cG9ydC9saWIvbGlid29ybGQuYQogIGNjIC1vIGJ1aWxkL2hlbGxvL2hlbGxvIGJ1aWxk
L2hlbGxvL2hlbGxvLm8gLUxleHBvcnQvbGliIC1sd29ybGQKICBJbnN0YWxsIGJ1aWxkL2hl
bGxvL2hlbGxvIGFzIGV4cG9ydC9iaW4vaGVsbG8KCkFnYWluLCBDb25zIGhhcyB0YWtlbiBj
YXJlIG9mIHRoZSBkZXRhaWxzIGZvciB5b3UuIEluIHBhcnRpY3VsYXIsIHlvdSB3aWxsCm5v
dGljZSB0aGF0IGFsbCB0aGUgYnVpbGRzIGFyZSBkb25lIHVzaW5nIHNvdXJjZSBmaWxlcyBh
bmQgb2JqZWN0IGZpbGVzIGZyb20KdGhlIGJ1aWxkIGRpcmVjdG9yeS4gRm9yIGV4YW1wbGUs
IEY8YnVpbGQvd29ybGQvd29ybGQubz4gaXMgY29tcGlsZWQgZnJvbQpGPGJ1aWxkL3dvcmxk
L3dvcmxkLmM+LCBhbmQgRjxleHBvcnQvaW5jbHVkZS93b3JsZC5oPiBpcyBpbnN0YWxsZWQg
ZnJvbQpGPGJ1aWxkL3dvcmxkL3dvcmxkLmg+LiBUaGlzIGlzIGFjY29tcGxpc2hlZCBvbiBt
b3N0IHN5c3RlbXMgYnkgdGhlIHNpbXBsZQpleHBlZGllbnQgb2YgYGBoYXJkJycgbGlua2lu
ZyB0aGUgcmVxdWlyZWQgZmlsZXMgZnJvbSBlYWNoIHNvdXJjZSBkaXJlY3RvcnkKaW50byB0
aGUgYXBwcm9wcmlhdGUgYnVpbGQgZGlyZWN0b3J5LgoKVGhlIGxpbmtzIGFyZSBtYWludGFp
bmVkIGNvcnJlY3RseSBieSBDb25zLCBubyBtYXR0ZXIgd2hhdCB5b3UgZG8gdG8gdGhlCnNv
dXJjZSBkaXJlY3RvcnkuIElmIHlvdSBtb2RpZnkgYSBzb3VyY2UgZmlsZSwgeW91ciBlZGl0
b3IgbWF5IGRvIHRoaXMgYGBpbgpwbGFjZScnIG9yIGl0IG1heSByZW5hbWUgaXQgZmlyc3Qg
YW5kIGNyZWF0ZSBhIG5ldyBmaWxlLiBJbiB0aGUgbGF0dGVyIGNhc2UsCmFueSBoYXJkIGxp
bmsgd2lsbCBiZSBsb3N0LiBDb25zIHdpbGwgZGV0ZWN0IHRoaXMgY29uZGl0aW9uIHRoZSBu
ZXh0IHRpbWUKdGhlIHNvdXJjZSBmaWxlIGlzIG5lZWRlZCwgYW5kIHdpbGwgcmVsaW5rIGl0
IGFwcHJvcHJpYXRlbHkuCgpZb3UnbGwgYWxzbyBub3RpY2UsIGJ5IHRoZSB3YXksIHRoYXQg
Qjxubz4gY2hhbmdlcyB3ZXJlIHJlcXVpcmVkIHRvIHRoZQp1bmRlcmx5aW5nIEY8Q29uc2Ny
aXB0PiBmaWxlcy4gQW5kIHdlIGNhbiBnbyBmdXJ0aGVyLCBhcyB3ZSBzaGFsbCBzZWUgaW4g
dGhlCm5leHQgc2VjdGlvbi4KCgo9aGVhZDEgVmFyaWFudCBidWlsZHMKCgo9aGVhZDIgSGVs
bG8sIFdvcmxkISBmb3IgYmFOYU5hIGFuZCBwZUFjSCBPUydzCgpWYXJpYW50IGJ1aWxkcyBy
ZXF1aXJlIGp1c3QgYW5vdGhlciBzaW1wbGUgZXh0ZW5zaW9uLiBMZXQncyB0YWtlIGFzIGFu
CmV4YW1wbGUgYSByZXF1aXJlbWVudCB0byBhbGxvdyBidWlsZHMgZm9yIGJvdGggdGhlIGJh
TmFOYSBhbmQgcGVBY0gKb3BlcmF0aW5nIHN5c3RlbXMuIEluIHRoaXMgY2FzZSwgd2UgYXJl
IHVzaW5nIGEgZGlzdHJpYnV0ZWQgZmlsZSBzeXN0ZW0sCnN1Y2ggYXMgTkZTIHRvIGFjY2Vz
cyB0aGUgcGFydGljdWxhciBzeXN0ZW0sIGFuZCBvbmx5IG9uZSBvciB0aGUgb3RoZXIgb2YK
dGhlIHN5c3RlbXMgaGFzIHRvIGJlIGNvbXBpbGVkIGZvciBhbnkgZ2l2ZW4gaW52b2NhdGlv
biBvZiBDPGNvbnM+LiBIZXJlJ3MKb25lIHdheSB3ZSBjb3VsZCBzZXQgdXAgdGhlIEY8Q29u
c3RydWN0PiBmaWxlIGZvciBvdXIgQjxIZWxsbywgV29ybGQhPgphcHBsaWNhdGlvbjoKCiAg
IyBDb25zdHJ1Y3QgZmlsZSBmb3IgSGVsbG8sIFdvcmxkIQoKICBkaWUgcXEoT1MgbXVzdCBi
ZSBzcGVjaWZpZWQpIHVubGVzcyAkT1MgPSAkQVJHe09TfTsKICBkaWUgcXEoT1MgbXVzdCBi
ZSAicGVhY2giIG9yICJiYW5hbmEiKQoJaWYgJE9TIG5lICJwZWFjaCIgJiYgJE9TIG5lICJi
YW5hbmEiOwoKICAjIFdoZXJlIHRvIHB1dCBhbGwgb3VyIHNoYXJlZCBwcm9kdWN0cy4KICAk
RVhQT1JUID0gIiNleHBvcnQvJE9TIjsKCiAgRXhwb3J0IHF3KCBDT05TIElOQ0xVREUgTElC
IEJJTiApOwoKICAjIFN0YW5kYXJkIGRpcmVjdG9yaWVzIGZvciBzaGFyaW5nIHByb2R1Y3Rz
LgogICRJTkNMVURFID0gIiRFWFBPUlQvaW5jbHVkZSI7CiAgJExJQiA9ICIkRVhQT1JUL2xp
YiI7CiAgJEJJTiA9ICIkRVhQT1JUL2JpbiI7CgogICMgQSBzdGFuZGFyZCBjb25zdHJ1Y3Rp
b24gZW52aXJvbm1lbnQuCiAgJENPTlMgPSBuZXcgY29ucyAoCglDUFBQQVRIID0+ICRJTkNM
VURFLAkjIEluY2x1ZGUgcGF0aCBmb3IgQyBDb21waWxhdGlvbnMKCUxJQlBBVEggPT4gJExJ
QiwJIyBMaWJyYXJ5IHBhdGggZm9yIGxpbmtpbmcgcHJvZ3JhbXMKCUxJQlMgPT4gJy1sd29y
bGQnLAkjIExpc3Qgb2Ygc3RhbmRhcmQgbGlicmFyaWVzCiAgKTsKCiAgIyAkQlVJTEQgaXMg
d2hlcmUgd2Ugd2lsbCBkZXJpdmUgZXZlcnl0aGluZy4KICAkQlVJTEQgPSAiI2J1aWxkLyRP
UyI7CgogICMgVGVsbCBjb25zIHdoZXJlIHRoZSBzb3VyY2UgZmlsZXMgZm9yICRCVUlMRCBh
cmUuCiAgTGluayAkQlVJTEQgPT4gJ3NyYyc7CgogIEJ1aWxkICgKCSIkQlVJTEQvaGVsbG8v
Q29uc2NyaXB0IiwKCSIkQlVJTEQvd29ybGQvQ29uc2NyaXB0IiwKICApOwoKTm93IGlmIHdl
IGxvZ2luIHRvIGEgcGVBY0ggc3lzdGVtLCB3ZSBjYW4gYnVpbGQgb3VyIEI8SGVsbG8sIFdv
cmxkIT4KYXBwbGljYXRpb24gZm9yIHRoYXQgcGxhdGZvcm06CgogICUgY29ucyBleHBvcnQg
T1M9cGVhY2gKICBJbnN0YWxsIGJ1aWxkL3BlYWNoL3dvcmxkL3dvcmxkLmggYXMgZXhwb3J0
L3BlYWNoL2luY2x1ZGUvd29ybGQuaAogIGNjIC1JZXhwb3J0L3BlYWNoL2luY2x1ZGUgLWMg
YnVpbGQvcGVhY2gvaGVsbG8vaGVsbG8uYyAtbyBidWlsZC9wZWFjaC9oZWxsby9oZWxsby5v
CiAgY2MgLUlleHBvcnQvcGVhY2gvaW5jbHVkZSAtYyBidWlsZC9wZWFjaC93b3JsZC93b3Js
ZC5jIC1vIGJ1aWxkL3BlYWNoL3dvcmxkL3dvcmxkLm8KICBhciByIGJ1aWxkL3BlYWNoL3dv
cmxkL2xpYndvcmxkLmEgYnVpbGQvcGVhY2gvd29ybGQvd29ybGQubwogIGFyOiBjcmVhdGlu
ZyBidWlsZC9wZWFjaC93b3JsZC9saWJ3b3JsZC5hCiAgcmFubGliIGJ1aWxkL3BlYWNoL3dv
cmxkL2xpYndvcmxkLmEKICBJbnN0YWxsIGJ1aWxkL3BlYWNoL3dvcmxkL2xpYndvcmxkLmEg
YXMgZXhwb3J0L3BlYWNoL2xpYi9saWJ3b3JsZC5hCiAgY2MgLW8gYnVpbGQvcGVhY2gvaGVs
bG8vaGVsbG8gYnVpbGQvcGVhY2gvaGVsbG8vaGVsbG8ubyAtTGV4cG9ydC9wZWFjaC9saWIg
LWx3b3JsZAogIEluc3RhbGwgYnVpbGQvcGVhY2gvaGVsbG8vaGVsbG8gYXMgZXhwb3J0L3Bl
YWNoL2Jpbi9oZWxsbwoKCj1oZWFkMiBWYXJpYXRpb25zIG9uIGEgdGhlbWUKCk90aGVyIHZh
cmlhdGlvbnMgb2YgdGhpcyBtb2RlbCBhcmUgcG9zc2libGUuIEZvciBleGFtcGxlLCB5b3Ug
bWlnaHQgZGVjaWRlCnRoYXQgeW91IHdhbnQgdG8gc2VwYXJhdGUgb3V0IHlvdXIgaW5jbHVk
ZSBmaWxlcyBpbnRvIHBsYXRmb3JtIGRlcGVuZGVudCBhbmQKcGxhdGZvcm0gaW5kZXBlbmRl
bnQgZmlsZXMuIEluIHRoaXMgY2FzZSwgeW91J2QgaGF2ZSB0byBkZWZpbmUgYW4KYWx0ZXJu
YXRpdmUgdG8gQzwkSU5DTFVERT4gZm9yIHBsYXRmb3JtLWRlcGVuZGVudCBmaWxlcy4gTW9z
dCBGPENvbnNjcmlwdD4KZmlsZXMsIGdlbmVyYXRpbmcgcHVyZWx5IHBsYXRmb3JtLWluZGVw
ZW5kZW50IGluY2x1ZGUgZmlsZXMsIHdvdWxkIG5vdCBoYXZlCnRvIGNoYW5nZS4KCllvdSBt
aWdodCBhbHNvIHdhbnQgdG8gYmUgYWJsZSB0byBjb21waWxlIHlvdXIgd2hvbGUgc3lzdGVt
IHdpdGggZGVidWdnaW5nCm9yIHByb2ZpbGluZywgZm9yIGV4YW1wbGUsIGVuYWJsZWQuIFlv
dSBjb3VsZCBkbyB0aGlzIHdpdGggYXBwcm9wcmlhdGUKY29tbWFuZCBsaW5lIG9wdGlvbnMs
IHN1Y2ggYXMgQzxERUJVRz1vbj4uIFRoaXMgd291bGQgdGhlbiBiZSB0cmFuc2xhdGVkCmlu
dG8gdGhlIGFwcHJvcHJpYXRlIHBsYXRmb3JtLXNwZWNpZmljIHJlcXVpcmVtZW50cyB0byBl
bmFibGUgZGVidWdnaW5nCih0aGlzIG1pZ2h0IGluY2x1ZGUgdHVybmluZyBvZmYgb3B0aW1p
emF0aW9uLCBmb3IgZXhhbXBsZSkuIFlvdSBjb3VsZApvcHRpb25hbGx5IHZhcnkgdGhlIG5h
bWUgc3BhY2UgZm9yIHRoZXNlIGRpZmZlcmVudCB0eXBlcyBvZiBzeXN0ZW1zLCBidXQsIGFz
CndlJ2xsIHNlZSBpbiB0aGUgbmV4dCBzZWN0aW9uLCBpdCdzIG5vdCBCPGVzc2VudGlhbD4g
dG8gZG8gdGhpcywgc2luY2UgQ29ucwppcyBwcmV0dHkgc21hcnQgYWJvdXQgcmVidWlsZGlu
ZyB0aGluZ3Mgd2hlbiB5b3UgY2hhbmdlIG9wdGlvbnMuCgoKPWhlYWQxIFNpZ25hdHVyZXMK
Cgo9aGVhZDIgTUQ1IGNyeXB0b2dyYXBoaWMgc2lnbmF0dXJlcwoKV2hlbmV2ZXIgQ29ucyBj
cmVhdGVzIGEgZGVyaXZlZCBmaWxlLCBpdCBzdG9yZXMgYSBCPHNpZ25hdHVyZT4gZm9yIHRo
YXQKZmlsZS4gVGhlIHNpZ25hdHVyZSBpcyBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBmaWxlLCBv
bmUgcGVyIGRpcmVjdG9yeS4gQWZ0ZXIKdGhlIHByZXZpb3VzIGV4YW1wbGUgd2FzIGNvbXBp
bGVkLCB0aGUgRjwuY29uc2lnbj4gZmlsZSBpbiB0aGUKRjxidWlsZC9wZWFjaC93b3JsZD4g
ZGlyZWN0b3J5IGxvb2tlZCBsaWtlIHRoaXM6CgogIHdvcmxkLm86ODM0MTc5MzAzIDIzODQ0
YzBiMTAyZWNkYzBiNDU0OGQxY2QxY2JkOGM2CiAgbGlid29ybGQuYTo4MzQxNzkzMDQgOWJm
NjU4N2ZhMDZlYzQ5ZDg2NDgxMWExMDUyMjJjMDAKClRoZSBmaXJzdCBudW1iZXIgaXMgYSB0
aW1lc3RhbXAtLWZvciBhIFVOSVggc3lzdGVtcywgdGhpcyBpcyB0eXBpY2FsbHkgdGhlCm51
bWJlciBvZiBzZWNvbmRzIHNpbmNlIEphbnVhcnkgMXN0LCAxOTcwLiBUaGUgc2Vjb25kIHZh
bHVlIGlzIGFuIE1ENQpjaGVja3N1bS4gVGhlIEI8TWVzc2FnZSBEaWdlc3QgQWxnb3JpdGht
PiBpcyBhbiBhbGdvcml0aG0gdGhhdCwgZ2l2ZW4gYW4KaW5wdXQgc3RyaW5nLCBjb21wdXRl
cyBhIHN0cm9uZyBjcnlwdG9ncmFwaGljIHNpZ25hdHVyZSBmb3IgdGhhdCBzdHJpbmcuIFRo
ZQpNRDUgY2hlY2tzdW0gc3RvcmVkIGluIHRoZSBGPC5jb25zaWduPiBmaWxlIGlzLCBpbiBl
ZmZlY3QsIGEgZGlnZXN0IG9mIGFsbAp0aGUgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBmb3Ig
dGhlIHNwZWNpZmllZCBmaWxlLiBTbywgZm9yIGV4YW1wbGUsIGZvciB0aGUKRjx3b3JsZC5v
PiBmaWxlLCB0aGlzIGluY2x1ZGVzIGF0IGxlYXN0IHRoZSBGPHdvcmxkLmM+IGZpbGUsIGFu
ZCBhbHNvIGFueQpoZWFkZXIgZmlsZXMgdGhhdCBDb25zIGtub3dzIGFib3V0IHRoYXQgYXJl
IGluY2x1ZGVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5CmJ5IEY8d29ybGQuYz4uIE5vdCBv
bmx5IHRoYXQsIGJ1dCB0aGUgYWN0dWFsIGNvbW1hbmQgbGluZSB0aGF0IHdhcyB1c2VkIHRv
CmdlbmVyYXRlIEY8d29ybGQubz4gaXMgYWxzbyBmZWQgaW50byB0aGUgY29tcHV0YXRpb24g
b2YgdGhlCnNpZ25hdHVyZS4gU2ltaWxhcmx5LCBGPGxpYndvcmxkLmE+IGdldHMgYSBzaWdu
YXR1cmUgd2hpY2ggYGBpbmNsdWRlcycnIGFsbAp0aGUgc2lnbmF0dXJlcyBvZiBpdHMgY29u
c3RpdHVlbnRzIChhbmQgaGVuY2UsIHRyYW5zaXRpdmVseSwgdGhlIHNpZ25hdHVyZXMKb2Yg
Qjx0aGVpcj4gY29uc3RpdHVlbnRzKSwgYXMgd2VsbCBhcyB0aGUgY29tbWFuZCBsaW5lIHRo
YXQgY3JlYXRlZCB0aGUKZmlsZS4KClRoZSBzaWduYXR1cmUgb2YgYSBub24tZGVyaXZlZCBm
aWxlIGlzIGNvbXB1dGVkLCBieSBkZWZhdWx0LCBieSB0YWtpbmcgdGhlCmN1cnJlbnQgbW9k
aWZpY2F0aW9uIHRpbWUgb2YgdGhlIGZpbGUgYW5kIHRoZSBmaWxlJ3MgZW50cnkgbmFtZSAo
dW5sZXNzCnRoZXJlIGhhcHBlbnMgdG8gYmUgYSBjdXJyZW50IEY8LmNvbnNpZ24+IGVudHJ5
IGZvciB0aGF0IGZpbGUsIGluIHdoaWNoIGNhc2UKdGhhdCBzaWduYXR1cmUgaXMgdXNlZCku
CgpOb3RpY2UgdGhhdCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlcml2ZWQgZmlsZSB0byBk
ZXBlbmQgdXBvbiBhbnkKcGFydGljdWxhciBGPENvbnN0cnVjdD4gb3IgRjxDb25zY3JpcHQ+
IGZpbGUtLWlmIGNoYW5nZXMgdG8gdGhlc2UgZmlsZXMKYWZmZWN0IHRoZSBmaWxlIGluIHF1
ZXN0aW9uLCB0aGVuIHRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJlZmxlY3RlZCBpbgpp
dHMgc2lnbmF0dXJlLCBzaW5jZSByZWxldmFudCBwYXJ0cyBvZiB0aGUgY29tbWFuZCBsaW5l
IGFyZSBpbmNsdWRlZCBpbiB0aGUKc2lnbmF0dXJlLiBVbnJlbGF0ZWQgY2hhbmdlcyB3aWxs
IGhhdmUgbm8gZWZmZWN0LgoKV2hlbiBDb25zIGNvbnNpZGVycyB3aGV0aGVyIHRvIGRlcml2
ZSBhIHBhcnRpY3VsYXIgZmlsZSwgdGhlbiwgaXQgZmlyc3QKY29tcHV0ZXMgdGhlIGV4cGVj
dGVkIHNpZ25hdHVyZSBvZiB0aGUgZmlsZS4gSXQgdGhlbiBjb21wYXJlcyB0aGUgZmlsZSdz
Cmxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgd2l0aCB0aGUgdGltZSByZWNvcmRlZCBpbiB0aGUg
RjwuY29uc2lnbj4gZW50cnksIGlmCm9uZSBleGlzdHMuIElmIHRoZXNlIHRpbWVzIG1hdGNo
LCB0aGVuIHRoZSBzaWduYXR1cmUgc3RvcmVkIGluIHRoZQpGPC5jb25zaWduPiBmaWxlIGlz
IGNvbnNpZGVyZWQgdG8gYmUgYWNjdXJhdGUuIElmIHRoZSBmaWxlJ3MgcHJldmlvdXMKc2ln
bmF0dXJlIGRvZXMgbm90IG1hdGNoIHRoZSBuZXcsIGV4cGVjdGVkIHNpZ25hdHVyZSwgdGhl
biB0aGUgZmlsZSBtdXN0IGJlCnJlZGVyaXZlZC4KCk5vdGljZSB0aGF0IGEgZmlsZSB3aWxs
IGJlIHJlZGVyaXZlZCB3aGVuZXZlciBhbnl0aGluZyBhYm91dCBhIGRlcGVuZGVudApmaWxl
IGNoYW5nZXMuIEluIHBhcnRpY3VsYXIsIG5vdGljZSB0aGF0IEI8YW55PiBjaGFuZ2UgdG8g
dGhlIG1vZGlmaWNhdGlvbgp0aW1lIG9mIGEgZGVwZW5kZW50IChmb3J3YXJkIG9yIGJhY2t3
YXJkcyBpbiB0aW1lKSB3aWxsIGZvcmNlIHJlY29tcGlsYXRpb24Kb2YgdGhlIGRlcml2ZWQg
ZmlsZS4KClRoZSB1c2Ugb2YgdGhlc2Ugc2lnbmF0dXJlcyBpcyBhbiBleHRyZW1lbHkgc2lt
cGxlLCBlZmZpY2llbnQsIGFuZCBlZmZlY3RpdmUKbWV0aG9kIG9mIGltcHJvdmluZy0tZHJh
bWF0aWNhbGx5LS10aGUgcmVwcm9kdWNpYmlsaXR5IG9mIGEgc3lzdGVtLgoKV2UnbGwgZGVt
b25zdHJhdGUgdGhpcyB3aXRoIGEgc2ltcGxlIGV4YW1wbGU6CgogICMgU2ltcGxlICJIZWxs
bywgV29ybGQhIiBDb25zdHJ1Y3QgZmlsZQogICRDRkxBR1MgPSAnLWcnIGlmICRBUkd7REVC
VUd9IGVxICdvbic7CiAgJENPTlMgPSBuZXcgY29ucyhDRkxBR1MgPT4gJENGTEFHUyk7CiAg
UHJvZ3JhbSAkQ09OUyAnaGVsbG8nLCAnaGVsbG8uYyc7CgpOb3RpY2UgaG93IENvbnMgcmVj
b21waWxlcyBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZXM6CgogICUgY29ucyBoZWxsbwogIGNj
IC1jIGhlbGxvLmMgLW8gaGVsbG8ubwogIGNjIC1vIGhlbGxvIGhlbGxvLm8KICAlIGNvbnMg
aGVsbG8KICBjb25zOiAiaGVsbG8iIGlzIHVwLXRvLWRhdGUuCiAgJSBjb25zIERFQlVHPW9u
IGhlbGxvCiAgY2MgLWcgLWMgaGVsbG8uYyAtbyBoZWxsby5vCiAgY2MgLW8gaGVsbG8gaGVs
bG8ubwogICUgY29ucyBERUJVRz1vbiBoZWxsbwogIGNvbnM6ICJoZWxsbyIgaXMgdXAtdG8t
ZGF0ZS4KICAlIGNvbnMgaGVsbG8KICBjYyAtYyBoZWxsby5jIC1vIGhlbGxvLm8KICBjYyAt
byBoZWxsbyBoZWxsby5vCgoKPWhlYWQxIENvZGUgUmVwb3NpdG9yaWVzCgpNYW55IHNvZnR3
YXJlIGRldmVsb3BtZW50IG9yZ2FuaXphdGlvbnMgd2lsbCBoYXZlIG9uZSBvciBtb3JlIGNl
bnRyYWwKcmVwb3NpdG9yeSBkaXJlY3RvcnkgdHJlZXMgY29udGFpbmluZyB0aGUgY3VycmVu
dCBzb3VyY2UgY29kZSBmb3Igb25lIG9yCm1vcmUgcHJvamVjdHMsIGFzIHdlbGwgYXMgdGhl
IGRlcml2ZWQgb2JqZWN0IGZpbGVzLCBsaWJyYXJpZXMsIGFuZApleGVjdXRhYmxlcy4gIElu
IG9yZGVyIHRvIHJlZHVjZSB1bm5lY2Vzc2FyeSByZWNvbXBpbGF0aW9uLCBpdCBpcyB1c2Vm
dWwgdG8KdXNlIGZpbGVzIGZyb20gdGhlIHJlcG9zaXRvcnkgdG8gYnVpbGQgZGV2ZWxvcG1l
bnQgc29mdHdhcmUtLWFzc3VtaW5nLCBvZgpjb3Vyc2UsIHRoYXQgbm8gbmV3ZXIgZGVwZW5k
ZW5jeSBmaWxlIGV4aXN0cyBpbiB0aGUgbG9jYWwgYnVpbGQgdHJlZS4KCgo9aGVhZDIgUmVw
b3NpdG9yeQoKQ29ucyBwcm92aWRlcyBhIG1lY2hhbmlzbSB0byBzcGVjaWZ5IGEgbGlzdCBv
ZiBjb2RlIHJlcG9zaXRvcmllcyB0aGF0IHdpbGwKYmUgc2VhcmNoZWQsIGluLW9yZGVyLCBm
b3Igc291cmNlIGZpbGVzIGFuZCBkZXJpdmVkIGZpbGVzIG5vdCBmb3VuZCBpbiB0aGUKbG9j
YWwgYnVpbGQgZGlyZWN0b3J5IHRyZWUuCgpUaGUgZm9sbG93aW5nIGxpbmVzIGluIGEgRjxD
b25zdHJ1Y3Q+IGZpbGUgd2lsbCBpbnN0cnVjdCBDb25zIHRvIGxvb2sgZmlyc3QKdW5kZXIg
dGhlIEY8L3Vzci9leHBlcmltZW50L3JlcG9zaXRvcnk+IGRpcmVjdG9yeSBhbmQgdGhlbiB1
bmRlciB0aGUKRjwvdXNyL3Byb2R1Y3QvcmVwb3NpdG9yeT4gZGlyZWN0b3J5OgoKICBSZXBv
c2l0b3J5IHF3ICgKCS91c3IvZXhwZXJpbWVudC9yZXBvc2l0b3J5CgkvdXNyL3Byb2R1Y3Qv
cmVwb3NpdG9yeQogICk7CgpUaGUgcmVwb3NpdG9yeSBkaXJlY3RvcmllcyBzcGVjaWZpZWQg
bWF5IGNvbnRhaW4gc291cmNlIGZpbGVzLCBkZXJpdmVkIGZpbGVzCihvYmplY3RzLCBsaWJy
YXJpZXMgYW5kIGV4ZWN1dGFibGVzKSwgb3IgYm90aC4gIElmIHRoZXJlIGlzIG5vIGxvY2Fs
IGZpbGUKKHNvdXJjZSBvciBkZXJpdmVkKSB1bmRlciB0aGUgZGlyZWN0b3J5IGluIHdoaWNo
IENvbnMgaXMgZXhlY3V0ZWQsIHRoZW4gdGhlCmZpcnN0IGNvcHkgb2YgYSBzYW1lLW5hbWVk
IGZpbGUgZm91bmQgdW5kZXIgYSByZXBvc2l0b3J5IGRpcmVjdG9yeSB3aWxsIGJlCnVzZWQg
dG8gYnVpbGQgYW55IGxvY2FsIGRlcml2ZWQgZmlsZXMuCgpDb25zIG1haW50YWlucyBvbmUg
Z2xvYmFsIGxpc3Qgb2YgcmVwb3NpdG9yaWVzIGRpcmVjdG9yaWVzLiAgQ29ucyB3aWxsCmVs
aW1pbmF0ZSB0aGUgY3VycmVudCBkaXJlY3RvcnksIGFuZCBhbnkgbm9uLWV4aXN0ZW50IGRp
cmVjdG9yaWVzLCBmcm9tIHRoZQpsaXN0LgoKCj1oZWFkMiBGaW5kaW5nIHRoZSBDb25zdHJ1
Y3QgZmlsZSBpbiBhIFJlcG9zaXRvcnkKCkNvbnMgd2lsbCBhbHNvIHNlYXJjaCBmb3IgRjxD
b25zdHJ1Y3Q+IGFuZCBGPENvbnNjcmlwdD4gZmlsZXMgaW4gdGhlCnJlcG9zaXRvcnkgdHJl
ZSBvciB0cmVlcy4gIFRoaXMgbGVhZHMgdG8gYSBjaGlja2VuLWFuZC1lZ2cgc2l0dWF0aW9u
LAp0aG91Z2g6IGhvdyBkbyB5b3UgbG9vayBpbiBhIHJlcG9zaXRvcnkgdHJlZSBmb3IgYSBG
PENvbnN0cnVjdD4gZmlsZSBpZiB0aGUKRjxDb25zdHJ1Y3Q+IGZpbGUgdGVsbHMgeW91IHdo
ZXJlIHRoZSByZXBvc2l0b3J5IGlzPyAgVG8gZ2V0IGFyb3VuZCB0aGlzLApyZXBvc2l0b3Jp
ZXMgbWF5IGJlIHNwZWNpZmllZCB2aWEgQzwtUj4gb3B0aW9ucyBvbiB0aGUgY29tbWFuZCBs
aW5lOgoKICAlIGNvbnMgLVIgL3Vzci9leHBlcmltZW50L3JlcG9zaXRvcnkgLVIgL3Vzci9w
cm9kdWN0L3JlcG9zaXRvcnkgLgoKQW55IHJlcG9zaXRvcnkgZGlyZWN0b3JpZXMgc3BlY2lm
aWVkIGluIHRoZSBGPENvbnN0cnVjdD4gb3IgRjxDb25zY3JpcHQ+CmZpbGVzIHdpbGwgYmUg
YXBwZW5kZWQgdG8gdGhlIHJlcG9zaXRvcnkgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5CmNv
bW1hbmQtbGluZSBDPC1SPiBvcHRpb25zLgoKPWhlYWQyIFJlcG9zaXRvcnkgc291cmNlIGZp
bGVzCgpJZiB0aGUgc291cmNlIGNvZGUgKGluY2x1ZGUgdGhlIEY8Q29uc2NyaXB0PiBmaWxl
KSBmb3IgdGhlIGxpYnJhcnkgdmVyc2lvbgpvZiB0aGUgSTxIZWxsbywgV29ybGQhPiBDIGFw
cGxpY2F0aW9uIGlzIGluIGEgcmVwb3NpdG9yeSAod2l0aCBubyBkZXJpdmVkCmZpbGVzKSwg
Q29ucyB3aWxsIHVzZSB0aGUgcmVwb3NpdG9yeSBzb3VyY2UgZmlsZXMgdG8gY3JlYXRlIHRo
ZSBsb2NhbCBvYmplY3QKZmlsZXMgYW5kIGV4ZWN1dGFibGUgZmlsZToKCiAgJSBjb25zIC1S
IC91c3Ivc3JjX29ubHkvcmVwb3NpdG9yeSBoZWxsbwogIGdjYyAtYyAvdXNyL3NyY19vbmx5
L3JlcG9zaXRvcnkvaGVsbG8uYyAtbyBoZWxsby5vCiAgZ2NjIC1jIC91c3Ivc3JjX29ubHkv
cmVwb3NpdG9yeS93b3JsZC5jIC1vIHdvcmxkLm8KICBhciByIGxpYndvcmxkLmEgd29ybGQu
bwogIGFyOiBjcmVhdGluZyBsaWJ3b3JsZC5hCiAgcmFubGliIGxpYndvcmxkLmEKICBnY2Mg
LW8gaGVsbG8gaGVsbG8ubyBsaWJ3b3JsZC5hCgpDcmVhdGluZyBhIGxvY2FsIHNvdXJjZSBm
aWxlIHdpbGwgY2F1c2UgQ29ucyB0byByZWJ1aWxkIHRoZSBhcHByb3ByaWF0ZQpkZXJpdmVk
IGZpbGUgb3IgZmlsZXM6CgogICUgcGljbyB3b3JsZC5jCiAgICBbRURJVF0KICAlIGNvbnMg
LVIgL3Vzci9zcmNfb25seS9yZXBvc2l0b3J5IGhlbGxvCiAgZ2NjIC1jIHdvcmxkLmMgLW8g
d29ybGQubwogIGFyIHIgbGlid29ybGQuYSB3b3JsZC5vCiAgYXI6IGNyZWF0aW5nIGxpYndv
cmxkLmEKICByYW5saWIgbGlid29ybGQuYQogIGdjYyAtbyBoZWxsbyBoZWxsby5vIGxpYndv
cmxkLmEKCkFuZCByZW1vdmluZyB0aGUgbG9jYWwgc291cmNlIGZpbGUgd2lsbCBjYXVzZSBD
b25zIHRvIHJldmVydCBiYWNrIHRvCmJ1aWxkaW5nIHRoZSBkZXJpdmVkIGZpbGVzIGZyb20g
dGhlIHJlcG9zaXRvcnkgc291cmNlOgoKICAlIHJtIHdvcmxkLmMKICAlIGNvbnMgLVIgL3Vz
ci9zcmNfb25seS9yZXBvc2l0b3J5IGhlbGxvCiAgZ2NjIC1jIC91c3Ivc3JjX29ubHkvcmVw
b3NpdG9yeS93b3JsZC5jIC1vIHdvcmxkLm8KICBhciByIGxpYndvcmxkLmEgd29ybGQubwog
IGFyOiBjcmVhdGluZyBsaWJ3b3JsZC5hCiAgcmFubGliIGxpYndvcmxkLmEKICBnY2MgLW8g
aGVsbG8gaGVsbG8ubyBsaWJ3b3JsZC5hCgoKPWhlYWQyIFJlcG9zaXRvcnkgZGVyaXZlZCBm
aWxlcwoKSWYgYSByZXBvc2l0b3J5IHRyZWUgY29udGFpbnMgZGVyaXZlZCBmaWxlcyAodXN1
YWxseSBvYmplY3QgZmlsZXMsCmxpYnJhcmllcywgb3IgZXhlY3V0YWJsZXMpLCBDb25zIHdp
bGwgcGVyZm9ybSBpdHMgbm9ybWFsIHNpZ25hdHVyZQpjYWxjdWxhdGlvbiB0byBkZWNpZGUg
d2hldGhlciB0aGUgcmVwb3NpdG9yeSBmaWxlIGlzIHVwLXRvLWRhdGUgb3IgYSBkZXJpdmVk
CmZpbGUgbXVzdCBiZSBidWlsdCBsb2NhbGx5LiAgVGhpcyBtZWFucyB0aGF0LCBpbiBvcmRl
ciB0byBlbnN1cmUgY29ycmVjdApzaWduYXR1cmUgY2FsY3VsYXRpb24sIGEgcmVwb3NpdG9y
eSB0cmVlIG11c3QgYWxzbyBjb250YWluIHRoZSBGPC5jb25zaWduPgpmaWxlcyB0aGF0IHdl
cmUgY3JlYXRlZCBieSBDb25zIHdoZW4gZ2VuZXJhdGluZyB0aGUgZGVyaXZlZCBmaWxlcy4K
ClRoaXMgd291bGQgdXN1YWxseSBiZSBhY2NvbXBsaXNoZWQgYnkgYnVpbGRpbmcgdGhlIHNv
ZnR3YXJlIGluIHRoZQpyZXBvc2l0b3J5IChvciwgYWx0ZXJuYXRpdmVseSwgaW4gYSBidWls
ZCBkaXJlY3RvcnksIGFuZCB0aGVuIGNvcHlpbmcgdGhlCnJlc3VsdCB0byB0aGUgcmVwb3Np
dG9yeSk6CgogICUgY2QgL3Vzci9hbGwvcmVwb3NpdG9yeQogICUgY29ucyBoZWxsbwogIGdj
YyAtYyBoZWxsby5jIC1vIGhlbGxvLm8KICBnY2MgLWMgd29ybGQuYyAtbyB3b3JsZC5vCiAg
YXIgciBsaWJ3b3JsZC5hIHdvcmxkLm8KICBhcjogY3JlYXRpbmcgbGlid29ybGQuYQogIHJh
bmxpYiBsaWJ3b3JsZC5hCiAgZ2NjIC1vIGhlbGxvIGhlbGxvLm8gbGlid29ybGQuYQoKKFRo
aXMgaXMgc2FmZSBldmVuIGlmIHRoZSBGPENvbnN0cnVjdD4gZmlsZSBsaXN0cyB0aGUgRjwv
dXNyL2FsbC9yZXBvc2l0b3J5PgpkaXJlY3RvcnkgaW4gYSBDPFJlcG9zaXRvcnk+IGNvbW1h
bmQgYmVjYXVzZSBDb25zIHdpbGwgcmVtb3ZlIHRoZSBjdXJyZW50CmRpcmVjdG9yeSBmcm9t
IHRoZSByZXBvc2l0b3J5IGxpc3QuKQoKTm93IGlmIHdlIHdhbnQgdG8gYnVpbGQgYSBjb3B5
IG9mIHRoZSBhcHBsaWNhdGlvbiB3aXRoIG91ciBvd24gRjxoZWxsby5jPgpmaWxlLCB3ZSBv
bmx5IG5lZWQgdG8gY3JlYXRlIHRoZSBvbmUgbmVjZXNzYXJ5IHNvdXJjZSBmaWxlLCBhbmQg
dXNlIHRoZQpDPC1SPiBvcHRpb24gdG8gaGF2ZSBDb25zIHVzZSBvdGhlciBmaWxlcyBmcm9t
IHRoZSByZXBvc2l0b3J5OgoKICAlIG1rZGlyICRIT01FL2J1aWxkMQogICUgY2QgJEhPTUUv
YnVpbGQxCiAgJSBlZCBoZWxsby5jCiAgICBbRURJVF0KICAlIGNvbnMgLVIgL3Vzci9hbGwv
cmVwb3NpdG9yeSBoZWxsbwogIGdjYyAtYyBoZWxsby5jIC1vIGhlbGxvLm8KICBnY2MgLW8g
aGVsbG8gaGVsbG8ubyAvdXNyL2FsbC9yZXBvc2l0b3J5L2xpYndvcmxkLmEKCk5vdGljZSB0
aGF0IENvbnMgaGFzIG5vdCBib3RoZXJlZCB0byByZWNyZWF0ZSBhIGxvY2FsIEY8bGlid29y
bGQuYT4gbGlicmFyeQoob3IgcmVjb21waWxlIHRoZSBGPHdvcmxkLm8+IG1vZHVsZSksIGJ1
dCBpbnN0ZWFkIHVzZXMgdGhlIGFscmVhZHktY29tcGlsZWQKdmVyc2lvbiBmcm9tIHRoZSBy
ZXBvc2l0b3J5LgoKQmVjYXVzZSB0aGUgTUQ1IHNpZ25hdHVyZXMgdGhhdCBDb25zIHB1dHMg
aW4gdGhlIEY8LmNvbnNpZ24+IGZpbGUgY29udGFpbgp0aW1lc3RhbXBzIGZvciB0aGUgZGVy
aXZlZCBmaWxlcywgdGhlIHNpZ25hdHVyZSB0aW1lc3RhbXBzIG11c3QgbWF0Y2ggdGhlCmZp
bGUgdGltZXN0YW1wcyBmb3IgYSBzaWduYXR1cmUgdG8gYmUgY29uc2lkZXJlZCB2YWxpZC4K
ClNvbWUgc29mdHdhcmUgc3lzdGVtcyBtYXkgYWx0ZXIgdGhlIHRpbWVzdGFtcHMgb24gcmVw
b3NpdG9yeSBmaWxlcyAoYnkKY29weWluZyB0aGVtLCBlLmcuKSwgaW4gd2hpY2ggY2FzZSBD
b25zIHdpbGwsIGJ5IGRlZmF1bHQsIGFzc3VtZSB0aGUKcmVwb3NpdG9yeSBzaWduYXR1cmVz
IGFyZSBpbnZhbGlkIGFuZCByZWJ1aWxkIGZpbGVzIHVubmVjZXNzYXJpbHkuICBUaGlzCmJl
aGF2aW9yIG1heSBiZSBhbHRlcmVkIGJ5IHNwZWNpZnlpbmc6CgogIFJlcG9zaXRvcnlfU2ln
X1RpbWVzX09LIDA7CgpUaGlzIHRlbGxzIENvbnMgdG8gaWdub3JlIHRpbWVzdGFtcHMgd2hl
biBkZWNpZGluZyB3aGV0aGVyIGEgc2lnbmF0dXJlIGlzCnZhbGlkLiAgKE5vdGUgdGhhdCBh
dm9pZGluZyB0aGlzIHNhbml0eSBjaGVjayBtZWFucyB0aGVyZSBtdXN0IGJlIHByb3Blcgpj
b250cm9sIG92ZXIgdGhlIHJlcG9zaXRvcnkgdHJlZSB0byBlbnN1cmUgdGhhdCB0aGUgZGVy
aXZlZCBmaWxlcyBjYW5ub3QgYmUKbW9kaWZpZWQgd2l0aG91dCB1cGRhdGluZyB0aGUgRjwu
Y29uc2lnbj4gc2lnbmF0dXJlLikKCgo9aGVhZDIgTG9jYWwgY29waWVzIG9mIGZpbGVzCgpJ
ZiB0aGUgcmVwb3NpdG9yeSB0cmVlIGNvbnRhaW5zIHRoZSBjb21wbGV0ZSByZXN1bHRzIG9m
IGEgYnVpbGQsIGFuZCB3ZSB0cnkKdG8gYnVpbGQgZnJvbSB0aGUgcmVwb3NpdG9yeSB3aXRo
b3V0IGFueSBmaWxlcyBpbiBvdXIgbG9jYWwgdHJlZSwgc29tZXRoaW5nCm1vZGVyYXRlbHkg
c3VycHJpc2luZyBoYXBwZW5zOgoKICAlIG1rZGlyICRIT01FL2J1aWxkMgogICUgY2QgJEhP
TUUvYnVpbGQyCiAgJSBjb25zIC1SIC91c3IvYWxsL3JlcG9zaXRvcnkgaGVsbG8KICBjb25z
OiAiaGVsbG8iIGlzIHVwLXRvLWRhdGUuCgpXaHkgZG9lcyBDb25zIHNheSB0aGF0IHRoZSBG
PGhlbGxvPiBwcm9ncmFtIGlzIHVwLXRvLWRhdGUgd2hlbiB0aGVyZSBpcyBubwpGPGhlbGxv
PiBwcm9ncmFtIGluIHRoZSBsb2NhbCBidWlsZCBkaXJlY3Rvcnk/ICBCZWNhdXNlIHRoZSBy
ZXBvc2l0b3J5IChub3QKdGhlIGxvY2FsIGRpcmVjdG9yeSkgY29udGFpbnMgdGhlIHVwLXRv
LWRhdGUgRjxoZWxsbz4gcHJvZ3JhbSwgYW5kIENvbnMKY29ycmVjdGx5IGRldGVybWluZXMg
dGhhdCBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgdG8gcmVidWlsZCB0aGlzCnVwLXRvLWRh
dGUgY29weSBvZiB0aGUgZmlsZS4KClRoZXJlIGFyZSwgaG93ZXZlciwgbWFueSB0aW1lcyBp
biB3aGljaCBpdCBpcyBhcHByb3ByaWF0ZSB0byBlbnN1cmUgdGhhdCBhCmxvY2FsIGNvcHkg
b2YgYSBmaWxlIGFsd2F5cyBleGlzdHMuICBBIHBhY2thZ2luZyBvciB0ZXN0aW5nIHNjcmlw
dCwgZm9yCmV4YW1wbGUsIG1heSBhc3N1bWUgdGhhdCBjZXJ0YWluIGdlbmVyYXRlZCBmaWxl
cyBleGlzdCBsb2NhbGx5LiAgSW5zdGVhZCBvZgptYWtpbmcgdGhlc2Ugc3Vic2lkaWFyeSBz
Y3JpcHRzIGF3YXJlIG9mIHRoZSByZXBvc2l0b3J5IGRpcmVjdG9yeSwgdGhlCkM8TG9jYWw+
IGNvbW1hbmQgbWF5IGJlIGFkZGVkIHRvIGEgRjxDb25zdHJ1Y3Q+IG9yIEY8Q29uc2NyaXB0
PiBmaWxlIHRvCnNwZWNpZnkgdGhhdCBhIGNlcnRhaW4gZmlsZSBvciBmaWxlcyBtdXN0IGFw
cGVhciBpbiB0aGUgbG9jYWwgYnVpbGQKZGlyZWN0b3J5OgoKICBMb2NhbCBxdygKCWhlbGxv
CiAgKTsKClRoZW4sIGlmIHdlIHJlLXJ1biB0aGUgc2FtZSBjb21tYW5kLCBDb25zIHdpbGwg
bWFrZSBhIGxvY2FsIGNvcHkgb2YgdGhlCnByb2dyYW0gZnJvbSB0aGUgcmVwb3NpdG9yeSBj
b3B5ICh0ZWxsaW5nIHlvdSB0aGF0IGl0IGlzIGRvaW5nIHNvKToKCiAgJSBjb25zIC1SIC91
c3IvYWxsL3JlcG9zaXRvcnkgaGVsbG8KICBMb2NhbCBjb3B5IG9mIGhlbGxvIGZyb20gL3Vz
ci9hbGwvcmVwb3NpdG9yeS9oZWxsbwogIGNvbnM6ICJoZWxsbyIgaXMgdXAtdG8tZGF0ZS4K
Ck5vdGljZSB0aGF0LCBiZWNhdXNlIHRoZSBhY3Qgb2YgbWFraW5nIHRoZSBsb2NhbCBjb3B5
IGlzIG5vdCBjb25zaWRlcmVkIGEKImJ1aWxkIiBvZiB0aGUgRjxoZWxsbz4gZmlsZSwgQ29u
cyBzdGlsbCByZXBvcnRzIHRoYXQgaXQgaXMgdXAtdG8tZGF0ZS4KCkNyZWF0aW5nIGxvY2Fs
IGNvcGllcyBpcyBtb3N0IHVzZWZ1bCBmb3IgZmlsZXMgdGhhdCBhcmUgYmVpbmcgaW5zdGFs
bGVkIGludG8KYW4gaW50ZXJtZWRpYXRlIGRpcmVjdG9yeSAoZm9yIHNoYXJpbmcgd2l0aCBv
dGhlciBkaXJlY3RvcmllcykgdmlhIHRoZQpDPEluc3RhbGw+IGNvbW1hbmQuICBBY2NvbXBh
bnlpbmcgdGhlIEM8SW5zdGFsbD4gY29tbWFuZCBmb3IgYSBmaWxlIHdpdGggYQpjb21wYW5p
b24gQzxMb2NhbD4gY29tbWFuZCBpcyBzbyBjb21tb24gdGhhdCBDb25zIHByb3ZpZGVzIGEK
QzxJbnN0YWxsX0xvY2FsPiBjb21tYW5kIGFzIGEgY29udmVuaWVudCB3YXkgdG8gZG8gYm90
aDoKCiAgSW5zdGFsbF9Mb2NhbCAkZW52LCAnI2V4cG9ydCcsICdoZWxsbyc7CgppcyBleGFj
dGx5IGVxdWl2YWxlbnQgdG86CgogIEluc3RhbGwgJGVudiAnI2V4cG9ydCcsICdoZWxsbyc7
CiAgTG9jYWwgJyNleHBvcnQvaGVsbG8nOwoKQm90aCB0aGUgQzxMb2NhbD4gYW5kIEM8SW5z
dGFsbF9Mb2NhbD4gY29tbWFuZHMgdXBkYXRlIHRoZSBsb2NhbCBGPC5jb25zaWduPgpmaWxl
IHdpdGggdGhlIGFwcHJvcHJpYXRlIGZpbGUgc2lnbmF0dXJlcywgc28gdGhhdCBmdXR1cmUg
YnVpbGRzIGFyZQpwZXJmb3JtZWQgY29ycmVjdGx5LgoKCj1oZWFkMiBSZXBvc2l0b3J5IGRl
cGVuZGVuY3kgYW5hbHlzaXMKCkR1ZSB0byBpdHMgYnVpbHQtaW4gc2Nhbm5pbmcsIENvbnMg
d2lsbCBzZWFyY2ggdGhlIHNwZWNpZmllZCByZXBvc2l0b3J5CnRyZWVzIGZvciBpbmNsdWRl
ZCBGPC5oPiBmaWxlcy4gIFVubGVzcyB0aGUgY29tcGlsZXIgYWxzbyBrbm93cyBhYm91dCB0
aGUKcmVwb3NpdG9yeSB0cmVlcywgdGhvdWdoLCBpdCB3aWxsIGJlIHVuYWJsZSB0byBmaW5k
IEY8Lmg+IGZpbGVzIHRoYXQgb25seQpleGlzdCBpbiBhIHJlcG9zaXRvcnkuICBJZiwgZm9y
IGV4YW1wbGUsIHRoZSBGPGhlbGxvLmM+IGZpbGUgaW5jbHVkZXMgdGhlCkY8aGVsbG8uaD4g
ZmlsZSBpbiBpdHMgY3VycmVudCBkaXJlY3Rvcnk6CgogICUgY29ucyAtUiAvdXNyL2FsbC9y
ZXBvc2l0b3J5IGhlbGxvCiAgZ2NjIC1jIC91c3IvYWxsL3JlcG9zaXRvcnkvaGVsbG8uYyAt
byBoZWxsby5vCiAgL3Vzci9hbGwvcmVwb3NpdG9yeS9oZWxsby5jOjE6IGhlbGxvLmg6IE5v
IHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKClNvbHZpbmcgdGhpcyBwcm9ibGVtIGZvcmNlcyBz
b21lIHJlcXVpcmVtZW50cyBvbnRvIHRoZSB3YXkgY29uc3RydWN0aW9uCmVudmlyb25tZW50
cyBhcmUgZGVmaW5lZCBhbmQgb250byB0aGUgd2F5IHRoZSBDIEM8I2luY2x1ZGU+IHByZXBy
b2Nlc3NvcgpkaXJlY3RpdmUgaXMgdXNlZCB0byBpbmNsdWRlIGZpbGVzLgoKSW4gb3JkZXIg
dG8gaW5mb3JtIHRoZSBjb21waWxlciBhYm91dCB0aGUgcmVwb3NpdG9yeSB0cmVlcywgQ29u
cyB3aWxsIGFkZAphcHByb3ByaWF0ZSBDPC1JPiBmbGFncyB0byB0aGUgY29tcGlsYXRpb24g
Y29tbWFuZHMuICBUaGlzIG1lYW5zIHRoYXQgdGhlCkM8Q1BQUEFUSD4gdmFyaWFibGUgaW4g
dGhlIGNvbnN0cnVjdCBlbnZpcm9ubWVudCBtdXN0IGV4cGxpY2l0bHkgc3BlY2lmeSBhbGwK
c3ViZGlyZWN0b3JpZXMgd2hpY2ggYXJlIHRvIGJlIHNlYXJjaGVkIGZvciBpbmNsdWRlZCBm
aWxlcywgaW5jbHVkaW5nIHRoZQpjdXJyZW50IGRpcmVjdG9yeS4gIENvbnNlcXVlbnRseSwg
d2UgY2FuIGZpeCB0aGUgYWJvdmUgZXhhbXBsZSBieSBjaGFuZ2luZwp0aGUgZW52aXJvbm1l
bnQgY3JlYXRpb24gaW4gdGhlIEY8Q29uc3RydWN0PiBmaWxlIGFzIGZvbGxvd3M6CgogICRl
bnYgPSBuZXcgY29ucygKCUNDCT0+ICdnY2MnLAoJQ1BQUEFUSAk9PiAnLicsCglMSUJTCT0+
ICdsaWJ3b3JsZC5hJywKICApOwoKRHVlIHRvIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBDPENQ
UFBBVEg+IHZhcmlhYmxlLCB0aGlzIHlpZWxkcywgd2hlbiB3ZQpyZS1leGVjdXRlIHRoZSBj
b21tYW5kOgoKICAlIGNvbnMgLVIgL3Vzci9hbGwvcmVwb3NpdG9yeSBoZWxsbwogIGdjYyAt
YyAtSS4gLUkvdXNyL2FsbC9yZXBvc2l0b3J5IC91c3IvYWxsL3JlcG9zaXRvcnkvaGVsbG8u
YyAtbyBoZWxsby5vCiAgZ2NjIC1vIGhlbGxvIGhlbGxvLm8gL3Vzci9hbGwvcmVwb3NpdG9y
eS9saWJ3b3JsZC5hCgpUaGUgb3JkZXIgb2YgdGhlIEM8LUk+IGZsYWdzIHJlcGxpY2F0ZXMs
IGZvciB0aGUgQyBwcmVwcm9jZXNzb3IsIHRoZSBzYW1lCnJlcG9zaXRvcnktZGlyZWN0b3J5
IHNlYXJjaCBwYXRoIHRoYXQgQ29ucyB1c2VzIGZvciBpdHMgb3duIGRlcGVuZGVuY3kKYW5h
bHlzaXMuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcmVwb3NpdG9yaWVzIGFuZCBtdWx0aXBs
ZSBDPENQUFBBVEg+CmRpcmVjdG9yaWVzLCBDb25zIHdpbGwgYXBwZW5kIHRoZSByZXBvc2l0
b3J5IGRpcmVjdG9yaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YKZWFjaCBDPENQUFBBVEg+IGRp
cmVjdG9yeSwgcmFwaWRseSBtdWx0aXBseWluZyB0aGUgbnVtYmVyIG9mIEM8LUk+IGZsYWdz
LgpBcyBhbiBleHRyZW1lIGV4YW1wbGUsIGEgRjxDb25zdHJ1Y3Q+IGZpbGUgY29udGFpbmlu
ZzoKCiAgUmVwb3NpdG9yeSBxdygKCS91MQoJL3UyCiAgKTsKCiAgJGVudiA9IG5ldyBjb25z
KAoJQ1BQUEFUSAk9PiAnYTpiOmMnLAogICk7CgpXb3VsZCB5aWVsZCBhIGNvbXBpbGF0aW9u
IGNvbW1hbmQgb2Y6CgogIGNjIC1JYSAtSS91MS9hIC1JL3UyL2EgLUliIC1JL3UxL2IgLUkv
dTIvYiAtSWMgLUkvdTEvYyAtSS91Mi9jIC1jIGhlbGxvLmMgLW8gaGVsbG8ubwoKQmVjYXVz
ZSBDb25zIHJlbGllcyBvbiB0aGUgY29tcGlsZXIncyBDPC1JPiBmbGFncyB0byBjb21tdW5p
Y2F0ZSB0aGUgb3JkZXIKaW4gd2hpY2ggcmVwb3NpdG9yeSBkaXJlY3RvcmllcyBtdXN0IGJl
IHNlYXJjaGVkLCBDb25zJyBoYW5kbGluZyBvZgpyZXBvc2l0b3J5IGRpcmVjdG9yaWVzIGlz
IGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdXNpbmcKZG91YmxlLXF1b3RlcyBv
biB0aGUgQzwjaW5jbHVkZT4gZGlyZWN0aXZlcyBpbiB5b3VyIEMgc291cmNlIGNvZGU6Cgog
ICNpbmNsdWRlICJmaWxlLmgiCS8qIERPTidUIFVTRSBET1VCTEUtUVVPVEVTIExJS0UgVEhJ
UyAqLwoKVGhpcyBpcyBiZWNhdXNlIG1vc3QgQyBwcmVwcm9jZXNzb3JzLCB3aGVuIGZhY2Vk
IHdpdGggc3VjaCBhIGRpcmVjdGl2ZSwgd2lsbAphbHdheXMgZmlyc3Qgc2VhcmNoIHRoZSBk
aXJlY3RvcnkgY29udGFpbmluZyB0aGUgc291cmNlIGZpbGUuICBUaGlzCnVuZGVybWluZXMg
dGhlIGVsYWJvcmF0ZSBDPC1JPiBvcHRpb25zIHRoYXQgQ29ucyBjb25zdHJ1Y3RzIHRvIG1h
a2UgdGhlCnByZXByb2Nlc3NvciBjb25mb3JtIHRvIGl0cyBwcmVmZXJyZWQgc2VhcmNoIHBh
dGguCgpDb25zZXF1ZW50bHksIHdoZW4gdXNpbmcgcmVwb3NpdG9yeSB0cmVlcyBpbiBDb25z
LApCPGFsd2F5cz4gdXNlIGFuZ2xlLWJyYWNrZXRzIGZvciBpbmNsdWRlZCBmaWxlczoKCiAg
I2luY2x1ZGUgPGZpbGUuaD4JLyogVVNFIEFOR0xFLUJSQUNLRVRTIElOU1RFQUQgKi8KCgo9
aGVhZDIgUmVwb3NpdG9yeV9MaXN0CgpDb25zIHByb3ZpZGVzIGEgQzxSZXBvc2l0b3J5X0xp
c3Q+IGNvbW1hbmQgdG8gcmV0dXJuIGEgbGlzdCBvZiBhbGwKcmVwb3NpdG9yeSBkaXJlY3Rv
cmllcyBpbiB0aGVpciBjdXJyZW50IHNlYXJjaCBvcmRlci4gIFRoaXMgY2FuIGJlIHVzZWQg
Zm9yCmRlYnVnZ2luZywgb3IgdG8gZG8gbW9yZSBjb21wbGV4IFBlcmwgc3R1ZmY6CgogIEBs
aXN0ID0gUmVwb3NpdG9yeV9MaXN0OwogIHByaW50IGpvaW4oJyAnLCBAbGlzdCksICJcbiI7
CgoKPWhlYWQyIFJlcG9zaXRvcnkgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBDb25zIGZlYXR1
cmVzCgpDb25zJyBoYW5kbGluZyBvZiByZXBvc2l0b3J5IHRyZWVzIGludGVyYWN0cyBjb3Jy
ZWN0bHkgd2l0aCBvdGhlciBDb25zCmZlYXR1cmVzLS13aGljaCBpcyB0byBzYXksIGl0IGdl
bmVyYWxseSBkb2VzIHdoYXQgeW91IHdvdWxkIGV4cGVjdC4KCk1vc3Qgbm90YWJseSwgcmVw
b3NpdG9yeSB0cmVlcyBpbnRlcmFjdCBjb3JyZWN0bHksIGFuZCByYXRoZXIgcG93ZXJmdWxs
eSwKd2l0aCB0aGUgJ0xpbmsnIGNvbW1hbmQuICBBIHJlcG9zaXRvcnkgdHJlZSBtYXkgY29u
dGFpbiBvbmUgb3IgbW9yZQpzdWJkaXJlY3RvcmllcyBmb3IgdmVyc2lvbiBidWlsZHMgZXN0
YWJsaXNoZWQgdmlhIEM8TGluaz4gdG8gYSBzb3VyY2UKc3ViZGlyZWN0b3J5LiAgQ29ucyB3
aWxsIHNlYXJjaCBmb3IgZGVyaXZlZCBmaWxlcyBpbiB0aGUgYXBwcm9wcmlhdGUgYnVpbGQK
c3ViZGlyZWN0b3JpZXMgdW5kZXIgdGhlIHJlcG9zaXRvcnkgdHJlZS4KCgo9aGVhZDEgRGVm
YXVsdCB0YXJnZXRzCgpVbnRpbCBub3csIHdlJ3ZlIGRlbW9uc3RyYXRlZCBpbnZva2luZyBD
b25zIHdpdGggYW4gZXhwbGljaXQgdGFyZ2V0CnRvIGJ1aWxkOgoKICAlIGNvbnMgaGVsbG8K
Ck5vcm1hbGx5LCBDb25zIGRvZXMgbm90IGJ1aWxkIGFueXRoaW5nIHVubGVzcyBhIHRhcmdl
dCBpcyBzcGVjaWZpZWQsCmJ1dCBzcGVjaWZ5aW5nICcuJyAodGhlIGN1cnJlbnQgZGlyZWN0
b3J5KSB3aWxsIGJ1aWxkIGV2ZXJ5dGhpbmc6CgogICUgY29ucwkJIyBkb2VzIG5vdCBidWls
ZCBhbnl0aGluZwoKICAlIGNvbnMgLgkJIyBidWlsZHMgZXZlcnl0aGluZyB1bmRlciB0aGUg
dG9wLWxldmVsIGRpcmVjdG9yeQoKQWRkaW5nIHRoZSBDPERlZmF1bHQ+IG1ldGhvZCB0byBh
bnkgRjxDb25zdHJ1Y3Q+IG9yIEY8Q29uc2NyaXB0PiBmaWxlIHdpbGwgYWRkCnRoZSBzcGVj
aWZpZWQgdGFyZ2V0cyB0byBhIGxpc3Qgb2YgZGVmYXVsdCB0YXJnZXRzLiAgQ29ucyB3aWxs
IGJ1aWxkCnRoZXNlIGRlZmF1bHRzIGlmIHRoZXJlIGFyZSBubyB0YXJnZXRzIHNwZWNpZmll
ZCBvbiB0aGUgY29tbWFuZCBsaW5lLgpTbyBhZGRpbmcgdGhlIGZvbGxvd2luZyBsaW5lIHRv
IHRoZSB0b3AtbGV2ZWwgRjxDb25zdHJ1Y3Q+IGZpbGUgd2lsbCBtaW1pYwpNYWtlJ3MgdHlw
aWNhbCBiZWhhdmlvciBvZiBidWlsZGluZyBldmVyeXRoaW5nIGJ5IGRlZmF1bHQ6CgogIERl
ZmF1bHQgJy4nOwoKVGhlIGZvbGxvd2luZyB3b3VsZCBhZGQgdGhlIEY8aGVsbG8+IGFuZCBG
PGdvb2RieWU+IGNvbW1hbmRzIChpbiB0aGUKc2FtZSBkaXJlY3RvcnkgYXMgdGhlIEY8Q29u
c3RydWN0PiBvciBGPENvbnNjcmlwdD4gZmlsZSkgdG8gdGhlIGRlZmF1bHQgbGlzdDoKCiAg
RGVmYXVsdCBxdygKCWhlbGxvCglnb29kYnllCiAgKTsKClRoZSBDPERlZmF1bHQ+IG1ldGhv
ZCBtYXkgYmUgdXNlZCBtb3JlIHRoYW4gb25jZSB0byBhZGQgdGFyZ2V0cyB0byB0aGUKZGVm
YXVsdCBsaXN0LgoKPWhlYWQxIFNlbGVjdGl2ZSBidWlsZHMKCkNvbnMgcHJvdmlkZXMgdHdv
IG1ldGhvZHMgZm9yIHJlZHVjaW5nIHRoZSBzaXplIG9mIGdpdmVuIGJ1aWxkLiBUaGUgZmly
c3QgaXMKYnkgc3BlY2lmeWluZyB0YXJnZXRzIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCB0
aGUgc2Vjb25kIGlzIGEgbWV0aG9kIGZvcgpwcnVuaW5nIHRoZSBidWlsZCB0cmVlLiBXZSds
bCBjb25zaWRlciB0YXJnZXQgc3BlY2lmaWNhdGlvbiBmaXJzdC4KCgo9aGVhZDIgU2VsZWN0
aXZlIHRhcmdldGluZwoKTGlrZSBtYWtlLCBDb25zIGFsbG93cyB0aGUgc3BlY2lmaWNhdGlv
biBvZiBgYHRhcmdldHMnJyBvbiB0aGUgY29tbWFuZApsaW5lLiBDb25zIHRhcmdldHMgbWF5
IGJlIGVpdGhlciBmaWxlcyBvciBkaXJlY3Rvcmllcy4gV2hlbiBhIGRpcmVjdG9yeSBpcwpz
cGVjaWZpZWQsIHRoaXMgaXMgc2ltcGx5IGEgc2hvcnQtaGFuZCBub3RhdGlvbiBmb3IgZXZl
cnkgZGVyaXZhYmxlCnByb2R1Y3QtLXRoYXQgQ29ucyBrbm93cyBhYm91dC0taW4gdGhlIHNw
ZWNpZmllZCBkaXJlY3RvcnkgYW5kIGJlbG93LiBGb3IKZXhhbXBsZToKCiAgJSBjb25zIGJ1
aWxkL2hlbGxvL2hlbGxvLm8KCm1lYW5zIGJ1aWxkIEY8aGVsbG8ubz4gYW5kIGV2ZXJ5dGhp
bmcgdGhhdCBGPGhlbGxvLm8+IG1pZ2h0IG5lZWQuIFRoaXMgaXMKZnJvbSBhIHByZXZpb3Vz
IHZlcnNpb24gb2YgdGhlIEI8SGVsbG8sIFdvcmxkIT4gcHJvZ3JhbSBpbiB3aGljaCBGPGhl
bGxvLm8+CmRlcGVuZGVkIHVwb24gRjxleHBvcnQvaW5jbHVkZS93b3JsZC5oPi4gSWYgdGhh
dCBmaWxlIGlzIG5vdCB1cC10by1kYXRlCihiZWNhdXNlIHNvbWVvbmUgbW9kaWZpZWQgRjxz
cmMvd29ybGQvd29ybGQuaCk+LCB0aGVuIGl0IHdpbGwgYmUgcmVidWlsdCwKZXZlbiB0aG91
Z2ggaXQgaXMgaW4gYSBkaXJlY3RvcnkgcmVtb3RlIGZyb20gRjxidWlsZC9oZWxsbz4uCgpJ
biB0aGlzIGV4YW1wbGU6CgogICUgY29ucyBidWlsZAoKRXZlcnl0aGluZyBpbiB0aGUgRjxi
dWlsZD4gZGlyZWN0b3J5IGlzIGJ1aWx0LCBpZiBuZWNlc3NhcnkuIEFnYWluLCB0aGlzIG1h
eQpjYXVzZSBtb3JlIGZpbGVzIHRvIGJlIGJ1aWx0LiBJbiBwYXJ0aWN1bGFyLCBib3RoIEY8
ZXhwb3J0L2luY2x1ZGUvd29ybGQuaD4KYW5kIEY8ZXhwb3J0L2xpYi9saWJ3b3JsZC5hPiBh
cmUgcmVxdWlyZWQgYnkgdGhlIEY8YnVpbGQvaGVsbG8+IGRpcmVjdG9yeSwKYW5kIHNvIHRo
ZXkgd2lsbCBiZSBidWlsdCBpZiB0aGV5IGFyZSBvdXQtb2YtZGF0ZS4KCklmIHdlIGRvLCBp
bnN0ZWFkOgoKICAlIGNvbnMgZXhwb3J0Cgp0aGVuIG9ubHkgdGhlIGZpbGVzIHRoYXQgc2hv
dWxkIGJlIGluc3RhbGxlZCBpbiB0aGUgZXhwb3J0IGRpcmVjdG9yeSB3aWxsIGJlCnJlYnVp
bHQsIGlmIG5lY2Vzc2FyeSwgYW5kIHRoZW4gaW5zdGFsbGVkIHRoZXJlLiBOb3RlIHRoYXQg
Qzxjb25zIGJ1aWxkPgptaWdodCBidWlsZCBmaWxlcyB0aGF0IEM8Y29ucyBleHBvcnQ+IGRv
ZXNuJ3QgYnVpbGQsIGFuZCB2aWNlLXZlcnNhLgoKCj1oZWFkMiBObyBgYHNwZWNpYWwnJyB0
YXJnZXRzCgpXaXRoIENvbnMsIG1ha2Utc3R5bGUgYGBzcGVjaWFsJycgdGFyZ2V0cyBhcmUg
bm90IHJlcXVpcmVkLiBUaGUgc2ltcGxlc3QKYW5hbG9nIHdpdGggQ29ucyBpcyB0byB1c2Ug
c3BlY2lhbCBGPGV4cG9ydD4gZGlyZWN0b3JpZXMsIGluc3RlYWQuIExldCdzCnN1cHBvc2Us
IGZvciBleGFtcGxlLCB0aGF0IHlvdSBoYXZlIGEgd2hvbGUgc2VyaWVzIG9mIHVuaXQgdGVz
dHMgdGhhdCBhcmUKYXNzb2NpYXRlZCB3aXRoIHlvdXIgY29kZS4gVGhlIHRlc3RzIGxpdmUg
aW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkgbmVhciB0aGUKY29kZS4gTm9ybWFsbHksIGhvd2V2
ZXIsIHlvdSBkb24ndCB3YW50IHRvIGJ1aWxkIHRoZXNlIHRlc3RzLiBPbmUgc29sdXRpb24K
aXMgdG8gcHJvdmlkZSBhbGwgdGhlIGJ1aWxkIGluc3RydWN0aW9ucyBmb3IgY3JlYXRpbmcg
dGhlIHRlc3RzLCBhbmQgdGhlbiB0bwppbnN0YWxsIHRoZSB0ZXN0cyBpbnRvIGEgc2VwYXJh
dGUgcGFydCBvZiB0aGUgdHJlZS4gSWYgd2UgaW5zdGFsbCB0aGUgdGVzdHMKaW4gYSB0b3At
bGV2ZWwgZGlyZWN0b3J5IGNhbGxlZCBGPHRlc3RzPiwgdGhlbjoKCiAgJSBjb25zIHRlc3Rz
Cgp3aWxsIGJ1aWxkIGFsbCB0aGUgdGVzdHMuCgogICUgY29ucyBleHBvcnQKCndpbGwgYnVp
bGQgdGhlIHByb2R1Y3Rpb24gdmVyc2lvbiBvZiB0aGUgc3lzdGVtIChidXQgbm90IHRoZSB0
ZXN0cyksIGFuZDoKCiAgJSBjb25zIGJ1aWxkCgpzaG91bGQgcHJvYmFibHkgYmUgYXZvaWRl
ZCAoc2luY2UgaXQgd2lsbCBjb21waWxlIHRlc3RzIHVuZWNlc3NhcmlseSkuCgpJZiB5b3Ug
d2FudCB0byBidWlsZCBqdXN0IGEgc2luZ2xlIHRlc3QsIHRoZW4geW91IGNvdWxkIGV4cGxp
Y2l0bHkgbmFtZSB0aGUKdGVzdCAoaW4gZWl0aGVyIHRoZSBGPHRlc3RzPiBkaXJlY3Rvcnkg
b3IgdGhlIEY8YnVpbGQ+IGRpcmVjdG9yeSkuIFlvdSBjb3VsZAphbHNvIGFnZ3JlZ2F0ZSB0
aGUgdGVzdHMgaW50byBhIGNvbnZlbmllbnQgaGllcmFyY2h5IHdpdGhpbiB0aGUgdGVzdHMK
ZGlyZWN0b3J5LiBUaGlzIGhpZXJhcmNoeSBuZWVkIG5vdCBuZWNlc3NhcmlseSBtYXRjaCB0
aGUgc291cmNlIGhpZXJhcmNoeSwKaW4gbXVjaCB0aGUgc2FtZSBtYW5uZXIgdGhhdCB0aGUg
aW5jbHVkZSBoaWVyYXJjaHkgcHJvYmFibHkgZG9lc24ndCBtYXRjaAp0aGUgc291cmNlIGhp
ZXJhcmNoeSAodGhlIGluY2x1ZGUgaGllcmFyY2h5IGlzIHVubGlrZWx5IHRvIGJlIG1vcmUg
dGhhbiB0d28KbGV2ZWxzIGRlZXAsIGZvciBDIHByb2dyYW1zKS4KCklmIHlvdSB3YW50IHRv
IGJ1aWxkIGFic29sdXRlbHkgZXZlcnl0aGluZyBpbiB0aGUgdHJlZSAoc3ViamVjdCB0byB3
aGF0ZXZlcgpvcHRpb25zIHlvdSBzZWxlY3QpLCB5b3UgY2FuIHVzZToKCiAgJSBjb25zIC4K
ClRoaXMgaXMgbm90IHBhcnRpY3VsYXJseSBlZmZpY2llbnQsIHNpbmNlIGl0IHdpbGwgcmVk
dW5kYW50bHkgd2FsayBhbGwgdGhlCnRyZWVzLCBpbmNsdWRpbmcgdGhlIHNvdXJjZSB0cmVl
LiBUaGUgc291cmNlIHRyZWUsIG9mIGNvdXJzZSwgbWF5IGhhdmUKYnVpbGRhYmxlIG9iamVj
dHMgaW4gaXQtLW5vdGhpbmcgc3RvcHMgeW91IGZyb20gZG9pbmcgdGhpcywgZXZlbiBpZiB5
b3UKbm9ybWFsbHkgYnVpbGQgaW4gYSBzZXBhcmF0ZSBidWlsZCB0cmVlLgoKCj1oZWFkMSBC
dWlsZCBQcnVuaW5nCgpJbiBjb25qdW5jdGlvbiB3aXRoIHRhcmdldCBzZWxlY3Rpb24sIEI8
YnVpbGQgcHJ1bmluZz4gY2FuIGJlIHVzZWQgdG8gcmVkdWNlCnRoZSBzY29wZSBvZiB0aGUg
YnVpbGQuIEluIHRoZSBwcmV2aW91cyBwZUFjSCBhbmQgYmFOYU5hIGV4YW1wbGUsIHdlIGhh
dmUKYWxyZWFkeSBzZWVuIGhvdyBzY3JpcHQtZHJpdmVuIGJ1aWxkIHBydW5pbmcgY2FuIGJl
IHVzZWQgdG8gbWFrZSBvbmx5IGhhbGYKb2YgdGhlIHBvdGVudGlhbCBidWlsZCBhdmFpbGFi
bGUgZm9yIGFueSBnaXZlbiBpbnZvY2F0aW9uIG9mIEM8Y29ucz4uIENvbnMKYWxzbyBwcm92
aWRlcywgYXMgYSBjb252ZW5pZW5jZSwgYSBjb21tYW5kIGxpbmUgY29udmVudGlvbiB0aGF0
IGFsbG93cyB5b3UKdG8gc3BlY2lmeSB3aGljaCBGPENvbnNjcmlwdD4gZmlsZXMgYWN0dWFs
bHkgZ2V0IGBgYnVpbHQnJy0tdGhhdCBpcywKaW5jb3Jwb3JhdGVkIGludG8gdGhlIGJ1aWxk
IHRyZWUuIEZvciBleGFtcGxlOgoKICAlIGNvbnMgYnVpbGQgK3dvcmxkCgpUaGUgQzwrPiBh
cmd1bWVudCBpbnRyb2R1Y2VzIGEgUGVybCByZWd1bGFyIGV4cHJlc3Npb24uIFRoaXMgbXVz
dCwgb2YKY291cnNlLCBiZSBxdW90ZWQgYXQgdGhlIHNoZWxsIGxldmVsIGlmIHRoZXJlIGFy
ZSBhbnkgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzCndpdGhpbiB0aGUgZXhwcmVzc2lvbi4gVGhl
IGV4cHJlc3Npb24gaXMgbWF0Y2hlZCBhZ2FpbnN0IGVhY2ggRjxDb25zY3JpcHQ+CmZpbGUg
d2hpY2ggaGFzIGJlZW4gbWVudGlvbmVkIGluIGEgQzxCdWlsZD4gc3RhdGVtZW50LCBhbmQg
b25seSB0aG9zZQpzY3JpcHRzIHdpdGggbWF0Y2hpbmcgbmFtZXMgYXJlIGFjdHVhbGx5IGlu
Y29ycG9yYXRlZCBpbnRvIHRoZSBidWlsZAp0cmVlLiBNdWx0aXBsZSBzdWNoIGFyZ3VtZW50
cyBhcmUgYWxsb3dlZCwgaW4gd2hpY2ggY2FzZSBhIG1hdGNoIGFnYWluc3QgYW55Cm9mIHRo
ZW0gaXMgc3VmZmljaWVudCB0byBjYXVzZSBhIHNjcmlwdCB0byBiZSBpbmNsdWRlZC4KCklu
IHRoZSBleGFtcGxlLCBhYm92ZSwgdGhlIEY8aGVsbG8+IHByb2dyYW0gd2lsbCBub3QgYmUg
YnVpbHQsIHNpbmNlIENvbnMKd2lsbCBoYXZlIG5vIGtub3dsZWRnZSBvZiB0aGUgc2NyaXB0
IEY8aGVsbG8vQ29uc2NyaXB0Pi4gVGhlIEY8bGlid29ybGQuYT4KYXJjaGl2ZSB3aWxsIGJl
IGJ1aWx0LCBob3dldmVyLCBpZiBuZWVkIGJlLgoKVGhlcmUgYXJlIGEgY291cGxlIG9mIHVz
ZXMgZm9yIGJ1aWxkIHBydW5pbmcgdmlhIHRoZSBjb21tYW5kIGxpbmUuIFBlcmhhcHMKdGhl
IG1vc3QgdXNlZnVsIGlzIHRoZSBhYmlsaXR5IHRvIG1ha2UgbG9jYWwgY2hhbmdlcywgYW5k
IHRoZW4sIHdpdGgKc3VmZmljaWVudCBrbm93bGVkZ2Ugb2YgdGhlIGNvbnNlcXVlbmNlcyBv
ZiB0aG9zZSBjaGFuZ2VzLCByZXN0cmljdCB0aGUgc2l6ZQpvZiB0aGUgYnVpbGQgdHJlZSBp
biBvcmRlciB0byBzcGVlZCB1cCB0aGUgcmVidWlsZCB0aW1lLiBBIHNlY29uZCB1c2UgZm9y
CmJ1aWxkIHBydW5pbmcgaXMgdG8gYWN0aXZlbHkgcHJldmVudCB0aGUgcmVjb21waWxhdGlv
biBvZiBjZXJ0YWluIGZpbGVzIHRoYXQKeW91IGtub3cgd2lsbCByZWNvbXBpbGUgZHVlIHRv
LCBmb3IgZXhhbXBsZSwgYSBtb2RpZmllZCBoZWFkZXIgZmlsZS4gWW91IG1heQprbm93IHRo
YXQgZWl0aGVyIHRoZSBjaGFuZ2VzIHRvIHRoZSBoZWFkZXIgZmlsZSBhcmUgaW1tYXRlcmlh
bCwgb3IgdGhhdCB0aGUKY2hhbmdlcyBtYXkgYmUgc2FmZWx5IGlnbm9yZWQgZm9yIG1vc3Qg
b2YgdGhlIHRyZWUsIGZvciB0ZXN0aW5nCnB1cnBvc2VzLldpdGggQ29ucywgdGhlIHZpZXcg
aXMgdGhhdCBpdCBpcyBwcmFnbWF0aWMgdG8gYWRtaXQgdGhpcyB0eXBlIG9mCmJlaGF2aW9y
LCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgb24gdGhlIG5leHQgZnVsbCBidWlsZCBl
dmVyeXRoaW5nIHRoYXQKbmVlZHMgdG8gYmUgcmVidWlsdCB3aWxsIGJlLiBUaGVyZSBpcyBu
byBlcXVpdmFsZW50IHRvIGEgYGBtYWtlIHRvdWNoJycKY29tbWFuZCwgdG8gbWFyayBmaWxl
cyBhcyBwZXJtYW5lbnRseSB1cC10by1kYXRlLiBTbyBhbnkgcmlzayB0aGF0IGlzCmluY3Vy
cmVkIGJ5IGJ1aWxkIHBydW5pbmcgaXMgbWl0aWdhdGVkLiBGb3IgcmVsZWFzZSBxdWFsaXR5
IHdvcmssIG9idmlvdXNseSwKd2UgcmVjb21tZW5kIHRoYXQgeW91IGRvIG5vdCB1c2UgYnVp
bGQgcHJ1bmluZyAoaXQncyBwZXJmZWN0bHkgT0sgdG8gdXNlCmR1cmluZyBpbnRlZ3JhdGlv
biwgaG93ZXZlciwgZm9yIGNoZWNraW5nIGNvbXBpbGF0aW9uLCBldGMuIEp1c3QgYmUgc3Vy
ZSB0bwpkbyBhbiB1bmNvbnN0cmFpbmVkIGJ1aWxkIGJlZm9yZSBjb21taXR0aW5nIHRoZSBp
bnRlZ3JhdGlvbikuCgoKPWhlYWQxIFRlbXBvcmFyeSBvdmVycmlkZXMKCkNvbnMgcHJvdmlk
ZXMgYSB2ZXJ5IHNpbXBsZSBtZWNoYW5pc20gZm9yIG92ZXJyaWRpbmcgYXNwZWN0cyBvZiBh
IGJ1aWxkLiBUaGUKZXNzZW5jZSBpcyB0aGF0IHlvdSB3cml0ZSBhbiBvdmVycmlkZSBmaWxl
IGNvbnRhaW5pbmcgb25lIG9yIG1vcmUKQzxPdmVycmlkZT4gY29tbWFuZHMsIGFuZCB5b3Ug
c3BlY2lmeSB0aGlzIG9uIHRoZSBjb21tYW5kIGxpbmUsIHdoZW4geW91IHJ1bgpDPGNvbnM+
OgoKICAlIGNvbnMgLW8gb3ZlciBleHBvcnQKCndpbGwgYnVpbGQgdGhlIEY8ZXhwb3J0PiBk
aXJlY3RvcnksIHdpdGggYWxsIGRlcml2ZWQgZmlsZXMgc3ViamVjdCB0byB0aGUKb3ZlcnJp
ZGVzIHByZXNlbnQgaW4gdGhlIEY8b3Zlcj4gZmlsZS4gSWYgeW91IGxlYXZlIG91dCB0aGUg
Qzwtbz4gb3B0aW9uLAp0aGVuIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IHRvIHJlbW92ZSBhbGwg
b3ZlcnJpZGVzIHdpbGwgYmUgcmVidWlsdC4KCgo9aGVhZDIgT3ZlcnJpZGluZyBlbnZpcm9u
bWVudCB2YXJpYWJsZXMKClRoZSBvdmVycmlkZSBmaWxlIGNhbiBjb250YWluIHR3byB0eXBl
cyBvZiBvdmVycmlkZXMuIFRoZSBmaXJzdCBpcyBpbmNvbWluZwplbnZpcm9ubWVudCB2YXJp
YWJsZXMuIFRoZXNlIGFyZSBub3JtYWxseSBhY2Nlc3NpYmxlIGJ5IHRoZSBGPENvbnN0cnVj
dD4KZmlsZSBmcm9tIHRoZSBDPCVFTlY+IGhhc2ggdmFyaWFibGUuIFRoZXNlIGNhbiB0cml2
aWFsbHkgYmUgb3ZlcnJpZGRlbiBpbgp0aGUgb3ZlcnJpZGUgZmlsZSBieSBzZXR0aW5nIHRo
ZSBhcHByb3ByaWF0ZSBlbGVtZW50cyBvZiBDPCVFTlY+ICh0aGVzZQpjb3VsZCBhbHNvIGJl
IG92ZXJyaWRkZW4gaW4gdGhlIHVzZXIncyBlbnZpcm9ubWVudCwgb2YgY291cnNlKS4KCgo9
aGVhZDIgVGhlIE92ZXJyaWRlIGNvbW1hbmQKClRoZSBzZWNvbmQgdHlwZSBvZiBvdmVycmlk
ZSBpcyBhY2NvbXBsaXNoZWQgd2l0aCB0aGUgQzxPdmVycmlkZT4gY29tbWFuZCwKd2hpY2gg
bG9va3MgbGlrZSB0aGlzOgoKICBPdmVycmlkZSA8cmVnZXhwPiwgPHZhcjE+ID0+IDx2YWx1
ZTE+LCA8dmFyMj4gPT4gPHZhbHVlMj4sIC4uLjsKClRoZSByZWd1bGFyIGV4cHJlc3Npb24g
STxyZWdleHA+IGlzIG1hdGNoZWQgYWdhaW5zdCBldmVyeSBkZXJpdmVkIGZpbGUgdGhhdApp
cyBhIGNhbmRpZGF0ZSBmb3IgdGhlIGJ1aWxkLiBJZiB0aGUgZGVyaXZlZCBmaWxlIG1hdGNo
ZXMsIHRoZW4gdGhlCnZhcmlhYmxlL3ZhbHVlIHBhaXJzIGFyZSB1c2VkIHRvIG92ZXJyaWRl
IHRoZSB2YWx1ZXMgaW4gdGhlIGNvbnN0cnVjdGlvbgplbnZpcm9ubWVudCBhc3NvY2lhdGVk
IHdpdGggdGhlIGRlcml2ZWQgZmlsZS4KCkxldCdzIHN1cHBvc2UgdGhhdCB3ZSBoYXZlIGEg
Y29uc3RydWN0aW9uIGVudmlyb25tZW50IGxpa2UgdGhpczoKCiAgJENPTlMgPSBuZXcgY29u
cygKCUNPUFQgPT4gJycsCglDREJHID0+ICctZycsCglDRkxBR1MgPT4gJyVDT1BUICVDREJH
JywKICApOwoKVGhlbiBpZiB3ZSBoYXZlIGFuIG92ZXJyaWRlIGZpbGUgRjxvdmVyPiBjb250
YWluaW5nIHRoaXMgY29tbWFuZDoKCiAgT3ZlcnJpZGUgJ1wubyQnLCBDT1BUID0+ICctTycs
IENEQkcgPT4gJyc7Cgp0aGVuIGFueSBDPGNvbnM+IGludm9jYXRpb24gd2l0aCBDPC1vIG92
ZXI+IHRoYXQgY3JlYXRlcyBGPC5vPiBmaWxlcyB2aWEKdGhpcyBlbnZpcm9ubWVudCB3aWxs
IGNhdXNlIHRoZW0gdG8gYmUgY29tcGlsZWQgd2l0aCBDPC1PID5hbmQgbm8gQzwtZz4uIFRo
ZQpvdmVycmlkZSBjb3VsZCwgb2YgY291cnNlLCBiZSByZXN0cmljdGVkIHRvIGEgc2luZ2xl
IGRpcmVjdG9yeSBieSB0aGUKYXBwcm9wcmlhdGUgc2VsZWN0aW9uIG9mIGEgcmVndWxhciBl
eHByZXNzaW9uLgoKSGVyZSdzIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBIZWxsbywg
V29ybGQhIHByb2dyYW0sIGJ1aWx0IHdpdGggdGhpcwplbnZpcm9ubWVudC4gTm90ZSB0aGF0
IENvbnMgcmVidWlsZHMgdGhlIGFwcHJvcHJpYXRlIHBpZWNlcyB3aGVuIHRoZQpvdmVycmlk
ZSBpcyBhcHBsaWVkIG9yIHJlbW92ZWQ6CgogICUgY29ucyBoZWxsbwogIGNjIC1nIC1jIGhl
bGxvLmMgLW8gaGVsbG8ubwogIGNjIC1vIGhlbGxvIGhlbGxvLm8KICAlIGNvbnMgLW8gb3Zl
ciBoZWxsbwogIGNjIC1PIC1jIGhlbGxvLmMgLW8gaGVsbG8ubwogIGNjIC1vIGhlbGxvIGhl
bGxvLm8KICAlIGNvbnMgLW8gb3ZlciBoZWxsbwogIGNvbnM6ICJoZWxsbyIgaXMgdXAtdG8t
ZGF0ZS4KICAlIGNvbnMgaGVsbG8KICBjYyAtZyAtYyBoZWxsby5jIC1vIGhlbGxvLm8KICBj
YyAtbyBoZWxsbyBoZWxsby5vCgpJdCdzIGltcG9ydGFudCB0aGF0IHRoZSBDPE92ZXJyaWRl
PiBjb21tYW5kIG9ubHkgYmUgdXNlZCBmb3IgdGVtcG9yYXJ5LApvbi10aGUtZmx5IG92ZXJy
aWRlcyBuZWNlc3NhcnkgZm9yIGRldmVsb3BtZW50IGJlY2F1c2UgdGhlIG92ZXJyaWRlcyBh
cmUgbm90CnBsYXRmb3JtIGluZGVwZW5kZW50IGFuZCBiZWNhdXNlIHRoZXkgcmVseSB0b28g
bXVjaCBvbiBpbnRpbWF0ZSBrbm93bGVkZ2Ugb2YKdGhlIHdvcmtpbmdzIG9mIHRoZSBzY3Jp
cHRzLiBGb3IgdGVtcG9yYXJ5IHVzZSwgaG93ZXZlciwgdGhleSBhcmUgZXhhY3RseQp3aGF0
IHlvdSB3YW50LgoKTm90ZSB0aGF0IGl0IGlzIHN0aWxsIHVzZWZ1bCB0byBwcm92aWRlLCBz
YXksIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBhIGZ1bGx5Cm9wdGltaXplZCB2ZXJzaW9uIG9m
IGEgc3lzdGVtIGZvciBwcm9kdWN0aW9uIHVzZS0tZnJvbSB0aGUgRjxDb25zdHJ1Y3Q+IGFu
ZApGPENvbnNjcmlwdD4gZmlsZXMuIFRoaXMgd2F5IHlvdSBjYW4gdGFpbG9yIHRoZSBvcHRp
bWl6ZWQgc3lzdGVtIHRvIHRoZQpwbGF0Zm9ybS4gV2hlcmUgb3B0aW1pemVyIHRyYWRlLW9m
ZnMgbmVlZCB0byBiZSBtYWRlIChwYXJ0aWN1bGFyIGZpbGVzIG1heQpub3QgYmUgY29tcGls
ZWQgd2l0aCBmdWxsIG9wdGltaXphdGlvbiwgZm9yIGV4YW1wbGUpLCB0aGVuIHRoZXNlIGNh
biBiZQpyZWNvcmRlZCBmb3IgcG9zdGVyaXR5IChhbmQgcmVwcm9kdWNpYmlsaXR5KSBkaXJl
Y3RseSBpbiB0aGUgc2NyaXB0cy4KCgo9aGVhZDEgTW9yZSBvbiBjb25zdHJ1Y3Rpb24gZW52
aXJvbm1lbnRzCgo9aGVhZDIgRGVmYXVsdCBjb25zdHJ1Y3Rpb24gdmFyaWFibGVzCgpXZSBo
YXZlIG1lbnRpb25lZCwgYW5kIHVzZWQsIHRoZSBjb25jZXB0IG9mIGEgQjxjb25zdHJ1Y3Rp
b24gZW52aXJvbm1lbnQ+LAptYW55IHRpbWVzIGluIHRoZSBwcmVjZWRpbmcgcGFnZXMuIE5v
dyBpdCdzIHRpbWUgdG8gbWFrZSB0aGlzIGEgbGl0dGxlIG1vcmUKY29uY3JldGUuIFdpdGgg
dGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQ6CgogICRlbnYgPSBuZXcgY29ucygpOwoKYSByZWZl
cmVuY2UgdG8gYSBuZXcsIGRlZmF1bHQgY29uc3RydWN0aW9uIGVudmlyb25tZW50IGlzIGNy
ZWF0ZWQuIFRoaXMKY29udGFpbnMgYSBudW1iZXIgb2YgY29uc3RydWN0aW9uIHZhcmlhYmxl
cyBhbmQgc29tZSBtZXRob2RzLiBBdCB0aGUgcHJlc2VudAp3cml0aW5nLCB0aGUgZGVmYXVs
dCBsaXN0IG9mIGNvbnN0cnVjdGlvbiB2YXJpYWJsZXMgaXMgZGVmaW5lZCBhcyBmb2xsb3dz
OgoKICBDQwkJPT4gJ2NjJywKICBDRkxBR1MJPT4gJycsCiAgQ0NDT00JCT0+ICclQ0MgJUNG
TEFHUyAlX0lGTEFHUyAtYyAlPCAtbyAlPicsCiAgSU5DRElSUFJFRklYICA9PiAnLUknLAog
IENYWAkJPT4gJyVDQycsCiAgQ1hYRkxBR1MJPT4gJyVDRkxBR1MnLAogIENYWENPTQk9PiAn
JUNYWCAlQ1hYRkxBR1MgJV9JRkxBR1MgLWMgJTwgLW8gJT4nLAogIExJTksJCT0+ICclQ1hY
JywKICBMSU5LQ09NCT0+ICclTElOSyAlTERGTEFHUyAtbyAlPiAlPCAlX0xESVJTICVMSUJT
JywKICBMSU5LTU9EVUxFQ09NCT0+ICclTEQgLXIgLW8gJT4gJTwnLAogIExJQkRJUlBSRUZJ
WCAgPT4gJy1MJywKICBBUgkJPT4gJ2FyJywKICBBUkZMQUdTCT0+ICdyJywKICBBUkNPTQkJ
PT4gIiVBUiAlQVJGTEFHUyAlPiAlPFxuJVJBTkxJQiAlPiIsCiAgUkFOTElCCT0+ICdyYW5s
aWInLAogIEFTCQk9PiAnYXMnLAogIEFTRkxBR1MJPT4gJycsCiAgQVNDT00JCT0+ICclQVMg
JUFTRkxBR1MgJTwgLW8gJT4nLAogIExECQk9PiAnbGQnLAogIExERkxBR1MJPT4gJycsCiAg
UFJFRkxJQgk9PiAnbGliJywKICBTVUZMSUIJPT4gJy5hJywKICBTVUZMSUJTCT0+ICcuc286
LmEnLAogIFNVRk9CSgk9PiAnLm8nLAogIEVOVgkJPT4geyAnUEFUSCcgPT4gJy9iaW46L3Vz
ci9iaW4nIH0sCgoKT24gV2luMzIgc3lzdGVtcyAoV2luZG93cyBOVCksIHRoZSBmb2xsb3dp
bmcgY29uc3RydWN0aW9uIHZhcmlhYmxlcwphcmUgb3ZlcnJpZGRlbiBpbiB0aGUgZGVmYXVs
dDoKCiAgQ0MJCT0+ICdjbCcsCiAgQ0ZMQUdTCT0+ICcvbm9sb2dvJywKICBDQ0NPTQkJPT4g
JyVDQyAlQ0ZMQUdTICVfSUZMQUdTIC9jICU8IC9GbyU+JywKICBDWFhDT00gICAgICAgID0+
ICclQ1hYICVDWFhGTEFHUyAlX0lGTEFHUyAvYyAlPCAvRm8lPicsCiAgSU5DRElSUFJFRklY
ICA9PiAnL0knLAogIExJTksJCT0+ICdsaW5rJywKICBMSU5LQ09NCT0+ICclTElOSyAlTERG
TEFHUyAvb3V0OiU+ICU8ICVfTERJUlMgJUxJQlMnLAogIExJTktNT0RVTEVDT00JPT4gJyVM
RCAvciAvbyAlPiAlPCcsCiAgTElCRElSUFJFRklYICA9PiAnL0xJQlBBVEg6JywKICBBUgkJ
PT4gJ2xpYicsCiAgQVJGTEFHUwk9PiAnL25vbG9nbyAnLAogIEFSQ09NCQk9PiAiJUFSICVB
UkZMQUdTIC9vdXQ6JT4gJTwiLAogIFJBTkxJQgk9PiAnJywKICBMRAkJPT4gJ2xpbmsnLAog
IExERkxBR1MJPT4gJy9ub2xvZ28gJywKICBQUkVGTElCCT0+ICcnLAogIFNVRkVYRQk9PiAn
LmV4ZScsCiAgU1VGTElCCT0+ICcubGliJywKICBTVUZMSUJTCT0+ICcuZGxsOi5saWInLAog
IFNVRk9CSgk9PiAnLm9iaicsCgpUaGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgYnkgdGhlIHZh
cmlvdXMgbWV0aG9kcyBhc3NvY2lhdGVkIHdpdGggdGhlCmVudmlyb25tZW50LCBpbiBwYXJ0
aWN1bGFyIGFueSBtZXRob2QgdGhhdCB1bHRpbWF0ZWx5IGludm9rZXMgYW4gZXh0ZXJuYWwK
Y29tbWFuZCB3aWxsIHN1YnN0aXR1dGUgdGhlc2UgdmFyaWFibGVzIGludG8gdGhlIGZpbmFs
IGNvbW1hbmQsIGFzCmFwcHJvcHJpYXRlLiBGb3IgZXhhbXBsZSwgdGhlIEM8T2JqZWN0cz4g
bWV0aG9kIHRha2VzIGEgbnVtYmVyIG9mIHNvdXJjZQpmaWxlcyBhbmQgYXJyYW5nZXMgdG8g
ZGVyaXZlLCBpZiBuZWNlc3NhcnksIHRoZSBjb3JyZXNwb25kaW5nIG9iamVjdApmaWxlcy4g
Rm9yIGV4YW1wbGU6CgogIE9iamVjdHMgJGVudiAnZm9vLmMnLCAnYmFyLmMnOwoKVGhpcyB3
aWxsIGFycmFuZ2UgdG8gcHJvZHVjZSwgaWYgbmVjZXNzYXJ5LCBGPGZvby5vPiBhbmQgRjxi
YXIubz4uIFRoZQpjb21tYW5kIGludm9rZWQgaXMgc2ltcGx5IEM8JUNDQ09NPiwgd2hpY2gg
ZXhwYW5kcyB0aHJvdWdoIHN1YnN0aXR1dGlvbiwgdG8KdGhlIGFwcHJvcHJpYXRlIGV4dGVy
bmFsIGNvbW1hbmQgcmVxdWlyZWQgdG8gYnVpbGQgZWFjaCBvYmplY3QuIFdlIHdpbGwKZXhw
bG9yZSB0aGUgc3Vic3RpdHV0aW9uIHJ1bGVzIGZ1cnRoZXIgdW5kZXIgdGhlIEM8Q29tbWFu
ZD4gbWV0aG9kLCBiZWxvdy4KClRoZSBjb25zdHJ1Y3Rpb24gdmFyaWFibGVzIGFyZSBhbHNv
IHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLiBGb3IgZXhhbXBsZSwKQzxDUFBQQVRIPiBpcyB1
c2VkIHRvIHNwZWNpZnkgYSBjb2xvbi1zZXBhcmF0ZWQgcGF0aCBvZiBpbmNsdWRlCmRpcmVj
dG9yaWVzLiBUaGVzZSBhcmUgaW50ZW5kZWQgdG8gYmUgcGFzc2VkIHRvIHRoZSBDIHByZXBy
b2Nlc3NvciBhbmQgYXJlCmFsc28gdXNlZCBieSB0aGUgQy1maWxlIHNjYW5uaW5nIG1hY2hp
bmVyeSB0byBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY2llcwppbnZvbHZlZCBpbiBhIEMgQ29t
cGlsYXRpb24uIFZhcmlhYmxlcyBiZWdpbm5pbmcgd2l0aCB1bmRlcnNjb3JlLCBhcmUKY3Jl
YXRlZCBieSB2YXJpb3VzIG1ldGhvZHMsIGFuZCBzaG91bGQgbm9ybWFsbHkgYmUgY29uc2lk
ZXJlZCBgYGludGVybmFsJycKdmFyaWFibGVzLiBGb3IgZXhhbXBsZSwgd2hlbiBhIG1ldGhv
ZCBpcyBjYWxsZWQgd2hpY2ggY2FsbHMgZm9yIHRoZSBjcmVhdGlvbgpvZiBhbiBvYmplY3Qg
ZnJvbSBhIEMgc291cmNlLCB0aGUgdmFyaWFibGUgQzxfSUZMQUdTPiBpcyBjcmVhdGVkOiB0
aGlzCmNvcnJlc3BvbmRzIHRvIHRoZSBDPC1JPiBzd2l0Y2hlcyByZXF1aXJlZCBieSB0aGUg
QyBjb21waWxlciB0byByZXByZXNlbnQKdGhlIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSBD
PENQUFBBVEg+LgoKTm90ZSB0aGF0LCBmb3IgYW55IHBhcnRpY3VsYXIgZW52aXJvbm1lbnQs
IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlIGlzIHNldApvbmNlLCBhbmQgdGhlbiBuZXZlciBy
ZXNldCAodG8gY2hhbmdlIGEgdmFyaWFibGUsIHlvdSBtdXN0IGNyZWF0ZSBhIG5ldwplbnZp
cm9ubWVudC4gTWV0aG9kcyBhcmUgcHJvdmlkZWQgZm9yIGNvcHlpbmcgZXhpc3RpbmcgZW52
aXJvbm1lbnRzIGZvciB0aGlzCnB1cnBvc2UpLiBTb21lIGludGVybmFsIHZhcmlhYmxlcywg
c3VjaCBhcyBDPF9JRkxBR1M+IGFyZSBjcmVhdGVkIG9uIGRlbWFuZCwKYnV0IG9uY2Ugc2V0
LCB0aGV5IHJlbWFpbiBmaXhlZCBmb3IgdGhlIGxpZmUgb2YgdGhlIGVudmlyb25tZW50LgoK
VGhlIEM8Q0ZMQUdTPiwgQzxMREZMQUdTPiwgYW5kIEM8QVJGTEFHUz4gdmFyaWFibGVzIGFs
bCBzdXBwbHkgYSBwbGFjZQpmb3IgcGFzc2luZyBvcHRpb25zIHRvIHRoZSBjb21waWxlciwg
bG9hZGVyLCBhbmQgYXJjaGl2ZXIsIHJlc3BlY3RpdmVseS4KTGVzcyBvYnZpb3VzbHksIHRo
ZSBDPElOQ0RJUlBSRUZJWD4gdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBvcHRpb24gc3RyaW5n
CnRvIGJlIGFwcGVuZGVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBpbmNsdWRlIGRpcmVj
dG9yeSBzbyB0aGF0IHRoZQpjb21waWxlciBrbm93cyB3aGVyZSB0byBmaW5kIEY8Lmg+IGZp
bGVzLiAgU2ltaWxhcmx5LCB0aGUgQzxMSUJESVJQUkVGSVg+CnZhcmlhYmxlIHNwZWNpZmll
cyB0aGUgb3B0aW9uIHN0cmluZyB0byBiZSBhcHBlbmRlZCB0byB0aGUgYmVnaW5uaW5nIG9m
CmVhY2ggZGlyZWN0b3J5IHRoYXQgdGhlIGxpbmtlciBzaG91bGQgc2VhcmNoIGZvciBsaWJy
YXJpZXMuCgpBbm90aGVyIHZhcmlhYmxlLCBDPEVOVj4sIGlzIHVzZWQgdG8gZGV0ZXJtaW5l
IHRoZSBzeXN0ZW0gZW52aXJvbm1lbnQgZHVyaW5nCnRoZSBleGVjdXRpb24gb2YgYW4gZXh0
ZXJuYWwgY29tbWFuZC4gQnkgZGVmYXVsdCwgdGhlIG9ubHkgZW52aXJvbm1lbnQKdmFyaWFi
bGUgdGhhdCBpcyBzZXQgaXMgQzxQQVRIPiwgd2hpY2ggaXMgdGhlIGV4ZWN1dGlvbiBwYXRo
IGZvciBhIFVOSVgKY29tbWFuZC4gRm9yIHRoZSB1dG1vc3QgcmVwcm9kdWNpYmlsaXR5LCB5
b3Ugc2hvdWxkIHJlYWxseSBhcnJhbmdlIHRvIHNldAp5b3VyIG93biBleGVjdXRpb24gcGF0
aCwgaW4geW91ciB0b3AtbGV2ZWwgRjxDb25zdHJ1Y3Q+IGZpbGUgKG9yIHBlcmhhcHMgYnkK
aW1wb3J0aW5nIGFuIGFwcHJvcHJpYXRlIGNvbnN0cnVjdGlvbiBwYWNrYWdlIHdpdGggdGhl
IFBlcmwgQzx1c2U+CmNvbW1hbmQpLiBUaGUgZGVmYXVsdCB2YXJpYWJsZXMgYXJlIGludGVu
ZGVkIHRvIGdldCB5b3Ugb2ZmIHRoZSBncm91bmQuCgo9aGVhZDIgSW50ZXJwb2xhdGluZyBj
b25zdHJ1Y3Rpb24gdmFyaWFibGVzCgpDb25zdHJ1Y3Rpb24gZW52aXJvbm1lbnQgdmFyaWFi
bGVzIG1heSBiZSBpbnRlcnBvbGF0ZWQgaW4gdGhlIHNvdXJjZSBhbmQKdGFyZ2V0IGZpbGUg
bmFtZXMgYnkgcHJlZml4aW5nIHRoZSBjb25zdHJ1Y3Rpb24gdmFyaWFibGUgbmFtZSB3aXRo
IEM8JT4uCgogICRlbnYgPSBuZXcgY29ucygKCURFU1RESVIJPT4JJ3Byb2dyYW1zJywKCVNS
Q0RJUgk9Pgknc3JjJywKICApOwogIFByb2dyYW0gJGVudiAnJURFU1RESVIvaGVsbG8nLCAn
JVNSQ0RJUi9oZWxsby5jJzsKCkV4cGFuc2lvbiBvZiBjb25zdHJ1Y3Rpb24gdmFyaWFibGVz
IGlzIHJlY3Vyc2l2ZS0tdGhhdCBpcywgdGhlIGZpbGUKbmFtZShzKSB3aWxsIGJlIHJlLWV4
cGFuZGVkIHVudGlsIG5vIG1vcmUgc3Vic3RpdHV0aW9ucyBjYW4gYmUgbWFkZS4gSWYKYSBj
b25zdHJ1Y3Rpb24gdmFyaWFibGUgaXMgbm90IGRlZmluZWQgaW4gdGhlIGVudmlyb25tZW50
LCB0aGVuIHRoZSBudWxsCnN0cmluZyB3aWxsIGJlIHN1YnN0aXR1dGVkLgoKPWhlYWQxIERl
ZmF1bHQgY29uc3RydWN0aW9uIG1ldGhvZHMKClRoZSBsaXN0IG9mIGRlZmF1bHQgY29uc3Ry
dWN0aW9uIG1ldGhvZHMgaW5jbHVkZXMgdGhlIGZvbGxvd2luZzoKCgo9aGVhZDIgVGhlIEM8
bmV3PiBjb25zdHJ1Y3RvcgoKVGhlIEM8bmV3PiBtZXRob2QgaXMgYSBQZXJsIG9iamVjdCBj
b25zdHJ1Y3Rvci4gVGhhdCBpcywgaXQgaXMgbm90IGludm9rZWQKdmlhIGEgcmVmZXJlbmNl
IHRvIGFuIGV4aXN0aW5nIGNvbnN0cnVjdGlvbiBlbnZpcm9ubWVudCBCPHJlZmVyZW5jZT4s
IGJ1dCwKcmF0aGVyIHN0YXRpY2FsbHksIHVzaW5nIHRoZSBuYW1lIG9mIHRoZSBQZXJsIEI8
cGFja2FnZT4gd2hlcmUgdGhlCmNvbnN0cnVjdG9yIGlzIGRlZmluZWQuIFRoZSBtZXRob2Qg
aXMgaW52b2tlZCBsaWtlIHRoaXM6CgogICRlbnYgPSBuZXcgY29ucyg8b3ZlcnJpZGVzPik7
CgpUaGUgZW52aXJvbm1lbnQgeW91IGdldCBiYWNrIGlzIGJsZXNzZWQgaW50byB0aGUgcGFj
a2FnZSBDPGNvbnM+LCB3aGljaAptZWFucyB0aGF0IGl0IHdpbGwgaGF2ZSBhc3NvY2lhdGVk
IHdpdGggaXQgdGhlIGRlZmF1bHQgbWV0aG9kcyBkZXNjcmliZWQKYmVsb3cuIEluZGl2aWR1
YWwgY29uc3RydWN0aW9uIHZhcmlhYmxlcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBwcm92aWRp
bmcKbmFtZS92YWx1ZSBwYWlycyBpbiBhbiBvdmVycmlkZSBsaXN0LiBOb3RlIHRoYXQgdG8g
b3ZlcnJpZGUgYW55IGNvbW1hbmQKZW52aXJvbm1lbnQgdmFyaWFibGUgKGkuZS4gYW55dGhp
bmcgdW5kZXIgQzxFTlY+KSwgeW91IHdpbGwgaGF2ZSB0byBvdmVycmlkZQphbGwgb2YgdGhl
bS4gWW91IGNhbiBnZXQgYXJvdW5kIHRoaXMgZGlmZmljdWx0eSBieSB1c2luZyB0aGUgQzxj
b3B5PiBtZXRob2QKb24gYW4gZXhpc3RpbmcgY29uc3RydWN0aW9uIGVudmlyb25tZW50LgoK
Cj1oZWFkMiBUaGUgQzxjbG9uZT4gbWV0aG9kCgpUaGUgQzxjbG9uZT4gbWV0aG9kIGNyZWF0
ZXMgYSBjbG9uZSBvZiBhbiBleGlzdGluZyBjb25zdHJ1Y3Rpb24gZW52aXJvbm1lbnQsCmFu
ZCBjYW4gYmUgY2FsbGVkIGFzIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKCiAgJGVudjIg
PSAkZW52MS0+Y2xvbmUoPG92ZXJyaWRlcz4pOwoKWW91IGNhbiBwcm92aWRlIG92ZXJyaWRl
cyBpbiB0aGUgdXN1YWwgbWFubmVyIHRvIGNyZWF0ZSBhIGRpZmZlcmVudAplbnZpcm9ubWVu
dCBmcm9tIHRoZSBvcmlnaW5hbC4gSWYgeW91IGp1c3Qgd2FudCBhIG5ldyBuYW1lIGZvciB0
aGUgc2FtZQplbnZpcm9ubWVudCAod2hpY2ggbWF5IGJlIGhlbHBmdWwgd2hlbiBleHBvcnRp
bmcgZW52aXJvbm1lbnRzIHRvIGV4aXN0aW5nCmNvbXBvbmVudHMpLCB5b3UgY2FuIGp1c3Qg
dXNlIHNpbXBsZSBhc3NpZ25tZW50LgoKCj1oZWFkMiBUaGUgQzxjb3B5PiBtZXRob2QKClRo
ZSBDPGNvcHk+IG1ldGhvZCBleHRyYWN0cyB0aGUgZXh0ZXJuYWxseSBkZWZpbmVkIGNvbnN0
cnVjdGlvbiB2YXJpYWJsZXMKZnJvbSBhbiBlbnZpcm9ubWVudCBhbmQgcmV0dXJucyB0aGVt
IGFzIGEgbGlzdCBvZiBuYW1lL3ZhbHVlCnBhaXJzLiBPdmVycmlkZXMgY2FuIGFsc28gYmUg
cHJvdmlkZWQsIGluIHdoaWNoIGNhc2UsIHRoZSBvdmVycmlkZGVuIHZhbHVlcwp3aWxsIGJl
IHJldHVybmVkLCBhcyBhcHByb3ByaWF0ZS4gVGhlIHJldHVybmVkIGxpc3QgY2FuIGJlIGFz
c2lnbmVkIHRvIGEKaGFzaCwgYXMgc2hvd24gaW4gdGhlIHByb3RvdHlwZSwgYmVsb3csIGJ1
dCBpdCBjYW4gYWxzbyBiZSBtYW5pcHVsYXRlZCBpbgpvdGhlciB3YXlzOgoKICAlZW52ID0g
JGVudjEtPmNvcHkoPG92ZXJyaWRlcz4pOwoKVGhlIHZhbHVlIG9mIEM8RU5WPiwgd2hpY2gg
aXMgaXRzZWxmIGEgaGFzaCwgaXMgYWxzbyBjb3BpZWQgdG8gYSBuZXcgaGFzaCwKc28gdGhp
cyBtYXkgYmUgY2hhbmdlZCB3aXRob3V0IGZlYXIgb2YgYWZmZWN0aW5nIHRoZSBvcmlnaW5h
bAplbnZpcm9ubWVudC4gU28sIGZvciBleGFtcGxlLCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8g
b3ZlcnJpZGUganVzdCB0aGUKQzxQQVRIPiB2YXJpYWJsZSBpbiB0aGUgZGVmYXVsdCBlbnZp
cm9ubWVudCwgeW91IGNvdWxkIGRvIHRoZSBmb2xsb3dpbmc6CgogICVjb25zID0gbmV3IGNv
bnMoKS0+Y29weSgpOwogICRjb25ze0VOVn17UEFUSH0gPSAiPHlvdXIgcGF0aCBoZXJlPiI7
CiAgJGNvbnMgPSBuZXcgY29ucyglY29ucyk7CgpUaGlzIHdpbGwgbGVhdmUgYW55dGhpbmcg
ZWxzZSB0aGF0IG1pZ2h0IGJlIGluIHRoZSBkZWZhdWx0IGV4ZWN1dGlvbgplbnZpcm9ubWVu
dCB1bmRpc3R1cmJlZC4KCgo9aGVhZDIgVGhlIEM8SW5zdGFsbD4gbWV0aG9kCgpUaGUgQzxJ
bnN0YWxsPiBtZXRob2QgYXJyYW5nZXMgZm9yIHRoZSBzcGVjaWZpZWQgZmlsZXMgdG8gYmUg
aW5zdGFsbGVkIGluCnRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5LiBUaGUgaW5zdGFsbGF0aW9u
IGlzIG9wdGltaXplZDogdGhlIGZpbGUgaXMgbm90CmNvcGllZCBpZiBpdCBjYW4gYmUgbGlu
a2VkLiBJZiB0aGlzIGlzIG5vdCB0aGUgZGVzaXJlZCBiZWhhdmlvciwgeW91IHdpbGwKbmVl
ZCB0byB1c2UgYSBkaWZmZXJlbnQgbWV0aG9kIHRvIGluc3RhbGwgdGhlIGZpbGUuIEl0IGlz
IGNhbGxlZCBhcyBmb2xsb3dzOgoKICBJbnN0YWxsICRlbnYgPGRpcmVjdG9yeT4sIDxuYW1l
cz47CgpOb3RlIHRoYXQsIHdoaWxlIHRoZSBmaWxlcyB0byBiZSBpbnN0YWxsZWQgbWF5IGJl
IGFyYml0cmFyaWx5IG5hbWVkLApvbmx5IHRoZSBsYXN0IGNvbXBvbmVudCBvZiBlYWNoIG5h
bWUgaXMgdXNlZCBmb3IgdGhlIGluc3RhbGxlZCB0YXJnZXQKbmFtZS4gU28sIGZvciBleGFt
cGxlLCBpZiB5b3UgYXJyYW5nZSB0byBpbnN0YWxsIEY8Zm9vL2Jhcj4gaW4gRjxiYXo+LAp0
aGlzIHdpbGwgY3JlYXRlIGEgRjxiYXI+IGZpbGUgaW4gdGhlIEY8YmF6PiBkaXJlY3Rvcnkg
KG5vdCBGPGZvby9iYXI+KS4KCgo9aGVhZDIgVGhlIEM8SW5zdGFsbEFzPiBtZXRob2QKClRo
ZSBDPEluc3RhbGxBcz4gbWV0aG9kIGFycmFuZ2VzIGZvciB0aGUgc3BlY2lmaWVkIHNvdXJj
ZSBmaWxlKHMpIHRvIGJlCmluc3RhbGxlZCBhcyB0aGUgc3BlY2lmaWVkIHRhcmdldCBmaWxl
KHMpLiBNdWx0aXBsZSBmaWxlcyBzaG91bGQgYmUKc3BlY2lmaWVkIGFzIGEgZmlsZSBsaXN0
LiBUaGUgaW5zdGFsbGF0aW9uIGlzIG9wdGltaXplZDogdGhlIGZpbGUgaXMgbm90CmNvcGll
ZCBpZiBpdCBjYW4gYmUgbGlua2VkLiBJZiB0aGlzIGlzIG5vdCB0aGUgZGVzaXJlZCBiZWhh
dmlvciwgeW91IHdpbGwKbmVlZCB0byB1c2UgYSBkaWZmZXJlbnQgbWV0aG9kIHRvIGluc3Rh
bGwgdGhlIGZpbGUuIEl0IGlzIGNhbGxlZCBhcyBmb2xsb3dzOgoKQzxJbnN0YWxsQXM+IHdv
cmtzIGluIHR3byB3YXlzOgoKU2luZ2xlIGZpbGUgaW5zdGFsbDoKCiAgSW5zdGFsbEFzICRl
bnYgVGd0RmlsZSwgU3JjRmlsZTsKCk11bHRpcGxlIGZpbGUgaW5zdGFsbDoKCiAgSW5zdGFs
bEFzICRlbnYgWyd0Z3QxJywgJ3RndDInXSwgWydzcmMxJywgJ3NyYzInXTsKCk9yLCBldmVu
IGFzOgoKICBAc3JjcyA9IHF3KHNyYzEgc3JjMiBzcmMzKTsKICBAdGd0cyA9IHF3KHRndDEg
dGd0MiB0Z3QzKTsKICBJbnN0YWxsQXMgJGVudiBbQHRndHNdLCBbQHNyY3NdOwoKQm90aCB0
aGUgdGFyZ2V0IGFuZCB0aGUgc291cmNlcyBsaXN0cyBzaG91bGQgYmUgb2YgdGhlIHNhbWUg
bGVuZ3RoLgoKPWhlYWQyIFRoZSBDPFByZWNpb3VzPiBtZXRob2QKClRoZSBDPFByZWNpb3Vz
PiBtZXRob2QgYXNrcyBjb25zIG5vdCB0byBkZWxldGUgdGhlIHNwZWNpZmllZCBmaWxlIG9y
Cmxpc3Qgb2YgZmlsZXMgYmVmb3JlIGJ1aWxkaW5nIHRoZW0gYWdhaW4uICBJdCBpcyBpbnZv
a2VkIGFzOgoKICBQcmVjaW91cyA8ZmlsZXM+OwoKVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1
bCBmb3IgYWxsb3dpbmcgaW5jcmVtZW50YWwgdXBkYXRlcyB0byBsaWJyYXJpZXMKb3IgZGVi
dWcgaW5mb3JtYXRpb24gZmlsZXMgd2hpY2ggYXJlIHVwZGF0ZWQgcmF0aGVyIHRoYW4gcmVi
dWlsdCBhbmV3IGVhY2gKdGltZS4gIENvbnMgd2lsbCBzdGlsbCBkZWxldGUgdGhlIGZpbGVz
IHdoZW4gdGhlIEM8LXI+IGZsYWcgaXMgc3BlY2lmaWVkLgoKPWhlYWQyIFRoZSBDPENvbW1h
bmQ+IG1ldGhvZAoKVGhlIEM8Q29tbWFuZD4gbWV0aG9kIGlzIGEgY2F0Y2hhbGwgbWV0aG9k
IHdoaWNoIGNhbiBiZSB1c2VkIHRvIGFycmFuZ2UgZm9yCmFueSBleHRlcm5hbCBjb21tYW5k
IHRvIGJlIGNhbGxlZCB0byB1cGRhdGUgdGhlIHRhcmdldC4gRm9yIHRoaXMgY29tbWFuZCwg
YQp0YXJnZXQgZmlsZSBhbmQgbGlzdCBvZiBpbnB1dHMgaXMgcHJvdmlkZWQuIEluIGFkZGl0
aW9uIGEgY29uc3RydWN0aW9uCmNvbW1hbmQgbGluZSwgb3IgbGluZXMsIGlzIHByb3ZpZGVk
IGFzIGEgc3RyaW5nICh0aGlzIHN0cmluZyBtYXkgaGF2ZQptdWx0aXBsZSBjb21tYW5kcyBl
bWJlZGRlZCB3aXRoaW4gaXQsIHNlcGFyYXRlZCBieSBuZXcgbGluZXMpLiBDPENvbW1hbmQ+
IGlzCmNhbGxlZCBhcyBmb2xsb3dzOgoKICBDb21tYW5kICRlbnYgPHRhcmdldD4sIDxpbnB1
dHM+LCA8Y29uc3RydWN0aW9uIGNvbW1hbmQ+OwoKVGhlIHRhcmdldCBpcyBtYWRlIGRlcGVu
ZGVudCB1cG9uIHRoZSBsaXN0IG9mIGlucHV0IGZpbGVzIHNwZWNpZmllZCwgYW5kIHRoZQpp
bnB1dHMgbXVzdCBiZSBidWlsdCBzdWNjZXNzZnVsbHkgb3IgQ29ucyB3aWxsIG5vdCBhdHRl
bXB0IHRvIGJ1aWxkIHRoZQp0YXJnZXQuCgpXaXRoaW4gdGhlIGNvbnN0cnVjdGlvbiBjb21t
YW5kLCBhbnkgdmFyaWFibGUgZnJvbSB0aGUgY29uc3RydWN0aW9uCmVudmlyb25tZW50IG1h
eSBiZSBpbnRyb2R1Y2VkIGJ5IHByZWZpeGluZyB0aGUgbmFtZSBvZiB0aGUgY29uc3RydWN0
aW9uCnZhcmlhYmxlIHdpdGggQzwlPi4gVGhpcyBpcyByZWN1cnNpdmU6IHRoZSBjb21tYW5k
IGlzIGV4cGFuZGVkIHVudGlsIG5vIG1vcmUKc3Vic3RpdHV0aW9ucyBjYW4gYmUgbWFkZS4g
SWYgYSBjb25zdHJ1Y3Rpb24gdmFyaWFibGUgaXMgbm90IGRlZmluZWQgaW4gdGhlCmVudmly
b25tZW50LCB0aGVuIHRoZSBudWxsIHN0cmluZyB3aWxsIGJlIHN1YnN0aXR1dGVkLiAgQSBk
b3VibGVkIEM8JSU+CndpbGwgYmUgcmVwbGFjZWQgYnkgYSBzaW5nbGUgQzwlPiBpbiB0aGUg
Y29uc3RydWN0aW9uIGNvbW1hbmQuCgpUaGVyZSBhcmUgc2V2ZXJhbCBwc2V1ZG8gdmFyaWFi
bGVzIHdoaWNoIHdpbGwgYWxzbyBiZSBleHBhbmRlZDoKCj1vdmVyIDEwCgo9aXRlbSAlPgoK
VGhlIHRhcmdldCBmaWxlIG5hbWUgKGluIGEgbXVsdGktdGFyZ2V0IGNvbW1hbmQsIHRoaXMg
aXMgYWx3YXlzIHRoZSBmaXJzdAp0YXJnZXQgbWVudGlvbmVkKS4KCj1pdGVtICUwCgpTYW1l
IGFzIEM8JUU8Z3Q+Pi4KCj1pdGVtICUxLCAlMiwgLi4uLCAlOQoKVGhlc2UgcmVmZXIgdG8g
dGhlIGZpcnN0IHRocm91Z2ggbmludGggaW5wdXQgZmlsZSwgcmVzcGVjdGl2ZWx5LgoKPWl0
ZW0gJUU8bHQ+CgpUaGUgZnVsbCBzZXQgb2YgaW5wdXRzLiBJZiBhbnkgb2YgdGhlc2UgaGF2
ZSBiZWVuIHVzZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUKY3VycmVudCBjb21tYW5kIGxpbmUg
KHZpYSBDPCUxPiwgQzwlMj4sIGV0Yy4pLCB0aGVuIHRob3NlIHdpbGwgYmUgZGVsZXRlZApm
cm9tIHRoZSBsaXN0IHByb3ZpZGVkIGJ5IEM8JUU8bHQ+Pi4gQ29uc2lkZXIgdGhlIGZvbGxv
d2luZyBjb21tYW5kIGZvdW5kIGluIGEKRjxDb25zY3JpcHQ+IGZpbGUgaW4gdGhlIEY8dGVz
dD4gZGlyZWN0b3J5OgoKICBDb21tYW5kICRlbnYgJ3RndCcsIHF3KGZvbyBiYXIgYmF6KSwg
cXEoCgllY2hvICU8IC1pICUxID4gJT4KCWVjaG8gJTwgLWkgJTIgPj4gJT4KCWVjaG8gJTwg
LWkgJTMgPj4gJT4KICApOwoKSWYgRjx0Z3Q+IG5lZWRlZCB0byBiZSB1cGRhdGVkLCB0aGVu
IHRoaXMgd291bGQgcmVzdWx0IGluIHRoZSBleGVjdXRpb24gb2YKdGhlIGZvbGxvd2luZyBj
b21tYW5kcywgYXNzdW1pbmcgdGhhdCBubyByZW1hcHBpbmcgaGFzIGJlZW4gZXN0YWJsaXNo
ZWQgZm9yCnRoZSBGPHRlc3Q+IGRpcmVjdG9yeToKCiAgZWNobyB0ZXN0L2JhciB0ZXN0L2Jh
eiAtaSB0ZXN0L2ZvbyA+IHRlc3QvdGd0CiAgZWNobyB0ZXN0L2ZvbyB0ZXN0L2JheiAtaSB0
ZXN0L2JhciA+PiB0ZXN0L3RndAogIGVjaG8gdGVzdC9mb28gdGVzdC9iYXIgLWkgdGVzdC9i
YXogPj4gdGVzdC90Z3QKCj1iYWNrCgpBbnkgb2YgdGhlIGFib3ZlIHBzZXVkbyB2YXJpYWJs
ZXMgbWF5IGJlIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IG9uZSBvZgp0aGUgZm9sbG93aW5n
IHN1ZmZpeGVzIHRvIHNlbGVjdCBhIHBvcnRpb24gb2YgdGhlIGV4cGFuZGVkIHBhdGggbmFt
ZToKCiAgOmEgICAgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGUgbmFtZQogIDpiICAg
IHRoZSBkaXJlY3RvcnkgcGx1cyB0aGUgZmlsZSBuYW1lIHN0cmlwcGVkIG9mIGFueSBzdWZm
aXgKICA6ZCAgICB0aGUgZGlyZWN0b3J5CiAgOmYgICAgdGhlIGZpbGUgbmFtZQogIDpzICAg
IHRoZSBmaWxlIG5hbWUgc3VmZml4CiAgOkYgICAgdGhlIGZpbGUgbmFtZSBzdHJpcHBlZCBv
ZiBhbnkgc3VmZml4CgpDb250aW51aW5nIHdpdGggdGhlIGFib3ZlIGV4YW1wbGUsIEM8JTw6
Zj4gd291bGQgZXhwYW5kIHRvIEM8Zm9vIGJhciBiYXo+LAphbmQgQzwlPjpkPiB3b3VsZCBl
eHBhbmQgdG8gQzx0ZXN0Pi4KCkl0IGlzIHBvc3NpYmxlIHRvIHByb2dyYW1tYXRpY2FsbHkg
cmV3cml0ZSBwYXJ0IG9mIHRoZSBjb21tYW5kIGJ5CmVuY2xvc2luZyBwYXJ0IG9mIGl0IGJl
dHdlZW4gQzwlWz4gYW5kIEM8JV0+LiAgVGhpcyB3aWxsIGNhbGwgdGhlCmNvbnN0cnVjdGlv
biB2YXJpYWJsZSBuYW1lZCBhcyB0aGUgZmlyc3Qgd29yZCBlbmNsb3NlZCBpbiB0aGUgYnJh
Y2tldHMKYXMgYSBQZXJsIGNvZGUgcmVmZXJlbmNlOyB0aGUgcmVzdWx0cyBvZiB0aGlzIGNh
bGwgd2lsbCBiZSB1c2VkIHRvCnJlcGxhY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBicmFja2V0
cyBpbiB0aGUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUsCmdpdmVuIGFuIGV4aXN0aW5n
IGlucHV0IGZpbGUgbmFtZWQgRjx0Z3QuaW4+OgoKICBAa2V5d29yZHMgPSBxdyhmb28gYmFy
IGJheik7CiAgJGVudiA9IG5ldyBjb25zKFhfQ09NTUEgPT4gc3ViIHsgam9pbigiLCIsIEBf
KSB9KTsKICBDb21tYW5kICRlbnYgJ3RndCcsICd0Z3QuaW4nLCBxcSgKCWVjaG8gJyMgS2V5
d29yZHM6ICVbWF9DT01NQSBAa2V5d29yZHMgJV0nID4gJT4KCWNhdCAlPCA+PiAlPgogICk7
CgpUaGlzIHdpbGwgZXhlY3V0ZToKCiAgZWNobyAnIyBLZXl3b3JkczogZm9vLGJhcixiYXon
ID4gdGd0CiAgY2F0IHRndC5pbiA+PiB0Z3QKCkFmdGVyIHN1YnN0aXR1dGlvbiBvY2N1cnMs
IHN0cmluZ3Mgb2Ygd2hpdGUgc3BhY2UgYXJlIGNvbnZlcnRlZCBpbnRvIHNpbmdsZQpibGFu
a3MsIGFuZCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZSBpcyBlbGltaW5hdGVk
LiBJdCBpcyB0aGVyZWZvcmUKbm90IHBvc3NpYmxlIHRvIGludHJvZHVjZSB2YXJpYWJsZSBs
ZW5ndGggd2hpdGUgc3BhY2UgaW4gc3RyaW5ncyBwYXNzZWQgaW50bwphIGNvbW1hbmQsIHdp
dGhvdXQgcmVzb3J0aW5nIHRvIHNvbWUgc29ydCBvZiBzaGVsbCBxdW90aW5nLgoKSWYgYSBt
dWx0aS1saW5lIGNvbW1hbmQgc3RyaW5nIGlzIHByb3ZpZGVkLCB0aGUgY29tbWFuZHMgYXJl
IGV4ZWN1dGVkCnNlcXVlbnRpYWxseS4gSWYgYW55IG9mIHRoZSBjb21tYW5kcyBmYWlscywg
dGhlbiBub25lIG9mIHRoZSByZXN0IGFyZQpleGVjdXRlZCwgYW5kIHRoZSB0YXJnZXQgaXMg
bm90IG1hcmtlZCBhcyB1cGRhdGVkLCBpLmUuIGEgbmV3IHNpZ25hdHVyZSBpcwpub3Qgc3Rv
cmVkIGZvciB0aGUgdGFyZ2V0LgoKTm9ybWFsbHksIGlmIGFsbCB0aGUgY29tbWFuZHMgc3Vj
Y2VlZCwgYW5kIHJldHVybiBhIHplcm8gc3RhdHVzIChvciB3aGF0ZXZlcgpwbGF0Zm9ybS1z
cGVjaWZpYyBpbmRpY2F0aW9uIG9mIHN1Y2Nlc3MgaXMgcmVxdWlyZWQpLCB0aGVuIGEgbmV3
IHNpZ25hdHVyZQppcyBzdG9yZWQgZm9yIHRoZSB0YXJnZXQuIElmIGEgY29tbWFuZCBlcnJv
bmVvdXNseSByZXBvcnRzIHN1Y2Nlc3MgZXZlbgphZnRlciBhIGZhaWx1cmUsIHRoZW4gQ29u
cyB3aWxsIGFzc3VtZSB0aGF0IHRoZSB0YXJnZXQgZmlsZSBjcmVhdGVkIGJ5IHRoYXQKY29t
bWFuZCBpcyBhY2N1cmF0ZSBhbmQgdXAtdG8tZGF0ZS4KClRoZSBmaXJzdCB3b3JkIG9mIGVh
Y2ggY29tbWFuZCBzdHJpbmcsIGFmdGVyIGV4cGFuc2lvbiwgaXMgYXNzdW1lZCB0byBiZSBh
bgpleGVjdXRhYmxlIGNvbW1hbmQgbG9va2VkIHVwIG9uIHRoZSBDPFBBVEg+IGVudmlyb25t
ZW50IHZhcmlhYmxlICh3aGljaCBpcywKaW4gdHVybiwgc3BlY2lmaWVkIGJ5IHRoZSBDPEVO
Vj4gY29uc3RydWN0aW9uIHZhcmlhYmxlKS4gSWYgdGhpcyBjb21tYW5kIGlzCmZvdW5kIG9u
IHRoZSBwYXRoLCB0aGVuIHRoZSB0YXJnZXQgd2lsbCBkZXBlbmQgdXBvbiBpdDogdGhlIGNv
bW1hbmQgd2lsbAp0aGVyZWZvcmUgYmUgYXV0b21hdGljYWxseSBidWlsdCwgYXMgbmVjZXNz
YXJ5LiBJdCdzIHBvc3NpYmxlIHRvIHdyaXRlCm11bHRpLXBhcnQgY29tbWFuZHMgdG8gc29t
ZSBzaGVsbHMsIHNlcGFyYXRlZCBieSBzZW1pLWNvbG9ucy4gT25seSB0aGUgZmlyc3QKY29t
bWFuZCB3b3JkIHdpbGwgYmUgZGVwZW5kZWQgdXBvbiwgaG93ZXZlciwgc28gaWYgeW91IHdy
aXRlIHlvdXIgY29tbWFuZApzdHJpbmdzIHRoaXMgd2F5LCB5b3UgbXVzdCBlaXRoZXIgZXhw
bGljaXRseSBzZXQgdXAgYSBkZXBlbmRlbmN5ICh3aXRoIHRoZQpDPERlcGVuZHM+IG1ldGhv
ZCksIG9yIGJlIHN1cmUgdGhhdCB0aGUgY29tbWFuZCB5b3UgYXJlIHVzaW5nIGlzIGEgc3lz
dGVtCmNvbW1hbmQgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gYmUgYXZhaWxhYmxlLiBJZiBpdCBp
c24ndCBhdmFpbGFibGUsIHlvdSB3aWxsLApvZiBjb3Vyc2UsIGdldCBhbiBlcnJvci4KCklm
IGFueSBjb21tYW5kIChldmVuIG9uZSB3aXRoaW4gYSBtdWx0aS1saW5lIGNvbW1hbmQpIGJl
Z2lucyB3aXRoCkM8W3BlcmxdPiwgdGhlIHJlbWFpbmRlciBvZiB0aGF0IGNvbW1hbmQgbGlu
ZSB3aWxsIGJlIGV2YWx1YXRlZCBieSB0aGUKcnVubmluZyBQZXJsIGluc3RlYWQgb2YgYmVp
bmcgZm9ya2VkIGJ5IHRoZSBzaGVsbC4gIElmIGFuIGVycm9yIG9jY3VycwppbiBwYXJzaW5n
IHRoZSBQZXJsIG9yIGlmIHRoZSBQZXJsIGV4cHJlc3Npb24gcmV0dXJucyAwIG9yIHVuZGVm
LCB0aGUKY29tbWFuZCB3aWxsIGJlIGNvbnNpZGVyZWQgdG8gaGF2ZSBmYWlsZWQuICBGb3Ig
ZXhhbXBsZSwgaGVyZSBpcyBhIHNpbXBsZQpjb21tYW5kIHdoaWNoIGNyZWF0ZXMgYSBmaWxl
IEM8Zm9vPiBkaXJlY3RseSBmcm9tIFBlcmw6CgogICRlbnYgPSBuZXcgY29ucygpOwogIENv
bW1hbmQgJGVudiAnZm9vJywKICAgIHFxKFtwZXJsXSBvcGVuKEZPTywnPmZvbycpO3ByaW50
IEZPTyAiaGlcXG4iOyBjbG9zZShGT08pOyAxKTsKCk5vdGUgdGhhdCB3aGVuIHRoZSBjb21t
YW5kIGlzIGV4ZWN1dGVkLCB5b3UgYXJlIGluIHRoZSBzYW1lIHBhY2thZ2UgYXMKd2hlbiB0
aGUgRjxDb25zdHJ1Y3Q+IG9yIEY8Q29uc2NyaXB0PiBmaWxlIHdhcyByZWFkLCBzbyB5b3Ug
Y2FuIGNhbGwKUGVybCBmdW5jdGlvbnMgeW91J3ZlIGRlZmluZWQgaW4gdGhlIHNhbWUgRjxD
b25zdHJ1Y3Q+IG9yIEY8Q29uc2NyaXB0PgpmaWxlIGluIHdoaWNoIHRoZSBDPENvbW1hbmQ+
IGFwcGVhcnM6CgogICRlbnYgPSBuZXcgY29ucygpOwogIHN1YiBjcmVhdGVfZmlsZSB7Cglt
eSAkZmlsZSA9IHNoaWZ0OwoJb3BlbihGSUxFLCAiPiRmaWxlIik7CglwcmludCBGSUxFICJo
aVxuIjsKCWNsb3NlKEZJTEUpOwoJcmV0dXJuIDE7CiAgfQogIENvbW1hbmQgJGVudiAnZm9v
JywgIltwZXJsXSAmY3JlYXRlX2ZpbGUoJyU+JykiOwoKVGhlIFBlcmwgc3RyaW5nIHdpbGwg
YmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgc2lnbmF0dXJlIGZvciB0aGUgZGVyaXZlZApmaWxl
LCBzbyBpZiB5b3UgY2hhbmdlIHRoZSBzdHJpbmcsIHRoZSBmaWxlIHdpbGwgYmUgcmVidWls
dC4gIFRoZSBjb250ZW50cwpvZiBhbnkgc3Vicm91dGluZXMgeW91IGNhbGwsIGhvd2V2ZXIs
IGFyZSBub3QgcGFydCBvZiB0aGUgc2lnbmF0dXJlLApzbyBpZiB5b3UgbW9kaWZ5IGEgY2Fs
bGVkIHN1YnJvdXRpbmUgc3VjaCBhcyBDPGNyZWF0ZV9maWxlPiBhYm92ZSwKdGhlIHRhcmdl
dCB3aWxsIEk8bm90PiBiZSByZWJ1aWx0LiAgQ2F2ZWF0IHVzZXIuCgpDb25zIG5vcm1hbGx5
IHByaW50cyBhIGNvbW1hbmQgYmVmb3JlIGV4ZWN1dGluZyBpdC4gIFRoaXMgYmVoYXZpb3Ig
aXMKc3VwcHJlc3NlZCBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBjb21tYW5kIGlz
IEM8QD4uICBOb3RlIHRoYXQKeW91IG1heSBuZWVkIHRvIHNlcGFyYXRlIHRoZSBDPEA+IGZy
b20gdGhlIGNvbW1hbmQgbmFtZSBvciBlc2NhcGUgaXQgdG8KcHJldmVudCBDPEBjbWQ+IGZy
b20gbG9va2luZyBsaWtlIGFuIGFycmF5IHRvIFBlcmwgcXVvdGUgb3BlcmF0b3JzIHRoYXQK
cGVyZm9ybSBpbnRlcnBvbGF0aW9uOgoKICAjIFRoZSBmaXJzdCBjb21tYW5kIGxpbmUgaXMg
aW5jb3JyZWN0LAogICMgYmVjYXVzZSAiQGNwIiBsb29rcyBsaWtlIGFuIGFycmF5CiAgIyB0
byB0aGUgUGVybCBxcS8vIGZ1bmN0aW9uLgogICMgVXNlIHRoZSBzZWNvbmQgZm9ybSBpbnN0
ZWFkLgogIENvbW1hbmQgJGVudiAnZm9vJywgJ2Zvby5pbicsIHFxKAoJQGNwICU8IHRlbXBm
aWxlCglAIGNwIHRlbXBmaWxlICU+CiAgKTsKCklmIHRoZXJlIGFyZSBzaGVsbCBtZXRhIGNo
YXJhY3RlcnMgYW55d2hlcmUgaW4gdGhlIGV4cGFuZGVkIGNvbW1hbmQgbGluZSwKc3VjaCBh
cyBDPEU8bHQ+PiwgQzxFPGd0Pj4sIHF1b3Rlcywgb3Igc2VtaS1jb2xvbiwgdGhlbiB0aGUg
Y29tbWFuZAp3aWxsIGFjdHVhbGx5IGJlIGV4ZWN1dGVkIGJ5IGludm9raW5nIGEgc2hlbGwu
IFRoaXMgbWVhbnMgdGhhdCBhIGNvbW1hbmQKc3VjaCBhczoKCiAgY2QgZm9vCgphbG9uZSB3
aWxsIHR5cGljYWxseSBmYWlsLCBzaW5jZSB0aGVyZSBpcyBubyBjb21tYW5kIEM8Y2Q+IG9u
IHRoZSBwYXRoLiBCdXQKdGhlIGNvbW1hbmQgc3RyaW5nOgoKICBjZCAkPDpkOyB0YXIgY2Yg
JD46ZiAkPDpmCgp3aGVuIGV4cGFuZGVkIHdpbGwgc3RpbGwgY29udGFpbiB0aGUgc2hlbGwg
bWV0YSBjaGFyYWN0ZXIgc2VtaS1jb2xvbiwgYW5kIGEKc2hlbGwgd2lsbCBiZSBpbnZva2Vk
IHRvIGludGVycHJldCB0aGUgY29tbWFuZC4gU2luY2UgQzxjZD4gaXMgaW50ZXJwcmV0ZWQK
YnkgdGhpcyBzdWItc2hlbGwsIHRoZSBjb21tYW5kIHdpbGwgZXhlY3V0ZSBhcyBleHBlY3Rl
ZC4KClRvIHNwZWNpZnkgYSBjb21tYW5kIHdpdGggbXVsdGlwbGUgdGFyZ2V0cywgeW91IGNh
biBzcGVjaWZ5IGEgcmVmZXJlbmNlIHRvIGEKbGlzdCBvZiB0YXJnZXRzLiBJbiBQZXJsLCBh
IGxpc3QgcmVmZXJlbmNlIGNhbiBiZSBjcmVhdGVkIGJ5IGVuY2xvc2luZyBhCmxpc3QgaW4g
c3F1YXJlIGJyYWNrZXRzLiBIZW5jZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CgogIENvbW1h
bmQgJGVudiBbJ2Zvby5oJywgJ2Zvby5jJ10sICdmb28udGVtcGxhdGUnLCBxKAoJZ2VuICUx
CiAgKTsKCmNvdWxkIGJlIHVzZWQgaW4gYSBjYXNlIHdoZXJlIHRoZSBjb21tYW5kIEM8Z2Vu
PiBjcmVhdGVzIHR3byBmaWxlcywgYm90aApGPGZvby5oPiBhbmQgRjxmb28uYz4uCgoKPWhl
YWQyIFRoZSBDPE9iamVjdHM+IG1ldGhvZAoKVGhlIEM8T2JqZWN0cz4gbWV0aG9kIGFycmFu
Z2VzIHRvIGNyZWF0ZSB0aGUgb2JqZWN0IGZpbGVzIHRoYXQgY29ycmVzcG9uZCB0bwp0aGUg
c3BlY2lmaWVkIHNvdXJjZSBmaWxlcy4gSXQgaXMgaW52b2tlZCBhcyBzaG93biBiZWxvdzoK
CiAgQGZpbGVzID0gT2JqZWN0cyAkZW52IDxzb3VyY2Ugb3Igb2JqZWN0IGZpbGVzPjsKClVu
ZGVyIFVuaXgsIHNvdXJjZSBmaWxlcyBlbmRpbmcgaW4gRjwucz4gYW5kIEY8LmM+IGFyZSBj
dXJyZW50bHkKc3VwcG9ydGVkLCBhbmQgd2lsbCBiZSBjb21waWxlZCBpbnRvIGEgbmFtZSBv
ZiB0aGUgc2FtZSBmaWxlIGVuZGluZwppbiBGPC5vPi4gQnkgZGVmYXVsdCwgYWxsIGZpbGVz
IGFyZSBjcmVhdGVkIGJ5IGludm9raW5nIHRoZSBleHRlcm5hbApjb21tYW5kIHdoaWNoIHJl
c3VsdHMgZnJvbSBleHBhbmRpbmcgdGhlIEM8Q0NDT00+IGNvbnN0cnVjdGlvbgp2YXJpYWJs
ZSwgd2l0aCBDPCVFPGx0Pj4gYW5kIEM8JUU8Z3Q+PiBzZXQgdG8gdGhlIHNvdXJjZSBhbmQg
b2JqZWN0CmZpbGVzLCByZXNwZWN0aXZlbHkgKHNlZSB0aGUgQzxDb21tYW5kPiBtZXRob2Qg
Zm9yIGV4cGFuc2lvbiBkZXRhaWxzKS4KVGhlIHZhcmlhYmxlIEM8Q1BQUEFUSD4gaXMgYWxz
byB1c2VkIHdoZW4gc2Nhbm5pbmcgc291cmNlIGZpbGVzIGZvcgpkZXBlbmRlbmNpZXMuIFRo
aXMgaXMgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBwYXRobmFtZXMsIGFuZCBpcyBhbHNv
CnVzZWQgdG8gY3JlYXRlIHRoZSBjb25zdHJ1Y3Rpb24gdmFyaWFibGUgQzxfSUZMQUdTLD4g
d2hpY2ggd2lsbCBjb250YWluCnRoZSBhcHByb3ByaWF0ZSBsaXN0IG9mIC1DPEk+IG9wdGlv
bnMgZm9yIHRoZSBjb21waWxhdGlvbi4gQW55IHJlbGF0aXZlCnBhdGhuYW1lcyBpbiBDPENQ
UFBBVEg+IGlzIGludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgaW4Kd2hp
Y2ggdGhlIGFzc29jaWF0ZWQgY29uc3RydWN0aW9uIGVudmlyb25tZW50IHdhcyBjcmVhdGVk
IChhYnNvbHV0ZQphbmQgdG9wLXJlbGF0aXZlIG5hbWVzIG1heSBhbHNvIGJlIHVzZWQpLiBU
aGlzIHZhcmlhYmxlIGlzIHVzZWQgYnkKQzxDQ0NPTT4uIFRoZSBiZWhhdmlvciBvZiB0aGlz
IGNvbW1hbmQgY2FuIGJlIG1vZGlmaWVkIGJ5IGNoYW5naW5nIGFueQpvZiB0aGUgdmFyaWFi
bGVzIHdoaWNoIGFyZSBpbnRlcnBvbGF0ZWQgaW50byBDPENDQ09NPiwgc3VjaCBhcyBDPEND
PiwKQzxDRkxBR1M+LCBhbmQsIGluZGlyZWN0bHksIEM8Q1BQUEFUSD4uIEl0J3MgYWxzbyBw
b3NzaWJsZSB0byByZXBsYWNlCnRoZSB2YWx1ZSBvZiBDPENDQ09NPiwgaXRzZWxmLiBBcyBh
IGNvbnZlbmllbmNlLCB0aGlzIGZpbGUgcmV0dXJucyB0aGUKbGlzdCBvZiBvYmplY3QgZmls
ZW5hbWVzLgoKCj1oZWFkMiBUaGUgQzxQcm9ncmFtPiBtZXRob2QKClRoZSBDPFByb2dyYW0+
IG1ldGhvZCBhcnJhbmdlcyB0byBsaW5rIHRoZSBzcGVjaWZpZWQgcHJvZ3JhbSB3aXRoIHRo
ZQpzcGVjaWZpZWQgb2JqZWN0IGZpbGVzLiBJdCBpcyBpbnZva2VkIGluIHRoZSBmb2xsb3dp
bmcgbWFubmVyOgoKICBQcm9ncmFtICRlbnYgPHByb2dyYW0gbmFtZT4sIDxzb3VyY2Ugb3Ig
b2JqZWN0IGZpbGVzPjsKClRoZSBwcm9ncmFtIG5hbWUgd2lsbCBoYXZlIHRoZSB2YWx1ZSBv
ZiB0aGUgQzxTVUZFWEU+IGNvbnN0cnVjdGlvbgp2YXJpYWJsZSBhcHBlbmRlZCAoYnkgZGVm
YXVsdCwgQzwuZXhlPiBvbiBXaW4zMiBzeXN0ZW1zLCBub3RoaW5nIG9uIFVuaXgKc3lzdGVt
cykgaWYgdGhlIHN1ZmZpeCBpcyBub3QgYWxyZWFkeSBwcmVzZW50LgoKU291cmNlIGZpbGVz
IG1heSBiZSBzcGVjaWZpZWQgaW4gcGxhY2Ugb2Ygb2JqZWN0cyBmaWxlcy0tdGhlIEM8T2Jq
ZWN0cz4KbWV0aG9kIHdpbGwgYmUgaW52b2tlZCB0byBhcnJhbmdlIHRoZSBjb252ZXJzaW9u
IG9mIGFsbCB0aGUgZmlsZXMgaW50bwpvYmplY3QgZmlsZXMsIGFuZCBoZW5jZSBhbGwgdGhl
IG9ic2VydmF0aW9ucyBhYm91dCB0aGUgQzxPYmplY3RzPiBtZXRob2QsCmFib3ZlLCBhcHBs
eSB0byB0aGlzIG1ldGhvZCBhbHNvLgoKVGhlIGFjdHVhbCBsaW5raW5nIG9mIHRoZSBwcm9n
cmFtIHdpbGwgYmUgaGFuZGxlZCBieSBhbiBleHRlcm5hbCBjb21tYW5kCndoaWNoIHJlc3Vs
dHMgZnJvbSBleHBhbmRpbmcgdGhlIEM8TElOS0NPTT4gY29uc3RydWN0aW9uIHZhcmlhYmxl
LCB3aXRoCkM8JUU8bHQ+PiBzZXQgdG8gdGhlIG9iamVjdCBmaWxlcyB0byBiZSBsaW5rZWQg
KGluIHRoZSBvcmRlciBwcmVzZW50ZWQpLAphbmQgQzwlRTxndD4+IHNldCB0byB0aGUgdGFy
Z2V0IChzZWUgdGhlIEM8Q29tbWFuZD4gbWV0aG9kIGZvciBleHBhbnNpb24KZGV0YWlscyku
IFRoZSB1c2VyIG1heSBzZXQgYWRkaXRpb25hbCB2YXJpYWJsZXMgaW4gdGhlIGNvbnN0cnVj
dGlvbgplbnZpcm9ubWVudCwgaW5jbHVkaW5nIEM8TElOSz4sIHRvIGRlZmluZSB3aGljaCBw
cm9ncmFtIHRvIHVzZSBmb3IKbGlua2luZywgQzxMSUJQQVRIPiwgYSBjb2xvbi1zZXBhcmF0
ZWQgbGlzdCBvZiBsaWJyYXJ5IHNlYXJjaCBwYXRocywKZm9yIHVzZSB3aXRoIGxpYnJhcnkg
c3BlY2lmaWNhdGlvbnMgb2YgdGhlIGZvcm0gSTwtbGxpYj4sIGFuZCBDPExJQlM+LApzcGVj
aWZ5aW5nIHRoZSBsaXN0IG9mIGxpYnJhcmllcyB0byBsaW5rIGFnYWluc3QgKGluIGVpdGhl
ciBJPC1sbGliPgpmb3JtIG9yIGp1c3QgYXMgcGF0aG5hbWVzLiBSZWxhdGl2ZSBwYXRobmFt
ZXMgaW4gYm90aCBDPExJQlBBVEg+IGFuZApDPExJQlM+IGFyZSBpbnRlcnByZXRlZCByZWxh
dGl2ZSB0byB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBhc3NvY2lhdGVkCmNvbnN0cnVj
dGlvbiBlbnZpcm9ubWVudCBpcyBjcmVhdGVkIChhYnNvbHV0ZSBhbmQgdG9wLXJlbGF0aXZl
IG5hbWVzIG1heQphbHNvIGJlIHVzZWQpLiBDb25zIGF1dG9tYXRpY2FsbHkgc2V0cyB1cCBk
ZXBlbmRlbmNpZXMgb24gYW55IGxpYnJhcmllcwptZW50aW9uZWQgaW4gQzxMSUJTPjogdGhv
c2UgbGlicmFyaWVzIHdpbGwgYmUgYnVpbHQgYmVmb3JlIHRoZSBjb21tYW5kCmlzIGxpbmtl
ZC4KCgo9aGVhZDIgVGhlIEM8TGlicmFyeT4gbWV0aG9kCgpUaGUgQzxMaWJyYXJ5PiBtZXRo
b2QgYXJyYW5nZXMgdG8gY3JlYXRlIHRoZSBzcGVjaWZpZWQgbGlicmFyeSBmcm9tIHRoZQpz
cGVjaWZpZWQgb2JqZWN0IGZpbGVzLiBJdCBpcyBpbnZva2VkIGFzIGZvbGxvd3M6CgogIExp
YnJhcnkgJGVudiA8bGlicmFyeSBuYW1lPiwgPHNvdXJjZSBvciBvYmplY3QgZmlsZXM+OwoK
VGhlIGxpYnJhcnkgbmFtZSB3aWxsIGhhdmUgdGhlIHZhbHVlIG9mIHRoZSBDPFNVRkxJQj4g
Y29uc3RydWN0aW9uCnZhcmlhYmxlIGFwcGVuZGVkIChieSBkZWZhdWx0LCBDPC5saWI+IG9u
IFdpbjMyIHN5c3RlbXMsIEM8LmE+IG9uIFVuaXgKc3lzdGVtcykgaWYgdGhlIHN1ZmZpeCBp
cyBub3QgYWxyZWFkeSBwcmVzZW50LgoKU291cmNlIGZpbGVzIG1heSBiZSBzcGVjaWZpZWQg
aW4gcGxhY2Ugb2Ygb2JqZWN0cyBmaWxlcy0tdGhlIEM8T2JqZWN0cz4KbWV0aG9kIHdpbGwg
YmUgaW52b2tlZCB0byBhcnJhbmdlIHRoZSBjb252ZXJzaW9uIG9mIGFsbCB0aGUgZmlsZXMg
aW50bwpvYmplY3QgZmlsZXMsIGFuZCBoZW5jZSBhbGwgdGhlIG9ic2VydmF0aW9ucyBhYm91
dCB0aGUgQzxPYmplY3RzPiBtZXRob2QsCmFib3ZlLCBhcHBseSB0byB0aGlzIG1ldGhvZCBh
bHNvLgoKVGhlIGFjdHVhbCBjcmVhdGlvbiBvZiB0aGUgbGlicmFyeSB3aWxsIGJlIGhhbmRs
ZWQgYnkgYW4gZXh0ZXJuYWwKY29tbWFuZCB3aGljaCByZXN1bHRzIGZyb20gZXhwYW5kaW5n
IHRoZSBDPEFSQ09NPiBjb25zdHJ1Y3Rpb24gdmFyaWFibGUsCndpdGggQzwlRTxsdD4+IHNl
dCB0byB0aGUgbGlicmFyeSBtZW1iZXJzIChpbiB0aGUgb3JkZXIgcHJlc2VudGVkKSwKYW5k
IEM8JUU8Z3Q+PiB0byB0aGUgbGlicmFyeSB0byBiZSBjcmVhdGVkIChzZWUgdGhlIEM8Q29t
bWFuZD4gbWV0aG9kCmZvciBleHBhbnNpb24gZGV0YWlscykuIFRoZSB1c2VyIG1heSBzZXQg
dmFyaWFibGVzIGluIHRoZSBjb25zdHJ1Y3Rpb24KZW52aXJvbm1lbnQgd2hpY2ggd2lsbCBh
ZmZlY3QgdGhlIG9wZXJhdGlvbiBvZiB0aGUgY29tbWFuZC4gVGhlc2UKaW5jbHVkZSBDPEFS
PiwgdGhlIGFyY2hpdmUgcHJvZ3JhbSB0byB1c2UsIEM8QVJGTEFHUz4sIHdoaWNoIGNhbiBi
ZQp1c2VkIHRvIG1vZGlmeSB0aGUgZmxhZ3MgZ2l2ZW4gdG8gdGhlIHByb2dyYW0gc3BlY2lm
aWVkIGJ5IEM8QVI+LCBhbmQKQzxSQU5MSUI+LCB0aGUgbmFtZSBvZiBhIGFyY2hpdmUgaW5k
ZXggZ2VuZXJhdGlvbiBwcm9ncmFtLCBpZiBuZWVkZWQKKGlmIHRoZSBwYXJ0aWN1bGFyIG5l
ZWQgZG9lcyBub3QgcmVxdWlyZSB0aGUgbGF0dGVyIGZ1bmN0aW9uYWxpdHksCnRoZW4gQzxB
UkNPTT4gbXVzdCBiZSByZWRlZmluZWQgdG8gbm90IHJlZmVyZW5jZSBDPFJBTkxJQj4pLgoK
VGhlIEM8TGlicmFyeT4gbWV0aG9kIGFsbG93cyB0aGUgc2FtZSBsaWJyYXJ5IHRvIGJlIHNw
ZWNpZmllZCBpbiBtdWx0aXBsZQptZXRob2QgaW52b2NhdGlvbnMuIEFsbCBvZiB0aGUgY29u
dHJpYnV0aW5nIG9iamVjdHMgZnJvbSBhbGwgdGhlIGludm9jYXRpb25zCih3aGljaCBtYXkg
YmUgZnJvbSBkaWZmZXJlbnQgZGlyZWN0b3JpZXMpIGFyZSBjb21iaW5lZCBhbmQgZ2VuZXJh
dGVkIGJ5IGEKc2luZ2xlIGFyY2hpdmUgY29tbWFuZC4gTm90ZSwgaG93ZXZlciwgdGhhdCBp
ZiB5b3UgcHJ1bmUgYSBidWlsZCBzbyB0aGF0Cm9ubHkgcGFydCBvZiBhIGxpYnJhcnkgaXMg
c3BlY2lmaWVkLCB0aGVuIG9ubHkgdGhhdCBwYXJ0IG9mIHRoZSBsaWJyYXJ5IHdpbGwKYmUg
Z2VuZXJhdGVkICh0aGUgcmVzdCB3aWxsIGRpc2FwcGVhciEpLgoKCj1oZWFkMiBUaGUgQzxN
b2R1bGU+IG1ldGhvZAoKVGhlIEM8TW9kdWxlPiBtZXRob2QgaXMgYSBjb21iaW5hdGlvbiBv
ZiB0aGUgQzxQcm9ncmFtPiBhbmQgQzxDb21tYW5kPgptZXRob2RzLiBSYXRoZXIgdGhhbiBn
ZW5lcmF0aW5nIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBkaXJlY3RseSwgdGhpcyBjb21tYW5k
CmFsbG93cyB5b3UgdG8gc3BlY2lmeSB5b3VyIG93biBjb21tYW5kIHRvIGFjdHVhbGx5IGdl
bmVyYXRlIGEgbW9kdWxlLiBUaGUKbWV0aG9kIGlzIGludm9rZWQgYXMgZm9sbG93czoKCiAg
TW9kdWxlICRlbnYgPG1vZHVsZSBuYW1lPiwgPHNvdXJjZSBvciBvYmplY3QgZmlsZXM+LCA8
Y29uc3RydWN0aW9uIGNvbW1hbmQ+OwoKVGhpcyBjb21tYW5kIGlzIHVzZWZ1bCBpbiBpbnN0
YW5jZXMgd2hlcmUgeW91IHdpc2ggdG8gY3JlYXRlLCBmb3IgZXhhbXBsZSwKZHluYW1pY2Fs
bHkgbG9hZGVkIG1vZHVsZXMsIG9yIHN0YXRpY2FsbHkgbGlua2VkIGNvZGUgbGlicmFyaWVz
LgoKCj1oZWFkMiBUaGUgQzxEZXBlbmRzPiBtZXRob2QKClRoZSBDPERlcGVuZHM+IG1ldGhv
ZCBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMgZm9yIGEK
dGFyZ2V0LiAgSXQgaXMgaW52b2tlZCBhcyBmb2xsb3dzOgoKICBEZXBlbmRzICRlbnYgPHRh
cmdldD4sIDxkZXBlbmRlbmNpZXM+OwoKVGhpcyBtYXkgYmUgb2NjYXNpb25hbGx5IHVzZWZ1
bCwgZXNwZWNpYWxseSBpbiBjYXNlcyB3aGVyZSBubyBzY2FubmVyIGV4aXN0cwoob3IgaXMg
d3JpdGFibGUpIGZvciBwYXJ0aWN1bGFyIHR5cGVzIG9mIGZpbGVzLiBOb3JtYWxseSwgZGVw
ZW5kZW5jaWVzIGFyZQpjYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBhIGNvbWJpbmF0
aW9uIG9mIHRoZSBleHBsaWNpdCBkZXBlbmRlbmNpZXMgc2V0CnVwIGJ5IHRoZSBtZXRob2Qg
aW52b2NhdGlvbiBvciBieSBzY2FubmluZyBzb3VyY2UgZmlsZXMuCgpBIHNldCBvZiBpZGVu
dGljYWwgZGVwZW5kZW5jaWVzIGZvciBtdWx0aXBsZSB0YXJnZXRzIG1heSBiZSBzcGVjaWZp
ZWQKdXNpbmcgYSByZWZlcmVuY2UgdG8gYSBsaXN0IG9mIHRhcmdldHMuIEluIFBlcmwsIGEg
bGlzdCByZWZlcmVuY2UgY2FuCmJlIGNyZWF0ZWQgYnkgZW5jbG9zaW5nIGEgbGlzdCBpbiBz
cXVhcmUgYnJhY2tldHMuIEhlbmNlIHRoZSBmb2xsb3dpbmcKY29tbWFuZDoKCiAgRGVwZW5k
cyAkZW52IFsnZm9vJywgJ2JhciddLCAnaW5wdXRfZmlsZV8xJywgJ2lucHV0X2ZpbGVfMic7
CgpzcGVjaWZpZXMgdGhhdCBib3RoIHRoZSBGPGZvbz4gYW5kIEY8YmFyPiBmaWxlcyBkZXBl
bmQgb24gdGhlIGxpc3RlZAppbnB1dCBmaWxlcy4KCgo9aGVhZDIgVGhlIEM8SWdub3JlPiBt
ZXRob2QKClRoZSBDPElnbm9yZT4gbWV0aG9kIGFsbG93cyB5b3UgdG8gaWdub3JlIGV4cGxp
Y2l0bHkgZGVwZW5kZW5jaWVzIHRoYXQKQ29ucyBpbmZlcnMgb24gaXRzIG93bi4gIEl0IGlz
IGludm9rZWQgYXMgZm9sbG93czoKCiAgSWdub3JlIDxwYXR0ZXJucz47CgpUaGlzIGNhbiBi
ZSB1c2VkIHRvIGF2b2lkIHJlY29tcGlsYXRpb25zIGR1ZSB0byBjaGFuZ2VzIGluIHN5c3Rl
bSBoZWFkZXIKZmlsZXMgb3IgdXRpbGl0aWVzIHRoYXQgYXJlIGtub3duIHRvIG5vdCBhZmZl
Y3QgdGhlIGdlbmVyYXRlZCB0YXJnZXRzLgoKSWYsIGZvciBleGFtcGxlLCBhIHByb2dyYW0g
aXMgYnVpbHQgaW4gYW4gTkZTLW1vdW50ZWQgZGlyZWN0b3J5IG9uCm11bHRpcGxlIHN5c3Rl
bXMgdGhhdCBoYXZlIGRpZmZlcmVudCBjb3BpZXMgb2YgRjxzdGRpby5oPiwgdGhlIGRpZmZl
cmVuY2VzCndpbGwgYWZmZWN0IHRoZSBzaWduYXR1cmVzIG9mIGFsbCBkZXJpdmVkIHRhcmdl
dHMgYnVpbHQgZnJvbSBzb3VyY2UgZmlsZXMKdGhhdCBDPCNpbmNsdWRlIEU8bHQ+c3RkaW8u
aEU8Z3Q+Pi4gIFRoaXMgd2lsbCBjYXVzZSBhbGwgdGhvc2UgdGFyZ2V0cyB0bwpiZSByZWJ1
aWx0IHdoZW4gY2hhbmdpbmcgc3lzdGVtcy4gIElmIHRoaXMgaXMgbm90IGRlc2lyYWJsZSBi
ZWhhdmlvciwgdGhlbgp0aGUgZm9sbG93aW5nIGxpbmUgd2lsbCByZW1vdmUgdGhlIGRlcGVu
ZGVuY2llcyBvbiB0aGUgRjxzdGRpby5oPiBmaWxlOgoKICBJZ25vcmUgJ14vdXNyL2luY2x1
ZGUvc3RkaW9cLmgkJzsKCk5vdGUgdGhhdCB0aGUgYXJndW1lbnRzIHRvIHRoZSBDPElnbm9y
ZT4gbWV0aG9kIGFyZSByZWd1bGFyIGV4cHJlc3Npb25zLApzbyBzcGVjaWFsIGNoYXJhY3Rl
cnMgbXVzdCBiZSBlc2NhcGVkIGFuZCB5b3UgbWF5IHdpc2ggdG8gYW5jaG9yIHRoZQpiZWdp
bm5pbmcgb3IgZW5kIG9mIHRoZSBleHByZXNzaW9uIHdpdGggQzxePiBvciBDPCQ+IGNoYXJh
Y3RlcnMuCgoKPWhlYWQyIFRoZSBDPFNhbHQ+IG1ldGhvZAoKVGhlIEM8U2FsdD4gbWV0aG9k
IGFkZHMgYSBjb25zdGFudCB2YWx1ZSB0byB0aGUgc2lnbmF0dXJlIGNhbGN1bGF0aW9uCmZv
ciBldmVyeSBkZXJpdmVkIGZpbGUuICBJdCBpcyBpbnZva2VkIGFzIGZvbGxvd3M6CgogIFNh
bHQgJHN0cmluZzsKCkNoYW5naW5nIHRoZSBTYWx0IHZhbHVlIHdpbGwgZm9yY2UgYSBjb21w
bGV0ZSByZWJ1aWxkIG9mIGV2ZXJ5IGRlcml2ZWQKZmlsZS4gIFRoaXMgY2FuIGJlIHVzZWQg
dG8gZm9yY2UgcmVidWlsZHMgaW4gY2VydGFpbiBkZXNpcmVkCmNpcmN1bXN0YW5jZXMuICBG
b3IgZXhhbXBsZSwKCiAgU2FsdCBgdW5hbWUgLXNgOwoKV291bGQgZm9yY2UgYSBjb21wbGV0
ZSByZWJ1aWxkIG9mIGV2ZXJ5IGRlcml2ZWQgZmlsZSB3aGVuZXZlciB0aGUKb3BlcmF0aW5n
IHN5c3RlbSBvbiB3aGljaCB0aGUgYnVpbGQgaXMgcGVyZm9ybWVkIChhcyByZXBvcnRlZCBi
eSBDPHVuYW1lCi1zPikgY2hhbmdlcy4KCgo9aGVhZDIgVGhlIEM8VXNlQ2FjaGU+IG1ldGhv
ZAoKVGhlIEM8VXNlQ2FjaGU+IG1ldGhvZCBpbnN0cnVjdHMgQ29ucyB0byBtYWludGFpbiBh
IGNhY2hlIG9mIGRlcml2ZWQKZmlsZXMsIHRvIGJlIHNoYXJlZCBhbW9uZyBzZXBhcmF0ZSBi
dWlsZCB0cmVlcyBvZiB0aGUgc2FtZSBwcm9qZWN0LgoKICBVc2VDYWNoZSgiY2FjaGUvPGJ1
aWxkbmFtZT4iKSB8fCB3YXJuKCJjYWNoZSBkaXJlY3Rvcnkgbm90IGZvdW5kIik7CgpUaGUg
Y2FjaGUgd29ya3MgYnkgY29tcHV0aW5nIHRoZSBNRDUgc3VtIG9mIHRoZSBpbnB1dHMgb2Yg
YW55IGdpdmVuIHRhcmdldCwKYW5kIHN0b3JpbmcgdGhlIHJlc3VsdCBvZiB0aGUgYnVpbGQg
aW4gdGhlIGNhY2hlIGtleWVkIGJ5IHRoZSBNRDUgc3VtLgpPbiBhIHN1YnNlcXVlbnQgYnVp
bGQsIGlmIHRoZSBNRDUgc3VtIG9mIHRoZSBpbnB1dCB0byBhIHRhcmdldCBpcyBmb3VuZAp0
byBhbHJlYWR5IGV4aXN0IGluIHRoZSBjYWNoZSwgdGhlIHJlc3VsdCBpcyByZXRyaWV2ZWQg
ZnJvbSB0aGUgY2FjaGUsCnJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlIChhc3N1bWVkbHkpIGxv
bmdlciBjb21tYW5kLgoKQXMgYSBzZWNvbmQgYXJndW1lbnQsIEM8VXNlQ2FjaGU+IGNhbiB0
YWtlIGEgbW9kaWZpZXIgdG8gY2hhbmdlIHRoZSB3YXkgdGhhdAp0aGUgTUQ1IHN1bSBpcyBj
YWxjdWxhdGVkIGZvciBjYWNoaW5nIHB1cnBvc2VzLiAgQnkgZGVmYXVsdCwgdGhlIE1ENSBz
dW0KdXNlcyBhbGwgb2YgdGhlIGlucHV0cyB0byB0aGUgdGFyZ2V0LCBwbHVzIHRoZSBuYW1l
IG9mIHRoZSB0YXJnZXQgYXMgaW5wdXQuCgpDdXJyZW50bHkgc3VwcG9ydGVkIG1vZGlmaWVy
cyBpbmNsdWRlOgoKPW92ZXIgNAoKPWl0ZW0gcGFydGlhbG1peDpyZWdleAoKV2hlbiBwYXJ0
aWFsbWl4IGlzIGVuYWJsZWQsIHRoZSB1c2VyIHN1cHBsaWVzIGEgcmVndWxhciBleHByZXNz
aW9uIHRvCmJlIHVzZWQgdG8gc3RyaXAgb2ZmIHNvbWUgcG9ydGlvbiBvZiB0aGUgdGFyZ2V0
IHBhdGhuYW1lLiAgRm9yIGV4YW1wbGUsCmlmIHlvdSBoYXZlIHR3byB0YXJnZXQgcGxhdGZv
cm1zIHRoYXQgZWFjaCBoYXZlIGFuIGV4cG9ydC8gYW5kIG9iai8KZGlyZWN0b3J5OgoKCSAg
ICAgZXhwb3J0L3BsYXRmb3JtXzEvCgkgICAgIGV4cG9ydC9wbGF0Zm9ybV8yLwoJICAgICBv
YmovcGxhdGZvcm1fMS8KCSAgICAgb2JqL3BsYXRmb3JtXzIvCgouLi55b3UgY291bGQgc3Vw
cGx5ICdwYXJ0aWFsbWl4Ol5cdys/L1x3Kz8vJyBhcyB0aGUgbW9kaWZpZXIuICBUaGlzCndp
bGwgc3RyaXAgb2ZmIHRoZSBmaXJzdCB0d28gZGlyZWN0b3J5IG5hbWVzLiAgSWYgdHdvIGZp
bGVzIHVuZGVybmVhdGgKdGhlc2UgdHdvIGRpcmVjdG9yaWVzIGFyZSBmb3VuZCB0byBoYXZl
IHRoZSBzYW1lIHNldCBvZiBpbnB1dHMsIHRoZXkKd2lsbCBiZSBhYmxlIHRvIHNoYXJlIGEg
Y2FjaGUgZW50cnksIHNwZWVkaW5nIHVwIGJ1aWxkcyBiZXR3ZWVuIHBsYXRmb3Jtcy4KCj1p
dGVtIG1peHRhcmdldHMKCkI8VGhlIG1peHRhcmdldHMgb3B0aW9uIGlzIGRlcHJlY2F0ZWQ+
LiAgVGhlIG1peHRhcmdldHMgbW9kaWZpZXIKZGlzY2FyZHMgdGhlIHRhcmdldCBwYXRobmFt
ZSBjb21wbGV0ZWx5LiAgVGhpcyBpcyBwcm9ibGVtYXRpYyBmb3IgbXVsdGktCnRhcmdldHRl
ZCBjb21tYW5kcywgYXMgdGhlIGlucHV0IGZvciBlYWNoIG9mIHRoZSB0YXJnZXRzIGlzIGlk
ZW50aWNhbCwKd2hpY2ggY2F1c2VzIGVhY2ggb3V0cHV0IHRhcmdldCB0byBzaGFyZSBhbiBl
bnRyeSBpbiB0aGUgY2FjaGUuCgo9YmFjawoKPWhlYWQyIFRoZSBDPFNvdXJjZVBhdGg+IG1l
dGhvZAoKVGhlIEM8U291cmNlUGF0aD4gbWF0aG9kIHJldHVybnMgdGhlIHJlYWwgc291cmNl
IHBhdGggbmFtZSBvZiBhIGZpbGUsCmFzIG9wcG9zdGVkIHRvIHRoZSBwYXRoIG5hbWUgd2l0
aGluIGEgYnVpbGQgZGlyZWN0b3J5LiAgSXQgaXMgaW52b2tlZAphcyBmb2xsb3dzOgoKICAk
cGF0aCA9IFNvdXJjZVBhdGggPGJ1aWxkcGF0aD47CgoKPWhlYWQyIFRoZSBDPENvbnNQYXRo
PiBtZXRob2QKClRoZSBDPENvbnNQYXRoPiBtZXRob2QgcmV0dXJucyB0cnVlIGlmIHRoZSBz
dXBwbGllZCBwYXRoIGlzIGEgZGVyaXZhYmxlCmZpbGUsIGFuZCByZXR1cm5zIHVuZGVmIChm
YWxzZSkgb3RoZXJ3aXNlLgpJdCBpcyBpbnZva2VkIGFzIGZvbGxvd3M6CgogICRyZXN1bHQg
PSBDb25zUGF0aCA8cGF0aD47CgoKPWhlYWQyIFRoZSBDPFNwbGl0UGF0aD4gbWV0aG9kCgpU
aGUgQzxTcGxpdFBhdGg+IG1ldGhvZCBsb29rcyB1cCBtdWx0aXBsZSBwYXRoIG5hbWVzIGlu
IGEgc3RyaW5nIHNlcGFyYXRlZApieSB0aGUgZGVmYXVsdCBwYXRoIHNlcGFyYXRvciBmb3Ig
dGhlIG9wZXJhdGluZyBzeXN0ZW0gKCc6JyBvbiBVTklYCnN5c3RlbXMsICc7JyBvbiBXaW5k
b3dzIE5UKSwgYW5kIHJldHVybnMgdGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lcy4KSXQgaXMg
aW52b2tlZCBhcyBmb2xsb3dzOgoKICBAcGF0aHMgPSBTcGxpdFBhdGggPHBhdGhsaXN0PjsK
ClRoZSBDPFNwbGl0UGF0aD4gbWV0aG9kIHdpbGwgY29udmVydCAgbmFtZXMgcHJlZml4ZWQg
JyMnIHRvIHRoZQphcHByb3ByaWF0ZSB0b3AtbGV2ZWwgYnVpbGQgbmFtZSAod2l0aG91dCB0
aGUgJyMnKSBhbmQgd2lsbCBjb252ZXJ0CnJlbGF0aXZlIG5hbWVzIHRvIHRvcC1sZXZlbCBu
YW1lcy4KCgo9aGVhZDIgVGhlIEM8RGlyUGF0aD4gbWV0aG9kCgpUaGUgQzxEaXJQYXRoPiBt
ZXRob2QgcmV0dXJucyB0aGUgYnVpbGQgcGF0aCBuYW1lKHMpIG9mIGEgZGlyZWN0b3J5IG9y
Cmxpc3Qgb2YgZGlyZWN0b3JpZXMuICBJdCBpcyBpbnZva2VkIGFzIGZvbGxvd3M6CgogICRj
d2QgPSBEaXJQYXRoIDxwYXRocz47CgpUaGUgbW9zdCBjb21tb24gdXNlIGZvciB0aGUgQzxE
aXJQYXRoPiBtZXRob2QgaXM6CgogICRjd2QgPSBEaXJQYXRoICcuJzsKCnRvIGZldGNoIHRo
ZSBwYXRoIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBvZiBhIHN1YnNpZGlhcnkgRjxDb25z
Y3JpcHQ+CmZpbGUuCgoKPWhlYWQyIFRoZSBDPEZpbGVQYXRoPiBtZXRob2QKClRoZSBDPEZp
bGVQYXRoPiBtZXRob2QgcmV0dXJucyB0aGUgYnVpbGQgcGF0aCBuYW1lKHMpIG9mIGEgZmls
ZSBvcgpsaXN0IG9mIGZpbGVzLiAgSXQgaXMgaW52b2tlZCBhcyBmb2xsb3dzOgoKICAkZmls
ZSA9IEZpbGVQYXRoIDxwYXRoPjsKCgo9aGVhZDIgVGhlIEM8SGVscD4gbWV0aG9kCgpUaGUg
QzxIZWxwPiBtZXRob2Qgc3BlY2lmaWVzIGhlbHAgdGV4dCB0aGF0IHdpbGwgYmUgZGlzcGxh
eWVkIHdoZW4gdGhlCnVzZXIgaW52b2tlcyBDPGNvbnMgLWg+LiAgVGhpcyBjYW4gYmUgdXNl
ZCB0byBwcm92aWRlIGRvY3VtZW50YXRpb24Kb2Ygc3BlY2lmaWMgdGFyZ2V0cywgdmFsdWVz
LCBidWlsZCBvcHRpb25zLCBldGMuIGZvciB0aGUgYnVpbGQgdHJlZS4KSXQgaXMgaW52b2tl
ZCBhcyBmb2xsb3dzOgoKICBIZWxwIDxoZWxwdGV4dD47CgpUaGUgQzxIZWxwPiBtZXRob2Qg
bWF5IG9ubHkgYmUgY2FsbGVkIG9uY2UsIGFuZCBzaG91bGQgdHlwaWNhbGx5IGJlCnNwZWNp
ZmllZCBpbiB0aGUgdG9wLWxldmVsIEY8Q29uc3RydWN0PiBmaWxlLgoKCj1oZWFkMSBFeHRl
bmRpbmcgQ29ucwoKCj1oZWFkMiBPdmVycmlkaW5nIGNvbnN0cnVjdGlvbiB2YXJpYWJsZXMK
ClRoZXJlIGFyZSBzZXZlcmFsIHdheXMgb2YgZXh0ZW5kaW5nIENvbnMsIHdoaWNoIHZhcnkg
aW4gZGVncmVlIG9mCmRpZmZpY3VsdHkuIFRoZSBzaW1wbGVzdCBtZXRob2QgaXMgdG8gZGVm
aW5lIHlvdXIgb3duIGNvbnN0cnVjdGlvbgplbnZpcm9ubWVudCwgYmFzZWQgb24gdGhlIGRl
ZmF1bHQgZW52aXJvbm1lbnQsIGJ1dCBtb2RpZmllZCB0byByZWZsZWN0IHlvdXIKcGFydGlj
dWxhciBuZWVkcy4gVGhpcyB3aWxsIG9mdGVuIHN1ZmZpY2UgZm9yIEMtYmFzZWQgYXBwbGlj
YXRpb25zLiBZb3UgY2FuCnVzZSB0aGUgQzxuZXc+IGNvbnN0cnVjdG9yLCBhbmQgdGhlIEM8
Y2xvbmU+IGFuZCBDPGNvcHk+IG1ldGhvZHMgdG8gY3JlYXRlCmh5YnJpZCBlbnZpcm9ubWVu
dHMuIFRoZXNlIGNoYW5nZXMgY2FuIGJlIGVudGlyZWx5IHRyYW5zcGFyZW50IHRvIHRoZQp1
bmRlcmx5aW5nIEY8Q29uc2NyaXB0PiBmaWxlcy4KCgo9aGVhZDIgQWRkaW5nIG5ldyBtZXRo
b2RzCgpGb3Igc2xpZ2h0bHkgbW9yZSBkZW1hbmRpbmcgY2hhbmdlcywgeW91IG1heSB3aXNo
IHRvIGFkZCBuZXcgbWV0aG9kcyB0byB0aGUKQzxjb25zPiBwYWNrYWdlLiBIZXJlJ3MgYW4g
ZXhhbXBsZSBvZiBhIHZlcnkgc2ltcGxlIGV4dGVuc2lvbiwKQzxJbnN0YWxsU2NyaXB0Piwg
d2hpY2ggaW5zdGFsbHMgYSB0Y2wgc2NyaXB0IGluIGEgcmVxdWVzdGVkIGxvY2F0aW9uLCBi
dXQKZWRpdHMgdGhlIHNjcmlwdCBmaXJzdCB0byByZWZsZWN0IGEgcGxhdGZvcm0tZGVwZW5k
ZW50IHBhdGggdGhhdCBuZWVkcyB0byBiZQppbnN0YWxsZWQgaW4gdGhlIHNjcmlwdDoKCiAg
IyBjb25zOjpJbnN0YWxsU2NyaXB0IC0gQ3JlYXRlIGEgcGxhdGZvcm0gZGVwZW5kZW50IHZl
cnNpb24gb2YgYSBzaGVsbAogICMgc2NyaXB0IGJ5IHJlcGxhY2luZyBzdHJpbmcgYGAjIXlv
dXItcGF0aC1oZXJlJycgd2l0aCBwbGF0Zm9ybSBzcGVjaWZpYwogICMgcGF0aCAkQklOX0RJ
Ui4KCiAgc3ViIGNvbnM6Okluc3RhbGxTY3JpcHQgewoJbXkgKCRlbnYsICRkc3QsICRzcmMp
ID0gQF87CglDb21tYW5kICRlbnYgJGRzdCwgJHNyYywgcXEoCgkJc2VkIHMreW91ci1wYXRo
LWhlcmUrJEJJTl9ESVIrICU8ID4gJT4KCQljaG1vZCBvdWcreCAlPgoJKTsKICB9CgpOb3Rp
Y2UgdGhhdCB0aGlzIG1ldGhvZCBpcyBkZWZpbmVkIGRpcmVjdGx5IGluIHRoZSBDPGNvbnM+
IHBhY2thZ2UgKGJ5CnByZWZpeGluZyB0aGUgbmFtZSB3aXRoIEM8Y29uczo6PikuIEEgY2hh
bmdlIG1hZGUgaW4gdGhpcyBtYW5uZXIgd2lsbCBiZQpnbG9iYWxseSB2aXNpYmxlIHRvIGFs
bCBlbnZpcm9ubWVudHMsIGFuZCBjb3VsZCBiZSBjYWxsZWQgYXMgaW4gdGhlCmZvbGxvd2lu
ZyBleGFtcGxlOgoKICBJbnN0YWxsU2NyaXB0ICRlbnYgIiRCSU4vZm9vIiwgImZvby50Y2wi
OwoKRm9yIGEgc21hbGwgaW1wcm92ZW1lbnQgaW4gZ2VuZXJhbGl0eSwgdGhlIEM8QklORElS
PiB2YXJpYWJsZSBjb3VsZCBiZQpwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnQgb3IgdGFrZW4g
ZnJvbSB0aGUgY29uc3RydWN0aW9uIGVudmlyb25tZW50LS1hcwpDPCVCSU5ESVI+LgoKCj1o
ZWFkMiBPdmVycmlkaW5nIG1ldGhvZHMKCkluc3RlYWQgb2YgYWRkaW5nIHRoZSBtZXRob2Qg
dG8gdGhlIEM8Y29ucz4gbmFtZSBzcGFjZSwgeW91IGNvdWxkIGRlZmluZSBhCm5ldyBwYWNr
YWdlIHdoaWNoIGluaGVyaXRzIGV4aXN0aW5nIG1ldGhvZHMgZnJvbSB0aGUgQzxjb25zPiBw
YWNrYWdlIGFuZApvdmVycmlkZXMgb3IgYWRkcyBvdGhlcnMuIFRoaXMgY2FuIGJlIGRvbmUg
dXNpbmcgUGVybCdzIGluaGVyaXRhbmNlCm1lY2hhbmlzbXMuCgpUaGUgZm9sbG93aW5nIGV4
YW1wbGUgZGVmaW5lcyBhIG5ldyBwYWNrYWdlIEM8Y29uczo6c3dpdGNoPiB3aGljaCBvdmVy
cmlkZXMgdGhlCnN0YW5kYXJkIEM8TGlicmFyeT4gbWV0aG9kLiBUaGUgb3ZlcnJpZGRlbiBt
ZXRob2QgYnVpbGRzIGxpbmtlZCBsaWJyYXJ5Cm1vZHVsZXMsIHJhdGhlciB0aGFuIGxpYnJh
cnkgYXJjaGl2ZXMuIEEgbmV3IGNvbnN0cnVjdG9yIGlzCnByb3ZpZGVkLiBFbnZpcm9ubWVu
dHMgY3JlYXRlZCB3aXRoIHRoaXMgY29uc3RydWN0b3Igd2lsbCBoYXZlIHRoZSBuZXcKbGli
cmFyeSBtZXRob2Q7IG90aGVycyB3b24ndC4KCiAgcGFja2FnZSBjb25zOjpzd2l0Y2g7CiAg
QkVHSU4ge0BJU0EgPSAnY29ucyd9CgogIHN1YiBuZXcgewoJc2hpZnQ7CglibGVzcyBuZXcg
Y29ucyhAXyk7CiAgfQoKICBzdWIgTGlicmFyeSB7CglteSgkZW52KSA9IHNoaWZ0OwoJbXko
JGxpYikgPSBzaGlmdDsKCW15KEBvYmpzKSA9IE9iamVjdHMgJGVudiBAXzsKCUNvbW1hbmQg
JGVudiAkbGliLCBAb2JqcywgcSgKCQklTEQgLXIgJUxERkxBR1MgJTwgLW8gJT4KCSk7CiAg
fQoKVGhpcyBmdW5jdGlvbmFsaXR5IGNvdWxkIGJlIGludm9rZWQgYXMgaW4gdGhlIGZvbGxv
d2luZyBleGFtcGxlOgoKICAkZW52ID0gbmV3IGNvbnM6OnN3aXRjaChAb3ZlcnJpZGVzKTsK
ICAuLi4KICBMaWJyYXJ5ICRlbnYgJ2xpYi5vJywgJ2Zvby5jJywgJ2Jhci5jJzsKCgo9aGVh
ZDEgSW52b2tpbmcgQ29ucwoKVGhlIEM8Y29ucz4gY29tbWFuZCBpcyB1c3VhbGx5IGludm9r
ZWQgZnJvbSB0aGUgcm9vdCBvZiB0aGUgYnVpbGQgdHJlZS4gQQpGPENvbnN0cnVjdD4gZmls
ZSBtdXN0IGV4aXN0IGluIHRoYXQgZGlyZWN0b3J5LiBJZiB0aGUgQzwtZj4gYXJndW1lbnQg
aXMKdXNlZCwgdGhlbiBhbiBhbHRlcm5hdGUgRjxDb25zdHJ1Y3Q+IGZpbGUgbWF5IGJlIHVz
ZWQgKGFuZCwgcG9zc2libHksIGFuCmFsdGVybmF0ZSByb290LCBzaW5jZSBDPGNvbnM+IHdp
bGwgY2QgdG8gRjxDb25zdHJ1Y3Q+IGZpbGUncyBjb250YWluaW5nCmRpcmVjdG9yeSkuCgpJ
ZiBDPGNvbnM+IGlzIGludm9rZWQgZnJvbSBhIGNoaWxkIG9mIHRoZSByb290IG9mIHRoZSBi
dWlsZCB0cmVlIHdpdGgKdGhlIEM8LXQ+IGFyZ3VtZW50LCBpdCB3aWxsIHdhbGsgdXAgdGhl
IGRpcmVjdG9yeSBoaWVyYXJjaHkgbG9va2luZyBmb3IgYQpGPENvbnN0cnVjdD4gZmlsZS4g
IChBbiBhbHRlcm5hdGUgbmFtZSBtYXkgc3RpbGwgYmUgc3BlY2lmaWVkIHdpdGggQzwtZj4u
KQpUaGUgdGFyZ2V0cyBzdXBwbGllZCBvbiB0aGUgY29tbWFuZCBsaW5lIHdpbGwgYmUgbW9k
aWZpZWQgdG8gYmUgcmVsYXRpdmUKdG8gdGhlIGRpc2NvdmVyZWQgRjxDb25zdHJ1Y3Q+IGZp
bGUuICBGb3IgZXhhbXBsZSwgZnJvbSBhIGRpcmVjdG9yeQpjb250YWluaW5nIGEgdG9wLWxl
dmVsIEY8Q29uc3RydWN0PiBmaWxlLCB0aGUgZm9sbG93aW5nIGludm9jYXRpb246CgogICUg
Y2QgbGliZm9vL3N1YmRpcgogICUgY29ucyAtdCB0YXJnZXQKCmlzIGV4YWN0bHkgZXF1aXZh
bGVudCB0bzoKCiAgJSBjb25zIGxpYmZvby9zdWJkaXIvdGFyZ2V0CgpJZiB0aGVyZSBhcmUg
YW55IEM8RGVmYXVsdD4gdGFyZ2V0cyBzcGVjaWZpZWQgaW4gdGhlIGRpcmVjdG9yeSBoaWVy
YXJjaHkncwpGPENvbnN0cnVjdD4gb3IgRjxDb25zY3JpcHQ+IGZpbGVzLCBvbmx5IHRoZSBk
ZWZhdWx0IHRhcmdldHMgYXQgb3IgYmVsb3cKdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIEM8
Y29ucyAtdD4gd2FzIGludm9rZWQgd2lsbCBiZSBidWlsdC4KClRoZSBjb21tYW5kIGlzIGlu
dm9rZWQgYXMgZm9sbG93czoKCiAgY29ucyA8YXJndW1lbnRzPiAtLSA8Y29uc3RydWN0LWFy
Z3M+Cgp3aGVyZSBJPGFyZ3VtZW50cz4gY2FuIGJlIGFueSBvZiB0aGUgZm9sbG93aW5nLCBp
biBhbnkgb3JkZXI6Cgo9b3ZlciAxMAoKPWl0ZW0gSTx0YXJnZXQ+CgpCdWlsZCB0aGUgc3Bl
Y2lmaWVkIHRhcmdldC4gSWYgSTx0YXJnZXQ+IGlzIGEgZGlyZWN0b3J5LCB0aGVuIHJlY3Vy
c2l2ZWx5CmJ1aWxkIGV2ZXJ5dGhpbmcgd2l0aGluIHRoYXQgZGlyZWN0b3J5LgoKPWl0ZW0g
STwrcGF0dGVybj4KCkxpbWl0IHRoZSBGPENvbnNjcmlwdD4gZmlsZXMgY29uc2lkZXJlZCB0
byBqdXN0IHRob3NlIHRoYXQgbWF0Y2ggSTxwYXR0ZXJuPiwKd2hpY2ggaXMgYSBQZXJsIHJl
Z3VsYXIgZXhwcmVzc2lvbi4gTXVsdGlwbGUgQzwrPiBhcmd1bWVudHMgYXJlIGFjY2VwdGVk
LgoKPWl0ZW0gSTxuYW1lPj08dmFsPgoKU2V0cyBJPG5hbWU+IHRvIHZhbHVlIEk8dmFsPiBp
biB0aGUgQzxBUkc+IGhhc2ggcGFzc2VkIHRvIHRoZSB0b3AtbGV2ZWwKRjxDb25zdHJ1Y3Q+
IGZpbGUuCgo9aXRlbSBDPC1jYz4KClNob3cgY29tbWFuZCB0aGF0IHdvdWxkIGhhdmUgYmVl
biBleGVjdXRlZCwgd2hlbiByZXRyaWV2aW5nIGZyb20gY2FjaGUuIE5vCmluZGljYXRpb24g
dGhhdCB0aGUgZmlsZSBoYXMgYmVlbiByZXRyaWV2ZWQgaXMgZ2l2ZW47IHRoaXMgaXMgdXNl
ZnVsIGZvcgpnZW5lcmF0aW5nIGJ1aWxkIGxvZ3MgdGhhdCBjYW4gYmUgY29tcGFyZWQgd2l0
aCByZWFsIGJ1aWxkIGxvZ3MuCgo9aXRlbSBDPC1jZD4KCkRpc2FibGUgYWxsIGNhY2hpbmcu
IERvIG5vdCByZXRyaWV2ZSBmcm9tIGNhY2hlIG5vciBmbHVzaCB0byBjYWNoZS4KCj1pdGVt
IEM8LWNyPgoKQnVpbGQgZGVwZW5kZW5jaWVzIGluIHJhbmRvbSBvcmRlci4gVGhpcyBpcyB1
c2VmdWwgd2hlbiBidWlsZGluZyBtdWx0aXBsZQpzaW1pbGFyIHRyZWVzIHdpdGggY2FjaGlu
ZyBlbmFibGVkLgoKPWl0ZW0gQzwtY3M+CgpTeW5jaHJvbml6ZSBleGlzdGluZyBidWlsZCB0
YXJnZXRzIHRoYXQgYXJlIGZvdW5kIHRvIGJlIHVwLXRvLWRhdGUgd2l0aApjYWNoZS4gVGhp
cyBpcyB1c2VmdWwgaWYgY2FjaGluZyBoYXMgYmVlbiBkaXNhYmxlZCB3aXRoIC1jYyBvciBq
dXN0IHJlY2VudGx5CmVuYWJsZWQgd2l0aCBVc2VDYWNoZS4KCj1pdGVtIEM8LWQ+CgpFbmFi
bGUgZGVwZW5kZW5jeSBkZWJ1Z2dpbmcuCgo9aXRlbSBDPC1mPiA8ZmlsZT4KClVzZSB0aGUg
c3BlY2lmaWVkIGZpbGUgaW5zdGVhZCBvZiBGPENvbnN0cnVjdD4gKGJ1dCBmaXJzdCBjaGFu
Z2UgdG8KY29udGFpbmluZyBkaXJlY3Rvcnkgb2YgSTxmaWxlPikuCgo9aXRlbSBDPC1oPgoK
U2hvdyBhIGhlbHAgbWVzc2FnZSBsb2NhbCB0byB0aGUgY3VycmVudCBidWlsZCBpZiBvbmUg
c3VjaCBpcyBkZWZpbmVkLCBhbmQKZXhpdC4KCj1pdGVtIEM8LWo+IDxqb2JzPgoKQWxsb3cg
dXAgdG8gPGpvYnM+IGpvYnMgdG8gYmUgc3Bhd25lZCBpbiBwYXJhbGxlbAoKPWl0ZW0gQzwt
az4KCktlZXAgZ29pbmcgYXMgZmFyIGFzIHBvc3NpYmxlIGFmdGVyIGVycm9ycy4KCj1pdGVt
IEM8LU0+CgpEaXNwbGF5IGlucHV0IHRvIHRoZSBNRDUgYWxnb3JpdGhtIChmb3IgZGVidWdn
aW5nIGRlcGVuZGFuY3kgY2hhbmdlcykKCj1pdGVtIEM8LW8+IDxmaWxlPgoKUmVhZCBvdmVy
cmlkZSBmaWxlIEk8ZmlsZT4uCgo9aXRlbSBDPC1wPgoKU2hvdyBjb25zdHJ1Y3Rpb24gcHJv
ZHVjdHMgaW4gc3BlY2lmaWVkIHRyZWVzLiBObyBidWlsZCBpcyBhdHRlbXB0ZWQuCgo9aXRl
bSBDPC1wYT4KClNob3cgY29uc3RydWN0aW9uIHByb2R1Y3RzIGFuZCBhc3NvY2lhdGVkIGFj
dGlvbnMuIE5vIGJ1aWxkIGlzIGF0dGVtcHRlZC4KCj1pdGVtIEM8LXB3PgoKU2hvdyBwcm9k
dWN0cyBhbmQgd2hlcmUgdGhleSBhcmUgZGVmaW5lZC4gTm8gYnVpbGQgaXMgYXR0ZW1wdGVk
LgoKPWl0ZW0gQzwtcT4KCkRvbid0IGJlIHZlcmJvc2UgYWJvdXQgSW5zdGFsbGluZyBhbmQg
UmVtb3ZpbmcgdGFyZ2V0cy4KCj1pdGVtIEM8LXI+CgpSZW1vdmUgY29uc3RydWN0aW9uIHBy
b2R1Y3RzIGFzc29jaWF0ZWQgd2l0aCA8dGFyZ2V0cz4uIE5vIGJ1aWxkIGlzCmF0dGVtcHRl
ZC4KCj1pdGVtIEM8LVI+IDxyZXBvcz4KClNlYXJjaCBmb3IgZmlsZXMgaW4gSTxyZXBvcz4u
ICBNdWx0aXBsZSBCPC1SPiBJPHJlcG9zPiBkaXJlY3RvcmllcyBhcmUKc2VhcmNoZWQgaW4g
dGhlIG9yZGVyIHNwZWNpZmllZC4KCj1pdGVtIEM8LXQ+CgpUcmF2ZXJzZSB1cCB0aGUgZGly
ZWN0b3J5IGhpZXJhcmNoeSBsb29raW5nIGZvciBhIEY8Q29uc3RydWN0PiBmaWxlLCBpZgpu
b25lIGV4aXN0cyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBUYXJnZXRzIHdpbGwgYmUg
bW9kaWZpZWQgdG8gYmUKcmVsYXRpdmUgdG8gdGhlIEY8Q29uc3RydWN0PiBmaWxlLgoKPWl0
ZW0gQzwtdj4KClNob3cgQzxjb25zPiB2ZXJzaW9uIGFuZCBjb250aW51ZSBwcm9jZXNzaW5n
LgoKPWl0ZW0gQzwtVj4KClNob3cgQzxjb25zPiB2ZXJzaW9uIGFuZCBleGl0LgoKPWl0ZW0g
Qzwtd2Y+IDxmaWxlPgoKV3JpdGUgYWxsIGZpbGVuYW1lcyBjb25zaWRlcmVkIGludG8gSTxm
aWxlPi4KCj1pdGVtIEM8LXg+CgpTaG93IGEgaGVscCBtZXNzYWdlIHNpbWlsYXIgdG8gdGhp
cyBvbmUsIGFuZCBleGl0LgoKPWJhY2sKCkFuZCBJPGNvbnN0cnVjdC1hcmdzPiBjYW4gYmUg
YW55IGFyZ3VtZW50cyB0aGF0IHlvdSB3aXNoIHRvIHByb2Nlc3MgaW4gdGhlCkY8Q29uc3Ry
dWN0PiBmaWxlLiBOb3RlIHRoYXQgdGhlcmUgc2hvdWxkIGJlIGEgQjwtLT4gc2VwYXJhdGlu
ZyB0aGUgYXJndW1lbnRzCnRvIGNvbnMgYW5kIHRoZSBhcmd1bWVudHMgdGhhdCB5b3Ugd2lz
aCB0byBwcm9jZXNzIGluIHRoZSBGPENvbnN0cnVjdD4gZmlsZS4KClByb2Nlc3Npbmcgb2Yg
STxjb25zdHJ1Y3QtYXJncz4gY2FuIGJlIGRvbmUgYnkgYW55IHN0YW5kYXJkIHBhY2thZ2Ug
bGlrZQpCPEdldG9wdD4gb3IgaXRzIHZhcmlhbnRzLCBvciBhbnkgdXNlciBkZWZpbmVkIHBh
Y2thZ2UuIEI8Y29ucz4gd2lsbCBwYXNzIGluCnRoZSBJPGNvbnN0cnVjdC1hcmdzPiBhcyBC
PEBBUkdWPiBhbmQgd2lsbCBub3QgYXR0ZW1wdCB0byBpbnRlcnByZXQgYW55dGhpbmcKYWZ0
ZXIgdGhlIEI8LS0+LgoKICAlIGNvbnMgLVIgL3Vzci9sb2NhbC9yZXBvc2l0b3J5IC1kIG9z
PXNvbGFyaXMgK2RyaXZlciAtLSAtYyB0ZXN0IC1mIERFQlVHCgp3b3VsZCBwYXNzIHRoZSBm
b2xsb3dpbmcgdG8gY29ucwoKICAtUiAvdXNyL2xvY2FsL3JlcG9zaXRvcnkgLWQgb3M9c29s
YXJpcyArZHJpdmVyCgphbmQgdGhlIGZvbGxvd2luZywgdG8gdGhlIHRvcCBsZXZlbCBGPENv
bnN0cnVjdD4gZmlsZSBhcyBCPEBBUkdWPgoKICAtYyB0ZXN0IC1mIERFQlVHCgpOb3RlIHRo
YXQgQzxjb25zIC1yIC4+IGlzIGVxdWl2YWxlbnQgdG8gYSBmdWxsIHJlY3Vyc2l2ZSBDPG1h
a2UgY2xlYW4+LApidXQgcmVxdWlyZXMgbm8gc3VwcG9ydCBpbiB0aGUgRjxDb25zdHJ1Y3Q+
IGZpbGUgb3IgYW55IEY8Q29uc2NyaXB0PgpmaWxlcy4gVGhpcyBpcyBtb3N0IHVzZWZ1bCBp
ZiB5b3UgYXJlIGNvbXBpbGluZyBmaWxlcyBpbnRvIHNvdXJjZQpkaXJlY3RvcmllcyAoaWYg
eW91IHNlcGFyYXRlIHRoZSBGPGJ1aWxkPiBhbmQgRjxleHBvcnQ+IGRpcmVjdG9yaWVzLAp0
aGVuIHlvdSBjYW4ganVzdCByZW1vdmUgdGhlIGRpcmVjdG9yaWVzKS4KClRoZSBvcHRpb25z
IEM8LXA+LCBDPC1wYT4sIGFuZCBDPC1wdz4gYXJlIGV4dHJlbWVseSB1c2VmdWwgZm9yIHVz
ZSBhcyBhbiBhaWQKaW4gcmVhZGluZyBzY3JpcHRzIG9yIGRlYnVnZ2luZyB0aGVtLiBJZiB5
b3Ugd2FudCB0byBrbm93IHdoYXQgc2NyaXB0Cmluc3RhbGxzIEY8ZXhwb3J0L2luY2x1ZGUv
Zm9vLmg+LCBmb3IgZXhhbXBsZSwganVzdCB0eXBlOgoKICAlIGNvbnMgLXB3IGV4cG9ydC9p
bmNsdWRlL2Zvby5oCgoKPWhlYWQxIFVzaW5nIGFuZCB3cml0aW5nIGRlcGVuZGVuY3kgc2Nh
bm5lcnMKClF1aWNrU2NhbiBhbGxvd3Mgc2ltcGxlIHRhcmdldC1pbmRlcGVuZGVudCBzY2Fu
bmVycyB0byBiZSBzZXQgdXAgZm9yIHNvdXJjZQpmaWxlcy4gT25seSBvbmUgUXVpY2tTY2Fu
IHNjYW5uZXIgbWF5IGJlIGFzc29jaWF0ZWQgd2l0aCBhbnkgZ2l2ZW4gc291cmNlCmZpbGUg
YW5kIGVudmlyb25tZW50LgoKUXVpY2tTY2FuIGlzIGludm9rZWQgYXMgZm9sbG93czoKCiAg
UXVpY2tTY2FuIENPTlNFTlYgQ09ERVJFRiwgRklMRU5BTUUgWywgUEFUSF0KClRoZSBzdWJy
b3V0aW5lIHJlZmVyZW5jZWQgYnkgQ09ERVJFRiBpcyBleHBlY3RlZCB0byByZXR1cm4gYSBs
aXN0IG9mCmZpbGVuYW1lcyBpbmNsdWRlZCBkaXJlY3RseSBieSBGSUxFLiBUaGVzZSBmaWxl
bmFtZXMgd2lsbCwgaW4gdHVybiwgYmUKc2Nhbm5lZC4gVGhlIG9wdGlvbmFsIFBBVEggYXJn
dW1lbnQgc3VwcGxpZXMgYSBsb29rdXAgcGF0aCBmb3IgZmluZGluZwpGSUxFTkFNRSBhbmQv
b3IgZmlsZXMgcmV0dXJuZWQgYnkgdGhlIHVzZXItc3VwcGxpZWQgc3Vicm91dGluZS4gIFRo
ZSBQQVRICm1heSBiZSBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSBvZiBsb29rdXAtZGlyZWN0
b3J5IG5hbWVzLCBvciBhIHN0cmluZyBvZgpuYW1lcyBzZXBhcmF0ZWQgYnkgdGhlIHN5c3Rl
bSdzIHNlcGFyYXRvciBjaGFyYWN0ZXIgKCc6JyBvbiBVTklYIHN5c3RlbXMsCic7JyBvbiBX
aW5kb3dzIE5UKS4KClRoZSBzdWJyb3V0aW5lIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIGxp
bmUgaW4gdGhlIGZpbGUsIHdpdGggJF8gc2V0IHRvIHRoZQpjdXJyZW50IGxpbmUuIElmIHRo
ZSBzdWJyb3V0aW5lIG5lZWRzIHRvIGxvb2sgYXQgYWRkaXRpb25hbCBsaW5lcywgb3IsIGZv
cgp0aGF0IG1hdHRlciwgdGhlIGVudGlyZSBmaWxlLCB0aGVuIGl0IG1heSByZWFkIHRoZW0g
aXRzZWxmLCBmcm9tIHRoZQpmaWxlaGFuZGxlIFNDQU4uIEl0IG1heSBhbHNvIHRlcm1pbmF0
ZSB0aGUgbG9vcCwgaWYgaXQga25vd3MgdGhhdCBubyBmdXJ0aGVyCmluY2x1ZGUgaW5mb3Jt
YXRpb24gaXMgYXZhaWxhYmxlLCBieSBjbG9zaW5nIHRoZSBmaWxlaGFuZGxlLgoKV2hldGhl
ciBvciBub3QgYSBsb29rdXAgcGF0aCBpcyBwcm92aWRlZCwgUXVpY2tTY2FuIGZpcnN0IHRy
aWVzIHRvIGxvb2t1cAp0aGUgZmlsZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3Rv
cnkgKGZvciB0aGUgdG9wLWxldmVsIGZpbGUgc3VwcGxpZWQKZGlyZWN0bHkgdG8gUXVpY2tT
Y2FuKSwgb3IgZnJvbSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZpbGUgd2hpY2gK
cmVmZXJlbmNlZCB0aGUgZmlsZS4gVGhpcyBpcyBub3QgdmVyeSBnZW5lcmFsLCBidXQgc2Vl
bXMgZ29vZAplbm91Z2gtLWVzcGVjaWFsbHkgaWYgeW91IGhhdmUgdGhlIGx1eHVyeSBvZiB3
cml0aW5nIHlvdXIgb3duIHV0aWxpdGllcyBhbmQKY2FuIGNvbnRyb2wgdGhlIHVzZSBvZiB0
aGUgc2VhcmNoIHBhdGggaW4gYSBzdGFuZGFyZCB3YXkuIEZpbmFsbHksIHRoZQpzZWFyY2gg
cGF0aCBpcywgY3VycmVudGx5LCBjb2xvbiBzZXBhcmF0ZWQuIFRoaXMgbWF5IG5vdCBtYWtl
IHRoZSBOVCBjYW1wCmhhcHB5LgoKSGVyZSdzIGEgcmVhbCBleGFtcGxlLCB0YWtlbiBmcm9t
IGEgRjxDb25zdHJ1Y3Q+IGZpbGUgaGVyZToKCiAgc3ViIGNvbnM6OlNNRmdlbiB7CiAgICAg
IG15KCRlbnYsIEB0YWJsZXMpID0gQF87CiAgICAgIGZvcmVhY2ggJHQgKEB0YWJsZXMpIHsK
CSAgJGVudi0+UXVpY2tTY2FuKHN1YiB7IC9cYlxTKj9cLnNtZlxiL2cgfSwgIiR0LnNtZiIs
CgkJCSAgJGVudi0+e1NNRl9JTkNMVURFX1BBVEh9KTsKCSAgJGVudi0+Q29tbWFuZCgKCSAg
ICAgIFsiJHQuc21kYi5jYyIsIiR0LnNtZGIuaCIsIiR0LnNubXAuY2MiLCIkdC5hbWkuY2Mi
LCAiJHQuaHR0cC5jYyJdLAoJICAgICAgIiR0LnNtZiIsCgkgICAgICBxKAoJCXNtZmdlbiAl
KCAlU01GX0lOQ0xVREVfT1BUICUpICU8CgkgICAgICApCgkgICk7CiAgICAgIH0KICB9Cgpb
Tk9URSB0aGF0IHRoZSBmb3JtIEM8JGVudi1FPGd0PlF1aWNrU2NhbiAuLi4+ICBhbmQgQzwk
ZW52LUU8Z3Q+Q29tbWFuZAouLi4+IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LCBidXQsIGZv
ciBzb21lIHJlYXNvbiwgaXMgcmVxdWlyZWQKZm9yIHRoaXMgcGFydGljdWxhciBpbnZvY2F0
aW9uLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBidWcgaW4gUGVybCBvcgphIG1pc3VuZGVyc3Rh
bmRpbmcgb24gbXkgcGFydDsgdGhpcyBpbnZvY2F0aW9uIHN0eWxlIGRvZXMgbm90IGFsd2F5
cwphcHBlYXIgdG8gYmUgbmVjZXNzYXJ5Ll0KClRoaXMgZmluZHMgYWxsIG5hbWVzIG9mIHRo
ZSBmb3JtIDxuYW1lPi5zbWYgaW4gdGhlIGZpbGUuIEl0IHdpbGwgcmV0dXJuIHRoZQpuYW1l
cyBldmVuIGlmIHRoZXkncmUgZm91bmQgd2l0aGluIGNvbW1lbnRzLCBidXQgdGhhdCdzIE9L
ICh0aGUgbWVjaGFuaXNtIGlzCmZvcmdpdmluZyBvZiBleHRyYSBmaWxlczsgdGhleSdyZSBq
dXN0IGlnbm9yZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUKbWlzc2luZyBmaWxlIHdp
bGwgYmUgbm90aWNlZCB3aGVuIHRoZSBwcm9ncmFtLCBpbiB0aGlzIGV4YW1wbGUsIHNtZmdl
biwgaXMKYWN0dWFsbHkgaW52b2tlZCkuCgpBIHNjYW5uZXIgaXMgb25seSBpbnZva2VkIGZv
ciBhIGdpdmVuIHNvdXJjZSBmaWxlIGlmIGl0IGlzIG5lZWRlZCBieSBzb21lCnRhcmdldCBp
biB0aGUgdHJlZS4gSXQgaXMgb25seSBldmVyIGludm9rZWQgb25jZSBmb3IgYSBnaXZlbiBz
b3VyY2UgZmlsZS4KCkhlcmUgaXMgYW5vdGhlciB3YXkgdG8gYnVpbGQgdGhlIHNhbWUgc2Nh
bm5lci4gVGhpcyBvbmUgdXNlcyBhbgpleHBsaWNpdCBjb2RlIHJlZmVyZW5jZSwgYW5kIGFs
c28gKHVuZWNlc3NhcmlseSwgaW4gdGhpcyBjYXNlKSByZWFkcwp0aGUgd2hvbGUgZmlsZSBp
dHNlbGY6CgogIHN1YiBteXNjYW4gewogICAgICBteShAaW5jbHVkZXMpOwogICAgICBkbyB7
CgkgIHB1c2goQGluY2x1ZGVzLCAvXGJcUyo/XC5zbWZcYi9nKTsKICAgICAgfSB3aGlsZSA8
U0NBTj47CiAgICAgIEBpbmNsdWRlcwogIH0KCk5vdGUgdGhhdCB0aGUgb3JkZXIgb2YgdGhl
IGxvb3AgaXMgcmV2ZXJzZWQsIHdpdGggdGhlIGxvb3AgdGVzdCBhdCB0aGUKZW5kLiBUaGlz
IGlzIGJlY2F1c2UgdGhlIGZpcnN0IGxpbmUgaXMgYWxyZWFkeSByZWFkIGZvciB5b3UuIFRo
aXMgc2Nhbm5lcgpjYW4gYmUgYXR0YWNoZWQgdG8gYSBzb3VyY2UgZmlsZSBieToKCiAgICBR
dWlja1NjYW4gJGVudiBcbXlzY2FuLCAiJF8uc21mIjsKCj1oZWFkMSBTVVBQT1JUIEFORCBT
VUdHRVNUSU9OUwoKQ29ucyBpcyBtYWludGFpbmVkIGJ5IHRoZSB1c2VyIGNvbW11bml0eS4g
IFRvIHN1YnNjcmliZSwgc2VuZCBtYWlsIHRvCkI8Y29ucy1kaXNjdXNzLXJlcXVlc3RAZ251
Lm9yZz4gd2l0aCBib2R5IEI8c3Vic2NyaWJlPi4KClBsZWFzZSByZXBvcnQgYW55IHN1Z2dl
c3Rpb25zIHRocm91Z2ggdGhlIEI8Y29ucy1kaXNjdXNzQGdudS5vcmc+IG1haWxpbmcKbGlz
dC4KCj1oZWFkMSBCVUdTCgpTdXJlIHRvIGJlIHNvbWUuIFBsZWFzZSByZXBvcnQgYW55IGJ1
Z3MgdGhyb3VnaCB0aGUgQjxidWctY29uc0BnbnUub3JnPgptYWlsaW5nIGxpc3QuCgo9aGVh
ZDEgSU5GT1JNQVRJT04gQUJPVVQgQ09OUwoKSW5mb3JtYXRpb24gYWJvdXQgQ09OUyBjYW4g
YmUgb2J0YWluZWQgZnJvbSB0aGUgb2ZmaWNpYWwgY29ucyB3ZWIgc2l0ZQpCPGh0dHA6Ly93
d3cuZHNtaXQuY29tL2NvbnMvPiBvciBpdHMgbWlycm9ycyBsaXN0ZWQgdGhlcmUuCgpUaGUg
Y29ucyBtYWludGFpbmVycyBjYW4gYmUgY29udGFjdGVkIGJ5IGVtYWlsIGF0CkI8Y29ucy1t
YWludGFpbmVyc0BnbnUub3JnPgoKPWhlYWQxIEFVVEhPUlMKCk9yaWdpbmFsbHkgYnkgQm9i
IFNpZGVib3RoYW0uIFRoZW4gc2lnbmlmaWNhbnRseSBlbnJpY2hlZCBieSB0aGUgbWVtYmVy
cwpvZiB0aGUgQ29ucyBjb21tdW5pdHkgQjxjb25zLWRpc2N1c3NAZ251Lm9yZz4uCgpUaGUg
Q29ucyBjb21tdW5pdHkgd291bGQgbGlrZSB0byB0aGFuayBVbHJpY2ggUGZlaWZlciBmb3Ig
dGhlIG9yaWdpbmFsIHBvZApkb2N1bWVudGF0aW9uIGRlcml2ZWQgZnJvbSB0aGUgRjxjb25z
Lmh0bWw+IGZpbGUuIENvbnMgZG9jdW1lbnRhdGlvbiBpcyBub3cKYSBwYXJ0IG9mIHRoZSBw
cm9ncmFtIGl0c2VsZi4KCj1jdXQK
---------7da051105c166cf17da051105c166cf1
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
[email protected]
http://lists.gnu.org/mailman/listinfo/cons-discuss
Cons URL: http://www.dsmit.com/cons/
---------7da051105c166cf17da051105c166cf1--