├── toc.h ├── port.h ├── Makefile ├── .gitignore ├── iniparser.h ├── README.md ├── toc.c ├── main.c ├── iniparser.c └── logo.h /toc.h: -------------------------------------------------------------------------------- 1 | #ifndef __TOC_H 2 | #define __TOC_H 3 | 4 | extern void *create_toc(char *isoname, int *size); 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /port.h: -------------------------------------------------------------------------------- 1 | #ifndef __PORT_H 2 | #define __PORT_H 3 | 4 | #ifndef WIN32 5 | #ifndef MAX_PATH 6 | #define MAX_PATH 2048 /* i don't known the corrispondent of MAX_PATH in linux */ 7 | #endif 8 | #else 9 | #define snprintf _snprintf 10 | #endif 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | OUTPUT=popstationr 2 | OBJS=main.o toc.o iniparser.o 3 | CFLAGS=-Wall -Os -I. 4 | LDFLAGS=-L. 5 | LIBS = -lz -lm 6 | DESTDIR= 7 | PREFIX=/usr/local 8 | 9 | all: $(OUTPUT) 10 | 11 | clean: 12 | rm -f $(OUTPUT) *.o 13 | 14 | install: 15 | install -D -m0755 $(OUTPUT) $(DESTDIR)$(PREFIX)/bin/$(OUTPUT) 16 | 17 | $(OUTPUT): $(OBJS) 18 | $(LINK.c) $(LDFLAGS) -o $@ $^ $(LIBS) 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Object files 2 | *.o 3 | *.ko 4 | *.obj 5 | *.elf 6 | 7 | # Precompiled Headers 8 | *.gch 9 | *.pch 10 | 11 | # Libraries 12 | *.lib 13 | *.a 14 | *.la 15 | *.lo 16 | 17 | # Shared objects (inc. Windows DLLs) 18 | *.dll 19 | *.so 20 | *.so.* 21 | *.dylib 22 | 23 | # Executables 24 | *.exe 25 | *.out 26 | *.app 27 | *.i*86 28 | *.x86_64 29 | *.hex 30 | 31 | # Debug files 32 | *.dSYM/ 33 | -------------------------------------------------------------------------------- /iniparser.h: -------------------------------------------------------------------------------- 1 | /* 2 | Based upon libiniparser, by Nicolas Devillard 3 | Hacked into 1 file (m-iniparser) by Freek/2005 4 | Original terms following: 5 | 6 | -- - 7 | 8 | Copyright (c) 2000 by Nicolas Devillard (ndevilla AT free DOT fr). 9 | 10 | Written by Nicolas Devillard. Not derived from licensed software. 11 | 12 | Permission is granted to anyone to use this software for any 13 | purpose on any computer system, and to redistribute it freely, 14 | subject to the following restrictions: 15 | 16 | 1. The author is not responsible for the consequences of use of 17 | this software, no matter how awful, even if they arise 18 | from defects in it. 19 | 20 | 2. The origin of this software must not be misrepresented, either 21 | by explicit claim or by omission. 22 | 23 | 3. Altered versions must be plainly marked as such, and must not 24 | be misrepresented as being the original software. 25 | 26 | 4. This notice may not be removed or altered. 27 | 28 | */ 29 | 30 | 31 | #ifndef _INIPARSER_H_ 32 | #define _INIPARSER_H_ 33 | #include 34 | #include 35 | #include 36 | #include 37 | #include 38 | 39 | #ifdef __cplusplus 40 | extern "C" { 41 | #endif 42 | 43 | 44 | typedef struct _dictionary_ { 45 | /** Number of entries in dictionary */ 46 | int n; 47 | /** Storage size */ 48 | int size; 49 | /** List of string values */ 50 | char **val; 51 | /** List of string keys */ 52 | char **key ; 53 | /** List of hash values for keys */ 54 | unsigned *hash; 55 | } dictionary ; 56 | 57 | 58 | /* generated by genproto */ 59 | 60 | dictionary * iniparser_load(char *ininame); 61 | void iniparser_freedict(dictionary * d); 62 | 63 | int iniparser_getnsec(dictionary * d); 64 | char * iniparser_getsecname(dictionary * d, int n); 65 | void iniparser_dump(dictionary * d, FILE * f); 66 | void iniparser_dump_ini(dictionary * d, FILE * f); 67 | char * iniparser_getkey(dictionary *d, char *section, char *key); 68 | char * iniparser_getstr(dictionary * d, char * key); 69 | char * iniparser_getstring(dictionary * d, char * key, char * def); 70 | int iniparser_getint(dictionary * d, char * key, int notfound); 71 | double iniparser_getdouble(dictionary * d, char * key, double notfound); 72 | int iniparser_getboolean(dictionary * d, char * key, int notfound); 73 | int iniparser_find_entry(dictionary * ini, char * entry); 74 | int iniparser_setstr(dictionary * ini, char * entry, char * val); 75 | void iniparser_unset(dictionary * ini, char * entry); 76 | 77 | #ifdef __cplusplus 78 | } 79 | #endif 80 | 81 | #endif 82 | 83 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # popstationr 2 | popstationr is ISO to EBOOT.bin converter to convert PSX ISO images to use with modded PSPs or adrenaline for PS Vita 3 | 4 | ## About 5 | This version is a cleaned version from copstation without wall of text, a good readme (this one) 6 | and a work in progress help and usage parameter in the compiled popstationr 7 | 8 | ## Credits 9 | * [Dark\_Alex] - for the Basic Idea and Conversion Method 10 | * [Tinnus] - for the CDDA Fix - AKA TOC Converter 11 | * [Coldbird] - for the updated copstation version 12 | 13 | ## Features 14 | * standard stuff like the one from dark\_alex 15 | * CDDA Fix from Tinnus 16 | * Bootscreen Exchange (the warning screen). Place a greyscale LOGO.PNG in the same folder as the ISO (do not use a coloured PNG) 17 | * No more BASE.PBP madness (everything needed is on the source-side 18 | * improved image handling (no need to place a ICON0.png into the ISO folder. Without it it will create normal icon-less PSX EBOOT 19 | * ISO exctraction support 20 | * process display 21 | * auto GameID scanning. Use AUTO instead of the game code 22 | * Use features from newest DA popstation. There is a DATA.PSP included. If you want to use your own place the DATA.PSP into your ISO folder. 23 | * CDDA fix is now multiplattform 24 | * added iniparser-single 25 | * exported binary data / toc procedures to their own C files 26 | * fixed ISO size calculation (thx flatwhatson!) 27 | * Cleaned Up Progress Display 28 | 29 | ## Compiling 30 | ### Dependencies 31 | The only dependency for popstationr is **zlib**. Of course you need **gcc** and **make** 32 | 33 | ### Building 34 | Change into the directory and run make 35 | ```bash 36 | make 37 | ``` 38 | 39 | FIXME add make install target 40 | 41 | ## Usage 42 | ```bash 43 | popstation $human_readable_name $GameID $compressionlevel $image.iso 44 | ``` 45 | ### Example 46 | ```bash 47 | popstation 'Tony Hawks Skateboarding' SLUS00860 9 THPS1_SLUS_008.60.iso 48 | ``` 49 | Instead of the GameID you also can use *AUTO* to let popstationr detect the GameID. 50 | 51 | ## Nice to know 52 | If you want to convert \*.bin/\*.cue files to ISO use **iat** 53 | When you wan't to include Icons, Backgrounds, Sounds, etc... 54 | Make sure that they are all in CAPS! 55 | 56 | Use a greyscaled logo as *LOGO.PNG* (480x272, Greyscale, PNG) in the same folder as the ISO. If not used my custom bootup Screen is patched in 57 | 58 | A game icon as *ICON0.PNG* and pictures as *PIC0.PNG* and *PIC1.PNG* 59 | 60 | If you want to include Subchannel and Audio-Data into your EBOOT.bin (Important for Games like FF9, that otherwise will freeze somewhere in-game) 61 | dump your Gamedisc using CloneCD (CloneCD works fine both in Windows and under VMWare... therefore also on Unix Systems) 62 | and instead of the .iso / .bin File, you drag all three Files into the Folder where popstation resides... 63 | 64 | Then just point popstation at the .img file (one of the three generated files... .ccd, .img, .sub). It will automatically include Subchannel Data aswell as Audio-Tracks. 65 | 66 | For the ISO-Extraction Support... Simply call uppon the Tool with the following Parameter: 67 | ```bash 68 | popstation -iso outputfilename.iso 69 | ``` 70 | It will look for a EBOOT.PBP in the same Folder popstation resides in and output the ISO contained in it to 71 | outputfilename.iso. Both Compressed and Uncompressed EBOOTs are supported. 72 | 73 | To force popstationr to scan for the GameID - rather than using a ID you provide, just call popstation with the 74 | Parameter AUTO as your gamecode. 75 | -------------------------------------------------------------------------------- /toc.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #ifndef WIN32 7 | #include 8 | #else 9 | #include 10 | #endif 11 | #include 12 | 13 | #include "iniparser.h" 14 | 15 | #include "port.h" 16 | 17 | #ifndef WIN32 18 | typedef struct __attribute__((packed)) 19 | #else 20 | #pragma pack(1) 21 | typedef struct 22 | #endif 23 | { 24 | unsigned char adr: 4; 25 | unsigned char control: 4; 26 | unsigned char tno; 27 | unsigned char point; 28 | unsigned char amin; 29 | unsigned char asec; 30 | unsigned char aframe; 31 | unsigned char zero; 32 | unsigned char pmin; 33 | unsigned char psec; 34 | unsigned char pframe; 35 | } 36 | tocentry; 37 | #ifdef WIN32 38 | #pragma pack() 39 | #endif 40 | 41 | unsigned char bcd(unsigned char value) 42 | { 43 | unsigned int i; 44 | unsigned char result = 0; 45 | 46 | for (i = 0; value; i++) 47 | { 48 | result += (value % 10) * (int)pow(16, i); 49 | value = value / 10; 50 | } 51 | 52 | return result; 53 | } 54 | 55 | //Tinnus 56 | void *create_toc(char *isoname, int *size) 57 | { 58 | FILE *f; 59 | dictionary *ini; 60 | tocentry *entries; 61 | char *ccdname; 62 | char entryname[64]; 63 | int length, count, i; 64 | unsigned char point; 65 | 66 | length = strlen(isoname); 67 | ccdname = (char *)malloc((length + 1) * sizeof(char)); 68 | memset(ccdname, 0, (length + 1) * sizeof(char)); 69 | strncpy(ccdname, isoname, length); 70 | 71 | ccdname[length - 3] = 'c'; 72 | ccdname[length - 2] = 'c'; 73 | ccdname[length - 1] = 'd'; 74 | 75 | printf("Checking if %s exists...\n", ccdname); 76 | 77 | f = fopen(ccdname, "rb"); 78 | 79 | if (f == NULL) 80 | { 81 | free(ccdname); 82 | return NULL; 83 | } 84 | 85 | fclose(f); 86 | 87 | printf(" Using %s for toc\n", ccdname); 88 | 89 | ini = iniparser_load(ccdname); 90 | count = iniparser_getint(ini, "Disc:TocEntries", -1); 91 | 92 | if (count == -1) 93 | { 94 | printf("Failed to get TOC count from CCD, are you sure it's a valid CCD file?\n"); 95 | return NULL; 96 | } 97 | 98 | entries = (tocentry *)malloc(sizeof(tocentry) * count); 99 | 100 | for (i = 0; i < count; i++) 101 | { 102 | snprintf(entryname, 64, "Entry %d:Control", i); 103 | entries[i].control = iniparser_getint(ini, entryname, -1) & 0xF; 104 | 105 | snprintf(entryname, 64, "Entry %d:ADR", i); 106 | entries[i].adr = iniparser_getint(ini, entryname, -1) & 0xF; 107 | 108 | snprintf(entryname, 64, "Entry %d:TrackNo", i); 109 | entries[i].tno = iniparser_getint(ini, entryname, -1); 110 | 111 | snprintf(entryname, 64, "Entry %d:Point", i); 112 | 113 | point = (unsigned char)iniparser_getint(ini, entryname, -1); 114 | 115 | if (point > 0x99) 116 | { 117 | entries[i].point = point; 118 | } 119 | else 120 | { 121 | entries[i].point = bcd(point); 122 | } 123 | 124 | snprintf(entryname, 64, "Entry %d:AMin", i); 125 | entries[i].amin = bcd ((unsigned char)iniparser_getint(ini, entryname, -1)); 126 | 127 | snprintf(entryname, 64, "Entry %d:ASec", i); 128 | entries[i].asec = bcd ((unsigned char)iniparser_getint(ini, entryname, -1)); 129 | 130 | snprintf(entryname, 64, "Entry %d:AFrame", i); 131 | entries[i].aframe = bcd ((unsigned char)iniparser_getint(ini, entryname, -1)); 132 | 133 | snprintf(entryname, 64, "Entry %d:Zero", i); 134 | entries[i].zero = (unsigned char)iniparser_getint(ini, entryname, -1); 135 | 136 | snprintf(entryname, 64, "Entry %d:PMin", i); 137 | entries[i].pmin = bcd ((unsigned char)iniparser_getint(ini, entryname, -1)); 138 | 139 | snprintf(entryname, 64, "Entry %d:PSec", i); 140 | 141 | entries[i].psec = (unsigned char)iniparser_getint(ini, entryname, -1); 142 | 143 | if (point != 0xA0) 144 | { 145 | entries[i].psec = bcd(entries[i].psec); 146 | } 147 | 148 | snprintf(entryname, 64, "Entry %d:PFrame", i); 149 | entries[i].pframe = bcd ((unsigned char)iniparser_getint(ini, entryname, -1)); 150 | } 151 | 152 | (*size) = sizeof(tocentry) * count; 153 | 154 | free(ccdname); 155 | iniparser_freedict(ini); 156 | 157 | return entries; 158 | } 159 | -------------------------------------------------------------------------------- /main.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include /* for exit */ 4 | #include 5 | #include 6 | #include /* for isdigit */ 7 | #ifndef WIN32 8 | #include /* for getopt */ 9 | #else 10 | #include 11 | #endif 12 | #include 13 | 14 | #include "data.h" 15 | #include "logo.h" 16 | #include "toc.h" 17 | 18 | int getsize(FILE *f) 19 | { 20 | int size; 21 | 22 | fseek(f, 0, SEEK_END); 23 | size = ftell(f); 24 | 25 | fseek(f, 0, SEEK_SET); 26 | return size; 27 | } 28 | void usage(char *filename) 29 | { 30 | printf("Usage: %s [OPTION...] file.iso\n\n",filename); 31 | printf(" -iso [EBOOT.bin] converts a EBOOT.bin into iso\n"); 32 | printf(" --help displays this message\n"); 33 | } 34 | 35 | z_stream z; 36 | 37 | int deflateCompress(void *inbuf, int insize, void *outbuf, int outsize, int level) 38 | { 39 | int res; 40 | 41 | z.zalloc = Z_NULL; 42 | z.zfree = Z_NULL; 43 | z.opaque = Z_NULL; 44 | 45 | if (deflateInit2(&z, level , Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY) != Z_OK) 46 | return -1; 47 | 48 | z.next_out = (Bytef *)outbuf; 49 | z.avail_out = outsize; 50 | z.next_in = (Bytef *)inbuf; 51 | z.avail_in = insize; 52 | 53 | if (deflate(&z, Z_FINISH) != Z_STREAM_END) 54 | { 55 | return -1; 56 | } 57 | 58 | res = outsize - z.avail_out; 59 | 60 | if (deflateEnd(&z) != Z_OK) 61 | return -1; 62 | 63 | return res; 64 | } 65 | 66 | int inflateDecompress(void *inbuf, int insize, void *outbuf, int outsize) 67 | { 68 | z.zalloc = Z_NULL; 69 | z.zfree = Z_NULL; 70 | z.opaque = Z_NULL; 71 | 72 | if (inflateInit2(&z, -15) != Z_OK) 73 | return -1; 74 | 75 | z.next_in = (Bytef *)inbuf; 76 | z.avail_in = insize; 77 | z.next_out = (Bytef *)outbuf; 78 | z.avail_out = outsize; 79 | 80 | if (inflate(&z, Z_FINISH) != Z_STREAM_END) 81 | return -1; 82 | 83 | if (inflateEnd(&z) != Z_OK) 84 | return -1; 85 | 86 | return 0; 87 | } 88 | 89 | #ifndef WIN32 90 | typedef struct __attribute__((packed)) 91 | #else 92 | #pragma pack(1) 93 | typedef struct 94 | #endif 95 | { 96 | unsigned int signature; 97 | unsigned int version; 98 | unsigned int fields_table_offs; 99 | unsigned int values_table_offs; 100 | int nitems; 101 | } SFOHeader; 102 | #ifdef WIN32 103 | #pragma pack() 104 | #endif 105 | 106 | #ifndef WIN32 107 | typedef struct __attribute__((packed)) 108 | #else 109 | #pragma pack(1) 110 | typedef struct 111 | #endif 112 | { 113 | unsigned short field_offs; 114 | unsigned char unk; 115 | unsigned char type; // 0x2 -> string, 0x4 -> number 116 | unsigned int length; 117 | unsigned int size; 118 | unsigned short val_offs; 119 | unsigned short unk4; 120 | } SFODir; 121 | #ifdef WIN32 122 | #pragma pack() 123 | #endif 124 | 125 | void SetSFOTitle(char *sfo, char *title) 126 | { 127 | SFOHeader *header = (SFOHeader *)sfo; 128 | SFODir *entries = (SFODir *)(sfo+0x14); 129 | int i; 130 | 131 | for (i = 0; i < header->nitems; i++) 132 | { 133 | if (strcmp(sfo+header->fields_table_offs+entries[i].field_offs, "TITLE") == 0) 134 | { 135 | strncpy(sfo+header->values_table_offs+entries[i].val_offs, title, entries[i].size); 136 | 137 | if (strlen(title)+1 > entries[i].size) 138 | { 139 | entries[i].length = entries[i].size; 140 | } 141 | else 142 | { 143 | entries[i].length = strlen(title)+1; 144 | } 145 | } 146 | } 147 | } 148 | 149 | char buffer[1*1048576]; 150 | char buffer2[0x9300]; 151 | 152 | //I'm Rick James - Bitch! ArHArHArH! :D 153 | int logo = 0, pic0 = 0, pic1 = 0, icon0 = 0, icon1 = 0, snd = 0, toc = 0, prx = 0; 154 | int sfo_size, logo_size, pic0_size, pic1_size, icon0_size, icon1_size, snd_size, toc_size, prx_size; 155 | int start_dat = 0; 156 | unsigned int* base_header = (unsigned int*)(&base_header_c); 157 | unsigned int header[0x28/4]; 158 | unsigned int dummy[6]; 159 | 160 | #ifndef WIN32 161 | typedef struct __attribute__((packed)) 162 | #else 163 | #pragma pack(1) 164 | typedef struct 165 | #endif 166 | { 167 | unsigned int offset; 168 | unsigned int length; 169 | unsigned int dummy[6]; 170 | } IsoIndex; 171 | #ifdef WIN32 172 | #pragma pack() 173 | #endif 174 | 175 | 176 | void convert(char *input, char *output, char *title, char *code, int complevel) 177 | { 178 | FILE *in, *out, *t; 179 | int i, offset, isosize, isorealsize, x; 180 | int index_offset, p1_offset, p2_offset, end_offset; 181 | IsoIndex *indexes = NULL; 182 | 183 | void* tocptr = NULL; 184 | 185 | in = fopen (input, "rb"); 186 | if (!in) 187 | { 188 | printf("Unable to Open Input PSX ISO File [%s]\n", input); 189 | exit(-1); 190 | } 191 | 192 | isosize = getsize(in); 193 | isorealsize = isosize; 194 | 195 | if ((isosize % 0x9300) != 0) 196 | { 197 | isosize = isosize + (0x9300 - (isosize%0x9300)); 198 | } 199 | 200 | //printf("isosize, isorealsize %08X %08X\n", isosize, isorealsize); 201 | 202 | out = fopen(output, "wb"); 203 | if (!out) 204 | { 205 | printf("Unable to Create Output PSX EBOOT File [%s]\n", output); 206 | exit(-1); 207 | } 208 | 209 | printf("Writing Header...\n"); 210 | 211 | sfo_size = base_header[3] - base_header[2]; 212 | 213 | t = fopen("LOGO.PNG", "rb"); 214 | if (t) 215 | { 216 | logo_size = getsize(t); 217 | logo = 1; 218 | fclose(t); 219 | } 220 | 221 | t = fopen("ICON0.PNG", "rb"); 222 | if (t) 223 | { 224 | icon0_size = getsize(t); 225 | icon0 = 1; 226 | fclose(t); 227 | } 228 | else 229 | { 230 | icon0_size = 0; 231 | } 232 | 233 | t = fopen("ICON1.PMF", "rb"); 234 | if (t) 235 | { 236 | icon1_size = getsize(t); 237 | icon1 = 1; 238 | fclose(t); 239 | } 240 | else 241 | { 242 | icon1_size = 0; 243 | } 244 | 245 | t = fopen("PIC0.PNG", "rb"); 246 | if (t) 247 | { 248 | pic0_size = getsize(t); 249 | pic0 = 1; 250 | fclose(t); 251 | } 252 | else 253 | { 254 | pic0_size = 0; //base_header[6] - base_header[5]; 255 | } 256 | 257 | t = fopen("PIC1.PNG", "rb"); 258 | if (t) 259 | { 260 | pic1_size = getsize(t); 261 | pic1 = 1; 262 | fclose(t); 263 | } 264 | else 265 | { 266 | pic1_size = 0; // base_header[7] - base_header[6]; 267 | } 268 | 269 | t = fopen("SND0.AT3", "rb"); 270 | if (t) 271 | { 272 | snd_size = getsize(t); 273 | snd = 1; 274 | fclose(t); 275 | } 276 | else 277 | { 278 | snd = 0; 279 | } 280 | 281 | t = fopen("DATA.PSP", "rb"); 282 | if (t) 283 | { 284 | prx_size = getsize(t); 285 | prx = 1; 286 | fclose(t); 287 | } 288 | else 289 | { 290 | prx_size = sizeof(datapspbody); 291 | } 292 | 293 | t = fopen("ISO.TOC", "rb"); 294 | if (t) 295 | { 296 | toc_size = getsize(t); 297 | toc = 1; 298 | fclose(t); 299 | } 300 | else if ((tocptr = create_toc(input, &toc_size)) != NULL) 301 | { 302 | toc = 2; 303 | } 304 | else 305 | { 306 | toc = 0; 307 | } 308 | 309 | int curoffs = 0x28; 310 | 311 | header[0] = 0x50425000; 312 | header[1] = 0x10000; 313 | 314 | header[2] = curoffs; 315 | 316 | curoffs += sfo_size; 317 | header[3] = curoffs; 318 | 319 | curoffs += icon0_size; 320 | header[4] = curoffs; 321 | 322 | curoffs += icon1_size; 323 | header[5] = curoffs; 324 | 325 | curoffs += pic0_size; 326 | header[6] = curoffs; 327 | 328 | curoffs += pic1_size; 329 | header[7] = curoffs; 330 | 331 | curoffs += snd_size; 332 | header[8] = curoffs; 333 | 334 | x = header[8] + prx_size; 335 | 336 | if ((x % 0x10000) != 0) 337 | { 338 | x = x + (0x10000 - (x % 0x10000)); 339 | } 340 | 341 | header[9] = x; 342 | 343 | fwrite(header, 1, 0x28, out); 344 | 345 | printf("Applying EBOOT Name Patch on PARAM.SFO [%s]...\n",title); 346 | 347 | SetSFOTitle(parambody, title); 348 | strcpy(parambody+0x108, code); 349 | 350 | printf("Writing PARAM.SFO...\n"); 351 | 352 | fwrite(parambody, 1, sfo_size, out); 353 | 354 | if (icon0) 355 | { 356 | printf("Writing ICON0.PNG [%d]...\n",icon0_size); 357 | 358 | t = fopen("ICON0.PNG", "rb"); 359 | fread(buffer, 1, icon0_size, t); 360 | fwrite(buffer, 1, icon0_size, out); 361 | fclose(t); 362 | } 363 | 364 | if (icon1) 365 | { 366 | printf("Writing ICON1.PMF [%d]...\n",icon1_size); 367 | 368 | t = fopen("ICON1.PMF", "rb"); 369 | fread(buffer, 1, icon1_size, t); 370 | fwrite(buffer, 1, icon1_size, out); 371 | fclose(t); 372 | } 373 | 374 | if (pic0) 375 | { 376 | printf("Writing PIC0.PNG [%d]...\n",pic0_size); 377 | 378 | t = fopen("PIC0.PNG", "rb"); 379 | fread(buffer, 1, pic0_size, t); 380 | fwrite(buffer, 1, pic0_size, out); 381 | fclose(t); 382 | } 383 | 384 | if (pic1) 385 | { 386 | printf("Writing PIC1.PNG [%d]...\n",pic1_size); 387 | 388 | t = fopen("PIC1.PNG", "rb"); 389 | fread(buffer, 1, pic1_size, t); 390 | fwrite(buffer, 1, pic1_size, out); 391 | fclose(t); 392 | } 393 | 394 | if (snd) 395 | { 396 | printf("Writing SND0.AT3 [%d]...\n",snd_size); 397 | 398 | t = fopen("SND0.AT3", "rb"); 399 | fread(buffer, 1, snd_size, t); 400 | fwrite(buffer, 1, snd_size, out); 401 | fclose(t); 402 | } 403 | 404 | printf("Writing Main-Executeable DATA.PSP...\n"); 405 | 406 | if (prx) 407 | { 408 | printf(" Found External DATA.PSP - Including External DATA.PSP\n"); 409 | t = fopen("DATA.PSP", "rb"); 410 | fread(buffer, 1, prx_size, t); 411 | fwrite(buffer, 1, prx_size, out); 412 | fclose(t); 413 | } 414 | else 415 | { 416 | printf(" No External DATA.PSP Found - Including Internal DarkAlex DATA.PSP\n"); 417 | fwrite(datapspbody, 1, prx_size, out); 418 | } 419 | 420 | offset = ftell(out); 421 | 422 | for (i = 0; i < header[9]-offset; i++) 423 | { 424 | fputc(0, out); 425 | } 426 | 427 | printf("Writing PSX ISO Header...\n"); 428 | 429 | fwrite("PSISOIMG0000", 1, 12, out); 430 | 431 | p1_offset = ftell(out); 432 | 433 | x = isosize + 0x100000; 434 | fwrite(&x, 1, 4, out); 435 | 436 | x = 0; 437 | for (i = 0; i < 0xFC; i++) 438 | { 439 | fwrite(&x, 1, 4, out); 440 | } 441 | 442 | memcpy(data1+1, code, 4); 443 | memcpy(data1+6, code+4, 5); 444 | 445 | //if (toc) 446 | if (toc == 1) 447 | { 448 | printf("Copying TOC to ISO Header...\n"); 449 | 450 | t = fopen("ISO.TOC", "rb"); 451 | fread(buffer, 1, toc_size, t); 452 | memcpy(data1+1024, buffer, toc_size); 453 | fclose(t); 454 | } 455 | else if (toc == 2) 456 | { 457 | if (tocptr) { 458 | memcpy(data1+1024, tocptr, toc_size); 459 | free(tocptr); 460 | } else { 461 | printf("Parsing error\n"); 462 | exit(-1); 463 | } 464 | } 465 | 466 | fwrite(data1, 1, sizeof(data1), out); 467 | 468 | p2_offset = ftell(out); 469 | x = isosize + 0x100000 + 0x2d31; 470 | fwrite(&x, 1, 4, out); 471 | 472 | strcpy((char *)data2+8, title); 473 | fwrite(data2, 1, sizeof(data2), out); 474 | 475 | index_offset = ftell(out); 476 | 477 | printf("Writing Indexes...\n"); 478 | 479 | memset(dummy, 0, sizeof(dummy)); 480 | 481 | offset = 0; 482 | 483 | if (complevel == 0) 484 | { 485 | x = 0x9300; 486 | } 487 | else 488 | { 489 | x = 0; 490 | } 491 | 492 | for (i = 0; i < isosize / 0x9300; i++) 493 | { 494 | fwrite(&offset, 1, 4, out); 495 | fwrite(&x, 1, 4, out); 496 | fwrite(dummy, 1, sizeof(dummy), out); 497 | 498 | if (complevel == 0) 499 | offset += 0x9300; 500 | } 501 | 502 | offset = ftell(out); 503 | 504 | for (i = 0; i < (header[9]+0x100000)-offset; i++) 505 | { 506 | fputc(0, out); 507 | } 508 | 509 | printf("Writing PSX CD Dump...\n"); 510 | printf(" Processing... [%04dMB|0000MB]",(isorealsize/(1024*1024))); 511 | 512 | int written=0; 513 | 514 | if (complevel == 0) 515 | { 516 | while ((x = fread(buffer, 1, 1048576, in)) > 0) 517 | { 518 | fwrite(buffer, 1, x, out); 519 | written+=x; 520 | printf("\010\010\010\010\010\010\010"); 521 | printf("%04dMB]",((isorealsize-written)/(1024*1024))); 522 | } 523 | 524 | for (i = 0; i < (isosize-isorealsize); i++) 525 | { 526 | fputc(0, out); 527 | } 528 | 529 | printf("\n"); 530 | } 531 | else 532 | { 533 | indexes = (IsoIndex *)malloc(sizeof(IsoIndex) * (isosize/0x9300)); 534 | 535 | if (!indexes) 536 | { 537 | fclose(in); 538 | fclose(out); 539 | 540 | printf("Failed in allocating Memory for Indexes!\n"); 541 | exit(-1); 542 | } 543 | 544 | i = 0; 545 | int read=0; 546 | offset = 0; 547 | 548 | while ((x = fread(buffer2, 1, 0x9300, in)) > 0) 549 | { 550 | if (x < 0x9300) 551 | { 552 | memset(buffer2+x, 0, 0x9300-x); 553 | } 554 | 555 | read=x; 556 | 557 | x = deflateCompress(buffer2, 0x9300, buffer, sizeof(buffer), complevel); 558 | 559 | if (x < 0) 560 | { 561 | fclose(in); 562 | fclose(out); 563 | free(indexes); 564 | 565 | printf("Error in Compression!\n"); 566 | exit(-1); 567 | } 568 | 569 | memset(&indexes[i], 0, sizeof(IsoIndex)); 570 | 571 | indexes[i].offset = offset; 572 | 573 | if (x >= 0x9300) /* Block didn't compress */ 574 | { 575 | indexes[i].length = 0x9300; 576 | fwrite(buffer2, 1, 0x9300, out); 577 | offset += 0x9300; 578 | } 579 | else 580 | { 581 | indexes[i].length = x; 582 | fwrite(buffer, 1, x, out); 583 | offset += x; 584 | } 585 | 586 | written+=read; 587 | printf("\010\010\010\010\010\010\010"); 588 | printf("%04dMB]",((isosize-written)/(1024*1024))); 589 | i++; 590 | } 591 | 592 | printf("\010\010\010\010\010\010\010"); 593 | printf(" DONE ]\n"); 594 | 595 | if (i != (isosize/0x9300)) 596 | { 597 | fclose(in); 598 | fclose(out); 599 | free(indexes); 600 | 601 | printf("Some Error happened...\n"); 602 | } 603 | 604 | x = ftell(out); 605 | 606 | if ((x % 0x10) != 0) 607 | { 608 | end_offset = x + (0x10 - (x % 0x10)); 609 | 610 | for (i = 0; i < (end_offset-x); i++) 611 | { 612 | fputc('0', out); 613 | } 614 | } 615 | else 616 | { 617 | end_offset = x; 618 | } 619 | 620 | end_offset -= header[9]; 621 | } 622 | 623 | printf("Writing STARTDAT Header...\n"); 624 | fwrite(startdatheader, 1, sizeof(startdatheader), out); 625 | 626 | if (logo) 627 | { 628 | printf("Writing LOGO.PNG [%d]...\n",logo_size); 629 | 630 | t = fopen("LOGO.PNG", "rb"); 631 | fread(buffer, 1, logo_size, t); 632 | fwrite(buffer, 1, logo_size, out); 633 | fclose(t); 634 | } 635 | else 636 | { 637 | printf("Writing P.O.P.S. Standard Logo...\n"); 638 | 639 | fwrite(logo_buffer, 1, sizeof(logo_buffer), out); 640 | } 641 | 642 | printf("Writing STARTDAT Footer...\n"); 643 | 644 | fwrite(startdatfooter, 1, sizeof(startdatfooter), out); 645 | 646 | if (complevel != 0) 647 | { 648 | printf("Updating Compressed Indexes...\n"); 649 | 650 | fseek(out, p1_offset, SEEK_SET); 651 | fwrite(&end_offset, 1, 4, out); 652 | 653 | end_offset += 0x2d31; 654 | fseek(out, p2_offset, SEEK_SET); 655 | fwrite(&end_offset, 1, 4, out); 656 | 657 | fseek(out, index_offset, SEEK_SET); 658 | if (!indexes) { 659 | printf("Parsing error\n"); 660 | exit(-1); 661 | } 662 | fwrite(indexes, 1, sizeof(IsoIndex) * (isosize/0x9300), out); 663 | } 664 | 665 | fclose(in); 666 | fclose(out); 667 | } 668 | 669 | //COLDBIRDIE @ WORK 670 | int FindPSISOFlag(char * eboot) 671 | { 672 | FILE * fp = fopen(eboot,"rb"); 673 | 674 | if(!fp) 675 | { 676 | printf("Failed to Open [%s] for a Flag-Scan.\n",eboot); 677 | exit(-1); 678 | } 679 | int offset=-1; 680 | char buffer[12]; 681 | 682 | while(strncmp(buffer,"PSISOIMG0000", 12)) 683 | { 684 | if((fread(buffer, 1, 12, fp))<12) return 0; 685 | fseek(fp,-11L,SEEK_CUR); 686 | offset++; 687 | } 688 | 689 | fclose(fp); 690 | 691 | return offset; 692 | } 693 | 694 | int GetISOSize(char * eboot, int offset) 695 | { 696 | int indexoffset=(offset+0x4000); 697 | int isooffset=(offset+0x100000); 698 | 699 | FILE * fp = fopen(eboot,"rb"); 700 | 701 | if(!fp) 702 | { 703 | printf("Failed to Open [%s] for a ISO-Size Calculation.\n",eboot); 704 | exit(-1); 705 | } 706 | int size=0; 707 | int pointervalue[8]; 708 | 709 | fseek(fp, indexoffset+32, SEEK_SET); 710 | fread(&pointervalue, 1, (8*4), fp); 711 | fseek(fp, isooffset+pointervalue[0], SEEK_SET); 712 | 713 | if(pointervalue[1]==0x9300) 714 | { 715 | //Uncompressed 716 | fread(buffer, 1, pointervalue[1], fp); 717 | size=(buffer[104] + (buffer[105] << 8) + (buffer[106] << 16) + (buffer[107] << 24)) * 0x0930; 718 | } 719 | else 720 | { 721 | //Compressed 722 | fread(buffer, 1, pointervalue[1], fp); 723 | inflateDecompress(buffer, pointervalue[1], buffer2, 0x9300); 724 | size=(buffer2[104] + (buffer2[105] << 8) + (buffer2[106] << 16) + (buffer2[107] << 24)) * 0x0930; 725 | } 726 | 727 | fclose(fp); 728 | 729 | return size; 730 | } 731 | 732 | /* 733 | * And Again Coldbird did it... :) 734 | * This Nice Function Extracts a EBOOT, not minding if compressed or not to a PSX ISO... 735 | * The Filesize of the Extracted ISO in 90% of the Cases aint 100% identical to the real ISO... 736 | * This is due to the Fact that the Original Filesize gets lost on the ISO -> EBOOT Conversion~ 737 | * So we have to guess the Filesize by taking a Multiple of 0x9300 (The Blocksize for POPS ISO-Data) 738 | */ 739 | int ExtractISO(char * eboot, char * output) 740 | { 741 | int offset; 742 | offset=FindPSISOFlag(eboot); 743 | 744 | if(!offset) 745 | { 746 | printf("Failed to Locate PSISO Flag - Make sure your [%s] is a PSX-EBOOT!\n",eboot); 747 | exit(-1); 748 | } 749 | int indexoffset=(offset+0x4000); 750 | int isooffset=(offset+0x100000); 751 | 752 | int i=0; 753 | int pointervalue[8]; 754 | 755 | int compressed=0; 756 | int write=0; 757 | int isosize=GetISOSize("EBOOT.PBP",offset); 758 | 759 | FILE * fp = fopen(eboot,"rb"); 760 | FILE * out = fopen(output,"wb"); 761 | if((!fp)||(!out)) return 0; 762 | 763 | printf(" Processing... [%04dMB|0000MB]",(isosize/(1024*1024))); 764 | 765 | do 766 | { 767 | fseek(fp, (indexoffset+(i*32)), SEEK_SET); 768 | fread(&pointervalue, 1, (8*4), fp); 769 | 770 | if((i==0)&&(pointervalue[1]<0x9300)) compressed=1; 771 | 772 | fseek(fp, (isooffset+pointervalue[0]), SEEK_SET); 773 | fread(buffer, 1, pointervalue[1], fp); 774 | 775 | if((isosize-pointervalue[1])<0) 776 | { 777 | write=isosize; 778 | } 779 | else 780 | { 781 | write=0x9300; 782 | } 783 | 784 | if(compressed) 785 | { 786 | inflateDecompress(buffer, pointervalue[1], buffer2, 0x9300); 787 | fwrite(buffer2, 1, write, out); 788 | isosize-=write; 789 | printf("\010\010\010\010\010\010\010"); 790 | printf("%04dMB]",(isosize/(1024*1024))); 791 | } 792 | else 793 | { 794 | fwrite(buffer, 1, write, out); 795 | isosize-=write; 796 | printf("\010\010\010\010\010\010\010"); 797 | //if(isosize<0) isosize=0; 798 | printf("%04dMB]",(isosize/(1024*1024))); 799 | } 800 | 801 | i++; 802 | } while(pointervalue[1]); 803 | 804 | printf("\010\010\010\010\010\010\010"); 805 | printf(" DONE ]\n"); 806 | 807 | if(compressed) 808 | { 809 | return 1; 810 | } 811 | else 812 | { 813 | return 0; 814 | } 815 | } 816 | 817 | #define N_GAME_CODES 14 818 | 819 | char *gamecodes[N_GAME_CODES] = 820 | { 821 | "SCUS", 822 | "SLUS", 823 | "SLES", 824 | "SCES", 825 | "SCED", 826 | "SLPS", 827 | "SLPM", 828 | "SCPS", 829 | "SLED", 830 | "SLPS", 831 | "SIPS", 832 | "ESPM", 833 | "PBPX", 834 | "LSP" // This must remain last 835 | }; 836 | 837 | char * MatchingGameCode(char * buffer) 838 | { 839 | // Consider LSP first, as a special case. 840 | int i = N_GAME_CODES-1; 841 | if (strncmp(buffer, gamecodes[i], 3) == 0) 842 | return gamecodes[i]; 843 | 844 | // Proceed one character further into the buffer and consider all the 845 | // 4-byte game codes. 846 | buffer++; 847 | for (i = 0; i < N_GAME_CODES - 1; i++) 848 | if (strncmp(buffer, gamecodes[i], 4) == 0) 849 | return gamecodes[i]; 850 | 851 | return NULL; 852 | } 853 | 854 | char * GetGID(char * filename, char * output) 855 | { 856 | FILE * file = fopen(filename, "r"); 857 | if (!file) 858 | { 859 | printf("Couldn't Open PSX Game [%s] for GameID Scan!\n",filename); 860 | exit(-1); 861 | } 862 | 863 | // Establish a ring buffer 864 | const int RING_BUFFER_SIZE = 14; 865 | char rbuf[RING_BUFFER_SIZE]; 866 | int bo = 0; // Buffer offset 867 | #define RBI(i) rbuf[(bo+i)%RING_BUFFER_SIZE] 868 | // Prime the buffer 869 | if ((fread(rbuf, 1, RING_BUFFER_SIZE, file)) != RING_BUFFER_SIZE) { 870 | fclose(file); 871 | return NULL; 872 | } 873 | while (1) { 874 | // Look for end of potential gameid pattern 875 | if (RBI(12)==';' && RBI(13)=='1') 876 | { 877 | // If found, copy buffer into a regular array for comparisons 878 | char buf[RING_BUFFER_SIZE]; 879 | for (int c = 0; c < RING_BUFFER_SIZE; c++) 880 | buf[c] = RBI(c); 881 | // Then look for game codes 882 | char * matching_code; 883 | if ((matching_code = MatchingGameCode(buf))) { 884 | // If found, copy matching game code to output 885 | int code_len = strlen(matching_code); 886 | strncpy(output, matching_code, code_len); 887 | // Next, extract numeric portion. Skip non-digits; stop if 888 | // gameid reaches 9 characters in length. 889 | int i, j; 890 | for (i = code_len, j = code_len; i < 9 && j != ';'; j++) 891 | if (isdigit(buf[j])) 892 | output[i++] = buf[j]; 893 | // If we found enough digits, return the complete gameid. 894 | if (i == 9) { 895 | output[i] = '\0'; 896 | fclose(file); 897 | return output; 898 | } 899 | } 900 | } 901 | // Read another character and write it into the ring buffer. 902 | int c = fgetc(file); 903 | if (c == EOF) 904 | break; 905 | rbuf[bo++] = c; 906 | bo %= RING_BUFFER_SIZE; 907 | } 908 | 909 | fclose(file); 910 | return NULL; 911 | } 912 | 913 | int main(int argc, char *argv[]) 914 | { 915 | int i; 916 | if ((argc==2)&&(strcmp(argv[1],"--help") == 0)) 917 | { 918 | usage(argv[0]); 919 | exit(0); 920 | } 921 | if ((argc != 5)&&(argc != 3)) 922 | { 923 | help: 924 | fprintf(stderr,"Invalid Number of Arguments.\n"); 925 | usage(argv[0]); 926 | exit(-1); 927 | } 928 | if(argc==3) 929 | { 930 | if(strcmp(argv[1],"-iso")) goto help; 931 | 932 | printf("Attempting to Extract PSX ISO [%s] out of EBOOT.PBP... Please Wait!\n",argv[2]); 933 | 934 | int exresult = ExtractISO("EBOOT.PBP",argv[2]); 935 | 936 | if(exresult) 937 | { 938 | printf("Extracted ISO from [EBOOT.PBP] to [%s]\n",argv[2]); 939 | printf("The ISO File was compressed using zlib\n"); 940 | } 941 | else 942 | { 943 | printf("Extracted ISO from [EBOOT.PBP] to [%s]\n",argv[2]); 944 | printf("The ISO File was uncompressed\n"); 945 | } 946 | } 947 | 948 | char gameid[10]; 949 | 950 | if(argc==5) 951 | { 952 | if(strcmp(argv[2],"AUTO")) 953 | { 954 | strcpy(gameid,argv[2]); 955 | 956 | if (strlen(argv[2]) != 9) 957 | { 958 | printf("Invalid game code.\n"); 959 | exit(-1); 960 | } 961 | 962 | for (i = 0; i < N_GAME_CODES; i++) 963 | { 964 | if (strncmp(argv[2], gamecodes[i], strlen(gamecodes[i])) == 0) 965 | break; 966 | } 967 | 968 | if (i == N_GAME_CODES) 969 | { 970 | printf("Invalid game code.\n"); 971 | exit(-1); 972 | } 973 | 974 | for (i = 4; i < 9; i++) 975 | { 976 | if (argv[2][i] < '0' || argv[2][i] > '9') 977 | { 978 | printf("Invalid game code.\n"); 979 | exit(-1); 980 | } 981 | } 982 | } 983 | else 984 | { 985 | if(!GetGID(argv[4],gameid)) 986 | { 987 | printf("Unable to find GameID inside the ISO\nThis could be the case if your are using PSX Game Beta versions or homebrew PSX games.\nPlease specify a ID yourself.\n"); 988 | exit(-1); 989 | } 990 | else printf("Automatically Extracted GameID [%s]\n",gameid); 991 | } 992 | 993 | if (strlen(argv[3]) != 1) 994 | { 995 | printf("Invalid compression level.\n"); 996 | exit(-1); 997 | } 998 | 999 | if (argv[3][0] < '0' || argv[3][0] > '9') 1000 | { 1001 | printf("Invalid compression level.\n"); 1002 | exit(-1); 1003 | } 1004 | 1005 | convert(argv[4], "EBOOT.PBP", argv[1], gameid, argv[3][0]-'0'); 1006 | } 1007 | 1008 | printf("Done.\n"); 1009 | return 0; 1010 | } 1011 | 1012 | -------------------------------------------------------------------------------- /iniparser.c: -------------------------------------------------------------------------------- 1 | /* 2 | Based upon libiniparser, by Nicolas Devillard 3 | Hacked into 1 file (m-iniparser) by Freek/2005 4 | Original terms following: 5 | 6 | -- - 7 | 8 | Copyright (c) 2000 by Nicolas Devillard (ndevilla AT free DOT fr). 9 | 10 | Written by Nicolas Devillard. Not derived from licensed software. 11 | 12 | Permission is granted to anyone to use this software for any 13 | purpose on any computer system, and to redistribute it freely, 14 | subject to the following restrictions: 15 | 16 | 1. The author is not responsible for the consequences of use of 17 | this software, no matter how awful, even if they arise 18 | from defects in it. 19 | 20 | 2. The origin of this software must not be misrepresented, either 21 | by explicit claim or by omission. 22 | 23 | 3. Altered versions must be plainly marked as such, and must not 24 | be misrepresented as being the original software. 25 | 26 | 4. This notice may not be removed or altered. 27 | 28 | */ 29 | 30 | 31 | #include 32 | #include 33 | #include 34 | #include 35 | 36 | #include "iniparser.h" 37 | 38 | #ifdef __cplusplus 39 | extern "C" { 40 | #endif 41 | 42 | /* strlib.c following */ 43 | 44 | #define ASCIILINESZ 1024 45 | /*-------------------------------------------------------------------------*/ 46 | /** 47 | @brief Convert a string to lowercase. 48 | @param s String to convert. 49 | @return ptr to statically allocated string. 50 | 51 | This function returns a pointer to a statically allocated string 52 | containing a lowercased version of the input string. Do not free 53 | or modify the returned string! Since the returned string is statically 54 | allocated, it will be modified at each function call (not re-entrant). 55 | */ 56 | /*--------------------------------------------------------------------------*/ 57 | 58 | static char * strlwc(char * s) 59 | { 60 | static char l[ASCIILINESZ+1]; 61 | int i ; 62 | 63 | if (s==NULL) return NULL ; 64 | memset(l, 0, ASCIILINESZ+1); 65 | i=0 ; 66 | while (s[i] && i l) { 122 | if (!isspace((int)*(last-1))) 123 | break ; 124 | last -- ; 125 | } 126 | *last = (char)0; 127 | return l ; 128 | } 129 | 130 | 131 | 132 | /* dictionary.c.c following */ 133 | /** Maximum value size for integers and doubles. */ 134 | #define MAXVALSZ 1024 135 | 136 | /** Minimal allocated number of entries in a dictionary */ 137 | #define DICTMINSZ 128 138 | 139 | /** Invalid key token */ 140 | #define DICT_INVALID_KEY ((char*)-1) 141 | 142 | /* 143 | Doubles the allocated size associated to a pointer 144 | 'size' is the current allocated size. 145 | */ 146 | static void * mem_double(void * ptr, int size) 147 | { 148 | void *newptr; 149 | 150 | newptr = calloc(2*size, 1); 151 | memcpy(newptr, ptr, size); 152 | free(ptr); 153 | return newptr ; 154 | } 155 | 156 | 157 | /*--------------------------------------------------------------------------- 158 | Function codes 159 | ---------------------------------------------------------------------------*/ 160 | 161 | /*-------------------------------------------------------------------------*/ 162 | /** 163 | @brief Compute the hash key for a string. 164 | @param key Character string to use for key. 165 | @return 1 unsigned int on at least 32 bits. 166 | 167 | This hash function has been taken from an Article in Dr Dobbs Journal. 168 | This is normally a collision-free function, distributing keys evenly. 169 | The key is stored anyway in the struct so that collision can be avoided 170 | by comparing the key itself in last resort. 171 | */ 172 | /*--------------------------------------------------------------------------*/ 173 | 174 | static unsigned dictionary_hash(char * key) 175 | { 176 | int len ; 177 | unsigned hash ; 178 | int i ; 179 | 180 | len = strlen(key); 181 | for (hash=0, i=0 ; i>6) ; 185 | } 186 | hash += (hash <<3); 187 | hash ^= (hash >>11); 188 | hash += (hash <<15); 189 | return hash ; 190 | } 191 | 192 | 193 | /*-------------------------------------------------------------------------*/ 194 | /** 195 | @brief Create a new dictionary object. 196 | @param size Optional initial size of the dictionary. 197 | @return 1 newly allocated dictionary objet. 198 | 199 | This function allocates a new dictionary object of given size and returns 200 | it. If you do not know in advance (roughly) the number of entries in the 201 | dictionary, give size=0. 202 | */ 203 | /*--------------------------------------------------------------------------*/ 204 | 205 | static dictionary * dictionary_new(int size) 206 | { 207 | dictionary *d ; 208 | 209 | /* If no size was specified, allocate space for DICTMINSZ */ 210 | if (sizesize = size ; 214 | d->val = (char **)calloc(size, sizeof(char*)); 215 | d->key = (char **)calloc(size, sizeof(char*)); 216 | d->hash = (unsigned int *)calloc(size, sizeof(unsigned)); 217 | 218 | return d; 219 | } 220 | 221 | 222 | /*-------------------------------------------------------------------------*/ 223 | /** 224 | @brief Delete a dictionary object 225 | @param d dictionary object to deallocate. 226 | @return void 227 | 228 | Deallocate a dictionary object and all memory associated to it. 229 | */ 230 | /*--------------------------------------------------------------------------*/ 231 | 232 | static void dictionary_del(dictionary * d) 233 | { 234 | int i ; 235 | 236 | if (d==NULL) return ; 237 | for (i=0 ; isize ; i++) { 238 | if (d->key[i]!=NULL) 239 | free(d->key[i]); 240 | if (d->val[i]!=NULL) 241 | free(d->val[i]); 242 | } 243 | free(d->val); 244 | free(d->key); 245 | free(d->hash); 246 | free(d); 247 | 248 | return; 249 | } 250 | 251 | 252 | 253 | /*-------------------------------------------------------------------------*/ 254 | /** 255 | @brief Get a value from a dictionary. 256 | @param d dictionary object to search. 257 | @param key Key to look for in the dictionary. 258 | @param def Default value to return if key not found. 259 | @return 1 pointer to internally allocated character string. 260 | 261 | This function locates a key in a dictionary and returns a pointer to its 262 | value, or the passed 'def' pointer if no such key can be found in 263 | dictionary. The returned character pointer points to data internal to the 264 | dictionary object, you should not try to free it or modify it. 265 | */ 266 | /*--------------------------------------------------------------------------*/ 267 | static char * dictionary_get(dictionary * d, char * key, char * def) 268 | { 269 | unsigned hash ; 270 | int i ; 271 | 272 | hash = dictionary_hash(key); 273 | for (i=0 ; isize ; i++) { 274 | if (d->key==NULL) 275 | continue ; 276 | /* Compare hash */ 277 | if (hash==d->hash[i]) { 278 | /* Compare string, to avoid hash collisions */ 279 | if (!strcmp(key, d->key[i])) { 280 | return d->val[i] ; 281 | } 282 | } 283 | } 284 | return def ; 285 | } 286 | 287 | 288 | /*-------------------------------------------------------------------------*/ 289 | /** 290 | @brief Set a value in a dictionary. 291 | @param d dictionary object to modify. 292 | @param key Key to modify or add. 293 | @param val Value to add. 294 | @return void 295 | 296 | If the given key is found in the dictionary, the associated value is 297 | replaced by the provided one. If the key cannot be found in the 298 | dictionary, it is added to it. 299 | 300 | It is Ok to provide a NULL value for val, but NULL values for the dictionary 301 | or the key are considered as errors: the function will return immediately 302 | in such a case. 303 | 304 | Notice that if you dictionary_set a variable to NULL, a call to 305 | dictionary_get will return a NULL value: the variable will be found, and 306 | its value (NULL) is returned. In other words, setting the variable 307 | content to NULL is equivalent to deleting the variable from the 308 | dictionary. It is not possible (in this implementation) to have a key in 309 | the dictionary without value. 310 | */ 311 | /*--------------------------------------------------------------------------*/ 312 | 313 | static void dictionary_set(dictionary * d, char * key, char * val) 314 | { 315 | int i ; 316 | unsigned hash ; 317 | 318 | if (d==NULL || key==NULL) return ; 319 | 320 | /* Compute hash for this key */ 321 | hash = dictionary_hash(key) ; 322 | /* Find if value is already in blackboard */ 323 | if (d->n>0) { 324 | for (i=0 ; isize ; i++) { 325 | if (d->key[i]==NULL) 326 | continue ; 327 | if (hash==d->hash[i]) { /* Same hash value */ 328 | if (!strcmp(key, d->key[i])) { /* Same key */ 329 | /* Found a value: modify and return */ 330 | if (d->val[i]!=NULL) 331 | free(d->val[i]); 332 | d->val[i] = val ? strdup(val) : NULL ; 333 | /* Value has been modified: return */ 334 | return ; 335 | } 336 | } 337 | } 338 | } 339 | /* Add a new value */ 340 | /* See if dictionary needs to grow */ 341 | if (d->n==d->size) { 342 | 343 | /* Reached maximum size: reallocate blackboard */ 344 | d->val = (char **)mem_double(d->val, d->size * sizeof(char*)) ; 345 | d->key = (char **)mem_double(d->key, d->size * sizeof(char*)) ; 346 | d->hash = (unsigned int *)mem_double(d->hash, d->size * sizeof(unsigned)) ; 347 | 348 | /* Double size */ 349 | d->size *= 2 ; 350 | } 351 | 352 | /* Insert key in the first empty slot */ 353 | for (i=0 ; isize ; i++) { 354 | if (d->key[i]==NULL) { 355 | /* Add key here */ 356 | break ; 357 | } 358 | } 359 | /* Copy key */ 360 | d->key[i] = strdup(key); 361 | d->val[i] = val ? strdup(val) : NULL ; 362 | d->hash[i] = hash; 363 | d->n ++ ; 364 | return ; 365 | } 366 | 367 | /*-------------------------------------------------------------------------*/ 368 | /** 369 | @brief Delete a key in a dictionary 370 | @param d dictionary object to modify. 371 | @param key Key to remove. 372 | @return void 373 | 374 | This function deletes a key in a dictionary. Nothing is done if the 375 | key cannot be found. 376 | */ 377 | /*--------------------------------------------------------------------------*/ 378 | static void dictionary_unset(dictionary * d, char * key) 379 | { 380 | unsigned hash ; 381 | int i ; 382 | 383 | hash = dictionary_hash(key); 384 | for (i=0 ; isize ; i++) { 385 | if (d->key[i]==NULL) 386 | continue ; 387 | /* Compare hash */ 388 | if (hash==d->hash[i]) { 389 | /* Compare string, to avoid hash collisions */ 390 | if (!strcmp(key, d->key[i])) { 391 | /* Found key */ 392 | break ; 393 | } 394 | } 395 | } 396 | if (i>=d->size) 397 | /* Key not found */ 398 | return ; 399 | 400 | free(d->key[i]); 401 | d->key[i] = NULL ; 402 | if (d->val[i]!=NULL) { 403 | free(d->val[i]); 404 | d->val[i] = NULL ; 405 | } 406 | d->hash[i] = 0 ; 407 | d->n -- ; 408 | return ; 409 | } 410 | 411 | 412 | /*-------------------------------------------------------------------------*/ 413 | /** 414 | @brief Dump a dictionary to an opened file pointer. 415 | @param d Dictionary to dump 416 | @param f Opened file pointer. 417 | @return void 418 | 419 | Dumps a dictionary onto an opened file pointer. Key pairs are printed out 420 | as @c [Key]=[Value], one per line. It is Ok to provide stdout or stderr as 421 | output file pointers. 422 | */ 423 | /*--------------------------------------------------------------------------*/ 424 | 425 | static void dictionary_dump(dictionary *d, FILE *f) 426 | { 427 | int i; 428 | 429 | if (d==NULL || f==NULL) return; 430 | 431 | for (i=0; isize; i++) { 432 | if (d->key[i] == NULL) 433 | continue ; 434 | if (d->val[i] != NULL) { 435 | fprintf(f, "[%s]=[%s]\n", d->key[i], d->val[i]); 436 | } else { 437 | fprintf(f, "[%s]=UNDEF\n", d->key[i]); 438 | } 439 | } 440 | 441 | return; 442 | } 443 | 444 | 445 | /* iniparser.c.c following */ 446 | #define ASCIILINESZ 1024 447 | #define INI_INVALID_KEY ((char*)-1) 448 | 449 | /* Private: add an entry to the dictionary */ 450 | static void iniparser_add_entry( 451 | dictionary * d, 452 | char * sec, 453 | char * key, 454 | char * val) 455 | { 456 | char longkey[2*ASCIILINESZ+1]; 457 | 458 | /* Make a key as section:keyword */ 459 | if (key!=NULL) { 460 | sprintf(longkey, "%s:%s", sec, key); 461 | } else { 462 | strcpy(longkey, sec); 463 | } 464 | 465 | /* Add (key,val) to dictionary */ 466 | dictionary_set(d, longkey, val); 467 | return ; 468 | } 469 | 470 | 471 | /*-------------------------------------------------------------------------*/ 472 | /** 473 | @brief Get number of sections in a dictionary 474 | @param d Dictionary to examine 475 | @return int Number of sections found in dictionary 476 | 477 | This function returns the number of sections found in a dictionary. 478 | The test to recognize sections is done on the string stored in the 479 | dictionary: a section name is given as "section" whereas a key is 480 | stored as "section:key", thus the test looks for entries that do not 481 | contain a colon. 482 | 483 | This clearly fails in the case a section name contains a colon, but 484 | this should simply be avoided. 485 | 486 | This function returns -1 in case of error. 487 | */ 488 | /*--------------------------------------------------------------------------*/ 489 | 490 | int iniparser_getnsec(dictionary * d) 491 | { 492 | int i ; 493 | int nsec ; 494 | 495 | if (d==NULL) return -1 ; 496 | nsec=0 ; 497 | for (i=0 ; isize ; i++) { 498 | if (d->key[i]==NULL) 499 | continue ; 500 | if (strchr(d->key[i], ':')==NULL) { 501 | nsec ++ ; 502 | } 503 | } 504 | return nsec ; 505 | } 506 | 507 | 508 | /*-------------------------------------------------------------------------*/ 509 | /** 510 | @brief Get name for section n in a dictionary. 511 | @param d Dictionary to examine 512 | @param n Section number (from 0 to nsec-1). 513 | @return Pointer to char string 514 | 515 | This function locates the n-th section in a dictionary and returns 516 | its name as a pointer to a string statically allocated inside the 517 | dictionary. Do not free or modify the returned string! 518 | 519 | This function returns NULL in case of error. 520 | */ 521 | /*--------------------------------------------------------------------------*/ 522 | 523 | char * iniparser_getsecname(dictionary * d, int n) 524 | { 525 | int i ; 526 | int foundsec ; 527 | 528 | if (d==NULL || n<0) return NULL ; 529 | foundsec=0 ; 530 | for (i=0 ; isize ; i++) { 531 | if (d->key[i]==NULL) 532 | continue ; 533 | if (strchr(d->key[i], ':')==NULL) { 534 | foundsec++ ; 535 | if (foundsec>n) 536 | break ; 537 | } 538 | } 539 | if (foundsec<=n) { 540 | return NULL ; 541 | } 542 | return d->key[i] ; 543 | } 544 | 545 | 546 | /*-------------------------------------------------------------------------*/ 547 | /** 548 | @brief Dump a dictionary to an opened file pointer. 549 | @param d Dictionary to dump. 550 | @param f Opened file pointer to dump to. 551 | @return void 552 | 553 | This function prints out the contents of a dictionary, one element by 554 | line, onto the provided file pointer. It is OK to specify @c stderr 555 | or @c stdout as output files. This function is meant for debugging 556 | purposes mostly. 557 | */ 558 | /*--------------------------------------------------------------------------*/ 559 | void iniparser_dump(dictionary * d, FILE * f) 560 | { 561 | dictionary_dump(d,f); 562 | } 563 | 564 | 565 | /*-------------------------------------------------------------------------*/ 566 | /** 567 | @brief Save a dictionary to a loadable ini file 568 | @param d Dictionary to dump 569 | @param f Opened file pointer to dump to 570 | @return void 571 | 572 | This function dumps a given dictionary into a loadable ini file. 573 | It is Ok to specify @c stderr or @c stdout as output files. 574 | */ 575 | /*--------------------------------------------------------------------------*/ 576 | 577 | void iniparser_dump_ini(dictionary * d, FILE * f) 578 | { 579 | int i, j ; 580 | char keym[ASCIILINESZ+1]; 581 | int nsec ; 582 | char * secname ; 583 | int seclen ; 584 | 585 | if (d==NULL || f==NULL) return ; 586 | 587 | nsec = iniparser_getnsec(d); 588 | if (nsec<1) { 589 | /* No section in file: dump all keys as they are */ 590 | for (i=0 ; isize ; i++) { 591 | if (d->key[i]==NULL) 592 | continue ; 593 | fprintf(f, "%s = %s\n", d->key[i], d->val[i]); 594 | } 595 | return ; 596 | } 597 | for (i=0 ; isize ; j++) { 603 | if (d->key[j]==NULL) 604 | continue ; 605 | if (!strncmp(d->key[j], keym, seclen+1)) { 606 | fprintf(f, 607 | "%-30s = %s\n", 608 | d->key[j]+seclen+1, 609 | d->val[j] ? d->val[j] : ""); 610 | } 611 | } 612 | } 613 | fprintf(f, "\n"); 614 | return ; 615 | } 616 | 617 | /*-------------------------------------------------------------------------*/ 618 | /** 619 | @brief Get the string associated to a key, return NULL if not found 620 | @param d Dictionary to search 621 | @param key Key string to look for 622 | @return pointer to statically allocated character string, or NULL. 623 | 624 | This function queries a dictionary for a key. A key as read from an 625 | ini file is given as "section:key". If the key cannot be found, 626 | NULL is returned. 627 | The returned char pointer is pointing to a string allocated in 628 | the dictionary, do not free or modify it. 629 | 630 | This function is only provided for backwards compatibility with 631 | previous versions of iniparser. It is recommended to use 632 | iniparser_getstring() instead. 633 | */ 634 | /*--------------------------------------------------------------------------*/ 635 | char * iniparser_getstr(dictionary * d, char * key) 636 | { 637 | return iniparser_getstring(d, key, NULL); 638 | } 639 | 640 | 641 | /*-------------------------------------------------------------------------*/ 642 | /** 643 | @brief Get the string associated to a key 644 | @param d Dictionary to search 645 | @param key Key string to look for 646 | @param def Default value to return if key not found. 647 | @return pointer to statically allocated character string 648 | 649 | This function queries a dictionary for a key. A key as read from an 650 | ini file is given as "section:key". If the key cannot be found, 651 | the pointer passed as 'def' is returned. 652 | The returned char pointer is pointing to a string allocated in 653 | the dictionary, do not free or modify it. 654 | */ 655 | /*--------------------------------------------------------------------------*/ 656 | char * iniparser_getstring(dictionary * d, char * key, char * def) 657 | { 658 | char * lc_key ; 659 | char * sval ; 660 | 661 | if (d==NULL || key==NULL) 662 | return def ; 663 | 664 | lc_key = strdup(strlwc(key)); 665 | sval = dictionary_get(d, lc_key, def); 666 | free(lc_key); 667 | return sval ; 668 | } 669 | 670 | 671 | 672 | /*-------------------------------------------------------------------------*/ 673 | /** 674 | @brief Get the string associated to a key, convert to an int 675 | @param d Dictionary to search 676 | @param key Key string to look for 677 | @param notfound Value to return in case of error 678 | @return integer 679 | 680 | This function queries a dictionary for a key. A key as read from an 681 | ini file is given as "section:key". If the key cannot be found, 682 | the notfound value is returned. 683 | */ 684 | /*--------------------------------------------------------------------------*/ 685 | int iniparser_getint(dictionary * d, char * key, int notfound) 686 | { 687 | char * str ; 688 | 689 | str = iniparser_getstring(d, key, INI_INVALID_KEY); 690 | if (str==INI_INVALID_KEY) return notfound ; 691 | return atoi(str); 692 | } 693 | 694 | 695 | /*-------------------------------------------------------------------------*/ 696 | /** 697 | @brief Get the string associated to a key, convert to a double 698 | @param d Dictionary to search 699 | @param key Key string to look for 700 | @param notfound Value to return in case of error 701 | @return double 702 | 703 | This function queries a dictionary for a key. A key as read from an 704 | ini file is given as "section:key". If the key cannot be found, 705 | the notfound value is returned. 706 | */ 707 | /*--------------------------------------------------------------------------*/ 708 | double iniparser_getdouble(dictionary * d, char * key, double notfound) 709 | { 710 | char * str ; 711 | 712 | str = iniparser_getstring(d, key, INI_INVALID_KEY); 713 | if (str==INI_INVALID_KEY) return notfound ; 714 | return atof(str); 715 | } 716 | 717 | 718 | 719 | /*-------------------------------------------------------------------------*/ 720 | /** 721 | @brief Get the string associated to a key, convert to a boolean 722 | @param d Dictionary to search 723 | @param key Key string to look for 724 | @param notfound Value to return in case of error 725 | @return integer 726 | 727 | This function queries a dictionary for a key. A key as read from an 728 | ini file is given as "section:key". If the key cannot be found, 729 | the notfound value is returned. 730 | 731 | A true boolean is found if one of the following is matched: 732 | 733 | - A string starting with 'y' 734 | - A string starting with 'Y' 735 | - A string starting with 't' 736 | - A string starting with 'T' 737 | - A string starting with '1' 738 | 739 | A false boolean is found if one of the following is matched: 740 | 741 | - A string starting with 'n' 742 | - A string starting with 'N' 743 | - A string starting with 'f' 744 | - A string starting with 'F' 745 | - A string starting with '0' 746 | 747 | The notfound value returned if no boolean is identified, does not 748 | necessarily have to be 0 or 1. 749 | */ 750 | /*--------------------------------------------------------------------------*/ 751 | int iniparser_getboolean(dictionary * d, char * key, int notfound) 752 | { 753 | char * c ; 754 | int ret ; 755 | 756 | c = iniparser_getstring(d, key, INI_INVALID_KEY); 757 | if (c==INI_INVALID_KEY) return notfound ; 758 | if (c[0]=='y' || c[0]=='Y' || c[0]=='1' || c[0]=='t' || c[0]=='T') { 759 | ret = 1 ; 760 | } else if (c[0]=='n' || c[0]=='N' || c[0]=='0' || c[0]=='f' || c[0]=='F') { 761 | ret = 0 ; 762 | } else { 763 | ret = notfound ; 764 | } 765 | return ret; 766 | } 767 | 768 | 769 | /*-------------------------------------------------------------------------*/ 770 | /** 771 | @brief Finds out if a given entry exists in a dictionary 772 | @param ini Dictionary to search 773 | @param entry Name of the entry to look for 774 | @return integer 1 if entry exists, 0 otherwise 775 | 776 | Finds out if a given entry exists in the dictionary. Since sections 777 | are stored as keys with NULL associated values, this is the only way 778 | of querying for the presence of sections in a dictionary. 779 | */ 780 | /*--------------------------------------------------------------------------*/ 781 | 782 | int iniparser_find_entry( 783 | dictionary * ini, 784 | char * entry 785 | ) 786 | { 787 | int found=0 ; 788 | if (iniparser_getstring(ini, entry, INI_INVALID_KEY)!=INI_INVALID_KEY) { 789 | found = 1 ; 790 | } 791 | return found ; 792 | } 793 | 794 | 795 | 796 | /*-------------------------------------------------------------------------*/ 797 | /** 798 | @brief Set an entry in a dictionary. 799 | @param ini Dictionary to modify. 800 | @param entry Entry to modify (entry name) 801 | @param val New value to associate to the entry. 802 | @return int 0 if Ok, -1 otherwise. 803 | 804 | If the given entry can be found in the dictionary, it is modified to 805 | contain the provided value. If it cannot be found, -1 is returned. 806 | It is Ok to set val to NULL. 807 | */ 808 | /*--------------------------------------------------------------------------*/ 809 | 810 | int iniparser_setstr(dictionary * ini, char * entry, char * val) 811 | { 812 | dictionary_set(ini, strlwc(entry), val); 813 | return 0 ; 814 | } 815 | 816 | /*-------------------------------------------------------------------------*/ 817 | /** 818 | @brief Delete an entry in a dictionary 819 | @param ini Dictionary to modify 820 | @param entry Entry to delete (entry name) 821 | @return void 822 | 823 | If the given entry can be found, it is deleted from the dictionary. 824 | */ 825 | /*--------------------------------------------------------------------------*/ 826 | void iniparser_unset(dictionary * ini, char * entry) 827 | { 828 | dictionary_unset(ini, strlwc(entry)); 829 | } 830 | 831 | 832 | /*-------------------------------------------------------------------------*/ 833 | /** 834 | @brief Parse an ini file and return an allocated dictionary object 835 | @param ininame Name of the ini file to read. 836 | @return Pointer to newly allocated dictionary 837 | 838 | This is the parser for ini files. This function is called, providing 839 | the name of the file to be read. It returns a dictionary object that 840 | should not be accessed directly, but through accessor functions 841 | instead. 842 | 843 | The returned dictionary must be freed using iniparser_free(). 844 | */ 845 | /*--------------------------------------------------------------------------*/ 846 | 847 | dictionary * iniparser_load(char *ininame) 848 | { 849 | dictionary * d ; 850 | char lin[ASCIILINESZ+1]; 851 | char sec[ASCIILINESZ+1]; 852 | char key[ASCIILINESZ+1]; 853 | char val[ASCIILINESZ+1]; 854 | char * where ; 855 | FILE * ini ; 856 | int lineno ; 857 | 858 | if ((ini=fopen(ininame, "r"))==NULL) { 859 | return NULL ; 860 | } 861 | 862 | sec[0]=0; 863 | 864 | /* 865 | * Initialize a new dictionary entry 866 | */ 867 | d = dictionary_new(0); 868 | lineno = 0 ; 869 | while (fgets(lin, ASCIILINESZ, ini)!=NULL) { 870 | lineno++ ; 871 | where = strskp(lin); /* Skip leading spaces */ 872 | if (*where==';' || *where=='#' || *where==0) 873 | continue ; /* Comment lines */ 874 | else { 875 | if (sscanf(where, "[%[^]]", sec)==1) { 876 | /* Valid section name */ 877 | strcpy(sec, strlwc(sec)); 878 | iniparser_add_entry(d, sec, NULL, NULL); 879 | } else if (sscanf (where, "%[^=] = \"%[^\"]\"", key, val) == 2 880 | || sscanf (where, "%[^=] = '%[^\']'", key, val) == 2 881 | || sscanf (where, "%[^=] = %[^;#]", key, val) == 2) { 882 | strcpy(key, strlwc(strcrop(key))); 883 | /* 884 | * sscanf cannot handle "" or '' as empty value, 885 | * this is done here 886 | */ 887 | if (!strcmp(val, "\"\"") || !strcmp(val, "''")) { 888 | val[0] = (char)0; 889 | } else { 890 | strcpy(val, strcrop(val)); 891 | } 892 | iniparser_add_entry(d, sec, key, val); 893 | } 894 | } 895 | } 896 | fclose(ini); 897 | return d ; 898 | } 899 | 900 | 901 | 902 | /*-------------------------------------------------------------------------*/ 903 | /** 904 | @brief Free all memory associated to an ini dictionary 905 | @param d Dictionary to free 906 | @return void 907 | 908 | Free all memory associated to an ini dictionary. 909 | It is mandatory to call this function before the dictionary object 910 | gets out of the current context. 911 | */ 912 | /*--------------------------------------------------------------------------*/ 913 | 914 | void iniparser_freedict(dictionary * d) 915 | { 916 | dictionary_del(d); 917 | } 918 | 919 | #ifdef __cplusplus 920 | } 921 | #endif 922 | -------------------------------------------------------------------------------- /logo.h: -------------------------------------------------------------------------------- 1 | unsigned char logo_buffer[10344] = {0x89, 2 | 0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,0x00, 3 | 0x00,0x01,0xe0,0x00,0x00,0x01,0x10,0x08,0x00,0x00,0x00,0x00,0x4d,0x2d,0xf8,0x50, 4 | 0x00,0x00,0x00,0x09,0x70,0x48,0x59,0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13, 5 | 0x01,0x00,0x9a,0x9c,0x18,0x00,0x00,0x20,0x00,0x49,0x44,0x41,0x54,0x78,0xda,0xed, 6 | 0x7d,0x79,0x9c,0x1d,0x55,0x9d,0xef,0xf7,0x77,0xce,0xa9,0xaa,0x5b,0x77,0xe9,0x25, 7 | 0xe9,0xce,0x46,0x08,0x84,0xc4,0x00,0x49,0x44,0x40,0x16,0x57,0x40,0xdc,0x40,0x14, 8 | 0xc4,0xa7,0x82,0x9a,0x19,0x17,0x74,0x50,0x7c,0x6e,0x38,0xf3,0x7c,0xce,0x7c,0xe6, 9 | 0x31,0xe3,0x32,0xe3,0x3c,0x67,0x18,0x9f,0x33,0x3a,0x3a,0x88,0x23,0x12,0x17,0x0c, 10 | 0x83,0x0e,0x83,0x8c,0xb2,0x69,0x84,0x51,0x36,0x03,0x42,0x42,0x42,0x16,0x96,0x04, 11 | 0xb2,0x27,0xbd,0xdd,0xad,0xaa,0xce,0x39,0xbf,0xf7,0x47,0xdd,0x5e,0x6e,0xf7,0xed, 12 | 0x4e,0x77,0xd3,0xb9,0x9d,0x34,0xe7,0xfb,0xc9,0x27,0xd5,0x75,0xea,0xd4,0xef,0xd4, 13 | 0x3d,0xbf,0xfa,0x9e,0xdf,0xef,0xfc,0xce,0x52,0xc4,0x70,0x98,0xc9,0x10,0xae,0x0a, 14 | 0x9c,0x82,0x1d,0x9c,0x82,0x1d,0x9c,0x82,0x1d,0x9c,0x82,0x1d,0x9c,0x82,0x1d,0x9c, 15 | 0x82,0x1d,0x9c,0x82,0x9d,0x82,0x1d,0x9c,0x82,0x1d,0x9c,0x82,0x1d,0x9c,0x82,0x1d, 16 | 0x9c,0x82,0x1d,0x9c,0x82,0x1d,0x46,0x85,0x72,0x55,0x30,0x0e,0x30,0x83,0x2d,0x00, 17 | 0x06,0x13,0x5b,0x12,0x10,0x0c,0x08,0x01,0xd0,0x11,0xff,0xe8,0xe4,0xc6,0x83,0x1d, 18 | 0x83,0x5f,0xc4,0xc4,0x35,0x6c,0xd8,0x4a,0x48,0x01,0xd0,0x30,0x6b,0xc6,0x96,0x85, 19 | 0xb1,0xcc,0x04,0x29,0x04,0x91,0x63,0xb0,0x83,0x63,0xf0,0x91,0x03,0xcb,0x5a,0x83, 20 | 0xa4,0x1c,0x41,0x4d,0x6e,0x60,0x76,0x99,0xad,0xb1,0x00,0x49,0x21,0xc8,0x31,0xd8, 21 | 0xc1,0x31,0x78,0x9a,0xc9,0x6b,0x62,0xc3,0xbe,0x27,0x29,0x65,0xb2,0x05,0x11,0x59, 22 | 0x42,0x4a,0x65,0x26,0x30,0x31,0x31,0xac,0x25,0x08,0xb0,0x04,0x8b,0x21,0x16,0x5b, 23 | 0x33,0x94,0x47,0x8e,0xc1,0x0e,0x8e,0xc1,0xd3,0x03,0x13,0x95,0x6d,0x36,0x50,0x04, 24 | 0x30,0x1b,0x22,0x16,0x38,0xa4,0x7b,0xcc,0x4c,0x56,0x0e,0x9a,0x66,0xb6,0xda,0x5a, 25 | 0x4f,0x1e,0x39,0xc6,0xd8,0x31,0xd8,0x31,0xf8,0xc5,0xd2,0xe9,0x4d,0xaa,0xc6,0xf3, 26 | 0x95,0x80,0x65,0x23,0xc4,0x44,0x63,0xb8,0x0c,0x36,0x42,0xd4,0x78,0x6c,0xb4,0x85, 27 | 0x7f,0x84,0x90,0xd8,0x31,0xd8,0x31,0xf8,0x45,0xe1,0x3a,0x27,0x15,0x11,0x78,0x82, 28 | 0x99,0x05,0x5e,0x40,0x84,0xd9,0x30,0x41,0xa6,0x8c,0x36,0x09,0x2b,0x25,0x1c,0x83, 29 | 0x1d,0x1c,0x83,0x9b,0x40,0xdf,0x92,0xc8,0x29,0x30,0x9b,0x11,0xde,0x2f,0x83,0x59, 30 | 0x83,0x09,0x60,0x26,0x10,0x40,0x44,0xf2,0x10,0x14,0x67,0x4b,0xa9,0xef,0x9d,0xc4, 31 | 0x34,0xfd,0x24,0x76,0x0c,0x76,0x0c,0x9e,0xe9,0xce,0x73,0x85,0x02,0x1f,0x86,0x68, 32 | 0x48,0x97,0x97,0x59,0xdb,0x2a,0x12,0x12,0x92,0x84,0x90,0x60,0xc1,0x10,0x12,0xc6, 33 | 0x80,0x00,0xd6,0xcc,0x60,0x96,0x42,0x4a,0x39,0x5a,0x2f,0xd9,0x98,0x94,0xb9,0xac, 34 | 0xb5,0xf0,0x84,0x63,0xb0,0x83,0x63,0xf0,0xe1,0x32,0xbf,0xd5,0x28,0x13,0x90,0x31, 35 | 0xc2,0x1b,0xb4,0xa0,0xdd,0x09,0x00,0xca,0xa9,0x60,0x6c,0x4b,0xcb,0xc6,0x44,0x46, 36 | 0x2b,0xe5,0x7b,0x8d,0x7a,0xbc,0x0c,0x66,0x09,0x00,0x56,0x27,0xde,0x74,0x1a,0x62, 37 | 0xc7,0x60,0xc7,0xe0,0x99,0x0b,0x53,0xb2,0x59,0xcf,0xda,0x7e,0x53,0xca,0x26,0x8e, 38 | 0x22,0x20,0xe7,0xf9,0xe3,0x67,0x1c,0x73,0x52,0xd5,0xec,0x07,0x8d,0x2c,0xad,0xe1, 39 | 0x74,0x48,0x8a,0x35,0x84,0x74,0x0c,0x76,0x70,0x0c,0x9e,0x5a,0xe8,0x32,0x72,0x64, 40 | 0x6d,0xcd,0x40,0xda,0x62,0x19,0xf0,0xb3,0xfe,0x50,0xc7,0x98,0x01,0xa4,0x9d,0x60, 41 | 0x02,0xc6,0xe8,0xfd,0xb2,0x4d,0xca,0x89,0xcc,0x05,0xa3,0x12,0x9f,0x63,0x4c,0x97, 42 | 0x33,0xed,0x18,0xec,0x18,0x3c,0x73,0xf9,0xcb,0x49,0x6d,0xe2,0x86,0x89,0x7a,0x11, 43 | 0xe4,0x6a,0x73,0x31,0x18,0x16,0xd6,0x30,0x20,0x8d,0x05,0x60,0x89,0x2d,0x24,0x41, 44 | 0x10,0x59,0x2b,0x94,0x11,0xaa,0x71,0xef,0xd7,0xc6,0x65,0x9b,0xc9,0xa8,0x91,0xee, 45 | 0x74,0x3a,0x35,0xc4,0xd8,0xe9,0xe1,0xb0,0x63,0xb0,0x63,0xf0,0x8c,0xf4,0x9f,0xcb, 46 | 0x26,0x2f,0x0c,0x49,0x02,0x60,0xab,0xbd,0xf0,0x5a,0x65,0x3a,0x8d,0xc3,0x30,0x1b, 47 | 0x41,0x56,0x28,0x58,0x21,0x08,0xb0,0x10,0x06,0x44,0x86,0x00,0x08,0x82,0xa5,0xd8, 48 | 0x10,0x24,0x11,0x49,0x1a,0x49,0x64,0xd6,0x95,0x38,0x08,0xd5,0x08,0x0b,0x0d,0x09, 49 | 0xc0,0x26,0xf0,0xc9,0x31,0xd8,0xc1,0x31,0xf8,0x85,0x83,0x4b,0x51,0xde,0x37,0x42, 50 | 0x00,0x30,0xe5,0x48,0x66,0x95,0x20,0x66,0xa3,0x99,0x21,0x94,0x15,0x24,0x30,0xfa, 51 | 0x54,0x2c,0x66,0xb6,0x20,0x86,0x49,0xac,0xc8,0x28,0x3b,0x82,0xc6,0x9c,0xf4,0xe9, 52 | 0x5c,0x28,0x47,0xdc,0x25,0x00,0xe8,0xaa,0x17,0x38,0x06,0x3b,0x38,0x06,0xbf,0x50, 53 | 0x44,0x7d,0x7e,0x8e,0x20,0x00,0x5b,0x2d,0x52,0x98,0x15,0xb0,0x91,0x16,0x04,0x49, 54 | 0x82,0x68,0x9c,0x8b,0x8c,0x98,0xad,0x11,0x64,0xb4,0x14,0x02,0xc3,0x57,0x3f,0x70, 55 | 0xb9,0x8f,0x5a,0x87,0x05,0xb2,0x53,0x0a,0xc3,0x68,0x29,0xc9,0x31,0xd8,0xc1,0x31, 56 | 0xf8,0x05,0xc0,0xf6,0x45,0xed,0x82,0x25,0xc1,0x74,0x27,0xf0,0x5a,0x94,0x89,0xad, 57 | 0x15,0x1e,0x61,0x12,0x73,0x99,0x59,0x5b,0xc9,0x09,0x49,0x90,0xaa,0xbf,0x57,0xf7, 58 | 0xc6,0x85,0xec,0x30,0x0e,0x5b,0x41,0x80,0x8d,0x44,0x93,0x5d,0x69,0xc7,0x60,0xc7, 59 | 0xe0,0x99,0x85,0xa4,0x3b,0xc8,0x69,0x25,0xa1,0x8b,0x55,0x64,0x0a,0x36,0xd1,0xda, 60 | 0xf7,0x84,0x9c,0x74,0x90,0x89,0x8d,0x95,0x48,0x58,0x10,0xd5,0xcb,0x30,0xbd,0x51, 61 | 0x3e,0x5b,0x2f,0xd5,0x90,0x00,0x38,0x66,0x5f,0x38,0x06,0x3b,0x38,0x06,0x4f,0x92, 62 | 0x70,0x95,0xde,0x36,0x05,0x49,0xa6,0x37,0x82,0x5f,0x48,0x62,0x48,0xcf,0x7b,0xc1, 63 | 0x4b,0x10,0xd8,0xb0,0x48,0x20,0x59,0xd4,0x79,0xc8,0xb6,0x58,0xce,0xe5,0x1a,0x90, 64 | 0x55,0x47,0x9e,0xef,0x18,0xec,0xe0,0x18,0x3c,0x29,0xae,0xf5,0xc6,0x6d,0xc6,0x93, 65 | 0xa6,0x37,0x02,0x5a,0x13,0x2d,0x32,0x6a,0x8a,0xba,0xa5,0xd6,0x82,0x13,0xe1,0x71, 66 | 0x5d,0x75,0x9a,0x2e,0xdd,0x9a,0x19,0x2a,0x3f,0x1d,0x59,0x32,0xb1,0x52,0xe4,0x18, 67 | 0xec,0xe0,0x18,0x3c,0x71,0x9e,0xf5,0xda,0x82,0xf1,0x49,0x17,0x23,0x08,0x9f,0x95, 68 | 0xe7,0x4d,0xe5,0x4c,0x29,0x6b,0x84,0x36,0xb2,0xde,0x21,0x37,0x25,0x14,0xea,0xc8, 69 | 0x6a,0x59,0x02,0x5c,0xe6,0xac,0x70,0x0c,0x76,0x70,0x0c,0x9e,0x20,0x4c,0x2f,0xe5, 70 | 0xa0,0xcc,0x01,0x06,0x94,0x0c,0xbc,0xa9,0x37,0x84,0x16,0x3a,0x39,0xc4,0xea,0x7e, 71 | 0x66,0x01,0x70,0x24,0xa5,0x70,0x0c,0x76,0x70,0x0c,0x9e,0x18,0xbf,0x0e,0x8a,0x2c, 72 | 0x67,0xca,0x7d,0x00,0x90,0xf7,0x0f,0xcb,0x66,0x38,0xcc,0xd0,0x89,0x3f,0xe6,0x76, 73 | 0x59,0x69,0x4c,0x3a,0x69,0xda,0x0c,0x2d,0xc7,0x60,0xc7,0xe0,0x19,0x43,0x60,0x9b, 74 | 0x43,0xe6,0xa0,0xc1,0x04,0xd7,0x2e,0x4c,0xd4,0xd0,0x53,0x39,0x6a,0x19,0x6b,0x21, 75 | 0x43,0x4a,0x61,0x6d,0x9b,0xb4,0x9f,0x96,0x63,0xb0,0x63,0xf0,0x91,0xc2,0xc0,0x24, 76 | 0x2e,0x01,0x40,0x36,0x3b,0xa9,0x67,0xe6,0x3e,0x9d,0x31,0xe1,0x7e,0x48,0x0e,0x55, 77 | 0x70,0x38,0xed,0x9f,0xb5,0x54,0xf6,0x69,0xf4,0x05,0x85,0xcc,0xc6,0x03,0x38,0x1e, 78 | 0x5c,0xd0,0xe8,0x18,0xec,0x30,0xe3,0x19,0x6c,0x2a,0x45,0x40,0xb0,0x40,0x5e,0x4e, 79 | 0xd2,0x76,0x55,0xfa,0xf2,0xc6,0xeb,0x96,0x68,0x49,0x82,0xc3,0x4d,0x1d,0x03,0x33, 80 | 0x56,0x77,0x98,0xd9,0x4a,0x82,0xad,0x7a,0x9e,0x63,0xb0,0xc3,0x8b,0x84,0xc1,0xe5, 81 | 0xde,0x82,0xdf,0xed,0x15,0x44,0xff,0xe2,0xa1,0x89,0x93,0x38,0xea,0xca,0x57,0x72, 82 | 0xbd,0x92,0x32,0x87,0x58,0xb8,0x3f,0x35,0x14,0x36,0xa2,0xe2,0x49,0x6f,0x0c,0x47, 83 | 0x5a,0x02,0x3a,0xca,0x48,0xc7,0x60,0x87,0x99,0xcc,0x60,0x66,0x70,0x02,0x18,0xc0, 84 | 0x96,0xda,0xb8,0x27,0x97,0x95,0x00,0xe2,0x5e,0xed,0x67,0x1b,0xb2,0xd0,0x94,0xca, 85 | 0xb9,0x70,0x94,0xf1,0x5d,0xbb,0x5f,0xc5,0x42,0xca,0x38,0x08,0x9b,0x33,0x9b,0xc2, 86 | 0xa2,0x28,0x7d,0x35,0xba,0x15,0x16,0x00,0x12,0xd3,0x84,0xc6,0xc4,0x31,0xd8,0x31, 87 | 0x78,0x1a,0x88,0xab,0x39,0xd6,0x11,0x00,0x88,0x50,0x90,0x54,0x04,0x50,0x54,0xd4, 88 | 0x20,0x05,0x01,0x8e,0x67,0x8f,0x66,0xdc,0x6c,0xb5,0x17,0x08,0x0a,0x8d,0x7e,0x52, 89 | 0xa9,0x2f,0xac,0x84,0x5e,0xaf,0xd7,0x26,0x9b,0xf5,0x1b,0xb8,0x62,0x33,0x63,0x74, 90 | 0x86,0x41,0x4d,0xea,0x0a,0x3b,0x06,0x3b,0x06,0x37,0x11,0xd6,0x24,0x49,0xcc,0xd2, 91 | 0x0b,0x44,0xa3,0x4d,0xe4,0x98,0x13,0xcd,0x65,0xdb,0x96,0x19,0x5d,0x80,0xee,0x32, 92 | 0x40,0x4b,0x66,0x38,0x73,0xec,0xc1,0xac,0x95,0x19,0x36,0x4d,0x9c,0x0b,0x65,0x28, 93 | 0xd6,0xc1,0xd8,0xa3,0xbe,0x3a,0x09,0x84,0x63,0xb0,0xc3,0x0c,0x61,0x30,0x9b,0x48, 94 | 0x8b,0x12,0x72,0xbe,0xf7,0x82,0xbe,0x22,0x96,0xf4,0x31,0x6b,0x0c,0xb7,0xb5,0xa5, 95 | 0x62,0x47,0xd3,0x37,0xaa,0x62,0x1b,0xeb,0x70,0xcc,0x49,0x9b,0x9c,0x08,0xe5,0x18, 96 | 0xec,0x30,0x03,0x18,0xcc,0x26,0x2e,0x06,0xd9,0x29,0x32,0x90,0x5c,0xee,0xf3,0xfd, 97 | 0xc4,0xb4,0xa9,0x3a,0x13,0x1c,0x36,0x7f,0x7b,0x0c,0x8b,0xb2,0xc9,0x8e,0x69,0x85, 98 | 0x9b,0x61,0x84,0x1d,0x83,0x1d,0x83,0x0f,0xf7,0x8b,0xae,0x23,0xf2,0xa7,0x76,0x3f, 99 | 0x56,0x5b,0x2e,0x05,0x56,0x17,0x06,0x56,0x15,0x54,0x8b,0x99,0x52,0x67,0xf3,0x77, 100 | 0xa9,0x62,0x94,0xc5,0x68,0x14,0x65,0x16,0x80,0x8d,0x3c,0xe5,0x18,0xec,0x70,0x34, 101 | 0x33,0xd8,0xc6,0x25,0x95,0x9f,0xb8,0x83,0xcb,0x36,0x19,0x7b,0x55,0x02,0x57,0x4b, 102 | 0x41,0xa4,0x6b,0xab,0xec,0xb9,0x54,0xd5,0xb9,0xfc,0x34,0xec,0x51,0x65,0xb9,0xec, 103 | 0xcb,0x51,0x6a,0xd8,0x08,0x02,0x57,0xc4,0x61,0x0f,0x47,0x3b,0x06,0x3b,0x06,0x1f, 104 | 0x3e,0x1b,0x95,0xf4,0xb1,0x6a,0x99,0x98,0x6d,0xb4,0x26,0xa9,0x24,0x10,0x39,0x75, 105 | 0xa8,0xad,0x2e,0x38,0xea,0xf3,0x8c,0x69,0xf7,0x00,0xd8,0xfd,0x41,0xb5,0x73,0x3a, 106 | 0x36,0x8a,0x64,0xc3,0xb1,0x3f,0x96,0x1f,0x6d,0x92,0xc3,0xbe,0xdc,0xdf,0x31,0xd8, 107 | 0x31,0xf8,0x70,0x19,0xa8,0x4a,0x35,0x69,0x3c,0xf4,0x33,0x2a,0x1f,0x2a,0x15,0x8b, 108 | 0x7c,0x66,0xdc,0x4b,0x7a,0x93,0x8a,0x57,0xa5,0x82,0x84,0x3d,0x60,0xbc,0xf6,0x69, 109 | 0xd9,0xea,0xd5,0x9a,0x48,0x8d,0x36,0xb3,0xc3,0x12,0xc1,0x1a,0xe9,0x18,0xec,0x70, 110 | 0x54,0x32,0xd8,0x54,0xa2,0x24,0x9b,0x1b,0xb7,0xff,0xcc,0xba,0x54,0x15,0x59,0x6f, 111 | 0xa2,0x0b,0x7a,0x92,0x32,0x95,0x0b,0xd9,0x6a,0x0f,0xc6,0x1a,0x81,0x3a,0xac,0x56, 112 | 0x38,0x2e,0xe5,0x47,0xe9,0xe3,0x33,0x08,0x5c,0x55,0x9e,0x63,0xb0,0xc3,0xd1,0xc7, 113 | 0x60,0x53,0x4a,0x92,0xb0,0x85,0xc6,0x4d,0x83,0x72,0x1c,0x64,0x26,0xe5,0x6f,0x9a, 114 | 0xee,0x24,0x27,0xd0,0x27,0x3a,0xa6,0xe9,0x8b,0x09,0x6c,0x2a,0x9e,0x1c,0x3d,0xc8, 115 | 0xce,0xb1,0x54,0x8e,0xc1,0x0e,0x47,0x1b,0x83,0x6d,0x94,0x24,0xc0,0x38,0xa7,0x47, 116 | 0x71,0x92,0x20,0xe0,0x49,0x8c,0x34,0x45,0xbd,0xf9,0x0c,0x81,0x2b,0xbd,0xa1,0x89, 117 | 0x0b,0xb9,0xe9,0xea,0xea,0x5b,0x5d,0x1d,0x65,0x44,0xc9,0x12,0x39,0x06,0x3b,0x1c, 118 | 0x85,0x0c,0xe6,0x28,0x06,0xc5,0xb9,0xf1,0x05,0x61,0x6d,0xac,0x39,0x9c,0xe4,0x33, 119 | 0xda,0x6a,0x64,0x5b,0x15,0x4c,0xb7,0xb4,0x61,0x86,0xa6,0x8b,0xc2,0xa6,0xec,0x37, 120 | 0xf6,0x1e,0x0c,0x24,0x38,0x52,0x8e,0xc1,0x0e,0x47,0x17,0x83,0x93,0x08,0xcc,0xfe, 121 | 0xf8,0xf8,0x6b,0xe2,0xa8,0x9a,0xcd,0x4f,0xde,0x01,0xe6,0x72,0x9f,0x6a,0xf5,0xb8, 122 | 0x9c,0x54,0xb3,0x85,0x69,0xa2,0x30,0x73,0x6f,0xa6,0xf1,0xc0,0x97,0x25,0xd7,0x0f, 123 | 0x76,0x38,0xca,0x18,0xcc,0xe0,0x12,0x4c,0x75,0xeb,0x8e,0x2e,0x74,0x1c,0xbb,0x70, 124 | 0x01,0x2b,0x2d,0x61,0x46,0x7d,0x02,0x1d,0x55,0x93,0x17,0xc2,0x5f,0x00,0xe0,0x6a, 125 | 0x8f,0x6c,0x97,0x51,0x54,0x19,0x7f,0xaf,0x7b,0xaa,0xdd,0xe8,0x92,0x68,0xbc,0x20, 126 | 0x99,0x59,0xcc,0x34,0x1b,0xcc,0x94,0x78,0x5a,0x3d,0xf7,0xe3,0x8d,0x15,0x02,0xab, 127 | 0xdc,0xbc,0xf3,0x4f,0xcb,0x45,0x41,0x94,0x71,0x2c,0x9b,0x39,0x0a,0xd6,0x65,0x6f, 128 | 0xff,0x77,0x1f,0xcd,0x23,0xa0,0x24,0xe6,0x50,0xcf,0x7e,0xc7,0x6b,0x8c,0x8c,0x1b, 129 | 0x8f,0xec,0x9a,0xea,0x0b,0xe7,0x2f,0x00,0x70,0xa5,0xd7,0x6b,0xd3,0xd5,0x28,0x97, 130 | 0x9d,0x26,0x2b,0x5c,0xad,0xe4,0x1a,0x6e,0x4a,0xc0,0x2c,0x60,0xe3,0x99,0xe5,0x45, 131 | 0x1b,0xa9,0xd5,0x53,0xd7,0x64,0xad,0x66,0x10,0x19,0x16,0xe5,0xec,0xcb,0x2f,0x6f, 132 | 0x09,0x98,0x1c,0xcf,0x66,0x88,0x0d,0xb6,0x15,0x14,0x9f,0xf1,0x05,0x87,0xd6,0x58, 133 | 0x78,0x16,0xad,0x7d,0xbf,0x2b,0xff,0x89,0xc7,0x0d,0x9c,0x4c,0x8e,0x75,0x9f,0xdf, 134 | 0x3a,0x35,0xab,0x11,0x4c,0x5f,0xb5,0x60,0x4c,0xd4,0x92,0x9d,0x96,0x0a,0x36,0xba, 135 | 0x92,0x57,0xa3,0x77,0x13,0x7c,0x39,0x83,0x18,0x6c,0x05,0x98,0xb7,0x5d,0x6b,0xad, 136 | 0xa7,0x2d,0xb3,0xd2,0x4c,0x99,0xa4,0xb2,0xf0,0xea,0x39,0x53,0x5d,0x4e,0x4f,0x4f, 137 | 0x59,0xcb,0xa0,0x30,0x6b,0x0a,0xea,0xae,0xba,0xaf,0x1a,0x93,0x17,0xe6,0x0b,0xd2, 138 | 0x31,0x78,0x1c,0xd6,0xd0,0x50,0x35,0x3b,0x77,0x76,0x9f,0x15,0x5a,0x4a,0x08,0x92, 139 | 0xa5,0x4a,0x0b,0xf6,0x7c,0xef,0x13,0xe1,0xc8,0x57,0x21,0x8e,0xa2,0x96,0x61,0x7d, 140 | 0xe5,0xfb,0xb7,0x0e,0x79,0xea,0x20,0x37,0xe7,0x98,0xce,0x86,0xa5,0xec,0xdd,0xf8, 141 | 0x4c,0x35,0xfd,0x4b,0xce,0x7f,0xc9,0xd2,0xd4,0x86,0x57,0xbb,0x21,0xc2,0x52,0xdd, 142 | 0x98,0xf0,0x78,0xa4,0x25,0x9b,0x36,0x76,0xd5,0xfe,0x14,0xed,0x1d,0x0b,0x8e,0x99, 143 | 0x54,0x40,0xdb,0xc6,0xe5,0x82,0x37,0x5a,0x3f,0x38,0xd6,0x99,0x99,0x35,0xa3,0xc3, 144 | 0xc8,0xb2,0xff,0xab,0x5b,0xa4,0x4a,0x84,0xd5,0xd2,0x5a,0x85,0x62,0xbe,0x1c,0x9e, 145 | 0xff,0xae,0x71,0xdd,0xbb,0x76,0xd3,0xb0,0x84,0xce,0xb3,0x16,0x8e,0xc8,0xd4,0x77, 146 | 0xdf,0xf6,0xa1,0xa7,0x85,0x57,0x1d,0x3f,0x79,0x69,0x7b,0xee,0xee,0xab,0x4f,0x58, 147 | 0x95,0x3b,0x0a,0x19,0x2c,0xff,0xaa,0x69,0x0d,0x74,0x31,0xa9,0xf6,0x51,0x20,0x67, 148 | 0xef,0xea,0x4b,0x02,0xcb,0x7e,0xec,0x13,0x8b,0x0c,0x93,0xdc,0x75,0x66,0xc6,0x10, 149 | 0xc0,0xc4,0x04,0x0b,0x63,0x89,0x93,0xe4,0x40,0x75,0x44,0x00,0xf7,0xd9,0xfd,0xc3, 150 | 0x12,0xca,0x5b,0xcc,0x70,0x9d,0xec,0xb8,0xed,0x60,0xdd,0x79,0xbc,0x2d,0x5e,0x48, 151 | 0x00,0x6c,0x57,0x8f,0xea,0xe9,0x1d,0xea,0x47,0x1f,0x5a,0xda,0xee,0xdb,0xaa,0xc3, 152 | 0xb2,0x9c,0x32,0x89,0xfd,0x3d,0xd8,0xc6,0xc5,0x51,0x97,0x6d,0x70,0x95,0x0f,0x7b, 153 | 0xd3,0xdf,0xbc,0x26,0x5a,0x14,0x98,0xb2,0x92,0xd0,0xf2,0x96,0xeb,0x60,0x02,0x1b, 154 | 0x67,0x99,0x05,0x1b,0x96,0x48,0x1e,0x3f,0x47,0x32,0x88,0x40,0x30,0x12,0x0a,0x80, 155 | 0x8f,0xd1,0x3a,0xc7,0x0f,0xf7,0x0c,0x3e,0x79,0xb6,0xa5,0x22,0xcf,0xa8,0xbb,0xba, 156 | 0xfd,0x97,0x36,0x6d,0x5b,0xb7,0xac,0x7f,0xae,0xaf,0x28,0xf2,0x2d,0x8b,0x57,0xda, 157 | 0xf8,0x3c,0x00,0x62,0x16,0x86,0x8b,0xac,0x97,0xb4,0x28,0x04,0x1e,0xad,0x93,0x16, 158 | 0xff,0xd2,0x60,0xd7,0xba,0xa7,0xf6,0x97,0x8d,0x9f,0x9d,0xdd,0xb9,0xf0,0xb8,0x05, 159 | 0x93,0xf3,0xf5,0x49,0xca,0xd1,0x3b,0xfa,0x14,0xce,0x20,0x1b,0x6c,0xfa,0x3c,0x0b, 160 | 0x5f,0xc0,0xa8,0x13,0xde,0x7b,0x53,0x8f,0x6f,0x32,0x91,0x07,0x41,0x60,0x65,0xf5, 161 | 0x73,0x00,0x81,0x98,0x09,0x92,0xad,0x20,0x53,0x15,0x95,0x60,0x94,0x5e,0xeb,0xdd, 162 | 0x4f,0xd7,0x55,0xd0,0xb1,0x9f,0xf9,0xd8,0x90,0x2f,0xf2,0x16,0xef,0xb6,0x00,0x90, 163 | 0xdc,0xf3,0xcb,0x72,0xea,0x6c,0x3d,0xbf,0xf1,0xf6,0x59,0x17,0x77,0xac,0x4c,0xcd, 164 | 0xb0,0x34,0x75,0xa3,0xc2,0xc3,0x25,0x9d,0x7b,0xb6,0xfa,0xfd,0xa2,0x21,0xfe,0xde, 165 | 0x63,0xd5,0xee,0x1f,0x3c,0x9e,0x72,0xbb,0x7b,0x27,0x80,0xdc,0x89,0x1f,0x9e,0x94, 166 | 0xe3,0xc1,0xbd,0x41,0xc3,0x78,0xb3,0x21,0x01,0xab,0xd5,0x61,0x9f,0x69,0xd2,0xb4, 167 | 0xa9,0x2c,0xb2,0x2d,0x17,0x16,0x02,0x82,0xd4,0x58,0xf9,0xb1,0x25,0x51,0x0e,0x19, 168 | 0x30,0x20,0xa5,0x90,0x9e,0x14,0x00,0x31,0x98,0x01,0x10,0x58,0x84,0x99,0xf6,0x90, 169 | 0x81,0x43,0x7b,0x07,0xbc,0xfd,0x33,0xa7,0xaf,0x1f,0x3c,0xbb,0x27,0x06,0x80,0x1d, 170 | 0xd7,0xfc,0xb4,0x3c,0x98,0xe5,0xe0,0xf7,0xde,0xf6,0x24,0x00,0x64,0xe6,0x75,0xce, 171 | 0xcb,0x8d,0x25,0xe9,0xc6,0x2f,0xef,0xc4,0xc3,0x43,0x52,0x36,0xef,0xf8,0xe2,0xe3, 172 | 0x43,0x73,0x94,0xd6,0x99,0x49,0x31,0x58,0xb4,0x85,0x0d,0x7d,0x2c,0x29,0x00,0xd1, 173 | 0x84,0xaf,0xdc,0x35,0x4b,0xc1,0xb6,0xaf,0x5c,0x2c,0x56,0x2d,0x00,0x09,0x9a,0xf7, 174 | 0x91,0xb7,0xb2,0x35,0x99,0xac,0xaf,0x3c,0xc9,0xf0,0x3c,0x36,0x0c,0x93,0xea,0x93, 175 | 0x90,0x54,0xaa,0x3d,0x11,0x60,0xad,0x1d,0x8f,0xdc,0x27,0x5e,0xb3,0xa1,0xff,0xcf, 176 | 0xa7,0x77,0x01,0xc0,0xa6,0x7f,0xa8,0x37,0xc3,0x78,0xe6,0xdc,0xcd,0x00,0xa0,0x0f, 177 | 0xec,0xde,0x3d,0xa6,0xc4,0x5d,0x5f,0xdd,0xf9,0x5c,0x3c,0xe8,0xad,0xed,0xfc,0x46, 178 | 0x69,0xb8,0xae,0x26,0xc5,0x60,0x7b,0xb0,0xdc,0xb0,0x58,0xcb,0x80,0x89,0x79,0xc6, 179 | 0x28,0x58,0x14,0xb2,0xf9,0xb6,0x20,0xfd,0x02,0xb3,0x91,0x99,0x37,0xfe,0xd9,0x1b, 180 | 0x17,0x97,0x38,0xd1,0x22,0x50,0x42,0xc4,0x56,0xda,0x34,0x9c,0xa5,0x81,0xc4,0x0b, 181 | 0xc3,0x3c,0x1b,0x22,0x1e,0x97,0x82,0xd1,0x73,0x49,0xbf,0x56,0xd6,0x03,0xc0,0xee, 182 | 0x6f,0x0e,0x77,0x8d,0xb0,0xe7,0x4d,0xbd,0x00,0xd4,0xec,0x79,0xf3,0xc6,0xfe,0xb1, 183 | 0x95,0x7f,0x49,0x76,0x0e,0x9c,0xf4,0xfe,0xa2,0x7b,0xf8,0xf5,0x77,0x07,0x93,0x62, 184 | 0xf0,0xac,0xc6,0x9f,0xd0,0x11,0x04,0xc8,0x26,0x7c,0x6a,0xb6,0x49,0x36,0x98,0xcb, 185 | 0x6c,0xa2,0x96,0x00,0x80,0x85,0x90,0x51,0xc0,0xd9,0x37,0x9d,0xb3,0xeb,0xde,0xae, 186 | 0x83,0x55,0xeb,0x31,0xef,0xad,0xe4,0x14,0x13,0x18,0x24,0x41,0xaa,0xba,0xff,0xa6, 187 | 0xfd,0xf1,0xdc,0xe5,0x27,0x1f,0x33,0xba,0x07,0xe2,0x2d,0x00,0x4a,0x3d,0x49,0x7a, 188 | 0xb2,0xed,0xba,0x8f,0xa7,0x8d,0xf1,0x2e,0x00,0xfa,0xfa,0x9a,0xba,0x17,0xbe,0x73, 189 | 0x69,0xbc,0xfe,0xa6,0x94,0x84,0xcf,0x5e,0xb5,0x1a,0x00,0x27,0x3c,0xb2,0x3e,0xd5, 190 | 0x31,0x80,0xdd,0x57,0x7b,0x27,0xf6,0xdd,0x77,0xee,0xa0,0x53,0xfd,0xdf,0xa9,0x7e, 191 | 0xde,0xf0,0x9a,0xb9,0x38,0xb8,0xf9,0xe1,0x0d,0x0c,0x14,0x26,0x51,0x57,0x9c,0xe8, 192 | 0xbe,0x96,0x46,0xd1,0x2a,0x66,0x01,0x1b,0x29,0x6f,0xa6,0x28,0x98,0x72,0x00,0x98, 193 | 0xd8,0x0a,0x82,0xe5,0x20,0x51,0x1e,0x85,0x8b,0x8f,0xdb,0xfd,0xc0,0xc6,0x5e,0x50, 194 | 0xf2,0xdc,0xf3,0x4b,0x14,0x00,0x30,0xac,0xd0,0x52,0xff,0x74,0x67,0x22,0x9e,0xdf, 195 | 0xf6,0xeb,0x57,0xbe,0x66,0xde,0x68,0xd2,0x96,0xad,0x07,0xee,0xde,0xbc,0xe1,0x47, 196 | 0x69,0x63,0xfc,0xfd,0x54,0xc1,0xcf,0x01,0xc0,0xda,0x1d,0x69,0x8e,0xcf,0x7f,0x41, 197 | 0x01,0x58,0xf5,0xb9,0x87,0x00,0x00,0x3f,0xf8,0xc8,0xb9,0x00,0x35,0xea,0xe4,0x2c, 198 | 0xde,0x0c,0x40,0xff,0xf2,0xaa,0xb4,0xf7,0x7c,0xff,0x20,0xfb,0xff,0x50,0x05,0x00, 199 | 0xf5,0xe3,0xff,0x91,0x9e,0xee,0xbc,0xe5,0xfa,0x47,0x27,0xf5,0xbb,0x7d,0xbf,0x71, 200 | 0x84,0x94,0x08,0x10,0x61,0x33,0x9a,0xce,0xe6,0x10,0xb8,0x5a,0x2c,0xef,0x2d,0x33, 201 | 0x48,0x12,0x91,0x90,0xe4,0x0b,0x29,0x84,0xf4,0x16,0x5c,0x7a,0x59,0x8b,0x95,0x59, 202 | 0xfc,0x72,0x17,0x1b,0x30,0x0b,0x03,0x70,0xb2,0xeb,0xf1,0x8a,0x24,0x91,0xd1,0xbf, 203 | 0xbd,0xf6,0x51,0xab,0x01,0x1e,0xa5,0xa9,0x36,0xe2,0xa5,0x9f,0x4a,0x99,0xf1,0xfb, 204 | 0xde,0xb4,0x25,0x06,0xc0,0xbf,0x4a,0x2f,0xfe,0xef,0xbf,0x51,0x00,0xb0,0xf2,0x43, 205 | 0xa7,0xa6,0xe7,0x5f,0x1b,0xfb,0x25,0xbf,0xe8,0x8e,0xf4,0x3d,0xdf,0x5e,0x19,0x48, 206 | 0x7b,0x0e,0x00,0x70,0x46,0xdf,0x46,0x0d,0x00,0x58,0xf0,0x3f,0x1f,0xf9,0xd5,0xa4, 207 | 0xd8,0x96,0x94,0x0f,0x34,0x32,0xb4,0x6c,0x18,0x48,0x2a,0x76,0xa6,0x28,0x98,0x32, 208 | 0xf9,0xec,0x9c,0x11,0xb6,0xc8,0x82,0xe6,0x9f,0x3f,0x5b,0x9b,0xd6,0xa7,0x6f,0x5b, 209 | 0xaf,0x09,0xd2,0x48,0x01,0x29,0xe2,0xb6,0xac,0x94,0x42,0x10,0xf1,0xbf,0xff,0xb7, 210 | 0x8c,0x41,0xa3,0xec,0xaa,0xb4,0x1f,0x98,0xbb,0x22,0x55,0xf5,0xb3,0x69,0x8c,0x12, 211 | 0xc0,0xfa,0x34,0x7c,0xb1,0xf4,0x0b,0x69,0x9e,0x0e,0xf5,0xde,0xd4,0x6e,0xde,0xba, 212 | 0x7d,0xec,0xe7,0x3b,0xf1,0x94,0xf4,0x81,0x0e,0x0c,0x76,0x83,0xd3,0x48,0x58,0xf4, 213 | 0x9b,0xef,0xfd,0xe7,0x43,0x3b,0x62,0x00,0x38,0x6f,0x52,0x31,0x09,0x2f,0x3b,0xbb, 214 | 0x91,0xa1,0x25,0x49,0x80,0x17,0x36,0xa1,0xf6,0x9b,0xd3,0x44,0x27,0x15,0xaf,0xec, 215 | 0x8f,0x98,0x1d,0x29,0x0c,0x85,0x2f,0xdf,0xdd,0x27,0x38,0xb7,0x63,0xcd,0xa9,0xe7, 216 | 0xb4,0x31,0x31,0x27,0x96,0x77,0x55,0xb2,0x04,0x4b,0x0c,0xde,0x7b,0xeb,0xac,0x65, 217 | 0xb0,0xc2,0x36,0xaa,0xd9,0x4d,0x7d,0x00,0xe6,0x3d,0x06,0x00,0x48,0xd5,0x52,0x06, 218 | 0xf0,0x44,0x7a,0xf1,0xb3,0x35,0xb2,0x51,0x9b,0x79,0xe5,0xaf,0x01,0xc0,0xde,0xfd, 219 | 0xc1,0x31,0x9f,0x6f,0x53,0x47,0xad,0x59,0x18,0x54,0x4c,0x9a,0x6e,0x85,0xd9,0xb9, 220 | 0x13,0xd4,0x79,0xec,0x4b,0x5a,0x27,0xd7,0x79,0xb0,0x25,0xbf,0xd1,0x3e,0x1c,0xe9, 221 | 0xc2,0x24,0x4f,0xcd,0x14,0x06,0x7b,0x2d,0xe1,0xec,0x06,0x3e,0x8a,0x00,0x82,0x97, 222 | 0xe6,0xa4,0x41,0xe8,0x3d,0xf2,0x8d,0x9f,0x3c,0x9f,0x30,0x49,0x0f,0xd5,0x16,0x25, 223 | 0x49,0x4a,0x49,0xe8,0xe8,0xfd,0x79,0x0f,0x1a,0xb6,0x62,0xc5,0x87,0xee,0xad,0x39, 224 | 0xdd,0x00,0xe0,0x03,0x40,0x62,0x01,0x6c,0x4b,0xf5,0x7a,0x69,0x7f,0xbe,0x2c,0x4e, 225 | 0x4b,0xff,0xf8,0xed,0x58,0x4f,0x57,0x7c,0xe8,0xde,0x9a,0xa4,0xb9,0x03,0x69,0xe9, 226 | 0x5f,0x3b,0xfe,0x69,0x2b,0x03,0xe0,0xbd,0xbf,0xff,0xf1,0xed,0x5d,0x93,0xaa,0x5e, 227 | 0xd5,0xda,0x70,0xd6,0x2f,0x11,0x40,0x61,0x33,0xd8,0xd5,0x14,0x06,0x73,0x59,0x95, 228 | 0x90,0x1f,0x39,0xaf,0x81,0x85,0xd4,0x4b,0x83,0x28,0x30,0xa8,0x92,0xf7,0xd4,0xa6, 229 | 0x25,0x8b,0x97,0xb5,0x62,0xd3,0x23,0x5d,0xed,0x20,0x28,0xcb,0xa8,0xcc,0xdf,0xf1, 230 | 0xbb,0x8b,0x54,0x83,0xf9,0x00,0x5d,0x3f,0xa8,0x39,0xd0,0xb5,0x96,0x18,0x00,0x22, 231 | 0x00,0x3a,0xb5,0x9c,0x8b,0xe7,0x0e,0xf2,0xf0,0xf8,0x74,0x34,0xe5,0xa1,0x51,0x9e, 232 | 0xac,0x74,0x3d,0x60,0xed,0x80,0xa4,0xc1,0x48,0xd6,0xd9,0xe9,0x61,0xe3,0xc6,0xc2, 233 | 0xd2,0x13,0x4e,0x38,0x5e,0x02,0x3b,0x9e,0x7f,0xed,0x49,0x93,0x09,0xe0,0xc5,0xba, 234 | 0xd1,0x67,0xc0,0x19,0xc4,0x91,0x68,0xc6,0xa7,0x93,0x9a,0xa2,0x60,0xca,0xa1,0x71, 235 | 0x1f,0x92,0x89,0x21,0x24,0xc1,0x0f,0x62,0x43,0xde,0xb6,0xed,0xbf,0x63,0x19,0x97, 236 | 0x17,0x56,0xc0,0x20,0x61,0x91,0xe8,0xdc,0x43,0x67,0xcd,0x1d,0x7d,0x67,0xc3,0x07, 237 | 0x53,0xe3,0x9b,0x5f,0x9c,0x56,0x19,0x50,0x0b,0x29,0x2c,0x1f,0x12,0x9b,0x08,0xda, 238 | 0x0f,0xf6,0x7b,0x60,0x0d,0xa1,0x87,0x4a,0xca,0x2d,0x1e,0x48,0x5f,0x72,0x66,0xed, 239 | 0x9d,0xe8,0x7b,0xe4,0x11,0x04,0xcb,0xce,0x3e,0x55,0xd9,0xb5,0xc1,0xe2,0x49,0x04, 240 | 0xf0,0x1a,0x7b,0xca,0x04,0x50,0x73,0x26,0xa3,0x35,0x43,0xc1,0x1c,0x19,0xd1,0x57, 241 | 0x68,0xd0,0x1b,0x24,0x86,0xd0,0xe4,0xb3,0xb5,0x8a,0x98,0x28,0xd4,0x95,0x24,0xac, 242 | 0x4a,0xeb,0x31,0x5b,0x02,0x71,0x7b,0x57,0xbe,0xb2,0x7d,0x0e,0xf4,0x08,0xf7,0x35, 243 | 0xd9,0x09,0x70,0xcf,0x23,0xf7,0xa5,0x67,0xe7,0x79,0x00,0x10,0x00,0x28,0x0d,0x61, 244 | 0x74,0xbf,0xab,0x94,0x3f,0x08,0x00,0xa3,0xb5,0xaf,0xf5,0x92,0x5e,0x37,0xa4,0xa4, 245 | 0xbf,0x79,0xd3,0xa0,0xf3,0x1b,0x3d,0xfe,0x78,0xeb,0xdb,0x5f,0x89,0xdf,0x2c,0x9a, 246 | 0xa8,0x9f,0x65,0x6d,0x22,0x94,0x6c,0xd4,0x05,0xa0,0x66,0xec,0xcf,0xd1,0x2c,0x05, 247 | 0x53,0x06,0x08,0x1b,0xf3,0x97,0xd5,0x7e,0x62,0x0e,0xac,0xf5,0x18,0x96,0x95,0x52, 248 | 0x1c,0x10,0x2b,0x6b,0x05,0x93,0x65,0x5b,0x30,0xb9,0x52,0xa3,0x2f,0x70,0xec,0xfb, 249 | 0xc2,0xd0,0xb3,0x4f,0xa6,0x86,0x98,0x18,0xb5,0x18,0x74,0x7e,0x50,0x33,0xfd,0x83, 250 | 0x48,0x51,0xa5,0x31,0x93,0x1a,0x49,0x4a,0xf1,0x86,0xaf,0xfe,0x69,0x5d,0xc0,0xec, 251 | 0x86,0xad,0xab,0xaa,0xdb,0x96,0x4d,0xd4,0x04,0x8f,0xb2,0xdb,0xa8,0x04,0x20,0x9b, 252 | 0x33,0x49,0xa4,0x19,0x2f,0x91,0x29,0x26,0x07,0x7b,0x62,0xd6,0x96,0xd9,0x18,0x63, 253 | 0xd9,0xb2,0xb5,0xcc,0xd6,0x46,0xd6,0xb2,0xdd,0x4d,0xf0,0x84,0x94,0x42,0x08,0xc5, 254 | 0xca,0x58,0x13,0x93,0x80,0x0f,0xed,0x4b,0x78,0x51,0xc6,0xea,0xb9,0x44,0x87,0xa8, 255 | 0x88,0xb7,0xbd,0x31,0x3d,0x66,0x06,0xde,0xd6,0x64,0xd0,0x58,0x0f,0x38,0xc6,0xe3, 256 | 0xe9,0xc4,0xf6,0x4b,0xaa,0xb9,0xe2,0x3f,0xab,0x1f,0x1f,0xfe,0xef,0x3b,0xb1,0x6b, 257 | 0xc2,0x4e,0xb4,0xae,0xe8,0x46,0x15,0x62,0x00,0x8e,0xf5,0x8c,0x69,0xa2,0x65,0x0e, 258 | 0xb3,0x60,0x21,0x8d,0xb4,0xba,0x58,0x8e,0x50,0x08,0x43,0x45,0xcc,0xe4,0x31,0x64, 259 | 0x71,0x7b,0x25,0xd4,0x20,0x30,0x83,0x15,0x79,0x10,0xd6,0xa8,0xc5,0xa7,0x14,0xf6, 260 | 0x3d,0xb9,0xdd,0xca,0x6c,0x35,0x7b,0x5c,0x27,0x78,0xec,0x77,0xf0,0xf4,0x9a,0xc3, 261 | 0x85,0xce,0xed,0xa8,0x05,0x8d,0x8a,0xfd,0xd7,0xba,0x13,0x20,0x0d,0x4e,0x8d,0x27, 262 | 0xcc,0x38,0x20,0xa9,0x86,0x4b,0xde,0xfc,0x83,0xef,0xfd,0x6e,0xc8,0x10,0xd2,0xed, 263 | 0xe7,0x74,0x63,0x6a,0x18,0x2c,0x31,0x4a,0x60,0xed,0x28,0x55,0x70,0x92,0xd8,0x4a, 264 | 0x10,0xf8,0x24,0xba,0xb7,0xed,0xee,0xad,0x1a,0x11,0x05,0x6d,0xf3,0x8e,0xed,0x0c, 265 | 0xac,0x62,0x3e,0xb0,0x65,0xa7,0x80,0x02,0x2c,0x33,0x58,0x26,0x5a,0x25,0xe4,0x85, 266 | 0xaf,0x6f,0xa7,0x39,0x2b,0x8a,0xdb,0xb6,0x75,0x9b,0x25,0x27,0xb5,0x83,0xec,0x18, 267 | 0x1a,0x96,0x1f,0xfd,0xfb,0x7e,0x5f,0x65,0xde,0x80,0x82,0x07,0xa2,0x1a,0xcf,0x0c, 268 | 0x58,0xdf,0xf6,0x43,0xbf,0x85,0x83,0x92,0xfa,0x91,0xb9,0xe2,0x8a,0xae,0x5f,0xaf, 269 | 0xfd,0xf5,0x63,0x35,0x63,0x5c,0x5d,0x3f,0x7f,0xa2,0x04,0x26,0xdb,0xc8,0xd0,0x32, 270 | 0x08,0x9c,0x90,0x37,0x63,0x14,0xac,0x3c,0x9b,0xb7,0xa0,0x78,0xeb,0xce,0xe7,0x63, 271 | 0x02,0xb1,0xcf,0xdd,0x3d,0x5b,0x82,0xac,0x37,0x4b,0x26,0x07,0x76,0x45,0x39,0xc3, 272 | 0x60,0xc9,0xb0,0x20,0xf8,0xa0,0x58,0xcd,0x6a,0x23,0x2b,0xd0,0x76,0xfa,0x69,0x94, 273 | 0x48,0x41,0x5a,0x8d,0x1a,0xcf,0x0b,0x5f,0xfe,0xba,0x0f,0x2f,0x1a,0x38,0x5b,0x00, 274 | 0x64,0xb3,0x65,0xa0,0x36,0xac,0x04,0xc0,0x3e,0x01,0xf4,0xa4,0x76,0xf9,0x84,0xb1, 275 | 0x9f,0xb0,0x5e,0xd2,0x10,0xb4,0x5f,0x7a,0x29,0x76,0xde,0xf8,0x77,0xe9,0x5b,0xf2, 276 | 0xf4,0x44,0xed,0x99,0x68,0x6c,0x68,0xa9,0x89,0x04,0x6e,0x86,0x82,0xb9,0x18,0x94, 277 | 0x2b,0x41,0x7b,0xbc,0xed,0xd1,0xc8,0x66,0xc8,0x18,0x10,0xb3,0x89,0xa3,0xa2,0xda, 278 | 0x65,0x2d,0xb3,0x64,0xcf,0xc0,0xc2,0x42,0x32,0x8c,0xb4,0x89,0x90,0x05,0xd6,0x90, 279 | 0x6c,0x59,0x18,0x49,0x16,0x92,0xcd,0x88,0x4a,0x7a,0xc9,0xed,0x00,0xfc,0xb6,0x42, 280 | 0xd7,0x7d,0x8f,0x3e,0x0a,0xe0,0xd5,0xb3,0x01,0x60,0xee,0xac,0x83,0x74,0xc2,0x7a, 281 | 0x00,0xe8,0x7a,0xe8,0x4c,0x00,0xc0,0x23,0x7d,0x40,0x6d,0xb4,0xf8,0xd5,0xc0,0xc1, 282 | 0xd4,0x55,0x4e,0x33,0xf7,0xe3,0xf8,0x3b,0x53,0x49,0x84,0x61,0x19,0x4a,0xbf,0x3a, 283 | 0xab,0xbf,0x53,0xbc,0xe0,0x73,0x17,0x9e,0x19,0x03,0x40,0x6f,0x8d,0xe2,0x0d,0x25, 284 | 0x35,0x22,0xb0,0x91,0x8d,0xf6,0xc1,0x62,0x10,0xd8,0xb0,0x37,0x63,0x14,0x4c,0x05, 285 | 0xf8,0xad,0xe0,0x5d,0x4f,0xc2,0x03,0xac,0x15,0x12,0xcc,0x10,0xd0,0x5a,0x12,0x09, 286 | 0x69,0x0c,0x24,0x08,0xd2,0x5a,0xe2,0x8c,0xd4,0xbe,0x96,0xbe,0x04,0x13,0x81,0x59, 287 | 0x80,0xac,0x04,0x8d,0x7c,0x44,0x7f,0x69,0xad,0x17,0xb4,0xab,0xdf,0x57,0x06,0x80, 288 | 0x97,0xae,0xc5,0x92,0x94,0xbc,0xab,0xcf,0x04,0x80,0x4d,0x0f,0x03,0x78,0x30,0xbd, 289 | 0xf6,0xaa,0xe1,0x99,0xfb,0x23,0x21,0x4b,0x07,0xff,0xae,0xcf,0xf0,0xfc,0x4f,0x17, 290 | 0x2d,0x5f,0x54,0x73,0xe0,0x4f,0x79,0xd9,0x43,0x00,0x90,0xb4,0x34,0xca,0x38,0x96, 291 | 0x05,0x6e,0xe8,0xc3,0x12,0xd0,0xe8,0x47,0x1d,0xbd,0x0a,0xd6,0x71,0x50,0x2a,0xb5, 292 | 0x98,0x67,0xfa,0x94,0x64,0xc5,0x56,0xb3,0xf6,0xa4,0x35,0x86,0x7c,0xeb,0x73,0x62, 293 | 0x84,0xd0,0x02,0x02,0x20,0x01,0x8e,0xa4,0x26,0xc9,0xc6,0x0a,0x02,0x98,0xad,0x15, 294 | 0x52,0x1d,0xda,0xd1,0xdf,0xfd,0x74,0xa5,0x0d,0x98,0x77,0x01,0x5e,0xf2,0x58,0xd7, 295 | 0xe9,0xb7,0x32,0x00,0x7c,0xeb,0x4f,0x4e,0x8a,0xf7,0x3f,0xf1,0x0c,0x80,0x27,0xd3, 296 | 0xd9,0xb1,0x1d,0xe7,0xa7,0x39,0x01,0x54,0x4e,0xba,0x60,0x74,0x49,0x00,0x90,0x7f, 297 | 0x1f,0x00,0x6c,0x7d,0x62,0xf9,0xf6,0xed,0xb9,0x63,0xe7,0x77,0x64,0x7d,0xdd,0xb5, 298 | 0x25,0x75,0x78,0xb3,0x0b,0x00,0x60,0xd3,0xfd,0x3d,0x8f,0x00,0x2d,0x2b,0x0e,0xdd, 299 | 0x72,0x59,0xa1,0x47,0xf9,0x14,0x38,0x9b,0xa6,0x4d,0x86,0x6b,0x42,0x39,0x4a,0x50, 300 | 0x21,0x2f,0x9e,0xdd,0x4b,0x24,0xd8,0x80,0x3c,0x9b,0x31,0x86,0x94,0x62,0x56,0x96, 301 | 0xfc,0x84,0x24,0x13,0x83,0x41,0x04,0xf6,0x49,0x05,0x26,0xd1,0x22,0xad,0x1d,0x05, 302 | 0x66,0x26,0x82,0x1d,0x5b,0xc3,0x9b,0x7e,0x7c,0x03,0x80,0x73,0x2f,0x80,0x7c,0xfd, 303 | 0x4f,0xe7,0xae,0x58,0x0f,0x00,0xf1,0x85,0x9f,0x4d,0x5b,0xd3,0x83,0xd7,0xa7,0x79, 304 | 0xae,0xcc,0xa4,0x39,0x01,0xdc,0x70,0xee,0x05,0xa3,0x4b,0x02,0x80,0xcd,0xef,0x03, 305 | 0x80,0x5d,0x5f,0x7f,0xc9,0x85,0x27,0x97,0x36,0xa5,0xef,0x47,0x79,0x33,0x00,0x60, 306 | 0xd6,0xb1,0x00,0x70,0xd7,0x27,0x00,0x60,0xd9,0xa1,0x15,0x4c,0x72,0xd4,0xce,0x59, 307 | 0xf3,0x08,0xdc,0x14,0x06,0x47,0xde,0x41,0xee,0xe8,0x42,0x86,0x41,0x02,0x16,0xd2, 308 | 0x40,0x82,0x19,0xc4,0x88,0x72,0x56,0x56,0x95,0x2c,0x84,0x51,0x29,0x31,0xda,0x58, 309 | 0x29,0xd8,0x86,0xfb,0x8a,0x59,0x22,0x0b,0x62,0x80,0x00,0xa6,0x71,0xbb,0x36,0xb3, 310 | 0x5f,0xfd,0x9b,0x0b,0x36,0x30,0x00,0xec,0xf8,0xf2,0xbb,0x57,0x08,0x24,0x0f,0xff, 311 | 0x7b,0xda,0x63,0x2a,0x7c,0x7c,0x12,0x8f,0xbd,0x65,0xcb,0xac,0x57,0x9c,0xb4,0xd8, 312 | 0x03,0xf0,0xe4,0x2d,0x69,0x88,0xec,0xf5,0x13,0x9a,0xb3,0x63,0x8d,0xd4,0xa3,0xc4, 313 | 0x39,0x58,0xb3,0x47,0x33,0x8a,0xc1,0x9d,0x44,0x2c,0x24,0x1b,0x80,0x05,0x20,0x2c, 314 | 0x60,0x09,0x4c,0x49,0xa0,0xac,0x6e,0x59,0x74,0x8a,0x4f,0xd0,0xc5,0xbd,0xbb,0x9f, 315 | 0x2f,0x0b,0x4f,0xf8,0x89,0xdd,0x72,0xb2,0x67,0x3d,0x6d,0x88,0x26,0x3a,0xcf,0xed, 316 | 0x64,0x16,0xe7,0xdf,0x9d,0x46,0xa8,0xbe,0x91,0x9d,0x6d,0x0e,0xf4,0x5b,0xc9,0x6f, 317 | 0xcc,0x9f,0xd4,0x83,0x1f,0xbc,0xfd,0x76,0xd9,0x52,0xd0,0xdd,0xb5,0x00,0x59,0xf6, 318 | 0x83,0x13,0xec,0x03,0x63,0x34,0x4f,0xb9,0x49,0x3d,0xa4,0x26,0x29,0x98,0x63,0x61, 319 | 0xba,0x6d,0x67,0xa0,0x40,0x04,0x06,0x0b,0x18,0x01,0x2b,0x2c,0x20,0x18,0xd6,0x33, 320 | 0x0b,0x5e,0x1a,0x82,0xd9,0xeb,0xe8,0x58,0xbc,0x6f,0x6b,0xcf,0x2e,0xca,0x43,0x3f, 321 | 0x91,0x5b,0x02,0x2d,0x52,0xfa,0xa2,0xf6,0xdf,0xf8,0xb0,0x7c,0x76,0xf6,0xa9,0xda, 322 | 0x7c,0xe7,0xf2,0xe0,0xdc,0xd9,0x0f,0xfc,0xd1,0xa4,0xeb,0xc5,0x74,0x0d,0x46,0xb1, 323 | 0x3f,0x31,0xa1,0x21,0x61,0xcb,0xc2,0x34,0x08,0xc2,0xb1,0x91,0xc4,0x09,0x35,0xef, 324 | 0x13,0x6c,0x4d,0xf8,0x32,0x53,0x00,0x35,0xcf,0x52,0x4b,0xb6,0xcf,0x63,0x4b,0x44, 325 | 0xcc,0x12,0x96,0x58,0x32,0x10,0x24,0xda,0x2f,0x2c,0xc9,0x81,0x60,0x2c,0x51,0x66, 326 | 0xd1,0x82,0xfd,0xdb,0x9e,0xaa,0x28,0xbf,0xb4,0x45,0x2c,0x52,0x56,0x10,0x78,0x62, 327 | 0xea,0x05,0x30,0xf7,0x3d,0x2b,0x3f,0xf8,0xc8,0xb0,0xb4,0x8f,0x7f,0x7d,0x4a,0xea, 328 | 0xe5,0xe5,0xff,0x67,0xa2,0x31,0x60,0x35,0x8a,0xf5,0x6d,0x5a,0x1f,0xb8,0x49,0x0c, 329 | 0x2e,0x79,0x71,0x11,0x73,0xda,0xda,0x7b,0x08,0x12,0x00,0x98,0x58,0x08,0x86,0x01, 330 | 0xcb,0xc4,0x47,0xa6,0xc3,0x40,0x92,0x10,0x80,0x66,0x74,0x2a,0xb9,0x2d,0xa2,0x70, 331 | 0x47,0x4f,0xf7,0xf1,0x6d,0xa4,0x15,0x5b,0x88,0x81,0xd5,0x71,0xe7,0x9e,0x0b,0xe0, 332 | 0xdf,0xea,0xd6,0x23,0xcc,0xbb,0x12,0x40,0xf2,0xe3,0xba,0x7a,0x7d,0xd9,0x03,0xff, 333 | 0xe7,0x6b,0x43,0x67,0xce,0x76,0x7e,0xf1,0xca,0xfe,0xcc,0x43,0x73,0x9e,0x3b,0xe7, 334 | 0x69,0x00,0x75,0x8d,0xe8,0xbc,0x57,0xff,0x78,0x30,0x69,0xe1,0x99,0xc3,0x86,0x90, 335 | 0xcf,0xff,0x61,0xdd,0xec,0xb9,0xf9,0x57,0x1e,0xba,0x0f,0xdc,0xc8,0x85,0x66,0x10, 336 | 0xc7,0x52,0x36,0x6f,0xcd,0x7b,0x13,0xbe,0x8e,0x98,0x0f,0xf2,0xf3,0xe6,0xc9,0xdc, 337 | 0xbc,0x56,0x25,0x40,0x52,0x10,0x09,0x29,0x20,0x84,0x90,0xc2,0x4a,0x5f,0x16,0x24, 338 | 0x54,0xaa,0x44,0x25,0x65,0x32,0xeb,0xe4,0x85,0x3e,0xb8,0x85,0xff,0x70,0xc7,0xdd, 339 | 0x4f,0x52,0x92,0x5a,0xe1,0x09,0x56,0x86,0xf7,0xb7,0x5b,0x3f,0x79,0x5c,0xff,0xc9, 340 | 0xca,0xbf,0xde,0x7a,0xe5,0xa4,0x9e,0x7a,0xe9,0x83,0x9b,0xbe,0x74,0xee,0xa0,0xfa, 341 | 0x5f,0xf1,0xfd,0xbb,0xe6,0x4e,0xac,0x5e,0x3d,0xd1,0x70,0xf7,0x24,0x22,0x50,0xd0, 342 | 0xc4,0x6f,0x64,0x36,0x61,0xf9,0xa8,0x2d,0x7b,0xc5,0x98,0x3a,0x65,0x75,0xfb,0x73, 343 | 0x46,0x1b,0x22,0x66,0x02,0x33,0xc0,0xa0,0xc8,0x83,0x7d,0xe9,0x12,0x26,0x02,0x0c, 344 | 0x88,0xd8,0xa2,0x12,0x6c,0x7f,0xd8,0x58,0x45,0x91,0xf4,0xe2,0xe0,0xe4,0xb9,0x9d, 345 | 0x2c,0x8c,0x98,0x4c,0x6d,0x6c,0x7c,0x74,0xdf,0x3e,0x39,0x67,0xce,0xd9,0xc7,0xbe, 346 | 0xa0,0x47,0xaf,0x6e,0x7e,0xf2,0xb9,0xde,0x4a,0xb6,0x6d,0xe9,0x99,0x9d,0x13,0x6c, 347 | 0xb5,0x34,0x1a,0x07,0xb1,0xac,0x20,0xa3,0xbd,0x66,0x6e,0x7d,0xdb,0x94,0xf5,0xc1, 348 | 0x96,0x18,0x2c,0xbb,0x1f,0xd3,0xb1,0xa1,0x9a,0x65,0x85,0x05,0x64,0x39,0x5b,0x92, 349 | 0xaf,0x6f,0x61,0x91,0x2e,0x4a,0x82,0x21,0x54,0xc2,0xf8,0x97,0xbd,0x7e,0xc5,0x23, 350 | 0xed,0x27,0xb1,0x3d,0x69,0xf9,0x2c,0x18,0xe9,0xb6,0xf0,0x38,0xb2,0x9b,0xe8,0xa4, 351 | 0xac,0x7b,0xf7,0x74,0x41,0xa2,0xed,0x94,0x0e,0x4b,0x9e,0x00,0x49,0x21,0x48,0x48, 352 | 0xa5,0x4c,0x5e,0xd3,0xf1,0x12,0x00,0xa5,0x73,0x63,0xad,0x66,0x9b,0xf8,0xad,0x0a, 353 | 0xa1,0x22,0x8f,0x65,0x18,0x3c,0xbb,0xf6,0x59,0x08,0xd2,0x47,0x5d,0xa5,0x72,0xac, 354 | 0x1b,0x2d,0x3b,0x62,0x6b,0x01,0x1d,0xdb,0xa6,0x3e,0xcb,0xe1,0x5f,0x00,0x2e,0x3d, 355 | 0x91,0xc9,0x67,0x09,0x80,0x9f,0x01,0x83,0x84,0x32,0x90,0x92,0xc0,0x36,0x13,0x27, 356 | 0xad,0x27,0xcc,0x1a,0xec,0xed,0x92,0x22,0xa5,0xec,0xae,0x0a,0x08,0x44,0x04,0x12, 357 | 0x22,0x89,0x5b,0xb3,0x75,0x81,0x8e,0xbe,0x3b,0x37,0x6f,0x2d,0xcf,0xc3,0xe6,0xbf, 358 | 0x38,0x66,0x64,0xd7,0x56,0x0f,0xcc,0xde,0xd2,0x44,0x8d,0x72,0xac,0xbf,0x75,0xf3, 359 | 0x82,0x11,0x13,0x3b,0x6a,0x12,0x1b,0xc9,0x49,0x65,0xd4,0x49,0xea,0xba,0xe5,0x81, 360 | 0xae,0xb9,0xfe,0xa1,0x4a,0x22,0x29,0x44,0x83,0x86,0x87,0x88,0x00,0xd1,0xe4,0x16, 361 | 0xa9,0x09,0x0c,0x2e,0x99,0x03,0xbb,0xbb,0x19,0x80,0x6d,0x5d,0x76,0x42,0xab,0x84, 362 | 0xcd,0xf8,0x04,0x92,0x5e,0x90,0xa8,0x79,0x4b,0xe7,0x62,0x90,0xa0,0x36,0xb6,0x49, 363 | 0xd9,0xfa,0x52,0x4a,0xa9,0x94,0x90,0xca,0x13,0x76,0xe7,0xe6,0xfa,0x35,0x7e,0xcf, 364 | 0xbe,0xed,0x6d,0x17,0x9d,0x7a,0x39,0x76,0x7e,0x7b,0xdb,0x88,0x72,0x76,0x7b,0x7f, 365 | 0x37,0xe4,0xaf,0x9e,0xfb,0x86,0x2f,0xe1,0xc7,0x9f,0xbf,0xf4,0xe3,0xef,0x5d,0x7a, 366 | 0xff,0xf0,0xd4,0x9a,0xc4,0x46,0x72,0xd2,0x52,0x86,0x96,0xd5,0xfd,0xd2,0x55,0x9f, 367 | 0x7e,0xe3,0x8f,0x0e,0x55,0x92,0x49,0xac,0x4e,0x1a,0x11,0x98,0x61,0xaa,0xba,0xc9, 368 | 0x7b,0x47,0x1e,0xfe,0x6e,0x92,0xe7,0x61,0x60,0x5c,0xcd,0x9f,0xdf,0x5e,0x3e,0xd8, 369 | 0xd3,0x4b,0x02,0x6c,0x2d,0xf2,0x73,0xe7,0x14,0xc8,0x0e,0x7a,0xc9,0x52,0x81,0x84, 370 | 0xce,0xb2,0x00,0x60,0x89,0x58,0xd8,0x8c,0x7e,0x7e,0xd6,0x89,0xf5,0x53,0x3a,0xae, 371 | 0xfe,0xec,0x07,0x6e,0xfa,0x12,0x80,0xee,0x6f,0x3d,0x97,0x7f,0xe7,0x19,0xdf,0x53, 372 | 0xab,0xf0,0x8f,0x27,0xbe,0xe9,0xba,0x0d,0x6d,0x6f,0xbd,0x17,0x6b,0xf1,0x47,0x37, 373 | 0x3e,0x97,0x7f,0xe7,0x19,0x37,0x62,0x2d,0x2e,0x59,0xb5,0x08,0x4f,0xac,0x8e,0x2f, 374 | 0x3e,0x67,0xfb,0x0f,0x5f,0xf7,0x5f,0xea,0xb3,0x21,0xb0,0xee,0x6f,0x2f,0xf8,0xe9, 375 | 0x33,0xaf,0xf8,0xe0,0xc6,0x5a,0xc2,0xa6,0xd5,0xd1,0x65,0x67,0x0c,0x4a,0x5c,0x5a, 376 | 0xcb,0x7c,0xde,0xed,0x8f,0x0e,0xc8,0x01,0xba,0xae,0xc9,0x7c,0x1a,0x00,0xfa,0x33, 377 | 0xdf,0xf3,0xfc,0x6d,0x17,0x6d,0xd3,0x37,0x1e,0xa2,0x24,0x29,0x1b,0x8f,0x22,0x51, 378 | 0xd3,0x26,0x62,0x35,0xb7,0x1f,0x5c,0xf1,0x2a,0x65,0xd1,0x21,0x00,0x05,0x2b,0xc2, 379 | 0xb0,0x2d,0xe9,0x8d,0x4a,0x65,0x04,0x39,0xaf,0x90,0x97,0x00,0x78,0x30,0x94,0xa1, 380 | 0x45,0x62,0x83,0xac,0xf1,0x00,0x08,0xc1,0x60,0x25,0x28,0xde,0xbe,0xa0,0x7e,0xdd, 381 | 0x76,0xb8,0xa0,0x13,0x55,0x00,0xdb,0xef,0x59,0xf6,0x8b,0xaf,0x6d,0xd9,0xfa,0xf7, 382 | 0x6f,0x7b,0xfe,0xea,0x1b,0xfe,0xf5,0xd3,0x1f,0x78,0x32,0x7e,0x02,0x1b,0xba,0x5e, 383 | 0x71,0xcf,0xb2,0x5f,0x7c,0x6d,0xcb,0x5a,0x6c,0xe8,0x5a,0xf6,0xf9,0xa5,0x38,0x73, 384 | 0x5e,0xdb,0xb5,0xff,0x51,0xf8,0xfc,0xec,0xe3,0x7f,0x9f,0xfc,0x35,0x70,0x07,0x3e, 385 | 0x91,0x39,0xe9,0x6d,0xab,0xb7,0x3f,0xf5,0xf9,0xd9,0xc7,0xff,0x3e,0x79,0xdf,0x19, 386 | 0x2b,0x5b,0xfe,0xdf,0xfd,0xa7,0x0f,0x48,0x7c,0xb2,0x96,0xb9,0xb5,0x73,0xeb,0x80, 387 | 0x1c,0xe0,0x2f,0x97,0xff,0x6a,0xdb,0x2a,0x60,0x73,0x7f,0xe6,0xb9,0xb8,0xe6,0xf1, 388 | 0xb7,0x9c,0xb2,0x76,0xcc,0x92,0x58,0xcb,0xc4,0x04,0x72,0x64,0x08,0x8b,0x24,0x6b, 389 | 0x56,0xcd,0xfe,0x78,0x44,0x13,0xfa,0xc1,0x59,0xaf,0x65,0xde,0x1c,0x01,0x80,0x21, 390 | 0xac,0x31,0x2a,0x9c,0xbb,0xe8,0xe4,0xd3,0x4e,0x5d,0x71,0xfc,0xc2,0x02,0x59,0xb6, 391 | 0x3c,0xb8,0x76,0x81,0x94,0x50,0xa1,0x28,0xe4,0xa4,0x10,0x42,0x40,0x08,0xeb,0x6b, 392 | 0xf2,0xfb,0xf6,0xd7,0x3f,0xe2,0xd7,0xe7,0xfc,0xf0,0xe5,0xcb,0x01,0x9c,0x72,0xf5, 393 | 0x82,0xd3,0xa2,0x07,0x3e,0x14,0xaf,0xf9,0xcf,0xcc,0xdb,0x8b,0x6a,0xf1,0x87,0xbf, 394 | 0xfc,0x1d,0x5c,0x75,0xff,0x79,0x57,0x2f,0x38,0x2d,0x7a,0xe0,0x3b,0xb8,0xea,0xfe, 395 | 0x59,0xc0,0xf7,0xcb,0xb7,0xff,0xae,0xf0,0x6d,0xe0,0xd3,0x0f,0x77,0xfc,0x01,0x40, 396 | 0x0f,0x3a,0x80,0x0e,0x74,0xa7,0x09,0x37,0x94,0xae,0xf8,0xa0,0xbe,0x7e,0x50,0x62, 397 | 0x7f,0xe6,0xf7,0x6f,0xd9,0x35,0x20,0x07,0xf8,0xd3,0x7b,0x2e,0xfc,0x11,0x03,0x03, 398 | 0x99,0x5f,0xfd,0x17,0xdb,0x3e,0xff,0xb2,0x6f,0x8e,0x5d,0x12,0x79,0x22,0xc8,0x36, 399 | 0x98,0x22,0xac,0x24,0xc8,0xf3,0x9b,0xfe,0x71,0x90,0xc3,0x5f,0x20,0x97,0x93,0xea, 400 | 0xee,0xbd,0x49,0xda,0x13,0x12,0xb5,0xbd,0x19,0x85,0x24,0x82,0x10,0x96,0x60,0x86, 401 | 0x4c,0x6c,0x37,0x5a,0x94,0x93,0x42,0xa7,0x90,0x52,0x08,0x29,0x84,0x52,0x20,0x4f, 402 | 0x96,0xeb,0xc5,0x9d,0xf1,0xd9,0x1b,0xd7,0x0a,0x86,0xf9,0xf6,0x85,0xeb,0x35,0xaa, 403 | 0x27,0xbc,0x6e,0xf5,0x7f,0xbe,0xa5,0xe5,0x23,0xef,0xbe,0xee,0x82,0x77,0x02,0x40, 404 | 0x9a,0xd8,0xef,0x10,0x61,0x8e,0x69,0x3f,0x08,0x9c,0x88,0x9c,0x06,0xb0,0x10,0x5b, 405 | 0x80,0x2d,0x38,0x06,0x58,0xa6,0x73,0xba,0x0b,0xab,0xbf,0x7d,0x4e,0xe7,0xa0,0xc4, 406 | 0x2e,0xcc,0xf3,0x67,0x1d,0x04,0x5e,0x85,0xa1,0x72,0xe6,0x63,0x41,0x39,0x01,0xba, 407 | 0xb0,0xfa,0xdb,0xe7,0xb4,0x27,0x00,0xbe,0xb4,0xf7,0xae,0xf6,0xef,0x0f,0xcd,0x61, 408 | 0x2d,0x80,0xfe,0x9b,0x4f,0x44,0x4e,0x5b,0x6d,0xa2,0xa4,0x92,0x0c,0xaf,0x05,0xa3, 409 | 0x01,0x13,0xeb,0xe6,0x6f,0xde,0xdc,0x84,0x58,0x74,0x16,0xde,0x68,0x2b,0x7d,0x25, 410 | 0x40,0x43,0xf7,0xe2,0x50,0x08,0xd8,0xeb,0x38,0x08,0x6b,0x89,0x01,0xd2,0x21,0x1b, 411 | 0xbf,0xae,0x4e,0x2c,0x4e,0xf9,0x63,0x44,0xa1,0x45,0xb4,0x81,0xbe,0x72,0x1d,0x80, 412 | 0x2b,0x56,0xd1,0x8f,0xf1,0xcc,0xe7,0xbe,0x75,0xf9,0x03,0x21,0xd6,0xfd,0xfc,0x11, 413 | 0xfa,0xca,0x75,0x40,0x88,0x75,0xf7,0x02,0x95,0xd3,0xf0,0xdd,0x79,0xdb,0x2f,0x1a, 414 | 0x88,0x84,0x5d,0xfa,0xbf,0xfe,0x6a,0xd6,0xd6,0xff,0xba,0x68,0xb6,0x41,0xcf,0x3e, 415 | 0x63,0x4e,0xc7,0x95,0x97,0xd4,0xb6,0xe4,0x78,0xd5,0xe7,0x00,0x9c,0x86,0xeb,0xe7, 416 | 0x3e,0x7b,0xde,0x01,0x08,0x84,0x58,0x77,0x6f,0x4d,0x38,0x56,0x1f,0x77,0xe7,0x32, 417 | 0x1f,0x38,0x1d,0x57,0x5e,0xf2,0x40,0x77,0xb9,0x15,0x77,0xff,0xec,0x82,0xfd,0xba, 418 | 0x65,0x30,0x87,0xc6,0xfd,0xb7,0x02,0x58,0x86,0xef,0x9e,0xf4,0xec,0x5b,0xd2,0x92, 419 | 0xba,0xbd,0x82,0xd4,0xdd,0xd9,0xd6,0x91,0xbf,0x74,0x1a,0x0c,0x70,0x73,0x18,0x5c, 420 | 0x8a,0xab,0xbb,0x77,0x57,0x1b,0xbe,0xbb,0x04,0x21,0x31,0xf8,0xb3,0xc9,0xc0,0x46, 421 | 0x74,0xfc,0x1c,0x20,0x23,0xe0,0x41,0x04,0xcc,0x4a,0xb1,0x19,0x16,0xf9,0xf4,0xa3, 422 | 0x5e,0x00,0xef,0x09,0x8f,0xfb,0x3d,0x80,0x77,0xb4,0x65,0xdf,0x8a,0x75,0x2b,0xc3, 423 | 0xdb,0x3e,0xd6,0x7a,0xd9,0x2d,0xef,0x7e,0x7b,0x78,0xdc,0x3a,0xd8,0xfc,0x65,0xb7, 424 | 0x5c,0xc8,0xd0,0x1f,0x78,0xd7,0x9f,0xae,0x7a,0xf9,0x35,0xe8,0x37,0x01,0x0b,0x7e, 425 | 0x52,0x7d,0xcb,0x27,0xcf,0xff,0x2e,0xfa,0x90,0x69,0x85,0xbe,0xec,0xf2,0x55,0xf9, 426 | 0x8b,0xf6,0xd4,0xc2,0xc3,0x00,0x3e,0xf0,0xae,0xcf,0xae,0x7a,0xd9,0x5f,0x7a,0x28, 427 | 0xa3,0xf5,0xb2,0x5b,0x2e,0x7c,0x4f,0x78,0xdc,0x3a,0xb0,0x45,0x74,0xde,0xde,0x6b, 428 | 0x01,0xbb,0xea,0xf2,0x55,0xf9,0x8b,0x0f,0x80,0x4d,0xdb,0xcf,0xde,0xfa,0x81,0xf0, 429 | 0x9a,0x81,0x1c,0x46,0x5e,0x7a,0xfb,0x2a,0x09,0x7e,0xc7,0x25,0x57,0xbf,0xe5,0x8c, 430 | 0x6b,0x2c,0xc0,0xe0,0x72,0x4f,0x95,0xe5,0xec,0x3c,0x30,0xf0,0xdc,0x06,0x00,0x33, 431 | 0x6c,0x6c,0xa7,0x63,0xf3,0xf5,0x23,0x71,0xc7,0xf7,0x03,0xcf,0xec,0x57,0xd6,0x12, 432 | 0x5b,0xab,0x28,0xf1,0x4e,0x58,0x32,0xa4,0xe3,0x68,0xf7,0xf8,0xb3,0xcd,0x5e,0xd5, 433 | 0xbe,0x2f,0x5b,0xd8,0x16,0xcd,0x16,0xed,0xfe,0xde,0xf3,0x4e,0x5f,0xdd,0x5d,0x09, 434 | 0xb7,0xb4,0xe5,0x69,0xee,0x3e,0x83,0xa2,0x3a,0x6e,0x0f,0x20,0xda,0xfd,0xbd,0x06, 435 | 0xc8,0x97,0x77,0x2d,0x6e,0xed,0x2b,0x82,0x5a,0x43,0xbd,0xcf,0xd7,0xd6,0xab,0xe6, 436 | 0xda,0x51,0xed,0xca,0xb4,0x23,0x3e,0x10,0xb4,0x6c,0xab,0x74,0x0a,0x7f,0x36,0xfa, 437 | 0x8a,0x10,0x6d,0x01,0x80,0x7d,0xcf,0x1f,0x3b,0xdb,0xec,0x55,0x9d,0x7d,0x45,0x50, 438 | 0xab,0x2e,0x22,0x48,0x08,0xa6,0x47,0xcc,0xcf,0xed,0x01,0x04,0x55,0xe6,0x76,0xf9, 439 | 0xda,0xfa,0xb3,0x77,0xee,0x5c,0xd2,0xde,0x57,0x84,0x68,0x8b,0xab,0x9d,0x88,0x0e, 440 | 0x66,0x5b,0x08,0xd8,0x6b,0xd0,0xe5,0x2d,0x19,0x52,0x6e,0xb8,0x2f,0x3b,0xb4,0x5c, 441 | 0x7f,0xf6,0x34,0x56,0x66,0x13,0x76,0xba,0x8b,0x62,0x51,0xea,0x52,0xe3,0xea,0xdf, 442 | 0x6b,0x4b,0x65,0x92,0x61,0x46,0xf7,0x19,0xe5,0x59,0x65,0x3d,0xc4,0xe1,0xbc,0xa1, 443 | 0xdf,0xee,0xe6,0x12,0xa9,0x72,0xe2,0x05,0x65,0x2f,0xc8,0xcd,0x0d,0x2b,0xba,0x6f, 444 | 0x7e,0xf4,0x2f,0x0b,0x7a,0xbc,0x20,0x98,0x97,0x57,0x9e,0xaa,0xaa,0x8e,0x76,0xf2, 445 | 0x0a,0x61,0x45,0x67,0x65,0x55,0xb5,0x04,0x59,0xf2,0xa8,0xc7,0x6f,0x8d,0x2b,0x39, 446 | 0x2e,0xdb,0x16,0x9b,0xcc,0xc9,0x01,0xd5,0x38,0xf4,0x21,0x8a,0x9c,0x35,0x85,0x36, 447 | 0x9b,0x64,0x74,0x4f,0xd8,0x1e,0x55,0xf2,0x00,0x42,0x90,0x2a,0x27,0x9e,0xe8,0xf1, 448 | 0x5b,0xe3,0x4a,0x7b,0xb6,0x6c,0x72,0x99,0x4c,0x35,0xdf,0x19,0x90,0x57,0x08,0x2b, 449 | 0x6a,0x3e,0xca,0xb6,0x0d,0x91,0x6c,0x91,0x3e,0xf5,0x84,0xed,0x51,0x65,0x56,0x0e, 450 | 0x10,0xe5,0xa4,0x18,0x0b,0x25,0xab,0x6a,0xee,0x6c,0xf2,0x0a,0x99,0x9e,0x4a,0x68, 451 | 0x2b,0x7e,0x6b,0x80,0x72,0x5d,0xb9,0x55,0x5f,0x92,0x49,0x88,0xa6,0x25,0xe6,0xda, 452 | 0x84,0x19,0x1d,0x01,0x50,0x28,0x8c,0xfb,0x69,0x72,0x00,0xda,0x99,0xba,0x4c,0x42, 453 | 0x24,0x2d,0x17,0x16,0xcd,0xa9,0x9f,0x93,0xa5,0x0f,0x42,0x14,0x00,0x50,0x52,0x62, 454 | 0xd6,0x1d,0x1b,0xfd,0x96,0xd8,0x86,0x02,0x3d,0x5e,0x86,0x32,0x90,0x21,0x38,0x29, 455 | 0x31,0x6b,0x64,0x20,0x43,0x68,0x20,0x42,0x3e,0xc8,0xf6,0xc5,0x0a,0x99,0xac,0x49, 456 | 0xea,0x83,0x84,0x99,0xac,0x49,0x6c,0x04,0xd3,0xc7,0x36,0xf1,0x06,0x44,0x57,0x06, 457 | 0x6e,0x28,0x00,0x43,0x04,0x02,0x99,0x8c,0xac,0x26,0x3e,0x30,0x78,0x8b,0xe8,0x28, 458 | 0x45,0x71,0xdc,0x31,0x50,0xae,0x27,0xbc,0xb6,0x8a,0x1a,0x59,0x2e,0xd1,0xf4,0xd8, 459 | 0xdf,0x26,0x29,0x38,0x8e,0xb2,0x49,0x77,0x66,0x5c,0x5f,0xfa,0xb6,0x5a,0x99,0x24, 460 | 0x24,0xcc,0x0e,0xbb,0x77,0xf4,0x65,0x2a,0x12,0x99,0xf9,0x0b,0xbc,0xfa,0x58,0xb4, 461 | 0x6a,0x15,0x0a,0x1a,0x28,0x95,0xb2,0x41,0x0f,0xe4,0x89,0x7d,0xc5,0x32,0x32,0xa2, 462 | 0xbd,0x1a,0x57,0x45,0x00,0xf4,0xa7,0x37,0x32,0xf7,0x54,0xfb,0xc1,0x09,0x10,0xc3, 463 | 0x1b,0x48,0x11,0x03,0x71,0x09,0xd5,0x2a,0x14,0x2a,0xc3,0xbd,0x93,0x06,0x02,0x07, 464 | 0x6e,0x51,0xad,0xe8,0x2b,0xa6,0x6f,0x47,0xa9,0xe8,0x07,0xb1,0xd1,0x72,0xa4,0x0d, 465 | 0x34,0x16,0xd6,0x40,0xd1,0x8c,0x55,0xb0,0xef,0x43,0xce,0x1b,0xa7,0xcb,0xe7,0x43, 466 | 0x78,0x60,0xe2,0x30,0xcc,0xf6,0x98,0x98,0x44,0xbe,0x3d,0x18,0x36,0x1e,0x2c,0xfc, 467 | 0x7e,0x7f,0xda,0x83,0x15,0x40,0x58,0xac,0x04,0x22,0x46,0x3e,0xea,0x35,0x40,0x52, 468 | 0x0e,0xfa,0xd3,0x91,0x94,0x03,0x00,0x41,0xa9,0x88,0x32,0xbc,0x41,0x4f,0x23,0x23, 469 | 0xab,0xbd,0xaa,0xd8,0xbf,0xca,0x05,0x41,0x09,0x59,0x5b,0x91,0x83,0xa2,0xeb,0x6f, 470 | 0x18,0x2a,0xb0,0x5a,0xad,0xc0,0xab,0xbb,0x25,0xee,0xcd,0xc8,0x08,0x2a,0xcd,0x46, 471 | 0x59,0x21,0x84,0x1a,0x59,0x2e,0x29,0x01,0x31,0x4d,0xdf,0xc6,0x6c,0x8e,0x82,0xb9, 472 | 0xe4,0xab,0xfd,0x68,0x1f,0xd7,0x44,0x33,0xcd,0x4a,0xb3,0x22,0xb6,0xb2,0xb5,0x25, 473 | 0x51,0x0c,0x49,0x18,0x65,0x43,0xd6,0x6c,0xa5,0xc7,0x97,0x0c,0x28,0x3f,0x0e,0x61, 474 | 0xbb,0x00,0x95,0x41,0xbe,0xd8,0xd3,0xd6,0x9f,0x9e,0x2f,0xf6,0xb4,0x79,0x40,0x90, 475 | 0x2f,0x1e,0xa4,0x56,0x39,0xa4,0x15,0x98,0xd5,0x5d,0x02,0xb5,0x66,0x6a,0x29,0x41, 476 | 0xbe,0x58,0xad,0x9b,0xdd,0x5a,0x77,0xc3,0x50,0x81,0xf0,0x7a,0xac,0x9f,0xd5,0x43, 477 | 0x6f,0x91,0xdc,0x07,0x84,0x3e,0xf2,0xc5,0xee,0xd6,0xa0,0xb8,0x4f,0x09,0x8c,0x28, 478 | 0xd7,0x58,0x66,0x1d,0x0b,0x35,0x6d,0x63,0x9e,0x47,0xe4,0x77,0x93,0x2c,0x04,0x33, 479 | 0x98,0x00,0x66,0x92,0xa3,0xcc,0xca,0xe2,0xda,0xe6,0x2c,0x3d,0xe5,0x79,0x04,0xb6, 480 | 0x03,0xbd,0x2d,0x1e,0xb6,0x69,0x0b,0x8f,0x18,0x51,0xb6,0x75,0xef,0x0c,0x9b,0x61, 481 | 0xfc,0x1a,0x7e,0xc3,0x80,0xc0,0xc1,0x3f,0x06,0x6e,0xb1,0x76,0xe0,0xe6,0x43,0x97, 482 | 0x3b,0x63,0x15,0x1c,0xeb,0xb0,0xaf,0x9c,0xcf,0x8d,0xef,0x63,0x67,0x44,0x11,0x82, 483 | 0x09,0xd4,0xcc,0x1e,0x9b,0x6b,0x99,0xee,0x4a,0x64,0x4d,0xac,0xe5,0xc8,0x30,0x33, 484 | 0x5b,0x22,0x4e,0x48,0x4c,0xa7,0xa6,0x8f,0xfa,0x2f,0x9f,0x95,0x65,0x00,0x87,0xe9, 485 | 0x55,0xb0,0xad,0xfa,0x7c,0x40,0xb6,0x8d,0xcb,0x08,0xb3,0x11,0x88,0x85,0x7f,0xf4, 486 | 0x54,0x20,0x53,0x42,0x56,0x37,0xd8,0x18,0x98,0x2d,0x04,0xac,0x16,0x52,0xcc,0x78, 487 | 0x05,0x3b,0x4c,0x23,0x9a,0xb2,0x0a,0x2a,0x4e,0x32,0xc5,0x4a,0x2e,0x3b,0xae,0xbe, 488 | 0x3e,0x6b,0x49,0x31,0x79,0x47,0xc5,0x4c,0x3b,0xb6,0xcc,0x6c,0xd1,0x38,0x4a,0xc7, 489 | 0xb0,0x5a,0x0a,0x31,0xdd,0xcf,0xe8,0x18,0xec,0x18,0x3c,0x05,0x6f,0x7a,0xc5,0x13, 490 | 0xdd,0x49,0xdb,0xf8,0x9c,0x63,0x4e,0xa4,0x48,0x9a,0xb9,0x3c,0xab,0x8e,0x75,0xe3, 491 | 0x6e,0x39,0xac,0x35,0x20,0xb6,0xde,0x48,0xf6,0x32,0x98,0x18,0x46,0x4b,0xef,0xc5, 492 | 0xd2,0x4d,0x72,0x98,0xe9,0x0c,0x86,0x8e,0x32,0xe6,0xa0,0x6a,0x1d,0x5f,0x3c,0x87, 493 | 0x0d,0x09,0xcb,0x6a,0x1a,0x2a,0xc3,0xf6,0x44,0x94,0x51,0xbe,0x18,0x73,0xe1,0xaa, 494 | 0x65,0x66,0x32,0x6c,0x49,0x36,0xe8,0xdf,0x32,0x93,0x05,0x59,0x0b,0x52,0x47,0x88, 495 | 0x17,0xe1,0x18,0xec,0x18,0x3c,0x15,0x48,0xb4,0x5f,0x2a,0x8f,0xf7,0x73,0xc0,0xac, 496 | 0x49,0x5a,0x88,0x69,0xa1,0x00,0x27,0x51,0x09,0xf0,0x94,0x24,0x40,0x92,0x18,0x5c, 497 | 0xfb,0xa6,0xad,0x64,0x4b,0xc2,0x58,0x2b,0xc8,0x23,0x41,0x8d,0x4c,0xaf,0x25,0x32, 498 | 0x71,0x22,0x55,0x20,0x8e,0x1c,0x05,0x3b,0x06,0x3b,0x06,0x4f,0x09,0x31,0x22,0x78, 499 | 0xd5,0xbe,0x6c,0x38,0x5e,0x2b,0x6c,0x3c,0xb2,0x76,0xda,0xcc,0x18,0x23,0x89,0x4b, 500 | 0x0c,0x84,0x8a,0x88,0xd9,0x58,0xa8,0x34,0xce,0xac,0x1a,0x2f,0x66,0x65,0xb0,0x05, 501 | 0xc8,0xc6,0x09,0x7b,0xbe,0xa2,0x23,0xab,0x0b,0xef,0x18,0xec,0x18,0x3c,0x65,0x14, 502 | 0x2e,0x97,0xb2,0x99,0x71,0x46,0x99,0x6d,0x42,0x1e,0x2c,0x4d,0x2f,0x1b,0x98,0x11, 503 | 0x1b,0x24,0xc6,0x64,0x0a,0x34,0x90,0x02,0x24,0xec,0x09,0x30,0x60,0x98,0x98,0xad, 504 | 0xc7,0x04,0xd6,0x15,0x78,0x4a,0xa9,0x23,0x31,0xfc,0xe6,0x18,0xec,0x18,0x3c,0x45, 505 | 0x7d,0xcc,0xb2,0xf4,0x8b,0xd5,0x82,0x37,0xde,0xd7,0xdc,0x68,0x4f,0x58,0x23,0x8f, 506 | 0x18,0x8b,0x16,0xf7,0xa4,0xf3,0x9c,0x89,0x88,0x58,0x64,0x00,0x24,0xe9,0x27,0x71, 507 | 0x3d,0x21,0x24,0x8e,0xdc,0xd0,0xb9,0x63,0xb0,0x63,0xf0,0x54,0x51,0xb8,0x2a,0x55, 508 | 0xb5,0x92,0xf1,0xc6,0xfb,0x41,0x46,0x86,0x81,0x64,0x4b,0xe2,0x48,0x61,0x07,0x33, 509 | 0x00,0x58,0x80,0x6b,0x5b,0x7a,0xe3,0x68,0x18,0xf2,0x72,0x0c,0x76,0x0c,0x9e,0x42, 510 | 0x47,0x3a,0x88,0xfa,0x02,0x7f,0xfc,0x4b,0x28,0xad,0x61,0x45,0x96,0x5f,0xc0,0x94, 511 | 0x26,0xd6,0x5a,0xf8,0x2f,0xea,0x5d,0x5c,0x1c,0x83,0x1d,0x83,0xa7,0x0e,0x89,0xf6, 512 | 0x4d,0x8f,0x0a,0xd5,0xf8,0x29,0xc9,0x5a,0x10,0x31,0x1d,0xea,0xcb,0x1c,0xa3,0x34, 513 | 0x00,0xba,0x0a,0xa5,0x4d,0xab,0x70,0x0c,0x76,0x70,0x0c,0x9e,0x12,0x98,0x58,0x89, 514 | 0x52,0x35,0x9c,0xc8,0x4e,0x06,0xcc,0x86,0x48,0x5a,0x66,0x31,0xa1,0x2e,0x31,0x6b, 515 | 0xcd,0x4a,0x4a,0x53,0xe1,0xdc,0x8b,0x9a,0xc0,0x8e,0xc1,0x8e,0xc1,0x53,0xeb,0x49, 516 | 0x27,0xd6,0x4f,0x8a,0x22,0x08,0x26,0xb2,0x9a,0x92,0xad,0xb5,0x52,0xc2,0x5a,0xc2, 517 | 0x78,0x62,0x46,0x6c,0xad,0x06,0x79,0x82,0x7b,0x42,0x55,0x15,0xe1,0xb6,0xbb,0x0e, 518 | 0x1f,0x00,0x00,0x08,0x0e,0x49,0x44,0x41,0x54,0x8b,0x7c,0x27,0x44,0xc7,0x60,0xc7, 519 | 0xe0,0x29,0xf6,0xa4,0x2b,0xbe,0x17,0xf5,0x65,0x65,0x30,0xc1,0x15,0xd1,0x56,0x43, 520 | 0x0a,0x62,0x0b,0xb2,0x34,0xda,0x28,0x13,0x5b,0x18,0x62,0x82,0x14,0x00,0x6c,0x77, 521 | 0xdc,0xa6,0x33,0xea,0xc5,0xae,0x60,0xc7,0x60,0xc7,0xe0,0x29,0x86,0x4d,0x74,0x06, 522 | 0x25,0xeb,0x37,0xde,0x30,0x7b,0xec,0x5b,0x0d,0xa5,0x23,0x38,0x6c,0x99,0x98,0x89, 523 | 0x09,0x60,0x69,0x99,0xc0,0x20,0x26,0x41,0x20,0x36,0xc6,0x46,0x9a,0xb3,0x61,0xd2, 524 | 0x1d,0x78,0x2a,0x70,0x5b,0x11,0x3b,0x06,0x3b,0x06,0x4f,0xbd,0x2b,0x1d,0x93,0xb2, 525 | 0xc5,0x38,0xf4,0xbc,0x49,0xec,0x4c,0xc2,0x60,0xe6,0x9a,0x1d,0x66,0x16,0x00,0x0c, 526 | 0xa0,0x99,0x38,0x61,0x4d,0x10,0x81,0x90,0x82,0xa2,0x6a,0x50,0xe1,0x10,0x19,0xe1, 527 | 0xf4,0xeb,0x18,0xec,0x18,0x7c,0x38,0x60,0x12,0xa1,0x74,0x59,0xe7,0x48,0xbd,0xa0, 528 | 0xc5,0xef,0x0c,0x0b,0x06,0xac,0xf5,0x28,0xdd,0xad,0x37,0x6d,0x1f,0x22,0x65,0xb5, 529 | 0x4f,0xbe,0x74,0xda,0x75,0x0c,0x76,0x0c,0x3e,0x7c,0xbe,0x34,0x7b,0x28,0x45,0xa1, 530 | 0x12,0x53,0xbb,0x83,0x32,0x47,0x15,0xcf,0x90,0x07,0x4f,0x39,0xdd,0x3a,0x06,0x3b, 531 | 0x06,0x1f,0x56,0x5f,0x5a,0x1b,0x29,0xe3,0x32,0x32,0x42,0x4e,0xd5,0x36,0x16,0x6c, 532 | 0x22,0xb6,0x89,0x2f,0xa5,0xe7,0xfc,0x67,0xc7,0x60,0xc7,0xe0,0x26,0x38,0xd3,0x1a, 533 | 0x0a,0x51,0x45,0x04,0x82,0xbc,0x17,0x3e,0x01,0xda,0x26,0x31,0xc5,0x2a,0x80,0x50, 534 | 0x2e,0x7e,0xe5,0x18,0xec,0x18,0xdc,0x24,0x43,0x6c,0x2c,0x94,0x4d,0x8c,0x90,0x4c, 535 | 0x2f,0xe4,0x9b,0x9c,0xd6,0x6a,0xc3,0x91,0xa7,0x48,0x2a,0x67,0x7e,0x1d,0x83,0x1d, 536 | 0x83,0x9b,0x4b,0x62,0x4d,0x52,0x18,0xa3,0x3d,0xb2,0x42,0x4e,0x62,0x1d,0x83,0xb5, 537 | 0x89,0x61,0xb2,0x52,0xb2,0x92,0x8e,0xbe,0x8e,0xc1,0x8e,0xc1,0xd3,0x40,0x62,0x9b, 538 | 0xb0,0x47,0xcc,0xc6,0x90,0x04,0xf1,0xb8,0x8d,0x31,0xc3,0x6a,0x4d,0x22,0x36,0x81, 539 | 0x30,0xd2,0x13,0xce,0x79,0x76,0x0c,0x76,0x0c,0x9e,0x46,0x16,0x1b,0x43,0x4a,0x30, 540 | 0x1b,0xad,0x48,0x0b,0x92,0x2c,0x04,0x8f,0x36,0xf7,0x0a,0x96,0xb5,0x21,0xa0,0x92, 541 | 0x88,0xc0,0x97,0xd6,0x2a,0xe7,0x3b,0x3b,0x06,0x3b,0x06,0x1f,0x01,0x2c,0x66,0x6b, 542 | 0x99,0x25,0x91,0x4d,0xe2,0xc4,0x48,0x0a,0x84,0x94,0x30,0x82,0x01,0x12,0xcc,0x4c, 543 | 0x86,0xc0,0x2c,0xac,0x91,0x26,0x36,0x16,0x5e,0x28,0x12,0x03,0x3f,0x70,0xb6,0xd7, 544 | 0x31,0xd8,0x31,0xf8,0x88,0xe2,0xb1,0x65,0x66,0xcb,0x0a,0x10,0xc4,0xd6,0x70,0x92, 545 | 0xee,0x68,0x03,0x26,0x06,0x79,0x02,0xa4,0x84,0x49,0x20,0x48,0xd0,0x91,0xb6,0x27, 546 | 0x95,0x63,0xb0,0x83,0x63,0xf0,0x10,0x57,0x99,0x2d,0x60,0x98,0x01,0x61,0x8d,0x90, 547 | 0x96,0xc1,0x90,0x90,0x04,0x12,0x70,0xcc,0x75,0x0c,0x76,0x00,0xd0,0x8c,0xef,0x07, 548 | 0x3b,0x38,0x05,0x3b,0x38,0x05,0x3b,0x38,0x05,0x3b,0x38,0x05,0x3b,0x05,0x3b,0x38, 549 | 0x05,0x3b,0x38,0x05,0x3b,0x38,0x05,0x3b,0x38,0x05,0x3b,0x38,0x05,0x3b,0x38,0x05, 550 | 0x3b,0x05,0x3b,0x38,0x05,0xbf,0xf8,0x40,0x44,0x1f,0x9e,0x1a,0x49,0x6a,0xca,0x24, 551 | 0x4d,0xb2,0x7c,0xa7,0xcc,0x86,0x38,0xef,0x8a,0xa5,0x53,0x23,0xe8,0xfb,0xf6,0x8f, 552 | 0xe0,0x14,0x7c,0xe4,0x61,0xc9,0xaa,0x29,0x12,0xf4,0x5e,0x4c,0xaf,0x82,0x5d,0x13, 553 | 0xed,0x6c,0x70,0x53,0x70,0x33,0x2d,0x5b,0x91,0xf9,0xbf,0x0d,0x92,0x37,0xe1,0xce, 554 | 0x95,0x4f,0x37,0xcc,0x1e,0x7c,0x0b,0x37,0xd3,0xa6,0x51,0xa4,0x6d,0x3a,0x94,0x84, 555 | 0xfe,0x12,0x6f,0xa6,0x4d,0xf8,0x64,0xb8,0xe2,0xa4,0xf0,0xdb,0xc0,0xc7,0x0b,0x2b, 556 | 0x57,0x5e,0x3d,0x24,0x4b,0xed,0xfc,0x13,0xe1,0xca,0x95,0x57,0x0f,0x2d,0xf1,0x66, 557 | 0xda,0xba,0x67,0x11,0x6d,0xc2,0x27,0xb2,0x27,0x87,0xdf,0x42,0xff,0x61,0xa8,0xc8, 558 | 0x9b,0xe9,0x54,0xe0,0x66,0xda,0x7a,0x04,0xd4,0x2c,0x1f,0x19,0x58,0x83,0x8d,0xfc, 559 | 0xe7,0xf9,0x6a,0xa3,0xe4,0xd1,0xb2,0x5f,0x35,0x7f,0xcc,0xcb,0x87,0x90,0xd0,0x5f, 560 | 0xe2,0x1a,0x6c,0xdc,0x8a,0x6f,0x32,0x7f,0x6c,0x56,0xb2,0x0d,0xab,0xfb,0x2f,0xe2, 561 | 0x0a,0x66,0xae,0x9d,0x6f,0xc5,0x37,0x87,0x95,0xb8,0x06,0x5b,0x78,0x0d,0x36,0x6e, 562 | 0xc5,0xbf,0xf2,0x55,0xb3,0x92,0xda,0xa1,0x4e,0xe4,0x1a,0xe0,0x61,0x5e,0x83,0x2d, 563 | 0x03,0xb2,0xa6,0x0d,0x47,0x52,0x13,0xbd,0xb2,0xb8,0x37,0x7a,0x53,0xcb,0xca,0x15, 564 | 0x85,0x4f,0xa1,0xff,0x08,0x5c,0xbc,0xf2,0x46,0xda,0x74,0x33,0x2d,0x5b,0x99,0xbf, 565 | 0x1c,0xf1,0xeb,0xfd,0x65,0x8b,0x06,0x68,0xf1,0x8a,0x5d,0xbb,0x01,0x00,0x17,0xaf, 566 | 0x3c,0xe6,0x72,0x7c,0x99,0x36,0x00,0xfb,0x33,0xdb,0xcf,0x9d,0x9f,0x92,0xf0,0xe2, 567 | 0x95,0x95,0xf4,0x42,0x4d,0x42,0xbf,0xc0,0x9a,0xa4,0xc1,0x12,0x01,0x6c,0xc0,0x6b, 568 | 0x81,0x73,0x0e,0xee,0x5c,0x8f,0x53,0xea,0x9e,0xa7,0x76,0xbe,0x01,0xaf,0x1d,0x56, 569 | 0x62,0x0d,0x1b,0xf0,0x4a,0xbc,0xf6,0xe0,0xce,0xda,0xa1,0x4e,0x24,0x80,0xeb,0x5d, 570 | 0x13,0x3d,0x1c,0xeb,0xda,0xe6,0xfd,0xee,0xce,0x1b,0xd7,0x6f,0xf8,0xcb,0x7f,0xea, 571 | 0xe9,0x3f,0x02,0xb7,0xae,0x0f,0x01,0xe0,0xd6,0xf5,0x5f,0xbc,0x69,0xdf,0xef,0xee, 572 | 0xf9,0xc9,0xe6,0x6b,0x07,0xdb,0x1e,0x58,0xa4,0x97,0xbe,0x76,0xd3,0xbe,0xf7,0x8b, 573 | 0xef,0x03,0x37,0xbf,0x76,0xeb,0x6f,0x6e,0x5d,0xbf,0xfe,0x5a,0xa4,0xb7,0xdd,0xba, 574 | 0xfe,0x6b,0x37,0xed,0xab,0x49,0x18,0x2a,0xf0,0x8b,0x37,0xed,0x1b,0x2c,0x11,0x40, 575 | 0x0c,0x05,0x28,0xc4,0x06,0x0f,0xd5,0x3d,0x4f,0xed,0x3c,0x1e,0xf0,0x44,0xfb,0x4b, 576 | 0xac,0x21,0x86,0x82,0x42,0x5c,0x3b,0xd4,0x89,0x04,0xce,0xfc,0x61,0xc5,0x29,0xb8, 577 | 0x0e,0x77,0x9d,0xf2,0x0f,0x57,0x78,0x07,0xb0,0x0c,0x58,0xcc,0x07,0xfa,0x8f,0x43, 578 | 0xae,0x2f,0x44,0xef,0x7e,0x9c,0x38,0x24,0xe1,0x37,0x1d,0xf3,0xfb,0x7b,0xad,0xe8, 579 | 0x5d,0xf8,0xe6,0xd5,0x16,0x37,0xbd,0x2f,0x44,0x52,0xd7,0x9d,0x45,0x6f,0xed,0xaf, 580 | 0xa1,0x02,0x17,0xd6,0x52,0xef,0x3a,0xe5,0x1f,0xae,0xf0,0x86,0xe4,0x3e,0xe3,0xfc, 581 | 0x6b,0x56,0x1e,0xfb,0xe5,0xd1,0xcf,0xd3,0x12,0x2f,0x3d,0xf5,0xd4,0x3f,0x1b,0xfb, 582 | 0x47,0x00,0x00,0xae,0xec,0xf9,0x77,0xa7,0xe0,0x3a,0xbc,0xe1,0xb1,0x0f,0xff,0x04, 583 | 0x0c,0x02,0x08,0xb6,0xff,0x58,0xa7,0x2c,0xe6,0x21,0xf3,0xa1,0xef,0x7a,0xd9,0x2f, 584 | 0xbe,0x44,0x00,0x70,0xcd,0xb1,0xa7,0xfc,0x19,0x18,0x1f,0xda,0x79,0xd7,0xae,0x87, 585 | 0xde,0xf1,0xca,0xcf,0xbd,0xff,0xd4,0x45,0x97,0xa6,0x39,0x6a,0x17,0xfa,0xc9,0x37, 586 | 0x28,0x90,0x6a,0xa9,0x6f,0x78,0xec,0xc3,0x3f,0x19,0xfa,0x04,0xc7,0xde,0xbd,0x63, 587 | 0xfd,0xdb,0xbf,0x10,0x8f,0x76,0x5e,0x2b,0xf1,0xa7,0x8f,0x3e,0xfa,0xd5,0xb1,0x7f, 588 | 0x04,0x00,0xe0,0xd5,0x2b,0xae,0x77,0x0a,0x1e,0x86,0xd7,0xec,0xd8,0x3d,0x81,0xf7, 589 | 0xe1,0x0f,0xcf,0x5d,0x09,0x00,0x5b,0xbf,0x70,0xed,0x63,0x5f,0x05,0x70,0x71,0xc7, 590 | 0x0d,0x3f,0x79,0x4b,0x0b,0xbe,0xb2,0xe5,0xd1,0x8f,0xfd,0xec,0xc0,0xd0,0x0b,0x13, 591 | 0x2b,0xf1,0x55,0xf1,0x9e,0xd1,0xce,0xfb,0x4b,0x1c,0xa7,0xc8,0x8f,0xac,0xdd,0xe6, 592 | 0x14,0x3c,0x2c,0x3e,0x08,0x4b,0xa9,0x2d,0x13,0xfd,0xc7,0xe1,0x19,0x46,0x4e,0xd3, 593 | 0xdf,0x88,0xe5,0x00,0x00,0x7f,0xd5,0xcf,0xfe,0xed,0x7d,0x00,0x80,0x13,0xd2,0x16, 594 | 0xb8,0xff,0x42,0xff,0xad,0x8d,0x05,0x5a,0x00,0x1e,0x0c,0xa0,0xe1,0x03,0x40,0x84, 595 | 0x4c,0x5d,0x8e,0x08,0x19,0x0f,0xa6,0xf1,0xf3,0x7a,0x30,0xd0,0xf0,0x6b,0x87,0x3a, 596 | 0x91,0x00,0xfe,0x38,0xf8,0x37,0xa7,0xe0,0x7a,0xdc,0xdf,0x31,0xaf,0x03,0xff,0x01, 597 | 0x6c,0xa1,0xd9,0xfd,0xc7,0x00,0x43,0x09,0xd5,0x81,0x91,0xa4,0x58,0x88,0xcd,0xe9, 598 | 0x1f,0x1f,0x2a,0x6f,0xbf,0x10,0x00,0xb0,0x07,0xd9,0x00,0x7b,0xfa,0x2f,0xd4,0x24, 599 | 0xf4,0x0b,0x1c,0x51,0x22,0x80,0xe5,0xb8,0x0f,0xf8,0x6d,0xdb,0x7c,0x00,0x58,0x7b, 600 | 0x42,0x67,0x5d,0x8e,0xb5,0x27,0x74,0x2e,0xc7,0x7d,0x8d,0x9f,0x77,0x39,0xee,0xc7, 601 | 0x6f,0xdb,0xe6,0xd7,0x0e,0x75,0x22,0x01,0xb4,0xbf,0xeb,0xc9,0x23,0xa2,0x56,0x8f, 602 | 0x98,0x7e,0xf0,0x4b,0x96,0x07,0xff,0xcc,0xd1,0x9b,0xd5,0x89,0x27,0x86,0x9f,0x1c, 603 | 0x38,0xee,0x59,0x9a,0xfb,0xea,0x1a,0x6c,0x5c,0x83,0x8d,0xbc,0x06,0x5b,0xa2,0x37, 604 | 0x16,0x56,0x1c,0x8b,0x2d,0x83,0xbd,0xdb,0x35,0xd8,0xc8,0x97,0xcc,0xaa,0xa5,0x9d, 605 | 0xfc,0x27,0xcc,0x7c,0xc7,0x8a,0x15,0xf9,0x13,0xec,0x9e,0xa5,0xb9,0xaf,0xd6,0x2e, 606 | 0xd4,0x24,0xf4,0x0b,0xac,0x49,0x1a,0x2c,0x71,0x0d,0x36,0xf2,0xc7,0x33,0x2b,0x4e, 607 | 0xca,0x7c,0x93,0xef,0x58,0xb1,0xe2,0xa4,0xdc,0x4f,0x06,0xfb,0xc1,0xfd,0xe7,0x57, 608 | 0x65,0x56,0xac,0xf8,0xcc,0x90,0x12,0xfb,0xfb,0xc1,0x7c,0x55,0x78,0x52,0xe6,0x1b, 609 | 0x5c,0x3b,0xdc,0xb1,0xe2,0xa9,0x41,0x91,0x6b,0xb0,0x91,0xef,0xc3,0xd0,0x7e,0xf0, 610 | 0x1d,0x2b,0x9e,0x4a,0xff,0x35,0xb9,0x62,0x8f,0xba,0xb5,0x49,0x37,0xbf,0x6b,0xeb, 611 | 0x92,0x86,0x17,0xf6,0x2f,0xb8,0xeb,0x9c,0xa9,0xb3,0x16,0xab,0xfe,0x31,0x93,0x9f, 612 | 0x12,0x49,0x07,0xb8,0xf3,0x8a,0xef,0xb8,0x26,0x7a,0x22,0x68,0x6b,0x9c,0xfc,0xa3, 613 | 0xf9,0xaf,0x9d,0xc2,0x42,0x56,0x77,0x7e,0x7a,0x6a,0x04,0xcd,0xed,0x9c,0xde,0xda, 614 | 0x3a,0xca,0x46,0x93,0xee,0xfc,0xcc,0xde,0xf7,0xcd,0x6e,0x7c,0xe9,0x86,0xcb,0xa7, 615 | 0x70,0x4d,0xe9,0x9d,0xc0,0x31,0x53,0x23,0xe9,0x0e,0x3b,0x55,0x92,0x26,0xd9,0x16, 616 | 0xb9,0xe5,0xa3,0x33,0x1b,0x6e,0xb8,0xd0,0x29,0xd8,0xc1,0x29,0xd8,0xc1,0x29,0xd8, 617 | 0xc1,0x29,0xd8,0xc1,0x29,0xd8,0xc1,0x29,0xd8,0xc1,0x29,0xd8,0x29,0xd8,0xc1,0x29, 618 | 0xf8,0x08,0x47,0xdf,0x6d,0xb7,0xdd,0xfe,0x07,0x60,0xf3,0x47,0x1f,0x19,0x3d,0xcf, 619 | 0x43,0x77,0x00,0xf7,0xdc,0x0b,0xfc,0xfc,0x0f,0xe9,0xf9,0xe6,0x8f,0x3e,0x02,0xcd, 620 | 0xc0,0x03,0xbf,0x9e,0x49,0x35,0xc1,0x33,0x13,0x8f,0x03,0xc0,0x65,0xfc,0x2b,0xac, 621 | 0x19,0x3d,0xcf,0xa7,0xa8,0xab,0xac,0x5a,0xec,0x16,0x7c,0x29,0x3d,0x7f,0x70,0xc5, 622 | 0x1d,0xbb,0xf0,0xb7,0xcc,0xaf,0x3f,0x71,0x06,0x55,0xc4,0xcc,0x5d,0xba,0x72,0xf5, 623 | 0x67,0x3f,0x70,0xd3,0x97,0x00,0x60,0xd3,0xea,0xe8,0xb2,0x33,0xba,0xbf,0xf5,0x5c, 624 | 0xfe,0x9d,0x67,0xe8,0xeb,0x36,0xb4,0xbd,0xf5,0x15,0x9b,0x56,0x47,0x97,0x9d,0x01, 625 | 0xe0,0x2c,0x7e,0x28,0x1b,0x16,0x37,0x3d,0x82,0xb3,0xd2,0xab,0x73,0x57,0x2d,0xba, 626 | 0x11,0x6b,0xf1,0x09,0xd7,0x44,0x1f,0x15,0x08,0x17,0x74,0xa2,0x0a,0x60,0xf3,0x19, 627 | 0x77,0xfd,0xe1,0x55,0xeb,0xb6,0xdf,0x83,0x5f,0xbc,0x66,0xc7,0xbf,0x7e,0x2a,0x7e, 628 | 0xf2,0x96,0x34,0x01,0xc0,0xd9,0x78,0xf0,0x81,0xb3,0x97,0x3f,0xf8,0x20,0x9d,0x99, 629 | 0x5e,0x7d,0xea,0xf3,0x8f,0xaf,0xc5,0x86,0x9f,0x45,0x4a,0x39,0x05,0x1f,0x05,0xf8, 630 | 0xfa,0x9c,0x1f,0xbe,0x7c,0x39,0x80,0x1b,0x4a,0x57,0x7c,0x50,0x5f,0x7f,0xca,0xd5, 631 | 0x0b,0x4e,0x8b,0x1e,0x28,0xaa,0xc5,0x1f,0xfe,0x72,0x9a,0x00,0x60,0x49,0xc7,0x03, 632 | 0x0f,0x9c,0x75,0xf6,0x03,0x0f,0x9c,0xd8,0x96,0x5e,0x05,0xf0,0x1d,0x5c,0x75,0xff, 633 | 0xac,0xb9,0xf3,0x66,0x50,0x35,0xcc,0xdc,0x26,0xfa,0x8c,0x37,0x1f,0x73,0xa9,0x00, 634 | 0xd0,0x85,0xd5,0x74,0x4e,0xe7,0xb7,0x3f,0xfa,0x1e,0x89,0xea,0x47,0x9e,0xb8,0xee, 635 | 0xe9,0x8b,0x8f,0xc1,0x6a,0x3a,0xa7,0x13,0x00,0xce,0x7a,0x30,0xf3,0xde,0xbd,0xff, 636 | 0xbc,0xf9,0x32,0xa4,0x57,0xfb,0xef,0x7c,0x57,0x8f,0x63,0xf0,0x51,0x80,0x57,0x7d, 637 | 0x6e,0x55,0x0e,0x00,0x4e,0xc7,0x95,0x3f,0xff,0xeb,0xd7,0x6d,0xa0,0xaf,0x1c,0x0f, 638 | 0x3c,0xf3,0xb9,0x27,0x2e,0x79,0x30,0x4d,0x00,0x80,0xb3,0xf7,0x3c,0x7b,0xd6,0xd9, 639 | 0x8f,0x55,0xcf,0x46,0x7a,0x15,0x40,0x88,0x75,0xf7,0xe2,0x37,0x77,0x3b,0x05,0x1f, 640 | 0x45,0x78,0xff,0xe5,0xab,0xf2,0x17,0xed,0x7b,0x4f,0x78,0xdc,0x3a,0x60,0xdd,0xca, 641 | 0xf0,0xb6,0x8f,0xa7,0x09,0x00,0x70,0x36,0x16,0xce,0x5f,0x91,0xc3,0x59,0x48,0xaf, 642 | 0x02,0x68,0xbd,0xec,0x96,0x0b,0xb1,0xee,0xb7,0x33,0xe8,0xe7,0xbf,0x18,0x66,0x74, 643 | 0x74,0xf7,0x1c,0xa3,0xd0,0x57,0xed,0x04,0x50,0xde,0xd3,0x51,0xa8,0x25,0xd4,0x77, 644 | 0x9b,0xab,0x9d,0x33,0xf4,0xc7,0xbb,0x29,0x3b,0x2e,0x92,0xe5,0xe0,0x14,0xec,0xe0, 645 | 0x14,0xec,0xe0,0x14,0xec,0xe0,0x14,0xec,0xe0,0x14,0xec,0xe0,0x14,0xec,0x14,0xec, 646 | 0xe0,0x14,0xec,0xe0,0x14,0xec,0xe0,0x14,0xec,0xe0,0x14,0xec,0xe0,0x14,0xec,0x30, 647 | 0x3a,0xfe,0x3f,0xca,0xb5,0x58,0x49,0x9c,0x3c,0xea,0x14,0x00,0x00,0x00,0x00,0x49, 648 | 0x45,0x4e,0x44,0xae,0x42,0x60,0x82}; 649 | --------------------------------------------------------------------------------