diff --git a/op25/gr-op25_repeater/lib/p25p1_fdma.cc b/op25/gr-op25_repeater/lib/p25p1_fdma.cc index 163eee4..e239864 100644 --- a/op25/gr-op25_repeater/lib/p25p1_fdma.cc +++ b/op25/gr-op25_repeater/lib/p25p1_fdma.cc @@ -234,24 +234,37 @@ p25p1_fdma::process_duid(uint32_t const duid, uint32_t const nac, const uint8_t* void p25p1_fdma::process_HDU(const bit_vector& A) { + uint32_t MFID; + int i, j, k, ec; + uint32_t gly; + std::vector HB(63,0); // hexbit vector + std::string s = ""; + int failures = 0; + k = 0; if (d_debug >= 10) { fprintf (stderr, "%s NAC 0x%03x HDU: ", logts.get(), framer->nac); } - uint32_t MFID; - int i, j, k, ec; - std::vector HB(63,0); // hexbit vector - std::string s = ""; - k = 0; for (i = 0; i < 36; i ++) { uint32_t CW = 0; for (j = 0; j < 18; j++) { // 18 bits / cw CW = (CW << 1) + A [ hdu_codeword_bits[k++] ]; } - HB[27 + i] = gly24128Dec(CW) & 63; + gly = gly24128Dec(CW); + HB[27 + i] = gly & 63; + if (CW ^ gly24128Enc(gly)) + /* "failures" in this context means any mismatch, + * disregarding how "recoverable" the error may be + * and disregarding how many bits may mismatch */ + failures += 1; } ec = rs16.decode(HB); // Reed Solomon (36,20,17) error correction - + if (failures > 6) { + if (d_debug >= 10) { + fprintf (stderr, "ESS computation suppressed: failed %d of 36, ec=%d\n", failures, ec); + } + return; + } if (ec >= 0) { j = 27; // 72 bit MI for (i = 0; i < 9;) { @@ -270,6 +283,7 @@ p25p1_fdma::process_HDU(const bit_vector& A) for (i = 0; i < 9; i++) { fprintf(stderr, "%02x ", ess_mi[i]); } + fprintf(stderr, ", Golay failures=%d of 36, ec=%d", failures, ec); } s = "{\"nac\" : " + std::to_string(framer->nac) + ", \"algid\" : " + std::to_string(ess_algid) + ", \"alg\" : \"" + lookup(ess_algid, ALGIDS, ALGIDS_SZ) + "\", \"keyid\": " + std::to_string(ess_keyid) + "}"; send_msg(s, -3); @@ -280,12 +294,13 @@ p25p1_fdma::process_HDU(const bit_vector& A) } } -void +int p25p1_fdma::process_LLDU(const bit_vector& A, std::vector& HB) -{ +{ // return count of hamming failures process_duid(framer->duid, framer->nac, NULL, 0); int i, j, k; + int failures = 0; k = 0; for (i = 0; i < 24; i ++) { // 24 10-bit codewords uint32_t CW = 0; @@ -293,66 +308,89 @@ p25p1_fdma::process_LLDU(const bit_vector& A, std::vector& HB) CW = (CW << 1) + A[ imbe_ldu_ls_data_bits[k++] ]; } HB[39 + i] = hmg1063Dec( CW >> 4, CW & 0x0f ); + if (CW ^ ((HB[39+i] << 4) + hmg1063EncTbl[HB[39+i]])) + failures += 1; } + return failures; } void p25p1_fdma::process_LDU1(const bit_vector& A) { + int hmg_failures; if (d_debug >= 10) { fprintf (stderr, "%s NAC 0x%03x LDU1: ", logts.get(), framer->nac); } std::vector HB(63,0); // hexbit vector - process_LLDU(A, HB); - process_LCW(HB); + hmg_failures = process_LLDU(A, HB); + if (hmg_failures < 6) + process_LCW(HB); + else { + if (d_debug >= 10) { + fprintf (stderr, " (LCW computation suppressed"); + } + } if (d_debug >= 10) { + fprintf(stderr, ", Hamming failures=%d of 24", hmg_failures); fprintf (stderr, "\n"); } - process_voice(A); + // LDUx frames with exactly 20 failures seem to be not uncommon (and deliberate?) + // a TDU almost always immediately follows these code violations + if (hmg_failures < 16) + process_voice(A); } void p25p1_fdma::process_LDU2(const bit_vector& A) { std::string s = ""; + int hmg_failures; if (d_debug >= 10) { fprintf (stderr, "%s NAC 0x%03x LDU2: ", logts.get(), framer->nac); } std::vector HB(63,0); // hexbit vector - process_LLDU(A, HB); + hmg_failures = process_LLDU(A, HB); - int i, j, ec; - ec = rs8.decode(HB); // Reed Solomon (24,16,9) error correction - if (ec >= 0) { // save info if good decode - j = 39; // 72 bit MI - for (i = 0; i < 9;) { - ess_mi[i++] = (uint8_t) (HB[j ] << 2) + (HB[j+1] >> 4); - ess_mi[i++] = (uint8_t) ((HB[j+1] & 0x0f) << 4) + (HB[j+2] >> 2); - ess_mi[i++] = (uint8_t) ((HB[j+2] & 0x03) << 6) + HB[j+3]; - j += 4; - } - ess_algid = (HB[j ] << 2) + (HB[j+1] >> 4); // 8 bit AlgId - ess_keyid = ((HB[j+1] & 0x0f) << 12) + (HB[j+2] << 6) + HB[j+3]; // 16 bit KeyId - - if (d_debug >= 10) { - fprintf(stderr, "ESS: algid=%x, keyid=%x, mi=", ess_algid, ess_keyid); - for (int i = 0; i < 9; i++) { - fprintf(stderr, "%02x ", ess_mi[i]); + int i, j, ec=0; + if (hmg_failures < 6) { + ec = rs8.decode(HB); // Reed Solomon (24,16,9) error correction + if (ec >= 0) { // save info if good decode + j = 39; // 72 bit MI + for (i = 0; i < 9;) { + ess_mi[i++] = (uint8_t) (HB[j ] << 2) + (HB[j+1] >> 4); + ess_mi[i++] = (uint8_t) ((HB[j+1] & 0x0f) << 4) + (HB[j+2] >> 2); + ess_mi[i++] = (uint8_t) ((HB[j+2] & 0x03) << 6) + HB[j+3]; + j += 4; } + ess_algid = (HB[j ] << 2) + (HB[j+1] >> 4); // 8 bit AlgId + ess_keyid = ((HB[j+1] & 0x0f) << 12) + (HB[j+2] << 6) + HB[j+3]; // 16 bit KeyId + + if (d_debug >= 10) { + fprintf(stderr, "ESS: algid=%x, keyid=%x, mi=", ess_algid, ess_keyid); + for (int i = 0; i < 9; i++) { + fprintf(stderr, "%02x ", ess_mi[i]); + } + } + s = "{\"nac\" : " + std::to_string(framer->nac) + ", \"algid\" : " + std::to_string(ess_algid) + ", \"alg\" : \"" + lookup(ess_algid, ALGIDS, ALGIDS_SZ) + "\", \"keyid\": " + std::to_string(ess_keyid) + "}"; + send_msg(s, -3); + } + } else { + if (d_debug >= 10) { + fprintf (stderr, " (ESS computation suppressed)"); } - s = "{\"nac\" : " + std::to_string(framer->nac) + ", \"algid\" : " + std::to_string(ess_algid) + ", \"alg\" : \"" + lookup(ess_algid, ALGIDS, ALGIDS_SZ) + "\", \"keyid\": " + std::to_string(ess_keyid) + "}"; - send_msg(s, -3); } if (d_debug >= 10) { + fprintf(stderr, ", Hamming failures=%d of 24, ec=%d", hmg_failures, ec); fprintf (stderr, "\n"); } - process_voice(A); + if (hmg_failures < 16) + process_voice(A); } void diff --git a/op25/gr-op25_repeater/lib/p25p1_fdma.h b/op25/gr-op25_repeater/lib/p25p1_fdma.h index 0778f7a..e7053ff 100644 --- a/op25/gr-op25_repeater/lib/p25p1_fdma.h +++ b/op25/gr-op25_repeater/lib/p25p1_fdma.h @@ -47,7 +47,7 @@ namespace gr { void process_duid(uint32_t const duid, uint32_t const nac, const uint8_t* buf, const int len); void process_HDU(const bit_vector& A); void process_LCW(std::vector& HB); - void process_LLDU(const bit_vector& A, std::vector& HB); + int process_LLDU(const bit_vector& A, std::vector& HB); void process_LDU1(const bit_vector& A); void process_LDU2(const bit_vector& A); void process_TTDU(); diff --git a/op25/gr-op25_repeater/lib/p25p2_vf.cc b/op25/gr-op25_repeater/lib/p25p2_vf.cc index e593ea7..592befe 100644 --- a/op25/gr-op25_repeater/lib/p25p2_vf.cc +++ b/op25/gr-op25_repeater/lib/p25p2_vf.cc @@ -20,6 +20,7 @@ #include #include #include +#include "op25_golay.h" #include "p25p2_vf.h" #include "rs.h" diff --git a/op25/gr-op25_repeater/lib/rs.cc b/op25/gr-op25_repeater/lib/rs.cc index d1fabe3..272776e 100644 --- a/op25/gr-op25_repeater/lib/rs.cc +++ b/op25/gr-op25_repeater/lib/rs.cc @@ -4,7 +4,6 @@ #include #include #include -#include #ifdef DEBUG /* @@ -157,6 +156,526 @@ static const uint32_t gly23127DecTbl[2048] = { 4718595, 16387, 16387, 16386, 1048579, 2138115, 65539, 16387, 2099203, 69635, 1343491, 16387, 131075, 262147, 4206595, 526339, 1048579, 69635, 141315, 16387, 1048578, 1048579, 1048579, 4456451, 69635, 69634, 524291, 69635, 1048579, 69635, 2113539, 163843 }; +static const uint32_t gly24128EncTbl[4096] = { + 0, 6379, 10558, 12757, 19095, 21116, 25513, 31554, + 36294, 38189, 42232, 48147, 51025, 57274, 61039, 63108, + 66407, 72588, 76377, 78514, 84464, 86299, 90318, 96293, + 102049, 104010, 108447, 114548, 115766, 122077, 126216, 128483, + 132813, 138790, 143347, 145176, 150618, 152753, 157028, 163215, + 166667, 168928, 172597, 178910, 180636, 186743, 190626, 192585, + 198058, 204097, 208020, 210047, 216893, 219094, 222723, 229096, + 231532, 233607, 237906, 244153, 246523, 252432, 256965, 258862, + 265625, 267634, 271527, 277580, 280334, 286693, 290352, 292571, + 295007, 301236, 305505, 307594, 314056, 315939, 320502, 326429, + 331518, 333333, 337856, 343851, 345193, 351362, 355671, 357820, + 361272, 367571, 371206, 373485, 379311, 381252, 385169, 391290, + 396116, 398271, 402026, 408193, 410051, 416040, 420093, 421910, + 427666, 433785, 438188, 440135, 445445, 447726, 451899, 458192, + 460851, 463064, 467213, 473574, 475812, 481871, 486298, 488305, + 493045, 498974, 502987, 504864, 511842, 513929, 517724, 523959, + 525274, 531249, 535268, 537103, 543053, 545190, 548979, 555160, + 560668, 562935, 567074, 573385, 574603, 580704, 585141, 587102, + 590013, 596054, 600451, 602472, 608810, 611009, 615188, 621567, + 626043, 628112, 631877, 638126, 641004, 646919, 650962, 652857, + 656663, 663036, 666665, 668866, 675712, 677739, 681662, 687701, + 690385, 692282, 696815, 702724, 705094, 711341, 715640, 717715, + 722544, 728731, 733006, 735141, 740583, 742412, 746969, 752946, + 756662, 758621, 762504, 768611, 770337, 776650, 780319, 782580, + 790083, 792232, 796541, 802710, 804052, 810047, 814570, 816385, + 820101, 826222, 830139, 832080, 837906, 840185, 843820, 850119, + 855332, 857551, 861210, 867569, 870323, 876376, 880269, 882278, + 884962, 890889, 895452, 897335, 903797, 905886, 910155, 916384, + 919694, 921701, 926128, 932187, 934425, 940786, 944935, 947148, + 951624, 957859, 961654, 963741, 970719, 972596, 976609, 982538, + 986089, 987906, 991959, 997948, 999806, 1005973, 1009728, 1011883, + 1017391, 1023684, 1027857, 1030138, 1035448, 1037395, 1041798, 1047917, + 1050548, 1056607, 1060490, 1062497, 1068323, 1070536, 1074205, 1080566, + 1084018, 1086105, 1090380, 1096615, 1097957, 1103886, 1108443, 1110320, + 1115347, 1121336, 1125869, 1127686, 1134148, 1136303, 1140602, 1146769, + 1149205, 1151486, 1155115, 1161408, 1164162, 1170281, 1174204, 1176151, + 1180025, 1186194, 1189959, 1192108, 1199086, 1200901, 1204944, 1210939, + 1215679, 1217620, 1222017, 1228138, 1230376, 1236675, 1240854, 1243133, + 1245726, 1252085, 1256224, 1258443, 1263753, 1265762, 1270199, 1276252, + 1282008, 1283891, 1287910, 1293837, 1295695, 1301924, 1305713, 1307802, + 1313325, 1315526, 1319699, 1326072, 1327290, 1333329, 1337732, 1339759, + 1345515, 1351424, 1355477, 1357374, 1363324, 1365399, 1369154, 1375401, + 1378634, 1380769, 1384564, 1390751, 1393629, 1399606, 1403619, 1405448, + 1410188, 1416295, 1420722, 1422681, 1429019, 1431280, 1435429, 1441742, + 1445088, 1446923, 1451486, 1457461, 1459831, 1466012, 1470281, 1472418, + 1474854, 1481165, 1484824, 1487091, 1493937, 1495898, 1499791, 1505892, + 1511303, 1513324, 1517241, 1523282, 1525008, 1531387, 1535022, 1537221, + 1540673, 1546922, 1551231, 1553300, 1558742, 1560637, 1565160, 1571075, + 1573998, 1580165, 1584464, 1586619, 1593081, 1594898, 1599431, 1605420, + 1608104, 1610051, 1613974, 1620093, 1622847, 1629140, 1632769, 1635050, + 1640201, 1646562, 1650231, 1652444, 1658270, 1660277, 1664160, 1670219, + 1673935, 1675812, 1680369, 1686298, 1687640, 1693875, 1698150, 1700237, + 1704611, 1710664, 1715101, 1717110, 1722420, 1724639, 1728778, 1735137, + 1740645, 1742734, 1746523, 1752752, 1754610, 1760537, 1764556, 1766439, + 1769924, 1775919, 1779962, 1781777, 1788755, 1790904, 1794669, 1800838, + 1805314, 1807593, 1811772, 1818071, 1820309, 1826430, 1830827, 1832768, + 1837559, 1839388, 1843401, 1849378, 1852256, 1858443, 1862238, 1864373, + 1868849, 1875162, 1879311, 1881572, 1887910, 1889869, 1894296, 1900403, + 1903248, 1905275, 1909678, 1915717, 1916935, 1923308, 1927481, 1929682, + 1935190, 1941437, 1945192, 1947267, 1953217, 1955114, 1959167, 1965076, + 1969978, 1972177, 1975812, 1982191, 1983917, 1989958, 1993875, 1995896, + 1999612, 2005527, 2010050, 2011945, 2017387, 2019456, 2023765, 2030014, + 2034781, 2036918, 2041187, 2047368, 2049738, 2055713, 2060276, 2062111, + 2064795, 2070896, 2074789, 2076750, 2083596, 2085863, 2089522, 2095833, + 2101096, 2103171, 2106966, 2113213, 2115071, 2120980, 2124993, 2126890, + 2130606, 2136645, 2141072, 2143099, 2148409, 2150610, 2154759, 2161132, + 2165775, 2168036, 2172209, 2178522, 2180760, 2186867, 2191270, 2193229, + 2195913, 2201890, 2205943, 2207772, 2214750, 2216885, 2220640, 2226827, + 2230693, 2232654, 2236571, 2242672, 2245426, 2251737, 2255372, 2257639, + 2262115, 2268296, 2272605, 2274742, 2281204, 2283039, 2287562, 2293537, + 2296514, 2298409, 2302972, 2308887, 2310229, 2316478, 2320747, 2322816, + 2328324, 2334703, 2338362, 2340561, 2346387, 2348408, 2352301, 2358342, + 2360049, 2365978, 2370511, 2372388, 2377830, 2379917, 2384216, 2390451, + 2395959, 2398172, 2401801, 2408162, 2409888, 2415947, 2419870, 2421877, + 2425238, 2431357, 2435240, 2437187, 2444033, 2446314, 2449983, 2456276, + 2460752, 2462907, 2467182, 2473349, 2475719, 2481708, 2486265, 2488082, + 2491452, 2497751, 2501890, 2504169, 2510507, 2512448, 2516885, 2523006, + 2525690, 2527505, 2531524, 2537519, 2540397, 2546566, 2550355, 2552504, + 2557787, 2564016, 2567781, 2569870, 2575820, 2577703, 2581746, 2587673, + 2591389, 2593398, 2597795, 2603848, 2605066, 2611425, 2615604, 2617823, + 2624690, 2626649, 2631052, 2637159, 2639397, 2645710, 2649883, 2652144, + 2654580, 2660767, 2664522, 2666657, 2673635, 2675464, 2679517, 2685494, + 2691029, 2692926, 2696939, 2702848, 2704706, 2710953, 2714748, 2716823, + 2720275, 2726648, 2730797, 2732998, 2738308, 2740335, 2744762, 2750801, + 2755199, 2757268, 2761537, 2767786, 2769128, 2775043, 2779606, 2781501, + 2787257, 2793298, 2797191, 2799212, 2805038, 2807237, 2810896, 2817275, + 2820376, 2822643, 2826278, 2832589, 2835343, 2841444, 2845361, 2847322, + 2852062, 2858037, 2862560, 2864395, 2870857, 2872994, 2877303, 2883484, + 2883883, 2890176, 2893845, 2896126, 2902972, 2904919, 2908802, 2914921, + 2919661, 2921478, 2926035, 2932024, 2934394, 2940561, 2944836, 2946991, + 2949708, 2955943, 2960242, 2962329, 2967771, 2969648, 2974181, 2980110, + 2985866, 2987873, 2991796, 2997855, 2999581, 3005942, 3009571, 3011784, + 3016678, 3022605, 3026648, 3028531, 3034481, 3036570, 3040335, 3046564, + 3050016, 3052235, 3056414, 3062773, 3063991, 3070044, 3074441, 3076450, + 3081345, 3087466, 3091903, 3093844, 3100182, 3102461, 3106600, 3112899, + 3115335, 3117484, 3121273, 3127442, 3130320, 3136315, 3140334, 3142149, + 3147996, 3149879, 3154402, 3160329, 3162699, 3168928, 3173237, 3175326, + 3179802, 3186161, 3189796, 3192015, 3198861, 3200870, 3204787, 3210840, + 3214267, 3216208, 3220101, 3226222, 3227948, 3234247, 3237906, 3240185, + 3245693, 3251862, 3256131, 3258280, 3263722, 3265537, 3270100, 3276095, + 3280401, 3282682, 3286831, 3293124, 3294342, 3300461, 3304888, 3306835, + 3310551, 3316540, 3320553, 3322370, 3328320, 3330475, 3334270, 3340437, + 3345782, 3347869, 3351624, 3357859, 3360737, 3366666, 3370719, 3372596, + 3375280, 3381339, 3385742, 3387749, 3394087, 3396300, 3400473, 3406834, + 3409221, 3415470, 3419259, 3421328, 3428306, 3430201, 3434220, 3440135, + 3442819, 3444840, 3449277, 3455318, 3457556, 3463935, 3468074, 3470273, + 3474978, 3481289, 3485468, 3487735, 3493045, 3495006, 3499403, 3505504, + 3509220, 3511055, 3515098, 3521073, 3522931, 3529112, 3532877, 3535014, + 3539848, 3545955, 3549878, 3551837, 3557663, 3559924, 3563553, 3569866, + 3575374, 3577509, 3581808, 3587995, 3589337, 3595314, 3599847, 3601676, + 3604719, 3610628, 3615185, 3617082, 3623544, 3625619, 3629894, 3636141, + 3640617, 3642818, 3646487, 3652860, 3655614, 3661653, 3665536, 3667563, + 3672838, 3675117, 3678776, 3685075, 3686801, 3692922, 3696815, 3698756, + 3704512, 3710507, 3715070, 3716885, 3722327, 3724476, 3728745, 3734914, + 3737697, 3739786, 3744095, 3750324, 3752694, 3758621, 3763144, 3765027, + 3769767, 3775820, 3779737, 3781746, 3788592, 3790811, 3794446, 3800805, + 3804619, 3806496, 3810549, 3816478, 3819356, 3825591, 3829346, 3831433, + 3833869, 3840230, 3844403, 3846616, 3852954, 3854961, 3859364, 3865423, + 3870380, 3872327, 3876754, 3882873, 3884091, 3890384, 3894533, 3896814, + 3900266, 3906433, 3910228, 3912383, 3918333, 3920150, 3924163, 3930152, + 3933855, 3939956, 3944353, 3946314, 3951624, 3953891, 3958070, 3964381, + 3967833, 3969970, 3973735, 3979916, 3981774, 3987749, 3991792, 3993627, + 3999224, 4005139, 4009158, 4011053, 4018031, 4020100, 4023889, 4030138, + 4032574, 4034773, 4038912, 4045291, 4047529, 4053570, 4058007, 4060028, + 4063314, 4069561, 4073836, 4075911, 4082373, 4084270, 4088827, 4094736, + 4099476, 4101503, 4105386, 4111425, 4114179, 4120552, 4124221, 4126422, + 4129589, 4135902, 4139531, 4141792, 4147618, 4149577, 4153500, 4159607, + 4165363, 4167192, 4171725, 4177702, 4179044, 4185231, 4189530, 4191665, + 4195899, 4202192, 4206341, 4208622, 4213932, 4215879, 4220306, 4226425, + 4230141, 4231958, 4235971, 4241960, 4243818, 4249985, 4253780, 4255935, + 4261212, 4267447, 4271202, 4273289, 4280267, 4282144, 4286197, 4292126, + 4294810, 4296817, 4301220, 4307279, 4309517, 4315878, 4320051, 4322264, + 4325622, 4331549, 4336072, 4337955, 4344417, 4346506, 4350815, 4357044, + 4361520, 4363739, 4367374, 4373733, 4376487, 4382540, 4386457, 4388466, + 4391825, 4397946, 4401839, 4403780, 4409606, 4411885, 4415544, 4421843, + 4427351, 4429500, 4433769, 4439938, 4441280, 4447275, 4451838, 4453653, + 4459426, 4461385, 4465308, 4471415, 4473141, 4479454, 4483083, 4485344, + 4490852, 4497039, 4501338, 4503473, 4508915, 4510744, 4515277, 4521254, + 4524229, 4526126, 4530683, 4536592, 4538962, 4545209, 4549484, 4551559, + 4556035, 4562408, 4566077, 4568278, 4575124, 4577151, 4581034, 4587073, + 4590959, 4593028, 4596817, 4603066, 4605944, 4611859, 4615878, 4617773, + 4620457, 4626498, 4630935, 4632956, 4639294, 4641493, 4645632, 4652011, + 4656648, 4658915, 4663094, 4669405, 4670623, 4676724, 4681121, 4683082, + 4686798, 4692773, 4696816, 4698651, 4704601, 4706738, 4710503, 4716684, + 4720097, 4726026, 4730079, 4731956, 4738934, 4741021, 4744776, 4751011, + 4753447, 4755660, 4759833, 4766194, 4768432, 4774491, 4778894, 4780901, + 4785798, 4791917, 4796344, 4798291, 4803601, 4805882, 4810031, 4816324, + 4819776, 4821931, 4825726, 4831893, 4833751, 4839740, 4843753, 4845570, + 4850476, 4856775, 4860434, 4862713, 4868539, 4870480, 4874373, 4880494, + 4886250, 4888065, 4892628, 4898623, 4899965, 4906134, 4910403, 4912552, + 4915275, 4921504, 4925813, 4927902, 4934364, 4936247, 4940770, 4946697, + 4951437, 4953446, 4957363, 4963416, 4966170, 4972529, 4976164, 4978383, + 4982904, 4984979, 4989254, 4995501, 4997871, 5003780, 5008337, 5010234, + 5014974, 5021013, 5024896, 5026923, 5033769, 5035970, 5039639, 5046012, + 5049119, 5051380, 5055009, 5061322, 5063048, 5069155, 5073078, 5075037, + 5080793, 5086770, 5091303, 5093132, 5098574, 5100709, 5105008, 5111195, + 5115573, 5117534, 5121931, 5128032, 5129250, 5135561, 5139740, 5142007, + 5145459, 5151640, 5155405, 5157542, 5163492, 5165327, 5169370, 5175345, + 5180882, 5182777, 5186796, 5192711, 5195589, 5201838, 5205627, 5207696, + 5210132, 5216511, 5220650, 5222849, 5229187, 5231208, 5235645, 5241686, + 5243279, 5249380, 5253297, 5255258, 5262104, 5264371, 5268006, 5274317, + 5278793, 5280930, 5285239, 5291420, 5293790, 5299765, 5304288, 5306123, + 5309160, 5315075, 5319638, 5321533, 5326975, 5329044, 5333313, 5339562, + 5345070, 5347269, 5350928, 5357307, 5359033, 5365074, 5368967, 5370988, + 5375810, 5382057, 5385852, 5387927, 5393877, 5395774, 5399787, 5405696, + 5409412, 5411439, 5415866, 5421905, 5423123, 5429496, 5433645, 5435846, + 5440549, 5446862, 5451035, 5453296, 5459634, 5461593, 5465996, 5472103, + 5474787, 5476616, 5480669, 5486646, 5489524, 5495711, 5499466, 5501601, + 5508118, 5510397, 5514536, 5520835, 5523073, 5529194, 5533631, 5535572, + 5538256, 5544251, 5548270, 5550085, 5557063, 5559212, 5563001, 5569170, + 5574513, 5576602, 5580367, 5586596, 5588454, 5594381, 5598424, 5600307, + 5604023, 5610076, 5614473, 5616482, 5621792, 5624011, 5628190, 5634549, + 5638875, 5640752, 5645285, 5651214, 5652556, 5658791, 5663090, 5665177, + 5670685, 5677046, 5680675, 5682888, 5688714, 5690721, 5694644, 5700703, + 5704124, 5706071, 5709954, 5716073, 5718827, 5725120, 5728789, 5731070, + 5735546, 5741713, 5745988, 5748143, 5754605, 5756422, 5760979, 5766968, + 5767765, 5774014, 5778283, 5780352, 5785794, 5787689, 5792252, 5798167, + 5803923, 5805944, 5809837, 5815878, 5817604, 5823983, 5827642, 5829841, + 5833010, 5839321, 5842956, 5845223, 5852069, 5854030, 5857947, 5864048, + 5868788, 5870623, 5875146, 5881121, 5883491, 5889672, 5893981, 5896118, + 5899416, 5905523, 5909926, 5911885, 5918223, 5920484, 5924657, 5930970, + 5933406, 5935541, 5939296, 5945483, 5948361, 5954338, 5958391, 5960220, + 5965823, 5971732, 5975745, 5977642, 5983592, 5985667, 5989462, 5995709, + 5999161, 6001362, 6005511, 6011884, 6013102, 6019141, 6023568, 6025595, + 6033356, 6035239, 6039282, 6045209, 6047067, 6053296, 6057061, 6059150, + 6062602, 6068961, 6073140, 6075359, 6080669, 6082678, 6087075, 6093128, + 6098091, 6100032, 6104469, 6110590, 6112828, 6119127, 6123266, 6125545, + 6127981, 6134150, 6137939, 6140088, 6147066, 6148881, 6152900, 6158895, + 6162689, 6164970, 6168639, 6174932, 6177686, 6183805, 6187688, 6189635, + 6194375, 6200364, 6204921, 6206738, 6213200, 6215355, 6219630, 6225797, + 6228582, 6230669, 6234968, 6241203, 6242545, 6248474, 6253007, 6254884, + 6260640, 6266699, 6270622, 6272629, 6278455, 6280668, 6284297, 6290658, + 6293843, 6295992, 6299757, 6305926, 6308804, 6314799, 6318842, 6320657, + 6325397, 6331518, 6335915, 6337856, 6344194, 6346473, 6350652, 6356951, + 6359604, 6361823, 6365962, 6372321, 6373539, 6379592, 6384029, 6386038, + 6391794, 6397721, 6401740, 6403623, 6409573, 6411662, 6415451, 6421680, + 6426526, 6428533, 6432416, 6438475, 6440201, 6446562, 6450231, 6452444, + 6455896, 6462131, 6466406, 6468493, 6473935, 6475812, 6480369, 6486298, + 6491385, 6493202, 6497735, 6503724, 6506094, 6512261, 6516560, 6518715, + 6521151, 6527444, 6531073, 6533354, 6540200, 6542147, 6546070, 6552189, + 6554826, 6560801, 6565364, 6567199, 6573661, 6575798, 6580067, 6586248, + 6588684, 6590951, 6594610, 6600921, 6603675, 6609776, 6613669, 6615630, + 6621101, 6627142, 6631059, 6633080, 6638906, 6641105, 6644740, 6651119, + 6654571, 6656640, 6660949, 6667198, 6668540, 6674455, 6678978, 6680873, + 6685191, 6691564, 6695737, 6697938, 6703248, 6705275, 6709678, 6715717, + 6721473, 6723370, 6727423, 6733332, 6735190, 6741437, 6745192, 6747267, + 6750560, 6756747, 6760542, 6762677, 6769655, 6771484, 6775497, 6781474, + 6786214, 6788173, 6792600, 6798707, 6800945, 6807258, 6811407, 6813668, + 6818441, 6820450, 6824887, 6830940, 6832158, 6838517, 6842656, 6844875, + 6850383, 6856612, 6860401, 6862490, 6868440, 6870323, 6874342, 6880269, + 6883822, 6885637, 6889680, 6895675, 6898553, 6904722, 6908487, 6910636, + 6915112, 6921411, 6925590, 6927869, 6934207, 6936148, 6940545, 6946666, + 6949956, 6952111, 6956410, 6962577, 6964947, 6970936, 6975469, 6977286, + 6979970, 6986089, 6990012, 6991959, 6998805, 7001086, 7004715, 7011008, + 7016227, 7018440, 7022109, 7028470, 7030196, 7036255, 7040138, 7042145, + 7045861, 7051790, 7056347, 7058224, 7063666, 7065753, 7070028, 7076263, + 7079696, 7086075, 7089710, 7091909, 7097735, 7099756, 7103673, 7109714, + 7113430, 7115325, 7119848, 7125763, 7127105, 7133354, 7137663, 7139732, + 7144567, 7150748, 7155017, 7157154, 7163616, 7165451, 7170014, 7175989, + 7178673, 7180634, 7184527, 7190628, 7193382, 7199693, 7203352, 7205619, + 7209437, 7215414, 7219427, 7221256, 7228234, 7230369, 7234164, 7240351, + 7244827, 7247088, 7251237, 7257550, 7259788, 7265895, 7270322, 7272281, + 7275194, 7281233, 7285636, 7287663, 7292973, 7295174, 7299347, 7305720, + 7311228, 7313303, 7317058, 7323305, 7325163, 7331072, 7335125, 7337022, + 7343847, 7345676, 7350233, 7356210, 7357552, 7363739, 7368014, 7370149, + 7373601, 7379914, 7383583, 7385844, 7391670, 7393629, 7397512, 7403619, + 7409024, 7411051, 7414974, 7421013, 7423767, 7430140, 7433769, 7435970, + 7438406, 7444653, 7448952, 7451027, 7457489, 7459386, 7463919, 7469828, + 7473194, 7475393, 7479572, 7485951, 7488189, 7494230, 7498627, 7500648, + 7505388, 7511303, 7515346, 7517241, 7524219, 7526288, 7530053, 7536302, + 7539533, 7541670, 7545459, 7551640, 7553498, 7559473, 7563492, 7565327, + 7571083, 7577184, 7581621, 7583582, 7588892, 7591159, 7595298, 7601609, + 7603070, 7609237, 7612992, 7615147, 7621097, 7622914, 7626967, 7632956, + 7638712, 7640659, 7645062, 7651181, 7652399, 7658692, 7662865, 7665146, + 7667737, 7674098, 7678247, 7680460, 7686798, 7688805, 7693232, 7699291, + 7704031, 7705908, 7709921, 7715850, 7718728, 7724963, 7728758, 7730845, + 7734707, 7740760, 7744653, 7746662, 7753508, 7755727, 7759386, 7765745, + 7768181, 7770270, 7774539, 7780768, 7783138, 7789065, 7793628, 7795511, + 7800532, 7806527, 7811050, 7812865, 7818307, 7820456, 7824765, 7830934, + 7834386, 7836665, 7840300, 7846599, 7848325, 7854446, 7858363, 7860304, + 7867709, 7869910, 7873539, 7879912, 7882666, 7888705, 7892628, 7894655, + 7897339, 7903248, 7907781, 7909678, 7916140, 7918215, 7922514, 7928761, + 7933530, 7935665, 7939940, 7946127, 7947469, 7953446, 7958003, 7959832, + 7963548, 7969655, 7973538, 7975497, 7981323, 7983584, 7987253, 7993566, + 7998448, 8000283, 8004302, 8010277, 8012135, 8018316, 8022105, 8024242, + 8029750, 8036061, 8040200, 8042467, 8047777, 8049738, 8054175, 8060276, + 8063127, 8065148, 8069545, 8075586, 8077824, 8084203, 8088382, 8090581, + 8095057, 8101306, 8105071, 8107140, 8114118, 8116013, 8120056, 8125971, + 8126628, 8132687, 8137114, 8139121, 8145459, 8147672, 8151821, 8158182, + 8162658, 8164745, 8168540, 8174775, 8177653, 8183582, 8187595, 8189472, + 8192963, 8198952, 8203005, 8204822, 8210772, 8212927, 8216682, 8222849, + 8228357, 8230638, 8234811, 8241104, 8242322, 8248441, 8252844, 8254791, + 8259177, 8265346, 8269655, 8271804, 8277246, 8279061, 8283584, 8289579, + 8293295, 8295236, 8299153, 8305274, 8307000, 8313299, 8316934, 8319213, + 8324366, 8330725, 8334384, 8336603, 8343449, 8345458, 8349351, 8355404, + 8358088, 8359971, 8364534, 8370461, 8372831, 8379060, 8383329, 8385418, + 8391797, 8393886, 8398155, 8404384, 8406754, 8412681, 8417244, 8419127, + 8421811, 8427864, 8431757, 8433766, 8440612, 8442831, 8446490, 8452849, + 8458002, 8460281, 8463916, 8470215, 8471941, 8478062, 8481979, 8483920, + 8487636, 8493631, 8498154, 8499969, 8505411, 8507560, 8511869, 8518038, + 8522424, 8524371, 8528774, 8534893, 8536111, 8542404, 8546577, 8548858, + 8554366, 8560533, 8564288, 8566443, 8572393, 8574210, 8578263, 8584252, + 8587743, 8589620, 8593633, 8599562, 8602440, 8608675, 8612470, 8614557, + 8619033, 8625394, 8629543, 8631756, 8638094, 8640101, 8644528, 8650587, + 8651244, 8657159, 8661202, 8663097, 8670075, 8672144, 8675909, 8682158, + 8686634, 8688833, 8693012, 8699391, 8701629, 8707670, 8712067, 8714088, + 8716939, 8723040, 8727477, 8729438, 8734748, 8737015, 8741154, 8747465, + 8752973, 8755110, 8758899, 8765080, 8766938, 8772913, 8776932, 8778767, + 8783649, 8789962, 8793631, 8795892, 8801718, 8803677, 8807560, 8813667, + 8817383, 8819212, 8823769, 8829746, 8831088, 8837275, 8841550, 8843685, + 8848454, 8854701, 8859000, 8861075, 8867537, 8869434, 8873967, 8879876, + 8882560, 8884587, 8888510, 8894549, 8897303, 8903676, 8907305, 8909506, + 8916911, 8918852, 8922769, 8928890, 8930616, 8936915, 8940550, 8942829, + 8946281, 8952450, 8956759, 8958908, 8964350, 8966165, 8970688, 8976683, + 8981704, 8983587, 8988150, 8994077, 8996447, 9002676, 9006945, 9009034, + 9011470, 9017829, 9021488, 9023707, 9030553, 9032562, 9036455, 9042508, + 9046370, 9048457, 9052252, 9058487, 9061365, 9067294, 9071307, 9073184, + 9077924, 9083983, 9088410, 9090417, 9096755, 9098968, 9103117, 9109478, + 9112069, 9114350, 9118523, 9124816, 9126034, 9132153, 9136556, 9138503, + 9144259, 9150248, 9154301, 9156118, 9162068, 9164223, 9167978, 9174145, + 9175606, 9181917, 9186056, 9188323, 9193633, 9195594, 9200031, 9206132, + 9211888, 9213723, 9217742, 9223717, 9225575, 9231756, 9235545, 9237682, + 9240913, 9247162, 9250927, 9252996, 9259974, 9261869, 9265912, 9271827, + 9276567, 9278588, 9282985, 9289026, 9291264, 9297643, 9301822, 9304021, + 9307387, 9313296, 9317829, 9319726, 9326188, 9328263, 9332562, 9338809, + 9341245, 9343446, 9347075, 9353448, 9356202, 9362241, 9366164, 9368191, + 9373596, 9379703, 9383586, 9385545, 9391371, 9393632, 9397301, 9403614, + 9407066, 9409201, 9413476, 9419663, 9421005, 9426982, 9431539, 9433368, + 9440193, 9442090, 9446143, 9452052, 9453910, 9460157, 9463912, 9465987, + 9471495, 9477868, 9482041, 9484242, 9489552, 9491579, 9495982, 9502021, + 9504934, 9506893, 9511320, 9517427, 9519665, 9525978, 9530127, 9532388, + 9536864, 9543051, 9546846, 9548981, 9555959, 9557788, 9561801, 9567778, + 9571596, 9573863, 9577522, 9583833, 9586587, 9592688, 9596581, 9598542, + 9601226, 9607201, 9611764, 9613599, 9620061, 9622198, 9626467, 9632648, + 9637483, 9639552, 9643861, 9650110, 9651452, 9657367, 9661890, 9663785, + 9667501, 9673542, 9677459, 9679480, 9685306, 9687505, 9691140, 9697519, + 9700952, 9707187, 9711462, 9713549, 9718991, 9720868, 9725425, 9731354, + 9735070, 9737077, 9740960, 9747019, 9748745, 9755106, 9758775, 9760988, + 9766207, 9772500, 9776129, 9778410, 9785256, 9787203, 9791126, 9797245, + 9799929, 9801746, 9806279, 9812268, 9814638, 9820805, 9825104, 9827259, + 9830549, 9836670, 9841067, 9843008, 9849346, 9851625, 9855804, 9862103, + 9866579, 9868728, 9872493, 9878662, 9881540, 9887535, 9891578, 9893393, + 9896946, 9902873, 9906892, 9908775, 9914725, 9916814, 9920603, 9926832, + 9932340, 9934559, 9938698, 9945057, 9946275, 9952328, 9956765, 9958774, + 9963547, 9965808, 9969957, 9976270, 9978508, 9984615, 9989042, 9991001, + 9995741, 10001718, 10005731, 10007560, 10014538, 10016673, 10020468, 10026655, + 10029948, 10032023, 10035778, 10042025, 10043883, 10049792, 10053845, 10055742, + 10061498, 10067537, 10071940, 10073967, 10079277, 10081478, 10085651, 10092024, + 10096342, 10098237, 10102760, 10108675, 10110017, 10116266, 10120575, 10122644, + 10126096, 10132475, 10136110, 10138309, 10144135, 10146156, 10150073, 10156114, + 10161585, 10163546, 10167439, 10173540, 10176294, 10182605, 10186264, 10188531, + 10190967, 10197148, 10201417, 10203554, 10210016, 10211851, 10216414, 10222389, + 10225026, 10231145, 10235068, 10237015, 10243861, 10246142, 10249771, 10256064, + 10258500, 10260655, 10264954, 10271121, 10273491, 10279480, 10284013, 10285830, + 10290917, 10296846, 10301403, 10303280, 10308722, 10310809, 10315084, 10321319, + 10324771, 10326984, 10330653, 10337014, 10338740, 10344799, 10348682, 10350689, + 10355535, 10361764, 10365553, 10367642, 10373592, 10375475, 10379494, 10385421, + 10391177, 10393186, 10397623, 10403676, 10404894, 10411253, 10415392, 10417611, + 10420264, 10426563, 10430742, 10433021, 10439359, 10441300, 10445697, 10451818, + 10456558, 10458373, 10462416, 10468411, 10471289, 10477458, 10481223, 10483372, + 10486557, 10492918, 10496547, 10498760, 10504586, 10506593, 10510516, 10516575, + 10522331, 10524208, 10528741, 10534670, 10536012, 10542247, 10546546, 10548633, + 10551418, 10557585, 10561860, 10564015, 10570477, 10572294, 10576851, 10582840, + 10587580, 10589527, 10593410, 10599529, 10602283, 10608576, 10612245, 10614526, + 10618320, 10624315, 10628334, 10630149, 10637127, 10639276, 10643065, 10649234, + 10651670, 10653949, 10658088, 10664387, 10666625, 10672746, 10677183, 10679124, + 10684087, 10690140, 10694537, 10696546, 10701856, 10704075, 10708254, 10714613, + 10718065, 10720154, 10723919, 10730148, 10732006, 10737933, 10741976, 10743859, + 10751620, 10753647, 10758074, 10764113, 10765331, 10771704, 10775853, 10778054, + 10781506, 10787753, 10791548, 10793623, 10799573, 10801470, 10805483, 10811392, + 10816995, 10818824, 10822877, 10828854, 10831732, 10837919, 10841674, 10843809, + 10846245, 10852558, 10856731, 10858992, 10865330, 10867289, 10871692, 10877799, + 10881097, 10883234, 10887543, 10893724, 10896094, 10902069, 10906592, 10908427, + 10913167, 10919268, 10923185, 10925146, 10931992, 10934259, 10937894, 10944205, + 10947374, 10949573, 10953232, 10959611, 10961337, 10967378, 10971271, 10973292, + 10979048, 10984963, 10989526, 10991421, 10996863, 10998932, 11003201, 11009450, + 11010247, 11016236, 11020793, 11022610, 11029072, 11031227, 11035502, 11041669, + 11046145, 11048426, 11052095, 11058388, 11061142, 11067261, 11071144, 11073091, + 11076512, 11082571, 11086494, 11088501, 11094327, 11096540, 11100169, 11106530, + 11112038, 11114125, 11118424, 11124659, 11126001, 11131930, 11136463, 11138340, + 11142666, 11149025, 11153204, 11155423, 11160733, 11162742, 11167139, 11173192, + 11176908, 11178791, 11182834, 11188761, 11190619, 11196848, 11200613, 11202702, + 11208045, 11214214, 11218003, 11220152, 11227130, 11228945, 11232964, 11238959, + 11241643, 11243584, 11248021, 11254142, 11256380, 11262679, 11266818, 11269097, + 11275614, 11277749, 11281504, 11287691, 11290569, 11296546, 11300599, 11302428, + 11305112, 11311219, 11315622, 11317581, 11323919, 11326180, 11330353, 11336666, + 11341369, 11343570, 11347719, 11354092, 11355310, 11361349, 11365776, 11367803, + 11371519, 11377428, 11381441, 11383338, 11389288, 11391363, 11395158, 11401405, + 11406227, 11408248, 11412141, 11418182, 11419908, 11426287, 11429946, 11432145, + 11437653, 11443902, 11448171, 11450240, 11455682, 11457577, 11462140, 11468055, + 11471092, 11472927, 11477450, 11483425, 11485795, 11491976, 11496285, 11498422, + 11502898, 11509209, 11512844, 11515111, 11521957, 11523918, 11527835, 11533936, + 11535529, 11541570, 11546007, 11548028, 11554366, 11556565, 11560704, 11567083, + 11569519, 11571588, 11575377, 11581626, 11584504, 11590419, 11594438, 11596333, + 11601870, 11607845, 11611888, 11613723, 11619673, 11621810, 11625575, 11631756, + 11635208, 11637475, 11641654, 11647965, 11649183, 11655284, 11659681, 11661642, + 11666020, 11672207, 11676506, 11678641, 11684083, 11685912, 11690445, 11696422, + 11702178, 11704137, 11708060, 11714167, 11715893, 11722206, 11725835, 11728096, + 11731203, 11737576, 11741245, 11743446, 11750292, 11752319, 11756202, 11762241, + 11766981, 11768878, 11773435, 11779344, 11781714, 11787961, 11792236, 11794311, + 11798832, 11801051, 11804686, 11811045, 11813799, 11819852, 11823769, 11825778, + 11830518, 11836445, 11840968, 11842851, 11849313, 11851402, 11855711, 11861940, + 11864663, 11866812, 11871081, 11877250, 11878592, 11884587, 11889150, 11890965, + 11896721, 11902842, 11906735, 11908676, 11914502, 11916781, 11920440, 11926739, + 11931645, 11933462, 11937475, 11943464, 11945322, 11951489, 11955284, 11957439, + 11960891, 11967184, 11971333, 11973614, 11978924, 11980871, 11985298, 11991417, + 11996314, 11998321, 12002724, 12008783, 12011021, 12017382, 12021555, 12023768, + 12026204, 12032439, 12036194, 12038281, 12045259, 12047136, 12051189, 12057118, + 12060531, 12066712, 12070477, 12072614, 12078564, 12080399, 12084442, 12090417, + 12094133, 12096094, 12100491, 12106592, 12107810, 12114121, 12118300, 12120567, + 12125204, 12131583, 12135722, 12137921, 12144259, 12146280, 12150717, 12156758, + 12159442, 12161337, 12165356, 12171271, 12174149, 12180398, 12184187, 12186256, + 12190142, 12196181, 12200064, 12202091, 12208937, 12211138, 12214807, 12221180, + 12225656, 12227731, 12232006, 12238253, 12240623, 12246532, 12251089, 12252986, + 12255961, 12261938, 12266471, 12268300, 12273742, 12275877, 12280176, 12286363, + 12291871, 12294132, 12297761, 12304074, 12305800, 12311907, 12315830, 12317789, + 12323562, 12325377, 12329940, 12335935, 12337277, 12343446, 12347715, 12349864, + 12355372, 12361671, 12365330, 12367609, 12373435, 12375376, 12379269, 12385390, + 12388749, 12390758, 12394675, 12400728, 12403482, 12409841, 12413476, 12415695, + 12420171, 12426400, 12430709, 12432798, 12439260, 12441143, 12445666, 12451593, + 12454951, 12457164, 12461337, 12467698, 12469936, 12475995, 12480398, 12482405, + 12485089, 12491018, 12495071, 12496948, 12503926, 12506013, 12509768, 12516003, + 12521280, 12523435, 12527230, 12533397, 12535255, 12541244, 12545257, 12547074, + 12550790, 12556909, 12561336, 12563283, 12568593, 12570874, 12575023, 12581316, + 12585550, 12587685, 12591984, 12598171, 12599513, 12605490, 12610023, 12611852, + 12617608, 12623715, 12627638, 12629597, 12635423, 12637684, 12641313, 12647626, + 12650793, 12652994, 12656663, 12663036, 12665790, 12671829, 12675712, 12677739, + 12682479, 12688388, 12692945, 12694842, 12701304, 12703379, 12707654, 12713901, + 12717187, 12719208, 12723645, 12729686, 12731924, 12738303, 12742442, 12744641, + 12747077, 12753326, 12757115, 12759184, 12766162, 12768057, 12772076, 12777991, + 12783588, 12785423, 12789466, 12795441, 12797299, 12803480, 12807245, 12809382, + 12812834, 12819145, 12823324, 12825591, 12830901, 12832862, 12837259, 12843360, + 12847063, 12853052, 12857065, 12858882, 12864832, 12866987, 12870782, 12876949, + 12880401, 12882682, 12886831, 12893124, 12894342, 12900461, 12904888, 12906835, + 12911792, 12917851, 12922254, 12924261, 12930599, 12932812, 12936985, 12943346, + 12945782, 12947869, 12951624, 12957859, 12960737, 12966666, 12970719, 12972596, + 12976410, 12982769, 12986404, 12988623, 12995469, 12997478, 13001395, 13007448, + 13012188, 13014071, 13018594, 13024521, 13026891, 13033120, 13037429, 13039518, + 13042301, 13048470, 13052739, 13054888, 13060330, 13062145, 13066708, 13072703, + 13078459, 13080400, 13084293, 13090414, 13092140, 13098439, 13102098, 13104377, + 13109652, 13111679, 13115562, 13121601, 13124355, 13130728, 13134397, 13136598, + 13141074, 13147321, 13151596, 13153671, 13160133, 13162030, 13166587, 13172496, + 13175539, 13177368, 13181901, 13187878, 13189220, 13195407, 13199706, 13201841, + 13207349, 13213662, 13217291, 13219552, 13225378, 13227337, 13231260, 13237367, + 13242201, 13244338, 13248103, 13254284, 13256142, 13262117, 13266160, 13267995, + 13271711, 13277812, 13282209, 13284170, 13289480, 13291747, 13295926, 13302237, + 13306942, 13309141, 13313280, 13319659, 13321897, 13327938, 13332375, 13334396, + 13337080, 13342995, 13347014, 13348909, 13355887, 13357956, 13361745, 13367994, + 13370381, 13376742, 13380915, 13383128, 13389466, 13391473, 13395876, 13401935, + 13404619, 13406496, 13410549, 13416478, 13419356, 13425591, 13429346, 13431433, + 13436778, 13442945, 13446740, 13448895, 13454845, 13456662, 13460675, 13466664, + 13470380, 13472327, 13476754, 13482873, 13484091, 13490384, 13494533, 13496814, + 13501120, 13507115, 13511678, 13513493, 13518935, 13521084, 13525353, 13531522, + 13537030, 13539309, 13542968, 13549267, 13550993, 13557114, 13561007, 13562948, + 13566375, 13572428, 13576345, 13578354, 13585200, 13587419, 13591054, 13597413, + 13601889, 13603978, 13608287, 13614516, 13616886, 13622813, 13627336, 13629219, + 13635066, 13636881, 13640900, 13646895, 13649773, 13655942, 13659731, 13661880, + 13664316, 13670615, 13674754, 13677033, 13683371, 13685312, 13689749, 13695870, + 13700765, 13702774, 13707171, 13713224, 13714442, 13720801, 13724980, 13727199, + 13730651, 13736880, 13740645, 13742734, 13748684, 13750567, 13754610, 13760537, + 13765431, 13767644, 13771273, 13777634, 13779360, 13785419, 13789342, 13791349, + 13797105, 13803034, 13807567, 13809444, 13814886, 13816973, 13821272, 13827507, + 13830224, 13832379, 13836654, 13842821, 13845191, 13851180, 13855737, 13857554, + 13862294, 13868413, 13872296, 13874243, 13881089, 13883370, 13887039, 13893332, + 13893731, 13899912, 13904221, 13906358, 13912820, 13914655, 13919178, 13925153, + 13929893, 13931854, 13935771, 13941872, 13944626, 13950937, 13954572, 13956839, + 13959940, 13966319, 13969978, 13972177, 13978003, 13980024, 13983917, 13989958, + 13995714, 13997609, 14002172, 14008087, 14009429, 14015678, 14019947, 14022016, + 14026414, 14032453, 14036880, 14038907, 14044217, 14046418, 14050567, 14056940, + 14060392, 14062467, 14066262, 14072509, 14074367, 14080276, 14084289, 14086186, + 14091721, 14097698, 14101751, 14103580, 14110558, 14112693, 14116448, 14122635, + 14125071, 14127332, 14131505, 14137818, 14140056, 14146163, 14150566, 14152525, + 14159392, 14161611, 14165790, 14172149, 14173367, 14179420, 14183817, 14185826, + 14189542, 14195469, 14199512, 14201395, 14207345, 14209434, 14213199, 14219428, + 14224711, 14226860, 14230649, 14236818, 14239696, 14245691, 14249710, 14251525, + 14254209, 14260330, 14264767, 14266708, 14273046, 14275325, 14279464, 14285763, + 14289133, 14290950, 14295507, 14301496, 14303866, 14310033, 14314308, 14316463, + 14320939, 14327232, 14330901, 14333182, 14340028, 14341975, 14345858, 14351977, + 14355338, 14357345, 14361268, 14367327, 14369053, 14375414, 14379043, 14381256, + 14386764, 14392999, 14397298, 14399385, 14404827, 14406704, 14411237, 14417166, + 14418873, 14424914, 14428807, 14430828, 14436654, 14438853, 14442512, 14448891, + 14454399, 14456468, 14460737, 14466986, 14468328, 14474243, 14478806, 14480701, + 14483678, 14489653, 14494176, 14496011, 14502473, 14504610, 14508919, 14515100, + 14519576, 14521843, 14525478, 14531789, 14534543, 14540644, 14544561, 14546522, + 14550388, 14556575, 14560330, 14562465, 14569443, 14571272, 14575325, 14581302, + 14583986, 14585945, 14590348, 14596455, 14598693, 14605006, 14609179, 14611440, + 14616083, 14622456, 14626605, 14628806, 14634116, 14636143, 14640570, 14646609, + 14650325, 14652222, 14656235, 14662144, 14664002, 14670249, 14674044, 14676119, + 14681382, 14687693, 14691352, 14693619, 14700465, 14702426, 14706319, 14712420, + 14715104, 14716939, 14721502, 14727477, 14729847, 14736028, 14740297, 14742434, + 14747201, 14753450, 14757759, 14759828, 14765270, 14767165, 14771688, 14777603, + 14781319, 14783340, 14787257, 14793298, 14795024, 14801403, 14805038, 14807237, + 14812139, 14818048, 14822101, 14823998, 14829948, 14832023, 14835778, 14842025, + 14847533, 14849734, 14853907, 14860280, 14861498, 14867537, 14871940, 14873967, + 14876812, 14882919, 14887346, 14889305, 14895643, 14897904, 14902053, 14908366, + 14912842, 14914977, 14918772, 14924959, 14927837, 14933814, 14937827, 14939656, + 14944447, 14946388, 14950785, 14956906, 14959144, 14965443, 14969622, 14971901, + 14976377, 14982546, 14986311, 14988460, 14995438, 14997253, 15001296, 15007291, + 15010776, 15012659, 15016678, 15022605, 15024463, 15030692, 15034481, 15036570, + 15042078, 15048437, 15052576, 15054795, 15060105, 15062114, 15066551, 15072604, + 15076978, 15079065, 15083340, 15089575, 15090917, 15096846, 15101403, 15103280, + 15106996, 15113055, 15116938, 15118945, 15124771, 15126984, 15130653, 15137014, + 15142165, 15144446, 15148075, 15154368, 15157122, 15163241, 15167164, 15169111, + 15171795, 15177784, 15182317, 15184134, 15190596, 15192751, 15197050, 15203217, + 15206140, 15212055, 15216578, 15218473, 15223915, 15225984, 15230293, 15236542, + 15239994, 15242193, 15245828, 15252207, 15253933, 15259974, 15263891, 15265912, + 15271323, 15277424, 15281317, 15283278, 15290124, 15292391, 15296050, 15302361, + 15304797, 15306934, 15311203, 15317384, 15319754, 15325729, 15330292, 15332127, + 15335473, 15341786, 15345935, 15348196, 15354534, 15356493, 15360920, 15367027, + 15371767, 15373596, 15377609, 15383586, 15386464, 15392651, 15396446, 15398581, + 15401814, 15408061, 15411816, 15413891, 15419841, 15421738, 15425791, 15431700, + 15437456, 15439483, 15443886, 15449925, 15451143, 15457516, 15461689, 15463890, + 15469413, 15471502, 15475291, 15481520, 15483378, 15489305, 15493324, 15495207, + 15500963, 15507016, 15511453, 15513462, 15518772, 15520991, 15525130, 15531489, + 15534082, 15536361, 15540540, 15546839, 15549077, 15555198, 15559595, 15561536, + 15566276, 15572271, 15576314, 15578129, 15585107, 15587256, 15591021, 15597190, + 15601064, 15603011, 15606934, 15613053, 15615807, 15622100, 15625729, 15628010, + 15630446, 15636613, 15640912, 15643067, 15649529, 15651346, 15655879, 15661868, + 15666895, 15668772, 15673329, 15679258, 15680600, 15686835, 15691110, 15693197, + 15696649, 15703010, 15706679, 15708892, 15714718, 15716725, 15720608, 15726667, + 15729298, 15735417, 15739820, 15741767, 15747077, 15749358, 15753531, 15759824, + 15765332, 15767487, 15771242, 15777409, 15779267, 15785256, 15789309, 15791126, + 15794677, 15800606, 15804619, 15806496, 15813474, 15815561, 15819356, 15825591, + 15830067, 15832280, 15836429, 15842790, 15845028, 15851087, 15855514, 15857521, + 15860831, 15867060, 15871329, 15873418, 15879880, 15881763, 15886326, 15892253, + 15894937, 15896946, 15900839, 15906892, 15909646, 15916005, 15919664, 15921883, + 15927096, 15933395, 15937030, 15939309, 15945135, 15947076, 15950993, 15957114, + 15960830, 15962645, 15967168, 15973163, 15974505, 15980674, 15984983, 15987132, + 15994635, 15996896, 16000565, 16006878, 16008604, 16014711, 16018594, 16020553, + 16024269, 16030246, 16034803, 16036632, 16042074, 16044209, 16048484, 16054671, + 16059500, 16061575, 16065874, 16072121, 16074491, 16080400, 16084933, 16086830, + 16089514, 16095553, 16099476, 16101503, 16108349, 16110550, 16114179, 16120552, + 16124358, 16126253, 16130296, 16136211, 16139089, 16145338, 16149103, 16151172, + 16155648, 16162027, 16166206, 16168405, 16174743, 16176764, 16181161, 16187202, + 16190113, 16192074, 16196511, 16202612, 16203830, 16210141, 16214280, 16216547, + 16222055, 16228236, 16232025, 16234162, 16240112, 16241947, 16245966, 16251941, + 16253256, 16259491, 16263286, 16265373, 16272351, 16274228, 16278241, 16284170, + 16288910, 16290917, 16295344, 16301403, 16303641, 16310002, 16314151, 16316364, + 16319023, 16325316, 16329489, 16331770, 16337080, 16339027, 16343430, 16349549, + 16355305, 16357122, 16361175, 16367164, 16369022, 16375189, 16378944, 16381099, + 16385925, 16392046, 16395963, 16397904, 16403730, 16406009, 16409644, 16415943, + 16419395, 16421544, 16425853, 16432022, 16433364, 16439359, 16443882, 16445697, + 16450786, 16456713, 16461276, 16463159, 16469621, 16471710, 16475979, 16482208, + 16484644, 16486863, 16490522, 16496881, 16499635, 16505688, 16509581, 16511590, + 16518353, 16520250, 16524783, 16530692, 16533062, 16539309, 16543608, 16545683, + 16548119, 16554492, 16558121, 16560322, 16567168, 16569195, 16573118, 16579157, + 16584630, 16586589, 16590472, 16596579, 16598305, 16604618, 16608287, 16610548, + 16614000, 16620187, 16624462, 16626597, 16632039, 16633868, 16638425, 16644402, + 16648732, 16650999, 16655138, 16661449, 16662667, 16668768, 16673205, 16675166, + 16680922, 16686897, 16690916, 16692751, 16698701, 16700838, 16704627, 16710808, + 16714107, 16716176, 16719941, 16726190, 16729068, 16734983, 16739026, 16740921, + 16745661, 16751702, 16756099, 16758120, 16764458, 16766657, 16770836, 16777215 +}; + +uint32_t gly24128Enc(uint32_t n) { + assert (n <= 4095); + return gly24128EncTbl[n]; +} + uint32_t gly23127GetSyn (uint32_t pattern) { uint32_t aux = 0x400000; diff --git a/op25/gr-op25_repeater/lib/rs.h b/op25/gr-op25_repeater/lib/rs.h index 96e3216..d45093f 100644 --- a/op25/gr-op25_repeater/lib/rs.h +++ b/op25/gr-op25_repeater/lib/rs.h @@ -5,8 +5,8 @@ #include #include #include -#include +uint32_t gly24128Enc (uint32_t n) ; uint32_t gly24128Dec (uint32_t n) ; uint32_t gly23127Dec (uint32_t n) ;