diff tests/agcl/oldagsrc/good/dsl.cpp @ 0:13d2b8934445

Import AnaGram (near-)release tree into Mercurial.
author David A. Holland
date Sat, 22 Dec 2007 17:52:45 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/agcl/oldagsrc/good/dsl.cpp	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,4248 @@
+                                           // C Prologue
+/*
+ AnaGram, a System for Syntax Directed Programming
+
+ A Dos Script Language
+
+ Copyright (c) 1993, Parsifal Software.
+ All Rights Reserved.
+
+*/
+
+
+#include "stack.h"
+#include "charsink.h"
+#include "strdict.h"
+#include "array.h"
+#include "symbol.h"
+#include "query.h"
+#include <conio.h>
+
+
+// Define stacks for temporary storage
+
+stack <action_pointer>      as(25);              // Stack actions
+stack <int>                 is(100);             // Stack string indices
+stack <char *>              ps(1000,20);         // Stack parameter strings
+stack <query_item>          qs(23);              // Stack query items
+
+
+// Define data structures for symbol table
+
+#define N_STRINGS 2000
+
+string_accumulator          sa(64000U,500);
+string_dictionary           sd(N_STRINGS);
+array <symbol_table_entry>  st(N_STRINGS);
+
+
+/*
+ * AnaGram, A System for Syntax Directed Programming
+ * File generated by: ...
+ *
+ * AnaGram Parsing Engine
+ * Copyright 1993-2002 Parsifal Software. All Rights Reserved.
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software. If you use this software
+ *    in a product, an acknowledgment in the product documentation would be
+ *    appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+#ifndef DSL_H
+#include "dsl.h"
+#endif
+
+#ifndef DSL_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])
+
+
+
+dsl_pcb_type dsl_pcb;
+#define PCB dsl_pcb
+#define CHANGE_REDUCTION(x) dsl_change_reduction(dsl_##x##_token)
+int dsl_change_reduction(dsl_token_type);
+
+
+#line - "dsl.syn"
+#include <process.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <io.h>
+#include <conio.h>
+#include <dir.h>
+#include <dos.h>
+#include <time.h>
+#include "assert.h"
+
+#include "edit.h"
+
+
+#include "screen.h"
+#include "util.h"
+#include "redirect.h"
+
+#define GET_CONTEXT CONTEXT.pointer = PCB.pointer;\
+  CONTEXT.line=PCB.line;\
+  CONTEXT.column = PCB.column;
+
+
+int       debug_switch = 0;
+char     *error_msg = NULL;
+unsigned  errorlevel_index;
+int       errorlevel;
+int       exitcode = 0;
+int       exitflag = 0;
+int       first_line = 1;
+int       first_column = 1;
+unsigned  stderr_index;
+
+void      display_queries(screen_descriptor *);
+
+#define FIRST_LINE first_line
+#define FIRST_COLUMN first_column
+
+
+/*****
+
+ Internal Functions
+
+*****/
+
+long file_exists(void) {
+  FILE *f = fopen(sa--,"r");
+  if (f != NULL) fclose(f);
+  return f != NULL;
+}
+
+long directory_exists(void) {
+  struct ffblk ff;
+  int result;
+
+  sa << "\\*.*";
+  result = findfirst(sa--,&ff,FA_DIREC);
+  return result == 0;
+}
+
+long string_length(void) {
+  return size(sa--);
+}
+
+long get_file_length(void) {
+  int handle = open(sa--, O_RDONLY);
+  long length;
+  if (handle < 0) return 0;
+  length = filelength(handle);
+  close(handle);
+  return length;
+}
+
+long disk_space(void) {
+  struct dfree free;
+  int drive = toupper(*(char *)sa--) - 64;
+  long avail;
+
+  getdfree(drive, &free);
+  avail = (long) free.df_avail * (long) free.df_bsec * (long) free.df_sclus;
+  return avail;
+}
+
+long file_time(void) {
+  int handle = open(sa--, O_RDONLY);
+  struct ftime ft;
+  struct tm t;
+
+  if (handle < 0) return 0;
+  getftime(handle, &ft);
+  close(handle);
+  t.tm_year = ft.ft_year + 70;
+  t.tm_mon  = ft.ft_month;
+  t.tm_mday = ft.ft_day;
+	t.tm_hour = ft.ft_hour;
+	t.tm_min  = ft.ft_min;
+	t.tm_sec  = ft.ft_tsec*2;
+  return mktime(&t);
+}
+
+
+// Support for reduction procecures
+
+// Compare top strings on string accumulator
+
+/*
+  pops top two strings from string accumulator using strcmp
+  and returns
+    -1 if first string is less than top string
+     0 if strings match
+    +1 if top string is greater than first string
+*/
+
+int string_comp(void) {
+  int n = size(sa);
+  array<char> right_string(sa--, n+1);
+  return strcmp(sa--,right_string);
+}
+
+/*
+  replace the top string on the stack, with a substring where the index
+  of the first character in the substring is given by "first" and the index
+  of the last character is given by "last"
+*/
+
+void extract(unsigned first, unsigned last) {
+  int n = last - first + 1;
+  assert (last >= first);
+  array <char> x((char *) sa-- + first, n+1);
+  x[n] = 0;
+  ++sa << x;
+}
+
+/*
+ Look up the top string on the accumulator stack in the string dictionary.
+ If it has a value in the symbol table, replace it with the symbol table
+ value. If the value is numeric, convert it to integer. Otherwise, leave the
+ string untouched on the stack.
+*/
+
+void lookup(void) {
+  unsigned index = sd[sa];
+  if (index == 0) return;
+  switch (st[index].type) {
+    case string_type:
+    case value_type: {
+      --sa;                                       // discard name
+      ++sa << st[index].data.text;                // stack value
+      break;
+    }
+    case integer_type: {
+      --sa;                                       // discard name
+      (++sa).printf("%ld", st[index].data.integer); // convert to ascii
+      break;
+    }
+  }
+}
+
+/*
+ Find the data type of a symbol and change the reduction accordingly.
+ Return the dictionary index for strings, and the value itself for integers.
+*/
+
+long name_type(void) {
+  unsigned index = sd << sa--;
+  switch (st[index].type) {
+    case value_type:
+    case string_type: {
+      CHANGE_REDUCTION(string_name);
+      return index;
+    }
+    case built_in_function_type: {
+      CHANGE_REDUCTION(built_in_name);
+      return index;
+    }
+    case undefined_type: {
+      CHANGE_REDUCTION(undefined_name);
+      return index;
+    }
+    case integer_type: return st[index].data.integer;
+  }
+  return 0;
+}
+
+/*
+ Store a string formula. A string formula is a sequence of string identifiers
+ the values of which are to be concatenated. The parser has accumulated the
+ identifiers on the integer_stack, is. The formula is terminated by a zero
+ entry.
+*/
+
+int *formula(void) {
+  int n = size(is << 0);
+  int *f = new int[n];
+  while (n--) is >> f[n];
+  return f;
+}
+
+/*
+ Make a copy of an action that has been identified in the text stream.
+ An action pointer was stacked at the beginning of the action text on the
+ action stack, as.
+*/
+
+action_pointer copy_action(void) {
+  action_pointer ap;
+  as >> ap;                               // pop action descriptor
+  unsigned length = (unsigned) (PCB.pointer - ap.pointer);
+  unsigned char *action = memdup(ap.pointer,length + 1);
+  action[length] = 0;
+  ap.pointer = action;
+  return ap;
+}
+
+
+// Internal Commands
+
+int echo(int n_args, char *args[]) {
+  int i;
+  char *cs = "";
+  for (i = 1; args[i]; i++) printf("%s%s", cs, args[i]), cs = " ";
+  printf("\n");
+  return 0;
+}
+
+int pause(int n_args, char *args[]) {
+  int c;
+  while (kbhit()) getch();                  // Empty buffer
+  printf("Press any key to continue . . .\n");
+  c = getch();
+  if (c == 3) exit(1);
+  return c;
+}
+
+int exit_script(int n_args, char *args[]) {
+  if (n_args > 1) sscanf(args[1], "%ld", &exitcode);
+  exit(exitcode);
+  return exitcode;
+}
+
+/*
+int return_script(int n_args, char *args[]) {
+  if (n_args > 1) sscanf(args[1], "%ld", &exitcode);
+  PCB.exit_flag = AG_SUCCESS_CODE;
+  return exitcode;
+}
+*/
+
+int subdirs(int n_args, char *args[]) {
+  ffblk file_block;
+  int flag;
+  int length = strlen(args[1]);
+  array <char> name(args[1],length + 5);
+
+  strcat(name, "\\*.*");
+	for(flag = findfirst(name, &file_block, FA_DIREC);
+       flag == 0; flag = findnext(&file_block)) {
+    if ((file_block.ff_attrib & FA_DIREC) == 0) continue;
+    if (strcmp(file_block.ff_name, ".") == 0) continue;
+    if (strcmp(file_block.ff_name, "..") == 0) continue;
+    puts(file_block.ff_name);
+  }
+  return 0;
+}
+
+int files(int n_args, char *args[]) {
+  ffblk file_block;
+  int flag;
+  int length = strlen(args[1]);
+  array<char> name(args[1],length + 5);
+
+  strcat(name, "\\*.*");
+  for(flag = findfirst(name, &file_block, 0);
+       flag == 0; flag = findnext(&file_block)) {
+    puts(file_block.ff_name);
+  }
+  return 0;
+}
+
+
+/*****
+
+ Execute Command Line
+
+*****/
+
+
+void perform_action(action_pointer ap) {
+  dsl_pcb_type save_pcb = PCB;
+
+  PCB.pointer = ap.pointer;
+  first_line = ap.line;
+  first_column = ap.column;
+  dsl();
+  exitflag = PCB.exit_flag != AG_SUCCESS_CODE;
+	PCB = save_pcb;
+  if (exitflag) PCB.exit_flag = AG_SEMANTIC_ERROR_CODE;
+}
+
+void exec(void) {
+	int n = size(ps << (char *) NULL);
+  int n_args = n - 1;
+	unsigned index;
+	char *cs;
+	int i;
+
+  array <char *> args(n);
+	while (n--) ps >> args[n];
+
+	cs = args[0];
+	for (i = 0; cs[i]; i++) cs[i] = toupper(cs[i]);
+  if (debug_switch) {
+    for (i = 0; args[i]; i++) fprintf(stderr, "%s ", args[i]);
+    fprintf(stderr,"\nPress any key to continue\n");
+    while (!kbhit());
+    getch();
+  }
+	index = sd[args[0]];
+  if (n_args == 1 && strlen(cs) == 2 && cs[1] == ':') {
+    errorlevel = system(args[0]);
+  }
+  else if ( *cs && index) switch (st[index].type) {
+		case internal_type: {
+      errorlevel = (*st[index].data.proc)(n_args, args);
+			break;
+		}
+		case dos_type: {
+			int i;
+			for (i = 1; args[i]; i++) args[i][-1] = ' ';
+      errorlevel = system(args[0]);
+      assert(errorlevel >= 0);
+			break;
+		}
+		case action_type: {
+			action_descriptor d = *st[index].data.action;
+			stack <symbol_table_entry> old_entries(d.n_args);
+			for (i = 0; i < d.n_args && args[i+1]; i++) {
+				old_entries << st[d.args[i]];
+				st[d.args[i]].type = value_type;
+        st[d.args[i]].data.text = memdup(args[i+1], 1 + strlen(args[i+1]));
+			}
+      perform_action(d.ap);
+			for (i = d.n_args; i--;) {
+				release(st[d.args[i]]);
+				old_entries >> st[d.args[i]];
+			}
+		}
+	}
+	else {
+    errorlevel = spawnvp(P_WAIT, args[0], args);
+    assert(errorlevel >= 0);
+	}
+  st[errorlevel_index].data.integer = errorlevel;
+  while (n_args--) --sa;
+  --ps;
+  if (kbhit()) {
+    int c = getch();
+    if (c == 3) exit(1);
+    ungetch(c);
+  }
+}
+
+void discard_temp_file(char *file_name) {
+  unlink(file_name);                        // Delete file
+  delete [] file_name;                      // Free storage for name
+}
+
+
+/*****
+
+ Execute Command with piped input
+
+*****/
+
+
+void exec_pipe_in(char *file_name) {
+  {
+    redirect sin(STDIN, file_name);
+    exec();
+  }
+  discard_temp_file(file_name);
+}
+
+
+/*****
+
+ Execute Command with redirected I/O
+
+*****/
+
+void exec_redirect_in(void) {
+  redirect sin(STDIN, sa--);
+	exec();
+}
+
+char *exec_pipe_out(void) {
+  redirect sout(STDOUT);
+  exec();
+  return save_file(sout);
+}
+
+char *exec_pipe_in_pipe_out(char *file_name) {
+  char *result;
+  {
+    redirect sin(STDIN, file_name);
+    redirect sout(STDOUT);
+    exec();
+    result = save_file(sout);
+  }
+  discard_temp_file(file_name);
+  return result;
+}
+
+char *exec_redirect_in_pipe_out(void) {
+  redirect sout(STDOUT);
+  exec_redirect_in();
+  return save_file(sout);
+}
+
+unsigned check_integer(void) {
+  unsigned index = sd << sa--;
+	if (st[index].type == integer_type) return index;
+	CHANGE_REDUCTION(undeclared_variable);
+	if (st[index].type == string_type) CHANGE_REDUCTION(string_variable);
+	return index;
+}
+
+void assign_value(unsigned index) {
+  char *text = copy(sa--);
+  release(st[index]);
+	st[index].type = value_type;
+  st[index].data.text = text;
+}
+
+void grab_output(char *temp_name) {
+  unlink(sa);                               // delete old file
+  rename(temp_name, sa--);                  // rename temp file
+  delete [] temp_name;                      // discard name string
+}
+
+void append_output(char *temp_name) {
+  redirect sout(STDOUT, sa--, 1);           // append to file named on sa
+  redirect sin(STDIN, temp_name);
+  char *buf[2000];
+  int n;
+  while (1) {
+    n = read(STDIN, buf, 2000);
+    if (n == 0) break;
+    write(STDOUT, buf, n);
+  }
+  unlink(temp_name);
+  delete [] temp_name;
+}
+
+void action_string(void) {
+  action_pointer ap;
+  as >> ap;
+  unsigned length = (unsigned)(PCB.pointer - ap.pointer);
+  array <unsigned char> action(ap.pointer,length + 1);
+  action[length] = 0;
+  redirect sout(STDOUT);
+	char *result;
+
+  ap.pointer = action;
+  perform_action(ap);
+	result = content(sout);
+	++sa << result;
+	delete [] result;
+}
+
+
+// Program Control functions
+
+// If/else statement
+
+int do_if(int pc, int cc) {
+  action_pointer ap;
+  as >> ap;
+	if (!pc && cc && exitflag == 0) {
+    unsigned length = (unsigned) (PCB.pointer - ap.pointer);
+    array<unsigned char> q(ap.pointer, length+1);
+    q[length] = 0;
+    ap.pointer = q;
+    perform_action(ap);
+  }
+  return pc || cc;
+}
+
+// While statement
+
+void do_while(int cc) {
+  unsigned length;
+  action_pointer ap;
+  as >> ap;
+  if (cc == 0) return;
+  length = (unsigned) (PCB.pointer - ap.pointer);
+  array<unsigned char> q(ap.pointer, length+1);
+  q[length] = 0;
+  ap.pointer = q;
+  perform_action(ap);
+	if (exitflag) return;
+  PCB.pointer = CONTEXT.pointer;
+  PCB.line = CONTEXT.line;
+  PCB.column = CONTEXT.column;
+}
+
+
+// For Statement
+// Note that this is the for statement in the DOS batch languange for, not C
+
+void do_for_loop(void) {
+	int n,k;
+  char *q;
+  char *seps = " \t\v\f\r\n";
+  action_pointer ap;
+  as >> ap;
+  unsigned length = (unsigned)(PCB.pointer - ap.pointer);
+  array <unsigned char> action(ap.pointer, length + 1);
+  action[length] = 0;
+
+  ap.pointer = action;
+  n = size(sa);
+  array<char> text(sa--, n + 1);
+
+
+  unsigned index = sd << sa--;
+
+  ++ps;
+  for (q = strtok(text, seps); q != NULL; q = strtok(NULL,seps)) {
+    if (*q == '(') {
+      int k = strlen(q) - 1;
+			assert(q[k] == ')');
+			q[k] = 0;
+			q++;
+		}
+		else if (*q == '"') {
+			int k = strlen(q) - 1;
+			assert(q[k] == '"');
+			q[k] = 0;
+			q++;
+		}
+    ps << q;
+  }
+	k = n = size(ps);
+  array<char *> args(n);
+	while (k--) ps >> args[k];
+  --ps;
+	symbol_table_entry save_table_entry = st[index];
+	st[index].type = value_type;
+
+  for (k = 0; k < n && exitflag == 0; k++) {
+    st[index].data.text = args[k];
+    perform_action(ap);
+	}
+	st[index] = save_table_entry;
+}
+
+void invoke_script(void) {
+	int handle = open(sa, O_TEXT | O_RDONLY);
+	long size;
+	unsigned n;
+  action_pointer ap;
+
+	if (handle < 0) {
+		fprintf(stderr,"Cannot open %s\n", (char *) sa--);
+		exit(1);
+	}
+	--sa;
+	size = filelength(handle);
+	assert(size < 65536L);
+  array <unsigned char> data((unsigned) size+1);
+	n = (unsigned) read(handle,data,(unsigned) size);
+	data[n] = 0;
+	close(handle);
+  exitflag = 0;
+  ap.pointer = data;
+  ap.line = ap.column = 1;
+	perform_action(ap);
+	st[errorlevel_index].data.integer = exitcode;
+  exitflag = exitcode = 0;
+  return;
+}
+
+internal_commands_descriptor internal_commands[] = {
+  {"ECHO", echo},
+  {"EXIT", exit_script},
+  {"FILES", files},
+  {"PAUSE", pause},
+//  {"RETURN", return_script},
+  {"SUBDIRS", subdirs},
+  {NULL, NULL}
+};
+
+struct built_ins_descriptor built_ins[] = {
+  {"file_exists", file_exists},
+  {"directory_exists", directory_exists},
+  {"string_length", string_length},
+  {"file_length", get_file_length},
+  {"disk_space", disk_space},
+  {"file_time", file_time},
+  {NULL, NULL}
+};
+
+void set_extension(char *path, char *e) {
+	char s[MAXPATH];
+	char drive[MAXDRIVE];
+	char dir[MAXDIR];
+  char file[MAXFILE];
+  char ext[MAXEXT];
+
+  fnsplit(path,drive,dir,file,ext);
+  fnmerge(s, drive, dir, file, e);
+	++sa << s;
+}
+
+/*
+ Note that if this program is called without any arguments, it looks for a
+ script with the same name as the executable. Thus, to make an install
+ program that picks up the install script without any arguments, you simply
+ rename DSL.EXE to INSTALL.EXE. Then when you run it without any arguments
+ it will run the INSTALL.DSL script.
+*/
+
+void main(int argc, char *argv[]) {
+  int arg_number = 0;
+  int i = 1;
+  int j = 0;
+
+  init_dos_internals();
+	set_arg(j++, argv[0]);
+  if (argc > i && (argv[i][0] == '/' || argv[i][0] == '-')) {
+		if (toupper(argv[i][1]) != 'D') {
+      printf("Unrecognized switch -- /%s\n",argv[i][1]);
+      return;
+    }
+    debug_switch = 1;
+    i++;
+  }
+	if (argc > i) arg_number = i++;
+  set_extension(argv[arg_number], "DSL");
+  set_arg(j++,copy(sa));
+	while (i < argc) set_arg(j++, argv[i++]);
+  define_integer("argc", j);
+  invoke_script();                          // Takes file name from sa
+  exit(exitcode);
+}
+#line - "dsl.cpp"
+
+#ifndef CONVERT_CASE
+#define CONVERT_CASE(c) (c)
+#endif
+#ifndef TAB_SPACING
+#define TAB_SPACING 8
+#endif
+
+static void ag_rp_1(void) {
+#line - "dsl.syn"
+  lookup();
+#line - "dsl.cpp"
+}
+
+static void ag_rp_2(void) {
+#line - "dsl.syn"
+  sa << '[';
+#line - "dsl.cpp"
+}
+
+static void ag_rp_3(void) {
+#line - "dsl.syn"
+  concat(sa) << ']', lookup();
+#line - "dsl.cpp"
+}
+
+static void ag_rp_4(void) {
+#line - "dsl.syn"
+  concat(sa);
+#line - "dsl.cpp"
+}
+
+static void ag_rp_5(void) {
+#line - "dsl.syn"
+  concat(sa);
+#line - "dsl.cpp"
+}
+
+static void ag_rp_6(int c) {
+#line - "dsl.syn"
+  ++sa << c;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_7(int c) {
+#line - "dsl.syn"
+  sa << c;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_8(void) {
+#line - "dsl.syn"
+  action_string();
+#line - "dsl.cpp"
+}
+
+static void ag_rp_9(void) {
+#line - "dsl.syn"
+  as << CONTEXT;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_10(void) {
+#line - "dsl.syn"
+  --sa;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_11(void) {
+#line - "dsl.syn"
+action_pointer a; as >> a;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_12(void) {
+#line - "dsl.syn"
+  ++sa;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_13(int c) {
+#line - "dsl.syn"
+  sa << c;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_14(void) {
+#line - "dsl.syn"
+  sa << '(';
+#line - "dsl.cpp"
+}
+
+static void ag_rp_15(void) {
+#line - "dsl.syn"
+  concat(sa) << ')';
+#line - "dsl.cpp"
+}
+
+static void ag_rp_16(void) {
+#line - "dsl.syn"
+  ++sa;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_17(int c) {
+#line - "dsl.syn"
+  sa << c;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_18(int c) {
+#line - "dsl.syn"
+  sa << c;
+#line - "dsl.cpp"
+}
+
+static int ag_rp_19(void) {
+#line - "dsl.syn"
+  return '\a';
+#line - "dsl.cpp"
+}
+
+static int ag_rp_20(void) {
+#line - "dsl.syn"
+  return '\b';
+#line - "dsl.cpp"
+}
+
+static int ag_rp_21(void) {
+#line - "dsl.syn"
+  return '\f';
+#line - "dsl.cpp"
+}
+
+static int ag_rp_22(void) {
+#line - "dsl.syn"
+  return '\n';
+#line - "dsl.cpp"
+}
+
+static int ag_rp_23(void) {
+#line - "dsl.syn"
+  return '\r';
+#line - "dsl.cpp"
+}
+
+static int ag_rp_24(void) {
+#line - "dsl.syn"
+  return '\t';
+#line - "dsl.cpp"
+}
+
+static int ag_rp_25(void) {
+#line - "dsl.syn"
+  return '\v';
+#line - "dsl.cpp"
+}
+
+static int ag_rp_26(void) {
+#line - "dsl.syn"
+  return '\\';
+#line - "dsl.cpp"
+}
+
+static int ag_rp_27(void) {
+#line - "dsl.syn"
+  return '\?';
+#line - "dsl.cpp"
+}
+
+static int ag_rp_28(void) {
+#line - "dsl.syn"
+  return '\'';
+#line - "dsl.cpp"
+}
+
+static int ag_rp_29(void) {
+#line - "dsl.syn"
+  return '"';
+#line - "dsl.cpp"
+}
+
+static int ag_rp_30(int d) {
+#line - "dsl.syn"
+  return d-'0';
+#line - "dsl.cpp"
+}
+
+static int ag_rp_31(int n, int d) {
+#line - "dsl.syn"
+  return 8*n + d-'0';
+#line - "dsl.cpp"
+}
+
+static int ag_rp_32(int n, int d) {
+#line - "dsl.syn"
+  return 8*n + d-'0';
+#line - "dsl.cpp"
+}
+
+static int ag_rp_33(long n) {
+#line - "dsl.syn"
+  return (int) n;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_34(long n, long d) {
+#line - "dsl.syn"
+  return 16*n + d;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_35(void) {
+#line - "dsl.syn"
+  exec();
+#line - "dsl.cpp"
+}
+
+static void ag_rp_36(void) {
+#line - "dsl.syn"
+  exec_redirect_in();
+#line - "dsl.cpp"
+}
+
+static void ag_rp_37(char * file) {
+#line - "dsl.syn"
+  exec_pipe_in(file);
+#line - "dsl.cpp"
+}
+
+static void ag_rp_38(char * file) {
+#line - "dsl.syn"
+  grab_output(file);
+#line - "dsl.cpp"
+}
+
+static void ag_rp_39(char * file) {
+#line - "dsl.syn"
+  append_output(file);
+#line - "dsl.cpp"
+}
+
+static char * ag_rp_40(void) {
+#line - "dsl.syn"
+  return exec_pipe_out();
+#line - "dsl.cpp"
+}
+
+static char * ag_rp_41(void) {
+#line - "dsl.syn"
+  return exec_redirect_in_pipe_out();
+#line - "dsl.cpp"
+}
+
+static char * ag_rp_42(char * file) {
+#line - "dsl.syn"
+  return exec_pipe_in_pipe_out(file);
+#line - "dsl.cpp"
+}
+
+static void ag_rp_43(void) {
+#line - "dsl.syn"
+  sa << 0, ++ps << sa;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_44(void) {
+#line - "dsl.syn"
+  ps << sa, sa << 0;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_45(void) {
+#line - "dsl.syn"
+  ps << sa, sa << 0;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_46(int pc) {
+#line - "dsl.syn"
+  do_if(pc,1);
+#line - "dsl.cpp"
+}
+
+static int ag_rp_47(int cc) {
+#line - "dsl.syn"
+  return cc;
+#line - "dsl.cpp"
+}
+
+static int ag_rp_48(int cc) {
+#line - "dsl.syn"
+  return cc;
+#line - "dsl.cpp"
+}
+
+static int ag_rp_49(int pc, int cc) {
+#line - "dsl.syn"
+  return do_if(pc,cc!=0);
+#line - "dsl.cpp"
+}
+
+static int ag_rp_50(long cc) {
+#line - "dsl.syn"
+  return (int) cc;
+#line - "dsl.cpp"
+}
+
+static int ag_rp_51(int cc) {
+#line - "dsl.syn"
+  return do_if(0,cc != 0);
+#line - "dsl.cpp"
+}
+
+static void ag_rp_52(unsigned v) {
+#line - "dsl.syn"
+  assign_value(v);
+#line - "dsl.cpp"
+}
+
+static void ag_rp_53(unsigned v, long x) {
+#line - "dsl.syn"
+  st[v].data.integer = (int) x;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_54(unsigned v) {
+#line - "dsl.syn"
+  st[v].data.text = copy(sa--);
+#line - "dsl.cpp"
+}
+
+static void ag_rp_55(unsigned v, long n, long x) {
+#line - "dsl.syn"
+  st[v].data.text[(unsigned)n] = (int) x;
+#line - "dsl.cpp"
+}
+
+static unsigned ag_rp_56(void) {
+#line - "dsl.syn"
+  return check_integer();
+#line - "dsl.cpp"
+}
+
+static void ag_rp_57(long cc) {
+#line - "dsl.syn"
+  do_while(cc != 0);
+#line - "dsl.cpp"
+}
+
+static void ag_rp_58(void) {
+#line - "dsl.syn"
+  do_for_loop();
+#line - "dsl.cpp"
+}
+
+static void ag_rp_59(int n) {
+#line - "dsl.syn"
+  define_action(n);
+#line - "dsl.cpp"
+}
+
+static void ag_rp_60(long x) {
+#line - "dsl.syn"
+  define_integer(sa--, x);
+#line - "dsl.cpp"
+}
+
+static void ag_rp_61(void) {
+#line - "dsl.syn"
+  define_string();
+#line - "dsl.cpp"
+}
+
+static int ag_rp_62(void) {
+#line - "dsl.syn"
+  return 0;
+#line - "dsl.cpp"
+}
+
+static int ag_rp_63(int n) {
+#line - "dsl.syn"
+  return n+1;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_64(int c) {
+#line - "dsl.syn"
+  ++sa << c;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_65(int c) {
+#line - "dsl.syn"
+  sa << c;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_66(int c) {
+#line - "dsl.syn"
+  sa << c;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_67(long c, long x, long y) {
+#line - "dsl.syn"
+  return c != 0 ? x : y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_68(long x, long y) {
+#line - "dsl.syn"
+  return x != 0 || y!=0;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_69(long x, long y) {
+#line - "dsl.syn"
+  return x != 0 && y !=0;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_70(long x, long y) {
+#line - "dsl.syn"
+  return x | y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_71(long x, long y) {
+#line - "dsl.syn"
+  return x ^ y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_72(long x, long y) {
+#line - "dsl.syn"
+  return x & y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_73(long x, long y) {
+#line - "dsl.syn"
+  return x == y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_74(long x, long y) {
+#line - "dsl.syn"
+  return x != y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_75(void) {
+#line - "dsl.syn"
+  return string_comp() == 0;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_76(void) {
+#line - "dsl.syn"
+  return string_comp() != 0;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_77(long x, long y) {
+#line - "dsl.syn"
+  return x < y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_78(long x, long y) {
+#line - "dsl.syn"
+  return x > y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_79(long x, long y) {
+#line - "dsl.syn"
+  return x <= y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_80(long x, long y) {
+#line - "dsl.syn"
+  return x >= y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_81(void) {
+#line - "dsl.syn"
+  return string_comp() < 0;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_82(void) {
+#line - "dsl.syn"
+  return string_comp() > 0;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_83(void) {
+#line - "dsl.syn"
+  return string_comp() <= 0;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_84(void) {
+#line - "dsl.syn"
+  return string_comp() >= 0;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_85(long x, long y) {
+#line - "dsl.syn"
+  return x << y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_86(long x, long y) {
+#line - "dsl.syn"
+  return x >> y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_87(long x, long y) {
+#line - "dsl.syn"
+  return x + y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_88(long x, long y) {
+#line - "dsl.syn"
+  return x - y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_89(long x, long y) {
+#line - "dsl.syn"
+  return x * y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_90(long x, long y) {
+#line - "dsl.syn"
+  return x / y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_91(long x, long y) {
+#line - "dsl.syn"
+  return x % y;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_92(long x) {
+#line - "dsl.syn"
+      assert(x);
+			return x;
+		
+#line - "dsl.cpp"
+}
+
+static long ag_rp_93(long x) {
+#line - "dsl.syn"
+  return x;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_94(long x) {
+#line - "dsl.syn"
+  return -x;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_95(long x) {
+#line - "dsl.syn"
+  return ~x;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_96(long x) {
+#line - "dsl.syn"
+  return !x;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_97(long n) {
+#line - "dsl.syn"
+  return ((unsigned char *) sa--)[(unsigned) n];
+#line - "dsl.cpp"
+}
+
+static long ag_rp_98(void) {
+#line - "dsl.syn"
+                              long temp;
+                              sscanf(sa--, "%ld", &temp);
+                              return temp;
+                            
+#line - "dsl.cpp"
+}
+
+static long ag_rp_99(long x) {
+#line - "dsl.syn"
+  return x;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_100(long x) {
+#line - "dsl.syn"
+  return (*st[(unsigned)x].data.func)();
+#line - "dsl.cpp"
+}
+
+static long ag_rp_101(void) {
+#line - "dsl.syn"
+  return name_type();
+#line - "dsl.cpp"
+}
+
+static void ag_rp_102(void) {
+#line - "dsl.syn"
+  concat(sa);
+#line - "dsl.cpp"
+}
+
+static void ag_rp_103(long first, long last) {
+#line - "dsl.syn"
+  extract((unsigned)first, (unsigned) last);
+#line - "dsl.cpp"
+}
+
+static void ag_rp_104(void) {
+#line - "dsl.syn"
+  sa << '[';
+#line - "dsl.cpp"
+}
+
+static void ag_rp_105(void) {
+#line - "dsl.syn"
+  concat(sa) << ']', lookup();
+#line - "dsl.cpp"
+}
+
+static void ag_rp_106(long x) {
+#line - "dsl.syn"
+  ++sa << st[(unsigned)x].data.text;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_107(long x) {
+#line - "dsl.syn"
+  ++sa << sd[(unsigned)x];
+#line - "dsl.cpp"
+}
+
+static void ag_rp_108(void) {
+#line - "dsl.syn"
+  action_string();
+#line - "dsl.cpp"
+}
+
+static void ag_rp_109(long x) {
+#line - "dsl.syn"
+  ++sa,sa.printf("%ld",x);
+#line - "dsl.cpp"
+}
+
+static long ag_rp_110(void) {
+#line - "dsl.syn"
+  return 0;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_111(long x, long d) {
+#line - "dsl.syn"
+  return 16*x + d-'0';
+#line - "dsl.cpp"
+}
+
+static long ag_rp_112(int d) {
+#line - "dsl.syn"
+  return (d&7) + 9;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_113(void) {
+#line - "dsl.syn"
+  return 0;
+#line - "dsl.cpp"
+}
+
+static long ag_rp_114(long n, int d) {
+#line - "dsl.syn"
+  return 8*n + d-'0';
+#line - "dsl.cpp"
+}
+
+static long ag_rp_115(int d) {
+#line - "dsl.syn"
+  return d-'0';
+#line - "dsl.cpp"
+}
+
+static long ag_rp_116(long n, int d) {
+#line - "dsl.syn"
+  return 10*n + d-'0';
+#line - "dsl.cpp"
+}
+
+static int ag_rp_117(int c) {
+#line - "dsl.syn"
+  return c;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_118(screen_descriptor * scd) {
+#line - "dsl.syn"
+  display_queries(scd);
+#line - "dsl.cpp"
+}
+
+static screen_descriptor * ag_rp_119(void) {
+#line - "dsl.syn"
+  return reset(qs), new screen_descriptor;
+#line - "dsl.cpp"
+}
+
+static screen_descriptor * ag_rp_120(screen_descriptor * scd) {
+#line - "dsl.syn"
+  return scd->title = formula(), scd;
+#line - "dsl.cpp"
+}
+
+static screen_descriptor * ag_rp_121(screen_descriptor * scd, int c) {
+#line - "dsl.syn"
+  return scd->color = c, scd;
+#line - "dsl.cpp"
+}
+
+static screen_descriptor * ag_rp_122(screen_descriptor * scd, int c) {
+#line - "dsl.syn"
+  return scd->entry_color = c, scd;
+#line - "dsl.cpp"
+}
+
+static screen_descriptor * ag_rp_123(screen_descriptor * scd, int c) {
+#line - "dsl.syn"
+  return scd->highlight_color = c, scd;
+#line - "dsl.cpp"
+}
+
+static screen_descriptor * ag_rp_124(screen_descriptor * scd, long w, long h) {
+#line - "dsl.syn"
+  return scd->width = (unsigned)w, scd->height = (unsigned) h, scd;
+#line - "dsl.cpp"
+}
+
+static screen_descriptor * ag_rp_125(screen_descriptor * scd, long x, long y) {
+#line - "dsl.syn"
+  return scd->pos.x = (unsigned) x,scd->pos.y = (unsigned) y, scd;
+#line - "dsl.cpp"
+}
+
+static screen_descriptor * ag_rp_126(screen_descriptor * scd, query_item * q) {
+#line - "dsl.syn"
+  return qs << *q, delete q, scd;
+#line - "dsl.cpp"
+}
+
+static screen_descriptor * ag_rp_127(screen_descriptor * scd, query_item * q) {
+#line - "dsl.syn"
+  return qs << *q, delete q, scd;
+#line - "dsl.cpp"
+}
+
+static int ag_rp_128(long fg, long bg) {
+#line - "dsl.syn"
+  return COLOR((unsigned)fg,(unsigned)bg);
+#line - "dsl.cpp"
+}
+
+static query_item * ag_rp_129(void) {
+#line - "dsl.syn"
+  return clear(new query_item);
+#line - "dsl.cpp"
+}
+
+static query_item * ag_rp_130(query_item * q) {
+#line - "dsl.syn"
+  return q->id = sd << sa--, q;
+#line - "dsl.cpp"
+}
+
+static query_item * ag_rp_131(query_item * q) {
+#line - "dsl.syn"
+  return q->value = formula(), q;
+#line - "dsl.cpp"
+}
+
+static query_item * ag_rp_132(query_item * q) {
+#line - "dsl.syn"
+  return q->prompt = formula(), q;
+#line - "dsl.cpp"
+}
+
+static query_item * ag_rp_133(query_item * q) {
+#line - "dsl.syn"
+  return q->explanation = formula(),q;
+#line - "dsl.cpp"
+}
+
+static query_item * ag_rp_134(void) {
+#line - "dsl.syn"
+  return clear(new query_item);
+#line - "dsl.cpp"
+}
+
+static query_item * ag_rp_135(query_item * q) {
+#line - "dsl.syn"
+  return q->prompt = formula(), q;
+#line - "dsl.cpp"
+}
+
+static query_item * ag_rp_136(query_item * q) {
+#line - "dsl.syn"
+  return q->explanation = formula(),q;
+#line - "dsl.cpp"
+}
+
+static query_item * ag_rp_137(query_item * q) {
+#line - "dsl.syn"
+  return q->action = copy_action(), q;
+#line - "dsl.cpp"
+}
+
+static void ag_rp_138(void) {
+#line - "dsl.syn"
+  reset(is) << (sd << sa--);
+#line - "dsl.cpp"
+}
+
+static void ag_rp_139(void) {
+#line - "dsl.syn"
+  is << (sd << sa--);
+#line - "dsl.cpp"
+}
+
+static void ag_rp_140(void) {
+#line - "dsl.syn"
+  sa << '[';
+#line - "dsl.cpp"
+}
+
+static void ag_rp_141(void) {
+#line - "dsl.syn"
+  concat(sa) << ']';
+#line - "dsl.cpp"
+}
+
+
+#define READ_COUNTS 
+#define WRITE_COUNTS 
+#undef V
+#define V(i,t) (*t (&(PCB).vs[(PCB).ssx + i]))
+#undef VS
+#define VS(i) (PCB).vs[(PCB).ssx + i]
+
+#ifndef GET_CONTEXT
+#define GET_CONTEXT CONTEXT = (PCB).input_context
+#endif
+
+typedef enum {
+  ag_action_1,
+  ag_action_2,
+  ag_action_3,
+  ag_action_4,
+  ag_action_5,
+  ag_action_6,
+  ag_action_7,
+  ag_action_8,
+  ag_action_9,
+  ag_action_10,
+  ag_action_11,
+  ag_action_12
+} ag_parser_action;
+
+
+#ifndef NULL_VALUE_INITIALIZER
+#define NULL_VALUE_INITIALIZER = { 0 }
+#endif
+
+static dsl_vs_type const ag_null_value NULL_VALUE_INITIALIZER;
+
+static const unsigned char far ag_rpx[] = {
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  1,  2,  3,  0,  4,  0,  5,  6,  7,  0,  8,  0,  9,
+   10,  0, 11,  0,  0, 12,  0, 13, 14, 15,  0, 16,  0, 17, 18, 19, 20, 21,
+   22, 23, 24, 25, 26, 27, 28, 29,  0,  0,  0,  0,  0, 30, 31, 32, 33,  0,
+   34,  0,  0, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0, 46,  0, 47, 48, 49, 50, 51,  0,  0,  0,  0,
+    0,  0,  0,  0, 52,  0,  0, 53, 54, 55, 56, 57,  0,  0, 58, 59, 60, 61,
+   62,  0,  0, 63, 64, 65, 66,  0, 67,  0, 68,  0, 69,  0, 70,  0, 71,  0,
+   72,  0, 73, 74, 75, 76,  0, 77, 78, 79, 80, 81, 82, 83, 84,  0, 85, 86,
+    0, 87, 88,  0, 89, 90, 91, 92,  0, 93, 94, 95, 96,  0,  0, 97, 98,  0,
+   99,100,  0,101,  0,102,  0,103,104,105,  0,106,107,108,109,  0,  0,  0,
+    0,  0,  0,110,111,  0,112,113,114,115,116,117,  0,  0,118,119,  0,120,
+  121,122,123,124,125,126,127,128,129,  0,130,131,132,133,134,  0,135,136,
+  137,138,139,  0,  0,  0,140,141
+};
+
+static const unsigned char far ag_key_itt[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
+};
+
+static const unsigned short far ag_key_pt[] = {
+  0,211,  0,214,  0,218,  0,221,  0,220,  0,219,  0,223,  0,224,
+  0,225,  0,162,  0,163,  0,247,  0,248,  0,249,  0,250,  0,252,
+  0,253,  0,254,  0,255,  0,256,  0,257,  0,258,  0,259,  0,260,
+0
+};
+
+static const unsigned char far ag_key_ch[] = {
+    0, 42, 47,255, 47, 97,105,115,255, 42, 47,255, 42, 47,255, 88,120,255,
+   60, 61,255, 61, 62,255,101,111,255,108,110,120,255,105,111,255,116,255,
+  102,110,255, 99,105,116,255, 33, 38, 46, 47, 48, 60, 61, 62, 97, 98, 99,
+  100,101,102,104,105,108,112,115,116,118,119,124,255, 47, 97,105,115,255,
+   47,255, 42, 47,255,110,120,255,105,111,255,102,110,255, 99,105,116,255,
+   47, 97, 98, 99,100,101,102,104,105,108,112,115,116,118,119,255, 42, 47,
+  255,108,110,120,255,105,111,255,102,110,255, 99,105,116,255, 47, 97, 98,
+   99,100,101,102,104,105,108,112,115,116,118,119,255,102,110,255, 99,116,
+  255, 47, 97,102,105,115,119,255, 42, 47,255, 60, 61,255, 61, 62,255,116,
+  255,110,255,105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,101,102,
+  104,105,108,115,116,124,255,102,110,255, 99,116,255, 97,102,105,115,119,
+  255, 42, 47,255, 88,120,255, 47, 48,255, 88,120,255, 48,255, 47,255, 34,
+   39, 63, 92, 97, 98,102,110,114,116,118,120,255, 92,255, 42, 47,255, 60,
+   61,255, 61, 62,255,105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,
+  101,102,104,105,108,115,116,124,255, 42, 47,255, 47,255, 47, 62,255, 47,
+   98, 99,101,102,104,108,115,116,255, 62,255, 47,119,255, 47,101,255, 88,
+  120,255, 47, 48,255, 60, 61,255, 61, 62,255, 33, 38, 46, 47, 60, 61, 62,
+  124,255,105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,101,102,104,
+  105,108,115,116,124,255, 60, 61,255, 61, 62,255,105,116,255, 33, 38, 46,
+   47, 60, 61, 62, 97, 98, 99,101,102,104,105,108,115,116,124,255, 33, 60,
+   61, 62,255,105,116,255, 33, 38, 46, 47, 61, 97, 98, 99,101,102,104,105,
+  108,115,116,124,255,105,116,255, 38, 46, 47, 97, 98, 99,101,102,104,105,
+  108,115,116,124,255,105,116,255, 46, 47, 97, 98, 99,101,102,104,105,108,
+  115,116,124,255, 42, 47,255, 60, 61,255, 61, 62,255,108,110,255,105,116,
+  255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,100,101,102,104,105,108,115,
+  116,119,124,255, 47,101,112,255, 47,100,101,112,118,255, 47, 99,255, 99,
+  255,105,255, 47, 62,100,255,102,110,255, 99,116,255, 47, 97,101,102,105,
+  115,119,255,101,255, 42, 47,255, 47,105,255, 47,105,255, 60, 62,255,100,
+  255,105,255, 46,255, 42, 47,255,105,116,255, 33, 38, 46, 47, 60, 61, 62,
+   97, 98, 99,101,102,104,105,108,115,116,124,255
+};
+
+static const unsigned char far ag_key_act[] = {
+  0,0,0,4,2,7,7,7,4,3,3,4,0,0,4,5,5,4,0,0,4,0,0,4,7,5,4,7,7,7,4,7,7,4,5,
+  4,5,6,4,7,7,7,4,3,3,3,2,2,2,3,2,7,7,7,2,2,2,7,2,7,7,2,7,7,7,3,4,3,7,7,
+  7,4,3,4,0,0,4,7,7,4,7,7,4,5,7,4,7,7,7,4,2,7,7,7,7,2,2,7,2,7,7,2,7,7,7,
+  4,0,0,4,7,7,7,4,7,7,4,5,7,4,7,7,7,4,2,7,7,7,7,2,2,7,2,7,7,2,7,7,7,4,5,
+  7,4,7,7,4,3,7,7,2,2,7,4,0,0,4,0,0,4,0,0,4,5,4,6,4,7,7,4,3,3,3,2,2,3,2,
+  7,7,7,7,7,7,2,7,2,7,3,4,5,7,4,7,7,4,7,7,2,2,7,4,0,0,4,5,5,4,2,2,4,5,5,
+  4,2,4,3,4,0,0,0,0,0,0,0,0,0,0,0,0,4,2,4,0,0,4,0,0,4,0,0,4,7,7,4,3,3,3,
+  2,2,3,2,7,7,7,7,7,7,7,7,2,7,3,4,0,0,4,2,4,3,3,4,3,7,7,7,7,7,7,7,7,4,3,
+  4,3,7,4,3,7,4,5,5,4,3,2,4,0,0,4,0,0,4,3,3,3,3,2,3,2,3,4,7,7,4,3,3,3,3,
+  3,3,3,7,7,7,7,7,7,7,7,2,7,3,4,0,0,4,0,0,4,7,7,4,3,3,3,3,2,3,2,7,7,7,7,
+  7,7,7,7,2,7,3,4,3,3,3,3,4,7,7,4,3,3,3,3,3,7,7,7,7,7,7,7,7,2,7,3,4,7,7,
+  4,3,3,3,7,7,7,7,7,7,7,7,2,7,3,4,7,7,4,3,3,7,7,7,7,7,7,7,7,2,7,3,4,0,0,
+  4,0,0,4,0,0,4,7,7,4,7,7,4,3,3,3,2,2,3,2,7,7,7,7,2,7,7,7,7,2,7,7,3,4,3,
+  7,7,4,3,7,7,7,7,4,3,7,4,7,4,7,4,3,3,7,4,5,7,4,7,7,4,3,7,7,7,2,2,7,4,7,
+  4,0,0,4,2,7,4,3,7,4,3,3,4,7,4,7,4,3,4,0,0,4,7,7,4,3,3,3,2,3,3,3,7,7,7,
+  7,7,7,7,7,2,7,3,4
+};
+
+static const unsigned short far ag_key_parm[] = {
+    0, 15, 18,  0,  0, 12, 14, 16,  0, 14, 15,  0, 15, 18,  0, 20, 18,  0,
+  236,234,  0,235,210,  0, 40, 10,  0,  0, 26, 44,  0, 36,  6,  0, 14,  0,
+    2,  8,  0, 22, 30, 16,  0,233,229,246,  0,  0,  0,232,  0, 12, 46, 34,
+    0,  0,  0, 28,  0, 32, 42,  0, 24, 38,  4,228,  0, 18, 12, 14, 16,  0,
+   15,  0, 15, 18,  0, 26, 44,  0, 36,  6,  0,  2, 14,  0, 22, 30, 16,  0,
+    0, 12, 46, 34, 40,  0,  0, 28,  0, 32, 42,  0, 24, 38,  4,  0, 15, 18,
+    0,  0, 26, 44,  0, 36,  6,  0,  2, 14,  0, 22, 30, 16,  0,  0, 12, 46,
+   34, 40,  0,  0, 28,  0, 32, 42,  0, 24, 38,  4,  0,  2, 14,  0, 22, 16,
+    0, 18, 12,  6,  0,  0,  4,  0, 15, 18,  0,236,234,  0,235,210,  0, 14,
+    0,  8,  0, 30, 16,  0,233,229,246,  0,  0,232,  0, 12, 46, 34, 26, 36,
+   28,  0, 32,  0, 24,228,  0,  2, 14,  0, 22, 16,  0, 12,  6,  0,  0,  4,
+    0, 15, 18,  0, 20, 18,  0,  0,  0,  0, 20, 18,  0,  0,  0, 18,  0, 64,
+   63, 62, 61, 54, 55, 56, 57, 58, 59, 60, 72,  0,  0,  0, 15, 18,  0,236,
+  234,  0,235,210,  0, 30, 16,  0,233,229,246,  0,  0,232,  0, 12, 46, 34,
+   26, 36, 28, 14, 32,  0, 24,228,  0, 15, 18,  0,  0,  0, 18,210,  0, 18,
+   46, 34, 26, 36, 28, 32, 30, 24,  0,210,  0, 18,  4,  0, 18,  0,  0, 20,
+   18,  0, 15,  0,  0,236,234,  0,235,210,  0,233,229,246, 18,  0,232,  0,
+  228,  0, 30, 16,  0,233,229,246, 18,234,232,235, 12, 46, 34, 26, 36, 28,
+   14, 32,  0, 24,228,  0,236,234,  0,235,210,  0, 30, 16,  0,233,229,246,
+   18,  0,232,  0, 12, 46, 34, 26, 36, 28, 14, 32,  0, 24,228,  0,233,234,
+  232,235,  0, 30, 16,  0,233,229,246, 18,232, 12, 46, 34, 26, 36, 28, 14,
+   32,  0, 24,228,  0, 30, 16,  0,229,246, 18, 12, 46, 34, 26, 36, 28, 14,
+   32,  0, 24,228,  0, 30, 16,  0,246, 18, 12, 46, 34, 26, 36, 28, 14, 32,
+    0, 24,228,  0, 15, 18,  0,236,234,  0,235,210,  0,  0, 26,  0, 30, 16,
+    0,233,229,246,  0,  0,232,  0, 12, 46, 34, 10,  0, 36, 28, 14, 32,  0,
+   24,  4,228,  0, 18, 44, 42,  0, 18, 40, 44, 42, 38,  0, 15, 34,  0, 34,
+    0,  8,  0, 18,210, 10,  0,  2, 14,  0, 22, 16,  0, 18, 12,  0,  6,  0,
+    0,  4,  0,  0,  0, 15, 18,  0,  0,  2,  0, 18,  2,  0,234,235,  0, 10,
+    0,  2,  0,246,  0, 15, 18,  0, 30, 16,  0,233,229,246,  0,234,232,235,
+   12, 46, 34, 26, 36, 28, 14, 32,  0, 24,228,  0
+};
+
+static const unsigned short far ag_key_jmp[] = {
+    0,  0,  0,  0,  1,  0,  6,  9,  0, 15, 17,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0, 44,  0,  0, 50, 53, 57,  0, 67, 71,  0,  0,  0,
+    0, 34,  0, 96,101,104,  0, 19, 21, 23, 12, 15, 18, 25, 21, 27, 33, 39,
+   24, 27, 31, 73, 36, 82, 90, 39,109,114,122,127,  0,129,131,137,140,  0,
+  146,  0,  0,  0,  0,172,176,  0,186,190,  0,  0,201,  0,217,222,225,  0,
+   74,148,154,160,165, 77, 80,192, 83,203,211, 86,230,235,243,  0,  0,  0,
+    0,272,275,279,  0,289,293,  0,  0,304,  0,320,325,328,  0,106,248,254,
+  260,265,109,113,295,116,306,314,119,333,338,346,  0,  0,362,  0,364,369,
+    0,351,353,359,139,142,374,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,161,  0,431,434,  0,379,381,383,152,155,385,158,387,393,399,404,409,
+  414,163,423,165,439,444,  0,  0,455,  0,457,462,  0,446,452,187,190,467,
+    0,  0,  0,  0,  0,  0,  0,199,202,  0,  0,  0,  0,208,  0,472,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,215,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,529,532,  0,474,476,478,230,233,480,236,482,488,494,
+  499,504,509,518,521,239,537,542,  0,  0,  0,  0,261,  0,544,546,  0,548,
+  550,556,561,566,571,580,588,592,  0,597,  0,599,601,  0,606,608,  0,  0,
+    0,  0,612,287,  0,  0,  0,  0,  0,  0,  0,614,616,618,620,293,622,296,
+  624,  0,687,690,  0,626,628,630,632,634,636,638,640,646,652,657,662,667,
+  676,679,308,695,700,  0,  0,  0,  0,  0,  0,  0,759,762,  0,702,704,706,
+  708,330,710,333,712,718,724,729,734,739,748,751,336,767,772,  0,774,776,
+  778,780,  0,839,842,  0,782,784,786,788,790,792,798,804,809,814,819,828,
+  831,363,847,852,  0,907,910,  0,854,856,858,860,866,872,877,882,887,896,
+  899,383,915,920,  0,973,976,  0,922,924,926,932,938,943,948,953,962,965,
+  401,981,986,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,1015,1018,  0,1047,
+  1050,  0,988,990,992,418,421,994,424,996,1002,1008,1013,427,1022,1027,
+  1036,1039,430,1055,1060,1065,  0,1067,1069,1080,  0,1086,1088,1095,1106,
+  1112,  0,1120,1122,  0,1127,  0,1132,  0,1134,1136,1138,  0,  0,1155,  0,
+  1157,1162,  0,1140,1142,1148,1152,475,478,1167,  0,1172,  0,  0,  0,  0,
+  491,1176,  0,1178,1180,  0,1182,1184,  0,1186,  0,1188,  0,1190,  0,  0,
+    0,  0,1251,1254,  0,1192,1194,1196,509,1198,1200,1202,1204,1210,1216,
+  1221,1226,1231,1240,1243,512,1259,1264,  0
+};
+
+static const unsigned short far ag_key_index[] = {
+    4,  9, 43, 67,  0, 72, 72, 72, 90,123,  0,  0,  0,145, 67,  0,  0,  0,
+  168,168,  0,  0,  0, 72,  0,145,193,205,  0,211, 72,213,228,  0,242,264,
+   72, 72,264,266, 72,  0,  0, 72,  0,266,  0,269,  0,  0,  0,  0,279,266,
+    0,281,284,213,  0,290,299,  0,211,311, 67,228,242,242,242,264,242,242,
+  290,290,290,290,  0,  0,211,211,211,211,211,339,339,358,339,358,311,366,
+  386,386,386,386,404, 67,  0,205,205,205,213,433,  0,  0,228,228,  0, 72,
+    0,211,  0,211, 72,  0,454, 72,  0,458, 72,  0, 72,  0,464,467,464,467,
+   72,  0,213, 72,  0,469,290,211,  0,211,  0,290,  0,  0,  0,471,266,266,
+  266,481,489,145,  0,  0,  0,  0,  0,  4,  0,  0,358,  0,290,211,290,211,
+  290,211,211,211,211,211,290,211,290,  0,290,  0,  0,  0,290,  0,290,  0,
+  211,211,211,211,211,211,290,211,290,211,211,290,211,290,211,290,211,228,
+    0,  0,  0,266,  0,213, 72,  0, 72,  0,213,  0,  0, 72,  0, 72,  0,213,
+  211,211,213,213,211,  0, 72,  0,  0,213,213,213,213,213,266,  0,266,  0,
+  494,497,242,  0,211,311,  0,339,339,211,339,339,311,311,311,311,366,366,
+  339,339,339,339,500,311,311,366,386,386,386,386,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,213,213,503,211,266,266,505,  0,507,507,290,211,
+  515,213,213,213,213,213,213,290,211,211,211,  0,  0, 72,  0,213,  0,290,
+  211,  0,213,  0,  0
+};
+
+static const unsigned char far ag_key_ends[] = {
+99,116,105,111,110,0, 110,116,0, 116,114,105,110,103,0, 47,0, 
+42,0, 61,0, 38,0, 46,0, 61,0, 99,116,105,111,110,0, 
+117,116,116,111,110,0, 111,108,111,114,0, 102,97,117,108,116,0, 
+115,101,0, 116,114,121,0, 112,108,97,110,97,116,105,111,110,0, 
+101,108,100,0, 114,0, 105,103,104,108,105,103,104,116,0, 
+111,99,97,116,105,111,110,0, 114,111,109,112,116,0, 114,101,101,110,0, 
+122,101,0, 114,105,110,103,0, 105,116,108,101,0, 
+97,114,105,97,98,108,101,0, 104,105,108,101,0, 124,0, 47,0, 
+99,116,105,111,110,0, 110,116,0, 116,114,105,110,103,0, 42,0, 
+99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, 
+101,102,97,117,108,116,0, 116,114,121,0, 
+112,108,97,110,97,116,105,111,110,0, 101,108,100,0, 114,0, 
+105,103,104,108,105,103,104,116,0, 116,0, 111,99,97,116,105,111,110,0, 
+114,111,109,112,116,0, 114,101,101,110,0, 122,101,0, 
+114,105,110,103,0, 105,116,108,101,0, 97,114,105,97,98,108,101,0, 
+104,105,108,101,0, 99,116,105,111,110,0, 117,116,116,111,110,0, 
+111,108,111,114,0, 101,102,97,117,108,116,0, 115,101,0, 
+116,114,121,0, 112,108,97,110,97,116,105,111,110,0, 101,108,100,0, 
+114,0, 105,103,104,108,105,103,104,116,0, 116,0, 
+111,99,97,116,105,111,110,0, 114,111,109,112,116,0, 114,101,101,110,0, 
+122,101,0, 114,105,110,103,0, 105,116,108,101,0, 
+97,114,105,97,98,108,101,0, 104,105,108,101,0, 47,0, 
+99,116,105,111,110,0, 111,114,0, 116,0, 114,101,101,110,0, 
+114,105,110,103,0, 104,105,108,101,0, 61,0, 38,0, 46,0, 61,0, 
+99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, 
+110,116,114,121,0, 105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 
+111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
+105,116,108,101,0, 124,0, 99,116,105,111,110,0, 111,114,0, 116,0, 
+114,101,101,110,0, 114,105,110,103,0, 104,105,108,101,0, 47,0, 
+61,0, 38,0, 46,0, 61,0, 99,116,105,111,110,0, 117,116,116,111,110,0, 
+111,108,111,114,0, 110,116,114,121,0, 105,101,108,100,0, 
+105,103,104,108,105,103,104,116,0, 110,116,0, 
+111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
+105,116,108,101,0, 124,0, 47,0, 62,0, 47,0, 117,116,116,111,110,0, 
+111,108,111,114,0, 110,116,114,121,0, 105,101,108,100,0, 
+105,103,104,108,105,103,104,116,0, 111,99,97,116,105,111,110,0, 
+105,122,101,0, 105,116,108,101,0, 62,0, 47,0, 104,105,108,101,0, 
+47,0, 108,115,101,0, 42,0, 61,0, 38,0, 46,0, 47,0, 61,0, 
+124,0, 61,0, 38,0, 46,0, 47,0, 61,0, 61,0, 61,0, 
+99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, 
+110,116,114,121,0, 105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 
+110,116,0, 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
+105,116,108,101,0, 124,0, 61,0, 38,0, 46,0, 47,0, 61,0, 
+99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, 
+110,116,114,121,0, 105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 
+110,116,0, 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
+105,116,108,101,0, 124,0, 61,0, 61,0, 61,0, 61,0, 61,0, 38,0, 
+46,0, 47,0, 61,0, 99,116,105,111,110,0, 117,116,116,111,110,0, 
+111,108,111,114,0, 110,116,114,121,0, 105,101,108,100,0, 
+105,103,104,108,105,103,104,116,0, 110,116,0, 
+111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
+105,116,108,101,0, 124,0, 38,0, 46,0, 47,0, 99,116,105,111,110,0, 
+117,116,116,111,110,0, 111,108,111,114,0, 110,116,114,121,0, 
+105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 110,116,0, 
+111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
+105,116,108,101,0, 124,0, 46,0, 47,0, 99,116,105,111,110,0, 
+117,116,116,111,110,0, 111,108,111,114,0, 110,116,114,121,0, 
+105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 110,116,0, 
+111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
+105,116,108,101,0, 124,0, 61,0, 38,0, 46,0, 61,0, 
+99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0, 
+111,0, 115,101,0, 116,114,121,0, 105,101,108,100,0, 
+105,103,104,108,105,103,104,116,0, 110,116,0, 
+111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
+105,116,108,101,0, 104,105,108,101,0, 124,0, 47,0, 
+120,112,108,97,110,97,116,105,111,110,0, 114,111,109,112,116,0, 
+47,0, 101,102,97,117,108,116,0, 120,112,108,97,110,97,116,105,111,110,0, 
+114,111,109,112,116,0, 97,114,105,97,98,108,101,0, 42,0, 
+111,108,111,114,0, 111,108,111,114,0, 110,0, 47,0, 62,0, 111,0, 
+47,0, 99,116,105,111,110,0, 108,115,101,0, 111,114,0, 116,0, 
+114,101,101,110,0, 114,105,110,103,0, 104,105,108,101,0, 
+108,115,101,0, 102,0, 47,0, 102,0, 61,0, 61,0, 111,0, 102,0, 
+46,0, 61,0, 38,0, 46,0, 61,0, 61,0, 61,0, 99,116,105,111,110,0, 
+117,116,116,111,110,0, 111,108,111,114,0, 110,116,114,121,0, 
+105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 110,116,0, 
+111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0, 
+105,116,108,101,0, 124,0, 
+};
+
+#define AG_TCV(x) ag_tcv[(x)]
+
+static const unsigned short far ag_tcv[] = {
+   28,193,193,193,193,193,193,193,193, 11, 17, 11, 11, 11,193,193,193,193,
+  193,193,193,193,193,193,193,193, 28,193,193,193,193,193, 11,243, 50,204,
+  193,241,231,169,213,212,239,237,251,238,193,240,167,194,194,194,194,194,
+  194,194,195,195,226,216,207,215,209,227,217,261,261,261,261,261,261,262,
+  262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,
+  262,203, 70,202,230,262,193,261,261,261,261,261,261,262,262,262,262,262,
+  262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,206,208,205,
+  242,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+  193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+  193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+  193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+  193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+  193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+  193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+  193,193,193,193
+};
+
+#ifndef SYNTAX_ERROR
+#define SYNTAX_ERROR fprintf(stderr,"%s, line %d, column %d\n", \
+  (PCB).error_message, (PCB).line, (PCB).column)
+#endif
+
+#ifndef FIRST_LINE
+#define FIRST_LINE 1
+#endif
+
+#ifndef FIRST_COLUMN
+#define FIRST_COLUMN 1
+#endif
+
+#ifndef PARSER_STACK_OVERFLOW
+#define PARSER_STACK_OVERFLOW {fprintf(stderr, \
+   "\nParser stack overflow, line %d, column %d\n",\
+   (PCB).line, (PCB).column);}
+#endif
+
+#ifndef REDUCTION_TOKEN_ERROR
+#define REDUCTION_TOKEN_ERROR {fprintf(stderr, \
+    "\nReduction token error, line %d, column %d\n", \
+    (PCB).line, (PCB).column);}
+#endif
+
+
+#ifndef INPUT_CODE
+#define INPUT_CODE(T) (T)
+#endif
+
+typedef enum
+  {ag_accept_key, ag_set_key, ag_jmp_key, ag_end_key, ag_no_match_key,
+   ag_cf_accept_key, ag_cf_set_key, ag_cf_end_key} key_words;
+
+static void ag_get_key_word(int ag_k) {
+  int ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
+  const  unsigned char *ag_p;
+  int ag_ch;
+  while (1) {
+    switch (ag_key_act[ag_k]) {
+    case ag_cf_end_key: {
+      const  unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k];
+      do {
+        if ((ag_ch = *sp++) == 0) {
+          int ag_k1 = ag_key_parm[ag_k];
+          int ag_k2 = ag_key_pt[ag_k1];
+          if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) goto ag_fail;
+          (PCB).token_number = (dsl_token_type) ag_key_pt[ag_k1 + 1];
+          return;
+        }
+      } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch);
+      goto ag_fail;
+    }
+    case ag_end_key: {
+      const  unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k];
+      do {
+        if ((ag_ch = *sp++) == 0) {
+          (PCB).token_number = (dsl_token_type) ag_key_parm[ag_k];
+          return;
+        }
+      } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch);
+    }
+    case ag_no_match_key:
+ag_fail:
+      (PCB).la_ptr = (PCB).pointer + ag_save;
+      return;
+    case ag_cf_set_key: {
+      int ag_k1 = ag_key_parm[ag_k];
+      int ag_k2 = ag_key_pt[ag_k1];
+      ag_k = ag_key_jmp[ag_k];
+      if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) break;
+      ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
+      (PCB).token_number = (dsl_token_type) ag_key_pt[ag_k1+1];
+      break;
+    }
+    case ag_set_key:
+      ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
+      (PCB).token_number = (dsl_token_type) ag_key_parm[ag_k];
+    case ag_jmp_key:
+      ag_k = ag_key_jmp[ag_k];
+      break;
+    case ag_accept_key:
+      (PCB).token_number = (dsl_token_type) ag_key_parm[ag_k];
+      return;
+    case ag_cf_accept_key: {
+      int ag_k1 = ag_key_parm[ag_k];
+      int ag_k2 = ag_key_pt[ag_k1];
+      if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)])
+        (PCB).la_ptr = (PCB).pointer + ag_save;
+      else (PCB).token_number = (dsl_token_type) ag_key_pt[ag_k1+1];
+      return;
+    }
+    }
+    ag_ch = CONVERT_CASE(*(PCB).la_ptr++);
+    ag_p = &ag_key_ch[ag_k];
+    if (ag_ch <= 255) while (*ag_p < ag_ch) ag_p++;
+    if (ag_ch > 255 || *ag_p != ag_ch) {
+      (PCB).la_ptr = (PCB).pointer + ag_save;
+      return;
+    }
+    ag_k = (int) (ag_p - ag_key_ch);
+  }
+}
+
+
+#ifndef AG_NEWLINE
+#define AG_NEWLINE 10
+#endif
+
+#ifndef AG_RETURN
+#define AG_RETURN 13
+#endif
+
+#ifndef AG_FORMFEED
+#define AG_FORMFEED 12
+#endif
+
+#ifndef AG_TABCHAR
+#define AG_TABCHAR 9
+#endif
+
+static void ag_track(void) {
+  int ag_k = (int) ((PCB).la_ptr - (PCB).pointer);
+  while (ag_k--) {
+    switch (*(PCB).pointer++) {
+    case AG_NEWLINE:
+      (PCB).column = 1, (PCB).line++;
+    case AG_RETURN:
+    case AG_FORMFEED:
+      break;
+    case AG_TABCHAR:
+      (PCB).column += (TAB_SPACING) - ((PCB).column - 1) % (TAB_SPACING);
+      break;
+    default:
+      (PCB).column++;
+    }
+  }
+}
+
+
+static void ag_prot(void) {
+  int ag_k;
+  ag_k = 128 - ++(PCB).btsx;
+  if (ag_k <= (PCB).ssx) {
+    (PCB).exit_flag = AG_STACK_ERROR_CODE;
+    PARSER_STACK_OVERFLOW;
+    return;
+  }
+  (PCB).bts[(PCB).btsx] = (PCB).sn;
+  (PCB).bts[ag_k] = (PCB).ssx;
+  (PCB).vs[ag_k] = (PCB).vs[(PCB).ssx];
+  (PCB).ss[ag_k] = (PCB).ss[(PCB).ssx];
+  (PCB).cs[ag_k] = (PCB).cs[(PCB).ssx];
+}
+
+static void ag_undo(void) {
+  if ((PCB).drt == -1) return;
+  while ((PCB).btsx) {
+    int ag_k = 128 - (PCB).btsx;
+    (PCB).sn = (PCB).bts[(PCB).btsx--];
+    (PCB).ssx = (PCB).bts[ag_k];
+    (PCB).vs[(PCB).ssx] = (PCB).vs[ag_k];
+    (PCB).ss[(PCB).ssx] = (PCB).ss[ag_k];
+    (PCB).cs[(PCB).ssx] = (PCB).cs[ag_k];
+  }
+  (PCB).token_number = (dsl_token_type) (PCB).drt;
+  (PCB).ssx = (PCB).dssx;
+  (PCB).sn = (PCB).dsn;
+  (PCB).drt = -1;
+}
+
+
+
+static const int far ag_rtt[] = {
+  102,105,100,  0,152,155,153,156,  0
+};
+
+static const unsigned short far ag_tstt[] = {
+225,224,223,206,28,18,17,15,11,0,2,12,13,117,197,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212,
+  209,208,207,206,205,204,203,202,195,194,193,169,167,70,50,17,15,14,11,0,
+  12,13,
+15,11,0,2,12,13,
+225,224,223,206,28,18,17,0,8,22,23,24,25,26,27,41,114,115,116,198,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212,
+  209,208,207,206,205,204,203,202,195,194,193,169,167,70,50,17,11,0,20,21,
+262,261,15,11,0,2,12,13,117,197,
+262,261,15,11,0,2,12,13,117,197,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,195,194,193,
+  169,167,70,15,11,0,2,12,13,117,197,
+262,261,260,259,258,257,256,255,254,253,252,251,250,249,248,247,243,242,241,
+  240,239,238,237,231,230,227,226,225,224,223,221,218,217,216,215,214,213,
+  209,208,207,206,205,204,195,194,193,169,167,70,50,18,17,15,11,0,2,12,13,
+  117,197,
+262,261,260,259,258,257,256,255,254,253,252,251,250,249,248,247,243,242,241,
+  240,239,238,237,231,230,227,226,225,224,223,221,218,217,216,215,214,213,
+  211,209,208,207,206,205,204,195,194,193,169,167,70,50,28,18,17,15,11,0,
+  2,12,13,117,197,
+262,261,0,1,166,196,
+262,261,0,1,166,196,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,195,194,193,
+  169,167,70,0,9,201,222,
+262,261,251,247,243,242,241,240,239,238,237,231,230,227,226,225,224,223,221,
+  218,217,216,214,213,205,195,194,193,169,167,70,50,18,17,0,8,84,85,198,
+225,224,223,206,18,17,0,8,23,24,25,41,114,115,116,198,
+28,0,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212,
+  209,208,207,206,205,204,203,202,195,194,193,169,167,70,50,11,0,
+17,0,
+262,261,260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,
+  234,233,232,231,230,229,228,227,226,225,224,223,220,217,216,215,213,212,
+  210,209,208,207,206,205,204,203,195,194,167,28,18,17,15,11,0,2,12,13,
+  117,197,
+262,261,260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,
+  234,233,232,231,230,229,228,227,226,225,224,223,220,217,216,215,213,212,
+  210,209,208,207,206,205,204,203,195,194,167,28,18,17,15,11,0,2,12,13,
+  117,197,
+262,261,215,195,194,167,0,101,119,166,196,
+262,261,215,195,194,167,0,101,119,166,196,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,195,194,193,169,
+  167,70,0,
+15,11,0,2,12,13,117,197,
+206,0,38,39,41,
+18,17,0,8,198,
+262,261,251,247,243,242,241,240,239,238,237,231,230,227,226,225,224,223,221,
+  218,217,216,214,213,205,195,194,193,169,167,70,50,0,3,5,6,10,24,33,43,
+  49,75,76,80,86,87,88,89,91,92,93,95,96,97,98,99,100,102,105,109,110,114,
+  115,116,172,173,199,200,201,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209,
+  208,207,206,205,204,195,194,193,169,167,163,162,70,50,18,17,15,11,0,2,
+  12,13,117,197,
+262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
+  200,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,195,194,193,
+  169,167,70,15,11,0,2,12,13,201,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209,
+  208,207,206,205,204,195,194,193,169,167,70,50,18,17,0,3,5,6,8,10,34,38,
+  39,40,41,43,49,79,81,82,101,198,199,200,201,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212,
+  209,208,207,206,205,204,203,202,195,194,193,169,167,72,70,64,63,62,61,
+  60,59,58,57,56,55,54,50,11,0,51,53,65,66,67,68,69,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212,
+  209,208,207,206,205,204,203,202,195,194,193,169,167,70,50,17,11,0,46,48,
+260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,234,233,
+  232,231,230,229,228,227,226,225,224,223,217,216,215,212,210,209,208,207,
+  206,205,204,203,28,18,17,15,11,0,2,12,13,117,197,
+204,203,18,17,15,11,0,2,12,13,117,197,
+213,15,11,0,2,12,13,117,197,
+206,15,11,0,2,12,13,117,197,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,204,203,
+  195,194,193,169,167,70,18,17,15,11,0,2,12,13,117,197,
+203,0,29,
+213,15,11,0,2,12,13,117,197,
+213,0,45,
+206,0,41,
+262,261,15,11,0,2,12,13,117,197,
+217,215,0,
+204,0,34,
+213,0,45,
+260,255,254,253,252,250,249,248,205,18,17,0,8,40,174,176,177,178,179,181,
+  182,183,184,185,190,198,
+262,261,0,1,166,196,
+217,215,0,101,107,
+215,0,101,
+215,0,101,
+210,209,208,0,81,82,83,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,210,209,
+  208,207,206,205,195,194,193,169,167,70,50,18,17,0,3,5,6,10,31,35,38,39,
+  41,43,49,77,78,199,200,201,
+206,0,38,39,41,
+218,0,98,109,
+211,205,18,17,0,8,84,85,198,
+205,18,17,0,8,84,85,198,
+205,0,40,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,206,
+  204,195,194,193,169,167,163,162,70,50,15,11,0,2,12,13,117,197,
+262,261,195,194,167,0,119,166,196,
+262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
+  200,
+262,261,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,7,34,38,39,41,45,
+  49,101,108,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245,
+217,203,0,29,107,
+225,224,223,216,206,205,204,28,18,17,0,34,103,104,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212,
+  209,208,207,206,205,204,203,202,195,194,193,167,72,70,64,63,62,61,60,59,
+  58,57,56,55,54,50,11,0,53,65,66,67,68,69,170,
+195,194,167,0,
+194,167,0,
+261,195,194,167,0,74,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209,
+  208,207,206,205,204,195,194,193,169,167,70,50,18,17,15,11,0,2,12,13,117,
+  197,
+260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,234,233,
+  232,231,230,229,228,227,226,225,224,223,217,216,215,212,210,209,208,207,
+  206,205,204,203,28,18,17,15,11,0,2,12,13,117,197,
+260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,234,233,
+  232,231,230,229,228,227,226,225,224,223,217,216,215,212,210,209,208,207,
+  206,205,204,203,28,18,17,15,11,0,2,12,13,117,197,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+213,0,45,154,
+262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,151,155,156,166,196,200,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,108,141,142,143,148,149,150,151,152,153,155,156,
+  159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,108,141,142,143,148,149,150,151,152,153,155,156,
+  159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,108,141,142,143,148,149,150,151,152,153,155,156,
+  159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,108,141,142,143,148,149,150,151,152,153,155,156,
+  159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+241,240,239,0,144,145,147,
+238,237,0,141,142,
+217,203,0,29,107,
+236,210,0,83,139,
+235,234,233,232,209,207,204,0,34,79,82,133,134,136,137,
+235,234,209,207,0,79,82,136,137,
+233,232,0,133,134,
+231,0,131,
+230,0,129,
+208,0,81,
+229,0,126,
+228,227,0,121,124,
+225,224,223,216,206,205,28,18,17,0,103,104,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,216,195,194,193,169,
+  167,70,0,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209,
+  208,207,206,205,204,195,194,193,169,167,163,162,70,50,18,17,15,11,0,2,
+  12,13,117,197,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209,
+  208,207,206,205,204,195,194,193,169,167,163,162,70,50,18,17,15,11,0,2,
+  12,13,117,197,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,209,
+  208,207,206,205,204,195,194,193,169,167,163,162,70,50,18,17,15,11,0,2,
+  12,13,117,197,
+203,0,29,
+262,261,260,255,254,253,252,251,250,249,248,246,243,242,241,240,239,238,237,
+  236,235,234,233,232,231,230,229,228,227,226,225,224,223,219,218,217,216,
+  215,213,212,211,210,209,208,207,206,205,204,203,202,195,194,193,169,167,
+  70,50,28,18,17,15,11,0,2,12,13,117,197,
+194,167,0,
+261,195,194,167,0,73,74,
+194,167,0,
+194,167,0,
+213,0,43,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
+  194,193,169,167,70,50,15,11,0,2,12,13,117,197,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
+  194,193,169,167,70,50,0,30,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
+  193,169,167,70,50,0,3,5,6,10,43,49,199,200,201,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+206,15,11,0,2,12,13,117,197,
+206,0,41,
+259,258,206,205,18,17,0,8,38,39,40,41,188,189,198,
+206,15,11,0,2,12,13,117,197,
+206,0,41,
+259,258,257,256,205,18,17,0,8,40,186,187,188,189,198,
+215,15,11,0,2,12,13,117,197,
+215,0,101,
+215,15,11,0,2,12,13,117,197,
+215,0,101,
+254,15,11,0,2,12,13,117,197,
+254,0,176,184,
+254,15,11,0,2,12,13,117,197,
+254,0,176,184,
+215,15,11,0,2,12,13,117,197,
+215,0,101,
+18,17,0,8,198,
+215,15,11,0,2,12,13,117,197,
+215,0,101,
+262,261,220,195,194,167,0,111,119,166,196,
+262,261,215,213,206,204,195,194,169,167,163,162,50,15,11,0,2,12,13,117,197,
+262,261,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,7,34,38,39,41,45,
+  49,101,108,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245,
+262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
+  200,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
+  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,206,
+  204,195,194,193,169,167,163,162,70,50,15,11,0,2,12,13,117,197,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
+  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
+  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
+  193,169,167,70,50,0,3,5,6,10,33,43,49,76,199,200,201,
+203,0,29,
+204,0,34,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
+  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
+210,209,208,207,205,18,17,0,79,
+262,261,251,247,243,242,241,240,239,238,237,231,230,227,226,225,224,223,221,
+  218,217,216,214,213,195,194,193,169,167,70,50,18,17,0,3,5,6,8,10,24,33,
+  43,49,75,76,80,89,91,92,93,95,96,97,98,99,100,102,105,109,110,114,115,
+  116,172,173,198,199,200,201,
+211,0,90,
+262,261,251,247,243,242,241,240,239,238,237,231,230,227,226,225,224,223,221,
+  218,217,216,214,213,195,194,193,169,167,70,50,18,17,0,3,5,6,8,10,24,33,
+  43,49,75,76,80,89,91,92,93,95,96,97,98,99,100,102,105,109,110,114,115,
+  116,172,173,198,199,200,201,
+212,204,0,34,44,
+217,203,0,29,107,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
+  194,193,169,167,70,50,0,158,
+213,0,45,
+262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,150,151,155,156,166,196,200,
+225,224,223,206,205,28,18,17,15,11,0,2,12,13,117,197,
+169,0,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
+  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
+235,234,233,232,212,209,207,204,0,34,44,79,82,133,134,136,137,
+212,0,44,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,108,141,142,143,146,148,149,150,151,152,153,155,
+  156,159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,108,141,142,143,146,148,149,150,151,152,153,155,
+  156,159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,108,141,142,143,148,149,150,151,152,153,155,156,
+  159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,108,140,141,142,143,148,149,150,151,152,153,155,
+  156,159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,108,140,141,142,143,148,149,150,151,152,153,155,
+  156,159,160,161,164,166,196,200,244,245,
+262,261,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,7,34,38,39,41,45,
+  49,101,108,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,108,138,140,141,142,143,148,149,150,151,152,153,
+  155,156,159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,108,138,140,141,142,143,148,149,150,151,152,153,
+  155,156,159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
+  200,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
+  200,
+262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
+  200,
+262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
+  200,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
+  200,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,215,213,206,50,0,1,5,38,39,41,45,49,101,106,150,151,155,156,166,196,
+  200,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,108,135,138,140,141,142,143,148,149,150,151,152,
+  153,155,156,159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,108,135,138,140,141,142,143,148,149,150,151,152,
+  153,155,156,159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,108,135,138,140,141,142,143,148,149,150,151,152,
+  153,155,156,159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,108,135,138,140,141,142,143,148,149,150,151,152,
+  153,155,156,159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,106,108,132,135,138,140,141,142,143,148,149,150,
+  151,152,153,155,156,159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,106,108,132,135,138,140,141,142,143,148,149,150,
+  151,152,153,155,156,159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,106,108,130,132,135,138,140,141,142,143,148,149,
+  150,151,152,153,155,156,159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,106,108,128,130,132,135,138,140,141,142,143,148,
+  149,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,106,108,127,128,130,132,135,138,140,141,142,143,
+  148,149,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,106,108,125,127,128,130,132,135,138,140,141,142,
+  143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,101,106,108,123,125,127,128,130,132,135,138,140,141,
+  142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,200,244,
+  245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+261,195,194,167,0,74,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,215,213,212,
+  209,208,207,206,205,204,203,202,195,194,193,169,167,70,50,17,11,0,46,48,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
+  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
+212,0,44,
+203,0,29,
+212,0,44,
+18,17,0,8,198,
+215,15,11,0,2,12,13,117,197,
+215,0,101,
+215,15,11,0,2,12,13,117,197,
+215,0,101,
+18,17,0,8,198,
+215,0,101,
+215,0,101,
+215,15,11,0,2,12,13,117,197,
+215,0,101,
+215,15,11,0,2,12,13,117,197,
+215,0,101,
+18,17,0,8,198,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+18,17,0,8,198,
+18,17,0,8,198,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
+  193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
+  194,193,169,167,70,50,15,11,0,2,12,13,117,197,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
+  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
+215,0,101,
+216,205,204,18,17,0,34,103,104,
+216,205,18,17,0,103,104,
+204,0,34,
+204,0,34,
+204,0,34,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,210,209,
+  208,206,205,195,194,193,169,167,70,50,18,17,0,3,5,6,10,31,35,38,39,41,
+  43,49,77,78,199,200,201,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
+  194,193,169,167,70,50,0,3,5,6,10,35,38,39,41,43,49,199,200,201,
+204,0,34,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
+  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
+214,206,18,17,15,11,0,2,12,13,117,197,
+214,206,18,17,0,8,38,39,41,84,85,198,
+260,255,254,253,252,251,250,249,248,246,241,240,239,238,237,236,235,234,233,
+  232,231,230,229,228,227,226,225,224,223,217,216,215,212,210,209,208,207,
+  206,205,204,203,28,18,17,15,11,0,2,12,13,117,197,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
+  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+217,203,0,29,107,
+212,204,0,34,44,
+241,240,239,0,144,145,147,
+241,240,239,0,144,145,147,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+238,237,0,141,142,
+238,237,0,141,142,
+204,0,34,
+204,0,34,
+204,0,34,
+204,0,34,
+204,0,34,
+204,0,34,
+236,210,0,83,139,
+236,210,0,83,139,
+236,210,0,83,139,
+236,210,0,83,139,
+235,234,209,207,204,0,34,79,82,136,137,
+235,234,209,207,0,79,82,136,137,
+235,234,209,207,0,79,82,136,137,
+233,232,0,133,134,
+231,0,131,
+230,0,129,
+208,0,81,
+229,0,126,
+226,0,122,
+204,202,0,32,34,
+206,0,38,39,41,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
+  193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
+  193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
+  193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
+  193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
+  193,169,167,70,50,0,3,5,6,43,49,175,191,199,200,201,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,195,194,193,
+  169,167,70,0,3,201,
+251,0,180,
+251,0,180,
+251,0,180,
+203,0,29,
+204,18,17,0,8,34,198,
+219,206,204,0,34,112,113,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+210,209,208,205,18,17,0,
+210,209,208,205,204,18,17,0,34,
+214,0,92,93,
+204,202,0,32,34,
+246,0,157,
+246,212,0,44,157,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+260,255,254,253,252,251,250,249,248,246,235,234,233,232,231,230,229,228,227,
+  226,225,224,223,217,216,212,209,208,207,206,205,204,203,28,18,17,15,11,
+  0,2,12,13,117,197,
+204,18,17,0,8,34,198,
+204,18,17,0,8,34,198,
+204,18,17,0,8,34,198,
+204,18,17,0,8,34,198,
+204,18,17,0,8,34,198,
+18,17,0,8,198,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
+  194,193,169,167,70,50,0,192,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,195,194,
+  193,169,167,70,50,0,3,5,6,43,49,191,199,200,201,
+206,15,11,0,2,12,13,117,197,
+206,0,38,39,41,
+216,205,18,17,0,103,104,
+206,0,38,39,41,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,15,11,0,
+  2,12,13,117,197,
+262,261,243,242,238,237,215,213,206,204,195,194,169,167,163,162,50,0,1,4,5,
+  7,34,38,39,41,45,49,94,101,106,108,120,123,125,127,128,130,132,135,138,
+  140,141,142,143,148,149,150,151,152,153,155,156,159,160,161,164,166,196,
+  200,244,245,
+262,261,251,243,242,241,240,239,238,237,231,230,227,226,217,216,213,206,195,
+  194,193,169,167,70,50,0,3,5,6,10,31,35,38,39,41,43,49,199,200,201,
+203,0,29,
+212,0,44,
+204,202,0,32,34,
+
+};
+
+
+static unsigned const char far ag_astt[6809] = {
+  8,8,8,8,8,8,8,1,1,7,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+  9,9,9,9,9,9,9,9,9,9,9,9,9,1,3,9,7,3,1,1,9,5,3,3,1,1,1,1,1,8,1,1,7,1,0,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,8,1,7,1,1,5,5,1,1,7,1,1,1,1,3,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,7,
+  1,2,2,1,1,7,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,8,8,
+  8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,5,8,8,8,8,8,8,8,1,1,7,1,1,1,1,
+  1,1,1,1,1,1,5,3,3,3,3,1,1,1,1,1,3,7,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+  9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,5,3,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,
+  1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,10,10,10,7,1,2,2,
+  2,1,1,1,10,10,10,7,1,2,2,2,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+  10,10,10,10,10,4,1,1,5,1,1,1,1,3,1,7,2,1,2,1,1,5,3,1,2,2,2,1,2,2,2,2,2,2,2,
+  2,2,2,2,1,1,1,1,1,2,2,1,2,8,2,2,2,2,2,2,2,7,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,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,2,7,1,1,2,
+  1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,
+  1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,
+  1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,9,5,3,3,1,1,2,2,2,2,2,2,2,
+  2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,7,2,3,3,3,1,3,2,1,3,2,
+  1,1,3,3,3,3,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+  2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,7,3,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,
+  2,2,2,2,2,2,2,2,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,3,1,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  1,1,7,1,1,1,1,3,5,5,5,5,1,1,7,1,1,1,1,3,5,1,1,7,1,1,1,1,3,5,1,1,7,1,1,1,1,
+  3,10,10,10,10,10,10,10,10,10,10,10,10,10,10,5,10,5,5,5,10,10,10,10,10,10,5,
+  5,1,1,7,1,1,1,1,3,1,5,1,5,1,1,7,1,1,1,1,3,1,7,1,1,7,2,5,5,1,1,7,1,1,1,1,3,
+  4,4,4,1,4,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,7,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  7,1,2,2,1,1,7,1,1,1,7,1,1,7,1,1,1,1,7,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+  2,2,5,5,5,8,1,5,2,2,2,2,2,2,2,5,5,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,1,1,1,7,2,
+  1,2,1,5,3,1,8,5,1,1,7,1,1,1,1,5,1,1,7,1,1,3,1,1,7,3,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,10,10,10,4,2,2,2,1,
+  1,1,1,1,2,7,1,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,
+  2,1,2,1,2,1,2,1,1,1,2,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,5,1,1,5,5,5,1,5,5,
+  1,5,5,5,7,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,7,1,1,1,1,1,1,1,10,10,10,5,10,10,5,2,10,
+  10,10,5,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,
+  1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,
+  1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,7,1,2,1,1,1,1,1,
+  2,7,1,2,2,1,2,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,
+  2,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,
+  2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1,2,1,1,1,2,1,1,
+  2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,
+  2,1,2,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,5,1,1,1,1,1,5,1,1,1,1,5,1,1,1,
+  1,5,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,5,1,1,1,5,1,1,
+  5,1,1,5,1,1,5,1,1,1,5,1,1,5,5,5,1,5,5,5,5,5,7,2,2,10,10,10,10,10,10,10,10,
+  10,10,10,10,10,10,10,10,10,10,10,10,10,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,
+  3,1,4,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,2,2,
+  7,2,1,1,1,7,1,1,2,2,5,2,2,5,2,7,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,1,1,7,1,1,1,1,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+  4,7,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,2,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
+  1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,2,2,1,1,1,2,2,2,1,1,1,5,1,1,7,1,1,1,1,3,1,7,2,1,1,1,1,1,1,7,3,1,1,1,2,
+  1,1,1,5,1,1,7,1,1,1,1,3,1,7,2,1,1,1,1,1,1,1,7,3,1,1,1,1,1,1,5,1,1,7,1,1,1,
+  1,3,1,7,1,5,1,1,7,1,1,1,1,3,1,7,1,5,1,1,7,1,1,1,1,3,1,7,1,1,5,1,1,7,1,1,1,
+  1,3,1,7,1,1,5,1,1,7,1,1,1,1,3,1,7,1,1,1,7,2,1,5,1,1,7,1,1,1,1,3,1,7,1,1,1,
+  1,10,10,10,7,1,2,2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,
+  2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,
+  1,1,1,2,7,1,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,
+  2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
+  1,1,1,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,
+  3,1,1,1,2,1,2,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,1,1,7,1,1,1,1,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,
+  7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,
+  2,2,2,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+  2,2,2,2,2,7,2,3,3,1,1,1,1,1,1,1,1,1,5,1,1,4,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+  2,2,2,1,2,2,2,2,2,2,2,5,2,3,3,1,1,1,2,1,2,1,1,1,1,1,4,4,4,1,4,4,4,7,1,2,2,
+  2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,1,1,5,1,3,3,3,1,
+  3,1,1,1,3,1,1,3,2,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,2,2,2,1,
+  2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,1,1,5,1,3,3,3,1,3,1,
+  1,1,3,1,1,3,2,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,3,1,1,7,1,
+  1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,7,1,1,1,1,1,1,2,
+  7,1,1,2,1,2,1,1,1,1,1,2,2,2,2,1,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,2,7,2,2,2,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,7,1,3,1,1,1,1,1,1,1,7,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1,2,1,1,1,
+  2,1,1,2,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1,2,1,
+  1,1,2,1,1,2,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1,
+  2,1,1,1,2,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
+  1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,2,1,2,1,2,1,
+  2,1,1,1,2,1,1,2,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,
+  7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,
+  2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,
+  1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,2,7,1,1,2,1,
+  2,1,1,1,1,1,1,2,2,2,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,
+  1,1,1,1,1,2,7,1,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,2,7,1,1,2,1,2,1,1,
+  1,1,1,1,2,2,2,2,1,1,1,1,1,1,2,7,1,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,2,7,1,1,2,1,2,1,1,1,1,1,
+  1,2,2,2,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,2,
+  7,1,1,2,1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,
+  1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,
+  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,
+  1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
+  1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,
+  2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,
+  1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,
+  3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,
+  2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,
+  2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,
+  1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,
+  1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,
+  2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,
+  1,1,2,10,10,10,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,2,2,2,
+  2,2,2,2,2,2,2,2,7,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,
+  2,3,3,1,1,1,2,1,2,1,1,1,1,1,1,7,1,1,4,1,1,7,2,1,1,7,2,1,5,1,1,7,1,1,1,1,3,
+  1,7,1,5,1,1,7,1,1,1,1,3,1,7,1,1,1,7,2,1,1,7,1,1,7,1,5,1,1,7,1,1,1,1,3,1,7,
+  1,5,1,1,7,1,1,1,1,3,1,7,1,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,
+  1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,
+  2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,7,2,1,1,
+  1,7,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,2,2,2,2,2,2,2,2,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+  2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,1,7,1,1,5,1,5,5,7,1,2,
+  2,1,5,5,5,7,2,2,1,4,1,1,4,1,1,4,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,5,5,
+  1,5,2,2,2,2,2,2,2,5,5,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,
+  2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,2,2,1,2,1,1,1,1,1,1,4,1,2,2,2,2,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,5,
+  5,5,5,1,1,7,1,1,1,1,3,8,1,1,1,7,1,2,1,2,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,
+  3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,1,1,2,1,2,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,4,1,1,1,1,7,
+  1,3,1,1,1,4,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,
+  1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,
+  2,1,1,1,1,1,4,1,1,1,1,4,1,1,1,4,1,1,4,1,1,4,1,1,4,1,1,4,1,1,4,1,1,1,4,1,1,
+  1,1,4,1,1,1,1,4,1,1,1,1,4,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1,1,
+  1,1,4,1,1,1,1,1,1,4,1,1,1,4,1,1,4,1,1,4,1,1,4,1,1,7,1,1,1,7,2,1,1,7,2,1,2,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,2,2,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,2,2,2,2,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,
+  2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,7,1,1,7,1,1,7,1,1,4,1,1,1,1,7,2,1,1,1,8,1,
+  7,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,4,4,4,4,4,4,7,4,
+  4,4,4,1,4,4,7,1,1,7,1,1,1,1,7,2,1,1,7,1,1,1,7,2,1,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,
+  1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,
+  1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  1,1,7,1,1,1,1,3,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,
+  1,1,7,2,1,1,1,1,7,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,
+  1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,2,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,
+  2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,
+  2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,
+  4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,2,2,2,2,2,2,2,2,2,2,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,5,1,1,7,1,1,1,1,3,1,7,2,1,
+  2,1,5,5,5,7,2,2,1,7,2,1,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,
+  3,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,7,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,
+  2,2,2,2,2,2,1,2,2,2,2,2,2,2,7,2,3,3,1,1,1,2,1,2,1,1,1,1,1,1,4,1,1,7,2,1,1,
+  7,2,1
+};
+
+
+static const unsigned short far ag_pstt[] = {
+3,3,3,3,3,3,3,1,2,0,2,2,1,2,3,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,3,5,
+  1,6,1,
+1,128,472,128,128,1,
+5,6,7,8,15,4,9,3,14,0,14,14,14,14,15,13,12,11,10,9,
+16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+  16,16,16,16,16,16,16,16,16,17,16,4,16,17,
+471,471,1,2,5,2,2,1,2,500,
+471,471,1,2,6,2,2,1,2,499,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,1,2,7,2,2,1,2,498,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,8,2,2,1,
+  2,481,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,
+  9,2,2,1,2,473,
+18,19,10,20,130,130,
+18,19,11,21,130,130,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,12,24,22,
+  23,
+26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,88,
+  26,26,26,26,26,26,26,4,9,13,25,25,26,9,
+5,6,7,8,4,9,19,17,17,17,17,13,12,11,10,9,
+20,15,
+9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,11,
+12,17,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,18,2,2,1,2,
+  537,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,19,2,2,1,2,
+  536,
+18,19,27,132,132,132,20,28,132,131,131,
+18,19,27,132,132,132,21,29,132,131,131,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,126,
+1,30,471,30,30,1,30,497,
+8,24,123,31,35,
+4,9,89,87,9,
+30,30,30,37,30,30,30,30,30,30,30,30,30,30,30,5,6,7,43,36,30,30,40,41,58,30,
+  30,30,30,30,30,47,26,44,22,21,39,57,45,33,32,57,53,52,57,56,58,57,56,54,
+  46,57,57,57,55,55,51,50,49,41,48,12,11,10,47,42,35,34,38,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,27,
+  2,2,1,2,490,
+18,19,27,59,8,47,28,60,63,193,31,35,61,32,62,64,63,63,191,192,130,130,34,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,29,60,83,85,83,77,
+  193,31,35,82,32,95,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,1,128,472,
+  128,128,1,96,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,27,41,98,97,99,8,101,69,30,
+  30,30,30,30,30,47,4,9,31,23,22,21,37,100,39,38,31,34,35,33,32,39,39,39,
+  39,9,35,34,38,
+49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
+  49,49,49,49,49,49,49,103,102,61,60,59,58,57,56,55,54,53,52,51,46,49,32,
+  48,50,50,50,105,104,50,
+43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,44,40,43,43,43,43,43,43,
+  43,43,43,43,43,43,43,43,43,43,43,33,42,106,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,1,2,34,2,2,1,2,475,
+471,471,471,471,1,2,35,2,2,1,2,474,
+471,1,2,36,2,2,1,2,493,
+471,1,2,37,2,2,1,2,522,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,471,31,471,471,471,31,31,31,31,31,
+  31,471,471,1,2,38,2,2,1,2,476,
+107,26,108,
+471,1,2,40,2,2,1,2,489,
+59,41,109,
+8,42,213,
+471,471,1,2,43,2,2,1,2,496,
+118,118,23,
+69,83,110,
+59,46,111,
+112,115,126,118,120,122,124,129,101,4,9,47,214,212,130,128,125,123,121,119,
+  117,114,127,116,113,9,
+18,19,48,131,130,130,
+132,27,49,134,133,
+27,50,135,
+27,51,136,
+137,98,97,52,140,139,138,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,73,73,73,144,8,73,30,30,
+  30,30,30,30,47,73,73,53,23,22,21,141,142,142,33,31,35,33,32,143,144,35,
+  34,38,
+8,54,103,31,35,
+36,111,110,41,
+146,88,4,9,56,145,145,146,9,
+88,4,9,57,147,147,91,9,
+101,58,93,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,1,2,59,2,2,1,2,488,
+18,19,132,132,132,183,132,131,131,
+18,19,27,59,8,47,61,60,63,193,31,35,61,32,62,148,63,63,191,192,130,130,34,
+18,19,27,59,8,69,207,207,65,205,201,201,47,62,60,194,149,194,77,193,31,35,
+  82,32,62,194,149,149,194,76,191,192,68,67,66,201,130,130,34,71,70,
+132,107,184,150,151,
+113,113,113,153,113,113,69,113,113,113,64,152,125,125,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+  154,154,154,154,154,154,154,154,154,154,154,154,103,102,61,60,59,58,57,
+  56,55,54,53,52,51,154,154,65,154,154,154,105,104,154,154,
+208,208,208,198,
+206,206,197,
+204,202,202,202,196,202,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,69,2,2,1,2,
+  479,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,1,2,70,2,2,1,2,520,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,1,2,71,2,2,1,2,519,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,72,
+  2,2,1,2,518,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,73,
+  2,2,1,2,517,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,74,
+  2,2,1,2,513,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,75,
+  2,2,1,2,512,
+59,76,155,181,
+18,19,27,59,8,47,77,60,178,193,31,35,61,32,62,178,191,192,130,130,34,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,78,60,174,149,174,77,
+  193,31,35,82,32,62,174,81,80,174,79,78,149,149,174,76,191,192,68,67,66,
+  201,130,130,34,71,70,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,79,60,173,149,173,77,
+  193,31,35,82,32,62,173,81,80,173,79,78,149,149,173,76,191,192,68,67,66,
+  201,130,130,34,71,70,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,80,60,172,149,172,77,
+  193,31,35,82,32,62,172,81,80,172,79,78,149,149,172,76,191,192,68,67,66,
+  201,130,130,34,71,70,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,81,60,171,149,171,77,
+  193,31,35,82,32,62,171,81,80,171,79,78,149,149,171,76,191,192,68,67,66,
+  201,130,130,34,71,70,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,82,60,83,85,83,77,
+  193,31,35,82,32,157,62,156,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+158,160,162,162,163,161,159,
+74,75,159,165,164,
+132,107,184,150,166,
+168,137,150,167,169,
+170,172,176,178,98,99,69,87,152,175,174,179,177,173,171,
+170,172,98,99,145,183,182,181,180,
+176,178,143,185,184,
+186,141,187,
+188,139,189,
+97,137,190,
+191,135,192,
+193,195,133,196,194,
+113,113,113,153,113,113,113,113,113,95,124,124,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,129,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,97,
+  2,2,1,2,483,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,98,
+  2,2,1,2,484,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,99,
+  2,2,1,2,482,
+107,36,108,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,1,2,101,2,2,1,2,480,
+67,67,102,
+204,197,197,197,103,197,197,
+69,69,65,
+68,68,64,
+41,106,198,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,1,2,107,2,2,1,2,478,
+24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,
+  108,199,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,109,60,83,85,83,77,
+  193,31,35,82,32,200,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,110,
+  23,22,21,201,33,32,35,34,38,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,111,60,83,85,83,77,
+  193,31,35,82,32,202,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+471,1,2,112,2,2,1,2,535,
+8,113,230,
+204,206,8,101,4,9,114,231,203,31,208,35,207,205,9,
+471,1,2,115,2,2,1,2,530,
+8,116,224,
+204,206,211,213,101,4,9,117,225,215,214,212,210,209,9,
+471,1,2,118,2,2,1,2,528,
+27,119,216,
+471,1,2,120,2,2,1,2,527,
+27,121,217,
+471,1,2,122,2,2,1,2,525,
+126,123,218,127,
+471,1,2,124,2,2,1,2,524,
+126,125,219,127,
+471,1,2,126,2,2,1,2,529,
+27,127,220,
+4,9,128,216,9,
+471,1,2,129,2,2,1,2,523,
+27,130,221,
+18,19,222,132,132,132,131,223,132,131,131,
+471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,132,2,2,1,2,492,
+18,19,27,59,8,69,207,207,65,205,201,201,47,133,60,224,149,224,77,193,31,35,
+  82,32,62,224,149,149,224,76,191,192,68,67,66,201,130,130,34,71,70,
+18,19,27,59,8,47,134,60,63,193,31,35,61,32,62,225,63,63,191,192,130,130,34,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,135,60,83,85,83,77,
+  193,31,35,82,32,226,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
+  136,23,22,21,141,227,227,33,31,35,33,32,35,34,38,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,1,2,137,2,2,1,2,485,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
+  138,23,22,21,141,228,228,33,31,35,33,32,35,34,38,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
+  139,23,22,21,141,229,229,33,31,35,33,32,35,34,38,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,140,
+  23,22,21,39,45,33,32,230,35,34,38,
+107,32,108,
+69,84,231,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
+  74,23,22,21,141,232,232,33,31,35,33,32,35,34,38,
+80,80,80,99,75,75,75,144,233,
+30,30,30,37,30,30,30,30,30,30,30,30,30,30,30,5,6,7,43,36,30,30,40,41,30,30,
+  30,30,30,30,47,4,9,89,44,22,21,87,39,96,45,33,32,96,53,52,96,99,54,46,
+  96,96,96,55,55,51,50,49,41,48,12,11,10,47,42,9,35,34,38,
+234,92,235,
+30,30,30,37,30,30,30,30,30,30,30,30,30,30,30,5,6,7,43,36,30,30,40,41,30,30,
+  30,30,30,30,47,4,9,89,44,22,21,87,39,95,45,33,32,95,53,52,95,100,54,46,
+  95,95,95,55,55,51,50,49,41,48,12,11,10,47,42,9,35,34,38,
+236,69,148,152,195,
+132,107,149,150,166,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+  188,188,188,188,188,188,150,237,
+59,151,238,
+18,19,27,59,8,47,152,60,239,193,31,35,61,32,62,239,239,191,192,130,130,34,
+471,471,471,471,471,471,471,471,1,2,153,2,2,1,2,491,
+209,154,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
+  155,23,22,21,141,240,240,33,31,35,33,32,35,34,38,
+170,172,176,178,236,98,99,69,156,152,195,175,174,179,177,173,171,
+236,157,180,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,158,
+  2,2,1,2,516,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,159,60,169,149,169,
+  77,193,31,35,82,32,62,169,81,80,169,168,79,78,149,149,169,76,191,192,68,
+  67,66,201,130,130,34,71,70,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,160,
+  2,2,1,2,515,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,161,60,169,149,169,
+  77,193,31,35,82,32,62,169,81,80,169,167,79,78,149,149,169,76,191,192,68,
+  67,66,201,130,130,34,71,70,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,162,
+  2,2,1,2,514,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,163,60,166,149,166,
+  77,193,31,35,82,32,62,166,81,80,166,79,78,149,149,166,76,191,192,68,67,
+  66,201,130,130,34,71,70,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,164,60,241,149,241,
+  77,193,31,35,82,32,62,241,241,81,80,241,79,78,149,149,241,76,191,192,68,
+  67,66,201,130,130,34,71,70,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,165,60,242,149,242,
+  77,193,31,35,82,32,62,242,242,81,80,242,79,78,149,149,242,76,191,192,68,
+  67,66,201,130,130,34,71,70,
+18,19,27,59,8,69,207,207,65,205,201,201,47,166,60,177,149,177,77,193,31,35,
+  243,32,62,177,149,149,177,76,191,192,68,67,66,201,130,130,34,71,70,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,167,60,83,149,83,77,
+  193,31,35,82,32,62,83,244,83,81,80,83,79,78,149,149,83,76,191,192,68,67,
+  66,201,130,130,34,71,70,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,168,
+  2,2,1,2,511,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,169,60,83,149,83,77,
+  193,31,35,82,32,62,83,245,83,81,80,83,79,78,149,149,83,76,191,192,68,67,
+  66,201,130,130,34,71,70,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,170,
+  2,2,1,2,510,
+18,19,27,59,8,47,171,60,63,193,31,35,61,32,62,246,63,63,191,192,130,130,34,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,172,
+  2,2,1,2,509,
+18,19,27,59,8,47,173,60,63,193,31,35,61,32,62,247,63,63,191,192,130,130,34,
+18,19,27,59,8,47,174,60,63,193,31,35,61,32,62,248,63,63,191,192,130,130,34,
+18,19,27,59,8,47,175,60,63,193,31,35,61,32,62,249,63,63,191,192,130,130,34,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,176,
+  2,2,1,2,508,
+18,19,27,59,8,47,177,60,63,193,31,35,61,32,62,250,63,63,191,192,130,130,34,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,178,
+  2,2,1,2,507,
+18,19,27,59,8,47,179,60,63,193,31,35,61,32,62,251,63,63,191,192,130,130,34,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,180,60,83,149,83,77,
+  193,31,35,82,32,62,83,252,84,83,81,80,83,79,78,149,149,83,76,191,192,68,
+  67,66,201,130,130,34,71,70,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,181,60,83,149,83,77,
+  193,31,35,82,32,62,83,253,84,83,81,80,83,79,78,149,149,83,76,191,192,68,
+  67,66,201,130,130,34,71,70,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,182,60,83,149,83,77,
+  193,31,35,82,32,62,83,254,84,83,81,80,83,79,78,149,149,83,76,191,192,68,
+  67,66,201,130,130,34,71,70,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,183,60,83,149,83,77,
+  193,31,35,82,32,62,83,255,84,83,81,80,83,79,78,149,149,83,76,191,192,68,
+  67,66,201,130,130,34,71,70,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,184,60,83,85,83,77,
+  193,31,35,82,32,62,256,83,257,86,84,83,81,80,83,79,78,85,85,83,76,191,
+  192,68,67,66,201,130,130,34,71,70,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,185,60,83,85,83,77,
+  193,31,35,82,32,62,256,83,258,86,84,83,81,80,83,79,78,85,85,83,76,191,
+  192,68,67,66,201,130,130,34,71,70,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,186,
+  2,2,1,2,506,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,187,60,83,85,83,77,
+  193,31,35,82,32,62,87,83,259,88,86,84,83,81,80,83,79,78,85,85,83,76,191,
+  192,68,67,66,201,130,130,34,71,70,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,188,
+  2,2,1,2,505,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,189,60,83,85,83,77,
+  193,31,35,82,32,62,87,83,260,89,88,86,84,83,81,80,83,79,78,85,85,83,76,
+  191,192,68,67,66,201,130,130,34,71,70,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,190,60,83,85,83,77,
+  193,31,35,82,32,62,87,83,261,90,89,88,86,84,83,81,80,83,79,78,85,85,83,
+  76,191,192,68,67,66,201,130,130,34,71,70,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,191,
+  2,2,1,2,504,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,192,60,83,85,83,77,
+  193,31,35,82,32,62,87,83,262,91,90,89,88,86,84,83,81,80,83,79,78,85,85,
+  83,76,191,192,68,67,66,201,130,130,34,71,70,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,193,
+  2,2,1,2,503,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,194,60,83,85,83,77,
+  193,31,35,82,32,62,87,83,263,92,91,90,89,88,86,84,83,81,80,83,79,78,85,
+  85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,195,
+  2,2,1,2,502,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,196,60,83,85,83,77,
+  193,31,35,82,32,264,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+204,72,72,72,70,72,
+43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,44,45,43,43,43,43,43,43,
+  43,43,43,43,43,43,43,43,43,43,43,198,42,106,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
+  199,23,22,21,141,265,265,33,31,35,33,32,35,34,38,
+236,200,266,
+107,27,108,
+236,202,102,
+4,9,203,234,9,
+471,1,2,204,2,2,1,2,534,
+27,205,267,
+471,1,2,206,2,2,1,2,533,
+27,207,268,
+4,9,208,222,9,
+27,209,269,
+27,210,270,
+471,1,2,211,2,2,1,2,532,
+27,212,271,
+471,1,2,213,2,2,1,2,531,
+27,214,272,
+4,9,215,221,9,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,216,60,83,85,83,77,
+  193,31,35,82,32,273,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,217,60,83,85,83,77,
+  193,31,35,82,32,274,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+4,9,218,218,9,
+4,9,219,217,9,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,220,60,83,85,83,77,
+  193,31,35,82,32,275,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,221,
+  276,276,276,33,32,277,276,35,34,38,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,1,2,222,2,2,1,2,495,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
+  223,23,22,21,141,278,278,33,31,35,33,32,35,34,38,
+27,224,279,
+153,113,69,113,113,225,152,116,116,
+153,113,113,113,226,115,115,
+69,112,231,
+69,79,231,
+69,78,231,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,73,73,73,8,73,30,30,30,
+  30,30,30,47,73,73,230,23,22,21,141,142,142,33,31,35,33,32,143,280,35,34,
+  38,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
+  231,23,22,21,141,29,33,31,35,33,32,35,34,38,
+69,85,231,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
+  233,23,22,21,141,281,281,33,31,35,33,32,35,34,38,
+471,471,471,471,1,2,234,2,2,1,2,486,
+282,8,4,9,235,25,97,31,35,25,282,9,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,1,2,236,2,2,1,2,487,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
+  237,23,22,21,141,283,283,33,31,35,33,32,35,34,38,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,238,60,83,85,83,77,
+  193,31,35,82,32,284,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+132,107,185,150,151,
+236,69,240,231,182,
+158,160,162,164,163,161,159,
+158,160,162,163,163,161,159,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,243,60,83,85,83,77,
+  193,31,35,82,32,285,62,156,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+74,75,161,165,164,
+74,75,160,165,164,
+69,158,152,
+69,157,152,
+69,156,152,
+69,155,152,
+69,149,152,
+69,148,152,
+168,137,154,167,169,
+168,137,153,167,169,
+168,137,152,167,169,
+168,137,151,167,169,
+170,172,98,99,69,256,152,175,174,173,171,
+170,172,98,99,147,183,182,181,180,
+170,172,98,99,146,183,182,181,180,
+176,178,144,185,184,
+186,142,187,
+188,140,189,
+97,138,190,
+191,136,192,
+286,264,287,
+69,288,265,25,231,
+8,266,119,31,35,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,267,
+  276,276,276,33,32,289,276,35,34,38,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,268,
+  276,276,276,33,32,290,276,35,34,38,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,269,
+  276,276,276,33,32,291,276,35,34,38,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,270,
+  276,276,276,33,32,292,276,35,34,38,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,271,
+  276,276,276,33,32,293,276,35,34,38,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,272,294,
+  38,
+295,273,296,
+295,274,297,
+295,275,298,
+107,235,299,
+69,4,9,277,215,300,9,
+301,302,69,278,231,302,302,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,279,60,83,85,83,77,
+  193,31,35,82,32,303,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+82,82,82,77,77,77,280,
+81,81,81,76,69,76,76,281,231,
+40,282,304,46,
+69,288,283,189,231,
+305,284,306,
+305,236,285,180,306,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,286,
+  2,2,1,2,501,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,287,60,83,85,83,77,
+  193,31,35,82,32,134,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
+  471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,
+  288,2,2,1,2,477,
+69,4,9,289,233,300,9,
+69,4,9,290,232,300,9,
+69,4,9,291,229,300,9,
+69,4,9,292,228,300,9,
+69,4,9,293,227,300,9,
+4,9,294,226,9,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,295,
+  2,2,1,2,526,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,296,60,83,85,83,77,
+  193,31,35,82,32,220,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,297,60,83,85,83,77,
+  193,31,35,82,32,219,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,298,60,83,85,83,77,
+  193,31,35,82,32,223,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+  240,240,240,240,240,240,299,307,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,30,30,30,30,30,30,47,300,
+  308,308,308,33,32,308,35,34,38,
+471,1,2,301,2,2,1,2,494,
+8,302,122,31,35,
+153,113,113,113,303,117,117,
+8,304,101,31,35,
+471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,1,2,305,
+  2,2,1,2,521,
+18,19,72,73,74,75,27,59,8,69,207,207,65,205,201,201,47,306,60,83,85,83,77,
+  193,31,35,82,32,309,62,87,83,94,93,92,91,90,89,88,86,84,83,81,80,83,79,
+  78,85,85,83,76,191,192,68,67,66,201,130,130,34,71,70,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,8,30,30,30,30,30,30,47,
+  307,23,22,21,141,310,310,33,31,35,33,32,35,34,38,
+107,236,299,
+236,309,187,
+69,288,310,241,231,
+
+};
+
+
+static const unsigned short far ag_sbt[] = {
+     0,  15,  56,  62,  82, 121, 131, 141, 171, 231, 293, 299, 305, 331,
+   370, 386, 388, 424, 426, 485, 544, 555, 566, 588, 596, 601, 606, 675,
+   718, 741, 803, 832, 886, 941, 980,1032,1044,1053,1062,1097,1100,1109,
+  1112,1115,1125,1128,1131,1134,1160,1166,1171,1174,1177,1184,1233,1238,
+  1242,1251,1259,1262,1299,1308,1331,1372,1377,1391,1445,1449,1452,1458,
+  1499,1551,1603,1628,1653,1678,1703,1707,1728,1778,1828,1878,1928,1990,
+  1997,2002,2007,2012,2027,2036,2041,2044,2047,2050,2053,2058,2070,2092,
+  2135,2178,2221,2224,2292,2295,2302,2305,2308,2311,2344,2371,2433,2467,
+  2529,2538,2541,2556,2565,2568,2583,2592,2595,2604,2607,2616,2620,2629,
+  2633,2642,2645,2650,2659,2662,2673,2694,2735,2758,2820,2860,2897,2937,
+  2977,3013,3016,3019,3059,3068,3137,3140,3209,3214,3219,3246,3249,3271,
+  3287,3289,3329,3346,3349,3374,3425,3450,3501,3526,3576,3627,3678,3719,
+  3771,3796,3848,3873,3896,3921,3944,3967,3990,4015,4038,4063,4086,4139,
+  4192,4245,4298,4353,4408,4433,4489,4514,4571,4629,4654,4713,4738,4798,
+  4823,4885,4891,4930,4970,4973,4976,4979,4984,4993,4996,5005,5008,5013,
+  5016,5019,5028,5031,5040,5043,5048,5110,5172,5177,5182,5244,5279,5312,
+  5352,5355,5364,5371,5374,5377,5380,5428,5467,5470,5510,5522,5534,5586,
+  5626,5688,5693,5698,5705,5712,5774,5779,5784,5787,5790,5793,5796,5799,
+  5802,5807,5812,5817,5822,5833,5842,5851,5856,5859,5862,5865,5868,5871,
+  5876,5881,5916,5951,5986,6021,6056,6081,6084,6087,6090,6093,6100,6107,
+  6169,6176,6185,6189,6194,6197,6202,6227,6289,6333,6340,6347,6354,6361,
+  6368,6373,6398,6460,6522,6584,6611,6645,6654,6659,6666,6671,6696,6758,
+  6798,6801,6804,6809
+};
+
+
+static const unsigned short far ag_sbe[] = {
+     9,  53,  58,  69, 118, 125, 135, 165, 225, 287, 295, 301, 327, 365,
+   376, 387, 423, 425, 479, 538, 550, 561, 587, 590, 597, 603, 638, 712,
+   724, 758, 827, 865, 933, 977,1026,1038,1047,1056,1091,1098,1103,1110,
+  1113,1119,1127,1129,1132,1145,1162,1168,1172,1175,1180,1216,1234,1239,
+  1246,1254,1260,1293,1304,1314,1344,1374,1387,1437,1448,1451,1456,1493,
+  1545,1597,1622,1647,1672,1697,1704,1713,1745,1795,1845,1895,1945,1993,
+  1999,2004,2009,2019,2031,2038,2042,2045,2048,2051,2055,2067,2091,2129,
+  2172,2215,2222,2286,2294,2299,2304,2307,2309,2338,2369,2388,2457,2484,
+  2532,2539,2547,2559,2566,2575,2586,2593,2598,2605,2610,2617,2623,2630,
+  2636,2643,2647,2653,2660,2668,2688,2707,2741,2775,2845,2891,2922,2962,
+  3001,3014,3017,3044,3066,3101,3138,3173,3211,3216,3244,3247,3255,3281,
+  3288,3314,3337,3347,3368,3391,3444,3467,3520,3543,3593,3644,3691,3736,
+  3790,3813,3867,3879,3915,3927,3950,3973,4009,4021,4057,4069,4103,4156,
+  4209,4262,4315,4370,4427,4450,4508,4531,4588,4648,4671,4732,4755,4817,
+  4840,4889,4927,4955,4971,4974,4977,4981,4987,4994,4999,5006,5010,5014,
+  5017,5022,5029,5034,5041,5045,5065,5127,5174,5179,5199,5268,5306,5337,
+  5353,5360,5368,5372,5375,5378,5411,5453,5468,5495,5516,5526,5580,5611,
+  5643,5690,5695,5701,5708,5729,5776,5781,5785,5788,5791,5794,5797,5800,
+  5804,5809,5814,5819,5827,5837,5846,5853,5857,5860,5863,5866,5869,5873,
+  5877,5905,5940,5975,6010,6045,6078,6082,6085,6088,6091,6096,6103,6124,
+  6175,6183,6186,6191,6195,6199,6221,6244,6327,6336,6343,6350,6357,6364,
+  6370,6392,6415,6477,6539,6609,6635,6648,6655,6663,6667,6690,6713,6783,
+  6799,6802,6806,6809
+};
+
+
+static const unsigned char far ag_fl[] = {
+  2,1,1,2,1,2,2,1,1,2,0,1,3,1,1,1,1,2,0,1,2,1,1,1,0,5,1,3,1,3,1,2,1,1,2,
+  1,2,2,2,2,2,1,2,1,0,3,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,
+  2,1,2,0,1,2,4,4,3,3,2,4,4,1,1,2,1,2,0,1,0,2,2,4,1,3,3,4,1,3,3,6,4,2,1,
+  1,1,1,1,1,2,1,3,0,1,4,4,6,1,5,0,1,6,3,5,5,1,1,2,3,1,2,2,1,5,1,3,1,3,1,
+  3,1,3,1,3,1,3,3,3,3,1,3,3,3,3,3,3,3,3,1,3,3,1,3,3,1,3,3,3,1,1,2,2,2,2,
+  1,1,3,2,1,3,2,3,1,1,3,1,7,0,5,1,1,1,1,2,3,1,1,1,1,1,1,2,1,1,1,2,1,2,3,
+  1,1,2,2,2,5,3,4,4,6,6,4,4,5,2,2,5,5,5,5,2,2,5,5,3,1,3,1,1,1,0,5,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+  2,2,2,2,2,2,2,2,2,2,2,2,2
+};
+
+static const unsigned short far ag_ptt[] = {
+    0,  2,  2, 12, 13, 13, 13,198, 20, 20, 21, 21,198, 25, 25, 25, 26, 26,
+   27, 27, 22, 10, 10, 10, 30, 10, 33, 33, 31, 31,201,201, 35, 35, 38, 39,
+   39, 39, 39, 39,199, 43, 43, 46, 48, 46,200, 49, 49, 51, 51, 53, 53, 53,
+   53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 65, 65, 65, 67, 68, 69, 66, 73,
+   73, 78, 78, 75, 75, 75, 75, 75, 80, 80, 80, 76, 77, 77, 84, 84, 85, 85,
+   88, 88, 88, 23, 86, 86, 86, 86, 87, 87, 87, 87, 92, 91, 89, 89, 89, 89,
+   89, 99, 99, 89, 95,104,104, 95, 95, 95,102, 98,113,113, 96, 24, 24, 24,
+  222,117,117,222,  1,  1,  1, 94, 94,120,120,123,123,125,125,127,127,128,
+  128,130,130,130,130,130,132,132,132,132,132,132,132,132,132,135,135,135,
+  138,138,138,140,140,140,140,146,143,143,143,143,143,108,108,108,108,108,
+  108,108,154,152,106,106,150,150,158,150,151,151,151,151,151,151,244,244,
+  244,164,164,159,159, 74, 74,160,160,161,161,245,170,170, 97,172,172,172,
+  172,172,172,172,172,172,172,176,182,182,182,182,182,182,183,183,183,183,
+  183,175,175,191,191,191,192,191,119, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+   16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+   16, 16, 16, 16, 16, 16, 16, 16, 16, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+   19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+   19, 19, 19, 19, 19, 19, 19, 19, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+   36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37,
+   37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 42, 42, 42,
+   42, 42, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+   47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+   52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+   52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 71, 71,118,
+  118,165,165,165,168,168,171,171,171,171,171,171,171,171,171,171,171,171,
+  171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+  171,171,171,197,197,  8,  6,  5,  3, 32, 29, 34, 40, 41, 79, 81, 82, 83,
+   90, 44, 45, 93,101,103,107,109,112,111,110,  9,114,115,116,122,121,124,
+  126,129,131,133,134,136,137,139,141,142,144,145,147,148,149,  4,  7,157,
+  173,174,177,178,180,179,181,184,185,186,187,188,189,190,166,196
+};
+
+static const unsigned short far  *ag_valid(int ag_k) {
+  const unsigned short far  *ag_tp = &ag_tstt[ag_sbt[(PCB).sn+1]];
+  while (*--ag_tp != (unsigned short) ag_k) if (*ag_tp == 0) return NULL;
+  return ag_tp;
+}
+
+int dsl_change_reduction(dsl_token_type ag_k) {
+  if (!ag_valid(ag_k)) return 0;
+  (PCB).reduction_token = ag_k;
+  return 1;
+}
+
+static void ag_default(const  int *ag_tp) {
+  (PCB).ag_dsn = (PCB).sn;
+  (PCB).ag_dtl = ag_tp;
+  while (!ag_valid((dsl_token_type) *ag_tp)) ag_tp++;
+  (PCB).reduction_token = (dsl_token_type) *ag_tp;
+}
+
+
+
+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(V(0,(int *))); break;
+    case 7: ag_rp_7(V(1,(int *))); break;
+    case 8: ag_rp_8(); break;
+    case 9: ag_rp_9(); break;
+    case 10: ag_rp_10(); break;
+    case 11: ag_rp_11(); break;
+    case 12: ag_rp_12(); break;
+    case 13: ag_rp_13(V(0,(int *))); break;
+    case 14: ag_rp_14(); break;
+    case 15: ag_rp_15(); break;
+    case 16: ag_rp_16(); break;
+    case 17: ag_rp_17(V(0,(int *))); break;
+    case 18: ag_rp_18(V(0,(int *))); break;
+    case 19: V(0,(int *)) = ag_rp_19(); break;
+    case 20: V(0,(int *)) = ag_rp_20(); break;
+    case 21: V(0,(int *)) = ag_rp_21(); break;
+    case 22: V(0,(int *)) = ag_rp_22(); break;
+    case 23: V(0,(int *)) = ag_rp_23(); break;
+    case 24: V(0,(int *)) = ag_rp_24(); break;
+    case 25: V(0,(int *)) = ag_rp_25(); break;
+    case 26: V(0,(int *)) = ag_rp_26(); break;
+    case 27: V(0,(int *)) = ag_rp_27(); break;
+    case 28: V(0,(int *)) = ag_rp_28(); break;
+    case 29: V(0,(int *)) = ag_rp_29(); break;
+    case 30: V(0,(int *)) = ag_rp_30(V(1,(int *))); break;
+    case 31: V(0,(int *)) = ag_rp_31(V(0,(int *)), V(1,(int *))); break;
+    case 32: V(0,(int *)) = ag_rp_32(V(0,(int *)), V(1,(int *))); break;
+    case 33: V(0,(int *)) = ag_rp_33(V(1,(long *))); break;
+    case 34: V(0,(long *)) = ag_rp_34(V(0,(long *)), V(1,(long *))); break;
+    case 35: ag_rp_35(); break;
+    case 36: ag_rp_36(); break;
+    case 37: ag_rp_37(V(0,(char * *))); break;
+    case 38: ag_rp_38(V(0,(char * *))); break;
+    case 39: ag_rp_39(V(0,(char * *))); break;
+    case 40: V(0,(char * *)) = ag_rp_40(); break;
+    case 41: V(0,(char * *)) = ag_rp_41(); break;
+    case 42: V(0,(char * *)) = ag_rp_42(V(0,(char * *))); break;
+    case 43: ag_rp_43(); break;
+    case 44: ag_rp_44(); break;
+    case 45: ag_rp_45(); break;
+    case 46: ag_rp_46(V(0,(int *))); break;
+    case 47: V(0,(int *)) = ag_rp_47(V(2,(int *))); break;
+    case 48: V(0,(int *)) = ag_rp_48(V(2,(int *))); break;
+    case 49: V(0,(int *)) = ag_rp_49(V(0,(int *)), V(4,(int *))); break;
+    case 50: V(0,(int *)) = ag_rp_50(V(2,(long *))); break;
+    case 51: V(0,(int *)) = ag_rp_51(V(0,(int *))); break;
+    case 52: ag_rp_52(V(0,(unsigned *))); break;
+    case 53: ag_rp_53(V(0,(unsigned *)), V(2,(long *))); break;
+    case 54: ag_rp_54(V(0,(unsigned *))); break;
+    case 55: ag_rp_55(V(0,(unsigned *)), V(2,(long *)), V(4,(long *))); break;
+    case 56: ag_default(&ag_rtt[0]); V(0,(unsigned *)) = ag_rp_56(); break;
+    case 57: ag_rp_57(V(2,(long *))); break;
+    case 58: ag_rp_58(); break;
+    case 59: ag_rp_59(V(1,(int *))); break;
+    case 60: ag_rp_60(V(3,(long *))); break;
+    case 61: ag_rp_61(); break;
+    case 62: V(0,(int *)) = ag_rp_62(); break;
+    case 63: V(0,(int *)) = ag_rp_63(V(0,(int *))); break;
+    case 64: ag_rp_64(V(0,(int *))); break;
+    case 65: ag_rp_65(V(1,(int *))); break;
+    case 66: ag_rp_66(V(1,(int *))); break;
+    case 67: V(0,(long *)) = ag_rp_67(V(0,(long *)), V(2,(long *)), V(4,(long *))); break;
+    case 68: V(0,(long *)) = ag_rp_68(V(0,(long *)), V(2,(long *))); break;
+    case 69: V(0,(long *)) = ag_rp_69(V(0,(long *)), V(2,(long *))); break;
+    case 70: V(0,(long *)) = ag_rp_70(V(0,(long *)), V(2,(long *))); break;
+    case 71: V(0,(long *)) = ag_rp_71(V(0,(long *)), V(2,(long *))); break;
+    case 72: V(0,(long *)) = ag_rp_72(V(0,(long *)), V(2,(long *))); break;
+    case 73: V(0,(long *)) = ag_rp_73(V(0,(long *)), V(2,(long *))); break;
+    case 74: V(0,(long *)) = ag_rp_74(V(0,(long *)), V(2,(long *))); break;
+    case 75: V(0,(long *)) = ag_rp_75(); break;
+    case 76: V(0,(long *)) = ag_rp_76(); break;
+    case 77: V(0,(long *)) = ag_rp_77(V(0,(long *)), V(2,(long *))); break;
+    case 78: V(0,(long *)) = ag_rp_78(V(0,(long *)), V(2,(long *))); break;
+    case 79: V(0,(long *)) = ag_rp_79(V(0,(long *)), V(2,(long *))); break;
+    case 80: V(0,(long *)) = ag_rp_80(V(0,(long *)), V(2,(long *))); break;
+    case 81: V(0,(long *)) = ag_rp_81(); break;
+    case 82: V(0,(long *)) = ag_rp_82(); break;
+    case 83: V(0,(long *)) = ag_rp_83(); break;
+    case 84: V(0,(long *)) = ag_rp_84(); break;
+    case 85: V(0,(long *)) = ag_rp_85(V(0,(long *)), V(2,(long *))); break;
+    case 86: V(0,(long *)) = ag_rp_86(V(0,(long *)), V(2,(long *))); break;
+    case 87: V(0,(long *)) = ag_rp_87(V(0,(long *)), V(2,(long *))); break;
+    case 88: V(0,(long *)) = ag_rp_88(V(0,(long *)), V(2,(long *))); break;
+    case 89: V(0,(long *)) = ag_rp_89(V(0,(long *)), V(2,(long *))); break;
+    case 90: V(0,(long *)) = ag_rp_90(V(0,(long *)), V(2,(long *))); break;
+    case 91: V(0,(long *)) = ag_rp_91(V(0,(long *)), V(2,(long *))); break;
+    case 92: V(0,(long *)) = ag_rp_92(V(0,(long *))); break;
+    case 93: V(0,(long *)) = ag_rp_93(V(1,(long *))); break;
+    case 94: V(0,(long *)) = ag_rp_94(V(1,(long *))); break;
+    case 95: V(0,(long *)) = ag_rp_95(V(1,(long *))); break;
+    case 96: V(0,(long *)) = ag_rp_96(V(1,(long *))); break;
+    case 97: V(0,(long *)) = ag_rp_97(V(2,(long *))); break;
+    case 98: V(0,(long *)) = ag_rp_98(); break;
+    case 99: V(0,(long *)) = ag_rp_99(V(1,(long *))); break;
+    case 100: V(0,(long *)) = ag_rp_100(V(0,(long *))); break;
+    case 101: ag_default(&ag_rtt[4]); V(0,(long *)) = ag_rp_101(); break;
+    case 102: ag_rp_102(); break;
+    case 103: ag_rp_103(V(3,(long *)), V(5,(long *))); break;
+    case 104: ag_rp_104(); break;
+    case 105: ag_rp_105(); break;
+    case 106: ag_rp_106(V(0,(long *))); break;
+    case 107: ag_rp_107(V(0,(long *))); break;
+    case 108: ag_rp_108(); break;
+    case 109: ag_rp_109(V(1,(long *))); break;
+    case 110: V(0,(long *)) = ag_rp_110(); break;
+    case 111: V(0,(long *)) = ag_rp_111(V(0,(long *)), V(1,(long *))); break;
+    case 112: V(0,(long *)) = ag_rp_112(V(0,(int *))); break;
+    case 113: V(0,(long *)) = ag_rp_113(); break;
+    case 114: V(0,(long *)) = ag_rp_114(V(0,(long *)), V(1,(int *))); break;
+    case 115: V(0,(long *)) = ag_rp_115(V(0,(int *))); break;
+    case 116: V(0,(long *)) = ag_rp_116(V(0,(long *)), V(1,(int *))); break;
+    case 117: V(0,(int *)) = ag_rp_117(V(1,(int *))); break;
+    case 118: ag_rp_118(V(0,(screen_descriptor * *))); break;
+    case 119: V(0,(screen_descriptor * *)) = ag_rp_119(); break;
+    case 120: V(0,(screen_descriptor * *)) = ag_rp_120(V(0,(screen_descriptor * *))); break;
+    case 121: V(0,(screen_descriptor * *)) = ag_rp_121(V(0,(screen_descriptor * *)), V(1,(int *))); break;
+    case 122: V(0,(screen_descriptor * *)) = ag_rp_122(V(0,(screen_descriptor * *)), V(2,(int *))); break;
+    case 123: V(0,(screen_descriptor * *)) = ag_rp_123(V(0,(screen_descriptor * *)), V(2,(int *))); break;
+    case 124: V(0,(screen_descriptor * *)) = ag_rp_124(V(0,(screen_descriptor * *)), V(3,(long *)), V(5,(long *))); break;
+    case 125: V(0,(screen_descriptor * *)) = ag_rp_125(V(0,(screen_descriptor * *)), V(3,(long *)), V(5,(long *))); break;
+    case 126: V(0,(screen_descriptor * *)) = ag_rp_126(V(0,(screen_descriptor * *)), V(1,(query_item * *))); break;
+    case 127: V(0,(screen_descriptor * *)) = ag_rp_127(V(0,(screen_descriptor * *)), V(1,(query_item * *))); break;
+    case 128: V(0,(int *)) = ag_rp_128(V(2,(long *)), V(4,(long *))); break;
+    case 129: V(0,(query_item * *)) = ag_rp_129(); break;
+    case 130: V(0,(query_item * *)) = ag_rp_130(V(0,(query_item * *))); break;
+    case 131: V(0,(query_item * *)) = ag_rp_131(V(0,(query_item * *))); break;
+    case 132: V(0,(query_item * *)) = ag_rp_132(V(0,(query_item * *))); break;
+    case 133: V(0,(query_item * *)) = ag_rp_133(V(0,(query_item * *))); break;
+    case 134: V(0,(query_item * *)) = ag_rp_134(); break;
+    case 135: V(0,(query_item * *)) = ag_rp_135(V(0,(query_item * *))); break;
+    case 136: V(0,(query_item * *)) = ag_rp_136(V(0,(query_item * *))); break;
+    case 137: V(0,(query_item * *)) = ag_rp_137(V(0,(query_item * *))); break;
+    case 138: ag_rp_138(); break;
+    case 139: ag_rp_139(); break;
+    case 140: ag_rp_140(); break;
+    case 141: ag_rp_141(); break;
+  }
+  (PCB).la_ptr = (PCB).pointer;
+}
+
+#define TOKEN_NAMES dsl_token_names
+const char *const dsl_token_names[263] = {
+  "script file",
+  "name",
+  "ws",
+  "literal",
+  "integer constant",
+  "string literal",
+  "paren string",
+  "character constant",
+  "eol",
+  "literals",
+  "word",
+  "white",
+  "comment",
+  "comment head",
+  "\"*/\"",
+  "\"/*\"",
+  "",
+  "'\\n'",
+  "\"//\"",
+  "not eol",
+  "",
+  "",
+  "script file",
+  "execution block",
+  "declaration",
+  "",
+  "",
+  "",
+  "eof",
+  "'['",
+  "",
+  "parameter string",
+  "']'",
+  "string",
+  "'#'",
+  "param word",
+  "",
+  "text char",
+  "action text",
+  "action text head",
+  "'}'",
+  "'{'",
+  "operator",
+  "paren string chars",
+  "')'",
+  "'('",
+  "paren string char",
+  "not paren",
+  "",
+  "string chars",
+  "'\\\"'",
+  "string char",
+  "not double quote",
+  "escape sequence",
+  "\"\\\\a\"",
+  "\"\\\\b\"",
+  "\"\\\\f\"",
+  "\"\\\\n\"",
+  "\"\\\\r\"",
+  "\"\\\\t\"",
+  "\"\\\\v\"",
+  "\"\\\\\\\\\"",
+  "\"\\\\?\"",
+  "\"\\\\\\'\"",
+  "\"\\\\\\\"\"",
+  "octal escape",
+  "hex escape",
+  "one octal",
+  "two octal",
+  "three octal",
+  "'\\\\'",
+  "",
+  "\"\\\\x\"",
+  "hex number",
+  "hex digit",
+  "command",
+  "identifier",
+  "parameters",
+  "",
+  "'<'",
+  "piped command",
+  "'|'",
+  "'>'",
+  "\">>\"",
+  "",
+  "",
+  "command sequence",
+  "if sequence",
+  "",
+  "statement",
+  "\"else\"",
+  "if statement",
+  "if condition",
+  "\"if\"",
+  "conditional exp",
+  "assignment",
+  "for statement",
+  "screen description",
+  "while statement",
+  "",
+  "undeclared variable",
+  "'='",
+  "integer variable",
+  "';'",
+  "",
+  "string variable",
+  "string exp",
+  "'@'",
+  "primary exp",
+  "\"while\"",
+  "\"for\"",
+  "\"in\"",
+  "\"do\"",
+  "",
+  "\"action\"",
+  "\"int\"",
+  "\"string\"",
+  "",
+  "letter",
+  "digit",
+  "logical or exp",
+  "'\\?'",
+  "':'",
+  "logical and exp",
+  "\"||\"",
+  "inclusive or exp",
+  "\"&&\"",
+  "exclusive or exp",
+  "and exp",
+  "'^'",
+  "equality exp",
+  "'&'",
+  "relational exp",
+  "\"==\"",
+  "\"!=\"",
+  "shift exp",
+  "\"<=\"",
+  "\">=\"",
+  "additive exp",
+  "\"<<\"",
+  "multiplicative exp",
+  "'+'",
+  "'-'",
+  "unary exp",
+  "'*'",
+  "'/'",
+  "nonzero",
+  "'%'",
+  "'~'",
+  "'!'",
+  "string term",
+  "string element",
+  "numeric name",
+  "built_in name",
+  "built_in argument",
+  "string name",
+  "undefined name",
+  "\"..\"",
+  "",
+  "hex constant",
+  "octal constant",
+  "decimal constant",
+  "\"0x\"",
+  "\"0X\"",
+  "",
+  "",
+  "",
+  "'0'",
+  "",
+  "'\\''",
+  "char constant element",
+  "not single quote",
+  "screen items",
+  "\"screen\"",
+  "\"title\"",
+  "formula",
+  "color spec",
+  "\"entry\"",
+  "\"highlight\"",
+  "\"size\"",
+  "','",
+  "\"location\"",
+  "query line",
+  "button line",
+  "\"color\"",
+  "\"field\"",
+  "\"variable\"",
+  "\"default\"",
+  "\"prompt\"",
+  "\"explanation\"",
+  "\"button\"",
+  "formula element",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "eol",
+  "paren string",
+  "string literal",
+  "literal",
+  "']'",
+  "'['",
+  "'#'",
+  "'}'",
+  "'{'",
+  "'<'",
+  "'|'",
+  "'>'",
+  "\">>\"",
+  "\"else\"",
+  "')'",
+  "'('",
+  "\"if\"",
+  "'='",
+  "';'",
+  "'@'",
+  "\"while\"",
+  "\"do\"",
+  "\"in\"",
+  "\"for\"",
+  "literals",
+  "\"action\"",
+  "\"int\"",
+  "\"string\"",
+  "':'",
+  "'\\?'",
+  "\"||\"",
+  "\"&&\"",
+  "'^'",
+  "'&'",
+  "\"==\"",
+  "\"!=\"",
+  "\"<=\"",
+  "\">=\"",
+  "\"<<\"",
+  "'+'",
+  "'-'",
+  "'*'",
+  "'/'",
+  "'%'",
+  "'~'",
+  "'!'",
+  "integer constant",
+  "character constant",
+  "\"..\"",
+  "\"screen\"",
+  "\"title\"",
+  "\"entry\"",
+  "\"highlight\"",
+  "','",
+  "\"size\"",
+  "\"location\"",
+  "\"color\"",
+  "\"field\"",
+  "\"variable\"",
+  "\"default\"",
+  "\"prompt\"",
+  "\"explanation\"",
+  "\"button\"",
+  "",
+  "",
+
+};
+
+#ifndef MISSING_FORMAT
+#define MISSING_FORMAT "Missing %s"
+#endif
+#ifndef UNEXPECTED_FORMAT
+#define UNEXPECTED_FORMAT "Unexpected %s"
+#endif
+#ifndef UNNAMED_TOKEN
+#define UNNAMED_TOKEN "input"
+#endif
+
+
+static void ag_diagnose(void) {
+  int ag_snd = (PCB).sn;
+  int ag_k = ag_sbt[ag_snd];
+
+  if (*TOKEN_NAMES[ag_tstt[ag_k]] && ag_astt[ag_k + 1] == ag_action_8) {
+    sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
+  }
+  else if (ag_astt[ag_sbe[(PCB).sn]] == ag_action_8
+          && (ag_k = (int) ag_sbe[(PCB).sn] + 1) == (int) ag_sbt[(PCB).sn+1] - 1
+          && *TOKEN_NAMES[ag_tstt[ag_k]]) {
+    sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
+  }
+  else if ((PCB).token_number && *TOKEN_NAMES[(PCB).token_number]) {
+    sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, TOKEN_NAMES[(PCB).token_number]);
+  }
+  else if (isprint(INPUT_CODE((*(PCB).pointer))) && INPUT_CODE((*(PCB).pointer)) != '\\') {
+    char buf[20];
+    sprintf(buf, "\'%c\'", (char) INPUT_CODE((*(PCB).pointer)));
+    sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, buf);
+  }
+  else sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, UNNAMED_TOKEN);
+  (PCB).error_message = (PCB).ag_msg;
+
+
+}
+static int ag_action_1_r_proc(void);
+static int ag_action_2_r_proc(void);
+static int ag_action_3_r_proc(void);
+static int ag_action_4_r_proc(void);
+static int ag_action_1_s_proc(void);
+static int ag_action_3_s_proc(void);
+static int ag_action_1_proc(void);
+static int ag_action_2_proc(void);
+static int ag_action_3_proc(void);
+static int ag_action_4_proc(void);
+static int ag_action_5_proc(void);
+static int ag_action_6_proc(void);
+static int ag_action_7_proc(void);
+static int ag_action_8_proc(void);
+static int ag_action_9_proc(void);
+static int ag_action_10_proc(void);
+static int ag_action_11_proc(void);
+static int ag_action_8_proc(void);
+
+
+static int (*const  ag_r_procs_scan[])(void) = {
+  ag_action_1_r_proc,
+  ag_action_2_r_proc,
+  ag_action_3_r_proc,
+  ag_action_4_r_proc
+};
+
+static int (*const  ag_s_procs_scan[])(void) = {
+  ag_action_1_s_proc,
+  ag_action_2_r_proc,
+  ag_action_3_s_proc,
+  ag_action_4_r_proc
+};
+
+static int (*const  ag_gt_procs_scan[])(void) = {
+  ag_action_1_proc,
+  ag_action_2_proc,
+  ag_action_3_proc,
+  ag_action_4_proc,
+  ag_action_5_proc,
+  ag_action_6_proc,
+  ag_action_7_proc,
+  ag_action_8_proc,
+  ag_action_9_proc,
+  ag_action_10_proc,
+  ag_action_11_proc,
+  ag_action_8_proc
+};
+
+
+static int ag_action_10_proc(void) {
+  int ag_t = (PCB).token_number;
+  (PCB).btsx = 0, (PCB).drt = -1;
+  do {
+    ag_track();
+    (PCB).token_number = (dsl_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
+    (PCB).la_ptr++;
+    if (ag_key_index[(PCB).sn]) {
+      unsigned ag_k = ag_key_index[(PCB).sn];
+      int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
+      if (ag_ch <= 255) {
+        while (ag_key_ch[ag_k] < ag_ch) ag_k++;
+        if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
+      }
+    }
+  } while ((PCB).token_number == (dsl_token_type) ag_t);
+  (PCB).la_ptr =  (PCB).pointer;
+  return 1;
+}
+
+static int ag_action_11_proc(void) {
+  int ag_t = (PCB).token_number;
+
+  (PCB).btsx = 0, (PCB).drt = -1;
+  do {
+    (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
+    (PCB).ssx--;
+    ag_track();
+    ag_ra();
+    if ((PCB).exit_flag != AG_RUNNING_CODE) return 0;
+    (PCB).ssx++;
+    (PCB).token_number = (dsl_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
+    (PCB).la_ptr++;
+    if (ag_key_index[(PCB).sn]) {
+      unsigned ag_k = ag_key_index[(PCB).sn];
+      int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
+      if (ag_ch <= 255) {
+        while (ag_key_ch[ag_k] < ag_ch) ag_k++;
+        if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
+      }
+    }
+  }
+  while ((PCB).token_number == (dsl_token_type) ag_t);
+  (PCB).la_ptr =  (PCB).pointer;
+  return 1;
+}
+
+static int ag_action_3_r_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  (PCB).btsx = 0, (PCB).drt = -1;
+  (PCB).reduction_token = (dsl_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 = (dsl_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 = (dsl_token_type) ag_ptt[(PCB).ag_ap];
+  return 1;
+}
+
+static int ag_action_2_proc(void) {
+  (PCB).btsx = 0, (PCB).drt = -1;
+  if ((PCB).ssx >= 128) {
+    (PCB).exit_flag = AG_STACK_ERROR_CODE;
+    PARSER_STACK_OVERFLOW;
+  }
+  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
+  GET_CONTEXT;
+  (PCB).ss[(PCB).ssx] = (PCB).sn;
+  (PCB).ssx++;
+  (PCB).sn = (PCB).ag_ap;
+  ag_track();
+  return 0;
+}
+
+static int ag_action_9_proc(void) {
+  if ((PCB).drt == -1) {
+    (PCB).drt=(PCB).token_number;
+    (PCB).dssx=(PCB).ssx;
+    (PCB).dsn=(PCB).sn;
+  }
+  ag_prot();
+  (PCB).vs[(PCB).ssx] = ag_null_value;
+  GET_CONTEXT;
+  (PCB).ss[(PCB).ssx] = (PCB).sn;
+  (PCB).ssx++;
+  (PCB).sn = (PCB).ag_ap;
+  (PCB).la_ptr =  (PCB).pointer;
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+static int ag_action_2_r_proc(void) {
+  (PCB).ssx++;
+  (PCB).sn = (PCB).ag_ap;
+  return 0;
+}
+
+static int ag_action_7_proc(void) {
+  --(PCB).ssx;
+  (PCB).la_ptr =  (PCB).pointer;
+  (PCB).exit_flag = AG_SUCCESS_CODE;
+  return 0;
+}
+
+static int ag_action_1_proc(void) {
+  ag_track();
+  (PCB).exit_flag = AG_SUCCESS_CODE;
+  return 0;
+}
+
+static int ag_action_1_r_proc(void) {
+  (PCB).exit_flag = AG_SUCCESS_CODE;
+  return 0;
+}
+
+static int ag_action_1_s_proc(void) {
+  (PCB).exit_flag = AG_SUCCESS_CODE;
+  return 0;
+}
+
+static int ag_action_4_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
+  (PCB).reduction_token = (dsl_token_type) ag_ptt[(PCB).ag_ap];
+  (PCB).btsx = 0, (PCB).drt = -1;
+  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  else GET_CONTEXT;
+  (PCB).ss[(PCB).ssx] = (PCB).sn;
+  ag_track();
+  while ((PCB).exit_flag == AG_RUNNING_CODE) {
+    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
+    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
+    do {
+      unsigned ag_tx = (ag_t1 + ag_t2)/2;
+      if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1;
+      else ag_t2 = ag_tx;
+    } while (ag_t1 < ag_t2);
+    if (ag_tstt[ag_t1] != (PCB).reduction_token) {
+      (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; 
+      REDUCTION_TOKEN_ERROR; break;}
+      (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
+  }
+  return 0;
+}
+
+static int ag_action_3_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
+  (PCB).btsx = 0, (PCB).drt = -1;
+  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  else GET_CONTEXT;
+  (PCB).ss[(PCB).ssx] = (PCB).sn;
+  ag_track();
+  (PCB).reduction_token = (dsl_token_type) ag_ptt[(PCB).ag_ap];
+  ag_ra();
+  while ((PCB).exit_flag == AG_RUNNING_CODE) {
+    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
+    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
+    do {
+      unsigned ag_tx = (ag_t1 + ag_t2)/2;
+      if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1;
+      else ag_t2 = ag_tx;
+    } while (ag_t1 < ag_t2);
+    if (ag_tstt[ag_t1] != (PCB).reduction_token) {
+      (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; 
+      REDUCTION_TOKEN_ERROR; break;}
+      (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
+  }
+  return 0;
+}
+
+static int ag_action_8_proc(void) {
+  ag_undo();
+  (PCB).la_ptr =  (PCB).pointer;
+  (PCB).exit_flag = AG_SYNTAX_ERROR_CODE;
+  ag_diagnose();
+  SYNTAX_ERROR;
+  {(PCB).la_ptr = (PCB).pointer + 1; ag_track();}
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+static int ag_action_5_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap];
+  (PCB).btsx = 0, (PCB).drt = -1;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  else {
+    GET_CONTEXT;
+    (PCB).ss[(PCB).ssx] = (PCB).sn;
+  }
+  (PCB).la_ptr =  (PCB).pointer;
+  (PCB).reduction_token = (dsl_token_type) ag_ptt[(PCB).ag_ap];
+  ag_ra();
+  while ((PCB).exit_flag == AG_RUNNING_CODE) {
+    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
+    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
+    do {
+      unsigned ag_tx = (ag_t1 + ag_t2)/2;
+      if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1;
+      else ag_t2 = ag_tx;
+    } while (ag_t1 < ag_t2);
+    if (ag_tstt[ag_t1] != (PCB).reduction_token) {
+      (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; 
+      REDUCTION_TOKEN_ERROR; break;}
+      (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break;
+  }
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+static int ag_action_6_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap];
+  (PCB).reduction_token = (dsl_token_type) ag_ptt[(PCB).ag_ap];
+  if ((PCB).drt == -1) {
+    (PCB).drt=(PCB).token_number;
+    (PCB).dssx=(PCB).ssx;
+    (PCB).dsn=(PCB).sn;
+  }
+  if (ag_sd) {
+    (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  }
+  else {
+    ag_prot();
+    (PCB).vs[(PCB).ssx] = ag_null_value;
+    GET_CONTEXT;
+    (PCB).ss[(PCB).ssx] = (PCB).sn;
+  }
+  (PCB).la_ptr =  (PCB).pointer;
+  while ((PCB).exit_flag == AG_RUNNING_CODE) {
+    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
+    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
+    do {
+      unsigned ag_tx = (ag_t1 + ag_t2)/2;
+      if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1;
+      else ag_t2 = ag_tx;
+    } while (ag_t1 < ag_t2);
+    if (ag_tstt[ag_t1] != (PCB).reduction_token) {
+      (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; 
+      REDUCTION_TOKEN_ERROR; break;}
+      (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break;
+  }
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+
+void init_dsl(void) {
+  (PCB).la_ptr = (PCB).pointer;
+  (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0;
+  (PCB).exit_flag = AG_RUNNING_CODE;
+  (PCB).line = FIRST_LINE;
+  (PCB).column = FIRST_COLUMN;
+  (PCB).btsx = 0, (PCB).drt = -1;
+}
+
+void dsl(void) {
+  init_dsl();
+  (PCB).exit_flag = AG_RUNNING_CODE;
+  while ((PCB).exit_flag == AG_RUNNING_CODE) {
+    unsigned ag_t1 = ag_sbt[(PCB).sn];
+    if (ag_tstt[ag_t1]) {
+      unsigned ag_t2 = ag_sbe[(PCB).sn] - 1;
+      (PCB).token_number = (dsl_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
+      (PCB).la_ptr++;
+      if (ag_key_index[(PCB).sn]) {
+        unsigned ag_k = ag_key_index[(PCB).sn];
+        int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
+        if (ag_ch <= 255) {
+          while (ag_key_ch[ag_k] < ag_ch) ag_k++;
+          if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
+        }
+      }
+      do {
+        unsigned ag_tx = (ag_t1 + ag_t2)/2;
+        if (ag_tstt[ag_tx] > (unsigned short)(PCB).token_number)
+          ag_t1 = ag_tx + 1;
+        else ag_t2 = ag_tx;
+      } while (ag_t1 < ag_t2);
+      if (ag_tstt[ag_t1] != (unsigned short)(PCB).token_number)
+        ag_t1 = ag_sbe[(PCB).sn];
+    }
+    (PCB).ag_ap = ag_pstt[ag_t1];
+    (ag_gt_procs_scan[ag_astt[ag_t1]])();
+  }
+}
+
+