Logo Search packages:      
Sourcecode: parrot version File versions  Download package

imclexer.c

#line 2 "compilers/imcc/imclexer.c"
/* A lexical scanner generated by flex */

/* Scanner skeleton version:
 * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
 */

#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5

#include <stdio.h>


/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
#ifdef c_plusplus
#ifndef __cplusplus
#define __cplusplus
#endif
#endif


#ifdef __cplusplus

#include <stdlib.h>
#include <unistd.h>

/* Use prototypes in function declarations. */
#define YY_USE_PROTOS

/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST

#else /* ! __cplusplus */

#if __STDC__

#define YY_USE_PROTOS
#define YY_USE_CONST

#endif      /* __STDC__ */
#endif      /* ! __cplusplus */

#ifdef __TURBOC__
 #pragma warn -rch
 #pragma warn -use
#include <io.h>
#include <stdlib.h>
#define YY_USE_CONST
#define YY_USE_PROTOS
#endif

#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#endif


#ifdef YY_USE_PROTOS
#define YY_PROTO(proto) proto
#else
#define YY_PROTO(proto) ()
#endif

/* Returned upon end-of-file. */
#define YY_NULL 0

/* Promotes a possibly negative, possibly signed char to an unsigned
 * integer for use as an array index.  If the signed char is negative,
 * we want to instead treat it as an 8-bit unsigned char, hence the
 * double cast.
 */
#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)

/* Enter a start condition.  This macro really ought to take a parameter,
 * but we do it the disgusting crufty way forced on us by the ()-less
 * definition of BEGIN.
 */
#define BEGIN yy_start = 1 + 2 *

/* Translate the current start state into a value that can be later handed
 * to BEGIN to return to the state.  The YYSTATE alias is for lex
 * compatibility.
 */
#define YY_START ((yy_start - 1) / 2)
#define YYSTATE YY_START

/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)

/* Special action meaning "start processing a new file". */
#define YY_NEW_FILE yyrestart( yyin )

#define YY_END_OF_BUFFER_CHAR 0

/* Size of default input buffer. */
#define YY_BUF_SIZE 16384

typedef struct yy_buffer_state *YY_BUFFER_STATE;

extern int yyleng;
extern FILE *yyin, *yyout;

#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2

/* The funky do-while in the following #define is used to turn the definition
 * int a single C statement (which needs a semi-colon terminator).  This
 * avoids problems with code like:
 *
 *    if ( condition_holds )
 *          yyless( 5 );
 *    else
 *          do_something_else();
 *
 * Prior to using the do-while the compiler would get upset at the
 * "else" because it interpreted the "if" statement as being all
 * done when it reached the ';' after the yyless() call.
 */

/* Return all but the first 'n' matched characters back to the input stream. */

#define yyless(n) \
      do \
            { \
            /* Undo effects of setting up yytext. */ \
            *yy_cp = yy_hold_char; \
            YY_RESTORE_YY_MORE_OFFSET \
            yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
            YY_DO_BEFORE_ACTION; /* set up yytext again */ \
            } \
      while ( 0 )

#define unput(c) yyunput( c, yytext_ptr )

/* The following is because we cannot portably get our hands on size_t
 * (without autoconf's help, which isn't available because we want
 * flex-generated scanners to compile on their own).
 */
typedef unsigned int yy_size_t;


struct yy_buffer_state
      {
      FILE *yy_input_file;

      char *yy_ch_buf;        /* input buffer */
      char *yy_buf_pos;       /* current position in input buffer */

      /* Size of input buffer in bytes, not including room for EOB
       * characters.
       */
      yy_size_t yy_buf_size;

      /* Number of characters read into yy_ch_buf, not including EOB
       * characters.
       */
      int yy_n_chars;

      /* Whether we "own" the buffer - i.e., we know we created it,
       * and can realloc() it to grow it, and should free() it to
       * delete it.
       */
      int yy_is_our_buffer;

      /* Whether this is an "interactive" input source; if so, and
       * if we're using stdio for input, then we want to use getc()
       * instead of fread(), to make sure we stop fetching input after
       * each newline.
       */
      int yy_is_interactive;

      /* Whether we're considered to be at the beginning of a line.
       * If so, '^' rules will be active on the next match, otherwise
       * not.
       */
      int yy_at_bol;

      /* Whether to try to fill the input buffer when we reach the
       * end of it.
       */
      int yy_fill_buffer;

      int yy_buffer_status;
#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
      /* When an EOF's been seen but there's still some text to process
       * then we mark the buffer as YY_EOF_PENDING, to indicate that we
       * shouldn't try reading from the input source any more.  We might
       * still have a bunch of tokens to match, though, because of
       * possible backing-up.
       *
       * When we actually see the EOF, we change the status to "new"
       * (via yyrestart()), so that the user can continue scanning by
       * just pointing yyin at a new input file.
       */
#define YY_BUFFER_EOF_PENDING 2
      };

static YY_BUFFER_STATE yy_current_buffer = 0;

/* We provide macros for accessing buffer states in case in the
 * future we want to put the buffer states in a more general
 * "scanner state".
 */
#define YY_CURRENT_BUFFER yy_current_buffer


/* yy_hold_char holds the character lost when yytext is formed. */
static char yy_hold_char;

static int yy_n_chars;        /* number of characters read into yy_ch_buf */


int yyleng;

/* Points to current character in buffer. */
static char *yy_c_buf_p = (char *) 0;
static int yy_init = 1;       /* whether we need to initialize */
static int yy_start = 0;      /* start state number */

/* Flag which is used to allow yywrap()'s to do buffer switches
 * instead of setting up a fresh yyin.  A bit of a hack ...
 */
static int yy_did_buffer_switch_on_eof;

void yyrestart YY_PROTO(( FILE *input_file ));

void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
void yy_load_buffer_state YY_PROTO(( void ));
YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )

YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));

static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
static void yy_flex_free YY_PROTO(( void * ));

#define yy_new_buffer yy_create_buffer

#define yy_set_interactive(is_interactive) \
      { \
      if ( ! yy_current_buffer ) \
            yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
      yy_current_buffer->yy_is_interactive = is_interactive; \
      }

#define yy_set_bol(at_bol) \
      { \
      if ( ! yy_current_buffer ) \
            yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
      yy_current_buffer->yy_at_bol = at_bol; \
      }

#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)

typedef unsigned char YY_CHAR;
FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
typedef int yy_state_type;
extern char *yytext;
#define yytext_ptr yytext

static yy_state_type yy_get_previous_state YY_PROTO(( void ));
static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
static int yy_get_next_buffer YY_PROTO(( void ));
static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));

/* Done after the current pattern has been matched and before the
 * corresponding action - sets up yytext.
 */
#define YY_DO_BEFORE_ACTION \
      yytext_ptr = yy_bp; \
      yyleng = (int) (yy_cp - yy_bp); \
      yy_hold_char = *yy_cp; \
      *yy_cp = '\0'; \
      yy_c_buf_p = yy_cp;

#define YY_NUM_RULES 150
#define YY_END_OF_BUFFER 151
static yyconst short int yy_accept[1228] =
    {   0,
        0,    0,    0,    0,    0,    0,   19,   19,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        3,    3,  151,  139,  138,   11,  138,  139,  139,   12,
      139,  139,  139,  139,  139,  139,  121,  139,  100,  139,
      126,  126,  139,   91,  139,   93,  124,  124,  124,  124,
      124,  124,  124,  124,  124,  124,  124,  124,  124,  139,
      139,   12,  100,   17,  138,  138,  139,  139,  139,  139,
      124,  124,  139,   17,  149,  146,  141,  146,  149,  149,
      149,  149,  149,  126,  126,  149,  147,  147,  147,  147,
      145,  145,  149,   17,   19,   20,   19,   19,   19,   19,

       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
      150,  139,    9,    9,  139,  139,  139,  139,  139,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    6,  139,   10,  139,  139,  139,  139,  139,
      126,  126,  139,  139,  139,  139,  139,  139,  139,   13,
      139,  139,  139,  139,  139,  126,  126,  139,  139,  139,
      139,  139,  139,  150,    1,  150,  150,  150,  150,  150,
      126,  126,  150,  150,  150,  150,  150,  150,    3,    2,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,  138,    0,   11,   96,    0,  131,    0,

        0,    0,    0,    0,  106,   88,  109,    0,   97,  104,
        0,  126,  102,  103,   98,  101,  125,  115,  123,  123,
      123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
      123,  123,  107,  105,  125,    0,    0,  130,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,   85,   92,
       95,   94,   86,  120,    0,  124,  122,  124,  124,  124,
      124,  124,   16,  124,  124,  124,  124,   73,  124,  124,
      124,  124,  124,  124,  124,  124,  124,  124,  110,   89,
      111,   90,    0,  123,  138,  123,  123,  123,  123,  123,
      123,    0,    0,    0,  123,  146,  141,  146,    0,    0,

      148,  148,  148,  148,  147,    0,   16,  147,  147,  145,
      145,   19,   20,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       16,   19,   19,   19,   19,    0,    9,    0,   16,    0,
        0,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    0,   10,    0,    0,    0,  131,    0,    0,    0,
        0,  126,  125,    0,  125,    0,    0,  130,    0,    0,
        0,    0,    0,   16,    0,    0,    0,    0,   13,    0,
        0,    0,  131,    0,    0,    0,    0,  126,  125,    0,

      125,    0,    0,  130,    0,    0,    0,    0,    0,   16,
        0,    0,    0,    0,    1,    0,    0,    0,  131,    0,
        0,    0,    0,  126,  125,    0,  125,    0,    0,  130,
        0,    0,    0,    0,    0,   16,    0,    0,    0,    3,
        2,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,   99,  134,  135,  137,  136,    0,  123,  123,
      123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
      123,  123,  123,  123,  123,  123,  123,  123,  123,  108,
      125,  128,    0,  125,  129,  127,    0,    0,    0,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      113,  112,   87,  119,    0,  124,    0,  124,  124,  124,
      124,  124,  124,   16,  124,  124,  124,  124,   76,  124,
      124,   79,  124,   77,  124,   83,  124,  124,  124,    0,
      123,  123,  123,  123,  123,    0,  142,  144,  148,    0,
      148,  148,  148,  147,   16,  147,  147,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   16,
       19,   19,   19,   19,    0,   16,    0,    0,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    0,    0,  125,  128,    0,  125,  129,  127,

        0,    0,    0,    0,   16,    0,    0,    0,    0,    0,
      125,  128,    0,  125,  129,  127,    0,    0,    0,    0,
       16,    0,    0,    0,    0,    0,  125,  128,    0,  125,
      129,  127,    0,    0,    0,    0,   16,    0,    0,    0,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    0,  125,   62,   23,
      123,   25,  123,  123,  123,  123,   22,  123,  123,  123,
      123,  123,  123,  123,  123,  123,  123,   24,   21,  123,
        0,    0,    0,   52,    0,    0,    0,    0,    0,    0,
        0,    0,    0,  132,    0,    0,  114,    0,  133,    0,

      122,    0,    0,  124,  124,  124,  124,  124,  124,   80,
      124,  124,   72,  124,  124,   75,  124,  124,  124,  124,
      124,    0,  123,  123,  123,  123,  144,    0,  148,  148,
      148,    0,  147,  147,  147,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,    0,    0,    0,    0,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    0,  125,    0,
        0,    0,  132,    0,    0,    0,    0,    0,  133,    0,
        0,    0,    0,    0,    0,    0,    0,  125,    0,    0,
        0,  132,    0,    0,    0,    0,    0,  133,    0,    0,

        0,    0,    0,    0,    0,    0,  125,    0,    0,    0,
      132,    0,    0,    0,    0,    0,  133,    0,    0,    0,
        0,    0,    0,    0,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
      123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
      123,  123,  123,  123,  123,  123,  123,  123,   50,   57,
        0,   47,   46,    0,    0,    0,    0,    0,    0,    0,
       43,  124,   40,   39,  124,  124,   78,  124,  124,  124,
      124,  124,  124,  124,  124,    0,  123,  123,  123,   15,
      140,  148,  148,  147,  147,  147,   19,   19,   19,   19,

       19,   18,   19,    0,    0,    0,    0,    5,    5,    5,
        5,    5,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    3,    3,    3,
        3,    3,  123,   67,  123,  123,  123,  123,  123,   65,
      116,  123,  123,  123,   69,  123,  123,  123,  123,  123,
      123,  123,   55,    0,    0,   45,    0,    0,   51,    0,
        0,  124,   38,  124,   81,   37,  124,   82,  124,  124,
       84,   74,    0,   14,   67,  148,  148,  147,  147,  147,
       19,   19,   19,   19,   19,    0,    0,    0,    0,    5,
        5,    5,    5,    5,    0,    0,    0,    0,    0,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    3,
        3,    3,    3,    3,  123,  123,  123,   66,  123,  123,
      123,  123,  123,  123,  123,  123,  123,   70,   53,   56,
        0,   44,    0,    0,    0,   58,  124,  124,  124,  124,
      124,    0,  123,  143,   70,  147,  147,  147,   19,   19,
       19,   19,   19,   70,    0,    0,    0,    5,    5,    5,
        5,    5,   70,    0,    0,    0,    0,   70,    0,    0,
        0,    0,   70,    0,    0,    0,    0,    3,    3,    3,
        3,    3,   63,  123,  123,  123,  118,  123,  123,  123,
      123,  123,  123,   27,   32,    0,    0,    0,    0,  124,

      124,  124,    0,    8,    0,  123,  147,   19,   19,    8,
       19,    0,    5,    5,    5,    5,    0,    0,    8,    0,
        0,    0,    8,    0,    0,    0,    8,    0,    3,    3,
        3,    3,  123,  123,  123,   31,  123,  123,   29,  123,
       28,  123,    0,   60,   59,   49,  124,   42,  124,    7,
        4,  117,  147,   19,    7,    4,    0,    5,    0,    7,
        4,    0,    7,    4,    0,    7,    4,    3,    3,    3,
      123,  123,  123,   30,   61,   26,  123,  123,   48,   41,
      124,  147,   19,    0,    5,    0,    0,    0,    3,  123,
      123,  123,  123,  123,  123,   71,   71,   19,   71,    5,

       71,   71,   71,    3,  123,   54,   68,  123,  123,  123,
      123,   64,  123,  123,  123,  123,  123,  123,  123,   36,
      123,  123,   34,  123,   35,   33,    0
    } ;

static yyconst int yy_ec[256] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
        1,    2,    4,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    2,    1,    1,    1,    1,
        1,    5,    6,    7,    8,    9,   10,   11,   12,    1,
        1,   13,   14,   15,   16,   17,   18,   19,   20,   21,
       21,   21,   21,   21,   21,   22,   22,   23,    1,   24,
       25,   26,    1,   27,   28,   29,   30,   31,   32,   33,
       34,   35,   36,   34,   34,   37,   38,   39,   40,   41,
       34,   34,   42,   43,   44,   34,   34,   45,   34,   34,
        1,   46,    1,    1,   47,    1,   48,   49,   50,   51,

       52,   53,   54,   55,   56,   57,   34,   58,   59,   60,
       61,   62,   34,   63,   64,   65,   66,   67,   68,   69,
       70,   34,    1,   71,    1,   72,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,

        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1
    } ;

static yyconst int yy_meta[73] =
    {   0,
        1,    1,    2,    1,    1,    1,    3,    1,    4,    1,
        1,    1,    1,    1,    1,    5,    6,    1,    7,    7,
        7,    7,    8,    1,    6,    1,    9,   10,   10,   10,
       10,   10,   10,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,    1,   11,   10,   10,   10,
       10,   10,   10,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        1,    1
    } ;

static yyconst short int yy_base[1399] =
    {   0,
        0,   65,   89,   67,  161,   72,  233,   71,  305, 4993,
      377, 4992,   97,  101,  449, 4991,  521, 4990,  593, 4989,
      665, 4987, 4994, 8987,   81, 8987,  122, 4968,   82, 8987,
       93, 4967,   76, 4979,  127,  721, 8987,  728,  738,   63,
      792,  747,  769,   86, 4965,  105,  826,  762,  836,  827,
      856,  857,  766,  859,  860,  861,  865,  876,  877,  736,
      719, 4931,  925, 4963,  142,  154,  884,  979,  861, 4963,
      916,  920, 4934, 8987, 8987,  801, 8987,  892,  749,    0,
     4973,  932,  988,    0,  996, 4960,  749,  945,  800,  758,
      953,  988, 4925, 8987,    0, 8987, 4979,  769, 4969, 1002,

     1023, 1069, 1032, 4956, 1138, 1210, 1036, 1040, 4921, 4928,
     8987, 1046, 1051, 1083, 4954, 1055,  866,  728, 4914,    0,
        0,  928, 1105, 1074, 1266, 1148, 4947, 1335, 1407, 1060,
     1138, 4912,  841,  835, 8987,  887, 1125,  966, 1172, 1183,
     1477, 1197, 1002, 1546, 1618, 1228, 1219, 1108,  930, 8987,
      999, 1248, 1008, 1240, 1270, 1688, 1264, 1113, 1757, 1829,
     1258, 1248, 1130, 1027, 8987, 1169, 1316, 1194, 1351, 1372,
     1899, 1334, 1175, 1968, 2040, 1309, 1345, 1250,    0, 8987,
     4966,  979, 4954, 1365, 1379, 2096, 1418, 4920, 2165, 2237,
     1424, 1437, 4885, 1297, 1400, 8987, 8987, 1167, 8987,    0,

     1441, 1445, 1453, 1463, 8987, 8987, 8987, 4930, 8987, 8987,
     1471, 1483, 8987, 8987, 8987, 8987, 1491, 8987,    0, 4904,
     4877, 4878, 4878,  725, 4877,  799,  850,   88,  984, 4884,
      910, 4879, 4909, 8987, 1546, 1162, 1511, 8987, 1244,    0,
     4873, 4874, 4872,  869, 1476, 1057, 4863, 4865, 1309, 8987,
     8987, 8987, 1170, 4899, 4898, 1301,  811, 1564, 1566, 1565,
     1567, 1568, 1593, 1636, 1637, 1638, 1584, 1639, 1647, 1649,
     1657, 1658, 1677, 1659, 1679, 1662, 1660, 1688, 8987, 8987,
     8987, 8987, 4864, 1148, 1447, 4854, 4854, 4861, 4864, 4863,
       91,  704, 4844, 1300, 4848, 1739, 8987, 1748, 4885,    0,

     4884,  848, 1261, 1373, 1431, 1090, 1768, 1518, 1453, 1774,
     1790,    0, 8987, 1344,    0,    0, 4894, 1777, 1839, 1793,
     4842, 1845, 1277, 1786,    0, 1467, 2291, 1509, 2344, 2416,
     2488, 1801, 1859, 4848, 4837, 4839, 1873, 1319, 1863, 1478,
      971,    0, 1533,    0, 1797, 1913, 1935, 4834, 1976, 1358,
     1892,    0, 1711, 2542, 1587, 2595, 2667, 2739, 1942, 1991,
     4840, 1385, 8987, 1504, 2022, 2027, 1582, 1593, 1735, 1884,
     1985, 2068, 2072, 1806, 2077, 1923, 2118, 1647, 1996, 2809,
     1934, 2862, 2934, 3006, 2016, 2002, 2075, 1718, 8987, 1751,
     2103, 2139, 1782, 1823, 1895, 2015, 2183, 2265, 2273, 2098,

     2360, 2189, 2196, 1869, 2203, 3076, 2123, 3129, 3201, 3273,
     2133, 2206, 2210, 1919, 8987, 1949, 2155, 2226, 1955, 1998,
     2228, 2261, 2311, 2516, 2452, 2216, 2524, 2271, 2380, 2029,
     2368, 3343, 2401, 3396, 3468, 3540, 2315, 2426, 2394,    0,
     8987, 1555,    0,    0, 4883, 2176, 2605, 2611, 4831, 2747,
     2050, 2438,    0, 2063, 3594, 1672, 3647, 3719, 3791, 2456,
     2460, 4837, 2276, 2279, 2307, 2444, 2448, 2502,    0, 4855,
     4837, 4830, 4837, 4822, 4825, 1627, 4816, 4834, 4833, 4817,
     4822, 4824, 4816, 4828, 4829, 2086, 4827, 4816, 4822, 8987,
     2751, 2144, 2510, 2520, 2354,    0, 4811, 4823, 4811, 4800,

     4820, 4811, 4801, 4807, 4799, 4798, 4798, 4795, 1650, 4848,
     8987, 8987, 4834, 8987, 1699,  939, 4835, 2542, 2280, 2630,
     2629, 2765, 2766, 2631, 2771, 2768, 2777, 3024, 2639, 2781,
     3025, 2798, 2873, 2809, 2874, 2875, 3028, 3026, 3037, 4797,
     4800, 4795, 4804, 4799, 4789, 4824, 4823, 4820, 4802, 4801,
     1391,  770,  739, 4800, 1521, 1847, 2391, 2564, 4774, 2873,
     2215, 2595, 2824, 2390, 3845, 1727, 4809, 2101, 3898, 3970,
     4042, 2061, 4760, 4754, 4770, 4794, 2244, 2606, 2833, 4768,
     2880, 2346, 2894, 2898, 2568, 4096, 1712, 4149, 4221, 4293,
     2333, 4755, 3051, 2563, 3071, 2631, 3080, 3145, 2903, 4363,

     2802, 3054, 3110, 4416, 4488, 4560, 2762, 3058, 3157, 3147,
     3301, 3165, 3177, 3305, 3297, 4630, 3112, 3108, 3303, 4683,
     4755, 4827, 3006, 3299, 3336, 3331, 3309, 3363, 3365, 3412,
     3420, 4897, 3564, 3179, 3571, 4950, 5022, 5094, 3385, 3377,
     3430, 4766, 3568, 2358, 2908, 3167, 2890, 5148, 2508, 4801,
     2771, 5201, 5273, 5345, 3395, 4752, 3406, 3439, 4764,    0,
     4746, 4749, 4761, 4758, 4748, 4744,    0, 4756, 4740, 4747,
     4748, 4752, 4750, 4750, 4742, 4729, 4728,    0,    0, 4735,
     4732, 4726, 4738, 8987, 4738, 4728, 4732, 4721, 1421, 4733,
     4719, 4720, 2789, 8987,    0, 4770, 8987, 3308, 8987,    0,

     4754, 4753, 4768, 3560, 3561, 3658, 3582, 3585, 3586, 3027,
     3681, 3659, 3660, 3686, 3699, 3668, 3739, 3694, 3751, 3689,
     3690, 4722, 4706, 4689, 4705, 4748, 4727, 4726,  915, 1400,
     1087, 4725, 3413, 3580, 3581, 3560, 3611, 4693, 3331,    0,
        0, 4734, 3344,    0,    0, 5417, 4738, 5489, 5561, 4688,
     4691, 2482, 4688, 1131, 1801, 2337, 3619, 3666, 4687, 3689,
        0, 5633, 4733, 5705, 5777, 4683, 4686, 3749, 3760, 3118,
     3780, 3815, 2546, 2657, 3451, 3754, 3824, 3826, 2819, 2847,
     5849, 3769, 5921, 5993, 4681, 3414, 3820, 3831, 3782, 3840,
     3842, 2900, 3035, 3856, 3877, 3880, 3927, 3159, 3189, 6065,

     3851, 6137, 6209, 4680, 3817, 3916, 3929, 3887, 3951, 3953,
     3333, 3339, 3949, 3986, 3959, 3961, 3385, 3569, 6281, 3936,
     6353, 6425, 4679, 3988, 3981, 3989, 4680, 3825,    0,    0,
     4721, 3872,    0,    0, 6497, 4725, 6569, 6641, 4675, 4678,
     4669, 4662, 4678, 4662, 4676, 4657, 4672, 4663, 4659, 4672,
     4654, 4667, 4657, 3963, 4656, 4656, 4650, 4661, 8987, 8987,
     4660, 8987, 8987, 4649, 4649, 4651, 4642, 4639, 4649, 4615,
     4005, 4008, 4009, 4010, 4053, 4054, 4013, 4014, 4055, 4070,
     4071, 4074, 4082, 4076, 4173, 4671, 4672, 4609, 4609, 8987,
     4649, 1690, 1004, 4058, 3869, 1924, 4612, 6713, 6785, 1643,

     4665, 8987, 4666, 4609, 1866, 2230, 2121, 4608, 6857, 6929,
     1857, 4661, 4097, 7001, 7073, 2393, 3675, 4106, 7145, 7217,
     2497, 3942, 4119, 1748, 2521, 1216, 4134, 4606, 2593, 3101,
     1550, 4659, 4609,    0, 4597, 4603, 4596, 4597, 4599,    0,
        0, 4596, 4582, 4595,    0, 4590, 4593, 4580, 4573, 4590,
     4571, 4569,    0, 4572, 4576, 8987, 4568, 4565, 8987, 4560,
     4548, 4161, 4160, 4170, 4171, 4176, 4192, 4182, 4191, 4232,
     4193, 4195, 4230, 8987, 4553, 4252, 2753, 3040, 4059, 4079,
     4531, 3312,  788, 1816, 4239, 4528, 2833, 2051, 2529, 4477,
     3387, 2740, 2775, 4243, 3615, 3730, 3404, 3642, 4266, 3853,

     3790, 4082, 4083, 4309, 4273, 2112, 3118, 3138, 4321, 4462,
     2580, 3873, 3982, 4252, 4445, 4394, 4368, 4330, 4325, 4297,
     4300, 4290, 4220, 4199, 4184, 4092, 3996,    0,    0,    0,
     3987, 8987, 3938, 3911, 3883, 8987, 4328, 4311, 4336, 4345,
     4353, 4261, 3868, 4331, 3894, 3569, 4355, 4358,    0, 3011,
     3909, 4015, 4367, 8987, 2396, 2380, 3309,    0, 4038, 4274,
     4295, 4385, 3603, 4054, 4317, 4321, 4432, 4104, 4123, 4341,
     4342, 4444, 4209, 2251, 3089, 4115, 4452,    0, 2282, 4163,
     4212, 4439,    0, 3818, 3759, 3733,    0, 3696, 3653, 3616,
     3592, 3579, 3498, 3417,    0, 3365, 3358, 3320, 3286, 4461,

     4499, 4459, 3709, 3306, 3282, 3045, 4422, 3698, 3770, 3040,
     3015, 4167, 4000, 3999, 2916, 2871, 4145, 4514, 4286, 4520,
     4312, 4525, 4405, 4532, 4253, 4538, 4475, 4543, 4341, 4462,
     2814, 2788, 2693, 2688, 2584,    0, 2565, 2550,    0, 2509,
        0, 4380, 2495, 8987, 8987, 8987, 4571, 4528, 4572, 8987,
     8987,    0, 4493, 4340,    0,    0, 2420, 4418, 4468, 4482,
     4545, 4475, 4549, 4551, 4526, 4554, 4587, 4536,    0,    0,
     2478, 2341, 2240,    0,    0, 2223, 2169, 2128, 8987, 4584,
     4589, 4581, 4538, 1926, 4550, 4551, 4552, 4259, 4555, 2106,
     2031, 1955, 4550, 1944, 1914, 4614, 4601, 1846, 1778, 1698,

     1576, 1461, 1439, 1324, 1317,    0,    0, 1305, 1145, 1111,
     1073,    0, 1034, 1035,  919,  920,  893,  869,  856,    0,
      676,   82,    0,   18,    0,    0, 8987, 7289, 7300, 7306,
     7314, 7317, 7325, 7332, 7343, 7354, 7365, 7376, 7383, 7394,
     7405, 7416, 7427, 7438, 7449, 7460, 7471, 7482, 7493, 7504,
     7515, 7526, 7537, 7548, 7559, 7570, 7581, 7592, 7603, 7608,
     7613, 7619, 7627, 7636, 7641, 7644, 7649, 7656, 7667, 7678,
     7689, 7700, 7711, 7722, 7733, 7744, 7755, 7766, 7777, 7788,
     7799, 7810, 7821, 7832, 7843, 7854, 7865, 7876, 7887, 7898,
     7909, 7920, 7931, 7936, 7941, 7951, 7962, 7973, 7981, 7988,

     7996, 8001, 8006, 8011, 8016, 8023, 8034, 8045, 8056, 8067,
     8078, 8089, 8096, 8107, 8118, 8129, 8140, 8151, 8162, 8173,
     8184, 8195, 8206, 8217, 8228, 8239, 8250, 8261, 8272, 8283,
     8294, 8305, 8316, 8327, 8338, 8349, 8360, 8371, 8382, 8393,
     8404, 8409, 8420, 8431, 8442, 8449, 8457, 8462, 8467, 8474,
     8485, 8496, 8507, 8518, 8529, 8540, 8547, 8558, 8569, 8580,
     8591, 8602, 8613, 8624, 8635, 8646, 8657, 8668, 8679, 8690,
     8701, 8712, 8723, 8734, 8745, 8756, 8767, 8778, 8789, 8800,
     8811, 8822, 8833, 8844, 8855, 8860, 8868, 8873, 8880, 8891,
     8902, 8909, 8920, 8931, 8942, 8953, 8964, 8975

    } ;

