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

Last change on this file since 1895 was 1719, checked in by cmv, 24 years ago

Adapted to version 3.5 xephem cmv 22/10/2001

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