]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blob - libfrog/crc32.c
libxfs: remove crc32 functions
[thirdparty/xfsprogs-dev.git] / libfrog / crc32.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * Aug 8, 2011 Bob Pearson with help from Joakim Tjernlund and George Spelvin
4 * cleaned up code to current version of sparse and added the slicing-by-8
5 * 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
10 * GNU GPL v2.
11 * Oct 12, 2000 Matt Domsch <Matt_Domsch@dell.com>
12 * Same crc32 function was used in 5 other places in the kernel.
13 * I made one version, and deleted the others.
14 * There are various incantations of crc32(). Some use a seed of 0 or ~0.
15 * Some xor at the end with ~0. The generic crc32() function takes
16 * seed as an argument, and doesn't xor at the end. Then individual
17 * users can do whatever they need.
18 * drivers/net/smc9194.c uses seed ~0, doesn't xor with ~0.
19 * fs/jffs2 uses seed 0, doesn't xor with ~0.
20 * fs/partitions/efi.c uses seed ~0, xor's with ~0.
21 */
22
23 /* see: Documentation/crc32.txt for a description of algorithms */
24
25 /*
26 * lifted from the 3.8-rc2 kernel source for xfsprogs. Killed CONFIG_X86
27 * specific bits for just the generic algorithm. Also removed the big endian
28 * version of the algorithm as XFS only uses the little endian CRC version to
29 * match the hardware acceleration available on Intel CPUs.
30 */
31
32 #include "platform_defs.h"
33 #include "xfs.h"
34 #include "xfs_arch.h"
35 #include "crc32defs.h"
36
37 /* types specifc to this file */
38 typedef __u8 u8;
39 typedef __u16 u16;
40 typedef __u32 u32;
41 typedef __u32 u64;
42 #define __pure
43
44 #if CRC_LE_BITS > 8
45 # define tole(x) ((__force u32) __constant_cpu_to_le32(x))
46 #else
47 # define tole(x) (x)
48 #endif
49
50 #include "crc32table.h"
51
52 #if CRC_LE_BITS > 8
53
54 /* implements slicing-by-4 or slicing-by-8 algorithm */
55 static inline u32
56 crc32_body(u32 crc, unsigned char const *buf, size_t len, const u32 (*tab)[256])
57 {
58 #if __BYTE_ORDER == __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])
64 # elif __BYTE_ORDER == __BIG_ENDIAN
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])
70 # else
71 # error What endian are you?
72 # endif
73 const u32 *b;
74 size_t rem_len;
75 const u32 *t0=tab[0], *t1=tab[1], *t2=tab[2], *t3=tab[3];
76 # if CRC_LE_BITS != 32
77 const u32 *t4 = tab[4], *t5 = tab[5], *t6 = tab[6], *t7 = tab[7];
78 # endif
79 u32 q;
80
81 /* Align it */
82 if (((long)buf & 3) && len) {
83 do {
84 DO_CRC(*buf++);
85 } while ((--len) && ((long)buf)&3);
86 }
87
88 # if CRC_LE_BITS == 32
89 rem_len = len & 3;
90 len = len >> 2;
91 # else
92 rem_len = len & 7;
93 len = len >> 3;
94 # endif
95
96 b = (const u32 *)buf;
97 for (--b; len; --len) {
98 q = crc ^ *++b; /* use pre increment for speed */
99 # if CRC_LE_BITS == 32
100 crc = DO_CRC4;
101 # else
102 crc = DO_CRC8;
103 q = *++b;
104 crc ^= DO_CRC4;
105 # endif
106 }
107 len = rem_len;
108 /* And the last few bytes */
109 if (len) {
110 u8 *p = (u8 *)(b + 1) - 1;
111 do {
112 DO_CRC(*++p); /* use pre increment for speed */
113 } while (--len);
114 }
115 return crc;
116 #undef DO_CRC
117 #undef DO_CRC4
118 #undef DO_CRC8
119 }
120 #endif
121
122 /**
123 * crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32
124 * @crc: seed value for computation. ~0 for Ethernet, sometimes 0 for
125 * other uses, or the previous crc32 value if computing incrementally.
126 * @p: pointer to buffer over which CRC is run
127 * @len: length of buffer @p
128 */
129 static inline u32 __pure crc32_le_generic(u32 crc, unsigned char const *p,
130 size_t len, const u32 (*tab)[256],
131 u32 polynomial)
132 {
133 #if CRC_LE_BITS == 1
134 int i;
135 while (len--) {
136 crc ^= *p++;
137 for (i = 0; i < 8; i++)
138 crc = (crc >> 1) ^ ((crc & 1) ? polynomial : 0);
139 }
140 # elif CRC_LE_BITS == 2
141 while (len--) {
142 crc ^= *p++;
143 crc = (crc >> 2) ^ tab[0][crc & 3];
144 crc = (crc >> 2) ^ tab[0][crc & 3];
145 crc = (crc >> 2) ^ tab[0][crc & 3];
146 crc = (crc >> 2) ^ tab[0][crc & 3];
147 }
148 # elif CRC_LE_BITS == 4
149 while (len--) {
150 crc ^= *p++;
151 crc = (crc >> 4) ^ tab[0][crc & 15];
152 crc = (crc >> 4) ^ tab[0][crc & 15];
153 }
154 # elif CRC_LE_BITS == 8
155 /* aka Sarwate algorithm */
156 while (len--) {
157 crc ^= *p++;
158 crc = (crc >> 8) ^ tab[0][crc & 255];
159 }
160 # else
161 crc = (__force u32) cpu_to_le32(crc);
162 crc = crc32_body(crc, p, len, tab);
163 crc = le32_to_cpu((__force __le32)crc);
164 #endif
165 return crc;
166 }
167
168 #if CRC_LE_BITS == 1
169 u32 __pure crc32c_le(u32 crc, unsigned char const *p, size_t len)
170 {
171 return crc32_le_generic(crc, p, len, NULL, CRC32C_POLY_LE);
172 }
173 #else
174 u32 __pure crc32c_le(u32 crc, unsigned char const *p, size_t len)
175 {
176 return crc32_le_generic(crc, p, len,
177 (const u32 (*)[256])crc32ctable_le, CRC32C_POLY_LE);
178 }
179 #endif
180
181
182 #ifdef CRC32_SELFTEST
183
184 /* 4096 random bytes */
185 static u8 __attribute__((__aligned__(8))) test_buf[] =
186 {
187 0x5b, 0x85, 0x21, 0xcb, 0x09, 0x68, 0x7d, 0x30,
188 0xc7, 0x69, 0xd7, 0x30, 0x92, 0xde, 0x59, 0xe4,
189 0xc9, 0x6e, 0x8b, 0xdb, 0x98, 0x6b, 0xaa, 0x60,
190 0xa8, 0xb5, 0xbc, 0x6c, 0xa9, 0xb1, 0x5b, 0x2c,
191 0xea, 0xb4, 0x92, 0x6a, 0x3f, 0x79, 0x91, 0xe4,
192 0xe9, 0x70, 0x51, 0x8c, 0x7f, 0x95, 0x6f, 0x1a,
193 0x56, 0xa1, 0x5c, 0x27, 0x03, 0x67, 0x9f, 0x3a,
194 0xe2, 0x31, 0x11, 0x29, 0x6b, 0x98, 0xfc, 0xc4,
195 0x53, 0x24, 0xc5, 0x8b, 0xce, 0x47, 0xb2, 0xb9,
196 0x32, 0xcb, 0xc1, 0xd0, 0x03, 0x57, 0x4e, 0xd4,
197 0xe9, 0x3c, 0xa1, 0x63, 0xcf, 0x12, 0x0e, 0xca,
198 0xe1, 0x13, 0xd1, 0x93, 0xa6, 0x88, 0x5c, 0x61,
199 0x5b, 0xbb, 0xf0, 0x19, 0x46, 0xb4, 0xcf, 0x9e,
200 0xb6, 0x6b, 0x4c, 0x3a, 0xcf, 0x60, 0xf9, 0x7a,
201 0x8d, 0x07, 0x63, 0xdb, 0x40, 0xe9, 0x0b, 0x6f,
202 0xad, 0x97, 0xf1, 0xed, 0xd0, 0x1e, 0x26, 0xfd,
203 0xbf, 0xb7, 0xc8, 0x04, 0x94, 0xf8, 0x8b, 0x8c,
204 0xf1, 0xab, 0x7a, 0xd4, 0xdd, 0xf3, 0xe8, 0x88,
205 0xc3, 0xed, 0x17, 0x8a, 0x9b, 0x40, 0x0d, 0x53,
206 0x62, 0x12, 0x03, 0x5f, 0x1b, 0x35, 0x32, 0x1f,
207 0xb4, 0x7b, 0x93, 0x78, 0x0d, 0xdb, 0xce, 0xa4,
208 0xc0, 0x47, 0xd5, 0xbf, 0x68, 0xe8, 0x5d, 0x74,
209 0x8f, 0x8e, 0x75, 0x1c, 0xb2, 0x4f, 0x9a, 0x60,
210 0xd1, 0xbe, 0x10, 0xf4, 0x5c, 0xa1, 0x53, 0x09,
211 0xa5, 0xe0, 0x09, 0x54, 0x85, 0x5c, 0xdc, 0x07,
212 0xe7, 0x21, 0x69, 0x7b, 0x8a, 0xfd, 0x90, 0xf1,
213 0x22, 0xd0, 0xb4, 0x36, 0x28, 0xe6, 0xb8, 0x0f,
214 0x39, 0xde, 0xc8, 0xf3, 0x86, 0x60, 0x34, 0xd2,
215 0x5e, 0xdf, 0xfd, 0xcf, 0x0f, 0xa9, 0x65, 0xf0,
216 0xd5, 0x4d, 0x96, 0x40, 0xe3, 0xdf, 0x3f, 0x95,
217 0x5a, 0x39, 0x19, 0x93, 0xf4, 0x75, 0xce, 0x22,
218 0x00, 0x1c, 0x93, 0xe2, 0x03, 0x66, 0xf4, 0x93,
219 0x73, 0x86, 0x81, 0x8e, 0x29, 0x44, 0x48, 0x86,
220 0x61, 0x7c, 0x48, 0xa3, 0x43, 0xd2, 0x9c, 0x8d,
221 0xd4, 0x95, 0xdd, 0xe1, 0x22, 0x89, 0x3a, 0x40,
222 0x4c, 0x1b, 0x8a, 0x04, 0xa8, 0x09, 0x69, 0x8b,
223 0xea, 0xc6, 0x55, 0x8e, 0x57, 0xe6, 0x64, 0x35,
224 0xf0, 0xc7, 0x16, 0x9f, 0x5d, 0x5e, 0x86, 0x40,
225 0x46, 0xbb, 0xe5, 0x45, 0x88, 0xfe, 0xc9, 0x63,
226 0x15, 0xfb, 0xf5, 0xbd, 0x71, 0x61, 0xeb, 0x7b,
227 0x78, 0x70, 0x07, 0x31, 0x03, 0x9f, 0xb2, 0xc8,
228 0xa7, 0xab, 0x47, 0xfd, 0xdf, 0xa0, 0x78, 0x72,
229 0xa4, 0x2a, 0xe4, 0xb6, 0xba, 0xc0, 0x1e, 0x86,
230 0x71, 0xe6, 0x3d, 0x18, 0x37, 0x70, 0xe6, 0xff,
231 0xe0, 0xbc, 0x0b, 0x22, 0xa0, 0x1f, 0xd3, 0xed,
232 0xa2, 0x55, 0x39, 0xab, 0xa8, 0x13, 0x73, 0x7c,
233 0x3f, 0xb2, 0xd6, 0x19, 0xac, 0xff, 0x99, 0xed,
234 0xe8, 0xe6, 0xa6, 0x22, 0xe3, 0x9c, 0xf1, 0x30,
235 0xdc, 0x01, 0x0a, 0x56, 0xfa, 0xe4, 0xc9, 0x99,
236 0xdd, 0xa8, 0xd8, 0xda, 0x35, 0x51, 0x73, 0xb4,
237 0x40, 0x86, 0x85, 0xdb, 0x5c, 0xd5, 0x85, 0x80,
238 0x14, 0x9c, 0xfd, 0x98, 0xa9, 0x82, 0xc5, 0x37,
239 0xff, 0x32, 0x5d, 0xd0, 0x0b, 0xfa, 0xdc, 0x04,
240 0x5e, 0x09, 0xd2, 0xca, 0x17, 0x4b, 0x1a, 0x8e,
241 0x15, 0xe1, 0xcc, 0x4e, 0x52, 0x88, 0x35, 0xbd,
242 0x48, 0xfe, 0x15, 0xa0, 0x91, 0xfd, 0x7e, 0x6c,
243 0x0e, 0x5d, 0x79, 0x1b, 0x81, 0x79, 0xd2, 0x09,
244 0x34, 0x70, 0x3d, 0x81, 0xec, 0xf6, 0x24, 0xbb,
245 0xfb, 0xf1, 0x7b, 0xdf, 0x54, 0xea, 0x80, 0x9b,
246 0xc7, 0x99, 0x9e, 0xbd, 0x16, 0x78, 0x12, 0x53,
247 0x5e, 0x01, 0xa7, 0x4e, 0xbd, 0x67, 0xe1, 0x9b,
248 0x4c, 0x0e, 0x61, 0x45, 0x97, 0xd2, 0xf0, 0x0f,
249 0xfe, 0x15, 0x08, 0xb7, 0x11, 0x4c, 0xe7, 0xff,
250 0x81, 0x53, 0xff, 0x91, 0x25, 0x38, 0x7e, 0x40,
251 0x94, 0xe5, 0xe0, 0xad, 0xe6, 0xd9, 0x79, 0xb6,
252 0x92, 0xc9, 0xfc, 0xde, 0xc3, 0x1a, 0x23, 0xbb,
253 0xdd, 0xc8, 0x51, 0x0c, 0x3a, 0x72, 0xfa, 0x73,
254 0x6f, 0xb7, 0xee, 0x61, 0x39, 0x03, 0x01, 0x3f,
255 0x7f, 0x94, 0x2e, 0x2e, 0xba, 0x3a, 0xbb, 0xb4,
256 0xfa, 0x6a, 0x17, 0xfe, 0xea, 0xef, 0x5e, 0x66,
257 0x97, 0x3f, 0x32, 0x3d, 0xd7, 0x3e, 0xb1, 0xf1,
258 0x6c, 0x14, 0x4c, 0xfd, 0x37, 0xd3, 0x38, 0x80,
259 0xfb, 0xde, 0xa6, 0x24, 0x1e, 0xc8, 0xca, 0x7f,
260 0x3a, 0x93, 0xd8, 0x8b, 0x18, 0x13, 0xb2, 0xe5,
261 0xe4, 0x93, 0x05, 0x53, 0x4f, 0x84, 0x66, 0xa7,
262 0x58, 0x5c, 0x7b, 0x86, 0x52, 0x6d, 0x0d, 0xce,
263 0xa4, 0x30, 0x7d, 0xb6, 0x18, 0x9f, 0xeb, 0xff,
264 0x22, 0xbb, 0x72, 0x29, 0xb9, 0x44, 0x0b, 0x48,
265 0x1e, 0x84, 0x71, 0x81, 0xe3, 0x6d, 0x73, 0x26,
266 0x92, 0xb4, 0x4d, 0x2a, 0x29, 0xb8, 0x1f, 0x72,
267 0xed, 0xd0, 0xe1, 0x64, 0x77, 0xea, 0x8e, 0x88,
268 0x0f, 0xef, 0x3f, 0xb1, 0x3b, 0xad, 0xf9, 0xc9,
269 0x8b, 0xd0, 0xac, 0xc6, 0xcc, 0xa9, 0x40, 0xcc,
270 0x76, 0xf6, 0x3b, 0x53, 0xb5, 0x88, 0xcb, 0xc8,
271 0x37, 0xf1, 0xa2, 0xba, 0x23, 0x15, 0x99, 0x09,
272 0xcc, 0xe7, 0x7a, 0x3b, 0x37, 0xf7, 0x58, 0xc8,
273 0x46, 0x8c, 0x2b, 0x2f, 0x4e, 0x0e, 0xa6, 0x5c,
274 0xea, 0x85, 0x55, 0xba, 0x02, 0x0e, 0x0e, 0x48,
275 0xbc, 0xe1, 0xb1, 0x01, 0x35, 0x79, 0x13, 0x3d,
276 0x1b, 0xc0, 0x53, 0x68, 0x11, 0xe7, 0x95, 0x0f,
277 0x9d, 0x3f, 0x4c, 0x47, 0x7b, 0x4d, 0x1c, 0xae,
278 0x50, 0x9b, 0xcb, 0xdd, 0x05, 0x8d, 0x9a, 0x97,
279 0xfd, 0x8c, 0xef, 0x0c, 0x1d, 0x67, 0x73, 0xa8,
280 0x28, 0x36, 0xd5, 0xb6, 0x92, 0x33, 0x40, 0x75,
281 0x0b, 0x51, 0xc3, 0x64, 0xba, 0x1d, 0xc2, 0xcc,
282 0xee, 0x7d, 0x54, 0x0f, 0x27, 0x69, 0xa7, 0x27,
283 0x63, 0x30, 0x29, 0xd9, 0xc8, 0x84, 0xd8, 0xdf,
284 0x9f, 0x68, 0x8d, 0x04, 0xca, 0xa6, 0xc5, 0xc7,
285 0x7a, 0x5c, 0xc8, 0xd1, 0xcb, 0x4a, 0xec, 0xd0,
286 0xd8, 0x20, 0x69, 0xc5, 0x17, 0xcd, 0x78, 0xc8,
287 0x75, 0x23, 0x30, 0x69, 0xc9, 0xd4, 0xea, 0x5c,
288 0x4f, 0x6b, 0x86, 0x3f, 0x8b, 0xfe, 0xee, 0x44,
289 0xc9, 0x7c, 0xb7, 0xdd, 0x3e, 0xe5, 0xec, 0x54,
290 0x03, 0x3e, 0xaa, 0x82, 0xc6, 0xdf, 0xb2, 0x38,
291 0x0e, 0x5d, 0xb3, 0x88, 0xd9, 0xd3, 0x69, 0x5f,
292 0x8f, 0x70, 0x8a, 0x7e, 0x11, 0xd9, 0x1e, 0x7b,
293 0x38, 0xf1, 0x42, 0x1a, 0xc0, 0x35, 0xf5, 0xc7,
294 0x36, 0x85, 0xf5, 0xf7, 0xb8, 0x7e, 0xc7, 0xef,
295 0x18, 0xf1, 0x63, 0xd6, 0x7a, 0xc6, 0xc9, 0x0e,
296 0x4d, 0x69, 0x4f, 0x84, 0xef, 0x26, 0x41, 0x0c,
297 0xec, 0xc7, 0xe0, 0x7e, 0x3c, 0x67, 0x01, 0x4c,
298 0x62, 0x1a, 0x20, 0x6f, 0xee, 0x47, 0x4d, 0xc0,
299 0x99, 0x13, 0x8d, 0x91, 0x4a, 0x26, 0xd4, 0x37,
300 0x28, 0x90, 0x58, 0x75, 0x66, 0x2b, 0x0a, 0xdf,
301 0xda, 0xee, 0x92, 0x25, 0x90, 0x62, 0x39, 0x9e,
302 0x44, 0x98, 0xad, 0xc1, 0x88, 0xed, 0xe4, 0xb4,
303 0xaf, 0xf5, 0x8c, 0x9b, 0x48, 0x4d, 0x56, 0x60,
304 0x97, 0x0f, 0x61, 0x59, 0x9e, 0xa6, 0x27, 0xfe,
305 0xc1, 0x91, 0x15, 0x38, 0xb8, 0x0f, 0xae, 0x61,
306 0x7d, 0x26, 0x13, 0x5a, 0x73, 0xff, 0x1c, 0xa3,
307 0x61, 0x04, 0x58, 0x48, 0x55, 0x44, 0x11, 0xfe,
308 0x15, 0xca, 0xc3, 0xbd, 0xca, 0xc5, 0xb4, 0x40,
309 0x5d, 0x1b, 0x7f, 0x39, 0xb5, 0x9c, 0x35, 0xec,
310 0x61, 0x15, 0x32, 0x32, 0xb8, 0x4e, 0x40, 0x9f,
311 0x17, 0x1f, 0x0a, 0x4d, 0xa9, 0x91, 0xef, 0xb7,
312 0xb0, 0xeb, 0xc2, 0x83, 0x9a, 0x6c, 0xd2, 0x79,
313 0x43, 0x78, 0x5e, 0x2f, 0xe5, 0xdd, 0x1a, 0x3c,
314 0x45, 0xab, 0x29, 0x40, 0x3a, 0x37, 0x5b, 0x6f,
315 0xd7, 0xfc, 0x48, 0x64, 0x3c, 0x49, 0xfb, 0x21,
316 0xbe, 0xc3, 0xff, 0x07, 0xfb, 0x17, 0xe9, 0xc9,
317 0x0c, 0x4c, 0x5c, 0x15, 0x9e, 0x8e, 0x22, 0x30,
318 0x0a, 0xde, 0x48, 0x7f, 0xdb, 0x0d, 0xd1, 0x2b,
319 0x87, 0x38, 0x9e, 0xcc, 0x5a, 0x01, 0x16, 0xee,
320 0x75, 0x49, 0x0d, 0x30, 0x01, 0x34, 0x6a, 0xb6,
321 0x9a, 0x5a, 0x2a, 0xec, 0xbb, 0x48, 0xac, 0xd3,
322 0x77, 0x83, 0xd8, 0x08, 0x86, 0x4f, 0x48, 0x09,
323 0x29, 0x41, 0x79, 0xa1, 0x03, 0x12, 0xc4, 0xcd,
324 0x90, 0x55, 0x47, 0x66, 0x74, 0x9a, 0xcc, 0x4f,
325 0x35, 0x8c, 0xd6, 0x98, 0xef, 0xeb, 0x45, 0xb9,
326 0x9a, 0x26, 0x2f, 0x39, 0xa5, 0x70, 0x6d, 0xfc,
327 0xb4, 0x51, 0xee, 0xf4, 0x9c, 0xe7, 0x38, 0x59,
328 0xad, 0xf4, 0xbc, 0x46, 0xff, 0x46, 0x8e, 0x60,
329 0x9c, 0xa3, 0x60, 0x1d, 0xf8, 0x26, 0x72, 0xf5,
330 0x72, 0x9d, 0x68, 0x80, 0x04, 0xf6, 0x0b, 0xa1,
331 0x0a, 0xd5, 0xa7, 0x82, 0x3a, 0x3e, 0x47, 0xa8,
332 0x5a, 0xde, 0x59, 0x4f, 0x7b, 0x07, 0xb3, 0xe9,
333 0x24, 0x19, 0x3d, 0x34, 0x05, 0xec, 0xf1, 0xab,
334 0x6e, 0x64, 0x8f, 0xd3, 0xe6, 0x41, 0x86, 0x80,
335 0x70, 0xe3, 0x8d, 0x60, 0x9c, 0x34, 0x25, 0x01,
336 0x07, 0x4d, 0x19, 0x41, 0x4e, 0x3d, 0x5c, 0x7e,
337 0xa8, 0xf5, 0xcc, 0xd5, 0x7b, 0xe2, 0x7d, 0x3d,
338 0x49, 0x86, 0x7d, 0x07, 0xb7, 0x10, 0xe3, 0x35,
339 0xb8, 0x84, 0x6d, 0x76, 0xab, 0x17, 0xc6, 0x38,
340 0xb4, 0xd3, 0x28, 0x57, 0xad, 0xd3, 0x88, 0x5a,
341 0xda, 0xea, 0xc8, 0x94, 0xcc, 0x37, 0x19, 0xac,
342 0x9c, 0x9f, 0x4b, 0x00, 0x15, 0xc0, 0xc8, 0xca,
343 0x1f, 0x15, 0xaa, 0xe0, 0xdb, 0xf9, 0x2f, 0x57,
344 0x1b, 0x24, 0xc7, 0x6f, 0x76, 0x29, 0xfb, 0xed,
345 0x25, 0x0d, 0xc0, 0xfe, 0xbd, 0x5a, 0xbf, 0x20,
346 0x08, 0x51, 0x05, 0xec, 0x71, 0xa3, 0xbf, 0xef,
347 0x5e, 0x99, 0x75, 0xdb, 0x3c, 0x5f, 0x9a, 0x8c,
348 0xbb, 0x19, 0x5c, 0x0e, 0x93, 0x19, 0xf8, 0x6a,
349 0xbc, 0xf2, 0x12, 0x54, 0x2f, 0xcb, 0x28, 0x64,
350 0x88, 0xb3, 0x92, 0x0d, 0x96, 0xd1, 0xa6, 0xe4,
351 0x1f, 0xf1, 0x4d, 0xa4, 0xab, 0x1c, 0xee, 0x54,
352 0xf2, 0xad, 0x29, 0x6d, 0x32, 0x37, 0xb2, 0x16,
353 0x77, 0x5c, 0xdc, 0x2e, 0x54, 0xec, 0x75, 0x26,
354 0xc6, 0x36, 0xd9, 0x17, 0x2c, 0xf1, 0x7a, 0xdc,
355 0x4b, 0xf1, 0xe2, 0xd9, 0x95, 0xba, 0xac, 0x87,
356 0xc1, 0xf3, 0x8e, 0x58, 0x08, 0xd8, 0x87, 0x60,
357 0xc9, 0xee, 0x6a, 0xde, 0xa4, 0xd2, 0xfc, 0x0d,
358 0xe5, 0x36, 0xc4, 0x5c, 0x52, 0xb3, 0x07, 0x54,
359 0x65, 0x24, 0xc1, 0xb1, 0xd1, 0xb1, 0x53, 0x13,
360 0x31, 0x79, 0x7f, 0x05, 0x76, 0xeb, 0x37, 0x59,
361 0x15, 0x2b, 0xd1, 0x3f, 0xac, 0x08, 0x97, 0xeb,
362 0x91, 0x98, 0xdf, 0x6c, 0x09, 0x0d, 0x04, 0x9f,
363 0xdc, 0x3b, 0x0e, 0x60, 0x68, 0x47, 0x23, 0x15,
364 0x16, 0xc6, 0x0b, 0x35, 0xf8, 0x77, 0xa2, 0x78,
365 0x50, 0xd4, 0x64, 0x22, 0x33, 0xff, 0xfb, 0x93,
366 0x71, 0x46, 0x50, 0x39, 0x1b, 0x9c, 0xea, 0x4e,
367 0x8d, 0x0c, 0x37, 0xe5, 0x5c, 0x51, 0x3a, 0x31,
368 0xb2, 0x85, 0x84, 0x3f, 0x41, 0xee, 0xa2, 0xc1,
369 0xc6, 0x13, 0x3b, 0x54, 0x28, 0xd2, 0x18, 0x37,
370 0xcc, 0x46, 0x9f, 0x6a, 0x91, 0x3d, 0x5a, 0x15,
371 0x3c, 0x89, 0xa3, 0x61, 0x06, 0x7d, 0x2e, 0x78,
372 0xbe, 0x7d, 0x40, 0xba, 0x2f, 0x95, 0xb1, 0x2f,
373 0x87, 0x3b, 0x8a, 0xbe, 0x6a, 0xf4, 0xc2, 0x31,
374 0x74, 0xee, 0x91, 0xe0, 0x23, 0xaa, 0x5d, 0x7f,
375 0xdd, 0xf0, 0x44, 0x8c, 0x0b, 0x59, 0x2b, 0xfc,
376 0x48, 0x3a, 0xdf, 0x07, 0x05, 0x38, 0x6c, 0xc9,
377 0xeb, 0x18, 0x24, 0x68, 0x8d, 0x58, 0x98, 0xd3,
378 0x31, 0xa3, 0xe4, 0x70, 0x59, 0xb1, 0x21, 0xbe,
379 0x7e, 0x65, 0x7d, 0xb8, 0x04, 0xab, 0xf6, 0xe4,
380 0xd7, 0xda, 0xec, 0x09, 0x8f, 0xda, 0x6d, 0x24,
381 0x07, 0xcc, 0x29, 0x17, 0x05, 0x78, 0x1a, 0xc1,
382 0xb1, 0xce, 0xfc, 0xaa, 0x2d, 0xe7, 0xcc, 0x85,
383 0x84, 0x84, 0x03, 0x2a, 0x0c, 0x3f, 0xa9, 0xf8,
384 0xfd, 0x84, 0x53, 0x59, 0x5c, 0xf0, 0xd4, 0x09,
385 0xf0, 0xd2, 0x6c, 0x32, 0x03, 0xb0, 0xa0, 0x8c,
386 0x52, 0xeb, 0x23, 0x91, 0x88, 0x43, 0x13, 0x46,
387 0xf6, 0x1e, 0xb4, 0x1b, 0xf5, 0x8e, 0x3a, 0xb5,
388 0x3d, 0x00, 0xf6, 0xe5, 0x08, 0x3d, 0x5f, 0x39,
389 0xd3, 0x21, 0x69, 0xbc, 0x03, 0x22, 0x3a, 0xd2,
390 0x5c, 0x84, 0xf8, 0x15, 0xc4, 0x80, 0x0b, 0xbc,
391 0x29, 0x3c, 0xf3, 0x95, 0x98, 0xcd, 0x8f, 0x35,
392 0xbc, 0xa5, 0x3e, 0xfc, 0xd4, 0x13, 0x9e, 0xde,
393 0x4f, 0xce, 0x71, 0x9d, 0x09, 0xad, 0xf2, 0x80,
394 0x6b, 0x65, 0x7f, 0x03, 0x00, 0x14, 0x7c, 0x15,
395 0x85, 0x40, 0x6d, 0x70, 0xea, 0xdc, 0xb3, 0x63,
396 0x35, 0x4f, 0x4d, 0xe0, 0xd9, 0xd5, 0x3c, 0x58,
397 0x56, 0x23, 0x80, 0xe2, 0x36, 0xdd, 0x75, 0x1d,
398 0x94, 0x11, 0x41, 0x8e, 0xe0, 0x81, 0x8e, 0xcf,
399 0xe0, 0xe5, 0xf6, 0xde, 0xd1, 0xe7, 0x04, 0x12,
400 0x79, 0x92, 0x2b, 0x71, 0x2a, 0x79, 0x8b, 0x7c,
401 0x44, 0x79, 0x16, 0x30, 0x4e, 0xf4, 0xf6, 0x9b,
402 0xb7, 0x40, 0xa3, 0x5a, 0xa7, 0x69, 0x3e, 0xc1,
403 0x3a, 0x04, 0xd0, 0x88, 0xa0, 0x3b, 0xdd, 0xc6,
404 0x9e, 0x7e, 0x1e, 0x1e, 0x8f, 0x44, 0xf7, 0x73,
405 0x67, 0x1e, 0x1a, 0x78, 0xfa, 0x62, 0xf4, 0xa9,
406 0xa8, 0xc6, 0x5b, 0xb8, 0xfa, 0x06, 0x7d, 0x5e,
407 0x38, 0x1c, 0x9a, 0x39, 0xe9, 0x39, 0x98, 0x22,
408 0x0b, 0xa7, 0xac, 0x0b, 0xf3, 0xbc, 0xf1, 0xeb,
409 0x8c, 0x81, 0xe3, 0x48, 0x8a, 0xed, 0x42, 0xc2,
410 0x38, 0xcf, 0x3e, 0xda, 0xd2, 0x89, 0x8d, 0x9c,
411 0x53, 0xb5, 0x2f, 0x41, 0x01, 0x26, 0x84, 0x9c,
412 0xa3, 0x56, 0xf6, 0x49, 0xc7, 0xd4, 0x9f, 0x93,
413 0x1b, 0x96, 0x49, 0x5e, 0xad, 0xb3, 0x84, 0x1f,
414 0x3c, 0xa4, 0xe0, 0x9b, 0xd1, 0x90, 0xbc, 0x38,
415 0x6c, 0xdd, 0x95, 0x4d, 0x9d, 0xb1, 0x71, 0x57,
416 0x2d, 0x34, 0xe8, 0xb8, 0x42, 0xc7, 0x99, 0x03,
417 0xc7, 0x07, 0x30, 0x65, 0x91, 0x55, 0xd5, 0x90,
418 0x70, 0x97, 0x37, 0x68, 0xd4, 0x11, 0xf9, 0xe8,
419 0xce, 0xec, 0xdc, 0x34, 0xd5, 0xd3, 0xb7, 0xc4,
420 0xb8, 0x97, 0x05, 0x92, 0xad, 0xf8, 0xe2, 0x36,
421 0x64, 0x41, 0xc9, 0xc5, 0x41, 0x77, 0x52, 0xd7,
422 0x2c, 0xa5, 0x24, 0x2f, 0xd9, 0x34, 0x0b, 0x47,
423 0x35, 0xa7, 0x28, 0x8b, 0xc5, 0xcd, 0xe9, 0x46,
424 0xac, 0x39, 0x94, 0x3c, 0x10, 0xc6, 0x29, 0x73,
425 0x0e, 0x0e, 0x5d, 0xe0, 0x71, 0x03, 0x8a, 0x72,
426 0x0e, 0x26, 0xb0, 0x7d, 0x84, 0xed, 0x95, 0x23,
427 0x49, 0x5a, 0x45, 0x83, 0x45, 0x60, 0x11, 0x4a,
428 0x46, 0x31, 0xd4, 0xd8, 0x16, 0x54, 0x98, 0x58,
429 0xed, 0x6d, 0xcc, 0x5d, 0xd6, 0x50, 0x61, 0x9f,
430 0x9d, 0xc5, 0x3e, 0x9d, 0x32, 0x47, 0xde, 0x96,
431 0xe1, 0x5d, 0xd8, 0xf8, 0xb4, 0x69, 0x6f, 0xb9,
432 0x15, 0x90, 0x57, 0x7a, 0xf6, 0xad, 0xb0, 0x5b,
433 0xf5, 0xa6, 0x36, 0x94, 0xfd, 0x84, 0xce, 0x1c,
434 0x0f, 0x4b, 0xd0, 0xc2, 0x5b, 0x6b, 0x56, 0xef,
435 0x73, 0x93, 0x0b, 0xc3, 0xee, 0xd9, 0xcf, 0xd3,
436 0xa4, 0x22, 0x58, 0xcd, 0x50, 0x6e, 0x65, 0xf4,
437 0xe9, 0xb7, 0x71, 0xaf, 0x4b, 0xb3, 0xb6, 0x2f,
438 0x0f, 0x0e, 0x3b, 0xc9, 0x85, 0x14, 0xf5, 0x17,
439 0xe8, 0x7a, 0x3a, 0xbf, 0x5f, 0x5e, 0xf8, 0x18,
440 0x48, 0xa6, 0x72, 0xab, 0x06, 0x95, 0xe9, 0xc8,
441 0xa7, 0xf4, 0x32, 0x44, 0x04, 0x0c, 0x84, 0x98,
442 0x73, 0xe3, 0x89, 0x8d, 0x5f, 0x7e, 0x4a, 0x42,
443 0x8f, 0xc5, 0x28, 0xb1, 0x82, 0xef, 0x1c, 0x97,
444 0x31, 0x3b, 0x4d, 0xe0, 0x0e, 0x10, 0x10, 0x97,
445 0x93, 0x49, 0x78, 0x2f, 0x0d, 0x86, 0x8b, 0xa1,
446 0x53, 0xa9, 0x81, 0x20, 0x79, 0xe7, 0x07, 0x77,
447 0xb6, 0xac, 0x5e, 0xd2, 0x05, 0xcd, 0xe9, 0xdb,
448 0x8a, 0x94, 0x82, 0x8a, 0x23, 0xb9, 0x3d, 0x1c,
449 0xa9, 0x7d, 0x72, 0x4a, 0xed, 0x33, 0xa3, 0xdb,
450 0x21, 0xa7, 0x86, 0x33, 0x45, 0xa5, 0xaa, 0x56,
451 0x45, 0xb5, 0x83, 0x29, 0x40, 0x47, 0x79, 0x04,
452 0x6e, 0xb9, 0x95, 0xd0, 0x81, 0x77, 0x2d, 0x48,
453 0x1e, 0xfe, 0xc3, 0xc2, 0x1e, 0xe5, 0xf2, 0xbe,
454 0xfd, 0x3b, 0x94, 0x9f, 0xc4, 0xc4, 0x26, 0x9d,
455 0xe4, 0x66, 0x1e, 0x19, 0xee, 0x6c, 0x79, 0x97,
456 0x11, 0x31, 0x4b, 0x0d, 0x01, 0xcb, 0xde, 0xa8,
457 0xf6, 0x6d, 0x7c, 0x39, 0x46, 0x4e, 0x7e, 0x3f,
458 0x94, 0x17, 0xdf, 0xa1, 0x7d, 0xd9, 0x1c, 0x8e,
459 0xbc, 0x7d, 0x33, 0x7d, 0xe3, 0x12, 0x40, 0xca,
460 0xab, 0x37, 0x11, 0x46, 0xd4, 0xae, 0xef, 0x44,
461 0xa2, 0xb3, 0x6a, 0x66, 0x0e, 0x0c, 0x90, 0x7f,
462 0xdf, 0x5c, 0x66, 0x5f, 0xf2, 0x94, 0x9f, 0xa6,
463 0x73, 0x4f, 0xeb, 0x0d, 0xad, 0xbf, 0xc0, 0x63,
464 0x5c, 0xdc, 0x46, 0x51, 0xe8, 0x8e, 0x90, 0x19,
465 0xa8, 0xa4, 0x3c, 0x91, 0x79, 0xfa, 0x7e, 0x58,
466 0x85, 0x13, 0x55, 0xc5, 0x19, 0x82, 0x37, 0x1b,
467 0x0a, 0x02, 0x1f, 0x99, 0x6b, 0x18, 0xf1, 0x28,
468 0x08, 0xa2, 0x73, 0xb8, 0x0f, 0x2e, 0xcd, 0xbf,
469 0xf3, 0x86, 0x7f, 0xea, 0xef, 0xd0, 0xbb, 0xa6,
470 0x21, 0xdf, 0x49, 0x73, 0x51, 0xcc, 0x36, 0xd3,
471 0x3e, 0xa0, 0xf8, 0x44, 0xdf, 0xd3, 0xa6, 0xbe,
472 0x8a, 0xd4, 0x57, 0xdd, 0x72, 0x94, 0x61, 0x0f,
473 0x82, 0xd1, 0x07, 0xb8, 0x7c, 0x18, 0x83, 0xdf,
474 0x3a, 0xe5, 0x50, 0x6a, 0x82, 0x20, 0xac, 0xa9,
475 0xa8, 0xff, 0xd9, 0xf3, 0x77, 0x33, 0x5a, 0x9e,
476 0x7f, 0x6d, 0xfe, 0x5d, 0x33, 0x41, 0x42, 0xe7,
477 0x6c, 0x19, 0xe0, 0x44, 0x8a, 0x15, 0xf6, 0x70,
478 0x98, 0xb7, 0x68, 0x4d, 0xfa, 0x97, 0x39, 0xb0,
479 0x8e, 0xe8, 0x84, 0x8b, 0x75, 0x30, 0xb7, 0x7d,
480 0x92, 0x69, 0x20, 0x9c, 0x81, 0xfb, 0x4b, 0xf4,
481 0x01, 0x50, 0xeb, 0xce, 0x0c, 0x1c, 0x6c, 0xb5,
482 0x4a, 0xd7, 0x27, 0x0c, 0xce, 0xbb, 0xe5, 0x85,
483 0xf0, 0xb6, 0xee, 0xd5, 0x70, 0xdd, 0x3b, 0xfc,
484 0xd4, 0x99, 0xf1, 0x33, 0xdd, 0x8b, 0xc4, 0x2f,
485 0xae, 0xab, 0x74, 0x96, 0x32, 0xc7, 0x4c, 0x56,
486 0x3c, 0x89, 0x0f, 0x96, 0x0b, 0x42, 0xc0, 0xcb,
487 0xee, 0x0f, 0x0b, 0x8c, 0xfb, 0x7e, 0x47, 0x7b,
488 0x64, 0x48, 0xfd, 0xb2, 0x00, 0x80, 0x89, 0xa5,
489 0x13, 0x55, 0x62, 0xfc, 0x8f, 0xe2, 0x42, 0x03,
490 0xb7, 0x4e, 0x2a, 0x79, 0xb4, 0x82, 0xea, 0x23,
491 0x49, 0xda, 0xaf, 0x52, 0x63, 0x1e, 0x60, 0x03,
492 0x89, 0x06, 0x44, 0x46, 0x08, 0xc3, 0xc4, 0x87,
493 0x70, 0x2e, 0xda, 0x94, 0xad, 0x6b, 0xe0, 0xe4,
494 0xd1, 0x8a, 0x06, 0xc2, 0xa8, 0xc0, 0xa7, 0x43,
495 0x3c, 0x47, 0x52, 0x0e, 0xc3, 0x77, 0x81, 0x11,
496 0x67, 0x0e, 0xa0, 0x70, 0x04, 0x47, 0x29, 0x40,
497 0x86, 0x0d, 0x34, 0x56, 0xa7, 0xc9, 0x35, 0x59,
498 0x68, 0xdc, 0x93, 0x81, 0x70, 0xee, 0x86, 0xd9,
499 0x80, 0x06, 0x40, 0x4f, 0x1a, 0x0d, 0x40, 0x30,
500 0x0b, 0xcb, 0x96, 0x47, 0xc1, 0xb7, 0x52, 0xfd,
501 0x56, 0xe0, 0x72, 0x4b, 0xfb, 0xbd, 0x92, 0x45,
502 0x61, 0x71, 0xc2, 0x33, 0x11, 0xbf, 0x52, 0x83,
503 0x79, 0x26, 0xe0, 0x49, 0x6b, 0xb7, 0x05, 0x8b,
504 0xe8, 0x0e, 0x87, 0x31, 0xd7, 0x9d, 0x8a, 0xf5,
505 0xc0, 0x5f, 0x2e, 0x58, 0x4a, 0xdb, 0x11, 0xb3,
506 0x6c, 0x30, 0x2a, 0x46, 0x19, 0xe3, 0x27, 0x84,
507 0x1f, 0x63, 0x6e, 0xf6, 0x57, 0xc7, 0xc9, 0xd8,
508 0x5e, 0xba, 0xb3, 0x87, 0xd5, 0x83, 0x26, 0x34,
509 0x21, 0x9e, 0x65, 0xde, 0x42, 0xd3, 0xbe, 0x7b,
510 0xbc, 0x91, 0x71, 0x44, 0x4d, 0x99, 0x3b, 0x31,
511 0xe5, 0x3f, 0x11, 0x4e, 0x7f, 0x13, 0x51, 0x3b,
512 0xae, 0x79, 0xc9, 0xd3, 0x81, 0x8e, 0x25, 0x40,
513 0x10, 0xfc, 0x07, 0x1e, 0xf9, 0x7b, 0x9a, 0x4b,
514 0x6c, 0xe3, 0xb3, 0xad, 0x1a, 0x0a, 0xdd, 0x9e,
515 0x59, 0x0c, 0xa2, 0xcd, 0xae, 0x48, 0x4a, 0x38,
516 0x5b, 0x47, 0x41, 0x94, 0x65, 0x6b, 0xbb, 0xeb,
517 0x5b, 0xe3, 0xaf, 0x07, 0x5b, 0xd4, 0x4a, 0xa2,
518 0xc9, 0x5d, 0x2f, 0x64, 0x03, 0xd7, 0x3a, 0x2c,
519 0x6e, 0xce, 0x76, 0x95, 0xb4, 0xb3, 0xc0, 0xf1,
520 0xe2, 0x45, 0x73, 0x7a, 0x5c, 0xab, 0xc1, 0xfc,
521 0x02, 0x8d, 0x81, 0x29, 0xb3, 0xac, 0x07, 0xec,
522 0x40, 0x7d, 0x45, 0xd9, 0x7a, 0x59, 0xee, 0x34,
523 0xf0, 0xe9, 0xd5, 0x7b, 0x96, 0xb1, 0x3d, 0x95,
524 0xcc, 0x86, 0xb5, 0xb6, 0x04, 0x2d, 0xb5, 0x92,
525 0x7e, 0x76, 0xf4, 0x06, 0xa9, 0xa3, 0x12, 0x0f,
526 0xb1, 0xaf, 0x26, 0xba, 0x7c, 0xfc, 0x7e, 0x1c,
527 0xbc, 0x2c, 0x49, 0x97, 0x53, 0x60, 0x13, 0x0b,
528 0xa6, 0x61, 0x83, 0x89, 0x42, 0xd4, 0x17, 0x0c,
529 0x6c, 0x26, 0x52, 0xc3, 0xb3, 0xd4, 0x67, 0xf5,
530 0xe3, 0x04, 0xb7, 0xf4, 0xcb, 0x80, 0xb8, 0xcb,
531 0x77, 0x56, 0x3e, 0xaa, 0x57, 0x54, 0xee, 0xb4,
532 0x2c, 0x67, 0xcf, 0xf2, 0xdc, 0xbe, 0x55, 0xf9,
533 0x43, 0x1f, 0x6e, 0x22, 0x97, 0x67, 0x7f, 0xc4,
534 0xef, 0xb1, 0x26, 0x31, 0x1e, 0x27, 0xdf, 0x41,
535 0x80, 0x47, 0x6c, 0xe2, 0xfa, 0xa9, 0x8c, 0x2a,
536 0xf6, 0xf2, 0xab, 0xf0, 0x15, 0xda, 0x6c, 0xc8,
537 0xfe, 0xb5, 0x23, 0xde, 0xa9, 0x05, 0x3f, 0x06,
538 0x54, 0x4c, 0xcd, 0xe1, 0xab, 0xfc, 0x0e, 0x62,
539 0x33, 0x31, 0x73, 0x2c, 0x76, 0xcb, 0xb4, 0x47,
540 0x1e, 0x20, 0xad, 0xd8, 0xf2, 0x31, 0xdd, 0xc4,
541 0x8b, 0x0c, 0x77, 0xbe, 0xe1, 0x8b, 0x26, 0x00,
542 0x02, 0x58, 0xd6, 0x8d, 0xef, 0xad, 0x74, 0x67,
543 0xab, 0x3f, 0xef, 0xcb, 0x6f, 0xb0, 0xcc, 0x81,
544 0x44, 0x4c, 0xaf, 0xe9, 0x49, 0x4f, 0xdb, 0xa0,
545 0x25, 0xa4, 0xf0, 0x89, 0xf1, 0xbe, 0xd8, 0x10,
546 0xff, 0xb1, 0x3b, 0x4b, 0xfa, 0x98, 0xf5, 0x79,
547 0x6d, 0x1e, 0x69, 0x4d, 0x57, 0xb1, 0xc8, 0x19,
548 0x1b, 0xbd, 0x1e, 0x8c, 0x84, 0xb7, 0x7b, 0xe8,
549 0xd2, 0x2d, 0x09, 0x41, 0x41, 0x37, 0x3d, 0xb1,
550 0x6f, 0x26, 0x5d, 0x71, 0x16, 0x3d, 0xb7, 0x83,
551 0x27, 0x2c, 0xa7, 0xb6, 0x50, 0xbd, 0x91, 0x86,
552 0xab, 0x24, 0xa1, 0x38, 0xfd, 0xea, 0x71, 0x55,
553 0x7e, 0x9a, 0x07, 0x77, 0x4b, 0xfa, 0x61, 0x66,
554 0x20, 0x1e, 0x28, 0x95, 0x18, 0x1b, 0xa4, 0xa0,
555 0xfd, 0xc0, 0x89, 0x72, 0x43, 0xd9, 0x3b, 0x49,
556 0x5a, 0x3f, 0x9d, 0xbf, 0xdb, 0xb4, 0x46, 0xea,
557 0x42, 0x01, 0x77, 0x23, 0x68, 0x95, 0xb6, 0x24,
558 0xb3, 0xa8, 0x6c, 0x28, 0x3b, 0x11, 0x40, 0x7e,
559 0x18, 0x65, 0x6d, 0xd8, 0x24, 0x42, 0x7d, 0x88,
560 0xc0, 0x52, 0xd9, 0x05, 0xe4, 0x95, 0x90, 0x87,
561 0x8c, 0xf4, 0xd0, 0x6b, 0xb9, 0x83, 0x99, 0x34,
562 0x6d, 0xfe, 0x54, 0x40, 0x94, 0x52, 0x21, 0x4f,
563 0x14, 0x25, 0xc5, 0xd6, 0x5e, 0x95, 0xdc, 0x0a,
564 0x2b, 0x89, 0x20, 0x11, 0x84, 0x48, 0xd6, 0x3a,
565 0xcd, 0x5c, 0x24, 0xad, 0x62, 0xe3, 0xb1, 0x93,
566 0x25, 0x8d, 0xcd, 0x7e, 0xfc, 0x27, 0xa3, 0x37,
567 0xfd, 0x84, 0xfc, 0x1b, 0xb2, 0xf1, 0x27, 0x38,
568 0x5a, 0xb7, 0xfc, 0xf2, 0xfa, 0x95, 0x66, 0xd4,
569 0xfb, 0xba, 0xa7, 0xd7, 0xa3, 0x72, 0x69, 0x48,
570 0x48, 0x8c, 0xeb, 0x28, 0x89, 0xfe, 0x33, 0x65,
571 0x5a, 0x36, 0x01, 0x7e, 0x06, 0x79, 0x0a, 0x09,
572 0x3b, 0x74, 0x11, 0x9a, 0x6e, 0xbf, 0xd4, 0x9e,
573 0x58, 0x90, 0x49, 0x4f, 0x4d, 0x08, 0xd4, 0xe5,
574 0x4a, 0x09, 0x21, 0xef, 0x8b, 0xb8, 0x74, 0x3b,
575 0x91, 0xdd, 0x36, 0x85, 0x60, 0x2d, 0xfa, 0xd4,
576 0x45, 0x7b, 0x45, 0x53, 0xf5, 0x47, 0x87, 0x7e,
577 0xa6, 0x37, 0xc8, 0x78, 0x7a, 0x68, 0x9d, 0x8d,
578 0x65, 0x2c, 0x0e, 0x91, 0x5c, 0xa2, 0x60, 0xf0,
579 0x8e, 0x3f, 0xe9, 0x1a, 0xcd, 0xaa, 0xe7, 0xd5,
580 0x77, 0x18, 0xaf, 0xc9, 0xbc, 0x18, 0xea, 0x48,
581 0x1b, 0xfb, 0x22, 0x48, 0x70, 0x16, 0x29, 0x9e,
582 0x5b, 0xc1, 0x2c, 0x66, 0x23, 0xbc, 0xf0, 0x1f,
583 0xef, 0xaf, 0xe4, 0xd6, 0x04, 0x19, 0x82, 0x7a,
584 0x0b, 0xba, 0x4b, 0x46, 0xb1, 0x6a, 0x85, 0x5d,
585 0xb4, 0x73, 0xd6, 0x21, 0xa1, 0x71, 0x60, 0x14,
586 0xee, 0x0a, 0x77, 0xc4, 0x66, 0x2e, 0xf9, 0x69,
587 0x30, 0xaf, 0x41, 0x0b, 0xc8, 0x83, 0x3c, 0x53,
588 0x99, 0x19, 0x27, 0x46, 0xf7, 0x41, 0x6e, 0x56,
589 0xdc, 0x94, 0x28, 0x67, 0x4e, 0xb7, 0x25, 0x48,
590 0x8a, 0xc2, 0xe0, 0x60, 0x96, 0xcc, 0x18, 0xf4,
591 0x84, 0xdd, 0xa7, 0x5e, 0x3e, 0x05, 0x0b, 0x26,
592 0x26, 0xb2, 0x5c, 0x1f, 0x57, 0x1a, 0x04, 0x7e,
593 0x6a, 0xe3, 0x2f, 0xb4, 0x35, 0xb6, 0x38, 0x40,
594 0x40, 0xcd, 0x6f, 0x87, 0x2e, 0xef, 0xa3, 0xd7,
595 0xa9, 0xc2, 0xe8, 0x0d, 0x27, 0xdf, 0x44, 0x62,
596 0x99, 0xa0, 0xfc, 0xcf, 0x81, 0x78, 0xcb, 0xfe,
597 0xe5, 0xa0, 0x03, 0x4e, 0x6c, 0xd7, 0xf4, 0xaf,
598 0x7a, 0xbb, 0x61, 0x82, 0xfe, 0x71, 0x89, 0xb2,
599 0x22, 0x7c, 0x8e, 0x83, 0x04, 0xce, 0xf6, 0x5d,
600 0x84, 0x8f, 0x95, 0x6a, 0x7f, 0xad, 0xfd, 0x32,
601 0x9c, 0x5e, 0xe4, 0x9c, 0x89, 0x60, 0x54, 0xaa,
602 0x96, 0x72, 0xd2, 0xd7, 0x36, 0x85, 0xa9, 0x45,
603 0xd2, 0x2a, 0xa1, 0x81, 0x49, 0x6f, 0x7e, 0x04,
604 0xfa, 0xe2, 0xfe, 0x90, 0x26, 0x77, 0x5a, 0x33,
605 0xb8, 0x04, 0x9a, 0x7a, 0xe6, 0x4c, 0x4f, 0xad,
606 0x72, 0x96, 0x08, 0x28, 0x58, 0x13, 0xf8, 0xc4,
607 0x1c, 0xf0, 0xc3, 0x45, 0x95, 0x49, 0x20, 0x8c,
608 0x9f, 0x39, 0x70, 0xe1, 0x77, 0xfe, 0xd5, 0x4b,
609 0xaf, 0x86, 0xda, 0xef, 0x22, 0x06, 0x83, 0x36,
610 0x29, 0x12, 0x11, 0x40, 0xbc, 0x3b, 0x86, 0xaa,
611 0xaa, 0x65, 0x60, 0xc3, 0x80, 0xca, 0xed, 0xa9,
612 0xf3, 0xb0, 0x79, 0x96, 0xa2, 0x55, 0x27, 0x28,
613 0x55, 0x73, 0x26, 0xa5, 0x50, 0xea, 0x92, 0x4b,
614 0x3c, 0x5c, 0x82, 0x33, 0xf0, 0x01, 0x3f, 0x03,
615 0xc1, 0x08, 0x05, 0xbf, 0x98, 0xf4, 0x9b, 0x6d,
616 0xa5, 0xa8, 0xb4, 0x82, 0x0c, 0x06, 0xfa, 0xff,
617 0x2d, 0x08, 0xf3, 0x05, 0x4f, 0x57, 0x2a, 0x39,
618 0xd4, 0x83, 0x0d, 0x75, 0x51, 0xd8, 0x5b, 0x1b,
619 0xd3, 0x51, 0x5a, 0x32, 0x2a, 0x9b, 0x32, 0xb2,
620 0xf2, 0xa4, 0x96, 0x12, 0xf2, 0xae, 0x40, 0x34,
621 0x67, 0xa8, 0xf5, 0x44, 0xd5, 0x35, 0x53, 0xfe,
622 0xa3, 0x60, 0x96, 0x63, 0x0f, 0x1f, 0x6e, 0xb0,
623 0x5a, 0x42, 0xa6, 0xfc, 0x51, 0x0b, 0x60, 0x27,
624 0xbc, 0x06, 0x71, 0xed, 0x65, 0x5b, 0x23, 0x86,
625 0x4a, 0x07, 0x3b, 0x22, 0x07, 0x46, 0xe6, 0x90,
626 0x3e, 0xf3, 0x25, 0x50, 0x1b, 0x4c, 0x7f, 0x03,
627 0x08, 0xa8, 0x36, 0x6b, 0x87, 0xe5, 0xe3, 0xdb,
628 0x9a, 0x38, 0x83, 0xff, 0x9f, 0x1a, 0x9f, 0x57,
629 0xa4, 0x2a, 0xf6, 0x37, 0xbc, 0x1a, 0xff, 0xc9,
630 0x1e, 0x35, 0x0c, 0xc3, 0x7c, 0xa3, 0xb2, 0xe5,
631 0xd2, 0xc6, 0xb4, 0x57, 0x47, 0xe4, 0x32, 0x16,
632 0x6d, 0xa9, 0xae, 0x64, 0xe6, 0x2d, 0x8d, 0xc5,
633 0x8d, 0x50, 0x8e, 0xe8, 0x1a, 0x22, 0x34, 0x2a,
634 0xd9, 0xeb, 0x51, 0x90, 0x4a, 0xb1, 0x41, 0x7d,
635 0x64, 0xf9, 0xb9, 0x0d, 0xf6, 0x23, 0x33, 0xb0,
636 0x33, 0xf4, 0xf7, 0x3f, 0x27, 0x84, 0xc6, 0x0f,
637 0x54, 0xa5, 0xc0, 0x2e, 0xec, 0x0b, 0x3a, 0x48,
638 0x6e, 0x80, 0x35, 0x81, 0x43, 0x9b, 0x90, 0xb1,
639 0xd0, 0x2b, 0xea, 0x21, 0xdc, 0xda, 0x5b, 0x09,
640 0xf4, 0xcc, 0x10, 0xb4, 0xc7, 0xfe, 0x79, 0x51,
641 0xc3, 0xc5, 0xac, 0x88, 0x74, 0x84, 0x0b, 0x4b,
642 0xca, 0x79, 0x16, 0x29, 0xfb, 0x69, 0x54, 0xdf,
643 0x41, 0x7e, 0xe9, 0xc7, 0x8e, 0xea, 0xa5, 0xfe,
644 0xfc, 0x76, 0x0e, 0x90, 0xc4, 0x92, 0x38, 0xad,
645 0x7b, 0x48, 0xe6, 0x6e, 0xf7, 0x21, 0xfd, 0x4e,
646 0x93, 0x0a, 0x7b, 0x41, 0x83, 0x68, 0xfb, 0x57,
647 0x51, 0x76, 0x34, 0xa9, 0x6c, 0x00, 0xaa, 0x4f,
648 0x66, 0x65, 0x98, 0x4a, 0x4f, 0xa3, 0xa0, 0xef,
649 0x69, 0x3f, 0xe3, 0x1c, 0x92, 0x8c, 0xfd, 0xd8,
650 0xe8, 0xde, 0x7c, 0x7f, 0x3e, 0x84, 0x8e, 0x69,
651 0x3c, 0xf1, 0xf2, 0x05, 0x46, 0xdc, 0x2f, 0x9d,
652 0x5e, 0x6e, 0x4c, 0xfb, 0xb5, 0x99, 0x2a, 0x59,
653 0x63, 0xc1, 0x34, 0xbc, 0x57, 0xc0, 0x0d, 0xb9,
654 0x61, 0x25, 0xf3, 0x33, 0x23, 0x51, 0xb6, 0x0d,
655 0x07, 0xa6, 0xab, 0x94, 0x4a, 0xb7, 0x2a, 0xea,
656 0xee, 0xac, 0xa3, 0xc3, 0x04, 0x8b, 0x0e, 0x56,
657 0xfe, 0x44, 0xa7, 0x39, 0xe2, 0xed, 0xed, 0xb4,
658 0x22, 0x2b, 0xac, 0x12, 0x32, 0x28, 0x91, 0xd8,
659 0xa5, 0xab, 0xff, 0x5f, 0xe0, 0x4b, 0xda, 0x78,
660 0x17, 0xda, 0xf1, 0x01, 0x5b, 0xcd, 0xe2, 0x5f,
661 0x50, 0x45, 0x73, 0x2b, 0xe4, 0x76, 0x77, 0xf4,
662 0x64, 0x1d, 0x43, 0xfb, 0x84, 0x7a, 0xea, 0x91,
663 0xae, 0xf9, 0x9e, 0xb7, 0xb4, 0xb0, 0x91, 0x5f,
664 0x16, 0x35, 0x9a, 0x11, 0xb8, 0xc7, 0xc1, 0x8c,
665 0xc6, 0x10, 0x8d, 0x2f, 0x63, 0x4a, 0xa7, 0x57,
666 0x3a, 0x51, 0xd6, 0x32, 0x2d, 0x64, 0x72, 0xd4,
667 0x66, 0xdc, 0x10, 0xa6, 0x67, 0xd6, 0x04, 0x23,
668 0x9d, 0x0a, 0x11, 0x77, 0xdd, 0x37, 0x94, 0x17,
669 0x3c, 0xbf, 0x8b, 0x65, 0xb0, 0x2e, 0x5e, 0x66,
670 0x47, 0x64, 0xac, 0xdd, 0xf0, 0x84, 0xfd, 0x39,
671 0xfa, 0x15, 0x5d, 0xef, 0xae, 0xca, 0xc1, 0x36,
672 0xa7, 0x5c, 0xbf, 0xc7, 0x08, 0xc2, 0x66, 0x00,
673 0x74, 0x74, 0x4e, 0x27, 0x3f, 0x55, 0x8a, 0xb7,
674 0x38, 0x66, 0x83, 0x6d, 0xcf, 0x99, 0x9e, 0x60,
675 0x8f, 0xdd, 0x2e, 0x62, 0x22, 0x0e, 0xef, 0x0c,
676 0x98, 0xa7, 0x85, 0x74, 0x3b, 0x9d, 0xec, 0x9e,
677 0xa9, 0x19, 0x72, 0xa5, 0x7f, 0x2c, 0x39, 0xb7,
678 0x7d, 0xb7, 0xf1, 0x12, 0x65, 0x27, 0x4b, 0x5a,
679 0xde, 0x17, 0xfe, 0xad, 0x44, 0xf3, 0x20, 0x4d,
680 0xfd, 0xe4, 0x1f, 0xb5, 0x81, 0xb0, 0x36, 0x37,
681 0x08, 0x6f, 0xc3, 0x0c, 0xe9, 0x85, 0x98, 0x82,
682 0xa9, 0x62, 0x0c, 0xc4, 0x97, 0xc0, 0x50, 0xc8,
683 0xa7, 0x3c, 0x50, 0x9f, 0x43, 0xb9, 0xcd, 0x5e,
684 0x4d, 0xfa, 0x1c, 0x4b, 0x0b, 0xa9, 0x98, 0x85,
685 0x38, 0x92, 0xac, 0x8d, 0xe4, 0xad, 0x9b, 0x98,
686 0xab, 0xd9, 0x38, 0xac, 0x62, 0x52, 0xa3, 0x22,
687 0x63, 0x0f, 0xbf, 0x95, 0x48, 0xdf, 0x69, 0xe7,
688 0x8b, 0x33, 0xd5, 0xb2, 0xbd, 0x05, 0x49, 0x49,
689 0x9d, 0x57, 0x73, 0x19, 0x33, 0xae, 0xfa, 0x33,
690 0xf1, 0x19, 0xa8, 0x80, 0xce, 0x04, 0x9f, 0xbc,
691 0x1d, 0x65, 0x82, 0x1b, 0xe5, 0x3a, 0x51, 0xc8,
692 0x1c, 0x21, 0xe3, 0x5d, 0xf3, 0x7d, 0x9b, 0x2f,
693 0x2c, 0x1d, 0x4a, 0x7f, 0x9b, 0x68, 0x35, 0xa3,
694 0xb2, 0x50, 0xf7, 0x62, 0x79, 0xcd, 0xf4, 0x98,
695 0x4f, 0xe5, 0x63, 0x7c, 0x3e, 0x45, 0x31, 0x8c,
696 0x16, 0xa0, 0x12, 0xc8, 0x58, 0xce, 0x39, 0xa6,
697 0xbc, 0x54, 0xdb, 0xc5, 0xe0, 0xd5, 0xba, 0xbc,
698 0xb9, 0x04, 0xf4, 0x8d, 0xe8, 0x2f, 0x15, 0x9d,
699 };
700
701 /* 100 test cases */
702 static struct crc_test {
703 u32 crc; /* random starting crc */
704 u32 start; /* random 6 bit offset in buf */
705 u32 length; /* random 11 bit length of test */
706 u32 crc32c_le; /* expected crc32c_le result */
707 } test[] =
708 {
709 {0x674bf11d, 0x00000038, 0x00000542, 0xf6e93d6c},
710 {0x35c672c6, 0x0000003a, 0x000001aa, 0x0fe92aca},
711 {0x496da28e, 0x00000039, 0x000005af, 0x52e1ebb8},
712 {0x09a9b90e, 0x00000027, 0x000001f8, 0x0798af9a},
713 {0xdc97e5a9, 0x00000025, 0x000003b6, 0x18eb3152},
714 {0x47c58900, 0x0000000a, 0x000000b9, 0xd00d08c7},
715 {0x292561e8, 0x0000000c, 0x00000403, 0x8ba966bc},
716 {0x415037f6, 0x00000003, 0x00000676, 0x11d694a2},
717 {0x3466e707, 0x00000026, 0x00000042, 0x6ab3208d},
718 {0xafd1281b, 0x00000023, 0x000002ee, 0xba4603c5},
719 {0xd3857b18, 0x00000028, 0x000004a2, 0xe6071c6f},
720 {0x1d825a8f, 0x0000002b, 0x0000050b, 0x179ec30a},
721 {0x5033e3bc, 0x0000000b, 0x00000078, 0x0903beb8},
722 {0x94f1fb5e, 0x0000000f, 0x000003a2, 0x6a7cb4fa},
723 {0xc9a0fe14, 0x00000009, 0x00000473, 0xdb535801},
724 {0x88a034b1, 0x0000001c, 0x000005ad, 0x92bed597},
725 {0xf0f72239, 0x00000020, 0x0000026d, 0x192a3f1b},
726 {0xcc20a5e3, 0x0000003b, 0x0000067a, 0xccbaec1a},
727 {0xce589c95, 0x0000002b, 0x00000641, 0x7eabae4d},
728 {0x78edc885, 0x00000035, 0x000005be, 0x28c72982},
729 {0x9d40a377, 0x0000003b, 0x00000038, 0xc3cd4d18},
730 {0x703d0e01, 0x0000003c, 0x000006f1, 0xbca8f0e7},
731 {0x776bf505, 0x0000000f, 0x000005b2, 0x713f60b3},
732 {0x4a3e7854, 0x00000027, 0x000004b8, 0xebd08fd5},
733 {0x209172dd, 0x0000003b, 0x00000356, 0x64406c59},
734 {0x3ba4cc5b, 0x0000002f, 0x00000203, 0x7421890e},
735 {0xfc62f297, 0x00000000, 0x00000079, 0xe9347603},
736 {0x64280b8b, 0x00000016, 0x000007ab, 0x1bef9060},
737 {0x97dd724b, 0x00000033, 0x000007ad, 0x34720072},
738 {0x61394b52, 0x00000035, 0x00000571, 0x48310f59},
739 {0x29b4faff, 0x00000024, 0x0000006e, 0x783a4213},
740 {0x29bfb1dc, 0x0000000b, 0x00000244, 0x9e8efd41},
741 {0x86ae934b, 0x00000035, 0x00000104, 0xfc3d34a5},
742 {0xc4c1024e, 0x0000002e, 0x000006b1, 0x17a52ae2},
743 {0x3287a80a, 0x00000026, 0x00000496, 0x886d935a},
744 {0xa4db423e, 0x00000023, 0x0000045d, 0xeaaeaeb2},
745 {0x7a1078df, 0x00000015, 0x0000014a, 0x8e900a4b},
746 {0x6048bd5b, 0x00000006, 0x0000006a, 0xd74662b1},
747 {0xd8f9ea20, 0x0000003d, 0x00000277, 0xd26752ba},
748 {0xea5ec3b4, 0x0000002a, 0x000004fe, 0x8b1fcd62},
749 {0x2dfb005d, 0x00000016, 0x00000345, 0xf54342fe},
750 {0x5a214ade, 0x00000020, 0x000005b6, 0x5b95b988},
751 {0xf0ab9cca, 0x00000032, 0x00000515, 0x2e1176be},
752 {0x91b444f9, 0x0000002e, 0x000007f8, 0x66120546},
753 {0x1b5d2ddb, 0x0000002e, 0x0000012c, 0xf256a5cc},
754 {0xd824d1bb, 0x0000003a, 0x000007b5, 0x4af1dd69},
755 {0x0470180c, 0x00000034, 0x000001f0, 0x56f0a04a},
756 {0xffaa3a3f, 0x00000036, 0x00000299, 0x74f6b6b2},
757 {0x6406cfeb, 0x00000023, 0x00000600, 0x085951fd},
758 {0xb24aaa38, 0x0000003e, 0x000004a1, 0xc65387eb},
759 {0x58b2ab7c, 0x00000039, 0x000002b4, 0x1ca9257b},
760 {0x3db85970, 0x00000006, 0x000002b6, 0xfd196d76},
761 {0x857830c5, 0x00000003, 0x00000590, 0x5ef88339},
762 {0xe1fcd978, 0x0000003e, 0x000007d8, 0x2c3714d9},
763 {0xb982a768, 0x00000016, 0x000006e0, 0x58576548},
764 {0x1d581ce8, 0x0000001e, 0x0000058b, 0xfd7c57de},
765 {0x2456719b, 0x00000025, 0x00000503, 0xd5fedd59},
766 {0xfae6d8f2, 0x00000000, 0x0000055d, 0x1cc3b17b},
767 {0xcba828e3, 0x00000039, 0x000002ce, 0x270eed73},
768 {0x13d25952, 0x0000000a, 0x0000072d, 0x91ecbb11},
769 {0x0342be3f, 0x00000015, 0x00000599, 0x05ed8d0c},
770 {0xeaa344e0, 0x00000014, 0x000004d8, 0x0b09ad5b},
771 {0xbbb52021, 0x0000003b, 0x00000272, 0xf8d511fb},
772 {0xb66384dc, 0x0000001d, 0x000007fc, 0x5ad832cc},
773 {0x616c01b6, 0x00000022, 0x000002c8, 0x1214d196},
774 {0xce2bdaad, 0x00000016, 0x0000062a, 0x5747218a},
775 {0x00fe84d7, 0x00000005, 0x00000205, 0xde8f14de},
776 {0xbebdcb4c, 0x00000006, 0x0000055d, 0x3563b7b9},
777 {0xd8b1a02a, 0x00000010, 0x00000387, 0x071475d0},
778 {0x3b96cad2, 0x00000036, 0x00000347, 0x54c79d60},
779 {0xc94c1ed7, 0x00000005, 0x0000038b, 0x4c53eee6},
780 {0x1aad454e, 0x00000025, 0x000002b2, 0x10137a3c},
781 {0xa4fec9a6, 0x00000000, 0x000006d6, 0xaa9d6c73},
782 {0x1bbe71e2, 0x0000001f, 0x000002fd, 0xb63d23e7},
783 {0x4201c7e4, 0x00000002, 0x000002b7, 0x7f53e9cf},
784 {0x23fddc96, 0x00000003, 0x00000627, 0x13c1cd83},
785 {0xd82ba25c, 0x00000016, 0x0000063e, 0x49ff5867},
786 {0x786f2032, 0x0000002d, 0x0000060f, 0x8467f211},
787 {0xfebe4e1f, 0x0000002a, 0x000004f2, 0x3f9683b2},
788 {0x1a6e0a39, 0x00000008, 0x00000672, 0x76a3f874},
789 {0x56000ab8, 0x0000000e, 0x000000e5, 0x863b702f},
790 {0x4717fe0c, 0x00000000, 0x000006ec, 0xdc6c58ff},
791 {0xd5d5d68e, 0x0000003c, 0x000003a3, 0x0622cc95},
792 {0xc25dd6c6, 0x00000024, 0x000006c0, 0xe85605cd},
793 {0xe9b11300, 0x00000023, 0x00000683, 0x31da5f06},
794 {0x95cd285e, 0x00000001, 0x00000047, 0xa1f2e784},
795 {0xd9245a25, 0x0000001e, 0x000003a6, 0xb07cc616},
796 {0x103279db, 0x00000006, 0x0000039b, 0xbf943b6c},
797 {0x1cba3172, 0x00000027, 0x000001c8, 0x2c01af1c},
798 {0x8f613739, 0x0000000c, 0x000001df, 0x0fe5f56d},
799 {0x1c6aa90d, 0x0000001b, 0x0000053c, 0xf8943b2d},
800 {0xaabe5b93, 0x0000003d, 0x00000715, 0xe4d89272},
801 {0xf15dd038, 0x00000006, 0x000006db, 0x7c2f6bbb},
802 {0x584dd49c, 0x00000020, 0x000007bc, 0xabbf388b},
803 {0x5d8c9506, 0x00000020, 0x00000470, 0x1dca1f4e},
804 {0xb80d17b0, 0x00000032, 0x00000346, 0x5c170e23},
805 {0xdaf0592e, 0x00000023, 0x000007b0, 0xc0e9d672},
806 {0x4793cc85, 0x0000000d, 0x00000706, 0xc18bdc86},
807 {0x82ebf64e, 0x00000009, 0x000007c3, 0xa874fcdd},
808 {0xb18a0319, 0x00000026, 0x000007db, 0x9dc0bb48},
809 };
810
811 static int crc32c_test(void)
812 {
813 int i;
814 int errors = 0;
815 int bytes = 0;
816 struct timeval start, stop;
817 uint64_t usec;
818
819 /* keep static to prevent cache warming code from
820 * getting eliminated by the compiler */
821 static u32 crc;
822
823 /* pre-warm the cache */
824 for (i = 0; i < 100; i++) {
825 bytes += 2*test[i].length;
826
827 crc ^= crc32c_le(test[i].crc, test_buf +
828 test[i].start, test[i].length);
829 }
830
831 gettimeofday(&start, NULL);
832 for (i = 0; i < 100; i++) {
833 if (test[i].crc32c_le != crc32c_le(test[i].crc, test_buf +
834 test[i].start, test[i].length))
835 errors++;
836 }
837 gettimeofday(&stop, NULL);
838
839 usec = stop.tv_usec - start.tv_usec +
840 1000000 * (stop.tv_sec - start.tv_sec);
841
842 if (errors)
843 printf("crc32c: %d self tests failed\n", errors);
844 else {
845 printf("crc32c: tests passed, %d bytes in %" PRIu64 " usec\n",
846 bytes, usec);
847 }
848
849 return errors;
850 }
851
852 /*
853 * make sure we always return 0 for a successful test run, and non-zero for a
854 * failed run. The build infrastructure is looking for this information to
855 * determine whether to allow the build to proceed.
856 */
857 int main(int argc, char **argv)
858 {
859 int errors;
860
861 printf("CRC_LE_BITS = %d\n", CRC_LE_BITS);
862
863 errors = crc32c_test();
864
865 return errors != 0;
866 }
867 #endif /* CRC32_SELFTEST */