static yyconst short int yy_def[1399] =
    {   0,
     1227,    1,    1,    3, 1227,    5, 1227,    7, 1227,    9,
     1227,   11,    9,    9, 1227,   15, 1227,   17, 1227,   19,
     1227,   21, 1227, 1227, 1227, 1227, 1227, 1227, 1228, 1227,
     1227, 1227, 1227, 1229, 1227, 1227, 1227, 1227, 1230, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1231, 1231, 1231, 1231,
     1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1227,
     1227, 1227, 1230, 1227, 1227, 1227, 1227, 1230, 1227, 1227,
     1231, 1231,   68, 1227, 1227, 1227, 1227, 1227, 1228, 1232,
     1229, 1227, 1233,   41, 1227, 1227, 1234, 1234, 1234, 1234,
     1227, 1227, 1227, 1227, 1235, 1227, 1235, 1236, 1237, 1235,

     1235, 1235, 1235, 1235, 1238, 1238,  106,  106, 1235, 1235,
     1227, 1227,   41, 1227, 1239, 1239, 1239, 1239, 1227, 1240,
     1240, 1241, 1240, 1240, 1240, 1240, 1240, 1242, 1242,  129,
      129, 1240, 1228, 1243, 1227, 1243, 1244, 1245, 1243, 1243,
     1243,  141, 1243, 1246, 1246,  145,  145, 1243, 1247, 1227,
     1247, 1248, 1249, 1247, 1247, 1247,  156, 1247, 1250, 1250,
      160,  160, 1247, 1251, 1227, 1251, 1252, 1253, 1251, 1251,
     1251,  171, 1251, 1254, 1254,  175,  175, 1251, 1255, 1227,
     1255, 1256, 1257, 1255, 1255, 1255, 1255, 1255, 1258, 1258,
      190,  190, 1255, 1227, 1227, 1227, 1227, 1228, 1227, 1228,

     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1259, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1260, 1260,
     1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
     1260, 1260, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1261,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1262, 1263, 1264, 1263, 1263, 1263,
     1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263,
     1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1227, 1227,
     1227, 1227, 1227, 1260, 1227, 1260, 1260, 1260, 1260, 1260,
     1260, 1227, 1227, 1227, 1260, 1227, 1227, 1227, 1265, 1266,

     1267, 1267, 1267, 1267, 1268, 1264, 1268, 1268, 1268, 1227,
     1227, 1269, 1227, 1270, 1269, 1270, 1271, 1269, 1269, 1269,
     1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1272, 1273,
     1272,  331,  331, 1269, 1269, 1227, 1227, 1264, 1262, 1262,
     1262, 1274, 1275, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
     1274, 1274, 1274, 1274, 1274, 1276, 1227, 1276,  358,  358,
     1274, 1277, 1227, 1277, 1278, 1278, 1277, 1278, 1279, 1279,
     1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277,
     1277, 1280, 1227, 1280,  384,  384, 1277, 1281, 1227, 1281,
     1282, 1282, 1281, 1282, 1283, 1283, 1281, 1281, 1281, 1281,

     1281, 1281, 1281, 1281, 1281, 1281, 1281, 1284, 1227, 1284,
      410,  410, 1281, 1285, 1227, 1285, 1286, 1286, 1285, 1286,
     1287, 1287, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
     1285, 1285, 1285, 1288, 1227, 1288,  436,  436, 1285, 1289,
     1227, 1290, 1289, 1290, 1291, 1289, 1289, 1289, 1289, 1289,
     1289, 1289, 1289, 1289, 1289, 1289, 1292, 1293, 1292,  459,
      459, 1289, 1227, 1227, 1227, 1227, 1227, 1227, 1294, 1294,
     1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294,
     1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1227,
     1227, 1227, 1227, 1227, 1227, 1295, 1227, 1227, 1227, 1227,

     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1296, 1297,
     1227, 1227, 1227, 1227, 1298, 1299, 1300, 1301, 1301, 1301,
     1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
     1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1227,
     1294, 1294, 1294, 1294, 1294, 1302, 1227, 1303, 1304, 1227,
     1304, 1304, 1304, 1305, 1306, 1306, 1306, 1307, 1307, 1307,
     1307, 1307, 1307, 1307, 1307, 1308, 1309, 1310, 1311, 1312,
     1312,  571, 1307, 1307, 1227, 1313, 1313, 1313, 1314, 1314,
     1314, 1314, 1314, 1314, 1314, 1314, 1315, 1316, 1317, 1317,
      590, 1314, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318,

     1319, 1320, 1321, 1322, 1323, 1323,  606, 1318, 1324, 1324,
     1324, 1324, 1324, 1324, 1324, 1324, 1325, 1326, 1327, 1328,
     1329, 1329,  622, 1324, 1330, 1330, 1330, 1330, 1330, 1330,
     1330, 1330, 1331, 1332, 1333, 1334, 1335, 1335,  638, 1330,
     1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1337, 1338,
     1339, 1340, 1341, 1341,  654, 1336, 1227, 1227, 1342, 1342,
     1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342,
     1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1343, 1227, 1343, 1344, 1227, 1345, 1227, 1345,

     1227, 1346, 1227, 1347, 1347, 1347, 1347, 1347, 1347, 1347,
     1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347,
     1347, 1227, 1342, 1342, 1342, 1342, 1348, 1227, 1349, 1349,
     1349, 1227, 1350, 1350, 1350, 1351, 1351, 1351, 1352, 1351,
     1352, 1353, 1354, 1351, 1354, 1355, 1351, 1356, 1356,  749,
     1351, 1351, 1227, 1357, 1357, 1357, 1358, 1358, 1358, 1359,
     1358, 1360, 1358, 1361, 1361,  765, 1358, 1362, 1362, 1362,
     1363, 1363, 1362, 1363, 1364, 1364, 1365, 1365, 1362, 1365,
     1366, 1362, 1367, 1367,  784, 1362, 1368, 1368, 1368, 1369,
     1369, 1368, 1369, 1370, 1370, 1371, 1371, 1368, 1371, 1372,

     1368, 1373, 1373,  803, 1368, 1374, 1374, 1374, 1375, 1375,
     1374, 1375, 1376, 1376, 1377, 1377, 1374, 1377, 1378, 1374,
     1379, 1379,  822, 1374, 1380, 1380, 1380, 1381, 1380, 1381,
     1382, 1383, 1380, 1383, 1384, 1380, 1385, 1385,  838, 1380,
     1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386,
     1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
     1387, 1387, 1387, 1387, 1387, 1227, 1386, 1386, 1386, 1227,
     1388, 1388, 1388, 1389, 1389, 1389, 1390, 1391, 1391,  899,

     1390, 1227, 1390, 1227, 1392, 1392, 1392, 1393, 1394, 1394,
      910, 1393, 1395, 1396, 1396,  915, 1395, 1397, 1398, 1398,
      920, 1397, 1374,  822,  822,  822, 1374, 1380,  838,  838,
      838, 1380, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386,
     1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386,
     1386, 1386, 1386, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
     1387, 1387, 1227, 1227, 1386, 1388, 1388, 1389, 1389, 1389,
     1390,  899,  899,  899, 1390, 1227, 1392, 1392, 1392, 1393,
      910,  910,  910, 1393, 1395,  915,  915,  915, 1395, 1397,

      920,  920,  920, 1397, 1374,  822,  822,  822, 1374, 1380,
      838,  838,  838, 1380, 1386, 1386, 1386, 1386, 1386, 1386,
     1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386,
     1227, 1227, 1227, 1227, 1227, 1227, 1387, 1387, 1387, 1387,
     1387, 1227, 1386, 1227, 1388, 1389, 1389, 1389, 1390,  899,
      899,  899, 1390, 1227, 1392, 1392, 1392, 1393,  910,  910,
      910, 1393, 1395,  915,  915,  915, 1395, 1397,  920,  920,
      920, 1397, 1374,  822,  822,  822, 1374, 1380,  838,  838,
      838, 1380, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386,
     1386, 1386, 1386, 1386, 1386, 1227, 1227, 1227, 1227, 1387,

     1387, 1387, 1227, 1227, 1227, 1386, 1389,  899, 1390, 1390,
     1390, 1392,  910, 1393, 1393, 1393,  915, 1395, 1395, 1395,
      920, 1397, 1397, 1397,  822, 1374, 1374, 1374,  838, 1380,
     1380, 1380, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386,
     1386, 1386, 1227, 1227, 1227, 1227, 1387, 1387, 1387, 1227,
     1227, 1386, 1389,  899, 1390, 1390, 1392,  910,  915, 1395,
     1395,  920, 1397, 1397,  822, 1374, 1374,  838, 1380, 1380,
     1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1227, 1387,
     1387, 1389,  899, 1392,  910,  915,  920,  822,  838, 1386,
     1386, 1386, 1386, 1386, 1386, 1387, 1389,  899, 1392,  910,

      915,  920,  822,  838, 1386, 1386, 1386, 1386, 1386, 1386,
     1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386,
     1386, 1386, 1386, 1386, 1386, 1386,    0, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,

     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227

    } ;

