Advertisement
Guest User

Untitled

a guest
May 28th, 2012
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 44.66 KB | None | 0 0
  1. /*
  2. * crc32c.c
  3. *
  4. * August 26, 2011 Darrick J. Wong <djwong at us.ibm.com>
  5. * Reuse Bob Pearson's slice-by-8 implementation for e2fsprogs.
  6. *
  7. * July 20, 2011 Bob Pearson <rpearson at systemfabricworks.com>
  8. * added slice by 8 algorithm to the existing conventional and
  9. * slice by 4 algorithms.
  10. *
  11. * Oct 15, 2000 Matt Domsch <Matt_Domsch@dell.com>
  12. * Nicer crc32 functions/docs submitted by linux@horizon.com. Thanks!
  13. * Code was from the public domain, copyright abandoned. Code was
  14. * subsequently included in the kernel, thus was re-licensed under the
  15. * GNU GPL v2.
  16. *
  17. * Oct 12, 2000 Matt Domsch <Matt_Domsch@dell.com>
  18. * Same crc32 function was used in 5 other places in the kernel.
  19. * I made one version, and deleted the others.
  20. * There are various incantations of crc32(). Some use a seed of 0 or ~0.
  21. * Some xor at the end with ~0. The generic crc32() function takes
  22. * seed as an argument, and doesn't xor at the end. Then individual
  23. * users can do whatever they need.
  24. * drivers/net/smc9194.c uses seed ~0, doesn't xor with ~0.
  25. * fs/jffs2 uses seed 0, doesn't xor with ~0.
  26. * fs/partitions/efi.c uses seed ~0, xor's with ~0.
  27. *
  28. * This source code is licensed under the GNU General Public License,
  29. * Version 2. See the file COPYING for more details.
  30. */
  31. #include "config.h"
  32. #include <stdint.h>
  33. #include <stdlib.h>
  34. #include <stdio.h>
  35. #define __force
  36. #define min(x, y) ((x) > (y) ? (y) : (x))
  37. #define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask))
  38. #define __ALIGN_KERNEL(x, a) __ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1)
  39. #define ALIGN(x, a) __ALIGN_KERNEL((x), (a))
  40. #define PTR_ALIGN(p, a) ((typeof(p))ALIGN((unsigned long)(p), (a)))
  41. #include "crc32c_defs.h"
  42.  
  43. #include "ext2fs.h"
  44. #ifdef WORDS_BIGENDIAN
  45. #define __constant_cpu_to_le32(x) ___constant_swab32((x))
  46. #define __constant_cpu_to_be32(x) (x)
  47. #define __be32_to_cpu(x) (x)
  48. #define __cpu_to_be32(x) (x)
  49. #define __cpu_to_le32(x) (ext2fs_cpu_to_le32((x)))
  50. #define __le32_to_cpu(x) (ext2fs_le32_to_cpu((x)))
  51. #else
  52. #define __constant_cpu_to_le32(x) (x)
  53. #define __constant_cpu_to_be32(x) ___constant_swab32((x))
  54. #define __be32_to_cpu(x) (ext2fs_be32_to_cpu((x)))
  55. #define __cpu_to_be32(x) (ext2fs_cpu_to_be32((x)))
  56. #define __cpu_to_le32(x) (x)
  57. #define __le32_to_cpu(x) (x)
  58. #endif
  59.  
  60. #if CRC_LE_BITS > 8
  61. # define tole(x) (__force uint32_t) __constant_cpu_to_le32(x)
  62. #else
  63. # define tole(x) (x)
  64. #endif
  65.  
  66. #if CRC_BE_BITS > 8
  67. # define tobe(x) (__force uint32_t) __constant_cpu_to_be32(x)
  68. #else
  69. # define tobe(x) (x)
  70. #endif
  71.  
  72. #include "crc32c_table.h"
  73.  
  74. #if CRC_LE_BITS == 32
  75. /* slice by 4 algorithm */
  76. static uint32_t crc32c_le_body(uint32_t crc, uint8_t const *buf, size_t len)
  77. {
  78. const uint8_t *p8;
  79. const uint32_t *p32;
  80. size_t init_bytes;
  81. size_t words;
  82. size_t end_bytes;
  83. size_t i;
  84. uint32_t q;
  85. uint8_t i0, i1, i2, i3;
  86.  
  87. crc = (__force uint32_t) __cpu_to_le32(crc);
  88.  
  89. /* unroll loop into 'init_bytes' odd bytes followed by
  90. * 'words' aligned 4 byte words followed by
  91. * 'end_bytes' odd bytes at the end */
  92. p8 = buf;
  93. p32 = (uint32_t *)PTR_ALIGN(p8, 4);
  94. init_bytes = min((uintptr_t)p32 - (uintptr_t)p8, len);
  95. words = (len - init_bytes) >> 2;
  96. end_bytes = (len - init_bytes) & 3;
  97.  
  98. for (i = 0; i < init_bytes; i++) {
  99. #ifndef WORDS_BIGENDIAN
  100. i0 = *p8++ ^ crc;
  101. crc = t0_le[i0] ^ (crc >> 8);
  102. #else
  103. i0 = *p8++ ^ (crc >> 24);
  104. crc = t0_le[i0] ^ (crc << 8);
  105. #endif
  106. }
  107.  
  108. /* using pre-increment below slightly faster */
  109. p32--;
  110.  
  111. for (i = 0; i < words; i++) {
  112. #ifndef WORDS_BIGENDIAN
  113. q = *++p32 ^ crc;
  114. i3 = q;
  115. i2 = q >> 8;
  116. i1 = q >> 16;
  117. i0 = q >> 24;
  118. crc = t3_le[i3] ^ t2_le[i2] ^ t1_le[i1] ^ t0_le[i0];
  119. #else
  120. q = *++p32 ^ crc;
  121. i3 = q >> 24;
  122. i2 = q >> 16;
  123. i1 = q >> 8;
  124. i0 = q;
  125. crc = t3_le[i3] ^ t2_le[i2] ^ t1_le[i1] ^ t0_le[i0];
  126. #endif
  127. }
  128.  
  129. p8 = (uint8_t *)(++p32);
  130.  
  131. for (i = 0; i < end_bytes; i++) {
  132. #ifndef WORDS_BIGENDIAN
  133. i0 = *p8++ ^ crc;
  134. crc = t0_le[i0] ^ (crc >> 8);
  135. #else
  136. i0 = *p8++ ^ (crc >> 24);
  137. crc = t0_le[i0] ^ (crc << 8);
  138. #endif
  139. }
  140.  
  141. return __le32_to_cpu((__force __le32)crc);
  142. }
  143. #endif
  144.  
  145. #if CRC_BE_BITS == 32
  146. static uint32_t crc32c_be_body(uint32_t crc, uint8_t const *buf, size_t len)
  147. {
  148. const uint8_t *p8;
  149. const uint32_t *p32;
  150. size_t init_bytes;
  151. size_t words;
  152. size_t end_bytes;
  153. size_t i;
  154. uint32_t q;
  155. uint8_t i0, i1, i2, i3;
  156.  
  157. crc = (__force uint32_t) __cpu_to_be32(crc);
  158.  
  159. p8 = buf;
  160. p32 = (uint32_t *)PTR_ALIGN(p8, 4);
  161. init_bytes = min((uintptr_t)p32 - (uintptr_t)p8, len);
  162. words = (len - init_bytes) >> 2;
  163. end_bytes = (len - init_bytes) & 3;
  164.  
  165. for (i = 0; i < init_bytes; i++) {
  166. #ifndef WORDS_BIGENDIAN
  167. i0 = *p8++ ^ crc;
  168. crc = t0_be[i0] ^ (crc >> 8);
  169. #else
  170. i0 = *p8++ ^ (crc >> 24);
  171. crc = t0_be[i0] ^ (crc << 8);
  172. #endif
  173. }
  174.  
  175. p32--;
  176.  
  177. for (i = 0; i < words; i++) {
  178. #ifndef WORDS_BIGENDIAN
  179. q = *++p32 ^ crc;
  180. i3 = q;
  181. i2 = q >> 8;
  182. i1 = q >> 16;
  183. i0 = q >> 24;
  184. crc = t3_be[i3] ^ t2_be[i2] ^ t1_be[i1] ^ t0_be[i0];
  185. #else
  186. q = *++p32 ^ crc;
  187. i3 = q >> 24;
  188. i2 = q >> 16;
  189. i1 = q >> 8;
  190. i0 = q;
  191. crc = t3_be[i3] ^ t2_be[i2] ^ t1_be[i1] ^ t0_be[i0];
  192. #endif
  193. }
  194.  
  195. p8 = (uint8_t *)(++p32);
  196.  
  197. for (i = 0; i < end_bytes; i++) {
  198. #ifndef WORDS_BIGENDIAN
  199. i0 = *p8++ ^ crc;
  200. crc = t0_be[i0] ^ (crc >> 8);
  201. #else
  202. i0 = *p8++ ^ (crc >> 24);
  203. crc = t0_be[i0] ^ (crc << 8);
  204. #endif
  205. }
  206.  
  207. return __be32_to_cpu((__force __be32)crc);
  208. }
  209. #endif
  210.  
  211. #if CRC_LE_BITS == 64
  212. /* slice by 8 algorithm */
  213. static uint32_t crc32c_le_body(uint32_t crc, uint8_t const *buf, size_t len)
  214. {
  215. const uint8_t *p8;
  216. const uint32_t *p32;
  217. size_t init_bytes;
  218. size_t words;
  219. size_t end_bytes;
  220. size_t i;
  221. uint32_t q;
  222. uint8_t i0, i1, i2, i3;
  223.  
  224. crc = (__force uint32_t) __cpu_to_le32(crc);
  225.  
  226. p8 = buf;
  227. p32 = (uint32_t *)PTR_ALIGN(p8, 8);
  228. init_bytes = min((uintptr_t)p32 - (uintptr_t)p8, len);
  229. words = (len - init_bytes) >> 3;
  230. end_bytes = (len - init_bytes) & 7;
  231.  
  232. for (i = 0; i < init_bytes; i++) {
  233. #ifndef WORDS_BIGENDIAN
  234. i0 = *p8++ ^ crc;
  235. crc = t0_le[i0] ^ (crc >> 8);
  236. #else
  237. i0 = *p8++ ^ (crc >> 24);
  238. crc = t0_le[i0] ^ (crc << 8);
  239. #endif
  240. }
  241.  
  242. p32--;
  243.  
  244. for (i = 0; i < words; i++) {
  245. #ifndef WORDS_BIGENDIAN
  246. q = *++p32 ^ crc;
  247. i3 = q;
  248. i2 = q >> 8;
  249. i1 = q >> 16;
  250. i0 = q >> 24;
  251. crc = t7_le[i3] ^ t6_le[i2] ^ t5_le[i1] ^ t4_le[i0];
  252.  
  253. q = *++p32;
  254. i3 = q;
  255. i2 = q >> 8;
  256. i1 = q >> 16;
  257. i0 = q >> 24;
  258. crc ^= t3_le[i3] ^ t2_le[i2] ^ t1_le[i1] ^ t0_le[i0];
  259. #else
  260. q = *++p32 ^ crc;
  261. i3 = q >> 24;
  262. i2 = q >> 16;
  263. i1 = q >> 8;
  264. i0 = q;
  265. crc = t7_le[i3] ^ t6_le[i2] ^ t5_le[i1] ^ t4_le[i0];
  266.  
  267. q = *++p32;
  268. i3 = q >> 24;
  269. i2 = q >> 16;
  270. i1 = q >> 8;
  271. i0 = q;
  272. crc ^= t3_le[i3] ^ t2_le[i2] ^ t1_le[i1] ^ t0_le[i0];
  273. #endif
  274. }
  275.  
  276. p8 = (uint8_t *)(++p32);
  277.  
  278. for (i = 0; i < end_bytes; i++) {
  279. #ifndef WORDS_BIGENDIAN
  280. i0 = *p8++ ^ crc;
  281. crc = t0_le[i0] ^ (crc >> 8);
  282. #else
  283. i0 = *p8++ ^ (crc >> 24);
  284. crc = t0_le[i0] ^ (crc << 8);
  285. #endif
  286. }
  287.  
  288. return __le32_to_cpu(crc);
  289. }
  290. #endif
  291.  
  292. #if CRC_BE_BITS == 64
  293. static uint32_t crc32c_be_body(uint32_t crc, uint8_t const *buf, size_t len)
  294. {
  295. const uint8_t *p8;
  296. const uint32_t *p32;
  297. size_t init_bytes;
  298. size_t words;
  299. size_t end_bytes;
  300. size_t i;
  301. uint32_t q;
  302. uint8_t i0, i1, i2, i3;
  303.  
  304. crc = (__force uint32_t) __cpu_to_be32(crc);
  305.  
  306. p8 = buf;
  307. p32 = (uint32_t *)PTR_ALIGN(p8, 8);
  308. init_bytes = min((uintptr_t)p32 - (uintptr_t)p8, len);
  309. words = (len - init_bytes) >> 3;
  310. end_bytes = (len - init_bytes) & 7;
  311.  
  312. for (i = 0; i < init_bytes; i++) {
  313. #ifndef WORDS_BIGENDIAN
  314. i0 = *p8++ ^ crc;
  315. crc = t0_be[i0] ^ (crc >> 8);
  316. #else
  317. i0 = *p8++ ^ (crc >> 24);
  318. crc = t0_be[i0] ^ (crc << 8);
  319. #endif
  320. }
  321.  
  322. p32--;
  323.  
  324. for (i = 0; i < words; i++) {
  325. #ifndef WORDS_BIGENDIAN
  326. q = *++p32 ^ crc;
  327. i3 = q;
  328. i2 = q >> 8;
  329. i1 = q >> 16;
  330. i0 = q >> 24;
  331. crc = t7_be[i3] ^ t6_be[i2] ^ t5_be[i1] ^ t4_be[i0];
  332.  
  333. q = *++p32;
  334. i3 = q;
  335. i2 = q >> 8;
  336. i1 = q >> 16;
  337. i0 = q >> 24;
  338. crc ^= t3_be[i3] ^ t2_be[i2] ^ t1_be[i1] ^ t0_be[i0];
  339. #else
  340. q = *++p32 ^ crc;
  341. i3 = q >> 24;
  342. i2 = q >> 16;
  343. i1 = q >> 8;
  344. i0 = q;
  345. crc = t7_be[i3] ^ t6_be[i2] ^ t5_be[i1] ^ t4_be[i0];
  346.  
  347. q = *++p32;
  348. i3 = q >> 24;
  349. i2 = q >> 16;
  350. i1 = q >> 8;
  351. i0 = q;
  352. crc ^= t3_be[i3] ^ t2_be[i2] ^ t1_be[i1] ^ t0_be[i0];
  353. #endif
  354. }
  355.  
  356. p8 = (uint8_t *)(++p32);
  357.  
  358. for (i = 0; i < end_bytes; i++) {
  359. #ifndef WORDS_BIGENDIAN
  360. i0 = *p8++ ^ crc;
  361. crc = t0_be[i0] ^ (crc >> 8);
  362. #else
  363. i0 = *p8++ ^ (crc >> 24);
  364. crc = t0_be[i0] ^ (crc << 8);
  365. #endif
  366. }
  367.  
  368. return __be32_to_cpu(crc);
  369. }
  370. #endif
  371.  
  372. /**
  373. * crc32c_le() - Calculate bitwise little-endian CRC32c.
  374. * @crc: seed value for computation. ~0 for ext4, sometimes 0 for
  375. * other uses, or the previous crc32c value if computing incrementally.
  376. * @p: pointer to buffer over which CRC is run
  377. * @len: length of buffer @p
  378. */
  379. uint32_t ext2fs_crc32c_le(uint32_t crc, unsigned char const *p, size_t len)
  380. {
  381. #if CRC_LE_BITS == 1
  382. int i;
  383. while (len--) {
  384. crc ^= *p++;
  385. for (i = 0; i < 8; i++)
  386. crc = (crc >> 1) ^ ((crc & 1) ? CRCPOLY_LE : 0);
  387. }
  388. # elif CRC_LE_BITS == 2
  389. while (len--) {
  390. crc ^= *p++;
  391. crc = (crc >> 2) ^ t0_le[crc & 0x03];
  392. crc = (crc >> 2) ^ t0_le[crc & 0x03];
  393. crc = (crc >> 2) ^ t0_le[crc & 0x03];
  394. crc = (crc >> 2) ^ t0_le[crc & 0x03];
  395. }
  396. # elif CRC_LE_BITS == 4
  397. while (len--) {
  398. crc ^= *p++;
  399. crc = (crc >> 4) ^ t0_le[crc & 0x0f];
  400. crc = (crc >> 4) ^ t0_le[crc & 0x0f];
  401. }
  402. # elif CRC_LE_BITS == 8
  403. while (len--) {
  404. crc ^= *p++;
  405. crc = (crc >> 8) ^ t0_le[crc & 0xff];
  406. }
  407. # else
  408. crc = crc32c_le_body(crc, p, len);
  409. # endif
  410. return crc;
  411. }
  412.  
  413. /**
  414. * crc32c_be() - Calculate bitwise big-endian CRC32c.
  415. * @crc: seed value for computation. ~0 for ext4, sometimes 0 for
  416. * other uses, or the previous crc32c value if computing incrementally.
  417. * @p: pointer to buffer over which CRC is run
  418. * @len: length of buffer @p
  419. */
  420. uint32_t ext2fs_crc32c_be(uint32_t crc, unsigned char const *p, size_t len)
  421. {
  422. #if CRC_BE_BITS == 1
  423. int i;
  424. while (len--) {
  425. crc ^= *p++ << 24;
  426. for (i = 0; i < 8; i++)
  427. crc = (crc << 1) ^
  428. ((crc & 0x80000000) ? CRCPOLY_BE : 0);
  429. }
  430. # elif CRC_BE_BITS == 2
  431. while (len--) {
  432. crc ^= *p++ << 24;
  433. crc = (crc << 2) ^ t0_be[crc >> 30];
  434. crc = (crc << 2) ^ t0_be[crc >> 30];
  435. crc = (crc << 2) ^ t0_be[crc >> 30];
  436. crc = (crc << 2) ^ t0_be[crc >> 30];
  437. }
  438. # elif CRC_BE_BITS == 4
  439. while (len--) {
  440. crc ^= *p++ << 24;
  441. crc = (crc << 4) ^ t0_be[crc >> 28];
  442. crc = (crc << 4) ^ t0_be[crc >> 28];
  443. }
  444. # elif CRC_BE_BITS == 8
  445. while (len--) {
  446. crc ^= *p++ << 24;
  447. crc = (crc << 8) ^ t0_be[crc >> 24];
  448. }
  449. # else
  450. crc = crc32c_be_body(crc, p, len);
  451. # endif
  452. return crc;
  453. }
  454.  
  455. #ifdef UNITTEST
  456. static uint8_t test_buf[] = {
  457. 0xd9, 0xd7, 0x6a, 0x13, 0x3a, 0xb1, 0x05, 0x48,
  458. 0xda, 0xad, 0x14, 0xbd, 0x03, 0x3a, 0x58, 0x5e,
  459. 0x6e, 0xd1, 0x56, 0xc9, 0x2e, 0xc4, 0xcb, 0x6b,
  460. 0xe8, 0x77, 0x52, 0x37, 0x4e, 0x0f, 0x55, 0xd2,
  461. 0x12, 0x65, 0x90, 0xc2, 0x41, 0x49, 0x81, 0x01,
  462. 0xf5, 0x01, 0xeb, 0x2d, 0x78, 0x74, 0x23, 0x5d,
  463. 0x84, 0x5c, 0x81, 0x92, 0x21, 0xe9, 0x8d, 0x1d,
  464. 0x89, 0xf2, 0x4a, 0xac, 0xdd, 0xf9, 0xaf, 0xee,
  465. 0x44, 0xe7, 0x6e, 0xed, 0xfb, 0xd8, 0x89, 0x0e,
  466. 0x96, 0x62, 0xcd, 0xa4, 0x4b, 0xa9, 0xe5, 0x45,
  467. 0xb1, 0x29, 0x9b, 0x0f, 0xfc, 0xbd, 0x83, 0xab,
  468. 0xa8, 0x54, 0x96, 0x44, 0x2c, 0x7f, 0xbb, 0xe7,
  469. 0x52, 0x29, 0x08, 0xee, 0x14, 0xc5, 0xc2, 0xec,
  470. 0x5a, 0xeb, 0x40, 0x40, 0xea, 0xd1, 0x3d, 0x15,
  471. 0x73, 0xaa, 0x8c, 0x73, 0xfc, 0xf2, 0x2b, 0x49,
  472. 0x0b, 0x13, 0x96, 0xd9, 0x8e, 0x4b, 0xbc, 0xe0,
  473. 0xf4, 0xd2, 0xe0, 0x2e, 0x7a, 0xf0, 0x5d, 0x1f,
  474. 0xd2, 0x92, 0x97, 0xe0, 0xaa, 0x59, 0xab, 0xc9,
  475. 0x5c, 0xa6, 0x51, 0x1a, 0xe3, 0xd6, 0x06, 0xb9,
  476. 0xae, 0xb8, 0x76, 0x36, 0x79, 0x37, 0x52, 0xf6,
  477. 0x34, 0xaf, 0x27, 0x19, 0xe1, 0xc0, 0x2b, 0xdd,
  478. 0x01, 0x15, 0xcd, 0xce, 0x44, 0xf6, 0x4c, 0x18,
  479. 0x92, 0x69, 0xbe, 0x8a, 0x76, 0x23, 0x52, 0x13,
  480. 0x3f, 0xf9, 0xe0, 0xf5, 0x06, 0x28, 0x7c, 0xc7,
  481. 0xf3, 0x42, 0x0f, 0xdd, 0x40, 0x33, 0xf7, 0x99,
  482. 0xe2, 0xad, 0x26, 0xd9, 0x53, 0x10, 0x72, 0x0c,
  483. 0x4e, 0x43, 0x4c, 0x61, 0xfe, 0xd9, 0xc1, 0x16,
  484. 0xa1, 0x93, 0xca, 0x3c, 0x75, 0x7f, 0x07, 0x7a,
  485. 0x65, 0xb3, 0x53, 0x2a, 0x52, 0x00, 0xa0, 0x62,
  486. 0xe0, 0xa3, 0x1f, 0xad, 0xd7, 0xbb, 0xc0, 0x83,
  487. 0x5d, 0x54, 0x87, 0x5f, 0xc8, 0x2f, 0xc8, 0xbf,
  488. 0x69, 0x04, 0x91, 0xc8, 0xa6, 0x1d, 0x4d, 0x46,
  489. 0x91, 0xfc, 0x26, 0xf4, 0x16, 0xd1, 0xa4, 0xbf,
  490. 0x5c, 0xa2, 0x6c, 0xdd, 0xb4, 0x40, 0xf2, 0x2e,
  491. 0xa2, 0xad, 0xf7, 0xf4, 0xa5, 0x8a, 0x3e, 0x23,
  492. 0x64, 0x08, 0xc8, 0xa1, 0xa0, 0xf0, 0x5d, 0x70,
  493. 0xd2, 0x77, 0xfd, 0xc8, 0x50, 0x83, 0x0f, 0xd6,
  494. 0x2b, 0xe4, 0x1f, 0x52, 0x34, 0x33, 0x68, 0xfd,
  495. 0x92, 0xbe, 0x9f, 0x97, 0x6b, 0x8d, 0x81, 0x91,
  496. 0x0f, 0xef, 0x65, 0xc8, 0x0d, 0x15, 0x01, 0x77,
  497. 0x58, 0xb2, 0xf4, 0x1b, 0x06, 0x7e, 0xf5, 0xca,
  498. 0x15, 0x2e, 0x38, 0xd8, 0x81, 0x1c, 0x1c, 0xa0,
  499. 0xb6, 0x13, 0x6a, 0x2b, 0x71, 0x34, 0x52, 0xd7,
  500. 0x1d, 0xbd, 0x37, 0x59, 0xbc, 0x86, 0x25, 0x2b,
  501. 0xa8, 0x93, 0xce, 0x1a, 0x03, 0x16, 0xfe, 0x01,
  502. 0x57, 0x99, 0x24, 0x25, 0x2c, 0xb3, 0xab, 0x1e,
  503. 0x2d, 0x65, 0x20, 0x89, 0x17, 0x02, 0x0e, 0x0a,
  504. 0xf5, 0x1e, 0xc7, 0xff, 0x1f, 0x61, 0xa9, 0x54,
  505. 0x18, 0xd4, 0xba, 0x50, 0x57, 0x02, 0xa1, 0xab,
  506. 0x22, 0x2e, 0x07, 0xea, 0xa9, 0xa3, 0x83, 0x4f,
  507. 0x27, 0xf5, 0xc5, 0xee, 0x3c, 0x3b, 0x10, 0xad,
  508. 0x32, 0x2b, 0x1c, 0x03, 0xcb, 0xaf, 0x98, 0x83,
  509. 0x54, 0xc3, 0x68, 0x63, 0xd4, 0xe0, 0x0e, 0x3c,
  510. 0x1a, 0x4e, 0xc0, 0x81, 0xd0, 0xe8, 0x6a, 0x62,
  511. 0x6b, 0x3e, 0x6f, 0xc4, 0xc6, 0x33, 0x4e, 0x26,
  512. 0x21, 0xf5, 0x04, 0xdf, 0xfa, 0xce, 0x45, 0xaf,
  513. 0xdc, 0x5e, 0x1b, 0xad, 0x93, 0xca, 0xf5, 0xcf,
  514. 0xd7, 0xee, 0x0c, 0x5c, 0x5e, 0xb4, 0xf0, 0x92,
  515. 0xd2, 0xf2, 0xf0, 0xa9, 0x1e, 0xab, 0x80, 0x68,
  516. 0x46, 0xef, 0xcc, 0x26, 0x0c, 0x5c, 0xdd, 0x4e,
  517. 0x83, 0xb8, 0xb9, 0x53, 0x6e, 0xf8, 0x93, 0x38,
  518. 0x67, 0xa4, 0x41, 0x87, 0x72, 0xe7, 0x7e, 0x86,
  519. 0xc9, 0x49, 0x00, 0x33, 0xb1, 0x38, 0x6c, 0x71,
  520. 0xd7, 0x1d, 0x8e, 0x61, 0x01, 0xb6, 0x57, 0xa9,
  521. 0xf1, 0xac, 0x15, 0xc2, 0x83, 0x77, 0xca, 0x64,
  522. 0xca, 0x7b, 0x6c, 0xa1, 0x10, 0x1b, 0x13, 0xd0,
  523. 0xd3, 0x9e, 0x9e, 0x10, 0x70, 0xc8, 0x1a, 0xbb,
  524. 0x3f, 0x19, 0x86, 0xab, 0x01, 0x0e, 0xea, 0x34,
  525. 0x22, 0xea, 0xe2, 0x15, 0xb7, 0xed, 0x21, 0x21,
  526. 0x75, 0xa5, 0xe7, 0x08, 0xa1, 0x38, 0xe0, 0x91,
  527. 0x05, 0x60, 0xea, 0xa7, 0x50, 0x27, 0x18, 0x07,
  528. 0x9d, 0xe0, 0x18, 0x2b, 0xd4, 0x07, 0x59, 0x00,
  529. 0xe6, 0x45, 0x18, 0x2a, 0x30, 0x6e, 0xf3, 0xb4,
  530. 0xd0, 0xef, 0xa6, 0x5b, 0x71, 0xa2, 0x5a, 0x3b,
  531. 0x89, 0x4c, 0xaf, 0x3f, 0xcb, 0x9f, 0x03, 0xfb,
  532. 0x43, 0x7c, 0x6b, 0xd3, 0x6a, 0xea, 0xce, 0x4a,
  533. 0x5f, 0x64, 0xb5, 0x62, 0xda, 0x5d, 0x27, 0xb7,
  534. 0xb8, 0x11, 0xca, 0x33, 0x30, 0xec, 0x70, 0xf0,
  535. 0x1b, 0x03, 0x50, 0xff, 0x5e, 0xa6, 0x08, 0xde,
  536. 0x37, 0x70, 0xc0, 0x81, 0x55, 0x60, 0x17, 0xa1,
  537. 0x85, 0xae, 0x26, 0x44, 0xe4, 0x67, 0x3c, 0x91,
  538. 0xfd, 0xc4, 0x3d, 0x97, 0x72, 0x23, 0xf3, 0x3c,
  539. 0x8f, 0xe0, 0xe2, 0xf2, 0x09, 0x96, 0x10, 0x67,
  540. 0xb5, 0xfe, 0xff, 0x3d, 0x4a, 0xc8, 0x62, 0x11,
  541. 0xa5, 0x98, 0xc1, 0x2d, 0x40, 0x82, 0x88, 0x8b,
  542. 0xe5, 0xb0, 0x75, 0xbf, 0x2f, 0xa8, 0x6a, 0x55,
  543. 0x49, 0x2e, 0x9c, 0x29, 0xd2, 0x7c, 0xbf, 0xf3,
  544. 0xaa, 0x3a, 0x16, 0x4a, 0xa4, 0x15, 0xf3, 0x48,
  545. 0xde, 0x38, 0x13, 0x44, 0x26, 0x02, 0xe6, 0xe9,
  546. 0xa8, 0x24, 0x89, 0xb5, 0x43, 0x95, 0xe4, 0x4c,
  547. 0xc3, 0xa0, 0xdf, 0xcc, 0x42, 0xf8, 0x8d, 0xb0,
  548. 0x3b, 0xea, 0x10, 0xb7, 0xe1, 0x40, 0x54, 0xb9,
  549. 0xa3, 0x2d, 0xfb, 0xb4, 0x91, 0xc0, 0x3e, 0x94,
  550. 0xf1, 0xa1, 0x3c, 0xbe, 0xef, 0xb8, 0x70, 0x55,
  551. 0x0a, 0x26, 0x93, 0xbf, 0xe6, 0x21, 0x92, 0x32,
  552. 0x3c, 0x39, 0x27, 0x6a, 0x23, 0x48, 0x02, 0x35,
  553. 0x3c, 0xd4, 0xcc, 0x04, 0xc0, 0x4e, 0xa7, 0x02,
  554. 0x63, 0x37, 0xc2, 0xb8, 0x56, 0x1d, 0x57, 0x57,
  555. 0x42, 0x04, 0x8d, 0xee, 0xcf, 0x8b, 0xc9, 0xc3,
  556. 0xba, 0x3b, 0x15, 0xd7, 0xaf, 0xbf, 0x9e, 0xcd,
  557. 0x44, 0xcf, 0xf0, 0x00, 0xb7, 0x3a, 0xfc, 0xa8,
  558. 0x12, 0xab, 0x3a, 0x62, 0x01, 0x21, 0x46, 0xe9,
  559. 0x1e, 0x48, 0x37, 0xfc, 0x13, 0x4d, 0xf6, 0x2a,
  560. 0x72, 0x40, 0x75, 0x38, 0x71, 0xf2, 0x17, 0x20,
  561. 0x2c, 0xdd, 0xc0, 0x49, 0xbc, 0x63, 0x33, 0xea,
  562. 0x06, 0x75, 0x41, 0xe7, 0x5c, 0x1f, 0xfb, 0xf9,
  563. 0x68, 0x83, 0xc2, 0x5a, 0x4a, 0x1e, 0x61, 0x08,
  564. 0x57, 0xf3, 0x00, 0xba, 0x77, 0x92, 0x63, 0xa5,
  565. 0xb7, 0xfe, 0x97, 0x22, 0xda, 0x5e, 0xd3, 0xaf,
  566. 0xbc, 0x89, 0x0d, 0x4c, 0x37, 0xa9, 0x27, 0x4a,
  567. 0x7f, 0xdb, 0x81, 0x39, 0x11, 0x86, 0x12, 0xf9,
  568. 0x10, 0x50, 0xe4, 0xdb, 0x72, 0xf9, 0xae, 0x10,
  569. 0x7c, 0xed, 0x50, 0x5c, 0x61, 0xeb, 0x42, 0x1e,
  570. 0xa4, 0xf4, 0xf0, 0xfa, 0x45, 0x4d, 0x95, 0x2b,
  571. 0xd4, 0x67, 0x4a, 0xe3, 0x8a, 0x15, 0x55, 0x92,
  572. 0x77, 0x64, 0x8c, 0x51, 0x38, 0xf9, 0x26, 0x3e,
  573. 0x68, 0xe2, 0xac, 0xbb, 0x64, 0x77, 0xe2, 0x82,
  574. 0xa4, 0x42, 0x41, 0x38, 0xa0, 0xf0, 0xc9, 0xd8,
  575. 0x6c, 0xe0, 0xef, 0x4c, 0xda, 0xb4, 0x92, 0xef,
  576. 0x1b, 0xe3, 0x9b, 0xc1, 0x44, 0x3c, 0xb9, 0xb7,
  577. 0x39, 0xac, 0x5c, 0x32, 0x39, 0xb4, 0x21, 0x85,
  578. 0x93, 0xbc, 0xf2, 0x51, 0x43, 0xb7, 0xae, 0x1e,
  579. 0x61, 0x9c, 0x38, 0x9c, 0xaa, 0xff, 0xde, 0xfc,
  580. 0xbf, 0x85, 0xef, 0x17, 0x34, 0x36, 0x71, 0x5f,
  581. 0x04, 0x16, 0xa6, 0x9e, 0xfd, 0x3a, 0x03, 0xd8,
  582. 0xbf, 0x71, 0x70, 0x20, 0x8f, 0x7c, 0xfb, 0xff,
  583. 0x61, 0xe0, 0xe2, 0x60, 0xa7, 0xb1, 0xc0, 0xe0,
  584. 0xd9, 0x3f, 0xdc, 0x8d, 0x4a, 0xa4, 0x52, 0x61,
  585. 0xaf, 0x9d, 0xdf, 0x8a, 0x0d, 0x41, 0xc0, 0x25,
  586. 0x68, 0x12, 0x7b, 0xd5, 0xc7, 0xdb, 0x68, 0x70,
  587. 0x2d, 0x7d, 0x95, 0x12, 0x03, 0x23, 0x0c, 0xe8,
  588. 0x14, 0x41, 0x11, 0x28, 0xec, 0x9d, 0xd3, 0x28,
  589. 0x77, 0x7a, 0x3c, 0x93, 0x8e, 0x5c, 0x7e, 0xb3,
  590. 0x42, 0x9a, 0x18, 0x25, 0x93, 0xc8, 0xea, 0x43,
  591. 0x1b, 0xbe, 0xd5, 0x27, 0xf1, 0xd4, 0xe0, 0x1e,
  592. 0xce, 0xc7, 0xc7, 0x2c, 0x25, 0x35, 0x58, 0xb8,
  593. 0x6c, 0xf3, 0xa2, 0xad, 0xe7, 0x58, 0x49, 0x47,
  594. 0xf7, 0xca, 0xde, 0x8b, 0x81, 0xb7, 0x75, 0xf4,
  595. 0x95, 0xa7, 0x5c, 0xc3, 0x2c, 0x0e, 0x1c, 0x52,
  596. 0x9a, 0xc3, 0x2a, 0x00, 0x21, 0xa7, 0x51, 0x6b,
  597. 0xf0, 0x05, 0x87, 0x8c, 0x42, 0x1b, 0xc3, 0x2e,
  598. 0xa3, 0x76, 0x22, 0xd5, 0x7f, 0x56, 0x10, 0xef,
  599. 0x98, 0x85, 0x65, 0x86, 0x71, 0x87, 0xd2, 0x8c,
  600. 0xc0, 0x47, 0x20, 0xe8, 0xb5, 0x1c, 0xe3, 0xdd,
  601. 0x3c, 0x5c, 0x03, 0xbb, 0x0e, 0x97, 0x3b, 0xe1,
  602. 0x56, 0x9a, 0xd5, 0x0a, 0x63, 0xd5, 0x33, 0xaf,
  603. 0x36, 0xca, 0xcf, 0x8f, 0x00, 0x28, 0xa3, 0x45,
  604. 0xb8, 0xcd, 0xde, 0x73, 0xd4, 0xfa, 0x2d, 0x6f,
  605. 0xdb, 0x93, 0xaa, 0xdd, 0x7f, 0xd2, 0x22, 0x9c,
  606. 0x96, 0x48, 0x1e, 0xa8, 0x63, 0xbe, 0xbc, 0x0d,
  607. 0x14, 0x3c, 0x2e, 0x11, 0x1f, 0xd2, 0xf4, 0x57,
  608. 0xb3, 0x47, 0xf8, 0xa6, 0x1b, 0xc3, 0xa7, 0x95,
  609. 0x2d, 0xd4, 0xca, 0xb8, 0x0d, 0xfb, 0x06, 0x85,
  610. 0xda, 0x63, 0xf0, 0x3e, 0x9d, 0x5e, 0xee, 0xce,
  611. 0xed, 0x74, 0x1d, 0x2c, 0x97, 0x3f, 0x71, 0x95,
  612. 0x12, 0x03, 0xc5, 0x92, 0x46, 0x84, 0x1b, 0x07,
  613. 0xe6, 0xb4, 0x1d, 0x3a, 0xf1, 0x89, 0x90, 0x50,
  614. 0x10, 0x29, 0x34, 0xc0, 0x90, 0xbe, 0x4a, 0xa9,
  615. 0x0d, 0xb0, 0x7b, 0xfb, 0x35, 0xee, 0x4e, 0x34,
  616. 0xec, 0x5a, 0x58, 0xbc, 0xb8, 0xda, 0x38, 0x88,
  617. 0x8c, 0x74, 0x1e, 0xc9, 0xab, 0x78, 0x2e, 0x2a,
  618. 0x17, 0x8a, 0x43, 0x3d, 0xa1, 0x2a, 0x41, 0xb5,
  619. 0xd6, 0xe8, 0x5b, 0xc5, 0x4a, 0x1c, 0x3c, 0x9f,
  620. 0x8d, 0x3a, 0x69, 0x88, 0xf8, 0x80, 0xd2, 0x11,
  621. 0xfc, 0x7e, 0x80, 0x8e, 0x7f, 0x85, 0x64, 0x9c,
  622. 0x46, 0x58, 0xc8, 0x48, 0x98, 0x4b, 0xf5, 0x73,
  623. 0x3f, 0x49, 0xce, 0x53, 0x2c, 0xd5, 0xfc, 0x33,
  624. 0xf1, 0x6f, 0xd8, 0xe9, 0x2e, 0x70, 0x2e, 0xdc,
  625. 0xe5, 0x43, 0x80, 0x38, 0xf2, 0x87, 0xed, 0x85,
  626. 0xe4, 0x3e, 0x45, 0x14, 0x20, 0xcf, 0xa0, 0x61,
  627. 0x4f, 0xe8, 0xd7, 0x5b, 0xb3, 0x0d, 0x0e, 0x4e,
  628. 0x4d, 0xce, 0xbe, 0xba, 0xaa, 0x90, 0x09, 0xcb,
  629. 0x4b, 0x5d, 0x08, 0xff, 0x52, 0xd5, 0x23, 0xbc,
  630. 0xad, 0x8d, 0xd3, 0x06, 0x4a, 0xa0, 0x51, 0x56,
  631. 0xa7, 0xd8, 0x33, 0xab, 0xbc, 0xd0, 0xdf, 0x92,
  632. 0x87, 0x20, 0x2d, 0x7b, 0x5e, 0xfa, 0x30, 0xa7,
  633. 0x06, 0x06, 0xe5, 0x4f, 0x2c, 0xb5, 0x61, 0xd7,
  634. 0x54, 0xd3, 0xdf, 0xd0, 0x0a, 0xb0, 0x06, 0xce,
  635. 0xf6, 0x86, 0xb7, 0x8e, 0xaa, 0x7b, 0x78, 0xd5,
  636. 0xb9, 0xeb, 0x07, 0xac, 0x5f, 0xc5, 0xd2, 0x8c,
  637. 0x40, 0xe0, 0x7f, 0x98, 0xd4, 0xe5, 0x4b, 0xca,
  638. 0xfb, 0x47, 0xef, 0xef, 0xb9, 0x4d, 0x6d, 0x8f,
  639. 0x82, 0x68, 0x74, 0x84, 0xe0, 0x0a, 0x93, 0x0f,
  640. 0xb2, 0x01, 0xa9, 0x9f, 0x68, 0x6a, 0xe8, 0xf7,
  641. 0xfb, 0x0b, 0xde, 0x17, 0xe0, 0x30, 0x38, 0x51,
  642. 0xbc, 0x07, 0xb8, 0x2c, 0x91, 0x0f, 0xc1, 0x0e,
  643. 0xa6, 0xf9, 0xf0, 0xd5, 0x48, 0x76, 0x8a, 0xde,
  644. 0x74, 0xe3, 0x30, 0x65, 0x56, 0xb3, 0x5c, 0xe2,
  645. 0x89, 0x8d, 0xda, 0x80, 0xad, 0x0f, 0x22, 0xfb,
  646. 0x24, 0x1d, 0x16, 0xdd, 0x34, 0x4b, 0x90, 0x58,
  647. 0x4e, 0x0c, 0x13, 0x28, 0xcf, 0x1d, 0xa4, 0xaa,
  648. 0xb7, 0xf3, 0xb1, 0x66, 0xad, 0x3b, 0xcf, 0x79,
  649. 0x12, 0x04, 0xd7, 0x79, 0xd9, 0x5f, 0xdf, 0x89,
  650. 0xb2, 0x5b, 0xa7, 0x9a, 0x26, 0x1e, 0x67, 0x46,
  651. 0x7c, 0x66, 0x95, 0x67, 0xe6, 0x45, 0x8b, 0x1f,
  652. 0x65, 0x79, 0x9f, 0x6d, 0x11, 0x81, 0x17, 0x0d,
  653. 0x11, 0xb0, 0x5c, 0xb4, 0xc7, 0x27, 0x87, 0xab,
  654. 0x5d, 0x0a, 0x18, 0xae, 0x4e, 0x06, 0xa3, 0x3d,
  655. 0xc7, 0xb0, 0x22, 0xba, 0x03, 0xa4, 0x0f, 0xe5,
  656. 0x1c, 0x72, 0x2a, 0x04, 0xce, 0x83, 0xe9, 0xf3,
  657. 0xd7, 0xc9, 0x67, 0x6c, 0x1e, 0x6b, 0x3c, 0x9b,
  658. 0x0b, 0x5e, 0x6a, 0xa6, 0x79, 0x0a, 0xf1, 0xbe,
  659. 0xd7, 0xb4, 0x6f, 0x45, 0x1e, 0xfb, 0x78, 0x97,
  660. 0xaf, 0x34, 0x76, 0x95, 0x52, 0xf7, 0x3d, 0x5d,
  661. 0x07, 0x28, 0x57, 0x9c, 0x4a, 0x0f, 0xcf, 0x0b,
  662. 0x1b, 0xc4, 0xc2, 0x72, 0xd7, 0x72, 0x38, 0x9b,
  663. 0xea, 0xeb, 0xee, 0xae, 0x34, 0xc8, 0x01, 0xd7,
  664. 0xa5, 0xe3, 0xce, 0x41, 0xad, 0x02, 0x60, 0x23,
  665. 0x18, 0x36, 0xba, 0x17, 0xfa, 0xcf, 0xe4, 0xda,
  666. 0xdc, 0xfc, 0x82, 0xdc, 0x7c, 0x11, 0xf4, 0xb8,
  667. 0x52, 0x5d, 0xf7, 0x2f, 0xc8, 0xfe, 0x4a, 0xe6,
  668. 0xb9, 0xaf, 0x4b, 0x17, 0x18, 0x91, 0xc2, 0xfe,
  669. 0xd7, 0x3a, 0x77, 0x0c, 0xa0, 0x43, 0x9c, 0x6f,
  670. 0x13, 0x06, 0xbe, 0x6e, 0xe0, 0x1a, 0x3c, 0xf3,
  671. 0xf5, 0xcc, 0x78, 0xfb, 0x5d, 0xd5, 0xda, 0xb7,
  672. 0x58, 0xea, 0x86, 0x42, 0x6b, 0x32, 0xff, 0xb2,
  673. 0xe2, 0xee, 0x03, 0x1f, 0xf4, 0xef, 0xdb, 0x53,
  674. 0x79, 0xd5, 0x4e, 0xaf, 0x60, 0x8e, 0x02, 0xc2,
  675. 0xcc, 0x39, 0x97, 0x7b, 0xfd, 0xa1, 0xf8, 0x7a,
  676. 0x26, 0xe8, 0x55, 0xd6, 0xa4, 0x8b, 0xa0, 0x1b,
  677. 0x2d, 0x63, 0xaa, 0x73, 0x71, 0x6e, 0xbf, 0x8b,
  678. 0x3b, 0xe3, 0x1b, 0x0d, 0xbb, 0x2e, 0x44, 0x09,
  679. 0x64, 0xac, 0xc7, 0x9e, 0xb5, 0xc6, 0x77, 0xb0,
  680. 0x79, 0xb3, 0xaa, 0xfc, 0x67, 0x57, 0x9a, 0x50,
  681. 0x81, 0x37, 0x14, 0x7c, 0xd7, 0xa0, 0xd4, 0x6a,
  682. 0x79, 0x84, 0x51, 0x0e, 0x95, 0x0a, 0x30, 0xa3,
  683. 0x60, 0x55, 0x48, 0x05, 0x16, 0xae, 0x43, 0x90,
  684. 0xdc, 0x8e, 0x09, 0xbe, 0x79, 0xf6, 0x90, 0x74,
  685. 0xf8, 0x20, 0x96, 0x4d, 0xa7, 0xf5, 0x1a, 0x2b,
  686. 0xc7, 0x15, 0x9d, 0x18, 0xf7, 0x94, 0x87, 0xf7,
  687. 0xf4, 0xfb, 0x0d, 0x61, 0xb6, 0xd7, 0xbe, 0x10,
  688. 0x8e, 0x47, 0x3c, 0x10, 0x44, 0x90, 0x52, 0x21,
  689. 0x83, 0xc0, 0xf5, 0x99, 0xaa, 0xbc, 0xf6, 0x55,
  690. 0xae, 0xf5, 0xb2, 0xa4, 0xcd, 0x4d, 0xb9, 0x38,
  691. 0x6c, 0xbc, 0x80, 0xc3, 0xad, 0xf4, 0x46, 0x31,
  692. 0x01, 0x58, 0x2d, 0x88, 0x57, 0xc3, 0x23, 0xd1,
  693. 0x64, 0xc9, 0xa3, 0x21, 0x6b, 0x8b, 0x8a, 0x23,
  694. 0x2c, 0x4f, 0xa9, 0xcd, 0x67, 0xfa, 0x77, 0xad,
  695. 0xa3, 0x16, 0xa2, 0xe5, 0x19, 0x14, 0x70, 0x41,
  696. 0x5b, 0xda, 0x14, 0xde, 0xe3, 0xe5, 0xc1, 0x15,
  697. 0xb4, 0x77, 0xa4, 0x9b, 0xb8, 0xb1, 0x28, 0x51,
  698. 0x30, 0xb4, 0xf1, 0xf3, 0xf8, 0x6d, 0xd0, 0xc3,
  699. 0x8c, 0x4c, 0x76, 0xb0, 0x9a, 0xdf, 0xc8, 0xbe,
  700. 0xf8, 0x4a, 0x61, 0x6e, 0x3e, 0xd6, 0x3c, 0xe8,
  701. 0xde, 0x56, 0xa0, 0x9c, 0x25, 0xbe, 0xce, 0x93,
  702. 0x1f, 0x88, 0xfb, 0x9a, 0x1a, 0xe2, 0xff, 0x88,
  703. 0xad, 0x10, 0xcb, 0x6c, 0xd6, 0xe7, 0x39, 0x0b,
  704. 0xe5, 0x1a, 0x06, 0x05, 0x64, 0x5b, 0x0a, 0xdf,
  705. 0x22, 0x58, 0xd7, 0xfb, 0x88, 0x12, 0xdd, 0xb7,
  706. 0x52, 0x3a, 0xc9, 0xbf, 0x49, 0xdf, 0x8c, 0x87,
  707. 0x9f, 0x84, 0xb5, 0x0a, 0xf6, 0x00, 0x52, 0xae,
  708. 0x67, 0x12, 0x1a, 0x8c, 0x71, 0x15, 0xf5, 0xa1,
  709. 0x13, 0x39, 0xf0, 0x91, 0x7e, 0x88, 0x7c, 0xb3,
  710. 0x95, 0x50, 0x02, 0xa6, 0x63, 0xb5, 0x64, 0xfb,
  711. 0x90, 0x87, 0x61, 0xe2, 0x27, 0xaf, 0x11, 0x0c,
  712. 0x73, 0x83, 0xef, 0xa9, 0x28, 0xfe, 0xc8, 0x85,
  713. 0x1a, 0x3a, 0xde, 0xf2, 0xe5, 0x25, 0x64, 0x6d,
  714. 0xaa, 0x41, 0x4c, 0x80, 0x2e, 0x84, 0xff, 0xc1,
  715. 0xc0, 0x54, 0x0c, 0x29, 0x1b, 0xa3, 0x07, 0x7c,
  716. 0x33, 0x4c, 0x10, 0xf6, 0x6f, 0x79, 0xdf, 0xd3,
  717. 0xf0, 0x24, 0x57, 0xf1, 0x60, 0xe1, 0xf0, 0xbd,
  718. 0xc4, 0x1f, 0xf4, 0x67, 0xd2, 0xd3, 0xcc, 0x6a,
  719. 0x07, 0x72, 0x44, 0x16, 0x85, 0x46, 0xd0, 0x73,
  720. 0x87, 0xa9, 0xc7, 0x2f, 0xd1, 0xf5, 0xec, 0xe3,
  721. 0x28, 0xa3, 0x93, 0x4f, 0xd7, 0x76, 0xc1, 0x3c,
  722. 0x0d, 0x13, 0x33, 0xcf, 0x5b, 0xbd, 0x6a, 0x52,
  723. 0x4e, 0xee, 0xc8, 0x5e, 0xa1, 0x58, 0x4a, 0x08,
  724. 0x81, 0xd9, 0x23, 0xcc, 0xfb, 0x1c, 0xb2, 0xd8,
  725. 0xa3, 0xe4, 0x53, 0xfe, 0xf4, 0x4b, 0x48, 0xc1,
  726. 0x20, 0xa4, 0x97, 0xf8, 0x38, 0xa3, 0x69, 0xc1,
  727. 0x11, 0xf0, 0xa1, 0x3b, 0xa9, 0x9a, 0x12, 0x61,
  728. 0xe8, 0x8d, 0x99, 0x44, 0x3f, 0x94, 0x72, 0x82,
  729. 0x19, 0x96, 0x62, 0xb0, 0xa6, 0x64, 0x05, 0x19,
  730. 0x8f, 0xd6, 0x5d, 0x05, 0xbf, 0x79, 0x9e, 0x9d,
  731. 0xe4, 0x93, 0x4c, 0xad, 0x61, 0x8c, 0x18, 0xda,
  732. 0xb6, 0x2e, 0xb3, 0xca, 0x14, 0x4d, 0x53, 0xa4,
  733. 0x97, 0x27, 0x10, 0x56, 0xa2, 0x67, 0x5a, 0x5a,
  734. 0x5e, 0x13, 0xc0, 0xdb, 0xa7, 0x9f, 0x45, 0x5b,
  735. 0xeb, 0x1a, 0x14, 0x0c, 0x8c, 0x38, 0x5e, 0x77,
  736. 0x9a, 0xec, 0x75, 0x68, 0x93, 0x65, 0x02, 0x9c,
  737. 0xfb, 0x62, 0x60, 0x49, 0xdd, 0xb2, 0x2a, 0x67,
  738. 0x86, 0xe3, 0x8a, 0x7d, 0x8c, 0x46, 0x78, 0x81,
  739. 0x60, 0x69, 0xf2, 0x3f, 0x74, 0x11, 0x35, 0xff,
  740. 0x77, 0xa3, 0x66, 0x20, 0xfc, 0x98, 0x4a, 0x35,
  741. 0x7a, 0x52, 0xe4, 0x90, 0x13, 0x80, 0xb9, 0xa6,
  742. 0x73, 0x7a, 0x7d, 0x66, 0x6e, 0x6b, 0xb6, 0x43,
  743. 0x10, 0xd5, 0x91, 0x2b, 0x66, 0xdd, 0x89, 0x87,
  744. 0xe3, 0x8c, 0x58, 0x53, 0x2f, 0x40, 0x74, 0x45,
  745. 0x1b, 0x77, 0x7a, 0xa4, 0x44, 0x19, 0x78, 0xba,
  746. 0x87, 0x10, 0x41, 0x31, 0x32, 0x5f, 0x87, 0x68,
  747. 0xde, 0x43, 0x4a, 0xef, 0x33, 0xb3, 0x11, 0x83,
  748. 0xa9, 0xc2, 0x6f, 0x8d, 0x34, 0xe2, 0x95, 0x84,
  749. 0x3a, 0x4f, 0x6f, 0x8c, 0x31, 0x1d, 0xb6, 0xf5,
  750. 0x95, 0x0d, 0x01, 0x11, 0x20, 0xdf, 0x72, 0xf3,
  751. 0x3f, 0x9a, 0x33, 0xaa, 0xb1, 0x06, 0x6a, 0x63,
  752. 0x47, 0x91, 0x01, 0xdf, 0xb3, 0x54, 0x36, 0xfd,
  753. 0x06, 0x2d, 0xb8, 0x08, 0xe3, 0xd3, 0x65, 0xac,
  754. 0x66, 0x03, 0xee, 0xa4, 0x63, 0xbd, 0xd4, 0xce,
  755. 0xbd, 0x79, 0xa7, 0x48, 0x38, 0xc5, 0x7d, 0xb5,
  756. 0x71, 0x9a, 0x3c, 0x11, 0x7c, 0x6c, 0xe2, 0x54,
  757. 0x02, 0x5d, 0x42, 0xab, 0x25, 0x93, 0x66, 0x01,
  758. 0x37, 0x78, 0x35, 0x4a, 0x8c, 0x19, 0x4d, 0x00,
  759. 0x75, 0x4f, 0xcc, 0xc0, 0x26, 0x82, 0xc1, 0x35,
  760. 0x8c, 0xc7, 0xc2, 0x59, 0x01, 0x3e, 0x98, 0x22,
  761. 0x88, 0x9c, 0x90, 0x75, 0x05, 0x33, 0x07, 0xb9,
  762. 0x39, 0x81, 0x38, 0x58, 0x10, 0x29, 0xcf, 0xc8,
  763. 0x98, 0xb2, 0x03, 0xd7, 0x5b, 0xb3, 0x18, 0xba,
  764. 0x34, 0x0c, 0x9f, 0xab, 0xd7, 0xed, 0x29, 0x82,
  765. 0x41, 0xe0, 0x20, 0x97, 0x57, 0x92, 0xb2, 0xb8,
  766. 0x10, 0x2d, 0x0b, 0xa2, 0xc5, 0x8f, 0x90, 0x6f,
  767. 0xed, 0x12, 0x56, 0x25, 0xbe, 0xfd, 0x75, 0xf7,
  768. 0xb6, 0xf8, 0x40, 0x67, 0x39, 0x11, 0xfa, 0x15,
  769. 0xae, 0x6a, 0x54, 0x5f, 0x32, 0x2b, 0xf8, 0x48,
  770. 0x55, 0xbe, 0x86, 0x2f, 0x69, 0x48, 0x5b, 0x5d,
  771. 0x4d, 0xb7, 0x35, 0xaa, 0xb6, 0x91, 0x88, 0x19,
  772. 0x96, 0x1c, 0x68, 0xf6, 0x85, 0x9e, 0xb3, 0xb2,
  773. 0xa3, 0x32, 0xd4, 0x52, 0x70, 0xb7, 0x62, 0xe3,
  774. 0x14, 0xb6, 0x78, 0x5f, 0x1b, 0x1d, 0x04, 0x9c,
  775. 0x26, 0x0c, 0x33, 0x94, 0xb1, 0x97, 0x08, 0xdb,
  776. 0x0b, 0x39, 0x29, 0xd4, 0xbc, 0x6d, 0xdf, 0x02,
  777. 0xc6, 0x99, 0xab, 0x99, 0x32, 0xe5, 0xce, 0x51,
  778. 0x4f, 0xae, 0xb8, 0x8b, 0xe0, 0xaf, 0x07, 0xc4,
  779. 0xf9, 0x41, 0x7c, 0x59, 0xa0, 0xac, 0x74, 0x4d,
  780. 0x7e, 0x43, 0x77, 0x9c, 0x06, 0x49, 0x79, 0x8a,
  781. 0x14, 0x73, 0x93, 0xa8, 0x5b, 0x1b, 0x34, 0x29,
  782. 0x78, 0x04, 0x2f, 0xd7, 0x1f, 0x13, 0x90, 0xe0,
  783. 0xdd, 0x3b, 0x42, 0x6b, 0x79, 0x6e, 0x52, 0xc7,
  784. 0x0f, 0x38, 0xda, 0x01, 0x2c, 0x8d, 0xe6, 0x94,
  785. 0x5d, 0x59, 0x27, 0x1d, 0x10, 0x4e, 0x11, 0x36,
  786. 0xfb, 0x53, 0x16, 0x05, 0x25, 0xf2, 0x64, 0xd8,
  787. 0xf9, 0xcd, 0x5c, 0xfe, 0xb4, 0x18, 0x44, 0x80,
  788. 0x10, 0xbc, 0x3d, 0xf3, 0x1d, 0x5a, 0xf0, 0xc1,
  789. 0xc3, 0x55, 0xff, 0x41, 0x3e, 0xe3, 0xef, 0x44,
  790. 0xb2, 0xc0, 0x01, 0x18, 0xa2, 0x49, 0x88, 0x78,
  791. 0x0d, 0x4c, 0xc8, 0x73, 0xcf, 0x30, 0x85, 0x3a,
  792. 0x88, 0x90, 0x01, 0xcf, 0x69, 0x53, 0xa3, 0x18,
  793. 0x3f, 0xd6, 0xe7, 0x94, 0x14, 0xa7, 0xae, 0xcd,
  794. 0x6f, 0x11, 0x72, 0xfe, 0x2b, 0xb0, 0x81, 0x53,
  795. 0xea, 0x67, 0xd6, 0xe4, 0xca, 0x42, 0xa0, 0xf9,
  796. 0xb1, 0xd4, 0xb5, 0x3b, 0xc9, 0xf0, 0x36, 0xc1,
  797. 0x1c, 0xf4, 0xb1, 0xf6, 0x84, 0xd0, 0x86, 0x6c,
  798. 0x76, 0x9a, 0x03, 0xc2, 0xb6, 0x2e, 0x9a, 0x46,
  799. 0xf5, 0x5f, 0x2c, 0x38, 0xac, 0xad, 0x6f, 0x2e,
  800. 0x7a, 0x18, 0x2d, 0x22, 0x95, 0x5e, 0x5e, 0xc9,
  801. 0x7a, 0x0a, 0x56, 0xe1, 0xc7, 0x15, 0xfd, 0xbf,
  802. 0xff, 0xf7, 0x7e, 0x85, 0x20, 0xa9, 0x8a, 0x9c,
  803. 0xa9, 0x7d, 0xe8, 0xed, 0xfc, 0x7f, 0xbb, 0xf0,
  804. 0x05, 0x3f, 0xce, 0x4f, 0x4c, 0xee, 0xa4, 0xa0,
  805. 0xcc, 0x9c, 0x62, 0x1e, 0xd6, 0xd0, 0x30, 0x37,
  806. 0xb8, 0x98, 0x56, 0x1d, 0xaa, 0xd6, 0x5e, 0x73,
  807. 0x12, 0xe4, 0x88, 0x82, 0x48, 0x64, 0x06, 0xd7,
  808. 0x2a, 0x31, 0x50, 0x7b, 0x10, 0x17, 0xb8, 0x4c,
  809. 0x5a, 0x8d, 0xf1, 0xfc, 0xf1, 0x33, 0x3b, 0x98,
  810. 0x42, 0x18, 0x5b, 0x35, 0x78, 0xca, 0x8e, 0x41,
  811. 0x52, 0xae, 0x6d, 0xe1, 0xa2, 0x9d, 0x5b, 0xbd,
  812. 0xf3, 0x5f, 0x49, 0xc1, 0x27, 0x06, 0xc1, 0xaf,
  813. 0xc0, 0xa3, 0x9d, 0xf3, 0x1c, 0x8e, 0x90, 0x8a,
  814. 0xb0, 0x69, 0xb0, 0xc5, 0x11, 0x0c, 0x91, 0x14,
  815. 0x1f, 0x5e, 0x10, 0xe1, 0x1d, 0x14, 0x30, 0x54,
  816. 0x1e, 0x17, 0x3d, 0x31, 0x7b, 0xbf, 0x2f, 0x9d,
  817. 0x6d, 0x63, 0x32, 0xf0, 0x9d, 0x9f, 0x95, 0x3d,
  818. 0x0b, 0xd2, 0x4d, 0x10, 0xe2, 0x3f, 0x67, 0x69,
  819. 0x43, 0x9a, 0x4a, 0x2c, 0x54, 0x71, 0xa8, 0xa0,
  820. 0x9e, 0x9f, 0x10, 0xaf, 0x1b, 0xce, 0x99, 0xe3,
  821. 0x25, 0x32, 0x10, 0x54, 0x80, 0xfe, 0xda, 0x57,
  822. 0xd0, 0xb2, 0x92, 0x7f, 0xbb, 0x5f, 0xe7, 0x4d,
  823. 0x1b, 0x3d, 0x46, 0x4d, 0xe4, 0x4c, 0xd6, 0xaf,
  824. 0x1a, 0x32, 0x12, 0x40, 0xb8, 0x84, 0x8e, 0xe4,
  825. 0x80, 0xce, 0x7e, 0xc1, 0x13, 0x8b, 0xb0, 0xb7,
  826. 0x6f, 0x24, 0xba, 0x85, 0x50, 0x83, 0xc3, 0xcf,
  827. 0x19, 0xb3, 0xf0, 0xc7, 0xee, 0x68, 0xbe, 0x9e,
  828. 0x6d, 0xb9, 0xfb, 0xd5, 0x29, 0xce, 0x82, 0xcd,
  829. 0x69, 0x16, 0x68, 0x6b, 0x6a, 0xf4, 0x02, 0x32,
  830. 0xce, 0x60, 0x37, 0x0c, 0xb9, 0x38, 0x92, 0x9c,
  831. 0x42, 0xa9, 0x0b, 0x53, 0x96, 0xfe, 0x39, 0xc1,
  832. 0x24, 0x65, 0x9b, 0xcd, 0xe7, 0x8d, 0x36, 0x07,
  833. 0x9f, 0x1d, 0x35, 0x8e, 0xdc, 0x4c, 0xb5, 0x68,
  834. 0xc5, 0xfd, 0x44, 0x19, 0xf2, 0x6c, 0x59, 0x1c,
  835. 0xb1, 0x0b, 0x35, 0x48, 0x86, 0x1a, 0x05, 0x22,
  836. 0x03, 0x0c, 0x0c, 0xa2, 0x92, 0x90, 0x35, 0xfb,
  837. 0x37, 0x94, 0xc7, 0x15, 0x84, 0xae, 0xe8, 0x05,
  838. 0xa0, 0xf7, 0x30, 0x11, 0x5c, 0xe4, 0x5d, 0x3e,
  839. 0x12, 0x54, 0x80, 0x54, 0x6b, 0x09, 0x8c, 0xce,
  840. 0x80, 0x5e, 0xa7, 0xc8, 0x6a, 0x0c, 0x56, 0xe1,
  841. 0x18, 0x7d, 0xc9, 0x39, 0xc1, 0xef, 0xe3, 0x25,
  842. 0xa0, 0x8b, 0x2f, 0x60, 0x3a, 0x43, 0x39, 0xa6,
  843. 0x28, 0x28, 0x7b, 0x4c, 0x77, 0xd4, 0x49, 0x61,
  844. 0x46, 0xe9, 0x1b, 0x45, 0xd6, 0xb1, 0x56, 0xe1,
  845. 0x7d, 0x34, 0xcd, 0x06, 0xb6, 0x67, 0x8d, 0x7d,
  846. 0x7a, 0xe2, 0xbe, 0x68, 0x35, 0xa6, 0x78, 0xe5,
  847. 0x47, 0x48, 0xb7, 0xc7, 0xde, 0xcd, 0xc9, 0x05,
  848. 0xb4, 0xe7, 0x50, 0x48, 0xe1, 0x4b, 0xfe, 0x76,
  849. 0x77, 0xc6, 0xf7, 0x5f, 0xcb, 0xc2, 0xa8, 0xd7,
  850. 0xd6, 0x8a, 0xe5, 0x49, 0xd9, 0xca, 0x45, 0xf4,
  851. 0xda, 0xcd, 0x33, 0xd1, 0x59, 0x2d, 0x9e, 0xc1,
  852. 0x5c, 0xe6, 0x01, 0x18, 0xb8, 0xf0, 0x5e, 0xb1,
  853. 0x69, 0x95, 0x2f, 0x02, 0x2a, 0xe7, 0x4a, 0xd7,
  854. 0xd1, 0xc3, 0xd5, 0x6f, 0x15, 0xc8, 0xdc, 0x29,
  855. 0xde, 0xb9, 0x3f, 0x8b, 0xa6, 0xbc, 0xdd, 0x25,
  856. 0x84, 0x35, 0x3c, 0x90, 0x2d, 0xc2, 0x1e, 0x98,
  857. 0x8a, 0x50, 0x09, 0x77, 0x42, 0xe9, 0x35, 0x8a,
  858. 0x7c, 0x97, 0xbf, 0xe8, 0xbf, 0x56, 0xd0, 0x8b,
  859. 0x65, 0xd3, 0xaf, 0x1e, 0x05, 0x94, 0xfa, 0xac,
  860. 0xa8, 0x2b, 0x28, 0xcb, 0x37, 0x3e, 0xe8, 0xbb,
  861. 0x66, 0x3a, 0xed, 0xb2, 0x48, 0x10, 0x0f, 0x3a,
  862. 0x5a, 0xc5, 0xdb, 0x26, 0x0e, 0xaa, 0x5e, 0x69,
  863. 0x15, 0xd6, 0x81, 0xae, 0xbd, 0xe6, 0x03, 0xf1,
  864. 0xf6, 0x37, 0xc8, 0xde, 0x70, 0x1f, 0x64, 0xb9,
  865. 0x5e, 0xbf, 0x2e, 0x4f, 0xb1, 0xea, 0xa0, 0x17,
  866. 0xe6, 0x7c, 0xf9, 0x2f, 0x1e, 0xd8, 0x58, 0xde,
  867. 0xa7, 0xf0, 0x46, 0x52, 0x95, 0xdf, 0xa4, 0x96,
  868. 0xd0, 0xc4, 0x97, 0x2b, 0x95, 0xcd, 0x5e, 0x40,
  869. 0x23, 0x5c, 0x10, 0xee, 0xba, 0x72, 0x9b, 0xcf,
  870. 0x0b, 0xe8, 0x18, 0x3a, 0x70, 0xd2, 0x5e, 0x07,
  871. 0x68, 0x93, 0xef, 0x4a, 0x5b, 0x8d, 0x72, 0x41,
  872. 0x4e, 0xea, 0x33, 0x6a, 0x0a, 0x5e, 0xfb, 0x02,
  873. 0x3f, 0xd4, 0xed, 0x5b, 0xe0, 0x42, 0x84, 0xd4,
  874. 0xaa, 0x85, 0xdc, 0x5b, 0x67, 0xee, 0x71, 0x67,
  875. 0xba, 0x8e, 0xd2, 0xbe, 0x61, 0xdf, 0x5a, 0x26,
  876. 0xb9, 0xf0, 0x77, 0x81, 0x53, 0x24, 0x16, 0xcb,
  877. 0x8c, 0xb8, 0x06, 0x6e, 0x68, 0xda, 0xc8, 0x2d,
  878. 0x17, 0x54, 0xdb, 0x46, 0xcb, 0xfd, 0x1f, 0x3d,
  879. 0x94, 0x81, 0x09, 0x4b, 0xfa, 0xb1, 0x46, 0xd9,
  880. 0x11, 0xa3, 0xb7, 0x31, 0x9c, 0xd2, 0x38, 0xd6,
  881. 0xba, 0x3d, 0xa3, 0x74, 0xd8, 0xf1, 0x24, 0xe8,
  882. 0x9c, 0xcb, 0x1d, 0xf9, 0x4a, 0xf7, 0xc8, 0x4b,
  883. 0xfe, 0x97, 0x7c, 0xa1, 0x02, 0xeb, 0x40, 0xc3,
  884. 0x89, 0x71, 0x01, 0xcd, 0x33, 0x2a, 0xc2, 0x82,
  885. 0xce, 0x62, 0x8d, 0x53, 0x7c, 0xdf, 0xce, 0xd7,
  886. 0xf5, 0xa8, 0x4f, 0xf2, 0xf2, 0x2e, 0xc1, 0xeb,
  887. 0x97, 0x99, 0x37, 0x3c, 0x53, 0xa6, 0xb4, 0x46,
  888. 0x05, 0x64, 0x92, 0x87, 0x08, 0x3c, 0x23, 0x4b,
  889. 0x9d, 0x67, 0x18, 0xf9, 0xe2, 0x0b, 0x1c, 0x39,
  890. 0xd3, 0x87, 0x70, 0xc0, 0xb9, 0x1e, 0x52, 0x0a,
  891. 0x0f, 0x48, 0xe2, 0xe7, 0x51, 0x72, 0x94, 0xf7,
  892. 0xa3, 0xdc, 0xe5, 0x66, 0x33, 0x39, 0x54, 0x06,
  893. 0x55, 0x93, 0x30, 0xf9, 0x5e, 0x76, 0x8f, 0xe0,
  894. 0x59, 0x4d, 0x0d, 0xa7, 0xf5, 0xbe, 0xdb, 0x20,
  895. 0xad, 0x0d, 0x76, 0x88, 0x5f, 0x9c, 0x7c, 0x75,
  896. 0x2f, 0x2a, 0x0b, 0x79, 0x6e, 0xd3, 0xe2, 0x66,
  897. 0xf5, 0x4a, 0x2d, 0x87, 0x87, 0x49, 0x84, 0x17,
  898. 0xa2, 0x62, 0x4c, 0xbb, 0xe4, 0x6e, 0x98, 0x10,
  899. 0xc9, 0xfb, 0x8a, 0x04, 0x68, 0x8d, 0x22, 0x66,
  900. 0xad, 0xea, 0x2a, 0xc9, 0x97, 0x2d, 0x3c, 0xbc,
  901. 0xd0, 0x77, 0x5f, 0xe6, 0xb8, 0x7f, 0xe6, 0xf6,
  902. 0x39, 0xbf, 0x56, 0x0e, 0x26, 0x6d, 0xc5, 0x3e,
  903. 0x53, 0x19, 0xd6, 0xb4, 0x57, 0x36, 0xa3, 0xc6,
  904. 0xd3, 0x3d, 0x66, 0x79, 0x30, 0x5c, 0x14, 0x0c,
  905. 0x0f, 0x3e, 0x96, 0xae, 0x90, 0x97, 0xab, 0x0d,
  906. 0x9f, 0xc3, 0xe7, 0x66, 0x3e, 0xe0, 0x31, 0x43,
  907. 0x4b, 0x01, 0xb3, 0x0e, 0x9e, 0x8c, 0x82, 0x4a,
  908. 0x8c, 0xc7, 0x79, 0x85, 0xdf, 0x75, 0x0d, 0xb4,
  909. 0x2b, 0x03, 0x14, 0xef, 0x72, 0x58, 0xfd, 0x64,
  910. 0xc8, 0xe3, 0x0d, 0x9a, 0x14, 0x6f, 0x76, 0xf9,
  911. 0x46, 0xd1, 0xd2, 0x81, 0xb3, 0x16, 0x6e, 0xc7,
  912. 0x76, 0x82, 0xce, 0xf4, 0xee, 0x33, 0x00, 0xe6,
  913. 0x77, 0xc4, 0xad, 0x4f, 0x06, 0xa7, 0x48, 0x80,
  914. 0x9e, 0x21, 0x66, 0xca, 0x75, 0x69, 0x57, 0xcb,
  915. 0xf0, 0x67, 0x6a, 0xaa, 0x8f, 0x88, 0x14, 0xbd,
  916. 0x65, 0x62, 0xe2, 0xad, 0xcc, 0x22, 0x88, 0x7b,
  917. 0x94, 0xbd, 0x0e, 0xcd, 0xb6, 0x69, 0xa2, 0xcb,
  918. 0x7d, 0x57, 0x5c, 0xb4, 0x92, 0x80, 0x13, 0x99,
  919. 0x84, 0xf3, 0x79, 0x0a, 0x2d, 0x70, 0xa4, 0xe0,
  920. 0xde, 0xc6, 0x32, 0xb0, 0x8a, 0x62, 0xb5, 0xcf,
  921. 0xfa, 0x5e, 0x5a, 0x92, 0x32, 0x7d, 0x34, 0x07,
  922. 0xb5, 0x52, 0x3a, 0xb5, 0x7d, 0x0f, 0xa1, 0xba,
  923. 0x56, 0xd0, 0x07, 0x76, 0x11, 0xf2, 0xc3, 0x33,
  924. 0x9d, 0xbd, 0x12, 0x35, 0x5e, 0xf7, 0x05, 0x88,
  925. 0x76, 0x94, 0xa6, 0xbf, 0xed, 0xb8, 0xa4, 0xa2,
  926. 0x0c, 0xbe, 0x0f, 0x6a, 0xaf, 0xf3, 0x1b, 0x33,
  927. 0x4a, 0xb7, 0x68, 0x3f, 0xbe, 0x95, 0x13, 0x97,
  928. 0x0f, 0x15, 0x17, 0x1b, 0x23, 0xaa, 0x08, 0x78,
  929. 0xa6, 0x5b, 0x08, 0xa2, 0x9d, 0x03, 0xa8, 0xa7,
  930. 0x39, 0xdc, 0xbc, 0x9a, 0x85, 0xf5, 0xe5, 0x55,
  931. 0x59, 0x3c, 0xef, 0xf9, 0x3f, 0x22, 0x8e, 0xf8,
  932. 0xd8, 0x3e, 0x02, 0x0b, 0xd8, 0x78, 0x4b, 0x15,
  933. 0x7f, 0xaa, 0x2c, 0xff, 0xbe, 0x77, 0x33, 0xc7,
  934. 0x6a, 0x12, 0xaa, 0xa4, 0xbe, 0xc0, 0x3b, 0xcb,
  935. 0x13, 0x9d, 0x9c, 0x5a, 0x9f, 0x8a, 0x57, 0x36,
  936. 0x4f, 0x02, 0x5a, 0xf8, 0x1d, 0x97, 0x77, 0x43,
  937. 0xc8, 0xa5, 0xb7, 0x9b, 0x10, 0x98, 0xfd, 0x58,
  938. 0xbf, 0x42, 0xf6, 0xbf, 0xff, 0x6c, 0x40, 0x18,
  939. 0x18, 0xdf, 0xac, 0x57, 0x71, 0xea, 0xcc, 0x8e,
  940. 0xfd, 0xfe, 0x10, 0xfb, 0xb9, 0xfe, 0xbc, 0x9a,
  941. 0x9c, 0x27, 0xe4, 0x10, 0x15, 0x94, 0x41, 0xa1,
  942. 0xcc, 0xf6, 0x25, 0x49, 0x4f, 0x96, 0xc1, 0x8c,
  943. 0x9e, 0x3e, 0x18, 0x29, 0x49, 0x92, 0xe7, 0xfe,
  944. 0x22, 0xff, 0xed, 0x02, 0x16, 0x90, 0xef, 0xac,
  945. 0xec, 0x95, 0x1d, 0x5b, 0x94, 0x9c, 0xf6, 0x7c,
  946. 0x1b, 0x5a, 0x9d, 0xb0, 0x9b, 0x05, 0x36, 0xbf,
  947. 0xef, 0xec, 0x63, 0x35, 0x40, 0x24, 0x45, 0x40,
  948. 0x30, 0x1a, 0x9b, 0x90, 0xc3, 0xc2, 0xf7, 0x37,
  949. 0xfb, 0x08, 0x8e, 0x48, 0x19, 0x48, 0xed, 0xa8,
  950. 0xa8, 0x04, 0x6f, 0xd0, 0x33, 0xe9, 0xb8, 0x8d,
  951. 0xe7, 0x1e, 0x5c, 0x47, 0x74, 0xc0, 0x66, 0x30,
  952. 0x4e, 0xa7, 0x86, 0x73, 0xf1, 0xe5, 0x78, 0xa6,
  953. 0xe0, 0xc1, 0xda, 0x13, 0x72, 0x07, 0x85, 0x34,
  954. 0x63, 0x95, 0x49, 0x30, 0x4b, 0x9d, 0x03, 0xf1,
  955. 0x7a, 0x6b, 0x91, 0xa2, 0x85, 0x41, 0xf9, 0x4a,
  956. 0xd6, 0xff, 0xff, 0x86, 0xf7, 0xf0, 0xce, 0xb9,
  957. 0x07, 0xf1, 0x88, 0x04, 0x33, 0xaa, 0xeb, 0x54,
  958. 0xb2, 0x1c, 0x8e, 0x2e, 0x7b, 0x04, 0xa8, 0xcc,
  959. 0x2c, 0x7a, 0xb3, 0xad, 0x1a, 0x89, 0x38, 0x89,
  960. 0xd7, 0x11, 0x3a, 0x8c, 0xcf, 0xe3, 0xc5, 0xba,
  961. 0xb0, 0xcc, 0xc4, 0xe3, 0x33, 0xf3, 0x18, 0xba,
  962. 0xec, 0x56, 0xd9, 0x1c, 0x40, 0x70, 0x0d, 0x4e,
  963. 0x97, 0x01, 0x23, 0xf3, 0x5a, 0xdc, 0xbf, 0x68,
  964. 0x93, 0xc2, 0x1d, 0x8a, 0x96, 0xb7, 0xac, 0x18,
  965. 0x6f, 0xf7, 0x84, 0x71, 0x0d, 0x3d, 0xf8, 0xba,
  966. 0xdf, 0xb6, 0x89, 0x1d, 0x78, 0x19, 0xf2, 0x59,
  967. 0xe9, 0x15, 0x55, 0x29, 0x73, 0x50, 0x59, 0x14,
  968. 0x02, 0x21, 0x16, 0x8f, 0x0f, 0xdf, 0xa5, 0xf0,
  969. };
  970.  
  971. static struct crc_test {
  972. uint32_t crc; /* random starting crc */
  973. uint32_t start; /* random offset in buf */
  974. uint32_t length; /* random length of test */
  975. uint32_t crc_le; /* expected crc32_le result */
  976. uint32_t crc_be; /* expected crc32_be result */
  977. } test[] = {
  978. {0xffffffff, 0x00000000, 0x00001000, 0x13934bef, 0x14f3b75f},
  979. {0xfe7328ea, 0x00000763, 0x00000717, 0xed2c0d70, 0x57531214},
  980. {0x4c40684e, 0x00000721, 0x0000011e, 0xd7f46ccc, 0xedf12ec3},
  981. {0x6b487f90, 0x00000264, 0x000007bc, 0x759e9939, 0x9af8e387},
  982. {0x9f5810db, 0x00000afa, 0x00000255, 0x2685197f, 0x716de6ed},
  983. {0xb15c4755, 0x00000d5b, 0x000002a4, 0xd8fadcb5, 0xfc34ae3f},
  984. {0x06518253, 0x00000ffb, 0x00000004, 0xabee2433, 0xfa30ac9e},
  985. {0xd9e71c55, 0x00000a2a, 0x00000259, 0x96682af2, 0xe5907ea3},
  986. {0x0c1ae843, 0x00000ce4, 0x0000031b, 0x7b637c43, 0xe7f71b04},
  987. {0xec3cd517, 0x000002ff, 0x00000566, 0x5d719a77, 0xed16e045},
  988. {0x77828e95, 0x0000067f, 0x0000038f, 0x43ee5b6c, 0x35999927},
  989. {0xec87b4e3, 0x00000d1c, 0x000002e3, 0x2ddd2eee, 0x9452d3f8},
  990. {0x412158bb, 0x00000eee, 0x00000111, 0x67b38ba2, 0x177976d0},
  991. {0x2e52de3e, 0x00000c4a, 0x000003b5, 0xbcc5d61d, 0xf60fee71},
  992. {0x6ddaae8b, 0x00000d99, 0x00000266, 0x8b535544, 0x1dab8596},
  993. {0x049b6cb1, 0x000009c5, 0x000000b0, 0xfc22cabc, 0x47ebc954},
  994. {0x77d4b954, 0x0000028a, 0x000007fa, 0x71d00923, 0x905585ef},
  995. {0x5e192355, 0x00000ac1, 0x000001fa, 0xb966b81a, 0x33c12903},
  996. {0x7d80b71d, 0x00000213, 0x000001e0, 0x2bba371a, 0x5f4bd8d9},
  997. {0x01f6f1e4, 0x000001d6, 0x00000395, 0xb7e8a647, 0x2a7943a1},
  998. {0x1dfabb13, 0x00000e14, 0x000001eb, 0x53917fba, 0x8dee1e5d},
  999. {0xb00a4449, 0x00000bf6, 0x00000409, 0xedecb577, 0x628e087d},
  1000. {0x7ecd3981, 0x0000083f, 0x0000016b, 0xefef62b9, 0xda4f94e6},
  1001. {0xf8f330d2, 0x000004be, 0x00000757, 0x9357c9f3, 0x8e2d5c2f},
  1002. {0x03c38af2, 0x00000d23, 0x000002dc, 0x360fa8c0, 0x6294c0d6},
  1003. {0x687bb79b, 0x00000f3d, 0x000000c2, 0x448d3be2, 0x08f48f3a},
  1004. {0x6710f550, 0x000009e9, 0x00000603, 0xdbfd1998, 0xc950ac29},
  1005. {0x873171d1, 0x00000787, 0x000004d5, 0xab7f1b62, 0xe66896ab},
  1006. {0x373b1314, 0x00000f0f, 0x000000f0, 0x184098ab, 0x4038e674},
  1007. {0x90fad9cd, 0x00000ead, 0x00000152, 0x23ce52ff, 0x9eff3974},
  1008. {0x19676fe7, 0x0000007d, 0x0000070d, 0xf8a76f1e, 0xfbc5c8a9},
  1009. {0x89facd45, 0x000005f3, 0x00000473, 0x4331a006, 0xb8f0f0cc},
  1010. {0x6f173747, 0x00000fc3, 0x0000003c, 0xb012f08e, 0x5126e378},
  1011. {0x4b44a106, 0x0000075a, 0x0000008b, 0xf6f7ac38, 0xf9b1781b},
  1012. {0xb620ad06, 0x00000774, 0x0000017e, 0xd34558e6, 0xb175edd3},
  1013. {0x976f21e9, 0x000008d7, 0x0000034a, 0xe533aa3a, 0x1e4367b9},
  1014. {0x687628c0, 0x000006c5, 0x0000061b, 0x3a840b15, 0xfb5989a0},
  1015. {0xe24ac108, 0x00000cd0, 0x0000032f, 0x51010ae8, 0xcdd8f182},
  1016. {0x361c44a3, 0x00000304, 0x00000719, 0xfd7bd481, 0x12de540f},
  1017. {0xd93ff95e, 0x00000db7, 0x0000008e, 0xcfbbc304, 0x42eecd5a},
  1018. {0xed752d12, 0x00000883, 0x00000091, 0x65a6c868, 0x9ebfa578},
  1019. {0xb4ff4b54, 0x000003d3, 0x000001c1, 0xf82597e7, 0xa8ad2b19},
  1020. {0x111b520f, 0x00000708, 0x000000eb, 0xc3e109f3, 0x323ace17},
  1021. {0x62c806f2, 0x00000ba3, 0x0000045c, 0x874d3a72, 0xaf1a1360},
  1022. {0x40d97470, 0x000005e1, 0x0000058d, 0x87a9684f, 0x524244a8},
  1023. {0x4312179c, 0x00000056, 0x0000070e, 0x809a00f5, 0xf9e940b0},
  1024. {0x13d5f84c, 0x00000a2d, 0x00000104, 0xf3d27578, 0x5d33341c},
  1025. {0x1f302cb2, 0x00000151, 0x00000014, 0x1e162693, 0x53c3cfc3},
  1026. {0xe491db24, 0x00000600, 0x000006f6, 0x7ff09615, 0xa300ecf7},
  1027. {0xf9a98069, 0x000002ba, 0x000002ad, 0x01af7387, 0x31c0911e},
  1028. {0xe9c477ad, 0x0000015f, 0x00000778, 0x6facf9a0, 0x1993b688},
  1029. {0x353f32b2, 0x0000087c, 0x00000783, 0x6cc964ea, 0x418db561},
  1030. {0x78e1b24f, 0x00000650, 0x000006a8, 0xb3bb7c27, 0xf2aad006},
  1031. {0x61aa400e, 0x00000049, 0x00000254, 0xb8cd1681, 0x79150b15},
  1032. {0xb84b10b0, 0x00000f73, 0x0000008c, 0x406a6450, 0x0c705222},
  1033. {0x9fa99c9c, 0x00000a7c, 0x000004d7, 0xfb3d21b4, 0xe4e789df},
  1034. {0x3fc9ebe3, 0x00000cd9, 0x000000d6, 0x43803f9c, 0x5a152be5},
  1035. {0x529879cd, 0x000002f2, 0x00000595, 0x78b4c6a6, 0xf7236ec4},
  1036. {0x3a933019, 0x00000516, 0x00000266, 0xdcb45436, 0x2c7935f5},
  1037. {0x887b4977, 0x00000227, 0x0000038d, 0xc5f7c3d9, 0x0d6d7df6},
  1038. {0x770745de, 0x000008c6, 0x00000739, 0xf69145e8, 0x47d5efc9},
  1039. {0x28be3b47, 0x00000c46, 0x0000032b, 0x764c028f, 0x1eb70d64},
  1040. {0x5013a050, 0x00000cf6, 0x00000309, 0xea8fe164, 0x186affa4},
  1041. {0x2ec4c9ba, 0x000006e8, 0x0000078d, 0xa35557a9, 0xb41f49ec},
  1042. {0xa9f950c9, 0x00000d33, 0x000002cc, 0x41ea8618, 0xab8dfae3},
  1043. {0x5b520229, 0x000007b2, 0x00000484, 0x44569f1f, 0x607a8052},
  1044. {0xd8dcbbfc, 0x0000002f, 0x0000048c, 0xdb88ab8b, 0xf1c411f1},
  1045. {0x25529792, 0x00000d1d, 0x000002e2, 0x20cda404, 0x32683a2d},
  1046. {0x9f3f6d71, 0x00000238, 0x0000079a, 0x0720443e, 0x4b8ba2ff},
  1047. {0x64121215, 0x000007ff, 0x0000038f, 0x6aacff2c, 0x3b84233b},
  1048. {0xfb6cdde0, 0x00000ef8, 0x00000107, 0xbd43a0f1, 0x926624d0},
  1049. {0x221c9d6f, 0x000007b6, 0x0000014f, 0xb67f834b, 0x2bdedda4},
  1050. {0x030e1de4, 0x00000836, 0x000004b4, 0x0d67d26a, 0x75a73b73},
  1051. {0xb56fa6cf, 0x00000c07, 0x000003f8, 0x60601ac1, 0x10a43f35},
  1052. {0xb55c89f5, 0x0000098e, 0x000001d4, 0x2400efbe, 0x006e28eb},
  1053. {0x5e90b6d5, 0x0000070b, 0x000003ea, 0x3bb5d6ea, 0xb175fa6b},
  1054. {0x2a7045ae, 0x00000961, 0x00000633, 0xfca89e4b, 0x962cd6d2},
  1055. {0x8b374ea9, 0x000006ba, 0x00000780, 0xbce036ed, 0x4dc8279b},
  1056. {0x8bd90bc9, 0x00000562, 0x00000369, 0xcb26a24b, 0x50dee743},
  1057. {0x5b1b1762, 0x000000fd, 0x0000051a, 0x33cdda07, 0xee75ff7b},
  1058. {0xa4153555, 0x0000058f, 0x000005c7, 0xbe50eeca, 0xe73fffcc},
  1059. {0x0be1f931, 0x00000651, 0x00000672, 0x95a25753, 0x4ad6270f},
  1060. {0xb7e78618, 0x00000a7f, 0x000002bb, 0xe06bcc1c, 0x1a35ee59},
  1061. {0x4a9bc41b, 0x00000e51, 0x000001ae, 0x709e8d2c, 0x75080ca8},
  1062. {0xfc359d13, 0x00000440, 0x000002f8, 0x0a58451f, 0x6fa3cfbf},
  1063. {0x5aa48619, 0x000006d1, 0x00000284, 0x928ead83, 0xbd600efc},
  1064. {0xa609afa8, 0x0000053e, 0x00000272, 0xb048c141, 0x184f80bb},
  1065. {0x3f108afb, 0x00000949, 0x00000150, 0x9a6bb5bc, 0x0ea02be1},
  1066. {0x79bec2d3, 0x000008ed, 0x00000712, 0x32692d57, 0x2eb13289},
  1067. {0x9429e067, 0x00000bc3, 0x0000043c, 0x5295ceff, 0x8a9014a7},
  1068. {0xae58b96a, 0x0000082d, 0x000007d2, 0xc2a681ba, 0x6af94089},
  1069. {0x95df24be, 0x00000985, 0x000004c1, 0x3a287765, 0x379fcb42},
  1070. {0x5e94976f, 0x00000596, 0x000004ed, 0xff00c489, 0x991fc1f5},
  1071. {0xf5e5f1de, 0x00000d31, 0x000002ce, 0x35f28e91, 0x543def1a},
  1072. {0xa2c219cf, 0x00000a3c, 0x00000374, 0x707d21eb, 0xa6d28bc1},
  1073. {0xf21b6ceb, 0x00000919, 0x00000135, 0x0847fb8b, 0x224468c2},
  1074. {0xaa988728, 0x00000787, 0x00000771, 0x885aeaa4, 0x814db00b},
  1075. {0xaa5dfaac, 0x000003e5, 0x0000051b, 0x52c48ab7, 0x725bef8a},
  1076. {0x0a053968, 0x00000d2a, 0x000002d5, 0x7a90256d, 0xc53b9402},
  1077. {0x1421dc20, 0x00000eef, 0x00000110, 0x97d6da24, 0x10846935},
  1078. {0xb47c2166, 0x00000a6a, 0x00000209, 0xcfd6cc52, 0x46e2797e},
  1079. {0x77dd1955, 0x000000de, 0x00000266, 0xba74bcaa, 0x4fa3fe9c},
  1080. {0x68a03cc2, 0x0000082f, 0x000007b0, 0x752bd5d8, 0x4f760c63},
  1081. {0x0226b0a3, 0x00000a5f, 0x000005a0, 0x82de4970, 0x8ee1310e},
  1082. {0x637bf3b1, 0x00000d93, 0x0000026c, 0x5c7115cb, 0x9f6a0ced},
  1083. {0x3b120edf, 0x00000c13, 0x000003ec, 0x80d7d20f, 0x241657d5},
  1084. {0xe2456780, 0x000002eb, 0x00000641, 0xc0a5d289, 0x74df96b4},
  1085. {0x9b2e7125, 0x00000c0c, 0x000003f3, 0xcc15f57e, 0x03e290bf},
  1086. {0x153033ef, 0x00000787, 0x000006b6, 0x3cde443b, 0x7bf1d121},
  1087. {0x18458b3f, 0x0000066c, 0x00000561, 0x9a2bd8c6, 0x9d564bef},
  1088. {0x4ff9d4b9, 0x00000c8f, 0x0000033a, 0xd0ee6d6d, 0xee00aa0b},
  1089. {0xdf84b5d9, 0x00000802, 0x0000029a, 0xdab0d74a, 0xd0cb63dc},
  1090. {0x81ee15df, 0x000003ce, 0x00000725, 0x9942e2de, 0xe48fb26b},
  1091. {0x5c768e04, 0x00000afd, 0x00000160, 0x36110831, 0x8dc74483},
  1092. {0xe5e18094, 0x00000b4b, 0x000000a0, 0xffa3e4a7, 0xc0145e1b},
  1093. {0xed7263b6, 0x00000d0d, 0x000002f2, 0xb0006a35, 0x5468ae3a},
  1094. {0x5bfde7d7, 0x000006fb, 0x00000554, 0xa4193b76, 0xb73d34b2},
  1095. {0x67f4a743, 0x00000b85, 0x0000047a, 0xf05c8d8f, 0x4f843e49},
  1096. {0xf13bdf22, 0x00000ff7, 0x00000008, 0x816351eb, 0x41f537f6},
  1097. {0x08ecc608, 0x00000d5d, 0x00000098, 0x90492772, 0xf5172204},
  1098. {0x296f52ba, 0x000004f9, 0x00000788, 0x5e5a4896, 0xe01d5b46},
  1099. {0xbe4624c2, 0x00000427, 0x000004ef, 0xcd267b94, 0x7b9069f4},
  1100. {0x906f7c7c, 0x00000a05, 0x0000003f, 0x03fcfc33, 0x7b6ff563},
  1101. {0x8f7b323e, 0x00000458, 0x000004c7, 0xcd4969c8, 0xd4c22ada},
  1102. {0x88d6593d, 0x00000597, 0x000005b5, 0xf199cd3b, 0x5c3e8ca2},
  1103. {0x978a7768, 0x00000268, 0x000001d3, 0xb28c95bd, 0x49a2cc67},
  1104. {0x857a621e, 0x000007a7, 0x000003a8, 0xf4bf84ab, 0xde26f369},
  1105. {0xb0e121ef, 0x000005be, 0x00000644, 0x28747c14, 0x61d4dc6b},
  1106. {0, 0, 0, 0, 0},
  1107. };
  1108.  
  1109. static int test_crc32c(void)
  1110. {
  1111. struct crc_test *t = test;
  1112. int failures = 0;
  1113.  
  1114. while (t->length) {
  1115. uint32_t be, le;
  1116. le = ext2fs_crc32c_le(t->crc, test_buf + t->start, t->length);
  1117. be = ext2fs_crc32c_be(t->crc, test_buf + t->start, t->length);
  1118. if (le != t->crc_le) {
  1119. printf("Test %d LE fails, %x != %x\n",
  1120. (t - test), le, t->crc_le);
  1121. failures++;
  1122. }
  1123. if (be != t->crc_be) {
  1124. printf("Test %d BE fails, %x != %x\n",
  1125. (t - test), be, t->crc_be);
  1126. failures++;
  1127. }
  1128. t++;
  1129. }
  1130.  
  1131. return failures;
  1132. }
  1133.  
  1134. int main(int argc, char *argv[])
  1135. {
  1136. int ret;
  1137.  
  1138. ret = test_crc32c();
  1139. if (!ret)
  1140. printf("No failures.\n");
  1141.  
  1142. return ret;
  1143. }
  1144. #endif /* UNITTEST */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement