Browse Source

refactor: constants of ShortCode tiny codec

master
Dnomd343 3 weeks ago
parent
commit
a2e51b1be9
  1. 19
      src/core/short_code/internal/convert.cc
  2. 536
      src/core/short_code/internal/offset/basic.h
  3. 512
      src/core/short_code/internal/offset/constant/offset.inc
  4. 0
      src/core/short_code/internal/offset/constant/offset_0x0.inc
  5. 0
      src/core/short_code/internal/offset/constant/offset_0x1.inc
  6. 0
      src/core/short_code/internal/offset/constant/offset_0x2.inc
  7. 0
      src/core/short_code/internal/offset/constant/offset_0x4.inc
  8. 0
      src/core/short_code/internal/offset/constant/offset_0x5.inc
  9. 0
      src/core/short_code/internal/offset/constant/offset_0x6.inc
  10. 0
      src/core/short_code/internal/offset/constant/offset_0x8.inc
  11. 0
      src/core/short_code/internal/offset/constant/offset_0x9.inc
  12. 0
      src/core/short_code/internal/offset/constant/offset_0xA.inc
  13. 0
      src/core/short_code/internal/offset/constant/offset_0xC.inc
  14. 0
      src/core/short_code/internal/offset/constant/offset_0xD.inc
  15. 0
      src/core/short_code/internal/offset/constant/offset_0xE.inc
  16. 68
      src/core/short_code/internal/offset/offset.h
  17. 47
      src/core/short_code/internal/offset/range_prefix.h

19
src/core/short_code/internal/convert.cc