static yyconst short int yy_nxt[9060] =
    {   0,
       24,   25,   26,   27,   25,   28,   29,   30,   31,   32,
       33,   34,   35,   36,   37,   38,   39,   40,   41,   42,
       42,   42,   43,   44,   45,   46,   47,   48,   48,   48,
       48,   48,   48,   48,   48,   49,   48,   48,   49,   48,
       49,   49,   48,   48,   48,   24,   48,   50,   48,   48,
       48,   48,   51,   52,   48,   53,   48,   48,   54,   55,
       56,   57,   48,   58,   48,   59,   48,   48,   48,   48,
       60,   61,   62,   91,   62,   92,   91, 1226,  109,   93,
      233,   63,  194,   73,  194,  194,  206,  234,  199,   64,
       65,   74,   66,   65,   24,  110,   94,  195,   24,   24,

      207,   24,   67,  133,   67,   68,   24,  133,  119,  249,
      250,   69,   70,   24,   24,   41,   42,   42,   42,   41,
       42,   42,   42,  194,  196,  194,  194,  200,  201,  252,
      253,  202, 1225,  203,  204,  481,   48,  482,  195,  209,
      544,   48,   48,  285,   48,  285,  285,   48,   71,   48,
       48,  210,   72,  485,   48,  285,  196,  285,  285,   24,
       24,   75,   76,   77,   78,   76,   75,   79,   75,   80,
       75,   75,   81,   75,   82,   75,   82,   83,   75,   84,
       85,   85,   85,   75,   86,   75,   75,   87,   87,   87,
       87,   87,   87,   87,   87,   87,   88,   87,   87,   88,

       87,   88,   88,   87,   87,   87,   75,   87,   87,   87,
       87,   87,   87,   87,   87,   87,   87,   87,   87,   87,
       89,   87,   87,   87,   90,   87,   87,   87,   87,   87,
       87,   75,   75,   95,   95,   96,   97,   95,   95,   98,
       95,   95,   95,   95,   99,   95,  100,   95,  100,  101,
       95,  102,  103,  103,  103,   95,  104,   95,   95,  105,
      105,  105,  105,  105,  105,  105,  105,  105,  106,  105,
      105,  106,  105,  106,  106,  105,  105,  105,   95,  105,
      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
      105,  105,  107,  105,  105,  105,  108,  105,  105,  105,

      105,  105,  105,   95,   95,   24,   24,  111,   24,   24,
       24,   29,   24,   24,   24,   24,   34,   24,   67,   24,
       67,  112,   24,  113,  114,  114,  114,   24,   70,   24,
       24,  115,  115,  115,  115,  115,  115,  115,  115,  115,
      116,  115,  115,  116,  115,  116,  116,  115,  115,  115,
       24,  115,  115,  115,  115,  115,  115,  115,  115,  115,
      115,  115,  115,  115,  117,  115,  115,  115,  118,  115,
      115,  115,  115,  115,  115,   24,   24,  120,  120,  121,
      120,  120,  120,   29,  120,  120,  120,  120,  122,  120,
      123,  120,  123,  124,  120,  125,  126,  126,  126,  120,

      127,  120,  120,  128,  128,  128,  128,  128,  128,  128,
      128,  128,  129,  128,  128,  129,  128,  129,  129,  128,
      128,  128,  120,  128,  128,  128,  128,  128,  128,  128,
      128,  128,  128,  128,  128,  128,  130,  128,  128,  128,
      131,  128,  128,  128,  128,  128,  128,  120,  120,  134,
      134,  135,  136,  134,  134,  137,  134,  134,  134,  134,
      138,  134,  139,  134,  139,  140,  134,  141,  142,  142,
      142,  134,  143,  134,  134,  144,  144,  144,  144,  144,
      144,  144,  144,  144,  145,  144,  144,  145,  144,  145,
      145,  144,  144,  144,  134,  144,  144,  144,  144,  144,

      144,  144,  144,  144,  144,  144,  144,  144,  146,  144,
      144,  144,  147,  144,  144,  144,  144,  144,  144,  134,
      134,  149,  149,  150,  151,  149,  149,  152,  149,  149,
      149,  149,  153,  149,  154,  149,  154,  155,  149,  156,
      157,  157,  157,  149,  158,  149,  149,  159,  159,  159,
      159,  159,  159,  159,  159,  159,  160,  159,  159,  160,
      159,  160,  160,  159,  159,  159,  149,  159,  159,  159,
      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
      161,  159,  159,  159,  162,  159,  159,  159,  159,  159,
      159,  149,  149,  164,  164,  165,  166,  164,  164,  167,

      164,  164,  164,  164,  168,  164,  169,  164,  169,  170,
      164,  171,  172,  172,  172,  164,  173,  164,  164,  174,
      174,  174,  174,  174,  174,  174,  174,  174,  175,  174,
      174,  175,  174,  175,  175,  174,  174,  174,  164,  174,
      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
      174,  174,  176,  174,  174,  174,  177,  174,  174,  174,
      174,  174,  174,  164,  164,  179,  179,  180,  181,  179,
      179,  182,  179,  179,  179,  179,  183,  179,  184,  179,
      184,  185,  179,  186,  187,  187,  187,  179,  188,  179,
      179,  189,  189,  189,  189,  189,  189,  189,  189,  189,

      190,  189,  189,  190,  189,  190,  190,  189,  189,  189,
      179,  189,  189,  189,  189,  189,  189,  189,  189,  189,
      189,  189,  189,  189,  191,  189,  189,  189,  192,  189,
      189,  189,  189,  189,  189,  179,  179,  211, 1224,  212,
      212,  212,  212,  281,  211,  213,  212,  212,  212,  212,
      338,  502,  214,  215,  216,  199,  217,  217,  217,  217,
      279,  550,  218,  235,  255,  212,  212,  212,  212,  504,
      254,  306,  220,  255,  254,  315,  474,  255,  237,  341,
      306,  255,  475,  238,  257,  221,  731,  222,  257,  223,
      282,  224,  550,  225,  200,  226,  227,  228,  237,  229,

      230,  231,  296,  297,  298,  296,  280,  232,  235,  309,
      212,  212,  212,  212,  316,  255,  241,  515,  268,  730,
      236,  242,  306,  237,  243,  269,  244,  245,  238,  246,
      247,  239,  248,  516,  254,  254,  240,  363,  364, 1051,
      236,  255,  255,  237,  254,  329,  308,  199,  257,  257,
      477,  255,  239,  258,  263,  263,  263,  263,  257,  478,
      240,  259,  260,  261,  254,  254,  262,  254,  254,  254,
      550,  255,  255,  254,  255,  255,  255,  264,  257,  257,
      255,  257,  257,  257,  254,  254,  200,  257,  338,  363,
      364,  255,  255,  296,  297,  298,  296,  479,  257,  257,

      211,  480,  212,  212,  212,  212,  271,  551,  241,  274,
      270,  272,  340,  265,  266, 1223,  243,  267,  244,  292,
      500,  293,  247,  275,  254,  273, 1222,  276,  254,  501,
      342,  255,  389,  390,  208,  255,  278,  550,  257,  344,
      277,  216,  257,  217,  217,  217,  217,  254,  211,  218,
      212,  212,  212,  212,  310,  297,  311,  310, 1221,  220,
      255,  701,  271,  307,  307,  307,  307,  306,  363,  370,
     1220,  276,  221,  891,  222,  487,  284,  367,  224,  488,
      225, 1219,  226,  227,  228,  443,  229,  230,  231,  310,
      297,  311,  310,  338,  232,  216,  300,  217,  217,  217,

      217,  389,  390, 1227,  363,  364,  217,  217,  217,  217,
      389,  396,  235,  220,  212,  212,  212,  212,  318,  393,
      319,  319,  319,  319,  444,  381,  550,  237,  286,  415,
      416,  483,  238,  484,  287,  578,  288,  289,  290,  302,
      291,  320,  320,  320,  320,  303,  485,  237,  322,  304,
      319,  319,  319,  319,  329,  329,  329,  329,  329,  329,
      329,  329,  977,  324,  217,  217,  217,  217,  325,  337,
      337,  337,  337,  339,  339,  339,  339,  338,  356,  356,
      356,  356,  332,  324,  321,  322, 1218,  319,  319,  319,
      319,  333,  347,  347,  347,  347,  515,  323, 1217,  235,

      324,  337,  337,  337,  337,  325,  359,  336,  326,  550,
      363,  364,  554,  327,  237,  389,  390,  323,  505,  238,
      324,  345,  506,  346,  346,  346,  346,  363,  366,  326,
     1216,  367,  389,  390,  237,  348,  407,  327,  312,  312,
      893,  312,  312,  312,  312,  312,  312,  312,  312,  312,
      312,  312,  312,  338,  312,  312,  356,  356,  356,  356,
      330,  312,  312,  312,  349,  387,  346,  346,  346,  346,
      368,  415,  416,  199,  363,  364, 1215,  415,  416,  351,
      492,  492,  905,  312,  352,  363,  364,  413,  371,  360,
      372,  372,  372,  372,  512,  513,  415,  422,  433,  351,

     1214,  373,  373,  373,  373,  419,  541,  473,  312,  312,
      312,  312,  200,  312,  312,  312,  312,  312,  312,  312,
      312,  312,  312,  312,  312,  362,  312,  312,  331,  331,
      331,  331,  330,  312,  312,  312,  362,  382,  382,  382,
      382,  362,  389,  390,  374,  362,  382,  382,  382,  382,
      389,  392,  415,  416,  393,  312,  397,  362,  398,  398,
      398,  398,  495,  495,  495,  362,  408,  408,  408,  408,
      386,  434,  389,  390,  385, 1008,  408,  408,  408,  408,
      312,  312,  349,  550,  346,  346,  346,  346,  399,  399,
      399,  399,  388,  394,  350,  561,  561,  351,  194,  412,

      194,  194,  352,  388,  411,  353,  509,  439,  388,  254,
      354,  510,  388,  195,  350,  509,  255,  351,  415,  418,
      510,  552,  419,  257,  388,  515,  353,  434,  434,  434,
      434,  400,  388,  511,  354,  342,  342,  342,  342,  342,
      342, 1227,  342,  342,  342,  342,  342,  342,  342,  342,
      315,  342,  342,  415,  416,  437, 1213,  357,  342,  342,
      342,  420,  414,  434,  434,  434,  434,  423, 1212,  424,
      424,  424,  424,  414,  415,  416,  582,  582,  414,  457,
      342,  446,  414,  447,  447,  447,  447,  363,  364,  316,
      425,  425,  425,  425,  414,  550,  438,  448,  448,  448,

      448,  463,  414,  463,  463,  342,  342,  342,  342,  342,
      342,  342,  342,  550,  342,  342,  342,  342,  342,  342,
      342,  342,  550,  342,  342,  358,  358,  358,  358,  357,
      342,  342,  342,  426,  450,  553,  447,  447,  447,  447,
      449,  729,  457,  457,  457,  457,  255,  892,  285,  452,
      285,  285,  342,  306,  453,  457,  457,  457,  457,  464,
      464,  464,  464,  465,  465,  465,  465,  866,  255,  452,
      460,  466,  466,  466,  466,  306,  867,  342,  342,  363,
      364,  467,  467,  467,  467,  564,  564,  564,  461,  217,
      217,  217,  217,  375,  434,  372,  372,  372,  372,  235,

      338,  212,  212,  212,  212,  376,  363,  364,  377,  217,
      217,  217,  217,  378,  237,  566,  379,  557,  408,  238,
      567,  380,  468,  502,  493,  376,  493,  503,  377,  494,
      494,  494,  494,  255,  237,  342,  255,  379,  577,  208,
      306,  504,  468,  306,  344,  380,  362,  362,  363,  364,
      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
      362,  443,  362,  362,  491,  491,  491,  491,  383,  362,
      362,  362,  254,  254,  254,  254,  254,  468,  556,  255,
      255,  255,  255,  255,  363,  364,  257,  257,  257,  257,
      257,  362,  254,  509,  521,  363,  366,  468,  587,  255,

      444,  254,  518,  519,  520,  457,  257,  523,  255, 1013,
      522,  524,  524,  524,  524,  257,  362,  362,  362,  362,
      363,  364,  362,  362,  362,  362,  362,  362,  362,  362,
      362,  362,  362,  382,  362,  362,  384,  384,  384,  384,
      383,  362,  362,  362,  254,  254,  254,  254,  528,  363,
      364,  255,  255,  255,  255,  254,  694,  254,  257,  257,
      257,  257,  255,  362,  255,  254,  254,  254,  254,  257,
      254,  257,  255,  255,  255,  255,  665,  255,  649,  257,
      257,  257,  257,  650,  257,  254,  525,  254,  362,  362,
      389,  390,  255,  666,  255,  695,  254,  526,  527,  257,

      329,  257,  984,  255,  401,  699,  398,  398,  398,  398,
      257,  529,  550,  530,  342,  535,  402,  531,  696,  403,
      389,  390,  538,  761,  404,  532,  537,  405,  536,  585,
      585,  585,  406,  740,  533,  534,  402,  363,  370,  403,
      296,  297,  298,  296,  700,  539,  367,  976,  405,  296,
      297,  298,  296,  389,  390,  356,  406,  388,  388,  389,
      390,  388,  388,  388,  388,  388,  388,  388,  388,  388,
      388,  388,  741,  388,  388,  310,  297,  311,  310,  409,
      388,  388,  388,  255,  389,  390,  555,  555,  555,  555,
      306,  310,  297,  311,  310,  320,  320,  320,  320,  562,

      338,  562,  388,  434,  563,  563,  563,  563,  363,  364,
     1006,  320,  320,  320,  320,  347,  347,  347,  347,  329,
      329,  329,  329,  338,  558,  389,  392,  388,  388,  388,
      388,  389,  390,  388,  388,  388,  388,  388,  388,  388,
      388,  388,  388,  388,  558,  388,  388,  410,  410,  410,
      410,  409,  388,  388,  388,  322,  906,  319,  319,  319,
      319,  571,  255,  560,  560,  560,  560, 1052,  594,  306,
      324,  389,  390,  329,  388,  325,  558,  329,  329,  329,
      329,  576,  576,  576,  576,  338,  363,  370,  338,  235,
      324,  337,  337,  337,  337,  367,  558,  389,  396,  388,

      388,  415,  416,  329,  237,  583,  393,  583,  733,  238,
      584,  584,  584,  584,  356,  427,  993,  424,  424,  424,
      424,  415,  416,  572,  237,  363,  364,  428,  987,  349,
      429,  346,  346,  346,  346,  430,  363,  364,  431,  255,
      601,  596,  596,  432,  351,  602,  306,  428,  338,  352,
      429,  415,  416,  347,  347,  347,  347,  415,  416,  431,
      356,  356,  356,  356,  351, 1211,  579,  432,  414,  414,
      415,  416,  414,  414,  414,  414,  414,  414,  414,  414,
      414,  414,  414,  980,  414,  414,  579,  363,  364, 1199,
      435,  414,  414,  414,  581,  581,  581,  581,  363,  364,

      415,  418,  590,  373,  373,  373,  373,  579, 1210,  356,
      356,  356,  356,  414,  599,  599,  599,  389,  396, 1207,
      382,  382,  382,  382,  363,  366,  393,  579,  367,  363,
      366,  415,  416,  367,  382,  382,  382,  382,  414,  414,
      414,  414,  415,  416,  414,  414,  414,  414,  414,  414,
      414,  414,  414,  414,  414,  591,  414,  414,  436,  436,
      436,  436,  435,  414,  414,  414,  607,  368,  644,  644,
      363,  364,  368,  338,  363,  364,  606,  363,  364,  363,
      364,  647,  647,  647,  375,  414,  372,  372,  372,  372,
      373,  373,  373,  373, 1206,  595,  595,  595,  595,  377,

      389,  390, 1056,  593,  378,  389,  392,  744,  593,  393,
      414,  414,  450,  749,  447,  447,  447,  447,  750,  377,
      363,  364,  329,  593,  451,  389,  390,  452,  593,  617,
      608,  597,  453,  597,  618,  454,  598,  598,  598,  598,
      455,  389,  392,  338,  451,  393,  745,  452,  394,  676,
      677,  408,  408,  408,  408, 1205,  454,  415,  418, 1074,
      610,  419,  492,  492,  455,  440,  440,  434,  440,  440,
      440,  440,  440,  440,  440,  440,  440,  440,  440,  440,
      989,  440,  440, 1195,  394,  389,  390,  458,  440,  440,
      440,  389,  390,  622,  448,  448,  448,  448,  389,  390,

      420,  399,  399,  399,  399,  389,  390,  612,  612,  613,
      440,  613,  389,  390,  614,  614,  614,  614,  415,  416,
     1194,  615,  615,  615,  408,  408,  408,  408,  415,  418,
      415,  422,  419,  561,  561,  440,  440,  440,  440,  419,
      440,  440,  440,  440,  440,  440,  440,  440,  440,  440,
      440,  440,  338,  440,  440,  459,  459,  459,  459,  458,
      440,  440,  440,  415,  422,  624,  338,  389,  390, 1193,
      623,  420,  419,  415,  416,  389,  390,  463,  626,  463,
      463,  401,  440,  398,  398,  398,  398,  988,  254,  628,
      628,  399,  399,  399,  399,  255,  403,  464,  464,  464,

      464,  404,  257, 1192,  609,  754,  434,  440,  440,  565,
      565,  565,  565,  415,  416, 1125,  403,  705,  565,  565,
      565,  565,  565,  565,  609,  465,  465,  465,  465,  425,
      425,  425,  425,  434,  434,  434,  434,  457,  565,  565,
      565,  565,  565,  565,  312,  312, 1129,  312,  312,  312,
      312,  312,  312,  312,  312,  312,  312,  312,  312,  338,
      312,  312,  389,  390,  582,  582,  330,  312,  312,  312,
      415,  416,  495,  495,  495,  638,  644,  644,  611,  611,
      611,  611,  415,  416, 1103,  765,  631,  631,  631,  312,
      766,  609,  907,  629,  356,  629,  415,  416,  630,  630,

      630,  630,  338,  415,  416, 1191,  255,  633,  564,  564,
      564,  609,  634,  306,  312,  312,  312,  312,  338,  312,
      312,  312,  568,  312,  312,  312,  312,  312,  312,  312,
      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
      312,  312,  338,  734,  434,  434,  434,  434,  735,  640,
      382,  645,  998,  645,  415,  416,  646,  646,  646,  646,
     1112,  312,  466,  466,  466,  466,  467,  467,  467,  467,
      425,  425,  425,  425,  457,  457,  457,  457,  457,  457,
      457,  457, 1184,  625,  902,  903,  312,  312,  312,  312,
      639,  312,  312,  312,  312,  312,  312,  312,  312,  312,

      312,  312,  312,  625,  312,  312,  570,  570,  570,  570,
      330,  312,  312,  312,  829,  657,  654,  657,  415,  416,
      658,  658,  658,  658,  655, 1190,  415,  416,  494,  494,
      494,  494,  427,  312,  424,  424,  424,  424,  494,  494,
      494,  494,  627,  627,  627,  627, 1179,  429,  363,  364,
      254,  338,  430,  830,  408,  625, 1003,  255,  312,  312,
      586,  586,  586,  586,  257,  363,  364,  429, 1176,  586,
      586,  586,  586,  586,  586,  625,  434,  736, 1007,  736,
     1057,  704,  737,  737,  737,  737,  585,  585,  585,  586,
      586,  586,  586,  586,  586,  342,  342,  342,  342,  342,

      342, 1175,  342,  342,  342,  342,  342,  342,  342,  342,
      770,  342,  342,  563,  563,  563,  563,  357,  342,  342,
      342,  450, 1174,  447,  447,  447,  447, 1079,  338,  448,
      448,  448,  448,  363,  364,  457,  452,  254,  254,  254,
      342,  453,  641, 1173,  255,  255,  255,  254,  457,  596,
      596,  257,  257,  257,  255, 1011,  452,  706,  755,  363,
      772,  257,  641,  756,  707,  342,  342,  342,  342,  342,
      342,  342,  342,  515,  342,  342,  342,  342,  342,  342,
      342,  342,  342,  342,  342,  342,  342,  342,  342,  342,
      342,  342,  342,  588,  588,  588,  588,  588,  588,  588,

      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
      588,  588,  342,  588,  588,  588,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588,  342,  342,  342,
      342,  342,  342,  342,  342, 1172,  342,  342,  342,  342,
      342,  342,  342,  342, 1171,  342,  342,  589,  589,  589,
      589,  357,  342,  342,  342,  643,  643,  643,  643,  491,
      491,  491,  491,  254,  254,  550,  254,  833,  641,  254,
      255,  255,  468,  255,  342,  254,  255,  257,  257,  254,
      257, 1060,  255,  257, 1170,  694,  255,  356,  641,  257,

     1045,  708,  468,  257,  363,  772,  254,  709,  773,  342,
      342,  363,  364,  255,  784,  711,  834,  254, 1131,  785,
      257,  363,  364,  382,  255,  712, 1061,  600,  600,  600,
      600,  257,  356,  710,  695,  714,  600,  600,  600,  600,
      600,  600,  563,  563,  563,  563,  757,  774,  757,  363,
      778,  758,  758,  758,  758,  338,  600,  600,  600,  600,
      600,  600,  362,  362,  363,  364,  362,  362,  362,  362,
      362,  362,  362,  362,  362,  362,  362, 1151,  362,  362,
     1055,  254,  254,  254,  383,  362,  362,  362,  255,  255,
      255,  560,  560,  560,  560,  257,  257,  257,  581,  581,

      581,  581,  389,  390,  558,  363,  364,  362,  647,  647,
      647,  579,  584,  584,  584,  584,  584,  584,  584,  584,
     1115,  599,  599,  599,  558,  717,  646,  646,  646,  646,
      716,  579,  362,  362,  362,  362,  363,  364,  362,  362,
      603,  362,  362,  362,  362,  362,  362,  362,  362,  362,
      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
      604,  604,  604,  604,  604,  604,  604,  604,  604,  604,
      604,  604,  604,  604,  604,  604,  604,  604,  604,  362,
      604,  604,  604,  604,  604,  604,  604,  604,  604,  604,
      604,  604,  604,  604,  604,  604,  604,  604,  604,  604,

      604,  604,  604,  604,  362,  362,  362,  362,  363,  364,
      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
      362, 1156,  362,  362,  605,  605,  605,  605,  383,  362,
      362,  362,  254,  254,  254,  254,  254,  389,  791,  255,
      255,  255,  255,  255, 1110,  254,  257,  257,  257,  257,
      257,  362,  255,  363,  364,  255,  363,  776,  803,  257,
      363,  364,  306,  804,  768,  773,  768,  408,  329,  769,
      769,  769,  769,  363,  364, 1108,  362,  362,  389,  390,
      718,  720,  363,  364,  713,  719,  715, 1046,  721,  595,
      595,  595,  595, 1126,  616,  616,  616,  616,  598,  598,

      598,  598,  593,  616,  616,  616,  616,  616,  616, 1152,
      389,  795,  363,  778,  389,  791,  779,  786,  792,  792,
      363,  364,  593,  616,  616,  616,  616,  616,  616,  388,
      388,  389,  390,  388,  388,  388,  388,  388,  388,  388,
      388,  388,  388,  388,  434,  388,  388,  363,  364,  389,
      390,  409,  388,  388,  388,  780,  457,  793, 1012,  389,
      390,  389,  390,  598,  598,  598,  598,  389,  390, 1075,
      787,  913,  787,  434,  388,  788,  788,  788,  788,  389,
      390,  415,  814,  612,  612,  646,  646,  646,  646, 1076,
      811,  389,  797,  434,  789,  614,  614,  614,  614,  388,

      388,  388,  388,  389,  390,  388,  388,  619,  388,  388,
      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
      388,  388,  388,  388,  388,  388,  388,  620,  620,  620,
      620,  620,  620,  620,  620,  620,  620,  620,  620,  620,
      620,  620,  620,  620,  620,  620,  388,  620,  620,  620,
      620,  620,  620,  620,  620,  620,  620,  620,  620,  620,
      620,  620,  620,  620,  620,  620,  620,  620,  620,  620,
      620,  388,  388,  388,  388,  389,  390,  388,  388,  388,
      388,  388,  388,  388,  388,  388,  388,  388, 1151,  388,
      388,  621,  621,  621,  621,  409,  388,  388,  388,  389,

      390,  389,  390,  389,  390,  389,  797,  389,  390,  798,
     1104,  415,  416, 1104,  699,  615,  615,  615,  388,  611,
      611,  611,  611,  614,  614,  614,  614,  627,  627,  627,
      627,  338,  609,  415,  416,  415,  416,  740,  415,  416,
      625,  415,  810,  388,  388,  415,  416, 1146,  799,  806,
      744,  806,  609,  700,  807,  807,  807,  807,  805, 1050,
      625,  632,  632,  632,  632,  415,  416,  415,  416,  329,
      632,  632,  632,  632,  632,  632,  741, 1145,  808,  415,
      416,  628,  628,  630,  630,  630,  630,  415,  416,  745,
      632,  632,  632,  632,  632,  632,  414,  414,  415,  416,

      414,  414,  414,  414,  414,  414,  414,  414,  414,  414,
      414, 1144,  414,  414,  415,  416,  363,  364,  435,  414,
      414,  414,  415,  416,  658,  658,  658,  658,  255, 1143,
      630,  630,  630,  630, 1059,  306,  824,  822,  631,  631,
      631,  414,  823,  825,  356,  825,  434,  838,  826,  826,
      826,  826,  839,  363,  776, 1065,  457,  658,  658,  658,
      658,  382,  773, 1142,  894,  917,  414,  414,  414,  414,
      415,  416,  414,  414,  635,  414,  414,  414,  414,  414,
      414,  414,  414,  414,  414,  414,  414,  414,  414,  414,
      414,  414,  414,  414,  636,  636,  636,  636,  636,  636,

      636,  636,  636,  636,  636,  636,  636,  636,  636,  636,
      636,  636,  636,  414,  636,  636,  636,  636,  636,  636,
      636,  636,  636,  636,  636,  636,  636,  636,  636,  636,
      636,  636,  636,  636,  636,  636,  636,  636,  414,  414,
      414,  414,  415,  416,  414,  414,  414,  414,  414,  414,
      414,  414,  414,  414,  414, 1141,  414,  414,  637,  637,
      637,  637,  435,  414,  414,  414,  415,  810,  254,  254,
      811,  415,  816,  415,  816,  255,  255,  817,  737,  737,
      737,  737,  257,  257,  255,  414,  643,  643,  643,  643,
      254,  306,  872,  254,  254,  255,  255,  255,  871,  641,

      255,  255,  306,  306,  257,  363,  364,  257,  257,  812,
      414,  414,  648,  648,  648,  648,  818,  363,  364,  641,
      874,  648,  648,  648,  648,  648,  648,  875,  876,  737,
      737,  737,  737, 1107, 1140,  895,  896,  758,  758,  758,
      758,  648,  648,  648,  648,  648,  648,  440,  440, 1139,
      440,  440,  440,  440,  440,  440,  440,  440,  440,  440,
      440,  440, 1063,  440,  440, 1138,  254,  254,  254,  458,
      440,  440,  440,  255,  255,  255,  254,  363,  364,  999,
      257,  257,  257,  255,  758,  758,  758,  758,  873,  254,
      257,  342,  440, 1066,  254,  696,  255,  254,  254,  382,

      761,  255,  254,  257,  255,  255,  878,  254,  257,  255,
     1137,  257,  257, 1103,  255, 1150,  257,  440,  440,  440,
      440,  257,  440,  440,  440,  651,  440,  440,  440,  440,
      440,  440,  440,  440,  440,  440,  440,  440,  440,  440,
      440,  440,  440,  440,  440,  877,  879,  254,  884,  882,
      880,  363,  364,  885,  255,  329,  363,  776, 1154,  254,
     1136,  257,  363,  364,  440,  773,  255,  769,  769,  769,
      769,  363,  364,  257, 1109,  603, 1155, 1064,  769,  769,
      769,  769,  363,  772,  389,  390,  773,  382,  881,  440,
      440,  440,  440, 1135,  440,  440,  440,  440,  440,  440,

      440,  440,  440,  440,  440,  440,  883,  440,  440,  653,
      653,  653,  653,  458,  440,  440,  440,  363,  772,  389,
      390,  773,  389,  390, 1134,  774,  363,  778,  363,  778,
      779,  829,  779,  389,  390,  918,  440, 1069,  788,  788,
      788,  788,  389,  791,  389,  791,  792,  408,  792,  788,
      788,  788,  788,  389,  390,  389,  390,  619,  389,  795,
      774,  440,  440,  565,  565,  565,  565,  792,  922,  780,
      830,  780,  565,  565,  565,  565,  565,  565,  833,  389,
      795, 1133,  389,  797,  255,  793,  798,  793,  792,  415,
      416,  306,  565,  565,  565,  565,  565,  565,  312,  312,

     1068,  312,  312,  312,  312,  312,  312,  312,  312,  312,
      312,  312,  312, 1109,  312,  312,  550,  834,  415,  416,
      747,  312,  312,  312, 1080,  799,  979, 1106,  457,  389,
      797,  415,  416,  798,  807,  807,  807,  807,  415,  416,
      923, 1099,  635,  312,  389,  390, 1004,  807,  807,  807,
      807,  415,  814,  415,  810,  415,  810,  811, 1098,  811,
      811,  415,  816,  415,  816,  817,  329,  817,  312,  312,
      312,  312,  799,  312,  312,  312,  312,  312,  312,  312,
      312,  312,  312,  312,  312, 1097,  312,  312,  415,  814,
      415,  416,  330,  312,  312,  312,  812,  811,  812,  826,

      826,  826,  826, 1114,  818, 1150,  818,  826,  826,  826,
      826,  946,  947,  254,  948,  312,  254,  254,  254, 1110,
      255,  254,  254,  255,  255,  255,  949,  257,  255,  255,
      257,  257,  257, 1081, 1096,  257,  257,  457,  962,  927,
      312,  312,  312,  312, 1095,  312,  312,  312,  312,  312,
      312,  312,  312,  312,  312,  312,  312,  356,  312,  312,
     1158,  254,  254,  254,  330,  312,  312,  312,  255,  255,
      255,  965,  329,  255,  255,  257,  257,  257,  254,  254,
      306,  306,  254,  964,  254,  255,  255,  312,  963,  255,
      254,  255,  257,  257,  255,  356,  257,  255,  257,  363,

      364,  306, 1113,  748,  257,  966,  389,  390,  389,  390,
     1047,  382,  312,  312,  586,  586,  586,  586, 1117, 1127,
      978,  415,  416,  586,  586,  586,  586,  586,  586,  971,
     1048,  969,  967, 1070, 1071,  968,  415,  416, 1009,  408,
      408,  970, 1094,  586,  586,  586,  586,  586,  586,  342,
      342,  342,  342,  342,  342,  995,  342,  342,  342,  342,
      342,  342,  342,  342, 1000,  342,  342, 1130,  254,  254,
      434,  763,  342,  342,  342,  255,  255, 1005,  254,  254,
      408,  254,  257,  257,  254,  255,  255, 1121,  255,  338,
      254,  255,  257,  257,  342,  257, 1037,  255,  257,  254,

      254,  254,  382,  254,  257, 1159,  255,  255,  255, 1038,
      255,  415,  416,  257,  257,  257, 1131,  257,  457,  342,
      342,  342,  342,  342,  342,  342,  342, 1157,  342,  342,
      342,  342,  342,  342,  342,  342,  972,  342,  342, 1039,
      254, 1093, 1040,  357,  342,  342,  342,  255, 1042, 1042,
     1042, 1042, 1092, 1044,  257, 1044, 1044, 1053, 1053, 1053,
     1053, 1062, 1062, 1062, 1062, 1105,  342,  457,  363,  364,
     1082, 1082, 1082, 1082,  550,  415,  416, 1091, 1114, 1042,
     1042, 1042, 1042, 1041, 1067, 1067, 1067, 1067,  363,  364,
     1119,  342,  342,  342,  342,  342,  342,  342,  342, 1115,

      342,  342,  342,  342,  342,  342,  342,  342,  434,  342,
      342,  389,  390, 1165,  434,  357,  342,  342,  342,  254,
     1073, 1118, 1203,  415,  416, 1119,  255, 1072, 1072, 1072,
     1072,  356, 1044,  257, 1044, 1044,  254, 1090,  342, 1077,
     1077, 1077, 1077,  255,  254, 1122, 1123, 1089, 1101, 1103,
      257,  255,  356,  254,  764, 1100, 1088, 1104,  257, 1103,
      255,  254, 1104,  342,  342,  363,  364,  257,  255,  408,
      255, 1111, 1162,  255,  382,  257, 1087,  306,  382, 1086,
      306,  600,  600,  600,  600, 1053, 1053, 1053, 1053, 1116,
      600,  600,  600,  600,  600,  600,  457,  329,  408,  408,

     1102, 1168, 1183, 1062, 1062, 1062, 1062,  389,  390, 1123,
      600,  600,  600,  600,  600,  600,  362,  362,  363,  364,
      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
      362, 1085,  362,  362,  363,  364, 1120,  255,  782,  362,
      362,  362, 1177, 1132,  306, 1084,  389,  390, 1124, 1178,
     1067, 1067, 1067, 1067,  415,  416, 1128, 1082, 1082, 1082,
     1082,  362, 1072, 1072, 1072, 1072, 1130,  254, 1169,  254,
     1077, 1077, 1077, 1077,  255,  356,  255,  415,  416, 1127,
     1185,  257, 1153,  257,  363,  364,  362,  362,  362,  362,
      363,  364,  362,  362,  362,  362,  362,  362,  362,  362,

      362,  362,  362, 1147,  362,  362, 1083,  254,  255, 1078,
      383,  362,  362,  362,  255,  306,  363,  364, 1118, 1149,
     1160,  257,  363,  364, 1058,  382, 1161,  389,  390, 1122,
     1186, 1163,  408,  362,  389,  390,  254, 1187, 1164, 1148,
      415,  416, 1126,  255, 1166,  415,  416,  363,  364, 1167,
      257,  389,  390,  389,  390, 1182,  415,  416,  362,  362,
      362,  362,  363,  364,  362,  362,  362,  362,  362,  362,
      362,  362,  362,  362,  362, 1054,  362,  362, 1049,  254,
      254,  434,  383,  362,  362,  362,  255,  255, 1188,  415,
      416,  457,  254,  257,  257,  329,  255,  254, 1189,  255,

     1043, 1198, 1180,  306,  255,  362,  257,  356,  382,  408,
      457,  257, 1208, 1200, 1201, 1202,  255, 1036, 1204, 1209,
     1035,  783,  254,  306, 1034, 1033, 1032, 1031, 1030,  255,
      362,  362,  389,  390, 1181, 1029,  257, 1028, 1027, 1026,
     1025, 1024, 1023, 1022, 1197, 1021, 1020, 1019,  616,  616,
      616,  616, 1196, 1018, 1017, 1016, 1015,  616,  616,  616,
      616,  616,  616, 1014, 1010,  994,  990,  986,  902,  985,
      981,  550,  949,  975,  974,  973,  961,  616,  616,  616,
      616,  616,  616,  388,  388,  389,  390,  388,  388,  388,
      388,  388,  388,  388,  388,  388,  388,  388,  960,  388,

      388,  959,  958,  957,  956,  801,  388,  388,  388,  955,
      954,  953,  952,  951,  950,  945,  944,  943,  942,  941,
      940,  939,  938,  937,  936,  935,  934,  933,  388,  932,
      931,  651,  829,  928,  926,  921,  916,  912,  911,  515,
      908,  904,  901,  900,  568,  740,  897,  554,  727,  728,
      890,  889,  888,  388,  388,  388,  388,  389,  390,  388,
      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
      887,  388,  388,  886,  515,  703,  516,  409,  388,  388,
      388,  694,  870,  869,  868,  865,  864,  863,  862,  861,
      860,  859,  858,  857,  856,  855,  854,  853,  852,  851,

      388,  850,  849,  848,  847,  846,  845,  844,  843,  842,
      841,  840,  829,  827,  767,  759,  338,  753,  752,  751,
      740,  738,  732,  549,  550,  388,  388,  388,  388,  389,
      390,  388,  388,  388,  388,  388,  388,  388,  388,  388,
      388,  388,  728,  388,  388,  546,  547,  726,  725,  409,
      388,  388,  388,  665,  724,  723,  722,  703,  697,  694,
      692,  691,  690,  689,  688,  687,  686,  685,  684,  683,
      682,  681,  388,  680,  679,  678,  675,  674,  673,  672,
      671,  670,  669,  668,  667,  664,  663,  662,  802,  661,
      660,  659,  656,  642,  443,  592,  580,  388,  388,  415,

      416,  575,  574,  573,  559,  315,  550,  547,  545,  506,
      481,  479,  477,  543,  542,  632,  632,  632,  632,  540,
      338,  514,  508,  507,  632,  632,  632,  632,  632,  632,
      499,  498,  497,  490,  489,  486,  476,  473,  472,  471,
      470,  199,  462,  456,  632,  632,  632,  632,  632,  632,
      414,  414,  415,  416,  414,  414,  414,  414,  414,  414,
      414,  414,  414,  414,  414,  443,  414,  414,  441,  361,
      355,  283,  820,  414,  414,  414,  338,  335,  334,  328,
      315,  313,  283,  294,  199,  295,  294,  251,  283,  251,
      199,  205,  197, 1227,  193,  414,  178,  163,  148,  132,

      119, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
      414,  414,  414,  414,  415,  416,  414,  414,  414,  414,
      414,  414,  414,  414,  414,  414,  414, 1227,  414,  414,
     1227, 1227, 1227, 1227,  435,  414,  414,  414, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227,  414, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227,  414,  414,  414,  414,  415,  416,  414,  414,

      414,  414,  414,  414,  414,  414,  414,  414,  414, 1227,
      414,  414, 1227, 1227, 1227, 1227,  435,  414,  414,  414,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,  414,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227,  821, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227,  414,  414,  648,  648,  648,  648,
     1227, 1227, 1227, 1227, 1227,  648,  648,  648,  648,  648,
      648, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227,  648,  648,  648,  648,  648,

      648,  440,  440, 1227,  440,  440,  440,  440,  440,  440,
      440,  440,  440,  440,  440,  440, 1227,  440,  440, 1227,
     1227, 1227, 1227,  836,  440,  440,  440, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227,  440, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227,  440,  440,  440,  440, 1227,  440,  440,  440,  440,
      440,  440,  440,  440,  440,  440,  440,  440, 1227,  440,
      440, 1227, 1227, 1227, 1227,  458,  440,  440,  440, 1227,

     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,  440, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227,  440,  440,  440,  440, 1227,  440,  440,
      440,  440,  440,  440,  440,  440,  440,  440,  440,  440,
     1227,  440,  440, 1227, 1227, 1227, 1227,  458,  440,  440,
      440, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
      440, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,

     1227, 1227, 1227, 1227, 1227, 1227,  837, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227,  440,  440,  312,  312, 1227,
      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
      312,  312, 1227,  312,  312, 1227, 1227, 1227, 1227,  747,
      312,  312,  312, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227,  312, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227,  312,  312,  312,
      312, 1227,  312,  312,  312,  312,  312,  312,  312,  312,

      312,  312,  312,  312, 1227,  312,  312, 1227, 1227, 1227,
     1227,  330,  312,  312,  312, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227,  312, 1227, 1227, 1227, 1227, 1227,
      898, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,  312,
      312,  312,  312, 1227,  312,  312,  312,  312,  312,  312,
      312,  312,  312,  312,  312,  312, 1227,  312,  312, 1227,
     1227, 1227, 1227,  330,  312,  312,  312, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,

     1227, 1227, 1227, 1227, 1227, 1227,  312, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227,  899, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227,  312,  312,  342,  342,  342,  342,  342,  342, 1227,
      342,  342,  342,  342,  342,  342,  342,  342, 1227,  342,
      342, 1227, 1227, 1227, 1227,  763,  342,  342,  342, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,  342, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,

     1227, 1227, 1227,  342,  342,  342,  342,  342,  342,  342,
      342, 1227,  342,  342,  342,  342,  342,  342,  342,  342,
     1227,  342,  342, 1227, 1227, 1227, 1227,  357,  342,  342,
      342, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
      342, 1227, 1227, 1227, 1227, 1227,  909, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227,  342,  342,  342,  342,  342,
      342,  342,  342, 1227,  342,  342,  342,  342,  342,  342,
      342,  342, 1227,  342,  342, 1227, 1227, 1227, 1227,  357,

      342,  342,  342, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227,  342, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227,  910, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227,  342,  342,  362,
      362,  363,  364,  362,  362,  362,  362,  362,  362,  362,
      362,  362,  362,  362, 1227,  362,  362, 1227, 1227, 1227,
     1227,  782,  362,  362,  362, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227,  362, 1227, 1227, 1227, 1227, 1227,

     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,  362,
      362,  362,  362,  363,  364,  362,  362,  362,  362,  362,
      362,  362,  362,  362,  362,  362, 1227,  362,  362, 1227,
     1227, 1227, 1227,  383,  362,  362,  362, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227,  362, 1227, 1227, 1227,
     1227, 1227,  914, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227,  362,  362,  362,  362,  363,  364,  362,  362,  362,

      362,  362,  362,  362,  362,  362,  362,  362, 1227,  362,
      362, 1227, 1227, 1227, 1227,  383,  362,  362,  362, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,  362, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,  915, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227,  362,  362,  388,  388,  389,  390,  388,
      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
     1227,  388,  388, 1227, 1227, 1227, 1227,  801,  388,  388,
      388, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,

     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
      388, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227,  388,  388,  388,  388,  389,
      390,  388,  388,  388,  388,  388,  388,  388,  388,  388,
      388,  388, 1227,  388,  388, 1227, 1227, 1227, 1227,  409,
      388,  388,  388, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227,  388, 1227, 1227, 1227, 1227, 1227,  919, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,

     1227, 1227, 1227, 1227, 1227, 1227, 1227,  388,  388,  388,
      388,  389,  390,  388,  388,  388,  388,  388,  388,  388,
      388,  388,  388,  388, 1227,  388,  388, 1227, 1227, 1227,
     1227,  409,  388,  388,  388, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227,  388, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227,  920, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,  388,
      388,  414,  414,  415,  416,  414,  414,  414,  414,  414,
      414,  414,  414,  414,  414,  414, 1227,  414,  414, 1227,

     1227, 1227, 1227,  820,  414,  414,  414, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227,  414, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227,  414,  414,  414,  414,  415,  416,  414,  414,  414,
      414,  414,  414,  414,  414,  414,  414,  414, 1227,  414,
      414, 1227, 1227, 1227, 1227,  435,  414,  414,  414, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,  414, 1227,

     1227, 1227, 1227, 1227,  924, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227,  414,  414,  414,  414,  415,  416,  414,
      414,  414,  414,  414,  414,  414,  414,  414,  414,  414,
     1227,  414,  414, 1227, 1227, 1227, 1227,  435,  414,  414,
      414, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
      414, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
      925, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227,  414,  414,  440,  440, 1227,

      440,  440,  440,  440,  440,  440,  440,  440,  440,  440,
      440,  440, 1227,  440,  440, 1227, 1227, 1227, 1227,  836,
      440,  440,  440, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227,  440, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227,  440,  440,  440,
      440, 1227,  440,  440,  440,  440,  440,  440,  440,  440,
      440,  440,  440,  440, 1227,  440,  440, 1227, 1227, 1227,
     1227,  458,  440,  440,  440, 1227, 1227, 1227, 1227, 1227,

     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227,  440, 1227, 1227, 1227, 1227, 1227,
      929, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,  440,
      440,  440,  440, 1227,  440,  440,  440,  440,  440,  440,
      440,  440,  440,  440,  440,  440, 1227,  440,  440, 1227,
     1227, 1227, 1227,  458,  440,  440,  440, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227,  440, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227,  930, 1227, 1227, 1227,

     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227,  440,  440,  312,  312, 1227,  312,  312,  312,  312,
      312,  312,  312,  312,  312,  312,  312,  312, 1227,  312,
      312, 1227, 1227, 1227, 1227,  330,  312,  312,  312, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,  312, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227,  982, 1227, 1227, 1227, 1227,
     1227, 1227, 1227,  312,  312,  312,  312, 1227,  312,  312,
      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,

     1227,  312,  312, 1227, 1227, 1227, 1227,  330,  312,  312,
      312, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
      312, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227,  983, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227,  312,  312,  342,  342,  342,
      342,  342,  342, 1227,  342,  342,  342,  342,  342,  342,
      342,  342, 1227,  342,  342, 1227, 1227, 1227, 1227,  357,
      342,  342,  342, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,

     1227, 1227,  342, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,  991,
     1227, 1227, 1227, 1227, 1227, 1227, 1227,  342,  342,  342,
      342,  342,  342,  342,  342, 1227,  342,  342,  342,  342,
      342,  342,  342,  342, 1227,  342,  342, 1227, 1227, 1227,
     1227,  357,  342,  342,  342, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227,  342, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227,  992, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,  342,

      342,  362,  362,  363,  364,  362,  362,  362,  362,  362,
      362,  362,  362,  362,  362,  362, 1227,  362,  362, 1227,
     1227, 1227, 1227,  383,  362,  362,  362, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227,  362, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227,  996, 1227, 1227, 1227, 1227, 1227, 1227,
     1227,  362,  362,  362,  362,  363,  364,  362,  362,  362,
      362,  362,  362,  362,  362,  362,  362,  362, 1227,  362,
      362, 1227, 1227, 1227, 1227,  383,  362,  362,  362, 1227,

     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,  362, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
      997, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227,  362,  362,  388,  388,  389,  390,  388,
      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
     1227,  388,  388, 1227, 1227, 1227, 1227,  409,  388,  388,
      388, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
      388, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,

     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1001, 1227, 1227,
     1227, 1227, 1227, 1227, 1227,  388,  388,  388,  388,  389,
      390,  388,  388,  388,  388,  388,  388,  388,  388,  388,
      388,  388, 1227,  388,  388, 1227, 1227, 1227, 1227,  409,
      388,  388,  388, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227,  388, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1002, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227,  388,  388,  198,
     1227,  198,  198,  198,  198,  198,  198,  198,  198,  198,

      208, 1227,  208,  208,  208,  208,  208,  208,  208,  208,
      208,  219,  219, 1227,  219,  219,  219,  256,  256, 1227,
      256,  256,  256,  256,  256,  299,  299,  299,  301, 1227,
     1227,  301, 1227,  301,  301,  301,  305, 1227,  305,  305,
      305,  305,  305,  312, 1227,  312,  312,  312,  312,  312,
      312,  312,  312,  312,  314, 1227,  314,  314,  314,  314,
      314,  314,  314,  314,  314,  317, 1227,  317,  317,  317,
      317,  317,  317,  317,  317,  317,  329, 1227,  329,  329,
      329,  329,  329,  329,  329,  329,  329,  255, 1227,  255,
      255,  255,  255,  255,  342,  342, 1227,  342,  342,  342,

      342,  342,  342,  342,  342,  343,  343,  343,  343,  343,
      343,  343,  343,  343,  343,  343,  356,  356, 1227,  356,
      356,  356,  356,  356,  356,  356,  356,  362,  362,  362,
      362,  362,  362,  362,  362,  362,  362,  362,  365,  365,
      365,  365,  365,  365,  365,  365,  365,  365,  365,  369,
      369,  369,  369,  369,  369,  369,  369,  369,  369,  369,
      382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
      382,  388,  388,  388,  388,  388,  388,  388,  388,  388,
      388,  388,  391,  391,  391,  391,  391,  391,  391,  391,
      391,  391,  391,  395,  395,  395,  395,  395,  395,  395,

      395,  395,  395,  395,  408,  408,  408,  408,  408,  408,
      408,  408,  408,  408,  408,  414,  414,  414,  414,  414,
      414,  414,  414,  414,  414,  414,  417,  417,  417,  417,
      417,  417,  417,  417,  417,  417,  417,  421,  421,  421,
      421,  421,  421,  421,  421,  421,  421,  421,  434,  434,
      434,  434,  434,  434,  434,  434,  434,  434,  434,  440,
     1227,  440,  440,  440,  440,  440,  440,  440,  440,  440,
      442, 1227,  442,  442,  442,  442,  442,  442,  442,  442,
      442,  445, 1227,  445,  445,  445,  445,  445,  445,  445,
      445,  445,  457, 1227,  457,  457,  457,  457,  457,  457,

      457,  457,  457,  208, 1227,  208,  208,  208,  208,  208,
      208,  208,  208,  208,  469, 1227, 1227,  469,  469,  496,
     1227, 1227,  496,  255, 1227,  255,  255,  255,  255,  255,
      256,  256, 1227,  256,  256,  256,  256,  256,  517, 1227,
     1227, 1227, 1227,  517,  517,  517,  517,  546,  546,  546,
      546,  546,  548,  548,  548,  549,  549,  549,  549,  549,
      305, 1227,  305,  305,  305,  305,  305,  312, 1227,  312,
      312,  312,  312,  312,  312,  312,  312,  312,  314, 1227,
      314,  314,  314,  314,  314,  314,  314,  314,  314,  317,
     1227,  317,  317,  317,  317,  317,  317,  317,  317,  317,

      329, 1227,  329,  329,  329,  329,  329,  329,  329,  329,
      329,  569, 1227,  569,  569,  569,  569,  569,  569,  569,
      569,  569,  342,  342, 1227,  342,  342,  342,  342,  342,
      342,  342,  342,  343,  343,  343,  343,  343,  343,  343,
      343,  343,  343,  343,  356,  356, 1227,  356,  356,  356,
      356,  356,  356,  356,  356,  362,  362,  362,  362,  362,
      362,  362,  362,  362,  362,  362,  365,  365,  365,  365,
      365,  365,  365,  365,  365,  365,  365,  369,  369,  369,
      369,  369,  369,  369,  369,  369,  369,  369,  382,  382,
      382,  382,  382,  382,  382,  382,  382,  382,  382,  388,

      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
      391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
      391,  395,  395,  395,  395,  395,  395,  395,  395,  395,
      395,  395,  408,  408,  408,  408,  408,  408,  408,  408,
      408,  408,  408,  414,  414,  414,  414,  414,  414,  414,
      414,  414,  414,  414,  417,  417,  417,  417,  417,  417,
      417,  417,  417,  417,  417,  421,  421,  421,  421,  421,
      421,  421,  421,  421,  421,  421,  434,  434,  434,  434,
      434,  434,  434,  434,  434,  434,  434,  440, 1227,  440,
      440,  440,  440,  440,  440,  440,  440,  440,  442, 1227,

      442,  442,  442,  442,  442,  442,  442,  442,  442,  445,
     1227,  445,  445,  445,  445,  445,  445,  445,  445,  445,
      457, 1227,  457,  457,  457,  457,  457,  457,  457,  457,
      457,  652, 1227,  652,  652,  652,  652,  652,  652,  652,
      652,  652,  469, 1227, 1227,  469,  469,  496, 1227, 1227,
      496,  693, 1227,  693,  693,  693,  693,  693,  693,  693,
      693,  693,  696, 1227,  696,  696,  696,  696,  696,  696,
      696,  696,  696,  698, 1227,  698,  698,  698,  698,  698,
      698,  698,  698,  698,  516, 1227, 1227,  516,  516,  516,
      516,  516,  702, 1227,  702,  702,  702,  702,  702,  256,

      256, 1227,  256,  256,  256,  256,  256,  546,  546,  546,
      546,  546,  727,  727,  727,  727,  727,  549,  549,  549,
      549,  549,  554,  554,  554,  554,  554,  305, 1227,  305,
      305,  305,  305,  305,  312, 1227,  312,  312,  312,  312,
      312,  312,  312,  312,  312,  739, 1227,  739,  739,  739,
      739,  739,  739,  739,  739,  739,  742, 1227,  742,  742,
      742,  742,  742,  742,  742,  742,  742,  743, 1227,  743,
      743,  743,  743,  743,  743,  743,  743,  743,  746, 1227,
      746,  746,  746,  746,  746,  746,  746,  746,  746,  329,
     1227,  329,  329,  329,  329,  329,  329,  329,  329,  329,

      255, 1227,  255,  255,  255,  255,  255,  342,  342, 1227,
      342,  342,  342,  342,  342,  342,  342,  342,  760,  760,
      760,  760,  760,  760,  760,  760,  760,  760,  760,  762,
      762, 1227,  762,  762,  762,  762,  762,  762,  762,  762,
      356,  356, 1227,  356,  356,  356,  356,  356,  356,  356,
      356,  362,  362,  362,  362,  362,  362,  362,  362,  362,
      362,  362,  771,  771,  771,  771,  771,  771,  771,  771,
      771,  771,  771,  775,  775,  775,  775,  775,  775,  775,
      775,  775,  775,  775,  777,  777,  777,  777,  777,  777,
      777,  777,  777,  777,  777,  781,  781,  781,  781,  781,

      781,  781,  781,  781,  781,  781,  382,  382,  382,  382,
      382,  382,  382,  382,  382,  382,  382,  388,  388,  388,
      388,  388,  388,  388,  388,  388,  388,  388,  790,  790,
      790,  790,  790,  790,  790,  790,  790,  790,  790,  794,
      794,  794,  794,  794,  794,  794,  794,  794,  794,  794,
      796,  796,  796,  796,  796,  796,  796,  796,  796,  796,
      796,  800,  800,  800,  800,  800,  800,  800,  800,  800,
      800,  800,  408,  408,  408,  408,  408,  408,  408,  408,
      408,  408,  408,  414,  414,  414,  414,  414,  414,  414,
      414,  414,  414,  414,  809,  809,  809,  809,  809,  809,

      809,  809,  809,  809,  809,  813,  813,  813,  813,  813,
      813,  813,  813,  813,  813,  813,  815,  815,  815,  815,
      815,  815,  815,  815,  815,  815,  815,  819,  819,  819,
      819,  819,  819,  819,  819,  819,  819,  819,  434,  434,
      434,  434,  434,  434,  434,  434,  434,  434,  434,  440,
     1227,  440,  440,  440,  440,  440,  440,  440,  440,  440,
      828, 1227,  828,  828,  828,  828,  828,  828,  828,  828,
      828,  831, 1227,  831,  831,  831,  831,  831,  831,  831,
      831,  831,  832, 1227,  832,  832,  832,  832,  832,  832,
      832,  832,  832,  835, 1227,  835,  835,  835,  835,  835,

      835,  835,  835,  835,  457, 1227,  457,  457,  457,  457,
      457,  457,  457,  457,  457,  469, 1227, 1227,  469,  469,
      693, 1227,  693,  693,  693,  693,  693,  693,  693,  693,
      693,  696, 1227,  696,  696,  696,  696,  696,  696,  696,
      696,  696,  698, 1227,  698,  698,  698,  698,  698,  698,
      698,  698,  698,  702, 1227,  702,  702,  702,  702,  702,
      256,  256, 1227,  256,  256,  256,  256,  256,  727,  727,
      727,  727,  727,  549,  549,  549,  549,  549,  305, 1227,
      305,  305,  305,  305,  305,  312, 1227,  312,  312,  312,
      312,  312,  312,  312,  312,  312,  739, 1227,  739,  739,

      739,  739,  739,  739,  739,  739,  739,  742, 1227,  742,
      742,  742,  742,  742,  742,  742,  742,  742,  743, 1227,
      743,  743,  743,  743,  743,  743,  743,  743,  743,  746,
     1227,  746,  746,  746,  746,  746,  746,  746,  746,  746,
      329, 1227,  329,  329,  329,  329,  329,  329,  329,  329,
      329,  255, 1227,  255,  255,  255,  255,  255,  342,  342,
     1227,  342,  342,  342,  342,  342,  342,  342,  342,  760,
      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
      762,  762, 1227,  762,  762,  762,  762,  762,  762,  762,
      762,  356,  356, 1227,  356,  356,  356,  356,  356,  356,

      356,  356,  362,  362,  362,  362,  362,  362,  362,  362,
      362,  362,  362,  771,  771,  771,  771,  771,  771,  771,
      771,  771,  771,  771,  775,  775,  775,  775,  775,  775,
      775,  775,  775,  775,  775,  777,  777,  777,  777,  777,
      777,  777,  777,  777,  777,  777,  781,  781,  781,  781,
      781,  781,  781,  781,  781,  781,  781,  382,  382,  382,
      382,  382,  382,  382,  382,  382,  382,  382,  388,  388,
      388,  388,  388,  388,  388,  388,  388,  388,  388,  790,
      790,  790,  790,  790,  790,  790,  790,  790,  790,  790,
      794,  794,  794,  794,  794,  794,  794,  794,  794,  794,

      794,  796,  796,  796,  796,  796,  796,  796,  796,  796,
      796,  796,  800,  800,  800,  800,  800,  800,  800,  800,
      800,  800,  800,  408,  408,  408,  408,  408,  408,  408,
      408,  408,  408,  408,  414,  414,  414,  414,  414,  414,
      414,  414,  414,  414,  414,  809,  809,  809,  809,  809,
      809,  809,  809,  809,  809,  809,  813,  813,  813,  813,
      813,  813,  813,  813,  813,  813,  813,  815,  815,  815,
      815,  815,  815,  815,  815,  815,  815,  815,  819,  819,
      819,  819,  819,  819,  819,  819,  819,  819,  819,  434,
      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,

      440, 1227,  440,  440,  440,  440,  440,  440,  440,  440,
      440,  828, 1227,  828,  828,  828,  828,  828,  828,  828,
      828,  828,  831, 1227,  831,  831,  831,  831,  831,  831,
      831,  831,  831,  832, 1227,  832,  832,  832,  832,  832,
      832,  832,  832,  832,  835, 1227,  835,  835,  835,  835,
      835,  835,  835,  835,  835,  457, 1227,  457,  457,  457,
      457,  457,  457,  457,  457,  457,  469, 1227, 1227,  469,
      469,  256,  256, 1227,  256,  256,  256,  256,  256,  549,
      549,  549,  549,  549,  305, 1227,  305,  305,  305,  305,
      305,  312, 1227,  312,  312,  312,  312,  312,  312,  312,

      312,  312,  329, 1227,  329,  329,  329,  329,  329,  329,
      329,  329,  329,  255, 1227,  255,  255,  255,  255,  255,
      342,  342, 1227,  342,  342,  342,  342,  342,  342,  342,
      342,  356,  356, 1227,  356,  356,  356,  356,  356,  356,
      356,  356,  362,  362,  362,  362,  362,  362,  362,  362,
      362,  362,  362,  382,  382,  382,  382,  382,  382,  382,
      382,  382,  382,  382,  388,  388,  388,  388,  388,  388,
      388,  388,  388,  388,  388,  408,  408,  408,  408,  408,
      408,  408,  408,  408,  408,  408,   23, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,

     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227
    } ;

