// *******************************************************************
// This file has been automatically generated from the grammar in file
// HRL.grm by ilog.language.syntax.ParserGenerator on
// Mon Apr 07 13:44:37 PDT 2008 --- !!! PLEASE DO NO EDIT !!!
// *******************************************************************

package ilog.rif;

import java.io.Reader;
import java.io.StringReader;
import java.io.IOException;
import ilog.language.syntax.*;
import java.io.PrintStream;
import ilog.language.tools.Misc;


/* ************ */
/* PARSER CLASS */
/* ************ */

class Parser extends StaticParser
{
  /* ************************ */
  /* PARSER CLASS CONSTRUCTOR */
  /* ************************ */

  public Parser(Tokenizer t)
    {
      input = t;
      xmlroot = "ruleset";
      xmlrootNsprefix = "rif";
      String[] ns = {"rif","http://www.w3.org/2007/rif","rcl","http://www.w3.org/2007/rcl","hrl","http://www.w3.org/2007/hrl"};
      namespaces = ns;
    }

  /* ************************* */
  /* PARSER CLASS DECLARATIONS */
  /* ************************* */

  static
    {
      Lexicon.reserved("Function");
      Lexicon.reserved("Relation");

      Lexicon.reserved("Exists");
      Lexicon.reserved("Forall");
      Lexicon.reserved("Or");
      Lexicon.reserved("And");
      Lexicon.reserved("Neg");
      Lexicon.reserved("Naf");
    }



  long start;
  boolean quiet = true;
  PrintStream out = System.out;

  void setStart ()
    {
      start = System.currentTimeMillis();
    }

  void setQuiet (boolean flag)
    {
      quiet = flag;
    }

  void setOutputStream (PrintStream stream)
    {
      out = stream;
    }

  
  void showXml ()
    {
      out.println("*** Total parsing time = "
                 +(System.currentTimeMillis()-start)
                 +" ms");

      if (!quiet)
        {
          errorManager().tallyErrors();
          if (Misc.askYesNo("*** Do you want to see the XML serialization"))
            {
              out.println();
	      try
		{
		  writeXml(currentNode(),System.out);
		}
	      catch (Exception e)
		{
		  e.printStackTrace();
		}	      
//               currentNode().display();
              out.println();
            }
        }
    }


  /* ********************** */
  /* STATIC INITIALIZATIONS */
  /* ********************** */

  static
    {
      initializeTerminals();
      initializeNonTerminals();
      initializeRules();
      initializeParserActions();
      initializeParserStates();
      initializeActionTables();
      initializeGotoTables();
      initializeStateTables();
    }

  /* ********************* */
  /* PARTIAL PARSE METHODS */
  /* ********************* */

  final static ParseNode $HRL_SWITCH$ = new ParseNode(terminals[3]);

  public final void parseHRL (String s) throws IOException
    {
      parseHRL(new StringReader(s));
    }

  public final void parseHRL (Reader r) throws IOException
    {
      input.setReader(r);
      errorManager().recoverFromErrors(false);
      setSwitchToken($HRL_SWITCH$);
      parse();
    }

  /* **************** */
  /* SEMANTIC ACTIONS */
  /* **************** */

  protected ParseNode semanticAction(ParserRule $rule$) throws IOException
    {
      ParseNode $head$ = new ParseNode($rule$.head);

      switch($rule$.index())
        {
          case 2:
            {
            $head$ = $head$.copy(node($rule$,2));
            break;
            }
          case 3:
            {
            showXml();
            break;
            }
          case 8:
            {
            Lexicon.relation(node($rule$,2).svalue()); // make this a relation's name
        $head$.setSvalue(node($rule$,2).svalue());     // pass this name upwards
            break;
            }
          case 9:
            {
            Lexicon.function(node($rule$,2).svalue()); // make this a function's name
        $head$.setSvalue(node($rule$,2).svalue());     // pass this name upwards
            break;
            }
          case 0: case 1: case 29: case 33: 
            break;
          default:
            $head$ = $head$.copy(node($rule$,1));
            break;
        }
      return $head$;
    }

  /* **************** */
  /* TERMINAL SYMBOLS */
  /* **************** */

  static void initializeTerminals ()
    {
      terminals = new ParserTerminal[22];

      newTerminal(0,"$EMPTY$",1,2);
      newTerminal(1,"$E_O_I$",1,2);
      newTerminal(2,"error",1,2);
      newTerminal(3,"$HRL_switch$",1,2);
      newTerminal(4,"Var",1,2);
        terminals[4].setXmlInfo(new XmlInfo("variable","rcl"));
          {
            XmlAttributeInfo[] xmlAttributes = new XmlAttributeInfo[1];
            xmlAttributes[0] = new XmlAttributeInfo("name","$value");
            terminals[4].addXmlInfo(xmlAttributes);
          }
      newTerminal(5,"Rel",1,2);
        terminals[5].setXmlInfo(new XmlInfo("predicate","rcl"));
          {
            XmlAttributeInfo[] xmlAttributes = new XmlAttributeInfo[1];
            xmlAttributes[0] = new XmlAttributeInfo("name","$value");
            terminals[5].addXmlInfo(xmlAttributes);
          }
      newTerminal(6,"Fun",1,2);
        terminals[6].setXmlInfo(new XmlInfo("function","rcl"));
          {
            XmlAttributeInfo[] xmlAttributes = new XmlAttributeInfo[1];
            xmlAttributes[0] = new XmlAttributeInfo("name","$value");
            terminals[6].addXmlInfo(xmlAttributes);
          }
      newTerminal(7,"Name",1,2);
        terminals[7].setXmlInfo(new XmlInfo("identifier","rcl"));
          {
            XmlAttributeInfo[] xmlAttributes = new XmlAttributeInfo[1];
            xmlAttributes[0] = new XmlAttributeInfo("name","$value");
            terminals[7].addXmlInfo(xmlAttributes);
          }
      newTerminal(8,"Value",1,2);
        terminals[8].setXmlInfo(new XmlInfo("quantity","rcl"));
          {
            XmlAttributeInfo[] xmlAttributes = new XmlAttributeInfo[1];
            xmlAttributes[0] = new XmlAttributeInfo("value","$value");
            terminals[8].addXmlInfo(xmlAttributes);
          }
      newTerminal(9,";",1,2);
      newTerminal(10,"Relation",1,2);
      newTerminal(11,"Function",1,2);
      newTerminal(12,":-",1,2);
      newTerminal(13,"And",1,2);
      newTerminal(14,"(",1,2);
      newTerminal(15,")",1,2);
      newTerminal(16,"Or",1,2);
      newTerminal(17,"Exists",1,2);
      newTerminal(18,"=",1,2);
      newTerminal(19,"Forall",1,2);
      newTerminal(20,"Neg",1,2);
      newTerminal(21,"Naf",1,2);
    }

  /* ******************** */
  /* NON-TERMINAL SYMBOLS */
  /* ******************** */

  static void initializeNonTerminals ()
    {
      nonterminals = new ParserNonTerminal[27];

      newNonTerminal(0,"$START$");
      newNonTerminal(1,"$ROOTS$");
      newNonTerminal(2,"HRL");
      newNonTerminal(3,"RuleSet");
      newNonTerminal(4,"RuleSetComponent");
      newNonTerminal(5,"Declaration");
      newNonTerminal(6,"Rule");
      newNonTerminal(7,"HornRule");
      newNonTerminal(8,"Implication");
      newNonTerminal(9,"HEAD");
      newNonTerminal(10,"BODY");
      newNonTerminal(11,"LITFORM");
      newNonTerminal(12,"CONDIT");
      newNonTerminal(13,"QUANTIF");
      newNonTerminal(14,"CONJ");
      newNonTerminal(15,"DISJ");
      newNonTerminal(16,"CONDIT_star");
      newNonTerminal(17,"Var_plus");
      newNonTerminal(18,"Atom");
      newNonTerminal(19,"TERM_star");
      newNonTerminal(20,"TERM");
      newNonTerminal(21,"Con");
      newNonTerminal(22,"Expr");
      newNonTerminal(23,"CONDIT_plus");
      newNonTerminal(24,"TERM_plus");
      newNonTerminal(25,"Data");
      newNonTerminal(26,"Ind");
    }

