Mercurial > ~dholland > hg > ag > index.cgi
view tests/agcl/contrib/good/plm.c @ 4:bebb2ba69e1d
maybe help with getting tex to fail properly on error
author | David A. Holland |
---|---|
date | Sat, 18 Apr 2020 17:12:17 -0400 |
parents | 13d2b8934445 |
children |
line wrap: on
line source
/* * YACC grammar of PL/M */ #include <stdio.h> #include <stdlib.h> #include "plm-manifest.h" #include "scope.h" void yyerror (); /* Cause the `yydebug' variable to be defined. */ #define YYDEBUG (1) /* * 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 PLM_H #include "plm.h" #endif #ifndef PLM_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]) plm_pcb_type plm_pcb; #define PCB plm_pcb /* Line -, plm.syn */ void yyerror(char * s) { fprintf (stderr, "error at line %d: %s\n", lineno, s); } main() { init_scope(); return yyparse(); } #ifndef CONVERT_CASE static const char agCaseTable[31] = { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 }; static int agConvertCase(int c) { if (c >= 'a' && c <= 'z') return c ^= 0x20; if (c >= 0xe0 && c < 0xff) c ^= agCaseTable[c-0xe0]; return c; } #define CONVERT_CASE(c) agConvertCase(c) #endif #ifndef TAB_SPACING #define TAB_SPACING 8 #endif static void ag_rp_1(void) { /* Line -, plm.syn */ push_scope(); } static void ag_rp_2(void) { /* Line -, plm.syn */ push_scope(); } static void ag_rp_3(void) { /* Line -, plm.syn */ pop_scope(); } static void ag_rp_4(void) { /* Line -, plm.syn */ push_scope(); } static void ag_rp_5(void) { /* Line -, plm.syn */ enter_literal ($1, $3); } static void ag_rp_6(void) { /* Line -, plm.syn */ push_scope(); } static void ag_rp_7(void) { /* Line -, plm.syn */ push_scope(); } #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 int const ag_null_value NULL_VALUE_INITIALIZER; static const unsigned char ag_rpx[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7 }; static const unsigned char ag_key_itt[] = { 0 }; static const unsigned short ag_key_pt[] = { 0 }; static const unsigned char ag_key_ch[] = { 0, 47,255, 42,255, 61, 62,255, 68, 78, 84,255, 84,255, 65, 89,255, 76, 83, 85,255, 65, 72,255, 65, 69, 73, 79, 87,255, 65, 68,255, 76, 78, 79, 88,255, 84,255, 79,255, 65, 87,255, 71, 82,255, 69,255, 73, 84,255, 70, 78,255, 65, 73, 79,255, 73, 79,255, 70, 82,255, 76, 79, 82, 85,255, 65, 69, 84,255, 69,255, 69, 72, 84,255, 72, 79,255, 72, 79,255, 47, 58, 60, 62, 65, 66, 67, 68, 69, 71, 72, 73, 76, 77, 78, 79, 80, 81, 82, 83, 84, 87, 88,255, 61, 62,255, 47, 58, 60, 62,255, 69,255, 76, 85,255, 65, 72, 255, 73, 79, 87,255, 65, 68,255, 78,255, 84,255, 79,255, 65, 87,255, 70, 78,255, 79, 82,255, 65, 84,255, 69,255, 69, 72,255, 47, 65, 66, 67, 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 68,255, 47, 67, 87,255, 76, 85,255, 65, 72,255, 69, 73, 79, 87,255, 65, 68,255, 78,255, 84,255, 79,255, 65, 87,255, 70, 78,255, 65, 84,255, 69,255, 69, 72,255, 65, 66, 67, 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 76, 85,255, 65, 72,255, 69, 73, 79, 87,255, 65, 68,255, 76, 78, 79,255, 84,255, 79,255, 65, 87,255, 70, 78,255, 65, 84,255, 69,255, 69, 72,255, 47, 65, 66, 67, 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 73, 84,255, 78,255, 47, 65, 68, 69, 73, 80, 82,255, 69, 72,255, 47, 65, 66, 67, 68, 72, 73, 76, 78, 79, 80, 81, 82, 83, 87,255, 47, 84,255, 67, 87,255, 69, 72,255, 65, 66, 67, 68, 72, 73, 76, 78, 79, 80, 81, 82, 83, 87,255, 84,255, 76, 85,255, 65, 72,255, 73, 79, 87,255, 65, 68,255, 78,255, 84,255, 79,255, 65, 87,255, 70, 78,255, 65, 84,255, 69,255, 69, 72,255, 65, 66, 67, 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 76, 85,255, 65, 72,255, 73, 79, 87,255, 84,255, 79,255, 65, 87,255, 70, 78,255, 65, 84,255, 69, 255, 69, 72,255, 65, 66, 67, 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 76, 85,255, 65, 72,255, 73, 79, 87,255, 65, 68,255, 78,255, 84, 255, 79,255, 65, 87,255, 70, 78,255, 79, 82,255, 65, 84,255, 69,255, 69, 72,255, 65, 66, 67, 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 69, 72, 84,255, 47, 65, 66, 67, 68, 72, 73, 76, 78, 79, 80, 81, 82, 83, 87,255, 69, 72, 84,255, 65, 66, 67, 68, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 65, 89,255, 65, 73, 79,255, 69, 72, 84,255, 65, 66, 67, 68, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 61, 62,255, 73, 79,255, 72, 79,255, 47, 60, 62, 77, 79, 80, 84, 88,255, 61, 62,255, 73, 79,255, 72, 79,255, 47, 60, 62, 77, 80, 84, 88,255, 69, 72,255, 47, 65, 66, 67, 68, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 39,255, 61, 62,255, 73, 79,255, 72, 79, 255, 47, 60, 62, 65, 66, 77, 79, 80, 84, 88,255, 69, 72,255, 65, 66, 67, 68, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 61, 62,255, 73, 79,255, 72, 79,255, 60, 62, 65, 66, 77, 79, 80, 84, 88,255, 61, 62,255, 72, 79,255, 60, 62, 65, 66, 77, 79, 80, 84, 88,255, 61, 62,255, 73, 79,255, 72, 79, 255, 58, 60, 62, 65, 66, 77, 79, 80, 84, 88,255, 72, 79,255, 65, 66, 79, 84, 88,255, 72, 79,255, 66, 79, 84, 88,255, 84,255, 69,255, 76, 85,255, 65, 72,255, 73, 79, 87,255, 65, 68,255, 76, 78,255, 84,255, 79,255, 65, 87,255, 70, 78,255, 65, 84,255, 69,255, 69, 72,255, 65, 66, 67, 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 71, 82,255, 69,255, 84,255, 78,255, 79, 85,255, 65, 69,255, 69,255, 69, 72,255, 47, 65, 66, 67, 68, 69, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 71, 82,255, 69,255, 84,255, 78,255, 79, 85,255, 65, 69,255, 69,255, 69, 72,255, 65, 66, 67, 68, 69, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 47, 69, 80,255, 69, 80,255, 66, 255, 66,255, 61, 62,255, 73, 79,255, 76, 85,255, 72, 79,255, 47, 60, 62, 77, 79, 80, 84, 88,255, 61, 62,255, 73, 79,255, 76, 85,255, 72, 79,255, 47, 60, 62, 77, 80, 84, 88,255, 47, 80,255, 76, 85,255, 65, 72,255, 73, 79, 87,255, 84,255, 79,255, 65, 87,255, 70, 78,255, 65, 84,255, 69,255, 69, 72,255, 47, 65, 66, 67, 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 65, 68, 69, 73, 80,255, 47, 68, 69, 73, 80, 82,255, 61, 62,255, 68, 78, 84,255, 84,255, 89,255, 65, 87,255, 71, 82,255, 69,255, 73, 84, 255, 78,255, 65, 79,255, 73, 79,255, 70, 82,255, 76, 79, 85,255, 65, 69, 255, 69,255, 69, 72, 84,255, 72, 79,255, 47, 58, 60, 62, 65, 66, 67, 68, 69, 72, 73, 76, 77, 79, 80, 81, 82, 83, 84, 87, 88,255, 65, 79,255, 69, 72, 84,255, 65, 66, 67, 68, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 72, 79,255, 65, 66, 77, 79, 80, 84, 88,255, 69, 73, 80, 82,255, 83,255, 68, 73,255, 65, 68, 73,255, 68,255, 47, 69, 73, 80, 82,255 }; static const unsigned char ag_key_act[] = { 0,3,4,3,4,0,0,4,3,3,0,4,3,4,3,1,4,3,3,3,4,2,3,4,3,3,3,0,3,4,3,0,4,3,2, 3,3,4,3,4,1,4,3,3,4,3,3,4,2,4,3,2,4,0,2,4,3,3,3,4,3,3,4,3,0,4,3,3,3,3, 4,3,3,3,4,2,4,3,3,3,4,3,0,4,3,3,4,3,3,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3, 2,2,2,2,3,4,0,0,4,3,3,2,3,4,3,4,3,3,4,2,3,4,3,0,3,4,3,0,4,2,4,3,4,1,4, 3,3,4,0,3,4,3,3,4,3,3,4,2,4,3,3,4,3,3,3,2,2,2,2,2,2,3,3,2,3,2,2,3,4,3, 4,3,3,3,4,3,3,4,2,3,4,3,3,0,3,4,3,0,4,2,4,3,4,1,4,3,3,4,0,3,4,3,3,4,2, 4,3,3,4,3,3,2,2,2,2,2,2,3,3,3,3,2,2,3,4,3,3,4,2,3,4,3,3,0,3,4,3,0,4,3, 2,3,4,3,4,1,4,3,3,4,0,3,4,3,3,4,2,4,3,3,4,3,3,3,2,2,2,2,2,2,3,3,3,3,2, 2,3,4,3,3,4,2,4,3,3,3,3,2,3,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,4, 3,3,4,3,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,4,3,4,3,3,4,2,3,4,3,0,3, 4,3,0,4,2,4,3,4,1,4,3,3,4,0,3,4,3,3,4,2,4,3,3,4,3,3,2,2,2,2,2,2,3,3,3, 3,2,2,3,4,3,3,4,2,3,4,3,0,3,4,3,4,1,4,3,3,4,0,3,4,3,3,4,2,4,3,3,4,3,3, 2,2,3,2,2,2,3,3,3,3,2,2,3,4,3,3,4,2,3,4,3,0,3,4,3,0,4,2,4,3,4,1,4,3,3, 4,0,3,4,3,3,4,3,3,4,2,4,3,3,4,3,3,2,2,2,2,2,2,3,3,2,3,2,2,3,4,3,3,3,4, 3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,3,4,3, 3,4,3,3,3,4,3,3,3,4,3,2,3,3,3,3,2,3,3,3,3,2,3,4,0,0,4,3,3,4,3,0,4,3,2, 3,2,3,3,2,3,4,0,0,4,3,3,4,3,0,4,3,2,3,2,3,2,3,4,3,3,4,3,3,3,3,3,3,3,3, 3,3,3,3,2,3,4,3,4,0,0,4,3,3,4,3,0,4,3,2,3,3,3,2,3,3,2,3,4,3,3,4,3,3,3, 3,3,3,3,3,3,3,3,2,3,4,0,0,4,3,3,4,3,0,4,2,3,3,3,2,3,3,2,3,4,0,0,4,3,0, 4,2,3,3,3,3,3,3,2,3,4,0,0,4,3,3,4,3,0,4,3,2,3,3,3,2,3,3,2,3,4,3,0,4,3, 3,3,2,3,4,3,0,4,3,3,2,3,4,3,4,3,4,3,3,4,2,3,4,3,0,3,4,3,0,4,3,2,4,3,4, 1,4,3,3,4,0,3,4,3,3,4,2,4,3,3,4,3,3,2,2,2,2,2,2,3,3,3,3,2,2,3,4,3,3,4, 2,4,2,4,2,4,3,3,4,3,3,4,2,4,3,3,4,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,4,3,3, 4,2,4,2,4,2,4,3,3,4,3,3,4,2,4,3,3,4,3,3,3,3,3,3,2,3,3,2,3,2,2,3,4,3,3, 3,4,3,3,4,3,4,3,4,0,0,4,3,3,4,3,3,4,3,0,4,3,2,3,2,3,2,2,3,4,0,0,4,3,3, 4,3,3,4,3,0,4,3,2,3,2,2,2,3,4,3,3,4,3,3,4,2,3,4,3,0,3,4,3,4,1,4,3,3,4, 0,3,4,3,3,4,2,4,3,3,4,3,3,3,2,2,3,2,2,2,3,3,3,3,2,2,3,4,3,3,3,3,3,4,3, 3,3,3,3,3,4,0,0,4,3,3,0,4,3,4,1,4,3,3,4,3,3,4,2,4,3,2,4,2,4,3,3,4,3,3, 4,3,0,4,3,3,3,4,3,3,4,2,4,3,3,3,4,3,0,4,3,3,2,3,2,2,3,2,3,3,2,2,2,2,2, 3,2,2,2,3,3,4,3,3,4,3,3,3,4,3,3,3,3,3,3,2,3,3,3,3,2,3,4,3,0,4,3,3,3,3, 3,2,3,4,3,3,3,3,4,3,4,3,3,4,3,3,3,4,3,4,3,3,3,3,3,4 }; static const unsigned short ag_key_parm[] = { 0, 63, 0, 67, 0,324,326, 0,268,263,312, 0,269, 0,329,282, 0,283, 293,284, 0, 0,270, 0,289,291,292,294,271, 0,297,298, 0,286, 0,285, 316, 0,300, 0,302, 0,303,272, 0,273,309, 0, 0, 0,308, 0, 0,306, 0, 0,299,310,274, 0,260,314, 0,275,318, 0,261,276,321,317, 0,278, 320,328, 0, 0, 0,279,280,327, 0,305,301, 0,295,281, 0, 63,296, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,313, 0, 0,277, 0, 0, 0, 0,319, 0,324,326, 0, 63,296, 0,322, 0,285, 0,283,284, 0, 0,270, 0,292,294,271, 0,297,298, 0, 0, 0,300, 0,302, 0,303,272, 0,306, 273, 0,276,321, 0,278,328, 0, 0, 0,279,280, 0, 63,268,269, 0, 0, 0, 0, 0, 0,274,275, 0,277, 0, 0,281, 0,294, 0, 63,293,295, 0, 283,284, 0, 0,270, 0,291,292,294,271, 0,297,298, 0, 0, 0,300, 0, 302, 0,303,272, 0,306,273, 0,278,328, 0, 0, 0,279,280, 0,268,269, 0, 0, 0, 0, 0, 0,274,275,276,277, 0, 0,281, 0,283,284, 0, 0, 270, 0,291,292,294,271, 0,297,298, 0,286, 0,285, 0,300, 0,302, 0, 303,272, 0,306,273, 0,278,328, 0, 0, 0,279,280, 0, 63,268,269, 0, 0, 0, 0, 0, 0,274,275,276,277, 0, 0,281, 0,308,309, 0, 0, 0, 63,312,289,316, 0,317,320, 0,279,280, 0, 63,268,269,270,271,272,273, 274,313,275,276,277,278, 0,281, 0, 63,301, 0,293,295, 0,279,280, 0, 268,269,270,271,272,273,274,313,275,276,277,278, 0,281, 0,301, 0,283, 284, 0, 0,270, 0,292,294,271, 0,297,298, 0, 0, 0,300, 0,302, 0, 303,272, 0,306,273, 0,278,328, 0, 0, 0,279,280, 0,268,269, 0, 0, 0, 0, 0, 0,274,275,276,277, 0, 0,281, 0,283,284, 0, 0,270, 0, 292,294,271, 0,300, 0,302, 0,303,272, 0,306,273, 0,278,328, 0, 0, 0,279,280, 0,268,269, 0, 0,297, 0, 0, 0,274,275,276,277, 0, 0, 281, 0,283,284, 0, 0,270, 0,292,294,271, 0,297,298, 0, 0, 0,300, 0,302, 0,303,272, 0,306,273, 0,276,321, 0,278,328, 0, 0, 0,279, 280, 0,268,269, 0, 0, 0, 0, 0, 0,274,275, 0,277, 0, 0,281, 0, 279,280,327, 0, 63,268,269,270,271,272,273,274,313,275,276,277,278, 0, 281, 0,279,280,327, 0,268,269,270,271,272,273,274,275,276,277,278, 0, 281, 0,329,269, 0,299,310,274, 0,279,280,327, 0,268, 0,270,271,272, 273, 0,275,276,277,278, 0,281, 0,324,326, 0,260,314, 0,305,301, 0, 63, 0,322, 0,318,261, 0,319, 0,324,326, 0,260,314, 0,305,301, 0, 63, 0,322, 0,261, 0,319, 0,279,280, 0, 63,268,269,270,271,272,273, 274,275,276,277,278, 0,281, 0,245, 0,324,326, 0,260,314, 0,305,301, 0, 63, 0,322,263,282, 0,318,261, 0,319, 0,279,280, 0,268,269,270, 271,272,273,274,275,276,277,278, 0,281, 0,324,326, 0,260,314, 0,305, 301, 0, 0,322,263,282, 0,318,261, 0,319, 0,324,326, 0,305,301, 0, 0,322,263,282,260,318,261, 0,319, 0,324,326, 0,260,314, 0,305,301, 0,296, 0,322,263,282, 0,318,261, 0,319, 0,305,301, 0,263,282,318, 0,319, 0,305,301, 0,282,318, 0,319, 0,305, 0,286, 0,283,284, 0, 0,270, 0,292,294,271, 0,297,298, 0,286, 0, 0,300, 0,302, 0,303, 272, 0,306,273, 0,278,328, 0, 0, 0,279,280, 0,268,269, 0, 0, 0, 0, 0, 0,274,275,276,277, 0, 0,281, 0,273,309, 0, 0, 0, 0, 0, 0, 0,276,317, 0,278,320, 0, 0, 0,279,280, 0, 63,268,269,270,271, 316,272, 0,274,275, 0,277, 0, 0,281, 0,273,309, 0, 0, 0, 0, 0, 0, 0,276,317, 0,278,320, 0, 0, 0,279,280, 0,268,269,270,271,316, 272, 0,274,275, 0,277, 0, 0,281, 0, 63,316,317, 0,316,317, 0,329, 0,282, 0,324,326, 0,260,314, 0,261,317, 0,305,301, 0, 63, 0,322, 0,318, 0, 0,319, 0,324,326, 0,260,314, 0,261,317, 0,305,301, 0, 63, 0,322, 0, 0, 0,319, 0, 63,317, 0,283,284, 0, 0,270, 0,292, 294,271, 0,300, 0,302, 0,303,272, 0,306,273, 0,278,328, 0, 0, 0, 279,280, 0, 63,268,269, 0, 0,297, 0, 0, 0,274,275,276,277, 0, 0, 281, 0,312,289,316,308,317, 0, 63,289,316,309,317,320, 0,324,326, 0, 268,263,312, 0,269, 0,282, 0,289,271, 0,273,309, 0, 0, 0,308, 0, 0, 0, 0,299,274, 0,260,314, 0,275,318, 0,261,276,317, 0,278,320, 0, 0, 0,279,280,327, 0,305,301, 0, 63,296, 0,322, 0, 0,270, 0, 316,272, 0, 0, 0, 0, 0,277, 0, 0, 0,281,319, 0,299,274, 0,279, 280,327, 0,268,269,270,271,272,273, 0,275,276,277,278, 0,281, 0,305, 301, 0,263,282,260,318,261, 0,319, 0,316,309,317,320, 0,327, 0,289, 308, 0,312,289,308, 0,289, 0, 63,316,309,317,320, 0 }; static const unsigned short ag_key_jmp[] = { 0, 0, 0, 2, 0, 0, 0, 0, 10, 16, 0, 0, 22, 0, 18, 12, 0, 24, 26, 28, 0, 17, 40, 0, 46, 49, 55, 0, 61, 0, 68, 0, 0, 65, 30, 72, 74, 0, 81, 0, 38, 0, 83, 86, 0, 95, 98, 0, 45, 0, 90, 48, 0, 0, 50, 0,102,106,114, 0,120,124, 0,129, 0, 0,134,137,143,151, 0,161, 163,170, 0, 71, 0,174,181,188, 0,196, 0, 0,199,203, 0, 4, 6, 5, 8, 8, 14, 21, 24, 33, 40, 42, 53, 56, 60,126, 63, 66,156, 75, 77, 81, 84,206, 0, 0, 0, 0,209,211,111,213, 0,215, 0,231,233, 0,121,245, 0,251, 0,257, 0,261, 0, 0,131, 0,265, 0,136, 0,267,270, 0, 0, 274, 0,293,299, 0,312,314, 0,149, 0,318,325, 0,218,220,227,124,127, 134,138,140,143,280,287,146,307,152,154,332, 0,336, 0,338,340,344, 0, 360,362, 0,180,374, 0,380,386, 0,392, 0,396, 0, 0,191, 0,400, 0, 196, 0,402,405, 0, 0,409, 0,440,442, 0,206, 0,446,453, 0,349,356, 183,186,194,198,200,203,415,422,428,435,209,211,460, 0,477,479, 0,230, 491, 0,497,503, 0,509, 0,516, 0, 0,513,241,520, 0,522, 0,248, 0, 524,527, 0, 0,531, 0,562,564, 0,258, 0,568,575, 0,464,466,473,233, 236,244,250,252,255,537,544,550,557,261,263,582, 0,602,607, 0,283, 0, 586,588,590,594,286,613,619, 0,697,704, 0,628,630,637,641,648,653,658, 665,672,675,681,688,693,296,711, 0,715,717, 0,719,723, 0,795,802, 0, 728,735,739,746,751,756,763,770,773,779,786,791,321,809, 0,813, 0,826, 828, 0,341,840, 0,846, 0,852, 0,856, 0, 0,351, 0,860, 0,356, 0, 862,865, 0, 0,869, 0,900,902, 0,366, 0,906,913, 0,815,822,344,347, 354,358,360,363,875,882,888,895,369,371,920, 0,935,937, 0,390,949, 0, 955, 0,961, 0,971, 0,400, 0,973,976, 0, 0,980, 0,1011,1013, 0, 410, 0,1017,1024, 0,924,931,393,396,965,402,404,407,986,993,999,1006, 413,415,1031, 0,1046,1048, 0,434,1060, 0,1066, 0,1072, 0,1076, 0, 0,444, 0,1080, 0,449, 0,1082,1085, 0, 0,1089, 0,1108,1114, 0, 1127,1129, 0,462, 0,1133,1140, 0,1035,1042,437,440,447,451,453,456, 1095,1102,459,1122,465,467,1147, 0,1220,1227,1234, 0,1151,1153,1160, 1164,1171,1176,1181,1188,1195,1198,1204,1211,1216,486,1242, 0,1310,1317, 1324, 0,1246,1253,1257,1264,1269,1274,1281,1288,1294,1301,1306,506,1332, 0,1343,1347, 0,1374,1378,1386, 0,1414,1421,1428, 0,1336,524,1350, 1357,1362,1367,527,1392,1398,1405,1410,531,1436, 0, 0, 0, 0,1444,1448, 0,1456, 0, 0,1440,549,1442,552,1450,1452,555,1459, 0, 0, 0, 0, 1466,1470, 0,1476, 0, 0,1462,567,1464,570,1472,573,1479, 0,1548,1555, 0,1482,1484,1491,1495,1502,1507,1512,1519,1526,1532,1539,1544,584,1562, 0,1566, 0, 0, 0, 0,1577,1581, 0,1589, 0, 0,1568,604,1570,1572, 1575,607,1583,1585,610,1592, 0,1659,1666, 0,1595,1602,1606,1613,1618, 1623,1630,1637,1643,1650,1655,624,1673, 0, 0, 0, 0,1684,1688, 0,1696, 0, 0,641,1677,1679,1682,644,1690,1692,647,1699, 0, 0, 0, 0,1720, 0, 0,660,1702,1704,1707,1709,1714,1716,663,1723, 0, 0, 0, 0,1735, 1739, 0,1747, 0, 0,1726,676,1728,1730,1733,679,1741,1743,682,1750, 0, 1760, 0, 0,1753,1756,1758,696,1763, 0,1770, 0, 0,1766,1768,705,1773, 0,1776, 0,1780, 0,1795,1797, 0,717,1809, 0,1815, 0,1821, 0,1828, 0, 0,1825,727, 0,1832, 0,733, 0,1834,1837, 0, 0,1841, 0,1872, 1874, 0,743, 0,1878,1885, 0,1784,1791,720,723,730,735,737,740,1847, 1854,1860,1867,746,748,1892, 0,1934,1937, 0,767, 0,770, 0,772, 0, 1954,1960, 0,1970,1972, 0,779, 0,1979,1986, 0,1896,1898,1905,1909, 1916,1921,1929,774,1941,1948,776,1965,782,784,1993, 0,2033,2036, 0,803, 0,806, 0,808, 0,2053,2059, 0,2069,2071, 0,815, 0,2078,2085, 0, 1997,2004,2008,2015,2020,2028,810,2040,2047,812,2064,818,820,2092, 0, 2096,2098,2106, 0,2112,2120, 0,2126, 0,2131, 0, 0, 0, 0,2137,2141, 0,2145,2148, 0,2153, 0, 0,2133,849,2135,852,2143,855,858,2156, 0, 0, 0, 0,2163,2167, 0,2169,2172, 0,2177, 0, 0,2159,870,2161,873, 876,879,2180, 0,2183,2185, 0,2204,2206, 0,893,2218, 0,2224, 0,2230, 0,2240, 0,903, 0,2242,2245, 0, 0,2249, 0,2280,2282, 0,913, 0, 2286,2293, 0,2191,2193,2200,896,899,2234,905,907,910,2255,2262,2268,2275, 916,918,2300, 0,2304,2306,2310,2318,2325, 0,2331,2333,2337,2345,2353, 2359, 0, 0, 0, 0,2374,2380, 0, 0,2382, 0,958, 0,2391,2394, 0, 2416,2419, 0,965, 0,2411,968, 0,970, 0,2423,2427, 0,2433,2437, 0, 2439, 0, 0,2444,2447,2453, 0,2463,2465, 0,988, 0,2472,2479,2486, 0, 2494, 0, 0,2368,2370,951,2372,954,960,2384,962,2398,2406,973,975,978, 981,984,2458,991,993,997,2497,2501, 0,2539,2543, 0,2571,2578,2585, 0, 2504,2511,2515,2522,2527,2532,1022,2549,2555,2562,2567,1025,2593, 0,2613, 0, 0,2597,2600,2602,2607,2609,1043,2616, 0,2619,2627,2635,2641, 0, 2650, 0,2659,2663, 0,2670,2672,2676, 0,2683, 0,2687,2689,2697,2705, 2711, 0 }; static const unsigned short ag_key_index[] = { 1, 3, 87, 0, 3, 3,114, 0,119,157,174, 1, 0,176, 0,214,266, 1, 214, 0,214,288,288,288,288,288,288,288,288,288,288,288,288,288,288, 0, 299, 1, 1, 1, 1,315, 1,318,299,324, 0, 0, 0, 0,339, 1, 0,374, 374,374,324, 0, 0, 0,418,374, 0,470, 1, 0,374,374,214,490,510,535, 0, 0,374,324, 0, 0,339,299,324,299,324,558,576,576,587,602,587,587, 587,613,613,324,627,627,627,650,587,666,627,685,699,685,708, 0, 0,299, 490,627,374,374,374,713, 0, 0,299,324,715,751,751,418,324,685, 0,685, 787,823, 0,374, 0,510, 1, 0, 1, 0,838,842,845, 0, 0, 0, 0,324, 324,847, 0, 0,613, 0,558,861,861,576,882,861,576,882,602, 0, 0, 0, 0,587,587,587,627,587,587,587,587,587,627,587,587,627,299,324,299,324, 299,299,324,890,890,890,838, 0,921,324, 0, 0,921,418, 0,685,685, 0, 823, 0, 0, 1, 0,938,510,288,944, 0,1000,1029,299,324, 0, 0, 0, 0,861,882,882, 0, 0,1046,650,708,699, 0, 0,418,324, 0,1054,1059, 1, 1, 1, 0, 0, 0,1061,1064,1068, 0, 0,510,842,613,613, 0, 0, 838,842,1070,842,1054, 0,510, 0, 0,324,324,324,938,510, 0,1059, 0, 0, 0, 0,510,324,510 }; static const unsigned char ag_key_ends[] = { 42,0, 47,0, 42,0, 61,0, 61,0, 68,82,69,83,83,0, 68,0, 83,69,68,0, 69,0, 76,0, 69,0, 83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 84,65,0, 67,76,65,82,69,0, 83,65,66,76,69,0, 79,82,68,0, 83,69,0, 66,76,69,0, 70,0, 84,69,82,78,65,76,0, 79,0, 76,84,0, 79,82,68,0, 84,73,65,76,0, 69,82,0, 85,80,84,0, 66,69,76,0, 84,69,82,65,76,76,89,0, 78,71,73,78,84,0, 78,85,83,0, 68,0, 79,84,0, 70,83,69,84,0, 85,83,0, 73,78,84,69,82,0, 79,67,69,68,85,82,69,0, 66,76,73,67,0, 87,79,82,68,0, 76,0, 78,84,82,65,78,84,0, 85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, 69,78,0, 73,76,69,0, 82,68,0, 79,82,0, 42,0, 61,0, 61,0, 79,70,0, 42,0, 68,68,82,69,83,83,0, 89,84,69,0, 76,0, 83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 83,65,66,76,69,0, 79,82,68,0, 66,76,69,0, 79,0, 76,84,0, 79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 73,78,84,69,82,0, 79,67,69,68,85,82,69,0, 87,79,82,68,0, 76,0, 85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 79,0, 42,0, 65,83,69,0, 72,73,76,69,0, 68,68,82,69,83,83,0, 89,84,69,0, 76,0, 83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 67,76,65,82,69,0, 83,65,66,76,69,0, 79,82,68,0, 66,76,69,0, 79,0, 76,84,0, 79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 76,0, 85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 42,0, 68,68,82,69,83,83,0, 89,84,69,0, 76,0, 83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 67,76,65,82,69,0, 83,65,66,76,69,0, 79,82,68,0, 83,69,0, 66,76,69,0, 70,0, 79,0, 76,84,0, 79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 76,0, 85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 42,0, 84,0, 65,84,65,0, 88,84,69,82,78,65,76,0, 84,73,65,76,0, 69,82,85,80,84,0, 85,66,76,73,67,0, 69,69,78,84,82,65,78,84,0, 42,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, 87,79,82,68,0, 87,79,82,68,0, 78,84,69,71,69,82,0, 79,78,71,73,78,84,0, 79,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 42,0, 79,0, 65,83,69,0, 72,73,76,69,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, 87,79,82,68,0, 87,79,82,68,0, 78,84,69,71,69,82,0, 79,78,71,73,78,84,0, 79,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 79,0, 68,68,82,69,83,83,0, 89,84,69,0, 76,0, 83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 83,65,66,76,69,0, 79,82,68,0, 66,76,69,0, 79,0, 76,84,0, 79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 76,0, 85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 68,68,82,69,83,83,0, 89,84,69,0, 76,0, 83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 83,65,66,76,69,0, 79,82,68,0, 78,65,66,76,69,0, 79,0, 76,84,0, 79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 76,0, 85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 68,68,82,69,83,83,0, 89,84,69,0, 76,0, 83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 83,65,66,76,69,0, 79,82,68,0, 66,76,69,0, 79,0, 76,84,0, 79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 73,78,84,69,82,0, 79,67,69,68,85,82,69,0, 87,79,82,68,0, 76,0, 85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 42,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, 87,79,82,68,0, 87,79,82,68,0, 78,84,69,71,69,82,0, 79,78,71,73,78,84,0, 79,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, 79,82,68,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, 87,79,82,68,0, 87,79,82,68,0, 78,84,69,71,69,82,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, 79,82,68,0, 68,68,82,69,83,83,0, 83,69,68,0, 84,69,0, 72,65,82,73,78,84,0, 87,79,82,68,0, 87,79,82,68,0, 78,84,69,71,69,82,0, 66,69,76,0, 84,69,82,65,76,76,89,0, 78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, 79,82,68,0, 42,0, 61,0, 78,85,83,0, 68,0, 82,0, 76,85,83,0, 69,78,0, 79,82,0, 42,0, 61,0, 78,85,83,0, 68,0, 76,85,83,0, 69,78,0, 79,82,0, 42,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, 87,79,82,68,0, 87,79,82,68,0, 78,84,69,71,69,82,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 39,0, 42,0, 61,0, 78,68,0, 89,0, 78,85,83,0, 68,0, 82,0, 76,85,83,0, 69,78,0, 79,82,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, 87,79,82,68,0, 87,79,82,68,0, 78,84,69,71,69,82,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 61,0, 78,68,0, 89,0, 78,85,83,0, 68,0, 82,0, 76,85,83,0, 69,78,0, 79,82,0, 61,0, 78,68,0, 89,0, 73,78,85,83,0, 82,0, 76,85,83,0, 69,78,0, 79,82,0, 61,0, 61,0, 78,68,0, 89,0, 78,85,83,0, 68,0, 82,0, 76,85,83,0, 69,78,0, 79,82,0, 78,68,0, 89,0, 82,0, 69,78,0, 79,82,0, 89,0, 82,0, 69,78,0, 79,82,0, 72,69,78,0, 76,83,69,0, 68,68,82,69,83,83,0, 89,84,69,0, 76,0, 83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 83,65,66,76,69,0, 79,82,68,0, 83,69,0, 66,76,69,0, 79,0, 76,84,0, 79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 76,0, 85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 42,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, 87,79,82,68,0, 88,84,69,82,78,65,76,0, 87,79,82,68,0, 69,82,0, 85,80,84,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 73,78,84,69,82,0, 66,76,73,67,0, 87,79,82,68,0, 76,0, 78,84,82,65,78,84,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, 87,79,82,68,0, 88,84,69,82,78,65,76,0, 87,79,82,68,0, 69,82,0, 85,80,84,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 73,78,84,69,82,0, 66,76,73,67,0, 87,79,82,68,0, 76,0, 78,84,82,65,78,84,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 42,0, 88,84,69,82,78,65,76,0, 85,66,76,73,67,0, 88,84,69,82,78,65,76,0, 85,66,76,73,67,0, 65,83,69,68,0, 89,0, 42,0, 61,0, 78,85,83,0, 68,0, 82,0, 85,83,0, 66,76,73,67,0, 69,78,0, 79,82,0, 42,0, 61,0, 78,85,83,0, 68,0, 85,83,0, 66,76,73,67,0, 69,78,0, 79,82,0, 42,0, 85,66,76,73,67,0, 42,0, 68,68,82,69,83,83,0, 89,84,69,0, 76,0, 83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 83,65,66,76,69,0, 79,82,68,0, 78,65,66,76,69,0, 79,0, 76,84,0, 79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 76,0, 85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 84,0, 65,84,65,0, 88,84,69,82,78,65,76,0, 78,73,84,73,65,76,0, 85,66,76,73,67,0, 42,0, 65,84,65,0, 88,84,69,82,78,65,76,0, 78,84,69,82,85,80,84,0, 85,66,76,73,67,0, 69,69,78,84,82,65,78,84,0, 42,0, 61,0, 61,0, 68,82,69,83,83,0, 68,0, 69,0, 72,65,82,73,78,84,0, 84,65,0, 79,82,68,0, 88,84,69,82,78,65,76,0, 87,79,82,68,0, 84,73,65,76,0, 69,82,0, 85,80,84,0, 66,69,76,0, 78,71,73,78,84,0, 78,85,83,0, 68,0, 70,83,69,84,0, 85,83,0, 73,78,84,69,82,0, 66,76,73,67,0, 87,79,82,68,0, 76,0, 78,84,82,65,78,84,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, 69,78,0, 79,82,68,0, 79,82,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, 87,79,82,68,0, 87,79,82,68,0, 78,84,69,71,69,82,0, 66,69,76,0, 78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, 79,82,68,0, 78,68,0, 89,0, 73,78,85,83,0, 82,0, 76,85,83,0, 69,78,0, 79,82,0, 88,84,69,82,78,65,76,0, 78,84,69,82,85,80,84,0, 85,66,76,73,67,0, 69,69,78,84,82,65,78,84,0, 84,82,85,67,84,85,82,69,0, 65,84,65,0, 78,73,84,73,65,76,0, 84,0, 65,84,65,0, 78,73,84,73,65,76,0, 65,84,65,0, 42,0, 88,84,69,82,78,65,76,0, 78,84,69,82,85,80,84,0, 85,66,76,73,67,0, 69,69,78,84,82,65,78,84,0, }; #define AG_TCV(x) (((int)(x) >= -1 && (int)(x) <= 255) ? ag_tcv[(x) + 1] : 0) static const unsigned short ag_tcv[] = { 103,103,249,249,249,103,249,249,249,249, 62, 62, 62, 62, 62,249,249,249, 249,249,249,249,249,249,249,249,249,103,249,249,249,249,249, 62,249,249, 249,225,249,249,243,259,258,307,262,290,330,267,315,228,228,250,250,250, 250,250,250,251,251,304,264,325,265,323,249,311,252,227,252,223,253,252, 254,233,254,254,254,254,254,254,230,254,230,254,254,254,254,254,254,254, 254,254,249,249,249,249,255,311,252,227,252,223,253,252,254,233,254,254, 254,254,254,254,230,254,230,254,254,254,254,254,254,254,254,254,249,249, 249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, 249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, 249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, 249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, 249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, 249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, 249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, 249,249,249,249,249 }; #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 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; #ifndef GET_INPUT #define GET_INPUT ((PCB).input_code = getchar()) #endif static int ag_look_ahead(void) { if ((PCB).rx < (PCB).fx) { return CONVERT_CASE((PCB).lab[(PCB).rx++]); } GET_INPUT; (PCB).fx++; return CONVERT_CASE((PCB).lab[(PCB).rx++] = (PCB).input_code); } static void ag_get_key_word(int ag_k) { int save_index = (PCB).rx; const unsigned char *sp; int ag_ch; while (1) { switch (ag_key_act[ag_k]) { case ag_cf_end_key: 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 + ag_look_ahead()]) goto ag_fail; (PCB).rx--; (PCB).token_number = (plm_token_type) ag_key_pt[ag_k1 + 1]; return; } } while (ag_look_ahead() == ag_ch); goto ag_fail; case ag_end_key: sp = ag_key_ends + ag_key_jmp[ag_k]; do { if ((ag_ch = *sp++) == 0) { (PCB).token_number = (plm_token_type) ag_key_parm[ag_k]; return; } } while (ag_look_ahead() == ag_ch); case ag_no_match_key: ag_fail: (PCB).rx = save_index; 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 + (ag_ch = ag_look_ahead())]) break; save_index = --(PCB).rx; (PCB).token_number = (plm_token_type) ag_key_pt[ag_k1+1]; break; } case ag_set_key: save_index = (PCB).rx; (PCB).token_number = (plm_token_type) ag_key_parm[ag_k]; case ag_jmp_key: ag_k = ag_key_jmp[ag_k]; ag_ch = ag_look_ahead(); break; case ag_accept_key: (PCB).token_number = (plm_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 + ag_look_ahead()]) (PCB).rx = save_index; else { (PCB).rx--; (PCB).token_number = (plm_token_type) ag_key_pt[ag_k1+1]; } return; } default: /* not reachable; here to suppress compiler warnings */ goto ag_fail; } if (ag_ch <= 255) while (ag_key_ch[ag_k] < ag_ch) ag_k++; if (ag_ch > 255 || ag_key_ch[ag_k] != ag_ch) { (PCB).rx = save_index; return; } } } #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 = 0; while (ag_k < (PCB).rx) { int ag_ch = (PCB).lab[ag_k++]; switch (ag_ch) { 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++; } } ag_k = 0; while ((PCB).rx < (PCB).fx) (PCB).lab[ag_k++] = (PCB).lab[(PCB).rx++]; (PCB).fx = ag_k; (PCB).rx = 0; } 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 = (plm_token_type) (PCB).drt; (PCB).ssx = (PCB).dssx; (PCB).sn = (PCB).dsn; (PCB).drt = -1; } static const unsigned short ag_tstt[] = { 254,253,252,233,230,227,223,63,62,0,58,256,257, 330,325,323,315,311,307,304,290,267,265,264,262,259,258,255,254,253,252,251, 250,249,243,233,230,228,227,225,223,67,62,0,65,66, 63,62,0,58, 254,253,252,233,230,227,223,0,57,60,102,193,266, 330,325,323,315,311,307,304,290,267,265,264,262,259,258,255,254,253,252,251, 250,249,243,233,230,228,227,225,223,62,0, 67,0, 330,326,325,324,323,322,315,307,304,296,290,267,265,264,262,259,258,255,254, 253,252,251,250,233,230,228,227,225,223,63,62,0,58,256,257, 304,0,154, 285,103,0,20, 328,321,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275, 274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,63,62,0,58, 256,257, 294,0,15,126,214, 103,63,62,0,58,256,257, 103,0, 295,293,264,254,253,252,233,230,227,223,63,62,0,58,256,257, 264,0,85, 328,306,303,302,300,298,297,294,292,291,284,283,281,280,279,278,277,276,275, 274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10, 11,13,14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81, 82,85,88,89,90,91,92,93,94,99,100,104,105,113,114,115,116,121,122,123, 124,125,126,127,128,129,130,132,134,135,137,147,151,152,153,169,172,174, 207,210,211,214,220,266, 328,306,303,302,300,298,297,294,292,291,286,285,284,283,281,280,279,278,277, 276,275,274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,103, 63,62,0,58,256,257, 259,254,253,252,233,230,227,223,63,62,0,58,256,257, 328,306,303,302,300,298,297,294,292,291,284,283,281,280,279,278,277,276,275, 274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10, 11,13,14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81, 82,85,88,89,90,91,92,93,94,99,100,104,105,113,114,115,116,121,122,123, 124,125,126,127,128,129,130,132,134,135,137,147,151,152,153,169,172,174, 207,210,211,214,220,266, 259,254,253,252,233,230,227,223,0,60,69,117,118,119,120,138,139,173,175,219, 221,266, 328,306,303,302,300,298,297,294,292,291,284,283,281,280,279,278,277,276,275, 274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10, 11,13,14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81, 82,85,88,89,90,91,92,93,94,99,100,104,105,113,114,115,121,122,123,124, 125,126,127,128,129,130,132,134,135,137,147,151,152,153,169,172,174,207, 210,211,214,220,266, 320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, 320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, 320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, 320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, 320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, 320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, 320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, 320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, 320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, 320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, 320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, 320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, 320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, 320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, 259,0,69,191, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,264, 262,259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 264,63,62,0,58,256,257, 264,63,62,0,58,256,257, 264,63,62,0,58,256,257, 259,63,62,0,58,256,257, 301,63,62,0,58,256,257, 254,253,252,233,230,227,223,63,62,0,58,256,257, 295,293,264,254,253,252,233,230,227,223,0,9,54,60,85,98,156,157,266, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,264, 262,259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29, 34,38,39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,85,87,94,99,109, 131,132,133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217, 218,240,266,287,288,331, 264,0,85, 264,0,85, 264,0,85, 259,0,69, 301,0,53, 254,253,252,233,230,227,223,63,62,0,58,256,257, 290,0,112, 328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,129, 130,132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, 328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,129, 130,132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, 328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,129, 130,132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, 266,287,288,331, 254,253,252,233,230,227,223,0,60,266, 254,253,252,233,230,227,223,0,60,98,266, 265,0,83, 328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273, 272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,14,15, 16,18,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,88,89,90, 91,92,93,94,99,100,104,105,106,107,121,122,123,124,125,126,127,130,132, 134,137,147,151,152,153,169,172,174,210,211,214,216,220,266, 328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130, 132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, 304,267,259,0,69,87,154,190,192,215, 321,0,43, 264,254,253,252,233,230,227,223,63,62,0,58,256,257, 264,254,253,252,233,230,227,223,0,60,136,266, 328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,130,132, 134,135,151,152,153,169,172,174,210,211,214,220,266, 328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130, 132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, 328,306,303,302,300,298,297,294,292,291,284,283,281,280,279,278,277,276,275, 274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10, 11,13,14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81, 82,85,88,89,90,91,92,93,94,99,100,104,105,113,114,115,121,122,123,124, 125,126,127,128,129,130,132,134,135,137,147,151,152,153,169,172,174,207, 210,211,214,220,266, 330,327,313,311,307,281,280,279,278,277,276,275,274,273,272,271,270,269,268, 267,262,259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256, 257, 327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,0,69,78,79, 80,197, 329,310,299,0,5,31,33, 254,253,252,233,230,227,223,0,60,140,221,266, 290,264,0,85,112, 328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130, 132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, 266,287,288,331, 267,0,87, 265,0,83, 301,0,53,170, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, 266,287,288,331, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, 266,287,288,331, 330,326,325,324,323,322,319,318,315,314,307,305,301,290,267,265,264,262,261, 260,258,253,252,251,250,233,228,227,225,223,63,62,0,222,232,235,236, 330,326,325,324,323,322,319,315,314,307,305,301,290,267,265,264,262,261,260, 258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,229,232,235,236, 330,326,325,324,323,322,319,315,314,307,305,301,290,267,265,264,262,261,260, 258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,226,229,232,235, 236, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,325,323,315,311,307,304,290,267,265,264,262,259,258,255,254,253,252,251, 250,249,245,243,233,230,228,227,225,223,62,0,246,247,248, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,254,253,252,233, 230,227,223,63,62,0,58,256,257, 281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,254,253,252,233, 230,227,223,63,62,0,58,256,257, 330,326,325,324,323,322,319,318,315,314,307,305,301,290,282,265,264,263,262, 261,260,258,63,62,0,58,256,257, 330,326,325,324,323,322,319,318,315,314,307,305,301,290,282,265,264,263,262, 261,260,258,63,62,0,58,256,257, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, 266,287,288,331, 281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,254,253,252,233, 230,227,223,0,1,7,11,16,26,29,34,39,42,45,46,49,50,55,60,69,94,99,132, 266, 281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,254,253,252,233, 230,227,223,0,1,7,11,16,26,29,34,39,42,45,46,49,50,55,60,69,94,99,132, 266, 311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,259,254,253, 252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,39,42,45,46,49, 50,55,59,60,61,69,87,94,99,109,132,162,163,164,165,176,177,196,204,205, 266,287,288,331, 315,314,307,0,36,155,194,195, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,326,325,324,323,322,265,262,261,260,0,22,32,35,37,41,72,73,74,83,184, 208,209,240, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,39,42, 45,46,49,50,55,59,60,61,69,73,74,76,77,87,94,99,109,132,162,163,164,165, 176,177,183,196,204,205,212,213,217,218,240,266,287,288,331, 267,259,0,69,87,190,192,215, 263,0,2,75, 296,0,3, 319,318,0,40,56,181, 264,0,85, 251,250,228,0,101,162,163,164,165,331, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,327,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267, 262,259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 281,280,279,278,277,276,275,274,273,272,271,270,269,268,254,253,252,233,230, 227,223,0,1,7,11,16,26,29,34,39,42,45,46,49,50,55,60,94,99,132,266, 328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130, 132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, 328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130, 132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, 328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130, 132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, 305,0,52, 264,0,85, 264,259,0,68,69,85, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, 266,287,288,331, 286,0,17, 328,306,303,302,300,298,297,294,292,286,284,283,281,280,279,278,277,276,275, 274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0, 328,306,303,302,300,298,297,294,292,286,284,283,281,280,279,278,277,276,275, 274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0, 328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273, 272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,14,15, 16,18,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,88,89,90, 91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,130,132,134,151, 152,153,169,172,174,210,211,214,216,220,266, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,70,73,74,76,77,84,87,94,99,109,131,132, 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, 266,287,288,331, 267,0,87,190,192, 254,253,252,233,230,227,223,0,60,189,266, 267,0,87,190, 320,317,316,309,281,280,279,278,277,276,275,274,273,272,271,270,269,268,264, 259,63,62,0,58,256,257, 320,317,316,309,281,280,279,278,277,276,275,274,273,272,271,270,269,268,264, 259,0,69,150,198, 264,0,85, 328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130, 132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, 307,251,250,228,0,59,155,162,163,164,165,196,288,331, 327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,0,1,7,11,16,26, 29,34,39,42,45,46,49,50,51,55,94,145,186, 254,253,252,233,230,227,223,63,62,0,58,256,257, 254,253,252,233,230,227,223,0,60,86,266, 243,63,62,0,58,256,257, 243,0,61,287, 317,316,290,264,63,62,0,58,256,257, 317,316,290,264,0,21,44,141, 329,0,5, 290,258,0,71,112, 259,254,253,252,233,230,227,223,0,60,69,117,118,119,138,139,173,175,219,221, 266, 258,0,71, 254,253,252,233,230,227,223,0,60,266, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, 133,158,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218, 240,266,287,288,331, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,95,99,109,131,132, 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, 266,287,288,331, 282,264,0,6,96,171, 264,0,85, 264,0,85, 330,262,253,251,250,228,0,237, 253,252,251,250,233,228,227,225,223,0,232, 330,326,325,324,323,322,319,318,315,314,307,305,301,290,267,265,264,262,261, 260,258,253,252,251,250,233,228,227,225,223,63,62,0,222,232,235,236, 330,326,325,324,323,322,319,318,317,315,314,307,305,301,290,265,264,262,261, 260,258,253,252,251,250,233,228,227,225,223,63,62,0,222,232, 253,252,251,250,233,228,227,225,223,0,232, 330,326,325,324,323,322,319,315,314,307,305,301,290,267,265,264,262,261,260, 258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,229,232,235,236, 330,326,325,324,323,322,319,317,315,314,307,305,301,290,265,264,262,261,260, 258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,229,232, 253,252,251,250,233,228,227,225,223,0,232, 330,326,325,324,323,322,319,315,314,307,305,301,290,267,265,264,262,261,260, 258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,226,229,232,235, 236, 330,326,325,324,323,322,319,317,315,314,307,305,301,290,265,264,262,261,260, 258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,226,229,232, 330,325,323,315,311,307,304,290,267,265,264,262,259,258,255,254,253,252,251, 250,249,245,233,230,228,227,225,223,62,0,246, 243,0, 258,0,71, 251,250,243,228,0,59,61,109,111,162,163,164,165,196,287,288,331, 251,250,243,228,0,59,61,109,111,162,163,164,165,196,287,288,331, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 258,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,39,42, 45,46,49,50,55,59,60,61,69,73,74,87,94,99,109,132,162,163,164,165,176, 177,196,204,205,212,213,217,218,240,266,287,288,331, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,39,42, 45,46,49,50,55,59,60,61,69,73,74,76,77,87,94,99,109,132,162,163,164,165, 176,177,196,204,205,212,213,217,218,240,266,287,288,331, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, 254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,39,42, 45,46,49,50,55,59,60,61,69,73,74,77,87,94,99,109,132,162,163,164,165, 176,177,196,204,205,212,213,217,218,240,266,287,288,331, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,87,94,99,109,132,162,163, 164,165,176,177,182,183,196,204,205,212,213,217,218,240,266,287,288,331, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,87,94,99,109,132,133,162, 163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,266,287, 288,331, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,87,94,99,109,132,162,163, 164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,266,287,288, 331, 317,258,253,252,251,250,233,228,227,225,223,63,62,0,222,232, 317,258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,229,232, 317,258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,226,229,232, 317,316,258,63,62,0,58,256,257, 258,0,71, 328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273, 272,271,270,269,268,264,254,253,252,233,230,227,223,63,62,0,58,256,257, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,70,73,74,76,77,84,87,94,99,109,131,132, 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, 266,287,288,331, 264,0,85, 264,0,85, 328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273, 272,271,270,269,268,264,254,253,252,233,230,227,223,63,62,0,58,256,257, 328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273, 272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,14,15, 16,18,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,88,89,90, 91,92,93,94,99,100,104,105,108,121,122,123,124,125,126,127,130,132,134, 137,147,151,152,153,169,172,174,210,211,214,220,266, 290,258,0,71,112, 267,0,87,190, 259,0,69,191, 254,253,252,233,230,227,223,0,60,148,149,266, 320,317,316,309,281,280,279,278,277,276,275,274,273,272,271,270,269,268,264, 0,1,7,11,16,26,29,34,39,42,45,46,49,50,55,94,201,202, 258,0,71, 258,0,71, 259,63,62,0,58,256,257, 259,0,69, 317,316,312,308,290,289,264,0,4,12,21,28,44,146,161,178,179,203, 267,0,87, 320,317,316,312,309,308,290,289,264,63,62,0,58,256,257, 320,317,316,309,290,289,264,63,62,0,58,256,257, 254,253,252,233,230,227,223,0,60,221,266, 330,327,326,325,324,323,322,320,319,318,317,316,315,314,312,309,308,307,305, 301,299,296,290,289,282,281,280,279,278,277,276,275,274,273,272,271,270, 269,268,267,265,264,263,262,261,260,259,258,63,62,0,58,256,257, 327,299,281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,0,31,69, 79,144, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,97,99,109,131,132, 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, 266,287,288,331, 264,0,85, 251,250,228,0,239, 251,250,228,0,239, 253,252,251,250,233,228,227,225,223,0,232, 330,326,325,324,323,322,319,318,317,315,314,307,305,301,290,265,264,262,261, 260,258,253,252,251,250,233,228,227,225,223,63,62,0,222,232, 330,326,325,324,323,322,319,317,315,314,307,305,301,290,265,264,262,261,260, 258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,229,232, 330,326,325,324,323,322,319,317,315,314,307,305,301,290,265,264,262,261,260, 258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,226,229,232, 290,258,0,71,112, 290,258,0,71,112, 330,262,261,260,0,35,41,72,73,74,240, 315,314,307,0,36,155,194,195, 319,318,0,40,56,181, 263,0,2,75, 264,0,85, 290,258,0,71,112, 328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273, 272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,14,15, 16,18,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,88,89,90, 91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,130,132,134,151, 152,153,169,172,174,210,211,214,220,266, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, 266,287,288,331, 290,258,0,71,112, 320,317,316,309,264,0,21,30,44,47,166,199,200,206, 327,259,254,253,252,233,230,227,223,0,51,60,69,142,185,186,187,188,189,266, 259,63,62,0,58,256,257, 290,264,259,63,62,0,58,256,257, 259,63,62,0,58,256,257, 259,0,69, 259,0,69, 259,0,69, 308,289,0,12,28,161, 312,308,289,0,4,12,28,161,178,179, 289,0,12,110, 254,253,252,233,230,227,223,0,60,266, 251,250,228,0,59,162,163,164,165,196,288,331, 327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,0,1,7,11,16,26, 29,34,39,42,45,46,49,50,51,55,94,145,186, 317,316,290,264,0,21,44,141, 251,250,228,0, 251,250,228,0, 251,250,243,228,0,59,61,109,162,163,164,165,196,287,288,331, 254,253,252,233,230,227,223,0,60,148,266, 317,316,251,250,228,63,62,0,58,256,257, 317,316,251,250,228,0,101,162,163,164,165,167,168,331, 320,317,316,309,264,63,62,0,58,256,257, 317,316,0,21,44, 320,317,316,309,0,21,30,44,47,166,206, 264,0,85, 327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,0,69,79,144, 254,253,252,233,230,227,223,0,60,143,189,266, 290,258,0,71,112, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, 133,159,160,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217, 218,240,266,287,288,331, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, 133,159,160,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217, 218,240,266,287,288,331, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, 266,287,288,331, 317,316,312,308,290,289,264,0,4,12,21,28,44,146,161,178,179,203, 327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,0,1,7,11,16,26, 29,34,39,42,45,46,49,50,51,55,94,145,186, 290,258,0,71,112, 327,259,254,253,252,233,230,227,223,0,51,60,69,142,185,186,187,189,266, 290,258,0,71,112, 290,258,0,71,112, 258,0,71, 254,253,252,233,230,227,223,0,60,189,266, 327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,0,69,79,144, 330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, 133,159,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218, 240,266,287,288,331, 327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,0,1,7,11,16,26, 29,34,39,42,45,46,49,50,51,55,94,145,186, }; static unsigned const char ag_astt[7723] = { 8,8,8,8,8,8,8,1,1,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,8,1,7,1,1,1,9,5,3,1,1,1,1,1,1,1,7,0,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,5,3,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,9,9,9,9,9,9,9,9,9,9,9,9,1,1,7,1,1,3,1,7,1,1,3,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,1,1,7,1,1,3,1,7,1,3,1,5,1,1, 7,1,1,3,3,7,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,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,1,1,1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,3,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,1,1, 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,1,1, 1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,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,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,1,1,1,1,1,1,1,1,1,1,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,1,1,1,1,3,3,3,1,1,1,1,1,1,1,3,1,1, 1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5, 5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5, 5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5, 5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1, 1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1, 1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5, 5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,1,7,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,1,1,7,1,1, 3,5,1,1,7,1,1,3,5,1,1,7,1,1,3,5,1,1,7,1,1,3,5,1,1,7,1,1,3,5,1,1,7,1,1,3,5, 5,5,5,5,5,5,1,1,7,1,1,3,1,1,1,1,1,1,1,1,1,1,7,1,1,1,2,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,1,1,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,1,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,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,7,3,1,7,3,1,7,3,1,7,1,1,7,3,5,5,5,5,5,5,5,1,1,7,1,1,3,1,5,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,1, 1,1,1,1,1,1,1,3,1,1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,1,1,1,1,1,1,1,1,3,1,1,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,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,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,1,1,1,1,1,1,1,1,1,1,3,1,1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,7,1,1,1,1,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,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,3,1,3, 1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,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,1,1,1,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,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,1,3,1,1,3,3, 1,3,1,3,1,1,1,1,3,3,1,3,1,1,1,1,5,1,1,3,1,1,1,1,5,1,5,5,5,5,5,5,5,5,1,1,7, 1,1,3,8,1,1,1,1,1,1,1,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,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,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,1,1,1,3,3,1,3,3,1,3,1,3,3,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,1,1,1,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,3,1,3,3,3,3,3,3,3,1,1,3,3,1, 3,3,3,3,3,3,1,3,1,1,3,3,1,3,1,3,1,1,1,1,3,3,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,1,1,1,1,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,1,1,1,1,3,3,3,1,1,1,1,1,1,1, 3,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 1,7,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,7,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,1,1,1,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,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3, 1,3,1,1,3,3,1,3,1,3,1,1,1,1,3,3,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,1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,7,1,1,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,1,1,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,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,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,1,1,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1, 5,5,5,5,5,5,1,1,1,1,3,1,1,1,1,5,5,7,3,3,3,1,5,5,5,5,5,5,5,5,5,5,5,5,5,1,5, 5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,1,5,5,5,5,5,5,5,5,5,5,5,5,5,1, 5,5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,3,1,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,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,8,1,1,1,1,1,1,1,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,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,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,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,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,1,1,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,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,7,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,1,1,1,3,3,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1, 5,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,1,1, 7,1,1,3,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1, 1,1,1,5,1,1,1,5,1,1,1,5,1,1,1,1,7,3,1,1,1,7,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,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,1,1,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,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,1,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,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3, 3,3,1,3,1,1,3,3,1,3,1,3,1,1,1,1,3,3,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,1,1,1,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,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,1,3,1,1,3,3,1,3,1,3, 1,1,1,1,3,3,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,1,1,1,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,3,1,3,3,3, 3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,1,3,1,1,3,3,1,3,1,3,1,1,1,1,3,3,1,3,1,1,7,3, 1,7,3,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,1,1,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,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,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,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,1,1,1,3,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,1,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,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,5,1,3,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,5,1,7,1,1,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,1, 1,1,1,1,1,1,1,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,3,1,3, 3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,1,3,1,1,3,3,1,3,1,3,1,1,1,1,3,3,1,3,1,1, 1,1,1,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,7,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,1,1,7,1,1,3,1,1,1,1,1,1,1,7,1,3,1,5,1,1, 7,1,1,3,1,7,2,1,5,5,5,5,1,1,7,1,1,3,1,1,5,5,7,3,3,3,1,5,1,1,1,7,1,1,1,1,1, 1,1,1,1,1,7,1,1,3,3,3,3,3,3,3,3,1,1,1,7,3,1,1,1,1,1,1,1,7,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,1,7,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,3,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,3,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,8,7,1,1,1,1,7,2,1,7,2,1,1,1,9,9,9,5,3,1, 1,1,1,3,1,1,1,1,7,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,1,1,1,1,3,1, 1,1,1,5,5,7,3,3,3,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,3,1, 1,1,1,5,5,7,3,3,1,1,1,1,3,1,1,1,1,5,3,5,5,5,5,5,5,5,5,5,5,5,5,5,1,5,5,5,5, 5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,1,1,1,1,3,1,1,1,1,5,3,5,5,5,5,5,5,5, 5,5,5,5,5,5,1,5,5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,3,1,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,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,3,7,1,7,3,1,1,1,1,7,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,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,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,1,1,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,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3, 1,1,1,1,1,1,3,3,1,1,1,1,3,1,1,3,3,3,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,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,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,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,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,1,1,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,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,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,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,1,1,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,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,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,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,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,3,3,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,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,1,1,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,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,1,1,1,1,1,1, 1,1,1,1,1,1,5,5,1,1,1,1,3,1,1,1,1,5,5,7,3,3,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7, 3,3,3,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,5,5,5,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,5,5,5,5,5,5,5,5,5,5,5,1,1,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,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,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,7,3,1,7,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,1,1,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,1,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, 3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,3,1,1,1,3,1,3,1,3,1,1,1,1,3,3,1,3, 1,1,1,7,3,1,1,5,1,3,1,5,1,3,1,1,1,1,1,1,1,7,1,1,1,1,8,8,8,8,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,5,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,1,7,3,5,1,1,7,1, 1,3,1,7,1,1,1,1,1,5,1,5,7,1,1,1,1,1,3,3,1,3,3,1,5,1,5,5,5,5,5,5,5,5,5,1,1, 7,1,1,3,5,5,5,5,5,5,5,1,1,7,1,1,3,1,1,1,1,1,1,1,7,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,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,1,1,7,1,1,3,8,1,8,8,8,8,8,8,8,8,8,8,8,8,8,8,1,7,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,1,1,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,7,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,3,1,1,3,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,7,2,1,1,1,7,1,1,1,1,7,1,1,1,1,1,3,1,1,1,1,7,3,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,3,1,1,1,1,5,5,7,3,3,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,1,1,7,3,1,1,1,7,3,1,1,1, 1,1,5,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,5,1,1,1,1,5,1,1,1,7,3,1,1,7,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,1,1,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,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3, 3,3,1,1,1,3,1,3,3,1,3,1,3,3,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,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1, 1,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,7,3,1,1,1,1,1,8, 7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,5,1,1,7,1,1,3,5, 5,5,1,1,7,1,1,3,5,1,1,7,1,1,3,1,7,1,1,7,1,1,7,1,1,1,5,1,1,3,1,1,1,5,1,1,1, 3,1,3,1,5,3,3,1,1,1,1,1,1,1,7,3,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,7,3,3,3,9,9,9, 5,9,9,9,5,1,1,1,1,7,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,3,1,5,5,5,5,5, 1,1,7,1,1,3,5,5,1,1,1,7,3,1,1,1,1,3,3,1,5,5,5,5,5,1,1,7,1,1,3,1,1,7,3,3,1, 1,1,1,5,3,1,3,3,1,3,1,7,2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,1,7,1,1,1,1,1,1,1, 1,1,1,7,1,1,1,1,1,1,7,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,1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,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,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,5,7,1,1,1,1,1,3,3,1,3,3,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,7,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,1,1,7,1,1,1,1,1,1,1,1,1, 1,1,7,1,1,1,3,3,3,3,1,1,1,1,7,3,1,1,1,7,3,1,1,7,3,1,1,1,1,1,1,1,7,3,3,1,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 3,1,1,1,1,3,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,1,1,1,1,1,7,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3 }; static const unsigned short ag_pstt[] = { 3,3,3,3,3,3,3,1,2,0,2,2,3, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,1,4,5, 1,399,401,399, 6,6,6,6,6,6,6,3,0,7,8,7,6, 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,5, 6,5, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,299,299, 299,299,299,299,299,299,299,299,299,299,1,2,6,2,2,410, 9,7,10, 11,46,8,12, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,9,2,2, 448, 13,10,14,156,15, 400,1,2,11,2,2,429, 47,12, 400,400,400,400,400,400,400,400,400,400,1,2,13,2,2,438, 16,14,218, 36,44,37,41,42,64,38,13,39,17,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33, 34,16,6,6,6,6,6,6,6,15,35,35,58,49,35,19,48,43,35,47,65,50,57,46,35,56, 35,35,35,35,35,35,45,35,35,35,62,61,59,61,61,61,61,61,61,61,35,35,61,61, 60,20,20,20,20,61,61,61,61,61,61,55,214,61,54,52,61,214,66,61,57,61,63, 53,66,52,18,61,61,15,61,6, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 1,2,16,2,2,408, 400,400,400,400,400,400,400,400,1,2,17,2,2,435, 36,44,37,41,42,64,38,13,39,17,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33, 34,16,6,6,6,6,6,6,6,18,35,35,58,49,35,19,48,43,35,47,65,50,57,46,35,56, 35,35,35,35,35,35,45,35,35,35,62,67,59,67,67,67,67,67,67,67,35,35,67,67, 60,68,68,68,68,67,67,67,67,67,67,55,198,67,54,52,67,198,66,67,57,67,63, 53,66,52,18,67,67,15,67,6, 69,6,6,6,6,6,6,6,19,71,72,73,73,73,73,73,73,73,73,73,70,6, 36,44,37,41,42,64,38,13,39,17,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33, 34,16,6,6,6,6,6,6,6,20,35,35,58,49,35,19,48,43,35,47,65,50,57,46,35,56, 35,35,35,35,35,35,45,35,35,35,62,74,59,74,74,74,74,74,74,74,35,35,74,74, 60,58,58,58,74,74,74,74,74,74,55,216,74,54,52,74,216,66,74,57,74,63,53, 66,52,18,74,74,15,74,6, 400,400,400,400,400,400,400,400,400,400,400,1,2,21,2,2,425, 400,400,400,400,400,400,400,400,400,400,400,1,2,22,2,2,424, 400,400,400,400,400,400,400,400,400,400,400,1,2,23,2,2,423, 400,400,400,400,400,400,400,400,400,400,400,1,2,24,2,2,422, 400,400,400,400,400,400,400,400,400,400,400,1,2,25,2,2,421, 400,400,400,400,400,400,400,400,400,400,400,1,2,26,2,2,420, 400,400,400,400,400,400,400,400,400,400,400,1,2,27,2,2,419, 400,400,400,400,400,400,400,400,400,400,400,1,2,28,2,2,418, 400,400,400,400,400,400,400,400,400,400,400,1,2,29,2,2,417, 400,400,400,400,400,400,400,400,400,400,400,1,2,30,2,2,416, 400,400,400,400,400,400,400,400,400,400,400,1,2,31,2,2,415, 400,400,400,400,400,400,400,400,400,400,400,1,2,32,2,2,414, 400,400,400,400,400,400,400,400,400,400,400,1,2,33,2,2,413, 400,400,400,400,400,400,400,400,400,400,400,1,2,34,2,2,412, 69,35,75,264, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,36,2,2,472, 400,1,2,37,2,2,447, 400,1,2,38,2,2,441, 400,1,2,39,2,2,436, 400,1,2,40,2,2,428, 400,1,2,41,2,2,446, 400,400,400,400,400,400,400,1,2,42,2,2,444, 79,81,16,6,6,6,6,6,6,6,43,82,80,76,218,77,78,77,6, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,1,2,44,2,2,450, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,16,88,69,6,6,6,83,84, 87,6,6,85,6,6,45,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101, 97,93,96,96,99,97,105,251,94,35,35,97,105,103,104,91,91,91,91,97,95,102, 102,102,91,97,97,97,96,96,96,96,6,92,91,91, 16,46,98, 16,47,76, 16,48,64, 69,49,106, 107,50,96, 400,400,400,400,400,400,400,1,2,51,2,2,427, 108,122,109, 36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, 16,6,6,6,6,6,6,6,53,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, 35,35,35,35,45,35,35,35,62,110,59,110,110,110,110,110,110,110,35,35,110, 110,60,110,110,110,110,110,110,55,115,110,54,52,110,115,66,110,57,110, 66,53,66,52,110,110,15,110,6, 36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, 16,6,6,6,6,6,6,6,54,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, 35,35,35,35,45,35,35,35,62,111,59,111,111,111,111,111,111,111,35,35,111, 111,60,111,111,111,111,111,111,55,72,111,54,52,111,72,66,111,57,111,66, 53,66,52,111,111,15,111,6, 36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, 16,6,6,6,6,6,6,6,55,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, 35,35,35,35,45,35,35,35,62,112,59,112,112,112,112,112,112,112,35,35,112, 112,60,112,112,112,112,112,112,55,69,112,54,52,112,69,66,112,57,112,66, 53,66,52,112,112,15,112,6, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,56,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,113,94,35,35,97,113,103,104,91,91,91,91,97,95,102,102, 102,91,97,97,97,96,96,96,96,6,92,91,91, 6,6,6,6,6,6,6,57,114,6, 6,6,6,6,6,6,6,58,76,115,6, 116,59,117, 36,44,37,41,42,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,16, 6,6,6,6,6,6,6,60,35,35,58,49,35,48,43,35,47,50,57,46,35,56,35,35,35,35, 35,35,45,35,35,35,62,120,59,120,120,120,120,120,120,120,35,35,120,48,60, 48,118,120,119,119,119,119,119,55,54,52,120,121,48,57,120,121,53,121,52, 120,120,15,118,48,6, 36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, 16,6,6,6,6,6,6,6,61,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, 35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250, 250,60,250,250,250,250,250,250,55,215,54,52,250,215,66,250,57,250,66,53, 66,52,250,250,15,250,6, 9,89,69,262,122,124,99,125,125,123, 126,118,127, 400,400,400,400,400,400,400,400,1,2,64,2,2,442, 128,6,6,6,6,6,6,6,65,128,128,6, 36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, 16,6,6,6,6,6,6,6,66,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, 35,35,35,35,45,35,35,35,62,245,59,245,245,245,245,245,245,245,35,35,245, 245,60,245,245,245,245,245,245,55,54,52,245,79,57,245,120,53,120,52,245, 245,15,245,6, 36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, 16,6,6,6,6,6,6,6,67,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, 35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250, 250,60,250,250,250,250,250,250,55,200,54,52,250,200,66,250,57,250,66,53, 66,52,250,250,15,250,6, 36,44,37,41,42,64,38,13,39,17,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33, 34,16,6,6,6,6,6,6,6,68,35,35,58,49,35,19,48,43,35,47,65,50,57,46,35,56, 35,35,35,35,35,35,45,35,35,35,62,129,59,129,129,129,129,129,129,129,35, 35,129,129,60,58,58,58,129,129,129,129,129,129,55,199,129,54,52,129,199, 66,129,57,129,63,53,66,52,18,129,129,15,129,6, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,69,2,2,403, 131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,69,70,130,131, 131,131,131, 132,134,136,258,133,137,135, 6,6,6,6,6,6,6,72,138,139,139,6, 108,16,73,63,140, 36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, 16,6,6,6,6,6,6,6,74,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, 35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250, 250,60,250,250,250,250,250,250,55,217,54,52,250,217,66,250,57,250,66,53, 66,52,250,250,15,250,6, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,75,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,141,94,35,35,97,141,103,104,91,91,91,91,97,95,102,102, 102,91,97,97,97,96,96,96,96,6,92,91,91, 89,219,142, 116,77,143, 107,78,144,145, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,1,2,79,2,2,439, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,80,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,146,94,35,35,97,146,103,104,91,91,91,91,97,95,102,102, 102,91,97,97,97,96,96,96,96,6,92,91,91, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,1,2,81,2,2,437, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,82,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,147,94,35,35,97,147,103,104,91,91,91,91,97,95,102,102, 102,91,97,97,97,96,96,96,96,6,92,91,91, 271,271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271, 271,271,149,149,150,150,287,150,149,151,152,271,271,83,275,287,291,148, 271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271,271, 271,149,149,150,153,287,283,153,149,154,152,271,271,84,275,283,287,291, 148, 271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271,271, 271,149,149,150,153,287,283,156,155,157,152,271,271,85,275,279,283,287, 291,148, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,1,2,86,2,2,474, 158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, 158,158,158,159,158,158,158,158,158,158,158,87,158,158,159, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,1,2,88,2,2,406, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,1,2,89,2,2,411, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,1,2,90,2,2,455, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,1,2,91,2,2,432, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,1,2,92,2,2,431, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,93,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,160,94,35,35,97,160,103,104,91,91,91,91,97,95,102,102, 102,91,97,97,97,96,96,96,96,6,92,91,91, 21,22,23,24,25,26,27,28,29,30,31,32,33,34,69,6,6,6,6,6,6,6,94,35,35,35,35, 35,35,35,35,35,35,35,35,35,35,101,161,35,35,126,6, 21,22,23,24,25,26,27,28,29,30,31,32,33,34,69,6,6,6,6,6,6,6,95,35,35,35,35, 35,35,35,35,35,35,35,35,35,35,101,162,35,35,124,6, 90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,69,6,6,6,83,84,87,6,6,85,6, 6,96,35,35,35,35,35,35,35,35,35,35,35,35,35,35,213,101,213,93,94,35,35, 213,213,91,91,91,91,213,95,91,213,213,6,92,91,91, 164,165,163,13,166,166,166,166, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,1,2,98,2,2,457, 86,167,168,169,170,171,116,88,173,174,136,172,172,175,172,175,175,175,175, 172,172,172,172,175, 86,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,6,6, 85,6,6,100,35,35,35,35,35,35,35,35,35,35,35,35,35,35,97,101,97,93,96,96, 99,97,94,35,35,97,97,91,91,91,91,97,95,139,91,97,97,97,96,96,96,96,6,92, 91,91, 89,69,262,122,124,125,125,123, 176,132,177,177, 178,190,179, 180,181,82,182,182,182, 16,105,235, 183,184,185,106,187,186,186,186,186,186, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,1,2,107,2,2,445, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,108,2,2,434, 21,22,23,24,25,26,27,28,29,30,31,32,33,34,6,6,6,6,6,6,6,109,35,35,35,35,35, 35,35,35,35,35,35,35,35,35,101,35,35,268,6, 36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, 16,6,6,6,6,6,6,6,110,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, 35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250, 250,60,250,250,250,250,250,250,55,116,54,52,250,116,66,250,57,250,66,53, 66,52,250,250,15,250,6, 36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, 16,6,6,6,6,6,6,6,111,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, 35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250, 250,60,250,250,250,250,250,250,55,73,54,52,250,73,66,250,57,250,66,53, 66,52,250,250,15,250,6, 36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, 16,6,6,6,6,6,6,6,112,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, 35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250, 250,60,250,250,250,250,250,250,55,70,54,52,250,70,66,250,57,250,66,53, 66,52,250,250,15,250,6, 188,113,100, 16,114,97, 16,69,115,190,189,42, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,1,2,116,2,2,409, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,117,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,191,94,35,35,97,191,103,104,91,91,91,91,97,95,102,102, 102,91,97,97,97,96,96,96,96,6,92,91,91, 192,118,193, 248,248,248,248,248,248,248,248,248,232,248,248,248,248,248,248,248,248,248, 248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,119, 246,246,246,246,246,246,246,246,246,233,246,246,246,246,246,246,246,246,246, 246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,120, 36,44,37,41,42,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,16, 6,6,6,6,6,6,6,121,35,35,58,49,35,48,43,35,47,50,57,46,35,56,35,35,35,35, 35,35,45,35,35,35,62,120,59,120,120,120,120,120,120,120,35,35,120,245, 60,120,119,119,119,119,119,55,54,52,120,57,120,120,53,120,52,120,120,15, 231,245,6, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,122,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,194,96,96,99,97,194,94,35,35,97,194,103,104,91,91,91,91,97,95,102, 102,102,91,97,97,97,96,96,96,96,6,92,91,91, 89,265,124,195,195, 6,6,6,6,6,6,6,124,196,196,6, 89,263,124,150, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,1,2,126,2,2,465, 170,170,170,170,198,198,198,198,198,198,198,198,198,198,198,198,198,198,170, 69,127,197,198,198, 16,128,77, 36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, 16,6,6,6,6,6,6,6,129,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, 35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250, 250,60,250,250,250,250,250,250,55,201,54,52,250,201,66,250,57,250,66,53, 66,52,250,250,15,250,6, 163,83,84,85,130,200,199,91,91,91,91,91,91,91, 201,21,22,23,24,25,26,27,28,29,30,31,32,33,34,131,203,203,203,203,203,203, 203,203,203,203,203,203,203,202,203,203,203,203, 400,400,400,400,400,400,400,1,2,132,2,2,473, 6,6,6,6,6,6,6,133,204,259,6, 400,1,2,134,2,2,454, 87,135,123,92, 400,400,400,400,1,2,136,2,2,443, 205,206,180,180,137,121,121,121, 132,258,133, 108,208,139,209,207, 69,6,6,6,6,6,6,6,140,71,72,62,62,62,62,62,62,62,62,70,6, 208,141,225, 6,6,6,6,6,6,6,142,220,6, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,143,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,102,94,35,35,97,102,103,104,102,91,91,91,91,97,95,102, 102,102,91,97,97,97,96,96,96,96,6,92,91,91, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,144,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,229,94,35,229,35,97,229,103,104,91,91,91,91,97,95,102, 102,102,91,97,97,97,96,96,96,96,6,92,91,91, 210,212,145,211,212,212, 16,146,74, 16,147,71, 214,213,213,293,293,293,288,289, 149,149,149,149,285,149,149,215,149,149,285, 271,271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271, 271,271,149,149,150,150,285,150,149,151,152,271,271,150,273,285,290,148, 271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271, 271,271,149,149,216,216,286,216,149,151,152,271,271,151,274,286, 149,149,149,149,285,149,149,215,149,272,285, 271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271,271, 271,149,149,150,153,285,281,153,149,154,152,271,271,153,273,281,285,290, 148, 271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271, 271,149,149,216,217,286,282,217,149,154,152,271,271,154,274,282,286, 149,149,149,149,285,149,149,215,149,276,285, 271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271,271, 271,149,149,150,153,285,281,156,155,157,152,271,271,156,273,277,281,285, 290,148, 271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271, 271,149,149,216,217,286,282,218,155,157,152,271,271,157,274,278,282,286, 303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303, 303,303,303,303,303,303,303,303,303,303,305,303, 306,159, 208,160,224, 83,84,87,85,161,219,219,219,219,91,91,91,91,91,92,91,91, 83,84,87,85,162,220,220,220,220,91,91,91,91,91,92,91,91, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,1,2,163,2,2,451, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,1,2,164,2,2,459, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,1,2,165,2,2,458, 86,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,6,6, 85,6,6,166,35,35,35,35,35,35,35,35,35,35,35,35,35,35,228,101,228,93,96, 96,94,35,35,228,228,91,91,91,91,228,95,91,228,228,228,96,96,96,96,6,92, 91,91, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,1,2,167,2,2,470, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,1,2,168,2,2,469, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,1,2,169,2,2,468, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,1,2,170,2,2,467, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,1,2,171,2,2,466, 86,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,6,6, 85,6,6,172,35,35,35,35,35,35,35,35,35,35,35,35,35,35,97,101,97,93,96,96, 221,97,94,35,35,97,97,91,91,91,91,97,95,91,97,97,97,96,96,96,96,6,92,91, 91, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,1,2,173,2,2,405, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,1,2,174,2,2,404, 86,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,6,6, 85,6,6,175,35,35,35,35,35,35,35,35,35,35,35,35,35,35,222,101,222,93,96, 96,222,94,35,35,222,222,91,91,91,91,222,95,91,222,222,222,96,96,96,96,6, 92,91,91, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,1,2,176,2,2,407, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,177,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,94,35,35,97,97,91,91,91,91,97,95,135,135,91,97,97,97,96, 96,96,96,6,92,91,91, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,1,2,178,2,2,440, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,179,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,94,35,35,97,97,223,91,91,91,91,97,95,102,102,102,91,97, 97,97,96,96,96,96,6,92,91,91, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,1,2,180,2,2,463, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,1,2,181,2,2,462, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,182,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,94,35,35,97,97,91,91,91,91,97,95,224,224,224,91,97,97,97, 96,96,96,96,6,92,91,91, 271,271,149,149,216,216,287,216,149,151,152,271,271,183,275,287, 271,271,149,149,216,217,287,283,217,149,154,152,271,271,184,275,283,287, 271,271,149,149,216,217,287,283,218,155,157,152,271,271,185,275,279,283,287, 400,400,400,1,2,186,2,2,475, 208,187,225, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,188,2,2,449, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,189,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,226,96,96,99,97,226,94,35,35,97,226,103,104,91,91,91,91,97,95,102, 102,102,91,97,97,97,96,96,96,96,6,92,91,91, 16,190,43, 16,191,17, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,192,2,2,430, 36,44,37,41,42,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,16, 6,6,6,6,6,6,6,193,35,35,58,49,35,48,43,35,47,50,57,46,35,56,35,35,35,35, 35,35,45,35,35,35,62,49,59,49,49,49,49,49,49,49,35,35,49,49,60,49,49,49, 49,49,49,49,55,54,52,49,227,49,57,49,227,53,227,52,49,49,15,49,6, 108,208,194,226,228, 89,266,124,150, 69,148,75,149, 6,6,6,6,6,6,6,197,229,229,229,6, 230,230,230,230,21,22,23,24,25,26,27,28,29,30,31,32,33,34,178,198,230,230, 230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, 208,199,101, 208,200,80, 400,1,2,201,2,2,471, 69,202,231, 205,206,234,232,183,233,183,203,237,236,240,235,239,257,257,238,257,257, 89,18,241, 400,400,400,400,400,400,400,400,400,1,2,205,2,2,461, 400,400,400,400,400,400,400,1,2,206,2,2,460, 6,6,6,6,6,6,6,207,138,261,6, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,1,2,208,2,2,402, 243,136,243,243,243,243,243,243,243,243,243,243,243,243,243,243,69,209,244, 242,243,243, 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,1,2,210,2,2,426, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,211,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,41,94,35,41,35,97,41,103,104,91,91,91,91,97,95,102,102, 102,91,97,97,97,96,96,96,96,6,92,91,91, 16,212,117, 245,245,245,213,245, 246,246,246,214,246, 149,149,149,149,286,149,149,215,149,215,286, 271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271, 271,271,149,149,216,216,285,216,149,151,152,271,271,216,273,285, 271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271, 271,149,149,216,217,285,281,217,149,154,152,271,271,217,273,281,285, 271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271, 271,149,149,216,217,285,281,218,155,157,152,271,271,218,273,277,281,285, 108,208,219,127,247, 108,208,220,125,247, 86,88,173,174,137,175,175,175,175,175,175, 164,165,163,14,166,166,166,166, 180,181,75,182,182,182, 176,133,177,177, 16,225,45, 108,208,226,7,228, 36,44,37,41,42,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,16, 6,6,6,6,6,6,6,227,35,35,58,49,35,48,43,35,47,50,57,46,35,56,35,35,35,35, 35,35,45,35,35,35,62,245,59,245,245,245,245,245,245,245,35,35,245,245, 60,245,245,245,245,245,245,55,54,52,245,57,245,120,53,120,52,245,245,15, 245,6, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,228,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,84,94,35,35,97,84,103,104,91,91,91,91,97,95,102,102,102, 91,97,97,97,96,96,96,96,6,92,91,91, 108,208,229,94,248, 251,205,206,249,254,230,253,250,253,253,252,254,253,253, 201,69,6,6,6,6,6,6,6,231,202,255,256,257,257,257,257,257,255,6, 400,1,2,232,2,2,452, 400,400,400,1,2,233,2,2,433, 400,1,2,234,2,2,456, 69,235,258, 69,236,259, 69,237,260, 232,233,129,236,235,131, 234,232,233,255,237,236,235,254,238,254, 233,253,252,252, 6,6,6,6,6,6,6,241,19,6, 83,84,85,242,200,91,91,91,91,91,91,91, 201,21,22,23,24,25,26,27,28,29,30,31,32,33,34,243,261,261,261,261,261,261, 261,261,261,261,261,261,261,202,261,261,261,261, 205,206,180,180,244,87,87,87, 295,295,295,296, 295,295,295,297, 83,84,87,85,247,54,54,54,91,91,91,91,91,92,91,91, 6,6,6,6,6,6,6,248,93,93,6, 400,400,400,400,400,1,2,249,2,2,453, 174,174,183,184,185,250,113,186,186,186,186,113,113,186, 400,400,400,400,400,1,2,251,2,2,464, 205,206,252,195,194, 251,205,206,249,177,197,250,197,197,252,197, 16,254,202, 262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,69,255,242,262, 262, 6,6,6,6,6,6,6,256,263,263,263,6, 108,208,257,223,264, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,258,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,265,94,35,35,97,265,103,104,265,265,91,91,91,91,97,95, 102,102,102,91,97,97,97,96,96,96,96,6,92,91,91, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,259,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,266,94,35,35,97,266,103,104,266,266,91,91,91,91,97,95, 102,102,102,91,97,97,97,96,96,96,96,6,92,91,91, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,260,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,267,94,35,35,97,267,103,104,91,91,91,91,97,95,102,102, 102,91,97,97,97,96,96,96,96,6,92,91,91, 205,206,234,232,183,233,183,261,237,236,240,235,239,89,89,238,89,89, 201,21,22,23,24,25,26,27,28,29,30,31,32,33,34,262,243,243,243,243,243,243, 243,243,243,243,243,243,243,202,243,243,243,243, 108,208,263,269,268, 201,69,6,6,6,6,6,6,6,264,202,255,256,144,144,144,144,255,6, 108,208,265,108,270, 108,208,266,107,270, 208,267,128, 6,6,6,6,6,6,6,268,147,147,6, 271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,69,269,242,271, 271, 86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, 6,6,85,6,6,270,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, 93,96,96,99,97,106,94,35,35,97,106,103,104,106,91,91,91,91,97,95,102, 102,102,91,97,97,97,96,96,96,96,6,92,91,91, 201,21,22,23,24,25,26,27,28,29,30,31,32,33,34,271,88,88,88,88,88,88,88,88, 88,88,88,88,88,202,88,88,88,88, }; static const unsigned short ag_sbt[] = { 0, 13, 46, 50, 63, 93, 95, 130, 133, 137, 177, 182, 189, 191, 207, 210, 317, 360, 374, 481, 503, 609, 626, 643, 660, 677, 694, 711, 728, 745, 762, 779, 796, 813, 830, 847, 851, 889, 896, 903, 910, 917, 924, 937, 956, 993,1079,1082,1085,1088,1091,1094,1107,1110,1210,1310, 1410,1494,1504,1515,1518,1616,1715,1725,1728,1742,1754,1850,1949,2055, 2094,2116,2123,2135,2140,2239,2323,2326,2329,2333,2370,2454,2491,2575, 2612,2650,2689,2725,2759,2795,2823,2851,2879,2907,2991,3034,3077,3142, 3150,3186,3210,3287,3295,3299,3302,3308,3311,3321,3358,3396,3437,3536, 3635,3734,3737,3740,3746,3783,3867,3870,3905,3940,4034,4119,4124,4135, 4139,4165,4189,4192,4291,4305,4339,4352,4363,4370,4374,4384,4392,4395, 4400,4421,4424,4434,4519,4604,4610,4613,4616,4624,4635,4672,4707,4718, 4756,4792,4803,4842,4879,4910,4912,4915,4932,4949,4986,5022,5058,5132, 5168,5204,5240,5276,5312,5388,5424,5460,5535,5572,5652,5689,5771,5808, 5845,5926,5942,5960,5979,5988,5991,6029,6114,6117,6120,6158,6254,6259, 6263,6267,6279,6316,6319,6322,6329,6332,6350,6353,6368,6381,6392,6446, 6468,6505,6590,6593,6598,6603,6614,6649,6685,6722,6727,6732,6743,6751, 6757,6761,6764,6769,6862,6946,6951,6965,6985,6992,7001,7008,7011,7014, 7017,7023,7033,7037,7047,7059,7093,7101,7105,7109,7125,7136,7147,7161, 7172,7177,7188,7191,7211,7223,7228,7314,7400,7484,7502,7536,7541,7560, 7565,7570,7573,7584,7604,7689,7723 }; static const unsigned short ag_sbe[] = { 9, 43, 48, 57, 92, 94, 126, 131, 135, 173, 178, 185, 190, 203, 208, 244, 356, 370, 408, 489, 537, 622, 639, 656, 673, 690, 707, 724, 741, 758, 775, 792, 809, 826, 843, 848, 885, 892, 899, 906, 913, 920, 933, 947, 989,1025,1080,1083,1086,1089,1092,1103,1108,1143,1243,1343, 1441,1501,1511,1516,1550,1649,1718,1726,1738,1750,1787,1883,1983,2090, 2110,2119,2130,2137,2173,2270,2324,2327,2330,2366,2401,2487,2522,2607, 2644,2682,2721,2755,2791,2819,2847,2875,2903,2938,3013,3056,3105,3145, 3182,3196,3240,3289,3296,3300,3304,3309,3314,3354,3392,3417,3470,3569, 3668,3735,3738,3742,3779,3814,3868,3904,3939,3972,4065,4120,4131,4136, 4161,4185,4190,4225,4295,4320,4348,4359,4366,4371,4380,4388,4393,4397, 4408,4422,4431,4465,4550,4606,4611,4614,4622,4633,4667,4704,4716,4750, 4788,4801,4835,4874,4908,4911,4913,4919,4936,4982,5018,5054,5088,5164, 5200,5236,5272,5308,5342,5420,5456,5490,5568,5603,5685,5720,5804,5841, 5876,5939,5956,5974,5984,5989,6025,6060,6115,6118,6154,6190,6256,6260, 6264,6274,6298,6317,6320,6325,6330,6339,6351,6364,6377,6388,6442,6463, 6501,6536,6591,6596,6601,6612,6646,6681,6717,6724,6729,6736,6746,6753, 6758,6762,6766,6801,6893,6948,6956,6974,6988,6997,7004,7009,7012,7015, 7019,7026,7034,7044,7050,7074,7097,7104,7108,7113,7132,7143,7152,7168, 7174,7181,7189,7207,7218,7225,7259,7345,7431,7491,7517,7538,7550,7562, 7567,7571,7580,7600,7635,7704,7723 }; static const unsigned char ag_fl[] = { 2,1,1,2,0,1,3,3,1,1,1,1,1,1,3,1,1,4,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,2,3,4,1,5,2,3,2,4,1,1,1,1,3,1,1,1,2,1,1,1,3,3,2,1,1,1,1,2, 3,4,2,3,4,3,2,3,1,2,3,1,1,1,3,1,1,5,5,6,1,1,1,3,3,1,2,3,2,2,3,3,3,1,1, 1,3,4,4,1,1,1,1,2,1,2,3,5,1,1,2,3,1,3,2,4,2,4,4,1,1,2,1,3,1,3,1,3,1,2, 1,1,1,1,3,1,1,3,2,3,2,1,1,1,1,1,3,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0, 1,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,3,3,4,6,1,1,1,1,1,1,1, 1,1,1,2,2,3,3,4,2,1,3,1,1,4,3,3,3,1,3,2,1,2,1,1,1,3,1,1,1,1,1,1,1,3,1, 2,1,1,1,1,2,2,2,1,2,1,1,4,1,3,1,3,1,2,2,2,3,1,3,1,1,0,1,2,2,2,1,2,2,2, 1,2,2,2,1,2,2,2,1,2,2,2,1,2,1,2,2,2,1,2,1,1,1,2,0,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,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,2,2,2,2,2,2,2,2,2,2 }; static const unsigned short ag_ptt[] = { 0, 58, 65, 65, 66, 66, 58, 68, 72, 72, 72, 72, 75, 76, 76, 78, 78, 81, 86, 86, 88, 88, 88, 88, 88, 88, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, 96, 89, 89, 99,100, 57, 57,104,104,109,109,110,111, 111,113,113,116,116,117,117,120,120,114,121,122,122,122,122,123,123,127, 124,124,130,131,134,135,128,128, 79, 84, 84, 70, 70,118,118,138,142,139, 108,148,149,149,150,151,151, 90,152,153,105, 80,156,157,159,160,160,161, 161,331,331,331,331,166,168,125,125,169,172,137,137,173, 82,175,176,176, 176,176,178,179,179,179,133,133,180,180,183,183,182,182,185,185,185,188, 188,189,143,143,190,190,192,192, 91, 91, 91, 91,102,193,194,194,194, 92, 288,288,197,197,171,171,144,144,198,198,136,136,167,167,199,199,201,201, 141,141,141,146,146,181,181,204,204,204,204,206,206,206,206,206,200,200, 115,115,115,115,207,202,184,184,184,184,184,184, 93, 93,212,212,126,126, 126,126,214, 98, 98,158, 97,186,205,191,215, 77, 77,170,107,107,216,216, 106,210,217,218,213,213,119,119,119,187,147,147,220,220,220,129,129,211, 203,203,203,203,203,219,221,221,140,140,132,132,132,132,132,174,174,145, 145,222,222,222,222,163,226,226,226,162,229,229,229,165,232,232,232,164, 235,235,235,196,236,236,239,239,237,237,266,266,246,246,247,247,248,248, 287, 73, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,224,224,224,231,231, 234,234,234,234,234,234,234,238,238,241,241,241,241,241,241,241,242,242, 242,242,242,242,242,242,242,242,242,242,244,244,244,244,244,244,244,244, 244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, 244,244,256,256,257,257, 71, 69, 35, 41, 74, 2, 85, 83, 60, 87, 1, 7, 11, 16, 26, 29, 34, 39, 42, 45, 46, 49, 50, 55, 6, 8, 10, 20, 17, 61, 59, 12,112, 13, 14, 9, 15, 54, 3, 18, 19, 31, 24, 53, 23, 25,154, 52, 27,155, 28, 30, 33,177, 4, 38, 36,195, 21, 44, 40, 56, 47, 43, 22,208, 32,209, 37, 51, 48, 5,240,101 }; static void ag_ra(void) { switch(ag_rpx[(PCB).ag_ap]) { case 1: ag_rp_1(); break; case 2: ag_rp_2(); break; case 3: ag_rp_3(); break; case 4: ag_rp_4(); break; case 5: ag_rp_5(); break; case 6: ag_rp_6(); break; case 7: ag_rp_7(); break; } } #define TOKEN_NAMES plm_token_names const char *const plm_token_names[332] = { "compilation", "ADDRESS", "AND", "ASSIGN_OP", "AT", "BASED", "BY", "BYTE", "CALL", "CASE", "CAUSE_INTERRUPT", "CHARINT", "DATA", "DECLARE", "DISABLE", "DO", "DWORD", "ELSE", "ENABLE", "END", "EOF_KW", "EXTERNAL", "GE", "GO", "GOTO", "HALT", "HWORD", "IF", "INITIAL_KW", "INTEGER", "INTERRUPT", "LABEL", "LE", "LITERALLY", "LONGINT", "MINUS", "MOD", "NE", "NOT", "OFFSET", "OR", "PLUS", "POINTER", "PROCEDURE", "PUBLIC", "QWORD", "REAL", "REENTRANT", "RETURN", "SELECTOR", "SHORTINT", "STRUCTURE", "THEN", "TO", "WHILE", "WORD", "XOR", "compilation", "white space", "numeric_constant", "IDENTIFIER", "STRING", "", "\"/*\"", "", "", "", "\"*/\"", "actual_parameters", "LPAREN", "expression_list", "RPAREN", "adding_operator", "MINUS_SIGN", "PLUS_SIGN", "and_operator", "arithmetic_expression", "term", "array_specifier", "explicit_dimension", "implicit_dimension", "assignment_statement", "left_part", "EQ", "expression", "SEMI", "base_specifier", "DOT", "basic_statement", "call_statement", "goto_statement", "microprocessor_dependent_statement", "null_statement", "return_statement", "basic_type", "bound_expression", "by_part", "step_expression", "simple_variable", "cast_type", "cause_interrupt_statement", "integer_constant", "module", "eof", "conditional_clause", "if_condition", "true_unit", "true_element", "false_element", "constant", "constant_attribute", "constant_list", "COMMA", "declaration", "declare_statement", "procedure_definition", "declaration_sequence", "declare_element", "factored_element", "unfactored_element", "declare_element_list", "disable_statement", "do_block", "do_case_block", "do_while_block", "iterative_do_block", "simple_do_block", "do_case_statement", "ending", "unit_sequence", "do_while_statement", "embedded_assignment", "variable_reference", "logical_expression", "enable_statement", "end_statement", "opt_identifier", "label_definition_sequence", "factored_label_element", "factored_variable_element", "variable_name_specifier_list", "opt_public_or_external", "factored_member", "member_name_list", "opt_explicit_dimension", "variable_type", "opt_variable_attributes", "unit", "formal_parameter", "formal_parameter_list", "formal_parameter_specifier", "go_to", "halt_statement", "id_colon", "COLON", "STAR", "index_part", "index_variable", "start_expression", "initial_value", "initial_value_list", "initialization", "binary number", "decimal number", "hex number", "octal number", "interrupt", "opt_interrupt_number", "interrupt_number", "iterative_do_statement", "to_part", "opt_by_part", "label_definition", "label_element", "variable_reference_list", "literal_element", "location_reference", "AT_SIGN", "locator", "locator_initialization", "logical_factor", "or_operator", "logical_secondary", "logical_primary", "relation_operator", "member_element", "structure_type", "unfactored_member", "member_element_list", "member_name", "member_specifier", "subscript", "member_specifier_sequence", "module_name", "multiplying_operator", "SLASH", "floating point number", "opt_array_specifier", "opt_formal_parameter_specifier", "opt_procedure_attribute_sequence", "procedure_attribute_sequence", "opt_procedure_type", "procedure_type", "variable_attributes", "primary", "subexpression", "procedure_attribute", "procedure_statement", "GT", "LT", "typed_return", "untyped_return", "secondary", "unary_sign", "simple_do_statement", "subscript_or_actual_parameters", "true_statement", "unary_minus", "unary_plus", "variable_element", "unit_element", "variable_name_specifier", "decimal number tail", "'d'", "", "'$'", "binary number tail", "", "", "octal number tail", "", "", "hex number tail", "", "", "floating point number tail", "fraction part", "exponent", "", "", "'-'", "", "", "'\\''", "", "\"\\'\\'\"", "", "", "", "", "", "", "", "", "", "", "", "", "RPAREN", "LPAREN", "MINUS", "PLUS", "PLUS_SIGN", "AND", "SEMI", "EQ", "IDENTIFIER", "DOT", "ADDRESS", "BYTE", "CHARINT", "DWORD", "HWORD", "INTEGER", "LONGINT", "OFFSET", "POINTER", "QWORD", "REAL", "SELECTOR", "SHORTINT", "WORD", "BY", "CALL", "CAUSE_INTERRUPT", "EOF_KW", "ELSE", "STRING", "numeric_constant", "DATA", "COMMA", "DECLARE", "DISABLE", "CASE", "DO", "WHILE", "ASSIGN_OP", "ENABLE", "END", "LABEL", "GOTO", "TO", "GO", "HALT", "COLON", "THEN", "IF", "STAR", "INITIAL_KW", "INTERRUPT", "LITERALLY", "AT_SIGN", "AT", "NOT", "MOD", "SLASH", "EXTERNAL", "PUBLIC", "OR", "XOR", "REENTRANT", "PROCEDURE", "GE", "GT", "LE", "LT", "NE", "STRUCTURE", "RETURN", "BASED", "'-'", "integer_constant", }; #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((*(PCB).lab)) && (*(PCB).lab) != '\\') { char buf[20]; sprintf(buf, "\'%c\'", (char) (*(PCB).lab)); sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, buf); } else sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, UNNAMED_TOKEN); (PCB).error_message = (PCB).ag_msg; } static int ag_action_1_r_proc(void); static int ag_action_2_r_proc(void); static int ag_action_3_r_proc(void); static int ag_action_4_r_proc(void); static int ag_action_1_s_proc(void); static int ag_action_3_s_proc(void); static int ag_action_1_proc(void); static int ag_action_2_proc(void); static int ag_action_3_proc(void); static int ag_action_4_proc(void); static int ag_action_5_proc(void); static int ag_action_6_proc(void); static int ag_action_7_proc(void); static int ag_action_8_proc(void); static int ag_action_9_proc(void); static int ag_action_10_proc(void); static int ag_action_11_proc(void); static int ag_action_8_proc(void); static int (*const ag_r_procs_scan[])(void) = { ag_action_1_r_proc, ag_action_2_r_proc, ag_action_3_r_proc, ag_action_4_r_proc }; static int (*const ag_s_procs_scan[])(void) = { ag_action_1_s_proc, ag_action_2_r_proc, ag_action_3_s_proc, ag_action_4_r_proc }; static int (*const ag_gt_procs_scan[])(void) = { ag_action_1_proc, ag_action_2_proc, ag_action_3_proc, ag_action_4_proc, ag_action_5_proc, ag_action_6_proc, ag_action_7_proc, ag_action_8_proc, ag_action_9_proc, ag_action_10_proc, ag_action_11_proc, ag_action_8_proc }; static int ag_action_10_proc(void) { int ag_t = (PCB).token_number; (PCB).btsx = 0, (PCB).drt = -1; do { ag_track(); if ((PCB).rx < (PCB).fx) { (PCB).input_code = (PCB).lab[(PCB).rx++]; (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code);} else { GET_INPUT; (PCB).lab[(PCB).fx++] = (PCB).input_code; (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code); (PCB).rx++; } if (ag_key_index[(PCB).sn]) { unsigned ag_k = ag_key_index[(PCB).sn]; int ag_ch = CONVERT_CASE((PCB).input_code); 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 == (plm_token_type) ag_t); (PCB).rx = 0; return 1; } static int ag_action_11_proc(void) { int ag_t = (PCB).token_number; (PCB).btsx = 0, (PCB).drt = -1; do { (PCB).vs[(PCB).ssx] = *(PCB).lab; (PCB).ssx--; ag_track(); ag_ra(); if ((PCB).exit_flag != AG_RUNNING_CODE) return 0; (PCB).ssx++; if ((PCB).rx < (PCB).fx) { (PCB).input_code = (PCB).lab[(PCB).rx++]; (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code);} else { GET_INPUT; (PCB).lab[(PCB).fx++] = (PCB).input_code; (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code); (PCB).rx++; } if (ag_key_index[(PCB).sn]) { unsigned ag_k = ag_key_index[(PCB).sn]; int ag_ch = CONVERT_CASE((PCB).input_code); 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 == (plm_token_type) ag_t); (PCB).rx = 0; 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 = (plm_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 = (plm_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 = (plm_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; } (PCB).vs[(PCB).ssx] = *(PCB).lab; (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).rx = 0; 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).rx = 0; (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 = (plm_token_type) ag_ptt[(PCB).ag_ap]; (PCB).btsx = 0, (PCB).drt = -1; (PCB).vs[(PCB).ssx] = *(PCB).lab; 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 short)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); (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; (PCB).vs[(PCB).ssx] = *(PCB).lab; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else (PCB).ss[(PCB).ssx] = (PCB).sn; ag_track(); (PCB).reduction_token = (plm_token_type) ag_ptt[(PCB).ag_ap]; ag_ra(); while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); (PCB).ag_ap = ag_pstt[ag_t1]; if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break; } return 0; } static int ag_action_8_proc(void) { ag_undo(); (PCB).rx = 0; (PCB).exit_flag = AG_SYNTAX_ERROR_CODE; ag_diagnose(); SYNTAX_ERROR; {(PCB).rx = 1; ag_track();} return (PCB).exit_flag == AG_RUNNING_CODE; } static int ag_action_5_proc(void) { int ag_sd = ag_fl[(PCB).ag_ap]; (PCB).btsx = 0, (PCB).drt = -1; if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; else { (PCB).ss[(PCB).ssx] = (PCB).sn; } (PCB).rx = 0; (PCB).reduction_token = (plm_token_type) ag_ptt[(PCB).ag_ap]; ag_ra(); while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); (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 = (plm_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).rx = 0; while ((PCB).exit_flag == AG_RUNNING_CODE) { unsigned ag_t1 = ag_sbe[(PCB).sn] + 1; unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1; do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); (PCB).ag_ap = ag_pstt[ag_t1]; if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break; } return (PCB).exit_flag == AG_RUNNING_CODE; } void init_plm(void) { (PCB).rx = (PCB).fx = 0; (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 plm(void) { init_plm(); (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; if ((PCB).rx < (PCB).fx) { (PCB).input_code = (PCB).lab[(PCB).rx++]; (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code);} else { GET_INPUT; (PCB).lab[(PCB).fx++] = (PCB).input_code; (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code); (PCB).rx++; } if (ag_key_index[(PCB).sn]) { unsigned ag_k = ag_key_index[(PCB).sn]; int ag_ch = CONVERT_CASE((PCB).input_code); if (ag_ch < 255) { while (ag_key_ch[ag_k] < ag_ch) ag_k++; if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k); } } do { unsigned ag_tx = (ag_t1 + ag_t2)/2; if (ag_tstt[ag_tx] > (unsigned short)(PCB).token_number) ag_t1 = ag_tx + 1; else ag_t2 = ag_tx; } while (ag_t1 < ag_t2); if (ag_tstt[ag_t1] != (unsigned short)(PCB).token_number) ag_t1 = ag_sbe[(PCB).sn]; } (PCB).ag_ap = ag_pstt[ag_t1]; (ag_gt_procs_scan[ag_astt[ag_t1]])(); } }