/* * * Copyright (C) 2023, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: iaom */ #include "binary-parser.h" #include #include #include #include #include "limits.h" #include #include "common.h" #include using namespace std; // 字符匹配算法调用 //#define USE_STDFIND #define USE_QT_CC static QDateTime DtFlag1; struct Properties { ushort category : 8; /* 5 needed */ ushort line_break_class : 8; /* 6 needed */ ushort direction : 8; /* 5 needed */ ushort combiningClass : 8; ushort joining : 2; signed short digitValue : 6; /* 5 needed */ ushort unicodeVersion : 4; ushort lowerCaseSpecial : 1; ushort upperCaseSpecial : 1; ushort titleCaseSpecial : 1; ushort caseFoldSpecial : 1; /* currently unused */ signed short mirrorDiff : 16; signed short lowerCaseDiff : 16; signed short upperCaseDiff : 16; signed short titleCaseDiff : 16; signed short caseFoldDiff : 16; ushort graphemeBreak : 8; /* 4 needed */ ushort wordBreak : 8; /* 4 needed */ ushort sentenceBreak : 8; /* 4 needed */ }; static const unsigned short uc_property_trie[] = { // 0 - 0x11000 6256, 6288, 6320, 6352, 6384, 6416, 6448, 6480, 6512, 6544, 6576, 6608, 6640, 6672, 6704, 6736, 6768, 6800, 6832, 6864, 6896, 6928, 6960, 6992, 7024, 7056, 7088, 7120, 7152, 7184, 7216, 7248, 7280, 7312, 7344, 6512, 7376, 6512, 7408, 7440, 7472, 7504, 7536, 7568, 7600, 7632, 7664, 7696, 7728, 7760, 7792, 7824, 7856, 7888, 7920, 7952, 7984, 8016, 8048, 8080, 8112, 8144, 8176, 8208, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8272, 8304, 8336, 8368, 8400, 8432, 8464, 8496, 8528, 8560, 8592, 8624, 8656, 8688, 8720, 8752, 8400, 8784, 8816, 8848, 8880, 8912, 8944, 8976, 9008, 9040, 9072, 9104, 9136, 9168, 9200, 9232, 9136, 9264, 9296, 9104, 9328, 9360, 9392, 9424, 9456, 9488, 9520, 9552, 9584, 9616, 9648, 9552, 9680, 9712, 9744, 9776, 9808, 9840, 9872, 9552, 9904, 9936, 9968, 9552, 9552, 10000, 10032, 10064, 10096, 10096, 10128, 10160, 10160, 10192, 10224, 10256, 10288, 10320, 10352, 10320, 10384, 10416, 10448, 10480, 10512, 10320, 10544, 10576, 10608, 10320, 10320, 10640, 10672, 10320, 10320, 10320, 10320, 10320, 10320, 10320, 10320, 10320, 10320, 10320, 10320, 10320, 10320, 10320, 10320, 10320, 10320, 10704, 10736, 10320, 10320, 10768, 10800, 10832, 10864, 10896, 9904, 10928, 10960, 10992, 11024, 10320, 11056, 11088, 10320, 11120, 9552, 9552, 11152, 11184, 11216, 11248, 11280, 11312, 11344, 11376, 11408, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 11440, 11472, 11504, 11536, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 11568, 11600, 11632, 11664, 11696, 11728, 11760, 11792, 6512, 6512, 6512, 6512, 11824, 6512, 6512, 11856, 11888, 11920, 11952, 11984, 12016, 12048, 12080, 12112, 12144, 12176, 12208, 12240, 12272, 12304, 12336, 12368, 12400, 12432, 12464, 12496, 12528, 12560, 12592, 12624, 12656, 12688, 12720, 12752, 12784, 12816, 12848, 12880, 12912, 12944, 12976, 13008, 13040, 13072, 13104, 13136, 13168, 13200, 13232, 13264, 13296, 13328, 13360, 13392, 13168, 13168, 13168, 13168, 13424, 13456, 13488, 13520, 13552, 13168, 13168, 13584, 13616, 13648, 9552, 9552, 13680, 13712, 13744, 13776, 13808, 13840, 13872, 13904, 13936, 13936, 13936, 13936, 13936, 13936, 13936, 13936, 13968, 13968, 13968, 13968, 14000, 14032, 14064, 14096, 13968, 14128, 13968, 14160, 14192, 14224, 14256, 14288, 14320, 14352, 9552, 9552, 9552, 9552, 9552, 9552, 14384, 14416, 14448, 14480, 14512, 14512, 14512, 14544, 14576, 14608, 14640, 14672, 14704, 14736, 14736, 9552, 14768, 9552, 9552, 9552, 14800, 14832, 14832, 14864, 14832, 14832, 14832, 14832, 14832, 14832, 14896, 14928, 14960, 14992, 15024, 15056, 15088, 15120, 15152, 15184, 15216, 15248, 15280, 15280, 15312, 15344, 15376, 15408, 15440, 15472, 15504, 15536, 15472, 15568, 15600, 15632, 15664, 15664, 15664, 15696, 15664, 15664, 15728, 15760, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15792, 15824, 11376, 11376, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15888, 9552, 9552, 15920, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15952, 15984, 16016, 16048, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 16080, 16112, 9552, 9552, 9552, 9552, 9552, 9552, 16144, 16176, 16208, 16240, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16464, 16272, 16304, 16336, 16368, 16400, 16432, 16496, 9552, 9552, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16528, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 16560, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 15856, 16592, 16624, 16656, 16688, 16688, 16720, 9552, 16752, 16784, 16816, 16848, 16848, 16880, 16912, 16848, 16848, 16848, 16848, 16848, 16848, 16848, 16848, 16848, 16848, 16944, 16976, 16848, 17008, 16848, 17040, 17072, 17104, 17136, 17168, 17200, 16848, 16848, 16848, 17232, 17264, 17296, 17328, 17360, 17392, 17424, 17456, 17488, 17520, 17552, 17584, 9552, 17616, 17616, 17616, 17648, 17680, 17712, 17744, 17776, 17808, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 17840, 17872, 17904, 9552, 17936, 14640, 17968, 9552, 18000, 18032, 18064, 17616, 18096, 18128, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 9552, 18160, 18192, 8240, 8240, 8240, 8240, 8240, 8240, 18224, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 18256, 18288, 18320, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, 8240, // 0x11000 - 0x110000 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18608, 18608, 18608, 18864, 19120, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 19376, 19632, 19888, 20144, 20400, 20656, 20912, 21168, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 21424, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21680, 21936, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 21680, 21680, 22192, 18352, 18352, 18352, 18352, 21424, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 21424, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 21424, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 21424, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 21424, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 21424, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 21424, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 21424, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 21424, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 21424, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 21424, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 21424, 22448, 22704, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 18352, 21424, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 23216, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 22960, 23216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 9, 14, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 40, 41, 42, 43, 42, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 39, 45, 41, 36, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 14, 48, 12, 12, 12, 49, 49, 42, 49, 50, 51, 36, 52, 49, 42, 53, 54, 55, 56, 57, 58, 49, 59, 42, 60, 50, 61, 62, 62, 62, 14, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 36, 38, 38, 38, 38, 38, 38, 38, 63, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 36, 44, 44, 44, 44, 44, 44, 44, 64, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 67, 68, 65, 66, 65, 66, 65, 66, 50, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 69, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 70, 65, 66, 65, 66, 65, 66, 71, 72, 73, 65, 66, 65, 66, 74, 65, 66, 75, 75, 65, 66, 50, 76, 77, 78, 65, 66, 75, 79, 80, 81, 82, 65, 66, 83, 50, 81, 84, 85, 86, 65, 66, 65, 66, 65, 66, 87, 65, 66, 87, 50, 50, 65, 66, 87, 65, 66, 88, 88, 65, 66, 65, 66, 89, 65, 66, 50, 90, 65, 66, 50, 91, 90, 90, 90, 90, 92, 93, 94, 92, 93, 94, 92, 93, 94, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 95, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 96, 92, 93, 94, 65, 66, 97, 98, 99, 100, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 99, 100, 99, 100, 99, 100, 99, 100, 101, 102, 99, 100, 99, 100, 99, 100, 99, 100, 99, 100, 99, 100, 99, 100, 99, 100, 99, 100, 102, 102, 102, 103, 103, 103, 104, 105, 106, 107, 108, 103, 103, 105, 109, 110, 111, 112, 113, 109, 113, 109, 113, 109, 113, 109, 113, 109, 50, 50, 50, 114, 115, 50, 116, 116, 50, 117, 50, 118, 50, 50, 50, 50, 116, 50, 50, 119, 50, 50, 50, 50, 120, 121, 50, 122, 50, 50, 50, 121, 50, 50, 123, 50, 50, 124, 50, 50, 50, 50, 50, 50, 50, 125, 50, 50, 126, 50, 50, 126, 50, 50, 50, 50, 126, 127, 128, 128, 129, 50, 50, 50, 50, 50, 130, 50, 90, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 131, 131, 131, 131, 131, 102, 102, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 134, 134, 134, 134, 134, 132, 132, 42, 42, 42, 42, 133, 133, 135, 133, 133, 133, 135, 133, 133, 133, 134, 134, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 136, 132, 132, 132, 132, 132, 42, 42, 42, 42, 42, 136, 136, 136, 136, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 141, 141, 141, 141, 140, 142, 141, 141, 141, 141, 141, 143, 143, 141, 141, 141, 141, 143, 143, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 144, 144, 144, 144, 144, 141, 141, 141, 141, 139, 139, 139, 139, 139, 139, 139, 139, 145, 146, 147, 147, 147, 146, 146, 146, 147, 147, 148, 149, 149, 149, 150, 150, 150, 150, 149, 151, 152, 152, 153, 154, 155, 155, 156, 157, 157, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 42, 42, 160, 160, 160, 160, 132, 161, 161, 161, 34, 160, 160, 160, 160, 160, 42, 42, 162, 14, 163, 163, 163, 160, 164, 160, 165, 165, 166, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 160, 38, 38, 38, 38, 38, 38, 38, 38, 38, 167, 168, 168, 168, 169, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 170, 44, 44, 44, 44, 44, 44, 44, 44, 44, 171, 172, 172, 160, 173, 174, 175, 175, 175, 176, 177, 131, 178, 179, 65, 100, 65, 100, 65, 100, 65, 100, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 180, 181, 182, 50, 183, 184, 185, 186, 187, 188, 186, 187, 103, 189, 189, 189, 190, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 190, 191, 191, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 192, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 192, 193, 193, 65, 66, 194, 139, 139, 139, 139, 160, 195, 195, 178, 179, 99, 100, 99, 100, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 196, 65, 66, 65, 66, 178, 179, 65, 66, 178, 179, 65, 66, 178, 179, 197, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 99, 100, 65, 66, 65, 66, 65, 66, 65, 66, 105, 106, 65, 66, 113, 109, 113, 109, 113, 109, 178, 179, 178, 179, 178, 179, 178, 179, 178, 179, 178, 179, 178, 179, 178, 179, 113, 109, 113, 109, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 160, 160, 134, 199, 199, 200, 199, 200, 199, 160, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 202, 160, 203, 204, 160, 160, 160, 160, 160, 205, 206, 207, 207, 207, 207, 206, 207, 207, 207, 208, 206, 207, 207, 207, 207, 207, 207, 152, 206, 206, 206, 206, 206, 207, 207, 206, 207, 207, 208, 209, 207, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 226, 207, 152, 229, 230, 205, 205, 205, 205, 205, 205, 205, 205, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 205, 205, 205, 205, 205, 231, 231, 231, 232, 233, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 234, 234, 234, 234, 235, 235, 235, 235, 235, 235, 235, 236, 237, 238, 239, 239, 149, 149, 149, 149, 149, 149, 235, 235, 235, 235, 235, 240, 235, 235, 241, 242, 235, 243, 244, 244, 244, 244, 245, 244, 245, 244, 245, 245, 245, 245, 245, 244, 244, 244, 244, 245, 245, 245, 245, 245, 245, 245, 245, 235, 235, 235, 235, 235, 246, 245, 245, 245, 245, 245, 245, 245, 244, 245, 245, 247, 248, 249, 250, 251, 252, 253, 254, 146, 146, 147, 150, 149, 149, 153, 153, 153, 152, 153, 153, 235, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 266, 267, 268, 268, 269, 244, 244, 244, 243, 244, 244, 244, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 270, 270, 245, 245, 245, 245, 245, 270, 244, 245, 245, 244, 244, 244, 244, 244, 244, 244, 244, 244, 245, 244, 245, 271, 245, 245, 244, 244, 242, 244, 139, 139, 139, 139, 139, 139, 139, 272, 273, 139, 139, 139, 139, 141, 139, 274, 274, 139, 139, 49, 141, 139, 139, 141, 275, 275, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 270, 270, 270, 276, 276, 277, 278, 278, 278, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 235, 280, 271, 281, 270, 270, 270, 271, 271, 271, 271, 271, 270, 270, 270, 270, 271, 270, 270, 270, 270, 270, 270, 270, 270, 270, 271, 270, 271, 270, 271, 277, 277, 275, 146, 147, 146, 146, 147, 146, 146, 147, 147, 147, 146, 147, 147, 146, 147, 146, 146, 146, 147, 146, 147, 146, 147, 146, 147, 146, 146, 235, 235, 275, 277, 277, 282, 282, 282, 282, 282, 282, 282, 282, 282, 283, 283, 283, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 283, 283, 282, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 286, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 298, 298, 298, 298, 298, 298, 298, 299, 298, 300, 300, 301, 302, 303, 304, 305, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 160, 306, 306, 307, 308, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 160, 160, 309, 90, 307, 307, 307, 306, 306, 306, 306, 306, 306, 306, 306, 307, 307, 307, 307, 310, 160, 160, 90, 139, 141, 139, 139, 160, 160, 160, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 306, 306, 311, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 199, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 322, 322, 323, 322, 322, 160, 306, 307, 307, 160, 90, 90, 90, 90, 90, 90, 90, 90, 160, 160, 90, 90, 160, 160, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 160, 90, 90, 90, 90, 90, 90, 90, 160, 90, 160, 160, 160, 90, 90, 90, 90, 160, 160, 309, 308, 324, 307, 307, 306, 306, 306, 306, 160, 160, 307, 307, 160, 160, 307, 307, 310, 323, 160, 160, 160, 160, 160, 160, 160, 160, 324, 160, 160, 160, 160, 90, 90, 160, 90, 90, 90, 306, 306, 160, 160, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 90, 90, 12, 12, 325, 325, 325, 325, 325, 325, 194, 160, 160, 160, 160, 160, 160, 326, 306, 327, 160, 90, 90, 90, 90, 90, 90, 160, 160, 160, 160, 90, 90, 160, 160, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 160, 90, 90, 90, 90, 90, 90, 90, 160, 90, 90, 160, 90, 90, 160, 90, 90, 160, 160, 309, 160, 307, 307, 307, 306, 306, 160, 160, 160, 160, 306, 306, 160, 160, 306, 306, 310, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 90, 90, 90, 90, 160, 90, 160, 160, 160, 160, 160, 160, 160, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 306, 306, 90, 90, 90, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 306, 306, 307, 160, 90, 90, 90, 90, 90, 90, 90, 308, 90, 160, 90, 90, 90, 160, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 160, 90, 90, 90, 90, 90, 90, 90, 160, 90, 90, 160, 90, 90, 90, 90, 90, 160, 160, 309, 90, 307, 307, 307, 306, 306, 306, 306, 306, 160, 306, 306, 307, 160, 307, 307, 310, 160, 160, 90, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 90, 308, 326, 326, 160, 160, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 160, 328, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 90, 90, 90, 90, 90, 90, 90, 90, 90, 160, 90, 90, 90, 90, 90, 90, 90, 160, 90, 90, 160, 308, 90, 90, 90, 90, 160, 160, 309, 90, 324, 306, 307, 306, 306, 306, 160, 160, 160, 307, 307, 160, 160, 307, 307, 310, 160, 160, 160, 160, 160, 160, 160, 160, 306, 324, 160, 160, 160, 160, 90, 90, 160, 90, 90, 90, 160, 160, 160, 160, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 194, 308, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 306, 90, 160, 90, 90, 90, 90, 90, 90, 160, 160, 160, 90, 90, 90, 160, 90, 90, 90, 90, 160, 160, 160, 90, 90, 160, 90, 160, 90, 90, 160, 160, 160, 90, 90, 160, 160, 160, 90, 90, 90, 160, 160, 160, 90, 90, 90, 90, 90, 90, 90, 90, 323, 90, 90, 90, 160, 160, 160, 160, 324, 307, 306, 307, 307, 160, 160, 160, 307, 307, 307, 160, 307, 307, 307, 310, 160, 160, 160, 160, 160, 160, 160, 160, 160, 324, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 329, 313, 314, 315, 316, 317, 318, 319, 320, 321, 325, 325, 325, 239, 239, 239, 239, 239, 239, 328, 239, 160, 160, 160, 160, 160, 160, 307, 307, 307, 160, 90, 90, 90, 90, 90, 90, 90, 90, 160, 90, 90, 90, 160, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 160, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 160, 90, 90, 90, 90, 90, 160, 160, 160, 160, 306, 306, 306, 307, 307, 307, 307, 160, 306, 306, 306, 160, 306, 306, 306, 310, 160, 160, 160, 160, 160, 160, 160, 330, 331, 160, 160, 160, 160, 160, 160, 160, 160, 160, 90, 90, 160, 160, 160, 160, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 307, 307, 160, 90, 90, 90, 90, 90, 90, 90, 90, 160, 90, 90, 90, 160, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 160, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 160, 90, 90, 90, 90, 90, 160, 160, 332, 308, 307, 333, 307, 307, 324, 307, 307, 160, 333, 307, 307, 160, 307, 307, 306, 310, 160, 160, 160, 160, 160, 160, 160, 324, 324, 160, 160, 160, 160, 160, 160, 160, 90, 160, 90, 90, 334, 334, 160, 160, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 160, 301, 301, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 90, 90, 90, 90, 90, 90, 90, 90, 90, 160, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 160, 160, 160, 160, 324, 307, 307, 306, 306, 306, 160, 160, 307, 307, 307, 160, 307, 307, 307, 310, 160, 160, 160, 160, 160, 160, 160, 160, 160, 324, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 335, 335, 160, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 160, 160, 160, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 160, 336, 336, 336, 336, 336, 336, 336, 336, 336, 160, 336, 160, 160, 336, 336, 336, 336, 336, 336, 336, 160, 160, 160, 337, 160, 160, 160, 160, 338, 335, 335, 285, 285, 285, 160, 285, 160, 335, 335, 335, 335, 335, 335, 335, 338, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 335, 335, 339, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 341, 340, 340, 341, 341, 341, 341, 342, 342, 343, 160, 160, 160, 160, 12, 340, 340, 340, 340, 340, 340, 344, 341, 345, 345, 345, 345, 341, 341, 341, 199, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 346, 346, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 340, 340, 160, 340, 160, 160, 340, 340, 160, 340, 160, 160, 340, 160, 160, 160, 160, 160, 160, 340, 340, 340, 340, 160, 340, 340, 340, 340, 340, 340, 340, 160, 340, 340, 340, 160, 340, 160, 340, 160, 160, 340, 340, 160, 340, 340, 340, 340, 341, 340, 340, 341, 341, 341, 341, 347, 347, 160, 341, 341, 340, 160, 160, 340, 340, 340, 340, 340, 160, 344, 160, 348, 348, 348, 348, 341, 341, 160, 160, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 160, 160, 340, 340, 160, 160, 349, 350, 350, 350, 351, 352, 351, 351, 353, 351, 351, 354, 353, 355, 355, 355, 355, 355, 353, 356, 357, 356, 356, 356, 206, 206, 356, 356, 356, 356, 356, 356, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 369, 206, 356, 206, 356, 370, 371, 372, 371, 372, 373, 373, 349, 349, 349, 349, 349, 349, 349, 349, 160, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 336, 160, 160, 160, 160, 160, 160, 374, 375, 376, 377, 376, 376, 376, 376, 376, 375, 375, 375, 375, 376, 378, 375, 376, 207, 207, 379, 354, 207, 207, 349, 349, 349, 349, 160, 160, 160, 160, 376, 376, 376, 376, 376, 376, 285, 376, 160, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 285, 285, 285, 376, 376, 376, 376, 376, 376, 376, 285, 376, 285, 285, 285, 160, 380, 380, 381, 381, 381, 381, 381, 381, 147, 381, 381, 381, 381, 381, 381, 160, 160, 381, 382, 382, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 160, 383, 383, 383, 383, 383, 160, 383, 383, 160, 384, 385, 385, 385, 385, 384, 385, 160, 160, 160, 385, 386, 384, 387, 160, 160, 160, 160, 160, 160, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 398, 339, 339, 339, 339, 383, 383, 383, 383, 383, 383, 384, 384, 385, 385, 160, 160, 160, 160, 160, 160, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 400, 400, 323, 323, 199, 401, 160, 160, 160, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 160, 160, 160, 160, 160, 402, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 160, 160, 160, 160, 160, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 160, 160, 160, 160, 160, 160, 336, 336, 336, 336, 336, 336, 336, 323, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 323, 336, 160, 336, 336, 336, 336, 160, 160, 336, 336, 336, 336, 336, 336, 336, 160, 336, 160, 336, 336, 336, 336, 160, 160, 336, 336, 336, 336, 336, 336, 336, 323, 336, 160, 336, 336, 336, 336, 160, 160, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 323, 336, 160, 336, 336, 336, 336, 160, 160, 336, 336, 336, 336, 336, 336, 336, 160, 336, 160, 336, 336, 336, 336, 160, 160, 336, 336, 336, 336, 336, 336, 336, 323, 336, 336, 336, 336, 336, 336, 336, 160, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 323, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 323, 336, 160, 336, 336, 336, 336, 160, 160, 336, 336, 336, 336, 336, 336, 336, 323, 336, 336, 336, 336, 336, 336, 336, 323, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 160, 160, 160, 160, 153, 405, 406, 407, 339, 339, 339, 339, 407, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 160, 160, 160, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 160, 160, 160, 160, 160, 160, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 339, 407, 336, 336, 336, 336, 336, 336, 336, 336, 160, 160, 160, 160, 160, 160, 160, 160, 160, 419, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 420, 421, 160, 160, 160, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 406, 406, 406, 422, 422, 422, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 160, 400, 400, 400, 400, 423, 423, 424, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 423, 423, 424, 425, 425, 160, 160, 160, 160, 160, 160, 160, 160, 160, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 423, 423, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 160, 400, 400, 400, 160, 423, 423, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 426, 426, 384, 385, 385, 385, 385, 385, 385, 385, 384, 384, 384, 384, 384, 384, 384, 384, 385, 384, 384, 385, 385, 385, 385, 385, 385, 385, 385, 385, 387, 385, 406, 406, 427, 428, 406, 339, 406, 429, 383, 430, 160, 160, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 160, 160, 160, 160, 160, 160, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 160, 160, 160, 160, 160, 160, 432, 432, 433, 434, 433, 433, 435, 432, 433, 434, 432, 285, 285, 285, 436, 160, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 160, 160, 160, 160, 160, 160, 336, 336, 336, 137, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 160, 160, 160, 160, 160, 160, 160, 160, 336, 336, 336, 336, 336, 336, 336, 336, 336, 437, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 160, 160, 160, 326, 326, 326, 327, 327, 327, 327, 326, 326, 438, 438, 438, 160, 160, 160, 160, 327, 327, 326, 327, 327, 327, 327, 327, 327, 439, 149, 150, 160, 160, 160, 160, 239, 160, 160, 160, 440, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 160, 160, 451, 451, 451, 451, 451, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 160, 160, 160, 160, 160, 160, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 452, 452, 452, 452, 452, 452, 452, 453, 453, 160, 160, 160, 160, 160, 160, 329, 454, 455, 456, 457, 458, 459, 460, 461, 462, 160, 160, 160, 160, 463, 463, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 153, 152, 464, 464, 464, 160, 160, 465, 466, 334, 334, 334, 334, 467, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 468, 467, 334, 334, 334, 334, 334, 467, 334, 467, 467, 467, 467, 467, 334, 467, 469, 322, 322, 322, 322, 322, 322, 322, 160, 160, 160, 160, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 480, 481, 481, 480, 480, 481, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 298, 299, 298, 298, 298, 298, 298, 298, 298, 482, 482, 482, 482, 482, 482, 482, 482, 482, 160, 160, 160, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 484, 103, 103, 103, 103, 485, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 153, 153, 152, 153, 298, 298, 298, 298, 298, 298, 299, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 298, 299, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 486, 487, 488, 489, 490, 491, 160, 160, 160, 160, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 160, 160, 160, 160, 160, 160, 492, 492, 492, 492, 492, 492, 492, 492, 493, 493, 493, 493, 493, 493, 493, 493, 492, 492, 492, 492, 492, 492, 160, 160, 493, 493, 493, 493, 493, 493, 160, 160, 492, 492, 492, 492, 492, 492, 492, 492, 493, 493, 493, 493, 493, 493, 493, 493, 492, 492, 492, 492, 492, 492, 492, 492, 493, 493, 493, 493, 493, 493, 493, 493, 492, 492, 492, 492, 492, 492, 160, 160, 493, 493, 493, 493, 493, 493, 160, 160, 494, 492, 495, 492, 496, 492, 497, 492, 160, 493, 160, 493, 160, 493, 160, 493, 492, 492, 492, 492, 492, 492, 492, 492, 493, 493, 493, 493, 493, 493, 493, 493, 498, 498, 499, 499, 499, 499, 500, 500, 501, 501, 502, 502, 503, 503, 160, 160, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 492, 492, 552, 553, 554, 160, 555, 556, 493, 493, 557, 557, 558, 42, 559, 42, 42, 42, 560, 561, 562, 160, 563, 564, 565, 565, 565, 565, 566, 42, 42, 42, 492, 492, 567, 166, 160, 160, 568, 569, 493, 493, 570, 570, 160, 42, 42, 42, 492, 492, 571, 169, 572, 182, 573, 574, 493, 493, 575, 575, 576, 42, 42, 42, 160, 160, 577, 578, 579, 160, 580, 581, 582, 582, 583, 583, 584, 42, 42, 160, 585, 585, 585, 585, 585, 585, 585, 586, 585, 585, 585, 587, 588, 589, 590, 591, 592, 593, 592, 592, 594, 595, 14, 14, 596, 597, 598, 599, 596, 600, 598, 599, 14, 14, 14, 14, 601, 601, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 13, 13, 13, 13, 13, 611, 611, 611, 14, 596, 600, 14, 612, 612, 14, 43, 43, 14, 14, 14, 613, 16, 17, 614, 615, 615, 432, 432, 432, 432, 616, 616, 616, 616, 185, 617, 618, 619, 620, 616, 620, 620, 620, 620, 619, 620, 620, 621, 622, 623, 623, 623, 160, 160, 160, 160, 160, 160, 624, 624, 624, 624, 624, 624, 625, 626, 160, 160, 627, 628, 629, 630, 631, 632, 633, 633, 36, 16, 17, 50, 625, 60, 55, 56, 627, 628, 629, 630, 631, 632, 633, 633, 36, 16, 17, 160, 484, 484, 484, 484, 484, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 12, 12, 12, 12, 12, 12, 12, 48, 12, 12, 12, 634, 635, 429, 429, 429, 636, 636, 637, 637, 637, 637, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 139, 139, 144, 144, 139, 139, 139, 139, 144, 144, 144, 139, 139, 273, 273, 273, 273, 139, 195, 195, 638, 639, 639, 159, 640, 159, 639, 641, 299, 299, 299, 299, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 49, 49, 175, 642, 49, 49, 49, 175, 49, 642, 50, 175, 175, 175, 50, 50, 175, 175, 175, 50, 49, 175, 643, 49, 49, 175, 175, 175, 175, 175, 49, 49, 49, 49, 49, 49, 175, 49, 644, 49, 175, 49, 645, 646, 175, 175, 647, 50, 175, 175, 648, 175, 50, 90, 90, 90, 90, 131, 649, 239, 103, 626, 650, 650, 185, 185, 185, 185, 185, 650, 626, 626, 626, 626, 651, 185, 418, 301, 652, 160, 160, 160, 160, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 655, 655, 655, 99, 109, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 36, 36, 36, 36, 36, 49, 49, 49, 49, 49, 36, 36, 49, 49, 49, 49, 36, 49, 49, 36, 49, 49, 36, 49, 49, 49, 49, 49, 49, 49, 36, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 36, 36, 49, 49, 36, 49, 36, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 649, 649, 649, 649, 649, 649, 649, 649, 649, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 36, 36, 36, 36, 36, 36, 36, 36, 656, 656, 656, 657, 657, 657, 36, 36, 36, 36, 18, 54, 36, 658, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 659, 660, 36, 36, 36, 36, 36, 661, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 659, 660, 659, 660, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 659, 660, 659, 660, 659, 660, 659, 660, 36, 36, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 36, 36, 36, 659, 660, 659, 660, 36, 36, 36, 36, 36, 662, 36, 36, 36, 36, 36, 36, 36, 36, 36, 659, 660, 36, 36, 663, 36, 664, 665, 36, 665, 36, 36, 36, 36, 659, 660, 659, 660, 659, 660, 659, 660, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 659, 660, 659, 660, 666, 36, 36, 659, 660, 36, 36, 36, 36, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 659, 660, 36, 36, 659, 660, 667, 667, 667, 185, 668, 668, 185, 185, 669, 669, 669, 670, 670, 185, 49, 649, 49, 49, 49, 49, 49, 49, 659, 660, 659, 660, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 36, 36, 49, 49, 49, 49, 49, 49, 49, 16, 17, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 649, 185, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 381, 649, 649, 649, 649, 649, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 239, 239, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 671, 671, 671, 671, 671, 671, 301, 301, 301, 301, 301, 301, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 649, 649, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 672, 673, 674, 675, 676, 677, 678, 679, 680, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 672, 673, 674, 675, 676, 677, 678, 679, 680, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 60, 55, 56, 627, 628, 629, 630, 631, 632, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 684, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 685, 695, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 36, 49, 49, 49, 49, 49, 49, 49, 49, 49, 36, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 649, 649, 649, 649, 649, 649, 649, 649, 185, 185, 185, 185, 185, 185, 185, 185, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 239, 239, 651, 651, 418, 649, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 36, 649, 649, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 418, 418, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 239, 239, 239, 239, 239, 239, 239, 239, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 160, 160, 160, 239, 239, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 405, 418, 418, 418, 418, 418, 301, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 49, 49, 49, 49, 160, 49, 49, 49, 49, 160, 160, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 160, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 160, 49, 160, 49, 49, 49, 49, 160, 160, 160, 49, 160, 49, 49, 49, 696, 696, 696, 696, 160, 160, 49, 697, 697, 49, 49, 49, 49, 698, 699, 698, 699, 698, 699, 698, 699, 698, 699, 698, 699, 698, 699, 672, 673, 674, 675, 676, 677, 678, 679, 680, 62, 672, 673, 674, 675, 676, 677, 678, 679, 680, 62, 672, 673, 674, 675, 676, 677, 678, 679, 680, 62, 49, 160, 160, 160, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 160, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 160, 700, 700, 700, 701, 702, 703, 704, 671, 671, 671, 671, 160, 160, 160, 160, 160, 185, 185, 185, 185, 185, 705, 706, 185, 185, 185, 185, 185, 185, 705, 706, 185, 185, 185, 705, 706, 705, 706, 698, 699, 698, 699, 698, 699, 160, 160, 160, 160, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 698, 699, 698, 699, 698, 699, 698, 699, 698, 699, 707, 708, 709, 710, 698, 699, 698, 699, 698, 699, 698, 699, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 711, 185, 185, 185, 185, 185, 185, 185, 705, 706, 185, 185, 705, 706, 185, 185, 185, 185, 185, 185, 185, 185, 185, 705, 706, 705, 706, 185, 705, 706, 185, 185, 698, 699, 698, 699, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 712, 185, 185, 705, 706, 185, 185, 698, 699, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 705, 706, 705, 706, 185, 185, 185, 185, 185, 705, 706, 185, 185, 185, 185, 185, 185, 705, 706, 185, 185, 185, 185, 185, 185, 705, 706, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 705, 706, 185, 185, 705, 706, 705, 706, 705, 706, 705, 706, 185, 185, 185, 185, 185, 185, 705, 706, 185, 185, 185, 185, 705, 706, 705, 706, 705, 706, 705, 706, 705, 706, 705, 706, 185, 185, 185, 185, 705, 706, 185, 185, 185, 705, 706, 705, 706, 705, 706, 705, 706, 185, 705, 706, 185, 185, 705, 706, 185, 185, 185, 185, 185, 185, 705, 706, 705, 706, 705, 706, 705, 706, 705, 706, 705, 706, 185, 185, 185, 185, 185, 185, 705, 706, 705, 706, 705, 706, 705, 706, 705, 706, 185, 185, 185, 185, 185, 185, 185, 713, 185, 185, 185, 185, 714, 715, 714, 185, 185, 185, 185, 185, 185, 705, 706, 185, 185, 185, 185, 185, 185, 185, 185, 185, 705, 706, 705, 706, 185, 185, 185, 185, 185, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 418, 418, 418, 418, 418, 418, 301, 301, 301, 301, 301, 301, 301, 160, 160, 160, 160, 160, 301, 301, 301, 301, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 160, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 160, 113, 109, 718, 719, 720, 721, 722, 113, 109, 113, 109, 113, 109, 160, 160, 160, 160, 160, 160, 160, 723, 113, 109, 723, 160, 160, 160, 160, 160, 160, 160, 160, 105, 106, 105, 106, 105, 106, 105, 106, 105, 106, 105, 106, 105, 106, 105, 106, 105, 106, 105, 106, 105, 106, 105, 106, 105, 106, 105, 106, 105, 106, 105, 106, 105, 106, 105, 106, 103, 418, 418, 418, 418, 418, 418, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 620, 620, 620, 620, 724, 620, 620, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 160, 160, 160, 160, 160, 160, 160, 160, 160, 401, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 160, 160, 160, 160, 160, 160, 160, 160, 160, 323, 323, 323, 323, 323, 323, 323, 160, 323, 323, 323, 323, 323, 323, 323, 160, 323, 323, 323, 323, 323, 323, 323, 160, 323, 323, 323, 323, 323, 323, 323, 160, 726, 726, 727, 728, 727, 728, 726, 726, 726, 727, 728, 726, 727, 728, 620, 620, 620, 620, 620, 620, 620, 620, 619, 729, 160, 160, 160, 160, 727, 728, 160, 160, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 160, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 160, 160, 160, 160, 731, 732, 733, 734, 735, 736, 737, 738, 16, 17, 16, 17, 16, 17, 16, 17, 16, 17, 735, 735, 16, 17, 16, 17, 16, 17, 16, 17, 739, 16, 17, 740, 735, 738, 738, 738, 738, 738, 738, 738, 738, 738, 741, 742, 140, 743, 744, 744, 745, 746, 746, 746, 746, 746, 735, 735, 747, 747, 747, 748, 749, 750, 730, 735, 160, 751, 737, 751, 737, 751, 737, 751, 737, 751, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 751, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 751, 737, 751, 737, 751, 737, 737, 737, 737, 737, 737, 751, 737, 737, 737, 737, 737, 737, 752, 752, 160, 160, 753, 753, 754, 754, 755, 755, 756, 757, 758, 759, 758, 759, 758, 759, 758, 759, 758, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 758, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 758, 759, 758, 759, 758, 759, 759, 759, 759, 759, 759, 758, 759, 759, 759, 759, 759, 759, 758, 758, 759, 759, 759, 759, 760, 761, 761, 761, 762, 160, 160, 160, 160, 160, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 160, 160, 160, 160, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 160, 764, 764, 765, 765, 765, 765, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 160, 160, 160, 160, 160, 160, 160, 160, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 769, 769, 160, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 769, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 769, 769, 767, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 769, 769, 769, 769, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 160, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 769, 769, 769, 769, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 769, 769, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 769, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 160, 160, 160, 160, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 773, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 160, 160, 160, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 774, 774, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 774, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 774, 730, 730, 730, 774, 730, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 776, 776, 776, 776, 160, 160, 160, 160, 160, 777, 777, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 323, 323, 778, 323, 323, 323, 779, 323, 323, 323, 323, 780, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 464, 464, 780, 780, 464, 418, 418, 418, 418, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 781, 781, 304, 304, 160, 160, 160, 160, 160, 160, 160, 160, 782, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 782, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 782, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 782, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 782, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 782, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 782, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 782, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 784, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 160, 160, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 160, 160, 160, 160, 160, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 160, 160, 160, 160, 160, 160, 787, 788, 789, 790, 791, 792, 792, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 793, 794, 795, 796, 797, 160, 160, 160, 160, 160, 798, 799, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 633, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 205, 231, 231, 231, 231, 231, 205, 231, 205, 231, 231, 205, 231, 231, 205, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 598, 740, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 235, 235, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 235, 235, 235, 235, 235, 235, 235, 235, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 801, 239, 235, 235, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 802, 803, 803, 802, 802, 804, 804, 805, 806, 807, 160, 160, 160, 160, 160, 160, 139, 139, 139, 139, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 734, 745, 745, 808, 808, 598, 740, 598, 740, 598, 740, 598, 740, 598, 740, 598, 740, 598, 740, 598, 740, 750, 750, 809, 810, 734, 734, 734, 734, 808, 808, 808, 811, 734, 812, 160, 760, 813, 9, 9, 745, 16, 17, 16, 17, 16, 17, 814, 734, 734, 815, 816, 817, 818, 819, 160, 734, 12, 13, 734, 160, 160, 160, 160, 243, 243, 243, 286, 243, 235, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 235, 235, 820, 160, 9, 734, 814, 12, 13, 734, 734, 16, 17, 734, 815, 811, 816, 812, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 813, 760, 832, 819, 833, 9, 734, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 39, 734, 41, 835, 808, 835, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 39, 819, 41, 819, 698, 699, 733, 16, 17, 732, 760, 837, 758, 758, 758, 758, 758, 758, 758, 758, 758, 761, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 761, 761, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 160, 160, 160, 90, 90, 90, 90, 90, 90, 160, 160, 90, 90, 90, 90, 90, 90, 160, 160, 90, 90, 90, 90, 90, 90, 160, 160, 90, 90, 90, 160, 160, 160, 48, 12, 819, 835, 735, 12, 12, 160, 49, 36, 36, 36, 36, 49, 49, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 838, 838, 838, 839, 49, 840, 840, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 160, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 160, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 160, 308, 308, 160, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 160, 160, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 160, 160, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 160, 160, 160, 160, 160, 841, 842, 843, 160, 160, 160, 160, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 160, 160, 160, 845, 845, 845, 845, 845, 845, 845, 845, 845, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 724, 724, 724, 724, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 724, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 160, 848, 848, 848, 848, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 849, 847, 847, 847, 847, 847, 847, 847, 847, 849, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 160, 841, 323, 323, 323, 323, 160, 160, 160, 160, 323, 323, 323, 323, 323, 323, 323, 323, 465, 850, 850, 850, 850, 850, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 852, 852, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 854, 854, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 160, 160, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 855, 855, 855, 855, 855, 855, 205, 205, 855, 205, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 205, 855, 855, 205, 205, 205, 855, 205, 205, 855, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 857, 857, 857, 857, 205, 205, 205, 205, 205, 858, 859, 780, 780, 780, 205, 780, 780, 205, 205, 205, 205, 205, 780, 152, 780, 153, 859, 859, 859, 859, 205, 859, 859, 859, 205, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 205, 205, 205, 205, 153, 641, 152, 205, 205, 205, 205, 779, 860, 861, 862, 863, 864, 864, 864, 864, 205, 205, 205, 205, 205, 205, 205, 205, 865, 865, 865, 865, 865, 865, 865, 865, 866, 205, 205, 205, 205, 205, 205, 205, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 481, 481, 481, 481, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 160, 160, 160, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 869, 870, 871, 871, 871, 868, 868, 868, 872, 869, 869, 869, 869, 869, 873, 873, 873, 873, 873, 873, 873, 873, 874, 874, 874, 874, 874, 874, 874, 874, 868, 868, 875, 875, 875, 875, 875, 874, 874, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 875, 875, 875, 875, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 153, 153, 153, 418, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 160, 160, 160, 160, 160, 160, 160, 160, 160, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 878, 878, 878, 878, 878, 878, 878, 160, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 877, 160, 877, 877, 160, 160, 877, 160, 160, 877, 877, 160, 160, 877, 877, 877, 877, 160, 877, 877, 877, 877, 877, 877, 877, 877, 878, 878, 878, 878, 160, 878, 160, 878, 878, 878, 878, 102, 878, 878, 160, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 877, 877, 160, 877, 877, 877, 877, 160, 160, 877, 877, 877, 877, 877, 877, 877, 877, 160, 877, 877, 877, 877, 877, 877, 877, 160, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 877, 877, 160, 877, 877, 877, 877, 160, 877, 877, 877, 877, 877, 160, 877, 160, 160, 160, 877, 877, 877, 877, 877, 877, 877, 160, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 103, 103, 160, 160, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 879, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 879, 878, 878, 878, 878, 878, 878, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 879, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 879, 878, 878, 878, 878, 878, 878, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 879, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 879, 878, 878, 878, 878, 878, 878, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 879, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 879, 878, 878, 878, 878, 878, 878, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 879, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 879, 878, 878, 878, 878, 878, 878, 880, 723, 160, 160, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 891, 891, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 873, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 891, 891, }; #define GET_PROP_INDEX(ucs4) \ (ucs4 < 0x11000 \ ? (uc_property_trie[uc_property_trie[ucs4>>5] + (ucs4 & 0x1f)]) \ : (uc_property_trie[uc_property_trie[((ucs4 - 0x11000)>>8) + 0x880] + (ucs4 & 0xff)])) #define GET_PROP_INDEX_UCS2(ucs2) \ (uc_property_trie[uc_property_trie[ucs2>>5] + (ucs2 & 0x1f)]) static const Properties uc_properties[] = { { 10, 19, 18, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0 }, { 10, 15, 8, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3 }, { 10, 30, 7, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1 }, { 10, 31, 8, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3 }, { 10, 31, 9, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3 }, { 10, 29, 7, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1 }, { 10, 19, 7, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0 }, { 10, 19, 8, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0 }, { 7, 28, 9, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3 }, { 26, 5, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }, { 26, 2, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10 }, { 26, 11, 4, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 28, 8, 4, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 9, 4, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 2, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 10 }, { 22, 0, 10, 0, 0, -1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10 }, { 23, 1, 10, 0, 0, -1, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 10 }, { 27, 8, 3, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 7, 6, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0 }, { 21, 14, 3, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 7, 6, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8 }, { 26, 6, 6, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 4, 10, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 26, 7, 6, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0 }, { 26, 7, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0 }, { 27, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 32, 0, 0, 32, 0, 3, 5 }, { 22, 0, 10, 0, 0, -1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 10 }, { 26, 8, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 23, 1, 10, 0, 0, -1, 1, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 10 }, { 29, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 20, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -32, -32, 0, 0, 3, 4 }, { 27, 15, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 10, 11, 7, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1 }, { 7, 3, 6, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 28, 9, 4, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 30, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4 }, { 24, 2, 10, 0, 0, -1, 1, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 10 }, { 11, 15, 18, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 30, 9, 4, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 27, 8, 4, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 2, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 2, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 29, 16, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 743, 743, 775, 0, 3, 4 }, { 26, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0 }, { 6, 11, 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 25, 2, 10, 0, 0, -1, 1, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 10 }, { 6, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 3, 0, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 121, 121, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 1, 0, 0, 0, 0, 6, 0, 0, 0, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -232, -232, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 85, 85, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, -121, 0, 0, -121, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -300, -300, -268, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 195, 195, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 210, 0, 0, 210, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 206, 0, 0, 206, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 205, 0, 0, 205, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 79, 0, 0, 79, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 202, 0, 0, 202, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 203, 0, 0, 203, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 207, 0, 0, 207, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 97, 97, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 211, 0, 0, 211, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 209, 0, 0, 209, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 163, 163, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 213, 0, 0, 213, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 130, 130, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 214, 0, 0, 214, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 218, 0, 0, 218, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 217, 0, 0, 217, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 219, 0, 0, 219, 0, 3, 5 }, { 19, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 56, 56, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 2, 0, 1, 2, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 1, -1, 0, 1, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -2, -1, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -79, -79, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 96, 96, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, -97, 0, 0, -97, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, -56, 0, 0, -56, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 6, 0, 0, 0, 0, 0, -130, 0, 0, -130, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 10795, 0, 0, 10795, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, -163, 0, 0, -163, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 10792, 0, 0, 10792, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, -195, 0, 0, -195, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 69, 0, 0, 69, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 71, 0, 0, 71, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -210, -210, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -206, -206, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -205, -205, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -202, -202, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -203, -203, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -207, -207, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -209, -209, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -211, -211, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 10743, 10743, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -213, -213, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -214, -214, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 10727, 10727, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -218, -218, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -69, -69, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -217, -217, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -71, -71, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -219, -219, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4 }, { 18, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4 }, { 18, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 18, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 18, 16, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 29, 11, 10, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 18, 11, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 29, 11, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 19, 17, 230, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 232, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 220, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 216, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 202, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 1, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 240, 0, -1, 1, 0, 0, 0, 0, 0, 0, 84, 84, 116, 4, 1, 0 }, { 1, 19, 17, 230, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 220, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 3, 17, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 230, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 220, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 232, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 220, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 230, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 3, 17, 233, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 3, 17, 234, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 3, 17, 233, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 3, 17, 234, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 3, 17, 233, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 230, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 14, 11, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 130, 130, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 38, 0, 0, 38, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 37, 0, 0, 37, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 64, 0, 0, 64, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 63, 0, 0, 63, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 88, 88, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -38, -38, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -37, -37, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 92, 92, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -31, -31, 1, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -64, -64, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -63, -63, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -62, -62, -30, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -57, -57, -25, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -47, -47, -15, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -54, -54, -22, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 6, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -86, -86, -54, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -80, -80, -48, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 5, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 5, 0, 0, 0, 0, 0, 0, -96, -96, -64, 0, 3, 4 }, { 27, 11, 10, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 11, 0, 0, 0, -1, 7, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 7, 0, 0, 0, 0, 0, -7, 0, 0, -7, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, -130, 0, 0, -130, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 80, 0, 0, 80, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 80, 0, 0, 80, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, -80, -80, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -80, -80, 0, 0, 3, 4 }, { 30, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 3, 19, 17, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 15, 0, 0, 15, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, -15, -15, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 48, 0, 0, 48, 0, 3, 5 }, { 26, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -48, -48, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 52, 49, 0, 0, 3, 4 }, { 26, 7, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 9 }, { 21, 15, 10, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 14, 11, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 19, 17, 220, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 230, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 222, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 228, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 10, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 11, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 12, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 13, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 14, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 15, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 16, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 17, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 18, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 19, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 19, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 20, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 21, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 22, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 26, 15, 1, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 19, 17, 23, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 26, 11, 1, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 19, 17, 24, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 25, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 26, 5, 1, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 19, 17, 18, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 19, 11, 1, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 26, 11, 1, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 26, 11, 1, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0 }, { 11, 11, 13, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 14, 11, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 28, 9, 13, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 5, 6, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 7, 13, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0 }, { 30, 11, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 5, 13, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 5, 13, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 5, 13, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }, { 19, 11, 13, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 19, 11, 13, 0, 2, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 19, 11, 13, 0, 1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 18, 11, 13, 0, 3, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 1, 19, 17, 27, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 28, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 29, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 30, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 31, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 32, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 33, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 34, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 4, 10, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 5, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 5, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 5, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 5, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 5, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 5, 0, 0, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 5, 0, 0, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 5, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 5, 0, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 26, 5, 4, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 10, 5, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 26, 11, 13, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 19, 11, 13, 0, 1, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 1, 19, 17, 35, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 19, 11, 13, 0, 1, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 19, 11, 13, 0, 2, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 11, 11, 13, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 3, 19, 17, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 18, 11, 13, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 19, 11, 13, 0, 2, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 30, 11, 13, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 19, 11, 13, 0, 1, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 26, 11, 13, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }, { 26, 11, 13, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 11, 11, 18, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 1, 19, 17, 36, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 19, 11, 13, 0, 1, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 19, 11, 13, 0, 2, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 19, 11, 13, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 1, 19, 17, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 19, 11, 13, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 4, 10, 1, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 1, 0, 0, 1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 1, 0, 0, 2, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 1, 0, 0, 3, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 1, 0, 0, 4, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 1, 0, 0, 5, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 1, 0, 0, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 1, 0, 0, 7, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 1, 0, 0, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 1, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 19, 11, 1, 0, 1, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 1, 19, 17, 230, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 220, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 18, 11, 1, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 30, 11, 10, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 11, 10, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 7, 10, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0 }, { 26, 5, 10, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }, { 18, 11, 1, 0, 3, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 1, 19, 17, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 2, 19, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 19, 11, 0, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 1, 19, 17, 7, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 9, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 26, 15, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }, { 4, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 19, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 19, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 2, 19, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 6, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 19, 17, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 2, 19, 0, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 28, 8, 4, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 4, 10, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 1, 19, 17, 84, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 91, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 7, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 2, 19, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 19, 11, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 1, 19, 17, 9, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 2, 19, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 26, 11, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 19, 26, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 1, 26, 17, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 26, 17, 103, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 26, 17, 9, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 18, 26, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 1, 26, 17, 107, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 26, 15, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 26, 17, 118, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 26, 17, 122, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 19, 11, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 30, 16, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 16, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 11, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 3, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 15, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 5, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 30, 11, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 30, 5, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 4, 10, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 6, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 9, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 6, 11, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 30, 15, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 19, 17, 216, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 22, 0, 10, 0, 0, -1, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10 }, { 23, 1, 10, 0, 0, -1, 2, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 10 }, { 2, 19, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 19, 17, 129, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 130, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 132, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 2, 15, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 1, 19, 17, 9, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 30, 15, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 30, 11, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 16, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 19, 26, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 2, 26, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 1, 26, 17, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 26, 17, 7, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 26, 17, 9, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 4, 10, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 9, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 26, 15, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 7264, 0, 0, 7264, 0, 3, 5 }, { 19, 11, 0, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 18, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 19, 23, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 6 }, { 19, 24, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3, 6 }, { 19, 25, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 3, 6 }, { 30, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 15, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 11, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }, { 6, 11, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 0, 0, 0, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 0, 0, 0, 9, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 30, 11, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 7, 15, 9, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3 }, { 22, 0, 10, 0, 0, -1, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10 }, { 23, 1, 10, 0, 0, -1, 4, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 10 }, { 5, 11, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 1, 19, 17, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 9, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 26, 15, 0, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 11, 26, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 26, 4, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 18, 26, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 28, 8, 4, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 26, 17, 230, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 6, 11, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 11, 10, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 15, 10, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 15, 10, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }, { 21, 16, 10, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 7, 3, 9, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3 }, { 1, 19, 17, 228, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 2, 19, 17, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 1, 19, 17, 222, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 26, 5, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }, { 4, 10, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 2, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 3, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 4, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 5, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 19, 26, 0, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 19, 26, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 2, 26, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 4, 10, 0, 0, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 3, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 4, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 5, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 6, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 9, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 26, 26, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 2, 19, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 26, 15, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 2, 19, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 1, 19, 17, 7, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 2, 19, 0, 9, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 4, 10, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 2, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 3, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 4, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 5, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 7, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 26, 15, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }, { 26, 15, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 30, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 18, 11, 0, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4 }, { 18, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 3814, 3814, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 99, 99, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 102, 102, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 105, 105, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 108, 108, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 111, 111, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, -59, -59, -58, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, -8, 0, 0, -8, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 114, 114, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 117, 117, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 121, 121, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 125, 125, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 74, 74, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 86, 86, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 100, 100, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 128, 128, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 112, 112, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 126, 126, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 163, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 166, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 169, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 172, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 175, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 178, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 181, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 184, 8, 0, 0, 3, 4 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 163, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 166, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 169, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 172, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 175, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 178, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 181, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 184, 0, -8, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 187, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 190, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 193, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 196, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 199, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 202, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 205, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 208, 8, 0, 0, 3, 4 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 187, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 190, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 193, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 196, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 199, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 202, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 205, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 208, 0, -8, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 211, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 214, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 217, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 220, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 223, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 226, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 229, 8, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 232, 8, 0, 0, 3, 4 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 211, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 214, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 217, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 220, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 223, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 226, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 229, 0, -8, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -8, 232, 0, -8, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 247, 244, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 235, 9, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 253, 250, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 129, 129, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 284, 280, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -9, 235, 0, -9, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -7205, -7205, -7173, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 259, 256, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 238, 9, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 265, 262, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 132, 132, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 292, 288, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, -86, 0, 0, -86, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -9, 238, 0, -9, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 135, 135, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 139, 139, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 142, 142, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, -100, 0, 0, -100, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 146, 146, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 150, 150, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 153, 153, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 156, 156, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, -112, 0, 0, -112, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, -7, 0, 0, -7, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 271, 268, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, 0, 241, 9, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 277, 274, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 160, 160, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 300, 296, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, -128, 0, 0, -128, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, -126, 0, 0, -126, 0, 3, 5 }, { 17, 11, 0, 0, 0, -1, 1, 0, 1, 0, 0, 0, -9, 241, 0, -9, 0, 3, 5 }, { 7, 15, 9, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3 }, { 7, 3, 9, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3 }, { 11, 18, 18, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 11, 19, 18, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 11, 19, 18, 0, 3, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 11, 19, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 11, 19, 1, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 21, 15, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 21, 3, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 21, 17, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 21, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 24, 2, 10, 0, 0, -1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10 }, { 25, 2, 10, 0, 0, -1, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 4, 10 }, { 22, 0, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10 }, { 24, 2, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10 }, { 25, 2, 10, 0, 0, -1, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 10 }, { 26, 13, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 15, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0 }, { 8, 31, 9, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1 }, { 9, 31, 7, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1 }, { 11, 19, 11, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 11, 19, 14, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 11, 19, 16, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 11, 19, 12, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 11, 19, 15, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 7, 3, 6, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3 }, { 26, 9, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 4, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }, { 27, 7, 6, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0 }, { 26, 4, 10, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }, { 26, 4, 10, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }, { 26, 11, 10, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 11, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 20, 11, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0 }, { 26, 11, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 15, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 7, 15, 9, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3 }, { 11, 20, 18, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 11, 11, 18, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 11, 19, 18, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 6, 11, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 11, 0, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4 }, { 6, 11, 2, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 2, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 2, 0, 0, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 2, 0, 0, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 2, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 2, 0, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 3, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 28, 8, 4, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 28, 8, 4, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 28, 8, 4, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 28, 8, 4, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 3, 19, 17, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 1, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 220, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 1, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 30, 9, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 30, 8, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, -7517, 0, 0, -7517, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, -8383, 0, 0, -8383, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, -8262, 0, 0, -8262, 0, 3, 5 }, { 30, 11, 4, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 28, 0, 0, 28, 0, 3, 5 }, { 30, 11, 10, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 11, 0, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5 }, { 30, 11, 10, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, -28, -28, 0, 0, 3, 4 }, { 5, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 3, 5 }, { 5, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -16, -16, 0, 0, 3, 4 }, { 5, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 27, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 2016, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 1824, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 2104, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 2108, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, 2106, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 1, 0, 0, 0, 0, -138, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 6, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 6, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 6, 0, 0, 0, 0, -8, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 6, 0, 0, 0, 0, -7, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 2, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 30, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 26, 0, 0, 26, 0, 3, 5 }, { 30, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -26, -26, 0, 0, 3, 4 }, { 6, 11, 10, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 2, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 3, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 7, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 8, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 9, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 10, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 30, 2, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10 }, { 30, 5, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 22, 0, 10, 0, 0, -1, 6, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10 }, { 23, 1, 10, 0, 0, -1, 6, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 10 }, { 27, 11, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 8, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0 }, { 22, 0, 10, 0, 0, -1, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10 }, { 23, 1, 10, 0, 0, -1, 8, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 10 }, { 27, 11, 10, 0, 0, -1, 6, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 6, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0 }, { 22, 0, 10, 0, 0, -1, 6, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 10 }, { 23, 1, 10, 0, 0, -1, 6, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10 }, { 22, 0, 10, 0, 0, -1, 6, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 10 }, { 23, 1, 10, 0, 0, -1, 6, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 10 }, { 27, 11, 10, 0, 0, -1, 6, 0, 0, 0, 0, -1824, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 6, 0, 0, 0, 0, -2016, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 6, 0, 0, 0, 0, -2104, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 6, 0, 0, 0, 0, -2106, 0, 0, 0, 0, 0, 0, 0 }, { 27, 11, 10, 0, 0, -1, 6, 0, 0, 0, 0, -2108, 0, 0, 0, 0, 0, 0, 0 }, { 15, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 48, 0, 0, 48, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, -48, -48, 0, 0, 3, 4 }, { 15, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, -10743, 0, 0, -10743, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, -3814, 0, 0, -3814, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, -10727, 0, 0, -10727, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, -10795, -10795, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, -10792, -10792, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4 }, { 6, 11, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, -7264, -7264, 0, 0, 3, 4 }, { 26, 2, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10 }, { 24, 2, 10, 0, 0, -1, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10 }, { 25, 2, 10, 0, 0, -1, 8, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 10 }, { 21, 15, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 30, 12, 10, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 7, 12, 9, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3 }, { 26, 1, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 1, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }, { 26, 12, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 30, 12, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 18, 4, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 19, 12, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 5, 12, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 21, 4, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 23, 1, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10 }, { 1, 19, 17, 218, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 228, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 222, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 224, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 21, 12, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 18, 12, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6 }, { 5, 12, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 18, 4, 0, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 19, 4, 0, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 26, 12, 10, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 19, 4, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 19, 4, 0, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 1, 19, 17, 8, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 29, 4, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0 }, { 18, 4, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 19, 12, 0, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 21, 4, 10, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0 }, { 19, 4, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6 }, { 19, 12, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6 }, { 26, 4, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 18, 4, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6 }, { 19, 12, 0, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6 }, { 19, 12, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 30, 12, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 12, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 19, 12, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 30, 12, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 19, 4, 0, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6 }, { 30, 12, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 12, 10, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 19, 12, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 19, 12, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 18, 4, 0, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 30, 12, 10, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 29, 11, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 18, 11, 10, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 29, 11, 10, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 2, 19, 17, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 19, 17, 9, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 26, 16, 10, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 19, 21, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 3, 6 }, { 19, 22, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 3, 6 }, { 12, 27, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 13, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 19, 12, 0, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 12, 9, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 18, 15, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 24, 21, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 31, 27, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 39, 35, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 46, 43, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 58, 55, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 64, 61, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 70, 67, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 76, 73, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 1, 0, 1, 1, 0, 0, 0, 82, 79, 0, 0, 3, 4 }, { 19, 11, 1, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 1, 19, 17, 26, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 14, 11, 0, 0, 0, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 28, 9, 13, 0, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 7, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0 }, { 26, 1, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 5, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 22, 0, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10 }, { 23, 1, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10 }, { 26, 13, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 20, 12, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0 }, { 22, 0, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10 }, { 23, 1, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10 }, { 26, 1, 6, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 1, 6, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }, { 26, 4, 6, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 12, 4, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 27, 12, 3, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 21, 12, 3, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 27, 12, 10, 0, 0, -1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, { 27, 12, 10, 0, 0, -1, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0 }, { 27, 12, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 11, 20, 18, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 26, 12, 6, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 4, 12, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 4, 12, 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 4, 12, 2, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 4, 12, 2, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 4, 12, 2, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 4, 12, 2, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 4, 12, 2, 0, 0, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 4, 12, 2, 0, 0, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 4, 12, 2, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 4, 12, 2, 0, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 27, 12, 10, 0, 0, -1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0 }, { 27, 12, 10, 0, 0, -1, 1, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0 }, { 15, 12, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 32, 0, 0, 32, 0, 3, 5 }, { 29, 12, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 12, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -32, -32, 0, 0, 3, 4 }, { 19, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6 }, { 11, 19, 10, 0, 0, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 30, 11, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 14, 11, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 15, 0, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 15, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 30, 15, 0, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 0, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 30, 11, 0, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 5, 11, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 19, 11, 0, 0, 0, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 6, 11, 0, 0, 0, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 5, 11, 0, 0, 0, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 5, 11, 0, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 15, 11, 0, 0, 0, -1, 5, 0, 0, 0, 0, 0, 40, 0, 0, 40, 0, 3, 5 }, { 15, 11, 0, 0, 0, -1, 7, 0, 0, 0, 0, 0, 40, 0, 0, 40, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 5, 0, 0, 0, 0, 0, 0, -40, -40, 0, 0, 3, 4 }, { 16, 11, 0, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, -40, -40, 0, 0, 3, 4 }, { 19, 11, 1, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 19, 11, 1, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 6, 11, 1, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 15, 10, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 19, 11, 1, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 6, 11, 1, 0, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 1, 0, 0, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 1, 0, 0, 3, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 1, 0, 0, 4, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 11, 1, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 15, 1, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 26, 11, 1, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 5, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6 }, { 30, 11, 0, 0, 0, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 2, 19, 0, 216, 0, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 2, 19, 0, 216, 0, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 19, 17, 1, 0, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 2, 19, 0, 226, 0, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 11, 19, 18, 0, 0, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2 }, { 1, 19, 17, 220, 0, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 1, 19, 17, 230, 0, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0 }, { 6, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 11, 0, 0, 0, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5 }, { 16, 11, 0, 0, 0, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4 }, { 27, 11, 0, 0, 0, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 11, 0, 0, 0, -1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5 }, { 4, 10, 2, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 6, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 7, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 8, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 4, 10, 2, 0, 0, 9, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7 }, { 14, 11, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 19, 12, 0, 0, 0, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6 }, { 13, 11, 0, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static inline const Properties *qGetProp(ushort ucs2) { int index = GET_PROP_INDEX_UCS2(ucs2); return uc_properties + index; } #define MAX_BUFF_SIZE (long)1024*1024 /* Block sizes */ #define HEADER_SIZE 768 #define BIG_BLOCK_SIZE 512 #define PROPERTY_SET_STORAGE_SIZE 128 #define SMALL_BLOCK_SIZE 64 /* PPT Data*/ #define PPT_RECORD_HEADER 8 #define PPT_TEXTCHARATOM 0x0FA0 #define PPT_TEXTBYTEATOM 0x0FA8 /* Special block numbers */ #define END_OF_CHAIN 0xfffffffeUL #define UNUSED_BLOCK 0xffffffffUL /* Switch size of Depot use */ #define MIN_SIZE_FOR_BBD_USE 0x1000 #define STREQ(x,y) (*(x) == *(y) && strcmp(x,y) == 0) #define STRNEQ(x,y,n) (*(x) == *(y) && strncmp(x,y,n) == 0) #define BIT(x) (1UL << (x)) static ULONG *aulSmallBlockList = NULL; static size_t tSmallBlockListLen = 0; static UCHAR **ppAnchor = NULL; static size_t tNextFree = 0; static size_t tMaxElements = 0; #define ELEMENTS_TO_ADD 30 /* Show that a PPS number or index should not be used */ #define PPS_NUMBER_INVALID 0xffffffffUL /* Macros */ /* Get macros */ #define ucGetByte(i,a) ((unsigned char)(a[i])) #define usGetWord(i,a) ((unsigned short)\ ((unsigned int)(a[(i)+1])<<8|\ (unsigned int)(a[i]))) #define ulGetLong(i,a) ((unsigned long)(a[i])|\ (unsigned long)(a[(i)+1])<<8|\ (unsigned long)(a[(i)+2])<<16|\ (unsigned long)(a[(i)+3])<<24) #define usGetWordBE(i,a) ((unsigned short)\ ((unsigned int)(a[i])<<8|\ (unsigned int)(a[(i)+1]))) #define ulGetLongBE(i,a) ((unsigned long)(a[(i)+3])|\ (unsigned long)(a[(i)+2])<<8|\ (unsigned long)(a[(i)+1])<<16|\ (unsigned long)(a[i])<<24) void* xmalloc(size_t tSize) { void *pvTmp; if(tSize == 0) { tSize = 1; } pvTmp = malloc(tSize); if(pvTmp == NULL) { return NULL; } return pvTmp; } /* end of xmalloc */ void* xcalloc(size_t tNmemb, size_t tSize) { void *pvTmp; if(tNmemb == 0 || tSize == 0) { tNmemb = 1; tSize = 1; } pvTmp = calloc(tNmemb, tSize); if(pvTmp == NULL) { return NULL; } return pvTmp; } /* end of xcalloc */ void* xrealloc(void *pvArg, size_t tSize) { void *pvTmp; pvTmp = realloc(pvArg, tSize); return pvTmp; } /* end of xrealloc */ void* xfree(void *pvArg) { if(pvArg != NULL) { free(pvArg); } return NULL; } /* end of xfree */ bool bReadBytes(unsigned char *aucBytes, size_t tMemb, long lOffset, FILE *pFile) { // printf("[%s]-[%d] wana read [%d] offset[%d]\n",__FUNCTION__,__LINE__,tMemb, lOffset); if(fseek(pFile, lOffset, SEEK_SET) != 0) { return false; } if(fread(aucBytes, sizeof(unsigned char), tMemb, pFile) != tMemb) { return false; } return true; } /* end of bReadBytes */ #define SIZE_RATIO (BIG_BLOCK_SIZE/SMALL_BLOCK_SIZE) ULONG ulDepotOffset(ULONG ulIndex, size_t tBlockSize) { ULONG ulTmp; size_t tTmp; switch(tBlockSize) { case BIG_BLOCK_SIZE: return (ulIndex + 1) * BIG_BLOCK_SIZE; case SMALL_BLOCK_SIZE: tTmp = (size_t)(ulIndex / SIZE_RATIO); ulTmp = ulIndex % SIZE_RATIO; if(aulSmallBlockList == NULL || tTmp >= tSmallBlockListLen) { return 0; } return ((aulSmallBlockList[tTmp] + 1) * SIZE_RATIO + ulTmp) * SMALL_BLOCK_SIZE; default: return 0; } } /* end of ulDepotOffset */ bool bReadBuffer(FILE *pFile, ULONG ulStartBlock, const ULONG *aulBlockDepot, size_t tBlockDepotLen, size_t tBlockSize, UCHAR *aucBuffer, ULONG ulOffset, size_t tToRead) { ULONG ulBegin, ulIndex; size_t tLen; for(ulIndex = ulStartBlock;ulIndex != END_OF_CHAIN && tToRead != 0;ulIndex = aulBlockDepot[ulIndex]) { if(ulIndex >= (ULONG)tBlockDepotLen) { if(tBlockSize >= BIG_BLOCK_SIZE) { qWarning() << "The Big Block Depot is damaged"; } else { qWarning() << "The Small Block Depot is damaged"; } return (tToRead == 0); } if(ulOffset >= (ULONG)tBlockSize) { ulOffset -= tBlockSize; continue; } ulBegin = ulDepotOffset(ulIndex, tBlockSize) + ulOffset; tLen = min(tBlockSize - (size_t)ulOffset, tToRead); ulOffset = 0; if(!bReadBytes(aucBuffer, tLen, ulBegin, pFile)) { return false; } aucBuffer += tLen; tToRead -= tLen; } return (tToRead == 0); } /* end of bReadBuffer */ static ULONG ulReadLong(FILE *pFile, ULONG ulOffset) { UCHAR aucBytes[4]; if(!bReadBytes(aucBytes, 4, ulOffset, pFile)) { return ULONG_MAX; } return ulGetLong(0, aucBytes); } /* end of ulReadLong */ static size_t tReadBlockIndices(FILE *pFile, ULONG *aulBlockDepot, size_t tMaxRec, ULONG ulOffset) { size_t tDone; int iIndex; UCHAR aucBytes[BIG_BLOCK_SIZE]; /* Read a big block with BBD or SBD indices */ if(!bReadBytes(aucBytes, BIG_BLOCK_SIZE, ulOffset, pFile)) { return 0; } /* Split the big block into indices, an index is four bytes */ tDone = min(tMaxRec, (size_t)BIG_BLOCK_SIZE / 4); for(iIndex = 0; iIndex < (int)tDone; iIndex++) { aulBlockDepot[iIndex] = ulGetLong(4 * iIndex, aucBytes); } return tDone; } /* end of tReadBlockIndices */ static bool bGetSBD(FILE *pFile, const ULONG *aulDepot, size_t tDepotLen, ULONG *aulSBD, size_t tSBDLen) { ULONG ulBegin; size_t tToGo, tDone; int iIndex; tToGo = tSBDLen; for(iIndex = 0; iIndex < (int)tDepotLen && tToGo != 0; iIndex++) { ulBegin = (aulDepot[iIndex] + 1) * BIG_BLOCK_SIZE; tDone = tReadBlockIndices(pFile, aulSBD, tToGo, ulBegin); if(tDone == 0) { return false; } aulSBD += tDone; tToGo -= tDone; } return tToGo == 0; } /* end of bGetSBD */ static void vName2String(char *szName, const UCHAR *aucBytes, size_t tNameSize) { char *pcChar; size_t tIndex; if(tNameSize < 2) { szName[0] = '\0'; return; } for(tIndex = 0, pcChar = szName; tIndex < 2 * tNameSize; tIndex += 2, pcChar++) { *pcChar = (char)aucBytes[tIndex]; } szName[tNameSize - 1] = '\0'; } /* end of vName2String */ void vAdd2PropModList(const UCHAR *aucPropMod) { size_t tSize, tLen; if(tNextFree >= tMaxElements) { tMaxElements += ELEMENTS_TO_ADD; tSize = tMaxElements * sizeof(UCHAR **); ppAnchor = (UCHAR**)xrealloc(ppAnchor, tSize); } tLen = 2 + (size_t)usGetWord(0, aucPropMod); ppAnchor[tNextFree] = (UCHAR*)xmalloc(tLen); memcpy(ppAnchor[tNextFree], aucPropMod, tLen); tNextFree++; } /* end of vAdd2PropModList */ static void vComputePPSlevels(ppsEntryType *atPPSlist, ppsEntryType *pNode, int iLevel, int iRecursionLevel) { if(iRecursionLevel > 25) { /* This removes the possibility of an infinite recursion */ return; } if(pNode->iLevel <= iLevel) { /* Avoid entering a loop */ return; } pNode->iLevel = iLevel; if(pNode->ulDir != PPS_NUMBER_INVALID) { vComputePPSlevels(atPPSlist, &atPPSlist[pNode->ulDir], iLevel + 1, iRecursionLevel + 1); } if(pNode->ulNext != PPS_NUMBER_INVALID) { vComputePPSlevels(atPPSlist, &atPPSlist[pNode->ulNext], iLevel, iRecursionLevel + 1); } if(pNode->ulPrevious != PPS_NUMBER_INVALID) { vComputePPSlevels(atPPSlist, &atPPSlist[pNode->ulPrevious], iLevel, iRecursionLevel + 1); } } /* end of vComputePPSlevels */ bool KBinaryParser::bGetPPS(FILE *pFile, const ULONG *aulRootList, size_t tRootListLen, ppsInfoType *pPPS) { ppsEntryType *atPPSlist; ULONG ulBegin, ulOffset, ulTmp; size_t tNbrOfPPS, tNameSize; int iIndex, iStartBlock, iRootIndex; bool bTypeFind = false; UCHAR aucBytes[PROPERTY_SET_STORAGE_SIZE]; (void)memset(pPPS, 0, sizeof(*pPPS)); /* Read and store all the Property Set Storage entries */ tNbrOfPPS = tRootListLen * BIG_BLOCK_SIZE / PROPERTY_SET_STORAGE_SIZE; atPPSlist = (ppsEntryType*)xcalloc(tNbrOfPPS, sizeof(ppsEntryType)); iRootIndex = 0; for(iIndex = 0; iIndex < (int)tNbrOfPPS; iIndex++) { ulTmp = (ULONG)iIndex * PROPERTY_SET_STORAGE_SIZE; iStartBlock = (int)(ulTmp / BIG_BLOCK_SIZE); ulOffset = ulTmp % BIG_BLOCK_SIZE; ulBegin = (aulRootList[iStartBlock] + 1) * BIG_BLOCK_SIZE + ulOffset; if(!bReadBytes(aucBytes, PROPERTY_SET_STORAGE_SIZE, ulBegin, pFile)) { atPPSlist = (ppsEntryType*)xfree(atPPSlist); return false; } tNameSize = (size_t)usGetWord(0x40, aucBytes); tNameSize = (tNameSize + 1) / 2; vName2String(atPPSlist[iIndex].szName, aucBytes, tNameSize); atPPSlist[iIndex].ucType = ucGetByte(0x42, aucBytes); if(atPPSlist[iIndex].ucType == 5) { iRootIndex = iIndex; } ULONG ulprev = ulGetLong(0x44, aucBytes); ULONG ulnxt = ulGetLong(0x48, aucBytes); ULONG uldir = ulGetLong(0x4c, aucBytes); ULONG ulsb = ulGetLong(0x74, aucBytes); // 116 ULONG ulsize = ulGetLong(0x78, aucBytes); // 120 atPPSlist[iIndex].ulPrevious = ulprev; atPPSlist[iIndex].ulNext = ulnxt; atPPSlist[iIndex].ulDir = uldir; atPPSlist[iIndex].ulSB = ulsb; atPPSlist[iIndex].ulSize = ulsize; atPPSlist[iIndex].iLevel = INT_MAX; if((atPPSlist[iIndex].ulPrevious >= (ULONG)tNbrOfPPS && atPPSlist[iIndex].ulPrevious != PPS_NUMBER_INVALID) || (atPPSlist[iIndex].ulNext >= (ULONG)tNbrOfPPS && atPPSlist[iIndex].ulNext != PPS_NUMBER_INVALID) || (atPPSlist[iIndex].ulDir >= (ULONG)tNbrOfPPS && atPPSlist[iIndex].ulDir != PPS_NUMBER_INVALID)) { atPPSlist = (ppsEntryType*)xfree(atPPSlist); return false; } } /* Add level information to each entry */ vComputePPSlevels(atPPSlist, &atPPSlist[iRootIndex], 0, 0); for(iIndex = 0; iIndex < (int)tNbrOfPPS; iIndex++) { if(atPPSlist[iIndex].szName[0] == '\0' || atPPSlist[iIndex].ulSize == 0) { /* This entry can be ignored */ continue; } /*if (m_strFileName.endsWith(".wps") && pPPS->tWordDocument.ulSize == 0 && STREQ(atPPSlist[iIndex].szName, "Root Entry")) { pPPS->tWordDocument.ulSB = 0;//atPPSlist[iIndex].ulSB; pPPS->tWordDocument.ulSize = atPPSlist[iIndex].ulSize; pPPS->type = Word; bTypeFind = true; } else */if(pPPS->tWordDocument.ulSize == 0 && STREQ(atPPSlist[iIndex].szName, "WordDocument")) { pPPS->tWordDocument.ulSB = atPPSlist[iIndex].ulSB; pPPS->tWordDocument.ulSize = atPPSlist[iIndex].ulSize; pPPS->type = Word; bTypeFind = true; } else if(pPPS->tData.ulSize == 0 && STREQ(atPPSlist[iIndex].szName, "Data")) { pPPS->tData.ulSB = atPPSlist[iIndex].ulSB; pPPS->tData.ulSize = atPPSlist[iIndex].ulSize; } else if(pPPS->t0Table.ulSize == 0 && STREQ(atPPSlist[iIndex].szName, "0Table")) { pPPS->t0Table.ulSB = atPPSlist[iIndex].ulSB; pPPS->t0Table.ulSize = atPPSlist[iIndex].ulSize; } else if(pPPS->t1Table.ulSize == 0 && STREQ(atPPSlist[iIndex].szName, "1Table")) { pPPS->t1Table.ulSB = atPPSlist[iIndex].ulSB; pPPS->t1Table.ulSize = atPPSlist[iIndex].ulSize; } else if(pPPS->tSummaryInfo.ulSize == 0 && STREQ(atPPSlist[iIndex].szName, "\005SummaryInformation")) { pPPS->tSummaryInfo.ulSB = atPPSlist[iIndex].ulSB; pPPS->tSummaryInfo.ulSize = atPPSlist[iIndex].ulSize; } else if(pPPS->tDocSummaryInfo.ulSize == 0 && STREQ(atPPSlist[iIndex].szName, "\005DocumentSummaryInformation")) { pPPS->tDocSummaryInfo.ulSB = atPPSlist[iIndex].ulSB; pPPS->tDocSummaryInfo.ulSize = atPPSlist[iIndex].ulSize; } else if(pPPS->tWorkBook.ulSize == 0 && (STREQ(atPPSlist[iIndex].szName, "Book") || STREQ(atPPSlist[iIndex].szName, "Workbook"))) { pPPS->tWorkBook.ulSB = atPPSlist[iIndex].ulSB; pPPS->tWorkBook.ulSize = atPPSlist[iIndex].ulSize; pPPS->type = Excel; bTypeFind = true; } else if(pPPS->tPPTDocument.ulSize == 0 && STREQ(atPPSlist[iIndex].szName, "PowerPoint Document")) { pPPS->tPPTDocument.ulSB = atPPSlist[iIndex].ulSB; pPPS->tPPTDocument.ulSize = atPPSlist[iIndex].ulSize; pPPS->type = Ppt; bTypeFind = true; } else if(pPPS->tCurrentUser.ulSize == 0 && STREQ(atPPSlist[iIndex].szName, "Current User")) { pPPS->tCurrentUser.ulSB = atPPSlist[iIndex].ulSB; pPPS->tCurrentUser.ulSize = atPPSlist[iIndex].ulSize; } } /* Free the space for the Property Set Storage entries */ atPPSlist = (ppsEntryType*)xfree(atPPSlist); return bTypeFind; }/* end of bGetPPS */ int KBinaryParser::readData(rdPara &readParam, uchar *aucBuffer, ulong ulOffset, size_t tToRead) { /* Read the headerblock */ if(!bReadBuffer(readParam.pFile, readParam.ulStBlk, readParam.ulBBd, readParam.tBBdLen, readParam.usBlkSize, aucBuffer, ulOffset, tToRead)) return -1; return 0; } bool bCreateSmallBlockList(ULONG ulStartblock, const ULONG *aulBBD, size_t tBBDLen) { ULONG ulTmp; size_t tSize; int iIndex; /* Find the length of the small block list */ for(tSmallBlockListLen = 0, ulTmp = ulStartblock; tSmallBlockListLen < tBBDLen && ulTmp != END_OF_CHAIN; tSmallBlockListLen++, ulTmp = aulBBD[ulTmp]) { if(ulTmp >= (ULONG)tBBDLen) { } } if(tSmallBlockListLen == 0) { /* There is no small block list */ return true; } /* Create the small block list */ tSize = tSmallBlockListLen * sizeof(ULONG); xfree(aulSmallBlockList); aulSmallBlockList = NULL; aulSmallBlockList = (ULONG*)xmalloc(tSize); for(iIndex = 0, ulTmp = ulStartblock; iIndex < (int)tBBDLen && ulTmp != END_OF_CHAIN; iIndex++, ulTmp = aulBBD[ulTmp]) { if(ulTmp >= (ULONG)tBBDLen) { return false; } aulSmallBlockList[iIndex] = ulTmp; } return true; } /* end of bCreateSmallBlockList */ static void vGetBbdList(FILE *pFile, int iNbr, ULONG *aulBbdList, ULONG ulOffset) { int iIndex; for(iIndex = 0; iIndex < iNbr; iIndex++) { aulBbdList[iIndex] = ulReadLong(pFile, ulOffset + 4 * (ULONG)iIndex); } } /* end of vGetBbdList */ static bool bGetBBD(FILE *pFile, const ULONG *aulDepot, size_t tDepotLen, ULONG *aulBBD, size_t tBBDLen) { ULONG ulBegin; size_t tToGo, tDone; int iIndex; tToGo = tBBDLen; for(iIndex = 0; iIndex < (int)tDepotLen && tToGo != 0; iIndex++) { ulBegin = (aulDepot[iIndex] + 1) * BIG_BLOCK_SIZE; tDone = tReadBlockIndices(pFile, aulBBD, tToGo, ulBegin); if(tDone == 0) { return false; } aulBBD += tDone; tToGo -= tDone; } return tToGo == 0; } /* end of bGetBBD */ #define REHASH(a) \ if (sl_minus_1 < (int)sizeof(int) * CHAR_BIT) \ hashHaystack -= (a) << sl_minus_1; \ hashHaystack <<= 1 static inline uint foldCase(const ushort *ch, const ushort *start) { uint c = *ch; if(QChar(c).isLowSurrogate() && ch > start && QChar(*(ch - 1)).isHighSurrogate()) c = QChar::surrogateToUcs4(*(ch - 1), c); return *ch + qGetProp(c)->caseFoldDiff; } static inline uint foldCase(uint ch, uint &last) { uint c = ch; if(QChar(c).isLowSurrogate() && QChar(last).isHighSurrogate()) c = QChar::surrogateToUcs4(last, c); last = ch; return ch + qGetProp(c)->caseFoldDiff; } static inline ushort foldCase(ushort ch) { return ch + qGetProp(ch)->caseFoldDiff; } static int ucstricmp(const ushort *a, const ushort *ae, const ushort *b, const ushort *be) { if(a == b) return (ae - be); if(a == 0) return 1; if(b == 0) return -1; const ushort *e = ae; if(be - b < ae - a) e = a + (be - b); uint alast = 0; uint blast = 0; while(a < e) { qDebug() << hex << alast << blast; qDebug() << hex << "*a=" << *a << "alast=" << alast << "folded=" << foldCase(*a, alast); qDebug() << hex << "*b=" << *b << "blast=" << blast << "folded=" << foldCase(*b, blast); int diff = foldCase(*a, alast) - foldCase(*b, blast); if((diff)) return diff; ++a; ++b; } if(a == ae) { if(b == be) return 0; return -1; } return 1; } static int ucstrnicmp(const ushort *a, const ushort *b, int l) { return ucstricmp(a, a + l, b, b + l); } static int ucstrncmp(const QChar *a, const QChar *b, int l) { while(l-- && *a == *b) a++, b++; if(l == -1) return 0; return a->unicode() - b->unicode(); } inline uint _Ucs2ToUcs4(ushort lead, ushort trail) { unsigned int ucs4 = (trail - 0xDC00); //low 10 bit ucs4 |= ((lead - 0xD800)) << 10; //high 10 bit return ucs4 + 0x10000; } bool KBinaryParser::read8DocText(FILE *pFile, const ppsInfoType *pPPS, const ULONG *aulBBD, size_t tBBDLen, const ULONG *aulSBD, size_t tSBDLen, const UCHAR *aucHeader, QString &content) { const ULONG *aulBlockDepot; ULONG ulTextOffset, ulBeginTextInfo; ULONG ulTotLength, ulLen; ULONG ulEncryptInfo; long lIndex, lPieces, lOff; size_t tTextInfoLen, tBlockDepotLen, tBlockSize; int iType, iLen; bool bUsesUnicode; USHORT usPropMod; ulBeginTextInfo = ulGetLong(0x1a2, aucHeader); /* fcClx */ tTextInfoLen = (size_t)ulGetLong(0x1a6, aucHeader); /* lcbClx */ ulEncryptInfo = ulGetLong(0x0a, aucHeader); if(ulEncryptInfo & BIT(8)) { qDebug() << "Encrypt file:" << m_strFileName << (size_t)ulEncryptInfo; return false; } if(pPPS->tTable.ulSize == 0) return false; if(pPPS->tTable.ulSize < MIN_SIZE_FOR_BBD_USE) { /* Use the Small Block Depot */ aulBlockDepot = aulSBD; tBlockDepotLen = tSBDLen; tBlockSize = SMALL_BLOCK_SIZE; } else { /* Use the Big Block Depot */ aulBlockDepot = aulBBD; tBlockDepotLen = tBBDLen; tBlockSize = BIG_BLOCK_SIZE; } UCHAR aucBuffer[tTextInfoLen]; if(!bReadBuffer(pFile, pPPS->tTable.ulSB, aulBlockDepot, tBlockDepotLen, tBlockSize, aucBuffer, ulBeginTextInfo, tTextInfoLen)) return false; lOff = 0; while(lOff < (long)tTextInfoLen) { iType = (int)ucGetByte(lOff, aucBuffer); lOff++; if(iType == 0) { lOff++; continue; } if(iType == 1) { iLen = (int)usGetWord(lOff, aucBuffer); vAdd2PropModList(aucBuffer + lOff); lOff += (long)iLen + 2; continue; } if(iType != 2) return false; /* Type 2 */ ulLen = ulGetLong(lOff, aucBuffer); if(ulLen < 4) return false; lOff += 4; lPieces = (long)((ulLen - 4) / 12); for(lIndex = 0; lIndex < lPieces; lIndex++) { ulTextOffset = ulGetLong(lOff + (lPieces + 1) * 4 + lIndex * 8 + 2, aucBuffer); usPropMod = usGetWord(lOff + (lPieces + 1) * 4 + lIndex * 8 + 6, aucBuffer); ulTotLength = ulGetLong(lOff + (lIndex + 1) * 4, aucBuffer) - ulGetLong(lOff + lIndex * 4, aucBuffer); if((ulTextOffset & BIT(30)) == 0) { bUsesUnicode = true; ulTotLength *= 2; } else { bUsesUnicode = false; ulTextOffset &= ~BIT(30); ulTextOffset /= 2; } ulong uOff = 0; UCHAR* ptaucBytes; ULONG ulFileOffset = (pPPS->tWordDocument.ulSB + 1) * BIG_BLOCK_SIZE + ulTextOffset; if(pPPS->tWordDocument.ulSize < MIN_SIZE_FOR_BBD_USE) ulFileOffset = ulDepotOffset(pPPS->tWordDocument.ulSB, SMALL_BLOCK_SIZE) + ulTextOffset; while(uOff < ulTotLength) { // ULONG iAllocSize = MAX_BUFF_SIZE; // if((ulTotLength - uOff) < MAX_BUFF_SIZE) // iAllocSize = ulTotLength - uOff; ULONG iAllocSize = (ulTotLength - uOff) < MAX_BUFF_SIZE ? (ulTotLength - uOff) : MAX_BUFF_SIZE; ptaucBytes = (UCHAR*)xmalloc(iAllocSize); if(!ptaucBytes) return false; if(!bReadBytes(ptaucBytes, iAllocSize, ulFileOffset, pFile)) return -1; ulFileOffset += iAllocSize; uOff += iAllocSize; if(bUsesUnicode) { ushort* usAucData = (ushort*)ptaucBytes; content.append(QString::fromUtf16(usAucData, iAllocSize/2).replace("\n", "").replace("\r", " "));//char num/2=short num usAucData = (ushort*)xfree((void*)usAucData); ptaucBytes = NULL; if(content.length() >= 682666) //20480000/3 break; } else { //need more format document ptaucBytes = (UCHAR*)xfree((void*)ptaucBytes); // qWarning() << "Parser error:" << m_strFileName; // content.append(QString::fromStdString((char*)ptaucBytes).replace("\r","")); // ptaucBytes = (UCHAR*)xfree((void*)ptaucBytes); } } } break; } return false; }/* end of bGet8DocumentText */ int KBinaryParser:: readSSTRecord(readDataParam &rdParam, ppsInfoType PPS_info, ulong &ulOff, ushort usPartLen, QString &content) { UCHAR chSizeData[8]; if(readData(rdParam, chSizeData, ulOff, 8) != 0) return -1; ulOff += 8; usPartLen -= 8; ulong ulSize = ulGetLong(0x04, chSizeData) + 1; ulong ulCount = 1; ulong ulNextOff = 0; while((ulCount < ulSize) && (ulOff < PPS_info.tWorkBook.ulSize)) { UCHAR chHeader[3]; if(readData(rdParam, chHeader, ulOff + ulNextOff, 3) != 0) break; ushort uscharlen = usGetWord(0x00, chHeader); ushort usCharByteLen = uscharlen; UCHAR ucFlag = ucGetByte(0x02, chHeader); ulNextOff += 3; excelRecord eRrd; if(read8BiffRecord(ucFlag, ulOff, ulNextOff, rdParam, eRrd) != 0) break; ushort ustotalLen = uscharlen + eRrd.usRichLen * 4 + eRrd.ulWLen; if(!eRrd.bUni) ustotalLen += uscharlen; UCHAR* chData = (UCHAR*)xmalloc(ustotalLen); ushort ustotalLenTmp = ustotalLen; if(ulNextOff < usPartLen && (ulNextOff + ustotalLen) >= usPartLen) { ushort usIdf = usPartLen - ulNextOff; uchar chTemp[MAX_BUFF_SIZE]; memset(chTemp, 0, MAX_BUFF_SIZE); if(readData(rdParam, chTemp, ulOff + ulNextOff, usIdf + 5) != 0) break; bool bTemp = false; ulOff += usPartLen; ulOff += 4; memcpy(&usPartLen, chTemp + usIdf + 2, 2); ushort usOthTxtLen = ustotalLen - usIdf; bool bAnotherCompare = (usOthTxtLen == 0 || (usCharByteLen - usIdf) == 0) || usCharByteLen < usIdf; ulong ulNoUse = 0; bool bUniFlg = false; if(!bAnotherCompare) { uchar chFlag; memcpy(&chFlag, chTemp + usIdf + 4, 1); if(chFlag == 0x00 || chFlag == 0x01 || chFlag == 0x05 || chFlag == 0x09 || chFlag == 0x08 || chFlag == 0x04 || chFlag == 0x0c) { bTemp = true; ulOff ++; ulong ulNextTep = 0; excelRecord eRTmp; if(read8BiffRecord(chFlag, ulOff, ulNextTep, rdParam, eRTmp) != 0) break; ulOff += ulNextTep; bUniFlg = eRTmp.bUni; ulNoUse = eRTmp.usRichLen * 4 + eRTmp.ulWLen; } } memcpy(chData, chTemp, usIdf); ulNextOff = 0; ustotalLen = usOthTxtLen + ulNoUse; if(usOthTxtLen > 0) { memset(chTemp, 0, MAX_BUFF_SIZE); if(readData(rdParam, chTemp, ulOff, usOthTxtLen) != 0) { chData = (UCHAR*)xfree((void*)chData); return -1; } memcpy(chData + usIdf, chTemp, usOthTxtLen); } if(bTemp) usPartLen --; } else { if(readData(rdParam, chData, ulOff + ulNextOff, ustotalLen) != 0) { chData = (UCHAR*)xfree((void*)chData); break; } } if(eRrd.bUni) { qDebug() << QString((const char*)chData); chData = (UCHAR*)xfree((void*)chData); qWarning() << "Unsupport excel type:" << m_strFileName; } else { ushort* usData = (ushort*)chData; content.append(QString::fromUtf16(usData, ustotalLenTmp/2).replace("\n", "").replace("\r", " ")).append(" ");//每个单元格数据之间使用空格,//char num/2=short num usData = (ushort*)xfree((void*)usData); chData = NULL; if(content.length() >= 682666) //20480000/3 break; } ulNextOff += ustotalLen; ulCount += 1; } if(ulCount >= ulSize) return -1; return 0; } int KBinaryParser::read8BiffRecord(uchar ucFlag, ulong ulOff, ulong &ulNext, readDataParam &rdParam, excelRecord &eR) { bool butf8 = true; if(ucFlag & 0x08) { uchar chiRich[2]; if(readData(rdParam, chiRich, ulOff + ulNext, 2) != 0) return -1; eR.usRichLen = usGetWord(0x00, chiRich); ulNext += 2; } if(ucFlag & 0x04) { uchar chExt[4]; if(readData(rdParam, chExt, ulOff + ulNext, 4) != 0) return -1; eR.ulWLen = ulGetLong(0x00, chExt); ulNext += 4; } if((ucFlag & 0x01)) { butf8 = false; } eR.bUni = butf8; return 0; } ULONG KBinaryParser::readPPtRecord(FILE* pFile, ppsInfoType* PPS_info, ULONG* aulBBD, size_t tBBDLen, ULONG ulPos, QString &content) { UCHAR aucHeader[PPT_RECORD_HEADER]; ULONG ulOff = ulPos; /* Read the headerblock */ if(!bReadBuffer(pFile, PPS_info->tPPTDocument.ulSB, aulBBD, tBBDLen, BIG_BLOCK_SIZE, aucHeader, ulOff, PPT_RECORD_HEADER)) return -1; ulOff += PPT_RECORD_HEADER; USHORT usVersion = usGetWord(0x00, aucHeader); USHORT usType = usGetWord(0x02, aucHeader); ULONG ulLen = ulGetLong(0x04, aucHeader); USHORT usVer = usVersion & 0xF; if(usVer == 0xF) { while(ulOff < ulLen) { ulOff = readPPtRecord(pFile, PPS_info, aulBBD, tBBDLen, ulOff, content); } } else { if(usType == PPT_TEXTBYTEATOM || usType == PPT_TEXTCHARATOM) { long llen = (long)ulLen; long llenTmp = llen; UCHAR* chData = (UCHAR*)xmalloc(llen); if(!bReadBuffer(pFile, PPS_info->tPPTDocument.ulSB, aulBBD, tBBDLen, BIG_BLOCK_SIZE, chData, ulOff, llen)) return -1; ushort* usData = (ushort*)chData; content.append(QString::fromUtf16(usData, llenTmp/2).replace("\n", "").replace("\r", " "));//char num/2=short num usData = (ushort*)xfree((void*)usData); chData = NULL; } ulOff += ulLen; if(content.length() >= 682666) //20480000/3 return ulOff; } return ulOff; } int KBinaryParser::InitDocOle(FILE* pFile, long lFilesize, QString &content) { ppsInfoType PPS_info; ULONG *aulBBD, *aulSBD; ULONG *aulRootList, *aulBbdList, *aulSbdList; ULONG ulBdbListStart, ulAdditionalBBDlist; ULONG ulRootStartblock, ulSbdStartblock, ulSBLstartblock; ULONG ulStart, ulTmp; long lMaxBlock; size_t tBBDLen, tSBDLen, tNumBbdBlocks, tRootListLen; int iIndex, iToGo; bool bSuccess; USHORT usIdent, usDocStatus; lMaxBlock = lFilesize / BIG_BLOCK_SIZE - 2; if(lMaxBlock < 1) return -1; tBBDLen = (size_t)(lMaxBlock + 1); tNumBbdBlocks = (size_t)ulReadLong(pFile, 0x2c); ulRootStartblock = ulReadLong(pFile, 0x30); ulSbdStartblock = ulReadLong(pFile, 0x3c); ulAdditionalBBDlist = ulReadLong(pFile, 0x44); ulSBLstartblock = ulReadLong(pFile, (ulRootStartblock + 1) * BIG_BLOCK_SIZE + 0x74); tSBDLen = (size_t)(ulReadLong(pFile, (ulRootStartblock + 1) * BIG_BLOCK_SIZE + 0x78) / SMALL_BLOCK_SIZE); /* All to be xcalloc-ed pointers to NULL */ aulRootList = NULL; aulSbdList = NULL; aulBbdList = NULL; aulSBD = NULL; aulBBD = NULL; aulBbdList = (ULONG*)xcalloc(tNumBbdBlocks, sizeof(ULONG)); aulBBD = (ULONG*)xcalloc(tBBDLen, sizeof(ULONG)); iToGo = (int)tNumBbdBlocks; vGetBbdList(pFile, min(iToGo, 109), aulBbdList, 0x4c); ulStart = 109; iToGo -= 109; while(ulAdditionalBBDlist != END_OF_CHAIN && iToGo > 0) { ulBdbListStart = (ulAdditionalBBDlist + 1) * BIG_BLOCK_SIZE; vGetBbdList(pFile, min(iToGo, 127), aulBbdList + ulStart, ulBdbListStart); ulAdditionalBBDlist = ulReadLong(pFile, ulBdbListStart + 4 * 127); ulStart += 127; iToGo -= 127; } if(!bGetBBD(pFile, aulBbdList, tNumBbdBlocks, aulBBD, tBBDLen)) { xfree(aulBbdList); xfree(aulBBD); return -1; } aulBbdList = (ULONG*)xfree(aulBbdList); /* Small Block Depot */ aulSbdList = (unsigned long*)xcalloc(tBBDLen, sizeof(ULONG)); aulSBD = (unsigned long*)xcalloc(tSBDLen, sizeof(ULONG)); for(iIndex = 0, ulTmp = ulSbdStartblock; iIndex < (int)tBBDLen && ulTmp != END_OF_CHAIN; iIndex++, ulTmp = aulBBD[ulTmp]) { if(ulTmp >= (ULONG)tBBDLen) { qWarning("The Big Block Depot is damaged"); aulSBD = (ULONG*)xfree(aulSBD); aulBBD = (ULONG*)xfree(aulBBD); return -1; } aulSbdList[iIndex] = ulTmp; } if(!bGetSBD(pFile, aulSbdList, tBBDLen, aulSBD, tSBDLen)) { aulSBD = (ULONG*)xfree(aulSBD); aulBBD = (ULONG*)xfree(aulBBD); return -1; } aulSbdList = (ULONG*)xfree(aulSbdList); /* Root list */ for(tRootListLen = 0, ulTmp = ulRootStartblock; tRootListLen < tBBDLen && ulTmp != END_OF_CHAIN; tRootListLen++, ulTmp = aulBBD[ulTmp]) { if(ulTmp >= (ULONG)tBBDLen) { aulSBD = (ULONG*)xfree(aulSBD); aulBBD = (ULONG*)xfree(aulBBD); return -1; } } if(tRootListLen == 0) { aulSBD = (ULONG*)xfree(aulSBD); aulBBD = (ULONG*)xfree(aulBBD); return -1; } aulRootList = (ULONG*)xcalloc(tRootListLen, sizeof(ULONG)); for(iIndex = 0, ulTmp = ulRootStartblock; iIndex < (int)tBBDLen && ulTmp != END_OF_CHAIN; iIndex++, ulTmp = aulBBD[ulTmp]) { if(ulTmp >= (ULONG)tBBDLen) { aulSBD = (ULONG*)xfree(aulSBD); aulBBD = (ULONG*)xfree(aulBBD); return -1; } aulRootList[iIndex] = ulTmp; } bSuccess = bGetPPS(pFile, aulRootList, tRootListLen, &PPS_info); aulRootList = (ULONG*)xfree(aulRootList); if(!bSuccess) { aulSBD = (ULONG*)xfree(aulSBD); aulBBD = (ULONG*)xfree(aulBBD); return -1; } rdPara readParam; readParam.pFile = pFile; readParam.tBBdLen = tBBDLen; readParam.ulBBd = aulBBD; readParam.usBlkSize = BIG_BLOCK_SIZE; if(PPS_info.type == Word) { readParam.ulStBlk = PPS_info.tWordDocument.ulSB; UCHAR aucHeader[HEADER_SIZE]; /* Small block list */ if(!bCreateSmallBlockList(ulSBLstartblock, aulBBD, tBBDLen)) { aulSBD = (ULONG*)xfree(aulSBD); readParam.ulBBd = (ULONG*)xfree(readParam.ulBBd); return -1; } if(PPS_info.tWordDocument.ulSize < MIN_SIZE_FOR_BBD_USE) { readParam.ulBBd = aulSBD; readParam.tBBdLen = tSBDLen; readParam.usBlkSize = SMALL_BLOCK_SIZE; } if(readData(readParam, aucHeader, 0, HEADER_SIZE) != 0) { aulSBD = (ULONG*)xfree(aulSBD); aulBBD = (ULONG*)xfree(aulBBD); return -1; } usIdent = usGetWord(0x00, aucHeader); if(usIdent != 0x8098 && /* Word 7 for oriental languages */ usIdent != 0x8099 && /* Word 7 for oriental languages */ usIdent != 0xa5dc && /* Word 6 & 7 */ usIdent != 0xa5ec && /* Word 7 & 97 & 98 */ usIdent != 0xa697 && /* Word 7 for oriental languages */ usIdent != 0xa699) { /* Word 7 for oriental languages */ aulSBD = (ULONG*)xfree(aulSBD); aulBBD = (ULONG*)xfree(aulBBD); return -1; } /* Get the status flags from the header */ usDocStatus = usGetWord(0x0a, aucHeader); if(usDocStatus & BIT(9)) PPS_info.tTable = PPS_info.t1Table; else PPS_info.tTable = PPS_info.t0Table; read8DocText(pFile, &PPS_info, aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader, content); } else if(PPS_info.type == Excel) { readParam.ulStBlk = PPS_info.tWorkBook.ulSB; UCHAR aucHeader[4]; ulong ulOff = 0; if(readData(readParam, aucHeader, 0, 8) != 0) { aulSBD = (ULONG*)xfree(aulSBD); aulBBD = (ULONG*)xfree(aulBBD); return -1; } ulOff += 4; USHORT usType = usGetWord(0x00, aucHeader); while(ulOff < PPS_info.tWorkBook.ulSize) { USHORT usLen = usGetWord(0x02, aucHeader); ulOff += usLen; if(readData(readParam, aucHeader, ulOff, 4) != 0) break; ulOff += 4; usType = usGetWord(0x00, aucHeader); ushort usPartLen = usGetWord(0x02, aucHeader); if(usType == 0x00FC) { if(readSSTRecord(readParam, PPS_info, ulOff, usPartLen, content) != 0) break; } } } else if(PPS_info.type == Ppt) { ULONG ulOff = 0; while(ulOff < PPS_info.tPPTDocument.ulSize) { ulOff = readPPtRecord(pFile, &PPS_info, aulBBD, tBBDLen, ulOff, content); } } else { qWarning() << "Unsupport doc type:" << m_strFileName; } aulSBD = (ULONG*)xfree(aulSBD); aulBBD = (ULONG*)xfree(aulBBD); return 0; } long lGetFilesize(const char *szFilename) { struct stat tBuffer; if(stat(szFilename, &tBuffer) != 0) { //qWarning() << "Get Filesize error"; return -1; } if(!S_ISREG(tBuffer.st_mode)) { //qWarning() << "It's not a regular file"; return -1; } return (long)tBuffer.st_size; } KBinaryParser::KBinaryParser(QObject *parent) : QObject(parent) , m_strFileName("") { } KBinaryParser::~KBinaryParser() { xfree(aulSmallBlockList); aulSmallBlockList = NULL; } bool KBinaryParser::RunParser(QString strFile, QString &content) { FILE* pFile = fopen(strFile.toLocal8Bit().data(), "rb"); if(!pFile) { return false; } m_strFileName = strFile; long lFileSize = lGetFilesize(strFile.toLocal8Bit().data()); if(lFileSize < 0) { qWarning() << "ERROR SIZE"; (void)fclose(pFile); return false; } // If InitDocOle failed, -1 will be returned. if(InitDocOle(pFile, lFileSize, content)) { qWarning() << "InitDocOle failed!" << strFile; } fclose(pFile); return true; }