2 * Copyright 2009 ZXing authors
\r
4 * Licensed under the Apache License, Version 2.0 (the "License");
\r
5 * you may not use this file except in compliance with the License.
\r
6 * You may obtain a copy of the License at
\r
8 * http://www.apache.org/licenses/LICENSE-2.0
\r
10 * Unless required by applicable law or agreed to in writing, software
\r
11 * distributed under the License is distributed on an "AS IS" BASIS,
\r
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
13 * See the License for the specific language governing permissions and
\r
14 * limitations under the License.
\r
17 package com.google.zxing.pdf417.decoder;
\r
19 import com.google.zxing.FormatException;
\r
20 import com.google.zxing.NotFoundException;
\r
21 import com.google.zxing.common.BitMatrix;
\r
25 * This class parses the BitMatrix image into codewords.
\r
28 * @author SITA Lab (kevin.osullivan@sita.aero)
\r
30 final class BitMatrixParser {
\r
32 private static final int MAX_ROW_DIFFERENCE = 6;
\r
33 private static final int MAX_ROWS = 90;
\r
34 //private static final int MAX_COLUMNS = 30;
\r
35 // Maximum Codewords (Data + Error)
\r
36 private static final int MAX_CW_CAPACITY = 929;
\r
37 private static final int MODULES_IN_SYMBOL = 17;
\r
39 private final BitMatrix bitMatrix;
\r
40 private int rows = 0;
\r
41 //private int columns = 0;
\r
43 private int leftColumnECData = 0;
\r
44 private int rightColumnECData = 0;
\r
45 private int eraseCount = 0;
\r
46 private int[] erasures = null;
\r
47 private int ecLevel = -1;
\r
49 BitMatrixParser(BitMatrix bitMatrix) {
\r
50 this.bitMatrix = bitMatrix;
\r
54 * To ensure separability of rows, codewords of consecutive rows belong to
\r
55 * different subsets of all possible codewords. This routine scans the
\r
56 * symbols in the barcode. When it finds a number of consecutive rows which
\r
57 * are the same, it assumes that this is a row of codewords and processes
\r
58 * them into a codeword array.
\r
60 * @return an array of codewords.
\r
62 int[] readCodewords() throws FormatException {
\r
63 int width = bitMatrix.getWidth();
\r
64 // TODO should be a rectangular matrix
\r
67 erasures = new int[MAX_CW_CAPACITY];
\r
69 // Get the number of pixels in a module across the X dimension
\r
70 //float moduleWidth = bitMatrix.getModuleWidth();
\r
71 float moduleWidth = 1.0f; // Image has been sampled and reduced
\r
73 int[] rowCounters = new int[width];
\r
74 int[] codewords = new int[MAX_CW_CAPACITY];
\r
76 int matchingConsecutiveScans = 0;
\r
77 boolean rowInProgress = false;
\r
80 for (int i = 1; i < height; i++) {
\r
81 if (rowNumber >= MAX_ROWS) {
\r
82 // Something is wrong, since we have exceeded
\r
83 // the maximum rows in the specification.
\r
84 // TODO Maybe return error code
\r
87 int rowDifference = 0;
\r
88 // Scan a line of modules and check the
\r
89 // difference between this and the previous line
\r
90 for (int j = 0; j < width; j++) {
\r
91 // Accumulate differences between this line and the
\r
93 if (bitMatrix.get(j, i) != bitMatrix.get(j, i - 1)) {
\r
97 if (rowDifference <= moduleWidth * MAX_ROW_DIFFERENCE) {
\r
98 for (int j = 0; j < width; j++) {
\r
99 // Accumulate the black pixels on this line
\r
100 if (bitMatrix.get(j, i)) {
\r
104 // Increment the number of consecutive rows of pixels
\r
105 // that are more or less the same
\r
106 matchingConsecutiveScans++;
\r
107 // Height of a row is a multiple of the module size in pixels
\r
108 // Usually at least 3 times the module size
\r
109 if (matchingConsecutiveScans >= moduleWidth * 2) { // MGMG
\r
110 // We have some previous matches as well as a match here
\r
111 // Set processing a unique row.
\r
112 rowInProgress = true;
\r
115 if (rowInProgress) {
\r
117 next = processRow(rowCounters, rowNumber, rowHeight, codewords, next);
\r
119 // Something is wrong, since we have exceeded
\r
120 // the maximum columns in the specification.
\r
121 // TODO Maybe return error code
\r
124 // Reinitialize the row counters.
\r
125 for (int j = 0; j < rowCounters.length; j++) {
\r
126 rowCounters[j] = 0;
\r
131 matchingConsecutiveScans = 0;
\r
132 rowInProgress = false;
\r
136 // Check for a row that was in progress before we exited above.
\r
137 if (rowInProgress) {
\r
139 if (rowNumber >= MAX_ROWS) {
\r
140 // Something is wrong, since we have exceeded
\r
141 // the maximum rows in the specification.
\r
142 // TODO Maybe return error code
\r
145 next = processRow(rowCounters, rowNumber, rowHeight, codewords, next);
\r
149 erasures = trimArray(erasures, eraseCount);
\r
150 return trimArray(codewords, next);
\r
154 * Trim the array to the required size.
\r
156 * @param array the array
\r
157 * @param size the size to trim it to
\r
158 * @return the new trimmed array
\r
160 private static int[] trimArray(int[] array, int size) {
\r
162 int[] a = new int[size];
\r
163 for (int i = 0; i < size; i++) {
\r
173 * Convert the symbols in the row to codewords.
\r
174 * Each PDF417 symbol character consists of four bar elements and four space
\r
175 * elements, each of which can be one to six modules wide. The four bar and
\r
176 * four space elements shall measure 17 modules in total.
\r
178 * @param rowCounters an array containing the counts of black pixels for each column
\r
180 * @param rowNumber the current row number of codewords.
\r
181 * @param rowHeight the height of this row in pixels.
\r
182 * @param codewords the codeword array to save codewords into.
\r
183 * @param next the next available index into the codewords array.
\r
184 * @return the next available index into the codeword array after processing
\r
187 int processRow(int[] rowCounters, int rowNumber, int rowHeight, int[] codewords, int next)
\r
188 throws FormatException {
\r
189 int width = bitMatrix.getWidth();
\r
190 int columnNumber = 0;
\r
192 for (int i = 0; i < width; i += MODULES_IN_SYMBOL) {
\r
193 // This happens in real life and is almost surely a rare misdecode
\r
194 if (i + MODULES_IN_SYMBOL > rowCounters.length) {
\r
195 throw FormatException.getFormatInstance();
\r
197 for (int mask = MODULES_IN_SYMBOL - 1; mask >= 0; mask--) {
\r
198 if (rowCounters[i + (MODULES_IN_SYMBOL - 1 - mask)] >= rowHeight >>> 1) {
\r
199 symbol |= 1L << mask;
\r
202 if (columnNumber > 0) {
\r
203 int cw = getCodeword(symbol);
\r
204 // if (debug) System.out.println(" " + Long.toBinaryString(symbol) +
\r
205 // " cw=" +cw + " ColumnNumber=" +columnNumber + "i=" +i);
\r
206 if (cw < 0 && i < width - MODULES_IN_SYMBOL) {
\r
207 // Skip errors on the Right row indicator column
\r
208 erasures[eraseCount] = next;
\r
212 codewords[next++] = cw;
\r
215 // Left row indicator column
\r
216 int cw = getCodeword(symbol);
\r
217 // if (debug) System.out.println(" " + Long.toBinaryString(symbol) +
\r
218 // " cw=" +cw + " ColumnNumber=" +columnNumber + "i=" +i);
\r
220 switch (rowNumber % 3) {
\r
224 leftColumnECData = cw;
\r
232 //columns = columnNumber;
\r
235 if (columnNumber > 1) {
\r
236 // Right row indicator column is in codeword[next]
\r
238 // Overwrite the last codeword i.e. Right Row Indicator
\r
241 switch (rowNumber % 3) {
\r
247 rightColumnECData = codewords[next];
\r
248 if (rightColumnECData == leftColumnECData
\r
249 && leftColumnECData != 0) {
\r
250 ecLevel = ((rightColumnECData % 30) - rows % 3) / 3;
\r
255 codewords[next] = 0;
\r
261 * Build a symbol from the pixels.
\r
262 * Each symbol character is defined by an 8-digit bar-space sequence which
\r
263 * represents the module widths of the eight elements of that symbol
\r
266 * @param counters array of pixel counter corresponding to each Bar/Space pattern.
\r
267 * @return the symbol
\r
270 private static long getSymbol(int[] counters, float moduleWidth) {
\r
271 int pixelsInSymbol = 0;
\r
272 for (int j = 0; j < counters.length; j++) {
\r
273 pixelsInSymbol += counters[j];
\r
275 float avgModuleWidth = (pixelsInSymbol / 17.0f);
\r
276 boolean toggle = true;
\r
279 for (int j = 0; j < counters.length; j++) {
\r
280 if (counters[j] < moduleWidth && counters[j] > 0) {
\r
281 // Give a very narrow bar/space a chance
\r
282 counters[j] = (int) moduleWidth;
\r
284 // Calculate number of modules in the symbol.
\r
285 // int modules = (int)(counters[j]/moduleWidth);
\r
286 // int modules = round(counters[j]/moduleWidth);
\r
287 int modules = round(counters[j] / avgModuleWidth);
\r
289 // Maximum size is 6 modules
\r
291 } else if (modules < 1) {
\r
295 for (int k = 0; k < modules; k++) {
\r
296 symbol |= 1 << (16 - k - shift);
\r
309 * Translate the symbol into a codeword.
\r
312 * @return the codeword corresponding to the symbol.
\r
314 private static int getCodeword(long symbol) {
\r
317 int i = findCodewordIndex(sym);
\r
321 long cw = CODEWORD_TABLE[i] - 1;
\r
328 * Use a binary search to find the index of the codeword corresponding to
\r
331 * @param symbol the symbol from the barcode.
\r
332 * @return the index into the codeword table.
\r
334 private static int findCodewordIndex(long symbol) {
\r
336 int upto = SYMBOL_TABLE.length;
\r
337 while (first < upto) {
\r
338 int mid = (first + upto) >>> 1; // Compute mid point.
\r
339 if (symbol < SYMBOL_TABLE[mid]) {
\r
340 upto = mid; // repeat search in bottom half.
\r
341 } else if (symbol > SYMBOL_TABLE[mid]) {
\r
342 first = mid + 1; // Repeat search in top half.
\r
344 return mid; // Found it. return position
\r
348 // if (debug) System.out.println("Failed to find codeword for Symbol=" +
\r
353 * Ends up being a bit faster than Math.round(). This merely rounds its
\r
354 * argument to the nearest int, where x.5 rounds up.
\r
357 private static int round(float d) {
\r
358 return (int) (d + 0.5f);
\r
363 * Returns an array of locations representing the erasures.
\r
365 public int[] getErasures() {
\r
369 public int getECLevel() {
\r
374 * Convert the symbols in the row to codewords.
\r
375 * Each PDF417 symbol character consists of four bar elements and four space
\r
376 * elements, each of which can be one to six modules wide. The four bar and
\r
377 * four space elements shall measure 17 modules in total.
\r
379 * @param rowCounters an array containing the counts of black pixels for each column
\r
381 * @param rowNumber the current row number of codewords.
\r
382 * @param rowHeight the height of this row in pixels.
\r
383 * @param moduleWidth the size of a module in pixels.
\r
384 * @param codewords the codeword array to save codewords into.
\r
385 * @param next the next available index into the codewords array.
\r
386 * @return the next available index into the codeword array after processing
\r
388 * @throws NotFoundException
\r
391 int processRow1(int[] rowCounters, int rowNumber, int rowHeight,
\r
392 float moduleWidth, int[] codewords, int next) {
\r
393 int width = bitMatrix.getDimension();
\r
394 int firstBlack = 0;
\r
396 for (firstBlack = 0; firstBlack < width; firstBlack++) {
\r
397 // Step forward until we find the first black pixels
\r
398 if (rowCounters[firstBlack] >= rowHeight >>> 1) {
\r
403 int[] counters = new int[8];
\r
404 int state = 0; // In black pixels, looking for white, first or second time
\r
406 int columnNumber = 0;
\r
407 for (int i = firstBlack; i < width; i++) {
\r
408 if (state == 1 || state == 3 || state == 5 || state == 7) { // In white
\r
413 // If more than half the column is black
\r
414 if (rowCounters[i] >= rowHeight >>> 1 || i == width - 1) {
\r
415 if (i == width - 1) {
\r
418 // In black pixels or the end of a row
\r
421 // Don't count the last one
\r
428 if (rowCounters[i] < rowHeight >>> 1) {
\r
429 // Found white pixels
\r
431 if (state == 7 && i == width - 1) {
\r
432 // Its found white pixels at the end of the row,
\r
433 // give it a chance to exit gracefully
\r
436 // Found white pixels
\r
441 // Still in black pixels
\r
446 if (state == 8) { // Found black, white, black, white, black, white,
\r
447 // black, white and stumbled back onto black; done
\r
448 if (columnNumber >= MAX_COLUMNS) {
\r
449 // Something is wrong, since we have exceeded
\r
450 // the maximum columns in the specification.
\r
451 // TODO Maybe return error code
\r
454 if (columnNumber > 0) {
\r
455 symbol = getSymbol(counters, moduleWidth);
\r
456 int cw = getCodeword(symbol);
\r
457 // if (debug) System.out.println(" " +
\r
458 // Long.toBinaryString(symbol) + " cw=" +cw + " ColumnNumber="
\r
459 // +columnNumber + "i=" +i);
\r
461 erasures[eraseCount] = next;
\r
465 codewords[next++] = cw;
\r
468 // Left row indicator column
\r
469 symbol = getSymbol(counters, moduleWidth);
\r
470 int cw = getCodeword(symbol);
\r
472 switch (rowNumber % 3) {
\r
476 leftColumnECData = cw;
\r
483 // Step back so that this pixel can be examined during the next
\r
486 counters = new int[8];
\r
487 columns = columnNumber;
\r
489 // Introduce some errors if (rowNumber == 0 && columnNumber == 4)
\r
490 // { codewords[next-1] = 0; erasures[eraseCount] = next-1;
\r
491 // eraseCount++; } if (rowNumber == 0 && columnNumber == 6) {
\r
492 // codewords[next-1] = 10; erasures[eraseCount] = next-1;
\r
493 // eraseCount++; } if (rowNumber == 0 && columnNumber == 8) {
\r
494 // codewords[next-1] = 10; erasures[eraseCount] = next-1;
\r
500 if (columnNumber > 1) {
\r
501 // Right row indicator column is in codeword[next]
\r
503 // Overwrite the last codeword i.e. Right Row Indicator
\r
506 switch (rowNumber % 3) {
\r
512 rightColumnECData = codewords[next];
\r
513 if (rightColumnECData == leftColumnECData
\r
514 && leftColumnECData != 0) {
\r
515 ecLevel = ((rightColumnECData % 30) - rows % 3) / 3;
\r
520 codewords[next] = 0;
\r
527 * The sorted table of all possible symbols. Extracted from the PDF417
\r
528 * specification. The index of a symbol in this table corresponds to the
\r
529 * index into the codeword table.
\r
531 private static final int[] SYMBOL_TABLE = {0x1025e, 0x1027a, 0x1029e,
\r
532 0x102bc, 0x102f2, 0x102f4, 0x1032e, 0x1034e, 0x1035c, 0x10396,
\r
533 0x103a6, 0x103ac, 0x10422, 0x10428, 0x10436, 0x10442, 0x10444,
\r
534 0x10448, 0x10450, 0x1045e, 0x10466, 0x1046c, 0x1047a, 0x10482,
\r
535 0x1049e, 0x104a0, 0x104bc, 0x104c6, 0x104d8, 0x104ee, 0x104f2,
\r
536 0x104f4, 0x10504, 0x10508, 0x10510, 0x1051e, 0x10520, 0x1053c,
\r
537 0x10540, 0x10578, 0x10586, 0x1058c, 0x10598, 0x105b0, 0x105be,
\r
538 0x105ce, 0x105dc, 0x105e2, 0x105e4, 0x105e8, 0x105f6, 0x1062e,
\r
539 0x1064e, 0x1065c, 0x1068e, 0x1069c, 0x106b8, 0x106de, 0x106fa,
\r
540 0x10716, 0x10726, 0x1072c, 0x10746, 0x1074c, 0x10758, 0x1076e,
\r
541 0x10792, 0x10794, 0x107a2, 0x107a4, 0x107a8, 0x107b6, 0x10822,
\r
542 0x10828, 0x10842, 0x10848, 0x10850, 0x1085e, 0x10866, 0x1086c,
\r
543 0x1087a, 0x10882, 0x10884, 0x10890, 0x1089e, 0x108a0, 0x108bc,
\r
544 0x108c6, 0x108cc, 0x108d8, 0x108ee, 0x108f2, 0x108f4, 0x10902,
\r
545 0x10908, 0x1091e, 0x10920, 0x1093c, 0x10940, 0x10978, 0x10986,
\r
546 0x10998, 0x109b0, 0x109be, 0x109ce, 0x109dc, 0x109e2, 0x109e4,
\r
547 0x109e8, 0x109f6, 0x10a08, 0x10a10, 0x10a1e, 0x10a20, 0x10a3c,
\r
548 0x10a40, 0x10a78, 0x10af0, 0x10b06, 0x10b0c, 0x10b18, 0x10b30,
\r
549 0x10b3e, 0x10b60, 0x10b7c, 0x10b8e, 0x10b9c, 0x10bb8, 0x10bc2,
\r
550 0x10bc4, 0x10bc8, 0x10bd0, 0x10bde, 0x10be6, 0x10bec, 0x10c2e,
\r
551 0x10c4e, 0x10c5c, 0x10c62, 0x10c64, 0x10c68, 0x10c76, 0x10c8e,
\r
552 0x10c9c, 0x10cb8, 0x10cc2, 0x10cc4, 0x10cc8, 0x10cd0, 0x10cde,
\r
553 0x10ce6, 0x10cec, 0x10cfa, 0x10d0e, 0x10d1c, 0x10d38, 0x10d70,
\r
554 0x10d7e, 0x10d82, 0x10d84, 0x10d88, 0x10d90, 0x10d9e, 0x10da0,
\r
555 0x10dbc, 0x10dc6, 0x10dcc, 0x10dd8, 0x10dee, 0x10df2, 0x10df4,
\r
556 0x10e16, 0x10e26, 0x10e2c, 0x10e46, 0x10e58, 0x10e6e, 0x10e86,
\r
557 0x10e8c, 0x10e98, 0x10eb0, 0x10ebe, 0x10ece, 0x10edc, 0x10f0a,
\r
558 0x10f12, 0x10f14, 0x10f22, 0x10f28, 0x10f36, 0x10f42, 0x10f44,
\r
559 0x10f48, 0x10f50, 0x10f5e, 0x10f66, 0x10f6c, 0x10fb2, 0x10fb4,
\r
560 0x11022, 0x11028, 0x11042, 0x11048, 0x11050, 0x1105e, 0x1107a,
\r
561 0x11082, 0x11084, 0x11090, 0x1109e, 0x110a0, 0x110bc, 0x110c6,
\r
562 0x110cc, 0x110d8, 0x110ee, 0x110f2, 0x110f4, 0x11102, 0x1111e,
\r
563 0x11120, 0x1113c, 0x11140, 0x11178, 0x11186, 0x11198, 0x111b0,
\r
564 0x111be, 0x111ce, 0x111dc, 0x111e2, 0x111e4, 0x111e8, 0x111f6,
\r
565 0x11208, 0x1121e, 0x11220, 0x11278, 0x112f0, 0x1130c, 0x11330,
\r
566 0x1133e, 0x11360, 0x1137c, 0x1138e, 0x1139c, 0x113b8, 0x113c2,
\r
567 0x113c8, 0x113d0, 0x113de, 0x113e6, 0x113ec, 0x11408, 0x11410,
\r
568 0x1141e, 0x11420, 0x1143c, 0x11440, 0x11478, 0x114f0, 0x115e0,
\r
569 0x1160c, 0x11618, 0x11630, 0x1163e, 0x11660, 0x1167c, 0x116c0,
\r
570 0x116f8, 0x1171c, 0x11738, 0x11770, 0x1177e, 0x11782, 0x11784,
\r
571 0x11788, 0x11790, 0x1179e, 0x117a0, 0x117bc, 0x117c6, 0x117cc,
\r
572 0x117d8, 0x117ee, 0x1182e, 0x11834, 0x1184e, 0x1185c, 0x11862,
\r
573 0x11864, 0x11868, 0x11876, 0x1188e, 0x1189c, 0x118b8, 0x118c2,
\r
574 0x118c8, 0x118d0, 0x118de, 0x118e6, 0x118ec, 0x118fa, 0x1190e,
\r
575 0x1191c, 0x11938, 0x11970, 0x1197e, 0x11982, 0x11984, 0x11990,
\r
576 0x1199e, 0x119a0, 0x119bc, 0x119c6, 0x119cc, 0x119d8, 0x119ee,
\r
577 0x119f2, 0x119f4, 0x11a0e, 0x11a1c, 0x11a38, 0x11a70, 0x11a7e,
\r
578 0x11ae0, 0x11afc, 0x11b08, 0x11b10, 0x11b1e, 0x11b20, 0x11b3c,
\r
579 0x11b40, 0x11b78, 0x11b8c, 0x11b98, 0x11bb0, 0x11bbe, 0x11bce,
\r
580 0x11bdc, 0x11be2, 0x11be4, 0x11be8, 0x11bf6, 0x11c16, 0x11c26,
\r
581 0x11c2c, 0x11c46, 0x11c4c, 0x11c58, 0x11c6e, 0x11c86, 0x11c98,
\r
582 0x11cb0, 0x11cbe, 0x11cce, 0x11cdc, 0x11ce2, 0x11ce4, 0x11ce8,
\r
583 0x11cf6, 0x11d06, 0x11d0c, 0x11d18, 0x11d30, 0x11d3e, 0x11d60,
\r
584 0x11d7c, 0x11d8e, 0x11d9c, 0x11db8, 0x11dc4, 0x11dc8, 0x11dd0,
\r
585 0x11dde, 0x11de6, 0x11dec, 0x11dfa, 0x11e0a, 0x11e12, 0x11e14,
\r
586 0x11e22, 0x11e24, 0x11e28, 0x11e36, 0x11e42, 0x11e44, 0x11e50,
\r
587 0x11e5e, 0x11e66, 0x11e6c, 0x11e82, 0x11e84, 0x11e88, 0x11e90,
\r
588 0x11e9e, 0x11ea0, 0x11ebc, 0x11ec6, 0x11ecc, 0x11ed8, 0x11eee,
\r
589 0x11f1a, 0x11f2e, 0x11f32, 0x11f34, 0x11f4e, 0x11f5c, 0x11f62,
\r
590 0x11f64, 0x11f68, 0x11f76, 0x12048, 0x1205e, 0x12082, 0x12084,
\r
591 0x12090, 0x1209e, 0x120a0, 0x120bc, 0x120d8, 0x120f2, 0x120f4,
\r
592 0x12108, 0x1211e, 0x12120, 0x1213c, 0x12140, 0x12178, 0x12186,
\r
593 0x12198, 0x121b0, 0x121be, 0x121e2, 0x121e4, 0x121e8, 0x121f6,
\r
594 0x12204, 0x12210, 0x1221e, 0x12220, 0x12278, 0x122f0, 0x12306,
\r
595 0x1230c, 0x12330, 0x1233e, 0x12360, 0x1237c, 0x1238e, 0x1239c,
\r
596 0x123b8, 0x123c2, 0x123c8, 0x123d0, 0x123e6, 0x123ec, 0x1241e,
\r
597 0x12420, 0x1243c, 0x124f0, 0x125e0, 0x12618, 0x1263e, 0x12660,
\r
598 0x1267c, 0x126c0, 0x126f8, 0x12738, 0x12770, 0x1277e, 0x12782,
\r
599 0x12784, 0x12790, 0x1279e, 0x127a0, 0x127bc, 0x127c6, 0x127cc,
\r
600 0x127d8, 0x127ee, 0x12820, 0x1283c, 0x12840, 0x12878, 0x128f0,
\r
601 0x129e0, 0x12bc0, 0x12c18, 0x12c30, 0x12c3e, 0x12c60, 0x12c7c,
\r
602 0x12cc0, 0x12cf8, 0x12df0, 0x12e1c, 0x12e38, 0x12e70, 0x12e7e,
\r
603 0x12ee0, 0x12efc, 0x12f04, 0x12f08, 0x12f10, 0x12f20, 0x12f3c,
\r
604 0x12f40, 0x12f78, 0x12f86, 0x12f8c, 0x12f98, 0x12fb0, 0x12fbe,
\r
605 0x12fce, 0x12fdc, 0x1302e, 0x1304e, 0x1305c, 0x13062, 0x13068,
\r
606 0x1308e, 0x1309c, 0x130b8, 0x130c2, 0x130c8, 0x130d0, 0x130de,
\r
607 0x130ec, 0x130fa, 0x1310e, 0x13138, 0x13170, 0x1317e, 0x13182,
\r
608 0x13184, 0x13190, 0x1319e, 0x131a0, 0x131bc, 0x131c6, 0x131cc,
\r
609 0x131d8, 0x131f2, 0x131f4, 0x1320e, 0x1321c, 0x13270, 0x1327e,
\r
610 0x132e0, 0x132fc, 0x13308, 0x1331e, 0x13320, 0x1333c, 0x13340,
\r
611 0x13378, 0x13386, 0x13398, 0x133b0, 0x133be, 0x133ce, 0x133dc,
\r
612 0x133e2, 0x133e4, 0x133e8, 0x133f6, 0x1340e, 0x1341c, 0x13438,
\r
613 0x13470, 0x1347e, 0x134e0, 0x134fc, 0x135c0, 0x135f8, 0x13608,
\r
614 0x13610, 0x1361e, 0x13620, 0x1363c, 0x13640, 0x13678, 0x136f0,
\r
615 0x1370c, 0x13718, 0x13730, 0x1373e, 0x13760, 0x1377c, 0x1379c,
\r
616 0x137b8, 0x137c2, 0x137c4, 0x137c8, 0x137d0, 0x137de, 0x137e6,
\r
617 0x137ec, 0x13816, 0x13826, 0x1382c, 0x13846, 0x1384c, 0x13858,
\r
618 0x1386e, 0x13874, 0x13886, 0x13898, 0x138b0, 0x138be, 0x138ce,
\r
619 0x138dc, 0x138e2, 0x138e4, 0x138e8, 0x13906, 0x1390c, 0x13930,
\r
620 0x1393e, 0x13960, 0x1397c, 0x1398e, 0x1399c, 0x139b8, 0x139c8,
\r
621 0x139d0, 0x139de, 0x139e6, 0x139ec, 0x139fa, 0x13a06, 0x13a0c,
\r
622 0x13a18, 0x13a30, 0x13a3e, 0x13a60, 0x13a7c, 0x13ac0, 0x13af8,
\r
623 0x13b0e, 0x13b1c, 0x13b38, 0x13b70, 0x13b7e, 0x13b88, 0x13b90,
\r
624 0x13b9e, 0x13ba0, 0x13bbc, 0x13bcc, 0x13bd8, 0x13bee, 0x13bf2,
\r
625 0x13bf4, 0x13c12, 0x13c14, 0x13c22, 0x13c24, 0x13c28, 0x13c36,
\r
626 0x13c42, 0x13c48, 0x13c50, 0x13c5e, 0x13c66, 0x13c6c, 0x13c82,
\r
627 0x13c84, 0x13c90, 0x13c9e, 0x13ca0, 0x13cbc, 0x13cc6, 0x13ccc,
\r
628 0x13cd8, 0x13cee, 0x13d02, 0x13d04, 0x13d08, 0x13d10, 0x13d1e,
\r
629 0x13d20, 0x13d3c, 0x13d40, 0x13d78, 0x13d86, 0x13d8c, 0x13d98,
\r
630 0x13db0, 0x13dbe, 0x13dce, 0x13ddc, 0x13de4, 0x13de8, 0x13df6,
\r
631 0x13e1a, 0x13e2e, 0x13e32, 0x13e34, 0x13e4e, 0x13e5c, 0x13e62,
\r
632 0x13e64, 0x13e68, 0x13e76, 0x13e8e, 0x13e9c, 0x13eb8, 0x13ec2,
\r
633 0x13ec4, 0x13ec8, 0x13ed0, 0x13ede, 0x13ee6, 0x13eec, 0x13f26,
\r
634 0x13f2c, 0x13f3a, 0x13f46, 0x13f4c, 0x13f58, 0x13f6e, 0x13f72,
\r
635 0x13f74, 0x14082, 0x1409e, 0x140a0, 0x140bc, 0x14104, 0x14108,
\r
636 0x14110, 0x1411e, 0x14120, 0x1413c, 0x14140, 0x14178, 0x1418c,
\r
637 0x14198, 0x141b0, 0x141be, 0x141e2, 0x141e4, 0x141e8, 0x14208,
\r
638 0x14210, 0x1421e, 0x14220, 0x1423c, 0x14240, 0x14278, 0x142f0,
\r
639 0x14306, 0x1430c, 0x14318, 0x14330, 0x1433e, 0x14360, 0x1437c,
\r
640 0x1438e, 0x143c2, 0x143c4, 0x143c8, 0x143d0, 0x143e6, 0x143ec,
\r
641 0x14408, 0x14410, 0x1441e, 0x14420, 0x1443c, 0x14440, 0x14478,
\r
642 0x144f0, 0x145e0, 0x1460c, 0x14618, 0x14630, 0x1463e, 0x14660,
\r
643 0x1467c, 0x146c0, 0x146f8, 0x1471c, 0x14738, 0x14770, 0x1477e,
\r
644 0x14782, 0x14784, 0x14788, 0x14790, 0x147a0, 0x147bc, 0x147c6,
\r
645 0x147cc, 0x147d8, 0x147ee, 0x14810, 0x14820, 0x1483c, 0x14840,
\r
646 0x14878, 0x148f0, 0x149e0, 0x14bc0, 0x14c30, 0x14c3e, 0x14c60,
\r
647 0x14c7c, 0x14cc0, 0x14cf8, 0x14df0, 0x14e38, 0x14e70, 0x14e7e,
\r
648 0x14ee0, 0x14efc, 0x14f04, 0x14f08, 0x14f10, 0x14f1e, 0x14f20,
\r
649 0x14f3c, 0x14f40, 0x14f78, 0x14f86, 0x14f8c, 0x14f98, 0x14fb0,
\r
650 0x14fce, 0x14fdc, 0x15020, 0x15040, 0x15078, 0x150f0, 0x151e0,
\r
651 0x153c0, 0x15860, 0x1587c, 0x158c0, 0x158f8, 0x159f0, 0x15be0,
\r
652 0x15c70, 0x15c7e, 0x15ce0, 0x15cfc, 0x15dc0, 0x15df8, 0x15e08,
\r
653 0x15e10, 0x15e20, 0x15e40, 0x15e78, 0x15ef0, 0x15f0c, 0x15f18,
\r
654 0x15f30, 0x15f60, 0x15f7c, 0x15f8e, 0x15f9c, 0x15fb8, 0x1604e,
\r
655 0x1605c, 0x1608e, 0x1609c, 0x160b8, 0x160c2, 0x160c4, 0x160c8,
\r
656 0x160de, 0x1610e, 0x1611c, 0x16138, 0x16170, 0x1617e, 0x16184,
\r
657 0x16188, 0x16190, 0x1619e, 0x161a0, 0x161bc, 0x161c6, 0x161cc,
\r
658 0x161d8, 0x161f2, 0x161f4, 0x1620e, 0x1621c, 0x16238, 0x16270,
\r
659 0x1627e, 0x162e0, 0x162fc, 0x16304, 0x16308, 0x16310, 0x1631e,
\r
660 0x16320, 0x1633c, 0x16340, 0x16378, 0x16386, 0x1638c, 0x16398,
\r
661 0x163b0, 0x163be, 0x163ce, 0x163dc, 0x163e2, 0x163e4, 0x163e8,
\r
662 0x163f6, 0x1640e, 0x1641c, 0x16438, 0x16470, 0x1647e, 0x164e0,
\r
663 0x164fc, 0x165c0, 0x165f8, 0x16610, 0x1661e, 0x16620, 0x1663c,
\r
664 0x16640, 0x16678, 0x166f0, 0x16718, 0x16730, 0x1673e, 0x16760,
\r
665 0x1677c, 0x1678e, 0x1679c, 0x167b8, 0x167c2, 0x167c4, 0x167c8,
\r
666 0x167d0, 0x167de, 0x167e6, 0x167ec, 0x1681c, 0x16838, 0x16870,
\r
667 0x168e0, 0x168fc, 0x169c0, 0x169f8, 0x16bf0, 0x16c10, 0x16c1e,
\r
668 0x16c20, 0x16c3c, 0x16c40, 0x16c78, 0x16cf0, 0x16de0, 0x16e18,
\r
669 0x16e30, 0x16e3e, 0x16e60, 0x16e7c, 0x16ec0, 0x16ef8, 0x16f1c,
\r
670 0x16f38, 0x16f70, 0x16f7e, 0x16f84, 0x16f88, 0x16f90, 0x16f9e,
\r
671 0x16fa0, 0x16fbc, 0x16fc6, 0x16fcc, 0x16fd8, 0x17026, 0x1702c,
\r
672 0x17046, 0x1704c, 0x17058, 0x1706e, 0x17086, 0x1708c, 0x17098,
\r
673 0x170b0, 0x170be, 0x170ce, 0x170dc, 0x170e8, 0x17106, 0x1710c,
\r
674 0x17118, 0x17130, 0x1713e, 0x17160, 0x1717c, 0x1718e, 0x1719c,
\r
675 0x171b8, 0x171c2, 0x171c4, 0x171c8, 0x171d0, 0x171de, 0x171e6,
\r
676 0x171ec, 0x171fa, 0x17206, 0x1720c, 0x17218, 0x17230, 0x1723e,
\r
677 0x17260, 0x1727c, 0x172c0, 0x172f8, 0x1730e, 0x1731c, 0x17338,
\r
678 0x17370, 0x1737e, 0x17388, 0x17390, 0x1739e, 0x173a0, 0x173bc,
\r
679 0x173cc, 0x173d8, 0x173ee, 0x173f2, 0x173f4, 0x1740c, 0x17418,
\r
680 0x17430, 0x1743e, 0x17460, 0x1747c, 0x174c0, 0x174f8, 0x175f0,
\r
681 0x1760e, 0x1761c, 0x17638, 0x17670, 0x1767e, 0x176e0, 0x176fc,
\r
682 0x17708, 0x17710, 0x1771e, 0x17720, 0x1773c, 0x17740, 0x17778,
\r
683 0x17798, 0x177b0, 0x177be, 0x177dc, 0x177e2, 0x177e4, 0x177e8,
\r
684 0x17822, 0x17824, 0x17828, 0x17836, 0x17842, 0x17844, 0x17848,
\r
685 0x17850, 0x1785e, 0x17866, 0x1786c, 0x17882, 0x17884, 0x17888,
\r
686 0x17890, 0x1789e, 0x178a0, 0x178bc, 0x178c6, 0x178cc, 0x178d8,
\r
687 0x178ee, 0x178f2, 0x178f4, 0x17902, 0x17904, 0x17908, 0x17910,
\r
688 0x1791e, 0x17920, 0x1793c, 0x17940, 0x17978, 0x17986, 0x1798c,
\r
689 0x17998, 0x179b0, 0x179be, 0x179ce, 0x179dc, 0x179e2, 0x179e4,
\r
690 0x179e8, 0x179f6, 0x17a04, 0x17a08, 0x17a10, 0x17a1e, 0x17a20,
\r
691 0x17a3c, 0x17a40, 0x17a78, 0x17af0, 0x17b06, 0x17b0c, 0x17b18,
\r
692 0x17b30, 0x17b3e, 0x17b60, 0x17b7c, 0x17b8e, 0x17b9c, 0x17bb8,
\r
693 0x17bc4, 0x17bc8, 0x17bd0, 0x17bde, 0x17be6, 0x17bec, 0x17c2e,
\r
694 0x17c32, 0x17c34, 0x17c4e, 0x17c5c, 0x17c62, 0x17c64, 0x17c68,
\r
695 0x17c76, 0x17c8e, 0x17c9c, 0x17cb8, 0x17cc2, 0x17cc4, 0x17cc8,
\r
696 0x17cd0, 0x17cde, 0x17ce6, 0x17cec, 0x17d0e, 0x17d1c, 0x17d38,
\r
697 0x17d70, 0x17d82, 0x17d84, 0x17d88, 0x17d90, 0x17d9e, 0x17da0,
\r
698 0x17dbc, 0x17dc6, 0x17dcc, 0x17dd8, 0x17dee, 0x17e26, 0x17e2c,
\r
699 0x17e3a, 0x17e46, 0x17e4c, 0x17e58, 0x17e6e, 0x17e72, 0x17e74,
\r
700 0x17e86, 0x17e8c, 0x17e98, 0x17eb0, 0x17ece, 0x17edc, 0x17ee2,
\r
701 0x17ee4, 0x17ee8, 0x17ef6, 0x1813a, 0x18172, 0x18174, 0x18216,
\r
702 0x18226, 0x1823a, 0x1824c, 0x18258, 0x1826e, 0x18272, 0x18274,
\r
703 0x18298, 0x182be, 0x182e2, 0x182e4, 0x182e8, 0x182f6, 0x1835e,
\r
704 0x1837a, 0x183ae, 0x183d6, 0x18416, 0x18426, 0x1842c, 0x1843a,
\r
705 0x18446, 0x18458, 0x1846e, 0x18472, 0x18474, 0x18486, 0x184b0,
\r
706 0x184be, 0x184ce, 0x184dc, 0x184e2, 0x184e4, 0x184e8, 0x184f6,
\r
707 0x18506, 0x1850c, 0x18518, 0x18530, 0x1853e, 0x18560, 0x1857c,
\r
708 0x1858e, 0x1859c, 0x185b8, 0x185c2, 0x185c4, 0x185c8, 0x185d0,
\r
709 0x185de, 0x185e6, 0x185ec, 0x185fa, 0x18612, 0x18614, 0x18622,
\r
710 0x18628, 0x18636, 0x18642, 0x18650, 0x1865e, 0x1867a, 0x18682,
\r
711 0x18684, 0x18688, 0x18690, 0x1869e, 0x186a0, 0x186bc, 0x186c6,
\r
712 0x186cc, 0x186d8, 0x186ee, 0x186f2, 0x186f4, 0x1872e, 0x1874e,
\r
713 0x1875c, 0x18796, 0x187a6, 0x187ac, 0x187d2, 0x187d4, 0x18826,
\r
714 0x1882c, 0x1883a, 0x18846, 0x1884c, 0x18858, 0x1886e, 0x18872,
\r
715 0x18874, 0x18886, 0x18898, 0x188b0, 0x188be, 0x188ce, 0x188dc,
\r
716 0x188e2, 0x188e4, 0x188e8, 0x188f6, 0x1890c, 0x18930, 0x1893e,
\r
717 0x18960, 0x1897c, 0x1898e, 0x189b8, 0x189c2, 0x189c8, 0x189d0,
\r
718 0x189de, 0x189e6, 0x189ec, 0x189fa, 0x18a18, 0x18a30, 0x18a3e,
\r
719 0x18a60, 0x18a7c, 0x18ac0, 0x18af8, 0x18b1c, 0x18b38, 0x18b70,
\r
720 0x18b7e, 0x18b82, 0x18b84, 0x18b88, 0x18b90, 0x18b9e, 0x18ba0,
\r
721 0x18bbc, 0x18bc6, 0x18bcc, 0x18bd8, 0x18bee, 0x18bf2, 0x18bf4,
\r
722 0x18c22, 0x18c24, 0x18c28, 0x18c36, 0x18c42, 0x18c48, 0x18c50,
\r
723 0x18c5e, 0x18c66, 0x18c7a, 0x18c82, 0x18c84, 0x18c90, 0x18c9e,
\r
724 0x18ca0, 0x18cbc, 0x18ccc, 0x18cf2, 0x18cf4, 0x18d04, 0x18d08,
\r
725 0x18d10, 0x18d1e, 0x18d20, 0x18d3c, 0x18d40, 0x18d78, 0x18d86,
\r
726 0x18d98, 0x18dce, 0x18de2, 0x18de4, 0x18de8, 0x18e2e, 0x18e32,
\r
727 0x18e34, 0x18e4e, 0x18e5c, 0x18e62, 0x18e64, 0x18e68, 0x18e8e,
\r
728 0x18e9c, 0x18eb8, 0x18ec2, 0x18ec4, 0x18ec8, 0x18ed0, 0x18efa,
\r
729 0x18f16, 0x18f26, 0x18f2c, 0x18f46, 0x18f4c, 0x18f58, 0x18f6e,
\r
730 0x18f8a, 0x18f92, 0x18f94, 0x18fa2, 0x18fa4, 0x18fa8, 0x18fb6,
\r
731 0x1902c, 0x1903a, 0x19046, 0x1904c, 0x19058, 0x19072, 0x19074,
\r
732 0x19086, 0x19098, 0x190b0, 0x190be, 0x190ce, 0x190dc, 0x190e2,
\r
733 0x190e8, 0x190f6, 0x19106, 0x1910c, 0x19130, 0x1913e, 0x19160,
\r
734 0x1917c, 0x1918e, 0x1919c, 0x191b8, 0x191c2, 0x191c8, 0x191d0,
\r
735 0x191de, 0x191e6, 0x191ec, 0x191fa, 0x19218, 0x1923e, 0x19260,
\r
736 0x1927c, 0x192c0, 0x192f8, 0x19338, 0x19370, 0x1937e, 0x19382,
\r
737 0x19384, 0x19390, 0x1939e, 0x193a0, 0x193bc, 0x193c6, 0x193cc,
\r
738 0x193d8, 0x193ee, 0x193f2, 0x193f4, 0x19430, 0x1943e, 0x19460,
\r
739 0x1947c, 0x194c0, 0x194f8, 0x195f0, 0x19638, 0x19670, 0x1967e,
\r
740 0x196e0, 0x196fc, 0x19702, 0x19704, 0x19708, 0x19710, 0x19720,
\r
741 0x1973c, 0x19740, 0x19778, 0x19786, 0x1978c, 0x19798, 0x197b0,
\r
742 0x197be, 0x197ce, 0x197dc, 0x197e2, 0x197e4, 0x197e8, 0x19822,
\r
743 0x19824, 0x19842, 0x19848, 0x19850, 0x1985e, 0x19866, 0x1987a,
\r
744 0x19882, 0x19884, 0x19890, 0x1989e, 0x198a0, 0x198bc, 0x198cc,
\r
745 0x198f2, 0x198f4, 0x19902, 0x19908, 0x1991e, 0x19920, 0x1993c,
\r
746 0x19940, 0x19978, 0x19986, 0x19998, 0x199ce, 0x199e2, 0x199e4,
\r
747 0x199e8, 0x19a08, 0x19a10, 0x19a1e, 0x19a20, 0x19a3c, 0x19a40,
\r
748 0x19a78, 0x19af0, 0x19b18, 0x19b3e, 0x19b60, 0x19b9c, 0x19bc2,
\r
749 0x19bc4, 0x19bc8, 0x19bd0, 0x19be6, 0x19c2e, 0x19c34, 0x19c4e,
\r
750 0x19c5c, 0x19c62, 0x19c64, 0x19c68, 0x19c8e, 0x19c9c, 0x19cb8,
\r
751 0x19cc2, 0x19cc8, 0x19cd0, 0x19ce6, 0x19cfa, 0x19d0e, 0x19d1c,
\r
752 0x19d38, 0x19d70, 0x19d7e, 0x19d82, 0x19d84, 0x19d88, 0x19d90,
\r
753 0x19da0, 0x19dcc, 0x19df2, 0x19df4, 0x19e16, 0x19e26, 0x19e2c,
\r
754 0x19e46, 0x19e4c, 0x19e58, 0x19e74, 0x19e86, 0x19e8c, 0x19e98,
\r
755 0x19eb0, 0x19ebe, 0x19ece, 0x19ee2, 0x19ee4, 0x19ee8, 0x19f0a,
\r
756 0x19f12, 0x19f14, 0x19f22, 0x19f24, 0x19f28, 0x19f42, 0x19f44,
\r
757 0x19f48, 0x19f50, 0x19f5e, 0x19f6c, 0x19f9a, 0x19fae, 0x19fb2,
\r
758 0x19fb4, 0x1a046, 0x1a04c, 0x1a072, 0x1a074, 0x1a086, 0x1a08c,
\r
759 0x1a098, 0x1a0b0, 0x1a0be, 0x1a0e2, 0x1a0e4, 0x1a0e8, 0x1a0f6,
\r
760 0x1a106, 0x1a10c, 0x1a118, 0x1a130, 0x1a13e, 0x1a160, 0x1a17c,
\r
761 0x1a18e, 0x1a19c, 0x1a1b8, 0x1a1c2, 0x1a1c4, 0x1a1c8, 0x1a1d0,
\r
762 0x1a1de, 0x1a1e6, 0x1a1ec, 0x1a218, 0x1a230, 0x1a23e, 0x1a260,
\r
763 0x1a27c, 0x1a2c0, 0x1a2f8, 0x1a31c, 0x1a338, 0x1a370, 0x1a37e,
\r
764 0x1a382, 0x1a384, 0x1a388, 0x1a390, 0x1a39e, 0x1a3a0, 0x1a3bc,
\r
765 0x1a3c6, 0x1a3cc, 0x1a3d8, 0x1a3ee, 0x1a3f2, 0x1a3f4, 0x1a418,
\r
766 0x1a430, 0x1a43e, 0x1a460, 0x1a47c, 0x1a4c0, 0x1a4f8, 0x1a5f0,
\r
767 0x1a61c, 0x1a638, 0x1a670, 0x1a67e, 0x1a6e0, 0x1a6fc, 0x1a702,
\r
768 0x1a704, 0x1a708, 0x1a710, 0x1a71e, 0x1a720, 0x1a73c, 0x1a740,
\r
769 0x1a778, 0x1a786, 0x1a78c, 0x1a798, 0x1a7b0, 0x1a7be, 0x1a7ce,
\r
770 0x1a7dc, 0x1a7e2, 0x1a7e4, 0x1a7e8, 0x1a830, 0x1a860, 0x1a87c,
\r
771 0x1a8c0, 0x1a8f8, 0x1a9f0, 0x1abe0, 0x1ac70, 0x1ac7e, 0x1ace0,
\r
772 0x1acfc, 0x1adc0, 0x1adf8, 0x1ae04, 0x1ae08, 0x1ae10, 0x1ae20,
\r
773 0x1ae3c, 0x1ae40, 0x1ae78, 0x1aef0, 0x1af06, 0x1af0c, 0x1af18,
\r
774 0x1af30, 0x1af3e, 0x1af60, 0x1af7c, 0x1af8e, 0x1af9c, 0x1afb8,
\r
775 0x1afc4, 0x1afc8, 0x1afd0, 0x1afde, 0x1b042, 0x1b05e, 0x1b07a,
\r
776 0x1b082, 0x1b084, 0x1b088, 0x1b090, 0x1b09e, 0x1b0a0, 0x1b0bc,
\r
777 0x1b0cc, 0x1b0f2, 0x1b0f4, 0x1b102, 0x1b104, 0x1b108, 0x1b110,
\r
778 0x1b11e, 0x1b120, 0x1b13c, 0x1b140, 0x1b178, 0x1b186, 0x1b198,
\r
779 0x1b1ce, 0x1b1e2, 0x1b1e4, 0x1b1e8, 0x1b204, 0x1b208, 0x1b210,
\r
780 0x1b21e, 0x1b220, 0x1b23c, 0x1b240, 0x1b278, 0x1b2f0, 0x1b30c,
\r
781 0x1b33e, 0x1b360, 0x1b39c, 0x1b3c2, 0x1b3c4, 0x1b3c8, 0x1b3d0,
\r
782 0x1b3e6, 0x1b410, 0x1b41e, 0x1b420, 0x1b43c, 0x1b440, 0x1b478,
\r
783 0x1b4f0, 0x1b5e0, 0x1b618, 0x1b660, 0x1b67c, 0x1b6c0, 0x1b738,
\r
784 0x1b782, 0x1b784, 0x1b788, 0x1b790, 0x1b79e, 0x1b7a0, 0x1b7cc,
\r
785 0x1b82e, 0x1b84e, 0x1b85c, 0x1b88e, 0x1b89c, 0x1b8b8, 0x1b8c2,
\r
786 0x1b8c4, 0x1b8c8, 0x1b8d0, 0x1b8e6, 0x1b8fa, 0x1b90e, 0x1b91c,
\r
787 0x1b938, 0x1b970, 0x1b97e, 0x1b982, 0x1b984, 0x1b988, 0x1b990,
\r
788 0x1b99e, 0x1b9a0, 0x1b9cc, 0x1b9f2, 0x1b9f4, 0x1ba0e, 0x1ba1c,
\r
789 0x1ba38, 0x1ba70, 0x1ba7e, 0x1bae0, 0x1bafc, 0x1bb08, 0x1bb10,
\r
790 0x1bb20, 0x1bb3c, 0x1bb40, 0x1bb98, 0x1bbce, 0x1bbe2, 0x1bbe4,
\r
791 0x1bbe8, 0x1bc16, 0x1bc26, 0x1bc2c, 0x1bc46, 0x1bc4c, 0x1bc58,
\r
792 0x1bc72, 0x1bc74, 0x1bc86, 0x1bc8c, 0x1bc98, 0x1bcb0, 0x1bcbe,
\r
793 0x1bcce, 0x1bce2, 0x1bce4, 0x1bce8, 0x1bd06, 0x1bd0c, 0x1bd18,
\r
794 0x1bd30, 0x1bd3e, 0x1bd60, 0x1bd7c, 0x1bd9c, 0x1bdc2, 0x1bdc4,
\r
795 0x1bdc8, 0x1bdd0, 0x1bde6, 0x1bdfa, 0x1be12, 0x1be14, 0x1be22,
\r
796 0x1be24, 0x1be28, 0x1be42, 0x1be44, 0x1be48, 0x1be50, 0x1be5e,
\r
797 0x1be66, 0x1be82, 0x1be84, 0x1be88, 0x1be90, 0x1be9e, 0x1bea0,
\r
798 0x1bebc, 0x1becc, 0x1bef4, 0x1bf1a, 0x1bf2e, 0x1bf32, 0x1bf34,
\r
799 0x1bf4e, 0x1bf5c, 0x1bf62, 0x1bf64, 0x1bf68, 0x1c09a, 0x1c0b2,
\r
800 0x1c0b4, 0x1c11a, 0x1c132, 0x1c134, 0x1c162, 0x1c164, 0x1c168,
\r
801 0x1c176, 0x1c1ba, 0x1c21a, 0x1c232, 0x1c234, 0x1c24e, 0x1c25c,
\r
802 0x1c262, 0x1c264, 0x1c268, 0x1c276, 0x1c28e, 0x1c2c2, 0x1c2c4,
\r
803 0x1c2c8, 0x1c2d0, 0x1c2de, 0x1c2e6, 0x1c2ec, 0x1c2fa, 0x1c316,
\r
804 0x1c326, 0x1c33a, 0x1c346, 0x1c34c, 0x1c372, 0x1c374, 0x1c41a,
\r
805 0x1c42e, 0x1c432, 0x1c434, 0x1c44e, 0x1c45c, 0x1c462, 0x1c464,
\r
806 0x1c468, 0x1c476, 0x1c48e, 0x1c49c, 0x1c4b8, 0x1c4c2, 0x1c4c8,
\r
807 0x1c4d0, 0x1c4de, 0x1c4e6, 0x1c4ec, 0x1c4fa, 0x1c51c, 0x1c538,
\r
808 0x1c570, 0x1c57e, 0x1c582, 0x1c584, 0x1c588, 0x1c590, 0x1c59e,
\r
809 0x1c5a0, 0x1c5bc, 0x1c5c6, 0x1c5cc, 0x1c5d8, 0x1c5ee, 0x1c5f2,
\r
810 0x1c5f4, 0x1c616, 0x1c626, 0x1c62c, 0x1c63a, 0x1c646, 0x1c64c,
\r
811 0x1c658, 0x1c66e, 0x1c672, 0x1c674, 0x1c686, 0x1c68c, 0x1c698,
\r
812 0x1c6b0, 0x1c6be, 0x1c6ce, 0x1c6dc, 0x1c6e2, 0x1c6e4, 0x1c6e8,
\r
813 0x1c712, 0x1c714, 0x1c722, 0x1c728, 0x1c736, 0x1c742, 0x1c744,
\r
814 0x1c748, 0x1c750, 0x1c75e, 0x1c766, 0x1c76c, 0x1c77a, 0x1c7ae,
\r
815 0x1c7d6, 0x1c7ea, 0x1c81a, 0x1c82e, 0x1c832, 0x1c834, 0x1c84e,
\r
816 0x1c85c, 0x1c862, 0x1c864, 0x1c868, 0x1c876, 0x1c88e, 0x1c89c,
\r
817 0x1c8b8, 0x1c8c2, 0x1c8c8, 0x1c8d0, 0x1c8de, 0x1c8e6, 0x1c8ec,
\r
818 0x1c8fa, 0x1c90e, 0x1c938, 0x1c970, 0x1c97e, 0x1c982, 0x1c984,
\r
819 0x1c990, 0x1c99e, 0x1c9a0, 0x1c9bc, 0x1c9c6, 0x1c9cc, 0x1c9d8,
\r
820 0x1c9ee, 0x1c9f2, 0x1c9f4, 0x1ca38, 0x1ca70, 0x1ca7e, 0x1cae0,
\r
821 0x1cafc, 0x1cb02, 0x1cb04, 0x1cb08, 0x1cb10, 0x1cb20, 0x1cb3c,
\r
822 0x1cb40, 0x1cb78, 0x1cb86, 0x1cb8c, 0x1cb98, 0x1cbb0, 0x1cbbe,
\r
823 0x1cbce, 0x1cbdc, 0x1cbe2, 0x1cbe4, 0x1cbe8, 0x1cbf6, 0x1cc16,
\r
824 0x1cc26, 0x1cc2c, 0x1cc3a, 0x1cc46, 0x1cc58, 0x1cc72, 0x1cc74,
\r
825 0x1cc86, 0x1ccb0, 0x1ccbe, 0x1ccce, 0x1cce2, 0x1cce4, 0x1cce8,
\r
826 0x1cd06, 0x1cd0c, 0x1cd18, 0x1cd30, 0x1cd3e, 0x1cd60, 0x1cd7c,
\r
827 0x1cd9c, 0x1cdc2, 0x1cdc4, 0x1cdc8, 0x1cdd0, 0x1cdde, 0x1cde6,
\r
828 0x1cdfa, 0x1ce22, 0x1ce28, 0x1ce42, 0x1ce50, 0x1ce5e, 0x1ce66,
\r
829 0x1ce7a, 0x1ce82, 0x1ce84, 0x1ce88, 0x1ce90, 0x1ce9e, 0x1cea0,
\r
830 0x1cebc, 0x1cecc, 0x1cef2, 0x1cef4, 0x1cf2e, 0x1cf32, 0x1cf34,
\r
831 0x1cf4e, 0x1cf5c, 0x1cf62, 0x1cf64, 0x1cf68, 0x1cf96, 0x1cfa6,
\r
832 0x1cfac, 0x1cfca, 0x1cfd2, 0x1cfd4, 0x1d02e, 0x1d032, 0x1d034,
\r
833 0x1d04e, 0x1d05c, 0x1d062, 0x1d064, 0x1d068, 0x1d076, 0x1d08e,
\r
834 0x1d09c, 0x1d0b8, 0x1d0c2, 0x1d0c4, 0x1d0c8, 0x1d0d0, 0x1d0de,
\r
835 0x1d0e6, 0x1d0ec, 0x1d0fa, 0x1d11c, 0x1d138, 0x1d170, 0x1d17e,
\r
836 0x1d182, 0x1d184, 0x1d188, 0x1d190, 0x1d19e, 0x1d1a0, 0x1d1bc,
\r
837 0x1d1c6, 0x1d1cc, 0x1d1d8, 0x1d1ee, 0x1d1f2, 0x1d1f4, 0x1d21c,
\r
838 0x1d238, 0x1d270, 0x1d27e, 0x1d2e0, 0x1d2fc, 0x1d302, 0x1d304,
\r
839 0x1d308, 0x1d310, 0x1d31e, 0x1d320, 0x1d33c, 0x1d340, 0x1d378,
\r
840 0x1d386, 0x1d38c, 0x1d398, 0x1d3b0, 0x1d3be, 0x1d3ce, 0x1d3dc,
\r
841 0x1d3e2, 0x1d3e4, 0x1d3e8, 0x1d3f6, 0x1d470, 0x1d47e, 0x1d4e0,
\r
842 0x1d4fc, 0x1d5c0, 0x1d5f8, 0x1d604, 0x1d608, 0x1d610, 0x1d620,
\r
843 0x1d640, 0x1d678, 0x1d6f0, 0x1d706, 0x1d70c, 0x1d718, 0x1d730,
\r
844 0x1d73e, 0x1d760, 0x1d77c, 0x1d78e, 0x1d79c, 0x1d7b8, 0x1d7c2,
\r
845 0x1d7c4, 0x1d7c8, 0x1d7d0, 0x1d7de, 0x1d7e6, 0x1d7ec, 0x1d826,
\r
846 0x1d82c, 0x1d83a, 0x1d846, 0x1d84c, 0x1d858, 0x1d872, 0x1d874,
\r
847 0x1d886, 0x1d88c, 0x1d898, 0x1d8b0, 0x1d8be, 0x1d8ce, 0x1d8e2,
\r
848 0x1d8e4, 0x1d8e8, 0x1d8f6, 0x1d90c, 0x1d918, 0x1d930, 0x1d93e,
\r
849 0x1d960, 0x1d97c, 0x1d99c, 0x1d9c2, 0x1d9c4, 0x1d9c8, 0x1d9d0,
\r
850 0x1d9e6, 0x1d9fa, 0x1da0c, 0x1da18, 0x1da30, 0x1da3e, 0x1da60,
\r
851 0x1da7c, 0x1dac0, 0x1daf8, 0x1db38, 0x1db82, 0x1db84, 0x1db88,
\r
852 0x1db90, 0x1db9e, 0x1dba0, 0x1dbcc, 0x1dbf2, 0x1dbf4, 0x1dc22,
\r
853 0x1dc42, 0x1dc44, 0x1dc48, 0x1dc50, 0x1dc5e, 0x1dc66, 0x1dc7a,
\r
854 0x1dc82, 0x1dc84, 0x1dc88, 0x1dc90, 0x1dc9e, 0x1dca0, 0x1dcbc,
\r
855 0x1dccc, 0x1dcf2, 0x1dcf4, 0x1dd04, 0x1dd08, 0x1dd10, 0x1dd1e,
\r
856 0x1dd20, 0x1dd3c, 0x1dd40, 0x1dd78, 0x1dd86, 0x1dd98, 0x1ddce,
\r
857 0x1dde2, 0x1dde4, 0x1dde8, 0x1de2e, 0x1de32, 0x1de34, 0x1de4e,
\r
858 0x1de5c, 0x1de62, 0x1de64, 0x1de68, 0x1de8e, 0x1de9c, 0x1deb8,
\r
859 0x1dec2, 0x1dec4, 0x1dec8, 0x1ded0, 0x1dee6, 0x1defa, 0x1df16,
\r
860 0x1df26, 0x1df2c, 0x1df46, 0x1df4c, 0x1df58, 0x1df72, 0x1df74,
\r
861 0x1df8a, 0x1df92, 0x1df94, 0x1dfa2, 0x1dfa4, 0x1dfa8, 0x1e08a,
\r
862 0x1e092, 0x1e094, 0x1e0a2, 0x1e0a4, 0x1e0a8, 0x1e0b6, 0x1e0da,
\r
863 0x1e10a, 0x1e112, 0x1e114, 0x1e122, 0x1e124, 0x1e128, 0x1e136,
\r
864 0x1e142, 0x1e144, 0x1e148, 0x1e150, 0x1e166, 0x1e16c, 0x1e17a,
\r
865 0x1e19a, 0x1e1b2, 0x1e1b4, 0x1e20a, 0x1e212, 0x1e214, 0x1e222,
\r
866 0x1e224, 0x1e228, 0x1e236, 0x1e242, 0x1e248, 0x1e250, 0x1e25e,
\r
867 0x1e266, 0x1e26c, 0x1e27a, 0x1e282, 0x1e284, 0x1e288, 0x1e290,
\r
868 0x1e2a0, 0x1e2bc, 0x1e2c6, 0x1e2cc, 0x1e2d8, 0x1e2ee, 0x1e2f2,
\r
869 0x1e2f4, 0x1e31a, 0x1e332, 0x1e334, 0x1e35c, 0x1e362, 0x1e364,
\r
870 0x1e368, 0x1e3ba, 0x1e40a, 0x1e412, 0x1e414, 0x1e422, 0x1e428,
\r
871 0x1e436, 0x1e442, 0x1e448, 0x1e450, 0x1e45e, 0x1e466, 0x1e46c,
\r
872 0x1e47a, 0x1e482, 0x1e484, 0x1e490, 0x1e49e, 0x1e4a0, 0x1e4bc,
\r
873 0x1e4c6, 0x1e4cc, 0x1e4d8, 0x1e4ee, 0x1e4f2, 0x1e4f4, 0x1e502,
\r
874 0x1e504, 0x1e508, 0x1e510, 0x1e51e, 0x1e520, 0x1e53c, 0x1e540,
\r
875 0x1e578, 0x1e586, 0x1e58c, 0x1e598, 0x1e5b0, 0x1e5be, 0x1e5ce,
\r
876 0x1e5dc, 0x1e5e2, 0x1e5e4, 0x1e5e8, 0x1e5f6, 0x1e61a, 0x1e62e,
\r
877 0x1e632, 0x1e634, 0x1e64e, 0x1e65c, 0x1e662, 0x1e668, 0x1e68e,
\r
878 0x1e69c, 0x1e6b8, 0x1e6c2, 0x1e6c4, 0x1e6c8, 0x1e6d0, 0x1e6e6,
\r
879 0x1e6fa, 0x1e716, 0x1e726, 0x1e72c, 0x1e73a, 0x1e746, 0x1e74c,
\r
880 0x1e758, 0x1e772, 0x1e774, 0x1e792, 0x1e794, 0x1e7a2, 0x1e7a4,
\r
881 0x1e7a8, 0x1e7b6, 0x1e812, 0x1e814, 0x1e822, 0x1e824, 0x1e828,
\r
882 0x1e836, 0x1e842, 0x1e844, 0x1e848, 0x1e850, 0x1e85e, 0x1e866,
\r
883 0x1e86c, 0x1e87a, 0x1e882, 0x1e884, 0x1e888, 0x1e890, 0x1e89e,
\r
884 0x1e8a0, 0x1e8bc, 0x1e8c6, 0x1e8cc, 0x1e8d8, 0x1e8ee, 0x1e8f2,
\r
885 0x1e8f4, 0x1e902, 0x1e904, 0x1e908, 0x1e910, 0x1e920, 0x1e93c,
\r
886 0x1e940, 0x1e978, 0x1e986, 0x1e98c, 0x1e998, 0x1e9b0, 0x1e9be,
\r
887 0x1e9ce, 0x1e9dc, 0x1e9e2, 0x1e9e4, 0x1e9e8, 0x1e9f6, 0x1ea04,
\r
888 0x1ea08, 0x1ea10, 0x1ea20, 0x1ea40, 0x1ea78, 0x1eaf0, 0x1eb06,
\r
889 0x1eb0c, 0x1eb18, 0x1eb30, 0x1eb3e, 0x1eb60, 0x1eb7c, 0x1eb8e,
\r
890 0x1eb9c, 0x1ebb8, 0x1ebc2, 0x1ebc4, 0x1ebc8, 0x1ebd0, 0x1ebde,
\r
891 0x1ebe6, 0x1ebec, 0x1ec1a, 0x1ec2e, 0x1ec32, 0x1ec34, 0x1ec4e,
\r
892 0x1ec5c, 0x1ec62, 0x1ec64, 0x1ec68, 0x1ec8e, 0x1ec9c, 0x1ecb8,
\r
893 0x1ecc2, 0x1ecc4, 0x1ecc8, 0x1ecd0, 0x1ece6, 0x1ecfa, 0x1ed0e,
\r
894 0x1ed1c, 0x1ed38, 0x1ed70, 0x1ed7e, 0x1ed82, 0x1ed84, 0x1ed88,
\r
895 0x1ed90, 0x1ed9e, 0x1eda0, 0x1edcc, 0x1edf2, 0x1edf4, 0x1ee16,
\r
896 0x1ee26, 0x1ee2c, 0x1ee3a, 0x1ee46, 0x1ee4c, 0x1ee58, 0x1ee6e,
\r
897 0x1ee72, 0x1ee74, 0x1ee86, 0x1ee8c, 0x1ee98, 0x1eeb0, 0x1eebe,
\r
898 0x1eece, 0x1eedc, 0x1eee2, 0x1eee4, 0x1eee8, 0x1ef12, 0x1ef22,
\r
899 0x1ef24, 0x1ef28, 0x1ef36, 0x1ef42, 0x1ef44, 0x1ef48, 0x1ef50,
\r
900 0x1ef5e, 0x1ef66, 0x1ef6c, 0x1ef7a, 0x1efae, 0x1efb2, 0x1efb4,
\r
901 0x1efd6, 0x1f096, 0x1f0a6, 0x1f0ac, 0x1f0ba, 0x1f0ca, 0x1f0d2,
\r
902 0x1f0d4, 0x1f116, 0x1f126, 0x1f12c, 0x1f13a, 0x1f146, 0x1f14c,
\r
903 0x1f158, 0x1f16e, 0x1f172, 0x1f174, 0x1f18a, 0x1f192, 0x1f194,
\r
904 0x1f1a2, 0x1f1a4, 0x1f1a8, 0x1f1da, 0x1f216, 0x1f226, 0x1f22c,
\r
905 0x1f23a, 0x1f246, 0x1f258, 0x1f26e, 0x1f272, 0x1f274, 0x1f286,
\r
906 0x1f28c, 0x1f298, 0x1f2b0, 0x1f2be, 0x1f2ce, 0x1f2dc, 0x1f2e2,
\r
907 0x1f2e4, 0x1f2e8, 0x1f2f6, 0x1f30a, 0x1f312, 0x1f314, 0x1f322,
\r
908 0x1f328, 0x1f342, 0x1f344, 0x1f348, 0x1f350, 0x1f35e, 0x1f366,
\r
909 0x1f37a, 0x1f39a, 0x1f3ae, 0x1f3b2, 0x1f3b4, 0x1f416, 0x1f426,
\r
910 0x1f42c, 0x1f43a, 0x1f446, 0x1f44c, 0x1f458, 0x1f46e, 0x1f472,
\r
911 0x1f474, 0x1f486, 0x1f48c, 0x1f498, 0x1f4b0, 0x1f4be, 0x1f4ce,
\r
912 0x1f4dc, 0x1f4e2, 0x1f4e4, 0x1f4e8, 0x1f4f6, 0x1f506, 0x1f50c,
\r
913 0x1f518, 0x1f530, 0x1f53e, 0x1f560, 0x1f57c, 0x1f58e, 0x1f59c,
\r
914 0x1f5b8, 0x1f5c2, 0x1f5c4, 0x1f5c8, 0x1f5d0, 0x1f5de, 0x1f5e6,
\r
915 0x1f5ec, 0x1f5fa, 0x1f60a, 0x1f612, 0x1f614, 0x1f622, 0x1f624,
\r
916 0x1f628, 0x1f636, 0x1f642, 0x1f644, 0x1f648, 0x1f650, 0x1f65e,
\r
917 0x1f666, 0x1f67a, 0x1f682, 0x1f684, 0x1f688, 0x1f690, 0x1f69e,
\r
918 0x1f6a0, 0x1f6bc, 0x1f6cc, 0x1f6f2, 0x1f6f4, 0x1f71a, 0x1f72e,
\r
919 0x1f732, 0x1f734, 0x1f74e, 0x1f75c, 0x1f762, 0x1f764, 0x1f768,
\r
920 0x1f776, 0x1f796, 0x1f7a6, 0x1f7ac, 0x1f7ba, 0x1f7d2, 0x1f7d4,
\r
921 0x1f89a, 0x1f8ae, 0x1f8b2, 0x1f8b4, 0x1f8d6, 0x1f8ea, 0x1f91a,
\r
922 0x1f92e, 0x1f932, 0x1f934, 0x1f94e, 0x1f95c, 0x1f962, 0x1f964,
\r
923 0x1f968, 0x1f976, 0x1f996, 0x1f9a6, 0x1f9ac, 0x1f9ba, 0x1f9ca,
\r
924 0x1f9d2, 0x1f9d4, 0x1fa1a, 0x1fa2e, 0x1fa32, 0x1fa34, 0x1fa4e,
\r
925 0x1fa5c, 0x1fa62, 0x1fa64, 0x1fa68, 0x1fa76, 0x1fa8e, 0x1fa9c,
\r
926 0x1fab8, 0x1fac2, 0x1fac4, 0x1fac8, 0x1fad0, 0x1fade, 0x1fae6,
\r
927 0x1faec, 0x1fb16, 0x1fb26, 0x1fb2c, 0x1fb3a, 0x1fb46, 0x1fb4c,
\r
928 0x1fb58, 0x1fb6e, 0x1fb72, 0x1fb74, 0x1fb8a, 0x1fb92, 0x1fb94,
\r
929 0x1fba2, 0x1fba4, 0x1fba8, 0x1fbb6, 0x1fbda};
\r
932 * This table contains to codewords for all symbols.
\r
934 private static final int[] CODEWORD_TABLE = {2627, 1819, 2622, 2621, 1813,
\r
935 1812, 2729, 2724, 2723, 2779, 2774, 2773, 902, 896, 908, 868, 865,
\r
936 861, 859, 2511, 873, 871, 1780, 835, 2493, 825, 2491, 842, 837, 844,
\r
937 1764, 1762, 811, 810, 809, 2483, 807, 2482, 806, 2480, 815, 814, 813,
\r
938 812, 2484, 817, 816, 1745, 1744, 1742, 1746, 2655, 2637, 2635, 2626,
\r
939 2625, 2623, 2628, 1820, 2752, 2739, 2737, 2728, 2727, 2725, 2730,
\r
940 2785, 2783, 2778, 2777, 2775, 2780, 787, 781, 747, 739, 736, 2413,
\r
941 754, 752, 1719, 692, 689, 681, 2371, 678, 2369, 700, 697, 694, 703,
\r
942 1688, 1686, 642, 638, 2343, 631, 2341, 627, 2338, 651, 646, 643, 2345,
\r
943 654, 652, 1652, 1650, 1647, 1654, 601, 599, 2322, 596, 2321, 594,
\r
944 2319, 2317, 611, 610, 608, 606, 2324, 603, 2323, 615, 614, 612, 1617,
\r
945 1616, 1614, 1612, 616, 1619, 1618, 2575, 2538, 2536, 905, 901, 898,
\r
946 909, 2509, 2507, 2504, 870, 867, 864, 860, 2512, 875, 872, 1781, 2490,
\r
947 2489, 2487, 2485, 1748, 836, 834, 832, 830, 2494, 827, 2492, 843, 841,
\r
948 839, 845, 1765, 1763, 2701, 2676, 2674, 2653, 2648, 2656, 2634, 2633,
\r
949 2631, 2629, 1821, 2638, 2636, 2770, 2763, 2761, 2750, 2745, 2753,
\r
950 2736, 2735, 2733, 2731, 1848, 2740, 2738, 2786, 2784, 591, 588, 576,
\r
951 569, 566, 2296, 1590, 537, 534, 526, 2276, 522, 2274, 545, 542, 539,
\r
952 548, 1572, 1570, 481, 2245, 466, 2242, 462, 2239, 492, 485, 482, 2249,
\r
953 496, 494, 1534, 1531, 1528, 1538, 413, 2196, 406, 2191, 2188, 425,
\r
954 419, 2202, 415, 2199, 432, 430, 427, 1472, 1467, 1464, 433, 1476,
\r
955 1474, 368, 367, 2160, 365, 2159, 362, 2157, 2155, 2152, 378, 377, 375,
\r
956 2166, 372, 2165, 369, 2162, 383, 381, 379, 2168, 1419, 1418, 1416,
\r
957 1414, 385, 1411, 384, 1423, 1422, 1420, 1424, 2461, 802, 2441, 2439,
\r
958 790, 786, 783, 794, 2409, 2406, 2403, 750, 742, 738, 2414, 756, 753,
\r
959 1720, 2367, 2365, 2362, 2359, 1663, 693, 691, 684, 2373, 680, 2370,
\r
960 702, 699, 696, 704, 1690, 1687, 2337, 2336, 2334, 2332, 1624, 2329,
\r
961 1622, 640, 637, 2344, 634, 2342, 630, 2340, 650, 648, 645, 2346, 655,
\r
962 653, 1653, 1651, 1649, 1655, 2612, 2597, 2595, 2571, 2568, 2565, 2576,
\r
963 2534, 2529, 2526, 1787, 2540, 2537, 907, 904, 900, 910, 2503, 2502,
\r
964 2500, 2498, 1768, 2495, 1767, 2510, 2508, 2506, 869, 866, 863, 2513,
\r
965 876, 874, 1782, 2720, 2713, 2711, 2697, 2694, 2691, 2702, 2672, 2670,
\r
966 2664, 1828, 2678, 2675, 2647, 2646, 2644, 2642, 1823, 2639, 1822,
\r
967 2654, 2652, 2650, 2657, 2771, 1855, 2765, 2762, 1850, 1849, 2751,
\r
968 2749, 2747, 2754, 353, 2148, 344, 342, 336, 2142, 332, 2140, 345,
\r
969 1375, 1373, 306, 2130, 299, 2128, 295, 2125, 319, 314, 311, 2132,
\r
970 1354, 1352, 1349, 1356, 262, 257, 2101, 253, 2096, 2093, 274, 273,
\r
971 267, 2107, 263, 2104, 280, 278, 275, 1316, 1311, 1308, 1320, 1318,
\r
972 2052, 202, 2050, 2044, 2040, 219, 2063, 212, 2060, 208, 2055, 224,
\r
973 221, 2066, 1260, 1258, 1252, 231, 1248, 229, 1266, 1264, 1261, 1268,
\r
974 155, 1998, 153, 1996, 1994, 1991, 1988, 165, 164, 2007, 162, 2006,
\r
975 159, 2003, 2000, 172, 171, 169, 2012, 166, 2010, 1186, 1184, 1182,
\r
976 1179, 175, 1176, 173, 1192, 1191, 1189, 1187, 176, 1194, 1193, 2313,
\r
977 2307, 2305, 592, 589, 2294, 2292, 2289, 578, 572, 568, 2297, 580,
\r
978 1591, 2272, 2267, 2264, 1547, 538, 536, 529, 2278, 525, 2275, 547,
\r
979 544, 541, 1574, 1571, 2237, 2235, 2229, 1493, 2225, 1489, 478, 2247,
\r
980 470, 2244, 465, 2241, 493, 488, 484, 2250, 498, 495, 1536, 1533, 1530,
\r
981 1539, 2187, 2186, 2184, 2182, 1432, 2179, 1430, 2176, 1427, 414, 412,
\r
982 2197, 409, 2195, 405, 2193, 2190, 426, 424, 421, 2203, 418, 2201, 431,
\r
983 429, 1473, 1471, 1469, 1466, 434, 1477, 1475, 2478, 2472, 2470, 2459,
\r
984 2457, 2454, 2462, 803, 2437, 2432, 2429, 1726, 2443, 2440, 792, 789,
\r
985 785, 2401, 2399, 2393, 1702, 2389, 1699, 2411, 2408, 2405, 745, 741,
\r
986 2415, 758, 755, 1721, 2358, 2357, 2355, 2353, 1661, 2350, 1660, 2347,
\r
987 1657, 2368, 2366, 2364, 2361, 1666, 690, 687, 2374, 683, 2372, 701,
\r
988 698, 705, 1691, 1689, 2619, 2617, 2610, 2608, 2605, 2613, 2593, 2588,
\r
989 2585, 1803, 2599, 2596, 2563, 2561, 2555, 1797, 2551, 1795, 2573,
\r
990 2570, 2567, 2577, 2525, 2524, 2522, 2520, 1786, 2517, 1785, 2514,
\r
991 1783, 2535, 2533, 2531, 2528, 1788, 2541, 2539, 906, 903, 911, 2721,
\r
992 1844, 2715, 2712, 1838, 1836, 2699, 2696, 2693, 2703, 1827, 1826,
\r
993 1824, 2673, 2671, 2669, 2666, 1829, 2679, 2677, 1858, 1857, 2772,
\r
994 1854, 1853, 1851, 1856, 2766, 2764, 143, 1987, 139, 1986, 135, 133,
\r
995 131, 1984, 128, 1983, 125, 1981, 138, 137, 136, 1985, 1133, 1132,
\r
996 1130, 112, 110, 1974, 107, 1973, 104, 1971, 1969, 122, 121, 119, 117,
\r
997 1977, 114, 1976, 124, 1115, 1114, 1112, 1110, 1117, 1116, 84, 83,
\r
998 1953, 81, 1952, 78, 1950, 1948, 1945, 94, 93, 91, 1959, 88, 1958, 85,
\r
999 1955, 99, 97, 95, 1961, 1086, 1085, 1083, 1081, 1078, 100, 1090, 1089,
\r
1000 1087, 1091, 49, 47, 1917, 44, 1915, 1913, 1910, 1907, 59, 1926, 56,
\r
1001 1925, 53, 1922, 1919, 66, 64, 1931, 61, 1929, 1042, 1040, 1038, 71,
\r
1002 1035, 70, 1032, 68, 1048, 1047, 1045, 1043, 1050, 1049, 12, 10, 1869,
\r
1003 1867, 1864, 1861, 21, 1880, 19, 1877, 1874, 1871, 28, 1888, 25, 1886,
\r
1004 22, 1883, 982, 980, 977, 974, 32, 30, 991, 989, 987, 984, 34, 995,
\r
1005 994, 992, 2151, 2150, 2147, 2146, 2144, 356, 355, 354, 2149, 2139,
\r
1006 2138, 2136, 2134, 1359, 343, 341, 338, 2143, 335, 2141, 348, 347, 346,
\r
1007 1376, 1374, 2124, 2123, 2121, 2119, 1326, 2116, 1324, 310, 308, 305,
\r
1008 2131, 302, 2129, 298, 2127, 320, 318, 316, 313, 2133, 322, 321, 1355,
\r
1009 1353, 1351, 1357, 2092, 2091, 2089, 2087, 1276, 2084, 1274, 2081,
\r
1010 1271, 259, 2102, 256, 2100, 252, 2098, 2095, 272, 269, 2108, 266,
\r
1011 2106, 281, 279, 277, 1317, 1315, 1313, 1310, 282, 1321, 1319, 2039,
\r
1012 2037, 2035, 2032, 1203, 2029, 1200, 1197, 207, 2053, 205, 2051, 201,
\r
1013 2049, 2046, 2043, 220, 218, 2064, 215, 2062, 211, 2059, 228, 226, 223,
\r
1014 2069, 1259, 1257, 1254, 232, 1251, 230, 1267, 1265, 1263, 2316, 2315,
\r
1015 2312, 2311, 2309, 2314, 2304, 2303, 2301, 2299, 1593, 2308, 2306, 590,
\r
1016 2288, 2287, 2285, 2283, 1578, 2280, 1577, 2295, 2293, 2291, 579, 577,
\r
1017 574, 571, 2298, 582, 581, 1592, 2263, 2262, 2260, 2258, 1545, 2255,
\r
1018 1544, 2252, 1541, 2273, 2271, 2269, 2266, 1550, 535, 532, 2279, 528,
\r
1019 2277, 546, 543, 549, 1575, 1573, 2224, 2222, 2220, 1486, 2217, 1485,
\r
1020 2214, 1482, 1479, 2238, 2236, 2234, 2231, 1496, 2228, 1492, 480, 477,
\r
1021 2248, 473, 2246, 469, 2243, 490, 487, 2251, 497, 1537, 1535, 1532,
\r
1022 2477, 2476, 2474, 2479, 2469, 2468, 2466, 2464, 1730, 2473, 2471,
\r
1023 2453, 2452, 2450, 2448, 1729, 2445, 1728, 2460, 2458, 2456, 2463, 805,
\r
1024 804, 2428, 2427, 2425, 2423, 1725, 2420, 1724, 2417, 1722, 2438, 2436,
\r
1025 2434, 2431, 1727, 2444, 2442, 793, 791, 788, 795, 2388, 2386, 2384,
\r
1026 1697, 2381, 1696, 2378, 1694, 1692, 2402, 2400, 2398, 2395, 1703,
\r
1027 2392, 1701, 2412, 2410, 2407, 751, 748, 744, 2416, 759, 757, 1807,
\r
1028 2620, 2618, 1806, 1805, 2611, 2609, 2607, 2614, 1802, 1801, 1799,
\r
1029 2594, 2592, 2590, 2587, 1804, 2600, 2598, 1794, 1793, 1791, 1789,
\r
1030 2564, 2562, 2560, 2557, 1798, 2554, 1796, 2574, 2572, 2569, 2578,
\r
1031 1847, 1846, 2722, 1843, 1842, 1840, 1845, 2716, 2714, 1835, 1834,
\r
1032 1832, 1830, 1839, 1837, 2700, 2698, 2695, 2704, 1817, 1811, 1810, 897,
\r
1033 862, 1777, 829, 826, 838, 1760, 1758, 808, 2481, 1741, 1740, 1738,
\r
1034 1743, 2624, 1818, 2726, 2776, 782, 740, 737, 1715, 686, 679, 695,
\r
1035 1682, 1680, 639, 628, 2339, 647, 644, 1645, 1643, 1640, 1648, 602,
\r
1036 600, 597, 595, 2320, 593, 2318, 609, 607, 604, 1611, 1610, 1608, 1606,
\r
1037 613, 1615, 1613, 2328, 926, 924, 892, 886, 899, 857, 850, 2505, 1778,
\r
1038 824, 823, 821, 819, 2488, 818, 2486, 833, 831, 828, 840, 1761, 1759,
\r
1039 2649, 2632, 2630, 2746, 2734, 2732, 2782, 2781, 570, 567, 1587, 531,
\r
1040 527, 523, 540, 1566, 1564, 476, 467, 463, 2240, 486, 483, 1524, 1521,
\r
1041 1518, 1529, 411, 403, 2192, 399, 2189, 423, 416, 1462, 1457, 1454,
\r
1042 428, 1468, 1465, 2210, 366, 363, 2158, 360, 2156, 357, 2153, 376, 373,
\r
1043 370, 2163, 1410, 1409, 1407, 1405, 382, 1402, 380, 1417, 1415, 1412,
\r
1044 1421, 2175, 2174, 777, 774, 771, 784, 732, 725, 722, 2404, 743, 1716,
\r
1045 676, 674, 668, 2363, 665, 2360, 685, 1684, 1681, 626, 624, 622, 2335,
\r
1046 620, 2333, 617, 2330, 641, 635, 649, 1646, 1644, 1642, 2566, 928, 925,
\r
1047 2530, 2527, 894, 891, 888, 2501, 2499, 2496, 858, 856, 854, 851, 1779,
\r
1048 2692, 2668, 2665, 2645, 2643, 2640, 2651, 2768, 2759, 2757, 2744,
\r
1049 2743, 2741, 2748, 352, 1382, 340, 337, 333, 1371, 1369, 307, 300, 296,
\r
1050 2126, 315, 312, 1347, 1342, 1350, 261, 258, 250, 2097, 246, 2094, 271,
\r
1051 268, 264, 1306, 1301, 1298, 276, 1312, 1309, 2115, 203, 2048, 195,
\r
1052 2045, 191, 2041, 213, 209, 2056, 1246, 1244, 1238, 225, 1234, 222,
\r
1053 1256, 1253, 1249, 1262, 2080, 2079, 154, 1997, 150, 1995, 147, 1992,
\r
1054 1989, 163, 160, 2004, 156, 2001, 1175, 1174, 1172, 1170, 1167, 170,
\r
1055 1164, 167, 1185, 1183, 1180, 1177, 174, 1190, 1188, 2025, 2024, 2022,
\r
1056 587, 586, 564, 559, 556, 2290, 573, 1588, 520, 518, 512, 2268, 508,
\r
1057 2265, 530, 1568, 1565, 461, 457, 2233, 450, 2230, 446, 2226, 479, 471,
\r
1058 489, 1526, 1523, 1520, 397, 395, 2185, 392, 2183, 389, 2180, 2177,
\r
1059 410, 2194, 402, 422, 1463, 1461, 1459, 1456, 1470, 2455, 799, 2433,
\r
1060 2430, 779, 776, 773, 2397, 2394, 2390, 734, 728, 724, 746, 1717, 2356,
\r
1061 2354, 2351, 2348, 1658, 677, 675, 673, 670, 667, 688, 1685, 1683,
\r
1062 2606, 2589, 2586, 2559, 2556, 2552, 927, 2523, 2521, 2518, 2515, 1784,
\r
1063 2532, 895, 893, 890, 2718, 2709, 2707, 2689, 2687, 2684, 2663, 2662,
\r
1064 2660, 2658, 1825, 2667, 2769, 1852, 2760, 2758, 142, 141, 1139, 1138,
\r
1065 134, 132, 129, 126, 1982, 1129, 1128, 1126, 1131, 113, 111, 108, 105,
\r
1066 1972, 101, 1970, 120, 118, 115, 1109, 1108, 1106, 1104, 123, 1113,
\r
1067 1111, 82, 79, 1951, 75, 1949, 72, 1946, 92, 89, 86, 1956, 1077, 1076,
\r
1068 1074, 1072, 98, 1069, 96, 1084, 1082, 1079, 1088, 1968, 1967, 48, 45,
\r
1069 1916, 42, 1914, 39, 1911, 1908, 60, 57, 54, 1923, 50, 1920, 1031,
\r
1070 1030, 1028, 1026, 67, 1023, 65, 1020, 62, 1041, 1039, 1036, 1033, 69,
\r
1071 1046, 1044, 1944, 1943, 1941, 11, 9, 1868, 7, 1865, 1862, 1859, 20,
\r
1072 1878, 16, 1875, 13, 1872, 970, 968, 966, 963, 29, 960, 26, 23, 983,
\r
1073 981, 978, 975, 33, 971, 31, 990, 988, 985, 1906, 1904, 1902, 993, 351,
\r
1074 2145, 1383, 331, 330, 328, 326, 2137, 323, 2135, 339, 1372, 1370, 294,
\r
1075 293, 291, 289, 2122, 286, 2120, 283, 2117, 309, 303, 317, 1348, 1346,
\r
1076 1344, 245, 244, 242, 2090, 239, 2088, 236, 2085, 2082, 260, 2099, 249,
\r
1077 270, 1307, 1305, 1303, 1300, 1314, 189, 2038, 186, 2036, 183, 2033,
\r
1078 2030, 2026, 206, 198, 2047, 194, 216, 1247, 1245, 1243, 1240, 227,
\r
1079 1237, 1255, 2310, 2302, 2300, 2286, 2284, 2281, 565, 563, 561, 558,
\r
1080 575, 1589, 2261, 2259, 2256, 2253, 1542, 521, 519, 517, 514, 2270,
\r
1081 511, 533, 1569, 1567, 2223, 2221, 2218, 2215, 1483, 2211, 1480, 459,
\r
1082 456, 453, 2232, 449, 474, 491, 1527, 1525, 1522, 2475, 2467, 2465,
\r
1083 2451, 2449, 2446, 801, 800, 2426, 2424, 2421, 2418, 1723, 2435, 780,
\r
1084 778, 775, 2387, 2385, 2382, 2379, 1695, 2375, 1693, 2396, 735, 733,
\r
1085 730, 727, 749, 1718, 2616, 2615, 2604, 2603, 2601, 2584, 2583, 2581,
\r
1086 2579, 1800, 2591, 2550, 2549, 2547, 2545, 1792, 2542, 1790, 2558, 929,
\r
1087 2719, 1841, 2710, 2708, 1833, 1831, 2690, 2688, 2686, 1815, 1809,
\r
1088 1808, 1774, 1756, 1754, 1737, 1736, 1734, 1739, 1816, 1711, 1676,
\r
1089 1674, 633, 629, 1638, 1636, 1633, 1641, 598, 1605, 1604, 1602, 1600,
\r
1090 605, 1609, 1607, 2327, 887, 853, 1775, 822, 820, 1757, 1755, 1584,
\r
1091 524, 1560, 1558, 468, 464, 1514, 1511, 1508, 1519, 408, 404, 400,
\r
1092 1452, 1447, 1444, 417, 1458, 1455, 2208, 364, 361, 358, 2154, 1401,
\r
1093 1400, 1398, 1396, 374, 1393, 371, 1408, 1406, 1403, 1413, 2173, 2172,
\r
1094 772, 726, 723, 1712, 672, 669, 666, 682, 1678, 1675, 625, 623, 621,
\r
1095 618, 2331, 636, 632, 1639, 1637, 1635, 920, 918, 884, 880, 889, 849,
\r
1096 848, 847, 846, 2497, 855, 852, 1776, 2641, 2742, 2787, 1380, 334,
\r
1097 1367, 1365, 301, 297, 1340, 1338, 1335, 1343, 255, 251, 247, 1296,
\r
1098 1291, 1288, 265, 1302, 1299, 2113, 204, 196, 192, 2042, 1232, 1230,
\r
1099 1224, 214, 1220, 210, 1242, 1239, 1235, 1250, 2077, 2075, 151, 148,
\r
1100 1993, 144, 1990, 1163, 1162, 1160, 1158, 1155, 161, 1152, 157, 1173,
\r
1101 1171, 1168, 1165, 168, 1181, 1178, 2021, 2020, 2018, 2023, 585, 560,
\r
1102 557, 1585, 516, 509, 1562, 1559, 458, 447, 2227, 472, 1516, 1513,
\r
1103 1510, 398, 396, 393, 390, 2181, 386, 2178, 407, 1453, 1451, 1449,
\r
1104 1446, 420, 1460, 2209, 769, 764, 720, 712, 2391, 729, 1713, 664, 663,
\r
1105 661, 659, 2352, 656, 2349, 671, 1679, 1677, 2553, 922, 919, 2519,
\r
1106 2516, 885, 883, 881, 2685, 2661, 2659, 2767, 2756, 2755, 140, 1137,
\r
1107 1136, 130, 127, 1125, 1124, 1122, 1127, 109, 106, 102, 1103, 1102,
\r
1108 1100, 1098, 116, 1107, 1105, 1980, 80, 76, 73, 1947, 1068, 1067, 1065,
\r
1109 1063, 90, 1060, 87, 1075, 1073, 1070, 1080, 1966, 1965, 46, 43, 40,
\r
1110 1912, 36, 1909, 1019, 1018, 1016, 1014, 58, 1011, 55, 1008, 51, 1029,
\r
1111 1027, 1024, 1021, 63, 1037, 1034, 1940, 1939, 1937, 1942, 8, 1866, 4,
\r
1112 1863, 1, 1860, 956, 954, 952, 949, 946, 17, 14, 969, 967, 964, 961,
\r
1113 27, 957, 24, 979, 976, 972, 1901, 1900, 1898, 1896, 986, 1905, 1903,
\r
1114 350, 349, 1381, 329, 327, 324, 1368, 1366, 292, 290, 287, 284, 2118,
\r
1115 304, 1341, 1339, 1337, 1345, 243, 240, 237, 2086, 233, 2083, 254,
\r
1116 1297, 1295, 1293, 1290, 1304, 2114, 190, 187, 184, 2034, 180, 2031,
\r
1117 177, 2027, 199, 1233, 1231, 1229, 1226, 217, 1223, 1241, 2078, 2076,
\r
1118 584, 555, 554, 552, 550, 2282, 562, 1586, 507, 506, 504, 502, 2257,
\r
1119 499, 2254, 515, 1563, 1561, 445, 443, 441, 2219, 438, 2216, 435, 2212,
\r
1120 460, 454, 475, 1517, 1515, 1512, 2447, 798, 797, 2422, 2419, 770, 768,
\r
1121 766, 2383, 2380, 2376, 721, 719, 717, 714, 731, 1714, 2602, 2582,
\r
1122 2580, 2548, 2546, 2543, 923, 921, 2717, 2706, 2705, 2683, 2682, 2680,
\r
1123 1771, 1752, 1750, 1733, 1732, 1731, 1735, 1814, 1707, 1670, 1668,
\r
1124 1631, 1629, 1626, 1634, 1599, 1598, 1596, 1594, 1603, 1601, 2326,
\r
1125 1772, 1753, 1751, 1581, 1554, 1552, 1504, 1501, 1498, 1509, 1442,
\r
1126 1437, 1434, 401, 1448, 1445, 2206, 1392, 1391, 1389, 1387, 1384, 359,
\r
1127 1399, 1397, 1394, 1404, 2171, 2170, 1708, 1672, 1669, 619, 1632, 1630,
\r
1128 1628, 1773, 1378, 1363, 1361, 1333, 1328, 1336, 1286, 1281, 1278, 248,
\r
1129 1292, 1289, 2111, 1218, 1216, 1210, 197, 1206, 193, 1228, 1225, 1221,
\r
1130 1236, 2073, 2071, 1151, 1150, 1148, 1146, 152, 1143, 149, 1140, 145,
\r
1131 1161, 1159, 1156, 1153, 158, 1169, 1166, 2017, 2016, 2014, 2019, 1582,
\r
1132 510, 1556, 1553, 452, 448, 1506, 1500, 394, 391, 387, 1443, 1441,
\r
1133 1439, 1436, 1450, 2207, 765, 716, 713, 1709, 662, 660, 657, 1673,
\r
1134 1671, 916, 914, 879, 878, 877, 882, 1135, 1134, 1121, 1120, 1118,
\r
1135 1123, 1097, 1096, 1094, 1092, 103, 1101, 1099, 1979, 1059, 1058, 1056,
\r
1136 1054, 77, 1051, 74, 1066, 1064, 1061, 1071, 1964, 1963, 1007, 1006,
\r
1137 1004, 1002, 999, 41, 996, 37, 1017, 1015, 1012, 1009, 52, 1025, 1022,
\r
1138 1936, 1935, 1933, 1938, 942, 940, 938, 935, 932, 5, 2, 955, 953, 950,
\r
1139 947, 18, 943, 15, 965, 962, 958, 1895, 1894, 1892, 1890, 973, 1899,
\r
1140 1897, 1379, 325, 1364, 1362, 288, 285, 1334, 1332, 1330, 241, 238,
\r
1141 234, 1287, 1285, 1283, 1280, 1294, 2112, 188, 185, 181, 178, 2028,
\r
1142 1219, 1217, 1215, 1212, 200, 1209, 1227, 2074, 2072, 583, 553, 551,
\r
1143 1583, 505, 503, 500, 513, 1557, 1555, 444, 442, 439, 436, 2213, 455,
\r
1144 451, 1507, 1505, 1502, 796, 763, 762, 760, 767, 711, 710, 708, 706,
\r
1145 2377, 718, 715, 1710, 2544, 917, 915, 2681, 1627, 1597, 1595, 2325,
\r
1146 1769, 1749, 1747, 1499, 1438, 1435, 2204, 1390, 1388, 1385, 1395,
\r
1147 2169, 2167, 1704, 1665, 1662, 1625, 1623, 1620, 1770, 1329, 1282,
\r
1148 1279, 2109, 1214, 1207, 1222, 2068, 2065, 1149, 1147, 1144, 1141, 146,
\r
1149 1157, 1154, 2013, 2011, 2008, 2015, 1579, 1549, 1546, 1495, 1487,
\r
1150 1433, 1431, 1428, 1425, 388, 1440, 2205, 1705, 658, 1667, 1664, 1119,
\r
1151 1095, 1093, 1978, 1057, 1055, 1052, 1062, 1962, 1960, 1005, 1003,
\r
1152 1000, 997, 38, 1013, 1010, 1932, 1930, 1927, 1934, 941, 939, 936, 933,
\r
1153 6, 930, 3, 951, 948, 944, 1889, 1887, 1884, 1881, 959, 1893, 1891, 35,
\r
1154 1377, 1360, 1358, 1327, 1325, 1322, 1331, 1277, 1275, 1272, 1269, 235,
\r
1155 1284, 2110, 1205, 1204, 1201, 1198, 182, 1195, 179, 1213, 2070, 2067,
\r
1156 1580, 501, 1551, 1548, 440, 437, 1497, 1494, 1490, 1503, 761, 709,
\r
1157 707, 1706, 913, 912, 2198, 1386, 2164, 2161, 1621, 1766, 2103, 1208,
\r
1158 2058, 2054, 1145, 1142, 2005, 2002, 1999, 2009, 1488, 1429, 1426,
\r
1159 2200, 1698, 1659, 1656, 1975, 1053, 1957, 1954, 1001, 998, 1924, 1921,
\r
1160 1918, 1928, 937, 934, 931, 1879, 1876, 1873, 1870, 945, 1885, 1882,
\r
1161 1323, 1273, 1270, 2105, 1202, 1199, 1196, 1211, 2061, 2057, 1576,
\r
1162 1543, 1540, 1484, 1481, 1478, 1491, 1700};
\r