ELF2: stub for i386 shared library

WIP: stub is debugged, but compressed input needs work
	modified:   stub/src/arm.v4a-linux.elf-so_entry.S
	modified:   stub/src/i386-linux.elf-so_entry.S
	modified:   stub/src/i386-linux.elf-so_fold.S
	modified:   stub/src/i386-linux.elf-so_main.c
	modified:   stub/src/include/linux.h
           plus generated *.h *.dump
This commit is contained in:
John Reiser 2024-08-12 07:53:00 -07:00
parent 94eebc3ee5
commit cb39e6e0b8
15 changed files with 8104 additions and 7049 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/* i386-linux.elf-entry.h
created from i386-linux.elf-entry.bin, 3772 (0xebc) bytes
created from i386-linux.elf-entry.bin, 3678 (0xe5e) bytes
This file is part of the UPX executable compressor.
@ -32,14 +32,14 @@
/* clang-format off */
#define STUB_I386_LINUX_ELF_ENTRY_SIZE 3772
#define STUB_I386_LINUX_ELF_ENTRY_ADLER32 0xc89f6db4
#define STUB_I386_LINUX_ELF_ENTRY_CRC32 0xc0a3e8ec
#define STUB_I386_LINUX_ELF_ENTRY_SIZE 3678
#define STUB_I386_LINUX_ELF_ENTRY_ADLER32 0x5d286322
#define STUB_I386_LINUX_ELF_ENTRY_CRC32 0x4cbc0239
unsigned char stub_i386_linux_elf_entry[3772] = {
unsigned char stub_i386_linux_elf_entry[3678] = {
/* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 168, 6, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0,
/* 0x0020 */ 196, 6, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0,
/* 0x0030 */ 8, 0, 5, 0,243, 15, 30,251,232,252,255,255,255, 1,219,116,
/* 0x0040 */ 2,243,195,139, 30,131,238,252, 17,219,195, 94,131,236, 28,141,
/* 0x0050 */ 124, 36, 32,232,190, 1, 0, 0,232,185, 1, 0, 0,139, 7,139,
@ -71,206 +71,200 @@ unsigned char stub_i386_linux_elf_entry[3772] = {
/* 0x01f0 */ 229, 87,139, 77, 16,139, 69, 12,139,125, 8,243,170, 95, 93,195,
/* 0x0200 */ 85,137,229, 87, 86,139, 77, 16,139,117, 12,139,125, 8,243,164,
/* 0x0210 */ 137,248, 94, 95, 93,195,139, 7,131,199, 4,133,192,117,247,195,
/* 0x0220 */ 204,195, 0, 0, 85,137,229, 86, 83,131,236, 64,139,117, 8,106,
/* 0x0230 */ 64,104,255, 0, 0, 0,141, 93,184, 83,232,252,255,255,255, 83,
/* 0x0240 */ 86,232,252,255,255,255,137,194,131,196, 20,133,192,120, 21, 15,
/* 0x0220 */ 204,195, 0, 0, 85,137,229, 86, 83,131,236, 72,106, 64,104,255,
/* 0x0230 */ 0, 0, 0,141,117,184, 86,232,252,255,255,255,131,196, 12,139,
/* 0x0240 */ 93, 8,137,241,106,106, 88,205,128,137,194,133,192,120, 21, 15,
/* 0x0250 */ 183, 69,192, 37, 0,240, 0, 0,185, 0, 0, 0, 0, 61, 0, 64,
/* 0x0260 */ 0, 0,116, 23,131,250,254,117, 16,104,192, 1, 0, 0, 86,232,
/* 0x0270 */ 252,255,255,255,137,194,131,196, 8,137,209,137,200,141,101,248,
/* 0x0280 */ 91, 94,201,195,139, 68, 36, 4,137,194,131,226, 31,131,224, 63,
/* 0x0290 */ 131,250, 26,118, 12,168, 32,116, 5,131,232, 70,235, 3,131,232,
/* 0x02a0 */ 43,131,192, 64,195, 85,137,229, 87, 86, 83,131,236, 20,232, 12,
/* 0x02b0 */ 0, 0, 0, 47,100, 97,116, 97, 47,100, 97,116, 97, 47, 0, 90,
/* 0x02c0 */ 139, 2,139, 77, 8,137, 1,139, 66, 4,137, 65, 4,102,139, 66,
/* 0x02d0 */ 8,102,137, 65, 8,138, 66, 10,136, 65, 10,198, 65, 11, 0, 81,
/* 0x02e0 */ 232, 63,255,255,255,131,196, 4,232, 19, 0, 0, 0, 47,112,114,
/* 0x02f0 */ 111, 99, 47,115,101,108,102, 47, 99,109,100,108,105,110,101, 0,
/* 0x0300 */ 94,185, 0, 0, 0, 0,137,243,137,202,106, 5, 88,205,128,137,
/* 0x0310 */ 69,232,139,117, 12,186,255, 15, 0, 0,137,195,137,241,106, 3,
/* 0x0320 */ 88,205,128,137,199,139, 93,232,106, 6, 88,205,128,137,248,133,
/* 0x0330 */ 255, 15,136,178, 0, 0, 0,198, 4, 62, 0,128, 62, 0,116, 6,
/* 0x0340 */ 70,128, 62, 0,117,250,137,240,128, 62, 47,116, 6, 78,128, 62,
/* 0x0350 */ 47,117,250, 41,240, 80, 86,139, 69, 8,131,192, 10, 80,232,252,
/* 0x0360 */ 255,255,255,137,195,198, 0, 0,255,117, 8,232,180,254,255,255,
/* 0x0370 */ 131,196, 16,232, 7, 0, 0, 0, 47, 99, 97, 99,104,101, 0, 90,
/* 0x0380 */ 139, 2,137, 3,102,139, 66, 4,102,137, 67, 4,131,195, 6,198,
/* 0x0390 */ 3, 0,255,117, 8,232,138,254,255,255,232, 5, 0, 0, 0, 47,
/* 0x03a0 */ 117,112,120, 0, 88,139, 0,137, 3,141,115, 4,106, 20, 88,205,
/* 0x03b0 */ 128,137,195,137, 4, 36,232,201,254,255,255,136, 6,137,216,193,
/* 0x03c0 */ 232, 6,137, 4, 36,232,186,254,255,255,136, 70, 1,137,216,193,
/* 0x03d0 */ 232, 12,137, 4, 36,232,170,254,255,255,131,196, 4,136, 70, 2,
/* 0x03e0 */ 198, 70, 3, 0,184, 0, 0, 0, 0,141,101,244, 91, 94, 95,201,
/* 0x03f0 */ 195, 86, 83,139,116, 36, 12,139, 92, 36, 16,139, 76, 36, 20, 73,
/* 0x0400 */ 131,249,255,116, 30,138, 22,131,202, 32, 15,190,210,138, 3,131,
/* 0x0410 */ 200, 32, 15,190,192, 67, 70, 41,194,137,208,117, 11, 73,131,249,
/* 0x0420 */ 255,117,226,184, 0, 0, 0, 0, 91, 94,195, 85,137,229, 87, 86,
/* 0x0430 */ 83,129,236, 60, 16, 0, 0,186, 0, 0, 0, 0,232, 4, 0, 0,
/* 0x0440 */ 0,117,112,120, 0, 94,185, 16, 0, 0, 0,184,100, 1, 0, 0,
/* 0x0450 */ 137,243,205,128,137,199,131,248,234,117, 13,184,100, 1, 0, 0,
/* 0x0460 */ 137,243,137,209,205,128,137,199,133,255,121, 68,232, 9, 0, 0,
/* 0x0470 */ 0, 47,100,101,118, 47,115,104,109, 0, 95,185, 2, 0, 65, 0,
/* 0x0480 */ 190,192, 1, 0, 0,137,251,137,242,106, 5, 88,205,128,137,199,
/* 0x0490 */ 133,192,121, 28,232, 13, 0, 0, 0,109,101,109,102,100, 95, 99,
/* 0x04a0 */ 114,101, 97,116,101, 0, 88, 80,232,252,255,255,255,131,196, 4,
/* 0x04b0 */ 141,157,244,239,255,255, 83,232,252,255,255,255,190, 0, 0, 0,
/* 0x04c0 */ 0,232, 4, 0, 0, 0, 97,110,100, 0, 88,199, 4, 36, 3, 0,
/* 0x04d0 */ 0, 0, 83, 80,232, 24,255,255,255,131,196, 12,133,192,116, 39,
/* 0x04e0 */ 232, 4, 0, 0, 0, 76,105,110, 0, 88,106, 3, 83, 80,232,254,
/* 0x04f0 */ 254,255,255,131,196, 12,133,192,117, 13,128,189,118,240,255,255,
/* 0x0500 */ 52,126, 4,102,190, 1, 0,133,246,117,123,131,125, 16, 0,117,
/* 0x0510 */ 28,232,252,255,255,255,137, 69, 16,133,192,117, 16,141,133,244,
/* 0x0520 */ 239,255,255,137, 69, 16,198,133,244,239,255,255, 0,133,246,117,
/* 0x0530 */ 85,131,255,218,117, 80,131,125, 16, 0,116, 74,139, 85, 16,128,
/* 0x0540 */ 58, 0,117, 26,141,133,244,239,255,255, 80, 82,232, 84,253,255,
/* 0x0550 */ 255,131,196, 8,137,193,133,192, 15,136, 1, 1, 0, 0,185,194,
/* 0x0560 */ 0, 0, 0,191,192, 1, 0, 0,139, 93, 16,137,250,106, 5, 88,
/* 0x0570 */ 205,128,137,199,137,193,133,192, 15,136,225, 0, 0, 0,139, 93,
/* 0x0580 */ 16,106, 10, 88,205,128,131,125, 12, 0, 15,132,148, 0, 0, 0,
/* 0x0590 */ 133,246,116, 22,137,251,139, 77, 12,106, 93, 88,205,128,137,193,
/* 0x05a0 */ 133,192, 15,136,183, 0, 0, 0,235,122,141,133,244,239,255,255,
/* 0x05b0 */ 104, 0, 16, 0, 0,106, 0, 80,232,252,255,255,255,139, 69, 12,
/* 0x05c0 */ 137,133,208,239,255,255,131,196, 12,133,192,116, 73,141,181,244,
/* 0x05d0 */ 239,255,255,139,149,208,239,255,255,137,149,184,239,255,255,129,
/* 0x05e0 */ 250, 0, 16, 0, 0,118, 10,199,133,184,239,255,255, 0, 16, 0,
/* 0x05f0 */ 0,137,251,137,241,139,149,184,239,255,255,106, 4, 88,205,128,
/* 0x0600 */ 59,133,184,239,255,255,117, 73,139,133,184,239,255,255, 41,133,
/* 0x0610 */ 208,239,255,255,117,189,185, 0, 0, 0, 0,137,251,137,202,106,
/* 0x0620 */ 19, 88,205,128,106, 0, 87,131,125, 8, 1, 25,192,131,224,240,
/* 0x0630 */ 131,192, 17, 80,106, 3,255,117, 12,255,117, 8,232,252,255,255,
/* 0x0640 */ 255,137,194,131,196, 24,137,193, 61, 0,240,255,255,119, 16,235,
/* 0x0650 */ 7,185,228,255,255,255,235, 7,141, 71, 1,137,193, 9,209,137,
/* 0x0660 */ 200,141,101,244, 91, 94, 95,201,195, 90,232, 19, 0, 0, 0, 0,
/* 0x0670 */ 0, 0, 0, 0, 46,115,121,109,116, 97, 98, 0, 46,115,116,114,
/* 0x0680 */ 116, 97, 98, 0, 46,115,104,115,116,114,116, 97, 98, 0, 46,114,
/* 0x0690 */ 101,108, 69, 76, 70, 77, 65, 73, 78, 88, 0, 46,114,101,108, 69,
/* 0x06a0 */ 76, 70, 77, 65, 73, 78, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0260 */ 0, 0,116, 22,131,250,254,117, 15,185,192, 1, 0, 0,139, 93,
/* 0x0270 */ 8,106, 39, 88,205,128,137,194,137,209,137,200,141,101,248, 91,
/* 0x0280 */ 94,201,195,139, 68, 36, 4,137,194,131,226, 31,131,224, 63,131,
/* 0x0290 */ 250, 26,118, 12,168, 32,116, 5,131,232, 70,235, 3,131,232, 43,
/* 0x02a0 */ 131,192, 64,195, 85,137,229, 87, 86, 83,131,236, 20,232, 12, 0,
/* 0x02b0 */ 0, 0, 47,100, 97,116, 97, 47,100, 97,116, 97, 47, 0, 90,139,
/* 0x02c0 */ 2,139, 77, 8,137, 1,139, 66, 4,137, 65, 4,102,139, 66, 8,
/* 0x02d0 */ 102,137, 65, 8,138, 66, 10,136, 65, 10,198, 65, 11, 0, 81,232,
/* 0x02e0 */ 64,255,255,255,131,196, 4,232, 19, 0, 0, 0, 47,112,114,111,
/* 0x02f0 */ 99, 47,115,101,108,102, 47, 99,109,100,108,105,110,101, 0, 94,
/* 0x0300 */ 185, 0, 0, 0, 0,137,243,137,202,106, 5, 88,205,128,137, 69,
/* 0x0310 */ 232,139,117, 12,186,255, 15, 0, 0,137,195,137,241,106, 3, 88,
/* 0x0320 */ 205,128,137,199,139, 93,232,106, 6, 88,205,128,137,248,133,255,
/* 0x0330 */ 15,136,178, 0, 0, 0,198, 4, 62, 0,128, 62, 0,116, 6, 70,
/* 0x0340 */ 128, 62, 0,117,250,137,240,128, 62, 47,116, 6, 78,128, 62, 47,
/* 0x0350 */ 117,250, 41,240, 80, 86,139, 69, 8,131,192, 10, 80,232,252,255,
/* 0x0360 */ 255,255,137,195,198, 0, 0,255,117, 8,232,181,254,255,255,131,
/* 0x0370 */ 196, 16,232, 7, 0, 0, 0, 47, 99, 97, 99,104,101, 0, 90,139,
/* 0x0380 */ 2,137, 3,102,139, 66, 4,102,137, 67, 4,131,195, 6,198, 3,
/* 0x0390 */ 0,255,117, 8,232,139,254,255,255,232, 5, 0, 0, 0, 47,117,
/* 0x03a0 */ 112,120, 0, 88,139, 0,137, 3,141,115, 4,106, 20, 88,205,128,
/* 0x03b0 */ 137,195,137, 4, 36,232,201,254,255,255,136, 6,137,216,193,232,
/* 0x03c0 */ 6,137, 4, 36,232,186,254,255,255,136, 70, 1,137,216,193,232,
/* 0x03d0 */ 12,137, 4, 36,232,170,254,255,255,131,196, 4,136, 70, 2,198,
/* 0x03e0 */ 70, 3, 0,184, 0, 0, 0, 0,141,101,244, 91, 94, 95,201,195,
/* 0x03f0 */ 86, 83,139,116, 36, 12,139, 92, 36, 16,139, 76, 36, 20, 73,131,
/* 0x0400 */ 249,255,116, 30,138, 22,131,202, 32, 15,190,210,138, 3,131,200,
/* 0x0410 */ 32, 15,190,192, 67, 70, 41,194,137,208,117, 11, 73,131,249,255,
/* 0x0420 */ 117,226,184, 0, 0, 0, 0, 91, 94,195, 85,137,229, 87, 86, 83,
/* 0x0430 */ 129,236, 68, 16, 0, 0,186, 0, 0, 0, 0,232, 4, 0, 0, 0,
/* 0x0440 */ 117,112,120, 0, 94,185, 16, 0, 0, 0,184,100, 1, 0, 0,137,
/* 0x0450 */ 243,205,128,137,199,131,248,234,117, 13,184,100, 1, 0, 0,137,
/* 0x0460 */ 243,137,209,205,128,137,199,133,255,121, 68,232, 9, 0, 0, 0,
/* 0x0470 */ 47,100,101,118, 47,115,104,109, 0, 95,185, 2, 0, 65, 0,190,
/* 0x0480 */ 192, 1, 0, 0,137,251,137,242,106, 5, 88,205,128,137,199,133,
/* 0x0490 */ 192,121, 28,232, 13, 0, 0, 0,109,101,109,102,100, 95, 99,114,
/* 0x04a0 */ 101, 97,116,101, 0, 88, 80,232,252,255,255,255,131,196, 4,141,
/* 0x04b0 */ 181,244,239,255,255,137,243,106,122, 88,205,128,199,133,220,239,
/* 0x04c0 */ 255,255, 0, 0, 0, 0,232, 4, 0, 0, 0, 97,110,100, 0, 88,
/* 0x04d0 */ 106, 3, 86, 80,232, 23,255,255,255,131,196, 12,133,192,116, 45,
/* 0x04e0 */ 232, 4, 0, 0, 0, 76,105,110, 0, 88,106, 3, 86, 80,232,253,
/* 0x04f0 */ 254,255,255,131,196, 12,133,192,117, 19,128,189,118,240,255,255,
/* 0x0500 */ 52,126, 10,199,133,220,239,255,255, 1, 0, 0, 0,131,189,220,
/* 0x0510 */ 239,255,255, 0, 15,133,128, 0, 0, 0,131,125, 16, 0,117, 28,
/* 0x0520 */ 232,252,255,255,255,137, 69, 16,133,192,117, 16,141,133,244,239,
/* 0x0530 */ 255,255,137, 69, 16,198,133,244,239,255,255, 0,131,189,220,239,
/* 0x0540 */ 255,255, 0,117, 85,131,255,218,117, 80,131,125, 16, 0,116, 74,
/* 0x0550 */ 139, 85, 16,128, 58, 0,117, 26,141,133,244,239,255,255, 80, 82,
/* 0x0560 */ 232, 63,253,255,255,131,196, 8,137,193,133,192, 15,136, 6, 1,
/* 0x0570 */ 0, 0,185,194, 0, 0, 0,190,192, 1, 0, 0,139, 93, 16,137,
/* 0x0580 */ 242,106, 5, 88,205,128,137,199,137,193,133,192, 15,136,230, 0,
/* 0x0590 */ 0, 0,139, 93, 16,106, 10, 88,205,128,131,125, 12, 0, 15,132,
/* 0x05a0 */ 153, 0, 0, 0,131,189,220,239,255,255, 0,116, 22,137,251,139,
/* 0x05b0 */ 77, 12,106, 93, 88,205,128,137,193,133,192, 15,136,183, 0, 0,
/* 0x05c0 */ 0,235,122,141,133,244,239,255,255,104, 0, 16, 0, 0,106, 0,
/* 0x05d0 */ 80,232,252,255,255,255,139, 69, 12,137,133,200,239,255,255,131,
/* 0x05e0 */ 196, 12,133,192,116, 73,141,181,244,239,255,255,139,149,200,239,
/* 0x05f0 */ 255,255,137,149,176,239,255,255,129,250, 0, 16, 0, 0,118, 10,
/* 0x0600 */ 199,133,176,239,255,255, 0, 16, 0, 0,137,251,137,241,139,149,
/* 0x0610 */ 176,239,255,255,106, 4, 88,205,128, 59,133,176,239,255,255,117,
/* 0x0620 */ 73,139,133,176,239,255,255, 41,133,200,239,255,255,117,189,185,
/* 0x0630 */ 0, 0, 0, 0,137,251,137,202,106, 19, 88,205,128,106, 0, 87,
/* 0x0640 */ 131,125, 8, 1, 25,192,131,224,240,131,192, 17, 80,106, 3,255,
/* 0x0650 */ 117, 12,255,117, 8,232,252,255,255,255,137,194,131,196, 24,137,
/* 0x0660 */ 193, 61, 0,240,255,255,119, 16,235, 7,185,228,255,255,255,235,
/* 0x0670 */ 7,141, 71, 1,137,193, 9,209,137,200,141,101,244, 91, 94, 95,
/* 0x0680 */ 201,195, 90,232, 19, 0, 0, 0, 0, 0, 0, 0, 0, 46,115,121,
/* 0x0690 */ 109,116, 97, 98, 0, 46,115,116,114,116, 97, 98, 0, 46,115,104,
/* 0x06a0 */ 115,116,114,116, 97, 98, 0, 46,114,101,108, 69, 76, 70, 77, 65,
/* 0x06b0 */ 73, 78, 88, 0, 46,114,101,108, 69, 76, 70, 77, 65, 73, 78, 90,
/* 0x06c0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06d0 */ 31, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
/* 0x06e0 */ 52, 0, 0, 0, 53, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06f0 */ 4, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 9, 0, 0, 0,
/* 0x0700 */ 0, 0, 0, 0, 0, 0, 0, 0, 36, 9, 0, 0, 96, 0, 0, 0,
/* 0x0710 */ 6, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0,
/* 0x0720 */ 44, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0730 */ 105, 6, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0740 */ 1, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 9, 0, 0, 0,
/* 0x0750 */ 0, 0, 0, 0, 0, 0, 0, 0,132, 9, 0, 0, 16, 0, 0, 0,
/* 0x0760 */ 6, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0,
/* 0x0770 */ 17, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0780 */ 115, 6, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0790 */ 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0,
/* 0x07a0 */ 0, 0, 0, 0, 0, 0, 0, 0,232, 7, 0, 0,224, 0, 0, 0,
/* 0x07b0 */ 7, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0,
/* 0x07c0 */ 9, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x07d0 */ 200, 8, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x07e0 */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x07f0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0800 */ 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0810 */ 0, 0, 0, 0, 3, 0, 3, 0, 1, 0, 0, 0,247, 3, 0, 0,
/* 0x0820 */ 62, 2, 0, 0, 18, 0, 1, 0, 17, 0, 0, 0, 0, 0, 0, 0,
/* 0x0830 */ 0, 0, 0, 0, 16, 0, 0, 0, 25, 0, 0, 0,204, 1, 0, 0,
/* 0x0840 */ 0, 0, 0, 0, 16, 0, 1, 0, 33, 0, 0, 0,114, 1, 0, 0,
/* 0x0850 */ 0, 0, 0, 0, 16, 0, 1, 0, 38, 0, 0, 0,149, 1, 0, 0,
/* 0x0860 */ 0, 0, 0, 0, 16, 0, 1, 0, 44, 0, 0, 0,128, 1, 0, 0,
/* 0x0870 */ 0, 0, 0, 0, 16, 0, 1, 0, 59, 0, 0, 0, 0, 0, 0, 0,
/* 0x0880 */ 0, 0, 0, 0, 16, 0, 1, 0, 66, 0, 0, 0,186, 1, 0, 0,
/* 0x0890 */ 0, 0, 0, 0, 16, 0, 1, 0, 73, 0, 0, 0,236, 1, 0, 0,
/* 0x08a0 */ 0, 0, 0, 0, 16, 0, 1, 0, 81, 0, 0, 0,131, 1, 0, 0,
/* 0x08b0 */ 0, 0, 0, 0, 16, 0, 1, 0, 86, 0, 0, 0,164, 1, 0, 0,
/* 0x08c0 */ 0, 0, 0, 0, 16, 0, 1, 0, 0,117,112,120, 95,109,109, 97,
/* 0x08d0 */ 112, 95, 97,110,100, 95,102,100, 0, 79, 95, 66, 73, 78, 70, 79,
/* 0x08e0 */ 0,109,101,109,112, 99,112,121, 0,109,109, 97,112, 0,117,110,
/* 0x08f0 */ 97,109,101, 0,103,101,116, 95,117,112,120,102,110, 95,112, 97,
/* 0x0900 */ 116,104, 0, 95,115,116, 97,114,116, 0,109,101,109,115,101,116,
/* 0x0910 */ 0,109,121, 95, 98,107,112,116, 0,115,116, 97,116, 0,109,107,
/* 0x0920 */ 100,105,114, 0, 5, 0, 0, 0, 2, 2, 0, 0,165, 0, 0, 0,
/* 0x0930 */ 2, 3, 0, 0, 74, 1, 0, 0, 2, 6, 0, 0, 7, 2, 0, 0,
/* 0x0940 */ 2, 10, 0, 0, 14, 2, 0, 0, 2, 12, 0, 0, 60, 2, 0, 0,
/* 0x0950 */ 2, 13, 0, 0, 43, 3, 0, 0, 2, 5, 0, 0,117, 4, 0, 0,
/* 0x0960 */ 2, 11, 0, 0,132, 4, 0, 0, 2, 7, 0, 0,222, 4, 0, 0,
/* 0x0970 */ 2, 8, 0, 0,133, 5, 0, 0, 2, 10, 0, 0, 9, 6, 0, 0,
/* 0x0980 */ 2, 6, 0, 0, 2, 0, 0, 0, 2, 1, 0, 0, 6, 0, 0, 0,
/* 0x0990 */ 1, 4, 0, 0,102,105,108,101, 32,102,111,114,109, 97,116, 32,
/* 0x09a0 */ 101,108,102, 51, 50, 45,105, 51, 56, 54, 10, 10, 83,101, 99,116,
/* 0x09b0 */ 105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32,
/* 0x09c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32,
/* 0x09d0 */ 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32,
/* 0x09e0 */ 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102,102, 32, 32,
/* 0x09f0 */ 65,108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32,
/* 0x0a00 */ 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 54,
/* 0x0a10 */ 51, 53, 32, 32, 48, 32, 32, 48, 32, 32, 48, 51, 52, 32, 32, 50,
/* 0x0a20 */ 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32,
/* 0x0a30 */ 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 32,
/* 0x0a40 */ 48, 97, 32, 32, 48, 32, 32, 48, 32, 32, 48, 54, 54, 57, 32, 32,
/* 0x0a50 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 83,
/* 0x0a60 */ 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48,
/* 0x0a70 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76,
/* 0x0a80 */ 70, 77, 65, 73, 78, 88, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78,
/* 0x0a90 */ 88, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x0aa0 */ 100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 48, 32, 69, 76,
/* 0x0ab0 */ 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 51,102, 55, 32,
/* 0x0ac0 */ 103, 32, 32, 32, 32, 32, 70, 32, 69, 76, 70, 77, 65, 73, 78, 88,
/* 0x0ad0 */ 32, 48, 50, 51,101, 32,117,112,120, 95,109,109, 97,112, 95, 97,
/* 0x0ae0 */ 110,100, 95,102,100, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x0af0 */ 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32, 79,
/* 0x0b00 */ 95, 66, 73, 78, 70, 79, 10, 48, 48, 48, 48, 48, 49, 99, 99, 32,
/* 0x0b10 */ 103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88,
/* 0x0b20 */ 32, 48, 32,109,101,109,112, 99,112,121, 10, 48, 48, 48, 48, 48,
/* 0x0b30 */ 49, 55, 50, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77,
/* 0x0b40 */ 65, 73, 78, 88, 32, 48, 32,109,109, 97,112, 10, 48, 48, 48, 48,
/* 0x0b50 */ 48, 49, 57, 53, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70,
/* 0x0b60 */ 77, 65, 73, 78, 88, 32, 48, 32,117,110, 97,109,101, 10, 48, 48,
/* 0x0b70 */ 48, 48, 48, 49, 56, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69,
/* 0x0b80 */ 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,103,101,116, 95,117,112,
/* 0x0b90 */ 120,102,110, 95,112, 97,116,104, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x0ba0 */ 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x0bb0 */ 78, 88, 32, 48, 32, 95,115,116, 97,114,116, 10, 48, 48, 48, 48,
/* 0x0bc0 */ 48, 49, 98, 97, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70,
/* 0x0bd0 */ 77, 65, 73, 78, 88, 32, 48, 32,109,101,109,115,101,116, 10, 48,
/* 0x0be0 */ 48, 48, 48, 48, 49,101, 99, 32,103, 32, 32, 32, 32, 32, 32, 32,
/* 0x0bf0 */ 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,109,121, 95, 98,107,
/* 0x0c00 */ 112,116, 10, 48, 48, 48, 48, 48, 49, 56, 51, 32,103, 32, 32, 32,
/* 0x0c10 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,115,
/* 0x0c20 */ 116, 97,116, 10, 48, 48, 48, 48, 48, 49, 97, 52, 32,103, 32, 32,
/* 0x0c30 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,
/* 0x0c40 */ 109,107,100,105,114, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79,
/* 0x0c50 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69,
/* 0x0c60 */ 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84,
/* 0x0c70 */ 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0c80 */ 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48,
/* 0x0c90 */ 48, 48, 53, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32,
/* 0x0ca0 */ 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48,
/* 0x0cb0 */ 48, 48, 48, 48, 48, 97, 53, 32, 82, 95, 51, 56, 54, 95, 80, 67,
/* 0x0cc0 */ 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,117,112,120, 95,109,109,
/* 0x0cd0 */ 97,112, 95, 97,110,100, 95,102,100, 10, 48, 48, 48, 48, 48, 49,
/* 0x0ce0 */ 52, 97, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32,
/* 0x0cf0 */ 32, 32, 32, 32, 32,109,109, 97,112, 10, 48, 48, 48, 48, 48, 50,
/* 0x0d00 */ 48, 55, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32,
/* 0x0d10 */ 32, 32, 32, 32, 32,109,101,109,115,101,116, 10, 48, 48, 48, 48,
/* 0x0d20 */ 48, 50, 48,101, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32,
/* 0x0d30 */ 32, 32, 32, 32, 32, 32, 32,115,116, 97,116, 10, 48, 48, 48, 48,
/* 0x0d40 */ 48, 50, 51, 99, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32,
/* 0x0d50 */ 32, 32, 32, 32, 32, 32, 32,109,107,100,105,114, 10, 48, 48, 48,
/* 0x0d60 */ 48, 48, 51, 50, 98, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50,
/* 0x0d70 */ 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,112, 99,112,121, 10,
/* 0x0d80 */ 48, 48, 48, 48, 48, 52, 55, 53, 32, 82, 95, 51, 56, 54, 95, 80,
/* 0x0d90 */ 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,121, 95, 98,107,
/* 0x0da0 */ 112,116, 10, 48, 48, 48, 48, 48, 52, 56, 52, 32, 82, 95, 51, 56,
/* 0x0db0 */ 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,117,110,
/* 0x0dc0 */ 97,109,101, 10, 48, 48, 48, 48, 48, 52,100,101, 32, 82, 95, 51,
/* 0x0dd0 */ 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,103,
/* 0x0de0 */ 101,116, 95,117,112,120,102,110, 95,112, 97,116,104, 10, 48, 48,
/* 0x0df0 */ 48, 48, 48, 53, 56, 53, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51,
/* 0x0e00 */ 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,115,101,116, 10,
/* 0x0e10 */ 48, 48, 48, 48, 48, 54, 48, 57, 32, 82, 95, 51, 56, 54, 95, 80,
/* 0x0e20 */ 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,109, 97,112, 10,
/* 0x0e30 */ 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79,
/* 0x0e40 */ 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78,
/* 0x0e50 */ 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80,
/* 0x0e60 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86,
/* 0x0e70 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 50, 32, 82, 95,
/* 0x0e80 */ 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0e90 */ 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x0ea0 */ 54, 32, 82, 95, 51, 56, 54, 95, 51, 50, 32, 32, 32, 32, 32, 32,
/* 0x0eb0 */ 32, 32, 32, 32, 79, 95, 66, 73, 78, 70, 79, 10
/* 0x06d0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06e0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0,
/* 0x06f0 */ 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
/* 0x0700 */ 78, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
/* 0x0710 */ 0, 0, 0, 0, 27, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
/* 0x0720 */ 0, 0, 0, 0, 64, 9, 0, 0, 72, 0, 0, 0, 6, 0, 0, 0,
/* 0x0730 */ 1, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 44, 0, 0, 0,
/* 0x0740 */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,130, 6, 0, 0,
/* 0x0750 */ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x0760 */ 0, 0, 0, 0, 40, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
/* 0x0770 */ 0, 0, 0, 0,136, 9, 0, 0, 16, 0, 0, 0, 6, 0, 0, 0,
/* 0x0780 */ 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 17, 0, 0, 0,
/* 0x0790 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 6, 0, 0,
/* 0x07a0 */ 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x07b0 */ 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
/* 0x07c0 */ 0, 0, 0, 0, 4, 8, 0, 0,224, 0, 0, 0, 7, 0, 0, 0,
/* 0x07d0 */ 3, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 9, 0, 0, 0,
/* 0x07e0 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 8, 0, 0,
/* 0x07f0 */ 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x0800 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0810 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0820 */ 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0830 */ 3, 0, 3, 0, 1, 0, 0, 0,246, 3, 0, 0, 88, 2, 0, 0,
/* 0x0840 */ 18, 0, 1, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0850 */ 16, 0, 0, 0, 25, 0, 0, 0,204, 1, 0, 0, 0, 0, 0, 0,
/* 0x0860 */ 16, 0, 1, 0, 33, 0, 0, 0,114, 1, 0, 0, 0, 0, 0, 0,
/* 0x0870 */ 16, 0, 1, 0, 38, 0, 0, 0,149, 1, 0, 0, 0, 0, 0, 0,
/* 0x0880 */ 16, 0, 1, 0, 44, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0,
/* 0x0890 */ 16, 0, 1, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x08a0 */ 16, 0, 1, 0, 66, 0, 0, 0,186, 1, 0, 0, 0, 0, 0, 0,
/* 0x08b0 */ 16, 0, 1, 0, 73, 0, 0, 0,236, 1, 0, 0, 0, 0, 0, 0,
/* 0x08c0 */ 16, 0, 1, 0, 81, 0, 0, 0,131, 1, 0, 0, 0, 0, 0, 0,
/* 0x08d0 */ 16, 0, 1, 0, 86, 0, 0, 0,164, 1, 0, 0, 0, 0, 0, 0,
/* 0x08e0 */ 16, 0, 1, 0, 0,117,112,120, 95,109,109, 97,112, 95, 97,110,
/* 0x08f0 */ 100, 95,102,100, 0, 79, 95, 66, 73, 78, 70, 79, 0,109,101,109,
/* 0x0900 */ 112, 99,112,121, 0,109,109, 97,112, 0,117,110, 97,109,101, 0,
/* 0x0910 */ 103,101,116, 95,117,112,120,102,110, 95,112, 97,116,104, 0, 95,
/* 0x0920 */ 115,116, 97,114,116, 0,109,101,109,115,101,116, 0,109,121, 95,
/* 0x0930 */ 98,107,112,116, 0,115,116, 97,116, 0,109,107,100,105,114, 0,
/* 0x0940 */ 5, 0, 0, 0, 2, 2, 0, 0,165, 0, 0, 0, 2, 3, 0, 0,
/* 0x0950 */ 74, 1, 0, 0, 2, 6, 0, 0, 4, 2, 0, 0, 2, 10, 0, 0,
/* 0x0960 */ 42, 3, 0, 0, 2, 5, 0, 0,116, 4, 0, 0, 2, 11, 0, 0,
/* 0x0970 */ 237, 4, 0, 0, 2, 8, 0, 0,158, 5, 0, 0, 2, 10, 0, 0,
/* 0x0980 */ 34, 6, 0, 0, 2, 6, 0, 0, 2, 0, 0, 0, 2, 1, 0, 0,
/* 0x0990 */ 6, 0, 0, 0, 1, 4, 0, 0,102,105,108,101, 32,102,111,114,
/* 0x09a0 */ 109, 97,116, 32,101,108,102, 51, 50, 45,105, 51, 56, 54, 10, 10,
/* 0x09b0 */ 83,101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,
/* 0x09c0 */ 109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101,
/* 0x09d0 */ 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32,
/* 0x09e0 */ 76, 77, 65, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,
/* 0x09f0 */ 102,102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103,115, 10,
/* 0x0a00 */ 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, 32, 32,
/* 0x0a10 */ 32, 32, 48, 54, 52,101, 32, 32, 48, 32, 32, 48, 32, 32, 48, 51,
/* 0x0a20 */ 52, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x0a30 */ 83, 10, 32, 32, 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32,
/* 0x0a40 */ 32, 32, 32, 32, 48, 97, 32, 32, 48, 32, 32, 48, 32, 32, 48, 54,
/* 0x0a50 */ 56, 50, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x0a60 */ 84, 83, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58,
/* 0x0a70 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100,
/* 0x0a80 */ 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32, 69, 76, 70,
/* 0x0a90 */ 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x0aa0 */ 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32,
/* 0x0ab0 */ 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48,
/* 0x0ac0 */ 51,102, 54, 32,103, 32, 32, 32, 32, 32, 70, 32, 69, 76, 70, 77,
/* 0x0ad0 */ 65, 73, 78, 88, 32, 48, 50, 53, 56, 32,117,112,120, 95,109,109,
/* 0x0ae0 */ 97,112, 95, 97,110,100, 95,102,100, 10, 48, 48, 48, 48, 48, 48,
/* 0x0af0 */ 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42,
/* 0x0b00 */ 32, 48, 32, 79, 95, 66, 73, 78, 70, 79, 10, 48, 48, 48, 48, 48,
/* 0x0b10 */ 49, 99, 99, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77,
/* 0x0b20 */ 65, 73, 78, 88, 32, 48, 32,109,101,109,112, 99,112,121, 10, 48,
/* 0x0b30 */ 48, 48, 48, 48, 49, 55, 50, 32,103, 32, 32, 32, 32, 32, 32, 32,
/* 0x0b40 */ 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,109,109, 97,112, 10,
/* 0x0b50 */ 48, 48, 48, 48, 48, 49, 57, 53, 32,103, 32, 32, 32, 32, 32, 32,
/* 0x0b60 */ 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,117,110, 97,109,
/* 0x0b70 */ 101, 10, 48, 48, 48, 48, 48, 49, 56, 48, 32,103, 32, 32, 32, 32,
/* 0x0b80 */ 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,103,101,
/* 0x0b90 */ 116, 95,117,112,120,102,110, 95,112, 97,116,104, 10, 48, 48, 48,
/* 0x0ba0 */ 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76,
/* 0x0bb0 */ 70, 77, 65, 73, 78, 88, 32, 48, 32, 95,115,116, 97,114,116, 10,
/* 0x0bc0 */ 48, 48, 48, 48, 48, 49, 98, 97, 32,103, 32, 32, 32, 32, 32, 32,
/* 0x0bd0 */ 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,109,101,109,115,
/* 0x0be0 */ 101,116, 10, 48, 48, 48, 48, 48, 49,101, 99, 32,103, 32, 32, 32,
/* 0x0bf0 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,109,
/* 0x0c00 */ 121, 95, 98,107,112,116, 10, 48, 48, 48, 48, 48, 49, 56, 51, 32,
/* 0x0c10 */ 103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88,
/* 0x0c20 */ 32, 48, 32,115,116, 97,116, 10, 48, 48, 48, 48, 48, 49, 97, 52,
/* 0x0c30 */ 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78,
/* 0x0c40 */ 88, 32, 48, 32,109,107,100,105,114, 10, 10, 82, 69, 76, 79, 67,
/* 0x0c50 */ 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79,
/* 0x0c60 */ 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70,
/* 0x0c70 */ 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32,
/* 0x0c80 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48,
/* 0x0c90 */ 48, 48, 48, 48, 48, 48, 53, 32, 82, 95, 51, 56, 54, 95, 80, 67,
/* 0x0ca0 */ 51, 50, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x0cb0 */ 78, 90, 10, 48, 48, 48, 48, 48, 48, 97, 53, 32, 82, 95, 51, 56,
/* 0x0cc0 */ 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,117,112,
/* 0x0cd0 */ 120, 95,109,109, 97,112, 95, 97,110,100, 95,102,100, 10, 48, 48,
/* 0x0ce0 */ 48, 48, 48, 49, 52, 97, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51,
/* 0x0cf0 */ 50, 32, 32, 32, 32, 32, 32, 32, 32,109,109, 97,112, 10, 48, 48,
/* 0x0d00 */ 48, 48, 48, 50, 48, 52, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51,
/* 0x0d10 */ 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,115,101,116, 10,
/* 0x0d20 */ 48, 48, 48, 48, 48, 51, 50, 97, 32, 82, 95, 51, 56, 54, 95, 80,
/* 0x0d30 */ 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,112, 99,
/* 0x0d40 */ 112,121, 10, 48, 48, 48, 48, 48, 52, 55, 52, 32, 82, 95, 51, 56,
/* 0x0d50 */ 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,121,
/* 0x0d60 */ 95, 98,107,112,116, 10, 48, 48, 48, 48, 48, 52,101,100, 32, 82,
/* 0x0d70 */ 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32,
/* 0x0d80 */ 32,103,101,116, 95,117,112,120,102,110, 95,112, 97,116,104, 10,
/* 0x0d90 */ 48, 48, 48, 48, 48, 53, 57,101, 32, 82, 95, 51, 56, 54, 95, 80,
/* 0x0da0 */ 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,115,101,
/* 0x0db0 */ 116, 10, 48, 48, 48, 48, 48, 54, 50, 50, 32, 82, 95, 51, 56, 54,
/* 0x0dc0 */ 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,109, 97,
/* 0x0dd0 */ 112, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69,
/* 0x0de0 */ 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65,
/* 0x0df0 */ 73, 78, 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84,
/* 0x0e00 */ 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0e10 */ 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 50, 32,
/* 0x0e20 */ 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32,
/* 0x0e30 */ 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48,
/* 0x0e40 */ 48, 48, 54, 32, 82, 95, 51, 56, 54, 95, 51, 50, 32, 32, 32, 32,
/* 0x0e50 */ 32, 32, 32, 32, 32, 32, 79, 95, 66, 73, 78, 70, 79, 10
};

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/* i386-linux.elf-so_entry.h
created from i386-linux.elf-so_entry.bin, 3297 (0xce1) bytes
created from i386-linux.elf-so_entry.bin, 3358 (0xd1e) bytes
This file is part of the UPX executable compressor.
@ -32,216 +32,219 @@
/* clang-format off */
#define STUB_I386_LINUX_ELF_SO_ENTRY_SIZE 3297
#define STUB_I386_LINUX_ELF_SO_ENTRY_ADLER32 0xd917c0ec
#define STUB_I386_LINUX_ELF_SO_ENTRY_CRC32 0x87c4b4db
#define STUB_I386_LINUX_ELF_SO_ENTRY_SIZE 3358
#define STUB_I386_LINUX_ELF_SO_ENTRY_ADLER32 0x7fd8155f
#define STUB_I386_LINUX_ELF_SO_ENTRY_CRC32 0xa9882795
unsigned char stub_i386_linux_elf_so_entry[3297] = {
unsigned char stub_i386_linux_elf_so_entry[3358] = {
/* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 164, 5, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0,
/* 0x0030 */ 8, 0, 5, 0,144, 96,232,252,255,255,255, 1,219,116, 2,243,
/* 0x0040 */ 195,139, 30,131,238,252, 17,219,195, 94,102,131,126, 8, 2,116,
/* 0x0050 */ 1,244,141, 74,233, 81,139, 6, 80,137,229, 41,196,131,228,248,
/* 0x0060 */ 137,231, 85,139, 78, 4,141,118, 12, 1,241, 81, 49,219, 49,201,
/* 0x0070 */ 131,205,255,252,168,164,255,210,114,251,141, 65, 1,255,210, 17,
/* 0x0080 */ 192,255,210,115,248,131,232, 3,114, 11,193,224, 8,172,131,240,
/* 0x0090 */ 255,116, 45,137,197,141, 65, 1,255,210, 17,201,255,210, 17,201,
/* 0x00a0 */ 117, 13,137,193,131,192, 2,255,210, 17,201,255,210,115,248,129,
/* 0x00b0 */ 253, 0,243,255,255, 17,193, 86,141, 52, 47,243,164, 94,235,182,
/* 0x00c0 */ 89, 57,206,116, 1,244, 93, 49,201,232, 4, 0, 0, 0,117,112,
/* 0x00d0 */ 120, 0, 91,104,100, 1, 0, 0, 88,205,128,137,199,139, 85, 0,
/* 0x00e0 */ 137,225,137,251,106, 4, 88,205,128,137,236,106, 0, 87,106, 2,
/* 0x00f0 */ 106, 5,255,116, 36, 16,106, 0,137,227,106, 90, 88,205,128,131,
/* 0x0100 */ 196, 24, 80,137,251,106, 6, 88,205,128, 88, 80,255,224,141, 92,
/* 0x0110 */ 36, 4,106, 90, 88,205,128, 61, 0,240,255,255,114, 1,244,194,
/* 0x0120 */ 24, 0, 0, 0, 85,137,229, 86, 83,131,236, 64,139,117, 8,106,
/* 0x0130 */ 64,104,255, 0, 0, 0,141, 93,184, 83,232,252,255,255,255, 83,
/* 0x0140 */ 86,232,252,255,255,255,137,194,131,196, 20,133,192,120, 21, 15,
/* 0x0150 */ 183, 69,192, 37, 0,240, 0, 0,185, 0, 0, 0, 0, 61, 0, 64,
/* 0x0160 */ 0, 0,116, 23,131,250,254,117, 16,104,192, 1, 0, 0, 86,232,
/* 0x0170 */ 252,255,255,255,137,194,131,196, 8,137,209,137,200,141,101,248,
/* 0x0180 */ 91, 94,201,195,139, 68, 36, 4,137,194,131,226, 31,131,224, 63,
/* 0x0190 */ 131,250, 26,118, 12,168, 32,116, 5,131,232, 70,235, 3,131,232,
/* 0x01a0 */ 43,131,192, 64,195, 85,137,229, 87, 86, 83,131,236, 20,232, 12,
/* 0x01b0 */ 0, 0, 0, 47,100, 97,116, 97, 47,100, 97,116, 97, 47, 0, 90,
/* 0x01c0 */ 139, 2,139, 77, 8,137, 1,139, 66, 4,137, 65, 4,102,139, 66,
/* 0x01d0 */ 8,102,137, 65, 8,138, 66, 10,136, 65, 10,198, 65, 11, 0, 81,
/* 0x01e0 */ 232, 63,255,255,255,131,196, 4,232, 19, 0, 0, 0, 47,112,114,
/* 0x01f0 */ 111, 99, 47,115,101,108,102, 47, 99,109,100,108,105,110,101, 0,
/* 0x0200 */ 94,185, 0, 0, 0, 0,137,243,137,202,106, 5, 88,205,128,137,
/* 0x0210 */ 69,232,139,117, 12,186,255, 15, 0, 0,137,195,137,241,106, 3,
/* 0x0220 */ 88,205,128,137,199,139, 93,232,106, 6, 88,205,128,137,248,133,
/* 0x0230 */ 255, 15,136,178, 0, 0, 0,198, 4, 62, 0,128, 62, 0,116, 6,
/* 0x0240 */ 70,128, 62, 0,117,250,137,240,128, 62, 47,116, 6, 78,128, 62,
/* 0x0250 */ 47,117,250, 41,240, 80, 86,139, 69, 8,131,192, 10, 80,232,252,
/* 0x0260 */ 255,255,255,137,195,198, 0, 0,255,117, 8,232,180,254,255,255,
/* 0x0270 */ 131,196, 16,232, 7, 0, 0, 0, 47, 99, 97, 99,104,101, 0, 90,
/* 0x0280 */ 139, 2,137, 3,102,139, 66, 4,102,137, 67, 4,131,195, 6,198,
/* 0x0290 */ 3, 0,255,117, 8,232,138,254,255,255,232, 5, 0, 0, 0, 47,
/* 0x02a0 */ 117,112,120, 0, 88,139, 0,137, 3,141,115, 4,106, 20, 88,205,
/* 0x02b0 */ 128,137,195,137, 4, 36,232,201,254,255,255,136, 6,137,216,193,
/* 0x02c0 */ 232, 6,137, 4, 36,232,186,254,255,255,136, 70, 1,137,216,193,
/* 0x02d0 */ 232, 12,137, 4, 36,232,170,254,255,255,131,196, 4,136, 70, 2,
/* 0x02e0 */ 198, 70, 3, 0,184, 0, 0, 0, 0,141,101,244, 91, 94, 95,201,
/* 0x02f0 */ 195, 86, 83,139,116, 36, 12,139, 92, 36, 16,139, 76, 36, 20, 73,
/* 0x0300 */ 131,249,255,116, 30,138, 22,131,202, 32, 15,190,210,138, 3,131,
/* 0x0310 */ 200, 32, 15,190,192, 67, 70, 41,194,137,208,117, 11, 73,131,249,
/* 0x0320 */ 255,117,226,184, 0, 0, 0, 0, 91, 94,195, 85,137,229, 87, 86,
/* 0x0330 */ 83,129,236, 60, 16, 0, 0,186, 0, 0, 0, 0,232, 4, 0, 0,
/* 0x0340 */ 0,117,112,120, 0, 94,185, 16, 0, 0, 0,184,100, 1, 0, 0,
/* 0x0350 */ 137,243,205,128,137,199,131,248,234,117, 13,184,100, 1, 0, 0,
/* 0x0360 */ 137,243,137,209,205,128,137,199,133,255,121, 68,232, 9, 0, 0,
/* 0x0370 */ 0, 47,100,101,118, 47,115,104,109, 0, 95,185, 2, 0, 65, 0,
/* 0x0380 */ 190,192, 1, 0, 0,137,251,137,242,106, 5, 88,205,128,137,199,
/* 0x0390 */ 133,192,121, 28,232, 13, 0, 0, 0,109,101,109,102,100, 95, 99,
/* 0x03a0 */ 114,101, 97,116,101, 0, 88, 80,232,252,255,255,255,131,196, 4,
/* 0x03b0 */ 141,157,244,239,255,255, 83,232,252,255,255,255,190, 0, 0, 0,
/* 0x03c0 */ 0,232, 4, 0, 0, 0, 97,110,100, 0, 88,199, 4, 36, 3, 0,
/* 0x03d0 */ 0, 0, 83, 80,232, 24,255,255,255,131,196, 12,133,192,116, 39,
/* 0x03e0 */ 232, 4, 0, 0, 0, 76,105,110, 0, 88,106, 3, 83, 80,232,254,
/* 0x03f0 */ 254,255,255,131,196, 12,133,192,117, 13,128,189,118,240,255,255,
/* 0x0400 */ 52,126, 4,102,190, 1, 0,133,246,117,123,131,125, 16, 0,117,
/* 0x0410 */ 28,232,252,255,255,255,137, 69, 16,133,192,117, 16,141,133,244,
/* 0x0420 */ 239,255,255,137, 69, 16,198,133,244,239,255,255, 0,133,246,117,
/* 0x0430 */ 85,131,255,218,117, 80,131,125, 16, 0,116, 74,139, 85, 16,128,
/* 0x0440 */ 58, 0,117, 26,141,133,244,239,255,255, 80, 82,232, 84,253,255,
/* 0x0450 */ 255,131,196, 8,137,193,133,192, 15,136, 1, 1, 0, 0,185,194,
/* 0x0460 */ 0, 0, 0,191,192, 1, 0, 0,139, 93, 16,137,250,106, 5, 88,
/* 0x0470 */ 205,128,137,199,137,193,133,192, 15,136,225, 0, 0, 0,139, 93,
/* 0x0480 */ 16,106, 10, 88,205,128,131,125, 12, 0, 15,132,148, 0, 0, 0,
/* 0x0490 */ 133,246,116, 22,137,251,139, 77, 12,106, 93, 88,205,128,137,193,
/* 0x04a0 */ 133,192, 15,136,183, 0, 0, 0,235,122,141,133,244,239,255,255,
/* 0x04b0 */ 104, 0, 16, 0, 0,106, 0, 80,232,252,255,255,255,139, 69, 12,
/* 0x04c0 */ 137,133,208,239,255,255,131,196, 12,133,192,116, 73,141,181,244,
/* 0x04d0 */ 239,255,255,139,149,208,239,255,255,137,149,184,239,255,255,129,
/* 0x04e0 */ 250, 0, 16, 0, 0,118, 10,199,133,184,239,255,255, 0, 16, 0,
/* 0x04f0 */ 0,137,251,137,241,139,149,184,239,255,255,106, 4, 88,205,128,
/* 0x0500 */ 59,133,184,239,255,255,117, 73,139,133,184,239,255,255, 41,133,
/* 0x0510 */ 208,239,255,255,117,189,185, 0, 0, 0, 0,137,251,137,202,106,
/* 0x0520 */ 19, 88,205,128,106, 0, 87,131,125, 8, 1, 25,192,131,224,240,
/* 0x0530 */ 131,192, 17, 80,106, 3,255,117, 12,255,117, 8,232,252,255,255,
/* 0x0540 */ 255,137,194,131,196, 24,137,193, 61, 0,240,255,255,119, 16,235,
/* 0x0550 */ 7,185,228,255,255,255,235, 7,141, 71, 1,137,193, 9,209,137,
/* 0x0560 */ 200,141,101,244, 91, 94, 95,201,195, 90,232, 17, 0, 0, 0, 0,
/* 0x0570 */ 46,115,121,109,116, 97, 98, 0, 46,115,116,114,116, 97, 98, 0,
/* 0x0580 */ 46,115,104,115,116,114,116, 97, 98, 0, 46,114,101,108, 69, 76,
/* 0x0590 */ 70, 77, 65, 73, 78, 88, 0, 46,114,101,108, 69, 76, 70, 77, 65,
/* 0x05a0 */ 73, 78, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x05b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x05c0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0,
/* 0x05d0 */ 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
/* 0x05e0 */ 53, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
/* 0x05f0 */ 0, 0, 0, 0, 27, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
/* 0x0600 */ 0, 0, 0, 0, 8, 8, 0, 0, 80, 0, 0, 0, 6, 0, 0, 0,
/* 0x0610 */ 1, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 44, 0, 0, 0,
/* 0x0620 */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105, 5, 0, 0,
/* 0x0630 */ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x0640 */ 0, 0, 0, 0, 40, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
/* 0x0650 */ 0, 0, 0, 0, 88, 8, 0, 0, 8, 0, 0, 0, 6, 0, 0, 0,
/* 0x0660 */ 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 17, 0, 0, 0,
/* 0x0670 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 5, 0, 0,
/* 0x0680 */ 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x0690 */ 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
/* 0x06a0 */ 0, 0, 0, 0,228, 6, 0, 0,208, 0, 0, 0, 7, 0, 0, 0,
/* 0x06b0 */ 4, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 9, 0, 0, 0,
/* 0x06c0 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180, 7, 0, 0,
/* 0x06d0 */ 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x06e0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06f0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0700 */ 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0710 */ 3, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0720 */ 0, 0, 1, 0, 8, 0, 0, 0,247, 2, 0, 0, 62, 2, 0, 0,
/* 0x0730 */ 18, 0, 1, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0740 */ 16, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0750 */ 16, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0760 */ 16, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0770 */ 16, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0780 */ 16, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0790 */ 16, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x07a0 */ 16, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x07b0 */ 16, 0, 0, 0, 0, 95,115,116, 97,114,116, 0,117,112,120, 95,
/* 0x07c0 */ 109,109, 97,112, 95, 97,110,100, 95,102,100, 0,109,101,109,112,
/* 0x07d0 */ 99,112,121, 0,109,109, 97,112, 0,117,110, 97,109,101, 0,103,
/* 0x07e0 */ 101,116, 95,117,112,120,102,110, 95,112, 97,116,104, 0,109,101,
/* 0x07f0 */ 109,115,101,116, 0,109,121, 95, 98,107,112,116, 0,115,116, 97,
/* 0x0800 */ 116, 0,109,107,100,105,114, 0, 3, 0, 0, 0, 2, 2, 0, 0,
/* 0x0810 */ 7, 1, 0, 0, 2, 9, 0, 0, 14, 1, 0, 0, 2, 11, 0, 0,
/* 0x0820 */ 60, 1, 0, 0, 2, 12, 0, 0, 43, 2, 0, 0, 2, 5, 0, 0,
/* 0x0830 */ 117, 3, 0, 0, 2, 10, 0, 0,132, 3, 0, 0, 2, 7, 0, 0,
/* 0x0840 */ 222, 3, 0, 0, 2, 8, 0, 0,133, 4, 0, 0, 2, 9, 0, 0,
/* 0x0850 */ 9, 5, 0, 0, 2, 6, 0, 0, 2, 0, 0, 0, 2, 1, 0, 0,
/* 0x0860 */ 102,105,108,101, 32,102,111,114,109, 97,116, 32,101,108,102, 51,
/* 0x0870 */ 50, 45,105, 51, 56, 54, 10, 10, 83,101, 99,116,105,111,110,115,
/* 0x0880 */ 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32,
/* 0x0890 */ 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77,
/* 0x08a0 */ 65, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32,
/* 0x08b0 */ 32, 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110,
/* 0x08c0 */ 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77,
/* 0x08d0 */ 65, 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 53, 51, 53, 32, 32,
/* 0x08e0 */ 48, 32, 32, 48, 32, 32, 48, 51, 52, 32, 32, 50, 42, 42, 50, 32,
/* 0x08f0 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 49, 32, 69, 76,
/* 0x0900 */ 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 32, 48, 54, 32, 32,
/* 0x0910 */ 48, 32, 32, 48, 32, 32, 48, 53, 54, 57, 32, 32, 50, 42, 42, 48,
/* 0x0920 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 83, 89, 77, 66, 79,
/* 0x0930 */ 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x0940 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x0950 */ 78, 88, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48,
/* 0x0960 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69,
/* 0x0970 */ 76, 70, 77, 65, 73, 78, 90, 32, 48, 32, 69, 76, 70, 77, 65, 73,
/* 0x0980 */ 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x0990 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32, 95,
/* 0x09a0 */ 115,116, 97,114,116, 10, 48, 48, 48, 48, 48, 50,102, 55, 32,103,
/* 0x09b0 */ 32, 32, 32, 32, 32, 70, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32,
/* 0x09c0 */ 48, 50, 51,101, 32,117,112,120, 95,109,109, 97,112, 95, 97,110,
/* 0x09d0 */ 100, 95,102,100, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32,
/* 0x09e0 */ 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,109,101,
/* 0x09f0 */ 109,112, 99,112,121, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x0a00 */ 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,109,
/* 0x0a10 */ 109, 97,112, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32,
/* 0x0a20 */ 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,117,110, 97,
/* 0x0a30 */ 109,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32,
/* 0x0a40 */ 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,103,101,116, 95,
/* 0x0a50 */ 117,112,120,102,110, 95,112, 97,116,104, 10, 48, 48, 48, 48, 48,
/* 0x0a60 */ 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68,
/* 0x0a70 */ 42, 32, 48, 32,109,101,109,115,101,116, 10, 48, 48, 48, 48, 48,
/* 0x0a80 */ 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68,
/* 0x0a90 */ 42, 32, 48, 32,109,121, 95, 98,107,112,116, 10, 48, 48, 48, 48,
/* 0x0aa0 */ 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78,
/* 0x0ab0 */ 68, 42, 32, 48, 32,115,116, 97,116, 10, 48, 48, 48, 48, 48, 48,
/* 0x0ac0 */ 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42,
/* 0x0ad0 */ 32, 48, 32,109,107,100,105,114, 10, 10, 82, 69, 76, 79, 67, 65,
/* 0x0ae0 */ 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82,
/* 0x0af0 */ 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70,
/* 0x0b00 */ 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32,
/* 0x0b10 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48,
/* 0x0b20 */ 48, 48, 48, 48, 48, 51, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51,
/* 0x0b30 */ 50, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78,
/* 0x0b40 */ 90, 10, 48, 48, 48, 48, 48, 49, 48, 55, 32, 82, 95, 51, 56, 54,
/* 0x0b50 */ 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,
/* 0x0b60 */ 115,101,116, 10, 48, 48, 48, 48, 48, 49, 48,101, 32, 82, 95, 51,
/* 0x0b70 */ 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,115,
/* 0x0b80 */ 116, 97,116, 10, 48, 48, 48, 48, 48, 49, 51, 99, 32, 82, 95, 51,
/* 0x0b90 */ 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,
/* 0x0ba0 */ 107,100,105,114, 10, 48, 48, 48, 48, 48, 50, 50, 98, 32, 82, 95,
/* 0x0bb0 */ 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0bc0 */ 109,101,109,112, 99,112,121, 10, 48, 48, 48, 48, 48, 51, 55, 53,
/* 0x0bd0 */ 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32,
/* 0x0be0 */ 32, 32, 32,109,121, 95, 98,107,112,116, 10, 48, 48, 48, 48, 48,
/* 0x0bf0 */ 51, 56, 52, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32,
/* 0x0c00 */ 32, 32, 32, 32, 32, 32,117,110, 97,109,101, 10, 48, 48, 48, 48,
/* 0x0c10 */ 48, 51,100,101, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32,
/* 0x0c20 */ 32, 32, 32, 32, 32, 32, 32,103,101,116, 95,117,112,120,102,110,
/* 0x0c30 */ 95,112, 97,116,104, 10, 48, 48, 48, 48, 48, 52, 56, 53, 32, 82,
/* 0x0c40 */ 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32,
/* 0x0c50 */ 32,109,101,109,115,101,116, 10, 48, 48, 48, 48, 48, 53, 48, 57,
/* 0x0c60 */ 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32,
/* 0x0c70 */ 32, 32, 32,109,109, 97,112, 10, 10, 82, 69, 76, 79, 67, 65, 84,
/* 0x0c80 */ 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32,
/* 0x0c90 */ 91, 69, 76, 70, 77, 65, 73, 78, 90, 93, 58, 10, 79, 70, 70, 83,
/* 0x0ca0 */ 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32,
/* 0x0cb0 */ 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48,
/* 0x0cc0 */ 48, 48, 48, 48, 50, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50,
/* 0x0cd0 */ 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88,
/* 0x0ce0 */ 10
/* 0x0020 */ 180, 6, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0,
/* 0x0030 */ 8, 0, 5, 0, 96,232, 71, 0, 0, 0, 1,219,116, 2,243,195,
/* 0x0040 */ 139, 30,131,238,252, 17,219,195, 94,102,131,126, 8, 2,116, 1,
/* 0x0050 */ 244,139, 14,141,137, 24, 1, 0, 0, 81,106, 90, 87,141, 66,234,
/* 0x0060 */ 80, 82, 86,137,229,129,236, 24, 1, 0, 0,131,228,248,106, 0,
/* 0x0070 */ 137,231, 87, 81,106, 0,232,252,255,255,255,131,196, 12,137,194,
/* 0x0080 */ 193,232, 12,193,224, 12, 41,194, 74,139,117, 0,139, 62, 1,199,
/* 0x0090 */ 137,120, 8,137,230,185, 24, 1, 0, 0,243,164,137,236,137, 68,
/* 0x00a0 */ 36, 16, 94, 82,255, 54, 84,139, 78, 4,141,118, 12,137,199, 1,
/* 0x00b0 */ 241, 81,139, 84, 36, 16, 49,219, 49,201,131,205,255,252,168,164,
/* 0x00c0 */ 255,210,114,251,141, 65, 1,255,210, 17,192,255,210,115,248,131,
/* 0x00d0 */ 232, 3,114, 11,193,224, 8,172,131,240,255,116, 45,137,197,141,
/* 0x00e0 */ 65, 1,255,210, 17,201,255,210, 17,201,117, 13,137,193,131,192,
/* 0x00f0 */ 2,255,210, 17,201,255,210,115,248,129,253, 0,243,255,255, 17,
/* 0x0100 */ 193, 86,141, 52, 47,243,164, 94,235,182, 89, 57,206,116, 1,244,
/* 0x0110 */ 89,139,124, 36, 20,139, 68, 36, 16,137, 7, 88,137, 71, 8,139,
/* 0x0120 */ 84, 36, 20,137,249, 91, 88,106, 0, 83,106, 4, 88,205,128,106,
/* 0x0130 */ 18,106, 5, 82, 87,137,227,106, 90, 88,205,128,139, 92, 36, 16,
/* 0x0140 */ 131,196, 24,106, 6, 88,205,128,131,199, 12,255,231,141, 92, 36,
/* 0x0150 */ 4,106, 90, 88,205,128, 61, 0,240,255,255,114, 1,244,194, 24,
/* 0x0160 */ 0, 0, 0, 0, 85,137,229, 86, 83,131,236, 72,106, 64,104,255,
/* 0x0170 */ 0, 0, 0,141,117,184, 86,232,252,255,255,255,131,196, 12,139,
/* 0x0180 */ 93, 8,137,241,106,106, 88,205,128,137,194,133,192,120, 21, 15,
/* 0x0190 */ 183, 69,192, 37, 0,240, 0, 0,185, 0, 0, 0, 0, 61, 0, 64,
/* 0x01a0 */ 0, 0,116, 22,131,250,254,117, 15,185,192, 1, 0, 0,139, 93,
/* 0x01b0 */ 8,106, 39, 88,205,128,137,194,137,209,137,200,141,101,248, 91,
/* 0x01c0 */ 94,201,195,139, 68, 36, 4,137,194,131,226, 31,131,224, 63,131,
/* 0x01d0 */ 250, 26,118, 12,168, 32,116, 5,131,232, 70,235, 3,131,232, 43,
/* 0x01e0 */ 131,192, 64,195, 85,137,229, 87, 86, 83,131,236, 20,232, 12, 0,
/* 0x01f0 */ 0, 0, 47,100, 97,116, 97, 47,100, 97,116, 97, 47, 0, 90,139,
/* 0x0200 */ 2,139, 77, 8,137, 1,139, 66, 4,137, 65, 4,102,139, 66, 8,
/* 0x0210 */ 102,137, 65, 8,138, 66, 10,136, 65, 10,198, 65, 11, 0, 81,232,
/* 0x0220 */ 64,255,255,255,131,196, 4,232, 19, 0, 0, 0, 47,112,114,111,
/* 0x0230 */ 99, 47,115,101,108,102, 47, 99,109,100,108,105,110,101, 0, 94,
/* 0x0240 */ 185, 0, 0, 0, 0,137,243,137,202,106, 5, 88,205,128,137, 69,
/* 0x0250 */ 232,139,117, 12,186,255, 15, 0, 0,137,195,137,241,106, 3, 88,
/* 0x0260 */ 205,128,137,199,139, 93,232,106, 6, 88,205,128,137,248,133,255,
/* 0x0270 */ 15,136,178, 0, 0, 0,198, 4, 62, 0,128, 62, 0,116, 6, 70,
/* 0x0280 */ 128, 62, 0,117,250,137,240,128, 62, 47,116, 6, 78,128, 62, 47,
/* 0x0290 */ 117,250, 41,240, 80, 86,139, 69, 8,131,192, 10, 80,232,252,255,
/* 0x02a0 */ 255,255,137,195,198, 0, 0,255,117, 8,232,181,254,255,255,131,
/* 0x02b0 */ 196, 16,232, 7, 0, 0, 0, 47, 99, 97, 99,104,101, 0, 90,139,
/* 0x02c0 */ 2,137, 3,102,139, 66, 4,102,137, 67, 4,131,195, 6,198, 3,
/* 0x02d0 */ 0,255,117, 8,232,139,254,255,255,232, 5, 0, 0, 0, 47,117,
/* 0x02e0 */ 112,120, 0, 88,139, 0,137, 3,141,115, 4,106, 20, 88,205,128,
/* 0x02f0 */ 137,195,137, 4, 36,232,201,254,255,255,136, 6,137,216,193,232,
/* 0x0300 */ 6,137, 4, 36,232,186,254,255,255,136, 70, 1,137,216,193,232,
/* 0x0310 */ 12,137, 4, 36,232,170,254,255,255,131,196, 4,136, 70, 2,198,
/* 0x0320 */ 70, 3, 0,184, 0, 0, 0, 0,141,101,244, 91, 94, 95,201,195,
/* 0x0330 */ 86, 83,139,116, 36, 12,139, 92, 36, 16,139, 76, 36, 20, 73,131,
/* 0x0340 */ 249,255,116, 30,138, 22,131,202, 32, 15,190,210,138, 3,131,200,
/* 0x0350 */ 32, 15,190,192, 67, 70, 41,194,137,208,117, 11, 73,131,249,255,
/* 0x0360 */ 117,226,184, 0, 0, 0, 0, 91, 94,195, 85,137,229, 87, 86, 83,
/* 0x0370 */ 129,236, 68, 16, 0, 0,186, 0, 0, 0, 0,232, 4, 0, 0, 0,
/* 0x0380 */ 117,112,120, 0, 94,185, 16, 0, 0, 0,184,100, 1, 0, 0,137,
/* 0x0390 */ 243,205,128,137,199,131,248,234,117, 13,184,100, 1, 0, 0,137,
/* 0x03a0 */ 243,137,209,205,128,137,199,133,255,121, 68,232, 9, 0, 0, 0,
/* 0x03b0 */ 47,100,101,118, 47,115,104,109, 0, 95,185, 2, 0, 65, 0,190,
/* 0x03c0 */ 192, 1, 0, 0,137,251,137,242,106, 5, 88,205,128,137,199,133,
/* 0x03d0 */ 192,121, 28,232, 13, 0, 0, 0,109,101,109,102,100, 95, 99,114,
/* 0x03e0 */ 101, 97,116,101, 0, 88, 80,232,252,255,255,255,131,196, 4,141,
/* 0x03f0 */ 181,244,239,255,255,137,243,106,122, 88,205,128,199,133,220,239,
/* 0x0400 */ 255,255, 0, 0, 0, 0,232, 4, 0, 0, 0, 97,110,100, 0, 88,
/* 0x0410 */ 106, 3, 86, 80,232, 23,255,255,255,131,196, 12,133,192,116, 45,
/* 0x0420 */ 232, 4, 0, 0, 0, 76,105,110, 0, 88,106, 3, 86, 80,232,253,
/* 0x0430 */ 254,255,255,131,196, 12,133,192,117, 19,128,189,118,240,255,255,
/* 0x0440 */ 52,126, 10,199,133,220,239,255,255, 1, 0, 0, 0,131,189,220,
/* 0x0450 */ 239,255,255, 0, 15,133,128, 0, 0, 0,131,125, 16, 0,117, 28,
/* 0x0460 */ 232,252,255,255,255,137, 69, 16,133,192,117, 16,141,133,244,239,
/* 0x0470 */ 255,255,137, 69, 16,198,133,244,239,255,255, 0,131,189,220,239,
/* 0x0480 */ 255,255, 0,117, 85,131,255,218,117, 80,131,125, 16, 0,116, 74,
/* 0x0490 */ 139, 85, 16,128, 58, 0,117, 26,141,133,244,239,255,255, 80, 82,
/* 0x04a0 */ 232, 63,253,255,255,131,196, 8,137,193,133,192, 15,136, 6, 1,
/* 0x04b0 */ 0, 0,185,194, 0, 0, 0,190,192, 1, 0, 0,139, 93, 16,137,
/* 0x04c0 */ 242,106, 5, 88,205,128,137,199,137,193,133,192, 15,136,230, 0,
/* 0x04d0 */ 0, 0,139, 93, 16,106, 10, 88,205,128,131,125, 12, 0, 15,132,
/* 0x04e0 */ 153, 0, 0, 0,131,189,220,239,255,255, 0,116, 22,137,251,139,
/* 0x04f0 */ 77, 12,106, 93, 88,205,128,137,193,133,192, 15,136,183, 0, 0,
/* 0x0500 */ 0,235,122,141,133,244,239,255,255,104, 0, 16, 0, 0,106, 0,
/* 0x0510 */ 80,232,252,255,255,255,139, 69, 12,137,133,200,239,255,255,131,
/* 0x0520 */ 196, 12,133,192,116, 73,141,181,244,239,255,255,139,149,200,239,
/* 0x0530 */ 255,255,137,149,176,239,255,255,129,250, 0, 16, 0, 0,118, 10,
/* 0x0540 */ 199,133,176,239,255,255, 0, 16, 0, 0,137,251,137,241,139,149,
/* 0x0550 */ 176,239,255,255,106, 4, 88,205,128, 59,133,176,239,255,255,117,
/* 0x0560 */ 73,139,133,176,239,255,255, 41,133,200,239,255,255,117,189,185,
/* 0x0570 */ 0, 0, 0, 0,137,251,137,202,106, 19, 88,205,128,106, 0, 87,
/* 0x0580 */ 131,125, 8, 1, 25,192,131,224,240,131,192, 17, 80,106, 3,255,
/* 0x0590 */ 117, 12,255,117, 8,232,252,255,255,255,137,194,131,196, 24,137,
/* 0x05a0 */ 193, 61, 0,240,255,255,119, 16,235, 7,185,228,255,255,255,235,
/* 0x05b0 */ 7,141, 71, 1,137,193, 9,209,137,200,141,101,244, 91, 94, 95,
/* 0x05c0 */ 201,195, 49,192,195, 85,137,229, 87,139, 77, 16,139, 69, 12,139,
/* 0x05d0 */ 125, 8,243,170, 95, 93,195, 85,137,229, 87, 86,139, 77, 16,139,
/* 0x05e0 */ 117, 12,139,125, 8,243,164,137,248, 94, 95, 93,195,204,195, 83,
/* 0x05f0 */ 141, 92, 36, 8,176, 90,232, 2, 0, 0, 0, 91,195, 15,182,192,
/* 0x0600 */ 80,205,128, 90, 61, 0,240,255,255,115, 1,195,244,129,236, 0,
/* 0x0610 */ 2, 0, 0, 49,210,232, 16, 0, 0, 0, 47,112,114,111, 99, 47,
/* 0x0620 */ 115,101,108,102, 47, 97,117,120,118, 0, 89,106,156, 91,184, 39,
/* 0x0630 */ 1, 0, 0,205,128,133,192,124, 40,137,197,186, 0, 2, 0, 0,
/* 0x0640 */ 137,225,137,195,106, 3, 88,205,128,133,192,124, 20,137,193,137,
/* 0x0650 */ 230,173,133,192,116, 11,131,248, 6,173,116, 10,131,233, 8,117,
/* 0x0660 */ 240,184, 0, 16, 0, 0,247,216,129,196, 0, 2, 0, 0, 80,137,
/* 0x0670 */ 235,106, 6, 88,205,128, 95, 90,232, 16, 0, 0, 0, 0, 46,115,
/* 0x0680 */ 121,109,116, 97, 98, 0, 46,115,116,114,116, 97, 98, 0, 46,115,
/* 0x0690 */ 104,115,116,114,116, 97, 98, 0, 46,114,101,108, 69, 76, 70, 77,
/* 0x06a0 */ 65, 73, 78, 88, 0, 46,114,101,108, 69, 76, 70, 77, 65, 73, 78,
/* 0x06b0 */ 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06c0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06d0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0,
/* 0x06e0 */ 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
/* 0x06f0 */ 142, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
/* 0x0700 */ 0, 0, 0, 0, 27, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
/* 0x0710 */ 0, 0, 0, 0,216, 8, 0, 0, 64, 0, 0, 0, 6, 0, 0, 0,
/* 0x0720 */ 1, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 44, 0, 0, 0,
/* 0x0730 */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 5, 0, 0,
/* 0x0740 */ 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x0750 */ 0, 0, 0, 0, 40, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
/* 0x0760 */ 0, 0, 0, 0, 24, 9, 0, 0, 8, 0, 0, 0, 6, 0, 0, 0,
/* 0x0770 */ 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 17, 0, 0, 0,
/* 0x0780 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,125, 6, 0, 0,
/* 0x0790 */ 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x07a0 */ 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
/* 0x07b0 */ 0, 0, 0, 0,244, 7, 0, 0,160, 0, 0, 0, 7, 0, 0, 0,
/* 0x07c0 */ 4, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 9, 0, 0, 0,
/* 0x07d0 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 8, 0, 0,
/* 0x07e0 */ 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x07f0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0800 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0810 */ 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0820 */ 3, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0830 */ 0, 0, 1, 0, 8, 0, 0, 0, 54, 3, 0, 0, 88, 2, 0, 0,
/* 0x0840 */ 18, 0, 1, 0, 24, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0,
/* 0x0850 */ 16, 0, 3, 0, 32, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0,
/* 0x0860 */ 16, 0, 3, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0870 */ 16, 0, 3, 0, 52, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
/* 0x0880 */ 16, 0, 3, 0, 59, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0,
/* 0x0890 */ 16, 0, 3, 0, 0, 95,115,116, 97,114,116, 0,117,112,120, 95,
/* 0x08a0 */ 109,109, 97,112, 95, 97,110,100, 95,102,100, 0,109,101,109,112,
/* 0x08b0 */ 99,112,121, 0,109,109, 97,112, 0,103,101,116, 95,117,112,120,
/* 0x08c0 */ 102,110, 95,112, 97,116,104, 0,109,101,109,115,101,116, 0,109,
/* 0x08d0 */ 121, 95, 98,107,112,116, 0, 0, 2, 0, 0, 0, 2, 2, 0, 0,
/* 0x08e0 */ 67, 0, 0, 0, 2, 4, 0, 0, 68, 1, 0, 0, 2, 8, 0, 0,
/* 0x08f0 */ 106, 2, 0, 0, 2, 5, 0, 0,180, 3, 0, 0, 2, 9, 0, 0,
/* 0x0900 */ 45, 4, 0, 0, 2, 7, 0, 0,222, 4, 0, 0, 2, 8, 0, 0,
/* 0x0910 */ 98, 5, 0, 0, 2, 6, 0, 0,183, 0, 0, 0, 2, 1, 0, 0,
/* 0x0920 */ 102,105,108,101, 32,102,111,114,109, 97,116, 32,101,108,102, 51,
/* 0x0930 */ 50, 45,105, 51, 56, 54, 10, 10, 83,101, 99,116,105,111,110,115,
/* 0x0940 */ 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32,
/* 0x0950 */ 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77,
/* 0x0960 */ 65, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32,
/* 0x0970 */ 32, 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110,
/* 0x0980 */ 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77,
/* 0x0990 */ 65, 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 53, 56,101, 32, 32,
/* 0x09a0 */ 48, 32, 32, 48, 32, 32, 48, 51, 52, 32, 32, 50, 42, 42, 50, 32,
/* 0x09b0 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 49, 32, 69, 76,
/* 0x09c0 */ 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 32, 48, 98, 98, 32,
/* 0x09d0 */ 32, 48, 32, 32, 48, 32, 32, 48, 53, 99, 50, 32, 32, 50, 42, 42,
/* 0x09e0 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 83, 89, 77, 66,
/* 0x09f0 */ 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48,
/* 0x0a00 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65,
/* 0x0a10 */ 73, 78, 88, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48,
/* 0x0a20 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x0a30 */ 69, 76, 70, 77, 65, 73, 78, 90, 32, 48, 32, 69, 76, 70, 77, 65,
/* 0x0a40 */ 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32,
/* 0x0a50 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,
/* 0x0a60 */ 95,115,116, 97,114,116, 10, 48, 48, 48, 48, 48, 51, 51, 54, 32,
/* 0x0a70 */ 103, 32, 32, 32, 32, 32, 70, 32, 69, 76, 70, 77, 65, 73, 78, 88,
/* 0x0a80 */ 32, 48, 50, 53, 56, 32,117,112,120, 95,109,109, 97,112, 95, 97,
/* 0x0a90 */ 110,100, 95,102,100, 10, 48, 48, 48, 48, 48, 48, 49, 53, 32,103,
/* 0x0aa0 */ 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32,
/* 0x0ab0 */ 48, 32,109,101,109,112, 99,112,121, 10, 48, 48, 48, 48, 48, 48,
/* 0x0ac0 */ 50,100, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65,
/* 0x0ad0 */ 73, 78, 90, 32, 48, 32,109,109, 97,112, 10, 48, 48, 48, 48, 48,
/* 0x0ae0 */ 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77,
/* 0x0af0 */ 65, 73, 78, 90, 32, 48, 32,103,101,116, 95,117,112,120,102,110,
/* 0x0b00 */ 95,112, 97,116,104, 10, 48, 48, 48, 48, 48, 48, 48, 51, 32,103,
/* 0x0b10 */ 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32,
/* 0x0b20 */ 48, 32,109,101,109,115,101,116, 10, 48, 48, 48, 48, 48, 48, 50,
/* 0x0b30 */ 98, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x0b40 */ 78, 90, 32, 48, 32,109,121, 95, 98,107,112,116, 10, 10, 82, 69,
/* 0x0b50 */ 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83,
/* 0x0b60 */ 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, 58,
/* 0x0b70 */ 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32,
/* 0x0b80 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85,
/* 0x0b90 */ 69, 10, 48, 48, 48, 48, 48, 48, 48, 50, 32, 82, 95, 51, 56, 54,
/* 0x0ba0 */ 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70,
/* 0x0bb0 */ 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 52, 51, 32, 82,
/* 0x0bc0 */ 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32,
/* 0x0bd0 */ 32,117,112,120, 95,109,109, 97,112, 95, 97,110,100, 95,102,100,
/* 0x0be0 */ 10, 48, 48, 48, 48, 48, 49, 52, 52, 32, 82, 95, 51, 56, 54, 95,
/* 0x0bf0 */ 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,115,
/* 0x0c00 */ 101,116, 10, 48, 48, 48, 48, 48, 50, 54, 97, 32, 82, 95, 51, 56,
/* 0x0c10 */ 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,
/* 0x0c20 */ 109,112, 99,112,121, 10, 48, 48, 48, 48, 48, 51, 98, 52, 32, 82,
/* 0x0c30 */ 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32,
/* 0x0c40 */ 32,109,121, 95, 98,107,112,116, 10, 48, 48, 48, 48, 48, 52, 50,
/* 0x0c50 */ 100, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32,
/* 0x0c60 */ 32, 32, 32, 32,103,101,116, 95,117,112,120,102,110, 95,112, 97,
/* 0x0c70 */ 116,104, 10, 48, 48, 48, 48, 48, 52,100,101, 32, 82, 95, 51, 56,
/* 0x0c80 */ 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,
/* 0x0c90 */ 109,115,101,116, 10, 48, 48, 48, 48, 48, 53, 54, 50, 32, 82, 95,
/* 0x0ca0 */ 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0cb0 */ 109,109, 97,112, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78,
/* 0x0cc0 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76,
/* 0x0cd0 */ 70, 77, 65, 73, 78, 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32,
/* 0x0ce0 */ 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0cf0 */ 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48,
/* 0x0d00 */ 98, 55, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32,
/* 0x0d10 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10
};

File diff suppressed because it is too large Load Diff

View File

@ -172,7 +172,7 @@ _start: .globl _start // in Thumb mode (via PackLinuxElf32::pack3)
// argc,argv,envp, r3 convenience, r4-r7 callee-saved, lr ret_addr
stmfd sp!,{r0,r1,r2, r3, r4,r5,r6,r7, lr} // MATCH_99
sub sp,sp,#3*NBPW // space for ADRU, LENU, PMASK
sub sp,sp,#F_ARGC // space for ADRU, LENU, PMASK
F_ADRU= 0 * NBPW
F_LENU= 1 * NBPW
F_PMASK=2 * NBPW
@ -195,7 +195,8 @@ L70_ret:
mov arg1,#0 // any page address
call upx_mmap_and_fd
add arg4,sp,#F_LENU // &dstlen
and arg3,r0,rPMASK // dst for decompress
mov arg3,r0,lsr #12
mov arg3,arg3,lsl #12 // dst for decompress
str arg3,[sp,#F_ADRU]
mov arg2,r7 // srclen
sub mfd,r0,arg3

View File

@ -49,9 +49,10 @@ MAP_FIXED= 0x10
MAP_ANONYMOUS= 0x20
__NR_memfd_create= 0x164 // 356
__NR_mmap= 90
__NR_mprotect=125
__NR_munmap= 91
__NR_oldmmap= 90 // old mmap: %ebx -> args[6]
__NR_read= 3
__NR_close= 6
__NR_exit= 1
@ -60,11 +61,20 @@ __NR_write= 4
PAGE_SHIFT= 12
PAGE_MASK= (~0<<PAGE_SHIFT)
PAGE_SIZE= -PAGE_MASK
AT_PAGESZ= 6
NAME_MAX= 255 // # chars in file name; linux/include/uapi/linux/limits.h
M_NRV2B_LE32=2 // ../conf.h
M_NRV2D_LE32=5
M_NRV2E_LE32=8
// syscall arguments
#define arg5 edi
#define arg4 esi
#define arg3 edx
#define arg2 ecx
#define arg1 ebx
/* Arguments to decompress() */
#define src %esi
#define lsrc %ecx
@ -78,7 +88,7 @@ M_NRV2E_LE32=8
// .long offset({l_info; p_info; b_info; compressed data})
section ELFMAINX
_start: // C-called: %esp: ret_addr,argc,argv,envp; must save %ebx,%esi,%edi,%ebp
nop // int3 // DEBUG i386 so_entry.S
// int3 // DEBUG i386 so_entry.S
pusha // MATCH_03
call L70 // MATCH_08 push $&getbit
L70ret:
@ -104,20 +114,57 @@ refill:
adc bits,bits // LSB= 1 (CarryIn); CarryOut= next bit
ret // infrequent (1/32)
#define foldi %esi
#define old_sp %ebp
#define foldi %esi
L20:
pop foldi // MATCH_09 &fold_info
cmpw $M_NRV2B_LE32|(0<<8),b_method(foldi); je 0f; hlt; 0: // check method and filter bytes
lea _start - 4*NBPW - L70ret(%edx),%ecx // &so_info
cmpw $M_NRV2B_LE32|(0<<8),b_method(foldi); je 0f; hlt; 0: // check method and filter
push %ecx // MATCH_14 &so_info
mov /*sz_unc*/(foldi),%eax; push %eax // MATCH_15 F_LENU
mov %esp,old_sp
#define F_LENU 0*NBPW
movl /*sz_unc*/(foldi),%ecx
LEN_PATH= 1+ 11 + NAME_MAX + 13 // "/data/data/$APP_NAME/cache/upxAAA"
lea LEN_PATH(%ecx),%ecx; push %ecx // P_10 F_LENU
push $0x5A // P_11 %F_ADRU,F_LENU
push %edi // P_12 PMASK,%F_ADRU,F_LENU
lea _start - 4*NBPW - L70ret(%edx),%eax
push %eax // P_13 &so_info,PMASK,%F_ADRU,F_LENU
push %edx // P_14 &refill,so_info,PMASK,%F_ADRU,F_LENU
push foldi // P_14 foldi,&refill,&so_info,PMASK,%F_ADRU,F_LENU
mov %esp,old_sp
sub $LEN_PATH,%esp; and $-2*NBPW,%esp; push $0 // pathname[0]= '\0';
mov %esp,%edi
sub %eax,%esp // alloca
and $-2*NBPW,%esp // align stack
push %edi // arg3 pathname; pathname[0] = '\0'
push %ecx // arg2 F_LENU
push $0 // arg1 any page address
call upx_mmap_and_fd // %eax= page_addr | (1+fd)
add $3*NBPW,%esp
#define mfd %edx
mov %eax,mfd
shrl $12,%eax
shll $12,%eax // page addr
sub %eax,mfd; dec mfd
mov (old_sp),foldi
mov sz_unc(foldi),%edi
add %eax,%edi
mov %edi,2*NBPW(%eax) // forward upxfn_path FIXME: after decompress ?
mov %esp,%esi
mov $LEN_PATH,%ecx
rep movsb
mov old_sp,%esp // foldi,&refill,&so_info,PMASK,%F_ADRU,F_LENU
#undef old_sp
mov %eax,4*NBPW(%esp) // F_ADRU
pop foldi // P_14 &refill,&so_info,PMASK,F_ADRU,F_LENU
push mfd // P_15 mfd,&refill,&so_info,PMASK,F_ADRU,F_LENU
#undef mfd
push sz_unc(foldi) // P_16 sz_unc,mfd,&refill,&so_info,PMASK,F_ADRU,F_LENU
push %esp // P_17 &dst_len,sz_unc,mfd,&refill,&so_info,PMASK,F_ADRU,F_LENU
mov sz_cpr(foldi),lsrc
lea sz_b_info(foldi),src
#undef foldi
mov %eax,dst
// This is nrv2b_d32, inlined and optimized for small space (about 160 bytes).
// The task is to de-compress the folded pieces for shared library init:
@ -129,28 +176,26 @@ L20:
// and compressability of C-coded de-compressors for Lzma and Zstd
// in contrast to the simple and small assembly-coded NRV.
mov %esp,dst // &unfolded_code
push old_sp // MATCH_16
mov sz_cpr(foldi),lsrc
lea sz_b_info(foldi),src // foldi dead
decompress: // inlined: (uchar const *src, uint len, uchar *dst /*, u32 &ldst, uint method */)
add src,lsrc; push lsrc // MATCH_05 &input_eof
//subq src,lsrc // restore the value of lsrc; dead for inlined nrv2b
add src,lsrc; push lsrc // P_20 eof,&dst_len,sz_unc,mfd,&refill,&so_info,PMASK,F_ADRU,F_LENU
//%esp:
// MATCH_05 &input_eof
// MATCH_16 old_sp
// space for de-compressed code
//old_sp:
// MATCH_10 len unfolded_code
// &dst_len (==> sz_unc in next word)
// sz_unc
// mfd
// &refill
// MATCH_14 &so_info
// PMASK
// P_11 F_ADRU
// MATCH_10 F_LENU
// MATCH_03 pusha regs {%edi,%esi,%ebp,%esp,%ebx,%edx,%ecx,%eax}
// ret_addr
// MATCH_00 argc
// MATCH_01 argv
// MATCH_07 envp
mov 4*NBPW(%esp),%edx // &refill
xor bits,bits // empty; force refill
xor len,len // create loop invariant
or $~0,disp // -1: initial dispacement
@ -188,41 +233,41 @@ gotlen_n2b:
jmp top_n2b
eof_n2b:
pop %ecx // MATCH_05 &input_eof
pop %ecx // MATCH_05 &input_eof; &dst_len,sz_unc,mfd,&refill,&so_info,PMASK,F_ADRU,F_LENU
cmp %ecx,%esi; je 0f; hlt; 0: // test for ending in correct place
pop old_sp // MATCH_16
pop %ecx // toss &dst_len; sz_unc,mfd,&refill,&so_info,PMASK,F_ADRU,F_LENU
xor %ecx,%ecx // zero
call 0f; .asciz "upx"; 0: pop %ebx
push $__NR_memfd_create; pop %eax; int $0x80
#define mfd %edi
mov %eax,mfd
// Forward data to unfolded segment
mov 5*NBPW(%esp),%edi // F_ADRU
mov 4*NBPW(%esp),%eax; mov %eax, (%edi) // fold.PAGE_MASK
pop %eax; mov %eax,2*NBPW(%edi) // fold.upx_fn_path sz_unc
// mfd,&refill,&so_info,PMASK,F_ADRU,F_LENU
mov F_LENU(old_sp),%edx
mov %esp,%ecx
mov %edi,%ebx
mov 5*NBPW(%esp),%arg3 // F_LENU
mov %edi,%arg2 // F_ADRU
pop %arg1 // mfd; &refill,&so_info,PMASK,F_ADRU,F_LENU
pop %eax // toss &refill; &so_info,PMASK,F_ADRU,F_LENU
push $0 // arg6
push %arg1 // arg5 mfd
push $__NR_write; pop %eax; int $0x80
mov old_sp,%esp // de-alloca
push $0 // arg6
push mfd // arg5
push $MAP_PRIVATE // arg4
push $MAP_FIXED|MAP_PRIVATE // arg4
push $PROT_READ|PROT_EXEC // arg3
push 4*NBPW(%esp) // arg2 F_LENU
push $0 // arg1
mov %esp,%ebx
push $__NR_mmap; pop %eax; int $0x80; add $6*NBPW,%esp
push %arg3 // arg2 F_LENU
push %edi // arg1: F_ADRU
mov %esp,%ebx; push $__NR_oldmmap; pop %eax; int $0x80
mov 4*NBPW(%esp),%arg1 // mfd
add $6*NBPW,%esp
push %eax // MATCH_13 ptr unfolded_code
mov mfd,%ebx
push $__NR_close; pop %eax; int $0x80
pop %eax; push %eax
jmp *%eax
add $3*NBPW,%edi
jmp *%edi // %esp/ &so_info,PMASK,F_ADRU,F_LENU
// %esp:
// MATCH_13 ptr unfolded_code; for escape hatch
// MATCH_12 len unfolded code; for escape hatch
// MATCH_14 &so_info
// PMASK
// ADRU
// LENU
// MATCH_03 pusha regs {%edi,%esi,%ebp,%esp,%ebx,%edx,%ecx,%eax}
// ret_addr
// MATCH_00 argc
@ -232,14 +277,95 @@ eof_n2b:
old_mmap: // oldmmap: ebx -> 6 arguments; remove arguments on return
lea 4(%esp),%ebx
push $__NR_mmap; pop %eax; int $0x80
push $__NR_oldmmap; pop %eax; int $0x80
cmp $PAGE_MASK,%eax; jb 0f; hlt; 0:
ret $6*4
// IDENTSTR goes here
section ELFMAINZ
get_upxfn_path: .globl get_upxfn_path // char * (*)(void)
xor %eax,%eax // persistence not desired
ret
memset: .globl memset // (dst, val, n)
push %ebp; mov %esp,%ebp
push %edi
mov (2+ 2)*NBPW(%ebp),%ecx
mov (2+ 1)*NBPW(%ebp),%eax
mov (2+ 0)*NBPW(%ebp),%edi
rep stosb
pop %edi
pop %ebp
ret
mempcpy: .globl mempcpy // (dst, src, n)
push %ebp; mov %esp,%ebp
push %edi; push %esi
mov (2+ 2)*NBPW(%ebp),%ecx
mov (2+ 1)*NBPW(%ebp),%esi
mov (2+ 0)*NBPW(%ebp),%edi
rep movsb
mov %edi,%eax
pop %esi; pop %edi; pop %ebp
ret
.globl my_bkpt
my_bkpt:
int3 // my_bkpt
ret
// C-callable, so do NOT remove arguments as part of return
mmap: .globl mmap // oldmmap: ebx -> 6 arguments
push %ebx // save register
lea 2*NBPW(%esp),%ebx
mov $__NR_oldmmap,%al; call sys_check_al
pop %ebx // restore register
ret
sys_check_al:
movzbl %al,%eax
sys_check:
push %eax // save __NR_ for debug
int $0x80
pop %edx // recover __NR_ for debug
cmp $-0x1000,%eax; jae 0f; ret; 0:
hlt
L70:
// Get PAGE_MASK from AT_PAGESZ in /proc/self/auxv
BUFLEN= 512
FD_CWD = -100
__NR_openat= 295
sub $BUFLEN,%esp
xor %arg3,%arg3 // O_RDONLY
call 0f; .asciz "/proc/self/auxv"; 0: pop %arg2
push $FD_CWD; pop %arg1
mov $__NR_openat,%eax; int $0x80
test %eax,%eax; jl no_psa
#define mfd %ebp
mov %eax,mfd // fd
mov $BUFLEN,%arg3
mov %esp,%arg2 // buf
mov %eax,%arg1 // fd
push $__NR_read; pop %eax; int $0x80; test %eax,%eax; jl no_psa
mov %eax,%ecx // len
mov %esp,%esi // src
0:
lodsl; test %eax,%eax; jz no_psa
cmp $AT_PAGESZ,%eax
lodsl; je 6f
sub $2*NBPW,%ecx; jnz 0b
no_psa:
movl $0x1000,%eax // default PAGE_SIZE
6:
neg %eax // PAGE_MASK
add $BUFLEN,%esp
push %eax // PAGE_MASK
mov mfd,%arg1; push $__NR_close; pop %eax; int $0x80
#undef mfd
pop %edi // PAGE_MASK
pop %edx // &getbit (also L70ret)
call L20 // MATCH_09 push $&fold_info
fold_info:

View File

@ -8,13 +8,10 @@ NBPW= 4
#endif //}
// %esp:
// MATCH_13 ptr unfolded_code; for escape hatch
// MATCH_12 len unfolded code; for escape hatch
// MATCH_14 &so_info:
// .long offset(.) // detect relocation
// .long offset(user DT_INIT)
// .long offset(escape_hatch)
// .long offset({l_info; p_info; b_info; compressed data})
// MATCH_14 &so_info
// PMASK
// ADRU
// LENU
// MATCH_03 pusha regs {%edi,%esi,%ebp,%esp,%ebx,%edx,%ecx,%eax}
// ret_addr
// MATCH_00 argc
@ -22,27 +19,46 @@ NBPW= 4
// MATCH_07 envp
section SO_HEAD
fold:
mov %esp,%eax
mov 2*NBPW(%eax),%ecx // &so_info
ZERO:
PAGE_MASK: .int 0xfffff000 // default
qflg_data: .int 0 // QNX vs Linux: MAP_PRIVATE | MAP_ANONYMOUS
upxfn_path:.int 0 // displacement from ZERO
fold_begin: .globl fold_begin
jmp L05
get_page_mask: .globl get_page_mask
call 0f; 0: pop %eax
movl PAGE_MASK-0b(%eax),%eax
ret
get_upxfn_path: .globl get_upxfn_path // char * (*)(void)
call 0f; 0: pop %ecx; lea ZERO-0b(%ecx),%ecx
mov upxfn_path-ZERO(%ecx),%eax // offset(upxfn_path)
test %eax,%eax; jz 1f
add %ecx,%eax; 1: // &path
ret
L05: // %esp/ &so_info,PMASK,F_ADRU,F_LENU,8regs,ret_addr,argc
int3
pop %ecx // &so_info
lea (3+8+1)*NBPW(%esp),%eax // &{argc,argv,envp}
sub $MAX_ELF_HDR_32,%esp; push %esp // &elf_tmp
add $(3+8+1)*NBPW,%eax; push %eax // &{argc,argv,envp}
push %eax // &{argc,argv,envp}
push %ecx // &so_info
call upx_so_main // (&so_info, &{argc, argv, envp}, &elf_tmp); returns &escape_hatch
add $MAX_ELF_HDR_32 + 3*NBPW,%esp // remove args
add $MAX_ELF_HDR_32 + (3+1)*NBPW,%esp // remove args and PMASK
mov %eax,%ebp // save &escape_hatch
pop %ebx // MATCH_13 ptr unfolded code
pop %ecx // MATCH_12 len unfolded code
pop %edx // MATCH_14 discard &so_info
#define sys1 ebx
#define sys2 ecx
pop %sys1 // MATCH_13 ADRU
pop %sys2 // MATCH_12 LENU
push $__NR_munmap; pop %eax
jmp *%ebp // goto &escape_hatch
ret // MATCH_30 ==>escape_hatch:
// syscall
// pop %ebx
// pop %ebp
// ???
// popa
// ret
L10:
section ptr_NEXT
@ -103,6 +119,17 @@ memcpy: .globl memcpy // void (memcpy(void *dst, void const *src, size_t len)
push %edx // ret_addr
ret
mempcpy: .globl mempcpy // (dst, src, n)
push %ebp; mov %esp,%ebp
push %edi; push %esi
mov (2+ 2)*NBPW(%ebp),%ecx
mov (2+ 1)*NBPW(%ebp),%esi
mov (2+ 0)*NBPW(%ebp),%edi
rep movsb
mov %edi,%eax
pop %esi; pop %edi; pop %ebp
ret
/* 32-bit mode only! */
__NR_read= 3
__NR_write= 4

View File

@ -34,7 +34,7 @@
extern void my_bkpt(void const *arg1, ...);
#define DEBUG 0
#define DEBUG 1
// Pprotect is mprotect, but page-aligned on the lo end (Linux requirement)
unsigned Pprotect(void *, size_t, unsigned);
@ -469,7 +469,7 @@ typedef struct {
typedef struct {
unsigned off_reloc; // distance back to &Elf32_Ehdr
unsigned off_user_DT_INIT;
unsigned off_xct_off; // where un-compressed bytes end [unused?]
unsigned off_xct_off; // where un-compressed bytes end
unsigned off_info; // xct_off: {l_info; p_info; b_info; compressed data)
} So_info;
@ -484,6 +484,7 @@ upx_so_main( // returns &escape_hatch
Elf32_Ehdr *elf_tmp // scratch for Elf32_Ehdr and Elf32_Phdrs
)
{
my_bkpt((void *)0x1234, so_info, so_args, elf_tmp);
unsigned long const page_mask = get_page_mask();
char *const va_load = (char *)&so_info->off_reloc - so_info->off_reloc;
So_info so_infc; // So_info Copy

View File

@ -175,12 +175,15 @@ struct timespec {
#define __NR_lseek 19
#define __NR_getpid 20
#define __NR_access 33
#define __NR_mkdir 39
#define __NR_brk 45
#define __NR_fcntl 55
#define __NR_gettimeofday 78
#define __NR_mmap 90
#define __NR_munmap 91
#define __NR_ftruncate 93
#define __NR_stat 106
#define __NR_uname 122
#define __NR_adjtimex 124
#define __NR_mprotect 125
#define __NR_nanosleep 162
@ -342,6 +345,9 @@ type name(type1 arg1,type2 arg2,type3 arg3) \
#define _exit syscall_exit
#define exit syscall_exit
struct stat;
struct utsname;
static inline _syscall2(int,access,const char *,file,int,mode)
static inline _syscall1(int,adjtimex,struct timex *,ntx)
static inline _syscall1(void *,brk,void *,high)
@ -355,13 +361,16 @@ static inline _syscall0(pid_t,getpid)
static inline _syscall2(int,gettimeofday,struct timeval *,tv,void *,tz)
static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,whence)
static inline _syscall2(int,memfd_create,char const *,name,unsigned,flags);
static inline _syscall2(int,mkdir,char const *,name,unsigned,mode);
static inline _syscall3(int,mprotect,void *,addr,size_t,len,int,prot)
static inline _syscall2(int,munmap,void *,start,size_t,length)
static inline _syscall2(int,nanosleep,const struct timespec *,rqtp,struct timespec *,rmtp)
static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
static inline _syscall3(ssize_t,read,int,fd,void *,buf,size_t,count)
static inline _syscall2(int,stat,char const *,path,struct stat *,buf)
static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
static inline _syscall3(ssize_t,write,int,fd,const void *,buf,size_t,count)
static inline _syscall1(int,uname,struct utsname *,buf)
static inline _syscall1(int,unlink,const char *,file)
static inline _syscall2(int,link,const char *,src, const char *,dst)

View File

@ -2,12 +2,12 @@ file format elf32-i386
Sections:
Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINX 0635 0 0 034 2**2 CONTENTS
1 ELFMAINZ 0a 0 0 0669 2**0 CONTENTS
0 ELFMAINX 064e 0 0 034 2**2 CONTENTS
1 ELFMAINZ 0a 0 0 0682 2**0 CONTENTS
SYMBOL TABLE:
00000000 l d ELFMAINX 0 ELFMAINX
00000000 l d ELFMAINZ 0 ELFMAINZ
000003f7 g F ELFMAINX 023e upx_mmap_and_fd
000003f6 g F ELFMAINX 0258 upx_mmap_and_fd
00000000 *UND* 0 O_BINFO
000001cc g ELFMAINX 0 mempcpy
00000172 g ELFMAINX 0 mmap
@ -24,15 +24,12 @@ OFFSET TYPE VALUE
00000005 R_386_PC32 ELFMAINZ
000000a5 R_386_PC32 upx_mmap_and_fd
0000014a R_386_PC32 mmap
00000207 R_386_PC32 memset
0000020e R_386_PC32 stat
0000023c R_386_PC32 mkdir
0000032b R_386_PC32 mempcpy
00000475 R_386_PC32 my_bkpt
00000484 R_386_PC32 uname
000004de R_386_PC32 get_upxfn_path
00000585 R_386_PC32 memset
00000609 R_386_PC32 mmap
00000204 R_386_PC32 memset
0000032a R_386_PC32 mempcpy
00000474 R_386_PC32 my_bkpt
000004ed R_386_PC32 get_upxfn_path
0000059e R_386_PC32 memset
00000622 R_386_PC32 mmap
RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE

16
src/stub/tmp/i386-linux.elf-fold.map generated vendored
View File

@ -7,18 +7,18 @@ Name Origin Length Attributes
Linker script and memory map
.text 0x0000000000000000 0x176e
.text 0x0000000000000000 0x1786
.text 0x0000000000000000 0x18b tmp/i386-linux.elf-fold.o
0x000000000000000c get_page_mask
0x0000000000000019 get_upxfn_path
*fill* 0x000000000000018b 0x1 00
.text 0x000000000000018c 0x445 tmp/i386-linux.elf-upxfd_android.o
0x0000000000000393 upx_mmap_and_fd
*fill* 0x00000000000005d1 0x3 00
.text 0x00000000000005d4 0x0 tmp/i386-expand.o
.text 0x00000000000005d4 0x119a tmp/i386-linux.elf-main2.o
0x00000000000016f1 underlay
0x0000000000001475 upx_main
.text 0x000000000000018c 0x45e tmp/i386-linux.elf-upxfd_android.o
0x0000000000000392 upx_mmap_and_fd
*fill* 0x00000000000005ea 0x2 00
.text 0x00000000000005ec 0x0 tmp/i386-expand.o
.text 0x00000000000005ec 0x119a tmp/i386-linux.elf-main2.o
0x0000000000001709 underlay
0x000000000000148d upx_main
.data 0x0000000000000000 0x0
.data 0x0000000000000000 0x0 tmp/i386-linux.elf-fold.o