  /* **************** */
  /* PRODUCTION RULES */
  /* **************** */

  static void initializeRules ()
    {
      rules = new ParserRule[47];

      rules[0] = new ParserRule(0,1,0,1,2);
      rules[1] = new ParserRule(1,1,1,1,2);
      rules[2] = new ParserRule(1,2,2,1,2);
      rules[3] = new ParserRule(2,1,3,1,2);
      rules[4] = new ParserRule(3,1,4,1,2);
      rules[5] = new ParserRule(3,2,5,1,2);
      rules[6] = new ParserRule(4,2,6,1,2);
      rules[7] = new ParserRule(4,1,7,1,2);
      rules[8] = new ParserRule(5,2,8,1,2);
        rules[8].setXmlInfo(new XmlInfo("relation","rif"));
          {
            XmlAttributeInfo[] xmlAttributes = new XmlAttributeInfo[1];
            xmlAttributes[0] = new XmlAttributeInfo("name","$value");
            rules[8].addXmlInfo(xmlAttributes);
          }
      rules[9] = new ParserRule(5,2,9,1,2);
        rules[9].setXmlInfo(new XmlInfo("function","rif"));
          {
            XmlAttributeInfo[] xmlAttributes = new XmlAttributeInfo[1];
            xmlAttributes[0] = new XmlAttributeInfo("name","$value");
            rules[9].addXmlInfo(xmlAttributes);
          }
      rules[10] = new ParserRule(6,1,10,1,2);
        rules[10].setXmlInfo(new XmlInfo("hornrule","rif"));
          {
            int[] xmlChildren = {1};
            rules[10].addXmlInfo(xmlChildren);
          }
      rules[11] = new ParserRule(7,1,11,1,2);
      rules[12] = new ParserRule(8,3,12,1,2);
        rules[12].setXmlInfo(new XmlInfo("implies","hrl"));
          {
            int[] xmlChildren = {3,1};
            rules[12].addXmlInfo(xmlChildren);
          }
      rules[13] = new ParserRule(9,1,13,1,2);
        rules[13].setXmlInfo(new XmlInfo("consequent","hrl"));
          {
            int[] xmlChildren = {1};
            rules[13].addXmlInfo(xmlChildren);
          }
      rules[14] = new ParserRule(10,1,14,1,2);
        rules[14].setXmlInfo(new XmlInfo("antecedent","hrl"));
          {
            int[] xmlChildren = {1};
            rules[14].addXmlInfo(xmlChildren);
          }
      rules[15] = new ParserRule(12,1,15,1,2);
      rules[16] = new ParserRule(12,1,16,1,2);
      rules[17] = new ParserRule(12,1,17,1,2);
      rules[18] = new ParserRule(12,1,18,1,2);
      rules[19] = new ParserRule(14,4,19,1,2);
        rules[19].setXmlInfo(new XmlInfo("and","rcl"));
          {
            int[] xmlChildren = {3};
            rules[19].addXmlInfo(xmlChildren);
          }
      rules[20] = new ParserRule(15,4,20,1,2);
        rules[20].setXmlInfo(new XmlInfo("or","rcl"));
          {
            int[] xmlChildren = {3};
            rules[20].addXmlInfo(xmlChildren);
          }
      rules[21] = new ParserRule(13,5,21,1,2);
        rules[21].setXmlInfo(new XmlInfo("quantifier","rcl"));
          {
            XmlAttributeInfo[] xmlAttributes = new XmlAttributeInfo[1];
            xmlAttributes[0] = new XmlAttributeInfo("kind","existential");
            rules[21].addXmlInfo(xmlAttributes);
            int[] xmlChildren = {2,4};
            rules[21].addXmlInfo(xmlChildren);
          }
      rules[22] = new ParserRule(11,1,22,1,2);
      rules[23] = new ParserRule(18,4,23,1,2);
        rules[23].setXmlInfo(new XmlInfo("atom","rcl"));
          {
            int[] xmlChildren = {1,3};
            rules[23].addXmlInfo(xmlChildren);
          }
      rules[24] = new ParserRule(18,3,24,1,2);
        rules[24].setXmlInfo(new XmlInfo("equal","rcl"));
          {
            int[] xmlChildren = {1,3};
            rules[24].addXmlInfo(xmlChildren);
          }
      rules[25] = new ParserRule(20,1,25,1,2);
      rules[26] = new ParserRule(20,1,26,1,2);
      rules[27] = new ParserRule(20,1,27,1,2);
      rules[28] = new ParserRule(22,4,28,1,2);
        rules[28].setXmlInfo(new XmlInfo("expression","rcl"));
          {
            int[] xmlChildren = {1,3};
            rules[28].addXmlInfo(xmlChildren);
          }
      rules[29] = new ParserRule(16,0,29,1,2);
      rules[30] = new ParserRule(16,1,30,1,2);
      rules[31] = new ParserRule(23,1,31,1,2);
      rules[32] = new ParserRule(23,2,32,1,2);
      rules[33] = new ParserRule(19,0,33,1,2);
      rules[34] = new ParserRule(19,1,34,1,2);
      rules[35] = new ParserRule(24,1,35,1,2);
      rules[36] = new ParserRule(24,2,36,1,2);
      rules[37] = new ParserRule(17,1,37,1,2);
      rules[38] = new ParserRule(17,2,38,1,2);
      rules[39] = new ParserRule(21,1,39,1,2);
        rules[39].setXmlInfo(new XmlInfo("constant","rcl"));
          {
            int[] xmlChildren = {1};
            rules[39].addXmlInfo(xmlChildren);
          }
      rules[40] = new ParserRule(21,1,40,1,2);
        rules[40].setXmlInfo(new XmlInfo("object","rcl"));
          {
            int[] xmlChildren = {1};
            rules[40].addXmlInfo(xmlChildren);
          }
      rules[41] = new ParserRule(25,1,41,1,2);
        rules[41].setXmlInfo(new XmlInfo("data","rcl"));
          {
            XmlAttributeInfo[] xmlAttributes = new XmlAttributeInfo[1];
            xmlAttributes[0] = new XmlAttributeInfo("value","$value");
            rules[41].addXmlInfo(xmlAttributes);
          }
      rules[42] = new ParserRule(26,1,42,1,2);
        rules[42].setXmlInfo(new XmlInfo("name","rcl"));
          {
            XmlAttributeInfo[] xmlAttributes = new XmlAttributeInfo[1];
            xmlAttributes[0] = new XmlAttributeInfo("ref","$value");
            rules[42].addXmlInfo(xmlAttributes);
          }
      rules[43] = new ParserRule(13,5,43,1,2);
        rules[43].setXmlInfo(new XmlInfo("quantifer","rcl"));
          {
            XmlAttributeInfo[] xmlAttributes = new XmlAttributeInfo[1];
            xmlAttributes[0] = new XmlAttributeInfo("kind","universal");
            rules[43].addXmlInfo(xmlAttributes);
            int[] xmlChildren = {2,4};
            rules[43].addXmlInfo(xmlChildren);
          }
      rules[44] = new ParserRule(11,2,44,1,2);
        rules[44].setXmlInfo(new XmlInfo("neg","rcl"));
          {
            int[] xmlChildren = {2};
            rules[44].addXmlInfo(xmlChildren);
          }
      rules[45] = new ParserRule(11,2,45,1,2);
        rules[45].setXmlInfo(new XmlInfo("naf","rcl"));
          {
            int[] xmlChildren = {2};
            rules[45].addXmlInfo(xmlChildren);
          }
      rules[46] = new ParserRule(11,3,46,1,2);
        rules[46].setXmlInfo(new XmlInfo("nafneg","rcl"));
          {
            int[] xmlChildren = {3};
            rules[46].addXmlInfo(xmlChildren);
          }
    }

