Skip to content

Instantly share code, notes, and snippets.

@taiar
Created March 10, 2021 00:24
Show Gist options
  • Save taiar/f691b86af89204e5ca80cf7795164f3d to your computer and use it in GitHub Desktop.
Save taiar/f691b86af89204e5ca80cf7795164f3d to your computer and use it in GitHub Desktop.
store dirs internally
from zipfile import ZipFile
import os
import base64
import textwrap
div = "---"
action = "dump"
def get_all_file_paths(directory):
file_paths = []
for root, directories, files in os.walk(directory):
for filename in files:
filepath = os.path.join(root, filename)
file_paths.append(filepath)
return file_paths
if action == "store":
file_paths = get_all_file_paths("./.template")
with ZipFile("template.zip","w") as zip:
for file in file_paths:
zip.write(file)
template = None
with open("template.zip", "rb") as binary_file:
binary_file_data = binary_file.read()
base64_encoded_data = base64.b64encode(binary_file_data)
template = textwrap.fill(base64_encoded_data.decode("utf-8"), 80)
with open("compress.py", "r+b") as file:
content = file.read()
divider = bytes(div + "\n", 'utf-8')
insert_position = content.find(divider)
file.seek(insert_position)
file.write(divider)
file.write(bytes(template, 'utf-8'))
file.write(b'\n')
file.write(b'"""')
file.truncate()
os.remove("template.zip")
elif action == "dump":
file = open('compress.py', 'r')
contents = file.read()
file.close()
start = contents.rfind(div)
end = contents.rfind('"""')
dump = contents[(start + len(div) + 1):(end - 1)]
dump = dump.replace('\n', '')
base64_zip_bytes = dump.encode('utf-8')
with open('template.zip', 'wb') as file_to_save:
decoded_zip_data = base64.decodebytes(base64_zip_bytes)
file_to_save.write(decoded_zip_data)
with ZipFile('template.zip') as zf:
zf.extractall('./')
"""
---
UEsDBBQAAAAAADioaVIJqyK7XwEAAF8BAAAOAAAALnRlbXBsYXRlLy5lbnZBV1NfQUNDRVNTX0tFWV9J
RD08eW91cl9rZXlfaWRfZ29lc19oZXJlPgpBV1NfU0VDUkVUX0FDQ0VTU19LRVk9PHlvdXJfYWNjZXNz
X2tleV9nb2VzX2hlcmU+CgpEQl9IT1NUPXBvc3RncmVzX2RldgpEQl9QT1JUPTU0MzIKREJfREJOQU1F
PXRhaWFyX2RldgpEQl9VU0VSPXRhaWFyX2RiYQpEQl9QQVNTV09SRD10YWlhcjEyMwpEQl9TU0xNT0RF
PWRpc2FibGUKClRFU1RfREJfSE9TVD1wb3N0Z3Jlc190ZXN0ClRFU1RfREJfUE9SVD01NDMyClRFU1Rf
REJfREJOQU1FPXRhaWFyX3Rlc3QKVEVTVF9EQl9VU0VSPXRhaWFyX2RiYQpURVNUX0RCX1BBU1NXT1JE
PXRhaWFyNDU2ClRFU1RfREJfU1NMTU9ERT1kaXNhYmxlCglQSwMEFAAAAAAArqhpUvSkYFaHAQAAhwEA
ABQAAAAudGVtcGxhdGUvLmdpdGlnbm9yZSMgQmluYXJpZXMgZm9yIHByb2dyYW1zIGFuZCBwbHVnaW5z
CiouZXhlCiouZXhlfgoqLmRsbAoqLnNvCiouZHlsaWIKCiMgVGVzdCBiaW5hcnksIGJ1aWx0IHdpdGgg
YGdvIHRlc3QgLWNgCioudGVzdAoKIyBPdXRwdXQgb2YgdGhlIGdvIGNvdmVyYWdlIHRvb2wsIHNwZWNp
ZmljYWxseSB3aGVuIHVzZWQgd2l0aCBMaXRlSURFCioub3V0CgojIEdlbmVyYXRlZCBjb2RlCiouZ2Vu
LmdvCgojIERlcGVuZGVuY3kgZGlyZWN0b3JpZXMgKHJlbW92ZSB0aGUgY29tbWVudCBiZWxvdyB0byBp
bmNsdWRlIGl0KQojIHZlbmRvci8KCiMgUHJvamVjdCBjb25maWcgZmlsZXMgZm9yIEpldEJyYWlucyBl
ZGl0b3JzOgouaWRlYQoKIyBUaGUgcG9zdGdyZXMgZGF0YSBmaWxlcwpwb3N0Z3Jlcy9kYXRhLypQSwME
FAAAAAAAOKhpUg84OyHzBgAA8wYAAB0AAAAudGVtcGxhdGUvZG9ja2VyLWNvbXBvc2UueWFtbHZlcnNp
b246ICczLjInCnNlcnZpY2VzOgogIHRhaWFyOgogICAgYnVpbGQ6IC4KICAgIGVudmlyb25tZW50Ogog
ICAgICBBUFBfUE9SVDogMjI4ODEKICAgICAgI0RJU0FCTEVfVFJBQ0lORzogMQogICAgICBPVEVMX0FH
RU5UX0VORFBPSU5UOiBhd3Mtb3RlbC1jb2xsZWN0b3I6NDMxNwogICAgZW52X2ZpbGU6CiAgICAgIC0g
dGFpYXIuZW52CiAgICBwb3J0czoKICAgICAgLSAiMjI4ODE6MjI4ODEiCiAgICB3b3JraW5nX2Rpcjog
Ii91c3IvbG9jYWwvc3JjIgogICAgdm9sdW1lczoKICAgICAgLSBwYXljZXJ0aWZ5X3RhaWFyX2dvOi9n
bwogICAgZGVwZW5kc19vbjoKICAgICAgLSBhd3Mtb3RlbC1jb2xsZWN0b3IKICAgICNjb21tYW5kOiBb
Ii91c3IvbG9jYWwvYmluL3dhaXQtZm9yLxl0LnNoIiwgImF3cy1vdGVsLWNvbGxlY3Rvcjo0MzE3Iiwg
Ii0tIiwgInRhaWFyIl0KICAgIGNvbW1hbmQ6IFsiL3Vzci9sb2NhbC9iaW4vd2FpdC1mb3ItaXQuc2gi
LCAicG9zdGdyZXNfZGV2OjU0MzIiLCAiLS0iLCAidGFpYXIiXQoKICBhd3Mtb3RlbC1jb2xsZWN0b3I6
CiAgICBpbWFnZTogYW1hem9uL2F3cy1vdGVsLWNvbGxlY3RvcjpsYXRlc3QKICAgIGNvbW1hbmQ6IFsi
LS1jb25maWc9L2V0Yy9vdGVsLWFnZW50LWNvbmZpZy55YW1sIiwgIi0tbG9nLWxldmVsPURFQlVHIl0K
ICAgIGVudmlyb25tZW50OgogICAgICAtIEFXU19SRUdJT049dXMtZWFzdC0xCiAgICAgICMgUHV0IHlv
dXIga2V5IGlkIGFuZCBzZWNyZXQga2V5IGluIHRoZSAuZW52IGZpbGUKICAgICAgLSBBV1NfQUNDRVNT
X0tFWV9JRD0ke0FXU19BQ0NFU1NfS0VZX0lEfQogICAgICAtIEFXU19TRUNSRVRfQUNDRVNTX0tFWT0k
e0FXU19TRUNSRVRfQUNDRVNTX0tFWX0KICAgIHZvbHVtZXM6CiAgICAgIC0gLi9vdGVsLWNvbGxlY3Rv
ci1jb25maWcuYXdzLnlhbWw6L2V0Yy9vdGVsLWFnZW50LWNvbmZpZy55YW1sCiAgICAgIC0gfi8uYXdz
Oi9yb290Ly5hd3MKICAgIHBvcnRzOgogICAgICAtICIxNzc3OjE3NzciICAgIyBwcHJvZiBleHRlbnNp
b24KICAgICAgLSAiNTU2Nzk6NTU2NzkiICMgenBhZ2VzIGV4dGVuc2lvbgogICAgICAtICI1NTY4MCIg
ICAgICAgIyBvdGxwIHJlY2VpdmVyCiAgICAgIC0gIjEzMTMzIiAgICAgICAjIGhlYWx0aF9jaGVjawoK
ICBwb3N0Z3Jlc19kZXY6CiAgICBpbWFnZTogcG9zdGdyZXM6MTIKICAgIGVudmlyb25tZW50OgogICAg
ICBQT1NUR1JFU19EQjogJHtEQl9EQk5BTUV9CiAgICAgIFBPU1RHUkVTX1VTRVI6ICR7REJfVVNFUn0K
ICAgICAgUE9TVEdSRVNfUEFTU1dPUkQ6ICR7REJfUEFTU1dPUkR9CiAgICB2b2x1bWVzOgogICAgICAt
IC4vcG9zdGdyZXMvcG9zdGdyZXMuY29uZjovdXNyL2xvY2FsL2V0Yy9wb3N0Z3Jlcy5jb25mCiAgICAg
IC0gLi9wb3N0Z3Jlcy9kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YTpkZWxlZ2F0ZWQKICAgIGNv
bW1hbmQ6IHBvc3RncmVzIC1jIGNvbmZpZ19maWxlPS91c3IvbG9jYWwvZXRjL3Bvc3RncmVzLmNvbmYK
ICAgIHBvcnRzOgogICAgICAtIDU0MzIwOjU0MzIKCiAgcG9zdGdyZXNfdGVzdDoKICAgIGltYWdlOiBw
b3N0Z3JlczoxMgogICAgZW52aXJvbm1lbnQ6CiAgICAgIFBPU1RHUkVTX0RCOiAke1RFU1RfREJfREJO
QU1FfQogICAgICBQT1NUR1JFU19VU0VSOiAke1RFU1RfREJfVVNFUn0KICAgICAgUE9TVEdSRVNfUEFT
U1dPUkQ6ICR7VEVTVF9EQl9QQVNTV09SRH0KICAgIHBvcnRzOgogICAgICAtIDU0MzIxOjU0MzIKCnZv
bHVtZXM6CiAgcGF5Y2VydGlmeV90YWlhcl9nbzoKICAgIFBLAwQUAAAAAAA4qGlSmSoQaWcEAABnBAAA
FAAAAC50ZW1wbGF0ZS9Eb2NrZXJmaWxlIyBEb2NrZXJmaWxlIFJlZmVyZW5jZXM6IGh0dHBzOi8vZG9j
cy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvYnVpbGRlci8KCiMgU3RhcnQgZnJvbSBnb2xhbmcg
djIuMTUgYmFzZSBpbWFnZQpGUk9NIGdvbGFuZzoxLjE1IGFzIGJ1aWxkZXIKCiMgU2V0IHRoZSBjdXJy
ZW50IHdvcmtpbmcgZGlyZWN0b3J5IGluc2lkZSB0aGUgY29udGFpbmVyCldPUktESVIgL3Vzci9sb2Nh
bC9zcmMKCiMgQ29weSBldmVyeXRoaW5nIGZyb20gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHRvIHRoZSBQ
V0QgaW5zaWRlIHRoZSBjb250YWluZXIKQ09QWSAuIC4KCiMgRG93bmxvYWQgYWxsIHRoZSBkZXBlbmRl
bmNpZXMKUlVOIGdvIGdldCAtZCAtdiAuLy4uLiAmJiBnbyBnZXQgZ2l0aHViLmNvbS9kZWVwbWFwL29h
cGktY29kZWdlbi9jbWQvb2FwaS1jb2RlZ2VuCgpSVU4gbWFrZSBjb2RlZ2VuCgpSVU4gQ0dPX0VOQUJM
RUQ9MCBHT09TPWxpbnV4IGdvIGJ1aWxkIC1hIC1vIC91c3IvbG9jYWwvc3JjL3RhaWFyIGNtZC90YWlh
ci9tYWluLmdvCgpGUk9NIGFscGluZTpsYXRlc3QKCiMgVXBkYXRlIGFuZCB1cGdyYWRlIHRoZSBwYWNr
YWdlcywgYWRkIGNhLWNlcnRzLCByZW1vdmUgdGhlIGNhY2hlOyBkaWRuJ3Qgd2FudCB0byBwdWxsIGRv
d24gdGhlIHBhY2thZ2UgaW5kZXggdHdpY2UgKGUuZy4gdXNpbmcgdGhlIC0tbm8tY2FjaGUgZmxhZykK
UlVOIGFwayB1cGRhdGUgJiYgYXBrIHVwZ3JhZGUgJiYgYXBrIGFkZCBiYXNoICYmIGFwayBhZGQgY2Et
Y2VydGlmaWNhdGVzICYmIHJtIC1yZiAvdmFyL2NhY2hlL2Fway8qCgpXT1JLRElSIC91c3IvbG9jYWwv
YmluLwoKQ09QWSAtLWZyb209YnVpbGRlciAvdXNyL2xvY2FsL3NyYy90YWlhciAvdXNyL2xvY2FsL2Jp
bgpDT1BZIC0tZnJvbT1idWlsZGVyIC91c3IvbG9jYWwvc3JjL3dhaXQtZm9yLWl0LnNoIC91c3IvbG9j
YWwvYmluCgpSVU4gY2htb2QgYSt4IC91c3IvbG9jYWwvYmluL3dhaXQtZm9yLWl0LnNoCgojIFRPRE86
IGZpbmQgYSB3YXkgdG8gYXZvaWQgaGFyZC1jb2RpbmcgdGhpcy4uLiBidWlsZCBhcmd1bWVudCBwZXJo
YXBzPwpFWFBPU0UgMjI4ODEKCiMgUnVuIHRoZSBleGVjdXRhYmxlCkNNRCBbIi91c3IvbG9jYWwvYmlu
L3RhaWFyIl0KCglQSwMEFAAAAAAAOKhpUh5yS4UsAAAALAAAABAAAAAudGVtcGxhdGUvZ28ubW9kbW9k
dWxlIGdpdGh1Yi5jb20vUGF5Q2VydGlmeS90YWlhcgoKZ28gMS4xNQpQSwMEFAAAAAAAOKhpUtIUvyKc
AgAAnAIAABIAAAAudGVtcGxhdGUvTWFrZWZpbGUKZGV2OgoJZG9ja2VyIHJ1biAtdiBgcHdkYDovdXNy
L2xvY2FsL3NyYyAtdiBwYXljZXJ0aWZ5X3RhaWFyX2dvOi9nbyAtdyAvdXNyL2xvY2FsL3NyYyAtaXQg
LS1ybSAtLWVudi1maWxlIC5lbnYgLS1uZXQgdGFpYXJfZGVmYXVsdCBnb2xhbmc6MS4xNSAvYmluL2Jh
c2gKCnRlc3Q6Cglkb2NrZXIgcnVuIC12IGBwd2RgOi91c3IvbG9jYWwvc3JjIC12IHBheWNlcnRpZnlf
dGFpYXJfZ286L2dvIC13IC91c3IvbG9jYWwvc3JjIC1pdCAtLXJtIC0tZW52LWZpbGUgLmVudiBnb2xh
bmc6MS4xNSBnbyB0ZXN0IC4vLi4uCgpidWlsZDoKCWRvY2tlci1jb21wb3NlIGJ1aWxkCgpydW46Cglk
b2NrZXItY29tcG9zZSB1cAoKY29kZWdlbjoKCW9hcGktY29kZWdlbiAtZ2VuZXJhdGUgc2VydmVyIC1w
YWNrYWdlIGFwaV92MSB0YWlhci12MS5vcGVuYXBpLnlhbWwgPiBpbnRlcm5hbC9hcGkvdjEvc2VydmVy
Lmdlbi5nbyAmJiAgICAgb2FwaS1jb2RlZ2VuIC1nZW5lcmF0ZSB0eXBlcyAtcGFja2FnZSBhcGlfdjEg
dGFpYXItdjEub3BlbmFwaS55YW1sID4gaW50ZXJuYWwvYXBpL3YxL3R5cGVzLmdlbi5nbyAmJiAgICAg
b2FwaS1jb2RlZ2VuIC1nZW5lcmF0ZSBzcGVjIC1wYWNrYWdlIGFwaV92MSB0YWlhci12MS5vcGVuYXBp
LnlhbWwgPiBpbnRlcm5hbC9hcGkvdjEvc3BlYy5nZW4uZ28KCVBLAwQUAAAAAAA4qGlSyA1WQaQBAACk
AQAAKAAAAC50ZW1wbGF0ZS9vdGVsLWNvbGxlY3Rvci1jb25maWcuYXdzLnlhbWxleHRlbnNpb25zOgog
IGhlYWx0aF9jaGVjazoKICBwcHJvZjoKICAgIGVuZHBvaW50OiAwLjAuMC4wOjE3NzcKCnJlY2VpdmVy
czoKICBvdGxwOgogICAgcHJvdG9jb2xzOgogICAgICBncnBjOgogICAgICAgIGVuZHBvaW50OiAwLjAu
MC4wOjQzMTcKCnByb2Nlc3NvcnM6CiAgYmF0Y2g6CiAgcXVldWVkX3JldHJ5OgoKZXhwb3J0ZXJzOgog
IGxvZ2dpbmc6CiAgICBsb2dsZXZlbDogZGVidWcKICBhd3N4cmF5OgogIGF3c2VtZjoKCnNlcnZpY2U6
CiAgcGlwZWxpbmVzOgogICAgdHJhY2VzOgogICAgICByZWNlaXZlcnM6IFtvdGxwXQogICAgICBleHBv
cnRlcnM6IFthd3N4cmF5XQogICAgbWV0cmljczoKICAgICAgcmVjZWl2ZXJzOiBbb3RscF0KICAgICAg
ZXhwb3J0ZXJzOiBbYXdzZW1mXQoKICBleHRlbnNpb25zOiBbcHByb2ZdCiAgICBQSwMEFAAAAAAAOKhp
UllF3QIPBgAADwYAABMAAAAudGVtcGxhdGUvUkVBRE1FLm1kIyB0YWlhcgoKX0Rlc2NyaWJlIHRoaXMg
cHJvamVjdF8KCiMjIERldmVsb3BtZW50ClRvIHN0YXJ0IGEgc2hlbGwgaW4gdGhlIGRldmVsb3BtZW50
IGVudmlyb25tZW50LCBzaW1wbHkgcnVuOgpgYGBzaGVsbCBzY3JpcHQKbWFrZSBkZXYKYGBgCkluc2lk
ZSB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgeW91IGNhbiB3b3JrIHdpdGggdGhlIGFwcCBsaWtl
IHlvdSB3b3VsZCBhbnkgdHJhZGl0aW9uYWwgR28gYXBwLiBGb3IgZXhhbXBsZSwgdG8gcnVuCiB0aGUg
YXBwLCBleGVjdXRlOgpgYGBzaGVsbCBzY3JpcHQKcm9vdEBmYTA3YjUyZTM2Yjk6L3Vzci9sb2NhbC9z
cmMjIGdvIHJ1biBjbWQvdGFpYXIvbWFpbi5nbwpgYGAKIyBHZW5lcmF0aW5nIENvZGUgZnJvbSBTd2Fn
Z2VyClRoaXMgcHJvamVjdCB1c2VzIFtgb2FwaS1jb2RlZ2VuYF0oaHR0cHM6Ly9naXRodWIuY29tL2Rl
ZXBtYXAvb2FwaS1jb2RlZ2VuKSB0byBnZW5lcmF0ZSBjb2RlIGZyb20gYW4gT3BlbkFQSSAzLjAgZmls
ZS4KSWYgeW91IG1ha2UgY2hhbmdlcyB0byB0aGUgcHJvamVjdCBPcGVuQVBJIGZpbGUgKFt0YWlhci12
MS5vcGVuYXBpLnlhbWxdKHRhaWFyLXYxLm9wZW5hcGkueWFtbCkpIHlvdSBzaG91bGQgcnVuOgpgYGBz
aGVsbCBzY3JpcHQKbWFrZSBjb2RlZ2VuCmBgYApUbyBnZW5lcmF0ZSB0aGUgbmV3IHNlcnZlciBpbnRl
cmZhY2UsIHR5cGVzLCBhbmQgc3BlYy4KCiMjIFRlc3RpbmcKVG8gZXhlY3V0ZSB0aGUgdGVzdHMsIHJ1
bjoKYGBgc2hlbGwgc2NyaXB0Cm1ha2UgdGVzdApgYGAKRHVyaW5nIHRoZSBkZXZlbG9wbWVudCBwcm9j
ZXNzIHlvdSBtYXkgZmluZCBgbWFrZSB0ZXN0YCBzbG93aW5nIHlvdSBkb3duLiBJbiB0aGUgbWlkZGxl
IG9mIGNvZGluZyBJJ2QgcmVjb21tZW5kIHlvdSBqdXN0CiBydW4gdGhlIHRlc3RzIGluIHRoZSBkZXYg
c2hlbGw6CmBgYHNoZWxsIHNjcmlwdApyb290QGZhMDdiNTJlMzZiOTovdXNyL2xvY2FsL3NyYyMgZ28g
dGVzdCAuLy4uLgpgYGAKVGhhdCB3aWxsIGV4ZWN1dGUgYWxsIHRoZSB0ZXN0cyBpbiB0aGUgcHJvamVj
dC4gVG8gcnVuIHRoZSB0ZXN0cyBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlOgpgYGBzaGVsbCBzY3JpcHQK
cm9vdEBmNmIyZTE4MmMzN2Q6L3Vzci9sb2NhbC9zcmMjIGdvIHRlc3QgLi9pbnRlcm5hbC9hcGkvdjEv
CmBgYApBbmQgdG8gcnVuIGEgc3BlY2lmaWMgdGVzdCAob3IgdGVzdHMgbWF0Y2hpbmcgYSBzcGVjaWZp
YyBwYXR0ZXJuKToKYGBgc2hlbGwgc2NyaXB0CnJvb3RAZjZiMmUxODJjMzdkOi91c3IvbG9jYWwvc3Jj
IyBnbyB0ZXN0IC4vaW50ZXJuYWwvYXBpL3YxLyAtLXJ1biBFeGFtcGxlCmBgYAoKIyMgQnVpbGRpbmcg
dGhlIERvY2tlciBJbWFnZQpUaGUgbWFrZSBmaWxlIGNvbnRhaW5zIGEgZ29hbCB0byBidWlsZCB0aGUg
RG9ja2VyIGltYWdlOgpgYGBgc2hlbGwgc2NyaXB0Cm1ha2UgYnVpbGQKYGBgYAoKIyMgUnVubmluZyB0
aGUgRG9ja2VyIEltYWdlClRvIHJ1biB0aGUgYXBwIGluIGEgRG9ja2VyIGNvbnRhaW5lcjoKYGBgc2hl
bGwgc2NyaXB0Cm1ha2UgcnVuCmBgYAogICAgUEsDBBQAAAAAADioaVLwwYo1IwMAACMDAAAfAAAALnRl
bXBsYXRlL3RhaWFyLXYxLm9wZW5hcGkueWFtbG9wZW5hcGk6IDMuMC4yCnNlcnZlcnM6CiAgLSB1cmw6
IC90YWlhci92MQppbmZvOgogIGRlc2NyaXB0aW9uOiB8LQogICAgX1doYXQgZG9lcyB0aGlzIHByb2pl
Y3QgZG8/XwoKICAgIFNvbWUgdXNlZnVsIGxpbmtzOgogICAgLSBbVGhlIHRhaWFyIHJlcG9zaXRvcnld
KGh0dHBzOi8vZ2l0aHViLmNvbS9QYXlDZXJ0aWZ5L3RhaWFyKQoKICB2ZXJzaW9uOiAwLjAuMQogIHRp
dGxlOiBQYXlDZXJ0aWZ5IHRhaWFyIC0gT3BlbkFQSSAzLjAKICB0ZXJtc09mU2VydmljZTogJ2h0dHA6
Ly9zd2FnZ2VyLmlvL3Rlcm1zLycKICBjb250YWN0OgogICAgZW1haWw6IGRldnNAcGF5Y2VydGlmeS5j
b20KICBsaWNlbnNlOgogICAgbmFtZTogQXBhY2hlIDIuMAogICAgdXJsOiAnaHR0cDovL3d3dy5hcGFj
aGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLmh0bWwnCnRhZ3M6CiAgLSBuYW1lOiB0YWlhcgogICAg
ZGVzY3JpcHRpb246IEV2ZXJ5dGhpbmcgYWJvdXQgdGFpYXIKcGF0aHM6CiAgL2V4YW1wbGU6CiAgICBn
ZXQ6CiAgICAgIG9wZXJhdGlvbklkOiBleGFtcGxlCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAnMjAw
JzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBoZWxsbyB3b3JsZAogICAgICAgICAgY29udGVudDoKICAg
ICAgICAgICAgdGV4dC9wbGFpbjoKICAgICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgICB0
eXBlOiBzdHJpbmcKICAgICAgICAgICAgICAgIGV4YW1wbGU6IGhlbGxvIHdvcmxkCiAgICAgICAgJzQw
MCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogYmFkIGlucHV0IHBhcmFtZXRlcgogICAgUEsDBBQAAAAA
ADioaVLNoCtmEQEAABEBAAATAAAALnRlbXBsYXRlL3RhaWFyLmVudkRCX0hPU1Q9cG9zdGdyZXNfZGV2
CglEQl9QT1JUPTU0MzIKCURCX0RCTkFNRT10YWlhcl9kZXYKCURCX1VTRVI9dGFpYXJfZGJhCglEQl9Q
QVNTV09SRD10YWlhcjEyMwoJREJfU1NMTU9ERT1kaXNhYmxlCgoJVEVTVF9EQl9IT1NUPXBvc3RncmVz
X3Rlc3QKCVRFU1RfREJfUE9SVD01NDMyCglURVNUX0RCX0RCTkFNRT10YWlhcl90ZXN0CglURVNUX0RC
X1VTRVI9dGFpYXJfZGJhCglURVNUX0RCX1BBU1NXT1JEPXRhaWFyNDU2CglURVNUX0RCX1NTTE1PREU9
ZGlzYWJsZQoJICAgIFBLAwQUAAAAAAA4qGlS9NWkUeASAADgEgAAGAAAAC50ZW1wbGF0ZS93YWl0LWZv
ci1pdC5zaCMhL3Vzci9iaW4vZW52IGJhc2gKIyBVc2UgdGhpcyBzY3JpcHQgdG8gdGVzdCBpZiBhIGdp
dmVuIFRDUCBob3N0L3BvcnQgYXJlIGF2YWlsYWJsZQoKV0FJVEZPUklUX2NtZG5hbWU9JHswIyMqL30K
CmVjaG9lcnIoKSB7IGlmIFtbICRXQUlURk9SSVRfUVVJRVQgLW5lIDEgXV07IHRoZW4gZWNobyAiJEAi
IDE+JjI7IGZpIH0KCnVzYWdlKCkKewoJY2F0IDw8IFVTQUdFID4mMgpVc2FnZToKCSRXQUlURk9SSVRf
Y21kbmFtZSBob3N0OnBvcnQgWy1zXSBbLXQgdGltZW91dF0gWy0tIGNvbW1hbmQgYXJnc10KCS1oIEhP
U1QgfCAtLWhvc3Q9SE9TVCAgICAgICBIb3N0IG9yIElQIHVuZGVyIHRlc3QKCS1wIFBPUlQgfCAtLXBv
cnQ9UE9SVCAgICAgICBUQ1AgcG9ydCB1bmRlciB0ZXN0CgkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQWx0ZXJuYXRpdmVseSwgeW91IHNwZWNpZnkgdGhlIGhvc3QgYW5kIHBvcnQgYXMgaG9zdDpwb3J0
CgktcyB8IC0tc3RyaWN0ICAgICAgICAgICAgICAgT25seSBleGVjdXRlIHN1YmNvbW1hbmQgaWYgdGhl
IHRlc3Qgc3VjY2VlZHMKCS1xIHwgLS1xdWlldCAgICAgICAgICAgICAgICBEb24ndCBvdXRwdXQgYW55
IHN0YXR1cyBtZXNzYWdlcwoJLXQgVElNRU9VVCB8IC0tdGltZW91dD1USU1FT1VUCgkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVGltZW91dCBpbiBzZWNvbmRzLCB6ZXJvIGZvciBubyB0aW1lb3V0Cgkt
LSBDT01NQU5EIEFSR1MgICAgICAgICAgICAgRXhlY3V0ZSBjb21tYW5kIHdpdGggYXJncyBhZnRlciB0
aGUgdGVzdCBmaW5pc2hlcwpVU0FHRQoJZXhpdCAxCn0KCndhaXRfZm9yKCkKewoJaWYgW1sgJFdBSVRG
T1JJVF9USU1FT1VUIC1ndCAwIF1dOyB0aGVuCgkgICAgZWNob2VyciAiJFdBSVRGT1JJVF9jbWRuYW1l
OiB3YWl0aW5nICRXQUlURk9SSVRfVElNRU9VVCBzZWNvbmRzIGZvciAkV0FJVEZPUklUX0hPU1Q6JFdB
SVRGT1JJVF9QT1JUIgoJZWxzZQoJICAgIGVjaG9lcnIgIiRXQUlURk9SSVRfY21kbmFtZTogd2FpdGlu
ZyBmb3IgJFdBSVRGT1JJVF9IT1NUOiRXQUlURk9SSVRfUE9SVCB3aXRob3V0IGEgdGltZW91dCIKCWZp
CglXQUlURk9SSVRfc3RhcnRfdHM9JChkYXRlICslcykKCXdoaWxlIDoKCWRvCgkgICAgaWYgW1sgJFdB
SVRGT1JJVF9JU0JVU1kgLWVxIDEgXV07IHRoZW4KCSAgICAgICAgbmMgLXogJFdBSVRGT1JJVF9IT1NU
ICRXQUlURk9SSVRfUE9SVAoJICAgICAgICBXQUlURk9SSVRfcmVzdWx0PSQ/CgkgICAgZWxzZQoJICAg
ICAgICAoZWNobyAtbiA+IC9kZXYvdGNwLyRXQUlURk9SSVRfSE9TVC8kV0FJVEZPUklUX1BPUlQpID4v
ZGV2L251bGwgMj4mMQoJICAgICAgICBXQUlURk9SSVRfcmVzdWx0PSQ/CgkgICAgZmkKCSAgICBpZiBb
WyAkV0FJVEZPUklUX3Jlc3VsdCAtZXEgMCBdXTsgdGhlbgoJICAgICAgICBXQUlURk9SSVRfZW5kX3Rz
PSQoZGF0ZSArJXMpCgkgICAgICAgIGVjaG9lcnIgIiRXQUlURk9SSVRfY21kbmFtZTogJFdBSVRGT1JJ
VF9IT1NUOiRXQUlURk9SSVRfUE9SVCBpcyBhdmFpbGFibGUgYWZ0ZXIgJCgoV0FJVEZPUklUX2VuZF90
cyAtIFdBSVRGT1JJVF9zdGFydF90cykpIHNlY29uZHMiCgkgICAgICAgIGJyZWFrCgkgICAgZmkKCSAg
ICBzbGVlcCAxCglkb25lCglyZXR1cm4gJFdBSVRGT1JJVF9yZXN1bHQKfQoKd2FpdF9mb3Jfd3JhcHBl
cigpCnsKCSMgSW4gb3JkZXIgdG8gc3VwcG9ydCBTSUdJTlQgZHVyaW5nIHRpbWVvdXQ6IGh0dHA6Ly91
bml4LnN0YWNrZXhjaGFuZ2UuY29tL2EvNTc2OTIKCWlmIFtbICRXQUlURk9SSVRfUVVJRVQgLWVxIDEg
XV07IHRoZW4KCSAgICB0aW1lb3V0ICRXQUlURk9SSVRfQlVTWVRJTUVGTEFHICRXQUlURk9SSVRfVElN
RU9VVCAkMCAtLXF1aWV0IC0tY2hpbGQgLS1ob3N0PSRXQUlURk9SSVRfSE9TVCAtLXBvcnQ9JFdBSVRG
T1JJVF9QT1JUIC0tdGltZW91dD0kV0FJVEZPUklUX1RJTUVPVVQgJgoJZWxzZQoJICAgIHRpbWVvdXQg
JFdBSVRGT1JJVF9CVVNZVElNRUZMQUcgJFdBSVRGT1JJVF9USU1FT1VUICQwIC0tY2hpbGQgLS1ob3N0
PSRXQUlURk9SSVRfSE9TVCAtLXBvcnQ9JFdBSVRGT1JJVF9QT1JUIC0tdGltZW91dD0kV0FJVEZPUklU
X1RJTUVPVVQgJgoJZmkKCVdBSVRGT1JJVF9QSUQ9JCEKCXRyYXAgImtpbGwgLUlOVCAtJFdBSVRGT1JJ
VF9QSUQiIElOVAoJd2FpdCAkV0FJVEZPUklUX1BJRAoJV0FJVEZPUklUX1JFU1VMVD0kPwoJaWYgW1sg
JFdBSVRGT1JJVF9SRVNVTFQgLW5lIDAgXV07IHRoZW4KCSAgICBlY2hvZXJyICIkV0FJVEZPUklUX2Nt
ZG5hbWU6IHRpbWVvdXQgb2NjdXJyZWQgYWZ0ZXIgd2FpdGluZyAkV0FJVEZPUklUX1RJTUVPVVQgc2Vj
b25kcyBmb3IgJFdBSVRGT1JJVF9IT1NUOiRXQUlURk9SSVRfUE9SVCIKCWZpCglyZXR1cm4gJFdBSVRG
T1JJVF9SRVNVTFQKfQoKIyBwcm9jZXNzIGFyZ3VtZW50cwp3aGlsZSBbWyAkIyAtZ3QgMCBdXQpkbwoJ
Y2FzZSAiJDEiIGluCgkgICAgKjoqICkKCSAgICBXQUlURk9SSVRfaG9zdHBvcnQ9KCR7MS8vOi8gfSkK
CSAgICBXQUlURk9SSVRfSE9TVD0ke1dBSVRGT1JJVF9ob3N0cG9ydFswXX0KCSAgICBXQUlURk9SSVRf
UE9SVD0ke1dBSVRGT1JJVF9ob3N0cG9ydFsxXX0KCSAgICBzaGlmdCAxCgkgICAgOzsKCSAgICAtLWNo
aWxkKQoJICAgIFdBSVRGT1JJVF9DSElMRD0xCgkgICAgc2hpZnQgMQoJICAgIDs7CgkgICAgLXEgfCAt
LXF1aWV0KQoJICAgIFdBSVRGT1JJVF9RVUlFVD0xCgkgICAgc2hpZnQgMQoJICAgIDs7CgkgICAgLXMg
fCAtLXN0cmljdCkKCSAgICBXQUlURk9SSVRfU1RSSUNUPTEKCSAgICBzaGlmdCAxCgkgICAgOzsKCSAg
ICAtaCkKCSAgICBXQUlURk9SSVRfSE9TVD0iJDIiCgkgICAgaWYgW1sgJFdBSVRGT1JJVF9IT1NUID09
ICIiIF1dOyB0aGVuIGJyZWFrOyBmaQoJICAgIHNoaWZ0IDIKCSAgICA7OwoJICAgIC0taG9zdD0qKQoJ
ICAgIFdBSVRGT1JJVF9IT1NUPSIkezEjKj19IgoJICAgIHNoaWZ0IDEKCSAgICA7OwoJICAgIC1wKQoJ
ICAgIFdBSVRGT1JJVF9QT1JUPSIkMiIKCSAgICBpZiBbWyAkV0FJVEZPUklUX1BPUlQgPT0gIiIgXV07
IHRoZW4gYnJlYWs7IGZpCgkgICAgc2hpZnQgMgoJICAgIDs7CgkgICAgLS1wb3J0PSopCgkgICAgV0FJ
VEZPUklUX1BPUlQ9IiR7MSMqPX0iCgkgICAgc2hpZnQgMQoJICAgIDs7CgkgICAgLXQpCgkgICAgV0FJ
VEZPUklUX1RJTUVPVVQ9IiQyIgoJICAgIGlmIFtbICRXQUlURk9SSVRfVElNRU9VVCA9PSAiIiBdXTsg
dGhlbiBicmVhazsgZmkKCSAgICBzaGlmdCAyCgkgICAgOzsKCSAgICAtLXRpbWVvdXQ9KikKCSAgICBX
QUlURk9SSVRfVElNRU9VVD0iJHsxIyo9fSIKCSAgICBzaGlmdCAxCgkgICAgOzsKCSAgICAtLSkKCSAg
ICBzaGlmdAoJICAgIFdBSVRGT1JJVF9DTEk9KCIkQCIpCgkgICAgYnJlYWsKCSAgICA7OwoJICAgIC0t
aGVscCkKCSAgICB1c2FnZQoJICAgIDs7CgkgICAgKikKCSAgICBlY2hvZXJyICJVbmtub3duIGFyZ3Vt
ZW50OiAkMSIKCSAgICB1c2FnZQoJICAgIDs7Cgllc2FjCmRvbmUKCmlmIFtbICIkV0FJVEZPUklUX0hP
U1QiID09ICIiIHx8ICIkV0FJVEZPUklUX1BPUlQiID09ICIiIF1dOyB0aGVuCgllY2hvZXJyICJFcnJv
cjogeW91IG5lZWQgdG8gcHJvdmlkZSBhIGhvc3QgYW5kIHBvcnQgdG8gdGVzdC4iCgl1c2FnZQpmaQoK
V0FJVEZPUklUX1RJTUVPVVQ9JHtXQUlURk9SSVRfVElNRU9VVDotMTV9CldBSVRGT1JJVF9TVFJJQ1Q9
JHtXQUlURk9SSVRfU1RSSUNUOi0wfQpXQUlURk9SSVRfQ0hJTEQ9JHtXQUlURk9SSVRfQ0hJTEQ6LTB9
CldBSVRGT1JJVF9RVUlFVD0ke1dBSVRGT1JJVF9RVUlFVDotMH0KCiMgQ2hlY2sgdG8gc2VlIGlmIHRp
bWVvdXQgaXMgZnJvbSBidXN5Ym94PwpXQUlURk9SSVRfVElNRU9VVF9QQVRIPSQodHlwZSAtcCB0aW1l
b3V0KQpXQUlURk9SSVRfVElNRU9VVF9QQVRIPSQocmVhbHBhdGggJFdBSVRGT1JJVF9USU1FT1VUX1BB
VEggMj4vZGV2L251bGwgfHwgcmVhZGxpbmsgLWYgJFdBSVRGT1JJVF9USU1FT1VUX1BBVEgpCgpXQUlU
Rk9SSVRfQlVTWVRJTUVGTEFHPSIiCmlmIFtbICRXQUlURk9SSVRfVElNRU9VVF9QQVRIID1+ICJidXN5
Ym94IiBdXTsgdGhlbgoJV0FJVEZPUklUX0lTQlVTWT0xCgkjIENoZWNrIGlmIGJ1c3lib3ggdGltZW91
dCB1c2VzIC10IGZsYWcKCSMgKHJlY2VudCBBbHBpbmUgdmVyc2lvbnMgZG9uJ3Qgc3VwcG9ydCAtdCBh
bnltb3JlKQoJaWYgdGltZW91dCAmPi9kZXYvc3Rkb3V0IHwgZ3JlcCAtcSAtZSAnLXQgJzsgdGhlbgoJ
ICAgIFdBSVRGT1JJVF9CVVNZVElNRUZMQUc9Ii10IgoJZmkKZWxzZQoJV0FJVEZPUklUX0lTQlVTWT0w
CmZpCgppZiBbWyAkV0FJVEZPUklUX0NISUxEIC1ndCAwIF1dOyB0aGVuCgl3YWl0X2ZvcgoJV0FJVEZP
UklUX1JFU1VMVD0kPwoJZXhpdCAkV0FJVEZPUklUX1JFU1VMVAplbHNlCglpZiBbWyAkV0FJVEZPUklU
X1RJTUVPVVQgLWd0IDAgXV07IHRoZW4KCSAgICB3YWl0X2Zvcl93cmFwcGVyCgkgICAgV0FJVEZPUklU
X1JFU1VMVD0kPwoJZWxzZQoJICAgIHdhaXRfZm9yCgkgICAgV0FJVEZPUklUX1JFU1VMVD0kPwoJZmkK
ZmkKCmlmIFtbICRXQUlURk9SSVRfQ0xJICE9ICIiIF1dOyB0aGVuCglpZiBbWyAkV0FJVEZPUklUX1JF
U1VMVCAtbmUgMCAmJiAkV0FJVEZPUklUX1NUUklDVCAtZXEgMSBdXTsgdGhlbgoJICAgIGVjaG9lcnIg
IiRXQUlURk9SSVRfY21kbmFtZTogc3RyaWN0IG1vZGUsIHJlZnVzaW5nIHRvIGV4ZWN1dGUgc3VicHJv
Y2VzcyIKCSAgICBleGl0ICRXQUlURk9SSVRfUkVTVUxUCglmaQoJZXhlYyAiJHtXQUlURk9SSVRfQ0xJ
W0BdfSIKZWxzZQoJZXhpdCAkV0FJVEZPUklUX1JFU1VMVApmaQoJUEsDBBQAAAAAADioaVJtcoe5XQgA
AF0IAAAmAAAALnRlbXBsYXRlLy5naXRodWIvd29ya2Zsb3dzL2RlcGxveS55bWxuYW1lOiB0YWlhcgoK
ZW52OgogIEFQUF9OQU1FOiB0YWlhcgogIEVDUl9SRVBPU0lUT1JZOiB0YWlhcgoKb246CiAgcHVzaDoK
CWJyYW5jaGVzOgoJICAtICd1YXQnCgpqb2JzOgogIGJ1aWxkOgoJcnVucy1vbjogdWJ1bnR1LWxhdGVz
dAoJc3RlcHM6CgkgIC0gbmFtZTogSW5zdGFsbCBHbwoJICAgIHVzZXM6IGFjdGlvbnMvc2V0dXAtZ29A
djIKCSAgICB3aXRoOgoJICAgICAgZ28tdmVyc2lvbjogMS4xNQoKCSAgLSBuYW1lOiBDaGVja291dCBj
b2RlCgkgICAgdXNlczogYWN0aW9ucy9jaGVja291dEB2MgoKCSAgLSBuYW1lOiBTZXQgZ2l0IHNob3J0
IFNIQSBjb21taXQgdG8gb3V0cHV0cwoJICAgIGlkOiBleHRyYWN0X3Nob3J0X3NoYQoJICAgIHJ1bjog
ZWNobyAiOjpzZXQtb3V0cHV0IG5hbWU9c2hhX3Nob3J0OjokKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBI
RUFEKSIKCgkgIC0gbmFtZTogRXh0cmFjdCBicmFuY2ggbmFtZQoJICAgIGlkOiBleHRyYWN0X2JyYW5j
aAoJICAgIHNoZWxsOiBiYXNoCgkgICAgcnVuOiBlY2hvICIjI1tzZXQtb3V0cHV0IG5hbWU9YnJhbmNo
O10kKGVjaG8gJCR7R0lUSFVCX1JFRiNyZWZzL2hlYWRzL30pIgoKCSAgLSBuYW1lOiBDb25maWd1cmUg
QVdTIGNyZWRlbnRpYWxzCgkgICAgdXNlczogYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50
aWFsc0B2MQoJICAgIHdpdGg6CgkgICAgICBhd3MtYWNjZXNzLWtleS1pZDogJHsgc2VjcmV0cy5BV1Nf
QUNDRVNTX0tFWV9JRCB9CgkgICAgICBhd3Mtc2VjcmV0LWFjY2Vzcy1rZXk6ICR7IHNlY3JldHMuQVdT
X1NFQ1JFVF9BQ0NFU1NfS0VZIH0KCSAgICAgIGF3cy1yZWdpb246IHVzLWVhc3QtMQoKCSAgLSBuYW1l
OiBMb2dpbiB0byBBV1MgRUNSCgkgICAgaWQ6IGxvZ2luLWVjcgoJICAgIHVzZXM6IGF3cy1hY3Rpb25z
L2FtYXpvbi1lY3ItbG9naW5AdjEKCgkgIC0gbmFtZTogQnVpbGQsIHRhZywgYW5kIHB1c2ggaW1hZ2Ug
dG8gQVdTIEVDUgoJICAgIGlkOiBidWlsZC1pbWFnZQoJICAgIGVudjoKCSAgICAgIEVDUl9SRUdJU1RS
WTogJHsgc3RlcHMubG9naW4tZWNyLm91dHB1dHMucmVnaXN0cnkgfQoJICAgICAgRUNSX1JFUE9TSVRP
Ulk6ICR7IGVudi5FQ1JfUkVQT1NJVE9SWSB9CgkgICAgICBJTUFHRV9UQUc6ICR7IHN0ZXBzLmV4dHJh
Y3Rfc2hvcnRfc2hhLm91dHB1dHMuc2hhX3Nob3J0IH0KCSAgICBydW46IHwKCSAgICAgIGRvY2tlciBi
dWlsZCAtdCAkRUNSX1JFR0lTVFJZLyRFQ1JfUkVQT1NJVE9SWTpsYXRlc3QgLgoJICAgICAgZG9ja2Vy
IHB1c2ggJEVDUl9SRUdJU1RSWS8kRUNSX1JFUE9TSVRPUlk6bGF0ZXN0CgkgICAgICBkb2NrZXIgYnVp
bGQgLXQgJEVDUl9SRUdJU1RSWS8kRUNSX1JFUE9TSVRPUlk6JElNQUdFX1RBRyAuCgkgICAgICBkb2Nr
ZXIgcHVzaCAkRUNSX1JFR0lTVFJZLyRFQ1JfUkVQT1NJVE9SWTokSU1BR0VfVEFHCgkgICAgICBlY2hv
ICI6OnNldC1vdXRwdXQgbmFtZT1pbWFnZTo6JEVDUl9SRUdJU1RSWS8kRUNSX1JFUE9TSVRPUlk6JElN
QUdFX1RBRyIKCgkgIC0gbmFtZTogQ2hlY2tvdXQgRUNTIERlcGxveSBQcml2YXRlIEdIIEFjdGlvbgoJ
ICAgIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjIKCSAgICB3aXRoOgoJICAgICAgcmVwb3NpdG9yeTog
UGF5Q2VydGlmeS9naXRodWItYWN0aW9uLWVjcy1kZXBsb3lAdjEKCSAgICAgIHRva2VuOiAkeyBzZWNy
ZXRzLkFDVElPTlNfVE9LRU4gfQoJICAgICAgcGF0aDogLi8uZ2l0aHViL2FjdGlvbnMvZWNzLWRlcGxv
eQoKCSAgLSBuYW1lOiBEZXBsb3kgQXBwIHRvIEVDUyBTZXJ2aWNlCgkgICAgdXNlczogLi8uZ2l0aHVi
L2FjdGlvbnMvZWNzLWRlcGxveQoJICAgIHdpdGg6CgkgICAgICBlbnZpcm9ubWVudDogJ3VhdCcKCSAg
ICAgIGFwcF9yZXBvX25hbWU6ICR7IGVudi5FQ1JfUkVQT1NJVE9SWSB9CgkgICAgICBhcHBfbmFtZTog
JHsgZW52LkFQUF9OQU1FIH0KCSAgICAgIGFwcF92ZXJzaW9uOiAkeyBzdGVwcy5leHRyYWN0X3Nob3J0
X3NoYS5vdXRwdXRzLnNoYV9zaG9ydCB9CgkgICAgICBhd3NfYWNjZXNzX2tleV9pZDogJHsgc2VjcmV0
cy5BV1NfQUNDRVNTX0tFWV9JRCB9CgkgICAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXk6ICR7IHNlY3Jl
dHMuQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIH0KCVBLAwQUAAAAAAA4qGlSfq/eSsgAAADIAAAAGwAAAC50
ZW1wbGF0ZS9jbWQvdGFpYXIvbWFpbi5nb3BhY2thZ2UgbWFpbgoKaW1wb3J0ICgKCSJmbXQiCgkiZ2l0
aHViLmNvbS9QYXlDZXJ0aWZ5L3RhaWFyL2ludGVybmFsL2FwaSIKCSJvcyIKKQoKZnVuYyBtYWluKCkg
ewoJZSA6PSBhcGkuSW5pdGlhbGl6ZUVjaG8oKQoKCWUuTG9nZ2VyLkZhdGFsKGUuU3RhcnQoZm10LlNw
cmludGYoIjolcyIsIG9zLkdldGVudigiQVBQX1BPUlQiKSkpKQp9CgkgICAgUEsDBBQAAAAAADioaVI9
7YB5cAMAAHADAAAlAAAALnRlbXBsYXRlL2ludGVncmF0aW9uL2V4YW1wbGVfdGVzdC5nb3BhY2thZ2Ug
aW50ZWdyYXRpb25fdGVzdAoKaW1wb3J0ICgKCSJnaXRodWIuY29tL2xhYnN0YWNrL2VjaG8iCgkuICJn
aXRodWIuY29tL29uc2kvZ2lua2dvIgoJLiAiZ2l0aHViLmNvbS9vbnNpL2dvbWVnYSIKCSJuZXQvaHR0
cCIKCSJzdHJpbmdzIgopCgp2YXIgXyA9IERlc2NyaWJlKCJHRVQgL3RhaWFyL3YxL2V4YW1wbGUiLCBm
dW5jKCkgewoJQ29udGV4dCgid2hlbiB0aGUgc2VydmljZSBpcyByZWFkeSB0byBhY2NlcHQgcmVxdWVz
dHMiLCBmdW5jKCkgewoJICAgIHJlc3AsIF8gOj0gc2VuZFJlcXVlc3QoaHR0cC5NZXRob2RHZXQsICIv
dGFpYXIvdjEvZXhhbXBsZSIsICIiKQoJICAgIEl0KCJyZXR1cm5zIEhUVFAgc3RhdHVzIGNvZGUgMjAw
IE9LIiwgZnVuYygpIHsKCSAgICAgICAgRXhwZWN0KHJlc3AuQ29kZSkuVG8oRXF1YWwoaHR0cC5TdGF0
dXNPSykpCgkgICAgfSkKCSAgICBJdCgicmV0dXJucyBjb250ZW50IHR5cGUgcGxhaW4gdGV4dCIsIGZ1
bmMoKSB7CgkgICAgICAgIEV4cGVjdChyZXNwLkhlYWRlcigpLkdldChlY2hvLkhlYWRlckNvbnRlbnRU
eXBlKSkuVG8oRXF1YWwoZWNoby5NSU1FVGV4dFBsYWluQ2hhcnNldFVURjgpKQoJICAgIH0pCgkgICAg
SXQoYHJldHVybnMgdGhlIGJvZHkgIkhlbGxvLCBQYXlDZXJ0aWZ5ISJgLCBmdW5jKCkgewoJICAgICAg
ICBFeHBlY3Qoc3RyaW5ncy5UcmltU3BhY2UocmVzcC5Cb2R5LlN0cmluZygpKSkuVG8oRXF1YWwoIkhl
bGxvLCBQYXlDZXJ0aWZ5ISIpKQoJICAgIH0pCgl9KQoJQ29udGV4dCgid2hlbiBhbiBpbnZhbGlkIHBh
cmFtZXRlciBpcyBwcm92aWRlZCIsIGZ1bmMoKSB7CgkgICAgUEl0KCJyZXR1cm5zIEhUVFAgc3RhdHVz
IGNvZGUgNDAwIEJhZCBSZXF1ZXN0IikKCX0pCn0pCglQSwMEFAAAAAAAOKhpUtX02LDACwAAwAsAACkA
AAAudGVtcGxhdGUvaW50ZWdyYXRpb24vaGVhbHRoY2hlY2tfdGVzdC5nb3BhY2thZ2UgaW50ZWdyYXRp
b25fdGVzdAoKaW1wb3J0ICgKCSJnaXRodWIuY29tL2xhYnN0YWNrL2VjaG8iCgkuICJnaXRodWIuY29t
L29uc2kvZ2lua2dvIgoJLiAiZ2l0aHViLmNvbS9vbnNpL2dvbWVnYSIKCSJuZXQvaHR0cCIKCSJzdHJp
bmdzIgoJIm9zIgoJInN0cmluZ3MiCikKCnZhciBfID0gRGVzY3JpYmUoIkdFVCAvdGFpYXIvdjEvaGVh
bHRoY2hlY2siLCBmdW5jKCkgewoJdmFyIHJlc3AgKmh0dHB0ZXN0LlJlc3BvbnNlUmVjb3JkZXIKCUNv
bnRleHQoIndoZW4gdGhlIHNlcnZpY2UgaXMgcmVhZHkgdG8gYWNjZXB0IHJlcXVlc3RzIiwgZnVuYygp
IHsKCSAgICBCZWZvcmVFYWNoKGZ1bmMoKSB7CgkgICAgICAgIHJlc3AsIF8gPSBzZW5kUmVxdWVzdCho
dHRwLk1ldGhvZEdldCwgIi90YWlhci92MS9oZWFsdGhjaGVjayIsICIiKQoJICAgIH0pCgkgICAgSXQo
InJldHVybnMgYSBoZWFsdGh5IHJlc3BvbnNlIiwgZnVuYygpIHsKCSAgICAgICAgRXhwZWN0KHJlc3Au
Q29kZSkuVG8oRXF1YWwoaHR0cC5TdGF0dXNPSykpCgkgICAgICAgIEV4cGVjdChyZXNwLkhlYWRlcigp
LkdldChlY2hvLkhlYWRlckNvbnRlbnRUeXBlKSkuVG8oRXF1YWwoZWNoby5NSU1FQXBwbGljYXRpb25K
U09OQ2hhcnNldFVURjgpKQoJICAgICAgICBFeHBlY3Qoc3RyaW5ncy5UcmltU3BhY2UocmVzcC5Cb2R5
LlN0cmluZygpKSkuVG8oRXF1YWwoYHsibWVzc2FnZSI6IkV2ZXJ5dGhpbmcncyBBLW9oLWdyZWF0ISJ9
YCkpCgkgICAgfSkKCX0pCglDb250ZXh0KCJ3aGVuIHRoZSBzZXJ2aWNlIGlzIG5vdCByZWFkeSIsIGZ1
bmMoKSB7CgkgICAgQmVmb3JlRWFjaChmdW5jKCkgewoJICAgICAgICBob3N0IDo9IG9zLkdldGVudigi
VEVTVF9EQl9IT1NUIikKCSAgICAgICAgZGVmZXIgZnVuYygpIHsKCSAgICAgICAgICAgIG9zLlNldGVu
digiVEVTVF9EQl9IT1NUIiwgaG9zdCkKCSAgICAgICAgfSgpCgkgICAgICAgIG9zLlNldGVudigiVEVT
VF9EQl9IT1NUIiwgInBvc3RncmVzX25vbmV4aXN0ZW50IikKCSAgICAgICAgcmVzcCwgXyA9IHNlbmRS
ZXF1ZXN0KGh0dHAuTWV0aG9kR2V0LCAiL3RhaWFyL3YxL2hlYWx0aGNoZWNrIiwgIiIpCgkgICAgfSkK
CSAgICBJdCgicmV0dXJucyBhIGZhaWx1cmUgcmVzcG9uc2UiLCBmdW5jKCkgewoJICAgICAgICBFeHBl
Y3QocmVzcC5Db2RlKS5UbyhFcXVhbChodHRwLlN0YXR1c1NlcnZpY2VVbmF2YWlsYWJsZSkpCgkgICAg
ICAgIEV4cGVjdChyZXNwLkhlYWRlcigpLkdldChlY2hvLkhlYWRlckNvbnRlbnRUeXBlKSkuVG8oRXF1
YWwoZWNoby5NSU1FQXBwbGljYXRpb25KU09OQ2hhcnNldFVURjgpKQoJICAgICAgICBFeHBlY3Qoc3Ry
aW5ncy5UcmltU3BhY2UocmVzcC5Cb2R5LlN0cmluZygpKSkuVG8oRXF1YWwoIntcIm1lc3NhZ2VcIjpc
ImZhaWxlZCB0byBjb25uZWN0IHRvIGBob3N0PXBvc3RncmVzX25vbmV4aXN0ZW50IHVzZXI9Y2FzaGJh
Y2tfZGJhIGRhdGFiYXNlPWNhc2hiYWNrX3Rlc3RgOiBob3N0bmFtZSByZXNvbHZpbmcgZXJyb3IgKGxv
b2t1cCBwb3N0Z3Jlc19ub25leGlzdGVudCBvbiAxMjcuMC4wLjExOjUzOiBubyBzdWNoIGhvc3QpXCJ9
IikpCgkgICAgfSkKCX0pCn0pCgp2YXIgXyA9IERlc2NyaWJlKCJHRVQgL2hlYWx0aGNoZWNrIiwgZnVu
YygpIHsKCXZhciByZXNwICpodHRwdGVzdC5SZXNwb25zZVJlY29yZGVyCglDb250ZXh0KCJ3aGVuIHRo
ZSBzZXJ2aWNlIGlzIHJlYWR5IHRvIGFjY2VwdCByZXF1ZXN0cyIsIGZ1bmMoKSB7CgkgICAgQmVmb3Jl
RWFjaChmdW5jKCkgewoJICAgICAgICByZXNwLCBfID0gc2VuZFJlcXVlc3QoaHR0cC5NZXRob2RHZXQs
ICIvaGVhbHRoY2hlY2siLCAiIikKCSAgICB9KQoJICAgIEl0KCJyZXR1cm5zIGEgaGVhbHRoeSByZXNw
b25zZSIsIGZ1bmMoKSB7CgkgICAgICAgIEV4cGVjdChyZXNwLkNvZGUpLlRvKEVxdWFsKGh0dHAuU3Rh
dHVzT0spKQoJICAgICAgICBFeHBlY3QocmVzcC5IZWFkZXIoKS5HZXQoZWNoby5IZWFkZXJDb250ZW50
VHlwZSkpLlRvKEVxdWFsKGVjaG8uTUlNRUFwcGxpY2F0aW9uSlNPTkNoYXJzZXRVVEY4KSkKCSAgICAg
ICAgRXhwZWN0KHN0cmluZ3MuVHJpbVNwYWNlKHJlc3AuQm9keS5TdHJpbmcoKSkpLlRvKEVxdWFsKGB7
Im1lc3NhZ2UiOiJFdmVyeXRoaW5nJ3MgQS1vaC1ncmVhdCEifWApKQoJICAgIH0pCgl9KQoJQ29udGV4
dCgid2hlbiB0aGUgc2VydmljZSBpcyBub3QgcmVhZHkiLCBmdW5jKCkgewoJICAgIEJlZm9yZUVhY2go
ZnVuYygpIHsKCSAgICAgICAgaG9zdCA6PSBvcy5HZXRlbnYoIlRFU1RfREJfSE9TVCIpCgkgICAgICAg
IGRlZmVyIGZ1bmMoKSB7CgkgICAgICAgICAgICBvcy5TZXRlbnYoIlRFU1RfREJfSE9TVCIsIGhvc3Qp
CgkgICAgICAgIH0oKQoJICAgICAgICBvcy5TZXRlbnYoIlRFU1RfREJfSE9TVCIsICJwb3N0Z3Jlc19u
b25leGlzdGVudCIpCgkgICAgICAgIHJlc3AsIF8gPSBzZW5kUmVxdWVzdChodHRwLk1ldGhvZEdldCwg
Ii9oZWFsdGhjaGVjayIsICIiKQoJICAgIH0pCgkgICAgSXQoInJldHVybnMgYW4gdW5oZWFsdGh5IHJl
c3BvbnNlIiwgZnVuYygpIHsKCSAgICAgICAgRXhwZWN0KHJlc3AuQ29kZSkuVG8oRXF1YWwoaHR0cC5T
dGF0dXNTZXJ2aWNlVW5hdmFpbGFibGUpKQoJICAgICAgICBFeHBlY3QocmVzcC5IZWFkZXIoKS5HZXQo
ZWNoby5IZWFkZXJDb250ZW50VHlwZSkpLlRvKEVxdWFsKGVjaG8uTUlNRUFwcGxpY2F0aW9uSlNPTkNo
YXJzZXRVVEY4KSkKCSAgICAgICAgRXhwZWN0KHN0cmluZ3MuVHJpbVNwYWNlKHJlc3AuQm9keS5TdHJp
bmcoKSkpLlRvKEVxdWFsKCJ7XCJtZXNzYWdlXCI6XCJmYWlsZWQgdG8gY29ubmVjdCB0byBgaG9zdD1w
b3N0Z3Jlc19ub25leGlzdGVudCB1c2VyPWNhc2hiYWNrX2RiYSBkYXRhYmFzZT1jYXNoYmFja190ZXN0
YDogaG9zdG5hbWUgcmVzb2x2aW5nIGVycm9yIChsb29rdXAgcG9zdGdyZXNfbm9uZXhpc3RlbnQgb24g
MTI3LjAuMC4xMTo1Mzogbm8gc3VjaCBob3N0KVwifSIpKQoJICAgIH0pCgl9KQp9KQoJUEsDBBQAAAAA
ADioaVIwgSdw5AEAAOQBAAAlAAAALnRlbXBsYXRlL2ludGVncmF0aW9uL2hlbHBlcnNfdGVzdC5nb3Bh
Y2thZ2UgaW50ZWdyYXRpb25fdGVzdAoKaW1wb3J0ICgKCSJnaXRodWIuY29tL1BheUNlcnRpZnkvdGFp
YXIvaW50ZXJuYWwvYXBpIgoJImdpdGh1Yi5jb20vbGFic3RhY2svZWNoby92NCIKCSJuZXQvaHR0cCIK
CSJuZXQvaHR0cC9odHRwdGVzdCIKCSJuZXQvaHR0cC9odHRwdGVzdCIKKQoKZnVuYyBzZW5kUmVxdWVz
dChtZXRob2QsIHBhdGgsIHJlcUJvZHkgc3RyaW5nKSAoKmh0dHB0ZXN0LlJlc3BvbnNlUmVjb3JkZXIs
ICpodHRwLlJlcXVlc3QpIHsKCWUgOj0gYXBpLkluaXRpYWxpemVFY2hvKCkKCXcgOj0gaHR0cHRlc3Qu
TmV3UmVjb3JkZXIoKQoJciA6PSBodHRwdGVzdC5OZXdSZXF1ZXN0KG1ldGhvZCwgcGF0aCwgc3RyaW5n
cy5OZXdSZWFkZXIocmVxQm9keSkpCglyLkhlYWRlci5TZXQoZWNoby5IZWFkZXJDb250ZW50VHlwZSwg
ZWNoby5NSU1FQXBwbGljYXRpb25KU09OKQoJZS5TZXJ2ZUhUVFAodywgcikKCglyZXR1cm4gdywgcgp9
CglQSwMEFAAAAAAAOKhpUno21DgEAQAABAEAACkAAAAudGVtcGxhdGUvaW50ZWdyYXRpb24vdGFpYXJf
c3VpdGVfdGVzdC5nb3BhY2thZ2UgaW50ZWdyYXRpb25fdGVzdAoKaW1wb3J0ICgKCSJ0ZXN0aW5nIgoK
CS4gImdpdGh1Yi5jb20vb25zaS9naW5rZ28iCgkuICJnaXRodWIuY29tL29uc2kvZ29tZWdhIgopCgpm
dW5jIFRlc3RUYWlhcih0ICp0ZXN0aW5nLlQpIHsKCW9zLlNldGVudigiRElTQUJMRV9UUkFDSU5HIiwg
IjEiKQoJb3MuU2V0ZW52KCJBUFBfRU5WIiwgInRlc3QiKQoJUmVnaXN0ZXJGYWlsSGFuZGxlcihGYWls
KQoJUnVuU3BlY3ModCwgInRhaWFyIFN1aXRlIikKfQoJUEsDBBQAAAAAADioaVIQ4YfK+wQAAPsEAAAp
AAAALnRlbXBsYXRlL2ludGVybmFsL2FwaS9pbml0aWFsaXplX2VjaG8uZ29wYWNrYWdlIGFwaQoKaW1w
b3J0ICgKCSJlbmNvZGluZy9qc29uIgoJImZtdCIKCWFwaV92MSAiZ2l0aHViLmNvbS9QYXlDZXJ0aWZ5
L3RhaWFyL2ludGVybmFsL2FwaS92MSIKCSJnaXRodWIuY29tL1BheUNlcnRpZnkvdGFpYXIvaW50ZXJu
YWwvYXBwbGljYXRpb24iCgkiZ2l0aHViLmNvbS9QYXlDZXJ0aWZ5L3RhaWFyL2ludGVybmFsL2RhbyIK
CSJnaXRodWIuY29tL1BheUNlcnRpZnkvdGFpYXIvaW50ZXJuYWwvaGVhbHRoY2hlY2siCgkiZ2l0aHVi
LmNvbS9QYXlDZXJ0aWZ5L3RhaWFyL2ludGVybmFsL2luc3RydW1lbnQiCgkiZ2l0aHViLmNvbS9sYWJz
dGFjay9lY2hvL3Y0IgoJZWNob21pZGRsZXdhcmUgImdpdGh1Yi5jb20vbGFic3RhY2svZWNoby92NC9t
aWRkbGV3YXJlIgoJImdvLm9wZW50ZWxlbWV0cnkuaW8vY29udHJpYi9pbnN0cnVtZW50YXRpb24vZ2l0
aHViLmNvbS9sYWJzdGFjay9lY2hvL290ZWxlY2hvIgoJIm9zIgopCgpmdW5jIGRlYnVnUm91dGVzKGUg
KmVjaG8uRWNobykgewoJciwgXyA6PSBqc29uLk1hcnNoYWxJbmRlbnQoZS5Sb3V0ZXMoKSwgIiAiLCAi
ICAiKQoJZm10LlByaW50bG4oc3RyaW5nKHIpKQp9CgpmdW5jIEluaXRpYWxpemVFY2hvKCkgKmVjaG8u
RWNobyB7CgllIDo9IGVjaG8uTmV3KCkKCXRyYWNlciA6PSBpbnN0cnVtZW50LlNldHVwVHJhY2luZyhl
LkxvZ2dlcikKCgllLlVzZShlY2hvbWlkZGxld2FyZS5Mb2dnZXIoKSkKCWUuVXNlKG90ZWxlY2hvLk1p
ZGRsZXdhcmUob3MuR2V0ZW52KCJob3N0bmFtZSIpKSkKCgkvLyBIZXJlIEknbSB1c2luZyBhIHNpbmds
ZSBpbnN0YW5jZSBvZiBQZXRzdG9yZUltcGwsIGJ1dCB3ZSBjb3VsZCBoYXZlIHNlcGFyYXRlIGluc3Rh
bmNlcwoJLy8gRm9yIGV4YW1wbGUsIHdlIGNvdWxkIGhhdmUgYSB2MSBpbnN0YW5jZSBhbmQgYSB2MiBp
bnN0YW5jZXMgYW5kIHVzZSBmZWF0dXJlIGZsYWdzIHRvCgkvLyBtb2RpZnkgdGhlIGJlaGF2aW9yLiBP
ciBtYXliZSB3ZSBjb3VsZCB1c2UgYSBzaW5nbGUgaW5zdGFuY2UgYW5kIHVzZSB0aGUgZmVhdHVyZSBm
bGFncwoJLy8gdG8gZHluYW1pY2FsbHkgdHVybiBmZWF0dXJlcyBvbi9vZmYKCWFwcCA6PSAmYXBwbGlj
YXRpb24uVGFpYXJJbXBse090ZWxUcmFjZXI6IHRyYWNlcn0KCWFwcC5JbmplY3REYW9zKGRhby5OZXdH
b3JtUG9zdGdyZXNGYWN0b3J5KCkpCgoJYXBpX3YxLlJlZ2lzdGVyKGUsIGFwcCwgdHJhY2VyKQoJaGVh
bHRoY2hlY2suUmVnaXN0ZXIoZSwgYXBwKQoKCS8vZGVidWdSb3V0ZXMoZSkKCglyZXR1cm4gZQp9CglQ
SwMEFAAAAAAAOKhpUjICRub0BAAA9AQAACUAAAAudGVtcGxhdGUvaW50ZXJuYWwvYXBpL3YxL2FwaV9p
bXBsLmdvcGFja2FnZSBhcGlfdjEKCmltcG9ydCAoCgkiZm10IgoJImdpdGh1Yi5jb20vUGF5Q2VydGlm
eS90YWlhci9pbnRlcm5hbC9hcHBsaWNhdGlvbiIKCSJnaXRodWIuY29tL2xhYnN0YWNrL2VjaG8vdjQi
CgkiZ28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL2F0dHJpYnV0ZSIKCW90ZWx0cmFjZSAiZ28ub3BlbnRl
bGVtZXRyeS5pby9vdGVsL3RyYWNlIgoJIm5ldC9odHRwIgoJIm9zIgopCgpmdW5jIFJlZ2lzdGVyKGUg
KmVjaG8uRWNobywgYXBwIGFwcGxpY2F0aW9uLlRhaWFyLCB0cmFjZXIgb3RlbHRyYWNlLlRyYWNlcikg
ewoJc3dhZ2dlciwgZXJyIDo9IEdldFN3YWdnZXIoKQoJaWYgZXJyICE9IG5pbCB7CgkgICAgZm10LkZw
cmludGYob3MuU3RkZXJyLCAiRXJyb3IgbG9hZGluZyBzd2FnZ2VyIHNwZWM6XG4gJXMiLCBlcnIpCgkg
ICAgb3MuRXhpdCgxKQoJfQoJLy8gVE9ETzogd2hlbiB3ZSBrbm93IHdoYXQgVVJMKHMpIHRoaXMgd2ls
bCBydW4gYXMsIHRha2UgdGhpcyBvdXQuLi4gb3IgcGVyaGFwcyBzZXQgaXQgZHluYW1pY2FsbHk/IFRo
aXMgbmVlZHMgdG8gYmUgdGVzdGVkCglzd2FnZ2VyLlNlcnZlcnMgPSBuaWwKCglnIDo9IGUuR3JvdXAo
Ii90YWlhci92MSIpCglhcGkgOj0gJkFwaUltcGx7T3RlbFRyYWNlcjogdHJhY2VyLCBBcHBsaWNhdGlv
bjogYXBwfQoJLy8gVE9ETzogdGhlIE9hcGlSZXF1ZXN0VmFsaWRhdG9yIG1pZGRsZXdhcmUgaXMgc2Ny
ZXdpbmcgdXAgdGhlIHJvdXRpbmcsIGl0IG5lZWRzIHRvIGJlIGludmVzdGlnYXRlZAoJLy9nLlVzZSht
aWRkbGV3YXJlLk9hcGlSZXF1ZXN0VmFsaWRhdG9yKHN3YWdnZXIpKQoJUmVnaXN0ZXJIYW5kbGVycyhn
LCBhcGkpCn0KCnR5cGUgQXBpSW1wbCBzdHJ1Y3QgewoJT3RlbFRyYWNlciBvdGVsdHJhY2UuVHJhY2Vy
CglBcHBsaWNhdGlvbiBhcHBsaWNhdGlvbi5UYWlhcgp9CgpmdW5jIChhcGkgKkFwaUltcGwpIEV4YW1w
bGUoY3R4IGVjaG8uQ29udGV4dCkgZXJyb3IgewoJXywgc3BhbiA6PSBhcGkuT3RlbFRyYWNlci5TdGFy
dChjdHguUmVxdWVzdCgpLkNvbnRleHQoKSwgIkFwaUltcGwuSGVsbG9Xb3JsZCIsIG90ZWx0cmFjZS5X
aXRoQXR0cmlidXRlcyhhdHRyaWJ1dGUuU3RyaW5nKCJpZCIsICJleGFtcGxldmFsdWUiKSwgYXR0cmli
dXRlLlN0cmluZygiZm9vIiwgImJhciIpKSkKCWRlZmVyIHNwYW4uRW5kKCkKCglyZXR1cm4gY3R4LlN0
cmluZyhodHRwLlN0YXR1c09LLCBhcGkuQXBwbGljYXRpb24uU2F5SGVsbG8oY3R4LlJlcXVlc3QoKS5D
b250ZXh0KCkpKQp9CglQSwMEFAAAAAAAOKhpUmu6K+d+BQAAfgUAACoAAAAudGVtcGxhdGUvaW50ZXJu
YWwvYXBpL3YxL2FwaV9pbXBsX3Rlc3QuZ29wYWNrYWdlIGFwaV92MV90ZXN0CgppbXBvcnQgKAoJImdp
dGh1Yi5jb20vbGFic3RhY2svZWNoby92NCIKCSJnaXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNz
ZXJ0IgoJImdpdGh1Yi5jb20vUGF5Q2VydGlmeS90YWlhci9pbnRlcm5hbC9pbnN0cnVtZW50dGVzdCIK
CWFwaV92MSAiZ2l0aHViLmNvbS9QYXlDZXJ0aWZ5L3RhaWFyL2ludGVybmFsL2FwaS92MSIKCSJuZXQv
aHR0cCIKCSJuZXQvaHR0cC9odHRwdGVzdCIKCSJzdHJpbmdzIgoJInRlc3RpbmciCikKCnR5cGUgTW9j
a0FwcGxpY2F0aW9uIHN0cnVjdCB7CglzYXlIZWxsb0NhbGxlZCBib29sCn0KCmZ1bmMgKG0gKk1vY2tB
cHBsaWNhdGlvbikgU2F5SGVsbG8oKSBzdHJpbmcgewoJbS5zYXlIZWxsb0NhbGxlZCA9IHRydWUKCXJl
dHVybiAiaGVsbG8gd29ybGQiCn0KCmZ1bmMgKG0gKm1vY2tBcHBsaWNhdGlvbikgSXNIZWFsdGh5KCkg
KGJvb2wsIGVycm9yKSB7CglyZXR1cm4gdHJ1ZSwgbmlsCn0KCmZ1bmMgbmV3Q29udGV4dChtZXRob2Qs
IHBhdGgsIHJlcUJvZHkgc3RyaW5nKSAoZWNoby5Db250ZXh0LCAqaHR0cHRlc3QuUmVzcG9uc2VSZWNv
cmRlcikgewoJZSA6PSBlY2hvLk5ldygpCglyZXEgOj0gaHR0cHRlc3QuTmV3UmVxdWVzdChtZXRob2Qs
IHBhdGgsIHN0cmluZ3MuTmV3UmVhZGVyKHJlcUJvZHkpKQoJcmVxLkhlYWRlci5TZXQoZWNoby5IZWFk
ZXJDb250ZW50VHlwZSwgZWNoby5NSU1FQXBwbGljYXRpb25KU09OKQoJcmVjIDo9IGh0dHB0ZXN0Lk5l
d1JlY29yZGVyKCkKCglyZXR1cm4gZS5OZXdDb250ZXh0KHJlcSwgcmVjKSwgcmVjCn0KCmZ1bmMgVGVz
dEFwaUltcGxfRXhhbXBsZSh0ICp0ZXN0aW5nLlQpIHsKCWN0eCwgcmVzcCA6PSBuZXdDb250ZXh0KGh0
dHAuTWV0aG9kR2V0LCAiL3RhaWFyL3YxL2V4YW1wbGUiLCAiIikKCXRyYWNlciwgc3IgOj0gaW5zdHJ1
bWVudHRlc3QuTmV3VGVzdFRyYWNlckFuZFNwYW5SZWNvcmRlcigpCglhcHAgOj0gTW9ja0FwcGxpY2F0
aW9ue30KCglhcGkgOj0gJmFwaV92MS5BcGlJbXBse090ZWxUcmFjZXI6IHRyYWNlciwgQXBwbGljYXRp
b246ICZhcHB9CgoJaWYgYXNzZXJ0Lk5vRXJyb3IodCwgYXBpLkV4YW1wbGUoY3R4KSkgewoJICAgIGFz
c2VydC5FcXVhbCh0LCBhcHAuc2F5SGVsbG9DYWxsZWQpCgkgICAgYXNzZXJ0LkVxdWFsKHQsIGh0dHAu
U3RhdHVzT0ssIHJlc3AuQ29kZSkKCSAgICBhc3NlcnQuRXF1YWwodCwgImhlbGxvIHdvcmxkIiwgc3Ry
aW5ncy5UcmltU3BhY2UocmVzcC5Cb2R5LlN0cmluZygpKSkKCSAgICBpZiBhc3NlcnQuRXF1YWwodCwg
MSwgbGVuKHNyLkNvbXBsZXRlZCgpKSkgewoJICAgICAgICBhc3NlcnQuRXF1YWwodCwgIkFwaUltcGwu
SGVsbG9Xb3JsZCIsIHNyLkNvbXBsZXRlZCgpWzBdLk5hbWUoKSkKCSAgICB9Cgl9Cn0KCVBLAwQUAAAA
AAA4qGlSYOXMHM4AAADOAAAALwAAAC50ZW1wbGF0ZS9pbnRlcm5hbC9hcHBsaWNhdGlvbi90YWlhcl9z
ZXJ2aWNlLmdvcGFja2FnZSBhcHBsaWNhdGlvbgoKaW1wb3J0ICJjb250ZXh0IgoKdHlwZSBUYWlhciBp
bnRlcmZhY2UgewoJSXNIZWFsdGh5KCkgKGJvb2wsIGVycm9yKQoJLy8gVGhpcyBpcyB3aGVyZSB3ZSB3
b3VsZCBkZWZpbmUgdGhlIG1ldGhvZHMgcHJvdmlkZWQgYnkgdGhlIHRhaWFyIHNlcnZpY2UKCVNheUhl
bGxvKGN0eCBjb250ZXh0LkNvbnRleHQpIHN0cmluZwp9CglQSwMEFAAAAAAAOKhpUjLCkFByBQAAcgUA
ADQAAAAudGVtcGxhdGUvaW50ZXJuYWwvYXBwbGljYXRpb24vdGFpYXJfc2VydmljZV9pbXBsLmdvcGFj
a2FnZSBhcHBsaWNhdGlvbgppbXBvcnQgKAoJImNvbnRleHQiCgkiZ2l0aHViLmNvbS9QYXlDZXJ0aWZ5
L3RhaWFyL2ludGVybmFsL2RhbyIKCSJnby5vcGVudGVsZW1ldHJ5LmlvL290ZWwvYXR0cmlidXRlIgoJ
b3RlbHRyYWNlICJnby5vcGVudGVsZW1ldHJ5LmlvL290ZWwvdHJhY2UiCikKCnR5cGUgVGFpYXJJbXBs
IHN0cnVjdCB7CglPdGVsVHJhY2VyICAgICAgb3RlbHRyYWNlLlRyYWNlcgoJLy8gQWRkIHJlZmVyZW5j
ZXMgdG8geW91ciBEQU9zIGhlcmUKCS8vWW91ck1vZGVsRGFvIGRhby5Zb3VyTW9kZWxEYW8KCWRhb0Zh
Y3RvcnlFcnJvciBlcnJvcgp9CgovLyBBY2NlcHQgYm90aCB0aGUgREFPIGZhY3RvcnkgYW5kIGFuIGFz
c29jaWF0ZWQgZXJyb3Igc28gd2UgY2FuIHBhc3MgdGhlIGVycm9yIGFsb25nIHRocm91Z2ggdGhlIGhl
YWx0aCBjaGVjayAoSXNIZWFsdGh5KQpmdW5jIChhcHAgKlRhaWFySW1wbCkgSW5qZWN0RGFvcyhmIGRh
by5GYWN0b3J5LCBlcnIgZXJyb3IpIHsKCWFwcC5kYW9GYWN0b3J5RXJyb3IgPSBlcnIKCWlmIGVyciA9
PSBuaWwgewoJICAgIC8vYXBwLllvdXJNb2RlbERhbyA9IGYuWW91ck1vZGVsRGFvKCkKCX0KfQoKZnVu
YyAoYXBwICpUYWlhckltcGwpIElzSGVhbHRoeSgpIChib29sLCBlcnJvcikgewoJaWYgYXBwLmRhb0Zh
Y3RvcnlFcnJvciAhPSBuaWwgewoJICAgIHJldHVybiBmYWxzZSwgYXBwLmRhb0ZhY3RvcnlFcnJvcgoJ
fQoJcmV0dXJuIHRydWUsIG5pbAp9CgpmdW5jIChhcHAgKlRhaWFySW1wbCkgc3RhcnRTcGFuKGN0eCBj
b250ZXh0LkNvbnRleHQsIG5hbWUgc3RyaW5nLCBhdHRycyBtYXBbc3RyaW5nXXN0cmluZykgb3RlbHRy
YWNlLlNwYW4gewoJYXR0cmlidXRlcyA6PSBtYWtlKFtdYXR0cmlidXRlLktleVZhbHVlLCBsZW4oYXR0
cnMpKQoJZm9yIGtleSwgdmFsIDo9IHJhbmdlIGF0dHJzIHsKCSAgICBhdHRyaWJ1dGVzID0gYXBwZW5k
KGF0dHJpYnV0ZXMsIGF0dHJpYnV0ZS5TdHJpbmcoa2V5LCB2YWwpKQoJfQoJXywgc3BhbiA6PSBhcHAu
T3RlbFRyYWNlci5TdGFydChjdHgsIG5hbWUsIG90ZWx0cmFjZS5XaXRoQXR0cmlidXRlcyhhdHRyaWJ1
dGVzLi4uKSkKCglyZXR1cm4gc3Bhbgp9CgovLyBUaGlzIGlzIHdoZXJlIHdlIGltcGxlbWVudCB0aGUg
bWV0aG9kcyBvZiB0aGUgVGFpYXIgaW50ZXJmYWNlLi4uCmZ1bmMgKGFwcCAqVGFpYXJJbXBsKSBTYXlI
ZWxsbyhjdHggY29udGV4dC5Db250ZXh0KSBzdHJpbmcgewoJc3BhbiA6PSBhcHAuc3RhcnRTcGFuKGN0
eCwgIlRhaWFySW1wbC5TYXlIZWxsbyIsIG1hcFtzdHJpbmddc3RyaW5neyJpZCI6ICJleGFtcGxldmFs
dWUiLCAiZm9vIjogImJhciJ9KQoJZGVmZXIgc3Bhbi5FbmQoKQoKCXJldHVybiAiSGVsbG8sIFBheUNl
cnRpZnkhIgp9CglQSwMEFAAAAAAAOKhpUmiiOXVSBQAAUgUAADkAAAAudGVtcGxhdGUvaW50ZXJuYWwv
YXBwbGljYXRpb24vdGFpYXJfc2VydmljZV9pbXBsX3Rlc3QuZ29wYWNrYWdlIGFwcGxpY2F0aW9uX3Rl
c3QKCmltcG9ydCAoCgkiZ2l0aHViLmNvbS9QYXlDZXJ0aWZ5L3RhaWFyL2ludGVybmFsL2FwcGxpY2F0
aW9uIgoJImdpdGh1Yi5jb20vUGF5Q2VydGlmeS90YWlhci9pbnRlcm5hbC9kYW8iCgkiZ2l0aHViLmNv
bS9QYXlDZXJ0aWZ5L3RhaWFyL2ludGVybmFsL2luc3RydW1lbnR0ZXN0IgoJImdpdGh1Yi5jb20vc3Ry
ZXRjaHIvdGVzdGlmeS9hc3NlcnQiCgkidGVzdGluZyIKKQp0eXBlIG1vY2tEYW9GYWN0b3J5IHN0cnVj
dCB7fQoKLy9mdW5jIChtICptb2NrRGFvRmFjdG9yeSkgWW91ck1vZGVsRGFvKCkgZGFvLllvdXJNb2Rl
bERhbyB7Ci8vICAgIHJldHVybiBuaWwKLy99CgovLyBUaGlzIGlzIHdoZXJlIHdlIHRlc3QgdGhlIG1l
dGhvZHMgb2YgdGhlIFRhaWFySW1wbApmdW5jIFRlc3RUYWlhckltcGxfSXNIZWFsdGh5X1N1Y2Nlc3Mo
dCAqdGVzdGluZy5UKSB7Cgl0cmFjZXIsIHNyIDo9IGluc3RydW1lbnR0ZXN0Lk5ld1Rlc3RUcmFjZXJB
bmRTcGFuUmVjb3JkZXIoKQoKCWFwcCA6PSBhcHBsaWNhdGlvbi5UYWlhckltcGx7T3RlbFRyYWNlcjog
dHJhY2VyfQoJb2ssIGVyciA6PSBhcHAuSXNIZWFsdGh5KCkKCglhc3NlcnQuVHJ1ZSh0LCBvaykKCWFz
c2VydC5OaWwodCwgZXJyKQoJYXNzZXJ0LkVtcHR5KHQsIHNyLkNvbXBsZXRlZCgpKQp9CgpmdW5jIFRl
c3RUYWlhckltcGxfSXNIZWFsdGh5X0Rhb0Vycm9yKHQgKnRlc3RpbmcuVCkgewoJdHJhY2VyLCBzciA6
PSBpbnN0cnVtZW50dGVzdC5OZXdUZXN0VHJhY2VyQW5kU3BhblJlY29yZGVyKCkKCglhcHAgOj0gYXBw
bGljYXRpb24uVGFpYXJJbXBse090ZWxUcmFjZXI6IHRyYWNlcn0KCWFwcC5JbmplY3REYW9zKCZtb2Nr
RGFvRmFjdG9yeXt9LCBlcnJvcnMuTmV3KCJhcmJpdHJhcnkgZGFvIGZhY3RvcnkgZXJyb3IiKSkKCW9r
LCBlcnIgOj0gYXBwLklzSGVhbHRoeSgpCgoJYXNzZXJ0LkZhbHNlKHQsIG9rKQoJYXNzZXJ0LkVycm9y
KHQsIGVycikKCWFzc2VydC5FbXB0eSh0LCBzci5Db21wbGV0ZWQoKSkKfQoKZnVuYyBUZXN0VGFpYXJJ
bXBsX1NheUhlbGxvKHQgKnRlc3RpbmcuVCkgewoJdHJhY2VyLCBzciA6PSBpbnN0cnVtZW50dGVzdC5O
ZXdUZXN0VHJhY2VyQW5kU3BhblJlY29yZGVyKCkKCglhcHAgOj0gYXBwbGljYXRpb24uVGFpYXJJbXBs
e090ZWxUcmFjZXI6IHRyYWNlcn0KCWFzc2VydC5FcXVhbCh0LCAiSGVsbG8sIFBheUNlcnRpZnkhIiwg
YXBwLlNheUhlbGxvKGNvbnRleHQuVE9ETygpKSkKCglhc3NlcnQuRXF1YWwodCwgMSwgbGVuKHNyLkNv
bXBsZXRlZCgpKSkKCWFzc2VydC5FcXVhbCh0LCAiVGFpYXJJbXBsLlNheUhlbGxvIiwgc3IuQ29tcGxl
dGVkKClbMF0uTmFtZSgpKQp9CglQSwMEFAAAAAAAOKhpUng9UsNxAAAAcQAAACEAAAAudGVtcGxhdGUv
aW50ZXJuYWwvZGFvL2ZhY3RvcnkuZ28KcGFja2FnZSBkYW8KCnR5cGUgRmFjdG9yeSBpbnRlcmZhY2Ug
ewoJLy8gRGVmaW5lIG1ldGhvZHMgZm9yIHlvdXIgREFPcywgZS5nLjoKCS8vWW91ck1vZGVsRGFvKCkg
WW91ck1vZGVsRGFvCn0KCVBLAwQUAAAAAAA4qGlSSlmRbW4FAABuBQAALwAAAC50ZW1wbGF0ZS9pbnRl
cm5hbC9kYW8vZ29ybV9kYW9fZmFjdG9yeV9pbXBsLmdvCnBhY2thZ2UgZGFvCgppbXBvcnQgKAoJImZt
dCIKCSJnaXRodWIuY29tL1BheUNlcnRpZnkvdGFpYXIvaW50ZXJuYWwvbW9kZWxzIgoJImdvcm0uaW8v
ZHJpdmVyL3Bvc3RncmVzIgoJImdvcm0uaW8vZ29ybSIKCSJvcyIKCSJzdHJpbmdzIgopCgp0eXBlIEdv
cm1EYW9GYWN0b3J5IHN0cnVjdCB7CglEYiAqZ29ybS5EQgp9CgpmdW5jIGNvbm5lY3Rpb25TdHJpbmco
aG9zdCwgcG9ydCwgZGJuYW1lLCB1c2VyLCBwYXNzLCBzc2xtb2RlIHN0cmluZykgc3RyaW5nIHsKCXJl
dHVybiBmbXQuU3ByaW50ZigiaG9zdD0lcyBwb3J0PSVzIGRibmFtZT0lcyB1c2VyPSVzIHBhc3N3b3Jk
PSVzIHNzbG1vZGU9JXMiLCBob3N0LCBwb3J0LCBkYm5hbWUsIHVzZXIsIHBhc3MsIHNzbG1vZGUpCn0K
CmZ1bmMgTmV3R29ybVBvc3RncmVzRmFjdG9yeSgpICgqR29ybURhb0ZhY3RvcnksIGVycm9yKSB7Cgll
bnYgOj0gb3MuR2V0ZW52KCJBUFBfRU5WIikKCXZhciBkc24gc3RyaW5nCglpZiBzdHJpbmdzLlRvTG93
ZXIoZW52KSA9PSAidGVzdCIgewoJICAgIGRzbiA9IGNvbm5lY3Rpb25TdHJpbmcob3MuR2V0ZW52KCJU
RVNUX0RCX0hPU1QiKSwgb3MuR2V0ZW52KCJURVNUX0RCX1BPUlQiKSwgb3MuR2V0ZW52KCJURVNUX0RC
X0RCTkFNRSIpLCBvcy5HZXRlbnYoIlRFU1RfREJfVVNFUiIpLCBvcy5HZXRlbnYoIlRFU1RfREJfUEFT
U1dPUkQiKSwgb3MuR2V0ZW52KCJURVNUX0RCX1NTTE1PREUiKSkKCX0gZWxzZSB7CgkgICAgZHNuID0g
Y29ubmVjdGlvblN0cmluZyhvcy5HZXRlbnYoIkRCX0hPU1QiKSwgb3MuR2V0ZW52KCJEQl9QT1JUIiks
IG9zLkdldGVudigiREJfREJOQU1FIiksIG9zLkdldGVudigiREJfVVNFUiIpLCBvcy5HZXRlbnYoIkRC
X1BBU1NXT1JEIiksIG9zLkdldGVudigiREJfU1NMTU9ERSIpKQoJfQoJLy9mbXQuUHJpbnRmKCJDb25u
ZWN0aW5nIHRvIGRhdGFiYXNlIHVzaW5nIGNvbm5lY3Rpb24gc3RyaW5nIFwiJXNcIiIsIGRzbikKCWRi
LCBlcnIgOj0gZ29ybS5PcGVuKHBvc3RncmVzLk9wZW4oZHNuKSwgJmdvcm0uQ29uZmlne30pCglpZiBl
cnIgIT0gbmlsIHsKCSAgICByZXR1cm4gbmlsLCBlcnIKCX0KCglmb3IgXywgbSA6PSByYW5nZSBtb2Rl
bHMuVG9BdXRvTWlncmF0ZSgpIHsKCSAgICBpZiBlcnIgOj0gZGIuQXV0b01pZ3JhdGUobSk7IGVyciAh
PSBuaWwgewoJICAgICAgICByZXR1cm4gbmlsLCBlcnIKCSAgICB9Cgl9CgoJcmV0dXJuICZHb3JtRGFv
RmFjdG9yeXtEYjogZGJ9LCBuaWwKfQoKLy8gSW1wbGVtZW50IERBTyBGYWN0b3J5IG1ldGhvZHMuLi4K
Ly9mdW5jIChmICpHb3JtRGFvRmFjdG9yeSkgWW91ck1vZGVsRGFvKCkgWW91ck1vZGVsRGFvIHsKLy8g
ICAgcmV0dXJuICZZb3VyTW9kZWxEYW9JbXBse0RiOiBmLkRifQovL30KCVBLAwQUAAAAAAA4qGlSZc2f
5cgBAADIAQAANAAAAC50ZW1wbGF0ZS9pbnRlcm5hbC9kYW8vZ29ybV9kYW9fZmFjdG9yeV9pbXBsX3Rl
c3QuZ29wYWNrYWdlIGRhb190ZXN0CgppbXBvcnQgKAoJLiAiZ2l0aHViLmNvbS9vbnNpL2dpbmtnbyIK
CS4gImdpdGh1Yi5jb20vb25zaS9nb21lZ2EiCgkidGVzdGluZyIKKQoKZnVuYyBUZXN0TmV3R29ybVBv
c3RncmVzRmFjdG9yeSh0ICp0ZXN0aW5nLlQpIHsKCVJlZ2lzdGVyRmFpbEhhbmRsZXIoRmFpbCkKCVJ1
blNwZWNzKHQsICJHb3JtIFBvc3RncmVzIERBTyBGYWN0b3J5IikKfQoKdmFyIF8gPSBEZXNjcmliZSgi
TmV3R29ybVBvc3RncmVzRmFjdG9yeSIsIGZ1bmMoKSB7CgoJUENvbnRleHQoIkluIHRlc3QgbW9kZT8i
LCBmdW5jKCkgewoJICAgIFBJdCgiY3JlYXRlIGEgY29ubmVjdGlvbiB0byB0aGUgZGF0YWJhc2UgdXNp
bmcgR09STSIpCgkgICAgUEl0KCJtaWdyYXRlcyB0aGUgZGF0YWJhc2UiKQoJICAgIFBJdCgicmV0dXJu
cyBhIG5ldyBHb3JtUG9zdGdyZXNEYW9GYWN0b3J5IikKCX0pCn0pCglQSwMEFAAAAAAAOKhpUi1znbhS
AgAAUgIAAC0AAAAudGVtcGxhdGUvaW50ZXJuYWwvaGVhbHRoY2hlY2svaGVhbHRoY2hlY2suZ29wYWNr
YWdlIGhlYWx0aGNoZWNrCgppbXBvcnQgKAoJImdpdGh1Yi5jb20vUGF5Q2VydGlmeS90YWlhci9pbnRl
cm5hbC9hcHBsaWNhdGlvbiIKCSJnaXRodWIuY29tL2xhYnN0YWNrL2VjaG8vdjQiCgkibmV0L2h0dHAi
CikKCmZ1bmMgUmVnaXN0ZXIoZSAqZWNoby5FY2hvLCBhcHAgYXBwbGljYXRpb24uVGFpYXIpIHsKCWgg
Oj0gSGVhbHRoY2hlY2t7QXBwOiBhcHB9CgllLkdFVCgiL2hlYWx0aGNoZWNrIiwgaC5CYXNpYykKfQoK
dHlwZSBIZWFsdGhjaGVjayBzdHJ1Y3QgewoJQXBwIGFwcGxpY2F0aW9uLlRhaWFyCn0KCmZ1bmMgKGgg
KkhlYWx0aGNoZWNrKSBCYXNpYyhjdHggZWNoby5Db250ZXh0KSBlcnJvciB7CglvaywgZXJyIDo9IGgu
QXBwLklzSGVhbHRoeSgpCglpZiBvayB7CgkgICAgcmV0dXJuIGN0eC5KU09OKGh0dHAuU3RhdHVzT0ss
IG1hcFtzdHJpbmddc3RyaW5neyJtZXNzYWdlIjogIkV2ZXJ5dGhpbmcncyBBLW9oLWdyZWF0ISJ9KQoJ
fSBlbHNlIHsKCSAgICByZXR1cm4gY3R4LkpTT04oaHR0cC5TdGF0dXNTZXJ2aWNlVW5hdmFpbGFibGUs
IG1hcFtzdHJpbmddc3RyaW5neyJtZXNzYWdlIjogZXJyLkVycm9yKCl9KQoJfQp9CglQSwMEFAAAAAAA
OKhpUhfD2/NbBgAAWwYAADIAAAAudGVtcGxhdGUvaW50ZXJuYWwvaGVhbHRoY2hlY2svaGVhbHRoY2hl
Y2tfdGVzdC5nb3BhY2thZ2UgaGVhbHRoY2hlY2tfdGVzdAoKaW1wb3J0ICgKCSJjb250ZXh0IgoJImVy
cm9ycyIKCSJnaXRodWIuY29tL1BheUNlcnRpZnkvdGFpYXIvaW50ZXJuYWwvaGVhbHRoY2hlY2siCgki
Z2l0aHViLmNvbS9sYWJzdGFjay9lY2hvL3Y0IgoJImdpdGh1Yi5jb20vc3RyZXRjaHIvdGVzdGlmeS9h
c3NlcnQiCgkibmV0L2h0dHAiCgkibmV0L2h0dHAvaHR0cHRlc3QiCgkic3RyaW5ncyIKCSJ0ZXN0aW5n
IgopCgpmdW5jIG5ld0NvbnRleHQobWV0aG9kLCBwYXRoLCByZXFCb2R5IHN0cmluZykgKGVjaG8uQ29u
dGV4dCwgKmh0dHB0ZXN0LlJlc3BvbnNlUmVjb3JkZXIpIHsKCWUgOj0gZWNoby5OZXcoKQoJcmVxIDo9
IGh0dHB0ZXN0Lk5ld1JlcXVlc3QobWV0aG9kLCBwYXRoLCBzdHJpbmdzLk5ld1JlYWRlcihyZXFCb2R5
KSkKCXJlcS5IZWFkZXIuU2V0KGVjaG8uSGVhZGVyQ29udGVudFR5cGUsIGVjaG8uTUlNRUFwcGxpY2F0
aW9uSlNPTikKCXJlYyA6PSBodHRwdGVzdC5OZXdSZWNvcmRlcigpCgoJcmV0dXJuIGUuTmV3Q29udGV4
dChyZXEsIHJlYyksIHJlYwp9Cgp0eXBlIG1vY2tBcHBsaWNhdGlvbiBzdHJ1Y3QgewoJaXNIZWFsdGh5
IGJvb2wKCWhlYWx0aEVycm9yIGVycm9yCn0KCmZ1bmMgKG0gKm1vY2tBcHBsaWNhdGlvbikgU2F5SGVs
bG8oY3R4IGNvbnRleHQuQ29udGV4dCkgc3RyaW5nIHsKCXJldHVybiAiIgp9CgpmdW5jIChtICptb2Nr
QXBwbGljYXRpb24pIElzSGVhbHRoeSgpIChib29sLCBlcnJvcikgewoJcmV0dXJuIG0uaXNIZWFsdGh5
LCBtLmhlYWx0aEVycm9yCn0KCmZ1bmMgVGVzdEhlYWx0aGNoZWNrX0Jhc2ljX1N1Y2Nlc3ModCAqdGVz
dGluZy5UKSB7CgljdHgsIHJlc3AgOj0gbmV3Q29udGV4dChodHRwLk1ldGhvZEdldCwgIi9oZWFsdGhj
aGVjayIsICIiKQoJaCA6PSBoZWFsdGhjaGVjay5IZWFsdGhjaGVja3tBcHA6ICZtb2NrQXBwbGljYXRp
b257aXNIZWFsdGh5OiB0cnVlLCBoZWFsdGhFcnJvcjogbmlsfX0KCglpZiBhc3NlcnQuTm9FcnJvcih0
LCBoLkJhc2ljKGN0eCkpIHsKCSAgICBhc3NlcnQuRXF1YWwodCwgaHR0cC5TdGF0dXNPSywgcmVzcC5D
b2RlKQoJICAgIGFzc2VydC5FcXVhbCh0LCBgeyJtZXNzYWdlIjoiRXZlcnl0aGluZydzIEEtb2gtZ3Jl
YXQhIn1gLCBzdHJpbmdzLlRyaW1TcGFjZShyZXNwLkJvZHkuU3RyaW5nKCkpKQoJfQp9CgpmdW5jIFRl
c3RIZWFsdGhjaGVja19CYXNpY19GYWlsdXJlKHQgKnRlc3RpbmcuVCkgewoJY3R4LCByZXNwIDo9IG5l
d0NvbnRleHQoaHR0cC5NZXRob2RHZXQsICIvaGVhbHRoY2hlY2siLCAiIikKCWggOj0gaGVhbHRoY2hl
Y2suSGVhbHRoY2hlY2t7QXBwOiAmbW9ja0FwcGxpY2F0aW9ue2lzSGVhbHRoeTogZmFsc2UsIGhlYWx0
aEVycm9yOiBlcnJvcnMuTmV3KCJhcmJpdHJhcnkgZXJyb3IgbWVzc2FnZSIpfX0KCglpZiBhc3NlcnQu
Tm9FcnJvcih0LCBoLkJhc2ljKGN0eCkpIHsKCSAgICBhc3NlcnQuRXF1YWwodCwgaHR0cC5TdGF0dXNT
ZXJ2aWNlVW5hdmFpbGFibGUsIHJlc3AuQ29kZSkKCSAgICBhc3NlcnQuRXF1YWwodCwgYHsibWVzc2Fn
ZSI6ImFyYml0cmFyeSBlcnJvciBtZXNzYWdlIn1gLCBzdHJpbmdzLlRyaW1TcGFjZShyZXNwLkJvZHku
U3RyaW5nKCkpKQoJfQp9CglQSwMEFAAAAAAAOKhpUhem3VskCgAAJAoAAC4AAAAudGVtcGxhdGUvaW50
ZXJuYWwvaW5zdHJ1bWVudC9zZXR1cF90cmFjaW5nLmdvcGFja2FnZSBpbnN0cnVtZW50CgppbXBvcnQg
KAoJImNvbnRleHQiCgkiZ2l0aHViLmNvbS9sYWJzdGFjay9lY2hvL3Y0IgoJImdvLm9wZW50ZWxlbWV0
cnkuaW8vb3RlbCIKCSJnby5vcGVudGVsZW1ldHJ5LmlvL290ZWwvZXhwb3J0ZXJzL290bHAiCgkiZ28u
b3BlbnRlbGVtZXRyeS5pby9vdGVsL2V4cG9ydGVycy9vdGxwL290bHBodHRwIgoJImdvLm9wZW50ZWxl
bWV0cnkuaW8vb3RlbC9leHBvcnRlcnMvc3Rkb3V0IgoJImdvLm9wZW50ZWxlbWV0cnkuaW8vb3RlbC9w
cm9wYWdhdGlvbiIKCXNka2V4cG9ydCAiZ28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL3Nkay9leHBvcnQv
dHJhY2UiCgkiZ28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL3Nkay9yZXNvdXJjZSIKCXNka3RyYWNlICJn
by5vcGVudGVsZW1ldHJ5LmlvL290ZWwvc2RrL3RyYWNlIgoJImdvLm9wZW50ZWxlbWV0cnkuaW8vb3Rl
bC9zZW1jb252IgoJImdvLm9wZW50ZWxlbWV0cnkuaW8vb3RlbC90cmFjZSIKCSJvcyIKKQoKZnVuYyBT
ZXR1cFRyYWNpbmcobG9nIGVjaG8uTG9nZ2VyKSB0cmFjZS5UcmFjZXIgewoJaWYgb3MuR2V0ZW52KCJE
SVNBQkxFX1RSQUNJTkciKSA9PSAiMSIgewoJICAgIHJldHVybiBvdGVsLlRyYWNlcigibnVsbCIpCgl9
CglvdGxwUmVjdkFkZHIgOj0gb3MuR2V0ZW52KCJPVEVMX0FHRU5UX0VORFBPSU5UIikKCXZhciBleHBv
cnRlciBzZGtleHBvcnQuU3BhbkV4cG9ydGVyCgl2YXIgZXJyIGVycm9yCgoJaWYgb3RscFJlY3ZBZGRy
ICE9ICIiIHsKCSAgICAvLyBJZiB3ZSBoYXZlIGFuIGFkZHJlc3MgZm9yIGFuIE9MVFAgY29sbGVjdG9y
LCBzZXR1cCBhbiBPTFRQIGV4cG9ydGVyCgkgICAgZHJpdmVyT3B0aW9ucyA6PSBbXW90bHBodHRwLk9w
dGlvbnsKCSAgICAgICAgb3RscGh0dHAuV2l0aEVuZHBvaW50KG90bHBSZWN2QWRkciksCgkgICAgICAg
IG90bHBodHRwLldpdGhJbnNlY3VyZSgpLAoJICAgIH0KCgkgICAgZXhwb3J0ZXIsIGVyciA9IG90bHAu
TmV3RXhwb3J0ZXIoY29udGV4dC5CYWNrZ3JvdW5kKCksIG90bHBodHRwLk5ld0RyaXZlcihkcml2ZXJP
cHRpb25zLi4uKSkKCX0gZWxzZSB7CgkgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnl3aGVyZSB0byBz
ZW5kIHRyYWNlcywgc2VuZCB0aGVtIHRvIHN0YW5kYXJkIG91dAoJICAgIGV4cG9ydGVyLCBlcnIgPSBz
dGRvdXQuTmV3RXhwb3J0ZXIoc3Rkb3V0LldpdGhQcmV0dHlQcmludCgpKQoJfQoJaWYgZXJyICE9IG5p
bCB7CgkgICAgbG9nLkZhdGFsKGVycikKCX0KCglyZXMsIGVyciA6PSByZXNvdXJjZS5OZXcoY29udGV4
dC5CYWNrZ3JvdW5kKCksIHJlc291cmNlLldpdGhBdHRyaWJ1dGVzKAoJICAgIHNlbWNvbnYuU2Vydmlj
ZU5hbWVLZXkuU3RyaW5nKCJ0YWlhciIpLAoJKSkKCgl0cCA6PSBzZGt0cmFjZS5OZXdUcmFjZXJQcm92
aWRlcigKCSAgICBzZGt0cmFjZS5XaXRoQ29uZmlnKHNka3RyYWNlLkNvbmZpZ3tEZWZhdWx0U2FtcGxl
cjogc2RrdHJhY2UuQWx3YXlzU2FtcGxlKCl9KSwKCSAgICBzZGt0cmFjZS5XaXRoU3luY2VyKGV4cG9y
dGVyKSwKCSAgICBzZGt0cmFjZS5XaXRoUmVzb3VyY2UocmVzKSwKCSAgICAvLyBUT0RPOiBJbnZlc3Rp
Z2F0ZS4gVXNpbmcgYmF0Y2hpbmcgcmVzdWx0cyBpbiBoaWdoIENQVSBsb2FkLiBIZXJlJ3MgYSBzdGFj
ayB0cmFjZSBmcm9tIEdPR0NUUkFDRT0xCgkgICAgLy8gICAgIGdvcm91dGluZSAxOCBbc2VsZWN0XToK
CSAgICAvLyAgICAgZ28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL3Nkay90cmFjZS4oKkJhdGNoU3BhblBy
b2Nlc3NvcikucHJvY2Vzc1F1ZXVlKDB4YzAwMDE4MGUxMCkKCSAgICAvLyAgICAgICAvZ28vcGtnL21v
ZC9nby5vcGVudGVsZW1ldHJ5LmlvL290ZWwvc2RrQHYwLjE0LjAvdHJhY2UvYmF0Y2hfc3Bhbl9wcm9j
ZXNzb3IuZ286MTk4ICsweDEzMQoJICAgIC8vICAgICBnby5vcGVudGVsZW1ldHJ5LmlvL290ZWwvc2Rr
L3RyYWNlLk5ld0JhdGNoU3BhblByb2Nlc3Nvci5mdW5jMSgweGMwMDAxODBlMTApCgkgICAgLy8gICAg
ICAgL2dvL3BrZy9tb2QvZ28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL3Nka0B2MC4xNC4wL3RyYWNlL2Jh
dGNoX3NwYW5fcHJvY2Vzc29yLmdvOjEwNyArMHg1OAoJICAgIC8vICAgICBjcmVhdGVkIGJ5IGdvLm9w
ZW50ZWxlbWV0cnkuaW8vb3RlbC9zZGsvdHJhY2UuTmV3QmF0Y2hTcGFuUHJvY2Vzc29yCgkgICAgLy8g
ICAgICAgL2dvL3BrZy9tb2QvZ28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL3Nka0B2MC4xNC4wL3RyYWNl
L2JhdGNoX3NwYW5fcHJvY2Vzc29yLmdvOjEwNSArMHgyMDkKCSAgICAvL3Nka3RyYWNlLldpdGhCYXRj
aGVyKGV4cG9ydGVyLCBzZGt0cmFjZS5XaXRoQmF0Y2hUaW1lb3V0KDUpLCBzZGt0cmFjZS5XaXRoTWF4
RXhwb3J0QmF0Y2hTaXplKDEwKSksCgkpCglvdGVsLlNldFRyYWNlclByb3ZpZGVyKHRwKQoJb3RlbC5T
ZXRUZXh0TWFwUHJvcGFnYXRvcihwcm9wYWdhdGlvbi5OZXdDb21wb3NpdGVUZXh0TWFwUHJvcGFnYXRv
cihwcm9wYWdhdGlvbi5UcmFjZUNvbnRleHR7fSwgcHJvcGFnYXRpb24uQmFnZ2FnZXt9KSkKCglyZXR1
cm4gb3RlbC5UcmFjZXIoImdpdGh1Yi5jb20vUGF5Q2VydGlmeS90YWlhciIpCn0KCVBLAwQUAAAAAAA4
qGlS5jsmsmoBAABqAQAAMQAAAC50ZW1wbGF0ZS9pbnRlcm5hbC9pbnN0cnVtZW50dGVzdC90ZXN0X2hl
bHBlcnMuZ29wYWNrYWdlIGluc3RydW1lbnR0ZXN0CgppbXBvcnQgKAoJImdvLm9wZW50ZWxlbWV0cnku
aW8vb3RlbC9vdGVsdGVzdCIKCW90ZWx0cmFjZSAiZ28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL3RyYWNl
IgopCgpmdW5jIE5ld1Rlc3RUcmFjZXJBbmRTcGFuUmVjb3JkZXIoKSAob3RlbHRyYWNlLlRyYWNlciwg
Km90ZWx0ZXN0LlN0YW5kYXJkU3BhblJlY29yZGVyKSB7CglzciA6PSBuZXcob3RlbHRlc3QuU3RhbmRh
cmRTcGFuUmVjb3JkZXIpCgl0cmFjZXIgOj0gb3RlbHRlc3QuTmV3VHJhY2VyUHJvdmlkZXIob3RlbHRl
c3QuV2l0aFNwYW5SZWNvcmRlcihzcikpLlRyYWNlcigidGVzdC10cmFjZXIiKQoKCXJldHVybiB0cmFj
ZXIsIHNyCn0KCVBLAwQUAAAAAAA4qGlSCZ7jXFMAAABTAAAAIwAAAC50ZW1wbGF0ZS9pbnRlcm5hbC9t
b2RlbHMvbW9kZWxzLmdvcGFja2FnZSBtb2RlbHMKCmZ1bmMgVG9BdXRvTWlncmF0ZSgpIFtdaW50ZXJm
YWNle30gewoJcmV0dXJuIFtdaW50ZXJmYWNle30gewoJfQp9CglQSwMEFAAAAAAAOKhpUmkVDoEWAAAA
FgAAACAAAAAudGVtcGxhdGUvcG9zdGdyZXMvcG9zdGdyZXMuY29uZmxpc3Rlbl9hZGRyZXNzZXMgPSAn
KidQSwECFAMUAAAAAAA4qGlSCasiu18BAABfAQAADgAAAAAAAAAAAAAA/4EAAAAALnRlbXBsYXRlLy5l
bnZQSwECFAMUAAAAAACuqGlS9KRgVocBAACHAQAAFAAAAAAAAAAAAAAA/4GLAQAALnRlbXBsYXRlLy5n
aXRpZ25vcmVQSwECFAMUAAAAAAA4qGlSDzg7IfMGAADzBgAAHQAAAAAAAAAAAAAA/4FEAwAALnRlbXBs
YXRlL2RvY2tlci1jb21wb3NlLnlhbWxQSwECFAMUAAAAAAA4qGlSmSoQaWcEAABnBAAAFAAAAAAAAAAA
AAAA/4FyCgAALnRlbXBsYXRlL0RvY2tlcmZpbGVQSwECFAMUAAAAAAA4qGlSHnJLhSwAAAAsAAAAEAAA
AAAAAAAAAAAA/4ELDwAALnRlbXBsYXRlL2dvLm1vZFBLAQIUAxQAAAAAADioaVLSFL8inAIAAJwCAAAS
AAAAAAAAAAAAAAD/gWUPAAAudGVtcGxhdGUvTWFrZWZpbGVQSwECFAMUAAAAAAA4qGlSyA1WQaQBAACk
AQAAKAAAAAAAAAAAAAAA/4ExEgAALnRlbXBsYXRlL290ZWwtY29sbGVjdG9yLWNvbmZpZy5hd3MueWFt
bFBLAQIUAxQAAAAAADioaVJZRd0CDwYAAA8GAAATAAAAAAAAAAAAAAD/gRsUAAAudGVtcGxhdGUvUkVB
RE1FLm1kUEsBAhQDFAAAAAAAOKhpUvDBijUjAwAAIwMAAB8AAAAAAAAAAAAAAP+BWxoAAC50ZW1wbGF0
ZS90YWlhci12MS5vcGVuYXBpLnlhbWxQSwECFAMUAAAAAAA4qGlSzaArZhEBAAARAQAAEwAAAAAAAAAA
AAAA/4G7HQAALnRlbXBsYXRlL3RhaWFyLmVudlBLAQIUAxQAAAAAADioaVL01aRR4BIAAOASAAAYAAAA
AAAAAAAAAAD/gf0eAAAudGVtcGxhdGUvd2FpdC1mb3ItaXQuc2hQSwECFAMUAAAAAAA4qGlSbXKHuV0I
AABdCAAAJgAAAAAAAAAAAAAA/4ETMgAALnRlbXBsYXRlLy5naXRodWIvd29ya2Zsb3dzL2RlcGxveS55
bWxQSwECFAMUAAAAAAA4qGlSfq/eSsgAAADIAAAAGwAAAAAAAAAAAAAA/4G0OgAALnRlbXBsYXRlL2Nt
ZC90YWlhci9tYWluLmdvUEsBAhQDFAAAAAAAOKhpUj3tgHlwAwAAcAMAACUAAAAAAAAAAAAAAP+BtTsA
AC50ZW1wbGF0ZS9pbnRlZ3JhdGlvbi9leGFtcGxlX3Rlc3QuZ29QSwECFAMUAAAAAAA4qGlS1fTYsMAL
AADACwAAKQAAAAAAAAAAAAAA/4FoPwAALnRlbXBsYXRlL2ludGVncmF0aW9uL2hlYWx0aGNoZWNrX3Rl
c3QuZ29QSwECFAMUAAAAAAA4qGlSMIEncOQBAADkAQAAJQAAAAAAAAAAAAAA/4FvSwAALnRlbXBsYXRl
L2ludGVncmF0aW9uL2hlbHBlcnNfdGVzdC5nb1BLAQIUAxQAAAAAADioaVJ6NtQ4BAEAAAQBAAApAAAA
AAAAAAAAAAD/gZZNAAAudGVtcGxhdGUvaW50ZWdyYXRpb24vdGFpYXJfc3VpdGVfdGVzdC5nb1BLAQIU
AxQAAAAAADioaVIQ4YfK+wQAAPsEAAApAAAAAAAAAAAAAAD/geFOAAAudGVtcGxhdGUvaW50ZXJuYWwv
YXBpL2luaXRpYWxpemVfZWNoby5nb1BLAQIUAxQAAAAAADioaVIyAkbm9AQAAPQEAAAlAAAAAAAAAAAA
AAD/gSNUAAAudGVtcGxhdGUvaW50ZXJuYWwvYXBpL3YxL2FwaV9pbXBsLmdvUEsBAhQDFAAAAAAAOKhp
Umu6K+d+BQAAfgUAACoAAAAAAAAAAAAAAP+BWlkAAC50ZW1wbGF0ZS9pbnRlcm5hbC9hcGkvdjEvYXBp
X2ltcGxfdGVzdC5nb1BLAQIUAxQAAAAAADioaVJg5cwczgAAAM4AAAAvAAAAAAAAAAAAAAD/gSBfAAAu
dGVtcGxhdGUvaW50ZXJuYWwvYXBwbGljYXRpb24vdGFpYXJfc2VydmljZS5nb1BLAQIUAxQAAAAAADio
aVIywpBQcgUAAHIFAAA0AAAAAAAAAAAAAAD/gTtgAAAudGVtcGxhdGUvaW50ZXJuYWwvYXBwbGljYXRp
b24vdGFpYXJfc2VydmljZV9pbXBsLmdvUEsBAhQDFAAAAAAAOKhpUmiiOXVSBQAAUgUAADkAAAAAAAAA
AAAAAP+B/2UAAC50ZW1wbGF0ZS9pbnRlcm5hbC9hcHBsaWNhdGlvbi90YWlhcl9zZXJ2aWNlX2ltcGxf
dGVzdC5nb1BLAQIUAxQAAAAAADioaVJ4PVLDcQAAAHEAAAAhAAAAAAAAAAAAAAD/gahrAAAudGVtcGxh
dGUvaW50ZXJuYWwvZGFvL2ZhY3RvcnkuZ29QSwECFAMUAAAAAAA4qGlSSlmRbW4FAABuBQAALwAAAAAA
AAAAAAAA/4FYbAAALnRlbXBsYXRlL2ludGVybmFsL2Rhby9nb3JtX2Rhb19mYWN0b3J5X2ltcGwuZ29Q
SwECFAMUAAAAAAA4qGlSZc2f5cgBAADIAQAANAAAAAAAAAAAAAAA/4ETcgAALnRlbXBsYXRlL2ludGVy
bmFsL2Rhby9nb3JtX2Rhb19mYWN0b3J5X2ltcGxfdGVzdC5nb1BLAQIUAxQAAAAAADioaVItc524UgIA
AFICAAAtAAAAAAAAAAAAAAD/gS10AAAudGVtcGxhdGUvaW50ZXJuYWwvaGVhbHRoY2hlY2svaGVhbHRo
Y2hlY2suZ29QSwECFAMUAAAAAAA4qGlSF8Pb81sGAABbBgAAMgAAAAAAAAAAAAAA/4HKdgAALnRlbXBs
YXRlL2ludGVybmFsL2hlYWx0aGNoZWNrL2hlYWx0aGNoZWNrX3Rlc3QuZ29QSwECFAMUAAAAAAA4qGlS
F6bdWyQKAAAkCgAALgAAAAAAAAAAAAAA/4F1fQAALnRlbXBsYXRlL2ludGVybmFsL2luc3RydW1lbnQv
c2V0dXBfdHJhY2luZy5nb1BLAQIUAxQAAAAAADioaVLmOyayagEAAGoBAAAxAAAAAAAAAAAAAAD/geWH
AAAudGVtcGxhdGUvaW50ZXJuYWwvaW5zdHJ1bWVudHRlc3QvdGVzdF9oZWxwZXJzLmdvUEsBAhQDFAAA
AAAAOKhpUgme41xTAAAAUwAAACMAAAAAAAAAAAAAAP+BnokAAC50ZW1wbGF0ZS9pbnRlcm5hbC9tb2Rl
bHMvbW9kZWxzLmdvUEsBAhQDFAAAAAAAOKhpUmkVDoEWAAAAFgAAACAAAAAAAAAAAAAAAP+BMooAAC50
ZW1wbGF0ZS9wb3N0Z3Jlcy9wb3N0Z3Jlcy5jb25mUEsFBgAAAAAgACAAMAoAAIaKAAAAAA==
"""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment