source: Sophya/trunk/SophyaExt/XephemAstroLib/moon.c@ 2641

Last change on this file since 2641 was 2551, checked in by cmv, 21 years ago

nouvelle version de xephem/libastro (3.6) cmv 15/6/04

File size: 98.4 KB
Line 
1/* geocentric moon polar coordinates re mean equinox and ecliptic of date
2
3 S. L. Moshier
4 December, 1996
5
6**********************************************************************
7 Adapted by Michael Sternberg <sternberg@physik.tu-chemnitz.de>
8 for xephem with minor modifications from the originals at:
9 ftp://ftp.std.com/pub/astronomy/selenog.zip
10
11 Precision < 0.05" from -1369 to +2950.
12 Uses table lookup techniques to limit calls to trigonometric functions.
13
14 NB: Uses International Earth Rotation System (IERS) which is
15 taken as equivalent to FK5 for the purposes of xephem.
16
17 original files used:
18 chewtab.c mean.c mlr404.c
19 mlat404.c selenog.c
20
21 changes:
22 added prototypes, grouped and cleaned up vars and #defines,
23 removed _MSC_VER #ifdefs, uniqed names in moonlr and moonlat,
24 included plantbl.h in .c file, dropped out librations for now.
25
26 in struct plantbl, promoted "char *arg_tbl" to "short *".
27 reason: - more portable (BTW: this is the only place in xephem
28 where "signed char" would have been needed)
29 - using "short" costs a mere 7k memory but avoids core
30 dumps on a machine which we didn't anticipate.
31
32**********************************************************************
33
34
35 Residuals against JPL ephemeris DE404 (arc seconds)
36
37First date in file = 1221000.5
38Number of samples = 1053099
39Sampling interval = 1.515625 days
40
41Peak excursions from these mostly different test points
42were consolidated with the above. They added .01" to a few
43of the peak readings.
44First date in file = 1221000.50
45Number of samples = 524290.0
46Sampling interval = 3.0 days
47
48
49 Julian Years Longitude Latitude Distance
50 1 = 1.9 km
51 Peak RMS Ave Peak RMS Ave Peak RMS Ave
52 -1369.0 to -1000.0: 0.43 0.07 0.00 0.33 0.05 -0.00 0.18 0.03 0.00
53 -1000.0 to -500.0: 0.49 0.06 -0.00 0.33 0.04 -0.00 0.18 0.03 0.00
54 -500.0 to 0.0: 0.48 0.06 0.00 0.32 0.04 0.00 0.15 0.03 0.00
55 0.0 to 500.0: 0.45 0.05 0.00 0.30 0.04 -0.00 0.17 0.03 -0.00
56 500.0 to 1000.0: 0.48 0.05 -0.00 0.29 0.04 0.00 0.17 0.03 -0.00
57 1000.0 to 1500.0: 0.42 0.05 -0.00 0.28 0.04 -0.00 0.16 0.03 0.00
58 1500.0 to 2000.0: 0.35 0.05 -0.00 0.26 0.04 0.00 0.15 0.03 0.00
59 2000.0 to 2500.0: 0.39 0.06 0.00 0.25 0.04 -0.00 0.15 0.03 -0.00
60 2500.0 to 3000.0: 0.44 0.07 -0.00 0.30 0.05 -0.00 0.19 0.03 -0.00
61 3000.0 to 3000.8: 0.23 0.08 -0.04 0.11 0.04 -0.00 0.08 0.03 -0.00
62 */
63
64#include <stdlib.h>
65#include <stdio.h>
66#include <math.h>
67
68#include "astro.h"
69
70#define CHAR short
71
72#define NARGS 18
73
74struct plantbl {
75 char max_harmonic[NARGS];
76 char max_power_of_t;
77 CHAR *arg_tbl;
78 long *lon_tbl;
79 long *lat_tbl;
80 long *rad_tbl;
81 double distance;
82 double timescale;
83 double trunclvl;
84};
85
86static double mods3600 (double x);
87static void mean_elements (double JED);
88static int sscc (int k, double arg, int n);
89static int g2plan (double J, struct plantbl *plan, double *pobj, int flag);
90static double g1plan (double J, struct plantbl *plan);
91static int gecmoon (double J, struct plantbl *lrtab,
92 struct plantbl *lattab, double *pobj);
93
94/* time points */
95#define MOSHIER_J2000 (2451545.0)
96
97#define MOSHIER_BEGIN (1221000.5 - MJD0) /* directly from above */
98#define MOSHIER_END (2798525.5 - MJD0) /* 2950.0; from libration table */
99
100
101static double Args[NARGS];
102static double LP_equinox;
103static double Ea_arcsec;
104static double pA_precession;
105
106
107/* This storage ought to be allocated dynamically. */
108double ss[NARGS][30];
109double cc[NARGS][30];
110
111/* Time, in units of 10,000 Julian years from JED 2451545.0. */
112static double T;
113
114/* Conversion factors between degrees and radians */
115#define DTR 1.7453292519943295769e-2
116#define RTD 5.7295779513082320877e1
117#define RTS 2.0626480624709635516e5 /* arc seconds per radian */
118#define STR 4.8481368110953599359e-6 /* radians per arc second */
119#define AUKM 1.4959787e8
120
121
122static long lrtabl[] = {
123 175667, 66453, 5249, -42,
124 20057, 403, -2360, 6148,
125 -7644, 24646, -1273, 9127,
126 -1395, 1958,
127 232, -289,
128 -97, 553, 69, 130,
129 -80, 6,
130 129, -868, 26, -89,
131 1042, 1172, 194, -112,
132 -47433, -241666, 224626, -103752,
133 63419, 127606,
134 2294, -691, -1827, -1254,
135 -1, -119,
136 1057, 324,
137 505, -195, 254, -641,
138 -36, 1008, -1082, -3,
139 -87, 122,
140 161, 11,
141 2, -106,
142 29, -123,
143 -32, 41,
144 -524, -35,
145 133, -595,
146 225, 837, -108, -191,
147 -2294, 841, -340, -394,
148 -351, -1039, 238, -108,
149 -66, 21,
150 1405, 869, 520, 2776,
151 -174, 71,
152 425, 652, -1260, -80,
153 249, 77,
154 -192, -17,
155 -97, 134,
156 -7, -54,
157 -802, -7436, -2824, 70869,
158 -35, 2481,
159 1865, 1749, -2166, 2415,
160 33, -183,
161 -835, 283,
162 27, -45,
163 56, 235,
164 2, 718,
165 -1206, 275, -87, -158,
166 -7, -2534, 0, 10774,
167 1, -324,
168 -208, 821,
169 281, 1340, -797, 440,
170 224, 72,
171 -65, -5,
172 -7, -44,
173 -48, 66,
174 -151, -40,
175 -41, -45,
176 76, -108,
177 -18, 1202, 0, -2501,
178 1438, -595, 900, 3040,
179 -3435, -5,
180 -100, -26,
181 0, -13714,
182 -183, 68,
183 453, -83,
184 -228, 325,
185 97, 13,
186 2, 105,
187 -61, 257,
188 0, 57,
189 88, -11,
190 -1, -8220,
191 0, 275,
192 -43, -10,
193 -199, 105,
194 1, -5849, 2, 24887,
195 -128, 48,
196 712, 970, -1407, 845,
197 -266, 378,
198 311, 1526, -1751, 27,
199 0, -185858,
200 133, 6383,
201 -108, 25,
202 -7, 1944,
203 5, 390,
204 -11, 31,
205 277, -384, 158, 72,
206 -81, -41, -13, -111,
207 -2332, -65804, -698, 505812,
208 34, 1676716, -72, -6664384,
209 154, -57, 52, 95,
210 -4, -5,
211 -7, 37,
212 -63, -32,
213 4, 3349, 1, -14370,
214 16, -83,
215 0, -401,
216 13, 3013,
217 48, -20,
218 0, 250,
219 51, -79,
220 -7, -146,
221 148, 9,
222 0, -64,
223 -17, -59,
224 -67, -492,
225 -2, 2116601,
226 -12, -1848,
227 8, -436,
228 -6, 324, 0, -1363,
229 -163, 9,
230 0, -74,
231 63, 8167, -29, 37587,
232 -22, -74501,
233 -71, 497,
234 -1, 551747,
235 -87, -22,
236 0, -51,
237 -1, -463,
238 0, -444,
239 3, 89,
240 15, -84,
241 -36, -6829, -5, -21663,
242 0, 86058,
243 0, -298,
244 -2, 751, -2, -1015,
245 0, 69,
246 1, -4989, 0, 21458,
247 0, -330,
248 0, -7,
249 0, -226,
250 0, -1407, 0, 2942,
251 0, 66,
252 0, 667,
253 0, -155,
254 0, 105,
255 0, -107,
256 0, -74,
257 0, -52,
258 0, 91,
259 0, 59,
260 0, 235,
261 -1, -1819, 0, 2470,
262 71, 13,
263 0, 1026,
264 14, -54,
265 0, -174,
266 -121, -19,
267 0, -200,
268 0, 3008,
269 -16, -8043, -10, -37136,
270 -3, 73724,
271 -157, -5,
272 0, -854,
273 8, 147,
274 -13, -893,
275 0, 11869,
276 -23, -172,
277 89, 14,
278 -1, 872, 0, -3744,
279 11, 1606,
280 0, -559,
281 -1, -2530,
282 0, 454,
283 0, -193,
284 -60, -10,
285 -82, -13,
286 -75, 6,
287 36, 81,
288 354, -162836, 148, -516569,
289 4, 2054441,
290 4, -94,
291 39, 38,
292 61, -30,
293 2, 121,
294 -11, 590,
295 62, 2108,
296 0, -12242,
297 -476, -42,
298 -84, 113,
299 -394, 236,
300 0, 276,
301 -49, 31,
302 0, 86,
303 1, -1313,
304 1, 69,
305 -60, 88,
306 -46, 18,
307 0, -63818,
308 14, -93,
309 113, 547, -618, 17,
310 -7, 12290, -1, -25679,
311 0, 92,
312 -115, 50,
313 -48, 233,
314 4, 1311, 1, -5567,
315 3, 1251,
316 29, 548,
317 -244, 257,
318 -2, 1825,
319 42, 637,
320 -46, 68,
321 -62, 8,
322 3, 110,
323 445, -100, -316, -202,
324 2925, -621, 763, 1495,
325 -169, -184, 20, -76,
326 -475, -138, 8, -141,
327 -197, 1351, -1284, 422,
328 -129, 1879, -102, 8382,
329 -9, 45864958,
330 -215, 1350, -1285, 422,
331 -481, -136, 8, -140,
332 40, -53,
333 2622, -543, 700, 1406,
334 402, -95, -318, -194,
335 122, 13,
336 -30, 147,
337 -121, -902,
338 61, -23,
339 -63, 7,
340 69, 479,
341 -224, 228,
342 -7, 500,
343 0, -429,
344 -42, 193,
345 -92, 37,
346 67, 5,
347 -350, -31,
348 0, 67,
349 -55, -5,
350 0, 47,
351 -36, 53,
352 5, 561,
353 0, -126,
354 0, 871,
355 -52, 4,
356 -201, 116922, -22, 371352,
357 -12, -1473285,
358 0, 87,
359 -164, 84,
360 -3, 422,
361 30, 1434,
362 -26, 38,
363 2, -1249943,
364 -404, -34,
365 -57, 79,
366 5, 509,
367 1, 131,
368 -344, 168,
369 112, 22540, 30, 71218,
370 18, -283983,
371 0, -851,
372 0, -1538,
373 0, 1360,
374 -12, 51,
375 -48, 68,
376 88, -20,
377 1, 63,
378 0, -568,
379 303, 25,
380 0, -122,
381 87, 586, -606, -14,
382 0, -100,
383 -85, 8,
384 -165, 54,
385 -45, 140,
386 0, -54,
387 4, -831, 1, 3495,
388 31, 116,
389 -46, -11,
390 -371, 190,
391 -507, 399,
392 -2, 57,
393 -60, 36,
394 -198, -1174, -613, 4988,
395 -87, -4,
396 141, 560, -276, 187,
397 1876, 1379, 778, 4386,
398 24, -15,
399 167, -774,
400 -71, -9,
401 -62, 90,
402 98, 580, -663, -7,
403 34, -112,
404 57, 15,
405 -355, -214,
406 -3240, -13605, 12229, -5723,
407 3496, 7063,
408 33, -51,
409 1908, 1160, -226, 715,
410 964, 1170, -1264, 623,
411 14071, 5280, 5614, 3026,
412 488, 1576, -2, 226395859,
413 824, 1106, -1287, 617,
414 1917, 1156, -214, 718,
415 90, -97,
416 12078, -2366, 3282, 6668,
417 -219, 9179, 593, 2015,
418 -282, -186,
419 57, 25,
420 31, -102,
421 -77, -4,
422 -268, -341, -7, -45,
423 -3, 74,
424 15, -615,
425 -88, -7,
426 234, -353,
427 1, -119,
428 -163, -1159, -601, 4969,
429 22, -58,
430 -17, -11434,
431 17, 54,
432 348, 348, -460, 434,
433 -371, 175,
434 -11, -204,
435 4, -6440,
436 -5, -53,
437 -4, -14388, -37, -45231,
438 -7, 179562,
439 -44, 136,
440 -160, 49,
441 -101, 81,
442 -1, -188,
443 0, 2,
444 -4, 12124, -11, -25217,
445 71, 543, -557, -14,
446 -75, 526,
447 0, 395274,
448 -233, -16,
449 93, -20,
450 -43, 61,
451 0, -1275,
452 0, -824,
453 1, -415, 0, 1762,
454 -261, 131,
455 -45, 64,
456 -297, -25,
457 0, -17533,
458 -6, -56,
459 21, 1100,
460 1, 327,
461 1, 66,
462 23, -217,
463 -83, -7,
464 83, 86847, 49, 275754,
465 -4, -1093857,
466 -46, 2,
467 0, -24,
468 0, -419,
469 0, -5833,
470 1, 506,
471 0, -827,
472 -1, -377,
473 -11, -78,
474 0, 131945,
475 -2, -334,
476 1, -75,
477 0, -72,
478 0, -213,
479 -6, 5564, -2, -11618,
480 0, 1790,
481 0, -131,
482 0, 6,
483 0, -76,
484 0, -130,
485 0, -1115, 0, 4783,
486 0, -195,
487 0, -627,
488 0, -55,
489 0, -83,
490 0, 163,
491 0, -54,
492 0, 82,
493 0, 149,
494 0, -754, 0, 1578,
495 0, 138,
496 0, 68,
497 2, -2506, 0, 3399,
498 0, -125,
499 86, 16,
500 0, -6350, 0, 27316,
501 18, -63,
502 0, -169,
503 -1, 46,
504 -136, -21,
505 0, -239,
506 -30, -8788, -15, -40549,
507 -4, 80514,
508 -46, -8,
509 -168, -6,
510 -1, 536, 0, -2314,
511 9, 148,
512 -13, -842,
513 -1, 307713,
514 -23, -175,
515 95, 15,
516 0, -297,
517 11, 1341,
518 0, -106,
519 0, 5,
520 -4, 68,
521 -114, 10,
522 32, 75,
523 159, -130487, 98, -413967,
524 2, 1647339,
525 -4, -85,
526 100, -46,
527 2, 95,
528 -11, 461,
529 51, 1647,
530 0, -32090,
531 -375, -33,
532 -65, 86,
533 -300, 180,
534 0, 836, 0, -3576,
535 0, -222,
536 0, -993,
537 -41, 60,
538 0, -4537,
539 -431, -34,
540 2, 927, 0, -1931,
541 -79, 33,
542 -31, 144,
543 -1, 284, 0, -1207,
544 0, 88,
545 -11, 315,
546 -178, 177,
547 -1, 144,
548 -58, 986,
549 11, 86,
550 -228, -110,
551 2636, -494, 718, 1474,
552 28, -35,
553 -24, 782, -797, 277,
554 2142, -1231, 856, 1853,
555 74, 10797, 0, 23699298,
556 -21, 786, -796, 277,
557 27, -34,
558 2615, -494, 712, 1461,
559 -226, -109,
560 -11, 663,
561 0, -123,
562 -169, 157,
563 -54, 266,
564 0, -76,
565 1, -634, 0, 2738,
566 -25, 106,
567 -63, 24,
568 0, -372,
569 -221, -24,
570 0, -5356,
571 0, -219,
572 0, 91,
573 -28, 7684, -6, 24391,
574 -1, -96795,
575 -77, 43,
576 2, 95,
577 -47, -3,
578 0, -84530,
579 2, 310,
580 1, 88,
581 111, 19331, 32, 61306,
582 4, -243595,
583 0, 770,
584 0, -103,
585 0, 160,
586 0, 356,
587 0, 236,
588 -41, 354,
589 39, 303,
590 12, -56,
591 873, -143, 238, 482,
592 -28, 35,
593 -93, 31,
594 -3, 7690211,
595 -91, 33,
596 -34, 43,
597 824, -130, 226, 450,
598 -39, 341,
599 -1, -687,
600 0, -303,
601 11, -2935, 1, 12618,
602 121, 924, 9, -1836,
603 -268, -1144, -678, 3685,
604 -69, -261,
605 0, -4115951,
606 -69, -261,
607 5, -151,
608 0, -88,
609 0, 91,
610 0, 187,
611 0, -1281,
612 1, 77,
613 1, 6059, 3, 19238,
614 0, -76305,
615 0, -90,
616 0, -238,
617 0, -962, 0, 4133,
618 0, 96,
619 0, 9483,
620 0, 85,
621 0, -688,
622 0, -5607,
623 0, 55,
624 0, -752,
625 0, 71,
626 0, 303,
627 0, -288,
628 0, 57,
629 0, 45,
630 0, 189,
631 0, 401,
632 0, -1474, 0, 3087,
633 0, -71,
634 0, 2925,
635 0, -75,
636 0, 359,
637 0, 55,
638 1, -10155, 0, 43735,
639 0, -572,
640 0, -49,
641 0, -660,
642 0, -3591, 0, 7516,
643 0, 668,
644 -1, -53,
645 -2, 384259,
646 0, -163,
647 0, -93,
648 1, 112,
649 -95, -11528, -22, -36505,
650 -1, 145308,
651 5, 145,
652 0, 4047,
653 1, 1483, 0, -6352,
654 0, 991, 0, -4262,
655 0, -93,
656 0, -334,
657 0, -160,
658 0, -153,
659 -10, 127,
660 51, 185,
661 -77, 18,
662 56, 1217, 6, 1919574,
663 -74, 17,
664 50, 180,
665 -5, 93,
666 0, -104,
667 0, -58,
668 -3, -353, -1, 1499,
669 0, -229,
670 -15, 86,
671 0, -93657,
672 0, 1561, 0, -6693,
673 0, -5839,
674 1, 6791, 0, -29143,
675 1, -701, 0, 3015,
676 0, 2543,
677 0, 693,
678 -1, 361233,
679 0, -50,
680 0, 946,
681 -1, -140,
682 -70, 407,
683 0, -450995,
684 0, -368,
685 0, 54,
686 0, -802,
687 0, -96,
688 0, 1274, 0, -5459,
689 0, -614, 0, 2633,
690 0, 685,
691 0, -915,
692 0, -85,
693 0, 88,
694 0, 106,
695 0, 928,
696 0, -726, 0, 1523,
697 0, 5715,
698 0, -4338, 0, 18706,
699 0, -135,
700 0, -132,
701 0, -158,
702 0, -98,
703 0, 680,
704 -1, 138968,
705 0, -192,
706 0, -1698,
707 0, -2734, 0, 11769,
708 0, 4,
709 0, 673, 0, -2891,
710 0, 889, 0, -3821,
711 0, 121,
712 -1, 143783,
713 0, 231,
714 -9, 51,
715 0, -57413,
716 0, -483,
717 0, -407,
718 0, 676, 0, -2902,
719 0, 531,
720 0, 445,
721 0, 672,
722 0, 19336,
723 0, 70,
724 0, -39976,
725 0, -68,
726 0, 4203,
727 0, -406,
728 0, 446,
729 0, -108,
730 0, 79,
731 0, 84,
732 0, 734,
733 0, 255,
734 0, 3944,
735 0, -655, 0, 2825,
736 0, -109,
737 0, -234,
738 0, 57,
739 0, 19773,
740 0, -2013,
741 0, 958,
742 0, -521,
743 0, -757,
744 0, 10594,
745 0, -9901,
746 0, 199,
747 0, -275,
748 0, 64,
749 0, 54,
750 0, 165,
751 0, 1110,
752 0, -3286,
753 0, 909,
754 0, 54,
755 0, 87,
756 0, 258,
757 0, 1261,
758 0, -51,
759 0, 336,
760 0, -114,
761 0, 2185,
762 0, -850,
763 0, 75,
764 0, -69,
765 0, -103,
766 0, 776,
767 0, -1238,
768 0, 137,
769 0, 67,
770 0, -260,
771 0, 130,
772 0, 49,
773 0, 228,
774 0, 215,
775 0, -178,
776 0, 57,
777 0, -133,
778};
779static long lrtabb[] = {-1};
780static long lrtabr[] = {
781 -5422, -2120, 1077, 772,
782 39, 75, 3, 10,
783 -468, -326, -113, -78,
784 -4, -2,
785 1, 3,
786 29, 24, 4, 2,
787 1, 0,
788 -9, 7, -2, 0,
789 -32, -13, -3, -3,
790 233, 126, 89, 77,
791 -33, 16,
792 3, -3, 0, -1,
793 2, 0,
794 0, 1,
795 4, 9, 1, 1,
796 16, -1, 0, 18,
797 3, 2,
798 0, 0,
799 0, 0,
800 0, 0,
801 0, 0,
802 0, -1,
803 -22, -5,
804 10, 3, 1, 1,
805 -15, 7, -2, 1,
806 -8, -11, -1, -2,
807 -1, 1,
808 46, -58, 126, -23,
809 4, 8,
810 35, 8, 10, -17,
811 0, 0,
812 0, 0,
813 -10, -7,
814 0, 0,
815 -23, 3, 151, 10,
816 -327, 0,
817 4, -5, 6, 5,
818 1, 0,
819 -1, -3,
820 0, 0,
821 0, 1,
822 -185, 0,
823 -3, -24, -5, -2,
824 -1062, 3, 4560, 0,
825 -3, 0,
826 4, 1,
827 8, -1, 2, 4,
828 0, 1,
829 0, -1,
830 0, 0,
831 -1, 0,
832 0, 1,
833 0, 0,
834 -1, -1,
835 277, 3, -583, 1,
836 -1, 4, -32, 7,
837 0, -34,
838 1, -1,
839 -23685, 0,
840 -1, -2,
841 -1, -7,
842 -5, -4,
843 0, 2,
844 -2, 0,
845 -5, -1,
846 35, 0,
847 0, 2,
848 202, 0,
849 180, 0,
850 0, -1,
851 -3, -6,
852 -193, 0, 770, -1,
853 -2, -4,
854 -32, 23, -28, -46,
855 -13, -9,
856 -54, 10, -1, -61,
857 -44895, 0,
858 -230, 5,
859 -1, -4,
860 -71, 0,
861 -15, 0,
862 1, 0,
863 15, 11, -3, 6,
864 2, -3, 4, -1,
865 2576, -138, -19881, -47,
866 -65906, -1, 261925, -4,
867 -2, -7, 4, -2,
868 0, 0,
869 -1, 0,
870 1, -3,
871 172, -2, -727, 0,
872 4, 1,
873 324, 0,
874 -139, 1,
875 1, 3,
876 -276, 0,
877 5, 3,
878 9, 0,
879 -1, 10,
880 -37, 0,
881 5, -1,
882 76, -10,
883 1318810, 1,
884 12, -1,
885 -38, 1,
886 -141, 0, 611, 0,
887 0, -11,
888 4, 0,
889 -627, 2, -2882, -3,
890 5711, -2,
891 -48, -7,
892 55294, 0,
893 2, -7,
894 31, 0,
895 34, 0,
896 -259, 0,
897 -55, 2,
898 6, 3,
899 -4273, 20, -13554, 3,
900 53878, 0,
901 -46, 0,
902 -85, 0, 114, 0,
903 -45, 0,
904 -818, 0, 3520, 0,
905 34, 0,
906 -157, 0,
907 29, 0,
908 -878, 0, 1838, 0,
909 -428, 0,
910 161, 0,
911 24, 0,
912 65, 0,
913 19, 0,
914 15, 0,
915 12, 0,
916 -26, 0,
917 -14, 0,
918 -149, 0,
919 584, 0, -793, 0,
920 4, -23,
921 -238, 0,
922 -18, -5,
923 45, 0,
924 -7, 42,
925 79, 0,
926 -1723, 0,
927 2895, -6, 13362, -4,
928 -26525, -1,
929 -2, 57,
930 291, 0,
931 52, -3,
932 -327, 5,
933 -2755, 0,
934 -63, 9,
935 5, -33,
936 -261, -1, 1122, 0,
937 621, -4,
938 -227, 0,
939 1077, 0,
940 -167, 0,
941 85, 0,
942 -4, 23,
943 -5, 32,
944 3, 30,
945 -32, 14,
946 64607, 141, 204958, 59,
947 -815115, 2,
948 -37, -1,
949 15, -15,
950 12, 24,
951 48, -1,
952 235, 4,
953 843, -25,
954 4621, 0,
955 -17, 191,
956 45, 34,
957 95, 159,
958 -132, 0,
959 13, 20,
960 32, 0,
961 -540, 0,
962 29, 0,
963 37, 25,
964 8, 19,
965 22127, 0,
966 -35, -5,
967 232, -48, 7, 262,
968 5428, 3, -11342, 1,
969 -45, 0,
970 -21, -49,
971 -100, -21,
972 -626, 1, 2665, 0,
973 532, -2,
974 235, -12,
975 -111, -105,
976 774, 1,
977 -283, 17,
978 29, 20,
979 3, 27,
980 47, -2,
981 -43, -192, -87, 136,
982 -269, -1264, 646, -330,
983 -79, 73, -33, -9,
984 60, -205, 61, 4,
985 -584, -85, -182, -555,
986 -780, -57, -3488, -45,
987 -19818328, -4,
988 583, 93, 182, 555,
989 -59, 208, -60, -4,
990 23, 17,
991 235, 1133, -608, 302,
992 41, 174, 84, -137,
993 6, -53,
994 63, 13,
995 -392, 52,
996 -10, -27,
997 -3, -27,
998 199, -31,
999 99, 97,
1000 -218, -3,
1001 209, 0,
1002 84, 18,
1003 16, 40,
1004 2, -30,
1005 14, -154,
1006 30, 0,
1007 -2, 24,
1008 -108, 0,
1009 -24, -16,
1010 262, -2,
1011 55, 0,
1012 -304, 0,
1013 2, 25,
1014 55112, 95, 175036, 11,
1015 -694477, 5,
1016 41, 0,
1017 -38, -76,
1018 199, 1,
1019 679, -14,
1020 -17, -12,
1021 582619, 1,
1022 -16, 191,
1023 38, 27,
1024 -234, 2,
1025 -60, 0,
1026 80, 163,
1027 -10296, 48, -32526, 13,
1028 129703, 8,
1029 -1366, 0,
1030 -741, 0,
1031 -646, 0,
1032 25, 6,
1033 33, 23,
1034 10, 43,
1035 -31, 0,
1036 -6, 0,
1037 -12, 147,
1038 59, 0,
1039 287, -42, -7, 297,
1040 -59, 0,
1041 -4, -42,
1042 -27, -81,
1043 -69, -22,
1044 27, 0,
1045 -423, -2, 1779, -1,
1046 -57, 15,
1047 5, -23,
1048 94, 182,
1049 -197, -250,
1050 24, 1,
1051 -18, -30,
1052 581, -98, -2473, -303,
1053 -2, 43,
1054 -277, 70, -92, -136,
1055 -681, 925, -2165, 384,
1056 -8, -12,
1057 382, 82,
1058 -4, 35,
1059 -45, -31,
1060 -286, 48, 3, -328,
1061 -55, -17,
1062 8, -28,
1063 -106, 175,
1064 -6735, 1601, -2832, -6052,
1065 3495, -1730,
1066 -25, -17,
1067 -574, 944, -354, -112,
1068 -579, 476, -308, -625,
1069 -2411, 7074, -1529, 2828,
1070 -1335, 247,-112000844, -1,
1071 545, -409, 305, 637,
1072 572, -950, 356, 106,
1073 48, 44,
1074 1170, 5974, -3298, 1624,
1075 -4538, -106, -996, 294,
1076 92, -139,
1077 -12, 28,
1078 50, 16,
1079 2, -38,
1080 169, -133, 22, -3,
1081 38, 1,
1082 305, 7,
1083 4, -44,
1084 175, 116,
1085 59, 1,
1086 -573, 81, 2453, 297,
1087 29, 11,
1088 5674, -8,
1089 -27, 9,
1090 173, -173, 215, 228,
1091 -87, -184,
1092 102, -5,
1093 3206, 2,
1094 -53, 2,
1095 7159, -7, 22505, -19,
1096 -89344, -3,
1097 67, 22,
1098 24, 79,
1099 -40, -50,
1100 94, 0,
1101 186, 0,
1102 -6063, 0, 12612, -5,
1103 -271, 35, 7, -278,
1104 -479, -74,
1105 426754, 0,
1106 8, -116,
1107 -10, -47,
1108 -31, -22,
1109 645, 0,
1110 426, 0,
1111 -213, 0, 903, 0,
1112 -67, -133,
1113 -33, -23,
1114 13, -152,
1115 -9316, 0,
1116 29, -3,
1117 -564, 11,
1118 -167, 0,
1119 -34, 0,
1120 114, 12,
1121 4, -44,
1122 -44561, 42, -141493, 25,
1123 561256, -2,
1124 -1, -24,
1125 -261, 0,
1126 211, 0,
1127 -4263, 0,
1128 -262, 1,
1129 1842, 0,
1130 202, 0,
1131 41, -6,
1132 77165, 0,
1133 176, -1,
1134 39, 1,
1135 -24, 0,
1136 118, 0,
1137 -2991, -4, 6245, -1,
1138 46886, 0,
1139 -75, 0,
1140 -100, 0,
1141 40, 0,
1142 75, 0,
1143 -618, 0, 2652, 0,
1144 112, 0,
1145 1780, 0,
1146 30, 0,
1147 49, 0,
1148 86, 0,
1149 33, 0,
1150 -30, 0,
1151 -95, 0,
1152 277, 0, -580, 0,
1153 -35, 0,
1154 -319, 0,
1155 1622, 1, -2201, 0,
1156 79, 0,
1157 10, -57,
1158 2363, 0, -10162, 0,
1159 -41, -12,
1160 62, 0,
1161 30, 1,
1162 -14, 89,
1163 -2721, 0,
1164 5780, -19, 26674, -10,
1165 -52964, -2,
1166 -5, 30,
1167 -4, 111,
1168 -317, -1, 1369, 0,
1169 93, -6,
1170 -564, 9,
1171 -115913, 0,
1172 -113, 15,
1173 10, -62,
1174 99, 0,
1175 891, -7,
1176 36, 0,
1177 108, 0,
1178 -42, -2,
1179 7, 75,
1180 -50, 21,
1181 86822, 104, 275441, 65,
1182 -1096109, 1,
1183 -56, 3,
1184 31, 66,
1185 63, -1,
1186 307, 7,
1187 1097, -34,
1188 17453, 0,
1189 -22, 250,
1190 57, 43,
1191 120, 200,
1192 -297, 0, 1269, 0,
1193 166, 0,
1194 -662, 0,
1195 40, 28,
1196 1521, 0,
1197 -23, 288,
1198 351, -2, -729, 0,
1199 -22, -52,
1200 -96, -21,
1201 -139, -1, 589, 0,
1202 35, 0,
1203 210, 7,
1204 -118, -119,
1205 62, 0,
1206 -583, -26,
1207 -42, 5,
1208 -73, 152,
1209 -330, -1759, 983, -479,
1210 -23, -19,
1211 -522, -15, -185, -533,
1212 739, 1559, -1300, 614,
1213 -7332, 52, -15836758, 0,
1214 524, 16, 185, 532,
1215 23, 18,
1216 330, 1751, -978, 476,
1217 73, -151,
1218 519, 18,
1219 38, 0,
1220 105, 113,
1221 -178, -37,
1222 26, 0,
1223 262, 1, -1139, 0,
1224 71, 17,
1225 16, 42,
1226 151, 0,
1227 16, -148,
1228 4147, 0,
1229 149, 0,
1230 -30, 0,
1231 2980, 9, 9454, 2,
1232 -37519, 0,
1233 -28, -49,
1234 37, -1,
1235 2, -31,
1236 33870, 0,
1237 -208, 1,
1238 -59, 1,
1239 -13105, 68, -41564, 21,
1240 165148, 3,
1241 -1022, 0,
1242 -40, 0,
1243 -132, 0,
1244 -228, 0,
1245 95, 0,
1246 -138, -16,
1247 -126, 16,
1248 24, 5,
1249 -57, -346, 191, -94,
1250 -14, -11,
1251 -12, -37,
1252 -3053364, -1,
1253 13, 36,
1254 17, 13,
1255 51, 327, -179, 90,
1256 138, 16,
1257 233, 0,
1258 62, 0,
1259 1164, 0, -5000, 0,
1260 -407, 117, 770, 9,
1261 -4, 1, 21, 2,
1262 1, 0,
1263 -16869, 0,
1264 -1, 0,
1265 1, 0,
1266 35, 0,
1267 -78, 0,
1268 78, 0,
1269 -533, 0,
1270 -31, 1,
1271 -2448, -6, -7768, -1,
1272 30812, 0,
1273 37, 0,
1274 -227, 0,
1275 197, 0, -846, 0,
1276 -77, 0,
1277 4171, 0,
1278 -67, 0,
1279 287, 0,
1280 2532, 0,
1281 -19, 0,
1282 -40, 0,
1283 -56, 0,
1284 128, 0,
1285 83, 0,
1286 -45, 0,
1287 -36, 0,
1288 -92, 0,
1289 -134, 0,
1290 714, 0, -1495, 0,
1291 32, 0,
1292 -981, 0,
1293 15, 0,
1294 -166, 0,
1295 -59, 0,
1296 4923, 0, -21203, 0,
1297 246, 0,
1298 15, 0,
1299 104, 0,
1300 1683, 0, -3523, 0,
1301 -865, 0,
1302 -25, 1,
1303 -186329, -1,
1304 10, 0,
1305 50, 0,
1306 53, 0,
1307 5455, -45, 17271, -10,
1308 -68747, 0,
1309 69, -2,
1310 -7604, 0,
1311 -724, 1, 3101, 0,
1312 -46, 0, 200, 0,
1313 -44, 0,
1314 97, 0,
1315 -53, 0,
1316 62, 0,
1317 -54, -4,
1318 88, -24,
1319 -9, -36,
1320 -581, 27, -914711, 3,
1321 8, 35,
1322 -86, 24,
1323 51, 3,
1324 48, 0,
1325 26, 0,
1326 133, 1, -577, 0,
1327 105, 0,
1328 -3, -1,
1329 3194, 0,
1330 528, 0, -2263, 0,
1331 2028, 0,
1332 -3266, 1, 14016, 0,
1333 10, 0, -41, 0,
1334 -100, 0,
1335 -32, 0,
1336 -124348, 0,
1337 16, 0,
1338 -325, 0,
1339 50, -1,
1340 1, 0,
1341 -553, 0,
1342 0, 0,
1343 0, 0,
1344 2, 0,
1345 -34, 0,
1346 -444, 0, 1902, 0,
1347 9, 0, -37, 0,
1348 254, 0,
1349 156, 0,
1350 -2, 0,
1351 -35, 0,
1352 -48, 0,
1353 -368, 0,
1354 327, 0, -686, 0,
1355 -2263, 0,
1356 1952, 0, -8418, 0,
1357 -13, 0,
1358 52, 0,
1359 9, 0,
1360 21, 0,
1361 -261, 0,
1362 -62404, 0,
1363 0, 0,
1364 79, 0,
1365 1056, 0, -4547, 0,
1366 -351, 0,
1367 -305, 0, 1310, 0,
1368 -1, 0, 6, 0,
1369 0, 0,
1370 -55953, 0,
1371 -80, 0,
1372 0, 0,
1373 168, 0,
1374 -147, 0,
1375 127, 0,
1376 -265, 0, 1138, 0,
1377 -1, 0,
1378 -9, 0,
1379 -8, 0,
1380 -5984, 0,
1381 -22, 0,
1382 -5, 0,
1383 0, 0,
1384 0, 0,
1385 127, 0,
1386 -2, 0,
1387 10, 0,
1388 -31, 0,
1389 -29, 0,
1390 -286, 0,
1391 -98, 0,
1392 -1535, 0,
1393 252, 0, -1087, 0,
1394 43, 0,
1395 4, 0,
1396 -19, 0,
1397 -7620, 0,
1398 29, 0,
1399 -322, 0,
1400 203, 0,
1401 0, 0,
1402 -3587, 0,
1403 10, 0,
1404 0, 0,
1405 94, 0,
1406 0, 0,
1407 -1, 0,
1408 -1, 0,
1409 -315, 0,
1410 1, 0,
1411 0, 0,
1412 0, 0,
1413 -30, 0,
1414 -94, 0,
1415 -460, 0,
1416 1, 0,
1417 -114, 0,
1418 0, 0,
1419 -746, 0,
1420 4, 0,
1421 -23, 0,
1422 24, 0,
1423 0, 0,
1424 -237, 0,
1425 1, 0,
1426 0, 0,
1427 -18, 0,
1428 0, 0,
1429 0, 0,
1430 -16, 0,
1431 -76, 0,
1432 -67, 0,
1433 0, 0,
1434 -16, 0,
1435 0, 0,
1436};
1437static CHAR lrargs[] = {
1438 0, 3,
1439 3, 4, 3, -8, 4, 3, 5, 1,
1440 2, 2, 5, -5, 6, 2,
1441 5, -1, 10, 2, 13, -1, 11, 3, 3, -7, 4, 0,
1442 3, 1, 13, -1, 11, 2, 5, 1,
1443 2, 4, 5,-10, 6, 0,
1444 4, 2, 10, -2, 13, 14, 3,-23, 4, 1,
1445 3, 3, 2, -7, 3, 4, 4, 1,
1446 3, -1, 13, 18, 2,-16, 3, 2,
1447 2, 8, 2,-13, 3, 1,
1448 5, 2, 10, -2, 13, 2, 3, -3, 5, 1, 6, 0,
1449 3, -1, 13, 26, 2,-29, 3, 0,
1450 3, 1, 10, -1, 11, 2, 4, 1,
1451 4, 1, 10, -1, 13, 3, 2, -4, 3, 1,
1452 4, 1, 10, -1, 13, 3, 3, -4, 4, 0,
1453 3, -1, 10, 15, 2,-12, 3, 0,
1454 4, 2, 10, -3, 13, 24, 2,-24, 3, 0,
1455 3, -1, 10, 23, 2,-25, 3, 0,
1456 4, 1, 10, -1, 11, 1, 3, 1, 6, 0,
1457 4, 2, 10, -2, 11, 5, 2, -6, 3, 0,
1458 4, 2, 10, -2, 13, 6, 2, -8, 3, 0,
1459 4, -2, 10, 1, 13, 12, 2, -8, 3, 1,
1460 5, -1, 10, 1, 13, -1, 11, 20, 2,-20, 3, 1,
1461 4, -2, 10, 1, 13, 3, 1, -1, 3, 1,
1462 5, 2, 10, -2, 13, 2, 3, -5, 5, 5, 6, 0,
1463 4, 2, 10, -2, 13, 2, 3, -3, 5, 1,
1464 4, 2, 10, -2, 13, 6, 3, -8, 4, 0,
1465 4, -2, 10, 1, 13, 20, 2,-21, 3, 1,
1466 4, 1, 10, -1, 11, 1, 3, 1, 5, 0,
1467 1, 1, 6, 0,
1468 4, 2, 10, -2, 13, 5, 3, -6, 4, 0,
1469 3, 3, 2, -5, 3, 2, 5, 0,
1470 2, -1, 11, 1, 14, 1,
1471 4, 2, 10, -2, 13, 2, 3, -2, 5, 0,
1472 2, 1, 3, -2, 4, 1,
1473 4, 1, 10, -1, 11, 5, 2, -7, 3, 0,
1474 1, 1, 5, 0,
1475 2, 7, 3,-13, 4, 0,
1476 4, -2, 10, 1, 13, 15, 2,-13, 3, 0,
1477 4, 2, 10, -2, 13, 3, 2, -3, 3, 0,
1478 2, -2, 11, 2, 14, 1,
1479 3, 1, 10, 1, 12, -1, 13, 1,
1480 3, -1, 13, 21, 2,-21, 3, 0,
1481 2, 3, 2, -5, 3, 0,
1482 2, 2, 3, -4, 4, 1,
1483 2, 5, 2, -8, 3, 0,
1484 3, -1, 13, 23, 2,-24, 3, 0,
1485 2, 6, 3,-11, 4, 0,
1486 1, 2, 5, 0,
1487 2, 3, 3, -6, 4, 0,
1488 2, 5, 3, -9, 4, 0,
1489 4, 1, 10, -1, 11, 1, 3, -2, 5, 0,
1490 3, 2, 10, 2, 12, -2, 13, 1,
1491 2, 2, 2, -3, 3, 2,
1492 2, 4, 3, -7, 4, 0,
1493 2, 2, 13, -2, 11, 0,
1494 2, 3, 3, -5, 4, 0,
1495 2, 1, 2, -2, 3, 0,
1496 2, 2, 3, -3, 4, 0,
1497 4, 1, 10, -1, 11, 4, 2, -5, 3, 0,
1498 2, 1, 3, -1, 4, 0,
1499 2, 4, 2, -6, 3, 0,
1500 4, 2, 10, -2, 13, 2, 2, -2, 3, 0,
1501 3, 1, 10, -1, 11, 1, 2, 0,
1502 2, 1, 2, -1, 3, 0,
1503 3, 1, 12, 2, 13, -2, 11, 0,
1504 2, 5, 3, -8, 4, 0,
1505 2, 1, 3, -3, 5, 0,
1506 3, 2, 10, 1, 12, -2, 13, 1,
1507 2, 4, 3, -6, 4, 0,
1508 2, 1, 3, -2, 5, 1,
1509 2, 3, 3, -4, 4, 0,
1510 2, 3, 2, -4, 3, 1,
1511 2, 1, 10, -1, 13, 0,
1512 2, 1, 3, -1, 5, 0,
1513 2, 1, 3, -2, 6, 0,
1514 2, 2, 3, -2, 4, 0,
1515 2, 1, 3, -1, 6, 0,
1516 2, 8, 2,-14, 3, 0,
1517 3, 1, 3, 2, 5, -5, 6, 1,
1518 3, 5, 3, -8, 4, 3, 5, 1,
1519 1, 1, 12, 3,
1520 3, 3, 3, -8, 4, 3, 5, 1,
1521 3, 1, 3, -2, 5, 5, 6, 0,
1522 2, 8, 2,-12, 3, 0,
1523 2, 1, 3, 1, 5, 0,
1524 3, 2, 10, 1, 12, -2, 11, 1,
1525 2, 5, 2, -7, 3, 0,
1526 3, 1, 10, 1, 13, -2, 11, 0,
1527 2, 2, 2, -2, 3, 0,
1528 2, 5, 3, -7, 4, 0,
1529 3, 1, 12, -2, 13, 2, 11, 0,
1530 2, 4, 3, -5, 4, 0,
1531 2, 3, 3, -3, 4, 0,
1532 1, 1, 2, 0,
1533 3, 3, 10, 1, 12, -3, 13, 0,
1534 2, 2, 3, -4, 5, 0,
1535 2, 2, 3, -3, 5, 0,
1536 2, 2, 10, -2, 13, 0,
1537 2, 2, 3, -2, 5, 0,
1538 2, 3, 2, -3, 3, 0,
1539 3, 1, 10, -1, 12, -1, 13, 1,
1540 2, 2, 3, -1, 5, 0,
1541 2, 2, 3, -2, 6, 0,
1542 1, 2, 12, 2,
1543 3, -2, 10, 1, 11, 1, 14, 0,
1544 2, 2, 10, -2, 11, 0,
1545 2, 2, 2, -1, 3, 0,
1546 4, -2, 10, 2, 13, 1, 2, -1, 3, 0,
1547 2, 4, 2, -4, 3, 0,
1548 2, 3, 10, -3, 13, 0,
1549 4, -2, 10, 2, 13, 1, 3, -1, 5, 0,
1550 2, 3, 3, -3, 5, 0,
1551 3, 2, 10, -1, 12, -2, 13, 2,
1552 3, 3, 10, -1, 13, -2, 11, 0,
1553 1, 3, 12, 1,
1554 4, -2, 10, 2, 13, 2, 2, -2, 3, 0,
1555 3, 2, 10, -1, 12, -2, 11, 1,
1556 2, 5, 2, -5, 3, 0,
1557 2, 4, 10, -4, 13, 0,
1558 2, 6, 2, -6, 3, 0,
1559 3, 2, 10, -2, 12, -2, 13, 1,
1560 3, 4, 10, -2, 13, -2, 11, 0,
1561 3, 2, 10, -2, 12, -2, 11, 0,
1562 2, 7, 2, -7, 3, 0,
1563 3, 2, 10, -3, 12, -2, 13, 0,
1564 2, 8, 2, -8, 3, 0,
1565 2, 9, 2, -9, 3, 0,
1566 2, 10, 2,-10, 3, 0,
1567 3, 2, 10, -4, 12, -1, 13, 0,
1568 3, 4, 10, -2, 12, -3, 13, 0,
1569 4, 4, 10, -1, 12, -1, 13, -2, 11, 0,
1570 3, 2, 10, -3, 12, -1, 13, 1,
1571 4, -2, 10, 1, 13, 3, 3, -2, 5, 0,
1572 3, 4, 10, -1, 12, -3, 13, 0,
1573 4, -2, 10, 1, 13, 3, 3, -3, 5, 0,
1574 4, 2, 10, -2, 12, 1, 13, -2, 11, 0,
1575 4, -2, 10, 1, 13, 2, 2, -1, 3, 0,
1576 3, 3, 10, -1, 12, -2, 11, 0,
1577 3, 4, 10, -1, 13, -2, 11, 0,
1578 3, 2, 10, -2, 12, -1, 13, 2,
1579 4, -2, 10, 1, 13, 2, 3, -1, 5, 0,
1580 3, 3, 10, -1, 12, -2, 13, 0,
1581 4, -2, 10, 1, 13, 3, 2, -3, 3, 0,
1582 4, -2, 10, 1, 13, 2, 3, -2, 5, 0,
1583 2, 4, 10, -3, 13, 0,
1584 4, -2, 10, 1, 13, 2, 3, -3, 5, 0,
1585 3, -2, 10, 1, 13, 1, 2, 0,
1586 4, 2, 10, -1, 12, 1, 13, -2, 11, 1,
1587 4, -2, 10, 1, 13, 2, 2, -2, 3, 0,
1588 2, 3, 12, -1, 13, 0,
1589 2, 3, 10, -2, 11, 0,
1590 2, 1, 10, -2, 12, 0,
1591 4, 4, 10, 1, 12, -1, 13, -2, 11, 0,
1592 3, -1, 13, 3, 2, -2, 3, 0,
1593 3, -1, 13, 3, 3, -2, 5, 0,
1594 3, -2, 10, 18, 2,-15, 3, 0,
1595 5, 2, 10, -1, 13, 3, 3, -8, 4, 3, 5, 0,
1596 3, 2, 10, -1, 12, -1, 13, 2,
1597 5, -2, 10, 1, 13, 5, 3, -8, 4, 3, 5, 0,
1598 5, -2, 10, 1, 13, 1, 3, 2, 5, -5, 6, 0,
1599 4, 2, 10, -2, 13, 18, 2,-17, 3, 0,
1600 4, -2, 10, 1, 13, 1, 3, -1, 6, 0,
1601 4, -2, 10, 1, 13, 2, 3, -2, 4, 0,
1602 4, -2, 10, 1, 13, 1, 3, -1, 5, 0,
1603 2, 3, 10, -2, 13, 0,
1604 4, -2, 10, 1, 13, 3, 2, -4, 3, 0,
1605 4, -2, 10, 1, 13, 3, 3, -4, 4, 0,
1606 4, -2, 10, 1, 13, 1, 3, -2, 5, 0,
1607 3, 4, 10, 1, 12, -3, 13, 0,
1608 4, -2, 10, 1, 13, 1, 3, -3, 5, 0,
1609 3, -1, 13, 4, 2, -4, 3, 0,
1610 4, -2, 10, 1, 13, 1, 2, -1, 3, 0,
1611 4, -2, 10, 1, 13, 1, 3, -1, 4, 0,
1612 4, -2, 10, 1, 13, 2, 3, -3, 4, 0,
1613 4, -2, 10, 1, 13, 3, 3, -5, 4, 0,
1614 3, 2, 10, 1, 13, -2, 11, 0,
1615 4, -2, 10, -1, 13, 1, 11, 1, 14, 0,
1616 4, -2, 10, 1, 13, 2, 2, -3, 3, 1,
1617 2, 2, 12, -1, 13, 1,
1618 3, 3, 10, 1, 12, -2, 11, 0,
1619 4, 2, 10, -1, 13, 2, 3, -4, 4, 0,
1620 4, 2, 10, -1, 13, 3, 2, -5, 3, 0,
1621 2, 1, 10, -1, 12, 1,
1622 3, -1, 13, 3, 2, -3, 3, 0,
1623 3, -2, 10, 1, 13, 1, 5, 0,
1624 4, 2, 10, -1, 13, 1, 3, -2, 4, 0,
1625 3, -1, 13, 2, 3, -2, 5, 0,
1626 4, 2, 10, -1, 13, -1, 11, 1, 14, 0,
1627 3, -1, 13, 5, 3, -6, 4, 0,
1628 3, -2, 10, 1, 13, 1, 6, 0,
1629 3, -1, 10, 1, 3, -1, 5, 0,
1630 4, -2, 10, 1, 13, 8, 2,-13, 3, 1,
1631 3, -2, 10, 18, 2,-16, 3, 1,
1632 5, -2, 10, 1, 13, 3, 2, -7, 3, 4, 4, 1,
1633 4, 2, 10, -1, 13, 2, 5, -5, 6, 1,
1634 5, 2, 10, -1, 13, 4, 3, -8, 4, 3, 5, 1,
1635 2, 2, 10, -1, 13, 2,
1636 5, -2, 10, 1, 13, 4, 3, -8, 4, 3, 5, 1,
1637 4, -2, 10, 1, 13, 2, 5, -5, 6, 1,
1638 5, 2, 10, -1, 13, 3, 2, -7, 3, 4, 4, 0,
1639 4, 2, 10, -2, 13, 18, 2,-16, 3, 1,
1640 4, 2, 10, -1, 13, 8, 2,-13, 3, 1,
1641 3, -1, 10, 3, 2, -4, 3, 0,
1642 3, -1, 13, 6, 2, -8, 3, 0,
1643 3, -1, 13, 2, 3, -3, 5, 0,
1644 3, -1, 13, 6, 3, -8, 4, 0,
1645 3, 2, 10, -1, 13, 1, 6, 0,
1646 4, -2, 10, 1, 13, -1, 11, 1, 14, 0,
1647 4, -2, 10, 1, 13, 1, 3, -2, 4, 0,
1648 3, 2, 10, -1, 13, 1, 5, 0,
1649 3, 3, 10, 1, 12, -2, 13, 0,
1650 4, -2, 10, 1, 13, 3, 2, -5, 3, 0,
1651 4, -2, 10, 1, 13, 2, 3, -4, 4, 0,
1652 2, -1, 13, 1, 2, 0,
1653 4, 2, 10, -1, 13, 2, 2, -3, 3, 0,
1654 3, -1, 10, 1, 2, -1, 3, 0,
1655 3, -1, 13, 4, 2, -5, 3, 0,
1656 3, 2, 10, -3, 13, 2, 11, 0,
1657 4, 2, 10, -1, 13, 2, 3, -3, 4, 0,
1658 3, -1, 13, 2, 2, -2, 3, 0,
1659 4, 2, 10, -1, 13, 1, 2, -1, 3, 0,
1660 4, 2, 10, 1, 12, 1, 13, -2, 11, 0,
1661 3, -2, 13, 18, 2,-15, 3, 0,
1662 2, 1, 12, -1, 13, 2,
1663 3, -1, 13, 1, 3, -1, 6, 0,
1664 4, 2, 10, -1, 13, 1, 3, -2, 5, 0,
1665 3, -1, 13, 2, 3, -2, 4, 0,
1666 3, -1, 13, 1, 3, -1, 5, 0,
1667 4, 2, 10, -1, 13, 3, 3, -4, 4, 0,
1668 1, 1, 10, 0,
1669 3, -1, 13, 3, 2, -4, 3, 0,
1670 3, -1, 13, 3, 3, -4, 4, 0,
1671 4, 2, 10, -1, 13, 1, 3, -1, 5, 0,
1672 4, 2, 10, -1, 13, 2, 3, -2, 4, 0,
1673 3, -1, 13, 1, 3, -2, 5, 0,
1674 3, 2, 10, 1, 12, -1, 13, 2,
1675 3, 1, 12, 1, 13, -2, 11, 0,
1676 3, -1, 13, 1, 2, -1, 3, 0,
1677 4, 2, 10, -1, 13, 2, 2, -2, 3, 0,
1678 3, -1, 13, 4, 2, -6, 3, 0,
1679 3, -1, 13, 2, 3, -3, 4, 0,
1680 3, 1, 13, 1, 2, -2, 3, 0,
1681 4, 2, 10, -1, 13, 3, 3, -3, 4, 0,
1682 2, 3, 13, -2, 11, 0,
1683 4, 2, 10, -1, 13, 4, 2, -5, 3, 0,
1684 3, 1, 10, 1, 2, -1, 3, 0,
1685 3, -1, 13, 2, 2, -3, 3, 1,
1686 3, 2, 10, 2, 12, -3, 13, 0,
1687 3, 2, 10, -1, 13, 1, 2, 0,
1688 3, 1, 13, 2, 3, -4, 4, 0,
1689 3, 1, 13, 3, 2, -5, 3, 0,
1690 2, 21, 2,-21, 3, 0,
1691 3, 1, 10, 1, 12, -2, 13, 1,
1692 4, 2, 10, -1, 13, 2, 3, -4, 5, 0,
1693 4, 2, 10, -1, 13, 7, 3,-10, 4, 0,
1694 2, -1, 13, 1, 5, 0,
1695 3, 1, 13, 1, 3, -2, 4, 0,
1696 4, 2, 10, -3, 13, 2, 3, -2, 5, 0,
1697 3, 1, 10, 1, 3, -2, 5, 0,
1698 3, 1, 13, -1, 11, 1, 14, 1,
1699 2, -1, 13, 1, 6, 0,
1700 4, 2, 10, -1, 13, 6, 3, -8, 4, 1,
1701 4, 2, 10, -1, 13, 2, 3, -3, 5, 1,
1702 3, -1, 13, 8, 3,-15, 4, 0,
1703 4, 2, 10, -1, 13, 6, 2, -8, 3, 0,
1704 5, 2, 10, -1, 13, -2, 11, 5, 2, -6, 3, 0,
1705 3, 1, 10, 3, 3, -4, 4, 0,
1706 3, 1, 10, 3, 2, -4, 3, 1,
1707 4, 1, 10, -1, 13, -1, 11, 2, 4, 0,
1708 3, -2, 13, 26, 2,-29, 3, 0,
1709 3, -1, 13, 8, 2,-13, 3, 0,
1710 3, -2, 13, 18, 2,-16, 3, 2,
1711 4, -1, 13, 3, 2, -7, 3, 4, 4, 0,
1712 3, 1, 13, 2, 5, -5, 6, 1,
1713 4, 1, 13, 4, 3, -8, 4, 3, 5, 1,
1714 1, 1, 13, 3,
1715 4, -1, 13, 4, 3, -8, 4, 3, 5, 1,
1716 3, -1, 13, 2, 5, -5, 6, 1,
1717 4, 1, 13, 3, 2, -7, 3, 4, 4, 0,
1718 2, 18, 2,-16, 3, 1,
1719 3, 1, 13, 8, 2,-13, 3, 2,
1720 2, 26, 2,-29, 3, 0,
1721 4, 1, 10, 1, 13, -1, 11, 2, 4, 0,
1722 5, 2, 10, 1, 13, -2, 11, 5, 2, -6, 3, 0,
1723 3, 1, 13, 8, 3,-15, 4, 1,
1724 4, 2, 10, -3, 13, 2, 3, -3, 5, 0,
1725 3, 1, 10, 1, 3, -1, 5, 0,
1726 2, 1, 13, 1, 6, 0,
1727 4, 2, 10, -1, 13, 5, 3, -6, 4, 0,
1728 3, 1, 10, 2, 3, -2, 4, 0,
1729 3, -1, 13, -1, 11, 1, 14, 1,
1730 4, 2, 10, -1, 13, 2, 3, -5, 6, 0,
1731 4, 2, 10, -1, 13, 2, 3, -2, 5, 0,
1732 5, 2, 10, -1, 13, 2, 3, -4, 5, 5, 6, 0,
1733 3, -1, 13, 1, 3, -2, 4, 1,
1734 2, 1, 13, 1, 5, 0,
1735 4, 2, 10, -1, 13, 4, 3, -4, 4, 0,
1736 4, 2, 10, -1, 13, 3, 2, -3, 3, 0,
1737 4, 2, 10, 2, 12, -1, 13, -2, 11, 0,
1738 2, 1, 10, 1, 12, 2,
1739 3, -1, 13, 3, 2, -5, 3, 0,
1740 3, -1, 13, 2, 3, -4, 4, 0,
1741 4, 2, 10, -1, 13, 2, 3, -1, 5, 0,
1742 4, 2, 10, -1, 13, 2, 3, -2, 6, 0,
1743 3, 1, 10, 1, 12, -2, 11, 0,
1744 3, 2, 10, 2, 12, -1, 13, 1,
1745 3, 1, 13, 2, 2, -3, 3, 1,
1746 3, -1, 13, 1, 11, 1, 14, 0,
1747 2, 1, 13, -2, 11, 0,
1748 4, 2, 10, -1, 13, 5, 2, -6, 3, 0,
1749 3, -1, 13, 1, 2, -2, 3, 0,
1750 3, 1, 13, 2, 3, -3, 4, 0,
1751 3, 1, 13, 1, 2, -1, 3, 0,
1752 4, 2, 10, -1, 13, 4, 2, -4, 3, 0,
1753 3, 2, 10, 1, 12, -3, 13, 1,
1754 3, 1, 13, 1, 3, -2, 5, 0,
1755 3, 1, 13, 3, 3, -4, 4, 0,
1756 3, 1, 13, 3, 2, -4, 3, 0,
1757 2, 1, 10, -2, 13, 0,
1758 4, 2, 10, -1, 13, 3, 3, -4, 5, 0,
1759 3, 1, 13, 1, 3, -1, 5, 0,
1760 3, 1, 13, 2, 3, -2, 4, 0,
1761 3, 1, 13, 1, 3, -1, 6, 0,
1762 4, 2, 10, -1, 13, 3, 3, -3, 5, 0,
1763 4, 2, 10, -1, 13, 6, 2, -7, 3, 0,
1764 2, 1, 12, 1, 13, 2,
1765 4, 2, 10, -1, 13, 3, 3, -2, 5, 0,
1766 4, 2, 10, 1, 12, -1, 13, -2, 11, 0,
1767 2, 1, 10, 2, 12, 0,
1768 2, 1, 10, -2, 11, 0,
1769 3, 1, 13, 2, 2, -2, 3, 0,
1770 3, 1, 12, -1, 13, 2, 11, 0,
1771 4, 2, 10, -1, 13, 5, 2, -5, 3, 0,
1772 3, 1, 13, 2, 3, -3, 5, 0,
1773 2, 2, 10, -3, 13, 0,
1774 3, 1, 13, 2, 3, -2, 5, 0,
1775 3, 1, 13, 3, 2, -3, 3, 0,
1776 3, 1, 10, -1, 12, -2, 13, 0,
1777 4, 2, 10, -1, 13, 6, 2, -6, 3, 0,
1778 2, 2, 12, 1, 13, 1,
1779 3, 2, 10, -1, 13, -2, 11, 0,
1780 3, 1, 10, -1, 12, -2, 11, 0,
1781 3, 2, 10, 1, 13, -4, 11, 0,
1782 3, 1, 13, 4, 2, -4, 3, 0,
1783 4, 2, 10, -1, 13, 7, 2, -7, 3, 0,
1784 3, 2, 10, -1, 12, -3, 13, 1,
1785 2, 3, 12, 1, 13, 0,
1786 4, 2, 10, -1, 12, -1, 13, -2, 11, 0,
1787 3, 1, 13, 5, 2, -5, 3, 0,
1788 4, 2, 10, -1, 13, 8, 2, -8, 3, 0,
1789 3, 2, 10, -2, 12, -3, 13, 0,
1790 4, 2, 10, -1, 13, 9, 2, -9, 3, 0,
1791 3, 4, 10, -3, 12, -2, 13, 0,
1792 2, 2, 10, -4, 12, 0,
1793 3, 4, 10, -2, 12, -2, 13, 1,
1794 2, 6, 10, -4, 13, 0,
1795 3, 4, 10, -1, 12, -2, 11, 0,
1796 2, 2, 10, -3, 12, 1,
1797 3, 3, 10, -2, 12, -1, 13, 0,
1798 3, -2, 10, 3, 3, -2, 5, 0,
1799 3, 4, 10, -1, 12, -2, 13, 1,
1800 3, -2, 10, 3, 3, -3, 5, 0,
1801 2, 5, 10, -3, 13, 0,
1802 3, -2, 10, 4, 2, -4, 3, 0,
1803 3, -2, 10, 2, 2, -1, 3, 0,
1804 2, 4, 10, -2, 11, 0,
1805 2, 2, 10, -2, 12, 2,
1806 3, -2, 10, 3, 3, -2, 4, 0,
1807 3, -2, 10, 2, 3, -1, 5, 0,
1808 3, 3, 10, -1, 12, -1, 13, 1,
1809 3, -2, 10, 3, 2, -3, 3, 0,
1810 3, -2, 10, 2, 3, -2, 5, 0,
1811 2, 4, 10, -2, 13, 0,
1812 3, -2, 10, 2, 3, -3, 5, 0,
1813 2, -2, 10, 1, 2, 0,
1814 4, 2, 10, -1, 12, 2, 13, -2, 11, 0,
1815 3, -2, 10, 2, 2, -2, 3, 0,
1816 3, 3, 10, 1, 13, -2, 11, 0,
1817 3, 4, 10, 1, 12, -2, 11, 0,
1818 4, 2, 10, -1, 12, -1, 11, 1, 14, 0,
1819 4, -2, 10, -1, 13, 18, 2,-15, 3, 0,
1820 4, 2, 10, 3, 3, -8, 4, 3, 5, 0,
1821 2, 2, 10, -1, 12, 2,
1822 4, -2, 10, 5, 3, -8, 4, 3, 5, 0,
1823 4, 2, 10, -1, 13, 18, 2,-17, 3, 0,
1824 3, -2, 10, 1, 3, -1, 6, 0,
1825 3, -2, 10, 2, 3, -2, 4, 0,
1826 3, -2, 10, 1, 3, -1, 5, 0,
1827 2, 3, 10, -1, 13, 0,
1828 3, -2, 10, 3, 2, -4, 3, 0,
1829 3, -2, 10, 3, 3, -4, 4, 0,
1830 3, -2, 10, 1, 3, -2, 5, 0,
1831 3, 4, 10, 1, 12, -2, 13, 1,
1832 4, 2, 10, -1, 12, -2, 13, 2, 11, 0,
1833 3, -2, 10, 1, 2, -1, 3, 0,
1834 3, -2, 10, 2, 3, -3, 4, 0,
1835 3, 2, 10, 2, 13, -2, 11, 0,
1836 3, -2, 10, 2, 2, -3, 3, 0,
1837 2, 2, 12, -2, 13, 1,
1838 3, 2, 10, 2, 3, -4, 4, 0,
1839 3, 2, 10, 3, 2, -5, 3, 0,
1840 3, 1, 10, -1, 12, 1, 13, 1,
1841 3, -2, 13, 3, 2, -3, 3, 0,
1842 2, -2, 10, 1, 5, 0,
1843 3, 2, 10, 1, 3, -2, 4, 0,
1844 3, -2, 13, 2, 3, -2, 5, 0,
1845 3, 2, 10, -1, 11, 1, 14, 0,
1846 4, 4, 10, -2, 13, 2, 3, -3, 5, 0,
1847 3, -2, 10, 8, 2,-13, 3, 0,
1848 4, -2, 10, -1, 13, 18, 2,-16, 3, 1,
1849 4, -2, 10, 3, 2, -7, 3, 4, 4, 0,
1850 4, 2, 10, 4, 3, -8, 4, 3, 5, 1,
1851 1, 2, 10, 3,
1852 4, -2, 10, 4, 3, -8, 4, 3, 5, 1,
1853 4, 2, 10, 3, 2, -7, 3, 4, 4, 0,
1854 4, 2, 10, -1, 13, 18, 2,-16, 3, 1,
1855 3, 2, 10, 8, 2,-13, 3, 0,
1856 3, -2, 10, -1, 11, 1, 14, 0,
1857 4, 4, 10, -2, 13, 2, 3, -2, 5, 0,
1858 3, -2, 10, 1, 3, -2, 4, 0,
1859 2, 2, 10, 1, 5, 0,
1860 4, 4, 10, -2, 13, 3, 2, -3, 3, 0,
1861 3, 3, 10, 1, 12, -1, 13, 1,
1862 3, -2, 10, 3, 2, -5, 3, 0,
1863 3, -2, 10, 2, 3, -4, 4, 0,
1864 3, 4, 10, 2, 12, -2, 13, 0,
1865 3, 2, 10, 2, 2, -3, 3, 0,
1866 3, 2, 10, -2, 13, 2, 11, 0,
1867 3, 2, 10, 1, 2, -1, 3, 0,
1868 4, 2, 10, 1, 12, 2, 13, -2, 11, 0,
1869 2, 1, 12, -2, 13, 2,
1870 3, 2, 10, 1, 3, -2, 5, 0,
1871 3, -2, 13, 1, 3, -1, 5, 0,
1872 3, 2, 10, 3, 2, -4, 3, 0,
1873 2, 1, 10, 1, 13, 0,
1874 3, 2, 10, 1, 3, -1, 5, 0,
1875 3, 2, 10, 2, 3, -2, 4, 0,
1876 2, 2, 10, 1, 12, 2,
1877 2, 1, 12, -2, 11, 0,
1878 3, -2, 13, 1, 2, -1, 3, 0,
1879 3, 1, 10, -1, 13, 2, 11, 0,
1880 3, 2, 10, 2, 2, -2, 3, 0,
1881 3, 1, 10, 1, 12, -3, 13, 0,
1882 3, 2, 13, -1, 11, 1, 14, 0,
1883 3, 2, 10, 2, 3, -3, 5, 0,
1884 3, 2, 10, 6, 2, -8, 3, 0,
1885 3, -3, 13, 18, 2,-16, 3, 1,
1886 3, 2, 13, 2, 5, -5, 6, 0,
1887 4, 2, 13, 4, 3, -8, 4, 3, 5, 0,
1888 1, 2, 13, 0,
1889 4, -2, 13, 4, 3, -8, 4, 3, 5, 0,
1890 3, -2, 13, 2, 5, -5, 6, 0,
1891 3, 1, 13, 18, 2,-16, 3, 1,
1892 3, -2, 13, -1, 11, 1, 14, 0,
1893 3, 2, 10, 2, 3, -2, 5, 0,
1894 3, 2, 10, 3, 2, -3, 3, 0,
1895 3, 1, 10, 1, 12, 1, 13, 1,
1896 2, 2, 10, 2, 12, 1,
1897 2, 1, 11, 1, 14, 1,
1898 4, -1, 13, -2, 11, 18, 2,-16, 3, 0,
1899 1, 2, 11, 0,
1900 4, -1, 13, 2, 11, 18, 2,-16, 3, 0,
1901 2, -3, 11, 1, 14, 0,
1902 3, 2, 13, 1, 2, -1, 3, 0,
1903 3, 2, 10, 4, 2, -4, 3, 0,
1904 3, 2, 10, 1, 12, -4, 13, 0,
1905 2, 1, 10, -3, 13, 0,
1906 3, 2, 13, 1, 3, -1, 5, 0,
1907 2, 1, 12, 2, 13, 2,
1908 3, 1, 10, 2, 12, 1, 13, 0,
1909 3, 1, 10, -1, 13, -2, 11, 0,
1910 2, 1, 12, 2, 11, 1,
1911 3, 2, 10, 5, 2, -5, 3, 0,
1912 2, 2, 10, -4, 13, 0,
1913 3, 2, 10, 6, 2, -6, 3, 0,
1914 2, 2, 12, 2, 13, 0,
1915 3, 2, 10, -2, 13, -2, 11, 0,
1916 2, 2, 12, 2, 11, 0,
1917 2, 2, 10, -4, 11, 0,
1918 3, 2, 10, 7, 2, -7, 3, 0,
1919 3, 2, 10, -1, 12, -4, 13, 0,
1920 4, 2, 10, -1, 12, -2, 13, -2, 11, 0,
1921 3, 2, 10, 8, 2, -8, 3, 0,
1922 3, 2, 10, 9, 2, -9, 3, 0,
1923 3, 4, 10, -3, 12, -1, 13, 0,
1924 3, 6, 10, -1, 12, -3, 13, 0,
1925 3, 4, 10, -2, 12, -1, 13, 1,
1926 3, 5, 10, -1, 12, -2, 13, 0,
1927 2, 6, 10, -3, 13, 0,
1928 4, 4, 10, -1, 12, 1, 13, -2, 11, 0,
1929 3, 2, 10, -3, 12, 1, 13, 0,
1930 2, 3, 10, -2, 12, 0,
1931 3, 4, 10, -1, 12, -1, 13, 1,
1932 2, 5, 10, -2, 13, 0,
1933 3, 6, 10, 1, 12, -3, 13, 0,
1934 3, 4, 10, 1, 13, -2, 11, 0,
1935 3, 2, 10, -2, 12, 1, 13, 1,
1936 2, 3, 10, -1, 12, 0,
1937 4, -2, 10, -1, 13, 2, 3, -2, 5, 0,
1938 2, 4, 10, -1, 13, 0,
1939 4, 2, 10, -2, 12, -1, 13, 2, 11, 0,
1940 3, 4, 10, -3, 13, 2, 11, 0,
1941 4, -2, 10, -1, 13, 2, 2, -2, 3, 0,
1942 3, 2, 10, -1, 12, 1, 13, 2,
1943 4, -2, 10, -1, 13, 1, 3, -1, 5, 0,
1944 1, 3, 10, 0,
1945 3, 4, 10, 1, 12, -1, 13, 1,
1946 4, 2, 10, -1, 12, -1, 13, 2, 11, 1,
1947 4, -2, 10, -1, 13, 1, 2, -1, 3, 0,
1948 3, 2, 10, 3, 13, -2, 11, 0,
1949 2, 2, 12, -3, 13, 0,
1950 3, 1, 10, -1, 12, 2, 13, 0,
1951 4, 2, 10, 1, 13, -1, 11, 1, 14, 0,
1952 4, -2, 10, -2, 13, 18, 2,-16, 3, 0,
1953 5, 2, 10, 1, 13, 4, 3, -8, 4, 3, 5, 0,
1954 2, 2, 10, 1, 13, 1,
1955 5, -2, 10, -1, 13, 4, 3, -8, 4, 3, 5, 0,
1956 3, 2, 10, 18, 2,-16, 3, 0,
1957 4, -2, 10, -1, 13, -1, 11, 1, 14, 0,
1958 4, 4, 10, -1, 13, 2, 3, -2, 5, 0,
1959 4, 4, 10, -1, 13, 3, 2, -3, 3, 0,
1960 2, 3, 10, 1, 12, 1,
1961 3, 4, 10, 2, 12, -1, 13, 0,
1962 4, 2, 10, -1, 13, 1, 11, 1, 14, 0,
1963 3, 2, 10, -1, 13, 2, 11, 0,
1964 2, 1, 12, -3, 13, 1,
1965 2, 1, 10, 2, 13, 0,
1966 3, 2, 10, 1, 12, 1, 13, 1,
1967 3, 1, 12, -1, 13, -2, 11, 1,
1968 2, 1, 10, 2, 11, 0,
1969 4, 2, 10, 1, 12, -1, 13, 2, 11, 0,
1970 1, 3, 13, 0,
1971 4, 2, 10, 1, 13, 2, 3, -2, 5, 0,
1972 3, 1, 10, 1, 12, 2, 13, 0,
1973 3, 2, 10, 2, 12, 1, 13, 0,
1974 3, 1, 13, 1, 11, 1, 14, 0,
1975 2, 1, 13, 2, 11, 0,
1976 3, 1, 10, 1, 12, 2, 11, 0,
1977 4, 2, 10, 2, 12, -1, 13, 2, 11, 0,
1978 2, 1, 13, -4, 11, 0,
1979 2, 1, 10, -4, 13, 0,
1980 2, 1, 12, 3, 13, 1,
1981 3, 1, 12, 1, 13, 2, 11, 1,
1982 2, 2, 10, -5, 13, 0,
1983 3, 2, 10, -3, 13, -2, 11, 0,
1984 3, 2, 10, -1, 13, -4, 11, 0,
1985 3, 6, 10, -2, 12, -2, 13, 0,
1986 2, 4, 10, -3, 12, 0,
1987 3, 6, 10, -1, 12, -2, 13, 0,
1988 2, 4, 10, -2, 12, 1,
1989 2, 6, 10, -2, 13, 0,
1990 2, 4, 10, -1, 12, 1,
1991 2, 5, 10, -1, 13, 0,
1992 3, 6, 10, 1, 12, -2, 13, 0,
1993 4, 4, 10, -1, 12, -2, 13, 2, 11, 0,
1994 3, 4, 10, 2, 13, -2, 11, 0,
1995 3, 2, 10, -2, 12, 2, 13, 0,
1996 1, 4, 10, 0,
1997 3, 2, 10, -2, 12, 2, 11, 0,
1998 3, 4, 10, -2, 13, 2, 11, 0,
1999 3, 2, 10, -1, 12, 2, 13, 1,
2000 2, 3, 10, 1, 13, 0,
2001 2, 4, 10, 1, 12, 1,
2002 3, 2, 10, -1, 12, 2, 11, 1,
2003 3, 3, 10, -1, 13, 2, 11, 0,
2004 2, 2, 10, 2, 13, 0,
2005 3, 3, 10, 1, 12, 1, 13, 0,
2006 3, 2, 10, 1, 11, 1, 14, 0,
2007 2, 2, 10, 2, 11, 0,
2008 2, 1, 12, -4, 13, 0,
2009 2, 1, 10, 3, 13, 0,
2010 3, 2, 10, 1, 12, 2, 13, 1,
2011 3, 1, 12, -2, 13, -2, 11, 0,
2012 3, 1, 10, 1, 13, 2, 11, 0,
2013 3, 2, 10, 1, 12, 2, 11, 0,
2014 1, 4, 13, 0,
2015 3, 1, 10, 1, 12, 3, 13, 0,
2016 2, 2, 13, 2, 11, 0,
2017 4, 1, 10, 1, 12, 1, 13, 2, 11, 0,
2018 1, 4, 11, 0,
2019 2, 1, 12, 4, 13, 0,
2020 3, 1, 12, 2, 13, 2, 11, 0,
2021 3, 2, 10, -4, 13, -2, 11, 0,
2022 3, 6, 10, -2, 12, -1, 13, 0,
2023 2, 8, 10, -3, 13, 0,
2024 3, 6, 10, -1, 12, -1, 13, 0,
2025 3, 4, 10, -2, 12, 1, 13, 0,
2026 2, 6, 10, -1, 13, 0,
2027 3, 4, 10, -1, 12, 1, 13, 1,
2028 3, 6, 10, 1, 12, -1, 13, 0,
2029 4, 4, 10, -1, 12, -1, 13, 2, 11, 0,
2030 3, 2, 10, -2, 12, 3, 13, 0,
2031 2, 4, 10, 1, 13, 0,
2032 3, 4, 10, -1, 13, 2, 11, 0,
2033 3, 2, 10, -1, 12, 3, 13, 0,
2034 3, 4, 10, 1, 12, 1, 13, 0,
2035 4, 2, 10, -1, 12, 1, 13, 2, 11, 0,
2036 2, 2, 10, 3, 13, 0,
2037 3, 2, 10, 1, 13, 2, 11, 0,
2038 3, 2, 10, -1, 13, 4, 11, 0,
2039 3, 2, 10, 1, 12, 3, 13, 0,
2040 3, 1, 12, -3, 13, -2, 11, 0,
2041 3, 1, 10, 2, 13, 2, 11, 0,
2042 4, 2, 10, 1, 12, 1, 13, 2, 11, 0,
2043 1, 5, 13, 0,
2044 2, 3, 13, 2, 11, 0,
2045 2, 1, 13, 4, 11, 0,
2046 3, 1, 12, 3, 13, 2, 11, 0,
2047 2, 8, 10, -2, 13, 0,
2048 2, 6, 10, -1, 12, 0,
2049 1, 6, 10, 0,
2050 3, 6, 10, -2, 13, 2, 11, 0,
2051 3, 4, 10, -1, 12, 2, 13, 0,
2052 3, 4, 10, -1, 12, 2, 11, 0,
2053 2, 4, 10, 2, 13, 0,
2054 2, 4, 10, 2, 11, 0,
2055 3, 2, 10, -1, 12, 4, 13, 0,
2056 3, 4, 10, 1, 12, 2, 13, 0,
2057 4, 2, 10, -1, 12, 2, 13, 2, 11, 0,
2058 2, 2, 10, 4, 13, 0,
2059 3, 2, 10, 2, 13, 2, 11, 0,
2060 2, 2, 10, 4, 11, 0,
2061 1, 6, 13, 0,
2062 2, 4, 13, 2, 11, 0,
2063 2, 2, 13, 4, 11, 0,
2064 3, 6, 10, -1, 12, 1, 13, 0,
2065 2, 6, 10, 1, 13, 0,
2066 2, 4, 10, 3, 13, 0,
2067 3, 4, 10, 1, 13, 2, 11, 0,
2068 2, 2, 10, 5, 13, 0,
2069 3, 2, 10, 3, 13, 2, 11, 0,
2070 -1
2071};
2072
2073static long btabr[] = {-1};
2074static long btabb[] = {-1};
2075static long btabl[] = {
2076 -3, -4,
2077 4, -1856, 0, 8043,
2078 -9, -1082,
2079 -1, -310,
2080 -1, -522,
2081 -330, -1449, -853, 4656,
2082 -66, 7,
2083 -1, 9996928,
2084 -66, 6,
2085 23, 183,
2086 0, 173,
2087 0, -56,
2088 0, 50,
2089 0, -785,
2090 1, 51,
2091 0, -60,
2092 1, 11843, 0, -50754,
2093 0, 1834, 1, -7910,
2094 0, -48060,
2095 1, 56,
2096 0, 13141, -1, -56318,
2097 0, 2541,
2098 -1, -649,
2099 -133, 778,
2100 -46, 8,
2101 1, 1665737,
2102 -47, 7,
2103 0, 65,
2104 0, 45,
2105 0, -138,
2106 0, -1005,
2107 0, -2911,
2108 0, -47,
2109 0, 96,
2110 0, -394,
2111 2, 76,
2112 2, -17302, 0, 74337,
2113 0, -101,
2114 0, 58,
2115 0, -171,
2116 0, -77,
2117 0, -1283, 0, 2686,
2118 0, -55,
2119 0, 99,
2120 0, 55,
2121 0, 397,
2122 0, 540,
2123 0, 626,
2124 -1, -5188, 0, 10857,
2125 0, -216,
2126 -2, -123,
2127 0, 6337,
2128 2, 224,
2129 -152, -23472, -29, -74336, 0, 295775,
2130 -20, 149,
2131 -2, 84,
2132 9, 304,
2133 0, -3051,
2134 -70, -6,
2135 -57, 34,
2136 0, -638,
2137 0, -201,
2138 -73, 9,
2139 0, -100,
2140 -101, -8,
2141 0, -57,
2142 0, -207,
2143 -3, 80,
2144 -45, 45,
2145 -5, 102,
2146 -59, -23,
2147 52, 201,
2148 -48, 233, -220, 71,
2149 4, 2810, 0, 6236541,
2150 -61, 218, -216, 67,
2151 51, 201,
2152 -59, -23,
2153 -144, -837, -457, 3029,
2154 -45, 42,
2155 -15, 73,
2156 -6, -169,
2157 0, 135,
2158 -64, -7,
2159 0, -16245,
2160 0, -81,
2161 -74, -10,
2162 0, 702, 0, -3013,
2163 0, -5889,
2164 1, 141,
2165 58, 9598, 12, 30443, 1, -120946,
2166 -1, -84,
2167 -2, 11246, -1, -48391,
2168 0, 1393,
2169 0, 200,
2170 -136, -17,
2171 0, 558,
2172 -64, -8,
2173 0, -71,
2174 0, 317577,
2175 -28, 183,
2176 1, 219,
2177 0, 421,
2178 0, -133,
2179 501, -139,
2180 3, 354,
2181 -101, -13,
2182 74, 7,
2183 144, -84,
2184 59, -2,
2185 1, 64,
2186 -2931, 12559, -4641, 2638, -303, -2058,
2187 -13, -100, -123, -79,
2188 -19214, 6084, 1494, 26993, 15213, -82219,
2189 42, 52, 48, -101,
2190 -53, -4,
2191 4, 47,
2192 58, -131,
2193 46, 14,
2194 -21, -6,
2195 -1311, -8791, 10198, -4185, 2815, 5640,
2196 167, 422, -229, 83,
2197 3140, 39, 1221, 120, 96, -30,
2198 -1, 184612405,
2199 187, 416, -226, 81,
2200 -1985, -10083, 9983, -4464, 2807, 5643,
2201 -21, -9,
2202 113, -367,
2203 120, 580, -667, 27,
2204 8, 66,
2205 -56, -6,
2206 337, 95,
2207 -87, 3303,
2208 -1, 65,
2209 68, -374,
2210 0, -574,
2211 15, -94,
2212 0, -53,
2213 0, -1303,
2214 0, -236,
2215 283, 36,
2216 -1, -54,
2217 269, -35,
2218 0, -83,
2219 0, -52,
2220 0, 730, 0, -3129,
2221 0, 813,
2222 0, -4299,
2223 1, 59,
2224 -6, 5130, 1, 16239, -1, -64603,
2225 0, -80,
2226 91, 12,
2227 0, -561,
2228 133, -17,
2229 0, 250,
2230 -12, 71,
2231 0, 155664,
2232 82, -11,
2233 0, 106,
2234 0, -604,
2235 0, 21862,
2236 55, -7,
2237 0, -1514, 0, 6501,
2238 0, 906,
2239 0, -68,
2240 0, 241,
2241 0, 366,
2242 0, 70,
2243 0, -1382, 0, 5957,
2244 0, 113,
2245 0, -51,
2246 0, -55,
2247 0, 731,
2248 0, -264,
2249 0, 65788,
2250 1, -1504, 0, 3147,
2251 0, 217,
2252 0, -4105, 0, 17658,
2253 1, 69,
2254 0, -3518,
2255 0, -1767,
2256 -43, -7044, -10, -22304, 0, 88685,
2257 3, 91,
2258 0, -485,
2259 0, -57,
2260 -1, 333548,
2261 -24, 172,
2262 11, 544, 1, -1132,
2263 0, 353,
2264 0, -188,
2265 0, 53,
2266 0, 77,
2267 158, -887,
2268 35, 131,
2269 -54, 13,
2270 0, 1994821,
2271 -53, 14,
2272 36, 125,
2273 2, 56,
2274 0, -243,
2275 0, -364,
2276 -2, 1916, 0, -8227,
2277 0, 15700, -1, -67308,
2278 1, 66,
2279 0, -53686,
2280 1, 3058, 1, -13177,
2281 0, -72,
2282 0, -72,
2283 0, 61,
2284 0, 15812,
2285 0, 165,
2286 8, -96,
2287 318, 1341, 803, -4252,
2288 24, 193,
2289 1137, -226, 310, 622,
2290 -56, 30,
2291 -3, 10101666,
2292 -56, 30,
2293 1096, -225, 300, 600,
2294 -31, 409,
2295 -1, -507,
2296 0, -287,
2297 0, -1869, 0, 8026,
2298 1, 544, -1, -1133,
2299 0, 27984,
2300 0, -62,
2301 0, -249,
2302 0, 187,
2303 0, -1096,
2304 1, 53,
2305 2, 12388, 0, -53107,
2306 0, -322,
2307 0, -94,
2308 0, 15157,
2309 0, -582,
2310 0, 3291,
2311 0, 565,
2312 0, 106,
2313 0, 112,
2314 0, 306,
2315 0, 809,
2316 0, 130,
2317 0, -961, 0, 4149,
2318 0, 174,
2319 0, -105,
2320 0, 2196,
2321 0, 59,
2322 0, 36737,
2323 -1, -1832, 0, 3835,
2324 0, -139,
2325 0, 24138,
2326 0, 1325,
2327 1, 64,
2328 0, -361,
2329 0, -1162,
2330 -44, -6320, -10, -20003, 0, 79588,
2331 2, 80,
2332 0, -2059,
2333 0, -304,
2334 0, 21460,
2335 0, -166,
2336 0, -87,
2337 89, -493,
2338 32, 114,
2339 34, 510, 1, 1172616,
2340 31, 113,
2341 -1, 57,
2342 0, 214,
2343 0, -656,
2344 0, -646,
2345 0, 1850, 0, -7931,
2346 0, -6674,
2347 0, 2944, 0, -12641,
2348 0, 916,
2349 45, -255,
2350 16, 60,
2351 -1, 619116,
2352 16, 57,
2353 0, -58,
2354 0, 1045,
2355 0, -156,
2356 -15, 88,
2357 0, -62964,
2358 0, -126,
2359 0, 1490, 0, -6387,
2360 0, 119,
2361 0, 1338,
2362 0, -56,
2363 0, 204,
2364 0, 153,
2365 0, 940,
2366 0, 251,
2367 0, 312,
2368 0, 584,
2369 0, -786, 0, 3388,
2370 0, -52,
2371 0, 4733,
2372 0, 618,
2373 0, 29982,
2374 0, 101,
2375 0, -174,
2376 0, -2637, 0, 11345,
2377 0, -284,
2378 0, -524,
2379 0, -121,
2380 0, 1464,
2381 11, -60,
2382 -1, 151205,
2383 0, 139,
2384 0, -2448,
2385 0, -51,
2386 0, -768,
2387 0, -638,
2388 0, 552, 0, -2370,
2389 0, 70,
2390 0, 64,
2391 0, 57,
2392 0, 39840,
2393 0, 104,
2394 0, -10194,
2395 0, -635,
2396 0, 69,
2397 0, 113,
2398 0, 67,
2399 0, 96,
2400 0, 367,
2401 0, 134,
2402 0, 596,
2403 0, 63,
2404 0, 1622,
2405 0, 483,
2406 0, 72,
2407 0, 11917,
2408 0, -63,
2409 0, 1273,
2410 0, -66,
2411 0, -262,
2412 0, -97,
2413 0, 103,
2414 0, 15196,
2415 0, -1445,
2416 0, -66,
2417 0, -55,
2418 0, -323,
2419 0, 2632,
2420 0, -1179,
2421 0, 59,
2422 0, -56,
2423 0, 78,
2424 0, 65,
2425 0, 422,
2426 0, 309,
2427 0, 2125,
2428 0, -66,
2429 0, 124,
2430 0, -57,
2431 0, 1379,
2432 0, -304,
2433 0, 177,
2434 0, -118,
2435 0, 146,
2436 0, 283,
2437 0, 119,
2438};
2439static CHAR bargs[] = {
2440 0, 1,
2441 3, 1, 10, 1, 12, -1, 11, 1,
2442 4, 2, 10, 2, 12, -1, 13, -1, 11, 0,
2443 5, 2, 10, -1, 13, -1, 11, 3, 2, -3, 3, 0,
2444 5, 2, 10, -1, 13, -1, 11, 2, 3, -2, 5, 0,
2445 2, -1, 13, 1, 14, 1,
2446 5, -1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0,
2447 2, 1, 13, -1, 11, 0,
2448 5, 1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0,
2449 5, 2, 10, -1, 13, -1, 11, 2, 3, -3, 5, 0,
2450 4, 1, 10, 1, 12, -2, 13, 1, 11, 0,
2451 4, 1, 13, -1, 11, 1, 2, -1, 3, 0,
2452 5, 2, 10, -1, 13, -1, 11, 2, 2, -2, 3, 0,
2453 3, 1, 10, -2, 13, 1, 11, 0,
2454 4, 1, 13, -1, 11, 1, 3, -1, 5, 0,
2455 4, -1, 13, 1, 11, 1, 2, -1, 3, 0,
2456 3, 1, 12, 1, 13, -1, 11, 1,
2457 4, 2, 10, 1, 12, -1, 13, -1, 11, 1,
2458 2, 1, 10, -1, 11, 0,
2459 4, -1, 13, 1, 11, 1, 3, -1, 5, 0,
2460 3, 1, 12, -1, 13, 1, 11, 1,
2461 3, 2, 10, -3, 13, 1, 11, 0,
2462 3, 2, 12, 1, 13, -1, 11, 0,
2463 3, -2, 10, 1, 13, 1, 14, 0,
2464 6, -2, 10, 1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0,
2465 3, 2, 10, -1, 13, -1, 11, 0,
2466 6, 2, 10, -1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0,
2467 4, -1, 13, 1, 11, 2, 3, -2, 5, 0,
2468 4, -1, 13, 1, 11, 3, 2, -3, 3, 0,
2469 3, 1, 10, -1, 12, -1, 11, 0,
2470 3, 2, 12, -1, 13, 1, 11, 0,
2471 3, 2, 10, 1, 13, -3, 11, 0,
2472 5, -2, 10, 1, 13, 1, 11, 1, 2, -1, 3, 0,
2473 4, 2, 10, -1, 12, -3, 13, 1, 11, 0,
2474 3, 3, 10, -2, 13, -1, 11, 0,
2475 5, -2, 10, 1, 13, 1, 11, 1, 3, -1, 5, 0,
2476 4, 2, 10, -1, 12, -1, 13, -1, 11, 1,
2477 2, 3, 10, -3, 11, 0,
2478 5, -2, 10, 1, 13, 1, 11, 2, 2, -2, 3, 0,
2479 4, 2, 10, -1, 12, 1, 13, -3, 11, 0,
2480 3, 4, 10, -3, 13, -1, 11, 0,
2481 4, 2, 10, -2, 12, -1, 13, -1, 11, 1,
2482 3, 4, 10, -1, 13, -3, 11, 0,
2483 4, 2, 10, -3, 12, -1, 13, -1, 11, 0,
2484 3, 4, 10, -1, 12, -3, 11, 0,
2485 3, 2, 10, -3, 12, -1, 11, 0,
2486 4, 4, 10, -1, 12, -2, 13, -1, 11, 0,
2487 2, 4, 10, -3, 11, 0,
2488 3, 2, 10, -2, 12, -1, 11, 1,
2489 4, 3, 10, -1, 12, -1, 13, -1, 11, 0,
2490 4, -2, 10, 1, 11, 2, 3, -2, 5, 0,
2491 3, 4, 10, -2, 13, -1, 11, 0,
2492 4, -2, 10, 1, 11, 2, 2, -2, 3, 0,
2493 3, 2, 10, -1, 12, -1, 11, 2,
2494 3, -2, 10, 1, 12, 1, 14, 0,
2495 4, -2, 10, 1, 11, 2, 3, -2, 4, 0,
2496 4, -2, 10, 1, 11, 1, 3, -1, 5, 0,
2497 3, 3, 10, -1, 13, -1, 11, 0,
2498 4, -2, 10, 1, 11, 3, 2, -4, 3, 0,
2499 4, -2, 10, 1, 11, 1, 3, -2, 5, 0,
2500 4, 2, 10, -1, 12, -2, 13, 1, 11, 0,
2501 4, -2, 10, 1, 11, 1, 2, -1, 3, 0,
2502 2, -1, 10, 1, 2, 0,
2503 3, 2, 10, 2, 13, -3, 11, 0,
2504 4, -2, 10, 1, 11, 2, 2, -3, 3, 0,
2505 3, 2, 12, -2, 13, 1, 11, 0,
2506 4, 1, 10, -1, 12, 1, 13, -1, 11, 0,
2507 3, -2, 10, 1, 11, 1, 5, 0,
2508 4, 2, 10, -1, 11, 1, 3, -2, 4, 0,
2509 3, 2, 10, -2, 11, 1, 14, 0,
2510 4, -2, 10, 1, 11, 8, 2,-13, 3, 0,
2511 5, -2, 10, -1, 13, 1, 11, 18, 2,-16, 3, 0,
2512 5, 2, 10, -1, 11, 4, 3, -8, 4, 3, 5, 1,
2513 2, 2, 10, -1, 11, 1,
2514 5, -2, 10, 1, 11, 4, 3, -8, 4, 3, 5, 1,
2515 5, 2, 10, -1, 13, -1, 11, 18, 2,-16, 3, 0,
2516 4, 2, 10, -1, 11, 8, 2,-13, 3, 0,
2517 2, -2, 10, 1, 14, 1,
2518 4, -2, 10, 1, 11, 1, 3, -2, 4, 0,
2519 3, 2, 10, -1, 11, 1, 5, 0,
2520 2, 2, 12, -1, 11, 0,
2521 4, 3, 10, 1, 12, -1, 13, -1, 11, 0,
2522 4, 2, 10, -1, 11, 2, 2, -3, 3, 0,
2523 3, 2, 10, -2, 13, 1, 11, 0,
2524 4, 2, 10, -1, 11, 1, 2, -1, 3, 0,
2525 3, 1, 10, 1, 2, -2, 3, 0,
2526 3, 1, 12, -2, 13, 1, 11, 1,
2527 3, 1, 10, 1, 13, -1, 11, 0,
2528 4, 2, 10, -1, 11, 1, 3, -1, 5, 0,
2529 3, 2, 10, 1, 12, -1, 11, 2,
2530 3, -2, 10, -1, 12, 1, 14, 0,
2531 2, 1, 12, -1, 11, 1,
2532 3, 1, 10, -1, 13, 1, 11, 0,
2533 4, 2, 10, -1, 11, 2, 2, -2, 3, 0,
2534 3, 1, 10, 2, 2, -3, 3, 0,
2535 4, 2, 10, 1, 12, -2, 13, 1, 11, 0,
2536 3, -1, 10, 1, 2, -2, 3, 0,
2537 3, -1, 11, 1, 2, -1, 3, 0,
2538 2, 2, 13, -1, 11, 0,
2539 2, -2, 13, 1, 14, 0,
2540 4, 2, 10, -1, 11, 2, 3, -2, 5, 0,
2541 4, 2, 10, -1, 11, 3, 2, -3, 3, 0,
2542 4, 2, 10, 2, 12, -2, 13, -1, 11, 0,
2543 3, 1, 10, 1, 3, -2, 5, 0,
2544 4, 1, 10, 1, 12, 1, 13, -1, 11, 0,
2545 3, 1, 10, 3, 2, -4, 3, 0,
2546 3, 1, 10, 1, 3, -1, 5, 0,
2547 3, 1, 10, 1, 3, -2, 6, 0,
2548 3, 1, 10, 2, 3, -2, 4, 0,
2549 4, 1, 10, 1, 12, -1, 13, -1, 11, 0,
2550 3, 2, 10, 2, 12, -1, 11, 2,
2551 4, 1, 10, 1, 3, 2, 5, -5, 6, 1,
2552 1, 1, 14, 2,
2553 3, 1, 10, 8, 2,-12, 3, 1,
2554 5, -2, 10, 1, 13, -1, 11, 20, 2,-21, 3, 0,
2555 5, 2, 10, -2, 13, 1, 11, 2, 3, -3, 5, 0,
2556 3, 1, 10, 1, 3, 1, 6, 0,
2557 4, -1, 13, -1, 11, 26, 2,-29, 3, 0,
2558 3, -1, 11, 8, 2,-13, 3, 0,
2559 4, -1, 13, -1, 11, 18, 2,-16, 3, 2,
2560 4, -1, 13, 1, 11, 10, 2, -3, 3, 1,
2561 1, 1, 11, 3,
2562 4, -1, 13, -1, 11, 10, 2, -3, 3, 1,
2563 4, -1, 13, 1, 11, 18, 2,-16, 3, 2,
2564 3, 1, 11, 8, 2,-13, 3, 0,
2565 2, 1, 10, 2, 4, 0,
2566 4, 2, 10, -1, 11, 5, 2, -6, 3, 1,
2567 5, 2, 10, -2, 13, -1, 11, 2, 3, -3, 5, 0,
2568 5, -2, 10, 1, 13, 1, 11, 20, 2,-21, 3, 0,
2569 3, 1, 10, 1, 3, 1, 5, 0,
2570 2, -2, 11, 1, 14, 0,
2571 5, 2, 10, -2, 13, 1, 11, 2, 3, -2, 5, 0,
2572 3, 1, 10, 5, 2, -7, 3, 0,
2573 4, 1, 10, 1, 12, -1, 13, 1, 11, 0,
2574 3, 1, 10, 2, 2, -2, 3, 0,
2575 4, 2, 10, 2, 12, -2, 13, 1, 11, 0,
2576 2, 2, 13, -3, 11, 0,
2577 4, 2, 10, -1, 11, 4, 2, -4, 3, 0,
2578 3, 1, 10, 4, 2, -5, 3, 0,
2579 3, 1, 10, -3, 13, 1, 11, 0,
2580 2, 1, 10, 1, 2, 0,
2581 3, 1, 11, 1, 2, -1, 3, 0,
2582 4, 2, 10, -1, 11, 3, 3, -3, 5, 0,
2583 3, 1, 12, 2, 13, -1, 11, 1,
2584 4, 2, 10, 1, 12, -2, 13, -1, 11, 0,
2585 3, 1, 10, -1, 13, -1, 11, 0,
2586 3, 1, 11, 1, 3, -1, 5, 0,
2587 2, 1, 12, 1, 11, 2,
2588 4, 2, 10, -1, 11, 5, 2, -5, 3, 0,
2589 3, 1, 10, 5, 2, -6, 3, 0,
2590 3, 2, 10, 1, 12, -3, 11, 0,
2591 3, 1, 10, 2, 2, -1, 3, 0,
2592 3, 2, 10, -4, 13, 1, 11, 0,
2593 3, -2, 10, 2, 13, 1, 14, 0,
2594 3, 2, 10, -2, 13, -1, 11, 0,
2595 3, 1, 10, 3, 2, -2, 3, 0,
2596 4, 1, 10, -1, 12, -1, 13, -1, 11, 0,
2597 2, 2, 12, 1, 11, 0,
2598 2, 2, 10, -3, 11, 0,
2599 3, 1, 10, 4, 2, -3, 3, 0,
2600 4, 2, 10, -1, 12, -2, 13, -1, 11, 1,
2601 3, 2, 10, -1, 12, -3, 11, 0,
2602 3, 4, 10, -4, 13, -1, 11, 0,
2603 4, 2, 10, -2, 12, -2, 13, -1, 11, 0,
2604 4, 4, 10, -2, 12, -1, 13, -1, 11, 0,
2605 3, 6, 10, -3, 13, -1, 11, 0,
2606 4, 4, 10, -1, 12, -1, 13, -1, 11, 1,
2607 4, 2, 10, -3, 12, -1, 13, 1, 11, 0,
2608 3, 5, 10, -2, 13, -1, 11, 0,
2609 3, 4, 10, 1, 13, -3, 11, 0,
2610 4, 2, 10, -2, 12, 1, 13, -1, 11, 0,
2611 3, 3, 10, -1, 12, -1, 11, 0,
2612 3, 4, 10, -1, 13, -1, 11, 0,
2613 4, 2, 10, -2, 12, -1, 13, 1, 11, 1,
2614 3, 4, 10, -3, 13, 1, 11, 0,
2615 4, 2, 10, -1, 12, 1, 13, -1, 11, 1,
2616 5, -2, 10, 1, 13, -1, 11, 2, 2, -2, 3, 0,
2617 2, 3, 10, -1, 11, 0,
2618 4, 4, 10, 1, 12, -1, 13, -1, 11, 0,
2619 4, 2, 10, -1, 12, -1, 13, 1, 11, 2,
2620 5, -2, 10, 1, 13, -1, 11, 1, 3, -1, 5, 0,
2621 3, 3, 10, -2, 13, 1, 11, 0,
2622 5, -2, 10, 1, 13, -1, 11, 1, 2, -1, 3, 0,
2623 3, 2, 10, 1, 13, -1, 11, 0,
2624 3, -2, 10, -1, 13, 1, 14, 0,
2625 3, 2, 12, -1, 13, -1, 11, 1,
2626 3, 3, 10, 1, 12, -1, 11, 0,
2627 3, 1, 10, -1, 12, 1, 11, 0,
2628 4, -1, 13, -1, 11, 3, 2, -3, 3, 0,
2629 4, -1, 13, -1, 11, 2, 3, -2, 5, 0,
2630 3, 2, 10, -1, 13, 1, 14, 0,
2631 4, -2, 10, -1, 11, 18, 2,-16, 3, 0,
2632 6, 2, 10, -1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0,
2633 3, 2, 10, -1, 13, 1, 11, 0,
2634 6, -2, 10, 1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0,
2635 5, 2, 10, -2, 13, 1, 11, 18, 2,-16, 3, 0,
2636 4, -2, 10, 1, 13, -2, 11, 1, 14, 0,
2637 3, 1, 12, -3, 13, 1, 11, 0,
2638 3, 1, 10, 2, 13, -1, 11, 0,
2639 4, 2, 10, 1, 12, 1, 13, -1, 11, 1,
2640 3, 1, 12, -1, 13, -1, 11, 1,
2641 4, -1, 13, -1, 11, 1, 3, -1, 5, 0,
2642 2, 1, 10, 1, 11, 0,
2643 4, 2, 10, 1, 12, -1, 13, 1, 11, 1,
2644 3, 1, 12, 1, 13, -3, 11, 0,
2645 4, -1, 13, -1, 11, 1, 2, -1, 3, 0,
2646 5, 2, 10, -1, 13, 1, 11, 2, 2, -2, 3, 0,
2647 2, 3, 13, -1, 11, 0,
2648 4, 1, 10, 1, 12, -2, 13, -1, 11, 0,
2649 4, 2, 10, 2, 12, 1, 13, -1, 11, 0,
2650 2, 1, 13, 1, 14, 1,
2651 5, 2, 10, -1, 13, 1, 11, 2, 3, -3, 5, 0,
2652 4, -2, 13, -1, 11, 18, 2,-16, 3, 1,
2653 5, 1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0,
2654 2, 1, 13, 1, 11, 0,
2655 5, -1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0,
2656 3, 1, 11, 18, 2,-16, 3, 1,
2657 3, -1, 13, -2, 11, 1, 14, 0,
2658 5, 2, 10, -1, 13, 1, 11, 2, 3, -2, 5, 0,
2659 5, 2, 10, -1, 13, 1, 11, 3, 2, -3, 3, 0,
2660 3, 1, 10, 1, 12, 1, 11, 1,
2661 4, 2, 10, 2, 12, -1, 13, 1, 11, 1,
2662 2, 1, 13, -3, 11, 0,
2663 4, 1, 13, 1, 11, 1, 2, -1, 3, 0,
2664 3, 1, 12, 3, 13, -1, 11, 0,
2665 4, 2, 10, 1, 12, -3, 13, -1, 11, 0,
2666 3, 1, 10, -2, 13, -1, 11, 0,
2667 4, 1, 13, 1, 11, 1, 3, -1, 5, 0,
2668 3, 1, 12, 1, 13, 1, 11, 1,
2669 2, 1, 10, -3, 11, 0,
2670 3, 1, 12, -1, 13, 3, 11, 0,
2671 3, 2, 10, -3, 13, -1, 11, 0,
2672 3, 2, 12, 1, 13, 1, 11, 0,
2673 3, 2, 10, -1, 13, -3, 11, 0,
2674 4, 2, 10, -1, 12, -3, 13, -1, 11, 0,
2675 4, 2, 10, -1, 12, -1, 13, -3, 11, 0,
2676 4, 6, 10, -1, 12, -2, 13, -1, 11, 0,
2677 3, 4, 10, -2, 12, -1, 11, 0,
2678 3, 6, 10, -2, 13, -1, 11, 0,
2679 4, 4, 10, -2, 12, -2, 13, 1, 11, 0,
2680 3, 4, 10, -1, 12, -1, 11, 1,
2681 3, 2, 10, -3, 12, 1, 11, 0,
2682 3, 5, 10, -1, 13, -1, 11, 0,
2683 4, 4, 10, -1, 12, -2, 13, 1, 11, 0,
2684 4, 2, 10, -2, 12, 2, 13, -1, 11, 0,
2685 2, 4, 10, -1, 11, 0,
2686 3, 2, 10, -2, 12, 1, 11, 1,
2687 4, 3, 10, -1, 12, -1, 13, 1, 11, 0,
2688 3, 4, 10, -2, 13, 1, 11, 0,
2689 4, 2, 10, -1, 12, 2, 13, -1, 11, 0,
2690 4, -2, 10, -1, 11, 2, 2, -2, 3, 0,
2691 3, 3, 10, 1, 13, -1, 11, 0,
2692 3, 4, 10, 1, 12, -1, 11, 0,
2693 3, 2, 10, -1, 12, 1, 11, 2,
2694 4, -2, 10, -1, 11, 1, 3, -1, 5, 0,
2695 3, 3, 10, -1, 13, 1, 11, 0,
2696 4, 4, 10, 1, 12, -2, 13, 1, 11, 0,
2697 3, 2, 10, 2, 13, -1, 11, 0,
2698 3, 2, 12, -2, 13, -1, 11, 0,
2699 4, 1, 10, -1, 12, 1, 13, 1, 11, 0,
2700 2, 2, 10, 1, 14, 0,
2701 5, -2, 10, -1, 13, -1, 11, 18, 2,-16, 3, 0,
2702 2, 2, 10, 1, 11, 1,
2703 5, 2, 10, -1, 13, 1, 11, 18, 2,-16, 3, 0,
2704 3, -2, 10, -2, 11, 1, 14, 0,
2705 4, 3, 10, 1, 12, -1, 13, 1, 11, 0,
2706 3, 2, 10, -2, 13, 3, 11, 0,
2707 4, 2, 10, 1, 12, 2, 13, -1, 11, 0,
2708 3, 1, 12, -2, 13, -1, 11, 1,
2709 3, 1, 10, 1, 13, 1, 11, 0,
2710 3, 2, 10, 1, 12, 1, 11, 1,
2711 2, 4, 13, -1, 11, 0,
2712 2, 2, 13, 1, 14, 0,
2713 4, -3, 13, -1, 11, 18, 2,-16, 3, 0,
2714 2, 2, 13, 1, 11, 0,
2715 4, 1, 13, 1, 11, 18, 2,-16, 3, 0,
2716 4, 2, 10, 1, 11, 2, 3, -2, 5, 0,
2717 4, 1, 10, 1, 12, 1, 13, 1, 11, 0,
2718 3, 2, 10, 2, 12, 1, 11, 0,
2719 2, 2, 11, 1, 14, 0,
2720 1, 3, 11, 0,
2721 3, 1, 10, -3, 13, -1, 11, 0,
2722 3, 1, 12, 2, 13, 1, 11, 1,
2723 2, 1, 12, 3, 11, 0,
2724 3, 2, 10, -4, 13, -1, 11, 0,
2725 3, 2, 12, 2, 13, 1, 11, 0,
2726 3, 2, 10, -2, 13, -3, 11, 0,
2727 4, 6, 10, -1, 12, -1, 13, -1, 11, 0,
2728 3, 6, 10, -1, 13, -1, 11, 0,
2729 4, 4, 10, -2, 12, -1, 13, 1, 11, 0,
2730 3, 6, 10, -3, 13, 1, 11, 0,
2731 4, 4, 10, -1, 12, 1, 13, -1, 11, 0,
2732 4, 4, 10, -1, 12, -1, 13, 1, 11, 1,
2733 3, 5, 10, -2, 13, 1, 11, 0,
2734 3, 4, 10, 1, 13, -1, 11, 0,
2735 4, 2, 10, -2, 12, 1, 13, 1, 11, 0,
2736 3, 4, 10, -1, 13, 1, 11, 0,
2737 4, 2, 10, -1, 12, 3, 13, -1, 11, 0,
2738 4, 4, 10, 1, 12, 1, 13, -1, 11, 0,
2739 4, 2, 10, -1, 12, 1, 13, 1, 11, 1,
2740 2, 3, 10, 1, 11, 0,
2741 4, 4, 10, 1, 12, -1, 13, 1, 11, 0,
2742 4, 2, 10, -1, 12, -1, 13, 3, 11, 0,
2743 3, 2, 10, 3, 13, -1, 11, 0,
2744 3, 2, 10, 1, 13, 1, 14, 0,
2745 3, 2, 10, 1, 13, 1, 11, 0,
2746 3, 3, 10, 1, 12, 1, 11, 0,
2747 3, 2, 10, -1, 13, 3, 11, 0,
2748 4, 2, 10, 1, 12, 3, 13, -1, 11, 0,
2749 3, 1, 12, -3, 13, -1, 11, 0,
2750 3, 1, 10, 2, 13, 1, 11, 0,
2751 4, 2, 10, 1, 12, 1, 13, 1, 11, 1,
2752 3, 1, 12, -1, 13, -3, 11, 0,
2753 2, 1, 10, 3, 11, 0,
2754 2, 5, 13, -1, 11, 0,
2755 2, 3, 13, 1, 11, 0,
2756 4, 1, 10, 1, 12, 2, 13, 1, 11, 0,
2757 2, 1, 13, 3, 11, 0,
2758 3, 1, 12, 3, 13, 1, 11, 0,
2759 3, 1, 12, 1, 13, 3, 11, 0,
2760 3, 2, 10, -5, 13, -1, 11, 0,
2761 3, 6, 10, -1, 12, -1, 11, 0,
2762 4, 6, 10, -1, 12, -2, 13, 1, 11, 0,
2763 2, 6, 10, -1, 11, 0,
2764 3, 4, 10, -2, 12, 1, 11, 0,
2765 3, 6, 10, -2, 13, 1, 11, 0,
2766 4, 4, 10, -1, 12, 2, 13, -1, 11, 0,
2767 3, 4, 10, -1, 12, 1, 11, 0,
2768 3, 4, 10, 2, 13, -1, 11, 0,
2769 4, 2, 10, -2, 12, 2, 13, 1, 11, 0,
2770 2, 4, 10, 1, 11, 0,
2771 3, 4, 10, -2, 13, 3, 11, 0,
2772 4, 2, 10, -1, 12, 2, 13, 1, 11, 0,
2773 3, 3, 10, 1, 13, 1, 11, 0,
2774 3, 4, 10, 1, 12, 1, 11, 0,
2775 3, 2, 10, -1, 12, 3, 11, 0,
2776 3, 2, 10, 4, 13, -1, 11, 0,
2777 3, 2, 10, 2, 13, 1, 11, 0,
2778 2, 2, 10, 3, 11, 0,
2779 3, 1, 12, -4, 13, -1, 11, 0,
2780 3, 1, 10, 3, 13, 1, 11, 0,
2781 4, 2, 10, 1, 12, 2, 13, 1, 11, 0,
2782 2, 4, 13, 1, 11, 0,
2783 2, 2, 13, 3, 11, 0,
2784 1, 5, 11, 0,
2785 3, 1, 12, 4, 13, 1, 11, 0,
2786 4, 6, 10, -1, 12, -1, 13, 1, 11, 0,
2787 3, 6, 10, 1, 13, -1, 11, 0,
2788 3, 6, 10, -1, 13, 1, 11, 0,
2789 4, 4, 10, -1, 12, 1, 13, 1, 11, 0,
2790 3, 4, 10, 1, 13, 1, 11, 0,
2791 3, 4, 10, -1, 13, 3, 11, 0,
2792 4, 2, 10, -1, 12, 3, 13, 1, 11, 0,
2793 4, 4, 10, 1, 12, 1, 13, 1, 11, 0,
2794 3, 2, 10, 3, 13, 1, 11, 0,
2795 3, 2, 10, 1, 13, 3, 11, 0,
2796 2, 5, 13, 1, 11, 0,
2797 2, 3, 13, 3, 11, 0,
2798 2, 6, 10, 1, 11, 0,
2799 3, 4, 10, 2, 13, 1, 11, 0,
2800 3, 2, 10, 4, 13, 1, 11, 0,
2801 -1
2802};
2803struct plantbl moonlr = {
2804 { 3, 26, 29, 23, 5, 10, 0, 0, 0, 8, 4, 4, 6, 2, 0, 0, 0, 0,},
2805 3,
2806 lrargs,
2807 lrtabl,
2808 lrtabb,
2809 lrtabr,
2810 2.5735686895300000e-03,
2811 3.6525000000000000e+06,
2812 1.0000000000000000e-04,
2813};
2814
2815struct plantbl moonlat = {
2816 { 0, 26, 29, 8, 3, 5, 0, 0, 0, 6, 5, 3, 5, 1, 0, 0, 0, 0,},
2817 3,
2818 bargs,
2819 btabl,
2820 btabb,
2821 btabr,
2822 0.0000000000000000e+00,
2823 3.6525000000000000e+06,
2824 1.0000000000000000e-04,
2825};
2826
2827
2828/* Reduce arc seconds modulo 360 degrees
2829 answer in arc seconds */
2830static double
2831mods3600(double x)
2832{
2833 double y;
2834#if !defined(__STDC__)
2835 double floor();
2836#endif
2837
2838 y = x - 1296000. * floor( x/1296000.);
2839 return(y);
2840}
2841
2842
2843/* Time argument is Julian ephemeris date. */
2844
2845static void
2846mean_elements (double JED)
2847{
2848 double x, T, T2;
2849
2850 /* Time variables. T is in Julian centuries. */
2851 T = (JED - MOSHIER_J2000) / 36525.0;
2852 T2 = T*T;
2853
2854 /* Mean longitudes of planets (Simon et al, 1994)
2855 .047" subtracted from constant term for offset to DE403 origin. */
2856
2857 /* Mercury */
2858 x = mods3600( 538101628.6889819 * T + 908103.213 );
2859 x += (6.39e-6 * T
2860 - 0.0192789) * T2;
2861 Args[0] = x;
2862
2863 /* Venus */
2864 x = mods3600( 210664136.4335482 * T + 655127.236 );
2865 x += (-6.27e-6 * T
2866 + 0.0059381) * T2;
2867 Args[1] = x;
2868
2869 /* Earth */
2870 x = mods3600( 129597742.283429 * T + 361679.198 );
2871 x += (-5.23e-6 * T
2872 - 2.04411e-2 ) * T2;
2873 Ea_arcsec = x;
2874 Args[2] = x;
2875
2876 /* Mars */
2877 x = mods3600( 68905077.493988 * T + 1279558.751 );
2878 x += (-1.043e-5 * T
2879 + 0.0094264) * T2;
2880 Args[3] = x;
2881
2882 /* Jupiter */
2883 x = mods3600( 10925660.377991 * T + 123665.420 );
2884 x += ((((-3.4e-10 * T
2885 + 5.91e-8) * T
2886 + 4.667e-6) * T
2887 + 5.706e-5) * T
2888 - 3.060378e-1)*T2;
2889 Args[4] = x;
2890
2891 /* Saturn */
2892 x = mods3600( 4399609.855372 * T + 180278.752 );
2893 x += (((( 8.3e-10 * T
2894 - 1.452e-7) * T
2895 - 1.1484e-5) * T
2896 - 1.6618e-4) * T
2897 + 7.561614E-1)*T2;
2898 Args[5] = x;
2899
2900 /* Uranus */
2901 x = mods3600( 1542481.193933 * T + 1130597.971 )
2902 + (0.00002156*T - 0.0175083)*T2;
2903 Args[6] = x;
2904
2905 /* Neptune */
2906 x = mods3600( 786550.320744 * T + 1095655.149 )
2907 + (-0.00000895*T + 0.0021103)*T2;
2908 Args[7] = x;
2909
2910 /* Copied from cmoon.c, DE404 version. */
2911 /* Mean elongation of moon = D */
2912 x = mods3600( 1.6029616009939659e+09 * T + 1.0722612202445078e+06 );
2913 x += (((((-3.207663637426e-013 * T
2914 + 2.555243317839e-011) * T
2915 + 2.560078201452e-009) * T
2916 - 3.702060118571e-005) * T
2917 + 6.9492746836058421e-03) * T /* D, t^3 */
2918 - 6.7352202374457519e+00) * T2; /* D, t^2 */
2919 Args[9] = x;
2920
2921 /* Mean distance of moon from its ascending node = F */
2922 x = mods3600( 1.7395272628437717e+09 * T + 3.3577951412884740e+05 );
2923 x += ((((( 4.474984866301e-013 * T
2924 + 4.189032191814e-011) * T
2925 - 2.790392351314e-009) * T
2926 - 2.165750777942e-006) * T
2927 - 7.5311878482337989e-04) * T /* F, t^3 */
2928 - 1.3117809789650071e+01) * T2; /* F, t^2 */
2929 Args[10] = x;
2930
2931/* Mean anomaly of sun = l' (J. Laskar) */
2932 x = mods3600(1.2959658102304320e+08 * T + 1.2871027407441526e+06);
2933 x += ((((((((
2934 1.62e-20 * T
2935 - 1.0390e-17 ) * T
2936 - 3.83508e-15 ) * T
2937 + 4.237343e-13 ) * T
2938 + 8.8555011e-11 ) * T
2939 - 4.77258489e-8 ) * T
2940 - 1.1297037031e-5 ) * T
2941 + 8.7473717367324703e-05) * T
2942 - 5.5281306421783094e-01) * T2;
2943 Args[11] = x;
2944
2945 /* Mean anomaly of moon = l */
2946 x = mods3600( 1.7179159228846793e+09 * T + 4.8586817465825332e+05 );
2947 x += (((((-1.755312760154e-012) * T
2948 + 3.452144225877e-011 * T
2949 - 2.506365935364e-008) * T
2950 - 2.536291235258e-004) * T
2951 + 5.2099641302735818e-02) * T /* l, t^3 */
2952 + 3.1501359071894147e+01) * T2; /* l, t^2 */
2953 Args[12] = x;
2954
2955 /* Mean longitude of moon, re mean ecliptic and equinox of date = L */
2956 x = mods3600( 1.7325643720442266e+09 * T + 7.8593980921052420e+05);
2957 x += ((((( 7.200592540556e-014 * T
2958 + 2.235210987108e-010) * T
2959 - 1.024222633731e-008) * T
2960 - 6.073960534117e-005) * T
2961 + 6.9017248528380490e-03) * T /* L, t^3 */
2962 - 5.6550460027471399e+00) * T2; /* L, t^2 */
2963 LP_equinox = x;
2964 Args[13] = x;
2965
2966 /* Precession of the equinox */
2967 x = ((((((((( -8.66e-20*T - 4.759e-17)*T
2968 + 2.424e-15)*T
2969 + 1.3095e-12)*T
2970 + 1.7451e-10)*T
2971 - 1.8055e-8)*T
2972 - 0.0000235316)*T
2973 + 0.000076)*T
2974 + 1.105414)*T
2975 + 5028.791959)*T;
2976 /* Moon's longitude re fixed J2000 equinox. */
2977 /*
2978 Args[13] -= x;
2979 */
2980 pA_precession = x;
2981
2982 /* OM = LP - NF; */
2983
2984 /* Free librations. */
2985 /* LB 2.891725 years, psi amplitude 1.8" */
2986 Args[14] = mods3600( 4.48175409e7 * T + 8.060457e5 );
2987
2988 /* 24.2 years */
2989 Args[15] = mods3600( 5.36486787e6 * T - 391702.8 );
2990
2991#if 0
2992 /* 27.34907 days */
2993 Args[16] = mods3600( 1.7308227257e9 * T - 4.443583e5 );
2994#endif
2995 /* LA 74.7 years. */
2996Args[17] = mods3600( 1.73573e6 * T );
2997}
2998
2999
3000/* Prepare lookup table of sin and cos ( i*Lj )
3001 * for required multiple angles
3002 */
3003static int
3004sscc (int k, double arg, int n)
3005{
3006 double cu, su, cv, sv, s;
3007 int i;
3008
3009 s = STR * arg;
3010 su = sin (s);
3011 cu = cos (s);
3012 ss[k][0] = su; /* sin(L) */
3013 cc[k][0] = cu; /* cos(L) */
3014 sv = 2.0 * su * cu;
3015 cv = cu * cu - su * su;
3016 ss[k][1] = sv; /* sin(2L) */
3017 cc[k][1] = cv;
3018 for (i = 2; i < n; i++)
3019 {
3020 s = su * cv + cu * sv;
3021 cv = cu * cv - su * sv;
3022 sv = s;
3023 ss[k][i] = sv; /* sin( i+1 L ) */
3024 cc[k][i] = cv;
3025 }
3026 return (0);
3027}
3028
3029/* Generic program to accumulate sum of trigonometric series
3030 in two variables (e.g., longitude, radius)
3031 of the same list of arguments. */
3032static int
3033g2plan (double J, struct plantbl *plan, double pobj[], int flag)
3034{
3035 int i, j, k, m, k1, ip, np, nt;
3036 /* On some systems such as Silicon Graphics, char is unsigned
3037 by default. */
3038 CHAR *p;
3039 long *pl, *pr;
3040 double su, cu, sv, cv;
3041 double t, sl, sr;
3042
3043 mean_elements (J);
3044 /* For librations, moon's longitude is sidereal. */
3045 if (flag)
3046 Args[13] -= pA_precession;
3047
3048 T = (J - MOSHIER_J2000) / plan->timescale;
3049 /* Calculate sin( i*MM ), etc. for needed multiple angles. */
3050 for (i = 0; i < NARGS; i++)
3051 {
3052 if ((j = plan->max_harmonic[i]) > 0)
3053 {
3054 sscc (i, Args[i], j);
3055 }
3056 }
3057
3058 /* Point to start of table of arguments. */
3059 p = plan->arg_tbl;
3060 /* Point to tabulated cosine and sine amplitudes. */
3061 pl = plan->lon_tbl;
3062 pr = plan->rad_tbl;
3063 sl = 0.0;
3064 sr = 0.0;
3065
3066 for (;;)
3067 {
3068 /* argument of sine and cosine */
3069 /* Number of periodic arguments. */
3070 np = *p++;
3071 if (np < 0)
3072 break;
3073 if (np == 0)
3074 { /* It is a polynomial term. */
3075 nt = *p++;
3076 /* Longitude polynomial. */
3077 cu = *pl++;
3078 for (ip = 0; ip < nt; ip++)
3079 {
3080 cu = cu * T + *pl++;
3081 }
3082 /* sl += mods3600 (cu); */
3083 sl += cu;
3084 /* Radius polynomial. */
3085 cu = *pr++;
3086 for (ip = 0; ip < nt; ip++)
3087 {
3088 cu = cu * T + *pr++;
3089 }
3090 sr += cu;
3091 continue;
3092 }
3093 k1 = 0;
3094 cv = 0.0;
3095 sv = 0.0;
3096 for (ip = 0; ip < np; ip++)
3097 {
3098 /* What harmonic. */
3099 j = *p++;
3100 /* Which planet. */
3101 m = *p++ - 1;
3102 if (j)
3103 {
3104 k = abs (j);
3105 k -= 1;
3106 su = ss[m][k]; /* sin(k*angle) */
3107 if (j < 0)
3108 su = -su;
3109 cu = cc[m][k];
3110 if (k1 == 0)
3111 { /* set first angle */
3112 sv = su;
3113 cv = cu;
3114 k1 = 1;
3115 }
3116 else
3117 { /* combine angles */
3118 t = su * cv + cu * sv;
3119 cv = cu * cv - su * sv;
3120 sv = t;
3121 }
3122 }
3123 }
3124 /* Highest power of T. */
3125 nt = *p++;
3126 /* Longitude. */
3127 cu = *pl++;
3128 su = *pl++;
3129 for (ip = 0; ip < nt; ip++)
3130 {
3131 cu = cu * T + *pl++;
3132 su = su * T + *pl++;
3133 }
3134 sl += cu * cv + su * sv;
3135 /* Radius. */
3136 cu = *pr++;
3137 su = *pr++;
3138 for (ip = 0; ip < nt; ip++)
3139 {
3140 cu = cu * T + *pr++;
3141 su = su * T + *pr++;
3142 }
3143 sr += cu * cv + su * sv;
3144 }
3145 t = plan->trunclvl;
3146 pobj[0] = t * sl;
3147 pobj[2] = t * sr;
3148 return (0);
3149}
3150
3151
3152
3153/* Generic program to accumulate sum of trigonometric series
3154 in one variable. */
3155
3156static double
3157g1plan (double J, struct plantbl *plan)
3158{
3159 int i, j, k, m, k1, ip, np, nt;
3160 /* On some systems such as Silicon Graphics, char is unsigned
3161 by default. */
3162 CHAR *p;
3163 long *pl;
3164 double su, cu, sv, cv;
3165 double t, sl;
3166
3167 T = (J - MOSHIER_J2000) / plan->timescale;
3168 mean_elements (J);
3169 /* Calculate sin( i*MM ), etc. for needed multiple angles. */
3170 for (i = 0; i < NARGS; i++)
3171 {
3172 if ((j = plan->max_harmonic[i]) > 0)
3173 {
3174 sscc (i, Args[i], j);
3175 }
3176 }
3177
3178 /* Point to start of table of arguments. */
3179 p = plan->arg_tbl;
3180 /* Point to tabulated cosine and sine amplitudes. */
3181 pl = plan->lon_tbl;
3182 sl = 0.0;
3183
3184 for (;;)
3185 {
3186 /* argument of sine and cosine */
3187 /* Number of periodic arguments. */
3188 np = *p++;
3189 if (np < 0)
3190 break;
3191 if (np == 0)
3192 { /* It is a polynomial term. */
3193 nt = *p++;
3194 cu = *pl++;
3195 for (ip = 0; ip < nt; ip++)
3196 {
3197 cu = cu * T + *pl++;
3198 }
3199 /* sl += mods3600 (cu); */
3200 sl += cu;
3201 continue;
3202 }
3203 k1 = 0;
3204 cv = 0.0;
3205 sv = 0.0;
3206 for (ip = 0; ip < np; ip++)
3207 {
3208 /* What harmonic. */
3209 j = *p++;
3210 /* Which planet. */
3211 m = *p++ - 1;
3212 if (j)
3213 {
3214 k = abs (j);
3215 k -= 1;
3216 su = ss[m][k]; /* sin(k*angle) */
3217 if (j < 0)
3218 su = -su;
3219 cu = cc[m][k];
3220 if (k1 == 0)
3221 { /* set first angle */
3222 sv = su;
3223 cv = cu;
3224 k1 = 1;
3225 }
3226 else
3227 { /* combine angles */
3228 t = su * cv + cu * sv;
3229 cv = cu * cv - su * sv;
3230 sv = t;
3231 }
3232 }
3233 }
3234 /* Highest power of T. */
3235 nt = *p++;
3236 /* Cosine and sine coefficients. */
3237 cu = *pl++;
3238 su = *pl++;
3239 for (ip = 0; ip < nt; ip++)
3240 {
3241 cu = cu * T + *pl++;
3242 su = su * T + *pl++;
3243 }
3244 sl += cu * cv + su * sv;
3245 }
3246 return (plan->trunclvl * sl);
3247}
3248
3249
3250/* geocentric moon, mean ecliptic and equinox of date
3251 * J is Julian Epemeris Date
3252 * output in pobj[]:
3253 * pobj[0]: l in rad
3254 * pobj[1]: b in rad
3255 * pobj[2]: r in au
3256 */
3257static int
3258gecmoon (double J, struct plantbl *lrtab, struct plantbl *lattab, double pobj[])
3259{
3260 double x;
3261
3262 g2plan (J, lrtab, pobj, 0);
3263 x = pobj[0];
3264 x += LP_equinox;
3265 if (x < -6.45e5)
3266 x += 1.296e6;
3267 if (x > 6.45e5)
3268 x -= 1.296e6;
3269 pobj[0] = STR * x;
3270 x = g1plan (J, lattab);
3271 pobj[1] = STR * x;
3272 pobj[2] = (STR * pobj[2] + 1.0) * lrtab->distance;
3273 return 0;
3274}
3275
3276/*********** end stephen moshier's moon code ****************/
3277
3278static void moon_fast (double mj, double *lam, double *bet,
3279 double *hp, double *msp, double *mdp);
3280
3281/* previous version (elwood):
3282 *
3283 * given the mjd, find the geocentric ecliptic longitude, lam, and latitude,
3284 * bet, and horizontal parallax, hp for the moon. also return the sun's
3285 * mean anomaly, *msp, and the moon's mean anomaly, *mdp.
3286 * N.B. series for long and lat are good to about 10 and 3 arcseconds. however,
3287 * math errors cause up to 100 and 30 arcseconds error, even if use double.
3288 * why?? suspect highly sensitive nature of difference used to get m1..6.
3289 * N.B. still need to correct for nutation. then for topocentric location
3290 * further correct for parallax and refraction.
3291 */
3292static void
3293moon_fast (double mj, double *lam, double *bet, double *hp, double *msp,
3294double *mdp)
3295{
3296 double t, t2;
3297 double ld;
3298 double ms;
3299 double md;
3300 double de;
3301 double f;
3302 double n;
3303 double a, sa, sn, b, sb, c, sc, e, e2, l, g, w1, w2;
3304 double m1, m2, m3, m4, m5, m6;
3305
3306 t = mj/36525.;
3307 t2 = t*t;
3308
3309 m1 = mj/27.32158213;
3310 m1 = 360.0*(m1-(long)m1);
3311 m2 = mj/365.2596407;
3312 m2 = 360.0*(m2-(long)m2);
3313 m3 = mj/27.55455094;
3314 m3 = 360.0*(m3-(long)m3);
3315 m4 = mj/29.53058868;
3316 m4 = 360.0*(m4-(long)m4);
3317 m5 = mj/27.21222039;
3318 m5 = 360.0*(m5-(long)m5);
3319 m6 = mj/6798.363307;
3320 m6 = 360.0*(m6-(long)m6);
3321
3322 ld = 270.434164+m1-(.001133-.0000019*t)*t2;
3323 ms = 358.475833+m2-(.00015+.0000033*t)*t2;
3324 md = 296.104608+m3+(.009192+.0000144*t)*t2;
3325 de = 350.737486+m4-(.001436-.0000019*t)*t2;
3326 f = 11.250889+m5-(.003211+.0000003*t)*t2;
3327 n = 259.183275-m6+(.002078+.000022*t)*t2;
3328
3329 a = degrad(51.2+20.2*t);
3330 sa = sin(a);
3331 sn = sin(degrad(n));
3332 b = 346.56+(132.87-.0091731*t)*t;
3333 sb = .003964*sin(degrad(b));
3334 c = degrad(n+275.05-2.3*t);
3335 sc = sin(c);
3336 ld = ld+.000233*sa+sb+.001964*sn;
3337 ms = ms-.001778*sa;
3338 md = md+.000817*sa+sb+.002541*sn;
3339 f = f+sb-.024691*sn-.004328*sc;
3340 de = de+.002011*sa+sb+.001964*sn;
3341 e = 1-(.002495+7.52e-06*t)*t;
3342 e2 = e*e;
3343
3344 ld = degrad(ld);
3345 ms = degrad(ms);
3346 n = degrad(n);
3347 de = degrad(de);
3348 f = degrad(f);
3349 md = degrad(md);
3350
3351 l = 6.28875*sin(md)+1.27402*sin(2*de-md)+.658309*sin(2*de)+
3352 .213616*sin(2*md)-e*.185596*sin(ms)-.114336*sin(2*f)+
3353 .058793*sin(2*(de-md))+.057212*e*sin(2*de-ms-md)+
3354 .05332*sin(2*de+md)+.045874*e*sin(2*de-ms)+.041024*e*sin(md-ms);
3355 l = l-.034718*sin(de)-e*.030465*sin(ms+md)+.015326*sin(2*(de-f))-
3356 .012528*sin(2*f+md)-.01098*sin(2*f-md)+.010674*sin(4*de-md)+
3357 .010034*sin(3*md)+.008548*sin(4*de-2*md)-e*.00791*sin(ms-md+2*de)-
3358 e*.006783*sin(2*de+ms);
3359 l = l+.005162*sin(md-de)+e*.005*sin(ms+de)+.003862*sin(4*de)+
3360 e*.004049*sin(md-ms+2*de)+.003996*sin(2*(md+de))+
3361 .003665*sin(2*de-3*md)+e*.002695*sin(2*md-ms)+
3362 .002602*sin(md-2*(f+de))+e*.002396*sin(2*(de-md)-ms)-
3363 .002349*sin(md+de);
3364 l = l+e2*.002249*sin(2*(de-ms))-e*.002125*sin(2*md+ms)-
3365 e2*.002079*sin(2*ms)+e2*.002059*sin(2*(de-ms)-md)-
3366 .001773*sin(md+2*(de-f))-.001595*sin(2*(f+de))+
3367 e*.00122*sin(4*de-ms-md)-.00111*sin(2*(md+f))+.000892*sin(md-3*de);
3368 l = l-e*.000811*sin(ms+md+2*de)+e*.000761*sin(4*de-ms-2*md)+
3369 e2*.000704*sin(md-2*(ms+de))+e*.000693*sin(ms-2*(md-de))+
3370 e*.000598*sin(2*(de-f)-ms)+.00055*sin(md+4*de)+.000538*sin(4*md)+
3371 e*.000521*sin(4*de-ms)+.000486*sin(2*md-de);
3372 l = l+e2*.000717*sin(md-2*ms);
3373 *lam = ld+degrad(l);
3374 range (lam, 2*PI);
3375
3376 g = 5.12819*sin(f)+.280606*sin(md+f)+.277693*sin(md-f)+
3377 .173238*sin(2*de-f)+.055413*sin(2*de+f-md)+.046272*sin(2*de-f-md)+
3378 .032573*sin(2*de+f)+.017198*sin(2*md+f)+.009267*sin(2*de+md-f)+
3379 .008823*sin(2*md-f)+e*.008247*sin(2*de-ms-f);
3380 g = g+.004323*sin(2*(de-md)-f)+.0042*sin(2*de+f+md)+
3381 e*.003372*sin(f-ms-2*de)+e*.002472*sin(2*de+f-ms-md)+
3382 e*.002222*sin(2*de+f-ms)+e*.002072*sin(2*de-f-ms-md)+
3383 e*.001877*sin(f-ms+md)+.001828*sin(4*de-f-md)-e*.001803*sin(f+ms)-
3384 .00175*sin(3*f);
3385 g = g+e*.00157*sin(md-ms-f)-.001487*sin(f+de)-e*.001481*sin(f+ms+md)+
3386 e*.001417*sin(f-ms-md)+e*.00135*sin(f-ms)+.00133*sin(f-de)+
3387 .001106*sin(f+3*md)+.00102*sin(4*de-f)+.000833*sin(f+4*de-md)+
3388 .000781*sin(md-3*f)+.00067*sin(f+4*de-2*md);
3389 g = g+.000606*sin(2*de-3*f)+.000597*sin(2*(de+md)-f)+
3390 e*.000492*sin(2*de+md-ms-f)+.00045*sin(2*(md-de)-f)+
3391 .000439*sin(3*md-f)+.000423*sin(f+2*(de+md))+
3392 .000422*sin(2*de-f-3*md)-e*.000367*sin(ms+f+2*de-md)-
3393 e*.000353*sin(ms+f+2*de)+.000331*sin(f+4*de);
3394 g = g+e*.000317*sin(2*de+f-ms+md)+e2*.000306*sin(2*(de-ms)-f)-
3395 .000283*sin(md+3*f);
3396 w1 = .0004664*cos(n);
3397 w2 = .0000754*cos(c);
3398 *bet = degrad(g)*(1-w1-w2);
3399
3400 *hp = .950724+.051818*cos(md)+.009531*cos(2*de-md)+.007843*cos(2*de)+
3401 .002824*cos(2*md)+.000857*cos(2*de+md)+e*.000533*cos(2*de-ms)+
3402 e*.000401*cos(2*de-md-ms)+e*.00032*cos(md-ms)-.000271*cos(de)-
3403 e*.000264*cos(ms+md)-.000198*cos(2*f-md);
3404 *hp = *hp+.000173*cos(3*md)+.000167*cos(4*de-md)-e*.000111*cos(ms)+
3405 .000103*cos(4*de-2*md)-.000084*cos(2*md-2*de)-
3406 e*.000083*cos(2*de+ms)+.000079*cos(2*de+2*md)+.000072*cos(4*de)+
3407 e*.000064*cos(2*de-ms+md)-e*.000063*cos(2*de+ms-md)+
3408 e*.000041*cos(ms+de);
3409 *hp = *hp+e*.000035*cos(2*md-ms)-.000033*cos(3*md-2*de)-
3410 .00003*cos(md+de)-.000029*cos(2*(f-de))-e*.000029*cos(2*md+ms)+
3411 e2*.000026*cos(2*(de-ms))-.000023*cos(2*(f-de)+md)+
3412 e*.000019*cos(4*de-ms-md);
3413 *hp = degrad(*hp);
3414
3415 *msp = ms;
3416 *mdp = md;
3417}
3418
3419
3420#define EarthRadius 6378.16 /* Kilometers */
3421
3422/* moon() - front end rountine to get moon position; stern
3423 *
3424 * given the mjd, find the geocentric ecliptic longitude, lam, and latitude,
3425 * bet, and geocentric distance, rho in a.u. for the moon. also return
3426 * the sun's mean anomaly, *msp, and the moon's mean anomaly, *mdp.
3427 *
3428 * now uses Stephen Moshier's expansion and code.
3429 *
3430 * TODO: - clarify lunar aberration for apparent places
3431 *
3432 * still need to correct for nutation. then for topocentric location
3433 * further correct for parallax and refraction.
3434 * NB: Do NOT correct for aberration - the geocentric moon frame moves
3435 * along with the earth.
3436 */
3437void
3438moon (double mj, double *lam, double *bet, double *rho, double *msp,
3439double *mdp)
3440{
3441 double pobj[3], dt;
3442 double hp;
3443
3444 if (mj >= MOSHIER_BEGIN && mj <= MOSHIER_END) {
3445 /* retard for light time */
3446 moon_fast (mj, lam, bet, &hp, msp, mdp);
3447 *rho = EarthRadius/AUKM/sin(hp);
3448 dt = *rho * 5.7755183e-3; /* speed of light in a.u/day */
3449 gecmoon(mj + MJD0 - dt, &moonlr, &moonlat, pobj);
3450
3451 *lam = pobj[0];
3452 range (lam, 2*PI);
3453 *bet = pobj[1];
3454 *rho = pobj[2];
3455 *msp = STR * Args[11]; /* don't need range correction here */
3456 *mdp = STR * Args[12];
3457 } else {
3458 moon_fast (mj, lam, bet, &hp, msp, mdp);
3459 *rho = EarthRadius/AUKM/sin(hp);
3460
3461 }
3462}
3463
3464/* For RCS Only -- Do Not Edit */
3465static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: moon.c,v $ $Date: 2004-06-15 16:52:39 $ $Revision: 1.3 $ $Name: not supported by cvs2svn $"};
Note: See TracBrowser for help on using the repository browser.