diff options
author | unknown <monty@donna.mysql.com> | 2001-02-17 14:19:19 +0200 |
---|---|---|
committer | unknown <monty@donna.mysql.com> | 2001-02-17 14:19:19 +0200 |
commit | 2662b59306ef0cd495fa6e2edf7129e58a11393a (patch) | |
tree | bfe39951a73e906579ab819bf5198ad8f3a64a36 /innobase/pars | |
parent | 66de55a56bdcf2f7a9c0c4f8e19b3e761475e202 (diff) | |
download | mariadb-git-2662b59306ef0cd495fa6e2edf7129e58a11393a.tar.gz |
Added Innobase to source distribution
Docs/manual.texi:
Added Innobase documentation
configure.in:
Incremented version
include/my_base.h:
Added option for Innobase
myisam/mi_check.c:
cleanup
mysql-test/t/bdb.test:
cleanup
mysql-test/t/innobase.test:
Extended with new tests from bdb.test
mysql-test/t/merge.test:
Added test of SHOW create
mysys/my_init.c:
Fix for UNIXWARE 7
scripts/mysql_install_db.sh:
Always write how to start mysqld
scripts/safe_mysqld.sh:
Fixed type
sql/ha_innobase.cc:
Update to new version
sql/ha_innobase.h:
Update to new version
sql/handler.h:
Added 'update_table_comment()' and 'append_create_info()'
sql/sql_delete.cc:
Fixes for Innobase
sql/sql_select.cc:
Fixes for Innobase
sql/sql_show.cc:
Append create information (for MERGE tables)
sql/sql_update.cc:
Fixes for Innobase
Diffstat (limited to 'innobase/pars')
-rw-r--r-- | innobase/pars/Makefile.am | 24 | ||||
-rw-r--r-- | innobase/pars/lexyy.c | 7388 | ||||
-rw-r--r-- | innobase/pars/makefilewin | 26 | ||||
-rw-r--r-- | innobase/pars/pars0grm.c | 1788 | ||||
-rw-r--r-- | innobase/pars/pars0grm.h | 90 | ||||
-rw-r--r-- | innobase/pars/pars0grm.y | 559 | ||||
-rw-r--r-- | innobase/pars/pars0lex.l | 477 | ||||
-rw-r--r-- | innobase/pars/pars0opt.c | 1238 | ||||
-rw-r--r-- | innobase/pars/pars0pars.c | 2038 | ||||
-rw-r--r-- | innobase/pars/pars0sym.c | 255 |
10 files changed, 13883 insertions, 0 deletions
diff --git a/innobase/pars/Makefile.am b/innobase/pars/Makefile.am new file mode 100644 index 00000000000..d39430862a7 --- /dev/null +++ b/innobase/pars/Makefile.am @@ -0,0 +1,24 @@ +# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB +# & Innobase Oy +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +include ../include/Makefile.i + +libs_LIBRARIES = libpars.a + +libpars_a_SOURCES = pars0grm.c lexyy.c pars0opt.c pars0pars.c pars0sym.c + +EXTRA_PROGRAMS = diff --git a/innobase/pars/lexyy.c b/innobase/pars/lexyy.c new file mode 100644 index 00000000000..6ba8ecfbcb1 --- /dev/null +++ b/innobase/pars/lexyy.c @@ -0,0 +1,7388 @@ +/* A lexical scanner generated by flex */ + +/* Scanner skeleton version: + * $Header: /home/daffy/u0/vern/flex/flex-2.4.7/RCS/flex.skl,v 1.2 94/08/03 11:13:24 vern Exp $ + */ + +#define FLEX_SCANNER + +#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 */ + +#ifdef __STDC__ + +#define YY_USE_PROTOS +#define YY_USE_CONST + +#endif /* __STDC__ */ +#endif /* ! __cplusplus */ + + +#ifdef __TURBOC__ +#define YY_USE_CONST +#endif + + +#ifndef YY_USE_CONST +#ifndef const +#define const +#endif +#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. + */ +#define YY_START ((yy_start - 1) / 2) + +/* 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". Now included + * only for backward compatibility with previous versions of flex. + */ +#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; + +#ifdef __cplusplus +extern "C" { +#endif + extern int yywrap YY_PROTO(( void )); +#ifdef __cplusplus + } +#endif + +#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_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 ) + + +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. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* 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 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; + +static void yyunput YY_PROTO(( int c, char *buf_ptr )); +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 )); + +static int yy_start_stack_ptr = 0; +static int yy_start_stack_depth = 0; +static int *yy_start_stack = 0; +static void yy_push_state YY_PROTO(( int new_state )); +static void yy_pop_state YY_PROTO(( void )); +static int yy_top_state YY_PROTO(( void )); + +static void *yy_flex_alloc YY_PROTO(( unsigned int )); +static void *yy_flex_realloc YY_PROTO(( void *, unsigned int )); +static void yy_flex_free YY_PROTO(( void * )); + +#define yy_new_buffer yy_create_buffer + +#define INITIAL 0 +#define comment 1 +typedef char YY_CHAR; +typedef int yy_state_type; +FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; +extern char *yytext; +#define yytext_ptr yytext +static const short yy_nxt[][128] = + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + + 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, + 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 7, 6, 6, 6, 6, 9, 6, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 20, 21, + 22, 23, 24, 25, 6, 26, 27, 28, 29, 30, + 31, 32, 32, 33, 32, 32, 34, 32, 35, 36, + 37, 32, 38, 39, 40, 41, 42, 43, 32, 32, + 32, 6, 6, 6, 6, 32, 6, 32, 32, 32, + + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 44, 6, 45, 6, 6, + + 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, + 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 7, 6, 6, 6, 6, 9, 6, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 20, 21, + 22, 23, 24, 25, 6, 26, 27, 28, 29, 30, + 31, 32, 32, 33, 32, 32, 34, 32, 35, 36, + 37, 32, 38, 39, 40, 41, 42, 43, 32, 32, + 32, 6, 6, 6, 6, 32, 6, 32, 32, 32, + + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 44, 6, 45, 6, 6, + + 5, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 47, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 48, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + + 5, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 47, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 48, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + + -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, -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, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, + + 5, -7, -7, -7, -7, -7, -7, -7, -7, 49, + 49, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, 49, -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, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, + + 5, -8, -8, -8, -8, -8, -8, -8, -8, 49, + 49, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, 49, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, + + 5, -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, -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, + + 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 51, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + + 5, -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, -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, + + 5, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, + + 5, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, + + 5, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, + + 5, -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, -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, + + 5, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, + + 5, -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, 52, -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, -17, + -17, -17, -17, -17, -17, -17, -17, -17, + + 5, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, 53, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, + + 5, -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, 54, -19, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, -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, + + 5, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, 56, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, + + 5, -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, -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, + + 5, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, 57, 58, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, + + 5, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, + + 5, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, 59, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, + + 5, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, + + 5, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -26, -26, + -26, -26, -26, -26, -26, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 61, 60, + 60, 60, 60, 62, 60, 60, 60, 60, 60, 60, + 60, -26, -26, -26, -26, 60, -26, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -26, -26, -26, -26, -26, + + 5, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -27, -27, + -27, -27, -27, -27, -27, 60, 60, 60, 60, 63, + 60, 60, 60, 64, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 65, + 60, -27, -27, -27, -27, 60, -27, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -27, -27, -27, -27, -27, + + 5, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -28, -28, + -28, -28, -28, -28, -28, 60, 60, 60, 60, 60, + 60, 60, 66, 60, 60, 60, 67, 60, 60, 68, + 60, 60, 69, 60, 60, 70, 60, 60, 60, 60, + 60, -28, -28, -28, -28, 60, -28, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -28, -28, -28, -28, -28, + + 5, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -29, -29, + -29, -29, -29, -29, -29, 60, 60, 60, 60, 71, + 60, 60, 60, 72, 60, 60, 60, 60, 60, 73, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -29, -29, -29, -29, 60, -29, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -29, -29, -29, -29, -29, + + 5, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -30, -30, + -30, -30, -30, -30, -30, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 74, 60, 75, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -30, -30, -30, -30, 60, -30, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -30, -30, -30, -30, -30, + + 5, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -31, -31, + -31, -31, -31, -31, -31, 60, 60, 60, 60, 76, + 60, 60, 60, 60, 60, 60, 77, 60, 60, 78, + 60, 60, 79, 60, 60, 60, 60, 60, 60, 60, + 60, -31, -31, -31, -31, 60, -31, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -31, -31, -31, -31, -31, + + 5, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -32, -32, + -32, -32, -32, -32, -32, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -32, -32, -32, -32, 60, -32, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -32, -32, -32, -32, -32, + + 5, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -33, -33, + -33, -33, -33, -33, -33, 60, 60, 60, 60, 60, + 80, 60, 60, 60, 60, 60, 60, 60, 81, 60, + 60, 60, 60, 82, 60, 60, 60, 60, 60, 60, + 60, -33, -33, -33, -33, 60, -33, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -33, -33, -33, -33, -33, + + 5, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -34, -34, + -34, -34, -34, -34, -34, 60, 60, 60, 60, 83, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 84, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -34, -34, -34, -34, 60, -34, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -34, -34, -34, -34, -34, + + 5, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -35, -35, + -35, -35, -35, -35, -35, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 85, + 60, 60, 60, 60, 60, 86, 60, 60, 60, 60, + 60, -35, -35, -35, -35, 60, -35, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -35, -35, -35, -35, -35, + + 5, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -36, -36, + -36, -36, -36, -36, -36, 60, 60, 60, 60, 60, + 87, 60, 60, 60, 60, 60, 60, 60, 88, 60, + 89, 60, 90, 60, 60, 91, 60, 60, 60, 60, + 60, -36, -36, -36, -36, 60, -36, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -36, -36, -36, -36, -36, + + 5, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -37, -37, + -37, -37, -37, -37, -37, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 92, 60, 60, 60, 60, 60, 60, 60, + 60, -37, -37, -37, -37, 60, -37, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -37, -37, -37, -37, -37, + + 5, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -38, -38, + -38, -38, -38, -38, -38, 60, 60, 60, 60, 93, + 60, 60, 60, 60, 60, 60, 60, 60, 94, 95, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -38, -38, -38, -38, 60, -38, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -38, -38, -38, -38, -38, + + 5, -39, -39, -39, -39, -39, -39, -39, -39, -39, + -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, + -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, + -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, + -39, -39, -39, -39, -39, -39, -39, -39, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -39, -39, + -39, -39, -39, -39, -39, 60, 60, 60, 60, 96, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 97, 60, 60, 60, 98, 60, 60, 60, 99, + 60, -39, -39, -39, -39, 60, -39, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -39, -39, -39, -39, -39, + + 5, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -40, -40, + -40, -40, -40, -40, -40, 100, 60, 60, 60, 60, + 60, 60, 101, 60, 60, 60, 60, 60, 60, 102, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -40, -40, -40, -40, 60, -40, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -40, -40, -40, -40, -40, + + 5, -41, -41, -41, -41, -41, -41, -41, -41, -41, + -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, + -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, + -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, + -41, -41, -41, -41, -41, -41, -41, -41, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -41, -41, + -41, -41, -41, -41, -41, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 103, 60, + 104, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -41, -41, -41, -41, 60, -41, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -41, -41, -41, -41, -41, + + 5, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -42, -42, + -42, -42, -42, -42, -42, 105, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -42, -42, -42, -42, 60, -42, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -42, -42, -42, -42, -42, + + 5, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -43, -43, + -43, -43, -43, -43, -43, 60, 60, 60, 60, 60, + 60, 60, 106, 60, 60, 60, 60, 60, 60, 107, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -43, -43, -43, -43, 60, -43, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -43, -43, -43, -43, -43, + + 5, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, + + 5, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, + + 5, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 109, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, -46, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + + 5, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, + + 5, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 112, 110, 110, 110, 110, 113, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, + + 5, -49, -49, -49, -49, -49, -49, -49, -49, 49, + 49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, 49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, + + 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 51, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + + 5, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, + + 5, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, + + 5, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, + + 5, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, + + 5, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, 54, -55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, + + 5, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, + + 5, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, + + 5, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, + + 5, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, + + 5, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -60, -60, + -60, -60, -60, -60, -60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -60, -60, -60, -60, 60, -60, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -60, -60, -60, -60, -60, + + 5, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -61, -61, + -61, -61, -61, -61, -61, 60, 60, 60, 115, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -61, -61, -61, -61, 60, -61, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -61, -61, -61, -61, -61, + + 5, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -62, -62, + -62, -62, -62, -62, -62, 60, 60, 116, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 117, 60, 60, 60, 60, 60, 60, + 60, -62, -62, -62, -62, 60, -62, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -62, -62, -62, -62, -62, + + 5, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -63, -63, + -63, -63, -63, -63, -63, 60, 60, 60, 60, 60, + 60, 118, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -63, -63, -63, -63, 60, -63, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -63, -63, -63, -63, -63, + + 5, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -64, -64, + -64, -64, -64, -64, -64, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 119, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -64, -64, -64, -64, 60, -64, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -64, -64, -64, -64, -64, + + 5, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -65, -65, + -65, -65, -65, -65, -65, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -65, -65, -65, -65, 60, -65, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -65, -65, -65, -65, -65, + + 5, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -66, -66, + -66, -66, -66, -66, -66, 120, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -66, -66, -66, -66, 60, -66, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -66, -66, -66, -66, -66, + + 5, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -67, -67, + -67, -67, -67, -67, -67, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 121, + 60, 60, 60, 60, 60, 122, 60, 60, 60, 60, + 60, -67, -67, -67, -67, 60, -67, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -67, -67, -67, -67, -67, + + 5, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -68, -68, + -68, -68, -68, -68, -68, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 123, 124, 60, + 60, 60, 60, 60, 60, 125, 60, 60, 60, 60, + 60, -68, -68, -68, -68, 60, -68, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -68, -68, -68, -68, -68, + + 5, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -69, -69, + -69, -69, -69, -69, -69, 60, 60, 60, 60, 126, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -69, -69, -69, -69, 60, -69, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -69, -69, -69, -69, -69, + + 5, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -70, -70, + -70, -70, -70, -70, -70, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 127, 60, 60, 60, 60, 60, 60, 60, + 60, -70, -70, -70, -70, 60, -70, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -70, -70, -70, -70, -70, + + 5, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -71, -71, + -71, -71, -71, -71, -71, 60, 60, 128, 60, 60, + 60, 60, 60, 60, 60, 60, 129, 60, 60, 60, + 60, 60, 60, 130, 60, 60, 60, 60, 60, 60, + 60, -71, -71, -71, -71, 60, -71, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -71, -71, -71, -71, -71, + + 5, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -72, -72, + -72, -72, -72, -72, -72, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 131, 60, 60, 60, 60, 60, 60, + 60, -72, -72, -72, -72, 60, -72, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -72, -72, -72, -72, -72, + + 5, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -73, -73, + -73, -73, -73, -73, -73, 60, 60, 60, 60, 132, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -73, -73, -73, -73, 60, -73, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -73, -73, -73, -73, -73, + + 5, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -74, -74, + -74, -74, -74, -74, -74, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 133, 60, 60, 60, 60, 60, 60, + 60, -74, -74, -74, -74, 60, -74, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -74, -74, -74, -74, -74, + + 5, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -75, -75, + -75, -75, -75, -75, -75, 60, 60, 60, 134, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -75, -75, -75, -75, 60, -75, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -75, -75, -75, -75, -75, + + 5, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -76, -76, + -76, -76, -76, -76, -76, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 135, 60, 60, 60, 60, 60, + 60, -76, -76, -76, -76, 60, -76, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -76, -76, -76, -76, -76, + + 5, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -77, -77, + -77, -77, -77, -77, -77, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 136, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -77, -77, -77, -77, 60, -77, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -77, -77, -77, -77, -77, + + 5, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -78, -78, + -78, -78, -78, -78, -78, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 137, 60, 60, 60, 60, 60, 60, 60, + 60, -78, -78, -78, -78, 60, -78, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -78, -78, -78, -78, -78, + + 5, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -79, -79, + -79, -79, -79, -79, -79, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 138, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -79, -79, -79, -79, 60, -79, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -79, -79, -79, -79, -79, + + 5, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -80, -80, + -80, -80, -80, -80, -80, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -80, -80, -80, -80, 60, -80, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -80, -80, -80, -80, -80, + + 5, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -81, -81, + -81, -81, -81, -81, -81, 60, 60, 60, 139, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 140, 141, 60, 60, 60, 60, 60, + 60, -81, -81, -81, -81, 60, -81, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -81, -81, -81, -81, -81, + + 5, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -82, -82, + -82, -82, -82, -82, -82, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -82, -82, -82, -82, 60, -82, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -82, -82, -82, -82, -82, + + 5, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -83, -83, + -83, -83, -83, -83, -83, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 142, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -83, -83, -83, -83, 60, -83, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -83, -83, -83, -83, -83, + + 5, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -84, -84, + -84, -84, -84, -84, -84, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 143, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -84, -84, -84, -84, 60, -84, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -84, -84, -84, -84, -84, + + 5, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -85, -85, + -85, -85, -85, -85, -85, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 144, 60, 60, 60, 60, 60, + 60, -85, -85, -85, -85, 60, -85, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -85, -85, -85, -85, -85, + + 5, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -86, -86, + -86, -86, -86, -86, -86, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 145, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -86, -86, -86, -86, 60, -86, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -86, -86, -86, -86, -86, + + 5, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -87, -87, + -87, -87, -87, -87, -87, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -87, -87, -87, -87, 60, -87, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -87, -87, -87, -87, -87, + + 5, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -88, -88, + -88, -88, -88, -88, -88, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -88, -88, -88, -88, 60, -88, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -88, -88, -88, -88, -88, + + 5, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -89, -89, + -89, -89, -89, -89, -89, 60, 60, 60, 60, 146, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -89, -89, -89, -89, 60, -89, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -89, -89, -89, -89, -89, + + 5, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -90, -90, + -90, -90, -90, -90, -90, 60, 60, 60, 147, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -90, -90, -90, -90, 60, -90, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -90, -90, -90, -90, -90, + + 5, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -91, -91, + -91, -91, -91, -91, -91, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 148, 60, 60, 60, 60, 60, + 60, -91, -91, -91, -91, 60, -91, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -91, -91, -91, -91, -91, + + 5, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -92, -92, + -92, -92, -92, -92, -92, 60, 60, 60, 60, 60, + 60, 60, 60, 149, 60, 60, 60, 60, 60, 150, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -92, -92, -92, -92, 60, -92, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -92, -92, -92, -92, -92, + + 5, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -93, -93, + -93, -93, -93, -93, -93, 151, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 152, 60, 60, 60, 153, 60, 60, 60, 60, 60, + 60, -93, -93, -93, -93, 60, -93, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -93, -93, -93, -93, -93, + + 5, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -94, -94, + -94, -94, -94, -94, -94, 60, 60, 60, 154, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -94, -94, -94, -94, 60, -94, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -94, -94, -94, -94, -94, + + 5, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -95, -95, + -95, -95, -95, -95, -95, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 155, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 156, 60, 60, + 60, -95, -95, -95, -95, 60, -95, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -95, -95, -95, -95, -95, + + 5, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -96, -96, + -96, -96, -96, -96, -96, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 157, 60, 60, 60, + 60, 60, 60, 60, 158, 60, 60, 60, 60, 60, + 60, -96, -96, -96, -96, 60, -96, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -96, -96, -96, -96, -96, + + 5, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -97, -97, + -97, -97, -97, -97, -97, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 159, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -97, -97, -97, -97, 60, -97, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -97, -97, -97, -97, -97, + + 5, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -98, -98, + -98, -98, -98, -98, -98, 60, 160, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 161, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -98, -98, -98, -98, 60, -98, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -98, -98, -98, -98, -98, + + 5, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -99, -99, + -99, -99, -99, -99, -99, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 162, 60, 60, 60, 60, 60, 60, + 60, -99, -99, -99, -99, 60, -99, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -99, -99, -99, -99, -99, + + 5, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -100, -100, + -100, -100, -100, -100, -100, 60, 163, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -100, -100, -100, -100, 60, -100, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -100, -100, -100, -100, -100, + + 5, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -101, -101, + -101, -101, -101, -101, -101, 60, 60, 60, 60, 164, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -101, -101, -101, -101, 60, -101, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -101, -101, -101, -101, -101, + + 5, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -102, -102, + -102, -102, -102, -102, -102, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -102, -102, -102, -102, 165, -102, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -102, -102, -102, -102, -102, + + 5, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -103, -103, + -103, -103, -103, -103, -103, 60, 60, 60, 60, 60, + 60, 60, 60, 166, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -103, -103, -103, -103, 60, -103, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -103, -103, -103, -103, -103, + + 5, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -104, -104, + -104, -104, -104, -104, -104, 60, 60, 60, 167, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -104, -104, -104, -104, 60, -104, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -104, -104, -104, -104, -104, + + 5, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -105, -105, + -105, -105, -105, -105, -105, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 168, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -105, -105, -105, -105, 60, -105, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -105, -105, -105, -105, -105, + + 5, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -106, -106, + -106, -106, -106, -106, -106, 60, 60, 60, 60, 169, + 60, 60, 60, 170, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -106, -106, -106, -106, 60, -106, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -106, -106, -106, -106, -106, + + 5, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -107, -107, + -107, -107, -107, -107, -107, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 171, 60, 60, 60, 60, 60, 60, 60, + 60, -107, -107, -107, -107, 60, -107, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -107, -107, -107, -107, -107, + + 5, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 109, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, -108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + + 5, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, + + 5, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, -110, 110, 110, 110, 110, -110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, + + 5, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, + + 5, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 112, 110, 110, 110, 110, 113, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, + + 5, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, + + 5, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, + + 5, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -115, -115, + -115, -115, -115, -115, -115, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -115, -115, -115, -115, 60, -115, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -115, -115, -115, -115, -115, + + 5, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -116, -116, + -116, -116, -116, -116, -116, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -116, -116, -116, -116, 60, -116, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -116, -116, -116, -116, -116, + + 5, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -117, -117, + -117, -117, -117, -117, -117, 60, 60, 60, 60, 172, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -117, -117, -117, -117, 60, -117, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -117, -117, -117, -117, -117, + + 5, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -118, -118, + -118, -118, -118, -118, -118, 60, 60, 60, 60, 60, + 60, 60, 60, 173, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -118, -118, -118, -118, 60, -118, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -118, -118, -118, -118, -118, + + 5, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -119, -119, + -119, -119, -119, -119, -119, 174, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -119, -119, -119, -119, 60, -119, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -119, -119, -119, -119, -119, + + 5, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -120, -120, + -120, -120, -120, -120, -120, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 175, 60, 60, 60, 60, 60, 60, 60, + 60, -120, -120, -120, -120, 60, -120, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -120, -120, -120, -120, -120, + + 5, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -121, -121, + -121, -121, -121, -121, -121, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 176, 60, 60, 60, 60, 60, 60, + 60, -121, -121, -121, -121, 60, -121, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -121, -121, -121, -121, -121, + + 5, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -122, -122, + -122, -122, -122, -122, -122, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 177, 60, 60, 60, 60, 60, 60, + 60, -122, -122, -122, -122, 60, -122, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -122, -122, -122, -122, -122, + + 5, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -123, -123, + -123, -123, -123, -123, -123, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 178, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -123, -123, -123, -123, 60, -123, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -123, -123, -123, -123, -123, + + 5, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -124, -124, + -124, -124, -124, -124, -124, 60, 60, 179, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 180, 60, 60, 60, 60, 60, 60, + 60, -124, -124, -124, -124, 60, -124, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -124, -124, -124, -124, -124, + + 5, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -125, -125, + -125, -125, -125, -125, -125, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 181, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -125, -125, -125, -125, 60, -125, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -125, -125, -125, -125, -125, + + 5, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -126, -126, + -126, -126, -126, -126, -126, 182, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -126, -126, -126, -126, 60, -126, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -126, -126, -126, -126, -126, + + 5, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -127, -127, + -127, -127, -127, -127, -127, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 183, 184, 60, 60, 60, 60, 60, 60, + 60, -127, -127, -127, -127, 60, -127, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -127, -127, -127, -127, -127, + + 5, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -128, -128, + -128, -128, -128, -128, -128, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 185, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -128, -128, -128, -128, 60, -128, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -128, -128, -128, -128, -128, + + 5, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -129, -129, + -129, -129, -129, -129, -129, 60, 60, 60, 60, 186, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -129, -129, -129, -129, 60, -129, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -129, -129, -129, -129, -129, + + 5, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -130, -130, + -130, -130, -130, -130, -130, 60, 60, 187, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -130, -130, -130, -130, 60, -130, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -130, -130, -130, -130, -130, + + 5, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -131, -131, + -131, -131, -131, -131, -131, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 188, 60, 60, 60, 60, 60, + 60, -131, -131, -131, -131, 60, -131, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -131, -131, -131, -131, -131, + + 5, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -132, -132, + -132, -132, -132, -132, -132, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 189, 60, 60, 60, 60, 60, 60, + 60, -132, -132, -132, -132, 60, -132, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -132, -132, -132, -132, -132, + + 5, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -133, -133, + -133, -133, -133, -133, -133, 60, 60, 60, 60, 190, + 60, 60, 60, 191, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -133, -133, -133, -133, 60, -133, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -133, -133, -133, -133, -133, + + 5, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -134, -134, + -134, -134, -134, -134, -134, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -134, -134, -134, -134, 60, -134, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -134, -134, -134, -134, -134, + + 5, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -135, -135, + -135, -135, -135, -135, -135, 60, 60, 192, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -135, -135, -135, -135, 60, -135, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -135, -135, -135, -135, -135, + + 5, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -136, -136, + -136, -136, -136, -136, -136, 193, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -136, -136, -136, -136, 60, -136, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -136, -136, -136, -136, -136, + + 5, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -137, -137, + -137, -137, -137, -137, -137, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -137, -137, -137, -137, 60, -137, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -137, -137, -137, -137, -137, + + 5, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -138, -138, + -138, -138, -138, -138, -138, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 194, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -138, -138, -138, -138, 60, -138, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -138, -138, -138, -138, -138, + + 5, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -139, -139, + -139, -139, -139, -139, -139, 60, 60, 60, 60, 195, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -139, -139, -139, -139, 60, -139, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -139, -139, -139, -139, -139, + + 5, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -140, -140, + -140, -140, -140, -140, -140, 60, 60, 60, 60, 196, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 197, 60, 60, 60, 60, 60, + 60, -140, -140, -140, -140, 60, -140, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -140, -140, -140, -140, -140, + + 5, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -141, -141, + -141, -141, -141, -141, -141, 60, 60, 60, 60, 198, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 199, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -141, -141, -141, -141, 60, -141, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -141, -141, -141, -141, -141, + + 5, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -142, -142, + -142, -142, -142, -142, -142, 60, 60, 60, 60, 60, + 60, 200, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -142, -142, -142, -142, 60, -142, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -142, -142, -142, -142, -142, + + 5, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -143, -143, + -143, -143, -143, -143, -143, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 201, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -143, -143, -143, -143, 60, -143, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -143, -143, -143, -143, -143, + + 5, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -144, -144, + -144, -144, -144, -144, -144, 60, 60, 60, 60, 60, + 202, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -144, -144, -144, -144, 60, -144, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -144, -144, -144, -144, -144, + + 5, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -145, -145, + -145, -145, -145, -145, -145, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 203, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -145, -145, -145, -145, 60, -145, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -145, -145, -145, -145, -145, + + 5, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -146, -146, + -146, -146, -146, -146, -146, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 204, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -146, -146, -146, -146, 60, -146, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -146, -146, -146, -146, -146, + + 5, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -147, -147, + -147, -147, -147, -147, -147, 60, 60, 60, 60, 205, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -147, -147, -147, -147, 60, -147, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -147, -147, -147, -147, -147, + + 5, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -148, -148, + -148, -148, -148, -148, -148, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -148, -148, -148, -148, 60, -148, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -148, -148, -148, -148, -148, + + 5, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -149, -149, + -149, -149, -149, -149, -149, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 206, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -149, -149, -149, -149, 60, -149, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -149, -149, -149, -149, -149, + + 5, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -150, -150, + -150, -150, -150, -150, -150, 60, 60, 207, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -150, -150, -150, -150, 60, -150, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -150, -150, -150, -150, -150, + + 5, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -151, -151, + -151, -151, -151, -151, -151, 60, 60, 60, 208, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -151, -151, -151, -151, 60, -151, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -151, -151, -151, -151, -151, + + 5, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -152, -152, + -152, -152, -152, -152, -152, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 209, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -152, -152, -152, -152, 60, -152, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -152, -152, -152, -152, -152, + + 5, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -153, -153, + -153, -153, -153, -153, -153, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 210, 60, 60, 60, 60, + 60, -153, -153, -153, -153, 60, -153, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -153, -153, -153, -153, -153, + + 5, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -154, -154, + -154, -154, -154, -154, -154, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -154, -154, -154, -154, 211, -154, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -154, -154, -154, -154, -154, + + 5, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -155, -155, + -155, -155, -155, -155, -155, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 212, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -155, -155, -155, -155, 60, -155, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -155, -155, -155, -155, -155, + + 5, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -156, -156, + -156, -156, -156, -156, -156, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -156, -156, -156, -156, 213, -156, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -156, -156, -156, -156, -156, + + 5, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -157, -157, + -157, -157, -157, -157, -157, 60, 60, 60, 60, 214, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -157, -157, -157, -157, 60, -157, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -157, -157, -157, -157, -157, + + 5, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -158, -158, + -158, -158, -158, -158, -158, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -158, -158, -158, -158, 60, -158, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -158, -158, -158, -158, -158, + + 5, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -159, -159, + -159, -159, -159, -159, -159, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -159, -159, -159, -159, 60, -159, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -159, -159, -159, -159, -159, + + 5, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -160, -160, + -160, -160, -160, -160, -160, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 215, 60, 60, 60, 60, 60, 60, + 60, -160, -160, -160, -160, 60, -160, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -160, -160, -160, -160, -160, + + 5, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -161, -161, + -161, -161, -161, -161, -161, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -161, -161, -161, -161, 60, -161, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -161, -161, -161, -161, -161, + + 5, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -162, -162, + -162, -162, -162, -162, -162, 60, 60, 60, 216, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -162, -162, -162, -162, 60, -162, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -162, -162, -162, -162, -162, + + 5, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -163, -163, + -163, -163, -163, -163, -163, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 217, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -163, -163, -163, -163, 60, -163, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -163, -163, -163, -163, -163, + + 5, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -164, -164, + -164, -164, -164, -164, -164, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 218, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -164, -164, -164, -164, 60, -164, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -164, -164, -164, -164, -164, + + 5, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -165, -165, + -165, -165, -165, -165, -165, 60, 219, 220, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 221, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -165, -165, -165, -165, 60, -165, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -165, -165, -165, -165, -165, + + 5, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -166, -166, + -166, -166, -166, -166, -166, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 222, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -166, -166, -166, -166, 60, -166, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -166, -166, -166, -166, -166, + + 5, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -167, -167, + -167, -167, -167, -167, -167, 223, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -167, -167, -167, -167, 60, -167, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -167, -167, -167, -167, -167, + + 5, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -168, -168, + -168, -168, -168, -168, -168, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 224, 60, 60, 60, 60, + 60, -168, -168, -168, -168, 60, -168, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -168, -168, -168, -168, -168, + + 5, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -169, -169, + -169, -169, -169, -169, -169, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 225, 60, 60, 60, 60, 60, 60, 60, + 60, -169, -169, -169, -169, 60, -169, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -169, -169, -169, -169, -169, + + 5, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -170, -170, + -170, -170, -170, -170, -170, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 226, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -170, -170, -170, -170, 60, -170, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -170, -170, -170, -170, -170, + + 5, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -171, -171, + -171, -171, -171, -171, -171, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 227, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -171, -171, -171, -171, 60, -171, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -171, -171, -171, -171, -171, + + 5, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -172, -172, + -172, -172, -172, -172, -172, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 228, 60, 60, 60, 60, 60, 60, 60, + 60, -172, -172, -172, -172, 60, -172, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -172, -172, -172, -172, -172, + + 5, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -173, -173, + -173, -173, -173, -173, -173, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 229, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -173, -173, -173, -173, 60, -173, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -173, -173, -173, -173, -173, + + 5, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -174, -174, + -174, -174, -174, -174, -174, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 230, 60, 60, 60, 60, 60, 60, 60, + 60, -174, -174, -174, -174, 60, -174, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -174, -174, -174, -174, -174, + + 5, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -175, -175, + -175, -175, -175, -175, -175, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -175, -175, -175, -175, 60, -175, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -175, -175, -175, -175, -175, + + 5, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -176, -176, + -176, -176, -176, -176, -176, 60, 60, 60, 60, 231, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -176, -176, -176, -176, 60, -176, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -176, -176, -176, -176, -176, + + 5, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -177, -177, + -177, -177, -177, -177, -177, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 232, 60, 60, 60, 60, 60, + 60, -177, -177, -177, -177, 60, -177, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -177, -177, -177, -177, -177, + + 5, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -178, -178, + -178, -178, -178, -178, -178, 60, 60, 60, 60, 60, + 60, 60, 60, 233, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -178, -178, -178, -178, 60, -178, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -178, -178, -178, -178, -178, + + 5, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -179, -179, + -179, -179, -179, -179, -179, 234, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -179, -179, -179, -179, 60, -179, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -179, -179, -179, -179, -179, + + 5, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -180, -180, + -180, -180, -180, -180, -180, 60, 60, 60, 60, 60, + 60, 60, 60, 235, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -180, -180, -180, -180, 60, -180, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -180, -180, -180, -180, -180, + + 5, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -181, -181, + -181, -181, -181, -181, -181, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 236, 60, 60, 60, 60, 60, + 60, -181, -181, -181, -181, 60, -181, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -181, -181, -181, -181, -181, + + 5, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -182, -182, + -182, -182, -182, -182, -182, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 237, 60, 60, 60, 60, 60, + 60, -182, -182, -182, -182, 60, -182, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -182, -182, -182, -182, -182, + + 5, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -183, -183, + -183, -183, -183, -183, -183, 60, 60, 60, 60, 238, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -183, -183, -183, -183, 60, -183, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -183, -183, -183, -183, -183, + + 5, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -184, -184, + -184, -184, -184, -184, -184, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 239, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -184, -184, -184, -184, 60, -184, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -184, -184, -184, -184, -184, + + 5, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -185, -185, + -185, -185, -185, -185, -185, 240, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -185, -185, -185, -185, 60, -185, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -185, -185, -185, -185, -185, + + 5, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -186, -186, + -186, -186, -186, -186, -186, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 241, 60, 60, 60, 60, 60, + 60, -186, -186, -186, -186, 60, -186, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -186, -186, -186, -186, -186, + + 5, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -187, -187, + -187, -187, -187, -187, -187, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -187, -187, -187, -187, 60, -187, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -187, -187, -187, -187, -187, + + 5, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -188, -188, + -188, -188, -188, -188, -188, 60, 60, 60, 60, 60, + 60, 60, 60, 242, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -188, -188, -188, -188, 60, -188, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -188, -188, -188, -188, -188, + + 5, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -189, -189, + -189, -189, -189, -189, -189, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -189, -189, -189, -189, 243, -189, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -189, -189, -189, -189, -189, + + 5, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -190, -190, + -190, -190, -190, -190, -190, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -190, -190, -190, -190, 60, -190, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -190, -190, -190, -190, -190, + + 5, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -191, -191, + -191, -191, -191, -191, -191, 60, 60, 60, 60, 60, + 244, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -191, -191, -191, -191, 60, -191, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -191, -191, -191, -191, -191, + + 5, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -192, -192, + -192, -192, -192, -192, -192, 60, 60, 60, 60, 60, + 60, 60, 245, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -192, -192, -192, -192, 60, -192, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -192, -192, -192, -192, -192, + + 5, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -193, -193, + -193, -193, -193, -193, -193, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 246, 60, 60, 60, 60, 60, + 60, -193, -193, -193, -193, 60, -193, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -193, -193, -193, -193, -193, + + 5, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -194, -194, + -194, -194, -194, -194, -194, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -194, -194, -194, -194, 60, -194, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -194, -194, -194, -194, -194, + + 5, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -195, -195, + -195, -195, -195, -195, -195, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 247, 60, + 60, -195, -195, -195, -195, 60, -195, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -195, -195, -195, -195, -195, + + 5, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -196, -196, + -196, -196, -196, -196, -196, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 248, 60, 60, 60, 60, 60, 60, 60, + 60, -196, -196, -196, -196, 60, -196, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -196, -196, -196, -196, -196, + + 5, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -197, -197, + -197, -197, -197, -197, -197, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 249, 60, 60, 60, 60, 60, 60, 60, + 60, -197, -197, -197, -197, 60, -197, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -197, -197, -197, -197, -197, + + 5, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -198, -198, + -198, -198, -198, -198, -198, 60, 60, 60, 60, 60, + 60, 250, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -198, -198, -198, -198, 60, -198, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -198, -198, -198, -198, -198, + + 5, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -199, -199, + -199, -199, -199, -199, -199, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -199, -199, -199, -199, 60, -199, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -199, -199, -199, -199, -199, + + 5, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -200, -200, + -200, -200, -200, -200, -200, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 251, 60, 60, 60, 60, 60, + 60, -200, -200, -200, -200, 60, -200, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -200, -200, -200, -200, -200, + + 5, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -201, -201, + -201, -201, -201, -201, -201, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -201, -201, -201, -201, 60, -201, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -201, -201, -201, -201, -201, + + 5, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -202, -202, + -202, -202, -202, -202, -202, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 252, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -202, -202, -202, -202, 60, -202, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -202, -202, -202, -202, -202, + + 5, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -203, -203, + -203, -203, -203, -203, -203, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -203, -203, -203, -203, 60, -203, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -203, -203, -203, -203, -203, + + 5, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -204, -204, + -204, -204, -204, -204, -204, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -204, -204, -204, -204, 60, -204, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -204, -204, -204, -204, -204, + + 5, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -205, -205, + -205, -205, -205, -205, -205, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 253, 60, 60, 60, 60, 60, 60, 60, + 60, -205, -205, -205, -205, 60, -205, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -205, -205, -205, -205, -205, + + 5, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -206, -206, + -206, -206, -206, -206, -206, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 254, 60, 60, 60, 60, 60, + 60, -206, -206, -206, -206, 60, -206, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -206, -206, -206, -206, -206, + + 5, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -207, -207, + -207, -207, -207, -207, -207, 60, 60, 60, 60, 255, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -207, -207, -207, -207, 60, -207, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -207, -207, -207, -207, -207, + + 5, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -208, -208, + -208, -208, -208, -208, -208, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -208, -208, -208, -208, 60, -208, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -208, -208, -208, -208, -208, + + 5, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -209, -209, + -209, -209, -209, -209, -209, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 256, 60, 60, 60, 60, 60, 60, + 60, -209, -209, -209, -209, 60, -209, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -209, -209, -209, -209, -209, + + 5, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -210, -210, + -210, -210, -210, -210, -210, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 257, 60, 60, 60, 60, 60, 60, 60, + 60, -210, -210, -210, -210, 60, -210, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -210, -210, -210, -210, -210, + + 5, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -211, -211, + -211, -211, -211, -211, -211, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 258, 60, 60, 60, 60, 60, 60, + 60, -211, -211, -211, -211, 60, -211, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -211, -211, -211, -211, -211, + + 5, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -212, -212, + -212, -212, -212, -212, -212, 60, 259, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -212, -212, -212, -212, 60, -212, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -212, -212, -212, -212, -212, + + 5, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -213, -213, + -213, -213, -213, -213, -213, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 260, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -213, -213, -213, -213, 60, -213, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -213, -213, -213, -213, -213, + + 5, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -214, -214, + -214, -214, -214, -214, -214, 60, 60, 261, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -214, -214, -214, -214, 60, -214, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -214, -214, -214, -214, -214, + + 5, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -215, -215, + -215, -215, -215, -215, -215, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 262, 60, 60, 60, 60, 60, + 60, -215, -215, -215, -215, 60, -215, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -215, -215, -215, -215, -215, + + 5, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -216, -216, + -216, -216, -216, -216, -216, 263, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -216, -216, -216, -216, 60, -216, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -216, -216, -216, -216, -216, + + 5, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -217, -217, + -217, -217, -217, -217, -217, 60, 60, 60, 60, 264, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -217, -217, -217, -217, 60, -217, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -217, -217, -217, -217, -217, + + 5, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -218, -218, + -218, -218, -218, -218, -218, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -218, -218, -218, -218, 60, -218, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -218, -218, -218, -218, -218, + + 5, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -219, -219, + -219, -219, -219, -219, -219, 60, 60, 60, 60, 60, + 60, 60, 60, 265, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -219, -219, -219, -219, 60, -219, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -219, -219, -219, -219, -219, + + 5, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -220, -220, + -220, -220, -220, -220, -220, 60, 60, 60, 60, 60, + 60, 60, 266, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -220, -220, -220, -220, 60, -220, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -220, -220, -220, -220, -220, + + 5, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -221, -221, + -221, -221, -221, -221, -221, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 267, 60, 60, 60, 60, + 60, -221, -221, -221, -221, 60, -221, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -221, -221, -221, -221, -221, + + 5, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -222, -222, + -222, -222, -222, -222, -222, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 268, 60, 60, 60, 60, + 60, -222, -222, -222, -222, 60, -222, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -222, -222, -222, -222, -222, + + 5, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -223, -223, + -223, -223, -223, -223, -223, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 269, 60, 60, 60, 60, 60, + 60, -223, -223, -223, -223, 60, -223, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -223, -223, -223, -223, -223, + + 5, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -224, -224, + -224, -224, -224, -224, -224, 60, 60, 60, 60, 270, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -224, -224, -224, -224, 60, -224, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -224, -224, -224, -224, -224, + + 5, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -225, -225, + -225, -225, -225, -225, -225, 60, 60, 60, 60, 271, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -225, -225, -225, -225, 60, -225, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -225, -225, -225, -225, -225, + + 5, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -226, -226, + -226, -226, -226, -226, -226, 60, 60, 60, 60, 272, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -226, -226, -226, -226, 60, -226, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -226, -226, -226, -226, -226, + + 5, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -227, -227, + -227, -227, -227, -227, -227, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -227, -227, -227, -227, 60, -227, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -227, -227, -227, -227, -227, + + 5, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -228, -228, + -228, -228, -228, -228, -228, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 273, 60, 60, 60, 60, 60, + 60, -228, -228, -228, -228, 60, -228, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -228, -228, -228, -228, -228, + + 5, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -229, -229, + -229, -229, -229, -229, -229, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -229, -229, -229, -229, 60, -229, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -229, -229, -229, -229, -229, + + 5, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -230, -230, + -230, -230, -230, -230, -230, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 274, + 60, -230, -230, -230, -230, 60, -230, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -230, -230, -230, -230, -230, + + 5, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -231, -231, + -231, -231, -231, -231, -231, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -231, -231, -231, -231, 60, -231, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -231, -231, -231, -231, -231, + + 5, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -232, -232, + -232, -232, -232, -232, -232, 60, 60, 60, 60, 275, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -232, -232, -232, -232, 60, -232, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -232, -232, -232, -232, -232, + + 5, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -233, -233, + -233, -233, -233, -233, -233, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 276, 60, 60, 60, 60, 60, + 60, -233, -233, -233, -233, 60, -233, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -233, -233, -233, -233, -233, + + 5, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -234, -234, + -234, -234, -234, -234, -234, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 277, 60, 60, 60, 60, 60, + 60, -234, -234, -234, -234, 60, -234, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -234, -234, -234, -234, -234, + + 5, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -235, -235, + -235, -235, -235, -235, -235, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 278, 60, 60, 60, 60, 60, 60, + 60, -235, -235, -235, -235, 60, -235, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -235, -235, -235, -235, -235, + + 5, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -236, -236, + -236, -236, -236, -236, -236, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -236, -236, -236, -236, 60, -236, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -236, -236, -236, -236, -236, + + 5, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -237, -237, + -237, -237, -237, -237, -237, 60, 60, 60, 60, 279, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -237, -237, -237, -237, 60, -237, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -237, -237, -237, -237, -237, + + 5, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -238, -238, + -238, -238, -238, -238, -238, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 280, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -238, -238, -238, -238, 60, -238, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -238, -238, -238, -238, -238, + + 5, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -239, -239, + -239, -239, -239, -239, -239, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 281, 60, 60, 60, 60, 60, 60, 60, + 60, -239, -239, -239, -239, 60, -239, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -239, -239, -239, -239, -239, + + 5, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -240, -240, + -240, -240, -240, -240, -240, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 282, 60, 60, 60, 60, 60, 60, 60, + 60, -240, -240, -240, -240, 60, -240, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -240, -240, -240, -240, -240, + + 5, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -241, -241, + -241, -241, -241, -241, -241, 60, 60, 60, 60, 283, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -241, -241, -241, -241, 60, -241, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -241, -241, -241, -241, -241, + + 5, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -242, -242, + -242, -242, -242, -242, -242, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 284, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -242, -242, -242, -242, 60, -242, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -242, -242, -242, -242, -242, + + 5, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -243, -243, + -243, -243, -243, -243, -243, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 285, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -243, -243, -243, -243, 60, -243, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -243, -243, -243, -243, -243, + + 5, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -244, -244, + -244, -244, -244, -244, -244, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -244, -244, -244, -244, 60, -244, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -244, -244, -244, -244, -244, + + 5, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -245, -245, + -245, -245, -245, -245, -245, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -245, -245, -245, -245, 60, -245, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -245, -245, -245, -245, -245, + + 5, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -246, -246, + -246, -246, -246, -246, -246, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -246, -246, -246, -246, 60, -246, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -246, -246, -246, -246, -246, + + 5, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -247, -247, + -247, -247, -247, -247, -247, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -247, -247, -247, -247, 60, -247, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -247, -247, -247, -247, -247, + + 5, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -248, -248, + -248, -248, -248, -248, -248, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 286, 60, 60, 60, 60, 60, + 60, -248, -248, -248, -248, 60, -248, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -248, -248, -248, -248, -248, + + 5, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -249, -249, + -249, -249, -249, -249, -249, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -249, -249, -249, -249, 60, -249, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -249, -249, -249, -249, -249, + + 5, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -250, -250, + -250, -250, -250, -250, -250, 60, 60, 60, 60, 287, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -250, -250, -250, -250, 60, -250, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -250, -250, -250, -250, -250, + + 5, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -251, -251, + -251, -251, -251, -251, -251, 60, 60, 60, 60, 60, + 60, 60, 288, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -251, -251, -251, -251, 60, -251, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -251, -251, -251, -251, -251, + + 5, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -252, -252, + -252, -252, -252, -252, -252, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 289, 60, 60, 60, 60, + 60, -252, -252, -252, -252, 60, -252, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -252, -252, -252, -252, -252, + + 5, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -253, -253, + -253, -253, -253, -253, -253, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -253, -253, -253, -253, 60, -253, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -253, -253, -253, -253, -253, + + 5, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -254, -254, + -254, -254, -254, -254, -254, 60, 60, 60, 60, 60, + 290, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -254, -254, -254, -254, 60, -254, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -254, -254, -254, -254, -254, + + 5, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -255, -255, + -255, -255, -255, -255, -255, 60, 60, 60, 291, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -255, -255, -255, -255, 60, -255, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -255, -255, -255, -255, -255, + + 5, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -256, -256, + -256, -256, -256, -256, -256, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 292, 60, 60, 60, 60, 60, + 60, -256, -256, -256, -256, 60, -256, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -256, -256, -256, -256, -256, + + 5, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -257, -257, + -257, -257, -257, -257, -257, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 293, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -257, -257, -257, -257, 60, -257, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -257, -257, -257, -257, -257, + + 5, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -258, -258, + -258, -258, -258, -258, -258, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 294, 60, 60, 60, 60, 60, + 60, -258, -258, -258, -258, 60, -258, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -258, -258, -258, -258, -258, + + 5, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -259, -259, + -259, -259, -259, -259, -259, 295, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -259, -259, -259, -259, 60, -259, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -259, -259, -259, -259, -259, + + 5, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -260, -260, + -260, -260, -260, -260, -260, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 296, 60, 60, 60, 60, 60, 60, 60, + 60, -260, -260, -260, -260, 60, -260, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -260, -260, -260, -260, -260, + + 5, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -261, -261, + -261, -261, -261, -261, -261, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 297, 60, 60, 60, 60, 60, + 60, -261, -261, -261, -261, 60, -261, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -261, -261, -261, -261, -261, + + 5, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -262, -262, + -262, -262, -262, -262, -262, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 298, 60, 60, 60, 60, 60, 60, 60, + 60, -262, -262, -262, -262, 60, -262, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -262, -262, -262, -262, -262, + + 5, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -263, -263, + -263, -263, -263, -263, -263, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 299, 60, 60, 60, 60, 60, + 60, -263, -263, -263, -263, 60, -263, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -263, -263, -263, -263, -263, + + 5, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -264, -264, + -264, -264, -264, -264, -264, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -264, -264, -264, -264, 60, -264, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -264, -264, -264, -264, -264, + + 5, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -265, -265, + -265, -265, -265, -265, -265, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 300, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -265, -265, -265, -265, 60, -265, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -265, -265, -265, -265, -265, + + 5, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -266, -266, + -266, -266, -266, -266, -266, 301, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -266, -266, -266, -266, 60, -266, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -266, -266, -266, -266, -266, + + 5, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -267, -267, + -267, -267, -267, -267, -267, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 302, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -267, -267, -267, -267, 60, -267, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -267, -267, -267, -267, -267, + + 5, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -268, -268, + -268, -268, -268, -268, -268, 60, 60, 60, 60, 303, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -268, -268, -268, -268, 60, -268, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -268, -268, -268, -268, -268, + + 5, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -269, -269, + -269, -269, -269, -269, -269, 60, 60, 60, 60, 304, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -269, -269, -269, -269, 60, -269, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -269, -269, -269, -269, -269, + + 5, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -270, -270, + -270, -270, -270, -270, -270, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 305, 60, 60, 60, 60, 60, 60, + 60, -270, -270, -270, -270, 60, -270, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -270, -270, -270, -270, -270, + + 5, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -271, -271, + -271, -271, -271, -271, -271, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -271, -271, -271, -271, 60, -271, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -271, -271, -271, -271, -271, + + 5, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -272, -272, + -272, -272, -272, -272, -272, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -272, -272, -272, -272, 60, -272, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -272, -272, -272, -272, -272, + + 5, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -273, -273, + -273, -273, -273, -273, -273, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -273, -273, -273, -273, 60, -273, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -273, -273, -273, -273, -273, + + 5, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -274, -274, + -274, -274, -274, -274, -274, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -274, -274, -274, -274, 306, -274, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -274, -274, -274, -274, -274, + + 5, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -275, -275, + -275, -275, -275, -275, -275, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 307, 60, 60, 60, 60, 60, 60, 60, + 60, -275, -275, -275, -275, 60, -275, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -275, -275, -275, -275, -275, + + 5, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -276, -276, + -276, -276, -276, -276, -276, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -276, -276, -276, -276, 60, -276, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -276, -276, -276, -276, -276, + + 5, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -277, -277, + -277, -277, -277, -277, -277, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -277, -277, -277, -277, 60, -277, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -277, -277, -277, -277, -277, + + 5, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -278, -278, + -278, -278, -278, -278, -278, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 308, 60, 60, 60, 60, 60, + 60, -278, -278, -278, -278, 60, -278, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -278, -278, -278, -278, -278, + + 5, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -279, -279, + -279, -279, -279, -279, -279, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -279, -279, -279, -279, 60, -279, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -279, -279, -279, -279, -279, + + 5, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -280, -280, + -280, -280, -280, -280, -280, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 309, 60, 60, 60, 60, 60, + 60, -280, -280, -280, -280, 60, -280, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -280, -280, -280, -280, -280, + + 5, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -281, -281, + -281, -281, -281, -281, -281, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -281, -281, -281, -281, 60, -281, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -281, -281, -281, -281, -281, + + 5, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -282, -282, + -282, -282, -282, -282, -282, 60, 60, 60, 60, 310, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -282, -282, -282, -282, 60, -282, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -282, -282, -282, -282, -282, + + 5, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -283, -283, + -283, -283, -283, -283, -283, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -283, -283, -283, -283, 60, -283, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -283, -283, -283, -283, -283, + + 5, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -284, -284, + -284, -284, -284, -284, -284, 60, 60, 311, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -284, -284, -284, -284, 60, -284, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -284, -284, -284, -284, -284, + + 5, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -285, -285, + -285, -285, -285, -285, -285, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 312, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -285, -285, -285, -285, 60, -285, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -285, -285, -285, -285, -285, + + 5, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -286, -286, + -286, -286, -286, -286, -286, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -286, -286, -286, -286, 60, -286, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -286, -286, -286, -286, -286, + + 5, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -287, -287, + -287, -287, -287, -287, -287, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 313, 60, 60, 60, 60, 60, 60, 60, + 60, -287, -287, -287, -287, 60, -287, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -287, -287, -287, -287, -287, + + 5, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -288, -288, + -288, -288, -288, -288, -288, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -288, -288, -288, -288, 60, -288, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -288, -288, -288, -288, -288, + + 5, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -289, -289, + -289, -289, -289, -289, -289, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 314, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -289, -289, -289, -289, 60, -289, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -289, -289, -289, -289, -289, + + 5, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -290, -290, + -290, -290, -290, -290, -290, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -290, -290, -290, -290, 60, -290, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -290, -290, -290, -290, -290, + + 5, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -291, -291, + -291, -291, -291, -291, -291, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 315, 60, 60, 60, 60, + 60, -291, -291, -291, -291, 60, -291, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -291, -291, -291, -291, -291, + + 5, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -292, -292, + -292, -292, -292, -292, -292, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 316, 60, 60, 60, 60, 60, 60, 60, + 60, -292, -292, -292, -292, 60, -292, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -292, -292, -292, -292, -292, + + 5, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -293, -293, + -293, -293, -293, -293, -293, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -293, -293, -293, -293, 60, -293, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -293, -293, -293, -293, -293, + + 5, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -294, -294, + -294, -294, -294, -294, -294, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 317, 60, 60, 60, 60, 60, 60, 60, + 60, -294, -294, -294, -294, 60, -294, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -294, -294, -294, -294, -294, + + 5, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -295, -295, + -295, -295, -295, -295, -295, 60, 60, 318, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -295, -295, -295, -295, 60, -295, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -295, -295, -295, -295, -295, + + 5, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -296, -296, + -296, -296, -296, -296, -296, 60, 60, 60, 60, 60, + 60, 60, 60, 319, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -296, -296, -296, -296, 60, -296, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -296, -296, -296, -296, -296, + + 5, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -297, -297, + -297, -297, -297, -297, -297, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -297, -297, -297, -297, 60, -297, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -297, -297, -297, -297, -297, + + 5, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -298, -298, + -298, -298, -298, -298, -298, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -298, -298, -298, -298, 60, -298, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -298, -298, -298, -298, -298, + + 5, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -299, -299, + -299, -299, -299, -299, -299, 60, 60, 60, 60, 320, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -299, -299, -299, -299, 60, -299, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -299, -299, -299, -299, -299, + + 5, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -300, -300, + -300, -300, -300, -300, -300, 321, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -300, -300, -300, -300, 60, -300, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -300, -300, -300, -300, -300, + + 5, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -301, -301, + -301, -301, -301, -301, -301, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 322, 60, 60, 60, 60, 60, 60, 60, + 60, -301, -301, -301, -301, 60, -301, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -301, -301, -301, -301, -301, + + 5, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -302, -302, + -302, -302, -302, -302, -302, 60, 323, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -302, -302, -302, -302, 60, -302, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -302, -302, -302, -302, -302, + + 5, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -303, -303, + -303, -303, -303, -303, -303, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -303, -303, -303, -303, 60, -303, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -303, -303, -303, -303, -303, + + 5, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -304, -304, + -304, -304, -304, -304, -304, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -304, -304, -304, -304, 60, -304, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -304, -304, -304, -304, -304, + + 5, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -305, -305, + -305, -305, -305, -305, -305, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -305, -305, -305, -305, 60, -305, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -305, -305, -305, -305, -305, + + 5, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -306, -306, + -306, -306, -306, -306, -306, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 324, 60, 60, 60, 60, 60, + 60, -306, -306, -306, -306, 60, -306, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -306, -306, -306, -306, -306, + + 5, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -307, -307, + -307, -307, -307, -307, -307, 60, 60, 60, 60, 325, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -307, -307, -307, -307, 60, -307, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -307, -307, -307, -307, -307, + + 5, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -308, -308, + -308, -308, -308, -308, -308, 60, 60, 60, 60, 326, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -308, -308, -308, -308, 60, -308, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -308, -308, -308, -308, -308, + + 5, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -309, -309, + -309, -309, -309, -309, -309, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -309, -309, -309, -309, 60, -309, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -309, -309, -309, -309, -309, + + 5, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -310, -310, + -310, -310, -310, -310, -310, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -310, -310, -310, -310, 60, -310, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -310, -310, -310, -310, -310, + + 5, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -311, -311, + -311, -311, -311, -311, -311, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 327, 60, 60, 60, 60, 60, + 60, -311, -311, -311, -311, 60, -311, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -311, -311, -311, -311, -311, + + 5, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -312, -312, + -312, -312, -312, -312, -312, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 328, 60, 60, 60, 60, 60, + 60, -312, -312, -312, -312, 60, -312, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -312, -312, -312, -312, -312, + + 5, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -313, -313, + -313, -313, -313, -313, -313, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -313, -313, -313, -313, 60, -313, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -313, -313, -313, -313, -313, + + 5, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -314, -314, + -314, -314, -314, -314, -314, 60, 60, 60, 329, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -314, -314, -314, -314, 60, -314, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -314, -314, -314, -314, -314, + + 5, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -315, -315, + -315, -315, -315, -315, -315, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 330, 60, 60, 60, 60, 60, 60, 60, + 60, -315, -315, -315, -315, 60, -315, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -315, -315, -315, -315, -315, + + 5, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -316, -316, + -316, -316, -316, -316, -316, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -316, -316, -316, -316, 60, -316, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -316, -316, -316, -316, -316, + + 5, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -317, -317, + -317, -317, -317, -317, -317, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -317, -317, -317, -317, 60, -317, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -317, -317, -317, -317, -317, + + 5, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -318, -318, + -318, -318, -318, -318, -318, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 331, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -318, -318, -318, -318, 60, -318, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -318, -318, -318, -318, -318, + + 5, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -319, -319, + -319, -319, -319, -319, -319, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 332, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -319, -319, -319, -319, 60, -319, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -319, -319, -319, -319, -319, + + 5, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -320, -320, + -320, -320, -320, -320, -320, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -320, -320, -320, -320, 60, -320, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -320, -320, -320, -320, -320, + + 5, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -321, -321, + -321, -321, -321, -321, -321, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 333, 60, 60, 60, 60, 60, 60, 60, + 60, -321, -321, -321, -321, 60, -321, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -321, -321, -321, -321, -321, + + 5, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -322, -322, + -322, -322, -322, -322, -322, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -322, -322, -322, -322, 60, -322, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -322, -322, -322, -322, -322, + + 5, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -323, -323, + -323, -323, -323, -323, -323, 60, 60, 60, 60, 334, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -323, -323, -323, -323, 60, -323, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -323, -323, -323, -323, -323, + + 5, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -324, -324, + -324, -324, -324, -324, -324, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 335, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -324, -324, -324, -324, 60, -324, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -324, -324, -324, -324, -324, + + 5, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -325, -325, + -325, -325, -325, -325, -325, 60, 60, 60, 336, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -325, -325, -325, -325, 60, -325, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -325, -325, -325, -325, -325, + + 5, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -326, -326, + -326, -326, -326, -326, -326, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 337, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -326, -326, -326, -326, 60, -326, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -326, -326, -326, -326, -326, + + 5, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -327, -327, + -327, -327, -327, -327, -327, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -327, -327, -327, -327, 60, -327, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -327, -327, -327, -327, -327, + + 5, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -328, -328, + -328, -328, -328, -328, -328, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -328, -328, -328, -328, 338, -328, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -328, -328, -328, -328, -328, + + 5, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -329, -329, + -329, -329, -329, -329, -329, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -329, -329, -329, -329, 60, -329, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -329, -329, -329, -329, -329, + + 5, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -330, -330, + -330, -330, -330, -330, -330, 60, 60, 60, 60, 339, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -330, -330, -330, -330, 60, -330, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -330, -330, -330, -330, -330, + + 5, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -331, -331, + -331, -331, -331, -331, -331, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -331, -331, -331, -331, 60, -331, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -331, -331, -331, -331, -331, + + 5, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -332, -332, + -332, -332, -332, -332, -332, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 340, 60, 60, 60, 60, 60, + 60, -332, -332, -332, -332, 60, -332, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -332, -332, -332, -332, -332, + + 5, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -333, -333, + -333, -333, -333, -333, -333, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 341, + 60, -333, -333, -333, -333, 60, -333, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -333, -333, -333, -333, -333, + + 5, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -334, -334, + -334, -334, -334, -334, -334, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 342, 60, 60, 60, 60, 60, 60, 60, + 60, -334, -334, -334, -334, 60, -334, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -334, -334, -334, -334, -334, + + 5, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -335, -335, + -335, -335, -335, -335, -335, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -335, -335, -335, -335, 343, -335, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -335, -335, -335, -335, -335, + + 5, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -336, -336, + -336, -336, -336, -336, -336, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -336, -336, -336, -336, 60, -336, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -336, -336, -336, -336, -336, + + 5, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -337, -337, + -337, -337, -337, -337, -337, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 344, 60, 60, 60, 60, 60, + 60, -337, -337, -337, -337, 60, -337, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -337, -337, -337, -337, -337, + + 5, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -338, -338, + -338, -338, -338, -338, -338, 60, 60, 60, 60, 60, + 345, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -338, -338, -338, -338, 60, -338, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -338, -338, -338, -338, -338, + + 5, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -339, -339, + -339, -339, -339, -339, -339, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -339, -339, -339, -339, 60, -339, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -339, -339, -339, -339, -339, + + 5, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -340, -340, + -340, -340, -340, -340, -340, 60, 60, 60, 60, 60, + 346, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -340, -340, -340, -340, 60, -340, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -340, -340, -340, -340, -340, + + 5, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -341, -341, + -341, -341, -341, -341, -341, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -341, -341, -341, -341, 60, -341, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -341, -341, -341, -341, -341, + + 5, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -342, -342, + -342, -342, -342, -342, -342, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -342, -342, -342, -342, 60, -342, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -342, -342, -342, -342, -342, + + 5, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -343, -343, + -343, -343, -343, -343, -343, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 347, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -343, -343, -343, -343, 60, -343, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -343, -343, -343, -343, -343, + + 5, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -344, -344, + -344, -344, -344, -344, -344, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -344, -344, -344, -344, 60, -344, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -344, -344, -344, -344, -344, + + 5, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -345, -345, + -345, -345, -345, -345, -345, 60, 60, 60, 60, 60, + 60, 60, 60, 348, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -345, -345, -345, -345, 60, -345, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -345, -345, -345, -345, -345, + + 5, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -346, -346, + -346, -346, -346, -346, -346, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -346, -346, -346, -346, 60, -346, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -346, -346, -346, -346, -346, + + 5, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -347, -347, + -347, -347, -347, -347, -347, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 349, 60, 60, 60, 60, + 60, -347, -347, -347, -347, 60, -347, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -347, -347, -347, -347, -347, + + 5, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -348, -348, + -348, -348, -348, -348, -348, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 350, 60, 60, 60, 60, 60, + 60, -348, -348, -348, -348, 60, -348, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -348, -348, -348, -348, -348, + + 5, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -349, -349, + -349, -349, -349, -349, -349, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 351, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -349, -349, -349, -349, 60, -349, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -349, -349, -349, -349, -349, + + 5, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -350, -350, + -350, -350, -350, -350, -350, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -350, -350, -350, -350, 352, -350, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -350, -350, -350, -350, -350, + + 5, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -351, -351, + -351, -351, -351, -351, -351, 60, 353, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -351, -351, -351, -351, 60, -351, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -351, -351, -351, -351, -351, + + 5, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -352, -352, + -352, -352, -352, -352, -352, 60, 60, 60, 60, 60, + 60, 60, 60, 354, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -352, -352, -352, -352, 60, -352, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -352, -352, -352, -352, -352, + + 5, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -353, -353, + -353, -353, -353, -353, -353, 60, 60, 60, 60, 355, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -353, -353, -353, -353, 60, -353, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -353, -353, -353, -353, -353, + + 5, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -354, -354, + -354, -354, -354, -354, -354, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 356, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -354, -354, -354, -354, 60, -354, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -354, -354, -354, -354, -354, + + 5, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -355, -355, + -355, -355, -355, -355, -355, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 357, 60, 60, 60, 60, 60, 60, 60, + 60, -355, -355, -355, -355, 60, -355, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -355, -355, -355, -355, -355, + + 5, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -356, -356, + -356, -356, -356, -356, -356, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -356, -356, -356, -356, 358, -356, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -356, -356, -356, -356, -356, + + 5, -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, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -357, -357, + -357, -357, -357, -357, -357, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -357, -357, -357, -357, 60, -357, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -357, -357, -357, -357, -357, + + 5, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -358, -358, + -358, -358, -358, -358, -358, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 359, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -358, -358, -358, -358, 60, -358, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -358, -358, -358, -358, -358, + + 5, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -359, -359, + -359, -359, -359, -359, -359, 60, 60, 60, 60, 360, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -359, -359, -359, -359, 60, -359, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -359, -359, -359, -359, -359, + + 5, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -360, -360, + -360, -360, -360, -360, -360, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 361, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -360, -360, -360, -360, 60, -360, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -360, -360, -360, -360, -360, + + 5, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -361, -361, + -361, -361, -361, -361, -361, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 362, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -361, -361, -361, -361, 60, -361, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -361, -361, -361, -361, -361, + + 5, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -362, -362, + -362, -362, -362, -362, -362, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 363, 60, 60, 60, 60, 60, 60, 60, + 60, -362, -362, -362, -362, 60, -362, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -362, -362, -362, -362, -362, + + 5, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -363, -363, + -363, -363, -363, -363, -363, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 364, + 60, -363, -363, -363, -363, 60, -363, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -363, -363, -363, -363, -363, + + 5, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -364, -364, + -364, -364, -364, -364, -364, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, -364, -364, -364, -364, 60, -364, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, -364, -364, -364, -364, -364 + + } ; + + +#ifndef yytext_ptr +static void yy_flex_strncpy YY_PROTO(( char *, const char *, int )); +#endif + +#ifdef __cplusplus +static int yyinput YY_PROTO(( void )); +#else +static int input YY_PROTO(( void )); +#endif + +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(( const 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 = yy_cp - yy_bp; \ + yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yy_c_buf_p = yy_cp; + +#define YY_END_OF_BUFFER 108 +static const short int yy_accept[365] = + { 0, + 0, 0, 100, 100, 108, 106, 105, 105, 95, 106, + 84, 90, 93, 91, 88, 92, 106, 94, 1, 106, + 89, 87, 85, 86, 98, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 96, 97, 100, 101, 102, 105, 0, + 3, 79, 99, 2, 1, 80, 81, 83, 82, 78, + 78, 78, 78, 78, 36, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 19, + 10, 16, 78, 78, 78, 78, 46, 53, 78, 7, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + + 78, 78, 78, 78, 78, 78, 78, 100, 101, 102, + 103, 102, 104, 2, 6, 37, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 18, 78, 78, 32, 78, 78, 78, + 12, 78, 78, 8, 78, 78, 78, 11, 78, 78, + 78, 78, 78, 72, 78, 78, 78, 43, 5, 78, + 27, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 15, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 38, 78, 78, 21, + 78, 78, 78, 30, 78, 78, 78, 78, 40, 78, + + 23, 78, 4, 56, 78, 78, 78, 34, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 20, 78, 78, + 78, 78, 78, 78, 78, 78, 77, 78, 17, 78, + 58, 78, 78, 78, 78, 28, 78, 78, 78, 78, + 78, 78, 78, 22, 57, 14, 49, 78, 67, 78, + 78, 78, 35, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 48, 78, 78, 78, 78, 78, 78, + 31, 24, 71, 78, 78, 75, 66, 78, 47, 78, + 55, 78, 44, 78, 78, 39, 78, 68, 78, 70, + 78, 78, 25, 78, 78, 78, 26, 64, 78, 78, + + 78, 78, 50, 42, 41, 78, 78, 78, 45, 54, + 78, 78, 13, 78, 78, 65, 73, 78, 78, 69, + 78, 60, 78, 78, 78, 78, 29, 78, 59, 78, + 76, 78, 78, 78, 78, 51, 78, 78, 9, 78, + 62, 61, 78, 33, 78, 74, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 63, 78, 78, 78, + 78, 78, 78, 52 + } ; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +static const yy_state_type yy_NUL_trans[365] = + { 0, + 6, 6, 46, 46, 0, 0, 0, 0, 0, 50, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 108, 0, 110, 0, 50, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 108, 0, 110, + 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 + } ; + +/* 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 +char *yytext; +/****************************************************** +SQL parser lexical analyzer: input file for the GNU Flex lexer generator + +(c) 1997 Innobase Oy + +Created 12/14/1997 Heikki Tuuri +*******************************************************/ +#define YYSTYPE que_node_t* + +#include "univ.i" +#include "pars0pars.h" +#include "pars0grm.h" +#include "pars0sym.h" +#include "mem0mem.h" +#include "os0proc.h" + +#define isatty(A) 0 +#define malloc(A) mem_alloc(A) +#define free(A) mem_free(A) +#define realloc(P, A) mem_realloc(P, A) +#define exit(A) ut_a(0) + +#define YY_INPUT(buf, result, max_size) pars_get_lex_chars(buf, &result,\ + max_size) + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#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 ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) \ + 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 + +YY_DECL + { + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + + + + + if ( yy_init ) + { +#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_init_buffer( yy_current_buffer, yyin ); + else + yy_current_buffer = + yy_create_buffer( yyin, YY_BUF_SIZE ); + + yy_load_buffer_state(); + + yy_init = 0; + } + + 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_match: + while ( (yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]) > 0 ) + { + if ( yy_accept[yy_current_state] ) + { + yy_last_accepting_state = yy_current_state; + yy_last_accepting_cpos = yy_cp; + } + + ++yy_cp; + } + + yy_current_state = -yy_current_state; + +yy_find_action: + 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 + 1; + yy_current_state = yy_last_accepting_state; + goto yy_find_action; + +case 1: +YY_USER_ACTION +{ + yylval = sym_tab_add_int_lit(pars_sym_tab_global, + atoi(yytext)); + return(PARS_INT_LIT); +} + YY_BREAK +case 2: +YY_USER_ACTION +{ + ut_error; /* not implemented */ + + return(PARS_FLOAT_LIT); +} + YY_BREAK +case 3: +YY_USER_ACTION +{ + /* Remove the single quotes around the string */ + + yylval = sym_tab_add_str_lit(pars_sym_tab_global, + (byte*)yytext, + ut_strlen(yytext)); + return(PARS_STR_LIT); +} + YY_BREAK +case 4: +YY_USER_ACTION +{ + yylval = sym_tab_add_null_lit(pars_sym_tab_global); + + return(PARS_NULL_LIT); +} + YY_BREAK +case 5: +YY_USER_ACTION +{ + /* Implicit cursor name */ + yylval = sym_tab_add_str_lit(pars_sym_tab_global, + (byte*)"\'SQL\'", 5); + return(PARS_SQL_TOKEN); +} + YY_BREAK +case 6: +YY_USER_ACTION +{ + return(PARS_AND_TOKEN); +} + YY_BREAK +case 7: +YY_USER_ACTION +{ + return(PARS_OR_TOKEN); +} + YY_BREAK +case 8: +YY_USER_ACTION +{ + return(PARS_NOT_TOKEN); +} + YY_BREAK +case 9: +YY_USER_ACTION +{ + return(PARS_PROCEDURE_TOKEN); +} + YY_BREAK +case 10: +YY_USER_ACTION +{ + return(PARS_IN_TOKEN); +} + YY_BREAK +case 11: +YY_USER_ACTION +{ + return(PARS_OUT_TOKEN); +} + YY_BREAK +case 12: +YY_USER_ACTION +{ + return(PARS_INT_TOKEN); +} + YY_BREAK +case 13: +YY_USER_ACTION +{ + return(PARS_INT_TOKEN); +} + YY_BREAK +case 14: +YY_USER_ACTION +{ + return(PARS_FLOAT_TOKEN); +} + YY_BREAK +case 15: +YY_USER_ACTION +{ + return(PARS_CHAR_TOKEN); +} + YY_BREAK +case 16: +YY_USER_ACTION +{ + return(PARS_IS_TOKEN); +} + YY_BREAK +case 17: +YY_USER_ACTION +{ + return(PARS_BEGIN_TOKEN); +} + YY_BREAK +case 18: +YY_USER_ACTION +{ + return(PARS_END_TOKEN); +} + YY_BREAK +case 19: +YY_USER_ACTION +{ + return(PARS_IF_TOKEN); +} + YY_BREAK +case 20: +YY_USER_ACTION +{ + return(PARS_THEN_TOKEN); +} + YY_BREAK +case 21: +YY_USER_ACTION +{ + return(PARS_ELSE_TOKEN); +} + YY_BREAK +case 22: +YY_USER_ACTION +{ + return(PARS_ELSIF_TOKEN); +} + YY_BREAK +case 23: +YY_USER_ACTION +{ + return(PARS_LOOP_TOKEN); +} + YY_BREAK +case 24: +YY_USER_ACTION +{ + return(PARS_WHILE_TOKEN); +} + YY_BREAK +case 25: +YY_USER_ACTION +{ + return(PARS_RETURN_TOKEN); +} + YY_BREAK +case 26: +YY_USER_ACTION +{ + return(PARS_SELECT_TOKEN); +} + YY_BREAK +case 27: +YY_USER_ACTION +{ + return(PARS_SUM_TOKEN); +} + YY_BREAK +case 28: +YY_USER_ACTION +{ + return(PARS_COUNT_TOKEN); +} + YY_BREAK +case 29: +YY_USER_ACTION +{ + return(PARS_DISTINCT_TOKEN); +} + YY_BREAK +case 30: +YY_USER_ACTION +{ + return(PARS_FROM_TOKEN); +} + YY_BREAK +case 31: +YY_USER_ACTION +{ + return(PARS_WHERE_TOKEN); +} + YY_BREAK +case 32: +YY_USER_ACTION +{ + return(PARS_FOR_TOKEN); +} + YY_BREAK +case 33: +YY_USER_ACTION +{ + return(PARS_CONSISTENT_TOKEN); +} + YY_BREAK +case 34: +YY_USER_ACTION +{ + return(PARS_READ_TOKEN); +} + YY_BREAK +case 35: +YY_USER_ACTION +{ + return(PARS_ORDER_TOKEN); +} + YY_BREAK +case 36: +YY_USER_ACTION +{ + return(PARS_BY_TOKEN); +} + YY_BREAK +case 37: +YY_USER_ACTION +{ + return(PARS_ASC_TOKEN); +} + YY_BREAK +case 38: +YY_USER_ACTION +{ + return(PARS_DESC_TOKEN); +} + YY_BREAK +case 39: +YY_USER_ACTION +{ + return(PARS_INSERT_TOKEN); +} + YY_BREAK +case 40: +YY_USER_ACTION +{ + return(PARS_INTO_TOKEN); +} + YY_BREAK +case 41: +YY_USER_ACTION +{ + return(PARS_VALUES_TOKEN); +} + YY_BREAK +case 42: +YY_USER_ACTION +{ + return(PARS_UPDATE_TOKEN); +} + YY_BREAK +case 43: +YY_USER_ACTION +{ + return(PARS_SET_TOKEN); +} + YY_BREAK +case 44: +YY_USER_ACTION +{ + return(PARS_DELETE_TOKEN); +} + YY_BREAK +case 45: +YY_USER_ACTION +{ + return(PARS_CURRENT_TOKEN); +} + YY_BREAK +case 46: +YY_USER_ACTION +{ + return(PARS_OF_TOKEN); +} + YY_BREAK +case 47: +YY_USER_ACTION +{ + return(PARS_CREATE_TOKEN); +} + YY_BREAK +case 48: +YY_USER_ACTION +{ + return(PARS_TABLE_TOKEN); +} + YY_BREAK +case 49: +YY_USER_ACTION +{ + return(PARS_INDEX_TOKEN); +} + YY_BREAK +case 50: +YY_USER_ACTION +{ + return(PARS_UNIQUE_TOKEN); +} + YY_BREAK +case 51: +YY_USER_ACTION +{ + return(PARS_CLUSTERED_TOKEN); +} + YY_BREAK +case 52: +YY_USER_ACTION +{ + return(PARS_DOES_NOT_FIT_IN_MEM_TOKEN); +} + YY_BREAK +case 53: +YY_USER_ACTION +{ + return(PARS_ON_TOKEN); +} + YY_BREAK +case 54: +YY_USER_ACTION +{ + return(PARS_DECLARE_TOKEN); +} + YY_BREAK +case 55: +YY_USER_ACTION +{ + return(PARS_CURSOR_TOKEN); +} + YY_BREAK +case 56: +YY_USER_ACTION +{ + return(PARS_OPEN_TOKEN); +} + YY_BREAK +case 57: +YY_USER_ACTION +{ + return(PARS_FETCH_TOKEN); +} + YY_BREAK +case 58: +YY_USER_ACTION +{ + return(PARS_CLOSE_TOKEN); +} + YY_BREAK +case 59: +YY_USER_ACTION +{ + return(PARS_NOTFOUND_TOKEN); +} + YY_BREAK +case 60: +YY_USER_ACTION +{ + return(PARS_TO_CHAR_TOKEN); +} + YY_BREAK +case 61: +YY_USER_ACTION +{ + return(PARS_TO_NUMBER_TOKEN); +} + YY_BREAK +case 62: +YY_USER_ACTION +{ + return(PARS_TO_BINARY_TOKEN); +} + YY_BREAK +case 63: +YY_USER_ACTION +{ + return(PARS_BINARY_TO_NUMBER_TOKEN); +} + YY_BREAK +case 64: +YY_USER_ACTION +{ + return(PARS_SUBSTR_TOKEN); +} + YY_BREAK +case 65: +YY_USER_ACTION +{ + return(PARS_REPLSTR_TOKEN); +} + YY_BREAK +case 66: +YY_USER_ACTION +{ + return(PARS_CONCAT_TOKEN); +} + YY_BREAK +case 67: +YY_USER_ACTION +{ + return(PARS_INSTR_TOKEN); +} + YY_BREAK +case 68: +YY_USER_ACTION +{ + return(PARS_LENGTH_TOKEN); +} + YY_BREAK +case 69: +YY_USER_ACTION +{ + return(PARS_SYSDATE_TOKEN); +} + YY_BREAK +case 70: +YY_USER_ACTION +{ + return(PARS_PRINTF_TOKEN); +} + YY_BREAK +case 71: +YY_USER_ACTION +{ + return(PARS_ASSERT_TOKEN); +} + YY_BREAK +case 72: +YY_USER_ACTION +{ + return(PARS_RND_TOKEN); +} + YY_BREAK +case 73: +YY_USER_ACTION +{ + return(PARS_RND_STR_TOKEN); +} + YY_BREAK +case 74: +YY_USER_ACTION +{ + return(PARS_ROW_PRINTF_TOKEN); +} + YY_BREAK +case 75: +YY_USER_ACTION +{ + return(PARS_COMMIT_TOKEN); +} + YY_BREAK +case 76: +YY_USER_ACTION +{ + return(PARS_ROLLBACK_TOKEN); +} + YY_BREAK +case 77: +YY_USER_ACTION +{ + return(PARS_WORK_TOKEN); +} + YY_BREAK +case 78: +YY_USER_ACTION +{ + yylval = sym_tab_add_id(pars_sym_tab_global, + (byte*)yytext, + ut_strlen(yytext)); + return(PARS_ID_TOKEN); +} + YY_BREAK +case 79: +YY_USER_ACTION +{ + return(PARS_DDOT_TOKEN); +} + YY_BREAK +case 80: +YY_USER_ACTION +{ + return(PARS_ASSIGN_TOKEN); +} + YY_BREAK +case 81: +YY_USER_ACTION +{ + return(PARS_LE_TOKEN); +} + YY_BREAK +case 82: +YY_USER_ACTION +{ + return(PARS_GE_TOKEN); +} + YY_BREAK +case 83: +YY_USER_ACTION +{ + return(PARS_NE_TOKEN); +} + YY_BREAK +case 84: +YY_USER_ACTION +{ + + return((int)(*yytext)); +} + YY_BREAK +case 85: +YY_USER_ACTION +{ + + return((int)(*yytext)); +} + YY_BREAK +case 86: +YY_USER_ACTION +{ + + return((int)(*yytext)); +} + YY_BREAK +case 87: +YY_USER_ACTION +{ + + return((int)(*yytext)); +} + YY_BREAK +case 88: +YY_USER_ACTION +{ + + return((int)(*yytext)); +} + YY_BREAK +case 89: +YY_USER_ACTION +{ + + return((int)(*yytext)); +} + YY_BREAK +case 90: +YY_USER_ACTION +{ + + return((int)(*yytext)); +} + YY_BREAK +case 91: +YY_USER_ACTION +{ + + return((int)(*yytext)); +} + YY_BREAK +case 92: +YY_USER_ACTION +{ + + return((int)(*yytext)); +} + YY_BREAK +case 93: +YY_USER_ACTION +{ + + return((int)(*yytext)); +} + YY_BREAK +case 94: +YY_USER_ACTION +{ + + return((int)(*yytext)); +} + YY_BREAK +case 95: +YY_USER_ACTION +{ + + return((int)(*yytext)); +} + YY_BREAK +case 96: +YY_USER_ACTION +{ + + return((int)(*yytext)); +} + YY_BREAK +case 97: +YY_USER_ACTION +{ + + return((int)(*yytext)); +} + YY_BREAK +case 98: +YY_USER_ACTION +{ + + return((int)(*yytext)); +} + YY_BREAK +case 99: +YY_USER_ACTION +BEGIN(comment); /* eat up comment */ + YY_BREAK +case 100: +YY_USER_ACTION + + YY_BREAK +case 101: +YY_USER_ACTION + + YY_BREAK +case 102: +YY_USER_ACTION + + YY_BREAK +case 103: +YY_USER_ACTION + + YY_BREAK +case 104: +YY_USER_ACTION +BEGIN(INITIAL); + YY_BREAK +case 105: +YY_USER_ACTION +/* eat up whitespace */ + YY_BREAK +case 106: +YY_USER_ACTION +{ + printf("Unrecognized character: %s\n", yytext); + + ut_error; + + return(0); +} + YY_BREAK +case 107: +YY_USER_ACTION +ECHO; + YY_BREAK +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(comment): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = yy_cp - yytext_ptr - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yy_hold_char; + + 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 - 1; /* copy prev. char, too */ + 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 singled characater, 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 = yy_c_buf_p - yytext_ptr; + + 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_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 = yy_c_buf_p - b->yy_ch_buf; + + b->yy_buf_size *= 2; + b->yy_ch_buf = (char *) + yy_flex_realloc( (void *) b->yy_ch_buf, + b->yy_buf_size ); + + 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 ); + } + + if ( yy_n_chars == 0 ) + { + if ( number_to_move - YY_MORE_ADJ == 1 ) + { + 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 begins at the second character in yy_ch_buf; the first + * character is the one which preceded it before reading in the latest + * buffer; it needs to be kept around in case it's a newline, so + * yy_get_previous_state() will have with '^' rules active. + */ + + yytext_ptr = &yy_current_buffer->yy_ch_buf[1]; + + 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; + + for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp ) + { + if ( *yy_cp ) + { + yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; + } + else + yy_current_state = yy_NUL_trans[yy_current_state]; + if ( yy_accept[yy_current_state] ) + { + yy_last_accepting_state = yy_current_state; + yy_last_accepting_cpos = yy_cp; + } + } + + 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; + + yy_current_state = yy_NUL_trans[yy_current_state]; + yy_is_jam = (yy_current_state == 0); + + if ( ! yy_is_jam ) + { + if ( yy_accept[yy_current_state] ) + { + yy_last_accepting_state = yy_current_state; + yy_last_accepting_cpos = yy_cp; + } + } + + return yy_is_jam ? 0 : yy_current_state; + } + + +#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 += dest - source; + yy_bp += dest - source; + 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" ); + } + + if ( yy_cp > yy_bp && yy_cp[-1] == '\n' ) + yy_cp[-2] = '\n'; + + *--yy_cp = (char) c; + + + /* Note: the formal parameter *must* be called "yy_bp" for this + * macro to now work correctly. + */ + YY_DO_BEFORE_ACTION; /* set up yytext again */ + } + + +#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 */ + yytext_ptr = yy_c_buf_p; + ++yy_c_buf_p; + + switch ( yy_get_next_buffer() ) + { + case EOB_ACT_END_OF_FILE: + { + if ( yywrap() ) + { + yy_c_buf_p = + yytext_ptr + YY_MORE_ADJ; + return EOF; + } + + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; + break; + + case EOB_ACT_LAST_MATCH: +#ifdef __cplusplus + YY_FATAL_ERROR( + "unexpected last match in yyinput()" ); +#else + YY_FATAL_ERROR( + "unexpected last match in input()" ); +#endif + } + } + } + + 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; + + 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()" ); + + 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 == yy_current_buffer ) + yy_current_buffer = (YY_BUFFER_STATE) 0; + + yy_flex_free( (void *) b->yy_ch_buf ); + yy_flex_free( (void *) b ); + } + + +#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 + { + b->yy_input_file = file; + + /* We put in the '\n' and start reading from [1] so that an + * initial match-at-newline will be true. + */ + + b->yy_ch_buf[0] = '\n'; + b->yy_n_chars = 1; + + /* 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[1] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[2] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[1]; + + b->yy_is_interactive = file ? isatty( fileno(file) ) : 0; + + b->yy_fill_buffer = 1; + + b->yy_buffer_status = YY_BUFFER_NEW; + } + + +#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 ) + { + int 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); + } + + +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]); + } + + +static int yy_top_state() + { + return yy_start_stack[yy_start_stack_ptr - 1]; + } + + +#ifdef YY_USE_PROTOS +static void yy_fatal_error( const char msg[] ) +#else +static void yy_fatal_error( msg ) +char msg[]; +#endif + { + (void) fprintf( stderr, "%s\n", msg ); + exit( 1 ); + } + + + +/* 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_MORE_ADJ; \ + 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, const char *s2, int n ) +#else +static void yy_flex_strncpy( s1, s2, n ) +char *s1; +const char *s2; +int n; +#endif + { + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; + } +#endif + + +#ifdef YY_USE_PROTOS +static void *yy_flex_alloc( unsigned int size ) +#else +static void *yy_flex_alloc( size ) +unsigned int size; +#endif + { + return (void *) malloc( size ); + } + +#ifdef YY_USE_PROTOS +static void *yy_flex_realloc( void *ptr, unsigned int size ) +#else +static void *yy_flex_realloc( ptr, size ) +void *ptr; +unsigned int size; +#endif + { + return (void *) realloc( 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 ); + } + diff --git a/innobase/pars/makefilewin b/innobase/pars/makefilewin new file mode 100644 index 00000000000..f183d89cbe2 --- /dev/null +++ b/innobase/pars/makefilewin @@ -0,0 +1,26 @@ +include ..\include\makefile.i + +pars.lib: pars0grm.obj lexyy.obj pars0pars.obj pars0opt.obj pars0sym.obj rename_and_copy + lib -out:..\libs\pars.lib pars0grm.obj lexyy.obj pars0pars.obj pars0opt.obj pars0sym.obj + +pars0grm.obj: pars0grm.y + bs pars0grm.y + $(CCOM) $(CFLW) -c pars0grm.c + +rename_and_copy: + ren pars0grm.h pars0grm.h + copy pars0grm.h ..\include + +lexyy.obj: pars0lex.l + fl pars0lex.l + $(CCOM) $(CFLN) -c lexyy.c + +pars0pars.obj: pars0pars.c + $(CCOM) $(CFL) -c pars0pars.c + +pars0opt.obj: pars0opt.c + $(CCOM) $(CFL) -c pars0opt.c + +pars0sym.obj: pars0sym.c + $(CCOM) $(CFL) -c pars0sym.c + diff --git a/innobase/pars/pars0grm.c b/innobase/pars/pars0grm.c new file mode 100644 index 00000000000..e7317d1f030 --- /dev/null +++ b/innobase/pars/pars0grm.c @@ -0,0 +1,1788 @@ + +/* A Bison parser, made from pars0grm.y + by GNU Bison version 1.25 + */ + +#define YYBISON 1 /* Identify Bison output. */ + +#define PARS_INT_LIT 258 +#define PARS_FLOAT_LIT 259 +#define PARS_STR_LIT 260 +#define PARS_NULL_LIT 261 +#define PARS_ID_TOKEN 262 +#define PARS_AND_TOKEN 263 +#define PARS_OR_TOKEN 264 +#define PARS_NOT_TOKEN 265 +#define PARS_GE_TOKEN 266 +#define PARS_LE_TOKEN 267 +#define PARS_NE_TOKEN 268 +#define PARS_PROCEDURE_TOKEN 269 +#define PARS_IN_TOKEN 270 +#define PARS_OUT_TOKEN 271 +#define PARS_INT_TOKEN 272 +#define PARS_INTEGER_TOKEN 273 +#define PARS_FLOAT_TOKEN 274 +#define PARS_CHAR_TOKEN 275 +#define PARS_IS_TOKEN 276 +#define PARS_BEGIN_TOKEN 277 +#define PARS_END_TOKEN 278 +#define PARS_IF_TOKEN 279 +#define PARS_THEN_TOKEN 280 +#define PARS_ELSE_TOKEN 281 +#define PARS_ELSIF_TOKEN 282 +#define PARS_LOOP_TOKEN 283 +#define PARS_WHILE_TOKEN 284 +#define PARS_RETURN_TOKEN 285 +#define PARS_SELECT_TOKEN 286 +#define PARS_SUM_TOKEN 287 +#define PARS_COUNT_TOKEN 288 +#define PARS_DISTINCT_TOKEN 289 +#define PARS_FROM_TOKEN 290 +#define PARS_WHERE_TOKEN 291 +#define PARS_FOR_TOKEN 292 +#define PARS_DDOT_TOKEN 293 +#define PARS_CONSISTENT_TOKEN 294 +#define PARS_READ_TOKEN 295 +#define PARS_ORDER_TOKEN 296 +#define PARS_BY_TOKEN 297 +#define PARS_ASC_TOKEN 298 +#define PARS_DESC_TOKEN 299 +#define PARS_INSERT_TOKEN 300 +#define PARS_INTO_TOKEN 301 +#define PARS_VALUES_TOKEN 302 +#define PARS_UPDATE_TOKEN 303 +#define PARS_SET_TOKEN 304 +#define PARS_DELETE_TOKEN 305 +#define PARS_CURRENT_TOKEN 306 +#define PARS_OF_TOKEN 307 +#define PARS_CREATE_TOKEN 308 +#define PARS_TABLE_TOKEN 309 +#define PARS_INDEX_TOKEN 310 +#define PARS_UNIQUE_TOKEN 311 +#define PARS_CLUSTERED_TOKEN 312 +#define PARS_DOES_NOT_FIT_IN_MEM_TOKEN 313 +#define PARS_ON_TOKEN 314 +#define PARS_ASSIGN_TOKEN 315 +#define PARS_DECLARE_TOKEN 316 +#define PARS_CURSOR_TOKEN 317 +#define PARS_SQL_TOKEN 318 +#define PARS_OPEN_TOKEN 319 +#define PARS_FETCH_TOKEN 320 +#define PARS_CLOSE_TOKEN 321 +#define PARS_NOTFOUND_TOKEN 322 +#define PARS_TO_CHAR_TOKEN 323 +#define PARS_TO_NUMBER_TOKEN 324 +#define PARS_TO_BINARY_TOKEN 325 +#define PARS_BINARY_TO_NUMBER_TOKEN 326 +#define PARS_SUBSTR_TOKEN 327 +#define PARS_REPLSTR_TOKEN 328 +#define PARS_CONCAT_TOKEN 329 +#define PARS_INSTR_TOKEN 330 +#define PARS_LENGTH_TOKEN 331 +#define PARS_SYSDATE_TOKEN 332 +#define PARS_PRINTF_TOKEN 333 +#define PARS_ASSERT_TOKEN 334 +#define PARS_RND_TOKEN 335 +#define PARS_RND_STR_TOKEN 336 +#define PARS_ROW_PRINTF_TOKEN 337 +#define PARS_COMMIT_TOKEN 338 +#define PARS_ROLLBACK_TOKEN 339 +#define PARS_WORK_TOKEN 340 +#define NEG 341 + +#line 9 "pars0grm.y" + +/* The value of the semantic attribute is a pointer to a query tree node +que_node_t */ +#define YYSTYPE que_node_t* +#define alloca mem_alloc + +#include <math.h> + +#include "univ.i" +#include "pars0pars.h" +#include "mem0mem.h" +#include "que0types.h" +#include "que0que.h" +#include "row0sel.h" + +/* #define __STDC__ */ + +int +yylex(void); +#ifndef YYSTYPE +#define YYSTYPE int +#endif +#include <stdio.h> + +#ifndef __cplusplus +#ifndef __STDC__ +#define const +#endif +#endif + + + +#define YYFINAL 311 +#define YYFLAG -32768 +#define YYNTBASE 102 + +#define YYTRANSLATE(x) ((unsigned)(x) <= 341 ? yytranslate[x] : 163) + +static const char yytranslate[] = { 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 94, 2, 2, 96, + 97, 91, 90, 99, 89, 2, 92, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 95, 87, + 86, 88, 98, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 100, 2, 101, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 93 +}; + +#if YYDEBUG != 0 +static const short yyprhs[] = { 0, + 0, 3, 5, 8, 11, 14, 17, 20, 23, 26, + 29, 32, 35, 38, 41, 44, 47, 50, 53, 56, + 59, 62, 65, 67, 70, 72, 77, 79, 81, 83, + 85, 87, 91, 95, 99, 103, 106, 110, 114, 118, + 122, 126, 130, 134, 138, 142, 145, 149, 153, 155, + 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, + 176, 178, 182, 189, 194, 196, 198, 200, 202, 206, + 207, 209, 213, 214, 216, 220, 222, 227, 233, 238, + 239, 241, 245, 247, 251, 253, 254, 257, 258, 261, + 262, 265, 266, 268, 270, 271, 276, 285, 289, 295, + 298, 302, 304, 308, 313, 318, 321, 324, 328, 331, + 334, 337, 341, 346, 348, 351, 352, 355, 357, 365, + 372, 383, 385, 388, 391, 396, 399, 401, 405, 406, + 408, 416, 418, 422, 423, 425, 426, 428, 439, 442, + 445, 447, 449, 453, 457, 458, 460, 464, 468, 469, + 471, 474, 481, 482, 484, 487 +}; + +static const short yyrhs[] = { 162, + 95, 0, 107, 0, 108, 95, 0, 139, 95, 0, + 140, 95, 0, 138, 95, 0, 141, 95, 0, 134, + 95, 0, 121, 95, 0, 123, 95, 0, 133, 95, + 0, 131, 95, 0, 132, 95, 0, 128, 95, 0, + 129, 95, 0, 142, 95, 0, 144, 95, 0, 143, + 95, 0, 153, 95, 0, 154, 95, 0, 148, 95, + 0, 152, 95, 0, 102, 0, 103, 102, 0, 7, + 0, 105, 96, 112, 97, 0, 3, 0, 4, 0, + 5, 0, 6, 0, 63, 0, 104, 90, 104, 0, + 104, 89, 104, 0, 104, 91, 104, 0, 104, 92, + 104, 0, 89, 104, 0, 96, 104, 97, 0, 104, + 86, 104, 0, 104, 87, 104, 0, 104, 88, 104, + 0, 104, 11, 104, 0, 104, 12, 104, 0, 104, + 13, 104, 0, 104, 8, 104, 0, 104, 9, 104, + 0, 10, 104, 0, 7, 94, 67, 0, 63, 94, + 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, + 72, 0, 74, 0, 75, 0, 76, 0, 77, 0, + 80, 0, 81, 0, 0, 98, 0, 106, 99, 98, + 0, 100, 7, 96, 106, 97, 101, 0, 109, 96, + 112, 97, 0, 73, 0, 78, 0, 79, 0, 7, + 0, 110, 99, 7, 0, 0, 7, 0, 111, 99, + 7, 0, 0, 104, 0, 112, 99, 104, 0, 104, + 0, 33, 96, 91, 97, 0, 33, 96, 34, 7, + 97, 0, 32, 96, 104, 97, 0, 0, 113, 0, + 114, 99, 113, 0, 91, 0, 114, 46, 111, 0, + 114, 0, 0, 36, 104, 0, 0, 37, 48, 0, + 0, 39, 40, 0, 0, 43, 0, 44, 0, 0, + 41, 42, 7, 119, 0, 31, 115, 35, 110, 116, + 117, 118, 120, 0, 45, 46, 7, 0, 122, 47, + 96, 112, 97, 0, 122, 121, 0, 7, 86, 104, + 0, 124, 0, 125, 99, 124, 0, 36, 51, 52, + 7, 0, 48, 7, 49, 125, 0, 127, 116, 0, + 127, 126, 0, 50, 35, 7, 0, 130, 116, 0, + 130, 126, 0, 82, 121, 0, 7, 60, 104, 0, + 27, 104, 25, 103, 0, 135, 0, 136, 135, 0, + 0, 26, 103, 0, 136, 0, 24, 104, 25, 103, + 137, 23, 24, 0, 29, 104, 28, 103, 23, 28, + 0, 37, 7, 15, 104, 38, 104, 28, 103, 23, + 28, 0, 30, 0, 64, 7, 0, 66, 7, 0, + 65, 7, 46, 111, 0, 7, 155, 0, 145, 0, + 146, 99, 145, 0, 0, 58, 0, 53, 54, 7, + 96, 146, 97, 147, 0, 7, 0, 149, 99, 7, + 0, 0, 56, 0, 0, 57, 0, 53, 150, 151, + 55, 7, 59, 7, 96, 149, 97, 0, 83, 85, + 0, 84, 85, 0, 17, 0, 20, 0, 7, 15, + 155, 0, 7, 16, 155, 0, 0, 156, 0, 157, + 99, 156, 0, 7, 155, 95, 0, 0, 158, 0, + 159, 158, 0, 61, 62, 7, 21, 121, 95, 0, + 0, 160, 0, 161, 160, 0, 14, 7, 96, 157, + 97, 21, 159, 161, 22, 103, 23, 0 +}; + +#endif + +#if YYDEBUG != 0 +static const short yyrline[] = { 0, + 125, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 150, 152, 156, 158, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 182, 186, 188, + 189, 190, 192, 193, 194, 195, 196, 197, 198, 201, + 203, 204, 207, 212, 217, 219, 220, 223, 225, 229, + 231, 232, 236, 238, 239, 242, 244, 249, 255, 261, + 263, 264, 268, 271, 273, 276, 278, 281, 283, 287, + 289, 293, 295, 296, 299, 301, 305, 315, 320, 323, + 327, 331, 333, 337, 343, 350, 355, 360, 366, 371, + 376, 381, 386, 392, 394, 398, 400, 402, 405, 412, + 418, 426, 430, 436, 442, 447, 451, 453, 457, 459, + 464, 470, 472, 476, 478, 481, 483, 486, 494, 499, + 504, 506, 509, 513, 518, 520, 521, 525, 530, 532, + 533, 536, 542, 544, 545, 548 +}; +#endif + + +#if YYDEBUG != 0 || defined (YYERROR_VERBOSE) + +static const char * const yytname[] = { "$","error","$undefined.","PARS_INT_LIT", +"PARS_FLOAT_LIT","PARS_STR_LIT","PARS_NULL_LIT","PARS_ID_TOKEN","PARS_AND_TOKEN", +"PARS_OR_TOKEN","PARS_NOT_TOKEN","PARS_GE_TOKEN","PARS_LE_TOKEN","PARS_NE_TOKEN", +"PARS_PROCEDURE_TOKEN","PARS_IN_TOKEN","PARS_OUT_TOKEN","PARS_INT_TOKEN","PARS_INTEGER_TOKEN", +"PARS_FLOAT_TOKEN","PARS_CHAR_TOKEN","PARS_IS_TOKEN","PARS_BEGIN_TOKEN","PARS_END_TOKEN", +"PARS_IF_TOKEN","PARS_THEN_TOKEN","PARS_ELSE_TOKEN","PARS_ELSIF_TOKEN","PARS_LOOP_TOKEN", +"PARS_WHILE_TOKEN","PARS_RETURN_TOKEN","PARS_SELECT_TOKEN","PARS_SUM_TOKEN", +"PARS_COUNT_TOKEN","PARS_DISTINCT_TOKEN","PARS_FROM_TOKEN","PARS_WHERE_TOKEN", +"PARS_FOR_TOKEN","PARS_DDOT_TOKEN","PARS_CONSISTENT_TOKEN","PARS_READ_TOKEN", +"PARS_ORDER_TOKEN","PARS_BY_TOKEN","PARS_ASC_TOKEN","PARS_DESC_TOKEN","PARS_INSERT_TOKEN", +"PARS_INTO_TOKEN","PARS_VALUES_TOKEN","PARS_UPDATE_TOKEN","PARS_SET_TOKEN","PARS_DELETE_TOKEN", +"PARS_CURRENT_TOKEN","PARS_OF_TOKEN","PARS_CREATE_TOKEN","PARS_TABLE_TOKEN", +"PARS_INDEX_TOKEN","PARS_UNIQUE_TOKEN","PARS_CLUSTERED_TOKEN","PARS_DOES_NOT_FIT_IN_MEM_TOKEN", +"PARS_ON_TOKEN","PARS_ASSIGN_TOKEN","PARS_DECLARE_TOKEN","PARS_CURSOR_TOKEN", +"PARS_SQL_TOKEN","PARS_OPEN_TOKEN","PARS_FETCH_TOKEN","PARS_CLOSE_TOKEN","PARS_NOTFOUND_TOKEN", +"PARS_TO_CHAR_TOKEN","PARS_TO_NUMBER_TOKEN","PARS_TO_BINARY_TOKEN","PARS_BINARY_TO_NUMBER_TOKEN", +"PARS_SUBSTR_TOKEN","PARS_REPLSTR_TOKEN","PARS_CONCAT_TOKEN","PARS_INSTR_TOKEN", +"PARS_LENGTH_TOKEN","PARS_SYSDATE_TOKEN","PARS_PRINTF_TOKEN","PARS_ASSERT_TOKEN", +"PARS_RND_TOKEN","PARS_RND_STR_TOKEN","PARS_ROW_PRINTF_TOKEN","PARS_COMMIT_TOKEN", +"PARS_ROLLBACK_TOKEN","PARS_WORK_TOKEN","'='","'<'","'>'","'-'","'+'","'*'", +"'/'","NEG","'%'","';'","'('","')'","'?'","','","'{'","'}'","statement","statement_list", +"exp","function_name","question_mark_list","stored_procedure_call","predefined_procedure_call", +"predefined_procedure_name","table_list","variable_list","exp_list","select_item", +"select_item_list","select_list","search_condition","for_update_clause","consistent_read_clause", +"order_direction","order_by_clause","select_statement","insert_statement_start", +"insert_statement","column_assignment","column_assignment_list","cursor_positioned", +"update_statement_start","update_statement_searched","update_statement_positioned", +"delete_statement_start","delete_statement_searched","delete_statement_positioned", +"row_printf_statement","assignment_statement","elsif_element","elsif_list","else_part", +"if_statement","while_statement","for_statement","return_statement","open_cursor_statement", +"close_cursor_statement","fetch_statement","column_def","column_def_list","not_fit_in_memory", +"create_table","column_list","unique_def","clustered_def","create_index","commit_statement", +"rollback_statement","type_name","parameter_declaration","parameter_declaration_list", +"variable_declaration","variable_declaration_list","cursor_declaration","declaration_list", +"procedure_definition", NULL +}; +#endif + +static const short yyr1[] = { 0, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 103, 103, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, + 106, 106, 107, 108, 109, 109, 109, 110, 110, 111, + 111, 111, 112, 112, 112, 113, 113, 113, 113, 114, + 114, 114, 115, 115, 115, 116, 116, 117, 117, 118, + 118, 119, 119, 119, 120, 120, 121, 122, 123, 123, + 124, 125, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 136, 137, 137, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 146, 147, 147, + 148, 149, 149, 150, 150, 151, 151, 152, 153, 154, + 155, 155, 156, 156, 157, 157, 157, 158, 159, 159, + 159, 160, 161, 161, 161, 162 +}; + +static const short yyr2[] = { 0, + 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 1, 2, 1, 4, 1, 1, 1, 1, + 1, 3, 3, 3, 3, 2, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 2, 3, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 3, 6, 4, 1, 1, 1, 1, 3, 0, + 1, 3, 0, 1, 3, 1, 4, 5, 4, 0, + 1, 3, 1, 3, 1, 0, 2, 0, 2, 0, + 2, 0, 1, 1, 0, 4, 8, 3, 5, 2, + 3, 1, 3, 4, 4, 2, 2, 3, 2, 2, + 2, 3, 4, 1, 2, 0, 2, 1, 7, 6, + 10, 1, 2, 2, 4, 2, 1, 3, 0, 1, + 7, 1, 3, 0, 1, 0, 1, 10, 2, 2, + 1, 1, 3, 3, 0, 1, 3, 3, 0, 1, + 2, 6, 0, 1, 2, 11 +}; + +static const short yydefact[] = { 0, + 0, 0, 0, 0, 122, 80, 0, 0, 0, 0, + 134, 0, 0, 0, 65, 66, 67, 0, 0, 0, + 0, 2, 0, 0, 0, 0, 0, 86, 0, 0, + 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, + 28, 29, 30, 25, 0, 31, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 0, 0, 0, + 0, 0, 0, 0, 83, 76, 81, 85, 0, 0, + 0, 0, 0, 0, 135, 136, 123, 0, 124, 111, + 139, 140, 0, 3, 73, 9, 0, 100, 10, 0, + 106, 107, 14, 15, 109, 110, 12, 13, 11, 8, + 6, 4, 5, 7, 16, 18, 17, 21, 22, 19, + 20, 1, 112, 145, 0, 46, 0, 36, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 73, 0, 0, 0, 70, 0, 0, 0, + 98, 0, 108, 0, 137, 0, 70, 60, 74, 0, + 73, 0, 87, 0, 146, 0, 47, 48, 37, 44, + 45, 41, 42, 43, 23, 116, 38, 39, 40, 33, + 32, 34, 35, 0, 0, 0, 0, 0, 71, 84, + 82, 68, 86, 0, 0, 102, 105, 0, 0, 125, + 61, 0, 64, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 24, 114, 118, 0, 26, 0, 79, 0, + 77, 0, 0, 0, 88, 0, 0, 0, 0, 127, + 0, 0, 0, 0, 75, 99, 104, 141, 142, 143, + 144, 149, 147, 117, 0, 115, 0, 120, 78, 72, + 69, 0, 90, 0, 101, 103, 126, 129, 0, 0, + 63, 62, 0, 150, 153, 0, 119, 89, 0, 95, + 0, 130, 131, 128, 0, 0, 0, 151, 154, 0, + 113, 91, 0, 97, 0, 0, 148, 0, 0, 155, + 0, 0, 132, 0, 0, 0, 92, 121, 138, 0, + 0, 156, 93, 94, 96, 133, 0, 152, 0, 0, + 0 +}; + +static const short yydefgoto[] = { 175, + 176, 159, 71, 202, 22, 23, 24, 193, 190, 160, + 77, 78, 79, 101, 253, 270, 305, 284, 25, 26, + 27, 196, 197, 102, 28, 29, 30, 31, 32, 33, + 34, 35, 214, 215, 216, 36, 37, 38, 39, 40, + 41, 42, 230, 231, 273, 43, 294, 86, 156, 44, + 45, 46, 240, 165, 166, 264, 265, 279, 280, 47 +}; + +static const short yypact[] = { 443, + -36, 39, 479, 479,-32768, 7, 45, 10, 54, 28, + -28, 57, 59, 66,-32768,-32768,-32768, 49, 12, 15, + 88,-32768, 16, 6, 21, 3, 22, 84, 26, 27, + 84, 29, 30, 31, 33, 47, 48, 51, 53, 56, + 58, 60, 62, 64, 65, 67, 68, 479, 71,-32768, +-32768,-32768,-32768, 70, 479, 75,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 479, 479, 293, + 74, 502, 76, 77,-32768, 356,-32768, -25, 117, 108, + 147, 107, 154, 164,-32768, 122,-32768, 128,-32768,-32768, +-32768,-32768, 87,-32768, 479,-32768, 90,-32768,-32768, 38, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, 356, 177, 120, 550, 131, 176, 234, 479, + 479, 479, 479, 479, 443, 479, 479, 479, 479, 479, + 479, 479, 479, 443, 479, -26, 188, 187, 193, 479, +-32768, 195,-32768, 109,-32768, 152, 188, 110, 356, -70, + 479, 157, 356, 20,-32768, -67,-32768,-32768,-32768, 550, + 550, 2, 2, 356,-32768, 151, 2, 2, 2, -6, + -6, 176, 176, -66, 263, 490, 199, 113,-32768, 114, +-32768,-32768, -30, 520, 126,-32768, 115, 211, 214, 114, +-32768, -48,-32768, 479, -44, 216, 5, 5, 206, 177, + 443, 479,-32768,-32768, 201, 208,-32768, 204,-32768, 139, +-32768, 230, 479, 231, 202, 479, 479, 195, 5,-32768, + -40, 181, 140, 150, 356,-32768,-32768,-32768,-32768,-32768, +-32768, 242,-32768, 443, 527,-32768, 228,-32768,-32768,-32768, +-32768, 205, 215, 558, 356,-32768,-32768, 207, 211, 253, +-32768,-32768, 5,-32768, 11, 443,-32768,-32768, 226, 232, + 443,-32768,-32768,-32768, 173, 179, 209,-32768,-32768, -3, + 443,-32768, 233,-32768, 325, 265,-32768, 271, 443,-32768, + 272, 252,-32768, -37, 261, 387, 61,-32768,-32768, 281, + 49,-32768,-32768,-32768,-32768,-32768, 194,-32768, 290, 291, +-32768 +}; + +static const short yypgoto[] = { 0, + -121, -1,-32768,-32768,-32768,-32768,-32768,-32768, 138, -123, + 149,-32768,-32768, -27,-32768,-32768,-32768,-32768, -17,-32768, +-32768, 79,-32768, 267,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, 94,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, 40,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, -192, 93,-32768, 50,-32768, 32,-32768,-32768 +}; + + +#define YYLAST 650 + + +static const short yytable[] = { 309, + 90, 70, 72, 105, 76, 223, 134, 187, 98, 50, + 51, 52, 53, 54, 134, 241, 55, 263, 289, 184, + 147, 238, 185, 48, 239, 84, 203, 85, 204, 209, + 217, 210, 204, 6, 207, 208, 257, 205, 73, 74, + 50, 51, 52, 53, 54, 49, 123, 55, 233, 97, + 234, 80, 236, 126, 204, 81, 258, 277, 259, 299, + 82, 300, 83, 87, 188, 88, 128, 129, 224, 56, + 276, 277, 89, 148, 57, 58, 59, 60, 61, 6, + 62, 63, 64, 65, 141, 142, 66, 67, 162, 244, + 139, 140, 141, 142, 93, 68, 91, 75, 163, 92, + 56, 95, 69, 303, 304, 57, 58, 59, 60, 61, + 94, 62, 63, 64, 65, 96, 99, 66, 67, 100, + 103, 104, 150, 107, 108, 109, 68, 110, 170, 171, + 172, 173, 174, 69, 177, 178, 179, 180, 181, 182, + 183, 111, 112, 186, 281, 113, 76, 114, 194, 285, + 115, 149, 116, 151, 117, 152, 118, 1, 119, 120, + 153, 121, 122, 125, 2, 225, 124, 296, 127, 143, + 154, 145, 146, 157, 3, 213, 211, 212, 155, 4, + 5, 6, 158, 164, 213, 161, 167, 7, 134, 50, + 51, 52, 53, 54, 189, 8, 55, 168, 9, 192, + 10, 195, 235, 11, 198, 220, 199, 201, 206, 221, + 245, 227, 222, 228, 12, 13, 14, 229, 73, 74, + 232, 163, 237, 15, 254, 255, 242, 212, 16, 17, + 247, 248, 18, 19, 20, 249, 250, 251, 252, 260, + 261, 130, 131, 213, 132, 133, 134, 262, 263, 56, + 21, 267, 268, 269, 57, 58, 59, 60, 61, 275, + 62, 63, 64, 65, 272, 282, 66, 67, 286, 1, + 288, 293, 283, 287, 291, 68, 2, 295, 297, 298, + 213, 301, 69, 307, 213, 218, 3, 306, 308, 310, + 311, 4, 5, 6, 200, 213, 191, 106, 274, 7, + 130, 131, 243, 132, 133, 134, 256, 8, 246, 0, + 9, 290, 10, 0, 278, 11, 0, 135, 0, 136, + 137, 138, 139, 140, 141, 142, 12, 13, 14, 0, + 169, 1, 0, 0, 0, 15, 0, 0, 2, 0, + 16, 17, 0, 0, 18, 19, 20, 292, 3, 0, + 0, 0, 0, 4, 5, 6, 0, 0, 0, 0, + 0, 7, 21, 130, 131, 0, 132, 133, 134, 8, + 0, 0, 9, 0, 10, 0, 0, 11, 136, 137, + 138, 139, 140, 141, 142, 0, 0, 0, 12, 13, + 14, 0, 0, 1, 0, 0, 0, 15, 0, 0, + 2, 0, 16, 17, 0, 0, 18, 19, 20, 302, + 3, 0, 0, 0, 0, 4, 5, 6, 0, 0, + 0, 0, 0, 7, 21, 0, 0, 0, 0, 0, + 0, 8, 0, 0, 9, 0, 10, 0, 0, 11, + 0, 136, 137, 138, 139, 140, 141, 142, 0, 1, + 12, 13, 14, 0, 0, 0, 2, 0, 0, 15, + 0, 0, 0, 0, 16, 17, 3, 0, 18, 19, + 20, 4, 5, 6, 0, 0, 0, 0, 0, 7, + 0, 50, 51, 52, 53, 54, 21, 8, 55, 0, + 9, 0, 10, 0, 0, 11, 0, 130, 131, 0, + 132, 133, 134, 0, 0, 0, 12, 13, 14, 130, + 131, 0, 132, 133, 134, 15, 0, 0, 0, 0, + 16, 17, 0, 0, 18, 19, 20, 130, 131, 144, + 132, 133, 134, 0, 130, 131, 0, 132, 133, 134, + 0, 56, 21, 0, 0, 0, 57, 58, 59, 60, + 61, 266, 62, 63, 64, 65, 0, 226, 66, 67, + 132, 133, 134, 0, 0, 130, 131, 68, 132, 133, + 134, 0, 0, 0, 69, 136, 137, 138, 139, 140, + 141, 142, 0, 0, 0, 271, 219, 136, 137, 138, + 139, 140, 141, 142, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 136, 137, 138, 139, 140, + 141, 142, 136, 137, 138, 139, 140, 141, 142, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 136, 137, 138, 139, 140, + 141, 142, 0, 136, 137, 138, 139, 140, 141, 142 +}; + +static const short yycheck[] = { 0, + 18, 3, 4, 31, 6, 36, 13, 34, 26, 3, + 4, 5, 6, 7, 13, 208, 10, 7, 22, 143, + 46, 17, 144, 60, 20, 54, 97, 56, 99, 97, + 97, 99, 99, 31, 15, 16, 229, 161, 32, 33, + 3, 4, 5, 6, 7, 7, 48, 10, 97, 47, + 99, 7, 97, 55, 99, 46, 97, 61, 99, 97, + 7, 99, 35, 7, 91, 7, 68, 69, 99, 63, + 263, 61, 7, 99, 68, 69, 70, 71, 72, 31, + 74, 75, 76, 77, 91, 92, 80, 81, 51, 211, + 89, 90, 91, 92, 7, 89, 85, 91, 100, 85, + 63, 96, 96, 43, 44, 68, 69, 70, 71, 72, + 95, 74, 75, 76, 77, 95, 95, 80, 81, 36, + 95, 95, 15, 95, 95, 95, 89, 95, 130, 131, + 132, 133, 134, 96, 136, 137, 138, 139, 140, 141, + 142, 95, 95, 145, 266, 95, 148, 95, 150, 271, + 95, 35, 95, 7, 95, 49, 95, 7, 95, 95, + 7, 95, 95, 94, 14, 193, 96, 289, 94, 96, + 7, 96, 96, 46, 24, 176, 26, 27, 57, 29, + 30, 31, 96, 7, 185, 96, 67, 37, 13, 3, + 4, 5, 6, 7, 7, 45, 10, 67, 48, 7, + 50, 7, 204, 53, 96, 7, 55, 98, 52, 97, + 212, 86, 99, 99, 64, 65, 66, 7, 32, 33, + 7, 223, 7, 73, 226, 227, 21, 27, 78, 79, + 23, 28, 82, 83, 84, 97, 7, 7, 37, 59, + 101, 8, 9, 244, 11, 12, 13, 98, 7, 63, + 100, 24, 48, 39, 68, 69, 70, 71, 72, 7, + 74, 75, 76, 77, 58, 40, 80, 81, 96, 7, + 62, 7, 41, 95, 42, 89, 14, 7, 7, 28, + 281, 21, 96, 301, 285, 23, 24, 7, 95, 0, + 0, 29, 30, 31, 157, 296, 148, 31, 259, 37, + 8, 9, 210, 11, 12, 13, 228, 45, 215, -1, + 48, 280, 50, -1, 265, 53, -1, 25, -1, 86, + 87, 88, 89, 90, 91, 92, 64, 65, 66, -1, + 97, 7, -1, -1, -1, 73, -1, -1, 14, -1, + 78, 79, -1, -1, 82, 83, 84, 23, 24, -1, + -1, -1, -1, 29, 30, 31, -1, -1, -1, -1, + -1, 37, 100, 8, 9, -1, 11, 12, 13, 45, + -1, -1, 48, -1, 50, -1, -1, 53, 86, 87, + 88, 89, 90, 91, 92, -1, -1, -1, 64, 65, + 66, -1, -1, 7, -1, -1, -1, 73, -1, -1, + 14, -1, 78, 79, -1, -1, 82, 83, 84, 23, + 24, -1, -1, -1, -1, 29, 30, 31, -1, -1, + -1, -1, -1, 37, 100, -1, -1, -1, -1, -1, + -1, 45, -1, -1, 48, -1, 50, -1, -1, 53, + -1, 86, 87, 88, 89, 90, 91, 92, -1, 7, + 64, 65, 66, -1, -1, -1, 14, -1, -1, 73, + -1, -1, -1, -1, 78, 79, 24, -1, 82, 83, + 84, 29, 30, 31, -1, -1, -1, -1, -1, 37, + -1, 3, 4, 5, 6, 7, 100, 45, 10, -1, + 48, -1, 50, -1, -1, 53, -1, 8, 9, -1, + 11, 12, 13, -1, -1, -1, 64, 65, 66, 8, + 9, -1, 11, 12, 13, 73, -1, -1, -1, -1, + 78, 79, -1, -1, 82, 83, 84, 8, 9, 28, + 11, 12, 13, -1, 8, 9, -1, 11, 12, 13, + -1, 63, 100, -1, -1, -1, 68, 69, 70, 71, + 72, 25, 74, 75, 76, 77, -1, 38, 80, 81, + 11, 12, 13, -1, -1, 8, 9, 89, 11, 12, + 13, -1, -1, -1, 96, 86, 87, 88, 89, 90, + 91, 92, -1, -1, -1, 28, 97, 86, 87, 88, + 89, 90, 91, 92, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 86, 87, 88, 89, 90, + 91, 92, 86, 87, 88, 89, 90, 91, 92, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 86, 87, 88, 89, 90, + 91, 92, -1, 86, 87, 88, 89, 90, 91, 92 +}; +/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ +#line 3 "bison.simple" + +/* Skeleton output parser for bison, + Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +#ifndef alloca +#ifdef __GNUC__ +#define alloca __builtin_alloca +#else /* not GNU C. */ +#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) +#include <alloca.h> +#else /* not sparc */ +#if defined (MSDOS) && !defined (__TURBOC__) +#include <malloc.h> +#else /* not MSDOS, or __TURBOC__ */ +#if defined(_AIX) +#include <malloc.h> + #pragma alloca +#else /* not MSDOS, __TURBOC__, or _AIX */ +#ifdef __hpux +#ifdef __cplusplus +extern "C" { +void *alloca (unsigned int); +}; +#else /* not __cplusplus */ +void *alloca (); +#endif /* not __cplusplus */ +#endif /* __hpux */ +#endif /* not _AIX */ +#endif /* not MSDOS, or __TURBOC__ */ +#endif /* not sparc. */ +#endif /* not GNU C. */ +#endif /* alloca not defined. */ + +/* This is the parser code that is written into each bison parser + when the %semantic_parser declaration is not specified in the grammar. + It was written by Richard Stallman by simplifying the hairy parser + used when %semantic_parser is specified. */ + +/* Note: there must be only one dollar sign in this file. + It is replaced by the list of actions, each action + as one case of the switch. */ + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY -2 +#define YYEOF 0 +#define YYACCEPT return(0) +#define YYABORT return(1) +#define YYERROR goto yyerrlab1 +/* Like YYERROR except do call yyerror. + This remains here temporarily to ease the + transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ +#define YYFAIL goto yyerrlab +#define YYRECOVERING() (!!yyerrstatus) +#define YYBACKUP(token, value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { yychar = (token), yylval = (value); \ + yychar1 = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { yyerror ("syntax error: cannot back up"); YYERROR; } \ +while (0) + +#define YYTERROR 1 +#define YYERRCODE 256 + +#ifndef YYPURE +#define YYLEX yylex() +#endif + +#ifdef YYPURE +#ifdef YYLSP_NEEDED +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) +#else +#define YYLEX yylex(&yylval, &yylloc) +#endif +#else /* not YYLSP_NEEDED */ +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, YYLEX_PARAM) +#else +#define YYLEX yylex(&yylval) +#endif +#endif /* not YYLSP_NEEDED */ +#endif + +/* If nonreentrant, generate the variables here */ + +#ifndef YYPURE + +int yychar; /* the lookahead symbol */ +YYSTYPE yylval; /* the semantic value of the */ + /* lookahead symbol */ + +#ifdef YYLSP_NEEDED +YYLTYPE yylloc; /* location data for the lookahead */ + /* symbol */ +#endif + +int yynerrs; /* number of parse errors so far */ +#endif /* not YYPURE */ + +#if YYDEBUG != 0 +int yydebug; /* nonzero means print parse trace */ +/* Since this is uninitialized, it does not stop multiple parsers + from coexisting. */ +#endif + +/* YYINITDEPTH indicates the initial size of the parser's stacks */ + +#ifndef YYINITDEPTH +#define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH is the maximum size the stacks can grow to + (effective only if the built-in stack extension method is used). */ + +#if YYMAXDEPTH == 0 +#undef YYMAXDEPTH +#endif + +#ifndef YYMAXDEPTH +#define YYMAXDEPTH 10000 +#endif + +/* Prevent warning if -Wstrict-prototypes. */ +#ifdef __GNUC__ +int yyparse (void); +#endif + +#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ +#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) +#else /* not GNU C or C++ */ +#ifndef __cplusplus + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_memcpy (to, from, count) + char *to; + char *from; + int count; +{ + register char *f = from; + register char *t = to; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#else /* __cplusplus */ + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_memcpy (char *to, char *from, int count) +{ + register char *f = from; + register char *t = to; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#endif +#endif + +#line 196 "bison.simple" + +/* The user can define YYPARSE_PARAM as the name of an argument to be passed + into yyparse. The argument should have type void *. + It should actually point to an object. + Grammar actions can access the variable by casting it + to the proper pointer type. */ + +#ifdef YYPARSE_PARAM +#ifdef __cplusplus +#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM +#define YYPARSE_PARAM_DECL +#else /* not __cplusplus */ +#define YYPARSE_PARAM_ARG YYPARSE_PARAM +#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; +#endif /* not __cplusplus */ +#else /* not YYPARSE_PARAM */ +#define YYPARSE_PARAM_ARG +#define YYPARSE_PARAM_DECL +#endif /* not YYPARSE_PARAM */ + +int +yyparse(YYPARSE_PARAM_ARG) + YYPARSE_PARAM_DECL +{ + register int yystate; + register int yyn; + register short *yyssp; + register YYSTYPE *yyvsp; + int yyerrstatus; /* number of tokens to shift before error messages enabled */ + int yychar1 = 0; /* lookahead token as an internal (translated) token number */ + + short yyssa[YYINITDEPTH]; /* the state stack */ + YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ + + short *yyss = yyssa; /* refer to the stacks thru separate pointers */ + YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ + +#ifdef YYLSP_NEEDED + YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp; + +#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) +#else +#define YYPOPSTACK (yyvsp--, yyssp--) +#endif + + int yystacksize = YYINITDEPTH; + +#ifdef YYPURE + int yychar; + YYSTYPE yylval; + int yynerrs; +#ifdef YYLSP_NEEDED + YYLTYPE yylloc; +#endif +#endif + + YYSTYPE yyval; /* the variable used to return */ + /* semantic values from the action */ + /* routines */ + + int yylen; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Starting parse\n"); +#endif + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss - 1; + yyvsp = yyvs; +#ifdef YYLSP_NEEDED + yylsp = yyls; +#endif + +/* Push a new state, which is found in yystate . */ +/* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. */ +yynewstate: + + *++yyssp = yystate; + + if (yyssp >= yyss + yystacksize - 1) + { + /* Give user a chance to reallocate the stack */ + /* Use copies of these so that the &'s don't force the real ones into memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; +#ifdef YYLSP_NEEDED + YYLTYPE *yyls1 = yyls; +#endif + + /* Get the current used size of the three stacks, in elements. */ + int size = yyssp - yyss + 1; + +#ifdef yyoverflow + /* Each stack pointer address is followed by the size of + the data in use in that stack, in bytes. */ +#ifdef YYLSP_NEEDED + /* This used to be a conditional around just the two extra args, + but that might be undefined if yyoverflow is a macro. */ + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yyls1, size * sizeof (*yylsp), + &yystacksize); +#else + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yystacksize); +#endif + + yyss = yyss1; yyvs = yyvs1; +#ifdef YYLSP_NEEDED + yyls = yyls1; +#endif +#else /* no yyoverflow */ + /* Extend the stack our own way. */ + if (yystacksize >= YYMAXDEPTH) + { + yyerror("parser stack overflow"); + return 2; + } + yystacksize *= 2; + if (yystacksize > YYMAXDEPTH) + yystacksize = YYMAXDEPTH; + yyss = (short *) alloca (yystacksize * sizeof (*yyssp)); + __yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp)); + yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp)); + __yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp)); +#ifdef YYLSP_NEEDED + yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp)); + __yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp)); +#endif +#endif /* no yyoverflow */ + + yyssp = yyss + size - 1; + yyvsp = yyvs + size - 1; +#ifdef YYLSP_NEEDED + yylsp = yyls + size - 1; +#endif + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Stack size increased to %d\n", yystacksize); +#endif + + if (yyssp >= yyss + yystacksize - 1) + YYABORT; + } + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Entering state %d\n", yystate); +#endif + + goto yybackup; + yybackup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* yychar is either YYEMPTY or YYEOF + or a valid token in external form. */ + + if (yychar == YYEMPTY) + { +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Reading a token: "); +#endif + yychar = YYLEX; + } + + /* Convert token to internal form (in yychar1) for indexing tables with */ + + if (yychar <= 0) /* This means end of input. */ + { + yychar1 = 0; + yychar = YYEOF; /* Don't call YYLEX any more */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Now at end of input.\n"); +#endif + } + else + { + yychar1 = YYTRANSLATE(yychar); + +#if YYDEBUG != 0 + if (yydebug) + { + fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); + /* Give the individual parser a way to print the precise meaning + of a token, for further debugging info. */ +#ifdef YYPRINT + YYPRINT (stderr, yychar, yylval); +#endif + fprintf (stderr, ")\n"); + } +#endif + } + + yyn += yychar1; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) + goto yydefault; + + yyn = yytable[yyn]; + + /* yyn is what to do for this token type in this state. + Negative => reduce, -yyn is rule number. + Positive => shift, yyn is new state. + New state is final state => don't bother to shift, + just return success. + 0, or most negative number => error. */ + + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrlab; + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the lookahead token. */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); +#endif + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif + + /* count tokens shifted since error; after three, turn off error status. */ + if (yyerrstatus) yyerrstatus--; + + yystate = yyn; + goto yynewstate; + +/* Do the default action for the current state. */ +yydefault: + + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + +/* Do a reduction. yyn is the number of a rule to reduce with. */ +yyreduce: + yylen = yyr2[yyn]; + if (yylen > 0) + yyval = yyvsp[1-yylen]; /* implement default value of the action */ + +#if YYDEBUG != 0 + if (yydebug) + { + int i; + + fprintf (stderr, "Reducing via rule %d (line %d), ", + yyn, yyrline[yyn]); + + /* Print the symbols being reduced, and their result. */ + for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) + fprintf (stderr, "%s ", yytname[yyrhs[i]]); + fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); + } +#endif + + + switch (yyn) { + +case 23: +#line 151 "pars0grm.y" +{ yyval = que_node_list_add_last(NULL, yyvsp[0]); ; + break;} +case 24: +#line 153 "pars0grm.y" +{ yyval = que_node_list_add_last(yyvsp[-1], yyvsp[0]); ; + break;} +case 25: +#line 157 "pars0grm.y" +{ yyval = yyvsp[0];; + break;} +case 26: +#line 159 "pars0grm.y" +{ yyval = pars_func(yyvsp[-3], yyvsp[-1]); ; + break;} +case 27: +#line 160 "pars0grm.y" +{ yyval = yyvsp[0];; + break;} +case 28: +#line 161 "pars0grm.y" +{ yyval = yyvsp[0];; + break;} +case 29: +#line 162 "pars0grm.y" +{ yyval = yyvsp[0];; + break;} +case 30: +#line 163 "pars0grm.y" +{ yyval = yyvsp[0];; + break;} +case 31: +#line 164 "pars0grm.y" +{ yyval = yyvsp[0];; + break;} +case 32: +#line 165 "pars0grm.y" +{ yyval = pars_op('+', yyvsp[-2], yyvsp[0]); ; + break;} +case 33: +#line 166 "pars0grm.y" +{ yyval = pars_op('-', yyvsp[-2], yyvsp[0]); ; + break;} +case 34: +#line 167 "pars0grm.y" +{ yyval = pars_op('*', yyvsp[-2], yyvsp[0]); ; + break;} +case 35: +#line 168 "pars0grm.y" +{ yyval = pars_op('/', yyvsp[-2], yyvsp[0]); ; + break;} +case 36: +#line 169 "pars0grm.y" +{ yyval = pars_op('-', yyvsp[0], NULL); ; + break;} +case 37: +#line 170 "pars0grm.y" +{ yyval = yyvsp[-1]; ; + break;} +case 38: +#line 171 "pars0grm.y" +{ yyval = pars_op('=', yyvsp[-2], yyvsp[0]); ; + break;} +case 39: +#line 172 "pars0grm.y" +{ yyval = pars_op('<', yyvsp[-2], yyvsp[0]); ; + break;} +case 40: +#line 173 "pars0grm.y" +{ yyval = pars_op('>', yyvsp[-2], yyvsp[0]); ; + break;} +case 41: +#line 174 "pars0grm.y" +{ yyval = pars_op(PARS_GE_TOKEN, yyvsp[-2], yyvsp[0]); ; + break;} +case 42: +#line 175 "pars0grm.y" +{ yyval = pars_op(PARS_LE_TOKEN, yyvsp[-2], yyvsp[0]); ; + break;} +case 43: +#line 176 "pars0grm.y" +{ yyval = pars_op(PARS_NE_TOKEN, yyvsp[-2], yyvsp[0]); ; + break;} +case 44: +#line 177 "pars0grm.y" +{ yyval = pars_op(PARS_AND_TOKEN, yyvsp[-2], yyvsp[0]); ; + break;} +case 45: +#line 178 "pars0grm.y" +{ yyval = pars_op(PARS_OR_TOKEN, yyvsp[-2], yyvsp[0]); ; + break;} +case 46: +#line 179 "pars0grm.y" +{ yyval = pars_op(PARS_NOT_TOKEN, yyvsp[0], NULL); ; + break;} +case 47: +#line 181 "pars0grm.y" +{ yyval = pars_op(PARS_NOTFOUND_TOKEN, yyvsp[-2], NULL); ; + break;} +case 48: +#line 183 "pars0grm.y" +{ yyval = pars_op(PARS_NOTFOUND_TOKEN, yyvsp[-2], NULL); ; + break;} +case 49: +#line 187 "pars0grm.y" +{ yyval = &pars_to_char_token; ; + break;} +case 50: +#line 188 "pars0grm.y" +{ yyval = &pars_to_number_token; ; + break;} +case 51: +#line 189 "pars0grm.y" +{ yyval = &pars_to_binary_token; ; + break;} +case 52: +#line 191 "pars0grm.y" +{ yyval = &pars_binary_to_number_token; ; + break;} +case 53: +#line 192 "pars0grm.y" +{ yyval = &pars_substr_token; ; + break;} +case 54: +#line 193 "pars0grm.y" +{ yyval = &pars_concat_token; ; + break;} +case 55: +#line 194 "pars0grm.y" +{ yyval = &pars_instr_token; ; + break;} +case 56: +#line 195 "pars0grm.y" +{ yyval = &pars_length_token; ; + break;} +case 57: +#line 196 "pars0grm.y" +{ yyval = &pars_sysdate_token; ; + break;} +case 58: +#line 197 "pars0grm.y" +{ yyval = &pars_rnd_token; ; + break;} +case 59: +#line 198 "pars0grm.y" +{ yyval = &pars_rnd_str_token; ; + break;} +case 63: +#line 209 "pars0grm.y" +{ yyval = pars_stored_procedure_call(yyvsp[-4]); ; + break;} +case 64: +#line 214 "pars0grm.y" +{ yyval = pars_procedure_call(yyvsp[-3], yyvsp[-1]); ; + break;} +case 65: +#line 218 "pars0grm.y" +{ yyval = &pars_replstr_token; ; + break;} +case 66: +#line 219 "pars0grm.y" +{ yyval = &pars_printf_token; ; + break;} +case 67: +#line 220 "pars0grm.y" +{ yyval = &pars_assert_token; ; + break;} +case 68: +#line 224 "pars0grm.y" +{ yyval = que_node_list_add_last(NULL, yyvsp[0]); ; + break;} +case 69: +#line 226 "pars0grm.y" +{ yyval = que_node_list_add_last(yyvsp[-2], yyvsp[0]); ; + break;} +case 70: +#line 230 "pars0grm.y" +{ yyval = NULL; ; + break;} +case 71: +#line 231 "pars0grm.y" +{ yyval = que_node_list_add_last(NULL, yyvsp[0]); ; + break;} +case 72: +#line 233 "pars0grm.y" +{ yyval = que_node_list_add_last(yyvsp[-2], yyvsp[0]); ; + break;} +case 73: +#line 237 "pars0grm.y" +{ yyval = NULL; ; + break;} +case 74: +#line 238 "pars0grm.y" +{ yyval = que_node_list_add_last(NULL, yyvsp[0]);; + break;} +case 75: +#line 239 "pars0grm.y" +{ yyval = que_node_list_add_last(yyvsp[-2], yyvsp[0]); ; + break;} +case 76: +#line 243 "pars0grm.y" +{ yyval = yyvsp[0]; ; + break;} +case 77: +#line 245 "pars0grm.y" +{ yyval = pars_func(&pars_count_token, + que_node_list_add_last(NULL, + sym_tab_add_int_lit( + pars_sym_tab_global, 1))); ; + break;} +case 78: +#line 250 "pars0grm.y" +{ yyval = pars_func(&pars_count_token, + que_node_list_add_last(NULL, + pars_func(&pars_distinct_token, + que_node_list_add_last( + NULL, yyvsp[-1])))); ; + break;} +case 79: +#line 256 "pars0grm.y" +{ yyval = pars_func(&pars_sum_token, + que_node_list_add_last(NULL, + yyvsp[-1])); ; + break;} +case 80: +#line 262 "pars0grm.y" +{ yyval = NULL; ; + break;} +case 81: +#line 263 "pars0grm.y" +{ yyval = que_node_list_add_last(NULL, yyvsp[0]); ; + break;} +case 82: +#line 265 "pars0grm.y" +{ yyval = que_node_list_add_last(yyvsp[-2], yyvsp[0]); ; + break;} +case 83: +#line 269 "pars0grm.y" +{ yyval = pars_select_list(&pars_star_denoter, + NULL); ; + break;} +case 84: +#line 272 "pars0grm.y" +{ yyval = pars_select_list(yyvsp[-2], yyvsp[0]); ; + break;} +case 85: +#line 273 "pars0grm.y" +{ yyval = pars_select_list(yyvsp[0], NULL); ; + break;} +case 86: +#line 277 "pars0grm.y" +{ yyval = NULL; ; + break;} +case 87: +#line 278 "pars0grm.y" +{ yyval = yyvsp[0]; ; + break;} +case 88: +#line 282 "pars0grm.y" +{ yyval = NULL; ; + break;} +case 89: +#line 284 "pars0grm.y" +{ yyval = &pars_update_token; ; + break;} +case 90: +#line 288 "pars0grm.y" +{ yyval = NULL; ; + break;} +case 91: +#line 290 "pars0grm.y" +{ yyval = &pars_consistent_token; ; + break;} +case 92: +#line 294 "pars0grm.y" +{ yyval = &pars_asc_token; ; + break;} +case 93: +#line 295 "pars0grm.y" +{ yyval = &pars_asc_token; ; + break;} +case 94: +#line 296 "pars0grm.y" +{ yyval = &pars_desc_token; ; + break;} +case 95: +#line 300 "pars0grm.y" +{ yyval = NULL; ; + break;} +case 96: +#line 302 "pars0grm.y" +{ yyval = pars_order_by(yyvsp[-1], yyvsp[0]); ; + break;} +case 97: +#line 311 "pars0grm.y" +{ yyval = pars_select_statement(yyvsp[-6], yyvsp[-4], yyvsp[-3], + yyvsp[-2], yyvsp[-1], yyvsp[0]); ; + break;} +case 98: +#line 317 "pars0grm.y" +{ yyval = yyvsp[0]; ; + break;} +case 99: +#line 322 "pars0grm.y" +{ yyval = pars_insert_statement(yyvsp[-4], yyvsp[-1], NULL); ; + break;} +case 100: +#line 324 "pars0grm.y" +{ yyval = pars_insert_statement(yyvsp[-1], NULL, yyvsp[0]); ; + break;} +case 101: +#line 328 "pars0grm.y" +{ yyval = pars_column_assignment(yyvsp[-2], yyvsp[0]); ; + break;} +case 102: +#line 332 "pars0grm.y" +{ yyval = que_node_list_add_last(NULL, yyvsp[0]); ; + break;} +case 103: +#line 334 "pars0grm.y" +{ yyval = que_node_list_add_last(yyvsp[-2], yyvsp[0]); ; + break;} +case 104: +#line 340 "pars0grm.y" +{ yyval = yyvsp[0]; ; + break;} +case 105: +#line 346 "pars0grm.y" +{ yyval = pars_update_statement_start(FALSE, + yyvsp[-2], yyvsp[0]); ; + break;} +case 106: +#line 352 "pars0grm.y" +{ yyval = pars_update_statement(yyvsp[-1], NULL, yyvsp[0]); ; + break;} +case 107: +#line 357 "pars0grm.y" +{ yyval = pars_update_statement(yyvsp[-1], yyvsp[0], NULL); ; + break;} +case 108: +#line 362 "pars0grm.y" +{ yyval = pars_update_statement_start(TRUE, + yyvsp[0], NULL); ; + break;} +case 109: +#line 368 "pars0grm.y" +{ yyval = pars_update_statement(yyvsp[-1], NULL, yyvsp[0]); ; + break;} +case 110: +#line 373 "pars0grm.y" +{ yyval = pars_update_statement(yyvsp[-1], yyvsp[0], NULL); ; + break;} +case 111: +#line 378 "pars0grm.y" +{ yyval = pars_row_printf_statement(yyvsp[0]); ; + break;} +case 112: +#line 383 "pars0grm.y" +{ yyval = pars_assignment_statement(yyvsp[-2], yyvsp[0]); ; + break;} +case 113: +#line 389 "pars0grm.y" +{ yyval = pars_elsif_element(yyvsp[-2], yyvsp[0]); ; + break;} +case 114: +#line 393 "pars0grm.y" +{ yyval = que_node_list_add_last(NULL, yyvsp[0]); ; + break;} +case 115: +#line 395 "pars0grm.y" +{ yyval = que_node_list_add_last(yyvsp[-1], yyvsp[0]); ; + break;} +case 116: +#line 399 "pars0grm.y" +{ yyval = NULL; ; + break;} +case 117: +#line 401 "pars0grm.y" +{ yyval = yyvsp[0]; ; + break;} +case 118: +#line 402 "pars0grm.y" +{ yyval = yyvsp[0]; ; + break;} +case 119: +#line 409 "pars0grm.y" +{ yyval = pars_if_statement(yyvsp[-5], yyvsp[-3], yyvsp[-2]); ; + break;} +case 120: +#line 415 "pars0grm.y" +{ yyval = pars_while_statement(yyvsp[-4], yyvsp[-2]); ; + break;} +case 121: +#line 423 "pars0grm.y" +{ yyval = pars_for_statement(yyvsp[-8], yyvsp[-6], yyvsp[-4], yyvsp[-2]); ; + break;} +case 122: +#line 427 "pars0grm.y" +{ yyval = pars_return_statement(); ; + break;} +case 123: +#line 432 "pars0grm.y" +{ yyval = pars_open_statement( + ROW_SEL_OPEN_CURSOR, yyvsp[0]); ; + break;} +case 124: +#line 438 "pars0grm.y" +{ yyval = pars_open_statement( + ROW_SEL_CLOSE_CURSOR, yyvsp[0]); ; + break;} +case 125: +#line 444 "pars0grm.y" +{ yyval = pars_fetch_statement(yyvsp[-2], yyvsp[0]); ; + break;} +case 126: +#line 448 "pars0grm.y" +{ yyval = pars_column_def(yyvsp[-1], yyvsp[0]); ; + break;} +case 127: +#line 452 "pars0grm.y" +{ yyval = que_node_list_add_last(NULL, yyvsp[0]); ; + break;} +case 128: +#line 454 "pars0grm.y" +{ yyval = que_node_list_add_last(yyvsp[-2], yyvsp[0]); ; + break;} +case 129: +#line 458 "pars0grm.y" +{ yyval = NULL; ; + break;} +case 130: +#line 460 "pars0grm.y" +{ yyval = &pars_int_token; + /* pass any non-NULL pointer */ ; + break;} +case 131: +#line 467 "pars0grm.y" +{ yyval = pars_create_table(yyvsp[-4], yyvsp[-2], yyvsp[0]); ; + break;} +case 132: +#line 471 "pars0grm.y" +{ yyval = que_node_list_add_last(NULL, yyvsp[0]); ; + break;} +case 133: +#line 473 "pars0grm.y" +{ yyval = que_node_list_add_last(yyvsp[-2], yyvsp[0]); ; + break;} +case 134: +#line 477 "pars0grm.y" +{ yyval = NULL; ; + break;} +case 135: +#line 478 "pars0grm.y" +{ yyval = &pars_unique_token; ; + break;} +case 136: +#line 482 "pars0grm.y" +{ yyval = NULL; ; + break;} +case 137: +#line 483 "pars0grm.y" +{ yyval = &pars_clustered_token; ; + break;} +case 138: +#line 491 "pars0grm.y" +{ yyval = pars_create_index(yyvsp[-8], yyvsp[-7], yyvsp[-5], yyvsp[-3], yyvsp[-1]); ; + break;} +case 139: +#line 496 "pars0grm.y" +{ yyval = pars_commit_statement(); ; + break;} +case 140: +#line 501 "pars0grm.y" +{ yyval = pars_rollback_statement(); ; + break;} +case 141: +#line 505 "pars0grm.y" +{ yyval = &pars_int_token; ; + break;} +case 142: +#line 506 "pars0grm.y" +{ yyval = &pars_char_token; ; + break;} +case 143: +#line 511 "pars0grm.y" +{ yyval = pars_parameter_declaration(yyvsp[-2], + PARS_INPUT, yyvsp[0]); ; + break;} +case 144: +#line 514 "pars0grm.y" +{ yyval = pars_parameter_declaration(yyvsp[-2], + PARS_OUTPUT, yyvsp[0]); ; + break;} +case 145: +#line 519 "pars0grm.y" +{ yyval = NULL; ; + break;} +case 146: +#line 520 "pars0grm.y" +{ yyval = que_node_list_add_last(NULL, yyvsp[0]); ; + break;} +case 147: +#line 522 "pars0grm.y" +{ yyval = que_node_list_add_last(yyvsp[-2], yyvsp[0]); ; + break;} +case 148: +#line 527 "pars0grm.y" +{ yyval = pars_variable_declaration(yyvsp[-2], yyvsp[-1]); ; + break;} +case 152: +#line 539 "pars0grm.y" +{ yyval = pars_cursor_declaration(yyvsp[-3], yyvsp[-1]); ; + break;} +case 156: +#line 555 "pars0grm.y" +{ yyval = pars_procedure_definition(yyvsp[-9], yyvsp[-7], + yyvsp[-1]); ; + break;} +} + /* the action file gets copied in in place of this dollarsign */ +#line 498 "bison.simple" + + yyvsp -= yylen; + yyssp -= yylen; +#ifdef YYLSP_NEEDED + yylsp -= yylen; +#endif + +#if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + + *++yyvsp = yyval; + +#ifdef YYLSP_NEEDED + yylsp++; + if (yylen == 0) + { + yylsp->first_line = yylloc.first_line; + yylsp->first_column = yylloc.first_column; + yylsp->last_line = (yylsp-1)->last_line; + yylsp->last_column = (yylsp-1)->last_column; + yylsp->text = 0; + } + else + { + yylsp->last_line = (yylsp+yylen-1)->last_line; + yylsp->last_column = (yylsp+yylen-1)->last_column; + } +#endif + + /* Now "shift" the result of the reduction. + Determine what state that goes to, + based on the state we popped back to + and the rule number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTBASE] + *yyssp; + if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTBASE]; + + goto yynewstate; + +yyerrlab: /* here on detecting error */ + + if (! yyerrstatus) + /* If not already recovering from an error, report this error. */ + { + ++yynerrs; + +#ifdef YYERROR_VERBOSE + yyn = yypact[yystate]; + + if (yyn > YYFLAG && yyn < YYLAST) + { + int size = 0; + char *msg; + int x, count; + + count = 0; + /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + size += strlen(yytname[x]) + 15, count++; + msg = (char *) malloc(size + 15); + if (msg != 0) + { + strcpy(msg, "parse error"); + + if (count < 5) + { + count = 0; + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + { + strcat(msg, count == 0 ? ", expecting `" : " or `"); + strcat(msg, yytname[x]); + strcat(msg, "'"); + count++; + } + } + yyerror(msg); + free(msg); + } + else + yyerror ("parse error; also virtual memory exceeded"); + } + else +#endif /* YYERROR_VERBOSE */ + yyerror("parse error"); + } + + goto yyerrlab1; +yyerrlab1: /* here on error raised explicitly by an action */ + + if (yyerrstatus == 3) + { + /* if just tried and failed to reuse lookahead token after an error, discard it. */ + + /* return failure if at end of input */ + if (yychar == YYEOF) + YYABORT; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); +#endif + + yychar = YYEMPTY; + } + + /* Else will try to reuse lookahead token + after shifting the error token. */ + + yyerrstatus = 3; /* Each real token shifted decrements this */ + + goto yyerrhandle; + +yyerrdefault: /* current state does not do anything special for the error token. */ + +#if 0 + /* This is wrong; only states that explicitly want error tokens + should shift them. */ + yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ + if (yyn) goto yydefault; +#endif + +yyerrpop: /* pop the current state because it cannot handle the error token */ + + if (yyssp == yyss) YYABORT; + yyvsp--; + yystate = *--yyssp; +#ifdef YYLSP_NEEDED + yylsp--; +#endif + +#if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "Error: state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + +yyerrhandle: + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yyerrdefault; + + yyn += YYTERROR; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) + goto yyerrdefault; + + yyn = yytable[yyn]; + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrpop; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrpop; + + if (yyn == YYFINAL) + YYACCEPT; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting error token, "); +#endif + + *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif + + yystate = yyn; + goto yynewstate; +} +#line 559 "pars0grm.y" + diff --git a/innobase/pars/pars0grm.h b/innobase/pars/pars0grm.h new file mode 100644 index 00000000000..d0b4b4c2e42 --- /dev/null +++ b/innobase/pars/pars0grm.h @@ -0,0 +1,90 @@ +#ifndef YYSTYPE +#define YYSTYPE int +#endif +#define PARS_INT_LIT 258 +#define PARS_FLOAT_LIT 259 +#define PARS_STR_LIT 260 +#define PARS_NULL_LIT 261 +#define PARS_ID_TOKEN 262 +#define PARS_AND_TOKEN 263 +#define PARS_OR_TOKEN 264 +#define PARS_NOT_TOKEN 265 +#define PARS_GE_TOKEN 266 +#define PARS_LE_TOKEN 267 +#define PARS_NE_TOKEN 268 +#define PARS_PROCEDURE_TOKEN 269 +#define PARS_IN_TOKEN 270 +#define PARS_OUT_TOKEN 271 +#define PARS_INT_TOKEN 272 +#define PARS_INTEGER_TOKEN 273 +#define PARS_FLOAT_TOKEN 274 +#define PARS_CHAR_TOKEN 275 +#define PARS_IS_TOKEN 276 +#define PARS_BEGIN_TOKEN 277 +#define PARS_END_TOKEN 278 +#define PARS_IF_TOKEN 279 +#define PARS_THEN_TOKEN 280 +#define PARS_ELSE_TOKEN 281 +#define PARS_ELSIF_TOKEN 282 +#define PARS_LOOP_TOKEN 283 +#define PARS_WHILE_TOKEN 284 +#define PARS_RETURN_TOKEN 285 +#define PARS_SELECT_TOKEN 286 +#define PARS_SUM_TOKEN 287 +#define PARS_COUNT_TOKEN 288 +#define PARS_DISTINCT_TOKEN 289 +#define PARS_FROM_TOKEN 290 +#define PARS_WHERE_TOKEN 291 +#define PARS_FOR_TOKEN 292 +#define PARS_DDOT_TOKEN 293 +#define PARS_CONSISTENT_TOKEN 294 +#define PARS_READ_TOKEN 295 +#define PARS_ORDER_TOKEN 296 +#define PARS_BY_TOKEN 297 +#define PARS_ASC_TOKEN 298 +#define PARS_DESC_TOKEN 299 +#define PARS_INSERT_TOKEN 300 +#define PARS_INTO_TOKEN 301 +#define PARS_VALUES_TOKEN 302 +#define PARS_UPDATE_TOKEN 303 +#define PARS_SET_TOKEN 304 +#define PARS_DELETE_TOKEN 305 +#define PARS_CURRENT_TOKEN 306 +#define PARS_OF_TOKEN 307 +#define PARS_CREATE_TOKEN 308 +#define PARS_TABLE_TOKEN 309 +#define PARS_INDEX_TOKEN 310 +#define PARS_UNIQUE_TOKEN 311 +#define PARS_CLUSTERED_TOKEN 312 +#define PARS_DOES_NOT_FIT_IN_MEM_TOKEN 313 +#define PARS_ON_TOKEN 314 +#define PARS_ASSIGN_TOKEN 315 +#define PARS_DECLARE_TOKEN 316 +#define PARS_CURSOR_TOKEN 317 +#define PARS_SQL_TOKEN 318 +#define PARS_OPEN_TOKEN 319 +#define PARS_FETCH_TOKEN 320 +#define PARS_CLOSE_TOKEN 321 +#define PARS_NOTFOUND_TOKEN 322 +#define PARS_TO_CHAR_TOKEN 323 +#define PARS_TO_NUMBER_TOKEN 324 +#define PARS_TO_BINARY_TOKEN 325 +#define PARS_BINARY_TO_NUMBER_TOKEN 326 +#define PARS_SUBSTR_TOKEN 327 +#define PARS_REPLSTR_TOKEN 328 +#define PARS_CONCAT_TOKEN 329 +#define PARS_INSTR_TOKEN 330 +#define PARS_LENGTH_TOKEN 331 +#define PARS_SYSDATE_TOKEN 332 +#define PARS_PRINTF_TOKEN 333 +#define PARS_ASSERT_TOKEN 334 +#define PARS_RND_TOKEN 335 +#define PARS_RND_STR_TOKEN 336 +#define PARS_ROW_PRINTF_TOKEN 337 +#define PARS_COMMIT_TOKEN 338 +#define PARS_ROLLBACK_TOKEN 339 +#define PARS_WORK_TOKEN 340 +#define NEG 341 + + +extern YYSTYPE yylval; diff --git a/innobase/pars/pars0grm.y b/innobase/pars/pars0grm.y new file mode 100644 index 00000000000..a13aeaac1e2 --- /dev/null +++ b/innobase/pars/pars0grm.y @@ -0,0 +1,559 @@ +/****************************************************** +SQL parser: input file for the GNU Bison parser generator + +(c) 1997 Innobase Oy + +Created 12/14/1997 Heikki Tuuri +*******************************************************/ + +%{ +/* The value of the semantic attribute is a pointer to a query tree node +que_node_t */ +#define YYSTYPE que_node_t* +#define alloca mem_alloc + +#include <math.h> + +#include "univ.i" +#include "pars0pars.h" +#include "mem0mem.h" +#include "que0types.h" +#include "que0que.h" +#include "row0sel.h" + +/* #define __STDC__ */ + +int +yylex(void); +%} + +%token PARS_INT_LIT +%token PARS_FLOAT_LIT +%token PARS_STR_LIT +%token PARS_NULL_LIT +%token PARS_ID_TOKEN +%token PARS_AND_TOKEN +%token PARS_OR_TOKEN +%token PARS_NOT_TOKEN +%token PARS_GE_TOKEN +%token PARS_LE_TOKEN +%token PARS_NE_TOKEN +%token PARS_PROCEDURE_TOKEN +%token PARS_IN_TOKEN +%token PARS_OUT_TOKEN +%token PARS_INT_TOKEN +%token PARS_INTEGER_TOKEN +%token PARS_FLOAT_TOKEN +%token PARS_CHAR_TOKEN +%token PARS_IS_TOKEN +%token PARS_BEGIN_TOKEN +%token PARS_END_TOKEN +%token PARS_IF_TOKEN +%token PARS_THEN_TOKEN +%token PARS_ELSE_TOKEN +%token PARS_ELSIF_TOKEN +%token PARS_LOOP_TOKEN +%token PARS_WHILE_TOKEN +%token PARS_RETURN_TOKEN +%token PARS_SELECT_TOKEN +%token PARS_SUM_TOKEN +%token PARS_COUNT_TOKEN +%token PARS_DISTINCT_TOKEN +%token PARS_FROM_TOKEN +%token PARS_WHERE_TOKEN +%token PARS_FOR_TOKEN +%token PARS_DDOT_TOKEN +%token PARS_CONSISTENT_TOKEN +%token PARS_READ_TOKEN +%token PARS_ORDER_TOKEN +%token PARS_BY_TOKEN +%token PARS_ASC_TOKEN +%token PARS_DESC_TOKEN +%token PARS_INSERT_TOKEN +%token PARS_INTO_TOKEN +%token PARS_VALUES_TOKEN +%token PARS_UPDATE_TOKEN +%token PARS_SET_TOKEN +%token PARS_DELETE_TOKEN +%token PARS_CURRENT_TOKEN +%token PARS_OF_TOKEN +%token PARS_CREATE_TOKEN +%token PARS_TABLE_TOKEN +%token PARS_INDEX_TOKEN +%token PARS_UNIQUE_TOKEN +%token PARS_CLUSTERED_TOKEN +%token PARS_DOES_NOT_FIT_IN_MEM_TOKEN +%token PARS_ON_TOKEN +%token PARS_ASSIGN_TOKEN +%token PARS_DECLARE_TOKEN +%token PARS_CURSOR_TOKEN +%token PARS_SQL_TOKEN +%token PARS_OPEN_TOKEN +%token PARS_FETCH_TOKEN +%token PARS_CLOSE_TOKEN +%token PARS_NOTFOUND_TOKEN +%token PARS_TO_CHAR_TOKEN +%token PARS_TO_NUMBER_TOKEN +%token PARS_TO_BINARY_TOKEN +%token PARS_BINARY_TO_NUMBER_TOKEN +%token PARS_SUBSTR_TOKEN +%token PARS_REPLSTR_TOKEN +%token PARS_CONCAT_TOKEN +%token PARS_INSTR_TOKEN +%token PARS_LENGTH_TOKEN +%token PARS_SYSDATE_TOKEN +%token PARS_PRINTF_TOKEN +%token PARS_ASSERT_TOKEN +%token PARS_RND_TOKEN +%token PARS_RND_STR_TOKEN +%token PARS_ROW_PRINTF_TOKEN +%token PARS_COMMIT_TOKEN +%token PARS_ROLLBACK_TOKEN +%token PARS_WORK_TOKEN + +%left PARS_AND_TOKEN PARS_OR_TOKEN +%left PARS_NOT_TOKEN +%left '=' '<' '>' PARS_GE_TOKEN PARS_LE_TOKEN +%left '-' '+' +%left '*' '/' +%left NEG /* negation--unary minus */ +%left '%' + +/* Grammar follows */ +%% + +statement: + procedure_definition ';' + | stored_procedure_call + | predefined_procedure_call ';' + | while_statement ';' + | for_statement ';' + | if_statement ';' + | return_statement ';' + | assignment_statement ';' + | select_statement ';' + | insert_statement ';' + | row_printf_statement ';' + | delete_statement_searched ';' + | delete_statement_positioned ';' + | update_statement_searched ';' + | update_statement_positioned ';' + | open_cursor_statement ';' + | fetch_statement ';' + | close_cursor_statement ';' + | commit_statement ';' + | rollback_statement ';' + | create_table ';' + | create_index ';' +; + +statement_list: + statement { $$ = que_node_list_add_last(NULL, $1); } + | statement_list statement + { $$ = que_node_list_add_last($1, $2); } +; + +exp: + PARS_ID_TOKEN { $$ = $1;} + | function_name '(' exp_list ')' + { $$ = pars_func($1, $3); } + | PARS_INT_LIT { $$ = $1;} + | PARS_FLOAT_LIT { $$ = $1;} + | PARS_STR_LIT { $$ = $1;} + | PARS_NULL_LIT { $$ = $1;} + | PARS_SQL_TOKEN { $$ = $1;} + | exp '+' exp { $$ = pars_op('+', $1, $3); } + | exp '-' exp { $$ = pars_op('-', $1, $3); } + | exp '*' exp { $$ = pars_op('*', $1, $3); } + | exp '/' exp { $$ = pars_op('/', $1, $3); } + | '-' exp %prec NEG { $$ = pars_op('-', $2, NULL); } + | '(' exp ')' { $$ = $2; } + | exp '=' exp { $$ = pars_op('=', $1, $3); } + | exp '<' exp { $$ = pars_op('<', $1, $3); } + | exp '>' exp { $$ = pars_op('>', $1, $3); } + | exp PARS_GE_TOKEN exp { $$ = pars_op(PARS_GE_TOKEN, $1, $3); } + | exp PARS_LE_TOKEN exp { $$ = pars_op(PARS_LE_TOKEN, $1, $3); } + | exp PARS_NE_TOKEN exp { $$ = pars_op(PARS_NE_TOKEN, $1, $3); } + | exp PARS_AND_TOKEN exp{ $$ = pars_op(PARS_AND_TOKEN, $1, $3); } + | exp PARS_OR_TOKEN exp { $$ = pars_op(PARS_OR_TOKEN, $1, $3); } + | PARS_NOT_TOKEN exp { $$ = pars_op(PARS_NOT_TOKEN, $2, NULL); } + | PARS_ID_TOKEN '%' PARS_NOTFOUND_TOKEN + { $$ = pars_op(PARS_NOTFOUND_TOKEN, $1, NULL); } + | PARS_SQL_TOKEN '%' PARS_NOTFOUND_TOKEN + { $$ = pars_op(PARS_NOTFOUND_TOKEN, $1, NULL); } +; + +function_name: + PARS_TO_CHAR_TOKEN { $$ = &pars_to_char_token; } + | PARS_TO_NUMBER_TOKEN { $$ = &pars_to_number_token; } + | PARS_TO_BINARY_TOKEN { $$ = &pars_to_binary_token; } + | PARS_BINARY_TO_NUMBER_TOKEN + { $$ = &pars_binary_to_number_token; } + | PARS_SUBSTR_TOKEN { $$ = &pars_substr_token; } + | PARS_CONCAT_TOKEN { $$ = &pars_concat_token; } + | PARS_INSTR_TOKEN { $$ = &pars_instr_token; } + | PARS_LENGTH_TOKEN { $$ = &pars_length_token; } + | PARS_SYSDATE_TOKEN { $$ = &pars_sysdate_token; } + | PARS_RND_TOKEN { $$ = &pars_rnd_token; } + | PARS_RND_STR_TOKEN { $$ = &pars_rnd_str_token; } +; + +question_mark_list: + /* Nothing */ + | '?' + | question_mark_list ',' '?' +; + +stored_procedure_call: + '{' PARS_ID_TOKEN '(' question_mark_list ')' '}' + { $$ = pars_stored_procedure_call($2); } +; + +predefined_procedure_call: + predefined_procedure_name '(' exp_list ')' + { $$ = pars_procedure_call($1, $3); } +; + +predefined_procedure_name: + PARS_REPLSTR_TOKEN { $$ = &pars_replstr_token; } + | PARS_PRINTF_TOKEN { $$ = &pars_printf_token; } + | PARS_ASSERT_TOKEN { $$ = &pars_assert_token; } +; + +table_list: + PARS_ID_TOKEN { $$ = que_node_list_add_last(NULL, $1); } + | table_list ',' PARS_ID_TOKEN + { $$ = que_node_list_add_last($1, $3); } +; + +variable_list: + /* Nothing */ { $$ = NULL; } + | PARS_ID_TOKEN { $$ = que_node_list_add_last(NULL, $1); } + | variable_list ',' PARS_ID_TOKEN + { $$ = que_node_list_add_last($1, $3); } +; + +exp_list: + /* Nothing */ { $$ = NULL; } + | exp { $$ = que_node_list_add_last(NULL, $1);} + | exp_list ',' exp { $$ = que_node_list_add_last($1, $3); } +; + +select_item: + exp { $$ = $1; } + | PARS_COUNT_TOKEN '(' '*' ')' + { $$ = pars_func(&pars_count_token, + que_node_list_add_last(NULL, + sym_tab_add_int_lit( + pars_sym_tab_global, 1))); } + | PARS_COUNT_TOKEN '(' PARS_DISTINCT_TOKEN PARS_ID_TOKEN ')' + { $$ = pars_func(&pars_count_token, + que_node_list_add_last(NULL, + pars_func(&pars_distinct_token, + que_node_list_add_last( + NULL, $4)))); } + | PARS_SUM_TOKEN '(' exp ')' + { $$ = pars_func(&pars_sum_token, + que_node_list_add_last(NULL, + $3)); } +; + +select_item_list: + /* Nothing */ { $$ = NULL; } + | select_item { $$ = que_node_list_add_last(NULL, $1); } + | select_item_list ',' select_item + { $$ = que_node_list_add_last($1, $3); } +; + +select_list: + '*' { $$ = pars_select_list(&pars_star_denoter, + NULL); } + | select_item_list PARS_INTO_TOKEN variable_list + { $$ = pars_select_list($1, $3); } + | select_item_list { $$ = pars_select_list($1, NULL); } +; + +search_condition: + /* Nothing */ { $$ = NULL; } + | PARS_WHERE_TOKEN exp { $$ = $2; } +; + +for_update_clause: + /* Nothing */ { $$ = NULL; } + | PARS_FOR_TOKEN PARS_UPDATE_TOKEN + { $$ = &pars_update_token; } +; + +consistent_read_clause: + /* Nothing */ { $$ = NULL; } + | PARS_CONSISTENT_TOKEN PARS_READ_TOKEN + { $$ = &pars_consistent_token; } +; + +order_direction: + /* Nothing */ { $$ = &pars_asc_token; } + | PARS_ASC_TOKEN { $$ = &pars_asc_token; } + | PARS_DESC_TOKEN { $$ = &pars_desc_token; } +; + +order_by_clause: + /* Nothing */ { $$ = NULL; } + | PARS_ORDER_TOKEN PARS_BY_TOKEN PARS_ID_TOKEN order_direction + { $$ = pars_order_by($3, $4); } +; + +select_statement: + PARS_SELECT_TOKEN select_list + PARS_FROM_TOKEN table_list + search_condition + for_update_clause + consistent_read_clause + order_by_clause { $$ = pars_select_statement($2, $4, $5, + $6, $7, $8); } +; + +insert_statement_start: + PARS_INSERT_TOKEN PARS_INTO_TOKEN + PARS_ID_TOKEN { $$ = $3; } +; + +insert_statement: + insert_statement_start PARS_VALUES_TOKEN '(' exp_list ')' + { $$ = pars_insert_statement($1, $4, NULL); } + | insert_statement_start select_statement + { $$ = pars_insert_statement($1, NULL, $2); } +; + +column_assignment: + PARS_ID_TOKEN '=' exp { $$ = pars_column_assignment($1, $3); } +; + +column_assignment_list: + column_assignment { $$ = que_node_list_add_last(NULL, $1); } + | column_assignment_list ',' column_assignment + { $$ = que_node_list_add_last($1, $3); } +; + +cursor_positioned: + PARS_WHERE_TOKEN + PARS_CURRENT_TOKEN PARS_OF_TOKEN + PARS_ID_TOKEN { $$ = $4; } +; + +update_statement_start: + PARS_UPDATE_TOKEN PARS_ID_TOKEN + PARS_SET_TOKEN + column_assignment_list { $$ = pars_update_statement_start(FALSE, + $2, $4); } +; + +update_statement_searched: + update_statement_start + search_condition { $$ = pars_update_statement($1, NULL, $2); } +; + +update_statement_positioned: + update_statement_start + cursor_positioned { $$ = pars_update_statement($1, $2, NULL); } +; + +delete_statement_start: + PARS_DELETE_TOKEN PARS_FROM_TOKEN + PARS_ID_TOKEN { $$ = pars_update_statement_start(TRUE, + $3, NULL); } +; + +delete_statement_searched: + delete_statement_start + search_condition { $$ = pars_update_statement($1, NULL, $2); } +; + +delete_statement_positioned: + delete_statement_start + cursor_positioned { $$ = pars_update_statement($1, $2, NULL); } +; + +row_printf_statement: + PARS_ROW_PRINTF_TOKEN select_statement + { $$ = pars_row_printf_statement($2); } +; + +assignment_statement: + PARS_ID_TOKEN PARS_ASSIGN_TOKEN exp + { $$ = pars_assignment_statement($1, $3); } +; + +elsif_element: + PARS_ELSIF_TOKEN + exp PARS_THEN_TOKEN statement_list + { $$ = pars_elsif_element($2, $4); } +; + +elsif_list: + elsif_element { $$ = que_node_list_add_last(NULL, $1); } + | elsif_list elsif_element + { $$ = que_node_list_add_last($1, $2); } +; + +else_part: + /* Nothing */ { $$ = NULL; } + | PARS_ELSE_TOKEN statement_list + { $$ = $2; } + | elsif_list { $$ = $1; } +; + +if_statement: + PARS_IF_TOKEN exp PARS_THEN_TOKEN statement_list + else_part + PARS_END_TOKEN PARS_IF_TOKEN + { $$ = pars_if_statement($2, $4, $5); } +; + +while_statement: + PARS_WHILE_TOKEN exp PARS_LOOP_TOKEN statement_list + PARS_END_TOKEN PARS_LOOP_TOKEN + { $$ = pars_while_statement($2, $4); } +; + +for_statement: + PARS_FOR_TOKEN PARS_ID_TOKEN PARS_IN_TOKEN + exp PARS_DDOT_TOKEN exp + PARS_LOOP_TOKEN statement_list + PARS_END_TOKEN PARS_LOOP_TOKEN + { $$ = pars_for_statement($2, $4, $6, $8); } +; + +return_statement: + PARS_RETURN_TOKEN { $$ = pars_return_statement(); } +; + +open_cursor_statement: + PARS_OPEN_TOKEN PARS_ID_TOKEN + { $$ = pars_open_statement( + ROW_SEL_OPEN_CURSOR, $2); } +; + +close_cursor_statement: + PARS_CLOSE_TOKEN PARS_ID_TOKEN + { $$ = pars_open_statement( + ROW_SEL_CLOSE_CURSOR, $2); } +; + +fetch_statement: + PARS_FETCH_TOKEN PARS_ID_TOKEN PARS_INTO_TOKEN variable_list + { $$ = pars_fetch_statement($2, $4); } +; + +column_def: + PARS_ID_TOKEN type_name { $$ = pars_column_def($1, $2); } +; + +column_def_list: + column_def { $$ = que_node_list_add_last(NULL, $1); } + | column_def_list ',' column_def + { $$ = que_node_list_add_last($1, $3); } +; + +not_fit_in_memory: + /* Nothing */ { $$ = NULL; } + | PARS_DOES_NOT_FIT_IN_MEM_TOKEN + { $$ = &pars_int_token; + /* pass any non-NULL pointer */ } +; + +create_table: + PARS_CREATE_TOKEN PARS_TABLE_TOKEN + PARS_ID_TOKEN '(' column_def_list ')' + not_fit_in_memory { $$ = pars_create_table($3, $5, $7); } +; + +column_list: + PARS_ID_TOKEN { $$ = que_node_list_add_last(NULL, $1); } + | column_list ',' PARS_ID_TOKEN + { $$ = que_node_list_add_last($1, $3); } +; + +unique_def: + /* Nothing */ { $$ = NULL; } + | PARS_UNIQUE_TOKEN { $$ = &pars_unique_token; } +; + +clustered_def: + /* Nothing */ { $$ = NULL; } + | PARS_CLUSTERED_TOKEN { $$ = &pars_clustered_token; } +; + +create_index: + PARS_CREATE_TOKEN unique_def + clustered_def + PARS_INDEX_TOKEN + PARS_ID_TOKEN PARS_ON_TOKEN PARS_ID_TOKEN + '(' column_list ')' { $$ = pars_create_index($2, $3, $5, $7, $9); } +; + +commit_statement: + PARS_COMMIT_TOKEN PARS_WORK_TOKEN + { $$ = pars_commit_statement(); } +; + +rollback_statement: + PARS_ROLLBACK_TOKEN PARS_WORK_TOKEN + { $$ = pars_rollback_statement(); } +; + +type_name: + PARS_INT_TOKEN { $$ = &pars_int_token; } + | PARS_CHAR_TOKEN { $$ = &pars_char_token; } +; + +parameter_declaration: + PARS_ID_TOKEN PARS_IN_TOKEN type_name + { $$ = pars_parameter_declaration($1, + PARS_INPUT, $3); } + | PARS_ID_TOKEN PARS_OUT_TOKEN type_name + { $$ = pars_parameter_declaration($1, + PARS_OUTPUT, $3); } +; + +parameter_declaration_list: + /* Nothing */ { $$ = NULL; } + | parameter_declaration { $$ = que_node_list_add_last(NULL, $1); } + | parameter_declaration_list ',' parameter_declaration + { $$ = que_node_list_add_last($1, $3); } +; + +variable_declaration: + PARS_ID_TOKEN type_name ';' + { $$ = pars_variable_declaration($1, $2); } +; + +variable_declaration_list: + /* Nothing */ + | variable_declaration + | variable_declaration_list variable_declaration +; + +cursor_declaration: + PARS_DECLARE_TOKEN PARS_CURSOR_TOKEN PARS_ID_TOKEN + PARS_IS_TOKEN select_statement ';' + { $$ = pars_cursor_declaration($3, $5); } +; + +declaration_list: + /* Nothing */ + | cursor_declaration + | declaration_list cursor_declaration +; + +procedure_definition: + PARS_PROCEDURE_TOKEN PARS_ID_TOKEN '(' parameter_declaration_list ')' + PARS_IS_TOKEN + variable_declaration_list + declaration_list + PARS_BEGIN_TOKEN + statement_list + PARS_END_TOKEN { $$ = pars_procedure_definition($2, $4, + $10); } +; + +%% diff --git a/innobase/pars/pars0lex.l b/innobase/pars/pars0lex.l new file mode 100644 index 00000000000..718dfc86646 --- /dev/null +++ b/innobase/pars/pars0lex.l @@ -0,0 +1,477 @@ +/****************************************************** +SQL parser lexical analyzer: input file for the GNU Flex lexer generator + +(c) 1997 Innobase Oy + +Created 12/14/1997 Heikki Tuuri +*******************************************************/ + +%{ +#define YYSTYPE que_node_t* + +#include "univ.i" +#include "pars0pars.h" +#include "pars0grm.h" +#include "pars0sym.h" +#include "mem0mem.h" +#include "os0proc.h" + +#define isatty(A) 0 +#define malloc(A) mem_alloc(A) +#define free(A) mem_free(A) +#define realloc(P, A) mem_realloc(P, A) +#define exit(A) ut_a(0) + +#define YY_INPUT(buf, result, max_size) pars_get_lex_chars(buf, &result,\ + max_size) +%} + +DIGIT [0-9] +ID [a-z_A-Z][a-z_A-Z0-9]* +%x comment +%% + +{DIGIT}+ { + yylval = sym_tab_add_int_lit(pars_sym_tab_global, + atoi(yytext)); + return(PARS_INT_LIT); +} + +{DIGIT}+"."{DIGIT}* { + ut_error; /* not implemented */ + + return(PARS_FLOAT_LIT); +} + +"\'"[^\']*"\'" { + /* Remove the single quotes around the string */ + + yylval = sym_tab_add_str_lit(pars_sym_tab_global, + (byte*)yytext, + ut_strlen(yytext)); + return(PARS_STR_LIT); +} + +"NULL" { + yylval = sym_tab_add_null_lit(pars_sym_tab_global); + + return(PARS_NULL_LIT); +} + +"SQL" { + /* Implicit cursor name */ + yylval = sym_tab_add_str_lit(pars_sym_tab_global, + (byte*)"\'SQL\'", 5); + return(PARS_SQL_TOKEN); +} + +"AND" { + return(PARS_AND_TOKEN); +} + +"OR" { + return(PARS_OR_TOKEN); +} + +"NOT" { + return(PARS_NOT_TOKEN); +} + +"PROCEDURE" { + return(PARS_PROCEDURE_TOKEN); +} + +"IN" { + return(PARS_IN_TOKEN); +} + +"OUT" { + return(PARS_OUT_TOKEN); +} + +"INT" { + return(PARS_INT_TOKEN); +} + +"INTEGER" { + return(PARS_INT_TOKEN); +} + +"FLOAT" { + return(PARS_FLOAT_TOKEN); +} + +"CHAR" { + return(PARS_CHAR_TOKEN); +} + +"IS" { + return(PARS_IS_TOKEN); +} + +"BEGIN" { + return(PARS_BEGIN_TOKEN); +} + +"END" { + return(PARS_END_TOKEN); +} + +"IF" { + return(PARS_IF_TOKEN); +} + +"THEN" { + return(PARS_THEN_TOKEN); +} + +"ELSE" { + return(PARS_ELSE_TOKEN); +} + +"ELSIF" { + return(PARS_ELSIF_TOKEN); +} + +"LOOP" { + return(PARS_LOOP_TOKEN); +} + +"WHILE" { + return(PARS_WHILE_TOKEN); +} + +"RETURN" { + return(PARS_RETURN_TOKEN); +} + +"SELECT" { + return(PARS_SELECT_TOKEN); +} + +"SUM" { + return(PARS_SUM_TOKEN); +} + +"COUNT" { + return(PARS_COUNT_TOKEN); +} + +"DISTINCT" { + return(PARS_DISTINCT_TOKEN); +} + +"FROM" { + return(PARS_FROM_TOKEN); +} + +"WHERE" { + return(PARS_WHERE_TOKEN); +} + +"FOR" { + return(PARS_FOR_TOKEN); +} + +"CONSISTENT" { + return(PARS_CONSISTENT_TOKEN); +} + +"READ" { + return(PARS_READ_TOKEN); +} + +"ORDER" { + return(PARS_ORDER_TOKEN); +} + +"BY" { + return(PARS_BY_TOKEN); +} + +"ASC" { + return(PARS_ASC_TOKEN); +} + +"DESC" { + return(PARS_DESC_TOKEN); +} + +"INSERT" { + return(PARS_INSERT_TOKEN); +} + +"INTO" { + return(PARS_INTO_TOKEN); +} + +"VALUES" { + return(PARS_VALUES_TOKEN); +} + +"UPDATE" { + return(PARS_UPDATE_TOKEN); +} + +"SET" { + return(PARS_SET_TOKEN); +} + +"DELETE" { + return(PARS_DELETE_TOKEN); +} + +"CURRENT" { + return(PARS_CURRENT_TOKEN); +} + +"OF" { + return(PARS_OF_TOKEN); +} + +"CREATE" { + return(PARS_CREATE_TOKEN); +} + +"TABLE" { + return(PARS_TABLE_TOKEN); +} + +"INDEX" { + return(PARS_INDEX_TOKEN); +} + +"UNIQUE" { + return(PARS_UNIQUE_TOKEN); +} + +"CLUSTERED" { + return(PARS_CLUSTERED_TOKEN); +} + +"DOES_NOT_FIT_IN_MEMORY" { + return(PARS_DOES_NOT_FIT_IN_MEM_TOKEN); +} + +"ON" { + return(PARS_ON_TOKEN); +} + +"DECLARE" { + return(PARS_DECLARE_TOKEN); +} + +"CURSOR" { + return(PARS_CURSOR_TOKEN); +} + +"OPEN" { + return(PARS_OPEN_TOKEN); +} + +"FETCH" { + return(PARS_FETCH_TOKEN); +} + +"CLOSE" { + return(PARS_CLOSE_TOKEN); +} + +"NOTFOUND" { + return(PARS_NOTFOUND_TOKEN); +} + +"TO_CHAR" { + return(PARS_TO_CHAR_TOKEN); +} + +"TO_NUMBER" { + return(PARS_TO_NUMBER_TOKEN); +} + +"TO_BINARY" { + return(PARS_TO_BINARY_TOKEN); +} + +"BINARY_TO_NUMBER" { + return(PARS_BINARY_TO_NUMBER_TOKEN); +} + +"SUBSTR" { + return(PARS_SUBSTR_TOKEN); +} + +"REPLSTR" { + return(PARS_REPLSTR_TOKEN); +} + +"CONCAT" { + return(PARS_CONCAT_TOKEN); +} + +"INSTR" { + return(PARS_INSTR_TOKEN); +} + +"LENGTH" { + return(PARS_LENGTH_TOKEN); +} + +"SYSDATE" { + return(PARS_SYSDATE_TOKEN); +} + +"PRINTF" { + return(PARS_PRINTF_TOKEN); +} + +"ASSERT" { + return(PARS_ASSERT_TOKEN); +} + +"RND" { + return(PARS_RND_TOKEN); +} + +"RND_STR" { + return(PARS_RND_STR_TOKEN); +} + +"ROW_PRINTF" { + return(PARS_ROW_PRINTF_TOKEN); +} + +"COMMIT" { + return(PARS_COMMIT_TOKEN); +} + +"ROLLBACK" { + return(PARS_ROLLBACK_TOKEN); +} + +"WORK" { + return(PARS_WORK_TOKEN); +} + +{ID} { + yylval = sym_tab_add_id(pars_sym_tab_global, + (byte*)yytext, + ut_strlen(yytext)); + return(PARS_ID_TOKEN); +} + +".." { + return(PARS_DDOT_TOKEN); +} + +":=" { + return(PARS_ASSIGN_TOKEN); +} + +"<=" { + return(PARS_LE_TOKEN); +} + +">=" { + return(PARS_GE_TOKEN); +} + +"<>" { + return(PARS_NE_TOKEN); +} + +"(" { + + return((int)(*yytext)); +} + +"=" { + + return((int)(*yytext)); +} + +">" { + + return((int)(*yytext)); +} + +"<" { + + return((int)(*yytext)); +} + +"," { + + return((int)(*yytext)); +} + +";" { + + return((int)(*yytext)); +} + +")" { + + return((int)(*yytext)); +} + +"+" { + + return((int)(*yytext)); +} + +"-" { + + return((int)(*yytext)); +} + +"*" { + + return((int)(*yytext)); +} + +"/" { + + return((int)(*yytext)); +} + +"%" { + + return((int)(*yytext)); +} + +"{" { + + return((int)(*yytext)); +} + +"}" { + + return((int)(*yytext)); +} + +"?" { + + return((int)(*yytext)); +} + +"/*" BEGIN(comment); /* eat up comment */ + +<comment>[^*\n]* +<comment>[^*\n]*\n +<comment>"*"+[^*/\n]* +<comment>"*"+[^*/\n]*\n +<comment>"*"+"/" BEGIN(INITIAL); + +[ \t\n]+ /* eat up whitespace */ + + +. { + printf("Unrecognized character: %s\n", yytext); + + ut_error; + + return(0); +} + +%% diff --git a/innobase/pars/pars0opt.c b/innobase/pars/pars0opt.c new file mode 100644 index 00000000000..5d187ad2faf --- /dev/null +++ b/innobase/pars/pars0opt.c @@ -0,0 +1,1238 @@ +/****************************************************** +Simple SQL optimizer + +(c) 1997 Innobase Oy + +Created 12/21/1997 Heikki Tuuri +*******************************************************/ + +#include "pars0opt.h" + +#ifdef UNIV_NONINL +#include "pars0opt.ic" +#endif + +#include "row0sel.h" +#include "row0ins.h" +#include "row0upd.h" +#include "dict0dict.h" +#include "dict0mem.h" +#include "que0que.h" +#include "pars0grm.h" +#include "pars0pars.h" +#include "lock0lock.h" + +#define OPT_EQUAL 1 /* comparison by = */ +#define OPT_COMPARISON 2 /* comparison by <, >, <=, or >= */ + +#define OPT_NOT_COND 1 +#define OPT_END_COND 2 +#define OPT_TEST_COND 3 +#define OPT_SCROLL_COND 4 + + +/*********************************************************************** +Inverts a comparison operator. */ +static +int +opt_invert_cmp_op( +/*==============*/ + /* out: the equivalent operator when the order of + the arguments is switched */ + int op) /* in: operator */ +{ + if (op == '<') { + return('>'); + } else if (op == '>') { + return('<'); + } else if (op == '=') { + return('='); + } else if (op == PARS_LE_TOKEN) { + return(PARS_GE_TOKEN); + } else if (op == PARS_GE_TOKEN) { + return(PARS_LE_TOKEN); + } else { + ut_error; + } + + return(0); +} + +/*********************************************************************** +Checks if the value of an expression can be calculated BEFORE the nth table +in a join is accessed. If this is the case, it can possibly be used in an +index search for the nth table. */ +static +ibool +opt_check_exp_determined_before( +/*============================*/ + /* out: TRUE if already determined */ + que_node_t* exp, /* in: expression */ + sel_node_t* sel_node, /* in: select node */ + ulint nth_table) /* in: nth table will be accessed */ +{ + func_node_t* func_node; + sym_node_t* sym_node; + dict_table_t* table; + que_node_t* arg; + ulint i; + + ut_ad(exp && sel_node); + + if (que_node_get_type(exp) == QUE_NODE_FUNC) { + func_node = exp; + + arg = func_node->args; + + while (arg) { + if (!opt_check_exp_determined_before(arg, sel_node, + nth_table)) { + return(FALSE); + } + + arg = que_node_get_next(arg); + } + + return(TRUE); + } + + ut_a(que_node_get_type(exp) == QUE_NODE_SYMBOL); + + sym_node = exp; + + if (sym_node->token_type != SYM_COLUMN) { + + return(TRUE); + } + + for (i = 0; i < nth_table; i++) { + + table = sel_node_get_nth_plan(sel_node, i)->table; + + if (sym_node->table == table) { + + return(TRUE); + } + } + + return(FALSE); +} + +/*********************************************************************** +Looks in a comparison condition if a column value is already restricted by +it BEFORE the nth table is accessed. */ +static +que_node_t* +opt_look_for_col_in_comparison_before( +/*==================================*/ + /* out: expression restricting the + value of the column, or NULL if not + known */ + ulint cmp_type, /* in: OPT_EQUAL, OPT_COMPARISON */ + ulint col_no, /* in: column number */ + func_node_t* search_cond, /* in: comparison condition */ + sel_node_t* sel_node, /* in: select node */ + ulint nth_table, /* in: nth table in a join (a query + from a single table is considered a + join of 1 table) */ + ulint* op) /* out: comparison operator ('=', + PARS_GE_TOKEN, ... ); this is inverted + if the column appears on the right + side */ +{ + sym_node_t* sym_node; + dict_table_t* table; + que_node_t* exp; + que_node_t* arg; + + ut_ad(search_cond); + + ut_a((search_cond->func == '<') + || (search_cond->func == '>') + || (search_cond->func == '=') + || (search_cond->func == PARS_GE_TOKEN) + || (search_cond->func == PARS_LE_TOKEN)); + + table = sel_node_get_nth_plan(sel_node, nth_table)->table; + + if ((cmp_type == OPT_EQUAL) && (search_cond->func != '=')) { + + return(NULL); + + } else if ((cmp_type == OPT_COMPARISON) + && (search_cond->func != '<') + && (search_cond->func != '>') + && (search_cond->func != PARS_GE_TOKEN) + && (search_cond->func != PARS_LE_TOKEN)) { + + return(NULL); + } + + arg = search_cond->args; + + if (que_node_get_type(arg) == QUE_NODE_SYMBOL) { + sym_node = arg; + + if ((sym_node->token_type == SYM_COLUMN) + && (sym_node->table == table) + && (sym_node->col_no == col_no)) { + + /* sym_node contains the desired column id */ + + /* Check if the expression on the right side of the + operator is already determined */ + + exp = que_node_get_next(arg); + + if (opt_check_exp_determined_before(exp, sel_node, + nth_table)) { + *op = search_cond->func; + + return(exp); + } + } + } + + exp = search_cond->args; + arg = que_node_get_next(arg); + + if (que_node_get_type(arg) == QUE_NODE_SYMBOL) { + sym_node = arg; + + if ((sym_node->token_type == SYM_COLUMN) + && (sym_node->table == table) + && (sym_node->col_no == col_no)) { + + if (opt_check_exp_determined_before(exp, sel_node, + nth_table)) { + *op = opt_invert_cmp_op(search_cond->func); + + return(exp); + } + } + } + + return(NULL); +} + +/*********************************************************************** +Looks in a search condition if a column value is already restricted by the +search condition BEFORE the nth table is accessed. Takes into account that +if we will fetch in an ascending order, we cannot utilize an upper limit for +a column value; in a descending order, respectively, a lower limit. */ +static +que_node_t* +opt_look_for_col_in_cond_before( +/*============================*/ + /* out: expression restricting the + value of the column, or NULL if not + known */ + ulint cmp_type, /* in: OPT_EQUAL, OPT_COMPARISON */ + ulint col_no, /* in: column number */ + func_node_t* search_cond, /* in: search condition or NULL */ + sel_node_t* sel_node, /* in: select node */ + ulint nth_table, /* in: nth table in a join (a query + from a single table is considered a + join of 1 table) */ + ulint* op) /* out: comparison operator ('=', + PARS_GE_TOKEN, ... ) */ +{ + func_node_t* new_cond; + que_node_t* exp; + + if (search_cond == NULL) { + + return(NULL); + } + + ut_a(que_node_get_type(search_cond) == QUE_NODE_FUNC); + ut_a(search_cond->func != PARS_OR_TOKEN); + ut_a(search_cond->func != PARS_NOT_TOKEN); + + if (search_cond->func == PARS_AND_TOKEN) { + new_cond = search_cond->args; + + exp = opt_look_for_col_in_cond_before(cmp_type, col_no, + new_cond, sel_node, nth_table, op); + if (exp) { + + return(exp); + } + + new_cond = que_node_get_next(new_cond); + + exp = opt_look_for_col_in_cond_before(cmp_type, col_no, + new_cond, sel_node, nth_table, op); + return(exp); + } + + exp = opt_look_for_col_in_comparison_before(cmp_type, col_no, + search_cond, sel_node, nth_table, op); + if (exp == NULL) { + + return(NULL); + } + + /* If we will fetch in an ascending order, we cannot utilize an upper + limit for a column value; in a descending order, respectively, a lower + limit */ + + if (sel_node->asc && ((*op == '<') || (*op == PARS_LE_TOKEN))) { + + return(NULL); + + } else if (!sel_node->asc && ((*op == '>') || (*op == PARS_GE_TOKEN))) { + + return(NULL); + } + + return(exp); +} + +/*********************************************************************** +Calculates the goodness for an index according to a select node. The +goodness is 4 times the number of first fields in index whose values we +already know exactly in the query. If we have a comparison condition for +an additional field, 2 point are added. If the index is unique, and we know +all the unique fields for the index we add 1024 points. For a clustered index +we add 1 point. */ +static +ulint +opt_calc_index_goodness( +/*====================*/ + /* out: goodness */ + dict_index_t* index, /* in: index */ + sel_node_t* sel_node, /* in: parsed select node */ + ulint nth_table, /* in: nth table in a join */ + que_node_t** index_plan, /* in/out: comparison expressions for + this index */ + ulint* last_op) /* out: last comparison operator, if + goodness > 1 */ +{ + que_node_t* exp; + ulint goodness; + ulint n_fields; + ulint col_no; + ulint mix_id_col_no; + ulint op; + ulint j; + + goodness = 0; + + /* Note that as higher level node pointers in the B-tree contain + page addresses as the last field, we must not put more fields in + the search tuple than dict_index_get_n_unique_in_tree(index); see + the note in btr_cur_search_to_nth_level. */ + + n_fields = dict_index_get_n_unique_in_tree(index); + + mix_id_col_no = dict_table_get_sys_col_no(index->table, DATA_MIX_ID); + + for (j = 0; j < n_fields; j++) { + + col_no = dict_index_get_nth_col_no(index, j); + + exp = opt_look_for_col_in_cond_before(OPT_EQUAL, col_no, + sel_node->search_cond, + sel_node, nth_table, &op); + if (col_no == mix_id_col_no) { + ut_ad(exp == NULL); + + index_plan[j] = NULL; + *last_op = '='; + goodness += 4; + } else if (exp) { + /* The value for this column is exactly known already + at this stage of the join */ + + index_plan[j] = exp; + *last_op = op; + goodness += 4; + } else { + /* Look for non-equality comparisons */ + + exp = opt_look_for_col_in_cond_before(OPT_COMPARISON, + col_no, sel_node->search_cond, + sel_node, nth_table, &op); + if (exp) { + index_plan[j] = exp; + *last_op = op; + goodness += 2; + } + + break; + } + } + + if (goodness >= 4 * dict_index_get_n_unique(index)) { + goodness += 1024; + + if (index->type & DICT_CLUSTERED) { + + goodness += 1024; + } + } + + if (index->type & DICT_CLUSTERED) { + + goodness++; + } + + return(goodness); +} + +/*********************************************************************** +Calculates the number of matched fields based on an index goodness. */ +UNIV_INLINE +ulint +opt_calc_n_fields_from_goodness( +/*============================*/ + /* out: number of excatly or partially matched + fields */ + ulint goodness) /* in: goodness */ +{ + return(((goodness % 1024) + 2) / 4); +} + +/*********************************************************************** +Converts a comparison operator to the corresponding search mode PAGE_CUR_GE, +... */ +UNIV_INLINE +ulint +opt_op_to_search_mode( +/*==================*/ + /* out: search mode */ + ibool asc, /* in: TRUE if the rows should be fetched in an + ascending order */ + ulint op) /* in: operator '=', PARS_GE_TOKEN, ... */ +{ + if (op == '=') { + if (asc) { + return(PAGE_CUR_GE); + } else { + return(PAGE_CUR_LE); + } + } else if (op == '<') { + ut_a(!asc); + return(PAGE_CUR_L); + } else if (op == '>') { + ut_a(asc); + return(PAGE_CUR_G); + } else if (op == PARS_GE_TOKEN) { + ut_a(asc); + return(PAGE_CUR_GE); + } else if (op == PARS_LE_TOKEN) { + ut_a(!asc); + return(PAGE_CUR_LE); + } else { + ut_error; + } + + return(0); +} + +/*********************************************************************** +Determines if a node is an argument node of a function node. */ +static +ibool +opt_is_arg( +/*=======*/ + /* out: TRUE if is an argument */ + que_node_t* arg_node, /* in: possible argument node */ + func_node_t* func_node) /* in: function node */ +{ + que_node_t* arg; + + arg = func_node->args; + + while (arg) { + if (arg == arg_node) { + + return(TRUE); + } + + arg = que_node_get_next(arg); + } + + return(FALSE); +} + +/*********************************************************************** +Decides if the fetching of rows should be made in a descending order, and +also checks that the chosen query plan produces a result which satisfies +the order-by. */ +static +void +opt_check_order_by( +/*===============*/ + sel_node_t* sel_node) /* in: select node; asserts an error + if the plan does not agree with the + order-by */ +{ + order_node_t* order_node; + dict_table_t* order_table; + ulint order_col_no; + plan_t* plan; + ulint i; + + if (!sel_node->order_by) { + + return; + } + + order_node = sel_node->order_by; + order_col_no = order_node->column->col_no; + order_table = order_node->column->table; + + /* If there is an order-by clause, the first non-exactly matched field + in the index used for the last table in the table list should be the + column defined in the order-by clause, and for all the other tables + we should get only at most a single row, otherwise we cannot presently + calculate the order-by, as we have no sort utility */ + + for (i = 0; i < sel_node->n_tables; i++) { + + plan = sel_node_get_nth_plan(sel_node, i); + + if (i < sel_node->n_tables - 1) { + ut_a(dict_index_get_n_unique(plan->index) + <= plan->n_exact_match); + } else { + ut_a(plan->table == order_table); + + ut_a((dict_index_get_n_unique(plan->index) + <= plan->n_exact_match) + || (dict_index_get_nth_col_no(plan->index, + plan->n_exact_match) + == order_col_no)); + } + } +} + +/*********************************************************************** +Optimizes a select. Decides which indexes to tables to use. The tables +are accessed in the order that they were written to the FROM part in the +select statement. */ +static +void +opt_search_plan_for_table( +/*======================*/ + sel_node_t* sel_node, /* in: parsed select node */ + ulint i, /* in: this is the ith table */ + dict_table_t* table) /* in: table */ +{ + plan_t* plan; + dict_index_t* index; + dict_index_t* best_index; + ulint n_fields; + ulint goodness; + ulint last_op; + ulint best_goodness; + ulint best_last_op; + ulint mix_id_pos; + que_node_t* index_plan[128]; + que_node_t* best_index_plan[128]; + + plan = sel_node_get_nth_plan(sel_node, i); + + plan->table = table; + plan->asc = sel_node->asc; + plan->pcur_is_open = FALSE; + plan->cursor_at_end = FALSE; + + /* Calculate goodness for each index of the table */ + + index = dict_table_get_first_index(table); + best_goodness = 0; + + while (index) { + goodness = opt_calc_index_goodness(index, sel_node, i, + index_plan, &last_op); + if (goodness > best_goodness) { + + best_index = index; + best_goodness = goodness; + n_fields = opt_calc_n_fields_from_goodness(goodness); + + ut_memcpy(best_index_plan, index_plan, + n_fields * sizeof(void*)); + best_last_op = last_op; + } + + index = dict_table_get_next_index(index); + } + + plan->index = best_index; + + n_fields = opt_calc_n_fields_from_goodness(best_goodness); + + if (n_fields == 0) { + plan->tuple = NULL; + plan->n_exact_match = 0; + } else { + plan->tuple = dtuple_create(pars_sym_tab_global->heap, + n_fields); + dict_index_copy_types(plan->tuple, plan->index, n_fields); + + plan->tuple_exps = mem_heap_alloc(pars_sym_tab_global->heap, + n_fields * sizeof(void*)); + + ut_memcpy(plan->tuple_exps, best_index_plan, + n_fields * sizeof(void*)); + if (best_last_op == '=') { + plan->n_exact_match = n_fields; + } else { + plan->n_exact_match = n_fields - 1; + } + + plan->mode = opt_op_to_search_mode(sel_node->asc, + best_last_op); + } + + if ((best_index->type & DICT_CLUSTERED) + && (plan->n_exact_match >= dict_index_get_n_unique(best_index))) { + + plan->unique_search = TRUE; + } else { + plan->unique_search = FALSE; + } + + if ((table->type != DICT_TABLE_ORDINARY) + && (best_index->type & DICT_CLUSTERED)) { + + plan->mixed_index = TRUE; + + mix_id_pos = table->mix_len; + + if (mix_id_pos < n_fields) { + /* We have to add the mix id as a (string) literal + expression to the tuple_exps */ + + plan->tuple_exps[mix_id_pos] = + sym_tab_add_str_lit(pars_sym_tab_global, + table->mix_id_buf, + table->mix_id_len); + } + } else { + plan->mixed_index = FALSE; + } + + plan->old_vers_heap = NULL; + + btr_pcur_init(&(plan->pcur)); + btr_pcur_init(&(plan->clust_pcur)); +} + +/*********************************************************************** +Looks at a comparison condition and decides if it can, and need, be tested for +a table AFTER the table has been accessed. */ +static +ulint +opt_classify_comparison( +/*====================*/ + /* out: OPT_NOT_COND if not for this + table, else OPT_END_COND, + OPT_TEST_COND, or OPT_SCROLL_COND, + where the last means that the + condition need not be tested, except + when scroll cursors are used */ + sel_node_t* sel_node, /* in: select node */ + ulint i, /* in: ith table in the join */ + func_node_t* cond) /* in: comparison condition */ +{ + plan_t* plan; + ulint n_fields; + ulint op; + ulint j; + + ut_ad(cond && sel_node); + + plan = sel_node_get_nth_plan(sel_node, i); + + /* Check if the condition is determined after the ith table has been + accessed, but not after the i - 1:th */ + + if (!opt_check_exp_determined_before(cond, sel_node, i + 1)) { + + return(OPT_NOT_COND); + } + + if ((i > 0) && opt_check_exp_determined_before(cond, sel_node, i)) { + + return(OPT_NOT_COND); + } + + /* If the condition is an exact match condition used in constructing + the search tuple, it is classified as OPT_END_COND */ + + if (plan->tuple) { + n_fields = dtuple_get_n_fields(plan->tuple); + } else { + n_fields = 0; + } + + for (j = 0; j < plan->n_exact_match; j++) { + + if (opt_is_arg(plan->tuple_exps[j], cond)) { + + return(OPT_END_COND); + } + } + + /* If the condition is an non-exact match condition used in + constructing the search tuple, it is classified as OPT_SCROLL_COND. + When the cursor is positioned, and if a non-scroll cursor is used, + there is no need to test this condition; if a scroll cursor is used + the testing is necessary when the cursor is reversed. */ + + if ((n_fields > plan->n_exact_match) + && opt_is_arg(plan->tuple_exps[n_fields - 1], cond)) { + + return(OPT_SCROLL_COND); + } + + /* If the condition is a non-exact match condition on the first field + in index for which there is no exact match, and it limits the search + range from the opposite side of the search tuple already BEFORE we + access the table, it is classified as OPT_END_COND */ + + if ((dict_index_get_n_fields(plan->index) > plan->n_exact_match) + && opt_look_for_col_in_comparison_before( + OPT_COMPARISON, + dict_index_get_nth_col_no(plan->index, + plan->n_exact_match), + cond, sel_node, i, &op)) { + + if (sel_node->asc && ((op == '<') || (op == PARS_LE_TOKEN))) { + + return(OPT_END_COND); + } + + if (!sel_node->asc && ((op == '>') || (op == PARS_GE_TOKEN))) { + + return(OPT_END_COND); + } + } + + /* Otherwise, cond is classified as OPT_TEST_COND */ + + return(OPT_TEST_COND); +} + +/*********************************************************************** +Recursively looks for test conditions for a table in a join. */ +static +void +opt_find_test_conds( +/*================*/ + sel_node_t* sel_node, /* in: select node */ + ulint i, /* in: ith table in the join */ + func_node_t* cond) /* in: conjunction of search + conditions or NULL */ +{ + func_node_t* new_cond; + ulint class; + plan_t* plan; + + if (cond == NULL) { + + return; + } + + if (cond->func == PARS_AND_TOKEN) { + new_cond = cond->args; + + opt_find_test_conds(sel_node, i, new_cond); + + new_cond = que_node_get_next(new_cond); + + opt_find_test_conds(sel_node, i, new_cond); + + return; + } + + plan = sel_node_get_nth_plan(sel_node, i); + + class = opt_classify_comparison(sel_node, i, cond); + + if (class == OPT_END_COND) { + UT_LIST_ADD_LAST(cond_list, plan->end_conds, cond); + + } else if (class == OPT_TEST_COND) { + UT_LIST_ADD_LAST(cond_list, plan->other_conds, cond); + + } +} + +/*********************************************************************** +Normalizes a list of comparison conditions so that a column of the table +appears on the left side of the comparison if possible. This is accomplished +by switching the arguments of the operator. */ +static +void +opt_normalize_cmp_conds( +/*====================*/ + func_node_t* cond, /* in: first in a list of comparison + conditions, or NULL */ + dict_table_t* table) /* in: table */ +{ + que_node_t* arg1; + que_node_t* arg2; + sym_node_t* sym_node; + + while (cond) { + arg1 = cond->args; + arg2 = que_node_get_next(arg1); + + if (que_node_get_type(arg2) == QUE_NODE_SYMBOL) { + + sym_node = arg2; + + if ((sym_node->token_type == SYM_COLUMN) + && (sym_node->table == table)) { + + /* Switch the order of the arguments */ + + cond->args = arg2; + que_node_list_add_last(NULL, arg2); + que_node_list_add_last(arg2, arg1); + + /* Invert the operator */ + cond->func = opt_invert_cmp_op(cond->func); + } + } + + cond = UT_LIST_GET_NEXT(cond_list, cond); + } +} + +/*********************************************************************** +Finds out the search condition conjuncts we can, and need, to test as the ith +table in a join is accessed. The search tuple can eliminate the need to test +some conjuncts. */ +static +void +opt_determine_and_normalize_test_conds( +/*===================================*/ + sel_node_t* sel_node, /* in: select node */ + ulint i) /* in: ith table in the join */ +{ + plan_t* plan; + + plan = sel_node_get_nth_plan(sel_node, i); + + UT_LIST_INIT(plan->end_conds); + UT_LIST_INIT(plan->other_conds); + + /* Recursively go through the conjuncts and classify them */ + + opt_find_test_conds(sel_node, i, sel_node->search_cond); + + opt_normalize_cmp_conds(UT_LIST_GET_FIRST(plan->end_conds), + plan->table); + + ut_a(UT_LIST_GET_LEN(plan->end_conds) >= plan->n_exact_match); +} + +/*********************************************************************** +Looks for occurrences of the columns of the table in the query subgraph and +adds them to the list of columns if an occurrence of the same column does not +already exist in the list. If the column is already in the list, puts a value +indirection to point to the occurrence in the column list, except if the +column occurrence we are looking at is in the column list, in which case +nothing is done. */ + +void +opt_find_all_cols( +/*==============*/ + ibool copy_val, /* in: if TRUE, new found columns are + added as columns to copy */ + dict_index_t* index, /* in: index of the table to use */ + sym_node_list_t* col_list, /* in: base node of a list where + to add new found columns */ + plan_t* plan, /* in: plan or NULL */ + que_node_t* exp) /* in: expression or condition or + NULL */ +{ + func_node_t* func_node; + que_node_t* arg; + sym_node_t* sym_node; + sym_node_t* col_node; + ulint col_pos; + + if (exp == NULL) { + + return; + } + + if (que_node_get_type(exp) == QUE_NODE_FUNC) { + func_node = exp; + + arg = func_node->args; + + while (arg) { + opt_find_all_cols(copy_val, index, col_list, plan, + arg); + arg = que_node_get_next(arg); + } + + return; + } + + ut_a(que_node_get_type(exp) == QUE_NODE_SYMBOL); + + sym_node = exp; + + if (sym_node->token_type != SYM_COLUMN) { + + return; + } + + if (sym_node->table != index->table) { + + return; + } + + /* Look for an occurrence of the same column in the plan column + list */ + + col_node = UT_LIST_GET_FIRST(*col_list); + + while (col_node) { + if (col_node->col_no == sym_node->col_no) { + + if (col_node == sym_node) { + /* sym_node was already in a list: do + nothing */ + + return; + } + + /* Put an indirection */ + sym_node->indirection = col_node; + sym_node->alias = col_node; + + return; + } + + col_node = UT_LIST_GET_NEXT(col_var_list, col_node); + } + + /* The same column did not occur in the list: add it */ + + UT_LIST_ADD_LAST(col_var_list, *col_list, sym_node); + + sym_node->copy_val = copy_val; + + /* Fill in the field_no fields in sym_node */ + + sym_node->field_nos[SYM_CLUST_FIELD_NO] + = dict_index_get_nth_col_pos( + dict_table_get_first_index(index->table), + sym_node->col_no); + if (!(index->type & DICT_CLUSTERED)) { + + ut_a(plan); + + col_pos = dict_index_get_nth_col_pos(index, sym_node->col_no); + + if (col_pos == ULINT_UNDEFINED) { + + plan->must_get_clust = TRUE; + } + + sym_node->field_nos[SYM_SEC_FIELD_NO] = col_pos; + } +} + +/*********************************************************************** +Looks for occurrences of the columns of the table in conditions which are +not yet determined AFTER the join operation has fetched a row in the ith +table. The values for these column must be copied to dynamic memory for +later use. */ +static +void +opt_find_copy_cols( +/*===============*/ + sel_node_t* sel_node, /* in: select node */ + ulint i, /* in: ith table in the join */ + func_node_t* search_cond) /* in: search condition or NULL */ +{ + func_node_t* new_cond; + plan_t* plan; + + if (search_cond == NULL) { + + return; + } + + ut_ad(que_node_get_type(search_cond) == QUE_NODE_FUNC); + + if (search_cond->func == PARS_AND_TOKEN) { + new_cond = search_cond->args; + + opt_find_copy_cols(sel_node, i, new_cond); + + new_cond = que_node_get_next(new_cond); + + opt_find_copy_cols(sel_node, i, new_cond); + + return; + } + + if (!opt_check_exp_determined_before(search_cond, sel_node, i + 1)) { + + /* Any ith table columns occurring in search_cond should be + copied, as this condition cannot be tested already on the + fetch from the ith table */ + + plan = sel_node_get_nth_plan(sel_node, i); + + opt_find_all_cols(TRUE, plan->index, &(plan->columns), plan, + search_cond); + } +} + +/*********************************************************************** +Classifies the table columns according to whether we use the column only while +holding the latch on the page, or whether we have to copy the column value to +dynamic memory. Puts the first occurrence of a column to either list in the +plan node, and puts indirections to later occurrences of the column. */ +static +void +opt_classify_cols( +/*==============*/ + sel_node_t* sel_node, /* in: select node */ + ulint i) /* in: ith table in the join */ +{ + plan_t* plan; + que_node_t* exp; + + plan = sel_node_get_nth_plan(sel_node, i); + + /* The final value of the following field will depend on the + environment of the select statement: */ + + plan->must_get_clust = FALSE; + + UT_LIST_INIT(plan->columns); + + /* All select list columns should be copied: therefore TRUE as the + first argument */ + + exp = sel_node->select_list; + + while (exp) { + opt_find_all_cols(TRUE, plan->index, &(plan->columns), plan, + exp); + exp = que_node_get_next(exp); + } + + opt_find_copy_cols(sel_node, i, sel_node->search_cond); + + /* All remaining columns in the search condition are temporary + columns: therefore FALSE */ + + opt_find_all_cols(FALSE, plan->index, &(plan->columns), plan, + sel_node->search_cond); +} + +/*********************************************************************** +Fills in the info in plan which is used in accessing a clustered index +record. The columns must already be classified for the plan node. */ +static +void +opt_clust_access( +/*=============*/ + sel_node_t* sel_node, /* in: select node */ + ulint n) /* in: nth table in select */ +{ + plan_t* plan; + dict_table_t* table; + dict_index_t* clust_index; + dict_index_t* index; + dfield_t* dfield; + mem_heap_t* heap; + ulint n_fields; + ulint col_no; + ulint pos; + ulint i; + + plan = sel_node_get_nth_plan(sel_node, n); + + index = plan->index; + + /* The final value of the following field depends on the environment + of the select statement: */ + + plan->no_prefetch = FALSE; + + if (index->type & DICT_CLUSTERED) { + plan->clust_map = NULL; + plan->clust_ref = NULL; + + return; + } + + table = index->table; + + clust_index = dict_table_get_first_index(table); + + n_fields = dict_index_get_n_unique(clust_index); + + heap = pars_sym_tab_global->heap; + + plan->clust_ref = dtuple_create(heap, n_fields); + + dict_index_copy_types(plan->clust_ref, clust_index, n_fields); + + plan->clust_map = mem_heap_alloc(heap, n_fields * sizeof(ulint)); + + for (i = 0; i < n_fields; i++) { + col_no = dict_index_get_nth_col_no(clust_index, i); + pos = dict_index_get_nth_col_pos(index, col_no); + + *(plan->clust_map + i) = pos; + + ut_ad((pos != ULINT_UNDEFINED) + || ((table->type == DICT_TABLE_CLUSTER_MEMBER) + && (i == table->mix_len))); + } + + if (table->type == DICT_TABLE_CLUSTER_MEMBER) { + + /* Preset the mix id field to the mix id constant */ + + dfield = dtuple_get_nth_field(plan->clust_ref, table->mix_len); + + dfield_set_data(dfield, mem_heap_alloc(heap, table->mix_id_len), + table->mix_id_len); + ut_memcpy(dfield_get_data(dfield), table->mix_id_buf, + table->mix_id_len); + } +} + +/*********************************************************************** +Optimizes a select. Decides which indexes to tables to use. The tables +are accessed in the order that they were written to the FROM part in the +select statement. */ + +void +opt_search_plan( +/*============*/ + sel_node_t* sel_node) /* in: parsed select node */ +{ + sym_node_t* table_node; + dict_table_t* table; + order_node_t* order_by; + ulint i; + + sel_node->plans = mem_heap_alloc(pars_sym_tab_global->heap, + sel_node->n_tables * sizeof(plan_t)); + + /* Analyze the search condition to find out what we know at each + join stage about the conditions that the columns of a table should + satisfy */ + + table_node = sel_node->table_list; + + if (sel_node->order_by == NULL) { + sel_node->asc = TRUE; + } else { + order_by = sel_node->order_by; + + sel_node->asc = order_by->asc; + } + + for (i = 0; i < sel_node->n_tables; i++) { + + table = table_node->table; + + /* Choose index through which to access the table */ + + opt_search_plan_for_table(sel_node, i, table); + + /* Determine the search condition conjuncts we can test at + this table; normalize the end conditions */ + + opt_determine_and_normalize_test_conds(sel_node, i); + + table_node = que_node_get_next(table_node); + } + + table_node = sel_node->table_list; + + for (i = 0; i < sel_node->n_tables; i++) { + + /* Classify the table columns into those we only need to access + but not copy, and to those we must copy to dynamic memory */ + + opt_classify_cols(sel_node, i); + + /* Calculate possible info for accessing the clustered index + record */ + + opt_clust_access(sel_node, i); + + table_node = que_node_get_next(table_node); + } + + /* Check that the plan obeys a possible order-by clause: if not, + an assertion error occurs */ + + opt_check_order_by(sel_node); + +#ifdef UNIV_SQL_DEBUG + opt_print_query_plan(sel_node); +#endif +} + +/************************************************************************ +Prints info of a query plan. */ + +void +opt_print_query_plan( +/*=================*/ + sel_node_t* sel_node) /* in: select node */ +{ + plan_t* plan; + ulint n_fields; + ulint i; + + printf("QUERY PLAN FOR A SELECT NODE\n"); + + if (sel_node->asc) { + printf("Asc. search; "); + } else { + printf("Desc. search; "); + } + + if (sel_node->set_x_locks) { + printf("sets row x-locks; "); + ut_a(sel_node->row_lock_mode == LOCK_X); + ut_a(!sel_node->consistent_read); + } else if (sel_node->consistent_read) { + printf("consistent read; "); + } else { + ut_a(sel_node->row_lock_mode == LOCK_S); + printf("sets row s-locks; "); + } + + printf("\n"); + + for (i = 0; i < sel_node->n_tables; i++) { + plan = sel_node_get_nth_plan(sel_node, i); + + if (plan->tuple) { + n_fields = dtuple_get_n_fields(plan->tuple); + } else { + n_fields = 0; + } + + printf( + "Table %s index %s; exact m. %lu, match %lu, end conds %lu\n", + plan->table->name, plan->index->name, + plan->n_exact_match, n_fields, + UT_LIST_GET_LEN(plan->end_conds)); + } +} diff --git a/innobase/pars/pars0pars.c b/innobase/pars/pars0pars.c new file mode 100644 index 00000000000..f6c51f3905a --- /dev/null +++ b/innobase/pars/pars0pars.c @@ -0,0 +1,2038 @@ +/****************************************************** +SQL parser + +(c) 1996 Innobase Oy + +Created 11/19/1996 Heikki Tuuri +*******************************************************/ + +/* Historical note: Innobase executed its first SQL string (CREATE TABLE) +on 1/27/1998 */ + +#include "pars0pars.h" + +#ifdef UNIV_NONINL +#include "pars0pars.ic" +#endif + +#include "row0sel.h" +#include "row0ins.h" +#include "row0upd.h" +#include "dict0dict.h" +#include "dict0mem.h" +#include "dict0crea.h" +#include "que0que.h" +#include "pars0grm.h" +#include "pars0opt.h" +#include "data0data.h" +#include "data0type.h" +#include "trx0trx.h" +#include "trx0roll.h" +#include "lock0lock.h" +#include "odbc0odbc.h" +#include "eval0eval.h" + +/* If the following is set TRUE, the lexer will print the SQL string +as it tokenizes it */ + +ibool pars_print_lexed = FALSE; + +/* Global variable used while parsing a single procedure or query : the code is +NOT re-entrant */ +sym_tab_t* pars_sym_tab_global; + +/* Global variables used to denote certain reserved words, used in +constructing the parsing tree */ + +pars_res_word_t pars_to_char_token = {PARS_TO_CHAR_TOKEN}; +pars_res_word_t pars_to_number_token = {PARS_TO_NUMBER_TOKEN}; +pars_res_word_t pars_to_binary_token = {PARS_TO_BINARY_TOKEN}; +pars_res_word_t pars_binary_to_number_token = {PARS_BINARY_TO_NUMBER_TOKEN}; +pars_res_word_t pars_substr_token = {PARS_SUBSTR_TOKEN}; +pars_res_word_t pars_replstr_token = {PARS_REPLSTR_TOKEN}; +pars_res_word_t pars_concat_token = {PARS_CONCAT_TOKEN}; +pars_res_word_t pars_instr_token = {PARS_INSTR_TOKEN}; +pars_res_word_t pars_length_token = {PARS_LENGTH_TOKEN}; +pars_res_word_t pars_sysdate_token = {PARS_SYSDATE_TOKEN}; +pars_res_word_t pars_printf_token = {PARS_PRINTF_TOKEN}; +pars_res_word_t pars_assert_token = {PARS_ASSERT_TOKEN}; +pars_res_word_t pars_rnd_token = {PARS_RND_TOKEN}; +pars_res_word_t pars_rnd_str_token = {PARS_RND_STR_TOKEN}; +pars_res_word_t pars_count_token = {PARS_COUNT_TOKEN}; +pars_res_word_t pars_sum_token = {PARS_SUM_TOKEN}; +pars_res_word_t pars_distinct_token = {PARS_DISTINCT_TOKEN}; +pars_res_word_t pars_int_token = {PARS_INT_TOKEN}; +pars_res_word_t pars_char_token = {PARS_CHAR_TOKEN}; +pars_res_word_t pars_float_token = {PARS_FLOAT_TOKEN}; +pars_res_word_t pars_update_token = {PARS_UPDATE_TOKEN}; +pars_res_word_t pars_asc_token = {PARS_ASC_TOKEN}; +pars_res_word_t pars_desc_token = {PARS_DESC_TOKEN}; +pars_res_word_t pars_open_token = {PARS_OPEN_TOKEN}; +pars_res_word_t pars_close_token = {PARS_CLOSE_TOKEN}; +pars_res_word_t pars_consistent_token = {PARS_CONSISTENT_TOKEN}; +pars_res_word_t pars_unique_token = {PARS_UNIQUE_TOKEN}; +pars_res_word_t pars_clustered_token = {PARS_CLUSTERED_TOKEN}; + +/* Global variable used to denote the '*' in SELECT * FROM.. */ +#define PARS_STAR_DENOTER 12345678 +ulint pars_star_denoter = PARS_STAR_DENOTER; + + +/************************************************************************* +Determines the class of a function code. */ +static +ulint +pars_func_get_class( +/*================*/ + /* out: function class: PARS_FUNC_ARITH, ... */ + int func) /* in: function code: '=', PARS_GE_TOKEN, ... */ +{ + if ((func == '+') || (func == '-') || (func == '*') || (func == '/')) { + + return(PARS_FUNC_ARITH); + + } else if ((func == '=') || (func == '<') || (func == '>') + || (func == PARS_GE_TOKEN) || (func == PARS_LE_TOKEN) + || (func == PARS_NE_TOKEN)) { + + return(PARS_FUNC_CMP); + + } else if ((func == PARS_AND_TOKEN) || (func == PARS_OR_TOKEN) + || (func == PARS_NOT_TOKEN)) { + + return(PARS_FUNC_LOGICAL); + + } else if ((func == PARS_COUNT_TOKEN) || (func == PARS_SUM_TOKEN)) { + + return(PARS_FUNC_AGGREGATE); + + } else if ((func == PARS_TO_CHAR_TOKEN) + || (func == PARS_TO_NUMBER_TOKEN) + || (func == PARS_TO_BINARY_TOKEN) + || (func == PARS_BINARY_TO_NUMBER_TOKEN) + || (func == PARS_SUBSTR_TOKEN) + || (func == PARS_CONCAT_TOKEN) + || (func == PARS_LENGTH_TOKEN) + || (func == PARS_INSTR_TOKEN) + || (func == PARS_SYSDATE_TOKEN) + || (func == PARS_NOTFOUND_TOKEN) + || (func == PARS_PRINTF_TOKEN) + || (func == PARS_ASSERT_TOKEN) + || (func == PARS_RND_TOKEN) + || (func == PARS_RND_STR_TOKEN) + || (func == PARS_REPLSTR_TOKEN)) { + + return(PARS_FUNC_PREDEFINED); + } else { + return(PARS_FUNC_OTHER); + } +} + +/************************************************************************* +Parses an operator or predefined function expression. */ +static +func_node_t* +pars_func_low( +/*==========*/ + /* out, own: function node in a query tree */ + int func, /* in: function token code */ + que_node_t* arg) /* in: first argument in the argument list */ +{ + func_node_t* node; + + node = mem_heap_alloc(pars_sym_tab_global->heap, sizeof(func_node_t)); + + node->common.type = QUE_NODE_FUNC; + dfield_set_data(&(node->common.val), NULL, 0); + node->common.val_buf_size = 0; + + node->func = func; + + node->class = pars_func_get_class(func); + + node->args = arg; + + UT_LIST_ADD_LAST(func_node_list, pars_sym_tab_global->func_node_list, + node); + return(node); +} + +/************************************************************************* +Parses a function expression. */ + +func_node_t* +pars_func( +/*======*/ + /* out, own: function node in a query tree */ + que_node_t* res_word,/* in: function name reserved word */ + que_node_t* arg) /* in: first argument in the argument list */ +{ + return(pars_func_low(((pars_res_word_t*)res_word)->code, arg)); +} + +/************************************************************************* +Parses an operator expression. */ + +func_node_t* +pars_op( +/*====*/ + /* out, own: function node in a query tree */ + int func, /* in: operator token code */ + que_node_t* arg1, /* in: first argument */ + que_node_t* arg2) /* in: second argument or NULL for an unary + operator */ +{ + que_node_list_add_last(NULL, arg1); + + if (arg2) { + que_node_list_add_last(arg1, arg2); + } + + return(pars_func_low(func, arg1)); +} + +/************************************************************************* +Parses an ORDER BY clause. Order by a single column only is supported. */ + +order_node_t* +pars_order_by( +/*==========*/ + /* out, own: order-by node in a query tree */ + sym_node_t* column, /* in: column name */ + pars_res_word_t* asc) /* in: &pars_asc_token or pars_desc_token */ +{ + order_node_t* node; + + node = mem_heap_alloc(pars_sym_tab_global->heap, sizeof(order_node_t)); + + node->common.type = QUE_NODE_ORDER; + + node->column = column; + + if (asc == &pars_asc_token) { + node->asc = TRUE; + } else { + ut_a(asc == &pars_desc_token); + node->asc = FALSE; + } + + return(node); +} + +/************************************************************************* +Resolves the data type of a function in an expression. The argument data +types must already be resolved. */ +static +void +pars_resolve_func_data_type( +/*========================*/ + func_node_t* node) /* in: function node */ +{ + que_node_t* arg; + ulint func; + + ut_a(que_node_get_type(node) == QUE_NODE_FUNC); + + arg = node->args; + + func = node->func; + + if ((func == PARS_SUM_TOKEN) + || (func == '+') || (func == '-') || (func == '*') + || (func == '/') || (func == '+')) { + + /* Inherit the data type from the first argument (which must + not be the SQL null literal whose type is DATA_ERROR) */ + + ut_a(dtype_get_mtype(que_node_get_data_type(arg)) + != DATA_ERROR); + dtype_copy(que_node_get_data_type(node), + que_node_get_data_type(arg)); + + ut_a(dtype_get_mtype(que_node_get_data_type(node)) == DATA_INT); + + } else if (func == PARS_COUNT_TOKEN) { + ut_a(arg); + dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0); + + } else if (func == PARS_TO_CHAR_TOKEN) { + ut_a(dtype_get_mtype(que_node_get_data_type(arg)) == DATA_INT); + dtype_set(que_node_get_data_type(node), DATA_VARCHAR, + DATA_ENGLISH, 0, 0); + } else if (func == PARS_TO_BINARY_TOKEN) { + ut_a(dtype_get_mtype(que_node_get_data_type(arg)) == DATA_INT); + dtype_set(que_node_get_data_type(node), DATA_VARCHAR, + DATA_ENGLISH, 0, 0); + } else if (func == PARS_TO_NUMBER_TOKEN) { + ut_a(dtype_get_mtype(que_node_get_data_type(arg)) + == DATA_VARCHAR); + dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0); + + } else if (func == PARS_BINARY_TO_NUMBER_TOKEN) { + ut_a(dtype_get_mtype(que_node_get_data_type(arg)) + == DATA_VARCHAR); + dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0); + + } else if (func == PARS_LENGTH_TOKEN) { + ut_a(dtype_get_mtype(que_node_get_data_type(arg)) + == DATA_VARCHAR); + dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0); + + } else if (func == PARS_INSTR_TOKEN) { + ut_a(dtype_get_mtype(que_node_get_data_type(arg)) + == DATA_VARCHAR); + dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0); + + } else if (func == PARS_SYSDATE_TOKEN) { + ut_a(arg == NULL); + dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0); + + } else if ((func == PARS_SUBSTR_TOKEN) + || (func == PARS_CONCAT_TOKEN)) { + + ut_a(dtype_get_mtype(que_node_get_data_type(arg)) + == DATA_VARCHAR); + dtype_set(que_node_get_data_type(node), DATA_VARCHAR, + DATA_ENGLISH, 0, 0); + + } else if ((func == '>') || (func == '<') || (func == '=') + || (func == PARS_GE_TOKEN) + || (func == PARS_LE_TOKEN) + || (func == PARS_NE_TOKEN) + || (func == PARS_AND_TOKEN) + || (func == PARS_OR_TOKEN) + || (func == PARS_NOT_TOKEN) + || (func == PARS_NOTFOUND_TOKEN)) { + + /* We currently have no iboolean type: use integer type */ + dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0); + + } else if (func == PARS_RND_TOKEN) { + ut_a(dtype_get_mtype(que_node_get_data_type(arg)) == DATA_INT); + + dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0); + + } else if (func == PARS_RND_STR_TOKEN) { + ut_a(dtype_get_mtype(que_node_get_data_type(arg)) == DATA_INT); + + dtype_set(que_node_get_data_type(node), DATA_VARCHAR, + DATA_ENGLISH, 0, 0); + } else { + ut_error; + } +} + +/************************************************************************* +Resolves the meaning of variables in an expression and the data types of +functions. It is an error if some identifier cannot be resolved here. */ +static +void +pars_resolve_exp_variables_and_types( +/*=================================*/ + sel_node_t* select_node, /* in: select node or NULL; if + this is not NULL then the variable + sym nodes are added to the + copy_variables list of select_node */ + que_node_t* exp_node) /* in: expression */ +{ + func_node_t* func_node; + que_node_t* arg; + sym_node_t* sym_node; + sym_node_t* node; + + ut_a(exp_node); + + if (que_node_get_type(exp_node) == QUE_NODE_FUNC) { + func_node = exp_node; + + arg = func_node->args; + + while (arg) { + pars_resolve_exp_variables_and_types(select_node, arg); + + arg = que_node_get_next(arg); + } + + pars_resolve_func_data_type(func_node); + + return; + } + + ut_a(que_node_get_type(exp_node) == QUE_NODE_SYMBOL); + + sym_node = exp_node; + + if (sym_node->resolved) { + + return; + } + + /* Not resolved yet: look in the symbol table for a variable + or a cursor with the same name */ + + node = UT_LIST_GET_FIRST(pars_sym_tab_global->sym_list); + + while (node) { + if (node->resolved + && ((node->token_type == SYM_VAR) + || (node->token_type == SYM_CURSOR)) + && node->name + && (sym_node->name_len == node->name_len) + && (ut_memcmp(sym_node->name, node->name, + node->name_len) == 0)) { + + /* Found a variable or a cursor declared with + the same name */ + + break; + } + + node = UT_LIST_GET_NEXT(sym_list, node); + } + + if (!node) { + printf("PARSER ERROR: Unresolved identifier %s\n", + sym_node->name); + } + + ut_a(node); + + sym_node->resolved = TRUE; + sym_node->token_type = SYM_IMPLICIT_VAR; + sym_node->alias = node; + sym_node->indirection = node; + + if (select_node) { + UT_LIST_ADD_LAST(col_var_list, select_node->copy_variables, + sym_node); + } + + dfield_set_type(que_node_get_val(sym_node), + que_node_get_data_type(node)); +} + +/************************************************************************* +Resolves the meaning of variables in an expression list. It is an error if +some identifier cannot be resolved here. Resolves also the data types of +functions. */ +static +void +pars_resolve_exp_list_variables_and_types( +/*======================================*/ + sel_node_t* select_node, /* in: select node or NULL */ + que_node_t* exp_node) /* in: expression list first node, or + NULL */ +{ + while (exp_node) { + pars_resolve_exp_variables_and_types(select_node, exp_node); + + exp_node = que_node_get_next(exp_node); + } +} + +/************************************************************************* +Resolves the columns in an expression. */ +static +void +pars_resolve_exp_columns( +/*=====================*/ + sym_node_t* table_node, /* in: first node in a table list */ + que_node_t* exp_node) /* in: expression */ +{ + func_node_t* func_node; + que_node_t* arg; + sym_node_t* sym_node; + dict_table_t* table; + sym_node_t* t_node; + dict_col_t* col; + ulint n_cols; + ulint i; + + ut_a(exp_node); + + if (que_node_get_type(exp_node) == QUE_NODE_FUNC) { + func_node = exp_node; + + arg = func_node->args; + + while (arg) { + pars_resolve_exp_columns(table_node, arg); + + arg = que_node_get_next(arg); + } + + return; + } + + ut_a(que_node_get_type(exp_node) == QUE_NODE_SYMBOL); + + sym_node = exp_node; + + if (sym_node->resolved) { + + return; + } + + /* Not resolved yet: look in the table list for a column with the + same name */ + + t_node = table_node; + + while (t_node) { + table = t_node->table; + + n_cols = dict_table_get_n_user_cols(table); + + for (i = 0; i < n_cols; i++) { + col = dict_table_get_nth_col(table, i); + + if ((sym_node->name_len == ut_strlen(col->name)) + && (0 == ut_memcmp(sym_node->name, col->name, + sym_node->name_len))) { + /* Found */ + sym_node->resolved = TRUE; + sym_node->token_type = SYM_COLUMN; + sym_node->table = table; + sym_node->col_no = i; + sym_node->prefetch_buf = NULL; + + dfield_set_type(&(sym_node->common.val), + dict_col_get_type(col)); + return; + } + } + + t_node = que_node_get_next(t_node); + } +} + +/************************************************************************* +Resolves the meaning of columns in an expression list. */ +static +void +pars_resolve_exp_list_columns( +/*==========================*/ + sym_node_t* table_node, /* in: first node in a table list */ + que_node_t* exp_node) /* in: expression list first node, or + NULL */ +{ + while (exp_node) { + pars_resolve_exp_columns(table_node, exp_node); + + exp_node = que_node_get_next(exp_node); + } +} + +/************************************************************************* +Retrieves the stored procedure definition for a procedure name. */ +static +void +pars_retrieve_procedure_def( +/*========================*/ + sym_node_t* sym_node) /* in: procedure name node */ +{ + ut_a(sym_node); + ut_a(que_node_get_type(sym_node) == QUE_NODE_SYMBOL); + + sym_node->resolved = TRUE; + sym_node->token_type = SYM_PROCEDURE_NAME; + + sym_node->procedure_def = dict_procedure_get((char*)sym_node->name, + NULL); + ut_a(sym_node->procedure_def); +} + +/************************************************************************* +Retrieves the table definition for a table name id. */ +static +void +pars_retrieve_table_def( +/*====================*/ + sym_node_t* sym_node) /* in: table node */ +{ + char* table_name; + + ut_a(sym_node); + ut_a(que_node_get_type(sym_node) == QUE_NODE_SYMBOL); + + sym_node->resolved = TRUE; + sym_node->token_type = SYM_TABLE; + + table_name = (char*) sym_node->name; + + sym_node->table = dict_table_get_low(table_name); + + ut_a(sym_node->table); +} + +/************************************************************************* +Retrieves the table definitions for a list of table name ids. */ +static +ulint +pars_retrieve_table_list_defs( +/*==========================*/ + /* out: number of tables */ + sym_node_t* sym_node) /* in: first table node in list */ +{ + ulint count = 0; + + if (sym_node == NULL) { + + return(count); + } + + while (sym_node) { + pars_retrieve_table_def(sym_node); + + count++; + + sym_node = que_node_get_next(sym_node); + } + + return(count); +} + +/************************************************************************* +Adds all columns to the select list if the query is SELECT * FROM ... */ +static +void +pars_select_all_columns( +/*====================*/ + sel_node_t* select_node) /* in: select node already containing + the table list */ +{ + sym_node_t* col_node; + sym_node_t* table_node; + dict_table_t* table; + dict_col_t* col; + ulint i; + + select_node->select_list = NULL; + + table_node = select_node->table_list; + + while (table_node) { + table = table_node->table; + + for (i = 0; i < dict_table_get_n_user_cols(table); i++) { + + col = dict_table_get_nth_col(table, i); + + col_node = sym_tab_add_id(pars_sym_tab_global, + (byte*)col->name, + ut_strlen(col->name)); + select_node->select_list + = que_node_list_add_last( + select_node->select_list, + col_node); + } + + table_node = que_node_get_next(table_node); + } +} + +/************************************************************************* +Parses a select list; creates a query graph node for the whole SELECT +statement. */ + +sel_node_t* +pars_select_list( +/*=============*/ + /* out, own: select node in a query + tree */ + que_node_t* select_list, /* in: select list */ + sym_node_t* into_list) /* in: variables list or NULL */ +{ + sel_node_t* node; + + node = sel_node_create(pars_sym_tab_global->heap); + + node->select_list = select_list; + node->into_list = into_list; + + pars_resolve_exp_list_variables_and_types(NULL, into_list); + + return(node); +} + +/************************************************************************* +Checks if the query is an aggregate query, in which case the selct list must +contain only aggregate function items. */ +static +void +pars_check_aggregate( +/*=================*/ + sel_node_t* select_node) /* in: select node already containing + the select list */ +{ + que_node_t* exp_node; + func_node_t* func_node; + ulint n_nodes = 0; + ulint n_aggregate_nodes = 0; + + exp_node = select_node->select_list; + + while (exp_node) { + + n_nodes++; + + if (que_node_get_type(exp_node) == QUE_NODE_FUNC) { + + func_node = exp_node; + + if (func_node->class == PARS_FUNC_AGGREGATE) { + + n_aggregate_nodes++; + } + } + + exp_node = que_node_get_next(exp_node); + } + + if (n_aggregate_nodes > 0) { + ut_a(n_nodes == n_aggregate_nodes); + + select_node->is_aggregate = TRUE; + } else { + select_node->is_aggregate = FALSE; + } +} + +/************************************************************************* +Parses a select statement. */ + +sel_node_t* +pars_select_statement( +/*==================*/ + /* out, own: select node in a query + tree */ + sel_node_t* select_node, /* in: select node already containing + the select list */ + sym_node_t* table_list, /* in: table list */ + que_node_t* search_cond, /* in: search condition or NULL */ + pars_res_word_t* for_update, /* in: NULL or &pars_update_token */ + pars_res_word_t* consistent_read,/* in: NULL or + &pars_consistent_token */ + order_node_t* order_by) /* in: NULL or an order-by node */ +{ + select_node->state = SEL_NODE_OPEN; + + select_node->table_list = table_list; + select_node->n_tables = pars_retrieve_table_list_defs(table_list); + + if (select_node->select_list == &pars_star_denoter) { + + /* SELECT * FROM ... */ + pars_select_all_columns(select_node); + } + + if (select_node->into_list) { + ut_a(que_node_list_get_len(select_node->into_list) + == que_node_list_get_len(select_node->select_list)); + } + + UT_LIST_INIT(select_node->copy_variables); + + pars_resolve_exp_list_columns(table_list, select_node->select_list); + pars_resolve_exp_list_variables_and_types(select_node, + select_node->select_list); + pars_check_aggregate(select_node); + + select_node->search_cond = search_cond; + + if (search_cond) { + pars_resolve_exp_columns(table_list, search_cond); + pars_resolve_exp_variables_and_types(select_node, search_cond); + } + + if (for_update) { + ut_a(!consistent_read); + select_node->set_x_locks = TRUE; + select_node->row_lock_mode = LOCK_X; + } else { + select_node->set_x_locks = FALSE; + select_node->row_lock_mode = LOCK_S; + } + + if (consistent_read) { + select_node->consistent_read = TRUE; + } else { + select_node->consistent_read = FALSE; + select_node->read_view = NULL; + } + + select_node->order_by = order_by; + + if (order_by) { + pars_resolve_exp_columns(table_list, order_by->column); + } + + /* The final value of the following fields depend on the environment + where the select statement appears: */ + + select_node->can_get_updated = FALSE; + select_node->explicit_cursor = NULL; + + opt_search_plan(select_node); + + return(select_node); +} + +/************************************************************************* +Parses a cursor declaration. */ + +que_node_t* +pars_cursor_declaration( +/*====================*/ + /* out: sym_node */ + sym_node_t* sym_node, /* in: cursor id node in the symbol + table */ + sel_node_t* select_node) /* in: select node */ +{ + sym_node->resolved = TRUE; + sym_node->token_type = SYM_CURSOR; + sym_node->cursor_def = select_node; + + select_node->state = SEL_NODE_CLOSED; + select_node->explicit_cursor = sym_node; + + return(sym_node); +} + +/************************************************************************* +Parses a delete or update statement start. */ + +upd_node_t* +pars_update_statement_start( +/*========================*/ + /* out, own: update node in a query + tree */ + ibool is_delete, /* in: TRUE if delete */ + sym_node_t* table_sym, /* in: table name node */ + col_assign_node_t* col_assign_list)/* in: column assignment list, NULL + if delete */ +{ + upd_node_t* node; + + node = upd_node_create(pars_sym_tab_global->heap); + + node->is_delete = is_delete; + + node->table_sym = table_sym; + node->col_assign_list = col_assign_list; + + return(node); +} + +/************************************************************************* +Parses a column assignment in an update. */ + +col_assign_node_t* +pars_column_assignment( +/*===================*/ + /* out: column assignment node */ + sym_node_t* column, /* in: column to assign */ + que_node_t* exp) /* in: value to assign */ +{ + col_assign_node_t* node; + + node = mem_heap_alloc(pars_sym_tab_global->heap, + sizeof(col_assign_node_t)); + node->common.type = QUE_NODE_COL_ASSIGNMENT; + + node->col = column; + node->val = exp; + + return(node); +} + +/************************************************************************* +Processes an update node assignment list. */ +static +void +pars_process_assign_list( +/*=====================*/ + upd_node_t* node) /* in: update node */ +{ + col_assign_node_t* col_assign_list; + sym_node_t* table_sym; + col_assign_node_t* assign_node; + upd_field_t* upd_field; + dict_index_t* clust_index; + sym_node_t* col_sym; + ulint changes_ord_field; + ulint changes_field_size; + ulint n_assigns; + ulint i; + + table_sym = node->table_sym; + col_assign_list = node->col_assign_list; + clust_index = dict_table_get_first_index(node->table); + + assign_node = col_assign_list; + n_assigns = 0; + + while (assign_node) { + pars_resolve_exp_columns(table_sym, assign_node->col); + pars_resolve_exp_columns(table_sym, assign_node->val); + pars_resolve_exp_variables_and_types(NULL, assign_node->val); + + /* ut_a(dtype_get_mtype(dfield_get_type( + que_node_get_val(assign_node->col))) + == dtype_get_mtype(dfield_get_type( + que_node_get_val(assign_node->val)))); */ + + /* Add to the update node all the columns found in assignment + values as columns to copy: therefore, TRUE */ + + opt_find_all_cols(TRUE, clust_index, &(node->columns), NULL, + assign_node->val); + n_assigns++; + + assign_node = que_node_get_next(assign_node); + } + + node->update = upd_create(n_assigns, pars_sym_tab_global->heap); + + assign_node = col_assign_list; + + changes_field_size = UPD_NODE_NO_SIZE_CHANGE; + + for (i = 0; i < n_assigns; i++) { + upd_field = upd_get_nth_field(node->update, i); + + col_sym = assign_node->col; + + upd_field_set_field_no(upd_field, + dict_index_get_nth_col_pos(clust_index, + col_sym->col_no), + clust_index); + upd_field->exp = assign_node->val; + + if (!dtype_is_fixed_size( + dict_index_get_nth_type(clust_index, + upd_field->field_no))) { + changes_field_size = 0; + } + + assign_node = que_node_get_next(assign_node); + } + + /* Find out if the update can modify an ordering field in any index */ + + changes_ord_field = UPD_NODE_NO_ORD_CHANGE; + + if (row_upd_changes_some_index_ord_field(node->table, node->update)) { + changes_ord_field = 0; + } + + node->cmpl_info = changes_ord_field | changes_field_size; +} + +/************************************************************************* +Parses an update or delete statement. */ + +upd_node_t* +pars_update_statement( +/*==================*/ + /* out, own: update node in a query + tree */ + upd_node_t* node, /* in: update node */ + sym_node_t* cursor_sym, /* in: pointer to a cursor entry in + the symbol table or NULL */ + que_node_t* search_cond) /* in: search condition or NULL */ +{ + sym_node_t* table_sym; + sel_node_t* sel_node; + plan_t* plan; + + table_sym = node->table_sym; + + pars_retrieve_table_def(table_sym); + node->table = table_sym->table; + + UT_LIST_INIT(node->columns); + + /* Make the single table node into a list of table nodes of length 1 */ + + que_node_list_add_last(NULL, table_sym); + + if (cursor_sym) { + pars_resolve_exp_variables_and_types(NULL, cursor_sym); + + sel_node = cursor_sym->alias->cursor_def; + + node->searched_update = FALSE; + } else { + sel_node = pars_select_list(NULL, NULL); + + pars_select_statement(sel_node, table_sym, search_cond, NULL, + NULL, NULL); + node->searched_update = TRUE; + sel_node->common.parent = node; + } + + node->select = sel_node; + + ut_a(!node->is_delete || (node->col_assign_list == NULL)); + ut_a(node->is_delete || (node->col_assign_list != NULL)); + + if (node->is_delete) { + node->cmpl_info = 0; + } else { + pars_process_assign_list(node); + } + + if (node->searched_update) { + node->has_clust_rec_x_lock = TRUE; + sel_node->set_x_locks = TRUE; + sel_node->row_lock_mode = LOCK_X; + } else { + node->has_clust_rec_x_lock = sel_node->set_x_locks; + } + + ut_a(sel_node->n_tables == 1); + ut_a(sel_node->consistent_read == FALSE); + ut_a(sel_node->order_by == NULL); + ut_a(sel_node->is_aggregate == FALSE); + + sel_node->can_get_updated = TRUE; + + node->state = UPD_NODE_UPDATE_CLUSTERED; + + plan = sel_node_get_nth_plan(sel_node, 0); + + plan->no_prefetch = TRUE; + + if (!((plan->index)->type & DICT_CLUSTERED)) { + + plan->must_get_clust = TRUE; + + node->pcur = &(plan->clust_pcur); + } else { + node->pcur = &(plan->pcur); + } + + if (!node->is_delete && node->searched_update + && (node->cmpl_info & UPD_NODE_NO_SIZE_CHANGE) + && (node->cmpl_info & UPD_NODE_NO_ORD_CHANGE)) { + + /* The select node can perform the update in-place */ + + ut_a(plan->asc); + + node->select_will_do_update = TRUE; + sel_node->select_will_do_update = TRUE; + sel_node->latch_mode = BTR_MODIFY_LEAF; + } + + return(node); +} + +/************************************************************************* +Parses an insert statement. */ + +ins_node_t* +pars_insert_statement( +/*==================*/ + /* out, own: update node in a query + tree */ + sym_node_t* table_sym, /* in: table name node */ + que_node_t* values_list, /* in: value expression list or NULL */ + sel_node_t* select) /* in: select condition or NULL */ +{ + ins_node_t* node; + dtuple_t* row; + ulint ins_type; + + ut_a(values_list || select); + ut_a(!values_list || !select); + + if (values_list) { + ins_type = INS_VALUES; + } else { + ins_type = INS_SEARCHED; + } + + pars_retrieve_table_def(table_sym); + + node = ins_node_create(ins_type, table_sym->table, + pars_sym_tab_global->heap); + + row = dtuple_create(pars_sym_tab_global->heap, + dict_table_get_n_cols(node->table)); + + dict_table_copy_types(row, table_sym->table); + + ins_node_set_new_row(node, row); + + node->select = select; + + if (select) { + select->common.parent = node; + + ut_a(que_node_list_get_len(select->select_list) + == dict_table_get_n_user_cols(table_sym->table)); + } + + node->values_list = values_list; + + if (node->values_list) { + pars_resolve_exp_list_variables_and_types(NULL, values_list); + + ut_a(que_node_list_get_len(values_list) + == dict_table_get_n_user_cols(table_sym->table)); + } + + return(node); +} + +/************************************************************************* +Set the type of a dfield. */ +static +void +pars_set_dfield_type( +/*=================*/ + dfield_t* dfield, /* in: dfield */ + pars_res_word_t* type) /* in: pointer to a type token */ +{ + if (type == &pars_int_token) { + + dtype_set(dfield_get_type(dfield), DATA_INT, 0, 4, 0); + + } else if (type == &pars_char_token) { + + dtype_set(dfield_get_type(dfield), DATA_VARCHAR, + DATA_ENGLISH, 0, 0); + } else { + ut_error; + } +} + +/************************************************************************* +Parses a variable declaration. */ + +sym_node_t* +pars_variable_declaration( +/*======================*/ + /* out, own: symbol table node of type + SYM_VAR */ + sym_node_t* node, /* in: symbol table node allocated for the + id of the variable */ + pars_res_word_t* type) /* in: pointer to a type token */ +{ + node->resolved = TRUE; + node->token_type = SYM_VAR; + + node->param_type = PARS_NOT_PARAM; + + pars_set_dfield_type(que_node_get_val(node), type); + + return(node); +} + +/************************************************************************* +Parses a procedure parameter declaration. */ + +sym_node_t* +pars_parameter_declaration( +/*=======================*/ + /* out, own: symbol table node of type + SYM_VAR */ + sym_node_t* node, /* in: symbol table node allocated for the + id of the parameter */ + ulint param_type, + /* in: PARS_INPUT or PARS_OUTPUT */ + pars_res_word_t* type) /* in: pointer to a type token */ +{ + ut_a((param_type == PARS_INPUT) || (param_type == PARS_OUTPUT)); + + pars_variable_declaration(node, type); + + node->param_type = param_type; + + return(node); +} + +/************************************************************************* +Sets the parent field in a query node list. */ +static +void +pars_set_parent_in_list( +/*====================*/ + que_node_t* node_list, /* in: first node in a list */ + que_node_t* parent) /* in: parent value to set in all + nodes of the list */ +{ + que_common_t* common; + + common = node_list; + + while (common) { + common->parent = parent; + + common = que_node_get_next(common); + } +} + +/************************************************************************* +Parses an elsif element. */ + +elsif_node_t* +pars_elsif_element( +/*===============*/ + /* out: elsif node */ + que_node_t* cond, /* in: if-condition */ + que_node_t* stat_list) /* in: statement list */ +{ + elsif_node_t* node; + + node = mem_heap_alloc(pars_sym_tab_global->heap, sizeof(elsif_node_t)); + + node->common.type = QUE_NODE_ELSIF; + + node->cond = cond; + + pars_resolve_exp_variables_and_types(NULL, cond); + + node->stat_list = stat_list; + + return(node); +} + +/************************************************************************* +Parses an if-statement. */ + +if_node_t* +pars_if_statement( +/*==============*/ + /* out: if-statement node */ + que_node_t* cond, /* in: if-condition */ + que_node_t* stat_list, /* in: statement list */ + que_node_t* else_part) /* in: else-part statement list + or elsif element list */ +{ + if_node_t* node; + elsif_node_t* elsif_node; + + node = mem_heap_alloc(pars_sym_tab_global->heap, sizeof(if_node_t)); + + node->common.type = QUE_NODE_IF; + + node->cond = cond; + + pars_resolve_exp_variables_and_types(NULL, cond); + + node->stat_list = stat_list; + + if (else_part && (que_node_get_type(else_part) == QUE_NODE_ELSIF)) { + + /* There is a list of elsif conditions */ + + node->else_part = NULL; + node->elsif_list = else_part; + + elsif_node = else_part; + + while (elsif_node) { + pars_set_parent_in_list(elsif_node->stat_list, node); + + elsif_node = que_node_get_next(elsif_node); + } + } else { + node->else_part = else_part; + node->elsif_list = NULL; + + pars_set_parent_in_list(else_part, node); + } + + pars_set_parent_in_list(stat_list, node); + + return(node); +} + +/************************************************************************* +Parses a while-statement. */ + +while_node_t* +pars_while_statement( +/*=================*/ + /* out: while-statement node */ + que_node_t* cond, /* in: while-condition */ + que_node_t* stat_list) /* in: statement list */ +{ + while_node_t* node; + + node = mem_heap_alloc(pars_sym_tab_global->heap, sizeof(while_node_t)); + + node->common.type = QUE_NODE_WHILE; + + node->cond = cond; + + pars_resolve_exp_variables_and_types(NULL, cond); + + node->stat_list = stat_list; + + pars_set_parent_in_list(stat_list, node); + + return(node); +} + +/************************************************************************* +Parses a for-loop-statement. */ + +for_node_t* +pars_for_statement( +/*===============*/ + /* out: for-statement node */ + sym_node_t* loop_var, /* in: loop variable */ + que_node_t* loop_start_limit,/* in: loop start expression */ + que_node_t* loop_end_limit, /* in: loop end expression */ + que_node_t* stat_list) /* in: statement list */ +{ + for_node_t* node; + + node = mem_heap_alloc(pars_sym_tab_global->heap, sizeof(for_node_t)); + + node->common.type = QUE_NODE_FOR; + + pars_resolve_exp_variables_and_types(NULL, loop_var); + pars_resolve_exp_variables_and_types(NULL, loop_start_limit); + pars_resolve_exp_variables_and_types(NULL, loop_end_limit); + + node->loop_var = loop_var->indirection; + + ut_a(loop_var->indirection); + + node->loop_start_limit = loop_start_limit; + node->loop_end_limit = loop_end_limit; + + node->stat_list = stat_list; + + pars_set_parent_in_list(stat_list, node); + + return(node); +} + +/************************************************************************* +Parses a return-statement. */ + +return_node_t* +pars_return_statement(void) +/*=======================*/ + /* out: return-statement node */ +{ + return_node_t* node; + + node = mem_heap_alloc(pars_sym_tab_global->heap, + sizeof(return_node_t)); + node->common.type = QUE_NODE_RETURN; + + return(node); +} + +/************************************************************************* +Parses an assignment statement. */ + +assign_node_t* +pars_assignment_statement( +/*======================*/ + /* out: assignment statement node */ + sym_node_t* var, /* in: variable to assign */ + que_node_t* val) /* in: value to assign */ +{ + assign_node_t* node; + + node = mem_heap_alloc(pars_sym_tab_global->heap, + sizeof(assign_node_t)); + node->common.type = QUE_NODE_ASSIGNMENT; + + node->var = var; + node->val = val; + + pars_resolve_exp_variables_and_types(NULL, var); + pars_resolve_exp_variables_and_types(NULL, val); + + ut_a(dtype_get_mtype(dfield_get_type(que_node_get_val(var))) + == dtype_get_mtype(dfield_get_type(que_node_get_val(val)))); + + return(node); +} + +/************************************************************************* +Parses a procedure call. */ + +func_node_t* +pars_procedure_call( +/*================*/ + /* out: function node */ + que_node_t* res_word,/* in: procedure name reserved word */ + que_node_t* args) /* in: argument list */ +{ + func_node_t* node; + + node = pars_func(res_word, args); + + pars_resolve_exp_list_variables_and_types(NULL, args); + + return(node); +} + +/************************************************************************* +Parses a fetch statement. */ + +fetch_node_t* +pars_fetch_statement( +/*=================*/ + /* out: fetch statement node */ + sym_node_t* cursor, /* in: cursor node */ + sym_node_t* into_list) /* in: variables to set */ +{ + sym_node_t* cursor_decl; + fetch_node_t* node; + + node = mem_heap_alloc(pars_sym_tab_global->heap, sizeof(fetch_node_t)); + + node->common.type = QUE_NODE_FETCH; + + pars_resolve_exp_variables_and_types(NULL, cursor); + pars_resolve_exp_list_variables_and_types(NULL, into_list); + + node->into_list = into_list; + + cursor_decl = cursor->alias; + + ut_a(cursor_decl->token_type == SYM_CURSOR); + + node->cursor_def = cursor_decl->cursor_def; + + ut_a(que_node_list_get_len(into_list) + == que_node_list_get_len(node->cursor_def->select_list)); + + return(node); +} + +/************************************************************************* +Parses an open or close cursor statement. */ + +open_node_t* +pars_open_statement( +/*================*/ + /* out: fetch statement node */ + ulint type, /* in: ROW_SEL_OPEN_CURSOR + or ROW_SEL_CLOSE_CURSOR */ + sym_node_t* cursor) /* in: cursor node */ +{ + sym_node_t* cursor_decl; + open_node_t* node; + + node = mem_heap_alloc(pars_sym_tab_global->heap, sizeof(open_node_t)); + + node->common.type = QUE_NODE_OPEN; + + pars_resolve_exp_variables_and_types(NULL, cursor); + + cursor_decl = cursor->alias; + + ut_a(cursor_decl->token_type == SYM_CURSOR); + + node->op_type = type; + node->cursor_def = cursor_decl->cursor_def; + + return(node); +} + +/************************************************************************* +Parses a row_printf-statement. */ + +row_printf_node_t* +pars_row_printf_statement( +/*======================*/ + /* out: row_printf-statement node */ + sel_node_t* sel_node) /* in: select node */ +{ + row_printf_node_t* node; + + node = mem_heap_alloc(pars_sym_tab_global->heap, + sizeof(row_printf_node_t)); + node->common.type = QUE_NODE_ROW_PRINTF; + + node->sel_node = sel_node; + + sel_node->common.parent = node; + + return(node); +} + +/************************************************************************* +Parses a commit statement. */ + +commit_node_t* +pars_commit_statement(void) +/*=======================*/ +{ + return(commit_node_create(pars_sym_tab_global->heap)); +} + +/************************************************************************* +Parses a rollback statement. */ + +roll_node_t* +pars_rollback_statement(void) +/*=========================*/ +{ + return(roll_node_create(pars_sym_tab_global->heap)); +} + +/************************************************************************* +Parses a column definition at a table creation. */ + +sym_node_t* +pars_column_def( +/*============*/ + /* out: column sym table node */ + sym_node_t* sym_node, /* in: column node in the symbol + table */ + pars_res_word_t* type) /* in: data type */ +{ + pars_set_dfield_type(que_node_get_val(sym_node), type); + + return(sym_node); +} + +/************************************************************************* +Parses a table creation operation. */ + +tab_node_t* +pars_create_table( +/*==============*/ + /* out: table create subgraph */ + sym_node_t* table_sym, /* in: table name node in the symbol + table */ + sym_node_t* column_defs, /* in: list of column names */ + void* not_fit_in_memory)/* in: a non-NULL pointer means that + this is a table which in simulations + should be simulated as not fitting + in memory; thread is put to sleep + to simulate disk accesses; NOTE that + this flag is not stored to the data + dictionary on disk, and the database + will forget about non-NULL value if + it has to reload the table definition + from disk */ +{ + dict_table_t* table; + sym_node_t* column; + tab_node_t* node; + dtype_t* dtype; + ulint n_cols; + + n_cols = que_node_list_get_len(column_defs); + + table = dict_mem_table_create(table_sym->name, 0, n_cols); + + if (not_fit_in_memory != NULL) { + table->does_not_fit_in_memory = TRUE; + } + + column = column_defs; + + while (column) { + dtype = dfield_get_type(que_node_get_val(column)); + + dict_mem_table_add_col(table, column->name, dtype->mtype, + dtype->prtype, dtype->len, + dtype->prec); + column->resolved = TRUE; + column->token_type = SYM_COLUMN; + + column = que_node_get_next(column); + } + + node = tab_create_graph_create(table, pars_sym_tab_global->heap); + + table_sym->resolved = TRUE; + table_sym->token_type = SYM_TABLE; + + return(node); +} + +/************************************************************************* +Parses an index creation operation. */ + +ind_node_t* +pars_create_index( +/*==============*/ + /* out: index create subgraph */ + pars_res_word_t* unique_def, /* in: not NULL if a unique index */ + pars_res_word_t* clustered_def, /* in: not NULL if a clustered index */ + sym_node_t* index_sym, /* in: index name node in the symbol + table */ + sym_node_t* table_sym, /* in: table name node in the symbol + table */ + sym_node_t* column_list) /* in: list of column names */ +{ + dict_index_t* index; + sym_node_t* column; + ind_node_t* node; + ulint n_fields; + ulint ind_type; + + n_fields = que_node_list_get_len(column_list); + + ind_type = 0; + + if (unique_def) { + ind_type = ind_type | DICT_UNIQUE; + } + + if (clustered_def) { + ind_type = ind_type | DICT_CLUSTERED; + } + + index = dict_mem_index_create(table_sym->name, index_sym->name, 0, + ind_type, n_fields); + column = column_list; + + while (column) { + dict_mem_index_add_field(index, column->name, 0); + + column->resolved = TRUE; + column->token_type = SYM_COLUMN; + + column = que_node_get_next(column); + } + + node = ind_create_graph_create(index, pars_sym_tab_global->heap); + + table_sym->resolved = TRUE; + table_sym->token_type = SYM_TABLE; + + index_sym->resolved = TRUE; + index_sym->token_type = SYM_TABLE; + + return(node); +} + +/************************************************************************* +Parses a procedure definition. */ + +que_fork_t* +pars_procedure_definition( +/*======================*/ + /* out: query fork node */ + sym_node_t* sym_node, /* in: procedure id node in the symbol + table */ + sym_node_t* param_list, /* in: parameter declaration list */ + que_node_t* stat_list) /* in: statement list */ +{ + proc_node_t* node; + que_fork_t* fork; + que_thr_t* thr; + mem_heap_t* heap; + + heap = pars_sym_tab_global->heap; + + fork = que_fork_create(NULL, NULL, QUE_FORK_PROCEDURE, heap); + fork->trx = NULL; + + thr = que_thr_create(fork, heap); + + node = mem_heap_alloc(heap, sizeof(proc_node_t)); + + node->common.type = QUE_NODE_PROC; + node->common.parent = thr; + + sym_node->token_type = SYM_PROCEDURE_NAME; + sym_node->resolved = TRUE; + + node->proc_id = sym_node; + node->param_list = param_list; + node->stat_list = stat_list; + + pars_set_parent_in_list(stat_list, node); + + node->sym_tab = pars_sym_tab_global; + + thr->child = node; + + pars_sym_tab_global->query_graph = fork; + + return(fork); +} + +/***************************************************************** +Parses a stored procedure call, when this is not within another stored +procedure, that is, the client issues a procedure call directly. */ + +que_fork_t* +pars_stored_procedure_call( +/*=======================*/ + /* out: query graph */ + sym_node_t* sym_node) /* in: stored procedure name */ +{ + call_node_t* node; + que_fork_t* fork; + que_thr_t* thr; + mem_heap_t* heap; + + heap = pars_sym_tab_global->heap; + + fork = que_fork_create(NULL, NULL, QUE_FORK_PROCEDURE_CALL, heap); + fork->trx = NULL; + + thr = que_thr_create(fork, heap); + + node = mem_heap_alloc(heap, sizeof(call_node_t)); + + thr->child = node; + + node->common.type = QUE_NODE_CALL; + node->common.parent = thr; + + sym_node->token_type = SYM_PROCEDURE_NAME; + + pars_retrieve_procedure_def(sym_node); + + node->procedure_def = sym_node->procedure_def; + node->proc_name = sym_node; + + node->sym_tab = pars_sym_tab_global; + + pars_sym_tab_global->query_graph = fork; + + return(fork); +} + +/***************************************************************** +Writes info about query parameter markers (denoted with '?' in ODBC) into a +buffer. */ + +ulint +pars_write_query_param_info( +/*========================*/ + /* out: number of bytes used for info in buf */ + byte* buf, /* in: buffer which must be big enough */ + que_fork_t* graph) /* in: parsed query graph */ +{ + que_thr_t* thr; + call_node_t* call_node; + dict_proc_t* procedure_def; + que_t* stored_graph; + proc_node_t* proc_node; + sym_node_t* param; + ulint n_params; + ibool is_input; + + /* We currently support parameter markers only in stored procedure + calls, and there ALL procedure parameters must be marked with '?': + no literal values are allowed */ + + thr = UT_LIST_GET_FIRST(graph->thrs); + + n_params = 0; + + if (que_node_get_type(thr->child) == QUE_NODE_CALL) { + call_node = thr->child; + + procedure_def = call_node->procedure_def; + + stored_graph = dict_procedure_reserve_parsed_copy( + procedure_def); + proc_node = que_fork_get_child(stored_graph); + + param = proc_node->param_list; + + while (param) { + if (param->param_type == PARS_INPUT) { + is_input = TRUE; + } else { + is_input = FALSE; + } + + mach_write_to_1(buf + 4 + n_params, is_input); + + n_params++; + + param = que_node_get_next(param); + } + + dict_procedure_release_parsed_copy(stored_graph); + } + + mach_write_to_4(buf, n_params); + + return(4 + n_params); +} + +/***************************************************************** +Reads stored procedure input parameter values from a buffer. */ + +void +pars_proc_read_input_params_from_buf( +/*=================================*/ + que_t* graph, /* in: query graph which contains a stored procedure */ + byte* buf) /* in: buffer */ +{ + que_thr_t* thr; + proc_node_t* proc_node; + sym_node_t* param; + byte* ptr; + ulint len; + lint odbc_len; + + ut_ad(graph->fork_type == QUE_FORK_PROCEDURE); + + thr = UT_LIST_GET_FIRST(graph->thrs); + + proc_node = thr->child; + + ptr = buf; + + param = proc_node->param_list; + + while (param) { + if (param->param_type == PARS_INPUT) { + odbc_len = (lint)mach_read_from_4(ptr); + + ptr += 4; + + if (odbc_len == SQL_NULL_DATA) { + len = UNIV_SQL_NULL; + } else { + len = (ulint)odbc_len; + } + + eval_node_copy_and_alloc_val(param, ptr, len); + + if (len != UNIV_SQL_NULL) { + ptr += len; + } + } + + param = que_node_get_next(param); + } + + ut_ad(ptr - buf < ODBC_DATAGRAM_SIZE); +} + +/***************************************************************** +Writes stored procedure output parameter values to a buffer. */ + +ulint +pars_proc_write_output_params_to_buf( +/*=================================*/ + /* out: bytes used in buf */ + byte* buf, /* in: buffer which must be big enough */ + que_t* graph) /* in: query graph which contains a stored procedure */ +{ + que_thr_t* thr; + proc_node_t* proc_node; + sym_node_t* param; + dfield_t* dfield; + byte* ptr; + ulint len; + lint odbc_len; + + ut_ad(graph->fork_type == QUE_FORK_PROCEDURE); + + thr = UT_LIST_GET_FIRST(graph->thrs); + + proc_node = thr->child; + + ptr = buf; + + param = proc_node->param_list; + + while (param) { + if (param->param_type == PARS_OUTPUT) { + dfield = que_node_get_val(param); + + len = dfield_get_len(dfield); + + if (len == UNIV_SQL_NULL) { + odbc_len = SQL_NULL_DATA; + } else { + odbc_len = (lint)len; + } + + mach_write_to_4(ptr, (ulint)odbc_len); + + ptr += 4; + + if (len != UNIV_SQL_NULL) { + ut_memcpy(ptr, dfield_get_data(dfield), len); + + ptr += len; + } + } + + param = que_node_get_next(param); + } + + ut_ad(ptr - buf < ODBC_DATAGRAM_SIZE); + + return((ulint)(ptr - buf)); +} + +/***************************************************************** +Retrieves characters to the lexical analyzer. */ + +void +pars_get_lex_chars( +/*===============*/ + char* buf, /* in/out: buffer where to copy */ + int* result, /* out: number of characters copied or EOF */ + int max_size) /* in: maximum number of characters which fit + in the buffer */ +{ + int len; + char print_buf[16]; + + len = pars_sym_tab_global->string_len + - pars_sym_tab_global->next_char_pos; + if (len == 0) { +#ifdef YYDEBUG + /* printf("SQL string ends\n"); */ +#endif + *result = 0; + + return; + } + + if (len > max_size) { + len = max_size; + } + + if (pars_print_lexed) { + + if (len >= 5) { + len = 5; + } + + ut_memcpy(print_buf, pars_sym_tab_global->sql_string + + pars_sym_tab_global->next_char_pos, len); + print_buf[len] = '\0'; + + printf("%s", print_buf); + } + + ut_memcpy(buf, pars_sym_tab_global->sql_string + + pars_sym_tab_global->next_char_pos, len); + *result = len; + + pars_sym_tab_global->next_char_pos += len; +} + +/***************************************************************** +Instructs the lexical analyzer to stop when it receives the EOF integer. */ + +int +yywrap(void) +/*========*/ + /* out: returns TRUE */ +{ + return(1); +} + +/***************************************************************** +Called by yyparse on error. */ + +void +yyerror( +/*====*/ + char* s) /* in: error message string */ +{ + ut_ad(s); + + printf("PARSER ERROR: Syntax error in SQL string\n"); + + ut_error; +} + +/***************************************************************** +Parses an SQL string returning the query graph. */ + +que_t* +pars_sql( +/*=====*/ + /* out, own: the query graph */ + char* str) /* in: SQL string */ +{ + sym_node_t* sym_node; + mem_heap_t* heap; + que_t* graph; + ulint len; + char* buf; + + ut_ad(str); + + heap = mem_heap_create(256); + + /* Currently, the parser is not reentrant: */ + + ut_ad(mutex_own(&(dict_sys->mutex))); + + pars_sym_tab_global = sym_tab_create(heap); + + len = ut_strlen(str); + buf = mem_heap_alloc(heap, len + 1); + ut_memcpy(buf, str, len + 1); + + pars_sym_tab_global->sql_string = buf; + pars_sym_tab_global->string_len = len; + pars_sym_tab_global->next_char_pos = 0; + + yyparse(); + + sym_node = UT_LIST_GET_FIRST(pars_sym_tab_global->sym_list); + + while (sym_node) { + ut_a(sym_node->resolved); + + sym_node = UT_LIST_GET_NEXT(sym_list, sym_node); + } + + graph = pars_sym_tab_global->query_graph; + + graph->sym_tab = pars_sym_tab_global; + + /* printf("SQL graph size %lu\n", mem_heap_get_size(heap)); */ + + return(graph); +} + +/********************************************************************** +Completes a query graph by adding query thread and fork nodes +above it and prepares the graph for running. The fork created is of +type QUE_FORK_MYSQL_INTERFACE. */ + +que_thr_t* +pars_complete_graph_for_exec( +/*=========================*/ + /* out: query thread node to run */ + que_node_t* node, /* in: root node for an incomplete + query graph */ + trx_t* trx, /* in: transaction handle */ + mem_heap_t* heap) /* in: memory heap from which allocated */ +{ + que_fork_t* fork; + que_thr_t* thr; + + fork = que_fork_create(NULL, NULL, QUE_FORK_MYSQL_INTERFACE, heap); + fork->trx = trx; + + thr = que_thr_create(fork, heap); + + thr->child = node; + + que_node_set_parent(node, thr); + + mutex_enter(&kernel_mutex); + + trx->graph = NULL; + + mutex_exit(&kernel_mutex); + + return(thr); +} diff --git a/innobase/pars/pars0sym.c b/innobase/pars/pars0sym.c new file mode 100644 index 00000000000..5d8fa306b2d --- /dev/null +++ b/innobase/pars/pars0sym.c @@ -0,0 +1,255 @@ +/****************************************************** +SQL parser symbol table + +(c) 1997 Innobase Oy + +Created 12/15/1997 Heikki Tuuri +*******************************************************/ + +#include "pars0sym.h" + +#ifdef UNIV_NONINL +#include "pars0sym.ic" +#endif + +#include "mem0mem.h" +#include "data0type.h" +#include "data0data.h" +#include "pars0pars.h" +#include "que0que.h" +#include "eval0eval.h" +#include "row0sel.h" + +/********************************************************************** +Creates a symbol table for a single stored procedure or query. */ + +sym_tab_t* +sym_tab_create( +/*===========*/ + /* out, own: symbol table */ + mem_heap_t* heap) /* in: memory heap where to create */ +{ + sym_tab_t* sym_tab; + + sym_tab = mem_heap_alloc(heap, sizeof(sym_tab_t)); + + UT_LIST_INIT(sym_tab->sym_list); + UT_LIST_INIT(sym_tab->func_node_list); + + sym_tab->heap = heap; + + return(sym_tab); +} + +/********************************************************************** +Frees the memory allocated dynamically AFTER parsing phase for variables +etc. in the symbol table. Does not free the mem heap where the table was +originally created. Frees also SQL explicit cursor definitions. */ + +void +sym_tab_free_private( +/*=================*/ + sym_tab_t* sym_tab) /* in, own: symbol table */ +{ + sym_node_t* sym; + func_node_t* func; + + sym = UT_LIST_GET_FIRST(sym_tab->sym_list); + + while (sym) { + eval_node_free_val_buf(sym); + + if (sym->prefetch_buf) { + sel_col_prefetch_buf_free(sym->prefetch_buf); + } + + if (sym->cursor_def) { + que_graph_free_recursive(sym->cursor_def); + } + + sym = UT_LIST_GET_NEXT(sym_list, sym); + } + + func = UT_LIST_GET_FIRST(sym_tab->func_node_list); + + while (func) { + eval_node_free_val_buf(func); + + func = UT_LIST_GET_NEXT(func_node_list, func); + } +} + +/********************************************************************** +Adds an integer literal to a symbol table. */ + +sym_node_t* +sym_tab_add_int_lit( +/*================*/ + /* out: symbol table node */ + sym_tab_t* sym_tab, /* in: symbol table */ + ulint val) /* in: integer value */ +{ + sym_node_t* node; + byte* data; + + node = mem_heap_alloc(sym_tab->heap, sizeof(sym_node_t)); + + node->common.type = QUE_NODE_SYMBOL; + + node->resolved = TRUE; + node->token_type = SYM_LIT; + + node->indirection = NULL; + + dtype_set(&(node->common.val.type), DATA_INT, 0, 4, 0); + + data = mem_heap_alloc(sym_tab->heap, 4); + mach_write_to_4(data, val); + + dfield_set_data(&(node->common.val), data, 4); + + node->common.val_buf_size = 0; + node->prefetch_buf = NULL; + node->cursor_def = NULL; + + UT_LIST_ADD_LAST(sym_list, sym_tab->sym_list, node); + + node->sym_table = sym_tab; + + return(node); +} + +/********************************************************************** +Adds a string literal to a symbol table. */ + +sym_node_t* +sym_tab_add_str_lit( +/*================*/ + /* out: symbol table node */ + sym_tab_t* sym_tab, /* in: symbol table */ + byte* str, /* in: string starting with a single + quote; the string literal will + extend to the next single quote, but + the quotes are not included in it */ + ulint len) /* in: string length */ +{ + sym_node_t* node; + byte* data; + ulint i; + + ut_a(len > 1); + ut_a(str[0] == '\''); + + node = mem_heap_alloc(sym_tab->heap, sizeof(sym_node_t)); + + node->common.type = QUE_NODE_SYMBOL; + + node->resolved = TRUE; + node->token_type = SYM_LIT; + + node->indirection = NULL; + + dtype_set(&(node->common.val.type), DATA_VARCHAR, DATA_ENGLISH, 0, 0); + + for (i = 1;; i++) { + ut_a(i < len); + + if (str[i] == '\'') { + + break; + } + } + + if (i > 1) { + data = mem_heap_alloc(sym_tab->heap, i - 1); + ut_memcpy(data, str + 1, i - 1); + } else { + data = NULL; + } + + dfield_set_data(&(node->common.val), data, i - 1); + + node->common.val_buf_size = 0; + node->prefetch_buf = NULL; + node->cursor_def = NULL; + + UT_LIST_ADD_LAST(sym_list, sym_tab->sym_list, node); + + node->sym_table = sym_tab; + + return(node); +} + +/********************************************************************** +Adds an SQL null literal to a symbol table. */ + +sym_node_t* +sym_tab_add_null_lit( +/*=================*/ + /* out: symbol table node */ + sym_tab_t* sym_tab) /* in: symbol table */ +{ + sym_node_t* node; + + node = mem_heap_alloc(sym_tab->heap, sizeof(sym_node_t)); + + node->common.type = QUE_NODE_SYMBOL; + + node->resolved = TRUE; + node->token_type = SYM_LIT; + + node->indirection = NULL; + + node->common.val.type.mtype = DATA_ERROR; + + dfield_set_data(&(node->common.val), NULL, UNIV_SQL_NULL); + + node->common.val_buf_size = 0; + node->prefetch_buf = NULL; + node->cursor_def = NULL; + + UT_LIST_ADD_LAST(sym_list, sym_tab->sym_list, node); + + node->sym_table = sym_tab; + + return(node); +} + +/********************************************************************** +Adds an identifier to a symbol table. */ + +sym_node_t* +sym_tab_add_id( +/*===========*/ + /* out: symbol table node */ + sym_tab_t* sym_tab, /* in: symbol table */ + byte* name, /* in: identifier name */ + ulint len) /* in: identifier length */ +{ + sym_node_t* node; + + node = mem_heap_alloc(sym_tab->heap, sizeof(sym_node_t)); + + node->common.type = QUE_NODE_SYMBOL; + + node->name = mem_heap_alloc(sym_tab->heap, len + 1); + node->resolved = FALSE; + node->indirection = NULL; + + ut_memcpy(node->name, name, len); + node->name[len] = '\0'; + + node->name_len = len; + + UT_LIST_ADD_LAST(sym_list, sym_tab->sym_list, node); + + dfield_set_data(&(node->common.val), NULL, UNIV_SQL_NULL); + + node->common.val_buf_size = 0; + node->prefetch_buf = NULL; + node->cursor_def = NULL; + + node->sym_table = sym_tab; + + return(node); +} |