Remove promotion-piece encoding from ChessMove type
[xboard.git] / parser.c
1
2 #line 3 "parser.c"
3
4 #define  YY_INT_ALIGNED short int
5
6 /* A lexical scanner generated by flex */
7
8 #define FLEX_SCANNER
9 #define YY_FLEX_MAJOR_VERSION 2
10 #define YY_FLEX_MINOR_VERSION 5
11 #define YY_FLEX_SUBMINOR_VERSION 34
12 #if YY_FLEX_SUBMINOR_VERSION > 0
13 #define FLEX_BETA
14 #endif
15
16 /* First, we deal with  platform-specific or compiler-specific issues. */
17
18 /* begin standard C headers. */
19 #include <stdio.h>
20 #include <string.h>
21 #include <errno.h>
22 #include <stdlib.h>
23
24 /* end standard C headers. */
25
26 /* flex integer type definitions */
27
28 #ifndef FLEXINT_H
29 #define FLEXINT_H
30
31 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
32
33 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
34
35 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
36  * if you want the limit (max/min) macros for int types. 
37  */
38 #ifndef __STDC_LIMIT_MACROS
39 #define __STDC_LIMIT_MACROS 1
40 #endif
41
42 #include <inttypes.h>
43 typedef int8_t flex_int8_t;
44 typedef uint8_t flex_uint8_t;
45 typedef int16_t flex_int16_t;
46 typedef uint16_t flex_uint16_t;
47 typedef int32_t flex_int32_t;
48 typedef uint32_t flex_uint32_t;
49 #else
50 typedef signed char flex_int8_t;
51 typedef short int flex_int16_t;
52 typedef int flex_int32_t;
53 typedef unsigned char flex_uint8_t; 
54 typedef unsigned short int flex_uint16_t;
55 typedef unsigned int flex_uint32_t;
56 #endif /* ! C99 */
57
58 /* Limits of integral types. */
59 #ifndef INT8_MIN
60 #define INT8_MIN               (-128)
61 #endif
62 #ifndef INT16_MIN
63 #define INT16_MIN              (-32767-1)
64 #endif
65 #ifndef INT32_MIN
66 #define INT32_MIN              (-2147483647-1)
67 #endif
68 #ifndef INT8_MAX
69 #define INT8_MAX               (127)
70 #endif
71 #ifndef INT16_MAX
72 #define INT16_MAX              (32767)
73 #endif
74 #ifndef INT32_MAX
75 #define INT32_MAX              (2147483647)
76 #endif
77 #ifndef UINT8_MAX
78 #define UINT8_MAX              (255U)
79 #endif
80 #ifndef UINT16_MAX
81 #define UINT16_MAX             (65535U)
82 #endif
83 #ifndef UINT32_MAX
84 #define UINT32_MAX             (4294967295U)
85 #endif
86
87 #endif /* ! FLEXINT_H */
88
89 #ifdef __cplusplus
90
91 /* The "const" storage-class-modifier is valid. */
92 #define YY_USE_CONST
93
94 #else   /* ! __cplusplus */
95
96 /* C99 requires __STDC__ to be defined as 1. */
97 #if defined (__STDC__)
98
99 #define YY_USE_CONST
100
101 #endif  /* defined (__STDC__) */
102 #endif  /* ! __cplusplus */
103
104 #ifdef YY_USE_CONST
105 #define yyconst const
106 #else
107 #define yyconst
108 #endif
109
110 /* Returned upon end-of-file. */
111 #define YY_NULL 0
112
113 /* Promotes a possibly negative, possibly signed char to an unsigned
114  * integer for use as an array index.  If the signed char is negative,
115  * we want to instead treat it as an 8-bit unsigned char, hence the
116  * double cast.
117  */
118 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
119
120 /* Enter a start condition.  This macro really ought to take a parameter,
121  * but we do it the disgusting crufty way forced on us by the ()-less
122  * definition of BEGIN.
123  */
124 #define BEGIN (yy_start) = 1 + 2 *
125
126 /* Translate the current start state into a value that can be later handed
127  * to BEGIN to return to the state.  The YYSTATE alias is for lex
128  * compatibility.
129  */
130 #define YY_START (((yy_start) - 1) / 2)
131 #define YYSTATE YY_START
132
133 /* Action number for EOF rule of a given start state. */
134 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
135
136 /* Special action meaning "start processing a new file". */
137 #define YY_NEW_FILE yyrestart(yyin  )
138
139 #define YY_END_OF_BUFFER_CHAR 0
140
141 /* Size of default input buffer. */
142 #ifndef YY_BUF_SIZE
143 #define YY_BUF_SIZE 16384
144 #endif
145
146 /* The state buf must be large enough to hold one state per character in the main buffer.
147  */
148 #define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
149
150 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
151 #define YY_TYPEDEF_YY_BUFFER_STATE
152 typedef struct yy_buffer_state *YY_BUFFER_STATE;
153 #endif
154
155 extern int yyleng;
156
157 extern FILE *yyin, *yyout;
158
159 #define EOB_ACT_CONTINUE_SCAN 0
160 #define EOB_ACT_END_OF_FILE 1
161 #define EOB_ACT_LAST_MATCH 2
162
163     #define YY_LESS_LINENO(n)
164     
165 /* Return all but the first "n" matched characters back to the input stream. */
166 #define yyless(n) \
167         do \
168                 { \
169                 /* Undo effects of setting up yytext. */ \
170         int yyless_macro_arg = (n); \
171         YY_LESS_LINENO(yyless_macro_arg);\
172                 *yy_cp = (yy_hold_char); \
173                 YY_RESTORE_YY_MORE_OFFSET \
174                 (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
175                 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
176                 } \
177         while ( 0 )
178
179 #define unput(c) yyunput( c, (yytext_ptr)  )
180
181 /* The following is because we cannot portably get our hands on size_t
182  * (without autoconf's help, which isn't available because we want
183  * flex-generated scanners to compile on their own).
184  * Given that the standard has decreed that size_t exists since 1989,
185  * I guess we can afford to depend on it. Manoj.
186  */
187
188 #ifndef YY_TYPEDEF_YY_SIZE_T
189 #define YY_TYPEDEF_YY_SIZE_T
190 typedef size_t yy_size_t;
191 #endif
192
193 #ifndef YY_STRUCT_YY_BUFFER_STATE
194 #define YY_STRUCT_YY_BUFFER_STATE
195 struct yy_buffer_state
196         {
197         FILE *yy_input_file;
198
199         char *yy_ch_buf;                /* input buffer */
200         char *yy_buf_pos;               /* current position in input buffer */
201
202         /* Size of input buffer in bytes, not including room for EOB
203          * characters.
204          */
205         yy_size_t yy_buf_size;
206
207         /* Number of characters read into yy_ch_buf, not including EOB
208          * characters.
209          */
210         int yy_n_chars;
211
212         /* Whether we "own" the buffer - i.e., we know we created it,
213          * and can realloc() it to grow it, and should free() it to
214          * delete it.
215          */
216         int yy_is_our_buffer;
217
218         /* Whether this is an "interactive" input source; if so, and
219          * if we're using stdio for input, then we want to use getc()
220          * instead of fread(), to make sure we stop fetching input after
221          * each newline.
222          */
223         int yy_is_interactive;
224
225         /* Whether we're considered to be at the beginning of a line.
226          * If so, '^' rules will be active on the next match, otherwise
227          * not.
228          */
229         int yy_at_bol;
230
231     int yy_bs_lineno; /**< The line count. */
232     int yy_bs_column; /**< The column count. */
233     
234         /* Whether to try to fill the input buffer when we reach the
235          * end of it.
236          */
237         int yy_fill_buffer;
238
239         int yy_buffer_status;
240
241 #define YY_BUFFER_NEW 0
242 #define YY_BUFFER_NORMAL 1
243         /* When an EOF's been seen but there's still some text to process
244          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
245          * shouldn't try reading from the input source any more.  We might
246          * still have a bunch of tokens to match, though, because of
247          * possible backing-up.
248          *
249          * When we actually see the EOF, we change the status to "new"
250          * (via yyrestart()), so that the user can continue scanning by
251          * just pointing yyin at a new input file.
252          */
253 #define YY_BUFFER_EOF_PENDING 2
254
255         };
256 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
257
258 /* Stack of input buffers. */
259 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
260 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
261 static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
262
263 /* We provide macros for accessing buffer states in case in the
264  * future we want to put the buffer states in a more general
265  * "scanner state".
266  *
267  * Returns the top of the stack, or NULL.
268  */
269 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
270                           ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
271                           : NULL)
272
273 /* Same as previous macro, but useful when we know that the buffer stack is not
274  * NULL or when we need an lvalue. For internal use only.
275  */
276 #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
277
278 /* yy_hold_char holds the character lost when yytext is formed. */
279 static char yy_hold_char;
280 static int yy_n_chars;          /* number of characters read into yy_ch_buf */
281 int yyleng;
282
283 /* Points to current character in buffer. */
284 static char *yy_c_buf_p = (char *) 0;
285 static int yy_init = 0;         /* whether we need to initialize */
286 static int yy_start = 0;        /* start state number */
287
288 /* Flag which is used to allow yywrap()'s to do buffer switches
289  * instead of setting up a fresh yyin.  A bit of a hack ...
290  */
291 static int yy_did_buffer_switch_on_eof;
292
293 void yyrestart (FILE *input_file  );
294 void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
295 YY_BUFFER_STATE yy_create_buffer (FILE *file,int size  );
296 void yy_delete_buffer (YY_BUFFER_STATE b  );
297 void yy_flush_buffer (YY_BUFFER_STATE b  );
298 void yypush_buffer_state (YY_BUFFER_STATE new_buffer  );
299 void yypop_buffer_state (void );
300
301 static void yyensure_buffer_stack (void );
302 static void yy_load_buffer_state (void );
303 static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
304
305 #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
306
307 YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
308 YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
309 YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len  );
310
311 void *yyalloc (yy_size_t  );
312 void *yyrealloc (void *,yy_size_t  );
313 void yyfree (void *  );
314
315 #define yy_new_buffer yy_create_buffer
316
317 #define yy_set_interactive(is_interactive) \
318         { \
319         if ( ! YY_CURRENT_BUFFER ){ \
320         yyensure_buffer_stack (); \
321                 YY_CURRENT_BUFFER_LVALUE =    \
322             yy_create_buffer(yyin,YY_BUF_SIZE ); \
323         } \
324         YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
325         }
326
327 #define yy_set_bol(at_bol) \
328         { \
329         if ( ! YY_CURRENT_BUFFER ){\
330         yyensure_buffer_stack (); \
331                 YY_CURRENT_BUFFER_LVALUE =    \
332             yy_create_buffer(yyin,YY_BUF_SIZE ); \
333         } \
334         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
335         }
336
337 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
338
339 /* Begin user sect3 */
340
341 typedef unsigned char YY_CHAR;
342
343 FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
344
345 typedef int yy_state_type;
346
347 extern int yylineno;
348
349 int yylineno = 1;
350
351 extern char *yytext;
352 #define yytext_ptr yytext
353
354 static yy_state_type yy_get_previous_state (void );
355 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
356 static int yy_get_next_buffer (void );
357 static void yy_fatal_error (yyconst char msg[]  );
358
359 /* Done after the current pattern has been matched and before the
360  * corresponding action - sets up yytext.
361  */
362 #define YY_DO_BEFORE_ACTION \
363         (yytext_ptr) = yy_bp; \
364         yyleng = (size_t) (yy_cp - yy_bp); \
365         (yy_hold_char) = *yy_cp; \
366         *yy_cp = '\0'; \
367         (yy_c_buf_p) = yy_cp;
368
369 #define YY_NUM_RULES 43
370 #define YY_END_OF_BUFFER 44
371 /* This struct is not used in this scanner,
372    but its presence is necessary. */
373 struct yy_trans_info
374         {
375         flex_int32_t yy_verify;
376         flex_int32_t yy_nxt;
377         };
378 static yyconst flex_int16_t yy_acclist[623] =
379     {   0,
380        44,   42,   43,   42,   43,   42,   43,   41,   42,   43,
381        42,   43,   26,   42,   43,   42,   43,   41,   42,   43,
382        41,   42,   43,16411,   41,   42,   43,16411,   42,   43,
383        41,   42,   43,   41,   42,   43,   41,   42,   43,   41,
384        42,   43,   41,   42,   43,   41,   42,   43,   41,   42,
385        43,   41,   42,   43,   41,   42,   43,   41,   42,   43,
386        41,   42,   43,   42,   43,   41,   42,   43,   41,   42,
387        43,   41,   42,   43,   41,   42,   43,   41,   42,   43,
388        41,   42,   43,   41,   42,   43,   41,   42,   43,   41,
389        42,   43,   41,   42,   43,   41,   42,   43,   41,   42,
390
391        43,   41,   42,   43,   41,   42,   43,   41,   42,   43,
392        41,   42,   43,   41,   42,   43,   42,   43,   42,   43,
393        41,   42,   43,   41,   42,   43,   41,   42,   43,16411,
394        41,   42,   43,16411,   42,   43,   41,   42,   43,   41,
395        42,   43,   41,   42,   43,   41,   42,   43,   41,   42,
396        43,   41,   42,   43,   41,   42,   43,   41,   42,   43,
397        41,   42,   43,   41,   42,   43,   41,   42,   43,   41,
398        42,   43,   41,   42,   43,   41,   42,   43,   41,   42,
399        43,   41,   42,   43,   41,   42,   43,   41,   42,   43,
400        41,   42,   43,   41,   42,   43,   41,   42,   43,   41,
401
402        42,   43,   41,   42,   43,   41,   42,   43,   41,   42,
403        43,   41,   42,   43,   41,   42,   43,   41,   42,   43,
404        42,   43,   34,   41,   18,   41,   10,   41,   41,   41,
405     16411, 8219,   41,   36,   41,   41,   41,   41,   41,   41,
406        41,   41,   41,   41,   41,   10,   41,   41,   41,   41,
407        37,   41,    4,   41,   41,    5,   41,   41,   41,   41,
408        41,   41,   10,   41,   41,   41,   35,   41,   41,   10,
409        41,   41,   41,16411, 8219,   41,   41,   41,   41,   41,
410        41,   41,   41,   41,   41,   41,   41,   10,   41,   41,
411        41,   41,   41,    4,   41,   41,    5,   41,   41,   41,
412
413        41,   41,   41,   10,   41,   41,   41,   16,   10,   41,
414        24,   41,   24,    9,   41, 8219,   23,   41,   23,   25,
415        41,   41,   41,   41,   41,    7,   41,   41,   41,   41,
416        41,   41,   10,   41,   41,   41,   41,    5,   41,   41,
417         4,    4,   41,    4,   41,    4,   41,    5,    6,   41,
418         5,    5,   41,   41,   41,   41,   10,   41,   41,   35,
419        40,   10,   41,   24,   41,    9,   41,   23,   41,   36,
420        41,   41,   41,   41,   41,    7,   41,   41,   41,   41,
421        41,   41,   10,   41,   41,   41,   41,    5,   41,   41,
422         4,   41,    4,   41,    4,   41,    6,   41,    5,   41,
423
424        41,   41,   41,   10,   41,   41,   39,   39,   39,   38,
425        26,   26,    7,   41,   11,    7,   41,    3,   41,    8,
426        41,    7,   41,    7,   41,   41,   41,   20,   41,   41,
427        17,   41,   41,   41,   41,   41,   37,    4,   41,    4,
428         2,   41,    6,    5,    6,    6,   41,   41,    5,    5,
429        41,   41,   26,   40,   41,    7,   41,    3,   41,    8,
430        41,   41,   41,   41,   41,   20,   41,   41,   17,   41,
431        41,   41,   41,   41,   41,    2,   41,    6,   41,   41,
432         5,   41,   41,   39,    8,    3,    8,    1,   41,   21,
433        41,   41,   20,   41,   41,   41,   41,   41,   41,   31,
434
435        37,    2,    2,    2,   41,    6,    6,    6,   41,   40,
436         1,   41,   41,   41,   20,   41,   41,   41,   41,   41,
437        41,    2,   41,    6,   41,   28,   39,    1,   24,   24,
438        23,   23,   25,   25,    1,    1,   41,   22,   21,   41,
439        41,   41,   12,   41,   41,   29,   37,   31,    2,    2,
440        28,   35,   40,   40,    1,   41,   41,   41,   41,   12,
441        41,   41,   19,    1,   25,    1,   22,   20,   41,   41,
442        41,   12,   41,   41,   41,   41,   41,   12,   41,   41,
443        13,   41,   41,   41,   41,   13,   41,   41,   15,   41,
444        41,   41,   15,   41,   41,   41,   40,   41,   41,   41,
445
446        41,   40,   40,   41,   41,   32,   41,   40,   40,   32,
447        41,   14,   32,   33,   33,   36,   40,   40,   32,   40,
448        35,   30
449     } ;
450
451 static yyconst flex_int16_t yy_accept[705] =
452     {   0,
453         1,    1,    1,    2,    4,    6,    8,   11,   13,   16,
454        18,   21,   25,   29,   31,   34,   37,   40,   43,   46,
455        49,   52,   55,   58,   61,   64,   66,   69,   72,   75,
456        78,   81,   84,   87,   90,   93,   96,   99,  102,  105,
457       108,  111,  114,  117,  119,  121,  124,  127,  131,  135,
458       137,  140,  143,  146,  149,  152,  155,  158,  161,  164,
459       167,  170,  173,  176,  179,  182,  185,  188,  191,  194,
460       197,  200,  203,  206,  209,  212,  215,  218,  221,  223,
461       223,  224,  225,  225,  225,  225,  225,  226,  226,  226,
462       226,  227,  227,  229,  229,  229,  229,  230,  230,  230,
463
464       232,  232,  234,  234,  235,  235,  236,  236,  237,  237,
465       238,  238,  239,  240,  241,  242,  243,  244,  245,  246,
466       248,  249,  250,  251,  251,  251,  251,  251,  252,  253,
467       255,  255,  256,  258,  259,  260,  261,  262,  263,  265,
468       266,  267,  267,  267,  267,  268,  268,  269,  269,  270,
469       272,  272,  273,  275,  275,  277,  277,  278,  279,  279,
470       280,  281,  282,  283,  284,  285,  286,  287,  288,  290,
471       291,  292,  293,  294,  296,  296,  297,  299,  300,  301,
472       302,  303,  304,  306,  307,  308,  308,  308,  308,  308,
473       308,  308,  308,  308,  308,  308,  308,  309,  309,  309,
474
475       309,  309,  309,  311,  313,  314,  316,  317,  317,  317,
476       317,  319,  320,  321,  321,  322,  322,  323,  323,  324,
477       325,  325,  326,  328,  328,  328,  328,  328,  328,  328,
478       328,  329,  330,  331,  332,  333,  335,  336,  337,  338,
479       338,  338,  338,  338,  340,  340,  341,  341,  342,  344,
480       346,  348,  349,  349,  351,  352,  354,  355,  356,  357,
481       359,  360,  361,  361,  361,  361,  361,  362,  364,  366,
482       368,  370,  370,  371,  371,  372,  373,  373,  374,  375,
483       376,  378,  378,  379,  380,  381,  382,  383,  385,  386,
484       387,  388,  390,  391,  391,  393,  395,  397,  399,  401,
485
486       402,  403,  404,  406,  407,  407,  407,  408,  409,  409,
487       409,  410,  410,  410,  411,  411,  411,  412,  412,  413,
488       413,  414,  414,  414,  414,  415,  415,  415,  415,  415,
489       415,  415,  415,  416,  418,  418,  418,  420,  422,  423,
490       424,  424,  425,  426,  426,  426,  426,  426,  426,  426,
491       427,  428,  430,  430,  431,  433,  434,  435,  436,  437,
492       437,  437,  437,  437,  438,  439,  440,  440,  441,  443,
493       444,  445,  445,  445,  446,  448,  449,  450,  450,  452,
494       453,  453,  454,  454,  454,  454,  454,  455,  455,  456,
495       456,  456,  458,  460,  462,  463,  463,  464,  465,  466,
496
497       468,  469,  471,  472,  473,  474,  475,  476,  478,  480,
498       481,  483,  484,  484,  484,  484,  484,  485,  485,  485,
499       485,  485,  486,  486,  486,  486,  486,  486,  486,  486,
500       486,  486,  487,  488,  490,  490,  490,  490,  490,  490,
501       491,  492,  493,  493,  495,  495,  496,  497,  498,  499,
502       500,  500,  500,  502,  502,  502,  503,  503,  504,  506,
503       507,  507,  508,  508,  510,  510,  510,  510,  510,  510,
504       510,  510,  511,  511,  511,  513,  514,  515,  517,  518,
505       519,  520,  521,  522,  524,  526,  526,  526,  526,  526,
506       526,  526,  528,  528,  529,  529,  530,  530,  531,  531,
507
508       532,  532,  533,  533,  534,  534,  535,  535,  535,  535,
509       536,  538,  538,  538,  539,  539,  539,  540,  541,  541,
510       541,  541,  541,  541,  542,  543,  545,  546,  548,  548,
511       549,  550,  551,  551,  551,  553,  553,  553,  554,  555,
512       555,  555,  557,  558,  559,  560,  562,  563,  563,  564,
513       564,  564,  564,  564,  565,  565,  566,  567,  567,  567,
514       568,  568,  568,  569,  569,  569,  569,  569,  570,  571,
515       572,  574,  575,  575,  575,  575,  575,  575,  576,  577,
516       578,  580,  581,  581,  581,  581,  581,  581,  581,  582,
517       582,  582,  582,  582,  583,  584,  584,  584,  584,  584,
518
519       585,  586,  586,  586,  586,  586,  587,  587,  587,  587,
520       588,  589,  591,  591,  591,  591,  591,  592,  592,  593,
521       595,  595,  595,  595,  595,  596,  597,  597,  597,  597,
522       597,  598,  599,  600,  600,  600,  600,  600,  600,  601,
523       602,  602,  602,  602,  602,  603,  604,  605,  606,  606,
524       606,  606,  606,  606,  608,  608,  608,  608,  608,  609,
525       610,  612,  612,  612,  613,  613,  614,  614,  615,  615,
526       615,  617,  617,  618,  619,  619,  619,  619,  619,  621,
527       621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
528       621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
529
530       621,  622,  623,  623
531     } ;
532
533 static yyconst flex_int32_t yy_ec[256] =
534     {   0,
535         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
536         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
537         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
538         1,    4,    1,    5,    6,    7,    8,    1,    9,   10,
539        11,   12,   13,    1,   14,   15,   16,   17,   18,   19,
540        20,   20,   20,   20,   20,   20,   20,   21,   22,    1,
541        23,    1,    1,   24,   25,   26,   27,   28,   29,   30,
542        31,   32,   33,   33,   34,   35,   36,   37,   38,   39,
543        39,   40,   41,   42,   43,   42,   44,   45,   42,   42,
544        46,    1,   47,    1,   48,    1,   49,   50,   51,   52,
545
546        53,   54,   55,   56,   57,   58,   59,   60,   61,   62,
547        63,   64,   65,   66,   67,   68,   69,   70,   71,   72,
548        73,   70,   74,    1,   75,    1,    1,    1,    1,    1,
549         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
550         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
551         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
552         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
553         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
554         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
555         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
556
557         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
558         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
559         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
560         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
561         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
562         1,    1,    1,    1,    1
563     } ;
564
565 static yyconst flex_int32_t yy_meta[76] =
566     {   0,
567         1,    2,    3,    2,    1,    1,    1,    1,    4,    5,
568         6,    1,    7,    8,    1,    1,    9,    9,    9,    9,
569        10,    1,   11,    1,   12,   12,   12,   12,   12,   12,
570        12,   12,   13,   12,   13,   13,   12,   12,   12,   12,
571        13,   13,   13,   12,   14,    1,    1,    1,   15,   15,
572        15,   15,   16,   15,   15,   15,   15,   15,   15,   15,
573        17,   18,   18,   18,   18,   18,   17,   17,   17,   17,
574        17,   19,   17,    1,    1
575     } ;
576
577 static yyconst flex_int16_t yy_base[785] =
578     {   0,
579         0,   75, 3642, 4141,  126,  135,    0,  146, 3633,  144,
580       155,  175,  166, 3633,  237,  163, 3579, 3568,  123,  249,
581       245,  261,  253,  283,  300,  356,  418,  256,  259,  272,
582       277,  286,  336,  293,  227,  295,  347,  334, 3584,  159,
583      3569, 3551,  194,  405, 3614,  153,  412,  489,  396,  309,
584       554,  328, 3482, 3471,  124,  430,  423,  562,  434,  566,
585       440,  626,  395,  362,  433,  412,  538,  540,  445,  566,
586       570,  592,  589,  325,  644,  366,  645,  652,  685, 3478,
587       613,    0, 3522,  371,  699,  178, 4141, 3516,  747,  641,
588       471, 3493, 3475, 3311,  509,  708, 3308,  533,  164,  711,
589
590      3307,    0, 3320, 4141,    0,  771,    0,  823,    0,  883,
591       928, 3233, 3224, 3226, 3231, 3204,  650, 3118, 3147, 3143,
592      3113, 3130, 3120, 3112,  999,  300, 1074, 4141, 1101, 1153,
593         0, 1178, 1230,  672,  677,  716, 3072, 2971, 2967, 2962,
594      2971,  334, 2874,  720, 2942, 2941,  380, 2939,  733,  735,
595       416,  736, 1302,  655,  406,  561, 1367, 1419, 2938, 1479,
596      2892, 2887,  722,  737,  764,  757, 2871, 2900,  770, 2870,
597       738, 2879, 1503, 1555, 2897, 1580, 1632,  889,  896,  966,
598       902,  772,  773,  909,  903,  917, 2821,  587,  607,  626,
599       653,  690, 1007, 1019, 2872, 2807, 4141,  741, 1035, 2877,
600
601      2815, 2814, 2803, 2797, 2783,    0, 4141, 2782, 2779, 2778,
602      2777, 2773,  940,  792,  797,  929, 1681, 1717,  933,  978,
603      1014, 1032, 1764, 1027, 2719, 2712, 2711, 2724, 2719,  630,
604      1051, 1074, 2700,  989, 2717, 2755, 2711, 2707, 1096,  824,
605      1128,  701, 1836, 1902,    0, 1907,    0, 2756, 2754, 2753,
606      1086, 1124, 1376, 1958, 2753, 2751,  610, 2710, 2709, 2744,
607      2689, 4141, 1491,  766, 2752,  666, 2752,  825,  953,  950,
608       969,  785, 2750, 1323, 1091, 2003, 2749, 1118, 1383, 1380,
609      2050, 2745, 1495, 1708, 1370, 1498, 1497, 1108, 1744, 1770,
610      1785, 2114, 2119, 2744,  956, 2736, 1779, 2170,  970, 1368,
611
612      1496, 1774, 1304, 1833, 1240, 2693, 4141,  859,  911,  915,
613      1032, 1040, 1077, 4141, 1744, 2734, 2733, 2668, 2667, 1290,
614      1841, 2723, 2722, 2721, 2721, 1091, 2720,  180, 2719, 1421,
615      1849,  710, 4141, 2711, 1852, 1503,    0, 2710, 2709, 2175,
616      1835, 4141, 1523, 2664, 2664, 2662, 2656, 2656, 2660, 2662,
617      2659, 1320, 1118, 1220,    0, 2669, 2647, 2648, 2647, 1152,
618      1154,  922, 1676, 2694, 2687, 1701, 1809, 4141, 1875, 1851,
619      2686, 1333, 1855, 1867, 2685, 1334, 4141, 2631,    0, 2631,
620      1897, 2689, 1905, 2000, 2643, 2628, 2687,  565, 1772,  256,
621      1137, 1858, 1421, 1882, 2187, 2685, 2030, 1961, 2006, 2004,
622
623      2058, 1558, 2059, 1867, 1897, 2060, 2065, 2111, 1771, 2239,
624      1635, 2241, 1966, 2635, 1108, 2676, 1113, 1231, 1235, 1267,
625      1370, 2663, 1814, 2674, 2608, 2671, 2606, 2669, 2604, 2656,
626      1883, 4141, 4141, 2295, 2622, 2618, 2024, 2618, 2613, 2602,
627      2664,  420, 2209, 2663, 1411, 2634, 2609, 2599, 2596, 2651,
628      1530, 1971, 4141, 2649, 1975, 1996, 2000, 2065, 2638, 2637,
629      1743, 4141, 2583,    0, 2631, 2112, 2620, 2073, 2615, 2566,
630      2559, 1599, 1807, 1719, 2332, 2247, 2246, 2248, 2244, 2249,
631      2255, 2285, 2257, 1996, 2117, 2269,  983, 1424, 2614, 1455,
632      1516, 4141, 2171, 2088, 2613, 2612, 2547, 2546, 2609, 2608,
633
634      2543, 2541, 2604, 2603, 2537, 2533, 2583, 2577, 2261, 2264,
635      2580, 2527, 2536, 2224, 1783, 2533, 4141, 2532, 2569, 2521,
636      2500, 2539, 2504, 2510, 2480, 1973, 2495, 4141, 2114, 4141,
637      2531, 4141, 2522, 2375, 2528, 2464, 2458, 2510, 1949,  392,
638       271, 2277, 2370, 2272, 2276, 2375, 2376, 2276, 4141, 2455,
639      2464, 1560, 2370, 2463, 2463, 2462, 4141, 2395, 2399, 4141,
640      2392, 2438, 2412, 2319, 2352, 2313, 2282, 2307, 2278, 2264,
641         0, 2247, 2383, 2310, 2244, 1644, 1500, 2389, 2280, 2395,
642      2287, 2396, 2404, 2248, 2290, 1798, 2218, 2195, 2066, 2169,
643      2004, 2151, 2116, 2479, 2112, 2024, 2019, 1757,  842, 2554,
644
645      2390, 2418, 1974, 1956, 1924, 4141, 1903, 2041, 2081, 2629,
646      2135,    0, 1897, 1839, 2159, 1721, 2704, 2378, 2169, 2290,
647      2421, 1845, 1814, 2389, 1618, 1584, 1583, 1486,  787,  598,
648      2405, 1509, 1440, 2423, 1322, 1282, 2264, 2384, 1285, 1198,
649      1093, 1124, 2040, 1753, 2410, 2474, 1097,  913, 2437, 2381,
650       872, 2398, 2415,    0,  916,  764,  769, 2163, 2473, 2475,
651         0, 2449,  718, 4141,  686, 2400,  618, 4141,  440,  373,
652      4141, 2349, 2485, 2466, 2458,  293,  273, 1809, 2517, 2468,
653       168, 2409, 1309, 2347, 2456, 2504, 2508, 2532, 2535, 2536,
654      2538, 2568, 2581, 2583, 2584, 2589, 2590, 2591, 2603, 2470,
655
656       165, 4141, 4141, 2776, 2795, 2808, 2822, 2841, 2860, 2876,
657      2895, 2914, 2932, 1933, 2030, 2148, 2950, 2969, 2170, 2988,
658      3007, 3023, 3042, 3061, 3080, 3099, 3118, 3137, 3156, 3168,
659      3187, 3206, 3225, 3244, 3252, 2205, 3267, 3283, 3302, 3318,
660      3337, 3356, 3375, 3394, 3413, 3432, 3451, 3470, 3489, 3508,
661      3520, 3539, 3558, 3577, 3596, 3612, 3627, 3643, 3662, 3678,
662      3697, 3716, 3735, 3754, 3773, 3792, 3811, 3830, 3849, 3868,
663      3887, 3906, 3921, 3940, 3959, 3974, 3988, 4007, 4026, 4045,
664      4064, 4083, 4102, 4121
665     } ;
666
667 static yyconst flex_int16_t yy_def[785] =
668     {   0,
669       703,  703,  703,  703,  703,  703,  704,  705,  703,  706,
670       704,  703,   12,  707,  704,   15,   15,   15,   15,   15,
671        15,   15,   15,   15,   15,  708,  704,   27,   27,   27,
672        27,   27,   27,   27,   27,   27,   27,   27,  704,  704,
673       704,  704,  704,  709,  703,  710,  710,  703,   48,  707,
674       710,   51,   51,   51,   51,   51,   51,   51,   51,   51,
675        51,  710,   62,   62,   62,   62,   62,   62,   62,   62,
676        62,   62,   62,  710,  710,  710,  710,  710,  709,  703,
677       703,  704,  711,  712,  711,  703,  703,  703,  703,  703,
678       704,  703,  704,  703,  713,  713,  704,  713,  703,   12,
679
680       703,  704,  707,  703,  714,  704,  715,  703,  716,  704,
681       703,  110,  110,  704,  704,  704,  110,  110,  106,  704,
682       110,  704,  110,  717,  708,  717,  718,  703,  704,  703,
683       719,  704,  703,  704,  704,  704,  704,  704,  704,  704,
684       704,  709,  720,  709,  703,  721,  722,  703,  722,  722,
685       703,  722,  703,  703,  722,  723,  722,  703,  716,  157,
686       160,  160,  722,  722,  722,  160,  160,  157,  722,  160,
687       722,  160,  157,  703,  719,  157,  703,  722,  722,  722,
688       722,  722,  722,  722,  722,  709,  703,  724,  725,  725,
689       726,  727,  724,  724,  728,  729,  703,  730,  730,  703,
690
691       703,  703,  704,  704,  703,  704,  703,  703,  703,  703,
692       704,  703,  703,  703,  704,  703,  704,  703,  704,  704,
693       703,  217,  222,  730,  703,  703,  703,  703,  703,  703,
694       704,  704,  704,  704,  704,  704,  704,  704,  704,  731,
695       732,  733,  734,  704,  735,  704,  736,  735,  704,  246,
696       704,  737,  737,  704,  253,  704,  704,  704,  704,  704,
697       704,  703,  709,  703,  738,  703,  739,  740,  740,  740,
698       740,  741,  738,  742,  740,  740,  218,  740,  740,  276,
699       280,  224,  740,  740,  740,  740,  740,  740,  740,  740,
700       740,  740,  280,  736,  740,  293,  740,  292,  740,  740,
701
702       740,  740,  740,  740,  709,  703,  703,  743,  744,  745,
703       746,  743,  747,  703,  748,  749,  749,  750,  750,  703,
704       751,  703,  703,  703,  704,  703,  703,  703,  703,  703,
705       703,  703,  703,  704,  751,  703,  704,  704,  703,  704,
706       335,  703,  704,  703,  703,  703,  703,  703,  703,  704,
707       704,  704,  703,  704,  704,  704,  704,  704,  704,  752,
708       752,  753,  754,  755,  703,  704,  703,  703,  756,  757,
709       703,  703,  757,  757,  704,  704,  703,  703,  704,  704,
710       709,  703,  703,  703,  703,  703,  758,  703,  740,  759,
711       759,  740,  740,  740,  293,  341,  740,  740,  740,  740,
712
713       740,  740,  740,  740,  740,  740,  740,  760,  740,  740,
714       740,  740,  709,  703,  745,  761,  762,  746,  763,  747,
715       748,  703,  703,  764,  765,  766,  767,  768,  769,  703,
716       703,  703,  703,  704,  703,  703,  703,  703,  703,  703,
717       704,  704,  703,  704,  703,  704,  704,  704,  704,  704,
718       770,  771,  703,  772,  703,  773,  773,  773,  704,  703,
719       703,  703,  703,  704,  703,  709,  703,  703,  703,  703,
720       703,  774,  759,  759,  740,  740,  740,  740,  740,  740,
721       740,  740,  740,  740,  740,  709,  703,  762,  775,  746,
722       763,  703,  748,  776,  764,  764,  765,  765,  766,  766,
723
724       767,  767,  768,  768,  769,  769,  703,  703,  776,  776,
725       704,  703,  703,  703,  703,  703,  703,  704,  777,  703,
726       703,  703,  703,  704,  704,  704,  704,  703,  703,  703,
727       703,  703,  703,  709,  703,  703,  703,  774,  774,  759,
728       759,  740,  740,  740,  740,  740,  740,  709,  703,  703,
729       775,  762,  748,  703,  703,  703,  703,  703,  703,  703,
730       703,  777,  777,  703,  703,  703,  703,  704,  704,  704,
731       704,  704,  709,  703,  703,  759,  759,  740,  740,  740,
732       740,  740,  709,  703,  703,  703,  703,  703,  703,  703,
733       703,  703,  703,  778,  704,  703,  703,  759,  759,  779,
734
735       740,  709,  703,  703,  703,  703,  703,  780,  780,  778,
736       610,  704,  703,  703,  759,  759,  779,  780,  617,  740,
737       709,  703,  703,  780,  610,  610,  703,  703,  759,  759,
738       781,  617,  617,  709,  703,  703,  780,  780,  610,  610,
739       703,  703,  759,  759,  781,  781,  617,  617,  709,  703,
740       703,  780,  780,  610,  782,  703,  783,  759,  781,  781,
741       617,  709,  703,  703,  703,  780,  782,  703,  703,  783,
742       703,  759,  781,  781,  709,  703,  703,  759,  781,  709,
743       703,  759,  709,  784,  784,  784,  784,  784,  784,  784,
744       784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
745
746       703,  703,    0,  703,  703,  703,  703,  703,  703,  703,
747       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
748       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
749       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
750       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
751       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
752       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
753       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
754       703,  703,  703,  703
755     } ;
756
757 static yyconst flex_int16_t yy_nxt[4217] =
758     {   0,
759         4,    4,    4,    5,    4,    4,    6,    4,    7,    8,
760         4,    9,   10,    7,    4,    4,   11,   12,   13,   13,
761         4,   14,    4,    4,   15,   16,   17,   18,   15,   15,
762        19,   15,   15,   15,   15,   20,   21,   22,   21,   23,
763        24,   21,   21,   25,   21,   26,    4,    4,   27,   28,
764        29,   30,   31,   32,   33,   34,   35,   36,   37,   38,
765        39,    7,   40,    7,    7,   41,   42,    7,    7,    7,
766        43,    7,    7,   44,    4,    4,    4,    4,    5,    4,
767        45,    6,   45,    7,    8,    4,    9,   10,   46,    4,
768         4,   47,   48,   49,   49,    4,   50,    4,    4,   51,
769
770        52,   53,   54,   51,   51,   55,   51,   51,   51,   51,
771        56,   57,   58,   57,   59,   60,   57,   57,   61,   57,
772        26,    4,    4,   62,   63,   64,   65,   66,   67,   68,
773        69,   70,   71,   72,   73,   74,   46,   75,   46,   46,
774        76,   77,   46,   46,   46,   78,   46,   46,   79,    4,
775        80,   81,   81,   81,   81,   84,   87,   88,   90,  115,
776       164,   82,   85,   85,   85,   85,  111,  702,   91,   95,
777        92,   93,  138,  148,   80,   94,   95,   95,   96,   82,
778       212,  703,  213,   82,  116,  165,  703,  195,   97,   98,
779        99,  100,  100,  100,  100,  101,  212,  111,  213,  102,
780
781       102,  102,  102,  102,  102,  102,  102,   82,  102,   82,
782        82,  102,  102,  102,  102,   82,   82,   82,  102,   82,
783       655,  139,  112,  102,  102,  102,  102,  102,  102,  102,
784       102,  102,  102,  102,  102,   82,  102,  102,  102,  102,
785       102,   82,   82,   82,   82,   82,   82,   82,  105,  141,
786       106,  196,  107,  108,  108,  108,  108,  109,  104,  111,
787       105,  117,  117,  117,  117,  117,  117,  117,  117,  117,
788       117,  117,  117,  104,  119,  134,  134,  117,  117,  117,
789       117,  106,  133,  133,  133,  110,  110,  110,  110,  110,
790       110,  110,  110,  110,  110,  110,  110,  118,  120,  117,
791
792       117,  117,  117,  111,  473,  121,  133,  134,  106,  133,
793       133,  104,  156,  240,  136,  135,  117,  117,  117,  117,
794       134,  134,  133,  133,  133,  134,  134,  577,  133,  133,
795       133,  111,  681,   82,  134,  134,  143,  114,  133,  133,
796       133,  134,  134,  134,  134,  148,  128,  133,  133,  133,
797       122,  133,  133,  133,  549,  123,  124,  125,  125,  125,
798       124,  124,  124,  124,  124,  124,  124,  124,  124,  126,
799       124,  124,  115,  181,   82,  671,  124,  124,  124,  124,
800       191,  192,  134,  134,  134,  134,  148,  161,   82,  133,
801       133,  133,  133,  133,  104,  134,  134,  116,  111,   95,
802
803       148,  124,  128,  124,  133,  133,  133,  143,  145,  147,
804       178,  703,  177,  177,   82,   90,  148,  180,  184,  267,
805        82,  144,  144,  144,  144,  149,  148,   92,  150,  124,
806       124,  129,  151,  205,  130,  130,  130,  130,  131,  166,
807       166,  166,  166,  111,  576,  177,  166,  166,  166,  166,
808       166,  166,  166,  166,  179,  518,  166,  166,  166,  166,
809       178,  178,  132,  177,  177,  177,  133,  133,  134,  134,
810       134,  134,  134,  134,  134,  134,  134,  134,  167,  145,
811       518,  178,  178,  177,  177,  177,  170,  203,  204,  132,
812        95,   95,   96,  178,  178,  172,  677,   82,  163,  177,
813
814       177,  177,  152,   98,   99,  153,  153,  153,  153,  154,
815        95,   95,   95,  155,  155,  155,  155,  155,  155,  155,
816       155,  147,  155,  147,  147,  155,  155,  155,  155,  147,
817       147,  147,  155,  147,   95,   95,   95,  155,  155,  155,
818       155,  155,  155,  155,  155,  155,  155,  155,  155,  147,
819       155,  155,  155,  155,  155,  147,  147,  147,  147,  147,
820       147,  147,   82,  273,  274,  105,  472,  157,  472,  107,
821       158,  158,  158,  158,  159,  168,  164,  105,  166,  166,
822       166,  166,  166,  166,  166,  166,  178,  178,  178,  178,
823       177,  177,  177,  177,  177,  177,  189,  307,  157,  169,
824
825       104,  165,  160,  160,  160,  160,  160,  160,  160,  160,
826       160,  160,  160,  160,  178,  178,  191,  308,  178,  178,
827       668,  177,  177,  177,  378,  157,  177,  177,  177,   81,
828        81,   81,   81,  171,   82,  191,  308,  178,  178,  173,
829       178,  178,  174,  174,  174,  174,  175,  177,  177,  177,
830       177,  177,   82,   82,  200,  111,  201,  182,  267,  644,
831        82,  202,  310,  311,  148,  148,   82,   82,   82,   82,
832       176,  212,  148,  379,  177,  177,  178,  178,  178,  178,
833       178,  178,  178,  178,  178,  178,  349,  143,  254,  254,
834       254,  254,  349,  254,  254,  254,  254,  176,  186,  313,
835
836       314,  144,  144,  144,  144,  363,  183,  185,  189,   95,
837        95,   95,  171,  430,   95,  193,  193,  193,  193,  194,
838       385,  208,  143,  209,   82,  258,  703,  431,  210,  386,
839        82,  703,  254,  254,  254,  254,  144,  144,  144,  144,
840       263,   82,  148,   82,   82,   82,   82,  364,  676,  268,
841       269,  270,  271,  148,  224,  148,  148,  148,  148,  145,
842       109,  224,  107,  198,  198,  198,  198,  109,  259,  664,
843       285,  671,   82,  147,  147,  147,  147,  382,   82,  286,
844        82,   82,  383,  384,  148,  224,  290,  273,  274,  104,
845       148,  109,  148,  148,  145,  199,  199,  199,  199,  199,
846
847       199,  199,  199,  199,  199,  199,  199,  270,  333,  333,
848       333,  333,  224,  334,  334,  334,  334,  669,  109,  215,
849       215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
850       215,   82,  286,   82,  303,  270,  217,  361,  389,   82,
851        82,   82,   82,  218,  104,  148,  643,  219,  219,  219,
852       219,  219,  219,  219,  219,  219,  219,  219,   82,   82,
853        82,   82,   82,   82,   82,   82,   82,  217,  313,  314,
854       128,  220,  220,  220,  220,  220,  220,  220,  220,  220,
855       220,  220,  220,   82,   82,   82,   82,   82,   82,   82,
856        82,   82,   82,   82,  217,   82,  222,   82,  616,  223,
857
858       223,  223,  223,  224,   82,  298,  298,  298,  298,  148,
859        82,   82,  298,  298,  298,  298,  148,   82,  668,  143,
860       310,  311,  148,  148,  416,  417,  363,  222,  665,  148,
861       305,  220,  220,  220,  220,  220,  220,  220,  220,  220,
862       220,  220,  220,  331,  301,  335,  335,  335,  335,  337,
863       337,  337,  337,  332,  222,  225,  326,  226,   82,  304,
864       332,   82,  227,  228,   82,  661,  368,  229,  364,  287,
865       148,  230,  330,  148,   82,  289,  148,   82,   82,  225,
866       377,  226,  298,  298,  298,  298,  148,  227,  228,  148,
867       148,  145,  353,  229,  338,  338,  338,  338,  230,  124,
868
869       125,  125,  125,  124,  124,  124,  124,  124,  124,  124,
870       124,  124,  124,  124,  124,  354,  189,  307,  302,  124,
871       124,  124,  124,  193,  193,  193,  193,  194,  189,  307,
872       339,  339,  339,  339,  549,  315,  315,  315,  315,  354,
873       703,  419,  192,  550,  124,  128,  124,  703,  224,  313,
874       314,  321,  321,  321,  321,  224,   82,   82,   82,   82,
875        82,   82,   82,   82,   82,   82,   82,  338,  338,  338,
876       338,  703,  124,  124,  124,  241,  241,  241,  242,  224,
877       124,  124,  124,  124,  124,  124,  419,  192,  124,  124,
878       338,  338,  338,  338,  124,  124,  368,  124,  703,   82,
879
880       424,  350,  369,  369,  369,  369,  224,  392,  392,  392,
881       392,  148,  338,  338,  338,  338,   82,  416,  417,  124,
882       128,  403,  489,  490,  351,  661,   82,  656,  148,  241,
883       241,  241,  242,  253,  393,  393,  393,  393,  148,  104,
884       370,  370,  370,  370,  445,  655,  255,  124,  124,  244,
885       244,  244,  244,  244,  244,  244,  244,  244,  244,  244,
886       244,   82,  245,  359,  425,  361,  246,  451,  445,   82,
887        82,   82,   82,  247,  128,  248,  372,  249,  249,  249,
888       249,  249,  249,  249,  249,  249,  249,  249,  249,  249,
889       249,  249,  249,  249,  249,  249,  249,  250,  128,  474,
890
891       128,  251,  251,  251,  251,  251,  251,  251,  251,  251,
892       251,  251,  251,  249,  249,  249,  249,  249,  249,  249,
893       249,  249,  249,  249,  250,  249,  133,  133,  133,  133,
894       133,  133,  133,  133,  133,  133,  133,  133,   82,  253,
895       419,  192,  143,   82,  489,  490,  254,  254,  254,  254,
896       654,  446,  255,  413,  256,  256,  256,  256,  256,  256,
897       256,  256,  256,  256,  256,  256,  256,  256,  256,  256,
898       256,  256,  256,  256,  256,  447,  419,  192,   82,   82,
899        82,   82,  257,   82,   82,   82,   82,   82,   82,   82,
900        82,   82,   82,   82,   82,   82,   82,   82,   82,   82,
901
902        82,   82,   82,   95,   95,   95,  422,  422,  422,  422,
903        82,  684,   82,  654,  145,  147,   98,  412,  153,  153,
904       153,  153,  148,  443,  148,  104,  155,  155,  155,  155,
905       155,  155,  155,  155,  147,  155,  147,  147,  155,  155,
906       155,  155,  147,  147,  147,  155,  147,  378,  463,  651,
907       155,  155,  155,  155,  155,  155,  155,  155,  155,  155,
908       155,  155,  147,  155,  155,  155,  155,  155,  147,  147,
909       147,  147,  147,  147,  147,   82,   82,  390,   82,  189,
910       492,  444,  378,  145,  493,  703,  391,  148,  148,  650,
911       148,   82,  703,  703,  703,  703,  377,  464,  703,  394,
912
913       394,  394,  394,  148,  147,  147,  147,  147,  147,  147,
914       147,  147,  147,  147,  147,  275,  275,  275,  275,  275,
915       275,  275,  275,  275,  275,  275,  275,   82,  703,   82,
916       426,  411,  276,  489,  490,  147,  147,  147,  147,  277,
917       400,  148,  522,  278,  278,  278,  278,  278,  278,  278,
918       278,  278,  278,  278,  147,  147,  147,  147,  147,  147,
919       147,  147,  147,  276,  419,  192,  523,  279,  279,  279,
920       279,  279,  279,  279,  279,  279,  279,  279,  279,  147,
921       147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
922       276,  147,  280,  143,  427,  281,  281,  281,  281,  282,
923
924       648,  353,  104,   82,   82,   82,   82,  381,  381,  381,
925       381,  394,  394,  394,  394,  148,  148,  148,  148,  432,
926       432,  432,  432,  280,  401,  489,  490,  279,  279,  279,
927       279,  279,  279,  279,  279,  279,  279,  279,  279,  434,
928       434,  434,  434,  451,  647,  398,  398,  642,  401,  402,
929       280,  292,  292,  292,  292,  292,  292,  292,  292,  292,
930       292,  292,  292,   82,  245,  145,   82,  599,  293,  489,
931       490,  147,  147,  147,  147,  294,  528,  248,  148,  295,
932       295,  295,  295,  295,  295,  295,  295,  295,  295,  295,
933       295,  295,  295,  295,  295,  295,  295,  295,  295,  296,
934
935       539,  388,  539,  297,  297,  297,  297,  297,  297,  297,
936       297,  297,  297,  297,  297,  295,  295,  295,  295,  295,
937       295,  295,  295,  295,  295,  295,  296,  295,  177,  177,
938       177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
939        82,  253,  641,   82,  640,  147,  104,  598,  298,  298,
940       298,  298,  148,  639,  255,  148,  299,  299,  299,  299,
941       299,  299,  299,  299,  299,  299,  299,  299,  299,  299,
942       299,  299,  299,  299,  299,  299,  299,  452,  452,  452,
943       147,  147,  147,  147,  300,  147,  147,  147,  147,  147,
944       147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
945
946       147,  147,  147,  147,  147,  219,  219,  219,  219,  219,
947       219,  219,  219,  219,  219,  219,   82,  369,  369,  369,
948       369,  104,  453,  104,  394,  394,  394,  394,  148,  220,
949       220,  220,  220,  220,  220,  220,  220,  220,  220,  220,
950       220,  336,  336,  336,  336,  336,  336,  336,  336,  336,
951       336,  336,   82,  189,  307,  104,  658,  463,  399,  104,
952       421,  421,  421,  421,  148,  320,  320,  320,  320,  320,
953       320,  320,  320,  320,  320,  320,  320,  340,   82,   82,
954        82,  462,   82,  630,  341,  541,  342,   82,  270,  368,
955       148,  148,  148,   82,  148,  408,  408,  408,  408,  148,
956
957       404,  394,  394,  394,  394,  148,  462,  428,  340,  104,
958       615,  104,  343,  343,  343,  343,  343,  343,  343,  343,
959       343,  343,  343,  343,  399,  456,  456,  456,  456,  405,
960       494,  494,  494,  494,  560,  340,  124,  241,  241,  241,
961       242,   82,  124,  124,  124,  124,  124,  124,  703,  517,
962       124,  124,  406,  148,  341,  703,  124,  124,  428,  124,
963       373,  341,  332,  342,  703,  341,   82,  540,  682,  332,
964       636,  429,  341,  374,  703,   82,  373,  703,  148,  703,
965       342,  124,  128,   82,  457,  341,  507,  148,   82,  703,
966        82,   82,   82,   82,   82,  635,  341,  458,  508,  143,
967
968       406,  628,  148,  461,  433,   82,  703,  703,   90,  124,
969       124,  253,  341,  466,  466,  466,  466,  148,  467,  703,
970        92,  481,  429,  341,  255,   94,  256,  256,  256,  256,
971       256,  256,  256,  256,  256,  256,  256,  256,  256,  256,
972       256,  256,  256,  256,  256,  256,  256,  214,  214,  482,
973       539,  388,  539,  627,  257,  366,  366,  366,  366,  366,
974       366,  366,  366,  366,  366,  366,  366,  373,  143,   82,
975       623,  145,  452,  452,  452,  606,  529,  529,  529,  486,
976       374,  148,  375,  375,  375,  375,  375,  375,  375,  375,
977       375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
978
979       375,  375,  375,  468,   82,  457,  532,  443,  622,  703,
980       376,   82,   82,  469,   82,   99,  148,  453,  458,  476,
981       101,  530,  703,  148,  148,  570,  148,  278,  278,  278,
982       278,  278,  278,  278,  278,  278,  278,  278,   82,  571,
983       145,  549,  104,  520,  216,  216,  475,  475,  475,  475,
984       148,  279,  279,  279,  279,  279,  279,  279,  279,  279,
985       279,  279,  279,  395,  477,  478,   82,   82,   82,  520,
986       396,  624,  342,   82,  457,  614,  514,  613,  148,  148,
987       148,  408,  408,  408,  408,  148,  208,  703,  209,  479,
988       514,  514,  657,  210,  395,  624,  270,  509,  397,  397,
989
990       397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
991       510,  624,  483,  480,  143,  529,  529,  529,  605,   82,
992       457,  395,   82,  253,  147,   82,  534,  147,  147,  147,
993       147,  148,  606,  458,  148,  624,  255,  148,  299,  299,
994       299,  299,  299,  299,  299,  299,  299,  299,  299,  299,
995       299,  299,  299,  299,  299,  299,  299,  299,  299,  625,
996       530,  104,  221,  221,  612,  104,  300,  407,  407,  407,
997       407,  407,  407,  407,  407,  407,  407,  407,  407,  373,
998       189,  307,  608,  626,  252,  252,  535,  553,  553,  553,
999       553,  608,  374,  632,  409,  409,  409,  409,  409,  409,
1000
1001       409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
1002       409,  409,  409,  409,  409,  629,  672,  633,  519,  367,
1003       367,  607,  410,  343,  343,  343,  343,  343,  343,  343,
1004       343,  343,  343,  343,  343,  397,  397,  397,  397,  397,
1005       397,  397,  397,  397,  397,  397,  397,   82,  520,   82,
1006       111,  443,   82,  463,   82,   82,   82,   82,  521,  148,
1007       111,  148,  589,   82,  148,   82,  148,  148,  148,  148,
1008       703,  143,  544,  509,  520,  148,  514,  148,  143,  604,
1009        82,  543,  548,  703,   82,   82,  703,  557,   82,  583,
1010       514,  514,  148,   82,  624,   82,  148,  148,   82,  652,
1011
1012       148,  545,  485,  270,  509,  148,  543,  148,  556,  603,
1013       148,  597,  578,  596,  595,  571,  546,  510,  624,  511,
1014       511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
1015       511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
1016        82,  509,  579,  145,  594,  547,  600,  594,  593,  686,
1017       145,  104,  148,  592,  510,  591,  542,  542,  542,  542,
1018       542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
1019       542,  542,  542,  542,  542,  542,  542,  143,   82,  189,
1020       492,  631,  590,   82,   82,  143,  553,  553,  553,  553,
1021       148,  573,  573,  573,  573,  148,  148,   82,   82,  573,
1022
1023       573,  573,  573,   82,   82,  678,  143,  388,  624,  148,
1024       148,  104,  388,  637,  624,  148,  148,  602,  181,  624,
1025       143,  262,  563,  143,  582,  143,  666,  580,  624,  600,
1026       624,  621,  624,  663,  634,  646,  649,  638,  624,  143,
1027       646,  581,  620,  624,  653,  624,  581,  664,  563,  145,
1028       662,  143,  624,  589,  624,  588,  587,  535,  686,  646,
1029       143,  657,  675,  601,  646,  586,  585,  666,  388,  624,
1030       143,  680,  686,  557,  552,  388,  388,  388,  145,  609,
1031       609,  683,  609,  609,  609,  609,  609,  388,  609,  609,
1032       609,  609,  145,  609,  609,  145,  646,  145,  659,  609,
1033
1034       609,  609,  609,  646,  646,  646,  686,  584,  673,  611,
1035       686,  145,  388,  679,  575,  646,  574,  687,  679,  388,
1036       646,  688,  660,  145,  609,  609,  609,  646,  646,  646,
1037       262,  264,  145,  611,  686,  674,  462,  686,  686,  646,
1038       686,  532,  145,  572,  701,  689,  569,  646,  690,  691,
1039       568,  692,  609,  609,  609,  609,  567,  609,  609,  609,
1040       609,  609,  610,  609,  609,  609,  609,  566,  609,  609,
1041       686,  646,  565,  564,  618,  609,  609,  609,  262,  563,
1042       137,  693,  262,  686,  619,  686,  686,  561,  559,  558,
1043       557,  686,  686,  686,  694,  556,  695,  696,  555,  609,
1044
1045       609,  609,  697,  698,  699,  686,  262,  506,  619,  262,
1046       262,  506,  262,  504,  504,  502,  700,  502,  500,  500,
1047       498,  498,  496,  496,  552,  537,  536,  609,  609,  609,
1048       609,  212,  609,  609,  609,  609,  609,  205,  609,  609,
1049       609,  609,  262,  609,  609,  377,  533,  462,  532,  609,
1050       609,  609,  609,  455,  111,  262,  527,  262,  262,  611,
1051       526,  525,  524,  262,  262,  262,  443,  111,  517,  516,
1052       515,  513,  512,  431,  609,  609,  609,  262,  506,  504,
1053       502,  500,  498,  611,  496,  433,  307,  487,  267,  388,
1054       471,  470,   86,  206,  465,  462,  377,  368,  455,  450,
1055
1056       449,  448,  609,  609,  609,  609,  206,  609,  609,  609,
1057       609,  609,  610,  609,  609,  609,  609,  442,  609,  609,
1058       441,  440,  439,  438,  618,  609,  609,  609,  437,  436,
1059       435,  342,  433,  342,  619,  212,  212,  206,  205,  205,
1060       205,  319,  319,  317,  317,  414,  368,  267,  267,  609,
1061       609,  609,  267,  266,  388,  266,  359,  380,  619,  351,
1062       350,  377,  253,  368,  368,  245,  358,  357,  356,  355,
1063       352,  348,  347,  346,  345,  344,  330,  609,  609,   82,
1064       330,  329,  328,   82,   82,  327,  326,   82,   82,   82,
1065        82,   82,   82,   82,   82,   83,   83,   83,   83,   83,
1066
1067       326,   83,   83,   83,   83,   83,   83,   83,   83,   83,
1068        83,   83,   83,   83,   89,   89,  325,  324,  323,   89,
1069        89,   89,  103,  103,  103,  103,  103,  103,  103,  103,
1070       103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
1071       103,  127,  127,  127,  127,  127,  127,  127,  127,  127,
1072       127,  127,  127,  127,  127,  127,  127,  127,  127,  127,
1073       142,  142,  142,  142,  142,  142,  142,  142,  142,  142,
1074       142,  142,  142,  142,  142,  142,  142,  142,  142,  147,
1075       322,  319,  317,  147,  147,  147,  306,  147,  147,  147,
1076       147,  147,  147,  147,  147,  188,  188,  188,  188,  188,
1077
1078       267,  188,  188,  188,  188,  188,  188,  188,  188,  188,
1079       188,  188,  188,  188,  190,  190,  190,  190,  190,  190,
1080       190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
1081       190,  190,  190,  207,  207,  291,  289,  288,  287,  284,
1082       283,  267,  267,  207,  266,  264,  207,  207,  262,  207,
1083       124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
1084       124,  124,  124,  124,  124,  124,  124,  124,  124,  243,
1085       243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
1086       243,  243,  243,  243,  243,  243,  243,  243,  143,  143,
1087       143,  143,  143,  143,  143,  143,  143,  143,  143,  143,
1088
1089       143,  143,  143,  143,  143,  143,  143,  265,  265,  265,
1090       265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
1091       265,  265,  265,  265,  265,  265,  147,  261,  237,  206,
1092       147,  147,  147,  260,  147,  147,  147,  147,  147,  147,
1093       147,  147,  272,  272,  272,  272,  272,  272,  272,  272,
1094       272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
1095       272,  188,  188,  188,  188,  188,  188,  188,  188,  188,
1096       188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
1097       190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
1098       190,  190,  190,  190,  190,  190,  190,  190,  190,  309,
1099
1100       309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
1101       309,  309,  309,  309,  309,  309,  309,  309,  312,  312,
1102       312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
1103       312,  312,  312,  312,  312,  312,  312,  316,  316,  235,
1104       316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
1105       316,  316,  316,  316,  316,  316,  318,  318,  128,  318,
1106       318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
1107       318,  318,  318,  318,  318,  320,  239,  320,  238,  237,
1108       206,  320,  320,  320,  236,  235,  320,  360,  360,  360,
1109       360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
1110
1111       360,  360,  360,  360,  360,  360,  124,  124,  124,  124,
1112       124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
1113       124,  124,  124,  124,  124,  362,  362,  362,  362,  362,
1114       362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
1115       362,  362,  362,  362,  243,  243,  243,  243,  243,  243,
1116       243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
1117       243,  243,  243,  365,  365,  365,  365,  365,  365,  365,
1118       365,  371,  234,  234,  233,  371,  232,  371,  371,  371,
1119       371,  231,  371,  265,  265,  265,  265,  265,  265,  265,
1120       265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
1121
1122       265,  265,  387,  387,  387,  387,  387,  387,  387,  387,
1123       387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
1124       387,  147,  104,  212,  211,  147,  147,  147,  205,  147,
1125       147,  147,  147,  147,  147,  147,  147,  272,  272,  272,
1126       272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
1127       272,  272,  272,  272,  272,  272,  103,  103,  103,  103,
1128       103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
1129       103,  103,  103,  103,  103,  312,  312,  312,  312,  312,
1130       312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
1131       312,  312,  312,  312,  309,  309,  309,  309,  309,  309,
1132
1133       309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
1134       309,  309,  309,  415,  415,  415,  415,  415,  415,  415,
1135       415,  415,  415,  415,  415,  415,  415,  415,  415,  415,
1136       415,  415,  418,  418,  418,  418,  418,  418,  418,  418,
1137       418,  418,  418,  418,  418,  418,  418,  418,  418,  418,
1138       418,  420,  420,  420,  420,  420,  420,  420,  420,  420,
1139       420,  420,  420,  420,  420,  420,  420,  420,  420,  420,
1140       188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
1141       188,  188,  188,  188,  188,  188,  188,  188,  188,  316,
1142       316,  206,  316,  316,  316,  316,  316,  316,  316,  316,
1143
1144       316,  316,  316,  316,  316,  316,  316,  316,  318,  318,
1145       205,  318,  318,  318,  318,  318,  318,  318,  318,  318,
1146       318,  318,  318,  318,  318,  318,  318,  423,  197,  423,
1147       423,  189,  187,  423,  423,  423,  163,  162,  423,  360,
1148       360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
1149       360,  360,  360,  360,  360,  360,  360,  360,  362,  362,
1150       362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
1151       362,  362,  362,  362,  362,  362,  362,  124,  124,  124,
1152       124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
1153       124,  124,  124,  124,  124,  124,  454,  454,  454,  454,
1154
1155       454,  454,  454,  454,  454,  454,  454,  454,  454,  454,
1156       454,  454,  454,  454,  454,  459,  459,  146,  122,  459,
1157       459,  140,  459,  459,  459,  459,  459,  459,  459,  459,
1158       459,  460,  137,  114,  113,  104,   86,  460,  460,  460,
1159       460,  703,  460,  387,  387,  387,  387,  387,  387,  387,
1160       387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
1161       387,  387,  103,  103,  103,  103,  103,  103,  103,  103,
1162       103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
1163       103,  484,  484,  703,  703,  484,  484,  484,  484,  484,
1164       484,  484,  484,  484,  484,  484,  484,  416,  416,  416,
1165
1166       416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
1167       416,  416,  416,  416,  416,  416,  488,  488,  488,  488,
1168       488,  488,  488,  488,  488,  488,  488,  488,  488,  488,
1169       488,  488,  488,  488,  488,  491,  491,  491,  491,  491,
1170       491,  491,  491,  491,  491,  491,  491,  491,  491,  491,
1171       491,  491,  491,  491,  495,  495,  703,  495,  495,  495,
1172       495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
1173       495,  495,  495,  497,  497,  703,  497,  497,  497,  497,
1174       497,  497,  497,  497,  497,  497,  497,  497,  497,  497,
1175       497,  497,  499,  499,  703,  499,  499,  499,  499,  499,
1176
1177       499,  499,  499,  499,  499,  499,  499,  499,  499,  499,
1178       499,  501,  501,  703,  501,  501,  501,  501,  501,  501,
1179       501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
1180       503,  503,  703,  503,  503,  503,  503,  503,  503,  503,
1181       503,  503,  503,  503,  503,  503,  503,  503,  503,  505,
1182       505,  703,  505,  505,  505,  505,  505,  505,  505,  505,
1183       505,  505,  505,  505,  505,  505,  505,  505,  360,  360,
1184       360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
1185       360,  360,  360,  360,  360,  360,  360,  124,  124,  124,
1186       124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
1187
1188       124,  124,  124,  124,  124,  124,  454,  454,  454,  454,
1189       454,  454,  454,  454,  454,  454,  454,  454,  454,  454,
1190       454,  454,  454,  454,  454,  531,  703,  703,  703,  703,
1191       703,  531,  531,  531,  531,  531,  531,  531,  531,  531,
1192       538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
1193       538,  538,  538,  538,  538,  538,  538,  538,  538,  551,
1194       551,  551,  551,  703,  551,  551,  551,  551,  551,  551,
1195       551,  551,  551,  551,  551,  551,  551,  551,  554,  703,
1196       703,  703,  703,  703,  554,  554,  554,  554,  562,  562,
1197       703,  562,  562,  562,  562,  562,  562,  562,  562,  562,
1198
1199       562,  562,  562,  562,  562,  562,  562,  610,  610,  703,
1200       610,  610,  610,  610,  610,  610,  610,  610,  610,  610,
1201       610,  610,  610,  610,  610,  610,  617,  617,  703,  617,
1202       617,  617,  617,  617,  617,  617,  617,  617,  617,  617,
1203       617,  617,  617,  617,  617,  609,  609,  703,  609,  609,
1204       609,  609,  609,  609,  609,  609,  609,  609,  609,  609,
1205       609,  609,  609,  609,  645,  645,  645,  645,  645,  645,
1206       645,  645,  645,  645,  645,  645,  645,  645,  645,  645,
1207       645,  645,  645,  667,  667,  667,  667,  667,  667,  667,
1208       667,  667,  667,  667,  667,  667,  667,  667,  667,  667,
1209
1210       667,  667,  670,  670,  670,  670,  670,  670,  670,  670,
1211       670,  670,  670,  670,  670,  670,  670,  670,  670,  670,
1212       670,  685,  685,  685,  685,  685,  685,  685,  685,  685,
1213       685,  685,  685,  685,  685,  685,  685,  685,  685,  685,
1214         3,  703,  703,  703,  703,  703,  703,  703,  703,  703,
1215       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
1216       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
1217       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
1218       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
1219       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
1220
1221       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
1222       703,  703,  703,  703,  703,  703
1223     } ;
1224
1225 static yyconst flex_int16_t yy_chk[4217] =
1226     {   0,
1227         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1228         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1229         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1230         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1231         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1232         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1233         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1234         1,    1,    1,    1,    1,    2,    2,    2,    2,    2,
1235         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1236         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1237
1238         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1239         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1240         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1241         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1242         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1243         5,    6,    6,    6,    6,    8,   10,   10,   11,   19,
1244        55,   46,    8,    8,    8,    8,   16,  701,   11,   13,
1245        11,   11,   40,   46,    5,   11,   12,   12,   12,   13,
1246        99,   13,   99,   12,   19,   55,   13,   86,   12,   12,
1247        12,   12,   12,   12,   12,   12,  328,   43,  328,   12,
1248
1249        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
1250        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
1251       681,   40,   16,   12,   12,   12,   12,   12,   12,   12,
1252        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
1253        12,   12,   12,   12,   12,   12,   12,   12,   15,   43,
1254        15,   86,   15,   15,   15,   15,   15,   15,  390,   28,
1255        15,   21,   21,   21,   21,   20,   20,   20,   20,   23,
1256        23,   23,   23,  541,   22,   35,   35,   22,   22,   22,
1257        22,   15,   35,   35,   35,   15,   15,   15,   15,   15,
1258        15,   15,   15,   15,   15,   15,   15,   20,   22,   24,
1259
1260        24,   24,   24,   25,  390,   23,   28,   29,   15,   29,
1261        29,   50,   50,  126,   29,   28,   25,   25,   25,   25,
1262        30,   30,   30,   30,   30,   31,   31,  541,   31,   31,
1263        31,   52,  677,   74,   32,   32,  142,   30,   32,   32,
1264        32,   34,   34,   36,   36,   74,  126,   34,   34,   34,
1265        24,   36,   36,   36,  676,   25,   26,   26,   26,   26,
1266        26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
1267        26,   26,   33,   74,   76,  670,   26,   26,   26,   26,
1268        84,   84,   38,   38,   33,   33,   76,   52,  147,   33,
1269        33,   33,   38,   38,  540,   37,   37,   33,   63,   49,
1270
1271       147,   26,   26,   26,   37,   37,   37,   44,  142,   49,
1272        64,   49,   64,   64,  155,   47,   49,   64,   76,  151,
1273        47,   44,   44,   44,   44,   47,  155,   47,   47,   26,
1274        26,   27,   47,  151,   27,   27,   27,   27,   27,   57,
1275        57,   57,   57,   61,  540,   63,   56,   56,   56,   56,
1276        59,   59,   59,   59,   63,  442,   61,   61,   61,   61,
1277        66,   66,   27,   66,   66,   66,   27,   27,   27,   27,
1278        27,   27,   27,   27,   27,   27,   27,   27,   56,   44,
1279       442,   65,   65,   65,   65,   65,   59,   91,   91,   27,
1280        48,   48,   48,   69,   69,   61,  669,   48,   65,   69,
1281
1282        69,   69,   48,   48,   48,   48,   48,   48,   48,   48,
1283        95,   95,   95,   48,   48,   48,   48,   48,   48,   48,
1284        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
1285        48,   48,   48,   48,   98,   98,   98,   48,   48,   48,
1286        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
1287        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
1288        48,   48,   51,  156,  156,   51,  388,   51,  388,   51,
1289        51,   51,   51,   51,   51,   58,   68,   51,   58,   58,
1290        58,   58,   60,   60,   60,   60,   67,   67,   68,   68,
1291        67,   67,   67,   68,   68,   68,  188,  188,   51,   58,
1292
1293       630,   68,   51,   51,   51,   51,   51,   51,   51,   51,
1294        51,   51,   51,   51,   70,   70,  189,  189,   71,   71,
1295       667,   70,   70,   70,  257,   51,   71,   71,   71,   81,
1296        81,   81,   81,   60,   62,  190,  190,   73,   73,   62,
1297        72,   72,   62,   62,   62,   62,   62,   73,   73,   72,
1298        72,   72,   75,   77,   90,   78,   90,   75,  154,  630,
1299        78,   90,  191,  191,   75,   77,  117,  117,  117,  117,
1300        62,  154,   78,  257,   62,   62,   62,   62,   62,   62,
1301        62,   62,   62,   62,   62,   62,  230,   79,  134,  134,
1302       134,  134,  230,  135,  135,  135,  135,   62,   79,  192,
1303
1304       192,   79,   79,   79,   79,  242,   75,   78,   85,   96,
1305        96,   96,   77,  332,  100,   85,   85,   85,   85,   85,
1306       266,   96,  144,   96,  100,  135,  100,  332,   96,  266,
1307       163,  100,  136,  136,  136,  136,  144,  144,  144,  144,
1308       144,  149,  163,  150,  152,  164,  171,  242,  665,  149,
1309       149,  150,  152,  149,  198,  150,  152,  164,  171,   79,
1310        89,  198,   89,   89,   89,   89,   89,   89,  136,  663,
1311       163,  657,  165,  166,  166,  166,  166,  264,  169,  164,
1312       182,  183,  264,  264,  165,  198,  171,  272,  272,  629,
1313       169,   89,  182,  183,  144,   89,   89,   89,   89,   89,
1314
1315        89,   89,   89,   89,   89,   89,   89,  169,  214,  214,
1316       214,  214,  198,  215,  215,  215,  215,  656,   89,  106,
1317       106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
1318       106,  108,  165,  268,  182,  183,  108,  240,  268,  108,
1319       108,  108,  108,  108,  599,  268,  629,  108,  108,  108,
1320       108,  108,  108,  108,  108,  108,  108,  108,  108,  108,
1321       108,  108,  108,  108,  108,  108,  108,  108,  308,  308,
1322       240,  108,  108,  108,  108,  108,  108,  108,  108,  108,
1323       108,  108,  108,  108,  108,  108,  108,  108,  108,  108,
1324       108,  108,  108,  108,  108,  108,  110,  178,  599,  110,
1325
1326       110,  110,  110,  110,  179,  178,  178,  178,  178,  178,
1327       181,  185,  179,  179,  179,  179,  179,  184,  655,  186,
1328       309,  309,  181,  185,  310,  310,  362,  110,  651,  184,
1329       186,  110,  110,  110,  110,  110,  110,  110,  110,  110,
1330       110,  110,  110,  213,  179,  216,  216,  216,  216,  219,
1331       219,  219,  219,  213,  110,  111,  269,  111,  270,  185,
1332       213,  269,  111,  111,  295,  648,  295,  111,  362,  181,
1333       270,  111,  271,  269,  180,  184,  295,  271,  299,  111,
1334       299,  111,  180,  180,  180,  180,  180,  111,  111,  271,
1335       299,  186,  234,  111,  220,  220,  220,  220,  111,  125,
1336
1337       125,  125,  125,  125,  125,  125,  125,  125,  125,  125,
1338       125,  125,  125,  125,  125,  234,  193,  193,  180,  125,
1339       125,  125,  125,  193,  193,  193,  193,  193,  194,  194,
1340       221,  221,  221,  221,  487,  194,  194,  194,  194,  234,
1341       224,  311,  311,  487,  125,  125,  125,  224,  199,  312,
1342       312,  199,  199,  199,  199,  199,  222,  222,  222,  222,
1343       222,  222,  222,  222,  222,  222,  222,  231,  231,  231,
1344       231,  224,  125,  125,  127,  127,  127,  127,  127,  199,
1345       127,  127,  127,  127,  127,  127,  313,  313,  127,  127,
1346       232,  232,  232,  232,  127,  127,  251,  127,  224,  275,
1347
1348       326,  231,  251,  251,  251,  251,  199,  275,  275,  275,
1349       275,  275,  239,  239,  239,  239,  288,  415,  415,  127,
1350       127,  288,  417,  417,  232,  647,  278,  642,  288,  241,
1351       241,  241,  241,  252,  278,  278,  278,  278,  278,  391,
1352       252,  252,  252,  252,  353,  641,  252,  127,  127,  129,
1353       129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
1354       129,  130,  130,  239,  326,  360,  130,  361,  353,  130,
1355       130,  130,  130,  130,  241,  130,  252,  130,  130,  130,
1356       130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
1357       130,  130,  130,  130,  130,  130,  130,  130,  360,  391,
1358
1359       361,  130,  130,  130,  130,  130,  130,  130,  130,  130,
1360       130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
1361       130,  130,  130,  130,  130,  130,  132,  132,  132,  132,
1362       132,  132,  132,  132,  132,  132,  132,  132,  133,  133,
1363       418,  418,  305,  133,  419,  419,  133,  133,  133,  133,
1364       640,  354,  133,  305,  133,  133,  133,  133,  133,  133,
1365       133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
1366       133,  133,  133,  133,  133,  354,  420,  420,  133,  133,
1367       133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
1368       133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
1369
1370       133,  133,  133,  153,  153,  153,  320,  320,  320,  320,
1371       153,  683,  303,  639,  305,  153,  153,  303,  153,  153,
1372       153,  153,  153,  352,  303,  274,  153,  153,  153,  153,
1373       153,  153,  153,  153,  153,  153,  153,  153,  153,  153,
1374       153,  153,  153,  153,  153,  153,  153,  372,  376,  636,
1375       153,  153,  153,  153,  153,  153,  153,  153,  153,  153,
1376       153,  153,  153,  153,  153,  153,  153,  153,  153,  153,
1377       153,  153,  153,  153,  153,  157,  300,  274,  285,  421,
1378       421,  352,  300,  683,  421,  253,  274,  157,  300,  635,
1379       285,  279,  253,  253,  253,  253,  372,  376,  253,  279,
1380
1381       279,  279,  279,  279,  280,  280,  280,  280,  280,  280,
1382       280,  280,  280,  280,  280,  157,  157,  157,  157,  157,
1383       157,  157,  157,  157,  157,  157,  157,  158,  253,  393,
1384       330,  300,  158,  488,  488,  158,  158,  158,  158,  158,
1385       285,  393,  445,  158,  158,  158,  158,  158,  158,  158,
1386       158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
1387       158,  158,  158,  158,  490,  490,  445,  158,  158,  158,
1388       158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
1389       158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
1390       158,  158,  160,  263,  330,  160,  160,  160,  160,  160,
1391
1392       633,  286,  577,  283,  301,  287,  286,  263,  263,  263,
1393       263,  283,  283,  283,  283,  283,  301,  287,  286,  336,
1394       336,  336,  336,  160,  286,  491,  491,  160,  160,  160,
1395       160,  160,  160,  160,  160,  160,  160,  160,  160,  343,
1396       343,  343,  343,  451,  632,  283,  301,  628,  286,  287,
1397       160,  173,  173,  173,  173,  173,  173,  173,  173,  173,
1398       173,  173,  173,  174,  174,  263,  402,  577,  174,  552,
1399       552,  174,  174,  174,  174,  174,  451,  174,  402,  174,
1400       174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
1401       174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
1402
1403       472,  472,  472,  174,  174,  174,  174,  174,  174,  174,
1404       174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
1405       174,  174,  174,  174,  174,  174,  174,  174,  176,  176,
1406       176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
1407       177,  177,  627,  411,  626,  177,  576,  576,  177,  177,
1408       177,  177,  177,  625,  177,  411,  177,  177,  177,  177,
1409       177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
1410       177,  177,  177,  177,  177,  177,  177,  363,  363,  363,
1411       177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
1412       177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
1413
1414       177,  177,  177,  177,  177,  217,  217,  217,  217,  217,
1415       217,  217,  217,  217,  217,  217,  284,  366,  366,  366,
1416       366,  474,  363,  616,  284,  284,  284,  284,  284,  217,
1417       217,  217,  217,  217,  217,  217,  217,  217,  217,  217,
1418       217,  218,  218,  218,  218,  218,  218,  218,  218,  218,
1419       218,  218,  289,  315,  315,  644,  644,  461,  284,  598,
1420       315,  315,  315,  315,  289,  218,  218,  218,  218,  218,
1421       218,  218,  218,  218,  218,  218,  218,  223,  290,  409,
1422       389,  409,  302,  616,  223,  474,  223,  297,  389,  297,
1423       290,  409,  389,  291,  302,  297,  297,  297,  297,  297,
1424
1425       289,  291,  291,  291,  291,  291,  461,  586,  223,  473,
1426       598,  678,  223,  223,  223,  223,  223,  223,  223,  223,
1427       223,  223,  223,  223,  302,  367,  367,  367,  367,  290,
1428       423,  423,  423,  423,  515,  223,  243,  243,  243,  243,
1429       243,  304,  243,  243,  243,  243,  243,  243,  341,  515,
1430       243,  243,  291,  304,  321,  341,  243,  243,  331,  243,
1431       370,  321,  331,  321,  373,  335,  392,  473,  678,  331,
1432       623,  586,  335,  370,  335,  404,  374,  373,  392,  341,
1433       392,  243,  243,  369,  369,  321,  431,  404,  369,  374,
1434       394,  369,  369,  369,  369,  622,  335,  369,  431,  381,
1435
1436       304,  614,  394,  370,  394,  405,  341,  373,  383,  243,
1437       243,  244,  321,  381,  381,  381,  381,  405,  383,  374,
1438       383,  404,  331,  335,  244,  383,  244,  244,  244,  244,
1439       244,  244,  244,  244,  244,  244,  244,  244,  244,  244,
1440       244,  244,  244,  244,  244,  244,  244,  714,  714,  405,
1441       539,  539,  539,  613,  244,  246,  246,  246,  246,  246,
1442       246,  246,  246,  246,  246,  246,  246,  254,  413,  398,
1443       607,  381,  452,  452,  452,  605,  455,  455,  455,  413,
1444       254,  398,  254,  254,  254,  254,  254,  254,  254,  254,
1445       254,  254,  254,  254,  254,  254,  254,  254,  254,  254,
1446
1447       254,  254,  254,  384,  484,  456,  484,  400,  604,  457,
1448       254,  276,  400,  384,  399,  384,  484,  452,  456,  398,
1449       384,  455,  457,  276,  400,  526,  399,  276,  276,  276,
1450       276,  276,  276,  276,  276,  276,  276,  276,  397,  526,
1451       413,  603,  643,  591,  715,  715,  397,  397,  397,  397,
1452       397,  276,  276,  276,  276,  276,  276,  276,  276,  276,
1453       276,  276,  276,  281,  399,  400,  401,  403,  406,  591,
1454       281,  608,  281,  407,  458,  597,  437,  596,  401,  403,
1455       406,  407,  407,  407,  407,  407,  468,  458,  468,  401,
1456       437,  437,  643,  468,  281,  608,  403,  494,  281,  281,
1457
1458       281,  281,  281,  281,  281,  281,  281,  281,  281,  281,
1459       494,  609,  406,  401,  466,  529,  529,  529,  589,  408,
1460       408,  281,  292,  292,  408,  485,  466,  408,  408,  408,
1461       408,  408,  589,  408,  292,  609,  292,  485,  292,  292,
1462       292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
1463       292,  292,  292,  292,  292,  292,  292,  292,  292,  611,
1464       529,  615,  716,  716,  595,  658,  292,  293,  293,  293,
1465       293,  293,  293,  293,  293,  293,  293,  293,  293,  298,
1466       493,  493,  593,  611,  719,  719,  466,  493,  493,  493,
1467       493,  592,  298,  619,  298,  298,  298,  298,  298,  298,
1468
1469       298,  298,  298,  298,  298,  298,  298,  298,  298,  298,
1470       298,  298,  298,  298,  298,  615,  658,  619,  443,  736,
1471       736,  590,  298,  340,  340,  340,  340,  340,  340,  340,
1472       340,  340,  340,  340,  340,  395,  395,  395,  395,  395,
1473       395,  395,  395,  395,  395,  395,  395,  410,  443,  412,
1474       476,  478,  479,  410,  477,  476,  478,  480,  443,  410,
1475       483,  412,  588,  481,  479,  483,  477,  476,  478,  480,
1476       509,  486,  479,  510,  443,  481,  514,  483,  548,  587,
1477       544,  477,  486,  509,  545,  542,  510,  542,  579,  548,
1478       514,  514,  544,  482,  637,  581,  545,  542,  620,  637,
1479
1480       579,  480,  410,  412,  434,  482,  477,  581,  585,  584,
1481       620,  575,  544,  574,  572,  570,  481,  434,  637,  434,
1482       434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
1483       434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
1484       475,  475,  545,  486,  569,  482,  579,  568,  567,  684,
1485       548,  672,  475,  566,  475,  565,  475,  475,  475,  475,
1486       475,  475,  475,  475,  475,  475,  475,  475,  475,  475,
1487       475,  475,  475,  475,  475,  475,  475,  534,  543,  553,
1488       553,  618,  564,  546,  547,  573,  553,  553,  553,  553,
1489       543,  534,  534,  534,  534,  546,  547,  578,  601,  573,
1490
1491       573,  573,  573,  580,  582,  672,  583,  631,  618,  578,
1492       601,  682,  645,  624,  638,  580,  582,  583,  543,  624,
1493       602,  684,  563,  621,  547,  634,  652,  546,  652,  578,
1494       666,  602,  618,  650,  621,  631,  634,  624,  638,  649,
1495       645,  546,  601,  624,  638,  653,  580,  650,  562,  534,
1496       649,  662,  652,  561,  666,  559,  558,  573,  685,  631,
1497       675,  682,  662,  582,  645,  556,  555,  653,  674,  653,
1498       680,  675,  700,  554,  551,  659,  646,  660,  583,  594,
1499       594,  680,  594,  594,  594,  594,  594,  673,  594,  594,
1500       594,  594,  602,  594,  594,  621,  674,  634,  646,  594,
1501
1502       594,  594,  594,  659,  646,  660,  686,  550,  659,  594,
1503       687,  649,  538,  673,  537,  673,  536,  686,  674,  679,
1504       674,  687,  646,  662,  594,  594,  594,  659,  646,  660,
1505       685,  535,  675,  594,  688,  660,  533,  689,  690,  673,
1506       691,  531,  680,  527,  700,  688,  525,  679,  689,  690,
1507       524,  691,  594,  594,  600,  600,  523,  600,  600,  600,
1508       600,  600,  600,  600,  600,  600,  600,  522,  600,  600,
1509       692,  679,  521,  520,  600,  600,  600,  600,  686,  519,
1510       518,  692,  687,  693,  600,  694,  695,  516,  513,  512,
1511       511,  696,  697,  698,  693,  508,  694,  695,  507,  600,
1512
1513       600,  600,  696,  697,  698,  699,  688,  506,  600,  689,
1514       690,  505,  691,  504,  503,  502,  699,  501,  500,  499,
1515       498,  497,  496,  495,  489,  471,  470,  600,  600,  610,
1516       610,  469,  610,  610,  610,  610,  610,  467,  610,  610,
1517       610,  610,  692,  610,  610,  465,  463,  460,  459,  610,
1518       610,  610,  610,  454,  450,  693,  449,  694,  695,  610,
1519       448,  447,  446,  696,  697,  698,  444,  441,  440,  439,
1520       438,  436,  435,  430,  610,  610,  610,  699,  429,  428,
1521       427,  426,  425,  610,  424,  422,  416,  414,  396,  387,
1522       386,  385,  382,  380,  378,  375,  371,  365,  364,  359,
1523
1524       358,  357,  610,  610,  617,  617,  356,  617,  617,  617,
1525       617,  617,  617,  617,  617,  617,  617,  351,  617,  617,
1526       350,  349,  348,  347,  617,  617,  617,  617,  346,  345,
1527       344,  339,  338,  334,  617,  329,  327,  325,  324,  323,
1528       322,  319,  318,  317,  316,  306,  296,  294,  282,  617,
1529       617,  617,  277,  273,  267,  265,  261,  260,  617,  259,
1530       258,  256,  255,  250,  249,  248,  238,  237,  236,  235,
1531       233,  229,  228,  227,  226,  225,  212,  617,  617,  704,
1532       211,  210,  209,  704,  704,  208,  205,  704,  704,  704,
1533       704,  704,  704,  704,  704,  705,  705,  705,  705,  705,
1534
1535       204,  705,  705,  705,  705,  705,  705,  705,  705,  705,
1536       705,  705,  705,  705,  706,  706,  203,  202,  201,  706,
1537       706,  706,  707,  707,  707,  707,  707,  707,  707,  707,
1538       707,  707,  707,  707,  707,  707,  707,  707,  707,  707,
1539       707,  708,  708,  708,  708,  708,  708,  708,  708,  708,
1540       708,  708,  708,  708,  708,  708,  708,  708,  708,  708,
1541       709,  709,  709,  709,  709,  709,  709,  709,  709,  709,
1542       709,  709,  709,  709,  709,  709,  709,  709,  709,  710,
1543       200,  196,  195,  710,  710,  710,  187,  710,  710,  710,
1544       710,  710,  710,  710,  710,  711,  711,  711,  711,  711,
1545
1546       175,  711,  711,  711,  711,  711,  711,  711,  711,  711,
1547       711,  711,  711,  711,  712,  712,  712,  712,  712,  712,
1548       712,  712,  712,  712,  712,  712,  712,  712,  712,  712,
1549       712,  712,  712,  713,  713,  172,  170,  168,  167,  162,
1550       161,  159,  148,  713,  146,  145,  713,  713,  143,  713,
1551       717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
1552       717,  717,  717,  717,  717,  717,  717,  717,  717,  718,
1553       718,  718,  718,  718,  718,  718,  718,  718,  718,  718,
1554       718,  718,  718,  718,  718,  718,  718,  718,  720,  720,
1555       720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
1556
1557       720,  720,  720,  720,  720,  720,  720,  721,  721,  721,
1558       721,  721,  721,  721,  721,  721,  721,  721,  721,  721,
1559       721,  721,  721,  721,  721,  721,  722,  141,  140,  139,
1560       722,  722,  722,  138,  722,  722,  722,  722,  722,  722,
1561       722,  722,  723,  723,  723,  723,  723,  723,  723,  723,
1562       723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
1563       723,  724,  724,  724,  724,  724,  724,  724,  724,  724,
1564       724,  724,  724,  724,  724,  724,  724,  724,  724,  724,
1565       725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
1566       725,  725,  725,  725,  725,  725,  725,  725,  725,  726,
1567
1568       726,  726,  726,  726,  726,  726,  726,  726,  726,  726,
1569       726,  726,  726,  726,  726,  726,  726,  726,  727,  727,
1570       727,  727,  727,  727,  727,  727,  727,  727,  727,  727,
1571       727,  727,  727,  727,  727,  727,  727,  728,  728,  137,
1572       728,  728,  728,  728,  728,  728,  728,  728,  728,  728,
1573       728,  728,  728,  728,  728,  728,  729,  729,  124,  729,
1574       729,  729,  729,  729,  729,  729,  729,  729,  729,  729,
1575       729,  729,  729,  729,  729,  730,  123,  730,  122,  121,
1576       120,  730,  730,  730,  119,  118,  730,  731,  731,  731,
1577       731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
1578
1579       731,  731,  731,  731,  731,  731,  732,  732,  732,  732,
1580       732,  732,  732,  732,  732,  732,  732,  732,  732,  732,
1581       732,  732,  732,  732,  732,  733,  733,  733,  733,  733,
1582       733,  733,  733,  733,  733,  733,  733,  733,  733,  733,
1583       733,  733,  733,  733,  734,  734,  734,  734,  734,  734,
1584       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1585       734,  734,  734,  735,  735,  735,  735,  735,  735,  735,
1586       735,  737,  116,  115,  114,  737,  113,  737,  737,  737,
1587       737,  112,  737,  738,  738,  738,  738,  738,  738,  738,
1588       738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
1589
1590       738,  738,  739,  739,  739,  739,  739,  739,  739,  739,
1591       739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
1592       739,  740,  103,  101,   97,  740,  740,  740,   94,  740,
1593       740,  740,  740,  740,  740,  740,  740,  741,  741,  741,
1594       741,  741,  741,  741,  741,  741,  741,  741,  741,  741,
1595       741,  741,  741,  741,  741,  741,  742,  742,  742,  742,
1596       742,  742,  742,  742,  742,  742,  742,  742,  742,  742,
1597       742,  742,  742,  742,  742,  743,  743,  743,  743,  743,
1598       743,  743,  743,  743,  743,  743,  743,  743,  743,  743,
1599       743,  743,  743,  743,  744,  744,  744,  744,  744,  744,
1600
1601       744,  744,  744,  744,  744,  744,  744,  744,  744,  744,
1602       744,  744,  744,  745,  745,  745,  745,  745,  745,  745,
1603       745,  745,  745,  745,  745,  745,  745,  745,  745,  745,
1604       745,  745,  746,  746,  746,  746,  746,  746,  746,  746,
1605       746,  746,  746,  746,  746,  746,  746,  746,  746,  746,
1606       746,  747,  747,  747,  747,  747,  747,  747,  747,  747,
1607       747,  747,  747,  747,  747,  747,  747,  747,  747,  747,
1608       748,  748,  748,  748,  748,  748,  748,  748,  748,  748,
1609       748,  748,  748,  748,  748,  748,  748,  748,  748,  749,
1610       749,   93,  749,  749,  749,  749,  749,  749,  749,  749,
1611
1612       749,  749,  749,  749,  749,  749,  749,  749,  750,  750,
1613        92,  750,  750,  750,  750,  750,  750,  750,  750,  750,
1614       750,  750,  750,  750,  750,  750,  750,  751,   88,  751,
1615       751,   83,   80,  751,  751,  751,   54,   53,  751,  752,
1616       752,  752,  752,  752,  752,  752,  752,  752,  752,  752,
1617       752,  752,  752,  752,  752,  752,  752,  752,  753,  753,
1618       753,  753,  753,  753,  753,  753,  753,  753,  753,  753,
1619       753,  753,  753,  753,  753,  753,  753,  754,  754,  754,
1620       754,  754,  754,  754,  754,  754,  754,  754,  754,  754,
1621       754,  754,  754,  754,  754,  754,  755,  755,  755,  755,
1622
1623       755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
1624       755,  755,  755,  755,  755,  756,  756,   45,   42,  756,
1625       756,   41,  756,  756,  756,  756,  756,  756,  756,  756,
1626       756,  757,   39,   18,   17,   14,    9,  757,  757,  757,
1627       757,    3,  757,  758,  758,  758,  758,  758,  758,  758,
1628       758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
1629       758,  758,  759,  759,  759,  759,  759,  759,  759,  759,
1630       759,  759,  759,  759,  759,  759,  759,  759,  759,  759,
1631       759,  760,  760,    0,    0,  760,  760,  760,  760,  760,
1632       760,  760,  760,  760,  760,  760,  760,  761,  761,  761,
1633
1634       761,  761,  761,  761,  761,  761,  761,  761,  761,  761,
1635       761,  761,  761,  761,  761,  761,  762,  762,  762,  762,
1636       762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
1637       762,  762,  762,  762,  762,  763,  763,  763,  763,  763,
1638       763,  763,  763,  763,  763,  763,  763,  763,  763,  763,
1639       763,  763,  763,  763,  764,  764,    0,  764,  764,  764,
1640       764,  764,  764,  764,  764,  764,  764,  764,  764,  764,
1641       764,  764,  764,  765,  765,    0,  765,  765,  765,  765,
1642       765,  765,  765,  765,  765,  765,  765,  765,  765,  765,
1643       765,  765,  766,  766,    0,  766,  766,  766,  766,  766,
1644
1645       766,  766,  766,  766,  766,  766,  766,  766,  766,  766,
1646       766,  767,  767,    0,  767,  767,  767,  767,  767,  767,
1647       767,  767,  767,  767,  767,  767,  767,  767,  767,  767,
1648       768,  768,    0,  768,  768,  768,  768,  768,  768,  768,
1649       768,  768,  768,  768,  768,  768,  768,  768,  768,  769,
1650       769,    0,  769,  769,  769,  769,  769,  769,  769,  769,
1651       769,  769,  769,  769,  769,  769,  769,  769,  770,  770,
1652       770,  770,  770,  770,  770,  770,  770,  770,  770,  770,
1653       770,  770,  770,  770,  770,  770,  770,  771,  771,  771,
1654       771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
1655
1656       771,  771,  771,  771,  771,  771,  772,  772,  772,  772,
1657       772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
1658       772,  772,  772,  772,  772,  773,    0,    0,    0,    0,
1659         0,  773,  773,  773,  773,  773,  773,  773,  773,  773,
1660       774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
1661       774,  774,  774,  774,  774,  774,  774,  774,  774,  775,
1662       775,  775,  775,    0,  775,  775,  775,  775,  775,  775,
1663       775,  775,  775,  775,  775,  775,  775,  775,  776,    0,
1664         0,    0,    0,    0,  776,  776,  776,  776,  777,  777,
1665         0,  777,  777,  777,  777,  777,  777,  777,  777,  777,
1666
1667       777,  777,  777,  777,  777,  777,  777,  778,  778,    0,
1668       778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
1669       778,  778,  778,  778,  778,  778,  779,  779,    0,  779,
1670       779,  779,  779,  779,  779,  779,  779,  779,  779,  779,
1671       779,  779,  779,  779,  779,  780,  780,    0,  780,  780,
1672       780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
1673       780,  780,  780,  780,  781,  781,  781,  781,  781,  781,
1674       781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
1675       781,  781,  781,  782,  782,  782,  782,  782,  782,  782,
1676       782,  782,  782,  782,  782,  782,  782,  782,  782,  782,
1677
1678       782,  782,  783,  783,  783,  783,  783,  783,  783,  783,
1679       783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
1680       783,  784,  784,  784,  784,  784,  784,  784,  784,  784,
1681       784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
1682       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
1683       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
1684       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
1685       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
1686       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
1687       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
1688
1689       703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
1690       703,  703,  703,  703,  703,  703
1691     } ;
1692
1693 extern int yy_flex_debug;
1694 int yy_flex_debug = 0;
1695
1696 static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
1697 static char *yy_full_match;
1698 static int yy_lp;
1699 static int yy_looking_for_trail_begin = 0;
1700 static int yy_full_lp;
1701 static int *yy_full_state;
1702 #define YY_TRAILING_MASK 0x2000
1703 #define YY_TRAILING_HEAD_MASK 0x4000
1704 #define REJECT \
1705 { \
1706 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ \
1707 yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
1708 (yy_lp) = (yy_full_lp); /* restore orig. accepting pos. */ \
1709 (yy_state_ptr) = (yy_full_state); /* restore orig. state */ \
1710 yy_current_state = *(yy_state_ptr); /* restore curr. state */ \
1711 ++(yy_lp); \
1712 goto find_rule; \
1713 }
1714
1715 #define yymore() yymore_used_but_not_detected
1716 #define YY_MORE_ADJ 0
1717 #define YY_RESTORE_YY_MORE_OFFSET
1718 char *yytext;
1719 #line 1 "parser.l"
1720 #line 8 "parser.l"
1721 /*
1722  * parser.l -- lex parser of algebraic chess moves for XBoard
1723  *
1724  * Copyright 1991 by Digital Equipment Corporation, Maynard,
1725  * Massachusetts.
1726  *
1727  * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005,
1728  * 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
1729  *
1730  * The following terms apply to Digital Equipment Corporation's copyright
1731  * interest in XBoard:
1732  * ------------------------------------------------------------------------
1733  * All Rights Reserved
1734  *
1735  * Permission to use, copy, modify, and distribute this software and its
1736  * documentation for any purpose and without fee is hereby granted,
1737  * provided that the above copyright notice appear in all copies and that
1738  * both that copyright notice and this permission notice appear in
1739  * supporting documentation, and that the name of Digital not be
1740  * used in advertising or publicity pertaining to distribution of the
1741  * software without specific, written prior permission.
1742  *
1743  * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
1744  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
1745  * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
1746  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
1747  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
1748  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
1749  * SOFTWARE.
1750  * ------------------------------------------------------------------------
1751  *
1752  * The following terms apply to the enhanced version of XBoard
1753  * distributed by the Free Software Foundation:
1754  * ------------------------------------------------------------------------
1755  *
1756  * GNU XBoard is free software: you can redistribute it and/or modify
1757  * it under the terms of the GNU General Public License as published by
1758  * the Free Software Foundation, either version 3 of the License, or (at
1759  * your option) any later version.
1760  *
1761  * GNU XBoard is distributed in the hope that it will be useful, but
1762  * WITHOUT ANY WARRANTY; without even the implied warranty of
1763  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1764  * General Public License for more details.
1765  *
1766  * You should have received a copy of the GNU General Public License
1767  * along with this program. If not, see http://www.gnu.org/licenses/.  
1768  *
1769  *------------------------------------------------------------------------
1770  ** See the file ChangeLog for a revision history.  */
1771
1772 /* This parser handles all forms of promotion.
1773  * The parser resolves ambiguous moves by searching and check-testing.
1774  * It also parses comments of the form [anything] or (anything).
1775  *
1776  * [HGM] Parser extensively modified for bigger boards, Shogi-like syntax,
1777  * and unknow pieces. All pieces are now mandatory upper case, but can be
1778  * any letter A-Z. Files must be lower case (as before), but can run upto 'l'.
1779  * Ranks can be 0-9. The parser returns 0 for off-board files and ranks.
1780  * For an unknown piece (as mover or promotion piece) it returns
1781  * IllegalMove, like it does when the piece doesn't match.
1782  * Promotions can now also be appended Shogi-style, a bare '=' or '+',
1783  * and this is then returned as promotion character. The piece indicator
1784  * can be prefixed by a '+' to indicate it is a promoted piece.
1785  */
1786
1787 #include "config.h"
1788
1789 #define NO_CONSTRAINT   -1
1790 #undef YYLMAX
1791 #define YYLMAX                  4096
1792 #define UNPUT_BUF_SIZE          YYLMAX
1793
1794 #ifdef FLEX_SCANNER
1795 /* yytext is probably a char*, but could be a char[].  yy_text is set
1796    in YY_DECL below, because if yytext is a char*, its value is not
1797    constant. */
1798 char *yy_text;
1799 #else /*!FLEX_SCANNER*/
1800 /* yytext is definitely a char[], so yy_text can be set here, statically. */
1801 char *yy_text = (char *) yytext;
1802 #endif
1803
1804 #ifdef FLEX_SCANNER
1805 /* This is flex */
1806 /* [AP] use prototypes in function declarations */
1807 #define YY_USE_PROTOS
1808
1809 #ifdef YY_USE_PROTOS
1810 #define YY_PROTO(proto) proto
1811 #else
1812 #define YY_PROTO(proto) ()
1813 #endif
1814 /* end of [AP] fix */
1815
1816 #undef YY_INPUT
1817 #define YY_INPUT(buf, result, max_size) my_yy_input(buf, &result, max_size)
1818 #undef YY_DECL
1819 #define YY_DECL                     \
1820     int _yylex YY_PROTO((void));    \
1821     int yylex YY_PROTO((void))      \
1822     {                               \
1823         int result = _yylex();      \
1824         yy_text = (char *) yytext;  \
1825         return(result);             \
1826     }                               \
1827     int _yylex YY_PROTO((void))
1828 #else
1829 /* This is lex */
1830 #undef input
1831 #undef output
1832 #undef unput
1833 #endif
1834
1835 /* The includes must be here, below the #undef input */
1836
1837 #include <ctype.h>
1838
1839 #if STDC_HEADERS
1840 # include <stdlib.h>
1841 # include <string.h>
1842 #else /* not STDC_HEADERS */
1843 # if HAVE_STRING_H
1844 #  include <string.h>
1845 # else /* not HAVE_STRING_H */
1846 #  include <strings.h>
1847 # endif /* not HAVE_STRING_H */
1848 #endif /* not STDC_HEADERS */
1849
1850 #if HAVE_UNISTD_H
1851 # include <unistd.h>
1852 #endif
1853
1854 #if defined(_amigados)
1855 # include <errno.h>
1856 # if HAVE_FCNTL_H
1857 #  include <fcntl.h>    /*  isatty() prototype  */
1858 # endif /*  HAVE_FCNTL_H        */
1859 #endif  /*  defined(_amigados)  */
1860
1861 #include "common.h"
1862 #include "backend.h"
1863 #include "frontend.h"
1864 #include "parser.h"
1865 #include "moves.h"
1866
1867 extern int PosFlags P((int));
1868
1869 extern Board    boards[MAX_MOVES];
1870 int             yyboardindex;
1871 int             yyskipmoves = FALSE;
1872 char            currentMoveString[YYLMAX];
1873 #ifndef FLEX_SCANNER
1874 char            unputBuffer[UNPUT_BUF_SIZE];
1875 int             unputCount = 0;
1876 #endif
1877
1878 #ifdef FLEX_SCANNER
1879 void my_yy_input P((char *buf, int *result, int max_size));
1880 #else /*!FLEX_SCANNER*/
1881 static int input P((void));
1882 static void output P((int ch));
1883 static void unput P((int ch));
1884 int yylook P((void));
1885 int yyback P((int *, int));
1886 #endif
1887 #undef yywrap
1888 int yywrap P((void));
1889 extern void CopyBoard P((Board to, Board from));
1890
1891 #line 1892 "parser.c"
1892
1893 #define INITIAL 0
1894
1895 #ifndef YY_NO_UNISTD_H
1896 /* Special case for "unistd.h", since it is non-ANSI. We include it way
1897  * down here because we want the user's section 1 to have been scanned first.
1898  * The user has a chance to override it with an option.
1899  */
1900 #include <unistd.h>
1901 #endif
1902
1903 #ifndef YY_EXTRA_TYPE
1904 #define YY_EXTRA_TYPE void *
1905 #endif
1906
1907 static int yy_init_globals (void );
1908
1909 /* Macros after this point can all be overridden by user definitions in
1910  * section 1.
1911  */
1912
1913 #ifndef YY_SKIP_YYWRAP
1914 #ifdef __cplusplus
1915 extern "C" int yywrap (void );
1916 #else
1917 extern int yywrap (void );
1918 #endif
1919 #endif
1920
1921     static void yyunput (int c,char *buf_ptr  );
1922     
1923 #ifndef yytext_ptr
1924 static void yy_flex_strncpy (char *,yyconst char *,int );
1925 #endif
1926
1927 #ifdef YY_NEED_STRLEN
1928 static int yy_flex_strlen (yyconst char * );
1929 #endif
1930
1931 #ifndef YY_NO_INPUT
1932
1933 #ifdef __cplusplus
1934 static int yyinput (void );
1935 #else
1936 static int input (void );
1937 #endif
1938
1939 #endif
1940
1941 /* Amount of stuff to slurp up with each read. */
1942 #ifndef YY_READ_BUF_SIZE
1943 #define YY_READ_BUF_SIZE 8192
1944 #endif
1945
1946 /* Copy whatever the last rule matched to the standard output. */
1947 #ifndef ECHO
1948 /* This used to be an fputs(), but since the string might contain NUL's,
1949  * we now use fwrite().
1950  */
1951 #define ECHO fwrite( yytext, yyleng, 1, yyout )
1952 #endif
1953
1954 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
1955  * is returned in "result".
1956  */
1957 #ifndef YY_INPUT
1958 #define YY_INPUT(buf,result,max_size) \
1959         if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
1960                 { \
1961                 int c = '*'; \
1962                 int n; \
1963                 for ( n = 0; n < max_size && \
1964                              (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
1965                         buf[n] = (char) c; \
1966                 if ( c == '\n' ) \
1967                         buf[n++] = (char) c; \
1968                 if ( c == EOF && ferror( yyin ) ) \
1969                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
1970                 result = n; \
1971                 } \
1972         else \
1973                 { \
1974                 errno=0; \
1975                 while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
1976                         { \
1977                         if( errno != EINTR) \
1978                                 { \
1979                                 YY_FATAL_ERROR( "input in flex scanner failed" ); \
1980                                 break; \
1981                                 } \
1982                         errno=0; \
1983                         clearerr(yyin); \
1984                         } \
1985                 }\
1986 \
1987
1988 #endif
1989
1990 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1991  * we don't want an extra ';' after the "return" because that will cause
1992  * some compilers to complain about unreachable statements.
1993  */
1994 #ifndef yyterminate
1995 #define yyterminate() return YY_NULL
1996 #endif
1997
1998 /* Number of entries by which start-condition stack grows. */
1999 #ifndef YY_START_STACK_INCR
2000 #define YY_START_STACK_INCR 25
2001 #endif
2002
2003 /* Report a fatal error. */
2004 #ifndef YY_FATAL_ERROR
2005 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
2006 #endif
2007
2008 /* end tables serialization structures and prototypes */
2009
2010 /* Default declaration of generated scanner - a define so the user can
2011  * easily add parameters.
2012  */
2013 #ifndef YY_DECL
2014 #define YY_DECL_IS_OURS 1
2015
2016 extern int yylex (void);
2017
2018 #define YY_DECL int yylex (void)
2019 #endif /* !YY_DECL */
2020
2021 /* Code executed at the beginning of each rule, after yytext and yyleng
2022  * have been set up.
2023  */
2024 #ifndef YY_USER_ACTION
2025 #define YY_USER_ACTION
2026 #endif
2027
2028 /* Code executed at the end of each rule. */
2029 #ifndef YY_BREAK
2030 #define YY_BREAK break;
2031 #endif
2032
2033 #define YY_RULE_SETUP \
2034         if ( yyleng > 0 ) \
2035                 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
2036                                 (yytext[yyleng - 1] == '\n'); \
2037         YY_USER_ACTION
2038
2039 /** The main scanner function which does all the work.
2040  */
2041 YY_DECL
2042 {
2043         register yy_state_type yy_current_state;
2044         register char *yy_cp, *yy_bp;
2045         register int yy_act;
2046     
2047 #line 179 "parser.l"
2048
2049
2050 #line 2051 "parser.c"
2051
2052         if ( !(yy_init) )
2053                 {
2054                 (yy_init) = 1;
2055
2056 #ifdef YY_USER_INIT
2057                 YY_USER_INIT;
2058 #endif
2059
2060         /* Create the reject buffer large enough to save one state per allowed character. */
2061         if ( ! (yy_state_buf) )
2062             (yy_state_buf) = (yy_state_type *)yyalloc(YY_STATE_BUF_SIZE  );
2063             if ( ! (yy_state_buf) )
2064                 YY_FATAL_ERROR( "out of dynamic memory in yylex()" );
2065
2066                 if ( ! (yy_start) )
2067                         (yy_start) = 1; /* first start state */
2068
2069                 if ( ! yyin )
2070                         yyin = stdin;
2071
2072                 if ( ! yyout )
2073                         yyout = stdout;
2074
2075                 if ( ! YY_CURRENT_BUFFER ) {
2076                         yyensure_buffer_stack ();
2077                         YY_CURRENT_BUFFER_LVALUE =
2078                                 yy_create_buffer(yyin,YY_BUF_SIZE );
2079                 }
2080
2081                 yy_load_buffer_state( );
2082                 }
2083
2084         while ( 1 )             /* loops until end-of-file is reached */
2085                 {
2086                 yy_cp = (yy_c_buf_p);
2087
2088                 /* Support of yytext. */
2089                 *yy_cp = (yy_hold_char);
2090
2091                 /* yy_bp points to the position in yy_ch_buf of the start of
2092                  * the current run.
2093                  */
2094                 yy_bp = yy_cp;
2095
2096                 yy_current_state = (yy_start);
2097                 yy_current_state += YY_AT_BOL();
2098
2099                 (yy_state_ptr) = (yy_state_buf);
2100                 *(yy_state_ptr)++ = yy_current_state;
2101
2102 yy_match:
2103                 do
2104                         {
2105                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
2106                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2107                                 {
2108                                 yy_current_state = (int) yy_def[yy_current_state];
2109                                 if ( yy_current_state >= 704 )
2110                                         yy_c = yy_meta[(unsigned int) yy_c];
2111                                 }
2112                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2113                         *(yy_state_ptr)++ = yy_current_state;
2114                         ++yy_cp;
2115                         }
2116                 while ( yy_base[yy_current_state] != 4141 );
2117
2118 yy_find_action:
2119                 yy_current_state = *--(yy_state_ptr);
2120                 (yy_lp) = yy_accept[yy_current_state];
2121 find_rule: /* we branch to this label when backing up */
2122                 for ( ; ; ) /* until we find what rule we matched */
2123                         {
2124                         if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
2125                                 {
2126                                 yy_act = yy_acclist[(yy_lp)];
2127                                 if ( yy_act & YY_TRAILING_HEAD_MASK ||
2128                                      (yy_looking_for_trail_begin) )
2129                                         {
2130                                         if ( yy_act == (yy_looking_for_trail_begin) )
2131                                                 {
2132                                                 (yy_looking_for_trail_begin) = 0;
2133                                                 yy_act &= ~YY_TRAILING_HEAD_MASK;
2134                                                 break;
2135                                                 }
2136                                         }
2137                                 else if ( yy_act & YY_TRAILING_MASK )
2138                                         {
2139                                         (yy_looking_for_trail_begin) = yy_act & ~YY_TRAILING_MASK;
2140                                         (yy_looking_for_trail_begin) |= YY_TRAILING_HEAD_MASK;
2141                                         }
2142                                 else
2143                                         {
2144                                         (yy_full_match) = yy_cp;
2145                                         (yy_full_state) = (yy_state_ptr);
2146                                         (yy_full_lp) = (yy_lp);
2147                                         break;
2148                                         }
2149                                 ++(yy_lp);
2150                                 goto find_rule;
2151                                 }
2152                         --yy_cp;
2153                         yy_current_state = *--(yy_state_ptr);
2154                         (yy_lp) = yy_accept[yy_current_state];
2155                         }
2156
2157                 YY_DO_BEFORE_ACTION;
2158
2159 do_action:      /* This label is used only to access EOF actions. */
2160
2161                 switch ( yy_act )
2162         { /* beginning of action switch */
2163 case 1:
2164 YY_RULE_SETUP
2165 #line 181 "parser.l"
2166 {
2167     /*
2168      * Fully-qualified algebraic move, possibly with promotion
2169      */
2170     int skip1 = 0, skip2 = 0, skip3 = 0, promoted = 0;
2171     ChessSquare piece;
2172     ChessMove result;
2173     char c;
2174     
2175     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2176
2177     if (yytext[0] == '+') skip1 = skip3 = promoted = 1; /* [HGM] Shogi promoted */
2178
2179     /* remove the / */
2180     if (yytext[1+skip1] == '/')  skip1++; 
2181     
2182     /* remove the [xX:-] */
2183     if ((yytext[3+skip1] == 'x') || (yytext[3+skip1] == 'X') ||
2184         (yytext[3+skip1] == '-') || (yytext[3+skip1] == ':')) skip2 = 1;
2185     
2186     currentMoveString[0] = yytext[1+skip1];
2187     currentMoveString[1] = yytext[2+skip1];
2188     currentMoveString[2] = yytext[3+skip1+skip2];
2189     currentMoveString[3] = yytext[4+skip1+skip2];
2190     currentMoveString[4] = NULLCHAR;
2191     
2192     if (appData.debugMode) {
2193         fprintf(debugFP, "Parser Qa1b2: yyleng=%d\n",
2194         yyleng);
2195     }
2196
2197     if (yyleng-skip1-skip2 > 5) { char c;
2198         if (yytext[yyleng-1] == ')') {
2199             c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
2200         } else {
2201             c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
2202         }
2203         currentMoveString[5] = NULLCHAR;
2204         if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
2205             return IllegalMove; /* [HGM] promotion to invalid piece */
2206     }
2207
2208     if (appData.debugMode) {
2209         fprintf(debugFP, "parser: %s\n", currentMoveString);
2210     }
2211     /* [HGM] do not allow values beyond board size */
2212     if(currentMoveString[1] - ONE >= BOARD_HEIGHT ||
2213        currentMoveString[1] - ONE <  0            ||
2214        currentMoveString[0] - AAA >= BOARD_RGHT   ||
2215        currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2216        currentMoveString[3] - ONE <  0            ||
2217        currentMoveString[2] - AAA >= BOARD_RGHT   ||
2218        currentMoveString[0] - AAA <  BOARD_LEFT   ||
2219        currentMoveString[2] - AAA <  BOARD_LEFT     )
2220       return ImpossibleMove;
2221
2222     piece = boards[yyboardindex]
2223       [currentMoveString[1] - ONE][currentMoveString[0] - AAA];
2224     if(promoted) piece = (ChessSquare) (DEMOTED piece);
2225     c = PieceToChar(piece);
2226     if(c == '~') c = PieceToChar((ChessSquare) (DEMOTED piece));
2227     if (ToLower(yytext[skip3]) != ToLower(c))
2228       return (int) IllegalMove;
2229
2230     result = LegalityTest(boards[yyboardindex],
2231                           PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
2232                           currentMoveString[1] - ONE,
2233                           currentMoveString[0] - AAA,
2234                           currentMoveString[3] - ONE,
2235                           currentMoveString[2] - AAA,
2236                           currentMoveString[4]);
2237
2238     if (currentMoveString[4] == NULLCHAR &&
2239         (result == WhitePromotion  || result == BlackPromotion)) {
2240         if(gameInfo.variant == VariantCourier || gameInfo.variant == VariantShatranj)
2241             currentMoveString[4] = PieceToChar(BlackFerz);
2242         else if(gameInfo.variant == VariantGreat)
2243             currentMoveString[4] = PieceToChar(BlackMan);
2244         else if(gameInfo.variant == VariantShogi)
2245             currentMoveString[4] = '+';
2246         else
2247             currentMoveString[4] = PieceToChar(BlackQueen);
2248         currentMoveString[5] = NULLCHAR;
2249     }
2250
2251     return (int) result;
2252 }
2253         YY_BREAK
2254 case 2:
2255 YY_RULE_SETUP
2256 #line 269 "parser.l"
2257 {
2258     /*
2259      * Simple algebraic move, possibly with promotion
2260      * [HGM] Engine moves are received in this format, with lower-case promoChar!
2261      */
2262     int skip = 0;
2263     ChessMove result;
2264
2265     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2266
2267     /* remove the [xX:-] */
2268     if ((yytext[2] == 'x') || (yytext[2] == 'X') ||
2269         (yytext[2] == '-') || (yytext[2] == ':')) skip = 1;
2270
2271     currentMoveString[0] = yytext[0];
2272     currentMoveString[1] = yytext[1];
2273     currentMoveString[2] = yytext[2+skip];
2274     currentMoveString[3] = yytext[3+skip];
2275     currentMoveString[4] = NULLCHAR;
2276
2277     if (yyleng-skip > 4) { char c;
2278         if (yytext[yyleng-1] == ')') {
2279             c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
2280         } else {
2281             c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
2282         }
2283         currentMoveString[5] = NULLCHAR;
2284         if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
2285             return IllegalMove;
2286     }
2287
2288     /* [HGM] do not allow values beyond board size */
2289     if(currentMoveString[1] - ONE >= BOARD_HEIGHT ||
2290        currentMoveString[1] - ONE <  0            ||
2291        currentMoveString[0] - AAA >= BOARD_RGHT   ||
2292        currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2293        currentMoveString[3] - ONE <  0            ||
2294        currentMoveString[2] - AAA >= BOARD_RGHT   ||
2295        currentMoveString[0] - AAA <  BOARD_LEFT   ||
2296        currentMoveString[2] - AAA <  BOARD_LEFT     )
2297       return ImpossibleMove;
2298
2299     result = LegalityTest(boards[yyboardindex],
2300                           PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
2301                           currentMoveString[1] - ONE,
2302                           currentMoveString[0] - AAA,
2303                           currentMoveString[3] - ONE,
2304                           currentMoveString[2] - AAA,
2305                           currentMoveString[4]);
2306
2307     if (currentMoveString[4] == NULLCHAR) {
2308       if(result == WhitePromotion  || result == BlackPromotion) {
2309         if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier || gameInfo.variant == VariantMakruk)
2310             currentMoveString[4] = PieceToChar(BlackFerz);
2311         else if(gameInfo.variant == VariantGreat)
2312             currentMoveString[4] = PieceToChar(BlackMan);
2313         else if(gameInfo.variant == VariantShogi)
2314             currentMoveString[4] = '+'; // Queen might not be defined in mini variants!
2315         else
2316             currentMoveString[4] = PieceToChar(BlackQueen);
2317         currentMoveString[5] = NULLCHAR;
2318       }
2319     } else if(appData.testLegality && // strip off unnecessary and false promo characters
2320        !(result == WhitePromotion  || result == BlackPromotion ||
2321          result == WhiteNonPromotion || result == BlackNonPromotion)) currentMoveString[4] = NULLCHAR;
2322
2323     return (int) result;
2324 }
2325         YY_BREAK
2326 case 3:
2327 YY_RULE_SETUP
2328 #line 338 "parser.l"
2329 {
2330     /*
2331      * Simple algebraic move, in capitals
2332      * [HGM] Engine moves are received in this format, with lower-case promoChar!
2333      */
2334     int skip = 0;
2335     ChessMove result;
2336
2337     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2338
2339     /* remove the [xX:-] */
2340     if ((yytext[2] == 'x') || (yytext[2] == 'X') ||
2341         (yytext[2] == '-') || (yytext[2] == ':')) skip = 1;
2342
2343     currentMoveString[0] = yytext[0]+32;
2344     currentMoveString[1] = yytext[1];
2345     currentMoveString[2] = yytext[2+skip]+32;
2346     currentMoveString[3] = yytext[3+skip];
2347     currentMoveString[4] = NULLCHAR;
2348
2349     /* [HGM] do not allow values beyond board size */
2350     if(currentMoveString[1] - ONE >= BOARD_HEIGHT ||
2351        currentMoveString[1] - ONE <  0            ||
2352        currentMoveString[0] - AAA >= BOARD_RGHT   ||
2353        currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2354        currentMoveString[3] - ONE <  0            ||
2355        currentMoveString[2] - AAA >= BOARD_RGHT   ||
2356        currentMoveString[0] - AAA <  BOARD_LEFT   ||
2357        currentMoveString[2] - AAA <  BOARD_LEFT     )
2358       return ImpossibleMove;
2359
2360     result = LegalityTest(boards[yyboardindex],
2361                           PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
2362                           currentMoveString[1] - ONE,
2363                           currentMoveString[0] - AAA,
2364                           currentMoveString[3] - ONE,
2365                           currentMoveString[2] - AAA,
2366                           currentMoveString[4]);
2367
2368     if (currentMoveString[4] == NULLCHAR &&
2369         (result == WhitePromotion  || result == BlackPromotion)) {
2370         if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier || gameInfo.variant == VariantMakruk)
2371             currentMoveString[4] = PieceToChar(BlackFerz);
2372         else if(gameInfo.variant == VariantGreat)
2373             currentMoveString[4] = PieceToChar(BlackMan);
2374         else
2375             currentMoveString[4] = PieceToChar(BlackQueen);
2376         currentMoveString[5] = NULLCHAR;
2377     }
2378
2379     return (int) result;
2380 }
2381         YY_BREAK
2382 case 4:
2383 YY_RULE_SETUP
2384 #line 391 "parser.l"
2385 {
2386     /*
2387      * Pawn move, possibly with promotion
2388      */
2389     DisambiguateClosure cl;
2390     int skip = 0; char c;
2391
2392     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2393
2394     /* remove the =() */
2395     if (yytext[2] == '=' && yytext[3] != NULLCHAR) skip++;
2396     if (yytext[2+skip] == '(') skip++;
2397
2398     cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
2399     cl.rfIn = -1;
2400     cl.ffIn = yytext[0] - AAA;
2401     cl.rtIn = yytext[1] - ONE;
2402     cl.ftIn = yytext[0] - AAA;
2403     c = cl.promoCharIn = ToLower(yytext[2+skip]);
2404
2405     /* [HGM] do not allow values beyond board size */
2406     if(cl.rtIn >= BOARD_HEIGHT ||
2407        cl.rtIn <  0            ||
2408        cl.ffIn >= BOARD_RGHT   ||
2409        cl.ftIn <  BOARD_LEFT     )
2410       return ImpossibleMove;
2411
2412     if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare)
2413       return IllegalMove;
2414
2415
2416     Disambiguate(boards[yyboardindex], PosFlags(yyboardindex), &cl);
2417
2418     currentMoveString[0] = cl.ff + AAA;
2419     currentMoveString[1] = cl.rf + ONE;
2420     currentMoveString[2] = cl.ft + AAA;
2421     currentMoveString[3] = cl.rt + ONE;
2422     currentMoveString[4] = cl.promoChar;
2423     currentMoveString[5] = NULLCHAR;
2424
2425     return (int) cl.kind;
2426 }
2427         YY_BREAK
2428 case 5:
2429 YY_RULE_SETUP
2430 #line 435 "parser.l"
2431 {
2432     /*
2433      * Pawn capture, possibly with promotion, possibly ambiguous
2434      */
2435     DisambiguateClosure cl;
2436     int skip1 = 0, skip2 = 0; char c;
2437
2438     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2439
2440     /* remove trailing ep or e.p. (nonstandard PGN) */
2441     if (yytext[yyleng-1] == 'p') {
2442       yyleng -= 2;
2443       yytext[yyleng] = NULLCHAR;
2444     } else if (yytext[yyleng-1] == '.') {
2445       yyleng -= 4;
2446       yytext[yyleng] = NULLCHAR;
2447     }
2448
2449     /* remove the [xX:-] and =() */
2450     if ((yytext[1] == 'x') || (yytext[1] == 'X')
2451         || (yytext[1] == ':') || (yytext[1] == '-')) skip1 = 1;
2452     if (yytext[2+skip1] == '=' && yytext[3+skip1] != NULLCHAR) skip2++;
2453     if (yytext[2+skip1+skip2] == '(') skip2++;
2454
2455     cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
2456     cl.rfIn = -1;
2457     cl.ffIn = yytext[0] - AAA;
2458     cl.rtIn = -1;
2459     cl.ftIn = yytext[1+skip1] - AAA;
2460     c = cl.promoCharIn = yytext[2+skip1+skip2];
2461
2462     /* [HGM] do not allow values beyond board size */
2463     if(cl.ffIn >= BOARD_RGHT  ||
2464        cl.ffIn <  BOARD_LEFT  ||
2465        cl.ftIn >= BOARD_RGHT  ||
2466        cl.ftIn <  BOARD_LEFT     )
2467       return ImpossibleMove;
2468
2469     if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare)
2470       return IllegalMove;
2471
2472     Disambiguate(boards[yyboardindex], PosFlags(yyboardindex), &cl);
2473
2474     currentMoveString[0] = cl.ff + AAA;
2475     currentMoveString[1] = cl.rf + ONE;
2476     currentMoveString[2] = cl.ft + AAA;
2477     currentMoveString[3] = cl.rt + ONE;
2478     currentMoveString[4] = cl.promoChar;
2479     currentMoveString[5] = NULLCHAR;
2480
2481     return (int) cl.kind;
2482 }
2483         YY_BREAK
2484 case 6:
2485 YY_RULE_SETUP
2486 #line 488 "parser.l"
2487 {
2488     /*
2489      * unambiguously abbreviated Pawn capture, possibly with promotion
2490      */
2491     int skip = 0;
2492     ChessMove result; char c;
2493
2494     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2495
2496     /* remove trailing ep or e.p. (nonstandard PGN) */
2497     if (yytext[yyleng-1] == 'p') {
2498       yyleng -= 2;
2499       yytext[yyleng] = NULLCHAR;
2500     } else if (yytext[yyleng-1] == '.') {
2501       yyleng -= 4;
2502       yytext[yyleng] = NULLCHAR;
2503     }
2504
2505     /* remove the [xX:-] */
2506     if ((yytext[1] == 'x') || (yytext[1] == 'X')
2507         || (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
2508
2509     currentMoveString[0] = yytext[0];
2510     currentMoveString[2] = yytext[1+skip];
2511     currentMoveString[3] = yytext[2+skip];
2512
2513     /* [HGM] do not allow values beyond board size */
2514     if(currentMoveString[0] - AAA >= BOARD_RGHT   ||
2515        currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2516        currentMoveString[3] - ONE <  0            ||
2517        currentMoveString[2] - AAA >= BOARD_RGHT   ||
2518        currentMoveString[0] - AAA <  BOARD_LEFT   ||
2519        currentMoveString[2] - AAA <  BOARD_LEFT     )
2520       return ImpossibleMove;
2521
2522     if (gameInfo.variant == VariantXiangqi && /* [HGM] In Xiangqi rank stays same */
2523          currentMoveString[0] != currentMoveString[2] ) {
2524         currentMoveString[1] = yytext[2+skip];
2525     } else 
2526     if (WhiteOnMove(yyboardindex)) {
2527         if (yytext[2+skip] == ONE) return (int) ImpossibleMove;
2528         currentMoveString[1] = yytext[2+skip] - 1;
2529         if(boards[yyboardindex][currentMoveString[1]-ONE][currentMoveString[0]-AAA] != WhitePawn) 
2530                 return ImpossibleMove;
2531     } else {
2532         currentMoveString[1] = currentMoveString[3] + 1;
2533         if (currentMoveString[3] == ONE+BOARD_HEIGHT-1) return (int) ImpossibleMove;
2534         if(boards[yyboardindex][currentMoveString[1]-ONE][currentMoveString[0]-AAA] != BlackPawn) 
2535                 return ImpossibleMove;
2536     }
2537     if (yyleng-skip > 3) {
2538         if (yytext[yyleng-1] == ')')
2539           c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
2540         else
2541           c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
2542         currentMoveString[5] = NULLCHAR;
2543         if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
2544             return IllegalMove;
2545     } else {
2546         currentMoveString[4] = NULLCHAR;
2547     }
2548
2549     result = LegalityTest(boards[yyboardindex],
2550                           PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
2551                           currentMoveString[1] - ONE,
2552                           currentMoveString[0] - AAA,
2553                           currentMoveString[3] - ONE,
2554                           currentMoveString[2] - AAA,
2555                           currentMoveString[4]);
2556
2557     if (currentMoveString[4] == NULLCHAR &&
2558         (result == WhitePromotion  || result == BlackPromotion)) {
2559         currentMoveString[4] = PieceToChar(BlackQueen);
2560         // [HGM] shatranj: take care of variants without Queen
2561         if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier || gameInfo.variant == VariantMakruk)
2562             currentMoveString[4] = PieceToChar(BlackFerz);
2563         if(gameInfo.variant == VariantGreat)
2564             currentMoveString[4] = PieceToChar(BlackMan);
2565         currentMoveString[5] = NULLCHAR;
2566     }
2567
2568     if (result != IllegalMove) return (int) result;
2569
2570     /* Special case: improperly written en passant capture */
2571     if (WhiteOnMove(yyboardindex)) {
2572         if (currentMoveString[3] == '5') {
2573             currentMoveString[1] = '5';
2574             currentMoveString[3] = '6';
2575         } else {
2576             return (int) IllegalMove;
2577         }
2578     } else {
2579         if (currentMoveString[3] == '4') {
2580             currentMoveString[1] = '4';
2581             currentMoveString[3] = '3';
2582         } else {
2583             return (int) IllegalMove;
2584         }
2585     }
2586
2587     result = LegalityTest(boards[yyboardindex],
2588                           PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
2589                           currentMoveString[1] - ONE,
2590                           currentMoveString[0] - AAA,
2591                           currentMoveString[3] - ONE,
2592                           currentMoveString[2] - AAA,
2593                           currentMoveString[4]);
2594
2595     if (result == WhiteCapturesEnPassant || result == BlackCapturesEnPassant)
2596       return (int) result;
2597     else
2598       return (int) IllegalMove;
2599 }
2600         YY_BREAK
2601 case 7:
2602 YY_RULE_SETUP
2603 #line 602 "parser.l"
2604 {
2605     /*
2606      * piece move, possibly ambiguous
2607      */
2608     DisambiguateClosure cl;
2609     int skip = 0, skip2 = 0, promoted = 0;
2610
2611     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2612
2613     if(yytext[0] == '+') promoted = skip = skip2 = 1;
2614
2615     /* remove the [xX:-] */
2616     if ((yytext[1+skip] == 'x') || (yytext[1+skip] == 'X')
2617         || (yytext[1+skip] == ':') || (yytext[1+skip] == '-')) skip++;
2618
2619     if (WhiteOnMove(yyboardindex)) {
2620         cl.pieceIn = CharToPiece(ToUpper(yytext[skip2]));
2621     } else {
2622         cl.pieceIn = CharToPiece(ToLower(yytext[skip2]));
2623     }
2624     if(promoted) cl.pieceIn = (ChessSquare) (PROMOTED cl.pieceIn);
2625
2626     cl.rfIn = -1;
2627     cl.ffIn = -1;
2628     cl.rtIn = yytext[2+skip] - ONE;
2629     cl.ftIn = yytext[1+skip] - AAA;
2630     cl.promoCharIn = NULLCHAR;
2631
2632     if(yyleng-skip > 3) /* [HGM] can have Shogi-style promotion */
2633         cl.promoCharIn = yytext[yyleng-1];
2634
2635     if (appData.debugMode) {
2636         fprintf(debugFP, "Parser Qa1: yyleng=%d,  %d(%d,%d)-(%d,%d) = %d (%c)\n",
2637         yyleng,
2638         cl.pieceIn,cl.ffIn,cl.rfIn,cl.ftIn,cl.rtIn,cl.promoCharIn,cl.promoCharIn?cl.promoCharIn:' ');
2639     }
2640
2641     /* [HGM] but do not allow values beyond board size */
2642     if(cl.rtIn >= BOARD_HEIGHT ||
2643        cl.rtIn <  0            ||
2644        cl.ftIn >= BOARD_RGHT   ||
2645        cl.ftIn <  BOARD_LEFT     )
2646       return ImpossibleMove;
2647
2648     Disambiguate(boards[yyboardindex], PosFlags(yyboardindex), &cl);
2649
2650     currentMoveString[0] = cl.ff + AAA;
2651     currentMoveString[1] = cl.rf + ONE;
2652     currentMoveString[2] = cl.ft + AAA;
2653     currentMoveString[3] = cl.rt + ONE;
2654     currentMoveString[4] = cl.promoChar;
2655     currentMoveString[5] = NULLCHAR;
2656
2657     return (int) cl.kind;
2658 }
2659         YY_BREAK
2660 case 8:
2661 YY_RULE_SETUP
2662 #line 658 "parser.l"
2663 {
2664     /*
2665      * piece move with rank or file disambiguator
2666      */
2667     DisambiguateClosure cl;
2668     int skip = 0, skip2 = 0; int promoted=0;
2669
2670     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2671
2672     if(yytext[0]=='+') promoted = skip = skip2 = 1;
2673
2674     /* remove the [xX:-] */
2675     if ((yytext[2+skip] == 'x') || (yytext[2+skip] == 'X')
2676         || (yytext[2+skip] == ':') || (yytext[2+skip] == '-')) skip++;
2677
2678     if (WhiteOnMove(yyboardindex)) {
2679         cl.pieceIn = CharToPiece(ToUpper(yytext[skip2]));
2680     } else {
2681         cl.pieceIn = CharToPiece(ToLower(yytext[skip2]));
2682     }
2683     if(promoted) cl.pieceIn = (ChessSquare) (PROMOTED cl.pieceIn);
2684
2685     if (isalpha(yytext[1+skip2])) {
2686         cl.rfIn = -1;
2687         cl.ffIn = yytext[1+skip2] - AAA;
2688        
2689         if(cl.ffIn >= BOARD_RGHT ||
2690            cl.ffIn <  BOARD_LEFT   ) return 0;
2691     } else {
2692         cl.rfIn = yytext[1+skip2] - ONE;
2693         cl.ffIn = -1;
2694         if(cl.rfIn >= BOARD_HEIGHT ||
2695            cl.rfIn <  0) return 0;
2696     }
2697     cl.rtIn = yytext[3+skip] - ONE;
2698     cl.ftIn = yytext[2+skip] - AAA;
2699     cl.promoCharIn = NULLCHAR;
2700
2701     if(yyleng-skip > 4) /* [HGM] can have Shogi-style promotion */
2702         cl.promoCharIn = yytext[yyleng-1];
2703
2704     /* [HGM] do not allow values beyond board size */
2705     if(cl.rtIn >= BOARD_HEIGHT ||
2706        cl.rtIn <  0            ||
2707        cl.ftIn >= BOARD_RGHT   ||
2708        cl.ftIn <  BOARD_LEFT     )
2709       return ImpossibleMove;
2710
2711     Disambiguate(boards[yyboardindex], PosFlags(yyboardindex), &cl);
2712
2713     currentMoveString[0] = cl.ff + AAA;
2714     currentMoveString[1] = cl.rf + ONE;
2715     currentMoveString[2] = cl.ft + AAA;
2716     currentMoveString[3] = cl.rt + ONE;
2717     currentMoveString[4] = cl.promoChar;
2718     currentMoveString[5] = NULLCHAR;
2719
2720     return (int) cl.kind;
2721 }
2722         YY_BREAK
2723 case 9:
2724 YY_RULE_SETUP
2725 #line 718 "parser.l"
2726 {
2727     int rf, ff, rt, ft;
2728
2729     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2730
2731     /* [HGM] all squares referenced to board edges in stead of absolute */
2732     if (WhiteOnMove(yyboardindex)) {
2733         if (boards[yyboardindex][0][(BOARD_WIDTH-1)>>1] == WhiteKing) {
2734             /* ICS wild castling */
2735             rf = 0;
2736             ff = (BOARD_WIDTH-1)>>1;
2737             rt = 0;
2738             ft = BOARD_RGHT-3;
2739         } else {
2740             rf = 0;
2741             ff = BOARD_WIDTH>>1;
2742             rt = 0;
2743             ft = BOARD_LEFT+2;
2744         }
2745     } else{ 
2746         if (boards[yyboardindex][BOARD_HEIGHT-1][(BOARD_WIDTH-1)>>1] == BlackKing) {
2747             /* ICS wild castling */
2748             rf = BOARD_HEIGHT-1;
2749             ff = (BOARD_WIDTH-1)>>1;
2750             rt = BOARD_HEIGHT-1;
2751             ft = BOARD_RGHT-3;
2752         } else {
2753             rf = BOARD_HEIGHT-1;
2754             ff = BOARD_WIDTH>>1;
2755             rt = BOARD_HEIGHT-1;
2756             ft = BOARD_LEFT+2;
2757         }
2758     }
2759     if(PosFlags(0) & F_FRC_TYPE_CASTLING) {
2760
2761         if (WhiteOnMove(yyboardindex)) {
2762             ff = initialRights[2];
2763             ft = initialRights[1];
2764         } else {
2765             ff = initialRights[5];
2766             ft = initialRights[4];
2767         }
2768         if (appData.debugMode) 
2769         {
2770           fprintf(debugFP, "Parser FRC long %d %d\n", ff, ft);
2771         };
2772         if(ff < 0 || ft < 0) return 0;
2773     }
2774     sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
2775     if (appData.debugMode) {
2776         fprintf(debugFP, "long castling %d %d\n", ff, ft);
2777     }
2778     return (int) LegalityTest(boards[yyboardindex],
2779                               PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: e.p.!
2780                               rf, ff, rt, ft, NULLCHAR);
2781 }
2782         YY_BREAK
2783 case 10:
2784 YY_RULE_SETUP
2785 #line 775 "parser.l"
2786 {
2787     int rf, ff, rt, ft;
2788
2789     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2790
2791     if (WhiteOnMove(yyboardindex)) {
2792         if (boards[yyboardindex][0][(BOARD_WIDTH-1)>>1] == WhiteKing) {
2793             /* ICS wild castling */
2794             rf = 0;
2795             ff = (BOARD_WIDTH-1)>>1;
2796             rt = 0;
2797             ft = BOARD_LEFT+1;
2798         } else {
2799             rf = 0;
2800             ff = BOARD_WIDTH>>1;
2801             rt = 0;
2802             ft = BOARD_RGHT-2;
2803         }
2804     } else {
2805         if (boards[yyboardindex][BOARD_HEIGHT-1][(BOARD_WIDTH-1)>>1] == BlackKing) {
2806             /* ICS wild castling */
2807             rf = BOARD_HEIGHT-1;
2808             ff = (BOARD_WIDTH-1)>>1;
2809             rt = BOARD_HEIGHT-1;
2810             ft = BOARD_LEFT+1;
2811         } else {
2812             rf = BOARD_HEIGHT-1;
2813             ff = BOARD_WIDTH>>1;
2814             rt = BOARD_HEIGHT-1;
2815             ft = BOARD_RGHT-2;
2816         }
2817     }
2818     if(PosFlags(0) & F_FRC_TYPE_CASTLING) {
2819         if (WhiteOnMove(yyboardindex)) {
2820             ff = initialRights[2];
2821             ft = initialRights[0];
2822         } else {
2823             ff = initialRights[5];
2824             ft = initialRights[3];
2825         }
2826     if (appData.debugMode) {
2827         fprintf(debugFP, "Parser FRC short %d %d\n", ff, ft);
2828     }
2829         if(ff < 0 || ft < 0) return 0;
2830     }
2831     sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
2832     if (appData.debugMode) {
2833         fprintf(debugFP, "short castling %d %d\n", ff, ft);
2834     }
2835
2836     return (int) LegalityTest(boards[yyboardindex],
2837                               PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: e.p.!
2838                               rf, ff, rt, ft, NULLCHAR);
2839 }
2840         YY_BREAK
2841 case 11:
2842 YY_RULE_SETUP
2843 #line 830 "parser.l"
2844 {
2845     /* Bughouse piece drop. */
2846     currentMoveString[1] = '@';
2847     currentMoveString[2] = yytext[2];
2848     currentMoveString[3] = yytext[3];
2849     currentMoveString[4] = NULLCHAR;
2850
2851     if (appData.debugMode) {
2852         fprintf(debugFP, "Drop: %s\n", currentMoveString);
2853     }
2854     /* [HGM] do not allow values beyond board size */
2855     if(currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2856        currentMoveString[2] - AAA >= BOARD_WIDTH     )
2857       return ImpossibleMove;
2858
2859     if (WhiteOnMove(yyboardindex)) {
2860         currentMoveString[0] = ToUpper(yytext[0]);
2861     } else {
2862         currentMoveString[0] = ToLower(yytext[0]);
2863     }
2864     return LegalityTest(boards[yyboardindex], PosFlags(yyboardindex), DROP_RANK, // [HGM] does drops now too
2865                         CharToPiece(currentMoveString[0]), currentMoveString[3] - ONE, currentMoveString[2] - AAA, NULLCHAR);
2866 }
2867         YY_BREAK
2868 case 12:
2869 YY_RULE_SETUP
2870 #line 854 "parser.l"
2871 {
2872     if (WhiteOnMove(yyboardindex))
2873       return (int) BlackWins;
2874     else
2875       return (int) WhiteWins;
2876 }
2877         YY_BREAK
2878 case 13:
2879 YY_RULE_SETUP
2880 #line 861 "parser.l"
2881 {
2882     return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
2883 }
2884         YY_BREAK
2885 case 14:
2886 YY_RULE_SETUP
2887 #line 865 "parser.l"
2888 {
2889     return (int) GameUnfinished;
2890 }
2891         YY_BREAK
2892 case 15:
2893 YY_RULE_SETUP
2894 #line 869 "parser.l"
2895 {
2896     return (int) GameIsDrawn;
2897 }
2898         YY_BREAK
2899 case 16:
2900 YY_RULE_SETUP
2901 #line 873 "parser.l"
2902 {
2903     return (int) GameIsDrawn;
2904 }
2905         YY_BREAK
2906 case 17:
2907 YY_RULE_SETUP
2908 #line 877 "parser.l"
2909 {
2910     if (WhiteOnMove(yyboardindex))
2911       return (int) BlackWins;
2912     else
2913       return (int) WhiteWins;
2914 }
2915         YY_BREAK
2916 case 18:
2917 YY_RULE_SETUP
2918 #line 884 "parser.l"
2919 {
2920     if (WhiteOnMove(yyboardindex))
2921       return (int) BlackWins;
2922     else
2923       return (int) WhiteWins;
2924 }
2925         YY_BREAK
2926 case 19:
2927 YY_RULE_SETUP
2928 #line 891 "parser.l"
2929 {
2930     return (int) GameIsDrawn;
2931 }
2932         YY_BREAK
2933 case 20:
2934 YY_RULE_SETUP
2935 #line 895 "parser.l"
2936 {
2937     return (int) GameIsDrawn;
2938 }
2939         YY_BREAK
2940 case 21:
2941 YY_RULE_SETUP
2942 #line 899 "parser.l"
2943
2944     return (int) (ToUpper(yytext[0]) == 'W' ? WhiteWins : BlackWins);
2945 }
2946         YY_BREAK
2947 case 22:
2948 YY_RULE_SETUP
2949 #line 903 "parser.l"
2950
2951     return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
2952 }
2953         YY_BREAK
2954 case 23:
2955 YY_RULE_SETUP
2956 #line 907 "parser.l"
2957
2958     return (int) WhiteWins;
2959 }
2960         YY_BREAK
2961 case 24:
2962 YY_RULE_SETUP
2963 #line 911 "parser.l"
2964
2965     return (int) BlackWins;
2966 }
2967         YY_BREAK
2968 case 25:
2969 YY_RULE_SETUP
2970 #line 915 "parser.l"
2971 {
2972     return (int) GameIsDrawn;
2973 }
2974         YY_BREAK
2975 case 26:
2976 YY_RULE_SETUP
2977 #line 919 "parser.l"
2978 {
2979     return (int) GameUnfinished;
2980 }
2981         YY_BREAK
2982 case 27:
2983 /* rule 27 can match eol */
2984 YY_RULE_SETUP
2985 #line 923 "parser.l"
2986 {
2987     /* move numbers */
2988     if ((yyleng == 1) && (yytext[0] == '1'))
2989       return (int) MoveNumberOne;
2990 }
2991         YY_BREAK
2992 case 28:
2993 YY_RULE_SETUP
2994 #line 929 "parser.l"
2995 {
2996     /* elapsed time indication, e.g. (0:12) or {10:21.071} */ 
2997     return (int) ElapsedTime;
2998 }
2999         YY_BREAK
3000 case 29:
3001 /* rule 29 can match eol */
3002 YY_RULE_SETUP
3003 #line 934 "parser.l"
3004 {
3005     /* position diagram enclosed in [-- --] */
3006     return (int) PositionDiagram;
3007 }
3008         YY_BREAK
3009 case 30:
3010 /* rule 30 can match eol */
3011 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
3012 (yy_c_buf_p) = yy_cp -= 1;
3013 YY_DO_BEFORE_ACTION; /* set up yytext again */
3014 YY_RULE_SETUP
3015 #line 939 "parser.l"
3016 {
3017     /* position diagram enclosed in {-- --} */
3018     return (int) PositionDiagram;
3019 }
3020         YY_BREAK
3021 case 31:
3022 /* rule 31 can match eol */
3023 YY_RULE_SETUP
3024 #line 944 "parser.l"
3025 {
3026     return (int) PGNTag;
3027 }    
3028         YY_BREAK
3029 case 32:
3030 YY_RULE_SETUP
3031 #line 948 "parser.l"
3032 {
3033     return (int) GNUChessGame;
3034 }
3035         YY_BREAK
3036 case 33:
3037 /* rule 33 can match eol */
3038 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
3039 (yy_c_buf_p) = yy_cp -= 1;
3040 YY_DO_BEFORE_ACTION; /* set up yytext again */
3041 YY_RULE_SETUP
3042 #line 952 "parser.l"
3043 {
3044     return (int) XBoardGame;
3045 }
3046         YY_BREAK
3047 case 34:
3048 YY_RULE_SETUP
3049 #line 956 "parser.l"
3050 {                               /* numeric annotation glyph */
3051     return (int) NAG;
3052 }
3053         YY_BREAK
3054 case 35:
3055 /* rule 35 can match eol */
3056 YY_RULE_SETUP
3057 #line 960 "parser.l"
3058 {                               /* anything in {} */
3059     return (int) Comment; 
3060 }
3061         YY_BREAK
3062 case 36:
3063 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
3064 (yy_c_buf_p) = yy_cp -= 1;
3065 YY_DO_BEFORE_ACTION; /* set up yytext again */
3066 YY_RULE_SETUP
3067 #line 964 "parser.l"
3068 {                                          /* ; to end of line */
3069     return (int) Comment;
3070 }
3071         YY_BREAK
3072 case 37:
3073 /* rule 37 can match eol */
3074 YY_RULE_SETUP
3075 #line 968 "parser.l"
3076 {                               /* anything in [] */
3077     return (int) Comment; 
3078 }
3079         YY_BREAK
3080 case 38:
3081 /* rule 38 can match eol */
3082 YY_RULE_SETUP
3083 #line 972 "parser.l"
3084 { /* very nested () */
3085     return (int) Comment; 
3086 }
3087         YY_BREAK
3088 case 39:
3089 /* rule 39 can match eol */
3090 YY_RULE_SETUP
3091 #line 976 "parser.l"
3092 {                               /* >=2 chars in () */
3093     return (int) Comment; 
3094 }       
3095         YY_BREAK
3096 case 40:
3097 /* rule 40 can match eol */
3098 YY_RULE_SETUP
3099 #line 980 "parser.l"
3100 {
3101         /* Skip mail headers */
3102 }
3103         YY_BREAK
3104 case 41:
3105 YY_RULE_SETUP
3106 #line 984 "parser.l"
3107 {
3108         /* Skip random words */
3109 }
3110         YY_BREAK
3111 case 42:
3112 /* rule 42 can match eol */
3113 YY_RULE_SETUP
3114 #line 988 "parser.l"
3115 {
3116         /* Skip everything else */
3117 }
3118         YY_BREAK
3119 case 43:
3120 YY_RULE_SETUP
3121 #line 992 "parser.l"
3122 ECHO;
3123         YY_BREAK
3124 #line 3125 "parser.c"
3125                         case YY_STATE_EOF(INITIAL):
3126                                 yyterminate();
3127
3128         case YY_END_OF_BUFFER:
3129                 {
3130                 /* Amount of text matched not including the EOB char. */
3131                 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
3132
3133                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
3134                 *yy_cp = (yy_hold_char);
3135                 YY_RESTORE_YY_MORE_OFFSET
3136
3137                 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
3138                         {
3139                         /* We're scanning a new file or input source.  It's
3140                          * possible that this happened because the user
3141                          * just pointed yyin at a new source and called
3142                          * yylex().  If so, then we have to assure
3143                          * consistency between YY_CURRENT_BUFFER and our
3144                          * globals.  Here is the right place to do so, because
3145                          * this is the first action (other than possibly a
3146                          * back-up) that will match for the new input source.
3147                          */
3148                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
3149                         YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
3150                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
3151                         }
3152
3153                 /* Note that here we test for yy_c_buf_p "<=" to the position
3154                  * of the first EOB in the buffer, since yy_c_buf_p will
3155                  * already have been incremented past the NUL character
3156                  * (since all states make transitions on EOB to the
3157                  * end-of-buffer state).  Contrast this with the test
3158                  * in input().
3159                  */
3160                 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
3161                         { /* This was really a NUL. */
3162                         yy_state_type yy_next_state;
3163
3164                         (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
3165
3166                         yy_current_state = yy_get_previous_state(  );
3167
3168                         /* Okay, we're now positioned to make the NUL
3169                          * transition.  We couldn't have
3170                          * yy_get_previous_state() go ahead and do it
3171                          * for us because it doesn't know how to deal
3172                          * with the possibility of jamming (and we don't
3173                          * want to build jamming into it because then it
3174                          * will run more slowly).
3175                          */
3176
3177                         yy_next_state = yy_try_NUL_trans( yy_current_state );
3178
3179                         yy_bp = (yytext_ptr) + YY_MORE_ADJ;
3180
3181                         if ( yy_next_state )
3182                                 {
3183                                 /* Consume the NUL. */
3184                                 yy_cp = ++(yy_c_buf_p);
3185                                 yy_current_state = yy_next_state;
3186                                 goto yy_match;
3187                                 }
3188
3189                         else
3190                                 {
3191                                 yy_cp = (yy_c_buf_p);
3192                                 goto yy_find_action;
3193                                 }
3194                         }
3195
3196                 else switch ( yy_get_next_buffer(  ) )
3197                         {
3198                         case EOB_ACT_END_OF_FILE:
3199                                 {
3200                                 (yy_did_buffer_switch_on_eof) = 0;
3201
3202                                 if ( yywrap( ) )
3203                                         {
3204                                         /* Note: because we've taken care in
3205                                          * yy_get_next_buffer() to have set up
3206                                          * yytext, we can now set up
3207                                          * yy_c_buf_p so that if some total
3208                                          * hoser (like flex itself) wants to
3209                                          * call the scanner after we return the
3210                                          * YY_NULL, it'll still work - another
3211                                          * YY_NULL will get returned.
3212                                          */
3213                                         (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
3214
3215                                         yy_act = YY_STATE_EOF(YY_START);
3216                                         goto do_action;
3217                                         }
3218
3219                                 else
3220                                         {
3221                                         if ( ! (yy_did_buffer_switch_on_eof) )
3222                                                 YY_NEW_FILE;
3223                                         }
3224                                 break;
3225                                 }
3226
3227                         case EOB_ACT_CONTINUE_SCAN:
3228                                 (yy_c_buf_p) =
3229                                         (yytext_ptr) + yy_amount_of_matched_text;
3230
3231                                 yy_current_state = yy_get_previous_state(  );
3232
3233                                 yy_cp = (yy_c_buf_p);
3234                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
3235                                 goto yy_match;
3236
3237                         case EOB_ACT_LAST_MATCH:
3238                                 (yy_c_buf_p) =
3239                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
3240
3241                                 yy_current_state = yy_get_previous_state(  );
3242
3243                                 yy_cp = (yy_c_buf_p);
3244                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
3245                                 goto yy_find_action;
3246                         }
3247                 break;
3248                 }
3249
3250         default:
3251                 YY_FATAL_ERROR(
3252                         "fatal flex scanner internal error--no action found" );
3253         } /* end of action switch */
3254                 } /* end of scanning one token */
3255 } /* end of yylex */
3256
3257 /* yy_get_next_buffer - try to read in a new buffer
3258  *
3259  * Returns a code representing an action:
3260  *      EOB_ACT_LAST_MATCH -
3261  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
3262  *      EOB_ACT_END_OF_FILE - end of file
3263  */
3264 static int yy_get_next_buffer (void)
3265 {
3266         register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
3267         register char *source = (yytext_ptr);
3268         register int number_to_move, i;
3269         int ret_val;
3270
3271         if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
3272                 YY_FATAL_ERROR(
3273                 "fatal flex scanner internal error--end of buffer missed" );
3274
3275         if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
3276                 { /* Don't try to fill the buffer, so this is an EOF. */
3277                 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
3278                         {
3279                         /* We matched a single character, the EOB, so
3280                          * treat this as a final EOF.
3281                          */
3282                         return EOB_ACT_END_OF_FILE;
3283                         }
3284
3285                 else
3286                         {
3287                         /* We matched some text prior to the EOB, first
3288                          * process it.
3289                          */
3290                         return EOB_ACT_LAST_MATCH;
3291                         }
3292                 }
3293
3294         /* Try to read more data. */
3295
3296         /* First move last chars to start of buffer. */
3297         number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
3298
3299         for ( i = 0; i < number_to_move; ++i )
3300                 *(dest++) = *(source++);
3301
3302         if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
3303                 /* don't do the read, it's not guaranteed to return an EOF,
3304                  * just force an EOF
3305                  */
3306                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
3307
3308         else
3309                 {
3310                         int num_to_read =
3311                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
3312
3313                 while ( num_to_read <= 0 )
3314                         { /* Not enough room in the buffer - grow it. */
3315
3316                         YY_FATAL_ERROR(
3317 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
3318
3319                         }
3320
3321                 if ( num_to_read > YY_READ_BUF_SIZE )
3322                         num_to_read = YY_READ_BUF_SIZE;
3323
3324                 /* Read in more data. */
3325                 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
3326                         (yy_n_chars), (size_t) num_to_read );
3327
3328                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
3329                 }
3330
3331         if ( (yy_n_chars) == 0 )
3332                 {
3333                 if ( number_to_move == YY_MORE_ADJ )
3334                         {
3335                         ret_val = EOB_ACT_END_OF_FILE;
3336                         yyrestart(yyin  );
3337                         }
3338
3339                 else
3340                         {
3341                         ret_val = EOB_ACT_LAST_MATCH;
3342                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
3343                                 YY_BUFFER_EOF_PENDING;
3344                         }
3345                 }
3346
3347         else
3348                 ret_val = EOB_ACT_CONTINUE_SCAN;
3349
3350         if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
3351                 /* Extend the array by 50%, plus the number we really need. */
3352                 yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
3353                 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
3354                 if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
3355                         YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
3356         }
3357
3358         (yy_n_chars) += number_to_move;
3359         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
3360         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
3361
3362         (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
3363
3364         return ret_val;
3365 }
3366
3367 /* yy_get_previous_state - get the state just before the EOB char was reached */
3368
3369     static yy_state_type yy_get_previous_state (void)
3370 {
3371         register yy_state_type yy_current_state;
3372         register char *yy_cp;
3373     
3374         yy_current_state = (yy_start);
3375         yy_current_state += YY_AT_BOL();
3376
3377         (yy_state_ptr) = (yy_state_buf);
3378         *(yy_state_ptr)++ = yy_current_state;
3379
3380         for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
3381                 {
3382                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
3383                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3384                         {
3385                         yy_current_state = (int) yy_def[yy_current_state];
3386                         if ( yy_current_state >= 704 )
3387                                 yy_c = yy_meta[(unsigned int) yy_c];
3388                         }
3389                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3390                 *(yy_state_ptr)++ = yy_current_state;
3391                 }
3392
3393         return yy_current_state;
3394 }
3395
3396 /* yy_try_NUL_trans - try to make a transition on the NUL character
3397  *
3398  * synopsis
3399  *      next_state = yy_try_NUL_trans( current_state );
3400  */
3401     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
3402 {
3403         register int yy_is_jam;
3404     
3405         register YY_CHAR yy_c = 1;
3406         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3407                 {
3408                 yy_current_state = (int) yy_def[yy_current_state];
3409                 if ( yy_current_state >= 704 )
3410                         yy_c = yy_meta[(unsigned int) yy_c];
3411                 }
3412         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3413         yy_is_jam = (yy_current_state == 703);
3414         if ( ! yy_is_jam )
3415                 *(yy_state_ptr)++ = yy_current_state;
3416
3417         return yy_is_jam ? 0 : yy_current_state;
3418 }
3419
3420     static void yyunput (int c, register char * yy_bp )
3421 {
3422         register char *yy_cp;
3423     
3424     yy_cp = (yy_c_buf_p);
3425
3426         /* undo effects of setting up yytext */
3427         *yy_cp = (yy_hold_char);
3428
3429         if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
3430                 { /* need to shift things up to make room */
3431                 /* +2 for EOB chars. */
3432                 register int number_to_move = (yy_n_chars) + 2;
3433                 register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
3434                                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
3435                 register char *source =
3436                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
3437
3438                 while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
3439                         *--dest = *--source;
3440
3441                 yy_cp += (int) (dest - source);
3442                 yy_bp += (int) (dest - source);
3443                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
3444                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
3445
3446                 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
3447                         YY_FATAL_ERROR( "flex scanner push-back overflow" );
3448                 }
3449
3450         *--yy_cp = (char) c;
3451
3452         (yytext_ptr) = yy_bp;
3453         (yy_hold_char) = *yy_cp;
3454         (yy_c_buf_p) = yy_cp;
3455 }
3456
3457 #ifndef YY_NO_INPUT
3458 #ifdef __cplusplus
3459     static int yyinput (void)
3460 #else
3461     static int input  (void)
3462 #endif
3463
3464 {
3465         int c;
3466     
3467         *(yy_c_buf_p) = (yy_hold_char);
3468
3469         if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
3470                 {
3471                 /* yy_c_buf_p now points to the character we want to return.
3472                  * If this occurs *before* the EOB characters, then it's a
3473                  * valid NUL; if not, then we've hit the end of the buffer.
3474                  */
3475                 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
3476                         /* This was really a NUL. */
3477                         *(yy_c_buf_p) = '\0';
3478
3479                 else
3480                         { /* need more input */
3481                         int offset = (yy_c_buf_p) - (yytext_ptr);
3482                         ++(yy_c_buf_p);
3483
3484                         switch ( yy_get_next_buffer(  ) )
3485                                 {
3486                                 case EOB_ACT_LAST_MATCH:
3487                                         /* This happens because yy_g_n_b()
3488                                          * sees that we've accumulated a
3489                                          * token and flags that we need to
3490                                          * try matching the token before
3491                                          * proceeding.  But for input(),
3492                                          * there's no matching to consider.
3493                                          * So convert the EOB_ACT_LAST_MATCH
3494                                          * to EOB_ACT_END_OF_FILE.
3495                                          */
3496
3497                                         /* Reset buffer status. */
3498                                         yyrestart(yyin );
3499
3500                                         /*FALLTHROUGH*/
3501
3502                                 case EOB_ACT_END_OF_FILE:
3503                                         {
3504                                         if ( yywrap( ) )
3505                                                 return EOF;
3506
3507                                         if ( ! (yy_did_buffer_switch_on_eof) )
3508                                                 YY_NEW_FILE;
3509 #ifdef __cplusplus
3510                                         return yyinput();
3511 #else
3512                                         return input();
3513 #endif
3514                                         }
3515
3516                                 case EOB_ACT_CONTINUE_SCAN:
3517                                         (yy_c_buf_p) = (yytext_ptr) + offset;
3518                                         break;
3519                                 }
3520                         }
3521                 }
3522
3523         c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
3524         *(yy_c_buf_p) = '\0';   /* preserve yytext */
3525         (yy_hold_char) = *++(yy_c_buf_p);
3526
3527         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
3528
3529         return c;
3530 }
3531 #endif  /* ifndef YY_NO_INPUT */
3532
3533 /** Immediately switch to a different input stream.
3534  * @param input_file A readable stream.
3535  * 
3536  * @note This function does not reset the start condition to @c INITIAL .
3537  */
3538     void yyrestart  (FILE * input_file )
3539 {
3540     
3541         if ( ! YY_CURRENT_BUFFER ){
3542         yyensure_buffer_stack ();
3543                 YY_CURRENT_BUFFER_LVALUE =
3544             yy_create_buffer(yyin,YY_BUF_SIZE );
3545         }
3546
3547         yy_init_buffer(YY_CURRENT_BUFFER,input_file );
3548         yy_load_buffer_state( );
3549 }
3550
3551 /** Switch to a different input buffer.
3552  * @param new_buffer The new input buffer.
3553  * 
3554  */
3555     void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
3556 {
3557     
3558         /* TODO. We should be able to replace this entire function body
3559          * with
3560          *              yypop_buffer_state();
3561          *              yypush_buffer_state(new_buffer);
3562      */
3563         yyensure_buffer_stack ();
3564         if ( YY_CURRENT_BUFFER == new_buffer )
3565                 return;
3566
3567         if ( YY_CURRENT_BUFFER )
3568                 {
3569                 /* Flush out information for old buffer. */
3570                 *(yy_c_buf_p) = (yy_hold_char);
3571                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
3572                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
3573                 }
3574
3575         YY_CURRENT_BUFFER_LVALUE = new_buffer;
3576         yy_load_buffer_state( );
3577
3578         /* We don't actually know whether we did this switch during
3579          * EOF (yywrap()) processing, but the only time this flag
3580          * is looked at is after yywrap() is called, so it's safe
3581          * to go ahead and always set it.
3582          */
3583         (yy_did_buffer_switch_on_eof) = 1;
3584 }
3585
3586 static void yy_load_buffer_state  (void)
3587 {
3588         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
3589         (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
3590         yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
3591         (yy_hold_char) = *(yy_c_buf_p);
3592 }
3593
3594 /** Allocate and initialize an input buffer state.
3595  * @param file A readable stream.
3596  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
3597  * 
3598  * @return the allocated buffer state.
3599  */
3600     YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
3601 {
3602         YY_BUFFER_STATE b;
3603     
3604         b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
3605         if ( ! b )
3606                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3607
3608         b->yy_buf_size = size;
3609
3610         /* yy_ch_buf has to be 2 characters longer than the size given because
3611          * we need to put in 2 end-of-buffer characters.
3612          */
3613         b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
3614         if ( ! b->yy_ch_buf )
3615                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3616
3617         b->yy_is_our_buffer = 1;
3618
3619         yy_init_buffer(b,file );
3620
3621         return b;
3622 }
3623
3624 /** Destroy the buffer.
3625  * @param b a buffer created with yy_create_buffer()
3626  * 
3627  */
3628     void yy_delete_buffer (YY_BUFFER_STATE  b )
3629 {
3630     
3631         if ( ! b )
3632                 return;
3633
3634         if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
3635                 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
3636
3637         if ( b->yy_is_our_buffer )
3638                 yyfree((void *) b->yy_ch_buf  );
3639
3640         yyfree((void *) b  );
3641 }
3642
3643 #ifndef __cplusplus
3644 extern int isatty (int );
3645 #endif /* __cplusplus */
3646     
3647 /* Initializes or reinitializes a buffer.
3648  * This function is sometimes called more than once on the same buffer,
3649  * such as during a yyrestart() or at EOF.
3650  */
3651     static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
3652
3653 {
3654         int oerrno = errno;
3655     
3656         yy_flush_buffer(b );
3657
3658         b->yy_input_file = file;
3659         b->yy_fill_buffer = 1;
3660
3661     /* If b is the current buffer, then yy_init_buffer was _probably_
3662      * called from yyrestart() or through yy_get_next_buffer.
3663      * In that case, we don't want to reset the lineno or column.
3664      */
3665     if (b != YY_CURRENT_BUFFER){
3666         b->yy_bs_lineno = 1;
3667         b->yy_bs_column = 0;
3668     }
3669
3670         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
3671     
3672         errno = oerrno;
3673 }
3674
3675 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
3676  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
3677  * 
3678  */
3679     void yy_flush_buffer (YY_BUFFER_STATE  b )
3680 {
3681         if ( ! b )
3682                 return;
3683
3684         b->yy_n_chars = 0;
3685
3686         /* We always need two end-of-buffer characters.  The first causes
3687          * a transition to the end-of-buffer state.  The second causes
3688          * a jam in that state.
3689          */
3690         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
3691         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
3692
3693         b->yy_buf_pos = &b->yy_ch_buf[0];
3694
3695         b->yy_at_bol = 1;
3696         b->yy_buffer_status = YY_BUFFER_NEW;
3697
3698         if ( b == YY_CURRENT_BUFFER )
3699                 yy_load_buffer_state( );
3700 }
3701
3702 /** Pushes the new state onto the stack. The new state becomes
3703  *  the current state. This function will allocate the stack
3704  *  if necessary.
3705  *  @param new_buffer The new state.
3706  *  
3707  */
3708 void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
3709 {
3710         if (new_buffer == NULL)
3711                 return;
3712
3713         yyensure_buffer_stack();
3714
3715         /* This block is copied from yy_switch_to_buffer. */
3716         if ( YY_CURRENT_BUFFER )
3717                 {
3718                 /* Flush out information for old buffer. */
3719                 *(yy_c_buf_p) = (yy_hold_char);
3720                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
3721                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
3722                 }
3723
3724         /* Only push if top exists. Otherwise, replace top. */
3725         if (YY_CURRENT_BUFFER)
3726                 (yy_buffer_stack_top)++;
3727         YY_CURRENT_BUFFER_LVALUE = new_buffer;
3728
3729         /* copied from yy_switch_to_buffer. */
3730         yy_load_buffer_state( );
3731         (yy_did_buffer_switch_on_eof) = 1;
3732 }
3733
3734 /** Removes and deletes the top of the stack, if present.
3735  *  The next element becomes the new top.
3736  *  
3737  */
3738 void yypop_buffer_state (void)
3739 {
3740         if (!YY_CURRENT_BUFFER)
3741                 return;
3742
3743         yy_delete_buffer(YY_CURRENT_BUFFER );
3744         YY_CURRENT_BUFFER_LVALUE = NULL;
3745         if ((yy_buffer_stack_top) > 0)
3746                 --(yy_buffer_stack_top);
3747
3748         if (YY_CURRENT_BUFFER) {
3749                 yy_load_buffer_state( );
3750                 (yy_did_buffer_switch_on_eof) = 1;
3751         }
3752 }
3753
3754 /* Allocates the stack if it does not exist.
3755  *  Guarantees space for at least one push.
3756  */
3757 static void yyensure_buffer_stack (void)
3758 {
3759         int num_to_alloc;
3760     
3761         if (!(yy_buffer_stack)) {
3762
3763                 /* First allocation is just for 2 elements, since we don't know if this
3764                  * scanner will even need a stack. We use 2 instead of 1 to avoid an
3765                  * immediate realloc on the next call.
3766          */
3767                 num_to_alloc = 1;
3768                 (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
3769                                                                 (num_to_alloc * sizeof(struct yy_buffer_state*)
3770                                                                 );
3771                 if ( ! (yy_buffer_stack) )
3772                         YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
3773                                                                   
3774                 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
3775                                 
3776                 (yy_buffer_stack_max) = num_to_alloc;
3777                 (yy_buffer_stack_top) = 0;
3778                 return;
3779         }
3780
3781         if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
3782
3783                 /* Increase the buffer to prepare for a possible push. */
3784                 int grow_size = 8 /* arbitrary grow size */;
3785
3786                 num_to_alloc = (yy_buffer_stack_max) + grow_size;
3787                 (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
3788                                                                 ((yy_buffer_stack),
3789                                                                 num_to_alloc * sizeof(struct yy_buffer_state*)
3790                                                                 );
3791                 if ( ! (yy_buffer_stack) )
3792                         YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
3793
3794                 /* zero only the new slots.*/
3795                 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
3796                 (yy_buffer_stack_max) = num_to_alloc;
3797         }
3798 }
3799
3800 /** Setup the input buffer state to scan directly from a user-specified character buffer.
3801  * @param base the character buffer
3802  * @param size the size in bytes of the character buffer
3803  * 
3804  * @return the newly allocated buffer state object. 
3805  */
3806 YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
3807 {
3808         YY_BUFFER_STATE b;
3809     
3810         if ( size < 2 ||
3811              base[size-2] != YY_END_OF_BUFFER_CHAR ||
3812              base[size-1] != YY_END_OF_BUFFER_CHAR )
3813                 /* They forgot to leave room for the EOB's. */
3814                 return 0;
3815
3816         b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
3817         if ( ! b )
3818                 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
3819
3820         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
3821         b->yy_buf_pos = b->yy_ch_buf = base;
3822         b->yy_is_our_buffer = 0;
3823         b->yy_input_file = 0;
3824         b->yy_n_chars = b->yy_buf_size;
3825         b->yy_is_interactive = 0;
3826         b->yy_at_bol = 1;
3827         b->yy_fill_buffer = 0;
3828         b->yy_buffer_status = YY_BUFFER_NEW;
3829
3830         yy_switch_to_buffer(b  );
3831
3832         return b;
3833 }
3834
3835 /** Setup the input buffer state to scan a string. The next call to yylex() will
3836  * scan from a @e copy of @a str.
3837  * @param yystr a NUL-terminated string to scan
3838  * 
3839  * @return the newly allocated buffer state object.
3840  * @note If you want to scan bytes that may contain NUL values, then use
3841  *       yy_scan_bytes() instead.
3842  */
3843 YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
3844 {
3845     
3846         return yy_scan_bytes(yystr,strlen(yystr) );
3847 }
3848
3849 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
3850  * scan from a @e copy of @a bytes.
3851  * @param bytes the byte buffer to scan
3852  * @param len the number of bytes in the buffer pointed to by @a bytes.
3853  * 
3854  * @return the newly allocated buffer state object.
3855  */
3856 YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
3857 {
3858         YY_BUFFER_STATE b;
3859         char *buf;
3860         yy_size_t n;
3861         int i;
3862     
3863         /* Get memory for full buffer, including space for trailing EOB's. */
3864         n = _yybytes_len + 2;
3865         buf = (char *) yyalloc(n  );
3866         if ( ! buf )
3867                 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
3868
3869         for ( i = 0; i < _yybytes_len; ++i )
3870                 buf[i] = yybytes[i];
3871
3872         buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
3873
3874         b = yy_scan_buffer(buf,n );
3875         if ( ! b )
3876                 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
3877
3878         /* It's okay to grow etc. this buffer, and we should throw it
3879          * away when we're done.
3880          */
3881         b->yy_is_our_buffer = 1;
3882
3883         return b;
3884 }
3885
3886 #ifndef YY_EXIT_FAILURE
3887 #define YY_EXIT_FAILURE 2
3888 #endif
3889
3890 static void yy_fatal_error (yyconst char* msg )
3891 {
3892         (void) fprintf( stderr, "%s\n", msg );
3893         exit( YY_EXIT_FAILURE );
3894 }
3895
3896 /* Redefine yyless() so it works in section 3 code. */
3897
3898 #undef yyless
3899 #define yyless(n) \
3900         do \
3901                 { \
3902                 /* Undo effects of setting up yytext. */ \
3903         int yyless_macro_arg = (n); \
3904         YY_LESS_LINENO(yyless_macro_arg);\
3905                 yytext[yyleng] = (yy_hold_char); \
3906                 (yy_c_buf_p) = yytext + yyless_macro_arg; \
3907                 (yy_hold_char) = *(yy_c_buf_p); \
3908                 *(yy_c_buf_p) = '\0'; \
3909                 yyleng = yyless_macro_arg; \
3910                 } \
3911         while ( 0 )
3912
3913 /* Accessor  methods (get/set functions) to struct members. */
3914
3915 /** Get the current line number.
3916  * 
3917  */
3918 int yyget_lineno  (void)
3919 {
3920         
3921     return yylineno;
3922 }
3923
3924 /** Get the input stream.
3925  * 
3926  */
3927 FILE *yyget_in  (void)
3928 {
3929         return yyin;
3930 }
3931
3932 /** Get the output stream.
3933  * 
3934  */
3935 FILE *yyget_out  (void)
3936 {
3937         return yyout;
3938 }
3939
3940 /** Get the length of the current token.
3941  * 
3942  */
3943 int yyget_leng  (void)
3944 {
3945         return yyleng;
3946 }
3947
3948 /** Get the current token.
3949  * 
3950  */
3951
3952 char *yyget_text  (void)
3953 {
3954         return yytext;
3955 }
3956
3957 /** Set the current line number.
3958  * @param line_number
3959  * 
3960  */
3961 void yyset_lineno (int  line_number )
3962 {
3963     
3964     yylineno = line_number;
3965 }
3966
3967 /** Set the input stream. This does not discard the current
3968  * input buffer.
3969  * @param in_str A readable stream.
3970  * 
3971  * @see yy_switch_to_buffer
3972  */
3973 void yyset_in (FILE *  in_str )
3974 {
3975         yyin = in_str ;
3976 }
3977
3978 void yyset_out (FILE *  out_str )
3979 {
3980         yyout = out_str ;
3981 }
3982
3983 int yyget_debug  (void)
3984 {
3985         return yy_flex_debug;
3986 }
3987
3988 void yyset_debug (int  bdebug )
3989 {
3990         yy_flex_debug = bdebug ;
3991 }
3992
3993 static int yy_init_globals (void)
3994 {
3995         /* Initialization is the same as for the non-reentrant scanner.
3996      * This function is called from yylex_destroy(), so don't allocate here.
3997      */
3998
3999     (yy_buffer_stack) = 0;
4000     (yy_buffer_stack_top) = 0;
4001     (yy_buffer_stack_max) = 0;
4002     (yy_c_buf_p) = (char *) 0;
4003     (yy_init) = 0;
4004     (yy_start) = 0;
4005
4006     (yy_state_buf) = 0;
4007     (yy_state_ptr) = 0;
4008     (yy_full_match) = 0;
4009     (yy_lp) = 0;
4010
4011 /* Defined in main.c */
4012 #ifdef YY_STDINIT
4013     yyin = stdin;
4014     yyout = stdout;
4015 #else
4016     yyin = (FILE *) 0;
4017     yyout = (FILE *) 0;
4018 #endif
4019
4020     /* For future reference: Set errno on error, since we are called by
4021      * yylex_init()
4022      */
4023     return 0;
4024 }
4025
4026 /* yylex_destroy is for both reentrant and non-reentrant scanners. */
4027 int yylex_destroy  (void)
4028 {
4029     
4030     /* Pop the buffer stack, destroying each element. */
4031         while(YY_CURRENT_BUFFER){
4032                 yy_delete_buffer(YY_CURRENT_BUFFER  );
4033                 YY_CURRENT_BUFFER_LVALUE = NULL;
4034                 yypop_buffer_state();
4035         }
4036
4037         /* Destroy the stack itself. */
4038         yyfree((yy_buffer_stack) );
4039         (yy_buffer_stack) = NULL;
4040
4041     yyfree ( (yy_state_buf) );
4042     (yy_state_buf)  = NULL;
4043
4044     /* Reset the globals. This is important in a non-reentrant scanner so the next time
4045      * yylex() is called, initialization will occur. */
4046     yy_init_globals( );
4047
4048     return 0;
4049 }
4050
4051 /*
4052  * Internal utility routines.
4053  */
4054
4055 #ifndef yytext_ptr
4056 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
4057 {
4058         register int i;
4059         for ( i = 0; i < n; ++i )
4060                 s1[i] = s2[i];
4061 }
4062 #endif
4063
4064 #ifdef YY_NEED_STRLEN
4065 static int yy_flex_strlen (yyconst char * s )
4066 {
4067         register int n;
4068         for ( n = 0; s[n]; ++n )
4069                 ;
4070
4071         return n;
4072 }
4073 #endif
4074
4075 void *yyalloc (yy_size_t  size )
4076 {
4077         return (void *) malloc( size );
4078 }
4079
4080 void *yyrealloc  (void * ptr, yy_size_t  size )
4081 {
4082         /* The cast to (char *) in the following accommodates both
4083          * implementations that use char* generic pointers, and those
4084          * that use void* generic pointers.  It works with the latter
4085          * because both ANSI C and C++ allow castless assignment from
4086          * any pointer type to void*, and deal with argument conversions
4087          * as though doing an assignment.
4088          */
4089         return (void *) realloc( (char *) ptr, size );
4090 }
4091
4092 void yyfree (void * ptr )
4093 {
4094         free( (char *) ptr );   /* see yyrealloc() for (char *) cast */
4095 }
4096
4097 #define YYTABLES_NAME "yytables"
4098
4099 #line 992 "parser.l"
4100
4101
4102
4103
4104 static char *StringToLex;
4105
4106 #ifndef FLEX_SCANNER
4107 static FILE *lexFP;
4108
4109 static int input()
4110 {
4111     int ret;
4112     
4113     if (StringToLex != NULL) {
4114         ret = *StringToLex;
4115         if (ret == NULLCHAR)
4116           ret = EOF;
4117         else
4118           StringToLex++;
4119     } else if (unputCount > 0) {
4120         ret = unputBuffer[--unputCount];
4121     } else {
4122         ret = fgetc(lexFP);
4123     }    
4124
4125     if (ret == EOF) 
4126       return 0;
4127     else
4128       return ret;
4129 }
4130
4131 /*
4132  * Return offset of next pattern within current file
4133  */
4134 int yyoffset()
4135 {
4136     int offset = ftell(lexFP) - unputCount;
4137
4138     if (offset < 0) {
4139         offset = 0;
4140     }
4141     return(offset);
4142 }
4143  
4144 static void output(ch)
4145      int ch;
4146 {
4147     if(appData.debugMode) fprintf(debugFP, "PARSER BUG: unmatched character '%c' (0%o)\n",
4148             ch, ch);
4149 }
4150
4151 static void unput(ch)
4152      int ch;
4153 {
4154     if (ch == 0) return;
4155     if (StringToLex != NULL) {
4156         StringToLex--;
4157     } else {
4158         if (unputCount >= UNPUT_BUF_SIZE)
4159           if(appData.debugMode) fprintf(debugFP, "PARSER BUG: unput buffer overflow '%c' (0%o)\n",
4160                   ch, ch);
4161         unputBuffer[unputCount++] = ch;
4162     }
4163 }
4164
4165 /* Get ready to lex from a new file.  Kludge below sticks
4166    an artificial newline at the front of the file, which the
4167    above grammar ignores, but which makes ^ at start of pattern
4168    match at the real start of the file.
4169 */
4170 void yynewfile(f)
4171      FILE *f;
4172 {
4173     lexFP = f;
4174     StringToLex = NULL;
4175     unputCount = 0;
4176     unput('\n'); /* kludge */
4177 }
4178
4179 /* Get ready to lex from a string.  ^ at start of pattern WON'T
4180    match at the start of the string!
4181 */
4182 void yynewstr(s)
4183      char *s;
4184 {
4185     lexFP = NULL;
4186     StringToLex = s;
4187     unputCount = 0;
4188 }
4189 #endif /*!FLEX_SCANNER*/
4190
4191 #ifdef FLEX_SCANNER
4192 void my_yy_input(buf, result, max_size)
4193      char *buf;
4194      int *result;
4195      int max_size;
4196 {
4197     int count;
4198
4199     if (StringToLex != NULL) {
4200         count = 0;
4201         while (*StringToLex != NULLCHAR) {
4202             *buf++ = *StringToLex++;
4203             count++;
4204         }
4205         *result = count;
4206         return;
4207     } else {
4208         count = fread(buf, 1, max_size, yyin);
4209         if (count == 0) {
4210             *result = YY_NULL;
4211         } else {
4212             *result = count;
4213         }
4214         return;
4215     }    
4216 }
4217
4218 static YY_BUFFER_STATE my_file_buffer = NULL;
4219
4220 /*
4221     Return offset of next pattern in the current file.
4222 */
4223 int yyoffset()
4224 {
4225     int pos = yy_c_buf_p - YY_CURRENT_BUFFER->yy_ch_buf;
4226
4227     return(ftell(YY_CURRENT_BUFFER->yy_input_file) -
4228          yy_n_chars + pos);
4229 }
4230
4231
4232 void yynewstr(s)
4233      char *s;
4234 {
4235     if (my_file_buffer != NULL)
4236       yy_delete_buffer(my_file_buffer);
4237     StringToLex = s;
4238     my_file_buffer = yy_create_buffer(stdin,YY_BUF_SIZE);
4239     yy_switch_to_buffer(my_file_buffer);
4240 }
4241
4242 void yynewfile(f)
4243      FILE *f;
4244 {
4245     if (my_file_buffer != NULL)
4246       yy_delete_buffer(my_file_buffer);
4247     StringToLex = NULL;
4248     my_file_buffer = yy_create_buffer(f,YY_BUF_SIZE);
4249     yy_switch_to_buffer(my_file_buffer);
4250 }
4251 #endif /*FLEX_SCANNER*/
4252
4253 int yywrap()
4254 {
4255     return TRUE;
4256 }
4257
4258 /* Parse a move from the given string s */
4259 /* ^ at start of pattern WON'T work here unless using flex */
4260 ChessMove yylexstr(boardIndex, s, text, len)
4261      int boardIndex, len;
4262      char *s, *text;
4263 {
4264     ChessMove ret;
4265     char *oldStringToLex;
4266 #ifdef FLEX_SCANNER
4267     YY_BUFFER_STATE buffer, oldBuffer;
4268 #endif
4269     
4270     yyboardindex = boardIndex;
4271     oldStringToLex = StringToLex;
4272     StringToLex = s;
4273 #ifdef FLEX_SCANNER
4274     buffer = yy_create_buffer(stdin,YY_BUF_SIZE);
4275     oldBuffer = YY_CURRENT_BUFFER;
4276     yy_switch_to_buffer(buffer);
4277 #endif /*FLEX_SCANNER*/
4278
4279     ret = (ChessMove) yylex();
4280      strncpy(text, yy_text, len-1); // [HGM] vari: yy_text is not available to caller after buffer switch ?!?
4281      text[len-1] = NULLCHAR;
4282
4283 #ifdef FLEX_SCANNER
4284     if (oldBuffer != NULL) 
4285       yy_switch_to_buffer(oldBuffer);
4286     yy_delete_buffer(buffer);
4287 #endif /*FLEX_SCANNER*/
4288     StringToLex = oldStringToLex;
4289
4290     return ret;
4291 }
4292