static yyconst short int yy_chk[9060] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    2,    6,    4,    6,    6, 1224,    8,    6,
       40,    2,   25,    4,   25,   25,   33,   40,   29,    2,
        3,    4,    3,    3,    3,    8,    6,   25,    3,    3,

       33,    3,    3,   13,    3,    3,    3,   14,   14,   44,
       44,    3,    3,    3,    3,   13,   13,   13,   13,   14,
       14,   14,   14,   27,   27,   27,   27,   29,   31,   46,
       46,   31, 1222,   31,   31,  228,    3,  228,   27,   35,
      291,    3,    3,   65,    3,   65,   65,    3,    3,    3,
        3,   35,    3,  291,    3,   66,   66,   66,   66,    3,
        3,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,

        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    7,    7,    7,    7,    7,    7,    7,
        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,

        7,    7,    7,    7,    7,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,

       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   15,
       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,

       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
       15,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   19,   19,   19,   19,   19,   19,   19,

       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   21,   21,   21,   21,   21,
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,

       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
       21,   21,   21,   21,   21,   21,   21,   36, 1221,   36,
       36,   36,   36,   61,   38,   36,   38,   38,   38,   38,
      118,  292,   38,   38,   39,   79,   39,   39,   39,   39,
       60,  553,   39,   42,   87,   42,   42,   42,   42,  292,
       48,   87,   39,   90,   53,   98,  224,   48,   42,  118,
       90,   53,  224,   42,   48,   39,  553,   39,   53,   39,
       61,   39,  552,   39,   79,   39,   39,   39,   42,   39,

       39,   39,   76,   76,   76,   76,   60,   39,   41,   90,
       41,   41,   41,   41,   98,   89,   43,  257,   53,  552,
       41,   43,   89,   41,   43,   53,   43,   43,   41,   43,
       43,   41,   43,  257,   47,   50,   41,  134,  134,  983,
       41,   47,   50,   41,   49,  983,   89,  133,   47,   50,
      226,   49,   41,   47,   49,   49,   49,   49,   49,  226,
       41,   47,   47,   47,   51,   52,   47,   54,   55,   56,
      302,   51,   52,   57,   54,   55,   56,   50,   51,   52,
       57,   54,   55,   56,   58,   59,  133,   57,  117,  136,
      136,   58,   59,   78,   78,   78,   78,  227,   58,   59,

       67,  227,   67,   67,   67,   67,   55,  302,   69,   56,
       54,   55,  117,   51,   52, 1219,   69,   52,   69,   69,
      244,   69,   69,   57,   71,   55, 1218,   58,   72,  244,
      122,   71,  149,  149,  122,   72,   59,  729,   71,  122,
       58,   63,   72,   63,   63,   63,   63,  516,   82,   63,
       82,   82,   82,   82,   91,   91,   91,   91, 1217,   63,
       88,  516,   71,   88,   88,   88,   88,   88,  138,  138,
     1216,   72,   63,  729,   63,  231,   63,  138,   63,  231,
       63, 1215,   63,   63,   63,  182,   63,   63,   63,   92,
       92,   92,   92,  341,   63,   68,   83,   68,   68,   68,

       68,  151,  151,   68,  143,  143,   83,   83,   83,   83,
      153,  153,   85,   68,   85,   85,   85,   85,  100,  153,
      100,  100,  100,  100,  182,  143,  893,   85,   68,  164,
      164,  229,   85,  229,   68,  341,   68,   68,   68,   83,
       68,  101,  101,  101,  101,   83,  229,   85,  103,   83,
      103,  103,  103,  103,  107,  107,  107,  107,  108,  108,
      108,  108,  893,  103,  112,  112,  112,  112,  103,  113,
      113,  113,  113,  116,  116,  116,  116,  116,  130,  130,
      130,  130,  107,  103,  101,  102, 1214,  102,  102,  102,
      102,  108,  124,  124,  124,  124,  306,  102, 1213,  114,

      102,  114,  114,  114,  114,  102,  130,  112,  102,  731,
      148,  148,  306,  102,  114,  158,  158,  102,  246,  114,
      102,  123,  246,  123,  123,  123,  123,  137,  137,  102,
     1211,  137,  163,  163,  114,  124,  158,  102,  105,  105,
      731,  105,  105,  105,  105,  105,  105,  105,  105,  105,
      105,  105,  105,  754,  105,  105,  131,  131,  131,  131,
      105,  105,  105,  105,  126,  148,  126,  126,  126,  126,
      137,  166,  166,  198,  139,  139, 1210,  173,  173,  126,
      236,  236,  754,  105,  126,  140,  140,  163,  139,  131,
      139,  139,  139,  139,  253,  253,  168,  168,  173,  126,

     1209,  140,  140,  140,  140,  168,  284,  284,  105,  105,
      106,  106,  198,  106,  106,  106,  106,  106,  106,  106,
      106,  106,  106,  106,  106,  142,  106,  106,  106,  106,
      106,  106,  106,  106,  106,  106,  142,  147,  147,  147,
      147,  142,  154,  154,  140,  142,  146,  146,  146,  146,
      152,  152,  178,  178,  152,  106,  154,  142,  154,  154,
      154,  154,  239,  239,  239,  142,  162,  162,  162,  162,
      147,  926,  155,  155,  146,  926,  161,  161,  161,  161,
      106,  106,  125,  303,  125,  125,  125,  125,  155,  155,
      155,  155,  157,  152,  125,  323,  323,  125,  194,  162,

      194,  194,  125,  157,  161,  125,  294,  178,  157,  256,
      125,  294,  157,  194,  125,  249,  256,  125,  167,  167,
      249,  303,  167,  256,  157,  338,  125,  176,  176,  176,
      176,  155,  157,  249,  125,  128,  128,  128,  128,  128,
      128,  338,  128,  128,  128,  128,  128,  128,  128,  128,
      314,  128,  128,  169,  169,  176, 1208,  128,  128,  128,
      128,  167,  172,  177,  177,  177,  177,  169, 1205,  169,
      169,  169,  169,  172,  170,  170,  350,  350,  172, 1204,
      128,  184,  172,  184,  184,  184,  184,  362,  362,  314,
      170,  170,  170,  170,  172,  304,  177,  185,  185,  185,

      185,  195,  172,  195,  195,  128,  128,  129,  129,  129,
      129,  129,  129,  551,  129,  129,  129,  129,  129,  129,
      129,  129,  730,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  170,  187,  304,  187,  187,  187,  187,
      185,  551,  191,  191,  191,  191,  305,  730,  285,  187,
      285,  285,  129,  305,  187,  192,  192,  192,  192,  201,
      201,  201,  201,  202,  202,  202,  202,  689,  309,  187,
      191,  203,  203,  203,  203,  309,  689,  129,  129,  141,
      141,  204,  204,  204,  204,  326,  326,  326,  192,  211,
      211,  211,  211,  141, 1203,  141,  141,  141,  141,  212,

      340,  212,  212,  212,  212,  141,  364,  364,  141,  217,
      217,  217,  217,  141,  212,  328,  141,  309, 1202,  212,
      328,  141,  217,  245,  237,  141,  237,  245,  141,  237,
      237,  237,  237,  308,  212,  343,  555,  141,  340,  343,
      308,  245,  217,  555,  343,  141,  144,  144,  144,  144,
      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
      144,  442,  144,  144,  235,  235,  235,  235,  144,  144,
      144,  144,  258,  260,  259,  261,  262,  235,  308,  258,
      260,  259,  261,  262,  367,  367,  258,  260,  259,  261,
      262,  144,  267,  355,  261,  368,  368,  235,  355,  267,

      442,  263,  258,  259,  260,  931,  267,  262,  263,  931,
      261,  263,  263,  263,  263,  263,  144,  144,  145,  145,
      145,  145,  145,  145,  145,  145,  145,  145,  145,  145,
      145,  145,  145, 1201,  145,  145,  145,  145,  145,  145,
      145,  145,  145,  145,  264,  265,  266,  268,  267,  378,
      378,  264,  265,  266,  268,  269,  509,  270,  264,  265,
      266,  268,  269,  145,  270,  271,  272,  274,  277,  269,
      276,  270,  271,  272,  274,  277,  476,  276,  456,  271,
      272,  274,  277,  456,  276,  273,  264,  275,  145,  145,
      156,  156,  273,  476,  275,  509,  278,  265,  266,  273,

      900,  275,  900,  278,  156,  515,  156,  156,  156,  156,
      278,  269,  892,  270,  587,  274,  156,  271,  587,  156,
      388,  388,  277,  587,  156,  272,  276,  156,  275,  353,
      353,  353,  156,  566,  273,  273,  156,  369,  369,  156,
      296,  296,  296,  296,  515,  278,  369,  892,  156,  298,
      298,  298,  298,  390,  390, 1200,  156,  159,  159,  159,
      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
      159,  159,  566,  159,  159,  310,  310,  310,  310,  159,
      159,  159,  159,  307,  393,  393,  307,  307,  307,  307,
      307,  311,  311,  311,  311,  318,  318,  318,  318,  324,

     1199,  324,  159,  924,  324,  324,  324,  324,  374,  374,
      924,  320,  320,  320,  320,  345,  345,  345,  345,  332,
      332,  332,  332,  755,  320,  394,  394,  159,  159,  160,
      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
      160,  160,  160,  160,  320,  160,  160,  160,  160,  160,
      160,  160,  160,  160,  160,  319,  755,  319,  319,  319,
      319,  332,  556,  322,  322,  322,  322,  984,  374,  556,
      319,  404,  404,  984,  160,  319,  322,  333,  333,  333,
      333,  339,  339,  339,  339,  339,  370,  370,  905,  337,
      319,  337,  337,  337,  337,  370,  322,  395,  395,  160,

      160,  171,  171, 1198,  337,  351,  395,  351,  556,  337,
      351,  351,  351,  351,  911,  171,  911,  171,  171,  171,
      171,  414,  414,  333,  337,  376,  376,  171,  905,  346,
      171,  346,  346,  346,  346,  171,  381,  381,  171,  896,
      381,  376,  376,  171,  346,  381,  896,  171, 1184,  346,
      171,  416,  416,  347,  347,  347,  347,  419,  419,  171,
      359,  359,  359,  359,  346, 1195,  347,  171,  174,  174,
      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
      174,  174,  174,  896,  174,  174,  347,  371,  371, 1184,
      174,  174,  174,  174,  349,  349,  349,  349,  379,  379,

      420,  420,  359,  371,  371,  371,  371,  349, 1194,  360,
      360,  360,  360,  174,  379,  379,  379,  396,  396, 1192,
      386,  386,  386,  386,  365,  365,  396,  349,  365,  366,
      366,  430,  430,  366,  385,  385,  385,  385,  174,  174,
      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
      175,  175,  175,  175,  175,  360,  175,  175,  175,  175,
      175,  175,  175,  175,  175,  175,  386,  365,  451,  451,
      372,  372,  366,  988,  373,  373,  385,  387,  387,  375,
      375,  454,  454,  454,  372,  175,  372,  372,  372,  372,
      373,  373,  373,  373, 1191,  375,  375,  375,  375,  372,

      400,  400,  988,  373,  372,  391,  391,  568,  375,  391,
      175,  175,  186,  572,  186,  186,  186,  186,  572,  372,
      377,  377,  572,  373,  186,  407,  407,  186,  375,  407,
      387,  377,  186,  377,  407,  186,  377,  377,  377,  377,
      186,  392,  392,  907,  186,  392,  568,  186,  391,  486,
      486,  411,  411,  411,  411, 1190,  186,  417,  417, 1006,
      400,  417,  492,  492,  186,  189,  189, 1006,  189,  189,
      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
      907,  189,  189, 1178,  392,  397,  397,  189,  189,  189,
      189,  402,  402,  411,  446,  446,  446,  446,  403,  403,

      417,  397,  397,  397,  397,  405,  405,  402,  402,  403,
      189,  403,  413,  413,  403,  403,  403,  403,  426,  426,
     1177,  405,  405,  405,  412,  412,  412,  412,  418,  418,
      421,  421,  418,  561,  561,  189,  189,  190,  190,  421,
      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
      190,  190,  906,  190,  190,  190,  190,  190,  190,  190,
      190,  190,  190,  422,  422,  413,  577,  398,  398, 1176,
      412,  418,  422,  428,  428,  399,  399,  463,  426,  463,
      463,  398,  190,  398,  398,  398,  398,  906,  519,  428,
      428,  399,  399,  399,  399,  519,  398,  464,  464,  464,

      464,  398,  519, 1173,  399,  577, 1074,  190,  190,  327,
      327,  327,  327,  423,  423, 1074,  398,  519,  327,  327,
      327,  327,  327,  327,  399,  465,  465,  465,  465,  423,
      423,  423,  423,  437,  437,  437,  437, 1079,  327,  327,
      327,  327,  327,  327,  329,  329, 1079,  329,  329,  329,
      329,  329,  329,  329,  329,  329,  329,  329,  329,  756,
      329,  329,  401,  401,  582,  582,  329,  329,  329,  329,
      431,  431,  495,  495,  495,  437,  644,  644,  401,  401,
      401,  401,  429,  429, 1056,  591,  431,  431,  431,  329,
      591,  401,  756,  429,  591,  429,  439,  439,  429,  429,

      429,  429, 1056,  433,  433, 1172,  557,  433,  564,  564,
      564,  401,  433,  557,  329,  329,  330,  330, 1055,  330,
      330,  330,  330,  330,  330,  330,  330,  330,  330,  330,
      330,  330,  330,  330,  330,  330,  330,  330,  330,  330,
      330,  330, 1157,  557,  438,  438,  438,  438,  557,  439,
      916,  452,  916,  452,  425,  425,  452,  452,  452,  452,
     1055,  330,  466,  466,  466,  466,  467,  467,  467,  467,
      425,  425,  425,  425,  460,  460,  460,  460,  461,  461,
      461,  461, 1157,  425,  752,  752,  330,  330,  331,  331,
      438,  331,  331,  331,  331,  331,  331,  331,  331,  331,

      331,  331,  331,  425,  331,  331,  331,  331,  331,  331,
      331,  331,  331,  331,  649,  468,  460,  468,  424,  424,
      468,  468,  468,  468,  461, 1171,  427,  427,  493,  493,
      493,  493,  424,  331,  424,  424,  424,  424,  494,  494,
      494,  494,  427,  427,  427,  427, 1143,  424,  773,  773,
      518,  989,  424,  649,  921,  427,  921,  518,  331,  331,
      354,  354,  354,  354,  518,  594,  594,  424, 1140,  354,
      354,  354,  354,  354,  354,  427,  925,  558,  925,  558,
      989,  518,  558,  558,  558,  558,  585,  585,  585,  354,
      354,  354,  354,  354,  354,  356,  356,  356,  356,  356,

      356, 1138,  356,  356,  356,  356,  356,  356,  356,  356,
      594,  356,  356,  562,  562,  562,  562,  356,  356,  356,
      356,  447, 1137,  447,  447,  447,  447, 1011,  578,  448,
      448,  448,  448,  596,  596, 1011,  447,  521,  520,  524,
      356,  447,  448, 1135,  521,  520,  524,  529,  929,  596,
      596,  521,  520,  524,  529,  929,  447,  520,  578,  774,
      774,  529,  448,  578,  521,  356,  356,  357,  357,  357,
      357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
      357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
      357,  357,  357,  357,  357,  357,  357,  357,  357,  357,

      357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
      357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
      357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
      357,  357,  357,  357,  357,  357,  357,  357,  357,  358,
      358,  358,  358,  358,  358, 1134,  358,  358,  358,  358,
      358,  358,  358,  358, 1133,  358,  358,  358,  358,  358,
      358,  358,  358,  358,  358,  450,  450,  450,  450,  491,
      491,  491,  491,  522,  523,  977,  526,  651,  450,  525,
      522,  523,  491,  526,  358,  527,  525,  522,  523,  530,
      526,  992,  527,  525, 1132,  693,  530,  992,  450,  527,

      977,  522,  491,  530,  601,  601,  532,  523,  601,  358,
      358,  380,  380,  532,  607,  526,  651,  534, 1131,  607,
      532,  779,  779,  607,  534,  527,  993,  380,  380,  380,
      380,  534,  993,  525,  693,  530,  380,  380,  380,  380,
      380,  380,  563,  563,  563,  563,  579,  601,  579,  780,
      780,  579,  579,  579,  579,  987,  380,  380,  380,  380,
      380,  380,  382,  382,  382,  382,  382,  382,  382,  382,
      382,  382,  382,  382,  382,  382,  382, 1116,  382,  382,
      987,  533,  535,  536,  382,  382,  382,  382,  533,  535,
      536,  560,  560,  560,  560,  533,  535,  536,  581,  581,

      581,  581,  792,  792,  560,  599,  599,  382,  647,  647,
      647,  581,  583,  583,  583,  583,  584,  584,  584,  584,
     1115,  599,  599,  599,  560,  535,  645,  645,  645,  645,
      533,  581,  382,  382,  383,  383,  383,  383,  383,  383,
      383,  383,  383,  383,  383,  383,  383,  383,  383,  383,
      383,  383,  383,  383,  383,  383,  383,  383,  383,  383,
      383,  383,  383,  383,  383,  383,  383,  383,  383,  383,
      383,  383,  383,  383,  383,  383,  383,  383,  383,  383,
      383,  383,  383,  383,  383,  383,  383,  383,  383,  383,
      383,  383,  383,  383,  383,  383,  383,  383,  383,  383,

      383,  383,  383,  383,  383,  383,  384,  384,  384,  384,
      384,  384,  384,  384,  384,  384,  384,  384,  384,  384,
      384, 1111,  384,  384,  384,  384,  384,  384,  384,  384,
      384,  384,  528,  531,  538,  710,  537,  793,  793,  528,
      531,  538,  710,  537, 1110,  539,  528,  531,  538,  710,
      537,  384,  539,  593,  593,  978,  602,  602,  623,  539,
      608,  608,  978,  623,  593,  602,  593,  623, 1050,  593,
      593,  593,  593,  595,  595, 1050,  384,  384,  406,  406,
      537,  538,  597,  597,  528,  537,  531,  978,  539,  595,
      595,  595,  595, 1075,  406,  406,  406,  406,  597,  597,

      597,  597,  595,  406,  406,  406,  406,  406,  406, 1106,
      618,  618,  603,  603,  617,  617,  603,  608,  617,  618,
      770,  770,  595,  406,  406,  406,  406,  406,  406,  408,
      408,  408,  408,  408,  408,  408,  408,  408,  408,  408,
      408,  408,  408,  408, 1075,  408,  408,  598,  598,  610,
      610,  408,  408,  408,  408,  603,  930,  617,  930,  609,
      609,  798,  798,  598,  598,  598,  598,  612,  612, 1007,
      609,  770,  609, 1007,  408,  609,  609,  609,  609,  613,
      613,  634,  634,  612,  612,  646,  646,  646,  646, 1008,
      634,  799,  799, 1008,  610,  613,  613,  613,  613,  408,

      408,  409,  409,  409,  409,  409,  409,  409,  409,  409,
      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
      409,  409,  409,  410,  410,  410,  410,  410,  410,  410,
      410,  410,  410,  410,  410,  410,  410,  410, 1105,  410,
      410,  410,  410,  410,  410,  410,  410,  410,  410,  615,

      615,  624,  624,  611,  611,  619,  619,  614,  614,  619,
     1104,  627,  627, 1057,  698,  615,  615,  615,  410,  611,
      611,  611,  611,  614,  614,  614,  614,  627,  627,  627,
      627, 1057,  611,  626,  626,  811,  811,  739,  625,  625,
      627,  812,  812,  410,  410,  432,  432, 1099,  619,  625,
      743,  625,  611,  698,  625,  625,  625,  625,  624,  982,
      627,  432,  432,  432,  432,  628,  628,  629,  629,  982,
      432,  432,  432,  432,  432,  432,  739, 1098,  626,  640,
      640,  628,  628,  629,  629,  629,  629,  817,  817,  743,
      432,  432,  432,  432,  432,  432,  434,  434,  434,  434,

      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
      434, 1097,  434,  434,  630,  630,  786,  786,  434,  434,
      434,  434,  631,  631,  657,  657,  657,  657,  733, 1096,
      630,  630,  630,  630,  991,  733,  640,  639,  631,  631,
      631,  434,  639,  641,  991,  641,  639,  655,  641,  641,
      641,  641,  655,  775,  775,  997,  655,  658,  658,  658,
      658,  997,  775, 1094,  733,  786,  434,  434,  435,  435,
      435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
      435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
      435,  435,  435,  435,  435,  435,  435,  435,  435,  435,

      435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
      435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
      435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
      435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
      436,  436,  436,  436,  436,  436,  436,  436,  436,  436,
      436,  436,  436,  436,  436, 1093,  436,  436,  436,  436,
      436,  436,  436,  436,  436,  436,  633,  633,  704,  705,
      633,  818,  818,  635,  635,  704,  705,  635,  736,  736,
      736,  736,  704,  705, 1046,  436,  643,  643,  643,  643,
      707, 1046,  705,  708,  709,  734,  735,  707,  704,  643,

      708,  709,  734,  735,  707, 1063, 1063,  708,  709,  633,
      436,  436,  455,  455,  455,  455,  635,  995,  995,  643,
      707,  455,  455,  455,  455,  455,  455,  708,  709,  737,
      737,  737,  737, 1046, 1092,  734,  735,  757,  757,  757,
      757,  455,  455,  455,  455,  455,  455,  457,  457, 1091,
      457,  457,  457,  457,  457,  457,  457,  457,  457,  457,
      457,  457,  995,  457,  457, 1090,  706,  712,  713,  457,
      457,  457,  457,  706,  712,  713,  716,  917,  917,  917,
      706,  712,  713,  716,  758,  758,  758,  758,  706,  711,
      716,  760,  457,  998,  714,  760,  711,  720,  721,  998,

      760,  714,  718,  711,  720,  721,  712,  715,  714,  718,
     1089,  720,  721, 1103,  715, 1103,  718,  457,  457,  458,
      458,  715,  458,  458,  458,  458,  458,  458,  458,  458,
      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
      458,  458,  458,  458,  458,  711,  714,  717,  720,  718,
      715,  768,  768,  721,  717, 1108,  776,  776, 1108,  719,
     1088,  717,  769,  769,  458,  776,  719,  768,  768,  768,
      768,  782,  782,  719, 1109,  782, 1109,  996,  769,  769,
      769,  769,  771,  771,  789,  789,  771,  996,  717,  458,
      458,  459,  459, 1086,  459,  459,  459,  459,  459,  459,

      459,  459,  459,  459,  459,  459,  719,  459,  459,  459,
      459,  459,  459,  459,  459,  459,  459,  772,  772,  805,
      805,  772,  787,  787, 1085,  771,  777,  777,  778,  778,
      777,  828,  778,  788,  788,  789,  459, 1001,  787,  787,
      787,  787,  790,  790,  791,  791,  790, 1001,  791,  788,
      788,  788,  788,  801,  801, 1000, 1000,  801,  794,  794,
      772,  459,  459,  565,  565,  565,  565,  794,  805,  777,
      828,  778,  565,  565,  565,  565,  565,  565,  832,  795,
      795, 1084,  796,  796,  895,  790,  796,  791,  795,  808,
      808,  895,  565,  565,  565,  565,  565,  565,  569,  569,

     1000,  569,  569,  569,  569,  569,  569,  569,  569,  569,
      569,  569,  569, 1051,  569,  569, 1045,  832,  806,  806,
      569,  569,  569,  569, 1012,  796,  895, 1043, 1012,  797,
      797,  807,  807,  797,  806,  806,  806,  806,  820,  820,
      808, 1035,  820,  569,  922,  922,  922,  807,  807,  807,
      807,  813,  813,  809,  809,  810,  810,  809, 1034,  810,
      813,  815,  815,  816,  816,  815, 1051,  816,  569,  569,
      570,  570,  797,  570,  570,  570,  570,  570,  570,  570,
      570,  570,  570,  570,  570, 1033,  570,  570,  814,  814,
      824,  824,  570,  570,  570,  570,  809,  814,  810,  825,

      825,  825,  825, 1114,  815, 1114,  816,  826,  826,  826,
      826,  854,  854,  871,  854,  570,  872,  873,  874, 1052,
      871,  877,  878,  872,  873,  874,  854,  871,  877,  878,
      872,  873,  874, 1013, 1031,  877,  878, 1013,  872,  824,
      570,  570,  571,  571, 1027,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571, 1113,  571,  571,
     1113,  875,  876,  879,  571,  571,  571,  571,  875,  876,
      879,  878, 1052,  894,  979,  875,  876,  879,  880,  881,
      894,  979,  882,  876,  884,  880,  881,  571,  875,  882,
      883,  884,  880,  881,  980, 1059,  882,  883,  884,  913,

      913,  980, 1059,  571,  883,  879, 1068, 1068,  918,  918,
      979, 1064,  571,  571,  586,  586,  586,  586, 1064, 1076,
      894,  923,  923,  586,  586,  586,  586,  586,  586,  884,
      980,  882,  880, 1002, 1003,  881,  927,  927,  927, 1002,
     1003,  883, 1026,  586,  586,  586,  586,  586,  586,  588,
      588,  588,  588,  588,  588,  913,  588,  588,  588,  588,
      588,  588,  588,  588,  918,  588,  588, 1080,  963,  962,
     1076,  588,  588,  588,  588,  963,  962,  923,  964,  965,
     1069,  885,  963,  962,  966,  964,  965, 1069,  885, 1112,
      968,  966,  964,  965,  588,  885,  962,  968,  966,  969,

      967,  971, 1117,  972,  968, 1117,  969,  967,  971,  964,
      972, 1073, 1073,  969,  967,  971, 1081,  972, 1080,  588,
      588,  589,  589,  589,  589,  589,  589, 1112,  589,  589,
      589,  589,  589,  589,  589,  589,  885,  589,  589,  967,
      970, 1025,  969,  589,  589,  589,  589,  970,  973,  973,
      973,  973, 1024,  976,  970,  976,  976,  985,  985,  985,
      985,  994,  994,  994,  994, 1042,  589, 1081,  999,  999,
     1014, 1014, 1014, 1014,  976, 1005, 1005, 1023, 1060, 1042,
     1042, 1042, 1042,  970,  999,  999,  999,  999, 1119, 1119,
     1119,  589,  589,  590,  590,  590,  590,  590,  590, 1061,

      590,  590,  590,  590,  590,  590,  590,  590, 1125,  590,
      590, 1004, 1004, 1125, 1188,  590,  590,  590,  590, 1038,
     1005, 1065, 1188, 1009, 1009, 1066, 1038, 1004, 1004, 1004,
     1004, 1060, 1044, 1038, 1044, 1044, 1037, 1022,  590, 1009,
     1009, 1009, 1009, 1037, 1039, 1070, 1071, 1021, 1038, 1040,
     1037, 1039, 1061, 1040,  590, 1037, 1020, 1041, 1039, 1047,
     1040, 1041, 1048,  590,  590,  600,  600, 1040, 1041, 1121,
     1047, 1053, 1121, 1048, 1065, 1041, 1019, 1047, 1066, 1018,
     1048,  600,  600,  600,  600, 1053, 1053, 1053, 1053, 1062,
      600,  600,  600,  600,  600,  600, 1129, 1154, 1070, 1071,

     1039, 1129, 1154, 1062, 1062, 1062, 1062, 1123, 1123, 1123,
      600,  600,  600,  600,  600,  600,  604,  604,  604,  604,
      604,  604,  604,  604,  604,  604,  604,  604,  604,  604,
      604, 1017,  604,  604, 1067, 1067, 1067, 1107,  604,  604,
      604,  604, 1142, 1082, 1107, 1016, 1072, 1072, 1072, 1142,
     1067, 1067, 1067, 1067, 1077, 1077, 1077, 1082, 1082, 1082,
     1082,  604, 1072, 1072, 1072, 1072, 1130, 1102, 1130, 1100,
     1077, 1077, 1077, 1077, 1102, 1158, 1100, 1127, 1127, 1127,
     1158, 1102, 1107, 1100, 1160, 1160,  604,  604,  605,  605,
      605,  605,  605,  605,  605,  605,  605,  605,  605,  605,

      605,  605,  605, 1100,  605,  605, 1015, 1101, 1153, 1010,
      605,  605,  605,  605, 1101, 1153, 1118, 1118, 1118, 1102,
     1118, 1101, 1120, 1120,  990, 1159, 1120, 1122, 1122, 1122,
     1159, 1122, 1162,  605, 1124, 1124, 1148, 1162, 1124, 1101,
     1126, 1126, 1126, 1148, 1126, 1128, 1128, 1161, 1161, 1128,
     1148, 1163, 1163, 1164, 1164, 1153, 1166, 1166,  605,  605,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
      606,  606,  606,  606,  606,  986,  606,  606,  981, 1147,
     1149, 1165,  606,  606,  606,  606, 1147, 1149, 1165, 1167,
     1167, 1168, 1180, 1147, 1149, 1183, 1182, 1181, 1168, 1180,

      975, 1183, 1147, 1182, 1181,  606, 1180, 1185, 1186, 1187,
     1189, 1181, 1193, 1185, 1186, 1187, 1197,  961, 1189, 1193,
      960,  606, 1196, 1197,  958,  957,  955,  954,  952, 1196,
      606,  606,  616,  616, 1149,  951, 1196,  950,  949,  948,
      947,  946,  944,  943, 1182,  942,  939,  938,  616,  616,
      616,  616, 1181,  937,  936,  935,  933,  616,  616,  616,
      616,  616,  616,  932,  928,  912,  908,  904,  903,  901,
      897,  891,  889,  888,  887,  886,  870,  616,  616,  616,
      616,  616,  616,  620,  620,  620,  620,  620,  620,  620,
      620,  620,  620,  620,  620,  620,  620,  620,  869,  620,

      620,  868,  867,  866,  865,  620,  620,  620,  620,  864,
      861,  858,  857,  856,  855,  853,  852,  851,  850,  849,
      848,  847,  846,  845,  844,  843,  842,  841,  620,  840,
      839,  836,  831,  827,  823,  804,  785,  767,  766,  763,
      759,  753,  751,  750,  747,  742,  738,  732,  728,  727,
      726,  725,  724,  620,  620,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      723,  621,  621,  722,  703,  702,  701,  621,  621,  621,
      621,  696,  692,  691,  690,  688,  687,  686,  685,  683,
      682,  681,  680,  677,  676,  675,  674,  673,  672,  671,

      621,  670,  669,  668,  666,  665,  664,  663,  662,  661,
      659,  656,  650,  642,  592,  580,  576,  575,  574,  573,
      567,  559,  554,  550,  549,  621,  621,  622,  622,  622,
      622,  622,  622,  622,  622,  622,  622,  622,  622,  622,
      622,  622,  548,  622,  622,  547,  546,  545,  544,  622,
      622,  622,  622,  543,  542,  541,  540,  517,  513,  510,
      508,  507,  506,  505,  504,  503,  502,  501,  500,  499,
      498,  497,  622,  489,  488,  487,  485,  484,  483,  482,
      481,  480,  479,  478,  477,  475,  474,  473,  622,  472,
      471,  470,  462,  449,  445,  361,  348,  622,  622,  632,

      632,  336,  335,  334,  321,  317,  301,  299,  295,  293,
      290,  289,  288,  287,  286,  632,  632,  632,  632,  283,
      255,  254,  248,  247,  632,  632,  632,  632,  632,  632,
      243,  242,  241,  233,  232,  230,  225,  223,  222,  221,
      220,  208,  193,  188,  632,  632,  632,  632,  632,  632,
      636,  636,  636,  636,  636,  636,  636,  636,  636,  636,
      636,  636,  636,  636,  636,  183,  636,  636,  181,  132,
      127,  119,  636,  636,  636,  636,  115,  110,  109,  104,
       99,   97,   93,   86,   81,   73,   70,   64,   62,   45,
       34,   32,   28,   23,   22,  636,   20,   18,   16,   12,

       10,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      636,  636,  637,  637,  637,  637,  637,  637,  637,  637,
      637,  637,  637,  637,  637,  637,  637,    0,  637,  637,
        0,    0,    0,    0,  637,  637,  637,  637,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,  637,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,  637,  637,  638,  638,  638,  638,  638,  638,

      638,  638,  638,  638,  638,  638,  638,  638,  638,    0,
      638,  638,    0,    0,    0,    0,  638,  638,  638,  638,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,  638,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,  638,    0,    0,    0,    0,
        0,    0,    0,    0,  638,  638,  648,  648,  648,  648,
        0,    0,    0,    0,    0,  648,  648,  648,  648,  648,
      648,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,  648,  648,  648,  648,  648,

      648,  652,  652,    0,  652,  652,  652,  652,  652,  652,
      652,  652,  652,  652,  652,  652,    0,  652,  652,    0,
        0,    0,    0,  652,  652,  652,  652,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,  652,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,  652,  652,  653,  653,    0,  653,  653,  653,  653,
      653,  653,  653,  653,  653,  653,  653,  653,    0,  653,
      653,    0,    0,    0,    0,  653,  653,  653,  653,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,  653,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,  653,  653,  654,  654,    0,  654,  654,
      654,  654,  654,  654,  654,  654,  654,  654,  654,  654,
        0,  654,  654,    0,    0,    0,    0,  654,  654,  654,
      654,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      654,    0,    0,    0,    0,    0,    0,    0,    0,    0,

        0,    0,    0,    0,    0,    0,  654,    0,    0,    0,
        0,    0,    0,    0,    0,  654,  654,  746,  746,    0,
      746,  746,  746,  746,  746,  746,  746,  746,  746,  746,
      746,  746,    0,  746,  746,    0,    0,    0,    0,  746,
      746,  746,  746,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,  746,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,  746,  746,  748,
      748,    0,  748,  748,  748,  748,  748,  748,  748,  748,

      748,  748,  748,  748,    0,  748,  748,    0,    0,    0,
        0,  748,  748,  748,  748,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,  748,    0,    0,    0,    0,    0,
      748,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,  748,
      748,  749,  749,    0,  749,  749,  749,  749,  749,  749,
      749,  749,  749,  749,  749,  749,    0,  749,  749,    0,
        0,    0,    0,  749,  749,  749,  749,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,

        0,    0,    0,    0,    0,    0,  749,    0,    0,    0,
        0,    0,    0,    0,    0,    0,  749,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,  749,  749,  762,  762,  762,  762,  762,  762,    0,
      762,  762,  762,  762,  762,  762,  762,  762,    0,  762,
      762,    0,    0,    0,    0,  762,  762,  762,  762,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,  762,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,

        0,    0,    0,  762,  762,  764,  764,  764,  764,  764,
      764,    0,  764,  764,  764,  764,  764,  764,  764,  764,
        0,  764,  764,    0,    0,    0,    0,  764,  764,  764,
      764,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      764,    0,    0,    0,    0,    0,  764,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,  764,  764,  765,  765,  765,
      765,  765,  765,    0,  765,  765,  765,  765,  765,  765,
      765,  765,    0,  765,  765,    0,    0,    0,    0,  765,

      765,  765,  765,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,  765,    0,    0,    0,    0,    0,    0,    0,
        0,    0,  765,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,  765,  765,  781,
      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
      781,  781,  781,  781,    0,  781,  781,    0,    0,    0,
        0,  781,  781,  781,  781,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,  781,    0,    0,    0,    0,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,  781,
      781,  783,  783,  783,  783,  783,  783,  783,  783,  783,
      783,  783,  783,  783,  783,  783,    0,  783,  783,    0,
        0,    0,    0,  783,  783,  783,  783,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,  783,    0,    0,    0,
        0,    0,  783,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,  783,  783,  784,  784,  784,  784,  784,  784,  784,

      784,  784,  784,  784,  784,  784,  784,  784,    0,  784,
      784,    0,    0,    0,    0,  784,  784,  784,  784,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,  784,    0,
        0,    0,    0,    0,    0,    0,    0,    0,  784,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,  784,  784,  800,  800,  800,  800,  800,
      800,  800,  800,  800,  800,  800,  800,  800,  800,  800,
        0,  800,  800,    0,    0,    0,    0,  800,  800,  800,
      800,    0,    0,    0,    0,    0,    0,    0,    0,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      800,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,  800,  800,  802,  802,  802,
      802,  802,  802,  802,  802,  802,  802,  802,  802,  802,
      802,  802,    0,  802,  802,    0,    0,    0,    0,  802,
      802,  802,  802,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,  802,    0,    0,    0,    0,    0,  802,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,

        0,    0,    0,    0,    0,    0,    0,  802,  802,  803,
      803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
      803,  803,  803,  803,    0,  803,  803,    0,    0,    0,
        0,  803,  803,  803,  803,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,  803,    0,    0,    0,    0,    0,
        0,    0,    0,    0,  803,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,  803,
      803,  819,  819,  819,  819,  819,  819,  819,  819,  819,
      819,  819,  819,  819,  819,  819,    0,  819,  819,    0,

        0,    0,    0,  819,  819,  819,  819,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,  819,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,  819,  819,  821,  821,  821,  821,  821,  821,  821,
      821,  821,  821,  821,  821,  821,  821,  821,    0,  821,
      821,    0,    0,    0,    0,  821,  821,  821,  821,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,  821,    0,

        0,    0,    0,    0,  821,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,  821,  821,  822,  822,  822,  822,  822,
      822,  822,  822,  822,  822,  822,  822,  822,  822,  822,
        0,  822,  822,    0,    0,    0,    0,  822,  822,  822,
      822,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      822,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      822,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,  822,  822,  835,  835,    0,

      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
      835,  835,    0,  835,  835,    0,    0,    0,    0,  835,
      835,  835,  835,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,  835,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,  835,  835,  837,
      837,    0,  837,  837,  837,  837,  837,  837,  837,  837,
      837,  837,  837,  837,    0,  837,  837,    0,    0,    0,
        0,  837,  837,  837,  837,    0,    0,    0,    0,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,  837,    0,    0,    0,    0,    0,
      837,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,  837,
      837,  838,  838,    0,  838,  838,  838,  838,  838,  838,
      838,  838,  838,  838,  838,  838,    0,  838,  838,    0,
        0,    0,    0,  838,  838,  838,  838,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,  838,    0,    0,    0,
        0,    0,    0,    0,    0,    0,  838,    0,    0,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,  838,  838,  898,  898,    0,  898,  898,  898,  898,
      898,  898,  898,  898,  898,  898,  898,  898,    0,  898,
      898,    0,    0,    0,    0,  898,  898,  898,  898,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,  898,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,  898,    0,    0,    0,    0,
        0,    0,    0,  898,  898,  899,  899,    0,  899,  899,
      899,  899,  899,  899,  899,  899,  899,  899,  899,  899,

        0,  899,  899,    0,    0,    0,    0,  899,  899,  899,
      899,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      899,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,  899,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,  899,  899,  909,  909,  909,
      909,  909,  909,    0,  909,  909,  909,  909,  909,  909,
      909,  909,    0,  909,  909,    0,    0,    0,    0,  909,
      909,  909,  909,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,

        0,    0,  909,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,  909,
        0,    0,    0,    0,    0,    0,    0,  909,  909,  910,
      910,  910,  910,  910,  910,    0,  910,  910,  910,  910,
      910,  910,  910,  910,    0,  910,  910,    0,    0,    0,
        0,  910,  910,  910,  910,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,  910,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,  910,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,  910,

      910,  914,  914,  914,  914,  914,  914,  914,  914,  914,
      914,  914,  914,  914,  914,  914,    0,  914,  914,    0,
        0,    0,    0,  914,  914,  914,  914,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,  914,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,  914,    0,    0,    0,    0,    0,    0,
        0,  914,  914,  915,  915,  915,  915,  915,  915,  915,
      915,  915,  915,  915,  915,  915,  915,  915,    0,  915,
      915,    0,    0,    0,    0,  915,  915,  915,  915,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,  915,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      915,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,  915,  915,  919,  919,  919,  919,  919,
      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
        0,  919,  919,    0,    0,    0,    0,  919,  919,  919,
      919,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      919,    0,    0,    0,    0,    0,    0,    0,    0,    0,

        0,    0,    0,    0,    0,    0,    0,  919,    0,    0,
        0,    0,    0,    0,    0,  919,  919,  920,  920,  920,
      920,  920,  920,  920,  920,  920,  920,  920,  920,  920,
      920,  920,    0,  920,  920,    0,    0,    0,    0,  920,
      920,  920,  920,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,  920,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,  920,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,  920,  920, 1228,
        0, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,

     1229,    0, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229,
     1229, 1230, 1230,    0, 1230, 1230, 1230, 1231, 1231,    0,
     1231, 1231, 1231, 1231, 1231, 1232, 1232, 1232, 1233,    0,
        0, 1233,    0, 1233, 1233, 1233, 1234,    0, 1234, 1234,
     1234, 1234, 1234, 1235,    0, 1235, 1235, 1235, 1235, 1235,
     1235, 1235, 1235, 1235, 1236,    0, 1236, 1236, 1236, 1236,
     1236, 1236, 1236, 1236, 1236, 1237,    0, 1237, 1237, 1237,
     1237, 1237, 1237, 1237, 1237, 1237, 1238,    0, 1238, 1238,
     1238, 1238, 1238, 1238, 1238, 1238, 1238, 1239,    0, 1239,
     1239, 1239, 1239, 1239, 1240, 1240,    0, 1240, 1240, 1240,

     1240, 1240, 1240, 1240, 1240, 1241, 1241, 1241, 1241, 1241,
     1241, 1241, 1241, 1241, 1241, 1241, 1242, 1242,    0, 1242,
     1242, 1242, 1242, 1242, 1242, 1242, 1242, 1243, 1243, 1243,
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1244, 1244,
     1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1245,
     1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245,
     1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246,
     1246, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247,
     1247, 1247, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248,
     1248, 1248, 1248, 1249, 1249, 1249, 1249, 1249, 1249, 1249,

     1249, 1249, 1249, 1249, 1250, 1250, 1250, 1250, 1250, 1250,
     1250, 1250, 1250, 1250, 1250, 1251, 1251, 1251, 1251, 1251,
     1251, 1251, 1251, 1251, 1251, 1251, 1252, 1252, 1252, 1252,
     1252, 1252, 1252, 1252, 1252, 1252, 1252, 1253, 1253, 1253,
     1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1254, 1254,
     1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1255,
        0, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
     1256,    0, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256,
     1256, 1257,    0, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
     1257, 1257, 1258,    0, 1258, 1258, 1258, 1258, 1258, 1258,

     1258, 1258, 1258, 1259,    0, 1259, 1259, 1259, 1259, 1259,
     1259, 1259, 1259, 1259, 1260,    0,    0, 1260, 1260, 1261,
        0,    0, 1261, 1262,    0, 1262, 1262, 1262, 1262, 1262,
     1263, 1263,    0, 1263, 1263, 1263, 1263, 1263, 1264,    0,
        0,    0,    0, 1264, 1264, 1264, 1264, 1265, 1265, 1265,
     1265, 1265, 1266, 1266, 1266, 1267, 1267, 1267, 1267, 1267,
     1268,    0, 1268, 1268, 1268, 1268, 1268, 1269,    0, 1269,
     1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1270,    0,
     1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1271,
        0, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,

     1272,    0, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272,
     1272, 1273,    0, 1273, 1273, 1273, 1273, 1273, 1273, 1273,
     1273, 1273, 1274, 1274,    0, 1274, 1274, 1274, 1274, 1274,
     1274, 1274, 1274, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
     1275, 1275, 1275, 1275, 1276, 1276,    0, 1276, 1276, 1276,
     1276, 1276, 1276, 1276, 1276, 1277, 1277, 1277, 1277, 1277,
     1277, 1277, 1277, 1277, 1277, 1277, 1278, 1278, 1278, 1278,
     1278, 1278, 1278, 1278, 1278, 1278, 1278, 1279, 1279, 1279,
     1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1280, 1280,
     1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1281,

     1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281,
     1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
     1282, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283,
     1283, 1283, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284,
     1284, 1284, 1284, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
     1285, 1285, 1285, 1285, 1286, 1286, 1286, 1286, 1286, 1286,
     1286, 1286, 1286, 1286, 1286, 1287, 1287, 1287, 1287, 1287,
     1287, 1287, 1287, 1287, 1287, 1287, 1288, 1288, 1288, 1288,
     1288, 1288, 1288, 1288, 1288, 1288, 1288, 1289,    0, 1289,
     1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1290,    0,

     1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1291,
        0, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
     1292,    0, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
     1292, 1293,    0, 1293, 1293, 1293, 1293, 1293, 1293, 1293,
     1293, 1293, 1294,    0,    0, 1294, 1294, 1295,    0,    0,
     1295, 1296,    0, 1296, 1296, 1296, 1296, 1296, 1296, 1296,
     1296, 1296, 1297,    0, 1297, 1297, 1297, 1297, 1297, 1297,
     1297, 1297, 1297, 1298,    0, 1298, 1298, 1298, 1298, 1298,
     1298, 1298, 1298, 1298, 1299,    0,    0, 1299, 1299, 1299,
     1299, 1299, 1300,    0, 1300, 1300, 1300, 1300, 1300, 1301,

     1301,    0, 1301, 1301, 1301, 1301, 1301, 1302, 1302, 1302,
     1302, 1302, 1303, 1303, 1303, 1303, 1303, 1304, 1304, 1304,
     1304, 1304, 1305, 1305, 1305, 1305, 1305, 1306,    0, 1306,
     1306, 1306, 1306, 1306, 1307,    0, 1307, 1307, 1307, 1307,
     1307, 1307, 1307, 1307, 1307, 1308,    0, 1308, 1308, 1308,
     1308, 1308, 1308, 1308, 1308, 1308, 1309,    0, 1309, 1309,
     1309, 1309, 1309, 1309, 1309, 1309, 1309, 1310,    0, 1310,
     1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1311,    0,
     1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1312,
        0, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,

     1313,    0, 1313, 1313, 1313, 1313, 1313, 1314, 1314,    0,
     1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1315, 1315,
     1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1316,
     1316,    0, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316,
     1317, 1317,    0, 1317, 1317, 1317, 1317, 1317, 1317, 1317,
     1317, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318,
     1318, 1318, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319,
     1319, 1319, 1319, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
     1320, 1320, 1320, 1320, 1321, 1321, 1321, 1321, 1321, 1321,
     1321, 1321, 1321, 1321, 1321, 1322, 1322, 1322, 1322, 1322,

     1322, 1322, 1322, 1322, 1322, 1322, 1323, 1323, 1323, 1323,
     1323, 1323, 1323, 1323, 1323, 1323, 1323, 1324, 1324, 1324,
     1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1325, 1325,
     1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1326,
     1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326,
     1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
     1327, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328,
     1328, 1328, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
     1329, 1329, 1329, 1330, 1330, 1330, 1330, 1330, 1330, 1330,
     1330, 1330, 1330, 1330, 1331, 1331, 1331, 1331, 1331, 1331,

     1331, 1331, 1331, 1331, 1331, 1332, 1332, 1332, 1332, 1332,
     1332, 1332, 1332, 1332, 1332, 1332, 1333, 1333, 1333, 1333,
     1333, 1333, 1333, 1333, 1333, 1333, 1333, 1334, 1334, 1334,
     1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1335, 1335,
     1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1336,
        0, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336,
     1337,    0, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
     1337, 1338,    0, 1338, 1338, 1338, 1338, 1338, 1338, 1338,
     1338, 1338, 1339,    0, 1339, 1339, 1339, 1339, 1339, 1339,
     1339, 1339, 1339, 1340,    0, 1340, 1340, 1340, 1340, 1340,

     1340, 1340, 1340, 1340, 1341,    0, 1341, 1341, 1341, 1341,
     1341, 1341, 1341, 1341, 1341, 1342,    0,    0, 1342, 1342,
     1343,    0, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343,
     1343, 1344,    0, 1344, 1344, 1344, 1344, 1344, 1344, 1344,
     1344, 1344, 1345,    0, 1345, 1345, 1345, 1345, 1345, 1345,
     1345, 1345, 1345, 1346,    0, 1346, 1346, 1346, 1346, 1346,
     1347, 1347,    0, 1347, 1347, 1347, 1347, 1347, 1348, 1348,
     1348, 1348, 1348, 1349, 1349, 1349, 1349, 1349, 1350,    0,
     1350, 1350, 1350, 1350, 1350, 1351,    0, 1351, 1351, 1351,
     1351, 1351, 1351, 1351, 1351, 1351, 1352,    0, 1352, 1352,

     1352, 1352, 1352, 1352, 1352, 1352, 1352, 1353,    0, 1353,
     1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1354,    0,
     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1355,
        0, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
     1356,    0, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356,
     1356, 1357,    0, 1357, 1357, 1357, 1357, 1357, 1358, 1358,
        0, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1359,
     1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359,
     1360, 1360,    0, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
     1360, 1361, 1361,    0, 1361, 1361, 1361, 1361, 1361, 1361,

     1361, 1361, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
     1362, 1362, 1362, 1363, 1363, 1363, 1363, 1363, 1363, 1363,
     1363, 1363, 1363, 1363, 1364, 1364, 1364, 1364, 1364, 1364,
     1364, 1364, 1364, 1364, 1364, 1365, 1365, 1365, 1365, 1365,
     1365, 1365, 1365, 1365, 1365, 1365, 1366, 1366, 1366, 1366,
     1366, 1366, 1366, 1366, 1366, 1366, 1366, 1367, 1367, 1367,
     1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1368, 1368,
     1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1369,
     1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369,
     1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370,

     1370, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371,
     1371, 1371, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
     1372, 1372, 1372, 1373, 1373, 1373, 1373, 1373, 1373, 1373,
     1373, 1373, 1373, 1373, 1374, 1374, 1374, 1374, 1374, 1374,
     1374, 1374, 1374, 1374, 1374, 1375, 1375, 1375, 1375, 1375,
     1375, 1375, 1375, 1375, 1375, 1375, 1376, 1376, 1376, 1376,
     1376, 1376, 1376, 1376, 1376, 1376, 1376, 1377, 1377, 1377,
     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1378, 1378,
     1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1379,
     1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379,

     1380,    0, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380,
     1380, 1381,    0, 1381, 1381, 1381, 1381, 1381, 1381, 1381,
     1381, 1381, 1382,    0, 1382, 1382, 1382, 1382, 1382, 1382,
     1382, 1382, 1382, 1383,    0, 1383, 1383, 1383, 1383, 1383,
     1383, 1383, 1383, 1383, 1384,    0, 1384, 1384, 1384, 1384,
     1384, 1384, 1384, 1384, 1384, 1385,    0, 1385, 1385, 1385,
     1385, 1385, 1385, 1385, 1385, 1385, 1386,    0,    0, 1386,
     1386, 1387, 1387,    0, 1387, 1387, 1387, 1387, 1387, 1388,
     1388, 1388, 1388, 1388, 1389,    0, 1389, 1389, 1389, 1389,
     1389, 1390,    0, 1390, 1390, 1390, 1390, 1390, 1390, 1390,

     1390, 1390, 1391,    0, 1391, 1391, 1391, 1391, 1391, 1391,
     1391, 1391, 1391, 1392,    0, 1392, 1392, 1392, 1392, 1392,
     1393, 1393,    0, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
     1393, 1394, 1394,    0, 1394, 1394, 1394, 1394, 1394, 1394,
     1394, 1394, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
     1395, 1395, 1395, 1396, 1396, 1396, 1396, 1396, 1396, 1396,
     1396, 1396, 1396, 1396, 1397, 1397, 1397, 1397, 1397, 1397,
     1397, 1397, 1397, 1397, 1397, 1398, 1398, 1398, 1398, 1398,
     1398, 1398, 1398, 1398, 1398, 1398, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,

     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227
    } ;

