Mercurial > ~dholland > hg > ag > index.cgi
diff tests/agcl/oldagsrc/good/xvmc.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/xvmc.cpp Sat Dec 22 17:52:45 2007 -0500 @@ -0,0 +1,3367 @@ +/* + XVMC.SYN + + Extensible Scripting Language + Copyright (c) 1998 Parsifal Software, All Rights Reserved. + + The expression syntax is borrowed from C but with the + addition of the FORTRAN exponentiation operator (**). + + The supported operations are: + Assignment operators: =, +=, -=, *=, /=, %=, , &=, |=, ^=>>=, <<= + Conditional expressions: ? : + Logical operators: !, &&, || + Bitwise logical operators: &, |, ^, ~ + Comparison operators: ==, !=, <, <=, >, >= + Shift operators: <<, >> + Binary arithmetic operators: +, -, *, /, % + Unary arithmetic operators: +, - + Exponentiation: ** + Autoincrement operators: ++, --; + Cast operators (<type name>) + Parentheses + Function calls + Object method calls + + Built in data types are int, double and String. + + Statements may include variable declarations, expression statements, + blocks, if/else statements, while , do/while, or for statements, + following the rules of C. + + The statement syntax has been written to avoid the conventional + if/else ambiguity. + + Input strings may contain any number of statements. White space may be + used freely, including both C and C++ style comments. + + xvmc.syn is compiled with the AnaGram parser generator + yielding xvm.h and xvm.cpp. + + For information about AnaGram, visit http://www.parsifalsoft.com. +*/ + +#include <math.h> +#include "xvm.h" // defines external interface +#include "integer.h" +#include "double.h" +#include "xstring.h" + +static VirtualMachine *vm; + +typedef VirtualMachine::CodeSeg Code; // For the sake of readability + + +/* + * 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 XVMC_H +#include "xvmc.h" +#endif + +#ifndef XVMC_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]) + + + +vmCompile_pcb_type vmCompile_pcb; +#define PCB vmCompile_pcb +#define CHANGE_REDUCTION(x) vmCompile_change_reduction(vmCompile_##x##_token) +int vmCompile_change_reduction(vmCompile_token_type); + + +Code vmCompile_value(void); + + +#line - "xvmc.syn" + // begin embedded C + +#include <string.h> + + +ErrorRecord::ErrorRecord(char *msg) : message(msg), line(PCB.line), column(PCB.column) +{/* Initializers do it all */} + +ErrorLog errorLog; + +#define SYNTAX_ERROR errorLog.add(PCB.error_message) + +int VirtualMachine::compile(char *text) { + vm = this; + resetCharStack(); + vmCompile_pcb.pointer = (unsigned char *) text; + vmCompile(); + { + Code program = vmCompile_value() << EXIT; + int n = program.size(); + codeStore = new int[n]; + while (n--) codeStore[n] = program[n]; + } + + return vmCompile_pcb.exit_flag != AG_SUCCESS_CODE; +} + +Code VirtualMachine::codeWhile(Code x, Code s) { + Code branch(VirtualMachine::BR); + branch << 0; + //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined"); + x << VirtualMachine::BRF << (s.size() + branch.size()); + int blockLength = s.size() + x.size() + branch.size(); + x << s << VirtualMachine::BR << -blockLength; + return x; +} + +Code VirtualMachine::codeDoWhile(Code s, Code x) { + Code branch(VirtualMachine::BR); + branch << 0; + int blockLength = s.size() + x.size() + branch.size(); + //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined"); + s << x << VirtualMachine::BRT << -blockLength; + return s; +} + +Code VirtualMachine::codeFor(Code init, Code cond, Code inc, Code s) { + s << inc; // append increment code to end of body of for loop + //if (!cond.type->isTruthDefined()) errorLog.add("True/False not defined"); + init << codeWhile(cond, s); + return init; +} + +#line - "xvmc.cpp" + +#ifndef CONVERT_CASE +#define CONVERT_CASE(c) (c) +#endif +#ifndef TAB_SPACING +#define TAB_SPACING 8 +#endif +Code vmCompile_value(void) { + Code returnValue; + returnValue = (*(Code *) &(PCB).vs[(PCB).ssx]); + return returnValue; +} + +static Code ag_rp_1(void) { +#line - "xvmc.syn" + return Code(); +#line - "xvmc.cpp" +} + +static Code ag_rp_2(Code x) { +#line - "xvmc.syn" + return x; +#line - "xvmc.cpp" +} + +static Code ag_rp_3(Code x) { +#line - "xvmc.syn" + return x; +#line - "xvmc.cpp" +} + +static Code ag_rp_4(void) { +#line - "xvmc.syn" + return errorLog.add("Continuing scan"), Code(); +#line - "xvmc.cpp" +} + +static Code ag_rp_5(int t, int n) { +#line - "xvmc.syn" + return vm->declareVariable(t,n), Code(); +#line - "xvmc.cpp" +} + +static Code ag_rp_6(int t, int n, Code x) { +#line - "xvmc.syn" + int name = vm->declareVariable(t,n); + return Code(VirtualMachine::PUSHV) << name << x << VirtualMachine::ASSIGN << VirtualMachine::POP; + +#line - "xvmc.cpp" +} + +static Code ag_rp_7(int t, int n, Code size) { +#line - "xvmc.syn" + return vm->declareArray(t,n, size); +#line - "xvmc.cpp" +} + +static Code ag_rp_8(int t, int n, Code args) { +#line - "xvmc.syn" + return vm->declareObject(t,n,args); +#line - "xvmc.cpp" +} + +static Code ag_rp_9(void) { +#line - "xvmc.syn" + return Code(); +#line - "xvmc.cpp" +} + +static Code ag_rp_10(Code x) { +#line - "xvmc.syn" + return x; +#line - "xvmc.cpp" +} + +static Code ag_rp_11(Code x) { +#line - "xvmc.syn" + return x.initList(); +#line - "xvmc.cpp" +} + +static Code ag_rp_12(Code list, Code x) { +#line - "xvmc.syn" + return list.append(x); +#line - "xvmc.cpp" +} + +static Code ag_rp_13(Code x) { +#line - "xvmc.syn" + return x; +#line - "xvmc.cpp" +} + +static Code ag_rp_14(Code x, Code s) { +#line - "xvmc.syn" + return x << s; +#line - "xvmc.cpp" +} + +static Code ag_rp_15(Code x) { +#line - "xvmc.syn" + return x << VirtualMachine::POP; +#line - "xvmc.cpp" +} + +static Code ag_rp_16(void) { +#line - "xvmc.syn" + return Code(); +#line - "xvmc.cpp" +} + +static Code ag_rp_17(void) { +#line - "xvmc.syn" + return Code(); +#line - "xvmc.cpp" +} + +static Code ag_rp_18(Code s) { +#line - "xvmc.syn" + return s; +#line - "xvmc.cpp" +} + +static Code ag_rp_19(Code s) { +#line - "xvmc.syn" + return errorLog.add("Continuing scan"), s; +#line - "xvmc.cpp" +} + +static Code ag_rp_20(Code s, Code x) { +#line - "xvmc.syn" + return vm->codeDoWhile(s,x); +#line - "xvmc.cpp" +} + +static Code ag_rp_21(Code x, Code s) { +#line - "xvmc.syn" + return vm->codeWhile(x,s); +#line - "xvmc.cpp" +} + +static Code ag_rp_22(Code init, Code cond, Code inc, Code s) { +#line - "xvmc.syn" + return vm->codeFor(init, cond, inc, s); +#line - "xvmc.cpp" +} + +static Code ag_rp_23(void) { +#line - "xvmc.syn" + return Code(); +#line - "xvmc.cpp" +} + +static Code ag_rp_24(Code x) { +#line - "xvmc.syn" + return x << VirtualMachine::POP; +#line - "xvmc.cpp" +} + +static Code ag_rp_25(Code list, Code x) { +#line - "xvmc.syn" + return list << x << VirtualMachine::POP; +#line - "xvmc.cpp" +} + +static Code ag_rp_26(Code x) { +#line - "xvmc.syn" + return x; +#line - "xvmc.cpp" +} + +static Code ag_rp_27(Code x, Code s) { +#line - "xvmc.syn" + return vm->codeWhile(x,s); +#line - "xvmc.cpp" +} + +static Code ag_rp_28(Code init, Code cond, Code inc, Code s) { +#line - "xvmc.syn" + return vm->codeFor(init, cond, inc, s); +#line - "xvmc.cpp" +} + +static Code ag_rp_29(Code x, Code s) { +#line - "xvmc.syn" + return x << VirtualMachine::BRF << s.size() << s; +#line - "xvmc.cpp" +} + +static Code ag_rp_30(Code x, Code s1, Code s2) { +#line - "xvmc.syn" + s1 << VirtualMachine::BR << s2.size(); + x << VirtualMachine::BRF << s1.size() << s1 << s2; + return x; + +#line - "xvmc.cpp" +} + +static Code ag_rp_31(Code x) { +#line - "xvmc.syn" + return x; +#line - "xvmc.cpp" +} + +static Code ag_rp_32(Code x) { +#line - "xvmc.syn" + return x.testOK(); +#line - "xvmc.cpp" +} + +static Code ag_rp_33(Code k, Code x) { +#line - "xvmc.syn" + return k << x << VirtualMachine::ASSIGN; +#line - "xvmc.cpp" +} + +static Code ag_rp_34(Code k, Code x) { +#line - "xvmc.syn" + return k << x << VirtualMachine::ADD_EQ; +#line - "xvmc.cpp" +} + +static Code ag_rp_35(Code k, Code x) { +#line - "xvmc.syn" + return k << x << VirtualMachine::SUB_EQ; +#line - "xvmc.cpp" +} + +static Code ag_rp_36(Code k, Code x) { +#line - "xvmc.syn" + return k << x << VirtualMachine::MULT_EQ; +#line - "xvmc.cpp" +} + +static Code ag_rp_37(Code k, Code x) { +#line - "xvmc.syn" + return k << x << VirtualMachine::DIV_EQ; +#line - "xvmc.cpp" +} + +static Code ag_rp_38(Code k, Code x) { +#line - "xvmc.syn" + return k << x << VirtualMachine::MOD_EQ; +#line - "xvmc.cpp" +} + +static Code ag_rp_39(Code k, Code x) { +#line - "xvmc.syn" + return k << x << VirtualMachine::OR_EQ; +#line - "xvmc.cpp" +} + +static Code ag_rp_40(Code k, Code x) { +#line - "xvmc.syn" + return k << x << VirtualMachine::AND_EQ; +#line - "xvmc.cpp" +} + +static Code ag_rp_41(Code k, Code x) { +#line - "xvmc.syn" + return k << x << VirtualMachine::XOR_EQ; +#line - "xvmc.cpp" +} + +static Code ag_rp_42(Code k, Code x) { +#line - "xvmc.syn" + return k << x << VirtualMachine::LS_EQ; +#line - "xvmc.cpp" +} + +static Code ag_rp_43(Code k, Code x) { +#line - "xvmc.syn" + return k << x << VirtualMachine::RS_EQ; +#line - "xvmc.cpp" +} + +static Code ag_rp_44(int k) { +#line - "xvmc.syn" + return Code(VirtualMachine::PUSHV).setType(vm->symbolTable[k].type) << k; +#line - "xvmc.cpp" +} + +static Code ag_rp_45(Code k, Code x) { +#line - "xvmc.syn" + return k.setType(k.type->element) << x << VirtualMachine::SUBSCRIPT; +#line - "xvmc.cpp" +} + +static Code ag_rp_46(Code c, Code x, Code y) { +#line - "xvmc.syn" + //if (!c.type->isTruthDefined()) errorLog.add("True/False not defined"); + x << VirtualMachine::BR << y.size(); + c << VirtualMachine::BRF << x.size() << x << y; + return c; + +#line - "xvmc.cpp" +} + +static Code ag_rp_47(Code x) { +#line - "xvmc.syn" + return x.testOK(); +#line - "xvmc.cpp" +} + +static Code ag_rp_48(Code x, Code y) { +#line - "xvmc.syn" + //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined"); + return x << VirtualMachine::OR << y.size() << y; + +#line - "xvmc.cpp" +} + +static Code ag_rp_49(Code x, Code y) { +#line - "xvmc.syn" + //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined"); + return x << VirtualMachine::AND << y.size() << y; + +#line - "xvmc.cpp" +} + +static Code ag_rp_50(Code x) { +#line - "xvmc.syn" + return x.testOK(); +#line - "xvmc.cpp" +} + +static Code ag_rp_51(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::BITOR,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_52(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::XOR,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_53(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::BITAND,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_54(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::EQ,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_55(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::NE,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_56(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::LT,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_57(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::LE,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_58(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::GT,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_59(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::GE,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_60(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::LS,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_61(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::RS,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_62(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::ADD,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_63(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::SUB,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_64(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::MULT,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_65(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::DIV,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_66(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::MOD,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_67(int t, Code x) { +#line - "xvmc.syn" + return x.cast((VirtualMachine::Type::Id) t) << VirtualMachine::CAST << t; +#line - "xvmc.cpp" +} + +static Code ag_rp_68(Code x) { +#line - "xvmc.syn" + return x << VirtualMachine::INCR; +#line - "xvmc.cpp" +} + +static Code ag_rp_69(Code x) { +#line - "xvmc.syn" + return x << VirtualMachine::INCR; +#line - "xvmc.cpp" +} + +static Code ag_rp_70(Code x) { +#line - "xvmc.syn" + return x << VirtualMachine::NEG; +#line - "xvmc.cpp" +} + +static Code ag_rp_71(Code x) { +#line - "xvmc.syn" + return x; +#line - "xvmc.cpp" +} + +static Code ag_rp_72(Code x) { +#line - "xvmc.syn" + return vm->list(stdout), x << VirtualMachine::NOT; +#line - "xvmc.cpp" +} + +static Code ag_rp_73(Code x) { +#line - "xvmc.syn" + return x << VirtualMachine::COMPL; +#line - "xvmc.cpp" +} + +static Code ag_rp_74(Code x, Code y) { +#line - "xvmc.syn" + return x.binop(VirtualMachine::POW,y); +#line - "xvmc.cpp" +} + +static Code ag_rp_75(double x) { +#line - "xvmc.syn" + return vm->doubleList.push(x), Code(VirtualMachine::PUSHD).setType(&DoubleType::doubleType) << (int)(vm->doubleList.size() - 1); +#line - "xvmc.cpp" +} + +static Code ag_rp_76(int x) { +#line - "xvmc.syn" + return Code(VirtualMachine::PUSHI).setType(&IntegerType::intType) << x; +#line - "xvmc.cpp" +} + +static Code ag_rp_77(int k) { +#line - "xvmc.syn" + return Code(VirtualMachine::PUSHS).setType(&StringType::stringType) << k; +#line - "xvmc.cpp" +} + +static Code ag_rp_78(Code k) { +#line - "xvmc.syn" + return k; +#line - "xvmc.cpp" +} + +static Code ag_rp_79(Code k) { +#line - "xvmc.syn" + return k << VirtualMachine::PUSH << VirtualMachine::INCR << VirtualMachine::POP; +#line - "xvmc.cpp" +} + +static Code ag_rp_80(Code k) { +#line - "xvmc.syn" + return k << VirtualMachine::PUSH << VirtualMachine::DECR << VirtualMachine::POP; +#line - "xvmc.cpp" +} + +static Code ag_rp_81(int n, Code args) { +#line - "xvmc.syn" + return vm->invokeFunction(n, args); +#line - "xvmc.cpp" +} + +static Code ag_rp_82(Code k, int n, Code args) { +#line - "xvmc.syn" + return vm->invokeMethod(k, n, args); +#line - "xvmc.cpp" +} + +static Code ag_rp_83(Code x) { +#line - "xvmc.syn" + return x; +#line - "xvmc.cpp" +} + +static double ag_rp_84(double x, int e) { +#line - "xvmc.syn" + return x*pow(10,e); +#line - "xvmc.cpp" +} + +static double ag_rp_85(double x, int e) { +#line - "xvmc.syn" + return x*pow(10,-e); +#line - "xvmc.cpp" +} + +static double ag_rp_86(int i, double f) { +#line - "xvmc.syn" + return i+f; +#line - "xvmc.cpp" +} + +static double ag_rp_87(int i) { +#line - "xvmc.syn" + return i; +#line - "xvmc.cpp" +} + +static double ag_rp_88(double f) { +#line - "xvmc.syn" + return f; +#line - "xvmc.cpp" +} + +static int ag_rp_89(int d) { +#line - "xvmc.syn" + return d-'0'; +#line - "xvmc.cpp" +} + +static int ag_rp_90(int x, int d) { +#line - "xvmc.syn" + return 10*x + d-'0'; +#line - "xvmc.cpp" +} + +static double ag_rp_91(int d) { +#line - "xvmc.syn" + return (d-'0')/10.; +#line - "xvmc.cpp" +} + +static double ag_rp_92(int d, double f) { +#line - "xvmc.syn" + return (d-'0' + f)/10.; +#line - "xvmc.cpp" +} + +static int ag_rp_93(int d) { +#line - "xvmc.syn" + return d-'0'; +#line - "xvmc.cpp" +} + +static int ag_rp_94(int x, int d) { +#line - "xvmc.syn" + return 10*x + d-'0'; +#line - "xvmc.cpp" +} + +static int ag_rp_95(int k) { +#line - "xvmc.syn" + char *name = popString(k); + VirtualMachine::Type::Id id = VirtualMachine::Type::idType(name); + if (id != VirtualMachine::Type::UNDEFINED) return (int) id; + CHANGE_REDUCTION(variable_name); + return vm->locateVariable(name); + +#line - "xvmc.cpp" +} + +static int ag_rp_96(int c) { +#line - "xvmc.syn" + return pushChar(c), 1; +#line - "xvmc.cpp" +} + +static int ag_rp_97(int k, int c) { +#line - "xvmc.syn" + return pushChar(c), k+1; +#line - "xvmc.cpp" +} + +static int ag_rp_98(int c) { +#line - "xvmc.syn" + return c; +#line - "xvmc.cpp" +} + +static int ag_rp_99(int k) { +#line - "xvmc.syn" + return vm->stringList.push(CharString(popString(k))), vm->stringList.size() - 1; +#line - "xvmc.cpp" +} + +static int ag_rp_100(void) { +#line - "xvmc.syn" + return 0; +#line - "xvmc.cpp" +} + +static int ag_rp_101(int k, int c) { +#line - "xvmc.syn" + return pushChar(c), k+1; +#line - "xvmc.cpp" +} + +static int ag_rp_102(void) { +#line - "xvmc.syn" + return '\a'; +#line - "xvmc.cpp" +} + +static int ag_rp_103(void) { +#line - "xvmc.syn" + return '\b'; +#line - "xvmc.cpp" +} + +static int ag_rp_104(void) { +#line - "xvmc.syn" + return '\f'; +#line - "xvmc.cpp" +} + +static int ag_rp_105(void) { +#line - "xvmc.syn" + return '\n'; +#line - "xvmc.cpp" +} + +static int ag_rp_106(void) { +#line - "xvmc.syn" + return '\r'; +#line - "xvmc.cpp" +} + +static int ag_rp_107(void) { +#line - "xvmc.syn" + return '\t'; +#line - "xvmc.cpp" +} + +static int ag_rp_108(void) { +#line - "xvmc.syn" + return '\v'; +#line - "xvmc.cpp" +} + +static int ag_rp_109(void) { +#line - "xvmc.syn" + return '\\'; +#line - "xvmc.cpp" +} + +static int ag_rp_110(void) { +#line - "xvmc.syn" + return '\?'; +#line - "xvmc.cpp" +} + +static int ag_rp_111(void) { +#line - "xvmc.syn" + return '\''; +#line - "xvmc.cpp" +} + +static int ag_rp_112(void) { +#line - "xvmc.syn" + return '"'; +#line - "xvmc.cpp" +} + +static int ag_rp_113(int d) { +#line - "xvmc.syn" + return d-'0'; +#line - "xvmc.cpp" +} + +static int ag_rp_114(int n, int d) { +#line - "xvmc.syn" + return 8*n + d-'0'; +#line - "xvmc.cpp" +} + +static int ag_rp_115(int n, int d) { +#line - "xvmc.syn" + return 8*n + d-'0'; +#line - "xvmc.cpp" +} + +static int ag_rp_116(int d) { +#line - "xvmc.syn" + return d; +#line - "xvmc.cpp" +} + +static int ag_rp_117(int n, int d) { +#line - "xvmc.syn" + return 16*n + d; +#line - "xvmc.cpp" +} + +static int ag_rp_118(int d) { +#line - "xvmc.syn" + return (d&7) + 9; +#line - "xvmc.cpp" +} + + +#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 vmCompile_vs_type const ag_null_value NULL_VALUE_INITIALIZER; + +static const unsigned char ag_rpx[] = { + 0, 1, 2, 0, 0, 0, 0, 3, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 0, 0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 0, 46, 47, 0, 48, 0, 49, 50, 0, 51, 0, 52, 0, 53, 0, 54, + 55, 0, 56, 57, 58, 59, 0, 60, 61, 0, 62, 63, 0, 64, 65, 66, 0, 67, + 0, 68, 69, 70, 71, 72, 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 85, 86, 87, + 88, 0, 0, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 0, 0, 99,100,101, + 0, 0,102,103,104,105,106,107,108,109,110,111,112, 0, 0, 0, 0, 0, + 113,114,115,116,117, 0,118 +}; + +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,164, 0,165, 0,166, 0,167, 0,168,0 +}; + +static const unsigned char ag_key_ch[] = { + 0, 42, 47,255, 43, 45, 47,100,102,105,119,255, 42,255, 38, 61,255, 42, + 61,255, 43, 61,255, 45, 61,255, 42, 47, 61,255, 61,255, 60, 61,255, 61, + 255, 61, 62,255, 61,124,255, 33, 37, 38, 42, 43, 45, 47, 60, 61, 62, 94, + 100,101,102,105,119,124,255, 43, 45,100,102,105,119,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, 33, 38, 42, 47, 60, 61, 62,124,255, 42, 47,255, 43, 45, 47,255, + 42, 47,255, 60, 61,255, 61, 62,255, 33, 38, 42, 43, 45, 47, 60, 61, 62, + 124,255, 60, 61,255, 61, 62,255, 33, 38, 42, 60, 61, 62,124,255, 43, 45, + 255, 60, 61,255, 61, 62,255, 33, 38, 60, 61, 62,124,255, 33, 38, 60, 61, + 62,124,255, 33, 38, 61,124,255, 38,124,255, 38,255, 42, 47,255, 47,255, + 124,255, 38, 61,255, 42, 61,255, 43, 61,255, 45, 61,255, 42, 47, 61,255, + 61,255, 60, 61,255, 61,255, 61, 62,255, 61,124,255, 33, 37, 38, 42, 43, + 45, 47, 60, 61, 62, 94,124,255, 42, 47,255, 43, 45, 47,100,101,102,105, + 119,255, 38, 61,255, 42, 61,255, 43, 61,255, 45, 61,255, 61,255, 60, 61, + 255, 61,255, 61, 62,255, 61,124,255, 33, 37, 38, 42, 43, 45, 47, 60, 61, + 62, 94,124,255, 60, 61,255, 61, 62,255, 33, 38, 42, 43, 45, 60, 61, 62, + 124,255, 43, 45,100,101,102,105,119,255,119,255, 42, 47,255, 60, 61,255, + 61, 62,255, 33, 38, 42, 43, 45, 47, 60, 61, 62,100,102,105,119,124,255 +}; + +static const unsigned char ag_key_act[] = { + 0,0,0,4,3,3,2,7,7,7,7,4,3,4,0,0,4,0,0,4,0,0,4,0,0,4,0,0,0,4,0,4,1,0,4, + 0,4,0,1,4,0,0,4,3,3,2,2,2,2,2,2,3,2,3,7,7,7,7,7,2,4,3,3,7,7,7,7,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,3,3,3,2,2,3,2,3,4,0,0,4,3, + 3,2,4,0,0,4,0,0,4,0,0,4,3,3,3,3,3,2,2,3,2,3,4,0,0,4,0,0,4,3,3,3,2,3,2, + 3,4,3,3,4,0,0,4,0,0,4,3,3,2,3,2,3,4,3,3,3,3,3,3,4,3,3,3,3,4,3,3,4,3,4, + 0,0,4,2,4,3,4,0,0,4,0,0,4,0,0,4,0,0,4,0,0,0,4,0,4,1,0,4,0,4,0,1,4,0,0, + 4,3,3,2,2,2,2,2,2,3,2,3,2,4,0,0,4,3,3,2,7,7,7,7,7,4,0,0,4,0,0,4,0,0,4, + 0,0,4,0,4,1,0,4,0,4,0,1,4,0,0,4,3,3,2,2,2,2,3,2,3,2,3,2,4,0,0,4,0,0,4, + 3,3,3,3,3,2,3,2,3,4,3,3,7,7,7,7,7,4,7,4,0,0,4,0,0,4,0,0,4,3,3,3,3,3,2, + 2,3,2,7,7,7,7,3,4 +}; + +static const unsigned char ag_key_parm[] = { + 0, 98,103, 0,199,200, 0, 0, 2, 8, 4, 0,102, 0,182,175, 0,203, + 171, 0,199,169, 0,200,170, 0, 98,103,172, 0,177, 0,192,189, 0,178, + 0,191,193, 0,174,181, 0,187,173, 0, 0, 0, 0, 0, 0,186, 0,176, + 0, 6, 2, 8, 4, 0, 0,199,200, 0, 2, 8, 4, 0,135,134,133,132, + 125,126,127,128,129,130,131,143, 0, 0, 0, 98,103, 0,192,189, 0,191, + 193, 0,187,182,203, 0, 0,186, 0,181, 0, 98,103, 0,199,200, 0, 0, + 98,103, 0,192,189, 0,191,193, 0,187,182,203,199,200, 0, 0,186, 0, + 181, 0,192,189, 0,191,193, 0,187,182,203, 0,186, 0,181, 0,199,200, + 0,192,189, 0,191,193, 0,187,182, 0,186, 0,181, 0,187,182,189,186, + 191,181, 0,187,182,186,181, 0,182,181, 0,182, 0, 98,103, 0, 0, 0, + 181, 0,182,175, 0,203,171, 0,199,169, 0,200,170, 0, 98,103,172, 0, + 177, 0,192,189, 0,178, 0,191,193, 0,174,181, 0,187,173, 0, 0, 0, + 0, 0, 0,186, 0,176, 0, 0, 98,103, 0,199,200, 0, 0, 6, 2, 8, + 4, 0,182,175, 0,203,171, 0,199,169, 0,200,170, 0,177, 0,192,189, + 0,178, 0,191,193, 0,174,181, 0,187,173, 0, 0, 0, 0,172, 0,186, + 0,176, 0, 0,192,189, 0,191,193, 0,187,182,203,199,200, 0,186, 0, + 181, 0,199,200, 0, 6, 2, 8, 4, 0, 4, 0, 98,103, 0,192,189, 0, + 191,193, 0,187,182,203,199,200, 0, 0,186, 0, 0, 2, 8, 4,181, 0 +}; + +static const unsigned short ag_key_jmp[] = { + 0, 0, 0, 0, 0, 2, 1, 4, 6, 9, 11, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, + 0, 0, 35, 0, 0, 0, 0, 18, 20, 14, 17, 20, 23, 26, 32, 22, 37, 24, + 26, 28, 32, 35, 37, 40, 0, 42, 44, 46, 48, 51, 53, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 58, 60, 62, 83, 86, 64, 89, 66, 0, 0, 0, 0, 68, 70,101, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 74, 76, 78, 80,108,111, 82,114, + 84, 0, 0, 0, 0, 0, 0, 0, 86, 88, 90,128, 92,131, 94, 0, 96, 98, + 0, 0, 0, 0, 0, 0, 0,100,102,145,104,148,106, 0,108,110,112,114, + 116,118, 0,120,122,124,126, 0,128,130, 0,132, 0, 0, 0, 0,175, 0, + 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,198, 0, 0, 0, 0, 0,203, 0, 0, 0, 0,136,138,182,185,188, + 191,194,200,140,205,142,208, 0, 0, 0, 0,144,146,224,148,150,154,157, + 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 0, + 0, 0, 0, 0,253, 0, 0, 0, 0,164,166,236,239,242,245,168,250,170, + 255,172,258, 0, 0, 0, 0, 0, 0, 0,174,176,178,180,182,274,184,277, + 186, 0,188,190,192,194,198,201,203, 0,208, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,213,215,217,219,221,300,303,223,306,225,227,230,232,237, 0 +}; + +static const unsigned short ag_key_index[] = { + 4, 0, 12, 43, 61, 0, 0, 12, 12, 81, 0, 81, 92, 92, 92, 92, 92,104, + 104,104,104,117,117,134,104,142,142,142,142,142,142,142,151,151,151,158, + 165,170,170,173,170,170,178,178,180,180,211, 0,178, 0, 4, 4,227,261, + 261, 61, 0, 61, 61, 61, 0, 0, 0, 0, 61, 0, 0, 81, 81, 81, 0, 92, + 92, 0,104,142,142,280, 0, 0,104,142,104,142,104,142,142,142,104,142, + 104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142, + 104,142,104,142,104,142,104,142,142,142,178, 0,104,142,104,142,104,142, + 104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142, + 142,290,142,298, 61,227, 0,211,178,178,178,178,104,178,178,104,309,178, + 178,178, 0, 0, 0, 0, 0,142,151,151,151,151,151,151,151,151,158,158, + 165,170,170,170,170, 0, 0, 0, 0, 0, 0, 0, 4, 61, 0, 0, 0, 0, + 142,142,142, 0, 92, 92,142,142,142,142,142, 0, 0, 0, 0, 0,142, 0, + 61 +}; + +static const unsigned char ag_key_ends[] = { +43,0, 45,0, 111,0, 111,114,0, 102,0, 104,105,108,101,0, 47,0, +61,0, 61,0, 61,0, 61,0, 111,0, 108,115,101,0, 111,114,0, 102,0, +104,105,108,101,0, 43,0, 45,0, 111,0, 111,114,0, 102,0, +104,105,108,101,0, 61,0, 38,0, 42,0, 61,0, 124,0, 43,0, 45,0, +61,0, 38,0, 42,0, 43,0, 45,0, 61,0, 124,0, 61,0, 38,0, 42,0, +61,0, 124,0, 43,0, 45,0, 61,0, 38,0, 61,0, 124,0, 61,0, +38,0, 61,0, 61,0, 61,0, 124,0, 61,0, 38,0, 61,0, 124,0, +38,0, 124,0, 38,0, 124,0, 61,0, 61,0, 61,0, 61,0, 43,0, +45,0, 111,0, 108,115,101,0, 111,114,0, 102,0, 104,105,108,101,0, +61,0, 61,0, 61,0, 61,0, 61,0, 61,0, 38,0, 42,0, 43,0, 45,0, +61,0, 124,0, 43,0, 45,0, 111,0, 108,115,101,0, 111,114,0, +102,0, 104,105,108,101,0, 104,105,108,101,0, 61,0, 38,0, 42,0, +43,0, 45,0, 61,0, 111,0, 111,114,0, 102,0, 104,105,108,101,0, +124,0, +}; + +#define AG_TCV(x) ag_tcv[(x)] + +static const unsigned char ag_tcv[] = { + 7,208,208,208,208,208,208,208,208,151,107,151,151,151,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,151,201,209,208, + 208,198,185,210,160,159,196,194,161,195,206,197,211,211,211,211,211,211, + 211,211,212,212,179,154,188,156,190,180,208,213,213,213,213,214,213,215, + 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, + 215,158,216,157,184,215,208,213,213,213,213,214,213,215,215,215,215,215, + 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,163,183,162, + 202,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208 +}; + +#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 = (vmCompile_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 = (vmCompile_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 = (vmCompile_token_type) ag_key_pt[ag_k1+1]; + break; + } + case ag_set_key: + ag_save = (int) ((PCB).la_ptr - (PCB).pointer); + (PCB).token_number = (vmCompile_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 = (vmCompile_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 = (vmCompile_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]; +} + +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).token_number = (vmCompile_token_type) (PCB).drt; + (PCB).ssx = (PCB).dssx; + (PCB).sn = (PCB).dsn; + (PCB).drt = -1; +} + + + +static const int ag_rtt[] = { + 17, 53, 0 +}; + +static const unsigned char ag_tstt[] = { +215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, + 160,154,151,107,103,98,7,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,0,105, + 106, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,102,0, + 100,101, +151,107,103,98,0,1, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, + 160,154,9,7,0,2,3,4,5,6,8,13,14,15,16,17,19,22,27,28,29,31,32,33,37,38, + 40,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, + 92,93,95,108,112,114,121,155,204,205,207,217, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,0, +107,0, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,0, +102,0, +216,215,214,213,212,211,209,208,206,202,201,198,197,196,195,194,190,188,185, + 184,183,180,179,163,162,161,160,159,158,157,156,154,151,143,135,134,133, + 132,131,130,129,128,127,126,125,0,118,120,136,137,138,139,140, +212,211,0,113,114, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,143,135,134, + 133,132,131,130,129,128,127,126,125,0,120,123,136,137,138,139,140, +203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181, + 180,179,161,159,157,154,151,107,103,98,0,1,152,153, +212,211,206,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184, + 183,182,181,180,179,161,159,157,154,151,107,103,98,0,1,114,152,153, +214,0, +203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181, + 180,179,161,159,157,154,151,107,103,98,0,1,152,153, +203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181, + 180,179,161,159,157,154,151,107,103,98,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +215,214,213,212,211,210,209,206,203,202,201,200,199,198,197,196,195,194,193, + 192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,160,159,157, + 154,151,107,103,98,0,1,152,153, +215,214,213,212,211,210,209,206,203,202,201,200,199,198,197,196,195,194,193, + 192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,160,159,157, + 154,151,107,103,98,0,1,152,153, +203,0,94, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,17,19, + 22,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, + 92,93,95,108,112,114,121,155,204,205,207,217, +198,197,196,0,84,85,86, +195,194,0,81,82, +193,192,0,78,79, +191,190,189,188,0,73,74,75,76, +187,186,0,70,71, +185,0,68, +184,0,66, +182,0,62, +183,0,64, +182,181,180,179,161,159,157,154,0, +160,151,107,103,98,0,1,152,153, +160,151,107,103,98,0,1,152,153, +181,180,0,56,59, +181,180,179,161,159,157,154,0, +215,214,213,212,211,206,203,200,199,198,197,196,195,194,193,192,191,190,189, + 188,187,186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171, + 170,169,161,160,159,158,157,156,154,151,107,103,98,0,1,152,153, +160,0,22, +160,151,107,103,98,0,1,152,153, +160,0,22, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, + 160,154,151,107,103,98,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,168,166,165,164,163,162,161,160,159,158,157, + 156,154,151,107,103,98,7,0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,167,166,165,164, + 163,162,160,159,154,151,107,103,98,7,0,1,152,153, +206,203,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184, + 183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,161,159,158, + 157,156,154,0,18,20,43,44,45,46,47,48,49,50,51,52,89,90,96, +215,214,213,206,203,200,199,198,197,196,195,194,193,192,191,190,189,188,187, + 186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,170,169, + 161,160,159,158,157,156,154,0,22, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, + 160,154,0,2,3,4,5,14,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55, + 58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112, + 114,121,155,204,205,207,217, +160,0,22, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, + 160,154,0,2,3,4,5,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55,58, + 60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114, + 121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, + 160,154,0,2,3,4,5,14,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55, + 58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112, + 114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, + 162,160,154,9,0,2,3,4,5,8,13,14,15,16,17,19,22,27,28,29,30,31,32,33,37, + 38,40,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90, + 91,92,93,95,108,112,114,121,155,204,205,207,217, +154,0,16, +215,214,213,0,3,155, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,161,160,159,158,157,156,154,0,11,12,18,20,21,22, + 24,26,29,56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122,141, + 142,147,148,149,150, +154,0,16, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, + 160,154,9,7,0,2,3,4,5,13,14,15,16,17,19,22,27,28,29,31,32,33,37,38,40, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +211,0, +214,213,212,211,0,144, +211,0, +211,0, +214,213,212,211,0,144, +210,0, +214,212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184, + 183,182,181,180,179,161,159,157,154,151,107,103,98,0,113,114, +214,212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184, + 183,182,181,180,179,161,159,157,154,151,107,103,98,0,113,114, +212,211,195,194,0,110, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +206,203,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184, + 183,182,181,180,179,161,159,158,157,154,0,20,89,90,96, +159,0,24, +159,0,24, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207, + 217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207, + 217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205, + 207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205, + 207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, + 205,207,217, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, + 205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, + 205,207,217, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, + 205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, + 205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204, + 205,207,217, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155, + 204,205,207,217, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121, + 155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,60,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114, + 121,155,204,205,207,217, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114, + 121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108, + 112,114,121,155,204,205,207,217, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 35,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, + 92,93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 35,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, + 92,93,95,108,112,114,121,155,204,205,207,217, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, + 7,0,1,152,153, +215,214,213,0,3,155, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98, + 0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5, + 19,22,23,25,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88, + 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, +167,0,39, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,154,0,2,3,4,5, + 19,22,34,36,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88, + 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, +166,0,32,37, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, + 162,160,154,9,0,2,3,4,5,13,14,15,16,17,19,22,27,28,29,30,31,32,33,37,38, + 40,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, + 92,93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,167,166,165,164, + 163,162,160,154,151,107,103,98,7,0,1,152,153, +160,158,156,154,0,18,20,22, +216,215,214,213,212,211,210,209,208,206,203,202,201,200,199,198,197,196,195, + 194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,178,177, + 176,175,174,173,172,171,170,169,163,162,161,160,159,158,157,156,154,151, + 107,103,98,7,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, + 7,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, + 7,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, + 7,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, + 7,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, + 7,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, + 7,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194, + 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107, + 103,98,7,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,203,202,201,200,199,198,197,196,195, + 194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,168,166, + 165,164,163,162,161,160,159,158,157,156,154,151,107,103,98,7,0,1,152, + 153, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, + 7,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, + 7,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98, + 7,0,1,152,153, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,161,160,159,158,157,156,0,18,20,21,22,24,26,29, + 56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122,141,142,147, + 148,149,150, +154,0,16, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,161,160,159,158,157,156,154,7,0,11,12,18,20,21, + 22,24,26,29,56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122, + 141,142,147,148,149,150, +212,211,0,111,114, +212,211,0,111,114, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42, + 53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, +198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180, + 179,161,159,157,154,0,84,85,86, +198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180, + 179,161,159,157,154,0,84,85,86, +195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159, + 157,154,0,81,82, +195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159, + 157,154,0,81,82, +193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154, + 0,78,79, +193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154, + 0,78,79, +193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154, + 0,78,79, +193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154, + 0,78,79, +191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,0,73,74, + 75,76, +191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,0,73,74, + 75,76, +187,186,185,184,183,182,181,180,179,161,159,157,154,0,70,71, +185,184,183,182,181,180,179,161,159,157,154,0,68, +183,182,181,180,179,161,159,157,154,0,64, +184,183,182,181,180,179,161,159,157,154,0,66, +182,181,180,179,161,159,157,154,0, +179,0,57, +159,0,24, +159,0,24, +160,0,22, +157,0,21, +161,159,0,26, +159,0,24, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, + 160,154,151,107,103,98,0,1,152,153, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, + 160,154,9,0,2,3,4,5,13,14,15,16,17,19,22,27,28,29,31,32,33,37,38,40,41, + 42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93, + 95,108,112,114,121,155,204,205,207,217, +161,0,26, +154,0,16, +154,0,16, +216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188, + 185,184,183,180,179,163,162,161,160,159,158,157,156,154,0,11,12,18,20, + 21,22,24,26,29,56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122, + 141,142,147,148,149,150, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5, + 19,22,23,25,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88, + 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +154,7,0,16, +212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183, + 182,181,180,179,161,159,157,154,151,107,103,98,0,114, +212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183, + 182,181,180,179,161,159,157,154,151,107,103,98,0,114, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,41, + 42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93, + 95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5, + 19,22,23,25,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88, + 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92, + 93,95,108,112,114,121,155,204,205,207,217, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22, + 35,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91, + 92,93,95,108,112,114,121,155,204,205,207,217, +162,154,0,16,30, +159,0,24, +157,0,21, +159,0,24, +154,0,16, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5, + 19,22,34,36,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88, + 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217, +159,0,24, +215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163, + 160,154,0,2,3,4,5,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55,58, + 60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114, + 121,155,204,205,207,217, + +}; + + +static unsigned const char ag_astt[7073] = { + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,1,1,1,1,8,7,1,1,1,1,1,1,1,1,1,1, + 1,1,1,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,7,1,1,1,1,1,1,1,1, + 1,1,1,1,1,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,7,1,1,9,9,1,1, + 5,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,1,2,2,0,1,2,2,1,2,1, + 1,1,2,2,1,1,1,1,1,1,1,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,2, + 1,2,2,1,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,5,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,1,1,1,1,1,1,1,1,1,1,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,7,1,1,1,1,1,1,1,1,1,7,2,1,1,10,10,10, + 10,10,10,2,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, + 10,10,10,10,10,1,2,2,2,2,2,2,2,2,2,2,2,7,2,2,2,1,1,1,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,1,1,1,1,7,1,1,3,10,10,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,1,1,1,1,7,1,2,1,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,1,1,1,1,7,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,1,1,1,1,7,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,1,1,1,1,5,7,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,1,1,1,1,5,7,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,1,1,1,1,5,7,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, + 1,1,1,1,5,7,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,1,1,1,1,7,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,1,1,1,1,7,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,1,1,1,1,5,7,1,1,3, + 2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1, + 1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1, + 2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2, + 1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1, + 2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2, + 1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1, + 1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2, + 1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,1,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,2,1,2,2,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,1,1,1,1,5,1,1,1,1,1,1,5,1, + 1,1,1,1,1,5,1,1,1,5,1,1,5,1,1,7,1,1,5,1,4,5,5,5,5,5,5,5,7,5,1,1,1,1,7,1,1, + 3,5,1,1,1,1,7,1,1,3,1,1,7,1,1,4,4,5,5,5,5,5,7,10,10,10,10,10,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,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,1, + 1,7,1,1,3,1,7,1,5,1,1,1,1,7,1,1,3,1,7,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,1,1,1,1,7,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,1,1,1,1,5,7,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,1,1,1,1,5,7,1,1,3,1,4,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,4,4,1,4,1,4,7,1,1,1,1,1,1,1,1,1,1,1,1,2,2, + 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,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,1,4,4,4,4,4,7,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,2,2, + 2,1,1,1,2,1,1,1,1,1,1,1,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, + 2,1,2,2,1,1,1,1,1,1,1,7,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1, + 2,2,2,1,1,2,2,1,1,1,1,1,1,1,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,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2, + 2,1,2,1,1,1,1,1,1,1,1,1,1,1,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,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2, + 1,2,2,1,2,2,1,2,1,1,1,2,2,1,2,1,1,1,1,1,1,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,2,1,2,2,1,1,1,1,1,1,1,7,2,2,2,2,7,1,1,1,1,1,1,1,1,1,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,7,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,2,7,2,1,2,2,2,2,1,2,1,1,1,2,2,1,1,1,1,1,1,1,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,2,1,2,2,1,1,1,1,1,1,2,7,2,2,2,2,7,2,2, + 5,2,5,2,2,10,10,5,2,2,7,4,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,4,4,4,4,4,7,2,1,4,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, + 4,4,4,4,4,7,2,1,8,8,1,1,7,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3, + 2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1, + 1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,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,2,1,2,2,1,1,1,1,1,1,1,4,1,1,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,4,4,7,1,2,2,1,1,7,2,1,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,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2, + 2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,2,1,1,1,1,1,2,1,2,2,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,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2, + 2,2,1,1,1,1,1,2,1,2,2,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,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1, + 1,1,7,2,1,2,2,1,1,2,1,1,2,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2, + 1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1, + 2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2, + 2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2, + 1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1, + 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1, + 1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2, + 2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,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,5,1,1,1,1,5,7,1,1,3,2,2,2, + 2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2, + 1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1, + 1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,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,5,1, + 1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1, + 1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7, + 1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2, + 2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, + 1,2,2,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,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1, + 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,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,5,1,1,1,1,5,7,1,1,3,2,2,2, + 2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, + 1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2, + 1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, + 1,2,2,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,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1, + 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1, + 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,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,5,1,1,1,1,5,7,1,1, + 3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,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,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7, + 2,1,2,2,2,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,1,2,2,1, + 1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,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,1,2,2,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,1,1,1,1,5,7,1,1,3,2,2,2,7,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,1,1, + 1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,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,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,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,1,2,2,1,1,1,1,1,1,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1, + 2,2,2,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,1,2,2,1,1,1,1, + 1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1, + 1,1,1,7,2,1,2,2,2,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,1, + 2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1, + 2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,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,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3, + 2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,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,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1, + 1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,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,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,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,1,2,2,1,1,1,1,1,1,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2, + 2,2,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,1,2,2,1,1,1,1,1, + 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1, + 1,1,7,2,1,2,2,2,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,1,2, + 2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2, + 1,1,1,1,1,1,1,1,7,2,1,2,2,2,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,1,2,2,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,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2, + 1,2,2,2,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,1,2,2,1,1,1, + 1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,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,1,2,2,1,1,1,1,1,1,1,5,1,2,2,2,2,2,1,2,1, + 1,1,1,1,1,1,1,4,7,2,1,2,2,2,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,1,2,2,1,1,1,1,1,1,1,7,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,7,2,1,2,2,2,2,1,2,1,1,1,2,2,1,2,1,1,1,1,1,1,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,2,1,2,2,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,1,1,1,1,5,7,1,1,3,1,1,1,4,7,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,1,1,1,1,5,7,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,1,1,1,1,5,7,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,1,1,1,1,5,7,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,1,1,1,1,5,7,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,1,1,1,1,5,7,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,1,1, + 1,1,5,7,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,1,1,1,1,5,7,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,1,1,1,1,5,7,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,1,1,1,1,5,7,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,1,1, + 1,1,5,7,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,1,1,1,1,5,7,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,1,1,1,1,5,7,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,1,1,1,1,5,7,1,1,3,1,1,1,1,1,1,1,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,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,1,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,8,8,7,1,1,1,1,1,1,1,1,1,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,7,1,2,2,2,7,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2, + 1,1,2,1,1,2,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,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,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,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1, + 1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,1,1,4,4,4, + 4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1, + 1,1,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,4,4,4,4,4,4,4,4,4,4,7,1,1,4,4,4,4,4,4,4, + 4,7,1,1,4,4,4,4,4,4,4,4,4,7,1,4,4,4,4,4,4,4,4,7,1,7,1,1,7,2,1,7,2,1,7,1,1, + 7,2,1,4,7,1,1,7,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1, + 3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,2,2,2,1,2,1,1,1,2,2, + 1,1,1,1,1,1,1,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,2,1,2,2,1, + 1,1,1,1,1,1,5,1,1,7,1,1,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,8,1,1,1,1,1,1,8,7,1,1,1,1,1,1,1,1,1,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,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,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,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2, + 1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,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,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,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,1,2,2,1,1,1,1,1,1,1,2,7,2, + 10,10,4,4,4,4,4,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,2,10,10, + 4,4,4,4,4,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,2,2,2,2,2,2,1, + 2,1,1,1,1,1,1,1,1,7,2,1,2,2,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,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,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,1,2,2,1,1,1,1,1,1,2, + 2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,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,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1, + 2,2,2,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,1,2,2,1,1,1,1, + 1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,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,1,2,2,1,1,1,1,1,1,1,1,7,2,2,1,7,2,1,7,2,1,7,2, + 1,7,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,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,1,2,2,1,1,1,1,1,1,1,7,1,2,2,2,2,2,1,2,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,1,2,2,1,1,1,1,1,1,1,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,2,1,2,2,1,1,1,1,1,1 +}; + + +static const unsigned short ag_pstt[] = { +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,1,2,4,0,3,3,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,6,1,5,6, +7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,2,7, + 8, +349,349,1,2,351,349, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,62,1,4, + 99,54,101,100,0,64,21,21,63,24,61,60,31,21,21,59,58,57,56,49,55,47,60, + 53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23, + 100,14,100,129,11,46,16,15,12,13, +115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115, + 115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,117, +118,6, +110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, + 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,112, +113,8, +65,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70, + 70,70,70,70,70,70,70,70,66,156,155,154,153,152,151,150,149,148,147,146, + 9,70,70,70,69,68,67,70, +71,71,10,126,71, +65,143,143,143,143,143,143,141,143,143,143,143,143,143,143,143,143,143,143, + 143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,66,156,155, + 154,153,152,151,150,149,148,147,146,11,143,143,143,69,68,67,143, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,3,3,1,2,12,3,3,405, +130,130,72,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,3,3,1,2,13,3,130,3,415, +73,119, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,3,3,1,2,15,3,3,403, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,3,3,1,2,16,3,3,402, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,17,3,3,400, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,18,3,3,399, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,19,3,3,392, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,20,3,3,393, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,3,3,1,2,21,3,3,398, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,3,3,1,2,22,3,3,397, +74,97,75, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,24,3,3,358, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,25,99,54,101,100,76,77,54, + 27,28,96,96,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,26,99,54,101,100,76,77,54, + 27,28,95,95,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,27,99,54,101,100,76,77,54, + 27,28,94,94,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,28,99,54,101,100,76,77,54, + 27,28,93,93,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,29,99,54,101,100,76,77,54, + 27,28,92,92,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,30,99,54,101,100,76,77,54, + 27,28,91,91,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,31,99,54,101,100,79,78,31, + 78,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, + 23,100,14,100,129,11,46,16,15,12,13, +80,82,84,81,85,83,81, +20,19,78,87,86, +88,90,73,91,89, +92,94,96,98,70,99,97,95,93, +100,102,68,103,101, +104,66,105, +106,64,107, +108,39,109, +110,61,111, +63,59,59,59,59,59,59,59,41, +350,3,3,1,2,42,3,3,366, +350,3,3,1,2,43,3,3,364, +112,114,44,115,113, +58,58,56,56,56,56,56,45, +137,137,137,137,137,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,3,3,1,2,46,3,3,353, +24,47,116, +350,3,3,1,2,48,3,3,363, +24,49,117, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,3,3,1,2,50,3,3,362, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,3,3,1,2,350,51,3,3,361, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,3,3,1,2,350,52,3,3,352, +118,102,21,22,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, + 102,102,102,102,102,122,124,126,128,130,132,134,136,138,140,102,102,120, + 102,142,102,53,143,121,141,139,137,135,133,131,129,127,125,123,103,104, + 119, +135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, + 135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, + 135,24,135,135,135,135,135,54,144, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,55,99, + 54,101,100,38,24,60,31,145,38,59,58,57,56,49,55,47,60,53,54,45,44,41,40, + 39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11, + 46,16,15,12,13, +24,56,146, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,57,99, + 54,101,100,24,60,31,29,36,59,58,57,56,49,55,47,60,53,54,45,44,41,40,39, + 38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46, + 16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,58,99, + 54,101,100,147,24,60,31,147,147,59,58,57,56,49,55,47,60,53,54,45,44,41, + 40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129, + 11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,149,24,52,62, + 59,99,54,101,100,148,21,21,63,24,61,60,31,21,21,59,25,58,57,56,49,55,47, + 60,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, + 23,100,14,100,129,11,46,16,15,12,13, +52,60,23, +136,136,136,61,150,46, +152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106, + 110,114,156,51,159,24,160,120,151,142,165,62,164,165,164,164,164,164, + 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, + 164,164,164,164,164,164,164,164,164, +52,63,9, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,166,2, + 64,99,54,101,100,22,22,63,24,61,60,31,22,22,59,58,57,56,49,55,47,60,53, + 54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23, + 100,14,100,129,11,46,16,15,12,13, +162,65, +168,168,165,165,66,165, +164,160, +163,159, +168,168,166,166,158,166, +138,70, +131,71,71,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, + 131,131,131,131,131,131,131,131,131,131,131,131,131,71,132,71, +125,71,71,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, + 125,125,125,125,125,125,125,125,125,125,125,125,125,72,124,71, +168,168,167,168,73,168, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,74,3,3, + 401, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,75,99,54,101,100,76,77,54, + 27,28,98,98,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,76,99,54,101,100,78,31,78, + 53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23, + 100,14,100,129,11,46,16,15,12,13, +118,102,21,22,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, + 102,102,102,102,102,102,102,120,102,102,77,121,103,104,119, +160,78,107, +160,79,169, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,80,3,3,396, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,81,99,54,101,100,31,77,54, + 27,28,87,87,87,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,82,3,3,395, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,83,99,54,101,100,31,77,54, + 27,28,86,86,86,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,84,3,3,394, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,85,99,54,101,100,31,77,54, + 27,28,85,85,85,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,86,99,54,101,100,31,77,54, + 170,27,28,170,170,170,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,87,99,54,101,100,31,77,54, + 171,27,28,171,171,171,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,88,3,3, + 391, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,89,99,54,101,100,31,77,54, + 172,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,90,3,3, + 390, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,91,99,54,101,100,31,77,54, + 173,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,92,3,3, + 389, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,93,99,54,101,100,31,77,54, + 174,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12, + 13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,94,3,3,388, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,95,99,54,101,100,31,77,54, + 175,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12, + 13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,96,3,3, + 387, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,97,99,54,101,100,31,77,54, + 176,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12, + 13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,98,3,3,386, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,99,99,54,101,100,31,77,54, + 177,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12, + 13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,100,3,3, + 385, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,101,99,54,101,100,31,77, + 54,178,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16, + 15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,102,3,3, + 384, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,103,99,54,101,100,31,77, + 54,179,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16, + 15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,104,3,3,383, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,105,99,54,101,100,31,77, + 54,180,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46, + 16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,106,3,3,382, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,107,99,54,101,100,31,77, + 54,181,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11, + 46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,108,3,3, + 380, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,109,99,54,101,100,31,77, + 54,182,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100, + 129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,110,3,3,381, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,111,99,54,101,100,31,77, + 54,183,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129, + 11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,112,3,3, + 379, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,113,99,54,101,100,31,77, + 54,184,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14, + 100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,114,3,3,378, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,115,99,54,101,100,185,31, + 185,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26, + 25,23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,116,99,54,101,100,41,31, + 186,41,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29, + 26,25,23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,117,99,54,101,100,41,31, + 187,41,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29, + 26,25,23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,118, + 3,3,404, +136,136,136,119,188,46, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,120,3,3,356, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,121,99,54,101,100,189,31, + 189,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26, + 25,23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,122,3,3, + 376, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,123,99,54,101,100,53,31, + 53,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, + 23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,124,3,3, + 375, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,125,99,54,101,100,52,31, + 52,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, + 23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,126,3,3, + 374, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,127,99,54,101,100,51,31, + 51,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, + 23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,128,3,3, + 373, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,129,99,54,101,100,50,31, + 50,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, + 23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,130,3,3, + 372, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,131,99,54,101,100,49,31, + 49,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, + 23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,132,3,3, + 371, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,133,99,54,101,100,48,31, + 48,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, + 23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,134,3,3, + 370, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,135,99,54,101,100,47,31, + 47,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, + 23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,136,3,3, + 369, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,137,99,54,101,100,46,31, + 46,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, + 23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,138,3,3, + 368, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,139,99,54,101,100,45,31, + 45,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, + 23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,140,3,3, + 367, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,141,99,54,101,100,44,31, + 44,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, + 23,100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,142,3,3,354, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,143,99,54,101,100,43,31, + 43,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, + 23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,15,144,99,54,101,100,17, + 31,191,190,17,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32, + 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +192,19,193, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,31,146,99,54,101,100,33, + 31,195,194,33,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32, + 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +43,147,196,49, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,149,24,52,197, + 148,99,54,101,100,22,22,63,24,61,60,31,22,22,59,26,58,57,56,49,55,47,60, + 53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23, + 100,14,100,129,11,46,16,15,12,13, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,3,3,1,2,350,149,3,3,360, +24,120,142,11,150,200,199,198, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3, + 1,2,350,151,3,3,355, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,152, + 3,3,414, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,153, + 3,3,413, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,154, + 3,3,412, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,155, + 3,3,411, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,156,3,3,377, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,157, + 3,3,410, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,158, + 3,3,409, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2, + 350,159,3,3,359, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,160,3,3,357, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,161, + 3,3,408, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,162, + 3,3,407, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,163, + 3,3,406, +152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106, + 110,114,156,51,159,24,160,120,151,142,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, +52,165,10, +152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106, + 110,114,156,51,159,24,160,120,151,142,201,201,166,164,201,164,164,164, + 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, + 164,164,164,164,164,164,164,164,164,164, +133,133,167,202,133, +133,133,168,203,133, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,169,99,54,101,100,31,77, + 54,27,28,89,89,89,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +80,82,84,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,170, + 85,83,81, +80,82,84,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,171, + 85,83,81, +20,19,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,172,87,86, +20,19,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,173,87,86, +88,90,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,174,91,89, +88,90,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,175,91,89, +88,90,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,176,91,89, +88,90,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,177,91,89, +92,94,96,98,72,72,72,72,72,72,72,72,72,72,72,72,72,178,99,97,95,93, +92,94,96,98,71,71,71,71,71,71,71,71,71,71,71,71,71,179,99,97,95,93, +100,102,69,69,69,69,69,69,69,69,69,69,69,180,103,101, +104,67,67,67,67,67,67,67,67,67,67,181,105, +110,62,62,62,62,62,62,62,62,182,111, +106,65,65,65,65,65,65,65,65,65,183,107, +63,60,60,60,60,60,60,60,184, +156,185,204, +160,186,40, +160,187,35, +24,188,205, +151,189,55, +159,16,190,206, +160,191,105, +350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350, + 350,350,3,3,1,2,192,3,3,365, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,62,193, + 99,54,101,100,39,39,63,24,61,60,31,39,39,59,58,57,56,49,55,47,60,53,54, + 45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100, + 14,100,129,11,46,16,15,12,13, +159,32,207, +52,195,208, +52,196,28, +152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106, + 110,114,156,51,209,159,24,160,120,151,142,209,197,164,209,164,164,164, + 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, + 164,164,164,164,164,164,164,164,164,164, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,15,198,99,54,101,100,17, + 31,210,190,17,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32, + 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,199,99,54,101,100,211,31, + 211,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26, + 25,23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,200,99,54,101,100,12,31, + 12,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, + 23,100,14,100,129,11,46,16,15,12,13, +52,7,201,10, +134,134,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, + 123,123,123,123,123,123,123,123,123,123,123,123,202,134, +134,134,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122, + 122,122,122,122,122,122,122,122,122,122,122,122,203,134, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,204,99,54,101,100,31,57, + 77,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23, + 100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,15,205,99,54,101,100,17, + 31,212,190,17,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32, + 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,206,99,54,101,100,18,31, + 18,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, + 23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,207,99,54,101,100,34,31, + 34,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25, + 23,100,14,100,129,11,46,16,15,12,13, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,208,99,54,101,100,41,31, + 213,41,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29, + 26,25,23,100,14,100,129,11,46,16,15,12,13, +149,52,209,10,27, +160,210,14, +151,211,13, +160,212,106, +52,213,214, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,31,214,99,54,101,100,33, + 31,215,194,33,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32, + 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13, +160,215,216, +136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,216,99, + 54,101,100,24,60,31,30,37,59,58,57,56,49,55,47,60,53,54,45,44,41,40,39, + 38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46, + 16,15,12,13, + +}; + + +static const unsigned short ag_sbt[] = { + 0, 30, 68, 107, 113, 194, 229, 231, 267, 269, 322, 327, 381, 414, + 451, 453, 486, 519, 563, 607, 651, 695, 741, 787, 790, 834, 876, 918, + 960,1002,1044,1086,1144,1151,1156,1161,1170,1175,1178,1181,1184,1187, + 1196,1205,1214,1219,1227,1281,1284,1293,1296,1325,1373,1406,1462,1508, + 1582,1585,1658,1732,1813,1816,1822,1888,1891,1970,1972,1978,1980,1982, + 1988,1990,2025,2060,2066,2089,2131,2188,2222,2225,2228,2272,2315,2359, + 2402,2446,2489,2533,2577,2600,2645,2668,2713,2736,2782,2826,2872,2895, + 2941,2985,3031,3054,3101,3124,3171,3215,3263,3307,3356,3379,3430,3474, + 3524,3547,3600,3644,3701,3759,3817,3859,3865,3909,3966,3989,4046,4069, + 4126,4149,4206,4229,4286,4309,4366,4389,4446,4469,4526,4549,4606,4629, + 4686,4709,4766,4810,4867,4927,4930,4990,4994,5074,5106,5114,5177,5219, + 5261,5303,5345,5389,5431,5473,5517,5574,5616,5658,5700,5763,5766,5833, + 5838,5843,5886,5914,5942,5966,5990,6012,6034,6056,6078,6100,6122,6138, + 6151,6162,6174,6183,6186,6189,6192,6195,6198,6202,6205,6234,6312,6315, + 6318,6321,6388,6448,6505,6562,6566,6599,6632,6688,6748,6805,6862,6920, + 6925,6928,6931,6934,6937,6997,7000,7073 +}; + + +static const unsigned short ag_sbe[] = { + 26, 65, 104, 111, 136, 228, 230, 266, 268, 314, 324, 373, 410, 446, + 452, 482, 515, 559, 603, 647, 691, 737, 783, 788, 830, 849, 891, 933, + 975,1017,1059,1101,1147,1153,1158,1165,1172,1176,1179,1182,1185,1195, + 1201,1210,1216,1226,1277,1282,1289,1294,1321,1369,1402,1446,1506,1529, + 1583,1606,1679,1755,1814,1819,1854,1889,1914,1971,1976,1979,1981,1986, + 1989,2022,2057,2064,2085,2104,2146,2217,2223,2226,2268,2287,2355,2374, + 2442,2461,2504,2548,2596,2615,2664,2683,2732,2751,2822,2841,2891,2910, + 2981,3000,3050,3069,3120,3139,3211,3230,3303,3322,3375,3394,3470,3489, + 3543,3562,3640,3659,3716,3774,3855,3862,3905,3924,3985,4004,4065,4084, + 4145,4164,4225,4244,4305,4324,4385,4404,4465,4484,4545,4564,4625,4644, + 4705,4724,4806,4825,4883,4928,4946,4991,5017,5102,5110,5173,5215,5257, + 5299,5341,5385,5427,5469,5513,5570,5612,5654,5696,5731,5764,5799,5835, + 5840,5858,5910,5938,5963,5987,6009,6031,6053,6075,6095,6117,6135,6149, + 6160,6172,6182,6184,6187,6190,6193,6196,6200,6203,6230,6256,6313,6316, + 6319,6354,6404,6463,6520,6564,6597,6630,6647,6704,6763,6820,6877,6922, + 6926,6929,6932,6935,6953,6998,7021,7073 +}; + + +static const unsigned char ag_fl[] = { + 2,1,2,1,2,0,1,4,1,2,3,2,4,5,5,0,1,1,3,1,1,1,2,2,1,2,3,5,4,2,9,0,1,1,3, + 4,2,9,2,4,4,1,1,3,3,3,3,3,3,3,3,3,3,3,1,4,1,5,1,1,3,1,3,1,1,3,1,3,1,3, + 1,3,3,1,3,3,3,3,1,3,3,1,3,3,1,3,3,3,1,4,1,2,2,2,2,2,2,1,3,1,1,1,1,2,2, + 4,6,3,1,1,2,0,1,3,1,2,0,1,3,1,0,1,4,4,3,2,2,1,1,1,2,1,2,1,2,1,1,2,3,1, + 1,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,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,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,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, + 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 +}; + +static const unsigned char ag_ptt[] = { + 0, 6, 6, 11, 11, 12, 12, 6, 13, 13, 13, 15, 15, 15, 15, 23, 23, 25, + 25, 14, 14, 8, 8, 27, 27, 27, 27, 27, 27, 27, 27, 34, 34, 36, 36, 32, + 28, 28, 28, 28, 38, 35, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 42, 42, 41, 41, 55, 54, 54, 58, 58, 61, 60, 60, 63, 63, 65, 65, 67, 67, + 67, 69, 69, 69, 69, 69, 72, 72, 72, 77, 77, 77, 80, 80, 80, 80, 83, 83, + 87, 87, 87, 87, 87, 87, 87, 88, 88, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 1,100,100,101,101, 1,105,105,106,106, 1,204,110,110,204,204,108,108, + 108, 95, 95,217,217,113,113,111,111, 17,155,155,207,118,118,205,121,121, + 123,123,120,120,120,120,120,120,120,120,120,120,120,120,120,136,136,136, + 138,139,140,137,137,144,144,114, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 97, 97, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,115,115,115,116,116,116,116,116,119,119,119,119,119,119,119,119, + 119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, + 119,119,119,119,119,119,124,124,124,124,124,124,124,124,124,124,124,124, + 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, + 124,124,145,145,146,146,152,152,153,153, 16, 3, 18, 21, 20, 24, 22, 26, + 30, 29, 31, 33, 37, 39, 40, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 57, + 56, 59, 62, 64, 66, 68, 70, 71, 73, 74, 75, 76, 78, 79, 81, 82, 84, 85, + 86, 89, 90, 91, 92, 94, 2, 4, 96, 5,147,122,117,142,148,149,109,150, + 141,112 +}; + +static const unsigned char *ag_valid(int ag_k) { + const unsigned char *ag_tp = &ag_tstt[ag_sbt[(PCB).sn+1]]; + while (*--ag_tp != (unsigned char) ag_k) if (*ag_tp == 0) return NULL; + return ag_tp; +} + +int vmCompile_change_reduction(vmCompile_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((vmCompile_token_type) *ag_tp)) ag_tp++; + (PCB).reduction_token = (vmCompile_token_type) *ag_tp; +} + + + +static void ag_ra(void) +{ + switch(ag_rpx[(PCB).ag_ap]) { + case 1: V(0,(Code *)) = ag_rp_1(); break; + case 2: V(0,(Code *)) = ag_rp_2(V(0,(Code *))); break; + case 3: V(0,(Code *)) = ag_rp_3(V(0,(Code *))); break; + case 4: V(0,(Code *)) = ag_rp_4(); break; + case 5: V(0,(Code *)) = ag_rp_5(V(0,(int *)), V(1,(int *))); break; + case 6: V(0,(Code *)) = ag_rp_6(V(0,(int *)), V(1,(int *)), V(3,(Code *))); break; + case 7: V(0,(Code *)) = ag_rp_7(V(0,(int *)), V(1,(int *)), V(3,(Code *))); break; + case 8: V(0,(Code *)) = ag_rp_8(V(0,(int *)), V(1,(int *)), V(3,(Code *))); break; + case 9: V(0,(Code *)) = ag_rp_9(); break; + case 10: V(0,(Code *)) = ag_rp_10(V(0,(Code *))); break; + case 11: V(0,(Code *)) = ag_rp_11(V(0,(Code *))); break; + case 12: V(0,(Code *)) = ag_rp_12(V(0,(Code *)), V(2,(Code *))); break; + case 13: V(0,(Code *)) = ag_rp_13(V(0,(Code *))); break; + case 14: V(0,(Code *)) = ag_rp_14(V(0,(Code *)), V(1,(Code *))); break; + case 15: V(0,(Code *)) = ag_rp_15(V(0,(Code *))); break; + case 16: V(0,(Code *)) = ag_rp_16(); break; + case 17: V(0,(Code *)) = ag_rp_17(); break; + case 18: V(0,(Code *)) = ag_rp_18(V(1,(Code *))); break; + case 19: V(0,(Code *)) = ag_rp_19(V(1,(Code *))); break; + case 20: V(0,(Code *)) = ag_rp_20(V(1,(Code *)), V(2,(Code *))); break; + case 21: V(0,(Code *)) = ag_rp_21(V(0,(Code *)), V(1,(Code *))); break; + case 22: V(0,(Code *)) = ag_rp_22(V(2,(Code *)), V(4,(Code *)), V(6,(Code *)), V(8,(Code *))); break; + case 23: V(0,(Code *)) = ag_rp_23(); break; + case 24: V(0,(Code *)) = ag_rp_24(V(0,(Code *))); break; + case 25: V(0,(Code *)) = ag_rp_25(V(0,(Code *)), V(2,(Code *))); break; + case 26: V(0,(Code *)) = ag_rp_26(V(2,(Code *))); break; + case 27: V(0,(Code *)) = ag_rp_27(V(0,(Code *)), V(1,(Code *))); break; + case 28: V(0,(Code *)) = ag_rp_28(V(2,(Code *)), V(4,(Code *)), V(6,(Code *)), V(8,(Code *))); break; + case 29: V(0,(Code *)) = ag_rp_29(V(0,(Code *)), V(1,(Code *))); break; + case 30: V(0,(Code *)) = ag_rp_30(V(0,(Code *)), V(1,(Code *)), V(3,(Code *))); break; + case 31: V(0,(Code *)) = ag_rp_31(V(2,(Code *))); break; + case 32: V(0,(Code *)) = ag_rp_32(V(0,(Code *))); break; + case 33: V(0,(Code *)) = ag_rp_33(V(0,(Code *)), V(2,(Code *))); break; + case 34: V(0,(Code *)) = ag_rp_34(V(0,(Code *)), V(2,(Code *))); break; + case 35: V(0,(Code *)) = ag_rp_35(V(0,(Code *)), V(2,(Code *))); break; + case 36: V(0,(Code *)) = ag_rp_36(V(0,(Code *)), V(2,(Code *))); break; + case 37: V(0,(Code *)) = ag_rp_37(V(0,(Code *)), V(2,(Code *))); break; + case 38: V(0,(Code *)) = ag_rp_38(V(0,(Code *)), V(2,(Code *))); break; + case 39: V(0,(Code *)) = ag_rp_39(V(0,(Code *)), V(2,(Code *))); break; + case 40: V(0,(Code *)) = ag_rp_40(V(0,(Code *)), V(2,(Code *))); break; + case 41: V(0,(Code *)) = ag_rp_41(V(0,(Code *)), V(2,(Code *))); break; + case 42: V(0,(Code *)) = ag_rp_42(V(0,(Code *)), V(2,(Code *))); break; + case 43: V(0,(Code *)) = ag_rp_43(V(0,(Code *)), V(2,(Code *))); break; + case 44: V(0,(Code *)) = ag_rp_44(V(0,(int *))); break; + case 45: V(0,(Code *)) = ag_rp_45(V(0,(Code *)), V(2,(Code *))); break; + case 46: V(0,(Code *)) = ag_rp_46(V(0,(Code *)), V(2,(Code *)), V(4,(Code *))); break; + case 47: V(0,(Code *)) = ag_rp_47(V(0,(Code *))); break; + case 48: V(0,(Code *)) = ag_rp_48(V(0,(Code *)), V(2,(Code *))); break; + case 49: V(0,(Code *)) = ag_rp_49(V(0,(Code *)), V(2,(Code *))); break; + case 50: V(0,(Code *)) = ag_rp_50(V(0,(Code *))); break; + case 51: V(0,(Code *)) = ag_rp_51(V(0,(Code *)), V(2,(Code *))); break; + case 52: V(0,(Code *)) = ag_rp_52(V(0,(Code *)), V(2,(Code *))); break; + case 53: V(0,(Code *)) = ag_rp_53(V(0,(Code *)), V(2,(Code *))); break; + case 54: V(0,(Code *)) = ag_rp_54(V(0,(Code *)), V(2,(Code *))); break; + case 55: V(0,(Code *)) = ag_rp_55(V(0,(Code *)), V(2,(Code *))); break; + case 56: V(0,(Code *)) = ag_rp_56(V(0,(Code *)), V(2,(Code *))); break; + case 57: V(0,(Code *)) = ag_rp_57(V(0,(Code *)), V(2,(Code *))); break; + case 58: V(0,(Code *)) = ag_rp_58(V(0,(Code *)), V(2,(Code *))); break; + case 59: V(0,(Code *)) = ag_rp_59(V(0,(Code *)), V(2,(Code *))); break; + case 60: V(0,(Code *)) = ag_rp_60(V(0,(Code *)), V(2,(Code *))); break; + case 61: V(0,(Code *)) = ag_rp_61(V(0,(Code *)), V(2,(Code *))); break; + case 62: V(0,(Code *)) = ag_rp_62(V(0,(Code *)), V(2,(Code *))); break; + case 63: V(0,(Code *)) = ag_rp_63(V(0,(Code *)), V(2,(Code *))); break; + case 64: V(0,(Code *)) = ag_rp_64(V(0,(Code *)), V(2,(Code *))); break; + case 65: V(0,(Code *)) = ag_rp_65(V(0,(Code *)), V(2,(Code *))); break; + case 66: V(0,(Code *)) = ag_rp_66(V(0,(Code *)), V(2,(Code *))); break; + case 67: V(0,(Code *)) = ag_rp_67(V(1,(int *)), V(3,(Code *))); break; + case 68: V(0,(Code *)) = ag_rp_68(V(1,(Code *))); break; + case 69: V(0,(Code *)) = ag_rp_69(V(1,(Code *))); break; + case 70: V(0,(Code *)) = ag_rp_70(V(1,(Code *))); break; + case 71: V(0,(Code *)) = ag_rp_71(V(1,(Code *))); break; + case 72: V(0,(Code *)) = ag_rp_72(V(1,(Code *))); break; + case 73: V(0,(Code *)) = ag_rp_73(V(1,(Code *))); break; + case 74: V(0,(Code *)) = ag_rp_74(V(0,(Code *)), V(2,(Code *))); break; + case 75: V(0,(Code *)) = ag_rp_75(V(0,(double *))); break; + case 76: V(0,(Code *)) = ag_rp_76(V(0,(int *))); break; + case 77: V(0,(Code *)) = ag_rp_77(V(0,(int *))); break; + case 78: V(0,(Code *)) = ag_rp_78(V(0,(Code *))); break; + case 79: V(0,(Code *)) = ag_rp_79(V(0,(Code *))); break; + case 80: V(0,(Code *)) = ag_rp_80(V(0,(Code *))); break; + case 81: V(0,(Code *)) = ag_rp_81(V(0,(int *)), V(2,(Code *))); break; + case 82: V(0,(Code *)) = ag_rp_82(V(0,(Code *)), V(2,(int *)), V(4,(Code *))); break; + case 83: V(0,(Code *)) = ag_rp_83(V(1,(Code *))); break; + case 84: V(0,(double *)) = ag_rp_84(V(0,(double *)), V(3,(int *))); break; + case 85: V(0,(double *)) = ag_rp_85(V(0,(double *)), V(3,(int *))); break; + case 86: V(0,(double *)) = ag_rp_86(V(0,(int *)), V(2,(double *))); break; + case 87: V(0,(double *)) = ag_rp_87(V(0,(int *))); break; + case 88: V(0,(double *)) = ag_rp_88(V(1,(double *))); break; + case 89: V(0,(int *)) = ag_rp_89(V(0,(int *))); break; + case 90: V(0,(int *)) = ag_rp_90(V(0,(int *)), V(1,(int *))); break; + case 91: V(0,(double *)) = ag_rp_91(V(0,(int *))); break; + case 92: V(0,(double *)) = ag_rp_92(V(0,(int *)), V(1,(double *))); break; + case 93: V(0,(int *)) = ag_rp_93(V(0,(int *))); break; + case 94: V(0,(int *)) = ag_rp_94(V(0,(int *)), V(1,(int *))); break; + case 95: ag_default(&ag_rtt[0]); V(0,(int *)) = ag_rp_95(V(0,(int *))); break; + case 96: V(0,(int *)) = ag_rp_96(V(0,(int *))); break; + case 97: V(0,(int *)) = ag_rp_97(V(0,(int *)), V(1,(int *))); break; + case 98: V(0,(int *)) = ag_rp_98(V(1,(int *))); break; + case 99: V(0,(int *)) = ag_rp_99(V(0,(int *))); break; + case 100: V(0,(int *)) = ag_rp_100(); break; + case 101: V(0,(int *)) = ag_rp_101(V(0,(int *)), V(1,(int *))); break; + case 102: V(0,(int *)) = ag_rp_102(); break; + case 103: V(0,(int *)) = ag_rp_103(); break; + case 104: V(0,(int *)) = ag_rp_104(); break; + case 105: V(0,(int *)) = ag_rp_105(); break; + case 106: V(0,(int *)) = ag_rp_106(); break; + case 107: V(0,(int *)) = ag_rp_107(); break; + case 108: V(0,(int *)) = ag_rp_108(); break; + case 109: V(0,(int *)) = ag_rp_109(); break; + case 110: V(0,(int *)) = ag_rp_110(); break; + case 111: V(0,(int *)) = ag_rp_111(); break; + case 112: V(0,(int *)) = ag_rp_112(); break; + case 113: V(0,(int *)) = ag_rp_113(V(1,(int *))); break; + case 114: V(0,(int *)) = ag_rp_114(V(0,(int *)), V(1,(int *))); break; + case 115: V(0,(int *)) = ag_rp_115(V(0,(int *)), V(1,(int *))); break; + case 116: V(0,(int *)) = ag_rp_116(V(1,(int *))); break; + case 117: V(0,(int *)) = ag_rp_117(V(0,(int *)), V(1,(int *))); break; + case 118: V(0,(int *)) = ag_rp_118(V(0,(int *))); break; + } + (PCB).la_ptr = (PCB).pointer; +} + +#define TOKEN_NAMES vmCompile_token_names +const char *const vmCompile_token_names[218] = { + "input string", + "white space", + "real", + "name string", + "string literal", + "character constant", + "input string", + "eof", + "statements", + "error", + "", + "", + "", + "statement", + "executable statement", + "declaration", + "';'", + "type name", + "'='", + "expression", + "'['", + "']'", + "'('", + "expression list", + "')'", + "expressions", + "','", + "unconditional statement", + "conditional statement", + "'{'", + "'}'", + "\"do\"", + "while clause", + "\"for\"", + "for exprs", + "condition", + "for expr list", + "\"while\"", + "if clause", + "\"else\"", + "\"if\"", + "conditional expression", + "lvalue", + "\"+=\"", + "\"-=\"", + "\"*=\"", + "\"/=\"", + "\"%=\"", + "\"|=\"", + "\"&=\"", + "\"^=\"", + "\"<<=\"", + "\">>=\"", + "variable name", + "logical or expression", + "logical or condition", + "'\\?'", + "':'", + "logical and expression", + "\"||\"", + "bitwise or expression", + "logical and condition", + "\"&&\"", + "bitwise xor expression", + "'|'", + "bitwise and expression", + "'^'", + "equality expression", + "'&'", + "relational expression", + "\"==\"", + "\"!=\"", + "shift expression", + "'<'", + "\"<=\"", + "'>'", + "\">=\"", + "additive expression", + "\"<<\"", + "\">>\"", + "multiplicative expression", + "'+'", + "'-'", + "cast expression", + "'*'", + "'/'", + "'%'", + "unary expression", + "power expression", + "\"++\"", + "\"--\"", + "'!'", + "'~'", + "primary", + "\"**\"", + "integer constant", + "'.'", + "space", + "\"/*\"", + "", + "", + "", + "\"*/\"", + "\"//\"", + "", + "", + "", + "'\\n'", + "simple real", + "", + "", + "exponent", + "integer", + "fraction part", + "digit", + "letter", + "", + "'\\''", + "char constant element", + "not single quote", + "escape sequence", + "string chars", + "'\\\"'", + "string char", + "not double quote", + "\"\\\\a\"", + "\"\\\\b\"", + "\"\\\\f\"", + "\"\\\\n\"", + "\"\\\\r\"", + "\"\\\\t\"", + "\"\\\\v\"", + "\"\\\\\\\\\"", + "\"\\\\?\"", + "\"\\\\\\'\"", + "\"\\\\\\\"\"", + "octal escape", + "hex escape", + "one octal", + "two octal", + "three octal", + "'\\\\'", + "", + "\"\\\\x\"", + "hex digit", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "';'", + "name string", + "'='", + "']'", + "'['", + "')'", + "'('", + "','", + "'}'", + "'{'", + "\"do\"", + "\"for\"", + "\"while\"", + "\"else\"", + "\"if\"", + "\"+=\"", + "\"-=\"", + "\"*=\"", + "\"/=\"", + "\"%=\"", + "\"|=\"", + "\"&=\"", + "\"^=\"", + "\"<<=\"", + "\">>=\"", + "':'", + "'\\?'", + "\"||\"", + "\"&&\"", + "'|'", + "'^'", + "'&'", + "\"==\"", + "\"!=\"", + "'<'", + "\"<=\"", + "'>'", + "\">=\"", + "\"<<\"", + "\">>\"", + "'+'", + "'-'", + "'*'", + "'/'", + "'%'", + "\"++\"", + "\"--\"", + "'!'", + "'~'", + "\"**\"", + "real", + "string literal", + "'.'", + "character constant", + "", + "'\\\"'", + "'\\''", + "", + "", + "", + "", + "", + "'\\\\'", + "integer", + +}; + +#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_1_er_proc(void); +static int ag_action_2_er_proc(void); +static int ag_action_3_er_proc(void); +static int ag_action_4_er_proc(void); + +static int (*const ag_er_procs_scan[])(void) = { + ag_action_1_er_proc, + ag_action_2_er_proc, + ag_action_3_er_proc, + ag_action_4_er_proc +}; + + +static void ag_error_resynch(void) { + int ag_k; + int ag_ssx = (PCB).ssx; + + ag_diagnose(); + SYNTAX_ERROR; + if ((PCB).exit_flag != AG_RUNNING_CODE) return; + while (1) { + ag_k = ag_sbt[(PCB).sn]; + while (ag_tstt[ag_k] != 9 && ag_tstt[ag_k]) ag_k++; + if (ag_tstt[ag_k] || (PCB).ssx == 0) break; + (PCB).sn = (PCB).ss[--(PCB).ssx]; + } + if (ag_tstt[ag_k] == 0) { + (PCB).sn = PCB.ss[(PCB).ssx = ag_ssx]; + (PCB).exit_flag = AG_SYNTAX_ERROR_CODE; + return; + } + ag_k = ag_sbt[(PCB).sn]; + while (ag_tstt[ag_k] != 9 && ag_tstt[ag_k]) ag_k++; + (PCB).ag_ap = ag_pstt[ag_k]; + (ag_er_procs_scan[ag_astt[ag_k]])(); + while (1) { + ag_k = ag_sbt[(PCB).sn]; + while (ag_tstt[ag_k] != (unsigned char) (PCB).token_number && ag_tstt[ag_k]) + ag_k++; + if (ag_tstt[ag_k] && ag_astt[ag_k] != ag_action_10) break; + if ((PCB).token_number == 7) + {(PCB).exit_flag = AG_SYNTAX_ERROR_CODE; return;} + {(PCB).la_ptr = (PCB).pointer + 1; ag_track();} + (PCB).token_number = (vmCompile_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); + } + } + } + (PCB).la_ptr = (PCB).pointer; +} + + +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 = (vmCompile_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 == (vmCompile_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 = (vmCompile_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 == (vmCompile_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 = (vmCompile_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 = (vmCompile_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 = (vmCompile_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; + (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; + (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 = (vmCompile_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 (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 char)(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 (PCB).ss[(PCB).ssx] = (PCB).sn; + ag_track(); + (PCB).reduction_token = (vmCompile_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 char)(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) { + int ag_k = ag_sbt[(PCB).sn]; + while (ag_tstt[ag_k] != 9 && ag_tstt[ag_k]) ag_k++; + if (ag_tstt[ag_k] == 0) ag_undo(); + (PCB).la_ptr = (PCB).pointer; + ag_error_resynch(); + 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 { + (PCB).ss[(PCB).ssx] = (PCB).sn; + } + (PCB).la_ptr = (PCB).pointer; + (PCB).reduction_token = (vmCompile_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 char)(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 = (vmCompile_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; + (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 char)(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_2_er_proc(void) { + (PCB).btsx = 0, (PCB).drt = -1; + (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer; + (PCB).ssx++; + (PCB).sn = (PCB).ag_ap; + return 0; +} + +static int ag_action_1_er_proc(void) { + (PCB).btsx = 0, (PCB).drt = -1; + (PCB).exit_flag = AG_SUCCESS_CODE; + return 0; +} + +static int ag_action_4_er_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap] - 1; + (PCB).btsx = 0, (PCB).drt = -1; + (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap]; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + else (PCB).ss[(PCB).ssx] = (PCB).sn; + 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 char)(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_er_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap] - 1; + (PCB).btsx = 0, (PCB).drt = -1; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + else (PCB).ss[(PCB).ssx] = (PCB).sn; + (PCB).reduction_token = (vmCompile_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 char)(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; +} + + +void init_vmCompile(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 vmCompile(void) { + init_vmCompile(); + (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 = (vmCompile_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 char)(PCB).token_number) + ag_t1 = ag_tx + 1; + else ag_t2 = ag_tx; + } while (ag_t1 < ag_t2); + if (ag_tstt[ag_t1] != (unsigned char)(PCB).token_number) + ag_t1 = ag_sbe[(PCB).sn]; + } + (PCB).ag_ap = ag_pstt[ag_t1]; + (ag_gt_procs_scan[ag_astt[ag_t1]])(); + } +} + +