  /* ************** */
  /* PARSER ACTIONS */
  /* ************** */

  static void initializeParserActions ()
    {
      actions = new ParserAction[631];

      newAction(0,5,0);
      newAction(1,2,0);
      newAction(2,0,3);
      newAction(3,0,8);
      newAction(4,0,9);
      newAction(5,0,15);
      newAction(6,0,16);
      newAction(7,0,17);
      newAction(8,0,19);
      newAction(9,0,24);
      newAction(10,0,25);
      newAction(11,0,26);
      newAction(12,1,1);
      newAction(13,0,8);
      newAction(14,0,9);
      newAction(15,0,15);
      newAction(16,0,16);
      newAction(17,0,17);
      newAction(18,0,19);
      newAction(19,0,24);
      newAction(20,0,25);
      newAction(21,0,26);
      newAction(22,1,3);
      newAction(23,0,8);
      newAction(24,0,9);
      newAction(25,0,15);
      newAction(26,0,16);
      newAction(27,0,17);
      newAction(28,0,19);
      newAction(29,0,24);
      newAction(30,0,25);
      newAction(31,0,26);
      newAction(32,1,4);
      newAction(33,1,4);
      newAction(34,1,4);
      newAction(35,1,4);
      newAction(36,1,4);
      newAction(37,1,4);
      newAction(38,1,4);
      newAction(39,1,4);
      newAction(40,1,4);
      newAction(41,1,4);
      newAction(42,0,74);
      newAction(43,1,7);
      newAction(44,1,7);
      newAction(45,1,7);
      newAction(46,1,7);
      newAction(47,1,7);
      newAction(48,1,7);
      newAction(49,1,7);
      newAction(50,1,7);
      newAction(51,1,7);
      newAction(52,1,7);
      newAction(53,0,73);
      newAction(54,0,72);
      newAction(55,1,10);
      newAction(56,1,10);
      newAction(57,1,10);
      newAction(58,1,10);
      newAction(59,1,10);
      newAction(60,1,10);
      newAction(61,1,10);
      newAction(62,1,10);
      newAction(63,1,10);
      newAction(64,1,10);
      newAction(65,1,11);
      newAction(66,1,11);
      newAction(67,1,11);
      newAction(68,1,11);
      newAction(69,1,11);
      newAction(70,1,11);
      newAction(71,1,11);
      newAction(72,1,11);
      newAction(73,1,11);
      newAction(74,1,11);
      newAction(75,0,42);
      newAction(76,1,13);
      newAction(77,1,22);
      newAction(78,1,22);
      newAction(79,1,22);
      newAction(80,1,22);
      newAction(81,1,22);
      newAction(82,1,22);
      newAction(83,1,22);
      newAction(84,1,22);
      newAction(85,1,22);
      newAction(86,1,22);
      newAction(87,1,22);
      newAction(88,1,22);
      newAction(89,1,22);
      newAction(90,1,22);
      newAction(91,1,22);
      newAction(92,1,22);
      newAction(93,0,17);
      newAction(94,0,19);
      newAction(95,0,24);
      newAction(96,0,25);
      newAction(97,0,26);
      newAction(98,0,39);
      newAction(99,0,17);
      newAction(100,0,19);
      newAction(101,0,24);
      newAction(102,0,25);
      newAction(103,0,26);
      newAction(104,0,35);
      newAction(105,0,33);
      newAction(106,1,25);
      newAction(107,1,25);
      newAction(108,1,25);
      newAction(109,1,25);
      newAction(110,1,25);
      newAction(111,1,25);
      newAction(112,1,25);
      newAction(113,1,25);
      newAction(114,1,25);
      newAction(115,1,25);
      newAction(116,1,25);
      newAction(117,1,25);
      newAction(118,1,25);
      newAction(119,1,25);
      newAction(120,1,25);
      newAction(121,1,25);
      newAction(122,1,25);
      newAction(123,1,26);
      newAction(124,1,26);
      newAction(125,1,26);
      newAction(126,1,26);
      newAction(127,1,26);
      newAction(128,1,26);
      newAction(129,1,26);
      newAction(130,1,26);
      newAction(131,1,26);
      newAction(132,1,26);
      newAction(133,1,26);
      newAction(134,1,26);
      newAction(135,1,26);
      newAction(136,1,26);
      newAction(137,1,26);
      newAction(138,1,26);
      newAction(139,1,26);
      newAction(140,1,27);
      newAction(141,1,27);
      newAction(142,1,27);
      newAction(143,1,27);
      newAction(144,1,27);
      newAction(145,1,27);
      newAction(146,1,27);
      newAction(147,1,27);
      newAction(148,1,27);
      newAction(149,1,27);
      newAction(150,1,27);
      newAction(151,1,27);
      newAction(152,1,27);
      newAction(153,1,27);
      newAction(154,1,27);
      newAction(155,1,27);
      newAction(156,1,27);
      newAction(157,1,39);
      newAction(158,1,39);
      newAction(159,1,39);
      newAction(160,1,39);
      newAction(161,1,39);
      newAction(162,1,39);
      newAction(163,1,39);
      newAction(164,1,39);
      newAction(165,1,39);
      newAction(166,1,39);
      newAction(167,1,39);
      newAction(168,1,39);
      newAction(169,1,39);
      newAction(170,1,39);
      newAction(171,1,39);
      newAction(172,1,39);
      newAction(173,1,39);
      newAction(174,1,40);
      newAction(175,1,40);
      newAction(176,1,40);
      newAction(177,1,40);
      newAction(178,1,40);
      newAction(179,1,40);
      newAction(180,1,40);
      newAction(181,1,40);
      newAction(182,1,40);
      newAction(183,1,40);
      newAction(184,1,40);
      newAction(185,1,40);
      newAction(186,1,40);
      newAction(187,1,40);
      newAction(188,1,40);
      newAction(189,1,40);
      newAction(190,1,40);
      newAction(191,0,27);
      newAction(192,1,41);
      newAction(193,1,41);
      newAction(194,1,41);
      newAction(195,1,41);
      newAction(196,1,41);
      newAction(197,1,41);
      newAction(198,1,41);
      newAction(199,1,41);
      newAction(200,1,41);
      newAction(201,1,41);
      newAction(202,1,41);
      newAction(203,1,41);
      newAction(204,1,41);
      newAction(205,1,41);
      newAction(206,1,41);
      newAction(207,1,41);
      newAction(208,1,41);
      newAction(209,1,42);
      newAction(210,1,42);
      newAction(211,1,42);
      newAction(212,1,42);
      newAction(213,1,42);
      newAction(214,1,42);
      newAction(215,1,42);
      newAction(216,1,42);
      newAction(217,1,42);
      newAction(218,1,42);
      newAction(219,1,42);
      newAction(220,1,42);
      newAction(221,1,42);
      newAction(222,1,42);
      newAction(223,1,42);
      newAction(224,1,42);
      newAction(225,1,42);
      newAction(226,1,33);
      newAction(227,0,19);
      newAction(228,0,24);
      newAction(229,0,25);
      newAction(230,0,26);
      newAction(231,0,32);
      newAction(232,1,34);
      newAction(233,0,19);
      newAction(234,0,24);
      newAction(235,0,25);
      newAction(236,0,26);
      newAction(237,1,35);
      newAction(238,1,35);
      newAction(239,1,35);
      newAction(240,1,35);
      newAction(241,1,35);
      newAction(242,1,36);
      newAction(243,1,36);
      newAction(244,1,36);
      newAction(245,1,36);
      newAction(246,1,36);
      newAction(247,1,28);
      newAction(248,1,28);
      newAction(249,1,28);
      newAction(250,1,28);
      newAction(251,1,28);
      newAction(252,1,28);
      newAction(253,1,28);
      newAction(254,1,28);
      newAction(255,1,28);
      newAction(256,1,28);
      newAction(257,1,28);
      newAction(258,1,28);
      newAction(259,1,28);
      newAction(260,1,28);
      newAction(261,1,28);
      newAction(262,1,28);
      newAction(263,1,28);
      newAction(264,0,19);
      newAction(265,0,24);
      newAction(266,0,25);
      newAction(267,0,26);
      newAction(268,1,24);
      newAction(269,1,24);
      newAction(270,1,24);
      newAction(271,1,24);
      newAction(272,1,24);
      newAction(273,1,24);
      newAction(274,1,24);
      newAction(275,1,24);
      newAction(276,1,24);
      newAction(277,1,24);
      newAction(278,1,24);
      newAction(279,1,24);
      newAction(280,1,24);
      newAction(281,1,24);
      newAction(282,1,24);
      newAction(283,1,24);
      newAction(284,1,33);
      newAction(285,0,19);
      newAction(286,0,24);
      newAction(287,0,25);
      newAction(288,0,26);
      newAction(289,0,37);
      newAction(290,1,23);
      newAction(291,1,23);
      newAction(292,1,23);
      newAction(293,1,23);
      newAction(294,1,23);
      newAction(295,1,23);
      newAction(296,1,23);
      newAction(297,1,23);
      newAction(298,1,23);
      newAction(299,1,23);
      newAction(300,1,23);
      newAction(301,1,23);
      newAction(302,1,23);
      newAction(303,1,23);
      newAction(304,1,23);
      newAction(305,1,23);
      newAction(306,1,45);
      newAction(307,1,45);
      newAction(308,1,45);
      newAction(309,1,45);
      newAction(310,1,45);
      newAction(311,1,45);
      newAction(312,1,45);
      newAction(313,1,45);
      newAction(314,1,45);
      newAction(315,1,45);
      newAction(316,1,45);
      newAction(317,1,45);
      newAction(318,1,45);
      newAction(319,1,45);
      newAction(320,1,45);
      newAction(321,1,45);
      newAction(322,0,17);
      newAction(323,0,19);
      newAction(324,0,24);
      newAction(325,0,25);
      newAction(326,0,26);
      newAction(327,1,46);
      newAction(328,1,46);
      newAction(329,1,46);
      newAction(330,1,46);
      newAction(331,1,46);
      newAction(332,1,46);
      newAction(333,1,46);
      newAction(334,1,46);
      newAction(335,1,46);
      newAction(336,1,46);
      newAction(337,1,46);
      newAction(338,1,46);
      newAction(339,1,46);
      newAction(340,1,46);
      newAction(341,1,46);
      newAction(342,1,46);
      newAction(343,1,44);
      newAction(344,1,44);
      newAction(345,1,44);
      newAction(346,1,44);
      newAction(347,1,44);
      newAction(348,1,44);
      newAction(349,1,44);
      newAction(350,1,44);
      newAction(351,1,44);
      newAction(352,1,44);
      newAction(353,1,44);
      newAction(354,1,44);
      newAction(355,1,44);
      newAction(356,1,44);
      newAction(357,1,44);
      newAction(358,1,44);
      newAction(359,0,15);
      newAction(360,0,16);
      newAction(361,0,49);
      newAction(362,0,50);
      newAction(363,0,51);
      newAction(364,0,52);
      newAction(365,0,17);
      newAction(366,0,19);
      newAction(367,0,24);
      newAction(368,0,25);
      newAction(369,0,26);
      newAction(370,1,12);
      newAction(371,1,12);
      newAction(372,1,12);
      newAction(373,1,12);
      newAction(374,1,12);
      newAction(375,1,12);
      newAction(376,1,12);
      newAction(377,1,12);
      newAction(378,1,12);
      newAction(379,1,12);
      newAction(380,1,14);
      newAction(381,1,14);
      newAction(382,1,14);
      newAction(383,1,14);
      newAction(384,1,14);
      newAction(385,1,14);
      newAction(386,1,14);
      newAction(387,1,14);
      newAction(388,1,14);
      newAction(389,1,14);
      newAction(390,1,15);
      newAction(391,1,15);
      newAction(392,1,15);
      newAction(393,1,15);
      newAction(394,1,15);
      newAction(395,1,15);
      newAction(396,1,15);
      newAction(397,1,15);
      newAction(398,1,15);
      newAction(399,1,15);
      newAction(400,1,15);
      newAction(401,1,15);
      newAction(402,1,15);
      newAction(403,1,15);
      newAction(404,1,15);
      newAction(405,1,16);
      newAction(406,1,16);
      newAction(407,1,16);
      newAction(408,1,16);
      newAction(409,1,16);
      newAction(410,1,16);
      newAction(411,1,16);
      newAction(412,1,16);
      newAction(413,1,16);
      newAction(414,1,16);
      newAction(415,1,16);
      newAction(416,1,16);
      newAction(417,1,16);
      newAction(418,1,16);
      newAction(419,1,16);
      newAction(420,1,17);
      newAction(421,1,17);
      newAction(422,1,17);
      newAction(423,1,17);
      newAction(424,1,17);
      newAction(425,1,17);
      newAction(426,1,17);
      newAction(427,1,17);
      newAction(428,1,17);
      newAction(429,1,17);
      newAction(430,1,17);
      newAction(431,1,17);
      newAction(432,1,17);
      newAction(433,1,17);
      newAction(434,1,17);
      newAction(435,1,18);
      newAction(436,1,18);
      newAction(437,1,18);
      newAction(438,1,18);
      newAction(439,1,18);
      newAction(440,1,18);
      newAction(441,1,18);
      newAction(442,1,18);
      newAction(443,1,18);
      newAction(444,1,18);
      newAction(445,1,18);
      newAction(446,1,18);
      newAction(447,1,18);
      newAction(448,1,18);
      newAction(449,1,18);
      newAction(450,0,63);
      newAction(451,0,63);
      newAction(452,0,59);
      newAction(453,0,53);
      newAction(454,0,15);
      newAction(455,0,16);
      newAction(456,0,49);
      newAction(457,0,50);
      newAction(458,0,51);
      newAction(459,0,52);
      newAction(460,1,29);
      newAction(461,0,17);
      newAction(462,0,19);
      newAction(463,0,24);
      newAction(464,0,25);
      newAction(465,0,26);
      newAction(466,0,58);
      newAction(467,1,30);
      newAction(468,0,15);
      newAction(469,0,16);
      newAction(470,0,49);
      newAction(471,0,50);
      newAction(472,0,51);
      newAction(473,0,52);
      newAction(474,0,17);
      newAction(475,0,19);
      newAction(476,0,24);
      newAction(477,0,25);
      newAction(478,0,26);
      newAction(479,1,31);
      newAction(480,1,31);
      newAction(481,1,31);
      newAction(482,1,31);
      newAction(483,1,31);
      newAction(484,1,31);
      newAction(485,1,31);
      newAction(486,1,31);
      newAction(487,1,31);
      newAction(488,1,31);
      newAction(489,1,31);
      newAction(490,1,31);
      newAction(491,1,32);
      newAction(492,1,32);
      newAction(493,1,32);
      newAction(494,1,32);
      newAction(495,1,32);
      newAction(496,1,32);
      newAction(497,1,32);
      newAction(498,1,32);
      newAction(499,1,32);
      newAction(500,1,32);
      newAction(501,1,32);
      newAction(502,1,32);
      newAction(503,1,20);
      newAction(504,1,20);
      newAction(505,1,20);
      newAction(506,1,20);
      newAction(507,1,20);
      newAction(508,1,20);
      newAction(509,1,20);
      newAction(510,1,20);
      newAction(511,1,20);
      newAction(512,1,20);
      newAction(513,1,20);
      newAction(514,1,20);
      newAction(515,1,20);
      newAction(516,1,20);
      newAction(517,1,20);
      newAction(518,0,15);
      newAction(519,0,16);
      newAction(520,0,49);
      newAction(521,0,50);
      newAction(522,0,51);
      newAction(523,0,52);
      newAction(524,1,29);
      newAction(525,0,17);
      newAction(526,0,19);
      newAction(527,0,24);
      newAction(528,0,25);
      newAction(529,0,26);
      newAction(530,0,61);
      newAction(531,1,19);
      newAction(532,1,19);
      newAction(533,1,19);
      newAction(534,1,19);
      newAction(535,1,19);
      newAction(536,1,19);
      newAction(537,1,19);
      newAction(538,1,19);
      newAction(539,1,19);
      newAction(540,1,19);
      newAction(541,1,19);
      newAction(542,1,19);
      newAction(543,1,19);
      newAction(544,1,19);
      newAction(545,1,19);
      newAction(546,0,64);
      newAction(547,0,65);
      newAction(548,1,37);
      newAction(549,1,37);
      newAction(550,1,38);
      newAction(551,1,38);
      newAction(552,0,15);
      newAction(553,0,16);
      newAction(554,0,49);
      newAction(555,0,50);
      newAction(556,0,51);
      newAction(557,0,52);
      newAction(558,0,17);
      newAction(559,0,19);
      newAction(560,0,24);
      newAction(561,0,25);
      newAction(562,0,26);
      newAction(563,0,67);
      newAction(564,1,43);
      newAction(565,1,43);
      newAction(566,1,43);
      newAction(567,1,43);
      newAction(568,1,43);
      newAction(569,1,43);
      newAction(570,1,43);
      newAction(571,1,43);
      newAction(572,1,43);
      newAction(573,1,43);
      newAction(574,1,43);
      newAction(575,1,43);
      newAction(576,1,43);
      newAction(577,1,43);
      newAction(578,1,43);
      newAction(579,0,69);
      newAction(580,0,64);
      newAction(581,0,15);
      newAction(582,0,16);
      newAction(583,0,49);
      newAction(584,0,50);
      newAction(585,0,51);
      newAction(586,0,52);
      newAction(587,0,17);
      newAction(588,0,19);
      newAction(589,0,24);
      newAction(590,0,25);
      newAction(591,0,26);
      newAction(592,0,71);
      newAction(593,1,21);
      newAction(594,1,21);
      newAction(595,1,21);
      newAction(596,1,21);
      newAction(597,1,21);
      newAction(598,1,21);
      newAction(599,1,21);
      newAction(600,1,21);
      newAction(601,1,21);
      newAction(602,1,21);
      newAction(603,1,21);
      newAction(604,1,21);
      newAction(605,1,21);
      newAction(606,1,21);
      newAction(607,1,21);
      newAction(608,1,9);
      newAction(609,1,8);
      newAction(610,1,6);
      newAction(611,1,6);
      newAction(612,1,6);
      newAction(613,1,6);
      newAction(614,1,6);
      newAction(615,1,6);
      newAction(616,1,6);
      newAction(617,1,6);
      newAction(618,1,6);
      newAction(619,1,6);
      newAction(620,1,5);
      newAction(621,1,5);
      newAction(622,1,5);
      newAction(623,1,5);
      newAction(624,1,5);
      newAction(625,1,5);
      newAction(626,1,5);
      newAction(627,1,5);
      newAction(628,1,5);
      newAction(629,1,5);
      newAction(630,1,2);
    }