static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;

/* The intent behind this definition is that it'll catch
 * any uses of REJECT which flex missed.
 */
#define REJECT reject_used_but_not_detected
#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
#line 1 "compilers/imcc/imcc.l"
#define INITIAL 0
#line 2 "compilers/imcc/imcc.l"
/*
 * imcc.l
 *
 * Intermediate Code Compiler for Parrot
 *
 * Copyright (C) 2002 Melvin Smith
 *
 * The tokenizer.
 */


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "imc.h"
#include "parser.h"

#define MAX_PARAM 16

struct params_t {
    char *name[MAX_PARAM];
    int num_param;
};

struct macro_t {
    char *name;
    struct params_t params;
    char *expansion;
    int line;
};

/* XXX: boe: rework this hack to use a hash */
#define N_MACROS 256
struct macro_t macros[N_MACROS];
int num_macros = 0;

char temp_buffer[4096];

/* parser state structure
 * the first few items are common to struct parser_state, but
 * we AFAIK need this hack as flex doesn't export YY_BUFFER_STATE
 */
struct macro_frame_t {
    struct parser_state_t s;

    /* macro stuff */
    YY_BUFFER_STATE buffer;
    struct params_t *params;
    struct params_t expansion;
    int label;
    int is_macro;
    char *heredoc_rest;
};

