11 static uchar gpexp[255] =
12 {1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38, 76,
13 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192, 157,
14 39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159, 35,
15 70, 140, 5, 10, 20, 40, 80, 160, 93, 186, 105, 210, 185, 111, 222,
16 161, 95, 190, 97, 194, 153, 47, 94, 188, 101, 202, 137, 15, 30, 60,
17 120, 240, 253, 231, 211, 187, 107, 214, 177, 127, 254, 225, 223, 163,
18 91, 182, 113, 226, 217, 175, 67, 134, 17, 34, 68, 136, 13, 26, 52,
19 104, 208, 189, 103, 206, 129, 31, 62, 124, 248, 237, 199, 147, 59,
20 118, 236, 197, 151, 51, 102, 204, 133, 23, 46, 92, 184, 109, 218,
21 169, 79, 158, 33, 66, 132, 21, 42, 84, 168, 77, 154, 41, 82, 164, 85,
22 170, 73, 146, 57, 114, 228, 213, 183, 115, 230, 209, 191, 99, 198,
23 145, 63, 126, 252, 229, 215, 179, 123, 246, 241, 255, 227, 219, 171,
24 75, 150, 49, 98, 196, 149, 55, 110, 220, 165, 87, 174, 65, 130, 25,
25 50, 100, 200, 141, 7, 14, 28, 56, 112, 224, 221, 167, 83, 166, 81,
26 162, 89, 178, 121, 242, 249, 239, 195, 155, 43, 86, 172, 69, 138, 9,
27 18, 36, 72, 144, 61, 122, 244, 245, 247, 243, 251, 235, 203, 139, 11,
28 22, 44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71,
31 static uchar gplog[256] =
32 {0, 0, 1, 25, 2, 50, 26, 198, 3, 223, 51, 238, 27, 104, 199, 75, 4, 100,
33 224, 14, 52, 141, 239, 129, 28, 193, 105, 248, 200, 8, 76, 113, 5,
34 138, 101, 47, 225, 36, 15, 33, 53, 147, 142, 218, 240, 18, 130, 69,
35 29, 181, 194, 125, 106, 39, 249, 185, 201, 154, 9, 120, 77, 228, 114,
36 166, 6, 191, 139, 98, 102, 221, 48, 253, 226, 152, 37, 179, 16, 145,
37 34, 136, 54, 208, 148, 206, 143, 150, 219, 189, 241, 210, 19, 92,
38 131, 56, 70, 64, 30, 66, 182, 163, 195, 72, 126, 110, 107, 58, 40,
39 84, 250, 133, 186, 61, 202, 94, 155, 159, 10, 21, 121, 43, 78, 212,
40 229, 172, 115, 243, 167, 87, 7, 112, 192, 247, 140, 128, 99, 13, 103,
41 74, 222, 237, 49, 197, 254, 24, 227, 165, 153, 119, 38, 184, 180,
42 124, 17, 68, 146, 217, 35, 32, 137, 46, 55, 63, 209, 91, 149, 188,
43 207, 205, 144, 135, 151, 178, 220, 252, 190, 97, 242, 86, 211, 171,
44 20, 42, 93, 158, 132, 60, 57, 83, 71, 109, 65, 162, 31, 45, 67, 216,
45 183, 123, 164, 118, 196, 23, 73, 236, 127, 12, 111, 246, 108, 161,
46 59, 82, 41, 157, 85, 170, 251, 96, 134, 177, 187, 204, 62, 90, 203,
47 89, 95, 176, 156, 169, 160, 81, 11, 245, 22, 235, 122, 117, 44, 215,
48 79, 174, 213, 233, 230, 231, 173, 232, 116, 214, 244, 234, 168, 80,
51 static uchar *polys[69];
53 static uchar *blocks[160];
55 static uchar side[40] = {
56 21, 25, 29, 33, 37, 41, 45, 49,
57 53, 57, 61, 65, 69, 73, 77, 81,
58 85, 89, 93, 97, 101, 105, 109, 113,
59 117, 121, 125, 129, 133, 137, 141, 145,
60 149, 153, 157, 161, 165, 169, 173, 177
63 static uchar align[40][8] = {
84 {6, 28, 50, 72, 94, 0},
85 {6, 26, 50, 74, 98, 0},
86 {6, 30, 54, 78, 102, 0},
87 {6, 28, 54, 80, 106, 0},
88 {6, 32, 58, 84, 110, 0},
89 {6, 30, 58, 86, 114, 0},
90 {6, 34, 62, 90, 118, 0},
91 {6, 26, 50, 74, 98, 122, 0},
92 {6, 30, 54, 78, 102, 126, 0},
93 {6, 26, 52, 78, 104, 130, 0},
94 {6, 30, 56, 82, 108, 134, 0},
95 {6, 34, 60, 86, 112, 138, 0},
96 {6, 30, 58, 86, 114, 142, 0},
97 {6, 34, 62, 90, 118, 146, 0},
98 {6, 30, 54, 78, 102, 126, 150, 0},
99 {6, 24, 50, 76, 102, 128, 154, 0},
100 {6, 28, 54, 80, 106, 132, 158, 0},
101 {6, 32, 58, 84, 110, 136, 162, 0},
102 {6, 26, 54, 82, 110, 138, 166, 0},
103 {6, 30, 58, 86, 114, 142, 170, 0},
111 extern uchar qrrawpolys[];
112 extern uchar qrsizes[];
115 for(p = qrrawpolys; in || *p != 0; p++){
120 memset(cap, 0, sizeof(cap));
121 for(p = qrsizes; p[0] != 0 || p[1] != 0; p += 4){
122 cap[p[0]] += p[1] * p[3];
123 if(blocks[p[0]] == nil)
129 bits(uchar *b, int *elen, int *bctr, ulong data, int n)
136 s = b[l] << n | data;
139 b[l++] = s >> (bc -= 8);
151 getlbits(int version, int mode)
159 else if(version <= 26)
162 case ANUM: return 11;
163 case BYTE: return 16;
168 case ANUM: return 13;
169 case BYTE: return 16;
171 werrstr("unknown mode %#x", mode);
177 ['0'] 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
178 ['A'] 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
179 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
180 ['a'] 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
181 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
182 [' '] 37, ['$'] 38, ['%'] 39, ['*'] 40, ['+'] 41, ['-'] 42,
183 ['.'] 43, ['/'] 44, [':'] 45
187 formsel(int version, int level, int mode, uchar *data, int dlen, int *nchar)
189 int bits, lbits, i, n;
195 for(i = 0; i < dlen; i++)
199 bits += 10 * (n / 3);
201 case 1: bits += 4; break;
202 case 2: bits += 7; break;
207 for(i = 0; i < dlen; i++)
208 if(atab[data[i]] != 0)
211 bits += 11 * (n >> 1) + 6 * (n & 1);
220 for(i = 0; i < 40; i++){
221 if(i == 0 || i == 10 || i == 27){
222 lbits = getlbits(i + 1, mode);
226 if(cap[i << 2 | level] >= (bits + lbits + 7 >> 3))
227 return i << 2 | level;
230 lbits = getlbits(version, mode);
233 if(cap[version - 1 << 2 | level] >= (bits + lbits + 7 >> 3))
234 return version - 1 << 2 | level;
236 werrstr("too many bits");
241 encode(uchar verlev, uchar *data, int dlen, int mode, int nchar)
252 bits(b, &n, &bc, mode, 4);
253 bits(b, &n, &bc, nchar, getlbits((verlev >> 2) + 1, mode));
258 for(; dlen-- != 0; data++)
260 acc = acc * 10 + *data - '0';
263 bits(b, &n, &bc, acc, 10);
268 bits(b, &n, &bc, acc, 4);
270 bits(b, &n, &bc, acc, 7);
275 for(; dlen-- != 0; data++)
276 if(atab[*data] != 0){
277 acc = acc * 45 + atab[*data] - 1;
280 bits(b, &n, &bc, acc, 11);
285 bits(b, &n, &bc, acc, 6);
289 bits(b, &n, &bc, *data++, 8);
292 werrstr("unknown mode %#x", mode);
295 bits(b, &n, &bc, 0, 4);
307 /* all stored highest coefficient first
308 poly stored as log and highest coefficient implicit 1 */
310 ecc(uchar *data, int dl, uchar *poly, uchar *err, int el, int str)
320 for(i = 0; i < el; i++){
321 q[i] = gpexp[poly[i]];
324 for(dp = data + dl - 1; dp != data - 1; dp--){
327 for(i = 0; i < el; i++){
332 err[i * str] ^= gpexp[x];
339 for(i = 0; i < el; i++){
343 q[i] = (i == el-1 ? 0 : q[i+1]) ^ gpexp[x];
346 for(i = 0; i < el - 1; i++)
356 codewords(uchar verlev, uchar *data, int *ncp)
358 uchar *bp, *p, *dp, *r, *rp;
360 int ne, i, j, el, nc, nb, ncol;
363 el = bp[2] - bp[3]; /* guaranteed constant */
365 for(p = bp, ne = 0, nc = 0, nb = 0; p[0] == verlev; p += 4){
374 for(p = bp, dp = data, ep = r + nc - ne; p[0] == verlev; p += 4)
375 for(j = 0; j < p[1]; j++){
376 if(ecc(dp, p[3], polys[el], ep, el, nb) < 0){
383 for(i = 0, rp = r; i < ncol; i++){
385 for(p = bp; p[0] == verlev; p += 4){
386 for(j = 0; j < p[1]; j++){
397 #define max(i,j) ((i)>(j)?(i):(j))
403 uchar *pat, *p, *ap, *aq;
405 s = side[verlev >> 2];
406 pat = malloc((s + 8) * (s + 8));
410 for(j = -4; j < s + 4; j++)
411 for(i = -4; i < s + 4; i++){
412 if(i < 0 || j < 0 || i >= s || j >= s)
414 else if(i < 8 && j < 8 || i >= s - 8 && j < 8 || i < 8 && j >= s - 8){
415 d = max(abs(i >= 8 ? i - s + 4 : i-3), abs(j >= 8 ? j - s + 4 : j-3));
416 *p++ = d == 2 || d == 4 ? 0xff : 0;
417 }else if(i == 6 || j == 6)
418 *p++ = (i + j & 1) != 0 ? 0xff : 0;
419 else if(i <= 8 && j <= 8 || i <= 8 && j >= s - 8 || i >= s - 8 && j <= 8)
421 else if(verlev >= 24 && (j >= s - 11 && i < 6 || i >= s - 11 && j < 6))
426 for(ap = align[verlev >> 2]; *ap != 0; ap++)
427 for(aq = align[verlev >> 2]; *aq != 0; aq++){
428 if(*ap == 6 && *aq == 6 || *ap >= s - 7 && *aq == 6 || *ap == 6 && *aq >= s - 7)
430 for(i = *ap - 2; i <= *ap + 2; i++)
431 for(j = *aq - 2; j <= *aq + 2; j++)
432 pat[i * (s + 8) + j + 4 + (s + 8) * 4] = max(abs(i - *ap), abs(j - *aq)) == 1 ? 0xff : 0;
438 fill(uchar verlev, uchar *p, uchar *d, int nc)
443 s = side[verlev >> 2] + 8;
448 for(dp = d, i = 0;;){
456 while(p[y * s + x] != 0x80){
458 if((x & 1 ^ (x < 10)) == 0)
470 if((x & 1 ^ (x < 10)) == 0)
485 p[y * s + x] = ~((char)db >> 7) ^ 0x0f;
491 mask(uchar verlev, uchar *p, int m)
496 s = side[verlev >> 2];
497 for(i = -4, q = p; i < s + 4; i++)
498 for(j = -4; j < s + 4; j++, q++)
499 if(((*q ^ *q >> 4) & 15) == 15)
501 case 0: *q ^= (char)((i+j+1) << 7) >> 7; break;
502 case 1: *q ^= (char)((i+1) << 7) >> 7; break;
503 case 2: *q ^= (char)(j % 3 - 1) >> 7; break;
504 case 3: *q ^= (char)((i+j) % 3 - 1) >> 7; break;
505 case 4: *q ^= (char)(((i/2)+(j/3)+1) << 7) >> 7; break;
506 case 5: *q ^= (char)((i*j%2)+(i*j%3) - 1) >> 7; break;
507 case 6: *q ^= (char)((i*j+(i*j%3)+1) << 7) >> 7; break;
508 case 7: *q ^= (char)((i+j+(i*j%3)+1) << 7) >> 7; break;
513 evaluate(uchar verlev, uchar *p)
515 int r, i, j, l, s, sc, cnt;
525 s = side[verlev >> 2];
529 for(i = 0; i < s; i++){
533 for(j = 0; j < s; j++){
534 q = p[i * (s + 8) + j + 4 + (s + 8) * 4] >= 0x80;
543 if((sh & 0x7f) == 0x5d)
549 sc = abs(cnt - s * s / 2) / (s * s / 20) * N4;
551 for(j = 0; j < s; j++){
555 for(i = 0; i < s; i++){
556 q = p[i * (s + 8) + j + 4 + (s + 8) * 4];
564 if((sh & 0x7f) == 0x5d)
572 for(j = 1; j < s; j++)
573 for(i = 1; i < s; i++){
574 pp = p + i * (s + 8) + j + 4 + (s + 8) * 4;
575 if(pp[0] == pp[-1] && pp[0] == pp[-(s+8)] && pp[0] == pp[-1-(s+8)])
582 format(uchar verlev, uchar *p, int m)
584 static ushort format[] =
585 {21522, 20773, 24188, 23371, 17913, 16590, 20375, 19104, 30660,
586 29427, 32170, 30877, 26159, 25368, 27713, 26998, 5769, 5054, 7399,
587 6608, 1890, 597, 3340, 2107, 13663, 12392, 16177, 14854, 9396, 8579,
593 s = side[verlev >> 2];
594 f = ~format[verlev << 3 & 0x18 ^ 8 | m];
595 for(i = 0; i < 15; i++){
596 c = (char)(f << 7) >> 7;
598 p[(i + (i >= 6)) * (s + 8) + 8 + 4 + (s + 8) * 4] = c;
599 p[12 * (s + 8) + (s + 3 - i)] = c;
601 p[(s - 15 + i) * (s + 8) + 8 + 4 + (s + 8) * 4] = c;
602 p[12 * (s + 8) + (18 - i + (i == 8))] = c;
606 p[(s - 8) * (s + 8) + 8 + 4 + (s + 8) * 4] = 0;
610 version(uchar verlev, uchar *p)
614 static int version[] = {
615 0x07C94, 0x085BC, 0x09A99, 0x0A4D3, 0x0BBF6, 0x0C762, 0x0D847,
616 0x0E60D, 0x0F928, 0x10B78, 0x1145D, 0x12A17, 0x13532, 0x149A6,
617 0x15683, 0x168C9, 0x177EC, 0x18EC4, 0x191E1, 0x1AFAB, 0x1B08E,
618 0x1CC1A, 0x1D33F, 0x1ED75, 0x1F250, 0x209D5, 0x216F0, 0x228BA,
619 0x2379F, 0x24B0B, 0x2542E, 0x26A64, 0x27541, 0x28C69
624 s = side[verlev >> 2] + 8;
625 f = ~version[(verlev >> 2) - 6];
626 for(i = 0; i < 18; i++){
627 c = (char)(f << 7) >> 7;
629 q = (s - 15 + i % 3) * s + (4 + i / 3);
631 p[(q * s) % (s * s - 1)] = c;
636 finalize(uchar verlev, uchar *p)
640 s = side[verlev >> 2] + 8;
643 *((char *)p++) >>= 4;
647 qrcode(int ver, int level, int mode, uchar *data, int dlen, int *sidep)
649 int s, nc, m, mv, mbest, mval, nchar;
654 verlev = formsel(ver, level, mode, data, dlen, &nchar);
657 s = side[verlev >> 2];
658 d = encode(verlev, data, dlen, mode, nchar);
661 w = codewords(verlev, d, &nc);
670 fill(verlev, b, w, nc);
672 SET(mbest); SET(mval);
673 for(m = 0; m < 8; m++){
675 mv = evaluate(verlev, b);
676 if(m == 0 || mv < mval){
680 if(m != 7 || mbest != m)
684 mask(verlev, b, mbest);
685 format(verlev, b, mbest);
695 fprint(2, "usage: %s [-LMQHn] [-v ver]\n", argv0);
700 main(int argc, char **argv)
704 int ver, lev, mode, s;
712 case 'L': lev = 0; break;
713 case 'M': lev = 1; break;
714 case 'Q': lev = 2; break;
715 case 'H': lev = 3; break;
717 ver = strtol(EARGF(usage()), &c, 0);
718 if(*c != 0 || ver < 0 || ver > 40)
721 case 'n': mode = NUM; break;
722 case 'a': mode = ANUM; break;
729 rc = readn(0, buf, sizeof(buf));
731 sysfatal("read: %r");
732 b = qrcode(ver, lev, mode, buf, rc, &s);
735 if(print("%11s %11d %11d %11d %11d ", "k8", 0, 0, s, s) != 5*12)
736 sysfatal("print: %r");
737 if(write(1, b, s*s) != s*s)
738 sysfatal("write: %r");
742 uchar qrrawpolys[] = {
743 7, 87, 229, 146, 149, 238, 102, 21,
744 0, 10, 251, 67, 46, 61, 118, 70,
745 64, 94, 32, 45, 0, 13, 74, 152,
746 176, 100, 86, 100, 106, 104, 130, 218,
747 206, 140, 78, 0, 15, 8, 183, 61,
748 91, 202, 37, 51, 58, 58, 237, 140,
749 124, 5, 99, 105, 0, 16, 120, 104,
750 107, 109, 102, 161, 76, 3, 91, 191,
751 147, 169, 182, 194, 225, 120, 0, 17,
752 43, 139, 206, 78, 43, 239, 123, 206,
753 214, 147, 24, 99, 150, 39, 243, 163,
754 136, 0, 18, 215, 234, 158, 94, 184,
755 97, 118, 170, 79, 187, 152, 148, 252,
756 179, 5, 98, 96, 153, 0, 20, 17,
757 60, 79, 50, 61, 163, 26, 187, 202,
758 180, 221, 225, 83, 239, 156, 164, 212,
759 212, 188, 190, 0, 22, 210, 171, 247,
760 242, 93, 230, 14, 109, 221, 53, 200,
761 74, 8, 172, 98, 80, 219, 134, 160,
762 105, 165, 231, 0, 24, 229, 121, 135,
763 48, 211, 117, 251, 126, 159, 180, 169,
764 152, 192, 226, 228, 218, 111, 117, 232,
765 87, 96, 227, 21, 0, 26, 173, 125,
766 158, 2, 103, 182, 118, 17, 145, 201,
767 111, 28, 165, 53, 161, 21, 245, 142,
768 13, 102, 48, 227, 153, 145, 218, 70,
769 0, 28, 168, 223, 200, 104, 224, 234,
770 108, 180, 110, 190, 195, 147, 205, 27,
771 232, 201, 21, 43, 245, 87, 42, 195,
772 212, 119, 242, 37, 9, 123, 0, 30,
773 41, 173, 145, 152, 216, 31, 179, 182,
774 50, 48, 110, 86, 239, 96, 222, 125,
775 42, 173, 226, 193, 224, 130, 156, 37,
776 251, 216, 238, 40, 192, 180, 0, 32,
777 10, 6, 106, 190, 249, 167, 4, 67,
778 209, 138, 138, 32, 242, 123, 89, 27,
779 120, 185, 80, 156, 38, 69, 171, 60,
780 28, 222, 80, 52, 254, 185, 220, 241,
781 0, 34, 111, 77, 146, 94, 26, 21,
782 108, 19, 105, 94, 113, 193, 86, 140,
783 163, 125, 58, 158, 229, 239, 218, 103,
784 56, 70, 114, 61, 183, 129, 167, 13,
785 98, 62, 129, 51, 0, 36, 200, 183,
786 98, 16, 172, 31, 246, 234, 60, 152,
787 115, 167, 152, 113, 248, 238, 107, 18,
788 63, 218, 37, 87, 210, 105, 177, 120,
789 74, 121, 196, 117, 251, 113, 233, 30,
790 120, 0, 40, 59, 116, 79, 161, 252,
791 98, 128, 205, 128, 161, 247, 57, 163,
792 56, 235, 106, 53, 26, 187, 174, 226,
793 104, 170, 7, 175, 35, 181, 114, 88,
794 41, 47, 163, 125, 134, 72, 20, 232,
795 53, 35, 15, 0, 42, 250, 103, 221,
796 230, 25, 18, 137, 231, 3, 58, 242,
797 221, 191, 110, 84, 230, 8, 188, 106,
798 96, 147, 15, 131, 139, 34, 101, 223,
799 39, 101, 213, 199, 237, 254, 201, 123,
800 171, 162, 194, 117, 50, 96, 0, 44,
801 190, 7, 61, 121, 71, 246, 69, 55,
802 168, 188, 89, 243, 191, 25, 72, 123,
803 9, 145, 14, 247, 238, 44, 78, 143,
804 62, 224, 126, 118, 114, 68, 163, 52,
805 194, 217, 147, 204, 169, 37, 130, 113,
806 102, 73, 181, 0, 46, 112, 94, 88,
807 112, 253, 224, 202, 115, 187, 99, 89,
808 5, 54, 113, 129, 44, 58, 16, 135,
809 216, 169, 211, 36, 4, 96, 60, 241,
810 73, 104, 234, 8, 249, 245, 119, 174,
811 52, 25, 157, 224, 43, 202, 223, 19,
812 82, 15, 0, 48, 228, 25, 196, 130,
813 211, 146, 60, 24, 251, 90, 39, 102,
814 240, 61, 178, 63, 46, 123, 115, 18,
815 221, 111, 135, 160, 182, 205, 107, 206,
816 95, 150, 120, 184, 91, 21, 247, 156,
817 140, 238, 191, 11, 94, 227, 84, 50,
818 163, 39, 34, 108, 0, 50, 232, 125,
819 157, 161, 164, 9, 118, 46, 209, 99,
820 203, 193, 35, 3, 209, 111, 195, 242,
821 203, 225, 46, 13, 32, 160, 126, 209,
822 130, 160, 242, 215, 242, 75, 77, 42,
823 189, 32, 113, 65, 124, 69, 228, 114,
824 235, 175, 124, 170, 215, 232, 133, 205,
825 0, 52, 116, 50, 86, 186, 50, 220,
826 251, 89, 192, 46, 86, 127, 124, 19,
827 184, 233, 151, 215, 22, 14, 59, 145,
828 37, 242, 203, 134, 254, 89, 190, 94,
829 59, 65, 124, 113, 100, 233, 235, 121,
830 22, 76, 86, 97, 39, 242, 200, 220,
831 101, 33, 239, 254, 116, 51, 0, 54,
832 183, 26, 201, 87, 210, 221, 113, 21,
833 46, 65, 45, 50, 238, 184, 249, 225,
834 102, 58, 209, 218, 109, 165, 26, 95,
835 184, 192, 52, 245, 35, 254, 238, 175,
836 172, 79, 123, 25, 122, 43, 120, 108,
837 215, 80, 128, 201, 235, 8, 153, 59,
838 101, 31, 198, 76, 31, 156, 0, 56,
839 106, 120, 107, 157, 164, 216, 112, 116,
840 2, 91, 248, 163, 36, 201, 202, 229,
841 6, 144, 254, 155, 135, 208, 170, 209,
842 12, 139, 127, 142, 182, 249, 177, 174,
843 190, 28, 10, 85, 239, 184, 101, 124,
844 152, 206, 96, 23, 163, 61, 27, 196,
845 247, 151, 154, 202, 207, 20, 61, 10,
846 0, 58, 82, 116, 26, 247, 66, 27,
847 62, 107, 252, 182, 200, 185, 235, 55,
848 251, 242, 210, 144, 154, 237, 176, 141,
849 192, 248, 152, 249, 206, 85, 253, 142,
850 65, 165, 125, 23, 24, 30, 122, 240,
851 214, 6, 129, 218, 29, 145, 127, 134,
852 206, 245, 117, 29, 41, 63, 159, 142,
853 233, 125, 148, 123, 0, 60, 107, 140,
854 26, 12, 9, 141, 243, 197, 226, 197,
855 219, 45, 211, 101, 219, 120, 28, 181,
856 127, 6, 100, 247, 2, 205, 198, 57,
857 115, 219, 101, 109, 160, 82, 37, 38,
858 238, 49, 160, 209, 121, 86, 11, 124,
859 30, 181, 84, 25, 194, 87, 65, 102,
860 190, 220, 70, 27, 209, 16, 89, 7,
861 33, 240, 0, 62, 65, 202, 113, 98,
862 71, 223, 248, 118, 214, 94, 122, 37,
863 23, 2, 228, 58, 121, 7, 105, 135,
864 78, 243, 118, 70, 76, 223, 89, 72,
865 50, 70, 111, 194, 17, 212, 126, 181,
866 35, 221, 117, 235, 11, 229, 149, 147,
867 123, 213, 40, 115, 6, 200, 100, 26,
868 246, 182, 218, 127, 215, 36, 186, 110,
869 106, 0, 64, 45, 51, 175, 9, 7,
870 158, 159, 49, 68, 119, 92, 123, 177,
871 204, 187, 254, 200, 78, 141, 149, 119,
872 26, 127, 53, 160, 93, 199, 212, 29,
873 24, 145, 156, 208, 150, 218, 209, 4,
874 216, 91, 47, 184, 146, 47, 140, 195,
875 195, 125, 242, 238, 63, 99, 108, 140,
876 230, 242, 31, 204, 11, 178, 243, 217,
877 156, 213, 231, 0, 66, 5, 118, 222,
878 180, 136, 136, 162, 51, 46, 117, 13,
879 215, 81, 17, 139, 247, 197, 171, 95,
880 173, 65, 137, 178, 68, 111, 95, 101,
881 41, 72, 214, 169, 197, 95, 7, 44,
882 154, 77, 111, 236, 40, 121, 143, 63,
883 87, 80, 253, 240, 126, 217, 77, 34,
884 232, 106, 50, 168, 82, 76, 146, 67,
885 106, 171, 25, 132, 93, 45, 105, 0,
886 68, 247, 159, 223, 33, 224, 93, 77,
887 70, 90, 160, 32, 254, 43, 150, 84,
888 101, 190, 205, 133, 52, 60, 202, 165,
889 220, 203, 151, 93, 84, 15, 84, 253,
890 173, 160, 89, 227, 52, 199, 97, 95,
891 231, 52, 177, 41, 125, 137, 241, 166,
892 225, 118, 2, 54, 32, 82, 215, 175,
893 198, 43, 238, 235, 27, 101, 184, 127,
894 3, 5, 8, 163, 238, 0, 0
897 /* (version - 1) * 4 + level, number of blocks, number of bytes in block, number of data bytes */