  /* ************* */
  /* PARSER STATES */
  /* ************* */

  static void initializeParserStates ()
    {
      states = new ParserState[77];

      for (int i=0; i<77; i++) newState(i);
    }

  /* ************* */
  /* ACTION TABLES */
  /* ************* */

  static void initializeActionTables ()
    {
      newActionTables(71);

      newActionTable(0,10);
	setAction(0,4,8);
	setAction(0,8,10);
	setAction(0,21,6);
	setAction(0,6,9);
	setAction(0,11,4);
	setAction(0,20,5);
	setAction(0,3,2);
	setAction(0,7,11);
	setAction(0,10,3);
	setAction(0,5,7);

      newActionTable(1,1);
	setAction(1,1,1);

      newActionTable(2,1);
	setAction(2,1,12);

      newActionTable(3,9);
	setAction(3,4,18);
	setAction(3,8,20);
	setAction(3,21,16);
	setAction(3,6,19);
	setAction(3,11,14);
	setAction(3,20,15);
	setAction(3,7,21);
	setAction(3,10,13);
	setAction(3,5,17);

      newActionTable(4,10);
	setAction(4,4,28);
	setAction(4,8,30);
	setAction(4,21,26);
	setAction(4,6,29);
	setAction(4,11,24);
	setAction(4,1,22);
	setAction(4,20,25);
	setAction(4,7,31);
	setAction(4,10,23);
	setAction(4,5,27);

      newActionTable(5,10);
	setAction(5,4,33);
	setAction(5,8,37);
	setAction(5,21,41);
	setAction(5,11,39);
	setAction(5,6,35);
	setAction(5,1,32);
	setAction(5,20,40);
	setAction(5,10,38);
	setAction(5,7,36);
	setAction(5,5,34);

      newActionTable(6,1);
	setAction(6,9,42);

      newActionTable(7,10);
	setAction(7,4,44);
	setAction(7,8,48);
	setAction(7,21,52);
	setAction(7,11,50);
	setAction(7,6,46);
	setAction(7,1,43);
	setAction(7,20,51);
	setAction(7,10,49);
	setAction(7,7,47);
	setAction(7,5,45);

      newActionTable(8,1);
	setAction(8,7,53);

      newActionTable(9,1);
	setAction(9,7,54);

      newActionTable(10,10);
	setAction(10,4,56);
	setAction(10,8,60);
	setAction(10,21,64);
	setAction(10,11,62);
	setAction(10,6,58);
	setAction(10,1,55);
	setAction(10,20,63);
	setAction(10,10,61);
	setAction(10,7,59);
	setAction(10,5,57);

      newActionTable(11,10);
	setAction(11,4,66);
	setAction(11,8,70);
	setAction(11,21,74);
	setAction(11,11,72);
	setAction(11,6,68);
	setAction(11,1,65);
	setAction(11,20,73);
	setAction(11,10,71);
	setAction(11,7,69);
	setAction(11,5,67);

      newActionTable(12,1);
	setAction(12,12,75);

      newActionTable(13,1);
	setAction(13,12,76);

      newActionTable(14,16);
	setAction(14,15,87);
	setAction(14,4,78);
	setAction(14,19,90);
	setAction(14,8,82);
	setAction(14,11,84);
	setAction(14,16,88);
	setAction(14,7,81);
	setAction(14,12,85);
	setAction(14,17,89);
	setAction(14,13,86);
	setAction(14,21,92);
	setAction(14,6,80);
	setAction(14,1,77);
	setAction(14,20,91);
	setAction(14,10,83);
	setAction(14,5,79);

      newActionTable(15,5);
	setAction(15,4,94);
	setAction(15,8,96);
	setAction(15,6,95);
	setAction(15,7,97);
	setAction(15,5,93);

      newActionTable(16,6);
	setAction(16,4,100);
	setAction(16,8,102);
	setAction(16,6,101);
	setAction(16,20,98);
	setAction(16,7,103);
	setAction(16,5,99);

      newActionTable(17,1);
	setAction(17,14,104);

      newActionTable(18,1);
	setAction(18,18,105);

      newActionTable(19,17);
	setAction(19,15,116);
	setAction(19,4,107);
	setAction(19,19,120);
	setAction(19,8,111);
	setAction(19,11,113);
	setAction(19,16,117);
	setAction(19,18,119);
	setAction(19,7,110);
	setAction(19,12,114);
	setAction(19,17,118);
	setAction(19,13,115);
	setAction(19,21,122);
	setAction(19,6,109);
	setAction(19,1,106);
	setAction(19,20,121);
	setAction(19,10,112);
	setAction(19,5,108);

      newActionTable(20,17);
	setAction(20,15,133);
	setAction(20,4,124);
	setAction(20,19,137);
	setAction(20,8,128);
	setAction(20,11,130);
	setAction(20,16,134);
	setAction(20,18,136);
	setAction(20,7,127);
	setAction(20,12,131);
	setAction(20,17,135);
	setAction(20,13,132);
	setAction(20,21,139);
	setAction(20,6,126);
	setAction(20,1,123);
	setAction(20,20,138);
	setAction(20,10,129);
	setAction(20,5,125);

      newActionTable(21,17);
	setAction(21,15,150);
	setAction(21,4,141);
	setAction(21,19,154);
	setAction(21,8,145);
	setAction(21,11,147);
	setAction(21,16,151);
	setAction(21,18,153);
	setAction(21,7,144);
	setAction(21,12,148);
	setAction(21,17,152);
	setAction(21,13,149);
	setAction(21,21,156);
	setAction(21,6,143);
	setAction(21,1,140);
	setAction(21,20,155);
	setAction(21,10,146);
	setAction(21,5,142);

      newActionTable(22,17);
	setAction(22,15,167);
	setAction(22,4,158);
	setAction(22,19,171);
	setAction(22,8,162);
	setAction(22,11,164);
	setAction(22,16,168);
	setAction(22,18,170);
	setAction(22,7,161);
	setAction(22,12,165);
	setAction(22,17,169);
	setAction(22,13,166);
	setAction(22,21,173);
	setAction(22,6,160);
	setAction(22,1,157);
	setAction(22,20,172);
	setAction(22,10,163);
	setAction(22,5,159);

      newActionTable(23,17);
	setAction(23,15,184);
	setAction(23,4,175);
	setAction(23,19,188);
	setAction(23,8,179);
	setAction(23,11,181);
	setAction(23,16,185);
	setAction(23,18,187);
	setAction(23,7,178);
	setAction(23,12,182);
	setAction(23,17,186);
	setAction(23,13,183);
	setAction(23,21,190);
	setAction(23,6,177);
	setAction(23,1,174);
	setAction(23,20,189);
	setAction(23,10,180);
	setAction(23,5,176);

      newActionTable(24,1);
	setAction(24,14,191);

      newActionTable(25,17);
	setAction(25,15,202);
	setAction(25,4,193);
	setAction(25,19,206);
	setAction(25,8,197);
	setAction(25,11,199);
	setAction(25,16,203);
	setAction(25,18,205);
	setAction(25,7,196);
	setAction(25,12,200);
	setAction(25,17,204);
	setAction(25,13,201);
	setAction(25,21,208);
	setAction(25,6,195);
	setAction(25,1,192);
	setAction(25,20,207);
	setAction(25,10,198);
	setAction(25,5,194);

      newActionTable(26,17);
	setAction(26,15,219);
	setAction(26,4,210);
	setAction(26,19,223);
	setAction(26,8,214);
	setAction(26,11,216);
	setAction(26,16,220);
	setAction(26,18,222);
	setAction(26,7,213);
	setAction(26,12,217);
	setAction(26,17,221);
	setAction(26,13,218);
	setAction(26,21,225);
	setAction(26,6,212);
	setAction(26,1,209);
	setAction(26,20,224);
	setAction(26,10,215);
	setAction(26,5,211);

      newActionTable(27,5);
	setAction(27,15,226);
	setAction(27,4,227);
	setAction(27,8,229);
	setAction(27,6,228);
	setAction(27,7,230);

      newActionTable(28,1);
	setAction(28,15,231);

      newActionTable(29,5);
	setAction(29,15,232);
	setAction(29,4,233);
	setAction(29,8,235);
	setAction(29,6,234);
	setAction(29,7,236);

      newActionTable(30,5);
	setAction(30,15,241);
	setAction(30,4,237);
	setAction(30,8,240);
	setAction(30,6,238);
	setAction(30,7,239);

      newActionTable(31,5);
	setAction(31,15,246);
	setAction(31,4,242);
	setAction(31,8,245);
	setAction(31,6,243);
	setAction(31,7,244);

      newActionTable(32,17);
	setAction(32,15,257);
	setAction(32,4,248);
	setAction(32,19,261);
	setAction(32,8,252);
	setAction(32,11,254);
	setAction(32,16,258);
	setAction(32,18,260);
	setAction(32,7,251);
	setAction(32,12,255);
	setAction(32,17,259);
	setAction(32,13,256);
	setAction(32,21,263);
	setAction(32,6,250);
	setAction(32,1,247);
	setAction(32,20,262);
	setAction(32,10,253);
	setAction(32,5,249);

      newActionTable(33,4);
	setAction(33,4,264);
	setAction(33,8,266);
	setAction(33,6,265);
	setAction(33,7,267);

      newActionTable(34,16);
	setAction(34,15,278);
	setAction(34,4,269);
	setAction(34,19,281);
	setAction(34,8,273);
	setAction(34,11,275);
	setAction(34,16,279);
	setAction(34,7,272);
	setAction(34,12,276);
	setAction(34,17,280);
	setAction(34,13,277);
	setAction(34,21,283);
	setAction(34,6,271);
	setAction(34,1,268);
	setAction(34,20,282);
	setAction(34,10,274);
	setAction(34,5,270);

      newActionTable(35,1);
	setAction(35,15,289);

      newActionTable(36,16);
	setAction(36,15,300);
	setAction(36,4,291);
	setAction(36,19,303);
	setAction(36,8,295);
	setAction(36,11,297);
	setAction(36,16,301);
	setAction(36,7,294);
	setAction(36,12,298);
	setAction(36,17,302);
	setAction(36,13,299);
	setAction(36,21,305);
	setAction(36,6,293);
	setAction(36,1,290);
	setAction(36,20,304);
	setAction(36,10,296);
	setAction(36,5,292);

      newActionTable(37,16);
	setAction(37,15,316);
	setAction(37,4,307);
	setAction(37,19,319);
	setAction(37,8,311);
	setAction(37,11,313);
	setAction(37,16,317);
	setAction(37,7,310);
	setAction(37,12,314);
	setAction(37,17,318);
	setAction(37,13,315);
	setAction(37,21,321);
	setAction(37,6,309);
	setAction(37,1,306);
	setAction(37,20,320);
	setAction(37,10,312);
	setAction(37,5,308);

      newActionTable(38,16);
	setAction(38,15,337);
	setAction(38,4,328);
	setAction(38,19,340);
	setAction(38,8,332);
	setAction(38,11,334);
	setAction(38,16,338);
	setAction(38,7,331);
	setAction(38,12,335);
	setAction(38,17,339);
	setAction(38,13,336);
	setAction(38,21,342);
	setAction(38,6,330);
	setAction(38,1,327);
	setAction(38,20,341);
	setAction(38,10,333);
	setAction(38,5,329);

      newActionTable(39,16);
	setAction(39,15,353);
	setAction(39,4,344);
	setAction(39,19,356);
	setAction(39,8,348);
	setAction(39,11,350);
	setAction(39,16,354);
	setAction(39,7,347);
	setAction(39,12,351);
	setAction(39,17,355);
	setAction(39,13,352);
	setAction(39,21,358);
	setAction(39,6,346);
	setAction(39,1,343);
	setAction(39,20,357);
	setAction(39,10,349);
	setAction(39,5,345);

      newActionTable(40,11);
	setAction(40,17,361);
	setAction(40,4,366);
	setAction(40,13,363);
	setAction(40,19,362);
	setAction(40,8,368);
	setAction(40,21,360);
	setAction(40,6,367);
	setAction(40,16,364);
	setAction(40,20,359);
	setAction(40,7,369);
	setAction(40,5,365);

      newActionTable(41,10);
	setAction(41,4,371);
	setAction(41,8,375);
	setAction(41,21,379);
	setAction(41,11,377);
	setAction(41,6,373);
	setAction(41,1,370);
	setAction(41,20,378);
	setAction(41,10,376);
	setAction(41,7,374);
	setAction(41,5,372);

      newActionTable(42,10);
	setAction(42,4,381);
	setAction(42,8,385);
	setAction(42,21,389);
	setAction(42,11,387);
	setAction(42,6,383);
	setAction(42,1,380);
	setAction(42,20,388);
	setAction(42,10,386);
	setAction(42,7,384);
	setAction(42,5,382);

      newActionTable(43,15);
	setAction(43,15,399);
	setAction(43,4,391);
	setAction(43,19,402);
	setAction(43,8,395);
	setAction(43,11,397);
	setAction(43,16,400);
	setAction(43,7,394);
	setAction(43,17,401);
	setAction(43,13,398);
	setAction(43,21,404);
	setAction(43,6,393);
	setAction(43,1,390);
	setAction(43,20,403);
	setAction(43,10,396);
	setAction(43,5,392);

      newActionTable(44,15);
	setAction(44,15,414);
	setAction(44,4,406);
	setAction(44,19,417);
	setAction(44,8,410);
	setAction(44,11,412);
	setAction(44,16,415);
	setAction(44,7,409);
	setAction(44,17,416);
	setAction(44,13,413);
	setAction(44,21,419);
	setAction(44,6,408);
	setAction(44,1,405);
	setAction(44,20,418);
	setAction(44,10,411);
	setAction(44,5,407);

      newActionTable(45,15);
	setAction(45,15,429);
	setAction(45,4,421);
	setAction(45,19,432);
	setAction(45,8,425);
	setAction(45,11,427);
	setAction(45,16,430);
	setAction(45,7,424);
	setAction(45,17,431);
	setAction(45,13,428);
	setAction(45,21,434);
	setAction(45,6,423);
	setAction(45,1,420);
	setAction(45,20,433);
	setAction(45,10,426);
	setAction(45,5,422);

      newActionTable(46,15);
	setAction(46,15,444);
	setAction(46,4,436);
	setAction(46,19,447);
	setAction(46,8,440);
	setAction(46,11,442);
	setAction(46,16,445);
	setAction(46,7,439);
	setAction(46,17,446);
	setAction(46,13,443);
	setAction(46,21,449);
	setAction(46,6,438);
	setAction(46,1,435);
	setAction(46,20,448);
	setAction(46,10,441);
	setAction(46,5,437);

      newActionTable(47,1);
	setAction(47,4,450);

      newActionTable(48,1);
	setAction(48,14,452);

      newActionTable(49,1);
	setAction(49,14,453);

      newActionTable(50,12);
	setAction(50,17,456);
	setAction(50,15,460);
	setAction(50,4,462);
	setAction(50,13,458);
	setAction(50,19,457);
	setAction(50,8,464);
	setAction(50,21,455);
	setAction(50,6,463);
	setAction(50,16,459);
	setAction(50,20,454);
	setAction(50,7,465);
	setAction(50,5,461);

      newActionTable(51,1);
	setAction(51,15,466);

      newActionTable(52,12);
	setAction(52,17,470);
	setAction(52,15,467);
	setAction(52,4,475);
	setAction(52,13,472);
	setAction(52,19,471);
	setAction(52,8,477);
	setAction(52,21,469);
	setAction(52,6,476);
	setAction(52,16,473);
	setAction(52,20,468);
	setAction(52,7,478);
	setAction(52,5,474);

      newActionTable(53,12);
	setAction(53,17,487);
	setAction(53,15,485);
	setAction(53,13,484);
	setAction(53,4,479);
	setAction(53,19,488);
	setAction(53,8,483);
	setAction(53,21,490);
	setAction(53,6,481);
	setAction(53,16,486);
	setAction(53,20,489);
	setAction(53,7,482);
	setAction(53,5,480);

      newActionTable(54,12);
	setAction(54,17,499);
	setAction(54,15,497);
	setAction(54,13,496);
	setAction(54,4,491);
	setAction(54,19,500);
	setAction(54,8,495);
	setAction(54,21,502);
	setAction(54,6,493);
	setAction(54,16,498);
	setAction(54,20,501);
	setAction(54,7,494);
	setAction(54,5,492);

      newActionTable(55,15);
	setAction(55,15,512);
	setAction(55,4,504);
	setAction(55,19,515);
	setAction(55,8,508);
	setAction(55,11,510);
	setAction(55,16,513);
	setAction(55,7,507);
	setAction(55,17,514);
	setAction(55,13,511);
	setAction(55,21,517);
	setAction(55,6,506);
	setAction(55,1,503);
	setAction(55,20,516);
	setAction(55,10,509);
	setAction(55,5,505);

      newActionTable(56,1);
	setAction(56,15,530);

      newActionTable(57,15);
	setAction(57,15,540);
	setAction(57,4,532);
	setAction(57,19,543);
	setAction(57,8,536);
	setAction(57,11,538);
	setAction(57,16,541);
	setAction(57,7,535);
	setAction(57,17,542);
	setAction(57,13,539);
	setAction(57,21,545);
	setAction(57,6,534);
	setAction(57,1,531);
	setAction(57,20,544);
	setAction(57,10,537);
	setAction(57,5,533);

      newActionTable(58,2);
	setAction(58,4,546);
	setAction(58,14,547);

      newActionTable(59,2);
	setAction(59,4,548);
	setAction(59,14,549);

      newActionTable(60,2);
	setAction(60,4,550);
	setAction(60,14,551);

      newActionTable(61,1);
	setAction(61,15,563);

      newActionTable(62,15);
	setAction(62,15,573);
	setAction(62,4,565);
	setAction(62,19,576);
	setAction(62,8,569);
	setAction(62,11,571);
	setAction(62,16,574);
	setAction(62,7,568);
	setAction(62,17,575);
	setAction(62,13,572);
	setAction(62,21,578);
	setAction(62,6,567);
	setAction(62,1,564);
	setAction(62,20,577);
	setAction(62,10,570);
	setAction(62,5,566);

      newActionTable(63,2);
	setAction(63,4,580);
	setAction(63,14,579);

      newActionTable(64,1);
	setAction(64,15,592);

      newActionTable(65,15);
	setAction(65,15,602);
	setAction(65,4,594);
	setAction(65,19,605);
	setAction(65,8,598);
	setAction(65,11,600);
	setAction(65,16,603);
	setAction(65,7,597);
	setAction(65,17,604);
	setAction(65,13,601);
	setAction(65,21,607);
	setAction(65,6,596);
	setAction(65,1,593);
	setAction(65,20,606);
	setAction(65,10,599);
	setAction(65,5,595);

      newActionTable(66,1);
	setAction(66,9,608);

      newActionTable(67,1);
	setAction(67,9,609);

      newActionTable(68,10);
	setAction(68,4,611);
	setAction(68,8,615);
	setAction(68,21,619);
	setAction(68,11,617);
	setAction(68,6,613);
	setAction(68,1,610);
	setAction(68,20,618);
	setAction(68,10,616);
	setAction(68,7,614);
	setAction(68,5,612);

      newActionTable(69,10);
	setAction(69,4,621);
	setAction(69,8,625);
	setAction(69,21,629);
	setAction(69,11,627);
	setAction(69,6,623);
	setAction(69,1,620);
	setAction(69,20,628);
	setAction(69,10,626);
	setAction(69,7,624);
	setAction(69,5,622);

      newActionTable(70,1);
	setAction(70,1,630);

    }

