home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #3 / amigamamagazinepolishissue1998.iso / szachy / gnu / amyboard-3.2.pl2 / amiga / parser.c < prev    next >
C/C++ Source or Header  |  1995-05-23  |  125KB  |  3,487 lines

  1. /* A lexical scanner generated by flex */
  2.  
  3. /* Scanner skeleton version:
  4.  * $Header: /home/daffy/u0/vern/flex/flex-2.4.7/RCS/flex.skl,v 1.2 94/08/03 11:13:24 vern Exp $
  5.  */
  6.  
  7. #define FLEX_SCANNER
  8.  
  9. #include <stdio.h>
  10.  
  11.  
  12. /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
  13. #ifdef c_plusplus
  14. #ifndef __cplusplus
  15. #define __cplusplus
  16. #endif
  17. #endif
  18.  
  19.  
  20. #ifdef __cplusplus
  21.  
  22. #include <stdlib.h>
  23. #include <unistd.h>
  24.  
  25. /* Use prototypes in function declarations. */
  26. #define YY_USE_PROTOS
  27.  
  28. /* The "const" storage-class-modifier is valid. */
  29. #define YY_USE_CONST
  30.  
  31. #else    /* ! __cplusplus */
  32.  
  33. #ifdef __STDC__
  34.  
  35. #define YY_USE_PROTOS
  36. #define YY_USE_CONST
  37.  
  38. #endif    /* __STDC__ */
  39. #endif    /* ! __cplusplus */
  40.  
  41.  
  42. #ifdef __TURBOC__
  43. #define YY_USE_CONST
  44. #endif
  45.  
  46.  
  47. #ifndef YY_USE_CONST
  48. #ifndef const
  49. #define const
  50. #endif
  51. #endif
  52.  
  53.  
  54. #ifdef YY_USE_PROTOS
  55. #define YY_PROTO(proto) proto
  56. #else
  57. #define YY_PROTO(proto) ()
  58. #endif
  59.  
  60. /* Returned upon end-of-file. */
  61. #define YY_NULL 0
  62.  
  63. /* Promotes a possibly negative, possibly signed char to an unsigned
  64.  * integer for use as an array index.  If the signed char is negative,
  65.  * we want to instead treat it as an 8-bit unsigned char, hence the
  66.  * double cast.
  67.  */
  68. #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
  69.  
  70. /* Enter a start condition.  This macro really ought to take a parameter,
  71.  * but we do it the disgusting crufty way forced on us by the ()-less
  72.  * definition of BEGIN.
  73.  */
  74. #define BEGIN yy_start = 1 + 2 *
  75.  
  76. /* Translate the current start state into a value that can be later handed
  77.  * to BEGIN to return to the state.
  78.  */
  79. #define YY_START ((yy_start - 1) / 2)
  80.  
  81. /* Action number for EOF rule of a given start state. */
  82. #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
  83.  
  84. /* Special action meaning "start processing a new file".  Now included
  85.  * only for backward compatibility with previous versions of flex.
  86.  */
  87. #define YY_NEW_FILE yyrestart( yyin )
  88.  
  89. #define YY_END_OF_BUFFER_CHAR 0
  90.  
  91. /* Size of default input buffer. */
  92. #define YY_BUF_SIZE 16384
  93.  
  94. typedef struct yy_buffer_state *YY_BUFFER_STATE;
  95.  
  96. extern int yyleng;
  97. extern FILE *yyin, *yyout;
  98.  
  99. #ifdef __cplusplus
  100. extern "C" {
  101. #endif
  102.     extern int yywrap YY_PROTO(( void ));
  103. #ifdef __cplusplus
  104.     }
  105. #endif
  106.  
  107. #define EOB_ACT_CONTINUE_SCAN 0
  108. #define EOB_ACT_END_OF_FILE 1
  109. #define EOB_ACT_LAST_MATCH 2
  110.  
  111. /* The funky do-while in the following #define is used to turn the definition
  112.  * int a single C statement (which needs a semi-colon terminator).  This
  113.  * avoids problems with code like:
  114.  *
  115.  *     if ( condition_holds )
  116.  *        yyless( 5 );
  117.  *    else
  118.  *        do_something_else();
  119.  *
  120.  * Prior to using the do-while the compiler would get upset at the
  121.  * "else" because it interpreted the "if" statement as being all
  122.  * done when it reached the ';' after the yyless() call.
  123.  */
  124.  
  125. /* Return all but the first 'n' matched characters back to the input stream. */
  126.  
  127. #define yyless(n) \
  128.     do \
  129.         { \
  130.         /* Undo effects of setting up yytext. */ \
  131.         *yy_cp = yy_hold_char; \
  132.         yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
  133.         YY_DO_BEFORE_ACTION; /* set up yytext again */ \
  134.         } \
  135.     while ( 0 )
  136.  
  137. #define unput(c) yyunput( c, yytext_ptr )
  138.  
  139.  
  140. struct yy_buffer_state
  141.     {
  142.     FILE *yy_input_file;
  143.  
  144.     char *yy_ch_buf;        /* input buffer */
  145.     char *yy_buf_pos;        /* current position in input buffer */
  146.  
  147.     /* Size of input buffer in bytes, not including room for EOB
  148.      * characters.
  149.      */
  150.     int yy_buf_size;
  151.  
  152.     /* Number of characters read into yy_ch_buf, not including EOB
  153.      * characters.
  154.      */
  155.     int yy_n_chars;
  156.  
  157.     /* Whether this is an "interactive" input source; if so, and
  158.      * if we're using stdio for input, then we want to use getc()
  159.      * instead of fread(), to make sure we stop fetching input after
  160.      * each newline.
  161.      */
  162.     int yy_is_interactive;
  163.  
  164.     /* Whether to try to fill the input buffer when we reach the
  165.      * end of it.
  166.      */
  167.     int yy_fill_buffer;
  168.  
  169.     int yy_buffer_status;
  170. #define YY_BUFFER_NEW 0
  171. #define YY_BUFFER_NORMAL 1
  172.     /* When an EOF's been seen but there's still some text to process
  173.      * then we mark the buffer as YY_EOF_PENDING, to indicate that we
  174.      * shouldn't try reading from the input source any more.  We might
  175.      * still have a bunch of tokens to match, though, because of
  176.      * possible backing-up.
  177.      *
  178.      * When we actually see the EOF, we change the status to "new"
  179.      * (via yyrestart()), so that the user can continue scanning by
  180.      * just pointing yyin at a new input file.
  181.      */
  182. #define YY_BUFFER_EOF_PENDING 2
  183.     };
  184.  
  185. static YY_BUFFER_STATE yy_current_buffer = 0;
  186.  
  187. /* We provide macros for accessing buffer states in case in the
  188.  * future we want to put the buffer states in a more general
  189.  * "scanner state".
  190.  */
  191. #define YY_CURRENT_BUFFER yy_current_buffer
  192.  
  193.  
  194. /* yy_hold_char holds the character lost when yytext is formed. */
  195. static char yy_hold_char;
  196.  
  197. static int yy_n_chars;        /* number of characters read into yy_ch_buf */
  198.  
  199.  
  200. int yyleng;
  201.  
  202. /* Points to current character in buffer. */
  203. static char *yy_c_buf_p = (char *) 0;
  204. static int yy_init = 1;        /* whether we need to initialize */
  205. static int yy_start = 0;    /* start state number */
  206.  
  207. /* Flag which is used to allow yywrap()'s to do buffer switches
  208.  * instead of setting up a fresh yyin.  A bit of a hack ...
  209.  */
  210. static int yy_did_buffer_switch_on_eof;
  211.  
  212. static void yyunput YY_PROTO(( int c, char *buf_ptr ));
  213. void yyrestart YY_PROTO(( FILE *input_file ));
  214. void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
  215. void yy_load_buffer_state YY_PROTO(( void ));
  216. YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
  217. void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
  218. void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
  219.  
  220. static int yy_start_stack_ptr = 0;
  221. static int yy_start_stack_depth = 0;
  222. static int *yy_start_stack = 0;
  223. static void yy_push_state YY_PROTO(( int new_state ));
  224. static void yy_pop_state YY_PROTO(( void ));
  225. static int yy_top_state YY_PROTO(( void ));
  226.  
  227. static void *yy_flex_alloc YY_PROTO(( unsigned int ));
  228. static void *yy_flex_realloc YY_PROTO(( void *, unsigned int ));
  229. static void yy_flex_free YY_PROTO(( void * ));
  230.  
  231. #define yy_new_buffer yy_create_buffer
  232.  
  233. #define INITIAL 0
  234. typedef unsigned char YY_CHAR;
  235. typedef int yy_state_type;
  236.  
  237. #define YY_USES_REJECT
  238. FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
  239. extern char *yytext;
  240. #define yytext_ptr yytext
  241.  
  242. #ifndef yytext_ptr
  243. static void yy_flex_strncpy YY_PROTO(( char *, const char *, int ));
  244. #endif
  245.  
  246. #ifdef __cplusplus
  247. static int yyinput YY_PROTO(( void ));
  248. #else
  249. static int input YY_PROTO(( void ));
  250. #endif
  251.  
  252. static yy_state_type yy_get_previous_state YY_PROTO(( void ));
  253. static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
  254. static int yy_get_next_buffer YY_PROTO(( void ));
  255. static void yy_fatal_error YY_PROTO(( const char msg[] ));
  256.  
  257. /* Done after the current pattern has been matched and before the
  258.  * corresponding action - sets up yytext.
  259.  */
  260. #define YY_DO_BEFORE_ACTION \
  261.     yytext_ptr = yy_bp; \
  262.     yyleng = yy_cp - yy_bp; \
  263.     yy_hold_char = *yy_cp; \
  264.     *yy_cp = '\0'; \
  265.     yy_c_buf_p = yy_cp;
  266.  
  267. #define YY_END_OF_BUFFER 47
  268. static const short int yy_acclist[741] =
  269.     {   0,
  270.        47,   45,   46,   44,   45,   46,   45,   46,   30,   45,
  271.        46,   45,   46,   44,   45,   46,   44,   45,   46,16415,
  272.        44,   45,   46,16415,   45,   46,   24,   44,   45,   46,
  273.        44,   45,   46,   44,   45,   46,   44,   45,   46,   44,
  274.        45,   46,   44,   45,   46,   44,   45,   46,   44,   45,
  275.        46,   44,   45,   46,   44,   45,   46,   23,   44,   45,
  276.        46,   45,   46,   44,   45,   46,   24,   44,   45,   46,
  277.        44,   45,   46,   44,   45,   46,   44,   45,   46,   44,
  278.        45,   46,   44,   45,   46,   44,   45,   46,   44,   45,
  279.        46,   45,   46,   45,   46,   44,   45,   46,   44,   45,
  280.  
  281.        46,   44,   45,   46,16415,   44,   45,   46,16415,   45,
  282.        46,   24,   44,   45,   46,   44,   45,   46,   44,   45,
  283.        46,   44,   45,   46,   44,   45,   46,   44,   45,   46,
  284.        44,   45,   46,   44,   45,   46,   44,   45,   46,   44,
  285.        45,   46,   23,   44,   45,   46,   44,   45,   46,   24,
  286.        44,   45,   46,   44,   45,   46,   44,   45,   46,   44,
  287.        45,   46,   44,   45,   46,   44,   45,   46,   44,   45,
  288.        46,   44,   45,   46,   45,   46,   44,   19,   44,    9,
  289.        44,   44,   44,16415, 8223,   44,   39,   44,   44,   44,
  290.        44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
  291.  
  292.        44,    9,   44,   44,   44,   44,   44,   44,   44,   44,
  293.        40,   44,    3,   44,   44,   44,    4,   44,   44,    3,
  294.        44,   44,    4,   44,   44,   44,   44,    9,   44,   38,
  295.        44,   43,   44,    9,   44,   43,   44,   44,16415,   43,
  296.      8223,   44,   44,   44,   43,   44,   44,   44,   44,   44,
  297.        44,   44,   44,   44,   44,   44,   44,    9,   44,   44,
  298.        44,   44,   44,   44,   44,   44,   44,    3,   44,   43,
  299.        44,   44,    4,   44,   44,    3,   44,   43,   44,    4,
  300.        44,   44,   44,   44,    9,   44,   17,    9,   44,   28,
  301.        44,   28,    8,   44, 8223,   27,   44,   27,   29,   44,
  302.  
  303.        44,   44,   44,    6,   44,   44,   44,   44,   44,   44,
  304.        44,   44,   44,    9,   44,   44,   44,   44,   44,   44,
  305.        44,   44,    4,   44,   44,    3,   44,   44,    3,   44,
  306.         4,    5,   44,    4,   44,    4,   44,   44,   44,    3,
  307.        44,    4,    4,   44,    5,    6,   44,    4,   44,    9,
  308.        44,   38,   43,    9,   44,   28,   44,    8,   44,   28,
  309.        43,   27,   44,   27,   43,   39,   44,   44,   43,   44,
  310.        43,   44,    6,   44,   44,   44,   44,   44,   44,   44,
  311.        44,   44,    9,   44,   44,   44,   44,   44,   44,   44,
  312.        44,    4,   44,   44,   43,    3,   44,   44,    3,   44,
  313.  
  314.         4,   43,    5,   44,    4,   44,    4,   44,   44,   43,
  315.        44,    3,   44,    4,   43,    4,   44,    5,    6,   44,
  316.         4,   44,    9,   44,   42,   42,   41,   30,   30,   44,
  317.         6,   44,    7,   44,    6,   44,   44,   44,   44,   44,
  318.        44,   22,   44,   44,   18,   44,   44,   44,   44,   44,
  319.        44,   44,   44,   40,    3,    3,    2,   44,    5,    4,
  320.         5,   44,    4,    2,    7,   44,    5,    6,    5,    6,
  321.        44,    5,   44,   44,   30,   43,   44,   43,   43,    6,
  322.        44,   43,    7,   44,    6,   43,   44,   44,   43,   44,
  323.        44,   44,   44,   22,   44,   44,   18,   44,   44,   44,
  324.  
  325.        44,   44,   44,   44,   44,   43,    2,   44,   43,    5,
  326.        43,   43,    4,   43,    5,   44,   43,    2,    7,   44,
  327.         5,    6,   43,    5,    6,   44,    5,   44,   44,   24,
  328.         7,   24,   44,    1,   44,   44,   22,   44,   44,   44,
  329.        44,   44,   44,   44,   23,   23,   44,   35,   40,    2,
  330.         2,   44,    5,    5,    2,    7,   43,   43,   43,   43,
  331.        43,   43,    7,   43,   24,   44,   43,    1,   44,   44,
  332.        22,   44,   44,   44,   44,   44,   44,   44,   23,   44,
  333.         2,   43,    2,   44,   43,   43,    5,   43,    4,   43,
  334.         2,    7,   43,   32,   42,   28,   28,   27,   27,   29,
  335.  
  336.        29,   26,   24,    1,    1,   44,   44,   44,   44,   10,
  337.        44,   44,   44,   25,   23,   33,   40,   35,    2,    2,
  338.        32,   38,   43,   28,   43,   43,   28,   43,   43,   27,
  339.        43,   43,   27,   43,    1,   43,    1,   44,   44,   44,
  340.        44,   10,   44,   44,   44,   43,   43,    2,   43,    5,
  341.        43,   29,   24,    1,    1,   22,   44,   44,   44,   10,
  342.        44,   44,   44,   23,   43,   43,    1,   43,   44,   44,
  343.        44,   10,   44,   44,   44,    2,   43,   12,   24,   44,
  344.        44,   44,   11,   23,    1,   43,   44,   44,   44,   12,
  345.        12,   44,   44,   16,   44,   11,   11,   44,   43,   44,
  346.  
  347.        16,   44,   21,   44,   44,   43,   43,   44,   44,   21,
  348.        44,   44,   43,   43,   44,   44,   36,   44,   43,   43,
  349.        36,   44,   14,   20,   24,   36,   13,   23,   37,   37,
  350.        39,   36,   43,   26,   20,   25,   21,   15,   38,   34
  351.     } ;
  352.  
  353. static const short int yy_accept[935] =
  354.     {   0,
  355.         1,    1,    1,    2,    4,    7,    9,   12,   14,   17,
  356.        21,   25,   27,   31,   34,   37,   40,   43,   46,   49,
  357.        52,   55,   58,   62,   64,   67,   71,   74,   77,   80,
  358.        83,   86,   89,   92,   94,   96,   99,  102,  106,  110,
  359.       112,  116,  119,  122,  125,  128,  131,  134,  137,  140,
  360.       143,  147,  150,  154,  157,  160,  163,  166,  169,  172,
  361.       175,  177,  178,  178,  178,  178,  178,  179,  179,  179,
  362.       180,  180,  182,  182,  182,  182,  183,  183,  185,  185,
  363.       187,  187,  188,  188,  189,  189,  190,  190,  191,  192,
  364.       193,  194,  195,  196,  197,  198,  199,  200,  201,  202,
  365.  
  366.       204,  205,  206,  207,  208,  209,  209,  210,  211,  211,
  367.       211,  211,  211,  212,  213,  215,  215,  216,  217,  219,
  368.       220,  222,  222,  223,  225,  226,  227,  228,  230,  230,
  369.       230,  230,  231,  231,  232,  233,  234,  236,  237,  238,
  370.       240,  241,  243,  243,  244,  245,  246,  247,  248,  249,
  371.       250,  251,  252,  253,  254,  255,  256,  257,  258,  260,
  372.       261,  262,  263,  264,  265,  266,  267,  268,  270,  271,
  373.       272,  273,  275,  276,  278,  279,  280,  282,  283,  284,
  374.       285,  287,  287,  287,  287,  287,  287,  287,  287,  287,
  375.       287,  287,  288,  288,  288,  288,  290,  292,  293,  295,
  376.  
  377.       296,  296,  296,  296,  298,  299,  300,  300,  300,  300,
  378.       300,  300,  300,  300,  301,  301,  302,  302,  303,  303,
  379.       304,  306,  307,  308,  309,  310,  311,  312,  313,  314,
  380.       316,  317,  318,  319,  320,  321,  321,  321,  321,  321,
  381.       321,  321,  322,  323,  323,  323,  323,  323,  325,  325,
  382.       326,  326,  326,  328,  329,  331,  332,  334,  334,  334,
  383.       336,  338,  339,  339,  340,  342,  343,  345,  348,  350,
  384.       352,  353,  353,  353,  353,  353,  354,  354,  356,  358,
  385.       360,  362,  364,  366,  366,  367,  367,  368,  369,  370,
  386.       371,  372,  373,  375,  376,  377,  378,  379,  380,  381,
  387.  
  388.       382,  383,  385,  386,  387,  388,  389,  390,  391,  392,
  389.       394,  395,  396,  398,  399,  401,  403,  405,  407,  409,
  390.       410,  411,  412,  414,  416,  418,  421,  423,  425,  425,
  391.       426,  427,  427,  427,  428,  428,  428,  429,  429,  430,
  392.       430,  430,  430,  431,  431,  431,  431,  431,  431,  431,
  393.       431,  431,  431,  431,  431,  431,  431,  431,  431,  431,
  394.       431,  431,  431,  433,  433,  433,  435,  436,  437,  438,
  395.       438,  439,  440,  441,  442,  444,  444,  445,  447,  448,
  396.       449,  450,  451,  452,  452,  452,  452,  452,  452,  452,
  397.       452,  452,  452,  452,  453,  454,  454,  454,  454,  454,
  398.  
  399.       455,  456,  456,  457,  459,  460,  461,  461,  461,  463,
  400.       464,  464,  467,  469,  472,  474,  475,  475,  476,  476,
  401.       476,  476,  476,  477,  478,  479,  480,  480,  480,  482,
  402.       483,  485,  487,  488,  489,  490,  491,  492,  493,  494,
  403.       496,  497,  499,  500,  501,  502,  503,  504,  505,  506,
  404.       507,  509,  510,  512,  513,  515,  517,  518,  521,  524,
  405.       527,  529,  530,  530,  530,  530,  530,  530,  530,  530,
  406.       530,  530,  530,  530,  530,  530,  530,  530,  530,  530,
  407.       530,  530,  530,  530,  530,  531,  531,  532,  534,  536,
  408.       537,  537,  539,  539,  540,  541,  542,  543,  544,  545,
  409.  
  410.       545,  545,  545,  545,  545,  545,  545,  545,  545,  546,
  411.       548,  548,  548,  550,  550,  550,  551,  551,  551,  553,
  412.       554,  555,  557,  557,  557,  557,  557,  557,  557,  558,
  413.       559,  560,  561,  562,  563,  563,  563,  565,  567,  568,
  414.       570,  571,  573,  574,  575,  576,  577,  578,  579,  581,
  415.       583,  585,  586,  587,  589,  591,  594,  594,  596,  596,
  416.       597,  597,  598,  598,  599,  599,  600,  600,  601,  601,
  417.       602,  602,  602,  602,  602,  602,  602,  602,  603,  603,
  418.       603,  603,  603,  603,  603,  603,  604,  605,  605,  605,
  419.       605,  607,  608,  608,  608,  608,  608,  608,  608,  609,
  420.  
  421.       610,  612,  613,  614,  614,  614,  614,  614,  614,  615,
  422.       615,  615,  615,  615,  615,  616,  616,  618,  618,  619,
  423.       620,  621,  623,  623,  623,  624,  626,  627,  629,  630,
  424.       632,  633,  635,  635,  635,  637,  639,  640,  641,  642,
  425.       644,  645,  646,  647,  648,  650,  652,  652,  652,  653,
  426.       653,  653,  653,  653,  653,  654,  654,  654,  654,  654,
  427.       654,  654,  655,  655,  656,  656,  657,  657,  657,  657,
  428.       657,  657,  657,  657,  658,  659,  660,  662,  663,  664,
  429.       664,  664,  664,  664,  664,  665,  665,  665,  665,  665,
  430.       665,  665,  665,  665,  666,  667,  669,  670,  671,  672,
  431.  
  432.       674,  675,  676,  678,  678,  678,  678,  678,  678,  678,
  433.       678,  678,  678,  679,  679,  680,  680,  680,  680,  680,
  434.       680,  680,  680,  680,  680,  680,  681,  682,  683,  683,
  435.       683,  683,  683,  683,  684,  684,  685,  685,  685,  685,
  436.       685,  685,  687,  688,  689,  690,  690,  690,  691,  691,
  437.       691,  691,  692,  692,  692,  692,  692,  692,  692,  692,
  438.       692,  692,  693,  694,  696,  696,  697,  697,  697,  698,
  439.       698,  698,  698,  698,  698,  699,  700,  701,  703,  703,
  440.       703,  703,  703,  703,  703,  703,  704,  704,  704,  704,
  441.       705,  706,  706,  706,  706,  706,  706,  706,  706,  707,
  442.  
  443.       708,  709,  710,  710,  710,  710,  710,  710,  710,  710,
  444.       710,  710,  710,  711,  711,  711,  711,  711,  711,  711,
  445.       712,  713,  713,  713,  713,  713,  713,  713,  713,  713,
  446.       713,  714,  715,  716,  717,  717,  717,  717,  717,  717,
  447.       717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
  448.       717,  717,  717,  719,  719,  719,  719,  719,  719,  719,
  449.       719,  719,  719,  719,  719,  720,  721,  723,  723,  724,
  450.       724,  724,  725,  726,  726,  726,  726,  726,  726,  726,
  451.       727,  728,  728,  728,  729,  729,  730,  730,  730,  732,
  452.       732,  734,  734,  735,  736,  736,  736,  736,  736,  736,
  453.  
  454.       737,  737,  737,  737,  737,  737,  737,  738,  738,  738,
  455.       738,  738,  738,  738,  739,  739,  739,  739,  739,  739,
  456.       739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
  457.       739,  740,  741,  741
  458.     } ;
  459.  
  460. static const int yy_ec[256] =
  461.     {   0,
  462.         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
  463.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  464.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  465.         1,    4,    1,    5,    6,    1,    7,    1,    8,    9,
  466.        10,   11,   12,    1,   13,   14,   15,   16,   17,   18,
  467.        19,   19,   19,   19,   19,   19,   20,   21,   22,    1,
  468.        23,    1,    1,    1,   24,   25,   26,   27,   28,   29,
  469.        30,   31,   32,   33,   34,   35,   36,   37,   38,   39,
  470.        40,   41,   42,   43,   44,   33,   45,   46,   47,   33,
  471.        48,    1,   49,    1,   50,    1,   51,   52,   53,   54,
  472.  
  473.        55,   56,   57,   58,   59,   33,   60,   61,   62,   63,
  474.        64,   65,   40,   66,   67,   68,   69,   33,   70,   46,
  475.        47,   33,   71,    1,   72,    1,    1,    1,    1,    1,
  476.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  477.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  478.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  479.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  480.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  481.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  482.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  483.  
  484.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  485.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  486.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  487.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  488.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  489.         1,    1,    1,    1,    1
  490.     } ;
  491.  
  492. static const int yy_meta[73] =
  493.     {   0,
  494.         1,    2,    3,    2,    1,    1,    1,    4,    5,    6,
  495.         1,    1,    7,    2,    1,    4,    4,    4,    4,    4,
  496.         8,    1,    1,    4,    9,    4,    4,    4,    4,    4,
  497.         4,    4,    4,    9,    4,    4,    9,    4,    9,    9,
  498.         9,    4,    4,    4,    4,    7,    4,    1,    1,    1,
  499.        10,   10,   10,   10,   10,   10,   10,   10,    4,    9,
  500.         4,    4,    9,    4,    9,    9,    4,    4,    4,    4,
  501.         1,    1
  502.     } ;
  503.  
  504. static const short int yy_base[984] =
  505.     {   0,
  506.         0,   72, 3524, 3525,    0,  136, 3519,  134,  144,  164,
  507.       233, 3519,  296,  118,  109,  124,  208,  162,  201,  225,
  508.       240,  195,  261,  357,  417,  463,  266,  275,  117,  202,
  509.       208,  106,  242,  318, 3517,  143,  373,  520,  370,  238,
  510.       587,  324,  335,  376,  383,  390,  387,  641,  388,  388,
  511.       429,  692,  738,  271,  399,  251,  347,  390,  204,  478,
  512.       594,    0, 3511,  313,  476,  237, 3525, 3507,  297,  323,
  513.      3501, 3501, 3499,  418,  613, 3499,  328,    0, 3498,    0,
  514.      3510, 3525,  773,  449,  616,  831,  624, 3488,  440, 3460,
  515.      3482, 3454, 3484, 3456, 3462, 3436, 3461, 3435, 3464, 3463,
  516.  
  517.       460, 3458,  551, 3475, 3447,  866, 3465, 3437, 3446,  936,
  518.       406, 1008, 3525,  632, 1072,  663,  671,  471, 1130,  679,
  519.      1184,  709,  717, 1234,  493,  575, 3430, 3429,  301, 3420,
  520.       634, 3487, 3486,  505, 3486,  615,  791,  245,  805, 1299,
  521.       527,  588,  458,  802, 1358,  812,  639,  602,  731,  777,
  522.       732,  683,  780,  733,  809,  795,  811,  812,  853,  828,
  523.       820,  854,  872,  873,  819,  895,  910, 1408,  920,  948,
  524.       891, 1467, 1012, 1521,  984, 1050, 1571,  640,  971, 1013,
  525.      1023,  922,  457,  522,  589, 3478,  615, 1124, 1141, 3477,
  526.      3414, 3525, 3481, 3480, 3479, 3469, 3477, 3476,    0, 3525,
  527.  
  528.      3475, 3474, 3473, 3472, 3471,  893,  441,  565,  597,  474,
  529.       750,  820, 1014,  684,  963, 1030, 1121,  978, 1030, 3448,
  530.      1625, 3420, 3446, 3418, 3425, 3399, 1046, 3440, 3412, 3453,
  531.         0, 3433, 3405, 3428, 3401,  716,  740,  862,  868,  905,
  532.      1051, 3418, 3392,  773, 1117,  398, 1683, 1181, 1161, 1209,
  533.      1225, 1333, 3449, 1036, 1146, 1747, 1415, 1268, 1335, 3448,
  534.      1805, 1337, 1442, 1042, 1170, 1073, 1166, 1480, 1190, 3444,
  535.      3525, 1309, 1100, 3452,  105, 3452,  408, 1202, 1024,  962,
  536.       661, 1191,  777,  949, 3450, 1097, 1237, 1204, 1498, 1277,
  537.      1270, 1208, 1859, 1173, 1322, 1314, 1302, 1067, 1415, 1283,
  538.  
  539.      1414, 1324,    0, 1376, 1211, 1397, 1418, 1399, 1006, 1910,
  540.      1506, 1562, 1436, 1494, 1518, 1974, 1584, 1462, 1505, 1687,
  541.      1600, 1583, 1622, 2038, 1551, 1710, 1651, 1574, 1365, 3525,
  542.      1015, 1122, 3443, 3525, 1693, 3442, 3441, 3378, 3377, 3431,
  543.      3430, 3429, 3429,  637, 3428,  399, 3427,  920, 1653, 1365,
  544.      3400, 3374, 3399, 3373,  758, 3395, 3369, 3407, 3379, 3392,
  545.      3366, 1183,    0, 1585, 1566,    0, 3525, 3398, 1614, 1738,
  546.      1646, 3371, 3396, 3369, 1443, 1246, 1369,    0, 3390, 3397,
  547.      3369, 3397, 3369, 3381, 3355, 3380, 3354, 1161, 3376, 3350,
  548.      3375, 3349, 1340, 3387, 3359,  885, 1049,  871, 1697, 3408,
  549.  
  550.      3402, 1697, 3525, 1792, 1811, 3401, 1734, 1829, 3400, 3525,
  551.      1703, 1897, 1916, 1961, 1708, 3345, 1870, 3404, 1748, 1764,
  552.      3356, 3342, 1726, 1589, 1143, 1822, 1377, 1228, 1422, 1764,
  553.      1508, 3402, 1510, 1791, 1846, 1790, 1818, 1715, 1819, 1798,
  554.      1938, 1517, 1886, 1835, 1839, 1621, 1578, 1854, 1795, 1926,
  555.      1980, 1982, 2051, 2056,  323, 1944, 1991, 2043, 2102, 2093,
  556.      2130, 1900, 1923, 3394, 1159, 3393, 3330, 3391, 3328, 3389,
  557.      3326, 3380, 1577, 3368, 3340, 3365, 3337, 2085, 3364, 3336,
  558.      3362, 3334, 3356, 3328, 1817, 2011, 3525, 3382, 2132, 1389,
  559.      2137, 3381, 1419, 3356, 3328, 3345, 3318, 3344, 3317, 3350,
  560.  
  561.      3322, 3347, 3319, 2107, 3346, 3318, 3340, 3312, 1881, 3366,
  562.      1235, 2083, 3525, 3364, 2177, 2167, 2169, 2176, 3358, 3357,
  563.      3525, 2206, 1645, 3349, 1959, 3349, 3302, 3296, 3359, 2047,
  564.      1537, 1686, 1538, 1906, 1287,  709, 3358, 1967, 2219, 2225,
  565.      1919, 2116, 2010, 2115, 1979, 2004, 2150, 2050, 2156, 2258,
  566.      2204, 2238, 2271, 1750, 3357, 2291, 2059, 3525, 3349, 3348,
  567.      3285, 3284, 3345, 3344, 3281, 3280, 3341, 3340, 3277, 3276,
  568.      3332, 3328, 3304, 3278, 3315, 3287, 1279, 3337, 3298, 3272,
  569.      3297, 3271, 3306, 3278, 2035, 3330, 2304, 2347, 2219, 2321,
  570.      3323, 1458, 3322, 1677, 3284, 1750, 3302, 3274, 3286, 3260,
  571.  
  572.      2242, 3302, 3274, 3236, 3201, 3229, 3192, 1319, 3233, 3185,
  573.      3110, 3137, 3100, 2255, 3143, 2394, 3525, 2303, 3525, 3127,
  574.      3525, 3123, 3048, 3036, 1873, 2032, 1964, 2091, 2067, 2079,
  575.      2095, 2179,  390, 1133, 2428, 2247, 2203, 2294, 2268, 2347,
  576.      2175, 2312, 2375, 2437, 2097, 3030, 2335, 3019, 2914, 2874,
  577.      2848, 2883, 2855, 1507, 3525, 2855, 2820, 2849, 2787, 2832,
  578.      1804, 2830, 1832, 3525, 2829, 2826, 2793, 2767, 2828, 2792,
  579.      2765, 2787, 2761, 2785, 2759, 1979,    0, 2782, 2756, 2780,
  580.      2754, 2787, 2759, 1894, 3525, 2780, 2753, 2805, 2160, 2810,
  581.      2745, 1265,  461, 2446, 2467, 2190, 2318, 2332, 2398, 2197,
  582.  
  583.      2343, 2358, 2809, 2356, 2792, 1557, 2767, 2741, 2764, 2737,
  584.      2255, 2799, 2392, 2791, 2790, 2792, 2753, 2727, 2765, 2737,
  585.      2455, 2761, 2733, 2745, 2719, 2533, 2757, 2729, 2741, 2714,
  586.      2737, 2701, 2328, 2460, 2757, 2755, 2758, 2691, 2687, 1431,
  587.      1304, 2741, 2605, 2369, 2232, 2391, 2737, 2469, 2736, 2295,
  588.      2368, 3525, 1996, 2713, 2685, 2709, 2673, 2677, 2651, 2424,
  589.      2427, 2677, 2442,    0, 2713, 2486, 2706, 2445, 3525, 2123,
  590.      2642, 2616, 1399, 1642, 2749, 2492, 2466, 2265, 2507, 2481,
  591.      2177, 2276, 2491, 2637, 2610, 2530, 2641, 2613, 2501, 2632,
  592.      2605, 2548, 2282, 2514, 2595, 2585, 1188, 1927, 2564, 2572,
  593.  
  594.      2609, 2579, 2558, 2633, 2527, 2528, 2576, 2544, 2533, 2503,
  595.      2481, 2422, 3525, 2454, 2412, 2400, 2374, 2532, 2546, 2405,
  596.      2369, 2406, 2532, 2538, 2369, 2334, 2338, 2299, 1641, 2377,
  597.      2595, 2633, 2224, 2194, 2575, 2302, 2165, 2081, 2090, 2053,
  598.      2065, 1983, 1976, 1911, 1924, 1865, 1816, 1755, 1748, 1698,
  599.      2594, 2602,    0, 2391, 1711, 1674, 1637, 1605, 1598, 1455,
  600.      1488, 1417, 1450, 1619, 2636, 2639,    0, 2630, 3525, 1378,
  601.      1328, 2438, 1337, 1278, 1156, 1071, 1028, 1056, 1022, 2544,
  602.      3525, 1056, 1027,  994,  990, 3525,  896,  912, 3525, 2470,
  603.      2655, 2631, 3525, 3525,  904,  879,  789,  705,  538, 3525,
  604.  
  605.       518,  365, 2126, 2637,  381,  307, 3525,  239, 2066, 2441,
  606.      2669, 2513, 2611, 3525, 2574, 2657, 2658, 2701, 2702, 2703,
  607.      2705, 2710, 2718, 2719, 2730, 2732, 2739, 2763, 2765, 2577,
  608.       171, 3525, 3525, 2834, 2844, 2854, 2864, 2874, 2881, 2891,
  609.      2901, 2910, 2920, 2930, 2940, 2950, 2960, 2970, 2980, 2990,
  610.      3000, 3010, 3020, 3030, 3040, 3050, 3060, 3070, 3080, 3090,
  611.      3094, 3104, 3114, 3124, 3134, 3144, 3154, 3164, 3174, 3184,
  612.      3194, 3204, 3214, 3224, 3234, 3244, 3254, 3264, 3274, 3284,
  613.      3294, 3304, 3314
  614.     } ;
  615.  
  616. static const short int yy_def[984] =
  617.     {   0,
  618.       933,  933,  933,  933,  934,  935,  933,  933,  934,  933,
  619.       934,  936,  934,  934,  934,  934,   13,  934,  934,  934,
  620.        13,  934,  934,  937,  934,   13,   25,   25,   25,   25,
  621.        25,   25,  934,  938,  933,  939,  939,  933,   38,  936,
  622.       939,  939,  939,  939,   41,  939,  939,  939,   41,  939,
  623.       939,  939,   41,   52,   52,   52,   52,   52,   52,  939,
  624.       938,  934,  940,  941,  940,  933,  933,  933,  933,  934,
  625.       933,  934,  933,  942,  942,  934,  933,   11,  933,  934,
  626.       936,  933,  933,  934,  933,  934,  933,  934,   86,  934,
  627.       934,  934,  934,  934,  934,  934,  934,  934,  934,  934,
  628.  
  629.       934,  934,   86,  934,  934,  933,  934,  934,  943,  937,
  630.       943,  944,  933,  934,  934,  933,  934,  934,  934,  934,
  631.       115,  933,  934,   86,   86,  934,  934,  934,  938,  945,
  632.       938,  933,  946,  939,  947,  939,  939,  947,  939,   48,
  633.       947,  939,  948,  939,  939,  947,  939,  145,  939,  939,
  634.       939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
  635.       939,  145,  939,  939,  939,  939,  939,  145,  947,  939,
  636.       939,  939,  939,  168,  947,  939,  145,  145,  939,  939,
  637.       939,  938,  949,  950,  950,  951,  952,  949,  949,  953,
  638.       954,  933,  933,  933,  933,  934,  934,  933,  934,  933,
  639.  
  640.       933,  933,  933,  934,  933,  933,  933,  933,  933,  933,
  641.       933,  933,  933,  934,  933,   86,  933,  934,  933,  934,
  642.       934,  934,  934,  934,  934,  934,  934,  934,  934,  934,
  643.       221,  934,  934,  934,  934,  933,  933,  933,  933,  933,
  644.       933,  934,  934,  955,  956,  957,  958,  934,  933,  934,
  645.       933,  933,  934,  934,  934,  933,  934,  933,  933,  934,
  646.       934,  934,  933,  934,  934,  256,  261,  221,  934,  934,
  647.       933,  938,  933,  946,  933,  947,  933,  939,  939,  939,
  648.       947,  939,  947,  948,  946,  959,  939,  145,  947,  939,
  649.       947,  939,  145,  939,  939,  939,  939,  939,  939,  939,
  650.  
  651.       939,  939,  293,  939,  939,  939,  939,  939,  939,  939,
  652.       939,  947,  939,  939,  939,  947,  310,  939,  310,  939,
  653.       947,  939,  939,  947,  310,  293,  939,  939,  938,  933,
  654.       952,  952,  960,  933,  949,  953,  953,  954,  954,  933,
  655.       933,  933,  934,  933,  933,  933,  933,  933,  933,  933,
  656.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  657.       933,  933,  934,  961,  933,  934,  933,  934,  221,  933,
  658.       934,  934,  934,  934,  934,  933,  934,  934,  934,  934,
  659.       934,  934,  934,  933,  933,  933,  933,  933,  933,  933,
  660.       933,  933,  933,  934,  934,  955,  955,  957,  956,  962,
  661.  
  662.       933,  933,  933,  934,  933,  933,  933,  933,  934,  933,
  663.       933,  934,  933,  934,  934,  934,  938,  933,  933,  933,
  664.       933,  933,  963,  939,  947,  947,  959,  959,  939,  947,
  665.       939,  947,  939,  293,  947,  939,  939,  939,  939,  939,
  666.       939,  939,  939,  939,  939,  939,  939,  939,  939,  947,
  667.       310,  947,  947,  947,  947,  939,  947,  310,  947,  310,
  668.       939,  939,  938,  960,  949,  964,  965,  966,  967,  968,
  669.       969,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  670.       933,  933,  933,  933,  933,  933,  933,  934,  934,  934,
  671.       933,  934,  933,  934,  934,  934,  934,  934,  934,  933,
  672.  
  673.       933,  933,  933,  933,  933,  933,  933,  933,  933,  934,
  674.       955,  956,  933,  962,  933,  933,  933,  933,  934,  933,
  675.       933,  933,  938,  933,  933,  933,  933,  933,  963,  963,
  676.       970,  971,  972,  973,  959,  959,  947,  939,  947,  310,
  677.       939,  939,  939,  939,  939,  939,  939,  939,  939,  947,
  678.       939,  947,  947,  947,  947,  947,  938,  933,  964,  964,
  679.       965,  965,  966,  966,  967,  967,  968,  968,  969,  969,
  680.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  681.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  682.       934,  934,  974,  933,  933,  933,  933,  933,  934,  934,
  683.  
  684.       934,  934,  934,  933,  933,  933,  933,  933,  933,  933,
  685.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  686.       933,  933,  933,  933,  970,  970,  971,  971,  972,  972,
  687.       973,  973,  959,  959,  947,  939,  939,  939,  939,  939,
  688.       939,  939,  947,  947,  947,  947,  938,  933,  933,  933,
  689.       933,  933,  933,  933,  933,  933,  933,  933,  933,  975,
  690.       933,  933,  933,  933,  974,  974,  933,  933,  933,  933,
  691.       933,  933,  933,  934,  934,  934,  934,  934,  934,  933,
  692.       933,  933,  933,  933,  933,  933,  933,  976,  933,  933,
  693.       933,  959,  959,  947,  947,  947,  939,  939,  939,  939,
  694.  
  695.       939,  939,  947,  938,  933,  933,  933,  933,  933,  933,
  696.       933,  933,  933,  975,  975,  933,  933,  933,  933,  933,
  697.       933,  933,  933,  933,  933,  977,  934,  934,  933,  933,
  698.       933,  933,  933,  933,  976,  976,  933,  933,  933,  959,
  699.       959,  947,  978,  939,  939,  938,  933,  933,  933,  933,
  700.       933,  933,  933,  933,  933,  933,  933,  933,  933,  979,
  701.       979,  977,  762,  934,  933,  933,  933,  933,  933,  933,
  702.       933,  933,  959,  959,  978,  980,  775,  939,  938,  933,
  703.       933,  933,  933,  933,  933,  933,  933,  933,  979,  762,
  704.       762,  933,  933,  933,  933,  933,  959,  959,  980,  980,
  705.  
  706.       775,  775,  938,  933,  933,  933,  933,  933,  933,  933,
  707.       933,  933,  933,  933,  933,  933,  933,  979,  979,  762,
  708.       762,  933,  933,  933,  933,  933,  933,  933,  959,  959,
  709.       980,  980,  775,  775,  938,  933,  933,  933,  933,  933,
  710.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  711.       979,  979,  762,  933,  933,  933,  933,  933,  933,  933,
  712.       981,  933,  982,  959,  980,  980,  775,  938,  933,  933,
  713.       933,  933,  933,  933,  933,  933,  933,  933,  933,  979,
  714.       933,  933,  933,  933,  981,  933,  933,  982,  933,  959,
  715.       980,  938,  933,  933,  933,  933,  933,  933,  933,  933,
  716.  
  717.       933,  933,  959,  938,  933,  933,  933,  933,  959,  938,
  718.       933,  983,  933,  933,  983,  983,  983,  983,  983,  983,
  719.       983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
  720.       933,  933,    0,  933,  933,  933,  933,  933,  933,  933,
  721.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  722.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  723.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  724.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  725.       933,  933,  933
  726.     } ;
  727.  
  728. static const short int yy_nxt[3598] =
  729.     {   0,
  730.         4,    4,    4,    4,    4,    4,    4,    5,    6,    4,
  731.         7,    8,    5,    4,    4,    9,   10,   11,   11,   11,
  732.         4,   12,    4,    5,   13,   14,   15,    5,    5,   16,
  733.         5,    5,    5,   17,    5,   18,   17,   19,   20,   17,
  734.        21,   22,    5,    5,   23,    5,    5,   24,    4,    4,
  735.        25,   26,   27,   28,   29,   30,   31,   32,    5,   17,
  736.         5,   18,   17,   33,   20,   21,   22,    5,    5,   23,
  737.        34,    4,    4,    4,    4,    4,    4,   35,   35,    5,
  738.         6,    4,    7,    8,   36,    4,    4,   37,   38,   39,
  739.        39,   39,    4,   40,    4,   36,   41,   42,   43,   36,
  740.  
  741.        36,   44,   36,   36,   36,   45,   36,   46,   45,   47,
  742.        48,   45,   49,   50,   36,   36,   51,   36,   36,   24,
  743.         4,    4,   52,   53,   54,   55,   56,   57,   58,   59,
  744.        36,   45,   36,   46,   45,   60,   48,   49,   50,   36,
  745.        36,   51,   61,    4,   64,   67,   68,   69,   91,   93,
  746.        62,   65,   65,   65,   65,   65,   70,  118,   71,   72,
  747.        95,  421,  119,  135,   73,   74,   74,   75,  118,  422,
  748.       119,   62,  119,  932,   94,   92,   76,   74,   77,   78,
  749.        78,   78,   78,   78,   79,   97,   96,   62,   80,   62,
  750.        62,   62,   62,   62,   62,   62,   62,   80,   62,   62,
  751.  
  752.        80,   62,   80,   80,   80,   62,   62,   62,   62,   62,
  753.        62,  933,   98,   99,   80,   80,   80,   80,   80,   80,
  754.        80,   80,   62,   80,   62,   62,   80,   62,   80,   80,
  755.        62,   62,   62,   62,   74,   74,   74,  104,  100,   85,
  756.        82,  143,   62,  933,   95,  190,   74,  277,   78,   78,
  757.        78,   78,   78,  118,  127,  171,  119,   80,  119,  118,
  758.       172,  281,  105,  119,  106,  119,   80,  102,   62,   80,
  759.        96,   80,   80,   80,   62,  101,  101,  101,  101,  101,
  760.       101,  101,  101,   80,   80,   80,   80,   80,   80,   80,
  761.        80,  107,   80,  861,  103,   80,   91,   80,   80,   83,
  762.  
  763.        62,  150,  171,  130,  172,  128,  172,  191,   84,  193,
  764.        85,  194,   86,   86,   86,   93,   87,  195,  108,  119,
  765.       130,  186,  187,  126,  172,  277,  118,  119,  179,  119,
  766.        88,   62,  555,  131,  131,  131,  131,  131,  196,  197,
  767.        94,   84,   62,  205,  135,  206,   89,   89,   89,   89,
  768.        89,   89,   89,   89,  150,  135,   90,  109,  110,  110,
  769.       110,  109,  109,  109,  109,  109,  109,  109,  109,  111,
  770.       109,  109,  132,   74,  911,  152,   69,  109,  109,  109,
  771.        62,  151,  134,   62,  933,  136,  933,   71,  137,  132,
  772.       135,  933,   82,  138,   62,   62,  135,   62,  171,  158,
  773.  
  774.       153,  172,  399,  172,  109,  113,  109,  135,  135,  423,
  775.       135,  423,  154,  156,  205,  161,  206,  134,  244,   74,
  776.        74,   74,  134,  911,  159,  908,  154,  109,  109,  114,
  777.       163,   74,  106,  115,  115,  115,   62,  116,  155,  152,
  778.       157,  171,  162,  134,  692,  172,  400,  172,  134,  135,
  779.       171,  172,  155,  172,  113,  164,  221,  221,  221,  165,
  780.       285,  286,  117,   82,  153,  184,  330,  118,  119,  118,
  781.       118,  118,  118,  118,  118,  120,  231,  231,  231,  121,
  782.       121,  121,  351,  122,  184,   62,  166,  257,  257,  257,
  783.       180,  188,  188,  188,  188,  188,  189,  356,  135,  214,
  784.  
  785.       214,  214,  214,  214,  214,  214,  214,  352,  123,  268,
  786.       268,  268,   62,  124,  125,  124,  125,  125,  125,  125,
  787.       125,   74,   74,   75,  357,  135,  688,   62,  741,  277,
  788.       186,  331,  139,   74,   77,  140,  140,  140,  140,  140,
  789.       141,  181,  283,  134,  142,  134,  134,  134,  134,  134,
  790.       134,  134,  134,  142,  134,  134,  142,  134,  142,  142,
  791.       142,  134,  134,  134,  134,  134,  134,  221,  221,  221,
  792.       142,  142,  142,  142,  142,  142,  142,  142,  134,  142,
  793.       134,  134,  142,  134,  142,  142,  134,  134,  134,  134,
  794.        83,  257,  257,  257,   62,   62,  130,  186,  331,  144,
  795.  
  796.       907,   85,  353,  145,  145,  145,  182,  146,  135,  131,
  797.       131,  131,  131,  131,   74,   74,   74,  233,  293,  293,
  798.       293,  147,   62,  333,  334,  201,   74,  202,  354,  224,
  799.       278,  279,  144,  203,  355,  135,  130,  148,  148,  148,
  800.       148,  148,  148,  148,  148,  466,   62,  149,   62,  131,
  801.       131,  131,  131,  131,  272,   85,  326,  326,  326,  135,
  802.       355,  135,  292,  277,  425,  132,  215,  215,  215,  215,
  803.       215,  215,  215,  215,  219,  219,  219,  219,  219,  219,
  804.       219,  219,  248,  248,  248,  248,  248,  248,  248,  248,
  805.        62,  160,  160,  160,  160,  160,  160,  160,  160,   62,
  806.  
  807.       363,  363,  363,  135,  167,  132,  297,  467,  168,  168,
  808.       168,   82,  169,  256,  256,  256,  256,  256,  256,  256,
  809.       256,  119,  119,  119,  119,  119,  119,  119,  119,  261,
  810.       261,  261,  261,  261,  261,  261,  261,  170,   62,   62,
  811.        62,  907,  171,  172,  171,  171,  171,  171,  171,  171,
  812.       173,  135,  135,  135,  174,  174,  174,  384,  175,  266,
  813.       266,  266,  266,  266,  266,  266,  266,  267,  267,  267,
  814.       267,  267,  267,  267,  267,  634,  299,  386,  358,  277,
  815.       426,  294,  385,  176,   62,  397,  296,   62,  177,  178,
  816.       177,  178,  178,  178,  178,  178,  207,  135,   62,  478,
  817.  
  818.       135,  208,   62,  387,  295,  359,  280,  209,  210,   62,
  819.       211,  135,   62,  212,  277,  135,   62,  213,   62,   62,
  820.       282,  113,  135,  207,  478,  135,   62,   62,  208,  135,
  821.       298,  135,  135,  209,  210,   62,  211,  300,  212,  135,
  822.       135,  906,  213,  216,  303,  303,  303,  360,  135,  302,
  823.       308,  217,  287,  287,  287,  287,  287,  287,  287,  287,
  824.        62,  304,  291,  291,  291,  291,  291,  291,  291,  291,
  825.       293,  293,  293,  135,  361,  399,  216,  299,  301,   62,
  826.        62,  218,  218,  218,  218,  218,  218,  218,  218,  236,
  827.       280,  389,  135,  135,  237,  306,  349,  397,   62,  388,
  828.  
  829.       238,  239,   62,  211,  905,  350,  240,  317,  317,  317,
  830.       241,  135,  660,  350,  889,  135,  236,   62,  390,  400,
  831.       305,  237,  277,  307,  130,  388,  238,  239,  468,  211,
  832.       135,  240,  391,  113,  329,  241,  109,  110,  110,  110,
  833.       109,  109,  109,  109,  109,  109,  109,  109,  109,  109,
  834.       109,  285,  286,  309,  902,   62,  109,  109,  109,  392,
  835.       310,  310,  310,  310,  310,  310,  310,  310,  135,   62,
  836.       316,  316,  316,  316,  316,  316,  316,  316,   62,  364,
  837.       364,  364,  135,  109,  113,  109,  277,  317,  317,  317,
  838.       469,  135,  886,  132,  366,  366,  366,  901,  172,  172,
  839.  
  840.       172,  172,  172,  172,  172,  172,  109,  109,  109,  245,
  841.       245,  245,  246,   62,  109,  109,  109,  109,  109,   62,
  842.        62,  109,  109,  333,  334,  296,  135,  344,  109,  109,
  843.        62,   62,  135,  135,  324,  324,  324,  324,  324,  324,
  844.       324,  324,   62,  135,  135,  362,  367,  367,  367,  376,
  845.       933,  362,  404,  404,  404,  109,  113,   62,  412,  412,
  846.       412,  511,  319,  319,  319,  319,  319,  319,  319,  319,
  847.       135,  377,  362,  449,   62,   62,  328,  362,  109,  109,
  848.       249,  900,  393,  900,  250,  899,  280,  135,  393,  413,
  849.       413,  413,  251,  898,  252,  813,  253,  113,  377,   82,
  850.  
  851.       325,  325,  325,  325,  325,  325,  325,  325,  253,  393,
  852.       418,  253,  253,  813,  393,  419,  420,  250,  245,  245,
  853.       245,  246,  254,  255,  254,  254,  254,  254,  254,  254,
  854.       933,  334,  184,  330,  253,   82,  440,  253,  258,  188,
  855.       188,  188,  188,  188,  189,  277,  257,  257,  257,  184,
  856.       330,  531,  259,  427,  260,  403,  335,  335,  335,  335,
  857.       335,  428,  404,  404,  404,  113,  260,  184,  558,  260,
  858.       260,  365,  365,  365,  365,  365,  365,  365,  365,  403,
  859.        62,  260,  414,  414,  414,  401,  412,  412,  412,  258,
  860.        82,  693,  260,  135,  348,  260,  262,  401,   62,  410,
  861.  
  862.       401,  401,  504,  259,  263,  260,  366,  366,  366,   62,
  863.       897,  135,  401,  532,  424,   62,  134,  260,   62,  485,
  864.       260,  260,  135,  401,  135,  437,  401,  504,  135,  262,
  865.        82,  135,  260,  433,  264,  265,  264,  264,  264,  264,
  866.       264,  264,  258,  260,   62,  485,  260,  511,  829,  134,
  867.       268,  268,  268,  429,  429,  429,  259,  135,  260,  254,
  868.       254,  254,  254,  254,  254,  254,  254,   82,  740,  445,
  869.       260,  493,  277,  260,  260,  402,  402,  402,  402,  402,
  870.       402,  402,  402,  617,   62,  269,  432,  432,  432,   82,
  871.        62,  536,  406,  431,  431,  431,  260,  135,  493,  260,
  872.  
  873.        74,   74,   74,  135,  406,  896,   82,  406,  406,   62,
  874.       442,  130,   74,  933,  140,  140,  140,  140,  140,  406,
  875.       578,   62,  135,  142,  417,  417,  417,  417,  417,   62,
  876.       406,   62,  142,  406,  135,  142,  443,  142,  142,  142,
  877.       895,  249,  135,  258,  135,  578,  440,  438,  633,  142,
  878.       142,  142,  142,  142,  142,  142,  142,  401,  142,  406,
  879.       609,  142,  774,  142,  142,   62,  439,  130,  472,  401,
  880.       288,  406,  401,  401,  406,  406,  509,  463,  289,   82,
  881.       132,  473,  893,   62,  401,  609,  406,  264,  264,  264,
  882.       264,  264,  264,  264,  264,  401,  135,  406,  401,  494,
  883.  
  884.       406,   82,  509,  288,   62,  893,   62,  444,  290,  290,
  885.       290,  290,  290,  290,  290,  290,  249,  135,  376,  135,
  886.       311,   62,   62,  407,  592,   62,  495,  535,  312,   62,
  887.       252,  446,  313,   82,  135,  135,  132,  408,  135,  409,
  888.       441,  448,  135,   62,  313,  403,  491,  313,  313,  597,
  889.       592,  409,  889,  311,  409,  409,  135,  797,  314,  315,
  890.       314,  314,  314,  314,  314,  314,  409,  441,  442,   62,
  891.       313,  410,  887,  313,   62,  258,  598,  409,  447,  492,
  892.       409,   97,  135,  317,  317,  317,  773,  135,  407,  259,
  893.       886,  318,  411,  411,  411,  411,  411,  411,  411,  411,
  894.  
  895.       277,   62,  408,  318,  409,  492,  318,  318,   98,  884,
  896.       451,  451,  451,   62,  135,   62,  409,   62,  318,  409,
  897.       409,  429,  429,  429,   62,   62,  135,  403,  135,  318,
  898.       135,  415,  318,  320,  451,  451,  451,  135,  135,  277,
  899.       277,  321,  409,  538,  711,  409,  626,  630,  430,  430,
  900.       430,  430,  430,  430,  430,  430,  314,  314,  314,  314,
  901.       314,  314,  314,  314,  277,  470,  320,  460,  460,  460,
  902.       711,  322,  323,  322,  322,  322,  322,  322,  322,  258,
  903.       571,   62,  487,  487,  487,   62,  462,  326,  326,  326,
  904.        62,  572,  407,  259,  135,  318,   62,  370,  135,  458,
  905.  
  906.       458,  458,  277,  135,  280,  370,  408,  318,  456,  135,
  907.       318,  318,  450,  450,  450,  450,  450,  450,  450,  450,
  908.       456,   82,  327,  456,  456,  884,   62,  471,   62,   62,
  909.       370,  403,  548,  318,  933,  456,  318,  369,  458,  458,
  910.       458,  135,  135,   82,   82,  370,  456,  130,  547,  456,
  911.       457,  457,  457,  457,  457,  457,  457,  457,   62,   62,
  912.       410,  470,  489,  489,  489,  350,  883,  431,  431,  431,
  913.       369,  135,  882,  350,  890,  371,  371,  371,  371,  371,
  914.       371,  371,  371,  109,  245,  245,  245,  246,  277,  109,
  915.       109,  109,  109,  109,   62,  863,  109,  109,  512,  512,
  916.  
  917.       512,  184,  330,  109,  109,  798,  667,  135,  465,  465,
  918.       465,  465,  465,  516,  516,  516,  622,  521,  407,  522,
  919.       522,  522,   62,  471,  489,  489,  489,  530,  277,  530,
  920.       109,  113,  408,  668,  456,  135,  881,  322,  322,  322,
  921.       322,  322,  322,  322,  322,  513,  456,  881,  541,  456,
  922.       456,   69,  277,  109,  109,  258,  879,  628,  520,  646,
  923.       524,  461,   71,  405,  405,  405,  277,  525,   73,  259,
  924.       520,  406,  456,  520,  520,  456,  526,  670,   77,  878,
  925.       537,  537,  537,  406,   79,  520,  406,  406,  486,  486,
  926.       486,  486,  486,  486,  486,  486,  520,   62,  406,  520,
  927.  
  928.       517,  491,   62,  134,  671,   62,  540,  540,  540,  406,
  929.       135,  135,  406,  258,  518,  135,  519,  877,  135,  407,
  930.       585,  363,  363,  363,  277,   62,   62,  259,  519,  260,
  931.       533,  519,  519,  408,  542,  520,  134,  407,  135,  135,
  932.       716,  260,   62,  519,  260,  260,   62,  520,  277,  549,
  933.       520,  520,  876,  520,  519,  135,  260,  519,  586,  135,
  934.       542,   62,  520,  717,  545,  520,  716,  260,  520,  520,
  935.       260,  434,  130,  520,  135,  277,  520,  538,  541,  435,
  936.       520,  549,  626,  586,  614,  523,  523,  523,  523,  523,
  937.       718,  520,  534,   62,  520,  546,  539,  539,  539,  539,
  938.  
  939.       539,  539,  539,  539,  434,  517,  135,   62,  277,  436,
  940.       436,  436,  436,  436,  436,  436,  436,   62,  258,  518,
  941.       135,  519,  615,  280,  407,  130,   62,  875,  277,   82,
  942.       135,  733,  259,  519,  318,  557,  519,  519,  408,  135,
  943.       520,  132,  550,  550,  550,   62,  318,  615,  519,  318,
  944.       318,   62,  520,  521,  637,  520,  520,  733,  135,  519,
  945.       874,  318,  519,  280,  135,  873,  277,  520,  543,  407,
  946.       588,  201,  318,  202,   62,  318,  277,  632,  520,  203,
  947.       637,  520,  452,  408,  277,  409,   62,  135,  517,  830,
  948.       453,  453,  453,  277,  132,  544,  454,  409,  455,  135,
  949.  
  950.       409,  409,  518,  873,  551,  677,  455,  556,  556,  556,
  951.       455,   62,  409,  455,  455,  640,  551,   62,  455,  551,
  952.       551,  455,  455,  409,  135,  455,  409,  587,  587,  587,
  953.       135,  551,  677,  455,  277,  628,  455,  638,  783,  455,
  954.       277,  626,  551,  660,  455,  551,  452,  455,  530,  277,
  955.       530,  517,  872,  277,  459,  459,  459,   62,  277,  552,
  956.       454,  130,  455,  783,  452,  518,  640,  551,   82,  277,
  957.       135,  647,  661,  553,  455,  554,  630,  455,  455,  551,
  958.       455,  277,  551,  551,  512,  512,  512,  554,  630,  455,
  959.       554,  554,  455,  277,  551,  455,  455,  277,  661,  277,
  960.  
  961.       455,  407,  554,  455,  277,  551,  703,  455,  551,  872,
  962.       552,  642,  577,  554,  871,  408,  554,  456,  455,  491,
  963.       863,  455,   62,   62,  553,  870,  554,  578,   82,  456,
  964.       132,  513,  456,  456,  608,  135,  135,   62,  554,  521,
  965.       589,  554,  554,  869,  456,  593,  540,  540,  540,  609,
  966.       135,  577,  578,  554,  590,  456,  591,   62,  456,  616,
  967.       594,  595,  628,   62,  554,  794,  632,  554,  591,  639,
  968.       135,  591,  591,  608,  609,  517,  135,  596,  618,  618,
  969.       618,  277,   62,  591,  517,  641,  909,  594,  595,  518,
  970.       794,  620,  277,  620,  591,  135,  737,  591,  701,  742,
  971.  
  972.       620,  869,  596,  620,   62,  620,  620,  620,  620,  620,
  973.        62,   62,  620,  621,  517,  620,  620,  135,  620,  806,
  974.       620,  277,  737,  135,  135,  619,  156,  620,  518,  620,
  975.       620,  620,  620,  589,  620,  635,  635,  635,  620,   62,
  976.       277,  620,  620,  662,  806,  620,  620,  590,  867,  636,
  977.       632,  867,  135,  157,   62,  662,  664,  620,  662,  662,
  978.       277,  636,  554,  688,  636,  636,  643,  135,  620,  676,
  979.       662,  620,   62,  277,  554,   62,  636,  554,  554,  552,
  980.       644,  662,  645,  677,  662,  135,  778,  636,  135,  554,
  981.       636,  749,  689,  277,  645,  554,  676,  645,  645,  643,
  982.  
  983.       554,   62,  862,  554,  618,  618,  618,  554,  677,  645,
  984.       554,  554,  589,  644,  135,  645,  807,  749,  689,   62,
  985.       645,  782,  554,  645,  824,   62,  590,  645,  662,  589,
  986.       645,  645,  135,  554,  698,  697,  554,  130,  135,   62,
  987.       662,  808,  645,  662,  662,  662,  805,  704,  782,  824,
  988.        62,  619,  135,  645,   62,  662,  645,  662,  130,  743,
  989.       662,  662,  702,  135,  767,   62,  662,  135,  746,  662,
  990.       207,  805,  662,  663,  699,  208,   62,  277,  135,   82,
  991.       864,  209,  210,  662,  211,  744,  662,  212,  700,  135,
  992.       767,  213,  861,  130,  752,  860,  778,  207,  743,  645,
  993.  
  994.       663,  699,  208,  779,  859,   62,  132,  209,  210,  854,
  995.       211,  645,  212,  700,  645,  645,  213,  236,  135,  751,
  996.       663,  752,  237,  853,  700,  745,  645,  132,  238,  239,
  997.       277,  211,  853,  752,  240,  823,  694,  645,  241,  277,
  998.       645,  850,  849,  912,  236,  643,  751,  663,  277,  237,
  999.       695,  700,  696,  789,  238,  239,  789,  211,  752,  240,
  1000.       823,  645,  132,  241,  696,  790,  848,  696,  696,  277,
  1001.       696,  769,   82,  645,  894,  694,  645,  645,  594,  696,
  1002.       789,  847,  696,  789,  846,  696,  696,  768,  645,  801,
  1003.       696,  696,  791,  696,  277,  596,  751,  696,  769,  645,
  1004.  
  1005.       894,  769,  645,  696,  804,  594,  696,  696,  696,  130,
  1006.       752,  696,  132,  768,  768,  916,  802,  845,  696,  803,
  1007.       596,  800,  809,  751,  818,  805,  769,  769,  903,  696,
  1008.       789,  804,  696,  761,  761,  752,  761,  761,  761,  761,
  1009.       768,  761,  761,  761,  761,  825,  761,  761,  800,  810,
  1010.       805,  819,  769,  761,  761,  761,  813,  789,  837,  839,
  1011.       130,  789,  763,  855,  844,  814,  277,  851,  843,  857,
  1012.       835,  822,  826,  789,  277,  789,  916,  130,  132,  916,
  1013.       761,  761,  761,  813,  271,  838,  840,  868,  789,  763,
  1014.       856,  815,  823,  800,  842,  831,  858,  277,  822,  841,
  1015.  
  1016.       789,  800,  789,  761,  761,  761,  761,  852,  761,  761,
  1017.       761,  761,  762,  761,  761,  761,  761,  823,  761,  761,
  1018.       800,  880,  832,  789,  800,  776,  761,  761,  800,  132,
  1019.       865,  789,  130,  130,  777,  277,  836,  914,  277,  130,
  1020.       834,  277,  892,  904,  833,  271,  132,  828,  931,  910,
  1021.       789,  800,  761,  761,  761,  827,  880,  277,  789,  916,
  1022.       916,  777,  800,  891,  914,  800,  821,  820,  800,  917,
  1023.       918,  817,  816,  812,  811,  761,  761,  761,  761,  796,
  1024.       761,  761,  761,  761,  800,  761,  761,  761,  761,  800,
  1025.       761,  761,  800,  891,  866,  800,  913,  761,  761,  761,
  1026.  
  1027.       795,  132,  132,  916,  916,  916,  763,  916,  132,  793,
  1028.       914,  800,  916,  919,  920,  921,  792,  922,  788,  787,
  1029.       916,  916,  923,  913,  761,  761,  761,  786,  271,  271,
  1030.       924,  925,  916,  763,  916,  914,  786,  785,  784,  781,
  1031.       780,  916,  926,  277,  927,  772,  771,  761,  761,  761,
  1032.       761,  928,  761,  761,  761,  761,  762,  761,  761,  761,
  1033.       761,  770,  761,  761,  736,  916,  736,  916,  766,  776,
  1034.       761,  761,  271,  271,  271,  929,  271,  930,  777,  766,
  1035.       765,  271,  765,  764,  764,  760,  760,  759,  758,  271,
  1036.       271,  757,  756,  755,  754,  753,  761,  761,  761,  715,
  1037.  
  1038.       715,  271,  750,  271,  748,  777,  748,  747,  747,  649,
  1039.       271,  277,  739,  738,  736,  734,  734,  732,  731,  761,
  1040.       761,  730,  729,  728,  727,  726,  726,  725,  724,  723,
  1041.       722,  721,  720,  719,  271,  666,  271,   62,  666,  664,
  1042.        62,  715,   62,   62,   63,   63,   63,   63,   63,  713,
  1043.        63,   63,   63,   63,   81,   81,   81,   81,   81,   81,
  1044.        81,   81,   81,   81,  112,  112,  112,  112,  112,  112,
  1045.       112,  112,  112,  112,  129,  129,  129,  129,  129,  129,
  1046.       129,  129,  129,  129,  134,  713,  712,  134,  134,  134,
  1047.       134,  183,  183,  183,  183,  183,  712,  183,  183,  183,
  1048.  
  1049.       183,  185,  185,  185,  185,  185,  185,  185,  185,  185,
  1050.       185,  200,  200,  710,  709,  708,  707,  706,  200,  200,
  1051.       109,  109,  109,  109,  109,  109,  109,  109,  109,  109,
  1052.       247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
  1053.       130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
  1054.       274,  274,  274,  274,  274,  274,  274,  274,  274,  274,
  1055.       276,  276,  276,  276,  276,  276,  276,  276,  276,  276,
  1056.       284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
  1057.       183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
  1058.       185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
  1059.  
  1060.       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
  1061.       332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
  1062.       336,  336,  705,  336,  336,  336,  336,  336,  336,  336,
  1063.       338,  338,  277,  338,  338,  338,  338,  338,  338,  338,
  1064.       396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
  1065.       109,  109,  109,  109,  109,  109,  109,  109,  109,  109,
  1066.       398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
  1067.       247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
  1068.        81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
  1069.       464,  464,  464,  464,  691,  464,  464,  464,  464,  464,
  1070.  
  1071.       486,  486,  690,  486,  514,  514,  514,  514,  514,  514,
  1072.       514,  514,  514,  514,  529,  529,  529,  529,  529,  529,
  1073.       529,  529,  529,  529,  559,  559,  273,  559,  559,  559,
  1074.       559,  559,  559,  559,  561,  561,  621,  561,  561,  561,
  1075.       561,  561,  561,  561,  563,  563,  614,  563,  563,  563,
  1076.       563,  563,  563,  563,  565,  565,  687,  565,  565,  565,
  1077.       565,  565,  565,  565,  567,  567,  686,  567,  567,  567,
  1078.       567,  567,  567,  567,  569,  569,  685,  569,  569,  569,
  1079.       569,  569,  569,  569,  625,  625,  625,  625,  625,  625,
  1080.       625,  625,  625,  625,  627,  627,  627,  627,  627,  627,
  1081.  
  1082.       627,  627,  627,  627,  629,  629,  629,  629,  629,  629,
  1083.       629,  629,  629,  629,  631,  631,  631,  631,  631,  631,
  1084.       631,  631,  631,  631,  665,  665,  685,  665,  665,  665,
  1085.       665,  665,  665,  665,  714,  714,  684,  714,  714,  714,
  1086.       714,  714,  714,  714,  735,  735,  683,  735,  735,  735,
  1087.       735,  735,  735,  735,  762,  762,  682,  762,  762,  762,
  1088.       762,  762,  762,  762,  775,  775,  681,  775,  775,  775,
  1089.       775,  775,  775,  775,  761,  761,  680,  761,  761,  761,
  1090.       761,  761,  761,  761,  799,  799,  799,  799,  799,  799,
  1091.       799,  799,  799,  799,  885,  885,  885,  885,  885,  885,
  1092.  
  1093.       885,  885,  885,  885,  888,  888,  888,  888,  888,  888,
  1094.       888,  888,  888,  888,  915,  915,  915,  915,  915,  915,
  1095.       915,  915,  915,  915,  679,  678,  675,  674,  673,  672,
  1096.       669,  666,  664,  585,  659,  658,  657,  656,  655,  655,
  1097.       654,  653,  652,  651,  650,  649,  648,  570,  570,  568,
  1098.       568,  566,  566,  564,  564,  562,  562,  560,  560,  277,
  1099.       277,  277,  624,  623,  205,  198,  521,  621,  515,  616,
  1100.       613,  612,  611,  610,  607,  606,  605,  604,  603,  602,
  1101.       601,  601,  600,  599,  491,  588,  584,  583,  582,  581,
  1102.       580,  579,  576,  575,  574,  573,  473,  570,  568,  566,
  1103.  
  1104.       564,  562,  560,  187,  277,  528,  527,   66,  199,  521,
  1105.       410,  403,  515,  510,  510,  508,  507,  506,  505,  503,
  1106.       502,  501,  500,  499,  498,  497,  496,  199,  490,  490,
  1107.       488,  488,  484,  483,  482,  481,  480,  479,  477,  476,
  1108.       475,  474,  205,  205,  199,  198,  198,  198,  339,  339,
  1109.       337,  337,  187,  275,  277,  275,  416,  410,  403,  395,
  1110.       394,  383,  382,  381,  380,  379,  378,  378,  375,  375,
  1111.       374,  373,  372,  368,  348,  348,  347,  346,  345,  344,
  1112.       344,  343,  342,  341,  340,  339,  337,  330,  277,  275,
  1113.       273,  271,  199,  270,  113,  243,  242,  235,  234,  232,
  1114.  
  1115.       199,  230,  229,  228,  227,  227,  226,  225,  224,  223,
  1116.       222,  220,   82,  205,  204,  198,  199,  198,  192,  184,
  1117.       133,   82,   66,  933,    3,  933,  933,  933,  933,  933,
  1118.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1119.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1120.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1121.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1122.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1123.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1124.       933,  933,  933,  933,  933,  933,  933
  1125.  
  1126.     } ;
  1127.  
  1128. static const short int yy_chk[3598] =
  1129.     {   0,
  1130.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  1131.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  1132.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  1133.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  1134.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  1135.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  1136.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  1137.         1,    1,    2,    2,    2,    2,    2,    2,    2,    2,
  1138.         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
  1139.         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
  1140.  
  1141.         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
  1142.         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
  1143.         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
  1144.         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
  1145.         2,    2,    2,    2,    6,    8,    8,    9,   14,   15,
  1146.        36,    6,    6,    6,    6,    6,    9,   32,    9,    9,
  1147.        16,  275,   32,   36,    9,   10,   10,   10,   29,  275,
  1148.        29,   10,   29,  931,   15,   14,   10,   10,   10,   10,
  1149.        10,   10,   10,   10,   10,   18,   16,   10,   10,   10,
  1150.        10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
  1151.  
  1152.        10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
  1153.        10,   17,   18,   19,   10,   10,   10,   10,   10,   10,
  1154.        10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
  1155.        10,   10,   10,   10,   11,   11,   11,   22,   19,   20,
  1156.        40,   40,   17,   21,   31,   66,   11,  138,   11,   11,
  1157.        11,   11,   11,   30,   33,   59,   30,   11,   30,   31,
  1158.        59,  138,   22,   31,   23,   31,   11,   21,   17,   11,
  1159.        31,   11,   11,   11,   21,   20,   20,   20,   20,   20,
  1160.        20,   20,   20,   11,   11,   11,   11,   11,   11,   11,
  1161.        11,   23,   11,  908,   21,   11,   27,   11,   11,   13,
  1162.  
  1163.        21,   54,   56,  129,   56,   33,   56,   66,   13,   69,
  1164.        13,   69,   13,   13,   13,   28,   13,   69,   23,   27,
  1165.        34,   64,   64,   27,   54,  455,   28,   28,   54,   28,
  1166.        13,   42,  455,   34,   34,   34,   34,   34,   70,   70,
  1167.        28,   13,   43,   77,   42,   77,   13,   13,   13,   13,
  1168.        13,   13,   13,   13,   42,   43,   13,   24,   24,   24,
  1169.        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
  1170.        24,   24,  129,   39,  906,   43,   37,   24,   24,   24,
  1171.        37,   42,   39,   44,   39,   37,   45,   37,   37,   34,
  1172.        39,   49,  633,   37,   47,   50,   44,   46,   57,   47,
  1173.  
  1174.        43,   57,  246,   57,   24,   24,   24,   47,   50,  277,
  1175.        46,  277,   44,   46,  346,   49,  346,   45,  111,   74,
  1176.        74,   74,   49,  905,   47,  902,   58,   24,   24,   25,
  1177.        50,   74,   51,   25,   25,   25,   51,   25,   44,   55,
  1178.        46,   58,   49,   45,  633,   58,  246,   58,   49,   51,
  1179.        55,   55,   58,   55,  111,   50,   89,   89,   89,   51,
  1180.       143,  143,   25,  693,   55,  183,  183,   25,   25,   25,
  1181.        25,   25,   25,   25,   25,   26,  101,  101,  101,   26,
  1182.        26,   26,  207,   26,   65,   60,   51,  118,  118,  118,
  1183.        60,   65,   65,   65,   65,   65,   65,  210,   60,   84,
  1184.  
  1185.        84,   84,   84,   84,   84,   84,   84,  207,   26,  125,
  1186.       125,  125,  134,   26,   26,   26,   26,   26,   26,   26,
  1187.        26,   38,   38,   38,  210,  134,  901,   38,  693,  141,
  1188.       184,  184,   38,   38,   38,   38,   38,   38,   38,   38,
  1189.        38,   60,  141,   38,   38,   38,   38,   38,   38,   38,
  1190.        38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
  1191.        38,   38,   38,   38,   38,   38,   38,  103,  103,  103,
  1192.        38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
  1193.        38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
  1194.        41,  126,  126,  126,   41,  142,   61,  185,  185,   41,
  1195.  
  1196.       899,   41,  208,   41,   41,   41,   61,   41,  142,   61,
  1197.        61,   61,   61,   61,   75,   75,   75,  103,  148,  148,
  1198.       148,   41,  136,  187,  187,   75,   75,   75,  208,  126,
  1199.       136,  136,   41,   75,  209,  136,  131,   41,   41,   41,
  1200.        41,   41,   41,   41,   41,  344,  147,   41,   48,  131,
  1201.       131,  131,  131,  131,  131,   48,  178,  178,  178,  147,
  1202.       209,   48,  147,  281,  281,   61,   85,   85,   85,   85,
  1203.        85,   85,   85,   85,   87,   87,   87,   87,   87,   87,
  1204.        87,   87,  114,  114,  114,  114,  114,  114,  114,  114,
  1205.       152,   48,   48,   48,   48,   48,   48,   48,   48,   52,
  1206.  
  1207.       214,  214,  214,  152,   52,  131,  152,  344,   52,   52,
  1208.        52,  536,   52,  116,  116,  116,  116,  116,  116,  116,
  1209.       116,  117,  117,  117,  117,  117,  117,  117,  117,  120,
  1210.       120,  120,  120,  120,  120,  120,  120,   52,  149,  151,
  1211.       154,  898,   52,   52,   52,   52,   52,   52,   52,   52,
  1212.        53,  149,  151,  154,   53,   53,   53,  236,   53,  122,
  1213.       122,  122,  122,  122,  122,  122,  122,  123,  123,  123,
  1214.       123,  123,  123,  123,  123,  536,  154,  237,  211,  283,
  1215.       283,  149,  236,   53,  150,  244,  151,  153,   53,   53,
  1216.        53,   53,   53,   53,   53,   53,   83,  150,  137,  355,
  1217.  
  1218.       153,   83,  156,  237,  150,  211,  137,   83,   83,  144,
  1219.        83,  137,  139,   83,  146,  156,  155,   83,  157,  158,
  1220.       139,  244,  144,   83,  355,  139,  165,  161,   83,  155,
  1221.       153,  157,  158,   83,   83,  160,   83,  156,   83,  165,
  1222.       161,  897,   83,   86,  160,  160,  160,  212,  160,  158,
  1223.       165,   86,  144,  144,  144,  144,  144,  144,  144,  144,
  1224.       159,  161,  146,  146,  146,  146,  146,  146,  146,  146,
  1225.       162,  162,  162,  159,  212,  398,   86,  155,  157,  163,
  1226.       164,   86,   86,   86,   86,   86,   86,   86,   86,  106,
  1227.       159,  239,  163,  164,  106,  163,  206,  396,  171,  238,
  1228.  
  1229.       106,  106,  166,  106,  896,  206,  106,  171,  171,  171,
  1230.       106,  171,  895,  206,  888,  166,  106,  167,  239,  398,
  1231.       162,  106,  169,  164,  182,  238,  106,  106,  348,  106,
  1232.       167,  106,  240,  396,  182,  106,  110,  110,  110,  110,
  1233.       110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
  1234.       110,  284,  284,  166,  887,  170,  110,  110,  110,  240,
  1235.       167,  167,  167,  167,  167,  167,  167,  167,  170,  280,
  1236.       169,  169,  169,  169,  169,  169,  169,  169,  179,  215,
  1237.       215,  215,  280,  110,  110,  110,  175,  179,  179,  179,
  1238.       348,  179,  885,  182,  218,  218,  218,  884,  170,  170,
  1239.  
  1240.       170,  170,  170,  170,  170,  170,  110,  110,  112,  112,
  1241.       112,  112,  112,  309,  112,  112,  112,  112,  112,  173,
  1242.       180,  112,  112,  331,  331,  179,  309,  279,  112,  112,
  1243.       181,  279,  173,  180,  175,  175,  175,  175,  175,  175,
  1244.       175,  175,  216,  181,  279,  213,  219,  219,  219,  227,
  1245.       216,  213,  254,  254,  254,  112,  112,  176,  264,  264,
  1246.       264,  397,  173,  173,  173,  173,  173,  173,  173,  173,
  1247.       176,  227,  213,  309,  298,  216,  180,  213,  112,  112,
  1248.       115,  883,  241,  882,  115,  879,  181,  298,  241,  266,
  1249.       266,  266,  115,  878,  115,  877,  115,  397,  227,  286,
  1250.  
  1251.       176,  176,  176,  176,  176,  176,  176,  176,  115,  241,
  1252.       273,  115,  115,  876,  241,  273,  273,  115,  245,  245,
  1253.       245,  245,  115,  115,  115,  115,  115,  115,  115,  115,
  1254.       332,  332,  188,  188,  115,  634,  298,  115,  119,  188,
  1255.       188,  188,  188,  188,  188,  425,  119,  119,  119,  189,
  1256.       189,  425,  119,  286,  119,  255,  189,  189,  189,  189,
  1257.       189,  286,  255,  255,  255,  245,  119,  465,  465,  119,
  1258.       119,  217,  217,  217,  217,  217,  217,  217,  217,  265,
  1259.       294,  119,  267,  267,  267,  249,  265,  265,  265,  248,
  1260.       797,  634,  119,  294,  282,  119,  121,  249,  282,  269,
  1261.  
  1262.       249,  249,  388,  248,  121,  248,  269,  269,  269,  278,
  1263.       875,  282,  249,  425,  278,  292,  288,  248,  305,  362,
  1264.       248,  248,  278,  249,  288,  294,  249,  388,  292,  121,
  1265.       428,  305,  248,  292,  121,  121,  121,  121,  121,  121,
  1266.       121,  121,  124,  248,  287,  362,  248,  511,  797,  288,
  1267.       124,  124,  124,  287,  287,  287,  124,  287,  124,  250,
  1268.       250,  250,  250,  250,  250,  250,  250,  692,  692,  305,
  1269.       124,  376,  291,  124,  124,  251,  251,  251,  251,  251,
  1270.       251,  251,  251,  511,  290,  124,  291,  291,  291,  535,
  1271.       300,  428,  258,  290,  290,  290,  124,  290,  376,  124,
  1272.  
  1273.       140,  140,  140,  300,  258,  874,  741,  258,  258,  297,
  1274.       300,  272,  140,  140,  140,  140,  140,  140,  140,  258,
  1275.       577,  296,  297,  140,  272,  272,  272,  272,  272,  295,
  1276.       258,  302,  140,  258,  296,  140,  302,  140,  140,  140,
  1277.       873,  252,  295,  259,  302,  577,  297,  295,  535,  140,
  1278.       140,  140,  140,  140,  140,  140,  140,  252,  140,  259,
  1279.       608,  140,  741,  140,  140,  145,  296,  329,  350,  252,
  1280.       145,  259,  252,  252,  259,  259,  393,  329,  145,  427,
  1281.       272,  350,  871,  304,  252,  608,  259,  262,  262,  262,
  1282.       262,  262,  262,  262,  262,  252,  304,  259,  252,  377,
  1283.  
  1284.       259,  773,  393,  145,  306,  870,  308,  304,  145,  145,
  1285.       145,  145,  145,  145,  145,  145,  168,  306,  299,  308,
  1286.       168,  301,  299,  257,  490,  307,  377,  427,  168,  429,
  1287.       168,  306,  168,  740,  301,  299,  329,  257,  307,  257,
  1288.       299,  308,  429,  313,  168,  313,  375,  168,  168,  493,
  1289.       490,  257,  863,  168,  257,  257,  313,  773,  168,  168,
  1290.       168,  168,  168,  168,  168,  168,  257,  299,  301,  318,
  1291.       168,  318,  862,  168,  172,  172,  493,  257,  307,  375,
  1292.       257,  592,  318,  172,  172,  172,  740,  172,  268,  172,
  1293.       861,  172,  263,  263,  263,  263,  263,  263,  263,  263,
  1294.  
  1295.       289,  314,  268,  172,  268,  375,  172,  172,  592,  860,
  1296.       314,  314,  314,  311,  314,  431,  268,  433,  172,  268,
  1297.       268,  319,  319,  319,  442,  315,  311,  315,  431,  172,
  1298.       433,  268,  172,  174,  315,  315,  315,  442,  315,  531,
  1299.       533,  174,  268,  433,  654,  268,  531,  533,  289,  289,
  1300.       289,  289,  289,  289,  289,  289,  311,  311,  311,  311,
  1301.       311,  311,  311,  311,  312,  706,  174,  325,  325,  325,
  1302.       654,  174,  174,  174,  174,  174,  174,  174,  174,  177,
  1303.       473,  328,  365,  365,  365,  447,  328,  177,  177,  177,
  1304.       322,  473,  317,  177,  328,  177,  424,  364,  447,  322,
  1305.  
  1306.       322,  322,  321,  322,  424,  364,  317,  177,  317,  424,
  1307.       177,  177,  312,  312,  312,  312,  312,  312,  312,  312,
  1308.       317,  864,  177,  317,  317,  859,  369,  706,  446,  323,
  1309.       364,  323,  447,  177,  369,  317,  177,  221,  323,  323,
  1310.       323,  446,  323,  829,  774,  221,  317,  523,  446,  317,
  1311.       321,  321,  321,  321,  321,  321,  321,  321,  327,  369,
  1312.       327,  349,  371,  371,  371,  349,  858,  327,  327,  327,
  1313.       221,  327,  857,  349,  864,  221,  221,  221,  221,  221,
  1314.       221,  221,  221,  247,  247,  247,  247,  247,  532,  247,
  1315.       247,  247,  247,  247,  320,  829,  247,  247,  399,  399,
  1316.  
  1317.       399,  335,  335,  247,  247,  774,  594,  320,  335,  335,
  1318.       335,  335,  335,  402,  402,  402,  523,  415,  326,  411,
  1319.       411,  411,  438,  349,  415,  415,  415,  423,  423,  423,
  1320.       247,  247,  326,  594,  326,  438,  856,  320,  320,  320,
  1321.       320,  320,  320,  320,  320,  399,  326,  855,  438,  326,
  1322.       326,  419,  554,  247,  247,  256,  850,  532,  407,  554,
  1323.       419,  326,  419,  256,  256,  256,  430,  420,  419,  256,
  1324.       407,  256,  326,  407,  407,  326,  420,  596,  420,  849,
  1325.       430,  430,  430,  256,  420,  407,  256,  256,  370,  370,
  1326.       370,  370,  370,  370,  370,  370,  407,  436,  256,  407,
  1327.  
  1328.       404,  440,  449,  434,  596,  440,  436,  436,  436,  256,
  1329.       436,  434,  256,  261,  404,  449,  404,  848,  440,  405,
  1330.       485,  261,  261,  261,  426,  437,  439,  261,  404,  261,
  1331.       426,  404,  404,  405,  440,  405,  434,  408,  437,  439,
  1332.       661,  261,  444,  404,  261,  261,  445,  405,  435,  449,
  1333.       405,  405,  847,  408,  404,  444,  261,  404,  485,  445,
  1334.       440,  448,  405,  663,  444,  408,  661,  261,  408,  408,
  1335.       261,  293,  417,  405,  448,  625,  405,  437,  439,  293,
  1336.       408,  448,  625,  485,  509,  417,  417,  417,  417,  417,
  1337.       663,  408,  426,  443,  408,  445,  435,  435,  435,  435,
  1338.  
  1339.       435,  435,  435,  435,  293,  412,  443,  462,  534,  293,
  1340.       293,  293,  293,  293,  293,  293,  293,  310,  310,  412,
  1341.       462,  412,  509,  443,  413,  463,  541,  846,  450,  798,
  1342.       310,  684,  310,  412,  310,  463,  412,  412,  413,  541,
  1343.       413,  417,  450,  450,  450,  441,  310,  509,  412,  310,
  1344.       310,  456,  413,  456,  541,  413,  413,  684,  441,  412,
  1345.       845,  310,  412,  462,  456,  844,  627,  413,  441,  414,
  1346.       538,  525,  310,  525,  538,  310,  316,  534,  413,  525,
  1347.       541,  413,  316,  414,  452,  414,  545,  538,  451,  798,
  1348.       316,  316,  316,  457,  463,  441,  316,  414,  316,  545,
  1349.  
  1350.       414,  414,  451,  843,  451,  676,  452,  457,  457,  457,
  1351.       316,  546,  414,  316,  316,  545,  451,  543,  452,  451,
  1352.       451,  452,  452,  414,  546,  316,  414,  486,  486,  486,
  1353.       543,  451,  676,  452,  626,  627,  316,  543,  753,  316,
  1354.       324,  626,  451,  585,  452,  451,  324,  452,  530,  530,
  1355.       530,  458,  842,  453,  324,  324,  324,  548,  454,  453,
  1356.       324,  557,  324,  753,  454,  458,  546,  458,  909,  629,
  1357.       548,  557,  585,  453,  324,  453,  629,  324,  324,  458,
  1358.       454,  630,  458,  458,  512,  512,  512,  453,  630,  324,
  1359.       453,  453,  454,  628,  458,  454,  454,  631,  585,  645,
  1360.  
  1361.       324,  460,  453,  324,  459,  458,  645,  454,  458,  841,
  1362.       459,  548,  478,  453,  840,  460,  453,  460,  454,  542,
  1363.       909,  454,  544,  542,  459,  839,  459,  478,  903,  460,
  1364.       557,  512,  460,  460,  504,  544,  542,  461,  459,  461,
  1365.       489,  459,  459,  838,  460,  491,  461,  461,  461,  504,
  1366.       461,  478,  478,  459,  489,  460,  489,  547,  460,  549,
  1367.       491,  491,  628,  549,  459,  770,  631,  459,  489,  544,
  1368.       547,  489,  489,  504,  504,  516,  549,  491,  515,  515,
  1369.       515,  632,  641,  489,  518,  547,  903,  491,  491,  516,
  1370.       770,  516,  696,  517,  489,  641,  689,  489,  641,  696,
  1371.  
  1372.       518,  837,  491,  516,  700,  517,  516,  516,  517,  517,
  1373.       637,  551,  518,  551,  522,  518,  518,  700,  516,  781,
  1374.       517,  539,  689,  637,  551,  515,  637,  518,  522,  516,
  1375.       522,  517,  516,  540,  517,  539,  539,  539,  518,  745,
  1376.       552,  518,  522,  589,  781,  522,  522,  540,  834,  540,
  1377.       632,  833,  745,  637,  636,  589,  636,  522,  589,  589,
  1378.       550,  540,  552,  614,  540,  540,  550,  636,  522,  601,
  1379.       589,  522,  778,  553,  552,  639,  540,  552,  552,  553,
  1380.       550,  589,  550,  601,  589,  778,  745,  540,  639,  552,
  1381.       540,  711,  614,  556,  550,  553,  601,  550,  550,  556,
  1382.  
  1383.       552,  638,  828,  552,  618,  618,  618,  553,  601,  550,
  1384.       553,  553,  587,  556,  638,  556,  782,  711,  614,  642,
  1385.       550,  750,  553,  550,  793,  697,  587,  556,  587,  590,
  1386.       556,  556,  642,  553,  639,  638,  553,  647,  697,  698,
  1387.       587,  782,  556,  587,  587,  590,  836,  647,  750,  793,
  1388.       701,  618,  698,  556,  640,  587,  556,  590,  704,  697,
  1389.       590,  590,  642,  701,  733,  702,  587,  640,  704,  587,
  1390.       588,  836,  590,  588,  640,  588,  744,  643,  702,  830,
  1391.       830,  588,  588,  590,  588,  701,  590,  588,  640,  744,
  1392.       733,  588,  827,  746,  751,  826,  744,  588,  698,  643,
  1393.  
  1394.       588,  640,  588,  746,  825,  699,  647,  588,  588,  822,
  1395.       588,  643,  588,  640,  643,  643,  588,  616,  699,  713,
  1396.       616,  751,  616,  821,  699,  702,  643,  704,  616,  616,
  1397.       635,  616,  820,  713,  616,  854,  635,  643,  616,  644,
  1398.       643,  817,  816,  910,  616,  644,  713,  616,  694,  616,
  1399.       635,  699,  635,  760,  616,  616,  761,  616,  713,  616,
  1400.       854,  644,  746,  616,  635,  763,  815,  635,  635,  695,
  1401.       694,  768,  890,  644,  872,  695,  644,  644,  721,  635,
  1402.       760,  814,  694,  761,  812,  694,  694,  734,  644,  777,
  1403.       635,  695,  763,  635,  776,  721,  748,  694,  768,  644,
  1404.  
  1405.       872,  734,  644,  695,  780,  721,  695,  695,  694,  779,
  1406.       748,  694,  910,  766,  734,  912,  777,  811,  695,  779,
  1407.       721,  776,  783,  748,  789,  780,  734,  766,  890,  695,
  1408.       789,  780,  695,  726,  726,  748,  726,  726,  726,  726,
  1409.       766,  726,  726,  726,  726,  794,  726,  726,  776,  783,
  1410.       780,  789,  766,  726,  726,  726,  786,  789,  805,  806,
  1411.       803,  818,  726,  823,  810,  786,  799,  818,  809,  824,
  1412.       803,  792,  794,  880,  800,  819,  915,  835,  779,  930,
  1413.       726,  726,  726,  786,  912,  805,  806,  835,  818,  726,
  1414.       823,  786,  792,  799,  808,  800,  824,  831,  792,  807,
  1415.  
  1416.       880,  800,  819,  726,  726,  743,  743,  819,  743,  743,
  1417.       743,  743,  743,  743,  743,  743,  743,  792,  743,  743,
  1418.       799,  851,  800,  851,  831,  743,  743,  743,  800,  803,
  1419.       831,  852,  868,  892,  743,  832,  804,  913,  865,  904,
  1420.       802,  866,  868,  892,  801,  915,  835,  796,  930,  904,
  1421.       851,  831,  743,  743,  743,  795,  852,  891,  852,  916,
  1422.       917,  743,  832,  865,  913,  865,  791,  790,  866,  916,
  1423.       917,  788,  787,  785,  784,  743,  743,  762,  762,  772,
  1424.       762,  762,  762,  762,  891,  762,  762,  762,  762,  832,
  1425.       762,  762,  865,  866,  832,  866,  911,  762,  762,  762,
  1426.  
  1427.       771,  868,  892,  918,  919,  920,  762,  921,  904,  767,
  1428.       911,  891,  922,  918,  919,  920,  765,  921,  759,  758,
  1429.       923,  924,  922,  911,  762,  762,  762,  757,  916,  917,
  1430.       923,  924,  925,  762,  926,  911,  756,  755,  754,  749,
  1431.       747,  927,  925,  742,  926,  739,  738,  762,  762,  775,
  1432.       775,  927,  775,  775,  775,  775,  775,  775,  775,  775,
  1433.       775,  737,  775,  775,  736,  928,  735,  929,  732,  775,
  1434.       775,  775,  918,  919,  920,  928,  921,  929,  775,  731,
  1435.       730,  922,  729,  728,  727,  725,  724,  723,  722,  923,
  1436.       924,  720,  719,  718,  717,  716,  775,  775,  775,  715,
  1437.  
  1438.       714,  925,  712,  926,  710,  775,  709,  708,  707,  705,
  1439.       927,  703,  691,  690,  688,  687,  686,  683,  682,  775,
  1440.       775,  681,  680,  679,  678,  675,  674,  673,  672,  671,
  1441.       670,  669,  668,  667,  928,  666,  929,  934,  665,  662,
  1442.       934,  660,  934,  934,  935,  935,  935,  935,  935,  659,
  1443.       935,  935,  935,  935,  936,  936,  936,  936,  936,  936,
  1444.       936,  936,  936,  936,  937,  937,  937,  937,  937,  937,
  1445.       937,  937,  937,  937,  938,  938,  938,  938,  938,  938,
  1446.       938,  938,  938,  938,  939,  658,  657,  939,  939,  939,
  1447.       939,  940,  940,  940,  940,  940,  656,  940,  940,  940,
  1448.  
  1449.       940,  941,  941,  941,  941,  941,  941,  941,  941,  941,
  1450.       941,  942,  942,  653,  652,  651,  650,  649,  942,  942,
  1451.       943,  943,  943,  943,  943,  943,  943,  943,  943,  943,
  1452.       944,  944,  944,  944,  944,  944,  944,  944,  944,  944,
  1453.       945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
  1454.       946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
  1455.       947,  947,  947,  947,  947,  947,  947,  947,  947,  947,
  1456.       948,  948,  948,  948,  948,  948,  948,  948,  948,  948,
  1457.       949,  949,  949,  949,  949,  949,  949,  949,  949,  949,
  1458.       950,  950,  950,  950,  950,  950,  950,  950,  950,  950,
  1459.  
  1460.       951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
  1461.       952,  952,  952,  952,  952,  952,  952,  952,  952,  952,
  1462.       953,  953,  648,  953,  953,  953,  953,  953,  953,  953,
  1463.       954,  954,  646,  954,  954,  954,  954,  954,  954,  954,
  1464.       955,  955,  955,  955,  955,  955,  955,  955,  955,  955,
  1465.       956,  956,  956,  956,  956,  956,  956,  956,  956,  956,
  1466.       957,  957,  957,  957,  957,  957,  957,  957,  957,  957,
  1467.       958,  958,  958,  958,  958,  958,  958,  958,  958,  958,
  1468.       959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
  1469.       960,  960,  960,  960,  624,  960,  960,  960,  960,  960,
  1470.  
  1471.       961,  961,  623,  961,  962,  962,  962,  962,  962,  962,
  1472.       962,  962,  962,  962,  963,  963,  963,  963,  963,  963,
  1473.       963,  963,  963,  963,  964,  964,  622,  964,  964,  964,
  1474.       964,  964,  964,  964,  965,  965,  620,  965,  965,  965,
  1475.       965,  965,  965,  965,  966,  966,  615,  966,  966,  966,
  1476.       966,  966,  966,  966,  967,  967,  613,  967,  967,  967,
  1477.       967,  967,  967,  967,  968,  968,  612,  968,  968,  968,
  1478.       968,  968,  968,  968,  969,  969,  611,  969,  969,  969,
  1479.       969,  969,  969,  969,  970,  970,  970,  970,  970,  970,
  1480.       970,  970,  970,  970,  971,  971,  971,  971,  971,  971,
  1481.  
  1482.       971,  971,  971,  971,  972,  972,  972,  972,  972,  972,
  1483.       972,  972,  972,  972,  973,  973,  973,  973,  973,  973,
  1484.       973,  973,  973,  973,  974,  974,  610,  974,  974,  974,
  1485.       974,  974,  974,  974,  975,  975,  609,  975,  975,  975,
  1486.       975,  975,  975,  975,  976,  976,  607,  976,  976,  976,
  1487.       976,  976,  976,  976,  977,  977,  606,  977,  977,  977,
  1488.       977,  977,  977,  977,  978,  978,  605,  978,  978,  978,
  1489.       978,  978,  978,  978,  979,  979,  604,  979,  979,  979,
  1490.       979,  979,  979,  979,  980,  980,  980,  980,  980,  980,
  1491.       980,  980,  980,  980,  981,  981,  981,  981,  981,  981,
  1492.  
  1493.       981,  981,  981,  981,  982,  982,  982,  982,  982,  982,
  1494.       982,  982,  982,  982,  983,  983,  983,  983,  983,  983,
  1495.       983,  983,  983,  983,  603,  602,  600,  599,  598,  597,
  1496.       595,  593,  591,  586,  584,  583,  582,  581,  580,  579,
  1497.       578,  576,  575,  574,  573,  572,  571,  570,  569,  568,
  1498.       567,  566,  565,  564,  563,  562,  561,  560,  559,  555,
  1499.       537,  529,  528,  527,  526,  524,  520,  519,  514,  510,
  1500.       508,  507,  506,  505,  503,  502,  501,  500,  499,  498,
  1501.       497,  496,  495,  494,  492,  488,  484,  483,  482,  481,
  1502.       480,  479,  477,  476,  475,  474,  472,  471,  470,  469,
  1503.  
  1504.       468,  467,  466,  464,  432,  422,  421,  418,  416,  409,
  1505.       406,  401,  400,  395,  394,  392,  391,  390,  389,  387,
  1506.       386,  385,  384,  383,  382,  381,  380,  379,  374,  373,
  1507.       372,  368,  361,  360,  359,  358,  357,  356,  354,  353,
  1508.       352,  351,  347,  345,  343,  342,  341,  340,  339,  338,
  1509.       337,  336,  333,  285,  276,  274,  270,  260,  253,  243,
  1510.       242,  235,  234,  233,  232,  230,  229,  228,  226,  225,
  1511.       224,  223,  222,  220,  205,  204,  203,  202,  201,  198,
  1512.       197,  196,  195,  194,  193,  191,  190,  186,  135,  133,
  1513.       132,  130,  128,  127,  109,  108,  107,  105,  104,  102,
  1514.  
  1515.       100,   99,   98,   97,   96,   95,   94,   93,   92,   91,
  1516.        90,   88,   81,   79,   76,   73,   72,   71,   68,   63,
  1517.        35,   12,    7,    3,  933,  933,  933,  933,  933,  933,
  1518.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1519.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1520.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1521.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1522.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1523.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1524.       933,  933,  933,  933,  933,  933,  933
  1525.  
  1526.     } ;
  1527.  
  1528. static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
  1529. static char *yy_full_match;
  1530. static int yy_lp;
  1531. static int yy_looking_for_trail_begin = 0;
  1532. static int yy_full_lp;
  1533. static int *yy_full_state;
  1534. #define YY_TRAILING_MASK 0x2000
  1535. #define YY_TRAILING_HEAD_MASK 0x4000
  1536. #define REJECT \
  1537. { \
  1538. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
  1539. yy_cp = yy_full_match; /* restore poss. backed-over text */ \
  1540. yy_lp = yy_full_lp; /* restore orig. accepting pos. */ \
  1541. yy_state_ptr = yy_full_state; /* restore orig. state */ \
  1542. yy_current_state = *yy_state_ptr; /* restore curr. state */ \
  1543. ++yy_lp; \
  1544. goto find_rule; \
  1545. }
  1546. #define yymore() yymore_used_but_not_detected
  1547. #define YY_MORE_ADJ 0
  1548. char *yytext;
  1549. # line 1 "../parser.l"
  1550. # line 8 "../parser.l"
  1551. /*
  1552.  * parser.l -- lex parser of algebraic chess moves for XBoard
  1553.  * $Id: parser.l,v 1.21 1995/03/09 00:43:28 mann Exp $
  1554.  *
  1555.  * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
  1556.  * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
  1557.  *
  1558.  * The following terms apply to Digital Equipment Corporation's copyright
  1559.  * interest in XBoard:
  1560.  * ------------------------------------------------------------------------
  1561.  * All Rights Reserved
  1562.  *
  1563.  * Permission to use, copy, modify, and distribute this software and its
  1564.  * documentation for any purpose and without fee is hereby granted,
  1565.  * provided that the above copyright notice appear in all copies and that
  1566.  * both that copyright notice and this permission notice appear in
  1567.  * supporting documentation, and that the name of Digital not be
  1568.  * used in advertising or publicity pertaining to distribution of the
  1569.  * software without specific, written prior permission.
  1570.  *
  1571.  * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  1572.  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
  1573.  * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  1574.  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  1575.  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  1576.  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  1577.  * SOFTWARE.
  1578.  * ------------------------------------------------------------------------
  1579.  *
  1580.  * The following terms apply to the enhanced version of XBoard distributed
  1581.  * by the Free Software Foundation:
  1582.  * ------------------------------------------------------------------------
  1583.  * This program is free software; you can redistribute it and/or modify
  1584.  * it under the terms of the GNU General Public License as published by
  1585.  * the Free Software Foundation; either version 2 of the License, or
  1586.  * (at your option) any later version.
  1587.  *
  1588.  * This program is distributed in the hope that it will be useful,
  1589.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  1590.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1591.  * GNU General Public License for more details.
  1592.  *
  1593.  * You should have received a copy of the GNU General Public License
  1594.  * along with this program; if not, write to the Free Software
  1595.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1596.  * ------------------------------------------------------------------------
  1597.  */
  1598.  
  1599. /* This parser handles all forms of promotion.
  1600.  * The parser resolves ambiguous moves by searching and check-testing.
  1601.  * It also parses comments of the form [anything] or (anything).
  1602.  */
  1603.  
  1604. #define NO_CONSTRAINT   -1
  1605. #undef YYLMAX
  1606. #define YYLMAX                  4096
  1607. #define UNPUT_BUF_SIZE          YYLMAX
  1608.  
  1609. #ifdef FLEX_SCANNER
  1610. /* This is flex */
  1611. #undef YY_INPUT
  1612. #define YY_INPUT(buf, result, max_size) my_yy_input(buf, &result, max_size)
  1613. #ifdef _amigados    /*  AmigaDOS flex modifies yytext. Don't other?  */
  1614. #define YY_DECL                     \
  1615.     int _yylex YY_PROTO((void));    \
  1616.     int yylex YY_PROTO((void))      \
  1617.     {                               \
  1618.     int result = _yylex();      \
  1619.     yy_text = yytext;           \
  1620.     return(result);             \
  1621.     }                               \
  1622.     int _yylex YY_PROTO((void))
  1623. #endif
  1624. #else
  1625. /* This is lex */
  1626. #undef input
  1627. #undef output
  1628. #undef unput
  1629. #endif
  1630.  
  1631. /* The includes must be here, below the #undef input */
  1632.  
  1633. #include <ctype.h>
  1634.  
  1635. # if HAVE_STRING_H
  1636. #  include <string.h>
  1637. # else /* not HAVE_STRING_H */
  1638. #  include <strings.h>
  1639. # endif /* not HAVE_STRING_H */
  1640.  
  1641. #if HAVE_UNISTD_H
  1642. # include <unistd.h>
  1643. #endif
  1644.  
  1645. #if defined(_amigados)
  1646. # include <errno.h>
  1647. # if HAVE_FCNTL_H
  1648. #  include <fcntl.h>    /*  isatty() prototype  */
  1649. # endif /*  HAVE_FCNTL_H        */
  1650. #endif  /*  defined(_amigados)  */
  1651.  
  1652. #include "common.h"
  1653. #include "backend.h"
  1654. #include "frontend.h"
  1655. #include "parser.h"
  1656. #include "moves.h"
  1657.  
  1658. #define FakeFlags(index) \
  1659.     (((((index) % 2) == 0) ? F_WHITE_ON_MOVE : 0) | F_ALL_CASTLE_OK)
  1660.  
  1661. extern Board    boards[MAX_MOVES];
  1662. int             yyboardindex;
  1663. char            currentMoveString[YYLMAX];
  1664. char           *yy_text;
  1665. #ifndef FLEX_SCANNER
  1666. char            unputBuffer[UNPUT_BUF_SIZE];
  1667. int             unputCount = 0;
  1668. #endif
  1669.  
  1670. #ifdef FLEX_SCANNER
  1671. void my_yy_input P((char *buf, int *result, int max_size));
  1672. #else /*!FLEX_SCANNER*/
  1673. static int input P((void));
  1674. static void output P((int ch));
  1675. static void unput P((int ch));
  1676. int yylook P((void));
  1677. int yyback P((int *, int));
  1678. #endif
  1679. #undef yywrap
  1680. int yywrap P((void));
  1681. extern void CopyBoard P((Board to, Board from));
  1682.  
  1683.  
  1684. /* Macros after this point can all be overridden by user definitions in
  1685.  * section 1.
  1686.  */
  1687.  
  1688. #ifdef YY_MALLOC_DECL
  1689. YY_MALLOC_DECL
  1690. #else
  1691. #if __STDC__
  1692. #ifndef __cplusplus
  1693. #include <stdlib.h>
  1694. #endif
  1695. #else
  1696. /* Just try to get by without declaring the routines.  This will fail
  1697.  * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
  1698.  * or sizeof(void*) != sizeof(int).
  1699.  */
  1700. #endif
  1701. #endif
  1702.  
  1703. /* Amount of stuff to slurp up with each read. */
  1704. #ifndef YY_READ_BUF_SIZE
  1705. #define YY_READ_BUF_SIZE 8192
  1706. #endif
  1707.  
  1708. /* Copy whatever the last rule matched to the standard output. */
  1709.  
  1710. #ifndef ECHO
  1711. /* This used to be an fputs(), but since the string might contain NUL's,
  1712.  * we now use fwrite().
  1713.  */
  1714. #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
  1715. #endif
  1716.  
  1717. /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
  1718.  * is returned in "result".
  1719.  */
  1720. #ifndef YY_INPUT
  1721. #define YY_INPUT(buf,result,max_size) \
  1722.     if ( yy_current_buffer->yy_is_interactive ) \
  1723.         { \
  1724.         int c = getc( yyin ); \
  1725.         result = c == EOF ? 0 : 1; \
  1726.         buf[0] = (char) c; \
  1727.         } \
  1728.     else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
  1729.           && ferror( yyin ) ) \
  1730.         YY_FATAL_ERROR( "input in flex scanner failed" );
  1731. #endif
  1732.  
  1733. /* No semi-colon after return; correct usage is to write "yyterminate();" -
  1734.  * we don't want an extra ';' after the "return" because that will cause
  1735.  * some compilers to complain about unreachable statements.
  1736.  */
  1737. #ifndef yyterminate
  1738. #define yyterminate() return YY_NULL
  1739. #endif
  1740.  
  1741. /* Number of entries by which start-condition stack grows. */
  1742. #ifndef YY_START_STACK_INCR
  1743. #define YY_START_STACK_INCR 25
  1744. #endif
  1745.  
  1746. /* Report a fatal error. */
  1747. #ifndef YY_FATAL_ERROR
  1748. #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
  1749. #endif
  1750.  
  1751. /* Default declaration of generated scanner - a define so the user can
  1752.  * easily add parameters.
  1753.  */
  1754. #ifndef YY_DECL
  1755. #define YY_DECL int yylex YY_PROTO(( void ))
  1756. #endif
  1757.  
  1758. /* Code executed at the beginning of each rule, after yytext and yyleng
  1759.  * have been set up.
  1760.  */
  1761. #ifndef YY_USER_ACTION
  1762. #define YY_USER_ACTION
  1763. #endif
  1764.  
  1765. /* Code executed at the end of each rule. */
  1766. #ifndef YY_BREAK
  1767. #define YY_BREAK break;
  1768. #endif
  1769.  
  1770. YY_DECL
  1771.     {
  1772.     register yy_state_type yy_current_state;
  1773.     register char *yy_cp, *yy_bp;
  1774.     register int yy_act;
  1775.  
  1776. # line 141 "../parser.l"
  1777.  
  1778.  
  1779.  
  1780.     if ( yy_init )
  1781.         {
  1782. #ifdef YY_USER_INIT
  1783.         YY_USER_INIT;
  1784. #endif
  1785.  
  1786.         if ( ! yy_start )
  1787.             yy_start = 1;    /* first start state */
  1788.  
  1789.         if ( ! yyin )
  1790.             yyin = stdin;
  1791.  
  1792.         if ( ! yyout )
  1793.             yyout = stdout;
  1794.  
  1795.         if ( yy_current_buffer )
  1796.             yy_init_buffer( yy_current_buffer, yyin );
  1797.         else
  1798.             yy_current_buffer =
  1799.                 yy_create_buffer( yyin, YY_BUF_SIZE );
  1800.  
  1801.         yy_load_buffer_state();
  1802.  
  1803.         yy_init = 0;
  1804.         }
  1805.  
  1806.     while ( 1 )        /* loops until end-of-file is reached */
  1807.         {
  1808.         yy_cp = yy_c_buf_p;
  1809.  
  1810.         /* Support of yytext. */
  1811.         *yy_cp = yy_hold_char;
  1812.  
  1813.         /* yy_bp points to the position in yy_ch_buf of the start of
  1814.          * the current run.
  1815.          */
  1816.         yy_bp = yy_cp;
  1817.  
  1818.         yy_current_state = yy_start;
  1819.         if ( yy_bp[-1] == '\n' )
  1820.             ++yy_current_state;
  1821.         yy_state_ptr = yy_state_buf;
  1822.         *yy_state_ptr++ = yy_current_state;
  1823. yy_match:
  1824.         do
  1825.             {
  1826.             register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
  1827.             while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
  1828.                 {
  1829.                 yy_current_state = (int) yy_def[yy_current_state];
  1830.                 if ( yy_current_state >= 934 )
  1831.                     yy_c = yy_meta[(unsigned int) yy_c];
  1832.                 }
  1833.             yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
  1834.             *yy_state_ptr++ = yy_current_state;
  1835.             ++yy_cp;
  1836.             }
  1837.         while ( yy_base[yy_current_state] != 3525 );
  1838.  
  1839. yy_find_action:
  1840.         yy_current_state = *--yy_state_ptr;
  1841.         yy_lp = yy_accept[yy_current_state];
  1842. find_rule: /* we branch to this label when backing up */
  1843.         for ( ; ; ) /* until we find what rule we matched */
  1844.             {
  1845.             if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
  1846.                 {
  1847.                 yy_act = yy_acclist[yy_lp];
  1848.                 if ( yy_act & YY_TRAILING_HEAD_MASK ||
  1849.                      yy_looking_for_trail_begin )
  1850.                     {
  1851.                     if ( yy_act == yy_looking_for_trail_begin )
  1852.                         {
  1853.                         yy_looking_for_trail_begin = 0;
  1854.                         yy_act &= ~YY_TRAILING_HEAD_MASK;
  1855.                         break;
  1856.                         }
  1857.                     }
  1858.                 else if ( yy_act & YY_TRAILING_MASK )
  1859.                     {
  1860.                     yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
  1861.                     yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
  1862.                     }
  1863.                 else
  1864.                     {
  1865.                     yy_full_match = yy_cp;
  1866.                     yy_full_state = yy_state_ptr;
  1867.                     yy_full_lp = yy_lp;
  1868.                     break;
  1869.                     }
  1870.                 ++yy_lp;
  1871.                 goto find_rule;
  1872.                 }
  1873.             --yy_cp;
  1874.             yy_current_state = *--yy_state_ptr;
  1875.             yy_lp = yy_accept[yy_current_state];
  1876.             }
  1877.  
  1878.         YY_DO_BEFORE_ACTION;
  1879.  
  1880.  
  1881. do_action:    /* This label is used only to access EOF actions. */
  1882.  
  1883.  
  1884.         switch ( yy_act )
  1885.     { /* beginning of action switch */
  1886. case 1:
  1887. YY_USER_ACTION
  1888. # line 143 "../parser.l"
  1889. {
  1890.     /*
  1891.      * Fully-qualified algebraic move, possibly with promotion
  1892.      */
  1893.     int skip1 = 0, skip2 = 0;
  1894.     ChessSquare piece;
  1895.     ChessMove result;
  1896.  
  1897.     /*
  1898.      * remove the /
  1899.      */
  1900.     if (yytext[1] == '/') skip1 = 1;
  1901.  
  1902.     /*
  1903.      * remove the [xX:-]
  1904.      */
  1905.     if ((yytext[3+skip1] == 'x') || (yytext[3+skip1] == 'X') ||
  1906.     (yytext[3+skip1] == '-') || (yytext[3+skip1] == ':')) skip2 = 1;
  1907.  
  1908.     currentMoveString[0] = yytext[1+skip1];
  1909.     currentMoveString[1] = yytext[2+skip1];
  1910.     currentMoveString[2] = yytext[3+skip1+skip2];
  1911.     currentMoveString[3] = yytext[4+skip1+skip2];
  1912.     currentMoveString[4] = NULLCHAR;
  1913.  
  1914.     if (yyleng-skip1-skip2 > 5) {
  1915.     if (yytext[yyleng-1] == ')') {
  1916.         currentMoveString[4] = ToLower(yytext[yyleng-2]);
  1917.     } else {
  1918.         currentMoveString[4] = ToLower(yytext[yyleng-1]);
  1919.     }
  1920.     currentMoveString[5] = NULLCHAR;
  1921.     }
  1922.  
  1923.     piece = boards[yyboardindex]
  1924.       [currentMoveString[1] - '1'][currentMoveString[0] - 'a'];
  1925.     if (ToLower(yytext[0]) != ToLower(PieceToChar(piece)))
  1926.       return (int) BadMove;
  1927.  
  1928.     result = LegalityTest(boards[yyboardindex],
  1929.               FakeFlags(yyboardindex), EP_UNKNOWN,
  1930.               currentMoveString[1] - '1',
  1931.               currentMoveString[0] - 'a',
  1932.               currentMoveString[3] - '1',
  1933.               currentMoveString[2] - 'a',
  1934.               currentMoveString[4]);
  1935.  
  1936.     if (currentMoveString[4] == NULLCHAR &&
  1937.     (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
  1938.     currentMoveString[4] = 'q';
  1939.     currentMoveString[5] = NULLCHAR;
  1940.     }
  1941.  
  1942.     return (int) result;
  1943. }
  1944.     YY_BREAK
  1945. case 2:
  1946. YY_USER_ACTION
  1947. # line 199 "../parser.l"
  1948. {
  1949.     /*
  1950.      * Simple algebraic move, possibly with promotion
  1951.      */
  1952.     int skip = 0;
  1953.     ChessMove result;
  1954.  
  1955.     /*
  1956.      * remove the [xX:-]
  1957.      */
  1958.     if ((yytext[2] == 'x') || (yytext[2] == 'X') ||
  1959.     (yytext[2] == '-') || (yytext[2] == ':')) skip = 1;
  1960.  
  1961.     currentMoveString[0] = yytext[0];
  1962.     currentMoveString[1] = yytext[1];
  1963.     currentMoveString[2] = yytext[2+skip];
  1964.     currentMoveString[3] = yytext[3+skip];
  1965.     currentMoveString[4] = NULLCHAR;
  1966.  
  1967.     if (yyleng-skip > 4) {
  1968.     if (yytext[yyleng-1] == ')') {
  1969.         currentMoveString[4] = ToLower(yytext[yyleng-2]);
  1970.     } else {
  1971.         currentMoveString[4] = ToLower(yytext[yyleng-1]);
  1972.     }
  1973.     currentMoveString[5] = NULLCHAR;
  1974.     }
  1975.  
  1976.     result = LegalityTest(boards[yyboardindex],
  1977.               FakeFlags(yyboardindex), EP_UNKNOWN,
  1978.               currentMoveString[1] - '1',
  1979.               currentMoveString[0] - 'a',
  1980.               currentMoveString[3] - '1',
  1981.               currentMoveString[2] - 'a',
  1982.               currentMoveString[4]);
  1983.  
  1984.     if (currentMoveString[4] == NULLCHAR &&
  1985.     (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
  1986.     currentMoveString[4] = 'q';
  1987.     currentMoveString[5] = NULLCHAR;
  1988.     }
  1989.  
  1990.     return (int) result;
  1991. }
  1992.     YY_BREAK
  1993. case 3:
  1994. YY_USER_ACTION
  1995. # line 244 "../parser.l"
  1996. {
  1997.     /*
  1998.      * Pawn move, possibly with promotion
  1999.      */
  2000.     DisambiguateClosure cl;
  2001.     int skip = 0;
  2002.  
  2003.     /* remove the =() */
  2004.     if (yytext[2] == '=') skip++;
  2005.     if (yytext[2+skip] == '(') skip++;
  2006.  
  2007.     cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
  2008.     cl.rfIn = -1;
  2009.     cl.ffIn = yytext[0] - 'a';
  2010.     cl.rtIn = yytext[1] - '1';
  2011.     cl.ftIn = yytext[0] - 'a';
  2012.     cl.promoCharIn = yytext[2+skip];
  2013.     Disambiguate(boards[yyboardindex],
  2014.          FakeFlags(yyboardindex), EP_UNKNOWN, &cl);
  2015.  
  2016.     currentMoveString[0] = cl.ff + 'a';
  2017.     currentMoveString[1] = cl.rf + '1';
  2018.     currentMoveString[2] = cl.ft + 'a';
  2019.     currentMoveString[3] = cl.rt + '1';
  2020.     currentMoveString[4] = cl.promoChar;
  2021.     currentMoveString[5] = NULLCHAR;
  2022.  
  2023.     return (int) cl.kind;
  2024. }
  2025.     YY_BREAK
  2026. case 4:
  2027. YY_USER_ACTION
  2028. # line 275 "../parser.l"
  2029. {
  2030.     /*
  2031.      * Pawn capture, possibly with promotion, possibly ambiguous
  2032.      */
  2033.     DisambiguateClosure cl;
  2034.     int skip1 = 0, skip2 = 0;
  2035.  
  2036.     /*
  2037.      * remove the [xX:-] and =()
  2038.      */
  2039.     if ((yytext[1] == 'x') || (yytext[1] == 'X')
  2040.     || (yytext[1] == ':') || (yytext[1] == '-')) skip1 = 1;
  2041.     if (yytext[2+skip1] == '=') skip2++;
  2042.     if (yytext[2+skip1+skip2] == '(') skip2++;
  2043.  
  2044.  
  2045.     cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
  2046.     cl.rfIn = -1;
  2047.     cl.ffIn = yytext[0] - 'a';
  2048.     cl.rtIn = -1;
  2049.     cl.ftIn = yytext[1+skip1] - 'a';
  2050.     cl.promoCharIn = yytext[2+skip1+skip2];
  2051.     Disambiguate(boards[yyboardindex],
  2052.          FakeFlags(yyboardindex), EP_UNKNOWN, &cl);
  2053.  
  2054.     currentMoveString[0] = cl.ff + 'a';
  2055.     currentMoveString[1] = cl.rf + '1';
  2056.     currentMoveString[2] = cl.ft + 'a';
  2057.     currentMoveString[3] = cl.rt + '1';
  2058.     currentMoveString[4] = cl.promoChar;
  2059.     currentMoveString[5] = NULLCHAR;
  2060.  
  2061.     return (int) cl.kind;
  2062. }
  2063.     YY_BREAK
  2064. case 5:
  2065. YY_USER_ACTION
  2066. # line 310 "../parser.l"
  2067. {
  2068.     /*
  2069.      * unambiguously abbreviated Pawn capture, possibly with promotion
  2070.      */
  2071.     int skip = 0;
  2072.     ChessMove result;
  2073.  
  2074.     /*
  2075.      * remove the [xX:-]
  2076.      */
  2077.     if ((yytext[1] == 'x') || (yytext[1] == 'X')
  2078.     || (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
  2079.  
  2080.     currentMoveString[0] = yytext[0];
  2081.     currentMoveString[2] = yytext[1+skip];
  2082.     currentMoveString[3] = yytext[2+skip];
  2083.     if (WhiteOnMove(yyboardindex)) {
  2084.     if (yytext[2+skip] == '1') return (int) BadMove;
  2085.     currentMoveString[1] = yytext[2+skip] - 1;
  2086.     } else {
  2087.     if (yytext[2+skip] == '8') return (int) BadMove;
  2088.     currentMoveString[1] = yytext[2+skip] + 1;
  2089.     }
  2090.     if (yyleng-skip > 3) {
  2091.     if (yytext[yyleng-1] == ')')
  2092.       currentMoveString[4] = ToLower(yytext[yyleng-2]);
  2093.     else
  2094.       currentMoveString[4] = ToLower(yytext[yyleng-1]);
  2095.     currentMoveString[5] = NULLCHAR;
  2096.     } else {
  2097.     currentMoveString[4] = NULLCHAR;
  2098.     }
  2099.  
  2100.     result = LegalityTest(boards[yyboardindex],
  2101.               FakeFlags(yyboardindex), EP_UNKNOWN,
  2102.               currentMoveString[1] - '1',
  2103.               currentMoveString[0] - 'a',
  2104.               currentMoveString[3] - '1',
  2105.               currentMoveString[2] - 'a',
  2106.               currentMoveString[4]);
  2107.  
  2108.     if (currentMoveString[4] == NULLCHAR &&
  2109.     (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
  2110.     currentMoveString[4] = 'q';
  2111.     currentMoveString[5] = NULLCHAR;
  2112.     }
  2113.  
  2114.     if (result != BadMove) return (int) result;
  2115.  
  2116.     /* Special case: improperly written en passant capture */
  2117.     if (WhiteOnMove(yyboardindex)) {
  2118.     if (currentMoveString[3] == '5') {
  2119.         currentMoveString[1] = '5';
  2120.         currentMoveString[3] = '6';
  2121.     } else {
  2122.         return (int) BadMove;
  2123.     }
  2124.     } else {
  2125.     if (currentMoveString[3] == '4') {
  2126.         currentMoveString[1] = '4';
  2127.         currentMoveString[3] = '3';
  2128.     } else {
  2129.         return (int) BadMove;
  2130.     }
  2131.     }
  2132.  
  2133.     result = LegalityTest(boards[yyboardindex],
  2134.               FakeFlags(yyboardindex), EP_UNKNOWN,
  2135.               currentMoveString[1] - '1',
  2136.               currentMoveString[0] - 'a',
  2137.               currentMoveString[3] - '1',
  2138.               currentMoveString[2] - 'a',
  2139.               currentMoveString[4]);
  2140.  
  2141.     if (result == WhiteCapturesEnPassant || result == BlackCapturesEnPassant)
  2142.       return (int) result;
  2143.     else
  2144.       return (int) BadMove;
  2145. }
  2146.     YY_BREAK
  2147. case 6:
  2148. YY_USER_ACTION
  2149. # line 390 "../parser.l"
  2150. {
  2151.     /*
  2152.      * piece move, possibly ambiguous
  2153.      */
  2154.     DisambiguateClosure cl;
  2155.     int skip = 0;
  2156.  
  2157.     /*
  2158.      * remove the [xX:-]
  2159.      */
  2160.     if ((yytext[1] == 'x') || (yytext[1] == 'X')
  2161.     || (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
  2162.  
  2163.     if (WhiteOnMove(yyboardindex)) {
  2164.     cl.pieceIn = CharToPiece(ToUpper(yytext[0]));
  2165.     } else {
  2166.     cl.pieceIn = CharToPiece(ToLower(yytext[0]));
  2167.     }
  2168.     cl.rfIn = -1;
  2169.     cl.ffIn = -1;
  2170.     cl.rtIn = yytext[2+skip] - '1';
  2171.     cl.ftIn = yytext[1+skip] - 'a';
  2172.     cl.promoCharIn = NULLCHAR;
  2173.     Disambiguate(boards[yyboardindex],
  2174.          FakeFlags(yyboardindex), EP_UNKNOWN, &cl);
  2175.  
  2176.     currentMoveString[0] = cl.ff + 'a';
  2177.     currentMoveString[1] = cl.rf + '1';
  2178.     currentMoveString[2] = cl.ft + 'a';
  2179.     currentMoveString[3] = cl.rt + '1';
  2180.     currentMoveString[4] = cl.promoChar;
  2181.     currentMoveString[5] = NULLCHAR;
  2182.  
  2183.     return (int) cl.kind;
  2184. }
  2185.     YY_BREAK
  2186. case 7:
  2187. YY_USER_ACTION
  2188. # line 426 "../parser.l"
  2189. {
  2190.     /*
  2191.      * piece move with rank or file disambiguator
  2192.      */
  2193.     DisambiguateClosure cl;
  2194.     int skip = 0;
  2195.  
  2196.     /*
  2197.      * remove the [xX:-]
  2198.      */
  2199.     if ((yytext[2] == 'x') || (yytext[2] == 'X')
  2200.     || (yytext[2] == ':') || (yytext[2] == '-')) skip = 1;
  2201.  
  2202.     if (WhiteOnMove(yyboardindex)) {
  2203.     cl.pieceIn = CharToPiece(ToUpper(yytext[0]));
  2204.     } else {
  2205.     cl.pieceIn = CharToPiece(ToLower(yytext[0]));
  2206.     }
  2207.     if (isalpha(yytext[1])) {
  2208.     cl.rfIn = -1;
  2209.     cl.ffIn = yytext[1] - 'a';
  2210.     } else {
  2211.     cl.rfIn = yytext[1] - '1';
  2212.     cl.ffIn = -1;
  2213.     }
  2214.     cl.rtIn = yytext[3+skip] - '1';
  2215.     cl.ftIn = yytext[2+skip] - 'a';
  2216.     cl.promoCharIn = NULLCHAR;
  2217.     Disambiguate(boards[yyboardindex],
  2218.          FakeFlags(yyboardindex), EP_UNKNOWN, &cl);
  2219.  
  2220.     currentMoveString[0] = cl.ff + 'a';
  2221.     currentMoveString[1] = cl.rf + '1';
  2222.     currentMoveString[2] = cl.ft + 'a';
  2223.     currentMoveString[3] = cl.rt + '1';
  2224.     currentMoveString[4] = cl.promoChar;
  2225.     currentMoveString[5] = NULLCHAR;
  2226.  
  2227.     return (int) cl.kind;
  2228. }
  2229.     YY_BREAK
  2230. case 8:
  2231. YY_USER_ACTION
  2232. # line 467 "../parser.l"
  2233. {
  2234.     int rf, ff, rt, ft;
  2235.  
  2236.     if (WhiteOnMove(yyboardindex)) {
  2237.     if (boards[yyboardindex][0][3] == WhiteKing) {
  2238.         /* ICS wild castling */
  2239.         strcpy(currentMoveString, "d1f1");
  2240.         rf = 0;
  2241.         ff = 3;
  2242.         rt = 0;
  2243.         ft = 5;
  2244.     } else {
  2245.         strcpy(currentMoveString, "e1c1");
  2246.         rf = 0;
  2247.         ff = 4;
  2248.         rt = 0;
  2249.         ft = 2;
  2250.     }
  2251.     } else{
  2252.     if (boards[yyboardindex][7][3] == BlackKing) {
  2253.         /* ICS wild castling */
  2254.         strcpy(currentMoveString, "d8f8");
  2255.         rf = 7;
  2256.         ff = 3;
  2257.         rt = 7;
  2258.         ft = 5;
  2259.     } else {
  2260.         strcpy(currentMoveString, "e8c8");
  2261.         rf = 7;
  2262.         ff = 4;
  2263.         rt = 7;
  2264.         ft = 2;
  2265.     }
  2266.     }
  2267.     return (int) LegalityTest(boards[yyboardindex],
  2268.                   FakeFlags(yyboardindex), EP_UNKNOWN,
  2269.                   rf, ff, rt, ft, NULLCHAR);
  2270. }
  2271.     YY_BREAK
  2272. case 9:
  2273. YY_USER_ACTION
  2274. # line 506 "../parser.l"
  2275. {
  2276.     int rf, ff, rt, ft;
  2277.  
  2278.     if (WhiteOnMove(yyboardindex)) {
  2279.     if (boards[yyboardindex][0][3] == WhiteKing) {
  2280.         /* ICS wild castling */
  2281.         strcpy(currentMoveString, "d1b1");
  2282.         rf = 0;
  2283.         ff = 3;
  2284.         rt = 0;
  2285.         ft = 1;
  2286.     } else {
  2287.         strcpy(currentMoveString, "e1g1");
  2288.         rf = 0;
  2289.         ff = 4;
  2290.         rt = 0;
  2291.         ft = 6;
  2292.     }
  2293.     } else {
  2294.     if (boards[yyboardindex][7][3] == BlackKing) {
  2295.         /* ICS wild castling */
  2296.         strcpy(currentMoveString, "d8b8");
  2297.         rf = 7;
  2298.         ff = 3;
  2299.         rt = 7;
  2300.         ft = 1;
  2301.     } else {
  2302.         strcpy(currentMoveString, "e8g8");
  2303.         rf = 7;
  2304.         ff = 4;
  2305.         rt = 7;
  2306.         ft = 6;
  2307.     }
  2308.     }
  2309.     return (int) LegalityTest(boards[yyboardindex],
  2310.                   FakeFlags(yyboardindex), EP_UNKNOWN,
  2311.                   rf, ff, rt, ft, NULLCHAR);
  2312. }
  2313.     YY_BREAK
  2314. case 10:
  2315. YY_USER_ACTION
  2316. # line 545 "../parser.l"
  2317. {
  2318.     if (WhiteOnMove(yyboardindex))
  2319.       return (int) BlackWins;
  2320.     else
  2321.       return (int) WhiteWins;
  2322. }
  2323.     YY_BREAK
  2324. case 11:
  2325. YY_USER_ACTION
  2326. # line 552 "../parser.l"
  2327. {
  2328.     return (int) BlackWins;
  2329. }
  2330.     YY_BREAK
  2331. case 12:
  2332. YY_USER_ACTION
  2333. # line 556 "../parser.l"
  2334. {
  2335.     return (int) WhiteWins;
  2336. }
  2337.     YY_BREAK
  2338. case 13:
  2339. YY_USER_ACTION
  2340. # line 560 "../parser.l"
  2341. {
  2342.     return (int) WhiteWins;
  2343. }
  2344.     YY_BREAK
  2345. case 14:
  2346. YY_USER_ACTION
  2347. # line 564 "../parser.l"
  2348. {
  2349.     return (int) BlackWins;
  2350. }
  2351.     YY_BREAK
  2352. case 15:
  2353. YY_USER_ACTION
  2354. # line 568 "../parser.l"
  2355. {
  2356.     return (int) GameUnfinished;
  2357. }
  2358.     YY_BREAK
  2359. case 16:
  2360. YY_USER_ACTION
  2361. # line 572 "../parser.l"
  2362. {
  2363.     return (int) GameIsDrawn;
  2364. }
  2365.     YY_BREAK
  2366. case 17:
  2367. YY_USER_ACTION
  2368. # line 576 "../parser.l"
  2369. {
  2370.     return (int) GameIsDrawn;
  2371. }
  2372.     YY_BREAK
  2373. case 18:
  2374. YY_USER_ACTION
  2375. # line 580 "../parser.l"
  2376. {
  2377.     if (WhiteOnMove(yyboardindex))
  2378.       return (int) BlackWins;
  2379.     else
  2380.       return (int) WhiteWins;
  2381. }
  2382.     YY_BREAK
  2383. case 19:
  2384. YY_USER_ACTION
  2385. # line 587 "../parser.l"
  2386. {
  2387.     if (WhiteOnMove(yyboardindex))
  2388.       return (int) BlackWins;
  2389.     else
  2390.       return (int) WhiteWins;
  2391. }
  2392.     YY_BREAK
  2393. case 20:
  2394. YY_USER_ACTION
  2395. # line 594 "../parser.l"
  2396. {
  2397.     return (int) GameIsDrawn;
  2398. }
  2399.     YY_BREAK
  2400. case 21:
  2401. YY_USER_ACTION
  2402. # line 598 "../parser.l"
  2403. {
  2404.     return (int) GameIsDrawn;
  2405. }
  2406.     YY_BREAK
  2407. case 22:
  2408. YY_USER_ACTION
  2409. # line 602 "../parser.l"
  2410. {
  2411.     return (int) GameIsDrawn;
  2412. }
  2413.     YY_BREAK
  2414. case 23:
  2415. YY_USER_ACTION
  2416. # line 606 "../parser.l"
  2417. {
  2418.     return (int) WhiteWins;
  2419. }
  2420.     YY_BREAK
  2421. case 24:
  2422. YY_USER_ACTION
  2423. # line 610 "../parser.l"
  2424. {
  2425.     return (int) BlackWins;
  2426. }
  2427.     YY_BREAK
  2428. case 25:
  2429. YY_USER_ACTION
  2430. # line 614 "../parser.l"
  2431. {
  2432.     return (int) BlackWins;
  2433. }
  2434.     YY_BREAK
  2435. case 26:
  2436. YY_USER_ACTION
  2437. # line 618 "../parser.l"
  2438. {
  2439.     return (int) WhiteWins;
  2440. }
  2441.     YY_BREAK
  2442. case 27:
  2443. YY_USER_ACTION
  2444. # line 622 "../parser.l"
  2445. {
  2446.     return (int) WhiteWins;
  2447. }
  2448.     YY_BREAK
  2449. case 28:
  2450. YY_USER_ACTION
  2451. # line 626 "../parser.l"
  2452. {
  2453.     return (int) BlackWins;
  2454. }
  2455.     YY_BREAK
  2456. case 29:
  2457. YY_USER_ACTION
  2458. # line 630 "../parser.l"
  2459. {
  2460.     return (int) GameIsDrawn;
  2461. }
  2462.     YY_BREAK
  2463. case 30:
  2464. YY_USER_ACTION
  2465. # line 634 "../parser.l"
  2466. {
  2467.     return (int) GameUnfinished;
  2468. }
  2469.     YY_BREAK
  2470. case 31:
  2471. YY_USER_ACTION
  2472. # line 638 "../parser.l"
  2473. {
  2474.     /* move numbers */
  2475.     if ((yyleng == 1) && (yytext[0] == '1'))
  2476.       return (int) MoveNumberOne;
  2477. }
  2478.     YY_BREAK
  2479. case 32:
  2480. YY_USER_ACTION
  2481. # line 644 "../parser.l"
  2482. {
  2483.     /* elapsed time indication, e.g. (0:12) */
  2484.     return (int) ElapsedTime;
  2485. }
  2486.     YY_BREAK
  2487. case 33:
  2488. YY_USER_ACTION
  2489. # line 649 "../parser.l"
  2490. {
  2491.     /* position diagram enclosed in [-- --] */
  2492.     return (int) PositionDiagram;
  2493. }
  2494.     YY_BREAK
  2495. case 34:
  2496. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
  2497. yy_c_buf_p = yy_cp -= 1;
  2498. YY_DO_BEFORE_ACTION; /* set up yytext again */
  2499. YY_USER_ACTION
  2500. # line 654 "../parser.l"
  2501. {
  2502.     /* position diagram enclosed in {-- --} */
  2503.     return (int) PositionDiagram;
  2504. }
  2505.     YY_BREAK
  2506. case 35:
  2507. YY_USER_ACTION
  2508. # line 659 "../parser.l"
  2509. {
  2510.     return (int) PGNTag;
  2511. }
  2512.     YY_BREAK
  2513. case 36:
  2514. YY_USER_ACTION
  2515. # line 663 "../parser.l"
  2516. {
  2517.     return (int) GNUChessGame;
  2518. }
  2519.     YY_BREAK
  2520. case 37:
  2521. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
  2522. yy_c_buf_p = yy_cp -= 1;
  2523. YY_DO_BEFORE_ACTION; /* set up yytext again */
  2524. YY_USER_ACTION
  2525. # line 667 "../parser.l"
  2526. {
  2527.     return (int) XBoardGame;
  2528. }
  2529.     YY_BREAK
  2530. case 38:
  2531. YY_USER_ACTION
  2532. # line 671 "../parser.l"
  2533. {                               /* anything in {} */
  2534.     return (int) Comment;
  2535. }
  2536.     YY_BREAK
  2537. case 39:
  2538. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
  2539. yy_c_buf_p = yy_cp -= 1;
  2540. YY_DO_BEFORE_ACTION; /* set up yytext again */
  2541. YY_USER_ACTION
  2542. # line 675 "../parser.l"
  2543. {                                          /* ; to end of line */
  2544.     return (int) Comment;
  2545. }
  2546.     YY_BREAK
  2547. case 40:
  2548. YY_USER_ACTION
  2549. # line 679 "../parser.l"
  2550. {                               /* anything in [] */
  2551.     return (int) Comment;
  2552. }
  2553.     YY_BREAK
  2554. case 41:
  2555. YY_USER_ACTION
  2556. # line 683 "../parser.l"
  2557. {                /* nested () */
  2558.     return (int) Comment;
  2559. }
  2560.     YY_BREAK
  2561. case 42:
  2562. YY_USER_ACTION
  2563. # line 687 "../parser.l"
  2564. {                               /* >=2 chars in () */
  2565.     return (int) Comment;
  2566. }
  2567.     YY_BREAK
  2568. case 43:
  2569. YY_USER_ACTION
  2570. # line 691 "../parser.l"
  2571. {
  2572.     /* Skip mail headers */
  2573. }
  2574.     YY_BREAK
  2575. case 44:
  2576. YY_USER_ACTION
  2577. # line 695 "../parser.l"
  2578. {
  2579.     /* Skip random words */
  2580. }
  2581.     YY_BREAK
  2582. case 45:
  2583. YY_USER_ACTION
  2584. # line 699 "../parser.l"
  2585. {
  2586.     /* Skip everything else */
  2587. }
  2588.     YY_BREAK
  2589. case 46:
  2590. YY_USER_ACTION
  2591. # line 703 "../parser.l"
  2592. ECHO;
  2593.     YY_BREAK
  2594.             case YY_STATE_EOF(INITIAL):
  2595.                 yyterminate();
  2596.  
  2597.     case YY_END_OF_BUFFER:
  2598.         {
  2599.         /* Amount of text matched not including the EOB char. */
  2600.         int yy_amount_of_matched_text = yy_cp - yytext_ptr - 1;
  2601.  
  2602.         /* Undo the effects of YY_DO_BEFORE_ACTION. */
  2603.         *yy_cp = yy_hold_char;
  2604.  
  2605.         if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
  2606.             {
  2607.             /* We're scanning a new file or input source.  It's
  2608.              * possible that this happened because the user
  2609.              * just pointed yyin at a new source and called
  2610.              * yylex().  If so, then we have to assure
  2611.              * consistency between yy_current_buffer and our
  2612.              * globals.  Here is the right place to do so, because
  2613.              * this is the first action (other than possibly a
  2614.              * back-up) that will match for the new input source.
  2615.              */
  2616.             yy_n_chars = yy_current_buffer->yy_n_chars;
  2617.             yy_current_buffer->yy_input_file = yyin;
  2618.             yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
  2619.             }
  2620.  
  2621.         /* Note that here we test for yy_c_buf_p "<=" to the position
  2622.          * of the first EOB in the buffer, since yy_c_buf_p will
  2623.          * already have been incremented past the NUL character
  2624.          * (since all states make transitions on EOB to the
  2625.          * end-of-buffer state).  Contrast this with the test
  2626.          * in input().
  2627.          */
  2628.         if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
  2629.             { /* This was really a NUL. */
  2630.             yy_state_type yy_next_state;
  2631.  
  2632.             yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
  2633.  
  2634.             yy_current_state = yy_get_previous_state();
  2635.  
  2636.             /* Okay, we're now positioned to make the NUL
  2637.              * transition.  We couldn't have
  2638.              * yy_get_previous_state() go ahead and do it
  2639.              * for us because it doesn't know how to deal
  2640.              * with the possibility of jamming (and we don't
  2641.              * want to build jamming into it because then it
  2642.              * will run more slowly).
  2643.              */
  2644.  
  2645.             yy_next_state = yy_try_NUL_trans( yy_current_state );
  2646.  
  2647.             yy_bp = yytext_ptr + YY_MORE_ADJ;
  2648.  
  2649.             if ( yy_next_state )
  2650.                 {
  2651.                 /* Consume the NUL. */
  2652.                 yy_cp = ++yy_c_buf_p;
  2653.                 yy_current_state = yy_next_state;
  2654.                 goto yy_match;
  2655.                 }
  2656.  
  2657.             else
  2658.                 {
  2659.                             yy_cp = yy_c_buf_p;
  2660.                 goto yy_find_action;
  2661.                 }
  2662.             }
  2663.  
  2664.         else switch ( yy_get_next_buffer() )
  2665.             {
  2666.             case EOB_ACT_END_OF_FILE:
  2667.                 {
  2668.                 yy_did_buffer_switch_on_eof = 0;
  2669.  
  2670.                 if ( yywrap() )
  2671.                     {
  2672.                     /* Note: because we've taken care in
  2673.                      * yy_get_next_buffer() to have set up
  2674.                      * yytext, we can now set up
  2675.                      * yy_c_buf_p so that if some total
  2676.                      * hoser (like flex itself) wants to
  2677.                      * call the scanner after we return the
  2678.                      * YY_NULL, it'll still work - another
  2679.                      * YY_NULL will get returned.
  2680.                      */
  2681.                     yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
  2682.  
  2683.                     yy_act = YY_STATE_EOF(YY_START);
  2684.                     goto do_action;
  2685.                     }
  2686.  
  2687.                 else
  2688.                     {
  2689.                     if ( ! yy_did_buffer_switch_on_eof )
  2690.                         YY_NEW_FILE;
  2691.                     }
  2692.                 break;
  2693.                 }
  2694.  
  2695.             case EOB_ACT_CONTINUE_SCAN:
  2696.                 yy_c_buf_p =
  2697.                     yytext_ptr + yy_amount_of_matched_text;
  2698.  
  2699.                 yy_current_state = yy_get_previous_state();
  2700.  
  2701.                 yy_cp = yy_c_buf_p;
  2702.                 yy_bp = yytext_ptr + YY_MORE_ADJ;
  2703.                 goto yy_match;
  2704.  
  2705.             case EOB_ACT_LAST_MATCH:
  2706.                 yy_c_buf_p =
  2707.                 &yy_current_buffer->yy_ch_buf[yy_n_chars];
  2708.  
  2709.                 yy_current_state = yy_get_previous_state();
  2710.  
  2711.                 yy_cp = yy_c_buf_p;
  2712.                 yy_bp = yytext_ptr + YY_MORE_ADJ;
  2713.                 goto yy_find_action;
  2714.             }
  2715.         break;
  2716.         }
  2717.  
  2718.     default:
  2719.         YY_FATAL_ERROR(
  2720.             "fatal flex scanner internal error--no action found" );
  2721.     } /* end of action switch */
  2722.         } /* end of scanning one token */
  2723.     } /* end of yylex */
  2724.  
  2725.  
  2726. /* yy_get_next_buffer - try to read in a new buffer
  2727.  *
  2728.  * Returns a code representing an action:
  2729.  *    EOB_ACT_LAST_MATCH -
  2730.  *    EOB_ACT_CONTINUE_SCAN - continue scanning from current position
  2731.  *    EOB_ACT_END_OF_FILE - end of file
  2732.  */
  2733.  
  2734. static int yy_get_next_buffer()
  2735.     {
  2736.     register char *dest = yy_current_buffer->yy_ch_buf;
  2737.     register char *source = yytext_ptr - 1; /* copy prev. char, too */
  2738.     register int number_to_move, i;
  2739.     int ret_val;
  2740.  
  2741.     if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
  2742.         YY_FATAL_ERROR(
  2743.         "fatal flex scanner internal error--end of buffer missed" );
  2744.  
  2745.     if ( yy_current_buffer->yy_fill_buffer == 0 )
  2746.         { /* Don't try to fill the buffer, so this is an EOF. */
  2747.         if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
  2748.             {
  2749.             /* We matched a singled characater, the EOB, so
  2750.              * treat this as a final EOF.
  2751.              */
  2752.             return EOB_ACT_END_OF_FILE;
  2753.             }
  2754.  
  2755.         else
  2756.             {
  2757.             /* We matched some text prior to the EOB, first
  2758.              * process it.
  2759.              */
  2760.             return EOB_ACT_LAST_MATCH;
  2761.             }
  2762.         }
  2763.  
  2764.     /* Try to read more data. */
  2765.  
  2766.     /* First move last chars to start of buffer. */
  2767.     number_to_move = yy_c_buf_p - yytext_ptr;
  2768.  
  2769.     for ( i = 0; i < number_to_move; ++i )
  2770.         *(dest++) = *(source++);
  2771.  
  2772.     if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
  2773.         /* don't do the read, it's not guaranteed to return an EOF,
  2774.          * just force an EOF
  2775.          */
  2776.         yy_n_chars = 0;
  2777.  
  2778.     else
  2779.         {
  2780.         int num_to_read =
  2781.             yy_current_buffer->yy_buf_size - number_to_move - 1;
  2782.  
  2783.         while ( num_to_read <= 0 )
  2784.             { /* Not enough room in the buffer - grow it. */
  2785. #ifdef YY_USES_REJECT
  2786.             YY_FATAL_ERROR(
  2787. "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
  2788. #else
  2789.  
  2790.             /* just a shorter name for the current buffer */
  2791.             YY_BUFFER_STATE b = yy_current_buffer;
  2792.  
  2793.             int yy_c_buf_p_offset = yy_c_buf_p - b->yy_ch_buf;
  2794.  
  2795.             b->yy_buf_size *= 2;
  2796.             b->yy_ch_buf = (char *)
  2797.                 yy_flex_realloc( (void *) b->yy_ch_buf,
  2798.                          b->yy_buf_size );
  2799.  
  2800.             if ( ! b->yy_ch_buf )
  2801.                 YY_FATAL_ERROR(
  2802.                 "fatal error - scanner input buffer overflow" );
  2803.  
  2804.             yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
  2805.  
  2806.             num_to_read = yy_current_buffer->yy_buf_size -
  2807.                         number_to_move - 1;
  2808. #endif
  2809.             }
  2810.  
  2811.         if ( num_to_read > YY_READ_BUF_SIZE )
  2812.             num_to_read = YY_READ_BUF_SIZE;
  2813.  
  2814.         /* Read in more data. */
  2815.         YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
  2816.             yy_n_chars, num_to_read );
  2817.         }
  2818.  
  2819.     if ( yy_n_chars == 0 )
  2820.         {
  2821.         if ( number_to_move - YY_MORE_ADJ == 1 )
  2822.             {
  2823.             ret_val = EOB_ACT_END_OF_FILE;
  2824.             yyrestart( yyin );
  2825.             }
  2826.  
  2827.         else
  2828.             {
  2829.             ret_val = EOB_ACT_LAST_MATCH;
  2830.             yy_current_buffer->yy_buffer_status =
  2831.                 YY_BUFFER_EOF_PENDING;
  2832.             }
  2833.         }
  2834.  
  2835.     else
  2836.         ret_val = EOB_ACT_CONTINUE_SCAN;
  2837.  
  2838.     yy_n_chars += number_to_move;
  2839.     yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
  2840.     yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
  2841.  
  2842.     /* yytext begins at the second character in yy_ch_buf; the first
  2843.      * character is the one which preceded it before reading in the latest
  2844.      * buffer; it needs to be kept around in case it's a newline, so
  2845.      * yy_get_previous_state() will have with '^' rules active.
  2846.      */
  2847.  
  2848.     yytext_ptr = &yy_current_buffer->yy_ch_buf[1];
  2849.  
  2850.     return ret_val;
  2851.     }
  2852.  
  2853.  
  2854. /* yy_get_previous_state - get the state just before the EOB char was reached */
  2855.  
  2856. static yy_state_type yy_get_previous_state()
  2857.     {
  2858.     register yy_state_type yy_current_state;
  2859.     register char *yy_cp;
  2860.  
  2861.     register char *yy_bp = yytext_ptr;
  2862.  
  2863.     yy_current_state = yy_start;
  2864.     if ( yy_bp[-1] == '\n' )
  2865.         ++yy_current_state;
  2866.     yy_state_ptr = yy_state_buf;
  2867.     *yy_state_ptr++ = yy_current_state;
  2868.  
  2869.     for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
  2870.         {
  2871.         register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
  2872.         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
  2873.             {
  2874.             yy_current_state = (int) yy_def[yy_current_state];
  2875.             if ( yy_current_state >= 934 )
  2876.                 yy_c = yy_meta[(unsigned int) yy_c];
  2877.             }
  2878.         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
  2879.         *yy_state_ptr++ = yy_current_state;
  2880.         }
  2881.  
  2882.     return yy_current_state;
  2883.     }
  2884.  
  2885.  
  2886. /* yy_try_NUL_trans - try to make a transition on the NUL character
  2887.  *
  2888.  * synopsis
  2889.  *    next_state = yy_try_NUL_trans( current_state );
  2890.  */
  2891.  
  2892. #ifdef YY_USE_PROTOS
  2893. static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
  2894. #else
  2895. static yy_state_type yy_try_NUL_trans( yy_current_state )
  2896. yy_state_type yy_current_state;
  2897. #endif
  2898.     {
  2899.     register int yy_is_jam;
  2900.  
  2901.     register YY_CHAR yy_c = 1;
  2902.     while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
  2903.         {
  2904.         yy_current_state = (int) yy_def[yy_current_state];
  2905.         if ( yy_current_state >= 934 )
  2906.             yy_c = yy_meta[(unsigned int) yy_c];
  2907.         }
  2908.     yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
  2909.     *yy_state_ptr++ = yy_current_state;
  2910.     yy_is_jam = (yy_current_state == 933);
  2911.  
  2912.     return yy_is_jam ? 0 : yy_current_state;
  2913.     }
  2914.  
  2915.  
  2916. #ifdef YY_USE_PROTOS
  2917. static void yyunput( int c, register char *yy_bp )
  2918. #else
  2919. static void yyunput( c, yy_bp )
  2920. int c;
  2921. register char *yy_bp;
  2922. #endif
  2923.     {
  2924.     register char *yy_cp = yy_c_buf_p;
  2925.  
  2926.     /* undo effects of setting up yytext */
  2927.     *yy_cp = yy_hold_char;
  2928.  
  2929.     if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
  2930.         { /* need to shift things up to make room */
  2931.         /* +2 for EOB chars. */
  2932.         register int number_to_move = yy_n_chars + 2;
  2933.         register char *dest = &yy_current_buffer->yy_ch_buf[
  2934.                     yy_current_buffer->yy_buf_size + 2];
  2935.         register char *source =
  2936.                 &yy_current_buffer->yy_ch_buf[number_to_move];
  2937.  
  2938.         while ( source > yy_current_buffer->yy_ch_buf )
  2939.             *--dest = *--source;
  2940.  
  2941.         yy_cp += dest - source;
  2942.         yy_bp += dest - source;
  2943.         yy_n_chars = yy_current_buffer->yy_buf_size;
  2944.  
  2945.         if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
  2946.             YY_FATAL_ERROR( "flex scanner push-back overflow" );
  2947.         }
  2948.  
  2949.     if ( yy_cp > yy_bp && yy_cp[-1] == '\n' )
  2950.         yy_cp[-2] = '\n';
  2951.  
  2952.     *--yy_cp = (char) c;
  2953.  
  2954.  
  2955.     /* Note: the formal parameter *must* be called "yy_bp" for this
  2956.      * macro to now work correctly.
  2957.      */
  2958.     YY_DO_BEFORE_ACTION; /* set up yytext again */
  2959.     }
  2960.  
  2961.  
  2962. #ifdef __cplusplus
  2963. static int yyinput()
  2964. #else
  2965. static int input()
  2966. #endif
  2967.     {
  2968.     int c;
  2969.  
  2970.     *yy_c_buf_p = yy_hold_char;
  2971.  
  2972.     if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
  2973.         {
  2974.         /* yy_c_buf_p now points to the character we want to return.
  2975.          * If this occurs *before* the EOB characters, then it's a
  2976.          * valid NUL; if not, then we've hit the end of the buffer.
  2977.          */
  2978.         if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
  2979.             /* This was really a NUL. */
  2980.             *yy_c_buf_p = '\0';
  2981.  
  2982.         else
  2983.             { /* need more input */
  2984.             yytext_ptr = yy_c_buf_p;
  2985.             ++yy_c_buf_p;
  2986.  
  2987.             switch ( yy_get_next_buffer() )
  2988.                 {
  2989.                 case EOB_ACT_END_OF_FILE:
  2990.                     {
  2991.                     if ( yywrap() )
  2992.                         {
  2993.                         yy_c_buf_p =
  2994.                         yytext_ptr + YY_MORE_ADJ;
  2995.                         return EOF;
  2996.                         }
  2997.  
  2998.                     YY_NEW_FILE;
  2999. #ifdef __cplusplus
  3000.                     return yyinput();
  3001. #else
  3002.                     return input();
  3003. #endif
  3004.                     }
  3005.  
  3006.                 case EOB_ACT_CONTINUE_SCAN:
  3007.                     yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
  3008.                     break;
  3009.  
  3010.                 case EOB_ACT_LAST_MATCH:
  3011. #ifdef __cplusplus
  3012.                     YY_FATAL_ERROR(
  3013.                     "unexpected last match in yyinput()" );
  3014. #else
  3015.                     YY_FATAL_ERROR(
  3016.                     "unexpected last match in input()" );
  3017. #endif
  3018.                 }
  3019.             }
  3020.         }
  3021.  
  3022.     c = *(unsigned char *) yy_c_buf_p;    /* cast for 8-bit char's */
  3023.     *yy_c_buf_p = '\0';    /* preserve yytext */
  3024.     yy_hold_char = *++yy_c_buf_p;
  3025.  
  3026.     return c;
  3027.     }
  3028.  
  3029.  
  3030. #ifdef YY_USE_PROTOS
  3031. void yyrestart( FILE *input_file )
  3032. #else
  3033. void yyrestart( input_file )
  3034. FILE *input_file;
  3035. #endif
  3036.     {
  3037.     if ( ! yy_current_buffer )
  3038.         yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
  3039.  
  3040.     yy_init_buffer( yy_current_buffer, input_file );
  3041.     yy_load_buffer_state();
  3042.     }
  3043.  
  3044.  
  3045. #ifdef YY_USE_PROTOS
  3046. void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
  3047. #else
  3048. void yy_switch_to_buffer( new_buffer )
  3049. YY_BUFFER_STATE new_buffer;
  3050. #endif
  3051.     {
  3052.     if ( yy_current_buffer == new_buffer )
  3053.         return;
  3054.  
  3055.     if ( yy_current_buffer )
  3056.         {
  3057.         /* Flush out information for old buffer. */
  3058.         *yy_c_buf_p = yy_hold_char;
  3059.         yy_current_buffer->yy_buf_pos = yy_c_buf_p;
  3060.         yy_current_buffer->yy_n_chars = yy_n_chars;
  3061.         }
  3062.  
  3063.     yy_current_buffer = new_buffer;
  3064.     yy_load_buffer_state();
  3065.  
  3066.     /* We don't actually know whether we did this switch during
  3067.      * EOF (yywrap()) processing, but the only time this flag
  3068.      * is looked at is after yywrap() is called, so it's safe
  3069.      * to go ahead and always set it.
  3070.      */
  3071.     yy_did_buffer_switch_on_eof = 1;
  3072.     }
  3073.  
  3074.  
  3075. #ifdef YY_USE_PROTOS
  3076. void yy_load_buffer_state( void )
  3077. #else
  3078. void yy_load_buffer_state()
  3079. #endif
  3080.     {
  3081.     yy_n_chars = yy_current_buffer->yy_n_chars;
  3082.     yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
  3083.     yyin = yy_current_buffer->yy_input_file;
  3084.     yy_hold_char = *yy_c_buf_p;
  3085.     }
  3086.  
  3087.  
  3088. #ifdef YY_USE_PROTOS
  3089. YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
  3090. #else
  3091. YY_BUFFER_STATE yy_create_buffer( file, size )
  3092. FILE *file;
  3093. int size;
  3094. #endif
  3095.     {
  3096.     YY_BUFFER_STATE b;
  3097.  
  3098.     b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
  3099.  
  3100.     if ( ! b )
  3101.         YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
  3102.  
  3103.     b->yy_buf_size = size;
  3104.  
  3105.     /* yy_ch_buf has to be 2 characters longer than the size given because
  3106.      * we need to put in 2 end-of-buffer characters.
  3107.      */
  3108.     b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
  3109.  
  3110.     if ( ! b->yy_ch_buf )
  3111.         YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
  3112.  
  3113.     yy_init_buffer( b, file );
  3114.  
  3115.     return b;
  3116.     }
  3117.  
  3118.  
  3119. #ifdef YY_USE_PROTOS
  3120. void yy_delete_buffer( YY_BUFFER_STATE b )
  3121. #else
  3122. void yy_delete_buffer( b )
  3123. YY_BUFFER_STATE b;
  3124. #endif
  3125.     {
  3126.     if ( b == yy_current_buffer )
  3127.         yy_current_buffer = (YY_BUFFER_STATE) 0;
  3128.  
  3129.     yy_flex_free( (void *) b->yy_ch_buf );
  3130.     yy_flex_free( (void *) b );
  3131.     }
  3132.  
  3133.  
  3134. #ifdef YY_USE_PROTOS
  3135. void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
  3136. #else
  3137. void yy_init_buffer( b, file )
  3138. YY_BUFFER_STATE b;
  3139. FILE *file;
  3140. #endif
  3141.     {
  3142.     b->yy_input_file = file;
  3143.  
  3144.     /* We put in the '\n' and start reading from [1] so that an
  3145.      * initial match-at-newline will be true.
  3146.      */
  3147.  
  3148.     b->yy_ch_buf[0] = '\n';
  3149.     b->yy_n_chars = 1;
  3150.  
  3151.     /* We always need two end-of-buffer characters.  The first causes
  3152.      * a transition to the end-of-buffer state.  The second causes
  3153.      * a jam in that state.
  3154.      */
  3155.     b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
  3156.     b->yy_ch_buf[2] = YY_END_OF_BUFFER_CHAR;
  3157.  
  3158.     b->yy_buf_pos = &b->yy_ch_buf[1];
  3159.  
  3160.     b->yy_is_interactive = file ? isatty( fileno(file) ) : 0;
  3161.  
  3162.     b->yy_fill_buffer = 1;
  3163.  
  3164.     b->yy_buffer_status = YY_BUFFER_NEW;
  3165.     }
  3166.  
  3167.  
  3168. #ifdef YY_USE_PROTOS
  3169. static void yy_push_state( int new_state )
  3170. #else
  3171. static void yy_push_state( new_state )
  3172. int new_state;
  3173. #endif
  3174.     {
  3175.     if ( yy_start_stack_ptr >= yy_start_stack_depth )
  3176.         {
  3177.         int new_size;
  3178.  
  3179.         yy_start_stack_depth += YY_START_STACK_INCR;
  3180.         new_size = yy_start_stack_depth * sizeof( int );
  3181.  
  3182.         if ( ! yy_start_stack )
  3183.             yy_start_stack = (int *) yy_flex_alloc( new_size );
  3184.  
  3185.         else
  3186.             yy_start_stack = (int *) yy_flex_realloc(
  3187.                     (void *) yy_start_stack, new_size );
  3188.  
  3189.         if ( ! yy_start_stack )
  3190.             YY_FATAL_ERROR(
  3191.             "out of memory expanding start-condition stack" );
  3192.         }
  3193.  
  3194.     yy_start_stack[yy_start_stack_ptr++] = YY_START;
  3195.  
  3196.     BEGIN(new_state);
  3197.     }
  3198.  
  3199.  
  3200. static void yy_pop_state()
  3201.     {
  3202.     if ( --yy_start_stack_ptr < 0 )
  3203.         YY_FATAL_ERROR( "start-condition stack underflow" );
  3204.  
  3205.     BEGIN(yy_start_stack[yy_start_stack_ptr]);
  3206.     }
  3207.  
  3208.  
  3209. static int yy_top_state()
  3210.     {
  3211.     return yy_start_stack[yy_start_stack_ptr - 1];
  3212.     }
  3213.  
  3214.  
  3215. #ifdef YY_USE_PROTOS
  3216. static void yy_fatal_error( const char msg[] )
  3217. #else
  3218. static void yy_fatal_error( msg )
  3219. char msg[];
  3220. #endif
  3221.     {
  3222.     (void) fprintf( stderr, "%s\n", msg );
  3223.     exit( 1 );
  3224.     }
  3225.  
  3226.  
  3227.  
  3228. /* Redefine yyless() so it works in section 3 code. */
  3229.  
  3230. #undef yyless
  3231. #define yyless(n) \
  3232.     do \
  3233.         { \
  3234.         /* Undo effects of setting up yytext. */ \
  3235.         yytext[yyleng] = yy_hold_char; \
  3236.         yy_c_buf_p = yytext + n - YY_MORE_ADJ; \
  3237.         yy_hold_char = *yy_c_buf_p; \
  3238.         *yy_c_buf_p = '\0'; \
  3239.         yyleng = n; \
  3240.         } \
  3241.     while ( 0 )
  3242.  
  3243.  
  3244. /* Internal utility routines. */
  3245.  
  3246. #ifndef yytext_ptr
  3247. #ifdef YY_USE_PROTOS
  3248. static void yy_flex_strncpy( char *s1, const char *s2, int n )
  3249. #else
  3250. static void yy_flex_strncpy( s1, s2, n )
  3251. char *s1;
  3252. const char *s2;
  3253. int n;
  3254. #endif
  3255.     {
  3256.     register int i;
  3257.     for ( i = 0; i < n; ++i )
  3258.         s1[i] = s2[i];
  3259.     }
  3260. #endif
  3261.  
  3262.  
  3263. #ifdef YY_USE_PROTOS
  3264. static void *yy_flex_alloc( unsigned int size )
  3265. #else
  3266. static void *yy_flex_alloc( size )
  3267. unsigned int size;
  3268. #endif
  3269.     {
  3270.     return (void *) malloc( size );
  3271.     }
  3272.  
  3273. #ifdef YY_USE_PROTOS
  3274. static void *yy_flex_realloc( void *ptr, unsigned int size )
  3275. #else
  3276. static void *yy_flex_realloc( ptr, size )
  3277. void *ptr;
  3278. unsigned int size;
  3279. #endif
  3280.     {
  3281.     return (void *) realloc( ptr, size );
  3282.     }
  3283.  
  3284. #ifdef YY_USE_PROTOS
  3285. static void yy_flex_free( void *ptr )
  3286. #else
  3287. static void yy_flex_free( ptr )
  3288. void *ptr;
  3289. #endif
  3290.     {
  3291.     free( ptr );
  3292.     }
  3293. # line 703 "../parser.l"
  3294.  
  3295.  
  3296.  
  3297. static char *StringToLex;
  3298.  
  3299. #ifndef FLEX_SCANNER
  3300. static FILE *lexFP;
  3301.  
  3302. static int input()
  3303. {
  3304.     int ret;
  3305.  
  3306.     if (StringToLex != NULL) {
  3307.     ret = *StringToLex;
  3308.     if (ret == NULLCHAR)
  3309.       ret = EOF;
  3310.     else
  3311.       StringToLex++;
  3312.     } else if (unputCount > 0) {
  3313.     ret = unputBuffer[--unputCount];
  3314.     } else {
  3315.     ret = fgetc(lexFP);
  3316.     }
  3317.  
  3318.     if (ret == EOF)
  3319.       return 0;
  3320.     else
  3321.       return ret;
  3322. }
  3323.  
  3324. /*
  3325.     Return offset of next pattern within current file.
  3326. */
  3327. int yyoffset()
  3328. {
  3329.     int offset = ftell(lexFP) - unputCount;
  3330.  
  3331.     if (offset < 0) {
  3332.     offset = 0;
  3333.     }
  3334.     return(offset);
  3335. }
  3336.  
  3337. static void output(ch)
  3338.      int ch;
  3339. {
  3340.     fprintf(stderr, "PARSER BUG: unmatched character '%c' (0%o)\n",
  3341.         ch, ch);
  3342. }
  3343.  
  3344. static void unput(ch)
  3345.      int ch;
  3346. {
  3347.     if (ch == 0) return;
  3348.     if (StringToLex != NULL) {
  3349.     StringToLex--;
  3350.     } else {
  3351.     if (unputCount >= UNPUT_BUF_SIZE)
  3352.       fprintf(stderr, "PARSER BUG: unput buffer overflow '%c' (0%o)\n",
  3353.           ch, ch);
  3354.     unputBuffer[unputCount++] = ch;
  3355.     }
  3356. }
  3357.  
  3358. /* Get ready to lex from a new file.  Kludge below sticks
  3359.    an artificial newline at the front of the file, which the
  3360.    above grammar ignores, but which makes ^ at start of pattern
  3361.    match at the real start of the file.
  3362. */
  3363. void yynewfile(f)
  3364.      FILE *f;
  3365. {
  3366.     yy_text = (char *) yytext;
  3367.     lexFP = f;
  3368.     StringToLex = NULL;
  3369.     unputCount = 0;
  3370.     unput('\n'); /* kludge */
  3371. }
  3372.  
  3373. /* Get ready to lex from a string.  ^ at start of pattern WON'T
  3374.    match at the start of the string!
  3375. */
  3376. void yynewstr(s)
  3377.      char *s;
  3378. {
  3379.     yy_text = (char *) yytext;
  3380.     lexFP = NULL;
  3381.     StringToLex = s;
  3382.     unputCount = 0;
  3383. }
  3384. #endif /*!FLEX_SCANNER*/
  3385.  
  3386. #ifdef FLEX_SCANNER
  3387. void my_yy_input(buf, result, max_size)
  3388.      char *buf;
  3389.      int *result;
  3390.      int max_size;
  3391. {
  3392.     int count;
  3393.  
  3394.     if (StringToLex != NULL) {
  3395.     count = 0;
  3396.     while (*StringToLex != NULLCHAR) {
  3397.         *buf++ = *StringToLex++;
  3398.         count++;
  3399.     }
  3400.     *result = count;
  3401.     return;
  3402.     } else {
  3403.     count = fread(buf, 1, max_size, yyin);
  3404.     if (count == 0) {
  3405.         *result = YY_NULL;
  3406.     } else {
  3407.         *result = count;
  3408.     }
  3409.     return;
  3410.     }
  3411. }
  3412.  
  3413. /*
  3414.     Return offset of next pattern in the current file.
  3415. */
  3416. int yyoffset()
  3417. {
  3418.     int pos = yy_c_buf_p - yy_current_buffer->yy_ch_buf;
  3419.  
  3420.     return(ftell(yy_current_buffer->yy_input_file) -
  3421.        yy_n_chars + pos);
  3422. }
  3423.  
  3424. static YY_BUFFER_STATE my_file_buffer = NULL;
  3425.  
  3426. void yynewstr(s)
  3427.      char *s;
  3428. {
  3429.     if (my_file_buffer != NULL)
  3430.       yy_delete_buffer(my_file_buffer);
  3431.     StringToLex = s;
  3432.     my_file_buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
  3433.     yy_switch_to_buffer(my_file_buffer);
  3434.     yy_text = (char *) yytext;
  3435. }
  3436.  
  3437. void yynewfile(f)
  3438.      FILE *f;
  3439. {
  3440.     if (my_file_buffer != NULL)
  3441.       yy_delete_buffer(my_file_buffer);
  3442.     StringToLex = NULL;
  3443.     my_file_buffer = yy_create_buffer(f, YY_BUF_SIZE);
  3444.     yy_switch_to_buffer(my_file_buffer);
  3445.     yy_text = (char *) yytext;
  3446. }
  3447. #endif /*FLEX_SCANNER*/
  3448.  
  3449. int yywrap()
  3450. {
  3451.     return TRUE;
  3452. }
  3453.  
  3454. /* Parse a move from the given string s */
  3455. /* ^ at start of pattern WON'T work here unless using flex */
  3456. ChessMove yylexstr(boardIndex, s)
  3457.      int boardIndex;
  3458.      char *s;
  3459. {
  3460.     ChessMove ret;
  3461.     char *oldStringToLex;
  3462. #ifdef FLEX_SCANNER
  3463.     YY_BUFFER_STATE buffer, oldBuffer;
  3464. #endif
  3465.  
  3466.     yy_text = (char *) yytext;
  3467.     yyboardindex = boardIndex;
  3468.     oldStringToLex = StringToLex;
  3469.     StringToLex = s;
  3470. #ifdef FLEX_SCANNER
  3471.     buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
  3472.     oldBuffer = YY_CURRENT_BUFFER;
  3473.     yy_switch_to_buffer(buffer);
  3474. #endif /*FLEX_SCANNER*/
  3475.  
  3476.     ret = (ChessMove) yylex();
  3477.  
  3478. #ifdef FLEX_SCANNER
  3479.     if (oldBuffer != NULL)
  3480.       yy_switch_to_buffer(oldBuffer);
  3481.     yy_delete_buffer(buffer);
  3482. #endif /*FLEX_SCANNER*/
  3483.     StringToLex = oldStringToLex;
  3484.  
  3485.     return ret;
  3486. }
  3487.