Re: Getting started with Kamailio and Freeswitch

Alex Lake via sr-users <[email protected]> Thu, 30 Jul 2026 05:36:04 +0000
Newsgroups gmane.comp.voip.ser
Message-ID <[email protected]>
T24gMjkvMDcvMjAyNiAyMjozNSwgR2h1bGFtIE11c3RhZmEgdmlhIHNyLXVzZXJzIHdyb3RlOg0K
PiBTaGFyZSBsb2dzIGFuZCBTSVAgbWVzc2FnZXMgaWYgcG9zc2libGUNCj4NCg0KT0shDQoNClNv
IGhlcmUncyBhIHByZWNpcyBvZiB0aGUgbG9nOg0KDQogwqAzNTExIDQ5OC42MTQ0ODUyNzUgODAu
MjI5LjE1MC4xNjUg4oaSIDQ2LjYyLjIzOC41MSBTSVAgOTM1IFJlcXVlc3Q6IA0KUkVHSVNURVIg
c2lwOjQ2LjYyLjIzOC41MTt0cmFuc3BvcnQ9VURQwqAgKDEgYmluZGluZykgfA0KIMKgMzUxMiA0
OTguNjI1OTUzODA5IDQ2LjYyLjIzOC41MSDihpIgODAuMjI5LjE1MC4xNjUgU0lQIDUzMCBTdGF0
dXM6IDIwMCANCk9LIChSRUdJU1RFUinCoCAoMSBiaW5kaW5nKSB8DQogwqAzNzQzIDU0OS40MzQy
MTYyNzYgODAuMjI5LjE1MC4xNjUg4oaSIDQ2LjYyLjIzOC41MSBTSVAvU0RQIDk5MCBSZXF1ZXN0
OiANCklOVklURSBzaXA6MDIwNzA2MDIwMDBANDYuNjIuMjM4LjUxO3RyYW5zcG9ydD1VRFAgfA0K
IMKgMzc0NCA1NDkuNDM2MzE2MjcyIDQ2LjYyLjIzOC41MSDihpIgODAuMjI5LjE1MC4xNjUgU0lQ
IDU0NCBTdGF0dXM6IDQwNyANClByb3h5IEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkIHwNCiDCoDM3
NDUgNTQ5LjQ4Nzc4NjQ0NSA4MC4yMjkuMTUwLjE2NSDihpIgNDYuNjIuMjM4LjUxIFNJUCA0MTAg
UmVxdWVzdDogQUNLIA0Kc2lwOjAyMDcwNjAyMDAwQDQ2LjYyLjIzOC41MTt0cmFuc3BvcnQ9VURQ
IHwNCiDCoDM3NDYgNTQ5LjU5ODA2MTU0OSA4MC4yMjkuMTUwLjE2NSDihpIgNDYuNjIuMjM4LjUx
IFNJUC9TRFAgMTIwNCBSZXF1ZXN0OiANCklOVklURSBzaXA6MDIwNzA2MDIwMDBANDYuNjIuMjM4
LjUxO3RyYW5zcG9ydD1VRFAgfA0KIMKgMzc0NyA1NDkuNjEwODc4Mjc0IDQ2LjYyLjIzOC41MSDi
hpIgODAuMjI5LjE1MC4xNjUgU0lQIDQzNSBTdGF0dXM6IDQwNCANCk5vdCBGb3VuZCBBIHwNCiDC
oDM3NDggNTQ5LjY3NDMwMDI2OCA4MC4yMjkuMTUwLjE2NSDihpIgNDYuNjIuMjM4LjUxIFNJUCA0
MTAgUmVxdWVzdDogQUNLIA0Kc2lwOjAyMDcwNjAyMDAwQDQ2LjYyLjIzOC41MTt0cmFuc3BvcnQ9
VURQIHwNCiDCoDM3NTkgNTUyLjc4Nzg2MzU3OCA4MC4yMjkuMTUwLjE2NSDihpIgNDYuNjIuMjM4
LjUxIFNJUCA5MzUgUmVxdWVzdDogDQpSRUdJU1RFUiBzaXA6NDYuNjIuMjM4LjUxO3RyYW5zcG9y
dD1VRFDCoCAoMSBiaW5kaW5nKSB8DQogwqAzNzYwIDU1Mi43OTkyMjU3MzMgNDYuNjIuMjM4LjUx
IOKGkiA4MC4yMjkuMTUwLjE2NSBTSVAgNTMwIFN0YXR1czogMjAwIA0KT0sgKFJFR0lTVEVSKcKg
ICgxIGJpbmRpbmcpIHwNCiDCoDM3NjggNTU2LjE1MjM5ODk3MSA4MC4yMjkuMTUwLjE2NSDihpIg
NDYuNjIuMjM4LjUxIFNJUC9TRFAgOTkwIFJlcXVlc3Q6IA0KSU5WSVRFIHNpcDowMjA3MDYwMjAw
MEA0Ni42Mi4yMzguNTE7dHJhbnNwb3J0PVVEUCB8DQogwqAzNzY5IDU1Ni4xNTM5MTQ2MTEgNDYu
NjIuMjM4LjUxIOKGkiA4MC4yMjkuMTUwLjE2NSBTSVAgNTQ0IFN0YXR1czogNDA3IA0KUHJveHkg
QXV0aGVudGljYXRpb24gUmVxdWlyZWQgfA0KIMKgMzc3MCA1NTYuMjAzMTMxNzQ4IDgwLjIyOS4x
NTAuMTY1IOKGkiA0Ni42Mi4yMzguNTEgU0lQIDQxMCBSZXF1ZXN0OiBBQ0sgDQpzaXA6MDIwNzA2
MDIwMDBANDYuNjIuMjM4LjUxO3RyYW5zcG9ydD1VRFAgfA0KIMKgMzc3MSA1NTYuMzExMTE4NjMw
IDgwLjIyOS4xNTAuMTY1IOKGkiA0Ni42Mi4yMzguNTEgU0lQL1NEUCAxMjA0IFJlcXVlc3Q6IA0K
SU5WSVRFIHNpcDowMjA3MDYwMjAwMEA0Ni42Mi4yMzguNTE7dHJhbnNwb3J0PVVEUCB8DQogwqAz
NzcyIDU1Ni4zMjQ2NTA0MzEgNDYuNjIuMjM4LjUxIOKGkiA4MC4yMjkuMTUwLjE2NSBTSVAgNDM1
IFN0YXR1czogNDA0IA0KTm90IEZvdW5kIEEgfA0KIMKgMzc3MyA1NTYuMzkwMDg2NzcyIDgwLjIy
OS4xNTAuMTY1IOKGkiA0Ni42Mi4yMzguNTEgU0lQIDQxMCBSZXF1ZXN0OiBBQ0sgDQpzaXA6MDIw
NzA2MDIwMDBANDYuNjIuMjM4LjUxO3RyYW5zcG9ydD1VRFAgfA0KDQoNCkFuZCB0aGUgY29uZmln
DQoNCiMhS0FNQUlMSU8NCiMhZGVmaW5lIFdJVEhfTVlTUUwNCiMhZGVmaW5lIFdJVEhfQVVUSA0K
IyFkZWZpbmUgV0lUSF9VU1JMT0NEQg0KIyFkZWZpbmUgV0lUSF9GUkVFU1dJVENIDQojIWRlZmlu
ZSBXSVRIX0RFQlVHDQoNCiMNCiMgS2FtYWlsaW8gU0lQIFNlcnZlciB2NS43IC0gZGVmYXVsdCBj
b25maWd1cmF0aW9uIHNjcmlwdA0KI8KgIMKgIMKgLSB3ZWI6IGh0dHBzOi8vd3d3LmthbWFpbGlv
Lm9yZw0KI8KgIMKgIMKgLSBnaXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9rYW1haWxpby9rYW1haWxp
bw0KIw0KIyBEaXJlY3QgeW91ciBxdWVzdGlvbnMgYWJvdXQgdGhpcyBmaWxlIHRvOiA8c3ItdXNl
cnNAbGlzdHMua2FtYWlsaW8ub3JnPg0KIw0KIyBSZWZlciB0byB0aGUgQ29yZSBDb29rQm9vayBh
dCBodHRwczovL3d3dy5rYW1haWxpby5vcmcvd2lraWRvY3MvDQojIGZvciBhbiBleHBsYW5hdGlv
biBvZiBwb3NzaWJsZSBzdGF0ZW1lbnRzLCBmdW5jdGlvbnMgYW5kIHBhcmFtZXRlcnMuDQojDQoj
IE5vdGU6IHRoZSBjb21tZW50cyBjYW4gYmU6DQojwqAgwqAgwqAtIGxpbmVzIHN0YXJ0aW5nIHdp
dGggIywgYnV0IG5vdCB0aGUgcHJlLXByb2Nlc3NvciBkaXJlY3RpdmVzLA0KI8KgIMKgIMKgIMKg
d2hpY2ggc3RhcnQgd2l0aCAjISwgbGlrZSAjIWRlZmluZSwgIyFpZmRlZiwgIyFlbmRpZiwgIyFl
bHNlLCANCiMhdHJ5ZGVmLA0KI8KgIMKgIMKgIMKgIyFzdWJzdCwgIyFzdWJzdGRlZiwgLi4uDQoj
wqAgwqAgwqAtIGxpbmVzIHN0YXJ0aW5nIHdpdGggLy8NCiPCoCDCoCDCoC0gYmxvY2tzIGVuY2xv
c2VkIGluIGJldHdlZW4gLyogKi8NCiMgTm90ZTogdGhlIGNvbmZpZyBwZXJmb3JtcyBzeW1tZXRy
aWMgU0lQIHNpZ25hbGluZw0KI8KgIMKgIMKgLSBpdCBzZW5kcyB0aGUgcmVwbHkgdG8gdGhlIHNv
dXJjZSBhZGRyZXNzIG9mIHRoZSByZXF1ZXN0DQojwqAgwqAgwqAtIHJlbW92ZSB0aGUgdXNlIG9m
IGZvcmNlX3Jwb3J0KCkgZm9yIGFzeW1tZXRyaWMgU0lQIHNpZ25hbGluZw0KIw0KIyBTZXZlcmFs
IGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkIHVzaW5nICcjIWRlZmluZSBXSVRIX0ZFQVRVUkUnIGRp
cmVjdGl2ZXM6DQojDQojICoqKiBUbyBydW4gaW4gZGVidWcgbW9kZToNCiPCoCDCoCDCoC0gZGVm
aW5lIFdJVEhfREVCVUcNCiPCoCDCoCDCoC0gZGVidWcgbGV2ZWwgaW5jcmVhc2VkIHRvIDMsIGxv
Z3Mgc3RpbGwgc2VudCB0byBzeXNsb2cNCiPCoCDCoCDCoC0gZGVidWdnZXIgbW9kdWxlIGxvYWRl
ZCB3aXRoIGNmZ3RyYWNlIGVuYWJsZWQNCiMNCiMgKioqIFRvIGVuYWJsZSBteXNxbDoNCiPCoCDC
oCDCoC0gZGVmaW5lIFdJVEhfTVlTUUwNCiMNCiMgKioqIFRvIGVuYWJsZSBhdXRoZW50aWNhdGlv
biBleGVjdXRlOg0KI8KgIMKgIMKgLSBlbmFibGUgbXlzcWwNCiPCoCDCoCDCoC0gZGVmaW5lIFdJ
VEhfQVVUSA0KI8KgIMKgIMKgLSBhZGQgdXNlcnMgdXNpbmcgJ2thbWN0bCcgb3IgJ2thbWNsaScN
CiMNCiMgKioqIFRvIGVuYWJsZSBJUCBhdXRoZW50aWNhdGlvbiBleGVjdXRlOg0KI8KgIMKgIMKg
LSBlbmFibGUgbXlzcWwNCiPCoCDCoCDCoC0gZW5hYmxlIGF1dGhlbnRpY2F0aW9uDQojwqAgwqAg
wqAtIGRlZmluZSBXSVRIX0lQQVVUSA0KI8KgIMKgIMKgLSBhZGQgSVAgYWRkcmVzc2VzIHdpdGgg
Z3JvdXAgaWQgJzEnIHRvICdhZGRyZXNzJyB0YWJsZQ0KIw0KIyAqKiogVG8gZW5hYmxlIHBlcnNp
c3RlbnQgdXNlciBsb2NhdGlvbiBleGVjdXRlOg0KI8KgIMKgIMKgLSBlbmFibGUgbXlzcWwNCiPC
oCDCoCDCoC0gZGVmaW5lIFdJVEhfVVNSTE9DREINCiMNCiMgKioqIFRvIGVuYWJsZSBwcmVzZW5j
ZSBzZXJ2ZXIgZXhlY3V0ZToNCiPCoCDCoCDCoC0gZW5hYmxlIG15c3FsDQojwqAgwqAgwqAtIGRl
ZmluZSBXSVRIX1BSRVNFTkNFDQojwqAgwqAgwqAtIGlmIG1vZGlmaWVkIGhlYWRlcnMgb3IgYm9k
eSBpbiBjb25maWcgbXVzdCBiZSB1c2VkIGJ5IHByZXNlbmNlIA0KaGFuZGxpbmc6DQojwqAgwqAg
wqAtIGRlZmluZSBXSVRIX01TR1JFQlVJTEQNCiMNCiMgKioqIFRvIGVuYWJsZSBuYXQgdHJhdmVy
c2FsIGV4ZWN1dGU6DQojwqAgwqAgwqAtIGRlZmluZSBXSVRIX05BVA0KI8KgIMKgIMKgLSBvcHRp
b24gZm9yIE5BVCBTSVAgT1BUSU9OUyBrZWVwYWxpdmVzOiBXSVRIX05BVFNJUFBJTkcNCiPCoCDC
oCDCoC0gaW5zdGFsbCBSVFBQcm94eTogaHR0cDovL3d3dy5ydHBwcm94eS5vcmcNCiPCoCDCoCDC
oC0gc3RhcnQgUlRQUHJveHk6DQojwqAgwqAgwqAgwqAgcnRwcHJveHkgLWwgX3lvdXJfcHVibGlj
X2lwXyAtcyB1ZHA6bG9jYWxob3N0Ojc3MjINCiMNCiMgKioqIFRvIHVzZSBSVFBFbmdpbmUgKGlu
c3RlYWQgb2YgUlRQUHJveHkpIGZvciBuYXQgdHJhdmVyc2FsIGV4ZWN1dGU6DQojwqAgwqAgwqAt
IGRlZmluZSBXSVRIX1JUUEVOR0lORQ0KI8KgIMKgIMKgLSBpbnN0YWxsIFJUUEVuZ2luZTogaHR0
cHM6Ly9naXRodWIuY29tL3NpcHdpc2UvcnRwZW5naW5lDQojwqAgwqAgwqAtIHN0YXJ0IFJUUEVu
Z2luZToNCiPCoCDCoCDCoCDCoCBydHBlbmdpbmUgLS1saXN0ZW4tbmc9MTI3LjAuMC4xOjIyMjMg
Li4uDQojDQojICoqKiBUbyBlbmFibGUgUFNUTiBnYXRld2F5IHJvdXRpbmcgZXhlY3V0ZToNCiPC
oCDCoCDCoC0gZGVmaW5lIFdJVEhfUFNUTg0KI8KgIMKgIMKgLSBzZXQgdGhlIHZhbHVlIG9mIHBz
dG4uZ3dfaXANCiPCoCDCoCDCoC0gY2hlY2sgcm91dGVbUFNUTl0gZm9yIHJlZ2V4cCByb3V0aW5n
IGNvbmRpdGlvbg0KIw0KIyAqKiogVG8gZW5hYmxlIGRhdGFiYXNlIGFsaWFzZXMgbG9va3VwIGV4
ZWN1dGU6DQojwqAgwqAgwqAtIGVuYWJsZSBteXNxbA0KI8KgIMKgIMKgLSBkZWZpbmUgV0lUSF9B
TElBU0RCDQojDQojICoqKiBUbyBlbmFibGUgc3BlZWQgZGlhbCBsb29rdXAgZXhlY3V0ZToNCiPC
oCDCoCDCoC0gZW5hYmxlIG15c3FsDQojwqAgwqAgwqAtIGRlZmluZSBXSVRIX1NQRUVERElBTA0K
Iw0KIyAqKiogVG8gZW5hYmxlIG11bHRpLWRvbWFpbiBzdXBwb3J0IGV4ZWN1dGU6DQojwqAgwqAg
wqAtIGVuYWJsZSBteXNxbA0KI8KgIMKgIMKgLSBkZWZpbmUgV0lUSF9NVUxUSURPTUFJTg0KIw0K
IyAqKiogVG8gZW5hYmxlIFRMUyBzdXBwb3J0IGV4ZWN1dGU6DQojwqAgwqAgwqAtIGFkanVzdCBD
RkdESVIvdGxzLmNmZyBhcyBuZWVkZWQNCiPCoCDCoCDCoC0gZGVmaW5lIFdJVEhfVExTDQojDQoj
ICoqKiBUbyBlbmFibGUgSlNPTlJQQyBvdmVyIEhUVFAoUykgc3VwcG9ydCBleGVjdXRlOg0KI8Kg
IMKgIMKgLSBkZWZpbmUgV0lUSF9KU09OUlBDDQojwqAgwqAgwqAtIGFkanVzdCBldmVudF9yb3V0
ZVt4aHR0cDpyZXF1ZXN0XSBmb3IgYWNjZXNzIHBvbGljeQ0KIw0KIyAqKiogVG8gZW5hYmxlIGFu
dGktZmxvb2QgZGV0ZWN0aW9uIGV4ZWN1dGU6DQojwqAgwqAgwqAtIGFkanVzdCBwaWtlIGFuZCBo
dGFibGU9PmlwYmFuIHNldHRpbmdzIGFzIG5lZWRlZCAoZGVmYXVsdCBpcw0KI8KgIMKgIMKgIMKg
YmxvY2sgaWYgbW9yZSB0aGFuIDE2IHJlcXVlc3RzIGluIDIgc2Vjb25kcyBhbmQgYmFuIGZvciAz
MDAgc2Vjb25kcykNCiPCoCDCoCDCoC0gZGVmaW5lIFdJVEhfQU5USUZMT09EDQojDQojICoqKiBU
byBsb2FkIGh0YWJsZSBtb2R1bGUgZXhlY3V0ZToNCiPCoCDCoCDCoC0gZGVmaW5lIFdJVEhfSFRB
QkxFDQojDQojICoqKiBUbyBibG9jayAzWFggcmVkaXJlY3QgcmVwbGllcyBleGVjdXRlOg0KI8Kg
IMKgIMKgLSBkZWZpbmUgV0lUSF9CTE9DSzNYWA0KIw0KIyAqKiogVG8gYmxvY2sgNDAxIGFuZCA0
MDcgYXV0aGVudGljYXRpb24gcmVwbGllcyBleGVjdXRlOg0KI8KgIMKgIMKgLSBkZWZpbmUgV0lU
SF9CTE9DSzQwMTQwNw0KIw0KIyAqKiogVG8gZW5hYmxlIFZvaWNlTWFpbCByb3V0aW5nIGV4ZWN1
dGU6DQojwqAgwqAgwqAtIGRlZmluZSBXSVRIX1ZPSUNFTUFJTA0KI8KgIMKgIMKgLSBzZXQgdGhl
IHZhbHVlIG9mIHZvaWNlbWFpbC5zcnZfaXANCiPCoCDCoCDCoC0gYWRqdXN0IHRoZSB2YWx1ZSBv
ZiB2b2ljZW1haWwuc3J2X3BvcnQNCiMNCiMgKioqIFRvIGVuaGFuY2UgYWNjb3VudGluZyBleGVj
dXRlOg0KI8KgIMKgIMKgLSBlbmFibGUgbXlzcWwNCiPCoCDCoCDCoC0gZGVmaW5lIFdJVEhfQUND
REINCiPCoCDCoCDCoC0gYWRkIGZvbGxvd2luZyBjb2x1bW5zIHRvIGRhdGFiYXNlDQojIWlmZGVm
IEFDQ0RCX0NPTU1FTlQNCiDCoCBBTFRFUiBUQUJMRSBhY2MgQUREIENPTFVNTiBzcmNfdXNlciBW
QVJDSEFSKDY0KSBOT1QgTlVMTCBERUZBVUxUICcnOw0KIMKgIEFMVEVSIFRBQkxFIGFjYyBBREQg
Q09MVU1OIHNyY19kb21haW4gVkFSQ0hBUigxMjgpIE5PVCBOVUxMIERFRkFVTFQgJyc7DQogwqAg
QUxURVIgVEFCTEUgYWNjIEFERCBDT0xVTU4gc3JjX2lwIHZhcmNoYXIoNjQpIE5PVCBOVUxMIGRl
ZmF1bHQgJyc7DQogwqAgQUxURVIgVEFCTEUgYWNjIEFERCBDT0xVTU4gZHN0X291c2VyIFZBUkNI
QVIoNjQpIE5PVCBOVUxMIERFRkFVTFQgJyc7DQogwqAgQUxURVIgVEFCTEUgYWNjIEFERCBDT0xV
TU4gZHN0X3VzZXIgVkFSQ0hBUig2NCkgTk9UIE5VTEwgREVGQVVMVCAnJzsNCiDCoCBBTFRFUiBU
QUJMRSBhY2MgQUREIENPTFVNTiBkc3RfZG9tYWluIFZBUkNIQVIoMTI4KSBOT1QgTlVMTCBERUZB
VUxUICcnOw0KIMKgIEFMVEVSIFRBQkxFIG1pc3NlZF9jYWxscyBBREQgQ09MVU1OIHNyY191c2Vy
IFZBUkNIQVIoNjQpIE5PVCBOVUxMIA0KREVGQVVMVCAnJzsNCiDCoCBBTFRFUiBUQUJMRSBtaXNz
ZWRfY2FsbHMgQUREIENPTFVNTiBzcmNfZG9tYWluIFZBUkNIQVIoMTI4KSBOT1QgTlVMTCANCkRF
RkFVTFQgJyc7DQogwqAgQUxURVIgVEFCTEUgbWlzc2VkX2NhbGxzIEFERCBDT0xVTU4gc3JjX2lw
IHZhcmNoYXIoNjQpIE5PVCBOVUxMIA0KZGVmYXVsdCAnJzsNCiDCoCBBTFRFUiBUQUJMRSBtaXNz
ZWRfY2FsbHMgQUREIENPTFVNTiBkc3Rfb3VzZXIgVkFSQ0hBUig2NCkgTk9UIE5VTEwgDQpERUZB
VUxUICcnOw0KIMKgIEFMVEVSIFRBQkxFIG1pc3NlZF9jYWxscyBBREQgQ09MVU1OIGRzdF91c2Vy
IFZBUkNIQVIoNjQpIE5PVCBOVUxMIA0KREVGQVVMVCAnJzsNCiDCoCBBTFRFUiBUQUJMRSBtaXNz
ZWRfY2FsbHMgQUREIENPTFVNTiBkc3RfZG9tYWluIFZBUkNIQVIoMTI4KSBOT1QgTlVMTCANCkRF
RkFVTFQgJyc7DQojIWVuZGlmDQoNCiMjIyMjIyMgSW5jbHVkZSBMb2NhbCBDb25maWcgSWYgRXhp
c3RzICMjIyMjIyMjIw0KaW1wb3J0X2ZpbGUgImthbWFpbGlvLWxvY2FsLmNmZyINCg0KIyMjIyMj
IyBEZWZpbmVkIFZhbHVlcyAjIyMjIyMjIyMNCg0KIyAqKiogVmFsdWUgZGVmaW5lcyAtIElEcyB1
c2VkIGxhdGVyIGluIGNvbmZpZw0KIyFpZmRlZiBXSVRIX0RFQlVHDQojIWRlZmluZSBEQkdMRVZF
TCA1DQojIWVsc2UNCiMhZGVmaW5lIERCR0xFVkVMIDINCiMhZW5kaWYNCg0KIyFpZmRlZiBXSVRI
X01ZU1FMDQojIC0gZGF0YWJhc2UgVVJMIC0gdXNlZCB0byBjb25uZWN0IHRvIGRhdGFiYXNlIHNl
cnZlciBieSBtb2R1bGVzIHN1Y2gNCiPCoCDCoCDCoCDCoGFzOiBhdXRoX2RiLCBhY2MsIHVzcmxv
YywgYS5zLm8uDQojIXRyeWRlZiBEQlVSTCAibXlzcWw6Ly9rYW1haWxpbzprYW1haWxpb3J3QGxv
Y2FsaG9zdC9rYW1haWxpbyINCiMhZW5kaWYNCg0KIyFpZmRlZiBXSVRIX01VTFRJRE9NQUlODQoj
IC0gdGhlIHZhbHVlIGZvciAndXNlX2RvbWFpbicgcGFyYW1ldGVycw0KIyFkZWZpbmUgTVVMVElE
T01BSU4gMQ0KIyFlbHNlDQojIWRlZmluZSBNVUxUSURPTUFJTiAwDQojIWVuZGlmDQoNCiMhaWZk
ZWYgV0lUSF9BTlRJRkxPT0QNCiMgLSBoYXNoIHRhYmxlICdpcGJhbicgdXNlZCB0byBzdG9yZSBi
bG9ja2VkIElQIGFkZHJlc3Nlcw0KIyF0cnlkZWYgV0lUSF9IVEFCTEUNCiMhZW5kaWYNCg0KIyAt
IGZsYWdzDQojwqAgwqBGTFRfIC0gcGVyIHRyYW5zYWN0aW9uIChtZXNzYWdlKSBmbGFncw0KIyFk
ZWZpbmUgRkxUX0FDQyAxDQojIWRlZmluZSBGTFRfQUNDTUlTU0VEIDINCiMhZGVmaW5lIEZMVF9B
Q0NGQUlMRUQgMw0KIyFkZWZpbmUgRkxUX05BVFMgNQ0KDQojwqAgwqAgwqAgwqBGTEJfIC0gcGVy
IGJyYW5jaCBmbGFncw0KIyFkZWZpbmUgRkxCX05BVEIgNg0KIyFkZWZpbmUgRkxCX05BVFNJUFBJ
TkcgNw0KDQojIyMjIyMjIEdsb2JhbCBQYXJhbWV0ZXJzICMjIyMjIyMjIw0KDQovKiBMT0cgTGV2
ZWxzOiAzPURCRywgMj1JTkZPLCAxPU5PVElDRSwgMD1XQVJOLCAtMT1FUlIsIC4uLiAqLw0KZGVi
dWc9REJHTEVWRUwNCg0KLyogc2V0IHRvICd5ZXMnIHRvIHByaW50IGxvZyBtZXNzYWdlcyB0byB0
ZXJtaW5hbCBvciB1c2UgJy1FJyBjbGkgb3B0aW9uICovDQpsb2dfc3RkZXJyb3I9bm8NCg0KbWVt
ZGJnPTUNCm1lbWxvZz01DQoNCmxvZ19mYWNpbGl0eT1MT0dfTE9DQUwwDQpsb2dfcHJlZml4PSJ7
JG10ICRoZHIoQ1NlcSkgJGNpfSAiDQoNCi8qIG51bWJlciBvZiBTSVAgcm91dGluZyBwcm9jZXNz
ZXMgZm9yIGVhY2ggVURQIHNvY2tldA0KIMKgKiAtIHZhbHVlIGluaGVyaXRlZCBieSB0Y3BfY2hp
bGRyZW4gYW5kIHNjdHBfY2hpbGRyZW4gd2hlbiBub3Qgc2V0IA0KZXhwbGljaXRlbHkgKi8NCmNo
aWxkcmVuPTgNCg0KLyogdW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gZGlzYWJsZSBUQ1AgKGRl
ZmF1bHQgb24pICovDQojIGRpc2FibGVfdGNwPXllcw0KDQovKiBudW1iZXIgb2YgU0lQIHJvdXRp
bmcgcHJvY2Vzc2VzIGZvciBhbGwgVENQL1RMUyBzb2NrZXRzICovDQojIHRjcF9jaGlsZHJlbj04
DQoNCi8qIHVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIGRpc2FibGUgdGhlIGF1dG8gZGlzY292
ZXJ5IG9mIGxvY2FsIGFsaWFzZXMNCiDCoCogYmFzZWQgb24gcmV2ZXJzZSBETlMgb24gSVBzIChk
ZWZhdWx0IG9uKSAqLw0KIyBhdXRvX2FsaWFzZXM9bm8NCg0KLyogYWRkIGxvY2FsIGRvbWFpbiBh
bGlhc2VzIC0gaXQgY2FuIGJlIHNldCBtYW55IHRpbWVzICovDQojIGFsaWFzPSJzaXAubXlkb21h
aW4uY29tIg0KDQovKiBsaXN0ZW4gc29ja2V0cyAtIGlmIG5vbmUgc2V0LCBLYW1haWxpbyBiaW5k
cyB0byBhbGwgbG9jYWwgSVAgYWRkcmVzc2VzDQogwqAqIC0gYmFzaWMgcHJvdG90eXBlIChmdWxs
IHByb3RvdHlwZSBjYW4gYmUgZm91bmQgaW4gV2lraSAtIENvcmUgQ29va2Jvb2spOg0KIMKgKsKg
IMKgIMKgIGxpc3Rlbj1bcHJvdG9dOltsb2NhbGlwXTpbbHBvcnRdIGFkdmVydGlzZSBbcHVibGlj
aXBdOltwcG9ydF0NCiDCoCogLSBpdCBjYW4gYmUgc2V0IG1hbnkgdGltZXMgdG8gYWRkIG1vcmUg
c29ja2V0cyB0byBsaXN0ZW4gdG8gKi8NCiMgbGlzdGVuPXVkcDoxMC4wLjAuMTA6NTA2MA0KDQov
KiBsaWZlIHRpbWUgb2YgVENQIGNvbm5lY3Rpb24gd2hlbiB0aGVyZSBpcyBubyB0cmFmZmljDQog
wqAqIC0gYSBiaXQgaGlnaGVyIHRoYW4gcmVnaXN0cmF0aW9uIGV4cGlyZXMgdG8gY29wZSB3aXRo
IFVBIGJlaGluZCBOQVQgKi8NCnRjcF9jb25uZWN0aW9uX2xpZmV0aW1lPTM2MDUNCg0KLyogdXBw
ZXIgbGltaXQgZm9yIFRDUCBjb25uZWN0aW9ucyAoaXQgaW5jbHVkZXMgdGhlIFRMUyBjb25uZWN0
aW9ucykgKi8NCnRjcF9tYXhfY29ubmVjdGlvbnM9MjA0OA0KDQojIWlmZGVmIFdJVEhfSlNPTlJQ
Qw0KdGNwX2FjY2VwdF9ub19jbD15ZXMNCiMhZW5kaWYNCg0KIyFpZmRlZiBXSVRIX1RMUw0KZW5h
YmxlX3Rscz15ZXMNCg0KLyogdXBwZXIgbGltaXQgZm9yIFRMUyBjb25uZWN0aW9ucyAqLw0KdGxz
X21heF9jb25uZWN0aW9ucz0yMDQ4DQojIWVuZGlmDQoNCi8qIHNldCBpdCB0byB5ZXMgdG8gZW5h
YmxlIHNjdHAgYW5kIGxvYWQgc2N0cC5zbyBtb2R1bGUgKi8NCmVuYWJsZV9zY3RwPW5vDQoNCiMj
IyMjIyMgQ3VzdG9tIFBhcmFtZXRlcnMgIyMjIyMjIyMjDQoNCi8qIFRoZXNlIHBhcmFtZXRlcnMg
Y2FuIGJlIG1vZGlmaWVkIGF0IHJ1bnRpbWUgdmlhIFJQQyBpbnRlcmZhY2UNCiDCoCogLSBzZWUg
dGhlIGRvY3VtZW50YXRpb24gb2YgJ2NmZ19ycGMnIG1vZHVsZS4NCiDCoCoNCiDCoCogRm9ybWF0
OiBncm91cC5pZCA9IHZhbHVlICdkZXNjJyBkZXNjcmlwdGlvbg0KIMKgKiBBY2Nlc3M6ICRzZWwo
Y2ZnX2dldC5ncm91cC5pZCkgb3IgQGNmZ19nZXQuZ3JvdXAuaWQgKi8NCg0KIyFpZmRlZiBXSVRI
X1BTVE4NCi8qIFBTVE4gR1cgUm91dGluZw0KIMKgKg0KIMKgKiAtIHBzdG4uZ3dfaXA6IHZhbGlk
IElQIG9yIGhvc3RuYW1lIGFzIHN0cmluZyB2YWx1ZSwgZXhhbXBsZToNCiDCoCogcHN0bi5nd19p
cCA9ICIxMC4wLjAuMTAxIiBkZXNjICJNeSBQU1ROIEdXIEFkZHJlc3MiDQogwqAqDQogwqAqIC0g
YnkgZGVmYXVsdCBpcyBlbXB0eSB0byBhdm9pZCBtaXNyb3V0aW5nICovDQpwc3RuLmd3X2lwID0g
IiIgZGVzYyAiUFNUTiBHVyBBZGRyZXNzIg0KcHN0bi5nd19wb3J0ID0gIiIgZGVzYyAiUFNUTiBH
VyBQb3J0Ig0KIyFlbmRpZg0KDQojIWlmZGVmIFdJVEhfVk9JQ0VNQUlMDQovKiBWb2ljZU1haWwg
Um91dGluZyBvbiBvZmZsaW5lLCBidXN5IG9yIG5vIGFuc3dlcg0KIMKgKg0KIMKgKiAtIGJ5IGRl
ZmF1bHQgVm9pY2VtYWlsIHNlcnZlciBJUCBpcyBlbXB0eSB0byBhdm9pZCBtaXNyb3V0aW5nICov
DQp2b2ljZW1haWwuc3J2X2lwID0gIiIgZGVzYyAiVm9pY2VNYWlsIElQIEFkZHJlc3MiDQp2b2lj
ZW1haWwuc3J2X3BvcnQgPSAiNTA2MCIgZGVzYyAiVm9pY2VNYWlsIFBvcnQiDQojIWVuZGlmDQoN
CiMhaWZkZWYgV0lUSF9GUkVFU1dJVENIDQpmcmVlc3dpdGNoLmJpbmRpcCA9ICI4NS4xMC40LjIi
IGRlc2MgIkZyZWVTV0lUQ0ggSVAgQWRkcmVzcyINCmZyZWVzd2l0Y2guYmluZHBvcnQgPSAiNTA5
MCIgZGVzYyAiRnJlZVNXSVRDSCBQb3J0Ig0KIyFlbmRpZg0KDQoNCiMjIyMjIyMgTW9kdWxlcyBT
ZWN0aW9uICMjIyMjIyMjDQoNCi8qIHNldCBwYXRocyB0byBsb2NhdGlvbiBvZiBtb2R1bGVzICov
DQojIG1wYXRoPSIvdXNyL2xpYi94ODZfNjQtbGludXgtZ251L2thbWFpbGlvL21vZHVsZXMvIg0K
DQojIWlmZGVmIFdJVEhfTVlTUUwNCmxvYWRtb2R1bGUgImRiX215c3FsLnNvIg0KIyFlbmRpZg0K
DQojIWlmZGVmIFdJVEhfSlNPTlJQQw0KbG9hZG1vZHVsZSAieGh0dHAuc28iDQojIWVuZGlmDQps
b2FkbW9kdWxlICJqc29ucnBjcy5zbyINCmxvYWRtb2R1bGUgImtleC5zbyINCmxvYWRtb2R1bGUg
ImNvcmV4LnNvIg0KbG9hZG1vZHVsZSAidG0uc28iDQpsb2FkbW9kdWxlICJ0bXguc28iDQpsb2Fk
bW9kdWxlICJzbC5zbyINCmxvYWRtb2R1bGUgInJyLnNvIg0KbG9hZG1vZHVsZSAicHYuc28iDQps
b2FkbW9kdWxlICJtYXhmd2Quc28iDQpsb2FkbW9kdWxlICJ1c3Jsb2Muc28iDQpsb2FkbW9kdWxl
ICJyZWdpc3RyYXIuc28iDQpsb2FkbW9kdWxlICJ0ZXh0b3BzLnNvIg0KbG9hZG1vZHVsZSAidGV4
dG9wc3guc28iDQpsb2FkbW9kdWxlICJzaXB1dGlscy5zbyINCmxvYWRtb2R1bGUgInhsb2cuc28i
DQpsb2FkbW9kdWxlICJzYW5pdHkuc28iDQpsb2FkbW9kdWxlICJjdGwuc28iDQpsb2FkbW9kdWxl
ICJjZmdfcnBjLnNvIg0KbG9hZG1vZHVsZSAiYWNjLnNvIg0KbG9hZG1vZHVsZSAiY291bnRlcnMu
c28iDQoNCiMhaWZkZWYgV0lUSF9BVVRIDQpsb2FkbW9kdWxlICJhdXRoLnNvIg0KbG9hZG1vZHVs
ZSAiYXV0aF9kYi5zbyINCiMhaWZkZWYgV0lUSF9JUEFVVEgNCmxvYWRtb2R1bGUgInBlcm1pc3Np
b25zLnNvIg0KIyFlbmRpZg0KIyFlbmRpZg0KDQojIWlmZGVmIFdJVEhfQUxJQVNEQg0KbG9hZG1v
ZHVsZSAiYWxpYXNfZGIuc28iDQojIWVuZGlmDQoNCiMhaWZkZWYgV0lUSF9TUEVFRERJQUwNCmxv
YWRtb2R1bGUgInNwZWVkZGlhbC5zbyINCiMhZW5kaWYNCg0KIyFpZmRlZiBXSVRIX01VTFRJRE9N
QUlODQpsb2FkbW9kdWxlICJkb21haW4uc28iDQojIWVuZGlmDQoNCiMhaWZkZWYgV0lUSF9QUkVT
RU5DRQ0KbG9hZG1vZHVsZSAicHJlc2VuY2Uuc28iDQpsb2FkbW9kdWxlICJwcmVzZW5jZV94bWwu
c28iDQojIWVuZGlmDQoNCiMhaWZkZWYgV0lUSF9OQVQNCmxvYWRtb2R1bGUgIm5hdGhlbHBlci5z
byINCiMhaWZkZWYgV0lUSF9SVFBFTkdJTkUNCmxvYWRtb2R1bGUgInJ0cGVuZ2luZS5zbyINCiMh
ZWxzZQ0KbG9hZG1vZHVsZSAicnRwcHJveHkuc28iDQojIWVuZGlmDQojIWVuZGlmDQoNCiMhaWZk
ZWYgV0lUSF9UTFMNCmxvYWRtb2R1bGUgInRscy5zbyINCiMhZW5kaWYNCg0KIyFpZmRlZiBXSVRI
X0hUQUJMRQ0KbG9hZG1vZHVsZSAiaHRhYmxlLnNvIg0KIyFlbmRpZg0KDQojIWlmZGVmIFdJVEhf
QU5USUZMT09EDQpsb2FkbW9kdWxlICJwaWtlLnNvIg0KIyFlbmRpZg0KDQojIWlmZGVmIFdJVEhf
REVCVUcNCmxvYWRtb2R1bGUgImRlYnVnZ2VyLnNvIg0KIyFlbmRpZg0KDQojIC0tLS0tLS0tLS0t
LS0tLS0tIHNldHRpbmcgbW9kdWxlLXNwZWNpZmljIHBhcmFtZXRlcnMgLS0tLS0tLS0tLS0tLS0t
DQoNCg0KIyAtLS0tLSBqc29ucnBjcyBwYXJhbXMgLS0tLS0NCm1vZHBhcmFtKCJqc29ucnBjcyIs
ICJwcmV0dHlfZm9ybWF0IiwgMSkNCi8qIHNldCB0aGUgcGF0aCB0byBSUEMgZmlmbyBjb250cm9s
IGZpbGUgKi8NCiMgbW9kcGFyYW0oImpzb25ycGNzIiwgImZpZm9fbmFtZSIsICIvcnVuL2thbWFp
bGlvL2thbWFpbGlvX3JwYy5maWZvIikNCi8qIHNldCB0aGUgcGF0aCB0byBSUEMgdW5peCBzb2Nr
ZXQgY29udHJvbCBmaWxlICovDQojIG1vZHBhcmFtKCJqc29ucnBjcyIsICJkZ3JhbV9zb2NrZXQi
LCAiL3J1bi9rYW1haWxpby9rYW1haWxpb19ycGMuc29jayIpDQojIWlmZGVmIFdJVEhfSlNPTlJQ
Qw0KbW9kcGFyYW0oImpzb25ycGNzIiwgInRyYW5zcG9ydCIsIDcpDQojIWVuZGlmDQoNCiMgLS0t
LS0gY3RsIHBhcmFtcyAtLS0tLQ0KLyogc2V0IHRoZSBwYXRoIHRvIFJQQyB1bml4IHNvY2tldCBj
b250cm9sIGZpbGUgKi8NCiMgbW9kcGFyYW0oImN0bCIsICJiaW5ycGMiLCAidW5peDovcnVuL2th
bWFpbGlvL2thbWFpbGlvX2N0bCIpDQoNCiMgLS0tLS0gc2FuaXR5IHBhcmFtcyAtLS0tLQ0KbW9k
cGFyYW0oInNhbml0eSIsICJhdXRvZHJvcCIsIDApDQoNCiMgLS0tLS0gdG0gcGFyYW1zIC0tLS0t
DQojIGF1dG8tZGlzY2FyZCBicmFuY2hlcyBmcm9tIHByZXZpb3VzIHNlcmlhbCBmb3JraW5nIGxl
Zw0KbW9kcGFyYW0oInRtIiwgImZhaWx1cmVfcmVwbHlfbW9kZSIsIDMpDQojIGRlZmF1bHQgcmV0
cmFuc21pc3Npb24gdGltZW91dDogMzBzZWMNCm1vZHBhcmFtKCJ0bSIsICJmcl90aW1lciIsIDMw
MDAwKQ0KIyBkZWZhdWx0IGludml0ZSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGFmdGVyIDF4eDog
MTIwc2VjDQptb2RwYXJhbSgidG0iLCAiZnJfaW52X3RpbWVyIiwgMTIwMDAwKQ0KDQojIC0tLS0t
IHJyIHBhcmFtcyAtLS0tLQ0KIyBzZXQgbmV4dCBwYXJhbSB0byAxIHRvIGFkZCB2YWx1ZSB0byA7
bHIgcGFyYW0gKGhlbHBzIHdpdGggc29tZSBVQXMpDQptb2RwYXJhbSgicnIiLCAiZW5hYmxlX2Z1
bGxfbHIiLCAwKQ0KIyBkbyBub3QgYXBwZW5kIGZyb20gdGFnIHRvIHRoZSBSUiAobm8gbmVlZCBm
b3IgdGhpcyBzY3JpcHQpDQptb2RwYXJhbSgicnIiLCAiYXBwZW5kX2Zyb210YWciLCAwKQ0KDQoj
IC0tLS0tIHJlZ2lzdHJhciBwYXJhbXMgLS0tLS0NCm1vZHBhcmFtKCJyZWdpc3RyYXIiLCAibWV0
aG9kX2ZpbHRlcmluZyIsIDEpDQovKiB1bmNvbW1lbnQgdGhlIG5leHQgbGluZSB0byBkaXNhYmxl
IHBhcmFsbGVsIGZvcmtpbmcgdmlhIGxvY2F0aW9uICovDQojIG1vZHBhcmFtKCJyZWdpc3RyYXIi
LCAiYXBwZW5kX2JyYW5jaGVzIiwgMCkNCi8qIHVuY29tbWVudCB0aGUgbmV4dCBsaW5lIG5vdCB0
byBhbGxvdyBtb3JlIHRoYW4gMTAgY29udGFjdHMgcGVyIEFPUiAqLw0KIyBtb2RwYXJhbSgicmVn
aXN0cmFyIiwgIm1heF9jb250YWN0cyIsIDEwKQ0KLyogbWF4IHZhbHVlIGZvciBleHBpcmVzIG9m
IHJlZ2lzdHJhdGlvbnMgKi8NCm1vZHBhcmFtKCJyZWdpc3RyYXIiLCAibWF4X2V4cGlyZXMiLCAz
NjAwKQ0KLyogc2V0IGl0IHRvIDEgdG8gZW5hYmxlIEdSVVUgKi8NCm1vZHBhcmFtKCJyZWdpc3Ry
YXIiLCAiZ3J1dV9lbmFibGVkIiwgMCkNCi8qIHNldCBpdCB0byAwIHRvIGRpc2FibGUgUGF0aCBo
YW5kbGluZyAqLw0KbW9kcGFyYW0oInJlZ2lzdHJhciIsICJ1c2VfcGF0aCIsIDEpDQovKiBzYXZl
IFBhdGggZXZlbiBpZiBub3QgbGlzdGVkIGluIFN1cHBvcnRlZCBoZWFkZXIgKi8NCm1vZHBhcmFt
KCJyZWdpc3RyYXIiLCAicGF0aF9tb2RlIiwgMCkNCg0KIyAtLS0tLSBhY2MgcGFyYW1zIC0tLS0t
DQovKiB3aGF0IHNwZWNpYWwgZXZlbnRzIHNob3VsZCBiZSBhY2NvdW50ZWQgPyAqLw0KbW9kcGFy
YW0oImFjYyIsICJlYXJseV9tZWRpYSIsIDApDQptb2RwYXJhbSgiYWNjIiwgInJlcG9ydF9hY2si
LCAwKQ0KbW9kcGFyYW0oImFjYyIsICJyZXBvcnRfY2FuY2VscyIsIDApDQovKiBieSBkZWZhdWx0
IHdlIGRvIG5vdCBhZGp1c3QgdGhlIGRpcmVjdCBvZiB0aGUgc2VxdWVudGlhbCByZXF1ZXN0cy4N
CiDCoCogaWYgeW91IGVuYWJsZSB0aGlzIHBhcmFtZXRlciwgYmUgc3VyZSB0aGUgZW5hYmxlICJh
cHBlbmRfZnJvbXRhZyINCiDCoCogaW4gInJyIiBtb2R1bGUgKi8NCm1vZHBhcmFtKCJhY2MiLCAi
ZGV0ZWN0X2RpcmVjdGlvbiIsIDApDQovKiBhY2NvdW50IHRyaWdnZXJzIChmbGFncykgKi8NCm1v
ZHBhcmFtKCJhY2MiLCAibG9nX2ZsYWciLCBGTFRfQUNDKQ0KbW9kcGFyYW0oImFjYyIsICJsb2df
bWlzc2VkX2ZsYWciLCBGTFRfQUNDTUlTU0VEKQ0KbW9kcGFyYW0oImFjYyIsICJsb2dfZXh0cmEi
LA0KIMKgIMKgIMKgIMKgICJzcmNfdXNlcj0kZlU7c3JjX2RvbWFpbj0kZmQ7c3JjX2lwPSRzaTsi
DQogwqAgwqAgwqAgwqAgImRzdF9vdXNlcj0kdFU7ZHN0X3VzZXI9JHJVO2RzdF9kb21haW49JHJk
IikNCm1vZHBhcmFtKCJhY2MiLCAiZmFpbGVkX3RyYW5zYWN0aW9uX2ZsYWciLCBGTFRfQUNDRkFJ
TEVEKQ0KLyogZW5oYW5jZWQgREIgYWNjb3VudGluZyAqLw0KIyFpZmRlZiBXSVRIX0FDQ0RCDQpt
b2RwYXJhbSgiYWNjIiwgImRiX2ZsYWciLCBGTFRfQUNDKQ0KbW9kcGFyYW0oImFjYyIsICJkYl9t
aXNzZWRfZmxhZyIsIEZMVF9BQ0NNSVNTRUQpDQptb2RwYXJhbSgiYWNjIiwgImRiX3VybCIsIERC
VVJMKQ0KbW9kcGFyYW0oImFjYyIsICJkYl9leHRyYSIsDQogwqAgwqAgwqAgwqAgInNyY191c2Vy
PSRmVTtzcmNfZG9tYWluPSRmZDtzcmNfaXA9JHNpOyINCiDCoCDCoCDCoCDCoCAiZHN0X291c2Vy
PSR0VTtkc3RfdXNlcj0kclU7ZHN0X2RvbWFpbj0kcmQiKQ0KIyFlbmRpZg0KDQojIC0tLS0tIHVz
cmxvYyBwYXJhbXMgLS0tLS0NCm1vZHBhcmFtKCJ1c3Jsb2MiLCAidGltZXJfaW50ZXJ2YWwiLCA2
MCkNCm1vZHBhcmFtKCJ1c3Jsb2MiLCAidGltZXJfcHJvY3MiLCAxKQ0KbW9kcGFyYW0oInVzcmxv
YyIsICJ1c2VfZG9tYWluIiwgTVVMVElET01BSU4pDQovKiBlbmFibGUgREIgcGVyc2lzdGVuY3kg
Zm9yIGxvY2F0aW9uIGVudHJpZXMgKi8NCiMhaWZkZWYgV0lUSF9VU1JMT0NEQg0KbW9kcGFyYW0o
InVzcmxvYyIsICJkYl91cmwiLCBEQlVSTCkNCm1vZHBhcmFtKCJ1c3Jsb2MiLCAiZGJfbW9kZSIs
IDIpDQojIWVuZGlmDQoNCiMgLS0tLS0gYXV0aF9kYiBwYXJhbXMgLS0tLS0NCiMhaWZkZWYgV0lU
SF9BVVRIDQptb2RwYXJhbSgiYXV0aF9kYiIsICJkYl91cmwiLCBEQlVSTCkNCm1vZHBhcmFtKCJh
dXRoX2RiIiwgImNhbGN1bGF0ZV9oYTEiLCB5ZXMpDQptb2RwYXJhbSgiYXV0aF9kYiIsICJwYXNz
d29yZF9jb2x1bW4iLCAicGFzc3dvcmQiKQ0KbW9kcGFyYW0oImF1dGhfZGIiLCAibG9hZF9jcmVk
ZW50aWFscyIsICIiKQ0KbW9kcGFyYW0oImF1dGhfZGIiLCAidXNlX2RvbWFpbiIsIE1VTFRJRE9N
QUlOKQ0KDQojIC0tLS0tIHBlcm1pc3Npb25zIHBhcmFtcyAtLS0tLQ0KIyFpZmRlZiBXSVRIX0lQ
QVVUSA0KbW9kcGFyYW0oInBlcm1pc3Npb25zIiwgImRiX3VybCIsIERCVVJMKQ0KbW9kcGFyYW0o
InBlcm1pc3Npb25zIiwgImxvYWRfYmFja2VuZHMiLCAxKQ0KIyFlbmRpZg0KDQojIWVuZGlmDQoN
CiMgLS0tLS0gYWxpYXNfZGIgcGFyYW1zIC0tLS0tDQojIWlmZGVmIFdJVEhfQUxJQVNEQg0KbW9k
cGFyYW0oImFsaWFzX2RiIiwgImRiX3VybCIsIERCVVJMKQ0KbW9kcGFyYW0oImFsaWFzX2RiIiwg
InVzZV9kb21haW4iLCBNVUxUSURPTUFJTikNCiMhZW5kaWYNCg0KIyAtLS0tLSBzcGVlZGRpYWwg
cGFyYW1zIC0tLS0tDQojIWlmZGVmIFdJVEhfU1BFRURESUFMDQptb2RwYXJhbSgic3BlZWRkaWFs
IiwgImRiX3VybCIsIERCVVJMKQ0KbW9kcGFyYW0oInNwZWVkZGlhbCIsICJ1c2VfZG9tYWluIiwg
TVVMVElET01BSU4pDQojIWVuZGlmDQoNCiMgLS0tLS0gZG9tYWluIHBhcmFtcyAtLS0tLQ0KIyFp
ZmRlZiBXSVRIX01VTFRJRE9NQUlODQptb2RwYXJhbSgiZG9tYWluIiwgImRiX3VybCIsIERCVVJM
KQ0KLyogcmVnaXN0ZXIgY2FsbGJhY2sgdG8gbWF0Y2ggbXlzZWxmIGNvbmRpdGlvbiB3aXRoIGRv
bWFpbnMgbGlzdCAqLw0KbW9kcGFyYW0oImRvbWFpbiIsICJyZWdpc3Rlcl9teXNlbGYiLCAxKQ0K
IyFlbmRpZg0KDQojIWlmZGVmIFdJVEhfUFJFU0VOQ0UNCiMgLS0tLS0gcHJlc2VuY2UgcGFyYW1z
IC0tLS0tDQptb2RwYXJhbSgicHJlc2VuY2UiLCAiZGJfdXJsIiwgREJVUkwpDQoNCiMgLS0tLS0g
cHJlc2VuY2VfeG1sIHBhcmFtcyAtLS0tLQ0KbW9kcGFyYW0oInByZXNlbmNlX3htbCIsICJkYl91
cmwiLCBEQlVSTCkNCm1vZHBhcmFtKCJwcmVzZW5jZV94bWwiLCAiZm9yY2VfYWN0aXZlIiwgMSkN
CiMhZW5kaWYNCg0KIyFpZmRlZiBXSVRIX05BVA0KIyFpZmRlZiBXSVRIX1JUUEVOR0lORQ0KIyAt
LS0tLSBydHBlbmdpbmUgcGFyYW1zIC0tLS0tDQptb2RwYXJhbSgicnRwZW5naW5lIiwgInJ0cGVu
Z2luZV9zb2NrIiwgInVkcDoxMjcuMC4wLjE6MjIyMyIpDQojIWVsc2UNCiMgLS0tLS0gcnRwcHJv
eHkgcGFyYW1zIC0tLS0tDQptb2RwYXJhbSgicnRwcHJveHkiLCAicnRwcHJveHlfc29jayIsICJ1
ZHA6MTI3LjAuMC4xOjc3MjIiKQ0KIyFlbmRpZg0KIyAtLS0tLSBuYXRoZWxwZXIgcGFyYW1zIC0t
LS0tDQptb2RwYXJhbSgibmF0aGVscGVyIiwgIm5hdHBpbmdfaW50ZXJ2YWwiLCAzMCkNCm1vZHBh
cmFtKCJuYXRoZWxwZXIiLCAicGluZ19uYXRlZF9vbmx5IiwgMSkNCm1vZHBhcmFtKCJuYXRoZWxw
ZXIiLCAic2lwcGluZ19iZmxhZyIsIEZMQl9OQVRTSVBQSU5HKQ0KbW9kcGFyYW0oIm5hdGhlbHBl
ciIsICJzaXBwaW5nX2Zyb20iLCAic2lwOnBpbmdlckBrYW1haWxpby5vcmciKQ0KDQojIHBhcmFt
cyBuZWVkZWQgZm9yIE5BVCB0cmF2ZXJzYWwgaW4gb3RoZXIgbW9kdWxlcw0KbW9kcGFyYW0oIm5h
dGhlbHBlcnxyZWdpc3RyYXIiLCAicmVjZWl2ZWRfYXZwIiwgIiRhdnAoUkVDRUlWRUQpIikNCm1v
ZHBhcmFtKCJ1c3Jsb2MiLCAibmF0X2JmbGFnIiwgRkxCX05BVEIpDQojIWVuZGlmDQoNCiMhaWZk
ZWYgV0lUSF9UTFMNCiMgLS0tLS0gdGxzIHBhcmFtcyAtLS0tLQ0KbW9kcGFyYW0oInRscyIsICJj
b25maWciLCAiL2V0Yy9rYW1haWxpby90bHMuY2ZnIikNCiMhZW5kaWYNCg0KIyFpZmRlZiBXSVRI
X0FOVElGTE9PRA0KIyAtLS0tLSBwaWtlIHBhcmFtcyAtLS0tLQ0KbW9kcGFyYW0oInBpa2UiLCAi
c2FtcGxpbmdfdGltZV91bml0IiwgMikNCm1vZHBhcmFtKCJwaWtlIiwgInJlcXNfZGVuc2l0eV9w
ZXJfdW5pdCIsIDE2KQ0KbW9kcGFyYW0oInBpa2UiLCAicmVtb3ZlX2xhdGVuY3kiLCA0KQ0KIyFl
bmRpZg0KDQojIWlmZGVmIFdJVEhfSFRBQkxFDQojIC0tLS0tIGh0YWJsZSBwYXJhbXMgLS0tLS0N
CiMhaWZkZWYgV0lUSF9BTlRJRkxPT0QNCi8qIGlwIGJhbiBodGFibGUgd2l0aCBhdXRvZXhwaXJl
IGFmdGVyIDUgbWludXRlcyAqLw0KbW9kcGFyYW0oImh0YWJsZSIsICJodGFibGUiLCAiaXBiYW49
PnNpemU9ODthdXRvZXhwaXJlPTMwMDsiKQ0KIyFlbmRpZg0KIyFlbmRpZg0KDQojIWlmZGVmIFdJ
VEhfREVCVUcNCiMgLS0tLS0gZGVidWdnZXIgcGFyYW1zIC0tLS0tDQptb2RwYXJhbSgiZGVidWdn
ZXIiLCAiY2ZndHJhY2UiLCAxKQ0KbW9kcGFyYW0oImRlYnVnZ2VyIiwgImxvZ19sZXZlbF9uYW1l
IiwgImV4ZWMiKQ0KIyFlbmRpZg0KDQojIyMjIyMjIFJvdXRpbmcgTG9naWMgIyMjIyMjIyMNCg0K
DQovKiBNYWluIFNJUCByZXF1ZXN0IHJvdXRpbmcgbG9naWMNCiDCoCogLSBwcm9jZXNzaW5nIG9m
IGFueSBpbmNvbWluZyBTSVAgcmVxdWVzdCBzdGFydHMgd2l0aCB0aGlzIHJvdXRlDQogwqAqIC0g
bm90ZTogdGhpcyBpcyB0aGUgc2FtZSBhcyByb3V0ZSB7IC4uLiB9ICovDQpyZXF1ZXN0X3JvdXRl
IHsNCg0KIMKgIMKgIMKgIMKgICMgcGVyIHJlcXVlc3QgaW5pdGlhbCBjaGVja3MNCiDCoCDCoCDC
oCDCoCByb3V0ZShSRVFJTklUKTsNCg0KIMKgIMKgIMKgIMKgICMgTkFUIGRldGVjdGlvbg0KIMKg
IMKgIMKgIMKgIHJvdXRlKE5BVERFVEVDVCk7DQoNCiDCoCDCoCDCoCDCoCAjIENBTkNFTCBwcm9j
ZXNzaW5nDQogwqAgwqAgwqAgwqAgaWYgKGlzX21ldGhvZCgiQ0FOQ0VMIikpIHsNCiDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCBpZiAodF9jaGVja190cmFucygpKSB7DQogwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgcm91dGUoUkVMQVkpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIH0NCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBleGl0Ow0KIMKgIMKgIMKgIMKgIH0NCg0K
IMKgIMKgIMKgIMKgICMgaGFuZGxlIHJldHJhbnNtaXNzaW9ucw0KIMKgIMKgIMKgIMKgIGlmICgh
aXNfbWV0aG9kKCJBQ0siKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmKHRfcHJlY2hl
Y2tfdHJhbnMoKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRfY2hl
Y2tfdHJhbnMoKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBleGl0Ow0K
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0X2No
ZWNrX3RyYW5zKCk7DQogwqAgwqAgwqAgwqAgfQ0KDQogwqAgwqAgwqAgwqAgIyBoYW5kbGUgcmVx
dWVzdHMgd2l0aGluIFNJUCBkaWFsb2dzDQogwqAgwqAgwqAgwqAgcm91dGUoV0lUSElORExHKTsN
Cg0KIMKgIMKgIMKgIMKgICMjIyBvbmx5IGluaXRpYWwgcmVxdWVzdHMgKG5vIFRvIHRhZykNCg0K
IMKgIMKgIMKgIMKgICMgYXV0aGVudGljYXRpb24NCiDCoCDCoCDCoCDCoCByb3V0ZShBVVRIKTsN
Cg0KIMKgIMKgIMKgIMKgICMgcmVjb3JkIHJvdXRpbmcgZm9yIGRpYWxvZyBmb3JtaW5nIHJlcXVl
c3RzIChpbiBjYXNlIHRoZXkgYXJlIA0Kcm91dGVkKQ0KIMKgIMKgIMKgIMKgICMgLSByZW1vdmUg
cHJlbG9hZGVkIHJvdXRlIGhlYWRlcnMNCiDCoCDCoCDCoCDCoCByZW1vdmVfaGYoIlJvdXRlIik7
DQogwqAgwqAgwqAgwqAgaWYgKGlzX21ldGhvZCgiSU5WSVRFfFNVQlNDUklCRSIpKSB7DQogwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgcmVjb3JkX3JvdXRlKCk7DQogwqAgwqAgwqAgwqAgfQ0KDQog
wqAgwqAgwqAgwqAgIyBhY2NvdW50IG9ubHkgSU5WSVRFcw0KIMKgIMKgIMKgIMKgIGlmIChpc19t
ZXRob2QoIklOVklURSIpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc2V0ZmxhZyhGTFRf
QUNDKTsgIyBkbyBhY2NvdW50aW5nDQogwqAgwqAgwqAgwqAgfQ0KDQogwqAgwqAgwqAgwqAgIyBk
aXNwYXRjaCByZXF1ZXN0cyB0byBmb3JlaWduIGRvbWFpbnMNCiDCoCDCoCDCoCDCoCByb3V0ZShT
SVBPVVQpOw0KDQogwqAgwqAgwqAgwqAgIyMjIHJlcXVlc3RzIGZvciBteSBsb2NhbCBkb21haW5z
DQoNCiDCoCDCoCDCoCDCoCAjIGhhbmRsZSBwcmVzZW5jZSByZWxhdGVkIHJlcXVlc3RzDQogwqAg
wqAgwqAgwqAgcm91dGUoUFJFU0VOQ0UpOw0KDQogwqAgwqAgwqAgwqAgIyBoYW5kbGUgcmVnaXN0
cmF0aW9ucw0KIMKgIMKgIMKgIMKgIHJvdXRlKFJFR0lTVFJBUik7DQoNCiDCoCDCoCDCoCDCoCBp
ZiAoJHJVPT0kbnVsbCkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICMgcmVxdWVzdCB3aXRo
IG5vIFVzZXJuYW1lIGluIFJVUkkNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzbF9zZW5kX3Jl
cGx5KCI0ODQiLCAiQWRkcmVzcyBJbmNvbXBsZXRlIik7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgZXhpdDsNCiDCoCDCoCDCoCDCoCB9DQoNCiDCoCDCoCDCoCDCoCAjIGRpc3BhdGNoIGRlc3Rp
bmF0aW9ucyB0byBQU1RODQogwqAgwqAgwqAgwqAgcm91dGUoUFNUTik7DQoNCiDCoCDCoCDCoCDC
oCAjIHVzZXIgbG9jYXRpb24gc2VydmljZQ0KIMKgIMKgIMKgIMKgIHJvdXRlKExPQ0FUSU9OKTsN
Cg0KIMKgIMKgIMKgIMKgIHJldHVybjsNCn0NCg0KIyBXcmFwcGVyIGZvciByZWxheWluZyByZXF1
ZXN0cw0Kcm91dGVbUkVMQVldIHsNCg0KIMKgIMKgIMKgIMKgICMgZW5hYmxlIGFkZGl0aW9uYWwg
ZXZlbnQgcm91dGVzIGZvciBmb3J3YXJkZWQgcmVxdWVzdHMNCiDCoCDCoCDCoCDCoCAjIC0gc2Vy
aWFsIGZvcmtpbmcsIFJUUCByZWxheWluZyBoYW5kbGluZywgYS5zLm8uDQogwqAgwqAgwqAgwqAg
aWYgKGlzX21ldGhvZCgiSU5WSVRFfEJZRXxTVUJTQ1JJQkV8VVBEQVRFIikpIHsNCiDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCBpZighdF9pc19zZXQoImJyYW5jaF9yb3V0ZSIpKSB0X29uX2JyYW5j
aCgiTUFOQUdFX0JSQU5DSCIpOw0KIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCBpZiAoaXNf
bWV0aG9kKCJJTlZJVEV8U1VCU0NSSUJFfFVQREFURSIpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgaWYoIXRfaXNfc2V0KCJvbnJlcGx5X3JvdXRlIikpIHRfb25fcmVwbHkoIk1BTkFHRV9S
RVBMWSIpOw0KIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCBpZiAoaXNfbWV0aG9kKCJJTlZJ
VEUiKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmKCF0X2lzX3NldCgiZmFpbHVyZV9y
b3V0ZSIpKSANCnRfb25fZmFpbHVyZSgiTUFOQUdFX0ZBSUxVUkUiKTsNCiDCoCDCoCDCoCDCoCB9
DQoNCiDCoCDCoCDCoCDCoCBpZiAoIXRfcmVsYXkoKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIHNsX3JlcGx5X2Vycm9yKCk7DQogwqAgwqAgwqAgwqAgfQ0KIMKgIMKgIMKgIMKgIGV4aXQ7
DQp9DQoNCiMgUGVyIFNJUCByZXF1ZXN0IGluaXRpYWwgY2hlY2tzDQpyb3V0ZVtSRVFJTklUXSB7
DQogwqAgwqAgwqAgwqAgIyBubyBjb25uZWN0IGZvciBzZW5kaW5nIHJlcGxpZXMNCiDCoCDCoCDC
oCDCoCBzZXRfcmVwbHlfbm9fY29ubmVjdCgpOw0KIMKgIMKgIMKgIMKgICMgZW5mb3JjZSBzeW1t
ZXRyaWMgc2lnbmFsaW5nDQogwqAgwqAgwqAgwqAgIyAtIHNlbmQgYmFjayByZXBsaWVzIHRvIHRo
ZSBzb3VyY2UgYWRkcmVzcyBvZiByZXF1ZXN0DQogwqAgwqAgwqAgwqAgZm9yY2VfcnBvcnQoKTsN
Cg0KIyFpZmRlZiBXSVRIX0FOVElGTE9PRA0KIMKgIMKgIMKgIMKgICMgZmxvb2QgZGV0ZWN0aW9u
IGZyb20gc2FtZSBJUCBhbmQgdHJhZmZpYyBiYW4gZm9yIGEgd2hpbGUNCiDCoCDCoCDCoCDCoCAj
IGJlIHN1cmUgeW91IGV4Y2x1ZGUgY2hlY2tpbmcgdHJ1c3RlZCBwZWVycywgc3VjaCBhcyBwc3Ru
IGdhdGV3YXlzDQogwqAgwqAgwqAgwqAgIyAtIGxvY2FsIGhvc3QgZXhjbHVkZWQgKGUuZy4sIGxv
b3AgdG8gc2VsZikNCiDCoCDCoCDCoCDCoCBpZihzcmNfaXAhPW15c2VsZikgew0KIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIGlmKCRzaHQoaXBiYW49PiRzaSkhPSRudWxsKSB7DQogwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIyBpcCBpcyBhbHJlYWR5IGJsb2NrZWQNCiDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB4ZGJnKCJyZXF1ZXN0IGZyb20gYmxvY2tl
ZCBJUCAtICRybSBmcm9tICRmdSANCihJUDokc2k6JHNwKVxuIik7DQogwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgZXhpdDsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9DQog
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKCFwaWtlX2NoZWNrX3JlcSgpKSB7DQogwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgeGFsZXJ0KCJBTEVSVDogcGlrZSBibG9ja2lu
ZyAkcm0gZnJvbSAkZnUgDQooSVA6JHNpOiRzcClcbiIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgICRzaHQoaXBiYW49PiRzaSkgPSAxOw0KIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIGV4aXQ7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQ0KIMKg
IMKgIMKgIMKgIH0NCiMhZW5kaWYNCiDCoCDCoCDCoCDCoCBpZigkdWEgPX4gDQoiZnJpZW5kbHl8
c2Nhbm5lcnxzaXBjbGl8c2lwdmljaW91c3xWYXhTSVBVc2VyQWdlbnR8cHBsc2lwIikgew0KIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgICMgc2lsZW50IGRyb3AgZm9yIHNjYW5uZXJzIC0gdW5jb21t
ZW50IG5leHQgbGluZSBpZiANCndhbnQgdG8gcmVwbHkNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCAjIHNsX3NlbmRfcmVwbHkoIjIwMCIsICJPSyIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IGV4aXQ7DQogwqAgwqAgwqAgwqAgfQ0KDQogwqAgwqAgwqAgwqAgaWYgKCFtZl9wcm9jZXNzX21h
eGZ3ZF9oZWFkZXIoIjEwIikpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzbF9zZW5kX3Jl
cGx5KCI0ODMiLCAiVG9vIE1hbnkgSG9wcyIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGV4
aXQ7DQogwqAgwqAgwqAgwqAgfQ0KDQogwqAgwqAgwqAgwqAgaWYoaXNfbWV0aG9kKCJPUFRJT05T
IikgJiYgdXJpPT1teXNlbGYgJiYgJHJVPT0kbnVsbCkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIHNsX3NlbmRfcmVwbHkoIjIwMCIsICJLZWVwYWxpdmUiKTsNCiDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCBleGl0Ow0KIMKgIMKgIMKgIMKgIH0NCg0KIMKgIMKgIMKgIMKgIGlmKCFzYW5pdHlf
Y2hlY2soIjE3ODk1IiwgIjciKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHhsb2coIk1h
bGZvcm1lZCBTSVAgcmVxdWVzdCBmcm9tICRzaTokc3BcbiIpOw0KIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIGV4aXQ7DQogwqAgwqAgwqAgwqAgfQ0KfQ0KDQojIEhhbmRsZSByZXF1ZXN0cyB3aXRo
aW4gU0lQIGRpYWxvZ3MNCnJvdXRlW1dJVEhJTkRMR10gew0KIMKgIMKgIMKgIMKgIGlmICghaGFz
X3RvdGFnKCkpIHJldHVybjsNCg0KIMKgIMKgIMKgIMKgICMgc2VxdWVudGlhbCByZXF1ZXN0IHdp
dGhpbiBhIGRpYWxvZyBzaG91bGQNCiDCoCDCoCDCoCDCoCAjIHRha2UgdGhlIHBhdGggZGV0ZXJt
aW5lZCBieSByZWNvcmQtcm91dGluZw0KIMKgIMKgIMKgIMKgIGlmIChsb29zZV9yb3V0ZSgpKSB7
DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcm91dGUoRExHVVJJKTsNCiDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCBpZiAoaXNfbWV0aG9kKCJCWUUiKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIHNldGZsYWcoRkxUX0FDQyk7ICMgZG8gYWNjb3VudGluZyAuLi4NCiDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzZXRmbGFnKEZMVF9BQ0NGQUlMRUQp
OyAjIC4uLiBldmVuIGlmIHRoZSANCnRyYW5zYWN0aW9uIGZhaWxzDQogwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgfSBlbHNlIGlmICggaXNfbWV0aG9kKCJBQ0siKSApIHsNCiDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAjIEFDSyBpcyBmb3J3YXJkZWQgc3RhdGVsZXNzbHkNCiDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByb3V0ZShOQVRNQU5BR0UpOw0KIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0gZWxzZSBpZiAoIGlzX21ldGhvZCgiTk9USUZZIikgKSB7
DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIyBBZGQgUmVjb3JkLVJvdXRl
IGZvciBpbi1kaWFsb2cgTk9USUZZIGFzIHBlciANClJGQyA2NjY1Lg0KIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJlY29yZF9yb3V0ZSgpOw0KIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIH0NCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByb3V0ZShSRUxBWSk7DQogwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgZXhpdDsNCiDCoCDCoCDCoCDCoCB9DQoNCiDCoCDCoCDCoCDCoCBp
ZiAoaXNfbWV0aG9kKCJTVUJTQ1JJQkUiKSAmJiB1cmkgPT0gbXlzZWxmKSB7DQogwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgIyBpbi1kaWFsb2cgc3Vic2NyaWJlIHJlcXVlc3RzDQogwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgcm91dGUoUFJFU0VOQ0UpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IGV4aXQ7DQogwqAgwqAgwqAgwqAgfQ0KIMKgIMKgIMKgIMKgIGlmICggaXNfbWV0aG9kKCJBQ0si
KSApIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoIHRfY2hlY2tfdHJhbnMoKSApIHsN
CiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAjIG5vIGxvb3NlLXJvdXRlLCBi
dXQgc3RhdGVmdWwgQUNLOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICMg
bXVzdCBiZSBhbiBBQ0sgYWZ0ZXIgYSA0ODcNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCAjIG9yIGUuZy4gNDA0IGZyb20gdXBzdHJlYW0gc2VydmVyDQogwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcm91dGUoUkVMQVkpOw0KIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIGV4aXQ7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfSBlbHNl
IHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAjIEFDSyB3aXRob3V0IG1h
dGNoaW5nIHRyYW5zYWN0aW9uIC4uLiBpZ25vcmUgDQphbmQgZGlzY2FyZA0KIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGV4aXQ7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
fQ0KIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCBzbF9zZW5kX3JlcGx5KCI0MDQiLCAiTm90
IGhlcmUiKTsNCiDCoCDCoCDCoCDCoCBleGl0Ow0KfQ0KDQojIEhhbmRsZSBTSVAgcmVnaXN0cmF0
aW9ucw0Kcm91dGVbUkVHSVNUUkFSXSB7DQogwqAgwqAgwqAgwqAgaWYgKCFpc19tZXRob2QoIlJF
R0lTVEVSIikpIHJldHVybjsNCg0KIMKgIMKgIMKgIMKgIGlmKGlzZmxhZ3NldChGTFRfTkFUUykp
IHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzZXRiZmxhZyhGTEJfTkFUQik7DQojIWlmZGVm
IFdJVEhfTkFUU0lQUElORw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICMgZG8gU0lQIE5BVCBw
aW5naW5nDQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc2V0YmZsYWcoRkxCX05BVFNJUFBJTkcp
Ow0KIyFlbmRpZg0KIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCBpZiAoIXNhdmUoImxvY2F0
aW9uIikpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzbF9yZXBseV9lcnJvcigpOw0KIMKg
IMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCBleGl0Ow0KfQ0KDQojIFVzZXIgbG9jYXRpb24gc2Vy
dmljZQ0Kcm91dGVbTE9DQVRJT05dIHsNCg0KIyFpZmRlZiBXSVRIX1NQRUVERElBTA0KIMKgIMKg
IMKgIMKgICMgc2VhcmNoIGZvciBzaG9ydCBkaWFsaW5nIC0gMi1kaWdpdCBleHRlbnNpb24NCiDC
oCDCoCDCoCDCoCBpZigkclU9fiJeWzAtOV1bMC05XSQiKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgaWYoc2RfbG9va3VwKCJzcGVlZF9kaWFsIikpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCByb3V0ZShTSVBPVVQpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IH0NCiDCoCDCoCDCoCDCoCB9DQojIWVuZGlmDQoNCiMhaWZkZWYgV0lUSF9BTElBU0RCDQogwqAg
wqAgwqAgwqAgIyBzZWFyY2ggaW4gREItYmFzZWQgYWxpYXNlcw0KIMKgIMKgIMKgIMKgIGlmKGFs
aWFzX2RiX2xvb2t1cCgiZGJhbGlhc2VzIikpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBy
b3V0ZShTSVBPVVQpOw0KIMKgIMKgIMKgIMKgIH0NCiMhZW5kaWYNCg0KIMKgIMKgIMKgIMKgICRh
dnAob2V4dGVuKSA9ICRyVTsNCiDCoCDCoCDCoCDCoCBpZiAoIWxvb2t1cCgibG9jYXRpb24iKSkg
ew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICR2YXIocmMpID0gJHJjOw0KIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIHJvdXRlKFRPVk9JQ0VNQUlMKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCB0X25ld3RyYW4oKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzd2l0Y2ggKCR2YXIocmMp
KSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2FzZSAtMToNCiDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjYXNlIC0zOg0KIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNlbmRfcmVwbHkoIjQwNCIsICJOb3Qg
Rm91bmQgQSIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIGV4aXQ7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2FzZSAtMjoN
CiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzZW5kX3Jl
cGx5KCI0MDUiLCAiTWV0aG9kIE5vdCBBbGxvd2VkIik7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXhpdDsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCB9DQogwqAgwqAgwqAgwqAgfQ0KDQogwqAgwqAgwqAgwqAgIyB3aGVuIHJvdXRpbmcgdmlhIHVz
cmxvYywgbG9nIHRoZSBtaXNzZWQgY2FsbHMgYWxzbw0KIMKgIMKgIMKgIMKgIGlmIChpc19tZXRo
b2QoIklOVklURSIpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc2V0ZmxhZyhGTFRfQUND
TUlTU0VEKTsNCiDCoCDCoCDCoCDCoCB9DQoNCiDCoCDCoCDCoCDCoCByb3V0ZShSRUxBWSk7DQog
wqAgwqAgwqAgwqAgZXhpdDsNCn0NCg0KIyBQcmVzZW5jZSBzZXJ2ZXIgcHJvY2Vzc2luZw0Kcm91
dGVbUFJFU0VOQ0VdIHsNCiDCoCDCoCDCoCDCoCBpZighaXNfbWV0aG9kKCJQVUJMSVNIfFNVQlND
UklCRSIpKSByZXR1cm47DQoNCiDCoCDCoCDCoCDCoCBpZihpc19tZXRob2QoIlNVQlNDUklCRSIp
ICYmICRoZHIoRXZlbnQpPT0ibWVzc2FnZS1zdW1tYXJ5Iikgew0KIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIHJvdXRlKFRPVk9JQ0VNQUlMKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAjIHJl
dHVybnMgaGVyZSBpZiBubyB2b2ljZW1haWwgc2VydmVyIGlzIGNvbmZpZ3VyZWQNCiDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCBzbF9zZW5kX3JlcGx5KCI0MDQiLCAiTm8gdm9pY2VtYWlsIHNlcnZp
Y2UiKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBleGl0Ow0KIMKgIMKgIMKgIMKgIH0NCg0K
IyFpZmRlZiBXSVRIX1BSRVNFTkNFDQojIWlmZGVmIFdJVEhfTVNHUkVCVUlMRA0KIMKgIMKgIMKg
IMKgICMgYXBwbHkgY2hhbmdlcyBpbiBjYXNlIHRoZSByZXF1ZXN0IGhlYWRlcnMgb3IgYm9keSB3
ZXJlIG1vZGlmaWVkDQogwqAgwqAgwqAgwqAgbXNnX2FwcGx5X2NoYW5nZXMoKTsNCiMhZW5kaWYN
CiDCoCDCoCDCoCDCoCBpZiAoIXRfbmV3dHJhbigpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgc2xfcmVwbHlfZXJyb3IoKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBleGl0Ow0KIMKg
IMKgIMKgIMKgIH0NCg0KIMKgIMKgIMKgIMKgIGlmKGlzX21ldGhvZCgiUFVCTElTSCIpKSB7DQog
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaGFuZGxlX3B1Ymxpc2goKTsNCiDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCB0X3JlbGVhc2UoKTsNCiDCoCDCoCDCoCDCoCB9IGVsc2UgaWYoaXNfbWV0aG9k
KCJTVUJTQ1JJQkUiKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGhhbmRsZV9zdWJzY3Jp
YmUoKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0X3JlbGVhc2UoKTsNCiDCoCDCoCDCoCDC
oCB9DQogwqAgwqAgwqAgwqAgZXhpdDsNCiMhZW5kaWYNCg0KIMKgIMKgIMKgIMKgICMgaWYgcHJl
c2VuY2UgZW5hYmxlZCwgdGhpcyBwYXJ0IHdpbGwgbm90IGJlIGV4ZWN1dGVkDQogwqAgwqAgwqAg
wqAgaWYgKGlzX21ldGhvZCgiUFVCTElTSCIpIHx8ICRyVT09JG51bGwpIHsNCiDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCBzbF9zZW5kX3JlcGx5KCI0MDQiLCAiTm90IGhlcmUiKTsNCiDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCBleGl0Ow0KIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCByZXR1
cm47DQp9DQoNCiMgSVAgYXV0aG9yaXphdGlvbiBhbmQgdXNlciBhdXRoZW50aWNhdGlvbg0Kcm91
dGVbQVVUSF0gew0KIyFpZmRlZiBXSVRIX0FVVEgNCg0KIyFpZmRlZiBXSVRIX0lQQVVUSA0KIMKg
IMKgIMKgIMKgIGlmKCghaXNfbWV0aG9kKCJSRUdJU1RFUiIpKSAmJiBhbGxvd19zb3VyY2VfYWRk
cmVzcygpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIyBzb3VyY2UgSVAgYWxsb3dlZA0K
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybjsNCiDCoCDCoCDCoCDCoCB9DQojIWVuZGlm
DQoNCiDCoCDCoCDCoCDCoCBpZiAoaXNfbWV0aG9kKCJSRUdJU1RFUiIpIHx8IGZyb21fdXJpPT1t
eXNlbGYpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAjIGF1dGhlbnRpY2F0ZSByZXF1ZXN0
cw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICghYXV0aF9jaGVjaygiJGZkIiwgInN1YnNj
cmliZXIiLCAiMSIpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYXV0
aF9jaGFsbGVuZ2UoIiRmZCIsICIwIik7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgZXhpdDsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9DQogwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgIyB1c2VyIGF1dGhlbnRpY2F0ZWQgLSByZW1vdmUgYXV0aCBoZWFkZXINCiDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCBpZighaXNfbWV0aG9kKCJSRUdJU1RFUnxQVUJMSVNIIikpDQog
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY29uc3VtZV9jcmVkZW50aWFscygp
Ow0KIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCAjIGlmIGNhbGxlciBpcyBub3QgbG9jYWwg
c3Vic2NyaWJlciwgdGhlbiBjaGVjayBpZiBpdCBjYWxscw0KIMKgIMKgIMKgIMKgICMgYSBsb2Nh
bCBkZXN0aW5hdGlvbiwgb3RoZXJ3aXNlIGRlbnksIG5vdCBhbiBvcGVuIHJlbGF5IGhlcmUNCiDC
oCDCoCDCoCDCoCBpZiAoZnJvbV91cmkhPW15c2VsZiAmJiB1cmkhPW15c2VsZikgew0KIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIHNsX3NlbmRfcmVwbHkoIjQwMyIsICJOb3QgcmVsYXlpbmciKTsN
CiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBleGl0Ow0KIMKgIMKgIMKgIMKgIH0NCg0KIyFlbHNl
DQoNCiDCoCDCoCDCoCDCoCAjIGF1dGhlbnRpY2F0aW9uIG5vdCBlbmFibGVkIC0gZG8gbm90IHJl
bGF5IGF0IGFsbCB0byBmb3JlaWduIA0KbmV0d29ya3MNCiDCoCDCoCDCoCDCoCBpZih1cmkhPW15
c2VsZikgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNsX3NlbmRfcmVwbHkoIjQwMyIsICJO
b3QgcmVsYXlpbmciKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBleGl0Ow0KIMKgIMKgIMKg
IMKgIH0NCg0KIyFlbmRpZg0KIMKgIMKgIMKgIMKgIHJldHVybjsNCn0NCg0KIyBDYWxsZXIgTkFU
IGRldGVjdGlvbg0Kcm91dGVbTkFUREVURUNUXSB7DQojIWlmZGVmIFdJVEhfTkFUDQogwqAgwqAg
wqAgwqAgaWYgKG5hdF91YWNfdGVzdCgiMTkiKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IGlmIChpc19tZXRob2QoIlJFR0lTVEVSIikpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCBmaXhfbmF0ZWRfcmVnaXN0ZXIoKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCB9IGVsc2Ugew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmKGlzX2Zp
cnN0X2hvcCgpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgc2V0X2NvbnRhY3RfYWxpYXMoKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCB9DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQ0KIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIHNldGZsYWcoRkxUX05BVFMpOw0KIMKgIMKgIMKgIMKgIH0NCiMhZW5kaWYNCiDCoCDC
oCDCoCDCoCByZXR1cm47DQp9DQoNCiMgUlRQIHJlbGF5aW5nIG1hbmFnZW1lbnQgYW5kIHNpZ25h
bGluZyB1cGRhdGVzIGZvciBOQVQgdHJhdmVyc2FsDQpyb3V0ZVtOQVRNQU5BR0VdIHsNCiMhaWZk
ZWYgV0lUSF9OQVQNCiDCoCDCoCDCoCDCoCBpZiAoaXNfcmVxdWVzdCgpKSB7DQogwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgaWYoaGFzX3RvdGFnKCkpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCBpZihjaGVja19yb3V0ZV9wYXJhbSgibmF0PXllcyIpKSB7DQogwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc2V0YmZsYWcoRkxCX05B
VEIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCB9DQogwqAgwqAgwqAgwqAgfQ0KIMKgIMKgIMKgIMKgIGlmICghKGlzZmxh
Z3NldChGTFRfTkFUUykgfHwgaXNiZmxhZ3NldChGTEJfTkFUQikpKSByZXR1cm47DQoNCiMhaWZk
ZWYgV0lUSF9SVFBFTkdJTkUNCiDCoCDCoCDCoCDCoCBpZihuYXRfdWFjX3Rlc3QoIjgiKSkgew0K
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJ0cGVuZ2luZV9tYW5hZ2UoIlNJUC1zb3VyY2UtYWRk
cmVzcyByZXBsYWNlLW9yaWdpbiANCnJlcGxhY2Utc2Vzc2lvbi1jb25uZWN0aW9uIik7DQogwqAg
wqAgwqAgwqAgfSBlbHNlIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBydHBlbmdpbmVfbWFu
YWdlKCJyZXBsYWNlLW9yaWdpbiANCnJlcGxhY2Utc2Vzc2lvbi1jb25uZWN0aW9uIik7DQogwqAg
wqAgwqAgwqAgfQ0KIyFlbHNlDQogwqAgwqAgwqAgwqAgaWYobmF0X3VhY190ZXN0KCI4IikpIHsN
CiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBydHBwcm94eV9tYW5hZ2UoImNvIik7DQogwqAgwqAg
wqAgwqAgfSBlbHNlIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBydHBwcm94eV9tYW5hZ2Uo
ImNvciIpOw0KIMKgIMKgIMKgIMKgIH0NCiMhZW5kaWYNCg0KIMKgIMKgIMKgIMKgIGlmIChpc19y
ZXF1ZXN0KCkpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoIWhhc190b3RhZygpKSB7
DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYodF9pc19icmFuY2hfcm91
dGUoKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IGFkZF9ycl9wYXJhbSgiO25hdD15ZXMiKTsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCB9DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQ0KIMKgIMKgIMKgIMKgIH0NCiDC
oCDCoCDCoCDCoCBpZiAoaXNfcmVwbHkoKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlm
KGlzYmZsYWdzZXQoRkxCX05BVEIpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgaWYoaXNfZmlyc3RfaG9wKCkpDQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgc2V0X2NvbnRhY3RfYWxpYXMoKTsNCiDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCB9DQogwqAgwqAgwqAgwqAgfQ0KDQogwqAgwqAgwqAgwqAgaWYoaXNiZmxhZ3NldChG
TEJfTkFUQikpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAjIG5vIGNvbm5lY3QgbWVzc2Fn
ZSBpbiBhIGRpYWxvZyBpbnZvbHZpbmcgTkFUIHRyYXZlcnNhbA0KIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIGlmIChpc19yZXF1ZXN0KCkpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCBpZihoYXNfdG90YWcoKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIHNldF9mb3J3YXJkX25vX2Nvbm5lY3QoKTsNCiDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQ0K
IMKgIMKgIMKgIMKgIH0NCiMhZW5kaWYNCiDCoCDCoCDCoCDCoCByZXR1cm47DQp9DQoNCiMgVVJJ
IHVwZGF0ZSBmb3IgZGlhbG9nIHJlcXVlc3RzDQpyb3V0ZVtETEdVUkldIHsNCiMhaWZkZWYgV0lU
SF9OQVQNCiDCoCDCoCDCoCDCoCBpZighaXNkc3R1cmlzZXQoKSkgew0KIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIGhhbmRsZV9ydXJpX2FsaWFzKCk7DQogwqAgwqAgwqAgwqAgfQ0KIyFlbmRpZg0K
IMKgIMKgIMKgIMKgIHJldHVybjsNCn0NCg0KIyBSb3V0aW5nIHRvIGZvcmVpZ24gZG9tYWlucw0K
cm91dGVbU0lQT1VUXSB7DQogwqAgwqAgwqAgwqAgaWYgKHVyaT09bXlzZWxmKSByZXR1cm47DQoN
CiDCoCDCoCDCoCDCoCBhcHBlbmRfaGYoIlAtSGludDogb3V0Ym91bmRcclxuIik7DQogwqAgwqAg
wqAgwqAgcm91dGUoUkVMQVkpOw0KIMKgIMKgIMKgIMKgIGV4aXQ7DQp9DQoNCiMgUFNUTiBHVyBy
b3V0aW5nDQpyb3V0ZVtQU1ROXSB7DQojIWlmZGVmIFdJVEhfUFNUTg0KIMKgIMKgIMKgIMKgICMg
Y2hlY2sgaWYgUFNUTiBHVyBJUCBpcyBkZWZpbmVkDQogwqAgwqAgwqAgwqAgaWYgKHN0cmVtcHR5
KCRzZWwoY2ZnX2dldC5wc3RuLmd3X2lwKSkpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB4
bG9nKCJTQ1JJUFQ6IFBTVE4gcm91dGluZyBlbmFibGVkIGJ1dCBwc3RuLmd3X2lwIG5vdCANCmRl
ZmluZWRcbiIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybjsNCiDCoCDCoCDCoCDC
oCB9DQoNCiDCoCDCoCDCoCDCoCAjIHJvdXRlIHRvIFBTVE4gZGlhbGVkIG51bWJlcnMgc3RhcnRp
bmcgd2l0aCAnKycgb3IgJzAwJw0KIMKgIMKgIMKgIMKgICPCoCDCoCDCoChpbnRlcm5hdGlvbmFs
IGZvcm1hdCkNCiDCoCDCoCDCoCDCoCAjIC0gdXBkYXRlIHRoZSBjb25kaXRpb24gdG8gbWF0Y2gg
eW91ciBkaWFsaW5nIHJ1bGVzIGZvciBQU1ROIA0Kcm91dGluZw0KIMKgIMKgIMKgIMKgIGlmKCEo
JHJVPX4iXihcK3wwMClbMS05XVswLTldezMsMjB9JCIpKSByZXR1cm47DQoNCiDCoCDCoCDCoCDC
oCAjIG9ubHkgbG9jYWwgdXNlcnMgYWxsb3dlZCB0byBjYWxsDQogwqAgwqAgwqAgwqAgaWYoZnJv
bV91cmkhPW15c2VsZikgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNsX3NlbmRfcmVwbHko
IjQwMyIsICJOb3QgQWxsb3dlZCIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGV4aXQ7DQog
wqAgwqAgwqAgwqAgfQ0KDQogwqAgwqAgwqAgwqAgIyBub3JtYWxpemUgdGFyZ2V0IG51bWJlciBm
b3IgcHN0biBnYXRld2F5DQogwqAgwqAgwqAgwqAgIyAtIGNvbnZlcnQgbGVhZGluZyAwMCB0byAr
DQogwqAgwqAgwqAgwqAgaWYgKHN0YXJ0c193aXRoKCIkclUiLCAiMDAiKSkgew0KIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIHN0cmlwKDIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHByZWZp
eCgiKyIpOw0KIMKgIMKgIMKgIMKgIH0NCg0KIMKgIMKgIMKgIMKgIGlmIChzdHJlbXB0eSgkc2Vs
KGNmZ19nZXQucHN0bi5nd19wb3J0KSkpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAkcnUg
PSAic2lwOiIgKyAkclUgKyAiQCIgKyAkc2VsKGNmZ19nZXQucHN0bi5nd19pcCk7DQogwqAgwqAg
wqAgwqAgfSBlbHNlIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAkcnUgPSAic2lwOiIgKyAk
clUgKyAiQCIgKyAkc2VsKGNmZ19nZXQucHN0bi5nd19pcCkgKyAiOiINCiDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCArICRzZWwoY2Zn
X2dldC5wc3RuLmd3X3BvcnQpOw0KIMKgIMKgIMKgIMKgIH0NCg0KIMKgIMKgIMKgIMKgIHJvdXRl
KFJFTEFZKTsNCiDCoCDCoCDCoCDCoCBleGl0Ow0KIyFlbmRpZg0KDQogwqAgwqAgwqAgwqAgcmV0
dXJuOw0KfQ0KDQojIEpTT05SUEMgb3ZlciBIVFRQKFMpIHJvdXRpbmcNCiMhaWZkZWYgV0lUSF9K
U09OUlBDDQpldmVudF9yb3V0ZVt4aHR0cDpyZXF1ZXN0XSB7DQogwqAgwqAgwqAgwqAgc2V0X3Jl
cGx5X2Nsb3NlKCk7DQogwqAgwqAgwqAgwqAgc2V0X3JlcGx5X25vX2Nvbm5lY3QoKTsNCiDCoCDC
oCDCoCDCoCBpZihzcmNfaXAhPTEyNy4wLjAuMSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IHhodHRwX3JlcGx5KCI0MDMiLCAiRm9yYmlkZGVuIiwgInRleHQvaHRtbCIsDQogwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIjxodG1sPjxib2R5Pk5vdCBh
bGxvd2VkIGZyb20gDQokc2k8L2JvZHk+PC9odG1sPiIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIGV4aXQ7DQogwqAgwqAgwqAgwqAgfQ0KIMKgIMKgIMKgIMKgIGlmICgkaHUgPX4gIl4vUlBD
Iikgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGpzb25ycGNfZGlzcGF0Y2goKTsNCiDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCBleGl0Ow0KIMKgIMKgIMKgIMKgIH0NCg0KIMKgIMKgIMKgIMKg
IHhodHRwX3JlcGx5KCIyMDAiLCAiT0siLCAidGV4dC9odG1sIiwNCiDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAiPGh0bWw+PGJvZHk+V3JvbmcgVVJMICRo
dTwvYm9keT48L2h0bWw+Iik7DQogwqAgwqAgZXhpdDsNCn0NCiMhZW5kaWYNCg0KIyBSb3V0aW5n
IHRvIHZvaWNlbWFpbCBzZXJ2ZXINCnJvdXRlW1RPVk9JQ0VNQUlMXSB7DQojIWlmZGVmIFdJVEhf
Vk9JQ0VNQUlMDQogwqAgwqAgwqAgwqAgaWYoIWlzX21ldGhvZCgiSU5WSVRFfFNVQlNDUklCRSIp
KSByZXR1cm47DQoNCiDCoCDCoCDCoCDCoCAjIGNoZWNrIGlmIFZvaWNlTWFpbCBzZXJ2ZXIgSVAg
aXMgZGVmaW5lZA0KIMKgIMKgIMKgIMKgIGlmIChzdHJlbXB0eSgkc2VsKGNmZ19nZXQudm9pY2Vt
YWlsLnNydl9pcCkpKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgeGxvZygiU0NSSVBUOiBW
b2ljZU1haWwgcm91dGluZyBlbmFibGVkIGJ1dCBJUCBub3QgDQpkZWZpbmVkXG4iKTsNCiDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm47DQogwqAgwqAgwqAgwqAgfQ0KIMKgIMKgIMKgIMKg
IGlmKGlzX21ldGhvZCgiSU5WSVRFIikpIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZigk
YXZwKG9leHRlbik9PSRudWxsKSByZXR1cm47DQoNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAk
cnUgPSAic2lwOiIgKyAkYXZwKG9leHRlbikgKyAiQCIgKyANCiRzZWwoY2ZnX2dldC52b2ljZW1h
aWwuc3J2X2lwKQ0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgICsgIjoiICsgJHNlbChjZmdfZ2V0LnZvaWNlbWFpbC5zcnZfcG9ydCk7DQogwqAgwqAgwqAg
wqAgfSBlbHNlIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZigkclU9PSRudWxsKSByZXR1
cm47DQoNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAkcnUgPSAic2lwOiIgKyAkclUgKyAiQCIg
KyAkc2VsKGNmZ19nZXQudm9pY2VtYWlsLnNydl9pcCkNCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCArICI6IiArICRzZWwoY2ZnX2dldC52b2ljZW1haWwu
c3J2X3BvcnQpOw0KIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDCoCByb3V0ZShSRUxBWSk7DQog
wqAgwqAgwqAgwqAgZXhpdDsNCiMhZW5kaWYNCg0KIMKgIMKgIMKgIMKgIHJldHVybjsNCn0NCg0K
IyBNYW5hZ2Ugb3V0Z29pbmcgYnJhbmNoZXMNCmJyYW5jaF9yb3V0ZVtNQU5BR0VfQlJBTkNIXSB7
DQogwqAgwqAgwqAgwqAgeGRiZygibmV3IGJyYW5jaCBbJFRfYnJhbmNoX2lkeF0gdG8gJHJ1XG4i
KTsNCiDCoCDCoCDCoCDCoCByb3V0ZShOQVRNQU5BR0UpOw0KIMKgIMKgIMKgIMKgIHJldHVybjsN
Cn0NCg0KIyBNYW5hZ2UgaW5jb21pbmcgcmVwbGllcw0KcmVwbHlfcm91dGUgew0KIMKgIMKgIMKg
IMKgIGlmKCFzYW5pdHlfY2hlY2soIjE3NjA0IiwgIjYiKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIHhsb2coIk1hbGZvcm1lZCBTSVAgcmVzcG9uc2UgZnJvbSAkc2k6JHNwXG4iKTsNCiDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkcm9wOw0KIMKgIMKgIMKgIMKgIH0NCiDCoCDCoCDCoCDC
oCByZXR1cm47DQp9DQoNCiMgTWFuYWdlIGluY29taW5nIHJlcGxpZXMgaW4gdHJhbnNhY3Rpb24g
Y29udGV4dA0Kb25yZXBseV9yb3V0ZVtNQU5BR0VfUkVQTFldIHsNCiDCoCDCoCDCoCDCoCB4ZGJn
KCJpbmNvbWluZyByZXBseVxuIik7DQogwqAgwqAgwqAgwqAgaWYoc3RhdHVzPX4iWzEyXVswLTld
WzAtOV0iKSB7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcm91dGUoTkFUTUFOQUdFKTsNCiDC
oCDCoCDCoCDCoCB9DQogwqAgwqAgwqAgwqAgcmV0dXJuOw0KfQ0KDQojIE1hbmFnZSBmYWlsdXJl
IHJvdXRpbmcgY2FzZXMNCmZhaWx1cmVfcm91dGVbTUFOQUdFX0ZBSUxVUkVdIHsNCiDCoCDCoCDC
oCDCoCByb3V0ZShOQVRNQU5BR0UpOw0KDQogwqAgwqAgwqAgwqAgaWYgKHRfaXNfY2FuY2VsZWQo
KSkgZXhpdDsNCg0KIyFpZmRlZiBXSVRIX0JMT0NLM1hYDQogwqAgwqAgwqAgwqAgIyBibG9jayBj
YWxsIHJlZGlyZWN0IGJhc2VkIG9uIDN4eCByZXBsaWVzLg0KIMKgIMKgIMKgIMKgIGlmICh0X2No
ZWNrX3N0YXR1cygiM1swLTldWzAtOV0iKSkgew0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRf
cmVwbHkoIjQwNCIsICJOb3QgZm91bmQgQiIpOw0KIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGV4
aXQ7DQogwqAgwqAgwqAgwqAgfQ0KIyFlbmRpZg0KDQojIWlmZGVmIFdJVEhfQkxPQ0s0MDE0MDcN
CiDCoCDCoCDCoCDCoCAjIGJsb2NrIGNhbGwgcmVkaXJlY3QgYmFzZWQgb24gNDAxLCA0MDcgcmVw
bGllcy4NCiDCoCDCoCDCoCDCoCBpZiAodF9jaGVja19zdGF0dXMoIjQwMXw0MDciKSkgew0KIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRfcmVwbHkoIjQwNCIsICJOb3QgZm91bmQgQyIpOw0KIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGV4aXQ7DQogwqAgwqAgwqAgwqAgfQ0KIyFlbmRpZg0KDQoj
IWlmZGVmIFdJVEhfVk9JQ0VNQUlMDQogwqAgwqAgwqAgwqAgIyBzZXJpYWwgZm9ya2luZw0KIMKg
IMKgIMKgIMKgICMgLSByb3V0ZSB0byB2b2ljZW1haWwgb24gYnVzeSBvciBubyBhbnN3ZXIgKHRp
bWVvdXQpDQogwqAgwqAgwqAgwqAgaWYgKHRfY2hlY2tfc3RhdHVzKCI0ODZ8NDA4IikpIHsNCiDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAkZHUgPSAkbnVsbDsNCiDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCByb3V0ZShUT1ZPSUNFTUFJTCk7DQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXhpdDsN
CiDCoCDCoCDCoCDCoCB9DQojIWVuZGlmDQogwqAgwqAgwqAgwqAgcmV0dXJuOw0KfQ0KDQpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkth
bWFpbGlvIC0gVXNlcnMgTWFpbGluZyBMaXN0IC0gTm9uIENvbW1lcmNpYWwgRGlzY3Vzc2lvbnMg
LS0gc3ItdXNlcnNAbGlzdHMua2FtYWlsaW8ub3JnClRvIHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1h
aWwgdG8gc3ItdXNlcnMtbGVhdmVAbGlzdHMua2FtYWlsaW8ub3JnCkltcG9ydGFudDoga2VlcCB0
aGUgbWFpbGluZyBsaXN0IGluIHRoZSByZWNpcGllbnRzLCBkbyBub3QgcmVwbHkgb25seSB0byB0
aGUgc2VuZGVyIQo=