X-MimeOLE: Produced By Microsoft Exchange V6.5
Received: by onstor-exch02.onstor.net 
	id <01C7383D.171D5828@onstor-exch02.onstor.net>; Sun, 14 Jan 2007 16:35:43 -0800
MIME-Version: 1.0
Content-Type: application/octet-stream;
	name="cmd_upgrade.c"
Content-Transfer-Encoding: base64
Content-Description: cmd_upgrade.c
Content-Disposition: attachment;
	filename="cmd_upgrade.c"
Content-class: urn:content-classes:message
Subject: My version of cmd_upgrade
Date: Sun, 14 Jan 2007 16:35:43 -0800
Message-ID: <BB375AF679D4A34E9CA8DFA650E2B04E0A9475@onstor-exch02.onstor.net>
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
Thread-Topic: My version of cmd_upgrade
thread-index: Acc4PRcBSUoP5DvrTw6bczHFHH0I9A==
From: "Larry Scheer" <larry.scheer@onstor.com>
To: "Andy Sharp" <andy.sharp@onstor.com>

Ci8qIHZpOnRzPTQKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKgogKiBOYW1lOiBjbWRfdXBncmFkZQogKgogKiBSQ1M6
ICAkSWQkCiAqCiAqIENvcHlyaWdodCAoQykgMjAwMSwgQWdpbGUgU3RvcmFnZSwgSW5jLgogKgog
KiBEZXNjcmlwdGlvbjoKICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBE
YXRlIENyZWF0ZWQ6IDA0LzI5LzIwMDIKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KCi8qIFNvbWUgcGFydHMg
YXJlOiAqLwovKgogKiBDb3B5cmlnaHQgKGMpIDE5ODcsIDE5OTMKICogIFRoZSBSZWdlbnRzIG9m
IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgog
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAz
LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m
IHRoaXMgc29mdHdhcmUKICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk
Z2VtZW50OgogKiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0
aGUgVW5pdmVyc2l0eSBvZgogKiAgQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmli
dXRvcnMuCiAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCiAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQogKiAgICB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCiAqIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQog
KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAogKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwogKiBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKICog
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQogKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAq
IFNVQ0ggREFNQUdFLgogKi8KCgoKI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8cHdk
Lmg+CiNpbmNsdWRlIDxyZWFkbGluZS9oaXN0b3J5Lmg+CiNpbmNsdWRlIDxncnAuaD4KI2luY2x1
ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3lzL21tYW4uaD4KI2luY2x1ZGUgPHN5cy9zdGF0Lmg+
CiNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CgojaW5jbHVkZSAiemVicmEuaCIKI2luY2x1ZGUgImNv
bW1hbmQuaCIKI2luY2x1ZGUgImxvZy5oIgojaW5jbHVkZSAidnR5c2guaCIKI2luY2x1ZGUgIm1l
bW9yeS5oIgoKI2luY2x1ZGUgIm5meHNoLmgiCgojaW5jbHVkZSAidmVjdG9yLmgiCgojaW5jbHVk
ZSA8ZGlyZW50Lmg+CgojaW5jbHVkZSAibmZ4LWRlZnMuaCIKI2luY2x1ZGUgIi4uL3NtLWNoYXNz
aXMvY20tYXBpLmgiCiNpbmNsdWRlICIuLi9zbS1hbnBzc2MvYW5wc3NjLWFwaS5oIgojaW5jbHVk
ZSAiLi4vc20tb3B0L29wdC1hcGkuaCIKI2luY2x1ZGUgIi4uL3NtLWVsb2cvZWxvZy1hcGkuaCIK
I2luY2x1ZGUgIi4uL3NzYy1uZnhuaXMvbmZ4bmlzLWFwaS5oIgojaW5jbHVkZSAiLi4vc3NjLW5m
eG5pcy9uZnhhdXRoLWFwaS5oIgojaW5jbHVkZSAiLi4vc20taXBtL2lwbS5oIgoKI2luY2x1ZGUg
PGZzdGFiLmg+CgojZGVmaW5lIEFMTE9XX1BST01fVVBHUkFERV9GQUlMIDEKCmV4dGVybiBpbnQg
bW91bnRfc2Vjb25kYXJ5KHZlY3RvciB2KTsKZXh0ZXJuIHZlY3RvciBtYWtlX3NlY29uZGFyeV9m
c3RhYnModm9pZCk7CmV4dGVybiB2b2lkIHVfbW91bnRfc2Vjb25kYXJ5KHZlY3RvciB2KTsKZXh0
ZXJuIHZvaWQgZnJlZV9mc3RhYl92ZWN0b3IodmVjdG9yIHYpOwpleHRlcm4gdm9pZCBkb19jb3B5
X2ZpbGVzKGNoYXIgKmZyb21kaXIsIGNoYXIgKnRvZGlyLCBjaGFyICpmaWxlcyk7Ci8vc3RhdGlj
IGludCBpc19mcF9hZGRyKGNoYXIgKnBhdGNoX2xvY2F0aW9uKTsKCnN0cnVjdCBkZXNjcmlwdG9y
CnsKICAgIGNoYXIgKm5hbWU7CiAgICBjaGFyICp0eXBlOwogICAgY2hhciAqYm9hcmQ7CiAgICBj
aGFyICpwYXRjaF9uYW1lOwp9OwoKCnN0cnVjdCBkZXNjcmlwdG9yIGRlZmF1bHRfZGVzY3JpcHRv
ciA9IHsKICAgIE5VTEwsCiAgICAiYXBwIiwKICAgICJzc2MiLAogICAgTlVMTAp9OwoKCmNoYXIg
KmJvYXJkX3R5cGVzW10gPSB7CiAgICAic3AiLAogICAgInR4cngiLAogICAgImZwIiwKICAgICJz
c2MiLAogICAgInRvc2hpYmEiLAogICAgTlVMTAp9OwoKCmNoYXIgKmZpbGVfdHlwZXNbXSA9IHsK
ICAgICJwcm9tIiwKICAgICJiaWdwcm9tIiwKICAgICJydW50aW1lIiwKICAgICJkYWVtb24iLAog
ICAgImFwcCIsCiAgICAiZGVzY3IiLAogICAgInZlcnNpb24iLAogICAgImtlcm5lbCIsCiAgICAi
Y29uZmlnIiwKICAgICJzZXJ2aWNlcyIsCiAgICBOVUxMCn07CgpjaGFyICpmcF9wb3J0c1tdID0g
ewogICAgImZwMS4wIiwKICAgICJmcDEuMSIsCiAgICAiZnAxLjIiLAogICAgImZwMS4zIiwKICAg
IE5VTEwKfTsKCiNkZWZpbmUgVElNRV9CVUYgMjcKc3RhdGljIGNoYXIgKm1vdW50X2RpciA9ICIv
bW50IjsKc3RhdGljIGNoYXIgKnBhdGNoX2Rpcl9uYW1lID0gTlVMTDsKc3RhdGljIGNoYXIgKmxv
Y2FsX2Rlc3QgPSAiL21udDIiOwpzdGF0aWMgY2hhciAqbWFuaWZlc3QgPSAiL3Vzci9sb2NhbC9h
Z2lsZS9jb25mLyouYm9tIjsKc3RhdGljIGNoYXIgKmRlc2NyaXB0b3JfZmlsZSA9ICIvdXNyL2xv
Y2FsL2FnaWxlL2V0Yy9kZXNjciI7CnN0YXRpYyBjaGFyICptdHJlZV9maWxlX25hbWUgPSAiL2V0
Yy9tdHJlZS80LjRCU0QuZGlzdCI7CnN0YXRpYyBjaGFyIGZ0cHByZWZpeFtdID0gImZ0cDovLyI7
CnN0YXRpYyBjaGFyICpwYXRjaF9sb2NhdGlvbjsKc3RhdGljIGludCB1cGdyYWRlX3NlY29uZGFy
eTsKc3RhdGljIGludCBjb21wYXJlX3NlY29uZGFyeTsKc3RhdGljIGludCBmb3JjZV91cGdyYWRl
OwpzdGF0aWMgY2hhciAqc3lzX3VwZ3JhZGVfbG9nZmlsZSA9ICIvdmFyL2xvZy9zeXNfdXBncmFk
ZS5sb2ciOwpzdGF0aWMgRklMRSAqc3lzX3VwZ3JhZGUgPSBOVUxMOwpzdGF0aWMgY2hhciBzeXNf
bG9nX3N0cltNQVhQQVRITEVOICsgMV07CnN0YXRpYyBjaGFyIHN5c19sb2dfdGltZVtUSU1FX0JV
Rl07CgpleHRlcm4gY2hhciAqc2Vjb25kYXJ5X21vdW50OwpleHRlcm4gY2hhciAqc3lzX2NvbmZp
Z19maWxlczsKCnN0cnVjdCB2ZXJzaW9uCnsKICAgIGludCBtYWpvcjsKICAgIGludCBtaW5vcjsK
ICAgIGludCBtYWludGVuYW5jZTsKICAgIGludCBwYXRjaDsKICAgIGNoYXIgcGxhdGZvcm07Cn07
CgoKc3RhdGljIHZvaWQgcHJpbnRfdmVjdG9yKHZlY3RvciB2LCB2b2lkICgqcHJpbnRfZm4pKHZv
aWQqKSkgX19hdHRyaWJ1dGUoKHVudXNlZCkpOwpzdGF0aWMgdm9pZCBwcmludF9kZXNjcmlwdG9y
X3ZlY3Rvcih2ZWN0b3IgdikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOwpzdGF0aWMgdm9pZCBw
cmludF9zdHJpbmdfdmVjdG9yKHZlY3RvciB2KSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7Cmlu
dCBzbGVlcF9hY2N1cmF0ZWx5KGludCBzZWNzKTsKc3RhdGljIHZvaWQgbXlfcHJpbnQoY2hhciAq
c3RyKTsKc3RhdGljIGNoYXIgKmdldF90aW1lKCk7CgoKdHlwZWRlZiBpbnQgKCp1cGdyYWRlX21l
dGhvZF90KSh2ZWN0b3IgZGVzY3JpcHRvcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmVjdG9yIGZpbGVzLCBjaGFyICooKnRydWVuYW1lX2Z1bmMpKGNoYXIgKiksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbXRyZWVfZmlsZXMpOwoKdHlwZWRlZiBjaGFy
KiAoKnRydWVuYW1lX2Z1bmNfdCkoY2hhciAqZmlsZSk7Cgp0cnVlbmFtZV9mdW5jX3QgY3VyX3Ry
dWVuYW1lX2Z1bmM7CgpleHRlcm4gaW50IG5vaXN5X21ha2VfYWxsZnNfd3JpdGFibGUodm9pZCk7
CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBmaW5kX3N0cigpCiAqCiAqIERlc2NyaXB0aW9uOiBG
aW5kIGEgc3RyaW5nIGluIGFycmF5IG9mIHN0cmluZ3MKICoKICogQ3JlYXRlZCBieTogIE1heGlt
IEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
ICovCnN0YXRpYyBjaGFyICoKZmluZF9zdHIoY2hhciAqKmFycmF5LCBjaGFyICpzdHIpCnsKICAg
IGNoYXIgKipwdHI7CiAgICBmb3IgKHB0ciA9ICZhcnJheVswXTsgKnB0ciAhPSBOVUxMICYmIHN0
cmNtcCgqcHRyLCBzdHIpOyArK3B0cikgewogICAgICAgIC8qICovCiAgICB9CiAgICByZXR1cm4g
KnB0cjsKfQoKCi8qIFV0aWxpdHkgcm91dGluZSBmb3IgY3VycmVudCB0aW1lIHByaW50aW5nLiAq
LwpzdGF0aWMgY2hhciAqCmdldF90aW1lICgpCnsKICBpbnQgcmV0OwogIHRpbWVfdCBjbG9jazsK
ICBzdHJ1Y3QgdG0gKnRtOwogIHRpbWUgKCZjbG9jayk7CiAgdG0gPSAoc3RydWN0IHRtKilsb2Nh
bHRpbWUgKCZjbG9jayk7CgogIHJldCA9IHN0cmZ0aW1lIChzeXNfbG9nX3RpbWUsIFRJTUVfQlVG
LCAiJVkvJW0vJWQgJUg6JU06JVMiLCB0bSk7CiAgaWYgKHJldCA9PSAwKSB7CiAgICBzcHJpbnRm
KHN5c19sb2dfdGltZSwiRXJyb3IgZ2V0dGluZyBzeXN0ZW0gdGltZSIpOwogIH0KICAgcmV0dXJu
IHN5c19sb2dfdGltZTsKfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgbXlfcHJpbnQoKQogKgog
KiBEZXNjcmlwdGlvbjogcHJpbnQgdG8gc3Rkb3V0IGFuZCBmaWxlCiAqCiAqIENyZWF0ZWQgYnk6
ICBWaWthcyBTYWluaQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA3LzIwLzA1CiAqCiAqLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KICovCnN0YXRpYyB2b2lkCm15X3ByaW50KGNoYXIgKnN0cikKewogICAgcHJpbnRmKCIlcyIs
c3RyKTsgCiAgICBmZmx1c2goc3Rkb3V0KTsKICAgIGlmIChzeXNfdXBncmFkZSkgewogICAgICAg
IGZwcmludGYoc3lzX3VwZ3JhZGUsIiVzIixzdHIpOyAKICAgICAgICBmZmx1c2goc3lzX3VwZ3Jh
ZGUpOwogICAgfQp9CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIHZlY3Rvcl9mcmVlX2FsbCgpCiAq
CiAqIERlc2NyaXB0aW9uOiBGcmVlIHRoZSB2ZWN0b3IgYW5kIGNhbGwgZnJlZSgpIGZvciBhbGwg
dGhlIGVsZW1lbnRzCiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0
ZSBDcmVhdGVkOiAgICAwNS8xNC8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgdm9pZAp2ZWN0
b3JfZnJlZV9hbGwodmVjdG9yIHYpCnsKICAgIGludCBpOwoKICAgIGlmICh2ICE9IE5VTEwpIHsK
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmVjdG9yX21heCh2KTsgKytpKSB7CiAgICAgICAgICAg
IHpmcmVlKE1UWVBFX1ZFQ1RPUiwgdmVjdG9yX2xvb2t1cF9pbmRleCh2LCBpKSk7CiAgICAgICAg
fQogICAgICAgIHZlY3Rvcl9mcmVlKHYpOwogICAgfQp9CgoKCi8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6
ICAgcmVhZF9kZXNjcmlwdG9yKCkKICoKICogRGVzY3JpcHRpb246IFJlYWQgdGhlIGRlc2NyaXB0
b3IgZmlsZSBhbmQgcmV0dXJuIHRoZSB2ZWN0b3Igb2YKICogc3RydWN0IGRlc2NyaXB0b3IuCiAq
CiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAw
NS8xNC8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgdmVjdG9yCnJlYWRfZGVzY3JpcHRvcihj
b25zdCBjaGFyICpmaWxlbmFtZSkKewogICAgc3RydWN0IGRlc2NyaXB0b3IgKmRlc2NyOwogICAg
Y2hhciBzdHJbMzAwXSwgdHlwZVsxMDBdLCBib2FyZFsxMDBdLCBuYW1lWzEwMF07CiAgICBpbnQg
cmM7CiAgICBGSUxFICpmID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CiAgICB2ZWN0b3IgdiA9IE5V
TEw7CgogICAgaWYgKGYgIT0gTlVMTCkgewogICAgICAgIHYgPSB2ZWN0b3JfaW5pdCgyMDApOwog
ICAgICAgIHdoaWxlICghZmVvZihmKSkgewogICAgICAgICAgICBpZiAoZmdldHMoc3RyLCAzMDAs
IGYpICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgIGRlc2NyID0gem1hbGxvYyhNVFlQRV9WRUNU
T1IsIHNpemVvZihzdHJ1Y3QgZGVzY3JpcHRvcikpOwogICAgICAgICAgICAgICAgcmMgPSBzc2Nh
bmYoc3RyLCAiJXMgJXMgJXNcbiIsIHR5cGUsIGJvYXJkLCBuYW1lKTsKICAgICAgICAgICAgICAg
IGlmIChyYyAhPSAzKSB7CiAgICAgICAgICAgICAgICAgICAgcmMgPSBzc2NhbmYoc3RyLCAiJXMg
JXMgJXNcbiIsIHR5cGUsIGJvYXJkLCBuYW1lKTsKICAgICAgICAgICAgICAgICAgICBFX0xPRyhj
bGFzc18xLCBub3RpY2VfcywgZWVlX2dldEFwcGxpY2F0aW9uSWQoIm5meHNoIiksIAogICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsICgic3NjYW5mIHJldHJ5IGR1cmluZyBzeXN0ZW0g
dXBncmFkZVxuIikpOwogICAgICAgICAgICAgICAgICAgaWYgKHN5c191cGdyYWRlKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgZnByaW50ZihzeXNfdXBncmFkZSwic3NjYW5mIHJldHJ5IGR1cmlu
ZyBzeXN0ZW0gdXBncmFkZVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN5c191
cGdyYWRlKTsKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIGFzc2VydChyYyA9PSAzKTsKICAgICAgICAgICAgICAgIGRlc2NyLT5uYW1lID0genN0
cmR1cChNVFlQRV9WRUNUT1IsIG5hbWUpOwogICAgICAgICAgICAgICAgZGVzY3ItPnBhdGNoX25h
bWUgPSBOVUxMOwogICAgICAgICAgICAgICAgZGVzY3ItPnR5cGUgPSBmaW5kX3N0cihmaWxlX3R5
cGVzLCB0eXBlKTsKICAgICAgICAgICAgICAgIGFzc2VydChkZXNjci0+dHlwZSAhPSBOVUxMKTsK
ICAgICAgICAgICAgICAgIGRlc2NyLT5ib2FyZCA9IGZpbmRfc3RyKGJvYXJkX3R5cGVzLCBib2Fy
ZCk7CiAgICAgICAgICAgICAgICBhc3NlcnQoZGVzY3ItPmJvYXJkICE9IE5VTEwpOwogICAgICAg
ICAgICAgICAgdmVjdG9yX3B1c2godiwgZGVzY3IpOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICAgIGZjbG9zZShmKTsKICAgIH0KICAgIHJldHVybiB2Owp9CgoKLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBO
YW1lIDogICBwcmludC12ZWN0b3IoKQogKgogKiBEZXNjcmlwdGlvbjogcHJpbnQgdGhlIHZlY3Rv
ciBlbGVtZW50cyB1c2luZyBmdW5jdGlvbiBwcmludF9mbgogKgogKiBDcmVhdGVkIGJ5OiAgTWF4
aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDUvMTQvMDIKICoKICotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogKi8Kc3RhdGljIHZvaWQKcHJpbnRfdmVjdG9yKHZlY3RvciB2LCB2b2lkICgqcHJpbnRfZm4p
KHZvaWQgKikpCnsKICAgIGludCBpOwogICAgY2hhciAqZmlsZW5hbWU7CiAgICBmb3IgKGkgPSAw
OyBpIDwgdmVjdG9yX21heCh2KTsgKytpKSB7Ci8vICAgICAgICAoKnByaW50X2ZuKSh2ZWN0b3Jf
bG9va3VwX2luZGV4KHYsIGkpKTsKICAgICAgICBmaWxlbmFtZSA9ICh2ZWN0b3JfbG9va3VwX2lu
ZGV4KHYsIGkpKTsKICAgICAgICBteV9wcmludChmaWxlbmFtZSk7CiAgICAgICAgbXlfcHJpbnQo
IlxuIik7CiAgICB9Cn0KCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIHByaW50X2Rlc2NyaXB0b3Io
KQogKgogKiBEZXNjcmlwdGlvbjogcHJpbnQgZnVuY3Rpb24gZm9yIGRlc2NyaXB0b3JzCiAqCiAq
IENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNS8x
NC8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgdm9pZApwcmludF9kZXNjcmlwdG9yKHZvaWQg
KnZkKQp7CiAgICBzdHJ1Y3QgZGVzY3JpcHRvciAqZCA9IHZkOwogICAgc3ByaW50ZihzeXNfbG9n
X3N0ciwiJXMgJXMgJXMgJXNcbiIsIGQtPnR5cGUsIGQtPmJvYXJkLCBkLT5uYW1lLAogICAgICAg
ICAgIGQtPnBhdGNoX25hbWUgPyBkLT5wYXRjaF9uYW1lIDogIihudWxsKSIpOwogICAgbXlfcHJp
bnQoc3lzX2xvZ19zdHIpOwp9CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBwcmludF9kZXNjcmlw
dG9yX3ZlY3RvcigpCiAqCiAqIERlc2NyaXB0aW9uOiBwcmludCB2ZWN0b3Igb2Ygc3RydWN0IGRl
c2NyaXB0b3IKICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENy
ZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyB2b2lkCnByaW50X2Rl
c2NyaXB0b3JfdmVjdG9yKHZlY3RvciB2KSAKewogICAgcHJpbnRfdmVjdG9yKHYsIHByaW50X2Rl
c2NyaXB0b3IpOwp9CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBwcmludF9zdHJpbmdfdmVjdG9y
KCkKICoKICogRGVzY3JpcHRpb246IHByaW50IHZlY3RvciBvZiBzdHJpbmdzCiAqCiAqIENyZWF0
ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNS8xNC8wMgog
KgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgdm9pZApwcmludF9zdHJpbmdfdmVjdG9yKHZlY3RvciB2
KQp7CiAgICBwcmludF92ZWN0b3IodiwgKHZvaWQgKCopKHZvaWQgKikpcHV0cyk7Cn0KCgovKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAqIE5hbWUgOiAgIHBhcnNlX3ZlcnNpb25fc3RyKCkKICoKICogRGVzY3JpcHRpb246
IHBhcnNlIGEgc3RyaW5nIGludG8gc3RydWN0IHZlcnNpb24KICoKICogQ3JlYXRlZCBieTogIE1h
eGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KICovCnN0YXRpYyBpbnQKcGFyc2VfdmVyc2lvbl9zdHIoY2hhciAqc3RyLCBzdHJ1Y3QgdmVy
c2lvbiAqdmVyc2lvbikKewogICAgaW50IHJjID0gc3NjYW5mKHN0ciwgIiVkLiVkLiVkLiVkJWMi
LAogICAgICAgICAgICAgICAgICAgICZ2ZXJzaW9uLT5tYWpvciwgCiAgICAgICAgICAgICAgICAg
ICAgJnZlcnNpb24tPm1pbm9yLCAKICAgICAgICAgICAgICAgICAgICAmdmVyc2lvbi0+bWFpbnRl
bmFuY2UsIAogICAgICAgICAgICAgICAgICAgICZ2ZXJzaW9uLT5wYXRjaCwKICAgICAgICAgICAg
ICAgICAgICAmdmVyc2lvbi0+cGxhdGZvcm0pOwogICAgaWYgKChyYyAhPSA0KSAmJiAocmMgIT0g
NSkpIHsKICAgICAgICBzcHJpbnRmKHN5c19sb2dfc3RyLCJpbnZhbGlkIHZlcnNpb24gc3RyaW5n
ICVzXG4iLCBzdHIpOwogICAgICAgIG15X3ByaW50KHN5c19sb2dfc3RyKTsKICAgICAgICByYyA9
IENNRF9FUlJfRkFJTEVEOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgaWYgKHJjID09IDQpIHsK
ICAgICAgICAgICAgdmVyc2lvbi0+cGxhdGZvcm0gPSAnPyc7CiAgICAgICAgfQogICAgICAgIHJj
ID0gQ01EX1NVQ0NFU1M7CiAgICB9CiAgICByZXR1cm4gcmM7Cn0KCgovKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5h
bWUgOiAgIGNvbXBhcmVfdmVyc2lvbnMoKQogKgogKiBEZXNjcmlwdGlvbjogY29tcGFyZSB0d28g
dmVyc2lvbnMsIHJldHVybiB2YWx1ZSBpcyA8IDAgaWYgdGhlIGZpcnN0IGlzCiAqIGxvd2VyLCAw
IGlmIGVxdWFsLCA+IDAgaWYgdGhlIGZpcnN0IGlzIGdyZWF0ZXIKICoKICogQ3JlYXRlZCBieTog
IE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KICovCnN0YXRpYyBpbnQKY29tcGFyZV92ZXJzaW9ucyhzdHJ1Y3QgdmVyc2lvbiAqdjEs
IHN0cnVjdCB2ZXJzaW9uICp2MikKewogICAgaW50IG1ham9yX2RpZmYsIG1pbm9yX2RpZmYsIG1h
aW50ZW5hbmNlX2RpZmY7CgogICAgaWYgKChtYWpvcl9kaWZmID0gdjEtPm1ham9yIC0gdjItPm1h
am9yKSAhPSAwKQogICAgICAgIHJldHVybiBtYWpvcl9kaWZmOwogICAgZWxzZSBpZiAoKG1pbm9y
X2RpZmYgPSB2MS0+bWlub3IgLSB2Mi0+bWlub3IpICE9IDApCiAgICAgICAgcmV0dXJuIG1pbm9y
X2RpZmY7CiAgICBlbHNlIGlmICgobWFpbnRlbmFuY2VfZGlmZiA9IHYxLT5tYWludGVuYW5jZSAt
IHYyLT5tYWludGVuYW5jZSkgIT0gMCkKICAgICAgICByZXR1cm4gbWFpbnRlbmFuY2VfZGlmZjsK
ICAgIGVsc2UgcmV0dXJuIHYxLT5wYXRjaCAtIHYyLT5wYXRjaDsKfQoKCi8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICog
TmFtZSA6ICAgY2hlY2tfdmVyc2lvbnNfY29tcGF0aWJsZSgpCiAqCiAqIERlc2NyaXB0aW9uOiBj
b21wYXJlIHR3byB2ZXJzaW9ucyB0byBzZWUgaWYgdGhleSBhcmUgY29tcGF0aWJsZSBhbmQgd2Ug
Y2FuCiAqIHVwZ3JhZGUgZnJvbSB0aGUgZmlyc3QgdG8gdGhlIHNlY29uZC4KICoKICotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogKi8Kc3RhdGljIGludApjaGVja192ZXJzaW9uc19jb21wYXRpYmxlKHN0cnVjdCB2ZXJzaW9u
ICpjdXJyVmVyLCBzdHJ1Y3QgdmVyc2lvbiAqdXBncmFkZVZlcikKewogICAgaW50IHJjID0gQ01E
X1NVQ0NFU1M7CgogICAgLyogV2UgY2Fubm90IHVwZ3JhZGUgZnJvbSBSMi4wLnggdG8gUjEuMy4y
IG9yIGdyZWF0ZXIuICovCiAgICBpZiAoKGN1cnJWZXItPm1ham9yID09IDIpICYmIChjdXJyVmVy
LT5taW5vciA9PSAwKSkgewogICAgICAgIGlmICgodXBncmFkZVZlci0+bWFqb3IgPT0gMSkgJiYg
KHVwZ3JhZGVWZXItPm1pbm9yID09IDMpICYmCiAgICAgICAgICAgICh1cGdyYWRlVmVyLT5tYWlu
dGVuYW5jZSA+PSAyKSkgewogICAgICAgICAgICByYyA9IENNRF9FUlJfRkFJTEVEOwogICAgICAg
IH0KICAgIH0KCiAgICAvKgogICAgICogV2UgY2Fubm90IHVwZ3JhZGUgZnJvbSBSMS4zLjIgb3Ig
Z3JlYXRlciB0byBSMi4wLiAgVGhlIHBsYW4gaXMgdG8gbWVyZ2UKICAgICAqIHRoZSByZWxlYXNl
IHBhdGhzIGluIFIyLjEsIHNvIHdlIG5lZWQgdG8gYWxsb3cgdGhlIHVwZ3JhZGUgcGF0aCB0bwog
ICAgICogUjIuMSBvciBncmVhdGVyLgogICAgICovCiAgICBlbHNlIGlmICgoY3VyclZlci0+bWFq
b3IgPT0gMSkgJiYgKGN1cnJWZXItPm1pbm9yID09IDMpICYmCiAgICAgICAgICAgICAoY3VyclZl
ci0+bWFpbnRlbmFuY2UgPj0gMikpIHsKICAgICAgICBpZiAoKHVwZ3JhZGVWZXItPm1ham9yID09
IDIpICYmICh1cGdyYWRlVmVyLT5taW5vciA9PSAwKSkgewogICAgICAgICAgICByYyA9IENNRF9F
UlJfRkFJTEVEOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gcmM7Cn0KCgovLyB1c2VkIGJ5
IHByb20gdXBncmFkZSBjb2RlIHBsYWNlIHRoaXMgb24gaG9sZCBmb3Igbm93CiNpZiAwCi8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KICogTmFtZSA6ICAgdmFsaWRfc2xvdF9jcHUoKQogKgogKiBEZXNjcmlwdGlvbjogUmV0
dXJuIHRydWUgaWYgc2xvdC9jcHUgY29tYmluYXRpb24gaXMgdmFsaWQKICoKICogQ3JlYXRlZCBi
eTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzA5LzAyCiAqCiAq
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KICovCnN0YXRpYyBpbnQKdmFsaWRfc2xvdF9jcHUoaW50IHNsb3QsIGludCBjcHUp
CnsKICAgIHN3aXRjaCAoc2xvdCkgewogICAgY2FzZSAwIDoKICAgICAgICByZXR1cm4gMCA8PSBj
cHUgJiYgY3B1IDwgMjsKICAgIGNhc2UgMToKICAgICAgICByZXR1cm4gMCA8PSBjcHUgJiYgY3B1
IDwgNDsKICAgIGNhc2UgMjoKICAgICAgICByZXR1cm4gMCA8PSBjcHUgJiYgY3B1IDwgNDsKICAg
IGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICAKfQojZW5kaWYKCgovKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAqIE5hbWUgOiAgIHJlYWRfdmVyc2lvbigpCiAqCiAqIERlc2NyaXB0aW9uOiBSZWFkIHRo
ZSB2ZXJzaW9uIGZyb20gdGhlIGZpbGUgbmFtZWQgZmlsZW5hbWUKICoKICogQ3JlYXRlZCBieTog
IE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KICovCnN0YXRpYyBpbnQKcmVhZF92ZXJzaW9uKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBz
dHJ1Y3QgdmVyc2lvbiAqdmVyc2lvbikKewogICAgRklMRSAqZiA9IGZvcGVuKGZpbGVuYW1lLCAi
ciIpOwogICAgY2hhciAqczsKICAgIGludCBvayA9IENNRF9FUlJfRkFJTEVEOwoKICAgIGlmIChm
ICE9IE5VTEwpIHsKICAgICAgICBzaXplX3Qgc2l6ZTsKICAgICAgICBzID0gZmdldGxuKGYsICZz
aXplKTsKICAgICAgICBpZiAocyAhPSBOVUxMICYmIHNbc2l6ZSAtIDFdID09ICdcbicpIHsKICAg
ICAgICAgICAgc1tzaXplIC0gMV0gPSAwOwogICAgICAgICAgICBvayA9IHBhcnNlX3ZlcnNpb25f
c3RyKHMsIHZlcnNpb24pOwogICAgICAgIH0KICAgICAgICBmY2xvc2UoZik7CiAgICB9CgogICAg
cmV0dXJuIG9rOwp9CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBpc19jb25maWcoKQogKgogKiBE
ZXNjcmlwdGlvbjogUmV0dXJuIHRydWUgaWYgdGhlIGRlc2NyaXB0b3IgdHlwZSBpcyAnY29uZmln
JwogKgogKiBDcmVhdGVkIGJ5OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDog
ICAgMDUvMTQvMDIKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIGludAppc19jb25maWcoc3RydWN0
IGRlc2NyaXB0b3IgKmRlc2NyKQp7CiAgICByZXR1cm4gIXN0cmNtcChkZXNjci0+dHlwZSwgImNv
bmZpZyIpOwp9CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBpc192ZXJzaW9uKCkKICoKICogRGVz
Y3JpcHRpb246IFJldHVybiB0cnVlIGlmIHRoZSBkZXNjcmlwdG9yIHR5cGUgaXMgJ3ZlcnNpb24n
CiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAg
ICAwNS8xNC8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgaW50CmlzX3ZlcnNpb24oc3RydWN0
IGRlc2NyaXB0b3IgKmRlc2NyKQp7CiAgICByZXR1cm4gIXN0cmNtcChkZXNjci0+dHlwZSwgInZl
cnNpb24iKTsKfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgaXNfcHJvbSgpCiAqCiAqIERlc2Ny
aXB0aW9uOiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZGVzY3JpcHRvciB0eXBlIGlzIHByb20KICoKICog
Q3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0
LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbnQKaXNfcHJvbShzdHJ1Y3QgZGVzY3JpcHRv
ciAqZGVzY3IpCnsKICAgIHJldHVybiAhc3RyY21wKGRlc2NyLT50eXBlLCAicHJvbSIpOwp9CgoK
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogKiBOYW1lIDogICBpc19iaWdwcm9tKCkKICoKICogRGVzY3JpcHRpb246IFJl
dHVybiB0cnVlIGlmIHRoZSBkZXNjcmlwdG9yIHR5cGUgaXMgYmlncHJvbQogKgogKiBDcmVhdGVk
IGJ5OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDUvMTQvMDIKICoK
ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogKi8Kc3RhdGljIGludAppc19iaWdwcm9tKHN0cnVjdCBkZXNjcmlwdG9yICpk
ZXNjcikKewogICAgcmV0dXJuICFzdHJjbXAoZGVzY3ItPnR5cGUsICJiaWdwcm9tIik7Cn0KCgov
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAqIE5hbWUgOiAgIHByaW50X3ZlcnNpb24oKQogKgogKiBEZXNjcmlwdGlvbjog
CiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAg
ICAwNS8xNC8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgdm9pZApwcmludF92ZXJzaW9uKHN0
cnVjdCB2ZXJzaW9uICp2ZXJzaW9uKQp7CiAgICBzcHJpbnRmKHN5c19sb2dfc3RyLCIlZC4lZC4l
ZC4lZFxuIiwgdmVyc2lvbi0+bWFqb3IsIHZlcnNpb24tPm1pbm9yLCAKICAgICAgICAgICB2ZXJz
aW9uLT5tYWludGVuYW5jZSwgdmVyc2lvbi0+cGF0Y2gpOwogICAgbXlfcHJpbnQoc3lzX2xvZ19z
dHIpOwp9CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBjb252ZXJ0X3JjKCkKICoKICogRGVzY3Jp
cHRpb246IENvbnZlcnQgdW5peCByZXR1cm4gY29kZSB0byBuZnhzaCB2YWx1ZXMKICoKICogQ3Jl
YXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDExLzAxLzAy
CiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbmxpbmUgaW50CmNvbnZlcnRfcmMoaW50IHJjKQp7
CiAgICByZXR1cm4gcmMgPT0gMCA/IENNRF9TVUNDRVNTIDogQ01EX0VSUl9GQUlMRUQ7Cn0KCgov
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAqIE5hbWUgOiAgIGlzX2Z0cF91cGdyYWRlKCkKICoKICogRGVzY3JpcHRpb246
IHJldHVybiB0cnVlIGlmIHVwZ3JhZGluZyB1c2luZyBmdHAKICoKICogQ3JlYXRlZCBieTogIE1h
eGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDExLzAxLzAyCiAqCiAqLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KICovCnN0YXRpYyBpbnQKaXNfZnRwX3VwZ3JhZGUoY2hhciAqZnJvbSkKewogICAgcmV0dXJu
ICFzdHJuY21wKGZyb20sIGZ0cHByZWZpeCwgc3RybGVuKGZ0cHByZWZpeCkpOwp9CgoKLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogKiBOYW1lIDogICB1bW91bnRfcGF0Y2goKQogKgogKiBEZXNjcmlwdGlvbjogdW5tb3Vu
dCBwYXRjaCBkaXJlY3RvcnkgaWYgaXQgaXMgbW91bnRlZAogKgogKiBDcmVhdGVkIGJ5OiAgTWF4
aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDUvMTQvMDIKICoKICotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogKi8Kc3RhdGljIHZvaWQKdW1vdW50X3BhdGNoKCkKewogICAgY2hhciBjb21tYW5kX3N0cls0
MDk2XTsKCiAgICBzcHJpbnRmKGNvbW1hbmRfc3RyLCAiL3NiaW4vdW1vdW50ICVzIDI+L2Rldi9u
dWxsIiwgbW91bnRfZGlyKTsKICAgICh2b2lkKXN5c3RlbShjb21tYW5kX3N0cik7CgogICAvLyBk
b19zeXN0ZW0oIi9zYmluL3Vtb3VudCAlcyAyPi9kZXYvbnVsbCIsIG1vdW50X2Rpcik7Cgp9Cgov
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAqIE5hbWUgICAgICAgICA6IHVwZ3JhZGVfcmVzb2x2ZU5hbWUKICoKICogRGVz
Y3JpcHRpb24gIDogUmVzb2x2ZXMgYSBuYW1lIHRvIGFuIElQIGFkZHJlc3MuCiAqCiAqIEFyZ3Vt
ZW50cyAgICA6IGhvc3ROYW1lICAtIEhvc3QgTmFtZS4KICogICAgICAgICAgICAgICAgdnNJZCAg
ICAgIC0gQXBwcm9wcmlhdGUgdmlydHVhbCBzZXJ2ZXIgY29udGV4dC4KICogICAgICAgICAgICAg
ICAgaXBBZGRyZXNzIC0gUmV0dXJuZWQgdmFsdWUuIAogKgogKiBSZXR1cm4gVmFsdWUgOiBORlhf
T0sgIC0gQWJsZSB0byByZXNvbHZlIHRoZSBuYW1lIHRvIGFuIElQIGFkZHJlc3MuCiAqICAgICAg
ICAgICAgICAgIE5GWF9FUlIgLSBVbmFibGUgdG8gcmVzb2x2ZSB0aGUgc2VydmVyIG5hbWUgLgog
KgogKiBDcmVhdGVkIGJ5ICAgOiBLaXJhbiBTcmluaXZhc2FuCiAqCiAqIERhdGUgQ3JlYXRlZCA6
IDA0LzIzLzA0CiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbnQzMgp1cGdyYWRlX3Jlc29sdmVO
YW1lKGNoYXIgKmhvc3ROYW1lLAogICAgICAgICAgICAgICAgICAgIHZzX2lkX3QgdnNJZCwKICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5fYWRkciAqaG9zdElQKQp7CiAgICAvKiBDaGVjayBp
ZiBuYW1lIGlzIGFscmVhZHkgaW4gSVAgYWRkcmVzcyBmb3JtYXQKICAgICAqLwogICAgaWYoaW5l
dF9hdG9uKGhvc3ROYW1lLCBob3N0SVApICE9IDApCiAgICAgICAgcmV0dXJuIE5GWF9PSzsKCiAg
ICAvKiBDYWxsIHRoZSBORlhOSVMgcm91dGluZSB0byByZXNvbHZlIHVzaW5nIHRoZSB2aXJ0dWFs
CiAgICAgKiBzZXJ2ZXIgcHJvdmlkZWQgKHZpYSBGUCkuIAogICAgICovCiAgICAqKGluX2FkZHJf
dCAqKWhvc3RJUCA9IG5meGF1dGhfcmVzb2x2ZU5hbWUodnNJZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3ROYW1lKTsKICAgIAogICAgaWYoaG9zdElQ
LT5zX2FkZHIgPT0gMCkKICAgIHsKICAgICAgICBzcHJpbnRmKHN5c19sb2dfc3RyLCJFcnJvciA6
IHVuYWJsZSB0byByZXNvbHZlIHNlcnZlciA6ICglcykuXG4iLCBob3N0TmFtZSk7CiAgICAgICAg
bXlfcHJpbnQoc3lzX2xvZ19zdHIpOwogICAgICAgIHJldHVybiBORlhfRVJSOwogICAgfQogCiAg
ICByZXR1cm4gTkZYX09LOwp9CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgICAgICAgICA6IGZ0cF9nZXRT
ZXJ2ZXJJUAogKgogKiBEZXNjcmlwdGlvbiAgOiBHZXRzIHRoZSBGVFAgc2VydmVyIGFkZHJlc3Mg
ZnJvbSB0aGUgVVJMLgogKgogKiBBcmd1bWVudHMgICAgOiBmdHBVUkwgICAgICAgICAgICAtIEZU
UCBVUkwKICogICAgICAgICAgICAgICAgdnNJZCAgICAgICAgICAgICAgLSBWaXJ0dWFsIHNlcnZl
ciBJZC4KICogICAgICAgICAgICAgICAgc2VydmVySVAgICAgICAgICAgLSBQb2ludGVyIHRvIGlu
X2FkZHIgc3RydWN0dXJlIGZvcgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybmluZyB0aGUgSVAgYWRkcmVzcy4KICoKICogUmV0dXJuIFZhbHVlIDogTkZYX09LICAt
IEFibGUgdG8gcGFyc2UgdGhlIHNlcnZlciBhZGRyZXNzIG91dCBvZiB0aGUgRlRQCiAqICAgICAg
ICAgICAgICAgICAgICAgICAgICBVUkwuCiAqICAgICAgICAgICAgICAgIE5GWF9FUlIgLSBVbmFi
bGUgdG8gZ2V0IHRoZSBzZXJ2ZXIgYWRkcmVzcy4KICoKICogQ3JlYXRlZCBieSAgIDogS2lyYW4g
U3Jpbml2YXNhbgogKgogKiBEYXRlIENyZWF0ZWQgOiAwNC8yMy8wNAogKgogKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAq
LwpzdGF0aWMgaW50MzIKZnRwX2dldFNlcnZlcklQKGNvbnN0IGNoYXIgKmZ0cFVSTCwKICAgICAg
ICAgICAgICAgIHZzX2lkX3QgdnNJZCwKICAgICAgICAgICAgICAgIHN0cnVjdCBpbl9hZGRyICpz
ZXJ2ZXJJUCkKewogICAgY2hhciAqc3RhcnQ7CiAgICBjaGFyICplbmQ7CiAgICBpbnQzMiByYzsK
ICAgIHVpbnQzMiBzZXJ2ZXJMZW47CiAgICBjaGFyICpzZXJ2ZXJOYW1lOwoKICAgIC8qIEdldCB0
aGUgc3RhcnQgb2YgdGhlIEZUUCBzZXJ2ZXIgbmFtZQogICAgICovCiAgICBpZigoc3RhcnQ9IHN0
cmNocihmdHBVUkwsCiAgICAgICAgICAgICAgICAgICAgICAnQCcpKSA9PSBOVUxMKQogICAgewog
ICAgICAgIG15X3ByaW50KCJFcnJvcjogdW5hYmxlIHRvIGZpbmQgQCBpbiBGVFAgVVJMXG4iKTsK
ICAgICAgICByZXR1cm4gTkZYX0VSUjsKICAgIH0KCiAgICAvKiBHZXQgdGhlIGVuZCBvZiB0aGUg
c2VydmVyIG5hbWUKICAgICAqLwogICAgaWYoKGVuZCA9IHN0cmNocihzdGFydCwKICAgICAgICAg
ICAgICAgICAgICAgJy8nKSkgPT0gTlVMTCkKICAgIHsKICAgICAgICBteV9wcmludCgiRXJyb3I6
IHVuYWJsZSB0byBmaW5kIHRoZSB0ZXJtaW5hdGluZyAvIGluIHRoZSBGVFAgVVJMLlxuIik7CiAg
ICAgICAgcmV0dXJuIE5GWF9FUlI7CiAgICB9CgogICAgc3RhcnQrKzsKICAgIHNlcnZlckxlbiA9
ICh1aW50MzIpIChlbmQgLSBzdGFydCk7CgogICAgaWYoKHNlcnZlck5hbWUgPSAoY2hhciAqKSBt
YWxsb2Moc2VydmVyTGVuICsgc2l6ZW9mKGNoYXIpKSkgPT0gTlVMTCkKICAgIHsKICAgICAgICBt
eV9wcmludCgiRXJyb3I6IHVuYWJsZSB0byBhbGxvY2F0ZSBzZXJ2ZXJOYW1lXG4iKTsKICAgICAg
ICByZXR1cm4gTkZYX0VSUjsKICAgIH0KICAgIHN0cm5jcHkoc2VydmVyTmFtZSwKICAgICAgICAg
ICAgc3RhcnQsCiAgICAgICAgICAgIHNlcnZlckxlbik7CiAgICBzZXJ2ZXJOYW1lW3NlcnZlckxl
bl0gPSAnXDAnOwoKICAgIC8qIEdldCB0aGUgSVAgYWRkcmVzcyAKICAgICAqLwogICAgcmMgPSB1
cGdyYWRlX3Jlc29sdmVOYW1lKHNlcnZlck5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdnNJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJJUCk7ICAKCiAgICBm
cmVlKHNlcnZlck5hbWUpOwogICAgcmV0dXJuIHJjOwp9CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDog
ICBtb3VudF9wYXRjaCgpCiAqCiAqIERlc2NyaXB0aW9uOiBtb3VudCB0aGUgcGF0Y2ggZGlyZWN0
b3J5ICdmcm9tJyBvbiBtb3VudF9kaXIKICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNr
eQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRp
YyBpbnQKbW91bnRfcGF0Y2goY2hhciAqZnJvbSkKewoJaW50IHJjOwogICAgY2hhciBjb21tYW5k
X3N0cls0MDk2XTsKCiAgICBzcHJpbnRmKGNvbW1hbmRfc3RyLCAiL3NiaW4vdW1vdW50IC1mICVz
IDI+L2Rldi9udWxsIiwgbW91bnRfZGlyKTsKICAgICh2b2lkKXN5c3RlbShjb21tYW5kX3N0cik7
CgogICAgLy9yYyA9IGRvX3N5c3RlbSgiL3NiaW4vdW1vdW50IC1mICVzIDI+L2Rldi9udWxsIiwg
bW91bnRfZGlyKTsKCiAgICBpZiAoaXNfZnRwX3VwZ3JhZGUoZnJvbSkpIHsKICAgICAgICBteV9w
cmludCgiRG93bmxvYWRpbmcgZXh0ZXJuYWwgc3lzdGVtIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbi5c
biIpOwogICAgICAgIHNwcmludGYoY29tbWFuZF9zdHIsICIvc2Jpbi9tb3VudF9tZnMgLW0gMCAt
cyAxMjAwMDAgc3dhcCAlcyIsIG1vdW50X2Rpcik7CiAgICAgICAgcmMgPSBjb252ZXJ0X3JjKHN5
c3RlbShjb21tYW5kX3N0cikpOwoKICAgICAgICAvL3JjID0gZG9fc3lzdGVtKCIvc2Jpbi9tb3Vu
dF9tZnMgLW0gMCAtcyAxMjAwMDAgc3dhcCAlcyIsIG1vdW50X2Rpcik7CiAgICAgICAgLy9yYyA9
IGNvbnZlcnRfcmMocmMpOwoKICAgICAgICBpZiAocmMgPT0gQ01EX1NVQ0NFU1MpIHsKICAgICAg
ICAgICAgaWYobmZ4c2hfdnNfaWQgIT0gVlNfSURfSU5WQUxJRCkgewogICAgICAgICAgICAgICAg
LyogVXBncmFkZSBpcyBiZWluZyBkb25lIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIAogICAgICAg
ICAgICAgICAgICogdmlydHVhbCBzZXJ2ZXIsIHBpY2sgdGhlIGFwcHJvcHJpYXRlIHNvdXJjZSBJ
UAogICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5fYWRkciBzZXJ2
ZXJJUDsKICAgICAgICAgICAgICAgIHN0cnVjdCBpbl9hZGRyIHNyY0lQOwogICAgICAgICAgICAg
ICAgTlRTVEFUVVMgc3RhdHVzOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvKiBQ
YXJzZSB0aGUgYWRkcmVzcyBvdXQgb2YgdGhlIHBhdGNoIGxvY2F0aW9uCiAgICAgICAgICAgICAg
ICAgKi8KICAgICAgICAgICAgICAgIGlmKGZ0cF9nZXRTZXJ2ZXJJUChmcm9tLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5meHNoX3ZzX2lkLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZzZXJ2ZXJJUCkgIT0gTkZYX09LKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgIG15X3ByaW50KCJFcnJvcjogdW5hYmxlIHRvIHBhcnNlIHRoZSBk
ZXN0aW5hdGlvbiBJUCBhZGRyZXNzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAiIHN0cmlu
ZyBmcm9tIHRoZSBmdHAgVVJMLlxuIik7CiAgICAgICAgICAgICAgICAgICAgdW1vdW50X3BhdGNo
KCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENNRF9FUlJfRkFJTEVEOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIC8qIEdldCB0aGUgc291cmNlIElQIGFkZHJlc3MgKHBy
aXZhdGUpCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGlmKChzdGF0dXMgPSBu
ZnhuaXNfZ2V0U291cmNlSVAobmZ4c2hfdnNfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcklQLnNfYWRkciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNyY0lQLnNfYWRkcikpCiAgICAgICAgICAgICAg
ICAgICAgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVz
ID09IFNUQVRVU19TRVJWRVJfRElTQUJMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3By
aW50ZihzeXNfbG9nX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3I6
IHZpcnR1YWwgc2VydmVyIChJRCAtICVkKSBpcyBkaXNhYmxlZC4gIgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJGVFAgc2VydmVyICVzIHVucmVhY2hhYmxlLlxuIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZnhzaF92c19pZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmV0X250b2Eoc2VydmVySVApKTsKICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09IFNUQVRVU19ORVRXT1JLX1VOUkVB
Q0hBQkxFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoc3lzX2xvZ19zdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yOiB2aXJ0dWFsIHNlcnZlciAoSUQg
LSAlZCkgZG9lcyBub3QgaGF2ZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImEg
cm91dGUgdG8gRlRQIHNlcnZlciAlcy5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmZ4c2hfdnNfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9h
KHNlcnZlcklQKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHN5c19sb2dfc3RyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvcjogQ2Fubm90IHJlYWNoIEZUUCBzZXJ2ZXIg
JXMgZnJvbSB0aGlzICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmlydHVhbCBz
ZXJ2ZXIgKElEIC0gJWQpIGNvbnRleHQuIHN0YXR1cz0weCVYXG4iLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZXRfbnRvYShzZXJ2ZXJJUCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmZ4c2hfdnNfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbXlfcHJp
bnQoc3lzX2xvZ19zdHIpOyAKICAgICAgICAgICAgICAgICAgICB1bW91bnRfcGF0Y2goKTsKICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gQ01EX0VSUl9GQUlMRUQ7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgLyogQWRkIHRoZSAtcyBvcHRpb24gdG8gdGhlIGZ0cCBjbGllbnQg
dG8gYmluZCB0byB0aGUKICAgICAgICAgICAgICAgICAqIGNvcnJlY3QgSVAgYWRkcmVzcyBiZWZv
cmUgbWFraW5nIHRoZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAg
ICAgIHNwcmludGYoY29tbWFuZF9zdHIsICIvdXNyL2Jpbi9mdHAgLW8gLSAtcyAlcyAtbSAlcyB8
CgkJCQkgICAgdGFyIHh6cGYgLSAtQyAlcyAuJXMgXCIuJXNcIiAuJXMgLi92ZXJzaW9uIiwKICAg
ICAgICAgICAgICAgICAgICBpbmV0X250b2Eoc3JjSVApLCBmcm9tLCBtb3VudF9kaXIsIGRlc2Ny
aXB0b3JfZmlsZSwKCQkJCQltYW5pZmVzdCwgbXRyZWVfZmlsZV9uYW1lKTsKCQkJCXByaW50Zigi
JXNcbiIsY29tbWFuZF9zdHIpIDsKCiAgICAgICAgICAvKiBBbmR5J3MgZG8gc3lzdGVtCgkJCQly
YyA9IGRvX3N5c3RlbSgiL3Vzci9iaW4vZnRwIC1vIC0gLXMgJXMgLW0gJXMgfAoJCQkJICAgIHRh
ciB4enBmIC0gLUMgJXMgLiVzIC4lcyAuJXMgLi92ZXJzaW9uIiwKICAgICAgICAgICAgICAgICAg
ICBpbmV0X250b2Eoc3JjSVApLCBmcm9tLCBtb3VudF9kaXIsIGRlc2NyaXB0b3JfZmlsZSwKCQkJ
CQltYW5pZmVzdCwgbXRyZWVfZmlsZV9uYW1lKTsKCQkqLwoKICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgIHNwcmludGYoY29tbWFuZF9zdHIsICIvdXNyL2Jpbi9mdHAgLW8gLSAt
bSAlcyB8CgkJCQkJdGFyIHh6cGYgLSAtQyAlcyAuJXMgXCIuJXNcIiAuJXMgLi92ZXJzaW9uIiwK
ICAgICAgICAgICAgICAgICAgICBmcm9tLCBtb3VudF9kaXIsIGRlc2NyaXB0b3JfZmlsZSwgbWFu
aWZlc3QsCgkJCQkJbXRyZWVfZmlsZV9uYW1lKTsKCQkJCXByaW50ZigiJXNcbiIsY29tbWFuZF9z
dHIpIDsKCiAgICAgICAgICAvKiBBbmR5J3MgZG8gc3lzdGVtCgkJCQkgICAgcmMgPSBkb19zeXN0
ZW0oIi91c3IvYmluL2Z0cCAtbyAtIC1tICVzIHwgCgkJCQkgICAgdGFyIHh6cGYgLSAtQyAlcyAu
JXMgLiVzIC4lcyAuL3ZlcnNpb24iLAogICAgICAgICAgICAgICAgICAgIGZyb20sIG1vdW50X2Rp
ciwgZGVzY3JpcHRvcl9maWxlLCBtYW5pZmVzdCwKCQkJCQltdHJlZV9maWxlX25hbWUpOwoJCSAq
LwoKCQkJfQoJCQkvLyBvcmlnaW5hbCBzeXN0ZW0gY29tbWFuZCBpbnZvY2F0aW9uCiAgICAgICAg
ICAgIHJjID0gY29udmVydF9yYyhzeXN0ZW0oY29tbWFuZF9zdHIpKTsKCgkJCS8qIE5lZWRlZCBm
b3IgQW5keSdzIGRvIHN5c3RlbQogICAgICAgICAgICByYyA9IGNvbnZlcnRfcmMocmMpOwoJCQkq
LwoKICAgICAgICAgICAgcGF0Y2hfZGlyX25hbWUgPSBtb3VudF9kaXI7CiAgICAgICAgICAgIGlm
IChyYyA9PSBDTURfU1VDQ0VTUykgewogICAgICAgICAgICAgICAgbXlfcHJpbnQoIkRvbmUuXG4i
KTsKICAgICAgICAgICAgfSBlbHNlIHsKCQkJCXVtb3VudF9wYXRjaCgpOwogICAgICAgICAgICAg
ICAgbXlfcHJpbnQoIkRvd25sb2FkIGZhaWxlZC5cbiIpOwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICAgIHJldHVybiByYzsKICAgIH0gZWxzZSB7CiAgICAgICAgc3ByaW50Zihjb21tYW5k
X3N0ciwgIi9zYmluL3Vtb3VudCAlcyAyPi9kZXYvbnVsbCIsIG1vdW50X2Rpcik7CiAgICAgICAg
KHZvaWQpc3lzdGVtKGNvbW1hbmRfc3RyKTsKCiAgICAgICAgc3ByaW50Zihjb21tYW5kX3N0ciwg
Ii9zYmluL21vdW50IC10IG5mcyAlcyAlcyIsIGZyb20sIG1vdW50X2Rpcik7CiAgICAgICAgcGF0
Y2hfZGlyX25hbWUgPSBtb3VudF9kaXI7CgoJICAgIHJldHVybiBjb252ZXJ0X3JjKHN5c3RlbShj
b21tYW5kX3N0cikpOwogICAgCgkvKiBBbmR5J3MgY2hhbmdlCiAgICAgICAgZG9fc3lzdGVtKCIv
c2Jpbi91bW91bnQgJXMgMj4vZGV2L251bGwiLCBtb3VudF9kaXIpOwoKICAgICAgICByYyA9IGRv
X3N5c3RlbSgiL3NiaW4vbW91bnQgLXQgbmZzICVzICVzIiwgZnJvbSwgbW91bnRfZGlyKTsKICAg
ICAgICBwYXRjaF9kaXJfbmFtZSA9IG1vdW50X2RpcjsKCiAgICAgICAgcmV0dXJuIGNvbnZlcnRf
cmMocmMpOwoJKi8KICAgIH0KfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgZ2V0X3VwZ3JhZGVf
dmVyc2lvbigpCiAqCiAqIERlc2NyaXB0aW9uOiBkZXRlcm1pbmUgdGhlIHZlcnNpb24gb2Ygc3lz
dGVtIHVwZ3JhZGUKICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRl
IENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbnQKZ2V0X3Vw
Z3JhZGVfdmVyc2lvbihzdHJ1Y3QgdmVyc2lvbiAqdmVyc2lvbikKewogICAgY2hhciB2ZXJzaW9u
X2ZpbGVbTUFYUEFUSExFTiArIDFdOwogICAgc3RyY3B5KHZlcnNpb25fZmlsZSwgcGF0Y2hfZGly
X25hbWUpOwogICAgc3RyY2F0KHZlcnNpb25fZmlsZSwgIi92ZXJzaW9uIik7CiAgICByZXR1cm4g
cmVhZF92ZXJzaW9uKHZlcnNpb25fZmlsZSwgdmVyc2lvbik7Cn0KCi8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFt
ZSA6ICAgemVyb192ZXJzaW9uKCkKICoKICogRGVzY3JpcHRpb246IEZpbGwgdmVyc2lvbiB3aXRo
IHplcm9lcwogKgogKiBDcmVhdGVkIGJ5OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3Jl
YXRlZDogICAgMDcvMDMvMDIKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIHZvaWQKemVyb192ZXJz
aW9uKHN0cnVjdCB2ZXJzaW9uICp2ZXJzaW9uKQp7CiAgICB2ZXJzaW9uLT5tYWpvciA9IHZlcnNp
b24tPm1pbm9yID0gdmVyc2lvbi0+bWFpbnRlbmFuY2UgPSB2ZXJzaW9uLT5wYXRjaCA9IDA7Cn0K
CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIGdldF9vcmdfdXBncmFkZV92ZXJzaW9uKCkKICoKICog
RGVzY3JpcHRpb246IHJlYWQgb3JpZ2luYWwgdmVyc2lvbiBvZiB1cGdyYWRlCiAqCiAqIENyZWF0
ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNy8wMy8wMgog
KgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgdm9pZApnZXRfb3JnX3VwZ3JhZGVfdmVyc2lvbihzdHJ1
Y3QgdmVyc2lvbiAqdmVyc2lvbikKewogICAgY2hhciB2ZXJzaW9uX2ZpbGVbTUFYUEFUSExFTiAr
IDFdOwogICAgc3RyY3B5KHZlcnNpb25fZmlsZSwgcGF0Y2hfZGlyX25hbWUpOwogICAgc3RyY2F0
KHZlcnNpb25fZmlsZSwgIi92ZXJzaW9uLm9yZyIpOwogICAgaWYgKHJlYWRfdmVyc2lvbih2ZXJz
aW9uX2ZpbGUsIHZlcnNpb24pICE9IDApIHsKICAgICAgICB6ZXJvX3ZlcnNpb24odmVyc2lvbik7
CiAgICB9Cn0KCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIGlzX2RvdGRpcigpCiAqCiAqIERlc2Ny
aXB0aW9uOiByZXR1cm4gdHJ1ZSBpZiB0aGUgbmFtZSBpcyAiLiIgb3IgIi4uIi4KICoKICogQ3Jl
YXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAy
CiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbnQKaXNfZG90ZGlyKGNoYXIgKm5hbWUpCnsKICAg
IHJldHVybiAobmFtZVswXSA9PSAnLicgJiYgbmFtZVsxXSA9PSAnXDAnKQogICAgICAgIHx8IChu
YW1lWzBdID09ICcuJyAmJiBuYW1lWzFdID09ICcuJyAmJiBuYW1lWzJdID09ICdcMCcpOwp9CgoK
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogKiBOYW1lIDogICBmaW5kX2ZpbGVzKCkKICoKICogRGVzY3JpcHRpb246IEZp
bmQgdGhlIGxpc3Qgb2YgdGhlIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkKICoKICogQ3JlYXRlZCBi
eTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAq
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KICovCnN0YXRpYyBpbnQKZmluZF9maWxlcyhjb25zdCBjaGFyICpkaXJfbmFtZSwg
dmVjdG9yIGZpbGVzKQp7CiAgICBpbnQgcmMgPSBDTURfRVJSX0ZBSUxFRDsKICAgIERJUiAqZGly
ID0gb3BlbmRpcihkaXJfbmFtZSk7CiAgICBpZiAoZGlyICE9IE5VTEwpIHsKICAgICAgICBzdHJ1
Y3QgZGlyZW50ICpkcDsKICAgICAgICBpbnQgZXJyb3IgPSAwOwogICAgICAgIHdoaWxlICghZXJy
b3IgJiYgKGRwID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CiAgICAgICAgICAgIGlmICghaXNf
ZG90ZGlyKGRwLT5kX25hbWUpICYmIHN0cmNtcChkcC0+ZF9uYW1lLCAiLnNuYXBzaG90IikpIHsK
ICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0IHN0YnVmOwogICAgICAgICAgICAgICAgY2hhciAq
Zm5hbWUgPSB6bWFsbG9jKE1UWVBFX1ZFQ1RPUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJsZW4oZGlyX25hbWUpICsgMiArIGRwLT5kX3JlY2xlbik7CiAgICAgICAg
ICAgICAgICBzcHJpbnRmKGZuYW1lLCAiJXMvJXMiLCBkaXJfbmFtZSwgZHAtPmRfbmFtZSk7CiAg
ICAgICAgICAgICAgICBpZiAoc3RhdChmbmFtZSwgJnN0YnVmKSA8IDApIHsKICAgICAgICAgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBjYW4ndCBzdGF0ICVzOiAlc1xuIiwgZm5h
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOwoJCQkJCWlm
IChzeXNfdXBncmFkZSkgewoJCQkJCQlmcHJpbnRmKHN5c191cGdyYWRlLCAiRXJyb3I6IGNhbid0
IHN0YXQgJXM6ICVzXG4iLAoJCQkJCQkJZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CgkJCQkJCWZm
bHVzaChzeXNfdXBncmFkZSk7CgkJCQkJfQogICAgICAgICAgICAgICAgICAgIGVycm9yID0gMTsK
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKFNfSVNSRUco
c3RidWYuc3RfbW9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yX3B1c2goZmls
ZXMsIHpzdHJkdXAoTVRZUEVfVkVDVE9SLCBmbmFtZSkpOwogICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoU19JU0RJUihzdGJ1Zi5zdF9tb2RlKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZmluZF9maWxlcyhmbmFtZSwgZmlsZXMpICE9IENNRF9TVUNDRVNTKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvciA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgemZyZWUoTVRZUEVfVkVD
VE9SLCBmbmFtZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgICAgY2xvc2VkaXIoZGlyKTsKICAgICAgICByYyA9IGVycm9yID8gQ01EX0VSUl9GQUlMRUQg
OiBDTURfU1VDQ0VTUzsKICAgIH0KICAgIHJldHVybiByYzsKfQoKCi8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFt
ZSA6ICAgZ2V0X2xvY2FsX3ZlcnNpb24oKQogKgogKiBEZXNjcmlwdGlvbjogZGV0ZXJtaW5lIHRo
ZSBjdXJyZW50IHN5c3RlbSB2ZXJzaW9uCiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zz
a3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNS8xNC8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0
aWMgaW50CmdldF9sb2NhbF92ZXJzaW9uKHN0cnVjdCB2ZXJzaW9uICp2ZXJzaW9uKQp7CiAgICBj
aGFyIHZlcnNpb25fZmlsZVtNQVhQQVRITEVOICsgMV07CiAgICBzdHJjcHkodmVyc2lvbl9maWxl
LCBwYXRjaF9kaXJfbmFtZSk7CiAgICBzdHJjYXQodmVyc2lvbl9maWxlLCAiL3ZlcnNpb24iKTsK
ICAgIGlmIChyZWFkX3ZlcnNpb24oY3VyX3RydWVuYW1lX2Z1bmModmVyc2lvbl9maWxlKSwKICAg
ICAgICAgICAgICAgICAgICAgdmVyc2lvbikgIT0gQ01EX1NVQ0NFU1MpIHsKICAgICAgICB6ZXJv
X3ZlcnNpb24odmVyc2lvbik7CiAgICB9CiAgICByZXR1cm4gQ01EX1NVQ0NFU1M7Cn0KCi8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KICogTmFtZSA6ICAgZ2V0X3NlY29uZGFyeV92ZXJzaW9uKCkKICoKICogRGVzY3JpcHRp
b246IGRldGVybWluZSB0aGUgc3lzdGVtIHZlcnNpb24gb2YgdGhlIHNlY29uZGFyeSBmbGFzaAog
KgogKiBDcmVhdGVkIGJ5OiAgRGFucWluZyBKaW4KICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNy8w
NS8wNgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgaW50CmdldF9zZWNvbmRhcnlfdmVyc2lvbihz
dHJ1Y3QgdmVyc2lvbiAqdmVyc2lvbikKewogICAgY2hhciB2ZXJzaW9uX2ZpbGVbTUFYUEFUSExF
TiArIDFdOwogICAgaW50IHJjOwoKICAgIHNucHJpbnRmKHZlcnNpb25fZmlsZSwgTUFYUEFUSExF
TisxLCAiJXMvdmVyc2lvbiIsIHNlY29uZGFyeV9tb3VudCk7CiAgICBpZiAoKHJjID0gcmVhZF92
ZXJzaW9uKHZlcnNpb25fZmlsZSwgdmVyc2lvbikpICE9IENNRF9TVUNDRVNTKSB7CiAgICAgICAg
emVyb192ZXJzaW9uKHZlcnNpb24pOwogICAgfQogICAgcmV0dXJuIHJjOwp9CgoKLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogKiBOYW1lIDogICBnZXRfcm9vdF92ZXJzaW9uKCkKICoKICogRGVzY3JpcHRpb246IGdldCBz
eXN0ZW0gdmVyc2lvbiBmcm9tIHJvb3QgZGlyZWN0b3J5CiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhp
bSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwMS8xMC8wMwogKgogKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAqLwpzdGF0aWMgaW50CmdldF9yb290X3ZlcnNpb24oc3RydWN0IHZlcnNpb24gKnZlcnNpb24p
CnsKICAgIGlmIChyZWFkX3ZlcnNpb24oIi92ZXJzaW9uIiwgdmVyc2lvbikgIT0gQ01EX1NVQ0NF
U1MpIHsKICAgICAgICB6ZXJvX3ZlcnNpb24odmVyc2lvbik7CiAgICB9CiAgICByZXR1cm4gQ01E
X1NVQ0NFU1M7Cn0KCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIGNvbXBhcmVfZGVzY3JfZmlsZSgp
CiAqCiAqIERlc2NyaXB0aW9uOiBjb21wYXJlIHRoZSBkZXNjcmlwdG9ycyB1c2luZyB0aGUgZmls
ZSBuYW1lcwogKgogKiBDcmVhdGVkIGJ5OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3Jl
YXRlZDogICAgMDUvMTQvMDIKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIGludApjb21wYXJlX2Rl
c2NyX2ZpbGUodm9pZCAqZGVzY3IsIHZvaWQgKmZuYW1lKQp7CiAgICByZXR1cm4gIXN0cmNtcCgo
KHN0cnVjdCBkZXNjcmlwdG9yICopZGVzY3IpLT5uYW1lLCBmbmFtZSk7Cn0KCgovKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAqIE5hbWUgOiAgIGdldF9maWxlX2Rlc2NyaXB0b3IoKQogKgogKiBEZXNjcmlwdGlvbjogZmlu
ZCB0aGUgZGVzY3JpcHRvciBmb3IgdGhlIGZpbGUgaW4gdGhlIGRlc2NyaXB0b3IKICogdmVjdG9y
IGR2LgogKgogKiBDcmVhdGVkIGJ5OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRl
ZDogICAgMDUvMTQvMDIKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIHN0cnVjdCBkZXNjcmlwdG9y
ICoKZ2V0X2ZpbGVfZGVzY3JpcHRvcih2ZWN0b3IgZHYsIGNoYXIgKmZuYW1lKQp7CiAgICBzdHJ1
Y3QgZGVzY3JpcHRvciAqZGVzY3IgPSB2ZWN0b3JfZmluZChkdiwgY29tcGFyZV9kZXNjcl9maWxl
LCBmbmFtZSk7CiAgICBpZiAoZGVzY3IgPT0gTlVMTCkKICAgICAgICBkZXNjciA9ICZkZWZhdWx0
X2Rlc2NyaXB0b3I7CiAgICByZXR1cm4gZGVzY3I7Cn0KCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAg
IGZpbGVfZXhpc3RzKCkKICoKICogRGVzY3JpcHRpb246IHJldHVybiB0cnVlIGlmIHRoZSBmaWxl
IGV4aXN0cwogKgogKiBDcmVhdGVkIGJ5OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3Jl
YXRlZDogICAgMDUvMTQvMDIKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIGludApmaWxlX2V4aXN0
cyhjaGFyICpmaWxlKQp7CiAgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOwogICAgcmV0dXJuIHN0YXQo
ZmlsZSwgJnN0YXRidWYpID09IDA7Cn0KCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIHVwZ3JhZGVf
dHJ1ZW5hbWUoKQogKgogKiBEZXNjcmlwdGlvbjogcmV0dXJuIHRoZSBpbnN0YWxsYXRpb24gbmFt
ZSBvZiBhIGZpbGUgaW4gdXBncmFkZQogKiBkaXJlY3RvcnkuCiAqCiAqIENyZWF0ZWQgYnk6ICBN
YXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNS8xNC8wMgogKgogKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAqLwpzdGF0aWMgY2hhcioKdXBncmFkZV90cnVlbmFtZShjaGFyICpmaWxlKQp7CiAgICBy
ZXR1cm4gc3RyY2hyKGZpbGUgKyAxLCAnLycpOwp9CgoKc3RhdGljIGNoYXIgKgpzZWNvbmRhcnlf
dXBncmFkZV90cnVlbmFtZShjaGFyICpmaWxlKQp7CiAgICBzdGF0aWMgY2hhciBidWZbTUFYUEFU
SExFTl07CiAgICBzdHJjcHkoYnVmLCBzZWNvbmRhcnlfbW91bnQpOwogICAgc3RyY2F0KGJ1Ziwg
c3RyY2hyKGZpbGUgKyAxLCAnLycpKTsKICAgIHJldHVybiBidWY7Cn0KCgovKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAq
IE5hbWUgOiAgIHNodXRkb3duX3N5c3RlbSgpCiAqCiAqIERlc2NyaXB0aW9uOiB0ZWxsIHRoZSBz
eXN0ZW0gZGFlbW9ucyB0byBzaHV0ZG93bgogKgogKiBDcmVhdGVkIGJ5OiAgTWF4aW0gS296bG92
c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDUvMTQvMDIKICoKICotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8Kc3Rh
dGljIHZvaWQKc2h1dGRvd25fc3lzdGVtKCkKewogICAgbXlfcHJpbnQoIlNodXR0aW5nIGRvd24g
dGhlIHN5c3RlbSBzb2Z0d2FyZS4uLiIpOwogICAgbXlfcHJpbnQoImRvbmVcbiIpOwp9CgoKLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogKiBOYW1lIDogICBraWxsX2RhZW1vbigpCiAqCiAqIERlc2NyaXB0aW9uOiBraWxs
IHRoZSBkYWVtb24sIHBpZCBpcyBpbiBwaWRfZmlsZSBhbmQgdGhlIGRhZW1vbgogKiBpcyBzdXBw
b3NlZCB0byByZW1vdmUgdGhlIGZpbGUgd2hlbiBleGl0aW5nIG9uIFNJR1RFUk0KICoKICogQ3Jl
YXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAy
CiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KICovCnZvaWQKa2lsbF9kYWVtb24oY2hhciAqcGlkX2ZpbGUpCnsKICAg
IEZJTEUgKmY7CiAgICBpbnQgcGlkOwogICAgaW50IHRpbWVfdG9fc2xlZXAgPSAxMDsKCiAgICBm
ID0gZm9wZW4ocGlkX2ZpbGUsICJyIik7CiAgICBpZiAoZikgewogICAgICAgIGZzY2FuZihmLCAi
JWRcbiIsICZwaWQpOwogICAgICAgIGZjbG9zZShmKTsKICAgICAgICBraWxsKHBpZCwgU0lHVEVS
TSk7CiAgICAgICAgd2hpbGUgKHRpbWVfdG9fc2xlZXAgJiYgZmlsZV9leGlzdHMocGlkX2ZpbGUp
KSB7CiAgICAgICAgICAgIHNsZWVwKDEpOwogICAgICAgICAgICAtLXRpbWVfdG9fc2xlZXA7CiAg
ICAgICAgfQogICAgICAgIGlmICh0aW1lX3RvX3NsZWVwID09IDApIHsKICAgICAgICAgICAga2ls
bChwaWQsIFNJR0tJTEwpOwogICAgICAgICAgICB1bmxpbmsocGlkX2ZpbGUpOwogICAgICAgIH0K
ICAgIH0KfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgc2h1dGRvd25faW5ldGQoKQogKgogKiBE
ZXNjcmlwdGlvbjogc2h1dGRvd24gdGhlIGluZXRkCiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBL
b3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNS8xNC8wMgogKgogKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAq
LwpzdGF0aWMgdm9pZApzaHV0ZG93bl9pbmV0ZCh2b2lkKQp7CiAgICBteV9wcmludCgiU2h1dHRp
bmcgZG93biB0aGUgaW5ldGQuLi4iKTsKICAgIGtpbGxfZGFlbW9uKCIvdmFyL3J1bi9pbmV0ZC5w
aWQiKTsKICAgIG15X3ByaW50KCJkb25lXG4iKTsKfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAg
c2h1dGRvd25fcG0oKQogKgogKiBEZXNjcmlwdGlvbjogc2h1dGRvd24gdGhlIHBtCiAqCiAqIENy
ZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNS8xNC8w
MgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgdm9pZApzaHV0ZG93bl9wbSh2b2lkKQp7CgkvKgog
ICAgICogU2h1dGRvd24gRU1SUyBiZWZvcmUgc3RvcHBpbmcgUE0gYmVjYXVzZSBFTVJTIGNhbiBz
dGFydCBhbiBleGVjdXRhYmxlCiAgICAgKiB0aGF0IGlzIGRlcGVuZGVudCBvbiBQTSBydW5uaW5n
LgoJICovCglzeXN0ZW0oIi91c3IvbG9jYWwvYWdpbGUvYmluL2VtcnNjcm9uIC1yIik7CiAgICBt
eV9wcmludCgiU2h1dHRpbmcgZG93biBQTS4uLiIpOwogICAga2lsbF9kYWVtb24oIi92YXIvcnVu
L3BtLnBpZCIpOwogICAgbXlfcHJpbnQoImRvbmVcbiIpOwp9CgovLyAgTmV4dCB0d28gYXJlIG9i
c29sZXRlIGZ1bmN0aW9ucwojaWYgMAovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIHVwZ3JhZGVfZmls
ZXMoKQogKgogKiBEZXNjcmlwdGlvbjogaW5zdGFsbCB0aGUgZmlsZXMgaW4gdGhlIHZlY3RvciBm
aWxlcy4gCiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVh
dGVkOiAgICAwNS8xNC8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgaW50CnVwZ3JhZGVfZmls
ZXModmVjdG9yIGZpbGVzLCBjaGFyICooKnRydWVuYW1lX2Z1bmMpKGNoYXIgKikpCnsKICAgIGlu
dCBpOwogICAgaW50IGVycm9yID0gMDsKICAgIGlmIChzeXNfdXBncmFkZSkgewogICAgICAgIGZw
cmludGYoc3lzX3VwZ3JhZGUsIlVwZ3JhZGUgZmlsZXMsIFN0YXJ0IHRpbWU6ICVzXG4iLGdldF90
aW1lKCkpOwogICAgICAgIGZmbHVzaChzeXNfdXBncmFkZSk7CiAgICB9CiAgICBmb3IgKGkgPSAw
OyBlcnJvciA9PSAwICYmIGkgPCB2ZWN0b3JfbWF4KGZpbGVzKTsgKytpKSB7CiAgICAgICAgY2hh
ciAqc3JjX2ZpbGUgPSB2ZWN0b3JfbG9va3VwX2luZGV4KGZpbGVzLCBpKTsKICAgICAgICBjaGFy
ICpkc3RfZmlsZSA9ICgqdHJ1ZW5hbWVfZnVuYykoc3JjX2ZpbGUpOwogICAgICAgIHN0cnVjdCBz
dGF0IHNyY19zdDsKICAgICAgICBzcHJpbnRmKHN5c19sb2dfc3RyLCJJbnN0YWxsaW5nICVzLi4u
IiwgZHN0X2ZpbGUpOwogICAgICAgIG15X3ByaW50KHN5c19sb2dfc3RyKTsKICAgICAgICBpZiAo
bHN0YXQoc3JjX2ZpbGUsICZzcmNfc3QpID09IDApIHsKICAgICAgICAgICAgaWYgKFNfSVNSRUco
c3JjX3N0LnN0X21vZGUpKSB7CiAgICAgICAgICAgICAgICBtb2RlX3QgbW9kZSA9IHNyY19zdC5z
dF9tb2RlICYgMDc3Nzc7CiAgICAgICAgICAgICAgICB1aWRfdCBvd25lciA9IHNyY19zdC5zdF91
aWQ7CiAgICAgICAgICAgICAgICBnaWRfdCBncm91cCA9IHNyY19zdC5zdF9naWQ7CiAgICAgICAg
ICAgICAgICBmZmx1c2goc3Rkb3V0KTsKICAgICAgICAgICAgICAgIGlmIChzeXNfdXBncmFkZSkg
ewogICAgICAgICAgICAgICAgICAgIGZmbHVzaChzeXNfdXBncmFkZSk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICBlcnJvciA9IGRvX3N5c3RlbSgiL3Vzci9iaW4vaW5zdGFsbCAt
UyAiCgkJCQkJCSItbyAlZCAtZyAlZCAtbSAwJW8gJXMgJXMiLAogICAgICAgICAgICAgICAgICAg
ICAgICBvd25lciwgZ3JvdXAsIG1vZGUsIHNyY19maWxlLCBkc3RfZmlsZSk7CgkJCQllcnJvciA9
IGNvbnZlcnRfcmMoZXJyb3IpOwogICAgICAgICAgICB9IGVsc2UgaWYgKFNfSVNMTksoc3JjX3N0
LnN0X21vZGUpKSB7CiAgICAgICAgICAgICAgICBjaGFyIGxpbmtfY29udGVudHNbTUFYUEFUSExF
Tl07CiAgICAgICAgICAgICAgICBpbnQgbmJ5dGVzOwogICAgICAgICAgICAgICAgbmJ5dGVzID0g
cmVhZGxpbmsoc3JjX2ZpbGUsIGxpbmtfY29udGVudHMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVvZihsaW5rX2NvbnRlbnRzKSk7CiAgICAgICAgICAgICAgICBpZiAobmJ5
dGVzID4gMCkgewogICAgICAgICAgICAgICAgICAgIGxpbmtfY29udGVudHNbbmJ5dGVzXSA9ICdc
MCc7CiAgICAgICAgICAgICAgICAgICAgc3ltbGluayhsaW5rX2NvbnRlbnRzLCBkc3RfZmlsZSk7
CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGVycm9yID0gMTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChTX0lTQkxLKHNyY19zdC5z
dF9tb2RlKSB8fCBTX0lTQ0hSKHNyY19zdC5zdF9tb2RlKSkgewogICAgICAgICAgICAgICAgZXJy
b3IgPSBta25vZChkc3RfZmlsZSwgc3JjX3N0LnN0X21vZGUsIHNyY19zdC5zdF9kZXYpOwogICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbXlfcHJpbnQoInVuc3VwcG9ydGVkIGZp
bGUgdHlwZVxuIik7CiAgICAgICAgICAgICAgICBlcnJvciA9IDE7CiAgICAgICAgICAgIH0KICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICBlcnJvciA9IDE7CiAgICAgICAgfQogICAgICAgIGlm
IChlcnJvcikKICAgICAgICAgICAgbXlfcHJpbnQoImZhaWxlZFxuIik7CiAgICAgICAgZWxzZQog
ICAgICAgICAgICBteV9wcmludCgiZG9uZVxuIik7CiAgICB9CiAgICBpZiAoc3lzX3VwZ3JhZGUp
IHsKICAgICAgICBmcHJpbnRmKHN5c191cGdyYWRlLCJVcGdyYWRlIGZpbGVzLCBFbmQgdGltZTog
JXNcbiIsZ2V0X3RpbWUoKSk7CiAgICAgICAgZmZsdXNoKHN5c191cGdyYWRlKTsKICAgIH0KICAg
IHJldHVybiBlcnJvcjsKfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgdXBkYXRlX2RldmljZXNf
aWZfbmVlZGVkKCkKICoKICogRGVzY3JpcHRpb246IFJlcnVuIC9kZXYvTUFLRURFViBpZiBpdCB3
YXMgbW9kaWZpZWQKICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRl
IENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqIEJST0tFTiBvbiB1cGdyYWRlcyBvZiBwcmltYXJ5
IGZsYXNoCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbnQKdXBkYXRlX2RldmljZXNfaWZfbmVl
ZGVkKHZlY3RvciBkdiwgdmVjdG9yIGZpbGVzX2xpc3QsIGNoYXIgKigqdHJ1ZW5hbWVfZnVuYyko
Y2hhciAqKSkKewogICAgaW50IGk7CiAgICBpbnQgcmMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8
IHZlY3Rvcl9tYXgoZmlsZXNfbGlzdCk7ICsraSkgewogICAgICAgIGNoYXIgKmRzdF9maWxlID0g
KCp0cnVlbmFtZV9mdW5jKSh2ZWN0b3JfbG9va3VwX2luZGV4KGZpbGVzX2xpc3QsIGkpKTsKICAg
ICAgICBpZiAoIXN0cmNtcChkc3RfZmlsZSwgIi9kZXYvTUFLRURFViIpKSB7CiAgICAgICAgICAg
IG15X3ByaW50KCJVcGRhdGluZyBkZXZpY2VzLi4uIik7CiAgICAgICAgICAgIHJjID0gc3lzdGVt
KCJjZCAvZGV2ICYmIC4vTUFLRURFViBhbGwgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCIpOwogICAg
ICAgICAgICBteV9wcmludCgiZG9uZVxuIik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0K
ICAgIH0KICAgIHJldHVybiByYzsKfQojZW5kaWYKCi8vZGlzYWJsZSB0aGUgcHJvbSB1cGdyYWRl
IHVudGlsIEkgZmlndXJlIGEgd2F5IHRvIGRvIHRoaXMgCiNpZiAwCi8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFt
ZSA6ICAgdXBncmFkZV9wcm9tX3Nsb3RjcHUoKQogKgogKiBEZXNjcmlwdGlvbjogdXBncmFkZSBw
cm9tIGZvciB0aGUgc3BlY2lmaWVkIHNsb3QvY3B1CiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBL
b3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNi8yNi8wMgogKgogKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAq
LwpzdGF0aWMgaW50CnVwZ3JhZGVfcHJvbV9zbG90Y3B1KGludCBzbG90LCBpbnQgY3B1LCBjaGFy
ICpmaWxlKQp7CiAgICBhc3NlcnQodmFsaWRfc2xvdF9jcHUoc2xvdCwgY3B1KSk7CiAgICByZXR1
cm4gY29udmVydF9yYyhkb19zeXN0ZW0oIi91c3IvbG9jYWwvYWdpbGUvYmluL3Byb20tdXBncmFk
ZSAlZCAlZCAlcyIsCgkJCQlzbG90LCBjcHUsIGZpbGUgPyBmaWxlIDogIiIpKTsKfQoKLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogKiBOYW1lIDogICB1cGdyYWRlX3Byb20oKQogKgogKiBEZXNjcmlwdGlvbjogVXBncmFk
ZSB0aGUgcHJvbSBvbiB0aGUgZ2l2ZW4gYm9hcmQuIFJldHVybnMgMCBpZiBwcm9tCiAqIHVwZ3Jh
ZGUgc3VjY2Vzc2Z1bGx5IGZvciBhbGwgY3B1cy4KICoKICogQ3JlYXRlZCBieTogIE1heGltIEtv
emxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICov
CnN0YXRpYyBpbnQKdXBncmFkZV9wcm9tKGNoYXIgKmJvYXJkLCBjaGFyICpmaWxlKQp7CiAgICBp
bnQgc2xvdCwgY3B1X21pbiwgY3B1X21heCwgY3B1LCBlcnJvciA9IDA7CiAgICBpZiAoIXN0cmNt
cChib2FyZCwgInRvc2hpYmEiKSkgewogICAgICAgIHNsb3QgPSAwOwogICAgICAgIGNwdV9taW4g
PSAxOwogICAgICAgIGNwdV9tYXggPSAxOwogICAgfQogICAgZWxzZSBpZiAoIXN0cmNtcChib2Fy
ZCwgInNzYyIpKSB7CiAgICAgICAgc2xvdCA9IDA7CiAgICAgICAgY3B1X21pbiA9IDA7CiAgICAg
ICAgY3B1X21heCA9IDA7CiAgICB9CiAgICBlbHNlIGlmICghc3RyY21wKGJvYXJkLCAidHhyeCIp
KSB7CiAgICAgICAgc2xvdCA9IDE7CiAgICAgICAgY3B1X21pbiA9IDA7CiAgICAgICAgY3B1X21h
eCA9IDA7CiAgICB9CiAgICBlbHNlIGlmICghc3RyY21wKGJvYXJkLCAiZnAiKSkgewogICAgICAg
IHNsb3QgPSAxOwogICAgICAgIGNwdV9taW4gPSAzOwogICAgICAgIGNwdV9tYXggPSAzOwogICAg
fQogICAgZWxzZSBpZiAoIXN0cmNtcChib2FyZCwgInNwIikpIHsKICAgICAgICBzbG90ID0gMjsK
ICAgICAgICBjcHVfbWluID0gMDsKI2lmZGVmIEJPQkNBVAogICAgICAgIGNwdV9tYXggPSAwOwoj
ZWxzZQogICAgICAgIGNwdV9tYXggPSAzOwojZW5kaWYKICAgIH0KICAgIGVsc2UgewogICAgICAg
IHJldHVybiAxOwogICAgfQogICAgZm9yIChjcHUgPSBjcHVfbWluOyBjcHUgPD0gY3B1X21heDsg
KytjcHUpIHsKICAgICAgICBpZiAodXBncmFkZV9wcm9tX3Nsb3RjcHUoc2xvdCwgY3B1LCBmaWxl
KSAhPSAwKSB7CiNpZiBBTExPV19QUk9NX1VQR1JBREVfRkFJTAogICAgICAgICAgICBlcnJvciA9
IDA7CiNlbHNlCiAgICAgICAgICAgIHNwcmludGYoc3lzX2xvZ19zdHIsIkZhaWxlZCB0byB1cGdy
YWRlIHRoZSBwcm9tIGZvciBzbG90ICVkIGNwdSAlZFxuIiwKICAgICAgICAgICAgICAgICAgIHNs
b3QsIGNwdSk7CiAgICAgICAgICAgIG15X3ByaW50KHN5c19sb2dfc3RyKTsKICAgICAgICAgICAg
bXlfcHJpbnQoIkFmdGVyIHRoZSBzeXN0ZW0gY29tZXMgdXAgYWZ0ZXIgcmVib290LCB2ZXJpZnkg
dGhhdCB0aGUgc2xvdC9jcHVcbiIpOwogICAgICAgICAgICBteV9wcmludCgiaXMgaW4gVVAgc3Rh
dGUgYW5kIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kOlxuIik7CiAgICAgICAgICAgIHNw
cmludGYoc3lzX2xvZ19zdHIsInN5c3RlbSBwcm9tdXBncmFkZSAlZCAlZFxuIiwgc2xvdCwgY3B1
KTsKICAgICAgICAgICAgbXlfcHJpbnQoc3lzX2xvZ19zdHIpOwogICAgICAgICAgICBlcnJvciA9
IDE7CiNlbmRpZiAgICAgICAgICAKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gZXJyb3I7Cn0K
CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIHVwZ3JhZGVfcHJvbXNfaWZfbmVlZGVkKCkKICoKICog
RGVzY3JpcHRpb246IFVwZ3JhZGUgdGhlIHByb21zIGZvciB0aGUgYm9hcmRzIHdoaWNoIGhhZCB0
aGVpcgogKiBQUk9NcyBtb2RpZmllZC4KICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNr
eQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRp
YyBpbnQKdXBncmFkZV9wcm9tc19pZl9uZWVkZWQodmVjdG9yIGR2LCB2ZWN0b3IgZmlsZXNfbGlz
dCwgY2hhciAqKCp0cnVlbmFtZV9mdW5jKShjaGFyICopKQp7CiAgICBpbnQgcmMgPSAwOwogICAg
aW50IGk7CgogICAgZm9yIChpID0gMDsgaSA8IHZlY3Rvcl9tYXgoZmlsZXNfbGlzdCk7ICsraSkg
ewogICAgICAgIGNoYXIgKmRzdF9maWxlID0gKCp0cnVlbmFtZV9mdW5jKSh2ZWN0b3JfbG9va3Vw
X2luZGV4KGZpbGVzX2xpc3QsIGkpKTsKICAgICAgICBjaGFyICpyb290X2RzdF9maWxlID0gdXBn
cmFkZV90cnVlbmFtZSgKICAgICAgICAgICAgdmVjdG9yX2xvb2t1cF9pbmRleChmaWxlc19saXN0
LCBpKSk7CiAgICAgICAgc3RydWN0IGRlc2NyaXB0b3IgKmRlc2NyID0gZ2V0X2ZpbGVfZGVzY3Jp
cHRvcihkdiwgcm9vdF9kc3RfZmlsZSk7CiAgICAgICAgaWYgKGlzX3Byb20oZGVzY3IpIHx8IGlz
X2JpZ3Byb20oZGVzY3IpKSB7CiAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICBmb3IgKGog
PSAwOyBqIDwgdmVjdG9yX21heChkdik7ICsraikgewogICAgICAgICAgICAgICAgc3RydWN0IGRl
c2NyaXB0b3IgKmRlc2NyID0gdmVjdG9yX2xvb2t1cF9pbmRleChkdiwgaik7CiAgICAgICAgICAg
ICAgICBpZiAoIXN0cmNtcChkZXNjci0+bmFtZSwgcm9vdF9kc3RfZmlsZSkgJiYgaXNfYmlncHJv
bShkZXNjcikpIHsKI2lmZGVmIEJPQkNBVAogICAgICAgICAgICAgICAgICAgIC8qIERvbid0IHVw
Z3JhZGUgYmlnIGZsYXNoIHRocm91Z2ggU1NDCiAgICAgICAgICAgICAgICAgICAgICogSXQgd2ls
bCBiZSBkb25lIHRocm91Z2ggRkMKICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RyY21wKGRlc2NyLT5ib2FyZCwgInNzYyIpKQojZW5kaWYKICAgICAgICAg
ICAgICAgICAgICByYyB8PSB1cGdyYWRlX3Byb20oZGVzY3ItPmJvYXJkLCBkc3RfZmlsZSk7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8
IHZlY3Rvcl9tYXgoZHYpOyArK2opIHsKICAgICAgICAgICAgICAgIHN0cnVjdCBkZXNjcmlwdG9y
ICpkZXNjciA9IHZlY3Rvcl9sb29rdXBfaW5kZXgoZHYsIGopOwogICAgICAgICAgICAgICAgaWYg
KCFzdHJjbXAoZGVzY3ItPm5hbWUsIHJvb3RfZHN0X2ZpbGUpICYmIGlzX3Byb20oZGVzY3IpKSB7
CiNpZmRlZiBCT0JDQVQKICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCB1cGdyYWRlIHNtYWxs
IHByb20gdGhyb3VnaCBTUAogICAgICAgICAgICAgICAgICAgICAqIGJlY2F1c2UgaXQgd291bGQg
YmUgcmVkdW5kYW50IChzYW1lIGFzIFNTQyBwcm9tKQogICAgICAgICAgICAgICAgICAgICAqLwog
ICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAoZGVzY3ItPmJvYXJkLCAic3AiKSkKI2VuZGlm
CiAgICAgICAgICAgICAgICAgICAgcmMgfD0gdXBncmFkZV9wcm9tKGRlc2NyLT5ib2FyZCwgZHN0
X2ZpbGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQog
ICAgcmV0dXJuIHJjOwp9CiNlbmRpZgoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgcmVib290X2Jv
YXJkcygpCiAqCiAqIERlc2NyaXB0aW9uOiByZWJvb3Qgc2xvdHMgMSBhbmQgMgogKgogKiBDcmVh
dGVkIGJ5OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDUvMTQvMDIK
ICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIGludApyZWJvb3RfYm9hcmRzKCBjaGFyICooKnRydW5h
bWVfZnVuYykoY2hhciAqKSkKewogICAgY2hhc3Npc2RNc2dSZWJvb3RSZXFfdCBtc2c7CiAgICBt
eV9wcmludCgiUmVib290aW5nIGJvYXJkcy4uLiIpOwogICAgbXNnLmhkci5taWQgPSBDSEFTU0lT
RF9SRUJPT1RfUkVROwogICAgbXNnLnJlYm9vdF90eXBlID0gQ01fUkVCT09UX1RZUEVfU0xPVDsK
ICAgIG1zZy5zbG90ID0gMTsKICAgIG1zZy5zbGljZSA9IDA7CiAgICBuZnhzaF9zZW5kKCZtc2cs
IHNpemVvZihtc2cpLCAiY20iLCAxLCAwLCAxLCBOVUxMLCBOVUxMLCAwLAogICAgICAgIE5GWFNI
X1NFTkRfQUdJTEUpOwogICAgbXNnLnNsb3QgPSAyOwogICAgbmZ4c2hfc2VuZCgmbXNnLCBzaXpl
b2YobXNnKSwgImNtIiwgMSwgMCwgMSwgTlVMTCwgTlVMTCwgMCwKICAgICAgICBORlhTSF9TRU5E
X0FHSUxFKTsKICAgIG15X3ByaW50KCJkb25lXG4iKTsKICAgIHJldHVybiAwOwp9CgoKLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogKiBOYW1lIDogICByZWJvb3RfY29sZCgpCiAqCiAqIERlc2NyaXB0aW9uOiBEbyBhIGNv
bGQgcmVib290IG9mIHRoZSBzeXN0ZW0KICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNr
eQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRp
YyB2b2lkCnJlYm9vdF9jb2xkKCkKewogICAgY2hhciBjb21tYW5kWzI1Nl07CgogICAgbXlfcHJp
bnQoIlJlYm9vdGluZyB0aGUgc3lzdGVtLi4uXG4iKTsKICAgIC8qIGlmIHVwZ3JhZGluZyB0byBz
ZWNvbmRhcnksIHRlbGwgcmVib290IHRvIHN3aXRjaCB0aGUgZGlza3MgKi8KCS8vQW55J3MgZG8g
c3lzdGVtCiAgICAvL2RvX3N5c3RlbSgiL3NiaW4vcmVib290IC1jICVzXG4iLCB1cGdyYWRlX3Nl
Y29uZGFyeSA/ICItcyIgOiAiIik7CiAgICBzcHJpbnRmKGNvbW1hbmQsICIvc2Jpbi9yZWJvb3Qg
LWMgJXNcbiIsIHVwZ3JhZGVfc2Vjb25kYXJ5ID8gIi1zIiA6ICIiKTsKICAgIHN5c3RlbShjb21t
YW5kKTsKfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgdXBncmFkZV9kaXJlY3RvcmllcygpCiAq
CiAqIERlc2NyaXB0aW9uOiBVcGRhdGUgZGlyZWN0b3JpZXMgYWNjb3JkaW5nIHRvIG5ldyBkaXN0
IGZpbGUuCiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVh
dGVkOiAgICAwNi8yNi8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgaW50CnVwZ3JhZGVfZGly
ZWN0b3JpZXMoY2hhciAqbXRyZWVfZmlsZSkKewogICAgY2hhciBjbWRbTUFYUEFUSExFTl07CiAg
ICBpbnQgcmM7CgogICAgbXlfcHJpbnQoIlVwZGF0aW5nIGRpcmVjdG9yaWVzLi4uIik7CiAgICBz
cHJpbnRmKGNtZCwgIi91c3Ivc2Jpbi9tdHJlZSAtcWRVZWYgJXMgLXAgJXMiLCBtdHJlZV9maWxl
LAogICAgICAgICAgICB1cGdyYWRlX3NlY29uZGFyeSA/IHNlY29uZGFyeV9tb3VudCA6ICIvIik7
CiAgICByYyA9IHN5c3RlbShjbWQpOwoKCS8qIEFuZHkncyBkbyBzeXN0ZW0KICAgIHJjID0gZG9f
c3lzdGVtKCIvdXNyL3NiaW4vbXRyZWUgLXFkVWVmICVzIC1wICVzIiwgbXRyZWVfZmlsZSwKICAg
ICAgICAgICAgdXBncmFkZV9zZWNvbmRhcnkgPyBzZWNvbmRhcnlfbW91bnQgOiAiLyIpOwoJKi8K
CiAgICBteV9wcmludCgiZG9uZVxuIik7CiAgICByZXR1cm4gY29udmVydF9yYyhyYyk7Cn0KCgov
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAqIE5hbWUgOiAgIHNodXRkb3duX2FsbCgpCiAqCiAqIERlc2NyaXB0aW9uOiBT
aHV0ZG93biB0aGUgc3lzdGVtIHNvZnR3YXJlIGFuZCBraWxsIHRoZSBkYWVtb25zIHNvCiAqIHdl
IGNhbiBwcm9jZWVkIHdpdGggdXBncmFkZSBpbiBwZWFjZS4KICoKICogQ3JlYXRlZCBieTogIE1h
eGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA2LzI2LzAyCiAqCiAqLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KICovCnZvaWQKc2h1dGRvd25fYWxsKHZvaWQpCnsKICAgIGNoYXIgYnVmWzIwXTsKCiAgICAv
KiBTdG9wIHRoZSBob3N0aWRkCiAgICAgKi8KICAgIHN0cmNweShidWYsICJzdXNwZW5kIik7CiAg
ICBuZnhzaF9zZW5kKGJ1Ziwgc3RybGVuKGJ1ZiksICJob3N0aWQiLAogICAgICAgICAgICAgICBO
RlhfU1NDX1VOSVgsIFNTQ19TTE9ULCBNR01UUExBTkUsIF80c2VjLCAwLCAwLAogICAgICAgICAg
ICAgICBORlhTSF9TRU5EX0FHSUxFKTsKICAgIHNodXRkb3duX3N5c3RlbSgpOwogICAgc2h1dGRv
d25fcG0oKTsKICAgIHNodXRkb3duX2luZXRkKCk7Cn0KCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAg
IHJlYm9vdF9hbGwoKQogKgogKiBEZXNjcmlwdGlvbjogcmVzZXQgRlAgYW5kIFNQIGFuZCByZWJv
b3QgU1NDLgogKgogKiBDcmVhdGVkIGJ5OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3Jl
YXRlZDogICAgMDYvMjYvMDIKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8Kdm9pZApyZWJvb3RfYWxsKHZvaWQp
CnsKICAgIHJlYm9vdF9ib2FyZHMoTlVMTCk7CiAgICByZWJvb3RfY29sZCgpOwp9CgoKLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogKiBOYW1lIDogICBub2lzeV9tYWtlX2FsbGZzX3dyaXRhYmxlCiAqCiAqIERlc2NyaXB0
aW9uOiBSZW1vdW50IGxvY2FsIGZpbGVzeXN0ZW1zIHdyaXRhYmxlIG1ha2luZyBzb21lIG5vaXNl
CiAqCiAqIENyZWF0ZWQgYnk6ICBNYXhpbSBLb3psb3Zza3kKICoKICogRGF0ZSBDcmVhdGVkOiAg
ICAwOC8xNS8wMgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwppbnQKbm9pc3lfbWFrZV9hbGxmc193cml0YWJs
ZSh2b2lkKQp7CiAgICBpbnQgcnY7CiAgICBteV9wcmludCgiUmVtb3VudGluZyB0aGUgbG9jYWwg
ZmlsZXN5c3RlbSByZWFkLXdyaXRlLi4uIik7CiAgICBydiA9IG1ha2VfYWxsZnNfd3JpdGFibGUo
KTsKICAgIGlmIChydiA9PSAwKQogICAgICAgIG15X3ByaW50KCJkb25lXG4iKTsKICAgIGVsc2UK
ICAgICAgICBteV9wcmludCgiZmFpbGVkXG4iKTsKICAgIHJldHVybiBydjsKfQoKCgovKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAqIE5hbWUgOiAgIGNvbXBsZXRlX3VwZ3JhZGUoKQogKgogKiBEZXNjcmlwdGlvbjogVGhl
IHdvcnN0LWNhc2UgdXBncmFkZSAtIHNodXRkb3duIGFuZCByZXN0YXJ0IGV2ZXJ5dGhpbmcKICoK
ICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1
LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbnQKY29tcGxldGVfdXBncmFkZSh2ZWN0
b3IgZHYsIGNoYXIgKigqdHJ1ZW5hbWVfZnVuYykoY2hhciAqKSwKICAgICAgICAgICAgICAgICBj
aGFyICptdHJlZV9maWxlKQp7CiAgICBpbnQgcmMgPSAwOwogICAgY2hhciBjbWRbMjU2XTsKCWNo
YXIgY29tbWFuZFtNQVhQQVRITEVOXTsKICAgIGNtTXNnSGVhcnRiZWF0Q29udHJvbFJlcV90IHJl
cTsKI2lmZGVmIEJPQkNBVAogICAgaW50IGk7CiAgICBpcG1fbGlua19jaGFuZ2Vfc3RhdHVzX3Qg
ICBpcG1fcmVxLCBpcG1fcnNwOwojZWxzZQogICAgY2hhciBidWZbMjBdOwojZW5kaWYKCiAgICBp
ZiAoIXVwZ3JhZGVfc2Vjb25kYXJ5KSB7CiAgICAgICAgYnplcm8oJnJlcSwgc2l6ZW9mKHJlcSkp
OwogICAgICAgIHJlcS5oZHIuc3JjU2xvdCA9IDA7CiAgICAgICAgcmVxLmhkci5zcmNDcHUgPSAw
OwogICAgICAgIHJlcS5oZHIuc3JjQXBwID0gCiAgICAgICAgcmVxLmhkci5zcmNQbGFuZSA9IE1H
TVRQTEFORTsKICAgICAgICByZXEuaGRyLm1pZCA9IENNX1NFVF9IRUFSVEJFQVRfT0ZGOwogICAg
ICAgIHJlcS5mZWF0dXJlX2VuID0gMDsKICAgICAgICBuZnhzaF9zZW5kKCZyZXEsIHNpemVvZihy
ZXEpLCAiY20iLCAwLCAxLCBNR01UUExBTkUsCiAgICAgICAgICAgICAgICAgICAwLCBOVUxMLCAw
LCBORlhTSF9TRU5EX0FHSUxFKTsKICAgICAgICBFX0xPRyhjbGFzc18xLCBub3RpY2VfcywgZWVl
X2dldEFwcGxpY2F0aW9uSWQoIm5meHNoIiksIDAsIDAsIDAsIAogICAgICAgICAgICAgKCJTeXN0
ZW0gd2lsbCByZWJvb3QgZHVlIHRvIHN5c3RlbSB1cGdyYWRlLlxuIikpOwogICAgICAgIGlmIChz
eXNfdXBncmFkZSkgewogICAgICAgICAgICBmcHJpbnRmKHN5c191cGdyYWRlLCJTeXN0ZW0gd2ls
bCByZWJvb3QgZHVlIHRvIHN5c3RlbSB1cGdyYWRlLlxuIik7CiAgICAgICAgICAgIGZmbHVzaChz
eXNfdXBncmFkZSk7CiAgICAgICAgfQojaWZuZGVmIEJPQkNBVAogICAgICAgIHNsZWVwX2FjY3Vy
YXRlbHkoMyk7CiAgICAgICAgLyogUmVib290IEZQIGFuZCBTUCBmb3IgY2x1c3RlciBmYWlsb3Zl
ciBhbmQgd2FpdCBmb3IgdGhlbQogICAgICAgICAqIHRvIGNvbWUgYmFjayB0byByZXN1bWUgdXBn
cmFkZS4KICAgICAgICAgKi8KICAgICAgICByZWJvb3RfYm9hcmRzKE5VTEwpOwojZWxzZQogICAg
ICAgIGJ6ZXJvKCZpcG1fcmVxLCBzaXplb2YoaXBtX2xpbmtfY2hhbmdlX3N0YXR1c190KSk7CiAg
ICAgICAgYnplcm8oJmlwbV9yc3AsIHNpemVvZihpcG1fbGlua19jaGFuZ2Vfc3RhdHVzX3QpKTsK
ICAgICAgICBpcG1fcmVxLmhkci5pcG1oX210eXBlID0gSVBNX01TR19MSU5LX0RJUzsKICAgICAg
ICBpcG1fcmVxLmhkci5pcG1oX3NpemUgPSBzaXplb2YoaXBtX2xpbmtfY2hhbmdlX3N0YXR1c190
KTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgICAgICAgICAgIHN0cmNweShp
cG1fcmVxLmxpbmtfbmFtZSwgZnBfcG9ydHNbaV0pOwogICAgICAgICAgICBpZiAobmZ4c2hfc2Vu
ZCgmaXBtX3JlcSwgc2l6ZW9mKGlwbV9saW5rX2NoYW5nZV9zdGF0dXNfdCksICJpcG0iLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBORlhfTkZQX1RYUlgxLCBORlhfU0xPVFRZUEVfTkZQLCBN
R01UUExBTkUsIDMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZpcG1fcnNwLCBzaXplb2Yo
aXBtX2xpbmtfY2hhbmdlX3N0YXR1c190KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgTkZY
U0hfU0VORF9BR0lMRSkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgc2l6ZW9mKGlwbV9s
aW5rX2NoYW5nZV9zdGF0dXNfdCkpIHsKICAgICAgICAgICAgICAgIHNwcmludGYoc3lzX2xvZ19z
dHIsIlRpbWVvdXQgZGlzYWJsaW5nIEZQIHBvcnQgJXNcbiIsIGlwbV9yZXEubGlua19uYW1lKTsK
ICAgICAgICAgICAgICAgIG15X3ByaW50KHN5c19sb2dfc3RyKTsKICAgICAgICAgICAgfQogICAg
ICAgIH0KLyoKICAgICAgICBleGVjdXRlX2NvbW1hbmQoIi91c3IvbG9jYWwvYWdpbGUvYmluL3N0
b3JhZ2UiLCA0LCAiY29udHJvbCIsICJwb3J0IiwKICAgICAgICAgICAgICAgICAgICAgICAgImRp
c2FibGUiLCAib25jZSIsIE5VTEwpOwoqLwojZW5kaWYKICAgICAgICBleGVjdXRlX2NvbW1hbmQo
Ii91c3IvbG9jYWwvYWdpbGUvYmluL2NoYXNzaXMiLCAyLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgIndkIiwgImRpc2FibGUiLCBOVUxMKTsKLyoKICAgICAgICBzbGVlcF9hY2N1cmF0ZWx5KDMp
OwoqLwogICAgICAgIHNodXRkb3duX3BtKCk7CiNpZm5kZWYgQk9CQ0FUCiAgICAgICAgc2xlZXBf
YWNjdXJhdGVseSg5MCk7CiNlbmRpZgogICAgICAgIHNodXRkb3duX3N5c3RlbSgpOwogICAgICAg
IHNodXRkb3duX2luZXRkKCk7CiAgICB9CgkvL0NhbGwgbXkgc2NyaXB0IGhlcmUuIFNjcmlwdCBu
ZWVkcyB0byBoYW5kbGUgTUtERVYgYW5kIFByb20gVXBncmFkZXMKICAgIGlmICgodXBncmFkZV9z
ZWNvbmRhcnkgfHwgKHJjID0gbm9pc3lfbWFrZV9hbGxmc193cml0YWJsZSgpKSA9PSAwKQogICAg
ICAgICYmIChyYyA9IHVwZ3JhZGVfZGlyZWN0b3JpZXMobXRyZWVfZmlsZSkpID09IDApIHsKCQkv
LyBzY3JpcHQgd2lsbCByZW1vdW50CgkJdW1vdW50X3BhdGNoKCkgOwogICAgICAgIG15X3ByaW50
KCJDYWxsaW5nIG5ldyBpbnN0YWxsIHNjcmlwdC4uLiIpOwoKCQkvKiBBbmR5J3MgZG8gc3lzdGVt
CiAgICAgICAgZG9fc3lzdGVtKCIvdXNyL2xvY2FsL2FnaWxlL2Jpbi92ZXJpZnlfaW5zdGFsbC5z
aCAtZiAlcyAlcyAtciIsCgkJICAgICAgICAgIHBhdGNoX2xvY2F0aW9uLCB1cGdyYWRlX3NlY29u
ZGFyeSA/ICItcyIgOiAiLXAiKSA7CgkJKi8KCiAgICAJc3ByaW50Zihjb21tYW5kLCAiL3Vzci9s
b2NhbC9hZ2lsZS9iaW4vdmVyaWZ5X2luc3RhbGwuc2ggLWYgJXMgJXMgLXIiLAoJCSAgICAgICAg
cGF0Y2hfbG9jYXRpb24sIHVwZ3JhZGVfc2Vjb25kYXJ5ID8gIi1zIiA6ICItcCIpIDsKCQlwcmlu
dGYoIiVzXG4iLGNvbW1hbmQpIDsKICAgICAgICBzeXN0ZW0oY29tbWFuZCk7CgogICAgICAgIGlm
ICh1cGdyYWRlX3NlY29uZGFyeSkgewogICAgICAgICAgICBzeW5jKCk7CiNpZiAwCi8qIEBAQCBz
aG91bGQgYmUgc2FmZXIgd2F5IHRvIGNvcHkgY29uZmlndXJhdGlvbiBmaWxlcyBmcm9tIGEKICog
bGl2ZSBzeXN0ZW0uCiAqLwogICAgICAgICAgICBzaHV0ZG93bl9hbGwoKTsKI2VuZGlmCgogICAg
ICAgICAgICBpZiAoc3lzX3VwZ3JhZGUpIHsKICAgICAgICAgICAgICAgIGZwcmludGYoc3lzX3Vw
Z3JhZGUsIlVwZGF0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMsIFN0YXJ0IHRpbWU6ICVzXG4iLGdl
dF90aW1lKCkpOwogICAgICAgICAgICAgICAgZmZsdXNoKHN5c191cGdyYWRlKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgICBteV9wcmludCgiVXBkYXRpbmcgY29uZmlndXJhdGlvbiBmaWxlc1xu
Iik7CgogICAgICAgICAgICBkb19jb3B5X2ZpbGVzKCIvIiwgc2Vjb25kYXJ5X21vdW50LCBzeXNf
Y29uZmlnX2ZpbGVzKTsKICAgICAgICAgICAgc3ByaW50ZihjbWQsICIvdXNyL3NiaW4vcHdkX21r
ZGIgLWQgJXMvZXRjICVzL2V0Yy9tYXN0ZXIucGFzc3dkIiwKICAgICAgICAgICAgICAgICAgICBz
ZWNvbmRhcnlfbW91bnQsIHNlY29uZGFyeV9tb3VudCk7CiAgICAgICAgICAgIHN5c3RlbShjbWQp
OwoKCQkJLyogQW5keSdzIGRvX3N5c3RlbQogICAgICAgICAgICBkb19zeXN0ZW0oIi91c3Ivc2Jp
bi9wd2RfbWtkYiAtZCAlcy9ldGMgJXMvZXRjL21hc3Rlci5wYXNzd2QiLAogICAgICAgICAgICAg
ICAgICAgIHNlY29uZGFyeV9tb3VudCwgc2Vjb25kYXJ5X21vdW50KTsKICAgICAgICAgICAgKi8K
CiAgICAgICAgICAgIGlmIChzeXNfdXBncmFkZSkgewogICAgICAgICAgICAgICAgZnByaW50Zihz
eXNfdXBncmFkZSwiVXBkYXRpbmcgY29uZmlndXJhdGlvbiBmaWxlcywgRW5kIHRpbWU6ICVzXG4i
LGdldF90aW1lKCkpOwogICAgICAgICAgICAgICAgZmZsdXNoKHN5c191cGdyYWRlKTsKICAgICAg
ICAgICAgfQogICAgICAgIH0gZWxzZSB7CiNpZm5kZWYgQk9CQ0FUCiAgICAgICAgICAgIC8qIFN0
b3AgdGhlIGhvc3RpZGQgYmVmb3JlIHJlYm9vdGluZyBib2FyZHMgc28gdGhleSBjYW4ndCB0cnkK
ICAgICAgICAgICAgICogdG8gZG93bmxvYWQgd2hpbGUgU1NDIGlzIGdvaW5nIGRvd24uCiAgICAg
ICAgICAgICAqLwogICAgICAgICAgICBzdHJjcHkoYnVmLCAic3VzcGVuZCIpOwogICAgICAgICAg
ICBuZnhzaF9zZW5kKGJ1Ziwgc3RybGVuKGJ1ZiksICJob3N0aWQiLAogICAgICAgICAgICAgICAg
ICAgICAgIE5GWF9TU0NfVU5JWCwgU1NDX1NMT1QsIE1HTVRQTEFORSwgXzRzZWMsIDAsIDAsCiAg
ICAgICAgICAgICAgICAgICAgICAgTkZYU0hfU0VORF9BR0lMRSk7CiAgICAgICAgICAgIHJlYm9v
dF9ib2FyZHModHJ1ZW5hbWVfZnVuYyk7CiNlbmRpZgoJCQlpZiAoc3lzX3VwZ3JhZGUpIHsKCQkJ
CWZwcmludGYoc3lzX3VwZ3JhZGUsICJTeXN0ZW0gVXBncmFkZSBjb21wbGV0ZWQgYXQ6ICVzXG4i
LAoJCQkJCWdldF90aW1lKCkpOwoJCQkJZmZsdXNoKHN5c191cGdyYWRlKTsKCQkJfQogICAgICAg
ICAgICByZWJvb3RfY29sZCgpOwogICAgICAgIH0KCgkJbXlfcHJpbnQoIlVwZ3JhZGUgb2YgdGhl
IHN0YW5kYnkgZmxhc2ggY29tcGxldGVkXG4iKTsKCQlpZiAoc3lzX3VwZ3JhZGUpIHsKCQkJZnBy
aW50ZihzeXNfdXBncmFkZSwgIlN5c3RlbSBVcGdyYWRlIGNvbXBsZXRlZCBhdDogJXNcbiIsCgkJ
CQlnZXRfdGltZSgpKTsKCQkJZmZsdXNoKHN5c191cGdyYWRlKTsKCQl9CgogICAgfQoKICAgIHJl
dHVybiByYzsKfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6ICAgbmVlZHNfdXBncmFkZSgpCiAqCiAq
IERlc2NyaXB0aW9uOiBTdG9yZXMgdHJ1ZSBpbiB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSB0
aGUgYXJndW1lbnQKICogbmVlZF91cGdyYWRlX3B0ciBpZiB0aGUgZmlsZSBuZWVkcyB0byBiZSB1
cGdyYWRlZC4KICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENy
ZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbnQKbmVlZHNfdXBn
cmFkZSh2ZWN0b3IgZHYsIGNoYXIgKnNyY19maWxlLAogICAgICAgICAgICAgIGNoYXIgKmRzdF9m
aWxlLCBzdHJ1Y3QgZGVzY3JpcHRvciAqZGVzY3IsIGludCAqbmVlZF91cGdyYWRlX3B0cikKewog
ICAgaW50IG5lZWRfdXBncmFkZSA9IDA7CiAgICBpbnQgcmMgPSBDTURfU1VDQ0VTUzsKCiAgICBz
cHJpbnRmKHN5c19sb2dfc3RyLCJjaGVja2luZyAlcy4uLiIsIGRzdF9maWxlKTsKICAgIG15X3By
aW50KHN5c19sb2dfc3RyKTsKICAgIGlmIChpc19jb25maWcoZGVzY3IpKSB7CiAgICAgICAgbXlf
cHJpbnQoInVzZXIgZGF0YSIpOwogICAgfSBlbHNlIGlmIChpc192ZXJzaW9uKGRlc2NyKSkgewog
ICAgICAgIG15X3ByaW50KCJ2ZXJzaW9uIGZpbGUiKTsKICAgICAgICBuZWVkX3VwZ3JhZGUgPSAx
OwogICAgfSBlbHNlIHsKICAgICAgICBzdHJ1Y3Qgc3RhdCBzcmNfc3QsIGRzdF9zdDsKICAgICAg
ICBpZiAobHN0YXQoc3JjX2ZpbGUsICZzcmNfc3QpID09IDApIHsKICAgICAgICAgICAgaWYgKGxz
dGF0KGRzdF9maWxlLCAmZHN0X3N0KSA8IDApIHsKICAgICAgICAgICAgICAgIG15X3ByaW50KCJu
ZXcgZmlsZSIpOwogICAgICAgICAgICAgICAgbmVlZF91cGdyYWRlID0gMTsKICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChTX0lTUkVHKHNyY19zdC5zdF9tb2RlKSAmJiBT
X0lTUkVHKGRzdF9zdC5zdF9tb2RlKSkgewoJCQkJCXJjID0gZG9fc3lzdGVtKCJjbXAgLXMgJXMg
JXMiLCBzcmNfZmlsZSwgZHN0X2ZpbGUpOwoJCQkJCXJjID0gcmMgPj4gODsKCQkJCQlpZiAocmMg
PT0gMSkgewoJCQkJCQkJbmVlZF91cGdyYWRlID0gMTsKCQkJCQkJCXJjID0gQ01EX1NVQ0NFU1M7
CgkJCQkJCQlteV9wcmludCgibmVlZHMgdXBncmFkZSIpOwoJCQkJCX0gZWxzZSBpZiAocmMgPT0g
MCkgewoJCQkJCQlteV9wcmludCgidXAtdG8tZGF0ZSIpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCW15
X3ByaW50KCJmYWlsZWQgdG8gY29tcGFyZVxuIik7CgkJCQkJfQogICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChTX0lTTE5LKHNyY19zdC5zdF9tb2RlKSkgewogICAgICAgICAgICAgICAgICAgIG15
X3ByaW50KCJzeW1ib2xpYyBsaW5rIik7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgIG15X3ByaW50KCJzcGVjaWFsIGZpbGUiKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJjID0gQ01EX0VSUl9G
QUlMRUQ7CiAgICAgICAgfQogICAgfQogICAgbXlfcHJpbnQoIlxuIik7CiAgICAqbmVlZF91cGdy
YWRlX3B0ciA9IG5lZWRfdXBncmFkZTsKICAgIGlmIChyYyA9PSBDTURfRVJSX0ZBSUxFRCkgewog
ICAgICAgIHNwcmludGYoc3lzX2xvZ19zdHIsIkVycm9yIHdoaWxlIGNoZWNraW5nICVzXG4iLCBk
c3RfZmlsZSk7CiAgICAgICAgbXlfcHJpbnQoc3lzX2xvZ19zdHIpOwogICAgICAgIEVfTE9HKGNs
YXNzXzEsIGVycl9zLCBlZWVfZ2V0QXBwbGljYXRpb25JZCgibmZ4c2giKSwgMCwgMCwgMCwgCiAg
ICAgICAgICAgICAoIkVycm9yIHdoaWxlIGNoZWNraW5nICVzIGR1cmluZyBzeXN0ZW0gdXBncmFk
ZSBvciBjb21wYXJlXG4iLAoJCQkgIGRzdF9maWxlKSk7CiAgICAgICAgaWYgKHN5c191cGdyYWRl
KSB7CiAgICAgICAgICAgIGZwcmludGYoc3lzX3VwZ3JhZGUsCgkJCQkiRXJyb3Igd2hpbGUgY2hl
Y2tpbmcgJXMgZHVyaW5nIHN5c3RlbSB1cGdyYWRlIG9yIGNvbXBhcmVcblxuIiwKCQkJCWRzdF9m
aWxlKTsKICAgICAgICAgICAgZmZsdXNoKHN5c191cGdyYWRlKTsKICAgICAgICB9CiAgICB9CiAg
ICByZXR1cm4gcmM7Cn0KICAgICAgICAgICAgICAgICAgICAgICAgIAoKCi8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICog
TmFtZSA6ICAgbWFrZV9maWxlc190b191cGdyYWRlX2xpc3QoKQogKgogKiBEZXNjcmlwdGlvbjog
TWFrZSB0aGUgbGlzdCBvZiB0aGUgZmlsZXMgd2hpY2ggbmVlZCB0byBiZSB1cGdyYWRlZAogKgog
KiBDcmVhdGVkIGJ5OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDUv
MTQvMDIKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIGludAptYWtlX2ZpbGVzX3RvX3VwZ3JhZGVf
bGlzdCgKICAgIHZlY3RvciBkdiwKICAgIHZlY3RvciBmaWxlc190b191cGdyYWRlLAogICAgdmVj
dG9yIGZpbGVzKQp7CiAgICBpbnQgcmMgPSBDTURfU1VDQ0VTUzsKICAgIGludCBpOwogICAgc3Ry
dWN0IGRlc2NyaXB0b3IgKmRlc2NyID0gTlVMTDsKICAgIGludCBzdGF0ID0gMDsKICAgIGNoYXNz
aXNkTXNnVmVyc2lvblJlcV90IHJlcTsKICAgIGNoYXNzaXNkTXNnVmVyc2lvblJlc3BfdCByZXNw
OwogICAgRklMRSAqZiA9IE5VTEw7IAogICAgY2hhciAqcyA9IE5VTEw7CiAgICBzaXplX3Qgc2l6
ZTsKCiAgICAvKiBHZXQgY3VycmVudCBQUk9NIHZlcnNpb25zIHRvIHNlZSBpZiB1cGdyYWRlIGlz
IG5lY2Vzc2FyeQogICAgICogTm90ZTogd2lsbCB1cGdyYWRlIHByb21zIGlmIGZhaWxlZCB0byBn
ZXQgdmVyc2lvbnMgdG8gY29tcGFyZQogICAgICovCiAgICBiemVybygmcmVzcCwgc2l6ZW9mKHJl
c3ApKTsKICAgIHJlcS5oZHIubWlkID0gQ0hBU1NJU0RfR0VUX1ZFUlNJT05fUkVROwogICAgc3Rh
dCA9IG5meHNoX3NlbmQoJnJlcSwgc2l6ZW9mKHJlcSksCiAgICAgICAgICAgICAgICAgICAgICAi
Y20iLCAwLCAwLCAwLAogICAgICAgICAgICAgICAgICAgICAgXzRzZWMsICZyZXNwLCBzaXplb2Yo
cmVzcCksIE5GWFNIX1NFTkRfQUdJTEUpOwoKICAgIGZvciAoaSA9IDA7IHJjID09IENNRF9TVUND
RVNTICYmIGkgPCB2ZWN0b3JfbWF4KGZpbGVzKTsgKytpKSB7CiAgICAgICAgY2hhciAqc3JjX2Zp
bGUgPSB2ZWN0b3JfbG9va3VwX2luZGV4KGZpbGVzLCBpKTsKICAgICAgICBjaGFyICpkc3RfZmls
ZSA9IGN1cl90cnVlbmFtZV9mdW5jKHNyY19maWxlKTsKICAgICAgICBpbnQgbmVlZF91cGdyYWRl
OwogICAgICAgIGRlc2NyID0gZ2V0X2ZpbGVfZGVzY3JpcHRvcihkdiwgdXBncmFkZV90cnVlbmFt
ZShzcmNfZmlsZSkpOwogICAgICAgIGlmIChpc19wcm9tKGRlc2NyKSB8fCBpc19iaWdwcm9tKGRl
c2NyKSkgewogICAgICAgICAgICByYyA9IG5lZWRzX3VwZ3JhZGUoZHYsIHNyY19maWxlLCBkc3Rf
ZmlsZSwgIGRlc2NyLCAmbmVlZF91cGdyYWRlKTsKICAgICAgICAgICAgaWYgKG5lZWRfdXBncmFk
ZSA9PSAxKSB7CiAgICAgICAgICAgICAgICB2ZWN0b3JfcHVzaChmaWxlc190b191cGdyYWRlLCBz
cmNfZmlsZSk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAg
ICAgICBuZWVkX3VwZ3JhZGUgPSAxOwogICAgICAgICAgICBmID0gTlVMTDsKI2lmZGVmIEJPQkNB
VAogICAgICAgICAgICBpZiAoY29tcGFyZV9kZXNjcl9maWxlKGRlc2NyLCAiL3Vzci9sb2NhbC9h
Z2lsZS9JbWFnZXMvcjlrLmJpbiIpIHx8CiAgICAgICAgICAgICAgICBjb21wYXJlX2Rlc2NyX2Zp
bGUoZGVzY3IsIi91c3IvbG9jYWwvYWdpbGUvSW1hZ2VzL3I5a2ZpbWcuYmluIikpCiNlbGlmIGRl
ZmluZWQoQ09VR0FSKQovL3dlIG5vdCBnb25uYSB1c2UgdGhpcyBleGNlbGxlbnQgc3R1ZmYgb24g
Y291Z2FyIQojZWxzZQogICAgICAgICAgICBpZiAoY29tcGFyZV9kZXNjcl9maWxlKGRlc2NyLCAi
L3Vzci9sb2NhbC9hZ2lsZS9JbWFnZXMvcjdrLmJpbiIpIHx8CiAgICAgICAgICAgICAgICBjb21w
YXJlX2Rlc2NyX2ZpbGUoZGVzY3IsIi91c3IvbG9jYWwvYWdpbGUvSW1hZ2VzL3I3a2ZpbWcuYmlu
IikpCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvKiBDb21wYXJlIHNsb3Qg
MiBQUk9NIHZlcnNpb24gYW5kIFNTQyBQUk9NIHZlcnNpb24gCiAgICAgICAgICAgICAgICAgKiB3
aXRoIHI3ay52ZXJzaW9uIG9yIHI5ay52ZXJzaW9uLiBXaWxsIHVwZ3JhZGUgYWxsIAogICAgICAg
ICAgICAgICAgICogaWYgZWl0aGVyIG5lZWRzIGl0LiAKICAgICAgICAgICAgICAgICAqLwojaWZk
ZWYgQk9CQ0FUCiAgICAgICAgICAgICAgICBmID0gZm9wZW4oIi91c3IvbG9jYWwvYWdpbGUvSW1h
Z2VzL3I5ay52ZXJzaW9uIiwgInIiKTsKI2Vsc2UKICAgICAgICAgICAgICAgIGYgPSBmb3Blbigi
L3Vzci9sb2NhbC9hZ2lsZS9JbWFnZXMvcjdrLnZlcnNpb24iLCAiciIpOwojZW5kaWYKICAgICAg
ICAgICAgICAgIGlmIChmICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICBzID0gZmdldGxu
KGYsICZzaXplKTsKICAgICAgICAgICAgICAgICAgICBpZiAocyAhPSBOVUxMICYmIHNbc2l6ZSAt
IDFdID09ICdcbicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc1tzaXplIC0gMV0gPSAwOwog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHN0cmNtcChzLCByZXNwLnByb21fdmVyW05GWF9T
TE9UVFlQRV9GQ11bMF0pID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoc3Ry
Y21wKHMsIHJlc3AucHJvbV92ZXJbTkZYX1NMT1RUWVBFX1NTQ10KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtORlhfU1NDX1VOSVhdKSA9PSAw
KSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmVlZF91cGdyYWRlID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNl
CiNpZmRlZiBCT0JDQVQKICAgICAgICAgICAgaWYgKGNvbXBhcmVfZGVzY3JfZmlsZShkZXNjciwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi91c3IvbG9jYWwvYWdpbGUvSW1h
Z2VzL3NpYnl0ZV9iYy5iaW4iKSAKICAgICAgICAgICAgICAgIHx8IAogICAgICAgICAgICAgICAg
Y29tcGFyZV9kZXNjcl9maWxlKGRlc2NyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIvdXNyL2xvY2FsL2FnaWxlL0ltYWdlcy9zaWJmaW1nX2JjLmJpbiIpKQojZWxzZQogICAg
ICAgICAgICBpZiAoY29tcGFyZV9kZXNjcl9maWxlKGRlc2NyLCAiL3Vzci9sb2NhbC9hZ2lsZS9J
bWFnZXMvc2lieXRlLmJpbiIpIAogICAgICAgICAgICAgICAgfHwgCiAgICAgICAgICAgICAgICBj
b21wYXJlX2Rlc2NyX2ZpbGUoZGVzY3IsIi91c3IvbG9jYWwvYWdpbGUvSW1hZ2VzL3NpYmZpbWcu
YmluIikpCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvKiBDb21wYXJlIHNs
b3QgMSBQUk9NIHZlcnNpb24gd2l0aCBzaWJ5dGUudmVyc2lvbi4KICAgICAgICAgICAgICAgICAq
LwojaWZkZWYgQk9CQ0FUCiAgICAgICAgICAgICAgICBmID0gZm9wZW4oIi91c3IvbG9jYWwvYWdp
bGUvSW1hZ2VzL3NpYnl0ZV9iYy52ZXJzaW9uIiwgInIiKTsKI2Vsc2UKICAgICAgICAgICAgICAg
IGYgPSBmb3BlbigiL3Vzci9sb2NhbC9hZ2lsZS9JbWFnZXMvc2lieXRlLnZlcnNpb24iLCAiciIp
OwojZW5kaWYKICAgICAgICAgICAgICAgIGlmIChmICE9IE5VTEwpIHsKICAgICAgICAgICAgICAg
ICAgICBzID0gZmdldGxuKGYsICZzaXplKTsKICAgICAgICAgICAgICAgICAgICBpZiAocyAhPSBO
VUxMICYmIHNbc2l6ZSAtIDFdID09ICdcbicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc1tz
aXplIC0gMV0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyY21wKHMsIHJlc3Au
cHJvbV92ZXJbTkZYX1NMT1RUWVBFX05GUF1bMF0pID09IDApCiAgICAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfdXBncmFkZSA9IDA7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIH0KI2lmbmRlZiBCT0JDQVQKICAgICAgICAgICAgZWxzZSBpZiAoY29t
cGFyZV9kZXNjcl9maWxlKGRlc2NyLCIvdXNyL2xvY2FsL2FnaWxlL0ltYWdlcy90b3NoaWJhLmJp
biIpKSB7CiAgICAgICAgICAgICAgICAvKiBDb21wYXJlIHNsb3QgMCBUb3NoaWJhIFBST00gdmVy
c2lvbiB3aXRoIHRvc2hpYmEudmVyc2lvbi4gCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAg
ICAgICAgIGYgPSBmb3BlbigiL3Vzci9sb2NhbC9hZ2lsZS9JbWFnZXMvdG9zaGliYS52ZXJzaW9u
IiwgInIiKTsKICAgICAgICAgICAgICAgIGlmIChmICE9IE5VTEwpIHsKICAgICAgICAgICAgICAg
ICAgICBzID0gZmdldGxuKGYsICZzaXplKTsKICAgICAgICAgICAgICAgICAgICBpZiAocyAhPSBO
VUxMICYmIHNbc2l6ZSAtIDFdID09ICdcbicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc1tz
aXplIC0gMV0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyY21wKHMsIHJlc3Au
cHJvbV92ZXJbTkZYX1NMT1RUWVBFX1NTQ10KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgW05GWF9TU0NfTUdNVF0pID09IDApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5lZWRfdXBncmFkZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0K
I2VuZGlmCiAgICAgICAgICAgIGlmIChmICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgIGZjbG9z
ZShmKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJjID0gbmVl
ZHNfdXBncmFkZShkdiwgc3JjX2ZpbGUsIGRzdF9maWxlLCAgZGVzY3IsICZuZWVkX3VwZ3JhZGUp
OwogICAgICAgIH0KICAgICAgICBpZiAobmVlZF91cGdyYWRlKQogICAgICAgICAgICB2ZWN0b3Jf
cHVzaChmaWxlc190b191cGdyYWRlLCBzcmNfZmlsZSk7CiAgICB9CiAgICByZXR1cm4gcmM7Cn0K
CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIHJlYWRfdXBncmFkZSgpCiAqCiAqIERlc2NyaXB0aW9u
OiBSZWFkIHRoZSBkZXNjcmlwdG9yIGluIHRoZSB1cGdyYWRlIGRpcmVjdG9yeQogKgogKiBDcmVh
dGVkIGJ5OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDUvMTQvMDIK
ICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIHZlY3RvcgpyZWFkX3VwZ3JhZGVfZGVzY3JpcHRvcigp
CnsKICAgIC8vY2hhciBmaWxlbmFtZVtNQVhQQVRITEVOXTsKICAgIC8vc3ByaW50ZihmaWxlbmFt
ZSwgIiVzJXMiLCBwYXRjaF9kaXJfbmFtZSwgZGVzY3JpcHRvcl9maWxlKTsKICAgIHJldHVybiBy
ZWFkX2Rlc2NyaXB0b3IoZGVzY3JpcHRvcl9maWxlKTsKfQoKLy8gIE5leHQgdHdvIGFyZSBvYnNv
bGV0ZSBmdW5jdGlvbnMKI2lmIDAKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBjb3B5X2xvY2FsX3Ry
dWVuYW1lKCkKICoKICogRGVzY3JpcHRpb246IFJldHVybiB0aGUgbmFtZSBvZiB0ZW1wb3Jhcnkg
Y29weSBvZiB0aGUgZmlsZS4KICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgog
KiBEYXRlIENyZWF0ZWQ6ICAgIDA5LzEzLzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBjaGFy
ICoKY29weV9sb2NhbF90cnVlbmFtZShjaGFyICpmaWxlKQp7CiAgICBzdGF0aWMgY2hhciBuYW1l
W01BWFBBVEhMRU5dOwogICAgc3RyY3B5KG5hbWUsIGxvY2FsX2Rlc3QpOwogICAgc3RyY2F0KG5h
bWUsIGZpbGUgKyBzdHJsZW4ocGF0Y2hfZGlyX25hbWUpKTsKICAgIHJldHVybiBuYW1lOwp9Cgov
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAqIE5hbWUgOiAgIGNvcHlfZmlsZXNfdG9fbG9jYWwoKQogKgogKiBEZXNjcmlw
dGlvbjogQ29weSBmaWxlcyB0byBsb2NhbCBkaXNrIGFuZCByZXR1cm4gbmV3IGZpbGVzIGxvY2F0
aW9ucy4KICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0
ZWQ6ICAgIDA5LzEzLzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRpYyBpbnQKY29weV9maWxlc190
b19sb2NhbCh2ZWN0b3IgZmlsZXMsIHZlY3RvciAqbmV3X2ZpbGVzKQp7CiAgICBpbnQgcmMgPSBD
TURfRVJSX0ZBSUxFRDsKICAgIGNoYXIgKnRtcCA9IHpzdHJkdXAoTVRZUEVfVE1QLCBsb2NhbF9k
ZXN0KTsKCiAgICBpZiAoZW5zdXJlX2Rpcl9leGlzdHModG1wLCAwNzc3KSA9PSAwKSB7CiAgICAg
ICAgaW50IHJjOwoKICAgICAgICByYyA9IGRvX3N5c3RlbSgibW91bnRfbWZzIC1zIDEwMDAwMCBz
d2FwICVzIiwgbG9jYWxfZGVzdCk7CiAgICAgICAgaWYgKHJjID09IDApIHsKICAgICAgICAgICAg
LyogQ3JlYXRlIGRpcmVjdG9yaWVzIGluIHRlbXBvcmFyeSBjb3B5ICovCiAgICAgICAgICAgIHJj
ID0gZG9fc3lzdGVtKCIvdXNyL3NiaW4vbXRyZWUgLXFkVWVmICIKICAgICAgICAgICAgICAgICAg
ICAiJXMlcyAtcCAlcyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIiwKICAgICAgICAgICAgICAgICAg
ICBtb3VudF9kaXIsIG10cmVlX2ZpbGVfbmFtZSwgbG9jYWxfZGVzdCk7CiAgICAgICAgICAgIGlm
IChyYyA9PSAwKSB7CiAgICAgICAgICAgICAgICAvKiBDb3B5IG10cmVlIGZpbGUgdG8gdGVtcG9y
YXJ5IGxvY2F0aW9uIGJlY2F1c2Ugd2lsbAogICAgICAgICAgICAgICAgICAgbmVlZCBpdCBsYXRl
ciB0byBtYWtlIGRpcmVjdG9yaWVzIGluIHRoZSByZWFsIHRyZWUgKi8KICAgICAgICAgICAgICAg
IHJjID0gZG9fc3lzdGVtKCIvdXNyL2Jpbi9pbnN0YWxsICVzJXMgJXMlcyIsCiAgICAgICAgICAg
ICAgICAgICAgICAgIG1vdW50X2RpciwgbXRyZWVfZmlsZV9uYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICBsb2NhbF9kZXN0LCBtdHJlZV9maWxlX25hbWUpOwogICAgICAgICAgICAgICAgaWYg
KHJjID09IDApIHsKICAgICAgICAgICAgICAgICAgICBpZiAodXBncmFkZV9maWxlcyhmaWxlcywg
Y29weV9sb2NhbF90cnVlbmFtZSkgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aTsKICAgICAgICAgICAgICAgICAgICAgICAgKm5ld19maWxlcyA9IHZlY3Rvcl9pbml0KHZlY3Rv
cl9tYXgoZmlsZXMpKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHZl
Y3Rvcl9tYXgoZmlsZXMpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KmYgPSB2ZWN0b3JfbG9va3VwX2luZGV4KGZpbGVzLCBpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKm5ld2Y7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3ByaW50Zigm
bmV3ZiwgIiVzJXMiLCBsb2NhbF9kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3VyX3RydWVuYW1lX2Z1bmMoZikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmVjdG9yX3B1c2goKm5ld19maWxlcywgbmV3Zik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBDTURfU1VDQ0VTUzsKICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBteV9wcmludCgiUGxlYXNlIHJl
dHJ5IHVwZ3JhZGUgdXNpbmcgYSBtYW5hZ2VtZW50IgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImludGVyZmFjZS5cbiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG15X3ByaW50KCJDYW4n
dCB1cGRhdGUgbG9jYWwgZGlyZWN0b3J5IHRyZWVcbiIpOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIGlmIChyYyAhPSBDTURfU1VDQ0VTUykKICAgICAgICAgICAgICAgIGRvX3N5c3RlbSgiL3Ni
aW4vdW1vdW50ICVzIiwgbG9jYWxfZGVzdCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
bXlfcHJpbnQoIkNhbid0IG1vdW50IGZpbGVzeXN0ZW0gZm9yIGxvY2FsIGNvcHlcbiIpOwogICAg
ICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgc3ByaW50ZihzeXNfbG9nX3N0ciwiQ2FuJ3QgY3Jl
YXRlIGRpcmVjdG9yeSAlc1xuIiwgbG9jYWxfZGVzdCk7CiAgICAgICAgbXlfcHJpbnQoc3lzX2xv
Z19zdHIpOwogICAgfQogICAgemZyZWUoTVRZUEVfVE1QLCB0bXApOwogICAgcmV0dXJuIGNvbnZl
cnRfcmMocmMpOwp9CiNlbmRpZgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBoYXNfdmFsaWRfaXBf
YWRkcigpCiAqCiAqIERlc2NyaXB0aW9uOiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0Y2ggbG9jYXRp
b24gY29udGFpbnMgYSB2YWxpZAogKiAgICAgICAgICAgICAgaXAgYWRkcmVzcwogKiBpbnRlcmZh
Y2UuCiAqCiAqIENyZWF0ZWQgYnk6ICBMYXVyZW50IEJyYXJkCiAqCiAqIERhdGUgQ3JlYXRlZDow
Ny8wOS8wMwogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpzdGF0aWMgaW50Cmhhc192YWxpZF9pcF9hZGRyKGNo
YXIgKnBhdGNoX2xvY2F0aW9uKQp7CiAgICBjaGFyICpjb2x1bW4gPSBzdHJjaHIocGF0Y2hfbG9j
YXRpb24sICc6Jyk7CiAgICBzdHJ1Y3QgaW5fYWRkciBob3N0X2FkZHI7CiAgICBpbnQgcmM7CiAg
ICAKICAgIGlmIChjb2x1bW4gPT0gTlVMTCkKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAqY29s
dW1uID0gMDsKICAgIHJjID0gaW5ldF9hdG9uKHBhdGNoX2xvY2F0aW9uLCAmaG9zdF9hZGRyKTsK
ICAgICpjb2x1bW4gPSAnOic7CgogICAgcmV0dXJuIHJjOwp9CgovKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUg
OiAgIGlzX2ZwX2FkZHIoKQogKgogKiBEZXNjcmlwdGlvbjogUmV0dXJuIHRydWUgaWYgdGhlIHBh
dGNoIGlzIGFjY2Vzc2VkIHRocm91Z2ggZnAKICogaW50ZXJmYWNlLgogKgogKiBDcmVhdGVkIGJ5
OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMTEvMDEvMDIKICoKICot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogKi8Kc3RhdGljIGludAppc19mcF9hZGRyKGNoYXIgKnBhdGNoX2xvY2F0aW9uKQp7
CiAgICBjaGFyICpjb2x1bW4gPSBzdHJjaHIocGF0Y2hfbG9jYXRpb24sICc6Jyk7CiAgICBzdHJ1
Y3QgaW5fYWRkciBob3N0X2FkZHI7CiAgICBpbl9hZGRyX3Qgb3VyX2FkZHI7CiAgICBpbnQgcmM7
CiAgICBjaGFyIGlmYWNlWzI1Nl07CiAgICAqY29sdW1uID0gMDsKCiAgICBpbmV0X2F0b24ocGF0
Y2hfbG9jYXRpb24sICZob3N0X2FkZHIpOwogICAgcmMgPSBnZXRfb3VyX2FkZHIoaG9zdF9hZGRy
LnNfYWRkciwgaWZhY2UsICZvdXJfYWRkcik7CiAgICByZXR1cm4gIShyYyA9PSAwICYmICghc3Ry
Y21wKGlmYWNlLCAic2MxIikgfHwgIXN0cmNtcChpZmFjZSwgInNjMiIpKSk7Cn0KCi8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KICogTmFtZSA6ICAgbmVlZF9sb2NhbF9jb3B5KCkKICoKICogRGVzY3JpcHRpb246IFJldHVy
biB0cnVlIGlmIG5lZWQgdG8gY29weSBmaWxlcyB0byBsb2NhbCBkaXNrIGJlZm9yZQogKiB1cGdy
YWRpbmcgLSBpZiB1c2luZyBmcCBpbnRlcmZhY2UgdG8gdXBncmFkZSBhbmQgbm90IHVwZ3JhZGlu
ZyB0aGUgc3RhbmRieQogKiBmbGFzaC4KICoKICogQ3JlYXRlZCBieTogIE1heGltIEtvemxvdnNr
eQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA5LzEzLzAyCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCnN0YXRp
YyBpbnQKbmVlZF9sb2NhbF9jb3B5KCkKewogICAgcmV0dXJuICghdXBncmFkZV9zZWNvbmRhcnkg
JiYKICAgICAgICAgICAgIWlzX2Z0cF91cGdyYWRlKHBhdGNoX2xvY2F0aW9uKSAmJgogICAgICAg
ICAgICBpc19mcF9hZGRyKHBhdGNoX2xvY2F0aW9uKSk7Cn0KCi8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6
ICAgcGVyZm9ybV91cGdyYWRlKCkKICoKICogRGVzY3JpcHRpb246IHVwZ3JhZGUgYSBzeXN0ZW0g
ZnJvbSBhIGNvbXBsZXRlIGRpc3RyaWJ1dGlvbgogKgogKiBDcmVhdGVkIGJ5OiAgTWF4aW0gS296
bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDUvMTQvMDIKICoKICotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8K
c3RhdGljIGludApwZXJmb3JtX3VwZ3JhZGUodm9pZCkKewogICAgdmVjdG9yIGR2OwogICAgaW50
IHJjID0gQ01EX0VSUl9GQUlMRUQ7CiAgICBjaGFyIG10cmVlX2ZpbGVbMjU2XTsKCWludCBtYWtl
X2xvY2FsX2NvcHk7CgogICAgbXlfcHJpbnQoIlJlYWRpbmcgdGhlIHN5c3RlbSBkZXNjcmlwdG9y
Li4uIik7CiAgICBkdiA9IHJlYWRfdXBncmFkZV9kZXNjcmlwdG9yKCk7CiAgICBpZiAoZHYgIT0g
TlVMTCkgewogICAgICAgIG15X3ByaW50KCJkb25lXG4iKTsKICAgICAgICBtYWtlX2xvY2FsX2Nv
cHkgPSBuZWVkX2xvY2FsX2NvcHkoKTsKICAgICAgICBzcHJpbnRmKG10cmVlX2ZpbGUsICIlcyVz
IiwKICAgICAgICAgICAgICAgIG1ha2VfbG9jYWxfY29weSA/IGxvY2FsX2Rlc3QgOiBtb3VudF9k
aXIsCiAgICAgICAgICAgICAgICBtdHJlZV9maWxlX25hbWUpOwogICAgICAgIHJjID0gY29tcGxl
dGVfdXBncmFkZShkdiwgY3VyX3RydWVuYW1lX2Z1bmMsIG10cmVlX2ZpbGUpOwogICAgICAgIHZl
Y3Rvcl9mcmVlX2FsbChkdik7CiAgICB9IGVsc2UgewogICAgICAgIG15X3ByaW50KCJmYWlsZWRc
biIpOwogICAgfQogICAgcmV0dXJuIHJjOwp9CgpleHRlcm4gaW50IF9fZ2V0b3B0X2luaXRpYWxp
emVkOwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBwYXJzZV9hcmdzKCkKICoKICogRGVzY3JpcHRp
b246IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICoKICogQ3JlYXRlZCBieTogIE1heGlt
IEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDExLzAxLzAyCiAqCiAqLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
ICovCnN0YXRpYyBpbnQKcGFyc2VfYXJncyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKICAgIGlu
dCBpOwoKICAgIHVwZ3JhZGVfc2Vjb25kYXJ5ID0gMDsKICAgIGZvcmNlX3VwZ3JhZGUgPSAwOwoK
ICAgIGlmICgoYXJnYyA+IDEpICYmIChhcmdjIDw9IDMpKSB7CiAgICAgICAgZm9yIChpID0gMDsg
aSA8IGFyZ2MtMTsgaSsrKSB7CiAgICAgICAgICAgIGlmICghc3RyY21wKGFyZ3ZbaV0sICItcyIp
KQogICAgICAgICAgICAgICAgdXBncmFkZV9zZWNvbmRhcnkgPSAxOwogICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgIGlmICghc3RyY21wKGFyZ3ZbaV0sICItZiIpKQogICAgICAgICAgICAgICAg
Zm9yY2VfdXBncmFkZSA9IDE7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcHJp
bnRmKCI/IEludmFsaWQgb3B0aW9uXG4iKTsKICAgICAgICAgICAgICAgIHJldHVybiBDTURfRVJS
X0ZBSUxFRDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAg
IGlmIChhcmdjICE9IDEpIHsKICAgICAgICAgICAgcHJpbnRmKCI/IEludmFsaWQgb3B0aW9uXG4i
KTsKICAgICAgICAgICAgcmV0dXJuIENNRF9FUlJfRkFJTEVEOwogICAgICAgIH0KICAgIH0KCiAg
ICBwYXRjaF9sb2NhdGlvbiA9IGFyZ3ZbYXJnYy0xXTsKICAgIGlmICghaXNfZnRwX3VwZ3JhZGUo
cGF0Y2hfbG9jYXRpb24pKSB7CiAgICAvLyBpZiAoIWlzX2Z0cF91cGdyYWRlKHBhdGNoX2xvY2F0
aW9uKSAmJgogICAgLy8gICAgICFoYXNfdmFsaWRfaXBfYWRkcihwYXRjaF9sb2NhdGlvbikpIHsK
ICAgICAgICBteV9wcmludCgiSW52YWxpZCB1cGdyYWRlIGxvY2F0aW9uXG4iKTsKICAgICAgICBy
ZXR1cm4gQ01EX0VSUl9GQUlMRUQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBpZiAoc3lzX3Vw
Z3JhZGUpIHsKICAgICAgICAgICAgZnByaW50ZihzeXNfdXBncmFkZSwiUGVyZm9ybWluZyBzeXN0
ZW0gdXBncmFkZSBmcm9tIGxvY2F0aW9uICVzXG4iLHBhdGNoX2xvY2F0aW9uKTsKICAgICAgICAg
ICAgZmZsdXNoKHN5c191cGdyYWRlKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gQ01EX1NV
Q0NFU1M7Cn0KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KICogTmFtZSA6IGZvcm1fZnVsbF9wYXRoKCkKICoKICogRGVz
Y3JpcHRpb24gOiBHZXQgdGhlIHBhc3N3b3JkIGFuZCBmb3JtcyBhIGZ1bGwgcGF0aCBmb3IgZnRw
CiAqCiAqIENyZWF0ZWQgYnk6CiAqCiAqIERhdGUgQ3JlYXRlZDogMDMvMTYvMDYKICoKICogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KICovCmludApmb3JtX2Z1bGxfcGF0aChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIg
KipmdWxsX3BhdGgpCnsKICAgIGNoYXIgcGFzc3dkW1NFQ19QV0RfTUFYXSwgKnN0YXJ0LCAqc3Rh
cnRfY29sb24sICplbmRfY29sb247CiAgICBjaGFyICpwYXRjaF9sb2NhdGlvbiA9IGFyZ3ZbYXJn
Yy0xXTsKICAgIGNoYXIgc3RyVGFyWzhdOwogICAgLyoKICAgICAqIENoZWNrIGZvciB0aGUgY29t
bWFuZCBpbmNvbXBsZXRlLgogICAgICogaWYgZnRwIGlzIG5vdCBzcGVjaWZpZWQgdGhlbiBlcnJv
ciBtc2cgd2lsbCBiZSBkaXNwbGF5ZWQuCiAgICAgKi8KICAgIGlmICghaXNfZnRwX3VwZ3JhZGUo
cGF0Y2hfbG9jYXRpb24pKQogICAgewogICAgICAgIG15X3ByaW50KCJmdHAgVVJMIGlzIG5vdCBz
cGVjaWZpZWRcbiIpOwogICAgICAgIHJldHVybiBDTURfRVJSX0lOQ09NUExFVEU7CiAgICB9Cgog
ICAgLyogQ2hlY2sgaWYgdGFyIGZpbGUgaXMgc3BlY2lmaWVkICovCiAgICBiemVybyhzdHJUYXIs
OCk7CiAgICBzdHJuY3B5KHN0clRhcixwYXRjaF9sb2NhdGlvbiArIHN0cmxlbihwYXRjaF9sb2Nh
dGlvbiktNiw2KTsKICAgIGlmIChzdHJjbXAoc3RyVGFyLCAidGFyLmd6IikpCiAgICB7CiAgICAg
ICAgbXlfcHJpbnQoInRhciBmaWxlIGlzIG5vdCBzcGVjaWZpZWRcbiIpOyAgCiAgICAgICAgcmV0
dXJuIENNRF9FUlJfRkFJTEVEOwogICAgfQoKICAgICAvKgogICAgICogQ2hlY2sgZm9yIHRoZSAn
QCcgaW4gZnRwLgogICAgICogSWYgaXQgaXMgbm90IHNwZWNpZmllZCB0aGVuIGVycm9yIG1zZyB3
aWxsIGJlIGRpc3BsYXllZC4KICAgICAqLwogICAgaWYgKChzdGFydCA9IHN0cmNocihwYXRjaF9s
b2NhdGlvbiwgJ0AnKSkgPT0gTlVMTCkKICAgIHsKICAgICAgICBteV9wcmludCgiVW5hYmxlIHRv
IGZpbmQgaG9zdG5hbWUvaXAgYWRkcmVzcyBpbiBmdHAgVVJMXG4iKTsKICAgICAgICByZXR1cm4g
Q01EX0VSUl9GQUlMRUQ7CiAgICB9CgogICAgLyoKICAgICAqIENoZWNrIHRvIHNlZSB3aGV0aGVy
IHRoZSBwYXNzd29yZCBpcyBzcGVjaWZpZWQgd2l0aCB0aGUgdXNlcm5hbWUuCiAgICAgKi8KICAg
IHN0YXJ0X2NvbG9uID0gc3RyY2hyKHBhdGNoX2xvY2F0aW9uLCAnOicpOwogICAgZW5kX2NvbG9u
ID0gc3RycmNocihwYXRjaF9sb2NhdGlvbiwgJzonKTsKICAgIGlmIChzdGFydF9jb2xvbiAhPSBl
bmRfY29sb24pCiAgICB7CiAgICAgICAgKmZ1bGxfcGF0aCA9IE5VTEw7CiAgICAgICAgcmV0dXJu
IENNRF9TVUNDRVNTOwogICAgfQogICAgCiAgICAvKgogICAgICogSWYgdGhlIHBhc3N3b3JkIGlz
IG5vdCBzcGVjaWZpZWQgd2l0aCB0aGUgdXNlciBuYW1lLCB0aGlzIGZ1bmN0aW9uCiAgICAgKiBn
ZXRzIHRoZSBwYXNzd29yZCBmcm9tIHRoZSB1c2VyLgogICAgICovCiAgICBpZiAoZ2V0UGFzc3dk
RnJvbVVzZXIocGFzc3dkLCBOVUxMLCAwLCBzaXplb2YocGFzc3dkKSwgVFJVRSkgIT0gMCkKICAg
IHsKICAgICAgICByZXR1cm4gQ01EX0VSUl9GQUlMRUQ7CiAgICB9CgogICAgKmZ1bGxfcGF0aCA9
IChjaGFyICopbWFsbG9jKHN0cmxlbihhcmd2W2FyZ2MtMV0pICsgc3RybGVuKHBhc3N3ZCkgKyAy
KTsKICAgIGlmKCpmdWxsX3BhdGggPT0gTlVMTCkKICAgIHsKICAgICAgICBteV9wcmludCgiQ291
bGRuJ3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKICAgICAgICByZXR1cm4gQ01EX0VSUl9GQUlMRUQ7
CiAgICB9CiAgICAvKgogICAgICogU3BsaXRzIHRoZSAnZnRwOi8vdXNlckBpcGFkZHIvcGF0aCcg
aW50byB0d28gcGFydHMuCiAgICAgKiBFeHRyYWN0cyB0aGUgJ2Z0cDovL3VzZXInIHN0cmluZy4K
ICAgICAqLwogICAgbWVtc2V0KCpmdWxsX3BhdGgsIDAsIChzdHJsZW4oYXJndlthcmdjLTFdKSAr
IHN0cmxlbihwYXNzd2QpICsgMikpOwogICAgc3RybmNhdCgqZnVsbF9wYXRoLCBwYXRjaF9sb2Nh
dGlvbiwgc3RhcnQtcGF0Y2hfbG9jYXRpb24pOwogICAgLyoKICAgICAqIENvbmNhdGVuYXRlcyAn
OicgYW5kIHBhc3N3ZCB3aXRoICdmdHA6Ly91c2VyJwogICAgICogQWZ0ZXIgdGhhdCB0aGUgc3Ry
aW5nIHdpbGwgYmUgJ2Z0cDovL3VzZXI6cGFzc3dkJwogICAgICovCiAgICBzdHJjYXQoKmZ1bGxf
cGF0aCwgIjoiKTsKICAgIHN0cmNhdCgqZnVsbF9wYXRoLCBwYXNzd2QpOwogICAgLyoKICAgICAq
IEFwcGVuZHMgdGhlIHJlbWFpbmluZyBzdHJpbmcgaW4gZnRwLgogICAgICogVGhlIHJlbWFpbmlu
ZyBzdHJpbmcgd2lsbCBiZSAnQGlwYWRkci9wYXRoJy4KICAgICAqLwogICAgc3RyY2F0KCpmdWxs
X3BhdGgsIHN0YXJ0KTsKICAgIAogICAgLyoKICAgICAqIEFzc2lnbnMgdGhlIG5ldyBzdHJpbmcg
dG8gYXJndlthcmdjLTFdCiAgICAgKi8KICAgIGFyZ3ZbYXJnYy0xXSA9ICpmdWxsX3BhdGg7CiAg
ICByZXR1cm4gQ01EX1NVQ0NFU1M7Cn0KICAgIAovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgICAgICAg
c2VuZFVwZ3JhZGVFdmVudCgpCiAqCiAqIERlc2NyaXB0aW9uOiAgU2VuZCBhICJORlhfRVZFTlRf
VVBHUkFERSIgZXZlbnQgdG8gc3VwcG9ydC5zaC4KICoKICogQ3JlYXRlZCBieTogICBFZCBLd2Fu
CiAqCiAqIERhdGUgQ3JlYXRlZDogMDkvMDYvMDYKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIHZv
aWQKc2VuZFVwZ3JhZGVFdmVudCh2b2lkKQp7CiAgICBjaGFyICpjbWRfc3RyOwoKICAgIGlmIChh
c3ByaW50ZigmY21kX3N0ciwKICAgICAgICAgICAgICAgICAiL3Vzci9sb2NhbC9hZ2lsZS9iaW4v
c3VwcG9ydC5zaCAtYzAgLWcgTkZYX0VWRU5UX1VQR1JBREUgIgogICAgICAgICAgICAgICAgICIt
Q2FsbGVkX2Zyb21fbmZ4c2ggJXMgPiAvZGV2L251bGwgMj4mMSIsCiAgICAgICAgICAgICAgICAg
c3lzX3VwZ3JhZGVfbG9nZmlsZSkgIT0gLTEpIHsKICAgICAgICBzeXN0ZW0oY21kX3N0cik7CiAg
ICAgICAgZnJlZShjbWRfc3RyKTsKICAgIH0KCgkvKiBBbmR5J3MgZG8gc3lzdGVtCglkb19zeXN0
ZW0oIi91c3IvbG9jYWwvYWdpbGUvYmluL3N1cHBvcnQuc2ggLWMwIC1nIE5GWF9FVkVOVF9VUEdS
QURFICIKCQkJICItQ2FsbGVkX2Zyb21fbmZ4c2ggJXMgPiAvZGV2L251bGwgMj4mMSIsIHN5c191
cGdyYWRlX2xvZ2ZpbGUpOwoJKi8KfQoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBkb191cGdyYWRl
KCkKICoKICogRGVzY3JpcHRpb246IG1ha2Ugc3lzdGVtIHVwZ3JhZGUKICoKICogQ3JlYXRlZCBi
eTogIE1heGltIEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAq
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KICovCmludApkb191cGdyYWRlKGludCBhcmdjLCBjaGFyICoqYXJndikgCnsKICAg
IHN0cnVjdCB2ZXJzaW9uIGN1cnJlbnRfdmVyc2lvbiwgdXBncmFkZV92ZXJzaW9uOwogICAgc3Ry
dWN0IHZlcnNpb24gb3JnX3VwZ3JhZGVfdmVyc2lvbjsKICAgIGludCByYyA9IENNRF9TVUNDRVNT
OwogICAgaW50IGk7CiAgICB2ZWN0b3Igc2Vjb25kYXJ5X2ZzdGFicyA9IE5VTEw7CgogICAgYmVj
b21lX3Jvb3QoKTsKICAgIGlmICgoc3lzX3VwZ3JhZGUgPSBmb3BlbihzeXNfdXBncmFkZV9sb2dm
aWxlLCJ3IikpID09IE5VTEwgKQogICAgICAgIHByaW50ZigiRXJyb3Igb3BlbmluZyBmaWxlICVz
LlxuIixzeXNfdXBncmFkZV9sb2dmaWxlKTsKCiAgICBpZiAoc3lzX3VwZ3JhZGUpIHsKICAgICAg
ICBmcHJpbnRmKHN5c191cGdyYWRlLCJTeXN0ZW0gVXBncmFkZSBDb21tYW5kIHN0YXJ0ZWQgYXQ6
ICVzXG4iLAoJCSAgICBnZXRfdGltZSgpKTsKICAgICAgICBmZmx1c2goc3lzX3VwZ3JhZGUpOwog
ICAgfQoKCS8qCgkgKiBzeXN0ZW0gdXBncmFkZSB1c2VzIC90bXAgc3BhY2UuIHZlcmlmeSB0aGF0
IC90bXAgaXMgbm90IGZ1bGwuCgkgKiBpZiAvdG1wIGlzIGZ1bGwsIHRoZW4gZmFpbCB1cGdyYWRl
LCBhbmQgbG9nIGVycm9yLgoJICovCglpZiAoc3lzdGVtKCJpZiBbIGBkZiAtaCAvdG1wIHwgdGFp
bCAtMSB8IGF3ayAne3ByaW50ICQ1fScgfCBzZWQgJ3MvJS8vJ2AgLWx0IDk5IF07IHRoZW4gZXhp
dCAwOyBlbHNlIGV4aXQgMTsgZmkiKSkgewoJCWZwcmludGYoc3lzX3VwZ3JhZGUsICIvdG1wIGlz
IGZ1bGwsIHN5c3RlbSB1cGdyYWRlIGZhaWxlZFxuIik7CgkJcHJpbnRmKCIvdG1wIGlzIEZVTEws
IHN5c3RlbSB1cGdyYWRlIGZhaWxlZCFcbiIpOwoJCXVuYmVjb21lX3Jvb3QoKTsKCQlyYyA9IENN
RF9FUlJfRkFJTEVEOwoJCWdvdG8gZG9uZTsKCX0KCiAgICByYyA9IHBhcnNlX2FyZ3MoYXJnYywg
YXJndik7CiAgICBpZiAocmMgIT0gQ01EX1NVQ0NFU1MpIHsKCQlnb3RvIGRvbmU7Cgl9CiAgICAK
ICAgIGlmICh1cGdyYWRlX3NlY29uZGFyeSkgewogICAgICAgIGdldF9kZXZpY2VfbmFtZXMoKTsK
CQlzZWNvbmRhcnlfZnN0YWJzID0gbWFrZV9zZWNvbmRhcnlfZnN0YWJzKCk7CiAgICAgICAgbXlf
cHJpbnQoIkNoZWNraW5nIGZpbGUgc3lzdGVtLi4uXG4iKTsKICAgICAgICBpZiAoc3lzX3VwZ3Jh
ZGUpIHsKICAgICAgICAgICAgZnByaW50ZihzeXNfdXBncmFkZSwiZmlsZXN5c3RlbSBjaGVjayBz
dGFydGVkIGF0OiAlc1xuIixnZXRfdGltZSgpKTsKICAgICAgICAgICAgZmZsdXNoKHN5c191cGdy
YWRlKTsKICAgICAgICB9CiAgICAgICAgZm9yIChpID0gMDsgaSA8IHZlY3Rvcl9tYXgoc2Vjb25k
YXJ5X2ZzdGFicyk7ICsraSkgewogICAgICAgICAgICBzdHJ1Y3QgZnN0YWIgKmZzID0gdmVjdG9y
X2xvb2t1cF9pbmRleChzZWNvbmRhcnlfZnN0YWJzLCBpKTsKICAgICAgICAgICAgZXhlY3V0ZV9j
b21tYW5kKCIvc2Jpbi9mc2NrIiwgMiwgIi15IiwgZnMtPmZzX3NwZWMsIE5VTEwpOwogICAgICAg
IH0KICAgICAgICBteV9wcmludCgiVW5tb3VudGluZyBzZWNvbmRhcnkgZGlzay4uLiIpOwogICAg
ICAgIC8vd2hvb3BzLCBraXNzIHRoYXQgbWVtb3J5IGdvb2RieWUKCQkvL3NlY29uZGFyeV9mc3Rh
YnMgPSBtYWtlX3NlY29uZGFyeV9mc3RhYnMoKTsKICAgICAgICB1X21vdW50X3NlY29uZGFyeShz
ZWNvbmRhcnlfZnN0YWJzKTsKICAgICAgICBteV9wcmludCgiTW91bnRpbmcgc2Vjb25kYXJ5IGRp
c2suLi4iKTsKICAgICAgICByYyA9IGNvbnZlcnRfcmMobW91bnRfc2Vjb25kYXJ5KHNlY29uZGFy
eV9mc3RhYnMpKTsKICAgICAgICBzcHJpbnRmKHN5c19sb2dfc3RyLCAiJXNcbiIsIHJjID09IENN
RF9TVUNDRVNTID8gImRvbmUuIiA6ICJmYWlsZWQuIik7CiAgICAgICAgbXlfcHJpbnQoc3lzX2xv
Z19zdHIpOwogICAgICAgIGlmIChzeXNfdXBncmFkZSkgewogICAgICAgICAgICBmcHJpbnRmKHN5
c191cGdyYWRlLCAiTW91bnRlZCBzZWNvbmRhcnkgZGlzayBhdDogJXNcbiIsIGdldF90aW1lKCkp
OwogICAgICAgICAgICBmZmx1c2goc3lzX3VwZ3JhZGUpOwogICAgICAgIH0KICAgICAgICBjdXJf
dHJ1ZW5hbWVfZnVuYyA9IHNlY29uZGFyeV91cGdyYWRlX3RydWVuYW1lOwogICAgfSBlbHNlIHsK
ICAgICAgICBjdXJfdHJ1ZW5hbWVfZnVuYyA9IHVwZ3JhZGVfdHJ1ZW5hbWU7CiAgICB9CgogICAg
aWYgKHJjID09IENNRF9TVUNDRVNTKSB7CiAgICAgICAgcmMgPSBtb3VudF9wYXRjaChwYXRjaF9s
b2NhdGlvbik7CiAgICAgICAgaWYgKHJjID09IENNRF9TVUNDRVNTKSB7CiAgICAgICAgICAgIG15
X3ByaW50KCJNb3VudGVkIHRoZSB1cGdyYWRlIGRpcmVjdG9yeVxuIik7CiAgICAgICAgICAgIGlm
IChzeXNfdXBncmFkZSkgewogICAgICAgICAgICAgICAgZnByaW50ZihzeXNfdXBncmFkZSwiTW91
bnRlZCB1cGdyYWRlIGRpcmVjdG9yeSBhdDogJXNcbiIsZ2V0X3RpbWUoKSk7CiAgICAgICAgICAg
ICAgICBmZmx1c2goc3lzX3VwZ3JhZGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgo
cmMgPSBnZXRfdXBncmFkZV92ZXJzaW9uKCZ1cGdyYWRlX3ZlcnNpb24pKSA9PSBDTURfU1VDQ0VT
UykgewogICAgICAgICAgICAgICAgZ2V0X29yZ191cGdyYWRlX3ZlcnNpb24oJm9yZ191cGdyYWRl
X3ZlcnNpb24pOwogICAgICAgICAgICAgICAgaWYgKChyYyA9IGdldF9sb2NhbF92ZXJzaW9uKCZj
dXJyZW50X3ZlcnNpb24pKSA9PSBDTURfU1VDQ0VTUykgewogICAgICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50X3ZlcnNpb24ucGxhdGZvcm0gIT0gdXBncmFkZV92ZXJzaW9uLnBsYXRmb3JtKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIG15X3ByaW50KCJUaGUgdXBncmFkZSBkaXN0cmlidXRp
b24gaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGlzIHN5c3RlbSFcbiIpOwogICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7IAogICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHN5c19sb2df
c3RyLCJDdXJyZW50IHN5c3RlbSB2ZXJzaW9uOiAlZC4lZC4lZC4lZCAiCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAidXBncmFkZSB2ZXJzaW9uOiAlZC4lZC4lZC4lZFxuIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdmVyc2lvbi5tYWpvciwgY3VycmVudF92ZXJzaW9u
Lm1pbm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF92ZXJzaW9uLm1haW50
ZW5hbmNlLCBjdXJyZW50X3ZlcnNpb24ucGF0Y2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1cGdyYWRlX3ZlcnNpb24ubWFqb3IsIHVwZ3JhZGVfdmVyc2lvbi5taW5vciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVfdmVyc2lvbi5tYWludGVuYW5jZSwgdXBncmFkZV92
ZXJzaW9uLnBhdGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgbXlfcHJpbnQoc3lzX2xvZ19z
dHIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcmNlX3VwZ3JhZGUgJiYKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjb21wYXJlX3ZlcnNpb25zKCZjdXJyZW50X3ZlcnNpb24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1cGdyYWRlX3Zl
cnNpb24pID49IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteV9wcmludCgiVGhl
IHN5c3RlbSBpcyB1cC10by1kYXRlXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBpbGxlZ2FsIHVwZ3Jh
ZGVzLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBjaGVja192ZXJzaW9uc19j
b21wYXRpYmxlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN1cnJlbnRf
dmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1cGdyYWRlX3Zl
cnNpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJjICE9IENNRF9TVUNDRVNT
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzeXNfbG9nX3N0ciwi
Q2Fubm90IHVwZ3JhZGUgZnJvbSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAidmVyc2lvbiAlZC4lZC4lZC4lZCB0byB2ZXJzaW9uICIKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIlZC4lZC4lZC4lZFxuIiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdmVyc2lvbi5tYWpvciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdmVyc2lvbi5taW5vciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdmVyc2lvbi5tYWludGVu
YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdmVy
c2lvbi5wYXRjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZ3Jh
ZGVfdmVyc2lvbi5tYWpvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVwZ3JhZGVfdmVyc2lvbi5taW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVwZ3JhZGVfdmVyc2lvbi5tYWludGVuYW5jZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVfdmVyc2lvbi5wYXRjaCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbXlfcHJpbnQoc3lzX2xvZ19zdHIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JjZV91cGdyYWRlIHx8CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGNvbXBhcmVfdmVyc2lvbnMoJmN1cnJlbnRfdmVyc2lvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3JnX3VwZ3JhZGVf
dmVyc2lvbikgPj0gMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IHBl
cmZvcm1fdXBncmFkZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHN5c19sb2dfc3RyLCJTdGFydCB2
ZXJzaW9uICVkLiVkLiVkLiVkIGlzIG5ld2VyICIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInRoYW4gY3VycmVudCwgY2FuIG5vdCB1cGdyYWRlXG4iLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmdfdXBncmFkZV92ZXJzaW9uLm1ham9yLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmdfdXBncmFkZV92ZXJzaW9u
Lm1pbm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmdfdXBncmFk
ZV92ZXJzaW9uLm1haW50ZW5hbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcmdfdXBncmFkZV92ZXJzaW9uLnBhdGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBteV9wcmludChzeXNfbG9nX3N0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmMgPSBDTURfRVJSX0ZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG15X3ByaW50KCJm
YWlsZWQgdG8gZGV0ZXJtaW5lIHRoZSB1cGdyYWRlIHZlcnNpb25cbiIpOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIHVtb3VudF9wYXRjaCgpOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAodXBn
cmFkZV9zZWNvbmRhcnkpIHsKICAgICAgICB1X21vdW50X3NlY29uZGFyeShzZWNvbmRhcnlfZnN0
YWJzKTsKICAgICAgICBmcmVlX2ZzdGFiX3ZlY3RvcihzZWNvbmRhcnlfZnN0YWJzKTsKICAgIH0K
CiAgICBpZiAoZmNsb3NlKHN5c191cGdyYWRlKSAhPSAwKSB7CiAgICAgICAgcHJpbnRmKCJFcnJv
ciBjbG9zaW5nIGZpbGUgJXMuXG4iLCBzeXNfdXBncmFkZV9sb2dmaWxlKTsKCX0KZG9uZToKICAg
IHVuYmVjb21lX3Jvb3QoKTsKICAgIHNlbmRVcGdyYWRlRXZlbnQoKTsKICAgIHJldHVybiByYzsK
fQoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBzaG93X2xvY2FsX3ZlcnNpb24oKQogKgogKiBEZXNj
cmlwdGlvbjogU2hvdyB0aGUgc3lzdGVtIHZlcnNpb24KICoKICogQ3JlYXRlZCBieTogIE1heGlt
IEtvemxvdnNreQogKgogKiBEYXRlIENyZWF0ZWQ6ICAgIDA1LzE0LzAyCiAqCiAqLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
ICovCnN0YXRpYyBpbnQKc2hvd19sb2NhbF92ZXJzaW9uKHZvaWQpCnsKICAgIHN0cnVjdCB2ZXJz
aW9uIGN1cnJlbnRfdmVyc2lvbjsKICAgIGludCByYyA9IGdldF9yb290X3ZlcnNpb24oJmN1cnJl
bnRfdmVyc2lvbik7CiAgICBpZiAocmMgIT0gQ01EX1NVQ0NFU1MpIHsKICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkNhbid0IGRldGVybWluZSBjdXJyZW50IHZlcnNpb25cbiIpOwogICAgICAgIGlm
IChzeXNfdXBncmFkZSkgewogICAgICAgICAgICBmcHJpbnRmKHN5c191cGdyYWRlLCAiQ2FuJ3Qg
ZGV0ZXJtaW5lIGN1cnJlbnQgdmVyc2lvblxuIik7CiAgICAgICAgICAgIGZmbHVzaChzeXNfdXBn
cmFkZSk7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgcHJpbnRfdmVyc2lvbigm
Y3VycmVudF92ZXJzaW9uKTsKICAgIH0KICAgIHJldHVybiByYzsKfQoKLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBO
YW1lIDogICBzaG93X3NlY29uZGFyeV92ZXJzaW9uKCkKICoKICogRGVzY3JpcHRpb246IFNob3cg
dGhlIHZlcnNpb24gb2YgdGhlIHNlY29uZGFyeSBmbGFzaAogKgogKiBDcmVhdGVkIGJ5OiAgRGFu
cWluZyBKaW4KICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNy8wNS8wNgogKgogKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAq
LwpzdGF0aWMgaW50CnNob3dfc2Vjb25kYXJ5X3ZlcnNpb24odm9pZCkKewogICAgc3RydWN0IHZl
cnNpb24gc2VjX3ZlcnNpb247CiAgICBpbnQgcmM7CiAgICB2ZWN0b3Igc2Vjb25kYXJ5X2ZzdGFi
cyA9IE5VTEw7CgogICAgYmVjb21lX3Jvb3QoKTsKICAgIGdldF9kZXZpY2VfbmFtZXMoKTsKICAg
IHNlY29uZGFyeV9mc3RhYnMgPSBtYWtlX3NlY29uZGFyeV9mc3RhYnMoKTsKCiAgICBpZiAoKHJj
ID0gY29udmVydF9yYyhtb3VudF9zZWNvbmRhcnkoc2Vjb25kYXJ5X2ZzdGFicykpKSA9PSBDTURf
U1VDQ0VTUykgewogICAgICAgIGlmIChnZXRfc2Vjb25kYXJ5X3ZlcnNpb24oJnNlY192ZXJzaW9u
KSA9PSBDTURfU1VDQ0VTUykgewogICAgICAgICAgICBwcmludF92ZXJzaW9uKCZzZWNfdmVyc2lv
bik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkZhaWxlZCB0byBnZXQgYSB2YWxpZCB2ZXJzaW9uXG4iKTsKICAgICAgICB9IAogICAgfQogICAg
ZWxzZSB7CiAgICAgICAgZnByaW50ZihzdGRlcnIsICJNb3VudCBvZiB0aGUgc2Vjb25kYXJ5IGZs
YXNoIGZhaWxlZFxuIik7CiAgICB9CiAgICB1X21vdW50X3NlY29uZGFyeShzZWNvbmRhcnlfZnN0
YWJzKTsKICAgIGZyZWVfZnN0YWJfdmVjdG9yKHNlY29uZGFyeV9mc3RhYnMpOwogICAgdW5iZWNv
bWVfcm9vdCgpOwoKICAgIHJldHVybiByYzsKfQoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBzaG93
X3JlbW90ZV92ZXJzaW9uKCkKICoKICogRGVzY3JpcHRpb246IFNob3cgdGhlIHZlcnNpb24gb2Yg
dGhlIHBhdGNoIAogKgogKiBDcmVhdGVkIGJ5OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUg
Q3JlYXRlZDogICAgMDUvMTQvMDIKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIGludApzaG93X3Jl
bW90ZV92ZXJzaW9uKGNoYXIgKnBhdGNoX3BhdGgpCnsKICAgIHN0cnVjdCB2ZXJzaW9uIHZlcnNp
b247CiAgICBpbnQgcmM7CgljaGFyIHZlcnNpb25fZmlsZVtNQVhQQVRITEVOICsgMV07CiAgICAK
ICAgIGJlY29tZV9yb290KCk7CiAgICByYyA9IG1vdW50X3BhdGNoKHBhdGNoX3BhdGgpOwogICAg
aWYgKHJjID09IENNRF9TVUNDRVNTKSB7CiAgIAkgICAgc25wcmludGYodmVyc2lvbl9maWxlLCBN
QVhQQVRITEVOKzEsICIlcy92ZXJzaW9uIiwgbW91bnRfZGlyKTsKICAgICAgICBpZiAoKHJjID0g
cmVhZF92ZXJzaW9uKHZlcnNpb25fZmlsZSwgJnZlcnNpb24pKSA9PSBDTURfU1VDQ0VTUykgewog
ICAgICAgICAgICBwcmludF92ZXJzaW9uKCZ2ZXJzaW9uKTsKICAgICAgICB9CiAgICAgICAgdW1v
dW50X3BhdGNoKCk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNh
biBub3QgbW91bnQgdGhlIHBhdGNoIGRpcmVjdG9yeVxuIik7CiAgICAgICAgaWYgKHN5c191cGdy
YWRlKSB7CiAgICAgICAgICAgICBmcHJpbnRmKHN5c191cGdyYWRlLCAiQ2FuIG5vdCBtb3VudCB0
aGUgcGF0Y2ggZGlyZWN0b3J5XG4iKTsKICAgICAgICAgICAgIGZmbHVzaChzeXNfdXBncmFkZSk7
CiAgICAgICAgfQogICAgfQogICAgdW5iZWNvbWVfcm9vdCgpOwogICAgCiAgICByZXR1cm4gcmM7
Cn0KCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIGRvX3Nob3dfdmVyc2lvbigpCiAqCiAqIERlc2Ny
aXB0aW9uOiBzaG93IHRoZSBsb2NhbCB2ZXJzaW9uIG9yIGEgcGF0Y2ggdmVyc2lvbgogKgogKiBD
cmVhdGVkIGJ5OiAgTWF4aW0gS296bG92c2t5CiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDUvMTQv
MDIKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogKi8KaW50CmRvX3Nob3dfdmVyc2lvbihpbnQgYXJnYywgY2hhciAq
KmFyZ3YpCnsKICAgIGludCBjOwogICAgb3B0aW5kID0gMDsgIC8vIFRoaXMgc2VlbXMgdG8gYmUg
dGhlIHRyaWNrIGZvciBnZXRvcHQoKSB0byB3b3JrCgogICAgaWYgKGFyZ2MgPT0gMCkgewogICAg
ICAgIHJldHVybiBzaG93X2xvY2FsX3ZlcnNpb24oKTsKICAgIH0gZWxzZSBpZiAoYXJnYyA9PSAx
KSB7CiAgICAgICAgd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJzIikpICE9IC0xKSB7
CiAgICAgICAgICAgIHN3aXRjaCAoYykgewogICAgICAgICAgICBjYXNlICdzJzoKICAgICAgICAg
ICAgICAgIHJldHVybiBzaG93X3NlY29uZGFyeV92ZXJzaW9uKCk7CiAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgb3B0aW9uXG4iKTsK
ICAgICAgICAgICAgICAgIHJldHVybiAoQ01EX0VSUl9GQUlMRUQpOwogICAgfQogICAgICAgIH0K
ICAgICAgICByZXR1cm4gc2hvd19yZW1vdGVfdmVyc2lvbihhcmd2WzBdKTsKICAgIH0gZWxzZSB7
CiAgICAgICAgcmV0dXJuIChDTURfRVJSX0ZBSUxFRCk7CiAgICB9Cn0KCi8vIFVudGlsIEkgY2Fu
IGZpZ3VyZSBhIHdheSB0byBsYXVuY2ggdGhpcyBmcm9tIGEgc2NyaXB0CiNpZiAwCi8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KICogTmFtZSA6ICAgZG9fcHJvbV91cGdyYWRlKCkKICoKICogRGVzY3JpcHRpb246IHByb20g
dXBncmFkZSBjb21tYW5kIAogKgogKiBDcmVhdGVkIGJ5OiAgTWF4aW0gS296bG92c2t5CiAqCiAq
IERhdGUgQ3JlYXRlZDogICAgMDYvMjYvMDIKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KaW50CmRvX3Byb21f
dXBncmFkZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKICAgIGludCByYyA9IENNRF9FUlJfRkFJ
TEVEOwogICAgaWYgKGFyZ2MgPT0gMikgewogICAgICAgIGludCBzbG90ID0gYXRvaShhcmd2WzBd
KTsKICAgICAgICBpbnQgY3B1ID0gYXRvaShhcmd2WzFdKTsKICAgICAgICBpZiAodmFsaWRfc2xv
dF9jcHUoc2xvdCwgY3B1KSkgewogICAgICAgICAgICByYyA9IHVwZ3JhZGVfcHJvbV9zbG90Y3B1
KHNsb3QsIGNwdSwgTlVMTCk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJjOwp9CiNlbmRp
ZgoKLyorKwoKUm91dGluZSBEZXNjcmlwdGlvbjoKICAgIFRoaXMgcm91dGluZSBzbGVlcHMgZm9y
IGFuIGFic29sdXRlIHRpbWUgbW9yZSBhY2N1cmF0ZWx5IHRoYW4gc2xlZXAoKS4KCkFyZ3VtZW50
czogICAgCiAgICBzZWNzIC0gdGltZSB0byBzbGVlcAoKUmV0dXJuIHZhbHVlOgogICAgTkZYX09L
IG9yIE5GWF9FUlIKCi0tKi8KaW50CnNsZWVwX2FjY3VyYXRlbHkoaW50IHNlY3MpCnsKICAgIHVp
bnQzMiBlbmRfc2VjczsKICAgIHN0cnVjdCB0aW1ldmFsIHR2OwoKICAgIGlmIChnZXR0aW1lb2Zk
YXkoJnR2LCBOVUxMKSA9PSAwKSB7CiAgICAgICAgZW5kX3NlY3MgPSB0di50dl9zZWMgKyBzZWNz
OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuIE5GWF9FUlI7CiAgICB9CiAgICB3aGls
ZSAodHYudHZfc2VjIDwgZW5kX3NlY3MpIHsKICAgICAgICBzbGVlcCgxKTsKICAgICAgICBpZiAo
Z2V0dGltZW9mZGF5KCZ0diwgTlVMTCkgIT0gMCkgewogICAgICAgICAgICByZXR1cm4gTkZYX0VS
UjsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gTkZYX09LOwp9CgpleHRlcm4gaW50IF9fZ2V0
b3B0X2luaXRpYWxpemVkOwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOYW1lIDogICBwYXJzZV9jb21wYXJlX2Fy
Z3MoKQogKgogKiBEZXNjcmlwdGlvbjogcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3Ig
U3lzdGVtIGNvbXBhcmUKICoKICogQ3JlYXRlZCBieTogIFZpa2FzIFNhaW5pCiAqCiAqIERhdGUg
Q3JlYXRlZDogICAgMDcvMTMvMDUKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8Kc3RhdGljIGludApwYXJzZV9j
b21wYXJlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQp7CiAgICBpbnQgYzsKCiAgICBjb21w
YXJlX3NlY29uZGFyeSA9IDA7CgogICAgX19nZXRvcHRfaW5pdGlhbGl6ZWQgPSAwOwogICAgb3B0
aW5kID0gMDsKCiAgICB3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgInMiKSkgIT0gLTEp
IHsKICAgICAgICBzd2l0Y2ggKGMpIHsKICAgICAgICBjYXNlICdzJzoKICAgICAgICAgICAgY29t
cGFyZV9zZWNvbmRhcnkgPSAxOwogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICBwcmludGYoIkludmFsaWQgb3B0aW9uXG4iKTsKICAgICAgICAgICAgcmV0dXJu
IENNRF9FUlJfRkFJTEVEOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAob3B0aW5kICE9IGFyZ2Mg
LSAxKSB7CiAgICAgICAgcHJpbnRmKCJVcGdyYWRlIGxvY2F0aW9uIG5vdCBzcGVjaWZpZWRcbiIp
OwogICAgICAgIHJldHVybiBDTURfRVJSX0ZBSUxFRDsKICAgIH0KCiAgICBwYXRjaF9sb2NhdGlv
biA9IGFyZ3Zbb3B0aW5kXTsKICAgIGlmICghaXNfZnRwX3VwZ3JhZGUocGF0Y2hfbG9jYXRpb24p
ICYmCiAgICAgICAgIWhhc192YWxpZF9pcF9hZGRyKHBhdGNoX2xvY2F0aW9uKSkgewogICAgICAg
IHByaW50ZigiSW52YWxpZCB1cGdyYWRlIGxvY2F0aW9uXG4iKTsKICAgICAgICByZXR1cm4gQ01E
X0VSUl9GQUlMRUQ7CiAgICB9CgogICAgcmV0dXJuIENNRF9TVUNDRVNTOwp9CgoKCi8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KICogTmFtZSA6ICAgcGVyZm9ybV9jb21wYXJlKCkKICoKICogRGVzY3JpcHRpb246IGNvbXBh
cmVzIGEgY29tcGxldGUgc3lzdGVtIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbgogKgogKiBDcmVhdGVk
IGJ5OiAgVmlrYXMgU2FpbmkKICoKICogRGF0ZSBDcmVhdGVkOiAgICAwNy8xMy8wNQogKgogKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAqLwpzdGF0aWMgaW50CnBlcmZvcm1fY29tcGFyZSh2b2lkKQp7CgkvL2d1dCB0aGlz
IGFuZCBqdXN0IGNhbGwgbXkgc2NyaXB0IHdpdGggcHJvcGVyIG9wdGlvbgogICAgdmVjdG9yIGZp
bGVzID0gTlVMTDsKICAgIC8vdmVjdG9yIGZpbGVzX25vX2R1cHMgPSBOVUxMOwogICAgdmVjdG9y
IGR2OwogICAgaW50IHJjID0gQ01EX0VSUl9GQUlMRUQ7CiAgICB1bnNpZ25lZCBpbnQgZGlmZl9m
aWxlX2NvdW50OwogICAgaW50IGk7CiAgICAKICAgIHByaW50ZigiUmVhZGluZyB0aGUgc3lzdGVt
IGRlc2NyaXB0b3IuLi4iKTsKICAgIGZmbHVzaChzdGRvdXQpOwogICAgZHYgPSByZWFkX3VwZ3Jh
ZGVfZGVzY3JpcHRvcigpOwogICAgaWYgKGR2ICE9IE5VTEwpIHsKICAgICAgICBwcmludGYoImRv
bmVcbiIpOwogICAgICAgIGZpbGVzID0gdmVjdG9yX2luaXQoMjAwKTsKICAgICAgICBwcmludGYo
IlJlYWRpbmcgdGhlIEV4dGVybmFsIFN5c3RlbSBTb2Z0d2FyZSBkaXJlY3RvcnkuLi4iKTsKICAg
ICAgICBmZmx1c2goc3Rkb3V0KTsKICAgICAgICByYyA9IGZpbmRfZmlsZXMocGF0Y2hfZGlyX25h
bWUsIGZpbGVzKTsKICAgICAgICBpZiAocmMgPT0gQ01EX1NVQ0NFU1MpIHsKICAgICAgICAgICAg
dmVjdG9yIGZpbGVzX3RvX3VwZ3JhZGU7CiAgICAgICAgICAgIHByaW50ZigiZG9uZVxuIik7CiAg
ICAgICAgICAgIHByaW50ZigiTWFraW5nIGNoYW5nZWQgZmlsZXMgbGlzdFxuIik7CiAgICAgICAg
ICAgIC8vZmlsZXNfbm9fZHVwcyA9IHZlY3Rvcl9yZW1vdmVfZHVwbGljYXRlcyhmaWxlcywgZ2V0
X2ZpbGVfaW5vZGUpOwogICAgICAgICAgICB2ZWN0b3JfZnJlZShmaWxlcyk7CiAgICAgICAgICAg
IGZpbGVzX3RvX3VwZ3JhZGUgPSB2ZWN0b3JfaW5pdCgyMDApOwogICAgICAgICAgICByYyA9IG1h
a2VfZmlsZXNfdG9fdXBncmFkZV9saXN0KGR2LCBmaWxlc190b191cGdyYWRlLCBmaWxlcyk7CiAg
ICAgICAgICAgIGlmIChyYyA9PSBDTURfU1VDQ0VTUykgewogICAgICAgICAgICAgICAgZGlmZl9m
aWxlX2NvdW50ID0gdmVjdG9yX2NvdW50KGZpbGVzX3RvX3VwZ3JhZGUpOwogICAgICAgICAgICAg
ICAgaWYgKGRpZmZfZmlsZV9jb3VudCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHByaW50
ZigiXG5cbmZpbGVzIGFyZSBzYW1lIG9uIHNvdXJjZSBhbmQgdGFyZ2V0IGxvY2F0aW9uOlxuIik7
CiAgICAgICAgICAgICAgICB9ICAgIAogICAgICAgICAgICAgICAgZWxzZSBpZiAoZGlmZl9maWxl
X2NvdW50ID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgcmMgPT0gQ01E
X1NVQ0NFU1MgJiYgaSA8IHZlY3Rvcl9tYXgoZmlsZXNfdG9fdXBncmFkZSk7ICsraSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqc3JjX2ZpbGUgPSB2ZWN0b3JfbG9va3VwX2luZGV4
KGZpbGVzX3RvX3VwZ3JhZGUsIGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoc3Ry
Y21wKHNyY19maWxlLCAiL3ZlcnNpb24iKSkgfHwgIShzdHJjbXAoc3JjX2ZpbGUsICIvbW50L3Zl
cnNpb24iKSkgfHwgIShzdHJjbXAoc3JjX2ZpbGUsICIvbW50MS92ZXJzaW9uIikpKSB7IAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcblxuZmlsZXMgYXJlIHNhbWUgb24gc291
cmNlIGFuZCB0YXJnZXQgbG9jYXRpb246XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuXG5UaGUgZm9sbG93aW5nIGZp
bGVzIGFyZSBkaWZmZXJlbnQ6XG4iKTsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRfc3RyaW5n
X3ZlY3RvcihmaWxlc190b191cGdyYWRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHByaW50ZigiRmFpbGVkIHRvIGdl
dCB0aGUgbGlzdCBvZiBmaWxlcyB0aGF0IGFyZSBkaWZmZXJlbnRcbiIpOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIC8vdmVjdG9yX2ZyZWVfYWxsKGZpbGVzX25vX2R1cHMpOwogICAgICAgIH0K
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHJpbnRmKCJmYWlsZWRcbiIpOwogICAgICAgIH0K
ICAgICAgICB2ZWN0b3JfZnJlZShmaWxlcyk7CiAgICAgICAgdmVjdG9yX2ZyZWVfYWxsKGR2KTsK
ICAgIH0KICAgIGVsc2UgewogICAgICAgIHByaW50ZigiZmFpbGVkXG4iKTsKICAgIH0KICAgIHJl
dHVybiByYzsKfQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIE5hbWUgOiAgIGRvX2NvbXBhcmUoKQogKgogKiBEZXNj
cmlwdGlvbjogY29tcGFyZSBzeXN0ZW0gc29mdHdhcmUKICoKICogQ3JlYXRlZCBieTogIFZpa2Fz
IFNhaW5pCiAqCiAqIERhdGUgQ3JlYXRlZDogICAgMDcvMTMvMDUKICoKICotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8K
aW50CmRvX2NvbXBhcmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQp7CiAgICBzdHJ1Y3QgdmVyc2lv
biBjdXJyZW50X3ZlcnNpb24sIHVwZ3JhZGVfdmVyc2lvbjsKICAgIHN0cnVjdCB2ZXJzaW9uIG9y
Z191cGdyYWRlX3ZlcnNpb247CiAgICBpbnQgcmMgPSBDTURfU1VDQ0VTUzsKICAgIGludCBpOwog
ICAgdmVjdG9yIHNlY29uZGFyeV9mc3RhYnMgPSBOVUxMOwoKICAgIHJjID0gcGFyc2VfY29tcGFy
ZV9hcmdzKGFyZ2MsIGFyZ3YpOwogICAgaWYgKHJjICE9IENNRF9TVUNDRVNTKQogICAgICAgIHJl
dHVybiByYzsKCiAgICBiZWNvbWVfcm9vdCgpOwogICAgaWYgKGNvbXBhcmVfc2Vjb25kYXJ5KSB7
CgkJZ2V0X2RldmljZV9uYW1lcygpOwogICAgICAgIHNlY29uZGFyeV9mc3RhYnMgPSBtYWtlX3Nl
Y29uZGFyeV9mc3RhYnMoKTsKICAgICAgICBwcmludGYoIkNoZWNraW5nIGZpbGUgc3lzdGVtLi4u
XG4iKTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmVjdG9yX21heChzZWNvbmRhcnlfZnN0YWJz
KTsgKytpKSB7CiAgICAgICAgICAgIHN0cnVjdCBmc3RhYiAqZnMgPSB2ZWN0b3JfbG9va3VwX2lu
ZGV4KHNlY29uZGFyeV9mc3RhYnMsIGkpOwogICAgICAgICAgICBleGVjdXRlX2NvbW1hbmQoIi9z
YmluL2ZzY2siLCAyLCAiLXkiLCBmcy0+ZnNfc3BlYywgTlVMTCk7CiAgICAgICAgfQogICAgICAg
IHByaW50ZigiTW91bnRpbmcgc2Vjb25kYXJ5IGRpc2suLi4iKTsKICAgICAgICBmZmx1c2goc3Rk
b3V0KTsKICAgICAgICAvL2xvc3QgaW4gbWVtb3J5CiAgICAgICAgLy9zZWNvbmRhcnlfZnN0YWJz
ID0gbWFrZV9zZWNvbmRhcnlfZnN0YWJzKCk7CiAgICAgICAgdV9tb3VudF9zZWNvbmRhcnkoc2Vj
b25kYXJ5X2ZzdGFicyk7CiAgICAgICAgcmMgPSBjb252ZXJ0X3JjKG1vdW50X3NlY29uZGFyeShz
ZWNvbmRhcnlfZnN0YWJzKSk7CiAgICAgICAgcHJpbnRmKCIlc1xuIiwgcmMgPT0gQ01EX1NVQ0NF
U1MgPyAiZG9uZS4iIDogImZhaWxlZC4iKTsKICAgICAgICBjdXJfdHJ1ZW5hbWVfZnVuYyA9IHNl
Y29uZGFyeV91cGdyYWRlX3RydWVuYW1lOwogICAgfSBlbHNlIHsKICAgICAgICBjdXJfdHJ1ZW5h
bWVfZnVuYyA9IHVwZ3JhZGVfdHJ1ZW5hbWU7CiAgICB9CgogICAgaWYgKHJjID09IENNRF9TVUND
RVNTKSB7CiAgICAgICAgcmMgPSBtb3VudF9wYXRjaChwYXRjaF9sb2NhdGlvbik7CiAgICAgICAg
aWYgKHJjID09IENNRF9TVUNDRVNTKSB7CiAgICAgICAgICAgIHByaW50ZigiTW91bnRlZCB0aGUg
ZXh0ZXJuYWwgc3lzdGVtIHNvZnR3YXJlIGRpcmVjdG9yeVxuIik7CiAgICAgICAgICAgIGlmICgo
cmMgPSBnZXRfdXBncmFkZV92ZXJzaW9uKCZ1cGdyYWRlX3ZlcnNpb24pKSA9PSBDTURfU1VDQ0VT
UykgewogICAgICAgICAgICAgICAgZ2V0X29yZ191cGdyYWRlX3ZlcnNpb24oJm9yZ191cGdyYWRl
X3ZlcnNpb24pOwogICAgICAgICAgICAgICAgaWYgKChyYyA9IGdldF9sb2NhbF92ZXJzaW9uKCZj
dXJyZW50X3ZlcnNpb24pKSA9PSBDTURfU1VDQ0VTUykgewogICAgICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50X3ZlcnNpb24ucGxhdGZvcm0gIT0gdXBncmFkZV92ZXJzaW9uLnBsYXRmb3JtKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiVGhlIGV4dGVybmFsIHN5c3RlbSBzb2Z0
d2FyZSBkaXN0cmlidXRpb24gaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGlzIHN5c3RlbSFcbiIp
OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDdXJyZW50IHN5c3RlbSB2ZXJzaW9uOiAlZC4lZC4l
ZC4lZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tcGFyZSB2ZXJzaW9uOiAlZC4l
ZC4lZC4lZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdmVyc2lvbi5t
YWpvciwgY3VycmVudF92ZXJzaW9uLm1pbm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3VycmVudF92ZXJzaW9uLm1haW50ZW5hbmNlLCBjdXJyZW50X3ZlcnNpb24ucGF0Y2gsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlX3ZlcnNpb24ubWFqb3IsIHVwZ3JhZGVfdmVy
c2lvbi5taW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVfdmVyc2lvbi5t
YWludGVuYW5jZSwgdXBncmFkZV92ZXJzaW9uLnBhdGNoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmMgPSBwZXJmb3JtX2NvbXBhcmUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICBwcmludGYoImZhaWxlZCB0byBkZXRlcm1pbmUgdGhlIGNvbXBhcmUgdmVyc2lvbiBhbmQgcGVy
Zm9ybSBjb21wYXJpc29uXG4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bW91bnRfcGF0
Y2goKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKGNvbXBhcmVfc2Vjb25kYXJ5KSB7CiAgICAg
ICAgdV9tb3VudF9zZWNvbmRhcnkoc2Vjb25kYXJ5X2ZzdGFicyk7CiAgICAgICAgZnJlZV9mc3Rh
Yl92ZWN0b3Ioc2Vjb25kYXJ5X2ZzdGFicyk7CiAgICB9CiAgICAKICAgIHVuYmVjb21lX3Jvb3Qo
KTsKICAgIHJldHVybiByYzsKfQoKCg==