struct macro_frame_t *frames = NULL;

/* static function declariations */
static void pop_parser_state(Interp* interp);
static struct macro_frame_t *new_frame (Interp*);
static void scan_string (struct macro_frame_t *frame, const char *expansion);
static void scan_file (Interp* interp, struct macro_frame_t *frame, FILE *);
static void destroy_frame (struct macro_frame_t *frame);
static int yylex_skip (YYSTYPE *valp, void *interp, const char *skip);

static int read_macro (YYSTYPE *valp, Interp *interp);
static int expand_macro (YYSTYPE *valp, void *interp, const char *name);
static void include_file (Interp* interp, char *file_name);
static int in_pod;
static int prev_state;
static char *heredoc_end;
static char *heredoc_content;

#define YY_DECL int yylex(YYSTYPE *valp, Interp *interp)

#define YYCHOP() (yytext[--yyleng] = '\0')
#define DUP_AND_RET(valp, token)             \
  do {                                       \
      if (valp) (valp)->s = str_dup(yytext); \
      return token;                          \
  } while (0)

#define YY_NEVER_INTERACTIVE 1
#define YY_STACK_USED 1
#define emit 1

#define macro 2

#define pod 3

#define cmt1 4

#define cmt2 5

#define cmt3 6

#define cmt4 7

#define cmt5 8

#define heredoc1 9

#define heredoc2 10

#line 2905 "compilers/imcc/imclexer.c"

/* Macros after this point can all be overridden by user definitions in
 * section 1.
 */

#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
extern "C" int yywrap YY_PROTO(( void ));
#else
extern int yywrap YY_PROTO(( void ));
#endif
#endif

#ifndef YY_NO_UNPUT
static void yyunput YY_PROTO(( int c, char *buf_ptr ));
#endif

#ifndef yytext_ptr
static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen YY_PROTO(( yyconst char * ));
#endif

#ifndef YY_NO_INPUT
#ifdef __cplusplus
static int yyinput YY_PROTO(( void ));
#else
static int input YY_PROTO(( void ));
#endif
#endif

#if YY_STACK_USED
static int yy_start_stack_ptr = 0;
static int yy_start_stack_depth = 0;
static int *yy_start_stack = 0;
#ifndef YY_NO_PUSH_STATE
static void yy_push_state YY_PROTO(( int new_state ));
#endif
#ifndef YY_NO_POP_STATE
static void yy_pop_state YY_PROTO(( void ));
#endif
#ifndef YY_NO_TOP_STATE
static int yy_top_state YY_PROTO(( void ));
#endif

#else
#define YY_NO_PUSH_STATE 1
#define YY_NO_POP_STATE 1
#define YY_NO_TOP_STATE 1
#endif

#ifdef YY_MALLOC_DECL
YY_MALLOC_DECL
#else
#if __STDC__
#ifndef __cplusplus
#include <stdlib.h>
#endif
#else
/* Just try to get by without declaring the routines.  This will fail
 * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
 * or sizeof(void*) != sizeof(int).
 */
#endif
#endif

/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
#define YY_READ_BUF_SIZE 8192
#endif

/* Copy whatever the last rule matched to the standard output. */

#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
 * we now use fwrite().
 */
#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
#endif

