Mercurial > ~dholland > hg > ag > index.cgi
diff tests/agcl/oldagsrc/good/cc-crash.cpp @ 0:13d2b8934445
Import AnaGram (near-)release tree into Mercurial.
author | David A. Holland |
---|---|
date | Sat, 22 Dec 2007 17:52:45 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/agcl/oldagsrc/good/cc-crash.cpp Sat Dec 22 17:52:45 2007 -0500 @@ -0,0 +1,3751 @@ + // C Prologue +/* + AnaGram, a System for Syntax Directed Programming + + A Dos Script Language + + Copyright (c) 1993, 1996 Parsifal Software. + All Rights Reserved. + +*/ + + +#include "stack.h" +#include "charsink.h" +#include "strdict.h" +#include "array.h" +#include "symbol.h" +#include "query.h" +#include <conio.h> + +#ifdef __BCPLUSPLUS__ + #define ARGS ((char **) args) + + extern unsigned _stklen = 0x4000; // set stack size + +#else + #define ARGS ((char const * const *) (char **) args) +#endif + + +// Define stacks for temporary storage + +stack <action_pointer> as(25); // Stack actions +stack <int> is(100); // Stack string indices +stack <char *> ps(1000,20); // Stack parameter strings +stack <query_item> qs(23); // Stack query items + + +// Define data structures for symbol table + +#define N_STRINGS 2000 + +string_accumulator sa(64000U,500); +string_dictionary sd(N_STRINGS); +array <symbol_table_entry> st(N_STRINGS); + + +/* + * AnaGram, A System for Syntax Directed Programming + * File generated by: ... + * + * AnaGram Parsing Engine + * Copyright 1993-2002 Parsifal Software. All Rights Reserved. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#ifndef CC-CRASH_H +#include "cc-crash.h" +#endif + +#ifndef CC-CRASH_H +#error Mismatched header file +#endif + +#include <ctype.h> +#include <stdio.h> + +#define RULE_CONTEXT (&((PCB).cs[(PCB).ssx])) +#define ERROR_CONTEXT ((PCB).cs[(PCB).error_frame_ssx]) +#define CONTEXT ((PCB).cs[(PCB).ssx]) + + + +cc-crash_pcb_type cc-crash_pcb; +#define PCB cc-crash_pcb +#define CHANGE_REDUCTION(x) cc-crash_change_reduction(cc-crash_##x##_token) +int cc-crash_change_reduction(cc-crash_token_type); + + +#line - "cc-crash.syn" +#include <process.h> +#include <stdlib.h> +#include <ctype.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <io.h> +#include <conio.h> +#include <dos.h> +#include <time.h> +#include "assert.h" + +#include "edit.h" + + +#include "screen.h" +#include "util.h" +#include "redirect.h" + +#define GET_CONTEXT CONTEXT.pointer = PCB.pointer;\ + CONTEXT.line=PCB.line;\ + CONTEXT.column = PCB.column; + + +int debug_switch = 0; +char *error_msg = NULL; +unsigned errorlevel_index; +int errorlevel; +int exitcode = 0; +int exitflag = 0; +int first_line = 1; +int first_column = 1; +unsigned stderr_index; + +void display_queries(screen_descriptor *); + +#define FIRST_LINE first_line +#define FIRST_COLUMN first_column + + +/***** + + Internal Functions + +*****/ + +long file_exists(void) { + FILE *f = fopen(sa--,"r"); + if (f != NULL) fclose(f); + return f != NULL; +} + +long directory_exists(void) { + struct find_t ff; + int result; + + sa << "\\*.*"; + result = _dos_findfirst(sa--,_A_SUBDIR,&ff); + return result == 0; +} + +long string_length(void) { + return size(sa--); +} + +long get_file_length(void) { + int handle = open(sa--, O_RDONLY); + long length; + if (handle < 0) return 0; + length = filelength(handle); + close(handle); + return length; +} + +long disk_space(void) { + struct diskfree_t free; + int drive = toupper(*(char *)sa--) - 64; + long avail; + + _dos_getdiskfree(drive, &free); + avail = (long) free.avail_clusters + * (long) free.bytes_per_sector + * (long) free.sectors_per_cluster; + return avail; +} + +long file_time(void) { + int handle = open(sa--, O_RDONLY); +#ifdef __BCPLUSPLUS__ + unsigned date, time; +#else + unsigned short date, time; +#endif + struct tm t; + + if (handle < 0) return 0; + _dos_getftime(handle, &date, &time); + close(handle); + t.tm_year = ((date & 0xfe00) >> 9) + 80; + t.tm_mon = ((date & 0x1e00) >> 5) - 1; + t.tm_mday = date & 0x001f; + ; + t.tm_hour = (time & 0xf800) >> 11; + t.tm_min = (time & 0x07e0) >> 5; + t.tm_sec = (time & 0x001f) << 1; + return mktime(&t); +} + + +// Support for reduction procecures + +// Compare top strings on string accumulator + +/* + pops top two strings from string accumulator using strcmp + and returns + -1 if first string is less than top string + 0 if strings match + +1 if top string is greater than first string +*/ + +int string_comp(void) { + int n = size(sa); + array<char> right_string(sa--, n+1); + return strcmp(sa--,right_string); +} + +/* + replace the top string on the stack, with a substring where the index + of the first character in the substring is given by "first" and the index + of the last character is given by "last" +*/ + +void extract(unsigned first, unsigned last) { + int n = last - first + 1; + assert (last >= first); + array <char> x((char *) sa-- + first, n+1); + x[n] = 0; + ++sa << x; +} + +/* + Look up the top string on the accumulator stack in the string dictionary. + If it has a value in the symbol table, replace it with the symbol table + value. If the value is numeric, convert it to integer. Otherwise, leave the + string untouched on the stack. +*/ + +void lookup(void) { + unsigned index = sd[sa]; + if (index == 0) return; + switch (st[index].type) { + case string_type: + case value_type: { + --sa; // discard name + ++sa << st[index].data.text; // stack value + break; + } + case integer_type: { + --sa; // discard name + (++sa).printf("%ld", st[index].data.integer); // convert to ascii + break; + } + } +} + +/* + Find the data type of a symbol and change the reduction accordingly. + Return the dictionary index for strings, and the value itself for integers. +*/ + +long name_type(void) { + unsigned index = sd << sa--; + switch (st[index].type) { + case value_type: + case string_type: { + CHANGE_REDUCTION(string_name); + return index; + } + case built_in_function_type: { + CHANGE_REDUCTION(built_in_name); + return index; + } + case undefined_type: { + CHANGE_REDUCTION(undefined_name); + return index; + } + case integer_type: return st[index].data.integer; + } + return 0; +} + +/* + Store a string formula. A string formula is a sequence of string identifiers + the values of which are to be concatenated. The parser has accumulated the + identifiers on the integer_stack, is. The formula is terminated by a zero + entry. +*/ + +int *formula(void) { + int n = size(is << 0); + int *f = new int[n]; + while (n--) is >> f[n]; + return f; +} + +/* + Make a copy of an action that has been identified in the text stream. + An action pointer was stacked at the beginning of the action text on the + action stack, as. +*/ + +action_pointer copy_action(void) { + action_pointer ap; + as >> ap; // pop action descriptor + unsigned length = (unsigned) (PCB.pointer - ap.pointer); + unsigned char *action = memdup(ap.pointer,length + 1); + action[length] = 0; + ap.pointer = action; + return ap; +} + + +// Internal Commands + +int echo(int, char *args[]) { + int i; + char *cs = ""; + for (i = 1; args[i]; i++) printf("%s%s", cs, args[i]), cs = " "; + printf("\n"); + fflush(stdout); + return 0; +} + +int pause(int, char *[]) { + int c; + while (kbhit()) getch(); // Empty buffer + printf("Press any key to continue . . .\n"); + c = getch(); + if (c == 3) exit(1); + return c; +} + +int exit_script(int n_args, char *args[]) { + if (n_args > 1) sscanf(args[1], "%ld", &exitcode); + exit(exitcode); + return exitcode; +} + +/* +int return_script(int n_args, char *args[]) { + if (n_args > 1) sscanf(args[1], "%ld", &exitcode); + PCB.exit_flag = AG_SUCCESS_CODE; + return exitcode; +} +*/ + +int subdirs(int, char *args[]) { + struct find_t file_block; + int flag; + int length = strlen(args[1]); + array <char> name(args[1],length + 5); + + strcat(name, "\\*.*"); + for(flag = _dos_findfirst(name, _A_SUBDIR, &file_block); + flag == 0; flag = _dos_findnext(&file_block)) { + if ((file_block.attrib & _A_SUBDIR) == 0) continue; + if (strcmp(file_block.name, ".") == 0) continue; + if (strcmp(file_block.name, "..") == 0) continue; + puts(file_block.name); + } + return 0; +} + +int files(int, char *args[]) { + struct find_t file_block; + int flag; + int length = strlen(args[1]); + array<char> name(args[1],length + 5); + + strcat(name, "\\*.*"); + for(flag = _dos_findfirst(name, 0, &file_block); + flag == 0; flag = _dos_findnext(&file_block)) { + puts(file_block.name); + } + return 0; +} + + +/***** + + Execute Command Line + +*****/ + + +void perform_action(action_pointer ap) { + dsl_pcb_type save_pcb = PCB; + + PCB.pointer = ap.pointer; + first_line = ap.line; + first_column = ap.column; + dsl(); + exitflag = PCB.exit_flag != AG_SUCCESS_CODE; + PCB = save_pcb; + if (exitflag) PCB.exit_flag = AG_SEMANTIC_ERROR_CODE; +} + +void exec(void) { + int n = size(ps << (char *) NULL); + int n_args = n - 1; + unsigned index; + int i; + + array <char *> args(n); + while (n--) ps >> args[n]; + + strupr(args[0]); + if (debug_switch) { + for (i = 0; args[i]; i++) fprintf(stderr, "%s ", args[i]); + fprintf(stderr,"\nPress any key to continue\n"); + while (!kbhit()); + getch(); + } + index = sd[args[0]]; + if (n_args == 1 && strlen(args[0]) == 2 && args[0][1] == ':') { + errorlevel = system(args[0]); + } + else if ( *args[0] && index) switch (st[index].type) { + case internal_type: { + errorlevel = (*st[index].data.proc)(n_args, args); + break; + } + case dos_type: { + int i; + for (i = 1; args[i]; i++) args[i][-1] = ' '; + errorlevel = system(args[0]); + assert(errorlevel >= 0); + break; + } + case action_type: { + action_descriptor d = *st[index].data.action; + stack <symbol_table_entry> old_entries(d.n_args); + for (i = 0; i < d.n_args && args[i+1]; i++) { + old_entries << st[d.args[i]]; + st[d.args[i]].type = value_type; + st[d.args[i]].data.text = memdup(args[i+1], 1 + strlen(args[i+1])); + } + perform_action(d.ap); + for (i = d.n_args; i--;) { + release(st[d.args[i]]); + old_entries >> st[d.args[i]]; + } + } + } + else { + errorlevel = spawnvp(P_WAIT,args[0],ARGS); + assert(errorlevel >= 0); + } + st[errorlevel_index].data.integer = errorlevel; + while (n_args--) --sa; + --ps; + if (kbhit()) { + int c = getch(); + if (c == 3) exit(1); + ungetch(c); + } +} + +void discard_temp_file(char *file_name) { + unlink(file_name); // Delete file + delete [] file_name; // Free storage for name +} + + +/***** + + Execute Command with piped input + +*****/ + + +void exec_pipe_in(char *file_name) { + { + redirect sin(STDIN, file_name); + exec(); + } + discard_temp_file(file_name); +} + + +/***** + + Execute Command with redirected I/O + +*****/ + +void exec_redirect_in(void) { + redirect sin(STDIN, sa--); + exec(); +} + +char *exec_pipe_out(void) { + fflush(stdout); + redirect sout(STDOUT); + exec(); + fflush(stdout); + return save_file(sout); +} + +char *exec_pipe_in_pipe_out(char *file_name) { + char *result; + { + redirect sin(STDIN, file_name); + fflush(stdout); + redirect sout(STDOUT); + exec(); + fflush(stdout); + result = save_file(sout); + } + discard_temp_file(file_name); + return result; +} + +char *exec_redirect_in_pipe_out(void) { + fflush(stdout); + redirect sout(STDOUT); + exec_redirect_in(); + fflush(stdout); + return save_file(sout); +} + +unsigned check_integer(void) { + unsigned index = sd << sa--; + if (st[index].type == integer_type) return index; + CHANGE_REDUCTION(undeclared_variable); + if (st[index].type == string_type) CHANGE_REDUCTION(string_variable); + return index; +} + +void assign_value(unsigned index) { + char *text = copy(sa--); + release(st[index]); + st[index].type = value_type; + st[index].data.text = text; +} + +void grab_output(char *temp_name) { + unlink(sa); // delete old file + rename(temp_name, sa--); // rename temp file + delete [] temp_name; // discard name string +} + +void append_output(char *temp_name) { + fflush(stdout); + redirect sout(STDOUT, sa--, 1); // append to file named on sa + redirect sin(STDIN, temp_name); + char buf[2000]; + int n; + while (1) { + n = read(STDIN, buf, 2000); + if (n == 0) break; + write(STDOUT, buf, n); + } + fflush(stdout); + unlink(temp_name); + delete [] temp_name; +} + +void action_string(void) { + action_pointer ap; + as >> ap; + unsigned length = (unsigned)(PCB.pointer - ap.pointer); + array <unsigned char> action(ap.pointer,length + 1); + action[length] = 0; + fflush(stdout); + redirect sout(STDOUT); + char *result; + + ap.pointer = action; + perform_action(ap); + fflush(stdout); + result = content(sout); + ++sa << result; + delete [] result; +} + + +// Program Control functions + +// If/else statement + +int do_if(int pc, int cc) { + action_pointer ap; + as >> ap; + if (!pc && cc && exitflag == 0) { + unsigned length = (unsigned) (PCB.pointer - ap.pointer); + array<unsigned char> q(ap.pointer, length+1); + q[length] = 0; + ap.pointer = q; + perform_action(ap); + } + return pc || cc; +} + +// While statement + +void do_while(int cc) { + unsigned length; + action_pointer ap; + as >> ap; + if (cc == 0) return; + length = (unsigned) (PCB.pointer - ap.pointer); + array<unsigned char> q(ap.pointer, length+1); + q[length] = 0; + ap.pointer = q; + perform_action(ap); + if (exitflag) return; + PCB.pointer = CONTEXT.pointer; + PCB.line = CONTEXT.line; + PCB.column = CONTEXT.column; +} + + +// For Statement +// Note that this is the for statement in the DOS batch languange for, not C + +void do_for_loop(void) { + int n,k; + char *q; + char *seps = " \t\v\f\r\n"; + action_pointer ap; + as >> ap; + unsigned length = (unsigned)(PCB.pointer - ap.pointer); + array <unsigned char> action(ap.pointer, length + 1); + action[length] = 0; + + ap.pointer = action; + n = size(sa); + array<char> text(sa--, n + 1); + + + unsigned index = sd << sa--; + + ++ps; + for (q = strtok(text, seps); q != NULL; q = strtok(NULL,seps)) { + if (*q == '(') { + int k = strlen(q) - 1; + assert(q[k] == ')'); + q[k] = 0; + q++; + } + else if (*q == '"') { + int k = strlen(q) - 1; + assert(q[k] == '"'); + q[k] = 0; + q++; + } + ps << q; + } + k = n = size(ps); + array<char *> args(n); + while (k--) ps >> args[k]; + --ps; + symbol_table_entry save_table_entry = st[index]; + st[index].type = value_type; + + for (k = 0; k < n && exitflag == 0; k++) { + st[index].data.text = args[k]; + perform_action(ap); + } + st[index] = save_table_entry; +} + +void invoke_script(void) { + int handle = open(sa, O_TEXT | O_RDONLY); + long size; + unsigned n; + action_pointer ap; + + if (handle < 0) { + fprintf(stderr,"Cannot open %s\n", (char *) sa--); + exit(1); + } + --sa; + size = filelength(handle); + assert(size < 65536L); + array <unsigned char> data((unsigned) size+1); + n = (unsigned) read(handle,data,(unsigned) size); + data[n] = 0; + close(handle); + exitflag = 0; + ap.pointer = data; + ap.line = ap.column = 1; + perform_action(ap); + st[errorlevel_index].data.integer = exitcode; + exitflag = exitcode = 0; + return; +} + +internal_commands_descriptor internal_commands[] = { + {"ECHO", echo}, + {"EXIT", exit_script}, + {"FILES", files}, + {"PAUSE", pause}, +// {"RETURN", return_script}, + {"SUBDIRS", subdirs}, + {NULL, NULL} +}; + +struct built_ins_descriptor built_ins[] = { + {"file_exists", file_exists}, + {"directory_exists", directory_exists}, + {"string_length", string_length}, + {"file_length", get_file_length}, + {"disk_space", disk_space}, + {"file_time", file_time}, + {NULL, NULL} +}; + +void set_extension(char *path, char *e) { + char s[_MAX_PATH]; + char drive[_MAX_DRIVE]; + char dir[_MAX_DIR]; + char file[_MAX_FNAME]; + char ext[_MAX_EXT]; + + _splitpath(path,drive,dir,file,ext); + _makepath(s, drive, dir, file, e); + ++sa << s; +} + +/* + Note that if this program is called without any arguments, it looks for a + script with the same name as the executable. Thus, to make an install + program that picks up the install script without any arguments, you simply + rename DSL.EXE to INSTALL.EXE. Then when you run it without any arguments + it will run the INSTALL.DSL script. +*/ + +void main(int argc, char *argv[]) { + int arg_number = 0; + int i = 1; + int j = 0; + + if (argv[0][0] == '.') argv[0] = "\\agex\\dsl\\wat32\\dsl.exe"; + init_dos_internals(); + set_arg(j++, argv[0]); + if (argc > i && (argv[i][0] == '/' || argv[i][0] == '-')) { + if (toupper(argv[i][1]) != 'D') { + printf("Unrecognized switch -- /%s\n",argv[i][1]); + return; + } + debug_switch = 1; + i++; + } + if (argc > i) arg_number = i++; + set_extension(argv[arg_number], "DSL"); + set_arg(j++,copy(sa)); + while (i < argc) set_arg(j++, argv[i++]); + define_integer("argc", j); + invoke_script(); // Takes file name from sa + exit(exitcode); +} +#line - "cc-crash.cpp" + +#ifndef CONVERT_CASE +#define CONVERT_CASE(c) (c) +#endif +#ifndef TAB_SPACING +#define TAB_SPACING 8 +#endif + +#define ag_rp_1(v) (++sa << sd[v], lookup()) + +#define ag_rp_2() (sa << '[') + +#define ag_rp_3() (concat(sa) << ']', lookup()) + +#define ag_rp_4() (concat(sa)) + +#define ag_rp_5() (concat(sa)) + +#define ag_rp_6(c) (++sa << c) + +#define ag_rp_7(c) (sa << c) + +#define ag_rp_8() (action_string()) + +#define ag_rp_9() (as << CONTEXT) + +static void ag_rp_10(void) { +#line - "cc-crash.syn" +action_pointer a; as >> a; +#line - "cc-crash.cpp" +} + +#define ag_rp_11() (++sa) + +#define ag_rp_12(c) (sa << c) + +#define ag_rp_13() (sa << '(') + +#define ag_rp_14() (concat(sa) << ')') + +#define ag_rp_15() (++sa) + +#define ag_rp_16(c) (sa << c) + +#define ag_rp_17(c) (sa << c) + +#define ag_rp_18() ('\a') + +#define ag_rp_19() ('\b') + +#define ag_rp_20() ('\f') + +#define ag_rp_21() ('\n') + +#define ag_rp_22() ('\r') + +#define ag_rp_23() ('\t') + +#define ag_rp_24() ('\v') + +#define ag_rp_25() ('\\') + +#define ag_rp_26() ('\?') + +#define ag_rp_27() ('\'') + +#define ag_rp_28() ('"') + +#define ag_rp_29(d) (d-'0') + +#define ag_rp_30(n, d) (8*n + d-'0') + +#define ag_rp_31(n, d) (8*n + d-'0') + +#define ag_rp_32(n) ((int) n) + +#define ag_rp_33(n, d) (16*n + d) + +#define ag_rp_34() (exec()) + +#define ag_rp_35() (exec_redirect_in()) + +#define ag_rp_36(file) (exec_pipe_in(file)) + +#define ag_rp_37(file) (grab_output(file)) + +#define ag_rp_38(file) (append_output(file)) + +#define ag_rp_39() (exec_pipe_out()) + +#define ag_rp_40() (exec_redirect_in_pipe_out()) + +#define ag_rp_41(file) (exec_pipe_in_pipe_out(file)) + +#define ag_rp_42() (sa << 0, ++ps << sa) + +#define ag_rp_43() (ps << sa, sa << 0) + +#define ag_rp_44() (ps << sa, sa << 0) + +#define ag_rp_45(pc) (do_if(pc,1)) + +#define ag_rp_46(cc) (cc) + +#define ag_rp_47(cc) (cc) + +#define ag_rp_48(pc, cc) (do_if(pc,cc!=0)) + +#define ag_rp_49(cc) ((int) cc) + +#define ag_rp_50(cc) (do_if(0,cc != 0)) + +#define ag_rp_51(v) (assign_value(v)) + +#define ag_rp_52(v, x) (st[v].data.integer = (int) x) + +#define ag_rp_53(v) (st[v].data.text = copy(sa--)) + +#define ag_rp_54(v, n, x) (st[v].data.text[(unsigned)n] = (char) x) + +#define ag_rp_55() (check_integer()) + +#define ag_rp_56(cc) (do_while(cc != 0)) + +#define ag_rp_57() (do_for_loop()) + +#define ag_rp_58(n) (define_action(n)) + +#define ag_rp_59(x) (define_integer(sa--, x)) + +#define ag_rp_60() (define_string()) + +#define ag_rp_61() (0) + +#define ag_rp_62(n) (n+1) + +#define ag_rp_63(c) (++sa << c) + +#define ag_rp_64(c) (sa << c) + +#define ag_rp_65(c) (sa << c) + +#define ag_rp_66(c, x, y) (c != 0 ? x : y) + +#define ag_rp_67(x, y) (x != 0 || y!=0) + +#define ag_rp_68(x, y) (x != 0 && y !=0) + +#define ag_rp_69(x, y) (x | y) + +#define ag_rp_70(x, y) (x ^ y) + +#define ag_rp_71(x, y) (x & y) + +#define ag_rp_72(x, y) (x == y) + +#define ag_rp_73(x, y) (x != y) + +#define ag_rp_74() (string_comp() == 0) + +#define ag_rp_75() (string_comp() != 0) + +#define ag_rp_76(x, y) (x < y) + +#define ag_rp_77(x, y) (x > y) + +#define ag_rp_78(x, y) (x <= y) + +#define ag_rp_79(x, y) (x >= y) + +#define ag_rp_80() (string_comp() < 0) + +#define ag_rp_81() (string_comp() > 0) + +#define ag_rp_82() (string_comp() <= 0) + +#define ag_rp_83() (string_comp() >= 0) + +#define ag_rp_84(x, y) (x << (int) y) + +#define ag_rp_85(x, y) (x >> (int) y) + +#define ag_rp_86(x, y) (x + y) + +#define ag_rp_87(x, y) (x - y) + +#define ag_rp_88(x, y) (x * y) + +#define ag_rp_89(x, y) (x / y) + +#define ag_rp_90(x, y) (x % y) + +static long ag_rp_91(long x) { +#line - "cc-crash.syn" + assert(x); + return x; + +#line - "cc-crash.cpp" +} + +#define ag_rp_92(x) (x) + +#define ag_rp_93(x) (-x) + +#define ag_rp_94(x) (~x) + +#define ag_rp_95(x) (!x) + +#define ag_rp_96(n) (((unsigned char *) sa--)[(unsigned) n]) + +static long ag_rp_97(void) { +#line - "cc-crash.syn" + long temp; + sscanf(sa--, "%ld", &temp); + return temp; + +#line - "cc-crash.cpp" +} + +#define ag_rp_98(x) (x) + +#define ag_rp_99(x) ((*st[(unsigned)x].data.func)()) + +#define ag_rp_100() (name_type()) + +#define ag_rp_101() (concat(sa)) + +#define ag_rp_102(first, last) (extract((unsigned)first, (unsigned) last)) + +#define ag_rp_103() (sa << '[') + +#define ag_rp_104() (concat(sa) << ']', lookup()) + +#define ag_rp_105(x) (++sa << st[(unsigned)x].data.text) + +#define ag_rp_106(x) (++sa << sd[(unsigned)x]) + +#define ag_rp_107() (action_string()) + +#define ag_rp_108(x) (++sa,sa.printf("%ld",x)) + +#define ag_rp_109() (0) + +#define ag_rp_110(x, d) (16*x + d-'0') + +#define ag_rp_111(d) ((d&7) + 9) + +#define ag_rp_112() (0) + +#define ag_rp_113(n, d) (8*n + d-'0') + +#define ag_rp_114(d) (d-'0') + +#define ag_rp_115(n, d) (10*n + d-'0') + +#define ag_rp_116(c) (c) + +#define ag_rp_117(scd) (display_queries(scd)) + +#define ag_rp_118() (reset(qs), new screen_descriptor) + +#define ag_rp_119(scd) (scd->title = formula(), scd) + +#define ag_rp_120(scd, c) (scd->color = (char) c, scd) + +#define ag_rp_121(scd, c) (scd->entry_color = (char) c, scd) + +#define ag_rp_122(scd, c) (scd->highlight_color = (char) c, scd) + +#define ag_rp_123(scd, w, h) (scd->width = (unsigned)w, scd->height = (unsigned) h, scd) + +#define ag_rp_124(scd, px, py) (scd->pos.x = (unsigned) px,scd->pos.y = (unsigned) py, scd) + +#define ag_rp_125(scd, q) (qs << *q, delete q, scd) + +#define ag_rp_126(scd, q) (qs << *q, delete q, scd) + +#define ag_rp_127(fg, bg) (COLOR((unsigned)fg,(unsigned)bg)) + +#define ag_rp_128() (clear(new query_item)) + +#define ag_rp_129(q) (q->id = sd << sa--, q) + +#define ag_rp_130(q) (q->value = formula(), q) + +#define ag_rp_131(q) (q->prompt = formula(), q) + +#define ag_rp_132(q) (q->explanation = formula(),q) + +#define ag_rp_133() (clear(new query_item)) + +#define ag_rp_134(q) (q->prompt = formula(), q) + +#define ag_rp_135(q) (q->explanation = formula(),q) + +#define ag_rp_136(q) (q->action = copy_action(), q) + +#define ag_rp_137() (reset(is) << (sd << sa--)) + +#define ag_rp_138() (is << (sd << sa--)) + +#define ag_rp_139() (sa << '[') + +#define ag_rp_140() (concat(sa) << ']') + + +#define READ_COUNTS +#define WRITE_COUNTS +#undef V +#define V(i,t) (*t (&(PCB).vs[(PCB).ssx + i])) +#undef VS +#define VS(i) (PCB).vs[(PCB).ssx + i] + +#ifndef GET_CONTEXT +#define GET_CONTEXT CONTEXT = (PCB).input_context +#endif + +typedef enum { + ag_action_1, + ag_action_2, + ag_action_3, + ag_action_4, + ag_action_5, + ag_action_6, + ag_action_7, + ag_action_8, + ag_action_9, + ag_action_10, + ag_action_11, + ag_action_12 +} ag_parser_action; + + +#ifndef NULL_VALUE_INITIALIZER +#define NULL_VALUE_INITIALIZER = { 0 } +#endif + +static cc-crash_vs_type const ag_null_value NULL_VALUE_INITIALIZER; + +static const unsigned char ag_rpx[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 2, 3, 0, 4, 0, 5, 6, 7, 0, 8, 0, 9, + 0, 0, 10, 0, 0, 0, 0, 0, 0, 11, 0, 12, 13, 14, 0, 15, 0, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, 0, 0, 29, + 30, 31, 32, 0, 33, 0, 0, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 46, 47, 48, 49, 50, + 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 52, 53, 54, 55, 56, 0, 0, + 57, 58, 59, 60, 61, 0, 0, 62, 63, 64, 65, 0, 66, 0, 67, 0, 68, 0, + 69, 0, 70, 0, 71, 0, 72, 73, 74, 75, 0, 76, 77, 78, 79, 80, 81, 82, + 83, 0, 84, 85, 0, 86, 87, 0, 88, 89, 90, 91, 0, 92, 93, 94, 95, 0, + 0, 96, 97, 0, 98, 99, 0,100, 0,101, 0,102,103,104, 0,105,106,107, + 108, 0, 0, 0, 0, 0, 0,109,110, 0,111,112,113,114,115,116, 0, 0, + 117,118, 0,119,120,121,122,123,124,125,126,127,128, 0,129,130,131,132, + 133, 0,134,135,136,137,138, 0, 0, 0,139,140 +}; + +static const unsigned char ag_key_itt[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0 +}; + +static const unsigned short ag_key_pt[] = { + 0,211, 0,214, 0,218, 0,221, 0,220, 0,219, 0,223, 0,224, + 0,225, 0,162, 0,163, 0,247, 0,248, 0,249, 0,250, 0,252, + 0,253, 0,254, 0,255, 0,256, 0,257, 0,258, 0,259, 0,260, +0 +}; + +static const unsigned char ag_key_ch[] = { + 0, 42, 47,255, 47, 97,105,115,255, 42, 47,255, 42, 47,255, 88,120,255, + 60, 61,255, 61, 62,255,101,111,255,108,110,120,255,105,111,255,116,255, + 102,110,255, 99,105,116,255, 33, 38, 46, 47, 48, 60, 61, 62, 97, 98, 99, + 100,101,102,104,105,108,112,115,116,118,119,124,255, 47, 97,105,115,255, + 47,255, 42, 47,255,110,120,255,105,111,255,102,110,255, 99,105,116,255, + 47, 97, 98, 99,100,101,102,104,105,108,112,115,116,118,119,255, 42, 47, + 255,108,110,120,255,105,111,255,102,110,255, 99,105,116,255, 47, 97, 98, + 99,100,101,102,104,105,108,112,115,116,118,119,255,102,110,255, 99,116, + 255, 47, 97,102,105,115,119,255, 42, 47,255, 60, 61,255, 61, 62,255,116, + 255,110,255,105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,101,102, + 104,105,108,115,116,124,255,102,110,255, 99,116,255, 97,102,105,115,119, + 255, 42, 47,255, 88,120,255, 47, 48,255, 88,120,255, 48,255, 47,255, 34, + 39, 63, 92, 97, 98,102,110,114,116,118,120,255, 92,255, 42, 47,255, 60, + 61,255, 61, 62,255,105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99, + 100,101,102,104,105,108,115,116,124,255, 42, 47,255, 47, 62,100,255, 42, + 47,255, 47, 62,255, 47, 62,255, 47, 98, 99,101,102,104,108,115,116,255, + 62,255, 47,119,255, 47,101,255, 88,120,255, 47, 48,255, 60, 61,255, 61, + 62,255,105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,101,102,104, + 105,108,115,116,124,255,105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98, + 99,101,102,104,105,108,115,116,124,255, 42, 47,255, 60, 61,255, 61, 62, + 255,105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,101,102,104,105, + 108,115,116,124,255, 42, 47,255, 60, 61,255, 61, 62,255,105,116,255, 33, + 38, 46, 47, 60, 61, 62,104,105,108,115,116,124,255, 42, 47,255, 47,255, + 33, 60, 61, 62,255,105,116,255, 33, 38, 46, 47, 61, 97, 98, 99,101,102, + 104,105,108,115,116,124,255,105,116,255, 38, 46, 47, 97, 98, 99,101,102, + 104,105,108,115,116,124,255,105,116,255, 46, 47, 97, 98, 99,101,102,104, + 105,108,115,116,124,255, 42, 47,255, 60, 61,255, 61, 62,255,108,110,255, + 105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,100,101,102,104,105, + 108,115,116,119,124,255, 47,101,112,255, 47,100,101,112,118,255, 47, 99, + 255, 99,255,105,255, 47, 62,100,255,102,110,255, 99,116,255, 47, 97,101, + 102,105,115,119,255,101,255, 42, 47,255, 47,105,255, 47,105,255, 60, 62, + 255,100,255,105,255, 46,255, 42, 47,255, 61, 62,255,105,116,255, 33, 38, + 46, 47, 60, 61, 62, 97, 98, 99,100,101,102,104,105,108,115,116,124,255 +}; + +static const unsigned char ag_key_act[] = { + 0,0,0,4,2,7,7,7,4,3,3,4,0,0,4,5,5,4,0,0,4,0,0,4,7,5,4,7,7,7,4,7,7,4,5, + 4,5,6,4,7,7,7,4,3,3,3,2,2,2,3,2,7,7,7,2,2,2,7,2,7,7,2,7,7,7,3,4,3,7,7, + 7,4,3,4,0,0,4,7,7,4,7,7,4,5,7,4,7,7,7,4,2,7,7,7,7,2,2,7,2,7,7,2,7,7,7, + 4,0,0,4,7,7,7,4,7,7,4,5,7,4,7,7,7,4,2,7,7,7,7,2,2,7,2,7,7,2,7,7,7,4,5, + 7,4,7,7,4,3,7,7,2,2,7,4,0,0,4,0,0,4,0,0,4,5,4,6,4,7,7,4,3,3,3,2,2,3,2, + 7,7,7,7,7,7,2,7,2,7,3,4,5,7,4,7,7,4,7,7,2,2,7,4,0,0,4,5,5,4,2,2,4,5,5, + 4,2,4,3,4,0,0,0,0,0,0,0,0,0,0,0,0,4,2,4,0,0,4,0,0,4,0,0,4,7,7,4,3,3,3, + 2,2,3,2,7,7,7,7,7,7,7,7,7,2,7,3,4,0,0,4,2,3,7,4,0,0,4,2,3,4,3,3,4,3,7, + 7,7,7,7,7,7,7,4,3,4,3,7,4,3,7,4,5,5,4,3,2,4,0,0,4,0,0,4,7,7,4,3,3,3,3, + 2,3,2,7,7,7,7,7,7,7,7,2,7,3,4,7,7,4,3,3,3,3,3,3,3,7,7,7,7,7,7,7,7,2,7, + 3,4,0,0,4,0,0,4,0,0,4,7,7,4,3,3,3,2,2,3,2,7,7,7,7,7,7,7,7,2,7,3,4,0,0, + 4,0,0,4,0,0,4,7,7,4,3,3,3,2,2,3,2,7,7,7,2,7,3,4,0,0,4,2,4,3,3,3,3,4,7, + 7,4,3,3,3,3,3,7,7,7,7,7,7,7,7,2,7,3,4,7,7,4,3,3,3,7,7,7,7,7,7,7,7,2,7, + 3,4,7,7,4,3,3,7,7,7,7,7,7,7,7,2,7,3,4,0,0,4,0,0,4,0,0,4,7,7,4,7,7,4,3, + 3,3,2,2,3,2,7,7,7,7,2,7,7,7,7,2,7,7,3,4,3,7,7,4,3,7,7,7,7,4,3,7,4,7,4, + 7,4,3,3,7,4,5,7,4,7,7,4,3,7,7,7,2,2,7,4,7,4,0,0,4,2,7,4,3,7,4,3,3,4,7, + 4,7,4,3,4,0,0,4,0,0,4,7,7,4,3,3,3,2,3,3,2,7,7,7,7,7,7,7,7,7,2,7,3,4 +}; + +static const unsigned short ag_key_parm[] = { + 0, 13, 16, 0, 0, 12, 14, 16, 0, 12, 13, 0, 13, 16, 0, 20, 18, 0, + 236,234, 0,235,210, 0, 40, 10, 0, 0, 26, 44, 0, 36, 6, 0, 14, 0, + 2, 8, 0, 22, 30, 16, 0,233,229,246, 0, 0, 0,232, 0, 12, 46, 34, + 0, 0, 0, 28, 0, 32, 42, 0, 24, 38, 4,228, 0, 16, 12, 14, 16, 0, + 13, 0, 13, 16, 0, 26, 44, 0, 36, 6, 0, 2, 14, 0, 22, 30, 16, 0, + 0, 12, 46, 34, 40, 0, 0, 28, 0, 32, 42, 0, 24, 38, 4, 0, 13, 16, + 0, 0, 26, 44, 0, 36, 6, 0, 2, 14, 0, 22, 30, 16, 0, 0, 12, 46, + 34, 40, 0, 0, 28, 0, 32, 42, 0, 24, 38, 4, 0, 2, 14, 0, 22, 16, + 0, 16, 12, 6, 0, 0, 4, 0, 13, 16, 0,236,234, 0,235,210, 0, 14, + 0, 8, 0, 30, 16, 0,233,229,246, 0, 0,232, 0, 12, 46, 34, 26, 36, + 28, 0, 32, 0, 24,228, 0, 2, 14, 0, 22, 16, 0, 12, 6, 0, 0, 4, + 0, 13, 16, 0, 20, 18, 0, 0, 0, 0, 20, 18, 0, 0, 0, 16, 0, 64, + 63, 62, 61, 54, 55, 56, 57, 58, 59, 60, 72, 0, 0, 0, 13, 16, 0,236, + 234, 0,235,210, 0, 30, 16, 0,233,229,246, 0, 0,232, 0, 12, 46, 34, + 10, 26, 36, 28, 14, 32, 0, 24,228, 0, 13, 16, 0, 0,210, 10, 0, 13, + 16, 0, 0,210, 0, 16,210, 0, 16, 46, 34, 26, 36, 28, 32, 30, 24, 0, + 210, 0, 16, 4, 0, 16, 0, 0, 20, 18, 0, 13, 0, 0,236,234, 0,235, + 210, 0, 30, 16, 0,233,229,246, 16, 0,232, 0, 12, 46, 34, 26, 36, 28, + 14, 32, 0, 24,228, 0, 30, 16, 0,233,229,246, 16,234,232,235, 12, 46, + 34, 26, 36, 28, 14, 32, 0, 24,228, 0, 13, 16, 0,236,234, 0,235,210, + 0, 30, 16, 0,233,229,246, 0, 0,232, 0, 12, 46, 34, 26, 36, 28, 14, + 32, 0, 24,228, 0, 13, 16, 0,236,234, 0,235,210, 0, 30, 16, 0,233, + 229,246, 0, 0,232, 0, 28, 14, 32, 0, 24,228, 0, 13, 16, 0, 0, 0, + 233,234,232,235, 0, 30, 16, 0,233,229,246, 16,232, 12, 46, 34, 26, 36, + 28, 14, 32, 0, 24,228, 0, 30, 16, 0,229,246, 16, 12, 46, 34, 26, 36, + 28, 14, 32, 0, 24,228, 0, 30, 16, 0,246, 16, 12, 46, 34, 26, 36, 28, + 14, 32, 0, 24,228, 0, 13, 16, 0,236,234, 0,235,210, 0, 0, 26, 0, + 30, 16, 0,233,229,246, 0, 0,232, 0, 12, 46, 34, 10, 0, 36, 28, 14, + 32, 0, 24, 4,228, 0, 16, 44, 42, 0, 16, 40, 44, 42, 38, 0, 13, 34, + 0, 34, 0, 8, 0, 16,210, 10, 0, 2, 14, 0, 22, 16, 0, 16, 12, 0, + 6, 0, 0, 4, 0, 0, 0, 13, 16, 0, 0, 2, 0, 16, 2, 0,234,235, + 0, 10, 0, 2, 0,246, 0, 13, 16, 0,235,210, 0, 30, 16, 0,233,229, + 246, 0,234,232, 0, 12, 46, 34, 10, 26, 36, 28, 14, 32, 0, 24,228, 0 +}; + +static const unsigned short ag_key_jmp[] = { + 0, 0, 0, 0, 1, 0, 6, 9, 0, 15, 17, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 44, 0, 0, 50, 53, 57, 0, 67, 71, 0, 0, 0, + 0, 34, 0, 96,101,104, 0, 19, 21, 23, 12, 15, 18, 25, 21, 27, 33, 39, + 24, 27, 31, 73, 36, 82, 90, 39,109,114,122,127, 0,129,131,137,140, 0, + 146, 0, 0, 0, 0,172,176, 0,186,190, 0, 0,201, 0,217,222,225, 0, + 74,148,154,160,165, 77, 80,192, 83,203,211, 86,230,235,243, 0, 0, 0, + 0,272,275,279, 0,289,293, 0, 0,304, 0,320,325,328, 0,106,248,254, + 260,265,109,113,295,116,306,314,119,333,338,346, 0, 0,362, 0,364,369, + 0,351,353,359,139,142,374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,161, 0,431,434, 0,379,381,383,152,155,385,158,387,393,399,404,409, + 414,163,423,165,439,444, 0, 0,455, 0,457,462, 0,446,452,187,190,467, + 0, 0, 0, 0, 0, 0, 0,199,202, 0, 0, 0, 0,208, 0,472, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,531,534, 0,474,476,478,230,233,480,236,482,488,494, + 499,501,506,511,520,523,239,539,544, 0, 0, 0, 0,262,546,548, 0, 0, + 0, 0,269,550, 0,552,554, 0,556,558,564,569,574,579,588,596,600, 0, + 605, 0,607,609, 0,614,616, 0, 0, 0, 0,620,296, 0, 0, 0, 0, 0, + 0, 0,679,682, 0,622,624,626,628,302,630,305,632,638,644,649,654,659, + 668,671,308,687,692, 0,755,758, 0,694,696,698,700,702,704,706,708,714, + 720,725,730,735,744,747,330,763,768, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,825,828, 0,770,772,774,352,355,776,358,778,784,790,795,800,805,814, + 817,361,833,838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,868,871, 0,840, + 842,844,383,386,846,389,848,857,860,392,876,881, 0, 0, 0, 0,409, 0, + 883,885,887,889, 0,948,951, 0,891,893,895,897,899,901,907,913,918,923, + 928,937,940,419,956,961, 0,1016,1019, 0,963,965,967,969,975,981,986, + 991,996,1005,1008,439,1024,1029, 0,1082,1085, 0,1031,1033,1035,1041, + 1047,1052,1057,1062,1071,1074,457,1090,1095, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,1124,1127, 0,1156,1159, 0,1097,1099,1101,474,477,1103,480, + 1105,1111,1117,1122,483,1131,1136,1145,1148,486,1164,1169,1174, 0,1176, + 1178,1189, 0,1195,1197,1204,1215,1221, 0,1229,1231, 0,1236, 0,1241, + 0,1243,1245,1247, 0, 0,1264, 0,1266,1271, 0,1249,1251,1257,1261, + 531,534,1276, 0,1281, 0, 0, 0, 0,547,1285, 0,1287,1289, 0,1291, + 1293, 0,1295, 0,1297, 0,1299, 0, 0, 0, 0, 0, 0, 0,1360,1363, + 0,1301,1303,1305,565,1307,1309,568,1311,1317,1323,1328,1330,1335,1340, + 1349,1352,571,1368,1373, 0 +}; + +static const unsigned short ag_key_index[] = { + 4, 9, 43, 67, 0, 72, 72, 72, 90,123, 0, 0, 0,145, 67, 0, 0, 0, + 168,168, 0, 0, 72, 72, 0,145,193,205, 0,211, 72,213,228, 0,242,265, + 72, 72,272,275, 72, 0, 0, 72,275, 0,278, 0, 0, 0,275,288,275, 0, + 290,293,213, 0,299,311, 0,211,333, 67,228,364,364,395,412,364,364,299, + 299,299,299, 0, 0,211,211,211,211,211,311,311,414,311,414,333,422,442, + 442,442,442,460, 67, 72,205,205,205,213,489, 0, 0,228,228, 0, 72, 0, + 211, 0,211, 72, 0,510, 72, 0,514, 72, 0, 72, 0,520,523,520,523, 72, + 0,213, 72, 0,525,299,211, 0,211, 0,299, 0, 0, 0,527,275,275,275, + 537,545,145, 0, 0, 0, 0, 0, 4, 0, 0,414, 0,299,211,299,211,299, + 211,211,211,211,211,299,211,299, 0,299, 0, 0, 0,299, 0,299, 0,211, + 211,211,211,211,211,299,211,299,211,211,299,211,299,211,299,211, 0,228, + 0, 0, 0,275, 0,213, 72, 0, 72, 0,213, 0, 0, 72, 0, 72, 0,213, + 211,211,213,213,211, 0, 72, 0, 0,213,213,213,213,213,275, 0,275, 0, + 550,553,364, 0,211,333, 0,311,311,211,311,311,333,333,333,333,422,422, + 311,311,311,311,556,333,333,422,442,442,442,442, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,213,213,559,211,275,275,561, 0,563,563,299, + 211,574,213,213,213,213,213,213,299,211,211,211, 0, 0, 72, 0,213, 0, + 299,211, 0,213, 0, 0 +}; + +static const unsigned char ag_key_ends[] = { +99,116,105,111,110,0, 110,116,0, 116,114,105,110,103,0, 47,0, +42,0, 61,0, 38,0, 46,0, 61,0, 99,116,105,111,110,0, +117,116,116,111,110,0, 111,108,111,114,0, 102,97,117,108,116,0, +115,101,0, 116,114,121,0, 112,108,97,110,97,116,105,111,110,0, +101,108,100,0, 114,0, 105,103,104,108,105,103,104,116,0, +111,99,97,116,105,111,110,0, 114,111,109,112,116,0, 114,101,101,110,0, +122,101,0, 114,105,110,103,0, 105,116,108,101,0, +97,114,105,97,98,108,101,0, 104,105,108,101,0, 124,0, 47,0, +99,116,105,111,110,0, 110,116,0, 116,114,105,110,103,0, 42,0, +99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, +101,102,97,117,108,116,0, 116,114,121,0, +112,108,97,110,97,116,105,111,110,0, 101,108,100,0, 114,0, +105,103,104,108,105,103,104,116,0, 116,0, 111,99,97,116,105,111,110,0, +114,111,109,112,116,0, 114,101,101,110,0, 122,101,0, +114,105,110,103,0, 105,116,108,101,0, 97,114,105,97,98,108,101,0, +104,105,108,101,0, 99,116,105,111,110,0, 117,116,116,111,110,0, +111,108,111,114,0, 101,102,97,117,108,116,0, 115,101,0, +116,114,121,0, 112,108,97,110,97,116,105,111,110,0, 101,108,100,0, +114,0, 105,103,104,108,105,103,104,116,0, 116,0, +111,99,97,116,105,111,110,0, 114,111,109,112,116,0, 114,101,101,110,0, +122,101,0, 114,105,110,103,0, 105,116,108,101,0, +97,114,105,97,98,108,101,0, 104,105,108,101,0, 47,0, +99,116,105,111,110,0, 111,114,0, 116,0, 114,101,101,110,0, +114,105,110,103,0, 104,105,108,101,0, 61,0, 38,0, 46,0, 61,0, +99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, +110,116,114,121,0, 105,101,108,100,0, 105,103,104,108,105,103,104,116,0, +111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, 99,116,105,111,110,0, 111,114,0, 116,0, +114,101,101,110,0, 114,105,110,103,0, 104,105,108,101,0, 47,0, +61,0, 38,0, 46,0, 61,0, 99,116,105,111,110,0, 117,116,116,111,110,0, +111,108,111,114,0, 111,0, 110,116,114,121,0, 105,101,108,100,0, +105,103,104,108,105,103,104,116,0, 110,116,0, +111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, 62,0, 111,0, 62,0, 47,0, 62,0, 47,0, +117,116,116,111,110,0, 111,108,111,114,0, 110,116,114,121,0, +105,101,108,100,0, 105,103,104,108,105,103,104,116,0, +111,99,97,116,105,111,110,0, 105,122,101,0, 105,116,108,101,0, +62,0, 47,0, 104,105,108,101,0, 47,0, 108,115,101,0, 42,0, 61,0, +38,0, 46,0, 47,0, 61,0, 99,116,105,111,110,0, 117,116,116,111,110,0, +111,108,111,114,0, 110,116,114,121,0, 105,101,108,100,0, +105,103,104,108,105,103,104,116,0, 110,116,0, +111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, 61,0, 38,0, 46,0, 47,0, 61,0, 61,0, +61,0, 99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, +110,116,114,121,0, 105,101,108,100,0, 105,103,104,108,105,103,104,116,0, +110,116,0, 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, 61,0, 38,0, 46,0, 61,0, +99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, +110,116,114,121,0, 105,101,108,100,0, 105,103,104,108,105,103,104,116,0, +110,116,0, 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, 61,0, 38,0, 46,0, 61,0, +105,103,104,108,105,103,104,116,0, 110,116,0, +111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, 61,0, 61,0, 61,0, 61,0, 61,0, 38,0, +46,0, 47,0, 61,0, 99,116,105,111,110,0, 117,116,116,111,110,0, +111,108,111,114,0, 110,116,114,121,0, 105,101,108,100,0, +105,103,104,108,105,103,104,116,0, 110,116,0, +111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, 38,0, 46,0, 47,0, 99,116,105,111,110,0, +117,116,116,111,110,0, 111,108,111,114,0, 110,116,114,121,0, +105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 110,116,0, +111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, 46,0, 47,0, 99,116,105,111,110,0, +117,116,116,111,110,0, 111,108,111,114,0, 110,116,114,121,0, +105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 110,116,0, +111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, 61,0, 38,0, 46,0, 61,0, +99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, +111,0, 115,101,0, 116,114,121,0, 105,101,108,100,0, +105,103,104,108,105,103,104,116,0, 110,116,0, +111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 104,105,108,101,0, 124,0, 47,0, +120,112,108,97,110,97,116,105,111,110,0, 114,111,109,112,116,0, +47,0, 101,102,97,117,108,116,0, 120,112,108,97,110,97,116,105,111,110,0, +114,111,109,112,116,0, 97,114,105,97,98,108,101,0, 42,0, +111,108,111,114,0, 111,108,111,114,0, 110,0, 47,0, 62,0, 111,0, +47,0, 99,116,105,111,110,0, 108,115,101,0, 111,114,0, 116,0, +114,101,101,110,0, 114,105,110,103,0, 104,105,108,101,0, +108,115,101,0, 102,0, 47,0, 102,0, 61,0, 61,0, 111,0, 102,0, +46,0, 61,0, 38,0, 46,0, 61,0, 61,0, 99,116,105,111,110,0, +117,116,116,111,110,0, 111,108,111,114,0, 111,0, 110,116,114,121,0, +105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 110,116,0, +111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, +105,116,108,101,0, 124,0, +}; + +#define AG_TCV(x) ag_tcv[(x)] + +static const unsigned short ag_tcv[] = { + 26,193,193,193,193,193,193,193,193, 9, 15, 9, 9, 9,193,193,193,193, + 193,193,193,193,193,193,193,193, 26,193,193,193,193,193, 9,243, 50,203, + 193,241,231,169,213,212,239,237,251,238,193,240,167,194,194,194,194,194, + 194,194,195,195,226,216,207,215,209,227,217,261,261,261,261,261,261,262, + 262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, + 262,202, 70,201,230,262,193,261,261,261,261,261,261,262,262,262,262,262, + 262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,205,208,204, + 242,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,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,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 +}; + +#ifndef SYNTAX_ERROR +#define SYNTAX_ERROR fprintf(stderr,"%s, line %d, column %d\n", \ + (PCB).error_message, (PCB).line, (PCB).column) +#endif + +#ifndef FIRST_LINE +#define FIRST_LINE 1 +#endif + +#ifndef FIRST_COLUMN +#define FIRST_COLUMN 1 +#endif + +#ifndef PARSER_STACK_OVERFLOW +#define PARSER_STACK_OVERFLOW {fprintf(stderr, \ + "\nParser stack overflow, line %d, column %d\n",\ + (PCB).line, (PCB).column);} +#endif + +#ifndef REDUCTION_TOKEN_ERROR +#define REDUCTION_TOKEN_ERROR {fprintf(stderr, \ + "\nReduction token error, line %d, column %d\n", \ + (PCB).line, (PCB).column);} +#endif + + +#ifndef INPUT_CODE +#define INPUT_CODE(T) (T) +#endif + +typedef enum + {ag_accept_key, ag_set_key, ag_jmp_key, ag_end_key, ag_no_match_key, + ag_cf_accept_key, ag_cf_set_key, ag_cf_end_key} key_words; + +static void ag_get_key_word(int ag_k) { + int ag_save = (int) ((PCB).la_ptr - (PCB).pointer); + const unsigned char *ag_p; + int ag_ch; + while (1) { + switch (ag_key_act[ag_k]) { + case ag_cf_end_key: { + const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k]; + do { + if ((ag_ch = *sp++) == 0) { + int ag_k1 = ag_key_parm[ag_k]; + int ag_k2 = ag_key_pt[ag_k1]; + if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) goto ag_fail; + (PCB).token_number = (cc-crash_token_type) ag_key_pt[ag_k1 + 1]; + return; + } + } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch); + goto ag_fail; + } + case ag_end_key: { + const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k]; + do { + if ((ag_ch = *sp++) == 0) { + (PCB).token_number = (cc-crash_token_type) ag_key_parm[ag_k]; + return; + } + } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch); + } + case ag_no_match_key: +ag_fail: + (PCB).la_ptr = (PCB).pointer + ag_save; + return; + case ag_cf_set_key: { + int ag_k1 = ag_key_parm[ag_k]; + int ag_k2 = ag_key_pt[ag_k1]; + ag_k = ag_key_jmp[ag_k]; + if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) break; + ag_save = (int) ((PCB).la_ptr - (PCB).pointer); + (PCB).token_number = (cc-crash_token_type) ag_key_pt[ag_k1+1]; + break; + } + case ag_set_key: + ag_save = (int) ((PCB).la_ptr - (PCB).pointer); + (PCB).token_number = (cc-crash_token_type) ag_key_parm[ag_k]; + case ag_jmp_key: + ag_k = ag_key_jmp[ag_k]; + break; + case ag_accept_key: + (PCB).token_number = (cc-crash_token_type) ag_key_parm[ag_k]; + return; + case ag_cf_accept_key: { + int ag_k1 = ag_key_parm[ag_k]; + int ag_k2 = ag_key_pt[ag_k1]; + if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) + (PCB).la_ptr = (PCB).pointer + ag_save; + else (PCB).token_number = (cc-crash_token_type) ag_key_pt[ag_k1+1]; + return; + } + } + ag_ch = CONVERT_CASE(*(PCB).la_ptr++); + ag_p = &ag_key_ch[ag_k]; + if (ag_ch <= 255) while (*ag_p < ag_ch) ag_p++; + if (ag_ch > 255 || *ag_p != ag_ch) { + (PCB).la_ptr = (PCB).pointer + ag_save; + return; + } + ag_k = (int) (ag_p - ag_key_ch); + } +} + + +#ifndef AG_NEWLINE +#define AG_NEWLINE 10 +#endif + +#ifndef AG_RETURN +#define AG_RETURN 13 +#endif + +#ifndef AG_FORMFEED +#define AG_FORMFEED 12 +#endif + +#ifndef AG_TABCHAR +#define AG_TABCHAR 9 +#endif + +static void ag_track(void) { + int ag_k = (int) ((PCB).la_ptr - (PCB).pointer); + while (ag_k--) { + switch (*(PCB).pointer++) { + case AG_NEWLINE: + (PCB).column = 1, (PCB).line++; + case AG_RETURN: + case AG_FORMFEED: + break; + case AG_TABCHAR: + (PCB).column += (TAB_SPACING) - ((PCB).column - 1) % (TAB_SPACING); + break; + default: + (PCB).column++; + } + } +} + + +static void ag_prot(void) { + int ag_k; + ag_k = 128 - ++(PCB).btsx; + if (ag_k <= (PCB).ssx) { + (PCB).exit_flag = AG_STACK_ERROR_CODE; + PARSER_STACK_OVERFLOW; + return; + } + (PCB).bts[(PCB).btsx] = (PCB).sn; + (PCB).bts[ag_k] = (PCB).ssx; + (PCB).vs[ag_k] = (PCB).vs[(PCB).ssx]; + (PCB).ss[ag_k] = (PCB).ss[(PCB).ssx]; + (PCB).cs[ag_k] = (PCB).cs[(PCB).ssx]; +} + +static void ag_undo(void) { + if ((PCB).drt == -1) return; + while ((PCB).btsx) { + int ag_k = 128 - (PCB).btsx; + (PCB).sn = (PCB).bts[(PCB).btsx--]; + (PCB).ssx = (PCB).bts[ag_k]; + (PCB).vs[(PCB).ssx] = (PCB).vs[ag_k]; + (PCB).ss[(PCB).ssx] = (PCB).ss[ag_k]; + (PCB).cs[(PCB).ssx] = (PCB).cs[ag_k]; + } + (PCB).token_number = (cc-crash_token_type) (PCB).drt; + (PCB).ssx = (PCB).dssx; + (PCB).sn = (PCB).dsn; + (PCB).drt = -1; +} + + + +static const int ag_rtt[] = { + 101,104, 28, 0,152,155,153,156, 0 +}; + +static const unsigned short ag_tstt[] = { +225,224,223,205,26,16,15,13,9,0,1,10,11,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212, + 209,208,207,205,204,203,202,201,195,194,193,169,167,70,50,15,13,12,9,0, + 10,11, +13,9,0,1,10,11, +225,224,223,205,26,16,15,0,7,20,21,22,23,24,25,40,114,115,116,198, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212, + 209,208,207,205,204,203,202,201,195,194,193,169,167,70,50,15,9,0,18,19, +262,261,13,9,0,1,10,11,117,197, +262,261,13,9,0,1,10,11,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,195,194,193,169, + 167,70,13,9,0,1,10,11,117,197, +262,261,260,259,258,257,256,255,254,253,252,251,250,249,248,247,243,242,241, + 240,239,238,237,231,230,227,226,225,224,223,221,218,216,215,214,213,209, + 208,207,205,204,203,195,194,193,169,167,70,50,16,15,13,9,0,1,10,11,117, + 197, +262,261,260,259,258,257,256,255,254,253,252,251,250,249,248,247,243,242,241, + 240,239,238,237,231,230,227,226,225,224,223,221,218,216,215,214,213,211, + 209,208,207,205,204,203,195,194,193,169,167,70,50,26,16,15,13,9,0,1,10, + 11,117,197, +262,261,0,110,166,196, +262,261,0,110,166,196, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,195,194,193,169, + 167,70,0,8,206,222, +262,261,251,247,243,242,241,240,239,238,237,231,230,227,226,225,224,223,221, + 218,216,214,213,204,195,194,193,169,167,70,50,16,15,0,7,84,85,198, +225,224,223,205,16,15,0,7,21,22,23,40,114,115,116,198, +26,0, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212, + 209,208,207,205,204,203,202,201,195,194,193,169,167,70,50,9,0, +15,0, +262,261,260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235, + 234,233,232,231,230,229,228,227,226,225,224,223,220,217,216,215,213,212, + 210,209,208,207,205,204,203,202,195,194,167,26,16,15,13,9,0,1,10,11,117, + 197, +262,261,260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235, + 234,233,232,231,230,229,228,227,226,225,224,223,220,217,216,215,213,212, + 210,209,208,207,205,204,203,202,195,194,167,26,16,15,13,9,0,1,10,11,117, + 197, +262,261,215,195,194,167,0,100,119,166,196, +262,261,215,195,194,167,0,100,119,166,196, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,195,194,193,169, + 167,70,0, +205,13,9,0,1,10,11,117,197, +205,0,37,38,40, +16,15,0,7,198, +262,261,251,247,243,242,241,240,239,238,237,231,230,227,226,225,224,223,221, + 218,216,214,213,204,195,194,193,169,167,70,50,0,2,4,5,22,27,28,33,43,49, + 75,76,80,86,87,88,89,91,92,93,95,96,97,98,99,101,104,108,109,114,115, + 116,172,173,199,200,206, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,215,213,209,208, + 207,205,204,203,195,194,193,169,167,163,162,70,50,16,15,13,9,0,1,10,11, + 117,197, +262,261,215,213,205,50,0,4,37,38,40,45,49,100,105,110,150,151,155,156,166, + 196,200, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,195,194,193,169, + 167,70,13,9,0,1,10,11,206, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,215,213,209,208, + 207,205,204,203,195,194,193,169,167,70,50,16,15,0,2,4,5,7,34,37,38,39, + 40,41,43,49,79,81,82,100,198,199,200,206, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212, + 209,208,207,205,204,203,202,201,195,194,193,169,167,72,70,64,63,62,61, + 60,59,58,57,56,55,54,50,9,0,51,53,65,66,67,68,69, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212, + 209,208,207,205,204,203,202,201,195,194,193,169,167,70,50,15,9,0,46,48, +262,261,260,255,254,253,252,251,250,249,248,246,243,242,241,240,239,238,237, + 236,235,234,233,232,231,230,229,228,227,226,225,224,223,219,217,216,215, + 213,212,210,209,208,207,205,204,203,202,201,195,194,193,169,167,70,50, + 26,16,15,13,9,0,1,10,11,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,219,216,215,213,212, + 210,209,208,207,205,204,203,202,201,195,194,193,169,167,70,50,16,15,13, + 9,0,1,10,11,117,197, +213,13,9,0,1,10,11,117,197, +205,13,9,0,1,10,11,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212, + 210,209,208,207,205,204,203,202,201,195,194,193,169,167,70,50,16,15,13, + 9,0,1,10,11,117,197, +202,0,29, +213,13,9,0,1,10,11,117,197, +213,0,45, +205,0,40, +262,261,13,9,0,1,10,11,117,197, +203,0,34, +213,0,45, +260,255,254,253,252,250,249,248,204,16,15,0,7,39,174,176,177,178,179,181, + 182,183,184,185,190,198, +262,261,0,110,166,196, +217,215,0,100,106, +215,0,100, +215,0,100, +210,209,208,0,81,82,83, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,210,209,208, + 207,205,204,195,194,193,169,167,70,50,16,15,0,2,4,5,27,28,31,35,37,38, + 40,43,49,77,78,199,200,206, +205,0,37,38,40, +218,0,98,108, +211,204,16,15,0,7,84,85,198, +204,16,15,0,7,84,85,198, +204,0,39, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,215,213,205,203, + 195,194,193,169,167,163,162,70,50,13,9,0,1,10,11,117,197, +262,261,195,194,167,0,119,166,196, +262,261,215,213,205,50,0,4,37,38,40,45,49,100,105,110,150,151,155,156,166, + 196,200, +262,261,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6,34,37,38,40,45, + 49,100,107,110,150,151,152,153,155,156,159,160,161,164,166,196,200,244, + 245, +217,202,0,29,106, +225,224,223,216,205,204,203,26,16,15,0,34,102,103, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212, + 209,208,207,205,204,203,202,201,195,194,193,167,72,70,64,63,62,61,60,59, + 58,57,56,55,54,50,9,0,53,65,66,67,68,69,170, +195,194,167,0, +194,167,0, +261,195,194,167,0,74, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,215,213,209,208, + 207,205,204,203,195,194,193,169,167,70,50,16,15,13,9,0,1,10,11,117,197, +260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,234,233, + 232,231,230,229,228,227,226,225,224,223,217,216,215,212,210,209,208,207, + 205,204,203,202,26,16,15,13,9,0,1,10,11,117,197, +260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,234,233, + 232,231,230,229,228,227,226,225,224,223,217,216,215,212,210,209,208,207, + 205,204,203,202,26,16,15,13,9,0,1,10,11,117,197, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +213,0,45,154, +262,261,215,213,205,50,0,4,37,38,40,45,49,100,110,151,155,156,166,196,200, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,107,110,141,142,143,148,149,150,151,152,153,155, + 156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,107,110,141,142,143,148,149,150,151,152,153,155, + 156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,107,110,141,142,143,148,149,150,151,152,153,155, + 156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,107,110,141,142,143,148,149,150,151,152,153,155, + 156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +241,240,239,0,144,145,147, +238,237,0,141,142, +217,202,0,29,106, +236,210,0,83,139, +235,234,233,232,209,207,203,0,34,79,82,133,134,136,137, +235,234,209,207,0,79,82,136,137, +233,232,0,133,134, +231,0,131, +230,0,129, +208,0,81, +229,0,126, +228,227,0,121,124, +225,224,223,216,205,204,26,16,15,0,102,103, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,195,194,193,169, + 167,70,0, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,215,213,209,208, + 207,205,204,203,195,194,193,169,167,163,162,70,50,16,15,13,9,0,1,10,11, + 117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,215,213,209,208, + 207,205,204,203,195,194,193,169,167,163,162,70,50,16,15,13,9,0,1,10,11, + 117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,215,213,209,208, + 207,205,204,203,195,194,193,169,167,163,162,70,50,16,15,13,9,0,1,10,11, + 117,197, +202,0,29, +262,261,260,255,254,253,252,251,250,249,248,246,243,242,241,240,239,238,237, + 236,235,234,233,232,231,230,229,228,227,226,225,224,223,219,218,217,216, + 215,213,212,211,210,209,208,207,205,204,203,202,201,195,194,193,169,167, + 70,50,26,16,15,13,9,0,1,10,11,117,197, +194,167,0, +261,195,194,167,0,73,74, +194,167,0, +194,167,0, +213,0,43, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,13,9,0,1,10,11,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,0,30, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,195,194,193, + 169,167,70,50,0,2,4,5,27,28,43,49,199,200,206, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +205,13,9,0,1,10,11,117,197, +205,0,40, +259,258,205,204,16,15,0,7,37,38,39,40,188,189,198, +205,13,9,0,1,10,11,117,197, +205,0,40, +259,258,257,256,204,16,15,0,7,39,186,187,188,189,198, +215,13,9,0,1,10,11,117,197, +215,0,100, +215,13,9,0,1,10,11,117,197, +215,0,100, +254,13,9,0,1,10,11,117,197, +254,0,176,184, +254,13,9,0,1,10,11,117,197, +254,0,176,184, +215,13,9,0,1,10,11,117,197, +215,0,100, +16,15,0,7,198, +215,13,9,0,1,10,11,117,197, +215,0,100, +262,261,220,195,194,167,0,111,119,166,196, +262,261,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1,10,11,117,197, +262,261,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6,34,37,38,40,45, + 49,100,107,110,150,151,152,153,155,156,159,160,161,164,166,196,200,244, + 245, +262,261,215,213,205,50,0,4,37,38,40,45,49,100,105,110,150,151,155,156,166, + 196,200, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,0,2,4,5,27,28,31,35,37,38,40,43,49,199,200,206, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,215,213,205,203, + 195,194,193,169,167,163,162,70,50,13,9,0,1,10,11,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,0,2,4,5,27,28,31,35,37,38,40,43,49,199,200,206, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,0,2,4,5,27,28,31,35,37,38,40,43,49,199,200,206, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,195,194,193, + 169,167,70,50,0,2,4,5,27,28,33,43,49,76,199,200,206, +202,0,29, +203,0,34, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,0,2,4,5,27,28,31,35,37,38,40,43,49,199,200,206, +210,209,208,207,204,16,15,0,79, +262,261,251,247,243,242,241,240,239,238,237,231,230,227,226,225,224,223,221, + 218,216,214,213,195,194,193,169,167,70,50,16,15,0,2,4,5,7,22,27,28,33, + 43,49,75,76,80,89,91,92,93,95,96,97,98,99,101,104,108,109,114,115,116, + 172,173,198,199,200,206, +211,0,90, +262,261,251,247,243,242,241,240,239,238,237,231,230,227,226,225,224,223,221, + 218,216,214,213,195,194,193,169,167,70,50,16,15,0,2,4,5,7,22,27,28,33, + 43,49,75,76,80,89,91,92,93,95,96,97,98,99,101,104,108,109,114,115,116, + 172,173,198,199,200,206, +212,203,0,34,44, +217,202,0,29,106, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,0,158, +213,0,45, +262,261,215,213,205,50,0,4,37,38,40,45,49,100,110,150,151,155,156,166,196, + 200, +225,224,223,205,204,26,16,15,13,9,0,1,10,11,117,197, +169,0, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,0,2,4,5,27,28,31,35,37,38,40,43,49,199,200,206, +235,234,233,232,212,209,207,203,0,34,44,79,82,133,134,136,137, +212,0,44, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,107,110,141,142,143,146,148,149,150,151,152,153, + 155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,107,110,141,142,143,146,148,149,150,151,152,153, + 155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,107,110,141,142,143,148,149,150,151,152,153,155, + 156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,107,110,140,141,142,143,148,149,150,151,152,153, + 155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,107,110,140,141,142,143,148,149,150,151,152,153, + 155,156,159,160,161,164,166,196,200,244,245, +262,261,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6,34,37,38,40,45, + 49,100,107,110,150,151,152,153,155,156,159,160,161,164,166,196,200,244, + 245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,107,110,138,140,141,142,143,148,149,150,151,152, + 153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,107,110,138,140,141,142,143,148,149,150,151,152, + 153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,215,213,205,50,0,4,37,38,40,45,49,100,105,110,150,151,155,156,166, + 196,200, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,215,213,205,50,0,4,37,38,40,45,49,100,105,110,150,151,155,156,166, + 196,200, +262,261,215,213,205,50,0,4,37,38,40,45,49,100,105,110,150,151,155,156,166, + 196,200, +262,261,215,213,205,50,0,4,37,38,40,45,49,100,105,110,150,151,155,156,166, + 196,200, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,215,213,205,50,0,4,37,38,40,45,49,100,105,110,150,151,155,156,166, + 196,200, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,215,213,205,50,0,4,37,38,40,45,49,100,105,110,150,151,155,156,166, + 196,200, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,107,110,135,138,140,141,142,143,148,149,150,151, + 152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,107,110,135,138,140,141,142,143,148,149,150,151, + 152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,107,110,135,138,140,141,142,143,148,149,150,151, + 152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,107,110,135,138,140,141,142,143,148,149,150,151, + 152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,105,107,110,132,135,138,140,141,142,143,148,149, + 150,151,152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,105,107,110,132,135,138,140,141,142,143,148,149, + 150,151,152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,105,107,110,130,132,135,138,140,141,142,143,148, + 149,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,105,107,110,128,130,132,135,138,140,141,142,143, + 148,149,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,105,107,110,127,128,130,132,135,138,140,141,142, + 143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,105,107,110,125,127,128,130,132,135,138,140,141, + 142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,200,244, + 245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,100,105,107,110,123,125,127,128,130,132,135,138,140, + 141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,200, + 244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,0,2,4,5,27,28,31,35,37,38,40,43,49,199,200,206, +261,195,194,167,0,74, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212, + 209,208,207,205,204,203,202,201,195,194,193,169,167,70,50,15,9,0,46,48, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,0,2,4,5,27,28,31,35,37,38,40,43,49,199,200,206, +212,0,44, +202,0,29, +212,0,44, +16,15,0,7,198, +215,13,9,0,1,10,11,117,197, +215,0,100, +215,13,9,0,1,10,11,117,197, +215,0,100, +16,15,0,7,198, +215,0,100, +215,0,100, +215,13,9,0,1,10,11,117,197, +215,0,100, +215,13,9,0,1,10,11,117,197, +215,0,100, +16,15,0,7,198, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +16,15,0,7,198, +16,15,0,7,198, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,195,194,193, + 169,167,70,50,0,2,4,5,43,49,175,191,199,200,206, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,13,9,0,1,10,11,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,0,2,4,5,27,28,31,35,37,38,40,43,49,199,200,206, +215,0,100, +216,204,203,16,15,0,34,102,103, +216,204,16,15,0,102,103, +203,0,34, +203,0,34, +203,0,34, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,210,209,208, + 205,204,195,194,193,169,167,70,50,16,15,0,2,4,5,27,28,31,35,37,38,40,43, + 49,77,78,199,200,206, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,0,2,4,5,27,28,35,37,38,40,43,49,199,200,206, +203,0,34, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,0,2,4,5,27,28,31,35,37,38,40,43,49,199,200,206, +214,205,16,15,13,9,0,1,10,11,117,197, +214,205,16,15,0,7,37,38,40,84,85,198, +260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,234,233, + 232,231,230,229,228,227,226,225,224,223,217,216,215,212,210,209,208,207, + 205,204,203,202,26,16,15,13,9,0,1,10,11,117,197, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,0,2,4,5,27,28,31,35,37,38,40,43,49,199,200,206, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +217,202,0,29,106, +212,203,0,34,44, +241,240,239,0,144,145,147, +241,240,239,0,144,145,147, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +238,237,0,141,142, +238,237,0,141,142, +203,0,34, +203,0,34, +203,0,34, +203,0,34, +203,0,34, +203,0,34, +236,210,0,83,139, +236,210,0,83,139, +236,210,0,83,139, +236,210,0,83,139, +235,234,209,207,203,0,34,79,82,136,137, +235,234,209,207,0,79,82,136,137, +235,234,209,207,0,79,82,136,137, +233,232,0,133,134, +231,0,131, +230,0,129, +208,0,81, +229,0,126, +226,0,122, +203,201,0,32,34, +203,201,0,32,34, +205,0,37,38,40, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,195,194,193, + 169,167,70,50,0,2,4,5,43,49,175,191,199,200,206, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,195,194,193, + 169,167,70,50,0,2,4,5,43,49,175,191,199,200,206, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,195,194,193, + 169,167,70,50,0,2,4,5,43,49,175,191,199,200,206, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,195,194,193, + 169,167,70,50,0,2,4,5,43,49,175,191,199,200,206, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,195,194,193, + 169,167,70,50,0,2,4,5,43,49,175,191,199,200,206, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,195,194,193,169, + 167,70,0,2,206, +251,0,180, +251,0,180, +251,0,180, +202,0,29, +203,16,15,0,7,34,198, +219,205,203,0,34,112,113, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +210,209,208,204,16,15,0, +210,209,208,204,203,16,15,0,34, +214,0,92,93, +203,201,0,32,34, +246,0,157, +246,212,0,44,157, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +262,261,260,255,254,253,252,251,250,249,248,246,243,242,241,240,239,238,237, + 235,234,233,232,231,230,229,228,227,226,225,224,223,219,217,216,215,213, + 212,210,209,208,207,205,204,203,202,201,195,194,193,169,167,70,50,26,16, + 15,13,9,0,1,10,11,117,197, +203,16,15,0,7,34,198, +203,16,15,0,7,34,198, +203,16,15,0,7,34,198, +203,16,15,0,7,34,198, +203,16,15,0,7,34,198, +16,15,0,7,198, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,0,192, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,195,194,193, + 169,167,70,50,0,2,4,5,43,49,191,199,200,206, +205,13,9,0,1,10,11,117,197, +205,0,37,38,40, +216,204,16,15,0,102,103, +205,0,37,38,40, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,13,9,0,1, + 10,11,117,197, +262,261,243,242,238,237,215,213,205,203,195,194,169,167,163,162,50,0,3,4,6, + 34,37,38,40,45,49,94,100,105,107,110,120,123,125,127,128,130,132,135, + 138,140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166, + 196,200,244,245, +262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,213,205,195,194, + 193,169,167,70,50,0,2,4,5,27,28,31,35,37,38,40,43,49,199,200,206, +202,0,29, +212,0,44, +203,201,0,32,34, + +}; + + +static unsigned const char ag_astt[6900] = { + 8,8,8,8,8,8,8,1,1,7,1,1,1,1,1,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,1,3,9,7,3,1,1,9,5,3,3,1,1,1,1,1,8,1,1,7,1,0,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,8,1,7,1,1,5,5,1,1,7,1,1,1,1,3,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1, + 1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,7,1,2,2, + 1,1,7,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,5,8,8,8,8,8,8,8,1,1,7,1,1,1,1,1,1,1,1,1, + 1,5,3,3,3,3,1,1,1,1,1,3,7,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,5,3,7,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,1,1,7,1,1,1,1,3,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,10,10,10,7,1,2,2,2,1,1,1, + 10,10,10,7,1,2,2,2,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, + 10,10,10,4,5,1,1,7,1,1,1,1,3,1,7,2,1,2,1,1,5,3,1,2,2,2,1,2,2,2,2,2,2,2,2,2, + 2,2,1,1,1,1,1,2,1,2,8,2,2,2,2,2,2,2,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,7,1,1,1,1,3,1,1,1,1,1,2,7,1,2,1,2,1,1,1, + 1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,9,5,3,3,1,1,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,7,1,1,1,3,3,2,1,3,2,1,1,1,3,3,3,3, + 1,1,1,1,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, + 1,2,2,2,2,2,2,2,2,2,2,2,3,2,7,3,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,3,1,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,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,1,1,7,1,1,1,1,3,5,1,1,7, + 1,1,1,1,3,10,10,10,10,10,10,10,10,10,10,10,10,10,10,5,10,5,5,5,5,5,5,5,5,5, + 5,5,5,10,10,10,10,10,10,5,5,5,1,1,7,1,1,1,1,3,1,5,1,5,1,1,7,1,1,1,1,3,1,7, + 1,1,7,2,5,5,1,1,7,1,1,1,1,3,1,4,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,7,3,2,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,7,1,2,2,1,1,7,1,1,1,7,1,1,4,1,1,1,1,7,1,1,1,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,5,5,5,8,1,5,2,2,2,2,2,2,2,5,5,7,2,1,1,1,2,1,1,2,1, + 2,1,1,1,1,1,1,1,1,7,2,1,2,1,5,3,1,8,5,1,1,7,1,1,1,1,5,1,1,7,1,1,3,1,1,7,3, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1, + 1,10,10,10,4,2,2,2,1,1,1,1,1,2,7,1,2,1,2,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1, + 1,2,2,1,2,2,2,2,7,2,1,2,1,2,1,2,1,1,1,2,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1, + 1,5,1,1,5,5,5,1,5,5,1,5,5,5,7,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,7,1,1,1,1,1,1,1,10, + 10,10,5,10,10,5,2,10,10,10,5,2,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,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3, + 1,7,1,2,1,1,1,1,1,2,7,2,2,1,2,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2, + 1,2,2,2,2,7,2,1,2,1,2,1,2,1,1,1,2,1,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1, + 1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,2,1,2,1,2,1,2,1,1,1,2,1,1,1,2,1,1,1, + 1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,2,1,2,1,2, + 1,2,1,1,1,2,1,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1, + 2,2,1,2,2,2,2,7,2,1,2,1,2,1,2,1,1,1,2,1,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2, + 1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,5,1,1,1,1,1, + 5,1,1,1,1,5,1,1,1,1,5,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1, + 1,1,5,1,1,1,5,1,1,5,1,1,5,1,1,5,1,1,1,5,1,1,5,5,5,1,5,5,5,5,5,7,2,2,10,10, + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,4,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,1,1,7,1,1,1,1,3,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1, + 1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1, + 1,7,1,1,1,1,3,1,5,1,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,1,1,7,1, + 1,1,1,3,2,2,7,2,1,1,1,7,1,1,2,2,5,2,2,5,2,7,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,7,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,5,1,1,7,1,1,1,1,3,1,7,2,1,1,1,1,1,1,7,3, + 1,1,1,2,1,1,1,5,1,1,7,1,1,1,1,3,1,7,2,1,1,1,1,1,1,1,7,3,1,1,1,1,1,1,5,1,1, + 7,1,1,1,1,3,1,7,1,5,1,1,7,1,1,1,1,3,1,7,1,5,1,1,7,1,1,1,1,3,1,7,1,1,5,1,1, + 7,1,1,1,1,3,1,7,1,1,5,1,1,7,1,1,1,1,3,1,7,1,1,1,7,2,1,5,1,1,7,1,1,1,1,3,1, + 7,1,1,1,1,10,10,10,7,1,2,2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1, + 1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1, + 1,1,1,1,1,1,1,2,7,1,2,1,2,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2, + 1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,2,2,1,1,1,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2, + 7,2,1,1,1,2,1,1,2,1,2,1,1,1,1,1,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,1,1,7,1,1,1,1,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2, + 2,2,7,2,1,1,1,2,1,1,2,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2, + 2,2,2,2,2,7,2,1,1,1,2,1,1,2,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,7,2,1,1,1,2,1,1,1,1,1,1,1,1,5,1,1,4,1,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,1,2,2,2,2,2,2,2,5,2,1,1,1,2,1,1,2,1,2,1,1,1,1,1,4,4,4,1,4,4,4,7, + 1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,1,1,5,2,1,1, + 3,3,1,1,1,1,1,3,1,1,3,2,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,2,2, + 2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,1,1,5,2,1,1,3,3,1, + 1,1,1,1,3,1,1,3,2,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,3,1,1,7, + 1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,7,1,1,1,1,1,1,2, + 7,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,2,7,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,1,1,1,2,1,1,2,1,2,1,1,1,1,1, + 1,1,1,1,1,1,1,1,7,1,3,1,1,1,1,1,1,1,7,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,2,1,2,1,2,1,2,1,1,1,2, + 1,1,1,2,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,2,1,2,1,2,1,2,1,1, + 1,2,1,1,1,2,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,2,1,2,1,2,1,2, + 1,1,1,2,1,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2, + 1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1, + 1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,2,1,2,1,2,1,2, + 1,1,1,2,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2, + 7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2, + 2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1, + 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,2,7,1,2,1,2, + 1,1,1,1,1,1,1,2,2,2,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3, + 1,1,1,1,1,2,7,1,2,1,2,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,2,7,1,2,1,2,1,1,1, + 1,1,1,1,2,2,2,2,1,1,1,1,1,1,2,7,1,2,1,2,1,1,1,1,1,1,1,2,2,2,2,1,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,2,7,1,2,1,2,1,1,1,1,1,1, + 1,2,2,2,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,2, + 7,1,2,1,2,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1, + 1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1, + 1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, + 1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1, + 1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2, + 1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1, + 2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1, + 1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1, + 3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2, + 2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2, + 2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1, + 1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1, + 1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2, + 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1, + 1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,1,1,1,2,1,1,2,1,2, + 1,1,1,1,1,2,10,10,10,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,7,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2, + 2,7,2,1,1,1,2,1,1,2,1,2,1,1,1,1,1,1,7,1,1,4,1,1,7,2,1,1,7,2,1,5,1,1,7,1,1, + 1,1,3,1,7,1,5,1,1,7,1,1,1,1,3,1,7,1,1,1,7,2,1,1,7,1,1,7,1,5,1,1,7,1,1,1,1, + 3,1,7,1,5,1,1,7,1,1,1,1,3,1,7,1,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2, + 2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2, + 1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,7, + 2,1,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,1,2,2,2,2,2,2,2,7,2,1,1,1,2,1,1,2,1,2,1,1,1,1,1,1,7,1,1,5,1,5,5,7,1, + 2,2,1,5,5,5,7,2,2,1,4,1,1,4,1,1,4,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,5,5, + 1,5,2,2,2,2,2,2,2,5,5,7,2,1,1,1,2,1,1,2,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,1,1,1,2,2,2,1,2,1,1,1,1,1,1,4,1,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,1,1,1,2,1,1,2,1,2,1,1,1,1,1, + 5,5,5,5,1,1,7,1,1,1,1,3,8,1,1,1,7,1,2,1,2,1,1,1,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,1,1,7,1,1,1, + 1,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,1,1,1,2,1,1,2,1,2, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,4,1,1,1,1, + 7,1,3,1,1,1,4,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1, + 1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2, + 2,2,1,1,1,1,1,4,1,1,1,1,4,1,1,1,4,1,1,4,1,1,4,1,1,4,1,1,4,1,1,4,1,1,1,4,1, + 1,1,1,4,1,1,1,1,4,1,1,1,1,4,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1, + 1,1,1,4,1,1,1,1,1,1,4,1,1,1,4,1,1,4,1,1,4,1,1,4,1,1,7,1,1,1,7,3,1,1,1,7,2, + 1,1,7,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1, + 1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,7,1,1,7,1,1,7,1,1,4,1,1,1,1,7,2,1,1,1,8,1, + 7,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,4,4,4,4,4,4,7,4, + 4,4,4,1,4,4,7,1,1,7,1,1,1,1,7,2,1,1,7,1,1,1,7,2,1,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1, + 2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1, + 1,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,1,1,7,1,1,1,1,3,1,1,1,7,2,1,1,1, + 1,1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,1,7,2,1,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2, + 7,1,1,1,1,2,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1, + 1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,2,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1, + 1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,2,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,7,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1, + 1,1,1,1,1,1,5,1,1,7,1,1,1,1,3,1,7,2,1,2,1,5,5,5,7,2,2,1,7,2,1,2,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2, + 7,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1, + 1,1,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,1,1,1, + 2,1,1,2,1,2,1,1,1,1,1,1,4,1,1,7,2,1,1,7,2,1 +}; + + +static const unsigned short ag_pstt[] = { +3,3,3,3,3,3,3,1,2,0,2,2,1,2,3, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,3,5, + 1,6,1, +1,132,454,132,132,1, +5,6,7,8,15,4,9,3,14,0,14,14,14,14,15,13,12,11,10,9, +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,17,16,4,16,17, +453,453,1,2,5,2,2,1,2,482, +453,453,1,2,6,2,2,1,2,481, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,1,2,7,2,2,1,2,480, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,8,2,2,1,2, + 462, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,9,2, + 2,1,2,455, +18,19,10,20,134,134, +18,19,11,21,134,134, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,12,24,22,23, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,92,26, + 26,26,26,26,26,26,4,9,13,25,25,26,9, +5,6,7,8,4,9,19,17,17,17,17,13,12,11,10,9, +20,15, +9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,11, +12,17, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,18,2,2,1,2, + 519, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,19,2,2,1,2, + 518, +18,19,27,136,136,136,20,28,136,135,135, +18,19,27,136,136,136,21,29,136,135,135, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,130, +453,1,30,23,30,30,1,30,479, +8,24,127,31,35, +4,9,93,91,9, +30,30,30,37,30,30,30,30,30,30,30,30,30,30,30,5,6,7,43,36,30,40,45,57,30,30, + 30,30,30,30,51,26,122,39,39,56,39,50,44,33,32,56,52,51,56,55,57,56,55, + 53,45,56,56,56,54,54,49,48,41,47,12,11,10,46,42,35,34,38, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,27,2,2, + 1,2,472, +18,19,27,58,8,51,28,62,197,31,35,60,32,61,63,59,62,62,195,196,134,134,34, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,29,82,84,82,76,197, + 31,35,81,32,94,61,86,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78,77, + 84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,1,132,454, + 132,132,1,95, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,27,45,97,96,98,8,100,68,30,30, + 30,30,30,30,51,4,9,31,99,99,99,37,39,38,31,34,35,99,33,32,39,39,39,39,9, + 35,34,38, +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,102,101,65,64,63,62,61,60,59,58,57,56,55,50,53,32, + 52,54,54,54,104,103,54, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,48,44,47,47,47,47,47,47, + 47,47,47,47,47,47,47,47,47,47,47,33,46,105, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,1,2,34,2,2,1,2,457, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 1,2,35,2,2,1,2,456, +453,1,2,36,2,2,1,2,475, +453,1,2,37,2,2,1,2,504, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,453,31,453,453,453,453,453,453, + 453,453,453,453,453,453,31,31,31,31,31,31,453,453,453,1,2,38,2,2,1,2, + 463, +106,26,107, +453,1,2,40,2,2,1,2,471, +58,41,108, +8,42,217, +453,453,1,2,43,2,2,1,2,478, +68,87,109, +58,45,110, +111,114,125,117,119,121,123,128,100,4,9,46,218,216,129,127,124,122,120,118, + 116,113,126,115,112,9, +18,19,47,130,134,134, +131,27,48,133,132, +27,49,134, +27,23,135, +136,97,96,51,139,138,137, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,77,77,77,143,8,77,30,30,30, + 30,30,30,51,77,77,52,122,140,140,140,23,141,141,33,31,35,33,32,142,143, + 35,34,38, +8,53,107,31,35, +36,115,114,41, +145,92,4,9,55,144,144,145,9, +92,4,9,56,146,146,95,9, +100,57,97, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,1,2,58,2,2,1,2,470, +18,19,136,136,136,187,136,135,135, +18,19,27,58,8,51,60,62,197,31,35,60,32,61,147,59,62,62,195,196,134,134,34, +18,19,27,58,8,68,211,211,64,209,205,205,51,61,198,148,198,76,197,31,35,81, + 32,61,198,59,148,148,198,75,195,196,67,66,65,205,134,134,34,70,69, +131,106,188,149,150, +117,117,117,152,117,117,68,117,117,117,63,151,129,129, +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,102,101,65,64,63,62,61, + 60,59,58,57,56,55,153,153,64,153,153,153,104,103,153,153, +212,212,212,202, +210,210,201, +208,206,206,206,200,206, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,68,2,2,1,2,460, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,1,2,69,2,2,1,2,502, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,1,2,70,2,2,1,2,501, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,71, + 2,2,1,2,500, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,72, + 2,2,1,2,499, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,73, + 2,2,1,2,495, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,74, + 2,2,1,2,494, +58,75,154,185, +18,19,27,58,8,51,76,182,197,31,35,60,32,61,59,182,195,196,134,134,34, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,77,178,148,178,76, + 197,31,35,81,32,61,178,59,80,79,178,78,77,148,148,178,75,195,196,67,66, + 65,205,134,134,34,70,69, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,78,177,148,177,76, + 197,31,35,81,32,61,177,59,80,79,177,78,77,148,148,177,75,195,196,67,66, + 65,205,134,134,34,70,69, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,79,176,148,176,76, + 197,31,35,81,32,61,176,59,80,79,176,78,77,148,148,176,75,195,196,67,66, + 65,205,134,134,34,70,69, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,80,175,148,175,76, + 197,31,35,81,32,61,175,59,80,79,175,78,77,148,148,175,75,195,196,67,66, + 65,205,134,134,34,70,69, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,81,82,84,82,76,197, + 31,35,81,32,156,61,155,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78, + 77,84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +157,159,161,166,162,160,158, +73,74,163,164,163, +131,106,188,149,165, +167,136,154,166,168, +169,171,175,177,97,98,68,86,151,174,173,178,176,172,170, +169,171,97,98,149,182,181,180,179, +175,177,147,184,183, +185,145,186, +187,143,188, +96,141,189, +190,139,191, +192,194,137,195,193, +117,117,117,152,117,117,117,117,117,94,128,128, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,133, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,96,2,2, + 1,2,465, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,97,2,2, + 1,2,466, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,98,2,2, + 1,2,464, +106,36,196, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,1,2,100,2,2,1,2,461, +71,71,101, +208,197,197,197,102,197,197, +73,73,69, +72,72,68, +45,105,198, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,1,2,106,2,2,1,2,459, +24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,107, + 199, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,108,82,84,82,76,197, + 31,35,81,32,200,61,86,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78, + 77,84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,30,30,30,30,30,30,51,109, + 122,201,201,201,23,33,32,35,34,38, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,110,82,84,82,76,197, + 31,35,81,32,202,61,86,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78, + 77,84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +453,1,2,111,2,2,1,2,517, +8,112,234, +204,206,8,100,4,9,113,235,203,31,208,35,207,205,9, +453,1,2,114,2,2,1,2,512, +8,115,228, +204,206,211,213,100,4,9,116,229,215,214,212,210,209,9, +453,1,2,117,2,2,1,2,510, +27,118,216, +453,1,2,119,2,2,1,2,509, +27,120,217, +453,1,2,121,2,2,1,2,507, +125,122,218,126, +453,1,2,123,2,2,1,2,506, +125,124,219,126, +453,1,2,125,2,2,1,2,511, +27,126,220, +4,9,127,220,9, +453,1,2,128,2,2,1,2,505, +27,129,221, +18,19,222,136,136,136,130,223,136,135,135, +453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,131,2,2,1,2,474, +18,19,27,58,8,68,211,211,64,209,205,205,51,132,224,148,224,76,197,31,35,81, + 32,61,224,59,148,148,224,75,195,196,67,66,65,205,134,134,34,70,69, +18,19,27,58,8,51,133,62,197,31,35,60,32,61,225,59,62,62,195,196,134,134,34, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,134,82,84,82,76,197, + 31,35,81,32,226,61,86,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78, + 77,84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,8,30,30,30,30,30,30,51,135, + 122,140,140,140,23,227,227,33,31,35,33,32,35,34,38, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,1,2,136,2,2,1,2,467, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,8,30,30,30,30,30,30,51,137, + 122,140,140,140,23,228,228,33,31,35,33,32,35,34,38, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,8,30,30,30,30,30,30,51,138, + 122,140,140,140,23,229,229,33,31,35,33,32,35,34,38, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,30,30,30,30,30,30,51,139, + 122,39,39,39,23,44,33,32,230,35,34,38, +106,32,107, +68,88,231, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,8,30,30,30,30,30,30,51,78, + 122,140,140,140,23,232,232,33,31,35,33,32,35,34,38, +84,84,84,98,79,79,79,143,233, +30,30,30,37,30,30,30,30,30,30,30,30,30,30,30,5,6,7,43,36,30,40,45,30,30,30, + 30,30,30,51,4,9,93,122,39,39,91,100,39,50,44,33,32,100,52,51,100,103,53, + 45,100,100,100,54,54,49,48,41,47,12,11,10,46,42,9,35,34,38, +234,96,235, +30,30,30,37,30,30,30,30,30,30,30,30,30,30,30,5,6,7,43,36,30,40,45,30,30,30, + 30,30,30,51,4,9,93,122,39,39,91,99,39,50,44,33,32,99,52,51,99,104,53,45, + 99,99,99,54,54,49,48,41,47,12,11,10,46,42,9,35,34,38, +236,68,147,151,199, +131,106,148,149,165, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,149,237, +58,150,238, +18,19,27,58,8,51,151,239,197,31,35,60,32,61,59,239,239,195,196,134,134,34, +453,453,453,453,453,453,453,453,1,2,152,2,2,1,2,473, +213,153, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,8,30,30,30,30,30,30,51,154, + 122,140,140,140,23,240,240,33,31,35,33,32,35,34,38, +169,171,175,177,236,97,98,68,155,151,199,174,173,178,176,172,170, +236,156,184, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,157, + 2,2,1,2,498, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,158,173,148,173,76, + 197,31,35,81,32,61,173,59,80,79,173,172,78,77,148,148,173,75,195,196,67, + 66,65,205,134,134,34,70,69, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,159, + 2,2,1,2,497, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,160,173,148,173,76, + 197,31,35,81,32,61,173,59,80,79,173,171,78,77,148,148,173,75,195,196,67, + 66,65,205,134,134,34,70,69, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,161, + 2,2,1,2,496, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,162,170,148,170,76, + 197,31,35,81,32,61,170,59,80,79,170,78,77,148,148,170,75,195,196,67,66, + 65,205,134,134,34,70,69, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,163,241,148,241,76, + 197,31,35,81,32,61,241,59,241,80,79,241,78,77,148,148,241,75,195,196,67, + 66,65,205,134,134,34,70,69, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,164,242,148,242,76, + 197,31,35,81,32,61,242,59,242,80,79,242,78,77,148,148,242,75,195,196,67, + 66,65,205,134,134,34,70,69, +18,19,27,58,8,68,211,211,64,209,205,205,51,165,181,148,181,76,197,31,35,243, + 32,61,181,59,148,148,181,75,195,196,67,66,65,205,134,134,34,70,69, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,166,82,148,82,76,197, + 31,35,81,32,61,82,59,244,82,80,79,82,78,77,148,148,82,75,195,196,67,66, + 65,205,134,134,34,70,69, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,167, + 2,2,1,2,493, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,168,82,148,82,76,197, + 31,35,81,32,61,82,59,245,82,80,79,82,78,77,148,148,82,75,195,196,67,66, + 65,205,134,134,34,70,69, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,169, + 2,2,1,2,492, +18,19,27,58,8,51,170,62,197,31,35,60,32,61,246,59,62,62,195,196,134,134,34, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,171, + 2,2,1,2,491, +18,19,27,58,8,51,172,62,197,31,35,60,32,61,247,59,62,62,195,196,134,134,34, +18,19,27,58,8,51,173,62,197,31,35,60,32,61,248,59,62,62,195,196,134,134,34, +18,19,27,58,8,51,174,62,197,31,35,60,32,61,249,59,62,62,195,196,134,134,34, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,175, + 2,2,1,2,490, +18,19,27,58,8,51,176,62,197,31,35,60,32,61,250,59,62,62,195,196,134,134,34, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,177, + 2,2,1,2,489, +18,19,27,58,8,51,178,62,197,31,35,60,32,61,251,59,62,62,195,196,134,134,34, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,179,82,148,82,76,197, + 31,35,81,32,61,82,59,252,83,82,80,79,82,78,77,148,148,82,75,195,196,67, + 66,65,205,134,134,34,70,69, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,180,82,148,82,76,197, + 31,35,81,32,61,82,59,253,83,82,80,79,82,78,77,148,148,82,75,195,196,67, + 66,65,205,134,134,34,70,69, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,181,82,148,82,76,197, + 31,35,81,32,61,82,59,254,83,82,80,79,82,78,77,148,148,82,75,195,196,67, + 66,65,205,134,134,34,70,69, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,182,82,148,82,76,197, + 31,35,81,32,61,82,59,255,83,82,80,79,82,78,77,148,148,82,75,195,196,67, + 66,65,205,134,134,34,70,69, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,183,82,84,82,76,197, + 31,35,81,32,61,256,82,59,257,85,83,82,80,79,82,78,77,84,84,82,75,195, + 196,67,66,65,205,134,134,34,70,69, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,184,82,84,82,76,197, + 31,35,81,32,61,256,82,59,258,85,83,82,80,79,82,78,77,84,84,82,75,195, + 196,67,66,65,205,134,134,34,70,69, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,185, + 2,2,1,2,488, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,186,82,84,82,76,197, + 31,35,81,32,61,86,82,59,259,87,85,83,82,80,79,82,78,77,84,84,82,75,195, + 196,67,66,65,205,134,134,34,70,69, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,187, + 2,2,1,2,487, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,188,82,84,82,76,197, + 31,35,81,32,61,86,82,59,260,88,87,85,83,82,80,79,82,78,77,84,84,82,75, + 195,196,67,66,65,205,134,134,34,70,69, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,189,82,84,82,76,197, + 31,35,81,32,61,86,82,59,261,89,88,87,85,83,82,80,79,82,78,77,84,84,82, + 75,195,196,67,66,65,205,134,134,34,70,69, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,190, + 2,2,1,2,486, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,191,82,84,82,76,197, + 31,35,81,32,61,86,82,59,262,90,89,88,87,85,83,82,80,79,82,78,77,84,84, + 82,75,195,196,67,66,65,205,134,134,34,70,69, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,192, + 2,2,1,2,485, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,193,82,84,82,76,197, + 31,35,81,32,61,86,82,59,263,91,90,89,88,87,85,83,82,80,79,82,78,77,84, + 84,82,75,195,196,67,66,65,205,134,134,34,70,69, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,194, + 2,2,1,2,484, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,195,82,84,82,76,197, + 31,35,81,32,264,61,86,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78, + 77,84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,8,30,30,30,30,30,30,51,196, + 122,140,140,140,23,265,265,33,31,35,33,32,35,34,38, +208,76,76,76,74,76, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,48,49,47,47,47,47,47,47, + 47,47,47,47,47,47,47,47,47,47,47,198,46,105, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,8,30,30,30,30,30,30,51,199, + 122,140,140,140,23,266,266,33,31,35,33,32,35,34,38, +236,200,267, +106,27,107, +236,202,106, +4,9,203,238,9, +453,1,2,204,2,2,1,2,516, +27,205,268, +453,1,2,206,2,2,1,2,515, +27,207,269, +4,9,208,226,9, +27,209,270, +27,210,271, +453,1,2,211,2,2,1,2,514, +27,212,272, +453,1,2,213,2,2,1,2,513, +27,214,273, +4,9,215,225,9, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,216,82,84,82,76,197, + 31,35,81,32,274,61,86,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78, + 77,84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,217,82,84,82,76,197, + 31,35,81,32,275,61,86,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78, + 77,84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +4,9,218,222,9, +4,9,219,221,9, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,220,82,84,82,76,197, + 31,35,81,32,276,61,86,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78, + 77,84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,30,30,30,30,30,30,51,221, + 277,277,277,33,32,278,277,35,34,38, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,1,2,222,2,2,1,2,477, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,8,30,30,30,30,30,30,51,223, + 122,140,140,140,23,279,279,33,31,35,33,32,35,34,38, +27,224,280, +152,117,68,117,117,225,151,120,120, +152,117,117,117,226,119,119, +68,116,231, +68,83,231, +68,82,231, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,77,77,77,8,77,30,30,30,30, + 30,30,51,77,77,230,122,140,140,140,23,141,141,33,31,35,33,32,142,281,35, + 34,38, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,8,30,30,30,30,30,30,51,231, + 122,140,140,140,23,29,33,31,35,33,32,35,34,38, +68,89,231, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,8,30,30,30,30,30,30,51,233, + 122,140,140,140,23,282,282,33,31,35,33,32,35,34,38, +453,453,453,453,1,2,234,2,2,1,2,468, +283,8,4,9,235,25,101,31,35,25,283,9, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,1,2,236,2,2,1,2,469, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,8,30,30,30,30,30,30,51,237, + 122,140,140,140,23,284,284,33,31,35,33,32,35,34,38, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,238,82,84,82,76,197, + 31,35,81,32,285,61,86,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78, + 77,84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +131,106,189,149,150, +236,68,240,231,186, +157,159,161,168,162,160,158, +157,159,161,167,162,160,158, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,243,82,84,82,76,197, + 31,35,81,32,286,61,155,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78, + 77,84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +73,74,165,164,163, +73,74,164,164,163, +68,162,151, +68,161,151, +68,160,151, +68,159,151, +68,153,151, +68,152,151, +167,136,158,166,168, +167,136,157,166,168, +167,136,156,166,168, +167,136,155,166,168, +169,171,97,98,68,256,151,174,173,172,170, +169,171,97,98,151,182,181,180,179, +169,171,97,98,150,182,181,180,179, +175,177,148,184,183, +185,146,186, +187,144,188, +96,142,189, +190,140,191, +287,264,288, +68,289,265,43,231, +68,289,266,25,231, +8,267,123,31,35, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,30,30,30,30,30,30,51,268, + 277,277,277,33,32,290,277,35,34,38, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,30,30,30,30,30,30,51,269, + 277,277,277,33,32,291,277,35,34,38, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,30,30,30,30,30,30,51,270, + 277,277,277,33,32,292,277,35,34,38, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,30,30,30,30,30,30,51,271, + 277,277,277,33,32,293,277,35,34,38, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,30,30,30,30,30,30,51,272, + 277,277,277,33,32,294,277,35,34,38, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,273,295,38, +296,274,297, +296,275,298, +296,276,299, +106,239,300, +68,4,9,278,219,301,9, +302,303,68,279,231,303,303, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,280,82,84,82,76,197, + 31,35,81,32,304,61,86,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78, + 77,84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +86,86,86,81,81,81,281, +85,85,85,80,68,80,80,282,231, +40,283,305,45, +68,289,284,193,231, +306,285,307, +306,236,286,184,307, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,287, + 2,2,1,2,483, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,288,82,84,82,76,197, + 31,35,81,32,138,61,86,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78, + 77,84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453, + 453,453,1,2,289,2,2,1,2,458, +68,4,9,290,237,301,9, +68,4,9,291,236,301,9, +68,4,9,292,233,301,9, +68,4,9,293,232,301,9, +68,4,9,294,231,301,9, +4,9,295,230,9, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,296, + 2,2,1,2,508, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,297,82,84,82,76,197, + 31,35,81,32,224,61,86,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78, + 77,84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,298,82,84,82,76,197, + 31,35,81,32,223,61,86,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78, + 77,84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,299,82,84,82,76,197, + 31,35,81,32,227,61,86,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78, + 77,84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, + 244,244,244,244,244,300,308, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,30,30,30,30,30,30,51,301, + 309,309,309,33,32,309,35,34,38, +453,1,2,302,2,2,1,2,476, +8,303,126,31,35, +152,117,117,117,304,121,121, +8,305,105,31,35, +453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,1,2,306, + 2,2,1,2,503, +18,19,71,72,73,74,27,58,8,68,211,211,64,209,205,205,51,307,82,84,82,76,197, + 31,35,81,32,310,61,86,82,59,93,92,91,90,89,88,87,85,83,82,80,79,82,78, + 77,84,84,82,75,195,196,67,66,65,205,134,134,34,70,69, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,8,30,30,30,30,30,30,51,308, + 122,140,140,140,23,311,311,33,31,35,33,32,35,34,38, +106,240,300, +236,310,191, +68,289,311,245,231, + +}; + + +static const unsigned short ag_sbt[] = { + 0, 15, 56, 62, 82, 121, 131, 141, 170, 229, 290, 296, 302, 327, + 365, 381, 383, 419, 421, 480, 539, 550, 561, 583, 592, 597, 602, 670, + 712, 735, 797, 825, 878, 933, 972,1038,1083,1092,1101,1146,1149,1158, + 1161,1164,1174,1177,1180,1206,1212,1217,1220,1223,1230,1279,1284,1288, + 1297,1305,1308,1344,1353,1376,1417,1422,1436,1490,1494,1497,1503,1543, + 1595,1647,1672,1697,1722,1747,1751,1772,1822,1872,1922,1972,2034,2041, + 2046,2051,2056,2071,2080,2085,2088,2091,2094,2097,2102,2114,2136,2178, + 2220,2262,2265,2333,2336,2343,2346,2349,2352,2384,2410,2472,2506,2568, + 2577,2580,2595,2604,2607,2622,2631,2634,2643,2646,2655,2659,2668,2672, + 2681,2684,2689,2698,2701,2712,2733,2774,2797,2859,2899,2935,2975,3015, + 3051,3054,3057,3097,3106,3174,3177,3245,3250,3255,3281,3284,3306,3322, + 3324,3364,3381,3384,3409,3460,3485,3536,3561,3611,3662,3713,3754,3806, + 3831,3883,3908,3931,3956,3979,4002,4025,4050,4073,4098,4121,4174,4227, + 4280,4333,4388,4443,4468,4524,4549,4606,4664,4689,4748,4773,4833,4858, + 4920,4960,4966,5005,5045,5048,5051,5054,5059,5068,5071,5080,5083,5088, + 5091,5094,5103,5106,5115,5118,5123,5185,5247,5252,5257,5319,5353,5385, + 5425,5428,5437,5444,5447,5450,5453,5501,5540,5543,5583,5595,5607,5659, + 5699,5761,5766,5771,5778,5785,5847,5852,5857,5860,5863,5866,5869,5872, + 5875,5880,5885,5890,5895,5906,5915,5924,5929,5932,5935,5938,5941,5944, + 5949,5954,5959,5993,6027,6061,6095,6129,6153,6156,6159,6162,6165,6172, + 6179,6241,6248,6257,6261,6266,6269,6274,6299,6361,6426,6433,6440,6447, + 6454,6461,6466,6491,6553,6615,6677,6703,6736,6745,6750,6757,6762,6787, + 6849,6889,6892,6895,6900 +}; + + +static const unsigned short ag_sbe[] = { + 9, 53, 58, 69, 118, 125, 135, 164, 223, 284, 292, 298, 323, 360, + 371, 382, 418, 420, 474, 533, 545, 556, 582, 586, 593, 599, 633, 706, + 718, 752, 820, 857, 925, 969,1032,1077,1086,1095,1140,1147,1152,1159, + 1162,1168,1175,1178,1191,1208,1214,1218,1221,1226,1261,1280,1285,1292, + 1300,1306,1338,1349,1359,1389,1419,1432,1482,1493,1496,1501,1537,1589, + 1641,1666,1691,1716,1741,1748,1757,1789,1839,1889,1939,1989,2037,2043, + 2048,2053,2063,2075,2082,2086,2089,2092,2095,2099,2111,2135,2172,2214, + 2256,2263,2327,2335,2340,2345,2348,2350,2378,2408,2427,2495,2523,2571, + 2578,2586,2598,2605,2614,2625,2632,2637,2644,2649,2656,2662,2669,2675, + 2682,2686,2692,2699,2707,2727,2746,2780,2814,2883,2929,2959,2999,3038, + 3052,3055,3081,3104,3138,3175,3209,3247,3252,3279,3282,3290,3316,3323, + 3348,3372,3382,3403,3426,3479,3502,3555,3578,3628,3679,3726,3771,3825, + 3848,3902,3914,3950,3962,3985,4008,4044,4056,4092,4104,4138,4191,4244, + 4297,4350,4405,4462,4485,4543,4566,4623,4683,4706,4767,4790,4852,4875, + 4944,4964,5002,5029,5046,5049,5052,5056,5062,5069,5074,5081,5085,5089, + 5092,5097,5104,5109,5116,5120,5140,5202,5249,5254,5274,5342,5379,5409, + 5426,5433,5441,5445,5448,5451,5483,5525,5541,5567,5589,5599,5653,5683, + 5716,5763,5768,5774,5781,5802,5849,5854,5858,5861,5864,5867,5870,5873, + 5877,5882,5887,5892,5900,5910,5919,5926,5930,5933,5936,5939,5942,5946, + 5951,5955,5982,6016,6050,6084,6118,6150,6154,6157,6160,6163,6168,6175, + 6196,6247,6255,6258,6263,6267,6271,6293,6316,6420,6429,6436,6443,6450, + 6457,6463,6485,6508,6570,6632,6701,6726,6739,6746,6754,6758,6781,6804, + 6873,6890,6893,6897,6900 +}; + + +static const unsigned char ag_fl[] = { + 2,1,1,2,1,2,2,1,1,2,0,1,3,1,1,1,1,2,0,1,2,1,1,1,0,5,1,3,1,3,1,2,1,1,2, + 1,2,2,2,2,1,1,1,4,2,1,2,1,0,3,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,2,2,2,2,1,2,0,1,2,4,4,3,3,2,4,4,1,1,2,1,2,0,1,0,2,2,4,1,3,3,4,1,3,3, + 6,4,2,1,1,1,1,1,1,2,1,3,0,1,4,4,6,1,5,0,1,6,3,5,5,1,1,2,3,1,2,2,1,5,1, + 3,1,3,1,3,1,3,1,3,1,3,3,3,3,1,3,3,3,3,3,3,3,3,1,3,3,1,3,3,1,3,3,3,1,1, + 2,2,2,2,1,1,3,2,1,3,2,3,1,1,3,1,7,0,5,1,1,1,1,2,3,1,1,1,1,1,1,2,1,1,1, + 2,1,2,3,1,1,2,2,2,5,3,4,4,6,6,4,4,5,2,2,5,5,5,5,2,2,5,5,3,1,3,1,1,1,0, + 5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, + 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 +}; + +static const unsigned short ag_ptt[] = { + 0, 1, 1, 10, 11, 11, 11,198, 18, 18, 19, 19,198, 23, 23, 23, 24, 24, + 25, 25, 20, 27, 27, 27, 30, 27, 33, 33, 31, 31,206,206, 35, 35, 37, 38, + 38, 38, 38, 38, 41, 41, 41, 41,199, 43, 43, 46, 48, 46,200, 49, 49, 51, + 51, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 65, 65, 65, 67, + 68, 69, 66, 73, 73, 78, 78, 75, 75, 75, 75, 75, 80, 80, 80, 76, 77, 77, + 84, 84, 85, 85, 88, 88, 88, 21, 86, 86, 86, 86, 87, 87, 87, 87, 92, 91, + 89, 89, 89, 89, 89, 99, 99, 89, 95,103,103, 95, 95, 95,101, 98,113,113, + 96, 22, 22, 22,222,117,117,222,110,110,110, 94, 94,120,120,123,123,125, + 125,127,127,128,128,130,130,130,130,130,132,132,132,132,132,132,132,132, + 132,135,135,135,138,138,138,140,140,140,140,146,143,143,143,143,143,107, + 107,107,107,107,107,107,154,152,105,105,150,150,158,150,151,151,151,151, + 151,151,244,244,244,164,164,159,159, 74, 74,160,160,161,161,245,170,170, + 97,172,172,172,172,172,172,172,172,172,172,176,182,182,182,182,182,182, + 183,183,183,183,183,175,175,191,191,191,192,191,119, 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, 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, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 42, 42, 42, + 42, 42, 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, + 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, 71, 71,118, + 118,165,165,165,168,168,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,197,197, 7, 5, 4, 32, 29, 34, 39, 40, 2, 79, 81, 82, 83, + 90, 44, 45, 93,100,102,106,108,112,111,109, 8,114,115,116,122,121,124, + 126,129,131,133,134,136,137,139,141,142,144,145,147,148,149, 3, 6,157, + 173,174,177,178,180,179,181,184,185,186,187,188,189,190,166,196 +}; + +static const unsigned short *ag_valid(int ag_k) { + const unsigned short *ag_tp = &ag_tstt[ag_sbt[(PCB).sn+1]]; + while (*--ag_tp != (unsigned short) ag_k) if (*ag_tp == 0) return NULL; + return ag_tp; +} + +int cc-crash_change_reduction(cc-crash_token_type ag_k) { + if (!ag_valid(ag_k)) return 0; + (PCB).reduction_token = ag_k; + return 1; +} + +static void ag_default(const int *ag_tp) { + (PCB).ag_dsn = (PCB).sn; + (PCB).ag_dtl = ag_tp; + while (!ag_valid((cc-crash_token_type) *ag_tp)) ag_tp++; + (PCB).reduction_token = (cc-crash_token_type) *ag_tp; +} + + + +static void ag_ra(void) +{ + switch(ag_rpx[(PCB).ag_ap]) { + case 1: ag_rp_1(V(0,(unsigned *))); break; + case 2: ag_rp_2(); break; + case 3: ag_rp_3(); break; + case 4: ag_rp_4(); break; + case 5: ag_rp_5(); break; + case 6: ag_rp_6(V(0,(int *))); break; + case 7: ag_rp_7(V(1,(int *))); break; + case 8: ag_rp_8(); break; + case 9: ag_rp_9(); break; + case 10: ag_rp_10(); break; + case 11: ag_rp_11(); break; + case 12: ag_rp_12(V(0,(int *))); break; + case 13: ag_rp_13(); break; + case 14: ag_rp_14(); break; + case 15: ag_rp_15(); break; + case 16: ag_rp_16(V(0,(int *))); break; + case 17: ag_rp_17(V(0,(int *))); break; + case 18: V(0,(int *)) = ag_rp_18(); break; + case 19: V(0,(int *)) = ag_rp_19(); break; + case 20: V(0,(int *)) = ag_rp_20(); break; + case 21: V(0,(int *)) = ag_rp_21(); break; + case 22: V(0,(int *)) = ag_rp_22(); break; + case 23: V(0,(int *)) = ag_rp_23(); break; + case 24: V(0,(int *)) = ag_rp_24(); break; + case 25: V(0,(int *)) = ag_rp_25(); break; + case 26: V(0,(int *)) = ag_rp_26(); break; + case 27: V(0,(int *)) = ag_rp_27(); break; + case 28: V(0,(int *)) = ag_rp_28(); break; + case 29: V(0,(int *)) = ag_rp_29(V(1,(int *))); break; + case 30: V(0,(int *)) = ag_rp_30(V(0,(int *)), V(1,(int *))); break; + case 31: V(0,(int *)) = ag_rp_31(V(0,(int *)), V(1,(int *))); break; + case 32: V(0,(int *)) = ag_rp_32(V(1,(long *))); break; + case 33: V(0,(long *)) = ag_rp_33(V(0,(long *)), V(1,(long *))); break; + case 34: ag_rp_34(); break; + case 35: ag_rp_35(); break; + case 36: ag_rp_36(V(0,(char * *))); break; + case 37: ag_rp_37(V(0,(char * *))); break; + case 38: ag_rp_38(V(0,(char * *))); break; + case 39: V(0,(char * *)) = ag_rp_39(); break; + case 40: V(0,(char * *)) = ag_rp_40(); break; + case 41: V(0,(char * *)) = ag_rp_41(V(0,(char * *))); break; + case 42: ag_rp_42(); break; + case 43: ag_rp_43(); break; + case 44: ag_rp_44(); break; + case 45: ag_rp_45(V(0,(int *))); break; + case 46: V(0,(int *)) = ag_rp_46(V(2,(int *))); break; + case 47: V(0,(int *)) = ag_rp_47(V(2,(int *))); break; + case 48: V(0,(int *)) = ag_rp_48(V(0,(int *)), V(4,(int *))); break; + case 49: V(0,(int *)) = ag_rp_49(V(2,(long *))); break; + case 50: V(0,(int *)) = ag_rp_50(V(0,(int *))); break; + case 51: ag_rp_51(V(0,(unsigned *))); break; + case 52: ag_rp_52(V(0,(unsigned *)), V(2,(long *))); break; + case 53: ag_rp_53(V(0,(unsigned *))); break; + case 54: ag_rp_54(V(0,(unsigned *)), V(2,(long *)), V(4,(long *))); break; + case 55: ag_default(&ag_rtt[0]); V(0,(unsigned *)) = ag_rp_55(); break; + case 56: ag_rp_56(V(2,(long *))); break; + case 57: ag_rp_57(); break; + case 58: ag_rp_58(V(1,(int *))); break; + case 59: ag_rp_59(V(3,(long *))); break; + case 60: ag_rp_60(); break; + case 61: V(0,(int *)) = ag_rp_61(); break; + case 62: V(0,(int *)) = ag_rp_62(V(0,(int *))); break; + case 63: ag_rp_63(V(0,(int *))); break; + case 64: ag_rp_64(V(1,(int *))); break; + case 65: ag_rp_65(V(1,(int *))); break; + case 66: V(0,(long *)) = ag_rp_66(V(0,(long *)), V(2,(long *)), V(4,(long *))); break; + case 67: V(0,(long *)) = ag_rp_67(V(0,(long *)), V(2,(long *))); break; + case 68: V(0,(long *)) = ag_rp_68(V(0,(long *)), V(2,(long *))); break; + case 69: V(0,(long *)) = ag_rp_69(V(0,(long *)), V(2,(long *))); break; + case 70: V(0,(long *)) = ag_rp_70(V(0,(long *)), V(2,(long *))); break; + case 71: V(0,(long *)) = ag_rp_71(V(0,(long *)), V(2,(long *))); break; + case 72: V(0,(long *)) = ag_rp_72(V(0,(long *)), V(2,(long *))); break; + case 73: V(0,(long *)) = ag_rp_73(V(0,(long *)), V(2,(long *))); break; + case 74: V(0,(long *)) = ag_rp_74(); break; + case 75: V(0,(long *)) = ag_rp_75(); break; + case 76: V(0,(long *)) = ag_rp_76(V(0,(long *)), V(2,(long *))); break; + case 77: V(0,(long *)) = ag_rp_77(V(0,(long *)), V(2,(long *))); break; + case 78: V(0,(long *)) = ag_rp_78(V(0,(long *)), V(2,(long *))); break; + case 79: V(0,(long *)) = ag_rp_79(V(0,(long *)), V(2,(long *))); break; + case 80: V(0,(long *)) = ag_rp_80(); break; + case 81: V(0,(long *)) = ag_rp_81(); break; + case 82: V(0,(long *)) = ag_rp_82(); break; + case 83: V(0,(long *)) = ag_rp_83(); break; + case 84: V(0,(long *)) = ag_rp_84(V(0,(long *)), V(2,(long *))); break; + case 85: V(0,(long *)) = ag_rp_85(V(0,(long *)), V(2,(long *))); break; + case 86: V(0,(long *)) = ag_rp_86(V(0,(long *)), V(2,(long *))); break; + case 87: V(0,(long *)) = ag_rp_87(V(0,(long *)), V(2,(long *))); break; + case 88: V(0,(long *)) = ag_rp_88(V(0,(long *)), V(2,(long *))); break; + case 89: V(0,(long *)) = ag_rp_89(V(0,(long *)), V(2,(long *))); break; + case 90: V(0,(long *)) = ag_rp_90(V(0,(long *)), V(2,(long *))); break; + case 91: V(0,(long *)) = ag_rp_91(V(0,(long *))); break; + case 92: V(0,(long *)) = ag_rp_92(V(1,(long *))); break; + case 93: V(0,(long *)) = ag_rp_93(V(1,(long *))); break; + case 94: V(0,(long *)) = ag_rp_94(V(1,(long *))); break; + case 95: V(0,(long *)) = ag_rp_95(V(1,(long *))); break; + case 96: V(0,(long *)) = ag_rp_96(V(2,(long *))); break; + case 97: V(0,(long *)) = ag_rp_97(); break; + case 98: V(0,(long *)) = ag_rp_98(V(1,(long *))); break; + case 99: V(0,(long *)) = ag_rp_99(V(0,(long *))); break; + case 100: ag_default(&ag_rtt[4]); V(0,(long *)) = ag_rp_100(); break; + case 101: ag_rp_101(); break; + case 102: ag_rp_102(V(3,(long *)), V(5,(long *))); break; + case 103: ag_rp_103(); break; + case 104: ag_rp_104(); break; + case 105: ag_rp_105(V(0,(long *))); break; + case 106: ag_rp_106(V(0,(long *))); break; + case 107: ag_rp_107(); break; + case 108: ag_rp_108(V(1,(long *))); break; + case 109: V(0,(long *)) = ag_rp_109(); break; + case 110: V(0,(long *)) = ag_rp_110(V(0,(long *)), V(1,(long *))); break; + case 111: V(0,(long *)) = ag_rp_111(V(0,(int *))); break; + case 112: V(0,(long *)) = ag_rp_112(); break; + case 113: V(0,(long *)) = ag_rp_113(V(0,(long *)), V(1,(int *))); break; + case 114: V(0,(long *)) = ag_rp_114(V(0,(int *))); break; + case 115: V(0,(long *)) = ag_rp_115(V(0,(long *)), V(1,(int *))); break; + case 116: V(0,(int *)) = ag_rp_116(V(1,(int *))); break; + case 117: ag_rp_117(V(0,(screen_descriptor * *))); break; + case 118: V(0,(screen_descriptor * *)) = ag_rp_118(); break; + case 119: V(0,(screen_descriptor * *)) = ag_rp_119(V(0,(screen_descriptor * *))); break; + case 120: V(0,(screen_descriptor * *)) = ag_rp_120(V(0,(screen_descriptor * *)), V(1,(int *))); break; + case 121: V(0,(screen_descriptor * *)) = ag_rp_121(V(0,(screen_descriptor * *)), V(2,(int *))); break; + case 122: V(0,(screen_descriptor * *)) = ag_rp_122(V(0,(screen_descriptor * *)), V(2,(int *))); break; + case 123: V(0,(screen_descriptor * *)) = ag_rp_123(V(0,(screen_descriptor * *)), V(3,(long *)), V(5,(long *))); break; + case 124: V(0,(screen_descriptor * *)) = ag_rp_124(V(0,(screen_descriptor * *)), V(3,(long *)), V(5,(long *))); break; + case 125: V(0,(screen_descriptor * *)) = ag_rp_125(V(0,(screen_descriptor * *)), V(1,(query_item * *))); break; + case 126: V(0,(screen_descriptor * *)) = ag_rp_126(V(0,(screen_descriptor * *)), V(1,(query_item * *))); break; + case 127: V(0,(int *)) = ag_rp_127(V(2,(long *)), V(4,(long *))); break; + case 128: V(0,(query_item * *)) = ag_rp_128(); break; + case 129: V(0,(query_item * *)) = ag_rp_129(V(0,(query_item * *))); break; + case 130: V(0,(query_item * *)) = ag_rp_130(V(0,(query_item * *))); break; + case 131: V(0,(query_item * *)) = ag_rp_131(V(0,(query_item * *))); break; + case 132: V(0,(query_item * *)) = ag_rp_132(V(0,(query_item * *))); break; + case 133: V(0,(query_item * *)) = ag_rp_133(); break; + case 134: V(0,(query_item * *)) = ag_rp_134(V(0,(query_item * *))); break; + case 135: V(0,(query_item * *)) = ag_rp_135(V(0,(query_item * *))); break; + case 136: V(0,(query_item * *)) = ag_rp_136(V(0,(query_item * *))); break; + case 137: ag_rp_137(); break; + case 138: ag_rp_138(); break; + case 139: ag_rp_139(); break; + case 140: ag_rp_140(); break; + } + (PCB).la_ptr = (PCB).pointer; +} + +#define TOKEN_NAMES cc-crash_token_names +const char *const cc-crash_token_names[263] = { + "script file", + "ws", + "literal", + "integer constant", + "string literal", + "paren string", + "character constant", + "eol", + "literals", + "white", + "comment", + "comment head", + "\"*/\"", + "\"/*\"", + "", + "'\\n'", + "\"//\"", + "not eol", + "", + "", + "script file", + "execution block", + "declaration", + "", + "", + "", + "eof", + "word", + "undeclared variable", + "'['", + "", + "parameter string", + "']'", + "string", + "'#'", + "param word", + "text char", + "action text", + "action text head", + "'}'", + "'{'", + "action word", + "operator", + "paren string chars", + "')'", + "'('", + "paren string char", + "not paren", + "", + "string chars", + "'\\\"'", + "string char", + "not double quote", + "escape sequence", + "\"\\\\a\"", + "\"\\\\b\"", + "\"\\\\f\"", + "\"\\\\n\"", + "\"\\\\r\"", + "\"\\\\t\"", + "\"\\\\v\"", + "\"\\\\\\\\\"", + "\"\\\\?\"", + "\"\\\\\\'\"", + "\"\\\\\\\"\"", + "octal escape", + "hex escape", + "one octal", + "two octal", + "three octal", + "'\\\\'", + "", + "\"\\\\x\"", + "hex number", + "hex digit", + "command", + "identifier", + "parameters", + "", + "'<'", + "piped command", + "'|'", + "'>'", + "\">>\"", + "", + "", + "command sequence", + "if sequence", + "", + "statement", + "\"else\"", + "if statement", + "if condition", + "\"if\"", + "conditional exp", + "assignment", + "for statement", + "screen description", + "while statement", + "", + "'='", + "integer variable", + "';'", + "", + "string variable", + "string exp", + "'@'", + "primary exp", + "\"while\"", + "\"for\"", + "name", + "\"in\"", + "\"do\"", + "", + "\"action\"", + "\"int\"", + "\"string\"", + "", + "letter", + "digit", + "logical or exp", + "'\\?'", + "':'", + "logical and exp", + "\"||\"", + "inclusive or exp", + "\"&&\"", + "exclusive or exp", + "and exp", + "'^'", + "equality exp", + "'&'", + "relational exp", + "\"==\"", + "\"!=\"", + "shift exp", + "\"<=\"", + "\">=\"", + "additive exp", + "\"<<\"", + "multiplicative exp", + "'+'", + "'-'", + "unary exp", + "'*'", + "'/'", + "nonzero", + "'%'", + "'~'", + "'!'", + "string term", + "string element", + "numeric name", + "built_in name", + "built_in argument", + "string name", + "undefined name", + "\"..\"", + "", + "hex constant", + "octal constant", + "decimal constant", + "\"0x\"", + "\"0X\"", + "", + "", + "", + "'0'", + "", + "'\\''", + "char constant element", + "not single quote", + "screen items", + "\"screen\"", + "\"title\"", + "formula", + "color spec", + "\"entry\"", + "\"highlight\"", + "\"size\"", + "','", + "\"location\"", + "query line", + "button line", + "\"color\"", + "\"field\"", + "\"variable\"", + "\"default\"", + "\"prompt\"", + "\"explanation\"", + "\"button\"", + "formula element", + "", + "", + "", + "", + "", + "", + "eol", + "paren string", + "string literal", + "']'", + "'['", + "'#'", + "'}'", + "'{'", + "literal", + "'<'", + "'|'", + "'>'", + "\">>\"", + "\"else\"", + "')'", + "'('", + "\"if\"", + "'='", + "';'", + "'@'", + "\"while\"", + "\"do\"", + "\"in\"", + "\"for\"", + "literals", + "\"action\"", + "\"int\"", + "\"string\"", + "':'", + "'\\?'", + "\"||\"", + "\"&&\"", + "'^'", + "'&'", + "\"==\"", + "\"!=\"", + "\"<=\"", + "\">=\"", + "\"<<\"", + "'+'", + "'-'", + "'*'", + "'/'", + "'%'", + "'~'", + "'!'", + "integer constant", + "character constant", + "\"..\"", + "\"screen\"", + "\"title\"", + "\"entry\"", + "\"highlight\"", + "','", + "\"size\"", + "\"location\"", + "\"color\"", + "\"field\"", + "\"variable\"", + "\"default\"", + "\"prompt\"", + "\"explanation\"", + "\"button\"", + "", + "", + +}; + +#ifndef MISSING_FORMAT +#define MISSING_FORMAT "Missing %s" +#endif +#ifndef UNEXPECTED_FORMAT +#define UNEXPECTED_FORMAT "Unexpected %s" +#endif +#ifndef UNNAMED_TOKEN +#define UNNAMED_TOKEN "input" +#endif + + +static void ag_diagnose(void) { + int ag_snd = (PCB).sn; + int ag_k = ag_sbt[ag_snd]; + + if (*TOKEN_NAMES[ag_tstt[ag_k]] && ag_astt[ag_k + 1] == ag_action_8) { + sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]); + } + else if (ag_astt[ag_sbe[(PCB).sn]] == ag_action_8 + && (ag_k = (int) ag_sbe[(PCB).sn] + 1) == (int) ag_sbt[(PCB).sn+1] - 1 + && *TOKEN_NAMES[ag_tstt[ag_k]]) { + sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]); + } + else if ((PCB).token_number && *TOKEN_NAMES[(PCB).token_number]) { + sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, TOKEN_NAMES[(PCB).token_number]); + } + else if (isprint(INPUT_CODE((*(PCB).pointer))) && INPUT_CODE((*(PCB).pointer)) != '\\') { + char buf[20]; + sprintf(buf, "\'%c\'", (char) INPUT_CODE((*(PCB).pointer))); + sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, buf); + } + else sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, UNNAMED_TOKEN); + (PCB).error_message = (PCB).ag_msg; + + +} +static int ag_action_1_r_proc(void); +static int ag_action_2_r_proc(void); +static int ag_action_3_r_proc(void); +static int ag_action_4_r_proc(void); +static int ag_action_1_s_proc(void); +static int ag_action_3_s_proc(void); +static int ag_action_1_proc(void); +static int ag_action_2_proc(void); +static int ag_action_3_proc(void); +static int ag_action_4_proc(void); +static int ag_action_5_proc(void); +static int ag_action_6_proc(void); +static int ag_action_7_proc(void); +static int ag_action_8_proc(void); +static int ag_action_9_proc(void); +static int ag_action_10_proc(void); +static int ag_action_11_proc(void); +static int ag_action_8_proc(void); + + +static int (*const ag_r_procs_scan[])(void) = { + ag_action_1_r_proc, + ag_action_2_r_proc, + ag_action_3_r_proc, + ag_action_4_r_proc +}; + +static int (*const ag_s_procs_scan[])(void) = { + ag_action_1_s_proc, + ag_action_2_r_proc, + ag_action_3_s_proc, + ag_action_4_r_proc +}; + +static int (*const ag_gt_procs_scan[])(void) = { + ag_action_1_proc, + ag_action_2_proc, + ag_action_3_proc, + ag_action_4_proc, + ag_action_5_proc, + ag_action_6_proc, + ag_action_7_proc, + ag_action_8_proc, + ag_action_9_proc, + ag_action_10_proc, + ag_action_11_proc, + ag_action_8_proc +}; + + +static int ag_action_10_proc(void) { + int ag_t = (PCB).token_number; + (PCB).btsx = 0, (PCB).drt = -1; + do { + ag_track(); + (PCB).token_number = (cc-crash_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr)); + (PCB).la_ptr++; + if (ag_key_index[(PCB).sn]) { + unsigned ag_k = ag_key_index[(PCB).sn]; + int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer)); + if (ag_ch <= 255) { + while (ag_key_ch[ag_k] < ag_ch) ag_k++; + if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); + } + } + } while ((PCB).token_number == (cc-crash_token_type) ag_t); + (PCB).la_ptr = (PCB).pointer; + return 1; +} + +static int ag_action_11_proc(void) { + int ag_t = (PCB).token_number; + + (PCB).btsx = 0, (PCB).drt = -1; + do { + (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; + (PCB).ssx--; + ag_track(); + ag_ra(); + if ((PCB).exit_flag != AG_RUNNING_CODE) return 0; + (PCB).ssx++; + (PCB).token_number = (cc-crash_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr)); + (PCB).la_ptr++; + if (ag_key_index[(PCB).sn]) { + unsigned ag_k = ag_key_index[(PCB).sn]; + int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer)); + if (ag_ch <= 255) { + while (ag_key_ch[ag_k] < ag_ch) ag_k++; + if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); + } + } + } + while ((PCB).token_number == (cc-crash_token_type) ag_t); + (PCB).la_ptr = (PCB).pointer; + return 1; +} + +static int ag_action_3_r_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap] - 1; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + (PCB).btsx = 0, (PCB).drt = -1; + (PCB).reduction_token = (cc-crash_token_type) ag_ptt[(PCB).ag_ap]; + ag_ra(); + return (PCB).exit_flag == AG_RUNNING_CODE; +} + +static int ag_action_3_s_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap] - 1; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + (PCB).btsx = 0, (PCB).drt = -1; + (PCB).reduction_token = (cc-crash_token_type) ag_ptt[(PCB).ag_ap]; + ag_ra(); + return (PCB).exit_flag == AG_RUNNING_CODE; +} + +static int ag_action_4_r_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap] - 1; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + (PCB).reduction_token = (cc-crash_token_type) ag_ptt[(PCB).ag_ap]; + return 1; +} + +static int ag_action_2_proc(void) { + (PCB).btsx = 0, (PCB).drt = -1; + if ((PCB).ssx >= 128) { + (PCB).exit_flag = AG_STACK_ERROR_CODE; + PARSER_STACK_OVERFLOW; + } + (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; + GET_CONTEXT; + (PCB).ss[(PCB).ssx] = (PCB).sn; + (PCB).ssx++; + (PCB).sn = (PCB).ag_ap; + ag_track(); + return 0; +} + +static int ag_action_9_proc(void) { + if ((PCB).drt == -1) { + (PCB).drt=(PCB).token_number; + (PCB).dssx=(PCB).ssx; + (PCB).dsn=(PCB).sn; + } + ag_prot(); + (PCB).vs[(PCB).ssx] = ag_null_value; + GET_CONTEXT; + (PCB).ss[(PCB).ssx] = (PCB).sn; + (PCB).ssx++; + (PCB).sn = (PCB).ag_ap; + (PCB).la_ptr = (PCB).pointer; + return (PCB).exit_flag == AG_RUNNING_CODE; +} + +static int ag_action_2_r_proc(void) { + (PCB).ssx++; + (PCB).sn = (PCB).ag_ap; + return 0; +} + +static int ag_action_7_proc(void) { + --(PCB).ssx; + (PCB).la_ptr = (PCB).pointer; + (PCB).exit_flag = AG_SUCCESS_CODE; + return 0; +} + +static int ag_action_1_proc(void) { + ag_track(); + (PCB).exit_flag = AG_SUCCESS_CODE; + return 0; +} + +static int ag_action_1_r_proc(void) { + (PCB).exit_flag = AG_SUCCESS_CODE; + return 0; +} + +static int ag_action_1_s_proc(void) { + (PCB).exit_flag = AG_SUCCESS_CODE; + return 0; +} + +static int ag_action_4_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap] - 1; + (PCB).reduction_token = (cc-crash_token_type) ag_ptt[(PCB).ag_ap]; + (PCB).btsx = 0, (PCB).drt = -1; + (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + else GET_CONTEXT; + (PCB).ss[(PCB).ssx] = (PCB).sn; + ag_track(); + while ((PCB).exit_flag == AG_RUNNING_CODE) { + unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; + unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; + do { + unsigned ag_tx = (ag_t1 + ag_t2)/2; + if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1; + else ag_t2 = ag_tx; + } while (ag_t1 < ag_t2); + if (ag_tstt[ag_t1] != (PCB).reduction_token) { + (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; + REDUCTION_TOKEN_ERROR; break;} + (PCB).ag_ap = ag_pstt[ag_t1]; + if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break; + } + return 0; +} + +static int ag_action_3_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap] - 1; + (PCB).btsx = 0, (PCB).drt = -1; + (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + else GET_CONTEXT; + (PCB).ss[(PCB).ssx] = (PCB).sn; + ag_track(); + (PCB).reduction_token = (cc-crash_token_type) ag_ptt[(PCB).ag_ap]; + ag_ra(); + while ((PCB).exit_flag == AG_RUNNING_CODE) { + unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; + unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; + do { + unsigned ag_tx = (ag_t1 + ag_t2)/2; + if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1; + else ag_t2 = ag_tx; + } while (ag_t1 < ag_t2); + if (ag_tstt[ag_t1] != (PCB).reduction_token) { + (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; + REDUCTION_TOKEN_ERROR; break;} + (PCB).ag_ap = ag_pstt[ag_t1]; + if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break; + } + return 0; +} + +static int ag_action_8_proc(void) { + ag_undo(); + (PCB).la_ptr = (PCB).pointer; + (PCB).exit_flag = AG_SYNTAX_ERROR_CODE; + ag_diagnose(); + SYNTAX_ERROR; + {(PCB).la_ptr = (PCB).pointer + 1; ag_track();} + return (PCB).exit_flag == AG_RUNNING_CODE; +} + +static int ag_action_5_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap]; + (PCB).btsx = 0, (PCB).drt = -1; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + else { + GET_CONTEXT; + (PCB).ss[(PCB).ssx] = (PCB).sn; + } + (PCB).la_ptr = (PCB).pointer; + (PCB).reduction_token = (cc-crash_token_type) ag_ptt[(PCB).ag_ap]; + ag_ra(); + while ((PCB).exit_flag == AG_RUNNING_CODE) { + unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; + unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; + do { + unsigned ag_tx = (ag_t1 + ag_t2)/2; + if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1; + else ag_t2 = ag_tx; + } while (ag_t1 < ag_t2); + if (ag_tstt[ag_t1] != (PCB).reduction_token) { + (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; + REDUCTION_TOKEN_ERROR; break;} + (PCB).ag_ap = ag_pstt[ag_t1]; + if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break; + } + return (PCB).exit_flag == AG_RUNNING_CODE; +} + +static int ag_action_6_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap]; + (PCB).reduction_token = (cc-crash_token_type) ag_ptt[(PCB).ag_ap]; + if ((PCB).drt == -1) { + (PCB).drt=(PCB).token_number; + (PCB).dssx=(PCB).ssx; + (PCB).dsn=(PCB).sn; + } + if (ag_sd) { + (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + } + else { + ag_prot(); + (PCB).vs[(PCB).ssx] = ag_null_value; + GET_CONTEXT; + (PCB).ss[(PCB).ssx] = (PCB).sn; + } + (PCB).la_ptr = (PCB).pointer; + while ((PCB).exit_flag == AG_RUNNING_CODE) { + unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; + unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; + do { + unsigned ag_tx = (ag_t1 + ag_t2)/2; + if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1; + else ag_t2 = ag_tx; + } while (ag_t1 < ag_t2); + if (ag_tstt[ag_t1] != (PCB).reduction_token) { + (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; + REDUCTION_TOKEN_ERROR; break;} + (PCB).ag_ap = ag_pstt[ag_t1]; + if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break; + } + return (PCB).exit_flag == AG_RUNNING_CODE; +} + + +void init_cc-crash(void) { + (PCB).la_ptr = (PCB).pointer; + (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0; + (PCB).exit_flag = AG_RUNNING_CODE; + (PCB).line = FIRST_LINE; + (PCB).column = FIRST_COLUMN; + (PCB).btsx = 0, (PCB).drt = -1; +} + +void cc-crash(void) { + init_cc-crash(); + (PCB).exit_flag = AG_RUNNING_CODE; + while ((PCB).exit_flag == AG_RUNNING_CODE) { + unsigned ag_t1 = ag_sbt[(PCB).sn]; + if (ag_tstt[ag_t1]) { + unsigned ag_t2 = ag_sbe[(PCB).sn] - 1; + (PCB).token_number = (cc-crash_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr)); + (PCB).la_ptr++; + if (ag_key_index[(PCB).sn]) { + unsigned ag_k = ag_key_index[(PCB).sn]; + int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer)); + if (ag_ch <= 255) { + while (ag_key_ch[ag_k] < ag_ch) ag_k++; + if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); + } + } + do { + unsigned ag_tx = (ag_t1 + ag_t2)/2; + if (ag_tstt[ag_tx] > (unsigned short)(PCB).token_number) + ag_t1 = ag_tx + 1; + else ag_t2 = ag_tx; + } while (ag_t1 < ag_t2); + if (ag_tstt[ag_t1] != (unsigned short)(PCB).token_number) + ag_t1 = ag_sbe[(PCB).sn]; + } + (PCB).ag_ap = ag_pstt[ag_t1]; + (ag_gt_procs_scan[ag_astt[ag_t1]])(); + } +} + +