From ce194fa5d8dab43e23fc9e94385079467c21e451 Mon Sep 17 00:00:00 2001 From: John Reiser Date: Wed, 17 May 2017 15:50:34 -0700 Subject: [PATCH] amd64-darwin.dylib hacking modified: p_mach.cpp modified: p_mach.h modified: p_mach_enum.h modified: stub/src/amd64-darwin.dylib-entry.S modified: stub/amd64-darwin.dylib-entry.h modified: stub/tmp/amd64-darwin.dylib-entry.bin.dump --- src/p_mach.cpp | 409 +++--- src/p_mach.h | 42 +- src/p_mach_enum.h | 10 +- src/stub/amd64-darwin.dylib-entry.h | 1204 ++++++++--------- src/stub/src/amd64-darwin.dylib-entry.S | 182 +-- .../tmp/amd64-darwin.dylib-entry.bin.dump | 34 +- 6 files changed, 924 insertions(+), 957 deletions(-) diff --git a/src/p_mach.cpp b/src/p_mach.cpp index 523b7260..b8ac99d7 100644 --- a/src/p_mach.cpp +++ b/src/p_mach.cpp @@ -89,14 +89,14 @@ static const static const unsigned lc_segment[2] = { 0x1, 0x19 - //Mach_segment_command::LC_SEGMENT, - //Mach_segment_command::LC_SEGMENT_64 + //Mach_command::LC_SEGMENT, + //Mach_command::LC_SEGMENT_64 }; static const unsigned lc_routines[2] = { 0x11, 0x1a - //Mach_segment_command::LC_ROUTINES, - //Mach_segment_command::LC_ROUTINES_64 + //Mach_command::LC_ROUTINES, + //Mach_command::LC_ROUTINES_64 }; template @@ -564,62 +564,35 @@ template void PackMachBase::pack4(OutputFile *fo, Filter &ft) // append PackHeader { // offset of p_info in compressed file - overlay_offset = sizeof(mhdro) + sizeof(segZERO) - + sizeof(segXHDR) + sizeof(secXHDR) - + sizeof(segTEXT) + sizeof(secTEXT) - + sizeof(cmdUUID) + sizeof(cmdSRCVER) + sizeof(cmdVERMIN) + sizeof(Mach_main_command) - + sizeof(Mach_dyld_info_only_command) + sizeof(Mach_dysymtab_command) - + sizeof(Mach_load_dylinker_command) + sizeof(Mach_load_dylib_command) - + sizeof(Mach_function_starts_command) + sizeof(Mach_data_in_code_command) - + sizeof(linfo); - if (my_filetype==Mach_header::MH_EXECUTE) { - overlay_offset = PAGE_SIZE; // FIXME - overlay_offset += sizeof(linfo); - } - + overlay_offset = secTEXT.addr + sizeof(linfo); super::pack4(fo, ft); - if (my_filetype == Mach_header::MH_EXECUTE) { + + if (Mach_header::MH_EXECUTE == my_filetype) { upx_uint64_t const zero = 0; unsigned const len = fo->getBytesWritten(); fo->write(&zero, 7& (0u-len)); - } - unsigned const eofcmpr = fo->getBytesWritten(); - if (Mach_header::CPU_TYPE_X86_64 == my_cputype) { - // sneak in a little below 4GiB - segTEXT.vmaddr = segZERO.vmaddr + segZERO.vmsize; - } - else { - // ::pack1 set segTEXT.vmaddr to be va_hi: no conflict - } - segTEXT.filesize = eofcmpr; - segTEXT.vmsize += eofcmpr; // utilize GAP + NO_LAP + sz_unc - sz_cpr - secTEXT.offset = overlay_offset - sizeof(linfo); - secTEXT.addr = segTEXT.vmaddr + secTEXT.offset; - secTEXT.size = segTEXT.filesize - secTEXT.offset; - secXHDR.offset = overlay_offset - sizeof(linfo); - if (my_filetype==Mach_header::MH_EXECUTE) { - secXHDR.offset -= sizeof(linkitem); - } - secXHDR.addr += secXHDR.offset; - unsigned offLINK = segLINK.fileoff; - segLINK.vmaddr = segTEXT.vmaddr + offLINK; - if (my_filetype != Mach_header::MH_EXECUTE) { - fo->seek(offLINK - 1, SEEK_SET); fo->write("", 1); - fo->seek(sizeof(mhdro), SEEK_SET); - fo->rewrite(&segZERO, sizeof(segZERO)); - fo->rewrite(&segXHDR, sizeof(segXHDR)); - fo->rewrite(&secXHDR, sizeof(secXHDR)); - fo->rewrite(&segTEXT, sizeof(segTEXT)); - fo->rewrite(&secTEXT, sizeof(secTEXT)); - fo->rewrite(&cmdUUID, sizeof(cmdUUID)); - fo->rewrite(&segLINK, sizeof(segLINK)); - threado_rewrite(fo); - if (my_filetype==Mach_header::MH_EXECUTE) { - fo->rewrite(&linkitem, sizeof(linkitem)); + + unsigned const eofcmpr = fo->getBytesWritten(); + if (Mach_header::CPU_TYPE_X86_64 == my_cputype) { + // sneak in a little below 4GiB + segTEXT.vmaddr = segZERO.vmaddr + segZERO.vmsize; } - fo->rewrite(&linfo, sizeof(linfo)); - } - if (my_filetype == Mach_header::MH_EXECUTE) { + else { + // ::pack1 set segTEXT.vmaddr to be va_hi: no conflict + } + segTEXT.filesize = eofcmpr; + segTEXT.vmsize += eofcmpr; // utilize GAP + NO_LAP + sz_unc - sz_cpr + secTEXT.offset = overlay_offset - sizeof(linfo); + secTEXT.addr = segTEXT.vmaddr + secTEXT.offset; + secTEXT.size = segTEXT.filesize - secTEXT.offset; + secXHDR.offset = overlay_offset - sizeof(linfo); + if (my_filetype==Mach_header::MH_EXECUTE) { + secXHDR.offset -= sizeof(linkitem); + } + secXHDR.addr += secXHDR.offset; + unsigned offLINK = segLINK.fileoff; + segLINK.vmaddr = segTEXT.vmaddr + offLINK; + // Get a writeable copy of the stub to make editing easier. ByteArray(upxstub, sz_stub_main); memcpy(upxstub, stub_main, sz_stub_main); @@ -644,8 +617,8 @@ void PackMachBase::pack4(OutputFile *fo, Filter &ft) // append PackHeader lcp_next = (Mach_command *)(sz_cmd + (char *)lcp); switch (lcp->cmd) { - case Mach_segment_command::LC_SEGMENT: // fall through - case Mach_segment_command::LC_SEGMENT_64: { + case Mach_command::LC_SEGMENT: // fall through + case Mach_command::LC_SEGMENT_64: { Mach_segment_command *const segptr = (Mach_segment_command *)lcp; if (!strcmp("__PAGEZERO", segptr->segname)) { if (pagezero_vmsize < 0xF0000000ull) { @@ -705,7 +678,7 @@ void PackMachBase::pack4(OutputFile *fo, Filter &ft) // append PackHeader segXHDR.vmsize = offLINK - segTEXT.vmsize; segXHDR.fileoff = segTEXT.filesize + segTEXT.fileoff; // XXX FIXME: assumes no __DATA in stub segXHDR.filesize = offLINK - segTEXT.filesize; // XXX FIXME: assumes no __DATA in stub; - segXHDR.maxprot = Mach_segment_command::VM_PROT_READ; + segXHDR.maxprot = Mach_command::VM_PROT_READ; segXHDR.nsects = 0; if (!segtxt) { // replace __DATA with segXHDR va_next = segXHDR.vmsize + segXHDR.vmaddr; @@ -722,8 +695,8 @@ void PackMachBase::pack4(OutputFile *fo, Filter &ft) // append PackHeader } } if (!strcmp("__LINKEDIT", segptr->segname)) { - segLINK.initprot = Mach_segment_command::VM_PROT_READ - | Mach_segment_command::VM_PROT_EXECUTE; + segLINK.initprot = Mach_command::VM_PROT_READ + | Mach_command::VM_PROT_EXECUTE; delta = offLINK - segptr->fileoff; // relocation constant // Update the __LINKEDIT header @@ -738,7 +711,7 @@ void PackMachBase::pack4(OutputFile *fo, Filter &ft) // append PackHeader goto next; } } break; - case Mach_segment_command::LC_DYLD_INFO_ONLY: { + case Mach_command::LC_DYLD_INFO_ONLY: { Mach_dyld_info_only_command *p = (Mach_dyld_info_only_command *)lcp; if (p->rebase_off) p->rebase_off += delta; if (p->bind_off) p->bind_off += delta; @@ -749,7 +722,7 @@ void PackMachBase::pack4(OutputFile *fo, Filter &ft) // append PackHeader p->export_size = 0; skip = 1; } break; - case Mach_segment_command::LC_SYMTAB: { + case Mach_command::LC_SYMTAB: { // Apple codesign requires that string table is last in the file. Mach_symtab_command *p = (Mach_symtab_command *)lcp; p->symoff = segLINK.filesize + segLINK.fileoff; @@ -758,7 +731,7 @@ void PackMachBase::pack4(OutputFile *fo, Filter &ft) // append PackHeader p->strsize = segLINK.filesize; skip = 1; } break; - case Mach_segment_command::LC_DYSYMTAB: { + case Mach_command::LC_DYSYMTAB: { Mach_dysymtab_command *p = (Mach_dysymtab_command *)lcp; if (p->tocoff) p->tocoff += delta; if (p->modtaboff) p->modtaboff += delta; @@ -775,12 +748,7 @@ void PackMachBase::pack4(OutputFile *fo, Filter &ft) // append PackHeader p->nundefsym = 0; skip = 1; } break; - case Mach_segment_command::LC_FUNCTION_STARTS: { - Mach_function_starts_command *p = (Mach_function_starts_command *)lcp; - if (p->dataoff) p->dataoff += delta; - skip = 1; - } break; - case Mach_segment_command::LC_MAIN: { + case Mach_command::LC_MAIN: { // Replace later with LC_UNIXTHREAD. // LC_MAIN requires libSystem.B.dylib to provide the environment for main(), and CALLs the entryoff. // LC_UNIXTHREAD does not need libSystem.B.dylib, and JMPs to the .rip with %rsp/argc and argv= 8+%rsp @@ -788,31 +756,33 @@ void PackMachBase::pack4(OutputFile *fo, Filter &ft) // append PackHeader (((Mach_main_command const *)lcp)->entryoff - segTEXT.fileoff)); skip = 1; } break; - case Mach_segment_command::LC_UNIXTHREAD: { // pre-LC_MAIN + case Mach_command::LC_UNIXTHREAD: { // pre-LC_MAIN threado_setPC(secTEXT.addr + (threadc_getPC(lcp) - txt_addr)); skip = 1; } break; - case Mach_segment_command::LC_LOAD_DYLIB: { + case Mach_command::LC_LOAD_DYLIB: { skip = 1; } break; - case Mach_segment_command::LC_DATA_IN_CODE: { - Mach_data_in_code_command *p = (Mach_data_in_code_command *)lcp; + + case Mach_command::LC_FUNCTION_STARTS: + case Mach_command::LC_DATA_IN_CODE: { + Mach_linkedit_data_command *p = (Mach_linkedit_data_command *)lcp; if (p->dataoff) p->dataoff += delta; skip = 1; } break; - case Mach_segment_command::LC_LOAD_DYLINKER: { + case Mach_command::LC_LOAD_DYLINKER: { skip = 1; } break; - case Mach_segment_command::LC_SOURCE_VERSION: { // copy from saved original + case Mach_command::LC_SOURCE_VERSION: { // copy from saved original memcpy(lcp, &cmdSRCVER, sizeof(cmdSRCVER)); - if (Mach_segment_command::LC_SOURCE_VERSION != cmdSRCVER.cmd) { + if (Mach_command::LC_SOURCE_VERSION != cmdSRCVER.cmd) { skip = 1; // was not seen } } break; - case Mach_segment_command::LC_VERSION_MIN_MACOSX: { // copy from saved original + case Mach_command::LC_VERSION_MIN_MACOSX: { // copy from saved original memcpy(lcp, &cmdVERMIN, sizeof(cmdVERMIN)); - if (Mach_segment_command::LC_VERSION_MIN_MACOSX != cmdVERMIN.cmd) { + if (Mach_command::LC_VERSION_MIN_MACOSX != cmdVERMIN.cmd) { skip = 1; // was not seen } } break; @@ -854,8 +824,7 @@ next: } } -// At 2013-02-03 part of the source for codesign was -// http://opensource.apple.com/source/cctools/cctools-836/libstuff/ofile.c +// At 2013-02-03 part of the source for codesign was // http://opensource.apple.com/source/cctools/cctools-836/libstuff/ofile.c template void PackMachBase::pack4dylib( // append PackHeader @@ -864,8 +833,10 @@ void PackMachBase::pack4dylib( // append PackHeader Addr init_address ) { + fo->seek(0, SEEK_SET); + fo->rewrite(&mhdro, sizeof(mhdro)); // segTEXT.nsect=1 (only secTEXT) + fo->rewrite(&segTEXT, sizeof(segTEXT)); // .vmsize unsigned opos = sizeof(mhdro); - fo->seek(opos, SEEK_SET); // Append each non-__TEXT segment, page aligned. int slide = 0; @@ -876,35 +847,58 @@ void PackMachBase::pack4dylib( // append PackHeader (Mach_segment_command const *)(mhdri.sizeofcmds + (char const *)seg); for ( ; seg < endseg; seg = (Mach_segment_command const *)( seg->cmdsize + (char const *)seg ) - ) switch (seg->cmd & ~Mach_segment_command::LC_REQ_DYLD) { + ) switch (seg->cmd & ~Mach_command::LC_REQ_DYLD) { default: // unknown if any file offset field must slide - printf("Unrecognized Macho cmd offset=0x%lx cmd=0x%lx size=0x%lx\n", (unsigned long)((const char *)seg - (const char *)rawmseg), (unsigned long)seg->cmd, (unsigned long)seg->cmdsize); + fprintf(stderr, "Unrecognized Macho cmd offset=0x%lx cmd=0x%lx size=0x%lx\n", + (unsigned long)((const char *)seg - (const char *)rawmseg), + (unsigned long)seg->cmd, (unsigned long)seg->cmdsize); // fall through - case Mach_segment_command::LC_DYLD_INFO_ONLY & ~Mach_segment_command::LC_REQ_DYLD: - case Mach_segment_command::LC_VERSION_MIN_MACOSX: - case Mach_segment_command::LC_FUNCTION_STARTS: // points into __LINKEDIT - case Mach_segment_command::LC_DATA_IN_CODE: // points into __LINKEDIT - case Mach_segment_command::LC_SOURCE_VERSION: - case Mach_segment_command::LC_THREAD: - case Mach_segment_command::LC_UNIXTHREAD: - case Mach_segment_command::LC_LOAD_DYLIB: - case Mach_segment_command::LC_ID_DYLIB: - case Mach_segment_command::LC_LOAD_DYLINKER: - case Mach_segment_command::LC_UUID: - case Mach_segment_command::LC_RPATH: - case Mach_segment_command::LC_CODE_SIGNATURE: - case Mach_segment_command::LC_REEXPORT_DYLIB: + case Mach_command::LC_VERSION_MIN_MACOSX: + case Mach_command::LC_SOURCE_VERSION: + case Mach_command::LC_THREAD: + case Mach_command::LC_UNIXTHREAD: + case Mach_command::LC_LOAD_DYLIB: + case Mach_command::LC_ID_DYLIB: + case Mach_command::LC_LOAD_DYLINKER: + case Mach_command::LC_UUID: + case Mach_command::LC_RPATH: + case Mach_command::LC_REEXPORT_DYLIB: { // contain no file offset fields + fo->seek(hdrpos, SEEK_SET); + fo->rewrite(seg, seg->cmdsize); hdrpos += seg->cmdsize; - break; // contain no file offset fields - case Mach_segment_command::LC_TWOLEVEL_HINTS: { + } break; + + case Mach_command::LC_CODE_SIGNATURE: + case Mach_command::LC_SEGMENT_SPLIT_INFO: + case Mach_command::LC_DYLIB_CODE_SIGN_DRS: + case Mach_command::LC_DATA_IN_CODE: + case Mach_command::LC_FUNCTION_STARTS: { + Mach_linkedit_data_command cmd; memcpy(&cmd, seg, sizeof(cmd)); + if (o_end_txt <= cmd.dataoff) { cmd.dataoff += slide; } + fo->seek(hdrpos, SEEK_SET); + fo->rewrite(&cmd, sizeof(cmd)); + hdrpos += sizeof(cmd); + } break; + case Mach_command::LC_DYLD_INFO_ONLY & ~Mach_command::LC_REQ_DYLD: { + Mach_dyld_info_only_command cmd; memcpy(&cmd, seg, sizeof(cmd)); + if (o_end_txt <= cmd.rebase_off) { cmd.rebase_off += slide; } + if (o_end_txt <= cmd.bind_off) { cmd.bind_off += slide; } + if (o_end_txt <= cmd.weak_bind_off) { cmd.weak_bind_off += slide; } + if (o_end_txt <= cmd.lazy_bind_off) { cmd.lazy_bind_off += slide; } + if (o_end_txt <= cmd.export_off) { cmd.export_off += slide; } + fo->seek(hdrpos, SEEK_SET); + fo->rewrite(&cmd, sizeof(cmd)); + hdrpos += sizeof(cmd); + } break; + case Mach_command::LC_TWOLEVEL_HINTS: { Mach_twolevel_hints_command cmd; memcpy(&cmd, seg, sizeof(cmd)); if (o_end_txt <= cmd.offset) { cmd.offset += slide; } fo->seek(hdrpos, SEEK_SET); fo->rewrite(&cmd, sizeof(cmd)); hdrpos += sizeof(cmd); } break; - case Mach_segment_command::LC_ROUTINES_64: - case Mach_segment_command::LC_ROUTINES: { + case Mach_command::LC_ROUTINES_64: + case Mach_command::LC_ROUTINES: { Mach_routines_command cmd; memcpy(&cmd, seg, sizeof(cmd)); cmd.reserved1 = cmd.init_address; cmd.init_address = init_address; @@ -912,17 +906,17 @@ void PackMachBase::pack4dylib( // append PackHeader fo->rewrite(&cmd, sizeof(cmd)); hdrpos += sizeof(cmd); } break; - case Mach_segment_command::LC_SEGMENT_64: - case Mach_segment_command::LC_SEGMENT: { + case Mach_command::LC_SEGMENT_64: + case Mach_command::LC_SEGMENT: { // non-__TEXT might be observed and relocated by dyld before us. Mach_segment_command segcmdtmp = *seg; bool const is_text = 0==strncmp(&seg->segname[0], "__TEXT", 1+ 6); { if (is_text) { slide = 0; - segcmdtmp.filesize = fo->getBytesWritten(); - segcmdtmp.maxprot |= Mach_segment_command::VM_PROT_WRITE; - segcmdtmp.initprot |= Mach_segment_command::VM_PROT_WRITE; + segTEXT.filesize = fo->getBytesWritten(); + segTEXT.maxprot |= Mach_command::VM_PROT_WRITE; + segcmdtmp = segTEXT; opos = o_end_txt = segcmdtmp.filesize + segcmdtmp.fileoff; } else { @@ -936,81 +930,43 @@ void PackMachBase::pack4dylib( // append PackHeader hdrpos += sizeof(segcmdtmp); // Update the sections. - Mach_section_command const *secp = (Mach_section_command const *)(const void*)(const char*)(1+ seg); - unsigned const nsects = segcmdtmp.nsects; + Mach_section_command const *secp = + (Mach_section_command const *)(const void*)(const char*)(1+ seg); + if (is_text) { + secTEXT.offset = secp->offset; + secTEXT.addr = segTEXT.vmaddr + secTEXT.offset; + secTEXT.size = segTEXT.filesize - secTEXT.offset; + secp = &secTEXT; + } + unsigned const nsects = (is_text ? 1 : segcmdtmp.nsects); Mach_section_command seccmdtmp; for (unsigned j = 0; j < nsects; ++secp, ++j) { seccmdtmp = *secp; if (o_end_txt <= seccmdtmp.offset) { seccmdtmp.offset += slide; } if (o_end_txt <= seccmdtmp.reloff) { seccmdtmp.reloff += slide; } - if (0==strncmp(&seccmdtmp.sectname[0], "__mod_init_func", 1+ 15)) { - if (seccmdtmp.flags==9 // FIXME: S_MOD_INIT_FUNC_POINTERS - && seccmdtmp.nreloc==0 && seccmdtmp.size==sizeof(Addr) ) { - seccmdtmp.addr = seccmdtmp.offset = init_address -4*4 - 8; - } - else - infoWarning("unknown __mod_init_func section"); - } -#if 0 /*{*/ -// 2010-03-12 Stop work because I don't understand what is going on, -// and I cannot find good documentation on the meaning of various parts -// of .dylib. amd64(x86_64) is almost certain to fail in the dynamic -// loader, before the upx stub gets control. For instance: -// -// Program received signal EXC_BAD_ACCESS, Could not access memory. -// Reason: KERN_INVALID_ADDRESS at address: 0x000000015f00329a -// 0x00007fff5fc10ce3 in __dyld__ZN16ImageLoaderMachO23setupLazyPointerHandlerERKN11ImageLoader11LinkContextE () -// (gdb) bt -// #0 0x00007fff5fc10ce3 in __dyld__ZN16ImageLoaderMachO23setupLazyPointerHandlerERKN11ImageLoader11LinkContextE () -// #1 0x00007fff5fc138c2 in __dyld__ZN16ImageLoaderMachO6doBindERKN11ImageLoader11LinkContextEb () -// #2 0x00007fff5fc0c0ab in __dyld__ZN11ImageLoader13recursiveBindERKNS_11LinkContextEb () -// #3 0x00007fff5fc0c08f in __dyld__ZN11ImageLoader13recursiveBindERKNS_11LinkContextEb () -// #4 0x00007fff5fc0f49e in __dyld__ZN11ImageLoader4linkERKNS_11LinkContextEbbRKNS_10RPathChainE () -// #5 0x00007fff5fc04c56 in __dyld__ZN4dyld4linkEP11ImageLoaderbRKNS0_10RPathChainE () -// #6 0x00007fff5fc06e04 in __dyld__ZN4dyld5_mainEPK11mach_headermiPPKcS5_S5_ () -// #7 0x00007fff5fc01695 in __dyld__ZN13dyldbootstrap5startEPK11mach_headeriPPKcl () -// #8 0x00007fff5fc0103a in __dyld__dyld_start () -// #9 0x0000000100000000 in ?? () -// #10 0x0000000000000001 in ?? () -// #11 0x00007fff5fbffbd0 in ?? () -// -// The various paragraphs below are experiments in "commenting out" pieces of -// the compressed .dylib, trying to isolate the bug(s). - // FIXME - unsigned const t = seccmdtmp.flags & 0xff; - if (t==6 // FIXME: S_NON_LAZY_SYMBOL_POINTERS - || t==7 // FIXME: S_LAZY_SYMBOL_POINTERS - || t==8 // FIXME: S_SYMBOL_STUBS - || t==11 // FIXME: S_COALESCED - ) { - seccmdtmp.flags = 0; // FIXME: S_REGULAR - strcpy(seccmdtmp.sectname, "__data"); - } - // FIXME - if (0==strncmp("__stub_helper", &seccmdtmp.sectname[0], 1+ 13)) { - strcpy(seccmdtmp.sectname, "__text"); - } - // FIXME - if (0==strncmp("__dyld", &seccmdtmp.sectname[0], 1+ 6)) { - strcpy(seccmdtmp.sectname, "__text"); - } -#endif /*}*/ fo->rewrite(&seccmdtmp, sizeof(seccmdtmp)); hdrpos += sizeof(seccmdtmp); } if (!is_text) { - fo->seek(opos, SEEK_SET); - fi->seek(seg->fileoff, SEEK_SET); unsigned const len = seg->filesize; MemBuffer data(len); + fi->seek(seg->fileoff, SEEK_SET); fi->readx(data, len); + unsigned const pos = o__mod_init_func - seg->fileoff; + if (pos < seg->filesize) { + if (*(unsigned *)(pos + data) != (unsigned)prev_mod_init_func) { + throwCantPack("__mod_init_func inconsistent"); + } + *(unsigned *)(pos + data) = (unsigned)entryVMA; + } + fo->seek(opos, SEEK_SET); fo->write(data, len); opos += len; } } } break; - case Mach_segment_command::LC_SYMTAB: { + case Mach_command::LC_SYMTAB: { Mach_symtab_command cmd; memcpy(&cmd, seg, sizeof(cmd)); if (o_end_txt <= cmd.symoff) { cmd.symoff += slide; } if (o_end_txt <= cmd.stroff) { cmd.stroff += slide; } @@ -1018,7 +974,7 @@ void PackMachBase::pack4dylib( // append PackHeader fo->rewrite(&cmd, sizeof(cmd)); hdrpos += sizeof(cmd); } break; - case Mach_segment_command::LC_DYSYMTAB: { + case Mach_command::LC_DYSYMTAB: { Mach_dysymtab_command cmd; memcpy(&cmd, seg, sizeof(cmd)); if (o_end_txt <= cmd.tocoff) { cmd.tocoff += slide; } if (o_end_txt <= cmd.modtaboff) { cmd.modtaboff += slide; } @@ -1030,18 +986,9 @@ void PackMachBase::pack4dylib( // append PackHeader fo->rewrite(&cmd, sizeof(cmd)); hdrpos += sizeof(cmd); } break; - case Mach_segment_command::LC_SEGMENT_SPLIT_INFO: { - Mach_segsplit_info_command cmd; memcpy(&cmd, seg, sizeof(cmd)); - if (o_end_txt <= cmd.dataoff) { cmd.dataoff += slide; } - fo->seek(hdrpos, SEEK_SET); - fo->rewrite(&cmd, sizeof(cmd)); - hdrpos += sizeof(cmd); - } break; } // end 'switch' fo->seek(opos, SEEK_SET); // BUG: "fo->seek(0, SEEK_END);" is broken - // offset of p_info in compressed file - overlay_offset = sizeof(mhdro) + mhdro.sizeofcmds + sizeof(linfo); PackMachBase::pack4(fo, ft); } @@ -1069,7 +1016,7 @@ template void PackMachBase::pack3(OutputFile *fo, Filter &ft) // append loader { TE32 disp; - upx_uint32_t const zero = 0; + upx_uint64_t const zero = 0; unsigned len = fo->getBytesWritten(); fo->write(&zero, 3& (0u-len)); len += (3& (0u-len)); @@ -1078,15 +1025,18 @@ void PackMachBase::pack3(OutputFile *fo, Filter &ft) // append loader fo->write(&disp, sizeof(disp)); len += sizeof(disp); - char page[~PAGE_MASK]; memset(page, 0, sizeof(page)); - fo->write(page, ~PAGE_MASK & (0u - len)); - len += ~PAGE_MASK & (0u - len); - segLINK.fileoff = len; + if (Mach_header::MH_DYLIB != my_filetype) { + // Why does MH_EXECUTE do this? + char page[~PAGE_MASK]; memset(page, 0, sizeof(page)); + fo->write(page, ~PAGE_MASK & (0u - len)); + len += ~PAGE_MASK & (0u - len); + segLINK.fileoff = len; + } - threado_setPC(len + segTEXT.vmaddr); /* entry address */ + threado_setPC(entryVMA= len + segTEXT.vmaddr); /* entry address */ super::pack3(fo, ft); - len = fo->getBytesWritten(); - fo->write(&zero, 7& (0u-len)); + fo->write(&zero, 7& (0u-len)); // FIXME: align(4) ? + segTEXT.vmsize = len = fo->getBytesWritten(); } void PackDylibI386::pack3(OutputFile *fo, Filter &ft) // append loader @@ -1100,7 +1050,7 @@ void PackDylibI386::pack3(OutputFile *fo, Filter &ft) // append loader disp = prev_mod_init_func; fo->write(&disp, sizeof(disp)); // user .init_address - disp = sizeof(mhdro) + mhdro.sizeofcmds + sizeof(l_info) + sizeof(p_info); + disp = secTEXT.offset + sizeof(l_info) + sizeof(p_info); fo->write(&disp, sizeof(disp)); // src offset(compressed __TEXT) disp = len - disp - 3*sizeof(disp); @@ -1127,11 +1077,11 @@ void PackDylibAMD64::pack3(OutputFile *fo, Filter &ft) // append loader disp = prev_mod_init_func; fo->write(&disp, sizeof(disp)); // user .init_address - disp = sizeof(mhdro) + mhdro.sizeofcmds + sizeof(l_info) + sizeof(p_info); - fo->write(&disp, sizeof(disp)); // src offset(compressed __TEXT) + disp = secTEXT.offset + sizeof(l_info) + sizeof(p_info); + fo->write(&disp, sizeof(disp)); // src offset(b_info) - disp = len - disp - 3*sizeof(disp); - fo->write(&disp, sizeof(disp)); // length(compressed __TEXT) + disp = rawmseg[0].vmsize; + fo->write(&disp, sizeof(disp)); // __TEXT.vmsize when expanded unsigned const save_sz_mach_headers(sz_mach_headers); sz_mach_headers = 0; @@ -1150,7 +1100,7 @@ void PackDylibPPC32::pack3(OutputFile *fo, Filter &ft) // append loader disp = prev_mod_init_func; fo->write(&disp, sizeof(disp)); // user .init_address - disp = sizeof(mhdro) + mhdro.sizeofcmds + sizeof(l_info) + sizeof(p_info); + disp = secTEXT.offset + sizeof(l_info) + sizeof(p_info); fo->write(&disp, sizeof(disp)); // src offset(compressed __TEXT) disp = len - disp - 3*sizeof(disp); @@ -1173,7 +1123,7 @@ void PackDylibPPC64LE::pack3(OutputFile *fo, Filter &ft) // append loader disp = prev_mod_init_func; fo->write(&disp, sizeof(disp)); // user .init_address - disp = sizeof(mhdro) + mhdro.sizeofcmds + sizeof(l_info) + sizeof(p_info); + disp = secTEXT.offset + sizeof(l_info) + sizeof(p_info); fo->write(&disp, sizeof(disp)); // src offset(compressed __TEXT) disp = len - disp - 3*sizeof(disp); @@ -1261,7 +1211,7 @@ int PackMachBase::pack2(OutputFile *fo, Filter &ft) // append compressed bo unsigned exe_filesize_max = 0; for (k = 0; k < n_segment; ++k) if (lc_seg==msegcmd[k].cmd - && 0!=(Mach_segment_command::VM_PROT_EXECUTE & msegcmd[k].initprot) + && 0!=(Mach_command::VM_PROT_EXECUTE & msegcmd[k].initprot) && exe_filesize_max < msegcmd[k].filesize) { exe_filesize_max = (unsigned) msegcmd[k].filesize; } @@ -1278,7 +1228,7 @@ int PackMachBase::pack2(OutputFile *fo, Filter &ft) // append compressed bo x.size -= delta; } bool const do_filter = (msegcmd[k].filesize==exe_filesize_max) - && 0!=(Mach_segment_command::VM_PROT_EXECUTE & msegcmd[k].initprot); + && 0!=(Mach_command::VM_PROT_EXECUTE & msegcmd[k].initprot); packExtent(x, total_in, total_out, (do_filter ? &ft : 0 ), fo, hdr_u_len ); if (do_filter) { @@ -1310,7 +1260,7 @@ int PackMachBase::pack2(OutputFile *fo, Filter &ft) // append compressed bo void PackMachPPC32::pack1_setup_threado(OutputFile *const fo) { - threado.cmd = Mach_segment_command::LC_UNIXTHREAD; + threado.cmd = Mach_command::LC_UNIXTHREAD; threado.cmdsize = sizeof(threado); threado.flavor = my_thread_flavor; threado.count = my_thread_state_word_count; @@ -1320,7 +1270,7 @@ void PackMachPPC32::pack1_setup_threado(OutputFile *const fo) void PackMachPPC64LE::pack1_setup_threado(OutputFile *const fo) { - threado.cmd = Mach_segment_command::LC_UNIXTHREAD; + threado.cmd = Mach_command::LC_UNIXTHREAD; threado.cmdsize = sizeof(threado); threado.flavor = my_thread_flavor; threado.count = my_thread_state_word_count; @@ -1330,7 +1280,7 @@ void PackMachPPC64LE::pack1_setup_threado(OutputFile *const fo) void PackMachI386::pack1_setup_threado(OutputFile *const fo) { - threado.cmd = Mach_segment_command::LC_UNIXTHREAD; + threado.cmd = Mach_command::LC_UNIXTHREAD; threado.cmdsize = sizeof(threado); threado.flavor = my_thread_flavor; threado.count = my_thread_state_word_count; @@ -1340,7 +1290,7 @@ void PackMachI386::pack1_setup_threado(OutputFile *const fo) void PackMachAMD64::pack1_setup_threado(OutputFile *const fo) { - threado.cmd = Mach_segment_command::LC_UNIXTHREAD; + threado.cmd = Mach_command::LC_UNIXTHREAD; threado.cmdsize = sizeof(threado); threado.flavor = my_thread_flavor; threado.count = my_thread_state_word_count; @@ -1350,7 +1300,7 @@ void PackMachAMD64::pack1_setup_threado(OutputFile *const fo) void PackMachARMEL::pack1_setup_threado(OutputFile *const fo) { - threado.cmd = Mach_segment_command::LC_UNIXTHREAD; + threado.cmd = Mach_command::LC_UNIXTHREAD; threado.cmdsize = sizeof(threado); threado.flavor = my_thread_flavor; threado.count = my_thread_state_word_count; @@ -1360,7 +1310,7 @@ void PackMachARMEL::pack1_setup_threado(OutputFile *const fo) void PackMachARM64EL::pack1_setup_threado(OutputFile *const fo) { - threado.cmd = Mach_segment_command::LC_UNIXTHREAD; + threado.cmd = Mach_command::LC_UNIXTHREAD; threado.cmdsize = sizeof(threado); threado.flavor = my_thread_flavor; threado.count = my_thread_state_word_count; @@ -1416,12 +1366,12 @@ void PackMachBase::pack1(OutputFile *const fo, Filter &/*ft*/) // generate e segTEXT.fileoff = 0; segTEXT.filesize = 0; // adjust later segTEXT.maxprot = - Mach_segment_command::VM_PROT_READ | - Mach_segment_command::VM_PROT_WRITE | - Mach_segment_command::VM_PROT_EXECUTE; + Mach_command::VM_PROT_READ | + Mach_command::VM_PROT_WRITE | + Mach_command::VM_PROT_EXECUTE; segTEXT.initprot = - Mach_segment_command::VM_PROT_READ | - Mach_segment_command::VM_PROT_EXECUTE; + Mach_command::VM_PROT_READ | + Mach_command::VM_PROT_EXECUTE; segTEXT.nsects = 1; // secTEXT segTEXT.flags = 0; @@ -1452,8 +1402,8 @@ void PackMachBase::pack1(OutputFile *const fo, Filter &/*ft*/) // generate e segLINK.cmdsize = sizeof(segLINK); strncpy((char *)segLINK.segname, "__LINKEDIT", sizeof(segLINK.segname)); segLINK.nsects = 0; - segLINK.initprot = Mach_segment_command::VM_PROT_READ - | Mach_segment_command::VM_PROT_EXECUTE; + segLINK.initprot = Mach_command::VM_PROT_READ + | Mach_command::VM_PROT_EXECUTE; // Adjust later: .vmaddr .vmsize .fileoff .filesize if (my_filetype == Mach_header::MH_EXECUTE) { @@ -1463,8 +1413,8 @@ void PackMachBase::pack1(OutputFile *const fo, Filter &/*ft*/) // generate e for (unsigned j = 0; j < mhdro.ncmds -1; ++j, (cmdsize -= ptr1->cmdsize), ptr1 = (Mach_command const *)(ptr1->cmdsize + (char const *)ptr1)) { - Mach_segment_command const *const segptr = (Mach_segment_command const *)ptr1; if (lc_seg == ptr1->cmd) { + Mach_segment_command const *const segptr = (Mach_segment_command const *)ptr1; if (!strcmp("__LINKEDIT", segptr->segname)) { // Mach_command before __LINKEDIT pos += (char const *)ptr1 - (char const *)(1+ ptr0); @@ -1481,20 +1431,45 @@ void PackMachBase::pack1(OutputFile *const fo, Filter &/*ft*/) // generate e } } } - else { // not MH_EXECUTE; thus MH_DYLIB - fo->write(&segZERO, sizeof(segZERO)); - fo->write(&segXHDR, sizeof(segXHDR)); - fo->write(&secXHDR, sizeof(secXHDR)); - fo->write(&segTEXT, sizeof(segTEXT)); - fo->write(&secTEXT, sizeof(secTEXT)); - fo->write(&cmdUUID, sizeof(cmdUUID)); - fo->write(&segLINK, sizeof(segLINK)); - pack1_setup_threado(fo); + else if (my_filetype == Mach_header::MH_DYLIB) { + Mach_command const *ptr = (Mach_command const *)rawmseg; + unsigned cmdsize = mhdri.sizeofcmds; + for (unsigned j = 0; j < mhdri.ncmds; ++j, (cmdsize -= ptr->cmdsize), + ptr = (Mach_command const *)(ptr->cmdsize + (char const *)ptr)) { + if (lc_seg == ptr->cmd) { + Mach_segment_command const *const segptr = (Mach_segment_command const *)ptr; + Mach_section_command const *const secptr = (Mach_section_command const *)(1+ segptr); + if (!strcmp("__TEXT", segptr->segname)) { + if (!(1 <= segptr->nsects)) { + throwCantPack("TEXT.nsects == 0"); + } + mhdro.sizeofcmds += segTEXT.cmdsize - ptr->cmdsize; + strncpy((char *)secTEXT.sectname, "upxTEXT", sizeof(secTEXT.sectname)); + secTEXT.addr = secptr->addr; + secTEXT.size = secptr->size; // update later + secTEXT.offset = secptr->offset; + secTEXT.align = secptr->align; + fo->write(&segTEXT, sizeof(segTEXT)); + fo->write(&secTEXT, sizeof(secTEXT)); + } + else { // not __TEXT + fo->write(ptr, ptr->cmdsize); + } + } + else { // not LC_SEGMENT* + fo->write(ptr, ptr->cmdsize); + } + } memset(&linkitem, 0, sizeof(linkitem)); fo->write(&linkitem, sizeof(linkitem)); fo->write(rawmseg, mhdri.sizeofcmds); } sz_mach_headers = fo->getBytesWritten(); + unsigned gap = secTEXT.offset - sz_mach_headers; + MemBuffer filler(gap); + memset(filler, 0, gap); + fo->write(filler, gap); + sz_mach_headers += gap; memset((char *)&linfo, 0, sizeof(linfo)); fo->write(&linfo, sizeof(linfo)); @@ -1691,7 +1666,7 @@ int PackMachBase::canUnpack() } pos_next = segptr->filesize + segptr->fileoff; } - else if (Mach_segment_command::LC_UNIXTHREAD==ptr->cmd) { + else if (Mach_command::LC_UNIXTHREAD==ptr->cmd) { rip = entryVMA = threadc_getPC(ptr); } } @@ -1875,7 +1850,7 @@ bool PackMachBase::canPack() } switch (((Mach_uuid_command const *)ptr)->cmd) { default: break; - case Mach_segment_command::LC_UUID: { + case Mach_command::LC_UUID: { memcpy(&cmdUUID, ptr, sizeof(cmdUUID)); // remember the UUID // Set output UUID to be 1 more than the input UUID. for (unsigned k = 0; k < sizeof(cmdUUID.uuid); ++k) { @@ -1884,10 +1859,10 @@ bool PackMachBase::canPack() } } } break; - case Mach_segment_command::LC_VERSION_MIN_MACOSX: { + case Mach_command::LC_VERSION_MIN_MACOSX: { memcpy(&cmdVERMIN, ptr, sizeof(cmdVERMIN)); } break; - case Mach_segment_command::LC_SOURCE_VERSION: { + case Mach_command::LC_SOURCE_VERSION: { memcpy(&cmdSRCVER, ptr, sizeof(cmdSRCVER)); } break; } diff --git a/src/p_mach.h b/src/p_mach.h index fc034722..5436f930 100644 --- a/src/p_mach.h +++ b/src/p_mach.h @@ -287,7 +287,9 @@ template __packed_struct(Mach_linkedit_data_command) typedef typename TMachITypes::Word Word; - Word cmd; + Word cmd; // LC_CODE_SIGNATURE, LC_SEGMENT_SPLIT_INFO, + // LC_FUNCTION_STARTS, LC_DATA_IN_CODE, + // LC_DYLIB_CODE_SIGN_DRS, LC_LINKER_OPTIMIZATION_HINT Word cmdsize; Word dataoff; // file offset of data in __LINKEDIT segment Word datasize; // file size of data in __LINKEDIT segment @@ -391,26 +393,6 @@ __packed_struct(Mach_load_dylib_command) Mach_dylib dylib; __packed_struct_end() -template -__packed_struct(Mach_function_starts_command) - typedef typename TMachITypes::Word Word; - - Word cmd; - Word cmdsize; - Word dataoff; - Word datasize; -__packed_struct_end() - -template -__packed_struct(Mach_data_in_code_command) - typedef typename TMachITypes::Word Word; - - Word cmd; - Word cmdsize; - Word dataoff; - Word datasize; -__packed_struct_end() - } // namespace N_Mach namespace N_Mach32 { @@ -558,8 +540,6 @@ struct MachClass_32 typedef N_Mach::Mach_twolevel_hints_command Mach_twolevel_hints_command; typedef N_Mach::Mach_linkedit_data_command Mach_linkedit_data_command; typedef N_Mach::Mach_uuid_command Mach_uuid_command; - typedef N_Mach::Mach_data_in_code_command Mach_data_in_code_command; - typedef N_Mach::Mach_function_starts_command Mach_function_starts_command; typedef N_Mach::Mach_load_dylib_command Mach_load_dylib_command; typedef N_Mach::Mach_dylib Mach_dylib; typedef N_Mach::Mach_load_dylinker_command Mach_load_dylinker_command; @@ -602,8 +582,6 @@ struct MachClass_64 typedef N_Mach::Mach_twolevel_hints_command Mach_twolevel_hints_command; typedef N_Mach::Mach_linkedit_data_command Mach_linkedit_data_command; typedef N_Mach::Mach_uuid_command Mach_uuid_command; - typedef N_Mach::Mach_data_in_code_command Mach_data_in_code_command; - typedef N_Mach::Mach_function_starts_command Mach_function_starts_command; typedef N_Mach::Mach_load_dylib_command Mach_load_dylib_command; typedef N_Mach::Mach_dylib Mach_dylib; typedef N_Mach::Mach_load_dylinker_command Mach_load_dylinker_command; @@ -642,8 +620,6 @@ typedef MachClass_Host32::Mach_twolevel_hints_command Mach32_twolevel_hints_comm typedef MachClass_Host32::Mach_linkedit_data_command Mach32_linkedit_data_command; typedef MachClass_Host32::Mach_uuid_command Mach32_uuid_command; typedef MachClass_Host32::Mach_main_command Mach32_main_command; -typedef MachClass_Host32::Mach_data_in_code_command Mach32_data_in_code_command; -typedef MachClass_Host32::Mach_function_starts_command Mach32_function_starts_command; typedef MachClass_Host32::Mach_load_dylib_command Mach32_load_dylib_command; typedef MachClass_Host32::Mach_dylib Mach32_dylib; typedef MachClass_Host32::Mach_load_dylinker_command Mach32_load_dylinker_command; @@ -661,8 +637,6 @@ typedef MachClass_Host64::Mach_twolevel_hints_command Mach64_twolevel_hints_comm typedef MachClass_Host64::Mach_linkedit_data_command Mach64_linkedit_data_command; typedef MachClass_Host64::Mach_uuid_command Mach64_uuid_command; typedef MachClass_Host64::Mach_main_command Mach64_main_command; -typedef MachClass_Host64::Mach_data_in_code_command Mach64_data_in_code_command; -typedef MachClass_Host64::Mach_function_starts_command Mach64_function_starts_command; typedef MachClass_Host64::Mach_load_dylib_command Mach64_load_dylib_command; typedef MachClass_Host64::Mach_dylib Mach64_dylib; typedef MachClass_Host64::Mach_load_dylinker_command Mach64_load_dylinker_command; @@ -680,8 +654,6 @@ typedef MachClass_BE32::Mach_twolevel_hints_command MachBE32_twolevel_hints_co typedef MachClass_BE32::Mach_linkedit_data_command MachBE32_linkedit_data_command; typedef MachClass_BE32::Mach_uuid_command MachBE32_uuid_command; typedef MachClass_BE32::Mach_main_command MachBE32_main_command; -typedef MachClass_BE32::Mach_data_in_code_command MachBE32_data_in_code_command; -typedef MachClass_BE32::Mach_function_starts_command MachBE32_function_starts_command; typedef MachClass_BE32::Mach_load_dylib_command MachBE32_load_dylib_command; typedef MachClass_BE32::Mach_dylib MachBE32_dylib; typedef MachClass_BE32::Mach_load_dylinker_command MachBE32_load_dylinker_command; @@ -699,8 +671,6 @@ typedef MachClass_BE64::Mach_twolevel_hints_command MachBE64_twolevel_hints_co typedef MachClass_BE64::Mach_linkedit_data_command MachBE64_linkedit_data_command; typedef MachClass_BE64::Mach_uuid_command MachBE64_uuid_command; typedef MachClass_BE64::Mach_main_command MachBE64_main_command; -typedef MachClass_BE64::Mach_data_in_code_command MachBE64_data_in_code_command; -typedef MachClass_BE64::Mach_function_starts_command MachBE64_function_starts_command; typedef MachClass_BE64::Mach_load_dylib_command MachBE64_load_dylib_command; typedef MachClass_BE64::Mach_dylib MachBE64_dylib; typedef MachClass_BE64::Mach_load_dylinker_command MachBE64_load_dylinker_command; @@ -718,8 +688,6 @@ typedef MachClass_LE32::Mach_twolevel_hints_command MachLE32_twolevel_hints_co typedef MachClass_LE32::Mach_linkedit_data_command MachLE32_linkedit_data_command; typedef MachClass_LE32::Mach_uuid_command MachLE32_uuid_command; typedef MachClass_LE32::Mach_main_command MachLE32_main_command; -typedef MachClass_LE32::Mach_data_in_code_command MachLE32_data_in_code_command; -typedef MachClass_LE32::Mach_function_starts_command MachLE32_function_starts_command; typedef MachClass_LE32::Mach_load_dylib_command MachLE32_load_dylib_command; typedef MachClass_LE32::Mach_dylib MachLE32_dylib; typedef MachClass_LE32::Mach_load_dylinker_command MachLE32_load_dylinker_command; @@ -737,8 +705,6 @@ typedef MachClass_LE64::Mach_twolevel_hints_command MachLE64_twolevel_hints_co typedef MachClass_LE64::Mach_linkedit_data_command MachLE64_linkedit_data_command; typedef MachClass_LE64::Mach_uuid_command MachLE64_uuid_command; typedef MachClass_LE64::Mach_main_command MachLE64_main_command; -typedef MachClass_LE64::Mach_data_in_code_command MachLE64_data_in_code_command; -typedef MachClass_LE64::Mach_function_starts_command MachLE64_function_starts_command; typedef MachClass_LE64::Mach_load_dylib_command MachLE64_load_dylib_command; typedef MachClass_LE64::Mach_dylib MachLE64_dylib; typedef MachClass_LE64::Mach_load_dylinker_command MachLE64_load_dylinker_command; @@ -781,8 +747,6 @@ protected: typedef typename MachClass::Mach_linkedit_data_command Mach_linkedit_data_command; typedef typename MachClass::Mach_uuid_command Mach_uuid_command; typedef typename MachClass::Mach_main_command Mach_main_command; - typedef typename MachClass::Mach_data_in_code_command Mach_data_in_code_command; - typedef typename MachClass::Mach_function_starts_command Mach_function_starts_command; typedef typename MachClass::Mach_load_dylib_command Mach_load_dylib_command; typedef typename MachClass::Mach_dylib Mach_dylib; typedef typename MachClass::Mach_load_dylinker_command Mach_load_dylinker_command; diff --git a/src/p_mach_enum.h b/src/p_mach_enum.h index abefaeb0..2ce760aa 100644 --- a/src/p_mach_enum.h +++ b/src/p_mach_enum.h @@ -83,23 +83,31 @@ LC_LOAD_DYLINKER = 0xe, LC_ROUTINES = 0x11, LC_TWOLEVEL_HINTS= 0x16, + LC_LOAD_WEAK_DYLIB= (0x18 | LC_REQ_DYLD), LC_SEGMENT_64 = 0x19, LC_ROUTINES_64 = 0x1a, LC_UUID = 0x1b, LC_RPATH = 0x1c, LC_CODE_SIGNATURE = 0x1d, LC_SEGMENT_SPLIT_INFO = 0x1e, - LC_REEXPORT_DYLIB = 0x1f, + LC_REEXPORT_DYLIB = (0x1f | LC_REQ_DYLD), LC_LAZY_LOAD_DYLIB= 0x20, LC_ENCRYPTION_INFO= 0x21, LC_DYLD_INFO = 0x22, // compressed dyld information (10.6.x) LC_DYLD_INFO_ONLY = (0x22|LC_REQ_DYLD), LC_VERSION_MIN_MACOSX= 0x24, + LC_VERSION_MIN_IPHONEOS= 0x25, LC_FUNCTION_STARTS= 0x26, + LC_DYLD_ENVIRONMENT= 0x27, // string as environment variable LC_MAIN = (0x28|LC_REQ_DYLD), LC_DATA_IN_CODE = 0x29, LC_SOURCE_VERSION = 0x2a, + LC_DYLIB_CODE_SIGN_DRS= 0x2B, + LC_ENCRYPTION_INFO_64= 0x2C, + LC_VERSION_MIN_TVOS= 0x2F, + LC_VERSION_MIN_WATCHOS= 0x30, }; + enum { // maxprot VM_PROT_READ = 1, VM_PROT_WRITE = 2, diff --git a/src/stub/amd64-darwin.dylib-entry.h b/src/stub/amd64-darwin.dylib-entry.h index 74bc9f52..4e913aff 100644 --- a/src/stub/amd64-darwin.dylib-entry.h +++ b/src/stub/amd64-darwin.dylib-entry.h @@ -1,5 +1,5 @@ /* amd64-darwin.dylib-entry.h - created from amd64-darwin.dylib-entry.bin, 9652 (0x25b4) bytes + created from amd64-darwin.dylib-entry.bin, 9588 (0x2574) bytes This file is part of the UPX executable compressor. @@ -31,613 +31,609 @@ */ -#define STUB_AMD64_DARWIN_DYLIB_ENTRY_SIZE 9652 -#define STUB_AMD64_DARWIN_DYLIB_ENTRY_ADLER32 0xd0efe2c7 -#define STUB_AMD64_DARWIN_DYLIB_ENTRY_CRC32 0x9171affd +#define STUB_AMD64_DARWIN_DYLIB_ENTRY_SIZE 9588 +#define STUB_AMD64_DARWIN_DYLIB_ENTRY_ADLER32 0xf754e5e1 +#define STUB_AMD64_DARWIN_DYLIB_ENTRY_CRC32 0x32f1b0e7 -unsigned char stub_amd64_darwin_dylib_entry[9652] = { +unsigned char stub_amd64_darwin_dylib_entry[9588] = { /* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 */ 1, 0, 62, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0,240, 24, 0, 0, 0, 0, 0, 0, +/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 48, 25, 0, 0, 0, 0, 0, 0, /* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, -/* 0x0040 */ 243,144,235,252,204, 80, 85, 83,232, 0, 0, 0, 0, 85, 83, 81, -/* 0x0050 */ 82, 72, 1,254, 86, 72,137,254, 72,137,215, 49,219, 49,201, 72, -/* 0x0060 */ 131,205,255,232, 80, 0, 0, 0, 1,219,116, 2,243,195,139, 30, -/* 0x0070 */ 72,131,238,252, 17,219,138, 22,243,195, 72,141, 4, 47,131,249, -/* 0x0080 */ 5,138, 16,118, 33, 72,131,253,252,119, 27,131,233, 4,139, 16, -/* 0x0090 */ 72,131,192, 4,131,233, 4,137, 23, 72,141,127, 4,115,239,131, -/* 0x00a0 */ 193, 4,138, 16,116, 16, 72,255,192,136, 23,131,233, 1,138, 16, -/* 0x00b0 */ 72,141,127, 1,117,240,243,195,252, 65, 91, 65,128,248, 8,116, -/* 0x00c0 */ 13,233,172, 0, 0, 0, 72,255,198,136, 23, 72,255,199,138, 22, -/* 0x00d0 */ 1,219,117, 10,139, 30, 72,131,238,252, 17,219,138, 22,114,230, -/* 0x00e0 */ 141, 65, 1,235, 7,255,200, 65,255,211, 17,192, 65,255,211, 17, -/* 0x00f0 */ 192, 1,219,117, 10,139, 30, 72,131,238,252, 17,219,138, 22,115, -/* 0x0100 */ 228,131,232, 3,114, 29,193,224, 8, 15,182,210, 9,208, 72,255, -/* 0x0110 */ 198,131,240,255, 15,132, 0, 0, 0, 0,209,248, 72, 99,232,114, -/* 0x0120 */ 56,235, 14, 1,219,117, 8,139, 30, 72,131,238,252, 17,219,114, -/* 0x0130 */ 40,255,193, 1,219,117, 8,139, 30, 72,131,238,252, 17,219,114, -/* 0x0140 */ 24, 65,255,211, 17,201, 1,219,117, 8,139, 30, 72,131,238,252, -/* 0x0150 */ 17,219,115,237,131,193, 2,235, 5, 65,255,211, 17,201, 72,129, -/* 0x0160 */ 253, 0,251,255,255,131,209, 2,232, 0, 0, 0, 0,233, 92,255, -/* 0x0170 */ 255,255, 65,128,248, 5,116, 13,233,147, 0, 0, 0, 72,255,198, -/* 0x0180 */ 136, 23, 72,255,199,138, 22, 1,219,117, 10,139, 30, 72,131,238, -/* 0x0190 */ 252, 17,219,138, 22,114,230,141, 65, 1,235, 7,255,200, 65,255, -/* 0x01a0 */ 211, 17,192, 65,255,211, 17,192, 1,219,117, 10,139, 30, 72,131, -/* 0x01b0 */ 238,252, 17,219,138, 22,115,228,131,232, 3,114, 27,193,224, 8, -/* 0x01c0 */ 15,182,210, 9,208, 72,255,198,131,240,255, 15,132, 0, 0, 0, -/* 0x01d0 */ 0,209,248, 72, 99,232,235, 3, 65,255,211, 17,201, 65,255,211, -/* 0x01e0 */ 17,201,117, 24,255,193, 65,255,211, 17,201, 1,219,117, 8,139, -/* 0x01f0 */ 30, 72,131,238,252, 17,219,115,237,131,193, 2, 72,129,253, 0, -/* 0x0200 */ 251,255,255,131,209, 1,232, 0, 0, 0, 0,233,117,255,255,255, -/* 0x0210 */ 65,128,248, 2,116, 13,233,133, 0, 0, 0, 72,255,198,136, 23, -/* 0x0220 */ 72,255,199,138, 22, 1,219,117, 10,139, 30, 72,131,238,252, 17, -/* 0x0230 */ 219,138, 22,114,230,141, 65, 1, 65,255,211, 17,192, 1,219,117, -/* 0x0240 */ 10,139, 30, 72,131,238,252, 17,219,138, 22,115,235,131,232, 3, -/* 0x0250 */ 114, 23,193,224, 8, 15,182,210, 9,208, 72,255,198,131,240,255, -/* 0x0260 */ 15,132, 0, 0, 0, 0, 72, 99,232,141, 65, 1, 65,255,211, 17, -/* 0x0270 */ 201, 65,255,211, 17,201,117, 24,137,193,131,192, 2, 65,255,211, -/* 0x0280 */ 17,201, 1,219,117, 8,139, 30, 72,131,238,252, 17,219,115,237, -/* 0x0290 */ 72,129,253, 0,243,255,255, 17,193,232, 0, 0, 0, 0,235,131, -/* 0x02a0 */ 65,128,248, 14, 15,133, 0, 0, 0, 0, 85, 72,137,229, 68,139, -/* 0x02b0 */ 9, 73,137,208, 72,137,242, 72,141,119, 2, 86,138, 7,255,202, -/* 0x02c0 */ 136,193, 36, 7,192,233, 3, 72,199,195, 0,253,255,255, 72,211, -/* 0x02d0 */ 227,136,193, 72,141,156, 92,136,241,255,255, 72,131,227,192,106, -/* 0x02e0 */ 0, 72, 57,220,117,249, 83, 72,141,123, 8,138, 78,255,255,202, -/* 0x02f0 */ 136, 71, 2,136,200,192,233, 4,136, 79, 1, 36, 15,136, 7, 72, -/* 0x0300 */ 141, 79,252, 80, 65, 87, 72,141, 71, 4, 69, 49,255, 65, 86, 65, -/* 0x0310 */ 190, 1, 0, 0, 0, 65, 85, 69, 49,237, 65, 84, 85, 83, 72,137, -/* 0x0320 */ 76, 36,240, 72,137, 68, 36,216,184, 1, 0, 0, 0, 72,137,116, -/* 0x0330 */ 36,248, 76,137, 68, 36,232,137,195, 68,137, 76, 36,228, 15,182, -/* 0x0340 */ 79, 2,211,227,137,217, 72,139, 92, 36, 56,255,201,137, 76, 36, -/* 0x0350 */ 212, 15,182, 79, 1,211,224, 72,139, 76, 36,240,255,200,137, 68, -/* 0x0360 */ 36,208, 15,182, 7,199, 1, 0, 0, 0, 0,199, 68, 36,200, 0, -/* 0x0370 */ 0, 0, 0,199, 68, 36,196, 1, 0, 0, 0,199, 68, 36,192, 1, -/* 0x0380 */ 0, 0, 0,199, 68, 36,188, 1, 0, 0, 0,199, 3, 0, 0, 0, -/* 0x0390 */ 0,137, 68, 36,204, 15,182, 79, 1, 1,193,184, 0, 3, 0, 0, -/* 0x03a0 */ 211,224, 49,201,141,184, 54, 7, 0, 0, 65, 57,255,115, 19, 72, -/* 0x03b0 */ 139, 92, 36,216,137,200,255,193, 57,249,102,199, 4, 67, 0, 4, -/* 0x03c0 */ 235,235, 72,139,124, 36,248,137,208, 69, 49,210, 65,131,203,255, -/* 0x03d0 */ 49,210, 73,137,252, 73, 1,196, 76, 57,231, 15,132,239, 8, 0, -/* 0x03e0 */ 0, 15,182, 7, 65,193,226, 8,255,194, 72,255,199, 65, 9,194, -/* 0x03f0 */ 131,250, 4,126,227, 68, 59,124, 36,228, 15,131,218, 8, 0, 0, -/* 0x0400 */ 139, 68, 36,212, 72, 99, 92, 36,200, 72,139, 84, 36,216, 68, 33, -/* 0x0410 */ 248,137, 68, 36,184, 72, 99,108, 36,184, 72,137,216, 72,193,224, -/* 0x0420 */ 4, 72, 1,232, 65,129,251,255,255,255, 0, 76,141, 12, 66,119, -/* 0x0430 */ 26, 76, 57,231, 15,132,150, 8, 0, 0, 15,182, 7, 65,193,226, -/* 0x0440 */ 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183, 17, 68, -/* 0x0450 */ 137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194, 15,131, -/* 0x0460 */ 197, 1, 0, 0, 65,137,195,184, 0, 8, 0, 0, 72,139, 92, 36, -/* 0x0470 */ 216, 41,200, 15,182, 76, 36,204,190, 1, 0, 0, 0,193,248, 5, -/* 0x0480 */ 141, 4, 2, 65, 15,182,213,102, 65,137, 1,139, 68, 36,208, 68, -/* 0x0490 */ 33,248,211,224,185, 8, 0, 0, 0, 43, 76, 36,204,211,250, 1, -/* 0x04a0 */ 208,105,192, 0, 3, 0, 0,131,124, 36,200, 6,137,192, 76,141, -/* 0x04b0 */ 140, 67,108, 14, 0, 0, 15,142,184, 0, 0, 0, 72,139, 84, 36, -/* 0x04c0 */ 232, 68,137,248, 68, 41,240, 15,182, 44, 2, 1,237, 72, 99,214, -/* 0x04d0 */ 137,235,129,227, 0, 1, 0, 0, 65,129,251,255,255,255, 0, 72, -/* 0x04e0 */ 99,195, 73,141, 4, 65, 76,141, 4, 80,119, 26, 76, 57,231, 15, -/* 0x04f0 */ 132,219, 7, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, -/* 0x0500 */ 72,255,199, 65, 9,194, 65, 15,183,144, 0, 2, 0, 0, 68,137, -/* 0x0510 */ 216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, 32, 65, -/* 0x0520 */ 137,195,184, 0, 8, 0, 0, 1,246, 41,200,193,248, 5,133,219, -/* 0x0530 */ 141, 4, 2,102, 65,137,128, 0, 2, 0, 0,116, 33,235, 45, 65, -/* 0x0540 */ 41,195, 65, 41,194,137,208,102,193,232, 5,141,116, 54, 1,102, -/* 0x0550 */ 41,194,133,219,102, 65,137,144, 0, 2, 0, 0,116, 14,129,254, -/* 0x0560 */ 255, 0, 0, 0, 15,142, 97,255,255,255,235,120,129,254,255, 0, -/* 0x0570 */ 0, 0,127,112, 72, 99,198, 65,129,251,255,255,255, 0, 77,141, -/* 0x0580 */ 4, 65,119, 26, 76, 57,231, 15,132, 67, 7, 0, 0, 15,182, 7, -/* 0x0590 */ 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15, -/* 0x05a0 */ 183, 16, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57, -/* 0x05b0 */ 194,115, 24, 65,137,195,184, 0, 8, 0, 0, 1,246, 41,200,193, -/* 0x05c0 */ 248, 5,141, 4, 2,102, 65,137, 0,235,161, 65, 41,195, 65, 41, -/* 0x05d0 */ 194,137,208,102,193,232, 5,141,116, 54, 1,102, 41,194,102, 65, -/* 0x05e0 */ 137, 16,235,136, 72,139, 76, 36,232, 68,137,248, 65,255,199, 65, -/* 0x05f0 */ 137,245, 64,136, 52, 1,131,124, 36,200, 3,127, 13,199, 68, 36, -/* 0x0600 */ 200, 0, 0, 0, 0,233,166, 6, 0, 0,139, 84, 36,200,139, 68, -/* 0x0610 */ 36,200,131,234, 3,131,232, 6,131,124, 36,200, 9, 15, 79,208, -/* 0x0620 */ 137, 84, 36,200,233,135, 6, 0, 0, 65, 41,195, 65, 41,194,137, -/* 0x0630 */ 208,102,193,232, 5,102, 41,194, 72,139, 68, 36,216, 65,129,251, -/* 0x0640 */ 255,255,255, 0,102, 65,137, 17, 72,141, 52, 88,119, 26, 76, 57, -/* 0x0650 */ 231, 15,132,121, 6, 0, 0, 15,182, 7, 65,193,226, 8, 65,193, -/* 0x0660 */ 227, 8, 72,255,199, 65, 9,194, 15,183,150,128, 1, 0, 0, 68, -/* 0x0670 */ 137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, 78, -/* 0x0680 */ 65,137,195,184, 0, 8, 0, 0, 76,139, 76, 36,216, 41,200,139, -/* 0x0690 */ 76, 36,196, 68,137,116, 36,196,193,248, 5,141, 4, 2,139, 84, -/* 0x06a0 */ 36,192,137, 76, 36,192,102,137,134,128, 1, 0, 0, 49,192,131, -/* 0x06b0 */ 124, 36,200, 6,137, 84, 36,188, 15,159,192, 73,129,193,100, 6, -/* 0x06c0 */ 0, 0,141, 4, 64,137, 68, 36,200,233, 84, 2, 0, 0, 65, 41, -/* 0x06d0 */ 195, 65, 41,194,137,208,102,193,232, 5,102, 41,194, 65,129,251, -/* 0x06e0 */ 255,255,255, 0,102,137,150,128, 1, 0, 0,119, 26, 76, 57,231, -/* 0x06f0 */ 15,132,218, 5, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, -/* 0x0700 */ 8, 72,255,199, 65, 9,194, 15,183,150,152, 1, 0, 0, 68,137, -/* 0x0710 */ 216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194, 15,131,208, -/* 0x0720 */ 0, 0, 0, 65,184, 0, 8, 0, 0, 65,137,195, 72,193,227, 5, -/* 0x0730 */ 68,137,192, 41,200,193,248, 5,141, 4, 2,102,137,134,152, 1, -/* 0x0740 */ 0, 0, 72,139, 68, 36,216, 72, 1,216, 65,129,251,255,255,255, -/* 0x0750 */ 0, 72,141, 52,104,119, 26, 76, 57,231, 15,132,112, 5, 0, 0, -/* 0x0760 */ 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9, -/* 0x0770 */ 194, 15,183,150,224, 1, 0, 0, 68,137,216,193,232, 11, 15,183, -/* 0x0780 */ 202, 15,175,193, 65, 57,194,115, 79, 65, 41,200, 65,137,195, 65, -/* 0x0790 */ 193,248, 5, 69,133,255, 66,141, 4, 2,102,137,134,224, 1, 0, -/* 0x07a0 */ 0, 15,132, 41, 5, 0, 0, 49,192,131,124, 36,200, 6, 72,139, -/* 0x07b0 */ 92, 36,232, 15,159,192,141, 68, 0, 9,137, 68, 36,200, 68,137, -/* 0x07c0 */ 248, 68, 41,240, 68, 15,182, 44, 3, 68,137,248, 65,255,199, 68, -/* 0x07d0 */ 136, 44, 3,233,216, 4, 0, 0, 65, 41,195, 65, 41,194,137,208, -/* 0x07e0 */ 102,193,232, 5,102, 41,194,102,137,150,224, 1, 0, 0,233, 17, -/* 0x07f0 */ 1, 0, 0, 65, 41,195, 65, 41,194,137,208,102,193,232, 5,102, -/* 0x0800 */ 41,194, 65,129,251,255,255,255, 0,102,137,150,152, 1, 0, 0, -/* 0x0810 */ 119, 26, 76, 57,231, 15,132,181, 4, 0, 0, 15,182, 7, 65,193, -/* 0x0820 */ 226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15,183,150,176, -/* 0x0830 */ 1, 0, 0, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, -/* 0x0840 */ 57,194,115, 32, 65,137,195,184, 0, 8, 0, 0, 41,200,193,248, -/* 0x0850 */ 5,141, 4, 2,102,137,134,176, 1, 0, 0,139, 68, 36,196,233, -/* 0x0860 */ 152, 0, 0, 0, 65, 41,195, 65, 41,194,137,208,102,193,232, 5, -/* 0x0870 */ 102, 41,194, 65,129,251,255,255,255, 0,102,137,150,176, 1, 0, -/* 0x0880 */ 0,119, 26, 76, 57,231, 15,132, 68, 4, 0, 0, 15,182, 7, 65, -/* 0x0890 */ 193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15,183,150, -/* 0x08a0 */ 200, 1, 0, 0, 68,137,216,193,232, 11, 15,183,202, 15,175,193, -/* 0x08b0 */ 65, 57,194,115, 29, 65,137,195,184, 0, 8, 0, 0, 41,200,193, -/* 0x08c0 */ 248, 5,141, 4, 2,102,137,134,200, 1, 0, 0,139, 68, 36,192, -/* 0x08d0 */ 235, 34, 65, 41,195, 65, 41,194,137,208,102,193,232, 5,102, 41, -/* 0x08e0 */ 194,139, 68, 36,188,102,137,150,200, 1, 0, 0,139, 84, 36,192, -/* 0x08f0 */ 137, 84, 36,188,139, 76, 36,196,137, 76, 36,192, 68,137,116, 36, -/* 0x0900 */ 196, 65,137,198, 49,192,131,124, 36,200, 6, 76,139, 76, 36,216, -/* 0x0910 */ 15,159,192, 73,129,193,104, 10, 0, 0,141, 68, 64, 8,137, 68, -/* 0x0920 */ 36,200, 65,129,251,255,255,255, 0,119, 26, 76, 57,231, 15,132, -/* 0x0930 */ 156, 3, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72, -/* 0x0940 */ 255,199, 65, 9,194, 65, 15,183, 17, 68,137,216,193,232, 11, 15, -/* 0x0950 */ 183,202, 15,175,193, 65, 57,194,115, 39, 65,137,195,184, 0, 8, -/* 0x0960 */ 0, 0, 69, 49,237, 41,200,193,248, 5,141, 4, 2,102, 65,137, -/* 0x0970 */ 1, 72, 99, 68, 36,184, 72,193,224, 4, 77,141, 68, 1, 4,235, -/* 0x0980 */ 120, 65, 41,195, 65, 41,194,137,208,102,193,232, 5,102, 41,194, -/* 0x0990 */ 65,129,251,255,255,255, 0,102, 65,137, 17,119, 26, 76, 57,231, -/* 0x09a0 */ 15,132, 42, 3, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, -/* 0x09b0 */ 8, 72,255,199, 65, 9,194, 65, 15,183, 81, 2, 68,137,216,193, -/* 0x09c0 */ 232, 11, 15,183,202, 15,175,193, 65, 57,194,115, 52, 65,137,195, -/* 0x09d0 */ 184, 0, 8, 0, 0, 65,189, 8, 0, 0, 0, 41,200,193,248, 5, -/* 0x09e0 */ 141, 4, 2,102, 65,137, 65, 2, 72, 99, 68, 36,184, 72,193,224, -/* 0x09f0 */ 4, 77,141,132, 1, 4, 1, 0, 0, 65,185, 3, 0, 0, 0,235, -/* 0x0a00 */ 39, 65, 41,195, 65, 41,194,137,208,102,193,232, 5, 77,141,129, -/* 0x0a10 */ 4, 2, 0, 0, 65,189, 16, 0, 0, 0,102, 41,194,102, 65,137, -/* 0x0a20 */ 81, 2, 65,185, 8, 0, 0, 0, 68,137,203,189, 1, 0, 0, 0, -/* 0x0a30 */ 72, 99,197, 65,129,251,255,255,255, 0, 73,141, 52, 64,119, 26, -/* 0x0a40 */ 76, 57,231, 15,132,135, 2, 0, 0, 15,182, 7, 65,193,226, 8, -/* 0x0a50 */ 65,193,227, 8, 72,255,199, 65, 9,194, 15,183, 14, 68,137,216, -/* 0x0a60 */ 193,232, 11, 15,183,209, 15,175,194, 65, 57,194,115, 23, 65,137, -/* 0x0a70 */ 195,184, 0, 8, 0, 0, 1,237, 41,208,193,248, 5,141, 4, 1, -/* 0x0a80 */ 102,137, 6,235, 22, 65, 41,195, 65, 41,194,137,200,102,193,232, -/* 0x0a90 */ 5,141,108, 45, 1,102, 41,193,102,137, 14,255,203,117,145,184, -/* 0x0aa0 */ 1, 0, 0, 0, 68,137,201,211,224, 41,197, 68, 1,237,131,124, -/* 0x0ab0 */ 36,200, 3, 15,143,194, 1, 0, 0,131, 68, 36,200, 7,184, 3, -/* 0x0ac0 */ 0, 0, 0,131,253, 4, 15, 76,197, 72,139, 92, 36,216, 65,184, -/* 0x0ad0 */ 1, 0, 0, 0, 72,152, 72,193,224, 7, 76,141,140, 3, 96, 3, -/* 0x0ae0 */ 0, 0,187, 6, 0, 0, 0, 73, 99,192, 65,129,251,255,255,255, -/* 0x0af0 */ 0, 73,141, 52, 65,119, 26, 76, 57,231, 15,132,208, 1, 0, 0, -/* 0x0b00 */ 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9, -/* 0x0b10 */ 194, 15,183, 22, 68,137,216,193,232, 11, 15,183,202, 15,175,193, -/* 0x0b20 */ 65, 57,194,115, 24, 65,137,195,184, 0, 8, 0, 0, 69, 1,192, -/* 0x0b30 */ 41,200,193,248, 5,141, 4, 2,102,137, 6,235, 23, 65, 41,195, -/* 0x0b40 */ 65, 41,194,137,208,102,193,232, 5, 71,141, 68, 0, 1,102, 41, -/* 0x0b50 */ 194,102,137, 22,255,203,117,143, 65,131,232, 64, 65,131,248, 3, -/* 0x0b60 */ 69,137,198, 15,142, 13, 1, 0, 0, 65,131,230, 1, 68,137,192, -/* 0x0b70 */ 209,248, 65,131,206, 2, 65,131,248, 13,141,112,255,127, 35,137, -/* 0x0b80 */ 241, 72,139, 92, 36,216, 73, 99,192, 65,211,230, 72, 1,192, 68, -/* 0x0b90 */ 137,242, 72,141, 20, 83, 72, 41,194, 76,141,138, 94, 5, 0, 0, -/* 0x0ba0 */ 235, 81,141,112,251, 65,129,251,255,255,255, 0,119, 26, 76, 57, -/* 0x0bb0 */ 231, 15,132, 25, 1, 0, 0, 15,182, 7, 65,193,226, 8, 65,193, -/* 0x0bc0 */ 227, 8, 72,255,199, 65, 9,194, 65,209,235, 69, 1,246, 69, 57, -/* 0x0bd0 */ 218,114, 7, 69, 41,218, 65,131,206, 1,255,206,117,199, 76,139, -/* 0x0be0 */ 76, 36,216, 65,193,230, 4,190, 4, 0, 0, 0, 73,129,193, 68, -/* 0x0bf0 */ 6, 0, 0, 65,189, 1, 0, 0, 0,187, 1, 0, 0, 0, 72, 99, -/* 0x0c00 */ 195, 65,129,251,255,255,255, 0, 77,141, 4, 65,119, 26, 76, 57, -/* 0x0c10 */ 231, 15,132,185, 0, 0, 0, 15,182, 7, 65,193,226, 8, 65,193, -/* 0x0c20 */ 227, 8, 72,255,199, 65, 9,194, 65, 15,183, 16, 68,137,216,193, -/* 0x0c30 */ 232, 11, 15,183,202, 15,175,193, 65, 57,194,115, 24, 65,137,195, -/* 0x0c40 */ 184, 0, 8, 0, 0, 1,219, 41,200,193,248, 5,141, 4, 2,102, -/* 0x0c50 */ 65,137, 0,235, 26, 65, 41,195, 65, 41,194,137,208,102,193,232, -/* 0x0c60 */ 5,141, 92, 27, 1, 69, 9,238,102, 41,194,102, 65,137, 16, 69, -/* 0x0c70 */ 1,237,255,206,117,136, 65,255,198,116, 64,131,197, 2, 69, 57, -/* 0x0c80 */ 254,119, 77, 72,139, 84, 36,232, 68,137,248, 68, 41,240, 68, 15, -/* 0x0c90 */ 182, 44, 2, 68,137,248, 65,255,199,255,205, 68,136, 44, 2, 15, -/* 0x0ca0 */ 149,194, 49,192, 68, 59,124, 36,228, 15,146,192,133,194,117,211, -/* 0x0cb0 */ 68, 59,124, 36,228, 15,130, 69,247,255,255, 65,129,251,255,255, -/* 0x0cc0 */ 255, 0,119, 22, 76, 57,231,184, 1, 0, 0, 0,116, 35,235, 7, -/* 0x0cd0 */ 184, 1, 0, 0, 0,235, 26, 72,255,199,137,248, 43, 68, 36,248, -/* 0x0ce0 */ 72,139, 76, 36,240, 72,139, 92, 36, 56,137, 1, 68,137, 59, 49, -/* 0x0cf0 */ 192, 91, 93, 65, 92, 65, 93, 65, 94, 65, 95, 65, 87, 72,141, 71, -/* 0x0d00 */ 4, 69, 49,255, 65, 86, 65,190, 1, 0, 0, 0, 65, 85, 69, 49, -/* 0x0d10 */ 237, 65, 84, 85, 83, 72,137, 76, 36,240, 72,137, 68, 36,216,184, -/* 0x0d20 */ 1, 0, 0, 0, 72,137,116, 36,248, 76,137, 68, 36,232,137,195, -/* 0x0d30 */ 68,137, 76, 36,228, 15,182, 79, 2,211,227,137,217, 72,139, 92, -/* 0x0d40 */ 36, 56,255,201,137, 76, 36,212, 15,182, 79, 1,211,224, 72,139, -/* 0x0d50 */ 76, 36,240,255,200,137, 68, 36,208, 15,182, 7,199, 1, 0, 0, -/* 0x0d60 */ 0, 0,199, 68, 36,200, 0, 0, 0, 0,199, 68, 36,196, 1, 0, -/* 0x0d70 */ 0, 0,199, 68, 36,192, 1, 0, 0, 0,199, 68, 36,188, 1, 0, -/* 0x0d80 */ 0, 0,199, 3, 0, 0, 0, 0,137, 68, 36,204, 15,182, 79, 1, -/* 0x0d90 */ 1,193,184, 0, 3, 0, 0,211,224, 49,201,141,184, 54, 7, 0, -/* 0x0da0 */ 0, 65, 57,255,115, 19, 72,139, 92, 36,216,137,200,255,193, 57, -/* 0x0db0 */ 249,102,199, 4, 67, 0, 4,235,235, 72,139,124, 36,248,137,208, -/* 0x0dc0 */ 69, 49,210, 65,131,203,255, 49,210, 73,137,252, 73, 1,196, 76, -/* 0x0dd0 */ 57,231, 15,132,239, 8, 0, 0, 15,182, 7, 65,193,226, 8,255, -/* 0x0de0 */ 194, 72,255,199, 65, 9,194,131,250, 4,126,227, 68, 59,124, 36, -/* 0x0df0 */ 228, 15,131,218, 8, 0, 0,139, 68, 36,212, 72, 99, 92, 36,200, -/* 0x0e00 */ 72,139, 84, 36,216, 68, 33,248,137, 68, 36,184, 72, 99,108, 36, -/* 0x0e10 */ 184, 72,137,216, 72,193,224, 4, 72, 1,232, 65,129,251,255,255, -/* 0x0e20 */ 255, 0, 76,141, 12, 66,119, 26, 76, 57,231, 15,132,150, 8, 0, -/* 0x0e30 */ 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, -/* 0x0e40 */ 9,194, 65, 15,183, 17, 68,137,216,193,232, 11, 15,183,202, 15, -/* 0x0e50 */ 175,193, 65, 57,194, 15,131,197, 1, 0, 0, 65,137,195,184, 0, -/* 0x0e60 */ 8, 0, 0, 72,139, 92, 36,216, 41,200, 15,182, 76, 36,204,190, -/* 0x0e70 */ 1, 0, 0, 0,193,248, 5,141, 4, 2, 65, 15,182,213,102, 65, -/* 0x0e80 */ 137, 1,139, 68, 36,208, 68, 33,248,211,224,185, 8, 0, 0, 0, -/* 0x0e90 */ 43, 76, 36,204,211,250, 1,208,105,192, 0, 3, 0, 0,131,124, -/* 0x0ea0 */ 36,200, 6,137,192, 76,141,140, 67,108, 14, 0, 0, 15,142,184, -/* 0x0eb0 */ 0, 0, 0, 72,139, 84, 36,232, 68,137,248, 68, 41,240, 15,182, -/* 0x0ec0 */ 44, 2, 1,237, 72, 99,214,137,235,129,227, 0, 1, 0, 0, 65, -/* 0x0ed0 */ 129,251,255,255,255, 0, 72, 99,195, 73,141, 4, 65, 76,141, 4, -/* 0x0ee0 */ 80,119, 26, 76, 57,231, 15,132,219, 7, 0, 0, 15,182, 7, 65, -/* 0x0ef0 */ 193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183, -/* 0x0f00 */ 144, 0, 2, 0, 0, 68,137,216,193,232, 11, 15,183,202, 15,175, -/* 0x0f10 */ 193, 65, 57,194,115, 32, 65,137,195,184, 0, 8, 0, 0, 1,246, -/* 0x0f20 */ 41,200,193,248, 5,133,219,141, 4, 2,102, 65,137,128, 0, 2, -/* 0x0f30 */ 0, 0,116, 33,235, 45, 65, 41,195, 65, 41,194,137,208,102,193, -/* 0x0f40 */ 232, 5,141,116, 54, 1,102, 41,194,133,219,102, 65,137,144, 0, -/* 0x0f50 */ 2, 0, 0,116, 14,129,254,255, 0, 0, 0, 15,142, 97,255,255, -/* 0x0f60 */ 255,235,120,129,254,255, 0, 0, 0,127,112, 72, 99,198, 65,129, -/* 0x0f70 */ 251,255,255,255, 0, 77,141, 4, 65,119, 26, 76, 57,231, 15,132, -/* 0x0f80 */ 67, 7, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72, -/* 0x0f90 */ 255,199, 65, 9,194, 65, 15,183, 16, 68,137,216,193,232, 11, 15, -/* 0x0fa0 */ 183,202, 15,175,193, 65, 57,194,115, 24, 65,137,195,184, 0, 8, -/* 0x0fb0 */ 0, 0, 1,246, 41,200,193,248, 5,141, 4, 2,102, 65,137, 0, -/* 0x0fc0 */ 235,161, 65, 41,195, 65, 41,194,137,208,102,193,232, 5,141,116, -/* 0x0fd0 */ 54, 1,102, 41,194,102, 65,137, 16,235,136, 72,139, 76, 36,232, -/* 0x0fe0 */ 68,137,248, 65,255,199, 65,137,245, 64,136, 52, 1,131,124, 36, -/* 0x0ff0 */ 200, 3,127, 13,199, 68, 36,200, 0, 0, 0, 0,233,166, 6, 0, -/* 0x1000 */ 0,139, 84, 36,200,139, 68, 36,200,131,234, 3,131,232, 6,131, -/* 0x1010 */ 124, 36,200, 9, 15, 79,208,137, 84, 36,200,233,135, 6, 0, 0, -/* 0x1020 */ 65, 41,195, 65, 41,194,137,208,102,193,232, 5,102, 41,194, 72, -/* 0x1030 */ 139, 68, 36,216, 65,129,251,255,255,255, 0,102, 65,137, 17, 72, -/* 0x1040 */ 141, 52, 88,119, 26, 76, 57,231, 15,132,121, 6, 0, 0, 15,182, -/* 0x1050 */ 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15, -/* 0x1060 */ 183,150,128, 1, 0, 0, 68,137,216,193,232, 11, 15,183,202, 15, -/* 0x1070 */ 175,193, 65, 57,194,115, 78, 65,137,195,184, 0, 8, 0, 0, 76, -/* 0x1080 */ 139, 76, 36,216, 41,200,139, 76, 36,196, 68,137,116, 36,196,193, -/* 0x1090 */ 248, 5,141, 4, 2,139, 84, 36,192,137, 76, 36,192,102,137,134, -/* 0x10a0 */ 128, 1, 0, 0, 49,192,131,124, 36,200, 6,137, 84, 36,188, 15, -/* 0x10b0 */ 159,192, 73,129,193,100, 6, 0, 0,141, 4, 64,137, 68, 36,200, -/* 0x10c0 */ 233, 84, 2, 0, 0, 65, 41,195, 65, 41,194,137,208,102,193,232, -/* 0x10d0 */ 5,102, 41,194, 65,129,251,255,255,255, 0,102,137,150,128, 1, -/* 0x10e0 */ 0, 0,119, 26, 76, 57,231, 15,132,218, 5, 0, 0, 15,182, 7, -/* 0x10f0 */ 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15,183, -/* 0x1100 */ 150,152, 1, 0, 0, 68,137,216,193,232, 11, 15,183,202, 15,175, -/* 0x1110 */ 193, 65, 57,194, 15,131,208, 0, 0, 0, 65,184, 0, 8, 0, 0, -/* 0x1120 */ 65,137,195, 72,193,227, 5, 68,137,192, 41,200,193,248, 5,141, -/* 0x1130 */ 4, 2,102,137,134,152, 1, 0, 0, 72,139, 68, 36,216, 72, 1, -/* 0x1140 */ 216, 65,129,251,255,255,255, 0, 72,141, 52,104,119, 26, 76, 57, -/* 0x1150 */ 231, 15,132,112, 5, 0, 0, 15,182, 7, 65,193,226, 8, 65,193, -/* 0x1160 */ 227, 8, 72,255,199, 65, 9,194, 15,183,150,224, 1, 0, 0, 68, -/* 0x1170 */ 137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, 79, -/* 0x1180 */ 65, 41,200, 65,137,195, 65,193,248, 5, 69,133,255, 66,141, 4, -/* 0x1190 */ 2,102,137,134,224, 1, 0, 0, 15,132, 41, 5, 0, 0, 49,192, -/* 0x11a0 */ 131,124, 36,200, 6, 72,139, 92, 36,232, 15,159,192,141, 68, 0, -/* 0x11b0 */ 9,137, 68, 36,200, 68,137,248, 68, 41,240, 68, 15,182, 44, 3, -/* 0x11c0 */ 68,137,248, 65,255,199, 68,136, 44, 3,233,216, 4, 0, 0, 65, -/* 0x11d0 */ 41,195, 65, 41,194,137,208,102,193,232, 5,102, 41,194,102,137, -/* 0x11e0 */ 150,224, 1, 0, 0,233, 17, 1, 0, 0, 65, 41,195, 65, 41,194, -/* 0x11f0 */ 137,208,102,193,232, 5,102, 41,194, 65,129,251,255,255,255, 0, -/* 0x1200 */ 102,137,150,152, 1, 0, 0,119, 26, 76, 57,231, 15,132,181, 4, -/* 0x1210 */ 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, -/* 0x1220 */ 65, 9,194, 15,183,150,176, 1, 0, 0, 68,137,216,193,232, 11, -/* 0x1230 */ 15,183,202, 15,175,193, 65, 57,194,115, 32, 65,137,195,184, 0, -/* 0x1240 */ 8, 0, 0, 41,200,193,248, 5,141, 4, 2,102,137,134,176, 1, -/* 0x1250 */ 0, 0,139, 68, 36,196,233,152, 0, 0, 0, 65, 41,195, 65, 41, -/* 0x1260 */ 194,137,208,102,193,232, 5,102, 41,194, 65,129,251,255,255,255, -/* 0x1270 */ 0,102,137,150,176, 1, 0, 0,119, 26, 76, 57,231, 15,132, 68, -/* 0x1280 */ 4, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255, -/* 0x1290 */ 199, 65, 9,194, 15,183,150,200, 1, 0, 0, 68,137,216,193,232, -/* 0x12a0 */ 11, 15,183,202, 15,175,193, 65, 57,194,115, 29, 65,137,195,184, -/* 0x12b0 */ 0, 8, 0, 0, 41,200,193,248, 5,141, 4, 2,102,137,134,200, -/* 0x12c0 */ 1, 0, 0,139, 68, 36,192,235, 34, 65, 41,195, 65, 41,194,137, -/* 0x12d0 */ 208,102,193,232, 5,102, 41,194,139, 68, 36,188,102,137,150,200, -/* 0x12e0 */ 1, 0, 0,139, 84, 36,192,137, 84, 36,188,139, 76, 36,196,137, -/* 0x12f0 */ 76, 36,192, 68,137,116, 36,196, 65,137,198, 49,192,131,124, 36, -/* 0x1300 */ 200, 6, 76,139, 76, 36,216, 15,159,192, 73,129,193,104, 10, 0, -/* 0x1310 */ 0,141, 68, 64, 8,137, 68, 36,200, 65,129,251,255,255,255, 0, -/* 0x1320 */ 119, 26, 76, 57,231, 15,132,156, 3, 0, 0, 15,182, 7, 65,193, -/* 0x1330 */ 226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183, 17, -/* 0x1340 */ 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, -/* 0x1350 */ 39, 65,137,195,184, 0, 8, 0, 0, 69, 49,237, 41,200,193,248, -/* 0x1360 */ 5,141, 4, 2,102, 65,137, 1, 72, 99, 68, 36,184, 72,193,224, -/* 0x1370 */ 4, 77,141, 68, 1, 4,235,120, 65, 41,195, 65, 41,194,137,208, -/* 0x1380 */ 102,193,232, 5,102, 41,194, 65,129,251,255,255,255, 0,102, 65, -/* 0x1390 */ 137, 17,119, 26, 76, 57,231, 15,132, 42, 3, 0, 0, 15,182, 7, -/* 0x13a0 */ 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15, -/* 0x13b0 */ 183, 81, 2, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, -/* 0x13c0 */ 57,194,115, 52, 65,137,195,184, 0, 8, 0, 0, 65,189, 8, 0, -/* 0x13d0 */ 0, 0, 41,200,193,248, 5,141, 4, 2,102, 65,137, 65, 2, 72, -/* 0x13e0 */ 99, 68, 36,184, 72,193,224, 4, 77,141,132, 1, 4, 1, 0, 0, -/* 0x13f0 */ 65,185, 3, 0, 0, 0,235, 39, 65, 41,195, 65, 41,194,137,208, -/* 0x1400 */ 102,193,232, 5, 77,141,129, 4, 2, 0, 0, 65,189, 16, 0, 0, -/* 0x1410 */ 0,102, 41,194,102, 65,137, 81, 2, 65,185, 8, 0, 0, 0, 68, -/* 0x1420 */ 137,203,189, 1, 0, 0, 0, 72, 99,197, 65,129,251,255,255,255, -/* 0x1430 */ 0, 73,141, 52, 64,119, 26, 76, 57,231, 15,132,135, 2, 0, 0, -/* 0x1440 */ 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9, -/* 0x1450 */ 194, 15,183, 14, 68,137,216,193,232, 11, 15,183,209, 15,175,194, -/* 0x1460 */ 65, 57,194,115, 23, 65,137,195,184, 0, 8, 0, 0, 1,237, 41, -/* 0x1470 */ 208,193,248, 5,141, 4, 1,102,137, 6,235, 22, 65, 41,195, 65, -/* 0x1480 */ 41,194,137,200,102,193,232, 5,141,108, 45, 1,102, 41,193,102, -/* 0x1490 */ 137, 14,255,203,117,145,184, 1, 0, 0, 0, 68,137,201,211,224, -/* 0x14a0 */ 41,197, 68, 1,237,131,124, 36,200, 3, 15,143,194, 1, 0, 0, -/* 0x14b0 */ 131, 68, 36,200, 7,184, 3, 0, 0, 0,131,253, 4, 15, 76,197, -/* 0x14c0 */ 72,139, 92, 36,216, 65,184, 1, 0, 0, 0, 72,152, 72,193,224, -/* 0x14d0 */ 7, 76,141,140, 3, 96, 3, 0, 0,187, 6, 0, 0, 0, 73, 99, -/* 0x14e0 */ 192, 65,129,251,255,255,255, 0, 73,141, 52, 65,119, 26, 76, 57, -/* 0x14f0 */ 231, 15,132,208, 1, 0, 0, 15,182, 7, 65,193,226, 8, 65,193, -/* 0x1500 */ 227, 8, 72,255,199, 65, 9,194, 15,183, 22, 68,137,216,193,232, -/* 0x1510 */ 11, 15,183,202, 15,175,193, 65, 57,194,115, 24, 65,137,195,184, -/* 0x1520 */ 0, 8, 0, 0, 69, 1,192, 41,200,193,248, 5,141, 4, 2,102, -/* 0x1530 */ 137, 6,235, 23, 65, 41,195, 65, 41,194,137,208,102,193,232, 5, -/* 0x1540 */ 71,141, 68, 0, 1,102, 41,194,102,137, 22,255,203,117,143, 65, -/* 0x1550 */ 131,232, 64, 65,131,248, 3, 69,137,198, 15,142, 13, 1, 0, 0, -/* 0x1560 */ 65,131,230, 1, 68,137,192,209,248, 65,131,206, 2, 65,131,248, -/* 0x1570 */ 13,141,112,255,127, 35,137,241, 72,139, 92, 36,216, 73, 99,192, -/* 0x1580 */ 65,211,230, 72, 1,192, 68,137,242, 72,141, 20, 83, 72, 41,194, -/* 0x1590 */ 76,141,138, 94, 5, 0, 0,235, 81,141,112,251, 65,129,251,255, -/* 0x15a0 */ 255,255, 0,119, 26, 76, 57,231, 15,132, 25, 1, 0, 0, 15,182, -/* 0x15b0 */ 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, -/* 0x15c0 */ 209,235, 69, 1,246, 69, 57,218,114, 7, 69, 41,218, 65,131,206, -/* 0x15d0 */ 1,255,206,117,199, 76,139, 76, 36,216, 65,193,230, 4,190, 4, -/* 0x15e0 */ 0, 0, 0, 73,129,193, 68, 6, 0, 0, 65,189, 1, 0, 0, 0, -/* 0x15f0 */ 187, 1, 0, 0, 0, 72, 99,195, 65,129,251,255,255,255, 0, 77, -/* 0x1600 */ 141, 4, 65,119, 26, 76, 57,231, 15,132,185, 0, 0, 0, 15,182, -/* 0x1610 */ 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, -/* 0x1620 */ 15,183, 16, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, -/* 0x1630 */ 57,194,115, 24, 65,137,195,184, 0, 8, 0, 0, 1,219, 41,200, -/* 0x1640 */ 193,248, 5,141, 4, 2,102, 65,137, 0,235, 26, 65, 41,195, 65, -/* 0x1650 */ 41,194,137,208,102,193,232, 5,141, 92, 27, 1, 69, 9,238,102, -/* 0x1660 */ 41,194,102, 65,137, 16, 69, 1,237,255,206,117,136, 65,255,198, -/* 0x1670 */ 116, 64,131,197, 2, 69, 57,254,119, 77, 72,139, 84, 36,232, 68, -/* 0x1680 */ 137,248, 68, 41,240, 68, 15,182, 44, 2, 68,137,248, 65,255,199, -/* 0x1690 */ 255,205, 68,136, 44, 2, 15,149,194, 49,192, 68, 59,124, 36,228, -/* 0x16a0 */ 15,146,192,133,194,117,211, 68, 59,124, 36,228, 15,130, 69,247, -/* 0x16b0 */ 255,255, 65,129,251,255,255,255, 0,119, 22, 76, 57,231,184, 1, -/* 0x16c0 */ 0, 0, 0,116, 35,235, 7,184, 1, 0, 0, 0,235, 26, 72,255, -/* 0x16d0 */ 199,137,248, 43, 68, 36,248, 72,139, 76, 36,240, 72,139, 92, 36, -/* 0x16e0 */ 56,137, 1, 68,137, 59, 49,192, 91, 93, 65, 92, 65, 93, 65, 94, -/* 0x16f0 */ 65, 95, 72,139,117,248, 72,139,125, 16,139, 75, 4, 72, 1,206, -/* 0x1700 */ 139, 19, 72, 1,215,201, 89, 72,137,240, 72, 41,200, 90, 72, 41, -/* 0x1710 */ 215, 89,137, 57, 91, 93,195,244,235,253, 93, 72,141,157,239,255, -/* 0x1720 */ 255,255,139, 67,252, 5, 0, 0, 0, 0, 45, 0, 0, 0, 0, 80, -/* 0x1730 */ 65,185, 0, 0, 0, 0, 65,184, 0, 0, 0, 0, 65,186, 2, 16, -/* 0x1740 */ 0, 0,186, 3, 0, 0, 0,137,198, 41,255,184,197, 0, 0, 2, -/* 0x1750 */ 15, 5,114,195, 80, 72,137,238, 72,137,197, 72,137,199,185, 0, -/* 0x1760 */ 0, 0, 0,129,233, 0, 0, 0, 0,252,243,164, 72,141,135, 48, -/* 0x1770 */ 255,255,255,255,224, 87, 72,137,218,139, 67,240, 43, 19, 72, 1, -/* 0x1780 */ 208, 72,137, 68, 36, 20,139,115,248, 72, 1,214,139, 75,252,243, -/* 0x1790 */ 164, 94, 72,137,215,173, 72, 1,199,173, 72, 1,198,173, 86, 87, -/* 0x17a0 */ 173,133,192,116, 59, 80, 72,137,225, 72,137,250, 72, 1,248, 80, -/* 0x17b0 */ 173,137,198, 72,137,193,173, 65,137,192, 72,137,247, 72, 1,241, -/* 0x17c0 */ 81,255,213, 94, 95, 89, 90, 88, 15,182, 72, 9,133,201,116,206, -/* 0x17d0 */ 15,182, 80, 10,139, 48, 72,137,215,232, 29, 0, 0, 0,235,190, -/* 0x17e0 */ 88, 89,190, 0, 16, 0, 0, 95, 91, 93,184, 73, 0, 0, 2, 72, -/* 0x17f0 */ 141, 87,252,199, 2, 15, 5,195,144,255,226,131,249, 73,117, 68, -/* 0x1800 */ 83, 87, 72,141, 76, 55,253, 94, 86, 91,235, 47, 72, 57,206,115, -/* 0x1810 */ 50, 86, 94,172, 60,128,114, 10, 60,143,119, 6,128,126,254, 15, -/* 0x1820 */ 116, 6, 44,232, 60, 1,119,228, 72, 57,206,115, 22, 86,173, 40, -/* 0x1830 */ 208,117,223, 95, 15,200, 41,248, 1,216,171, 72, 57,206,115, 3, -/* 0x1840 */ 172,235,223, 91,195,102,105,108,101, 32,102,111,114,109, 97,116, -/* 0x1850 */ 32,101,108,102, 54, 52, 45,120, 56, 54, 45, 54, 52, 10, 10, 83, -/* 0x1860 */ 101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,109, -/* 0x1870 */ 101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, -/* 0x1880 */ 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x1890 */ 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32, 32, -/* 0x18a0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102, -/* 0x18b0 */ 102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, -/* 0x18c0 */ 32, 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, 32, 32, 32, 32, -/* 0x18d0 */ 32, 48, 48, 48, 48, 48, 48, 49, 53, 32, 32, 48, 48, 48, 48, 48, -/* 0x18e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, -/* 0x18f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, -/* 0x1900 */ 48, 48, 48, 48, 48, 52, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, -/* 0x1910 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, -/* 0x1920 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 49, 32, 78, 82, 86, -/* 0x1930 */ 95, 72, 69, 65, 68, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, -/* 0x1940 */ 48, 54, 54, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1950 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1960 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 53, -/* 0x1970 */ 53, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, -/* 0x1980 */ 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 50, 32, -/* 0x1990 */ 78, 82, 86, 50, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, -/* 0x19a0 */ 48, 48, 48, 48, 98, 55, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x19b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, -/* 0x19c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, -/* 0x19d0 */ 48, 48, 98, 98, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, -/* 0x19e0 */ 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, -/* 0x19f0 */ 68, 79, 78, 76, 89, 10, 32, 32, 51, 32, 78, 82, 86, 50, 68, 32, -/* 0x1a00 */ 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 57,101, -/* 0x1a10 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1a20 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1a30 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, 55, 50, 32, 32, -/* 0x1a40 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, -/* 0x1a50 */ 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, -/* 0x1a60 */ 32, 32, 52, 32, 78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32, 32, -/* 0x1a70 */ 32, 32, 48, 48, 48, 48, 48, 48, 57, 48, 32, 32, 48, 48, 48, 48, -/* 0x1a80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, -/* 0x1a90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, -/* 0x1aa0 */ 48, 48, 48, 48, 48, 50, 49, 48, 32, 32, 50, 42, 42, 48, 32, 32, -/* 0x1ab0 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, -/* 0x1ac0 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 53, 32, 76, 90, -/* 0x1ad0 */ 77, 65, 95, 69, 76, 70, 48, 48, 32, 32, 32, 32, 48, 48, 48, 48, -/* 0x1ae0 */ 48, 48, 54, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1af0 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1b00 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 50, -/* 0x1b10 */ 97, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, -/* 0x1b20 */ 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, -/* 0x1b30 */ 78, 76, 89, 10, 32, 32, 54, 32, 76, 90, 77, 65, 95, 68, 69, 67, -/* 0x1b40 */ 49, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 57,102, 55, 32, 32, -/* 0x1b50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1b60 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1b70 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 51, 48, 52, 32, 32, 50, 42, -/* 0x1b80 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, -/* 0x1b90 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 55, 32, 76, 90, 77, 65, 95, -/* 0x1ba0 */ 68, 69, 67, 50, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 57,102, -/* 0x1bb0 */ 55, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1bc0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1bd0 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 99,102, 98, 32, -/* 0x1be0 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, -/* 0x1bf0 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 56, 32, 76, 90, -/* 0x1c00 */ 77, 65, 95, 68, 69, 67, 51, 48, 32, 32, 32, 32, 48, 48, 48, 48, -/* 0x1c10 */ 48, 48, 49, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1c20 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1c30 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 54, -/* 0x1c40 */ 102, 50, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, -/* 0x1c50 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 57, -/* 0x1c60 */ 32, 78, 82, 86, 95, 84, 65, 73, 76, 32, 32, 32, 32, 32, 32, 48, -/* 0x1c70 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, -/* 0x1c80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, -/* 0x1c90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, -/* 0x1ca0 */ 48, 49, 55, 48, 54, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, -/* 0x1cb0 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, -/* 0x1cc0 */ 32, 49, 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, 32, 32, 32, -/* 0x1cd0 */ 32, 32, 48, 48, 48, 48, 48, 48, 49, 49, 32, 32, 48, 48, 48, 48, -/* 0x1ce0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, -/* 0x1cf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, -/* 0x1d00 */ 48, 48, 48, 48, 49, 55, 48, 54, 32, 32, 50, 42, 42, 48, 32, 32, -/* 0x1d10 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, -/* 0x1d20 */ 76, 89, 10, 32, 49, 49, 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, -/* 0x1d30 */ 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 50,101, 32, 32, 48, -/* 0x1d40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, -/* 0x1d50 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1d60 */ 48, 32, 32, 48, 48, 48, 48, 49, 55, 49, 55, 32, 32, 50, 42, 42, -/* 0x1d70 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, -/* 0x1d80 */ 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 83, 89, 77, -/* 0x1d90 */ 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, -/* 0x1da0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, -/* 0x1db0 */ 32,100, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, 9, 48, 48, -/* 0x1dc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 77, -/* 0x1dd0 */ 65, 67, 72, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48, -/* 0x1de0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, -/* 0x1df0 */ 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 9, 48, 48, 48, 48, 48, -/* 0x1e00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, -/* 0x1e10 */ 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1e20 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, -/* 0x1e30 */ 77, 65, 95, 68, 69, 67, 51, 48, 9, 48, 48, 48, 48, 48, 48, 48, -/* 0x1e40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, -/* 0x1e50 */ 69, 67, 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1e60 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, -/* 0x1e70 */ 67, 72, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1e80 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 77, 65, 67, 72, 77, 65, 73, -/* 0x1e90 */ 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1ea0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, 67, 72, -/* 0x1eb0 */ 77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1ec0 */ 48, 48, 48, 48, 48, 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, -/* 0x1ed0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1ee0 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 69, 9, -/* 0x1ef0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1f00 */ 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1f10 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, -/* 0x1f20 */ 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1f30 */ 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, -/* 0x1f40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, -/* 0x1f50 */ 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, -/* 0x1f60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, -/* 0x1f70 */ 50, 66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1f80 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, -/* 0x1f90 */ 95, 69, 76, 70, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1fa0 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 69, 76, 70, -/* 0x1fb0 */ 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1fc0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, -/* 0x1fd0 */ 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1fe0 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, -/* 0x1ff0 */ 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2000 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, -/* 0x2010 */ 95, 68, 69, 67, 50, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2020 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, -/* 0x2030 */ 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2040 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, -/* 0x2050 */ 84, 65, 73, 76, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2060 */ 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 48, -/* 0x2070 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, -/* 0x2080 */ 103, 32, 32, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, -/* 0x2090 */ 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x20a0 */ 48, 48, 32, 95,115,116, 97,114,116, 10, 48, 48, 48, 48, 48, 48, -/* 0x20b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 32,103, 32, 32, 32, 32, -/* 0x20c0 */ 32, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, 9, 48, 48, 48, -/* 0x20d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,101,110, -/* 0x20e0 */ 100, 95,100,101, 99,111,109,112,114,101,115,115, 10, 10, 82, 69, -/* 0x20f0 */ 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, -/* 0x2100 */ 32, 70, 79, 82, 32, 91, 77, 65, 67, 72, 77, 65, 73, 78, 88, 93, -/* 0x2110 */ 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x2120 */ 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x2130 */ 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, -/* 0x2140 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 57, 32, 82, 95, 88, 56, -/* 0x2150 */ 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 77, 65, -/* 0x2160 */ 67, 72, 77, 65, 73, 78, 90, 43, 48,120,102,102,102,102,102,102, -/* 0x2170 */ 102,102,102,102,102,102,102,102,102,102, 10, 10, 82, 69, 76, 79, -/* 0x2180 */ 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, -/* 0x2190 */ 79, 82, 32, 91, 78, 82, 86, 50, 69, 93, 58, 10, 79, 70, 70, 83, -/* 0x21a0 */ 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, -/* 0x21b0 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, -/* 0x21c0 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x21d0 */ 48, 48, 48, 97,101, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, -/* 0x21e0 */ 67, 51, 50, 32, 32, 32, 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, -/* 0x21f0 */ 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2200 */ 48, 50, 49, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2210 */ 48, 48, 53, 98, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, -/* 0x2220 */ 51, 50, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, -/* 0x2230 */ 43, 48,120,102,102,102,102,102,102,102,102,102,102,102,102,102, -/* 0x2240 */ 102,102, 99, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, -/* 0x2250 */ 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, -/* 0x2260 */ 50, 68, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, -/* 0x2270 */ 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, -/* 0x2280 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, -/* 0x2290 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 57, 53, 32, 82, -/* 0x22a0 */ 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, -/* 0x22b0 */ 32, 78, 82, 86, 95, 72, 69, 65, 68, 43, 48,120, 48, 48, 48, 48, -/* 0x22c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 49, 10, 48, 48, 48, -/* 0x22d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 98, 32, 82, 95, -/* 0x22e0 */ 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, -/* 0x22f0 */ 77, 65, 67, 72, 77, 65, 73, 78, 89, 43, 48,120,102,102,102,102, -/* 0x2300 */ 102,102,102,102,102,102,102,102,102,102,102, 99, 10, 10, 82, 69, -/* 0x2310 */ 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, -/* 0x2320 */ 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 66, 93, 58, 10, 79, 70, -/* 0x2330 */ 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, -/* 0x2340 */ 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x2350 */ 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2360 */ 48, 48, 48, 48, 48, 56, 97, 32, 82, 95, 88, 56, 54, 95, 54, 52, -/* 0x2370 */ 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 78, 82, 86, 95, 72, 69, -/* 0x2380 */ 65, 68, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2390 */ 48, 48, 48, 50, 49, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x23a0 */ 48, 48, 48, 48, 53, 50, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, -/* 0x23b0 */ 80, 67, 51, 50, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, 65, 73, -/* 0x23c0 */ 78, 89, 43, 48,120,102,102,102,102,102,102,102,102,102,102,102, -/* 0x23d0 */ 102,102,102,102, 99, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, -/* 0x23e0 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 76, -/* 0x23f0 */ 90, 77, 65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, 70, 83, -/* 0x2400 */ 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, -/* 0x2410 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, -/* 0x2420 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2430 */ 48, 48, 48, 48, 54, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, -/* 0x2440 */ 67, 51, 50, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, -/* 0x2450 */ 51, 48, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2460 */ 48, 48, 48, 49, 48, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, -/* 0x2470 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 77, -/* 0x2480 */ 65, 67, 72, 77, 65, 73, 78, 90, 93, 58, 10, 79, 70, 70, 83, 69, -/* 0x2490 */ 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, -/* 0x24a0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, -/* 0x24b0 */ 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x24c0 */ 48, 48, 48,102, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, -/* 0x24d0 */ 32, 32, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, -/* 0x24e0 */ 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x24f0 */ 49, 50,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2500 */ 48, 48, 49, 52, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, -/* 0x2510 */ 32, 32, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, -/* 0x2520 */ 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2530 */ 48, 48,100, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2540 */ 48, 48, 52, 56, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, +/* 0x0040 */ 243,144,235,252,204,106,255, 87, 86, 82, 81, 65, 80, 85, 83,232, +/* 0x0050 */ 0, 0, 0, 0, 15, 5, 89, 90, 94, 95,195, 85, 83, 81, 82, 72, +/* 0x0060 */ 1,254, 86, 72,137,254, 72,137,215, 49,219, 49,201, 72,131,205, +/* 0x0070 */ 255,232, 80, 0, 0, 0, 1,219,116, 2,243,195,139, 30, 72,131, +/* 0x0080 */ 238,252, 17,219,138, 22,243,195, 72,141, 4, 47,131,249, 5,138, +/* 0x0090 */ 16,118, 33, 72,131,253,252,119, 27,131,233, 4,139, 16, 72,131, +/* 0x00a0 */ 192, 4,131,233, 4,137, 23, 72,141,127, 4,115,239,131,193, 4, +/* 0x00b0 */ 138, 16,116, 16, 72,255,192,136, 23,131,233, 1,138, 16, 72,141, +/* 0x00c0 */ 127, 1,117,240,243,195,252, 65, 91, 65,128,248, 8,116, 13,233, +/* 0x00d0 */ 172, 0, 0, 0, 72,255,198,136, 23, 72,255,199,138, 22, 1,219, +/* 0x00e0 */ 117, 10,139, 30, 72,131,238,252, 17,219,138, 22,114,230,141, 65, +/* 0x00f0 */ 1,235, 7,255,200, 65,255,211, 17,192, 65,255,211, 17,192, 1, +/* 0x0100 */ 219,117, 10,139, 30, 72,131,238,252, 17,219,138, 22,115,228,131, +/* 0x0110 */ 232, 3,114, 29,193,224, 8, 15,182,210, 9,208, 72,255,198,131, +/* 0x0120 */ 240,255, 15,132, 0, 0, 0, 0,209,248, 72, 99,232,114, 56,235, +/* 0x0130 */ 14, 1,219,117, 8,139, 30, 72,131,238,252, 17,219,114, 40,255, +/* 0x0140 */ 193, 1,219,117, 8,139, 30, 72,131,238,252, 17,219,114, 24, 65, +/* 0x0150 */ 255,211, 17,201, 1,219,117, 8,139, 30, 72,131,238,252, 17,219, +/* 0x0160 */ 115,237,131,193, 2,235, 5, 65,255,211, 17,201, 72,129,253, 0, +/* 0x0170 */ 251,255,255,131,209, 2,232, 0, 0, 0, 0,233, 92,255,255,255, +/* 0x0180 */ 65,128,248, 5,116, 13,233,147, 0, 0, 0, 72,255,198,136, 23, +/* 0x0190 */ 72,255,199,138, 22, 1,219,117, 10,139, 30, 72,131,238,252, 17, +/* 0x01a0 */ 219,138, 22,114,230,141, 65, 1,235, 7,255,200, 65,255,211, 17, +/* 0x01b0 */ 192, 65,255,211, 17,192, 1,219,117, 10,139, 30, 72,131,238,252, +/* 0x01c0 */ 17,219,138, 22,115,228,131,232, 3,114, 27,193,224, 8, 15,182, +/* 0x01d0 */ 210, 9,208, 72,255,198,131,240,255, 15,132, 0, 0, 0, 0,209, +/* 0x01e0 */ 248, 72, 99,232,235, 3, 65,255,211, 17,201, 65,255,211, 17,201, +/* 0x01f0 */ 117, 24,255,193, 65,255,211, 17,201, 1,219,117, 8,139, 30, 72, +/* 0x0200 */ 131,238,252, 17,219,115,237,131,193, 2, 72,129,253, 0,251,255, +/* 0x0210 */ 255,131,209, 1,232, 0, 0, 0, 0,233,117,255,255,255, 65,128, +/* 0x0220 */ 248, 2,116, 13,233,133, 0, 0, 0, 72,255,198,136, 23, 72,255, +/* 0x0230 */ 199,138, 22, 1,219,117, 10,139, 30, 72,131,238,252, 17,219,138, +/* 0x0240 */ 22,114,230,141, 65, 1, 65,255,211, 17,192, 1,219,117, 10,139, +/* 0x0250 */ 30, 72,131,238,252, 17,219,138, 22,115,235,131,232, 3,114, 23, +/* 0x0260 */ 193,224, 8, 15,182,210, 9,208, 72,255,198,131,240,255, 15,132, +/* 0x0270 */ 0, 0, 0, 0, 72, 99,232,141, 65, 1, 65,255,211, 17,201, 65, +/* 0x0280 */ 255,211, 17,201,117, 24,137,193,131,192, 2, 65,255,211, 17,201, +/* 0x0290 */ 1,219,117, 8,139, 30, 72,131,238,252, 17,219,115,237, 72,129, +/* 0x02a0 */ 253, 0,243,255,255, 17,193,232, 0, 0, 0, 0,235,131, 65,128, +/* 0x02b0 */ 248, 14, 15,133, 0, 0, 0, 0, 85, 72,137,229, 68,139, 9, 73, +/* 0x02c0 */ 137,208, 72,137,242, 72,141,119, 2, 86,138, 7,255,202,136,193, +/* 0x02d0 */ 36, 7,192,233, 3, 72,199,195, 0,253,255,255, 72,211,227,136, +/* 0x02e0 */ 193, 72,141,156, 92,136,241,255,255, 72,131,227,192,106, 0, 72, +/* 0x02f0 */ 57,220,117,249, 83, 72,141,123, 8,138, 78,255,255,202,136, 71, +/* 0x0300 */ 2,136,200,192,233, 4,136, 79, 1, 36, 15,136, 7, 72,141, 79, +/* 0x0310 */ 252, 80, 65, 87, 72,141, 71, 4, 69, 49,255, 65, 86, 65,190, 1, +/* 0x0320 */ 0, 0, 0, 65, 85, 69, 49,237, 65, 84, 85, 83, 72,137, 76, 36, +/* 0x0330 */ 240, 72,137, 68, 36,216,184, 1, 0, 0, 0, 72,137,116, 36,248, +/* 0x0340 */ 76,137, 68, 36,232,137,195, 68,137, 76, 36,228, 15,182, 79, 2, +/* 0x0350 */ 211,227,137,217, 72,139, 92, 36, 56,255,201,137, 76, 36,212, 15, +/* 0x0360 */ 182, 79, 1,211,224, 72,139, 76, 36,240,255,200,137, 68, 36,208, +/* 0x0370 */ 15,182, 7,199, 1, 0, 0, 0, 0,199, 68, 36,200, 0, 0, 0, +/* 0x0380 */ 0,199, 68, 36,196, 1, 0, 0, 0,199, 68, 36,192, 1, 0, 0, +/* 0x0390 */ 0,199, 68, 36,188, 1, 0, 0, 0,199, 3, 0, 0, 0, 0,137, +/* 0x03a0 */ 68, 36,204, 15,182, 79, 1, 1,193,184, 0, 3, 0, 0,211,224, +/* 0x03b0 */ 49,201,141,184, 54, 7, 0, 0, 65, 57,255,115, 19, 72,139, 92, +/* 0x03c0 */ 36,216,137,200,255,193, 57,249,102,199, 4, 67, 0, 4,235,235, +/* 0x03d0 */ 72,139,124, 36,248,137,208, 69, 49,210, 65,131,203,255, 49,210, +/* 0x03e0 */ 73,137,252, 73, 1,196, 76, 57,231, 15,132,239, 8, 0, 0, 15, +/* 0x03f0 */ 182, 7, 65,193,226, 8,255,194, 72,255,199, 65, 9,194,131,250, +/* 0x0400 */ 4,126,227, 68, 59,124, 36,228, 15,131,218, 8, 0, 0,139, 68, +/* 0x0410 */ 36,212, 72, 99, 92, 36,200, 72,139, 84, 36,216, 68, 33,248,137, +/* 0x0420 */ 68, 36,184, 72, 99,108, 36,184, 72,137,216, 72,193,224, 4, 72, +/* 0x0430 */ 1,232, 65,129,251,255,255,255, 0, 76,141, 12, 66,119, 26, 76, +/* 0x0440 */ 57,231, 15,132,150, 8, 0, 0, 15,182, 7, 65,193,226, 8, 65, +/* 0x0450 */ 193,227, 8, 72,255,199, 65, 9,194, 65, 15,183, 17, 68,137,216, +/* 0x0460 */ 193,232, 11, 15,183,202, 15,175,193, 65, 57,194, 15,131,197, 1, +/* 0x0470 */ 0, 0, 65,137,195,184, 0, 8, 0, 0, 72,139, 92, 36,216, 41, +/* 0x0480 */ 200, 15,182, 76, 36,204,190, 1, 0, 0, 0,193,248, 5,141, 4, +/* 0x0490 */ 2, 65, 15,182,213,102, 65,137, 1,139, 68, 36,208, 68, 33,248, +/* 0x04a0 */ 211,224,185, 8, 0, 0, 0, 43, 76, 36,204,211,250, 1,208,105, +/* 0x04b0 */ 192, 0, 3, 0, 0,131,124, 36,200, 6,137,192, 76,141,140, 67, +/* 0x04c0 */ 108, 14, 0, 0, 15,142,184, 0, 0, 0, 72,139, 84, 36,232, 68, +/* 0x04d0 */ 137,248, 68, 41,240, 15,182, 44, 2, 1,237, 72, 99,214,137,235, +/* 0x04e0 */ 129,227, 0, 1, 0, 0, 65,129,251,255,255,255, 0, 72, 99,195, +/* 0x04f0 */ 73,141, 4, 65, 76,141, 4, 80,119, 26, 76, 57,231, 15,132,219, +/* 0x0500 */ 7, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255, +/* 0x0510 */ 199, 65, 9,194, 65, 15,183,144, 0, 2, 0, 0, 68,137,216,193, +/* 0x0520 */ 232, 11, 15,183,202, 15,175,193, 65, 57,194,115, 32, 65,137,195, +/* 0x0530 */ 184, 0, 8, 0, 0, 1,246, 41,200,193,248, 5,133,219,141, 4, +/* 0x0540 */ 2,102, 65,137,128, 0, 2, 0, 0,116, 33,235, 45, 65, 41,195, +/* 0x0550 */ 65, 41,194,137,208,102,193,232, 5,141,116, 54, 1,102, 41,194, +/* 0x0560 */ 133,219,102, 65,137,144, 0, 2, 0, 0,116, 14,129,254,255, 0, +/* 0x0570 */ 0, 0, 15,142, 97,255,255,255,235,120,129,254,255, 0, 0, 0, +/* 0x0580 */ 127,112, 72, 99,198, 65,129,251,255,255,255, 0, 77,141, 4, 65, +/* 0x0590 */ 119, 26, 76, 57,231, 15,132, 67, 7, 0, 0, 15,182, 7, 65,193, +/* 0x05a0 */ 226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183, 16, +/* 0x05b0 */ 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, +/* 0x05c0 */ 24, 65,137,195,184, 0, 8, 0, 0, 1,246, 41,200,193,248, 5, +/* 0x05d0 */ 141, 4, 2,102, 65,137, 0,235,161, 65, 41,195, 65, 41,194,137, +/* 0x05e0 */ 208,102,193,232, 5,141,116, 54, 1,102, 41,194,102, 65,137, 16, +/* 0x05f0 */ 235,136, 72,139, 76, 36,232, 68,137,248, 65,255,199, 65,137,245, +/* 0x0600 */ 64,136, 52, 1,131,124, 36,200, 3,127, 13,199, 68, 36,200, 0, +/* 0x0610 */ 0, 0, 0,233,166, 6, 0, 0,139, 84, 36,200,139, 68, 36,200, +/* 0x0620 */ 131,234, 3,131,232, 6,131,124, 36,200, 9, 15, 79,208,137, 84, +/* 0x0630 */ 36,200,233,135, 6, 0, 0, 65, 41,195, 65, 41,194,137,208,102, +/* 0x0640 */ 193,232, 5,102, 41,194, 72,139, 68, 36,216, 65,129,251,255,255, +/* 0x0650 */ 255, 0,102, 65,137, 17, 72,141, 52, 88,119, 26, 76, 57,231, 15, +/* 0x0660 */ 132,121, 6, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, +/* 0x0670 */ 72,255,199, 65, 9,194, 15,183,150,128, 1, 0, 0, 68,137,216, +/* 0x0680 */ 193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, 78, 65,137, +/* 0x0690 */ 195,184, 0, 8, 0, 0, 76,139, 76, 36,216, 41,200,139, 76, 36, +/* 0x06a0 */ 196, 68,137,116, 36,196,193,248, 5,141, 4, 2,139, 84, 36,192, +/* 0x06b0 */ 137, 76, 36,192,102,137,134,128, 1, 0, 0, 49,192,131,124, 36, +/* 0x06c0 */ 200, 6,137, 84, 36,188, 15,159,192, 73,129,193,100, 6, 0, 0, +/* 0x06d0 */ 141, 4, 64,137, 68, 36,200,233, 84, 2, 0, 0, 65, 41,195, 65, +/* 0x06e0 */ 41,194,137,208,102,193,232, 5,102, 41,194, 65,129,251,255,255, +/* 0x06f0 */ 255, 0,102,137,150,128, 1, 0, 0,119, 26, 76, 57,231, 15,132, +/* 0x0700 */ 218, 5, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72, +/* 0x0710 */ 255,199, 65, 9,194, 15,183,150,152, 1, 0, 0, 68,137,216,193, +/* 0x0720 */ 232, 11, 15,183,202, 15,175,193, 65, 57,194, 15,131,208, 0, 0, +/* 0x0730 */ 0, 65,184, 0, 8, 0, 0, 65,137,195, 72,193,227, 5, 68,137, +/* 0x0740 */ 192, 41,200,193,248, 5,141, 4, 2,102,137,134,152, 1, 0, 0, +/* 0x0750 */ 72,139, 68, 36,216, 72, 1,216, 65,129,251,255,255,255, 0, 72, +/* 0x0760 */ 141, 52,104,119, 26, 76, 57,231, 15,132,112, 5, 0, 0, 15,182, +/* 0x0770 */ 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15, +/* 0x0780 */ 183,150,224, 1, 0, 0, 68,137,216,193,232, 11, 15,183,202, 15, +/* 0x0790 */ 175,193, 65, 57,194,115, 79, 65, 41,200, 65,137,195, 65,193,248, +/* 0x07a0 */ 5, 69,133,255, 66,141, 4, 2,102,137,134,224, 1, 0, 0, 15, +/* 0x07b0 */ 132, 41, 5, 0, 0, 49,192,131,124, 36,200, 6, 72,139, 92, 36, +/* 0x07c0 */ 232, 15,159,192,141, 68, 0, 9,137, 68, 36,200, 68,137,248, 68, +/* 0x07d0 */ 41,240, 68, 15,182, 44, 3, 68,137,248, 65,255,199, 68,136, 44, +/* 0x07e0 */ 3,233,216, 4, 0, 0, 65, 41,195, 65, 41,194,137,208,102,193, +/* 0x07f0 */ 232, 5,102, 41,194,102,137,150,224, 1, 0, 0,233, 17, 1, 0, +/* 0x0800 */ 0, 65, 41,195, 65, 41,194,137,208,102,193,232, 5,102, 41,194, +/* 0x0810 */ 65,129,251,255,255,255, 0,102,137,150,152, 1, 0, 0,119, 26, +/* 0x0820 */ 76, 57,231, 15,132,181, 4, 0, 0, 15,182, 7, 65,193,226, 8, +/* 0x0830 */ 65,193,227, 8, 72,255,199, 65, 9,194, 15,183,150,176, 1, 0, +/* 0x0840 */ 0, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194, +/* 0x0850 */ 115, 32, 65,137,195,184, 0, 8, 0, 0, 41,200,193,248, 5,141, +/* 0x0860 */ 4, 2,102,137,134,176, 1, 0, 0,139, 68, 36,196,233,152, 0, +/* 0x0870 */ 0, 0, 65, 41,195, 65, 41,194,137,208,102,193,232, 5,102, 41, +/* 0x0880 */ 194, 65,129,251,255,255,255, 0,102,137,150,176, 1, 0, 0,119, +/* 0x0890 */ 26, 76, 57,231, 15,132, 68, 4, 0, 0, 15,182, 7, 65,193,226, +/* 0x08a0 */ 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15,183,150,200, 1, +/* 0x08b0 */ 0, 0, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57, +/* 0x08c0 */ 194,115, 29, 65,137,195,184, 0, 8, 0, 0, 41,200,193,248, 5, +/* 0x08d0 */ 141, 4, 2,102,137,134,200, 1, 0, 0,139, 68, 36,192,235, 34, +/* 0x08e0 */ 65, 41,195, 65, 41,194,137,208,102,193,232, 5,102, 41,194,139, +/* 0x08f0 */ 68, 36,188,102,137,150,200, 1, 0, 0,139, 84, 36,192,137, 84, +/* 0x0900 */ 36,188,139, 76, 36,196,137, 76, 36,192, 68,137,116, 36,196, 65, +/* 0x0910 */ 137,198, 49,192,131,124, 36,200, 6, 76,139, 76, 36,216, 15,159, +/* 0x0920 */ 192, 73,129,193,104, 10, 0, 0,141, 68, 64, 8,137, 68, 36,200, +/* 0x0930 */ 65,129,251,255,255,255, 0,119, 26, 76, 57,231, 15,132,156, 3, +/* 0x0940 */ 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, +/* 0x0950 */ 65, 9,194, 65, 15,183, 17, 68,137,216,193,232, 11, 15,183,202, +/* 0x0960 */ 15,175,193, 65, 57,194,115, 39, 65,137,195,184, 0, 8, 0, 0, +/* 0x0970 */ 69, 49,237, 41,200,193,248, 5,141, 4, 2,102, 65,137, 1, 72, +/* 0x0980 */ 99, 68, 36,184, 72,193,224, 4, 77,141, 68, 1, 4,235,120, 65, +/* 0x0990 */ 41,195, 65, 41,194,137,208,102,193,232, 5,102, 41,194, 65,129, +/* 0x09a0 */ 251,255,255,255, 0,102, 65,137, 17,119, 26, 76, 57,231, 15,132, +/* 0x09b0 */ 42, 3, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72, +/* 0x09c0 */ 255,199, 65, 9,194, 65, 15,183, 81, 2, 68,137,216,193,232, 11, +/* 0x09d0 */ 15,183,202, 15,175,193, 65, 57,194,115, 52, 65,137,195,184, 0, +/* 0x09e0 */ 8, 0, 0, 65,189, 8, 0, 0, 0, 41,200,193,248, 5,141, 4, +/* 0x09f0 */ 2,102, 65,137, 65, 2, 72, 99, 68, 36,184, 72,193,224, 4, 77, +/* 0x0a00 */ 141,132, 1, 4, 1, 0, 0, 65,185, 3, 0, 0, 0,235, 39, 65, +/* 0x0a10 */ 41,195, 65, 41,194,137,208,102,193,232, 5, 77,141,129, 4, 2, +/* 0x0a20 */ 0, 0, 65,189, 16, 0, 0, 0,102, 41,194,102, 65,137, 81, 2, +/* 0x0a30 */ 65,185, 8, 0, 0, 0, 68,137,203,189, 1, 0, 0, 0, 72, 99, +/* 0x0a40 */ 197, 65,129,251,255,255,255, 0, 73,141, 52, 64,119, 26, 76, 57, +/* 0x0a50 */ 231, 15,132,135, 2, 0, 0, 15,182, 7, 65,193,226, 8, 65,193, +/* 0x0a60 */ 227, 8, 72,255,199, 65, 9,194, 15,183, 14, 68,137,216,193,232, +/* 0x0a70 */ 11, 15,183,209, 15,175,194, 65, 57,194,115, 23, 65,137,195,184, +/* 0x0a80 */ 0, 8, 0, 0, 1,237, 41,208,193,248, 5,141, 4, 1,102,137, +/* 0x0a90 */ 6,235, 22, 65, 41,195, 65, 41,194,137,200,102,193,232, 5,141, +/* 0x0aa0 */ 108, 45, 1,102, 41,193,102,137, 14,255,203,117,145,184, 1, 0, +/* 0x0ab0 */ 0, 0, 68,137,201,211,224, 41,197, 68, 1,237,131,124, 36,200, +/* 0x0ac0 */ 3, 15,143,194, 1, 0, 0,131, 68, 36,200, 7,184, 3, 0, 0, +/* 0x0ad0 */ 0,131,253, 4, 15, 76,197, 72,139, 92, 36,216, 65,184, 1, 0, +/* 0x0ae0 */ 0, 0, 72,152, 72,193,224, 7, 76,141,140, 3, 96, 3, 0, 0, +/* 0x0af0 */ 187, 6, 0, 0, 0, 73, 99,192, 65,129,251,255,255,255, 0, 73, +/* 0x0b00 */ 141, 52, 65,119, 26, 76, 57,231, 15,132,208, 1, 0, 0, 15,182, +/* 0x0b10 */ 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15, +/* 0x0b20 */ 183, 22, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57, +/* 0x0b30 */ 194,115, 24, 65,137,195,184, 0, 8, 0, 0, 69, 1,192, 41,200, +/* 0x0b40 */ 193,248, 5,141, 4, 2,102,137, 6,235, 23, 65, 41,195, 65, 41, +/* 0x0b50 */ 194,137,208,102,193,232, 5, 71,141, 68, 0, 1,102, 41,194,102, +/* 0x0b60 */ 137, 22,255,203,117,143, 65,131,232, 64, 65,131,248, 3, 69,137, +/* 0x0b70 */ 198, 15,142, 13, 1, 0, 0, 65,131,230, 1, 68,137,192,209,248, +/* 0x0b80 */ 65,131,206, 2, 65,131,248, 13,141,112,255,127, 35,137,241, 72, +/* 0x0b90 */ 139, 92, 36,216, 73, 99,192, 65,211,230, 72, 1,192, 68,137,242, +/* 0x0ba0 */ 72,141, 20, 83, 72, 41,194, 76,141,138, 94, 5, 0, 0,235, 81, +/* 0x0bb0 */ 141,112,251, 65,129,251,255,255,255, 0,119, 26, 76, 57,231, 15, +/* 0x0bc0 */ 132, 25, 1, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, +/* 0x0bd0 */ 72,255,199, 65, 9,194, 65,209,235, 69, 1,246, 69, 57,218,114, +/* 0x0be0 */ 7, 69, 41,218, 65,131,206, 1,255,206,117,199, 76,139, 76, 36, +/* 0x0bf0 */ 216, 65,193,230, 4,190, 4, 0, 0, 0, 73,129,193, 68, 6, 0, +/* 0x0c00 */ 0, 65,189, 1, 0, 0, 0,187, 1, 0, 0, 0, 72, 99,195, 65, +/* 0x0c10 */ 129,251,255,255,255, 0, 77,141, 4, 65,119, 26, 76, 57,231, 15, +/* 0x0c20 */ 132,185, 0, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, +/* 0x0c30 */ 72,255,199, 65, 9,194, 65, 15,183, 16, 68,137,216,193,232, 11, +/* 0x0c40 */ 15,183,202, 15,175,193, 65, 57,194,115, 24, 65,137,195,184, 0, +/* 0x0c50 */ 8, 0, 0, 1,219, 41,200,193,248, 5,141, 4, 2,102, 65,137, +/* 0x0c60 */ 0,235, 26, 65, 41,195, 65, 41,194,137,208,102,193,232, 5,141, +/* 0x0c70 */ 92, 27, 1, 69, 9,238,102, 41,194,102, 65,137, 16, 69, 1,237, +/* 0x0c80 */ 255,206,117,136, 65,255,198,116, 64,131,197, 2, 69, 57,254,119, +/* 0x0c90 */ 77, 72,139, 84, 36,232, 68,137,248, 68, 41,240, 68, 15,182, 44, +/* 0x0ca0 */ 2, 68,137,248, 65,255,199,255,205, 68,136, 44, 2, 15,149,194, +/* 0x0cb0 */ 49,192, 68, 59,124, 36,228, 15,146,192,133,194,117,211, 68, 59, +/* 0x0cc0 */ 124, 36,228, 15,130, 69,247,255,255, 65,129,251,255,255,255, 0, +/* 0x0cd0 */ 119, 22, 76, 57,231,184, 1, 0, 0, 0,116, 35,235, 7,184, 1, +/* 0x0ce0 */ 0, 0, 0,235, 26, 72,255,199,137,248, 43, 68, 36,248, 72,139, +/* 0x0cf0 */ 76, 36,240, 72,139, 92, 36, 56,137, 1, 68,137, 59, 49,192, 91, +/* 0x0d00 */ 93, 65, 92, 65, 93, 65, 94, 65, 95, 65, 87, 72,141, 71, 4, 69, +/* 0x0d10 */ 49,255, 65, 86, 65,190, 1, 0, 0, 0, 65, 85, 69, 49,237, 65, +/* 0x0d20 */ 84, 85, 83, 72,137, 76, 36,240, 72,137, 68, 36,216,184, 1, 0, +/* 0x0d30 */ 0, 0, 72,137,116, 36,248, 76,137, 68, 36,232,137,195, 68,137, +/* 0x0d40 */ 76, 36,228, 15,182, 79, 2,211,227,137,217, 72,139, 92, 36, 56, +/* 0x0d50 */ 255,201,137, 76, 36,212, 15,182, 79, 1,211,224, 72,139, 76, 36, +/* 0x0d60 */ 240,255,200,137, 68, 36,208, 15,182, 7,199, 1, 0, 0, 0, 0, +/* 0x0d70 */ 199, 68, 36,200, 0, 0, 0, 0,199, 68, 36,196, 1, 0, 0, 0, +/* 0x0d80 */ 199, 68, 36,192, 1, 0, 0, 0,199, 68, 36,188, 1, 0, 0, 0, +/* 0x0d90 */ 199, 3, 0, 0, 0, 0,137, 68, 36,204, 15,182, 79, 1, 1,193, +/* 0x0da0 */ 184, 0, 3, 0, 0,211,224, 49,201,141,184, 54, 7, 0, 0, 65, +/* 0x0db0 */ 57,255,115, 19, 72,139, 92, 36,216,137,200,255,193, 57,249,102, +/* 0x0dc0 */ 199, 4, 67, 0, 4,235,235, 72,139,124, 36,248,137,208, 69, 49, +/* 0x0dd0 */ 210, 65,131,203,255, 49,210, 73,137,252, 73, 1,196, 76, 57,231, +/* 0x0de0 */ 15,132,239, 8, 0, 0, 15,182, 7, 65,193,226, 8,255,194, 72, +/* 0x0df0 */ 255,199, 65, 9,194,131,250, 4,126,227, 68, 59,124, 36,228, 15, +/* 0x0e00 */ 131,218, 8, 0, 0,139, 68, 36,212, 72, 99, 92, 36,200, 72,139, +/* 0x0e10 */ 84, 36,216, 68, 33,248,137, 68, 36,184, 72, 99,108, 36,184, 72, +/* 0x0e20 */ 137,216, 72,193,224, 4, 72, 1,232, 65,129,251,255,255,255, 0, +/* 0x0e30 */ 76,141, 12, 66,119, 26, 76, 57,231, 15,132,150, 8, 0, 0, 15, +/* 0x0e40 */ 182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, +/* 0x0e50 */ 65, 15,183, 17, 68,137,216,193,232, 11, 15,183,202, 15,175,193, +/* 0x0e60 */ 65, 57,194, 15,131,197, 1, 0, 0, 65,137,195,184, 0, 8, 0, +/* 0x0e70 */ 0, 72,139, 92, 36,216, 41,200, 15,182, 76, 36,204,190, 1, 0, +/* 0x0e80 */ 0, 0,193,248, 5,141, 4, 2, 65, 15,182,213,102, 65,137, 1, +/* 0x0e90 */ 139, 68, 36,208, 68, 33,248,211,224,185, 8, 0, 0, 0, 43, 76, +/* 0x0ea0 */ 36,204,211,250, 1,208,105,192, 0, 3, 0, 0,131,124, 36,200, +/* 0x0eb0 */ 6,137,192, 76,141,140, 67,108, 14, 0, 0, 15,142,184, 0, 0, +/* 0x0ec0 */ 0, 72,139, 84, 36,232, 68,137,248, 68, 41,240, 15,182, 44, 2, +/* 0x0ed0 */ 1,237, 72, 99,214,137,235,129,227, 0, 1, 0, 0, 65,129,251, +/* 0x0ee0 */ 255,255,255, 0, 72, 99,195, 73,141, 4, 65, 76,141, 4, 80,119, +/* 0x0ef0 */ 26, 76, 57,231, 15,132,219, 7, 0, 0, 15,182, 7, 65,193,226, +/* 0x0f00 */ 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183,144, 0, +/* 0x0f10 */ 2, 0, 0, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, +/* 0x0f20 */ 57,194,115, 32, 65,137,195,184, 0, 8, 0, 0, 1,246, 41,200, +/* 0x0f30 */ 193,248, 5,133,219,141, 4, 2,102, 65,137,128, 0, 2, 0, 0, +/* 0x0f40 */ 116, 33,235, 45, 65, 41,195, 65, 41,194,137,208,102,193,232, 5, +/* 0x0f50 */ 141,116, 54, 1,102, 41,194,133,219,102, 65,137,144, 0, 2, 0, +/* 0x0f60 */ 0,116, 14,129,254,255, 0, 0, 0, 15,142, 97,255,255,255,235, +/* 0x0f70 */ 120,129,254,255, 0, 0, 0,127,112, 72, 99,198, 65,129,251,255, +/* 0x0f80 */ 255,255, 0, 77,141, 4, 65,119, 26, 76, 57,231, 15,132, 67, 7, +/* 0x0f90 */ 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, +/* 0x0fa0 */ 65, 9,194, 65, 15,183, 16, 68,137,216,193,232, 11, 15,183,202, +/* 0x0fb0 */ 15,175,193, 65, 57,194,115, 24, 65,137,195,184, 0, 8, 0, 0, +/* 0x0fc0 */ 1,246, 41,200,193,248, 5,141, 4, 2,102, 65,137, 0,235,161, +/* 0x0fd0 */ 65, 41,195, 65, 41,194,137,208,102,193,232, 5,141,116, 54, 1, +/* 0x0fe0 */ 102, 41,194,102, 65,137, 16,235,136, 72,139, 76, 36,232, 68,137, +/* 0x0ff0 */ 248, 65,255,199, 65,137,245, 64,136, 52, 1,131,124, 36,200, 3, +/* 0x1000 */ 127, 13,199, 68, 36,200, 0, 0, 0, 0,233,166, 6, 0, 0,139, +/* 0x1010 */ 84, 36,200,139, 68, 36,200,131,234, 3,131,232, 6,131,124, 36, +/* 0x1020 */ 200, 9, 15, 79,208,137, 84, 36,200,233,135, 6, 0, 0, 65, 41, +/* 0x1030 */ 195, 65, 41,194,137,208,102,193,232, 5,102, 41,194, 72,139, 68, +/* 0x1040 */ 36,216, 65,129,251,255,255,255, 0,102, 65,137, 17, 72,141, 52, +/* 0x1050 */ 88,119, 26, 76, 57,231, 15,132,121, 6, 0, 0, 15,182, 7, 65, +/* 0x1060 */ 193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15,183,150, +/* 0x1070 */ 128, 1, 0, 0, 68,137,216,193,232, 11, 15,183,202, 15,175,193, +/* 0x1080 */ 65, 57,194,115, 78, 65,137,195,184, 0, 8, 0, 0, 76,139, 76, +/* 0x1090 */ 36,216, 41,200,139, 76, 36,196, 68,137,116, 36,196,193,248, 5, +/* 0x10a0 */ 141, 4, 2,139, 84, 36,192,137, 76, 36,192,102,137,134,128, 1, +/* 0x10b0 */ 0, 0, 49,192,131,124, 36,200, 6,137, 84, 36,188, 15,159,192, +/* 0x10c0 */ 73,129,193,100, 6, 0, 0,141, 4, 64,137, 68, 36,200,233, 84, +/* 0x10d0 */ 2, 0, 0, 65, 41,195, 65, 41,194,137,208,102,193,232, 5,102, +/* 0x10e0 */ 41,194, 65,129,251,255,255,255, 0,102,137,150,128, 1, 0, 0, +/* 0x10f0 */ 119, 26, 76, 57,231, 15,132,218, 5, 0, 0, 15,182, 7, 65,193, +/* 0x1100 */ 226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15,183,150,152, +/* 0x1110 */ 1, 0, 0, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, +/* 0x1120 */ 57,194, 15,131,208, 0, 0, 0, 65,184, 0, 8, 0, 0, 65,137, +/* 0x1130 */ 195, 72,193,227, 5, 68,137,192, 41,200,193,248, 5,141, 4, 2, +/* 0x1140 */ 102,137,134,152, 1, 0, 0, 72,139, 68, 36,216, 72, 1,216, 65, +/* 0x1150 */ 129,251,255,255,255, 0, 72,141, 52,104,119, 26, 76, 57,231, 15, +/* 0x1160 */ 132,112, 5, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, +/* 0x1170 */ 72,255,199, 65, 9,194, 15,183,150,224, 1, 0, 0, 68,137,216, +/* 0x1180 */ 193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, 79, 65, 41, +/* 0x1190 */ 200, 65,137,195, 65,193,248, 5, 69,133,255, 66,141, 4, 2,102, +/* 0x11a0 */ 137,134,224, 1, 0, 0, 15,132, 41, 5, 0, 0, 49,192,131,124, +/* 0x11b0 */ 36,200, 6, 72,139, 92, 36,232, 15,159,192,141, 68, 0, 9,137, +/* 0x11c0 */ 68, 36,200, 68,137,248, 68, 41,240, 68, 15,182, 44, 3, 68,137, +/* 0x11d0 */ 248, 65,255,199, 68,136, 44, 3,233,216, 4, 0, 0, 65, 41,195, +/* 0x11e0 */ 65, 41,194,137,208,102,193,232, 5,102, 41,194,102,137,150,224, +/* 0x11f0 */ 1, 0, 0,233, 17, 1, 0, 0, 65, 41,195, 65, 41,194,137,208, +/* 0x1200 */ 102,193,232, 5,102, 41,194, 65,129,251,255,255,255, 0,102,137, +/* 0x1210 */ 150,152, 1, 0, 0,119, 26, 76, 57,231, 15,132,181, 4, 0, 0, +/* 0x1220 */ 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9, +/* 0x1230 */ 194, 15,183,150,176, 1, 0, 0, 68,137,216,193,232, 11, 15,183, +/* 0x1240 */ 202, 15,175,193, 65, 57,194,115, 32, 65,137,195,184, 0, 8, 0, +/* 0x1250 */ 0, 41,200,193,248, 5,141, 4, 2,102,137,134,176, 1, 0, 0, +/* 0x1260 */ 139, 68, 36,196,233,152, 0, 0, 0, 65, 41,195, 65, 41,194,137, +/* 0x1270 */ 208,102,193,232, 5,102, 41,194, 65,129,251,255,255,255, 0,102, +/* 0x1280 */ 137,150,176, 1, 0, 0,119, 26, 76, 57,231, 15,132, 68, 4, 0, +/* 0x1290 */ 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, +/* 0x12a0 */ 9,194, 15,183,150,200, 1, 0, 0, 68,137,216,193,232, 11, 15, +/* 0x12b0 */ 183,202, 15,175,193, 65, 57,194,115, 29, 65,137,195,184, 0, 8, +/* 0x12c0 */ 0, 0, 41,200,193,248, 5,141, 4, 2,102,137,134,200, 1, 0, +/* 0x12d0 */ 0,139, 68, 36,192,235, 34, 65, 41,195, 65, 41,194,137,208,102, +/* 0x12e0 */ 193,232, 5,102, 41,194,139, 68, 36,188,102,137,150,200, 1, 0, +/* 0x12f0 */ 0,139, 84, 36,192,137, 84, 36,188,139, 76, 36,196,137, 76, 36, +/* 0x1300 */ 192, 68,137,116, 36,196, 65,137,198, 49,192,131,124, 36,200, 6, +/* 0x1310 */ 76,139, 76, 36,216, 15,159,192, 73,129,193,104, 10, 0, 0,141, +/* 0x1320 */ 68, 64, 8,137, 68, 36,200, 65,129,251,255,255,255, 0,119, 26, +/* 0x1330 */ 76, 57,231, 15,132,156, 3, 0, 0, 15,182, 7, 65,193,226, 8, +/* 0x1340 */ 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183, 17, 68,137, +/* 0x1350 */ 216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, 39, 65, +/* 0x1360 */ 137,195,184, 0, 8, 0, 0, 69, 49,237, 41,200,193,248, 5,141, +/* 0x1370 */ 4, 2,102, 65,137, 1, 72, 99, 68, 36,184, 72,193,224, 4, 77, +/* 0x1380 */ 141, 68, 1, 4,235,120, 65, 41,195, 65, 41,194,137,208,102,193, +/* 0x1390 */ 232, 5,102, 41,194, 65,129,251,255,255,255, 0,102, 65,137, 17, +/* 0x13a0 */ 119, 26, 76, 57,231, 15,132, 42, 3, 0, 0, 15,182, 7, 65,193, +/* 0x13b0 */ 226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183, 81, +/* 0x13c0 */ 2, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194, +/* 0x13d0 */ 115, 52, 65,137,195,184, 0, 8, 0, 0, 65,189, 8, 0, 0, 0, +/* 0x13e0 */ 41,200,193,248, 5,141, 4, 2,102, 65,137, 65, 2, 72, 99, 68, +/* 0x13f0 */ 36,184, 72,193,224, 4, 77,141,132, 1, 4, 1, 0, 0, 65,185, +/* 0x1400 */ 3, 0, 0, 0,235, 39, 65, 41,195, 65, 41,194,137,208,102,193, +/* 0x1410 */ 232, 5, 77,141,129, 4, 2, 0, 0, 65,189, 16, 0, 0, 0,102, +/* 0x1420 */ 41,194,102, 65,137, 81, 2, 65,185, 8, 0, 0, 0, 68,137,203, +/* 0x1430 */ 189, 1, 0, 0, 0, 72, 99,197, 65,129,251,255,255,255, 0, 73, +/* 0x1440 */ 141, 52, 64,119, 26, 76, 57,231, 15,132,135, 2, 0, 0, 15,182, +/* 0x1450 */ 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15, +/* 0x1460 */ 183, 14, 68,137,216,193,232, 11, 15,183,209, 15,175,194, 65, 57, +/* 0x1470 */ 194,115, 23, 65,137,195,184, 0, 8, 0, 0, 1,237, 41,208,193, +/* 0x1480 */ 248, 5,141, 4, 1,102,137, 6,235, 22, 65, 41,195, 65, 41,194, +/* 0x1490 */ 137,200,102,193,232, 5,141,108, 45, 1,102, 41,193,102,137, 14, +/* 0x14a0 */ 255,203,117,145,184, 1, 0, 0, 0, 68,137,201,211,224, 41,197, +/* 0x14b0 */ 68, 1,237,131,124, 36,200, 3, 15,143,194, 1, 0, 0,131, 68, +/* 0x14c0 */ 36,200, 7,184, 3, 0, 0, 0,131,253, 4, 15, 76,197, 72,139, +/* 0x14d0 */ 92, 36,216, 65,184, 1, 0, 0, 0, 72,152, 72,193,224, 7, 76, +/* 0x14e0 */ 141,140, 3, 96, 3, 0, 0,187, 6, 0, 0, 0, 73, 99,192, 65, +/* 0x14f0 */ 129,251,255,255,255, 0, 73,141, 52, 65,119, 26, 76, 57,231, 15, +/* 0x1500 */ 132,208, 1, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, +/* 0x1510 */ 72,255,199, 65, 9,194, 15,183, 22, 68,137,216,193,232, 11, 15, +/* 0x1520 */ 183,202, 15,175,193, 65, 57,194,115, 24, 65,137,195,184, 0, 8, +/* 0x1530 */ 0, 0, 69, 1,192, 41,200,193,248, 5,141, 4, 2,102,137, 6, +/* 0x1540 */ 235, 23, 65, 41,195, 65, 41,194,137,208,102,193,232, 5, 71,141, +/* 0x1550 */ 68, 0, 1,102, 41,194,102,137, 22,255,203,117,143, 65,131,232, +/* 0x1560 */ 64, 65,131,248, 3, 69,137,198, 15,142, 13, 1, 0, 0, 65,131, +/* 0x1570 */ 230, 1, 68,137,192,209,248, 65,131,206, 2, 65,131,248, 13,141, +/* 0x1580 */ 112,255,127, 35,137,241, 72,139, 92, 36,216, 73, 99,192, 65,211, +/* 0x1590 */ 230, 72, 1,192, 68,137,242, 72,141, 20, 83, 72, 41,194, 76,141, +/* 0x15a0 */ 138, 94, 5, 0, 0,235, 81,141,112,251, 65,129,251,255,255,255, +/* 0x15b0 */ 0,119, 26, 76, 57,231, 15,132, 25, 1, 0, 0, 15,182, 7, 65, +/* 0x15c0 */ 193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65,209,235, +/* 0x15d0 */ 69, 1,246, 69, 57,218,114, 7, 69, 41,218, 65,131,206, 1,255, +/* 0x15e0 */ 206,117,199, 76,139, 76, 36,216, 65,193,230, 4,190, 4, 0, 0, +/* 0x15f0 */ 0, 73,129,193, 68, 6, 0, 0, 65,189, 1, 0, 0, 0,187, 1, +/* 0x1600 */ 0, 0, 0, 72, 99,195, 65,129,251,255,255,255, 0, 77,141, 4, +/* 0x1610 */ 65,119, 26, 76, 57,231, 15,132,185, 0, 0, 0, 15,182, 7, 65, +/* 0x1620 */ 193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183, +/* 0x1630 */ 16, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194, +/* 0x1640 */ 115, 24, 65,137,195,184, 0, 8, 0, 0, 1,219, 41,200,193,248, +/* 0x1650 */ 5,141, 4, 2,102, 65,137, 0,235, 26, 65, 41,195, 65, 41,194, +/* 0x1660 */ 137,208,102,193,232, 5,141, 92, 27, 1, 69, 9,238,102, 41,194, +/* 0x1670 */ 102, 65,137, 16, 69, 1,237,255,206,117,136, 65,255,198,116, 64, +/* 0x1680 */ 131,197, 2, 69, 57,254,119, 77, 72,139, 84, 36,232, 68,137,248, +/* 0x1690 */ 68, 41,240, 68, 15,182, 44, 2, 68,137,248, 65,255,199,255,205, +/* 0x16a0 */ 68,136, 44, 2, 15,149,194, 49,192, 68, 59,124, 36,228, 15,146, +/* 0x16b0 */ 192,133,194,117,211, 68, 59,124, 36,228, 15,130, 69,247,255,255, +/* 0x16c0 */ 65,129,251,255,255,255, 0,119, 22, 76, 57,231,184, 1, 0, 0, +/* 0x16d0 */ 0,116, 35,235, 7,184, 1, 0, 0, 0,235, 26, 72,255,199,137, +/* 0x16e0 */ 248, 43, 68, 36,248, 72,139, 76, 36,240, 72,139, 92, 36, 56,137, +/* 0x16f0 */ 1, 68,137, 59, 49,192, 91, 93, 65, 92, 65, 93, 65, 94, 65, 95, +/* 0x1700 */ 72,139,117,248, 72,139,125, 16,139, 75, 4, 72, 1,206,139, 19, +/* 0x1710 */ 72, 1,215,201, 89, 72,137,240, 72, 41,200, 90, 72, 41,215, 89, +/* 0x1720 */ 137, 57, 91, 93,195, 93, 72,141,157,232,255,255,255,139, 3, 72, +/* 0x1730 */ 41,195,139,149,220,255,255,255, 72, 1,218, 72,137, 84, 36, 56, +/* 0x1740 */ 139,149,224,255,255,255, 41,208, 72, 1,218, 45, 0, 0, 0, 0, +/* 0x1750 */ 5, 0, 0, 0, 0, 80, 82,150, 77, 49,201, 65,131,200,255, 65, +/* 0x1760 */ 186, 2, 16, 0, 0,106, 3, 90, 49,255,184,197, 0, 0, 2, 15, +/* 0x1770 */ 5,114, 53, 94, 89, 81, 80, 80, 95, 72, 1,200, 72, 41,245, 72, +/* 0x1780 */ 1,253, 87,131,193, 7,193,233, 3,243, 72,165, 89, 95, 94,106, +/* 0x1790 */ 5, 90, 86, 87, 81, 80,184, 74, 0, 0, 2, 15, 5,114, 9, 88, +/* 0x17a0 */ 72, 5, 35,255,255,255,255,224,244,235,253, 83, 95,139,181,228, +/* 0x17b0 */ 255,255,255,106, 3, 90,184, 74, 0, 0, 2, 15, 5,114,233, 94, +/* 0x17c0 */ 83, 95, 72,131,197, 7,173, 72, 1,199,173, 72, 1,198,173, 86, +/* 0x17d0 */ 87,173,133,192,116, 54, 80, 72,137,225, 72, 1,248, 80,173,146, +/* 0x17e0 */ 173, 65,144, 72,141, 4, 22, 80, 82, 72,137,250, 72,137,247, 94, +/* 0x17f0 */ 255,213, 94, 95, 89, 95, 89,139, 49, 15,182, 81, 10, 15,182, 73, +/* 0x1800 */ 9,133,201,116, 7,232, 52, 0, 0, 0,235, 0, 83, 95, 72,139, +/* 0x1810 */ 69,249, 72,131,195, 48, 72,137, 3,139,181,221,255,255,255,106, +/* 0x1820 */ 5, 90,184, 74, 0, 0, 2, 15, 5, 15,130,121,255,255,255, 95, +/* 0x1830 */ 94,184, 73, 0, 0, 2, 83, 89, 91, 93, 65, 88,255,225,131,249, +/* 0x1840 */ 73,117, 68, 83, 87, 72,141, 76, 55,253, 94, 86, 91,235, 47, 72, +/* 0x1850 */ 57,206,115, 50, 86, 94,172, 60,128,114, 10, 60,143,119, 6,128, +/* 0x1860 */ 126,254, 15,116, 6, 44,232, 60, 1,119,228, 72, 57,206,115, 22, +/* 0x1870 */ 86,173, 40,208,117,223, 95, 15,200, 41,248, 1,216,171, 72, 57, +/* 0x1880 */ 206,115, 3,172,235,223, 91,195,102,105,108,101, 32,102,111,114, +/* 0x1890 */ 109, 97,116, 32,101,108,102, 54, 52, 45,120, 56, 54, 45, 54, 52, +/* 0x18a0 */ 10, 10, 83,101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, +/* 0x18b0 */ 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105, +/* 0x18c0 */ 122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, +/* 0x18d0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, +/* 0x18e0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, +/* 0x18f0 */ 32,111,102,102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103, +/* 0x1900 */ 115, 10, 32, 32, 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, 32, +/* 0x1910 */ 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 50, 51, 32, 32, 48, 48, +/* 0x1920 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, +/* 0x1930 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1940 */ 32, 32, 48, 48, 48, 48, 48, 48, 52, 48, 32, 32, 50, 42, 42, 48, +/* 0x1950 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, +/* 0x1960 */ 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 49, 32, +/* 0x1970 */ 78, 82, 86, 95, 72, 69, 65, 68, 32, 32, 32, 32, 32, 32, 48, 48, +/* 0x1980 */ 48, 48, 48, 48, 54, 54, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1990 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, +/* 0x19a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, +/* 0x19b0 */ 48, 48, 54, 51, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, +/* 0x19c0 */ 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, +/* 0x19d0 */ 32, 50, 32, 78, 82, 86, 50, 69, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x19e0 */ 32, 48, 48, 48, 48, 48, 48, 98, 55, 32, 32, 48, 48, 48, 48, 48, +/* 0x19f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, +/* 0x1a00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, +/* 0x1a10 */ 48, 48, 48, 48, 48, 99, 57, 32, 32, 50, 42, 42, 48, 32, 32, 67, +/* 0x1a20 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, +/* 0x1a30 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 51, 32, 78, 82, 86, +/* 0x1a40 */ 50, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, +/* 0x1a50 */ 48, 57,101, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1a60 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1a70 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, 56, +/* 0x1a80 */ 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, +/* 0x1a90 */ 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, +/* 0x1aa0 */ 76, 89, 10, 32, 32, 52, 32, 78, 82, 86, 50, 66, 32, 32, 32, 32, +/* 0x1ab0 */ 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 57, 48, 32, 32, 48, +/* 0x1ac0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1ad0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1ae0 */ 48, 32, 32, 48, 48, 48, 48, 48, 50, 49,101, 32, 32, 50, 42, 42, +/* 0x1af0 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, +/* 0x1b00 */ 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 53, +/* 0x1b10 */ 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 32, 32, 32, 32, 48, +/* 0x1b20 */ 48, 48, 48, 48, 48, 54, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, +/* 0x1b30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, +/* 0x1b40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, +/* 0x1b50 */ 48, 48, 50, 97,101, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, +/* 0x1b60 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, +/* 0x1b70 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 54, 32, 76, 90, 77, 65, 95, +/* 0x1b80 */ 68, 69, 67, 49, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 57,102, +/* 0x1b90 */ 55, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1ba0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1bb0 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 51, 49, 50, 32, +/* 0x1bc0 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, +/* 0x1bd0 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 55, 32, 76, 90, +/* 0x1be0 */ 77, 65, 95, 68, 69, 67, 50, 48, 32, 32, 32, 32, 48, 48, 48, 48, +/* 0x1bf0 */ 48, 57,102, 55, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1c00 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1c10 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,100, +/* 0x1c20 */ 48, 57, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, +/* 0x1c30 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 56, +/* 0x1c40 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 32, 32, 32, 32, 48, +/* 0x1c50 */ 48, 48, 48, 48, 48, 49, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, +/* 0x1c60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, +/* 0x1c70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, +/* 0x1c80 */ 48, 49, 55, 48, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, +/* 0x1c90 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, +/* 0x1ca0 */ 32, 32, 57, 32, 78, 82, 86, 95, 84, 65, 73, 76, 32, 32, 32, 32, +/* 0x1cb0 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, +/* 0x1cc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, +/* 0x1cd0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, +/* 0x1ce0 */ 48, 48, 48, 48, 49, 55, 49, 52, 32, 32, 50, 42, 42, 48, 32, 32, +/* 0x1cf0 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, +/* 0x1d00 */ 76, 89, 10, 32, 49, 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, +/* 0x1d10 */ 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 49, 49, 32, 32, 48, +/* 0x1d20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1d30 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1d40 */ 48, 32, 32, 48, 48, 48, 48, 49, 55, 49, 52, 32, 32, 50, 42, 42, +/* 0x1d50 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, +/* 0x1d60 */ 68, 79, 78, 76, 89, 10, 32, 49, 49, 32, 77, 65, 67, 72, 77, 65, +/* 0x1d70 */ 73, 78, 90, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 54, 51, +/* 0x1d80 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1d90 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1da0 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 55, 50, 53, 32, 32, +/* 0x1db0 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, +/* 0x1dc0 */ 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, +/* 0x1dd0 */ 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, +/* 0x1de0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, +/* 0x1df0 */ 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 9, +/* 0x1e00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1e10 */ 32, 78, 82, 86, 95, 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, +/* 0x1e20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, +/* 0x1e30 */ 100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 9, 48, 48, +/* 0x1e40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, +/* 0x1e50 */ 90, 77, 65, 95, 68, 69, 67, 51, 48, 10, 48, 48, 48, 48, 48, 48, +/* 0x1e60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, +/* 0x1e70 */ 100, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, 9, 48, 48, 48, +/* 0x1e80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 77, 65, +/* 0x1e90 */ 67, 72, 77, 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1ea0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, +/* 0x1eb0 */ 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, +/* 0x1ec0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 77, 65, 67, 72, +/* 0x1ed0 */ 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1ee0 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 77, +/* 0x1ef0 */ 65, 67, 72, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, +/* 0x1f00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 77, 65, 67, 72, 77, 65, +/* 0x1f10 */ 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1f20 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, +/* 0x1f30 */ 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1f40 */ 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, +/* 0x1f50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, +/* 0x1f60 */ 100, 32, 32, 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, +/* 0x1f70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 68, 10, +/* 0x1f80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1f90 */ 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 66, 9, 48, +/* 0x1fa0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1fb0 */ 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1fc0 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, +/* 0x1fd0 */ 90, 77, 65, 95, 69, 76, 70, 48, 48, 9, 48, 48, 48, 48, 48, 48, +/* 0x1fe0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, +/* 0x1ff0 */ 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x2000 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, +/* 0x2010 */ 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, +/* 0x2020 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, +/* 0x2030 */ 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x2040 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, +/* 0x2050 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 9, 48, 48, 48, 48, 48, 48, +/* 0x2060 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, +/* 0x2070 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x2080 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, +/* 0x2090 */ 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x20a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 84, 65, 73, +/* 0x20b0 */ 76, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x20c0 */ 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, +/* 0x20d0 */ 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x20e0 */ 48, 48, 48, 48, 48, 32, 95,115,116, 97,114,116, 10, 48, 48, 48, +/* 0x20f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 32,103, 32, +/* 0x2100 */ 32, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, 9, +/* 0x2110 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x2120 */ 32,101,110,100, 95,100,101, 99,111,109,112,114,101,115,115, 10, +/* 0x2130 */ 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, +/* 0x2140 */ 82, 68, 83, 32, 70, 79, 82, 32, 91, 77, 65, 67, 72, 77, 65, 73, +/* 0x2150 */ 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, +/* 0x2160 */ 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, +/* 0x2170 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, +/* 0x2180 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 48, 32, 82, +/* 0x2190 */ 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, +/* 0x21a0 */ 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, 43, 48,120,102,102,102, +/* 0x21b0 */ 102,102,102,102,102,102,102,102,102,102,102,102, 99, 10, 10, 82, +/* 0x21c0 */ 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, +/* 0x21d0 */ 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 69, 93, 58, 10, 79, +/* 0x21e0 */ 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x21f0 */ 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x2200 */ 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x2210 */ 48, 48, 48, 48, 48, 48, 97,101, 32, 82, 95, 88, 56, 54, 95, 54, +/* 0x2220 */ 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 78, 82, 86, 95, 72, +/* 0x2230 */ 69, 65, 68, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x2240 */ 48, 48, 48, 48, 50, 49, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x2250 */ 48, 48, 48, 48, 48, 53, 98, 32, 82, 95, 88, 56, 54, 95, 54, 52, +/* 0x2260 */ 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, 65, +/* 0x2270 */ 73, 78, 89, 43, 48,120,102,102,102,102,102,102,102,102,102,102, +/* 0x2280 */ 102,102,102,102,102, 99, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, +/* 0x2290 */ 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, +/* 0x22a0 */ 78, 82, 86, 50, 68, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, +/* 0x22b0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, +/* 0x22c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, +/* 0x22d0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 57, +/* 0x22e0 */ 53, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, +/* 0x22f0 */ 32, 32, 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 43, 48,120, 48, +/* 0x2300 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 49, 10, +/* 0x2310 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 98, +/* 0x2320 */ 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, +/* 0x2330 */ 32, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, 43, 48,120,102, +/* 0x2340 */ 102,102,102,102,102,102,102,102,102,102,102,102,102,102, 99, 10, +/* 0x2350 */ 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, +/* 0x2360 */ 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 66, 93, 58, +/* 0x2370 */ 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x2380 */ 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x2390 */ 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, +/* 0x23a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 56, 97, 32, 82, 95, 88, 56, 54, +/* 0x23b0 */ 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 78, 82, 86, +/* 0x23c0 */ 95, 72, 69, 65, 68, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x23d0 */ 48, 48, 48, 48, 48, 48, 50, 49, 10, 48, 48, 48, 48, 48, 48, 48, +/* 0x23e0 */ 48, 48, 48, 48, 48, 48, 48, 53, 50, 32, 82, 95, 88, 56, 54, 95, +/* 0x23f0 */ 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 77, 65, 67, 72, +/* 0x2400 */ 77, 65, 73, 78, 89, 43, 48,120,102,102,102,102,102,102,102,102, +/* 0x2410 */ 102,102,102,102,102,102,102, 99, 10, 10, 82, 69, 76, 79, 67, 65, +/* 0x2420 */ 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, +/* 0x2430 */ 32, 91, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, +/* 0x2440 */ 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x2450 */ 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x2460 */ 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x2470 */ 48, 48, 48, 48, 48, 48, 48, 54, 32, 82, 95, 88, 56, 54, 95, 54, +/* 0x2480 */ 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, +/* 0x2490 */ 68, 69, 67, 51, 48, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x24a0 */ 48, 48, 48, 48, 48, 48, 49, 48, 10, 10, 82, 69, 76, 79, 67, 65, +/* 0x24b0 */ 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, +/* 0x24c0 */ 32, 91, 77, 65, 67, 72, 77, 65, 73, 78, 90, 93, 58, 10, 79, 70, +/* 0x24d0 */ 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, +/* 0x24e0 */ 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x24f0 */ 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x2500 */ 48, 48, 48, 48, 48, 50, 55, 32, 82, 95, 88, 56, 54, 95, 54, 52, +/* 0x2510 */ 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 95,115,116, 97,114,116, +/* 0x2520 */ 43, 48,120,102,102,102,102,102,102,102,102,102,102,102,102,102, +/* 0x2530 */ 102,102, 99, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x2540 */ 48, 48, 50, 99, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, /* 0x2550 */ 32, 32, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, /* 0x2560 */ 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2570 */ 49, 50,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2580 */ 48, 48, 52,101, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, -/* 0x2590 */ 32, 32, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, -/* 0x25a0 */ 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x25b0 */ 48, 48,100, 10 +/* 0x2570 */ 49, 54, 51, 10 }; diff --git a/src/stub/src/amd64-darwin.dylib-entry.S b/src/stub/src/amd64-darwin.dylib-entry.S index 973e500a..e8e5834a 100644 --- a/src/stub/src/amd64-darwin.dylib-entry.S +++ b/src/stub/src/amd64-darwin.dylib-entry.S @@ -37,9 +37,10 @@ /************************************************************************* // We have been CALLed as a subroutine from dyld; C-language rules apply. +// init(%edi=argc, %rsi=argv, %rdx=envp, %rcx=apple, %r8=...) // -4*4+_start: .int32 offset(user_init_function) // -3*4+_start: .int32 offset(&b_info of compressed Mach_headers) -// -2*4+_start: .int32 length(compressed __TEXT) +// -2*4+_start: .int32 segTEXT.vmsize // -1*4+_start: .int32 total_length # of preceding bytes in file **************************************************************************/ @@ -47,10 +48,15 @@ section MACHMAINX _start: .globl _start L100: pause; jmp L100 // FIXME int3 // FIXME - push %rax // space for &user_init function + push $~0 // space for &user_init function + push %rdi; push %rsi; push %rdx; push %rcx; push %r8 // args push %rbp // callee-save registers push %rbx - call main // push &decompress + call main // push &escape +escape: + syscall + pop %rcx; pop %rdx; pop %rsi; pop %rdi + ret /* Returns 0 on success; non-zero on failure. */ decompress: // (uchar const *src, size_t lsrc, uchar *dst, u32 &ldst, uint method) @@ -187,7 +193,9 @@ end_decompress: .globl end_decompress /* IDENTSTR goes here */ section MACHMAINZ -SYS_mmap = 0x02000000 + 197 +SYS_mmap = 0x2000000 + 197 +SYS_mprotect = 0x2000000 + 0x4a +SYS_munmap = 0x2000000 + 73 PAGE_SIZE= ( 1<<12) sz_Mach_header= 7*4 @@ -212,54 +220,69 @@ PROT_WRITE= 2 PROT_EXEC= 4 +main: + pop %rbp # &escape + +// Get temp pages for compressed __TEXT and this stub + lea -1*4 + _start - escape(%rbp),%rbx + mov (%rbx),%eax; sub %rax,%rbx # our &Mach_header + mov -4*4 + _start - escape(%rbp),%edx # offset(user_init_fn) + add %rbx,%rdx; mov %rdx,7*8(%rsp) # reloc(user_init_fn) + mov -3*4 + _start - escape(%rbp),%edx # offset(b_info) + sub %edx,%eax; add %rbx,%rdx + sub $-4+ _start,%eax + add $ dy_top,%eax; push %rax # P_02 length(tmppag) + push %rdx # P_01 &b_info + xchg %eax,%arg2l # length + + xor %arg6,%arg6 # 0 offset + or $~0,%arg5l # -1 fd + mov $MAP_ANON|MAP_PRIVATE,%sys4l + push $PROT_READ|PROT_WRITE; pop %arg3 + xor %arg1l,%arg1l # 0 addr + mov $SYS_mmap,%eax; syscall; jc bad_mmap + +// Copy compressed__TEXT and this stub to temp pages + pop %rsi # P_01 &b_info src + pop %rcx; push %rcx # P_02 length(tmppag) + push %rax # P_03 addr(tmppag) + push %rax; pop %rdi # dst + add %rcx,%rax # reloc(dy_top) + sub %rsi,%rbp + add %rdi,%rbp # reloc(&escape) + push %rdi # P_05 reloc(&b_info) + add $7,%ecx; shr $3,%ecx; rep movsq + pop %rcx # P_05 reloc(&b_info) + +// Make temp pages executable, and go there + pop %arg1 # P_03 src (tmppag) + pop %arg2 # P_02 length(tmppag) + push $PROT_READ|PROT_EXEC; pop %arg3 + push %arg2 # P_02 length(tmppag) + push %arg1 # P_03 src(tmppag) + push %rcx # P_06 reloc(&b_info) + push %rax # P_04 reloc(dy_top) + mov $SYS_mprotect,%eax; syscall; jc bad_mmap + + pop %rax # P_04 reloc(dy_top) + add $dy_reloc - dy_top,%rax + jmp *%rax + bad_mmap: hlt jmp bad_mmap -main: - pop %rbp # &decompress - lea -4+ _start - decompress(%rbp),%rbx # &total_length - mov -1*4(%rbx),%eax # length(compressed __TEXT) - add $dy_top,%eax - sub $decompress,%eax - push %rax # length for eventual munmap - - mov $0,%arg6l # offset - mov $0,%arg5l # fd - mov $MAP_ANON|MAP_PRIVATE,%sys4l - mov $PROT_READ|PROT_WRITE,%arg3l - mov %eax,%arg2l # length - sub %arg1l,%arg1l # 0 addr - mov $SYS_mmap,%eax - syscall - jc bad_mmap - - push %rax # addr for eventual munmap - - // Copy interval [decompress, dy_top). - mov %rbp,%rsi # decompressor - mov %rax,%rbp # new location - mov %rax,%rdi # dst for decompressor - mov $dy_top,%ecx - sub $decompress,%ecx - cld; rep movsb - - // Goto the copied dy_reloc. - lea -(dy_top - dy_reloc)(%rdi),%rax - jmp *%rax dy_reloc: - // Copy compressed __TEXT. - push %rdi # remember start of compressed __TEXT - mov %rbx,%rdx # &total_length - mov -4*4(%rbx),%eax # offset(user_init_function) - sub (%rbx),%edx # runtime base address - add %rdx,%rax; mov %rax,(1+2+2)*4(%rsp) # relocate &user_init_function - mov -2*4(%rbx),%esi; add %rdx,%rsi - mov -1*4(%rbx),%ecx - rep movsb - pop %rsi # &b_info for Mach_header - mov %rdx,%rdi # runtime base address +// Make __TEXT writeable + push %rbx; pop %arg1 # our &Mach_header + mov -2*4 + _start - escape(%rbp),%arg2l + push $PROT_READ|PROT_WRITE; pop %arg3 + mov $SYS_mprotect,%eax; syscall; jc bad_mmap + + pop %rsi # P_06 reloc(&b_info) + push %rbx; pop %rdi # our &Mach_header + add $decompress - escape,%rbp // Decompress __TEXT, but do not overwrite Mach_headers // in order to maintain consistency with dyld partial caching of them. @@ -271,44 +294,47 @@ dy_uncpr: push %rsi; push %rdi # save in case unfilter lodsl; test %eax,%eax; jz dy_done - push %rax // sz_uncompressed (maximum dstlen for lzma) - mov %rsp,%arg4 // &dstlen - mov %rdi,%arg3 // dst - add %rdi,%rax; push %rax // next dst - lodsl; mov %eax,%arg2l // sz_compressed (srclen) - mov %rax,%rcx - lodsl; mov %eax,%arg5l // last 4 bytes of b_info - mov %rsi,%arg1 // &compressed __TEXT - add %rsi,%rcx; push %rcx // next src + push %rax // P_09 sz_unc (maximum dstlen for lzma) + mov %rsp,%arg4 // &dstlen (%rcx) + add %rdi,%rax; push %rax // P_07 next dst + lodsl; xchg %eax,%edx // sz_cpr (srclen) + lodsl; xchg %eax,%arg5l // last 4 bytes of b_info + lea (%rsi,%rdx),%rax; push %rax // P_08 next src + push %rdx // P_10 sz_cpr + mov %rdi,%arg3 // %rdx dst + mov %rsi,%arg1 // %rdi &compressed __TEXT + pop %arg2 // P_10 sz_cpr (srclen) call *%rbp // decompress(1=rdi=src, 2=rsi=srclen, 3=rdx=dst, 4=rcx=&dstlen, 5=r8=b_info.misc) - pop %rsi // next src - pop %rdi // next dst - pop %rcx // dstlen (junk) + pop %rsi // P_08 next src + pop %rdi // P_07 next dst + pop %rcx // P_09 dstlen (junk) - pop %rdx; pop %rax # rdx= old dst; rax= old &b_info - movzbl 1+ b_method(%rax),%arg4l # ftid - test %arg4l,%arg4l; je dy_uncpr # no filter - movzbl 2+ b_method(%rax),%arg3l # cto8 -#if 0 - mov sz_unc(%rax),%arg2l -#else - // sz_unc == 0 - mov (%rax),%arg2l -#endif - mov %rdx,%arg1 # dst + pop %rdi; pop %rcx # rdi= old dst; rcx= old &b_info + mov (%rcx),%esi # sz_unc + movzbl 2+ b_method(%rcx),%edx # cto8 + movzbl 1+ b_method(%rcx),%ecx # ftid + test %ecx,%ecx; je dy_done call f_unfilter # f_unfilter(1=rdi=dst, 2=rsi=dstlen, 3=rdx=cto8, 4=rcx=ftid) - jmp dy_uncpr + jmp dy_done -SYS_munmap= 0x02000000 + 73 dy_done: - pop %rax; pop %rcx # discard - mov $PAGE_SIZE,%arg2l // length for munmap - pop %arg1 // addr for munmap - pop %rbx; pop %rbp // saved registers +sz_Mach_header64 = 0x20 +// Make __TEXT executable + push %rbx; pop %arg1 # our &Mach_header + mov escape - decompress(%rbp),%rax # 8 bytes of instructions + add $8+ 2*4 + sz_Mach_header64,%rbx # &segname[8] after "__TEXT\0\0" + mov %rax,(%rbx) + mov -2*4 + _start - decompress(%rbp),%arg2l + push $PROT_READ|PROT_EXEC; pop %arg3 + mov $SYS_mprotect,%eax; syscall; jc bad_mmap + + pop %arg1 # P_03 tmppag + pop %arg2 # P_02 len(tmppag) mov $SYS_munmap,%eax - lea -4(%rdi),%rdx # steal some space at high end of __TEXT - movl $0x90c3050f,(%rdx) # syscall; ret; nop - jmp *%rdx + push %rbx; pop %rcx + pop %rbx; pop %rbp // saved registers + pop %r8 + jmp *%rcx #undef off #undef len diff --git a/src/stub/tmp/amd64-darwin.dylib-entry.bin.dump b/src/stub/tmp/amd64-darwin.dylib-entry.bin.dump index 44583c55..3d29415e 100644 --- a/src/stub/tmp/amd64-darwin.dylib-entry.bin.dump +++ b/src/stub/tmp/amd64-darwin.dylib-entry.bin.dump @@ -2,24 +2,24 @@ file format elf64-x86-64 Sections: Idx Name Size VMA LMA File off Algn Flags - 0 MACHMAINX 00000015 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, RELOC, READONLY - 1 NRV_HEAD 00000066 0000000000000000 0000000000000000 00000055 2**0 CONTENTS, READONLY - 2 NRV2E 000000b7 0000000000000000 0000000000000000 000000bb 2**0 CONTENTS, RELOC, READONLY - 3 NRV2D 0000009e 0000000000000000 0000000000000000 00000172 2**0 CONTENTS, RELOC, READONLY - 4 NRV2B 00000090 0000000000000000 0000000000000000 00000210 2**0 CONTENTS, RELOC, READONLY - 5 LZMA_ELF00 00000064 0000000000000000 0000000000000000 000002a0 2**0 CONTENTS, RELOC, READONLY - 6 LZMA_DEC10 000009f7 0000000000000000 0000000000000000 00000304 2**0 CONTENTS, READONLY - 7 LZMA_DEC20 000009f7 0000000000000000 0000000000000000 00000cfb 2**0 CONTENTS, READONLY - 8 LZMA_DEC30 00000014 0000000000000000 0000000000000000 000016f2 2**0 CONTENTS, READONLY - 9 NRV_TAIL 00000000 0000000000000000 0000000000000000 00001706 2**0 CONTENTS, READONLY - 10 MACHMAINY 00000011 0000000000000000 0000000000000000 00001706 2**0 CONTENTS, READONLY - 11 MACHMAINZ 0000012e 0000000000000000 0000000000000000 00001717 2**0 CONTENTS, RELOC, READONLY + 0 MACHMAINX 00000023 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, RELOC, READONLY + 1 NRV_HEAD 00000066 0000000000000000 0000000000000000 00000063 2**0 CONTENTS, READONLY + 2 NRV2E 000000b7 0000000000000000 0000000000000000 000000c9 2**0 CONTENTS, RELOC, READONLY + 3 NRV2D 0000009e 0000000000000000 0000000000000000 00000180 2**0 CONTENTS, RELOC, READONLY + 4 NRV2B 00000090 0000000000000000 0000000000000000 0000021e 2**0 CONTENTS, RELOC, READONLY + 5 LZMA_ELF00 00000064 0000000000000000 0000000000000000 000002ae 2**0 CONTENTS, RELOC, READONLY + 6 LZMA_DEC10 000009f7 0000000000000000 0000000000000000 00000312 2**0 CONTENTS, READONLY + 7 LZMA_DEC20 000009f7 0000000000000000 0000000000000000 00000d09 2**0 CONTENTS, READONLY + 8 LZMA_DEC30 00000014 0000000000000000 0000000000000000 00001700 2**0 CONTENTS, READONLY + 9 NRV_TAIL 00000000 0000000000000000 0000000000000000 00001714 2**0 CONTENTS, READONLY + 10 MACHMAINY 00000011 0000000000000000 0000000000000000 00001714 2**0 CONTENTS, READONLY + 11 MACHMAINZ 00000163 0000000000000000 0000000000000000 00001725 2**0 CONTENTS, RELOC, READONLY SYMBOL TABLE: -0000000000000000 l d MACHMAINX 0000000000000000 MACHMAINX 0000000000000000 l d NRV_HEAD 0000000000000000 NRV_HEAD 0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30 0000000000000000 l d MACHMAINY 0000000000000000 MACHMAINY 0000000000000000 l d MACHMAINZ 0000000000000000 MACHMAINZ +0000000000000000 l d MACHMAINX 0000000000000000 MACHMAINX 0000000000000000 l d NRV2E 0000000000000000 NRV2E 0000000000000000 l d NRV2D 0000000000000000 NRV2D 0000000000000000 l d NRV2B 0000000000000000 NRV2B @@ -32,7 +32,7 @@ SYMBOL TABLE: RELOCATION RECORDS FOR [MACHMAINX]: OFFSET TYPE VALUE -0000000000000009 R_X86_64_PC32 MACHMAINZ+0xffffffffffffffff +0000000000000010 R_X86_64_PC32 MACHMAINZ+0xfffffffffffffffc RELOCATION RECORDS FOR [NRV2E]: OFFSET TYPE VALUE @@ -55,7 +55,5 @@ OFFSET TYPE VALUE RELOCATION RECORDS FOR [MACHMAINZ]: OFFSET TYPE VALUE -000000000000000f R_X86_64_32 MACHMAINZ+0x000000000000012e -0000000000000014 R_X86_64_32 MACHMAINX+0x000000000000000d -0000000000000048 R_X86_64_32 MACHMAINZ+0x000000000000012e -000000000000004e R_X86_64_32 MACHMAINX+0x000000000000000d +0000000000000027 R_X86_64_32 _start+0xfffffffffffffffc +000000000000002c R_X86_64_32 MACHMAINZ+0x0000000000000163