Coverage Report

Created: 2023-09-25 06:05

/src/e2fsprogs/lib/ext2fs/crc32c.c
Line
Count
Source (jump to first uncovered line)
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 min(x, y)   ((x) > (y) ? (y) : (x))
36
#define __ALIGN_KERNEL_MASK(x, mask)  (((x) + (mask)) & ~(mask))
37
#define __ALIGN_KERNEL(x, a)  __ALIGN_KERNEL_MASK(x, (__typeof__(x))(a) - 1)
38
#define ALIGN(x, a)   __ALIGN_KERNEL((x), (a))
39
#define PTR_ALIGN(p, a)   ((__typeof__(p))ALIGN((unsigned long)(p), (a)))
40
#include "crc32c_defs.h"
41
42
#include "ext2fs.h"
43
#ifdef WORDS_BIGENDIAN
44
#define __constant_cpu_to_le32(x) ___constant_swab32((x))
45
#define __constant_cpu_to_be32(x) (x)
46
#define __be32_to_cpu(x) (x)
47
#define __cpu_to_be32(x) (x)
48
#define __cpu_to_le32(x) (ext2fs_cpu_to_le32((x)))
49
#define __le32_to_cpu(x) (ext2fs_le32_to_cpu((x)))
50
#else
51
#define __constant_cpu_to_le32(x) (x)
52
#define __constant_cpu_to_be32(x) ___constant_swab32((x))
53
0
#define __be32_to_cpu(x) (ext2fs_be32_to_cpu((x)))
54
0
#define __cpu_to_be32(x) (ext2fs_cpu_to_be32((x)))
55
219k
#define __cpu_to_le32(x) (x)
56
219k
#define __le32_to_cpu(x) (x)
57
#endif
58
59
#if CRC_LE_BITS > 8
60
# define tole(x) __constant_cpu_to_le32(x)
61
#else
62
# define tole(x) (x)
63
#endif
64
65
#if CRC_BE_BITS > 8
66
# define tobe(x) __constant_cpu_to_be32(x)
67
#else
68
# define tobe(x) (x)
69
#endif
70
71
#include "crc32c_table.h"
72
73
#if CRC_LE_BITS > 8 || CRC_BE_BITS > 8
74
75
#if CRC_LE_BITS < 64 && CRC_BE_BITS < 64
76
#define CRC_INLINE inline
77
#else
78
#define CRC_INLINE
79
#endif
80
81
/* implements slicing-by-4 or slicing-by-8 algorithm */
82
static CRC_INLINE uint32_t
83
crc32_body(uint32_t crc, unsigned char const *buf, size_t len,
84
     const uint32_t (*tab)[256])
85
219k
{
86
219k
# ifndef WORDS_BIGENDIAN
87
438k
#  define DO_CRC(x) (crc = t0[(crc ^ (x)) & 255] ^ (crc >> 8))
88
467k
#  define DO_CRC4 (t3[(q) & 255] ^ t2[(q >> 8) & 255] ^ \
89
467k
       t1[(q >> 16) & 255] ^ t0[(q >> 24) & 255])
90
467k
#  define DO_CRC8 (t7[(q) & 255] ^ t6[(q >> 8) & 255] ^ \
91
467k
       t5[(q >> 16) & 255] ^ t4[(q >> 24) & 255])
92
# else
93
#  define DO_CRC(x) (crc = t0[((crc >> 24) ^ (x)) & 255] ^ (crc << 8))
94
#  define DO_CRC4 (t0[(q) & 255] ^ t1[(q >> 8) & 255] ^ \
95
       t2[(q >> 16) & 255] ^ t3[(q >> 24) & 255])
96
#  define DO_CRC8 (t4[(q) & 255] ^ t5[(q >> 8) & 255] ^ \
97
       t6[(q >> 16) & 255] ^ t7[(q >> 24) & 255])
98
# endif
99
219k
  const uint32_t *b;
100
219k
  size_t rem_len;
101
219k
  const uint32_t *t0 = tab[0], *t1 = tab[1], *t2 = tab[2], *t3 = tab[3];
102
219k
  const uint32_t *t4 = tab[4], *t5 = tab[5], *t6 = tab[6], *t7 = tab[7];
103
219k
  uint32_t q;
104
105
  /* Align it */
106
219k
  if (unlikely((uintptr_t)buf & 3 && len)) {
107
0
    do {
108
0
      DO_CRC(*buf++);
109
0
    } while ((--len) && ((uintptr_t)buf)&3);
110
0
  }
111
112
# if CRC_LE_BITS == 32
113
  rem_len = len & 3;
114
  len = len >> 2;
115
# else
116
219k
  rem_len = len & 7;
117
219k
  len = len >> 3;
118
219k
# endif
119
120
219k
  b = (const uint32_t *)buf;
121
686k
  for (--b; len; --len) {
122
467k
    q = crc ^ *++b; /* use pre increment for speed */
123
# if CRC_LE_BITS == 32
124
    crc = DO_CRC4;
125
# else
126
467k
    crc = DO_CRC8;
127
467k
    q = *++b;
128
467k
    crc ^= DO_CRC4;
129
467k
# endif
130
467k
  }
131
219k
  len = rem_len;
132
  /* And the last few bytes */
133
219k
  if (len) {
134
109k
    const uint8_t *p = (const uint8_t *)(b + 1) - 1;
135
438k
    do {
136
438k
      DO_CRC(*++p); /* use pre increment for speed */
137
438k
    } while (--len);
138
109k
  }
139
219k
  return crc;
140
219k
#undef DO_CRC
141
219k
#undef DO_CRC4
142
219k
#undef DO_CRC8
143
219k
}
144
#endif
145
146
/**
147
 * crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32
148
 * @crc: seed value for computation.  ~0 for Ethernet, sometimes 0 for
149
 *  other uses, or the previous crc32 value if computing incrementally.
150
 * @p: pointer to buffer over which CRC is run
151
 * @len: length of buffer @p
152
 */
153
static inline uint32_t crc32_le_generic(uint32_t crc, unsigned char const *p,
154
          size_t len, const uint32_t (*tab)[256],
155
          uint32_t polynomial EXT2FS_ATTR((unused)))
156
219k
{
157
#if CRC_LE_BITS == 1
158
  int i;
159
  while (len--) {
160
    crc ^= *p++;
161
    for (i = 0; i < 8; i++)
162
      crc = (crc >> 1) ^ ((crc & 1) ? polynomial : 0);
163
  }
164
# elif CRC_LE_BITS == 2
165
  while (len--) {
166
    crc ^= *p++;
167
    crc = (crc >> 2) ^ tab[0][crc & 3];
168
    crc = (crc >> 2) ^ tab[0][crc & 3];
169
    crc = (crc >> 2) ^ tab[0][crc & 3];
170
    crc = (crc >> 2) ^ tab[0][crc & 3];
171
  }
172
# elif CRC_LE_BITS == 4
173
  while (len--) {
174
    crc ^= *p++;
175
    crc = (crc >> 4) ^ tab[0][crc & 15];
176
    crc = (crc >> 4) ^ tab[0][crc & 15];
177
  }
178
# elif CRC_LE_BITS == 8
179
  /* aka Sarwate algorithm */
180
  while (len--) {
181
    crc ^= *p++;
182
    crc = (crc >> 8) ^ tab[0][crc & 255];
183
  }
184
# else
185
219k
  crc = __cpu_to_le32(crc);
186
219k
  crc = crc32_body(crc, p, len, tab);
187
219k
  crc = __le32_to_cpu(crc);
188
219k
#endif
189
219k
  return crc;
190
219k
}
191
192
uint32_t ext2fs_crc32c_le(uint32_t crc, unsigned char const *p, size_t len)
193
219k
{
194
219k
  return crc32_le_generic(crc, p, len, crc32ctable_le, CRC32C_POLY_LE);
195
219k
}
196
197
/**
198
 * crc32_be() - Calculate bitwise big-endian Ethernet AUTODIN II CRC32
199
 * @crc: seed value for computation.  ~0 for Ethernet, sometimes 0 for
200
 *  other uses, or the previous crc32 value if computing incrementally.
201
 * @p: pointer to buffer over which CRC is run
202
 * @len: length of buffer @p
203
 */
204
static inline uint32_t crc32_be_generic(uint32_t crc, unsigned char const *p,
205
          size_t len, const uint32_t (*tab)[256],
206
          uint32_t polynomial EXT2FS_ATTR((unused)))
