1 /* A lexical scanner generated by flex */
3 /* Scanner skeleton version:
8 #define YY_FLEX_MAJOR_VERSION 2
9 #define YY_FLEX_MINOR_VERSION 5
14 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
27 /* Use prototypes in function declarations. */
30 /* The "const" storage-class-modifier is valid. */
33 #else /* ! __cplusplus */
41 #endif /* ! __cplusplus */
60 #define YY_PROTO(proto) proto
62 #define YY_PROTO(proto) ()
65 /* Returned upon end-of-file. */
68 /* Promotes a possibly negative, possibly signed char to an unsigned
69 * integer for use as an array index. If the signed char is negative,
70 * we want to instead treat it as an 8-bit unsigned char, hence the
73 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
75 /* Enter a start condition. This macro really ought to take a parameter,
76 * but we do it the disgusting crufty way forced on us by the ()-less
77 * definition of BEGIN.
79 #define BEGIN yy_start = 1 + 2 *
81 /* Translate the current start state into a value that can be later handed
82 * to BEGIN to return to the state. The YYSTATE alias is for lex
85 #define YY_START ((yy_start - 1) / 2)
86 #define YYSTATE YY_START
88 /* Action number for EOF rule of a given start state. */
89 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
91 /* Special action meaning "start processing a new file". */
92 #define YY_NEW_FILE yyrestart( yyin )
94 #define YY_END_OF_BUFFER_CHAR 0
96 /* Size of default input buffer. */
97 #define YY_BUF_SIZE 16384
99 typedef struct yy_buffer_state *YY_BUFFER_STATE;
102 extern FILE *yyin, *yyout;
104 #define EOB_ACT_CONTINUE_SCAN 0
105 #define EOB_ACT_END_OF_FILE 1
106 #define EOB_ACT_LAST_MATCH 2
108 /* The funky do-while in the following #define is used to turn the definition
109 * int a single C statement (which needs a semi-colon terminator). This
110 * avoids problems with code like:
112 * if ( condition_holds )
115 * do_something_else();
117 * Prior to using the do-while the compiler would get upset at the
118 * "else" because it interpreted the "if" statement as being all
119 * done when it reached the ';' after the yyless() call.
122 /* Return all but the first 'n' matched characters back to the input stream. */
127 /* Undo effects of setting up yytext. */ \
128 *yy_cp = yy_hold_char; \
129 YY_RESTORE_YY_MORE_OFFSET \
130 yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
131 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
135 #define unput(c) yyunput( c, yytext_ptr )
137 /* The following is because we cannot portably get our hands on size_t
138 * (without autoconf's help, which isn't available because we want
139 * flex-generated scanners to compile on their own).
141 typedef unsigned int yy_size_t;
144 struct yy_buffer_state
148 char *yy_ch_buf; /* input buffer */
149 char *yy_buf_pos; /* current position in input buffer */
151 /* Size of input buffer in bytes, not including room for EOB
154 yy_size_t yy_buf_size;
156 /* Number of characters read into yy_ch_buf, not including EOB
161 /* Whether we "own" the buffer - i.e., we know we created it,
162 * and can realloc() it to grow it, and should free() it to
165 int yy_is_our_buffer;
167 /* Whether this is an "interactive" input source; if so, and
168 * if we're using stdio for input, then we want to use getc()
169 * instead of fread(), to make sure we stop fetching input after
172 int yy_is_interactive;
174 /* Whether we're considered to be at the beginning of a line.
175 * If so, '^' rules will be active on the next match, otherwise
180 /* Whether to try to fill the input buffer when we reach the
185 int yy_buffer_status;
186 #define YY_BUFFER_NEW 0
187 #define YY_BUFFER_NORMAL 1
188 /* When an EOF's been seen but there's still some text to process
189 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
190 * shouldn't try reading from the input source any more. We might
191 * still have a bunch of tokens to match, though, because of
192 * possible backing-up.
194 * When we actually see the EOF, we change the status to "new"
195 * (via yyrestart()), so that the user can continue scanning by
196 * just pointing yyin at a new input file.
198 #define YY_BUFFER_EOF_PENDING 2
201 static YY_BUFFER_STATE yy_current_buffer = 0;
203 /* We provide macros for accessing buffer states in case in the
204 * future we want to put the buffer states in a more general
207 #define YY_CURRENT_BUFFER yy_current_buffer
210 /* yy_hold_char holds the character lost when yytext is formed. */
211 static char yy_hold_char;
213 static int yy_n_chars; /* number of characters read into yy_ch_buf */
218 /* Points to current character in buffer. */
219 static char *yy_c_buf_p = (char *) 0;
220 static int yy_init = 1; /* whether we need to initialize */
221 static int yy_start = 0; /* start state number */
223 /* Flag which is used to allow yywrap()'s to do buffer switches
224 * instead of setting up a fresh yyin. A bit of a hack ...
226 static int yy_did_buffer_switch_on_eof;
228 void yyrestart YY_PROTO(( FILE *input_file ));
230 void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
231 void yy_load_buffer_state YY_PROTO(( void ));
232 YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
233 void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
234 void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
235 void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
236 #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
238 YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
239 YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
240 YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
242 static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
243 static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
244 static void yy_flex_free YY_PROTO(( void * ));
246 #define yy_new_buffer yy_create_buffer
248 #define yy_set_interactive(is_interactive) \
250 if ( ! yy_current_buffer ) \
251 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
252 yy_current_buffer->yy_is_interactive = is_interactive; \
255 #define yy_set_bol(at_bol) \
257 if ( ! yy_current_buffer ) \
258 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
259 yy_current_buffer->yy_at_bol = at_bol; \
262 #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
265 #define YY_USES_REJECT
266 typedef unsigned char YY_CHAR;
267 FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
268 typedef int yy_state_type;
270 #define yytext_ptr yytext
272 static yy_state_type yy_get_previous_state YY_PROTO(( void ));
273 static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
274 static int yy_get_next_buffer YY_PROTO(( void ));
275 static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
277 /* Done after the current pattern has been matched and before the
278 * corresponding action - sets up yytext.
280 #define YY_DO_BEFORE_ACTION \
281 yytext_ptr = yy_bp; \
282 yyleng = (int) (yy_cp - yy_bp); \
283 yy_hold_char = *yy_cp; \
287 #define YY_NUM_RULES 42
288 #define YY_END_OF_BUFFER 43
289 static yyconst short int yy_acclist[661] =
291 43, 41, 42, 41, 42, 41, 42, 40, 41, 42,
292 41, 42, 25, 41, 42, 41, 42, 40, 41, 42,
293 40, 41, 42,16410, 40, 41, 42,16410, 41, 42,
294 40, 41, 42, 40, 41, 42, 40, 41, 42, 40,
295 41, 42, 40, 41, 42, 40, 41, 42, 40, 41,
296 42, 40, 41, 42, 40, 41, 42, 40, 41, 42,
297 40, 41, 42, 40, 41, 42, 40, 41, 42, 41,
298 42, 40, 41, 42, 40, 41, 42, 40, 41, 42,
299 40, 41, 42, 40, 41, 42, 40, 41, 42, 40,
300 41, 42, 40, 41, 42, 40, 41, 42, 41, 42,
302 41, 42, 40, 41, 42, 40, 41, 42, 40, 41,
303 42,16410, 40, 41, 42,16410, 41, 42, 40, 41,
304 42, 40, 41, 42, 40, 41, 42, 40, 41, 42,
305 40, 41, 42, 40, 41, 42, 40, 41, 42, 40,
306 41, 42, 40, 41, 42, 40, 41, 42, 40, 41,
307 42, 40, 41, 42, 40, 41, 42, 40, 41, 42,
308 40, 41, 42, 40, 41, 42, 40, 41, 42, 40,
309 41, 42, 40, 41, 42, 40, 41, 42, 40, 41,
310 42, 40, 41, 42, 41, 42, 33, 40, 17, 40,
311 9, 40, 40, 40,16410, 8218, 40, 35, 40, 40,
313 40, 40, 40, 40, 40, 40, 40, 40, 40, 9,
314 40, 40, 40, 40, 40, 40, 36, 40, 3, 40,
315 40, 40, 4, 40, 40, 3, 40, 40, 4, 40,
316 40, 40, 40, 9, 40, 34, 40, 40, 9, 40,
317 40, 40,16410, 8218, 40, 40, 40, 40, 40, 40,
318 40, 40, 40, 40, 40, 40, 9, 40, 40, 40,
319 40, 40, 40, 40, 3, 40, 40, 40, 4, 40,
320 40, 3, 40, 40, 4, 40, 40, 40, 40, 9,
321 40, 15, 9, 40, 23, 40, 23, 8, 40, 8218,
322 22, 40, 22, 24, 40, 40, 40, 6, 40, 40,
324 40, 40, 40, 40, 40, 9, 40, 40, 40, 40,
325 40, 20, 40, 4, 40, 40, 3, 40, 40, 3,
326 40, 4, 5, 40, 4, 40, 40, 4, 40, 40,
327 40, 3, 40, 4, 4, 40, 5, 6, 40, 4,
328 40, 40, 9, 40, 34, 39, 9, 40, 23, 40,
329 8, 40, 22, 40, 35, 40, 40, 40, 6, 40,
330 40, 40, 40, 40, 40, 40, 9, 40, 40, 40,
331 40, 40, 20, 40, 4, 40, 40, 3, 40, 40,
332 3, 40, 5, 40, 4, 40, 40, 4, 40, 40,
333 40, 3, 40, 4, 40, 5, 6, 40, 4, 40,
335 40, 9, 40, 38, 38, 37, 25, 25, 40, 6,
336 40, 7, 40, 6, 10, 40, 40, 40, 40, 19,
337 40, 40, 21, 40, 16, 40, 40, 40, 40, 40,
338 20, 20, 40, 20, 40, 36, 3, 3, 2, 40,
339 5, 4, 5, 40, 40, 4, 4, 40, 2, 7,
340 40, 5, 6, 5, 6, 40, 5, 40, 40, 40,
341 25, 39, 40, 6, 40, 7, 40, 40, 40, 40,
342 40, 19, 40, 40, 21, 40, 16, 40, 40, 40,
343 40, 40, 20, 40, 20, 20, 40, 2, 40, 5,
344 40, 40, 4, 40, 2, 7, 40, 5, 6, 40,
346 5, 40, 40, 40, 7, 1, 40, 40, 40, 19,
347 40, 40, 40, 21, 21, 40, 21, 40, 40, 40,
348 40, 30, 36, 2, 2, 40, 5, 4, 5, 5,
349 40, 2, 7, 39, 1, 40, 40, 40, 19, 40,
350 40, 40, 21, 40, 21, 21, 40, 40, 40, 40,
351 20, 39, 2, 40, 5, 40, 27, 38, 23, 23,
352 22, 22, 24, 24, 20, 21, 1, 1, 40, 40,
353 40, 40, 11, 40, 40, 28, 36, 30, 2, 2,
354 5, 27, 34, 39, 39, 1, 40, 40, 40, 40,
355 21, 39, 11, 40, 40, 20, 39, 18, 24, 20,
357 21, 1, 1, 19, 40, 40, 40, 11, 40, 40,
358 40, 40, 21, 39, 40, 11, 40, 40, 12, 40,
359 40, 40, 40, 12, 40, 40, 14, 40, 40, 40,
360 14, 40, 40, 40, 39, 40, 40, 40, 40, 39,
361 39, 40, 40, 31, 40, 39, 39, 31, 40, 13,
362 31, 32, 32, 35, 39, 39, 31, 39, 34, 29
365 static yyconst short int yy_accept[712] =
367 1, 1, 1, 2, 4, 6, 8, 11, 13, 16,
368 18, 21, 25, 29, 31, 34, 37, 40, 43, 46,
369 49, 52, 55, 58, 61, 64, 67, 70, 72, 75,
370 78, 81, 84, 87, 90, 93, 96, 99, 101, 103,
371 106, 109, 113, 117, 119, 122, 125, 128, 131, 134,
372 137, 140, 143, 146, 149, 152, 155, 158, 161, 164,
373 167, 170, 173, 176, 179, 182, 185, 187, 187, 188,
374 189, 189, 189, 189, 189, 190, 190, 190, 191, 191,
375 193, 193, 193, 193, 194, 194, 194, 196, 196, 198,
376 198, 199, 199, 200, 200, 201, 201, 201, 202, 203,
378 204, 205, 206, 207, 208, 209, 210, 212, 213, 214,
379 215, 216, 217, 217, 217, 217, 217, 218, 219, 221,
380 221, 222, 223, 225, 226, 228, 228, 229, 231, 232,
381 233, 234, 236, 236, 236, 236, 237, 237, 238, 238,
382 239, 241, 241, 242, 244, 244, 246, 246, 247, 248,
383 248, 249, 250, 251, 252, 253, 254, 255, 256, 257,
384 259, 260, 261, 262, 263, 264, 265, 267, 267, 268,
385 269, 271, 272, 274, 274, 275, 277, 278, 279, 280,
386 282, 282, 282, 282, 282, 282, 282, 282, 282, 282,
387 282, 282, 283, 283, 283, 283, 285, 287, 288, 290,
389 291, 291, 291, 291, 293, 294, 295, 295, 295, 295,
390 295, 296, 296, 297, 297, 298, 298, 298, 300, 301,
391 302, 303, 304, 305, 306, 308, 309, 310, 311, 312,
392 314, 314, 314, 314, 314, 316, 316, 317, 317, 317,
393 319, 320, 322, 323, 325, 325, 325, 327, 328, 330,
394 331, 331, 332, 334, 335, 337, 340, 342, 343, 345,
395 346, 346, 346, 346, 346, 347, 349, 351, 353, 355,
396 355, 356, 356, 357, 358, 358, 359, 361, 362, 363,
397 364, 365, 366, 367, 369, 370, 371, 372, 373, 375,
398 377, 378, 378, 380, 381, 383, 385, 387, 388, 390,
400 391, 391, 392, 394, 396, 399, 401, 402, 404, 404,
401 404, 405, 406, 406, 406, 407, 407, 407, 408, 408,
402 409, 409, 409, 409, 410, 410, 410, 410, 410, 410,
403 410, 410, 410, 410, 410, 410, 412, 412, 412, 414,
404 415, 416, 417, 417, 418, 419, 420, 422, 422, 423,
405 425, 427, 428, 429, 430, 431, 432, 434, 436, 436,
406 436, 436, 436, 437, 438, 438, 439, 441, 442, 443,
407 443, 443, 443, 445, 446, 447, 447, 449, 449, 452,
408 454, 457, 459, 460, 461, 461, 462, 462, 462, 462,
409 462, 463, 463, 464, 464, 464, 466, 468, 469, 469,
411 470, 471, 472, 474, 475, 477, 479, 480, 481, 482,
412 483, 485, 486, 488, 490, 492, 493, 495, 498, 501,
413 503, 504, 505, 505, 505, 505, 505, 505, 505, 505,
414 505, 505, 505, 505, 505, 505, 505, 505, 505, 505,
415 506, 508, 509, 510, 510, 512, 512, 513, 514, 515,
416 517, 519, 520, 521, 522, 522, 522, 524, 524, 524,
417 525, 525, 525, 527, 528, 528, 529, 530, 530, 532,
418 532, 534, 534, 534, 534, 534, 534, 534, 535, 535,
419 535, 537, 538, 539, 541, 542, 543, 545, 546, 548,
420 549, 550, 551, 553, 555, 557, 557, 557, 559, 559,
422 559, 560, 560, 561, 561, 562, 562, 563, 563, 564,
423 564, 565, 565, 565, 565, 565, 567, 567, 568, 568,
424 568, 570, 571, 571, 571, 571, 571, 571, 572, 573,
425 575, 576, 578, 578, 579, 580, 581, 582, 582, 582,
426 584, 584, 584, 585, 586, 586, 586, 588, 589, 590,
427 591, 593, 595, 596, 598, 598, 599, 599, 599, 599,
428 600, 600, 600, 600, 602, 602, 603, 604, 604, 605,
429 605, 605, 605, 605, 606, 607, 608, 610, 611, 611,
430 611, 611, 611, 611, 612, 613, 615, 616, 618, 619,
431 619, 619, 619, 619, 619, 619, 620, 620, 620, 620,
433 620, 621, 622, 622, 622, 622, 622, 623, 624, 624,
434 624, 624, 624, 625, 625, 625, 625, 626, 627, 629,
435 629, 629, 629, 629, 630, 630, 631, 633, 633, 633,
436 633, 633, 634, 635, 635, 635, 635, 635, 636, 637,
437 638, 638, 638, 638, 638, 638, 639, 640, 640, 640,
438 640, 640, 641, 642, 643, 644, 644, 644, 644, 644,
439 644, 646, 646, 646, 646, 646, 647, 648, 650, 650,
440 650, 651, 651, 652, 652, 653, 653, 653, 655, 655,
441 656, 657, 657, 657, 657, 657, 659, 659, 659, 659,
442 659, 659, 659, 659, 659, 659, 659, 659, 659, 659,
444 659, 659, 659, 659, 659, 659, 659, 659, 660, 661,
448 static yyconst int yy_ec[256] =
450 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
451 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
452 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
453 1, 4, 1, 5, 6, 7, 8, 1, 9, 10,
454 11, 12, 13, 1, 14, 15, 16, 17, 18, 19,
455 20, 20, 20, 20, 20, 20, 21, 22, 23, 1,
456 24, 1, 1, 25, 26, 27, 28, 29, 30, 31,
457 32, 33, 34, 34, 35, 36, 37, 38, 39, 40,
458 41, 42, 43, 34, 44, 34, 45, 46, 34, 34,
459 47, 1, 48, 1, 49, 1, 50, 51, 52, 53,
461 54, 55, 56, 57, 58, 34, 59, 60, 61, 62,
462 63, 64, 41, 65, 66, 67, 68, 34, 69, 46,
463 70, 34, 71, 1, 72, 1, 1, 1, 1, 1,
464 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
465 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
466 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
467 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
468 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
469 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
470 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
472 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
473 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
474 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
475 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
476 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
480 static yyconst int yy_meta[73] =
482 1, 2, 3, 2, 1, 1, 1, 1, 4, 5,
483 6, 1, 1, 7, 1, 1, 4, 8, 8, 8,
484 4, 9, 1, 10, 1, 4, 11, 4, 4, 4,
485 4, 4, 4, 4, 11, 4, 4, 11, 12, 12,
486 11, 11, 4, 4, 4, 7, 1, 1, 1, 13,
487 14, 13, 13, 15, 13, 13, 13, 4, 11, 4,
488 4, 11, 12, 12, 11, 4, 4, 4, 4, 4,
492 static yyconst short int yy_base[787] =
494 0, 72, 2588, 4394, 119, 129, 0, 141, 2583, 139,
495 150, 171, 238, 2583, 257, 2527, 2518, 117, 159, 2518,
496 2530, 190, 142, 233, 191, 2512, 239, 317, 376, 420,
497 125, 205, 193, 114, 243, 120, 204, 331, 2574, 174,
498 353, 476, 258, 260, 543, 244, 282, 346, 311, 334,
499 256, 312, 365, 595, 331, 351, 354, 644, 688, 242,
500 348, 327, 365, 386, 303, 392, 552, 2521, 432, 0,
501 2566, 258, 557, 282, 4394, 2562, 393, 320, 2556, 2554,
502 2552, 342, 442, 2551, 457, 364, 605, 2550, 0, 2562,
503 4394, 576, 530, 617, 732, 625, 661, 449, 2514, 2509,
505 2512, 2517, 2492, 2493, 2490, 2517, 2515, 463, 572, 2503,
506 2494, 2489, 2502, 789, 372, 861, 4394, 669, 924, 705,
507 713, 468, 980, 765, 1032, 773, 789, 1076, 481, 637,
508 2486, 2485, 390, 2475, 830, 2542, 2541, 383, 2540, 617,
509 593, 546, 858, 874, 406, 579, 432, 865, 1120, 1005,
510 505, 683, 726, 727, 621, 872, 870, 876, 603, 873,
511 905, 665, 891, 884, 882, 973, 1168, 1013, 1049, 936,
512 1225, 1057, 1277, 1093, 1101, 1321, 641, 983, 928, 930,
513 896, 2478, 538, 543, 612, 2531, 622, 1030, 1221, 2528,
514 2466, 4394, 2532, 2531, 2529, 2518, 2527, 2526, 0, 4394,
516 2525, 2524, 2523, 2521, 2520, 443, 2465, 2459, 2471, 2466,
517 668, 709, 594, 1218, 732, 753, 756, 1365, 2467, 2466,
518 2446, 803, 906, 2460, 2498, 0, 2453, 2449, 2441, 1422,
519 689, 1069, 172, 1494, 790, 1251, 1294, 1302, 1415, 2496,
520 838, 976, 1288, 1557, 1413, 1449, 678, 629, 910, 1338,
521 1346, 992, 1105, 1502, 1057, 1609, 1182, 1100, 2492, 4394,
522 1510, 996, 2501, 191, 2501, 1172, 960, 962, 1158, 831,
523 2499, 1132, 1237, 889, 1482, 1300, 1653, 1176, 1228, 1010,
524 1273, 1315, 1175, 1190, 0, 1204, 1531, 1071, 1710, 1774,
525 1550, 1582, 1242, 1443, 1551, 1830, 1272, 1239, 1121, 1493,
527 1590, 1606, 1659, 1141, 1882, 1673, 1721, 1427, 1504, 2447,
528 4394, 843, 1025, 2489, 4394, 1727, 2487, 2485, 2423, 2422,
529 2475, 2474, 2473, 2473, 1010, 2472, 539, 2471, 1290, 1541,
530 610, 2421, 2421, 2414, 2414, 0, 939, 1197, 0, 4394,
531 4394, 1699, 1710, 1344, 2420, 2419, 885, 879, 1130, 1939,
532 0, 2438, 2420, 2421, 2420, 0, 2011, 2083, 733, 949,
533 1131, 1410, 2468, 2461, 1365, 4394, 2146, 1356, 1154, 689,
534 1752, 1796, 1157, 715, 2417, 2406, 0, 1386, 0, 1564,
535 2202, 1802, 1633, 2406, 1857, 2464, 1571, 1672, 2417, 2403,
536 2462, 1187, 1451, 1003, 894, 1295, 1470, 1718, 1855, 1823,
538 1555, 1665, 1782, 1796, 2267, 1574, 1588, 1826, 1647, 1674,
539 2339, 2460, 2411, 2475, 1840, 1858, 1608, 0, 2531, 1905,
540 1956, 1857, 1728, 2409, 2451, 1639, 2450, 2385, 2445, 2383,
541 2443, 2381, 2434, 1281, 2399, 2395, 2395, 2390, 1389, 4394,
542 2587, 2443, 1146, 1916, 2442, 1281, 2415, 2390, 0, 2652,
543 2724, 2378, 2378, 2428, 1322, 1883, 4394, 2426, 1966, 1457,
544 2002, 2076, 2419, 1428, 952, 4394, 2375, 2364, 0, 2410,
545 1544, 1774, 2396, 1877, 2392, 2347, 2341, 1521, 1030, 1255,
546 2787, 1676, 1881, 1788, 1891, 1861, 2852, 2402, 2924, 1963,
547 1841, 1944, 2402, 1691, 1649, 1816, 1235, 4394, 1979, 2393,
549 2392, 2330, 2329, 2389, 2388, 2326, 2325, 2385, 2381, 2319,
550 2318, 2366, 2362, 2315, 2323, 1377, 2320, 1778, 2004, 2102,
551 2355, 2310, 2348, 2304, 2287, 2326, 2288, 2289, 2264, 1524,
552 2279, 4394, 1980, 4394, 2317, 4394, 4394, 2312, 2053, 2319,
553 2268, 2261, 2315, 1999, 1555, 548, 1908, 1982, 1951, 1786,
554 2301, 2043, 2029, 2297, 2054, 4394, 2243, 2158, 2289, 2284,
555 2219, 2205, 2209, 4394, 2198, 2239, 4394, 2235, 2228, 2174,
556 2228, 2182, 2157, 2174, 2105, 2086, 0, 2061, 2130, 2120,
557 2054, 1040, 358, 2032, 2091, 2073, 2093, 1970, 2136, 2120,
558 1988, 2029, 1542, 1985, 1941, 1941, 1923, 884, 1858, 1831,
560 2996, 1815, 1772, 1768, 1617, 651, 3068, 2150, 2149, 1757,
561 1745, 1725, 4394, 1623, 1924, 2045, 3140, 2054, 0, 1631,
562 1594, 1302, 1202, 3212, 2158, 2066, 2040, 2177, 1577, 1531,
563 2110, 1524, 1496, 1455, 1427, 1308, 1895, 2162, 1448, 1422,
564 2179, 1319, 1298, 2163, 2154, 1285, 1115, 1083, 1117, 1726,
565 1576, 2196, 2198, 1062, 984, 2193, 2056, 930, 2153, 2166,
566 0, 902, 804, 803, 1618, 2210, 2238, 0, 2213, 583,
567 4394, 497, 2199, 486, 4394, 426, 460, 4394, 2116, 2203,
568 2254, 2231, 392, 317, 1804, 2255, 2281, 239, 2027, 829,
569 2006, 2117, 2293, 2295, 2298, 2299, 2303, 2317, 2321, 2322,
571 2323, 2365, 2366, 2369, 2370, 2371, 2233, 154, 4394, 4394,
572 3281, 3296, 3311, 3326, 3341, 3353, 3368, 3383, 3397, 3412,
573 3427, 3442, 3457, 3472, 3487, 3502, 3517, 3532, 3547, 3562,
574 3577, 3592, 3607, 3622, 3633, 3648, 3663, 3678, 3693, 3708,
575 3723, 3738, 3753, 3768, 3783, 3792, 3807, 3822, 3837, 3852,
576 3867, 3882, 3897, 3908, 3923, 3938, 3953, 3968, 3983, 3998,
577 4013, 4028, 4043, 4058, 4073, 4088, 4103, 4118, 4133, 4148,
578 4163, 4174, 4188, 4203, 4218, 4233, 4244, 4258, 4273, 4288,
579 4303, 4318, 4333, 4348, 4363, 4378
582 static yyconst short int yy_def[787] =
584 710, 710, 710, 710, 710, 710, 711, 712, 710, 710,
585 711, 710, 12, 713, 711, 711, 711, 711, 15, 711,
586 711, 15, 711, 711, 15, 711, 711, 714, 711, 15,
587 29, 29, 29, 29, 29, 29, 711, 715, 710, 716,
588 716, 710, 42, 713, 716, 716, 716, 716, 45, 716,
589 716, 45, 716, 716, 45, 716, 716, 716, 45, 58,
590 58, 58, 58, 58, 58, 716, 715, 710, 710, 711,
591 717, 718, 717, 710, 710, 710, 710, 711, 710, 711,
592 710, 719, 719, 711, 719, 710, 12, 710, 711, 713,
593 710, 710, 711, 710, 711, 710, 710, 95, 711, 711,
595 711, 711, 711, 711, 711, 711, 711, 711, 95, 711,
596 711, 711, 720, 714, 720, 721, 710, 711, 711, 710,
597 711, 711, 711, 711, 119, 710, 711, 123, 95, 711,
598 711, 711, 715, 722, 715, 710, 723, 716, 710, 716,
599 716, 710, 716, 42, 710, 716, 724, 716, 148, 710,
600 149, 716, 716, 716, 716, 716, 716, 716, 716, 716,
601 716, 149, 716, 716, 716, 148, 148, 710, 148, 716,
602 716, 148, 167, 710, 148, 171, 149, 716, 716, 716,
603 715, 710, 717, 725, 725, 726, 727, 717, 717, 728,
604 729, 710, 710, 710, 710, 711, 711, 710, 711, 710,
606 710, 710, 710, 711, 710, 710, 710, 710, 710, 710,
607 711, 710, 95, 710, 711, 710, 710, 711, 711, 711,
608 711, 711, 711, 711, 711, 218, 711, 711, 711, 730,
609 731, 732, 733, 734, 123, 710, 711, 710, 710, 711,
610 711, 711, 735, 711, 710, 710, 711, 711, 123, 711,
611 710, 711, 711, 735, 123, 244, 711, 711, 711, 710,
612 715, 710, 736, 710, 737, 716, 716, 716, 716, 738,
613 736, 739, 716, 149, 710, 716, 149, 716, 716, 716,
614 716, 716, 716, 716, 277, 716, 716, 716, 740, 716,
615 716, 710, 716, 716, 716, 290, 716, 716, 290, 291,
617 710, 716, 716, 290, 296, 716, 716, 716, 715, 710,
618 710, 741, 741, 742, 710, 743, 744, 744, 745, 745,
619 710, 710, 710, 711, 710, 710, 710, 710, 710, 710,
620 710, 710, 710, 710, 710, 711, 746, 710, 711, 710,
621 710, 711, 710, 711, 711, 711, 711, 710, 711, 747,
622 711, 711, 711, 711, 711, 748, 749, 749, 750, 750,
623 751, 752, 753, 710, 710, 710, 711, 754, 710, 710,
624 710, 710, 711, 711, 710, 710, 711, 710, 367, 754,
625 367, 711, 711, 711, 715, 710, 710, 710, 710, 710,
626 755, 710, 716, 756, 756, 716, 716, 291, 710, 716,
628 716, 716, 716, 716, 757, 716, 716, 716, 716, 716,
629 758, 748, 758, 716, 716, 716, 716, 414, 414, 716,
630 716, 716, 715, 710, 759, 760, 761, 762, 763, 764,
631 765, 766, 710, 710, 710, 710, 710, 710, 710, 710,
632 711, 711, 711, 710, 711, 710, 711, 711, 767, 768,
633 768, 711, 711, 711, 769, 770, 710, 771, 710, 772,
634 710, 710, 711, 710, 710, 710, 710, 710, 711, 710,
635 772, 715, 710, 710, 710, 710, 710, 773, 774, 774,
636 414, 716, 716, 716, 716, 716, 775, 767, 775, 716,
637 716, 716, 776, 716, 716, 715, 710, 710, 760, 761,
639 761, 762, 762, 763, 763, 764, 764, 765, 765, 766,
640 766, 710, 710, 710, 710, 710, 710, 777, 710, 710,
641 711, 711, 778, 710, 710, 710, 710, 711, 711, 711,
642 711, 710, 710, 710, 710, 710, 710, 710, 715, 710,
643 710, 710, 773, 773, 774, 774, 716, 716, 716, 716,
644 779, 716, 716, 776, 715, 710, 710, 760, 710, 710,
645 710, 710, 710, 710, 710, 710, 710, 778, 778, 710,
646 710, 710, 710, 711, 711, 711, 711, 711, 715, 710,
647 710, 774, 774, 716, 716, 779, 716, 716, 716, 715,
648 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
650 780, 711, 710, 710, 774, 774, 781, 716, 715, 710,
651 710, 710, 710, 710, 782, 782, 780, 617, 711, 710,
652 710, 774, 774, 781, 782, 624, 716, 715, 710, 710,
653 782, 617, 617, 710, 710, 774, 774, 783, 624, 624,
654 715, 710, 710, 782, 782, 617, 617, 710, 710, 774,
655 774, 783, 783, 624, 624, 715, 710, 710, 782, 782,
656 617, 784, 710, 785, 774, 783, 783, 624, 715, 710,
657 710, 710, 782, 784, 710, 710, 785, 710, 774, 783,
658 783, 715, 710, 710, 774, 783, 715, 710, 774, 715,
659 786, 786, 786, 786, 786, 786, 786, 786, 786, 786,
661 786, 786, 786, 786, 786, 786, 786, 710, 710, 0,
662 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
663 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
664 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
665 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
666 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
667 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
668 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
669 710, 710, 710, 710, 710, 710
672 static yyconst short int yy_nxt[4467] =
674 4, 4, 4, 5, 4, 4, 6, 4, 7, 8,
675 4, 9, 10, 7, 4, 4, 11, 12, 13, 13,
676 13, 4, 14, 4, 4, 7, 15, 16, 17, 7,
677 7, 18, 7, 7, 19, 20, 21, 22, 23, 24,
678 22, 25, 26, 7, 27, 7, 28, 4, 4, 29,
679 30, 31, 32, 33, 34, 35, 36, 7, 19, 20,
680 21, 22, 37, 24, 25, 26, 7, 7, 27, 7,
681 38, 4, 4, 4, 4, 5, 4, 39, 6, 39,
682 7, 8, 4, 9, 10, 40, 4, 4, 41, 42,
683 43, 43, 43, 4, 44, 4, 4, 40, 45, 46,
685 47, 40, 40, 48, 40, 40, 49, 50, 51, 52,
686 53, 54, 52, 55, 56, 40, 57, 40, 28, 4,
687 4, 58, 59, 60, 61, 62, 63, 64, 65, 40,
688 49, 50, 51, 52, 66, 54, 55, 56, 40, 40,
689 57, 40, 67, 4, 68, 69, 69, 69, 69, 69,
690 72, 75, 76, 77, 102, 106, 709, 73, 73, 73,
691 73, 73, 710, 78, 122, 79, 80, 123, 68, 123,
692 122, 81, 82, 82, 83, 123, 362, 123, 103, 70,
693 107, 130, 70, 710, 84, 85, 86, 87, 87, 87,
694 87, 87, 88, 710, 710, 139, 70, 89, 70, 70,
696 70, 70, 70, 70, 70, 89, 70, 70, 89, 89,
697 89, 89, 89, 70, 70, 70, 70, 131, 70, 363,
698 89, 89, 89, 89, 89, 89, 89, 89, 70, 89,
699 70, 70, 89, 89, 89, 89, 70, 70, 70, 70,
700 70, 82, 92, 122, 109, 123, 389, 123, 94, 70,
701 70, 70, 70, 710, 390, 122, 123, 97, 123, 710,
702 92, 82, 91, 147, 70, 139, 132, 186, 187, 101,
703 93, 138, 94, 710, 95, 95, 95, 139, 96, 139,
704 102, 97, 108, 108, 108, 108, 108, 108, 108, 108,
705 70, 190, 662, 122, 171, 111, 112, 123, 178, 123,
707 153, 112, 93, 139, 103, 158, 98, 98, 98, 98,
708 98, 98, 98, 98, 710, 710, 99, 113, 114, 114,
709 114, 113, 113, 113, 113, 113, 113, 113, 113, 113,
710 115, 113, 113, 134, 710, 710, 196, 197, 113, 113,
711 113, 113, 70, 82, 82, 82, 154, 135, 135, 135,
712 135, 135, 191, 170, 70, 139, 77, 92, 171, 70,
713 91, 70, 70, 113, 117, 113, 140, 139, 79, 141,
714 138, 138, 139, 70, 142, 139, 688, 170, 159, 171,
715 205, 171, 206, 155, 162, 231, 139, 113, 113, 118,
716 138, 70, 134, 119, 119, 119, 157, 120, 170, 171,
718 70, 171, 136, 160, 139, 179, 193, 156, 194, 265,
719 164, 165, 154, 139, 195, 170, 165, 163, 171, 117,
720 171, 121, 205, 155, 606, 122, 123, 122, 122, 122,
721 122, 122, 122, 124, 271, 272, 170, 125, 125, 125,
722 171, 126, 171, 82, 82, 82, 330, 156, 69, 69,
723 69, 69, 69, 556, 180, 201, 331, 202, 82, 82,
724 82, 136, 678, 203, 331, 127, 218, 218, 218, 128,
725 129, 128, 129, 129, 129, 129, 129, 82, 82, 83,
726 226, 226, 226, 684, 70, 244, 244, 244, 675, 143,
727 85, 86, 144, 144, 144, 144, 144, 145, 256, 256,
729 256, 138, 146, 138, 138, 138, 138, 138, 138, 138,
730 146, 138, 138, 146, 146, 146, 146, 146, 138, 138,
731 138, 138, 277, 277, 277, 146, 146, 146, 146, 146,
732 146, 146, 146, 138, 146, 138, 138, 146, 146, 146,
733 146, 138, 138, 138, 138, 138, 92, 184, 311, 265,
734 91, 70, 186, 312, 134, 205, 148, 206, 94, 683,
735 149, 149, 149, 198, 150, 181, 184, 97, 135, 135,
736 135, 135, 135, 188, 188, 188, 188, 188, 189, 211,
737 211, 211, 211, 211, 211, 211, 211, 70, 148, 218,
738 218, 218, 151, 151, 151, 151, 151, 151, 151, 151,
740 139, 70, 152, 70, 207, 583, 208, 70, 82, 268,
741 94, 70, 209, 433, 139, 710, 139, 210, 70, 97,
742 710, 186, 312, 136, 139, 70, 710, 434, 207, 70,
743 208, 314, 315, 266, 267, 671, 209, 227, 139, 70,
744 210, 284, 139, 376, 161, 161, 161, 161, 161, 161,
745 161, 161, 70, 91, 244, 244, 244, 166, 305, 305,
746 305, 167, 167, 167, 281, 168, 212, 212, 212, 212,
747 212, 212, 212, 212, 216, 216, 216, 216, 216, 216,
748 216, 216, 277, 277, 277, 336, 336, 336, 375, 169,
749 220, 70, 377, 170, 171, 170, 170, 170, 170, 170,
751 170, 172, 360, 376, 139, 173, 173, 173, 623, 174,
752 217, 217, 217, 217, 217, 217, 217, 217, 235, 235,
753 235, 235, 235, 235, 235, 235, 337, 337, 337, 468,
754 286, 248, 278, 175, 70, 70, 117, 176, 177, 176,
755 177, 177, 177, 177, 177, 213, 360, 139, 139, 339,
756 339, 339, 466, 214, 243, 243, 243, 243, 243, 243,
757 243, 243, 123, 123, 123, 123, 123, 123, 123, 123,
758 340, 340, 340, 341, 341, 341, 280, 213, 469, 279,
759 117, 215, 215, 215, 215, 215, 215, 215, 215, 113,
760 114, 114, 114, 113, 113, 113, 113, 113, 113, 113,
762 113, 113, 113, 113, 113, 678, 348, 70, 70, 70,
763 113, 113, 113, 113, 249, 249, 249, 249, 249, 249,
764 249, 249, 254, 254, 254, 254, 254, 254, 254, 254,
765 349, 691, 134, 271, 272, 113, 117, 113, 255, 255,
766 255, 255, 255, 255, 255, 255, 135, 135, 135, 135,
767 135, 261, 314, 315, 349, 367, 367, 367, 676, 113,
768 113, 113, 232, 232, 232, 233, 70, 113, 113, 113,
769 113, 113, 113, 70, 269, 113, 113, 82, 70, 139,
770 70, 70, 113, 113, 70, 113, 139, 138, 444, 710,
771 70, 139, 70, 139, 139, 139, 91, 139, 134, 70,
773 136, 136, 138, 139, 675, 139, 446, 113, 117, 309,
774 139, 268, 139, 70, 273, 273, 273, 273, 273, 273,
775 273, 273, 285, 285, 285, 524, 139, 336, 336, 336,
776 446, 113, 113, 236, 138, 282, 70, 237, 70, 281,
777 287, 288, 283, 289, 70, 238, 445, 239, 524, 139,
778 240, 139, 343, 296, 296, 296, 480, 139, 240, 350,
779 343, 240, 455, 325, 240, 240, 468, 136, 70, 237,
780 70, 350, 350, 241, 242, 241, 241, 241, 241, 241,
781 241, 139, 240, 139, 343, 240, 366, 672, 240, 245,
782 308, 70, 268, 367, 367, 367, 117, 244, 244, 244,
784 296, 296, 296, 246, 139, 91, 247, 386, 265, 379,
785 379, 379, 387, 388, 247, 537, 265, 247, 70, 427,
786 247, 247, 290, 290, 290, 290, 290, 290, 290, 290,
787 247, 139, 91, 248, 314, 315, 279, 668, 247, 184,
788 311, 247, 91, 605, 247, 250, 188, 188, 188, 188,
789 188, 189, 479, 251, 216, 216, 216, 216, 216, 216,
790 216, 216, 243, 243, 243, 243, 243, 243, 243, 243,
791 232, 232, 232, 233, 381, 381, 381, 250, 403, 70,
792 428, 252, 253, 252, 252, 252, 252, 252, 252, 213,
793 545, 668, 139, 256, 256, 256, 265, 214, 171, 171,
795 171, 171, 171, 171, 171, 171, 299, 299, 299, 299,
796 299, 299, 299, 299, 376, 366, 117, 339, 339, 339,
797 663, 213, 379, 379, 379, 215, 257, 215, 215, 258,
798 215, 215, 215, 274, 91, 362, 662, 410, 396, 396,
799 396, 275, 254, 254, 254, 254, 254, 254, 254, 254,
800 304, 304, 304, 304, 304, 304, 304, 304, 419, 419,
801 419, 329, 447, 377, 375, 274, 70, 467, 661, 276,
802 276, 276, 276, 276, 276, 276, 276, 236, 363, 139,
803 70, 291, 522, 70, 70, 393, 448, 394, 478, 292,
804 478, 239, 375, 139, 293, 395, 139, 139, 70, 339,
806 339, 339, 293, 407, 91, 293, 522, 370, 293, 293,
807 374, 139, 70, 291, 440, 440, 440, 294, 295, 294,
808 294, 294, 294, 294, 294, 139, 293, 401, 406, 293,
809 184, 311, 293, 70, 245, 248, 70, 316, 316, 316,
810 316, 316, 296, 296, 296, 70, 139, 70, 246, 139,
811 70, 297, 366, 376, 396, 396, 396, 91, 139, 297,
812 139, 408, 297, 139, 637, 297, 297, 338, 338, 338,
813 338, 338, 338, 338, 338, 297, 348, 364, 298, 402,
814 70, 70, 375, 297, 512, 364, 297, 556, 364, 297,
815 300, 364, 364, 139, 139, 557, 513, 245, 301, 429,
817 404, 364, 417, 70, 91, 368, 368, 368, 70, 364,
818 91, 246, 364, 526, 661, 364, 139, 397, 397, 397,
819 546, 139, 300, 70, 404, 298, 302, 303, 302, 302,
820 302, 302, 302, 302, 274, 455, 139, 527, 305, 305,
821 305, 370, 275, 241, 241, 241, 241, 241, 241, 241,
822 241, 365, 365, 365, 365, 365, 365, 365, 365, 636,
823 430, 441, 441, 441, 658, 371, 274, 650, 405, 532,
824 276, 306, 276, 276, 307, 276, 276, 276, 342, 372,
825 405, 405, 460, 460, 460, 657, 343, 252, 252, 252,
826 252, 252, 252, 252, 252, 378, 378, 378, 378, 378,
828 378, 378, 378, 471, 471, 471, 518, 518, 518, 465,
829 342, 456, 456, 456, 344, 344, 344, 344, 344, 344,
830 344, 344, 356, 356, 236, 356, 356, 356, 356, 356,
831 563, 356, 356, 356, 356, 70, 356, 356, 467, 369,
832 422, 364, 564, 356, 356, 356, 356, 369, 139, 364,
833 369, 70, 364, 369, 369, 364, 364, 457, 245, 70,
834 414, 414, 414, 369, 139, 364, 461, 268, 356, 356,
835 356, 369, 139, 364, 369, 369, 364, 369, 70, 364,
836 462, 465, 655, 369, 654, 265, 369, 358, 649, 369,
837 369, 139, 356, 356, 113, 232, 232, 232, 233, 369,
839 113, 113, 113, 113, 113, 113, 134, 369, 113, 113,
840 369, 245, 134, 369, 648, 113, 113, 423, 113, 380,
841 380, 380, 544, 392, 544, 246, 385, 385, 385, 385,
842 385, 338, 338, 338, 338, 338, 338, 338, 338, 70,
843 113, 117, 302, 302, 302, 302, 302, 302, 302, 302,
844 431, 431, 139, 461, 331, 370, 647, 91, 70, 70,
845 646, 366, 331, 70, 113, 113, 371, 462, 414, 414,
846 414, 139, 139, 371, 77, 136, 139, 576, 91, 665,
847 372, 136, 70, 373, 473, 265, 79, 372, 643, 577,
848 409, 373, 81, 265, 373, 139, 70, 373, 373, 294,
850 294, 294, 294, 294, 294, 294, 294, 373, 582, 139,
851 374, 432, 432, 482, 70, 373, 70, 465, 373, 91,
852 91, 373, 342, 418, 418, 418, 268, 139, 642, 139,
853 343, 365, 365, 365, 365, 365, 365, 365, 365, 378,
854 378, 378, 378, 378, 378, 378, 378, 468, 184, 498,
855 441, 441, 441, 499, 342, 70, 635, 70, 344, 382,
856 344, 344, 383, 344, 344, 344, 398, 70, 139, 366,
857 139, 622, 679, 70, 399, 474, 418, 418, 418, 92,
858 139, 70, 70, 375, 70, 475, 139, 86, 634, 630,
859 397, 397, 397, 88, 139, 139, 469, 139, 398, 70,
861 491, 536, 400, 400, 400, 400, 400, 400, 400, 400,
862 356, 356, 139, 356, 356, 356, 356, 356, 357, 356,
863 356, 356, 356, 483, 356, 356, 298, 492, 91, 70,
864 134, 412, 356, 356, 356, 376, 184, 311, 397, 397,
865 397, 496, 139, 426, 426, 426, 426, 426, 344, 344,
866 344, 344, 344, 344, 344, 344, 356, 356, 356, 439,
867 439, 439, 439, 439, 439, 439, 439, 400, 400, 400,
868 400, 400, 400, 400, 400, 413, 134, 613, 464, 664,
869 356, 356, 70, 245, 417, 444, 464, 519, 539, 464,
870 70, 444, 464, 464, 70, 139, 70, 246, 629, 136,
872 297, 520, 464, 139, 70, 371, 91, 139, 297, 139,
873 464, 297, 467, 464, 297, 297, 464, 139, 134, 441,
874 441, 441, 464, 556, 297, 621, 620, 298, 485, 555,
875 464, 70, 297, 464, 70, 297, 464, 464, 297, 371,
876 481, 481, 481, 484, 139, 540, 464, 139, 70, 70,
877 467, 585, 486, 372, 464, 374, 415, 464, 265, 134,
878 464, 139, 139, 689, 415, 70, 70, 415, 619, 70,
879 415, 415, 468, 472, 472, 472, 472, 472, 139, 139,
880 415, 490, 139, 416, 456, 456, 456, 136, 415, 70,
881 201, 415, 202, 416, 415, 398, 615, 91, 203, 70,
883 615, 553, 139, 399, 439, 439, 439, 439, 439, 439,
884 439, 439, 139, 70, 550, 467, 70, 548, 567, 268,
885 549, 495, 481, 481, 481, 523, 139, 398, 136, 139,
886 457, 400, 420, 400, 400, 421, 400, 400, 400, 449,
887 449, 548, 449, 449, 449, 449, 449, 92, 449, 449,
888 449, 449, 70, 449, 449, 631, 651, 524, 416, 70,
889 449, 449, 449, 449, 70, 139, 525, 533, 533, 533,
890 468, 70, 139, 481, 481, 481, 614, 139, 70, 631,
891 524, 533, 533, 533, 139, 449, 449, 449, 184, 311,
892 70, 139, 451, 584, 612, 558, 558, 558, 558, 558,
894 544, 392, 544, 139, 451, 451, 613, 596, 693, 449,
895 449, 356, 356, 534, 356, 356, 356, 356, 356, 495,
896 356, 356, 356, 356, 552, 356, 356, 534, 535, 91,
897 566, 158, 356, 356, 356, 356, 535, 70, 566, 535,
898 70, 566, 535, 535, 566, 566, 611, 560, 70, 610,
899 139, 70, 535, 139, 566, 134, 134, 356, 356, 356,
900 535, 139, 566, 535, 139, 566, 535, 590, 566, 579,
901 579, 579, 579, 579, 607, 392, 631, 260, 589, 632,
902 664, 356, 356, 356, 356, 461, 356, 356, 356, 356,
903 356, 639, 356, 356, 356, 356, 587, 356, 356, 70,
905 631, 70, 535, 633, 356, 356, 356, 356, 588, 670,
906 535, 519, 139, 535, 139, 640, 535, 535, 91, 693,
907 604, 671, 134, 603, 136, 136, 535, 602, 566, 356,
908 356, 356, 134, 609, 535, 644, 566, 535, 577, 566,
909 535, 631, 566, 566, 70, 588, 579, 579, 579, 579,
910 579, 134, 566, 356, 356, 461, 607, 139, 70, 645,
911 566, 638, 628, 566, 392, 631, 566, 184, 498, 462,
912 601, 139, 463, 685, 558, 558, 558, 558, 558, 134,
913 463, 134, 673, 463, 631, 631, 463, 463, 260, 631,
914 641, 136, 656, 653, 631, 134, 463, 631, 392, 659,
916 392, 540, 608, 627, 463, 392, 669, 463, 631, 631,
917 463, 371, 392, 631, 660, 134, 601, 653, 631, 673,
918 136, 631, 600, 666, 599, 372, 682, 653, 373, 653,
919 631, 598, 686, 134, 653, 693, 373, 597, 569, 373,
920 392, 653, 373, 373, 687, 569, 680, 667, 136, 567,
921 136, 653, 373, 653, 631, 374, 392, 392, 653, 596,
922 373, 564, 595, 373, 136, 653, 373, 449, 449, 653,
923 449, 449, 449, 449, 449, 450, 449, 449, 449, 449,
924 594, 449, 449, 134, 136, 653, 653, 593, 488, 449,
925 449, 449, 592, 653, 690, 693, 591, 693, 681, 392,
927 693, 693, 136, 392, 708, 693, 694, 686, 695, 653,
928 653, 696, 697, 449, 449, 449, 698, 392, 581, 693,
929 489, 580, 262, 693, 693, 693, 537, 536, 578, 575,
930 699, 574, 489, 489, 700, 701, 702, 449, 449, 356,
931 356, 573, 356, 356, 356, 356, 356, 357, 356, 356,
932 356, 356, 136, 356, 356, 572, 571, 570, 569, 105,
933 412, 356, 356, 356, 260, 567, 260, 693, 693, 260,
934 260, 693, 693, 693, 260, 565, 562, 561, 703, 704,
935 560, 559, 705, 706, 707, 356, 356, 356, 260, 511,
936 511, 509, 260, 260, 260, 509, 507, 507, 505, 505,
938 503, 503, 501, 501, 392, 551, 542, 541, 205, 356,
939 356, 356, 356, 198, 356, 356, 356, 356, 356, 357,
940 356, 356, 356, 356, 466, 356, 356, 538, 465, 536,
941 459, 92, 412, 356, 356, 356, 260, 260, 531, 530,
942 260, 260, 260, 529, 528, 444, 92, 517, 516, 515,
943 514, 434, 511, 509, 507, 505, 503, 356, 356, 356,
944 501, 187, 497, 493, 392, 477, 476, 74, 199, 470,
945 370, 366, 459, 454, 453, 452, 199, 443, 442, 438,
946 437, 356, 356, 70, 461, 436, 435, 205, 205, 199,
947 198, 198, 198, 320, 320, 318, 139, 318, 462, 187,
949 424, 494, 264, 392, 264, 384, 366, 355, 354, 494,
950 353, 352, 494, 351, 347, 494, 494, 346, 345, 335,
951 334, 333, 332, 329, 329, 494, 328, 327, 326, 325,
952 325, 324, 323, 494, 322, 321, 494, 320, 318, 494,
953 371, 311, 310, 265, 264, 262, 260, 199, 259, 117,
954 230, 229, 228, 199, 372, 225, 224, 415, 223, 222,
955 222, 221, 220, 219, 91, 415, 205, 204, 415, 198,
956 199, 415, 415, 198, 192, 184, 182, 137, 110, 105,
957 104, 415, 101, 100, 416, 91, 74, 710, 710, 415,
958 710, 710, 415, 710, 710, 415, 519, 710, 710, 710,
960 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
961 520, 710, 710, 521, 710, 710, 710, 710, 710, 710,
962 710, 521, 710, 710, 521, 710, 710, 521, 521, 710,
963 710, 710, 710, 710, 710, 710, 710, 521, 710, 710,
964 710, 710, 710, 710, 710, 521, 710, 710, 521, 710,
965 710, 521, 449, 449, 710, 449, 449, 449, 449, 449,
966 710, 449, 449, 449, 449, 710, 449, 449, 710, 710,
967 710, 710, 710, 449, 449, 449, 449, 710, 710, 710,
968 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
969 710, 710, 710, 710, 710, 710, 710, 710, 449, 449,
971 449, 710, 710, 710, 710, 710, 710, 710, 710, 710,
972 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
973 710, 710, 449, 449, 449, 449, 710, 449, 449, 449,
974 449, 449, 710, 449, 449, 449, 449, 710, 449, 449,
975 710, 710, 710, 710, 710, 449, 449, 449, 449, 710,
976 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
977 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
978 449, 449, 449, 710, 710, 710, 710, 451, 710, 710,
979 710, 710, 710, 710, 710, 710, 710, 710, 710, 451,
980 451, 710, 710, 710, 449, 449, 519, 710, 710, 710,
982 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
983 520, 710, 710, 547, 710, 710, 710, 710, 710, 710,
984 710, 547, 710, 710, 547, 710, 710, 547, 547, 710,
985 710, 710, 710, 710, 710, 710, 710, 547, 710, 710,
986 710, 710, 710, 710, 710, 547, 710, 710, 547, 710,
987 710, 547, 449, 449, 710, 449, 449, 449, 449, 449,
988 450, 449, 449, 449, 449, 710, 449, 449, 710, 710,
989 710, 710, 710, 488, 449, 449, 449, 710, 710, 710,
990 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
991 710, 710, 710, 710, 710, 710, 710, 710, 449, 449,
993 449, 710, 710, 710, 710, 710, 710, 710, 710, 710,
994 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
995 710, 710, 449, 449, 449, 449, 710, 449, 449, 449,
996 449, 449, 450, 449, 449, 449, 449, 710, 449, 449,
997 710, 710, 710, 710, 710, 488, 449, 449, 449, 710,
998 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
999 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1000 449, 449, 449, 710, 710, 710, 710, 489, 710, 710,
1001 710, 710, 710, 710, 710, 710, 710, 710, 710, 489,
1002 489, 710, 710, 710, 449, 449, 616, 616, 710, 616,
1004 616, 616, 616, 616, 710, 616, 616, 616, 616, 710,
1005 616, 616, 710, 710, 710, 710, 710, 616, 616, 616,
1006 616, 710, 710, 710, 710, 710, 710, 618, 710, 710,
1007 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1008 710, 710, 616, 616, 616, 710, 710, 710, 710, 710,
1009 710, 618, 710, 710, 710, 710, 710, 710, 710, 710,
1010 710, 710, 710, 710, 710, 710, 616, 616, 616, 616,
1011 710, 616, 616, 616, 616, 616, 617, 616, 616, 616,
1012 616, 710, 616, 616, 710, 710, 710, 710, 710, 625,
1013 616, 616, 616, 710, 710, 710, 710, 710, 710, 626,
1015 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1016 710, 710, 710, 710, 616, 616, 616, 710, 710, 710,
1017 710, 710, 710, 626, 710, 710, 710, 710, 710, 710,
1018 710, 710, 710, 710, 710, 710, 710, 710, 616, 616,
1019 616, 616, 710, 616, 616, 616, 616, 616, 710, 616,
1020 616, 616, 616, 710, 616, 616, 710, 710, 710, 710,
1021 710, 616, 616, 616, 616, 710, 710, 710, 710, 710,
1022 710, 618, 710, 710, 710, 710, 710, 710, 710, 710,
1023 710, 710, 710, 710, 710, 710, 616, 616, 616, 710,
1024 710, 710, 710, 710, 710, 618, 710, 710, 710, 710,
1026 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1027 616, 616, 616, 616, 710, 616, 616, 616, 616, 616,
1028 617, 616, 616, 616, 616, 710, 616, 616, 710, 710,
1029 710, 710, 710, 625, 616, 616, 616, 710, 710, 710,
1030 710, 710, 710, 626, 710, 710, 710, 710, 710, 710,
1031 710, 710, 710, 710, 710, 710, 710, 710, 616, 616,
1032 616, 710, 710, 710, 710, 710, 710, 626, 710, 710,
1033 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1034 710, 710, 616, 616, 70, 710, 710, 70, 70, 710,
1035 710, 70, 70, 70, 70, 70, 71, 71, 71, 71,
1037 71, 710, 71, 71, 71, 71, 71, 71, 71, 71,
1038 71, 90, 90, 90, 90, 90, 90, 90, 90, 90,
1039 90, 90, 90, 90, 90, 90, 116, 116, 116, 116,
1040 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
1041 116, 133, 133, 133, 133, 133, 133, 133, 133, 133,
1042 133, 133, 133, 133, 133, 133, 138, 710, 710, 138,
1043 138, 138, 710, 138, 138, 138, 138, 138, 183, 183,
1044 183, 183, 183, 710, 183, 183, 183, 183, 183, 183,
1045 183, 183, 183, 185, 185, 185, 185, 185, 185, 185,
1046 185, 185, 185, 185, 185, 185, 185, 185, 200, 200,
1048 710, 710, 710, 710, 710, 710, 710, 200, 200, 200,
1049 200, 200, 113, 113, 113, 113, 113, 113, 113, 113,
1050 113, 113, 113, 113, 113, 113, 113, 234, 234, 234,
1051 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1052 234, 234, 134, 134, 134, 134, 134, 134, 134, 134,
1053 134, 134, 134, 134, 134, 134, 134, 263, 263, 263,
1054 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
1055 263, 263, 270, 270, 270, 270, 270, 270, 270, 270,
1056 270, 270, 270, 270, 270, 270, 270, 185, 185, 185,
1057 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
1059 185, 185, 186, 186, 186, 186, 186, 186, 186, 186,
1060 186, 186, 186, 186, 186, 186, 186, 313, 313, 313,
1061 313, 313, 313, 313, 313, 313, 313, 313, 313, 313,
1062 313, 313, 317, 317, 710, 317, 317, 317, 317, 317,
1063 317, 317, 317, 317, 317, 317, 317, 319, 319, 710,
1064 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
1065 319, 319, 357, 357, 710, 357, 357, 357, 357, 357,
1066 357, 357, 357, 357, 357, 357, 357, 359, 359, 359,
1067 359, 359, 359, 359, 359, 359, 359, 359, 359, 359,
1068 359, 359, 113, 113, 113, 113, 113, 113, 113, 113,
1070 113, 113, 113, 113, 113, 113, 113, 361, 361, 361,
1071 361, 361, 361, 361, 361, 361, 361, 361, 361, 361,
1072 361, 361, 234, 234, 234, 234, 234, 234, 234, 234,
1073 234, 234, 234, 234, 234, 234, 234, 369, 710, 710,
1074 369, 710, 369, 369, 710, 710, 369, 369, 263, 263,
1075 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
1076 263, 263, 263, 391, 391, 391, 391, 391, 391, 391,
1077 391, 391, 391, 391, 391, 391, 391, 391, 270, 270,
1078 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
1079 270, 270, 270, 90, 90, 90, 90, 90, 90, 90,
1081 90, 90, 90, 90, 90, 90, 90, 90, 411, 411,
1082 710, 411, 411, 411, 411, 411, 411, 411, 411, 411,
1083 411, 411, 411, 313, 313, 313, 313, 313, 313, 313,
1084 313, 313, 313, 313, 313, 313, 313, 313, 425, 425,
1085 425, 425, 710, 425, 425, 425, 425, 425, 425, 425,
1086 425, 425, 425, 183, 183, 183, 183, 183, 183, 183,
1087 183, 183, 183, 183, 183, 183, 183, 183, 317, 317,
1088 710, 317, 317, 317, 317, 317, 317, 317, 317, 317,
1089 317, 317, 317, 319, 319, 710, 319, 319, 319, 319,
1090 319, 319, 319, 319, 319, 319, 319, 319, 439, 710,
1092 439, 710, 710, 710, 439, 439, 439, 450, 450, 710,
1093 450, 450, 450, 450, 450, 450, 450, 450, 450, 450,
1094 450, 450, 356, 356, 710, 356, 356, 356, 356, 356,
1095 356, 356, 356, 356, 356, 356, 356, 357, 357, 710,
1096 357, 357, 357, 357, 357, 357, 357, 357, 357, 357,
1097 357, 357, 359, 359, 359, 359, 359, 359, 359, 359,
1098 359, 359, 359, 359, 359, 359, 359, 361, 361, 361,
1099 361, 361, 361, 361, 361, 361, 361, 361, 361, 361,
1100 361, 361, 113, 113, 113, 113, 113, 113, 113, 113,
1101 113, 113, 113, 113, 113, 113, 113, 458, 458, 458,
1103 458, 458, 458, 458, 458, 458, 458, 458, 458, 458,
1104 458, 458, 464, 710, 710, 710, 710, 464, 464, 710,
1105 710, 464, 464, 391, 391, 391, 391, 391, 391, 391,
1106 391, 391, 391, 391, 391, 391, 391, 391, 90, 90,
1107 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
1108 90, 90, 90, 487, 487, 710, 487, 487, 487, 487,
1109 487, 487, 487, 487, 487, 487, 487, 487, 411, 411,
1110 710, 411, 411, 411, 411, 411, 411, 411, 411, 411,
1111 411, 411, 411, 425, 425, 425, 425, 710, 425, 425,
1112 425, 425, 425, 425, 425, 425, 425, 425, 183, 183,
1114 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
1115 183, 183, 183, 500, 500, 710, 500, 500, 500, 500,
1116 500, 500, 500, 500, 500, 500, 500, 500, 502, 502,
1117 710, 502, 502, 502, 502, 502, 502, 502, 502, 502,
1118 502, 502, 502, 504, 504, 710, 504, 504, 504, 504,
1119 504, 504, 504, 504, 504, 504, 504, 504, 506, 506,
1120 710, 506, 506, 506, 506, 506, 506, 506, 506, 506,
1121 506, 506, 506, 508, 508, 710, 508, 508, 508, 508,
1122 508, 508, 508, 508, 508, 508, 508, 508, 510, 510,
1123 710, 510, 510, 510, 510, 510, 510, 510, 510, 510,
1125 510, 510, 510, 449, 449, 710, 449, 449, 449, 449,
1126 449, 449, 449, 449, 449, 449, 449, 449, 450, 450,
1127 710, 450, 450, 450, 450, 450, 450, 450, 450, 450,
1128 450, 450, 450, 359, 359, 359, 359, 359, 359, 359,
1129 359, 359, 359, 359, 359, 359, 359, 359, 113, 113,
1130 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
1131 113, 113, 113, 458, 458, 458, 458, 458, 458, 458,
1132 458, 458, 458, 458, 458, 458, 458, 458, 535, 710,
1133 710, 710, 710, 535, 535, 710, 710, 535, 543, 543,
1134 543, 543, 543, 543, 543, 543, 543, 543, 543, 543,
1136 543, 543, 543, 90, 90, 90, 90, 90, 90, 90,
1137 90, 90, 90, 90, 90, 90, 90, 90, 487, 487,
1138 710, 487, 487, 487, 487, 487, 487, 487, 487, 487,
1139 487, 487, 487, 554, 554, 554, 554, 554, 554, 554,
1140 554, 554, 554, 554, 554, 554, 554, 554, 566, 710,
1141 710, 710, 710, 566, 566, 710, 710, 566, 568, 568,
1142 710, 568, 568, 568, 568, 568, 568, 568, 568, 568,
1143 568, 568, 568, 586, 586, 586, 586, 586, 586, 586,
1144 586, 586, 586, 586, 586, 586, 586, 586, 617, 617,
1145 710, 617, 617, 617, 617, 617, 617, 617, 617, 617,
1147 617, 617, 617, 624, 624, 710, 624, 624, 624, 624,
1148 624, 624, 624, 624, 624, 624, 624, 624, 616, 616,
1149 710, 616, 616, 616, 616, 616, 616, 616, 616, 616,
1150 616, 616, 616, 652, 652, 652, 652, 652, 652, 652,
1151 652, 652, 652, 652, 652, 652, 652, 652, 674, 674,
1152 674, 674, 674, 674, 674, 674, 674, 674, 674, 674,
1153 674, 674, 674, 677, 677, 677, 677, 677, 677, 677,
1154 677, 677, 677, 677, 677, 677, 677, 677, 692, 692,
1155 692, 692, 692, 692, 692, 692, 692, 692, 692, 692,
1156 692, 692, 692, 3, 710, 710, 710, 710, 710, 710,
1158 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1159 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1160 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1161 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1162 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1163 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1164 710, 710, 710, 710, 710, 710
1167 static yyconst short int yy_chk[4467] =
1169 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1170 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1171 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1172 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1173 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1174 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1175 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1176 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
1177 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1178 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1180 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1181 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1182 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1183 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1184 2, 2, 2, 2, 5, 6, 6, 6, 6, 6,
1185 8, 10, 10, 11, 18, 23, 708, 8, 8, 8,
1186 8, 8, 19, 11, 34, 11, 11, 34, 5, 34,
1187 36, 11, 12, 12, 12, 36, 233, 31, 18, 12,
1188 23, 31, 40, 19, 12, 12, 12, 12, 12, 12,
1189 12, 12, 12, 22, 25, 40, 12, 12, 12, 12,
1191 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
1192 12, 12, 12, 12, 12, 12, 12, 37, 19, 233,
1193 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
1194 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
1195 12, 13, 27, 33, 25, 33, 264, 33, 24, 22,
1196 25, 13, 46, 13, 264, 32, 32, 24, 32, 13,
1197 15, 43, 44, 44, 51, 46, 37, 72, 72, 32,
1198 15, 43, 15, 43, 15, 15, 15, 51, 15, 43,
1199 35, 15, 24, 24, 24, 24, 24, 24, 24, 24,
1200 47, 74, 688, 35, 60, 27, 27, 35, 60, 35,
1202 46, 27, 15, 47, 35, 51, 15, 15, 15, 15,
1203 15, 15, 15, 15, 49, 52, 15, 28, 28, 28,
1204 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1205 28, 28, 28, 38, 55, 49, 78, 78, 28, 28,
1206 28, 28, 50, 82, 82, 82, 47, 38, 38, 38,
1207 38, 38, 74, 65, 48, 50, 41, 57, 65, 56,
1208 583, 41, 57, 28, 28, 28, 41, 48, 41, 41,
1209 49, 52, 56, 53, 41, 57, 684, 62, 53, 62,
1210 86, 62, 86, 48, 55, 115, 53, 28, 28, 29,
1211 55, 138, 133, 29, 29, 29, 50, 29, 61, 61,
1213 66, 61, 38, 53, 138, 66, 77, 48, 77, 145,
1214 57, 57, 61, 66, 77, 63, 57, 56, 63, 115,
1215 63, 29, 145, 64, 583, 29, 29, 29, 29, 29,
1216 29, 29, 29, 30, 147, 147, 64, 30, 30, 30,
1217 64, 30, 64, 83, 83, 83, 206, 64, 69, 69,
1218 69, 69, 69, 683, 66, 83, 206, 83, 85, 85,
1219 85, 133, 677, 83, 206, 30, 98, 98, 98, 30,
1220 30, 30, 30, 30, 30, 30, 30, 42, 42, 42,
1221 108, 108, 108, 676, 42, 122, 122, 122, 674, 42,
1222 42, 42, 42, 42, 42, 42, 42, 42, 129, 129,
1224 129, 42, 42, 42, 42, 42, 42, 42, 42, 42,
1225 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
1226 42, 42, 151, 151, 151, 42, 42, 42, 42, 42,
1227 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
1228 42, 42, 42, 42, 42, 42, 45, 183, 183, 142,
1229 546, 45, 184, 184, 67, 327, 45, 327, 45, 672,
1230 45, 45, 45, 142, 45, 67, 73, 45, 67, 67,
1231 67, 67, 67, 73, 73, 73, 73, 73, 73, 93,
1232 93, 93, 93, 93, 93, 93, 93, 146, 45, 109,
1233 109, 109, 45, 45, 45, 45, 45, 45, 45, 45,
1235 146, 141, 45, 54, 92, 546, 92, 213, 87, 141,
1236 54, 159, 92, 331, 141, 213, 54, 92, 87, 54,
1237 87, 185, 185, 67, 159, 140, 87, 331, 92, 155,
1238 92, 187, 187, 140, 140, 670, 92, 109, 140, 213,
1239 92, 159, 155, 248, 54, 54, 54, 54, 54, 54,
1240 54, 54, 58, 606, 130, 130, 130, 58, 177, 177,
1241 177, 58, 58, 58, 155, 58, 94, 94, 94, 94,
1242 94, 94, 94, 94, 96, 96, 96, 96, 96, 96,
1243 96, 96, 162, 162, 162, 211, 211, 211, 247, 58,
1244 130, 152, 248, 58, 58, 58, 58, 58, 58, 58,
1246 58, 59, 231, 370, 152, 59, 59, 59, 606, 59,
1247 97, 97, 97, 97, 97, 97, 97, 97, 118, 118,
1248 118, 118, 118, 118, 118, 118, 212, 212, 212, 374,
1249 162, 247, 152, 59, 153, 154, 231, 59, 59, 59,
1250 59, 59, 59, 59, 59, 95, 359, 153, 154, 215,
1251 215, 215, 370, 95, 120, 120, 120, 120, 120, 120,
1252 120, 120, 121, 121, 121, 121, 121, 121, 121, 121,
1253 216, 216, 216, 217, 217, 217, 154, 95, 374, 153,
1254 359, 95, 95, 95, 95, 95, 95, 95, 95, 114,
1255 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
1257 114, 114, 114, 114, 114, 664, 222, 235, 235, 235,
1258 114, 114, 114, 114, 124, 124, 124, 124, 124, 124,
1259 124, 124, 126, 126, 126, 126, 126, 126, 126, 126,
1260 222, 690, 135, 270, 270, 114, 114, 114, 127, 127,
1261 127, 127, 127, 127, 127, 127, 135, 135, 135, 135,
1262 135, 135, 312, 312, 222, 241, 241, 241, 663, 114,
1263 114, 116, 116, 116, 116, 116, 143, 116, 116, 116,
1264 116, 116, 116, 148, 143, 116, 116, 144, 157, 143,
1265 156, 160, 116, 116, 158, 116, 148, 144, 347, 144,
1266 165, 157, 164, 156, 160, 144, 395, 158, 181, 163,
1268 690, 135, 274, 165, 662, 164, 348, 116, 116, 181,
1269 274, 160, 163, 161, 148, 148, 148, 148, 148, 148,
1270 148, 148, 161, 161, 161, 598, 161, 249, 249, 249,
1271 348, 116, 116, 119, 274, 157, 179, 119, 180, 156,
1272 163, 164, 158, 165, 170, 119, 347, 119, 598, 179,
1273 119, 180, 337, 170, 170, 170, 395, 170, 119, 223,
1274 337, 119, 360, 267, 119, 119, 465, 181, 267, 119,
1275 268, 223, 223, 119, 119, 119, 119, 119, 119, 119,
1276 119, 267, 119, 268, 337, 119, 242, 658, 119, 123,
1277 179, 178, 180, 242, 242, 242, 360, 123, 123, 123,
1279 178, 178, 178, 123, 178, 394, 123, 262, 150, 252,
1280 252, 252, 262, 262, 123, 465, 168, 123, 280, 325,
1281 123, 123, 166, 166, 166, 166, 166, 166, 166, 166,
1282 123, 280, 479, 123, 313, 313, 178, 655, 123, 188,
1283 188, 123, 582, 582, 123, 125, 188, 188, 188, 188,
1284 188, 188, 394, 125, 150, 150, 150, 150, 150, 150,
1285 150, 150, 168, 168, 168, 168, 168, 168, 168, 168,
1286 232, 232, 232, 232, 255, 255, 255, 125, 280, 288,
1287 325, 125, 125, 125, 125, 125, 125, 125, 125, 128,
1288 479, 654, 288, 128, 128, 128, 174, 128, 169, 169,
1290 169, 169, 169, 169, 169, 169, 172, 172, 172, 172,
1291 172, 172, 172, 172, 258, 253, 232, 258, 258, 258,
1292 649, 128, 253, 253, 253, 128, 128, 128, 128, 128,
1293 128, 128, 128, 149, 272, 361, 648, 288, 299, 299,
1294 299, 149, 174, 174, 174, 174, 174, 174, 174, 174,
1295 175, 175, 175, 175, 175, 175, 175, 175, 304, 304,
1296 304, 269, 349, 258, 369, 149, 269, 373, 647, 149,
1297 149, 149, 149, 149, 149, 149, 149, 167, 361, 269,
1298 266, 167, 443, 283, 278, 266, 349, 272, 392, 167,
1299 392, 167, 257, 266, 167, 272, 283, 278, 284, 257,
1301 257, 257, 167, 284, 623, 167, 443, 369, 167, 167,
1302 373, 284, 286, 167, 338, 338, 338, 167, 167, 167,
1303 167, 167, 167, 167, 167, 286, 167, 278, 283, 167,
1304 189, 189, 167, 171, 171, 257, 279, 189, 189, 189,
1305 189, 189, 171, 171, 171, 273, 171, 298, 171, 279,
1306 293, 171, 293, 298, 273, 273, 273, 480, 273, 171,
1307 298, 286, 171, 293, 623, 171, 171, 214, 214, 214,
1308 214, 214, 214, 214, 214, 171, 281, 236, 171, 279,
1309 297, 281, 297, 171, 434, 236, 171, 497, 236, 171,
1310 173, 236, 236, 297, 281, 497, 434, 243, 173, 329,
1312 281, 236, 298, 396, 622, 243, 243, 243, 276, 236,
1313 636, 243, 236, 446, 646, 236, 396, 276, 276, 276,
1314 480, 276, 173, 282, 281, 297, 173, 173, 173, 173,
1315 173, 173, 173, 173, 176, 455, 282, 446, 176, 176,
1316 176, 243, 176, 237, 237, 237, 237, 237, 237, 237,
1317 237, 238, 238, 238, 238, 238, 238, 238, 238, 622,
1318 329, 344, 344, 344, 643, 368, 176, 636, 282, 455,
1319 176, 176, 176, 176, 176, 176, 176, 176, 218, 368,
1320 282, 282, 365, 365, 365, 642, 218, 250, 250, 250,
1321 250, 250, 250, 250, 250, 251, 251, 251, 251, 251,
1323 251, 251, 251, 378, 378, 378, 439, 439, 439, 368,
1324 218, 362, 362, 362, 218, 218, 218, 218, 218, 218,
1325 218, 218, 230, 230, 239, 230, 230, 230, 230, 230,
1326 516, 230, 230, 230, 230, 308, 230, 230, 464, 245,
1327 308, 239, 516, 230, 230, 230, 230, 245, 308, 239,
1328 245, 294, 239, 245, 245, 239, 239, 362, 246, 393,
1329 294, 294, 294, 245, 294, 239, 460, 393, 230, 230,
1330 230, 245, 393, 239, 245, 246, 239, 245, 397, 239,
1331 460, 464, 640, 246, 639, 275, 246, 230, 635, 246,
1332 246, 397, 230, 230, 234, 234, 234, 234, 234, 246,
1334 234, 234, 234, 234, 234, 234, 309, 246, 234, 234,
1335 246, 254, 261, 246, 634, 234, 234, 309, 234, 254,
1336 254, 254, 478, 478, 478, 254, 261, 261, 261, 261,
1337 261, 275, 275, 275, 275, 275, 275, 275, 275, 287,
1338 234, 234, 300, 300, 300, 300, 300, 300, 300, 300,
1339 330, 593, 287, 471, 330, 254, 633, 545, 291, 295,
1340 632, 295, 330, 401, 234, 234, 244, 471, 295, 295,
1341 295, 291, 295, 380, 387, 309, 401, 530, 651, 651,
1342 244, 261, 406, 244, 387, 292, 387, 380, 630, 530,
1343 287, 244, 387, 301, 244, 406, 407, 244, 244, 291,
1345 291, 291, 291, 291, 291, 291, 291, 244, 545, 407,
1346 244, 330, 593, 401, 302, 244, 417, 380, 244, 605,
1347 665, 244, 256, 302, 302, 302, 407, 302, 629, 417,
1348 256, 292, 292, 292, 292, 292, 292, 292, 292, 301,
1349 301, 301, 301, 301, 301, 301, 301, 383, 426, 426,
1350 383, 383, 383, 426, 256, 409, 621, 495, 256, 256,
1351 256, 256, 256, 256, 256, 256, 277, 303, 409, 303,
1352 495, 605, 665, 402, 277, 388, 303, 303, 303, 482,
1353 303, 306, 410, 306, 482, 388, 402, 388, 620, 614,
1354 306, 306, 306, 388, 306, 410, 383, 482, 277, 494,
1356 409, 494, 277, 277, 277, 277, 277, 277, 277, 277,
1357 289, 289, 494, 289, 289, 289, 289, 289, 289, 289,
1358 289, 289, 289, 402, 289, 289, 306, 410, 650, 307,
1359 423, 289, 289, 289, 289, 307, 316, 316, 307, 307,
1360 307, 423, 307, 316, 316, 316, 316, 316, 342, 342,
1361 342, 342, 342, 342, 342, 342, 289, 289, 289, 343,
1362 343, 343, 343, 343, 343, 343, 343, 398, 398, 398,
1363 398, 398, 398, 398, 398, 289, 472, 612, 371, 650,
1364 289, 289, 290, 290, 307, 403, 371, 518, 472, 371,
1365 403, 484, 371, 371, 550, 290, 484, 290, 611, 423,
1367 290, 518, 371, 403, 404, 372, 685, 550, 290, 484,
1368 371, 290, 382, 371, 290, 290, 371, 404, 496, 382,
1369 382, 382, 372, 610, 290, 604, 603, 290, 404, 496,
1370 372, 400, 290, 372, 408, 290, 372, 372, 290, 296,
1371 400, 400, 400, 403, 400, 472, 372, 408, 415, 491,
1372 415, 550, 404, 296, 372, 382, 296, 372, 399, 385,
1373 372, 415, 491, 685, 296, 422, 416, 296, 602, 486,
1374 296, 296, 416, 385, 385, 385, 385, 385, 422, 416,
1375 296, 408, 486, 296, 456, 456, 456, 496, 296, 483,
1376 474, 296, 474, 415, 296, 305, 600, 637, 474, 485,
1378 599, 491, 483, 305, 399, 399, 399, 399, 399, 399,
1379 399, 399, 485, 420, 486, 420, 547, 483, 547, 422,
1380 485, 416, 420, 420, 420, 444, 420, 305, 385, 547,
1381 456, 305, 305, 305, 305, 305, 305, 305, 305, 350,
1382 350, 483, 350, 350, 350, 350, 350, 492, 350, 350,
1383 350, 350, 492, 350, 350, 615, 637, 444, 420, 549,
1384 350, 350, 350, 350, 421, 492, 444, 459, 459, 459,
1385 421, 490, 549, 421, 421, 421, 597, 421, 588, 615,
1386 444, 533, 533, 533, 490, 350, 350, 350, 499, 499,
1387 548, 588, 350, 549, 596, 499, 499, 499, 499, 499,
1389 544, 544, 544, 548, 350, 350, 596, 595, 691, 350,
1390 350, 357, 357, 459, 357, 357, 357, 357, 357, 421,
1391 357, 357, 357, 357, 490, 357, 357, 533, 461, 689,
1392 519, 548, 357, 357, 357, 357, 461, 553, 519, 461,
1393 584, 519, 461, 461, 519, 519, 594, 592, 627, 591,
1394 553, 552, 461, 584, 519, 539, 555, 357, 357, 357,
1395 461, 627, 519, 461, 552, 519, 461, 555, 519, 539,
1396 539, 539, 539, 539, 584, 586, 616, 691, 553, 618,
1397 689, 357, 357, 358, 358, 462, 358, 358, 358, 358,
1398 358, 626, 358, 358, 358, 358, 552, 358, 358, 585,
1400 616, 587, 462, 618, 358, 358, 358, 358, 552, 657,
1401 462, 520, 585, 462, 587, 626, 462, 462, 679, 692,
1402 581, 657, 590, 580, 539, 555, 462, 578, 520, 358,
1403 358, 358, 579, 590, 462, 631, 520, 462, 576, 520,
1404 462, 631, 520, 520, 589, 587, 579, 579, 579, 579,
1405 579, 609, 520, 358, 358, 367, 585, 589, 608, 631,
1406 520, 625, 609, 520, 638, 631, 520, 558, 558, 367,
1407 575, 608, 367, 679, 558, 558, 558, 558, 558, 628,
1408 367, 641, 659, 367, 659, 645, 367, 367, 692, 625,
1409 628, 590, 641, 638, 644, 656, 367, 660, 652, 644,
1411 653, 579, 589, 608, 367, 680, 656, 367, 659, 645,
1412 367, 381, 666, 625, 645, 669, 574, 638, 644, 660,
1413 609, 660, 573, 653, 572, 381, 669, 652, 381, 653,
1414 673, 571, 680, 682, 680, 707, 381, 570, 569, 381,
1415 667, 666, 381, 381, 682, 568, 666, 653, 628, 566,
1416 641, 652, 381, 653, 673, 381, 681, 686, 680, 565,
1417 381, 563, 562, 381, 656, 666, 381, 405, 405, 667,
1418 405, 405, 405, 405, 405, 405, 405, 405, 405, 405,
1419 561, 405, 405, 687, 669, 681, 686, 560, 405, 405,
1420 405, 405, 559, 667, 687, 693, 557, 694, 667, 554,
1422 695, 696, 682, 551, 707, 697, 693, 681, 694, 681,
1423 686, 695, 696, 405, 405, 405, 697, 543, 542, 698,
1424 405, 541, 540, 699, 700, 701, 538, 535, 531, 529,
1425 698, 528, 405, 405, 699, 700, 701, 405, 405, 411,
1426 411, 527, 411, 411, 411, 411, 411, 411, 411, 411,
1427 411, 411, 687, 411, 411, 526, 525, 524, 523, 522,
1428 411, 411, 411, 411, 693, 521, 694, 702, 703, 695,
1429 696, 704, 705, 706, 697, 517, 515, 514, 702, 703,
1430 513, 512, 704, 705, 706, 411, 411, 411, 698, 511,
1431 510, 509, 699, 700, 701, 508, 507, 506, 505, 504,
1433 503, 502, 501, 500, 493, 488, 477, 476, 475, 411,
1434 411, 413, 413, 473, 413, 413, 413, 413, 413, 413,
1435 413, 413, 413, 413, 470, 413, 413, 468, 467, 463,
1436 458, 454, 413, 413, 413, 413, 702, 703, 453, 452,
1437 704, 705, 706, 448, 447, 445, 442, 438, 437, 436,
1438 435, 433, 432, 431, 430, 429, 428, 413, 413, 413,
1439 427, 425, 424, 412, 391, 390, 389, 386, 384, 376,
1440 375, 364, 363, 355, 354, 353, 352, 346, 345, 335,
1441 334, 413, 413, 414, 414, 333, 332, 328, 326, 324,
1442 323, 322, 321, 320, 319, 318, 414, 317, 414, 314,
1444 310, 414, 271, 265, 263, 259, 240, 229, 228, 414,
1445 227, 225, 414, 224, 221, 414, 414, 220, 219, 210,
1446 209, 208, 207, 205, 204, 414, 203, 202, 201, 198,
1447 197, 196, 195, 414, 194, 193, 414, 191, 190, 414,
1448 419, 186, 182, 139, 137, 136, 134, 132, 131, 113,
1449 112, 111, 110, 107, 419, 106, 105, 419, 104, 103,
1450 102, 101, 100, 99, 90, 419, 88, 84, 419, 81,
1451 80, 419, 419, 79, 76, 71, 68, 39, 26, 21,
1452 20, 419, 17, 16, 419, 14, 9, 3, 0, 419,
1453 0, 0, 419, 0, 0, 419, 441, 0, 0, 0,
1455 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1456 441, 0, 0, 441, 0, 0, 0, 0, 0, 0,
1457 0, 441, 0, 0, 441, 0, 0, 441, 441, 0,
1458 0, 0, 0, 0, 0, 0, 0, 441, 0, 0,
1459 0, 0, 0, 0, 0, 441, 0, 0, 441, 0,
1460 0, 441, 450, 450, 0, 450, 450, 450, 450, 450,
1461 0, 450, 450, 450, 450, 0, 450, 450, 0, 0,
1462 0, 0, 0, 450, 450, 450, 450, 0, 0, 0,
1463 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1464 0, 0, 0, 0, 0, 0, 0, 0, 450, 450,
1466 450, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1467 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1468 0, 0, 450, 450, 451, 451, 0, 451, 451, 451,
1469 451, 451, 0, 451, 451, 451, 451, 0, 451, 451,
1470 0, 0, 0, 0, 0, 451, 451, 451, 451, 0,
1471 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1472 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1473 451, 451, 451, 0, 0, 0, 0, 451, 0, 0,
1474 0, 0, 0, 0, 0, 0, 0, 0, 0, 451,
1475 451, 0, 0, 0, 451, 451, 481, 0, 0, 0,
1477 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1478 481, 0, 0, 481, 0, 0, 0, 0, 0, 0,
1479 0, 481, 0, 0, 481, 0, 0, 481, 481, 0,
1480 0, 0, 0, 0, 0, 0, 0, 481, 0, 0,
1481 0, 0, 0, 0, 0, 481, 0, 0, 481, 0,
1482 0, 481, 487, 487, 0, 487, 487, 487, 487, 487,
1483 487, 487, 487, 487, 487, 0, 487, 487, 0, 0,
1484 0, 0, 0, 487, 487, 487, 487, 0, 0, 0,
1485 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1486 0, 0, 0, 0, 0, 0, 0, 0, 487, 487,
1488 487, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1489 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1490 0, 0, 487, 487, 489, 489, 0, 489, 489, 489,
1491 489, 489, 489, 489, 489, 489, 489, 0, 489, 489,
1492 0, 0, 0, 0, 0, 489, 489, 489, 489, 0,
1493 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1494 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1495 489, 489, 489, 0, 0, 0, 0, 489, 0, 0,
1496 0, 0, 0, 0, 0, 0, 0, 0, 0, 489,
1497 489, 0, 0, 0, 489, 489, 601, 601, 0, 601,
1499 601, 601, 601, 601, 0, 601, 601, 601, 601, 0,
1500 601, 601, 0, 0, 0, 0, 0, 601, 601, 601,
1501 601, 0, 0, 0, 0, 0, 0, 601, 0, 0,
1502 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1503 0, 0, 601, 601, 601, 0, 0, 0, 0, 0,
1504 0, 601, 0, 0, 0, 0, 0, 0, 0, 0,
1505 0, 0, 0, 0, 0, 0, 601, 601, 607, 607,
1506 0, 607, 607, 607, 607, 607, 607, 607, 607, 607,
1507 607, 0, 607, 607, 0, 0, 0, 0, 0, 607,
1508 607, 607, 607, 0, 0, 0, 0, 0, 0, 607,
1510 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1511 0, 0, 0, 0, 607, 607, 607, 0, 0, 0,
1512 0, 0, 0, 607, 0, 0, 0, 0, 0, 0,
1513 0, 0, 0, 0, 0, 0, 0, 0, 607, 607,
1514 617, 617, 0, 617, 617, 617, 617, 617, 0, 617,
1515 617, 617, 617, 0, 617, 617, 0, 0, 0, 0,
1516 0, 617, 617, 617, 617, 0, 0, 0, 0, 0,
1517 0, 617, 0, 0, 0, 0, 0, 0, 0, 0,
1518 0, 0, 0, 0, 0, 0, 617, 617, 617, 0,
1519 0, 0, 0, 0, 0, 617, 0, 0, 0, 0,
1521 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1522 617, 617, 624, 624, 0, 624, 624, 624, 624, 624,
1523 624, 624, 624, 624, 624, 0, 624, 624, 0, 0,
1524 0, 0, 0, 624, 624, 624, 624, 0, 0, 0,
1525 0, 0, 0, 624, 0, 0, 0, 0, 0, 0,
1526 0, 0, 0, 0, 0, 0, 0, 0, 624, 624,
1527 624, 0, 0, 0, 0, 0, 0, 624, 0, 0,
1528 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1529 0, 0, 624, 624, 711, 0, 0, 711, 711, 0,
1530 0, 711, 711, 711, 711, 711, 712, 712, 712, 712,
1532 712, 0, 712, 712, 712, 712, 712, 712, 712, 712,
1533 712, 713, 713, 713, 713, 713, 713, 713, 713, 713,
1534 713, 713, 713, 713, 713, 713, 714, 714, 714, 714,
1535 714, 714, 714, 714, 714, 714, 714, 714, 714, 714,
1536 714, 715, 715, 715, 715, 715, 715, 715, 715, 715,
1537 715, 715, 715, 715, 715, 715, 716, 0, 0, 716,
1538 716, 716, 0, 716, 716, 716, 716, 716, 717, 717,
1539 717, 717, 717, 0, 717, 717, 717, 717, 717, 717,
1540 717, 717, 717, 718, 718, 718, 718, 718, 718, 718,
1541 718, 718, 718, 718, 718, 718, 718, 718, 719, 719,
1543 0, 0, 0, 0, 0, 0, 0, 719, 719, 719,
1544 719, 719, 720, 720, 720, 720, 720, 720, 720, 720,
1545 720, 720, 720, 720, 720, 720, 720, 721, 721, 721,
1546 721, 721, 721, 721, 721, 721, 721, 721, 721, 721,
1547 721, 721, 722, 722, 722, 722, 722, 722, 722, 722,
1548 722, 722, 722, 722, 722, 722, 722, 723, 723, 723,
1549 723, 723, 723, 723, 723, 723, 723, 723, 723, 723,
1550 723, 723, 724, 724, 724, 724, 724, 724, 724, 724,
1551 724, 724, 724, 724, 724, 724, 724, 725, 725, 725,
1552 725, 725, 725, 725, 725, 725, 725, 725, 725, 725,
1554 725, 725, 726, 726, 726, 726, 726, 726, 726, 726,
1555 726, 726, 726, 726, 726, 726, 726, 727, 727, 727,
1556 727, 727, 727, 727, 727, 727, 727, 727, 727, 727,
1557 727, 727, 728, 728, 0, 728, 728, 728, 728, 728,
1558 728, 728, 728, 728, 728, 728, 728, 729, 729, 0,
1559 729, 729, 729, 729, 729, 729, 729, 729, 729, 729,
1560 729, 729, 730, 730, 0, 730, 730, 730, 730, 730,
1561 730, 730, 730, 730, 730, 730, 730, 731, 731, 731,
1562 731, 731, 731, 731, 731, 731, 731, 731, 731, 731,
1563 731, 731, 732, 732, 732, 732, 732, 732, 732, 732,
1565 732, 732, 732, 732, 732, 732, 732, 733, 733, 733,
1566 733, 733, 733, 733, 733, 733, 733, 733, 733, 733,
1567 733, 733, 734, 734, 734, 734, 734, 734, 734, 734,
1568 734, 734, 734, 734, 734, 734, 734, 735, 0, 0,
1569 735, 0, 735, 735, 0, 0, 735, 735, 736, 736,
1570 736, 736, 736, 736, 736, 736, 736, 736, 736, 736,
1571 736, 736, 736, 737, 737, 737, 737, 737, 737, 737,
1572 737, 737, 737, 737, 737, 737, 737, 737, 738, 738,
1573 738, 738, 738, 738, 738, 738, 738, 738, 738, 738,
1574 738, 738, 738, 739, 739, 739, 739, 739, 739, 739,
1576 739, 739, 739, 739, 739, 739, 739, 739, 740, 740,
1577 0, 740, 740, 740, 740, 740, 740, 740, 740, 740,
1578 740, 740, 740, 741, 741, 741, 741, 741, 741, 741,
1579 741, 741, 741, 741, 741, 741, 741, 741, 742, 742,
1580 742, 742, 0, 742, 742, 742, 742, 742, 742, 742,
1581 742, 742, 742, 743, 743, 743, 743, 743, 743, 743,
1582 743, 743, 743, 743, 743, 743, 743, 743, 744, 744,
1583 0, 744, 744, 744, 744, 744, 744, 744, 744, 744,
1584 744, 744, 744, 745, 745, 0, 745, 745, 745, 745,
1585 745, 745, 745, 745, 745, 745, 745, 745, 746, 0,
1587 746, 0, 0, 0, 746, 746, 746, 747, 747, 0,
1588 747, 747, 747, 747, 747, 747, 747, 747, 747, 747,
1589 747, 747, 748, 748, 0, 748, 748, 748, 748, 748,
1590 748, 748, 748, 748, 748, 748, 748, 749, 749, 0,
1591 749, 749, 749, 749, 749, 749, 749, 749, 749, 749,
1592 749, 749, 750, 750, 750, 750, 750, 750, 750, 750,
1593 750, 750, 750, 750, 750, 750, 750, 751, 751, 751,
1594 751, 751, 751, 751, 751, 751, 751, 751, 751, 751,
1595 751, 751, 752, 752, 752, 752, 752, 752, 752, 752,
1596 752, 752, 752, 752, 752, 752, 752, 753, 753, 753,
1598 753, 753, 753, 753, 753, 753, 753, 753, 753, 753,
1599 753, 753, 754, 0, 0, 0, 0, 754, 754, 0,
1600 0, 754, 754, 755, 755, 755, 755, 755, 755, 755,
1601 755, 755, 755, 755, 755, 755, 755, 755, 756, 756,
1602 756, 756, 756, 756, 756, 756, 756, 756, 756, 756,
1603 756, 756, 756, 757, 757, 0, 757, 757, 757, 757,
1604 757, 757, 757, 757, 757, 757, 757, 757, 758, 758,
1605 0, 758, 758, 758, 758, 758, 758, 758, 758, 758,
1606 758, 758, 758, 759, 759, 759, 759, 0, 759, 759,
1607 759, 759, 759, 759, 759, 759, 759, 759, 760, 760,
1609 760, 760, 760, 760, 760, 760, 760, 760, 760, 760,
1610 760, 760, 760, 761, 761, 0, 761, 761, 761, 761,
1611 761, 761, 761, 761, 761, 761, 761, 761, 762, 762,
1612 0, 762, 762, 762, 762, 762, 762, 762, 762, 762,
1613 762, 762, 762, 763, 763, 0, 763, 763, 763, 763,
1614 763, 763, 763, 763, 763, 763, 763, 763, 764, 764,
1615 0, 764, 764, 764, 764, 764, 764, 764, 764, 764,
1616 764, 764, 764, 765, 765, 0, 765, 765, 765, 765,
1617 765, 765, 765, 765, 765, 765, 765, 765, 766, 766,
1618 0, 766, 766, 766, 766, 766, 766, 766, 766, 766,
1620 766, 766, 766, 767, 767, 0, 767, 767, 767, 767,
1621 767, 767, 767, 767, 767, 767, 767, 767, 768, 768,
1622 0, 768, 768, 768, 768, 768, 768, 768, 768, 768,
1623 768, 768, 768, 769, 769, 769, 769, 769, 769, 769,
1624 769, 769, 769, 769, 769, 769, 769, 769, 770, 770,
1625 770, 770, 770, 770, 770, 770, 770, 770, 770, 770,
1626 770, 770, 770, 771, 771, 771, 771, 771, 771, 771,
1627 771, 771, 771, 771, 771, 771, 771, 771, 772, 0,
1628 0, 0, 0, 772, 772, 0, 0, 772, 773, 773,
1629 773, 773, 773, 773, 773, 773, 773, 773, 773, 773,
1631 773, 773, 773, 774, 774, 774, 774, 774, 774, 774,
1632 774, 774, 774, 774, 774, 774, 774, 774, 775, 775,
1633 0, 775, 775, 775, 775, 775, 775, 775, 775, 775,
1634 775, 775, 775, 776, 776, 776, 776, 776, 776, 776,
1635 776, 776, 776, 776, 776, 776, 776, 776, 777, 0,
1636 0, 0, 0, 777, 777, 0, 0, 777, 778, 778,
1637 0, 778, 778, 778, 778, 778, 778, 778, 778, 778,
1638 778, 778, 778, 779, 779, 779, 779, 779, 779, 779,
1639 779, 779, 779, 779, 779, 779, 779, 779, 780, 780,
1640 0, 780, 780, 780, 780, 780, 780, 780, 780, 780,
1642 780, 780, 780, 781, 781, 0, 781, 781, 781, 781,
1643 781, 781, 781, 781, 781, 781, 781, 781, 782, 782,
1644 0, 782, 782, 782, 782, 782, 782, 782, 782, 782,
1645 782, 782, 782, 783, 783, 783, 783, 783, 783, 783,
1646 783, 783, 783, 783, 783, 783, 783, 783, 784, 784,
1647 784, 784, 784, 784, 784, 784, 784, 784, 784, 784,
1648 784, 784, 784, 785, 785, 785, 785, 785, 785, 785,
1649 785, 785, 785, 785, 785, 785, 785, 785, 786, 786,
1650 786, 786, 786, 786, 786, 786, 786, 786, 786, 786,
1651 786, 786, 786, 710, 710, 710, 710, 710, 710, 710,
1653 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1654 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1655 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1656 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1657 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1658 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1659 710, 710, 710, 710, 710, 710
1662 static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
1663 static char *yy_full_match;
1665 static int yy_looking_for_trail_begin = 0;
1666 static int yy_full_lp;
1667 static int *yy_full_state;
1668 #define YY_TRAILING_MASK 0x2000
1669 #define YY_TRAILING_HEAD_MASK 0x4000
1672 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
1673 yy_cp = yy_full_match; /* restore poss. backed-over text */ \
1674 yy_lp = yy_full_lp; /* restore orig. accepting pos. */ \
1675 yy_state_ptr = yy_full_state; /* restore orig. state */ \
1676 yy_current_state = *yy_state_ptr; /* restore curr. state */ \
1680 #define yymore() yymore_used_but_not_detected
1681 #define YY_MORE_ADJ 0
1682 #define YY_RESTORE_YY_MORE_OFFSET
1686 * parser.l -- lex parser of algebraic chess moves for XBoard
1689 * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
1690 * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
1692 * The following terms apply to Digital Equipment Corporation's copyright
1693 * interest in XBoard:
1694 * ------------------------------------------------------------------------
1695 * All Rights Reserved
1697 * Permission to use, copy, modify, and distribute this software and its
1698 * documentation for any purpose and without fee is hereby granted,
1699 * provided that the above copyright notice appear in all copies and that
1700 * both that copyright notice and this permission notice appear in
1701 * supporting documentation, and that the name of Digital not be
1702 * used in advertising or publicity pertaining to distribution of the
1703 * software without specific, written prior permission.
1705 * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
1706 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
1707 * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
1708 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
1709 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
1710 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
1712 * ------------------------------------------------------------------------
1714 * The following terms apply to the enhanced version of XBoard distributed
1715 * by the Free Software Foundation:
1716 * ------------------------------------------------------------------------
1717 * This program is free software; you can redistribute it and/or modify
1718 * it under the terms of the GNU General Public License as published by
1719 * the Free Software Foundation; either version 2 of the License, or
1720 * (at your option) any later version.
1722 * This program is distributed in the hope that it will be useful,
1723 * but WITHOUT ANY WARRANTY; without even the implied warranty of
1724 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1725 * GNU General Public License for more details.
1727 * You should have received a copy of the GNU General Public License
1728 * along with this program; if not, write to the Free Software
1729 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1730 * ------------------------------------------------------------------------
1733 /* This parser handles all forms of promotion.
1734 * The parser resolves ambiguous moves by searching and check-testing.
1735 * It also parses comments of the form [anything] or (anything).
1740 #define NO_CONSTRAINT -1
1743 #define UNPUT_BUF_SIZE YYLMAX
1746 /* yytext is probably a char*, but could be a char[]. yy_text is set
1747 in YY_DECL below, because if yytext is a char*, its value is not
1750 #else /*!FLEX_SCANNER*/
1751 /* yytext is definitely a char[], so yy_text can be set here, statically. */
1752 char *yy_text = (char *) yytext;
1758 #define YY_INPUT(buf, result, max_size) my_yy_input(buf, &result, max_size)
1761 int _yylex YY_PROTO((void)); \
1762 int yylex YY_PROTO((void)) \
1764 int result = _yylex(); \
1765 yy_text = (char *) yytext; \
1768 int _yylex YY_PROTO((void))
1776 /* The includes must be here, below the #undef input */
1781 # include <stdlib.h>
1782 # include <string.h>
1783 #else /* not STDC_HEADERS */
1785 # include <string.h>
1786 # else /* not HAVE_STRING_H */
1787 # include <strings.h>
1788 # endif /* not HAVE_STRING_H */
1789 #endif /* not STDC_HEADERS */
1792 # include <unistd.h>
1795 #if defined(_amigados)
1798 # include <fcntl.h> /* isatty() prototype */
1799 # endif /* HAVE_FCNTL_H */
1800 #endif /* defined(_amigados) */
1803 #include "backend.h"
1804 #include "frontend.h"
1808 extern int PosFlags P((int));
1810 extern Board boards[MAX_MOVES];
1812 int yyskipmoves = FALSE;
1813 char currentMoveString[YYLMAX];
1814 #ifndef FLEX_SCANNER
1815 char unputBuffer[UNPUT_BUF_SIZE];
1820 void my_yy_input P((char *buf, int *result, int max_size));
1821 #else /*!FLEX_SCANNER*/
1822 static int input P((void));
1823 static void output P((int ch));
1824 static void unput P((int ch));
1825 int yylook P((void));
1826 int yyback P((int *, int));
1829 int yywrap P((void));
1830 extern void CopyBoard P((Board to, Board from));
1833 /* Macros after this point can all be overridden by user definitions in
1837 #ifndef YY_SKIP_YYWRAP
1839 extern "C" int yywrap YY_PROTO(( void ));
1841 extern int yywrap YY_PROTO(( void ));
1846 static void yyunput YY_PROTO(( int c, char *buf_ptr ));
1850 static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
1853 #ifdef YY_NEED_STRLEN
1854 static int yy_flex_strlen YY_PROTO(( yyconst char * ));
1859 static int yyinput YY_PROTO(( void ));
1861 static int input YY_PROTO(( void ));
1866 static int yy_start_stack_ptr = 0;
1867 static int yy_start_stack_depth = 0;
1868 static int *yy_start_stack = 0;
1869 #ifndef YY_NO_PUSH_STATE
1870 static void yy_push_state YY_PROTO(( int new_state ));
1872 #ifndef YY_NO_POP_STATE
1873 static void yy_pop_state YY_PROTO(( void ));
1875 #ifndef YY_NO_TOP_STATE
1876 static int yy_top_state YY_PROTO(( void ));
1880 #define YY_NO_PUSH_STATE 1
1881 #define YY_NO_POP_STATE 1
1882 #define YY_NO_TOP_STATE 1
1885 #ifdef YY_MALLOC_DECL
1893 /* Just try to get by without declaring the routines. This will fail
1894 * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
1895 * or sizeof(void*) != sizeof(int).
1900 /* Amount of stuff to slurp up with each read. */
1901 #ifndef YY_READ_BUF_SIZE
1902 #define YY_READ_BUF_SIZE 8192
1905 /* Copy whatever the last rule matched to the standard output. */
1908 /* This used to be an fputs(), but since the string might contain NUL's,
1909 * we now use fwrite().
1911 #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
1914 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
1915 * is returned in "result".
1918 #define YY_INPUT(buf,result,max_size) \
1919 if ( yy_current_buffer->yy_is_interactive ) \
1922 for ( n = 0; n < max_size && \
1923 (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
1924 buf[n] = (char) c; \
1926 buf[n++] = (char) c; \
1927 if ( c == EOF && ferror( yyin ) ) \
1928 YY_FATAL_ERROR( "input in flex scanner failed" ); \
1931 else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
1932 && ferror( yyin ) ) \
1933 YY_FATAL_ERROR( "input in flex scanner failed" );
1936 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1937 * we don't want an extra ';' after the "return" because that will cause
1938 * some compilers to complain about unreachable statements.
1941 #define yyterminate() return YY_NULL
1944 /* Number of entries by which start-condition stack grows. */
1945 #ifndef YY_START_STACK_INCR
1946 #define YY_START_STACK_INCR 25
1949 /* Report a fatal error. */
1950 #ifndef YY_FATAL_ERROR
1951 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
1954 /* Default declaration of generated scanner - a define so the user can
1955 * easily add parameters.
1958 #define YY_DECL int yylex YY_PROTO(( void ))
1961 /* Code executed at the beginning of each rule, after yytext and yyleng
1964 #ifndef YY_USER_ACTION
1965 #define YY_USER_ACTION
1968 /* Code executed at the end of each rule. */
1970 #define YY_BREAK break;
1973 #define YY_RULE_SETUP \
1975 yy_current_buffer->yy_at_bol = \
1976 (yytext[yyleng - 1] == '\n'); \
1981 register yy_state_type yy_current_state;
1982 register char *yy_cp, *yy_bp;
1983 register int yy_act;
1997 yy_start = 1; /* first start state */
2005 if ( ! yy_current_buffer )
2007 yy_create_buffer( yyin, YY_BUF_SIZE );
2009 yy_load_buffer_state();
2012 while ( 1 ) /* loops until end-of-file is reached */
2016 /* Support of yytext. */
2017 *yy_cp = yy_hold_char;
2019 /* yy_bp points to the position in yy_ch_buf of the start of
2024 yy_current_state = yy_start;
2025 yy_current_state += YY_AT_BOL();
2026 yy_state_ptr = yy_state_buf;
2027 *yy_state_ptr++ = yy_current_state;
2031 register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
2032 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2034 yy_current_state = (int) yy_def[yy_current_state];
2035 if ( yy_current_state >= 711 )
2036 yy_c = yy_meta[(unsigned int) yy_c];
2038 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2039 *yy_state_ptr++ = yy_current_state;
2042 while ( yy_base[yy_current_state] != 4394 );
2045 yy_current_state = *--yy_state_ptr;
2046 yy_lp = yy_accept[yy_current_state];
2047 find_rule: /* we branch to this label when backing up */
2048 for ( ; ; ) /* until we find what rule we matched */
2050 if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
2052 yy_act = yy_acclist[yy_lp];
2053 if ( yy_act & YY_TRAILING_HEAD_MASK ||
2054 yy_looking_for_trail_begin )
2056 if ( yy_act == yy_looking_for_trail_begin )
2058 yy_looking_for_trail_begin = 0;
2059 yy_act &= ~YY_TRAILING_HEAD_MASK;
2063 else if ( yy_act & YY_TRAILING_MASK )
2065 yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
2066 yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
2070 yy_full_match = yy_cp;
2071 yy_full_state = yy_state_ptr;
2079 yy_current_state = *--yy_state_ptr;
2080 yy_lp = yy_accept[yy_current_state];
2083 YY_DO_BEFORE_ACTION;
2086 do_action: /* This label is used only to access EOF actions. */
2090 { /* beginning of action switch */
2095 * Fully-qualified algebraic move, possibly with promotion
2097 int skip1 = 0, skip2 = 0;
2101 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2104 if (yytext[1] == '/') skip1 = 1;
2106 /* remove the [xX:-] */
2107 if ((yytext[3+skip1] == 'x') || (yytext[3+skip1] == 'X') ||
2108 (yytext[3+skip1] == '-') || (yytext[3+skip1] == ':')) skip2 = 1;
2110 currentMoveString[0] = yytext[1+skip1];
2111 currentMoveString[1] = yytext[2+skip1];
2112 currentMoveString[2] = yytext[3+skip1+skip2];
2113 currentMoveString[3] = yytext[4+skip1+skip2];
2114 currentMoveString[4] = NULLCHAR;
2116 if (yyleng-skip1-skip2 > 5) {
2117 if (yytext[yyleng-1] == ')') {
2118 currentMoveString[4] = ToLower(yytext[yyleng-2]);
2120 currentMoveString[4] = ToLower(yytext[yyleng-1]);
2122 currentMoveString[5] = NULLCHAR;
2125 piece = boards[yyboardindex]
2126 [currentMoveString[1] - '1'][currentMoveString[0] - 'a'];
2127 if (ToLower(yytext[0]) != ToLower(PieceToChar(piece)))
2128 return (int) IllegalMove;
2130 result = LegalityTest(boards[yyboardindex],
2131 PosFlags(yyboardindex), EP_UNKNOWN,
2132 currentMoveString[1] - '1',
2133 currentMoveString[0] - 'a',
2134 currentMoveString[3] - '1',
2135 currentMoveString[2] - 'a',
2136 currentMoveString[4]);
2138 if (currentMoveString[4] == NULLCHAR &&
2139 (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
2140 currentMoveString[4] = 'q';
2141 currentMoveString[5] = NULLCHAR;
2144 return (int) result;
2151 * Simple algebraic move, possibly with promotion
2156 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2158 /* remove the [xX:-] */
2159 if ((yytext[2] == 'x') || (yytext[2] == 'X') ||
2160 (yytext[2] == '-') || (yytext[2] == ':')) skip = 1;
2162 currentMoveString[0] = yytext[0];
2163 currentMoveString[1] = yytext[1];
2164 currentMoveString[2] = yytext[2+skip];
2165 currentMoveString[3] = yytext[3+skip];
2166 currentMoveString[4] = NULLCHAR;
2168 if (yyleng-skip > 4) {
2169 if (yytext[yyleng-1] == ')') {
2170 currentMoveString[4] = ToLower(yytext[yyleng-2]);
2172 currentMoveString[4] = ToLower(yytext[yyleng-1]);
2174 currentMoveString[5] = NULLCHAR;
2177 result = LegalityTest(boards[yyboardindex],
2178 PosFlags(yyboardindex), EP_UNKNOWN,
2179 currentMoveString[1] - '1',
2180 currentMoveString[0] - 'a',
2181 currentMoveString[3] - '1',
2182 currentMoveString[2] - 'a',
2183 currentMoveString[4]);
2185 if (currentMoveString[4] == NULLCHAR &&
2186 (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
2187 currentMoveString[4] = 'q';
2188 currentMoveString[5] = NULLCHAR;
2191 return (int) result;
2198 * Pawn move, possibly with promotion
2200 DisambiguateClosure cl;
2203 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2205 /* remove the =() */
2206 if (yytext[2] == '=') skip++;
2207 if (yytext[2+skip] == '(') skip++;
2209 cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
2211 cl.ffIn = yytext[0] - 'a';
2212 cl.rtIn = yytext[1] - '1';
2213 cl.ftIn = yytext[0] - 'a';
2214 cl.promoCharIn = yytext[2+skip];
2215 Disambiguate(boards[yyboardindex],
2216 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2218 currentMoveString[0] = cl.ff + 'a';
2219 currentMoveString[1] = cl.rf + '1';
2220 currentMoveString[2] = cl.ft + 'a';
2221 currentMoveString[3] = cl.rt + '1';
2222 currentMoveString[4] = cl.promoChar;
2223 currentMoveString[5] = NULLCHAR;
2225 return (int) cl.kind;
2232 * Pawn capture, possibly with promotion, possibly ambiguous
2234 DisambiguateClosure cl;
2235 int skip1 = 0, skip2 = 0;
2237 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2239 /* remove trailing ep or e.p. (nonstandard PGN) */
2240 if (yytext[yyleng-1] == 'p') {
2242 yytext[yyleng] = NULLCHAR;
2243 } else if (yytext[yyleng-1] == '.') {
2245 yytext[yyleng] = NULLCHAR;
2248 /* remove the [xX:-] and =() */
2249 if ((yytext[1] == 'x') || (yytext[1] == 'X')
2250 || (yytext[1] == ':') || (yytext[1] == '-')) skip1 = 1;
2251 if (yytext[2+skip1] == '=') skip2++;
2252 if (yytext[2+skip1+skip2] == '(') skip2++;
2254 cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
2256 cl.ffIn = yytext[0] - 'a';
2258 cl.ftIn = yytext[1+skip1] - 'a';
2259 cl.promoCharIn = yytext[2+skip1+skip2];
2260 Disambiguate(boards[yyboardindex],
2261 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2263 currentMoveString[0] = cl.ff + 'a';
2264 currentMoveString[1] = cl.rf + '1';
2265 currentMoveString[2] = cl.ft + 'a';
2266 currentMoveString[3] = cl.rt + '1';
2267 currentMoveString[4] = cl.promoChar;
2268 currentMoveString[5] = NULLCHAR;
2270 return (int) cl.kind;
2277 * unambiguously abbreviated Pawn capture, possibly with promotion
2282 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2284 /* remove trailing ep or e.p. (nonstandard PGN) */
2285 if (yytext[yyleng-1] == 'p') {
2287 yytext[yyleng] = NULLCHAR;
2288 } else if (yytext[yyleng-1] == '.') {
2290 yytext[yyleng] = NULLCHAR;
2293 /* remove the [xX:-] */
2294 if ((yytext[1] == 'x') || (yytext[1] == 'X')
2295 || (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
2297 currentMoveString[0] = yytext[0];
2298 currentMoveString[2] = yytext[1+skip];
2299 currentMoveString[3] = yytext[2+skip];
2300 if (WhiteOnMove(yyboardindex)) {
2301 if (yytext[2+skip] == '1') return (int) ImpossibleMove;
2302 currentMoveString[1] = yytext[2+skip] - 1;
2304 if (yytext[2+skip] == '8') return (int) ImpossibleMove;
2305 currentMoveString[1] = yytext[2+skip] + 1;
2307 if (yyleng-skip > 3) {
2308 if (yytext[yyleng-1] == ')')
2309 currentMoveString[4] = ToLower(yytext[yyleng-2]);
2311 currentMoveString[4] = ToLower(yytext[yyleng-1]);
2312 currentMoveString[5] = NULLCHAR;
2314 currentMoveString[4] = NULLCHAR;
2317 result = LegalityTest(boards[yyboardindex],
2318 PosFlags(yyboardindex), EP_UNKNOWN,
2319 currentMoveString[1] - '1',
2320 currentMoveString[0] - 'a',
2321 currentMoveString[3] - '1',
2322 currentMoveString[2] - 'a',
2323 currentMoveString[4]);
2325 if (currentMoveString[4] == NULLCHAR &&
2326 (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
2327 currentMoveString[4] = 'q';
2328 currentMoveString[5] = NULLCHAR;
2331 if (result != IllegalMove) return (int) result;
2333 /* Special case: improperly written en passant capture */
2334 if (WhiteOnMove(yyboardindex)) {
2335 if (currentMoveString[3] == '5') {
2336 currentMoveString[1] = '5';
2337 currentMoveString[3] = '6';
2339 return (int) IllegalMove;
2342 if (currentMoveString[3] == '4') {
2343 currentMoveString[1] = '4';
2344 currentMoveString[3] = '3';
2346 return (int) IllegalMove;
2350 result = LegalityTest(boards[yyboardindex],
2351 PosFlags(yyboardindex), EP_UNKNOWN,
2352 currentMoveString[1] - '1',
2353 currentMoveString[0] - 'a',
2354 currentMoveString[3] - '1',
2355 currentMoveString[2] - 'a',
2356 currentMoveString[4]);
2358 if (result == WhiteCapturesEnPassant || result == BlackCapturesEnPassant)
2359 return (int) result;
2361 return (int) IllegalMove;
2368 * piece move, possibly ambiguous
2370 DisambiguateClosure cl;
2373 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2375 /* remove the [xX:-] */
2376 if ((yytext[1] == 'x') || (yytext[1] == 'X')
2377 || (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
2379 if (WhiteOnMove(yyboardindex)) {
2380 cl.pieceIn = CharToPiece(ToUpper(yytext[0]));
2382 cl.pieceIn = CharToPiece(ToLower(yytext[0]));
2386 cl.rtIn = yytext[2+skip] - '1';
2387 cl.ftIn = yytext[1+skip] - 'a';
2388 cl.promoCharIn = NULLCHAR;
2389 Disambiguate(boards[yyboardindex],
2390 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2392 currentMoveString[0] = cl.ff + 'a';
2393 currentMoveString[1] = cl.rf + '1';
2394 currentMoveString[2] = cl.ft + 'a';
2395 currentMoveString[3] = cl.rt + '1';
2396 currentMoveString[4] = cl.promoChar;
2397 currentMoveString[5] = NULLCHAR;
2399 return (int) cl.kind;
2406 * piece move with rank or file disambiguator
2408 DisambiguateClosure cl;
2411 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2413 /* remove the [xX:-] */
2414 if ((yytext[2] == 'x') || (yytext[2] == 'X')
2415 || (yytext[2] == ':') || (yytext[2] == '-')) skip = 1;
2417 if (WhiteOnMove(yyboardindex)) {
2418 cl.pieceIn = CharToPiece(ToUpper(yytext[0]));
2420 cl.pieceIn = CharToPiece(ToLower(yytext[0]));
2422 if (isalpha(yytext[1])) {
2424 cl.ffIn = yytext[1] - 'a';
2426 cl.rfIn = yytext[1] - '1';
2429 cl.rtIn = yytext[3+skip] - '1';
2430 cl.ftIn = yytext[2+skip] - 'a';
2431 cl.promoCharIn = NULLCHAR;
2432 Disambiguate(boards[yyboardindex],
2433 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2435 currentMoveString[0] = cl.ff + 'a';
2436 currentMoveString[1] = cl.rf + '1';
2437 currentMoveString[2] = cl.ft + 'a';
2438 currentMoveString[3] = cl.rt + '1';
2439 currentMoveString[4] = cl.promoChar;
2440 currentMoveString[5] = NULLCHAR;
2442 return (int) cl.kind;
2450 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2452 if (WhiteOnMove(yyboardindex)) {
2453 if (boards[yyboardindex][0][3] == WhiteKing) {
2454 /* ICS wild castling */
2455 strcpy(currentMoveString, "d1f1");
2461 strcpy(currentMoveString, "e1c1");
2468 if (boards[yyboardindex][7][3] == BlackKing) {
2469 /* ICS wild castling */
2470 strcpy(currentMoveString, "d8f8");
2476 strcpy(currentMoveString, "e8c8");
2483 return (int) LegalityTest(boards[yyboardindex],
2484 PosFlags(yyboardindex), EP_UNKNOWN,
2485 rf, ff, rt, ft, NULLCHAR);
2493 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2495 if (WhiteOnMove(yyboardindex)) {
2496 if (boards[yyboardindex][0][3] == WhiteKing) {
2497 /* ICS wild castling */
2498 strcpy(currentMoveString, "d1b1");
2504 strcpy(currentMoveString, "e1g1");
2511 if (boards[yyboardindex][7][3] == BlackKing) {
2512 /* ICS wild castling */
2513 strcpy(currentMoveString, "d8b8");
2519 strcpy(currentMoveString, "e8g8");
2526 return (int) LegalityTest(boards[yyboardindex],
2527 PosFlags(yyboardindex), EP_UNKNOWN,
2528 rf, ff, rt, ft, NULLCHAR);
2534 /* Bughouse piece drop. No legality checking for now. */
2535 currentMoveString[1] = '@';
2536 currentMoveString[2] = yytext[2];
2537 currentMoveString[3] = yytext[3];
2538 currentMoveString[4] = NULLCHAR;
2539 if (WhiteOnMove(yyboardindex)) {
2540 currentMoveString[0] = ToUpper(yytext[0]);
2541 return (int) WhiteDrop;
2543 currentMoveString[0] = ToLower(yytext[0]);
2544 return (int) BlackDrop;
2551 if (WhiteOnMove(yyboardindex))
2552 return (int) BlackWins;
2554 return (int) WhiteWins;
2560 return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
2566 return (int) GameUnfinished;
2572 return (int) GameIsDrawn;
2578 return (int) GameIsDrawn;
2584 if (WhiteOnMove(yyboardindex))
2585 return (int) BlackWins;
2587 return (int) WhiteWins;
2593 if (WhiteOnMove(yyboardindex))
2594 return (int) BlackWins;
2596 return (int) WhiteWins;
2602 return (int) GameIsDrawn;
2608 return (int) GameIsDrawn;
2614 return (int) (ToUpper(yytext[0]) == 'W' ? WhiteWins : BlackWins);
2620 return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
2626 return (int) WhiteWins;
2632 return (int) BlackWins;
2638 return (int) GameIsDrawn;
2644 return (int) GameUnfinished;
2651 if ((yyleng == 1) && (yytext[0] == '1'))
2652 return (int) MoveNumberOne;
2658 /* elapsed time indication, e.g. (0:12) or {10:21.071} */
2659 return (int) ElapsedTime;
2665 /* position diagram enclosed in [-- --] */
2666 return (int) PositionDiagram;
2670 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2671 yy_c_buf_p = yy_cp -= 1;
2672 YY_DO_BEFORE_ACTION; /* set up yytext again */
2675 /* position diagram enclosed in {-- --} */
2676 return (int) PositionDiagram;
2682 return (int) PGNTag;
2688 return (int) GNUChessGame;
2692 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2693 yy_c_buf_p = yy_cp -= 1;
2694 YY_DO_BEFORE_ACTION; /* set up yytext again */
2697 return (int) XBoardGame;
2702 { /* numeric annotation glyph */
2708 { /* anything in {} */
2709 return (int) Comment;
2713 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2714 yy_c_buf_p = yy_cp -= 1;
2715 YY_DO_BEFORE_ACTION; /* set up yytext again */
2717 { /* ; to end of line */
2718 return (int) Comment;
2723 { /* anything in [] */
2724 return (int) Comment;
2730 return (int) Comment;
2735 { /* >=2 chars in () */
2736 return (int) Comment;
2742 /* Skip mail headers */
2748 /* Skip random words */
2754 /* Skip everything else */
2761 case YY_STATE_EOF(INITIAL):
2764 case YY_END_OF_BUFFER:
2766 /* Amount of text matched not including the EOB char. */
2767 int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
2769 /* Undo the effects of YY_DO_BEFORE_ACTION. */
2770 *yy_cp = yy_hold_char;
2771 YY_RESTORE_YY_MORE_OFFSET
2773 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
2775 /* We're scanning a new file or input source. It's
2776 * possible that this happened because the user
2777 * just pointed yyin at a new source and called
2778 * yylex(). If so, then we have to assure
2779 * consistency between yy_current_buffer and our
2780 * globals. Here is the right place to do so, because
2781 * this is the first action (other than possibly a
2782 * back-up) that will match for the new input source.
2784 yy_n_chars = yy_current_buffer->yy_n_chars;
2785 yy_current_buffer->yy_input_file = yyin;
2786 yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
2789 /* Note that here we test for yy_c_buf_p "<=" to the position
2790 * of the first EOB in the buffer, since yy_c_buf_p will
2791 * already have been incremented past the NUL character
2792 * (since all states make transitions on EOB to the
2793 * end-of-buffer state). Contrast this with the test
2796 if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
2797 { /* This was really a NUL. */
2798 yy_state_type yy_next_state;
2800 yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
2802 yy_current_state = yy_get_previous_state();
2804 /* Okay, we're now positioned to make the NUL
2805 * transition. We couldn't have
2806 * yy_get_previous_state() go ahead and do it
2807 * for us because it doesn't know how to deal
2808 * with the possibility of jamming (and we don't
2809 * want to build jamming into it because then it
2810 * will run more slowly).
2813 yy_next_state = yy_try_NUL_trans( yy_current_state );
2815 yy_bp = yytext_ptr + YY_MORE_ADJ;
2817 if ( yy_next_state )
2819 /* Consume the NUL. */
2820 yy_cp = ++yy_c_buf_p;
2821 yy_current_state = yy_next_state;
2828 goto yy_find_action;
2832 else switch ( yy_get_next_buffer() )
2834 case EOB_ACT_END_OF_FILE:
2836 yy_did_buffer_switch_on_eof = 0;
2840 /* Note: because we've taken care in
2841 * yy_get_next_buffer() to have set up
2842 * yytext, we can now set up
2843 * yy_c_buf_p so that if some total
2844 * hoser (like flex itself) wants to
2845 * call the scanner after we return the
2846 * YY_NULL, it'll still work - another
2847 * YY_NULL will get returned.
2849 yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
2851 yy_act = YY_STATE_EOF(YY_START);
2857 if ( ! yy_did_buffer_switch_on_eof )
2863 case EOB_ACT_CONTINUE_SCAN:
2865 yytext_ptr + yy_amount_of_matched_text;
2867 yy_current_state = yy_get_previous_state();
2870 yy_bp = yytext_ptr + YY_MORE_ADJ;
2873 case EOB_ACT_LAST_MATCH:
2875 &yy_current_buffer->yy_ch_buf[yy_n_chars];
2877 yy_current_state = yy_get_previous_state();
2880 yy_bp = yytext_ptr + YY_MORE_ADJ;
2881 goto yy_find_action;
2888 "fatal flex scanner internal error--no action found" );
2889 } /* end of action switch */
2890 } /* end of scanning one token */
2891 } /* end of yylex */
2894 /* yy_get_next_buffer - try to read in a new buffer
2896 * Returns a code representing an action:
2897 * EOB_ACT_LAST_MATCH -
2898 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
2899 * EOB_ACT_END_OF_FILE - end of file
2902 static int yy_get_next_buffer()
2904 register char *dest = yy_current_buffer->yy_ch_buf;
2905 register char *source = yytext_ptr;
2906 register int number_to_move, i;
2909 if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
2911 "fatal flex scanner internal error--end of buffer missed" );
2913 if ( yy_current_buffer->yy_fill_buffer == 0 )
2914 { /* Don't try to fill the buffer, so this is an EOF. */
2915 if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
2917 /* We matched a single character, the EOB, so
2918 * treat this as a final EOF.
2920 return EOB_ACT_END_OF_FILE;
2925 /* We matched some text prior to the EOB, first
2928 return EOB_ACT_LAST_MATCH;
2932 /* Try to read more data. */
2934 /* First move last chars to start of buffer. */
2935 number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
2937 for ( i = 0; i < number_to_move; ++i )
2938 *(dest++) = *(source++);
2940 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
2941 /* don't do the read, it's not guaranteed to return an EOF,
2944 yy_current_buffer->yy_n_chars = yy_n_chars = 0;
2949 yy_current_buffer->yy_buf_size - number_to_move - 1;
2951 while ( num_to_read <= 0 )
2952 { /* Not enough room in the buffer - grow it. */
2953 #ifdef YY_USES_REJECT