  /* *********** */
  /* GOTO TABLES */
  /* *********** */

  static void initializeGotoTables ()
    {
      newGotoTables(19);

      newGotoTable(0,16);
	setGoto(0,4,5);
	setGoto(0,8,11);
	setGoto(0,26,23);
	setGoto(0,11,13);
	setGoto(0,18,14);
	setGoto(0,3,4);
	setGoto(0,7,10);
	setGoto(0,22,21);
	setGoto(0,2,2);
	setGoto(0,9,12);
	setGoto(0,21,20);
	setGoto(0,6,7);
	setGoto(0,1,1);
	setGoto(0,20,18);
	setGoto(0,25,22);
	setGoto(0,5,6);

      newGotoTable(1,0);

      newGotoTable(2,15);
	setGoto(2,4,5);
	setGoto(2,8,11);
	setGoto(2,26,23);
	setGoto(2,11,13);
	setGoto(2,18,14);
	setGoto(2,3,4);
	setGoto(2,7,10);
	setGoto(2,22,21);
	setGoto(2,2,76);
	setGoto(2,9,12);
	setGoto(2,21,20);
	setGoto(2,6,7);
	setGoto(2,20,18);
	setGoto(2,25,22);
	setGoto(2,5,6);

      newGotoTable(3,13);
	setGoto(3,4,75);
	setGoto(3,8,11);
	setGoto(3,26,23);
	setGoto(3,11,13);
	setGoto(3,18,14);
	setGoto(3,7,10);
	setGoto(3,22,21);
	setGoto(3,9,12);
	setGoto(3,21,20);
	setGoto(3,6,7);
	setGoto(3,20,18);
	setGoto(3,25,22);
	setGoto(3,5,6);

      newGotoTable(4,6);
	setGoto(4,26,23);
	setGoto(4,21,20);
	setGoto(4,18,41);
	setGoto(4,20,18);
	setGoto(4,25,22);
	setGoto(4,22,21);

      newGotoTable(5,6);
	setGoto(5,26,23);
	setGoto(5,21,20);
	setGoto(5,18,38);
	setGoto(5,20,18);
	setGoto(5,25,22);
	setGoto(5,22,21);

      newGotoTable(6,7);
	setGoto(6,19,28);
	setGoto(6,26,23);
	setGoto(6,21,20);
	setGoto(6,20,30);
	setGoto(6,25,22);
	setGoto(6,24,29);
	setGoto(6,22,21);

      newGotoTable(7,5);
	setGoto(7,26,23);
	setGoto(7,21,20);
	setGoto(7,20,31);
	setGoto(7,25,22);
	setGoto(7,22,21);

      newGotoTable(8,5);
	setGoto(8,26,23);
	setGoto(8,21,20);
	setGoto(8,20,34);
	setGoto(8,25,22);
	setGoto(8,22,21);

      newGotoTable(9,7);
	setGoto(9,19,36);
	setGoto(9,26,23);
	setGoto(9,21,20);
	setGoto(9,20,30);
	setGoto(9,25,22);
	setGoto(9,24,29);
	setGoto(9,22,21);

      newGotoTable(10,6);
	setGoto(10,26,23);
	setGoto(10,21,20);
	setGoto(10,18,40);
	setGoto(10,20,18);
	setGoto(10,25,22);
	setGoto(10,22,21);

      newGotoTable(11,12);
	setGoto(11,15,48);
	setGoto(11,13,46);
	setGoto(11,26,23);
	setGoto(11,21,20);
	setGoto(11,11,45);
	setGoto(11,18,14);
	setGoto(11,20,18);
	setGoto(11,14,47);
	setGoto(11,25,22);
	setGoto(11,10,43);
	setGoto(11,12,44);
	setGoto(11,22,21);

      newGotoTable(12,1);
	setGoto(12,17,68);

      newGotoTable(13,1);
	setGoto(13,17,62);

      newGotoTable(14,13);
	setGoto(14,15,48);
	setGoto(14,23,55);
	setGoto(14,26,23);
	setGoto(14,11,45);
	setGoto(14,16,54);
	setGoto(14,18,14);
	setGoto(14,12,56);
	setGoto(14,22,21);
	setGoto(14,13,46);
	setGoto(14,21,20);
	setGoto(14,20,18);
	setGoto(14,14,47);
	setGoto(14,25,22);

      newGotoTable(15,11);
	setGoto(15,15,48);
	setGoto(15,13,46);
	setGoto(15,26,23);
	setGoto(15,21,20);
	setGoto(15,11,45);
	setGoto(15,18,14);
	setGoto(15,20,18);
	setGoto(15,14,47);
	setGoto(15,25,22);
	setGoto(15,12,57);
	setGoto(15,22,21);

      newGotoTable(16,13);
	setGoto(16,15,48);
	setGoto(16,23,55);
	setGoto(16,26,23);
	setGoto(16,11,45);
	setGoto(16,16,60);
	setGoto(16,18,14);
	setGoto(16,12,56);
	setGoto(16,22,21);
	setGoto(16,13,46);
	setGoto(16,21,20);
	setGoto(16,20,18);
	setGoto(16,14,47);
	setGoto(16,25,22);

      newGotoTable(17,11);
	setGoto(17,15,48);
	setGoto(17,13,46);
	setGoto(17,26,23);
	setGoto(17,21,20);
	setGoto(17,11,45);
	setGoto(17,18,14);
	setGoto(17,20,18);
	setGoto(17,14,47);
	setGoto(17,25,22);
	setGoto(17,12,66);
	setGoto(17,22,21);

      newGotoTable(18,11);
	setGoto(18,15,48);
	setGoto(18,13,46);
	setGoto(18,26,23);
	setGoto(18,21,20);
	setGoto(18,11,45);
	setGoto(18,18,14);
	setGoto(18,20,18);
	setGoto(18,14,47);
	setGoto(18,25,22);
	setGoto(18,12,70);
	setGoto(18,22,21);

    }