@ -1,16 +1,15 @@
#include <algorithm>
#include "offset/basic.h"
#include "offset/range_prefix.h"
#include "offset/offset.h"
#include "short_code/short_code.h"
using klotski::cases::AllCases;
using klotski::codec::ShortCode;
using klotski::cases::BasicRanges;
using klotski::codec::offset::ALL_CASES_OFFSET;
using klotski::codec::offset::BASIC_RANGES_OFFSET;
using klotski::codec::offset::RANGE_PREFIX_OFFSET;
using klotski::cases::ALL_CASES_OFFSET;
using klotski::codec::RANGES_GLOBAL_OFFSET;
using klotski::codec::RANGES_SUBSET_OFFSET;
/// FIXME: temporarily used to implement tidy conversion
static uint32_t check_range(uint32_t head, uint32_t range) noexcept {
@ -69,7 +68,7 @@ uint32_t ShortCode::tiny_encode(uint64_t common_code) {
uint32_t prefix = (common_code >> 20) & 0xFFF;
uint32_t offset = 0;
auto index = BASIC_RANGES_OFFSET[prefix];
auto index = RANGES_GLOBAL_OFFSET[prefix];
const auto &basic_ranges = BasicRanges::instance().fetch();
auto target = (uint32_t)common_code; // target range
for (; index < basic_ranges.size(); ++index) {
@ -86,7 +85,7 @@ uint32_t ShortCode::tiny_encode(uint64_t common_code) {
--index;
}
}
return ALL_CASES_OFFSET[head] + RANGE_PREFIX_OFFSET[head][prefix] + offset;
return ALL_CASES_OFFSET[head] + RANGES_SUBSET_OFFSET[head][prefix] + offset;
}
uint64_t ShortCode::tiny_decode(uint32_t short_code) { // short code --> common code
@ -94,12 +93,12 @@ uint64_t ShortCode::tiny_decode(uint32_t short_code) { // short code --> common
auto head = offset_ - ALL_CASES_OFFSET.begin(); // head index
short_code -= *offset_;
auto offset = std::upper_bound(RANGE_PREFIX_OFFSET[head], RANGE_PREFIX_OFFSET[head] + 4096, short_code) - 1;
auto prefix = offset - RANGE_PREFIX_OFFSET[head]; // range prefix
auto offset = std::upper_bound(RANGES_SUBSET_OFFSET[head].begin(), RANGES_SUBSET_OFFSET[head].end(), short_code) - 1;
auto prefix = offset - RANGES_SUBSET_OFFSET[head].begin(); // range prefix
short_code -= *offset;
/// search for target range
auto index = BASIC_RANGES_OFFSET[prefix];
auto index = RANGES_GLOBAL_OFFSET[prefix];
const auto &basic_ranges = BasicRanges::instance().fetch();
for (; index < basic_ranges.size(); ++index) { // traverse basic ranges
auto broken_offset = check_range(head, range_reverse(basic_ranges[index]));

536
src/core/short_code/internal/offset/basic.h

@ -1,536 +0,0 @@
#pragma once
#include <cstdint>
#include "utils/utility.h"
#include "all_cases/all_cases.h"
namespace klotski::codec::offset {
/// This is the head index, the offset [0, 29334498) in all cases is obtained
/// according to the `head` (0 ~ 15). In other words, the short code range can
/// be obtained according to the position of the 2x2 block.
constexpr auto ALL_CASES_OFFSET = to_offset(cases::ALL_CASES_NUM);
/// This is the index for basic ranges, and its position (0 ~ 7311884) in all
/// basic ranges is located according to the first 12-bit (0 ~ 4095) within the
/// 32-bit `range`.
// TODO: using std::array
constexpr uint32_t BASIC_RANGES_OFFSET[4096] {
0, 18272, 24960, 31648, 49920, 56608, 59056, 61504,
68192, 74880, 77328, 79776, 86464, 104736, 111424, 118112,
136384, 143072, 145520, 147968, 154656, 157104, 158000, 158896,
161344, 163792, 164688, 165584, 168032, 174720, 177168, 179616,
186304, 192992, 195440, 197888, 204576, 207024, 207920, 208816,
211264, 213712, 214608, 215504, 217952, 224640, 227088, 229536,
236224, 254496, 261184, 267872, 286144, 292832, 295280, 297728,
304416, 311104, 313552, 316000, 322688, 340960, 347648, 354336,
372608, 379296, 381744, 384192, 390880, 393328, 394224, 395120,
397568, 400016, 400912, 401808, 404256, 410944, 413392, 415840,
422528, 424976, 425872, 426768, 429216, 430112, 430440, 430768,
431664, 432560, 432888, 433216, 434112, 436560, 437456, 438352,
440800, 443248, 444144, 445040, 447488, 448384, 448712, 449040,
449936, 450832, 451160, 451488, 452384, 454832, 455728, 456624,
459072, 465760, 468208, 470656, 477344, 479792, 480688, 481584,
484032, 486480, 487376, 488272, 490720, 497408, 499856, 502304,
508992, 515680, 518128, 520576, 527264, 529712, 530608, 531504,
533952, 536400, 537296, 538192, 540640, 547328, 549776, 552224,
558912, 561360, 562256, 563152, 565600, 566496, 566824, 567152,
568048, 568944, 569272, 569600, 570496, 572944, 573840, 574736,
577184, 579632, 580528, 581424, 583872, 584768, 585096, 585424,
586320, 587216, 587544, 587871, 588767, 591215, 592111, 593007,
595455, 602143, 604591, 607039, 613727, 616175, 617071, 617967,
620415, 622863, 623759, 624655, 627103, 633791, 636239, 638687,
645375, 663647, 670335, 677023, 695295, 701983, 704431, 706879,
713567, 720255, 722703, 725151, 731839, 750111, 756799, 763487,
781759, 788447, 790895, 793343, 800031, 802479, 803375, 804271,
806719, 809167, 810063, 810959, 813407, 820095, 822543, 824991,
831679, 838367, 840815, 843263, 849951, 852399, 853295, 854191,
856639, 859087, 859983, 860879, 863327, 870015, 872463, 874911,
881599, 899871, 906559, 913247, 931519, 938207, 940655, 943103,
949791, 956479, 958927, 961375, 968063, 986335, 993023, 999711,
1017983, 1024671, 1027119, 1029567, 1036255, 1038703, 1039599, 1040495,
1042943, 1045391, 1046287, 1047183, 1049631, 1056319, 1058767, 1061215,
1067903, 1070351, 1071247, 1072143, 1074591, 1075487, 1075815, 1076143,
1077039, 1077935, 1078263, 1078591, 1079487, 1081935, 1082831, 1083727,
1086175, 1088623, 1089519, 1090415, 1092863, 1093759, 1094087, 1094415,
1095311, 1096207, 1096535, 1096863, 1097759, 1100207, 1101103, 1101999,
1104447, 1111135, 1113583, 1116031, 1122719, 1125167, 1126063, 1126959,
1129407, 1131855, 1132751, 1133647, 1136095, 1142783, 1145231, 1147679,
1154367, 1156815, 1157711, 1158607, 1161055, 1161951, 1162279, 1162607,
1163503, 1164399, 1164727, 1165055, 1165951, 1168399, 1169295, 1170191,
1172639, 1173535, 1173863, 1174191, 1175087, 1175415, 1175514, 1175613,
1175898, 1176226, 1176325, 1176424, 1176709, 1177605, 1177890, 1178175,
1178986, 1179882, 1180210, 1180538, 1181434, 1181762, 1181861, 1181960,
1182245, 1182573, 1182672, 1182771, 1183056, 1183952, 1184237, 1184522,
1185333, 1187781, 1188677, 1189573, 1192021, 1192917, 1193202, 1193487,
1194298, 1195194, 1195479, 1195764, 1196575, 1199023, 1199834, 1200645,
1202922, 1205370, 1206266, 1207162, 1209610, 1210506, 1210834, 1211162,
1212058, 1212954, 1213282, 1213610, 1214506, 1216954, 1217850, 1218746,
1221194, 1222090, 1222418, 1222746, 1223642, 1223970, 1224069, 1224168,
1224453, 1224781, 1224880, 1224979, 1225264, 1226160, 1226445, 1226730,
1227541, 1228437, 1228765, 1229093, 1229989, 1230317, 1230416, 1230515,
1230800, 1231128, 1231227, 1231326, 1231611, 1232507, 1232792, 1233077,
1233888, 1236336, 1237232, 1238128, 1240576, 1241472, 1241757, 1242042,
1242853, 1243749, 1244034, 1244319, 1245130, 1247578, 1248389, 1249200,
1251477, 1258165, 1260613, 1263061, 1269749, 1272197, 1273093, 1273989,
1276437, 1278885, 1279781, 1280677, 1283125, 1289813, 1292261, 1294709,
1301397, 1303845, 1304741, 1305637, 1308085, 1308981, 1309266, 1309551,
1310362, 1311258, 1311543, 1311828, 1312639, 1315087, 1315898, 1316709,
1318986, 1321434, 1322330, 1323226, 1325674, 1326570, 1326855, 1327140,
1327951, 1328847, 1329132, 1329417, 1330228, 1332676, 1333487, 1334298,
1336575, 1343263, 1345711, 1348159, 1354847, 1357295, 1358106, 1358917,
1361194, 1363642, 1364453, 1365264, 1367541, 1374229, 1376506, 1378783,
1385130, 1391818, 1394266, 1396714, 1403402, 1405850, 1406746, 1407642,
1410090, 1412538, 1413434, 1414330, 1416778, 1423466, 1425914, 1428362,
1435050, 1437498, 1438394, 1439290, 1441738, 1442634, 1442962, 1443290,
1444186, 1445082, 1445410, 1445738, 1446634, 1449082, 1449978, 1450874,
1453322, 1455770, 1456666, 1457562, 1460010, 1460906, 1461234, 1461562,
1462458, 1463354, 1463682, 1464009, 1464905, 1467353, 1468249, 1469145,
1471593, 1478281, 1480729, 1483177, 1489865, 1492313, 1493209, 1494105,
1496553, 1499001, 1499897, 1500793, 1503241, 1509929, 1512377, 1514825,
1521513, 1523961, 1524857, 1525753, 1528201, 1529097, 1529425, 1529753,
1530649, 1531545, 1531873, 1532201, 1533097, 1535545, 1536441, 1537337,
1539785, 1540681, 1541009, 1541337, 1542233, 1542561, 1542660, 1542759,
1543044, 1543372, 1543471, 1543570, 1543855, 1544751, 1545036, 1545321,
1546132, 1547028, 1547356, 1547684, 1548580, 1548908, 1549007, 1549106,
1549391, 1549719, 1549818, 1549917, 1550202, 1551098, 1551383, 1551668,
1552479, 1554927, 1555823, 1556719, 1559167, 1560063, 1560348, 1560633,
1561444, 1562340, 1562625, 1562910, 1563721, 1566169, 1566980, 1567791,
1570068, 1572516, 1573412, 1574308, 1576756, 1577652, 1577980, 1578308,
1579204, 1580100, 1580428, 1580755, 1581651, 1584099, 1584995, 1585891,
1588339, 1589235, 1589563, 1589891, 1590787, 1591115, 1591214, 1591313,
1591598, 1591926, 1592025, 1592124, 1592409, 1593305, 1593590, 1593875,
1594686, 1595582, 1595910, 1596237, 1597133, 1597461, 1597560, 1597659,
1597944, 1598271, 1598370, 1598466, 1598751, 1599647, 1599932, 1600217,
1601028, 1603476, 1604372, 1605268, 1607716, 1608612, 1608897, 1609182,
1609993, 1610889, 1611174, 1611459, 1612270, 1614718, 1615529, 1616340,
1618617, 1625305, 1627753, 1630201, 1636889, 1639337, 1640233, 1641129,
1643577, 1646025, 1646921, 1647817, 1650265, 1656953, 1659401, 1661849,
1668537, 1670985, 1671881, 1672777, 1675225, 1676121, 1676406, 1676691,
1677502, 1678398, 1678683, 1678968, 1679779, 1682227, 1683038, 1683849,
1686126, 1688574, 1689470, 1690366, 1692814, 1693710, 1693995, 1694280,
1695091, 1695987, 1696272, 1696557, 1697368, 1699816, 1700627, 1701438,
1703715, 1710403, 1712851, 1715299, 1721987, 1724435, 1725246, 1726057,
1728334, 1730782, 1731593, 1732404, 1734681, 1741369, 1743646, 1745923,
1752270, 1770542, 1777230, 1783918, 1802190, 1808878, 1811326, 1813774,
1820462, 1827150, 1829598, 1832046, 1838734, 1857006, 1863694, 1870382,
1888654, 1895342, 1897790, 1900238, 1906926, 1909374, 1910270, 1911166,
1913614, 1916062, 1916958, 1917854, 1920302, 1926990, 1929438, 1931886,
1938574, 1945262, 1947710, 1950158, 1956846, 1959294, 1960190, 1961086,
1963534, 1965982, 1966878, 1967774, 1970222, 1976910, 1979358, 1981806,
1988494, 2006766, 2013454, 2020142, 2038414, 2045102, 2047550, 2049998,
2056686, 2063374, 2065822, 2068270, 2074958, 2093230, 2099918, 2106606,
2124878, 2131566, 2134014, 2136462, 2143150, 2145598, 2146494, 2147390,
2149838, 2152286, 2153182, 2154078, 2156526, 2163214, 2165662, 2168110,
2174798, 2177246, 2178142, 2179038, 2181486, 2182382, 2182667, 2182952,
2183763, 2184659, 2184944, 2185229, 2186040, 2188488, 2189299, 2190110,
2192387, 2194835, 2195731, 2196627, 2199075, 2199971, 2200256, 2200541,
2201352, 2202248, 2202533, 2202818, 2203629, 2206077, 2206888, 2207699,
2209976, 2216664, 2219112, 2221560, 2228248, 2230696, 2231507, 2232318,
2234595, 2237043, 2237854, 2238665, 2240942, 2247630, 2249907, 2252184,
2258531, 2265219, 2267667, 2270115, 2276803, 2279251, 2280147, 2281043,
2283491, 2285939, 2286835, 2287731, 2290179, 2296867, 2299315, 2301763,
2308451, 2310899, 2311795, 2312691, 2315139, 2316035, 2316320, 2316605,
2317416, 2318312, 2318597, 2318882, 2319693, 2322141, 2322952, 2323763,
2326040, 2328488, 2329384, 2330280, 2332728, 2333624, 2333909, 2334194,
2335005, 2335901, 2336186, 2336471, 2337282, 2339730, 2340541, 2341352,
2343629, 2350317, 2352765, 2355213, 2361901, 2364349, 2365160, 2365971,
2368248, 2370696, 2371507, 2372318, 2374595, 2381283, 2383560, 2385837,
2392184, 2410456, 2417144, 2423832, 2442104, 2448792, 2451240, 2453688,
2460376, 2467064, 2469512, 2471960, 2478648, 2496920, 2503608, 2510296,
2528568, 2535256, 2537704, 2540152, 2546840, 2549288, 2550099, 2550910,
2553187, 2555635, 2556446, 2557257, 2559534, 2566222, 2568499, 2570776,
2577123, 2583811, 2586259, 2588707, 2595395, 2597843, 2598654, 2599465,
2601742, 2604190, 2605001, 2605812, 2608089, 2614777, 2617054, 2619331,
2625678, 2643950, 2650638, 2657326, 2675598, 2682286, 2684563, 2686840,
2693187, 2699875, 2702152, 2704429, 2710776, 2729048, 2735395, 2741742,
2759331, 2766019, 2768467, 2770915, 2777603, 2780051, 2780947, 2781843,
2784291, 2786739, 2787635, 2788531, 2790979, 2797667, 2800115, 2802563,
2809251, 2811699, 2812595, 2813491, 2815939, 2816835, 2817163, 2817491,
2818387, 2819283, 2819611, 2819939, 2820835, 2823283, 2824179, 2825075,
2827523, 2829971, 2830867, 2831763, 2834211, 2835107, 2835435, 2835763,
2836659, 2837555, 2837883, 2838211, 2839107, 2841555, 2842451, 2843347,
2845795, 2852483, 2854931, 2857379, 2864067, 2866515, 2867411, 2868307,
2870755, 2873203, 2874099, 2874995, 2877443, 2884131, 2886579, 2889027,
2895715, 2898163, 2899059, 2899955, 2902403, 2903299, 2903627, 2903955,
2904851, 2905747, 2906075, 2906403, 2907299, 2909747, 2910643, 2911539,
2913987, 2914883, 2915211, 2915539, 2916435, 2916763, 2916862, 2916961,
2917246, 2917574, 2917673, 2917772, 2918057, 2918953, 2919238, 2919523,
2920334, 2921230, 2921558, 2921886, 2922782, 2923110, 2923209, 2923308,
2923593, 2923921, 2924020, 2924119, 2924404, 2925300, 2925585, 2925870,
2926681, 2929129, 2930025, 2930921, 2933369, 2934265, 2934550, 2934835,
2935646, 2936542, 2936827, 2937112, 2937923, 2940371, 2941182, 2941993,
2944270, 2946718, 2947614, 2948510, 2950958, 2951854, 2952182, 2952510,
2953406, 2954302, 2954630, 2954958, 2955854, 2958302, 2959198, 2960094,
2962542, 2963438, 2963766, 2964094, 2964990, 2965318, 2965417, 2965516,
2965801, 2966129, 2966228, 2966327, 2966612, 2967508, 2967793, 2968078,
2968889, 2969785, 2970113, 2970441, 2971337, 2971665, 2971764, 2971863,
2972148, 2972476, 2972575, 2972674, 2972959, 2973855, 2974140, 2974425,
2975236, 2977684, 2978580, 2979476, 2981924, 2982820, 2983105, 2983390,
2984201, 2985097, 2985382, 2985667, 2986478, 2988926, 2989737, 2990548,
2992825, 2999513, 3001961, 3004409, 3011097, 3013545, 3014441, 3015337,
3017785, 3020233, 3021129, 3022025, 3024473, 3031161, 3033609, 3036057,
3042745, 3045193, 3046089, 3046985, 3049433, 3050329, 3050614, 3050899,
3051710, 3052606, 3052891, 3053176, 3053987, 3056435, 3057246, 3058057,
3060334, 3062782, 3063678, 3064574, 3067022, 3067918, 3068203, 3068488,
3069299, 3070195, 3070480, 3070765, 3071576, 3074024, 3074835, 3075646,
3077923, 3084611, 3087059, 3089507, 3096195, 3098643, 3099454, 3100265,
3102542, 3104990, 3105801, 3106612, 3108889, 3115577, 3117854, 3120131,
3126478, 3128926, 3129822, 3130718, 3133166, 3134062, 3134390, 3134718,
3135614, 3136510, 3136838, 3137166, 3138062, 3140510, 3141406, 3142302,
3144750, 3145646, 3145974, 3146302, 3147198, 3147526, 3147625, 3147724,
3148009, 3148337, 3148436, 3148535, 3148820, 3149716, 3150001, 3150286,
3151097, 3151993, 3152321, 3152649, 3153545, 3153873, 3153972, 3154071,
3154356, 3154684, 3154783, 3154882, 3155167, 3156063, 3156348, 3156633,
3157444, 3159892, 3160788, 3161684, 3164132, 3165028, 3165313, 3165598,
3166409, 3167305, 3167590, 3167875, 3168686, 3171134, 3171945, 3172756,
3175033, 3175929, 3176257, 3176585, 3177481, 3177809, 3177908, 3178007,
3178292, 3178620, 3178719, 3178818, 3179103, 3179999, 3180284, 3180569,
3181380, 3181708, 3181807, 3181906, 3182191, 3182290, 3182307, 3182324,
3182382, 3182481, 3182498, 3182515, 3182573, 3182858, 3182916, 3182974,
3183165, 3183493, 3183592, 3183691, 3183976, 3184075, 3184092, 3184109,
3184167, 3184266, 3184283, 3184300, 3184358, 3184643, 3184701, 3184759,
3184950, 3185846, 3186131, 3186416, 3187227, 3187512, 3187570, 3187628,
3187819, 3188104, 3188162, 3188220, 3188411, 3189222, 3189413, 3189604,
3190196, 3191092, 3191420, 3191748, 3192644, 3192972, 3193071, 3193170,
3193455, 3193783, 3193882, 3193981, 3194266, 3195162, 3195447, 3195732,
3196543, 3196871, 3196970, 3197069, 3197354, 3197453, 3197470, 3197487,
3197545, 3197644, 3197661, 3197678, 3197736, 3198021, 3198079, 3198137,
3198328, 3198656, 3198755, 3198854, 3199139, 3199238, 3199255, 3199272,
3199330, 3199429, 3199446, 3199463, 3199521, 3199806, 3199864, 3199922,
3200113, 3201009, 3201294, 3201579, 3202390, 3202675, 3202733, 3202791,
3202982, 3203267, 3203325, 3203383, 3203574, 3204385, 3204576, 3204767,
3205359, 3207807, 3208703, 3209599, 3212047, 3212943, 3213228, 3213513,
3214324, 3215220, 3215505, 3215790, 3216601, 3219049, 3219860, 3220671,
3222948, 3223844, 3224129, 3224414, 3225225, 3225510, 3225568, 3225626,
3225817, 3226102, 3226160, 3226218, 3226409, 3227220, 3227411, 3227602,
3228194, 3229090, 3229375, 3229660, 3230471, 3230756, 3230814, 3230872,
3231063, 3231348, 3231406, 3231464, 3231655, 3232466, 3232657, 3232848,
3233440, 3235888, 3236699, 3237510, 3239787, 3240598, 3240789, 3240980,
3241572, 3242383, 3242574, 3242765, 3243357, 3245634, 3246226, 3246818,
3248603, 3251051, 3251947, 3252843, 3255291, 3256187, 3256515, 3256843,
3257739, 3258635, 3258963, 3259291, 3260187, 3262635, 3263531, 3264427,
3266875, 3267771, 3268099, 3268427, 3269323, 3269651, 3269750, 3269849,
3270134, 3270462, 3270561, 3270660, 3270945, 3271841, 3272126, 3272411,
3273222, 3274118, 3274446, 3274774, 3275670, 3275998, 3276097, 3276196,
3276481, 3276809, 3276908, 3277007, 3277292, 3278188, 3278473, 3278758,
3279569, 3282017, 3282913, 3283809, 3286257, 3287153, 3287438, 3287723,
3288534, 3289430, 3289715, 3290000, 3290811, 3293259, 3294070, 3294881,
3297158, 3298054, 3298382, 3298710, 3299606, 3299934, 3300033, 3300132,
3300417, 3300745, 3300844, 3300943, 3301228, 3302124, 3302409, 3302694,
3303505, 3303833, 3303932, 3304031, 3304316, 3304415, 3304432, 3304449,
3304507, 3304606, 3304623, 3304640, 3304698, 3304983, 3305041, 3305099,
3305290, 3305618, 3305717, 3305816, 3306101, 3306200, 3306217, 3306234,
3306292, 3306391, 3306408, 3306425, 3306483, 3306768, 3306826, 3306884,
3307075, 3307971, 3308256, 3308541, 3309352, 3309637, 3309695, 3309753,
3309944, 3310229, 3310287, 3310345, 3310536, 3311347, 3311538, 3311729,
3312321, 3313217, 3313545, 3313873, 3314769, 3315097, 3315196, 3315295,
3315580, 3315908, 3316007, 3316106, 3316391, 3317287, 3317572, 3317857,
3318668, 3318996, 3319095, 3319194, 3319479, 3319578, 3319595, 3319612,
3319670, 3319769, 3319786, 3319803, 3319861, 3320146, 3320204, 3320262,
3320453, 3320781, 3320880, 3320979, 3321264, 3321363, 3321380, 3321397,
3321455, 3321554, 3321571, 3321588, 3321646, 3321931, 3321989, 3322047,
3322238, 3323134, 3323419, 3323704, 3324515, 3324800, 3324858, 3324916,
3325107, 3325392, 3325450, 3325508, 3325699, 3326510, 3326701, 3326892,
3327484, 3329932, 3330828, 3331724, 3334172, 3335068, 3335353, 3335638,
3336449, 3337345, 3337630, 3337915, 3338726, 3341174, 3341985, 3342796,
3345073, 3345969, 3346254, 3346539, 3347350, 3347635, 3347693, 3347751,
3347942, 3348227, 3348285, 3348343, 3348534, 3349345, 3349536, 3349727,
3350319, 3351215, 3351500, 3351785, 3352596, 3352881, 3352939, 3352997,
3353188, 3353473, 3353531, 3353589, 3353780, 3354591, 3354782, 3354973,
3355565, 3358013, 3358824, 3359635, 3361912, 3362723, 3362914, 3363105,
3363697, 3364508, 3364699, 3364890, 3365482, 3367759, 3368351, 3368943,
3370728, 3377416, 3379864, 3382312, 3389000, 3391448, 3392344, 3393240,
3395688, 3398136, 3399032, 3399928, 3402376, 3409064, 3411512, 3413960,
3420648, 3423096, 3423992, 3424888, 3427336, 3428232, 3428517, 3428802,
3429613, 3430509, 3430794, 3431079, 3431890, 3434338, 3435149, 3435960,
3438237, 3440685, 3441581, 3442477, 3444925, 3445821, 3446106, 3446391,
3447202, 3448098, 3448383, 3448668, 3449479, 3451927, 3452738, 3453549,
3455826, 3462514, 3464962, 3467410, 3474098, 3476546, 3477357, 3478168,
3480445, 3482893, 3483704, 3484515, 3486792, 3493480, 3495757, 3498034,
3504381, 3506829, 3507725, 3508621, 3511069, 3511965, 3512250, 3512535,
3513346, 3514242, 3514527, 3514812, 3515623, 3518071, 3518882, 3519693,
3521970, 3522866, 3523151, 3523436, 3524247, 3524532, 3524590, 3524648,
3524839, 3525124, 3525182, 3525240, 3525431, 3526242, 3526433, 3526624,
3527216, 3528112, 3528397, 3528682, 3529493, 3529778, 3529836, 3529894,
3530085, 3530370, 3530428, 3530486, 3530677, 3531488, 3531679, 3531870,
3532462, 3534910, 3535721, 3536532, 3538809, 3539620, 3539811, 3540002,
3540594, 3541405, 3541596, 3541787, 3542379, 3544656, 3545248, 3545840,
3547625, 3550073, 3550969, 3551865, 3554313, 3555209, 3555494, 3555779,
3556590, 3557486, 3557771, 3558056, 3558867, 3561315, 3562126, 3562937,
3565214, 3566110, 3566395, 3566680, 3567491, 3567776, 3567834, 3567892,
3568083, 3568368, 3568426, 3568484, 3568675, 3569486, 3569677, 3569868,
3570460, 3571356, 3571641, 3571926, 3572737, 3573022, 3573080, 3573138,
3573329, 3573614, 3573672, 3573730, 3573921, 3574732, 3574923, 3575114,
3575706, 3578154, 3578965, 3579776, 3582053, 3582864, 3583055, 3583246,
3583838, 3584649, 3584840, 3585031, 3585623, 3587900, 3588492, 3589084,
3590869, 3597557, 3600005, 3602453, 3609141, 3611589, 3612400, 3613211,
3615488, 3617936, 3618747, 3619558, 3621835, 3628523, 3630800, 3633077,
3639424, 3641872, 3642683, 3643494, 3645771, 3646582, 3646773, 3646964,
3647556, 3648367, 3648558, 3648749, 3649341, 3651618, 3652210, 3652802,
3654587, 3657035, 3657846, 3658657, 3660934, 3661745, 3661936, 3662127,
3662719, 3663530, 3663721, 3663912, 3664504, 3666781, 3667373, 3667965,
3669750, 3676438, 3678715, 3680992, 3687339, 3689616, 3690208, 3690800,
3692585, 3694862, 3695454, 3696046, 3697831, 3704178, 3705963, 3707748,
3712994, 3719682, 3722130, 3724578, 3731266, 3733714, 3734610, 3735506,
3737954, 3740402, 3741298, 3742194, 3744642, 3751330, 3753778, 3756226,
3762914, 3765362, 3766258, 3767154, 3769602, 3770498, 3770826, 3771154,
3772050, 3772946, 3773274, 3773602, 3774498, 3776946, 3777842, 3778738,
3781186, 3783634, 3784530, 3785426, 3787874, 3788770, 3789098, 3789426,
3790322, 3791218, 3791546, 3791873, 3792769, 3795217, 3796113, 3797009,
3799457, 3806145, 3808593, 3811041, 3817729, 3820177, 3821073, 3821969,
3824417, 3826865, 3827761, 3828657, 3831105, 3837793, 3840241, 3842689,
3849377, 3851825, 3852721, 3853617, 3856065, 3856961, 3857289, 3857617,
3858513, 3859409, 3859737, 3860065, 3860961, 3863409, 3864305, 3865201,
3867649, 3868545, 3868873, 3869201, 3870097, 3870425, 3870524, 3870623,
3870908, 3871236, 3871335, 3871434, 3871719, 3872615, 3872900, 3873185,
3873996, 3874892, 3875220, 3875548, 3876444, 3876772, 3876871, 3876970,
3877255, 3877583, 3877682, 3877781, 3878066, 3878962, 3879247, 3879532,
3880343, 3882791, 3883687, 3884583, 3887031, 3887927, 3888212, 3888497,
3889308, 3890204, 3890489, 3890774, 3891585, 3894033, 3894844, 3895655,
3897932, 3900380, 3901276, 3902172, 3904620, 3905516, 3905844, 3906172,
3907068, 3907964, 3908292, 3908619, 3909515, 3911963, 3912859, 3913755,
3916203, 3917099, 3917427, 3917755, 3918651, 3918979, 3919078, 3919177,
3919462, 3919790, 3919889, 3919988, 3920273, 3921169, 3921454, 3921739,
3922550, 3923446, 3923774, 3924101, 3924997, 3925325, 3925424, 3925523,
3925808, 3926135, 3926234, 3926330, 3926615, 3927511, 3927796, 3928081,
3928892, 3931340, 3932236, 3933132, 3935580, 3936476, 3936761, 3937046,
3937857, 3938753, 3939038, 3939323, 3940134, 3942582, 3943393, 3944204,
3946481, 3953169, 3955617, 3958065, 3964753, 3967201, 3968097, 3968993,
3971441, 3973889, 3974785, 3975681, 3978129, 3984817, 3987265, 3989713,
3996401, 3998849, 3999745, 4000641, 4003089, 4003985, 4004270, 4004555,
4005366, 4006262, 4006547, 4006832, 4007643, 4010091, 4010902, 4011713,
4013990, 4016438, 4017334, 4018230, 4020678, 4021574, 4021859, 4022144,
4022955, 4023851, 4024136, 4024421, 4025232, 4027680, 4028491, 4029302,
4031579, 4038267, 4040715, 4043163, 4049851, 4052299, 4053110, 4053921,
4056198, 4058646, 4059457, 4060268, 4062545, 4069233, 4071510, 4073787,
4080134, 4082582, 4083478, 4084374, 4086822, 4087718, 4088046, 4088374,
4089270, 4090166, 4090494, 4090822, 4091718, 4094166, 4095062, 4095958,
4098406, 4099302, 4099630, 4099958, 4100854, 4101182, 4101281, 4101380,
4101665, 4101993, 4102092, 4102191, 4102476, 4103372, 4103657, 4103942,
4104753, 4105649, 4105977, 4106305, 4107201, 4107529, 4107628, 4107727,
4108012, 4108340, 4108439, 4108538, 4108823, 4109719, 4110004, 4110289,
4111100, 4113548, 4114444, 4115340, 4117788, 4118684, 4118969, 4119254,
4120065, 4120961, 4121246, 4121531, 4122342, 4124790, 4125601, 4126412,
4128689, 4129585, 4129913, 4130241, 4131137, 4131465, 4131564, 4131663,
4131948, 4132276, 4132375, 4132474, 4132759, 4133655, 4133940, 4134225,
4135036, 4135364, 4135463, 4135562, 4135847, 4135946, 4135963, 4135980,
4136038, 4136137, 4136154, 4136171, 4136229, 4136514, 4136572, 4136630,
4136821, 4137149, 4137248, 4137347, 4137632, 4137731, 4137748, 4137765,
4137823, 4137922, 4137939, 4137956, 4138014, 4138299, 4138357, 4138415,
4138606, 4139502, 4139787, 4140072, 4140883, 4141168, 4141226, 4141284,
4141475, 4141760, 4141818, 4141876, 4142067, 4142878, 4143069, 4143260,
4143852, 4144748, 4145076, 4145404, 4146300, 4146628, 4146727, 4146826,
4147111, 4147439, 4147538, 4147637, 4147922, 4148818, 4149103, 4149388,
4150199, 4150527, 4150626, 4150725, 4151010, 4151109, 4151126, 4151143,
4151201, 4151300, 4151317, 4151334, 4151392, 4151677, 4151735, 4151793,
4151984, 4152312, 4152411, 4152510, 4152795, 4152894, 4152911, 4152928,
4152986, 4153085, 4153102, 4153119, 4153177, 4153462, 4153520, 4153578,
4153769, 4154665, 4154950, 4155235, 4156046, 4156331, 4156389, 4156447,
4156638, 4156923, 4156981, 4157039, 4157230, 4158041, 4158232, 4158423,
4159015, 4161463, 4162359, 4163255, 4165703, 4166599, 4166884, 4167169,
4167980, 4168876, 4169161, 4169446, 4170257, 4172705, 4173516, 4174327,
4176604, 4177500, 4177785, 4178070, 4178881, 4179166, 4179224, 4179282,
4179473, 4179758, 4179816, 4179874, 4180065, 4180876, 4181067, 4181258,
4181850, 4182746, 4183031, 4183316, 4184127, 4184412, 4184470, 4184528,
4184719, 4185004, 4185062, 4185120, 4185311, 4186122, 4186313, 4186504,
4187096, 4189544, 4190355, 4191166, 4193443, 4194254, 4194445, 4194636,
4195228, 4196039, 4196230, 4196421, 4197013, 4199290, 4199882, 4200474,
4202259, 4204707, 4205603, 4206499, 4208947, 4209843, 4210171, 4210499,
4211395, 4212291, 4212619, 4212946, 4213842, 4216290, 4217186, 4218082,
4220530, 4221426, 4221754, 4222082, 4222978, 4223306, 4223405, 4223504,
4223789, 4224117, 4224216, 4224315, 4224600, 4225496, 4225781, 4226066,
4226877, 4227773, 4228101, 4228428, 4229324, 4229652, 4229751, 4229850,
4230135, 4230462, 4230561, 4230657, 4230942, 4231838, 4232123, 4232408,
4233219, 4235667, 4236563, 4237459, 4239907, 4240803, 4241088, 4241373,
4242184, 4243080, 4243365, 4243650, 4244461, 4246909, 4247720, 4248531,
4250808, 4251704, 4252032, 4252360, 4253256, 4253584, 4253683, 4253782,
4254067, 4254395, 4254494, 4254593, 4254878, 4255774, 4256059, 4256344,
4257155, 4257483, 4257582, 4257681, 4257966, 4258065, 4258082, 4258099,
4258157, 4258256, 4258273, 4258290, 4258348, 4258633, 4258691, 4258749,
4258940, 4259268, 4259367, 4259466, 4259751, 4259850, 4259867, 4259884,
4259942, 4260041, 4260058, 4260075, 4260133, 4260418, 4260476, 4260534,
4260725, 4261621, 4261906, 4262191, 4263002, 4263287, 4263345, 4263403,
4263594, 4263879, 4263937, 4263995, 4264186, 4264997, 4265188, 4265379,
4265971, 4266867, 4267195, 4267522, 4268418, 4268746, 4268845, 4268944,
4269229, 4269556, 4269655, 4269751, 4270036, 4270932, 4271217, 4271502,
4272313, 4272641, 4272740, 4272839, 4273124, 4273223, 4273240, 4273257,
4273315, 4273414, 4273431, 4273448, 4273506, 4273791, 4273849, 4273907,
4274098, 4274425, 4274524, 4274620, 4274905, 4275004, 4275021, 4275038,
4275096, 4275192, 4275209, 4275223, 4275281, 4275566, 4275624, 4275682,
4275873, 4276769, 4277054, 4277339, 4278150, 4278435, 4278493, 4278551,
4278742, 4279027, 4279085, 4279143, 4279334, 4280145, 4280336, 4280527,
4281119, 4283567, 4284463, 4285359, 4287807, 4288703, 4288988, 4289273,
4290084, 4290980, 4291265, 4291550, 4292361, 4294809, 4295620, 4296431,
4298708, 4299604, 4299889, 4300174, 4300985, 4301270, 4301328, 4301386,
4301577, 4301862, 4301920, 4301978, 4302169, 4302980, 4303171, 4303362,
4303954, 4304850, 4305135, 4305420, 4306231, 4306516, 4306574, 4306632,
4306823, 4307108, 4307166, 4307224, 4307415, 4308226, 4308417, 4308608,
4309200, 4311648, 4312459, 4313270, 4315547, 4316358, 4316549, 4316740,
4317332, 4318143, 4318334, 4318525, 4319117, 4321394, 4321986, 4322578,
4324363, 4331051, 4333499, 4335947, 4342635, 4345083, 4345979, 4346875,
4349323, 4351771, 4352667, 4353563, 4356011, 4362699, 4365147, 4367595,
4374283, 4376731, 4377627, 4378523, 4380971, 4381867, 4382152, 4382437,
4383248, 4384144, 4384429, 4384714, 4385525, 4387973, 4388784, 4389595,
4391872, 4394320, 4395216, 4396112, 4398560, 4399456, 4399741, 4400026,
4400837, 4401733, 4402018, 4402303, 4403114, 4405562, 4406373, 4407184,
4409461, 4416149, 4418597, 4421045, 4427733, 4430181, 4430992, 4431803,
4434080, 4436528, 4437339, 4438150, 4440427, 4447115, 4449392, 4451669,
4458016, 4460464, 4461360, 4462256, 4464704, 4465600, 4465885, 4466170,
4466981, 4467877, 4468162, 4468447, 4469258, 4471706, 4472517, 4473328,
4475605, 4476501, 4476786, 4477071, 4477882, 4478167, 4478225, 4478283,
4478474, 4478759, 4478817, 4478875, 4479066, 4479877, 4480068, 4480259,
4480851, 4481747, 4482032, 4482317, 4483128, 4483413, 4483471, 4483529,
4483720, 4484005, 4484063, 4484121, 4484312, 4485123, 4485314, 4485505,
4486097, 4488545, 4489356, 4490167, 4492444, 4493255, 4493446, 4493637,
4494229, 4495040, 4495231, 4495422, 4496014, 4498291, 4498883, 4499475,
4501260, 4503708, 4504604, 4505500, 4507948, 4508844, 4509129, 4509414,
4510225, 4511121, 4511406, 4511691, 4512502, 4514950, 4515761, 4516572,
4518849, 4519745, 4520030, 4520315, 4521126, 4521411, 4521469, 4521527,
4521718, 4522003, 4522061, 4522119, 4522310, 4523121, 4523312, 4523503,
4524095, 4524991, 4525276, 4525561, 4526372, 4526657, 4526715, 4526773,
4526964, 4527249, 4527307, 4527365, 4527556, 4528367, 4528558, 4528749,
4529341, 4531789, 4532600, 4533411, 4535688, 4536499, 4536690, 4536881,
4537473, 4538284, 4538475, 4538666, 4539258, 4541535, 4542127, 4542719,
4544504, 4551192, 4553640, 4556088, 4562776, 4565224, 4566035, 4566846,
4569123, 4571571, 4572382, 4573193, 4575470, 4582158, 4584435, 4586712,
4593059, 4595507, 4596318, 4597129, 4599406, 4600217, 4600408, 4600599,
4601191, 4602002, 4602193, 4602384, 4602976, 4605253, 4605845, 4606437,
4608222, 4610670, 4611481, 4612292, 4614569, 4615380, 4615571, 4615762,
4616354, 4617165, 4617356, 4617547, 4618139, 4620416, 4621008, 4621600,
4623385, 4630073, 4632350, 4634627, 4640974, 4643251, 4643843, 4644435,
4646220, 4648497, 4649089, 4649681, 4651466, 4657813, 4659598, 4661383,
4666629, 4684901, 4691589, 4698277, 4716549, 4723237, 4725685, 4728133,
4734821, 4741509, 4743957, 4746405, 4753093, 4771365, 4778053, 4784741,
4803013, 4809701, 4812149, 4814597, 4821285, 4823733, 4824629, 4825525,
4827973, 4830421, 4831317, 4832213, 4834661, 4841349, 4843797, 4846245,
4852933, 4859621, 4862069, 4864517, 4871205, 4873653, 4874549, 4875445,
4877893, 4880341, 4881237, 4882133, 4884581, 4891269, 4893717, 4896165,
4902853, 4921125, 4927813, 4934501, 4952773, 4959461, 4961909, 4964357,
4971045, 4977733, 4980181, 4982629, 4989317, 5007589, 5014277, 5020965,
5039237, 5045925, 5048373, 5050821, 5057509, 5059957, 5060853, 5061749,
5064197, 5066645, 5067541, 5068437, 5070885, 5077573, 5080021, 5082469,
5089157, 5091605, 5092501, 5093397, 5095845, 5096741, 5097026, 5097311,
5098122, 5099018, 5099303, 5099588, 5100399, 5102847, 5103658, 5104469,
5106746, 5109194, 5110090, 5110986, 5113434, 5114330, 5114615, 5114900,
5115711, 5116607, 5116892, 5117177, 5117988, 5120436, 5121247, 5122058,
5124335, 5131023, 5133471, 5135919, 5142607, 5145055, 5145866, 5146677,
5148954, 5151402, 5152213, 5153024, 5155301, 5161989, 5164266, 5166543,
5172890, 5179578, 5182026, 5184474, 5191162, 5193610, 5194506, 5195402,
5197850, 5200298, 5201194, 5202090, 5204538, 5211226, 5213674, 5216122,
5222810, 5225258, 5226154, 5227050, 5229498, 5230394, 5230679, 5230964,
5231775, 5232671, 5232956, 5233241, 5234052, 5236500, 5237311, 5238122,
5240399, 5242847, 5243743, 5244639, 5247087, 5247983, 5248268, 5248553,
5249364, 5250260, 5250545, 5250830, 5251641, 5254089, 5254900, 5255711,
5257988, 5264676, 5267124, 5269572, 5276260, 5278708, 5279519, 5280330,
5282607, 5285055, 5285866, 5286677, 5288954, 5295642, 5297919, 5300196,
5306543, 5324815, 5331503, 5338191, 5356463, 5363151, 5365599, 5368047,
5374735, 5381423, 5383871, 5386319, 5393007, 5411279, 5417967, 5424655,
5442927, 5449615, 5452063, 5454511, 5461199, 5463647, 5464458, 5465269,
5467546, 5469994, 5470805, 5471616, 5473893, 5480581, 5482858, 5485135,
5491482, 5498170, 5500618, 5503066, 5509754, 5512202, 5513013, 5513824,
5516101, 5518549, 5519360, 5520171, 5522448, 5529136, 5531413, 5533690,
5540037, 5558309, 5564997, 5571685, 5589957, 5596645, 5598922, 5601199,
5607546, 5614234, 5616511, 5618788, 5625135, 5643407, 5649754, 5656101,
5673690, 5680378, 5682826, 5685274, 5691962, 5694410, 5695306, 5696202,
5698650, 5701098, 5701994, 5702890, 5705338, 5712026, 5714474, 5716922,
5723610, 5726058, 5726954, 5727850, 5730298, 5731194, 5731479, 5731764,
5732575, 5733471, 5733756, 5734041, 5734852, 5737300, 5738111, 5738922,
5741199, 5743647, 5744543, 5745439, 5747887, 5748783, 5749068, 5749353,
5750164, 5751060, 5751345, 5751630, 5752441, 5754889, 5755700, 5756511,
5758788, 5765476, 5767924, 5770372, 5777060, 5779508, 5780319, 5781130,
5783407, 5785855, 5786666, 5787477, 5789754, 5796442, 5798719, 5800996,
5807343, 5809791, 5810687, 5811583, 5814031, 5814927, 5815212, 5815497,
5816308, 5817204, 5817489, 5817774, 5818585, 5821033, 5821844, 5822655,
5824932, 5825828, 5826113, 5826398, 5827209, 5827494, 5827552, 5827610,
5827801, 5828086, 5828144, 5828202, 5828393, 5829204, 5829395, 5829586,
5830178, 5831074, 5831359, 5831644, 5832455, 5832740, 5832798, 5832856,
5833047, 5833332, 5833390, 5833448, 5833639, 5834450, 5834641, 5834832,
5835424, 5837872, 5838683, 5839494, 5841771, 5842582, 5842773, 5842964,
5843556, 5844367, 5844558, 5844749, 5845341, 5847618, 5848210, 5848802,
5850587, 5853035, 5853931, 5854827, 5857275, 5858171, 5858456, 5858741,
5859552, 5860448, 5860733, 5861018, 5861829, 5864277, 5865088, 5865899,
5868176, 5869072, 5869357, 5869642, 5870453, 5870738, 5870796, 5870854,
5871045, 5871330, 5871388, 5871446, 5871637, 5872448, 5872639, 5872830,
5873422, 5874318, 5874603, 5874888, 5875699, 5875984, 5876042, 5876100,
5876291, 5876576, 5876634, 5876692, 5876883, 5877694, 5877885, 5878076,
5878668, 5881116, 5881927, 5882738, 5885015, 5885826, 5886017, 5886208,
5886800, 5887611, 5887802, 5887993, 5888585, 5890862, 5891454, 5892046,
5893831, 5900519, 5902967, 5905415, 5912103, 5914551, 5915362, 5916173,
5918450, 5920898, 5921709, 5922520, 5924797, 5931485, 5933762, 5936039,
5942386, 5944834, 5945645, 5946456, 5948733, 5949544, 5949735, 5949926,
5950518, 5951329, 5951520, 5951711, 5952303, 5954580, 5955172, 5955764,
5957549, 5959997, 5960808, 5961619, 5963896, 5964707, 5964898, 5965089,
5965681, 5966492, 5966683, 5966874, 5967466, 5969743, 5970335, 5970927,
5972712, 5979400, 5981677, 5983954, 5990301, 5992578, 5993170, 5993762,
5995547, 5997824, 5998416, 5999008, 6000793, 6007140, 6008925, 6010710,
6015956, 6022644, 6025092, 6027540, 6034228, 6036676, 6037572, 6038468,
6040916, 6043364, 6044260, 6045156, 6047604, 6054292, 6056740, 6059188,
6065876, 6068324, 6069220, 6070116, 6072564, 6073460, 6073745, 6074030,
6074841, 6075737, 6076022, 6076307, 6077118, 6079566, 6080377, 6081188,
6083465, 6085913, 6086809, 6087705, 6090153, 6091049, 6091334, 6091619,
6092430, 6093326, 6093611, 6093896, 6094707, 6097155, 6097966, 6098777,
6101054, 6107742, 6110190, 6112638, 6119326, 6121774, 6122585, 6123396,
6125673, 6128121, 6128932, 6129743, 6132020, 6138708, 6140985, 6143262,
6149609, 6152057, 6152953, 6153849, 6156297, 6157193, 6157478, 6157763,
6158574, 6159470, 6159755, 6160040, 6160851, 6163299, 6164110, 6164921,
6167198, 6168094, 6168379, 6168664, 6169475, 6169760, 6169818, 6169876,
6170067, 6170352, 6170410, 6170468, 6170659, 6171470, 6171661, 6171852,
6172444, 6173340, 6173625, 6173910, 6174721, 6175006, 6175064, 6175122,
6175313, 6175598, 6175656, 6175714, 6175905, 6176716, 6176907, 6177098,
6177690, 6180138, 6180949, 6181760, 6184037, 6184848, 6185039, 6185230,
6185822, 6186633, 6186824, 6187015, 6187607, 6189884, 6190476, 6191068,
6192853, 6195301, 6196197, 6197093, 6199541, 6200437, 6200722, 6201007,
6201818, 6202714, 6202999, 6203284, 6204095, 6206543, 6207354, 6208165,
6210442, 6211338, 6211623, 6211908, 6212719, 6213004, 6213062, 6213120,
6213311, 6213596, 6213654, 6213712, 6213903, 6214714, 6214905, 6215096,
6215688, 6216584, 6216869, 6217154, 6217965, 6218250, 6218308, 6218366,
6218557, 6218842, 6218900, 6218958, 6219149, 6219960, 6220151, 6220342,
6220934, 6223382, 6224193, 6225004, 6227281, 6228092, 6228283, 6228474,
6229066, 6229877, 6230068, 6230259, 6230851, 6233128, 6233720, 6234312,
6236097, 6242785, 6245233, 6247681, 6254369, 6256817, 6257628, 6258439,
6260716, 6263164, 6263975, 6264786, 6267063, 6273751, 6276028, 6278305,
6284652, 6287100, 6287911, 6288722, 6290999, 6291810, 6292001, 6292192,
6292784, 6293595, 6293786, 6293977, 6294569, 6296846, 6297438, 6298030,
6299815, 6302263, 6303074, 6303885, 6306162, 6306973, 6307164, 6307355,
6307947, 6308758, 6308949, 6309140, 6309732, 6312009, 6312601, 6313193,
6314978, 6321666, 6323943, 6326220, 6332567, 6334844, 6335436, 6336028,
6337813, 6340090, 6340682, 6341274, 6343059, 6349406, 6351191, 6352976,
6358222, 6376494, 6383182, 6389870, 6408142, 6414830, 6417278, 6419726,
6426414, 6433102, 6435550, 6437998, 6444686, 6462958, 6469646, 6476334,
6494606, 6501294, 6503742, 6506190, 6512878, 6515326, 6516137, 6516948,
6519225, 6521673, 6522484, 6523295, 6525572, 6532260, 6534537, 6536814,
6543161, 6549849, 6552297, 6554745, 6561433, 6563881, 6564692, 6565503,
6567780, 6570228, 6571039, 6571850, 6574127, 6580815, 6583092, 6585369,
6591716, 6609988, 6616676, 6623364, 6641636, 6648324, 6650601, 6652878,
6659225, 6665913, 6668190, 6670467, 6676814, 6695086, 6701433, 6707780,
6725369, 6732057, 6734505, 6736953, 6743641, 6746089, 6746900, 6747711,
6749988, 6752436, 6753247, 6754058, 6756335, 6763023, 6765300, 6767577,
6773924, 6776372, 6777183, 6777994, 6780271, 6781082, 6781273, 6781464,
6782056, 6782867, 6783058, 6783249, 6783841, 6786118, 6786710, 6787302,
6789087, 6791535, 6792346, 6793157, 6795434, 6796245, 6796436, 6796627,
6797219, 6798030, 6798221, 6798412, 6799004, 6801281, 6801873, 6802465,
6804250, 6810938, 6813215, 6815492, 6821839, 6824116, 6824708, 6825300,
6827085, 6829362, 6829954, 6830546, 6832331, 6838678, 6840463, 6842248,
6847494, 6854182, 6856630, 6859078, 6865766, 6868214, 6869025, 6869836,
6872113, 6874561, 6875372, 6876183, 6878460, 6885148, 6887425, 6889702,
6896049, 6898497, 6899308, 6900119, 6902396, 6903207, 6903398, 6903589,
6904181, 6904992, 6905183, 6905374, 6905966, 6908243, 6908835, 6909427,
6911212, 6913660, 6914471, 6915282, 6917559, 6918370, 6918561, 6918752,
6919344, 6920155, 6920346, 6920537, 6921129, 6923406, 6923998, 6924590,
6926375, 6933063, 6935340, 6937617, 6943964, 6946241, 6946833, 6947425,
6949210, 6951487, 6952079, 6952671, 6954456, 6960803, 6962588, 6964373,
6969619, 6987891, 6994579, 7001267, 7019539, 7026227, 7028504, 7030781,
7037128, 7043816, 7046093, 7048370, 7054717, 7072989, 7079336, 7085683,
7103272, 7109960, 7112237, 7114514, 7120861, 7123138, 7123730, 7124322,
7126107, 7128384, 7128976, 7129568, 7131353, 7137700, 7139485, 7141270,
7146516, 7153204, 7155481, 7157758, 7164105, 7166382, 7166974, 7167566,
7169351, 7171628, 7172220, 7172812, 7174597, 7180944, 7182729, 7184514,
7189760, 7208032, 7214379, 7220726, 7238315, 7244662, 7246447, 7248232,
7253478, 7259825, 7261610, 7263395, 7268641, 7286230, 7291476, 7296722,
};
} // namespace klotski::codec::offset

512
src/core/short_code/internal/offset/constant/offset.inc

@ -0,0 +1,512 @@
0 , 18272 , 24960 , 31648 , 49920 , 56608 , 59056 , 61504 ,
68192 , 74880 , 77328 , 79776 , 86464 , 104736 , 111424 , 118112 ,
136384 , 143072 , 145520 , 147968 , 154656 , 157104 , 158000 , 158896 ,
161344 , 163792 , 164688 , 165584 , 168032 , 174720 , 177168 , 179616 ,
186304 , 192992 , 195440 , 197888 , 204576 , 207024 , 207920 , 208816 ,
211264 , 213712 , 214608 , 215504 , 217952 , 224640 , 227088 , 229536 ,
236224 , 254496 , 261184 , 267872 , 286144 , 292832 , 295280 , 297728 ,
304416 , 311104 , 313552 , 316000 , 322688 , 340960 , 347648 , 354336 ,
372608 , 379296 , 381744 , 384192 , 390880 , 393328 , 394224 , 395120 ,
397568 , 400016 , 400912 , 401808 , 404256 , 410944 , 413392 , 415840 ,
422528 , 424976 , 425872 , 426768 , 429216 , 430112 , 430440 , 430768 ,
431664 , 432560 , 432888 , 433216 , 434112 , 436560 , 437456 , 438352 ,
440800 , 443248 , 444144 , 445040 , 447488 , 448384 , 448712 , 449040 ,
449936 , 450832 , 451160 , 451488 , 452384 , 454832 , 455728 , 456624 ,
459072 , 465760 , 468208 , 470656 , 477344 , 479792 , 480688 , 481584 ,
484032 , 486480 , 487376 , 488272 , 490720 , 497408 , 499856 , 502304 ,
508992 , 515680 , 518128 , 520576 , 527264 , 529712 , 530608 , 531504 ,
533952 , 536400 , 537296 , 538192 , 540640 , 547328 , 549776 , 552224 ,
558912 , 561360 , 562256 , 563152 , 565600 , 566496 , 566824 , 567152 ,
568048 , 568944 , 569272 , 569600 , 570496 , 572944 , 573840 , 574736 ,
577184 , 579632 , 580528 , 581424 , 583872 , 584768 , 585096 , 585424 ,
586320 , 587216 , 587544 , 587871 , 588767 , 591215 , 592111 , 593007 ,
595455 , 602143 , 604591 , 607039 , 613727 , 616175 , 617071 , 617967 ,
620415 , 622863 , 623759 , 624655 , 627103 , 633791 , 636239 , 638687 ,
645375 , 663647 , 670335 , 677023 , 695295 , 701983 , 704431 , 706879 ,
713567 , 720255 , 722703 , 725151 , 731839 , 750111 , 756799 , 763487 ,
781759 , 788447 , 790895 , 793343 , 800031 , 802479 , 803375 , 804271 ,
806719 , 809167 , 810063 , 810959 , 813407 , 820095 , 822543 , 824991 ,
831679 , 838367 , 840815 , 843263 , 849951 , 852399 , 853295 , 854191 ,
856639 , 859087 , 859983 , 860879 , 863327 , 870015 , 872463 , 874911 ,
881599 , 899871 , 906559 , 913247 , 931519 , 938207 , 940655 , 943103 ,
949791 , 956479 , 958927 , 961375 , 968063 , 986335 , 993023 , 999711 ,
1017983, 1024671, 1027119, 1029567, 1036255, 1038703, 1039599, 1040495,
1042943, 1045391, 1046287, 1047183, 1049631, 1056319, 1058767, 1061215,
1067903, 1070351, 1071247, 1072143, 1074591, 1075487, 1075815, 1076143,
1077039, 1077935, 1078263, 1078591, 1079487, 1081935, 1082831, 1083727,
1086175, 1088623, 1089519, 1090415, 1092863, 1093759, 1094087, 1094415,
1095311, 1096207, 1096535, 1096863, 1097759, 1100207, 1101103, 1101999,
1104447, 1111135, 1113583, 1116031, 1122719, 1125167, 1126063, 1126959,
1129407, 1131855, 1132751, 1133647, 1136095, 1142783, 1145231, 1147679,
1154367, 1156815, 1157711, 1158607, 1161055, 1161951, 1162279, 1162607,
1163503, 1164399, 1164727, 1165055, 1165951, 1168399, 1169295, 1170191,
1172639, 1173535, 1173863, 1174191, 1175087, 1175415, 1175514, 1175613,
1175898, 1176226, 1176325, 1176424, 1176709, 1177605, 1177890, 1178175,
1178986, 1179882, 1180210, 1180538, 1181434, 1181762, 1181861, 1181960,
1182245, 1182573, 1182672, 1182771, 1183056, 1183952, 1184237, 1184522,
1185333, 1187781, 1188677, 1189573, 1192021, 1192917, 1193202, 1193487,
1194298, 1195194, 1195479, 1195764, 1196575, 1199023, 1199834, 1200645,
1202922, 1205370, 1206266, 1207162, 1209610, 1210506, 1210834, 1211162,
1212058, 1212954, 1213282, 1213610, 1214506, 1216954, 1217850, 1218746,
1221194, 1222090, 1222418, 1222746, 1223642, 1223970, 1224069, 1224168,
1224453, 1224781, 1224880, 1224979, 1225264, 1226160, 1226445, 1226730,
1227541, 1228437, 1228765, 1229093, 1229989, 1230317, 1230416, 1230515,
1230800, 1231128, 1231227, 1231326, 1231611, 1232507, 1232792, 1233077,
1233888, 1236336, 1237232, 1238128, 1240576, 1241472, 1241757, 1242042,
1242853, 1243749, 1244034, 1244319, 1245130, 1247578, 1248389, 1249200,
1251477, 1258165, 1260613, 1263061, 1269749, 1272197, 1273093, 1273989,
1276437, 1278885, 1279781, 1280677, 1283125, 1289813, 1292261, 1294709,
1301397, 1303845, 1304741, 1305637, 1308085, 1308981, 1309266, 1309551,
1310362, 1311258, 1311543, 1311828, 1312639, 1315087, 1315898, 1316709,
1318986, 1321434, 1322330, 1323226, 1325674, 1326570, 1326855, 1327140,
1327951, 1328847, 1329132, 1329417, 1330228, 1332676, 1333487, 1334298,
1336575, 1343263, 1345711, 1348159, 1354847, 1357295, 1358106, 1358917,
1361194, 1363642, 1364453, 1365264, 1367541, 1374229, 1376506, 1378783,
1385130, 1391818, 1394266, 1396714, 1403402, 1405850, 1406746, 1407642,
1410090, 1412538, 1413434, 1414330, 1416778, 1423466, 1425914, 1428362,
1435050, 1437498, 1438394, 1439290, 1441738, 1442634, 1442962, 1443290,
1444186, 1445082, 1445410, 1445738, 1446634, 1449082, 1449978, 1450874,
1453322, 1455770, 1456666, 1457562, 1460010, 1460906, 1461234, 1461562,
1462458, 1463354, 1463682, 1464009, 1464905, 1467353, 1468249, 1469145,
1471593, 1478281, 1480729, 1483177, 1489865, 1492313, 1493209, 1494105,
1496553, 1499001, 1499897, 1500793, 1503241, 1509929, 1512377, 1514825,
1521513, 1523961, 1524857, 1525753, 1528201, 1529097, 1529425, 1529753,
1530649, 1531545, 1531873, 1532201, 1533097, 1535545, 1536441, 1537337,
1539785, 1540681, 1541009, 1541337, 1542233, 1542561, 1542660, 1542759,
1543044, 1543372, 1543471, 1543570, 1543855, 1544751, 1545036, 1545321,
1546132, 1547028, 1547356, 1547684, 1548580, 1548908, 1549007, 1549106,
1549391, 1549719, 1549818, 1549917, 1550202, 1551098, 1551383, 1551668,
1552479, 1554927, 1555823, 1556719, 1559167, 1560063, 1560348, 1560633,
1561444, 1562340, 1562625, 1562910, 1563721, 1566169, 1566980, 1567791,
1570068, 1572516, 1573412, 1574308, 1576756, 1577652, 1577980, 1578308,
1579204, 1580100, 1580428, 1580755, 1581651, 1584099, 1584995, 1585891,
1588339, 1589235, 1589563, 1589891, 1590787, 1591115, 1591214, 1591313,
1591598, 1591926, 1592025, 1592124, 1592409, 1593305, 1593590, 1593875,
1594686, 1595582, 1595910, 1596237, 1597133, 1597461, 1597560, 1597659,
1597944, 1598271, 1598370, 1598466, 1598751, 1599647, 1599932, 1600217,
1601028, 1603476, 1604372, 1605268, 1607716, 1608612, 1608897, 1609182,
1609993, 1610889, 1611174, 1611459, 1612270, 1614718, 1615529, 1616340,
1618617, 1625305, 1627753, 1630201, 1636889, 1639337, 1640233, 1641129,
1643577, 1646025, 1646921, 1647817, 1650265, 1656953, 1659401, 1661849,
1668537, 1670985, 1671881, 1672777, 1675225, 1676121, 1676406, 1676691,
1677502, 1678398, 1678683, 1678968, 1679779, 1682227, 1683038, 1683849,
1686126, 1688574, 1689470, 1690366, 1692814, 1693710, 1693995, 1694280,
1695091, 1695987, 1696272, 1696557, 1697368, 1699816, 1700627, 1701438,
1703715, 1710403, 1712851, 1715299, 1721987, 1724435, 1725246, 1726057,
1728334, 1730782, 1731593, 1732404, 1734681, 1741369, 1743646, 1745923,
1752270, 1770542, 1777230, 1783918, 1802190, 1808878, 1811326, 1813774,
1820462, 1827150, 1829598, 1832046, 1838734, 1857006, 1863694, 1870382,
1888654, 1895342, 1897790, 1900238, 1906926, 1909374, 1910270, 1911166,
1913614, 1916062, 1916958, 1917854, 1920302, 1926990, 1929438, 1931886,
1938574, 1945262, 1947710, 1950158, 1956846, 1959294, 1960190, 1961086,
1963534, 1965982, 1966878, 1967774, 1970222, 1976910, 1979358, 1981806,
1988494, 2006766, 2013454, 2020142, 2038414, 2045102, 2047550, 2049998,
2056686, 2063374, 2065822, 2068270, 2074958, 2093230, 2099918, 2106606,
2124878, 2131566, 2134014, 2136462, 2143150, 2145598, 2146494, 2147390,
2149838, 2152286, 2153182, 2154078, 2156526, 2163214, 2165662, 2168110,
2174798, 2177246, 2178142, 2179038, 2181486, 2182382, 2182667, 2182952,
2183763, 2184659, 2184944, 2185229, 2186040, 2188488, 2189299, 2190110,
2192387, 2194835, 2195731, 2196627, 2199075, 2199971, 2200256, 2200541,
2201352, 2202248, 2202533, 2202818, 2203629, 2206077, 2206888, 2207699,
2209976, 2216664, 2219112, 2221560, 2228248, 2230696, 2231507, 2232318,
2234595, 2237043, 2237854, 2238665, 2240942, 2247630, 2249907, 2252184,
2258531, 2265219, 2267667, 2270115, 2276803, 2279251, 2280147, 2281043,
2283491, 2285939, 2286835, 2287731, 2290179, 2296867, 2299315, 2301763,
2308451, 2310899, 2311795, 2312691, 2315139, 2316035, 2316320, 2316605,
2317416, 2318312, 2318597, 2318882, 2319693, 2322141, 2322952, 2323763,
2326040, 2328488, 2329384, 2330280, 2332728, 2333624, 2333909, 2334194,
2335005, 2335901, 2336186, 2336471, 2337282, 2339730, 2340541, 2341352,
2343629, 2350317, 2352765, 2355213, 2361901, 2364349, 2365160, 2365971,
2368248, 2370696, 2371507, 2372318, 2374595, 2381283, 2383560, 2385837,
2392184, 2410456, 2417144, 2423832, 2442104, 2448792, 2451240, 2453688,
2460376, 2467064, 2469512, 2471960, 2478648, 2496920, 2503608, 2510296,
2528568, 2535256, 2537704, 2540152, 2546840, 2549288, 2550099, 2550910,
2553187, 2555635, 2556446, 2557257, 2559534, 2566222, 2568499, 2570776,
2577123, 2583811, 2586259, 2588707, 2595395, 2597843, 2598654, 2599465,
2601742, 2604190, 2605001, 2605812, 2608089, 2614777, 2617054, 2619331,
2625678, 2643950, 2650638, 2657326, 2675598, 2682286, 2684563, 2686840,
2693187, 2699875, 2702152, 2704429, 2710776, 2729048, 2735395, 2741742,
2759331, 2766019, 2768467, 2770915, 2777603, 2780051, 2780947, 2781843,
2784291, 2786739, 2787635, 2788531, 2790979, 2797667, 2800115, 2802563,
2809251, 2811699, 2812595, 2813491, 2815939, 2816835, 2817163, 2817491,
2818387, 2819283, 2819611, 2819939, 2820835, 2823283, 2824179, 2825075,
2827523, 2829971, 2830867, 2831763, 2834211, 2835107, 2835435, 2835763,
2836659, 2837555, 2837883, 2838211, 2839107, 2841555, 2842451, 2843347,
2845795, 2852483, 2854931, 2857379, 2864067, 2866515, 2867411, 2868307,
2870755, 2873203, 2874099, 2874995, 2877443, 2884131, 2886579, 2889027,
2895715, 2898163, 2899059, 2899955, 2902403, 2903299, 2903627, 2903955,
2904851, 2905747, 2906075, 2906403, 2907299, 2909747, 2910643, 2911539,
2913987, 2914883, 2915211, 2915539, 2916435, 2916763, 2916862, 2916961,
2917246, 2917574, 2917673, 2917772, 2918057, 2918953, 2919238, 2919523,
2920334, 2921230, 2921558, 2921886, 2922782, 2923110, 2923209, 2923308,
2923593, 2923921, 2924020, 2924119, 2924404, 2925300, 2925585, 2925870,
2926681, 2929129, 2930025, 2930921, 2933369, 2934265, 2934550, 2934835,
2935646, 2936542, 2936827, 2937112, 2937923, 2940371, 2941182, 2941993,
2944270, 2946718, 2947614, 2948510, 2950958, 2951854, 2952182, 2952510,
2953406, 2954302, 2954630, 2954958, 2955854, 2958302, 2959198, 2960094,
2962542, 2963438, 2963766, 2964094, 2964990, 2965318, 2965417, 2965516,
2965801, 2966129, 2966228, 2966327, 2966612, 2967508, 2967793, 2968078,
2968889, 2969785, 2970113, 2970441, 2971337, 2971665, 2971764, 2971863,
2972148, 2972476, 2972575, 2972674, 2972959, 2973855, 2974140, 2974425,
2975236, 2977684, 2978580, 2979476, 2981924, 2982820, 2983105, 2983390,
2984201, 2985097, 2985382, 2985667, 2986478, 2988926, 2989737, 2990548,
2992825, 2999513, 3001961, 3004409, 3011097, 3013545, 3014441, 3015337,
3017785, 3020233, 3021129, 3022025, 3024473, 3031161, 3033609, 3036057,
3042745, 3045193, 3046089, 3046985, 3049433, 3050329, 3050614, 3050899,
3051710, 3052606, 3052891, 3053176, 3053987, 3056435, 3057246, 3058057,
3060334, 3062782, 3063678, 3064574, 3067022, 3067918, 3068203, 3068488,
3069299, 3070195, 3070480, 3070765, 3071576, 3074024, 3074835, 3075646,
3077923, 3084611, 3087059, 3089507, 3096195, 3098643, 3099454, 3100265,
3102542, 3104990, 3105801, 3106612, 3108889, 3115577, 3117854, 3120131,
3126478, 3128926, 3129822, 3130718, 3133166, 3134062, 3134390, 3134718,
3135614, 3136510, 3136838, 3137166, 3138062, 3140510, 3141406, 3142302,
3144750, 3145646, 3145974, 3146302, 3147198, 3147526, 3147625, 3147724,
3148009, 3148337, 3148436, 3148535, 3148820, 3149716, 3150001, 3150286,
3151097, 3151993, 3152321, 3152649, 3153545, 3153873, 3153972, 3154071,
3154356, 3154684, 3154783, 3154882, 3155167, 3156063, 3156348, 3156633,
3157444, 3159892, 3160788, 3161684, 3164132, 3165028, 3165313, 3165598,
3166409, 3167305, 3167590, 3167875, 3168686, 3171134, 3171945, 3172756,
3175033, 3175929, 3176257, 3176585, 3177481, 3177809, 3177908, 3178007,
3178292, 3178620, 3178719, 3178818, 3179103, 3179999, 3180284, 3180569,
3181380, 3181708, 3181807, 3181906, 3182191, 3182290, 3182307, 3182324,
3182382, 3182481, 3182498, 3182515, 3182573, 3182858, 3182916, 3182974,
3183165, 3183493, 3183592, 3183691, 3183976, 3184075, 3184092, 3184109,
3184167, 3184266, 3184283, 3184300, 3184358, 3184643, 3184701, 3184759,
3184950, 3185846, 3186131, 3186416, 3187227, 3187512, 3187570, 3187628,
3187819, 3188104, 3188162, 3188220, 3188411, 3189222, 3189413, 3189604,
3190196, 3191092, 3191420, 3191748, 3192644, 3192972, 3193071, 3193170,
3193455, 3193783, 3193882, 3193981, 3194266, 3195162, 3195447, 3195732,
3196543, 3196871, 3196970, 3197069, 3197354, 3197453, 3197470, 3197487,
3197545, 3197644, 3197661, 3197678, 3197736, 3198021, 3198079, 3198137,
3198328, 3198656, 3198755, 3198854, 3199139, 3199238, 3199255, 3199272,
3199330, 3199429, 3199446, 3199463, 3199521, 3199806, 3199864, 3199922,
3200113, 3201009, 3201294, 3201579, 3202390, 3202675, 3202733, 3202791,
3202982, 3203267, 3203325, 3203383, 3203574, 3204385, 3204576, 3204767,
3205359, 3207807, 3208703, 3209599, 3212047, 3212943, 3213228, 3213513,
3214324, 3215220, 3215505, 3215790, 3216601, 3219049, 3219860, 3220671,
3222948, 3223844, 3224129, 3224414, 3225225, 3225510, 3225568, 3225626,
3225817, 3226102, 3226160, 3226218, 3226409, 3227220, 3227411, 3227602,
3228194, 3229090, 3229375, 3229660, 3230471, 3230756, 3230814, 3230872,
3231063, 3231348, 3231406, 3231464, 3231655, 3232466, 3232657, 3232848,
3233440, 3235888, 3236699, 3237510, 3239787, 3240598, 3240789, 3240980,
3241572, 3242383, 3242574, 3242765, 3243357, 3245634, 3246226, 3246818,
3248603, 3251051, 3251947, 3252843, 3255291, 3256187, 3256515, 3256843,
3257739, 3258635, 3258963, 3259291, 3260187, 3262635, 3263531, 3264427,
3266875, 3267771, 3268099, 3268427, 3269323, 3269651, 3269750, 3269849,
3270134, 3270462, 3270561, 3270660, 3270945, 3271841, 3272126, 3272411,
3273222, 3274118, 3274446, 3274774, 3275670, 3275998, 3276097, 3276196,
3276481, 3276809, 3276908, 3277007, 3277292, 3278188, 3278473, 3278758,
3279569, 3282017, 3282913, 3283809, 3286257, 3287153, 3287438, 3287723,
3288534, 3289430, 3289715, 3290000, 3290811, 3293259, 3294070, 3294881,
3297158, 3298054, 3298382, 3298710, 3299606, 3299934, 3300033, 3300132,
3300417, 3300745, 3300844, 3300943, 3301228, 3302124, 3302409, 3302694,
3303505, 3303833, 3303932, 3304031, 3304316, 3304415, 3304432, 3304449,
3304507, 3304606, 3304623, 3304640, 3304698, 3304983, 3305041, 3305099,
3305290, 3305618, 3305717, 3305816, 3306101, 3306200, 3306217, 3306234,
3306292, 3306391, 3306408, 3306425, 3306483, 3306768, 3306826, 3306884,
3307075, 3307971, 3308256, 3308541, 3309352, 3309637, 3309695, 3309753,
3309944, 3310229, 3310287, 3310345, 3310536, 3311347, 3311538, 3311729,
3312321, 3313217, 3313545, 3313873, 3314769, 3315097, 3315196, 3315295,
3315580, 3315908, 3316007, 3316106, 3316391, 3317287, 3317572, 3317857,
3318668, 3318996, 3319095, 3319194, 3319479, 3319578, 3319595, 3319612,
3319670, 3319769, 3319786, 3319803, 3319861, 3320146, 3320204, 3320262,
3320453, 3320781, 3320880, 3320979, 3321264, 3321363, 3321380, 3321397,
3321455, 3321554, 3321571, 3321588, 3321646, 3321931, 3321989, 3322047,
3322238, 3323134, 3323419, 3323704, 3324515, 3324800, 3324858, 3324916,
3325107, 3325392, 3325450, 3325508, 3325699, 3326510, 3326701, 3326892,
3327484, 3329932, 3330828, 3331724, 3334172, 3335068, 3335353, 3335638,
3336449, 3337345, 3337630, 3337915, 3338726, 3341174, 3341985, 3342796,
3345073, 3345969, 3346254, 3346539, 3347350, 3347635, 3347693, 3347751,
3347942, 3348227, 3348285, 3348343, 3348534, 3349345, 3349536, 3349727,
3350319, 3351215, 3351500, 3351785, 3352596, 3352881, 3352939, 3352997,
3353188, 3353473, 3353531, 3353589, 3353780, 3354591, 3354782, 3354973,
3355565, 3358013, 3358824, 3359635, 3361912, 3362723, 3362914, 3363105,
3363697, 3364508, 3364699, 3364890, 3365482, 3367759, 3368351, 3368943,
3370728, 3377416, 3379864, 3382312, 3389000, 3391448, 3392344, 3393240,
3395688, 3398136, 3399032, 3399928, 3402376, 3409064, 3411512, 3413960,
3420648, 3423096, 3423992, 3424888, 3427336, 3428232, 3428517, 3428802,
3429613, 3430509, 3430794, 3431079, 3431890, 3434338, 3435149, 3435960,
3438237, 3440685, 3441581, 3442477, 3444925, 3445821, 3446106, 3446391,
3447202, 3448098, 3448383, 3448668, 3449479, 3451927, 3452738, 3453549,
3455826, 3462514, 3464962, 3467410, 3474098, 3476546, 3477357, 3478168,
3480445, 3482893, 3483704, 3484515, 3486792, 3493480, 3495757, 3498034,
3504381, 3506829, 3507725, 3508621, 3511069, 3511965, 3512250, 3512535,
3513346, 3514242, 3514527, 3514812, 3515623, 3518071, 3518882, 3519693,
3521970, 3522866, 3523151, 3523436, 3524247, 3524532, 3524590, 3524648,
3524839, 3525124, 3525182, 3525240, 3525431, 3526242, 3526433, 3526624,
3527216, 3528112, 3528397, 3528682, 3529493, 3529778, 3529836, 3529894,
3530085, 3530370, 3530428, 3530486, 3530677, 3531488, 3531679, 3531870,
3532462, 3534910, 3535721, 3536532, 3538809, 3539620, 3539811, 3540002,
3540594, 3541405, 3541596, 3541787, 3542379, 3544656, 3545248, 3545840,
3547625, 3550073, 3550969, 3551865, 3554313, 3555209, 3555494, 3555779,
3556590, 3557486, 3557771, 3558056, 3558867, 3561315, 3562126, 3562937,
3565214, 3566110, 3566395, 3566680, 3567491, 3567776, 3567834, 3567892,
3568083, 3568368, 3568426, 3568484, 3568675, 3569486, 3569677, 3569868,
3570460, 3571356, 3571641, 3571926, 3572737, 3573022, 3573080, 3573138,
3573329, 3573614, 3573672, 3573730, 3573921, 3574732, 3574923, 3575114,
3575706, 3578154, 3578965, 3579776, 3582053, 3582864, 3583055, 3583246,
3583838, 3584649, 3584840, 3585031, 3585623, 3587900, 3588492, 3589084,
3590869, 3597557, 3600005, 3602453, 3609141, 3611589, 3612400, 3613211,
3615488, 3617936, 3618747, 3619558, 3621835, 3628523, 3630800, 3633077,
3639424, 3641872, 3642683, 3643494, 3645771, 3646582, 3646773, 3646964,
3647556, 3648367, 3648558, 3648749, 3649341, 3651618, 3652210, 3652802,
3654587, 3657035, 3657846, 3658657, 3660934, 3661745, 3661936, 3662127,
3662719, 3663530, 3663721, 3663912, 3664504, 3666781, 3667373, 3667965,
3669750, 3676438, 3678715, 3680992, 3687339, 3689616, 3690208, 3690800,
3692585, 3694862, 3695454, 3696046, 3697831, 3704178, 3705963, 3707748,
3712994, 3719682, 3722130, 3724578, 3731266, 3733714, 3734610, 3735506,
3737954, 3740402, 3741298, 3742194, 3744642, 3751330, 3753778, 3756226,
3762914, 3765362, 3766258, 3767154, 3769602, 3770498, 3770826, 3771154,
3772050, 3772946, 3773274, 3773602, 3774498, 3776946, 3777842, 3778738,
3781186, 3783634, 3784530, 3785426, 3787874, 3788770, 3789098, 3789426,
3790322, 3791218, 3791546, 3791873, 3792769, 3795217, 3796113, 3797009,
3799457, 3806145, 3808593, 3811041, 3817729, 3820177, 3821073, 3821969,
3824417, 3826865, 3827761, 3828657, 3831105, 3837793, 3840241, 3842689,
3849377, 3851825, 3852721, 3853617, 3856065, 3856961, 3857289, 3857617,
3858513, 3859409, 3859737, 3860065, 3860961, 3863409, 3864305, 3865201,
3867649, 3868545, 3868873, 3869201, 3870097, 3870425, 3870524, 3870623,
3870908, 3871236, 3871335, 3871434, 3871719, 3872615, 3872900, 3873185,
3873996, 3874892, 3875220, 3875548, 3876444, 3876772, 3876871, 3876970,
3877255, 3877583, 3877682, 3877781, 3878066, 3878962, 3879247, 3879532,
3880343, 3882791, 3883687, 3884583, 3887031, 3887927, 3888212, 3888497,
3889308, 3890204, 3890489, 3890774, 3891585, 3894033, 3894844, 3895655,
3897932, 3900380, 3901276, 3902172, 3904620, 3905516, 3905844, 3906172,
3907068, 3907964, 3908292, 3908619, 3909515, 3911963, 3912859, 3913755,
3916203, 3917099, 3917427, 3917755, 3918651, 3918979, 3919078, 3919177,
3919462, 3919790, 3919889, 3919988, 3920273, 3921169, 3921454, 3921739,
3922550, 3923446, 3923774, 3924101, 3924997, 3925325, 3925424, 3925523,
3925808, 3926135, 3926234, 3926330, 3926615, 3927511, 3927796, 3928081,
3928892, 3931340, 3932236, 3933132, 3935580, 3936476, 3936761, 3937046,
3937857, 3938753, 3939038, 3939323, 3940134, 3942582, 3943393, 3944204,
3946481, 3953169, 3955617, 3958065, 3964753, 3967201, 3968097, 3968993,
3971441, 3973889, 3974785, 3975681, 3978129, 3984817, 3987265, 3989713,
3996401, 3998849, 3999745, 4000641, 4003089, 4003985, 4004270, 4004555,
4005366, 4006262, 4006547, 4006832, 4007643, 4010091, 4010902, 4011713,
4013990, 4016438, 4017334, 4018230, 4020678, 4021574, 4021859, 4022144,
4022955, 4023851, 4024136, 4024421, 4025232, 4027680, 4028491, 4029302,
4031579, 4038267, 4040715, 4043163, 4049851, 4052299, 4053110, 4053921,
4056198, 4058646, 4059457, 4060268, 4062545, 4069233, 4071510, 4073787,
4080134, 4082582, 4083478, 4084374, 4086822, 4087718, 4088046, 4088374,
4089270, 4090166, 4090494, 4090822, 4091718, 4094166, 4095062, 4095958,
4098406, 4099302, 4099630, 4099958, 4100854, 4101182, 4101281, 4101380,
4101665, 4101993, 4102092, 4102191, 4102476, 4103372, 4103657, 4103942,
4104753, 4105649, 4105977, 4106305, 4107201, 4107529, 4107628, 4107727,
4108012, 4108340, 4108439, 4108538, 4108823, 4109719, 4110004, 4110289,
4111100, 4113548, 4114444, 4115340, 4117788, 4118684, 4118969, 4119254,
4120065, 4120961, 4121246, 4121531, 4122342, 4124790, 4125601, 4126412,
4128689, 4129585, 4129913, 4130241, 4131137, 4131465, 4131564, 4131663,
4131948, 4132276, 4132375, 4132474, 4132759, 4133655, 4133940, 4134225,
4135036, 4135364, 4135463, 4135562, 4135847, 4135946, 4135963, 4135980,
4136038, 4136137, 4136154, 4136171, 4136229, 4136514, 4136572, 4136630,
4136821, 4137149, 4137248, 4137347, 4137632, 4137731, 4137748, 4137765,
4137823, 4137922, 4137939, 4137956, 4138014, 4138299, 4138357, 4138415,
4138606, 4139502, 4139787, 4140072, 4140883, 4141168, 4141226, 4141284,
4141475, 4141760, 4141818, 4141876, 4142067, 4142878, 4143069, 4143260,
4143852, 4144748, 4145076, 4145404, 4146300, 4146628, 4146727, 4146826,
4147111, 4147439, 4147538, 4147637, 4147922, 4148818, 4149103, 4149388,
4150199, 4150527, 4150626, 4150725, 4151010, 4151109, 4151126, 4151143,
4151201, 4151300, 4151317, 4151334, 4151392, 4151677, 4151735, 4151793,
4151984, 4152312, 4152411, 4152510, 4152795, 4152894, 4152911, 4152928,
4152986, 4153085, 4153102, 4153119, 4153177, 4153462, 4153520, 4153578,
4153769, 4154665, 4154950, 4155235, 4156046, 4156331, 4156389, 4156447,
4156638, 4156923, 4156981, 4157039, 4157230, 4158041, 4158232, 4158423,
4159015, 4161463, 4162359, 4163255, 4165703, 4166599, 4166884, 4167169,
4167980, 4168876, 4169161, 4169446, 4170257, 4172705, 4173516, 4174327,
4176604, 4177500, 4177785, 4178070, 4178881, 4179166, 4179224, 4179282,
4179473, 4179758, 4179816, 4179874, 4180065, 4180876, 4181067, 4181258,
4181850, 4182746, 4183031, 4183316, 4184127, 4184412, 4184470, 4184528,
4184719, 4185004, 4185062, 4185120, 4185311, 4186122, 4186313, 4186504,
4187096, 4189544, 4190355, 4191166, 4193443, 4194254, 4194445, 4194636,
4195228, 4196039, 4196230, 4196421, 4197013, 4199290, 4199882, 4200474,
4202259, 4204707, 4205603, 4206499, 4208947, 4209843, 4210171, 4210499,
4211395, 4212291, 4212619, 4212946, 4213842, 4216290, 4217186, 4218082,
4220530, 4221426, 4221754, 4222082, 4222978, 4223306, 4223405, 4223504,
4223789, 4224117, 4224216, 4224315, 4224600, 4225496, 4225781, 4226066,
4226877, 4227773, 4228101, 4228428, 4229324, 4229652, 4229751, 4229850,
4230135, 4230462, 4230561, 4230657, 4230942, 4231838, 4232123, 4232408,
4233219, 4235667, 4236563, 4237459, 4239907, 4240803, 4241088, 4241373,
4242184, 4243080, 4243365, 4243650, 4244461, 4246909, 4247720, 4248531,
4250808, 4251704, 4252032, 4252360, 4253256, 4253584, 4253683, 4253782,
4254067, 4254395, 4254494, 4254593, 4254878, 4255774, 4256059, 4256344,
4257155, 4257483, 4257582, 4257681, 4257966, 4258065, 4258082, 4258099,
4258157, 4258256, 4258273, 4258290, 4258348, 4258633, 4258691, 4258749,
4258940, 4259268, 4259367, 4259466, 4259751, 4259850, 4259867, 4259884,
4259942, 4260041, 4260058, 4260075, 4260133, 4260418, 4260476, 4260534,
4260725, 4261621, 4261906, 4262191, 4263002, 4263287, 4263345, 4263403,
4263594, 4263879, 4263937, 4263995, 4264186, 4264997, 4265188, 4265379,
4265971, 4266867, 4267195, 4267522, 4268418, 4268746, 4268845, 4268944,
4269229, 4269556, 4269655, 4269751, 4270036, 4270932, 4271217, 4271502,
4272313, 4272641, 4272740, 4272839, 4273124, 4273223, 4273240, 4273257,
4273315, 4273414, 4273431, 4273448, 4273506, 4273791, 4273849, 4273907,
4274098, 4274425, 4274524, 4274620, 4274905, 4275004, 4275021, 4275038,
4275096, 4275192, 4275209, 4275223, 4275281, 4275566, 4275624, 4275682,
4275873, 4276769, 4277054, 4277339, 4278150, 4278435, 4278493, 4278551,
4278742, 4279027, 4279085, 4279143, 4279334, 4280145, 4280336, 4280527,
4281119, 4283567, 4284463, 4285359, 4287807, 4288703, 4288988, 4289273,
4290084, 4290980, 4291265, 4291550, 4292361, 4294809, 4295620, 4296431,
4298708, 4299604, 4299889, 4300174, 4300985, 4301270, 4301328, 4301386,
4301577, 4301862, 4301920, 4301978, 4302169, 4302980, 4303171, 4303362,
4303954, 4304850, 4305135, 4305420, 4306231, 4306516, 4306574, 4306632,
4306823, 4307108, 4307166, 4307224, 4307415, 4308226, 4308417, 4308608,
4309200, 4311648, 4312459, 4313270, 4315547, 4316358, 4316549, 4316740,
4317332, 4318143, 4318334, 4318525, 4319117, 4321394, 4321986, 4322578,
4324363, 4331051, 4333499, 4335947, 4342635, 4345083, 4345979, 4346875,
4349323, 4351771, 4352667, 4353563, 4356011, 4362699, 4365147, 4367595,
4374283, 4376731, 4377627, 4378523, 4380971, 4381867, 4382152, 4382437,
4383248, 4384144, 4384429, 4384714, 4385525, 4387973, 4388784, 4389595,
4391872, 4394320, 4395216, 4396112, 4398560, 4399456, 4399741, 4400026,
4400837, 4401733, 4402018, 4402303, 4403114, 4405562, 4406373, 4407184,
4409461, 4416149, 4418597, 4421045, 4427733, 4430181, 4430992, 4431803,
4434080, 4436528, 4437339, 4438150, 4440427, 4447115, 4449392, 4451669,
4458016, 4460464, 4461360, 4462256, 4464704, 4465600, 4465885, 4466170,
4466981, 4467877, 4468162, 4468447, 4469258, 4471706, 4472517, 4473328,
4475605, 4476501, 4476786, 4477071, 4477882, 4478167, 4478225, 4478283,
4478474, 4478759, 4478817, 4478875, 4479066, 4479877, 4480068, 4480259,
4480851, 4481747, 4482032, 4482317, 4483128, 4483413, 4483471, 4483529,
4483720, 4484005, 4484063, 4484121, 4484312, 4485123, 4485314, 4485505,
4486097, 4488545, 4489356, 4490167, 4492444, 4493255, 4493446, 4493637,
4494229, 4495040, 4495231, 4495422, 4496014, 4498291, 4498883, 4499475,
4501260, 4503708, 4504604, 4505500, 4507948, 4508844, 4509129, 4509414,
4510225, 4511121, 4511406, 4511691, 4512502, 4514950, 4515761, 4516572,
4518849, 4519745, 4520030, 4520315, 4521126, 4521411, 4521469, 4521527,
4521718, 4522003, 4522061, 4522119, 4522310, 4523121, 4523312, 4523503,
4524095, 4524991, 4525276, 4525561, 4526372, 4526657, 4526715, 4526773,
4526964, 4527249, 4527307, 4527365, 4527556, 4528367, 4528558, 4528749,
4529341, 4531789, 4532600, 4533411, 4535688, 4536499, 4536690, 4536881,
4537473, 4538284, 4538475, 4538666, 4539258, 4541535, 4542127, 4542719,
4544504, 4551192, 4553640, 4556088, 4562776, 4565224, 4566035, 4566846,
4569123, 4571571, 4572382, 4573193, 4575470, 4582158, 4584435, 4586712,
4593059, 4595507, 4596318, 4597129, 4599406, 4600217, 4600408, 4600599,
4601191, 4602002, 4602193, 4602384, 4602976, 4605253, 4605845, 4606437,
4608222, 4610670, 4611481, 4612292, 4614569, 4615380, 4615571, 4615762,
4616354, 4617165, 4617356, 4617547, 4618139, 4620416, 4621008, 4621600,
4623385, 4630073, 4632350, 4634627, 4640974, 4643251, 4643843, 4644435,
4646220, 4648497, 4649089, 4649681, 4651466, 4657813, 4659598, 4661383,
4666629, 4684901, 4691589, 4698277, 4716549, 4723237, 4725685, 4728133,
4734821, 4741509, 4743957, 4746405, 4753093, 4771365, 4778053, 4784741,
4803013, 4809701, 4812149, 4814597, 4821285, 4823733, 4824629, 4825525,
4827973, 4830421, 4831317, 4832213, 4834661, 4841349, 4843797, 4846245,
4852933, 4859621, 4862069, 4864517, 4871205, 4873653, 4874549, 4875445,
4877893, 4880341, 4881237, 4882133, 4884581, 4891269, 4893717, 4896165,
4902853, 4921125, 4927813, 4934501, 4952773, 4959461, 4961909, 4964357,
4971045, 4977733, 4980181, 4982629, 4989317, 5007589, 5014277, 5020965,
5039237, 5045925, 5048373, 5050821, 5057509, 5059957, 5060853, 5061749,
5064197, 5066645, 5067541, 5068437, 5070885, 5077573, 5080021, 5082469,
5089157, 5091605, 5092501, 5093397, 5095845, 5096741, 5097026, 5097311,
5098122, 5099018, 5099303, 5099588, 5100399, 5102847, 5103658, 5104469,
5106746, 5109194, 5110090, 5110986, 5113434, 5114330, 5114615, 5114900,
5115711, 5116607, 5116892, 5117177, 5117988, 5120436, 5121247, 5122058,
5124335, 5131023, 5133471, 5135919, 5142607, 5145055, 5145866, 5146677,
5148954, 5151402, 5152213, 5153024, 5155301, 5161989, 5164266, 5166543,
5172890, 5179578, 5182026, 5184474, 5191162, 5193610, 5194506, 5195402,
5197850, 5200298, 5201194, 5202090, 5204538, 5211226, 5213674, 5216122,
5222810, 5225258, 5226154, 5227050, 5229498, 5230394, 5230679, 5230964,
5231775, 5232671, 5232956, 5233241, 5234052, 5236500, 5237311, 5238122,
5240399, 5242847, 5243743, 5244639, 5247087, 5247983, 5248268, 5248553,
5249364, 5250260, 5250545, 5250830, 5251641, 5254089, 5254900, 5255711,
5257988, 5264676, 5267124, 5269572, 5276260, 5278708, 5279519, 5280330,
5282607, 5285055, 5285866, 5286677, 5288954, 5295642, 5297919, 5300196,
5306543, 5324815, 5331503, 5338191, 5356463, 5363151, 5365599, 5368047,
5374735, 5381423, 5383871, 5386319, 5393007, 5411279, 5417967, 5424655,
5442927, 5449615, 5452063, 5454511, 5461199, 5463647, 5464458, 5465269,
5467546, 5469994, 5470805, 5471616, 5473893, 5480581, 5482858, 5485135,
5491482, 5498170, 5500618, 5503066, 5509754, 5512202, 5513013, 5513824,
5516101, 5518549, 5519360, 5520171, 5522448, 5529136, 5531413, 5533690,
5540037, 5558309, 5564997, 5571685, 5589957, 5596645, 5598922, 5601199,
5607546, 5614234, 5616511, 5618788, 5625135, 5643407, 5649754, 5656101,
5673690, 5680378, 5682826, 5685274, 5691962, 5694410, 5695306, 5696202,
5698650, 5701098, 5701994, 5702890, 5705338, 5712026, 5714474, 5716922,
5723610, 5726058, 5726954, 5727850, 5730298, 5731194, 5731479, 5731764,
5732575, 5733471, 5733756, 5734041, 5734852, 5737300, 5738111, 5738922,
5741199, 5743647, 5744543, 5745439, 5747887, 5748783, 5749068, 5749353,
5750164, 5751060, 5751345, 5751630, 5752441, 5754889, 5755700, 5756511,
5758788, 5765476, 5767924, 5770372, 5777060, 5779508, 5780319, 5781130,
5783407, 5785855, 5786666, 5787477, 5789754, 5796442, 5798719, 5800996,
5807343, 5809791, 5810687, 5811583, 5814031, 5814927, 5815212, 5815497,
5816308, 5817204, 5817489, 5817774, 5818585, 5821033, 5821844, 5822655,
5824932, 5825828, 5826113, 5826398, 5827209, 5827494, 5827552, 5827610,
5827801, 5828086, 5828144, 5828202, 5828393, 5829204, 5829395, 5829586,
5830178, 5831074, 5831359, 5831644, 5832455, 5832740, 5832798, 5832856,
5833047, 5833332, 5833390, 5833448, 5833639, 5834450, 5834641, 5834832,
5835424, 5837872, 5838683, 5839494, 5841771, 5842582, 5842773, 5842964,
5843556, 5844367, 5844558, 5844749, 5845341, 5847618, 5848210, 5848802,
5850587, 5853035, 5853931, 5854827, 5857275, 5858171, 5858456, 5858741,
5859552, 5860448, 5860733, 5861018, 5861829, 5864277, 5865088, 5865899,
5868176, 5869072, 5869357, 5869642, 5870453, 5870738, 5870796, 5870854,
5871045, 5871330, 5871388, 5871446, 5871637, 5872448, 5872639, 5872830,
5873422, 5874318, 5874603, 5874888, 5875699, 5875984, 5876042, 5876100,
5876291, 5876576, 5876634, 5876692, 5876883, 5877694, 5877885, 5878076,
5878668, 5881116, 5881927, 5882738, 5885015, 5885826, 5886017, 5886208,
5886800, 5887611, 5887802, 5887993, 5888585, 5890862, 5891454, 5892046,
5893831, 5900519, 5902967, 5905415, 5912103, 5914551, 5915362, 5916173,
5918450, 5920898, 5921709, 5922520, 5924797, 5931485, 5933762, 5936039,
5942386, 5944834, 5945645, 5946456, 5948733, 5949544, 5949735, 5949926,
5950518, 5951329, 5951520, 5951711, 5952303, 5954580, 5955172, 5955764,
5957549, 5959997, 5960808, 5961619, 5963896, 5964707, 5964898, 5965089,
5965681, 5966492, 5966683, 5966874, 5967466, 5969743, 5970335, 5970927,
5972712, 5979400, 5981677, 5983954, 5990301, 5992578, 5993170, 5993762,
5995547, 5997824, 5998416, 5999008, 6000793, 6007140, 6008925, 6010710,
6015956, 6022644, 6025092, 6027540, 6034228, 6036676, 6037572, 6038468,
6040916, 6043364, 6044260, 6045156, 6047604, 6054292, 6056740, 6059188,
6065876, 6068324, 6069220, 6070116, 6072564, 6073460, 6073745, 6074030,
6074841, 6075737, 6076022, 6076307, 6077118, 6079566, 6080377, 6081188,
6083465, 6085913, 6086809, 6087705, 6090153, 6091049, 6091334, 6091619,
6092430, 6093326, 6093611, 6093896, 6094707, 6097155, 6097966, 6098777,
6101054, 6107742, 6110190, 6112638, 6119326, 6121774, 6122585, 6123396,
6125673, 6128121, 6128932, 6129743, 6132020, 6138708, 6140985, 6143262,
6149609, 6152057, 6152953, 6153849, 6156297, 6157193, 6157478, 6157763,
6158574, 6159470, 6159755, 6160040, 6160851, 6163299, 6164110, 6164921,
6167198, 6168094, 6168379, 6168664, 6169475, 6169760, 6169818, 6169876,
6170067, 6170352, 6170410, 6170468, 6170659, 6171470, 6171661, 6171852,
6172444, 6173340, 6173625, 6173910, 6174721, 6175006, 6175064, 6175122,
6175313, 6175598, 6175656, 6175714, 6175905, 6176716, 6176907, 6177098,
6177690, 6180138, 6180949, 6181760, 6184037, 6184848, 6185039, 6185230,
6185822, 6186633, 6186824, 6187015, 6187607, 6189884, 6190476, 6191068,
6192853, 6195301, 6196197, 6197093, 6199541, 6200437, 6200722, 6201007,
6201818, 6202714, 6202999, 6203284, 6204095, 6206543, 6207354, 6208165,
6210442, 6211338, 6211623, 6211908, 6212719, 6213004, 6213062, 6213120,
6213311, 6213596, 6213654, 6213712, 6213903, 6214714, 6214905, 6215096,
6215688, 6216584, 6216869, 6217154, 6217965, 6218250, 6218308, 6218366,
6218557, 6218842, 6218900, 6218958, 6219149, 6219960, 6220151, 6220342,
6220934, 6223382, 6224193, 6225004, 6227281, 6228092, 6228283, 6228474,
6229066, 6229877, 6230068, 6230259, 6230851, 6233128, 6233720, 6234312,
6236097, 6242785, 6245233, 6247681, 6254369, 6256817, 6257628, 6258439,
6260716, 6263164, 6263975, 6264786, 6267063, 6273751, 6276028, 6278305,
6284652, 6287100, 6287911, 6288722, 6290999, 6291810, 6292001, 6292192,
6292784, 6293595, 6293786, 6293977, 6294569, 6296846, 6297438, 6298030,
6299815, 6302263, 6303074, 6303885, 6306162, 6306973, 6307164, 6307355,
6307947, 6308758, 6308949, 6309140, 6309732, 6312009, 6312601, 6313193,
6314978, 6321666, 6323943, 6326220, 6332567, 6334844, 6335436, 6336028,
6337813, 6340090, 6340682, 6341274, 6343059, 6349406, 6351191, 6352976,
6358222, 6376494, 6383182, 6389870, 6408142, 6414830, 6417278, 6419726,
6426414, 6433102, 6435550, 6437998, 6444686, 6462958, 6469646, 6476334,
6494606, 6501294, 6503742, 6506190, 6512878, 6515326, 6516137, 6516948,
6519225, 6521673, 6522484, 6523295, 6525572, 6532260, 6534537, 6536814,
6543161, 6549849, 6552297, 6554745, 6561433, 6563881, 6564692, 6565503,
6567780, 6570228, 6571039, 6571850, 6574127, 6580815, 6583092, 6585369,
6591716, 6609988, 6616676, 6623364, 6641636, 6648324, 6650601, 6652878,
6659225, 6665913, 6668190, 6670467, 6676814, 6695086, 6701433, 6707780,
6725369, 6732057, 6734505, 6736953, 6743641, 6746089, 6746900, 6747711,
6749988, 6752436, 6753247, 6754058, 6756335, 6763023, 6765300, 6767577,
6773924, 6776372, 6777183, 6777994, 6780271, 6781082, 6781273, 6781464,
6782056, 6782867, 6783058, 6783249, 6783841, 6786118, 6786710, 6787302,
6789087, 6791535, 6792346, 6793157, 6795434, 6796245, 6796436, 6796627,
6797219, 6798030, 6798221, 6798412, 6799004, 6801281, 6801873, 6802465,
6804250, 6810938, 6813215, 6815492, 6821839, 6824116, 6824708, 6825300,
6827085, 6829362, 6829954, 6830546, 6832331, 6838678, 6840463, 6842248,
6847494, 6854182, 6856630, 6859078, 6865766, 6868214, 6869025, 6869836,
6872113, 6874561, 6875372, 6876183, 6878460, 6885148, 6887425, 6889702,
6896049, 6898497, 6899308, 6900119, 6902396, 6903207, 6903398, 6903589,
6904181, 6904992, 6905183, 6905374, 6905966, 6908243, 6908835, 6909427,
6911212, 6913660, 6914471, 6915282, 6917559, 6918370, 6918561, 6918752,
6919344, 6920155, 6920346, 6920537, 6921129, 6923406, 6923998, 6924590,
6926375, 6933063, 6935340, 6937617, 6943964, 6946241, 6946833, 6947425,
6949210, 6951487, 6952079, 6952671, 6954456, 6960803, 6962588, 6964373,
6969619, 6987891, 6994579, 7001267, 7019539, 7026227, 7028504, 7030781,
7037128, 7043816, 7046093, 7048370, 7054717, 7072989, 7079336, 7085683,
7103272, 7109960, 7112237, 7114514, 7120861, 7123138, 7123730, 7124322,
7126107, 7128384, 7128976, 7129568, 7131353, 7137700, 7139485, 7141270,
7146516, 7153204, 7155481, 7157758, 7164105, 7166382, 7166974, 7167566,
7169351, 7171628, 7172220, 7172812, 7174597, 7180944, 7182729, 7184514,
7189760, 7208032, 7214379, 7220726, 7238315, 7244662, 7246447, 7248232,
7253478, 7259825, 7261610, 7263395, 7268641, 7286230, 7291476, 7296722,

0
src/core/short_code/internal/offset/range_prefix/offset_0x0.inc → src/core/short_code/internal/offset/constant/offset_0x0.inc

0
src/core/short_code/internal/offset/range_prefix/offset_0x1.inc → src/core/short_code/internal/offset/constant/offset_0x1.inc

0
src/core/short_code/internal/offset/range_prefix/offset_0x2.inc → src/core/short_code/internal/offset/constant/offset_0x2.inc

0
src/core/short_code/internal/offset/range_prefix/offset_0x4.inc → src/core/short_code/internal/offset/constant/offset_0x4.inc

0
src/core/short_code/internal/offset/range_prefix/offset_0x5.inc → src/core/short_code/internal/offset/constant/offset_0x5.inc

0
src/core/short_code/internal/offset/range_prefix/offset_0x6.inc → src/core/short_code/internal/offset/constant/offset_0x6.inc

0
src/core/short_code/internal/offset/range_prefix/offset_0x8.inc → src/core/short_code/internal/offset/constant/offset_0x8.inc

0
src/core/short_code/internal/offset/range_prefix/offset_0x9.inc → src/core/short_code/internal/offset/constant/offset_0x9.inc

0
src/core/short_code/internal/offset/range_prefix/offset_0xA.inc → src/core/short_code/internal/offset/constant/offset_0xA.inc

0
src/core/short_code/internal/offset/range_prefix/offset_0xC.inc → src/core/short_code/internal/offset/constant/offset_0xC.inc

0
src/core/short_code/internal/offset/range_prefix/offset_0xD.inc → src/core/short_code/internal/offset/constant/offset_0xD.inc

0
src/core/short_code/internal/offset/range_prefix/offset_0xE.inc → src/core/short_code/internal/offset/constant/offset_0xE.inc

68
src/core/short_code/internal/offset/offset.h

@ -0,0 +1,68 @@
#pragma once
#include <cstdint>
#include "utils/utility.h"
namespace klotski::codec {
/// This is the index for basic ranges, and its position (0 ~ 7311884) in all
/// basic ranges is located according to the first 12-bit (0 ~ 4095) within the
/// 32-bit `range`.
constexpr auto RANGES_GLOBAL_OFFSET = std::to_array<uint32_t>({
#include "constant/offset.inc"
});
/// This is the index for the range prefix. Given the case `head` and the first
/// 12-bit (0 ~ 4095) of the `range`, you can get the positions of all cases in
/// the current `head`. That is, according to the position of 2x2 block and the
/// `range`, the short code range is obtained.
constexpr auto RANGES_SUBSET_OFFSET = std::to_array({
std::to_array<uint32_t>({
#include "constant/offset_0x0.inc"
}),
std::to_array<uint32_t>({
#include "constant/offset_0x1.inc"
}),
std::to_array<uint32_t>({
#include "constant/offset_0x2.inc"
}),
{}, // offset_0x3
std::to_array<uint32_t>({
#include "constant/offset_0x4.inc"
}),
std::to_array<uint32_t>({
#include "constant/offset_0x5.inc"
}),
std::to_array<uint32_t>({
#include "constant/offset_0x6.inc"
}),
{}, // offset_0x7
std::to_array<uint32_t>({
#include "constant/offset_0x8.inc"
}),
std::to_array<uint32_t>({
#include "constant/offset_0x9.inc"
}),
std::to_array<uint32_t>({
#include "constant/offset_0xA.inc"
}),
{}, // offset_0xB
std::to_array<uint32_t>({
#include "constant/offset_0xC.inc"
}),
std::to_array<uint32_t>({
#include "constant/offset_0xD.inc"
}),
std::to_array<uint32_t>({
#include "constant/offset_0xE.inc"
}),
{}, // offset_0xF
});
} // namespace klotski::codec

47
src/core/short_code/internal/offset/range_prefix.h

@ -1,47 +0,0 @@
#pragma once
/// This is the index for the range prefix. Given the case `head` and the first
/// 12-bit (0 ~ 4095) of the `range`, you can get the positions of all cases in
/// the current `head`. That is, according to the position of 2x2 block and the
/// `range`, the short code range is obtained.
#include <cstdint>
namespace klotski::codec::offset {
// TODO: using std::array
constexpr uint32_t RANGE_PREFIX_OFFSET[16][4096] = {{
#include "range_prefix/offset_0x0.inc"
}, {
#include "range_prefix/offset_0x1.inc"
}, {
#include "range_prefix/offset_0x2.inc"
}, {
/// --------------- 0x3 ---------------
}, {
#include "range_prefix/offset_0x4.inc"
}, {
#include "range_prefix/offset_0x5.inc"
}, {
#include "range_prefix/offset_0x6.inc"
}, {
/// --------------- 0x7 ---------------
}, {
#include "range_prefix/offset_0x8.inc"
}, {
#include "range_prefix/offset_0x9.inc"
}, {
#include "range_prefix/offset_0xA.inc"
}, {
/// --------------- 0xB ---------------
}, {
#include "range_prefix/offset_0xC.inc"
}, {
#include "range_prefix/offset_0xD.inc"
}, {
#include "range_prefix/offset_0xE.inc"
}, {
/// --------------- 0xF ---------------
}};
} // namespace klotski::codec::offset
Loading…
Cancel
Save