207
0
{
208
#if CRC_BE_BITS == 1
209
  int i;
210
  while (len--) {
211
    crc ^= *p++ << 24;
212
    for (i = 0; i < 8; i++)
213
      crc =
214
          (crc << 1) ^ ((crc & 0x80000000) ? polynomial :
215
            0);
216
  }
217
# elif CRC_BE_BITS == 2
218
  while (len--) {
219
    crc ^= *p++ << 24;
220
    crc = (crc << 2) ^ tab[0][crc >> 30];
221
    crc = (crc << 2) ^ tab[0][crc >> 30];
222
    crc = (crc << 2) ^ tab[0][crc >> 30];
223
    crc = (crc << 2) ^ tab[0][crc >> 30];
224
  }
225
# elif CRC_BE_BITS == 4
226
  while (len--) {
227
    crc ^= *p++ << 24;
228
    crc = (crc << 4) ^ tab[0][crc >> 28];
229
    crc = (crc << 4) ^ tab[0][crc >> 28];
230
  }
231
# elif CRC_BE_BITS == 8
232
  while (len--) {
233
    crc ^= *p++ << 24;
234
    crc = (crc << 8) ^ tab[0][crc >> 24];
235
  }
236
# else
237
0
  crc = __cpu_to_be32(crc);
238
0
  crc = crc32_body(crc, p, len, tab);
239
0
  crc = __be32_to_cpu(crc);
240
0
# endif
241
0
  return crc;
242
0
}
243
244
uint32_t ext2fs_crc32_be(uint32_t crc, unsigned char const *p, size_t len)
245
0
{
246
0
  return crc32_be_generic(crc, p, len, crc32table_be, CRCPOLY_BE);
247
0
}
248
249
#ifdef UNITTEST
250
static uint8_t test_buf[] = {
251
  0xd9, 0xd7, 0x6a, 0x13, 0x3a, 0xb1, 0x05, 0x48,
252
  0xda, 0xad, 0x14, 0xbd, 0x03, 0x3a, 0x58, 0x5e,
253
  0x6e, 0xd1, 0x56, 0xc9, 0x2e, 0xc4, 0xcb, 0x6b,
254
  0xe8, 0x77, 0x52, 0x37, 0x4e, 0x0f, 0x55, 0xd2,
255
  0x12, 0x65, 0x90, 0xc2, 0x41, 0x49, 0x81, 0x01,
256
  0xf5, 0x01, 0xeb, 0x2d, 0x78, 0x74, 0x23, 0x5d,
257
  0x84, 0x5c, 0x81, 0x92, 0x21, 0xe9, 0x8d, 0x1d,
258
  0x89, 0xf2, 0x4a, 0xac, 0xdd, 0xf9, 0xaf, 0xee,
259
  0x44, 0xe7, 0x6e, 0xed, 0xfb, 0xd8, 0x89, 0x0e,
260
  0x96, 0x62, 0xcd, 0xa4, 0x4b, 0xa9, 0xe5, 0x45,
261
  0xb1, 0x29, 0x9b, 0x0f, 0xfc, 0xbd, 0x83, 0xab,
262
  0xa8, 0x54, 0x96, 0x44, 0x2c, 0x7f, 0xbb, 0xe7,
263
  0x52, 0x29, 0x08, 0xee, 0x14, 0xc5, 0xc2, 0xec,
264
  0x5a, 0xeb, 0x40, 0x40, 0xea, 0xd1, 0x3d, 0x15,
265
  0x73, 0xaa, 0x8c, 0x73, 0xfc, 0xf2, 0x2b, 0x49,
266
  0x0b, 0x13, 0x96, 0xd9, 0x8e, 0x4b, 0xbc, 0xe0,
267
  0xf4, 0xd2, 0xe0, 0x2e, 0x7a, 0xf0, 0x5d, 0x1f,
268
  0xd2, 0x92, 0x97, 0xe0, 0xaa, 0x59, 0xab, 0xc9,
269
  0x5c, 0xa6, 0x51, 0x1a, 0xe3, 0xd6, 0x06, 0xb9,
270
  0xae, 0xb8, 0x76, 0x36, 0x79, 0x37, 0x52, 0xf6,
271
  0x34, 0xaf, 0x27, 0x19, 0xe1, 0xc0, 0x2b, 0xdd,
272
  0x01, 0x15, 0xcd, 0xce, 0x44, 0xf6, 0x4c, 0x18,
273
  0x92, 0x69, 0xbe, 0x8a, 0x76, 0x23, 0x52, 0x13,
274
  0x3f, 0xf9, 0xe0, 0xf5, 0x06, 0x28, 0x7c, 0xc7,
275
  0xf3, 0x42, 0x0f, 0xdd, 0x40, 0x33, 0xf7, 0x99,
276
  0xe2, 0xad, 0x26, 0xd9, 0x53, 0x10, 0x72, 0x0c,
277
  0x4e, 0x43, 0x4c, 0x61, 0xfe, 0xd9, 0xc1, 0x16,
278
  0xa1, 0x93, 0xca, 0x3c, 0x75, 0x7f, 0x07, 0x7a,
279
  0x65, 0xb3, 0x53, 0x2a, 0x52, 0x00, 0xa0, 0x62,
280
  0xe0, 0xa3, 0x1f, 0xad, 0xd7, 0xbb, 0xc0, 0x83,
281
  0x5d, 0x54, 0x87, 0x5f, 0xc8, 0x2f, 0xc8, 0xbf,
282
  0x69, 0x04, 0x91, 0xc8, 0xa6, 0x1d, 0x4d, 0x46,
283
  0x91, 0xfc, 0x26, 0xf4, 0x16, 0xd1, 0xa4, 0xbf,
284
  0x5c, 0xa2, 0x6c, 0xdd, 0xb4, 0x40, 0xf2, 0x2e,
285
  0xa2, 0xad, 0xf7, 0xf4, 0xa5, 0x8a, 0x3e, 0x23,
286
  0x64, 0x08, 0xc8, 0xa1, 0xa0, 0xf0, 0x5d, 0x70,
287
  0xd2, 0x77, 0xfd, 0xc8, 0x50, 0x83, 0x0f, 0xd6,
288
  0x2b, 0xe4, 0x1f, 0x52, 0x34, 0x33, 0x68, 0xfd,
289
  0x92, 0xbe, 0x9f, 0x97, 0x6b, 0x8d, 0x81, 0x91,
290
  0x0f, 0xef, 0x65, 0xc8, 0x0d, 0x15, 0x01, 0x77,
291
  0x58, 0xb2, 0xf4, 0x1b, 0x06, 0x7e, 0xf5, 0xca,
292
  0x15, 0x2e, 0x38, 0xd8, 0x81, 0x1c, 0x1c, 0xa0,
293
  0xb6, 0x13, 0x6a, 0x2b, 0x71, 0x34, 0x52, 0xd7,
294
  0x1d, 0xbd, 0x37, 0x59, 0xbc, 0x86, 0x25, 0x2b,
295
  0xa8, 0x93, 0xce, 0x1a, 0x03, 0x16, 0xfe, 0x01,
296
  0x57, 0x99, 0x24, 0x25, 0x2c, 0xb3, 0xab, 0x1e,
297
  0x2d, 0x65, 0x20, 0x89, 0x17, 0x02, 0x0e, 0x0a,
298
  0xf5, 0x1e, 0xc7, 0xff, 0x1f, 0x61, 0xa9, 0x54,
299
  0x18, 0xd4, 0xba, 0x50, 0x57, 0x02, 0xa1, 0xab,
300
  0x22, 0x2e, 0x07, 0xea, 0xa9, 0xa3, 0x83, 0x4f,
301
  0x27, 0xf5, 0xc5, 0xee, 0x3c, 0x3b, 0x10, 0xad,
302
  0x32, 0x2b, 0x1c, 0x03, 0xcb, 0xaf, 0x98, 0x83,
303
  0x54, 0xc3, 0x68, 0x63, 0xd4, 0xe0, 0x0e, 0x3c,
304
  0x1a, 0x4e, 0xc0, 0x81, 0xd0, 0xe8, 0x6a, 0x62,
305
  0x6b, 0x3e, 0x6f, 0xc4, 0xc6, 0x33, 0x4e, 0x26,
306
  0x21, 0xf5, 0x04, 0xdf, 0xfa, 0xce, 0x45, 0xaf,
307
  0xdc, 0x5e, 0x1b, 0xad, 0x93, 0xca, 0xf5, 0xcf,
308
  0xd7, 0xee, 0x0c, 0x5c, 0x5e, 0xb4, 0xf0, 0x92,
309
  0xd2, 0xf2, 0xf0, 0xa9, 0x1e, 0xab, 0x80, 0x68,
310
  0x46, 0xef, 0xcc, 0x26, 0x0c, 0x5c, 0xdd, 0x4e,
311
  0x83, 0xb8, 0xb9, 0x53, 0x6e, 0xf8, 0x93, 0x38,
312
  0x67, 0xa4, 0x41, 0x87, 0x72, 0xe7, 0x7e, 0x86,
313
  0xc9, 0x49, 0x00, 0x33, 0xb1, 0x38, 0x6c, 0x71,
314
  0xd7, 0x1d, 0x8e, 0x61, 0x01, 0xb6, 0x57, 0xa9,
315
  0xf1, 0xac, 0x15, 0xc2, 0x83, 0x77, 0xca, 0x64,
316
  0xca, 0x7b, 0x6c, 0xa1, 0x10, 0x1b, 0x13, 0xd0,
317
  0xd3, 0x9e, 0x9e, 0x10, 0x70, 0xc8, 0x1a, 0xbb,
318
  0x3f, 0x19, 0x86, 0xab, 0x01, 0x0e, 0xea, 0x34,
319
  0x22, 0xea, 0xe2, 0x15, 0xb7, 0xed, 0x21, 0x21,
320
  0x75, 0xa5, 0xe7, 0x08, 0xa1, 0x38, 0xe0, 0x91,
321
  0x05, 0x60, 0xea, 0xa7, 0x50, 0x27, 0x18, 0x07,
322
  0x9d, 0xe0, 0x18, 0x2b, 0xd4, 0x07, 0x59, 0x00,
323
  0xe6, 0x45, 0x18, 0x2a, 0x30, 0x6e, 0xf3, 0xb4,
324
  0xd0, 0xef, 0xa6, 0x5b, 0x71, 0xa2, 0x5a, 0x3b,
325
  0x89, 0x4c, 0xaf, 0x3f, 0xcb, 0x9f, 0x03, 0xfb,
326
  0x43, 0x7c, 0x6b, 0xd3, 0x6a, 0xea, 0xce, 0x4a,
327
  0x5f, 0x64, 0xb5, 0x62, 0xda, 0x5d, 0x27, 0xb7,
328
  0xb8, 0x11, 0xca, 0x33, 0x30, 0xec, 0x70, 0xf0,
329
  0x1b, 0x03, 0x50, 0xff, 0x5e, 0xa6, 0x08, 0xde,
330
  0x37, 0x70, 0xc0, 0x81, 0x55, 0x60, 0x17, 0xa1,
331
  0x85, 0xae, 0x26, 0x44, 0xe4, 0x67, 0x3c, 0x91,
332
  0xfd, 0xc4, 0x3d, 0x97, 0x72, 0x23, 0xf3, 0x3c,
333
  0x8f, 0xe0, 0xe2, 0xf2, 0x09, 0x96, 0x10, 0x67,
334
  0xb5, 0xfe, 0xff, 0x3d, 0x4a, 0xc8, 0x62, 0x11,
335
  0xa5, 0x98, 0xc1, 0x2d, 0x40, 0x82, 0x88, 0x8b,
336
  0xe5, 0xb0, 0x75, 0xbf, 0x2f, 0xa8, 0x6a, 0x55,
337
  0x49, 0x2e, 0x9c, 0x29, 0xd2, 0x7c, 0xbf, 0xf3,
338
  0xaa, 0x3a, 0x16, 0x4a, 0xa4, 0x15, 0xf3, 0x48,
339
  0xde, 0x38, 0x13, 0x44, 0x26, 0x02, 0xe6, 0xe9,
340
  0xa8, 0x24, 0x89, 0xb5, 0x43, 0x95, 0xe4, 0x4c,
341
  0xc3, 0xa0, 0xdf, 0xcc, 0x42, 0xf8, 0x8d, 0xb0,
342
  0x3b, 0xea, 0x10, 0xb7, 0xe1, 0x40, 0x54, 0xb9,
343
  0xa3, 0x2d, 0xfb, 0xb4, 0x91, 0xc0, 0x3e, 0x94,
344
  0xf1, 0xa1, 0x3c, 0xbe, 0xef, 0xb8, 0x70, 0x55,
345
  0x0a, 0x26, 0x93, 0xbf, 0xe6, 0x21, 0x92, 0x32,
346
  0x3c, 0x39, 0x27, 0x6a, 0x23, 0x48, 0x02, 0x35,
347
  0x3c, 0xd4, 0xcc, 0x04, 0xc0, 0x4e, 0xa7, 0x02,
348
  0x63, 0x37, 0xc2, 0xb8, 0x56, 0x1d, 0x57, 0x57,
349
  0x42, 0x04, 0x8d, 0xee, 0xcf, 0x8b, 0xc9, 0xc3,
350
  0xba, 0x3b, 0x15, 0xd7, 0xaf, 0xbf, 0x9e, 0xcd,
351
  0x44, 0xcf, 0xf0, 0x00, 0xb7, 0x3a, 0xfc, 0xa8,
352
  0x12, 0xab, 0x3a, 0x62, 0x01, 0x21, 0x46, 0xe9,
353
  0x1e, 0x48, 0x37, 0xfc, 0x13, 0x4d, 0xf6, 0x2a,
354
  0x72, 0x40, 0x75, 0x38, 0x71, 0xf2, 0x17, 0x20,
355
  0x2c, 0xdd, 0xc0, 0x49, 0xbc, 0x63, 0x33, 0xea,
356
  0x06, 0x75, 0x41, 0xe7, 0x5c, 0x1f, 0xfb, 0xf9,
357
  0x68, 0x83, 0xc2, 0x5a, 0x4a, 0x1e, 0x61, 0x08,
358
  0x57, 0xf3, 0x00, 0xba, 0x77, 0x92, 0x63, 0xa5,
359
  0xb7, 0xfe, 0x97, 0x22, 0xda, 0x5e, 0xd3, 0xaf,
360
  0xbc, 0x89, 0x0d, 0x4c, 0x37, 0xa9, 0x27, 0x4a,
361
  0x7f, 0xdb, 0x81, 0x39, 0x11, 0x86, 0x12, 0xf9,
362
  0x10, 0x50, 0xe4, 0xdb, 0x72, 0xf9, 0xae, 0x10,
363
  0x7c, 0xed, 0x50, 0x5c, 0x61, 0xeb, 0x42, 0x1e,
364
  0xa4, 0xf4, 0xf0, 0xfa, 0x45, 0x4d, 0x95, 0x2b,
365
  0xd4, 0x67, 0x4a, 0xe3, 0x8a, 0x15, 0x55, 0x92,
366
  0x77, 0x64, 0x8c, 0x51, 0x38, 0xf9, 0x26, 0x3e,
367
  0x68, 0xe2, 0xac, 0xbb, 0x64, 0x77, 0xe2, 0x82,
368
  0xa4, 0x42, 0x41, 0x38, 0xa0, 0xf0, 0xc9, 0xd8,
369
  0x6c, 0xe0, 0xef, 0x4c, 0xda, 0xb4, 0x92, 0xef,
370
  0x1b, 0xe3, 0x9b, 0xc1, 0x44, 0x3c, 0xb9, 0xb7,
371
  0x39, 0xac, 0x5c, 0x32, 0x39, 0xb4, 0x21, 0x85,
372
  0x93, 0xbc, 0xf2, 0x51, 0x43, 0xb7, 0xae, 0x1e,
373
  0x61, 0x9c, 0x38, 0x9c, 0xaa, 0xff, 0xde, 0xfc,
374
  0xbf, 0x85, 0xef, 0x17, 0x34, 0x36, 0x71, 0x5f,
375
  0x04, 0x16, 0xa6, 0x9e, 0xfd, 0x3a, 0x03, 0xd8,
376
  0xbf, 0x71, 0x70, 0x20, 0x8f, 0x7c, 0xfb, 0xff,
377
  0x61, 0xe0, 0xe2, 0x60, 0xa7, 0xb1, 0xc0, 0xe0,
378
  0xd9, 0x3f, 0xdc, 0x8d, 0x4a, 0xa4, 0x52, 0x61,
379
  0xaf, 0x9d, 0xdf, 0x8a, 0x0d, 0x41, 0xc0, 0x25,
380
  0x68, 0x12, 0x7b, 0xd5, 0xc7, 0xdb, 0x68, 0x70,
381
  0x2d, 0x7d, 0x95, 0x12, 0x03, 0x23, 0x0c, 0xe8,
382
  0x14, 0x41, 0x11, 0x28, 0xec, 0x9d, 0xd3, 0x28,
383
  0x77, 0x7a, 0x3c, 0x93, 0x8e, 0x5c, 0x7e, 0xb3,
384
  0x42, 0x9a, 0x18, 0x25, 0x93, 0xc8, 0xea, 0x43,
385
  0x1b, 0xbe, 0xd5, 0x27, 0xf1, 0xd4, 0xe0, 0x1e,
386
  0xce, 0xc7, 0xc7, 0x2c, 0x25, 0x35, 0x58, 0xb8,
387
  0x6c, 0xf3, 0xa2, 0xad, 0xe7, 0x58, 0x49, 0x47,
388
  0xf7, 0xca, 0xde, 0x8b, 0x81, 0xb7, 0x75, 0xf4,
389
  0x95, 0xa7, 0x5c, 0xc3, 0x2c, 0x0e, 0x1c, 0x52,
390
  0x9a, 0xc3, 0x2a, 0x00, 0x21, 0xa7, 0x51, 0x6b,
391
  0xf0, 0x05, 0x87, 0x8c, 0x42, 0x1b, 0xc3, 0x2e,
392
  0xa3, 0x76, 0x22, 0xd5, 0x7f, 0x56, 0x10, 0xef,
393
  0x98, 0x85, 0x65, 0x86, 0x71, 0x87, 0xd2, 0x8c,
394
  0xc0, 0x47, 0x20, 0xe8, 0xb5, 0x1c, 0xe3, 0xdd,
395
  0x3c, 0x5c, 0x03, 0xbb, 0x0e, 0x97, 0x3b, 0xe1,
396
  0x56, 0x9a, 0xd5, 0x0a, 0x63, 0xd5, 0x33, 0xaf,
397
  0x36, 0xca, 0xcf, 0x8f, 0x00, 0x28, 0xa3, 0x45,
398
  0xb8, 0xcd, 0xde, 0x73, 0xd4, 0xfa, 0x2d, 0x6f,
399
  0xdb, 0x93, 0xaa, 0xdd, 0x7f, 0xd2, 0x22, 0x9c,
400
  0x96, 0x48, 0x1e, 0xa8, 0x63, 0xbe, 0xbc, 0x0d,
401
  0x14, 0x3c, 0x2e, 0x11, 0x1f, 0xd2, 0xf4, 0x57,
402
  0xb3, 0x47, 0xf8, 0xa6, 0x1b, 0xc3, 0xa7, 0x95,
403
  0x2d, 0xd4, 0xca, 0xb8, 0x0d, 0xfb, 0x06, 0x85,
404
  0xda, 0x63, 0xf0, 0x3e, 0x9d, 0x5e, 0xee, 0xce,
405
  0xed, 0x74, 0x1d, 0x2c, 0x97, 0x3f, 0x71, 0x95,
406
  0x12, 0x03, 0xc5, 0x92, 0x46, 0x84, 0x1b, 0x07,
407
  0xe6, 0xb4, 0x1d, 0x3a, 0xf1, 0x89, 0x90, 0x50,
408
  0x10, 0x29, 0x34, 0xc0, 0x90, 0xbe, 0x4a, 0xa9,
409
  0x0d, 0xb0, 0x7b, 0xfb, 0x35, 0xee, 0x4e, 0x34,
410
  0xec, 0x5a, 0x58, 0xbc, 0xb8, 0xda, 0x38, 0x88,
411
  0x8c, 0x74, 0x1e, 0xc9, 0xab, 0x78, 0x2e, 0x2a,
412
  0x17, 0x8a, 0x43, 0x3d, 0xa1, 0x2a, 0x41, 0xb5,
413
  0xd6, 0xe8, 0x5b, 0xc5, 0x4a, 0x1c, 0x3c, 0x9f,
414
  0x8d, 0x3a, 0x69, 0x88, 0xf8, 0x80, 0xd2, 0x11,
415
  0xfc, 0x7e, 0x80, 0x8e, 0x7f, 0x85, 0x64, 0x9c,
416
  0x46, 0x58, 0xc8, 0x48, 0x98, 0x4b, 0xf5, 0x73,
417
  0x3f, 0x49, 0xce, 0x53, 0x2c, 0xd5, 0xfc, 0x33,
418
  0xf1, 0x6f, 0xd8, 0xe9, 0x2e, 0x70, 0x2e, 0xdc,
419
  0xe5, 0x43, 0x80, 0x38, 0xf2, 0x87, 0xed, 0x85,
420
  0xe4, 0x3e, 0x45, 0x14, 0x20, 0xcf, 0xa0, 0x61,
421
  0x4f, 0xe8, 0xd7, 0x5b, 0xb3, 0x0d, 0x0e, 0x4e,
422
  0x4d, 0xce, 0xbe, 0xba, 0xaa, 0x90, 0x09, 0xcb,
423
  0x4b, 0x5d, 0x08, 0xff, 0x52, 0xd5, 0x23, 0xbc,
424
  0xad, 0x8d, 0xd3, 0x06, 0x4a, 0xa0, 0x51, 0x56,
425
  0xa7, 0xd8, 0x33, 0xab, 0xbc, 0xd0, 0xdf, 0x92,
426
  0x87, 0x20, 0x2d, 0x7b, 0x5e, 0xfa, 0x30, 0xa7,
427
  0x06, 0x06, 0xe5, 0x4f, 0x2c, 0xb5, 0x61, 0xd7,
428
  0x54, 0xd3, 0xdf, 0xd0, 0x0a, 0xb0, 0x06, 0xce,
429
  0xf6, 0x86, 0xb7, 0x8e, 0xaa, 0x7b, 0x78, 0xd5,
430
  0xb9, 0xeb, 0x07, 0xac, 0x5f, 0xc5, 0xd2, 0x8c,
431
  0x40, 0xe0, 0x7f, 0x98, 0xd4, 0xe5, 0x4b, 0xca,
432
  0xfb, 0x47, 0xef, 0xef, 0xb9, 0x4d, 0x6d, 0x8f,
433
  0x82, 0x68, 0x74, 0x84, 0xe0, 0x0a, 0x93, 0x0f,
434
  0xb2, 0x01, 0xa9, 0x9f, 0x68, 0x6a, 0xe8, 0xf7,
435
  0xfb, 0x0b, 0xde, 0x17, 0xe0, 0x30, 0x38, 0x51,
436
  0xbc, 0x07, 0xb8, 0x2c, 0x91, 0x0f, 0xc1, 0x0e,
437
  0xa6, 0xf9, 0xf0, 0xd5, 0x48, 0x76, 0x8a, 0xde,
438
  0x74, 0xe3, 0x30, 0x65, 0x56, 0xb3, 0x5c, 0xe2,
439
  0x89, 0x8d, 0xda, 0x80, 0xad, 0x0f, 0x22, 0xfb,
440
  0x24, 0x1d, 0x16, 0xdd, 0x34, 0x4b, 0x90, 0x58,
441
  0x4e, 0x0c, 0x13, 0x28, 0xcf, 0x1d, 0xa4, 0xaa,
442
  0xb7, 0xf3, 0xb1, 0x66, 0xad, 0x3b, 0xcf, 0x79,
443
  0x12, 0x04, 0xd7, 0x79, 0xd9, 0x5f, 0xdf, 0x89,
444
  0xb2, 0x5b, 0xa7, 0x9a, 0x26, 0x1e, 0x67, 0x46,
445
  0x7c, 0x66, 0x95, 0x67, 0xe6, 0x45, 0x8b, 0x1f,
446
  0x65, 0x79, 0x9f, 0x6d, 0x11, 0x81, 0x17, 0x0d,
447
  0x11, 0xb0, 0x5c, 0xb4, 0xc7, 0x27, 0x87, 0xab,
448
  0x5d, 0x0a, 0x18, 0xae, 0x4e, 0x06, 0xa3, 0x3d,
449
  0xc7, 0xb0, 0x22, 0xba, 0x03, 0xa4, 0x0f, 0xe5,
450
  0x1c, 0x72, 0x2a, 0x04, 0xce, 0x83, 0xe9, 0xf3,
451
  0xd7, 0xc9, 0x67, 0x6c, 0x1e, 0x6b, 0x3c, 0x9b,
452
  0x0b, 0x5e, 0x6a, 0xa6, 0x79, 0x0a, 0xf1, 0xbe,
453
  0xd7, 0xb4, 0x6f, 0x45, 0x1e, 0xfb, 0x78, 0x97,
454
  0xaf, 0x34, 0x76, 0x95, 0x52, 0xf7, 0x3d, 0x5d,
455
  0x07, 0x28, 0x57, 0x9c, 0x4a, 0x0f, 0xcf, 0x0b,
456
  0x1b, 0xc4, 0xc2, 0x72, 0xd7, 0x72, 0x38, 0x9b,
457
  0xea, 0xeb, 0xee, 0xae, 0x34, 0xc8, 0x01, 0xd7,
458
  0xa5, 0xe3, 0xce, 0x41, 0xad, 0x02, 0x60, 0x23,
459
  0x18, 0x36, 0xba, 0x17, 0xfa, 0xcf, 0xe4, 0xda,
460
  0xdc, 0xfc, 0x82, 0xdc, 0x7c, 0x11, 0xf4, 0xb8,
461
  0x52, 0x5d, 0xf7, 0x2f, 0xc8, 0xfe, 0x4a, 0xe6,
462
  0xb9, 0xaf, 0x4b, 0x17, 0x18, 0x91, 0xc2, 0xfe,
463
  0xd7, 0x3a, 0x77, 0x0c, 0xa0, 0x43, 0x9c, 0x6f,
464
  0x13, 0x06, 0xbe, 0x6e, 0xe0, 0x1a, 0x3c, 0xf3,
465
  0xf5, 0xcc, 0x78, 0xfb, 0x5d, 0xd5, 0xda, 0xb7,
466
  0x58, 0xea, 0x86, 0x42, 0x6b, 0x32, 0xff, 0xb2,
467
  0xe2, 0xee, 0x03, 0x1f, 0xf4, 0xef, 0xdb, 0x53,
468
  0x79, 0xd5, 0x4e, 0xaf, 0x60, 0x8e, 0x02, 0xc2,
469
  0xcc, 0x39, 0x97, 0x7b, 0xfd, 0xa1, 0xf8, 0x7a,
470
  0x26, 0xe8, 0x55, 0xd6, 0xa4, 0x8b, 0xa0, 0x1b,
471
  0x2d, 0x63, 0xaa, 0x73, 0x71, 0x6e, 0xbf, 0x8b,
472
  0x3b, 0xe3, 0x1b, 0x0d, 0xbb, 0x2e, 0x44, 0x09,
473
  0x64, 0xac, 0xc7, 0x9e, 0xb5, 0xc6, 0x77, 0xb0,
474
  0x79, 0xb3, 0xaa, 0xfc, 0x67, 0x57, 0x9a, 0x50,
475
  0x81, 0x37, 0x14, 0x7c, 0xd7, 0xa0, 0xd4, 0x6a,
476
  0x79, 0x84, 0x51, 0x0e, 0x95, 0x0a, 0x30, 0xa3,
477
  0x60, 0x55, 0x48, 0x05, 0x16, 0xae, 0x43, 0x90,
478
  0xdc, 0x8e, 0x09, 0xbe, 0x79, 0xf6, 0x90, 0x74,
479
  0xf8, 0x20, 0x96, 0x4d, 0xa7, 0xf5, 0x1a, 0x2b,
480
  0xc7, 0x15, 0x9d, 0x18, 0xf7, 0x94, 0x87, 0xf7,
481
  0xf4, 0xfb, 0x0d, 0x61, 0xb6, 0xd7, 0xbe, 0x10,
482
  0x8e, 0x47, 0x3c, 0x10, 0x44, 0x90, 0x52, 0x21,
483
  0x83, 0xc0, 0xf5, 0x99, 0xaa, 0xbc, 0xf6, 0x55,
484
  0xae, 0xf5, 0xb2, 0xa4, 0xcd, 0x4d, 0xb9, 0x38,
485
  0x6c, 0xbc, 0x80, 0xc3, 0xad, 0xf4, 0x46, 0x31,
486
  0x01, 0x58, 0x2d, 0x88, 0x57, 0xc3, 0x23, 0xd1,
487
  0x64, 0xc9, 0xa3, 0x21, 0x6b, 0x8b, 0x8a, 0x23,
488
  0x2c, 0x4f, 0xa9, 0xcd, 0x67, 0xfa, 0x77, 0xad,
489
  0xa3, 0x16, 0xa2, 0xe5, 0x19, 0x14, 0x70, 0x41,
490
  0x5b, 0xda, 0x14, 0xde, 0xe3, 0xe5, 0xc1, 0x15,
491
  0xb4, 0x77, 0xa4, 0x9b, 0xb8, 0xb1, 0x28, 0x51,
492
  0x30, 0xb4, 0xf1, 0xf3, 0xf8, 0x6d, 0xd0, 0xc3,
493
  0x8c, 0x4c, 0x76, 0xb0, 0x9a, 0xdf, 0xc8, 0xbe,
494
  0xf8, 0x4a, 0x61, 0x6e, 0x3e, 0xd6, 0x3c, 0xe8,
495
  0xde, 0x56, 0xa0, 0x9c, 0x25, 0xbe, 0xce, 0x93,
496
  0x1f, 0x88, 0xfb, 0x9a, 0x1a, 0xe2, 0xff, 0x88,
497
  0xad, 0x10, 0xcb, 0x6c, 0xd6, 0xe7, 0x39, 0x0b,
498
  0xe5, 0x1a, 0x06, 0x05, 0x64, 0x5b, 0x0a, 0xdf,
499
  0x22, 0x58, 0xd7, 0xfb, 0x88, 0x12, 0xdd, 0xb7,
500
  0x52, 0x3a, 0xc9, 0xbf, 0x49, 0xdf, 0x8c, 0x87,
501
  0x9f, 0x84, 0xb5, 0x0a, 0xf6, 0x00, 0x52, 0xae,
502
  0x67, 0x12, 0x1a, 0x8c, 0x71, 0x15, 0xf5, 0xa1,
503
  0x13, 0x39, 0xf0, 0x91, 0x7e, 0x88, 0x7c, 0xb3,
504
  0x95, 0x50, 0x02, 0xa6, 0x63, 0xb5, 0x64, 0xfb,
505
  0x90, 0x87, 0x61, 0xe2, 0x27, 0xaf, 0x11, 0x0c,
506
  0x73, 0x83, 0xef, 0xa9, 0x28, 0xfe, 0xc8, 0x85,
507
  0x1a, 0x3a, 0xde, 0xf2, 0xe5, 0x25, 0x64, 0x6d,
508
  0xaa, 0x41, 0x4c, 0x80, 0x2e, 0x84, 0xff, 0xc1,
509
  0xc0, 0x54, 0x0c, 0x29, 0x1b, 0xa3, 0x07, 0x7c,
510
  0x33, 0x4c, 0x10, 0xf6, 0x6f, 0x79, 0xdf, 0xd3,
511
  0xf0, 0x24, 0x57, 0xf1, 0x60, 0xe1, 0xf0, 0xbd,
512
  0xc4, 0x1f, 0xf4, 0x67, 0xd2, 0xd3, 0xcc, 0x6a,
513
  0x07, 0x72, 0x44, 0x16, 0x85, 0x46, 0xd0, 0x73,
514
  0x87, 0xa9, 0xc7, 0x2f, 0xd1, 0xf5, 0xec, 0xe3,
515
  0x28, 0xa3, 0x93, 0x4f, 0xd7, 0x76, 0xc1, 0x3c,
516
  0x0d, 0x13, 0x33, 0xcf, 0x5b, 0xbd, 0x6a, 0x52,
517
  0x4e, 0xee, 0xc8, 0x5e, 0xa1, 0x58, 0x4a, 0x08,
518
  0x81, 0xd9, 0x23, 0xcc, 0xfb, 0x1c, 0xb2, 0xd8,
519
  0xa3, 0xe4, 0x53, 0xfe, 0xf4, 0x4b, 0x48, 0xc1,
520
  0x20, 0xa4, 0x97, 0xf8, 0x38, 0xa3, 0x69, 0xc1,
521
  0x11, 0xf0, 0xa1, 0x3b, 0xa9, 0x9a, 0x12, 0x61,
522
  0xe8, 0x8d, 0x99, 0x44, 0x3f, 0x94, 0x72, 0x82,
523
  0x19, 0x96, 0x62, 0xb0, 0xa6, 0x64, 0x05, 0x19,
524
  0x8f, 0xd6, 0x5d, 0x05, 0xbf, 0x79, 0x9e, 0x9d,
525
  0xe4, 0x93, 0x4c, 0xad, 0x61, 0x8c, 0x18, 0xda,
526
  0xb6, 0x2e, 0xb3, 0xca, 0x14, 0x4d, 0x53, 0xa4,
527
  0x97, 0x27, 0x10, 0x56, 0xa2, 0x67, 0x5a, 0x5a,
528
  0x5e, 0x13, 0xc0, 0xdb, 0xa7, 0x9f, 0x45, 0x5b,
529
  0xeb, 0x1a, 0x14, 0x0c, 0x8c, 0x38, 0x5e, 0x77,
530
  0x9a, 0xec, 0x75, 0x68, 0x93, 0x65, 0x02, 0x9c,
531
  0xfb, 0x62, 0x60, 0x49, 0xdd, 0xb2, 0x2a, 0x67,
532
  0x86, 0xe3, 0x8a, 0x7d, 0x8c, 0x46, 0x78, 0x81,
533
  0x60, 0x69, 0xf2, 0x3f, 0x74, 0x11, 0x35, 0xff,
534
  0x77, 0xa3, 0x66, 0x20, 0xfc, 0x98, 0x4a, 0x35,
535
  0x7a, 0x52, 0xe4, 0x90, 0x13, 0x80, 0xb9, 0xa6,
536
  0x73, 0x7a, 0x7d, 0x66, 0x6e, 0x6b, 0xb6, 0x43,
537
  0x10, 0xd5, 0x91, 0x2b, 0x66, 0xdd, 0x89, 0x87,
538
  0xe3, 0x8c, 0x58, 0x53, 0x2f, 0x40, 0x74, 0x45,
539
  0x1b, 0x77, 0x7a, 0xa4, 0x44, 0x19, 0x78, 0xba,
540
  0x87, 0x10, 0x41, 0x31, 0x32, 0x5f, 0x87, 0x68,
541
  0xde, 0x43, 0x4a, 0xef, 0x33, 0xb3, 0x11, 0x83,
542
  0xa9, 0xc2, 0x6f, 0x8d, 0x34, 0xe2, 0x95, 0x84,
543
  0x3a, 0x4f, 0x6f, 0x8c, 0x31, 0x1d, 0xb6, 0xf5,
544
  0x95, 0x0d, 0x01, 0x11, 0x20, 0xdf, 0x72, 0xf3,
545
  0x3f, 0x9a, 0x33, 0xaa, 0xb1, 0x06, 0x6a, 0x63,
546
  0x47, 0x91, 0x01, 0xdf, 0xb3, 0x54, 0x36, 0xfd,
547
  0x06, 0x2d, 0xb8, 0x08, 0xe3, 0xd3, 0x65, 0xac,
548
  0x66, 0x03, 0xee, 0xa4, 0x63, 0xbd, 0xd4, 0xce,
549
  0xbd, 0x79, 0xa7, 0x48, 0x38, 0xc5, 0x7d, 0xb5,
550
  0x71, 0x9a, 0x3c, 0x11, 0x7c, 0x6c, 0xe2, 0x54,
551
  0x02, 0x5d, 0x42, 0xab, 0x25, 0x93, 0x66, 0x01,
552
  0x37, 0x78, 0x35, 0x4a, 0x8c, 0x19, 0x4d, 0x00,
553
  0x75, 0x4f, 0xcc, 0xc0, 0x26, 0x82, 0xc1, 0x35,
554
  0x8c, 0xc7, 0xc2, 0x59, 0x01, 0x3e, 0x98, 0x22,
555
  0x88, 0x9c, 0x90, 0x75, 0x05, 0x33, 0x07, 0xb9,
556
  0x39, 0x81, 0x38, 0x58, 0x10, 0x29, 0xcf, 0xc8,
557
  0x98, 0xb2, 0x03, 0xd7, 0x5b, 0xb3, 0x18, 0xba,
558
  0x34, 0x0c, 0x9f, 0xab, 0xd7, 0xed, 0x29, 0x82,
559
  0x41, 0xe0, 0x20, 0x97, 0x57, 0x92, 0xb2, 0xb8,
560
  0x10, 0x2d, 0x0b, 0xa2, 0xc5, 0x8f, 0x90, 0x6f,
561
  0xed, 0x12, 0x56, 0x25, 0xbe, 0xfd, 0x75, 0xf7,
562
  0xb6, 0xf8, 0x40, 0x67, 0x39, 0x11, 0xfa, 0x15,
563
  0xae, 0x6a, 0x54, 0x5f, 0x32, 0x2b, 0xf8, 0x48,
564
  0x55, 0xbe, 0x86, 0x2f, 0x69, 0x48, 0x5b, 0x5d,
565
  0x4d, 0xb7, 0x35, 0xaa, 0xb6, 0x91, 0x88, 0x19,
566
  0x96, 0x1c, 0x68, 0xf6, 0x85, 0x9e, 0xb3, 0xb2,
567
  0xa3, 0x32, 0xd4, 0x52, 0x70, 0xb7, 0x62, 0xe3,
568
  0x14, 0xb6, 0x78, 0x5f, 0x1b, 0x1d, 0x04, 0x9c,
569
  0x26, 0x0c, 0x33, 0x94, 0xb1, 0x97, 0x08, 0xdb,
570
  0x0b, 0x39, 0x29, 0xd4, 0xbc, 0x6d, 0xdf, 0x02,
571
  0xc6, 0x99, 0xab, 0x99, 0x32, 0xe5, 0xce, 0x51,
572
  0x4f, 0xae, 0xb8, 0x8b, 0xe0, 0xaf, 0x07, 0xc4,
573
  0xf9, 0x41, 0x7c, 0x59, 0xa0, 0xac, 0x74, 0x4d,
574
  0x7e, 0x43, 0x77, 0x9c, 0x06, 0x49, 0x79, 0x8a,
575
  0x14, 0x73, 0x93, 0xa8, 0x5b, 0x1b, 0x34, 0x29,
576
  0x78, 0x04, 0x2f, 0xd7, 0x1f, 0x13, 0x90, 0xe0,
577
  0xdd, 0x3b, 0x42, 0x6b, 0x79, 0x6e, 0x52, 0xc7,
578
  0x0f, 0x38, 0xda, 0x01, 0x2c, 0x8d, 0xe6, 0x94,
579
  0x5d, 0x59, 0x27, 0x1d, 0x10, 0x4e, 0x11, 0x36,
580
  0xfb, 0x53, 0x16, 0x05, 0x25, 0xf2, 0x64, 0xd8,
581
  0xf9, 0xcd, 0x5c, 0xfe, 0xb4, 0x18, 0x44, 0x80,
582
  0x10, 0xbc, 0x3d, 0xf3, 0x1d, 0x5a, 0xf0, 0xc1,
583
  0xc3, 0x55, 0xff, 0x41, 0x3e, 0xe3, 0xef, 0x44,
584
  0xb2, 0xc0, 0x01, 0x18, 0xa2, 0x49, 0x88, 0x78,
585
  0x0d, 0x4c, 0xc8, 0x73, 0xcf, 0x30, 0x85, 0x3a,
586
  0x88, 0x90, 0x01, 0xcf, 0x69, 0x53, 0xa3, 0x18,
587
  0x3f, 0xd6, 0xe7, 0x94, 0x14, 0xa7, 0xae, 0xcd,
588
  0x6f, 0x11, 0x72, 0xfe, 0x2b, 0xb0, 0x81, 0x53,
589
  0xea, 0x67, 0xd6, 0xe4, 0xca, 0x42, 0xa0, 0xf9,
590
  0xb1, 0xd4, 0xb5, 0x3b, 0xc9, 0xf0, 0x36, 0xc1,
591
  0x1c, 0xf4, 0xb1, 0xf6, 0x84, 0xd0, 0x86, 0x6c,
592
  0x76, 0x9a, 0x03, 0xc2, 0xb6, 0x2e, 0x9a, 0x46,
593
  0xf5, 0x5f, 0x2c, 0x38, 0xac, 0xad, 0x6f, 0x2e,
594
  0x7a, 0x18, 0x2d, 0x22, 0x95, 0x5e, 0x5e, 0xc9,
595
  0x7a, 0x0a, 0x56, 0xe1, 0xc7, 0x15, 0xfd, 0xbf,
596
  0xff, 0xf7, 0x7e, 0x85, 0x20, 0xa9, 0x8a, 0x9c,
597
  0xa9, 0x7d, 0xe8, 0xed, 0xfc, 0x7f, 0xbb, 0xf0,
598
  0x05, 0x3f, 0xce, 0x4f, 0x4c, 0xee, 0xa4, 0xa0,
599
  0xcc, 0x9c, 0x62, 0x1e, 0xd6, 0xd0, 0x30, 0x37,
600
  0xb8, 0x98, 0x56, 0x1d, 0xaa, 0xd6, 0x5e, 0x73,
601
  0x12, 0xe4, 0x88, 0x82, 0x48, 0x64, 0x06, 0xd7,
602
  0x2a, 0x31, 0x50, 0x7b, 0x10, 0x17, 0xb8, 0x4c,
603
  0x5a, 0x8d, 0xf1, 0xfc, 0xf1, 0x33, 0x3b, 0x98,
604
  0x42, 0x18, 0x5b, 0x35, 0x78, 0xca, 0x8e, 0x41,
605
  0x52, 0xae, 0x6d, 0xe1, 0xa2, 0x9d, 0x5b, 0xbd,
606
  0xf3, 0x5f, 0x49, 0xc1, 0x27, 0x06, 0xc1, 0xaf,
607
  0xc0, 0xa3, 0x9d, 0xf3, 0x1c, 0x8e, 0x90, 0x8a,
608
  0xb0, 0x69, 0xb0, 0xc5, 0x11, 0x0c, 0x91, 0x14,
609
  0x1f, 0x5e, 0x10, 0xe1, 0x1d, 0x14, 0x30, 0x54,
610
  0x1e, 0x17, 0x3d, 0x31, 0x7b, 0xbf, 0x2f, 0x9d,
611
  0x6d, 0x63, 0x32, 0xf0, 0x9d, 0x9f, 0x95, 0x3d,
612
  0x0b, 0xd2, 0x4d, 0x10, 0xe2, 0x3f, 0x67, 0x69,
613
  0x43, 0x9a, 0x4a, 0x2c, 0x54, 0x71, 0xa8, 0xa0,
614
  0x9e, 0x9f, 0x10, 0xaf, 0x1b, 0xce, 0x99, 0xe3,
615
  0x25, 0x32, 0x10, 0x54, 0x80, 0xfe, 0xda, 0x57,
616
  0xd0, 0xb2, 0x92, 0x7f, 0xbb, 0x5f, 0xe7, 0x4d,
617
  0x1b, 0x3d, 0x46, 0x4d, 0xe4, 0x4c, 0xd6, 0xaf,
618
  0x1a, 0x32, 0x12, 0x40, 0xb8, 0x84, 0x8e, 0xe4,
619
  0x80, 0xce, 0x7e, 0xc1, 0x13, 0x8b, 0xb0, 0xb7,
620
  0x6f, 0x24, 0xba, 0x85, 0x50, 0x83, 0xc3, 0xcf,
621
  0x19, 0xb3, 0xf0, 0xc7, 0xee, 0x68, 0xbe, 0x9e,
622
  0x6d, 0xb9, 0xfb, 0xd5, 0x29, 0xce, 0x82, 0xcd,
623
  0x69, 0x16, 0x68, 0x6b, 0x6a, 0xf4, 0x02, 0x32,
624
  0xce, 0x60, 0x37, 0x0c, 0xb9, 0x38, 0x92, 0x9c,
625
  0x42, 0xa9, 0x0b, 0x53, 0x96, 0xfe, 0x39, 0xc1,
626
  0x24, 0x65, 0x9b, 0xcd, 0xe7, 0x8d, 0x36, 0x07,
627
  0x9f, 0x1d, 0x35, 0x8e, 0xdc, 0x4c, 0xb5, 0x68,
628
  0xc5, 0xfd, 0x44, 0x19, 0xf2, 0x6c, 0x59, 0x1c,
629
  0xb1, 0x0b, 0x35, 0x48, 0x86, 0x1a, 0x05, 0x22,
630
  0x03, 0x0c, 0x0c, 0xa2, 0x92, 0x90, 0x35, 0xfb,
631
  0x37, 0x94, 0xc7, 0x15, 0x84, 0xae, 0xe8, 0x05,
632
  0xa0, 0xf7, 0x30, 0x11, 0x5c, 0xe4, 0x5d, 0x3e,
633
  0x12, 0x54, 0x80, 0x54, 0x6b, 0x09, 0x8c, 0xce,
634
  0x80, 0x5e, 0xa7, 0xc8, 0x6a, 0x0c, 0x56, 0xe1,
635
  0x18, 0x7d, 0xc9, 0x39, 0xc1, 0xef, 0xe3, 0x25,
636
  0xa0, 0x8b, 0x2f, 0x60, 0x3a, 0x43, 0x39, 0xa6,
637
  0x28, 0x28, 0x7b, 0x4c, 0x77, 0xd4, 0x49, 0x61,
638
  0x46, 0xe9, 0x1b, 0x45, 0xd6, 0xb1, 0x56, 0xe1,
639
  0x7d, 0x34, 0xcd, 0x06, 0xb6, 0x67, 0x8d, 0x7d,
640
  0x7a, 0xe2, 0xbe, 0x68, 0x35, 0xa6, 0x78, 0xe5,
641
  0x47, 0x48, 0xb7, 0xc7, 0xde, 0xcd, 0xc9, 0x05,
642
  0xb4, 0xe7, 0x50, 0x48, 0xe1, 0x4b, 0xfe, 0x76,
643
  0x77, 0xc6, 0xf7, 0x5f, 0xcb, 0xc2, 0xa8, 0xd7,
644
  0xd6, 0x8a, 0xe5, 0x49, 0xd9, 0xca, 0x45, 0xf4,
645
  0xda, 0xcd, 0x33, 0xd1, 0x59, 0x2d, 0x9e, 0xc1,
646
  0x5c, 0xe6, 0x01, 0x18, 0xb8, 0xf0, 0x5e, 0xb1,
647
  0x69, 0x95, 0x2f, 0x02, 0x2a, 0xe7, 0x4a, 0xd7,
648
  0xd1, 0xc3, 0xd5, 0x6f, 0x15, 0xc8, 0xdc, 0x29,
649
  0xde, 0xb9, 0x3f, 0x8b, 0xa6, 0xbc, 0xdd, 0x25,
650
  0x84, 0x35, 0x3c, 0x90, 0x2d, 0xc2, 0x1e, 0x98,
651
  0x8a, 0x50, 0x09, 0x77, 0x42, 0xe9, 0x35, 0x8a,
652
  0x7c, 0x97, 0xbf, 0xe8, 0xbf, 0x56, 0xd0, 0x8b,
653
  0x65, 0xd3, 0xaf, 0x1e, 0x05, 0x94, 0xfa, 0xac,
654
  0xa8, 0x2b, 0x28, 0xcb, 0x37, 0x3e, 0xe8, 0xbb,
655
  0x66, 0x3a, 0xed, 0xb2, 0x48, 0x10, 0x0f, 0x3a,
656
  0x5a, 0xc5, 0xdb, 0x26, 0x0e, 0xaa, 0x5e, 0x69,
657
  0x15, 0xd6, 0x81, 0xae, 0xbd, 0xe6, 0x03, 0xf1,
658
  0xf6, 0x37, 0xc8, 0xde, 0x70, 0x1f, 0x64, 0xb9,
659
  0x5e, 0xbf, 0x2e, 0x4f, 0xb1, 0xea, 0xa0, 0x17,
660
  0xe6, 0x7c, 0xf9, 0x2f, 0x1e, 0xd8, 0x58, 0xde,
661
  0xa7, 0xf0, 0x46, 0x52, 0x95, 0xdf, 0xa4, 0x96,
662
  0xd0, 0xc4, 0x97, 0x2b, 0x95, 0xcd, 0x5e, 0x40,
663
  0x23, 0x5c, 0x10, 0xee, 0xba, 0x72, 0x9b, 0xcf,
664
  0x0b, 0xe8, 0x18, 0x3a, 0x70, 0xd2, 0x5e, 0x07,
665
  0x68, 0x93, 0xef, 0x4a, 0x5b, 0x8d, 0x72, 0x41,
666
  0x4e, 0xea, 0x33, 0x6a, 0x0a, 0x5e, 0xfb, 0x02,
667
  0x3f, 0xd4, 0xed, 0x5b, 0xe0, 0x42, 0x84, 0xd4,
668
  0xaa, 0x85, 0xdc, 0x5b, 0x67, 0xee, 0x71, 0x67,
669
  0xba, 0x8e, 0xd2, 0xbe, 0x61, 0xdf, 0x5a, 0x26,
670
  0xb9, 0xf0, 0x77, 0x81, 0x53, 0x24, 0x16, 0xcb,
671
  0x8c, 0xb8, 0x06, 0x6e, 0x68, 0xda, 0xc8, 0x2d,
672
  0x17, 0x54, 0xdb, 0x46, 0xcb, 0xfd, 0x1f, 0x3d,
673
  0x94, 0x81, 0x09, 0x4b, 0xfa, 0xb1, 0x46, 0xd9,
674
  0x11, 0xa3, 0xb7, 0x31, 0x9c, 0xd2, 0x38, 0xd6,
675
  0xba, 0x3d, 0xa3, 0x74, 0xd8, 0xf1, 0x24, 0xe8,
676
  0x9c, 0xcb, 0x1d, 0xf9, 0x4a, 0xf7, 0xc8, 0x4b,
677
  0xfe, 0x97, 0x7c, 0xa1, 0x02, 0xeb, 0x40, 0xc3,
678
  0x89, 0x71, 0x01, 0xcd, 0x33, 0x2a, 0xc2, 0x82,
679
  0xce, 0x62, 0x8d, 0x53, 0x7c, 0xdf, 0xce, 0xd7,
680
  0xf5, 0xa8, 0x4f, 0xf2, 0xf2, 0x2e, 0xc1, 0xeb,
681
  0x97, 0x99, 0x37, 0x3c, 0x53, 0xa6, 0xb4, 0x46,
682
  0x05, 0x64, 0x92, 0x87, 0x08, 0x3c, 0x23, 0x4b,
683
  0x9d, 0x67, 0x18, 0xf9, 0xe2, 0x0b, 0x1c, 0x39,
684
  0xd3, 0x87, 0x70, 0xc0, 0xb9, 0x1e, 0x52, 0x0a,
685
  0x0f, 0x48, 0xe2, 0xe7, 0x51, 0x72, 0x94, 0xf7,
686
  0xa3, 0xdc, 0xe5, 0x66, 0x33, 0x39, 0x54, 0x06,
687
  0x55, 0x93, 0x30, 0xf9, 0x5e, 0x76, 0x8f, 0xe0,
688
  0x59, 0x4d, 0x0d, 0xa7, 0xf5, 0xbe, 0xdb, 0x20,
689
  0xad, 0x0d, 0x76, 0x88, 0x5f, 0x9c, 0x7c, 0x75,
690
  0x2f, 0x2a, 0x0b, 0x79, 0x6e, 0xd3, 0xe2, 0x66,
691
  0xf5, 0x4a, 0x2d, 0x87, 0x87, 0x49, 0x84, 0x17,
692
  0xa2, 0x62, 0x4c, 0xbb, 0xe4, 0x6e, 0x98, 0x10,
693
  0xc9, 0xfb, 0x8a, 0x04, 0x68, 0x8d, 0x22, 0x66,
694
  0xad, 0xea, 0x2a, 0xc9, 0x97, 0x2d, 0x3c, 0xbc,
695
  0xd0, 0x77, 0x5f, 0xe6, 0xb8, 0x7f, 0xe6, 0xf6,
696
  0x39, 0xbf, 0x56, 0x0e, 0x26, 0x6d, 0xc5, 0x3e,
697
  0x53, 0x19, 0xd6, 0xb4, 0x57, 0x36, 0xa3, 0xc6,
698
  0xd3, 0x3d, 0x66, 0x79, 0x30, 0x5c, 0x14, 0x0c,
699
  0x0f, 0x3e, 0x96, 0xae, 0x90, 0x97, 0xab, 0x0d,
700
  0x9f, 0xc3, 0xe7, 0x66, 0x3e, 0xe0, 0x31, 0x43,
701
  0x4b, 0x01, 0xb3, 0x0e, 0x9e, 0x8c, 0x82, 0x4a,
702
  0x8c, 0xc7, 0x79, 0x85, 0xdf, 0x75, 0x0d, 0xb4,
703
  0x2b, 0x03, 0x14, 0xef, 0x72, 0x58, 0xfd, 0x64,
704
  0xc8, 0xe3, 0x0d, 0x9a, 0x14, 0x6f, 0x76, 0xf9,
705
  0x46, 0xd1, 0xd2, 0x81, 0xb3, 0x16, 0x6e, 0xc7,
706
  0x76, 0x82, 0xce, 0xf4, 0xee, 0x33, 0x00, 0xe6,
707
  0x77, 0xc4, 0xad, 0x4f, 0x06, 0xa7, 0x48, 0x80,
708
  0x9e, 0x21, 0x66, 0xca, 0x75, 0x69, 0x57, 0xcb,
709
  0xf0, 0x67, 0x6a, 0xaa, 0x8f, 0x88, 0x14, 0xbd,
710
  0x65, 0x62, 0xe2, 0xad, 0xcc, 0x22, 0x88, 0x7b,
711
  0x94, 0xbd, 0x0e, 0xcd, 0xb6, 0x69, 0xa2, 0xcb,
712
  0x7d, 0x57, 0x5c, 0xb4, 0x92, 0x80, 0x13, 0x99,
713
  0x84, 0xf3, 0x79, 0x0a, 0x2d, 0x70, 0xa4, 0xe0,
714
  0xde, 0xc6, 0x32, 0xb0, 0x8a, 0x62, 0xb5, 0xcf,
715
  0xfa, 0x5e, 0x5a, 0x92, 0x32, 0x7d, 0x34, 0x07,
716
  0xb5, 0x52, 0x3a, 0xb5, 0x7d, 0x0f, 0xa1, 0xba,
717
  0x56, 0xd0, 0x07, 0x76, 0x11, 0xf2, 0xc3, 0x33,
718
  0x9d, 0xbd, 0x12, 0x35, 0x5e, 0xf7, 0x05, 0x88,
719
  0x76, 0x94, 0xa6, 0xbf, 0xed, 0xb8, 0xa4, 0xa2,
720
  0x0c, 0xbe, 0x0f, 0x6a, 0xaf, 0xf3, 0x1b, 0x33,
721
  0x4a, 0xb7, 0x68, 0x3f, 0xbe, 0x95, 0x13, 0x97,
722
  0x0f, 0x15, 0x17, 0x1b, 0x23, 0xaa, 0x08, 0x78,
723
  0xa6, 0x5b, 0x08, 0xa2, 0x9d, 0x03, 0xa8, 0xa7,
724
  0x39, 0xdc, 0xbc, 0x9a, 0x85, 0xf5, 0xe5, 0x55,
725
  0x59, 0x3c, 0xef, 0xf9, 0x3f, 0x22, 0x8e, 0xf8,
726
  0xd8, 0x3e, 0x02, 0x0b, 0xd8, 0x78, 0x4b, 0x15,
727
  0x7f, 0xaa, 0x2c, 0xff, 0xbe, 0x77, 0x33, 0xc7,
728
  0x6a, 0x12, 0xaa, 0xa4, 0xbe, 0xc0, 0x3b, 0xcb,
729
  0x13, 0x9d, 0x9c, 0x5a, 0x9f, 0x8a, 0x57, 0x36,
730
  0x4f, 0x02, 0x5a, 0xf8, 0x1d, 0x97, 0x77, 0x43,
731
  0xc8, 0xa5, 0xb7, 0x9b, 0x10, 0x98, 0xfd, 0x58,
732
  0xbf, 0x42, 0xf6, 0xbf, 0xff, 0x6c, 0x40, 0x18,
733
  0x18, 0xdf, 0xac, 0x57, 0x71, 0xea, 0xcc, 0x8e,
734
  0xfd, 0xfe, 0x10, 0xfb, 0xb9, 0xfe, 0xbc, 0x9a,
735
  0x9c, 0x27, 0xe4, 0x10, 0x15, 0x94, 0x41, 0xa1,
736
  0xcc, 0xf6, 0x25, 0x49, 0x4f, 0x96, 0xc1, 0x8c,
737
  0x9e, 0x3e, 0x18, 0x29, 0x49, 0x92, 0xe7, 0xfe,
738
  0x22, 0xff, 0xed, 0x02, 0x16, 0x90, 0xef, 0xac,
739
  0xec, 0x95, 0x1d, 0x5b, 0x94, 0x9c, 0xf6, 0x7c,
740
  0x1b, 0x5a, 0x9d, 0xb0, 0x9b, 0x05, 0x36, 0xbf,
741
  0xef, 0xec, 0x63, 0x35, 0x40, 0x24, 0x45, 0x40,
742
  0x30, 0x1a, 0x9b, 0x90, 0xc3, 0xc2, 0xf7, 0x37,
743
  0xfb, 0x08, 0x8e, 0x48, 0x19, 0x48, 0xed, 0xa8,
744
  0xa8, 0x04, 0x6f, 0xd0, 0x33, 0xe9, 0xb8, 0x8d,
745
  0xe7, 0x1e, 0x5c, 0x47, 0x74, 0xc0, 0x66, 0x30,
746
  0x4e, 0xa7, 0x86, 0x73, 0xf1, 0xe5, 0x78, 0xa6,
747
  0xe0, 0xc1, 0xda, 0x13, 0x72, 0x07, 0x85, 0x34,
748
  0x63, 0x95, 0x49, 0x30, 0x4b, 0x9d, 0x03, 0xf1,
749
  0x7a, 0x6b, 0x91, 0xa2, 0x85, 0x41, 0xf9, 0x4a,
750
  0xd6, 0xff, 0xff, 0x86, 0xf7, 0xf0, 0xce, 0xb9,
751
  0x07, 0xf1, 0x88, 0x04, 0x33, 0xaa, 0xeb, 0x54,
752
  0xb2, 0x1c, 0x8e, 0x2e, 0x7b, 0x04, 0xa8, 0xcc,
753
  0x2c, 0x7a, 0xb3, 0xad, 0x1a, 0x89, 0x38, 0x89,
754
  0xd7, 0x11, 0x3a, 0x8c, 0xcf, 0xe3, 0xc5, 0xba,
755
  0xb0, 0xcc, 0xc4, 0xe3, 0x33, 0xf3, 0x18, 0xba,
756
  0xec, 0x56, 0xd9, 0x1c, 0x40, 0x70, 0x0d, 0x4e,
757
  0x97, 0x01, 0x23, 0xf3, 0x5a, 0xdc, 0xbf, 0x68,
758
  0x93, 0xc2, 0x1d, 0x8a, 0x96, 0xb7, 0xac, 0x18,
759
  0x6f, 0xf7, 0x84, 0x71, 0x0d, 0x3d, 0xf8, 0xba,
760
  0xdf, 0xb6, 0x89, 0x1d, 0x78, 0x19, 0xf2, 0x59,
761
  0xe9, 0x15, 0x55, 0x29, 0x73, 0x50, 0x59, 0x14,
762
  0x02, 0x21, 0x16, 0x8f, 0x0f, 0xdf, 0xa5, 0xf0,
763
};
764
765
static struct crc_test {
766
  uint32_t crc;   /* random starting crc */
767
  uint32_t start;   /* random offset in buf */
768
  uint32_t length;  /* random length of test */
769
  uint32_t crc32c_le; /* expected crc32c_le result */
770
  uint32_t crc32_be;  /* expected crc32_be result */
771
} test[] = {
772
  {0xffffffff, 0x00000000, 0x00001000, 0x13934bef, 0xd8ddcdc3},
773
  {0xfe7328ea, 0x00000763, 0x00000717, 0xed2c0d70, 0xc863aef8},
774
  {0x4c40684e, 0x00000721, 0x0000011e, 0xd7f46ccc, 0x173a11c4},
775
  {0x6b487f90, 0x00000264, 0x000007bc, 0x759e9939, 0xd6307c56},
776
  {0x9f5810db, 0x00000afa, 0x00000255, 0x2685197f, 0x2e5c9201},
777
  {0xb15c4755, 0x00000d5b, 0x000002a4, 0xd8fadcb5, 0xf682c4be},
778
  {0x06518253, 0x00000ffb, 0x00000004, 0xabee2433, 0x3d8abdf9},
779
  {0xd9e71c55, 0x00000a2a, 0x00000259, 0x96682af2, 0x47b4d26c},
780
  {0x0c1ae843, 0x00000ce4, 0x0000031b, 0x7b637c43, 0x62b47e8b},
781
  {0xec3cd517, 0x000002ff, 0x00000566, 0x5d719a77, 0xff5bc5b7},
782
  {0x77828e95, 0x0000067f, 0x0000038f, 0x43ee5b6c, 0x1a0cfacd},
783
  {0xec87b4e3, 0x00000d1c, 0x000002e3, 0x2ddd2eee, 0x275118a7},
784
  {0x412158bb, 0x00000eee, 0x00000111, 0x67b38ba2, 0xa74ecff5},
785
  {0x2e52de3e, 0x00000c4a, 0x000003b5, 0xbcc5d61d, 0xbd800707},
786
  {0x6ddaae8b, 0x00000d99, 0x00000266, 0x8b535544, 0xecbde1a1},
787
  {0x049b6cb1, 0x000009c5, 0x000000b0, 0xfc22cabc, 0xfb78eb9f},
788
  {0x77d4b954, 0x0000028a, 0x000007fa, 0x71d00923, 0x8c116f85},
789
  {0x5e192355, 0x00000ac1, 0x000001fa, 0xb966b81a, 0x5aa17bbe},
790
  {0x7d80b71d, 0x00000213, 0x000001e0, 0x2bba371a, 0xb5906aa6},
791
  {0x01f6f1e4, 0x000001d6, 0x00000395, 0xb7e8a647, 0x3ad112b1},
792
  {0x1dfabb13, 0x00000e14, 0x000001eb, 0x53917fba, 0xbaee0339},
793
  {0xb00a4449, 0x00000bf6, 0x00000409, 0xedecb577, 0x6f3a3979},
794
  {0x7ecd3981, 0x0000083f, 0x0000016b, 0xefef62b9, 0xe3e52eed},
795
  {0xf8f330d2, 0x000004be, 0x00000757, 0x9357c9f3, 0x0835bc1b},
796
  {0x03c38af2, 0x00000d23, 0x000002dc, 0x360fa8c0, 0x2ca885e6},
797
  {0x687bb79b, 0x00000f3d, 0x000000c2, 0x448d3be2, 0x79be2f78},
798
  {0x6710f550, 0x000009e9, 0x00000603, 0xdbfd1998, 0x1d25f627},
799
  {0x873171d1, 0x00000787, 0x000004d5, 0xab7f1b62, 0xa76a5656},
800
  {0x373b1314, 0x00000f0f, 0x000000f0, 0x184098ab, 0xba273974},
801
  {0x90fad9cd, 0x00000ead, 0x00000152, 0x23ce52ff, 0xb7bc958c},
802
  {0x19676fe7, 0x0000007d, 0x0000070d, 0xf8a76f1e, 0xf882b644},
803
  {0x89facd45, 0x000005f3, 0x00000473, 0x4331a006, 0xe9dc1396},
804
  {0x6f173747, 0x00000fc3, 0x0000003c, 0xb012f08e, 0xc6b888ee},
805
  {0x4b44a106, 0x0000075a, 0x0000008b, 0xf6f7ac38, 0x60cd2b74},
806
  {0xb620ad06, 0x00000774, 0x0000017e, 0xd34558e6, 0x3a0a615b},
807
  {0x976f21e9, 0x000008d7, 0x0000034a, 0xe533aa3a, 0xa99e60be},
808
  {0x687628c0, 0x000006c5, 0x0000061b, 0x3a840b15, 0x9bfcaef2},
809
  {0xe24ac108, 0x00000cd0, 0x0000032f, 0x51010ae8, 0x20958672},
810
  {0x361c44a3, 0x00000304, 0x00000719, 0xfd7bd481, 0xd70ff2b2},
811
  {0xd93ff95e, 0x00000db7, 0x0000008e, 0xcfbbc304, 0xad716acd},
812
  {0xed752d12, 0x00000883, 0x00000091, 0x65a6c868, 0x95c71c7b},
813
  {0xb4ff4b54, 0x000003d3, 0x000001c1, 0xf82597e7, 0x44b7f99b},
814
  {0x111b520f, 0x00000708, 0x000000eb, 0xc3e109f3, 0x71bc01ee},
815
  {0x62c806f2, 0x00000ba3, 0x0000045c, 0x874d3a72, 0xc539b753},
816
  {0x40d97470, 0x000005e1, 0x0000058d, 0x87a9684f, 0xea6073a5},
817
  {0x4312179c, 0x00000056, 0x0000070e, 0x809a00f5, 0x209aea3b},
818
  {0x13d5f84c, 0x00000a2d, 0x00000104, 0xf3d27578, 0xe087a8b6},
819
  {0x1f302cb2, 0x00000151, 0x00000014, 0x1e162693, 0x95e4b90e},
820
  {0xe491db24, 0x00000600, 0x000006f6, 0x7ff09615, 0x77611523},
821
  {0xf9a98069, 0x000002ba, 0x000002ad, 0x01af7387, 0xea925faa},
822
  {0xe9c477ad, 0x0000015f, 0x00000778, 0x6facf9a0, 0x1130f736},
823
  {0x353f32b2, 0x0000087c, 0x00000783, 0x6cc964ea, 0x32459994},
824
  {0x78e1b24f, 0x00000650, 0x000006a8, 0xb3bb7c27, 0x5a632f78},
825
  {0x61aa400e, 0x00000049, 0x00000254, 0xb8cd1681, 0xdf2652d5},
826
  {0xb84b10b0, 0x00000f73, 0x0000008c, 0x406a6450, 0x3619d31b},
827
  {0x9fa99c9c, 0x00000a7c, 0x000004d7, 0xfb3d21b4, 0xea31c743},
828
  {0x3fc9ebe3, 0x00000cd9, 0x000000d6, 0x43803f9c, 0x1f76a809},
829
  {0x529879cd, 0x000002f2, 0x00000595, 0x78b4c6a6, 0x63b9b93f},
830
  {0x3a933019, 0x00000516, 0x00000266, 0xdcb45436, 0x8f99c98c},
831
  {0x887b4977, 0x00000227, 0x0000038d, 0xc5f7c3d9, 0xaf5e3091},
832
  {0x770745de, 0x000008c6, 0x00000739, 0xf69145e8, 0x53d0dce1},
833
  {0x28be3b47, 0x00000c46, 0x0000032b, 0x764c028f, 0x106d0905},
834
  {0x5013a050, 0x00000cf6, 0x00000309, 0xea8fe164, 0x62180b57},
835
  {0x2ec4c9ba, 0x000006e8, 0x0000078d, 0xa35557a9, 0xf44430a4},
836
  {0xa9f950c9, 0x00000d33, 0x000002cc, 0x41ea8618, 0x587b4eb3},
837
  {0x5b520229, 0x000007b2, 0x00000484, 0x44569f1f, 0x92406c32},
838
  {0xd8dcbbfc, 0x0000002f, 0x0000048c, 0xdb88ab8b, 0x13bfe70e},
839
  {0x25529792, 0x00000d1d, 0x000002e2, 0x20cda404, 0x19d3b4e4},
840
  {0x9f3f6d71, 0x00000238, 0x0000079a, 0x0720443e, 0x3c107021},
841
  {0x64121215, 0x000007ff, 0x0000038f, 0x6aacff2c, 0xb82fdc3e},
842
  {0xfb6cdde0, 0x00000ef8, 0x00000107, 0xbd43a0f1, 0xab0d3c1d},
843
  {0x221c9d6f, 0x000007b6, 0x0000014f, 0xb67f834b, 0x1371ad05},
844
  {0x030e1de4, 0x00000836, 0x000004b4, 0x0d67d26a, 0xe2e72df1},
845
  {0xb56fa6cf, 0x00000c07, 0x000003f8, 0x60601ac1, 0x039de73e},
846
  {0xb55c89f5, 0x0000098e, 0x000001d4, 0x2400efbe, 0xfe39a2bb},
847
  {0x5e90b6d5, 0x0000070b, 0x000003ea, 0x3bb5d6ea, 0xf0f794a0},
848
  {0x2a7045ae, 0x00000961, 0x00000633, 0xfca89e4b, 0xe66ce41c},
849
  {0x8b374ea9, 0x000006ba, 0x00000780, 0xbce036ed, 0x4cb28ef7},
850
  {0x8bd90bc9, 0x00000562, 0x00000369, 0xcb26a24b, 0x40236d1d},
851
  {0x5b1b1762, 0x000000fd, 0x0000051a, 0x33cdda07, 0xc32e420a},
852
  {0xa4153555, 0x0000058f, 0x000005c7, 0xbe50eeca, 0x83a67f35},
853
  {0x0be1f931, 0x00000651, 0x00000672, 0x95a25753, 0x88f1aac1},
854
  {0xb7e78618, 0x00000a7f, 0x000002bb, 0xe06bcc1c, 0x74274f66},
855
  {0x4a9bc41b, 0x00000e51, 0x000001ae, 0x709e8d2c, 0x54eff534},
856
  {0xfc359d13, 0x00000440, 0x000002f8, 0x0a58451f, 0x55e9363f},
857
  {0x5aa48619, 0x000006d1, 0x00000284, 0x928ead83, 0x31041c06},
858
  {0xa609afa8, 0x0000053e, 0x00000272, 0xb048c141, 0x4704efba},
859
  {0x3f108afb, 0x00000949, 0x00000150, 0x9a6bb5bc, 0x4e4430c8},
860
  {0x79bec2d3, 0x000008ed, 0x00000712, 0x32692d57, 0x11d52a7b},
861
  {0x9429e067, 0x00000bc3, 0x0000043c, 0x5295ceff, 0x04640f4d},
862
  {0xae58b96a, 0x0000082d, 0x000007d2, 0xc2a681ba, 0xf7ca4a2c},
863
  {0x95df24be, 0x00000985, 0x000004c1, 0x3a287765, 0x2c4af003},
864
  {0x5e94976f, 0x00000596, 0x000004ed, 0xff00c489, 0x5ae11687},
865
  {0xf5e5f1de, 0x00000d31, 0x000002ce, 0x35f28e91, 0x30d47957},
866
  {0xa2c219cf, 0x00000a3c, 0x00000374, 0x707d21eb, 0x2a14a255},
867
  {0xf21b6ceb, 0x00000919, 0x00000135, 0x0847fb8b, 0xcb8d3b93},
868
  {0xaa988728, 0x00000787, 0x00000771, 0x885aeaa4, 0x6531b509},
869
  {0xaa5dfaac, 0x000003e5, 0x0000051b, 0x52c48ab7, 0xe43cc5e9},
870
  {0x0a053968, 0x00000d2a, 0x000002d5, 0x7a90256d, 0x8004765c},
871
  {0x1421dc20, 0x00000eef, 0x00000110, 0x97d6da24, 0x1378f6ff},
872
  {0xb47c2166, 0x00000a6a, 0x00000209, 0xcfd6cc52, 0x676e14a5},
873
  {0x77dd1955, 0x000000de, 0x00000266, 0xba74bcaa, 0xc71b429c},
874
  {0x68a03cc2, 0x0000082f, 0x000007b0, 0x752bd5d8, 0x19ed14aa},
875
  {0x0226b0a3, 0x00000a5f, 0x000005a0, 0x82de4970, 0xf654d3ed},
876
  {0x637bf3b1, 0x00000d93, 0x0000026c, 0x5c7115cb, 0x3cccb57e},
877
  {0x3b120edf, 0x00000c13, 0x000003ec, 0x80d7d20f, 0x92132798},
878
  {0xe2456780, 0x000002eb, 0x00000641, 0xc0a5d289, 0x6160c87a},
879
  {0x9b2e7125, 0x00000c0c, 0x000003f3, 0xcc15f57e, 0x6f00f637},
880
  {0x153033ef, 0x00000787, 0x000006b6, 0x3cde443b, 0xb46caa6e},
881
  {0x18458b3f, 0x0000066c, 0x00000561, 0x9a2bd8c6, 0xb6c29121},
882
  {0x4ff9d4b9, 0x00000c8f, 0x0000033a, 0xd0ee6d6d, 0xc81cf380},
883
  {0xdf84b5d9, 0x00000802, 0x0000029a, 0xdab0d74a, 0xb2464559},
884
  {0x81ee15df, 0x000003ce, 0x00000725, 0x9942e2de, 0x4ccf571b},
885
  {0x5c768e04, 0x00000afd, 0x00000160, 0x36110831, 0xae0b305a},
886
  {0xe5e18094, 0x00000b4b, 0x000000a0, 0xffa3e4a7, 0x6c8a4f09},
887
  {0xed7263b6, 0x00000d0d, 0x000002f2, 0xb0006a35, 0x7e04af8c},
888
  {0x5bfde7d7, 0x000006fb, 0x00000554, 0xa4193b76, 0xb3a91d12},
889
  {0x67f4a743, 0x00000b85, 0x0000047a, 0xf05c8d8f, 0xfb472fdf},
890
  {0xf13bdf22, 0x00000ff7, 0x00000008, 0x816351eb, 0xf347f235},
891
  {0x08ecc608, 0x00000d5d, 0x00000098, 0x90492772, 0x0b7f1521},
892
  {0x296f52ba, 0x000004f9, 0x00000788, 0x5e5a4896, 0x1cc67088},
893
  {0xbe4624c2, 0x00000427, 0x000004ef, 0xcd267b94, 0x550caefd},
894
  {0x906f7c7c, 0x00000a05, 0x0000003f, 0x03fcfc33, 0x9ed82a02},
895
  {0x8f7b323e, 0x00000458, 0x000004c7, 0xcd4969c8, 0x633c38a8},
896
  {0x88d6593d, 0x00000597, 0x000005b5, 0xf199cd3b, 0x0491452f},
897
  {0x978a7768, 0x00000268, 0x000001d3, 0xb28c95bd, 0x1a42fe61},
898
  {0x857a621e, 0x000007a7, 0x000003a8, 0xf4bf84ab, 0xcd0694c6},
899
  {0xb0e121ef, 0x000005be, 0x00000644, 0x28747c14, 0xf0510c72},
900
  {0, 0, 0, 0, 0},
901
};
902
903
static int test_crc32c(void)
904
{
905
  struct crc_test *t = test;
906
  int failures = 0;
907
908
  while (t->length) {
909
    uint32_t be, le;
910
    le = ext2fs_crc32c_le(t->crc, test_buf + t->start, t->length);
911
    be = ext2fs_crc32_be(t->crc, test_buf + t->start, t->length);
912
    if (le != t->crc32c_le) {
913
      printf("Test %d LE fails, %x != %x\n",
914
             (int) (t - test), le, t->crc32c_le);
915
      failures++;
916
    }
917
    if (be != t->crc32_be) {
918
      printf("Test %d BE fails, %x != %x\n",
919
             (int) (t - test), be, t->crc32_be);
920
      failures++;
921
    }
922
    t++;
923
  }
924
925
  return failures;
926
}
927
928
int main(int argc, char *argv[])
929
{
930
  int ret;
931
932
  ret = test_crc32c();
933
  if (!ret)
934
    printf("No failures.\n");
935
936
  return ret;
937
}
938
#endif /* UNITTEST */