/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
 * is returned in "result".
 */
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
      if ( yy_current_buffer->yy_is_interactive ) \
            { \
            int c = '*', n; \
            for ( n = 0; n < max_size && \
                       (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
                  buf[n] = (char) c; \
            if ( c == '\n' ) \
                  buf[n++] = (char) c; \
            if ( c == EOF && ferror( yyin ) ) \
                  YY_FATAL_ERROR( "input in flex scanner failed" ); \
            result = n; \
            } \
      else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
              && ferror( yyin ) ) \
            YY_FATAL_ERROR( "input in flex scanner failed" );
#endif

/* No semi-colon after return; correct usage is to write "yyterminate();" -
 * we don't want an extra ';' after the "return" because that will cause
 * some compilers to complain about unreachable statements.
 */
#ifndef yyterminate
#define yyterminate() return YY_NULL
#endif

/* Number of entries by which start-condition stack grows. */
#ifndef YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#endif

/* Report a fatal error. */
#ifndef YY_FATAL_ERROR
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
#endif

/* Default declaration of generated scanner - a define so the user can
 * easily add parameters.
 */
#ifndef YY_DECL
#define YY_DECL int yylex YY_PROTO(( void ))
#endif

/* Code executed at the beginning of each rule, after yytext and yyleng
 * have been set up.
 */
#ifndef YY_USER_ACTION
#define YY_USER_ACTION
#endif

/* Code executed at the end of each rule. */
#ifndef YY_BREAK
#define YY_BREAK break;
#endif

#define YY_RULE_SETUP \
      if ( yyleng > 0 ) \
            yy_current_buffer->yy_at_bol = \
                        (yytext[yyleng - 1] == '\n'); \
      YY_USER_ACTION

YY_DECL
      {
      register yy_state_type yy_current_state;
      register char *yy_cp, *yy_bp;
      register int yy_act;

#line 125 "compilers/imcc/imcc.l"

        /* for emacs "*/
        if (expect_pasm == 1 && !in_pod) {
            expect_pasm = 2;
            BEGIN(emit);
        }
        if (frames->s.pasm_file && YYSTATE == INITIAL && !in_pod) {
            if (0)
                yy_top_state(); /* silent warning */
            if (frames->s.pasm_file == 1) {
                BEGIN(emit);
                return EMIT;
        }
            return 0;
        }

#line 3076 "compilers/imcc/imclexer.c"

      if ( yy_init )
            {
            yy_init = 0;

#ifdef YY_USER_INIT
            YY_USER_INIT;
#endif

            if ( ! yy_start )
                  yy_start = 1;     /* first start state */

            if ( ! yyin )
                  yyin = stdin;

            if ( ! yyout )
                  yyout = stdout;

            if ( ! yy_current_buffer )
                  yy_current_buffer =
                        yy_create_buffer( yyin, YY_BUF_SIZE );

            yy_load_buffer_state();
            }

      while ( 1 )       /* loops until end-of-file is reached */
            {
            yy_cp = yy_c_buf_p;

            /* Support of yytext. */
            *yy_cp = yy_hold_char;

            /* yy_bp points to the position in yy_ch_buf of the start of
             * the current run.
             */
            yy_bp = yy_cp;

            yy_current_state = yy_start;
            yy_current_state += YY_AT_BOL();
yy_match:
            do
                  {
                  register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
                  if ( yy_accept[yy_current_state] )
                        {
                        yy_last_accepting_state = yy_current_state;
                        yy_last_accepting_cpos = yy_cp;
                        }
                  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
                        if ( yy_current_state >= 1228 )
                              yy_c = yy_meta[(unsigned int) yy_c];
                        }
                  yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                  ++yy_cp;
                  }
            while ( yy_base[yy_current_state] != 8987 );

yy_find_action:
            yy_act = yy_accept[yy_current_state];
            if ( yy_act == 0 )
                  { /* have to back up */
                  yy_cp = yy_last_accepting_cpos;
                  yy_current_state = yy_last_accepting_state;
                  yy_act = yy_accept[yy_current_state];
                  }

            YY_DO_BEFORE_ACTION;


do_action:  /* This label is used only to access EOF actions. */


            switch ( yy_act )
      { /* beginning of action switch */
                  case 0: /* must back up */
                  /* undo the effects of YY_DO_BEFORE_ACTION */
                  *yy_cp = yy_hold_char;
                  yy_cp = yy_last_accepting_cpos;
                  yy_current_state = yy_last_accepting_state;
                  goto yy_find_action;

case 1:
YY_RULE_SETUP
#line 141 "compilers/imcc/imcc.l"
{
            frames->heredoc_rest = str_dup(yytext);
            BEGIN(heredoc2);
        }
      YY_BREAK
case 2:
YY_RULE_SETUP
#line 146 "compilers/imcc/imcc.l"
{
        /* heredocs have highest priority
         * arrange them befor all wildcard state matches
         */

        /* Newline in the heredoc. Realloc and cat on. */
        ++line;
        heredoc_content = mem_sys_realloc(heredoc_content,
                                          strlen(heredoc_content) +
                                          strlen(yytext) + 2);
        strcpy(heredoc_content + strlen(heredoc_content), yytext);
    }
      YY_BREAK
case 3:
YY_RULE_SETUP
#line 159 "compilers/imcc/imcc.l"
{
        /* Are we at the end of the heredoc? */
        if (strcmp(heredoc_end, yytext) == 0)
        {
            /* End of the heredoc. */
            int len = strlen(heredoc_content);
            heredoc_content[len] = heredoc_content[0];  /* delim */
            heredoc_content[len+1] = 0;
            mem_sys_free(heredoc_end);
            frames->buffer = YY_CURRENT_BUFFER;
            valp->s = heredoc_content;
            BEGIN(prev_state);
            yy_scan_string(frames->heredoc_rest);
            return(STRINGC); /* XXX delete quotes, -> emit, pbc */
        }
        else
        {
            /* Part of the heredoc. Realloc and cat the line on. */
            heredoc_content = mem_sys_realloc(heredoc_content,
                                              strlen(heredoc_content) +
                                              strlen(yytext) + 2);
            strcpy(heredoc_content + strlen(heredoc_content), yytext);
        }
    }
      YY_BREAK
case 4:
YY_RULE_SETUP
#line 185 "compilers/imcc/imcc.l"
{ prev_state = YYSTATE; BEGIN(cmt2);
                       valp->t = atoi(yytext+6);
                       return LINECOMMENT;
               }
      YY_BREAK
case 5:
YY_RULE_SETUP
#line 189 "compilers/imcc/imcc.l"
{ BEGIN(cmt3);
                      valp->s = str_dup(yytext);
                      return FILECOMMENT;
               }
      YY_BREAK
case 6:
YY_RULE_SETUP
#line 193 "compilers/imcc/imcc.l"
{ BEGIN(cmt4); }
      YY_BREAK
case 7:
YY_RULE_SETUP
#line 195 "compilers/imcc/imcc.l"
{ prev_state = YYSTATE; BEGIN(cmt2); }
      YY_BREAK
case 8:
YY_RULE_SETUP
#line 196 "compilers/imcc/imcc.l"
{ prev_state = YYSTATE; BEGIN(cmt1); }
      YY_BREAK
case 9:
YY_RULE_SETUP
#line 197 "compilers/imcc/imcc.l"
{
                       valp->t = atoi(yytext);
                       BEGIN(cmt4);
                       return LINECOMMENT;
               }
      YY_BREAK
case 10:
YY_RULE_SETUP
#line 202 "compilers/imcc/imcc.l"
{ BEGIN(prev_state) ; line++; }
      YY_BREAK
case 11:
YY_RULE_SETUP
#line 204 "compilers/imcc/imcc.l"
{
        if (expect_pasm == 2)
      BEGIN(INITIAL);
        expect_pasm = 0;
        line++;
        return '\n';
    }
      YY_BREAK
case 12:
YY_RULE_SETUP
#line 212 "compilers/imcc/imcc.l"
{ prev_state = YYSTATE; BEGIN(cmt5); }
      YY_BREAK
case 13:
YY_RULE_SETUP
#line 213 "compilers/imcc/imcc.l"
{
        if (expect_pasm == 2)
      BEGIN(INITIAL);
        else
          BEGIN(prev_state);
        expect_pasm = 0;
        line++;
        return '\n';
    }
      YY_BREAK
case 14:
YY_RULE_SETUP
#line 223 "compilers/imcc/imcc.l"
{
    BEGIN(emit);
    return(EMIT);
    }
      YY_BREAK
case 15:
YY_RULE_SETUP
#line 228 "compilers/imcc/imcc.l"
{
    BEGIN(INITIAL);
    return EOM;
    }
      YY_BREAK
case 16:
YY_RULE_SETUP
#line 233 "compilers/imcc/imcc.l"
{
    valp->s = str_dup(yytext);
    return REG;
    }
      YY_BREAK
case 17:
YY_RULE_SETUP
#line 238 "compilers/imcc/imcc.l"
{ in_pod = 1; yy_push_state(pod); }
      YY_BREAK
case 18:
YY_RULE_SETUP
#line 239 "compilers/imcc/imcc.l"
{ in_pod = 0; yy_pop_state(); ++line; }
      YY_BREAK
case 19:
YY_RULE_SETUP
#line 240 "compilers/imcc/imcc.l"
{ /*ignore*/ }
      YY_BREAK
case 20:
YY_RULE_SETUP
#line 241 "compilers/imcc/imcc.l"
{ ++line; }
      YY_BREAK
case 21:
YY_RULE_SETUP
#line 243 "compilers/imcc/imcc.l"
return(LOCAL);
      YY_BREAK
case 22:
YY_RULE_SETUP
#line 244 "compilers/imcc/imcc.l"
return(LEXICAL);
      YY_BREAK
case 23:
YY_RULE_SETUP
#line 245 "compilers/imcc/imcc.l"
return(ARG);
      YY_BREAK
case 24:
YY_RULE_SETUP
#line 246 "compilers/imcc/imcc.l"
return(SUB);
      YY_BREAK
case 25:
YY_RULE_SETUP
#line 247 "compilers/imcc/imcc.l"
return(ESUB);
      YY_BREAK
case 26:
YY_RULE_SETUP
#line 248 "compilers/imcc/imcc.l"
return(PCC_BEGIN);
      YY_BREAK
case 27:
YY_RULE_SETUP
#line 249 "compilers/imcc/imcc.l"
return(PCC_END);
      YY_BREAK
case 28:
YY_RULE_SETUP
#line 250 "compilers/imcc/imcc.l"
return(PCC_CALL);
      YY_BREAK
case 29:
YY_RULE_SETUP
#line 251 "compilers/imcc/imcc.l"
return(NCI_CALL);
      YY_BREAK
case 30:
YY_RULE_SETUP
#line 252 "compilers/imcc/imcc.l"
return(METH_CALL);
      YY_BREAK
case 31:
YY_RULE_SETUP
#line 253 "compilers/imcc/imcc.l"
return(INVOCANT);
      YY_BREAK
case 32:
YY_RULE_SETUP
#line 254 "compilers/imcc/imcc.l"
return(PCC_SUB);
      YY_BREAK
case 33:
YY_RULE_SETUP
#line 255 "compilers/imcc/imcc.l"
return(PCC_BEGIN_RETURN);
      YY_BREAK
case 34:
YY_RULE_SETUP
#line 256 "compilers/imcc/imcc.l"
return(PCC_END_RETURN);
      YY_BREAK
case 35:
YY_RULE_SETUP
#line 257 "compilers/imcc/imcc.l"
return(PCC_BEGIN_YIELD);
      YY_BREAK
case 36:
YY_RULE_SETUP
#line 258 "compilers/imcc/imcc.l"
return(PCC_END_YIELD);
      YY_BREAK
case 37:
YY_RULE_SETUP
#line 260 "compilers/imcc/imcc.l"
return(METHOD); /* old compat cruft -
                                  the canonical colon names are below */
      YY_BREAK
case 38:
YY_RULE_SETUP
#line 262 "compilers/imcc/imcc.l"
return(MULTI);
      YY_BREAK
case 39:
YY_RULE_SETUP
#line 263 "compilers/imcc/imcc.l"
return(MAIN);
      YY_BREAK
case 40:
YY_RULE_SETUP
#line 264 "compilers/imcc/imcc.l"
return(LOAD);
      YY_BREAK
case 41:
YY_RULE_SETUP
#line 265 "compilers/imcc/imcc.l"
return(IMMEDIATE);
      YY_BREAK
case 42:
YY_RULE_SETUP
#line 266 "compilers/imcc/imcc.l"
return(POSTCOMP);
      YY_BREAK
case 43:
YY_RULE_SETUP
#line 267 "compilers/imcc/imcc.l"
return(ANON);
      YY_BREAK
case 44:
YY_RULE_SETUP
#line 269 "compilers/imcc/imcc.l"
return(METHOD);
      YY_BREAK
case 45:
YY_RULE_SETUP
#line 270 "compilers/imcc/imcc.l"
return(MULTI);
      YY_BREAK
case 46:
YY_RULE_SETUP
#line 271 "compilers/imcc/imcc.l"
return(MAIN);
      YY_BREAK
case 47:
YY_RULE_SETUP
#line 272 "compilers/imcc/imcc.l"
return(LOAD);
      YY_BREAK
case 48:
YY_RULE_SETUP
#line 273 "compilers/imcc/imcc.l"
return(IMMEDIATE);
      YY_BREAK
case 49:
YY_RULE_SETUP
#line 274 "compilers/imcc/imcc.l"
return(POSTCOMP);
      YY_BREAK
case 50:
YY_RULE_SETUP
#line 275 "compilers/imcc/imcc.l"
return(ANON);
      YY_BREAK
case 51:
YY_RULE_SETUP
#line 276 "compilers/imcc/imcc.l"
return(OUTER);
      YY_BREAK
case 52:
YY_RULE_SETUP
#line 277 "compilers/imcc/imcc.l"
return(NEED_LEX);
      YY_BREAK
case 53:
YY_RULE_SETUP
#line 279 "compilers/imcc/imcc.l"
return(RESULT);
      YY_BREAK
case 54:
YY_RULE_SETUP
#line 280 "compilers/imcc/imcc.l"
return(GET_RESULTS);
      YY_BREAK
case 55:
YY_RULE_SETUP
#line 281 "compilers/imcc/imcc.l"
return(YIELDT);
      YY_BREAK
case 56:
YY_RULE_SETUP
#line 282 "compilers/imcc/imcc.l"
return(RETURN);
      YY_BREAK
case 57:
YY_RULE_SETUP
#line 284 "compilers/imcc/imcc.l"
return(ADV_FLAT);
      YY_BREAK
case 58:
YY_RULE_SETUP
#line 285 "compilers/imcc/imcc.l"
return(ADV_SLURPY);
      YY_BREAK
case 59:
YY_RULE_SETUP
#line 286 "compilers/imcc/imcc.l"
return(ADV_OPTIONAL);
      YY_BREAK
case 60:
YY_RULE_SETUP
#line 287 "compilers/imcc/imcc.l"
return(ADV_OPT_FLAG);
      YY_BREAK
case 61:
YY_RULE_SETUP
#line 289 "compilers/imcc/imcc.l"
return(NAMESPACE);
      YY_BREAK
case 62:
YY_RULE_SETUP
#line 290 "compilers/imcc/imcc.l"
return(HLL);
      YY_BREAK
case 63:
YY_RULE_SETUP
#line 291 "compilers/imcc/imcc.l"
return(HLL_MAP);
      YY_BREAK
case 64:
YY_RULE_SETUP
#line 292 "compilers/imcc/imcc.l"
return(ENDNAMESPACE);
      YY_BREAK
case 65:
YY_RULE_SETUP
#line 293 "compilers/imcc/imcc.l"
return(LOCAL);
      YY_BREAK
case 66:
YY_RULE_SETUP
#line 294 "compilers/imcc/imcc.l"
return(GLOBAL);
      YY_BREAK
case 67:
YY_RULE_SETUP
#line 295 "compilers/imcc/imcc.l"
return(CONST);
      YY_BREAK
case 68:
YY_RULE_SETUP
#line 296 "compilers/imcc/imcc.l"
return(GLOBAL_CONST);
      YY_BREAK
case 69:
YY_RULE_SETUP
#line 297 "compilers/imcc/imcc.l"
return(PARAM);
      YY_BREAK
case 70:
YY_RULE_SETUP
#line 298 "compilers/imcc/imcc.l"
return(PRAGMA);
      YY_BREAK
case 71:
YY_RULE_SETUP
#line 299 "compilers/imcc/imcc.l"
return(N_OPERATORS);
      YY_BREAK
case 72:
YY_RULE_SETUP
#line 300 "compilers/imcc/imcc.l"
return(GOTO);
      YY_BREAK
case 73:
YY_RULE_SETUP
#line 301 "compilers/imcc/imcc.l"
return(IF);
      YY_BREAK
case 74:
YY_RULE_SETUP
#line 302 "compilers/imcc/imcc.l"
return(UNLESS);
      YY_BREAK
case 75:
YY_RULE_SETUP
#line 303 "compilers/imcc/imcc.l"
return(PNULL);
      YY_BREAK
case 76:
YY_RULE_SETUP
#line 304 "compilers/imcc/imcc.l"
return(INTV);
      YY_BREAK
case 77:
YY_RULE_SETUP
#line 305 "compilers/imcc/imcc.l"
return(FLOATV);
      YY_BREAK
case 78:
YY_RULE_SETUP
#line 306 "compilers/imcc/imcc.l"
return(FLOATV);
      YY_BREAK
case 79:
YY_RULE_SETUP
#line 307 "compilers/imcc/imcc.l"
return(NEW);
      YY_BREAK
case 80:
YY_RULE_SETUP
#line 308 "compilers/imcc/imcc.l"
return(ADDR);
      YY_BREAK
case 81:
YY_RULE_SETUP
#line 309 "compilers/imcc/imcc.l"
return(GLOBALOP);
      YY_BREAK
case 82:
YY_RULE_SETUP
#line 310 "compilers/imcc/imcc.l"
return(OBJECTV);
      YY_BREAK
case 83:
YY_RULE_SETUP
#line 311 "compilers/imcc/imcc.l"
return(PMCV);
      YY_BREAK
case 84:
YY_RULE_SETUP
#line 312 "compilers/imcc/imcc.l"
return(STRINGV);
      YY_BREAK
case 85:
YY_RULE_SETUP
#line 313 "compilers/imcc/imcc.l"
return(SHIFT_LEFT);
      YY_BREAK
case 86:
YY_RULE_SETUP
#line 314 "compilers/imcc/imcc.l"
return(SHIFT_RIGHT);
      YY_BREAK
case 87:
YY_RULE_SETUP
#line 315 "compilers/imcc/imcc.l"
return(SHIFT_RIGHT_U);
      YY_BREAK
case 88:
YY_RULE_SETUP
#line 316 "compilers/imcc/imcc.l"
return(LOG_AND);
      YY_BREAK
case 89:
YY_RULE_SETUP
#line 317 "compilers/imcc/imcc.l"
return(LOG_OR);
      YY_BREAK
case 90:
YY_RULE_SETUP
#line 318 "compilers/imcc/imcc.l"
return(LOG_XOR);
      YY_BREAK
case 91:
YY_RULE_SETUP
#line 319 "compilers/imcc/imcc.l"
return(RELOP_LT);
      YY_BREAK
case 92:
YY_RULE_SETUP
#line 320 "compilers/imcc/imcc.l"
return(RELOP_LTE);
      YY_BREAK
case 93:
YY_RULE_SETUP
#line 321 "compilers/imcc/imcc.l"
return(RELOP_GT);
      YY_BREAK
case 94:
YY_RULE_SETUP
#line 322 "compilers/imcc/imcc.l"
return(RELOP_GTE);
      YY_BREAK
case 95:
YY_RULE_SETUP
#line 323 "compilers/imcc/imcc.l"
return(RELOP_EQ);
      YY_BREAK
case 96:
YY_RULE_SETUP
#line 324 "compilers/imcc/imcc.l"
return(RELOP_NE);
      YY_BREAK
case 97:
YY_RULE_SETUP
#line 325 "compilers/imcc/imcc.l"
return(POW);
      YY_BREAK
case 98:
YY_RULE_SETUP
#line 326 "compilers/imcc/imcc.l"
return(POINTY);
      YY_BREAK
case 99:
YY_RULE_SETUP
#line 327 "compilers/imcc/imcc.l"
return(CONCAT);
      YY_BREAK
case 100:
YY_RULE_SETUP
#line 328 "compilers/imcc/imcc.l"
return(DOT);
      YY_BREAK
case 101:
YY_RULE_SETUP
#line 329 "compilers/imcc/imcc.l"
return(DOTDOT);
      YY_BREAK
case 102:
YY_RULE_SETUP
#line 330 "compilers/imcc/imcc.l"
return(PLUS_ASSIGN);
      YY_BREAK
case 103:
YY_RULE_SETUP
#line 331 "compilers/imcc/imcc.l"
return(MINUS_ASSIGN);
      YY_BREAK
case 104:
YY_RULE_SETUP
#line 332 "compilers/imcc/imcc.l"
return(MUL_ASSIGN);
      YY_BREAK
case 105:
YY_RULE_SETUP
#line 333 "compilers/imcc/imcc.l"
return(DIV_ASSIGN);
      YY_BREAK
case 106:
YY_RULE_SETUP
#line 334 "compilers/imcc/imcc.l"
return(MOD_ASSIGN);
      YY_BREAK
case 107:
YY_RULE_SETUP
#line 335 "compilers/imcc/imcc.l"
return(FDIV);
      YY_BREAK
case 108:
YY_RULE_SETUP
#line 336 "compilers/imcc/imcc.l"
return(FDIV_ASSIGN);
      YY_BREAK
case 109:
YY_RULE_SETUP
#line 337 "compilers/imcc/imcc.l"
return(BAND_ASSIGN);
      YY_BREAK
case 110:
YY_RULE_SETUP
#line 338 "compilers/imcc/imcc.l"
return(BOR_ASSIGN);
      YY_BREAK
case 111:
YY_RULE_SETUP
#line 339 "compilers/imcc/imcc.l"
return(BXOR_ASSIGN);
      YY_BREAK
case 112:
YY_RULE_SETUP
#line 340 "compilers/imcc/imcc.l"
return(SHR_ASSIGN);
      YY_BREAK
case 113:
YY_RULE_SETUP
#line 341 "compilers/imcc/imcc.l"
return(SHL_ASSIGN);
      YY_BREAK
case 114:
YY_RULE_SETUP
#line 342 "compilers/imcc/imcc.l"
return(SHR_U_ASSIGN);
      YY_BREAK
case 115:
YY_RULE_SETUP
#line 343 "compilers/imcc/imcc.l"
return(CONCAT_ASSIGN);
      YY_BREAK
case 116:
YY_RULE_SETUP
#line 345 "compilers/imcc/imcc.l"
{
        return read_macro(valp, interp);
    }
      YY_BREAK
case 117:
YY_RULE_SETUP
#line 349 "compilers/imcc/imcc.l"
{
        int c;
    char *name;
    struct macro_t *m;

    BEGIN(macro);
    c = yylex_skip(valp, interp, " ");
    if (c != IDENTIFIER)
        IMCC_fataly(interp, E_SyntaxError,
           "Constant names must be identifiers");

    name = str_dup(valp->s);

    c = yylex_skip(valp, interp, " ");
        if (c != INTC && c != FLOATC && c != STRINGC && c != REG)
        IMCC_fataly(interp, E_SyntaxError,
            "Constant '%s' value must be a number, "
            "stringliteral or register", name);

    m = macros + num_macros++;
    m->name = name;
    m->expansion = str_dup (valp->s);
    m->params.num_param = 0;

    BEGIN (emit);
    return MACRO;
    }
      YY_BREAK
case 118:
YY_RULE_SETUP
#line 377 "compilers/imcc/imcc.l"
{
        int c;

    c = yylex(valp, interp);
    if (c != STRINGC) return c;

    YYCHOP();
    include_file(interp, str_dup(yytext + 1));
    }
      YY_BREAK
case 119:
YY_RULE_SETUP
#line 387 "compilers/imcc/imcc.l"
{
        char *label;

    if (valp) {
        YYCHOP();
            YYCHOP();

            if (!frames || !frames->label)
                IMCC_fataly(interp, E_SyntaxError, "missing space?");
        label = mem_sys_allocate(yyleng+10);
        sprintf(label, "%s%d", yytext, frames->label);

        valp->s = label;
    }

        return LABEL;
    }
      YY_BREAK
case 120:
YY_RULE_SETUP
#line 405 "compilers/imcc/imcc.l"
{
        char *label;

    if (valp) {
        YYCHOP();

            /* #32421   if$I0 is parsed as if$ I0 */
            if (!frames || !frames->label)
                IMCC_fataly(interp, E_SyntaxError, "missing space?");

        label = mem_sys_allocate(yyleng+10);
        sprintf(label, "%s%d", yytext, frames->label);

        valp->s = label;
    }

    return IDENTIFIER;
    }
      YY_BREAK
case 121:
YY_RULE_SETUP
#line 424 "compilers/imcc/imcc.l"
return(COMMA);
      YY_BREAK
case 122:
YY_RULE_SETUP
#line 426 "compilers/imcc/imcc.l"
{
    YYCHOP();  /* trim last ':' */
    DUP_AND_RET(valp,LABEL);
    }
      YY_BREAK
case 123:
YY_RULE_SETUP
#line 431 "compilers/imcc/imcc.l"
{
        int type = pmc_type(interp, string_from_cstring(interp, yytext+1, 0));

        if (type > 0) {
            char *buf = malloc(16);
        sprintf(buf, "%d", type);
        valp->s = buf;
        return INTC;
    }
    if (!expand_macro(valp, interp, yytext+1)) {
            yyless(1);
            return DOT;
        }
    }
      YY_BREAK
case 124:
YY_RULE_SETUP
#line 446 "compilers/imcc/imcc.l"
{
    if (!is_def) {
        SymReg *r = find_sym(interp, yytext);
        if (r && (r->type & (VTIDENTIFIER|VT_CONSTP))) {
            valp->sr = r;
            return VAR;
        }
                if (cur_unit && cur_unit->instructions &&
                        (r = cur_unit->instructions->r[0]) &&
                        r->pcc_sub) {
                    if ((r->pcc_sub->pragma & P_METHOD) &&
                        !strcmp(yytext, "self")) {
                        valp->sr  = mk_ident(interp, str_dup("self"), 'P');
                        cur_unit->type |= IMC_HAS_SELF;
                        return VAR;
                    }
                }
    }
        valp->s = str_dup(yytext);
        return(!is_def && is_op(interp, valp->s) ? PARROT_OP : IDENTIFIER);
    }
      YY_BREAK
case 125:
YY_RULE_SETUP
#line 468 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, FLOATC);
      YY_BREAK
case 126:
YY_RULE_SETUP
#line 469 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, INTC);
      YY_BREAK
case 127:
YY_RULE_SETUP
#line 470 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, INTC);
      YY_BREAK
case 128:
YY_RULE_SETUP
#line 471 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, INTC);
      YY_BREAK
case 129:
YY_RULE_SETUP
#line 472 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, INTC);
      YY_BREAK
case 130:
YY_RULE_SETUP
#line 474 "compilers/imcc/imcc.l"
{
    valp->s = str_dup(yytext);
        valp->s[strlen(valp->s) - 1] = '\0'; /* trailing 'L' */
        return(STRINGC); /* no BIGINT native format yet */
    }
      YY_BREAK
case 131:
YY_RULE_SETUP
#line 480 "compilers/imcc/imcc.l"
{
    valp->s = str_dup(yytext);
        return(STRINGC); /* XXX delete quotes, -> emit, pbc */
    }
      YY_BREAK
case 132:
YY_RULE_SETUP
#line 485 "compilers/imcc/imcc.l"
{
        struct macro_frame_t *frame;
        /* Save the string we want to mark the end of the heredoc and snip
           off newline and quote. */
        if (frames->heredoc_rest)
            IMCC_fataly(interp, E_SyntaxError,
            "nested heredoc not supported");
        heredoc_end = str_dup(yytext + 3);
        heredoc_end[strlen(heredoc_end) - 1] = 0;
        if (!strlen(heredoc_end))
            IMCC_fataly(interp, E_SyntaxError, "empty heredoc delimiter");
        frame = new_frame(interp);
        frame->s.next = (struct parser_state_t*) frames;
        frames = frame;
        prev_state = YYSTATE;
        /* Start slurping up the heredoc. */
        heredoc_content = mem_sys_allocate(2);
        heredoc_content[0] = yytext[2];        /* preserve delim */
        heredoc_content[1] = 0;                /* eos */
        BEGIN(heredoc1);
    }
      YY_BREAK
case 133:
YY_RULE_SETUP
#line 507 "compilers/imcc/imcc.l"
{
    valp->s = str_dup(yytext);    /* charset:"..." */
        /* this is actually not unicode but a string with a charset */
        return(USTRINGC);
    }
      YY_BREAK
case 134:
YY_RULE_SETUP
#line 514 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, IREG);
      YY_BREAK
case 135:
YY_RULE_SETUP
#line 515 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, NREG);
      YY_BREAK
case 136:
YY_RULE_SETUP
#line 516 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, SREG);
      YY_BREAK
case 137:
YY_RULE_SETUP
#line 517 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, PREG);
      YY_BREAK
case 138:
YY_RULE_SETUP
#line 519 "compilers/imcc/imcc.l"
/* skip */;
      YY_BREAK
case 139:
YY_RULE_SETUP
#line 521 "compilers/imcc/imcc.l"
{
        /* catch all except for state macro */
        return yytext[0];
    }
      YY_BREAK
case YY_STATE_EOF(emit):
#line 526 "compilers/imcc/imcc.l"
{
        BEGIN (INITIAL);
        if (frames->s.pasm_file) {
            frames->s.pasm_file = 2;
            return EOM;
        }
        return 0;
    }
      YY_BREAK
case YY_STATE_EOF(INITIAL):
#line 535 "compilers/imcc/imcc.l"
yyterminate();
      YY_BREAK
case 140:
YY_RULE_SETUP
#line 537 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, ENDM);
      YY_BREAK
case 141:
YY_RULE_SETUP
#line 539 "compilers/imcc/imcc.l"
{
        line++;
        DUP_AND_RET(valp, '\n');
    }
      YY_BREAK
case 142:
YY_RULE_SETUP
#line 544 "compilers/imcc/imcc.l"
return LABEL;
      YY_BREAK
case 143:
YY_RULE_SETUP
#line 545 "compilers/imcc/imcc.l"
{
        char *label;
    char *name = macros[num_macros].name;

    if (yylex(valp, interp) != LABEL)
            IMCC_fataly(interp, E_SyntaxError, "LABEL expected");

    if (valp) {
        YYCHOP();

        label = mem_sys_allocate(strlen(name) + yyleng + 15);
        sprintf(label, "local__%s__%s__$:", name, yytext+1);

        valp->s = label;
    }

    return LABEL;
    }
      YY_BREAK
case 144:
YY_RULE_SETUP
#line 564 "compilers/imcc/imcc.l"
{
        char *label;
    char *name = macros[num_macros].name;

    if (valp) {
        label = mem_sys_allocate(strlen(name) + yyleng + 15);
        sprintf(label, "local__%s__%s__$", name, yytext+2);

        valp->s = label;
    }

    return IDENTIFIER;
    }
      YY_BREAK
case 145:
YY_RULE_SETUP
#line 578 "compilers/imcc/imcc.l"
/* skip leading ws */;
      YY_BREAK
case 146:
YY_RULE_SETUP
#line 579 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, ' ');
      YY_BREAK
case 147:
YY_RULE_SETUP
#line 580 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, IDENTIFIER);
      YY_BREAK
case 148:
YY_RULE_SETUP
#line 581 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, MACRO);
      YY_BREAK
case 149:
YY_RULE_SETUP
#line 582 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, yytext[0]);
      YY_BREAK
case YY_STATE_EOF(macro):
#line 583 "compilers/imcc/imcc.l"
yyterminate();
      YY_BREAK
case 150:
YY_RULE_SETUP
#line 585 "compilers/imcc/imcc.l"
ECHO;
      YY_BREAK
#line 4171 "compilers/imcc/imclexer.c"
case YY_STATE_EOF(pod):
case YY_STATE_EOF(cmt1):
case YY_STATE_EOF(cmt2):
case YY_STATE_EOF(cmt3):
case YY_STATE_EOF(cmt4):
case YY_STATE_EOF(cmt5):
case YY_STATE_EOF(heredoc1):
case YY_STATE_EOF(heredoc2):
      yyterminate();

      case YY_END_OF_BUFFER:
            {
            /* Amount of text matched not including the EOB char. */
            int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;

            /* Undo the effects of YY_DO_BEFORE_ACTION. */
            *yy_cp = yy_hold_char;
            YY_RESTORE_YY_MORE_OFFSET

            if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
                  {
                  /* We're scanning a new file or input source.  It's
                   * possible that this happened because the user
                   * just pointed yyin at a new source and called
                   * yylex().  If so, then we have to assure
                   * consistency between yy_current_buffer and our
                   * globals.  Here is the right place to do so, because
                   * this is the first action (other than possibly a
                   * back-up) that will match for the new input source.
                   */
                  yy_n_chars = yy_current_buffer->yy_n_chars;
                  yy_current_buffer->yy_input_file = yyin;
                  yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
                  }

            /* Note that here we test for yy_c_buf_p "<=" to the position
             * of the first EOB in the buffer, since yy_c_buf_p will
             * already have been incremented past the NUL character
             * (since all states make transitions on EOB to the
             * end-of-buffer state).  Contrast this with the test
             * in input().
             */
            if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
                  { /* This was really a NUL. */
                  yy_state_type yy_next_state;

                  yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;

                  yy_current_state = yy_get_previous_state();

                  /* Okay, we're now positioned to make the NUL
                   * transition.  We couldn't have
                   * yy_get_previous_state() go ahead and do it
                   * for us because it doesn't know how to deal
                   * with the possibility of jamming (and we don't
                   * want to build jamming into it because then it
                   * will run more slowly).
                   */

                  yy_next_state = yy_try_NUL_trans( yy_current_state );

                  yy_bp = yytext_ptr + YY_MORE_ADJ;

                  if ( yy_next_state )
                        {
                        /* Consume the NUL. */
                        yy_cp = ++yy_c_buf_p;
                        yy_current_state = yy_next_state;
                        goto yy_match;
                        }

                  else
                        {
                        yy_cp = yy_c_buf_p;
                        goto yy_find_action;
                        }
                  }

            else switch ( yy_get_next_buffer() )
                  {
                  case EOB_ACT_END_OF_FILE:
                        {
                        yy_did_buffer_switch_on_eof = 0;

                        if ( yywrap() )
                              {
                              /* Note: because we've taken care in
                               * yy_get_next_buffer() to have set up
                               * yytext, we can now set up
                               * yy_c_buf_p so that if some total
                               * hoser (like flex itself) wants to
                               * call the scanner after we return the
                               * YY_NULL, it'll still work - another
                               * YY_NULL will get returned.
                               */
                              yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;

                              yy_act = YY_STATE_EOF(YY_START);
                              goto do_action;
                              }

                        else
                              {
                              if ( ! yy_did_buffer_switch_on_eof )
                                    YY_NEW_FILE;
                              }
                        break;
                        }

                  case EOB_ACT_CONTINUE_SCAN:
                        yy_c_buf_p =
                              yytext_ptr + yy_amount_of_matched_text;

                        yy_current_state = yy_get_previous_state();

                        yy_cp = yy_c_buf_p;
                        yy_bp = yytext_ptr + YY_MORE_ADJ;
                        goto yy_match;

                  case EOB_ACT_LAST_MATCH:
                        yy_c_buf_p =
                        &yy_current_buffer->yy_ch_buf[yy_n_chars];

                        yy_current_state = yy_get_previous_state();

                        yy_cp = yy_c_buf_p;
                        yy_bp = yytext_ptr + YY_MORE_ADJ;
                        goto yy_find_action;
                  }
            break;
            }

      default:
            YY_FATAL_ERROR(
                  "fatal flex scanner internal error--no action found" );
      } /* end of action switch */
            } /* end of scanning one token */
      } /* end of yylex */


/* yy_get_next_buffer - try to read in a new buffer
 *
 * Returns a code representing an action:
 *    EOB_ACT_LAST_MATCH -
 *    EOB_ACT_CONTINUE_SCAN - continue scanning from current position
 *    EOB_ACT_END_OF_FILE - end of file
 */

static int yy_get_next_buffer()
      {
      register char *dest = yy_current_buffer->yy_ch_buf;
      register char *source = yytext_ptr;
      register int number_to_move, i;
      int ret_val;

      if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
            YY_FATAL_ERROR(
            "fatal flex scanner internal error--end of buffer missed" );

      if ( yy_current_buffer->yy_fill_buffer == 0 )
            { /* Don't try to fill the buffer, so this is an EOF. */
            if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
                  {
                  /* We matched a single character, the EOB, so
                   * treat this as a final EOF.
                   */
                  return EOB_ACT_END_OF_FILE;
                  }

            else
                  {
                  /* We matched some text prior to the EOB, first
                   * process it.
                   */
                  return EOB_ACT_LAST_MATCH;
                  }
            }

      /* Try to read more data. */

      /* First move last chars to start of buffer. */
      number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;

      for ( i = 0; i < number_to_move; ++i )
            *(dest++) = *(source++);

      if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
            /* don't do the read, it's not guaranteed to return an EOF,
             * just force an EOF
             */
            yy_current_buffer->yy_n_chars = yy_n_chars = 0;

      else
            {
            int num_to_read =
                  yy_current_buffer->yy_buf_size - number_to_move - 1;

            while ( num_to_read <= 0 )
                  { /* Not enough room in the buffer - grow it. */
#ifdef YY_USES_REJECT
                  YY_FATAL_ERROR(
"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
#else

                  /* just a shorter name for the current buffer */
                  YY_BUFFER_STATE b = yy_current_buffer;

                  int yy_c_buf_p_offset =
                        (int) (yy_c_buf_p - b->yy_ch_buf);

                  if ( b->yy_is_our_buffer )
                        {
                        int new_size = b->yy_buf_size * 2;

                        if ( new_size <= 0 )
                              b->yy_buf_size += b->yy_buf_size / 8;
                        else
                              b->yy_buf_size *= 2;

                        b->yy_ch_buf = (char *)
                              /* Include room in for 2 EOB chars. */
                              yy_flex_realloc( (void *) b->yy_ch_buf,
                                           b->yy_buf_size + 2 );
                        }
                  else
                        /* Can't grow it, we don't own it. */
                        b->yy_ch_buf = 0;

                  if ( ! b->yy_ch_buf )
                        YY_FATAL_ERROR(
                        "fatal error - scanner input buffer overflow" );

                  yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];

                  num_to_read = yy_current_buffer->yy_buf_size -
                                    number_to_move - 1;
#endif
                  }

            if ( num_to_read > YY_READ_BUF_SIZE )
                  num_to_read = YY_READ_BUF_SIZE;

            /* Read in more data. */
            YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
                  yy_n_chars, num_to_read );

            yy_current_buffer->yy_n_chars = yy_n_chars;
            }

      if ( yy_n_chars == 0 )
            {
            if ( number_to_move == YY_MORE_ADJ )
                  {
                  ret_val = EOB_ACT_END_OF_FILE;
                  yyrestart( yyin );
                  }

            else
                  {
                  ret_val = EOB_ACT_LAST_MATCH;
                  yy_current_buffer->yy_buffer_status =
                        YY_BUFFER_EOF_PENDING;
                  }
            }

      else
            ret_val = EOB_ACT_CONTINUE_SCAN;

      yy_n_chars += number_to_move;
      yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
      yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;

      yytext_ptr = &yy_current_buffer->yy_ch_buf[0];

      return ret_val;
      }


