diff --git a/src/stub/Makefile b/src/stub/Makefile index ec0c7209..744d7f84 100644 --- a/src/stub/Makefile +++ b/src/stub/Makefile @@ -48,6 +48,7 @@ STUBS = \ l_lx_pti86.h fold_pti86.h \ l_lx_elfppc32.h fold_elfppc32.h \ l_lx_elf64amd.h fold_elf64amd.h \ + l_lx_elf32arm.h fold_elf32arm.h \ l_mac_ppc32.h fold_machppc32.h \ l_vmlinz.h l_vmlinx.h @@ -227,8 +228,9 @@ GCC_AMD64 += -Wall -W -Wcast-align -Wcast-qual -Wwrite-strings -Werror GCC_ARM := arm-9tdmi-linux-gnu-gcc -march=armv4 -nostdinc -MMD GCC_ARM += -Wall -W -Wcast-align -Wcast-qual -Wwrite-strings -Werror GCC_ARM_T := $(GCC_ARM) -march=armv4t -OBJCOPY_ARM := arm-9tdmi-linux-gnu-objcopy - +LD_ARM := arm-9tdmi-linux-gnu-ld +OBJCOPY_LINUX_ARM := arm-9tdmi-linux-gnu-objcopy +OBJSTRIP_LINUX_ARM := $(OBJCOPY_LINUX_ARM) -R .comment -R .note # /*********************************************************************** # // main targets @@ -429,6 +431,13 @@ l_lx_elf64amd.h: l_lx_elf64amd.S amd_d_nrv2e.S $(LD_AMD64) -o $T.bin --oformat binary $T.o $(BIN2H) $T.bin linux_elf64amd_loader $@ +l_lx_elf32arm.h: l_lx_elf32arm.S arm_nrv2e_d32.S + $(GCC_ARM) -c $< + $(OBJSTRIP_LINUX_ARM) $T.o + $(LD_ARM) -o $T.out $T.o + $(OBJCOPY_LINUX_ARM) --only-section .text -O binary $T.out $T.bin + $(BIN2H) $T.bin linux_elf32arm_loader $@ + l_lx_elf.o: l_lx_elf.c linux.hh $(MAKEFILE_DEPS) $(CC_LINUX_I386) -c $< $(OBJSTRIP_LINUX_I386) $@ @@ -469,6 +478,10 @@ a_lx_elf64amd.o: a_lx_elf64.c $(MAKEFILE_DEPS) $(GCC_AMD64) -c -Os -fno-exceptions -fno-asynchronous-unwind-tables -o $@ $< $(OBJSTRIP_AMD64) $@ +a_lx_elf32arm.o: l_lx_elf.c $(MAKEFILE_DEPS) + $(GCC_ARM) -c -Os -fno-exceptions -fno-asynchronous-unwind-tables -o $@ $< + $(OBJSTRIP_LINUX_ARM) $@ + fold_elfppc32.o: fold_elfppc32.S ppc_bxx.S $(MAKEFILE_DEPS) $(GCC_PPC32) -c $< $(OBJSTRIP_PPC32) $@ @@ -477,6 +490,10 @@ fold_elf64amd.o: fold_elf64amd.S amd_bxx.S $(MAKEFILE_DEPS) $(GCC_AMD64) -c $< $(OBJSTRIP_AMD64) $@ +fold_elf32arm.o: fold_elf32arm.S $(MAKEFILE_DEPS) + $(GCC_ARM) -c $< + $(OBJSTRIP_LINUX_ARM) $@ + fold_elfppc32.h: m_lx_elfppc32.o fold_elfppc32.o l_lx_elfppc32.lds $(LD_PPC32) -T $(srcdir)/l_lx_elfppc32.lds -Map $T.map -o $T.bin --strip-all \ fold_elfppc32.o m_lx_elfppc32.o @@ -488,6 +505,12 @@ fold_elf64amd.h: a_lx_elf64amd.o fold_elf64amd.o l_lx_elf64amd.lds amd_bxx.S $(STRIPELF_LINUX_I386) $T.bin $(BIN2H) $T.bin linux_elf64amd_fold $@ +fold_elf32arm.h: a_lx_elf32arm.o fold_elf32arm.o l_lx_elf32arm.lds amd_bxx.S + $(LD_ARM) -T $(srcdir)/l_lx_elf32arm.lds -Map $T.map -o $T.bin --strip-all \ + fold_elf32arm.o a_lx_elf32arm.o + $(STRIPELF_LINUX_I386) $T.bin + $(BIN2H) $T.bin linux_elf32arm_fold $@ + fold_exec86.o: fold_exec86.asm $(NASM) -f elf -o $@ $< $(OBJSTRIP_LINUX_I386) $@ @@ -555,12 +578,12 @@ upxd: l_lx_sep.o l_lx_sep86.asm l_armpea.h: l_armpea.S armv4_n2e_d8.S $(MAKEFILE_LIST) $(GCC_ARM) $T.S -o $T.out -nostdlib - $(OBJCOPY_ARM) --only-section .text -O binary $T.out $T.bin + $(OBJCOPY_LINUX_ARM) --only-section .text -O binary $T.out $T.bin $(BIN2H) $T.bin nrv_loader_arm $@ l_armpet.h: l_armpet.S arm_nrv2e_d8.S arm_nrv2b_d8.S $(MAKEFILE_LIST) $(GCC_ARM_T) $T.S -o $T.out -nostdlib - $(OBJCOPY_ARM) --only-section .text -O binary $T.out $T.bin + $(OBJCOPY_LINUX_ARM) --only-section .text -O binary $T.out $T.bin $(BIN2H) $T.bin nrv_loader_thumb $@ # /*********************************************************************** diff --git a/src/stub/fold_elf32arm.S b/src/stub/fold_elf32arm.S new file mode 100644 index 00000000..e537d2d2 --- /dev/null +++ b/src/stub/fold_elf32arm.S @@ -0,0 +1,155 @@ +@ fold_elfarm.asm -- linkage to C code to process Elf binary +@ +@ This file is part of the UPX executable compressor. +@ +@ Copyright (C) 2000-2006 John F. Reiser +@ All Rights Reserved. +@ +@ UPX and the UCL library are free software; you can redistribute them +@ and/or modify them under the terms of the GNU General Public License as +@ published by the Free Software Foundation; either version 2 of +@ the License, or (at your option) any later version. +@ +@ This program is distributed in the hope that it will be useful, +@ but WITHOUT ANY WARRANTY; without even the implied warranty of +@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +@ GNU General Public License for more details. +@ +@ You should have received a copy of the GNU General Public License +@ along with this program; see the file COPYING. +@ If not, write to the Free Software Foundation, Inc., +@ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +@ +@ Markus F.X.J. Oberhumer Laszlo Molnar +@ +@ +@ John F. Reiser +@ +@ + +sz_Elf32_Ehdr = 13*4 +sz_Elf32_Phdr = 8*4 +sz_l_info = 12 +sz_p_info = 12 +sz_b_info = 12 + sz_unc= 0 + sz_cpr= 4 + b_method= 8 + +@@ control just falls through, after this part and compiled C code +@@ are uncompressed. + +#define OVERHEAD 2048 +#define MAX_ELF_HDR 512 + +fold_begin: +/* In: + r10= &b_info of first compressed block (after move) + r9= total size of compressed data + r8= JMPU + r7= LENU + r6= ADRU + r5= f_decompress + sp/ sz_unc_fold,argc,argv... +*/ + ldr r3,[sp,#4] @ argc; sz_unc was pushed + add sp,sp,#4 @ discard sz_unc + add r3,sp,r3,lsl #2 @ skip argv + add r3,r3,#4+4 @ skip argc, env_end +.Lenv: + ldr r0,[r3],#4 @ skip env + cmp r0,#0 + bne .Lenv + /* r3= &Elf32_auxv_t */ + + stmdb sp!,{r6,r7,r8} @ ADRU,LENU,JMPU + sub sp,sp,#MAX_ELF_HDR + OVERHEAD @ alloca + mov r4,r9 @ total size of compressed data + ldr r9,[r10,#sz_cpr] @ xi.size of ELF headers + mov r8,sp @ xo.ptr + ldr r7,[r10,#sz_unc] @ xo.size + adr r6,f_unfilter + stmdb sp!,{r3,r4,r5,r6,r7,r8,r9,r10,r11} + ldmia sp!,{r0,r1,r2,r3} + bl upx_main + add sp,sp,#(9-4)*4 + add sp,sp,#MAX_ELF_HDR + OVERHEAD @ un-alloca + mov r2,r0 @ entry address + ldmia sp!,{r0,r1,pc} @ goto [sys $__NR_munmap; mov pc,r2] + +f_unfilter: @ (char *ptr, uint len, uint cto, uint fid) + ptr .req r0 + len .req r1 + cto .req r2 @ unused + fid .req r3 + + tmp .req fid @ disjoint lifetimes + + and fid,fid,#0xff + cmp fid,#0x50 @ last use of fid + movne pc,lr @ no-op if not filter 0x50 + + movs len,len,lsr #2 @ word count + cmpne ptr,#0 + moveq pc,lr @ no-op if either len or ptr is 0 + +top_unf: + subs len,len,#1 @ condition code holds until tst_unf + ldr r3,[ptr,len,lsl #2] + and tmp,r3,#0x0f<<24 + cmp tmp, #0x0b<<24 + bne tst_unf + and tmp,r3,#0xff<<24 + sub r3,r3,len @ convert to word-relative + bic r3,r3, #0xff<<24 + orr r3,r3,tmp + str r3,[ptr,len,lsl #2] +tst_unf: + bne top_unf + mov pc,lr + + .unreq ptr + .unreq len + .unreq cto + .unreq fid + + .globl exit +exit: + swi 0x00900001 + + .globl read +read: + swi 0x00900003; mov pc,lr + + .globl open +open: + swi 0x00900005; mov pc,lr + + .globl close +close: + swi 0x00900006; mov pc,lr + + .globl brk +brk: + swi 0x0090002d; mov pc,lr + + .globl munmap +munmap: + swi 0x0090005b; mov pc,lr + + .globl mprotect +mprotect: + swi 0x0090007d; mov pc,lr + + .globl mmap +mmap: + str r5,[sp,#-4]!; ldr r5,[sp,#4+4] + str r4,[sp,#-4]!; ldr r4,[sp,#4+4] + mov r5,r5,lsr #12 @ convert to page number + swi 0x009000c0 @ mmap64 + ldr r4,[sp],#4 + ldr r5,[sp],#4 + mov pc,lr + +@ vi:ts=8:et:nowrap + diff --git a/src/stub/fold_elf32arm.h b/src/stub/fold_elf32arm.h new file mode 100644 index 00000000..ae3e363e --- /dev/null +++ b/src/stub/fold_elf32arm.h @@ -0,0 +1,155 @@ +/* fold_elf32arm.h -- created from fold_elf32arm.bin, 1912 (0x778) bytes + + This file is part of the UPX executable compressor. + + Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 1996-2006 Laszlo Molnar + Copyright (C) 2000-2006 John F. Reiser + All Rights Reserved. + + UPX and the UCL library are free software; you can redistribute them + and/or modify them under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Markus F.X.J. Oberhumer Laszlo Molnar + + */ + + +#define LINUX_ELF32ARM_FOLD_SIZE 1912 +#define LINUX_ELF32ARM_FOLD_ADLER32 0x99d01527 +#define LINUX_ELF32ARM_FOLD_CRC32 0xdf1b3d81 + +unsigned char linux_elf32arm_fold[1912] = { +127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */ + 2, 0, 40, 0, 1, 0, 0, 0,128,128, 0, 0, 52, 0, 0, 0, /* 0x 10 */ + 0, 0, 0, 0, 2, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, 0, /* 0x 20 */ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, /* 0x 30 */ + 0,128, 0, 0,120, 7, 0, 0,120, 7, 0, 0, 5, 0, 0, 0, /* 0x 40 */ + 0,128, 0, 0, 1, 0, 0, 0,120, 7, 0, 0,120,135, 0, 0, /* 0x 50 */ +120,135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, /* 0x 60 */ + 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */ + 4, 48,157,229, 4,208,141,226, 3, 49,141,224, 8, 48,131,226, /* 0x 80 */ + 4, 0,147,228, 0, 0, 80,227,252,255,255, 26,192, 1, 45,233, /* 0x 90 */ + 10,220, 77,226, 9, 64,160,225, 4,144,154,229, 13,128,160,225, /* 0x a0 */ + 0,112,154,229, 24, 96,143,226,248, 15, 45,233, 15, 0,189,232, /* 0x b0 */ + 86, 1, 0,235, 20,208,141,226, 10,220,141,226, 0, 32,160,225, /* 0x c0 */ + 3,128,189,232,255, 48, 3,226, 80, 0, 83,227, 14,240,160, 17, /* 0x d0 */ + 33, 17,176,225, 0, 0, 80, 19, 14,240,160, 1, 1, 16, 81,226, /* 0x e0 */ + 1, 49,144,231, 15, 52, 3,226, 11, 4, 83,227, 4, 0, 0, 26, /* 0x f0 */ +255, 52, 3,226, 1, 48, 67,224,255, 52,195,227, 3, 48,131,225, /* 0x 100 */ + 1, 49,128,231,244,255,255, 26, 14,240,160,225, 1, 0,144,239, /* 0x 110 */ + 3, 0,144,239, 14,240,160,225, 5, 0,144,239, 14,240,160,225, /* 0x 120 */ + 6, 0,144,239, 14,240,160,225, 45, 0,144,239, 14,240,160,225, /* 0x 130 */ + 91, 0,144,239, 14,240,160,225,125, 0,144,239, 14,240,160,225, /* 0x 140 */ + 4, 80, 45,229, 8, 80,157,229, 4, 64, 45,229, 8, 64,157,229, /* 0x 150 */ + 37, 86,160,225,192, 0,144,239, 4, 64,157,228, 4, 80,157,228, /* 0x 160 */ + 14,240,160,225, 4,224, 45,229, 0, 48,144,229, 2, 0, 83,225, /* 0x 170 */ + 2,192,160,225, 4,224,144,229,127, 0,160, 51,226,255,255, 59, /* 0x 180 */ + 1, 32, 66,226, 1, 0,114,227, 4, 0, 0, 10, 1, 48,222,228, /* 0x 190 */ + 1, 32, 66,226, 1, 48,193,228, 1, 0,114,227,249,255,255,234, /* 0x 1a0 */ + 4, 32,144,229, 0, 48,144,229, 12, 32,130,224, 3, 48,108,224, /* 0x 1b0 */ + 0, 48,128,229, 4, 32,128,229, 4,240,157,228,240, 64, 45,233, /* 0x 1c0 */ + 1, 64,160,225, 0, 16,145,229, 20,208, 77,226, 0, 0, 81,227, /* 0x 1d0 */ + 0, 80,160,225, 2,112,160,225, 3, 96,160,225, 70, 0, 0, 10, /* 0x 1e0 */ + 8, 16,141,226, 12, 32,160,227, 5, 0,160,225,220,255,255,235, /* 0x 1f0 */ + 8, 16,157,229, 0, 0, 81,227, 12, 32,157,229, 6, 0, 0, 26, /* 0x 200 */ +252, 48,159,229, 3, 0, 82,225, 5, 0, 0, 26, 0, 48,149,229, /* 0x 210 */ + 0, 0, 83,227, 56, 0, 0, 10, 1, 0, 0,234, 0, 0, 82,227, /* 0x 220 */ + 1, 0, 0, 26,127, 0,160,227,183,255,255,235, 1, 0, 82,225, /* 0x 230 */ +251,255,255,138, 0, 48,148,229, 3, 0, 81,225,248,255,255,138, /* 0x 240 */ + 1, 0, 82,225, 4, 48,148,229, 33, 0, 0, 42, 16,192,221,229, /* 0x 250 */ + 4, 0,149,229, 2, 16,160,225, 0,192,141,229, 3, 32,160,225, /* 0x 260 */ + 4, 48,141,226, 15,224,160,225, 7,240,160,225, 0, 0, 80,227, /* 0x 270 */ +235,255,255, 26, 10, 0,157,233, 3, 0, 81,225,232,255,255, 26, /* 0x 280 */ + 17, 32,221,229, 0, 0, 82,227, 0, 0, 86, 19, 9, 0, 0, 10, /* 0x 290 */ + 2, 12, 81,227, 2, 0, 0,138, 0, 48,148,229, 1, 0, 83,225, /* 0x 2a0 */ + 4, 0, 0, 26, 2, 48,160,225, 4, 0,148,229, 18, 32,221,229, /* 0x 2b0 */ + 15,224,160,225, 6,240,160,225, 4, 48,149,229, 12, 16,157,229, /* 0x 2c0 */ + 0, 32,149,229, 1, 48,131,224, 2, 32, 97,224, 12, 0,133,232, /* 0x 2d0 */ + 2, 0, 0,234, 3, 16,160,225, 5, 0,160,225,160,255,255,235, /* 0x 2e0 */ + 8, 16,157,229, 12, 0,148,232, 2, 32, 97,224, 1, 48,131,224, /* 0x 2f0 */ + 0, 0, 82,227, 12, 0,132,232,183,255,255,234, 20,208,141,226, /* 0x 300 */ +240,128,189,232, 85, 80, 88, 33, 0, 0, 80,227, 14,240,160, 1, /* 0x 310 */ + 1, 0, 16,227, 14,240,160, 17, 0, 48,144,229, 1, 0, 83,225, /* 0x 320 */ + 6, 0, 0, 10, 1, 0, 83,227, 0, 48,160, 19, 1, 48,160, 3, /* 0x 330 */ + 0, 0, 81,227, 0, 48,160, 3, 0, 0, 83,227, 1, 0, 0, 10, /* 0x 340 */ + 6, 0,128,232, 14,240,160,225, 8, 0,128,226,241,255,255,234, /* 0x 350 */ +240, 79, 45,233, 40,208, 77,226, 1,160,160,225, 28,192,145,229, /* 0x 360 */ + 2,176,160,225,176, 17,209,225, 80, 32,157,229,188,226,218,225, /* 0x 370 */ + 2, 0, 81,227, 12,128,138,224, 24, 0,141,229, 20, 48,141,229, /* 0x 380 */ + 16, 32,141,229, 50,112,160, 3, 34,112,160, 19, 8, 16,160,225, /* 0x 390 */ + 1,224, 94,226, 0, 96,224,227, 0, 80,160,227, 12, 0, 0, 74, /* 0x 3a0 */ + 0, 48,145,229, 1, 0, 83,227, 6, 0, 0, 26, 8, 32,145,229, /* 0x 3b0 */ + 20, 48,145,229, 2, 48,131,224, 3, 0, 85,225, 3, 80,160, 49, /* 0x 3c0 */ + 2, 0, 86,225, 2, 96,160, 33, 1,224, 94,226, 32, 16,129,226, /* 0x 3d0 */ +241,255,255,234,255,110,198,227, 15, 96,198,227, 5, 48,102,224, /* 0x 3e0 */ +255, 62,131,226, 15, 48,131,226,255, 94,195,227, 0, 64,160,227, /* 0x 3f0 */ + 15, 80,197,227, 7, 48,160,225, 0,192,224,227, 6, 0,160,225, /* 0x 400 */ + 5, 16,160,225, 4, 32,160,225, 0,192,141,229, 4, 64,141,229, /* 0x 410 */ + 74,255,255,235,188, 50,218,225, 3, 0, 84,225, 5, 48,128,224, /* 0x 420 */ + 12, 64,141,229, 36, 48,141,229, 0,144,102,224,100, 0, 0,170, /* 0x 430 */ + 0, 48,152,229, 6, 0, 83,227, 5, 0, 0, 26, 8, 32,152,229, /* 0x 440 */ + 20, 0,157,229, 9, 32,130,224, 3, 16,160,227,173,255,255,235, /* 0x 450 */ + 84, 0, 0,234, 1, 0, 83,227, 82, 0, 0, 26, 24, 48,152,229, /* 0x 460 */ + 8, 16,152,229, 7, 48, 3,226,156, 33,159,229, 9, 16,129,224, /* 0x 470 */ + 3, 49,160,225, 16, 0,152,229, 50, 35,160,225, 1, 74,160,225, /* 0x 480 */ + 20, 48,152,229, 0, 0, 91,227, 4,192,152,229, 36, 74,160,225, /* 0x 490 */ + 3, 48,129,224, 1, 80,100,224, 24,224,157, 5, 7,112, 2,226, /* 0x 4a0 */ + 4, 96,128,224, 2, 32,160, 19, 0, 32,160, 3, 8, 48,141,229, /* 0x 4b0 */ + 0,224,224, 19, 28, 0,141,229, 32, 16,141,229, 18, 48,160, 3, /* 0x 4c0 */ + 50, 48,160, 19, 12,192,100,224, 7, 32,130,225, 5, 0,160,225, /* 0x 4d0 */ + 6, 16,160,225, 0,224,141,229, 4,192,141,229, 23,255,255,235, /* 0x 4e0 */ + 0, 0, 85,225, 29, 0, 0, 26, 0, 0, 91,227, 6, 0, 0, 10, /* 0x 4f0 */ + 16, 32,157,229, 39, 49,176,225, 2, 48,160, 17, 28, 16,141,226, /* 0x 500 */ + 11, 0,160,225, 24, 32,157,229, 43,255,255,235, 0, 48,102,226, /* 0x 510 */ + 3, 74,160,225, 2, 0, 23,227, 36, 74,160,225, 7, 0, 0, 10, /* 0x 520 */ + 0, 0, 84,227, 6, 16,133,224, 4, 32,160,225, 3, 0, 0, 10, /* 0x 530 */ + 0, 48,160,227, 1, 32, 82,226, 1, 48,193,228,251,255,255, 26, /* 0x 540 */ + 0, 0, 91,227, 7, 0, 0, 10, 5, 0,160,225, 6, 16,160,225, /* 0x 550 */ + 7, 32,160,225,247,254,255,235, 0, 0, 80,227, 1, 0, 0, 10, /* 0x 560 */ +127, 0,160,227,232,254,255,235, 4, 48,134,224, 3, 80,133,224, /* 0x 570 */ + 8, 48,157,229, 3, 0, 85,225, 10, 0, 0, 42, 0,192,224,227, /* 0x 580 */ + 3, 16,101,224, 0,192,141,229, 7, 32,160,225, 1,192,140,226, /* 0x 590 */ + 5, 0,160,225, 50, 48,160,227, 4,192,141,229,231,254,255,235, /* 0x 5a0 */ + 0, 0, 85,225,237,255,255, 26, 12, 32,157,229,188, 50,218,225, /* 0x 5b0 */ + 1, 32,130,226, 3, 0, 82,225, 32,128,136,226, 12, 32,141,229, /* 0x 5c0 */ +153,255,255,234, 0, 0, 91,227, 4, 0, 0, 26, 24, 0,157,229, /* 0x 5d0 */ +210,254,255,235, 0, 0, 80,227, 4, 0, 0, 10,223,255,255,234, /* 0x 5e0 */ +176, 49,218,225, 3, 0, 83,227, 36, 0,157, 21,205,254,255, 27, /* 0x 5f0 */ + 76, 48,157,229, 0, 0, 83,227, 0,144,131, 21, 24, 0,154,229, /* 0x 600 */ + 9, 0,128,224, 40,208,141,226,240,143,189,232, 64, 98, 81,115, /* 0x 610 */ +240, 71, 45,233, 12,208, 77,226, 44,192,141,226, 52,112,141,226, /* 0x 620 */ + 0, 80,160,225, 1, 96,160,225, 3,160,160,225, 12, 16,160,225, /* 0x 630 */ + 0, 48,160,227, 7, 0,160,225, 4,144,156,229, 2,128,160,225, /* 0x 640 */ + 52, 64,157,229,220,254,255,235, 56, 48,157,229, 5, 0,160,225, /* 0x 650 */ + 3, 48,100,224, 5, 16,160,227,188, 34,217,225, 56, 48,141,229, /* 0x 660 */ + 52, 96,141,229, 39,255,255,235, 52, 96,137,226, 5, 0,160,225, /* 0x 670 */ + 4, 16,160,227,186, 34,217,225, 34,255,255,235, 8, 48,150,229, /* 0x 680 */ + 60, 32,157,229, 3, 32,130,224, 52, 32,130,226, 5, 0,160,225, /* 0x 690 */ + 3, 16,160,227, 27,255,255,235, 8,192,141,226, 7, 32,160,225, /* 0x 6a0 */ + 9, 16,160,225, 5, 48,160,225, 8, 0,160,225, 0,192,141,229, /* 0x 6b0 */ + 4,160,141,229, 37,255,255,235, 0, 64,160,225, 9, 16,160,227, /* 0x 6c0 */ + 4, 32,160,225, 5, 0,160,225, 14,255,255,235,188, 18,217,225, /* 0x 6d0 */ + 0, 32,160,227, 1, 0, 82,225, 31, 0, 0,170, 0, 48,150,229, /* 0x 6e0 */ + 3, 0, 83,227, 1, 32,130,226, 24, 0, 0, 26, 8, 48,150,229, /* 0x 6f0 */ + 8, 0,157,229, 0, 16,160,227, 0, 0,131,224, 1, 32,160,225, /* 0x 700 */ +132,254,255,235, 0, 64, 80,226, 4, 0, 0,186, 9, 16,160,225, /* 0x 710 */ + 2, 44,160,227,125,254,255,235, 2, 12, 80,227, 1, 0, 0, 10, /* 0x 720 */ +127, 0,160,227,120,254,255,235, 0,192,160,227, 4, 0,160,225, /* 0x 730 */ + 12, 32,160,225, 9, 16,160,225, 12, 48,160,225, 0,192,141,229, /* 0x 740 */ + 4,192,141,229, 1,255,255,235, 0, 64,160,225, 2, 0, 0,234, /* 0x 750 */ + 1, 0, 82,225, 32, 96,134,226,222,255,255,234, 4, 0,160,225, /* 0x 760 */ + 12,208,141,226,240,135,189,232 /* 0x 770 */ +}; diff --git a/src/stub/fold_elf86.h b/src/stub/fold_elf86.h index fa19c826..6efe05ac 100644 --- a/src/stub/fold_elf86.h +++ b/src/stub/fold_elf86.h @@ -1,4 +1,4 @@ -/* fold_elf86.h -- created from fold_elf86.bin, 1607 (0x647) bytes +/* fold_elf86.h -- created from fold_elf86.bin, 1622 (0x656) bytes This file is part of the UPX executable compressor. @@ -27,18 +27,18 @@ */ -#define LINUX_I386ELF_FOLD_SIZE 1607 -#define LINUX_I386ELF_FOLD_ADLER32 0xdf50b4ab -#define LINUX_I386ELF_FOLD_CRC32 0x537b9a31 +#define LINUX_I386ELF_FOLD_SIZE 1622 +#define LINUX_I386ELF_FOLD_ADLER32 0x0526bd6c +#define LINUX_I386ELF_FOLD_CRC32 0x143cc952 -unsigned char linux_i386elf_fold[1607] = { +unsigned char linux_i386elf_fold[1622] = { 127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */ 2, 0, 3, 0, 1, 0, 0, 0,128, 16,192, 0, 52, 0, 0, 0, /* 0x 10 */ 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, 0, /* 0x 20 */ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16,192, 0, /* 0x 30 */ - 0, 16,192, 0, 71, 6, 0, 0, 72, 6, 0, 0, 5, 0, 0, 0, /* 0x 40 */ - 0, 16, 0, 0, 1, 0, 0, 0, 71, 6, 0, 0, 72, 22,192, 0, /* 0x 50 */ - 72, 22,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, /* 0x 60 */ + 0, 16,192, 0, 86, 6, 0, 0, 88, 6, 0, 0, 5, 0, 0, 0, /* 0x 40 */ + 0, 16, 0, 0, 1, 0, 0, 0, 86, 6, 0, 0, 88, 22,192, 0, /* 0x 50 */ + 88, 22,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, /* 0x 60 */ 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */ 41,201,186,120, 2, 0, 0,137,230,137,231,232,121, 0, 0, 0, /* 0x 80 */ 137,230,209,234, 25,192, 41,193,141, 36,196,133,210,117,243,137, /* 0x 90 */ @@ -46,7 +46,7 @@ unsigned char linux_i386elf_fold[1607] = { 141,148, 26,255, 31, 0, 0,129,226, 0,240,255,255, 82, 41,192, /* 0x b0 */ 102,131,123, 16, 3,117, 1,146, 80,139,115, 24,141,131,140, 0, /* 0x c0 */ 0, 0, 41,198,139, 24,139, 72, 4,131,193, 12,141, 84, 36, 12, /* 0x d0 */ - 96, 71,232, 90, 4, 0, 0,131,196, 36, 89, 91,129,196, 0, 10, /* 0x e0 */ + 96, 71,232, 92, 4, 0, 0,131,196, 36, 89, 91,129,196, 0, 10, /* 0x e0 */ 0, 0, 80, 79, 41,192, 60,175,175,117,252, 80, 80, 80, 80, 80, /* 0x f0 */ 80, 80, 80, 41,217,176, 91,255, 39,173,171,133,192,117,250,173, /* 0x 100 */ 171,133,192,117,250, 87,173,171,131,248, 32,115, 3, 15,179,194, /* 0x 110 */ @@ -71,66 +71,67 @@ unsigned char linux_i386elf_fold[1607] = { 66,255,255,255,141,101,244, 91, 94, 95,201,195,133,192, 83,137, /* 0x 240 */ 211,116, 29,168, 1,117, 25,139, 16, 57,218,116, 7, 74,117, 11, /* 0x 250 */ 133,219,116, 7,137, 24,137, 72, 4,235, 5,131,192, 8,235,231, /* 0x 260 */ - 91,195, 85,137,229, 87, 86, 83,131,236, 64,137, 85,224,139, 77, /* 0x 270 */ -224,137, 69,228,139, 85, 12, 3, 73, 28,139, 69, 8,137, 85,216, /* 0x 280 */ -139, 93,224,139, 85,224,137, 69,220, 49,192,102,131,123, 16, 2, /* 0x 290 */ -137, 77,212,137,203, 15,183, 74, 44, 15,148,192,131,207,255,193, /* 0x 2a0 */ -224, 4,137,202, 49,246,131,192, 34, 74,120, 28,131, 59, 1,117, /* 0x 2b0 */ - 18,139, 83, 8, 57,250,115, 2,137,215, 3, 83, 20, 57,214,115, /* 0x 2c0 */ - 2,137,214,131,195, 32,226,228,137,251,106, 0,129,227, 0,240, /* 0x 2d0 */ -255,255,106,255, 41,222, 80,129,198,255, 15, 0, 0,106, 0,129, /* 0x 2e0 */ -230, 0,240,255,255, 86, 83,232, 55,254,255,255,139, 77,224,141, /* 0x 2f0 */ - 52, 48,131,196, 24, 41,216,102,131,121, 44, 0,137,117,240,137, /* 0x 300 */ - 69,208,199, 69,204, 0, 0, 0, 0, 15,132,218, 1, 0, 0,139, /* 0x 310 */ - 93,212,139, 3,131,248, 6,117, 24,139, 77,208,186, 3, 0, 0, /* 0x 320 */ - 0, 3, 75, 8,139, 69,216,232, 16,255,255,255,233,161, 1, 0, /* 0x 330 */ - 0, 72, 15,133,154, 1, 0, 0,139, 69,212,199, 69,200, 64, 98, /* 0x 340 */ - 81,115,139, 85,212,139, 72, 24,139, 90, 20,131,225, 7,193,225, /* 0x 350 */ - 2,211,109,200,139, 72, 16,139, 69,208, 3, 66, 8,137, 77,232, /* 0x 360 */ -131,101,200, 7,137,194, 1,195,129,226,255, 15, 0, 0,137,199, /* 0x 370 */ -141, 52, 17,139, 77,212,137, 69,236, 41,215,139, 65, 4,137, 93, /* 0x 380 */ -196, 41,208,131,125,220, 0, 80,139, 69,228,116, 3,131,200,255, /* 0x 390 */ -131,125,220, 1, 80, 25,192,131,224,224,131,192, 50,131,125,220, /* 0x 3a0 */ - 0, 80,139, 69,200,116, 3,131,200, 2,131,125,220, 0, 80,137, /* 0x 3b0 */ -240,116, 3,141, 70, 3, 80, 87,232,102,253,255,255,131,196, 24, /* 0x 3c0 */ - 57,199, 15,133,187, 0, 0, 0,131,125,220, 0,116, 31, 49,192, /* 0x 3d0 */ -246, 69,200, 4,116, 6,139, 69,228,131,192, 2, 80,139, 69,220, /* 0x 3e0 */ -255,117,228,141, 85,232,232,114,253,255,255, 88, 90,137,243,247, /* 0x 3f0 */ -219,129,227,255, 15, 0, 0,246, 69,200, 2,137, 93,192,116, 15, /* 0x 400 */ -133,219,141, 4, 55,116, 8,137,217,198, 0, 0, 64,226,250,131, /* 0x 410 */ -125,220, 0,116,120,139, 69,212,131, 56, 1,117, 86,246, 64, 24, /* 0x 420 */ - 1,116, 80,139, 80, 20,139, 88, 8,141, 12, 26, 3, 77,208, 59, /* 0x 430 */ - 80, 16,117, 14,137,200,247,216, 37,255, 15, 0, 0,131,248, 3, /* 0x 440 */ -119, 17,139, 85,212,107, 69,208, 52,131,122, 4, 0,141, 76, 3, /* 0x 450 */ - 12,117, 15,139, 1, 61,205,128, 97,195,116, 6,199, 1,205,128, /* 0x 460 */ - 97,195,133,201,116, 13,139, 69,216, 49,210,131,224,254,232,201, /* 0x 470 */ -253,255,255,137,251,137,241,139, 85,200,106,125, 88,205,128,133, /* 0x 480 */ -192,116, 10,106,127, 91,106, 1, 88,205,128,235,254,139, 85,192, /* 0x 490 */ -141, 4, 22,141, 28, 7, 59, 93,196,115, 30,106, 0,106,255,106, /* 0x 4a0 */ - 50,255,117,200, 41, 93,196,255,117,196, 83,232,115,252,255,255, /* 0x 4b0 */ -131,196, 24, 57,195,116, 27,235,202,131,125,220, 0,116, 19,141, /* 0x 4c0 */ - 78, 3,129,225,255, 15, 0, 0,131,249, 3,119, 5,106, 91, 88, /* 0x 4d0 */ -205,128,139, 77,224,255, 69,204, 15,183, 65, 44,131, 69,212, 32, /* 0x 4e0 */ - 57, 69,204, 15,140, 38,254,255,255,131,125,220, 0,117, 14,139, /* 0x 4f0 */ - 93,228,106, 6, 88,205,128,133,192,116, 20,235,134,139, 69,224, /* 0x 500 */ -102,131,120, 16, 3,116, 8,139, 93,240,106, 45, 88,205,128,131, /* 0x 510 */ -125, 16, 0,116, 8,139, 77,208,139, 85, 16,137, 10,139, 93,224, /* 0x 520 */ -139, 91, 24, 1, 93,208,139, 69,208,141,101,244, 91, 94, 95,201, /* 0x 530 */ -195, 85,137,229, 87, 86, 83,131,236, 24,139,125, 28,106, 0,139, /* 0x 540 */ - 69, 16,141, 87, 52,139,117, 8, 80,139, 93, 32,137, 69,236,137, /* 0x 550 */ - 85,232,141, 69, 32,141, 85, 24,232, 0,252,255,255,139, 69, 12, /* 0x 560 */ - 15,183, 79, 44,186, 5, 0, 0, 0,137, 69, 32,137,240, 41, 93, /* 0x 570 */ - 36,232,198,252,255,255, 15,183, 79, 42,186, 4, 0, 0, 0,137, /* 0x 580 */ -240,232,182,252,255,255,139, 93,232,139, 77, 40,186, 3, 0, 0, /* 0x 590 */ - 0, 3, 75, 8,137,240,131,193, 52,232,158,252,255,255,141, 69, /* 0x 5a0 */ -240,137,250, 80,141, 69, 32, 86, 80,139, 69,236,232,177,252,255, /* 0x 5b0 */ -255,186, 9, 0, 0, 0,137,193,137,195,137,240,232,123,252,255, /* 0x 5c0 */ -255,102,139, 79, 44,131,196, 20, 49,210,102,133,201,116, 94,139, /* 0x 5d0 */ - 69,232,131, 56, 3,117, 74,139, 93,240, 49,201, 3, 88, 8,137, /* 0x 5e0 */ -202,106, 5, 88,205,128,133,192,137,198,120, 21,186, 0, 2, 0, /* 0x 5f0 */ - 0,137,195,137,249,106, 3, 88,205,128, 61, 0, 2, 0, 0,116, /* 0x 600 */ - 10,106,127, 91,106, 1, 88,205,128,235,254,106, 0,137,250,106, /* 0x 610 */ - 0,137,240,106, 0,232, 72,252,255,255,131,196, 12,137,195,235, /* 0x 620 */ - 12, 66, 15,183,193,131, 69,232, 32, 57,194,124,162,141,101,244, /* 0x 630 */ -137,216, 91, 94, 95,201,195 /* 0x 640 */ + 91,195, 85,137,229, 87, 86, 83,131,236, 68,137, 69,228,139, 69, /* 0x 270 */ + 8,137, 85,224,139, 93,224,139, 85, 12,137, 69,220,139, 69,224, /* 0x 280 */ +139, 77, 20,137, 85,216, 3, 91, 28,139, 85,224,137, 77,212,102, /* 0x 290 */ +131,120, 16, 2, 15,183, 74, 44,137, 93,208, 15,148,192,131,207, /* 0x 2a0 */ +255, 15,182,192,137,202,193,224, 4, 49,246,131,192, 34, 74,120, /* 0x 2b0 */ + 28,131, 59, 1,117, 18,139, 83, 8, 57,250,115, 2,137,215, 3, /* 0x 2c0 */ + 83, 20, 57,214,115, 2,137,214,131,195, 32,226,228,137,251,106, /* 0x 2d0 */ + 0,129,227, 0,240,255,255,106,255, 41,222, 80,129,198,255, 15, /* 0x 2e0 */ + 0, 0,106, 0,129,230, 0,240,255,255, 86, 83,232, 50,254,255, /* 0x 2f0 */ +255,139, 77,224,141, 52, 48,131,196, 24, 41,216,102,131,121, 44, /* 0x 300 */ + 0,137,117,240,137, 69,204,199, 69,200, 0, 0, 0, 0, 15,132, /* 0x 310 */ +215, 1, 0, 0,139, 93,208,139, 3,131,248, 6,117, 24,139, 77, /* 0x 320 */ +204,186, 3, 0, 0, 0, 3, 75, 8,139, 69,216,232, 11,255,255, /* 0x 330 */ +255,233,158, 1, 0, 0, 72, 15,133,151, 1, 0, 0,139, 69,208, /* 0x 340 */ +199, 69,196, 64, 98, 81,115,139, 85,208,139, 72, 24,139, 90, 20, /* 0x 350 */ +131,225, 7,193,225, 2,211,109,196,139, 72, 16,139, 69,204, 3, /* 0x 360 */ + 66, 8,137, 77,232,131,101,196, 7,137,194, 1,195,129,226,255, /* 0x 370 */ + 15, 0, 0,137,199,141, 52, 17,139, 77,208,137, 69,236, 41,215, /* 0x 380 */ +139, 65, 4,137, 93,192, 41,208,131,125,220, 0, 80,139, 69,228, /* 0x 390 */ +116, 3,131,200,255,131,125,220, 1, 80, 25,192,131,224,224,131, /* 0x 3a0 */ +192, 50,131,125,220, 0, 80,139, 69,196,116, 3,131,200, 2,131, /* 0x 3b0 */ +125,220, 0, 80,137,240,116, 3,141, 70, 3, 80, 87,232, 97,253, /* 0x 3c0 */ +255,255,131,196, 24, 57,199, 15,133,184, 0, 0, 0,131,125,220, /* 0x 3d0 */ + 0,116, 28,246, 69,196, 4,139, 69,212,117, 2, 49,192, 80,139, /* 0x 3e0 */ + 69,220,255,117,228,141, 85,232,232,112,253,255,255, 88, 90,137, /* 0x 3f0 */ +243,247,219,129,227,255, 15, 0, 0,246, 69,196, 2,137, 93,188, /* 0x 400 */ +116, 15,133,219,141, 4, 55,116, 8,137,217,198, 0, 0, 64,226, /* 0x 410 */ +250,131,125,220, 0,116,120,139, 69,208,131, 56, 1,117, 86,246, /* 0x 420 */ + 64, 24, 1,116, 80,139, 80, 20,139, 88, 8,141, 12, 26, 3, 77, /* 0x 430 */ +204, 59, 80, 16,117, 14,137,200,247,216, 37,255, 15, 0, 0,131, /* 0x 440 */ +248, 3,119, 17,139, 85,208,107, 69,204, 52,131,122, 4, 0,141, /* 0x 450 */ + 76, 3, 12,117, 15,139, 1, 61,205,128, 97,195,116, 6,199, 1, /* 0x 460 */ +205,128, 97,195,133,201,116, 13,139, 69,216, 49,210,131,224,254, /* 0x 470 */ +232,199,253,255,255,137,251,137,241,139, 85,196,106,125, 88,205, /* 0x 480 */ +128,133,192,116, 10,106,127, 91,106, 1, 88,205,128,235,254,139, /* 0x 490 */ + 85,188,141, 4, 22,141, 28, 7, 59, 93,192,115, 30,106, 0,106, /* 0x 4a0 */ +255,106, 50,255,117,196, 41, 93,192,255,117,192, 83,232,113,252, /* 0x 4b0 */ +255,255,131,196, 24, 57,195,116, 27,235,202,131,125,220, 0,116, /* 0x 4c0 */ + 19,141, 78, 3,129,225,255, 15, 0, 0,131,249, 3,119, 5,106, /* 0x 4d0 */ + 91, 88,205,128,139, 77,224,255, 69,200, 15,183, 65, 44,131, 69, /* 0x 4e0 */ +208, 32, 57, 69,200, 15,140, 41,254,255,255,131,125,220, 0,117, /* 0x 4f0 */ + 14,139, 93,228,106, 6, 88,205,128,133,192,116, 20,235,134,139, /* 0x 500 */ + 69,224,102,131,120, 16, 3,116, 8,139, 93,240,106, 45, 88,205, /* 0x 510 */ +128,131,125, 16, 0,116, 8,139, 77,204,139, 85, 16,137, 10,139, /* 0x 520 */ + 93,224,139, 91, 24, 1, 93,204,139, 69,204,141,101,244, 91, 94, /* 0x 530 */ + 95,201,195, 85,137,229, 87, 86, 83,131,236, 28,139,125, 28,106, /* 0x 540 */ + 0,139, 69, 16,141, 87, 52,139,117, 8,137, 69,236,131,192, 2, /* 0x 550 */ +255,117,236,137, 85,228,139, 93, 32,137, 69,232,141, 85, 24,141, /* 0x 560 */ + 69, 32,232,246,251,255,255,139, 69, 12, 15,183, 79, 44,186, 5, /* 0x 570 */ + 0, 0, 0,137, 69, 32,137,240, 41, 93, 36,232,188,252,255,255, /* 0x 580 */ + 15,183, 79, 42,186, 4, 0, 0, 0,137,240,232,172,252,255,255, /* 0x 590 */ +139, 93,228,139, 77, 40,186, 3, 0, 0, 0, 3, 75, 8,137,240, /* 0x 5a0 */ +131,193, 52,232,148,252,255,255,141, 69,240,255,117,232,137,250, /* 0x 5b0 */ + 80,141, 69, 32, 86, 80,139, 69,236,232,164,252,255,255,186, 9, /* 0x 5c0 */ + 0, 0, 0,137,193,137,195,137,240,232,110,252,255,255,102,139, /* 0x 5d0 */ + 79, 44,131,196, 24, 49,210,102,133,201,116, 96,139, 69,228,131, /* 0x 5e0 */ + 56, 3,117, 76,139, 93,240, 49,201, 3, 88, 8,137,202,106, 5, /* 0x 5f0 */ + 88,205,128,133,192,137,198,120, 21,186, 0, 2, 0, 0,137,195, /* 0x 600 */ +137,249,106, 3, 88,205,128, 61, 0, 2, 0, 0,116, 10,106,127, /* 0x 610 */ + 91,106, 1, 88,205,128,235,254,106, 0,137,250,106, 0,137,240, /* 0x 620 */ +106, 0,106, 0,232, 57,252,255,255,131,196, 16,137,195,235, 12, /* 0x 630 */ + 66, 15,183,193,131, 69,228, 32, 57,194,124,160,141,101,244,137, /* 0x 640 */ +216, 91, 94, 95,201,195 /* 0x 650 */ }; diff --git a/src/stub/l_lx_elf.c b/src/stub/l_lx_elf.c index ab0e54d1..ba4ffba3 100644 --- a/src/stub/l_lx_elf.c +++ b/src/stub/l_lx_elf.c @@ -55,9 +55,9 @@ struct Extent { static void -#if (ACC_CC_GNUC >= 0x030300) +#if (ACC_CC_GNUC >= 0x030300) && defined(__i386__) /*{*/ __attribute__((__noinline__, __used__, regparm(3), stdcall)) -#endif +#endif /*}*/ xread(struct Extent *x, char *buf, size_t count) { char *p=x->buf, *q=buf; @@ -96,7 +96,7 @@ do_brk(void *addr) return brk(addr); } -extern char *mmap(void *addr, size_t len, +extern void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset); /************************************************************************* @@ -172,6 +172,7 @@ ERR_LAB } } +#if defined(__i386__) /*{*/ // Create (or find) an escape hatch to use when munmapping ourselves the stub. // Called by do_xmap to create it; remembered in AT_NULL.d_val static void * @@ -204,9 +205,12 @@ make_hatch(Elf32_Phdr const *const phdr, unsigned const reloc) } return hatch; } +#endif /*}*/ static void +#if defined(__i386__) /*{*/ __attribute__((regparm(2), stdcall)) +#endif /*}*/ upx_bzero(char *p, size_t len) { if (len) do { @@ -217,7 +221,9 @@ upx_bzero(char *p, size_t len) static void +#if defined(__i386__) /*{*/ __attribute__((regparm(3), stdcall)) +#endif /*}*/ auxv_up(Elf32_auxv_t *av, unsigned const type, unsigned const value) { if (av && 0==(1&(int)av)) /* PT_INTERP usually inhibits, except for hatch */ @@ -247,7 +253,9 @@ auxv_up(Elf32_auxv_t *av, unsigned const type, unsigned const value) // and mmap that much, to be sure that a kernel using exec-shield-randomize // won't place the first piece in a way that leaves no room for the rest. static unsigned long // returns relocation constant +#if defined(__i386__) /*{*/ __attribute__((regparm(3), stdcall)) +#endif /*}*/ xfind_pages(unsigned mflags, Elf32_Phdr const *phdr, int phnum, char **const p_brk ) @@ -276,10 +284,10 @@ xfind_pages(unsigned mflags, Elf32_Phdr const *phdr, int phnum, static Elf32_Addr // entry address do_xmap(int const fdi, Elf32_Ehdr const *const ehdr, struct Extent *const xi, - Elf32_auxv_t *const av, unsigned *p_reloc) + Elf32_auxv_t *const av, unsigned *p_reloc, f_unfilter *const f_unf) { Elf32_Phdr const *phdr = (Elf32_Phdr const *) (ehdr->e_phoff + - (char const *)ehdr); + (void const *)ehdr); char *v_brk; unsigned const reloc = xfind_pages( ((ET_EXEC==ehdr->e_type) ? MAP_FIXED : 0), phdr, ehdr->e_phnum, &v_brk); @@ -298,15 +306,19 @@ do_xmap(int const fdi, Elf32_Ehdr const *const ehdr, struct Extent *const xi, mlen += frag; addr -= frag; - // Decompressor can overrun the destination by 3 bytes. - if (addr != mmap(addr, mlen + (xi ? 3 : 0), prot | (xi ? PROT_WRITE : 0), + if (addr != mmap(addr, mlen +#if defined(__i386__) /*{*/ + // Decompressor can overrun the destination by 3 bytes. + + (xi ? 3 : 0) +#endif /*}*/ + , prot | (xi ? PROT_WRITE : 0), MAP_FIXED | MAP_PRIVATE | (xi ? MAP_ANONYMOUS : 0), (xi ? -1 : fdi), phdr->p_offset - frag) ) { err_exit(8); } if (xi) { unpackExtent(xi, &xo, (f_expand *)fdi, - ((PROT_EXEC & prot) ? (f_unfilter *)(2+ fdi) : 0)); + ((PROT_EXEC & prot) ? f_unf : 0) ); } // Linux does not fixup the low end, so neither do we. //if (PROT_WRITE & prot) { @@ -317,11 +329,13 @@ do_xmap(int const fdi, Elf32_Ehdr const *const ehdr, struct Extent *const xi, bzero(mlen+addr, frag); // fragment at hi end } if (xi) { +#if defined(__i386__) /*{*/ void *const hatch = make_hatch(phdr, reloc); if (0!=hatch) { /* always update AT_NULL, especially for compressed PT_INTERP */ auxv_up((Elf32_auxv_t *)(~1 & (int)av), AT_NULL, (unsigned)hatch); } +#endif /*}*/ if (0!=mprotect(addr, mlen, prot)) { err_exit(10); ERR_LAB @@ -334,12 +348,14 @@ ERR_LAB err_exit(9); } } +#if defined(__i386__) /*{*/ else if (xi) { // cleanup if decompressor overrun crosses page boundary mlen = ~PAGE_MASK & (3+ mlen); if (mlen<=3) { // page fragment was overrun buffer only munmap(addr, mlen); } } +#endif /*}*/ } if (!xi) { // 2nd call (PT_INTERP); close()+check is smaller here if (0!=close(fdi)) { @@ -369,7 +385,7 @@ void *upx_main( Elf32_auxv_t *const av, unsigned const sz_compressed, f_expand *const f_decompress, - int junk, // %esp from 'pusha' + f_unfilter */*const*/ f_unfilter, struct Extent xo, struct Extent xi, unsigned const volatile dynbase @@ -379,13 +395,13 @@ void *upx_main( Elf32_auxv_t *const av, unsigned const sz_compressed, f_expand *const f_decompress, - int junk, // %esp from 'pusha' + f_unfilter */*const*/ f_unf, struct Extent xo, // {sz_unc, ehdr} for ELF headers struct Extent xi, // {sz_cpr, &b_info} for ELF headers unsigned const volatile dynbase // value+result: compiler must not change ) { - Elf32_Ehdr *const ehdr = (Elf32_Ehdr *)xo.buf; // temp char[MAX_ELF_HDR+OVERHEAD] + Elf32_Ehdr *const ehdr = (Elf32_Ehdr *)(void *)xo.buf; // temp char[MAX_ELF_HDR+OVERHEAD] Elf32_Phdr const *phdr = (Elf32_Phdr const *)(1+ ehdr); Elf32_Addr reloc; Elf32_Addr entry; @@ -393,7 +409,9 @@ void *upx_main( // sizeof(Ehdr+Phdrs), compressed; including b_info header size_t const sz_pckhdrs = xi.size; - (void)junk; +#if defined(__i386__) /*{*/ + f_unf = (f_unfilter *)(2+ (long)f_decompress); +#endif /*}*/ // Uncompress Ehdr and Phdrs. unpackExtent(&xi, &xo, f_decompress, 0); @@ -411,7 +429,7 @@ void *upx_main( // AT_PHDR.a_un.a_val is set again by do_xmap if PT_PHDR is present. // This is necessary for ET_DYN if|when we override a prelink address. - entry = do_xmap((int)f_decompress, ehdr, &xi, av, &reloc); + entry = do_xmap((int)f_decompress, ehdr, &xi, av, &reloc, f_unf); auxv_up(av, AT_ENTRY , entry); // might not be necessary? { // Map PT_INTERP program interpreter @@ -425,7 +443,7 @@ void *upx_main( ERR_LAB err_exit(19); } - entry = do_xmap(fdi, ehdr, 0, 0, 0); + entry = do_xmap(fdi, ehdr, 0, 0, 0, 0); break; } } diff --git a/src/stub/l_lx_elf32arm.S b/src/stub/l_lx_elf32arm.S new file mode 100644 index 00000000..80b0f34d --- /dev/null +++ b/src/stub/l_lx_elf32arm.S @@ -0,0 +1,135 @@ +/* l_lx_elf32arm.S -- Linux program entry point & decompressor (Elf binary) +* +* This file is part of the UPX executable compressor. +* +* Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer +* Copyright (C) 1996-2004 Laszlo Molnar +* Copyright (C) 2000-2006 John F. Reiser +* All Rights Reserved. +* +* UPX and the UCL library are free software; you can redistribute them +* and/or modify them under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; see the file COPYING. +* If not, write to the Free Software Foundation, Inc., +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* Markus F.X.J. Oberhumer Laszlo Molnar +* +* +* John F. Reiser +* +*/ + +sz_Elf32_Ehdr = 13*4 +sz_Elf32_Phdr = 8*4 + +sz_b_info= 12 + sz_unc= 0 + sz_cpr= 4 + b_method= 8 + +PROT_READ= 1 +PROT_WRITE= 2 +PROT_EXEC= 4 + +MAP_PRIVATE= 2 +MAP_FIXED= 0x10 +MAP_ANONYMOUS= 0x20 + +PAGE_SHIFT= 12 +PAGE_SIZE = -(~0< + */ + + +#define LINUX_ELF32ARM_LOADER_SIZE 544 +#define LINUX_ELF32ARM_LOADER_ADLER32 0xfef0e8e2 +#define LINUX_ELF32ARM_LOADER_CRC32 0xa0cc8839 + +unsigned char linux_elf32arm_loader[544] = { + 84,192,143,226, 3, 5,188,232, 7, 32,160,227, 50, 48,160,227, /* 0x 0 */ + 0, 64,224,227,192, 0,144,239, 1, 10,112,227, 92, 0, 0, 42, /* 0x 10 */ + 0,144,160,225,255, 0,184,232, 1,160, 90,226,255, 0,169,232, /* 0x 20 */ +251,255,255, 26, 9,224,160,225, 8,176, 73,224,192, 7,188,232, /* 0x 30 */ + 4,208, 77,226, 13, 48,160,225, 14, 32,160,225,208, 17,159,229, /* 0x 40 */ +117, 15,143,226, 11, 80,140,224, 11,240,140,224, 65, 68, 82, 77, /* 0x 50 */ + 76, 69, 78, 77, 65, 68, 82, 67, 67, 78, 84, 67, 65, 68, 82, 85, /* 0x 60 */ + 76, 69, 78, 85, 74, 77, 80, 85, 76, 69, 78, 88, 65, 68, 82, 88, /* 0x 70 */ +252, 64, 45,233, 0,112,129,224, 0, 80,224,227, 2, 65,160,227, /* 0x 80 */ + 10, 0, 0,234, 24, 0,189,232, 7, 0, 64,224, 3, 32, 66,224, /* 0x 90 */ + 0, 32,132,229,240,128,189,232, 1, 64,208,228, 4, 64,164,224, /* 0x a0 */ + 4, 76,176,225, 14,240,160,225, 1, 48,208,228, 1, 48,194,228, /* 0x b0 */ + 4, 64,148,224,247,255,255, 11,250,255,255, 42, 1, 16,160,227, /* 0x c0 */ + 3, 0, 0,234, 1, 16, 65,226, 4, 64,148,224,241,255,255, 11, /* 0x d0 */ + 1, 16,161,224, 4, 64,148,224,238,255,255, 11, 1, 16,161,224, /* 0x e0 */ + 4, 64,148,224,235,255,255, 11,245,255,255, 58, 3, 48, 81,226, /* 0x f0 */ + 0, 16,160,227, 6, 0, 0, 58, 1, 80,208,228, 3, 84,133,225, /* 0x 100 */ + 5, 80,240,225,222,255,255, 10,197, 80,176,225, 15, 0, 0, 42, /* 0x 110 */ + 2, 0, 0,234, 4, 64,148,224,222,255,255, 11, 11, 0, 0, 42, /* 0x 120 */ + 1, 16,160,227, 4, 64,148,224,218,255,255, 11, 7, 0, 0, 42, /* 0x 130 */ + 4, 64,148,224,215,255,255, 11, 1, 16,161,224, 4, 64,148,224, /* 0x 140 */ +212,255,255, 11,249,255,255, 58, 4, 16,129,226, 3, 0, 0,234, /* 0x 150 */ + 4, 64,148,224,207,255,255, 11, 1, 16,161,224, 2, 16,129,226, /* 0x 160 */ + 5, 12,117,227, 0, 0, 0, 42, 1, 16,129,226, 0, 48,210,229, /* 0x 170 */ + 5, 48,210,231, 1, 48,194,228, 1, 16, 81,226,251,255,255, 26, /* 0x 180 */ +202,255,255,234, 30, 32,160,227, 96, 16,143,226, 2, 0,160,227, /* 0x 190 */ + 4, 0,144,239,127, 0,160,227, 1, 0,144,239,252,255,255,234, /* 0x 1a0 */ + 10, 36, 73,100, 58, 32, 85, 80, 88, 32, 40, 67, 41, 32, 49, 57, /* 0x 1b0 */ + 57, 54, 45, 50, 48, 48, 54, 32,116,104,101, 32, 85, 80, 88, 32, /* 0x 1c0 */ + 84,101, 97,109, 46, 32, 65,108,108, 32, 82,105,103,104,116,115, /* 0x 1d0 */ + 32, 82,101,115,101,114,118,101,100, 46, 32,104,116,116,112, 58, /* 0x 1e0 */ + 47, 47,117,112,120, 46,115,102, 46,110,101,116, 32, 36, 10, 0, /* 0x 1f0 */ + 80, 82, 79, 84, 95, 69, 88, 69, 67,124, 80, 82, 79, 84, 95, 87, /* 0x 200 */ + 82, 73, 84, 69, 32,102, 97,105,108,101,100, 46, 10, 0, 0, 0 /* 0x 210 */ +}; diff --git a/src/stub/l_lx_elf32arm.lds b/src/stub/l_lx_elf32arm.lds new file mode 100644 index 00000000..8d8d4173 --- /dev/null +++ b/src/stub/l_lx_elf32arm.lds @@ -0,0 +1,49 @@ +/* l_lx_elf32arm.lds -- + + This file is part of the UPX executable compressor. + + Copyright (C) 2000-2006 John F. Reiser + All Rights Reserved. + + UPX and the UCL library are free software; you can redistribute them + and/or modify them under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Markus F.X.J. Oberhumer Laszlo Molnar + + + John F. Reiser + + */ + + +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") +OUTPUT_ARCH(arm) +/*ENTRY(_start)*/ +PHDRS +{ + text PT_LOAD FILEHDR PHDRS ; + data PT_LOAD ; /* for setting brk(0) */ +} +SECTIONS +{ + /* 0x00004000: below 0x00008000 usual, enough to avoid icache sync */ + . = 0x00008000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */ + .text : { + *(.text) + *(.data) + } : text + .data : { + } : data +} diff --git a/src/stub/l_lx_elf86.asm b/src/stub/l_lx_elf86.asm index ae77429d..7a6749fe 100644 --- a/src/stub/l_lx_elf86.asm +++ b/src/stub/l_lx_elf86.asm @@ -45,7 +45,7 @@ GLOBAL _start ;__LEXEC000__ _start: -;;;; int3 + int3 ;; How to debug this code: Uncomment the 'int3' breakpoint instruction above. ;; Build the stubs and upx. Compress a testcase, such as a copy of /bin/date. ;; Invoke gdb, and give a 'run' command. Define a single-step macro such as diff --git a/src/stub/l_lx_elf86.h b/src/stub/l_lx_elf86.h index 34822e1d..561e1c9c 100644 --- a/src/stub/l_lx_elf86.h +++ b/src/stub/l_lx_elf86.h @@ -1,4 +1,4 @@ -/* l_lx_elf86.h -- created from l_lx_elf86.bin, 5353 (0x14e9) bytes +/* l_lx_elf86.h -- created from l_lx_elf86.bin, 5357 (0x14ed) bytes This file is part of the UPX executable compressor. @@ -27,344 +27,344 @@ */ -#define LINUX_I386ELF_LOADER_SIZE 5353 -#define LINUX_I386ELF_LOADER_ADLER32 0x73ead289 -#define LINUX_I386ELF_LOADER_CRC32 0x30e5b9ec +#define LINUX_I386ELF_LOADER_SIZE 5357 +#define LINUX_I386ELF_LOADER_ADLER32 0x5212d453 +#define LINUX_I386ELF_LOADER_CRC32 0x668bbbc4 -unsigned char linux_i386elf_loader[5353] = { -232, 0, 0, 0, 0, 96,106, 63,139,116, 36, 40,139,124, 36, 48, /* 0x 0 */ -131,205,255,235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1,219, /* 0x 10 */ -117, 7,139, 30,131,238,252, 17,219,114, 0, 49,192, 64,138, 7, /* 0x 20 */ -114, 0,184, 1, 0, 0, 0, 1,219,117, 7,139, 30,131,238,252, /* 0x 30 */ - 17,219, 17,192, 1,219,117, 7,139, 30,131,238,252, 17,219,115, /* 0x 40 */ - 0, 1,219,115, 0,117, 9,139, 30,131,238,252, 17,219,115, 0, /* 0x 50 */ - 49,201,131,232, 3,114, 13,193,224, 8,138, 6, 70,131,240,255, /* 0x 60 */ -116, 0,137,197, 1,219,117, 7,139, 30,131,238,252, 17,219, 17, /* 0x 70 */ -201, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201,117, 0, /* 0x 80 */ - 65, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201, 1,219, /* 0x 90 */ -117, 7,139, 30,131,238,252, 17,219,115, 0, 1,219,115, 0,117, /* 0x a0 */ - 9,139, 30,131,238,252, 17,219,115, 0, 65, 65,131,193, 2,129, /* 0x b0 */ -253, 0,243,255,255,131,209, 1, 86,141, 52, 47,243,164, 94,233, /* 0x c0 */ - 0, 0, 0, 0,141, 20, 47,131,253,252,138, 4, 15,118, 0,138, /* 0x d0 */ - 2, 66,136, 7, 71, 73,117,247,233, 0, 0, 0, 0,139, 2,131, /* 0x e0 */ -194, 4,137, 7,131,199, 4,131,233, 4,119,241, 1,207,233, 0, /* 0x f0 */ - 0, 0, 0,235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1,219, /* 0x 100 */ -117, 7,139, 30,131,238,252, 17,219,114, 0, 49,192, 64,138, 7, /* 0x 110 */ -114, 0,184, 1, 0, 0, 0, 1,219,117, 7,139, 30,131,238,252, /* 0x 120 */ - 17,219, 17,192, 1,219,117, 7,139, 30,131,238,252, 17,219,114, /* 0x 130 */ - 0, 1,219,115, 11,117, 0,139, 30,131,238,252, 17,219,114, 0, /* 0x 140 */ - 72, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,192,235, 0, /* 0x 150 */ - 49,201,131,232, 3,114, 17,193,224, 8,138, 6, 70,131,240,255, /* 0x 160 */ -116, 0,209,248,137,197,235, 11, 1,219,117, 7,139, 30,131,238, /* 0x 170 */ -252, 17,219, 17,201, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 180 */ - 17,201,117, 0, 65, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 190 */ - 17,201, 1,219,117, 7,139, 30,131,238,252, 17,219,115, 0, 1, /* 0x 1a0 */ -219,115, 0,117, 9,139, 30,131,238,252, 17,219,115, 0, 65, 65, /* 0x 1b0 */ -131,193, 2,129,253, 0,251,255,255,131,209, 1, 86,141, 52, 47, /* 0x 1c0 */ -243,164, 94,233, 0, 0, 0, 0,141, 20, 47,131,253,252,138, 4, /* 0x 1d0 */ - 15,118, 0,138, 2, 66,136, 7, 71, 73,117,247,233, 0, 0, 0, /* 0x 1e0 */ - 0,139, 2,131,194, 4,137, 7,131,199, 4,131,233, 4,119,241, /* 0x 1f0 */ - 1,207,233, 0, 0, 0, 0,235, 0,164,235, 0,138, 6, 70,136, /* 0x 200 */ - 7, 71, 1,219,117, 7,139, 30,131,238,252, 17,219,114, 0, 49, /* 0x 210 */ -192, 64,138, 7,114, 0,184, 1, 0, 0, 0, 1,219,117, 7,139, /* 0x 220 */ - 30,131,238,252, 17,219, 17,192, 1,219,117, 7,139, 30,131,238, /* 0x 230 */ -252, 17,219,114, 0, 1,219,115, 11,117, 0,139, 30,131,238,252, /* 0x 240 */ - 17,219,114, 0, 72, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 250 */ - 17,192,235, 0, 1,219,117, 7,139, 30,131,238,252, 17,219, 17, /* 0x 260 */ -201,235, 0, 49,201,131,232, 3,114, 17,193,224, 8,138, 6, 70, /* 0x 270 */ -131,240,255,116, 0,209,248,137,197,235, 11, 1,219,117, 7,139, /* 0x 280 */ - 30,131,238,252, 17,219,114,204, 65, 1,219,117, 7,139, 30,131, /* 0x 290 */ -238,252, 17,219,114,190, 1,219,117, 7,139, 30,131,238,252, 17, /* 0x 2a0 */ -219, 17,201, 1,219,117, 7,139, 30,131,238,252, 17,219,115, 0, /* 0x 2b0 */ - 1,219,115, 0,117, 9,139, 30,131,238,252, 17,219,115, 0, 65, /* 0x 2c0 */ - 65,131,193, 2,129,253, 0,251,255,255,131,209, 2, 86,141, 52, /* 0x 2d0 */ - 47,243,164, 94,233, 0, 0, 0, 0,141, 20, 47,131,253,252,138, /* 0x 2e0 */ - 4, 15,118, 0,138, 2, 66,136, 7, 71, 73,117,247,233, 0, 0, /* 0x 2f0 */ - 0, 0,139, 2,131,194, 4,137, 7,131,199, 4,131,233, 4,119, /* 0x 300 */ -241, 1,207,233, 0, 0, 0, 0,185, 84, 69, 88, 76,138, 7, 71, /* 0x 310 */ - 44,232, 60, 1,119,247,128, 63, 63,117, 0,139, 7,138, 95, 4, /* 0x 320 */ -102,193,232, 8,134,196,193,192, 16,134,196, 41,248,128,235,232, /* 0x 330 */ -137, 7,131,199, 5,136,216,226, 0,185, 84, 69, 88, 76,176,232, /* 0x 340 */ -176,233,242,174,117, 0,128, 63, 63,117, 0,139, 7,102,193,232, /* 0x 350 */ - 8,134,196,193,192, 16,134,196, 41,248,171,235, 0,139, 84, 36, /* 0x 360 */ - 40, 3, 84, 36, 44, 57,214,116, 1, 72, 43,124, 36, 48,139, 84, /* 0x 370 */ - 36, 52,137, 58, 90,137, 68, 36, 28, 97,195,235, 0, 90, 88, 89, /* 0x 380 */ -151, 96, 49,219,187, 78, 77, 82, 85,106, 15, 88,138,100, 36, 32, /* 0x 390 */ -106, 15, 91,138,124, 36, 32,138, 84, 36, 32,233, 0, 0, 0, 0, /* 0x 3a0 */ - 15,183, 47, 43,110, 12, 41,221,117, 0,131,237, 1,115, 0,136, /* 0x 3b0 */ - 95,255, 73,136, 7, 71,139, 7,156,102,193,232, 8,193,192, 16, /* 0x 3c0 */ -134,196,157,115, 0,176, 0, 15,200,115, 0,209,232,115, 0,254, /* 0x 3d0 */ -203, 75, 35, 30,125, 2, 3, 30,137, 4,156,235, 0,141, 20, 24, /* 0x 3e0 */ - 15,182,210, 35, 22, 59, 22,114, 2, 43, 22,139, 4,148,254,203, /* 0x 3f0 */ - 75, 35, 30,125, 2, 3, 30,139, 44,156,133,237,117, 0, 80,139, /* 0x 400 */ - 70, 4,254,200, 72, 35, 6,125, 2, 3, 6, 49,237,137, 70, 4, /* 0x 410 */ -135,108,132, 4, 88,137, 44,148,137, 4,156, 41,248,131,233, 4, /* 0x 420 */ - 3, 70, 16, 1,240,137, 7,131,199, 4,235, 0,235, 0, 80,176, /* 0x 430 */ -233,176,232, 80,106, 0, 83,137,230, 94,137,218,178,233,178,232, /* 0x 440 */ - 67,106, 0,254,203, 75,117, 0, 15,183, 7,131,199, 1, 60,128, /* 0x 450 */ -114, 4, 60,143,118, 0, 41,208, 43, 70, 8,131,232, 2,116, 0, /* 0x 460 */ -131,232, 1,114, 0,115, 0,122, 0,123, 0,248,235, 0,131,233, /* 0x 470 */ - 1,127, 0,137,231,185, 4, 1, 0, 0,139, 14,131,193, 5,139, /* 0x 480 */ - 14,131,193, 4, 49,192,243,171,137,252, 86, 97,151, 81, 80, 82, /* 0x 490 */ -195,137,254,235, 0,138, 7,131,199, 1, 60,128,114, 10, 60,143, /* 0x 4a0 */ -119, 6,128,127,254, 15,116, 0, 44,232, 60, 1,119, 0, 56, 23, /* 0x 4b0 */ -117, 0,139, 7,102,193,232, 8,193,192, 16,134,196, 41,248, 1, /* 0x 4c0 */ -240,137, 7,131,199, 4,131,233, 4,138, 7,131,199, 1,226, 0, /* 0x 4d0 */ -131,233, 1,127, 0, 97,195,106, 29, 90,232, 29, 0, 0, 0, 80, /* 0x 4e0 */ - 82, 79, 84, 95, 69, 88, 69, 67,124, 80, 82, 79, 84, 95, 87, 82, /* 0x 4f0 */ - 73, 84, 69, 32,102, 97,105,108,101,100, 46, 10, 89,106, 2, 91, /* 0x 500 */ -106, 4, 88,205,128,179,127,106, 1, 88,205,128, 94,141, 69,247, /* 0x 510 */ - 43, 0,137,194, 3, 64, 72, 5,255, 15, 0, 0, 37, 0,240,255, /* 0x 520 */ -255, 80, 49,201,106,255,106, 50,181, 16,106, 7, 81, 80,137,227, /* 0x 530 */ -106, 90, 88,205,128,133,192,120,158,146,147,252,173, 80, 84, 82, /* 0x 540 */ -173, 80,173, 86,255,213,131,196, 40,195, 93,232,188,255,255,255, /* 0x 550 */ - 76, 69, 88, 69, 67, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 560 */ - 0, 5, 0, 0, 0, 76, 69, 88, 69, 67, 48, 50, 48, 0,115, 0, /* 0x 570 */ - 0, 0, 76, 69, 88, 69, 67, 48, 48, 57, 0, 5, 0, 0, 0, 76, /* 0x 580 */ - 69, 88, 69, 67, 48, 49, 48, 0, 5, 0, 0, 0, 78, 50, 66, 83, /* 0x 590 */ - 77, 65, 49, 48, 0, 19, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, /* 0x 5a0 */ - 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, /* 0x 5b0 */ - 66, 70, 65, 83, 49, 48, 0, 22, 0, 0, 0, 0, 0, 0, 0, 24, /* 0x 5c0 */ - 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, /* 0x 5d0 */ - 78, 50, 66, 70, 65, 83, 49, 49, 0, 24, 0, 0, 0, 78, 50, 66, /* 0x 5e0 */ - 68, 69, 67, 49, 48, 0, 30, 0, 0, 0, 78, 50, 66, 83, 77, 65, /* 0x 5f0 */ - 50, 48, 0, 41, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 78, /* 0x 600 */ - 50, 66, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 66, 70, /* 0x 610 */ - 65, 83, 50, 48, 0, 46, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, /* 0x 620 */ - 0, 78, 50, 66, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, /* 0x 630 */ - 66, 68, 69, 67, 50, 48, 0, 55, 0, 0, 0, 78, 50, 66, 83, 77, /* 0x 640 */ - 65, 51, 48, 0, 68, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, /* 0x 650 */ - 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, /* 0x 660 */ - 70, 65, 83, 51, 48, 0, 81, 0, 0, 0, 0, 0, 0, 0, 85, 0, /* 0x 670 */ - 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, /* 0x 680 */ - 0, 0, 0, 96, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, /* 0x 690 */ - 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 96, 0, 0, /* 0x 6a0 */ - 0, 0, 0, 0, 0,114, 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, /* 0x 6b0 */ - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 0, 0, 0, 78, 50, /* 0x 6c0 */ - 66, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 78, 50, 66, 83, 77, /* 0x 6d0 */ - 65, 52, 48, 0,158, 0, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, /* 0x 6e0 */ - 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, /* 0x 6f0 */ - 70, 65, 83, 52, 48, 0,171, 0, 0, 0, 0, 0, 0, 0,175, 0, /* 0x 700 */ - 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 0, /* 0x 710 */ - 0, 0, 0,186, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, /* 0x 720 */ - 49, 0, 0, 0, 78, 50, 66, 68, 85, 77, 77, 49, 0,186, 0, 0, /* 0x 730 */ - 0, 78, 50, 66, 83, 77, 65, 53, 48, 0,186, 0, 0, 0, 78, 50, /* 0x 740 */ - 66, 70, 65, 83, 53, 48, 0,188, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 750 */ - 67, 53, 48, 0,191, 0, 0, 0, 78, 50, 66, 83, 77, 65, 54, 48, /* 0x 760 */ - 0,200, 0, 0, 0, 0, 0, 0, 0,212, 0, 0, 0, 78, 50, 66, /* 0x 770 */ - 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, /* 0x 780 */ - 54, 48, 0,212, 0, 0, 0, 0, 0, 0, 0,223, 0, 0, 0, 78, /* 0x 790 */ - 50, 66, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 7a0 */ -237, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, /* 0x 7b0 */ - 0, 78, 50, 66, 70, 65, 83, 54, 49, 0,237, 0, 0, 0, 0, 0, /* 0x 7c0 */ - 0, 0, 3, 1, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, /* 0x 7d0 */ - 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, 48, 0, 3, 1, 0, 0, /* 0x 7e0 */ - 78, 82, 86, 50, 66, 69, 78, 68, 0, 3, 1, 0, 0, 78, 50, 68, /* 0x 7f0 */ - 83, 77, 65, 49, 48, 0, 3, 1, 0, 0, 0, 0, 0, 0, 5, 1, /* 0x 800 */ - 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, /* 0x 810 */ - 50, 68, 70, 65, 83, 49, 48, 0, 6, 1, 0, 0, 0, 0, 0, 0, /* 0x 820 */ - 8, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, /* 0x 830 */ - 0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 8, 1, 0, 0, 78, 50, /* 0x 840 */ - 68, 68, 69, 67, 49, 48, 0, 14, 1, 0, 0, 78, 50, 68, 83, 77, /* 0x 850 */ - 65, 50, 48, 0, 25, 1, 0, 0, 0, 0, 0, 0, 27, 1, 0, 0, /* 0x 860 */ - 78, 50, 68, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 68, /* 0x 870 */ - 70, 65, 83, 50, 48, 0, 30, 1, 0, 0, 0, 0, 0, 0, 34, 1, /* 0x 880 */ - 0, 0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, /* 0x 890 */ - 50, 68, 68, 69, 67, 50, 48, 0, 39, 1, 0, 0, 78, 50, 68, 83, /* 0x 8a0 */ - 77, 65, 51, 48, 0, 52, 1, 0, 0, 0, 0, 0, 0, 65, 1, 0, /* 0x 8b0 */ - 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, /* 0x 8c0 */ - 68, 70, 65, 83, 51, 48, 0, 65, 1, 0, 0, 0, 0, 0, 0, 71, /* 0x 8d0 */ - 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, /* 0x 8e0 */ - 0, 0, 0, 0, 80, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, /* 0x 8f0 */ - 0, 16, 0, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 80, 1, /* 0x 900 */ - 0, 0, 0, 0, 0, 0, 96, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x 910 */ - 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,114, 1, 0, 0, 78, /* 0x 920 */ - 50, 68, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 930 */ -148, 1, 0, 0, 78, 50, 68, 68, 69, 67, 53, 48, 0, 0, 0, 0, /* 0x 940 */ - 0, 78, 50, 68, 83, 77, 65, 52, 48, 0,162, 1, 0, 0, 0, 0, /* 0x 950 */ - 0, 0,175, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, /* 0x 960 */ - 0, 0, 0, 78, 50, 68, 70, 65, 83, 52, 48, 0,175, 1, 0, 0, /* 0x 970 */ - 0, 0, 0, 0,179, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, /* 0x 980 */ - 0, 69, 0, 0, 0, 0, 0, 0, 0,190, 1, 0, 0, 78, 50, 68, /* 0x 990 */ - 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 78, 50, 68, 68, 85, 77, /* 0x 9a0 */ - 77, 49, 0,190, 1, 0, 0, 78, 50, 68, 83, 77, 65, 53, 48, 0, /* 0x 9b0 */ -190, 1, 0, 0, 78, 50, 68, 70, 65, 83, 53, 48, 0,192, 1, 0, /* 0x 9c0 */ - 0, 78, 50, 68, 68, 69, 67, 53, 48, 0,195, 1, 0, 0, 78, 50, /* 0x 9d0 */ - 68, 83, 77, 65, 54, 48, 0,204, 1, 0, 0, 0, 0, 0, 0,216, /* 0x 9e0 */ - 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, /* 0x 9f0 */ - 78, 50, 68, 70, 65, 83, 54, 48, 0,216, 1, 0, 0, 0, 0, 0, /* 0x a00 */ - 0,227, 1, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0, 0, 0, /* 0x a10 */ - 0, 0, 0, 0, 0, 0,241, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x a20 */ - 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0, /* 0x a30 */ -241, 1, 0, 0, 0, 0, 0, 0, 7, 2, 0, 0, 78, 50, 68, 68, /* 0x a40 */ - 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, 67, 54, /* 0x a50 */ - 48, 0, 7, 2, 0, 0, 78, 82, 86, 50, 68, 69, 78, 68, 0, 7, /* 0x a60 */ - 2, 0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 7, 2, 0, 0, /* 0x a70 */ - 0, 0, 0, 0, 9, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, /* 0x a80 */ - 0, 4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 48, 0, 10, 2, /* 0x a90 */ - 0, 0, 0, 0, 0, 0, 12, 2, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x aa0 */ - 49, 48, 0, 4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, /* 0x ab0 */ - 12, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 18, 2, 0, /* 0x ac0 */ - 0, 78, 50, 69, 83, 77, 65, 50, 48, 0, 29, 2, 0, 0, 0, 0, /* 0x ad0 */ - 0, 0, 31, 2, 0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 2, /* 0x ae0 */ - 0, 0, 0, 78, 50, 69, 70, 65, 83, 50, 48, 0, 34, 2, 0, 0, /* 0x af0 */ - 0, 0, 0, 0, 38, 2, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, /* 0x b00 */ - 0, 0, 0, 0, 0, 78, 50, 69, 68, 69, 67, 50, 48, 0, 43, 2, /* 0x b10 */ - 0, 0, 78, 50, 69, 83, 77, 65, 51, 48, 0, 56, 2, 0, 0, 0, /* 0x b20 */ - 0, 0, 0, 69, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, /* 0x b30 */ - 31, 0, 0, 0, 78, 50, 69, 70, 65, 83, 51, 48, 0, 69, 2, 0, /* 0x b40 */ - 0, 0, 0, 0, 0, 75, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, /* 0x b50 */ - 48, 0, 31, 0, 0, 0, 0, 0, 0, 0, 84, 2, 0, 0, 78, 50, /* 0x b60 */ - 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 68, 69, /* 0x b70 */ - 67, 51, 48, 0, 84, 2, 0, 0, 0, 0, 0, 0,100, 2, 0, 0, /* 0x b80 */ - 78, 50, 69, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x b90 */ - 0,115, 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0, 0, 0, /* 0x ba0 */ - 0, 0, 0, 0, 0, 0,133, 2, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x bb0 */ - 54, 48, 0, 0, 0, 0, 0, 78, 50, 69, 83, 77, 65, 52, 48, 0, /* 0x bc0 */ -179, 2, 0, 0, 0, 0, 0, 0,192, 2, 0, 0, 78, 50, 69, 68, /* 0x bd0 */ - 69, 67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, 70, 65, 83, 52, /* 0x be0 */ - 48, 0,192, 2, 0, 0, 0, 0, 0, 0,196, 2, 0, 0, 78, 50, /* 0x bf0 */ - 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 0, 0, 0, 0,207, /* 0x c00 */ - 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, /* 0x c10 */ - 78, 50, 69, 68, 85, 77, 77, 49, 0,207, 2, 0, 0, 78, 50, 69, /* 0x c20 */ - 83, 77, 65, 53, 48, 0,207, 2, 0, 0, 78, 50, 69, 70, 65, 83, /* 0x c30 */ - 53, 48, 0,209, 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0, /* 0x c40 */ -212, 2, 0, 0, 78, 50, 69, 83, 77, 65, 54, 48, 0,221, 2, 0, /* 0x c50 */ - 0, 0, 0, 0, 0,233, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, /* 0x c60 */ - 48, 0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, 54, 48, 0,233, /* 0x c70 */ - 2, 0, 0, 0, 0, 0, 0,244, 2, 0, 0, 78, 50, 69, 70, 65, /* 0x c80 */ - 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, /* 0x c90 */ - 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, /* 0x ca0 */ - 70, 65, 83, 54, 49, 0, 2, 3, 0, 0, 0, 0, 0, 0, 24, 3, /* 0x cb0 */ - 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, /* 0x cc0 */ - 50, 69, 68, 69, 67, 54, 48, 0, 24, 3, 0, 0, 78, 82, 86, 50, /* 0x cd0 */ - 69, 69, 78, 68, 0, 24, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, /* 0x ce0 */ - 48, 0, 24, 3, 0, 0, 67, 84, 67, 76, 69, 86, 69, 49, 0, 38, /* 0x cf0 */ - 3, 0, 0, 0, 0, 0, 0, 43, 3, 0, 0, 67, 65, 76, 76, 84, /* 0x d00 */ - 82, 48, 48, 0, 5, 0, 0, 0, 67, 65, 76, 76, 84, 82, 48, 49, /* 0x d10 */ - 0, 43, 3, 0, 0, 67, 84, 68, 85, 77, 77, 89, 49, 0, 48, 3, /* 0x d20 */ - 0, 0, 67, 84, 66, 83, 72, 82, 48, 49, 0, 48, 3, 0, 0, 67, /* 0x d30 */ - 84, 66, 82, 79, 82, 48, 49, 0, 52, 3, 0, 0, 67, 84, 66, 83, /* 0x d40 */ - 87, 65, 48, 49, 0, 54, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, /* 0x d50 */ - 50, 0, 59, 3, 0, 0, 0, 0, 0, 0, 73, 3, 0, 0, 67, 65, /* 0x d60 */ - 76, 76, 84, 82, 48, 48, 0, 10, 0, 0, 0, 67, 65, 76, 76, 84, /* 0x d70 */ - 82, 49, 48, 0, 73, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, 56, /* 0x d80 */ - 0, 78, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, 57, 0, 80, 3, /* 0x d90 */ - 0, 0, 67, 65, 76, 76, 84, 82, 49, 49, 0, 82, 3, 0, 0, 0, /* 0x da0 */ - 0, 0, 0, 86, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, /* 0x db0 */ - 5, 0, 0, 0, 67, 84, 67, 76, 69, 86, 69, 50, 0, 86, 3, 0, /* 0x dc0 */ - 0, 0, 0, 0, 0, 91, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, /* 0x dd0 */ - 49, 0, 0, 0, 0, 0, 67, 65, 76, 76, 84, 82, 49, 50, 0, 91, /* 0x de0 */ - 3, 0, 0, 67, 84, 68, 85, 77, 77, 89, 50, 0, 93, 3, 0, 0, /* 0x df0 */ - 67, 84, 66, 83, 72, 82, 49, 49, 0, 93, 3, 0, 0, 67, 84, 66, /* 0x e00 */ - 82, 79, 82, 49, 49, 0, 97, 3, 0, 0, 67, 84, 66, 83, 87, 65, /* 0x e10 */ - 49, 49, 0, 99, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, /* 0x e20 */ -104, 3, 0, 0, 0, 0, 0, 0,109, 3, 0, 0, 67, 65, 76, 76, /* 0x e30 */ - 84, 82, 49, 48, 0, 5, 0, 0, 0, 67, 84, 84, 72, 69, 69, 78, /* 0x e40 */ - 68, 0,109, 3, 0, 0, 76, 69, 88, 69, 67, 48, 49, 53, 0,109, /* 0x e50 */ - 3, 0, 0, 76, 88, 85, 78, 70, 48, 48, 48, 0,139, 3, 0, 0, /* 0x e60 */ - 0, 0, 0, 0,141, 3, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, /* 0x e70 */ - 0, 5, 0, 0, 0, 76, 88, 85, 78, 70, 48, 48, 50, 0,141, 3, /* 0x e80 */ - 0, 0, 77, 82, 85, 66, 89, 84, 69, 48, 0,146, 3, 0, 0, 76, /* 0x e90 */ - 88, 77, 82, 85, 48, 48, 53, 0,148, 3, 0, 0, 76, 88, 77, 82, /* 0x ea0 */ - 85, 48, 48, 54, 0,153, 3, 0, 0, 76, 88, 77, 82, 85, 48, 48, /* 0x eb0 */ - 55, 0,160, 3, 0, 0, 76, 88, 85, 78, 70, 48, 48, 56, 0,167, /* 0x ec0 */ - 3, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, 0,171, 3, 0, 0, /* 0x ed0 */ - 0, 0, 0, 0,176, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, /* 0x ee0 */ - 0, 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0,176, 3, /* 0x ef0 */ - 0, 0, 76, 88, 77, 82, 85, 48, 52, 53, 0,179, 3, 0, 0, 76, /* 0x f00 */ - 88, 77, 82, 85, 48, 52, 54, 0,182, 3, 0, 0, 76, 88, 74, 67, /* 0x f10 */ - 67, 48, 50, 48, 0,184, 3, 0, 0, 0, 0, 0, 0,186, 3, 0, /* 0x f20 */ - 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, /* 0x f30 */ - 74, 67, 67, 48, 50, 49, 0,186, 3, 0, 0, 0, 0, 0, 0,191, /* 0x f40 */ - 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, /* 0x f50 */ - 76, 88, 74, 67, 67, 48, 50, 51, 0,191, 3, 0, 0, 76, 88, 85, /* 0x f60 */ - 78, 70, 48, 51, 55, 0,198, 3, 0, 0, 76, 88, 85, 78, 70, 51, /* 0x f70 */ - 56, 54, 0,200, 3, 0, 0, 76, 88, 85, 78, 70, 51, 56, 55, 0, /* 0x f80 */ -201, 3, 0, 0, 76, 88, 85, 78, 70, 51, 56, 56, 0,210, 3, 0, /* 0x f90 */ - 0, 0, 0, 0, 0,213, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, /* 0x fa0 */ - 48, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 52, 56, 54, 0,213, /* 0x fb0 */ - 3, 0, 0, 76, 88, 85, 78, 70, 52, 56, 55, 0,217, 3, 0, 0, /* 0x fc0 */ - 0, 0, 0, 0,219, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, /* 0x fd0 */ - 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 54, 53, 0,219, 3, /* 0x fe0 */ - 0, 0, 0, 0, 0, 0,223, 3, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x ff0 */ - 55, 48, 0, 5, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, 51, 0, /* 0x1000 */ -223, 3, 0, 0, 77, 82, 85, 65, 82, 66, 51, 48, 0,225, 3, 0, /* 0x1010 */ - 0, 77, 82, 85, 66, 73, 84, 83, 51, 0,226, 3, 0, 0, 77, 82, /* 0x1020 */ - 85, 65, 82, 66, 52, 48, 0,228, 3, 0, 0, 76, 88, 77, 82, 85, /* 0x1030 */ - 48, 55, 48, 0,232, 3, 0, 0, 0, 0, 0, 0,237, 3, 0, 0, /* 0x1040 */ - 76, 88, 85, 78, 70, 48, 52, 48, 0, 0, 0, 0, 0, 77, 82, 85, /* 0x1050 */ - 66, 89, 84, 69, 52, 0,240, 3, 0, 0, 77, 82, 85, 66, 73, 84, /* 0x1060 */ - 83, 52, 0,243, 3, 0, 0, 77, 82, 85, 65, 82, 66, 53, 48, 0, /* 0x1070 */ -245, 3, 0, 0, 76, 88, 77, 82, 85, 48, 56, 48, 0,251, 3, 0, /* 0x1080 */ - 0, 77, 82, 85, 66, 89, 84, 69, 53, 0,254, 3, 0, 0, 77, 82, /* 0x1090 */ - 85, 65, 82, 66, 54, 48, 0, 0, 4, 0, 0, 77, 82, 85, 66, 73, /* 0x10a0 */ - 84, 83, 53, 0, 1, 4, 0, 0, 77, 82, 85, 65, 82, 66, 55, 48, /* 0x10b0 */ - 0, 3, 4, 0, 0, 76, 88, 77, 82, 85, 48, 57, 48, 0, 7, 4, /* 0x10c0 */ - 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 76, 88, 77, 82, 85, 49, /* 0x10d0 */ - 48, 48, 0, 10, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, 54, 0, /* 0x10e0 */ - 18, 4, 0, 0, 77, 82, 85, 65, 82, 66, 56, 48, 0, 20, 4, 0, /* 0x10f0 */ - 0, 77, 82, 85, 66, 73, 84, 83, 54, 0, 21, 4, 0, 0, 77, 82, /* 0x1100 */ - 85, 65, 82, 66, 57, 48, 0, 23, 4, 0, 0, 76, 88, 77, 82, 85, /* 0x1110 */ - 49, 48, 48, 0, 27, 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, /* 0x1120 */ - 0, 43, 4, 0, 0, 76, 88, 77, 82, 85, 49, 49, 48, 0, 48, 4, /* 0x1130 */ - 0, 0, 76, 88, 77, 82, 85, 49, 49, 49, 0, 51, 4, 0, 0, 76, /* 0x1140 */ - 88, 85, 78, 70, 48, 52, 49, 0, 53, 4, 0, 0, 0, 0, 0, 0, /* 0x1150 */ - 60, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, /* 0x1160 */ - 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 60, 4, 0, 0, 76, 69, /* 0x1170 */ - 88, 69, 67, 48, 49, 54, 0, 60, 4, 0, 0, 0, 0, 0, 0, 62, /* 0x1180 */ - 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 0, 0, 0, 0, /* 0x1190 */ - 76, 88, 77, 82, 85, 48, 49, 48, 0, 62, 4, 0, 0, 76, 88, 74, /* 0x11a0 */ - 77, 80, 65, 48, 48, 0, 63, 4, 0, 0, 76, 88, 67, 65, 76, 76, /* 0x11b0 */ - 66, 48, 0, 65, 4, 0, 0, 76, 88, 85, 78, 70, 48, 50, 49, 0, /* 0x11c0 */ - 67, 4, 0, 0, 76, 88, 77, 82, 85, 48, 50, 50, 0, 73, 4, 0, /* 0x11d0 */ - 0, 76, 88, 74, 77, 80, 65, 48, 49, 0, 76, 4, 0, 0, 76, 88, /* 0x11e0 */ - 67, 65, 76, 76, 66, 49, 0, 78, 4, 0, 0, 77, 82, 85, 66, 73, /* 0x11f0 */ - 84, 83, 49, 0, 80, 4, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, /* 0x1200 */ - 0, 81, 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, 49, 0, 83, 4, /* 0x1210 */ - 0, 0, 77, 82, 85, 65, 82, 66, 49, 48, 0, 85, 4, 0, 0, 76, /* 0x1220 */ - 88, 77, 82, 85, 48, 52, 48, 0, 86, 4, 0, 0, 0, 0, 0, 0, /* 0x1230 */ - 88, 4, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, 0, 0, 0, 0, /* 0x1240 */ - 0, 76, 88, 85, 78, 70, 48, 51, 48, 0, 88, 4, 0, 0, 76, 88, /* 0x1250 */ - 74, 67, 67, 48, 48, 48, 0, 94, 4, 0, 0, 0, 0, 0, 0,102, /* 0x1260 */ - 4, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0, 0, 0, 0, 0, /* 0x1270 */ - 76, 88, 67, 74, 48, 77, 82, 85, 0,102, 4, 0, 0, 76, 88, 67, /* 0x1280 */ - 74, 49, 77, 82, 85, 0,104, 4, 0, 0, 76, 88, 67, 65, 76, 74, /* 0x1290 */ - 77, 80, 0,107, 4, 0, 0, 76, 88, 67, 65, 76, 76, 48, 48, 0, /* 0x12a0 */ -110, 4, 0, 0, 0, 0, 0, 0,112, 4, 0, 0, 76, 88, 85, 78, /* 0x12b0 */ - 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 65, 76, 76, 48, /* 0x12c0 */ - 49, 0,112, 4, 0, 0, 76, 88, 67, 74, 50, 77, 82, 85, 0,115, /* 0x12d0 */ - 4, 0, 0, 0, 0, 0, 0,117, 4, 0, 0, 76, 88, 85, 78, 70, /* 0x12e0 */ - 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 74, 52, 77, 82, 85, /* 0x12f0 */ - 0,117, 4, 0, 0, 0, 0, 0, 0,119, 4, 0, 0, 76, 88, 85, /* 0x1300 */ - 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, 67, 74, 54, 77, /* 0x1310 */ - 82, 85, 0,119, 4, 0, 0, 0, 0, 0, 0,121, 4, 0, 0, 76, /* 0x1320 */ - 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, 76, 88, 67, 74, /* 0x1330 */ - 55, 77, 82, 85, 0,121, 4, 0, 0, 0, 0, 0, 0,123, 4, 0, /* 0x1340 */ - 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, 76, 88, /* 0x1350 */ - 67, 74, 56, 77, 82, 85, 0,123, 4, 0, 0, 0, 0, 0, 0,126, /* 0x1360 */ - 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, /* 0x1370 */ - 76, 88, 85, 78, 70, 48, 51, 52, 0,126, 4, 0, 0, 0, 0, 0, /* 0x1380 */ - 0,131, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0, 0, 0, /* 0x1390 */ - 0, 0, 76, 88, 77, 82, 85, 48, 53, 53, 0,131, 4, 0, 0, 77, /* 0x13a0 */ - 82, 85, 66, 89, 84, 69, 50, 0,133, 4, 0, 0, 77, 82, 85, 66, /* 0x13b0 */ - 73, 84, 83, 50, 0,138, 4, 0, 0, 77, 82, 85, 65, 82, 66, 50, /* 0x13c0 */ - 48, 0,143, 4, 0, 0, 76, 88, 77, 82, 85, 48, 53, 55, 0,148, /* 0x13d0 */ - 4, 0, 0, 76, 88, 77, 82, 85, 48, 53, 56, 0,154, 4, 0, 0, /* 0x13e0 */ - 76, 88, 85, 78, 70, 48, 51, 53, 0,155, 4, 0, 0, 67, 75, 76, /* 0x13f0 */ - 76, 84, 82, 48, 48, 0,161, 4, 0, 0, 0, 0, 0, 0,165, 4, /* 0x1400 */ - 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 30, 0, 0, 0, 67, /* 0x1410 */ - 75, 76, 76, 84, 82, 49, 48, 0,170, 4, 0, 0, 0, 0, 0, 0, /* 0x1420 */ -184, 4, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 6, 0, 0, /* 0x1430 */ - 0, 67, 75, 76, 76, 84, 82, 50, 48, 0,184, 4, 0, 0, 0, 0, /* 0x1440 */ - 0, 0,190, 4, 0, 0, 67, 75, 76, 76, 84, 82, 52, 48, 0, 0, /* 0x1450 */ - 0, 0, 0, 0, 0, 0, 0,194, 4, 0, 0, 67, 75, 76, 76, 84, /* 0x1460 */ - 82, 52, 48, 0, 0, 0, 0, 0, 67, 75, 76, 76, 84, 82, 51, 48, /* 0x1470 */ - 0,217, 4, 0, 0, 0, 0, 0, 0,224, 4, 0, 0, 67, 75, 76, /* 0x1480 */ - 76, 84, 82, 49, 48, 0, 14, 0, 0, 0, 67, 75, 76, 76, 84, 82, /* 0x1490 */ - 52, 48, 0,224, 4, 0, 0, 0, 0, 0, 0,229, 4, 0, 0, 67, /* 0x14a0 */ - 75, 76, 76, 84, 82, 48, 48, 0, 4, 0, 0, 0, 76, 69, 88, 69, /* 0x14b0 */ - 67, 48, 49, 55, 0,229, 4, 0, 0, 76, 69, 88, 69, 67, 48, 50, /* 0x14c0 */ - 48, 0,231, 4, 0, 0, 88, 84, 72, 69, 69, 78, 68, 88, 0, 96, /* 0x14d0 */ - 5, 0, 0,255,255,255,255, 96, 5 /* 0x14e0 */ +unsigned char linux_i386elf_loader[5357] = { +204,232, 0, 0, 0, 0, 96,106, 63,139,116, 36, 40,139,124, 36, /* 0x 0 */ + 48,131,205,255,235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1, /* 0x 10 */ +219,117, 7,139, 30,131,238,252, 17,219,114, 0, 49,192, 64,138, /* 0x 20 */ + 7,114, 0,184, 1, 0, 0, 0, 1,219,117, 7,139, 30,131,238, /* 0x 30 */ +252, 17,219, 17,192, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 40 */ +115, 0, 1,219,115, 0,117, 9,139, 30,131,238,252, 17,219,115, /* 0x 50 */ + 0, 49,201,131,232, 3,114, 13,193,224, 8,138, 6, 70,131,240, /* 0x 60 */ +255,116, 0,137,197, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 70 */ + 17,201, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201,117, /* 0x 80 */ + 0, 65, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201, 1, /* 0x 90 */ +219,117, 7,139, 30,131,238,252, 17,219,115, 0, 1,219,115, 0, /* 0x a0 */ +117, 9,139, 30,131,238,252, 17,219,115, 0, 65, 65,131,193, 2, /* 0x b0 */ +129,253, 0,243,255,255,131,209, 1, 86,141, 52, 47,243,164, 94, /* 0x c0 */ +233, 0, 0, 0, 0,141, 20, 47,131,253,252,138, 4, 15,118, 0, /* 0x d0 */ +138, 2, 66,136, 7, 71, 73,117,247,233, 0, 0, 0, 0,139, 2, /* 0x e0 */ +131,194, 4,137, 7,131,199, 4,131,233, 4,119,241, 1,207,233, /* 0x f0 */ + 0, 0, 0, 0,235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1, /* 0x 100 */ +219,117, 7,139, 30,131,238,252, 17,219,114, 0, 49,192, 64,138, /* 0x 110 */ + 7,114, 0,184, 1, 0, 0, 0, 1,219,117, 7,139, 30,131,238, /* 0x 120 */ +252, 17,219, 17,192, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 130 */ +114, 0, 1,219,115, 11,117, 0,139, 30,131,238,252, 17,219,114, /* 0x 140 */ + 0, 72, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,192,235, /* 0x 150 */ + 0, 49,201,131,232, 3,114, 17,193,224, 8,138, 6, 70,131,240, /* 0x 160 */ +255,116, 0,209,248,137,197,235, 11, 1,219,117, 7,139, 30,131, /* 0x 170 */ +238,252, 17,219, 17,201, 1,219,117, 7,139, 30,131,238,252, 17, /* 0x 180 */ +219, 17,201,117, 0, 65, 1,219,117, 7,139, 30,131,238,252, 17, /* 0x 190 */ +219, 17,201, 1,219,117, 7,139, 30,131,238,252, 17,219,115, 0, /* 0x 1a0 */ + 1,219,115, 0,117, 9,139, 30,131,238,252, 17,219,115, 0, 65, /* 0x 1b0 */ + 65,131,193, 2,129,253, 0,251,255,255,131,209, 1, 86,141, 52, /* 0x 1c0 */ + 47,243,164, 94,233, 0, 0, 0, 0,141, 20, 47,131,253,252,138, /* 0x 1d0 */ + 4, 15,118, 0,138, 2, 66,136, 7, 71, 73,117,247,233, 0, 0, /* 0x 1e0 */ + 0, 0,139, 2,131,194, 4,137, 7,131,199, 4,131,233, 4,119, /* 0x 1f0 */ +241, 1,207,233, 0, 0, 0, 0,235, 0,164,235, 0,138, 6, 70, /* 0x 200 */ +136, 7, 71, 1,219,117, 7,139, 30,131,238,252, 17,219,114, 0, /* 0x 210 */ + 49,192, 64,138, 7,114, 0,184, 1, 0, 0, 0, 1,219,117, 7, /* 0x 220 */ +139, 30,131,238,252, 17,219, 17,192, 1,219,117, 7,139, 30,131, /* 0x 230 */ +238,252, 17,219,114, 0, 1,219,115, 11,117, 0,139, 30,131,238, /* 0x 240 */ +252, 17,219,114, 0, 72, 1,219,117, 7,139, 30,131,238,252, 17, /* 0x 250 */ +219, 17,192,235, 0, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 260 */ + 17,201,235, 0, 49,201,131,232, 3,114, 17,193,224, 8,138, 6, /* 0x 270 */ + 70,131,240,255,116, 0,209,248,137,197,235, 11, 1,219,117, 7, /* 0x 280 */ +139, 30,131,238,252, 17,219,114,204, 65, 1,219,117, 7,139, 30, /* 0x 290 */ +131,238,252, 17,219,114,190, 1,219,117, 7,139, 30,131,238,252, /* 0x 2a0 */ + 17,219, 17,201, 1,219,117, 7,139, 30,131,238,252, 17,219,115, /* 0x 2b0 */ + 0, 1,219,115, 0,117, 9,139, 30,131,238,252, 17,219,115, 0, /* 0x 2c0 */ + 65, 65,131,193, 2,129,253, 0,251,255,255,131,209, 2, 86,141, /* 0x 2d0 */ + 52, 47,243,164, 94,233, 0, 0, 0, 0,141, 20, 47,131,253,252, /* 0x 2e0 */ +138, 4, 15,118, 0,138, 2, 66,136, 7, 71, 73,117,247,233, 0, /* 0x 2f0 */ + 0, 0, 0,139, 2,131,194, 4,137, 7,131,199, 4,131,233, 4, /* 0x 300 */ +119,241, 1,207,233, 0, 0, 0, 0,185, 84, 69, 88, 76,138, 7, /* 0x 310 */ + 71, 44,232, 60, 1,119,247,128, 63, 63,117, 0,139, 7,138, 95, /* 0x 320 */ + 4,102,193,232, 8,134,196,193,192, 16,134,196, 41,248,128,235, /* 0x 330 */ +232,137, 7,131,199, 5,136,216,226, 0,185, 84, 69, 88, 76,176, /* 0x 340 */ +232,176,233,242,174,117, 0,128, 63, 63,117, 0,139, 7,102,193, /* 0x 350 */ +232, 8,134,196,193,192, 16,134,196, 41,248,171,235, 0,139, 84, /* 0x 360 */ + 36, 40, 3, 84, 36, 44, 57,214,116, 1, 72, 43,124, 36, 48,139, /* 0x 370 */ + 84, 36, 52,137, 58, 90,137, 68, 36, 28, 97,195,235, 0, 90, 88, /* 0x 380 */ + 89,151, 96, 49,219,187, 78, 77, 82, 85,106, 15, 88,138,100, 36, /* 0x 390 */ + 32,106, 15, 91,138,124, 36, 32,138, 84, 36, 32,233, 0, 0, 0, /* 0x 3a0 */ + 0, 15,183, 47, 43,110, 12, 41,221,117, 0,131,237, 1,115, 0, /* 0x 3b0 */ +136, 95,255, 73,136, 7, 71,139, 7,156,102,193,232, 8,193,192, /* 0x 3c0 */ + 16,134,196,157,115, 0,176, 0, 15,200,115, 0,209,232,115, 0, /* 0x 3d0 */ +254,203, 75, 35, 30,125, 2, 3, 30,137, 4,156,235, 0,141, 20, /* 0x 3e0 */ + 24, 15,182,210, 35, 22, 59, 22,114, 2, 43, 22,139, 4,148,254, /* 0x 3f0 */ +203, 75, 35, 30,125, 2, 3, 30,139, 44,156,133,237,117, 0, 80, /* 0x 400 */ +139, 70, 4,254,200, 72, 35, 6,125, 2, 3, 6, 49,237,137, 70, /* 0x 410 */ + 4,135,108,132, 4, 88,137, 44,148,137, 4,156, 41,248,131,233, /* 0x 420 */ + 4, 3, 70, 16, 1,240,137, 7,131,199, 4,235, 0,235, 0, 80, /* 0x 430 */ +176,233,176,232, 80,106, 0, 83,137,230, 94,137,218,178,233,178, /* 0x 440 */ +232, 67,106, 0,254,203, 75,117, 0, 15,183, 7,131,199, 1, 60, /* 0x 450 */ +128,114, 4, 60,143,118, 0, 41,208, 43, 70, 8,131,232, 2,116, /* 0x 460 */ + 0,131,232, 1,114, 0,115, 0,122, 0,123, 0,248,235, 0,131, /* 0x 470 */ +233, 1,127, 0,137,231,185, 4, 1, 0, 0,139, 14,131,193, 5, /* 0x 480 */ +139, 14,131,193, 4, 49,192,243,171,137,252, 86, 97,151, 81, 80, /* 0x 490 */ + 82,195,137,254,235, 0,138, 7,131,199, 1, 60,128,114, 10, 60, /* 0x 4a0 */ +143,119, 6,128,127,254, 15,116, 0, 44,232, 60, 1,119, 0, 56, /* 0x 4b0 */ + 23,117, 0,139, 7,102,193,232, 8,193,192, 16,134,196, 41,248, /* 0x 4c0 */ + 1,240,137, 7,131,199, 4,131,233, 4,138, 7,131,199, 1,226, /* 0x 4d0 */ + 0,131,233, 1,127, 0, 97,195,106, 29, 90,232, 29, 0, 0, 0, /* 0x 4e0 */ + 80, 82, 79, 84, 95, 69, 88, 69, 67,124, 80, 82, 79, 84, 95, 87, /* 0x 4f0 */ + 82, 73, 84, 69, 32,102, 97,105,108,101,100, 46, 10, 89,106, 2, /* 0x 500 */ + 91,106, 4, 88,205,128,179,127,106, 1, 88,205,128, 94,141, 69, /* 0x 510 */ +246, 43, 0,137,194, 3, 64, 72, 5,255, 15, 0, 0, 37, 0,240, /* 0x 520 */ +255,255, 80, 49,201,106,255,106, 50,181, 16,106, 7, 81, 80,137, /* 0x 530 */ +227,106, 90, 88,205,128,133,192,120,158,146,147,252,173, 80, 84, /* 0x 540 */ + 82,173, 80,173, 86,255,213,131,196, 40,195, 93,232,188,255,255, /* 0x 550 */ +255, 0, 0, 0, 76, 69, 88, 69, 67, 48, 48, 48, 0, 0, 0, 0, /* 0x 560 */ + 0, 0, 0, 0, 0, 6, 0, 0, 0, 76, 69, 88, 69, 67, 48, 50, /* 0x 570 */ + 48, 0,115, 0, 0, 0, 76, 69, 88, 69, 67, 48, 48, 57, 0, 6, /* 0x 580 */ + 0, 0, 0, 76, 69, 88, 69, 67, 48, 49, 48, 0, 6, 0, 0, 0, /* 0x 590 */ + 78, 50, 66, 83, 77, 65, 49, 48, 0, 20, 0, 0, 0, 0, 0, 0, /* 0x 5a0 */ + 0, 22, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, /* 0x 5b0 */ + 0, 0, 78, 50, 66, 70, 65, 83, 49, 48, 0, 23, 0, 0, 0, 0, /* 0x 5c0 */ + 0, 0, 0, 25, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, /* 0x 5d0 */ + 4, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, 49, 0, 25, 0, 0, /* 0x 5e0 */ + 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 31, 0, 0, 0, 78, 50, /* 0x 5f0 */ + 66, 83, 77, 65, 50, 48, 0, 42, 0, 0, 0, 0, 0, 0, 0, 44, /* 0x 600 */ + 0, 0, 0, 78, 50, 66, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, /* 0x 610 */ + 78, 50, 66, 70, 65, 83, 50, 48, 0, 47, 0, 0, 0, 0, 0, 0, /* 0x 620 */ + 0, 51, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, 49, 0, 0, 0, /* 0x 630 */ + 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 56, 0, 0, 0, 78, /* 0x 640 */ + 50, 66, 83, 77, 65, 51, 48, 0, 69, 0, 0, 0, 0, 0, 0, 0, /* 0x 650 */ + 82, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, /* 0x 660 */ + 0, 78, 50, 66, 70, 65, 83, 51, 48, 0, 82, 0, 0, 0, 0, 0, /* 0x 670 */ + 0, 0, 86, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, /* 0x 680 */ + 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 690 */ + 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, /* 0x 6a0 */ + 0, 97, 0, 0, 0, 0, 0, 0, 0,115, 0, 0, 0, 78, 50, 66, /* 0x 6b0 */ + 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,145, 0, /* 0x 6c0 */ + 0, 0, 78, 50, 66, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 78, /* 0x 6d0 */ + 50, 66, 83, 77, 65, 52, 48, 0,159, 0, 0, 0, 0, 0, 0, 0, /* 0x 6e0 */ +172, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, /* 0x 6f0 */ + 0, 78, 50, 66, 70, 65, 83, 52, 48, 0,172, 0, 0, 0, 0, 0, /* 0x 700 */ + 0, 0,176, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, /* 0x 710 */ + 0, 0, 0, 0, 0, 0, 0,187, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 720 */ + 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, 68, 85, 77, 77, 49, /* 0x 730 */ + 0,187, 0, 0, 0, 78, 50, 66, 83, 77, 65, 53, 48, 0,187, 0, /* 0x 740 */ + 0, 0, 78, 50, 66, 70, 65, 83, 53, 48, 0,189, 0, 0, 0, 78, /* 0x 750 */ + 50, 66, 68, 69, 67, 53, 48, 0,192, 0, 0, 0, 78, 50, 66, 83, /* 0x 760 */ + 77, 65, 54, 48, 0,201, 0, 0, 0, 0, 0, 0, 0,213, 0, 0, /* 0x 770 */ + 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, /* 0x 780 */ + 66, 70, 65, 83, 54, 48, 0,213, 0, 0, 0, 0, 0, 0, 0,224, /* 0x 790 */ + 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, /* 0x 7a0 */ + 0, 0, 0, 0,238, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, /* 0x 7b0 */ + 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, 49, 0,238, 0, /* 0x 7c0 */ + 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 7d0 */ + 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, 48, 0, /* 0x 7e0 */ + 4, 1, 0, 0, 78, 82, 86, 50, 66, 69, 78, 68, 0, 4, 1, 0, /* 0x 7f0 */ + 0, 78, 50, 68, 83, 77, 65, 49, 48, 0, 4, 1, 0, 0, 0, 0, /* 0x 800 */ + 0, 0, 6, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, /* 0x 810 */ + 0, 0, 0, 78, 50, 68, 70, 65, 83, 49, 48, 0, 7, 1, 0, 0, /* 0x 820 */ + 0, 0, 0, 0, 9, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, /* 0x 830 */ + 0, 4, 0, 0, 0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 9, 1, /* 0x 840 */ + 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 15, 1, 0, 0, 78, /* 0x 850 */ + 50, 68, 83, 77, 65, 50, 48, 0, 26, 1, 0, 0, 0, 0, 0, 0, /* 0x 860 */ + 28, 1, 0, 0, 78, 50, 68, 83, 77, 65, 49, 48, 0, 2, 0, 0, /* 0x 870 */ + 0, 78, 50, 68, 70, 65, 83, 50, 48, 0, 31, 1, 0, 0, 0, 0, /* 0x 880 */ + 0, 0, 35, 1, 0, 0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 0, /* 0x 890 */ + 0, 0, 0, 78, 50, 68, 68, 69, 67, 50, 48, 0, 40, 1, 0, 0, /* 0x 8a0 */ + 78, 50, 68, 83, 77, 65, 51, 48, 0, 53, 1, 0, 0, 0, 0, 0, /* 0x 8b0 */ + 0, 66, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, /* 0x 8c0 */ + 0, 0, 78, 50, 68, 70, 65, 83, 51, 48, 0, 66, 1, 0, 0, 0, /* 0x 8d0 */ + 0, 0, 0, 72, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, /* 0x 8e0 */ + 16, 0, 0, 0, 0, 0, 0, 0, 81, 1, 0, 0, 78, 50, 68, 68, /* 0x 8f0 */ + 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, 68, 68, 69, 67, 51, /* 0x 900 */ + 48, 0, 81, 1, 0, 0, 0, 0, 0, 0, 97, 1, 0, 0, 78, 50, /* 0x 910 */ + 68, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,115, /* 0x 920 */ + 1, 0, 0, 78, 50, 68, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, /* 0x 930 */ + 0, 0, 0, 0,149, 1, 0, 0, 78, 50, 68, 68, 69, 67, 53, 48, /* 0x 940 */ + 0, 0, 0, 0, 0, 78, 50, 68, 83, 77, 65, 52, 48, 0,163, 1, /* 0x 950 */ + 0, 0, 0, 0, 0, 0,176, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x 960 */ + 51, 48, 0, 69, 0, 0, 0, 78, 50, 68, 70, 65, 83, 52, 48, 0, /* 0x 970 */ +176, 1, 0, 0, 0, 0, 0, 0,180, 1, 0, 0, 78, 50, 68, 68, /* 0x 980 */ + 69, 67, 51, 48, 0, 69, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, /* 0x 990 */ + 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 78, 50, /* 0x 9a0 */ + 68, 68, 85, 77, 77, 49, 0,191, 1, 0, 0, 78, 50, 68, 83, 77, /* 0x 9b0 */ + 65, 53, 48, 0,191, 1, 0, 0, 78, 50, 68, 70, 65, 83, 53, 48, /* 0x 9c0 */ + 0,193, 1, 0, 0, 78, 50, 68, 68, 69, 67, 53, 48, 0,196, 1, /* 0x 9d0 */ + 0, 0, 78, 50, 68, 83, 77, 65, 54, 48, 0,205, 1, 0, 0, 0, /* 0x 9e0 */ + 0, 0, 0,217, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, /* 0x 9f0 */ + 0, 0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 48, 0,217, 1, 0, /* 0x a00 */ + 0, 0, 0, 0, 0,228, 1, 0, 0, 78, 50, 68, 70, 65, 83, 54, /* 0x a10 */ + 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,242, 1, 0, 0, 78, 50, /* 0x a20 */ + 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 70, 65, /* 0x a30 */ + 83, 54, 49, 0,242, 1, 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, /* 0x a40 */ + 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, /* 0x a50 */ + 68, 69, 67, 54, 48, 0, 8, 2, 0, 0, 78, 82, 86, 50, 68, 69, /* 0x a60 */ + 78, 68, 0, 8, 2, 0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, /* 0x a70 */ + 8, 2, 0, 0, 0, 0, 0, 0, 10, 2, 0, 0, 78, 50, 69, 68, /* 0x a80 */ + 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, /* 0x a90 */ + 48, 0, 11, 2, 0, 0, 0, 0, 0, 0, 13, 2, 0, 0, 78, 50, /* 0x aa0 */ + 69, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 69, 70, 65, /* 0x ab0 */ + 83, 49, 49, 0, 13, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, /* 0x ac0 */ + 0, 19, 2, 0, 0, 78, 50, 69, 83, 77, 65, 50, 48, 0, 30, 2, /* 0x ad0 */ + 0, 0, 0, 0, 0, 0, 32, 2, 0, 0, 78, 50, 69, 83, 77, 65, /* 0x ae0 */ + 49, 48, 0, 2, 0, 0, 0, 78, 50, 69, 70, 65, 83, 50, 48, 0, /* 0x af0 */ + 35, 2, 0, 0, 0, 0, 0, 0, 39, 2, 0, 0, 78, 50, 69, 70, /* 0x b00 */ + 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 69, 68, 69, 67, 50, /* 0x b10 */ + 48, 0, 44, 2, 0, 0, 78, 50, 69, 83, 77, 65, 51, 48, 0, 57, /* 0x b20 */ + 2, 0, 0, 0, 0, 0, 0, 70, 2, 0, 0, 78, 50, 69, 68, 69, /* 0x b30 */ + 67, 51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 70, 65, 83, 51, 48, /* 0x b40 */ + 0, 70, 2, 0, 0, 0, 0, 0, 0, 76, 2, 0, 0, 78, 50, 69, /* 0x b50 */ + 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 0, 0, 0, 0, 85, 2, /* 0x b60 */ + 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 78, /* 0x b70 */ + 50, 69, 68, 69, 67, 51, 48, 0, 85, 2, 0, 0, 0, 0, 0, 0, /* 0x b80 */ +101, 2, 0, 0, 78, 50, 69, 68, 69, 67, 50, 48, 0, 0, 0, 0, /* 0x b90 */ + 0, 0, 0, 0, 0,116, 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, /* 0x ba0 */ + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,134, 2, 0, 0, 78, 50, /* 0x bb0 */ + 69, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 78, 50, 69, 83, 77, /* 0x bc0 */ + 65, 52, 48, 0,180, 2, 0, 0, 0, 0, 0, 0,193, 2, 0, 0, /* 0x bd0 */ + 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, /* 0x be0 */ + 70, 65, 83, 52, 48, 0,193, 2, 0, 0, 0, 0, 0, 0,197, 2, /* 0x bf0 */ + 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 0, /* 0x c00 */ + 0, 0, 0,208, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, /* 0x c10 */ + 82, 0, 0, 0, 78, 50, 69, 68, 85, 77, 77, 49, 0,208, 2, 0, /* 0x c20 */ + 0, 78, 50, 69, 83, 77, 65, 53, 48, 0,208, 2, 0, 0, 78, 50, /* 0x c30 */ + 69, 70, 65, 83, 53, 48, 0,210, 2, 0, 0, 78, 50, 69, 68, 69, /* 0x c40 */ + 67, 53, 48, 0,213, 2, 0, 0, 78, 50, 69, 83, 77, 65, 54, 48, /* 0x c50 */ + 0,222, 2, 0, 0, 0, 0, 0, 0,234, 2, 0, 0, 78, 50, 69, /* 0x c60 */ + 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, /* 0x c70 */ + 54, 48, 0,234, 2, 0, 0, 0, 0, 0, 0,245, 2, 0, 0, 78, /* 0x c80 */ + 50, 69, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x c90 */ + 3, 3, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, /* 0x ca0 */ + 0, 78, 50, 69, 70, 65, 83, 54, 49, 0, 3, 3, 0, 0, 0, 0, /* 0x cb0 */ + 0, 0, 25, 3, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, /* 0x cc0 */ + 0, 0, 0, 78, 50, 69, 68, 69, 67, 54, 48, 0, 25, 3, 0, 0, /* 0x cd0 */ + 78, 82, 86, 50, 69, 69, 78, 68, 0, 25, 3, 0, 0, 67, 65, 76, /* 0x ce0 */ + 76, 84, 82, 48, 48, 0, 25, 3, 0, 0, 67, 84, 67, 76, 69, 86, /* 0x cf0 */ + 69, 49, 0, 39, 3, 0, 0, 0, 0, 0, 0, 44, 3, 0, 0, 67, /* 0x d00 */ + 65, 76, 76, 84, 82, 48, 48, 0, 5, 0, 0, 0, 67, 65, 76, 76, /* 0x d10 */ + 84, 82, 48, 49, 0, 44, 3, 0, 0, 67, 84, 68, 85, 77, 77, 89, /* 0x d20 */ + 49, 0, 49, 3, 0, 0, 67, 84, 66, 83, 72, 82, 48, 49, 0, 49, /* 0x d30 */ + 3, 0, 0, 67, 84, 66, 82, 79, 82, 48, 49, 0, 53, 3, 0, 0, /* 0x d40 */ + 67, 84, 66, 83, 87, 65, 48, 49, 0, 55, 3, 0, 0, 67, 65, 76, /* 0x d50 */ + 76, 84, 82, 48, 50, 0, 60, 3, 0, 0, 0, 0, 0, 0, 74, 3, /* 0x d60 */ + 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, 10, 0, 0, 0, 67, /* 0x d70 */ + 65, 76, 76, 84, 82, 49, 48, 0, 74, 3, 0, 0, 67, 65, 76, 76, /* 0x d80 */ + 84, 82, 69, 56, 0, 79, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, /* 0x d90 */ + 57, 0, 81, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 49, 0, 83, /* 0x da0 */ + 3, 0, 0, 0, 0, 0, 0, 87, 3, 0, 0, 67, 65, 76, 76, 84, /* 0x db0 */ + 82, 49, 51, 0, 5, 0, 0, 0, 67, 84, 67, 76, 69, 86, 69, 50, /* 0x dc0 */ + 0, 87, 3, 0, 0, 0, 0, 0, 0, 92, 3, 0, 0, 67, 65, 76, /* 0x dd0 */ + 76, 84, 82, 49, 49, 0, 0, 0, 0, 0, 67, 65, 76, 76, 84, 82, /* 0x de0 */ + 49, 50, 0, 92, 3, 0, 0, 67, 84, 68, 85, 77, 77, 89, 50, 0, /* 0x df0 */ + 94, 3, 0, 0, 67, 84, 66, 83, 72, 82, 49, 49, 0, 94, 3, 0, /* 0x e00 */ + 0, 67, 84, 66, 82, 79, 82, 49, 49, 0, 98, 3, 0, 0, 67, 84, /* 0x e10 */ + 66, 83, 87, 65, 49, 49, 0,100, 3, 0, 0, 67, 65, 76, 76, 84, /* 0x e20 */ + 82, 49, 51, 0,105, 3, 0, 0, 0, 0, 0, 0,110, 3, 0, 0, /* 0x e30 */ + 67, 65, 76, 76, 84, 82, 49, 48, 0, 5, 0, 0, 0, 67, 84, 84, /* 0x e40 */ + 72, 69, 69, 78, 68, 0,110, 3, 0, 0, 76, 69, 88, 69, 67, 48, /* 0x e50 */ + 49, 53, 0,110, 3, 0, 0, 76, 88, 85, 78, 70, 48, 48, 48, 0, /* 0x e60 */ +140, 3, 0, 0, 0, 0, 0, 0,142, 3, 0, 0, 76, 88, 85, 78, /* 0x e70 */ + 70, 48, 49, 48, 0, 5, 0, 0, 0, 76, 88, 85, 78, 70, 48, 48, /* 0x e80 */ + 50, 0,142, 3, 0, 0, 77, 82, 85, 66, 89, 84, 69, 48, 0,147, /* 0x e90 */ + 3, 0, 0, 76, 88, 77, 82, 85, 48, 48, 53, 0,149, 3, 0, 0, /* 0x ea0 */ + 76, 88, 77, 82, 85, 48, 48, 54, 0,154, 3, 0, 0, 76, 88, 77, /* 0x eb0 */ + 82, 85, 48, 48, 55, 0,161, 3, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x ec0 */ + 48, 56, 0,168, 3, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, 0, /* 0x ed0 */ +172, 3, 0, 0, 0, 0, 0, 0,177, 3, 0, 0, 76, 88, 85, 78, /* 0x ee0 */ + 70, 48, 52, 50, 0, 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 49, /* 0x ef0 */ + 48, 0,177, 3, 0, 0, 76, 88, 77, 82, 85, 48, 52, 53, 0,180, /* 0x f00 */ + 3, 0, 0, 76, 88, 77, 82, 85, 48, 52, 54, 0,183, 3, 0, 0, /* 0x f10 */ + 76, 88, 74, 67, 67, 48, 50, 48, 0,185, 3, 0, 0, 0, 0, 0, /* 0x f20 */ + 0,187, 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, /* 0x f30 */ + 0, 0, 76, 88, 74, 67, 67, 48, 50, 49, 0,187, 3, 0, 0, 0, /* 0x f40 */ + 0, 0, 0,192, 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, /* 0x f50 */ + 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 50, 51, 0,192, 3, 0, /* 0x f60 */ + 0, 76, 88, 85, 78, 70, 48, 51, 55, 0,199, 3, 0, 0, 76, 88, /* 0x f70 */ + 85, 78, 70, 51, 56, 54, 0,201, 3, 0, 0, 76, 88, 85, 78, 70, /* 0x f80 */ + 51, 56, 55, 0,202, 3, 0, 0, 76, 88, 85, 78, 70, 51, 56, 56, /* 0x f90 */ + 0,211, 3, 0, 0, 0, 0, 0, 0,214, 3, 0, 0, 76, 88, 85, /* 0x fa0 */ + 78, 70, 48, 52, 48, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 52, /* 0x fb0 */ + 56, 54, 0,214, 3, 0, 0, 76, 88, 85, 78, 70, 52, 56, 55, 0, /* 0x fc0 */ +218, 3, 0, 0, 0, 0, 0, 0,220, 3, 0, 0, 76, 88, 85, 78, /* 0x fd0 */ + 70, 48, 52, 48, 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 54, /* 0x fe0 */ + 53, 0,220, 3, 0, 0, 0, 0, 0, 0,224, 3, 0, 0, 76, 88, /* 0x ff0 */ + 77, 82, 85, 48, 55, 48, 0, 5, 0, 0, 0, 77, 82, 85, 66, 89, /* 0x1000 */ + 84, 69, 51, 0,224, 3, 0, 0, 77, 82, 85, 65, 82, 66, 51, 48, /* 0x1010 */ + 0,226, 3, 0, 0, 77, 82, 85, 66, 73, 84, 83, 51, 0,227, 3, /* 0x1020 */ + 0, 0, 77, 82, 85, 65, 82, 66, 52, 48, 0,229, 3, 0, 0, 76, /* 0x1030 */ + 88, 77, 82, 85, 48, 55, 48, 0,233, 3, 0, 0, 0, 0, 0, 0, /* 0x1040 */ +238, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, 0, 0, 0, 0, /* 0x1050 */ + 0, 77, 82, 85, 66, 89, 84, 69, 52, 0,241, 3, 0, 0, 77, 82, /* 0x1060 */ + 85, 66, 73, 84, 83, 52, 0,244, 3, 0, 0, 77, 82, 85, 65, 82, /* 0x1070 */ + 66, 53, 48, 0,246, 3, 0, 0, 76, 88, 77, 82, 85, 48, 56, 48, /* 0x1080 */ + 0,252, 3, 0, 0, 77, 82, 85, 66, 89, 84, 69, 53, 0,255, 3, /* 0x1090 */ + 0, 0, 77, 82, 85, 65, 82, 66, 54, 48, 0, 1, 4, 0, 0, 77, /* 0x10a0 */ + 82, 85, 66, 73, 84, 83, 53, 0, 2, 4, 0, 0, 77, 82, 85, 65, /* 0x10b0 */ + 82, 66, 55, 48, 0, 4, 4, 0, 0, 76, 88, 77, 82, 85, 48, 57, /* 0x10c0 */ + 48, 0, 8, 4, 0, 0, 0, 0, 0, 0, 15, 4, 0, 0, 76, 88, /* 0x10d0 */ + 77, 82, 85, 49, 48, 48, 0, 10, 0, 0, 0, 77, 82, 85, 66, 89, /* 0x10e0 */ + 84, 69, 54, 0, 19, 4, 0, 0, 77, 82, 85, 65, 82, 66, 56, 48, /* 0x10f0 */ + 0, 21, 4, 0, 0, 77, 82, 85, 66, 73, 84, 83, 54, 0, 22, 4, /* 0x1100 */ + 0, 0, 77, 82, 85, 65, 82, 66, 57, 48, 0, 24, 4, 0, 0, 76, /* 0x1110 */ + 88, 77, 82, 85, 49, 48, 48, 0, 28, 4, 0, 0, 76, 88, 85, 78, /* 0x1120 */ + 70, 48, 52, 48, 0, 44, 4, 0, 0, 76, 88, 77, 82, 85, 49, 49, /* 0x1130 */ + 48, 0, 49, 4, 0, 0, 76, 88, 77, 82, 85, 49, 49, 49, 0, 52, /* 0x1140 */ + 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 49, 0, 54, 4, 0, 0, /* 0x1150 */ + 0, 0, 0, 0, 61, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, /* 0x1160 */ + 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 61, 4, /* 0x1170 */ + 0, 0, 76, 69, 88, 69, 67, 48, 49, 54, 0, 61, 4, 0, 0, 0, /* 0x1180 */ + 0, 0, 0, 63, 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, /* 0x1190 */ + 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 49, 48, 0, 63, 4, 0, /* 0x11a0 */ + 0, 76, 88, 74, 77, 80, 65, 48, 48, 0, 64, 4, 0, 0, 76, 88, /* 0x11b0 */ + 67, 65, 76, 76, 66, 48, 0, 66, 4, 0, 0, 76, 88, 85, 78, 70, /* 0x11c0 */ + 48, 50, 49, 0, 68, 4, 0, 0, 76, 88, 77, 82, 85, 48, 50, 50, /* 0x11d0 */ + 0, 74, 4, 0, 0, 76, 88, 74, 77, 80, 65, 48, 49, 0, 77, 4, /* 0x11e0 */ + 0, 0, 76, 88, 67, 65, 76, 76, 66, 49, 0, 79, 4, 0, 0, 77, /* 0x11f0 */ + 82, 85, 66, 73, 84, 83, 49, 0, 81, 4, 0, 0, 76, 88, 77, 82, /* 0x1200 */ + 85, 48, 51, 48, 0, 82, 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, /* 0x1210 */ + 49, 0, 84, 4, 0, 0, 77, 82, 85, 65, 82, 66, 49, 48, 0, 86, /* 0x1220 */ + 4, 0, 0, 76, 88, 77, 82, 85, 48, 52, 48, 0, 87, 4, 0, 0, /* 0x1230 */ + 0, 0, 0, 0, 89, 4, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, /* 0x1240 */ + 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0, 89, 4, /* 0x1250 */ + 0, 0, 76, 88, 74, 67, 67, 48, 48, 48, 0, 95, 4, 0, 0, 0, /* 0x1260 */ + 0, 0, 0,103, 4, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0, /* 0x1270 */ + 0, 0, 0, 0, 76, 88, 67, 74, 48, 77, 82, 85, 0,103, 4, 0, /* 0x1280 */ + 0, 76, 88, 67, 74, 49, 77, 82, 85, 0,105, 4, 0, 0, 76, 88, /* 0x1290 */ + 67, 65, 76, 74, 77, 80, 0,108, 4, 0, 0, 76, 88, 67, 65, 76, /* 0x12a0 */ + 76, 48, 48, 0,111, 4, 0, 0, 0, 0, 0, 0,113, 4, 0, 0, /* 0x12b0 */ + 76, 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, /* 0x12c0 */ + 65, 76, 76, 48, 49, 0,113, 4, 0, 0, 76, 88, 67, 74, 50, 77, /* 0x12d0 */ + 82, 85, 0,116, 4, 0, 0, 0, 0, 0, 0,118, 4, 0, 0, 76, /* 0x12e0 */ + 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 74, /* 0x12f0 */ + 52, 77, 82, 85, 0,118, 4, 0, 0, 0, 0, 0, 0,120, 4, 0, /* 0x1300 */ + 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, /* 0x1310 */ + 67, 74, 54, 77, 82, 85, 0,120, 4, 0, 0, 0, 0, 0, 0,122, /* 0x1320 */ + 4, 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, /* 0x1330 */ + 76, 88, 67, 74, 55, 77, 82, 85, 0,122, 4, 0, 0, 0, 0, 0, /* 0x1340 */ + 0,124, 4, 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, /* 0x1350 */ + 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0,124, 4, 0, 0, 0, /* 0x1360 */ + 0, 0, 0,127, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 55, 0, /* 0x1370 */ + 0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0,127, 4, 0, /* 0x1380 */ + 0, 0, 0, 0, 0,132, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, /* 0x1390 */ + 48, 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 53, 53, 0,132, /* 0x13a0 */ + 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, 50, 0,134, 4, 0, 0, /* 0x13b0 */ + 77, 82, 85, 66, 73, 84, 83, 50, 0,139, 4, 0, 0, 77, 82, 85, /* 0x13c0 */ + 65, 82, 66, 50, 48, 0,144, 4, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x13d0 */ + 53, 55, 0,149, 4, 0, 0, 76, 88, 77, 82, 85, 48, 53, 56, 0, /* 0x13e0 */ +155, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 53, 0,156, 4, 0, /* 0x13f0 */ + 0, 67, 75, 76, 76, 84, 82, 48, 48, 0,162, 4, 0, 0, 0, 0, /* 0x1400 */ + 0, 0,166, 4, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 30, /* 0x1410 */ + 0, 0, 0, 67, 75, 76, 76, 84, 82, 49, 48, 0,171, 4, 0, 0, /* 0x1420 */ + 0, 0, 0, 0,185, 4, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, /* 0x1430 */ + 0, 6, 0, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0,185, 4, /* 0x1440 */ + 0, 0, 0, 0, 0, 0,191, 4, 0, 0, 67, 75, 76, 76, 84, 82, /* 0x1450 */ + 52, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 4, 0, 0, 67, /* 0x1460 */ + 75, 76, 76, 84, 82, 52, 48, 0, 0, 0, 0, 0, 67, 75, 76, 76, /* 0x1470 */ + 84, 82, 51, 48, 0,218, 4, 0, 0, 0, 0, 0, 0,225, 4, 0, /* 0x1480 */ + 0, 67, 75, 76, 76, 84, 82, 49, 48, 0, 14, 0, 0, 0, 67, 75, /* 0x1490 */ + 76, 76, 84, 82, 52, 48, 0,225, 4, 0, 0, 0, 0, 0, 0,230, /* 0x14a0 */ + 4, 0, 0, 67, 75, 76, 76, 84, 82, 48, 48, 0, 4, 0, 0, 0, /* 0x14b0 */ + 76, 69, 88, 69, 67, 48, 49, 55, 0,230, 4, 0, 0, 76, 69, 88, /* 0x14c0 */ + 69, 67, 48, 50, 48, 0,232, 4, 0, 0, 88, 84, 72, 69, 69, 78, /* 0x14d0 */ + 68, 88, 0, 97, 5, 0, 0,255,255,255,255, 97, 5 /* 0x14e0 */ }; diff --git a/src/stub/linux.hh b/src/stub/linux.hh index cee5cb40..93c08b3a 100644 --- a/src/stub/linux.hh +++ b/src/stub/linux.hh @@ -93,7 +93,7 @@ struct timespec { #if defined(__amd64__) || defined(__powerpc64__) #define PAGE_MASK (~0ul<<12) // discards the offset, keeps the page #define PAGE_SIZE ( 1ul<<12) -#elif defined(__i386__) || defined(__powerpc__) +#elif defined(__i386__) || defined(__powerpc__) || defined(__arm__) #define PAGE_MASK (~0ul<<12) // discards the offset, keeps the page #define PAGE_SIZE ( 1ul<<12) #endif @@ -365,6 +365,7 @@ int munmap(void *, size_t); int mprotect(void const *, size_t, int); int open(char const *, unsigned, unsigned); ssize_t read(int, void *, size_t); +void exit(int) __attribute__((noreturn)); #endif /*}*/