[APPHELP_APITEST] This should not be here.
[reactos.git] / rostests / apitests / apphelp / data.c
1 /*
2 * Copyright 2015,2016 Mark Jansen
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19 #include <exdisp.h>
20 #include <winbase.h>
21 #include "wine/test.h"
22
23
24 static IMAGE_DOS_HEADER dos_header =
25 {
26 IMAGE_DOS_SIGNATURE, /* e_magic */
27 144, /* e_cblp */
28 3, /* e_cp */
29 0, /* e_crlc */
30 4, /* e_cparhdr */
31 0, /* e_minalloc */
32 65535, /* e_maxalloc */
33 0, /* e_ss */
34 184, /* e_sp */
35 0, /* e_csum */
36 0, /* e_ip */
37 0, /* e_cs */
38 64, /* e_lfarlc */
39 0, /* e_ovno */
40 { 0 }, /* e_res[4] */
41 0, /* e_oemid */
42 0, /* e_oeminfo */
43 { 0 }, /* e_res2[10] */
44 0x80 /* e_lfanew */
45 };
46
47 static IMAGE_NT_HEADERS32 nt_header =
48 {
49 IMAGE_NT_SIGNATURE, /* Signature */
50 {
51 IMAGE_FILE_MACHINE_I386, /* Machine */
52 2, /* NumberOfSections */
53 0x12345, /* TimeDateStamp */
54 0, /* PointerToSymbolTable */
55 0, /* NumberOfSymbols */
56 sizeof(IMAGE_OPTIONAL_HEADER), /* SizeOfOptionalHeader */
57 IMAGE_FILE_RELOCS_STRIPPED | IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_LINE_NUMS_STRIPPED | IMAGE_FILE_32BIT_MACHINE /* Characteristics */
58 },
59 {
60 IMAGE_NT_OPTIONAL_HDR_MAGIC, /* Magic */
61 6, /* MajorLinkerVersion */
62 3, /* MinorLinkerVersion */
63 0, /* SizeOfCode */
64 0, /* SizeOfInitializedData */
65 0, /* SizeOfUninitializedData */
66 0x1000, /* AddressOfEntryPoint */
67 0x1000, /* BaseOfCode */
68 0, /* BaseOfData */
69 0x400000, /* ImageBase */
70 0x1000, /* SectionAlignment */
71 0x200, /* FileAlignment */
72 4, /* MajorOperatingSystemVersion */
73 1, /* MinorOperatingSystemVersion */
74 4, /* MajorImageVersion */
75 2, /* MinorImageVersion */
76 4, /* MajorSubsystemVersion */
77 3, /* MinorSubsystemVersion */
78 0, /* Win32VersionValue */
79 0x3000, /* SizeOfImage */
80 0x200, /* SizeOfHeaders */
81 0xBAAD, /* CheckSum: This checksum is not the correct checksum, intentionally! */
82 IMAGE_SUBSYSTEM_WINDOWS_CUI, /* Subsystem */
83 0, /* DllCharacteristics */
84 0x100000, /* SizeOfStackReserve */
85 0x1000, /* SizeOfStackCommit */
86 0x100000, /* SizeOfHeapReserve */
87 0x1000, /* SizeOfHeapCommit */
88 0, /* LoaderFlags */
89 0x10, /* NumberOfRvaAndSizes */
90 {
91 /* IMAGE_DIRECTORY_ENTRY_EXPORT */
92 {
93 0x2370, /* VirtualAddress */
94 76, /* Size */
95 },
96 { 0 },
97 /* IMAGE_DIRECTORY_ENTRY_RESOURCE */
98 {
99 0x2000, /* VirtualAddress */
100 868, /* Size */
101 },
102 } /* DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] */
103 }
104 };
105
106 static IMAGE_SECTION_HEADER section_headers[] =
107 {
108 {
109 { '.','t','e','x','t',0 }, /* Name */
110 { 24 }, /* VirtualSize */
111 0x1000, /* VirtualAddress */
112 0x200, /* SizeOfRawData */
113 0x200, /* PointerToRawData */
114 0, /* PointerToRelocations */
115 0, /* PointerToLinenumbers */
116 0, /* NumberOfRelocations */
117 0, /* NumberOfLinenumbers */
118 IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ /* Characteristics */
119 },
120 {
121 { '.','r','s','r','c',0 }, /* Name */
122 { 880 }, /* VirtualSize */
123 0x2000, /* VirtualAddress */
124 0x400, /* SizeOfRawData */
125 0x400, /* PointerToRawData */
126 0, /* PointerToRelocations */
127 0, /* PointerToLinenumbers */
128 0, /* NumberOfRelocations */
129 0, /* NumberOfLinenumbers */
130 IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ /* Characteristics */
131 }
132 };
133
134 static const unsigned char text_section[] =
135 {
136 0x33, 0xc0, /* xor eax, eax */
137 0xc3 /* ret */
138 };
139
140
141 /* taken from fusionpriv.h */
142 typedef struct
143 {
144 WORD wLength;
145 WORD wValueLength;
146 WORD wType;
147 WCHAR szKey[17];
148 VS_FIXEDFILEINFO Value;
149 } VS_VERSIONINFO;
150
151 typedef struct
152 {
153 WORD wLength;
154 WORD wValueLength;
155 WORD wType;
156 WCHAR szKey[15];
157 } STRINGFILEINFO;
158
159 typedef struct
160 {
161 WORD wLength;
162 WORD wValueLength;
163 WORD wType;
164 WCHAR szKey[9];
165 } STRINGTABLE;
166
167 typedef struct
168 {
169 WORD wLength;
170 WORD wValueLength;
171 WORD wType;
172 } STRINGHDR;
173
174 typedef struct
175 {
176 WORD wLength;
177 WORD wValueLength;
178 WORD wType;
179 WCHAR szKey[13];
180 } VARFILEINFO;
181
182 typedef struct
183 {
184 WORD wLength;
185 WORD wValueLength;
186 WORD wType;
187 WCHAR szKey[13];
188 DWORD Value;
189 } VAR;
190
191 typedef struct rsrc_section_t
192 {
193 IMAGE_RESOURCE_DIRECTORY header;
194 IMAGE_RESOURCE_DIRECTORY_ENTRY file_info_id;
195 IMAGE_RESOURCE_DIRECTORY file_info_header;
196 IMAGE_RESOURCE_DIRECTORY_ENTRY version_info_id;
197 IMAGE_RESOURCE_DIRECTORY version_info_header;
198 IMAGE_RESOURCE_DIRECTORY_ENTRY version_lang_id;
199 IMAGE_RESOURCE_DATA_ENTRY version_data_entry;
200
201 VS_VERSIONINFO version_info;
202 STRINGFILEINFO string_file_info;
203 STRINGTABLE string_table;
204
205 STRINGHDR FileVersion_hdr;
206 WCHAR FileVersion_key[13];
207 WCHAR FileVersion_val[8];
208
209 STRINGHDR ProductVersion_hdr;
210 WCHAR ProductVersion_key[15];
211 WCHAR ProductVersion_val[8];
212
213 STRINGHDR CompanyName_hdr;
214 WCHAR CompanyName_key[13];
215 WCHAR CompanyName_val[12];
216
217 STRINGHDR FileDescription_hdr;
218 WCHAR FileDescription_key[17];
219 WCHAR FileDescription_val[16];
220
221 STRINGHDR InternalName_hdr;
222 WCHAR InternalName_key[13];
223 WCHAR InternalName_val[14];
224
225 STRINGHDR LegalCopyright_hdr;
226 WCHAR LegalCopyright_key[15];
227 WCHAR LegalCopyright_val[16];
228
229 STRINGHDR LegalTrademarks_hdr;
230 WCHAR LegalTrademarks_key[17];
231 WCHAR LegalTrademarks_val[16];
232
233 STRINGHDR OriginalFilename_hdr;
234 WCHAR OriginalFilename_key[17];
235 WCHAR OriginalFilename_val[18];
236
237 STRINGHDR Productname_hdr;
238 WCHAR Productname_key[13];
239 WCHAR Productname_val[12];
240
241 VARFILEINFO file_info;
242 VAR translation;
243 } rsrc_section_t;
244
245 static const rsrc_section_t rsrc_section =
246 {
247 /* header */
248 {
249 0, /* Characteristics */
250 0x55FE8E21, /* TimeDateStamp, 20/09/2015 10:44:49 */
251 0, /* MajorVersion */
252 0, /* MinorVersion */
253 0, /* NumberOfNamedEntries */
254 1, /* NumberOfIdEntries */
255 },
256 /* file_info_id */
257 {
258 {{
259 (DWORD)VS_FILE_INFO, /* NameOffset:31 */
260 0 /* NameIsString:1 */
261 }},
262 {
263 0x80000018 /* OffsetToData */
264 }
265 },
266 /* file_info_header */
267 {
268 0, /* Characteristics */
269 0x55FE8E21, /* TimeDateStamp, 20/09/2015 10:44:49 */
270 0, /* MajorVersion */
271 0, /* MinorVersion */
272 0, /* NumberOfNamedEntries */
273 1, /* NumberOfIdEntries */
274 },
275 /* version_info_id */
276 {
277 {{
278 VS_VERSION_INFO, /* NameOffset:31 */
279 0 /* NameIsString:1 */
280 }},
281 {
282 0x80000030 /* OffsetToData */
283 },
284 },
285 /* version_info_header */
286 {
287 0, /* Characteristics */
288 0x55FE8E21, /* TimeDateStamp, 20/09/2015 10:44:49 */
289 0, /* MajorVersion */
290 0, /* MinorVersion */
291 0, /* NumberOfNamedEntries */
292 1, /* NumberOfIdEntries */
293 },
294 /* version_lang_id */
295 {
296 {{
297 1033, /* NameOffset:31 */
298 0 /* NameIsString:1 */
299 }},
300 {
301 0x48 /* OffsetToDirectory */
302 }
303 },
304 /* version_data_entry */
305 {
306 0x2058, /* OffsetToData */
307 0x30C, /* Size */
308 0, /* CodePage */
309 0, /* Reserved */
310 },
311
312 /* version_info */
313 {
314 0x30C, /* wLength */
315 0x34, /* wValueLength */
316 0, /* wType: Binary */
317 { 'V','S','_','V','E','R','S','I','O','N','_','I','N','F','O','\0','\0' }, /* szKey[17] */
318 /* Value */
319 {
320 0xFEEF04BD, /* dwSignature */
321 0x10000, /* dwStrucVersion */
322 0x10000, /* dwFileVersionMS */
323 0, /* dwFileVersionLS */
324 0x10000, /* dwProductVersionMS */
325 1, /* dwProductVersionLS */
326 0, /* dwFileFlagsMask */
327 0, /* dwFileFlags */
328 VOS__WINDOWS32, /* dwFileOS */
329 VFT_APP, /* dwFileType */
330 0, /* dwFileSubtype */
331 0x01d1a019, /* dwFileDateMS */
332 0xac754c50 /* dwFileDateLS */
333 },
334 },
335
336 /* string_file_info */
337 {
338 0x26C, /* wLength */
339 0, /* wValueLength */
340 1, /* wType: Text */
341 { 'S','t','r','i','n','g','F','i','l','e','I','n','f','o','\0' } /* szKey[15] */
342 },
343 /* string_table */
344 {
345 0x248, /* wLength */
346 0, /* wValueLength */
347 1, /* wType: Text */
348 { 'F','F','F','F','0','0','0','0','\0' } /* szKey[9] */
349 },
350
351 /* FileVersion */
352 {
353 48, /* wLength */
354 8, /* wValueLength */
355 1, /* wType: Text */
356 },
357 { 'F','i','l','e','V','e','r','s','i','o','n','\0' },
358 { '1','.','0','.','0','.','0','\0' },
359
360 /* ProductVersion */
361 {
362 52, /* wLength */
363 8, /* wValueLength */
364 1, /* wType: Text */
365 },
366 { 'P','r','o','d','u','c','t','V','e','r','s','i','o','n','\0' },
367 { '1','.','0','.','0','.','1','\0' },
368
369 /* CompanyName */
370 {
371 56, /* wLength */
372 12, /* wValueLength */
373 1, /* wType: Text */
374 },
375 { 'C','o','m','p','a','n','y','N','a','m','e','\0' },
376 { 'C','o','m','p','a','n','y','N','a','m','e','\0' },
377
378 /* FileDescription */
379 {
380 72, /* wLength */
381 16, /* wValueLength */
382 1, /* wType: Text */
383 },
384 { 'F','i','l','e','D','e','s','c','r','i','p','t','i','o','n','\0' },
385 { 'F','i','l','e','D','e','s','c','r','i','p','t','i','o','n','\0' },
386
387 /* InternalName */
388 {
389 58, /* wLength */
390 13, /* wValueLength */
391 1, /* wType: Text */
392 },
393 { 'I','n','t','e','r','n','a','l','N','a','m','e','\0' },
394 { 'I','n','t','e','r','n','a','l','N','a','m','e','\0' },
395
396 /* LegalCopyright */
397 {
398 66, /* wLength */
399 15, /* wValueLength */
400 1, /* wType: Text */
401 },
402 { 'L','e','g','a','l','C','o','p','y','r','i','g','h','t','\0' },
403 { 'L','e','g','a','l','C','o','p','y','r','i','g','h','t','\0' },
404
405 /* LegalTrademarks */
406 {
407 72, /* wLength */
408 16, /* wValueLength */
409 1, /* wType: Text */
410 },
411 { 'L','e','g','a','l','T','r','a','d','e','m','a','r','k','s','\0' },
412 { 'L','e','g','a','l','T','r','a','d','e','m','a','r','k','s','\0' },
413
414 /* OriginalFilename */
415 {
416 74, /* wLength */
417 17, /* wValueLength */
418 1, /* wType: Text */
419 },
420 { 'O','r','i','g','i','n','a','l','F','i','l','e','n','a','m','e','\0' },
421 { 'O','r','i','g','i','n','a','l','F','i','l','e','n','a','m','e','\0' },
422
423 /* ProductName */
424 {
425 56, /* wLength */
426 12, /* wValueLength */
427 1, /* wType: Text */
428 },
429 { 'P','r','o','d','u','c','t','N','a','m','e','\0' },
430 { 'P','r','o','d','u','c','t','N','a','m','e','\0' },
431
432
433 /* file_info */
434 {
435 0x44, /* wLength */
436 0, /* wValueLength */
437 1, /* wType: Text */
438 { 'V','a','r','F','i','l','e','I','n','f','o','\0' } /* szKey[13] */
439 },
440
441 /* translation */
442 {
443 0x24, /* wLength */
444 4, /* wValueLength */
445 0, /* wType: Binary */
446 { 'T','r','a','n','s','l','a','t','i','o','n','\0' }, /* szKey[13] */
447 0xffff /* Value */
448 }
449 };
450
451 typedef struct export_section_t
452 {
453 IMAGE_EXPORT_DIRECTORY desc;
454 char binary_name[10];
455 } export_section_t;
456
457 /* This export section is not complete, but the Name RVA is only taken into account */
458 static export_section_t export_dir =
459 {
460 {
461 0, /* Characteristics */
462 0, /* TimeDateStamp */
463 0, /* MajorVersion */
464 0, /* MinorVersion */
465 0x2398, /* Name (RVA) */
466 1, /* Base */
467 0, /* NumberOfFunctions */
468 0, /* NumberOfNames */
469 0, /* AddressOfFunctions (RVA) */
470 0, /* AddressOfNames (RVA) */
471 0, /* AddressOfNameOrdinals (RVA) */
472 },
473 { 'T','e','S','t','2','.','e','x','e',0 }, /* binary_name */
474 };
475
476
477 void test_create_exe_imp(const char* name, int skip_rsrc_exports)
478 {
479 HANDLE file;
480 char *buf, *cur;
481 DWORD size = 0x800;
482 buf = malloc(size);
483
484 file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
485 winetest_ok(file != INVALID_HANDLE_VALUE, "can't create file\n");
486 if(file == INVALID_HANDLE_VALUE)
487 return;
488
489 memset(buf, 0, size);
490 cur = buf;
491 cur = memcpy(buf, &dos_header, sizeof(dos_header));
492 cur += dos_header.e_lfanew;
493
494 memcpy(cur, &nt_header, sizeof(nt_header));
495 if (skip_rsrc_exports)
496 {
497 ((IMAGE_NT_HEADERS32*)cur)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress = 0;
498 ((IMAGE_NT_HEADERS32*)cur)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress = 0;
499 }
500 cur += sizeof(nt_header);
501 memcpy(cur, section_headers, sizeof(section_headers));
502
503 /* write code section: */
504 cur = buf + section_headers[0].PointerToRawData;
505 memcpy(cur, text_section, sizeof(text_section));
506
507 if (!skip_rsrc_exports)
508 {
509 /* write resource section: */
510 cur = buf + section_headers[1].PointerToRawData;
511 memcpy(cur, &rsrc_section, sizeof(rsrc_section));
512
513 /* write minimal export directory: */
514 cur += 0x370;
515 memcpy(cur, &export_dir, sizeof(export_dir));
516 }
517
518 WriteFile(file, buf, size, &size, NULL);
519 free(buf);
520 CloseHandle(file);
521 }
522
523
524 /* Almost everything in this filetype is ignored, only e_lfanew, ne_restab and ne_nrestab are relevant */
525 void test_create_ne_imp(const char* name, int skip_names)
526 {
527 HANDLE file;
528 DWORD size;
529 IMAGE_DOS_HEADER MZ_hdr = { IMAGE_DOS_SIGNATURE, 0 };
530 IMAGE_OS2_HEADER NE_hdr = { IMAGE_OS2_SIGNATURE, 0 };
531 static const BYTE NE_names[] =
532 {
533 /* Show that the length is used, not the nullterm*/
534 11,'T','E','S','T','M','O','D','.','h','X','x','x',0,0,0,
535 20,'M','O','D',' ','D','E','S','C','R','I','P','T','I','O','N',' ','H','E','R','E',0,0,0
536 };
537
538 file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
539 winetest_ok(file != INVALID_HANDLE_VALUE, "can't create file\n");
540 if(file == INVALID_HANDLE_VALUE)
541 return;
542
543 MZ_hdr.e_lfanew = sizeof(MZ_hdr);
544 if (!skip_names)
545 {
546 NE_hdr.ne_restab = sizeof(NE_hdr); /* First entry (pascal string + ordinal) = module name */
547 NE_hdr.ne_nrestab = sizeof(MZ_hdr) + sizeof(NE_hdr) + 16; /* First entry (pascal string + ordinal) = module description */
548 }
549
550 WriteFile(file, &MZ_hdr, sizeof(MZ_hdr), &size, NULL);
551 WriteFile(file, &NE_hdr, sizeof(NE_hdr), &size, NULL);
552 WriteFile(file, NE_names, sizeof(NE_names), &size, NULL);
553
554 CloseHandle(file);
555 }
556
557 void test_create_file_imp(const char* name, const char* contents, size_t len)
558 {
559 HANDLE file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
560 winetest_ok(file != INVALID_HANDLE_VALUE, "can't create file\n");
561 if (file != INVALID_HANDLE_VALUE)
562 {
563 if (contents && len)
564 {
565 DWORD size;
566 WriteFile(file, contents, len, &size, NULL);
567 }
568 CloseHandle(file);
569 }
570 }
571
572 static unsigned char rawData[2356] = {
573 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x73, 0x64, 0x62, 0x66,
574 0x02, 0x78, 0x3E, 0x01, 0x00, 0x00, 0x03, 0x78, 0x44, 0x00, 0x00, 0x00,
575 0x02, 0x38, 0x07, 0x70, 0x03, 0x38, 0x01, 0x60, 0x16, 0x40, 0x01, 0x00,
576 0x00, 0x00, 0x01, 0x98, 0x30, 0x00, 0x00, 0x00, 0x4C, 0x4C, 0x41, 0x5F,
577 0x54, 0x53, 0x45, 0x54, 0xC6, 0x01, 0x00, 0x00, 0x53, 0x49, 0x44, 0x5F,
578 0x54, 0x53, 0x45, 0x54, 0x56, 0x02, 0x00, 0x00, 0x57, 0x45, 0x4E, 0x5F,
579 0x54, 0x53, 0x45, 0x54, 0xEC, 0x02, 0x00, 0x00, 0x4B, 0x32, 0x57, 0x5F,
580 0x54, 0x53, 0x45, 0x54, 0x7C, 0x03, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00,
581 0x00, 0x00, 0x02, 0x38, 0x07, 0x70, 0x03, 0x38, 0x0B, 0x60, 0x01, 0x98,
582 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00, 0x02, 0x38,
583 0x07, 0x70, 0x03, 0x38, 0x20, 0x60, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00,
584 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00, 0x02, 0x38, 0x04, 0x70, 0x03, 0x38,
585 0x01, 0x60, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x26, 0x00,
586 0x00, 0x00, 0x02, 0x38, 0x0D, 0x70, 0x03, 0x38, 0x15, 0x40, 0x01, 0x98,
587 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
588 0x74, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
589 0x50, 0x04, 0x00, 0x00, 0x03, 0x78, 0x14, 0x00, 0x00, 0x00, 0x02, 0x38,
590 0x10, 0x70, 0x03, 0x38, 0x01, 0x60, 0x16, 0x40, 0x01, 0x00, 0x00, 0x00,
591 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00,
592 0x02, 0x38, 0x12, 0x70, 0x03, 0x38, 0x06, 0x90, 0x01, 0x98, 0x00, 0x00,
593 0x00, 0x00, 0x03, 0x78, 0x14, 0x00, 0x00, 0x00, 0x02, 0x38, 0x12, 0x70,
594 0x03, 0x38, 0x04, 0x90, 0x16, 0x40, 0x01, 0x00, 0x00, 0x00, 0x01, 0x98,
595 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x3E, 0x00, 0x00, 0x00, 0x02, 0x38,
596 0x07, 0x70, 0x03, 0x38, 0x04, 0x90, 0x01, 0x98, 0x30, 0x00, 0x00, 0x00,
597 0xED, 0xB4, 0x89, 0x50, 0xB1, 0xA4, 0x82, 0xA7, 0xEC, 0x02, 0x00, 0x00,
598 0x85, 0x2B, 0x88, 0x40, 0x97, 0x76, 0xA6, 0xC4, 0xC6, 0x01, 0x00, 0x00,
599 0x77, 0x7A, 0xBF, 0x48, 0x78, 0xB1, 0x69, 0xD2, 0x56, 0x02, 0x00, 0x00,
600 0xD0, 0x15, 0xE6, 0xCB, 0xE8, 0x90, 0x68, 0xFE, 0x7C, 0x03, 0x00, 0x00,
601 0x01, 0x70, 0x42, 0x03, 0x00, 0x00, 0x01, 0x50, 0x3E, 0xD6, 0xC0, 0x02,
602 0x1A, 0xB9, 0xD1, 0x01, 0x22, 0x60, 0x06, 0x00, 0x00, 0x00, 0x01, 0x60,
603 0x1C, 0x00, 0x00, 0x00, 0x23, 0x40, 0x01, 0x00, 0x00, 0x00, 0x07, 0x90,
604 0x10, 0x00, 0x00, 0x00, 0xB0, 0x0E, 0x9B, 0xE3, 0xDB, 0x55, 0x0B, 0x45,
605 0x9B, 0xD4, 0xD2, 0x0C, 0x94, 0x84, 0x26, 0x0F, 0x02, 0x70, 0x00, 0x00,
606 0x00, 0x00, 0x0B, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x3E, 0x00,
607 0x00, 0x00, 0x09, 0x70, 0x26, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x00,
608 0x00, 0x00, 0x08, 0x60, 0x82, 0x00, 0x00, 0x00, 0x03, 0x70, 0x06, 0x00,
609 0x00, 0x00, 0x03, 0x60, 0xA0, 0x00, 0x00, 0x00, 0x03, 0x70, 0x08, 0x00,
610 0x00, 0x00, 0x01, 0x10, 0x03, 0x60, 0xBE, 0x00, 0x00, 0x00, 0x07, 0x70,
611 0x8A, 0x00, 0x00, 0x00, 0x01, 0x60, 0xDC, 0x00, 0x00, 0x00, 0x06, 0x60,
612 0x00, 0x01, 0x00, 0x00, 0x05, 0x60, 0x2C, 0x01, 0x00, 0x00, 0x04, 0x90,
613 0x10, 0x00, 0x00, 0x00, 0x3F, 0xC9, 0x50, 0x4E, 0x63, 0xB8, 0xFA, 0x4D,
614 0xBA, 0xE2, 0xD8, 0x0E, 0xF4, 0xCE, 0x5C, 0x89, 0x0D, 0x70, 0x24, 0x00,
615 0x00, 0x00, 0x17, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x40, 0x01, 0x00,
616 0x00, 0x00, 0x15, 0x40, 0x01, 0x00, 0x00, 0x00, 0x24, 0x40, 0x72, 0x00,
617 0x6F, 0x00, 0x25, 0x40, 0x67, 0x00, 0x72, 0x00, 0x26, 0x40, 0x00, 0x00,
618 0x00, 0x00, 0x08, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
619 0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
620 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x13, 0x60, 0xB8, 0x01,
621 0x00, 0x00, 0x06, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
622 0x0D, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x70,
623 0x90, 0x00, 0x00, 0x00, 0x01, 0x60, 0xCE, 0x01, 0x00, 0x00, 0x06, 0x60,
624 0xF8, 0x01, 0x00, 0x00, 0x05, 0x60, 0x2A, 0x02, 0x00, 0x00, 0x04, 0x90,
625 0x10, 0x00, 0x00, 0x00, 0xE1, 0x20, 0x67, 0x15, 0x98, 0xEF, 0x04, 0x4D,
626 0x96, 0x5A, 0xD8, 0x5D, 0xE0, 0x5E, 0x6D, 0x9F, 0x0D, 0x70, 0x24, 0x00,
627 0x00, 0x00, 0x17, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x40, 0x02, 0x00,
628 0x00, 0x00, 0x15, 0x40, 0x02, 0x00, 0x00, 0x00, 0x24, 0x40, 0x20, 0x00,
629 0x32, 0x00, 0x25, 0x40, 0x2E, 0x00, 0x38, 0x00, 0x26, 0x40, 0x00, 0x00,
630 0x00, 0x00, 0x08, 0x70, 0x38, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
631 0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
632 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00,
633 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x50, 0x01, 0x00, 0x00, 0x00,
634 0x00, 0x00, 0x01, 0x00, 0x0B, 0x40, 0xAD, 0xBA, 0x00, 0x00, 0x13, 0x60,
635 0xB8, 0x01, 0x00, 0x00, 0x07, 0x70, 0x8A, 0x00, 0x00, 0x00, 0x01, 0x60,
636 0x60, 0x02, 0x00, 0x00, 0x06, 0x60, 0x80, 0x02, 0x00, 0x00, 0x05, 0x60,
637 0x9E, 0x02, 0x00, 0x00, 0x04, 0x90, 0x10, 0x00, 0x00, 0x00, 0x69, 0xEF,
638 0x70, 0xCE, 0x1D, 0xA2, 0x8B, 0x40, 0x84, 0x5B, 0xF9, 0x9E, 0xAC, 0x06,
639 0x09, 0xE7, 0x08, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
640 0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
641 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00,
642 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x50, 0x01, 0x00, 0x00, 0x00,
643 0x00, 0x00, 0x01, 0x00, 0x13, 0x60, 0xB8, 0x01, 0x00, 0x00, 0x08, 0x70,
644 0x12, 0x00, 0x00, 0x00, 0x01, 0x60, 0xC0, 0x02, 0x00, 0x00, 0x01, 0x40,
645 0x04, 0x00, 0x00, 0x00, 0x03, 0x40, 0xB0, 0xB0, 0xB0, 0xB0, 0x0B, 0x70,
646 0x0C, 0x00, 0x00, 0x00, 0x01, 0x60, 0x3E, 0x00, 0x00, 0x00, 0x1A, 0x40,
647 0x8E, 0x01, 0x00, 0x00, 0x07, 0x70, 0xCE, 0x00, 0x00, 0x00, 0x01, 0x60,
648 0xEC, 0x02, 0x00, 0x00, 0x06, 0x60, 0x0E, 0x03, 0x00, 0x00, 0x05, 0x60,
649 0x26, 0x03, 0x00, 0x00, 0x04, 0x90, 0x10, 0x00, 0x00, 0x00, 0x44, 0xD1,
650 0xEA, 0xB4, 0x40, 0xF6, 0x4B, 0x4E, 0x94, 0xC4, 0x0C, 0x7F, 0xA8, 0x66,
651 0x23, 0xB0, 0x08, 0x70, 0x94, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
652 0x00, 0x00, 0x01, 0x40, 0x00, 0x08, 0x00, 0x00, 0x03, 0x40, 0x29, 0xD6,
653 0x8B, 0x17, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
654 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x12, 0x60, 0x42, 0x03,
655 0x00, 0x00, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
656 0x03, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x40,
657 0x03, 0x00, 0x00, 0x00, 0x09, 0x40, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x40,
658 0x01, 0x00, 0x00, 0x00, 0x0B, 0x40, 0xAD, 0xBA, 0x00, 0x00, 0x1C, 0x40,
659 0x02, 0x00, 0x04, 0x00, 0x13, 0x60, 0xB8, 0x01, 0x00, 0x00, 0x14, 0x60,
660 0x68, 0x03, 0x00, 0x00, 0x15, 0x60, 0x90, 0x03, 0x00, 0x00, 0x16, 0x60,
661 0xB0, 0x03, 0x00, 0x00, 0x06, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
662 0x01, 0x00, 0x0D, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
663 0x1D, 0x40, 0x45, 0x23, 0x01, 0x00, 0x1E, 0x40, 0x45, 0x23, 0x01, 0x00,
664 0x0B, 0x70, 0x06, 0x00, 0x00, 0x00, 0x01, 0x60, 0xD4, 0x03, 0x00, 0x00,
665 0x0D, 0x70, 0x1E, 0x00, 0x00, 0x00, 0x15, 0x40, 0x02, 0x00, 0x00, 0x00,
666 0x0E, 0x70, 0x06, 0x00, 0x00, 0x00, 0x19, 0x60, 0xEC, 0x03, 0x00, 0x00,
667 0x1B, 0x60, 0xF8, 0x01, 0x00, 0x00, 0x18, 0x60, 0x2A, 0x04, 0x00, 0x00,
668 0x0D, 0x70, 0x1E, 0x00, 0x00, 0x00, 0x15, 0x40, 0x01, 0x00, 0x00, 0x00,
669 0x0E, 0x70, 0x06, 0x00, 0x00, 0x00, 0x19, 0x60, 0x4A, 0x04, 0x00, 0x00,
670 0x1B, 0x60, 0x00, 0x01, 0x00, 0x00, 0x18, 0x60, 0x82, 0x04, 0x00, 0x00,
671 0x01, 0x78, 0x96, 0x04, 0x00, 0x00, 0x01, 0x88, 0x10, 0x00, 0x00, 0x00,
672 0x32, 0x00, 0x2E, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00,
673 0x33, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1C, 0x00, 0x00, 0x00, 0x61, 0x00,
674 0x70, 0x00, 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00,
675 0x5F, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x31, 0x00,
676 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x54, 0x00, 0x65, 0x00,
677 0x73, 0x00, 0x74, 0x00, 0x4E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x4D, 0x00,
678 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x20, 0x00,
679 0x00, 0x00, 0x56, 0x00, 0x69, 0x00, 0x72, 0x00, 0x74, 0x00, 0x75, 0x00,
680 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x69, 0x00,
681 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x01, 0x88,
682 0x18, 0x00, 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6D, 0x00,
683 0x65, 0x00, 0x41, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00,
684 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x65, 0x00,
685 0x78, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x64, 0x00, 0x65, 0x00,
686 0x2E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x01, 0x88,
687 0x18, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x6C, 0x00,
688 0x75, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x6C, 0x00,
689 0x6C, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1E, 0x00, 0x00, 0x00, 0x74, 0x00,
690 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x61, 0x00, 0x6C, 0x00,
691 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00,
692 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x26, 0x00, 0x00, 0x00, 0x61, 0x00,
693 0x70, 0x00, 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00,
694 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5F, 0x00,
695 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00,
696 0x01, 0x88, 0x2A, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00,
697 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00, 0x76, 0x00,
698 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00,
699 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00,
700 0x01, 0x88, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x01, 0x88,
701 0x18, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00,
702 0x61, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00,
703 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x50, 0x00,
704 0x72, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00,
705 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88,
706 0x10, 0x00, 0x00, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00,
707 0x30, 0x00, 0x2E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x88, 0x10, 0x00,
708 0x00, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x30, 0x00,
709 0x2E, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x88, 0x24, 0x00, 0x00, 0x00,
710 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x64, 0x00,
711 0x69, 0x00, 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00,
712 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00,
713 0x01, 0x88, 0x2C, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00,
714 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00, 0x6E, 0x00,
715 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x69, 0x00,
716 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00,
717 0x00, 0x00, 0x01, 0x88, 0x30, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00,
718 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00,
719 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00,
720 0x5F, 0x00, 0x64, 0x00, 0x69, 0x00, 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00,
721 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1A, 0x00,
722 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00,
723 0x6E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00,
724 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x66, 0x00,
725 0x69, 0x00, 0x78, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x5F, 0x00,
726 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88,
727 0x1C, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x78, 0x00, 0x6E, 0x00,
728 0x65, 0x00, 0x77, 0x00, 0x5F, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00,
729 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x88, 0x26, 0x00,
730 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00,
731 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x66, 0x00,
732 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x78, 0x00,
733 0x74, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1C, 0x00, 0x00, 0x00, 0x74, 0x00,
734 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x77, 0x00, 0x32, 0x00,
735 0x6B, 0x00, 0x33, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00,
736 0x00, 0x00, 0x01, 0x88, 0x12, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00,
737 0x78, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00,
738 0x00, 0x00, 0x01, 0x88, 0x16, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00,
739 0x78, 0x00, 0x5F, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00,
740 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x88, 0x20, 0x00, 0x00, 0x00,
741 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x65, 0x00,
742 0x73, 0x00, 0x63, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00,
743 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x01, 0x88, 0x22, 0x00,
744 0x00, 0x00, 0x4F, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00,
745 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00,
746 0x65, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00,
747 0x01, 0x88, 0x1A, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00,
748 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4E, 0x00,
749 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1E, 0x00,
750 0x00, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6C, 0x00,
751 0x43, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00,
752 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x88, 0x12, 0x00,
753 0x00, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x72, 0x00,
754 0x76, 0x00, 0x30, 0x00, 0x33, 0x00, 0x00, 0x00, 0x01, 0x88, 0x38, 0x00,
755 0x00, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3A, 0x00,
756 0x2F, 0x00, 0x2F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x63, 0x00,
757 0x74, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x6F, 0x00, 0x72, 0x00,
758 0x67, 0x00, 0x2F, 0x00, 0x64, 0x00, 0x69, 0x00, 0x73, 0x00, 0x61, 0x00,
759 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x01, 0x88,
760 0x1A, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x20, 0x00,
761 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00,
762 0x64, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x88, 0x32, 0x00, 0x00, 0x00,
763 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3A, 0x00, 0x2F, 0x00,
764 0x2F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x63, 0x00, 0x74, 0x00,
765 0x6F, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x67, 0x00,
766 0x2F, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00,
767 0x00, 0x00, 0x01, 0x88, 0x14, 0x00, 0x00, 0x00, 0x41, 0x00, 0x6C, 0x00,
768 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x20, 0x00, 0x69, 0x00, 0x74, 0x00,
769 0x21, 0x00, 0x00, 0x00
770 };
771
772 DWORD test_get_db_size()
773 {
774 return sizeof(rawData);
775 }
776
777 void test_create_db_imp(const char* name)
778 {
779 HANDLE file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
780 winetest_ok(file != INVALID_HANDLE_VALUE, "can't create file '%s'\n", name);
781 if (file != INVALID_HANDLE_VALUE)
782 {
783 DWORD size;
784 WriteFile(file, rawData, sizeof(rawData), &size, NULL);
785 CloseHandle(file);
786 }
787 }
788
789 static DWORD g_WinVersion;
790 DWORD get_host_winver(void)
791 {
792 if (!g_WinVersion)
793 {
794 RTL_OSVERSIONINFOEXW rtlinfo = {0};
795 void (__stdcall* pRtlGetVersion)(RTL_OSVERSIONINFOEXW*);
796 pRtlGetVersion = (void (__stdcall*)(RTL_OSVERSIONINFOEXW*))GetProcAddress(GetModuleHandleA("ntdll"), "RtlGetVersion");
797
798 rtlinfo.dwOSVersionInfoSize = sizeof(rtlinfo);
799 pRtlGetVersion(&rtlinfo);
800 g_WinVersion = (rtlinfo.dwMajorVersion << 8) | rtlinfo.dwMinorVersion;
801 }
802 return g_WinVersion;
803 }
804
805 void silence_debug_output(void)
806 {
807 if (GetEnvironmentVariableA("SHIM_DEBUG_LEVEL", NULL, 0) == ERROR_ENVVAR_NOT_FOUND)
808 SetEnvironmentVariableA("SHIM_DEBUG_LEVEL", "0");
809 if (GetEnvironmentVariableA("SHIMENG_DEBUG_LEVEL", NULL, 0) == ERROR_ENVVAR_NOT_FOUND)
810 SetEnvironmentVariableA("SHIMENG_DEBUG_LEVEL", "0");
811 }
812