/* yy_get_previous_state - get the state just before the EOB char was reached */

static yy_state_type yy_get_previous_state()
      {
      register yy_state_type yy_current_state;
      register char *yy_cp;

      yy_current_state = yy_start;
      yy_current_state += YY_AT_BOL();

      for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
            {
            register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
            if ( yy_accept[yy_current_state] )
                  {
                  yy_last_accepting_state = yy_current_state;
                  yy_last_accepting_cpos = yy_cp;
                  }
            while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                  {
                  yy_current_state = (int) yy_def[yy_current_state];
                  if ( yy_current_state >= 1228 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                  }
            yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
            }

      return yy_current_state;
      }


/* yy_try_NUL_trans - try to make a transition on the NUL character
 *
 * synopsis
 *    next_state = yy_try_NUL_trans( current_state );
 */

#ifdef YY_USE_PROTOS
static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
#else
static yy_state_type yy_try_NUL_trans( yy_current_state )
yy_state_type yy_current_state;
#endif
      {
      register int yy_is_jam;
      register char *yy_cp = yy_c_buf_p;

      register YY_CHAR yy_c = 1;
      if ( yy_accept[yy_current_state] )
            {
            yy_last_accepting_state = yy_current_state;
            yy_last_accepting_cpos = yy_cp;
            }
      while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
            {
            yy_current_state = (int) yy_def[yy_current_state];
            if ( yy_current_state >= 1228 )
                  yy_c = yy_meta[(unsigned int) yy_c];
            }
      yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
      yy_is_jam = (yy_current_state == 1227);

      return yy_is_jam ? 0 : yy_current_state;
      }


#ifndef YY_NO_UNPUT
#ifdef YY_USE_PROTOS
static void yyunput( int c, register char *yy_bp )
#else
static void yyunput( c, yy_bp )
int c;
register char *yy_bp;
#endif
      {
      register char *yy_cp = yy_c_buf_p;

      /* undo effects of setting up yytext */
      *yy_cp = yy_hold_char;

      if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
            { /* need to shift things up to make room */
            /* +2 for EOB chars. */
            register int number_to_move = yy_n_chars + 2;
            register char *dest = &yy_current_buffer->yy_ch_buf[
                              yy_current_buffer->yy_buf_size + 2];
            register char *source =
                        &yy_current_buffer->yy_ch_buf[number_to_move];

            while ( source > yy_current_buffer->yy_ch_buf )
                  *--dest = *--source;

            yy_cp += (int) (dest - source);
            yy_bp += (int) (dest - source);
            yy_current_buffer->yy_n_chars =
                  yy_n_chars = yy_current_buffer->yy_buf_size;

            if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
                  YY_FATAL_ERROR( "flex scanner push-back overflow" );
            }

      *--yy_cp = (char) c;


      yytext_ptr = yy_bp;
      yy_hold_char = *yy_cp;
      yy_c_buf_p = yy_cp;
      }
#endif      /* ifndef YY_NO_UNPUT */


#ifdef __cplusplus
static int yyinput()
#else
static int input()
#endif
      {
      int c;

      *yy_c_buf_p = yy_hold_char;

      if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
            {
            /* yy_c_buf_p now points to the character we want to return.
             * If this occurs *before* the EOB characters, then it's a
             * valid NUL; if not, then we've hit the end of the buffer.
             */
            if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
                  /* This was really a NUL. */
                  *yy_c_buf_p = '\0';

            else
                  { /* need more input */
                  int offset = yy_c_buf_p - yytext_ptr;
                  ++yy_c_buf_p;

                  switch ( yy_get_next_buffer() )
                        {
                        case EOB_ACT_LAST_MATCH:
                              /* This happens because yy_g_n_b()
                               * sees that we've accumulated a
                               * token and flags that we need to
                               * try matching the token before
                               * proceeding.  But for input(),
                               * there's no matching to consider.
                               * So convert the EOB_ACT_LAST_MATCH
                               * to EOB_ACT_END_OF_FILE.
                               */

                              /* Reset buffer status. */
                              yyrestart( yyin );

                              /* fall through */

                        case EOB_ACT_END_OF_FILE:
                              {
                              if ( yywrap() )
                                    return EOF;

                              if ( ! yy_did_buffer_switch_on_eof )
                                    YY_NEW_FILE;
#ifdef __cplusplus
                              return yyinput();
#else
                              return input();
#endif
                              }

                        case EOB_ACT_CONTINUE_SCAN:
                              yy_c_buf_p = yytext_ptr + offset;
                              break;
                        }
                  }
            }

      c = *(unsigned char *) yy_c_buf_p;  /* cast for 8-bit char's */
      *yy_c_buf_p = '\0';     /* preserve yytext */
      yy_hold_char = *++yy_c_buf_p;

      yy_current_buffer->yy_at_bol = (c == '\n');

      return c;
      }


#ifdef YY_USE_PROTOS
void yyrestart( FILE *input_file )
#else
void yyrestart( input_file )
FILE *input_file;
#endif
      {
      if ( ! yy_current_buffer )
            yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );

      yy_init_buffer( yy_current_buffer, input_file );
      yy_load_buffer_state();
      }


#ifdef YY_USE_PROTOS
void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
#else
void yy_switch_to_buffer( new_buffer )
YY_BUFFER_STATE new_buffer;
#endif
      {
      if ( yy_current_buffer == new_buffer )
            return;

      if ( yy_current_buffer )
            {
            /* Flush out information for old buffer. */
            *yy_c_buf_p = yy_hold_char;
            yy_current_buffer->yy_buf_pos = yy_c_buf_p;
            yy_current_buffer->yy_n_chars = yy_n_chars;
            }

      yy_current_buffer = new_buffer;
      yy_load_buffer_state();

      /* We don't actually know whether we did this switch during
       * EOF (yywrap()) processing, but the only time this flag
       * is looked at is after yywrap() is called, so it's safe
       * to go ahead and always set it.
       */
      yy_did_buffer_switch_on_eof = 1;
      }


#ifdef YY_USE_PROTOS
void yy_load_buffer_state( void )
#else
void yy_load_buffer_state()
#endif
      {
      yy_n_chars = yy_current_buffer->yy_n_chars;
      yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
      yyin = yy_current_buffer->yy_input_file;
      yy_hold_char = *yy_c_buf_p;
      }


#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
#else
YY_BUFFER_STATE yy_create_buffer( file, size )
FILE *file;
int size;
#endif
      {
      YY_BUFFER_STATE b;

      b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
      if ( ! b )
            YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

      b->yy_buf_size = size;

      /* yy_ch_buf has to be 2 characters longer than the size given because
       * we need to put in 2 end-of-buffer characters.
       */
      b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
      if ( ! b->yy_ch_buf )
            YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

      b->yy_is_our_buffer = 1;

      yy_init_buffer( b, file );

      return b;
      }


#ifdef YY_USE_PROTOS
void yy_delete_buffer( YY_BUFFER_STATE b )
#else
void yy_delete_buffer( b )
YY_BUFFER_STATE b;
#endif
      {
      if ( ! b )
            return;

      if ( b == yy_current_buffer )
            yy_current_buffer = (YY_BUFFER_STATE) 0;

      if ( b->yy_is_our_buffer )
            yy_flex_free( (void *) b->yy_ch_buf );

      yy_flex_free( (void *) b );
      }


#ifndef YY_ALWAYS_INTERACTIVE
#ifndef YY_NEVER_INTERACTIVE
extern int isatty YY_PROTO(( int ));
#endif
#endif

#ifdef YY_USE_PROTOS
void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
#else
void yy_init_buffer( b, file )
YY_BUFFER_STATE b;
FILE *file;
#endif


      {
      yy_flush_buffer( b );

      b->yy_input_file = file;
      b->yy_fill_buffer = 1;

#if YY_ALWAYS_INTERACTIVE
      b->yy_is_interactive = 1;
#else
#if YY_NEVER_INTERACTIVE
      b->yy_is_interactive = 0;
#else
      b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
#endif
#endif
      }


#ifdef YY_USE_PROTOS
void yy_flush_buffer( YY_BUFFER_STATE b )
#else
void yy_flush_buffer( b )
YY_BUFFER_STATE b;
#endif

      {
      if ( ! b )
            return;

      b->yy_n_chars = 0;

      /* We always need two end-of-buffer characters.  The first causes
       * a transition to the end-of-buffer state.  The second causes
       * a jam in that state.
       */
      b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
      b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;

      b->yy_buf_pos = &b->yy_ch_buf[0];

      b->yy_at_bol = 1;
      b->yy_buffer_status = YY_BUFFER_NEW;

      if ( b == yy_current_buffer )
            yy_load_buffer_state();
      }


#ifndef YY_NO_SCAN_BUFFER
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
#else
YY_BUFFER_STATE yy_scan_buffer( base, size )
char *base;
yy_size_t size;
#endif
      {
      YY_BUFFER_STATE b;

      if ( size < 2 ||
           base[size-2] != YY_END_OF_BUFFER_CHAR ||
           base[size-1] != YY_END_OF_BUFFER_CHAR )
            /* They forgot to leave room for the EOB's. */
            return 0;

      b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
      if ( ! b )
            YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );

      b->yy_buf_size = size - 2;    /* "- 2" to take care of EOB's */
      b->yy_buf_pos = b->yy_ch_buf = base;
      b->yy_is_our_buffer = 0;
      b->yy_input_file = 0;
      b->yy_n_chars = b->yy_buf_size;
      b->yy_is_interactive = 0;
      b->yy_at_bol = 1;
      b->yy_fill_buffer = 0;
      b->yy_buffer_status = YY_BUFFER_NEW;

      yy_switch_to_buffer( b );

      return b;
      }
#endif


#ifndef YY_NO_SCAN_STRING
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
#else
YY_BUFFER_STATE yy_scan_string( yy_str )
yyconst char *yy_str;
#endif
      {
      int len;
      for ( len = 0; yy_str[len]; ++len )
            ;

      return yy_scan_bytes( yy_str, len );
      }
#endif


#ifndef YY_NO_SCAN_BYTES
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
#else
YY_BUFFER_STATE yy_scan_bytes( bytes, len )
yyconst char *bytes;
int len;
#endif
      {
      YY_BUFFER_STATE b;
      char *buf;
      yy_size_t n;
      int i;

      /* Get memory for full buffer, including space for trailing EOB's. */
      n = len + 2;
      buf = (char *) yy_flex_alloc( n );
      if ( ! buf )
            YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );

      for ( i = 0; i < len; ++i )
            buf[i] = bytes[i];

      buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;

      b = yy_scan_buffer( buf, n );
      if ( ! b )
            YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );

      /* It's okay to grow etc. this buffer, and we should throw it
       * away when we're done.
       */
      b->yy_is_our_buffer = 1;

      return b;
      }
#endif


#ifndef YY_NO_PUSH_STATE
#ifdef YY_USE_PROTOS
static void yy_push_state( int new_state )
#else
static void yy_push_state( new_state )
int new_state;
#endif
      {
      if ( yy_start_stack_ptr >= yy_start_stack_depth )
            {
            yy_size_t new_size;

            yy_start_stack_depth += YY_START_STACK_INCR;
            new_size = yy_start_stack_depth * sizeof( int );

            if ( ! yy_start_stack )
                  yy_start_stack = (int *) yy_flex_alloc( new_size );

            else
                  yy_start_stack = (int *) yy_flex_realloc(
                              (void *) yy_start_stack, new_size );

            if ( ! yy_start_stack )
                  YY_FATAL_ERROR(
                  "out of memory expanding start-condition stack" );
            }

      yy_start_stack[yy_start_stack_ptr++] = YY_START;

      BEGIN(new_state);
      }
#endif


#ifndef YY_NO_POP_STATE
static void yy_pop_state()
      {
      if ( --yy_start_stack_ptr < 0 )
            YY_FATAL_ERROR( "start-condition stack underflow" );

      BEGIN(yy_start_stack[yy_start_stack_ptr]);
      }
#endif


#ifndef YY_NO_TOP_STATE
static int yy_top_state()
      {
      return yy_start_stack[yy_start_stack_ptr - 1];
      }
#endif

#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif

#ifdef YY_USE_PROTOS
static void yy_fatal_error( yyconst char msg[] )
#else
static void yy_fatal_error( msg )
char msg[];
#endif
      {
      (void) fprintf( stderr, "%s\n", msg );
      exit( YY_EXIT_FAILURE );
      }



/* Redefine yyless() so it works in section 3 code. */

#undef yyless
#define yyless(n) \
      do \
            { \
            /* Undo effects of setting up yytext. */ \
            yytext[yyleng] = yy_hold_char; \
            yy_c_buf_p = yytext + n; \
            yy_hold_char = *yy_c_buf_p; \
            *yy_c_buf_p = '\0'; \
            yyleng = n; \
            } \
      while ( 0 )


/* Internal utility routines. */

#ifndef yytext_ptr
#ifdef YY_USE_PROTOS
static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
#else
static void yy_flex_strncpy( s1, s2, n )
char *s1;
yyconst char *s2;
int n;
#endif
      {
      register int i;
      for ( i = 0; i < n; ++i )
            s1[i] = s2[i];
      }
#endif

#ifdef YY_NEED_STRLEN
#ifdef YY_USE_PROTOS
static int yy_flex_strlen( yyconst char *s )
#else
static int yy_flex_strlen( s )
yyconst char *s;
#endif
      {
      register int n;
      for ( n = 0; s[n]; ++n )
            ;

      return n;
      }
#endif


#ifdef YY_USE_PROTOS
static void *yy_flex_alloc( yy_size_t size )
#else
static void *yy_flex_alloc( size )
yy_size_t size;
#endif
      {
      return (void *) malloc( size );
      }

#ifdef YY_USE_PROTOS
static void *yy_flex_realloc( void *ptr, yy_size_t size )
#else
static void *yy_flex_realloc( ptr, size )
void *ptr;
yy_size_t size;
#endif
      {
      /* The cast to (char *) in the following accommodates both
       * implementations that use char* generic pointers, and those
       * that use void* generic pointers.  It works with the latter
       * because both ANSI C and C++ allow castless assignment from
       * any pointer type to void*, and deal with argument conversions
       * as though doing an assignment.
       */
      return (void *) realloc( (char *) ptr, size );
      }

#ifdef YY_USE_PROTOS
static void yy_flex_free( void *ptr )
#else
static void yy_flex_free( ptr )
void *ptr;
#endif
      {
      free( ptr );
      }

#if YY_MAIN
int main()
      {
      yylex();
      return 0;
      }
#endif
#line 585 "compilers/imcc/imcc.l"


#ifdef yywrap
#undef yywrap
#endif

int yywrap() {
    /* Add code here to open next source file and start scanning
       yywrap returns 0 if scanning is to continue
    */
    yy_delete_buffer(YY_CURRENT_BUFFER);

    /* pop old frame */
    if (frames->s.next) {
        pop_parser_state(frames->s.interpreter);
        if (YYSTATE == INITIAL || YYSTATE == emit)
            BEGIN(frames->s.pasm_file ? emit : INITIAL);
        return 0;
    }

    return 1;
}

static struct macro_frame_t *
new_frame (Interp* interp)
{
    static int label = 0;
    struct macro_frame_t *tmp;

    tmp = mem_sys_allocate_zeroed(sizeof(struct macro_frame_t));
    tmp->label = ++label;
    tmp->s.line = line;
    tmp->s.handle = NULL;
    if (frames) {
        tmp->s.pasm_file = frames->s.pasm_file;
        tmp->s.file = frames->s.file;
        tmp->s.pragmas = frames->s.pragmas;
    }
    tmp->s.interpreter = interp;

    return tmp;
}

static void
scan_string (struct macro_frame_t *frame, const char *expansion)
{
    frame->buffer = YY_CURRENT_BUFFER;
    frame->s.next = (struct parser_state_t*) frames;
    frames = frame;

    yy_scan_string(expansion);
}

static void
destroy_frame (struct macro_frame_t *frame)
{
    YY_BUFFER_STATE buffer;
    int i;

    buffer = frame->buffer;

    for (i = 0; i < frame->expansion.num_param; i++) {
        free(frame->expansion.name[i]);
    }

    if (frame->heredoc_rest)
        mem_sys_free(frame->heredoc_rest);
    else
        line = frame->s.line;
    /* FIXME if frame->s.file was allocated free it */

    mem_sys_free(frame);

    yy_switch_to_buffer(buffer);
}

static int
yylex_skip (YYSTYPE *valp, void *interp, const char *skip)
{
    int c;
    const char *p;

    do {
        c = yylex(valp, interp);
        p = skip;
    while (*p && c != *p) p++;
    } while (*p != '\0');
    if (c)
        DUP_AND_RET(valp, c);
    else
        return c;
}

static int
read_params (YYSTYPE *valp, void *interp, struct params_t *params,
         const char *macro_name, int need_id)
{
    int c;
    YYSTYPE val;
    char *current = str_dup("");
    int len = 0;

    params->num_param = 0;
    c = yylex_skip(&val, interp, " \n");

    while(c != ')') {
        if (YYSTATE == heredoc2)
            IMCC_fataly(interp, E_SyntaxError,
                    "Heredoc in macro '%s' not allowed",
                    macro_name);
        if (c <= 0)
            IMCC_fataly(interp, E_SyntaxError,
                    "End of file reached while reading arguments in '%s'",
                    macro_name);
        else if (c == ',') {
            if (params->num_param == MAX_PARAM)
                IMCC_fataly(interp, E_SyntaxError,
                        "More then %d params in '%s'",
                        MAX_PARAM, macro_name);
            params->name[params->num_param++] = current;
            current = str_dup("");
            len = 0;
            c = yylex_skip(&val, interp, " \n");
        }
        else if (need_id && (*current || c != IDENTIFIER) && c != ' ') {
            IMCC_fataly(interp, E_SyntaxError,
                    "Parameter definition in '%s' must be IDENTIFIER",
                    macro_name);
        }
        else {
            if (!need_id || c != ' ') {
                len += strlen(val.s);
                current = realloc(current, len + 1);
                strcat(current,val.s);
            }
            free(val.s);
            c = yylex(&val,interp);
        }
    }
    params->name[params->num_param++] = current;

    if (valp) *valp = val;
    else free(val.s);

    return c;
}

static int
read_macro (YYSTYPE *valp, Interp *interp)
{
    int c;
    struct macro_t *m = macros + num_macros;
    int start_cond;

    if (num_macros >= N_MACROS)
        internal_exception(1, "Too many macros");

    temp_buffer[0]='\0';

    start_cond = YY_START;
    BEGIN(macro);

    c = yylex_skip(valp, interp, " ");
    if (c != IDENTIFIER)
        IMCC_fataly(interp, E_SyntaxError,
                "Macro names must be identifiers");

    m->name = valp->s;
    m->line = line;

    /* white space is allowed between macro and opening paren) */
    c = yylex_skip(valp, interp, " ");

    if (c == '(') {
        free(valp->s);

        c = read_params(NULL, interp, &m->params, m->name, 1);

        c = yylex(valp, interp);
    }

    while (c != ENDM) {
        if (c <= 0)
            IMCC_fataly(interp, E_SyntaxError,
                    "File ended before macro '%s' was complete", m->name);

        strcat(temp_buffer, valp->s);
        free(valp->s);

        c = yylex(valp, interp);
    }
    free(valp->s);

    BEGIN(start_cond);
    macros[num_macros].expansion = str_dup(temp_buffer);

    num_macros++;
    return MACRO;
}

static char *
find_macro_param (const char *name)
{
    struct macro_frame_t *f;
    int i;

    for (f = frames; f; f = (struct macro_frame_t*)f->s.next) {
        if (f->params) {
            for (i = 0; i < f->params->num_param; i++) {
                if (strcmp(f->params->name[i], name) == 0) {
                    return f->expansion.name[i];
                }
            }
        }
    }

    return NULL;
}

static struct macro_t *
find_macro (const char* name)
{
    int i;

    for (i = 0; i < num_macros; i++) {
        if (strcmp(name, macros[i].name) == 0) return macros + i;
    }

    return NULL;
}

static int
expand_macro (YYSTYPE *valp, void *interp, const char *name)
{
    int c;
    struct macro_frame_t *frame;
    struct macro_t *m;
    const char *expansion;
    int start_cond;
    int i;
    char *current;
    char *s;
    int len;
    union {
        const void * __c_ptr;
        void * __ptr;
    } __ptr_u;

    UNUSED(valp);

    expansion = find_macro_param(name);
    if (expansion) {
        frame = new_frame(interp);
        /* When an error occurs, then report it as being in a macro */
        frame->is_macro = 1;
        scan_string(frame, expansion);
        return 1;
    }

    m = find_macro(name);
    if (m) {
        frame = new_frame(interp);
        frame->params = &m->params;
        /* When an error occurs, then report it as being in a macro */
        frame->is_macro = 1;
        /* remember macro name for error reporting
        */
        frame->s.file = const_cast(name);
        /* whitespace can be savely ignored */
        do {
            c = input();
        } while (c == ' ' || c == '\t');

        if (c != '(') {
            unput(c);
            if (m->params.num_param != 0)
                IMCC_fataly(interp, E_SyntaxError,
                        "Macro '%s' needs %d arguments",
                        m->name, m->params.num_param);
            scan_string(frame, m->expansion);
            return 1;
        }

        start_cond = YY_START;
        BEGIN(macro);

        read_params (NULL, interp, &frame->expansion, m->name, 0);

        BEGIN(start_cond);

        if (frame->expansion.num_param == 0 && m->params.num_param == 1) {
            frame->expansion.name[0] = str_dup("");
            frame->expansion.num_param = 1;
        }

        if (frame->expansion.num_param != m->params.num_param) {
            IMCC_fataly(interp, E_SyntaxError,
                    "Macro '%s' requires %d arguments, but %d given",
                    m->name, m->params.num_param, frame->expansion.num_param);
        }

        /* expand arguments */
        for (i = 0; i < frame->expansion.num_param; i ++) {
            current = frame->expansion.name[i];
            if (current[0] == '.') { /* parameter of outer macro */
                s = find_macro_param(current + 1);
                if (s) {
                    frame->expansion.name[i] = strdup(s);
                    free(current);
                }
            } else {
                len = strlen(current) - 1;
                if (len >= 0 && current[len] == '$') { /* local label */
                    current[len] = '\0';
                    s = mem_sys_allocate(len + 1 + 10);
                    sprintf(s, "%s%d", current, frames->label);
                    frame->expansion.name[i] = s;
                    free(current);
                }
            }
        }

        line = m->line;
        scan_string(frame, m->expansion);
        return 1;
    }

    return 0;
}

static void
include_file (Interp* interp, char *file_name)
{
    struct macro_frame_t *frame;
    FILE *file = 0;
    char *ext, *s;

    frame = new_frame(interp);
    s = Parrot_locate_runtime_file(interp, file_name,
        PARROT_RUNTIME_FT_INCLUDE);
    if (s) {
    file = fopen(s, "r");
        if (!file) {
            mem_sys_free(s);
            IMCC_fataly(interp, E_IOError, strerror(errno));
        }
    }
    else
        IMCC_fataly(interp, E_IOError, strerror(errno));

    frame->s.file = file_name;
    frame->s.handle = file;

    ext = strrchr(file_name, '.');
    if (ext) {
        if (strcmp (ext, ".pasm") == 0) {
            frame->s.pasm_file = 1;
            BEGIN(emit);
        }
        else if (strcmp (ext, ".pir") == 0) {
            frame->s.pasm_file = 0;
            BEGIN(INITIAL);
        }
    }

    scan_file (interp, frame, file);
}

static void
scan_file (Interp* interp, struct macro_frame_t *frame, FILE *file)
{
    frame->buffer = YY_CURRENT_BUFFER;
    frame->s.next = (struct parser_state_t*)frames;
    frames = frame;
    IMCC_INFO(interp)->state = (struct parser_state_t *) frames;

    line = 1;

    yy_switch_to_buffer(yy_create_buffer(file, YY_BUF_SIZE));
}

void
IMCC_push_parser_state(Interp* interp)
{
    struct macro_frame_t *frame;

    frame = new_frame(interp);
    frame->s.next = (struct parser_state_t*)frames;
    frames = frame;
    frame->s.line = line = 1;
    IMCC_INFO(interp)->state = (struct parser_state_t *) frames;
}

static void
pop_parser_state(Interp* interp)
{
    struct macro_frame_t *tmp;
    tmp = frames;
    if (tmp) {
        if (tmp->s.handle) fclose (tmp->s.handle);
        frames = (struct macro_frame_t*) frames->s.next;
        destroy_frame(tmp);
    }
    IMCC_INFO(interp)->state = (struct parser_state_t *) frames;
}

void
compile_file(Interp *interp, FILE *file)
{
    YY_BUFFER_STATE buffer;

    frames->s.next = NULL;
    buffer = YY_CURRENT_BUFFER;
    yy_switch_to_buffer(yy_create_buffer(file, YY_BUF_SIZE));

    emit_open(interp, 1, NULL);
    yyparse((void *) interp);
    imc_compile_all_units(interp);

    yy_switch_to_buffer(buffer);
}

void
compile_string(Interp *interp, char *s)
{
    YY_BUFFER_STATE buffer;

    frames->s.next = NULL;
    buffer = YY_CURRENT_BUFFER;

    yy_scan_string(s);
    emit_open(interp, 1, NULL);
    yyparse((void *) interp);
    imc_compile_all_units(interp);
    yy_switch_to_buffer(buffer);
}

void
IMCC_print_inc(Interp *interp)
{
    struct macro_frame_t *f;
    const char *old;

    UNUSED(interp);
    if (frames && frames->is_macro)
        fprintf(stderr, "\nin macro '.%s' line %d\n", frames->s.file, line);
    else
        fprintf(stderr, "\nin file '%s' line %d\n", frames->s.file, line);
    old = frames->s.file;
    for (f = frames; f; f = (struct macro_frame_t *)f->s.next) {
        if (strcmp(f->s.file, old)) {
            fprintf(stderr, "\tincluded from '%s' line %d\n",
                f->s.file, f->s.line);
        }
        old = f->s.file;
    }
}

/*
 * Local variables:
 * c-indentation-style: bsd
 * c-basic-offset: 4
 * indent-tabs-mode: nil
 * End:
 *
 * vim: expandtab shiftwidth=4:
 */

Generated by  Doxygen 1.6.0   Back to index