/************************************************************ * * * trig.c * * * * * LPGE 1997 * * * * Copyright (C) 1996 Sony Computer Entertainment Inc. * * All Rights Reserved * * * ***********************************************************/ /**************************************************************************** includes ****************************************************************************/ #include "trig.h" /**************************************************************************** globals ****************************************************************************/ // the LUTs extern int SinCosTable[1025]; extern int TangentLUT[4097]; extern int ArcSinTable[4097]; //extern int ArcCosTable[4097]; //extern int ArcTangentTable[256]; /**************************************************************************** functions ****************************************************************************/ // first section: access functions, second section: LUTs // access functions #if (DEVELOPMENT_ENVIRONMENT==YAROZE) int rsin (int angle) { angle &= 4095; // clip so that 0 <= angle <= 4095 if (angle < 1024) return SinCosTable[angle]; if (angle < 2048) // sin wave symmetric about angle = 90degrees return SinCosTable[2048 - angle]; if (angle < 3072) // -ve version of first quadrant curve return -SinCosTable[angle & 1023]; return -SinCosTable[4096 - angle]; } // cos curve is sin curve moved 90 degrees to the left // i.e. sin curve is cos curve moved 90 degrees to the right int rcos (int angle) { return rsin (angle + 1024); } #endif // for Yaroze only int rtan (int angle) { angle &= 4095; // clip so that 0 <= angle <= 4095 return (TangentLUT[angle]); } #if 0 // NOT USED // ARGUMENTS to rasin and racos: // the value * 2048 (shift-left 11) // arcsin: first angle either 0-90 or 270-360 // second is 90-270 void rasin (int value, int* smallerAngle, int* largerAngle) { int tableIndex; int first, second; // sort range -- seems to suggest a (arg is -ONE/2 to ONE/2) // VERY arbitrary; should be simpler for application to call ... while (value < -2048) value += 4096; while (value > 2048) value -= 4096; assert(value >= -2048); assert(value <= 2048); tableIndex = value + 2048; first = ArcSinTable[tableIndex]; second = 2048 - first; if (first < 0) first += 4096; if (first >= second) { *largerAngle = first; *smallerAngle = second; } else { *largerAngle = second; *smallerAngle = first; } } // returns -90 to 90 int rasin2 (int value) { int first, second; rasin(value, &first, &second); if (first >= -1024 && first <= 1024) return first; else return (second - 4096); } // expects second arg always positive, first can be anything int rasin3 (int opposite, int hypoteneuse) { int angle; int tableIndex; assert(hypoteneuse >= 0); assert(abs(opposite) <= hypoteneuse); if (hypoteneuse == 0) return SILLY_VALUE; tableIndex = 2048 + (2048 * opposite / hypoteneuse); assert(tableIndex >= 0 && tableIndex <= 4096); angle = ArcSinTable[tableIndex]; return angle; } // arg is -1 to 1, scaled up by ONE int rasin4 (int value) { int angle; int tableIndex; tableIndex = 2048 + (value / 2); assert(tableIndex >= 0 && tableIndex <= 4096); angle = ArcSinTable[tableIndex]; return angle; } // arccos: first angle 0-180, second 180-360 void racos (int value, int* smallerAngle, int* largerAngle) { int tableIndex; while (value < -2048) value += 4096; while (value > 2048) value -= 4096; assert(value >= -2048); assert(value <= 2048); tableIndex = value + 2048; *smallerAngle = ArcCosTable[tableIndex]; *largerAngle = 4096 - *smallerAngle; } // returns 0 to 180 int racos2 (int value) { int first, second; racos(value, &first, &second); assert(first <= second); return first; } int racos3 (int adjacent, int hypoteneuse) { int angle; int tableIndex; assert(hypoteneuse >= 0); assert(abs(adjacent) <= hypoteneuse); if (hypoteneuse == 0) return SILLY_VALUE; tableIndex = 2048 + (2048 * adjacent / hypoteneuse); assert(tableIndex >= 0 && tableIndex <= 4096); angle = ArcSinTable[tableIndex] + 1024; return angle; } #endif int racos4 (int value) { int angle; int tableIndex; tableIndex = 2048 + (value / 2); assert(tableIndex >= 0 && tableIndex <= 4096); angle = ArcSinTable[tableIndex] + 1024; angle = 2048-angle; return angle; } #if 0 // NOT USED // Need for extra level: // the LUT and access functions were used for calculating // angle theta-Y on the x-z plane; // this ratan stub converts back to proper theta-Z on xy plane int ratan (int x, int y); int SUBratan (int x, int z); int ratan_zero (int x, int z); int ratan (int x, int y) { int angle = SUBratan(x, y); angle = 1024 - angle; if (angle < 0) angle += 2048; if (angle > 2048) angle -= 2048; return angle; } // call with value as actual value * ONE int ratan2 (int value) { return ( ratan(ONE, value) ); } // Note: origin (x,z)=(0,1), clockwise rotation // this was originally done for atan on the x-z plane int SUBratan (int x, int z) { if (x*z == 0) // if either is zero return(ratan_zero(x,z)); if (x>0) { if (z>0) { x = abs(x); z = abs(z); if (x<=z) return(ArcTangentTable[255*x/z]); else return(1024-ArcTangentTable[255*z/x]); } else { x = abs(x); z = abs(z); if (x<=z) return(2048-ArcTangentTable[255*x/z]); else return(1024+ArcTangentTable[255*z/x]); } } else { if (z>0) { x = abs(x); z = abs(z); if (x<=z) return(-ArcTangentTable[255*x/z]); else return(-1024+ArcTangentTable[255*z/x]); } else { x = abs(x); z = abs(z); if (x<=z) return(-2048+ArcTangentTable[255*x/z]); else return(-1024-ArcTangentTable[255*z/x]); } } } int ratan_zero (int x, int z) { if (x == 0) { if(z >= 0) return(0); else return(2048); } else if (z == 0) { if(x > 0) return(1024); else return(-1024); } else return(0); } long rinvtan(long x, long y); int ratan3 (int opposite, int adjacent) { int angle; if (adjacent == 0) return SILLY_VALUE; angle = rinvtan(adjacent, opposite); return angle; } long rinvtan(long x, long y) { long t; if (x == 0 && y == 0) return 0; if (fabs(x) > fabs(y)) { t = (y << 8) / x; if (t >= 0) return ArcTangentTable[t & 255] + (x < 0 ? 2048 : 0); return (x < 0 ? 2048 : 4096) - ArcTangentTable[(-t) & 255]; } t = (x << 8) / y; if (t >= 0) return (y < 0 ? 3072 : 1024) - ArcTangentTable[t & 255]; return ArcTangentTable[(-t) & 255] + (y < 0 ? 3072 : 1024); } #endif // LUT section // sin/cos LUT: // one table since for all theta, // sin(theta) = cos(theta - 90degrees) // and cos(theta) = sin(theta + 90degrees) int SinCosTable[1025] = { 0, 6, 13, 19, 25, 31, 38, 44, 50, 57, 63, 69, 75, 82, 88, 94, 101, 107, 113, 119, 126, 132, 138, 144, 151, 157, 163, 170, 176, 182, 188, 195, 201, 207, 214, 220, 226, 232, 239, 245, 251, 257, 264, 270, 276, 283, 289, 295, 301, 308, 314, 320, 326, 333, 339, 345, 351, 358, 364, 370, 376, 383, 389, 395, 401, 408, 414, 420, 426, 433, 439, 445, 451, 458, 464, 470, 476, 483, 489, 495, 501, 508, 514, 520, 526, 533, 539, 545, 551, 557, 564, 570, 576, 582, 589, 595, 601, 607, 613, 620, 626, 632, 638, 644, 651, 657, 663, 669, 675, 682, 688, 694, 700, 706, 713, 719, 725, 731, 737, 744, 750, 756, 762, 768, 774, 781, 787, 793, 799, 805, 811, 818, 824, 830, 836, 842, 848, 854, 861, 867, 873, 879, 885, 891, 897, 904, 910, 916, 922, 928, 934, 940, 946, 953, 959, 965, 971, 977, 983, 989, 995, 1001, 1007, 1014, 1020, 1026, 1032, 1038, 1044, 1050, 1056, 1062, 1068, 1074, 1080, 1086, 1092, 1099, 1105, 1111, 1117, 1123, 1129, 1135, 1141, 1147, 1153, 1159, 1165, 1171, 1177, 1183, 1189, 1195, 1201, 1207, 1213, 1219, 1225, 1231, 1237, 1243, 1249, 1255, 1261, 1267, 1273, 1279, 1285, 1291, 1297, 1303, 1309, 1315, 1321, 1327, 1332, 1338, 1344, 1350, 1356, 1362, 1368, 1374, 1380, 1386, 1392, 1398, 1404, 1409, 1415, 1421, 1427, 1433, 1439, 1445, 1451, 1457, 1462, 1468, 1474, 1480, 1486, 1492, 1498, 1503, 1509, 1515, 1521, 1527, 1533, 1538, 1544, 1550, 1556, 1562, 1567, 1573, 1579, 1585, 1591, 1596, 1602, 1608, 1614, 1620, 1625, 1631, 1637, 1643, 1648, 1654, 1660, 1666, 1671, 1677, 1683, 1689, 1694, 1700, 1706, 1711, 1717, 1723, 1729, 1734, 1740, 1746, 1751, 1757, 1763, 1768, 1774, 1780, 1785, 1791, 1797, 1802, 1808, 1813, 1819, 1825, 1830, 1836, 1842, 1847, 1853, 1858, 1864, 1870, 1875, 1881, 1886, 1892, 1898, 1903, 1909, 1914, 1920, 1925, 1931, 1936, 1942, 1947, 1953, 1958, 1964, 1970, 1975, 1981, 1986, 1992, 1997, 2002, 2008, 2013, 2019, 2024, 2030, 2035, 2041, 2046, 2052, 2057, 2062, 2068, 2073, 2079, 2084, 2090, 2095, 2100, 2106, 2111, 2117, 2122, 2127, 2133, 2138, 2143, 2149, 2154, 2159, 2165, 2170, 2175, 2181, 2186, 2191, 2197, 2202, 2207, 2213, 2218, 2223, 2228, 2234, 2239, 2244, 2249, 2255, 2260, 2265, 2270, 2276, 2281, 2286, 2291, 2296, 2302, 2307, 2312, 2317, 2322, 2328, 2333, 2338, 2343, 2348, 2353, 2359, 2364, 2369, 2374, 2379, 2384, 2389, 2394, 2399, 2405, 2410, 2415, 2420, 2425, 2430, 2435, 2440, 2445, 2450, 2455, 2460, 2465, 2470, 2475, 2480, 2485, 2490, 2495, 2500, 2505, 2510, 2515, 2520, 2525, 2530, 2535, 2540, 2545, 2550, 2555, 2559, 2564, 2569, 2574, 2579, 2584, 2589, 2594, 2598, 2603, 2608, 2613, 2618, 2623, 2628, 2632, 2637, 2642, 2647, 2652, 2656, 2661, 2666, 2671, 2675, 2680, 2685, 2690, 2694, 2699, 2704, 2709, 2713, 2718, 2723, 2727, 2732, 2737, 2741, 2746, 2751, 2755, 2760, 2765, 2769, 2774, 2779, 2783, 2788, 2792, 2797, 2802, 2806, 2811, 2815, 2820, 2824, 2829, 2833, 2838, 2843, 2847, 2852, 2856, 2861, 2865, 2870, 2874, 2878, 2883, 2887, 2892, 2896, 2901, 2905, 2910, 2914, 2918, 2923, 2927, 2932, 2936, 2940, 2945, 2949, 2953, 2958, 2962, 2967, 2971, 2975, 2979, 2984, 2988, 2992, 2997, 3001, 3005, 3009, 3014, 3018, 3022, 3026, 3031, 3035, 3039, 3043, 3048, 3052, 3056, 3060, 3064, 3068, 3073, 3077, 3081, 3085, 3089, 3093, 3097, 3102, 3106, 3110, 3114, 3118, 3122, 3126, 3130, 3134, 3138, 3142, 3146, 3150, 3154, 3158, 3162, 3166, 3170, 3174, 3178, 3182, 3186, 3190, 3194, 3198, 3202, 3206, 3210, 3214, 3217, 3221, 3225, 3229, 3233, 3237, 3241, 3244, 3248, 3252, 3256, 3260, 3264, 3267, 3271, 3275, 3279, 3282, 3286, 3290, 3294, 3297, 3301, 3305, 3309, 3312, 3316, 3320, 3323, 3327, 3331, 3334, 3338, 3342, 3345, 3349, 3352, 3356, 3360, 3363, 3367, 3370, 3374, 3378, 3381, 3385, 3388, 3392, 3395, 3399, 3402, 3406, 3409, 3413, 3416, 3420, 3423, 3426, 3430, 3433, 3437, 3440, 3444, 3447, 3450, 3454, 3457, 3461, 3464, 3467, 3471, 3474, 3477, 3481, 3484, 3487, 3490, 3494, 3497, 3500, 3504, 3507, 3510, 3513, 3516, 3520, 3523, 3526, 3529, 3532, 3536, 3539, 3542, 3545, 3548, 3551, 3555, 3558, 3561, 3564, 3567, 3570, 3573, 3576, 3579, 3582, 3585, 3588, 3591, 3594, 3597, 3600, 3603, 3606, 3609, 3612, 3615, 3618, 3621, 3624, 3627, 3630, 3633, 3636, 3639, 3642, 3644, 3647, 3650, 3653, 3656, 3659, 3661, 3664, 3667, 3670, 3673, 3675, 3678, 3681, 3684, 3686, 3689, 3692, 3695, 3697, 3700, 3703, 3705, 3708, 3711, 3713, 3716, 3719, 3721, 3724, 3727, 3729, 3732, 3734, 3737, 3739, 3742, 3745, 3747, 3750, 3752, 3755, 3757, 3760, 3762, 3765, 3767, 3770, 3772, 3775, 3777, 3779, 3782, 3784, 3787, 3789, 3791, 3794, 3796, 3798, 3801, 3803, 3805, 3808, 3810, 3812, 3815, 3817, 3819, 3822, 3824, 3826, 3828, 3831, 3833, 3835, 3837, 3839, 3842, 3844, 3846, 3848, 3850, 3852, 3854, 3857, 3859, 3861, 3863, 3865, 3867, 3869, 3871, 3873, 3875, 3877, 3879, 3881, 3883, 3885, 3887, 3889, 3891, 3893, 3895, 3897, 3899, 3901, 3903, 3905, 3907, 3909, 3910, 3912, 3914, 3916, 3918, 3920, 3921, 3923, 3925, 3927, 3929, 3930, 3932, 3934, 3936, 3937, 3939, 3941, 3943, 3944, 3946, 3948, 3949, 3951, 3953, 3954, 3956, 3958, 3959, 3961, 3962, 3964, 3965, 3967, 3969, 3970, 3972, 3973, 3975, 3976, 3978, 3979, 3981, 3982, 3984, 3985, 3987, 3988, 3989, 3991, 3992, 3994, 3995, 3996, 3998, 3999, 4001, 4002, 4003, 4005, 4006, 4007, 4008, 4010, 4011, 4012, 4014, 4015, 4016, 4017, 4019, 4020, 4021, 4022, 4023, 4024, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 4045, 4046, 4047, 4048, 4049, 4050, 4051, 4052, 4053, 4053, 4054, 4055, 4056, 4057, 4058, 4059, 4060, 4060, 4061, 4062, 4063, 4064, 4064, 4065, 4066, 4067, 4067, 4068, 4069, 4070, 4070, 4071, 4072, 4072, 4073, 4074, 4074, 4075, 4076, 4076, 4077, 4077, 4078, 4079, 4079, 4080, 4080, 4081, 4081, 4082, 4082, 4083, 4083, 4084, 4084, 4085, 4085, 4086, 4086, 4087, 4087, 4088, 4088, 4088, 4089, 4089, 4089, 4090, 4090, 4090, 4091, 4091, 4091, 4092, 4092, 4092, 4092, 4093, 4093, 4093, 4093, 4094, 4094, 4094, 4094, 4094, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096 }; // tan LUT int TangentLUT[4097] = { 0, 6, 12, 18, 25, 31, 37, 43, 50, 56, 62, 69, 75, 81, 87, 94, 100, 106, 113, 119, 125, 131, 138, 144, 150, 157, 163, 169, 176, 182, 188, 194, 201, 207, 213, 220, 226, 232, 239, 245, 251, 257, 264, 270, 276, 283, 289, 295, 302, 308, 314, 321, 327, 333, 340, 346, 352, 359, 365, 371, 378, 384, 390, 397, 403, 409, 416, 422, 428, 435, 441, 447, 454, 460, 466, 473, 479, 486, 492, 498, 505, 511, 517, 524, 530, 537, 543, 549, 556, 562, 569, 575, 581, 588, 594, 601, 607, 614, 620, 626, 633, 639, 646, 652, 659, 665, 671, 678, 684, 691, 697, 704, 710, 717, 723, 730, 736, 743, 749, 756, 762, 769, 775, 782, 788, 795, 801, 808, 814, 821, 827, 834, 840, 847, 854, 860, 867, 873, 880, 886, 893, 900, 906, 913, 919, 926, 932, 939, 946, 952, 959, 966, 972, 979, 986, 992, 999, 1005, 1012, 1019, 1025, 1032, 1039, 1046, 1052, 1059, 1066, 1072, 1079, 1086, 1093, 1099, 1106, 1113, 1119, 1126, 1133, 1140, 1147, 1153, 1160, 1167, 1174, 1181, 1187, 1194, 1201, 1208, 1215, 1221, 1228, 1235, 1242, 1249, 1256, 1263, 1270, 1276, 1283, 1290, 1297, 1304, 1311, 1318, 1325, 1332, 1339, 1346, 1353, 1360, 1367, 1374, 1381, 1388, 1395, 1402, 1409, 1416, 1423, 1430, 1437, 1444, 1451, 1458, 1465, 1472, 1479, 1486, 1493, 1501, 1508, 1515, 1522, 1529, 1536, 1544, 1551, 1558, 1565, 1572, 1580, 1587, 1594, 1601, 1608, 1616, 1623, 1630, 1638, 1645, 1652, 1659, 1667, 1674, 1681, 1689, 1696, 1703, 1711, 1718, 1726, 1733, 1740, 1748, 1755, 1763, 1770, 1778, 1785, 1793, 1800, 1808, 1815, 1823, 1830, 1838, 1845, 1853, 1860, 1868, 1876, 1883, 1891, 1898, 1906, 1914, 1921, 1929, 1937, 1944, 1952, 1960, 1968, 1975, 1983, 1991, 1999, 2006, 2014, 2022, 2030, 2038, 2046, 2053, 2061, 2069, 2077, 2085, 2093, 2101, 2109, 2117, 2125, 2133, 2141, 2149, 2157, 2165, 2173, 2181, 2189, 2197, 2205, 2213, 2221, 2229, 2238, 2246, 2254, 2262, 2270, 2279, 2287, 2295, 2303, 2312, 2320, 2328, 2336, 2345, 2353, 2362, 2370, 2378, 2387, 2395, 2404, 2412, 2421, 2429, 2437, 2446, 2455, 2463, 2472, 2480, 2489, 2497, 2506, 2515, 2523, 2532, 2541, 2549, 2558, 2567, 2576, 2584, 2593, 2602, 2611, 2620, 2629, 2637, 2646, 2655, 2664, 2673, 2682, 2691, 2700, 2709, 2718, 2727, 2736, 2745, 2755, 2764, 2773, 2782, 2791, 2800, 2810, 2819, 2828, 2837, 2847, 2856, 2865, 2875, 2884, 2894, 2903, 2913, 2922, 2931, 2941, 2951, 2960, 2970, 2979, 2989, 2999, 3008, 3018, 3028, 3037, 3047, 3057, 3067, 3076, 3086, 3096, 3106, 3116, 3126, 3136, 3146, 3156, 3166, 3176, 3186, 3196, 3206, 3216, 3226, 3237, 3247, 3257, 3267, 3278, 3288, 3298, 3309, 3319, 3330, 3340, 3350, 3361, 3372, 3382, 3393, 3403, 3414, 3425, 3435, 3446, 3457, 3467, 3478, 3489, 3500, 3511, 3522, 3533, 3544, 3555, 3566, 3577, 3588, 3599, 3610, 3621, 3633, 3644, 3655, 3666, 3678, 3689, 3700, 3712, 3723, 3735, 3746, 3758, 3770, 3781, 3793, 3804, 3816, 3828, 3840, 3852, 3863, 3875, 3887, 3899, 3911, 3923, 3935, 3947, 3960, 3972, 3984, 3996, 4008, 4021, 4033, 4046, 4058, 4070, 4083, 4095, 4108, 4121, 4133, 4146, 4159, 4172, 4184, 4197, 4210, 4223, 4236, 4249, 4262, 4275, 4288, 4302, 4315, 4328, 4341, 4355, 4368, 4382, 4395, 4409, 4422, 4436, 4450, 4463, 4477, 4491, 4505, 4519, 4533, 4547, 4561, 4575, 4589, 4603, 4617, 4632, 4646, 4660, 4675, 4689, 4704, 4719, 4733, 4748, 4763, 4777, 4792, 4807, 4822, 4837, 4852, 4867, 4883, 4898, 4913, 4928, 4944, 4959, 4975, 4990, 5006, 5022, 5038, 5053, 5069, 5085, 5101, 5117, 5133, 5150, 5166, 5182, 5199, 5215, 5231, 5248, 5265, 5281, 5298, 5315, 5332, 5349, 5366, 5383, 5400, 5417, 5435, 5452, 5470, 5487, 5505, 5522, 5540, 5558, 5576, 5594, 5612, 5630, 5648, 5666, 5685, 5703, 5722, 5740, 5759, 5778, 5796, 5815, 5834, 5853, 5873, 5892, 5911, 5931, 5950, 5970, 5989, 6009, 6029, 6049, 6069, 6089, 6109, 6130, 6150, 6170, 6191, 6212, 6233, 6253, 6274, 6295, 6317, 6338, 6359, 6381, 6402, 6424, 6446, 6468, 6490, 6512, 6534, 6556, 6579, 6601, 6624, 6647, 6670, 6693, 6716, 6739, 6762, 6786, 6810, 6833, 6857, 6881, 6905, 6929, 6954, 6978, 7003, 7027, 7052, 7077, 7102, 7128, 7153, 7178, 7204, 7230, 7256, 7282, 7308, 7335, 7361, 7388, 7414, 7441, 7469, 7496, 7523, 7551, 7578, 7606, 7634, 7663, 7691, 7719, 7748, 7777, 7806, 7835, 7865, 7894, 7924, 7954, 7984, 8014, 8044, 8075, 8106, 8137, 8168, 8199, 8231, 8263, 8295, 8327, 8359, 8392, 8424, 8457, 8491, 8524, 8558, 8591, 8625, 8660, 8694, 8729, 8764, 8799, 8834, 8870, 8906, 8942, 8978, 9015, 9052, 9089, 9126, 9164, 9202, 9240, 9278, 9317, 9356, 9395, 9435, 9474, 9514, 9555, 9595, 9636, 9677, 9719, 9761, 9803, 9845, 9888, 9931, 9975, 10018, 10062, 10107, 10151, 10196, 10242, 10288, 10334, 10380, 10427, 10474, 10522, 10570, 10618, 10667, 10716, 10765, 10815, 10865, 10916, 10967, 11019, 11071, 11123, 11176, 11229, 11283, 11337, 11392, 11447, 11503, 11559, 11615, 11672, 11730, 11788, 11847, 11906, 11965, 12025, 12086, 12147, 12209, 12272, 12335, 12398, 12462, 12527, 12592, 12658, 12725, 12792, 12860, 12929, 12998, 13068, 13139, 13210, 13282, 13355, 13428, 13502, 13577, 13653, 13729, 13807, 13885, 13964, 14043, 14124, 14205, 14288, 14371, 14455, 14540, 14626, 14713, 14800, 14889, 14979, 15070, 15162, 15255, 15349, 15444, 15540, 15637, 15736, 15835, 15936, 16038, 16141, 16246, 16352, 16459, 16567, 16677, 16788, 16901, 17014, 17130, 17247, 17365, 17485, 17607, 17730, 17855, 17981, 18110, 18240, 18372, 18505, 18641, 18778, 18917, 19059, 19202, 19347, 19495, 19645, 19797, 19951, 20107, 20266, 20428, 20591, 20758, 20927, 21098, 21273, 21450, 21630, 21813, 21999, 22188, 22380, 22576, 22775, 22977, 23183, 23392, 23605, 23822, 24043, 24268, 24497, 24730, 24967, 25209, 25456, 25707, 25964, 26225, 26491, 26763, 27040, 27323, 27612, 27907, 28208, 28516, 28830, 29151, 29479, 29815, 30158, 30508, 30867, 31235, 31611, 31996, 32390, 32794, 33209, 33633, 34069, 34515, 34974, 35444, 35927, 36424, 36934, 37458, 37998, 38553, 39124, 39712, 40318, 40942, 41586, 42251, 42936, 43644, 44376, 45132, 45915, 46725, 47563, 48432, 49333, 50268, 51239, 52248, 53297, 54389, 55527, 56712, 57949, 59241, 60592, 62005, 63486, 65039, 66669, 68382, 70186, 72087, 74094, 76215, 78461, 80843, 83373, 86067, 88940, 92011, 95301, 98835, 102641, 106751, 111203, 116042, 121320, 127102, 133461, 140489, 148298, 157025, 166843, 177970, 190685, 205357, 222473, 242701, 266973, 296639, 333719, 381392, 444953, 533932, 667392, 889796, 1334508, 2667869, SILLY_VALUE, -2672488, -1335663, -890310, -667680, -534117, -445081, -381486, -333791, -296696, -267020, -242739, -222505, -205384, -190709, -177990, -166861, -157041, -148312, -140502, -133472, -127112, -121330, -116050, -111211, -106758, -102648, -98842, -95307, -92017, -88945, -86072, -83378, -80847, -78465, -76219, -74098, -72091, -70189, -68385, -66672, -65041, -63489, -62008, -60594, -59244, -57952, -56714, -55529, -54391, -53299, -52250, -51241, -50270, -49335, -48434, -47565, -46726, -45916, -45134, -44377, -43646, -42938, -42252, -41587, -40944, -40319, -39713, -39125, -38554, -37999, -37459, -36935, -36425, -35928, -35445, -34975, -34516, -34069, -33634, -33209, -32795, -32391, -31997, -31612, -31235, -30868, -30509, -30158, -29815, -29480, -29152, -28831, -28516, -28209, -27908, -27613, -27324, -27041, -26764, -26492, -26225, -25964, -25708, -25456, -25210, -24968, -24730, -24497, -24268, -24043, -23822, -23606, -23392, -23183, -22977, -22775, -22576, -22381, -22188, -21999, -21813, -21630, -21450, -21273, -21099, -20927, -20758, -20592, -20428, -20266, -20108, -19951, -19797, -19645, -19495, -19348, -19202, -19059, -18918, -18778, -18641, -18505, -18372, -18240, -18110, -17982, -17855, -17730, -17607, -17486, -17366, -17247, -17130, -17015, -16901, -16788, -16677, -16567, -16459, -16352, -16246, -16141, -16038, -15936, -15835, -15736, -15637, -15540, -15444, -15349, -15255, -15162, -15070, -14979, -14889, -14801, -14713, -14626, -14540, -14455, -14371, -14288, -14205, -14124, -14043, -13964, -13885, -13807, -13729, -13653, -13577, -13502, -13428, -13355, -13282, -13210, -13139, -13068, -12998, -12929, -12860, -12792, -12725, -12659, -12593, -12527, -12462, -12398, -12335, -12272, -12209, -12148, -12086, -12026, -11965, -11906, -11847, -11788, -11730, -11672, -11615, -11559, -11503, -11447, -11392, -11337, -11283, -11229, -11176, -11123, -11071, -11019, -10967, -10916, -10866, -10815, -10765, -10716, -10667, -10618, -10570, -10522, -10474, -10427, -10380, -10334, -10288, -10242, -10197, -10151, -10107, -10062, -10018, -9975, -9931, -9888, -9845, -9803, -9761, -9719, -9678, -9636, -9595, -9555, -9514, -9474, -9435, -9395, -9356, -9317, -9278, -9240, -9202, -9164, -9126, -9089, -9052, -9015, -8978, -8942, -8906, -8870, -8834, -8799, -8764, -8729, -8694, -8660, -8626, -8592, -8558, -8524, -8491, -8458, -8425, -8392, -8359, -8327, -8295, -8263, -8231, -8199, -8168, -8137, -8106, -8075, -8044, -8014, -7984, -7954, -7924, -7894, -7865, -7835, -7806, -7777, -7748, -7719, -7691, -7663, -7634, -7606, -7579, -7551, -7523, -7496, -7469, -7441, -7415, -7388, -7361, -7335, -7308, -7282, -7256, -7230, -7204, -7179, -7153, -7128, -7102, -7077, -7052, -7027, -7003, -6978, -6954, -6929, -6905, -6881, -6857, -6833, -6810, -6786, -6763, -6739, -6716, -6693, -6670, -6647, -6624, -6601, -6579, -6556, -6534, -6512, -6490, -6468, -6446, -6424, -6402, -6381, -6359, -6338, -6317, -6296, -6274, -6253, -6233, -6212, -6191, -6171, -6150, -6130, -6109, -6089, -6069, -6049, -6029, -6009, -5989, -5970, -5950, -5931, -5911, -5892, -5873, -5853, -5834, -5815, -5796, -5778, -5759, -5740, -5722, -5703, -5685, -5666, -5648, -5630, -5612, -5594, -5576, -5558, -5540, -5522, -5505, -5487, -5470, -5452, -5435, -5417, -5400, -5383, -5366, -5349, -5332, -5315, -5298, -5281, -5265, -5248, -5231, -5215, -5199, -5182, -5166, -5150, -5133, -5117, -5101, -5085, -5069, -5053, -5038, -5022, -5006, -4991, -4975, -4959, -4944, -4929, -4913, -4898, -4883, -4867, -4852, -4837, -4822, -4807, -4792, -4777, -4763, -4748, -4733, -4719, -4704, -4689, -4675, -4660, -4646, -4632, -4617, -4603, -4589, -4575, -4561, -4547, -4533, -4519, -4505, -4491, -4477, -4463, -4450, -4436, -4422, -4409, -4395, -4382, -4368, -4355, -4342, -4328, -4315, -4302, -4288, -4275, -4262, -4249, -4236, -4223, -4210, -4197, -4184, -4172, -4159, -4146, -4133, -4121, -4108, -4096, -4083, -4070, -4058, -4046, -4033, -4021, -4008, -3996, -3984, -3972, -3960, -3947, -3935, -3923, -3911, -3899, -3887, -3875, -3863, -3852, -3840, -3828, -3816, -3805, -3793, -3781, -3770, -3758, -3746, -3735, -3723, -3712, -3700, -3689, -3678, -3666, -3655, -3644, -3633, -3621, -3610, -3599, -3588, -3577, -3566, -3555, -3544, -3533, -3522, -3511, -3500, -3489, -3478, -3468, -3457, -3446, -3435, -3425, -3414, -3403, -3393, -3382, -3372, -3361, -3351, -3340, -3330, -3319, -3309, -3298, -3288, -3278, -3267, -3257, -3247, -3237, -3227, -3216, -3206, -3196, -3186, -3176, -3166, -3156, -3146, -3136, -3126, -3116, -3106, -3096, -3086, -3076, -3067, -3057, -3047, -3037, -3028, -3018, -3008, -2999, -2989, -2979, -2970, -2960, -2951, -2941, -2931, -2922, -2913, -2903, -2894, -2884, -2875, -2865, -2856, -2847, -2837, -2828, -2819, -2810, -2800, -2791, -2782, -2773, -2764, -2755, -2745, -2736, -2727, -2718, -2709, -2700, -2691, -2682, -2673, -2664, -2655, -2646, -2638, -2629, -2620, -2611, -2602, -2593, -2584, -2576, -2567, -2558, -2549, -2541, -2532, -2523, -2515, -2506, -2497, -2489, -2480, -2472, -2463, -2455, -2446, -2438, -2429, -2421, -2412, -2404, -2395, -2387, -2378, -2370, -2362, -2353, -2345, -2336, -2328, -2320, -2312, -2303, -2295, -2287, -2279, -2270, -2262, -2254, -2246, -2238, -2229, -2221, -2213, -2205, -2197, -2189, -2181, -2173, -2165, -2157, -2149, -2141, -2133, -2125, -2117, -2109, -2101, -2093, -2085, -2077, -2069, -2061, -2053, -2046, -2038, -2030, -2022, -2014, -2006, -1999, -1991, -1983, -1975, -1968, -1960, -1952, -1944, -1937, -1929, -1921, -1914, -1906, -1898, -1891, -1883, -1876, -1868, -1860, -1853, -1845, -1838, -1830, -1823, -1815, -1808, -1800, -1793, -1785, -1778, -1770, -1763, -1755, -1748, -1740, -1733, -1726, -1718, -1711, -1703, -1696, -1689, -1681, -1674, -1667, -1659, -1652, -1645, -1638, -1630, -1623, -1616, -1608, -1601, -1594, -1587, -1580, -1572, -1565, -1558, -1551, -1544, -1536, -1529, -1522, -1515, -1508, -1501, -1493, -1486, -1479, -1472, -1465, -1458, -1451, -1444, -1437, -1430, -1423, -1416, -1409, -1402, -1395, -1388, -1381, -1374, -1367, -1360, -1353, -1346, -1339, -1332, -1325, -1318, -1311, -1304, -1297, -1290, -1283, -1276, -1270, -1263, -1256, -1249, -1242, -1235, -1228, -1221, -1215, -1208, -1201, -1194, -1187, -1181, -1174, -1167, -1160, -1153, -1147, -1140, -1133, -1126, -1120, -1113, -1106, -1099, -1093, -1086, -1079, -1072, -1066, -1059, -1052, -1046, -1039, -1032, -1026, -1019, -1012, -1005, -999, -992, -986, -979, -972, -966, -959, -952, -946, -939, -933, -926, -919, -913, -906, -900, -893, -886, -880, -873, -867, -860, -854, -847, -840, -834, -827, -821, -814, -808, -801, -795, -788, -782, -775, -769, -762, -756, -749, -743, -736, -730, -723, -717, -710, -704, -697, -691, -684, -678, -671, -665, -659, -652, -646, -639, -633, -626, -620, -614, -607, -601, -594, -588, -581, -575, -569, -562, -556, -549, -543, -537, -530, -524, -517, -511, -505, -498, -492, -486, -479, -473, -466, -460, -454, -447, -441, -435, -428, -422, -416, -409, -403, -397, -390, -384, -378, -371, -365, -359, -352, -346, -340, -333, -327, -321, -314, -308, -302, -295, -289, -283, -276, -270, -264, -257, -251, -245, -239, -232, -226, -220, -213, -207, -201, -194, -188, -182, -176, -169, -163, -157, -150, -144, -138, -132, -125, -119, -113, -106, -100, -94, -87, -81, -75, -69, -62, -56, -50, -43, -37, -31, -25, -18, -12, -6, 0, 6, 12, 18, 25, 31, 37, 43, 50, 56, 62, 69, 75, 81, 87, 94, 100, 106, 113, 119, 125, 131, 138, 144, 150, 157, 163, 169, 176, 182, 188, 194, 201, 207, 213, 220, 226, 232, 239, 245, 251, 257, 264, 270, 276, 283, 289, 295, 302, 308, 314, 321, 327, 333, 340, 346, 352, 359, 365, 371, 378, 384, 390, 397, 403, 409, 416, 422, 428, 435, 441, 447, 454, 460, 466, 473, 479, 486, 492, 498, 505, 511, 517, 524, 530, 537, 543, 549, 556, 562, 569, 575, 581, 588, 594, 601, 607, 613, 620, 626, 633, 639, 646, 652, 659, 665, 671, 678, 684, 691, 697, 704, 710, 717, 723, 730, 736, 743, 749, 756, 762, 769, 775, 782, 788, 795, 801, 808, 814, 821, 827, 834, 840, 847, 853, 860, 867, 873, 880, 886, 893, 899, 906, 913, 919, 926, 932, 939, 946, 952, 959, 966, 972, 979, 986, 992, 999, 1005, 1012, 1019, 1025, 1032, 1039, 1046, 1052, 1059, 1066, 1072, 1079, 1086, 1093, 1099, 1106, 1113, 1119, 1126, 1133, 1140, 1147, 1153, 1160, 1167, 1174, 1180, 1187, 1194, 1201, 1208, 1215, 1221, 1228, 1235, 1242, 1249, 1256, 1263, 1269, 1276, 1283, 1290, 1297, 1304, 1311, 1318, 1325, 1332, 1339, 1346, 1353, 1360, 1367, 1374, 1381, 1388, 1395, 1402, 1409, 1416, 1423, 1430, 1437, 1444, 1451, 1458, 1465, 1472, 1479, 1486, 1493, 1501, 1508, 1515, 1522, 1529, 1536, 1544, 1551, 1558, 1565, 1572, 1579, 1587, 1594, 1601, 1608, 1616, 1623, 1630, 1638, 1645, 1652, 1659, 1667, 1674, 1681, 1689, 1696, 1703, 1711, 1718, 1726, 1733, 1740, 1748, 1755, 1763, 1770, 1778, 1785, 1793, 1800, 1808, 1815, 1823, 1830, 1838, 1845, 1853, 1860, 1868, 1876, 1883, 1891, 1898, 1906, 1914, 1921, 1929, 1937, 1944, 1952, 1960, 1968, 1975, 1983, 1991, 1999, 2006, 2014, 2022, 2030, 2038, 2046, 2053, 2061, 2069, 2077, 2085, 2093, 2101, 2109, 2117, 2125, 2133, 2141, 2149, 2157, 2165, 2173, 2181, 2189, 2197, 2205, 2213, 2221, 2229, 2238, 2246, 2254, 2262, 2270, 2279, 2287, 2295, 2303, 2312, 2320, 2328, 2336, 2345, 2353, 2362, 2370, 2378, 2387, 2395, 2404, 2412, 2420, 2429, 2437, 2446, 2455, 2463, 2472, 2480, 2489, 2497, 2506, 2515, 2523, 2532, 2541, 2549, 2558, 2567, 2576, 2584, 2593, 2602, 2611, 2620, 2629, 2637, 2646, 2655, 2664, 2673, 2682, 2691, 2700, 2709, 2718, 2727, 2736, 2745, 2755, 2764, 2773, 2782, 2791, 2800, 2810, 2819, 2828, 2837, 2847, 2856, 2865, 2875, 2884, 2894, 2903, 2913, 2922, 2931, 2941, 2951, 2960, 2970, 2979, 2989, 2998, 3008, 3018, 3028, 3037, 3047, 3057, 3067, 3076, 3086, 3096, 3106, 3116, 3126, 3136, 3146, 3156, 3166, 3176, 3186, 3196, 3206, 3216, 3226, 3237, 3247, 3257, 3267, 3278, 3288, 3298, 3309, 3319, 3330, 3340, 3350, 3361, 3372, 3382, 3393, 3403, 3414, 3425, 3435, 3446, 3457, 3467, 3478, 3489, 3500, 3511, 3522, 3533, 3544, 3555, 3566, 3577, 3588, 3599, 3610, 3621, 3633, 3644, 3655, 3666, 3678, 3689, 3700, 3712, 3723, 3735, 3746, 3758, 3769, 3781, 3793, 3804, 3816, 3828, 3840, 3852, 3863, 3875, 3887, 3899, 3911, 3923, 3935, 3947, 3960, 3972, 3984, 3996, 4008, 4021, 4033, 4046, 4058, 4070, 4083, 4095, 4108, 4121, 4133, 4146, 4159, 4172, 4184, 4197, 4210, 4223, 4236, 4249, 4262, 4275, 4288, 4302, 4315, 4328, 4341, 4355, 4368, 4382, 4395, 4409, 4422, 4436, 4450, 4463, 4477, 4491, 4505, 4519, 4533, 4547, 4561, 4575, 4589, 4603, 4617, 4632, 4646, 4660, 4675, 4689, 4704, 4719, 4733, 4748, 4763, 4777, 4792, 4807, 4822, 4837, 4852, 4867, 4883, 4898, 4913, 4928, 4944, 4959, 4975, 4990, 5006, 5022, 5038, 5053, 5069, 5085, 5101, 5117, 5133, 5150, 5166, 5182, 5198, 5215, 5231, 5248, 5265, 5281, 5298, 5315, 5332, 5349, 5366, 5383, 5400, 5417, 5435, 5452, 5469, 5487, 5505, 5522, 5540, 5558, 5576, 5594, 5612, 5630, 5648, 5666, 5685, 5703, 5722, 5740, 5759, 5778, 5796, 5815, 5834, 5853, 5873, 5892, 5911, 5931, 5950, 5970, 5989, 6009, 6029, 6049, 6069, 6089, 6109, 6130, 6150, 6170, 6191, 6212, 6233, 6253, 6274, 6295, 6317, 6338, 6359, 6381, 6402, 6424, 6446, 6468, 6490, 6512, 6534, 6556, 6579, 6601, 6624, 6647, 6670, 6693, 6716, 6739, 6762, 6786, 6809, 6833, 6857, 6881, 6905, 6929, 6954, 6978, 7003, 7027, 7052, 7077, 7102, 7128, 7153, 7178, 7204, 7230, 7256, 7282, 7308, 7334, 7361, 7388, 7414, 7441, 7468, 7496, 7523, 7551, 7578, 7606, 7634, 7663, 7691, 7719, 7748, 7777, 7806, 7835, 7865, 7894, 7924, 7954, 7984, 8014, 8044, 8075, 8106, 8137, 8168, 8199, 8231, 8263, 8295, 8327, 8359, 8392, 8424, 8457, 8491, 8524, 8558, 8591, 8625, 8660, 8694, 8729, 8764, 8799, 8834, 8870, 8906, 8942, 8978, 9015, 9052, 9089, 9126, 9164, 9202, 9240, 9278, 9317, 9356, 9395, 9435, 9474, 9514, 9555, 9595, 9636, 9677, 9719, 9761, 9803, 9845, 9888, 9931, 9974, 10018, 10062, 10107, 10151, 10196, 10242, 10287, 10334, 10380, 10427, 10474, 10522, 10570, 10618, 10667, 10716, 10765, 10815, 10865, 10916, 10967, 11019, 11071, 11123, 11176, 11229, 11283, 11337, 11392, 11447, 11503, 11559, 11615, 11672, 11730, 11788, 11846, 11906, 11965, 12025, 12086, 12147, 12209, 12272, 12335, 12398, 12462, 12527, 12592, 12658, 12725, 12792, 12860, 12929, 12998, 13068, 13138, 13210, 13282, 13354, 13428, 13502, 13577, 13653, 13729, 13806, 13885, 13963, 14043, 14124, 14205, 14287, 14371, 14455, 14540, 14626, 14712, 14800, 14889, 14979, 15070, 15162, 15255, 15349, 15444, 15540, 15637, 15735, 15835, 15936, 16038, 16141, 16246, 16351, 16458, 16567, 16677, 16788, 16900, 17014, 17130, 17247, 17365, 17485, 17607, 17730, 17855, 17981, 18109, 18239, 18371, 18505, 18640, 18778, 18917, 19058, 19202, 19347, 19495, 19644, 19796, 19951, 20107, 20266, 20427, 20591, 20757, 20926, 21098, 21272, 21450, 21630, 21813, 21999, 22188, 22380, 22575, 22774, 22977, 23182, 23392, 23605, 23822, 24042, 24267, 24496, 24729, 24967, 25209, 25455, 25707, 25963, 26224, 26491, 26763, 27040, 27323, 27612, 27907, 28208, 28515, 28829, 29150, 29479, 29814, 30157, 30508, 30867, 31234, 31610, 31995, 32390, 32794, 33208, 33633, 34068, 34515, 34973, 35443, 35927, 36423, 36933, 37457, 37997, 38552, 39123, 39711, 40317, 40941, 41585, 42250, 42935, 43643, 44375, 45131, 45913, 46723, 47562, 48431, 49332, 50267, 51238, 52246, 53296, 54387, 55525, 56710, 57947, 59239, 60590, 62003, 63483, 65036, 66666, 68379, 70183, 72084, 74090, 76211, 78457, 80839, 83369, 86062, 88935, 92006, 95296, 98829, 102634, 106743, 111195, 116033, 121311, 127091, 133449, 140476, 148284, 157009, 166825, 177949, 190662, 205330, 222441, 242663, 266927, 296582, 333647, 381298, 444824, 533748, 667103, 889284, 1333355, 2663266, SILLY_VALUE, -2677123, -1336819, -890823, -667969, -534302, -445209, -381580, -333863, -296753, -267066, -242777, -222537, -205412, -190733, -178011, -166879, -157057, -148326, -140515, -133484, -127123, -121340, -116059, -111219, -106765, -102654, -98848, -95313, -92022, -88950, -86077, -83382, -80851, -78469, -76223, -74101, -72094, -70193, -68388, -66675, -65044, -63491, -62010, -60597, -59246, -57954, -56716, -55531, -54393, -53301, -52252, -51243, -50272, -49336, -48435, -47566, -46727, -45918, -45135, -44379, -43647, -42939, -42253, -41589, -40945, -40320, -39714, -39126, -38555, -38000, -37460, -36936, -36426, -35929, -35446, -34975, -34517, -34070, -33635, -33210, -32796, -32392, -31997, -31612, -31236, -30869, -30510, -30159, -29816, -29480, -29152, -28831, -28517, -28209, -27908, -27613, -27324, -27041, -26764, -26492, -26226, -25964, -25708, -25457, -25210, -24968, -24731, -24497, -24268, -24044, -23823, -23606, -23393, -23183, -22978, -22775, -22576, -22381, -22189, -22000, -21814, -21631, -21451, -21273, -21099, -20927, -20758, -20592, -20428, -20267, -20108, -19951, -19797, -19645, -19495, -19348, -19202, -19059, -18918, -18778, -18641, -18506, -18372, -18240, -18110, -17982, -17855, -17731, -17607, -17486, -17366, -17247, -17130, -17015, -16901, -16788, -16677, -16567, -16459, -16352, -16246, -16142, -16038, -15936, -15836, -15736, -15638, -15540, -15444, -15349, -15255, -15162, -15070, -14979, -14890, -14801, -14713, -14626, -14540, -14455, -14371, -14288, -14206, -14124, -14044, -13964, -13885, -13807, -13730, -13653, -13577, -13502, -13428, -13355, -13282, -13210, -13139, -13068, -12998, -12929, -12860, -12793, -12725, -12659, -12593, -12527, -12463, -12398, -12335, -12272, -12210, -12148, -12086, -12026, -11965, -11906, -11847, -11788, -11730, -11673, -11615, -11559, -11503, -11447, -11392, -11337, -11283, -11229, -11176, -11123, -11071, -11019, -10967, -10916, -10866, -10815, -10765, -10716, -10667, -10618, -10570, -10522, -10474, -10427, -10380, -10334, -10288, -10242, -10197, -10152, -10107, -10062, -10018, -9975, -9931, -9888, -9845, -9803, -9761, -9719, -9678, -9636, -9595, -9555, -9515, -9474, -9435, -9395, -9356, -9317, -9278, -9240, -9202, -9164, -9126, -9089, -9052, -9015, -8979, -8942, -8906, -8870, -8835, -8799, -8764, -8729, -8694, -8660, -8626, -8592, -8558, -8524, -8491, -8458, -8425, -8392, -8359, -8327, -8295, -8263, -8231, -8199, -8168, -8137, -8106, -8075, -8045, -8014, -7984, -7954, -7924, -7894, -7865, -7835, -7806, -7777, -7748, -7720, -7691, -7663, -7634, -7606, -7579, -7551, -7523, -7496, -7469, -7442, -7415, -7388, -7361, -7335, -7308, -7282, -7256, -7230, -7204, -7179, -7153, -7128, -7102, -7077, -7052, -7028, -7003, -6978, -6954, -6929, -6905, -6881, -6857, -6833, -6810, -6786, -6763, -6739, -6716, -6693, -6670, -6647, -6624, -6602, -6579, -6557, -6534, -6512, -6490, -6468, -6446, -6424, -6402, -6381, -6359, -6338, -6317, -6296, -6274, -6254, -6233, -6212, -6191, -6171, -6150, -6130, -6109, -6089, -6069, -6049, -6029, -6009, -5989, -5970, -5950, -5931, -5911, -5892, -5873, -5853, -5834, -5815, -5797, -5778, -5759, -5740, -5722, -5703, -5685, -5666, -5648, -5630, -5612, -5594, -5576, -5558, -5540, -5522, -5505, -5487, -5470, -5452, -5435, -5417, -5400, -5383, -5366, -5349, -5332, -5315, -5298, -5281, -5265, -5248, -5232, -5215, -5199, -5182, -5166, -5150, -5133, -5117, -5101, -5085, -5069, -5053, -5038, -5022, -5006, -4991, -4975, -4959, -4944, -4929, -4913, -4898, -4883, -4867, -4852, -4837, -4822, -4807, -4792, -4778, -4763, -4748, -4733, -4719, -4704, -4689, -4675, -4661, -4646, -4632, -4617, -4603, -4589, -4575, -4561, -4547, -4533, -4519, -4505, -4491, -4477, -4463, -4450, -4436, -4422, -4409, -4395, -4382, -4368, -4355, -4342, -4328, -4315, -4302, -4289, -4275, -4262, -4249, -4236, -4223, -4210, -4197, -4184, -4172, -4159, -4146, -4133, -4121, -4108, -4096, -4083, -4070, -4058, -4046, -4033, -4021, -4009, -3996, -3984, -3972, -3960, -3947, -3935, -3923, -3911, -3899, -3887, -3875, -3863, -3852, -3840, -3828, -3816, -3805, -3793, -3781, -3770, -3758, -3746, -3735, -3723, -3712, -3701, -3689, -3678, -3666, -3655, -3644, -3633, -3621, -3610, -3599, -3588, -3577, -3566, -3555, -3544, -3533, -3522, -3511, -3500, -3489, -3478, -3468, -3457, -3446, -3435, -3425, -3414, -3403, -3393, -3382, -3372, -3361, -3351, -3340, -3330, -3319, -3309, -3298, -3288, -3278, -3267, -3257, -3247, -3237, -3227, -3216, -3206, -3196, -3186, -3176, -3166, -3156, -3146, -3136, -3126, -3116, -3106, -3096, -3086, -3076, -3067, -3057, -3047, -3037, -3028, -3018, -3008, -2999, -2989, -2979, -2970, -2960, -2951, -2941, -2932, -2922, -2913, -2903, -2894, -2884, -2875, -2865, -2856, -2847, -2838, -2828, -2819, -2810, -2800, -2791, -2782, -2773, -2764, -2755, -2745, -2736, -2727, -2718, -2709, -2700, -2691, -2682, -2673, -2664, -2655, -2646, -2638, -2629, -2620, -2611, -2602, -2593, -2584, -2576, -2567, -2558, -2549, -2541, -2532, -2523, -2515, -2506, -2497, -2489, -2480, -2472, -2463, -2455, -2446, -2438, -2429, -2421, -2412, -2404, -2395, -2387, -2378, -2370, -2362, -2353, -2345, -2337, -2328, -2320, -2312, -2303, -2295, -2287, -2279, -2270, -2262, -2254, -2246, -2238, -2229, -2221, -2213, -2205, -2197, -2189, -2181, -2173, -2165, -2157, -2149, -2141, -2133, -2125, -2117, -2109, -2101, -2093, -2085, -2077, -2069, -2061, -2053, -2046, -2038, -2030, -2022, -2014, -2006, -1999, -1991, -1983, -1975, -1968, -1960, -1952, -1944, -1937, -1929, -1921, -1914, -1906, -1898, -1891, -1883, -1876, -1868, -1860, -1853, -1845, -1838, -1830, -1823, -1815, -1808, -1800, -1793, -1785, -1778, -1770, -1763, -1755, -1748, -1740, -1733, -1726, -1718, -1711, -1704, -1696, -1689, -1681, -1674, -1667, -1659, -1652, -1645, -1638, -1630, -1623, -1616, -1608, -1601, -1594, -1587, -1580, -1572, -1565, -1558, -1551, -1544, -1536, -1529, -1522, -1515, -1508, -1501, -1494, -1486, -1479, -1472, -1465, -1458, -1451, -1444, -1437, -1430, -1423, -1416, -1409, -1402, -1395, -1388, -1381, -1374, -1367, -1360, -1353, -1346, -1339, -1332, -1325, -1318, -1311, -1304, -1297, -1290, -1283, -1276, -1270, -1263, -1256, -1249, -1242, -1235, -1228, -1221, -1215, -1208, -1201, -1194, -1187, -1181, -1174, -1167, -1160, -1153, -1147, -1140, -1133, -1126, -1120, -1113, -1106, -1099, -1093, -1086, -1079, -1072, -1066, -1059, -1052, -1046, -1039, -1032, -1026, -1019, -1012, -1006, -999, -992, -986, -979, -972, -966, -959, -952, -946, -939, -933, -926, -919, -913, -906, -900, -893, -886, -880, -873, -867, -860, -854, -847, -840, -834, -827, -821, -814, -808, -801, -795, -788, -782, -775, -769, -762, -756, -749, -743, -736, -730, -723, -717, -710, -704, -697, -691, -684, -678, -671, -665, -659, -652, -646, -639, -633, -626, -620, -614, -607, -601, -594, -588, -581, -575, -569, -562, -556, -549, -543, -537, -530, -524, -517, -511, -505, -498, -492, -486, -479, -473, -466, -460, -454, -447, -441, -435, -428, -422, -416, -409, -403, -397, -390, -384, -378, -371, -365, -359, -352, -346, -340, -333, -327, -321, -314, -308, -302, -295, -289, -283, -276, -270, -264, -257, -251, -245, -239, -232, -226, -220, -213, -207, -201, -194, -188, -182, -176, -169, -163, -157, -150, -144, -138, -132, -125, -119, -113, -106, -100, -94, -87, -81, -75, -69, -62, -56, -50, -44, -37, -31, -25, -18, -12, -6, }; #if 1 // NOT USED // arcsin LUT int ArcSinTable[4097] = { -1024, -1003, -995, -988, -983, -978, -974, -970, -966, -962, -959, -956, -953, -950, -947, -945, -942, -939, -937, -935, -932, -930, -928, -926, -924, -922, -920, -918, -916, -914, -912, -910, -908, -906, -905, -903, -901, -899, -898, -896, -894, -893, -891, -890, -888, -887, -885, -884, -882, -881, -879, -878, -876, -875, -873, -872, -871, -869, -868, -867, -865, -864, -863, -861, -860, -859, -858, -856, -855, -854, -853, -851, -850, -849, -848, -847, -845, -844, -843, -842, -841, -840, -838, -837, -836, -835, -834, -833, -832, -831, -830, -828, -827, -826, -825, -824, -823, -822, -821, -820, -819, -818, -817, -816, -815, -814, -813, -812, -811, -810, -809, -808, -807, -806, -805, -804, -803, -802, -801, -800, -799, -798, -797, -796, -795, -795, -794, -793, -792, -791, -790, -789, -788, -787, -786, -785, -785, -784, -783, -782, -781, -780, -779, -778, -778, -777, -776, -775, -774, -773, -772, -772, -771, -770, -769, -768, -767, -767, -766, -765, -764, -763, -762, -762, -761, -760, -759, -758, -758, -757, -756, -755, -754, -754, -753, -752, -751, -750, -750, -749, -748, -747, -747, -746, -745, -744, -744, -743, -742, -741, -740, -740, -739, -738, -737, -737, -736, -735, -734, -734, -733, -732, -732, -731, -730, -729, -729, -728, -727, -726, -726, -725, -724, -724, -723, -722, -721, -721, -720, -719, -719, -718, -717, -716, -716, -715, -714, -714, -713, -712, -712, -711, -710, -710, -709, -708, -707, -707, -706, -705, -705, -704, -703, -703, -702, -701, -701, -700, -699, -699, -698, -697, -697, -696, -695, -695, -694, -693, -693, -692, -691, -691, -690, -689, -689, -688, -688, -687, -686, -686, -685, -684, -684, -683, -682, -682, -681, -681, -680, -679, -679, -678, -677, -677, -676, -675, -675, -674, -674, -673, -672, -672, -671, -670, -670, -669, -669, -668, -667, -667, -666, -666, -665, -664, -664, -663, -663, -662, -661, -661, -660, -660, -659, -658, -658, -657, -657, -656, -655, -655, -654, -654, -653, -652, -652, -651, -651, -650, -649, -649, -648, -648, -647, -647, -646, -645, -645, -644, -644, -643, -642, -642, -641, -641, -640, -640, -639, -638, -638, -637, -637, -636, -636, -635, -634, -634, -633, -633, -632, -632, -631, -631, -630, -629, -629, -628, -628, -627, -627, -626, -625, -625, -624, -624, -623, -623, -622, -622, -621, -621, -620, -619, -619, -618, -618, -617, -617, -616, -616, -615, -615, -614, -613, -613, -612, -612, -611, -611, -610, -610, -609, -609, -608, -608, -607, -606, -606, -605, -605, -604, -604, -603, -603, -602, -602, -601, -601, -600, -600, -599, -599, -598, -597, -597, -596, -596, -595, -595, -594, -594, -593, -593, -592, -592, -591, -591, -590, -590, -589, -589, -588, -588, -587, -587, -586, -586, -585, -585, -584, -584, -583, -583, -582, -581, -581, -580, -580, -579, -579, -578, -578, -577, -577, -576, -576, -575, -575, -574, -574, -573, -573, -572, -572, -571, -571, -570, -570, -569, -569, -568, -568, -567, -567, -566, -566, -565, -565, -565, -564, -564, -563, -563, -562, -562, -561, -561, -560, -560, -559, -559, -558, -558, -557, -557, -556, -556, -555, -555, -554, -554, -553, -553, -552, -552, -551, -551, -550, -550, -549, -549, -549, -548, -548, -547, -547, -546, -546, -545, -545, -544, -544, -543, -543, -542, -542, -541, -541, -540, -540, -540, -539, -539, -538, -538, -537, -537, -536, -536, -535, -535, -534, -534, -533, -533, -532, -532, -532, -531, -531, -530, -530, -529, -529, -528, -528, -527, -527, -526, -526, -526, -525, -525, -524, -524, -523, -523, -522, -522, -521, -521, -520, -520, -520, -519, -519, -518, -518, -517, -517, -516, -516, -515, -515, -515, -514, -514, -513, -513, -512, -512, -511, -511, -511, -510, -510, -509, -509, -508, -508, -507, -507, -506, -506, -506, -505, -505, -504, -504, -503, -503, -502, -502, -502, -501, -501, -500, -500, -499, -499, -499, -498, -498, -497, -497, -496, -496, -495, -495, -495, -494, -494, -493, -493, -492, -492, -491, -491, -491, -490, -490, -489, -489, -488, -488, -488, -487, -487, -486, -486, -485, -485, -485, -484, -484, -483, -483, -482, -482, -481, -481, -481, -480, -480, -479, -479, -478, -478, -478, -477, -477, -476, -476, -475, -475, -475, -474, -474, -473, -473, -473, -472, -472, -471, -471, -470, -470, -470, -469, -469, -468, -468, -467, -467, -467, -466, -466, -465, -465, -464, -464, -464, -463, -463, -462, -462, -462, -461, -461, -460, -460, -459, -459, -459, -458, -458, -457, -457, -457, -456, -456, -455, -455, -454, -454, -454, -453, -453, -452, -452, -452, -451, -451, -450, -450, -449, -449, -449, -448, -448, -447, -447, -447, -446, -446, -445, -445, -445, -444, -444, -443, -443, -442, -442, -442, -441, -441, -440, -440, -440, -439, -439, -438, -438, -438, -437, -437, -436, -436, -436, -435, -435, -434, -434, -434, -433, -433, -432, -432, -432, -431, -431, -430, -430, -429, -429, -429, -428, -428, -427, -427, -427, -426, -426, -425, -425, -425, -424, -424, -423, -423, -423, -422, -422, -421, -421, -421, -420, -420, -419, -419, -419, -418, -418, -417, -417, -417, -416, -416, -416, -415, -415, -414, -414, -414, -413, -413, -412, -412, -412, -411, -411, -410, -410, -410, -409, -409, -408, -408, -408, -407, -407, -406, -406, -406, -405, -405, -404, -404, -404, -403, -403, -403, -402, -402, -401, -401, -401, -400, -400, -399, -399, -399, -398, -398, -397, -397, -397, -396, -396, -396, -395, -395, -394, -394, -394, -393, -393, -392, -392, -392, -391, -391, -390, -390, -390, -389, -389, -389, -388, -388, -387, -387, -387, -386, -386, -385, -385, -385, -384, -384, -384, -383, -383, -382, -382, -382, -381, -381, -381, -380, -380, -379, -379, -379, -378, -378, -377, -377, -377, -376, -376, -376, -375, -375, -374, -374, -374, -373, -373, -373, -372, -372, -371, -371, -371, -370, -370, -370, -369, -369, -368, -368, -368, -367, -367, -366, -366, -366, -365, -365, -365, -364, -364, -363, -363, -363, -362, -362, -362, -361, -361, -360, -360, -360, -359, -359, -359, -358, -358, -357, -357, -357, -356, -356, -356, -355, -355, -355, -354, -354, -353, -353, -353, -352, -352, -352, -351, -351, -350, -350, -350, -349, -349, -349, -348, -348, -347, -347, -347, -346, -346, -346, -345, -345, -345, -344, -344, -343, -343, -343, -342, -342, -342, -341, -341, -340, -340, -340, -339, -339, -339, -338, -338, -338, -337, -337, -336, -336, -336, -335, -335, -335, -334, -334, -334, -333, -333, -332, -332, -332, -331, -331, -331, -330, -330, -329, -329, -329, -328, -328, -328, -327, -327, -327, -326, -326, -325, -325, -325, -324, -324, -324, -323, -323, -323, -322, -322, -322, -321, -321, -320, -320, -320, -319, -319, -319, -318, -318, -318, -317, -317, -316, -316, -316, -315, -315, -315, -314, -314, -314, -313, -313, -313, -312, -312, -311, -311, -311, -310, -310, -310, -309, -309, -309, -308, -308, -307, -307, -307, -306, -306, -306, -305, -305, -305, -304, -304, -304, -303, -303, -303, -302, -302, -301, -301, -301, -300, -300, -300, -299, -299, -299, -298, -298, -298, -297, -297, -296, -296, -296, -295, -295, -295, -294, -294, -294, -293, -293, -293, -292, -292, -292, -291, -291, -290, -290, -290, -289, -289, -289, -288, -288, -288, -287, -287, -287, -286, -286, -286, -285, -285, -284, -284, -284, -283, -283, -283, -282, -282, -282, -281, -281, -281, -280, -280, -280, -279, -279, -279, -278, -278, -277, -277, -277, -276, -276, -276, -275, -275, -275, -274, -274, -274, -273, -273, -273, -272, -272, -272, -271, -271, -270, -270, -270, -269, -269, -269, -268, -268, -268, -267, -267, -267, -266, -266, -266, -265, -265, -265, -264, -264, -264, -263, -263, -262, -262, -262, -261, -261, -261, -260, -260, -260, -259, -259, -259, -258, -258, -258, -257, -257, -257, -256, -256, -256, -255, -255, -255, -254, -254, -254, -253, -253, -252, -252, -252, -251, -251, -251, -250, -250, -250, -249, -249, -249, -248, -248, -248, -247, -247, -247, -246, -246, -246, -245, -245, -245, -244, -244, -244, -243, -243, -243, -242, -242, -242, -241, -241, -241, -240, -240, -239, -239, -239, -238, -238, -238, -237, -237, -237, -236, -236, -236, -235, -235, -235, -234, -234, -234, -233, -233, -233, -232, -232, -232, -231, -231, -231, -230, -230, -230, -229, -229, -229, -228, -228, -228, -227, -227, -227, -226, -226, -226, -225, -225, -225, -224, -224, -224, -223, -223, -223, -222, -222, -221, -221, -221, -220, -220, -220, -219, -219, -219, -218, -218, -218, -217, -217, -217, -216, -216, -216, -215, -215, -215, -214, -214, -214, -213, -213, -213, -212, -212, -212, -211, -211, -211, -210, -210, -210, -209, -209, -209, -208, -208, -208, -207, -207, -207, -206, -206, -206, -205, -205, -205, -204, -204, -204, -203, -203, -203, -202, -202, -202, -201, -201, -201, -200, -200, -200, -199, -199, -199, -198, -198, -198, -197, -197, -197, -196, -196, -196, -195, -195, -195, -194, -194, -194, -193, -193, -193, -192, -192, -192, -191, -191, -191, -190, -190, -190, -189, -189, -189, -188, -188, -188, -187, -187, -187, -186, -186, -186, -185, -185, -185, -184, -184, -184, -183, -183, -183, -182, -182, -182, -181, -181, -181, -180, -180, -180, -179, -179, -179, -178, -178, -178, -177, -177, -177, -176, -176, -176, -175, -175, -175, -174, -174, -174, -173, -173, -173, -172, -172, -172, -171, -171, -171, -170, -170, -170, -169, -169, -169, -168, -168, -168, -168, -167, -167, -167, -166, -166, -166, -165, -165, -165, -164, -164, -164, -163, -163, -163, -162, -162, -162, -161, -161, -161, -160, -160, -160, -159, -159, -159, -158, -158, -158, -157, -157, -157, -156, -156, -156, -155, -155, -155, -154, -154, -154, -153, -153, -153, -152, -152, -152, -151, -151, -151, -150, -150, -150, -149, -149, -149, -148, -148, -148, -148, -147, -147, -147, -146, -146, -146, -145, -145, -145, -144, -144, -144, -143, -143, -143, -142, -142, -142, -141, -141, -141, -140, -140, -140, -139, -139, -139, -138, -138, -138, -137, -137, -137, -136, -136, -136, -135, -135, -135, -134, -134, -134, -133, -133, -133, -133, -132, -132, -132, -131, -131, -131, -130, -130, -130, -129, -129, -129, -128, -128, -128, -127, -127, -127, -126, -126, -126, -125, -125, -125, -124, -124, -124, -123, -123, -123, -122, -122, -122, -121, -121, -121, -121, -120, -120, -120, -119, -119, -119, -118, -118, -118, -117, -117, -117, -116, -116, -116, -115, -115, -115, -114, -114, -114, -113, -113, -113, -112, -112, -112, -111, -111, -111, -110, -110, -110, -110, -109, -109, -109, -108, -108, -108, -107, -107, -107, -106, -106, -106, -105, -105, -105, -104, -104, -104, -103, -103, -103, -102, -102, -102, -101, -101, -101, -100, -100, -100, -100, -99, -99, -99, -98, -98, -98, -97, -97, -97, -96, -96, -96, -95, -95, -95, -94, -94, -94, -93, -93, -93, -92, -92, -92, -91, -91, -91, -91, -90, -90, -90, -89, -89, -89, -88, -88, -88, -87, -87, -87, -86, -86, -86, -85, -85, -85, -84, -84, -84, -83, -83, -83, -82, -82, -82, -82, -81, -81, -81, -80, -80, -80, -79, -79, -79, -78, -78, -78, -77, -77, -77, -76, -76, -76, -75, -75, -75, -74, -74, -74, -74, -73, -73, -73, -72, -72, -72, -71, -71, -71, -70, -70, -70, -69, -69, -69, -68, -68, -68, -67, -67, -67, -66, -66, -66, -66, -65, -65, -65, -64, -64, -64, -63, -63, -63, -62, -62, -62, -61, -61, -61, -60, -60, -60, -59, -59, -59, -58, -58, -58, -58, -57, -57, -57, -56, -56, -56, -55, -55, -55, -54, -54, -54, -53, -53, -53, -52, -52, -52, -51, -51, -51, -50, -50, -50, -50, -49, -49, -49, -48, -48, -48, -47, -47, -47, -46, -46, -46, -45, -45, -45, -44, -44, -44, -43, -43, -43, -43, -42, -42, -42, -41, -41, -41, -40, -40, -40, -39, -39, -39, -38, -38, -38, -37, -37, -37, -36, -36, -36, -35, -35, -35, -35, -34, -34, -34, -33, -33, -33, -32, -32, -32, -31, -31, -31, -30, -30, -30, -29, -29, -29, -28, -28, -28, -28, -27, -27, -27, -26, -26, -26, -25, -25, -25, -24, -24, -24, -23, -23, -23, -22, -22, -22, -21, -21, -21, -21, -20, -20, -20, -19, -19, -19, -18, -18, -18, -17, -17, -17, -16, -16, -16, -15, -15, -15, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -9, -9, -9, -8, -8, -8, -7, -7, -7, -7, -6, -6, -6, -5, -5, -5, -4, -4, -4, -3, -3, -3, -2, -2, -2, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, 38, 39, 39, 39, 40, 40, 40, 41, 41, 41, 42, 42, 42, 43, 43, 43, 43, 44, 44, 44, 45, 45, 45, 46, 46, 46, 47, 47, 47, 48, 48, 48, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 52, 52, 52, 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 66, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 72, 72, 72, 73, 73, 73, 74, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 82, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 90, 90, 90, 91, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 172, 172, 172, 173, 173, 173, 174, 174, 174, 175, 175, 175, 176, 176, 176, 177, 177, 177, 178, 178, 178, 179, 179, 179, 180, 180, 180, 181, 181, 181, 182, 182, 182, 183, 183, 183, 184, 184, 184, 185, 185, 185, 186, 186, 186, 187, 187, 187, 188, 188, 188, 189, 189, 189, 190, 190, 190, 191, 191, 191, 192, 192, 192, 193, 193, 193, 194, 194, 194, 195, 195, 195, 196, 196, 196, 197, 197, 197, 198, 198, 198, 199, 199, 199, 200, 200, 200, 201, 201, 201, 202, 202, 202, 203, 203, 203, 204, 204, 204, 205, 205, 205, 206, 206, 206, 207, 207, 207, 208, 208, 208, 209, 209, 209, 210, 210, 210, 211, 211, 211, 212, 212, 212, 213, 213, 213, 214, 214, 214, 215, 215, 215, 216, 216, 216, 217, 217, 217, 218, 218, 218, 219, 219, 219, 220, 220, 220, 221, 221, 221, 222, 222, 223, 223, 223, 224, 224, 224, 225, 225, 225, 226, 226, 226, 227, 227, 227, 228, 228, 228, 229, 229, 229, 230, 230, 230, 231, 231, 231, 232, 232, 232, 233, 233, 233, 234, 234, 234, 235, 235, 235, 236, 236, 236, 237, 237, 237, 238, 238, 238, 239, 239, 239, 240, 240, 241, 241, 241, 242, 242, 242, 243, 243, 243, 244, 244, 244, 245, 245, 245, 246, 246, 246, 247, 247, 247, 248, 248, 248, 249, 249, 249, 250, 250, 250, 251, 251, 251, 252, 252, 252, 253, 253, 254, 254, 254, 255, 255, 255, 256, 256, 256, 257, 257, 257, 258, 258, 258, 259, 259, 259, 260, 260, 260, 261, 261, 261, 262, 262, 262, 263, 263, 264, 264, 264, 265, 265, 265, 266, 266, 266, 267, 267, 267, 268, 268, 268, 269, 269, 269, 270, 270, 270, 271, 271, 272, 272, 272, 273, 273, 273, 274, 274, 274, 275, 275, 275, 276, 276, 276, 277, 277, 277, 278, 278, 279, 279, 279, 280, 280, 280, 281, 281, 281, 282, 282, 282, 283, 283, 283, 284, 284, 284, 285, 285, 286, 286, 286, 287, 287, 287, 288, 288, 288, 289, 289, 289, 290, 290, 290, 291, 291, 292, 292, 292, 293, 293, 293, 294, 294, 294, 295, 295, 295, 296, 296, 296, 297, 297, 298, 298, 298, 299, 299, 299, 300, 300, 300, 301, 301, 301, 302, 302, 303, 303, 303, 304, 304, 304, 305, 305, 305, 306, 306, 306, 307, 307, 307, 308, 308, 309, 309, 309, 310, 310, 310, 311, 311, 311, 312, 312, 313, 313, 313, 314, 314, 314, 315, 315, 315, 316, 316, 316, 317, 317, 318, 318, 318, 319, 319, 319, 320, 320, 320, 321, 321, 322, 322, 322, 323, 323, 323, 324, 324, 324, 325, 325, 325, 326, 326, 327, 327, 327, 328, 328, 328, 329, 329, 329, 330, 330, 331, 331, 331, 332, 332, 332, 333, 333, 334, 334, 334, 335, 335, 335, 336, 336, 336, 337, 337, 338, 338, 338, 339, 339, 339, 340, 340, 340, 341, 341, 342, 342, 342, 343, 343, 343, 344, 344, 345, 345, 345, 346, 346, 346, 347, 347, 347, 348, 348, 349, 349, 349, 350, 350, 350, 351, 351, 352, 352, 352, 353, 353, 353, 354, 354, 355, 355, 355, 356, 356, 356, 357, 357, 357, 358, 358, 359, 359, 359, 360, 360, 360, 361, 361, 362, 362, 362, 363, 363, 363, 364, 364, 365, 365, 365, 366, 366, 366, 367, 367, 368, 368, 368, 369, 369, 370, 370, 370, 371, 371, 371, 372, 372, 373, 373, 373, 374, 374, 374, 375, 375, 376, 376, 376, 377, 377, 377, 378, 378, 379, 379, 379, 380, 380, 381, 381, 381, 382, 382, 382, 383, 383, 384, 384, 384, 385, 385, 385, 386, 386, 387, 387, 387, 388, 388, 389, 389, 389, 390, 390, 390, 391, 391, 392, 392, 392, 393, 393, 394, 394, 394, 395, 395, 396, 396, 396, 397, 397, 397, 398, 398, 399, 399, 399, 400, 400, 401, 401, 401, 402, 402, 403, 403, 403, 404, 404, 404, 405, 405, 406, 406, 406, 407, 407, 408, 408, 408, 409, 409, 410, 410, 410, 411, 411, 412, 412, 412, 413, 413, 414, 414, 414, 415, 415, 416, 416, 416, 417, 417, 417, 418, 418, 419, 419, 419, 420, 420, 421, 421, 421, 422, 422, 423, 423, 423, 424, 424, 425, 425, 425, 426, 426, 427, 427, 427, 428, 428, 429, 429, 429, 430, 430, 431, 431, 432, 432, 432, 433, 433, 434, 434, 434, 435, 435, 436, 436, 436, 437, 437, 438, 438, 438, 439, 439, 440, 440, 440, 441, 441, 442, 442, 442, 443, 443, 444, 444, 445, 445, 445, 446, 446, 447, 447, 447, 448, 448, 449, 449, 449, 450, 450, 451, 451, 452, 452, 452, 453, 453, 454, 454, 454, 455, 455, 456, 456, 457, 457, 457, 458, 458, 459, 459, 459, 460, 460, 461, 461, 462, 462, 462, 463, 463, 464, 464, 464, 465, 465, 466, 466, 467, 467, 467, 468, 468, 469, 469, 470, 470, 470, 471, 471, 472, 472, 473, 473, 473, 474, 474, 475, 475, 475, 476, 476, 477, 477, 478, 478, 478, 479, 479, 480, 480, 481, 481, 481, 482, 482, 483, 483, 484, 484, 485, 485, 485, 486, 486, 487, 487, 488, 488, 488, 489, 489, 490, 490, 491, 491, 491, 492, 492, 493, 493, 494, 494, 495, 495, 495, 496, 496, 497, 497, 498, 498, 499, 499, 499, 500, 500, 501, 501, 502, 502, 502, 503, 503, 504, 504, 505, 505, 506, 506, 506, 507, 507, 508, 508, 509, 509, 510, 510, 511, 511, 511, 512, 512, 513, 513, 514, 514, 515, 515, 515, 516, 516, 517, 517, 518, 518, 519, 519, 520, 520, 520, 521, 521, 522, 522, 523, 523, 524, 524, 525, 525, 526, 526, 526, 527, 527, 528, 528, 529, 529, 530, 530, 531, 531, 532, 532, 532, 533, 533, 534, 534, 535, 535, 536, 536, 537, 537, 538, 538, 539, 539, 540, 540, 540, 541, 541, 542, 542, 543, 543, 544, 544, 545, 545, 546, 546, 547, 547, 548, 548, 549, 549, 549, 550, 550, 551, 551, 552, 552, 553, 553, 554, 554, 555, 555, 556, 556, 557, 557, 558, 558, 559, 559, 560, 560, 561, 561, 562, 562, 563, 563, 564, 564, 565, 565, 565, 566, 566, 567, 567, 568, 568, 569, 569, 570, 570, 571, 571, 572, 572, 573, 573, 574, 574, 575, 575, 576, 576, 577, 577, 578, 578, 579, 579, 580, 580, 581, 581, 582, 583, 583, 584, 584, 585, 585, 586, 586, 587, 587, 588, 588, 589, 589, 590, 590, 591, 591, 592, 592, 593, 593, 594, 594, 595, 595, 596, 596, 597, 597, 598, 599, 599, 600, 600, 601, 601, 602, 602, 603, 603, 604, 604, 605, 605, 606, 606, 607, 608, 608, 609, 609, 610, 610, 611, 611, 612, 612, 613, 613, 614, 615, 615, 616, 616, 617, 617, 618, 618, 619, 619, 620, 621, 621, 622, 622, 623, 623, 624, 624, 625, 625, 626, 627, 627, 628, 628, 629, 629, 630, 631, 631, 632, 632, 633, 633, 634, 634, 635, 636, 636, 637, 637, 638, 638, 639, 640, 640, 641, 641, 642, 642, 643, 644, 644, 645, 645, 646, 647, 647, 648, 648, 649, 649, 650, 651, 651, 652, 652, 653, 654, 654, 655, 655, 656, 657, 657, 658, 658, 659, 660, 660, 661, 661, 662, 663, 663, 664, 664, 665, 666, 666, 667, 667, 668, 669, 669, 670, 670, 671, 672, 672, 673, 674, 674, 675, 675, 676, 677, 677, 678, 679, 679, 680, 681, 681, 682, 682, 683, 684, 684, 685, 686, 686, 687, 688, 688, 689, 689, 690, 691, 691, 692, 693, 693, 694, 695, 695, 696, 697, 697, 698, 699, 699, 700, 701, 701, 702, 703, 703, 704, 705, 705, 706, 707, 707, 708, 709, 710, 710, 711, 712, 712, 713, 714, 714, 715, 716, 716, 717, 718, 719, 719, 720, 721, 721, 722, 723, 724, 724, 725, 726, 726, 727, 728, 729, 729, 730, 731, 732, 732, 733, 734, 734, 735, 736, 737, 737, 738, 739, 740, 740, 741, 742, 743, 744, 744, 745, 746, 747, 747, 748, 749, 750, 750, 751, 752, 753, 754, 754, 755, 756, 757, 758, 758, 759, 760, 761, 762, 762, 763, 764, 765, 766, 767, 767, 768, 769, 770, 771, 772, 772, 773, 774, 775, 776, 777, 778, 778, 779, 780, 781, 782, 783, 784, 785, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 840, 841, 842, 843, 844, 845, 847, 848, 849, 850, 851, 853, 854, 855, 856, 858, 859, 860, 861, 863, 864, 865, 867, 868, 869, 871, 872, 873, 875, 876, 878, 879, 881, 882, 884, 885, 887, 888, 890, 891, 893, 894, 896, 898, 899, 901, 903, 905, 906, 908, 910, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 935, 937, 939, 942, 945, 947, 950, 953, 956, 959, 962, 966, 970, 974, 978, 983, 988, 995, 1003, 1024 }; #endif // NOT USED #if 0 // NOT USED // arccos LUT int ArcCosTable[4097] = { 2048, 2027, 2019, 2012, 2007, 2002, 1998, 1994, 1990, 1986, 1983, 1980, 1977, 1974, 1971, 1969, 1966, 1963, 1961, 1959, 1956, 1954, 1952, 1950, 1948, 1946, 1944, 1942, 1940, 1938, 1936, 1934, 1932, 1930, 1929, 1927, 1925, 1923, 1922, 1920, 1918, 1917, 1915, 1914, 1912, 1911, 1909, 1908, 1906, 1905, 1903, 1902, 1900, 1899, 1897, 1896, 1895, 1893, 1892, 1891, 1889, 1888, 1887, 1885, 1884, 1883, 1882, 1880, 1879, 1878, 1877, 1875, 1874, 1873, 1872, 1871, 1869, 1868, 1867, 1866, 1865, 1864, 1862, 1861, 1860, 1859, 1858, 1857, 1856, 1855, 1854, 1852, 1851, 1850, 1849, 1848, 1847, 1846, 1845, 1844, 1843, 1842, 1841, 1840, 1839, 1838, 1837, 1836, 1835, 1834, 1833, 1832, 1831, 1830, 1829, 1828, 1827, 1826, 1825, 1824, 1823, 1822, 1821, 1820, 1819, 1819, 1818, 1817, 1816, 1815, 1814, 1813, 1812, 1811, 1810, 1809, 1809, 1808, 1807, 1806, 1805, 1804, 1803, 1802, 1802, 1801, 1800, 1799, 1798, 1797, 1796, 1796, 1795, 1794, 1793, 1792, 1791, 1791, 1790, 1789, 1788, 1787, 1786, 1786, 1785, 1784, 1783, 1782, 1782, 1781, 1780, 1779, 1778, 1778, 1777, 1776, 1775, 1774, 1774, 1773, 1772, 1771, 1771, 1770, 1769, 1768, 1768, 1767, 1766, 1765, 1764, 1764, 1763, 1762, 1761, 1761, 1760, 1759, 1758, 1758, 1757, 1756, 1756, 1755, 1754, 1753, 1753, 1752, 1751, 1750, 1750, 1749, 1748, 1748, 1747, 1746, 1745, 1745, 1744, 1743, 1743, 1742, 1741, 1740, 1740, 1739, 1738, 1738, 1737, 1736, 1736, 1735, 1734, 1734, 1733, 1732, 1731, 1731, 1730, 1729, 1729, 1728, 1727, 1727, 1726, 1725, 1725, 1724, 1723, 1723, 1722, 1721, 1721, 1720, 1719, 1719, 1718, 1717, 1717, 1716, 1715, 1715, 1714, 1713, 1713, 1712, 1712, 1711, 1710, 1710, 1709, 1708, 1708, 1707, 1706, 1706, 1705, 1705, 1704, 1703, 1703, 1702, 1701, 1701, 1700, 1699, 1699, 1698, 1698, 1697, 1696, 1696, 1695, 1694, 1694, 1693, 1693, 1692, 1691, 1691, 1690, 1690, 1689, 1688, 1688, 1687, 1687, 1686, 1685, 1685, 1684, 1684, 1683, 1682, 1682, 1681, 1681, 1680, 1679, 1679, 1678, 1678, 1677, 1676, 1676, 1675, 1675, 1674, 1673, 1673, 1672, 1672, 1671, 1671, 1670, 1669, 1669, 1668, 1668, 1667, 1666, 1666, 1665, 1665, 1664, 1664, 1663, 1662, 1662, 1661, 1661, 1660, 1660, 1659, 1658, 1658, 1657, 1657, 1656, 1656, 1655, 1655, 1654, 1653, 1653, 1652, 1652, 1651, 1651, 1650, 1649, 1649, 1648, 1648, 1647, 1647, 1646, 1646, 1645, 1645, 1644, 1643, 1643, 1642, 1642, 1641, 1641, 1640, 1640, 1639, 1639, 1638, 1637, 1637, 1636, 1636, 1635, 1635, 1634, 1634, 1633, 1633, 1632, 1632, 1631, 1630, 1630, 1629, 1629, 1628, 1628, 1627, 1627, 1626, 1626, 1625, 1625, 1624, 1624, 1623, 1623, 1622, 1621, 1621, 1620, 1620, 1619, 1619, 1618, 1618, 1617, 1617, 1616, 1616, 1615, 1615, 1614, 1614, 1613, 1613, 1612, 1612, 1611, 1611, 1610, 1610, 1609, 1609, 1608, 1608, 1607, 1607, 1606, 1605, 1605, 1604, 1604, 1603, 1603, 1602, 1602, 1601, 1601, 1600, 1600, 1599, 1599, 1598, 1598, 1597, 1597, 1596, 1596, 1595, 1595, 1594, 1594, 1593, 1593, 1592, 1592, 1591, 1591, 1590, 1590, 1589, 1589, 1589, 1588, 1588, 1587, 1587, 1586, 1586, 1585, 1585, 1584, 1584, 1583, 1583, 1582, 1582, 1581, 1581, 1580, 1580, 1579, 1579, 1578, 1578, 1577, 1577, 1576, 1576, 1575, 1575, 1574, 1574, 1573, 1573, 1573, 1572, 1572, 1571, 1571, 1570, 1570, 1569, 1569, 1568, 1568, 1567, 1567, 1566, 1566, 1565, 1565, 1564, 1564, 1564, 1563, 1563, 1562, 1562, 1561, 1561, 1560, 1560, 1559, 1559, 1558, 1558, 1557, 1557, 1556, 1556, 1556, 1555, 1555, 1554, 1554, 1553, 1553, 1552, 1552, 1551, 1551, 1550, 1550, 1550, 1549, 1549, 1548, 1548, 1547, 1547, 1546, 1546, 1545, 1545, 1544, 1544, 1544, 1543, 1543, 1542, 1542, 1541, 1541, 1540, 1540, 1539, 1539, 1539, 1538, 1538, 1537, 1537, 1536, 1536, 1535, 1535, 1535, 1534, 1534, 1533, 1533, 1532, 1532, 1531, 1531, 1530, 1530, 1530, 1529, 1529, 1528, 1528, 1527, 1527, 1526, 1526, 1526, 1525, 1525, 1524, 1524, 1523, 1523, 1523, 1522, 1522, 1521, 1521, 1520, 1520, 1519, 1519, 1519, 1518, 1518, 1517, 1517, 1516, 1516, 1515, 1515, 1515, 1514, 1514, 1513, 1513, 1512, 1512, 1512, 1511, 1511, 1510, 1510, 1509, 1509, 1509, 1508, 1508, 1507, 1507, 1506, 1506, 1506, 1505, 1505, 1504, 1504, 1503, 1503, 1502, 1502, 1502, 1501, 1501, 1500, 1500, 1499, 1499, 1499, 1498, 1498, 1497, 1497, 1497, 1496, 1496, 1495, 1495, 1494, 1494, 1494, 1493, 1493, 1492, 1492, 1491, 1491, 1491, 1490, 1490, 1489, 1489, 1488, 1488, 1488, 1487, 1487, 1486, 1486, 1486, 1485, 1485, 1484, 1484, 1483, 1483, 1483, 1482, 1482, 1481, 1481, 1481, 1480, 1480, 1479, 1479, 1478, 1478, 1478, 1477, 1477, 1476, 1476, 1476, 1475, 1475, 1474, 1474, 1473, 1473, 1473, 1472, 1472, 1471, 1471, 1471, 1470, 1470, 1469, 1469, 1469, 1468, 1468, 1467, 1467, 1466, 1466, 1466, 1465, 1465, 1464, 1464, 1464, 1463, 1463, 1462, 1462, 1462, 1461, 1461, 1460, 1460, 1460, 1459, 1459, 1458, 1458, 1458, 1457, 1457, 1456, 1456, 1456, 1455, 1455, 1454, 1454, 1453, 1453, 1453, 1452, 1452, 1451, 1451, 1451, 1450, 1450, 1449, 1449, 1449, 1448, 1448, 1447, 1447, 1447, 1446, 1446, 1445, 1445, 1445, 1444, 1444, 1443, 1443, 1443, 1442, 1442, 1441, 1441, 1441, 1440, 1440, 1440, 1439, 1439, 1438, 1438, 1438, 1437, 1437, 1436, 1436, 1436, 1435, 1435, 1434, 1434, 1434, 1433, 1433, 1432, 1432, 1432, 1431, 1431, 1430, 1430, 1430, 1429, 1429, 1428, 1428, 1428, 1427, 1427, 1427, 1426, 1426, 1425, 1425, 1425, 1424, 1424, 1423, 1423, 1423, 1422, 1422, 1421, 1421, 1421, 1420, 1420, 1420, 1419, 1419, 1418, 1418, 1418, 1417, 1417, 1416, 1416, 1416, 1415, 1415, 1414, 1414, 1414, 1413, 1413, 1413, 1412, 1412, 1411, 1411, 1411, 1410, 1410, 1409, 1409, 1409, 1408, 1408, 1408, 1407, 1407, 1406, 1406, 1406, 1405, 1405, 1405, 1404, 1404, 1403, 1403, 1403, 1402, 1402, 1401, 1401, 1401, 1400, 1400, 1400, 1399, 1399, 1398, 1398, 1398, 1397, 1397, 1397, 1396, 1396, 1395, 1395, 1395, 1394, 1394, 1394, 1393, 1393, 1392, 1392, 1392, 1391, 1391, 1390, 1390, 1390, 1389, 1389, 1389, 1388, 1388, 1387, 1387, 1387, 1386, 1386, 1386, 1385, 1385, 1384, 1384, 1384, 1383, 1383, 1383, 1382, 1382, 1381, 1381, 1381, 1380, 1380, 1380, 1379, 1379, 1379, 1378, 1378, 1377, 1377, 1377, 1376, 1376, 1376, 1375, 1375, 1374, 1374, 1374, 1373, 1373, 1373, 1372, 1372, 1371, 1371, 1371, 1370, 1370, 1370, 1369, 1369, 1369, 1368, 1368, 1367, 1367, 1367, 1366, 1366, 1366, 1365, 1365, 1364, 1364, 1364, 1363, 1363, 1363, 1362, 1362, 1362, 1361, 1361, 1360, 1360, 1360, 1359, 1359, 1359, 1358, 1358, 1358, 1357, 1357, 1356, 1356, 1356, 1355, 1355, 1355, 1354, 1354, 1353, 1353, 1353, 1352, 1352, 1352, 1351, 1351, 1351, 1350, 1350, 1349, 1349, 1349, 1348, 1348, 1348, 1347, 1347, 1347, 1346, 1346, 1346, 1345, 1345, 1344, 1344, 1344, 1343, 1343, 1343, 1342, 1342, 1342, 1341, 1341, 1340, 1340, 1340, 1339, 1339, 1339, 1338, 1338, 1338, 1337, 1337, 1337, 1336, 1336, 1335, 1335, 1335, 1334, 1334, 1334, 1333, 1333, 1333, 1332, 1332, 1331, 1331, 1331, 1330, 1330, 1330, 1329, 1329, 1329, 1328, 1328, 1328, 1327, 1327, 1327, 1326, 1326, 1325, 1325, 1325, 1324, 1324, 1324, 1323, 1323, 1323, 1322, 1322, 1322, 1321, 1321, 1320, 1320, 1320, 1319, 1319, 1319, 1318, 1318, 1318, 1317, 1317, 1317, 1316, 1316, 1316, 1315, 1315, 1314, 1314, 1314, 1313, 1313, 1313, 1312, 1312, 1312, 1311, 1311, 1311, 1310, 1310, 1310, 1309, 1309, 1308, 1308, 1308, 1307, 1307, 1307, 1306, 1306, 1306, 1305, 1305, 1305, 1304, 1304, 1304, 1303, 1303, 1303, 1302, 1302, 1301, 1301, 1301, 1300, 1300, 1300, 1299, 1299, 1299, 1298, 1298, 1298, 1297, 1297, 1297, 1296, 1296, 1296, 1295, 1295, 1294, 1294, 1294, 1293, 1293, 1293, 1292, 1292, 1292, 1291, 1291, 1291, 1290, 1290, 1290, 1289, 1289, 1289, 1288, 1288, 1288, 1287, 1287, 1286, 1286, 1286, 1285, 1285, 1285, 1284, 1284, 1284, 1283, 1283, 1283, 1282, 1282, 1282, 1281, 1281, 1281, 1280, 1280, 1280, 1279, 1279, 1279, 1278, 1278, 1278, 1277, 1277, 1276, 1276, 1276, 1275, 1275, 1275, 1274, 1274, 1274, 1273, 1273, 1273, 1272, 1272, 1272, 1271, 1271, 1271, 1270, 1270, 1270, 1269, 1269, 1269, 1268, 1268, 1268, 1267, 1267, 1267, 1266, 1266, 1266, 1265, 1265, 1265, 1264, 1264, 1263, 1263, 1263, 1262, 1262, 1262, 1261, 1261, 1261, 1260, 1260, 1260, 1259, 1259, 1259, 1258, 1258, 1258, 1257, 1257, 1257, 1256, 1256, 1256, 1255, 1255, 1255, 1254, 1254, 1254, 1253, 1253, 1253, 1252, 1252, 1252, 1251, 1251, 1251, 1250, 1250, 1250, 1249, 1249, 1249, 1248, 1248, 1248, 1247, 1247, 1247, 1246, 1246, 1245, 1245, 1245, 1244, 1244, 1244, 1243, 1243, 1243, 1242, 1242, 1242, 1241, 1241, 1241, 1240, 1240, 1240, 1239, 1239, 1239, 1238, 1238, 1238, 1237, 1237, 1237, 1236, 1236, 1236, 1235, 1235, 1235, 1234, 1234, 1234, 1233, 1233, 1233, 1232, 1232, 1232, 1231, 1231, 1231, 1230, 1230, 1230, 1229, 1229, 1229, 1228, 1228, 1228, 1227, 1227, 1227, 1226, 1226, 1226, 1225, 1225, 1225, 1224, 1224, 1224, 1223, 1223, 1223, 1222, 1222, 1222, 1221, 1221, 1221, 1220, 1220, 1220, 1219, 1219, 1219, 1218, 1218, 1218, 1217, 1217, 1217, 1216, 1216, 1216, 1215, 1215, 1215, 1214, 1214, 1214, 1213, 1213, 1213, 1212, 1212, 1212, 1211, 1211, 1211, 1210, 1210, 1210, 1209, 1209, 1209, 1208, 1208, 1208, 1207, 1207, 1207, 1206, 1206, 1206, 1205, 1205, 1205, 1204, 1204, 1204, 1203, 1203, 1203, 1202, 1202, 1202, 1201, 1201, 1201, 1200, 1200, 1200, 1199, 1199, 1199, 1198, 1198, 1198, 1197, 1197, 1197, 1196, 1196, 1196, 1195, 1195, 1195, 1194, 1194, 1194, 1193, 1193, 1193, 1193, 1192, 1192, 1192, 1191, 1191, 1191, 1190, 1190, 1190, 1189, 1189, 1189, 1188, 1188, 1188, 1187, 1187, 1187, 1186, 1186, 1186, 1185, 1185, 1185, 1184, 1184, 1184, 1183, 1183, 1183, 1182, 1182, 1182, 1181, 1181, 1181, 1180, 1180, 1180, 1179, 1179, 1179, 1178, 1178, 1178, 1177, 1177, 1177, 1176, 1176, 1176, 1175, 1175, 1175, 1174, 1174, 1174, 1173, 1173, 1173, 1172, 1172, 1172, 1172, 1171, 1171, 1171, 1170, 1170, 1170, 1169, 1169, 1169, 1168, 1168, 1168, 1167, 1167, 1167, 1166, 1166, 1166, 1165, 1165, 1165, 1164, 1164, 1164, 1163, 1163, 1163, 1162, 1162, 1162, 1161, 1161, 1161, 1160, 1160, 1160, 1159, 1159, 1159, 1158, 1158, 1158, 1157, 1157, 1157, 1157, 1156, 1156, 1156, 1155, 1155, 1155, 1154, 1154, 1154, 1153, 1153, 1153, 1152, 1152, 1152, 1151, 1151, 1151, 1150, 1150, 1150, 1149, 1149, 1149, 1148, 1148, 1148, 1147, 1147, 1147, 1146, 1146, 1146, 1145, 1145, 1145, 1145, 1144, 1144, 1144, 1143, 1143, 1143, 1142, 1142, 1142, 1141, 1141, 1141, 1140, 1140, 1140, 1139, 1139, 1139, 1138, 1138, 1138, 1137, 1137, 1137, 1136, 1136, 1136, 1135, 1135, 1135, 1134, 1134, 1134, 1134, 1133, 1133, 1133, 1132, 1132, 1132, 1131, 1131, 1131, 1130, 1130, 1130, 1129, 1129, 1129, 1128, 1128, 1128, 1127, 1127, 1127, 1126, 1126, 1126, 1125, 1125, 1125, 1124, 1124, 1124, 1124, 1123, 1123, 1123, 1122, 1122, 1122, 1121, 1121, 1121, 1120, 1120, 1120, 1119, 1119, 1119, 1118, 1118, 1118, 1117, 1117, 1117, 1116, 1116, 1116, 1115, 1115, 1115, 1115, 1114, 1114, 1114, 1113, 1113, 1113, 1112, 1112, 1112, 1111, 1111, 1111, 1110, 1110, 1110, 1109, 1109, 1109, 1108, 1108, 1108, 1107, 1107, 1107, 1106, 1106, 1106, 1106, 1105, 1105, 1105, 1104, 1104, 1104, 1103, 1103, 1103, 1102, 1102, 1102, 1101, 1101, 1101, 1100, 1100, 1100, 1099, 1099, 1099, 1098, 1098, 1098, 1098, 1097, 1097, 1097, 1096, 1096, 1096, 1095, 1095, 1095, 1094, 1094, 1094, 1093, 1093, 1093, 1092, 1092, 1092, 1091, 1091, 1091, 1090, 1090, 1090, 1090, 1089, 1089, 1089, 1088, 1088, 1088, 1087, 1087, 1087, 1086, 1086, 1086, 1085, 1085, 1085, 1084, 1084, 1084, 1083, 1083, 1083, 1082, 1082, 1082, 1082, 1081, 1081, 1081, 1080, 1080, 1080, 1079, 1079, 1079, 1078, 1078, 1078, 1077, 1077, 1077, 1076, 1076, 1076, 1075, 1075, 1075, 1074, 1074, 1074, 1074, 1073, 1073, 1073, 1072, 1072, 1072, 1071, 1071, 1071, 1070, 1070, 1070, 1069, 1069, 1069, 1068, 1068, 1068, 1067, 1067, 1067, 1067, 1066, 1066, 1066, 1065, 1065, 1065, 1064, 1064, 1064, 1063, 1063, 1063, 1062, 1062, 1062, 1061, 1061, 1061, 1060, 1060, 1060, 1059, 1059, 1059, 1059, 1058, 1058, 1058, 1057, 1057, 1057, 1056, 1056, 1056, 1055, 1055, 1055, 1054, 1054, 1054, 1053, 1053, 1053, 1052, 1052, 1052, 1052, 1051, 1051, 1051, 1050, 1050, 1050, 1049, 1049, 1049, 1048, 1048, 1048, 1047, 1047, 1047, 1046, 1046, 1046, 1045, 1045, 1045, 1045, 1044, 1044, 1044, 1043, 1043, 1043, 1042, 1042, 1042, 1041, 1041, 1041, 1040, 1040, 1040, 1039, 1039, 1039, 1038, 1038, 1038, 1038, 1037, 1037, 1037, 1036, 1036, 1036, 1035, 1035, 1035, 1034, 1034, 1034, 1033, 1033, 1033, 1032, 1032, 1032, 1031, 1031, 1031, 1031, 1030, 1030, 1030, 1029, 1029, 1029, 1028, 1028, 1028, 1027, 1027, 1027, 1026, 1026, 1026, 1025, 1025, 1025, 1024, 1024, 1024, 1024, 1023, 1023, 1023, 1022, 1022, 1022, 1021, 1021, 1021, 1020, 1020, 1020, 1019, 1019, 1019, 1018, 1018, 1018, 1017, 1017, 1017, 1016, 1016, 1016, 1016, 1015, 1015, 1015, 1014, 1014, 1014, 1013, 1013, 1013, 1012, 1012, 1012, 1011, 1011, 1011, 1010, 1010, 1010, 1009, 1009, 1009, 1009, 1008, 1008, 1008, 1007, 1007, 1007, 1006, 1006, 1006, 1005, 1005, 1005, 1004, 1004, 1004, 1003, 1003, 1003, 1002, 1002, 1002, 1002, 1001, 1001, 1001, 1000, 1000, 1000, 999, 999, 999, 998, 998, 998, 997, 997, 997, 996, 996, 996, 995, 995, 995, 995, 994, 994, 994, 993, 993, 993, 992, 992, 992, 991, 991, 991, 990, 990, 990, 989, 989, 989, 988, 988, 988, 988, 987, 987, 987, 986, 986, 986, 985, 985, 985, 984, 984, 984, 983, 983, 983, 982, 982, 982, 981, 981, 981, 980, 980, 980, 980, 979, 979, 979, 978, 978, 978, 977, 977, 977, 976, 976, 976, 975, 975, 975, 974, 974, 974, 973, 973, 973, 973, 972, 972, 972, 971, 971, 971, 970, 970, 970, 969, 969, 969, 968, 968, 968, 967, 967, 967, 966, 966, 966, 965, 965, 965, 965, 964, 964, 964, 963, 963, 963, 962, 962, 962, 961, 961, 961, 960, 960, 960, 959, 959, 959, 958, 958, 958, 957, 957, 957, 957, 956, 956, 956, 955, 955, 955, 954, 954, 954, 953, 953, 953, 952, 952, 952, 951, 951, 951, 950, 950, 950, 949, 949, 949, 949, 948, 948, 948, 947, 947, 947, 946, 946, 946, 945, 945, 945, 944, 944, 944, 943, 943, 943, 942, 942, 942, 941, 941, 941, 941, 940, 940, 940, 939, 939, 939, 938, 938, 938, 937, 937, 937, 936, 936, 936, 935, 935, 935, 934, 934, 934, 933, 933, 933, 932, 932, 932, 932, 931, 931, 931, 930, 930, 930, 929, 929, 929, 928, 928, 928, 927, 927, 927, 926, 926, 926, 925, 925, 925, 924, 924, 924, 923, 923, 923, 923, 922, 922, 922, 921, 921, 921, 920, 920, 920, 919, 919, 919, 918, 918, 918, 917, 917, 917, 916, 916, 916, 915, 915, 915, 914, 914, 914, 913, 913, 913, 913, 912, 912, 912, 911, 911, 911, 910, 910, 910, 909, 909, 909, 908, 908, 908, 907, 907, 907, 906, 906, 906, 905, 905, 905, 904, 904, 904, 903, 903, 903, 902, 902, 902, 902, 901, 901, 901, 900, 900, 900, 899, 899, 899, 898, 898, 898, 897, 897, 897, 896, 896, 896, 895, 895, 895, 894, 894, 894, 893, 893, 893, 892, 892, 892, 891, 891, 891, 890, 890, 890, 890, 889, 889, 889, 888, 888, 888, 887, 887, 887, 886, 886, 886, 885, 885, 885, 884, 884, 884, 883, 883, 883, 882, 882, 882, 881, 881, 881, 880, 880, 880, 879, 879, 879, 878, 878, 878, 877, 877, 877, 876, 876, 876, 875, 875, 875, 875, 874, 874, 874, 873, 873, 873, 872, 872, 872, 871, 871, 871, 870, 870, 870, 869, 869, 869, 868, 868, 868, 867, 867, 867, 866, 866, 866, 865, 865, 865, 864, 864, 864, 863, 863, 863, 862, 862, 862, 861, 861, 861, 860, 860, 860, 859, 859, 859, 858, 858, 858, 857, 857, 857, 856, 856, 856, 855, 855, 855, 855, 854, 854, 854, 853, 853, 853, 852, 852, 852, 851, 851, 851, 850, 850, 850, 849, 849, 849, 848, 848, 848, 847, 847, 847, 846, 846, 846, 845, 845, 845, 844, 844, 844, 843, 843, 843, 842, 842, 842, 841, 841, 841, 840, 840, 840, 839, 839, 839, 838, 838, 838, 837, 837, 837, 836, 836, 836, 835, 835, 835, 834, 834, 834, 833, 833, 833, 832, 832, 832, 831, 831, 831, 830, 830, 830, 829, 829, 829, 828, 828, 828, 827, 827, 827, 826, 826, 826, 825, 825, 825, 824, 824, 824, 823, 823, 823, 822, 822, 822, 821, 821, 821, 820, 820, 820, 819, 819, 819, 818, 818, 818, 817, 817, 817, 816, 816, 816, 815, 815, 815, 814, 814, 814, 813, 813, 813, 812, 812, 812, 811, 811, 811, 810, 810, 810, 809, 809, 809, 808, 808, 808, 807, 807, 807, 806, 806, 806, 805, 805, 805, 804, 804, 804, 803, 803, 803, 802, 802, 802, 801, 801, 800, 800, 800, 799, 799, 799, 798, 798, 798, 797, 797, 797, 796, 796, 796, 795, 795, 795, 794, 794, 794, 793, 793, 793, 792, 792, 792, 791, 791, 791, 790, 790, 790, 789, 789, 789, 788, 788, 788, 787, 787, 787, 786, 786, 786, 785, 785, 785, 784, 784, 784, 783, 783, 782, 782, 782, 781, 781, 781, 780, 780, 780, 779, 779, 779, 778, 778, 778, 777, 777, 777, 776, 776, 776, 775, 775, 775, 774, 774, 774, 773, 773, 773, 772, 772, 772, 771, 771, 771, 770, 770, 769, 769, 769, 768, 768, 768, 767, 767, 767, 766, 766, 766, 765, 765, 765, 764, 764, 764, 763, 763, 763, 762, 762, 762, 761, 761, 761, 760, 760, 759, 759, 759, 758, 758, 758, 757, 757, 757, 756, 756, 756, 755, 755, 755, 754, 754, 754, 753, 753, 753, 752, 752, 751, 751, 751, 750, 750, 750, 749, 749, 749, 748, 748, 748, 747, 747, 747, 746, 746, 746, 745, 745, 744, 744, 744, 743, 743, 743, 742, 742, 742, 741, 741, 741, 740, 740, 740, 739, 739, 739, 738, 738, 737, 737, 737, 736, 736, 736, 735, 735, 735, 734, 734, 734, 733, 733, 733, 732, 732, 731, 731, 731, 730, 730, 730, 729, 729, 729, 728, 728, 728, 727, 727, 727, 726, 726, 725, 725, 725, 724, 724, 724, 723, 723, 723, 722, 722, 722, 721, 721, 720, 720, 720, 719, 719, 719, 718, 718, 718, 717, 717, 717, 716, 716, 716, 715, 715, 714, 714, 714, 713, 713, 713, 712, 712, 712, 711, 711, 710, 710, 710, 709, 709, 709, 708, 708, 708, 707, 707, 707, 706, 706, 705, 705, 705, 704, 704, 704, 703, 703, 703, 702, 702, 701, 701, 701, 700, 700, 700, 699, 699, 699, 698, 698, 698, 697, 697, 696, 696, 696, 695, 695, 695, 694, 694, 694, 693, 693, 692, 692, 692, 691, 691, 691, 690, 690, 689, 689, 689, 688, 688, 688, 687, 687, 687, 686, 686, 685, 685, 685, 684, 684, 684, 683, 683, 683, 682, 682, 681, 681, 681, 680, 680, 680, 679, 679, 678, 678, 678, 677, 677, 677, 676, 676, 676, 675, 675, 674, 674, 674, 673, 673, 673, 672, 672, 671, 671, 671, 670, 670, 670, 669, 669, 668, 668, 668, 667, 667, 667, 666, 666, 666, 665, 665, 664, 664, 664, 663, 663, 663, 662, 662, 661, 661, 661, 660, 660, 660, 659, 659, 658, 658, 658, 657, 657, 657, 656, 656, 655, 655, 655, 654, 654, 653, 653, 653, 652, 652, 652, 651, 651, 650, 650, 650, 649, 649, 649, 648, 648, 647, 647, 647, 646, 646, 646, 645, 645, 644, 644, 644, 643, 643, 642, 642, 642, 641, 641, 641, 640, 640, 639, 639, 639, 638, 638, 638, 637, 637, 636, 636, 636, 635, 635, 634, 634, 634, 633, 633, 633, 632, 632, 631, 631, 631, 630, 630, 629, 629, 629, 628, 628, 627, 627, 627, 626, 626, 626, 625, 625, 624, 624, 624, 623, 623, 622, 622, 622, 621, 621, 620, 620, 620, 619, 619, 619, 618, 618, 617, 617, 617, 616, 616, 615, 615, 615, 614, 614, 613, 613, 613, 612, 612, 611, 611, 611, 610, 610, 609, 609, 609, 608, 608, 607, 607, 607, 606, 606, 606, 605, 605, 604, 604, 604, 603, 603, 602, 602, 602, 601, 601, 600, 600, 600, 599, 599, 598, 598, 598, 597, 597, 596, 596, 596, 595, 595, 594, 594, 594, 593, 593, 592, 592, 591, 591, 591, 590, 590, 589, 589, 589, 588, 588, 587, 587, 587, 586, 586, 585, 585, 585, 584, 584, 583, 583, 583, 582, 582, 581, 581, 581, 580, 580, 579, 579, 578, 578, 578, 577, 577, 576, 576, 576, 575, 575, 574, 574, 574, 573, 573, 572, 572, 571, 571, 571, 570, 570, 569, 569, 569, 568, 568, 567, 567, 566, 566, 566, 565, 565, 564, 564, 564, 563, 563, 562, 562, 561, 561, 561, 560, 560, 559, 559, 559, 558, 558, 557, 557, 556, 556, 556, 555, 555, 554, 554, 553, 553, 553, 552, 552, 551, 551, 550, 550, 550, 549, 549, 548, 548, 548, 547, 547, 546, 546, 545, 545, 545, 544, 544, 543, 543, 542, 542, 542, 541, 541, 540, 540, 539, 539, 538, 538, 538, 537, 537, 536, 536, 535, 535, 535, 534, 534, 533, 533, 532, 532, 532, 531, 531, 530, 530, 529, 529, 528, 528, 528, 527, 527, 526, 526, 525, 525, 524, 524, 524, 523, 523, 522, 522, 521, 521, 521, 520, 520, 519, 519, 518, 518, 517, 517, 517, 516, 516, 515, 515, 514, 514, 513, 513, 512, 512, 512, 511, 511, 510, 510, 509, 509, 508, 508, 508, 507, 507, 506, 506, 505, 505, 504, 504, 503, 503, 503, 502, 502, 501, 501, 500, 500, 499, 499, 498, 498, 497, 497, 497, 496, 496, 495, 495, 494, 494, 493, 493, 492, 492, 491, 491, 491, 490, 490, 489, 489, 488, 488, 487, 487, 486, 486, 485, 485, 484, 484, 484, 483, 483, 482, 482, 481, 481, 480, 480, 479, 479, 478, 478, 477, 477, 476, 476, 475, 475, 474, 474, 474, 473, 473, 472, 472, 471, 471, 470, 470, 469, 469, 468, 468, 467, 467, 466, 466, 465, 465, 464, 464, 463, 463, 462, 462, 461, 461, 460, 460, 459, 459, 458, 458, 458, 457, 457, 456, 456, 455, 455, 454, 454, 453, 453, 452, 452, 451, 451, 450, 450, 449, 449, 448, 448, 447, 447, 446, 446, 445, 445, 444, 444, 443, 443, 442, 442, 441, 440, 440, 439, 439, 438, 438, 437, 437, 436, 436, 435, 435, 434, 434, 433, 433, 432, 432, 431, 431, 430, 430, 429, 429, 428, 428, 427, 427, 426, 426, 425, 424, 424, 423, 423, 422, 422, 421, 421, 420, 420, 419, 419, 418, 418, 417, 417, 416, 415, 415, 414, 414, 413, 413, 412, 412, 411, 411, 410, 410, 409, 408, 408, 407, 407, 406, 406, 405, 405, 404, 404, 403, 402, 402, 401, 401, 400, 400, 399, 399, 398, 398, 397, 396, 396, 395, 395, 394, 394, 393, 392, 392, 391, 391, 390, 390, 389, 389, 388, 387, 387, 386, 386, 385, 385, 384, 383, 383, 382, 382, 381, 381, 380, 379, 379, 378, 378, 377, 376, 376, 375, 375, 374, 374, 373, 372, 372, 371, 371, 370, 369, 369, 368, 368, 367, 366, 366, 365, 365, 364, 363, 363, 362, 362, 361, 360, 360, 359, 359, 358, 357, 357, 356, 356, 355, 354, 354, 353, 353, 352, 351, 351, 350, 349, 349, 348, 348, 347, 346, 346, 345, 344, 344, 343, 342, 342, 341, 341, 340, 339, 339, 338, 337, 337, 336, 335, 335, 334, 334, 333, 332, 332, 331, 330, 330, 329, 328, 328, 327, 326, 326, 325, 324, 324, 323, 322, 322, 321, 320, 320, 319, 318, 318, 317, 316, 316, 315, 314, 313, 313, 312, 311, 311, 310, 309, 309, 308, 307, 307, 306, 305, 304, 304, 303, 302, 302, 301, 300, 299, 299, 298, 297, 297, 296, 295, 294, 294, 293, 292, 291, 291, 290, 289, 289, 288, 287, 286, 286, 285, 284, 283, 283, 282, 281, 280, 279, 279, 278, 277, 276, 276, 275, 274, 273, 273, 272, 271, 270, 269, 269, 268, 267, 266, 265, 265, 264, 263, 262, 261, 261, 260, 259, 258, 257, 256, 256, 255, 254, 253, 252, 251, 251, 250, 249, 248, 247, 246, 245, 245, 244, 243, 242, 241, 240, 239, 238, 238, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 218, 217, 216, 215, 214, 213, 212, 211, 210, 209, 208, 207, 206, 205, 204, 203, 202, 201, 200, 199, 198, 197, 196, 195, 193, 192, 191, 190, 189, 188, 187, 186, 185, 183, 182, 181, 180, 179, 178, 176, 175, 174, 173, 172, 170, 169, 168, 167, 165, 164, 163, 162, 160, 159, 158, 156, 155, 154, 152, 151, 150, 148, 147, 145, 144, 142, 141, 139, 138, 136, 135, 133, 132, 130, 129, 127, 125, 124, 122, 120, 118, 117, 115, 113, 111, 109, 107, 105, 103, 101, 99, 97, 95, 93, 91, 88, 86, 84, 81, 78, 76, 73, 70, 67, 64, 61, 57, 53, 49, 45, 40, 35, 28, 20, 0 }; #endif // NOT USED // arctan LUT int ArcTangentTable[256] = { 2, 5, 7, 10, 12, 15, 17, 20, 22, 25, 27, 30, 33, 35, 38, 40, 43, 45, 48, 50, 53, 55, 58, 60, 63, 65, 68, 71, 73, 76, 78, 81, 83, 86, 88, 91, 93, 96, 98, 101, 103, 106, 108, 110, 113, 115, 118, 120, 123, 125, 128, 130, 133, 135, 137, 140, 142, 145, 147, 150, 152, 154, 157, 159, 162, 164, 166, 169, 171, 174, 176, 178, 181, 183, 185, 188, 190, 192, 195, 197, 199, 202, 204, 206, 208, 211, 213, 215, 218, 220, 222, 224, 227, 229, 231, 233, 236, 238, 240, 242, 244, 247, 249, 251, 253, 255, 258, 260, 262, 264, 266, 268, 270, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 354, 356, 358, 360, 362, 364, 365, 367, 369, 371, 373, 375, 376, 378, 380, 382, 383, 385, 387, 389, 390, 392, 394, 396, 397, 399, 401, 402, 404, 406, 407, 409, 411, 412, 414, 416, 417, 419, 421, 422, 424, 425, 427, 429, 430, 432, 433, 435, 437, 438, 440, 441, 443, 444, 446, 447, 449, 450, 452, 453, 455, 456, 458, 459, 461, 462, 464, 465, 467, 468, 470, 471, 472, 474, 475, 477, 478, 479, 481, 482, 484, 485, 486, 488, 489, 490, 492, 493, 495, 496, 497, 499, 500, 501, 502, 504, 505, 506, 508, 509, 510, 512 };