  /* ************ */
  /* STATE TABLES */
  /* ************ */

  static void initializeStateTables ()
    {
      setTables(0,0,0);
      setTables(1,1,1);
      setTables(2,2,1);
      setTables(3,3,2);
      setTables(4,4,3);
      setTables(5,5,1);
      setTables(6,6,1);
      setTables(7,7,1);
      setTables(8,8,1);
      setTables(9,9,1);
      setTables(10,10,1);
      setTables(11,11,1);
      setTables(12,12,1);
      setTables(13,13,1);
      setTables(14,14,1);
      setTables(15,15,4);
      setTables(16,16,5);
      setTables(17,17,1);
      setTables(18,18,1);
      setTables(19,19,1);
      setTables(20,20,1);
      setTables(21,21,1);
      setTables(22,22,1);
      setTables(23,23,1);
      setTables(24,24,1);
      setTables(25,25,1);
      setTables(26,26,1);
      setTables(27,27,6);
      setTables(28,28,1);
      setTables(29,29,7);
      setTables(30,30,1);
      setTables(31,31,1);
      setTables(32,32,1);
      setTables(33,33,8);
      setTables(34,34,1);
      setTables(35,27,9);
      setTables(36,35,1);
      setTables(37,36,1);
      setTables(38,37,1);
      setTables(39,15,10);
      setTables(40,38,1);
      setTables(41,39,1);
      setTables(42,40,11);
      setTables(43,41,1);
      setTables(44,42,1);
      setTables(45,43,1);
      setTables(46,44,1);
      setTables(47,45,1);
      setTables(48,46,1);
      setTables(49,47,12);
      setTables(50,47,13);
      setTables(51,48,1);
      setTables(52,49,1);
      setTables(53,50,14);
      setTables(54,51,1);
      setTables(55,52,15);
      setTables(56,53,1);
      setTables(57,54,1);
      setTables(58,55,1);
      setTables(59,50,16);
      setTables(60,56,1);
      setTables(61,57,1);
      setTables(62,58,1);
      setTables(63,59,1);
      setTables(64,60,1);
      setTables(65,40,17);
      setTables(66,61,1);
      setTables(67,62,1);
      setTables(68,63,1);
      setTables(69,40,18);
      setTables(70,64,1);
      setTables(71,65,1);
      setTables(72,66,1);
      setTables(73,67,1);
      setTables(74,68,1);
      setTables(75,69,1);
      setTables(76,70,1);
    }
}

/* ***************** */
/* ANCILLARY CLASSES */
/* ***************** */



////////////////////////////////////////////////////////////////////////


