2 * Aug 8, 2011 Bob Pearson with help from Joakim Tjernlund and George Spelvin
3 * cleaned up code to current version of sparse and added the slicing-by-8
4 * algorithm to the closely similar existing slicing-by-4 algorithm.
6 * Oct 15, 2000 Matt Domsch <Matt_Domsch@dell.com>
7 * Nicer crc32 functions/docs submitted by linux@horizon.com. Thanks!
8 * Code was from the public domain, copyright abandoned. Code was
9 * subsequently included in the kernel, thus was re-licensed under the
12 * Oct 12, 2000 Matt Domsch <Matt_Domsch@dell.com>
13 * Same crc32 function was used in 5 other places in the kernel.
14 * I made one version, and deleted the others.
15 * There are various incantations of crc32(). Some use a seed of 0 or ~0.
16 * Some xor at the end with ~0. The generic crc32() function takes
17 * seed as an argument, and doesn't xor at the end. Then individual
18 * users can do whatever they need.
19 * drivers/net/smc9194.c uses seed ~0, doesn't xor with ~0.
20 * fs/jffs2 uses seed 0, doesn't xor with ~0.
21 * fs/partitions/efi.c uses seed ~0, xor's with ~0.
23 * This source code is licensed under the GNU General Public License,
24 * Version 2. See the file COPYING for more details.
27 /* see: Documentation/crc32.txt for a description of algorithms */
29 #include <linux/crc32.h>
30 #include <linux/module.h>
31 #include <linux/types.h>
32 #include "crc32defs.h"
35 # define tole(x) ((__force u32) __constant_cpu_to_le32(x))
41 # define tobe(x) ((__force u32) __constant_cpu_to_be32(x))
46 #include "crc32table.h"
48 MODULE_AUTHOR("Matt Domsch <Matt_Domsch@dell.com>");
49 MODULE_DESCRIPTION("Various CRC32 calculations");
50 MODULE_LICENSE("GPL");
52 #if CRC_LE_BITS > 8 || CRC_BE_BITS > 8
54 /* implements slicing-by-4 or slicing-by-8 algorithm */
56 crc32_body(u32 crc, unsigned char const *buf, size_t len, const u32 (*tab)[256])
58 # ifdef __LITTLE_ENDIAN
59 # define DO_CRC(x) crc = t0[(crc ^ (x)) & 255] ^ (crc >> 8)
60 # define DO_CRC4 (t3[(q) & 255] ^ t2[(q >> 8) & 255] ^ \
61 t1[(q >> 16) & 255] ^ t0[(q >> 24) & 255])
62 # define DO_CRC8 (t7[(q) & 255] ^ t6[(q >> 8) & 255] ^ \
63 t5[(q >> 16) & 255] ^ t4[(q >> 24) & 255])
65 # define DO_CRC(x) crc = t0[((crc >> 24) ^ (x)) & 255] ^ (crc << 8)
66 # define DO_CRC4 (t0[(q) & 255] ^ t1[(q >> 8) & 255] ^ \
67 t2[(q >> 16) & 255] ^ t3[(q >> 24) & 255])
68 # define DO_CRC8 (t4[(q) & 255] ^ t5[(q >> 8) & 255] ^ \
69 t6[(q >> 16) & 255] ^ t7[(q >> 24) & 255])
76 const u32 *t0=tab[0], *t1=tab[1], *t2=tab[2], *t3=tab[3];
77 # if CRC_LE_BITS != 32
78 const u32 *t4 = tab[4], *t5 = tab[5], *t6 = tab[6], *t7 = tab[7];
83 if (unlikely((long)buf & 3 && len)) {
86 } while ((--len) && ((long)buf)&3);
89 # if CRC_LE_BITS == 32
100 for (i = 0; i < len; i++) {
102 for (--b; len; --len) {
104 q = crc ^ *++b; /* use pre increment for speed */
105 # if CRC_LE_BITS == 32
114 /* And the last few bytes */
116 u8 *p = (u8 *)(b + 1) - 1;
118 for (i = 0; i < len; i++)
119 DO_CRC(*++p); /* use pre increment for speed */
122 DO_CRC(*++p); /* use pre increment for speed */
134 * crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32
135 * @crc: seed value for computation. ~0 for Ethernet, sometimes 0 for
136 * other uses, or the previous crc32 value if computing incrementally.
137 * @p: pointer to buffer over which CRC is run
138 * @len: length of buffer @p
140 static inline u32 __pure crc32_le_generic(u32 crc, unsigned char const *p,
141 size_t len, const u32 (*tab)[256],
148 for (i = 0; i < 8; i++)
149 crc = (crc >> 1) ^ ((crc & 1) ? polynomial : 0);
151 # elif CRC_LE_BITS == 2
154 crc = (crc >> 2) ^ tab[0][crc & 3];
155 crc = (crc >> 2) ^ tab[0][crc & 3];
156 crc = (crc >> 2) ^ tab[0][crc & 3];
157 crc = (crc >> 2) ^ tab[0][crc & 3];
159 # elif CRC_LE_BITS == 4
162 crc = (crc >> 4) ^ tab[0][crc & 15];
163 crc = (crc >> 4) ^ tab[0][crc & 15];
165 # elif CRC_LE_BITS == 8
166 /* aka Sarwate algorithm */
169 crc = (crc >> 8) ^ tab[0][crc & 255];
172 crc = (__force u32) __cpu_to_le32(crc);
173 crc = crc32_body(crc, p, len, tab);
174 crc = __le32_to_cpu((__force __le32)crc);
180 u32 __pure crc32_le(u32 crc, unsigned char const *p, size_t len)
182 return crc32_le_generic(crc, p, len, NULL, CRCPOLY_LE);
184 u32 __pure __crc32c_le(u32 crc, unsigned char const *p, size_t len)
186 return crc32_le_generic(crc, p, len, NULL, CRC32C_POLY_LE);
189 u32 __pure crc32_le(u32 crc, unsigned char const *p, size_t len)
191 return crc32_le_generic(crc, p, len,
192 (const u32 (*)[256])crc32table_le, CRCPOLY_LE);
194 u32 __pure __crc32c_le(u32 crc, unsigned char const *p, size_t len)
196 return crc32_le_generic(crc, p, len,
197 (const u32 (*)[256])crc32ctable_le, CRC32C_POLY_LE);
200 EXPORT_SYMBOL(crc32_le);
201 EXPORT_SYMBOL(__crc32c_le);
204 * crc32_be() - Calculate bitwise big-endian Ethernet AUTODIN II CRC32
205 * @crc: seed value for computation. ~0 for Ethernet, sometimes 0 for
206 * other uses, or the previous crc32 value if computing incrementally.
207 * @p: pointer to buffer over which CRC is run
208 * @len: length of buffer @p
210 static inline u32 __pure crc32_be_generic(u32 crc, unsigned char const *p,
211 size_t len, const u32 (*tab)[256],
218 for (i = 0; i < 8; i++)
220 (crc << 1) ^ ((crc & 0x80000000) ? polynomial :
223 # elif CRC_BE_BITS == 2
226 crc = (crc << 2) ^ tab[0][crc >> 30];
227 crc = (crc << 2) ^ tab[0][crc >> 30];
228 crc = (crc << 2) ^ tab[0][crc >> 30];
229 crc = (crc << 2) ^ tab[0][crc >> 30];
231 # elif CRC_BE_BITS == 4
234 crc = (crc << 4) ^ tab[0][crc >> 28];
235 crc = (crc << 4) ^ tab[0][crc >> 28];
237 # elif CRC_BE_BITS == 8
240 crc = (crc << 8) ^ tab[0][crc >> 24];
243 crc = (__force u32) __cpu_to_be32(crc);
244 crc = crc32_body(crc, p, len, tab);
245 crc = __be32_to_cpu((__force __be32)crc);
251 u32 __pure crc32_be(u32 crc, unsigned char const *p, size_t len)
253 return crc32_be_generic(crc, p, len, NULL, CRCPOLY_BE);
256 u32 __pure crc32_be(u32 crc, unsigned char const *p, size_t len)
258 return crc32_be_generic(crc, p, len,
259 (const u32 (*)[256])crc32table_be, CRCPOLY_BE);
262 EXPORT_SYMBOL(crc32_be);
264 #ifdef CONFIG_CRC32_SELFTEST
266 /* 4096 random bytes */
267 static u8 __attribute__((__aligned__(8))) test_buf[] =
269 0x5b, 0x85, 0x21, 0xcb, 0x09, 0x68, 0x7d, 0x30,
270 0xc7, 0x69, 0xd7, 0x30, 0x92, 0xde, 0x59, 0xe4,
271 0xc9, 0x6e, 0x8b, 0xdb, 0x98, 0x6b, 0xaa, 0x60,
272 0xa8, 0xb5, 0xbc, 0x6c, 0xa9, 0xb1, 0x5b, 0x2c,
273 0xea, 0xb4, 0x92, 0x6a, 0x3f, 0x79, 0x91, 0xe4,
274 0xe9, 0x70, 0x51, 0x8c, 0x7f, 0x95, 0x6f, 0x1a,
275 0x56, 0xa1, 0x5c, 0x27, 0x03, 0x67, 0x9f, 0x3a,
276 0xe2, 0x31, 0x11, 0x29, 0x6b, 0x98, 0xfc, 0xc4,
277 0x53, 0x24, 0xc5, 0x8b, 0xce, 0x47, 0xb2, 0xb9,
278 0x32, 0xcb, 0xc1, 0xd0, 0x03, 0x57, 0x4e, 0xd4,
279 0xe9, 0x3c, 0xa1, 0x63, 0xcf, 0x12, 0x0e, 0xca,
280 0xe1, 0x13, 0xd1, 0x93, 0xa6, 0x88, 0x5c, 0x61,
281 0x5b, 0xbb, 0xf0, 0x19, 0x46, 0xb4, 0xcf, 0x9e,
282 0xb6, 0x6b, 0x4c, 0x3a, 0xcf, 0x60, 0xf9, 0x7a,
283 0x8d, 0x07, 0x63, 0xdb, 0x40, 0xe9, 0x0b, 0x6f,
284 0xad, 0x97, 0xf1, 0xed, 0xd0, 0x1e, 0x26, 0xfd,
285 0xbf, 0xb7, 0xc8, 0x04, 0x94, 0xf8, 0x8b, 0x8c,
286 0xf1, 0xab, 0x7a, 0xd4, 0xdd, 0xf3, 0xe8, 0x88,
287 0xc3, 0xed, 0x17, 0x8a, 0x9b, 0x40, 0x0d, 0x53,
288 0x62, 0x12, 0x03, 0x5f, 0x1b, 0x35, 0x32, 0x1f,
289 0xb4, 0x7b, 0x93, 0x78, 0x0d, 0xdb, 0xce, 0xa4,
290 0xc0, 0x47, 0xd5, 0xbf, 0x68, 0xe8, 0x5d, 0x74,
291 0x8f, 0x8e, 0x75, 0x1c, 0xb2, 0x4f, 0x9a, 0x60,
292 0xd1, 0xbe, 0x10, 0xf4, 0x5c, 0xa1, 0x53, 0x09,
293 0xa5, 0xe0, 0x09, 0x54, 0x85, 0x5c, 0xdc, 0x07,
294 0xe7, 0x21, 0x69, 0x7b, 0x8a, 0xfd, 0x90, 0xf1,
295 0x22, 0xd0, 0xb4, 0x36, 0x28, 0xe6, 0xb8, 0x0f,
296 0x39, 0xde, 0xc8, 0xf3, 0x86, 0x60, 0x34, 0xd2,
297 0x5e, 0xdf, 0xfd, 0xcf, 0x0f, 0xa9, 0x65, 0xf0,
298 0xd5, 0x4d, 0x96, 0x40, 0xe3, 0xdf, 0x3f, 0x95,
299 0x5a, 0x39, 0x19, 0x93, 0xf4, 0x75, 0xce, 0x22,
300 0x00, 0x1c, 0x93, 0xe2, 0x03, 0x66, 0xf4, 0x93,
301 0x73, 0x86, 0x81, 0x8e, 0x29, 0x44, 0x48, 0x86,
302 0x61, 0x7c, 0x48, 0xa3, 0x43, 0xd2, 0x9c, 0x8d,
303 0xd4, 0x95, 0xdd, 0xe1, 0x22, 0x89, 0x3a, 0x40,
304 0x4c, 0x1b, 0x8a, 0x04, 0xa8, 0x09, 0x69, 0x8b,
305 0xea, 0xc6, 0x55, 0x8e, 0x57, 0xe6, 0x64, 0x35,
306 0xf0, 0xc7, 0x16, 0x9f, 0x5d, 0x5e, 0x86, 0x40,
307 0x46, 0xbb, 0xe5, 0x45, 0x88, 0xfe, 0xc9, 0x63,
308 0x15, 0xfb, 0xf5, 0xbd, 0x71, 0x61, 0xeb, 0x7b,
309 0x78, 0x70, 0x07, 0x31, 0x03, 0x9f, 0xb2, 0xc8,
310 0xa7, 0xab, 0x47, 0xfd, 0xdf, 0xa0, 0x78, 0x72,
311 0xa4, 0x2a, 0xe4, 0xb6, 0xba, 0xc0, 0x1e, 0x86,
312 0x71, 0xe6, 0x3d, 0x18, 0x37, 0x70, 0xe6, 0xff,
313 0xe0, 0xbc, 0x0b, 0x22, 0xa0, 0x1f, 0xd3, 0xed,
314 0xa2, 0x55, 0x39, 0xab, 0xa8, 0x13, 0x73, 0x7c,
315 0x3f, 0xb2, 0xd6, 0x19, 0xac, 0xff, 0x99, 0xed,
316 0xe8, 0xe6, 0xa6, 0x22, 0xe3, 0x9c, 0xf1, 0x30,
317 0xdc, 0x01, 0x0a, 0x56, 0xfa, 0xe4, 0xc9, 0x99,
318 0xdd, 0xa8, 0xd8, 0xda, 0x35, 0x51, 0x73, 0xb4,
319 0x40, 0x86, 0x85, 0xdb, 0x5c, 0xd5, 0x85, 0x80,
320 0x14, 0x9c, 0xfd, 0x98, 0xa9, 0x82, 0xc5, 0x37,
321 0xff, 0x32, 0x5d, 0xd0, 0x0b, 0xfa, 0xdc, 0x04,
322 0x5e, 0x09, 0xd2, 0xca, 0x17, 0x4b, 0x1a, 0x8e,
323 0x15, 0xe1, 0xcc, 0x4e, 0x52, 0x88, 0x35, 0xbd,
324 0x48, 0xfe, 0x15, 0xa0, 0x91, 0xfd, 0x7e, 0x6c,
325 0x0e, 0x5d, 0x79, 0x1b, 0x81, 0x79, 0xd2, 0x09,
326 0x34, 0x70, 0x3d, 0x81, 0xec, 0xf6, 0x24, 0xbb,
327 0xfb, 0xf1, 0x7b, 0xdf, 0x54, 0xea, 0x80, 0x9b,
328 0xc7, 0x99, 0x9e, 0xbd, 0x16, 0x78, 0x12, 0x53,
329 0x5e, 0x01, 0xa7, 0x4e, 0xbd, 0x67, 0xe1, 0x9b,
330 0x4c, 0x0e, 0x61, 0x45, 0x97, 0xd2, 0xf0, 0x0f,
331 0xfe, 0x15, 0x08, 0xb7, 0x11, 0x4c, 0xe7, 0xff,
332 0x81, 0x53, 0xff, 0x91, 0x25, 0x38, 0x7e, 0x40,
333 0x94, 0xe5, 0xe0, 0xad, 0xe6, 0xd9, 0x79, 0xb6,
334 0x92, 0xc9, 0xfc, 0xde, 0xc3, 0x1a, 0x23, 0xbb,
335 0xdd, 0xc8, 0x51, 0x0c, 0x3a, 0x72, 0xfa, 0x73,
336 0x6f, 0xb7, 0xee, 0x61, 0x39, 0x03, 0x01, 0x3f,
337 0x7f, 0x94, 0x2e, 0x2e, 0xba, 0x3a, 0xbb, 0xb4,
338 0xfa, 0x6a, 0x17, 0xfe, 0xea, 0xef, 0x5e, 0x66,
339 0x97, 0x3f, 0x32, 0x3d, 0xd7, 0x3e, 0xb1, 0xf1,
340 0x6c, 0x14, 0x4c, 0xfd, 0x37, 0xd3, 0x38, 0x80,
341 0xfb, 0xde, 0xa6, 0x24, 0x1e, 0xc8, 0xca, 0x7f,
342 0x3a, 0x93, 0xd8, 0x8b, 0x18, 0x13, 0xb2, 0xe5,
343 0xe4, 0x93, 0x05, 0x53, 0x4f, 0x84, 0x66, 0xa7,
344 0x58, 0x5c, 0x7b, 0x86, 0x52, 0x6d, 0x0d, 0xce,
345 0xa4, 0x30, 0x7d, 0xb6, 0x18, 0x9f, 0xeb, 0xff,
346 0x22, 0xbb, 0x72, 0x29, 0xb9, 0x44, 0x0b, 0x48,
347 0x1e, 0x84, 0x71, 0x81, 0xe3, 0x6d, 0x73, 0x26,
348 0x92, 0xb4, 0x4d, 0x2a, 0x29, 0xb8, 0x1f, 0x72,
349 0xed, 0xd0, 0xe1, 0x64, 0x77, 0xea, 0x8e, 0x88,
350 0x0f, 0xef, 0x3f, 0xb1, 0x3b, 0xad, 0xf9, 0xc9,
351 0x8b, 0xd0, 0xac, 0xc6, 0xcc, 0xa9, 0x40, 0xcc,
352 0x76, 0xf6, 0x3b, 0x53, 0xb5, 0x88, 0xcb, 0xc8,
353 0x37, 0xf1, 0xa2, 0xba, 0x23, 0x15, 0x99, 0x09,
354 0xcc, 0xe7, 0x7a, 0x3b, 0x37, 0xf7, 0x58, 0xc8,
355 0x46, 0x8c, 0x2b, 0x2f, 0x4e, 0x0e, 0xa6, 0x5c,
356 0xea, 0x85, 0x55, 0xba, 0x02, 0x0e, 0x0e, 0x48,
357 0xbc, 0xe1, 0xb1, 0x01, 0x35, 0x79, 0x13, 0x3d,
358 0x1b, 0xc0, 0x53, 0x68, 0x11, 0xe7, 0x95, 0x0f,
359 0x9d, 0x3f, 0x4c, 0x47, 0x7b, 0x4d, 0x1c, 0xae,
360 0x50, 0x9b, 0xcb, 0xdd, 0x05, 0x8d, 0x9a, 0x97,
361 0xfd, 0x8c, 0xef, 0x0c, 0x1d, 0x67, 0x73, 0xa8,
362 0x28, 0x36, 0xd5, 0xb6, 0x92, 0x33, 0x40, 0x75,
363 0x0b, 0x51, 0xc3, 0x64, 0xba, 0x1d, 0xc2, 0xcc,
364 0xee, 0x7d, 0x54, 0x0f, 0x27, 0x69, 0xa7, 0x27,
365 0x63, 0x30, 0x29, 0xd9, 0xc8, 0x84, 0xd8, 0xdf,
366 0x9f, 0x68, 0x8d, 0x04, 0xca, 0xa6, 0xc5, 0xc7,
367 0x7a, 0x5c, 0xc8, 0xd1, 0xcb, 0x4a, 0xec, 0xd0,
368 0xd8, 0x20, 0x69, 0xc5, 0x17, 0xcd, 0x78, 0xc8,
369 0x75, 0x23, 0x30, 0x69, 0xc9, 0xd4, 0xea, 0x5c,
370 0x4f, 0x6b, 0x86, 0x3f, 0x8b, 0xfe, 0xee, 0x44,
371 0xc9, 0x7c, 0xb7, 0xdd, 0x3e, 0xe5, 0xec, 0x54,
372 0x03, 0x3e, 0xaa, 0x82, 0xc6, 0xdf, 0xb2, 0x38,
373 0x0e, 0x5d, 0xb3, 0x88, 0xd9, 0xd3, 0x69, 0x5f,
374 0x8f, 0x70, 0x8a, 0x7e, 0x11, 0xd9, 0x1e, 0x7b,
375 0x38, 0xf1, 0x42, 0x1a, 0xc0, 0x35, 0xf5, 0xc7,
376 0x36, 0x85, 0xf5, 0xf7, 0xb8, 0x7e, 0xc7, 0xef,
377 0x18, 0xf1, 0x63, 0xd6, 0x7a, 0xc6, 0xc9, 0x0e,
378 0x4d, 0x69, 0x4f, 0x84, 0xef, 0x26, 0x41, 0x0c,
379 0xec, 0xc7, 0xe0, 0x7e, 0x3c, 0x67, 0x01, 0x4c,
380 0x62, 0x1a, 0x20, 0x6f, 0xee, 0x47, 0x4d, 0xc0,
381 0x99, 0x13, 0x8d, 0x91, 0x4a, 0x26, 0xd4, 0x37,
382 0x28, 0x90, 0x58, 0x75, 0x66, 0x2b, 0x0a, 0xdf,
383 0xda, 0xee, 0x92, 0x25, 0x90, 0x62, 0x39, 0x9e,
384 0x44, 0x98, 0xad, 0xc1, 0x88, 0xed, 0xe4, 0xb4,
385 0xaf, 0xf5, 0x8c, 0x9b, 0x48, 0x4d, 0x56, 0x60,
386 0x97, 0x0f, 0x61, 0x59, 0x9e, 0xa6, 0x27, 0xfe,
387 0xc1, 0x91, 0x15, 0x38, 0xb8, 0x0f, 0xae, 0x61,
388 0x7d, 0x26, 0x13, 0x5a, 0x73, 0xff, 0x1c, 0xa3,
389 0x61, 0x04, 0x58, 0x48, 0x55, 0x44, 0x11, 0xfe,
390 0x15, 0xca, 0xc3, 0xbd, 0xca, 0xc5, 0xb4, 0x40,
391 0x5d, 0x1b, 0x7f, 0x39, 0xb5, 0x9c, 0x35, 0xec,
392 0x61, 0x15, 0x32, 0x32, 0xb8, 0x4e, 0x40, 0x9f,
393 0x17, 0x1f, 0x0a, 0x4d, 0xa9, 0x91, 0xef, 0xb7,
394 0xb0, 0xeb, 0xc2, 0x83, 0x9a, 0x6c, 0xd2, 0x79,
395 0x43, 0x78, 0x5e, 0x2f, 0xe5, 0xdd, 0x1a, 0x3c,
396 0x45, 0xab, 0x29, 0x40, 0x3a, 0x37, 0x5b, 0x6f,
397 0xd7, 0xfc, 0x48, 0x64, 0x3c, 0x49, 0xfb, 0x21,
398 0xbe, 0xc3, 0xff, 0x07, 0xfb, 0x17, 0xe9, 0xc9,
399 0x0c, 0x4c, 0x5c, 0x15, 0x9e, 0x8e, 0x22, 0x30,
400 0x0a, 0xde, 0x48, 0x7f, 0xdb, 0x0d, 0xd1, 0x2b,
401 0x87, 0x38, 0x9e, 0xcc, 0x5a, 0x01, 0x16, 0xee,
402 0x75, 0x49, 0x0d, 0x30, 0x01, 0x34, 0x6a, 0xb6,
403 0x9a, 0x5a, 0x2a, 0xec, 0xbb, 0x48, 0xac, 0xd3,
404 0x77, 0x83, 0xd8, 0x08, 0x86, 0x4f, 0x48, 0x09,
405 0x29, 0x41, 0x79, 0xa1, 0x03, 0x12, 0xc4, 0xcd,
406 0x90, 0x55, 0x47, 0x66, 0x74, 0x9a, 0xcc, 0x4f,
407 0x35, 0x8c, 0xd6, 0x98, 0xef, 0xeb, 0x45, 0xb9,
408 0x9a, 0x26, 0x2f, 0x39, 0xa5, 0x70, 0x6d, 0xfc,
409 0xb4, 0x51, 0xee, 0xf4, 0x9c, 0xe7, 0x38, 0x59,
410 0xad, 0xf4, 0xbc, 0x46, 0xff, 0x46, 0x8e, 0x60,
411 0x9c, 0xa3, 0x60, 0x1d, 0xf8, 0x26, 0x72, 0xf5,
412 0x72, 0x9d, 0x68, 0x80, 0x04, 0xf6, 0x0b, 0xa1,
413 0x0a, 0xd5, 0xa7, 0x82, 0x3a, 0x3e, 0x47, 0xa8,
414 0x5a, 0xde, 0x59, 0x4f, 0x7b, 0x07, 0xb3, 0xe9,
415 0x24, 0x19, 0x3d, 0x34, 0x05, 0xec, 0xf1, 0xab,
416 0x6e, 0x64, 0x8f, 0xd3, 0xe6, 0x41, 0x86, 0x80,
417 0x70, 0xe3, 0x8d, 0x60, 0x9c, 0x34, 0x25, 0x01,
418 0x07, 0x4d, 0x19, 0x41, 0x4e, 0x3d, 0x5c, 0x7e,
419 0xa8, 0xf5, 0xcc, 0xd5, 0x7b, 0xe2, 0x7d, 0x3d,
420 0x49, 0x86, 0x7d, 0x07, 0xb7, 0x10, 0xe3, 0x35,
421 0xb8, 0x84, 0x6d, 0x76, 0xab, 0x17, 0xc6, 0x38,
422 0xb4, 0xd3, 0x28, 0x57, 0xad, 0xd3, 0x88, 0x5a,
423 0xda, 0xea, 0xc8, 0x94, 0xcc, 0x37, 0x19, 0xac,
424 0x9c, 0x9f, 0x4b, 0x00, 0x15, 0xc0, 0xc8, 0xca,
425 0x1f, 0x15, 0xaa, 0xe0, 0xdb, 0xf9, 0x2f, 0x57,
426 0x1b, 0x24, 0xc7, 0x6f, 0x76, 0x29, 0xfb, 0xed,
427 0x25, 0x0d, 0xc0, 0xfe, 0xbd, 0x5a, 0xbf, 0x20,
428 0x08, 0x51, 0x05, 0xec, 0x71, 0xa3, 0xbf, 0xef,
429 0x5e, 0x99, 0x75, 0xdb, 0x3c, 0x5f, 0x9a, 0x8c,
430 0xbb, 0x19, 0x5c, 0x0e, 0x93, 0x19, 0xf8, 0x6a,
431 0xbc, 0xf2, 0x12, 0x54, 0x2f, 0xcb, 0x28, 0x64,
432 0x88, 0xb3, 0x92, 0x0d, 0x96, 0xd1, 0xa6, 0xe4,
433 0x1f, 0xf1, 0x4d, 0xa4, 0xab, 0x1c, 0xee, 0x54,
434 0xf2, 0xad, 0x29, 0x6d, 0x32, 0x37, 0xb2, 0x16,
435 0x77, 0x5c, 0xdc, 0x2e, 0x54, 0xec, 0x75, 0x26,
436 0xc6, 0x36, 0xd9, 0x17, 0x2c, 0xf1, 0x7a, 0xdc,
437 0x4b, 0xf1, 0xe2, 0xd9, 0x95, 0xba, 0xac, 0x87,
438 0xc1, 0xf3, 0x8e, 0x58, 0x08, 0xd8, 0x87, 0x60,
439 0xc9, 0xee, 0x6a, 0xde, 0xa4, 0xd2, 0xfc, 0x0d,
440 0xe5, 0x36, 0xc4, 0x5c, 0x52, 0xb3, 0x07, 0x54,
441 0x65, 0x24, 0xc1, 0xb1, 0xd1, 0xb1, 0x53, 0x13,
442 0x31, 0x79, 0x7f, 0x05, 0x76, 0xeb, 0x37, 0x59,
443 0x15, 0x2b, 0xd1, 0x3f, 0xac, 0x08, 0x97, 0xeb,
444 0x91, 0x98, 0xdf, 0x6c, 0x09, 0x0d, 0x04, 0x9f,
445 0xdc, 0x3b, 0x0e, 0x60, 0x68, 0x47, 0x23, 0x15,
446 0x16, 0xc6, 0x0b, 0x35, 0xf8, 0x77, 0xa2, 0x78,
447 0x50, 0xd4, 0x64, 0x22, 0x33, 0xff, 0xfb, 0x93,
448 0x71, 0x46, 0x50, 0x39, 0x1b, 0x9c, 0xea, 0x4e,
449 0x8d, 0x0c, 0x37, 0xe5, 0x5c, 0x51, 0x3a, 0x31,
450 0xb2, 0x85, 0x84, 0x3f, 0x41, 0xee, 0xa2, 0xc1,
451 0xc6, 0x13, 0x3b, 0x54, 0x28, 0xd2, 0x18, 0x37,
452 0xcc, 0x46, 0x9f, 0x6a, 0x91, 0x3d, 0x5a, 0x15,
453 0x3c, 0x89, 0xa3, 0x61, 0x06, 0x7d, 0x2e, 0x78,
454 0xbe, 0x7d, 0x40, 0xba, 0x2f, 0x95, 0xb1, 0x2f,
455 0x87, 0x3b, 0x8a, 0xbe, 0x6a, 0xf4, 0xc2, 0x31,
456 0x74, 0xee, 0x91, 0xe0, 0x23, 0xaa, 0x5d, 0x7f,
457 0xdd, 0xf0, 0x44, 0x8c, 0x0b, 0x59, 0x2b, 0xfc,
458 0x48, 0x3a, 0xdf, 0x07, 0x05, 0x38, 0x6c, 0xc9,
459 0xeb, 0x18, 0x24, 0x68, 0x8d, 0x58, 0x98, 0xd3,
460 0x31, 0xa3, 0xe4, 0x70, 0x59, 0xb1, 0x21, 0xbe,
461 0x7e, 0x65, 0x7d, 0xb8, 0x04, 0xab, 0xf6, 0xe4,
462 0xd7, 0xda, 0xec, 0x09, 0x8f, 0xda, 0x6d, 0x24,
463 0x07, 0xcc, 0x29, 0x17, 0x05, 0x78, 0x1a, 0xc1,
464 0xb1, 0xce, 0xfc, 0xaa, 0x2d, 0xe7, 0xcc, 0x85,
465 0x84, 0x84, 0x03, 0x2a, 0x0c, 0x3f, 0xa9, 0xf8,
466 0xfd, 0x84, 0x53, 0x59, 0x5c, 0xf0, 0xd4, 0x09,
467 0xf0, 0xd2, 0x6c, 0x32, 0x03, 0xb0, 0xa0, 0x8c,
468 0x52, 0xeb, 0x23, 0x91, 0x88, 0x43, 0x13, 0x46,
469 0xf6, 0x1e, 0xb4, 0x1b, 0xf5, 0x8e, 0x3a, 0xb5,
470 0x3d, 0x00, 0xf6, 0xe5, 0x08, 0x3d, 0x5f, 0x39,
471 0xd3, 0x21, 0x69, 0xbc, 0x03, 0x22, 0x3a, 0xd2,
472 0x5c, 0x84, 0xf8, 0x15, 0xc4, 0x80, 0x0b, 0xbc,
473 0x29, 0x3c, 0xf3, 0x95, 0x98, 0xcd, 0x8f, 0x35,
474 0xbc, 0xa5, 0x3e, 0xfc, 0xd4, 0x13, 0x9e, 0xde,
475 0x4f, 0xce, 0x71, 0x9d, 0x09, 0xad, 0xf2, 0x80,
476 0x6b, 0x65, 0x7f, 0x03, 0x00, 0x14, 0x7c, 0x15,
477 0x85, 0x40, 0x6d, 0x70, 0xea, 0xdc, 0xb3, 0x63,
478 0x35, 0x4f, 0x4d, 0xe0, 0xd9, 0xd5, 0x3c, 0x58,
479 0x56, 0x23, 0x80, 0xe2, 0x36, 0xdd, 0x75, 0x1d,
480 0x94, 0x11, 0x41, 0x8e, 0xe0, 0x81, 0x8e, 0xcf,
481 0xe0, 0xe5, 0xf6, 0xde, 0xd1, 0xe7, 0x04, 0x12,
482 0x79, 0x92, 0x2b, 0x71, 0x2a, 0x79, 0x8b, 0x7c,
483 0x44, 0x79, 0x16, 0x30, 0x4e, 0xf4, 0xf6, 0x9b,
484 0xb7, 0x40, 0xa3, 0x5a, 0xa7, 0x69, 0x3e, 0xc1,
485 0x3a, 0x04, 0xd0, 0x88, 0xa0, 0x3b, 0xdd, 0xc6,
486 0x9e, 0x7e, 0x1e, 0x1e, 0x8f, 0x44, 0xf7, 0x73,
487 0x67, 0x1e, 0x1a, 0x78, 0xfa, 0x62, 0xf4, 0xa9,
488 0xa8, 0xc6, 0x5b, 0xb8, 0xfa, 0x06, 0x7d, 0x5e,
489 0x38, 0x1c, 0x9a, 0x39, 0xe9, 0x39, 0x98, 0x22,
490 0x0b, 0xa7, 0xac, 0x0b, 0xf3, 0xbc, 0xf1, 0xeb,
491 0x8c, 0x81, 0xe3, 0x48, 0x8a, 0xed, 0x42, 0xc2,
492 0x38, 0xcf, 0x3e, 0xda, 0xd2, 0x89, 0x8d, 0x9c,
493 0x53, 0xb5, 0x2f, 0x41, 0x01, 0x26, 0x84, 0x9c,
494 0xa3, 0x56, 0xf6, 0x49, 0xc7, 0xd4, 0x9f, 0x93,
495 0x1b, 0x96, 0x49, 0x5e, 0xad, 0xb3, 0x84, 0x1f,
496 0x3c, 0xa4, 0xe0, 0x9b, 0xd1, 0x90, 0xbc, 0x38,
497 0x6c, 0xdd, 0x95, 0x4d, 0x9d, 0xb1, 0x71, 0x57,
498 0x2d, 0x34, 0xe8, 0xb8, 0x42, 0xc7, 0x99, 0x03,
499 0xc7, 0x07, 0x30, 0x65, 0x91, 0x55, 0xd5, 0x90,
500 0x70, 0x97, 0x37, 0x68, 0xd4, 0x11, 0xf9, 0xe8,
501 0xce, 0xec, 0xdc, 0x34, 0xd5, 0xd3, 0xb7, 0xc4,
502 0xb8, 0x97, 0x05, 0x92, 0xad, 0xf8, 0xe2, 0x36,
503 0x64, 0x41, 0xc9, 0xc5, 0x41, 0x77, 0x52, 0xd7,
504 0x2c, 0xa5, 0x24, 0x2f, 0xd9, 0x34, 0x0b, 0x47,
505 0x35, 0xa7, 0x28, 0x8b, 0xc5, 0xcd, 0xe9, 0x46,
506 0xac, 0x39, 0x94, 0x3c, 0x10, 0xc6, 0x29, 0x73,
507 0x0e, 0x0e, 0x5d, 0xe0, 0x71, 0x03, 0x8a, 0x72,
508 0x0e, 0x26, 0xb0, 0x7d, 0x84, 0xed, 0x95, 0x23,
509 0x49, 0x5a, 0x45, 0x83, 0x45, 0x60, 0x11, 0x4a,
510 0x46, 0x31, 0xd4, 0xd8, 0x16, 0x54, 0x98, 0x58,
511 0xed, 0x6d, 0xcc, 0x5d, 0xd6, 0x50, 0x61, 0x9f,
512 0x9d, 0xc5, 0x3e, 0x9d, 0x32, 0x47, 0xde, 0x96,
513 0xe1, 0x5d, 0xd8, 0xf8, 0xb4, 0x69, 0x6f, 0xb9,
514 0x15, 0x90, 0x57, 0x7a, 0xf6, 0xad, 0xb0, 0x5b,
515 0xf5, 0xa6, 0x36, 0x94, 0xfd, 0x84, 0xce, 0x1c,
516 0x0f, 0x4b, 0xd0, 0xc2, 0x5b, 0x6b, 0x56, 0xef,
517 0x73, 0x93, 0x0b, 0xc3, 0xee, 0xd9, 0xcf, 0xd3,
518 0xa4, 0x22, 0x58, 0xcd, 0x50, 0x6e, 0x65, 0xf4,
519 0xe9, 0xb7, 0x71, 0xaf, 0x4b, 0xb3, 0xb6, 0x2f,
520 0x0f, 0x0e, 0x3b, 0xc9, 0x85, 0x14, 0xf5, 0x17,
521 0xe8, 0x7a, 0x3a, 0xbf, 0x5f, 0x5e, 0xf8, 0x18,
522 0x48, 0xa6, 0x72, 0xab, 0x06, 0x95, 0xe9, 0xc8,
523 0xa7, 0xf4, 0x32, 0x44, 0x04, 0x0c, 0x84, 0x98,
524 0x73, 0xe3, 0x89, 0x8d, 0x5f, 0x7e, 0x4a, 0x42,
525 0x8f, 0xc5, 0x28, 0xb1, 0x82, 0xef, 0x1c, 0x97,
526 0x31, 0x3b, 0x4d, 0xe0, 0x0e, 0x10, 0x10, 0x97,
527 0x93, 0x49, 0x78, 0x2f, 0x0d, 0x86, 0x8b, 0xa1,
528 0x53, 0xa9, 0x81, 0x20, 0x79, 0xe7, 0x07, 0x77,
529 0xb6, 0xac, 0x5e, 0xd2, 0x05, 0xcd, 0xe9, 0xdb,
530 0x8a, 0x94, 0x82, 0x8a, 0x23, 0xb9, 0x3d, 0x1c,
531 0xa9, 0x7d, 0x72, 0x4a, 0xed, 0x33, 0xa3, 0xdb,
532 0x21, 0xa7, 0x86, 0x33, 0x45, 0xa5, 0xaa, 0x56,
533 0x45, 0xb5, 0x83, 0x29, 0x40, 0x47, 0x79, 0x04,
534 0x6e, 0xb9, 0x95, 0xd0, 0x81, 0x77, 0x2d, 0x48,
535 0x1e, 0xfe, 0xc3, 0xc2, 0x1e, 0xe5, 0xf2, 0xbe,
536 0xfd, 0x3b, 0x94, 0x9f, 0xc4, 0xc4, 0x26, 0x9d,
537 0xe4, 0x66, 0x1e, 0x19, 0xee, 0x6c, 0x79, 0x97,
538 0x11, 0x31, 0x4b, 0x0d, 0x01, 0xcb, 0xde, 0xa8,
539 0xf6, 0x6d, 0x7c, 0x39, 0x46, 0x4e, 0x7e, 0x3f,
540 0x94, 0x17, 0xdf, 0xa1, 0x7d, 0xd9, 0x1c, 0x8e,
541 0xbc, 0x7d, 0x33, 0x7d, 0xe3, 0x12, 0x40, 0xca,
542 0xab, 0x37, 0x11, 0x46, 0xd4, 0xae, 0xef, 0x44,
543 0xa2, 0xb3, 0x6a, 0x66, 0x0e, 0x0c, 0x90, 0x7f,
544 0xdf, 0x5c, 0x66, 0x5f, 0xf2, 0x94, 0x9f, 0xa6,
545 0x73, 0x4f, 0xeb, 0x0d, 0xad, 0xbf, 0xc0, 0x63,
546 0x5c, 0xdc, 0x46, 0x51, 0xe8, 0x8e, 0x90, 0x19,
547 0xa8, 0xa4, 0x3c, 0x91, 0x79, 0xfa, 0x7e, 0x58,
548 0x85, 0x13, 0x55, 0xc5, 0x19, 0x82, 0x37, 0x1b,
549 0x0a, 0x02, 0x1f, 0x99, 0x6b, 0x18, 0xf1, 0x28,
550 0x08, 0xa2, 0x73, 0xb8, 0x0f, 0x2e, 0xcd, 0xbf,
551 0xf3, 0x86, 0x7f, 0xea, 0xef, 0xd0, 0xbb, 0xa6,
552 0x21, 0xdf, 0x49, 0x73, 0x51, 0xcc, 0x36, 0xd3,
553 0x3e, 0xa0, 0xf8, 0x44, 0xdf, 0xd3, 0xa6, 0xbe,
554 0x8a, 0xd4, 0x57, 0xdd, 0x72, 0x94, 0x61, 0x0f,
555 0x82, 0xd1, 0x07, 0xb8, 0x7c, 0x18, 0x83, 0xdf,
556 0x3a, 0xe5, 0x50, 0x6a, 0x82, 0x20, 0xac, 0xa9,
557 0xa8, 0xff, 0xd9, 0xf3, 0x77, 0x33, 0x5a, 0x9e,
558 0x7f, 0x6d, 0xfe, 0x5d, 0x33, 0x41, 0x42, 0xe7,
559 0x6c, 0x19, 0xe0, 0x44, 0x8a, 0x15, 0xf6, 0x70,
560 0x98, 0xb7, 0x68, 0x4d, 0xfa, 0x97, 0x39, 0xb0,
561 0x8e, 0xe8, 0x84, 0x8b, 0x75, 0x30, 0xb7, 0x7d,
562 0x92, 0x69, 0x20, 0x9c, 0x81, 0xfb, 0x4b, 0xf4,
563 0x01, 0x50, 0xeb, 0xce, 0x0c, 0x1c, 0x6c, 0xb5,
564 0x4a, 0xd7, 0x27, 0x0c, 0xce, 0xbb, 0xe5, 0x85,
565 0xf0, 0xb6, 0xee, 0xd5, 0x70, 0xdd, 0x3b, 0xfc,
566 0xd4, 0x99, 0xf1, 0x33, 0xdd, 0x8b, 0xc4, 0x2f,
567 0xae, 0xab, 0x74, 0x96, 0x32, 0xc7, 0x4c, 0x56,
568 0x3c, 0x89, 0x0f, 0x96, 0x0b, 0x42, 0xc0, 0xcb,
569 0xee, 0x0f, 0x0b, 0x8c, 0xfb, 0x7e, 0x47, 0x7b,
570 0x64, 0x48, 0xfd, 0xb2, 0x00, 0x80, 0x89, 0xa5,
571 0x13, 0x55, 0x62, 0xfc, 0x8f, 0xe2, 0x42, 0x03,
572 0xb7, 0x4e, 0x2a, 0x79, 0xb4, 0x82, 0xea, 0x23,
573 0x49, 0xda, 0xaf, 0x52, 0x63, 0x1e, 0x60, 0x03,
574 0x89, 0x06, 0x44, 0x46, 0x08, 0xc3, 0xc4, 0x87,
575 0x70, 0x2e, 0xda, 0x94, 0xad, 0x6b, 0xe0, 0xe4,
576 0xd1, 0x8a, 0x06, 0xc2, 0xa8, 0xc0, 0xa7, 0x43,
577 0x3c, 0x47, 0x52, 0x0e, 0xc3, 0x77, 0x81, 0x11,
578 0x67, 0x0e, 0xa0, 0x70, 0x04, 0x47, 0x29, 0x40,
579 0x86, 0x0d, 0x34, 0x56, 0xa7, 0xc9, 0x35, 0x59,
580 0x68, 0xdc, 0x93, 0x81, 0x70, 0xee, 0x86, 0xd9,
581 0x80, 0x06, 0x40, 0x4f, 0x1a, 0x0d, 0x40, 0x30,
582 0x0b, 0xcb, 0x96, 0x47, 0xc1, 0xb7, 0x52, 0xfd,
583 0x56, 0xe0, 0x72, 0x4b, 0xfb, 0xbd, 0x92, 0x45,
584 0x61, 0x71, 0xc2, 0x33, 0x11, 0xbf, 0x52, 0x83,
585 0x79, 0x26, 0xe0, 0x49, 0x6b, 0xb7, 0x05, 0x8b,
586 0xe8, 0x0e, 0x87, 0x31, 0xd7, 0x9d, 0x8a, 0xf5,
587 0xc0, 0x5f, 0x2e, 0x58, 0x4a, 0xdb, 0x11, 0xb3,
588 0x6c, 0x30, 0x2a, 0x46, 0x19, 0xe3, 0x27, 0x84,
589 0x1f, 0x63, 0x6e, 0xf6, 0x57, 0xc7, 0xc9, 0xd8,
590 0x5e, 0xba, 0xb3, 0x87, 0xd5, 0x83, 0x26, 0x34,
591 0x21, 0x9e, 0x65, 0xde, 0x42, 0xd3, 0xbe, 0x7b,
592 0xbc, 0x91, 0x71, 0x44, 0x4d, 0x99, 0x3b, 0x31,
593 0xe5, 0x3f, 0x11, 0x4e, 0x7f, 0x13, 0x51, 0x3b,
594 0xae, 0x79, 0xc9, 0xd3, 0x81, 0x8e, 0x25, 0x40,
595 0x10, 0xfc, 0x07, 0x1e, 0xf9, 0x7b, 0x9a, 0x4b,
596 0x6c, 0xe3, 0xb3, 0xad, 0x1a, 0x0a, 0xdd, 0x9e,
597 0x59, 0x0c, 0xa2, 0xcd, 0xae, 0x48, 0x4a, 0x38,
598 0x5b, 0x47, 0x41, 0x94, 0x65, 0x6b, 0xbb, 0xeb,
599 0x5b, 0xe3, 0xaf, 0x07, 0x5b, 0xd4, 0x4a, 0xa2,
600 0xc9, 0x5d, 0x2f, 0x64, 0x03, 0xd7, 0x3a, 0x2c,
601 0x6e, 0xce, 0x76, 0x95, 0xb4, 0xb3, 0xc0, 0xf1,
602 0xe2, 0x45, 0x73, 0x7a, 0x5c, 0xab, 0xc1, 0xfc,
603 0x02, 0x8d, 0x81, 0x29, 0xb3, 0xac, 0x07, 0xec,
604 0x40, 0x7d, 0x45, 0xd9, 0x7a, 0x59, 0xee, 0x34,
605 0xf0, 0xe9, 0xd5, 0x7b, 0x96, 0xb1, 0x3d, 0x95,
606 0xcc, 0x86, 0xb5, 0xb6, 0x04, 0x2d, 0xb5, 0x92,
607 0x7e, 0x76, 0xf4, 0x06, 0xa9, 0xa3, 0x12, 0x0f,
608 0xb1, 0xaf, 0x26, 0xba, 0x7c, 0xfc, 0x7e, 0x1c,
609 0xbc, 0x2c, 0x49, 0x97, 0x53, 0x60, 0x13, 0x0b,
610 0xa6, 0x61, 0x83, 0x89, 0x42, 0xd4, 0x17, 0x0c,
611 0x6c, 0x26, 0x52, 0xc3, 0xb3, 0xd4, 0x67, 0xf5,
612 0xe3, 0x04, 0xb7, 0xf4, 0xcb, 0x80, 0xb8, 0xcb,
613 0x77, 0x56, 0x3e, 0xaa, 0x57, 0x54, 0xee, 0xb4,
614 0x2c, 0x67, 0xcf, 0xf2, 0xdc, 0xbe, 0x55, 0xf9,
615 0x43, 0x1f, 0x6e, 0x22, 0x97, 0x67, 0x7f, 0xc4,
616 0xef, 0xb1, 0x26, 0x31, 0x1e, 0x27, 0xdf, 0x41,
617 0x80, 0x47, 0x6c, 0xe2, 0xfa, 0xa9, 0x8c, 0x2a,
618 0xf6, 0xf2, 0xab, 0xf0, 0x15, 0xda, 0x6c, 0xc8,
619 0xfe, 0xb5, 0x23, 0xde, 0xa9, 0x05, 0x3f, 0x06,
620 0x54, 0x4c, 0xcd, 0xe1, 0xab, 0xfc, 0x0e, 0x62,
621 0x33, 0x31, 0x73, 0x2c, 0x76, 0xcb, 0xb4, 0x47,
622 0x1e, 0x20, 0xad, 0xd8, 0xf2, 0x31, 0xdd, 0xc4,
623 0x8b, 0x0c, 0x77, 0xbe, 0xe1, 0x8b, 0x26, 0x00,
624 0x02, 0x58, 0xd6, 0x8d, 0xef, 0xad, 0x74, 0x67,
625 0xab, 0x3f, 0xef, 0xcb, 0x6f, 0xb0, 0xcc, 0x81,
626 0x44, 0x4c, 0xaf, 0xe9, 0x49, 0x4f, 0xdb, 0xa0,
627 0x25, 0xa4, 0xf0, 0x89, 0xf1, 0xbe, 0xd8, 0x10,
628 0xff, 0xb1, 0x3b, 0x4b, 0xfa, 0x98, 0xf5, 0x79,
629 0x6d, 0x1e, 0x69, 0x4d, 0x57, 0xb1, 0xc8, 0x19,
630 0x1b, 0xbd, 0x1e, 0x8c, 0x84, 0xb7, 0x7b, 0xe8,
631 0xd2, 0x2d, 0x09, 0x41, 0x41, 0x37, 0x3d, 0xb1,
632 0x6f, 0x26, 0x5d, 0x71, 0x16, 0x3d, 0xb7, 0x83,
633 0x27, 0x2c, 0xa7, 0xb6, 0x50, 0xbd, 0x91, 0x86,
634 0xab, 0x24, 0xa1, 0x38, 0xfd, 0xea, 0x71, 0x55,
635 0x7e, 0x9a, 0x07, 0x77, 0x4b, 0xfa, 0x61, 0x66,
636 0x20, 0x1e, 0x28, 0x95, 0x18, 0x1b, 0xa4, 0xa0,
637 0xfd, 0xc0, 0x89, 0x72, 0x43, 0xd9, 0x3b, 0x49,
638 0x5a, 0x3f, 0x9d, 0xbf, 0xdb, 0xb4, 0x46, 0xea,
639 0x42, 0x01, 0x77, 0x23, 0x68, 0x95, 0xb6, 0x24,
640 0xb3, 0xa8, 0x6c, 0x28, 0x3b, 0x11, 0x40, 0x7e,
641 0x18, 0x65, 0x6d, 0xd8, 0x24, 0x42, 0x7d, 0x88,
642 0xc0, 0x52, 0xd9, 0x05, 0xe4, 0x95, 0x90, 0x87,
643 0x8c, 0xf4, 0xd0, 0x6b, 0xb9, 0x83, 0x99, 0x34,
644 0x6d, 0xfe, 0x54, 0x40, 0x94, 0x52, 0x21, 0x4f,
645 0x14, 0x25, 0xc5, 0xd6, 0x5e, 0x95, 0xdc, 0x0a,
646 0x2b, 0x89, 0x20, 0x11, 0x84, 0x48, 0xd6, 0x3a,
647 0xcd, 0x5c, 0x24, 0xad, 0x62, 0xe3, 0xb1, 0x93,
648 0x25, 0x8d, 0xcd, 0x7e, 0xfc, 0x27, 0xa3, 0x37,
649 0xfd, 0x84, 0xfc, 0x1b, 0xb2, 0xf1, 0x27, 0x38,
650 0x5a, 0xb7, 0xfc, 0xf2, 0xfa, 0x95, 0x66, 0xd4,
651 0xfb, 0xba, 0xa7, 0xd7, 0xa3, 0x72, 0x69, 0x48,
652 0x48, 0x8c, 0xeb, 0x28, 0x89, 0xfe, 0x33, 0x65,
653 0x5a, 0x36, 0x01, 0x7e, 0x06, 0x79, 0x0a, 0x09,
654 0x3b, 0x74, 0x11, 0x9a, 0x6e, 0xbf, 0xd4, 0x9e,
655 0x58, 0x90, 0x49, 0x4f, 0x4d, 0x08, 0xd4, 0xe5,
656 0x4a, 0x09, 0x21, 0xef, 0x8b, 0xb8, 0x74, 0x3b,
657 0x91, 0xdd, 0x36, 0x85, 0x60, 0x2d, 0xfa, 0xd4,
658 0x45, 0x7b, 0x45, 0x53, 0xf5, 0x47, 0x87, 0x7e,
659 0xa6, 0x37, 0xc8, 0x78, 0x7a, 0x68, 0x9d, 0x8d,
660 0x65, 0x2c, 0x0e, 0x91, 0x5c, 0xa2, 0x60, 0xf0,
661 0x8e, 0x3f, 0xe9, 0x1a, 0xcd, 0xaa, 0xe7, 0xd5,
662 0x77, 0x18, 0xaf, 0xc9, 0xbc, 0x18, 0xea, 0x48,
663 0x1b, 0xfb, 0x22, 0x48, 0x70, 0x16, 0x29, 0x9e,
664 0x5b, 0xc1, 0x2c, 0x66, 0x23, 0xbc, 0xf0, 0x1f,
665 0xef, 0xaf, 0xe4, 0xd6, 0x04, 0x19, 0x82, 0x7a,
666 0x0b, 0xba, 0x4b, 0x46, 0xb1, 0x6a, 0x85, 0x5d,
667 0xb4, 0x73, 0xd6, 0x21, 0xa1, 0x71, 0x60, 0x14,
668 0xee, 0x0a, 0x77, 0xc4, 0x66, 0x2e, 0xf9, 0x69,
669 0x30, 0xaf, 0x41, 0x0b, 0xc8, 0x83, 0x3c, 0x53,
670 0x99, 0x19, 0x27, 0x46, 0xf7, 0x41, 0x6e, 0x56,
671 0xdc, 0x94, 0x28, 0x67, 0x4e, 0xb7, 0x25, 0x48,
672 0x8a, 0xc2, 0xe0, 0x60, 0x96, 0xcc, 0x18, 0xf4,
673 0x84, 0xdd, 0xa7, 0x5e, 0x3e, 0x05, 0x0b, 0x26,
674 0x26, 0xb2, 0x5c, 0x1f, 0x57, 0x1a, 0x04, 0x7e,
675 0x6a, 0xe3, 0x2f, 0xb4, 0x35, 0xb6, 0x38, 0x40,
676 0x40, 0xcd, 0x6f, 0x87, 0x2e, 0xef, 0xa3, 0xd7,
677 0xa9, 0xc2, 0xe8, 0x0d, 0x27, 0xdf, 0x44, 0x62,
678 0x99, 0xa0, 0xfc, 0xcf, 0x81, 0x78, 0xcb, 0xfe,
679 0xe5, 0xa0, 0x03, 0x4e, 0x6c, 0xd7, 0xf4, 0xaf,
680 0x7a, 0xbb, 0x61, 0x82, 0xfe, 0x71, 0x89, 0xb2,
681 0x22, 0x7c, 0x8e, 0x83, 0x04, 0xce, 0xf6, 0x5d,
682 0x84, 0x8f, 0x95, 0x6a, 0x7f, 0xad, 0xfd, 0x32,
683 0x9c, 0x5e, 0xe4, 0x9c, 0x89, 0x60, 0x54, 0xaa,
684 0x96, 0x72, 0xd2, 0xd7, 0x36, 0x85, 0xa9, 0x45,
685 0xd2, 0x2a, 0xa1, 0x81, 0x49, 0x6f, 0x7e, 0x04,
686 0xfa, 0xe2, 0xfe, 0x90, 0x26, 0x77, 0x5a, 0x33,
687 0xb8, 0x04, 0x9a, 0x7a, 0xe6, 0x4c, 0x4f, 0xad,
688 0x72, 0x96, 0x08, 0x28, 0x58, 0x13, 0xf8, 0xc4,
689 0x1c, 0xf0, 0xc3, 0x45, 0x95, 0x49, 0x20, 0x8c,
690 0x9f, 0x39, 0x70, 0xe1, 0x77, 0xfe, 0xd5, 0x4b,
691 0xaf, 0x86, 0xda, 0xef, 0x22, 0x06, 0x83, 0x36,
692 0x29, 0x12, 0x11, 0x40, 0xbc, 0x3b, 0x86, 0xaa,
693 0xaa, 0x65, 0x60, 0xc3, 0x80, 0xca, 0xed, 0xa9,
694 0xf3, 0xb0, 0x79, 0x96, 0xa2, 0x55, 0x27, 0x28,
695 0x55, 0x73, 0x26, 0xa5, 0x50, 0xea, 0x92, 0x4b,
696 0x3c, 0x5c, 0x82, 0x33, 0xf0, 0x01, 0x3f, 0x03,
697 0xc1, 0x08, 0x05, 0xbf, 0x98, 0xf4, 0x9b, 0x6d,
698 0xa5, 0xa8, 0xb4, 0x82, 0x0c, 0x06, 0xfa, 0xff,
699 0x2d, 0x08, 0xf3, 0x05, 0x4f, 0x57, 0x2a, 0x39,
700 0xd4, 0x83, 0x0d, 0x75, 0x51, 0xd8, 0x5b, 0x1b,
701 0xd3, 0x51, 0x5a, 0x32, 0x2a, 0x9b, 0x32, 0xb2,
702 0xf2, 0xa4, 0x96, 0x12, 0xf2, 0xae, 0x40, 0x34,
703 0x67, 0xa8, 0xf5, 0x44, 0xd5, 0x35, 0x53, 0xfe,
704 0xa3, 0x60, 0x96, 0x63, 0x0f, 0x1f, 0x6e, 0xb0,
705 0x5a, 0x42, 0xa6, 0xfc, 0x51, 0x0b, 0x60, 0x27,
706 0xbc, 0x06, 0x71, 0xed, 0x65, 0x5b, 0x23, 0x86,
707 0x4a, 0x07, 0x3b, 0x22, 0x07, 0x46, 0xe6, 0x90,
708 0x3e, 0xf3, 0x25, 0x50, 0x1b, 0x4c, 0x7f, 0x03,
709 0x08, 0xa8, 0x36, 0x6b, 0x87, 0xe5, 0xe3, 0xdb,
710 0x9a, 0x38, 0x83, 0xff, 0x9f, 0x1a, 0x9f, 0x57,
711 0xa4, 0x2a, 0xf6, 0x37, 0xbc, 0x1a, 0xff, 0xc9,
712 0x1e, 0x35, 0x0c, 0xc3, 0x7c, 0xa3, 0xb2, 0xe5,
713 0xd2, 0xc6, 0xb4, 0x57, 0x47, 0xe4, 0x32, 0x16,
714 0x6d, 0xa9, 0xae, 0x64, 0xe6, 0x2d, 0x8d, 0xc5,
715 0x8d, 0x50, 0x8e, 0xe8, 0x1a, 0x22, 0x34, 0x2a,
716 0xd9, 0xeb, 0x51, 0x90, 0x4a, 0xb1, 0x41, 0x7d,
717 0x64, 0xf9, 0xb9, 0x0d, 0xf6, 0x23, 0x33, 0xb0,
718 0x33, 0xf4, 0xf7, 0x3f, 0x27, 0x84, 0xc6, 0x0f,
719 0x54, 0xa5, 0xc0, 0x2e, 0xec, 0x0b, 0x3a, 0x48,
720 0x6e, 0x80, 0x35, 0x81, 0x43, 0x9b, 0x90, 0xb1,
721 0xd0, 0x2b, 0xea, 0x21, 0xdc, 0xda, 0x5b, 0x09,
722 0xf4, 0xcc, 0x10, 0xb4, 0xc7, 0xfe, 0x79, 0x51,
723 0xc3, 0xc5, 0xac, 0x88, 0x74, 0x84, 0x0b, 0x4b,
724 0xca, 0x79, 0x16, 0x29, 0xfb, 0x69, 0x54, 0xdf,
725 0x41, 0x7e, 0xe9, 0xc7, 0x8e, 0xea, 0xa5, 0xfe,
726 0xfc, 0x76, 0x0e, 0x90, 0xc4, 0x92, 0x38, 0xad,
727 0x7b, 0x48, 0xe6, 0x6e, 0xf7, 0x21, 0xfd, 0x4e,
728 0x93, 0x0a, 0x7b, 0x41, 0x83, 0x68, 0xfb, 0x57,
729 0x51, 0x76, 0x34, 0xa9, 0x6c, 0x00, 0xaa, 0x4f,
730 0x66, 0x65, 0x98, 0x4a, 0x4f, 0xa3, 0xa0, 0xef,
731 0x69, 0x3f, 0xe3, 0x1c, 0x92, 0x8c, 0xfd, 0xd8,
732 0xe8, 0xde, 0x7c, 0x7f, 0x3e, 0x84, 0x8e, 0x69,
733 0x3c, 0xf1, 0xf2, 0x05, 0x46, 0xdc, 0x2f, 0x9d,
734 0x5e, 0x6e, 0x4c, 0xfb, 0xb5, 0x99, 0x2a, 0x59,
735 0x63, 0xc1, 0x34, 0xbc, 0x57, 0xc0, 0x0d, 0xb9,
736 0x61, 0x25, 0xf3, 0x33, 0x23, 0x51, 0xb6, 0x0d,
737 0x07, 0xa6, 0xab, 0x94, 0x4a, 0xb7, 0x2a, 0xea,
738 0xee, 0xac, 0xa3, 0xc3, 0x04, 0x8b, 0x0e, 0x56,
739 0xfe, 0x44, 0xa7, 0x39, 0xe2, 0xed, 0xed, 0xb4,
740 0x22, 0x2b, 0xac, 0x12, 0x32, 0x28, 0x91, 0xd8,
741 0xa5, 0xab, 0xff, 0x5f, 0xe0, 0x4b, 0xda, 0x78,
742 0x17, 0xda, 0xf1, 0x01, 0x5b, 0xcd, 0xe2, 0x5f,
743 0x50, 0x45, 0x73, 0x2b, 0xe4, 0x76, 0x77, 0xf4,
744 0x64, 0x1d, 0x43, 0xfb, 0x84, 0x7a, 0xea, 0x91,
745 0xae, 0xf9, 0x9e, 0xb7, 0xb4, 0xb0, 0x91, 0x5f,
746 0x16, 0x35, 0x9a, 0x11, 0xb8, 0xc7, 0xc1, 0x8c,
747 0xc6, 0x10, 0x8d, 0x2f, 0x63, 0x4a, 0xa7, 0x57,
748 0x3a, 0x51, 0xd6, 0x32, 0x2d, 0x64, 0x72, 0xd4,
749 0x66, 0xdc, 0x10, 0xa6, 0x67, 0xd6, 0x04, 0x23,
750 0x9d, 0x0a, 0x11, 0x77, 0xdd, 0x37, 0x94, 0x17,
751 0x3c, 0xbf, 0x8b, 0x65, 0xb0, 0x2e, 0x5e, 0x66,
752 0x47, 0x64, 0xac, 0xdd, 0xf0, 0x84, 0xfd, 0x39,
753 0xfa, 0x15, 0x5d, 0xef, 0xae, 0xca, 0xc1, 0x36,
754 0xa7, 0x5c, 0xbf, 0xc7, 0x08, 0xc2, 0x66, 0x00,
755 0x74, 0x74, 0x4e, 0x27, 0x3f, 0x55, 0x8a, 0xb7,
756 0x38, 0x66, 0x83, 0x6d, 0xcf, 0x99, 0x9e, 0x60,
757 0x8f, 0xdd, 0x2e, 0x62, 0x22, 0x0e, 0xef, 0x0c,
758 0x98, 0xa7, 0x85, 0x74, 0x3b, 0x9d, 0xec, 0x9e,
759 0xa9, 0x19, 0x72, 0xa5, 0x7f, 0x2c, 0x39, 0xb7,
760 0x7d, 0xb7, 0xf1, 0x12, 0x65, 0x27, 0x4b, 0x5a,
761 0xde, 0x17, 0xfe, 0xad, 0x44, 0xf3, 0x20, 0x4d,
762 0xfd, 0xe4, 0x1f, 0xb5, 0x81, 0xb0, 0x36, 0x37,
763 0x08, 0x6f, 0xc3, 0x0c, 0xe9, 0x85, 0x98, 0x82,
764 0xa9, 0x62, 0x0c, 0xc4, 0x97, 0xc0, 0x50, 0xc8,
765 0xa7, 0x3c, 0x50, 0x9f, 0x43, 0xb9, 0xcd, 0x5e,
766 0x4d, 0xfa, 0x1c, 0x4b, 0x0b, 0xa9, 0x98, 0x85,
767 0x38, 0x92, 0xac, 0x8d, 0xe4, 0xad, 0x9b, 0x98,
768 0xab, 0xd9, 0x38, 0xac, 0x62, 0x52, 0xa3, 0x22,
769 0x63, 0x0f, 0xbf, 0x95, 0x48, 0xdf, 0x69, 0xe7,
770 0x8b, 0x33, 0xd5, 0xb2, 0xbd, 0x05, 0x49, 0x49,
771 0x9d, 0x57, 0x73, 0x19, 0x33, 0xae, 0xfa, 0x33,
772 0xf1, 0x19, 0xa8, 0x80, 0xce, 0x04, 0x9f, 0xbc,
773 0x1d, 0x65, 0x82, 0x1b, 0xe5, 0x3a, 0x51, 0xc8,
774 0x1c, 0x21, 0xe3, 0x5d, 0xf3, 0x7d, 0x9b, 0x2f,
775 0x2c, 0x1d, 0x4a, 0x7f, 0x9b, 0x68, 0x35, 0xa3,
776 0xb2, 0x50, 0xf7, 0x62, 0x79, 0xcd, 0xf4, 0x98,
777 0x4f, 0xe5, 0x63, 0x7c, 0x3e, 0x45, 0x31, 0x8c,
778 0x16, 0xa0, 0x12, 0xc8, 0x58, 0xce, 0x39, 0xa6,
779 0xbc, 0x54, 0xdb, 0xc5, 0xe0, 0xd5, 0xba, 0xbc,
780 0xb9, 0x04, 0xf4, 0x8d, 0xe8, 0x2f, 0x15, 0x9d,
784 static struct crc_test {
785 u32 crc; /* random starting crc */
786 u32 start; /* random 6 bit offset in buf */
787 u32 length; /* random 11 bit length of test */
788 u32 crc_le; /* expected crc32_le result */
789 u32 crc_be; /* expected crc32_be result */
790 u32 crc32c_le; /* expected crc32c_le result */
793 {0x674bf11d, 0x00000038, 0x00000542, 0x0af6d466, 0xd8b6e4c1,
795 {0x35c672c6, 0x0000003a, 0x000001aa, 0xc6d3dfba, 0x28aaf3ad,
797 {0x496da28e, 0x00000039, 0x000005af, 0xd933660f, 0x5d57e81f,
799 {0x09a9b90e, 0x00000027, 0x000001f8, 0xb45fe007, 0xf45fca9a,
801 {0xdc97e5a9, 0x00000025, 0x000003b6, 0xf81a3562, 0xe0126ba2,
803 {0x47c58900, 0x0000000a, 0x000000b9, 0x8e58eccf, 0xf3afc793,
805 {0x292561e8, 0x0000000c, 0x00000403, 0xa2ba8aaf, 0x0b797aed,
807 {0x415037f6, 0x00000003, 0x00000676, 0xa17d52e8, 0x7f0fdf35,
809 {0x3466e707, 0x00000026, 0x00000042, 0x258319be, 0x75c484a2,
811 {0xafd1281b, 0x00000023, 0x000002ee, 0x4428eaf8, 0x06c7ad10,
813 {0xd3857b18, 0x00000028, 0x000004a2, 0x5c430821, 0xb062b7cb,
815 {0x1d825a8f, 0x0000002b, 0x0000050b, 0xd2c45f0c, 0xd68634e0,
817 {0x5033e3bc, 0x0000000b, 0x00000078, 0xa3ea4113, 0xac6d31fb,
819 {0x94f1fb5e, 0x0000000f, 0x000003a2, 0xfbfc50b1, 0x3cfe50ed,
821 {0xc9a0fe14, 0x00000009, 0x00000473, 0x5fb61894, 0x87070591,
823 {0x88a034b1, 0x0000001c, 0x000005ad, 0xc1b16053, 0x46f95c67,
825 {0xf0f72239, 0x00000020, 0x0000026d, 0xa6fa58f3, 0xf8c2c1dd,
827 {0xcc20a5e3, 0x0000003b, 0x0000067a, 0x7740185a, 0x308b979a,
829 {0xce589c95, 0x0000002b, 0x00000641, 0xd055e987, 0x40aae25b,
831 {0x78edc885, 0x00000035, 0x000005be, 0xa39cb14b, 0x035b0d1f,
833 {0x9d40a377, 0x0000003b, 0x00000038, 0x1f47ccd2, 0x197fbc9d,
835 {0x703d0e01, 0x0000003c, 0x000006f1, 0x88735e7c, 0xfed57c5a,
837 {0x776bf505, 0x0000000f, 0x000005b2, 0x5cc4fc01, 0xf32efb97,
839 {0x4a3e7854, 0x00000027, 0x000004b8, 0x8d923c82, 0x0cbfb4a2,
841 {0x209172dd, 0x0000003b, 0x00000356, 0xb89e9c2b, 0xd7868138,
843 {0x3ba4cc5b, 0x0000002f, 0x00000203, 0xe51601a9, 0x5b2a1032,
845 {0xfc62f297, 0x00000000, 0x00000079, 0x71a8e1a2, 0x5d88685f,
847 {0x64280b8b, 0x00000016, 0x000007ab, 0x0fa7a30c, 0xda3a455f,
849 {0x97dd724b, 0x00000033, 0x000007ad, 0x5788b2f4, 0xd7326d32,
851 {0x61394b52, 0x00000035, 0x00000571, 0xc66525f1, 0xcabe7fef,
853 {0x29b4faff, 0x00000024, 0x0000006e, 0xca13751e, 0x993648e0,
855 {0x29bfb1dc, 0x0000000b, 0x00000244, 0x436c43f7, 0x429f7a59,
857 {0x86ae934b, 0x00000035, 0x00000104, 0x0760ec93, 0x9cf7d0f4,
859 {0xc4c1024e, 0x0000002e, 0x000006b1, 0x6516a3ec, 0x19321f9c,
861 {0x3287a80a, 0x00000026, 0x00000496, 0x0b257eb1, 0x754ebd51,
863 {0xa4db423e, 0x00000023, 0x0000045d, 0x9b3a66dc, 0x873e9f11,
865 {0x7a1078df, 0x00000015, 0x0000014a, 0x8c2484c5, 0x6a628659,
867 {0x6048bd5b, 0x00000006, 0x0000006a, 0x897e3559, 0xac9961af,
869 {0xd8f9ea20, 0x0000003d, 0x00000277, 0x60eb905b, 0xed2aaf99,
871 {0xea5ec3b4, 0x0000002a, 0x000004fe, 0x869965dc, 0x6c1f833b,
873 {0x2dfb005d, 0x00000016, 0x00000345, 0x6a3b117e, 0xf05e8521,
875 {0x5a214ade, 0x00000020, 0x000005b6, 0x467f70be, 0xcb22ccd3,
877 {0xf0ab9cca, 0x00000032, 0x00000515, 0xed223df3, 0x7f3ef01d,
879 {0x91b444f9, 0x0000002e, 0x000007f8, 0x84e9a983, 0x5676756f,
881 {0x1b5d2ddb, 0x0000002e, 0x0000012c, 0xba638c4c, 0x3f42047b,
883 {0xd824d1bb, 0x0000003a, 0x000007b5, 0x6288653b, 0x3a3ebea0,
885 {0x0470180c, 0x00000034, 0x000001f0, 0x9d5b80d6, 0x3de08195,
887 {0xffaa3a3f, 0x00000036, 0x00000299, 0xf3a82ab8, 0x53e0c13d,
889 {0x6406cfeb, 0x00000023, 0x00000600, 0xa920b8e8, 0xe4e2acf4,
891 {0xb24aaa38, 0x0000003e, 0x000004a1, 0x657cc328, 0x5077b2c3,
893 {0x58b2ab7c, 0x00000039, 0x000002b4, 0x3a17ee7e, 0x9dcb3643,
895 {0x3db85970, 0x00000006, 0x000002b6, 0x95268b59, 0xb9812c10,
897 {0x857830c5, 0x00000003, 0x00000590, 0x4ef439d5, 0xf042161d,
899 {0xe1fcd978, 0x0000003e, 0x000007d8, 0xae8d8699, 0xce0a1ef5,
901 {0xb982a768, 0x00000016, 0x000006e0, 0x62fad3df, 0x5f8a067b,
903 {0x1d581ce8, 0x0000001e, 0x0000058b, 0xf0f5da53, 0x26e39eee,
905 {0x2456719b, 0x00000025, 0x00000503, 0x4296ac64, 0xd50e4c14,
907 {0xfae6d8f2, 0x00000000, 0x0000055d, 0x057fdf2e, 0x2a31391a,
909 {0xcba828e3, 0x00000039, 0x000002ce, 0xe3f22351, 0x8f00877b,
911 {0x13d25952, 0x0000000a, 0x0000072d, 0x76d4b4cc, 0x5eb67ec3,
913 {0x0342be3f, 0x00000015, 0x00000599, 0xec75d9f1, 0x9d4d2826,
915 {0xeaa344e0, 0x00000014, 0x000004d8, 0x72a4c981, 0x2064ea06,
917 {0xbbb52021, 0x0000003b, 0x00000272, 0x04af99fc, 0xaf042d35,
919 {0xb66384dc, 0x0000001d, 0x000007fc, 0xd7629116, 0x782bd801,
921 {0x616c01b6, 0x00000022, 0x000002c8, 0x5b1dab30, 0x783ce7d2,
923 {0xce2bdaad, 0x00000016, 0x0000062a, 0x932535c8, 0x3f02926d,
925 {0x00fe84d7, 0x00000005, 0x00000205, 0x850e50aa, 0x753d649c,
927 {0xbebdcb4c, 0x00000006, 0x0000055d, 0xbeaa37a2, 0x2d8c9eba,
929 {0xd8b1a02a, 0x00000010, 0x00000387, 0x5017d2fc, 0x503541a5,
931 {0x3b96cad2, 0x00000036, 0x00000347, 0x1d2372ae, 0x926cd90b,
933 {0xc94c1ed7, 0x00000005, 0x0000038b, 0x9e9fdb22, 0x144a9178,
935 {0x1aad454e, 0x00000025, 0x000002b2, 0xc3f6315c, 0x5c7a35b3,
937 {0xa4fec9a6, 0x00000000, 0x000006d6, 0x90be5080, 0xa4107605,
939 {0x1bbe71e2, 0x0000001f, 0x000002fd, 0x4e504c3b, 0x284ccaf1,
941 {0x4201c7e4, 0x00000002, 0x000002b7, 0x7822e3f9, 0x0cc912a9,
943 {0x23fddc96, 0x00000003, 0x00000627, 0x8a385125, 0x07767e78,
945 {0xd82ba25c, 0x00000016, 0x0000063e, 0x98e4148a, 0x283330c9,
947 {0x786f2032, 0x0000002d, 0x0000060f, 0xf201600a, 0xf561bfcd,
949 {0xfebe4e1f, 0x0000002a, 0x000004f2, 0x95e51961, 0xfd80dcab,
951 {0x1a6e0a39, 0x00000008, 0x00000672, 0x8af6c2a5, 0x78dd84cb,
953 {0x56000ab8, 0x0000000e, 0x000000e5, 0x36bacb8f, 0x22ee1f77,
955 {0x4717fe0c, 0x00000000, 0x000006ec, 0x8439f342, 0x5c8e03da,
957 {0xd5d5d68e, 0x0000003c, 0x000003a3, 0x46fff083, 0x177d1b39,
959 {0xc25dd6c6, 0x00000024, 0x000006c0, 0x5ceb8eb4, 0x892b0d16,
961 {0xe9b11300, 0x00000023, 0x00000683, 0x07a5d59a, 0x6c6a3208,
963 {0x95cd285e, 0x00000001, 0x00000047, 0x7b3a4368, 0x0202c07e,
965 {0xd9245a25, 0x0000001e, 0x000003a6, 0xd33c1841, 0x1936c0d5,
967 {0x103279db, 0x00000006, 0x0000039b, 0xca09b8a0, 0x77d62892,
969 {0x1cba3172, 0x00000027, 0x000001c8, 0xcb377194, 0xebe682db,
971 {0x8f613739, 0x0000000c, 0x000001df, 0xb4b0bc87, 0x7710bd43,
973 {0x1c6aa90d, 0x0000001b, 0x0000053c, 0x70559245, 0xda7894ac,
975 {0xaabe5b93, 0x0000003d, 0x00000715, 0xcdbf42fa, 0x0c3b99e7,
977 {0xf15dd038, 0x00000006, 0x000006db, 0x6e104aea, 0x8d5967f2,
979 {0x584dd49c, 0x00000020, 0x000007bc, 0x36b6cfd6, 0xad4e23b2,
981 {0x5d8c9506, 0x00000020, 0x00000470, 0x4c62378e, 0x31d92640,
983 {0xb80d17b0, 0x00000032, 0x00000346, 0x22a5bb88, 0x9a7ec89f,
985 {0xdaf0592e, 0x00000023, 0x000007b0, 0x3cab3f99, 0x9b1fdd99,
987 {0x4793cc85, 0x0000000d, 0x00000706, 0xe82e04f6, 0xed3db6b7,
989 {0x82ebf64e, 0x00000009, 0x000007c3, 0x69d590a9, 0x9efa8499,
991 {0xb18a0319, 0x00000026, 0x000007db, 0x1cf98dcc, 0x8fa9ad6a,
995 #include <linux/time.h>
997 static int __init crc32c_test(void)
1002 struct timespec start, stop;
1004 unsigned long flags;
1006 /* keep static to prevent cache warming code from
1007 * getting eliminated by the compiler */
1010 /* pre-warm the cache */
1011 for (i = 0; i < 100; i++) {
1012 bytes += 2*test[i].length;
1014 crc ^= __crc32c_le(test[i].crc, test_buf +
1015 test[i].start, test[i].length);
1018 /* reduce OS noise */
1019 local_irq_save(flags);
1020 local_irq_disable();
1022 getnstimeofday(&start);
1023 for (i = 0; i < 100; i++) {
1024 if (test[i].crc32c_le != __crc32c_le(test[i].crc, test_buf +
1025 test[i].start, test[i].length))
1028 getnstimeofday(&stop);
1030 local_irq_restore(flags);
1033 nsec = stop.tv_nsec - start.tv_nsec +
1034 1000000000 * (stop.tv_sec - start.tv_sec);
1036 pr_info("crc32c: CRC_LE_BITS = %d\n", CRC_LE_BITS);
1039 pr_warn("crc32c: %d self tests failed\n", errors);
1041 pr_info("crc32c: self tests passed, processed %d bytes in %lld nsec\n",
1048 static int __init crc32_test(void)
1053 struct timespec start, stop;
1055 unsigned long flags;
1057 /* keep static to prevent cache warming code from
1058 * getting eliminated by the compiler */
1061 /* pre-warm the cache */
1062 for (i = 0; i < 100; i++) {
1063 bytes += 2*test[i].length;
1065 crc ^= crc32_le(test[i].crc, test_buf +
1066 test[i].start, test[i].length);
1068 crc ^= crc32_be(test[i].crc, test_buf +
1069 test[i].start, test[i].length);
1072 /* reduce OS noise */
1073 local_irq_save(flags);
1074 local_irq_disable();
1076 getnstimeofday(&start);
1077 for (i = 0; i < 100; i++) {
1078 if (test[i].crc_le != crc32_le(test[i].crc, test_buf +
1079 test[i].start, test[i].length))
1082 if (test[i].crc_be != crc32_be(test[i].crc, test_buf +
1083 test[i].start, test[i].length))
1086 getnstimeofday(&stop);
1088 local_irq_restore(flags);
1091 nsec = stop.tv_nsec - start.tv_nsec +
1092 1000000000 * (stop.tv_sec - start.tv_sec);
1094 pr_info("crc32: CRC_LE_BITS = %d, CRC_BE BITS = %d\n",
1095 CRC_LE_BITS, CRC_BE_BITS);
1098 pr_warn("crc32: %d self tests failed\n", errors);
1100 pr_info("crc32: self tests passed, processed %d bytes in %lld nsec\n",
1107 static int __init crc32test_init(void)
1114 static void __exit crc32_exit(void)
1118 module_init(crc32test_init);
1119 module_exit(crc32_exit);
1120 #endif /* CONFIG_CRC32_SELFTEST */