Commit | Line | Data |
---|---|---|
2592e6c0 | 1 | /* |
63af6f3a | 2 | * Exim - an Internet mail transport agent |
2592e6c0 JH |
3 | * |
4 | * Copyright (C) 2016 Exim maintainers | |
5fb822fc | 5 | * Copyright (c) University of Cambridge 1995 - 2016 |
2592e6c0 JH |
6 | * |
7 | * Hash interface functions | |
8 | */ | |
9 | ||
5fb822fc JH |
10 | #ifndef STAND_ALONE |
11 | # include "exim.h" | |
12 | ||
13 | #else | |
14 | ||
15 | /* For stand-alone testing, we need to have the structure defined, and | |
16 | to be able to do I/O */ | |
17 | ||
18 | # include <stdio.h> | |
19 | # include <stdlib.h> | |
20 | typedef unsigned char uschar; | |
21 | typedef struct sha1 { | |
22 | unsigned int H[5]; | |
23 | unsigned int length; | |
24 | } | |
25 | sha1; | |
26 | #endif /*STAND_ALONE*/ | |
27 | ||
28 | ||
2592e6c0 | 29 | |
2592e6c0 JH |
30 | /******************************************************************************/ |
31 | #ifdef SHA_OPENSSL | |
32 | ||
33 | void | |
1ed59855 | 34 | exim_sha_init(hctx * h, hashmethod m) |
2592e6c0 | 35 | { |
1ed59855 JH |
36 | switch (h->method = m) |
37 | { | |
38 | case HASH_SHA1: h->hashlen = 20; SHA1_Init (&h->u.sha1); break; | |
39 | case HASH_SHA256: h->hashlen = 32; SHA256_Init(&h->u.sha2); break; | |
40 | default: h->hashlen = 0; break; | |
41 | } | |
2592e6c0 JH |
42 | } |
43 | ||
44 | ||
45 | void | |
e2e3255a | 46 | exim_sha_update(hctx * h, const uschar * data, int len) |
2592e6c0 | 47 | { |
1ed59855 JH |
48 | switch (h->method) |
49 | { | |
50 | case HASH_SHA1: SHA1_Update (&h->u.sha1, data, len); break; | |
51 | case HASH_SHA256: SHA256_Update(&h->u.sha2, data, len); break; | |
52 | } | |
2592e6c0 JH |
53 | } |
54 | ||
55 | ||
56 | void | |
57 | exim_sha_finish(hctx * h, blob * b) | |
58 | { | |
59 | b->data = store_get(b->len = h->hashlen); | |
1ed59855 JH |
60 | switch (h->method) |
61 | { | |
62 | case HASH_SHA1: SHA1_Final (b->data, &h->u.sha1); break; | |
63 | case HASH_SHA256: SHA256_Final(b->data, &h->u.sha2); break; | |
64 | } | |
2592e6c0 JH |
65 | } |
66 | ||
67 | ||
68 | ||
69 | #elif defined(SHA_GNUTLS) | |
70 | /******************************************************************************/ | |
71 | ||
72 | void | |
1ed59855 | 73 | exim_sha_init(hctx * h, hashmethod m) |
2592e6c0 | 74 | { |
1ed59855 JH |
75 | switch (h->method = m) |
76 | { | |
6e773413 JH |
77 | case HASH_SHA1: h->hashlen = 20; gnutls_hash_init(&h->sha, GNUTLS_DIG_SHA1); break; |
78 | case HASH_SHA256: h->hashlen = 32; gnutls_hash_init(&h->sha, GNUTLS_DIG_SHA256); break; | |
79 | #ifdef EXIM_HAVE_SHA3 | |
80 | case HASH_SHA3_256: h->hashlen = 32; gnutls_hash_init(&h->sha, GNUTLS_DIG_SHA3_256); break; | |
81 | #endif | |
82 | default: h->hashlen = 0; break; | |
1ed59855 | 83 | } |
2592e6c0 JH |
84 | } |
85 | ||
86 | ||
87 | void | |
e2e3255a | 88 | exim_sha_update(hctx * h, const uschar * data, int len) |
2592e6c0 JH |
89 | { |
90 | gnutls_hash(h->sha, data, len); | |
91 | } | |
92 | ||
93 | ||
94 | void | |
95 | exim_sha_finish(hctx * h, blob * b) | |
96 | { | |
97 | b->data = store_get(b->len = h->hashlen); | |
98 | gnutls_hash_output(h->sha, b->data); | |
99 | } | |
100 | ||
101 | ||
102 | ||
103 | #elif defined(SHA_GCRYPT) | |
104 | /******************************************************************************/ | |
105 | ||
106 | void | |
1ed59855 | 107 | exim_sha_init(hctx * h, hashmethod m) |
2592e6c0 | 108 | { |
1ed59855 JH |
109 | switch (h->method = m) |
110 | { | |
111 | case HASH_SHA1: h->hashlen = 20; gcry_md_open(&h->sha, GCRY_MD_SHA1, 0); break; | |
112 | case HASH_SHA256: h->hashlen = 32; gcry_md_open(&h->sha, GCRY_MD_SHA256, 0); break; | |
113 | default: h->hashlen = 0; break; | |
114 | } | |
2592e6c0 JH |
115 | } |
116 | ||
117 | ||
118 | void | |
e2e3255a | 119 | exim_sha_update(hctx * h, const uschar * data, int len) |
2592e6c0 JH |
120 | { |
121 | gcry_md_write(h->sha, data, len); | |
122 | } | |
123 | ||
124 | ||
125 | void | |
126 | exim_sha_finish(hctx * h, blob * b) | |
127 | { | |
128 | b->data = store_get(b->len = h->hashlen); | |
129 | memcpy(b->data, gcry_md_read(h->sha, 0), h->hashlen); | |
130 | } | |
131 | ||
132 | ||
133 | ||
134 | ||
135 | #elif defined(SHA_POLARSSL) | |
136 | /******************************************************************************/ | |
137 | ||
138 | void | |
1ed59855 | 139 | exim_sha_init(hctx * h, hashmethod m) |
2592e6c0 | 140 | { |
1ed59855 JH |
141 | switch (h->method = m) |
142 | { | |
143 | case HASH_SHA1: h->hashlen = 20; sha1_starts(&h->u.sha1); break; | |
144 | case HASH_SHA256: h->hashlen = 32; sha2_starts(&h->u.sha2, 0); break; | |
145 | default: h->hashlen = 0; break; | |
146 | } | |
2592e6c0 JH |
147 | } |
148 | ||
149 | ||
150 | void | |
e2e3255a | 151 | exim_sha_update(hctx * h, const uschar * data, int len) |
2592e6c0 | 152 | { |
1ed59855 JH |
153 | switch (h->method) |
154 | { | |
155 | case HASH_SHA1: sha1_update(h->u.sha1, US data, len); break; | |
156 | case HASH_SHA256: sha2_update(h->u.sha2, US data, len); break; | |
157 | } | |
2592e6c0 JH |
158 | } |
159 | ||
160 | ||
161 | void | |
162 | exim_sha_finish(hctx * h, blob * b) | |
163 | { | |
164 | b->data = store_get(b->len = h->hashlen); | |
1ed59855 JH |
165 | switch (h->method) |
166 | { | |
167 | case HASH_SHA1: sha1_finish(h->u.sha1, b->data); break; | |
168 | case HASH_SHA256: sha2_finish(h->u.sha2, b->data); break; | |
169 | } | |
2592e6c0 JH |
170 | } |
171 | ||
5fb822fc JH |
172 | |
173 | ||
174 | ||
175 | #elif defined(SHA_NATIVE) | |
176 | /******************************************************************************/ | |
177 | /* Only sha-1 supported */ | |
178 | ||
179 | /************************************************* | |
180 | * Start off a new SHA-1 computation. * | |
181 | *************************************************/ | |
182 | ||
183 | /* | |
184 | Argument: pointer to sha1 storage structure | |
185 | Returns: nothing | |
186 | */ | |
187 | ||
188 | static void | |
189 | native_sha1_start(sha1 *base) | |
190 | { | |
191 | base->H[0] = 0x67452301; | |
192 | base->H[1] = 0xefcdab89; | |
193 | base->H[2] = 0x98badcfe; | |
194 | base->H[3] = 0x10325476; | |
195 | base->H[4] = 0xc3d2e1f0; | |
196 | base->length = 0; | |
197 | } | |
198 | ||
199 | ||
200 | ||
201 | /************************************************* | |
202 | * Process another 64-byte block * | |
203 | *************************************************/ | |
204 | ||
205 | /* This function implements central part of the algorithm | |
206 | ||
207 | Arguments: | |
208 | base pointer to sha1 storage structure | |
209 | text pointer to next 64 bytes of subject text | |
210 | ||
211 | Returns: nothing | |
212 | */ | |
213 | ||
214 | static void | |
215 | native_sha1_mid(sha1 *base, const uschar *text) | |
216 | { | |
217 | int i; | |
218 | uint A, B, C, D, E; | |
219 | uint W[80]; | |
220 | ||
221 | base->length += 64; | |
222 | ||
223 | for (i = 0; i < 16; i++) | |
224 | { | |
225 | W[i] = ((uint)text[0] << 24) | (text[1] << 16) | (text[2] << 8) | text[3]; | |
226 | text += 4; | |
227 | } | |
228 | ||
229 | for (i = 16; i < 80; i++) | |
230 | { | |
231 | register unsigned int x = W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16]; | |
232 | W[i] = (x << 1) | (x >> 31); | |
233 | } | |
234 | ||
235 | A = base->H[0]; | |
236 | B = base->H[1]; | |
237 | C = base->H[2]; | |
238 | D = base->H[3]; | |
239 | E = base->H[4]; | |
240 | ||
241 | for (i = 0; i < 20; i++) | |
242 | { | |
243 | unsigned int T; | |
244 | T = ((A << 5) | (A >> 27)) + ((B & C) | ((~B) & D)) + E + W[i] + 0x5a827999; | |
245 | E = D; | |
246 | D = C; | |
247 | C = (B << 30) | (B >> 2); | |
248 | B = A; | |
249 | A = T; | |
250 | } | |
251 | ||
252 | for (i = 20; i < 40; i++) | |
253 | { | |
254 | unsigned int T; | |
255 | T = ((A << 5) | (A >> 27)) + (B ^ C ^ D) + E + W[i] + 0x6ed9eba1; | |
256 | E = D; | |
257 | D = C; | |
258 | C = (B << 30) | (B >> 2); | |
259 | B = A; | |
260 | A = T; | |
261 | } | |
262 | ||
263 | for (i = 40; i < 60; i++) | |
264 | { | |
265 | unsigned int T; | |
266 | T = ((A << 5) | (A >> 27)) + ((B & C) | (B & D) | (C & D)) + E + W[i] + | |
267 | 0x8f1bbcdc; | |
268 | E = D; | |
269 | D = C; | |
270 | C = (B << 30) | (B >> 2); | |
271 | B = A; | |
272 | A = T; | |
273 | } | |
274 | ||
275 | for (i = 60; i < 80; i++) | |
276 | { | |
277 | unsigned int T; | |
278 | T = ((A << 5) | (A >> 27)) + (B ^ C ^ D) + E + W[i] + 0xca62c1d6; | |
279 | E = D; | |
280 | D = C; | |
281 | C = (B << 30) | (B >> 2); | |
282 | B = A; | |
283 | A = T; | |
284 | } | |
285 | ||
286 | base->H[0] += A; | |
287 | base->H[1] += B; | |
288 | base->H[2] += C; | |
289 | base->H[3] += D; | |
290 | base->H[4] += E; | |
291 | } | |
292 | ||
293 | ||
294 | ||
295 | ||
296 | /************************************************* | |
297 | * Process the final text string * | |
298 | *************************************************/ | |
299 | ||
300 | /* The string may be of any length. It is padded out according to the rules | |
301 | for computing SHA-1 digests. The final result is then converted to text form | |
302 | and returned. | |
303 | ||
304 | Arguments: | |
305 | base pointer to the sha1 storage structure | |
306 | text pointer to the final text vector | |
307 | length length of the final text vector | |
308 | digest points to 16 bytes in which to place the result | |
309 | ||
310 | Returns: nothing | |
311 | */ | |
312 | ||
313 | static void | |
314 | native_sha1_end(sha1 *base, const uschar *text, int length, uschar *digest) | |
315 | { | |
316 | int i; | |
317 | uschar work[64]; | |
318 | ||
319 | /* Process in chunks of 64 until we have less than 64 bytes left. */ | |
320 | ||
321 | while (length >= 64) | |
322 | { | |
323 | native_sha1_mid(base, text); | |
324 | text += 64; | |
325 | length -= 64; | |
326 | } | |
327 | ||
328 | /* If the remaining string contains more than 55 bytes, we must pad it | |
329 | out to 64, process it, and then set up the final chunk as 56 bytes of | |
330 | padding. If it has less than 56 bytes, we pad it out to 56 bytes as the | |
331 | final chunk. */ | |
332 | ||
333 | memcpy(work, text, length); | |
334 | work[length] = 0x80; | |
335 | ||
336 | if (length > 55) | |
337 | { | |
338 | memset(work+length+1, 0, 63-length); | |
339 | native_sha1_mid(base, work); | |
340 | base->length -= 64; | |
341 | memset(work, 0, 56); | |
342 | } | |
343 | else | |
344 | { | |
345 | memset(work+length+1, 0, 55-length); | |
346 | } | |
347 | ||
348 | /* The final 8 bytes of the final chunk are a 64-bit representation of the | |
349 | length of the input string *bits*, before padding, high order word first, and | |
350 | high order bytes first in each word. This implementation is designed for short | |
351 | strings, and so operates with a single int counter only. */ | |
352 | ||
353 | length += base->length; /* Total length in bytes */ | |
354 | length <<= 3; /* Total length in bits */ | |
355 | ||
356 | work[63] = length & 0xff; | |
357 | work[62] = (length >> 8) & 0xff; | |
358 | work[61] = (length >> 16) & 0xff; | |
359 | work[60] = (length >> 24) & 0xff; | |
360 | ||
361 | memset(work+56, 0, 4); | |
362 | ||
363 | /* Process the final 64-byte chunk */ | |
364 | ||
365 | native_sha1_mid(base, work); | |
366 | ||
367 | /* Pass back the result, high-order byte first in each word. */ | |
368 | ||
369 | for (i = 0; i < 5; i++) | |
370 | { | |
371 | register int x = base->H[i]; | |
372 | *digest++ = (x >> 24) & 0xff; | |
373 | *digest++ = (x >> 16) & 0xff; | |
374 | *digest++ = (x >> 8) & 0xff; | |
375 | *digest++ = x & 0xff; | |
376 | } | |
377 | } | |
378 | ||
379 | ||
380 | ||
381 | ||
382 | ||
383 | ||
384 | # ifdef notdef | |
385 | void | |
1ed59855 | 386 | exim_sha_init(hctx * h, hashmethod m) |
5fb822fc JH |
387 | { |
388 | h->hashlen = 20; | |
389 | native_sha1_start(&h->sha1); | |
390 | } | |
391 | ||
392 | ||
393 | void | |
394 | exim_sha_update(hctx * h, const uschar * data, int len) | |
395 | { | |
396 | native_sha1_mid(&h->sha1, US data); /* implicit size always 64 */ | |
397 | } | |
398 | ||
399 | ||
400 | void | |
401 | exim_sha_finish(hctx * h, blob * b) | |
402 | { | |
403 | b->data = store_get(b->len = h->hashlen); | |
404 | ||
405 | native_sha1_end(&h->sha1, NULL, 0, b->data); | |
406 | } | |
407 | # endif | |
408 | ||
409 | ||
2592e6c0 JH |
410 | #endif |
411 | /******************************************************************************/ | |
412 | ||
413 | /* Common to all library versions */ | |
414 | int | |
415 | exim_sha_hashlen(hctx * h) | |
416 | { | |
1ed59855 JH |
417 | return h->method == HASH_SHA1 ? 20 |
418 | : h->method == HASH_SHA256 ? 32 | |
419 | : 0; | |
5fb822fc JH |
420 | } |
421 | ||
422 | ||
423 | /******************************************************************************/ | |
424 | /******************************************************************************/ | |
425 | /******************************************************************************/ | |
426 | /******************************************************************************/ | |
427 | /* Original sha-1 interface used by crypteq{shal1}, | |
428 | ${sha1:} ${hmac:} and ${prvs:} */ | |
429 | ||
430 | #ifdef SHA_NATIVE | |
431 | ||
432 | void | |
433 | sha1_start(hctx * h) | |
434 | { | |
435 | native_sha1_start(&h->sha1); | |
436 | } | |
437 | ||
438 | void | |
439 | sha1_mid(hctx * h, const uschar * data) | |
440 | { | |
441 | native_sha1_mid(&h->sha1, data); | |
2592e6c0 JH |
442 | } |
443 | ||
5fb822fc JH |
444 | void |
445 | sha1_end(hctx * h, const uschar * data, int len, uschar *digest) | |
446 | { | |
447 | native_sha1_end(&h->sha1, data, len, digest); | |
448 | } | |
449 | ||
450 | #else | |
451 | ||
452 | void | |
453 | sha1_start(hctx * h) | |
454 | { | |
1ed59855 | 455 | exim_sha_init(h, HASH_SHA1); |
5fb822fc JH |
456 | } |
457 | ||
458 | void | |
459 | sha1_mid(hctx * h, const uschar * data) | |
460 | { | |
461 | exim_sha_update(h, data, 64); | |
462 | } | |
463 | ||
464 | void | |
465 | sha1_end(hctx * h, const uschar * data, int len, uschar *digest) | |
466 | { | |
467 | blob b; | |
468 | exim_sha_update(h, data, len); | |
469 | exim_sha_finish(h, &b); | |
470 | memcpy(digest, b.data, 20); | |
471 | } | |
472 | ||
473 | #endif | |
474 | ||
475 | ||
476 | ||
477 | ||
478 | ||
479 | ||
480 | /************************************************* | |
481 | ************************************************** | |
482 | * Stand-alone test program * | |
483 | ************************************************** | |
484 | *************************************************/ | |
485 | ||
486 | # ifdef STAND_ALONE | |
487 | ||
488 | /* Test values. The first 128 may contain binary zeros and have increasing | |
489 | length. */ | |
490 | ||
491 | static uschar *tests[] = { | |
492 | "", | |
493 | "\x24", | |
494 | "\x70\xf0", | |
495 | "\x0e\x1e\xf0", | |
496 | "\x08\x38\x78\x8f", | |
497 | "\x10\x3e\x08\xfc\x0f", | |
498 | "\xe7\xc7\x1e\x07\xef\x03", | |
499 | "\xe0\xfb\x71\xf8\xf9\xc1\xfc", | |
500 | "\xff\x7c\x60\x3c\x1f\x80\xe2\x07", | |
501 | "\xf0\x3f\xc8\x60\x81\xfe\x01\xf8\x7f", | |
502 | "\x9f\xc7\xf8\x1f\xc1\xe3\xc7\xc7\x3f\x00", | |
503 | "\x00\x7f\xbf\xdf\xc0\xfe\x02\x7e\x00\xf8\x7f", | |
504 | "\x01\x01\xc0\x1e\x03\xf8\x30\x08\x0f\xf3\xf9\xff", | |
505 | "\xc4\x03\xfc\x0f\xf8\x01\xc0\x0f\xf0\x06\x10\x41\xff", | |
506 | "\xff\x07\x80\x47\xfc\x1f\xc0\x60\x30\x1f\xe0\x3c\x03\xff", | |
507 | "\x80\x3f\x84\x3e\xff\xc0\x3f\x0f\x00\x7f\xc0\x1f\xe7\xfc\x00", | |
508 | "\xff\xe0\x7f\x01\x81\x81\xff\x81\xff\x00\x3e\x00\x20\x7f\x80\x0f", | |
509 | "\x00\x3e\x00\x70\x1f\xe0\x0f\xfa\xff\xc8\x3f\xf3\xfe\x00\xff\x80\xff", | |
510 | "\x7f\xef\xc0\x1e\x7c\xff\xe0\x1f\xfe\x00\x1f\xf0\x08\xff\xc0\x7f\xf0\x00", | |
511 | "\xe0\x0f\x80\x07\x0c\x01\xff\xe0\x03\xf0\x2f\xf8\x3f\xef\x00\x78\x01\xfe\x00", | |
512 | "\xe7\x00\x10\x00\xf8\x18\x0f\xf0\xff\x00\xff\x80\x3f\xc3\xfe\xf0\x0f\xfc\x01\xff", | |
513 | "\x00\x1f\xf8\x0f\xfc\x00\xfc\x00\xff\x87\xc0\x0f\x80\x7b\xff\x00\x0f\x02\x01\xff\xc0", | |
514 | "\x00\x0f\xf0\x03\xc7\xf8\x3e\x03\xff\x80\x03\xff\x80\x07\xff\x0f\xff\x1f\x83\xff\x80\x1f", | |
515 | "\xff\xc0\x1f\x80\x3f\x9f\xf8\x78\x3e\x7f\xf8\x00\x3e\x20\x04\x3f\x80\x7f\xfc\x00\x1f\xfe\x00", | |
516 | "\x3f\x07\x80\xe0\x07\xe0\x00\xfc\x7f\xc0\xc0\x0f\x8f\xf0\x80\x0e\x0e\x03\xff\xbf\xfc\x01\xff\xe0", | |
517 | "\xff\xfc\x11\xfc\xe0\x0e\x1f\xff\x87\x80\x1f\xe0\xff\xfd\xff\xc0\x03\xff\xc0\x0f\x00\x07\xf0\x01\xff", | |
518 | "\xf0\x07\xc1\xfe\x00\xf8\x01\xe7\x80\xff\x80\x3f\x1f\x7f\x8c\x00\x1c\x00\x0f\xf8\x07\xfc\x00\xff\xfc\x00", | |
519 | "\x00\x0f\xf8\x3f\xc0\x60\x00\x7f\xf8\xff\x00\x03\xf0\x3c\x07\xc0\x7f\xe0\x3f\xf8\x01\x00\x7e\x03\xff\xc0\x00", | |
520 | "\x00\x0f\xf8\x03\x00\x1f\xff\x00\x0f\xfe\x00\x3f\x00\x03\xff\xe0\x07\xc0\xff\x00\x3c\x7f\xf0\x01\xff\xf8\x3f\xff", | |
521 | "\x00\x01\xe0\xe0\x1f\xfe\x00\x03\xfc\x00\x0f\xff\xe0\x0f\xff\x00\x0e\x00\x7f\xfc\x0f\xfe\x00\x78\x00\x3f\xff\x00\xff", | |
522 | "\x80\x41\xff\xc3\xfe\x00\x1e\x00\x0f\xff\xe0\xff\x80\x0f\xe0\x00\x7f\xf7\xff\x01\xfe\x01\xff\xdf\xff\x00\x01\xff\xe0\x00", | |
523 | "\xf8\x07\x00\xff\xc0\x7f\xbe\x00\x0f\xff\x00\x03\xe3\xf0\xff\xf0\x00\x1f\x81\xff\x80\x0f\xff\x80\x20\x03\xf0\x03\x80\xff\xfc", | |
524 | "\x00\x38\x20\x00\x7f\xf0\x01\xff\xfe\xcf\xfe\x07\xff\xc0\x00\x7f\xf8\x1f\x00\x00\xc0\x00\xc0\x0f\xff\x3e\x0f\xc0\x0f\xff\x80\x00", | |
525 | "\x1f\xf8\x07\xff\xf8\x03\xe0\x01\xff\xfc\x3f\xf8\x00\x38\x1f\x00\x3f\xdc\x01\xc0\x04\xff\xff\x00\x0f\xfc\x08\x02\x00\x01\xf0\x3f\xff", | |
526 | "\x80\x07\x86\x00\x03\xff\xe0\x00\x3f\xf8\x00\x0f\x80\x0f\xf8\x0f\xff\xe0\x00\x1f\x80\x00\x7f\xf8\xc0\x0f\xff\xf0\x7c\x04\x07\xff\x00\x00", | |
527 | "\x01\xff\x00\x18\x3e\x0f\x00\x07\xff\xc0\x00\xf0\x1f\xfe\x07\x80\x60\x0f\xf8\x00\x3f\xfe\x38\x1f\xc0\x00\x3f\x81\xff\xfc\x1f\xe0\x00\x3f\xff", | |
528 | "\xf0\x3f\xff\xc0\x00\x7f\xf0\x00\x3f\xff\x0f\xe0\x07\x0f\xfc\x7e\x03\xff\xf0\xfc\x0f\x9f\xc0\x3f\xff\xcf\xff\x00\x00\xff\xc0\x00\xe7\x01\xff\xf8", | |
529 | "\x00\x01\xff\x80\x20\x00\x7f\xe0\x00\x7e\x07\xff\xf8\xc7\xf8\xff\xf0\x0f\xfe\x00\x00\xe0\x0f\xe0\x00\x1f\xff\x87\xff\x00\x01\xf0\x00\x7f\xc1\xff\xff", | |
530 | "\x00\x00\x7f\xff\xc0\x01\xfe\x7e\x01\xff\xfe\xff\xf0\x7f\xff\xcf\xf8\x07\xfe\x00\x0f\xff\xc0\x07\xff\xfc\x00\x3e\x00\x07\xfc\x00\x7f\xc0\x07\x80\x0f\xff", | |
531 | "\xff\xff\x03\xff\x07\xf8\xff\xff\x80\x00\x7f\xfe\xff\xfe\x00\x03\xff\xf8\x1f\xff\x3f\xf8\x1f\xff\x00\x1f\xff\x0f\xc0\x7f\xf0\x01\xff\xe0\x00\x1f\xff\x00\x00", | |
532 | "\xff\xff\x00\x00\xff\xfc\x00\x03\x0f\xff\xf0\x01\xf8\x00\x0f\xe1\xff\xff\x03\xe0\x3f\x1f\xff\x80\x00\x7c\x00\x01\xff\xc0\x01\x7f\xfe\x00\x0e\x07\xff\xe0\xff\xff", | |
533 | "\xc0\x00\x3f\xfe\x03\xfc\x0c\x00\x04\x01\xff\xe1\xe0\x03\xff\xe0\x30\x01\xff\x00\x00\x3c\x1e\x01\x80\x01\xff\x00\x40\x3f\xfe\x00\x3f\xff\x80\x7c\x01\xff\x80\x00\x7f", | |
534 | "\x3f\xa0\x00\x0f\xff\x81\xff\xc0\x0f\xf0\x7f\xf8\x00\x0f\xc0\x00\x7f\xe0\x01\xe0\x00\x04\xff\x00\x1f\xfe\x00\x01\xff\x80\x07\xff\xfe\x00\x3f\xff\xc0\x03\xff\x80\x00\x3f", | |
535 | "\xf0\x1f\xff\x01\xff\x80\xff\xc0\x80\x07\xf0\x00\x03\xff\x80\x00\x18\x01\xff\xfc\x00\xff\xfc\x03\xff\xff\x00\x7f\xc0\x03\xff\xc7\xff\xc0\x03\xf0\xff\x80\x00\x3f\xfe\x00\x00", | |
536 | "\x07\xf1\xbf\xff\xe0\x00\x78\x00\x07\xe0\x00\x80\x03\xf0\x3f\xf7\x00\x00\x38\x00\xfe\x00\xf8\x0f\xfe\x00\x00\x80\x3f\xff\xc1\xff\xfc\x00\xff\xff\x8f\xf0\x00\x1f\xff\xf0\x0f\xff", | |
537 | "\x00\x1c\x00\x07\xff\xfc\x00\x5e\x3f\xff\x00\x00\x3c\xff\xff\xc0\x3f\xff\x81\xe0\x70\x00\x1f\xfc\x00\x03\xff\x00\x00\x7f\xff\xc0\x1f\x8c\x0f\xff\xf0\xff\x80\x07\xe0\x10\x01\xff\xff", | |
538 | "\xc0\x00\x07\xff\x80\x7f\xff\x80\x01\x80\x3f\xff\xcf\xc0\xfe\x00\xff\xc0\x1f\xfc\x01\xff\xf8\x00\xff\xfe\x0f\xff\xf0\x06\x00\x00\xc0\x3f\xff\x80\x78\xff\xfc\x00\x0f\xff\xf0\x00\x0f\xff", | |
539 | "\xff\xe0\x07\xff\xf8\x00\x7f\xf0\x1f\xff\x80\x01\xff\xf8\x1f\xf8\x01\x03\xff\xe0\x00\x03\xe0\x78\x0f\xff\x00\x0f\xfc\x1f\xf8\x00\x0f\xff\xe0\x1f\x00\x07\xff\xfc\x00\x1f\x03\xff\xf7\xff\xff", | |
540 | "\xc0\xf8\x00\x03\xfe\x00\x3f\xff\xf0\x00\x03\xfc\x0f\xff\x80\x00\xe3\xff\xf8\x3f\xfe\x00\x00\x73\xe0\xff\xfc\x07\xff\xc3\xff\xfe\x03\x00\x00\x70\x00\x03\xff\xf8\x0f\xff\xe0\x00\x1f\xff\xf8\x00", | |
541 | "\xff\xf0\x0f\xc7\xff\xfc\x00\x3f\xfe\x00\x00\x3f\xff\x80\x3f\x80\x00\x3f\xff\xc0\x00\x70\x01\xff\xc1\x80\x03\xff\xff\x80\x00\x61\xff\xfe\x03\xfd\x80\x3f\xff\xe0\x01\xc1\xff\xff\x80\x00\x0f\xfe\x00", | |
542 | "\xff\xfc\x00\x03\xff\xf0\x0f\xf8\x00\x07\xdf\x8f\xff\xf8\x00\x01\xff\xfe\x00\x80\x00\xff\x80\x1f\xf0\x00\x01\x1c\x00\x00\x3f\xf8\x00\x3f\xff\xef\xff\xfe\x01\xc3\x80\x80\x01\xff\xff\xc0\x00\x07\xff\xff", | |
543 | "\xff\xff\xc0\x01\xff\xc1\xff\xff\x87\xff\xff\x00\x3f\x00\x00\x1f\xfc\x00\x01\xff\x80\x1f\xc0\x1f\xff\x00\x00\xff\x80\x1f\xff\xf8\x7f\xf8\x3f\xff\xc1\xff\xff\xe0\x01\xc0\x3f\xf7\xff\xfe\xfc\x00\x00\x3f\xff", | |
544 | "\x00\xff\x81\xff\xe0\x03\xf8\x0e\x00\x00\xff\xf8\x1f\xff\xfe\x00\x00\xff\x80\x00\x07\xff\xf8\x01\xff\xe0\x00\x0f\xf0\x01\xfe\x00\x3f\xf0\x7f\xe0\x00\x7f\xff\xe0\x1f\xff\xfc\x01\xff\xe0\x01\x80\x00\x07\xff\xff", | |
545 | "\x00\x0f\xff\xf0\x00\x00\xe0\x0f\xf8\x00\x00\xff\xff\x80\x03\xff\xe1\xff\xff\x3f\xf8\x0f\xff\xc7\xe0\x00\x1f\xff\x00\x3f\xfe\x0f\xff\xf0\x03\x00\xc0\x00\x1f\xff\xfc\x3f\xff\xe0\x3f\xff\xf8\x1f\xf0\x00\x1f\xff\xc0", | |
546 | "\x01\x80\x00\x1f\x01\xff\xff\x83\x00\x01\xfc\x00\x7f\xe0\x0e\x7f\xfe\x00\x00\x38\x00\xff\x00\x00\x3f\xff\x83\x83\xff\xc0\x00\x7f\xff\x80\x1f\xff\xf0\x1f\xff\xfc\x00\x03\x7f\xff\x81\xc0\x00\x07\xff\x83\xff\xff\x00\x00", | |
547 | "\xff\x80\x0d\xff\xe0\x03\xff\xf0\x00\xff\xfc\x00\xf0\x01\xf8\x07\xff\xf8\x0f\x80\x0f\xff\xff\x00\xff\xff\x87\xff\xe1\xff\xfc\x67\x8c\x7f\xfe\x00\x03\xff\x3f\xfc\x07\x01\xff\xff\xe0\x00\x01\xff\xff\xc0\x0c\x40\x0f\xff\xff", | |
548 | "\x00\x00\x1f\xff\xfe\x00\x1f\x00\x00\x1f\xff\xff\x07\xff\xff\xc0\x07\xff\xe0\x00\x02\x00\x00\xff\x00\x78\x00\x00\xe0\x00\x08\x00\x1f\xff\xff\x00\x03\xf8\x1f\x00\x00\x0f\xff\xc0\x00\x01\xff\xff\xe1\xf8\x00\x00\x3f\x80\x0f\xff", | |
549 | "\x00\x0f\xf8\x00\xfc\x00\x03\xff\xff\x00\x00\x3f\xf0\x01\xff\xff\xe0\x7f\xf8\x00\xf8\x0f\xff\xff\x80\x00\x0f\xff\xfc\x0f\xff\xe0\x00\x00\xff\xc3\xff\xf0\x07\xff\xff\x00\x38\xf8\x00\x20\x1f\xfe\x3f\xfe\x00\xfe\x00\x7f\xff\xc0\x00", | |
550 | "\x00\x3f\x00\xe0\x00\x0f\xff\xfc\x7f\xff\xfc\x00\x00\x7e\x00\x00\xff\xfe\x1f\xf0\x00\x1f\xf0\x00\x1f\xff\x87\xf0\x00\x3f\xc0\x0f\xff\x87\xff\x00\x3f\x81\xff\xff\xf7\xff\xe0\xff\xe0\x3f\x9f\xff\x00\x07\x00\x7f\xfc\x03\xff\xf0\x00\x00", | |
551 | "\xe0\x3f\xff\xf0\xff\x80\x3e\x00\x03\xff\xe0\x00\x0f\xfc\x00\x07\xff\xf8\x00\x00\x7f\x80\x00\x0f\xf8\x01\xff\x7f\xff\xf0\x00\x3f\xff\xfe\x7f\xff\xe0\x00\xff\xc3\xff\xff\x00\x00\xf0\x00\x00\x7f\xff\x00\x3f\xff\xf0\x00\x01\xc0\x03\xff\xff", | |
552 | "\x00\x03\xc0\x01\xff\xdf\xfd\xff\x9f\xfe\x1f\xff\xff\x00\x3f\xff\xfe\x00\x00\x7f\xcf\xff\xf0\x1f\xff\xfe\x07\xf0\x00\xff\xff\xe0\x00\x01\x00\x07\xff\x80\x1f\xe0\x00\x00\xff\xfe\x03\xff\xff\x80\x03\xf0\x0f\xff\xfe\x00\x00\x1f\xff\xf8\x00\x00", | |
553 | "\x00\x1f\xff\xfb\xff\xfe\x00\x07\xff\xf0\x00\x00\xff\xff\x00\x00\x0f\xf3\xff\xfe\x00\x78\x00\x00\x3e\x00\x00\x3f\xff\xf8\x00\x1f\xff\xff\x80\x00\x03\xff\xff\x00\x07\xff\xee\x00\x1f\xfc\x00\x78\x00\x00\x1f\xff\x07\xff\xfe\x03\xff\xff\xe0\x00\x00", | |
554 | "\x00\x7f\xff\xfe\x00\x00\x3f\xfc\x03\xff\xfc\x1f\xff\xf0\x7f\xd8\x03\xf0\x00\xfd\xfc\x38\x00\x08\x00\x10\x00\xe0\x06\x00\x7f\xfe\x00\x00\x0f\xff\x80\x00\x3f\x03\xff\xfe\xff\xff\xf9\xff\xf8\x00\x07\xff\xfc\x01\xff\xc0\x00\x03\xff\xff\xe0\x03\xff\xff", | |
555 | "\xff\xf0\x0f\xff\xff\x00\x06\x00\xff\xff\xf0\x07\xff\xe0\x04\x00\x03\x00\x00\x03\xf0\xff\xff\x00\x03\xff\xfb\xff\xc3\xff\xf0\x07\xff\xff\xc7\x00\x7f\x80\x00\x03\xff\xf8\x00\x1f\xe1\xff\xf8\x63\xfc\x00\x3f\xc0\x9f\xff\xf8\x00\x00\x7f\xff\x1f\xff\xfc\x00", | |
556 | "\x00\x3f\xff\xfc\x00\x0f\xc7\x80\x00\x02\x00\x1e\x00\x00\x60\x7f\x03\xfe\x00\x00\x1f\xff\x80\x1f\xf8\x00\x00\xff\xff\x80\x00\x03\xff\xc0\x00\x7f\xff\xc0\x7f\xe0\x03\xfc\x00\xff\xf7\xff\xff\x00\x00\x1f\xf0\x00\x03\xff\xff\xe1\xff\xff\x80\x0f\xf8\x00\x00\x1f", | |
557 | "\x00\x01\xfe\x00\x03\x83\xf3\xff\xff\x80\x07\xff\xfc\x3f\xff\xfc\x03\xff\x80\x00\x06\x00\x00\x78\x00\x07\xff\xff\x80\x07\xfc\x01\xf8\x00\x07\xff\xff\xc0\x00\x38\x00\x07\xff\xfe\x3f\xff\xf8\x3f\xff\xcf\x3f\xfc\x00\x7f\xff\x00\x1f\xff\x80\x00\x30\x03\xff\xff\x00", | |
558 | "\xf8\x00\x38\x00\x00\x3e\x3f\x00\x00\x3f\xff\xf0\x02\x00\x00\x0f\xff\xff\x80\x80\x03\xff\xc0\x00\x04\x00\x0f\xc0\x3f\xff\xfe\x00\x00\x3f\xff\xfe\x00\x3f\xff\xf8\x00\x30\x00\x7b\xff\x00\x00\x03\xff\xfc\x3f\xe1\xff\x80\x00\x70\x1f\xff\xc0\x07\xfc\x00\x1f\xff\xf0\x00", | |
559 | "\x00\x03\xf8\x18\x00\x00\x70\x3f\xff\xf8\x00\x00\xff\xcf\xff\xff\xc0\x03\xff\xfe\x00\x10\x00\x00\xfe\x03\xff\xf8\x00\x00\x7e\x00\x00\x7f\x8f\xff\xc0\x00\x00\x7f\xff\xe0\x00\x3c\x07\xc0\x00\x00\x7f\xff\x01\xff\xf8\x01\xff\x80\x00\x0f\xff\xf9\xe0\x00\x3f\xff\xe0\x00\x00", | |
560 | "\xff\xfe\x00\x3f\xc0\x1f\xff\xf0\x7f\xf8\x00\x01\xff\xf8\x1f\xff\xfe\x00\x00\xff\xff\xf8\x00\x7f\xff\x80\x3f\xff\xff\x00\x7f\xff\xf8\x00\x0c\x00\x00\x0f\xfe\x7e\x00\x3f\xe0\x18\x7f\xfe\x00\x00\x38\x00\x00\x3f\xff\xfe\x00\x00\x03\xfc\xff\xe1\xfe\x1f\xff\xfe\x00\x00\x07\xff", | |
561 | "\x00\x00\x07\xff\xfe\x00\x00\x07\xfe\x00\x00\x3f\xe0\x00\x7f\xff\xc0\x00\x00\x7f\xff\xfc\x00\xfe\x00\x03\xff\xe0\x00\x1f\x0f\xfc\x00\x1f\xff\x80\x00\x07\xff\xff\xf0\x00\xff\xff\xf0\x00\x00\x1f\xff\xf8\x01\xff\xe0\x1f\xff\xff\x00\x1f\x80\x07\xf0\x00\x01\xff\xf8\x00\x01\xff\xff", | |
562 | "\x00\x00\x3f\xff\xff\x03\xfe\x00\x00\x07\xc0\x00\x00\x7f\xfc\x0f\xf0\x00\x00\x1f\xff\xfe\x00\x00\x07\xc0\x00\x00\xff\xfe\x00\x00\x3f\xff\xfc\x01\xff\x7f\xfc\x00\x1f\xf8\x00\x1f\xff\x07\xff\xff\xe0\x00\x7f\xff\xfc\x01\xff\xff\xf0\x00\x01\xff\xf8\x00\x1e\x00\x00\x7f\xfc\x00\x3f\xff", | |
563 | "\xfe\x3f\xff\x83\xff\xfe\x00\x07\xff\xff\xf0\x00\x3e\x00\x00\xff\xff\xfc\x00\x40\x3f\xfe\x00\x00\x03\xf0\x00\x00\x70\x3f\xf8\x0f\xff\xff\xe0\x1f\x80\x00\x03\xc3\xff\xff\xf0\x00\x01\xff\xf0\x0f\x80\x00\x0f\xe0\xff\xff\xfe\xf0\x00\x01\xff\xc0\x00\x00\x7f\xf0\x00\x00\x7f\xfe\xe0\x00\x00", | |
564 | "\x00\x00\x03\xff\xf0\x01\xfc\x00\x00\xff\xff\x00\x00\x7f\xff\xff\x80\x07\xff\x8f\xff\x80\x00\x0f\xff\xf0\x00\x00\x3c\x00\x03\xc0\xff\xff\xfe\x01\xff\xff\x80\x0c\x7f\xff\xf8\x00\x00\x1f\xf0\x00\x00\x7f\x80\x00\x00\x80\x00\x00\xff\xff\xf0\x1f\xff\xe0\x00\xff\xff\xfe\x1f\xff\x1f\xc0\x00\x00", | |
565 | "\xff\xff\xfe\x07\xff\xc0\x00\x06\x3f\x9f\xf0\x07\xff\xf0\x3f\xfe\x1f\xff\xff\x81\xff\xff\xc0\x00\x02\x00\xfe\x00\x04\x00\x07\x00\x00\x01\xff\xff\xfe\x00\x00\x07\xff\xfe\x00\x1f\xfe\x00\x00\xff\xff\xe0\x07\xf8\x00\xff\xff\xfc\x00\x3f\xf3\xff\xff\xc0\x00\x7f\xff\xe0\x00\x0f\xff\xfc\x07\xff\xff", | |
566 | "\xff\xf0\x00\x00\x7e\x00\x1e\x03\xff\xff\x00\x00\x73\xff\xf0\x00\x00\x0f\xff\xdf\xff\xff\xdf\xfc\x00\x07\xfe\x07\xff\xfe\x00\x00\x1f\xdf\xef\xff\xf0\x3f\xff\xfc\x00\x00\x07\xff\xff\xf0\x00\x00\x7f\xe0\x07\xff\x80\x00\x00\x7f\xe0\x03\xff\xff\xf9\xff\xe0\x00\x00\x3f\xe3\xff\xff\xfc\x00\x00\x03\xff", | |
567 | "\x00\x03\xff\x00\x00\x3f\xff\x80\x01\xf0\x00\x0f\xfe\x00\x00\x06\x00\x03\xff\xff\xfc\x03\xff\xff\xf7\x80\x00\x00\x7f\xc0\x0f\xff\xe3\xfe\x0f\x00\x00\x7f\xff\x00\x7f\xf8\x00\x00\xff\xff\xee\x00\x7e\x01\xc0\x00\x1f\xe0\x00\x07\xff\xff\xf8\x00\x00\xe1\xff\xfc\x3f\xe7\xff\xff\xf8\x3f\xff\xfc\x00\x1f\xff", | |
568 | "\x00\x00\x0f\xff\xf8\x00\x00\xff\xff\xfc\x00\x1f\xe0\x07\xff\xff\x00\x01\xff\xdf\xff\x80\x00\x3f\xff\xfc\x00\x00\x0f\xfc\x07\xff\x00\x00\xff\x80\x00\x03\xff\xff\xf0\x00\x07\xff\xff\xf0\x00\xff\xfe\x1f\xff\xff\xe0\x3f\xff\xfe\x00\x00\x60\x00\x00\xff\xff\x7f\xff\xf0\x00\x03\xff\xff\xc0\x07\x00\x01\xff\xff", | |
569 | "\x00\x00\x20\x7f\xfe\x0f\x83\xff\xff\x80\x03\xff\x00\x00\x00\xff\xff\xe0\x00\x1f\xff\xff\xe0\x00\x3f\xfe\x7f\xff\xf0\x00\x1f\xff\xff\xe0\x00\x00\xff\xff\x87\xff\xc0\x00\x17\xfd\xff\x9f\xff\xfb\xff\xff\xe0\x00\x03\xe0\x00\x07\xff\x9f\xff\xff\x80\x00\x7f\xff\xff\x00\x01\xff\xff\xc0\xff\xff\xc0\x10\x00\x00\x1f", | |
570 | "\x00\x00\x07\xff\xc0\x00\xff\xe0\x00\x07\xff\x80\x03\x80\x00\x0f\xf8\x00\x00\x7f\xff\xfe\x00\x00\x18\x00\xff\xf0\x20\x01\xff\xfe\x00\x00\x60\x0f\xf0\xe0\x03\xff\xfe\x00\x3e\x1f\xff\xfc\x00\x03\xff\x80\x00\x00\xff\xf8\x00\x01\x00\x00\x0f\xf3\xff\xfc\x00\x03\xff\xff\xe1\xff\xff\xc1\xf0\x00\x00\xff\xff\xff\x00\x00", | |
571 | "\xff\xff\xf0\x00\x00\x07\xff\xfc\x00\x7f\x87\xff\xff\x00\x00\x00\x7f\xff\xc0\x7f\xff\x80\x00\x03\xf0\xff\x3f\xff\x80\x30\x07\xff\xff\x1f\x8e\x00\x7f\xff\xff\xc0\x01\xff\xfc\x07\xf8\x00\x00\x7f\xff\xfc\x00\x3f\xf0\x00\xf8\x00\x00\x07\xff\x00\x00\x0e\x00\x0f\xff\x80\x00\x7f\xc0\x01\xff\x8f\xf8\x00\x07\x01\xff\xff\xff", | |
572 | "\xff\x80\x3f\xff\x3f\xfe\x00\x00\xff\xff\xff\x9f\xff\xf8\x3f\xff\xf8\x00\x00\x0f\xf8\x00\x00\x03\xfe\x00\x7f\xff\xff\x00\x0f\xff\x01\xff\xf0\x0f\xff\xe0\x20\x7f\xff\xfc\xff\x01\xf8\x00\x07\xff\xe0\x00\x7f\xf8\x00\x0f\xff\x80\x00\x00\x7f\xe0\x00\x3f\xf8\x01\xfe\x00\x07\xff\xf0\x00\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff", | |
573 | "\x00\x7f\xff\xe0\x00\x01\xff\xff\xf8\x00\x00\x3f\xff\xfc\x00\x7f\xfe\x00\x00\x03\xff\xff\xf0\x03\xff\xe0\x00\x7f\x80\x00\x0f\xff\x3f\xf8\x00\x00\x7f\xff\xff\x00\x07\x80\x1f\x83\xf8\x00\x00\x0f\xfe\x3f\xff\xc0\x3f\xff\xfe\x1f\xe0\x00\x07\xc0\x03\xff\xf0\x0f\xc0\x00\x03\xff\xff\x80\x00\x00\x7f\x80\x00\x00\xff\xff\x80\x00\x00", | |
574 | "\xfe\x00\x00\x20\x00\x04\x00\x0f\xff\xff\xc0\x01\xff\xf8\x3f\xc0\x00\x00\xff\xff\xc0\x00\xff\xff\xff\x80\x00\x3f\xf8\x00\x7f\xff\xfe\x7f\xf8\x00\x7f\xff\x80\x07\xff\xc0\x00\x0f\xff\xf8\x00\x7f\xff\xc0\x00\xff\xff\xc0\x3f\xff\xff\xe0\x0f\xff\xff\xe0\xe0\x1f\xff\x80\x00\x00\x7f\xff\xc0\x71\xff\xff\xfc\x00\x01\xff\xff\xf8\x00\x00", | |
575 | "\xff\xff\xe0\x00\x0f\xff\xf0\x00\x00\x3f\xff\xff\xc0\x00\xff\xff\x00\x00\x0f\xff\xff\xe0\x00\x01\xff\x00\x00\x1f\xff\xe0\x3f\xfc\x00\x03\xe0\x1f\xf0\x1f\xf8\x00\x00\x3f\xff\xff\xc0\x0f\xfe\x00\x00\x20\x00\x00\xff\xfc\x00\x0f\xff\xfe\x3f\xff\xff\x00\xff\xf0\x00\x00\x80\x00\x1f\x03\xe0\x01\xff\xfa\x00\x3f\xe0\x00\x00\x70\x00\x00\x0f", | |
576 | "\xfd\xff\xc0\x00\x20\x01\xfe\x00\x3f\xf8\x00\x03\xff\x00\x00\x03\xf8\xff\xcf\xc3\xff\xff\xfc\x00\x03\xff\xff\xfc\x00\x00\x78\x3f\xff\xf0\x01\xff\xe0\x0f\xff\xff\x00\x00\x07\xff\xff\xfc\xff\xff\xf8\x00\x01\xff\x80\x00\x07\xff\xff\xfc\x00\x00\x1c\x00\x01\xff\xff\x07\xf8\x00\x00\x1f\xff\xff\xf0\x00\x01\xfe\x00\x7f\xff\xf0\x1f\xfc\x00\x00", | |
577 | "\x00\x00\x00\x3f\xff\x00\x00\x07\xff\xff\xfc\x00\x00\x01\xe0\x0f\xff\x83\xfc\x01\xff\xff\xf0\x0f\xff\x00\x00\x00\x3f\xff\xff\xc0\x1f\xff\xff\xe0\x00\x20\x00\x00\x3f\xff\xff\x00\x00\xff\xfc\x03\xff\xff\xf0\x00\x1f\xff\xfc\x00\x00\x03\xff\xff\xc0\x7f\x80\x00\xff\xff\xff\x00\x0f\x0f\xff\xff\xe0\x00\x00\xff\xf8\x00\x00\xff\xfe\x00\x00\x0f\xff", | |
578 | "\xff\xfe\x03\x80\x00\x03\xff\xff\xc0\x3f\xff\xff\x00\x03\xff\xff\xf8\x00\x00\x01\xff\xff\xcf\xfc\x00\x00\xe0\xef\xf8\x00\x0f\xff\xe3\xf8\x00\x3f\xff\xff\x80\x3f\xbf\xfe\x00\x00\xff\xfc\x00\x00\x01\xff\x00\x00\xcf\xc0\x01\xfc\x00\x00\x7f\xff\xff\xc0\x00\x10\x7f\xff\xfc\xfe\x00\x00\x07\xc0\xff\xff\xff\x8f\xff\x00\x00\x1f\x9e\x00\x00\x01\xff\xff", | |
579 | "\x00\x7f\xff\xe0\x00\x01\xff\xff\xc3\xff\x80\x01\x03\xfc\x00\x00\x00\xfc\x01\xff\xff\xf8\x7f\xe7\xf0\x00\x00\x7f\xc0\x3f\xff\xff\xc0\x00\x00\x1f\xff\x80\x00\x01\xff\xe0\x00\x00\x70\x00\x00\x1c\x7f\xff\xf8\x1f\xfc\x00\x00\x07\xef\xe0\xff\xff\xc1\xff\xfc\x00\x00\x01\xff\xff\xff\xa0\x07\xff\x00\x1e\x00\x1f\xfc\x00\x00\x38\x00\x18\xc0\x00\x00\x7f\xff", | |
580 | "\x00\x0f\xff\xf8\x00\x00\x07\xff\x00\xfc\x00\x00\x03\xff\xfc\x00\x07\xff\xff\xe0\x00\x00\xff\xfc\x0f\xff\x00\x00\x0f\xff\xfe\x0f\x80\x07\xff\x03\xff\xff\xf9\xff\xfe\x00\x00\x03\xf8\x00\x00\x07\xe0\x00\x00\xc0\x00\x1f\xff\xf0\x7f\xff\xff\xc0\x07\xff\xff\xfc\x00\x00\x3f\xff\xff\xe0\x00\x00\x1f\xff\xf8\x1f\xfe\x00\x00\x3f\xff\xff\xe0\x3f\x06\x00\x00\x00", | |
581 | "\xff\xf0\x00\x08\x00\x0f\xef\xff\xff\xfc\x00\x00\x7f\xff\xf0\x00\x7f\xff\xf8\x00\xff\xff\x81\xff\xff\xe0\xff\xff\xff\x00\x00\x00\x80\x00\x03\xff\x80\x3f\xff\xfc\x00\x00\x1f\xff\xc0\x0f\xff\xfe\x00\x00\x00\x73\xf0\x1f\xfe\x00\xff\xc0\x3f\xff\x00\x3f\xff\x83\xff\xfe\x01\xff\xff\xf7\xff\xff\x80\x00\x00\x3f\x00\x00\x1f\xe3\xff\xff\xf0\x00\x0f\xff\xf0\x00\x00", | |
582 | "\x00\x00\x7f\xfc\x00\x7f\xe0\x00\x0f\xff\xe0\x01\xf8\x00\x3f\xff\x00\x00\x78\x00\x7f\xe0\x00\x00\x1f\x00\x07\xff\xff\xf8\xf9\xf0\x01\xff\xf8\x07\xc0\x0f\xff\xf8\x00\x07\xf8\x7f\xfe\x00\x00\x0f\xff\xe3\xf0\x00\x07\xff\xff\xfc\x03\x1c\x00\x00\x7f\xe0\x00\xff\xff\xfc\x00\x00\x0f\xf3\xff\xe0\x00\x00\x0f\xff\xf9\x00\x00\x10\x00\x3f\xff\xfc\xf8\x7f\xff\x00\x00\x00", | |
583 | "\x00\x03\xff\xff\xc0\x7f\xff\xff\xc0\x00\x03\xff\xff\xff\x00\x00\x0f\xff\xf0\x1f\xff\xf0\x00\x07\xff\xff\xef\xff\x81\xf7\xff\xfe\x00\x07\xff\xf0\x00\x00\x1f\xff\xc0\x0f\x80\x00\x0f\xff\xfc\x00\x00\xff\xff\xff\xc0\x03\xff\xe3\xff\xff\xfe\x00\x1f\xff\xff\x00\x00\xff\xff\xff\x0f\xff\xf1\xf8\x00\x00\x01\xff\xff\xff\x80\x1f\xff\xfe\x00\x08\x00\x00\x7f\xff\xff\x80\x00", | |
584 | "\x1f\xe0\x00\x7c\x1f\xc0\x07\xff\xc0\x07\xff\xff\xfe\x00\x3c\x00\x00\x00\xff\xff\x80\x00\x07\xff\xff\x00\x1f\xf8\xff\xc0\x00\xff\x81\xff\x01\xff\xfe\x00\x78\x7f\xff\xf0\x00\x01\x80\x00\x00\x1f\xff\x00\x00\x1f\xff\xf0\x00\x1f\xff\xff\xe0\x00\x3c\x00\x00\x1f\xff\xff\x80\x03\xff\xe0\x01\xff\xff\xf9\xff\xf8\x00\x00\x7c\x00\x00\xfe\x00\x00\xff\xff\xff\x00\x00\x0f\xff\xff", | |
585 | "\xfc\x00\x01\xff\x00\x00\x0c\x00\xff\xff\xe3\xff\xff\xf0\x80\x0e\x0e\x00\x00\x0f\xfe\x00\x03\xff\xc0\x00\x00\x7f\xff\xff\xe0\xc0\x00\x00\x07\xe0\xff\xff\x03\x9f\xff\xff\xc1\xc0\x00\x03\xff\xff\xc3\xff\xff\xfc\xff\xff\xc0\x00\x01\xfc\x00\x0f\xfc\x00\x00\x00\x7f\xff\xff\x03\xff\xff\xfc\x0f\xff\xfe\x00\x00\x03\x80\x3f\xff\xff\x00\x00\xff\xff\xf8\x00\x03\xff\xff\x80\x00\x00", | |
586 | "\xff\xff\x80\xff\xff\xf8\x00\x00\xfc\x00\x03\xff\xf8\x00\x0f\xff\xff\x00\x03\x00\x00\x00\x7f\xff\xf0\x00\x3f\xff\xf0\x00\x01\xfc\x01\x00\x03\xff\x80\x1f\xff\xe3\xff\xff\xf8\x00\x1f\xff\xff\xf8\x01\xff\xdf\xff\xfb\xff\xc0\x00\x00\x3f\xff\xf8\x00\x00\x80\xc7\xff\xff\xf8\x0f\xff\x00\x60\x1f\xff\xe0\x00\x01\xff\xff\xfe\x0f\xff\xff\xfc\x00\x00\x00\xf0\x06\x03\xff\xff\xfe\x00\x00", | |
587 | "\xff\x00\x0f\xff\xfc\x00\x0f\xff\xff\xfc\x07\xff\xfc\x00\x00\xf0\x00\x00\x80\x00\x7f\xfe\x00\x00\x0f\xff\xff\xfc\x3f\x00\xff\xff\xff\x00\x1f\xff\xff\xf0\x00\x1f\xff\xff\xe0\x00\x1f\xff\xff\xc3\xff\x00\x00\x01\xff\xff\xf0\x00\x00\x0f\xff\xe0\x07\xfc\x00\x00\x00\xfe\x00\x07\xff\xff\xf8\x00\x00\x3f\x00\x00\x0f\x80\x00\x3f\xff\xc0\x00\x11\xff\xef\x00\x07\x00\x7f\xff\xfc\x00\x00\x00", | |
588 | "\xfe\x00\x00\x7f\xf7\xff\xff\x00\x00\x0f\xff\xff\xe0\x01\xff\xe0\x00\x00\x03\xff\xe0\x00\xff\xfe\x00\x01\xff\xf7\xff\xf8\x00\x0f\xff\x00\x00\x00\x38\x00\x07\xff\xf8\x07\xff\xfc\x00\x1f\xff\xff\x0f\xc1\xff\xff\xc0\x00\xff\xff\x0f\xff\xf0\x01\xff\xf8\x00\x01\xff\xff\x80\x00\x00\x0f\xf8\x00\x3f\xff\xfe\x3f\xff\xff\xf0\x00\x00\x38\x0f\xc3\xff\xff\xff\x1f\xff\xc0\x3f\xff\xff\xe0\x00\x00", | |
589 | "\xff\xff\xf0\x00\x7f\xc0\x07\xff\xff\x81\xff\xc0\x00\x01\xff\xff\xff\xc0\x00\x00\x1f\xff\xfe\x03\xc0\x00\x0f\xff\xff\xfc\x00\x03\xff\xff\xff\x83\xff\xc0\x00\x07\xf0\x00\x00\x1f\x80\x00\x00\x3f\xff\xff\xe7\xff\x00\x07\xff\xff\xfc\x00\x00\x1f\xff\xf8\x00\x03\xf0\x00\xff\xfc\x00\x1f\xff\xff\xe0\x03\xff\xf0\x00\x01\xff\xff\xff\x80\x00\x00\x0f\xff\xff\xf8\x10\x00\x1e\x03\xff\xff\xff\x80\x00", | |
590 | "\x00\x01\xff\xfe\x00\x00\x00\x7f\xff\xff\xf0\x00\x00\x1f\xff\x80\x07\xff\xff\xff\x80\x00\x01\xff\xfc\x03\xff\xff\x9f\xff\xfe\x00\x08\x00\x00\x06\x00\x00\x00\x81\xff\xff\xc0\x00\x07\xf8\x00\xff\xff\xff\x00\x00\x00\xff\xff\xf8\x00\x3f\xff\xff\xf8\x3f\xf8\x00\x00\x00\x7f\xff\xc0\x7f\xff\xff\xc0\xff\xff\xfe\x00\x00\x01\xff\xf8\x00\x00\x03\xff\xc1\xff\xf0\x00\x00\x03\x07\xf8\x01\xff\xfe\x00\x00", | |
591 | "\xf8\x00\x00\x01\xff\xff\x80\x00\x0f\xff\xff\x8f\xff\x00\x1f\xff\x0f\xff\xc0\x00\x00\xff\xff\xfc\x00\x0f\xff\xf0\x00\x70\x00\x00\x3f\xff\xc0\x00\x00\x7c\x00\x00\x7e\x00\x0f\xfc\x00\x00\x00\xff\xff\x80\x00\x00\x0f\xff\xff\xfc\x38\x00\x00\x03\xf0\x00\x31\xf0\x1f\xff\xff\xc0\x07\xff\xff\xe0\x1f\xff\xff\xf3\xfe\x00\x00\x00\xff\xff\xc0\x00\x1f\xe7\xff\xe1\xff\xff\xdf\x00\x00\x00\x1f\xff\x00\x00\x00", | |
592 | "\x3f\xff\xff\xf8\x00\x00\x00\x60\x00\x0f\xff\xff\xe0\x07\xff\xff\xff\x00\x00\x3f\xff\xff\xf0\x1f\xff\xff\x80\x00\x70\x00\x00\x01\x00\x00\x00\x3f\xff\xfe\x00\x00\x00\x1f\xf8\xfc\xc0\x0f\xff\xf8\x00\x3f\xff\xc0\xff\xff\x80\x00\x03\xff\xff\xf8\x00\x3f\xff\xfc\x00\x00\x0f\x81\xff\xc0\x03\xff\xc0\x3f\xff\xff\x80\x03\xff\xfe\x00\xff\xff\xfe\x00\x00\x1c\x00\x00\x00\x3f\xff\xff\xf8\x00\x7f\xff\xc0\x00\x00", | |
593 | "\x00\x00\x00\x0f\xff\xfe\x0f\xff\xff\x87\xff\xff\xff\x00\x80\x00\x0f\xff\xc0\x00\x03\xf0\x1f\xf7\xe0\x00\x00\x70\x00\x01\xff\xff\xff\x80\x01\xfe\x07\xf0\x00\x01\xff\xfc\x00\x00\x04\x00\x01\xff\xfe\x07\xff\xff\xfe\x00\x07\xc0\x00\x00\xff\xff\xff\x87\xf0\x03\xff\xfc\x00\x00\x1f\xf8\x00\x01\xff\xff\xc0\x00\x00\x3f\xff\xc0\x00\x00\x7f\x8f\xff\xf8\x00\x00\x00\x7f\xff\xe0\x06\x0e\x00\x00\x0f\xff\xff\x80\x00", | |
594 | "\x03\xff\xff\xfd\xe0\x00\x00\x1f\xff\xf8\x01\xff\xff\xfb\xff\xff\xe0\x01\xf0\xf0\x00\x00\xff\xff\xff\x80\x00\x00\x7f\xff\xff\xe0\x1f\xff\xff\xf0\x01\x80\xff\xff\xff\xe0\x00\x00\x7f\xff\xf0\xff\xff\xc0\x00\x00\x07\xfe\x00\x00\x00\x1e\x00\x1f\xff\xff\xe0\x1f\xff\xe0\x01\xff\xc0\x00\x3f\xff\xe0\x00\x00\x0f\xf0\x00\xff\xff\x7f\xc0\x1f\xf8\x3f\xff\xff\xc0\x00\x00\x7f\xff\xe0\xff\xfc\x00\x00\xff\x0f\xff\xff\xff", | |
595 | "\x07\xff\xfc\x03\xff\xff\xff\xdf\xff\xff\x87\xff\x18\x00\x03\x80\x01\xff\x00\x00\x00\x1f\xff\x00\x00\x3f\xff\xff\xc0\x1f\xe0\x3f\xff\xff\xfc\x00\x00\x01\xff\xf8\x00\x00\x3f\xff\xff\xf8\x00\x00\x07\xe0\x00\x07\xff\xf9\xff\xe0\x00\x3f\xe0\x00\x7f\xef\xf0\x00\x07\x81\xff\xfc\x00\x00\x00\xff\xe0\x00\x30\x00\x00\x00\xff\xff\xf0\x00\x00\x03\xff\xfc\x7f\x07\xf8\x03\xff\xff\xff\x00\x3f\xfc\x00\x00\x01\xff\xc0\x00\x00", | |
596 | "\x00\x7f\xfc\x00\x00\x03\xff\xf8\x00\x00\x61\xfe\x7f\xff\xfe\x00\x00\x1f\xff\xfc\x3f\xff\x80\x01\xff\xff\xff\xe0\x00\xff\xff\xff\x80\x1f\xf8\x00\x7f\xff\xff\xf8\x00\x00\x07\xff\xff\xe0\x00\x00\x07\xff\xff\xff\x80\x00\xff\x80\x0f\xff\xff\xfc\x00\x00\x7f\xff\xfe\x00\x00\x00\x30\x00\x00\x7f\x80\x00\x07\xff\xff\xf0\x00\x00\x03\xff\xc0\x0f\xff\xff\x80\x3f\xff\x80\x03\xff\xff\xfe\x03\xff\xff\xff\x7f\xfc\x1f\xf0\x00\x00", | |
597 | "\x1f\xf0\x00\x00\x7f\xff\xfe\x02\x00\x00\x03\xff\xff\xff\xd8\x07\xff\xff\xe0\x01\xff\xff\x80\x00\x00\x07\xc0\x00\x0f\xff\xc0\x7f\xf0\x00\x07\xff\xff\x80\x00\x07\xf0\x00\x00\x7f\xfc\x03\xff\xff\xff\xc0\x00\x01\xff\xff\xf9\xff\xfe\x00\x00\x1f\xff\xc0\x00\x00\x03\xfe\x3f\xff\xff\x00\x07\xfe\x00\x00\x03\xc0\x00\x3f\xf8\x00\x10\x03\xfc\x00\x0f\xff\xc0\x00\x7f\xff\xe0\x00\xff\xf0\x00\x00\x7f\xff\xe0\x00\x00\x0f\xff\xff\xff", | |
598 | "\xff\xff\xff\xf8\x00\x00\x60\x00\x00\x00\xff\xff\xfc\x03\xff\xfc\x00\x00\x3c\x00\x3f\xe0\x7f\xf8\x00\x07\xff\xf8\x0f\xf8\x00\x00\x7f\xff\xff\xfc\x00\x7f\xc2\x00\x03\xff\xff\xfe\x00\x01\xff\xff\xff\xf0\x03\xff\xff\xf0\x18\x07\xc0\x00\x0f\xff\xc0\x00\x00\x7f\xff\xff\x87\xe0\x00\x00\x07\x00\x1f\x80\x04\x07\xff\xe0\x00\x00\x1f\xff\x81\xff\x80\x00\x03\xff\xfc\x00\x00\x07\xff\xff\xff\xc0\x00\x00\x1f\x80\x01\xff\xff\x00\x00\x00", | |
599 | "\x00\x0f\xfc\x1f\xf8\x00\x0f\xff\xff\xf8\x07\xff\xf1\xfc\x00\x1f\xff\xff\xf0\x00\x0f\xff\xdf\xff\xff\xff\x00\x00\x03\xff\xff\xff\x00\x01\xff\xff\xff\xc0\x10\x0f\xf0\x00\x00\x00\xfc\x00\x1f\x00\x07\x00\x01\xf0\x00\x00\x1f\xe0\x00\x00\x30\x7c\x3f\xff\xe0\x00\xff\xfc\x07\xff\xfc\x00\x3f\xff\xff\xf8\xff\xff\xc1\xfc\x1f\xff\xff\xf8\x00\x01\xff\xfc\x00\x00\x0f\xff\xff\xff\x00\x00\xff\xf8\x0c\x00\x00\x07\xff\xff\x00\x00\x00\x7f\xff", | |
600 | "\xff\xff\x80\xff\xff\x00\x00\x00\x7f\xff\xff\x00\x1f\xfc\x00\x06\x00\x0f\xf8\x00\x00\x01\x80\x00\x00\x7f\xff\xff\xe0\x3f\xff\xff\xfc\x00\x60\x00\x00\x00\xfe\x00\x00\x07\xff\xff\xf0\x7f\xff\xff\xf8\x00\x00\x80\x00\x00\x0f\xff\xff\xff\xbf\xff\xff\xc0\x07\xff\xfe\x00\x00\x1c\x00\x1f\xfc\x07\x00\x01\xff\xff\x00\x00\x00\x80\x00\x1f\xff\x03\x80\x00\x00\x3f\xff\xff\xf8\x00\x07\xff\xff\xff\x80\x00\x1f\xff\xff\xe0\x1f\xff\xff\xc0\x00\x00", | |
601 | "\xff\xff\xff\xf8\x00\x00\x00\x7e\x00\x00\x00\x1f\xff\x80\x07\xff\xff\xff\x80\x00\x00\x0f\xff\xff\xc3\xff\xf0\x00\x00\x04\x7f\xc0\x7f\xf0\x00\x3f\xff\x80\x00\x7f\xe0\x00\x03\xff\xc0\x00\x07\xff\x00\x00\x0f\xff\x80\x00\x00\x07\x80\x00\x00\x0f\xff\xff\xff\x01\xff\xff\xff\xc0\x03\xc0\x00\x00\x03\xff\xff\xe0\x00\x0f\xff\xff\xc0\x00\x03\xff\xfe\x00\x03\xff\xf8\x00\x00\x0f\xff\xff\xc0\x01\xff\xe0\x00\x00\xff\xff\xfc\x00\x00\x1f\xff\xff\xff", | |
602 | "\xff\xf0\x00\x3f\xfc\x00\x00\xff\xff\xff\xe0\x1f\xc3\xfe\x00\x07\xff\xf8\x00\x0f\xf0\x01\xff\xff\xf0\x00\x00\xff\xc0\x0f\xff\xff\x80\x00\x00\xff\xff\xf3\xff\x80\x00\x00\x80\x08\x38\x00\x00\x0f\xff\xf0\x00\x1f\xff\xff\xfc\x00\x0f\x80\x00\x70\x00\x00\x31\xff\xff\xfe\x3f\xff\xf8\x00\x00\x00\x3c\x3f\xf0\x0f\xff\xff\x00\x03\xff\xfb\xff\xff\xff\x00\x0f\xff\xff\xfe\x00\x00\x00\xf0\x00\x00\x00\xff\xff\xfc\x00\x7f\xff\xf0\x00\x01\xff\xff\xfe\x00", | |
603 | "\xff\xff\xf0\x0f\xf8\x3f\xff\xff\xe0\x00\x03\xff\xfe\x00\x00\x3f\xff\x80\xff\xff\xff\x00\x00\x00\xff\xff\xf8\xff\xff\xf0\x00\x0f\xf1\xff\xff\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x1f\xf0\x00\x00\x1f\xf0\x03\xff\xff\xff\xe1\xff\xe0\x00\x00\x1f\xff\xc1\xfe\x00\x00\x07\xff\xfc\x00\x00\x00\x1f\xfe\x3f\xc0\x00\x00\x01\xff\xfc\x00\x00\x1f\xff\xff\x0f\xe0\x00\x01\xfc\x00\xfe\x00\x00\x00\x7f\xe0\x00\x1f\xff\xff\xe0\x7f\x00\x0f\xf0\x00\xff\xfe\x00\x00", | |
604 | "\x00\x7f\xff\xc0\x07\xff\xff\xff\x80\x07\xff\xff\xfe\x00\x00\x00\x7e\x00\x00\x00\x0f\xff\x80\x1f\xff\xfe\x07\xff\xff\xf0\x03\xc7\xff\xff\xfe\x00\x00\x00\x7f\xfe\x00\x00\x1f\xff\xfe\x00\x00\x00\xff\xfc\x00\x1f\xff\xc0\x00\x00\x3f\xff\x00\x1e\x00\x00\x03\xff\xff\xff\x80\x00\x00\x7f\xff\xf8\x03\xff\xfc\x00\x01\xff\xff\xfe\x00\x0f\xff\x02\x00\x07\xff\xff\xfe\x00\x00\x00\xfe\x01\xff\xff\xf7\xff\xff\x19\xff\xff\x00\x00\x07\xff\xc1\xff\x00\x00\x07\xff", | |
605 | "\x00\x00\x00\x40\x00\x00\x07\xff\xff\xf8\x1f\xff\xff\xc0\x00\x3e\xff\xff\xf0\x00\x00\x00\x7f\xff\xfe\x00\x00\x00\xff\x80\x00\x00\x3f\xf1\xff\xff\xff\xe0\x00\x00\x01\xff\xff\xff\x00\x00\x1f\xff\xf8\x00\x07\xff\xff\xf8\x00\x1f\xff\xc1\xff\xff\xff\xe0\x01\xff\xff\xff\xe0\x00\x00\x07\xff\xff\xff\xcf\xff\xe0\x00\x3f\xe0\xff\xff\xc0\x00\x07\xff\xff\xe0\x01\xff\xfc\x3f\x00\x01\xff\xff\xfe\x00\x01\xff\x0f\xff\xff\xfc\x00\x00\x01\xff\xff\x80\x00\x00\x0f\xff", | |
606 | "\xff\xff\xf0\xff\xff\xff\xc0\x03\x80\x00\x01\x00\x00\x03\xff\xff\xff\xf1\xff\xff\xff\xe0\x07\xfc\x00\x00\x03\xff\xf0\x00\x00\x00\x7e\x00\x00\x00\x07\x00\x3f\xff\xfc\x00\x0f\xc7\xff\xff\x00\x00\x07\xff\xff\xc0\x00\x00\x03\xff\xfc\x00\x00\xff\xe0\x00\x00\x00\x7f\xf0\x00\x00\xff\xff\xff\xfd\xff\x00\xff\xe0\xff\xff\xe0\x07\xff\xff\xf8\x7f\xff\xfe\x18\x00\x00\x01\xf0\x00\x1f\xff\xfe\x01\xc0\x01\xff\xff\xff\xf8\x00\x01\xfe\xff\xff\xff\x80\x00\x00\x07\xff\xff", | |
607 | "\xff\xff\xf0\x00\x1f\xff\xff\x00\x00\x3f\xff\xf0\x00\xff\xff\x00\x07\xff\xff\xf8\x03\xff\xff\xe7\xff\xff\xff\x81\x00\x00\x01\xff\x00\x00\x3f\xff\xff\xf8\x00\x00\x00\xf0\x07\xff\xc0\x0f\xf0\x00\x3f\xff\xc0\x00\x7f\xf8\x00\xff\xfc\x00\x00\x1f\xff\x80\x1f\xfc\x00\x00\x01\xff\xff\x00\x00\x7f\xff\xff\xfe\x00\x00\x0f\xff\x80\x00\x00\x0f\xff\xff\xfc\x00\x00\x00\xff\xff\xfc\x00\x0f\xff\x80\x00\x3f\xff\xfe\x00\x00\x3f\xe0\x0f\xff\xff\x00\x00\x01\xff\xf0\x00\x00\x00", | |
608 | "\xff\xc0\x00\x00\x03\xff\xff\xfc\x00\xff\xff\xfc\x00\x00\x00\x7f\xff\xff\x00\x00\x00\x1f\xe0\x00\x0f\xff\xc0\xf0\x00\x00\x7f\xff\xff\xe0\x00\x20\x1f\xff\xff\xff\x00\x00\x00\x1f\x80\x00\x00\x07\xff\xf1\xff\xff\xff\xc0\x00\x00\x1f\xff\xff\xf0\x00\x3f\xff\xf8\x00\x3f\xff\xff\xfe\x01\xff\xff\xfe\x7f\x9e\x00\x1f\xff\xfc\x00\x7f\xe0\x7f\xff\xff\xe0\x00\x7f\xff\xfe\x00\x00\x01\xff\xff\xff\xf8\x01\xff\xc0\x03\x00\x0f\xff\xf8\x00\x00\x0f\xf0\x0f\xff\x00\x00\x00\x0f\xff", | |
609 | "\x00\x03\xff\xff\xff\xcf\xff\xf8\x7f\x8f\xff\xff\xfc\x01\xff\xff\xfc\x00\x00\x1f\xff\xff\xff\x80\x00\x00\x01\xff\xff\xe1\xff\xf0\x00\x00\x00\xff\xff\xff\xf8\x03\x80\x00\x3f\x80\x00\x0f\xff\xff\xff\xc0\x00\x00\x02\x7f\xff\xf8\x03\xff\xc0\x00\x00\x3f\xff\x80\x00\x00\x01\xff\xff\xe0\x00\x00\x03\x80\x00\x00\xff\xe0\x7f\xff\xff\xfc\x00\x00\x01\xff\xff\xfc\x00\x00\x00\xff\xff\x80\x00\x07\xfe\x00\x00\x07\xff\xf0\x00\x00\x1f\x80\x00\x00\x3e\x1f\xff\xff\xff\x9f\xff\xff\xff", | |
610 | "\xff\xff\xfe\x00\x03\xff\xff\xff\x80\x01\xff\xff\xff\xa0\x3f\xff\xf8\x00\x7f\x03\xff\xff\xc0\x00\x0f\xff\xc3\xff\xf8\x00\x03\xff\xff\xff\xc0\x7f\xf0\x1f\xe0\x0f\xff\xff\xc0\x00\x1f\xfe\x0f\xff\xff\xe0\x00\x07\xff\xff\xfc\x00\x00\xfc\x00\x3f\xff\xff\xf0\x00\x00\x00\x3f\xfc\x00\x00\x00\x0f\xff\xc4\x00\x00\xff\xc0\x00\x03\xff\xff\xff\x80\x00\x03\xfc\x0f\xff\xff\xf0\x00\x00\x03\xff\xff\xc0\x07\xff\xff\xf8\x0c\x3f\xff\xf0\x00\x1f\xff\x80\x00\x00\x01\xff\xfe\x00\x00\x3f\xff", | |
611 | "\x00\x00\x00\x1f\xff\xc3\xff\xff\x80\x00\x00\x3f\xff\xff\xfe\x00\x00\x00\x0f\xe0\x00\x7f\xff\xe0\x0f\xfe\x00\xff\xff\xff\xe0\x03\xff\xf8\x00\x00\x00\x3f\xe0\x00\x00\x01\xff\xff\xe7\xff\xff\xff\xe0\x00\x00\x07\xff\xff\xc0\x00\x1f\xe0\x00\x00\x01\xff\xff\x00\x00\x03\xff\xff\xff\xe0\x00\x00\x1f\xe0\x03\xff\xff\x00\x00\x00\x07\xff\xf0\x3f\x80\x00\x00\x0f\xff\xff\xfe\x00\x00\xff\xff\xff\x00\x00\x3f\xff\xff\x80\x0f\xff\xfe\x01\xff\xff\xff\xf8\x3f\xff\xff\xc0\x00\x00\xff\xff\xff", | |
612 | "\xff\xff\xff\x80\x00\xff\xff\xff\xf0\x00\x00\x1f\x00\x3f\xff\xfe\x0f\xf0\x1c\x00\xff\xff\xe0\x00\x0f\xc0\x1f\xff\xc0\x00\x00\x01\xff\x80\xf7\xff\xf8\x00\x00\x3f\xff\xc0\x00\x00\x01\xff\xf0\x00\x03\xe3\xfc\x00\x07\xf8\x00\x00\x3f\xff\xff\xfe\x00\x00\x1f\x00\x00\x00\x18\x00\x3f\xff\xff\xf8\x0f\xe0\x00\x00\x00\x60\x00\x07\xff\xff\xfe\x00\x60\xff\xff\xff\xf8\x00\x00\x3f\xff\x80\x00\x00\x3f\xff\xff\xf0\x00\x00\x0f\xf0\x00\xff\xff\xf1\xff\x00\x3f\xff\xff\xff\x01\xff\xe0\x00\x00\x00", | |
613 | "\xff\xff\xff\xfc\x00\x00\x00\xff\xff\xf0\x01\xff\xff\xf8\x00\x00\xff\xff\xff\xe7\xff\xf8\x01\xf8\x7f\xff\xff\x80\x00\x3f\xff\xfc\x00\x00\x01\xff\xff\xe0\x00\x3f\xc0\x00\x00\x7f\xff\xff\x00\x00\x0f\xff\xff\xff\xc0\x00\x0f\xff\xf1\xff\xff\xff\xf8\x00\x0f\xff\xff\xfc\x00\x00\x07\xff\xff\xff\x80\xff\xff\xf8\x07\xf0\x00\x00\x00\x1f\xff\xff\xff\xc0\x00\xff\xff\xff\xc0\x00\x0e\xff\xff\xff\xc0\x00\x00\x03\xff\xf8\x00\x00\x03\xff\x80\x00\x00\x00\xe0\x00\x00\x0f\xf8\x00\x00\x3f\xff\xff\xff", | |
614 | "\x3f\x00\x03\xc0\x1f\x00\x00\x00\x0f\xf0\x00\x07\xff\xff\xef\x00\xfe\x00\x7f\xfe\x00\x00\x3f\xf0\x00\x3f\xc0\x00\x00\x07\xfc\x00\x00\x03\xff\xff\xff\x0f\xff\xff\xff\xc0\x07\xf8\x00\x00\xf8\x00\x00\x3f\x9f\xff\xff\xfc\x00\x00\x3f\xff\xc0\x00\x03\xff\xff\xc0\x00\x00\xff\xfc\x00\x1f\xff\xe0\x00\x00\x07\xff\xe0\x07\x00\x00\x00\x7f\xff\xfe\x00\x00\x00\xff\xff\xfe\x00\x00\x0f\xfc\x00\x07\xff\xf0\x00\x00\x00\x7f\x80\x03\xcf\xff\x80\x00\x01\xff\xff\xe0\x3c\x00\x00\x3f\xff\xff\xff\x80\x00\x00", | |
615 | "\x30\x00\x00\x00\xff\xf8\x00\x00\xff\xfc\x00\x3f\xff\xff\x80\x00\x00\x0f\xcf\xff\xcf\xff\xff\xc0\xff\xff\xff\x80\x00\x00\x01\xff\xff\xff\xf0\x00\x00\x00\x1f\xff\x00\x03\xff\xfc\x00\x00\x00\x07\xff\x80\x00\x7f\xff\xff\xfe\x0f\xff\xc0\x00\x00\x00\x7f\xf0\xbf\xff\xff\xe0\x00\x00\xff\xf8\x00\x00\x01\xff\xff\xf8\x00\x00\x3e\x00\x00\x07\xff\xe0\x00\x00\x00\x80\x00\x03\x80\x01\xff\xff\xff\xf8\x60\x00\x00\x00\xff\xf0\x00\x1f\xff\xff\xc7\xff\xf0\x40\xff\xff\xfe\x00\x00\x07\xff\xdf\xff\x80\x00\x00", | |
616 | "\xff\xff\xff\x83\xff\xf8\x1f\xff\x1f\xff\xff\x80\x0f\xff\xff\xe0\x00\x00\x00\x3f\xff\xff\xc0\xf8\x00\x00\x78\x00\x1c\x00\x00\x00\x1f\xe0\x00\x00\x00\xff\xff\xe0\x3f\xff\xff\xfe\x00\x00\x03\xff\xff\xfe\x00\x00\x00\x1f\xff\xfc\x00\x7f\xff\x00\x00\x00\x1f\xff\xff\x00\x02\x00\x00\x3f\xff\xfc\x00\x00\x00\xff\xf0\x1f\xfe\xff\xff\xc0\x01\xff\xff\xff\xf0\x00\x00\x00\xff\xff\xfe\x00\x00\x00\x0f\xff\xc0\x00\x00\x7f\x7f\xc0\x00\x00\x01\xff\xff\xfe\x0f\xff\xff\xff\xc0\x00\x0f\x80\x00\x00\x3f\xff\xff\xff", | |
617 | "\xff\xff\xff\xfe\x00\x00\x00\xff\xf8\x0f\xff\xff\xf0\x00\x00\x07\xff\xff\xfb\xff\xc0\x00\x07\xfc\x07\xe0\x00\x00\x01\xff\xff\xe0\x00\x7f\xff\xff\xf8\x00\x00\x3f\xff\xf8\x00\x00\x00\x0f\xff\xff\x00\x00\x0f\xc0\x00\x00\x3f\xff\xf0\x00\x00\x01\xff\xff\xfe\x1f\xff\xf8\x00\x00\x20\x00\x00\x00\x3f\xff\xbf\xff\x9f\xff\xff\xfc\x3f\xff\xff\xf0\x00\x00\x07\x80\x00\x00\xff\xff\xe7\xff\xff\xff\xf0\x00\x00\x3f\xff\xff\xff\x00\x00\x07\xff\xff\xe0\xff\xff\xff\xe0\x01\xff\xff\xff\xf8\x00\x00\x00\x7f\xff\xff\xff", | |
618 | "\x00\x00\x00\x1f\xff\xc0\x00\x0f\xff\xc0\x00\x00\x1f\xff\xc0\x00\x1f\xc0\x00\x00\x03\xff\x80\x00\x00\x07\xff\xff\xff\xc0\x00\x00\x00\x80\x00\x3f\xfc\x00\xc0\x00\x0f\xff\xff\x00\x00\x06\x00\x3f\xfc\x1e\x00\x1f\xff\xff\xf0\x00\x3e\x0f\xff\xff\xf0\x00\x00\x3f\xff\xf0\x00\x00\x00\x1f\xff\xc0\x00\x00\xff\xff\xff\xf8\x00\xe0\x00\x00\xff\xff\xff\xfe\x00\x00\x0f\xff\xff\xfe\x3f\xff\xff\xfc\x07\xfe\x00\x00\x00\xc0\x00\x7f\xff\xff\xfe\x00\xff\xff\xff\xfc\x07\xff\xff\xe0\x00\x3f\xe3\xff\xff\xc0\x00\x00\x3f\xff", | |
619 | "\x00\x00\x00\x0f\xff\xc0\x00\x0f\xf8\x00\x00\x00\xff\xfc\x00\x00\x0f\xff\xff\xfe\x00\x00\x00\x03\xff\x00\xff\xfc\x07\xff\xf0\x1f\xff\xfe\x0f\xff\xff\xfd\xff\xff\xff\xf0\x1f\xff\xf0\x00\x07\xf8\xff\xf8\x00\x00\x00\xff\xff\xc0\x3f\xff\xff\xff\x80\x00\x00\x0f\xff\xff\xff\x00\x00\x03\xff\xff\xf0\x00\x07\xff\xff\x00\x00\x3f\xff\xf0\x01\xff\xff\xc0\x01\xff\xff\xff\x00\x3f\xff\xf8\x1f\xff\xff\xfe\x1f\xff\xff\xff\xc0\x00\x00\x7f\xe0\x00\x07\xff\xff\xfe\x00\x00\x00\x03\xe0\x07\xff\xc0\x03\xfc\x00\x07\xff\xff\xff", | |
620 | "\xff\xff\xff\x00\x00\x03\xc0\x00\x00\x01\xff\xff\xf8\x00\x00\x00\x0f\xff\xff\xff\x00\x00\x0f\x00\x00\xff\xff\xf8\x80\x00\xf8\x00\x0f\xc0\x00\x00\x00\xe0\x00\x00\x00\xff\xff\xff\xf8\x0f\xff\xff\xfe\x00\x00\x18\x00\x00\x7f\xff\xff\xff\x00\x00\x03\xff\xff\xff\x00\x7f\xff\xff\xfc\x00\x03\xc0\x00\x00\x0f\xff\xff\xff\xf0\x00\x07\xff\xff\x80\x01\xff\xff\xff\xe0\x00\x0f\xff\xfe\x07\xff\xff\xf8\x00\xff\xff\xff\xc0\x00\x00\x03\xe0\x00\x07\xff\xf0\x0f\xff\xf0\x00\x00\xff\xff\xf8\x7f\xc0\x03\xc0\x3f\xff\xe0\x00\x00\x00", | |
621 | ||
622 | /* These are zero-terminated strings */ | |
623 | ||
624 | "abc", | |
625 | "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" | |
626 | }; | |
627 | ||
628 | static uschar *hashes[] = { | |
629 | "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709", | |
630 | "3CDF2936DA2FC556BFA533AB1EB59CE710AC80E5", | |
631 | "19C1E2048FA7393CFBF2D310AD8209EC11D996E5", | |
632 | "CA775D8C80FAA6F87FA62BECA6CA6089D63B56E5", | |
633 | "71AC973D0E4B50AE9E5043FF4D615381120A25A0", | |
634 | "A6B5B9F854CFB76701C3BDDBF374B3094EA49CBA", | |
635 | "D87A0EE74E4B9AD72E6847C87BDEEB3D07844380", | |
636 | "1976B8DD509FE66BF09C9A8D33534D4EF4F63BFD", | |
637 | "5A78F439B6DB845BB8A558E4CEB106CD7B7FF783", | |
638 | "F871BCE62436C1E280357416695EE2EF9B83695C", | |
639 | "62B243D1B780E1D31CF1BA2DE3F01C72AEEA0E47", | |
640 | "1698994A273404848E56E7FDA4457B5900DE1342", | |
641 | "056F4CDC02791DA7ED1EB2303314F7667518DEEF", | |
642 | "9FE2DA967BD8441EEA1C32DF68DDAA9DC1FC8E4B", | |
643 | "73A31777B4ACE9384EFA8BBEAD45C51A71ABA6DD", | |
644 | "3F9D7C4E2384EDDABFF5DD8A31E23DE3D03F42AC", | |
645 | "4814908F72B93FFD011135BEE347DE9A08DA838F", | |
646 | "0978374B67A412A3102C5AA0B10E1A6596FC68EB", | |
647 | "44AD6CB618BD935460D46D3F921D87B99AB91C1E", | |
648 | "02DC989AF265B09CF8485640842128DCF95E9F39", | |
649 | "67507B8D497B35D6E99FC01976D73F54AECA75CF", | |
650 | "1EAE0373C1317CB60C36A42A867B716039D441F5", | |
651 | "9C3834589E5BFFAC9F50950E0199B3EC2620BEC8", | |
652 | "209F7ABC7F3B878EE46CDF3A1FBB9C21C3474F32", | |
653 | "05FC054B00D97753A9B3E2DA8FBBA3EE808CEF22", | |
654 | "0C4980EA3A46C757DFBFC5BAA38AC6C8E72DDCE7", | |
655 | "96A460D2972D276928B69864445BEA353BDCFFD2", | |
656 | "F3EF04D8FA8C6FA9850F394A4554C080956FA64B", | |
657 | "F2A31D875D1D7B30874D416C4D2EA6BAF0FFBAFE", | |
658 | "F4942D3B9E9588DCFDC6312A84DF75D05F111C20", | |
659 | "310207DF35B014E4676D30806FA34424813734DD", | |
660 | "4DA1955B2FA7C7E74E3F47D7360CE530BBF57CA3", | |
661 | "74C4BC5B26FB4A08602D40CCEC6C6161B6C11478", | |
662 | "0B103CE297338DFC7395F7715EE47539B556DDB6", | |
663 | "EFC72D99E3D2311CE14190C0B726BDC68F4B0821", | |
664 | "660EDAC0A8F4CE33DA0D8DBAE597650E97687250", | |
665 | "FE0A55A988B3B93946A63EB36B23785A5E6EFC3E", | |
666 | "0CBDF2A5781C59F907513147A0DE3CC774B54BF3", | |
667 | "663E40FEE5A44BFCB1C99EA5935A6B5BC9F583B0", | |
668 | "00162134256952DD9AE6B51EFB159B35C3C138C7", | |
669 | "CEB88E4736E354416E2010FC1061B3B53B81664B", | |
670 | "A6A2C4B6BCC41DDC67278F3DF4D8D0B9DD7784EF", | |
671 | "C23D083CD8820B57800A869F5F261D45E02DC55D", | |
672 | "E8AC31927B78DDEC41A31CA7A44EB7177165E7AB", | |
673 | "E864EC5DBAB0F9FF6984AB6AD43A8C9B81CC9F9C", | |
674 | "CFED6269069417A84D6DE2347220F4B858BCD530", | |
675 | "D9217BFB46C96348722C3783D29D4B1A3FEDA38C", | |
676 | "DEC24E5554F79697218D317315FA986229CE3350", | |
677 | "83A099DF7071437BA5495A5B0BFBFEFE1C0EF7F3", | |
678 | "AA3198E30891A83E33CE3BFA0587D86A197D4F80", | |
679 | "9B6ACBEB4989CBEE7015C7D515A75672FFDE3442", | |
680 | "B021EB08A436B02658EAA7BA3C88D49F1219C035", | |
681 | "CAE36DAB8AEA29F62E0855D9CB3CD8E7D39094B1", | |
682 | "02DE8BA699F3C1B0CB5AD89A01F2346E630459D7", | |
683 | "88021458847DD39B4495368F7254941859FAD44B", | |
684 | "91A165295C666FE85C2ADBC5A10329DAF0CB81A0", | |
685 | "4B31312EAF8B506811151A9DBD162961F7548C4B", | |
686 | "3FE70971B20558F7E9BAC303ED2BC14BDE659A62", | |
687 | "93FB769D5BF49D6C563685954E2AECC024DC02D6", | |
688 | "BC8827C3E614D515E83DEA503989DEA4FDA6EA13", | |
689 | "E83868DBE4A389AB48E61CFC4ED894F32AE112AC", | |
690 | "55C95459CDE4B33791B4B2BCAAF840930AF3F3BD", | |
691 | "36BB0E2BA438A3E03214D9ED2B28A4D5C578FCAA", | |
692 | "3ACBF874199763EBA20F3789DFC59572ACA4CF33", | |
693 | "86BE037C4D509C9202020767D860DAB039CADACE", | |
694 | "51B57D7080A87394EEC3EB2E0B242E553F2827C9", | |
695 | "1EFBFA78866315CE6A71E457F3A750A38FACAB41", | |
696 | "57D6CB41AEEC20236F365B3A490C61D0CFA39611", | |
697 | "C532CB64B4BA826372BCCF2B4B5793D5B88BB715", | |
698 | "15833B5631032663E783686A209C6A2B47A1080E", | |
699 | "D04F2043C96E10CD83B574B1E1C217052CD4A6B2", | |
700 | "E8882627C64DB743F7DB8B4413DD033FC63BEB20", | |
701 | "CD2D32286B8867BC124A0AF2236FC74BE3622199", | |
702 | "019B70D745375091ED5C7B218445EC986D0F5A82", | |
703 | "E5FF5FEC1DADBAED02BF2DAD4026BE6A96B3F2AF", | |
704 | "6F4E23B3F2E2C068D13921FE4E5E053FFED4E146", | |
705 | "25E179602A575C915067566FBA6DA930E97F8678", | |
706 | "67DED0E68E235C8A523E051E86108EEB757EFBFD", | |
707 | "AF78536EA83C822796745556D62A3EE82C7BE098", | |
708 | "64D7AC52E47834BE72455F6C64325F9C358B610D", | |
709 | "9D4866BAA3639C13E541F250FFA3D8BC157A491F", | |
710 | "2E258811961D3EB876F30E7019241A01F9517BEC", | |
711 | "8E0EBC487146F83BC9077A1630E0FB3AB3C89E63", | |
712 | "CE8953741FFF3425D2311FBBF4AB481B669DEF70", | |
713 | "789D1D2DAB52086BD90C0E137E2515ED9C6B59B5", | |
714 | "B76CE7472700DD68D6328B7AA8437FB051D15745", | |
715 | "F218669B596C5FFB0B1C14BD03C467FC873230A0", | |
716 | "1FF3BDBE0D504CB0CDFAB17E6C37ABA6B3CFFDED", | |
717 | "2F3CBACBB14405A4652ED52793C1814FD8C4FCE0", | |
718 | "982C8AB6CE164F481915AF59AAED9FFF2A391752", | |
719 | "5CD92012D488A07ECE0E47901D0E083B6BD93E3F", | |
720 | "69603FEC02920851D4B3B8782E07B92BB2963009", | |
721 | "3E90F76437B1EA44CF98A08D83EA24CECF6E6191", | |
722 | "34C09F107C42D990EB4881D4BF2DDDCAB01563AE", | |
723 | "474BE0E5892EB2382109BFC5E3C8249A9283B03D", | |
724 | "A04B4F75051786682483252438F6A75BF4705EC6", | |
725 | "BE88A6716083EB50ED9416719D6A247661299383", | |
726 | "C67E38717FEE1A5F65EC6C7C7C42AFC00CD37F04", | |
727 | "959AC4082388E19E9BE5DE571C047EF10C174A8D", | |
728 | "BAA7AA7B7753FA0ABDC4A541842B5D238D949F0A", | |
729 | "351394DCEBC08155D100FCD488578E6AE71D0E9C", | |
730 | "AB8BE94C5AF60D9477EF1252D604E58E27B2A9EE", | |
731 | "3429EC74A695FDD3228F152564952308AFE0680A", | |
732 | "907FA46C029BC67EAA8E4F46E3C2A232F85BD122", | |
733 | "2644C87D1FBBBC0FC8D65F64BCA2492DA15BAAE4", | |
734 | "110A3EEB408756E2E81ABAF4C5DCD4D4C6AFCF6D", | |
735 | "CD4FDC35FAC7E1ADB5DE40F47F256EF74D584959", | |
736 | "8E6E273208AC256F9ECCF296F3F5A37BC8A0F9F7", | |
737 | "FE0606100BDBC268DB39B503E0FDFE3766185828", | |
738 | "6C63C3E58047BCDB35A17F74EEBA4E9B14420809", | |
739 | "BCC2BD305F0BCDA8CF2D478EF9FE080486CB265F", | |
740 | "CE5223FD3DD920A3B666481D5625B16457DCB5E8", | |
741 | "948886776E42E4F5FAE1B2D0C906AC3759E3F8B0", | |
742 | "4C12A51FCFE242F832E3D7329304B11B75161EFB", | |
743 | "C54BDD2050504D92F551D378AD5FC72C9ED03932", | |
744 | "8F53E8FA79EA09FD1B682AF5ED1515ECA965604C", | |
745 | "2D7E17F6294524CE78B33EAB72CDD08E5FF6E313", | |
746 | "64582B4B57F782C9302BFE7D07F74AA176627A3A", | |
747 | "6D88795B71D3E386BBD1EB830FB9F161BA98869F", | |
748 | "86AD34A6463F12CEE6DE9596ABA72F0DF1397FD1", | |
749 | "7EB46685A57C0D466152DC339C8122548C757ED1", | |
750 | "E7A98FB0692684054407CC221ABC60C199D6F52A", | |
751 | "34DF1306662206FD0A5FC2969A4BEEC4EB0197F7", | |
752 | "56CF7EBF08D10F0CB9FE7EE3B63A5C3A02BCB450", | |
753 | "3BAE5CB8226642088DA760A6F78B0CF8EDDEA9F1", | |
754 | "6475DF681E061FA506672C27CBABFA9AA6DDFF62", | |
755 | "79D81991FA4E4957C8062753439DBFD47BBB277D", | |
756 | "BAE224477B20302E881F5249F52EC6C34DA8ECEF", | |
757 | "EDE4DEB4293CFE4138C2C056B7C46FF821CC0ACC", | |
758 | ||
759 | "A9993E364706816ABA3E25717850C26C9CD0D89D", | |
760 | "84983E441C3BD26EBAAE4AA1F95129E5E54670F1" | |
761 | }; | |
762 | ||
763 | static uschar *atest = "34AA973CD4C4DAA4F61EEB2BDBAD27316534016F"; | |
764 | ||
765 | int main(void) | |
766 | { | |
767 | sha1 base; | |
768 | int j; | |
769 | int i = 0x01020304; | |
770 | uschar *ctest = (uschar *)(&i); | |
771 | uschar buffer[256]; | |
772 | uschar digest[20]; | |
773 | uschar s[41]; | |
774 | printf("Checking sha1: %s-endian\n\n", (ctest[0] == 0x04)? "little" : "big"); | |
775 | ||
776 | for (i = 0; i < sizeof(tests)/sizeof(uschar *); i ++) | |
777 | { | |
778 | printf("%d.\nShould be: %s\n", i, hashes[i]); | |
779 | native_sha1_start(&base); | |
780 | native_sha1_end(&base, tests[i], (i <= 128)? i : strlen(tests[i]), digest); | |
781 | for (j = 0; j < 20; j++) sprintf(s+2*j, "%02X", digest[j]); | |
782 | printf("Computed: %s\n", s); | |
783 | if (strcmp(s, hashes[i]) != 0) printf("*** No match ***\n"); | |
784 | printf("\n"); | |
785 | } | |
786 | ||
787 | /* 1 000 000 repetitions of "a" */ | |
788 | ||
789 | ctest = malloc(1000000); | |
790 | memset(ctest, 'a', 1000000); | |
791 | ||
792 | printf("1 000 000 repetitions of 'a'\n"); | |
793 | printf("Should be: %s\n", atest); | |
794 | native_sha1_start(&base); | |
795 | native_sha1_end(&base, ctest, 1000000, digest); | |
796 | for (j = 0; j < 20; j++) sprintf(s+2*j, "%02X", digest[j]); | |
797 | printf("Computed: %s\n", s); | |
798 | if (strcmp(s, atest) != 0) printf("*** No match ***\n"); | |
799 | ||
800 | } | |
801 | # endif /*STAND_ALONE*/ | |
2592e6c0 | 802 | |
2592e6c0 | 803 | /* End of File */ |