| 1 | /* |
| 2 | * Exim - an Internet mail transport agent |
| 3 | * |
| 4 | * Copyright (C) 2016 Exim maintainers |
| 5 | * Copyright (c) University of Cambridge 1995 - 2016 |
| 6 | * |
| 7 | * Hash interface functions |
| 8 | */ |
| 9 | |
| 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 | |
| 29 | |
| 30 | /******************************************************************************/ |
| 31 | #ifdef SHA_OPENSSL |
| 32 | |
| 33 | void |
| 34 | exim_sha_init(hctx * h, hashmethod m) |
| 35 | { |
| 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 | } |
| 42 | } |
| 43 | |
| 44 | |
| 45 | void |
| 46 | exim_sha_update(hctx * h, const uschar * data, int len) |
| 47 | { |
| 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 | } |
| 53 | } |
| 54 | |
| 55 | |
| 56 | void |
| 57 | exim_sha_finish(hctx * h, blob * b) |
| 58 | { |
| 59 | b->data = store_get(b->len = h->hashlen); |
| 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 | } |
| 65 | } |
| 66 | |
| 67 | |
| 68 | |
| 69 | #elif defined(SHA_GNUTLS) |
| 70 | /******************************************************************************/ |
| 71 | |
| 72 | void |
| 73 | exim_sha_init(hctx * h, hashmethod m) |
| 74 | { |
| 75 | switch (h->method = m) |
| 76 | { |
| 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; |
| 83 | } |
| 84 | } |
| 85 | |
| 86 | |
| 87 | void |
| 88 | exim_sha_update(hctx * h, const uschar * data, int len) |
| 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 |
| 107 | exim_sha_init(hctx * h, hashmethod m) |
| 108 | { |
| 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 | } |
| 115 | } |
| 116 | |
| 117 | |
| 118 | void |
| 119 | exim_sha_update(hctx * h, const uschar * data, int len) |
| 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 |
| 139 | exim_sha_init(hctx * h, hashmethod m) |
| 140 | { |
| 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 | } |
| 147 | } |
| 148 | |
| 149 | |
| 150 | void |
| 151 | exim_sha_update(hctx * h, const uschar * data, int len) |
| 152 | { |
| 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 | } |
| 158 | } |
| 159 | |
| 160 | |
| 161 | void |
| 162 | exim_sha_finish(hctx * h, blob * b) |
| 163 | { |
| 164 | b->data = store_get(b->len = h->hashlen); |
| 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 | } |
| 170 | } |
| 171 | |
| 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 |
| 386 | exim_sha_init(hctx * h, hashmethod m) |
| 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 | |
| 410 | #endif |
| 411 | /******************************************************************************/ |
| 412 | |
| 413 | /* Common to all library versions */ |
| 414 | int |
| 415 | exim_sha_hashlen(hctx * h) |
| 416 | { |
| 417 | return h->method == HASH_SHA1 ? 20 |
| 418 | : h->method == HASH_SHA256 ? 32 |
| 419 | : 0; |
| 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); |
| 442 | } |
| 443 | |
| 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 | { |
| 455 | exim_sha_init(h, HASH_SHA1); |
| 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*/ |
| 802 | |
| 803 | /* End of File */ |