Add support for unsigned integer literals in the shading language.

TRAC #23080

Signed-off-by: Nicolas Capens
Signed-off-by: Shannon Woods
Author: Jamie Madill

git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2405 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/compiler/glslang.l b/src/compiler/glslang.l
index 3773d80..dace14f 100644
--- a/src/compiler/glslang.l
+++ b/src/compiler/glslang.l
@@ -57,6 +57,7 @@
 static int ES2_reserved_ES3_keyword(TParseContext *context, int token);
 static int ES2_keyword_ES3_reserved(TParseContext *context, int token);
 static int ES2_ident_ES3_keyword(TParseContext *context, int token);
+static int uint_constant(TParseContext *context);
 %}
 
 %option noyywrap nounput never-interactive
@@ -294,6 +295,9 @@
 0{O}+             { yylval->lex.i = static_cast<int>(strtol(yytext, 0, 0)); return(INTCONSTANT); }
 0{D}+             { context->error(yylineno, "Invalid Octal number.", yytext); context->recover(); return 0;}
 {D}+              { yylval->lex.i = static_cast<int>(strtol(yytext, 0, 0)); return(INTCONSTANT); }
+0[xX]{H}+[uU]     { return uint_constant(context); }
+0{O}+[uU]         { return uint_constant(context); }
+{D}+[uU]          { return uint_constant(context); }
 
 {D}+{E}           { yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
 {D}+"."{D}*({E})? { yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
@@ -437,6 +441,22 @@
     return token;
 }
 
+int uint_constant(TParseContext *context)
+{
+    struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
+    yyscan_t yyscanner = (yyscan_t) context->scanner;
+
+    if (context->shaderVersion < 300)
+    {
+        context->error(yylineno, "Unsigned integers are unsupported prior to GLSL ES 3.00", yytext, "");
+        context->recover();
+        return 0;
+    }
+
+    yylval->lex.u = static_cast<unsigned int>(strtol(yytext, 0, 0));
+    return UINTCONSTANT;
+}
+
 void yyerror(TParseContext* context, const char* reason) {
     struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
 
diff --git a/src/compiler/glslang.y b/src/compiler/glslang.y
index aeadbfc..d9c807b 100644
--- a/src/compiler/glslang.y
+++ b/src/compiler/glslang.y
@@ -55,6 +55,7 @@
             TString *string;
             float f;
             int i;
+            unsigned int u;
             bool b;
         };
         TSymbol* symbol;
@@ -132,7 +133,7 @@
 %token <lex> SAMPLER2D SAMPLERCUBE SAMPLER_EXTERNAL_OES SAMPLER2DRECT
 %token <lex> SAMPLER3D SAMPLER3DRECT SAMPLER2DSHADOW
 
-%token <lex> IDENTIFIER TYPE_NAME FLOATCONSTANT INTCONSTANT BOOLCONSTANT
+%token <lex> IDENTIFIER TYPE_NAME FLOATCONSTANT INTCONSTANT UINTCONSTANT BOOLCONSTANT
 %token <lex> FIELD_SELECTION
 %token <lex> LEFT_OP RIGHT_OP
 %token <lex> INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP
@@ -227,6 +228,11 @@
         unionArray->setIConst($1.i);
         $$ = context->intermediate.addConstantUnion(unionArray, TType(EbtInt, EbpUndefined, EvqConst), $1.line);
     }
+    | UINTCONSTANT {
+        ConstantUnion *unionArray = new ConstantUnion[1];
+        unionArray->setUConst($1.u);
+        $$ = context->intermediate.addConstantUnion(unionArray, TType(EbtUInt, EbpUndefined, EvqConst), $1.line);
+    }
     | FLOATCONSTANT {
         ConstantUnion *unionArray = new ConstantUnion[1];
         unionArray->setFConst($1.f);
diff --git a/src/compiler/glslang_lex.cpp b/src/compiler/glslang_lex.cpp
index 1d5de42..762faa6 100644
--- a/src/compiler/glslang_lex.cpp
+++ b/src/compiler/glslang_lex.cpp
@@ -383,8 +383,8 @@
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 227
-#define YY_END_OF_BUFFER 228
+#define YY_NUM_RULES 230
+#define YY_END_OF_BUFFER 231
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -392,93 +392,94 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[779] =
+static yyconst flex_int16_t yy_accept[782] =
     {   0,
-        0,    0,    0,    0,    0,    0,  228,  226,  225,  225,
-      210,  216,  221,  205,  206,  214,  213,  202,  211,  209,
-      215,  174,  174,  203,  199,  217,  204,  218,  222,  170,
-      207,  208,  220,  170,  170,  170,  170,  170,  170,  170,
+        0,    0,    0,    0,    0,    0,  231,  229,  228,  228,
+      213,  219,  224,  208,  209,  217,  216,  205,  214,  212,
+      218,  174,  174,  206,  202,  220,  207,  221,  225,  170,
+      210,  211,  223,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  200,  219,  201,  212,    3,    4,    3,
-      224,  227,  223,  196,  182,  201,  190,  185,  180,  188,
-      178,  189,  179,  177,    2,    1,  181,  176,  172,  173,
-        0,    0,  174,  208,  200,  207,  197,  193,  195,  194,
-      198,  170,  186,  192,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  203,  222,  204,  215,    3,    4,    3,
+      227,  230,  226,  199,  185,  204,  193,  188,  183,  191,
+      181,  192,  182,  180,    2,    1,  184,  179,  172,  173,
+        0,  177,    0,  174,  211,  203,  210,  200,  196,  198,
+      197,  201,  170,  189,  195,  170,  170,  170,  170,  170,
 
-      170,  170,  170,  170,  170,  170,   17,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,   17,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-       20,  170,  170,   28,  170,  170,  170,  170,  170,  170,
+      170,   20,  170,  170,   28,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  187,  191,    5,  223,
-        0,    1,  176,    0,    0,  175,  171,  183,  184,  170,
-      128,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  190,  194,    5,
+      226,    0,    1,  179,    0,  176,    0,  178,  171,  186,
+      187,  170,  128,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,   18,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,   18,  170,  170,  170,
 
-      170,  170,  170,  170,  170,   32,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,   29,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,   32,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,   29,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,    0,  177,    0,  176,  170,  170,  170,   35,  170,
-      170,   23,  167,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,   21,  131,  170,  170,  170,  170,   26,
-      170,  170,  136,  148,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  145,    9,   40,   41,   42,
+      170,  170,  170,    0,  180,    0,  179,  175,  170,  170,
+      170,   35,  170,  170,   23,  167,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,   21,  131,  170,  170,
+      170,  170,   26,  170,  170,  136,  148,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  145,    9,
 
+       40,   41,   42,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  134,   36,  170,  170,   33,  170,
-      170,  170,  170,  170,  170,  170,   52,   53,   54,   34,
-      170,  170,  170,  170,  170,  170,   15,   61,   62,   63,
-      170,  129,  170,  170,   12,  170,  170,  170,  170,  157,
-      158,  159,  170,   37,  170,  149,   31,  160,  161,  162,
-        7,  154,  155,  156,  170,  170,  170,   30,  152,  170,
-      170,  170,   55,   56,   57,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,   79,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  134,   36,  170,
+      170,   33,  170,  170,  170,  170,  170,  170,  170,   52,
+       53,   54,   34,  170,  170,  170,  170,  170,  170,   15,
+       61,   62,   63,  170,  129,  170,  170,   12,  170,  170,
+      170,  170,  157,  158,  159,  170,   37,  170,  149,   31,
+      160,  161,  162,    7,  154,  155,  156,  170,  170,  170,
+       30,  152,  170,  170,  170,   55,   56,   57,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,   79,  170,
 
-      170,  170,  170,  146,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  130,  170,  170,  169,   58,
-       59,   60,  170,  170,   19,  170,   84,  170,  170,  170,
-      170,   82,  170,  170,  170,  147,  142,   85,  170,  170,
-      170,  170,  170,  170,  137,  170,  170,  170,   43,   46,
-       48,   47,   44,   50,   49,   51,   45,  170,  170,  170,
-      170,  153,  135,  170,  170,  140,  170,  170,  170,   39,
-       80,  166,   27,  141,   71,  170,  151,   22,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,   24,   38,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  146,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  130,  170,
+      170,  169,   58,   59,   60,  170,  170,   19,  170,   84,
+      170,  170,  170,  170,   82,  170,  170,  170,  147,  142,
+       85,  170,  170,  170,  170,  170,  170,  137,  170,  170,
+      170,   43,   46,   48,   47,   44,   50,   49,   51,   45,
+      170,  170,  170,  170,  153,  135,  170,  170,  140,  170,
+      170,  170,   39,   80,  166,   27,  141,   71,  170,  151,
+       22,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,   24,   38,  170,  170,  170,
 
-       86,   87,   88,  170,  170,  170,  170,  170,    8,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      132,  170,  170,  170,  170,  170,   13,  170,  170,   14,
-      170,  170,  170,  170,   25,   72,   16,  143,   90,   91,
-       92,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  138,  170,  170,  170,   74,   76,   73,
-      170,  170,  170,  170,  170,  170,  170,  133,   94,   95,
-       96,  170,  170,  150,  170,  139,  170,  170,   11,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,   89,  144,
-        6,  170,  170,  170,  168,  170,   83,   10,  163,   64,
+      170,  170,  170,   86,   87,   88,  170,  170,  170,  170,
+      170,    8,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  132,  170,  170,  170,  170,  170,   13,
+      170,  170,   14,  170,  170,  170,  170,   25,   72,   16,
+      143,   90,   91,   92,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  138,  170,  170,  170,
+       74,   76,   73,  170,  170,  170,  170,  170,  170,  170,
+      133,   94,   95,   96,  170,  170,  150,  170,  139,  170,
+      170,   11,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,   89,  144,    6,  170,  170,  170,  168,  170,   83,
 
-       67,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,   75,  170,  170,  170,  170,   93,  170,  170,
-      170,  170,  170,  113,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,   81,  170,  170,  170,
-       97,  115,  170,  170,   77,  170,  170,  170,  170,  170,
-      170,  170,  108,  170,  170,  170,  170,  170,  170,  170,
-      122,  170,  170,  170,  170,   65,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  109,   98,  170,   99,
-      170,  170,  123,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  110,  170,  124,  170,
+       10,  163,   64,   67,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,   75,  170,  170,  170,  170,
+       93,  170,  170,  170,  170,  170,  113,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  170,   81,
+      170,  170,  170,   97,  115,  170,  170,   77,  170,  170,
+      170,  170,  170,  170,  170,  108,  170,  170,  170,  170,
+      170,  170,  170,  122,  170,  170,  170,  170,   65,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  170,  109,
+       98,  170,   99,  170,  170,  123,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  170,  110,
 
-      170,  100,  101,  170,  104,  170,  105,  170,  170,  170,
-      170,   78,  170,  170,  170,   70,  170,   68,  119,  170,
-      102,  103,  170,  170,  170,  170,  170,  170,  170,  170,
-      117,  120,  111,  170,  170,  170,  170,  170,  170,  170,
-      118,  121,  170,  170,  114,  170,  170,  164,  170,  170,
-       69,  170,  116,  170,  170,  170,  170,  170,  125,  170,
-      170,  170,  170,  170,  126,  170,  170,  170,  127,  106,
-      107,  170,  170,   66,  170,  165,  112,    0
+      170,  124,  170,  170,  100,  101,  170,  104,  170,  105,
+      170,  170,  170,  170,   78,  170,  170,  170,   70,  170,
+       68,  119,  170,  102,  103,  170,  170,  170,  170,  170,
+      170,  170,  170,  117,  120,  111,  170,  170,  170,  170,
+      170,  170,  170,  118,  121,  170,  170,  114,  170,  170,
+      164,  170,  170,   69,  170,  116,  170,  170,  170,  170,
+      170,  125,  170,  170,  170,  170,  170,  126,  170,  170,
+      170,  127,  106,  107,  170,  170,   66,  170,  165,  112,
+        0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -491,12 +492,12 @@
        18,   19,   20,   20,   20,   21,   21,   22,   23,   24,
        25,   26,   27,    1,   28,   29,   30,   31,   32,   33,
        34,   34,   34,   34,   34,   34,   35,   34,   36,   34,
-       34,   37,   38,   34,   34,   34,   34,   39,   34,   34,
-       40,    1,   41,   42,   43,    1,   44,   45,   46,   47,
+       34,   37,   38,   34,   39,   34,   34,   40,   34,   34,
+       41,    1,   42,   43,   44,    1,   45,   46,   47,   48,
 
-       48,   49,   50,   51,   52,   34,   53,   54,   55,   56,
-       57,   58,   34,   59,   60,   61,   62,   63,   64,   65,
-       66,   67,   68,   69,   70,   71,    1,    1,    1,    1,
+       49,   50,   51,   52,   53,   34,   54,   55,   56,   57,
+       58,   59,   34,   60,   61,   62,   63,   64,   65,   66,
+       67,   68,   69,   70,   71,   72,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -513,321 +514,321 @@
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[72] =
+static yyconst flex_int32_t yy_meta[73] =
     {   0,
         1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    3,    3,    3,    3,    3,    3,
         3,    1,    1,    1,    1,    1,    1,    3,    3,    3,
-        3,    3,    3,    4,    4,    4,    4,    4,    4,    1,
-        1,    1,    4,    3,    3,    3,    3,    3,    3,    4,
+        3,    3,    3,    4,    4,    4,    4,    4,    4,    4,
+        1,    1,    1,    4,    3,    3,    3,    3,    3,    3,
         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    4,    4,    4,    4,    4,    1,    1,    1,
-        1
+        4,    4,    4,    4,    4,    4,    4,    4,    1,    1,
+        1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[784] =
+static yyconst flex_int16_t yy_base[787] =
     {   0,
-        0,    0,   69,   70,   79,    0, 1008, 1009, 1009, 1009,
-      982,   49,  145, 1009, 1009,  981,  142, 1009,  141,  139,
-      154,  167,  176,  979, 1009,  176,  979,   51, 1009,    0,
-     1009, 1009,  136,  116,  112,  159,  157,  156,  173,  946,
-      174,  179,  945,  175,  189,  939,  185,  952,  197,  203,
-      204,  209,  113, 1009,  186, 1009, 1009, 1009, 1009,  985,
-     1009, 1009,    0, 1009, 1009, 1009, 1009, 1009, 1009, 1009,
-     1009, 1009, 1009,  255, 1009,    0, 1009,  262,  280,  298,
-      317,    0,  332, 1009, 1009, 1009,  973, 1009, 1009, 1009,
-      972,    0, 1009, 1009,  935,  940,  227,  937,  945,  944,
+        0,    0,   70,   71,   80,    0, 1002, 1003, 1003, 1003,
+      976,   50,  147, 1003, 1003,  975,  144, 1003,  143,  141,
+      156,  169,  223,  973, 1003,  169,  973,   52, 1003,    0,
+     1003, 1003,  152,  117,  138,  118,  157,  148,  167,  939,
+      147,  173,  938,  126,  159,  932,  188,  945,  201,  198,
+      214,  211,  147, 1003,  158, 1003, 1003, 1003, 1003,  979,
+     1003, 1003,    0, 1003, 1003, 1003, 1003, 1003, 1003, 1003,
+     1003, 1003, 1003,  264, 1003,    0, 1003,  272,  234,  309,
+      291, 1003,    0,    0, 1003, 1003, 1003,  967, 1003, 1003,
+     1003,  966,    0, 1003, 1003,  928,  933,  187,  930,  938,
 
-      931,  934,  945,  234,  939,  927,  924,  937,  924,  921,
-      921,  927,  237,  206,  921,  931,  917,  923,  926,  927,
-        0,  919,  929,  300,  928,  923,  109,  909,  922,  913,
-      234,  906,  261,  918,  920,  264,  909,  906,  895,  904,
-      262,  281,  908,  904,  906,  895,  898,  249,  271,  315,
-      907,  895,  907,  150,  900,  899, 1009, 1009, 1009,    0,
-      356,    0,  366,  384,  391,  400,    0, 1009, 1009,  898,
-        0,  894,  889,  893,  902,  899,  294,  883,  883,  894,
-      886,  280,  896,  893,  893,  891,  888,  880,  886,  873,
-      871,  883,  869,  885,    0,  882,  870,  877,  874,  878,
+      937,  924,  927,  938,  242,  932,  920,  917,  930,  917,
+      914,  914,  920,  158,  257,  914,  924,  910,  916,  919,
+      920,    0,  912,  922,  276,  921,  916,  162,  902,  915,
+      906,  217,  899,  258,  911,  913,  271,  902,  899,  888,
+      897,  291,  291,  901,  897,  899,  888,  891,  286,  286,
+      299,  900,  888,  900,  206,  893,  892, 1003, 1003, 1003,
+        0,  344,    0,  358,  376, 1003,  383,  393,  256, 1003,
+     1003,  891,    0,  887,  882,  886,  895,  892,  304,  876,
+      876,  887,  879,  284,  889,  886,  886,  884,  881,  873,
+      879,  866,  864,  876,  862,  878,    0,  875,  863,  870,
 
-      879,  872,  869,  858,  857,  870,  873,  861,  869,  864,
-      855,  371,  860,  863,  854,  861,  850,  854,  845,  859,
-      858,  849,  855,  299,  839,  842,  840,  850,  840,  835,
-      833,  835,  845,  831,  833,  830,  841,  840,  843,  825,
-      313,  833,  829,  827,  836,  815,  374,  833,  835,  824,
-      816,  407,  414,  421,  428,  813,  823,  822,    0,  820,
-      433,    0,    0,  813,  811,  811,  812,  807,  815,  804,
-      821,  810,  436,    0,    0,  804,  814,  813,  813,    0,
-      798,  439,    0,    0,  800,  442,  807,  808,  799,  793,
-      792,  793,  792,  792,  445,    0,    0,  784,  783,  782,
+      867,  871,  872,  865,  862,  851,  850,  863,  866,  854,
+      862,  857,  848,  350,  853,  856,  847,  854,  843,  847,
+      838,  852,  851,  842,  848,  322,  832,  835,  833,  843,
+      833,  828,  826,  828,  838,  824,  826,  823,  834,  833,
+      836,  818,  299,  826,  822,  820,  829,  808,  364,  826,
+      828,  817,  809,  400,  407,  414,  421, 1003,  806,  816,
+      815,    0,  813,  426,    0,    0,  806,  804,  804,  805,
+      800,  808,  797,  814,  803,  429,    0,    0,  797,  807,
+      806,  806,    0,  791,  432,    0,    0,  793,  435,  800,
+      801,  792,  786,  785,  786,  785,  785,  438,    0,    0,
 
-      784,  785,  790,  784,  780,  793,  788,  788,  786,  785,
-      779,  773,  775,  774,  778,  770,  773,  768,  776,  781,
-      769,  766,  778,  769,    0,    0,  775,  771,    0,  763,
-      763,  768,  759,  766,  448,  763,    0,    0,    0,    0,
-      753,  765,  764,  763,  764,  764,    0,    0,    0,    0,
-      751,    0,  759,  750,    0,  749,  750,  744,  754,    0,
-        0,    0,  745,    0,  741,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  751,  452,  750,    0,    0,  748,
-      744,  741,    0,    0,    0,  454,  457,  460,  739,  735,
-      740,  731,  729,  742,  727,    0,  727,  740,  729,  725,
+      777,  776,  775,  777,  778,  783,  777,  773,  786,  781,
+      781,  779,  778,  772,  766,  768,  767,  771,  763,  766,
+      761,  769,  774,  762,  759,  771,  762,    0,    0,  768,
+      764,    0,  756,  756,  761,  752,  759,  441,  756,    0,
+        0,    0,    0,  746,  758,  757,  756,  757,  757,    0,
+        0,    0,    0,  744,    0,  752,  743,    0,  742,  743,
+      737,  747,    0,    0,    0,  738,    0,  734,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  744,  445,  743,
+        0,    0,  741,  737,  734,    0,    0,    0,  447,  450,
+      453,  732,  728,  733,  724,  722,  735,  720,    0,  720,
 
-      731,  726,  733,    0,  731,  728,  732,  716,  714,  717,
-      723,  729,  724,  723,  711,    0,  713,  714,    0,    0,
-        0,    0,  711,  714,    0,  708,    0,  721,  701,  710,
-      705,    0,  698,  698,  711,    0,  713,    0,  467,  725,
-      724,  723,  691,  690,    0,  707,  706,  701,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  690,  703,  690,
-      687,    0,    0,  692,  691,    0,  688,  695,  694,    0,
-      680,    0,    0,    0,    0,  677,    0,    0,  676,  687,
-      470,  680,  686,  685,  682,  677,  674,  667,  667,  680,
-      665,  677,    0,    0,  670,  692,  691,  690,  658,  657,
+      733,  722,  718,  724,  719,  726,    0,  724,  721,  725,
+      709,  707,  710,  716,  722,  717,  716,  704,    0,  706,
+      707,    0,    0,    0,    0,  704,  707,    0,  701,    0,
+      714,  694,  703,  698,    0,  691,  691,  704,    0,  706,
+        0,  460,  719,  718,  717,  684,  683,    0,  700,  699,
+      694,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      683,  696,  683,  680,    0,    0,  685,  684,    0,  681,
+      688,  687,    0,  673,    0,    0,    0,    0,  670,    0,
+        0,  669,  680,  463,  673,  679,  678,  675,  670,  667,
+      660,  660,  673,  658,  670,    0,    0,  663,  686,  685,
 
-      341,  452,    0,  669,  672,  670,  659,  655,    0,  667,
-      664,  663,  653,  652,  642,  659,  645,  475,  653,  656,
-        0,  672,  671,  670,  638,  637,    0,  651,  638,    0,
-      648,  641,  642,  645,    0,    0,    0,    0,  664,  663,
-        0,  641,  644,  629,  636,  627,  634,  635,  635,  634,
-      620,  485,  632,    0,  633,  622,  621,    0,    0,    0,
-      645,  644,  643,  611,  610,  606,  614,    0,  641,  640,
-        0,  618,  621,    0,  492,    0,  599,  608,    0,  604,
-      603,  612,  612,  600,  614,  598,  612,  607,    0,    0,
-        0,  623,  622,  590,    0,  590,    0,    0,  475,  480,
+      684,  651,  650,  445,  456,    0,  662,  665,  663,  652,
+      648,    0,  660,  657,  656,  646,  645,  635,  652,  638,
+      469,  646,  649,    0,  666,  665,  664,  631,  630,    0,
+      644,  631,    0,  641,  634,  635,  638,    0,    0,    0,
+        0,  658,  657,    0,  634,  637,  622,  629,  620,  627,
+      628,  628,  627,  613,  479,  625,    0,  626,  615,  614,
+        0,    0,    0,  639,  638,  637,  604,  603,  599,  607,
+        0,  635,  634,    0,  611,  614,    0,  486,    0,  592,
+      601,    0,  597,  596,  605,  605,  593,  607,  591,  605,
+      600,    0,    0,    0,  617,  616,  583,    0,  583,    0,
 
-      613,  600,  603,  586,  598,  586,  585,  594,  594,  610,
-      609,  577,    0,  577,  578,  577,  587,    0,  590,  586,
-      588,  584,  571,  601,  203,  579,  575,  567,  574,  586,
-      575,  571,  573,  571,  571,  570,    0,  558,  557,  567,
-        0,  586,  208,  564,    0,  568,  567,  551,  543,  551,
-      541,  549,    0,  546,  566,  555,  553,  538,  541,  555,
-      570,  551,  552,  549,  546,    0,  534,  548,  547,  531,
-      530,  550,  539,  537,  519,  518,    0,  545,  518,  543,
-      516,  520,  550,  531,  528,  527,  530,  526,  513,  510,
-      523,  508,  509,  511,  500,  499,    0,  505,  535,  516,
+        0,  469,  474,  607,  593,  596,  579,  591,  579,  578,
+      587,  587,  604,  603,  570,    0,  570,  571,  570,  580,
+        0,  583,  579,  581,  577,  564,  595,  350,  572,  568,
+      560,  567,  580,  568,  564,  566,  564,  564,  563,    0,
+      551,  550,  560,    0,  580,  469,  557,    0,  561,  560,
+      544,  536,  544,  534,  542,    0,  539,  560,  548,  546,
+      531,  534,  548,  564,  544,  545,  542,  539,    0,  527,
+      541,  540,  524,  523,  544,  532,  530,  512,  511,    0,
+      539,  511,  537,  509,  513,  544,  524,  521,  520,  523,
+      519,  506,  503,  516,  501,  502,  504,  493,  492,    0,
 
-      513,    0,    0,  509,    0,  508,    0,  514,  498,  495,
-      496,    0,  488,  496,  493,  513,  493,    0,    0,  505,
-        0,    0,  504,  488,  485,  486,  500,  499,  476,  482,
-        0,    0,  502,  475,  494,  486,  472,  481,  468,  472,
-        0,    0,  473,  472,    0,  472,  461,    0,  445,  466,
-        0,  470,    0,  454,  438,  437,  423,  369,    0,  350,
-      363,  312,  301,  280,    0,  296,  252,  230,    0,    0,
-        0,  208,  158,    0,  126,    0,    0, 1009,  521,  523,
-      525,  529,  171
+      498,  529,  509,  506,    0,    0,  502,    0,  501,    0,
+      507,  491,  488,  489,    0,  481,  489,  486,  507,  486,
+        0,    0,  498,    0,    0,  497,  481,  478,  479,  493,
+      492,  469,  475,    0,    0,  496,  468,  487,  479,  465,
+      474,  461,  465,    0,    0,  466,  465,    0,  465,  453,
+        0,  433,  446,    0,  452,    0,  437,  348,  347,  322,
+      326,    0,  322,  323,  256,  252,  249,    0,  229,  210,
+      214,    0,    0,    0,  158,  132,    0,  115,    0,    0,
+     1003,  515,  517,  519,  523,  163
     } ;
 
-static yyconst flex_int16_t yy_def[784] =
+static yyconst flex_int16_t yy_def[787] =
     {   0,
-      778,    1,  779,  779,  778,    5,  778,  778,  778,  778,
-      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
-      778,  778,  778,  778,  778,  778,  778,  778,  778,  780,
-      778,  778,  778,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  778,  778,  778,  778,  778,  778,  778,
-      778,  778,  781,  778,  778,  778,  778,  778,  778,  778,
-      778,  778,  778,  778,  778,  782,  778,  778,  778,  778,
-      778,  783,  778,  778,  778,  778,  778,  778,  778,  778,
-      778,  780,  778,  778,  780,  780,  780,  780,  780,  780,
+      781,    1,  782,  782,  781,    5,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  783,
+      781,  781,  781,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  784,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  785,  781,  781,   22,  781,
+      781,  781,  786,   23,  781,  781,  781,  781,  781,  781,
+      781,  781,  783,  781,  781,  783,  783,  783,  783,  783,
 
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  778,  778,  778,  781,
-      778,  782,  778,  778,  778,  778,  783,  778,  778,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  781,  781,  781,
+      784,  781,  785,  781,  781,  781,  781,  781,  786,  781,
+      781,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
 
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  778,  778,  778,  778,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  781,  781,  781,  781,  781,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
 
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
 
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
 
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
 
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
 
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-      780,  780,  780,  780,  780,  780,  780,    0,  778,  778,
-      778,  778,  778
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+        0,  781,  781,  781,  781,  781
     } ;
 
-static yyconst flex_int16_t yy_nxt[1081] =
+static yyconst flex_int16_t yy_nxt[1076] =
     {   0,
         8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
        18,   19,   20,   21,   22,   23,   23,   23,   23,   23,
        23,   24,   25,   26,   27,   28,   29,   30,   30,   30,
-       30,   30,   30,   30,   30,   30,   30,   30,   30,   31,
-       32,   33,   30,   34,   35,   36,   37,   38,   39,   40,
-       41,   42,   30,   43,   44,   45,   46,   47,   48,   49,
-       50,   51,   52,   53,   30,   30,   30,   54,   55,   56,
-       57,   59,   59,   65,   66,   90,   91,   60,   60,    8,
-       61,   62,    8,    8,    8,    8,    8,    8,    8,    8,
+       30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
+       31,   32,   33,   30,   34,   35,   36,   37,   38,   39,
+       40,   41,   42,   30,   43,   44,   45,   46,   47,   48,
+       49,   50,   51,   52,   53,   30,   30,   30,   54,   55,
+       56,   57,   59,   59,   65,   66,   91,   92,   60,   60,
+        8,   61,   62,    8,    8,    8,    8,    8,    8,    8,
         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
 
-        8,    8,    8,    8,    8,    8,   63,   63,   63,   63,
-       63,   63,   63,   63,   63,   63,   63,   63,    8,    8,
-        8,   63,   63,   63,   63,   63,   63,   63,   63,   63,
+        8,    8,    8,    8,    8,    8,    8,   63,   63,   63,
        63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63,   63,   63,   63,   63,    8,    8,    8,    8,
-       67,   70,   72,   74,   74,   74,   74,   74,   74,   74,
-       93,   95,   75,  155,  210,   73,   71,   76,   98,   68,
-       99,  156,  211,  167,  100,   96,   97,   94,   77,   78,
-       85,   79,   79,   79,   79,   79,   79,   80,   78,  777,
-       83,   83,   83,   83,   83,   83,   83,   86,   81,   87,
+        8,    8,    8,   63,   63,   63,   63,   63,   63,   63,
+       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
+       63,   63,   63,   63,   63,   63,   63,   63,    8,    8,
+        8,    8,   67,   70,   72,   74,   74,   74,   74,   74,
+       74,   74,  102,   96,   75,  169,  103,   73,   71,   76,
+      129,   68,  104,   86,  130,  105,   94,   97,   98,  780,
+       77,   78,  158,   79,   79,   79,   79,   79,   79,   80,
+       87,  119,   88,   89,   95,   99,  779,  100,  156,  120,
 
-       88,  248,  101,  249,  105,   82,  102,   81,  106,  109,
-      157,  110,  103,  107,   81,  104,  112,  118,  128,  108,
-      111,  776,  129,   81,  113,  119,  114,  121,  133,  115,
-      122,   82,  130,  123,  124,  116,  120,  655,  125,  656,
-      137,  126,  672,  134,  673,  131,  135,  138,  139,  193,
-      144,  140,  152,  145,  158,  148,  153,  141,  142,  149,
-      143,  146,  194,  150,  775,  154,  151,  774,  147,   74,
-       74,   74,   74,   74,   74,   74,  163,  163,  163,  163,
-      163,  163,  163,  172,  180,  215,  161,  173,  181,  182,
-      191,  216,   78,  164,   79,   79,   79,   79,   79,   79,
+       81,  101,  110,  131,  111,  106,  157,   82,   83,  107,
+      121,  113,  193,  112,  108,  778,  132,   81,  212,  114,
+      109,  115,  122,  194,  116,  123,  213,  159,  124,  125,
+      117,   82,  134,  126,   83,   78,  127,   84,   84,   84,
+       84,   84,   84,   84,  174,  138,  145,  135,  175,  146,
+      136,  777,  139,  140,   81,  153,  141,  147,  250,  154,
+      251,   82,  142,  143,  148,  144,  149,  776,  155,  217,
+      150,   81,  166,  781,  151,  218,  775,  152,   74,   74,
+       74,   74,   74,   74,   74,   82,  164,  164,  164,  164,
+      164,  164,  164,  182,  258,  162,  166,  183,  184,  781,
 
-       80,  192,  161,  239,  240,  230,  218,  223,  773,  164,
-       78,   81,   80,   80,   80,   80,   80,   80,   80,  219,
-      231,  220,  241,  224,  225,  232,  165,   81,  165,   81,
-      242,  166,  166,  166,  166,  166,  166,  166,  233,  268,
-      269,  262,  772,  771,   78,   81,   83,   83,   83,   83,
-       83,   83,   83,  203,  263,  312,  204,  205,  243,  313,
-      206,  330,  207,   81,  770,  252,  244,  252,  544,  331,
-      253,  253,  253,  253,  253,  253,  253,  769,  545,   81,
-      163,  163,  163,  163,  163,  163,  163,  298,  299,  300,
-      337,  338,  339,  254,  768,  254,  767,  164,  255,  255,
+      167,  195,  167,  165,  220,  168,  168,  168,  168,  168,
+      168,  168,  162,  774,  196,  225,  773,  221,  258,  222,
+      165,   78,  772,   80,   80,   80,   80,   80,   80,   80,
+      205,  226,  227,  206,  207,  232,  234,  208,  243,  209,
+       81,  241,  242,  245,  271,  272,  244,   82,  333,  235,
+      233,  246,  265,  254,  771,  254,  334,   81,  255,  255,
+      255,  255,  255,  255,  255,  266,  301,  302,  303,  770,
+      769,   82,  164,  164,  164,  164,  164,  164,  164,  315,
+      340,  341,  342,  316,  658,  256,  659,  256,  768,  165,
+      257,  257,  257,  257,  257,  257,  257,  168,  168,  168,
 
-      255,  255,  255,  255,  255,  166,  166,  166,  166,  166,
-      166,  166,  766,  164,  166,  166,  166,  166,  166,  166,
-      166,  253,  253,  253,  253,  253,  253,  253,  253,  253,
-      253,  253,  253,  253,  253,  255,  255,  255,  255,  255,
-      255,  255,  255,  255,  255,  255,  255,  255,  255,  348,
-      349,  350,  360,  361,  362,  368,  369,  370,  372,  373,
-      374,  383,  384,  385,  420,  421,  422,  440,  441,  442,
-      449,  450,  451,  452,  453,  454,  455,  456,  457,  546,
-      443,  444,  496,  497,  498,  522,  523,  524,  765,  547,
-      561,  562,  563,  764,  763,  499,  500,  762,  525,  526,
+      168,  168,  168,  168,  767,  766,  165,  168,  168,  168,
+      168,  168,  168,  168,  255,  255,  255,  255,  255,  255,
+      255,  255,  255,  255,  255,  255,  255,  255,  257,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      257,  257,  351,  352,  353,  363,  364,  365,  371,  372,
+      373,  375,  376,  377,  386,  387,  388,  423,  424,  425,
+      443,  444,  445,  452,  453,  454,  455,  456,  457,  458,
+      459,  460,  547,  446,  447,  499,  500,  501,  525,  526,
+      527,  765,  548,  549,  564,  565,  566,  764,  502,  503,
+      763,  528,  529,  550,  595,  596,  631,  567,  568,  762,
 
-      592,  593,  628,  564,  565,  761,  566,  610,  611,  760,
-      759,  758,  629,  594,  630,  757,  631,  632,  756,  755,
-      612,   58,   58,   58,   58,   92,   92,  160,  160,  162,
-      754,  162,  162,  753,  752,  751,  750,  749,  748,  747,
-      746,  745,  744,  743,  742,  741,  740,  739,  738,  737,
-      736,  735,  734,  733,  732,  731,  730,  729,  728,  727,
-      726,  725,  724,  723,  722,  721,  720,  719,  718,  717,
-      716,  715,  714,  713,  712,  711,  710,  709,  708,  707,
-      706,  705,  704,  703,  702,  701,  700,  699,  698,  697,
-      696,  695,  694,  693,  692,  691,  690,  689,  688,  687,
+      569,  613,  614,  675,  761,  676,  632,  597,  633,  760,
+      634,  635,  759,  758,  615,   58,   58,   58,   58,   93,
+       93,  161,  161,  163,  757,  163,  163,  756,  755,  754,
+      753,  752,  751,  750,  749,  748,  747,  746,  745,  744,
+      743,  742,  741,  740,  739,  738,  737,  736,  735,  734,
+      733,  732,  731,  730,  729,  728,  727,  726,  725,  724,
+      723,  722,  721,  720,  719,  718,  717,  716,  715,  714,
+      713,  712,  711,  710,  709,  708,  707,  706,  705,  704,
+      703,  702,  701,  700,  699,  698,  697,  696,  695,  694,
+      693,  692,  691,  690,  689,  688,  687,  686,  685,  684,
 
-      686,  685,  684,  683,  682,  681,  680,  679,  678,  677,
-      676,  675,  674,  671,  670,  669,  668,  667,  666,  665,
-      664,  663,  662,  661,  660,  659,  658,  657,  654,  653,
-      652,  651,  650,  649,  648,  647,  646,  645,  644,  643,
-      642,  641,  640,  639,  638,  637,  636,  635,  634,  633,
-      627,  626,  625,  624,  623,  622,  621,  620,  619,  618,
-      617,  616,  615,  614,  613,  609,  608,  607,  606,  605,
-      604,  603,  602,  601,  600,  599,  598,  597,  596,  595,
-      591,  590,  589,  588,  587,  586,  585,  584,  583,  582,
-      581,  580,  579,  578,  577,  576,  575,  574,  573,  572,
+      683,  682,  681,  680,  679,  678,  677,  674,  673,  672,
+      671,  670,  669,  668,  667,  666,  665,  664,  663,  662,
+      661,  660,  657,  656,  655,  654,  653,  652,  651,  650,
+      649,  648,  647,  646,  645,  644,  643,  642,  641,  640,
+      639,  638,  637,  636,  630,  629,  628,  627,  626,  625,
+      624,  623,  622,  621,  620,  619,  618,  617,  616,  612,
+      611,  610,  609,  608,  607,  606,  605,  604,  603,  602,
+      601,  600,  599,  598,  594,  593,  592,  591,  590,  589,
+      588,  587,  586,  585,  584,  583,  582,  581,  580,  579,
+      578,  577,  576,  575,  574,  573,  572,  571,  570,  563,
 
-      571,  570,  569,  568,  567,  560,  559,  558,  557,  556,
-      555,  554,  553,  552,  551,  550,  549,  548,  543,  542,
-      541,  540,  539,  538,  537,  536,  535,  534,  533,  532,
-      531,  530,  529,  528,  527,  521,  520,  519,  518,  517,
-      516,  515,  514,  513,  512,  511,  510,  509,  508,  507,
-      506,  505,  504,  503,  502,  501,  495,  494,  493,  492,
-      491,  490,  489,  488,  487,  486,  485,  484,  483,  482,
-      481,  480,  479,  478,  477,  476,  475,  474,  473,  472,
-      471,  470,  469,  468,  467,  466,  465,  464,  463,  462,
-      461,  460,  459,  458,  448,  447,  446,  445,  439,  438,
+      562,  561,  560,  559,  558,  557,  556,  555,  554,  553,
+      552,  551,  546,  545,  544,  543,  542,  541,  540,  539,
+      538,  537,  536,  535,  534,  533,  532,  531,  530,  524,
+      523,  522,  521,  520,  519,  518,  517,  516,  515,  514,
+      513,  512,  511,  510,  509,  508,  507,  506,  505,  504,
+      498,  497,  496,  495,  494,  493,  492,  491,  490,  489,
+      488,  487,  486,  485,  484,  483,  482,  481,  480,  479,
+      478,  477,  476,  475,  474,  473,  472,  471,  470,  469,
+      468,  467,  466,  465,  464,  463,  462,  461,  451,  450,
+      449,  448,  442,  441,  440,  439,  438,  437,  436,  435,
 
-      437,  436,  435,  434,  433,  432,  431,  430,  429,  428,
-      427,  426,  425,  424,  423,  419,  418,  417,  416,  415,
-      414,  413,  412,  411,  410,  409,  408,  407,  406,  405,
-      404,  403,  402,  401,  400,  399,  398,  397,  396,  395,
-      394,  393,  392,  391,  390,  389,  388,  387,  386,  382,
-      381,  380,  379,  378,  377,  376,  375,  371,  367,  366,
-      365,  364,  363,  359,  358,  357,  356,  355,  354,  353,
-      352,  351,  347,  346,  345,  344,  343,  342,  341,  340,
-      336,  335,  334,  333,  332,  329,  328,  327,  326,  325,
-      324,  323,  322,  321,  320,  319,  318,  317,  316,  315,
+      434,  433,  432,  431,  430,  429,  428,  427,  426,  422,
+      421,  420,  419,  418,  417,  416,  415,  414,  413,  412,
+      411,  410,  409,  408,  407,  406,  405,  404,  403,  402,
+      401,  400,  399,  398,  397,  396,  395,  394,  393,  392,
+      391,  390,  389,  385,  384,  383,  382,  381,  380,  379,
+      378,  374,  370,  369,  368,  367,  366,  362,  361,  360,
+      359,  358,  357,  356,  355,  354,  350,  349,  348,  347,
+      346,  345,  344,  343,  339,  338,  337,  336,  335,  332,
+      331,  330,  329,  328,  327,  326,  325,  324,  323,  322,
+      321,  320,  319,  318,  317,  314,  313,  312,  311,  310,
 
-      314,  311,  310,  309,  308,  307,  306,  305,  304,  303,
-      302,  301,  297,  296,  295,  294,  293,  292,  291,  290,
-      289,  288,  287,  286,  285,  284,  283,  282,  281,  280,
-      279,  278,  277,  276,  275,  274,  273,  272,  271,  270,
-      267,  266,  265,  264,  261,  260,  259,  258,  257,  256,
-      251,  250,  247,  246,  245,  238,  237,  236,  235,  234,
-      229,  228,  227,  226,  222,  221,  217,  214,  213,  212,
-      209,  208,  202,  201,  200,  199,  198,  197,  196,  195,
-      190,  189,  188,  187,  186,  185,  184,  183,  179,  178,
-      177,  176,  175,  174,  171,  170,  169,  168,  159,  136,
+      309,  308,  307,  306,  305,  304,  300,  299,  298,  297,
+      296,  295,  294,  293,  292,  291,  290,  289,  288,  287,
+      286,  285,  284,  283,  282,  281,  280,  279,  278,  277,
+      276,  275,  274,  273,  270,  269,  268,  267,  264,  263,
+      262,  261,  260,  259,  253,  252,  249,  248,  247,  240,
+      239,  238,  237,  236,  231,  230,  229,  228,  224,  223,
+      219,  216,  215,  214,  211,  210,  204,  203,  202,  201,
+      200,  199,  198,  197,  192,  191,  190,  189,  188,  187,
+      186,  185,  181,  180,  179,  178,  177,  176,  173,  172,
+      171,  170,  160,  137,  133,  128,  118,   90,   85,   69,
 
-      132,  127,  117,   89,   84,   69,   64,  778,    7,  778,
-      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
-      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
-      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
-      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
-      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
-      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
-      778,  778,  778,  778,  778,  778,  778,  778,  778,  778
+       64,  781,    7,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781
     } ;
 
-static yyconst flex_int16_t yy_chk[1081] =
+static yyconst flex_int16_t yy_chk[1076] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -836,7 +837,7 @@
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    3,    4,   12,   12,   28,   28,    3,    4,    5,
+        1,    1,    3,    4,   12,   12,   28,   28,    3,    4,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
 
@@ -845,112 +846,112 @@
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-       13,   17,   19,   20,   20,   20,   20,   20,   20,   20,
-       33,   34,   21,   53,  127,   19,   17,   21,   35,   13,
-       35,   53,  127,  783,   35,   34,   34,   33,   21,   22,
-       26,   22,   22,   22,   22,   22,   22,   22,   23,  775,
-       23,   23,   23,   23,   23,   23,   23,   26,   22,   26,
+        5,    5,   13,   17,   19,   20,   20,   20,   20,   20,
+       20,   20,   36,   34,   21,  786,   36,   19,   17,   21,
+       44,   13,   36,   26,   44,   36,   33,   34,   34,  778,
+       21,   22,   55,   22,   22,   22,   22,   22,   22,   22,
+       26,   41,   26,   26,   33,   35,  776,   35,   53,   41,
 
-       26,  154,   36,  154,   37,   22,   36,   23,   37,   38,
-       55,   38,   36,   37,   22,   36,   39,   41,   44,   37,
-       38,  773,   44,   23,   39,   41,   39,   42,   47,   39,
-       42,   22,   45,   42,   42,   39,   41,  625,   42,  625,
-       49,   42,  643,   47,  643,   45,   47,   49,   49,  114,
-       50,   49,   52,   50,   55,   51,   52,   49,   49,   51,
-       49,   50,  114,   51,  772,   52,   51,  768,   50,   74,
-       74,   74,   74,   74,   74,   74,   78,   78,   78,   78,
-       78,   78,   78,   97,  104,  131,   74,   97,  104,  104,
-      113,  131,   79,   78,   79,   79,   79,   79,   79,   79,
+       22,   35,   38,   45,   38,   37,   53,   22,   22,   37,
+       41,   39,  114,   38,   37,  775,   45,   22,  128,   39,
+       37,   39,   42,  114,   39,   42,  128,   55,   42,   42,
+       39,   22,   47,   42,   22,   23,   42,   23,   23,   23,
+       23,   23,   23,   23,   98,   49,   50,   47,   98,   50,
+       47,  771,   49,   49,   23,   52,   49,   50,  155,   52,
+      155,   23,   49,   49,   50,   49,   51,  770,   52,  132,
+       51,   23,   79,   79,   51,  132,  769,   51,   74,   74,
+       74,   74,   74,   74,   74,   23,   78,   78,   78,   78,
+       78,   78,   78,  105,  169,   74,   79,  105,  105,   79,
 
-       79,  113,   74,  148,  148,  141,  133,  136,  767,   78,
-       80,   79,   80,   80,   80,   80,   80,   80,   80,  133,
-      141,  133,  149,  136,  136,  142,   81,   79,   81,   80,
-      149,   81,   81,   81,   81,   81,   81,   81,  142,  182,
-      182,  177,  766,  764,   83,   80,   83,   83,   83,   83,
-       83,   83,   83,  124,  177,  224,  124,  124,  150,  224,
-      124,  241,  124,   83,  763,  161,  150,  161,  501,  241,
-      161,  161,  161,  161,  161,  161,  161,  762,  501,   83,
-      163,  163,  163,  163,  163,  163,  163,  212,  212,  212,
-      247,  247,  247,  164,  761,  164,  760,  163,  164,  164,
+       81,  115,   81,   78,  134,   81,   81,   81,   81,   81,
+       81,   81,   74,  767,  115,  137,  766,  134,  169,  134,
+       78,   80,  765,   80,   80,   80,   80,   80,   80,   80,
+      125,  137,  137,  125,  125,  142,  143,  125,  150,  125,
+       80,  149,  149,  151,  184,  184,  150,   80,  243,  143,
+      142,  151,  179,  162,  764,  162,  243,   80,  162,  162,
+      162,  162,  162,  162,  162,  179,  214,  214,  214,  763,
+      761,   80,  164,  164,  164,  164,  164,  164,  164,  226,
+      249,  249,  249,  226,  628,  165,  628,  165,  760,  164,
+      165,  165,  165,  165,  165,  165,  165,  167,  167,  167,
 
-      164,  164,  164,  164,  164,  165,  165,  165,  165,  165,
-      165,  165,  758,  163,  166,  166,  166,  166,  166,  166,
-      166,  252,  252,  252,  252,  252,  252,  252,  253,  253,
-      253,  253,  253,  253,  253,  254,  254,  254,  254,  254,
-      254,  254,  255,  255,  255,  255,  255,  255,  255,  261,
-      261,  261,  273,  273,  273,  282,  282,  282,  286,  286,
-      286,  295,  295,  295,  335,  335,  335,  376,  376,  376,
-      386,  386,  386,  387,  387,  387,  388,  388,  388,  502,
-      376,  376,  439,  439,  439,  481,  481,  481,  757,  502,
-      518,  518,  518,  756,  755,  439,  439,  754,  481,  481,
+      167,  167,  167,  167,  759,  758,  164,  168,  168,  168,
+      168,  168,  168,  168,  254,  254,  254,  254,  254,  254,
+      254,  255,  255,  255,  255,  255,  255,  255,  256,  256,
+      256,  256,  256,  256,  256,  257,  257,  257,  257,  257,
+      257,  257,  264,  264,  264,  276,  276,  276,  285,  285,
+      285,  289,  289,  289,  298,  298,  298,  338,  338,  338,
+      379,  379,  379,  389,  389,  389,  390,  390,  390,  391,
+      391,  391,  504,  379,  379,  442,  442,  442,  484,  484,
+      484,  757,  504,  505,  521,  521,  521,  755,  442,  442,
+      753,  484,  484,  505,  555,  555,  602,  521,  521,  752,
 
-      552,  552,  599,  518,  518,  752,  518,  575,  575,  750,
-      749,  747,  599,  552,  600,  746,  600,  600,  744,  743,
-      575,  779,  779,  779,  779,  780,  780,  781,  781,  782,
-      740,  782,  782,  739,  738,  737,  736,  735,  734,  733,
-      730,  729,  728,  727,  726,  725,  724,  723,  720,  717,
-      716,  715,  714,  713,  711,  710,  709,  708,  706,  704,
-      701,  700,  699,  698,  696,  695,  694,  693,  692,  691,
-      690,  689,  688,  687,  686,  685,  684,  683,  682,  681,
-      680,  679,  678,  676,  675,  674,  673,  672,  671,  670,
-      669,  668,  667,  665,  664,  663,  662,  661,  660,  659,
+      521,  578,  578,  646,  750,  646,  602,  555,  603,  749,
+      603,  603,  747,  746,  578,  782,  782,  782,  782,  783,
+      783,  784,  784,  785,  743,  785,  785,  742,  741,  740,
+      739,  738,  737,  736,  733,  732,  731,  730,  729,  728,
+      727,  726,  723,  720,  719,  718,  717,  716,  714,  713,
+      712,  711,  709,  707,  704,  703,  702,  701,  699,  698,
+      697,  696,  695,  694,  693,  692,  691,  690,  689,  688,
+      687,  686,  685,  684,  683,  682,  681,  679,  678,  677,
+      676,  675,  674,  673,  672,  671,  670,  668,  667,  666,
+      665,  664,  663,  662,  661,  660,  659,  658,  657,  655,
 
-      658,  657,  656,  655,  654,  652,  651,  650,  649,  648,
-      647,  646,  644,  642,  640,  639,  638,  636,  635,  634,
-      633,  632,  631,  630,  629,  628,  627,  626,  624,  623,
-      622,  621,  620,  619,  617,  616,  615,  614,  612,  611,
-      610,  609,  608,  607,  606,  605,  604,  603,  602,  601,
-      596,  594,  593,  592,  588,  587,  586,  585,  584,  583,
-      582,  581,  580,  578,  577,  573,  572,  570,  569,  567,
-      566,  565,  564,  563,  562,  561,  557,  556,  555,  553,
-      551,  550,  549,  548,  547,  546,  545,  544,  543,  542,
-      540,  539,  534,  533,  532,  531,  529,  528,  526,  525,
+      654,  653,  652,  651,  650,  649,  647,  645,  643,  642,
+      641,  639,  638,  637,  636,  635,  634,  633,  632,  631,
+      630,  629,  627,  626,  625,  624,  623,  622,  620,  619,
+      618,  617,  615,  614,  613,  612,  611,  610,  609,  608,
+      607,  606,  605,  604,  599,  597,  596,  595,  591,  590,
+      589,  588,  587,  586,  585,  584,  583,  581,  580,  576,
+      575,  573,  572,  570,  569,  568,  567,  566,  565,  564,
+      560,  559,  558,  556,  554,  553,  552,  551,  550,  549,
+      548,  547,  546,  545,  543,  542,  537,  536,  535,  534,
+      532,  531,  529,  528,  527,  526,  525,  523,  522,  520,
 
-      524,  523,  522,  520,  519,  517,  516,  515,  514,  513,
-      512,  511,  510,  508,  507,  506,  505,  504,  500,  499,
-      498,  497,  496,  495,  492,  491,  490,  489,  488,  487,
-      486,  485,  484,  483,  482,  480,  479,  476,  471,  469,
-      468,  467,  465,  464,  461,  460,  459,  458,  448,  447,
-      446,  444,  443,  442,  441,  440,  437,  435,  434,  433,
-      431,  430,  429,  428,  426,  424,  423,  418,  417,  415,
-      414,  413,  412,  411,  410,  409,  408,  407,  406,  405,
-      403,  402,  401,  400,  399,  398,  397,  395,  394,  393,
-      392,  391,  390,  389,  382,  381,  380,  377,  375,  365,
+      519,  518,  517,  516,  515,  514,  513,  511,  510,  509,
+      508,  507,  503,  502,  501,  500,  499,  498,  495,  494,
+      493,  492,  491,  490,  489,  488,  487,  486,  485,  483,
+      482,  479,  474,  472,  471,  470,  468,  467,  464,  463,
+      462,  461,  451,  450,  449,  447,  446,  445,  444,  443,
+      440,  438,  437,  436,  434,  433,  432,  431,  429,  427,
+      426,  421,  420,  418,  417,  416,  415,  414,  413,  412,
+      411,  410,  409,  408,  406,  405,  404,  403,  402,  401,
+      400,  398,  397,  396,  395,  394,  393,  392,  385,  384,
+      383,  380,  378,  368,  366,  362,  361,  360,  359,  357,
 
-      363,  359,  358,  357,  356,  354,  353,  351,  346,  345,
-      344,  343,  342,  341,  336,  334,  333,  332,  331,  330,
-      328,  327,  324,  323,  322,  321,  320,  319,  318,  317,
-      316,  315,  314,  313,  312,  311,  310,  309,  308,  307,
-      306,  305,  304,  303,  302,  301,  300,  299,  298,  294,
-      293,  292,  291,  290,  289,  288,  287,  285,  281,  279,
-      278,  277,  276,  272,  271,  270,  269,  268,  267,  266,
-      265,  264,  260,  258,  257,  256,  251,  250,  249,  248,
-      246,  245,  244,  243,  242,  240,  239,  238,  237,  236,
-      235,  234,  233,  232,  231,  230,  229,  228,  227,  226,
+      356,  354,  349,  348,  347,  346,  345,  344,  339,  337,
+      336,  335,  334,  333,  331,  330,  327,  326,  325,  324,
+      323,  322,  321,  320,  319,  318,  317,  316,  315,  314,
+      313,  312,  311,  310,  309,  308,  307,  306,  305,  304,
+      303,  302,  301,  297,  296,  295,  294,  293,  292,  291,
+      290,  288,  284,  282,  281,  280,  279,  275,  274,  273,
+      272,  271,  270,  269,  268,  267,  263,  261,  260,  259,
+      253,  252,  251,  250,  248,  247,  246,  245,  244,  242,
+      241,  240,  239,  238,  237,  236,  235,  234,  233,  232,
+      231,  230,  229,  228,  227,  225,  224,  223,  222,  221,
 
-      225,  223,  222,  221,  220,  219,  218,  217,  216,  215,
-      214,  213,  211,  210,  209,  208,  207,  206,  205,  204,
-      203,  202,  201,  200,  199,  198,  197,  196,  194,  193,
-      192,  191,  190,  189,  188,  187,  186,  185,  184,  183,
-      181,  180,  179,  178,  176,  175,  174,  173,  172,  170,
-      156,  155,  153,  152,  151,  147,  146,  145,  144,  143,
-      140,  139,  138,  137,  135,  134,  132,  130,  129,  128,
-      126,  125,  123,  122,  120,  119,  118,  117,  116,  115,
-      112,  111,  110,  109,  108,  107,  106,  105,  103,  102,
-      101,  100,   99,   98,   96,   95,   91,   87,   60,   48,
+      220,  219,  218,  217,  216,  215,  213,  212,  211,  210,
+      209,  208,  207,  206,  205,  204,  203,  202,  201,  200,
+      199,  198,  196,  195,  194,  193,  192,  191,  190,  189,
+      188,  187,  186,  185,  183,  182,  181,  180,  178,  177,
+      176,  175,  174,  172,  157,  156,  154,  153,  152,  148,
+      147,  146,  145,  144,  141,  140,  139,  138,  136,  135,
+      133,  131,  130,  129,  127,  126,  124,  123,  121,  120,
+      119,  118,  117,  116,  113,  112,  111,  110,  109,  108,
+      107,  106,  104,  103,  102,  101,  100,   99,   97,   96,
+       92,   88,   60,   48,   46,   43,   40,   27,   24,   16,
 
-       46,   43,   40,   27,   24,   16,   11,    7,  778,  778,
-      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
-      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
-      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
-      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
-      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
-      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
-      778,  778,  778,  778,  778,  778,  778,  778,  778,  778
+       11,    7,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[228] =
+static yyconst flex_int32_t yy_rule_can_match_eol[231] =
     {   0,
 0, 0, 0, 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, 
@@ -963,7 +964,7 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 1, 0, 0,     };
+    0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,     };
 
 /* The intent behind this definition is that it'll catch
  * any uses of REJECT which flex missed.
@@ -1008,6 +1009,7 @@
 static int ES2_reserved_ES3_keyword(TParseContext *context, int token);
 static int ES2_keyword_ES3_reserved(TParseContext *context, int token);
 static int ES2_ident_ES3_keyword(TParseContext *context, int token);
+static int uint_constant(TParseContext *context);
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1293,13 +1295,13 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 779 )
+				if ( yy_current_state >= 782 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 778 );
+		while ( yy_current_state != 781 );
 		yy_cp = yyg->yy_last_accepting_cpos;
 		yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1751,210 +1753,222 @@
 	YY_BREAK
 case 175:
 YY_RULE_SETUP
-{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
+{ return uint_constant(context); }
 	YY_BREAK
 case 176:
 YY_RULE_SETUP
-{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
+{ return uint_constant(context); }
 	YY_BREAK
 case 177:
 YY_RULE_SETUP
-{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
+{ return uint_constant(context); }
 	YY_BREAK
 case 178:
 YY_RULE_SETUP
-{  return(ADD_ASSIGN); }
+{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
 	YY_BREAK
 case 179:
 YY_RULE_SETUP
-{  return(SUB_ASSIGN); }
+{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
 	YY_BREAK
 case 180:
 YY_RULE_SETUP
-{  return(MUL_ASSIGN); }
+{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
 	YY_BREAK
 case 181:
 YY_RULE_SETUP
-{  return(DIV_ASSIGN); }
+{  return(ADD_ASSIGN); }
 	YY_BREAK
 case 182:
 YY_RULE_SETUP
-{  return(MOD_ASSIGN); }
+{  return(SUB_ASSIGN); }
 	YY_BREAK
 case 183:
 YY_RULE_SETUP
-{  return(LEFT_ASSIGN); }
+{  return(MUL_ASSIGN); }
 	YY_BREAK
 case 184:
 YY_RULE_SETUP
-{  return(RIGHT_ASSIGN); }
+{  return(DIV_ASSIGN); }
 	YY_BREAK
 case 185:
 YY_RULE_SETUP
-{  return(AND_ASSIGN); }
+{  return(MOD_ASSIGN); }
 	YY_BREAK
 case 186:
 YY_RULE_SETUP
-{  return(XOR_ASSIGN); }
+{  return(LEFT_ASSIGN); }
 	YY_BREAK
 case 187:
 YY_RULE_SETUP
-{  return(OR_ASSIGN); }
+{  return(RIGHT_ASSIGN); }
 	YY_BREAK
 case 188:
 YY_RULE_SETUP
-{  return(INC_OP); }
+{  return(AND_ASSIGN); }
 	YY_BREAK
 case 189:
 YY_RULE_SETUP
-{  return(DEC_OP); }
+{  return(XOR_ASSIGN); }
 	YY_BREAK
 case 190:
 YY_RULE_SETUP
-{  return(AND_OP); }
+{  return(OR_ASSIGN); }
 	YY_BREAK
 case 191:
 YY_RULE_SETUP
-{  return(OR_OP); }
+{  return(INC_OP); }
 	YY_BREAK
 case 192:
 YY_RULE_SETUP
-{  return(XOR_OP); }
+{  return(DEC_OP); }
 	YY_BREAK
 case 193:
 YY_RULE_SETUP
-{  return(LE_OP); }
+{  return(AND_OP); }
 	YY_BREAK
 case 194:
 YY_RULE_SETUP
-{  return(GE_OP); }
+{  return(OR_OP); }
 	YY_BREAK
 case 195:
 YY_RULE_SETUP
-{  return(EQ_OP); }
+{  return(XOR_OP); }
 	YY_BREAK
 case 196:
 YY_RULE_SETUP
-{  return(NE_OP); }
+{  return(LE_OP); }
 	YY_BREAK
 case 197:
 YY_RULE_SETUP
-{  return(LEFT_OP); }
+{  return(GE_OP); }
 	YY_BREAK
 case 198:
 YY_RULE_SETUP
-{  return(RIGHT_OP); }
+{  return(EQ_OP); }
 	YY_BREAK
 case 199:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(SEMICOLON); }
+{  return(NE_OP); }
 	YY_BREAK
 case 200:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(LEFT_BRACE); }
+{  return(LEFT_OP); }
 	YY_BREAK
 case 201:
 YY_RULE_SETUP
-{ return(RIGHT_BRACE); }
+{  return(RIGHT_OP); }
 	YY_BREAK
 case 202:
 YY_RULE_SETUP
-{ if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
+{ context->lexAfterType = false; return(SEMICOLON); }
 	YY_BREAK
 case 203:
 YY_RULE_SETUP
-{ return(COLON); }
+{ context->lexAfterType = false; return(LEFT_BRACE); }
 	YY_BREAK
 case 204:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(EQUAL); }
+{ return(RIGHT_BRACE); }
 	YY_BREAK
 case 205:
 YY_RULE_SETUP
-{ context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
+{ if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
 	YY_BREAK
 case 206:
 YY_RULE_SETUP
-{ context->inTypeParen = false; return(RIGHT_PAREN); }
+{ return(COLON); }
 	YY_BREAK
 case 207:
 YY_RULE_SETUP
-{ return(LEFT_BRACKET); }
+{ context->lexAfterType = false; return(EQUAL); }
 	YY_BREAK
 case 208:
 YY_RULE_SETUP
-{ return(RIGHT_BRACKET); }
+{ context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
 	YY_BREAK
 case 209:
 YY_RULE_SETUP
-{ BEGIN(FIELDS);  return(DOT); }
+{ context->inTypeParen = false; return(RIGHT_PAREN); }
 	YY_BREAK
 case 210:
 YY_RULE_SETUP
-{ return(BANG); }
+{ return(LEFT_BRACKET); }
 	YY_BREAK
 case 211:
 YY_RULE_SETUP
-{ return(DASH); }
+{ return(RIGHT_BRACKET); }
 	YY_BREAK
 case 212:
 YY_RULE_SETUP
-{ return(TILDE); }
+{ BEGIN(FIELDS);  return(DOT); }
 	YY_BREAK
 case 213:
 YY_RULE_SETUP
-{ return(PLUS); }
+{ return(BANG); }
 	YY_BREAK
 case 214:
 YY_RULE_SETUP
-{ return(STAR); }
+{ return(DASH); }
 	YY_BREAK
 case 215:
 YY_RULE_SETUP
-{ return(SLASH); }
+{ return(TILDE); }
 	YY_BREAK
 case 216:
 YY_RULE_SETUP
-{ return(PERCENT); }
+{ return(PLUS); }
 	YY_BREAK
 case 217:
 YY_RULE_SETUP
-{ return(LEFT_ANGLE); }
+{ return(STAR); }
 	YY_BREAK
 case 218:
 YY_RULE_SETUP
-{ return(RIGHT_ANGLE); }
+{ return(SLASH); }
 	YY_BREAK
 case 219:
 YY_RULE_SETUP
-{ return(VERTICAL_BAR); }
+{ return(PERCENT); }
 	YY_BREAK
 case 220:
 YY_RULE_SETUP
-{ return(CARET); }
+{ return(LEFT_ANGLE); }
 	YY_BREAK
 case 221:
 YY_RULE_SETUP
-{ return(AMPERSAND); }
+{ return(RIGHT_ANGLE); }
 	YY_BREAK
 case 222:
 YY_RULE_SETUP
-{ return(QUESTION); }
+{ return(VERTICAL_BAR); }
 	YY_BREAK
 case 223:
 YY_RULE_SETUP
+{ return(CARET); }
+	YY_BREAK
+case 224:
+YY_RULE_SETUP
+{ return(AMPERSAND); }
+	YY_BREAK
+case 225:
+YY_RULE_SETUP
+{ return(QUESTION); }
+	YY_BREAK
+case 226:
+YY_RULE_SETUP
 { 
     BEGIN(INITIAL);
     yylval->lex.string = NewPoolTString(yytext); 
     return FIELD_SELECTION;
 }
 	YY_BREAK
-case 224:
+case 227:
 YY_RULE_SETUP
 {}
 	YY_BREAK
-case 225:
-/* rule 225 can match eol */
+case 228:
+/* rule 228 can match eol */
 YY_RULE_SETUP
 {  }
 	YY_BREAK
@@ -1963,11 +1977,11 @@
 case YY_STATE_EOF(FIELDS):
 { context->AfterEOF = true; yyterminate(); }
 	YY_BREAK
-case 226:
+case 229:
 YY_RULE_SETUP
 { context->warning(yylineno, "Unknown char", yytext, ""); return 0; }
 	YY_BREAK
-case 227:
+case 230:
 YY_RULE_SETUP
 ECHO;
 	YY_BREAK
@@ -2263,7 +2277,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 779 )
+			if ( yy_current_state >= 782 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2292,11 +2306,11 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 779 )
+		if ( yy_current_state >= 782 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 778);
+	yy_is_jam = (yy_current_state == 781);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3219,6 +3233,22 @@
     return token;
 }
 
+int uint_constant(TParseContext *context)
+{
+    struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
+    yyscan_t yyscanner = (yyscan_t) context->scanner;
+
+    if (context->shaderVersion < 300)
+    {
+        context->error(yylineno, "Unsigned integers are unsupported prior to GLSL ES 3.00", yytext, "");
+        context->recover();
+        return 0;
+    }
+
+    yylval->lex.u = static_cast<unsigned int>(strtol(yytext, 0, 0));
+    return UINTCONSTANT;
+}
+
 void yyerror(TParseContext* context, const char* reason) {
     struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
 
diff --git a/src/compiler/glslang_tab.cpp b/src/compiler/glslang_tab.cpp
index ed7de2e..7c8d706 100644
--- a/src/compiler/glslang_tab.cpp
+++ b/src/compiler/glslang_tab.cpp
@@ -195,53 +195,54 @@
      TYPE_NAME = 320,
      FLOATCONSTANT = 321,
      INTCONSTANT = 322,
-     BOOLCONSTANT = 323,
-     FIELD_SELECTION = 324,
-     LEFT_OP = 325,
-     RIGHT_OP = 326,
-     INC_OP = 327,
-     DEC_OP = 328,
-     LE_OP = 329,
-     GE_OP = 330,
-     EQ_OP = 331,
-     NE_OP = 332,
-     AND_OP = 333,
-     OR_OP = 334,
-     XOR_OP = 335,
-     MUL_ASSIGN = 336,
-     DIV_ASSIGN = 337,
-     ADD_ASSIGN = 338,
-     MOD_ASSIGN = 339,
-     LEFT_ASSIGN = 340,
-     RIGHT_ASSIGN = 341,
-     AND_ASSIGN = 342,
-     XOR_ASSIGN = 343,
-     OR_ASSIGN = 344,
-     SUB_ASSIGN = 345,
-     LEFT_PAREN = 346,
-     RIGHT_PAREN = 347,
-     LEFT_BRACKET = 348,
-     RIGHT_BRACKET = 349,
-     LEFT_BRACE = 350,
-     RIGHT_BRACE = 351,
-     DOT = 352,
-     COMMA = 353,
-     COLON = 354,
-     EQUAL = 355,
-     SEMICOLON = 356,
-     BANG = 357,
-     DASH = 358,
-     TILDE = 359,
-     PLUS = 360,
-     STAR = 361,
-     SLASH = 362,
-     PERCENT = 363,
-     LEFT_ANGLE = 364,
-     RIGHT_ANGLE = 365,
-     VERTICAL_BAR = 366,
-     CARET = 367,
-     AMPERSAND = 368,
-     QUESTION = 369
+     UINTCONSTANT = 323,
+     BOOLCONSTANT = 324,
+     FIELD_SELECTION = 325,
+     LEFT_OP = 326,
+     RIGHT_OP = 327,
+     INC_OP = 328,
+     DEC_OP = 329,
+     LE_OP = 330,
+     GE_OP = 331,
+     EQ_OP = 332,
+     NE_OP = 333,
+     AND_OP = 334,
+     OR_OP = 335,
+     XOR_OP = 336,
+     MUL_ASSIGN = 337,
+     DIV_ASSIGN = 338,
+     ADD_ASSIGN = 339,
+     MOD_ASSIGN = 340,
+     LEFT_ASSIGN = 341,
+     RIGHT_ASSIGN = 342,
+     AND_ASSIGN = 343,
+     XOR_ASSIGN = 344,
+     OR_ASSIGN = 345,
+     SUB_ASSIGN = 346,
+     LEFT_PAREN = 347,
+     RIGHT_PAREN = 348,
+     LEFT_BRACKET = 349,
+     RIGHT_BRACKET = 350,
+     LEFT_BRACE = 351,
+     RIGHT_BRACE = 352,
+     DOT = 353,
+     COMMA = 354,
+     COLON = 355,
+     EQUAL = 356,
+     SEMICOLON = 357,
+     BANG = 358,
+     DASH = 359,
+     TILDE = 360,
+     PLUS = 361,
+     STAR = 362,
+     SLASH = 363,
+     PERCENT = 364,
+     LEFT_ANGLE = 365,
+     RIGHT_ANGLE = 366,
+     VERTICAL_BAR = 367,
+     CARET = 368,
+     AMPERSAND = 369,
+     QUESTION = 370
    };
 #endif
 
@@ -257,6 +258,7 @@
             TString *string;
             float f;
             int i;
+            unsigned int u;
             bool b;
         };
         TSymbol* symbol;
@@ -568,20 +570,20 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  93
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2054
+#define YYLAST   2065
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  115
+#define YYNTOKENS  116
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  87
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  226
+#define YYNRULES  227
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  342
+#define YYNSTATES  343
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   369
+#define YYMAXUTOK   370
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -625,7 +627,8 @@
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115
 };
 
 #if YYDEBUG
@@ -633,127 +636,127 @@
    YYRHS.  */
 static const yytype_uint16 yyprhs[] =
 {
-       0,     0,     3,     5,     7,     9,    11,    13,    17,    19,
-      24,    26,    30,    33,    36,    38,    40,    42,    46,    49,
-      52,    55,    57,    60,    64,    67,    69,    71,    73,    75,
-      78,    81,    84,    86,    88,    90,    92,    96,   100,   102,
-     106,   110,   112,   114,   118,   122,   126,   130,   132,   136,
-     140,   142,   144,   146,   148,   152,   154,   158,   160,   164,
-     166,   172,   174,   178,   180,   182,   184,   186,   188,   190,
-     194,   196,   199,   202,   205,   210,   216,   223,   233,   236,
-     238,   240,   243,   247,   251,   254,   260,   264,   267,   271,
-     274,   275,   277,   279,   281,   283,   285,   289,   295,   302,
-     308,   310,   313,   318,   324,   329,   332,   334,   337,   339,
-     341,   343,   345,   347,   350,   352,   355,   357,   359,   361,
-     363,   366,   369,   371,   373,   376,   378,   380,   382,   384,
-     389,   391,   393,   395,   397,   399,   401,   403,   405,   407,
+       0,     0,     3,     5,     7,     9,    11,    13,    15,    19,
+      21,    26,    28,    32,    35,    38,    40,    42,    44,    48,
+      51,    54,    57,    59,    62,    66,    69,    71,    73,    75,
+      77,    80,    83,    86,    88,    90,    92,    94,    98,   102,
+     104,   108,   112,   114,   116,   120,   124,   128,   132,   134,
+     138,   142,   144,   146,   148,   150,   154,   156,   160,   162,
+     166,   168,   174,   176,   180,   182,   184,   186,   188,   190,
+     192,   196,   198,   201,   204,   207,   212,   218,   225,   235,
+     238,   240,   242,   245,   249,   253,   256,   262,   266,   269,
+     273,   276,   277,   279,   281,   283,   285,   287,   291,   297,
+     304,   310,   312,   315,   320,   326,   331,   334,   336,   339,
+     341,   343,   345,   347,   349,   352,   354,   357,   359,   361,
+     363,   365,   368,   371,   373,   375,   378,   380,   382,   384,
+     386,   391,   393,   395,   397,   399,   401,   403,   405,   407,
      409,   411,   413,   415,   417,   419,   421,   423,   425,   427,
      429,   431,   433,   435,   437,   439,   441,   443,   445,   447,
-     449,   451,   453,   454,   461,   462,   468,   470,   473,   477,
-     482,   484,   488,   490,   495,   497,   499,   501,   503,   505,
-     507,   509,   511,   513,   516,   517,   518,   524,   526,   528,
-     529,   532,   533,   536,   539,   543,   545,   548,   550,   553,
-     559,   563,   565,   567,   572,   573,   580,   581,   590,   591,
-     599,   601,   603,   605,   606,   609,   613,   616,   619,   622,
-     626,   629,   631,   634,   636,   638,   639
+     449,   451,   453,   455,   456,   463,   464,   470,   472,   475,
+     479,   484,   486,   490,   492,   497,   499,   501,   503,   505,
+     507,   509,   511,   513,   515,   518,   519,   520,   526,   528,
+     530,   531,   534,   535,   538,   541,   545,   547,   550,   552,
+     555,   561,   565,   567,   569,   574,   575,   582,   583,   592,
+     593,   601,   603,   605,   607,   608,   611,   615,   618,   621,
+     624,   628,   631,   633,   636,   638,   640,   641
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     198,     0,    -1,    64,    -1,   116,    -1,    67,    -1,    66,
-      -1,    68,    -1,    91,   143,    92,    -1,   117,    -1,   118,
-      93,   119,    94,    -1,   120,    -1,   118,    97,    69,    -1,
-     118,    72,    -1,   118,    73,    -1,   143,    -1,   121,    -1,
-     122,    -1,   118,    97,   122,    -1,   124,    92,    -1,   123,
-      92,    -1,   125,    55,    -1,   125,    -1,   125,   141,    -1,
-     124,    98,   141,    -1,   126,    91,    -1,   165,    -1,    64,
-      -1,    69,    -1,   118,    -1,    72,   127,    -1,    73,   127,
-      -1,   128,   127,    -1,   105,    -1,   103,    -1,   102,    -1,
-     127,    -1,   129,   106,   127,    -1,   129,   107,   127,    -1,
-     129,    -1,   130,   105,   129,    -1,   130,   103,   129,    -1,
-     130,    -1,   131,    -1,   132,   109,   131,    -1,   132,   110,
-     131,    -1,   132,    74,   131,    -1,   132,    75,   131,    -1,
-     132,    -1,   133,    76,   132,    -1,   133,    77,   132,    -1,
-     133,    -1,   134,    -1,   135,    -1,   136,    -1,   137,    78,
-     136,    -1,   137,    -1,   138,    80,   137,    -1,   138,    -1,
-     139,    79,   138,    -1,   139,    -1,   139,   114,   143,    99,
-     141,    -1,   140,    -1,   127,   142,   141,    -1,   100,    -1,
-      81,    -1,    82,    -1,    83,    -1,    90,    -1,   141,    -1,
-     143,    98,   141,    -1,   140,    -1,    64,    95,    -1,   147,
-     101,    -1,   155,   101,    -1,     7,   163,   164,   101,    -1,
-     160,   145,   169,    96,   101,    -1,   160,   145,   169,    96,
-      64,   101,    -1,   160,   145,   169,    96,    64,    93,   144,
-      94,   101,    -1,   148,    92,    -1,   150,    -1,   149,    -1,
-     150,   152,    -1,   149,    98,   152,    -1,   157,    64,    91,
-      -1,   162,    64,    -1,   162,    64,    93,   144,    94,    -1,
-     159,   153,   151,    -1,   153,   151,    -1,   159,   153,   154,
-      -1,   153,   154,    -1,    -1,    40,    -1,    41,    -1,    42,
-      -1,   162,    -1,   156,    -1,   155,    98,    64,    -1,   155,
-      98,    64,    93,    94,    -1,   155,    98,    64,    93,   144,
-      94,    -1,   155,    98,    64,   100,   173,    -1,   157,    -1,
-     157,    64,    -1,   157,    64,    93,    94,    -1,   157,    64,
-      93,   144,    94,    -1,   157,    64,   100,   173,    -1,     3,
-      64,    -1,   162,    -1,   160,   162,    -1,    53,    -1,    52,
-      -1,     9,    -1,     8,    -1,    44,    -1,     3,    44,    -1,
-     161,    -1,   158,   161,    -1,   158,    -1,     9,    -1,    40,
-      -1,    41,    -1,    51,    40,    -1,    51,    41,    -1,    43,
-      -1,   164,    -1,   163,   164,    -1,     4,    -1,     5,    -1,
-       6,    -1,   165,    -1,   165,    93,   144,    94,    -1,    55,
-      -1,    11,    -1,    12,    -1,    13,    -1,    10,    -1,    31,
-      -1,    32,    -1,    33,    -1,    25,    -1,    26,    -1,    27,
-      -1,    28,    -1,    29,    -1,    30,    -1,    34,    -1,    35,
-      -1,    36,    -1,    37,    -1,    38,    -1,    39,    -1,    45,
-      -1,    46,    -1,    47,    -1,    48,    -1,    49,    -1,    50,
-      -1,    57,    -1,    58,    -1,    59,    -1,    60,    -1,   166,
-      -1,    65,    -1,    -1,    54,    64,    95,   167,   169,    96,
-      -1,    -1,    54,    95,   168,   169,    96,    -1,   170,    -1,
-     169,   170,    -1,   162,   171,   101,    -1,   160,   162,   171,
-     101,    -1,   172,    -1,   171,    98,   172,    -1,    64,    -1,
-      64,    93,   144,    94,    -1,   141,    -1,   146,    -1,   177,
-      -1,   176,    -1,   174,    -1,   186,    -1,   187,    -1,   190,
-      -1,   197,    -1,    95,    96,    -1,    -1,    -1,    95,   178,
-     185,   179,    96,    -1,   184,    -1,   176,    -1,    -1,   182,
-     184,    -1,    -1,   183,   176,    -1,    95,    96,    -1,    95,
-     185,    96,    -1,   175,    -1,   185,   175,    -1,   101,    -1,
-     143,   101,    -1,    19,    91,   143,    92,   188,    -1,   181,
-      17,   181,    -1,   181,    -1,   143,    -1,   157,    64,   100,
-     173,    -1,    -1,    56,    91,   191,   189,    92,   180,    -1,
-      -1,    16,   192,   181,    56,    91,   143,    92,   101,    -1,
-      -1,    18,    91,   193,   194,   196,    92,   180,    -1,   186,
-      -1,   174,    -1,   189,    -1,    -1,   195,   101,    -1,   195,
-     101,   143,    -1,    15,   101,    -1,    14,   101,    -1,    21,
-     101,    -1,    21,   143,   101,    -1,    20,   101,    -1,   199,
-      -1,   198,   199,    -1,   200,    -1,   146,    -1,    -1,   147,
-     201,   184,    -1
+     199,     0,    -1,    64,    -1,   117,    -1,    67,    -1,    68,
+      -1,    66,    -1,    69,    -1,    92,   144,    93,    -1,   118,
+      -1,   119,    94,   120,    95,    -1,   121,    -1,   119,    98,
+      70,    -1,   119,    73,    -1,   119,    74,    -1,   144,    -1,
+     122,    -1,   123,    -1,   119,    98,   123,    -1,   125,    93,
+      -1,   124,    93,    -1,   126,    55,    -1,   126,    -1,   126,
+     142,    -1,   125,    99,   142,    -1,   127,    92,    -1,   166,
+      -1,    64,    -1,    70,    -1,   119,    -1,    73,   128,    -1,
+      74,   128,    -1,   129,   128,    -1,   106,    -1,   104,    -1,
+     103,    -1,   128,    -1,   130,   107,   128,    -1,   130,   108,
+     128,    -1,   130,    -1,   131,   106,   130,    -1,   131,   104,
+     130,    -1,   131,    -1,   132,    -1,   133,   110,   132,    -1,
+     133,   111,   132,    -1,   133,    75,   132,    -1,   133,    76,
+     132,    -1,   133,    -1,   134,    77,   133,    -1,   134,    78,
+     133,    -1,   134,    -1,   135,    -1,   136,    -1,   137,    -1,
+     138,    79,   137,    -1,   138,    -1,   139,    81,   138,    -1,
+     139,    -1,   140,    80,   139,    -1,   140,    -1,   140,   115,
+     144,   100,   142,    -1,   141,    -1,   128,   143,   142,    -1,
+     101,    -1,    82,    -1,    83,    -1,    84,    -1,    91,    -1,
+     142,    -1,   144,    99,   142,    -1,   141,    -1,    64,    96,
+      -1,   148,   102,    -1,   156,   102,    -1,     7,   164,   165,
+     102,    -1,   161,   146,   170,    97,   102,    -1,   161,   146,
+     170,    97,    64,   102,    -1,   161,   146,   170,    97,    64,
+      94,   145,    95,   102,    -1,   149,    93,    -1,   151,    -1,
+     150,    -1,   151,   153,    -1,   150,    99,   153,    -1,   158,
+      64,    92,    -1,   163,    64,    -1,   163,    64,    94,   145,
+      95,    -1,   160,   154,   152,    -1,   154,   152,    -1,   160,
+     154,   155,    -1,   154,   155,    -1,    -1,    40,    -1,    41,
+      -1,    42,    -1,   163,    -1,   157,    -1,   156,    99,    64,
+      -1,   156,    99,    64,    94,    95,    -1,   156,    99,    64,
+      94,   145,    95,    -1,   156,    99,    64,   101,   174,    -1,
+     158,    -1,   158,    64,    -1,   158,    64,    94,    95,    -1,
+     158,    64,    94,   145,    95,    -1,   158,    64,   101,   174,
+      -1,     3,    64,    -1,   163,    -1,   161,   163,    -1,    53,
+      -1,    52,    -1,     9,    -1,     8,    -1,    44,    -1,     3,
+      44,    -1,   162,    -1,   159,   162,    -1,   159,    -1,     9,
+      -1,    40,    -1,    41,    -1,    51,    40,    -1,    51,    41,
+      -1,    43,    -1,   165,    -1,   164,   165,    -1,     4,    -1,
+       5,    -1,     6,    -1,   166,    -1,   166,    94,   145,    95,
+      -1,    55,    -1,    11,    -1,    12,    -1,    13,    -1,    10,
+      -1,    31,    -1,    32,    -1,    33,    -1,    25,    -1,    26,
+      -1,    27,    -1,    28,    -1,    29,    -1,    30,    -1,    34,
+      -1,    35,    -1,    36,    -1,    37,    -1,    38,    -1,    39,
+      -1,    45,    -1,    46,    -1,    47,    -1,    48,    -1,    49,
+      -1,    50,    -1,    57,    -1,    58,    -1,    59,    -1,    60,
+      -1,   167,    -1,    65,    -1,    -1,    54,    64,    96,   168,
+     170,    97,    -1,    -1,    54,    96,   169,   170,    97,    -1,
+     171,    -1,   170,   171,    -1,   163,   172,   102,    -1,   161,
+     163,   172,   102,    -1,   173,    -1,   172,    99,   173,    -1,
+      64,    -1,    64,    94,   145,    95,    -1,   142,    -1,   147,
+      -1,   178,    -1,   177,    -1,   175,    -1,   187,    -1,   188,
+      -1,   191,    -1,   198,    -1,    96,    97,    -1,    -1,    -1,
+      96,   179,   186,   180,    97,    -1,   185,    -1,   177,    -1,
+      -1,   183,   185,    -1,    -1,   184,   177,    -1,    96,    97,
+      -1,    96,   186,    97,    -1,   176,    -1,   186,   176,    -1,
+     102,    -1,   144,   102,    -1,    19,    92,   144,    93,   189,
+      -1,   182,    17,   182,    -1,   182,    -1,   144,    -1,   158,
+      64,   101,   174,    -1,    -1,    56,    92,   192,   190,    93,
+     181,    -1,    -1,    16,   193,   182,    56,    92,   144,    93,
+     102,    -1,    -1,    18,    92,   194,   195,   197,    93,   181,
+      -1,   187,    -1,   175,    -1,   190,    -1,    -1,   196,   102,
+      -1,   196,   102,   144,    -1,    15,   102,    -1,    14,   102,
+      -1,    21,   102,    -1,    21,   144,   102,    -1,    20,   102,
+      -1,   200,    -1,   199,   200,    -1,   201,    -1,   147,    -1,
+      -1,   148,   202,   185,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   187,   187,   222,   225,   230,   235,   240,   246,   249,
-     252,   255,   258,   268,   281,   289,   389,   392,   400,   404,
-     411,   415,   422,   428,   437,   445,   448,   455,   465,   468,
-     478,   488,   509,   510,   511,   516,   517,   526,   538,   539,
-     547,   558,   562,   563,   573,   583,   593,   606,   607,   617,
-     630,   634,   638,   642,   643,   656,   657,   670,   671,   684,
-     685,   702,   703,   716,   717,   718,   719,   720,   724,   727,
-     738,   746,   754,   781,   786,   797,   801,   805,   812,   850,
-     853,   860,   868,   889,   910,   921,   950,   955,   965,   970,
-     980,   983,   986,   989,   995,  1002,  1005,  1027,  1045,  1069,
-    1092,  1096,  1114,  1122,  1154,  1174,  1263,  1272,  1278,  1282,
-    1289,  1295,  1302,  1311,  1320,  1323,  1359,  1369,  1373,  1378,
-    1383,  1388,  1393,  1402,  1412,  1419,  1422,  1425,  1431,  1434,
-    1449,  1453,  1457,  1461,  1465,  1469,  1474,  1479,  1484,  1489,
-    1494,  1499,  1504,  1509,  1514,  1519,  1524,  1529,  1535,  1541,
-    1547,  1552,  1557,  1562,  1567,  1572,  1577,  1582,  1587,  1596,
-    1605,  1610,  1623,  1623,  1626,  1626,  1632,  1635,  1650,  1653,
-    1661,  1665,  1671,  1679,  1695,  1699,  1703,  1704,  1710,  1711,
-    1712,  1713,  1714,  1718,  1719,  1719,  1719,  1729,  1730,  1734,
-    1734,  1735,  1735,  1740,  1743,  1753,  1756,  1762,  1763,  1767,
-    1775,  1779,  1789,  1794,  1811,  1811,  1816,  1816,  1823,  1823,
-    1831,  1834,  1840,  1843,  1849,  1853,  1860,  1867,  1874,  1881,
-    1892,  1901,  1905,  1912,  1915,  1921,  1921
+       0,   188,   188,   223,   226,   231,   236,   241,   246,   252,
+     255,   258,   261,   264,   274,   287,   295,   395,   398,   406,
+     410,   417,   421,   428,   434,   443,   451,   454,   461,   471,
+     474,   484,   494,   515,   516,   517,   522,   523,   532,   544,
+     545,   553,   564,   568,   569,   579,   589,   599,   612,   613,
+     623,   636,   640,   644,   648,   649,   662,   663,   676,   677,
+     690,   691,   708,   709,   722,   723,   724,   725,   726,   730,
+     733,   744,   752,   760,   787,   792,   803,   807,   811,   818,
+     856,   859,   866,   874,   895,   916,   927,   956,   961,   971,
+     976,   986,   989,   992,   995,  1001,  1008,  1011,  1033,  1051,
+    1075,  1098,  1102,  1120,  1128,  1160,  1180,  1269,  1278,  1284,
+    1288,  1295,  1301,  1308,  1317,  1326,  1329,  1365,  1375,  1379,
+    1384,  1389,  1394,  1399,  1408,  1418,  1425,  1428,  1431,  1437,
+    1440,  1455,  1459,  1463,  1467,  1471,  1475,  1480,  1485,  1490,
+    1495,  1500,  1505,  1510,  1515,  1520,  1525,  1530,  1535,  1541,
+    1547,  1553,  1558,  1563,  1568,  1573,  1578,  1583,  1588,  1593,
+    1602,  1611,  1616,  1629,  1629,  1632,  1632,  1638,  1641,  1656,
+    1659,  1667,  1671,  1677,  1685,  1701,  1705,  1709,  1710,  1716,
+    1717,  1718,  1719,  1720,  1724,  1725,  1725,  1725,  1735,  1736,
+    1740,  1740,  1741,  1741,  1746,  1749,  1759,  1762,  1768,  1769,
+    1773,  1781,  1785,  1795,  1800,  1817,  1817,  1822,  1822,  1829,
+    1829,  1837,  1840,  1846,  1849,  1855,  1859,  1866,  1873,  1880,
+    1887,  1898,  1907,  1911,  1918,  1921,  1927,  1927
 };
 #endif
 
@@ -774,11 +777,11 @@
   "VOID_TYPE", "WHILE", "SAMPLER2D", "SAMPLERCUBE", "SAMPLER_EXTERNAL_OES",
   "SAMPLER2DRECT", "SAMPLER3D", "SAMPLER3DRECT", "SAMPLER2DSHADOW",
   "IDENTIFIER", "TYPE_NAME", "FLOATCONSTANT", "INTCONSTANT",
-  "BOOLCONSTANT", "FIELD_SELECTION", "LEFT_OP", "RIGHT_OP", "INC_OP",
-  "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP",
-  "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN",
-  "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN",
-  "SUB_ASSIGN", "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET",
+  "UINTCONSTANT", "BOOLCONSTANT", "FIELD_SELECTION", "LEFT_OP", "RIGHT_OP",
+  "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP", "AND_OP",
+  "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", "ADD_ASSIGN",
+  "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN",
+  "OR_ASSIGN", "SUB_ASSIGN", "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET",
   "RIGHT_BRACKET", "LEFT_BRACE", "RIGHT_BRACE", "DOT", "COMMA", "COLON",
   "EQUAL", "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS", "STAR", "SLASH",
   "PERCENT", "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR", "CARET",
@@ -832,64 +835,64 @@
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,   368,   369
+     365,   366,   367,   368,   369,   370
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   115,   116,   117,   117,   117,   117,   117,   118,   118,
-     118,   118,   118,   118,   119,   120,   121,   121,   122,   122,
-     123,   123,   124,   124,   125,   126,   126,   126,   127,   127,
-     127,   127,   128,   128,   128,   129,   129,   129,   130,   130,
-     130,   131,   132,   132,   132,   132,   132,   133,   133,   133,
-     134,   135,   136,   137,   137,   138,   138,   139,   139,   140,
-     140,   141,   141,   142,   142,   142,   142,   142,   143,   143,
-     144,   145,   146,   146,   146,   146,   146,   146,   147,   148,
-     148,   149,   149,   150,   151,   151,   152,   152,   152,   152,
-     153,   153,   153,   153,   154,   155,   155,   155,   155,   155,
-     156,   156,   156,   156,   156,   156,   157,   157,   158,   158,
-     159,   160,   160,   160,   160,   160,   160,   161,   161,   161,
-     161,   161,   161,   162,   162,   163,   163,   163,   164,   164,
-     165,   165,   165,   165,   165,   165,   165,   165,   165,   165,
-     165,   165,   165,   165,   165,   165,   165,   165,   165,   165,
-     165,   165,   165,   165,   165,   165,   165,   165,   165,   165,
-     165,   165,   167,   166,   168,   166,   169,   169,   170,   170,
-     171,   171,   172,   172,   173,   174,   175,   175,   176,   176,
-     176,   176,   176,   177,   178,   179,   177,   180,   180,   182,
-     181,   183,   181,   184,   184,   185,   185,   186,   186,   187,
-     188,   188,   189,   189,   191,   190,   192,   190,   193,   190,
-     194,   194,   195,   195,   196,   196,   197,   197,   197,   197,
-     197,   198,   198,   199,   199,   201,   200
+       0,   116,   117,   118,   118,   118,   118,   118,   118,   119,
+     119,   119,   119,   119,   119,   120,   121,   122,   122,   123,
+     123,   124,   124,   125,   125,   126,   127,   127,   127,   128,
+     128,   128,   128,   129,   129,   129,   130,   130,   130,   131,
+     131,   131,   132,   133,   133,   133,   133,   133,   134,   134,
+     134,   135,   136,   137,   138,   138,   139,   139,   140,   140,
+     141,   141,   142,   142,   143,   143,   143,   143,   143,   144,
+     144,   145,   146,   147,   147,   147,   147,   147,   147,   148,
+     149,   149,   150,   150,   151,   152,   152,   153,   153,   153,
+     153,   154,   154,   154,   154,   155,   156,   156,   156,   156,
+     156,   157,   157,   157,   157,   157,   157,   158,   158,   159,
+     159,   160,   161,   161,   161,   161,   161,   161,   162,   162,
+     162,   162,   162,   162,   163,   163,   164,   164,   164,   165,
+     165,   166,   166,   166,   166,   166,   166,   166,   166,   166,
+     166,   166,   166,   166,   166,   166,   166,   166,   166,   166,
+     166,   166,   166,   166,   166,   166,   166,   166,   166,   166,
+     166,   166,   166,   168,   167,   169,   167,   170,   170,   171,
+     171,   172,   172,   173,   173,   174,   175,   176,   176,   177,
+     177,   177,   177,   177,   178,   179,   180,   178,   181,   181,
+     183,   182,   184,   182,   185,   185,   186,   186,   187,   187,
+     188,   189,   189,   190,   190,   192,   191,   193,   191,   194,
+     191,   195,   195,   196,   196,   197,   197,   198,   198,   198,
+     198,   198,   199,   199,   200,   200,   202,   201
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
-       0,     2,     1,     1,     1,     1,     1,     3,     1,     4,
-       1,     3,     2,     2,     1,     1,     1,     3,     2,     2,
-       2,     1,     2,     3,     2,     1,     1,     1,     1,     2,
-       2,     2,     1,     1,     1,     1,     3,     3,     1,     3,
-       3,     1,     1,     3,     3,     3,     3,     1,     3,     3,
-       1,     1,     1,     1,     3,     1,     3,     1,     3,     1,
-       5,     1,     3,     1,     1,     1,     1,     1,     1,     3,
-       1,     2,     2,     2,     4,     5,     6,     9,     2,     1,
-       1,     2,     3,     3,     2,     5,     3,     2,     3,     2,
-       0,     1,     1,     1,     1,     1,     3,     5,     6,     5,
-       1,     2,     4,     5,     4,     2,     1,     2,     1,     1,
-       1,     1,     1,     2,     1,     2,     1,     1,     1,     1,
-       2,     2,     1,     1,     2,     1,     1,     1,     1,     4,
+       0,     2,     1,     1,     1,     1,     1,     1,     3,     1,
+       4,     1,     3,     2,     2,     1,     1,     1,     3,     2,
+       2,     2,     1,     2,     3,     2,     1,     1,     1,     1,
+       2,     2,     2,     1,     1,     1,     1,     3,     3,     1,
+       3,     3,     1,     1,     3,     3,     3,     3,     1,     3,
+       3,     1,     1,     1,     1,     3,     1,     3,     1,     3,
+       1,     5,     1,     3,     1,     1,     1,     1,     1,     1,
+       3,     1,     2,     2,     2,     4,     5,     6,     9,     2,
+       1,     1,     2,     3,     3,     2,     5,     3,     2,     3,
+       2,     0,     1,     1,     1,     1,     1,     3,     5,     6,
+       5,     1,     2,     4,     5,     4,     2,     1,     2,     1,
+       1,     1,     1,     1,     2,     1,     2,     1,     1,     1,
+       1,     2,     2,     1,     1,     2,     1,     1,     1,     1,
+       4,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     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,     6,     0,     5,     1,     2,     3,     4,
-       1,     3,     1,     4,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     2,     0,     0,     5,     1,     1,     0,
-       2,     0,     2,     2,     3,     1,     2,     1,     2,     5,
-       3,     1,     1,     4,     0,     6,     0,     8,     0,     7,
-       1,     1,     1,     0,     2,     3,     2,     2,     2,     3,
-       2,     1,     2,     1,     1,     0,     3
+       1,     1,     1,     0,     6,     0,     5,     1,     2,     3,
+       4,     1,     3,     1,     4,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     2,     0,     0,     5,     1,     1,
+       0,     2,     0,     2,     2,     3,     1,     2,     1,     2,
+       5,     3,     1,     1,     4,     0,     6,     0,     8,     0,
+       7,     1,     1,     1,     0,     2,     3,     2,     2,     2,
+       3,     2,     1,     2,     1,     1,     0,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
@@ -897,541 +900,543 @@
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,   125,   126,   127,     0,   111,   117,   134,   131,
-     132,   133,   138,   139,   140,   141,   142,   143,   135,   136,
-     137,   144,   145,   146,   147,   148,   149,   118,   119,   122,
-     112,   150,   151,   152,   153,   154,   155,     0,   109,   108,
-       0,   130,   156,   157,   158,   159,   161,   224,   225,     0,
-      80,    90,     0,    95,   100,   116,     0,   114,   106,     0,
-     123,   128,   160,     0,   221,   223,   113,   105,     0,   120,
-     121,     0,   164,    72,     0,    78,    90,   110,    91,    92,
-      93,    81,     0,    90,     0,    73,   101,   115,     0,     0,
-     107,   124,     0,     1,   222,     0,   162,     0,     0,   226,
-      82,    87,    89,    94,     0,    96,    83,     0,     0,    71,
-       0,     0,     0,     0,   166,     2,     5,     4,     6,    27,
-       0,     0,     0,    34,    33,    32,     3,     8,    28,    10,
-      15,    16,     0,     0,    21,     0,    35,     0,    38,    41,
-      42,    47,    50,    51,    52,    53,    55,    57,    59,    70,
-       0,    25,    74,     0,     0,     0,     0,   206,     0,     0,
-       0,     0,     0,   184,   193,   197,    35,    61,    68,     0,
-     175,     0,   128,   178,   195,   177,   176,     0,   179,   180,
-     181,   182,    84,    86,    88,     0,     0,   102,     0,   174,
-     104,     0,   172,     0,   170,     0,   167,    29,    30,     0,
-      12,    13,     0,     0,    19,    18,     0,    20,    22,    24,
-      31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   129,     0,   165,   217,   216,
-     191,   208,     0,   220,   218,     0,   204,   183,     0,    64,
-      65,    66,    67,    63,     0,     0,   198,   194,   196,     0,
-      97,     0,    99,   103,     0,     0,     0,   168,     0,    75,
-       7,     0,    14,    26,    11,    17,    23,    36,    37,    40,
-      39,    45,    46,    43,    44,    48,    49,    54,    56,    58,
-       0,   163,     0,     0,     0,     0,     0,   219,     0,   185,
-      62,    69,     0,    98,   169,     0,   171,     0,    76,     9,
-       0,     0,   190,   192,   211,   210,   213,   191,   202,     0,
-       0,     0,     0,    85,   173,     0,    60,     0,   212,     0,
-       0,   201,   199,     0,     0,   186,     0,     0,   214,     0,
-     191,     0,   188,   205,   187,    77,     0,   215,   209,   200,
-     203,   207
+       0,     0,   126,   127,   128,     0,   112,   118,   135,   132,
+     133,   134,   139,   140,   141,   142,   143,   144,   136,   137,
+     138,   145,   146,   147,   148,   149,   150,   119,   120,   123,
+     113,   151,   152,   153,   154,   155,   156,     0,   110,   109,
+       0,   131,   157,   158,   159,   160,   162,   225,   226,     0,
+      81,    91,     0,    96,   101,   117,     0,   115,   107,     0,
+     124,   129,   161,     0,   222,   224,   114,   106,     0,   121,
+     122,     0,   165,    73,     0,    79,    91,   111,    92,    93,
+      94,    82,     0,    91,     0,    74,   102,   116,     0,     0,
+     108,   125,     0,     1,   223,     0,   163,     0,     0,   227,
+      83,    88,    90,    95,     0,    97,    84,     0,     0,    72,
+       0,     0,     0,     0,   167,     2,     6,     4,     5,     7,
+      28,     0,     0,     0,    35,    34,    33,     3,     9,    29,
+      11,    16,    17,     0,     0,    22,     0,    36,     0,    39,
+      42,    43,    48,    51,    52,    53,    54,    56,    58,    60,
+      71,     0,    26,    75,     0,     0,     0,     0,   207,     0,
+       0,     0,     0,     0,   185,   194,   198,    36,    62,    69,
+       0,   176,     0,   129,   179,   196,   178,   177,     0,   180,
+     181,   182,   183,    85,    87,    89,     0,     0,   103,     0,
+     175,   105,     0,   173,     0,   171,     0,   168,    30,    31,
+       0,    13,    14,     0,     0,    20,    19,     0,    21,    23,
+      25,    32,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   130,     0,   166,   218,
+     217,   192,   209,     0,   221,   219,     0,   205,   184,     0,
+      65,    66,    67,    68,    64,     0,     0,   199,   195,   197,
+       0,    98,     0,   100,   104,     0,     0,     0,   169,     0,
+      76,     8,     0,    15,    27,    12,    18,    24,    37,    38,
+      41,    40,    46,    47,    44,    45,    49,    50,    55,    57,
+      59,     0,   164,     0,     0,     0,     0,     0,   220,     0,
+     186,    63,    70,     0,    99,   170,     0,   172,     0,    77,
+      10,     0,     0,   191,   193,   212,   211,   214,   192,   203,
+       0,     0,     0,     0,    86,   174,     0,    61,     0,   213,
+       0,     0,   202,   200,     0,     0,   187,     0,     0,   215,
+       0,   192,     0,   189,   206,   188,    78,     0,   216,   210,
+     201,   204,   208
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   126,   127,   128,   261,   129,   130,   131,   132,   133,
-     134,   135,   166,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   167,   168,   244,   169,   150,
-      89,   170,   171,    49,    50,    51,   101,    81,    82,   102,
+      -1,   127,   128,   129,   262,   130,   131,   132,   133,   134,
+     135,   136,   167,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   168,   169,   245,   170,   151,
+      89,   171,   172,    49,    50,    51,   101,    81,    82,   102,
       52,    53,    54,    55,    83,    56,    57,    58,    59,    60,
-     151,    62,   153,    97,   113,   114,   193,   194,   190,   173,
-     174,   175,   176,   238,   312,   333,   282,   283,   284,   334,
-     177,   178,   179,   322,   311,   180,   288,   230,   285,   306,
-     319,   320,   181,    63,    64,    65,    74
+     152,    62,   154,    97,   113,   114,   194,   195,   191,   174,
+     175,   176,   177,   239,   313,   334,   283,   284,   285,   335,
+     178,   179,   180,   323,   312,   181,   289,   231,   286,   307,
+     320,   321,   182,    63,    64,    65,    74
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -292
+#define YYPACT_NINF -298
 static const yytype_int16 yypact[] =
 {
-    1706,   -24,  -292,  -292,  -292,   154,  -292,  -292,  -292,  -292,
-    -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,
-    -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,
-    -292,  -292,  -292,  -292,  -292,  -292,  -292,    55,  -292,  -292,
-     -46,  -292,  -292,  -292,  -292,  -292,  -292,  -292,   -67,   -28,
-     -55,    13,    24,  -292,   -14,    33,  1821,  -292,  -292,  1989,
-    -292,    -3,  -292,  1643,  -292,  -292,  -292,  -292,  1989,  -292,
-    -292,   -17,  -292,  -292,    -9,  -292,    52,  -292,  -292,  -292,
-    -292,  -292,  1878,   121,    45,  -292,    21,  -292,    36,  1764,
-    -292,  -292,  1261,  -292,  -292,    18,  -292,  1764,   328,  -292,
-    -292,  -292,  -292,    72,  1878,   -62,  -292,  1009,  1261,  -292,
-     112,  1878,   111,  1427,  -292,    87,  -292,  -292,  -292,  -292,
-    1261,  1261,  1261,  -292,  -292,  -292,  -292,  -292,    35,  -292,
-    -292,  -292,    88,   -73,  1343,    90,  -292,  1261,    -4,    30,
-    -292,   -29,    70,  -292,  -292,  -292,   101,   102,   -42,  -292,
-      89,  -292,  -292,  1764,  1499,    83,    85,  -292,    96,    97,
-      93,  1094,    98,    94,  -292,  -292,    34,  -292,  -292,    28,
-    -292,   -67,   -58,  -292,  -292,  -292,  -292,   431,  -292,  -292,
-    -292,  -292,   103,  -292,  -292,  1176,  1261,  -292,   104,  -292,
-    -292,   111,   107,    29,  -292,   -49,  -292,  -292,  -292,   -27,
-    -292,  -292,  1261,  1929,  -292,  -292,  1261,   100,  -292,  -292,
-    -292,  1261,  1261,  1261,  1261,  1261,  1261,  1261,  1261,  1261,
-    1261,  1261,  1261,  1261,  1261,  -292,  1571,  -292,  -292,  -292,
-     109,  -292,  1261,  -292,  -292,    47,  -292,  -292,   534,  -292,
-    -292,  -292,  -292,  -292,  1261,  1261,  -292,  -292,  -292,  1261,
-    -292,   108,  -292,  -292,    51,  1261,   111,  -292,   -69,  -292,
-    -292,   113,    99,  -292,   114,  -292,  -292,  -292,  -292,    -4,
-      -4,  -292,  -292,  -292,  -292,   -29,   -29,  -292,   101,   102,
-      66,  -292,   139,    -9,   740,   843,   -15,  -292,   927,   534,
-    -292,  -292,   115,  -292,  -292,   116,  -292,  1261,  -292,  -292,
-    1261,   117,  -292,  -292,  -292,  -292,   927,   109,    99,   142,
-    1878,   119,   120,  -292,  -292,   118,  -292,  1261,  -292,   122,
-     123,   200,  -292,   125,   637,  -292,   126,    -7,  1261,   637,
-     109,  1261,  -292,  -292,  -292,  -292,   127,    99,  -292,  -292,
-    -292,  -292
+    1721,   -25,  -298,  -298,  -298,   167,  -298,  -298,  -298,  -298,
+    -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,
+    -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,  -298,
+    -298,  -298,  -298,  -298,  -298,  -298,  -298,   -20,  -298,  -298,
+     -47,  -298,  -298,  -298,  -298,  -298,  -298,  -298,   -77,   -31,
+     -34,    33,   -54,  -298,   -33,    52,  1836,  -298,  -298,  2000,
+    -298,   -13,  -298,  1658,  -298,  -298,  -298,  -298,  2000,  -298,
+    -298,   -50,  -298,  -298,   -26,  -298,    68,  -298,  -298,  -298,
+    -298,  -298,  1893,   135,    56,  -298,   -68,  -298,    11,  1779,
+    -298,  -298,  1271,  -298,  -298,    23,  -298,  1779,   328,  -298,
+    -298,  -298,  -298,    77,  1893,   -37,  -298,  1016,  1271,  -298,
+     104,  1893,   115,  1439,  -298,    60,  -298,  -298,  -298,  -298,
+    -298,  1271,  1271,  1271,  -298,  -298,  -298,  -298,  -298,    42,
+    -298,  -298,  -298,   100,   -14,  1354,   110,  -298,  1271,    76,
+      45,  -298,    12,   108,  -298,  -298,  -298,   121,   122,   -62,
+    -298,   109,  -298,  -298,  1779,  1512,   103,   105,  -298,   116,
+     117,   111,  1102,   119,   118,  -298,  -298,    46,  -298,  -298,
+      -8,  -298,   -77,    88,  -298,  -298,  -298,  -298,   432,  -298,
+    -298,  -298,  -298,   120,  -298,  -298,  1185,  1271,  -298,   123,
+    -298,  -298,   115,   125,    25,  -298,   -48,  -298,  -298,  -298,
+      -3,  -298,  -298,  1271,  1944,  -298,  -298,  1271,   124,  -298,
+    -298,  -298,  1271,  1271,  1271,  1271,  1271,  1271,  1271,  1271,
+    1271,  1271,  1271,  1271,  1271,  1271,  -298,  1585,  -298,  -298,
+    -298,   126,  -298,  1271,  -298,  -298,    43,  -298,  -298,   536,
+    -298,  -298,  -298,  -298,  -298,  1271,  1271,  -298,  -298,  -298,
+    1271,  -298,   128,  -298,  -298,    44,  1271,   115,  -298,   -67,
+    -298,  -298,   131,   129,  -298,   138,  -298,  -298,  -298,  -298,
+      76,    76,  -298,  -298,  -298,  -298,    12,    12,  -298,   121,
+     122,    90,  -298,   161,   -26,   744,   848,     6,  -298,   933,
+     536,  -298,  -298,   136,  -298,  -298,   137,  -298,  1271,  -298,
+    -298,  1271,   141,  -298,  -298,  -298,  -298,   933,   126,   129,
+     156,  1893,   142,   139,  -298,  -298,   143,  -298,  1271,  -298,
+     132,   144,   204,  -298,   140,   640,  -298,   145,    19,  1271,
+     640,   126,  1271,  -298,  -298,  -298,  -298,   146,   129,  -298,
+    -298,  -298,  -298
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -292,  -292,  -292,  -292,  -292,  -292,  -292,    17,  -292,  -292,
-    -292,  -292,    48,  -292,   -47,  -292,   -74,   -48,  -292,  -292,
-    -292,     1,    -1,     7,  -292,   -79,  -107,  -292,  -114,   -98,
-    -292,     6,    12,  -292,  -292,  -292,   128,   153,   148,   130,
-    -292,  -292,  -265,  -292,  -292,   -87,   180,   -53,   231,   -38,
-       0,  -292,  -292,  -292,   -83,  -106,    46,   -16,  -181,   -44,
-    -166,  -267,  -292,  -292,  -292,   -90,  -291,  -292,  -292,   -70,
-       4,   -41,  -292,  -292,   -63,  -292,  -292,  -292,  -292,  -292,
-    -292,  -292,  -292,  -292,   182,  -292,  -292
+    -298,  -298,  -298,  -298,  -298,  -298,  -298,    36,  -298,  -298,
+    -298,  -298,   -55,  -298,   -23,  -298,   -84,   -24,  -298,  -298,
+    -298,    20,    21,    22,  -298,   -69,  -107,  -298,  -119,  -100,
+    -298,    13,    15,  -298,  -298,  -298,   147,   169,   166,   148,
+    -298,  -298,  -267,  -298,  -298,   -83,   195,   -53,   248,   -27,
+       0,  -298,  -298,  -298,   -85,  -108,    62,    -2,  -179,   -30,
+    -169,  -275,  -298,  -298,  -298,   -73,  -297,  -298,  -298,   -72,
+      24,   -22,  -298,  -298,   -46,  -298,  -298,  -298,  -298,  -298,
+    -298,  -298,  -298,  -298,   196,  -298,  -298
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -190
+#define YYTABLE_NINF -191
 static const yytype_int16 yytable[] =
 {
-      61,   189,   111,    90,    99,   252,    47,   196,   199,   188,
-     111,   248,    48,   149,   154,   258,   321,   303,    71,   205,
-      66,    91,    77,   309,   297,   206,   111,   208,   149,   103,
-      95,   185,   298,   -25,    73,    92,   112,   223,   186,   339,
-      67,   309,     7,    76,   112,   215,   216,   235,   196,    72,
-      86,   103,   259,    78,    79,    80,    61,   332,   191,    61,
-     112,    77,   332,    61,    75,   260,   111,   111,    61,    47,
-     226,   245,   224,    27,    28,    48,    29,   307,    96,   189,
-     217,   218,    61,   245,    37,   336,    98,   251,   262,    61,
-      92,   245,    78,    79,    80,    69,    70,    61,   172,   266,
-     112,   112,   211,   212,    61,   -79,   149,   200,   201,   105,
-     280,    61,   106,    61,   107,   239,   240,   241,   286,   152,
-     196,   108,    84,   248,   242,    85,   245,   256,   202,   246,
-     257,   109,   203,   213,   243,   214,   182,   290,   291,   111,
-     136,   271,   272,   273,   274,   245,   219,   220,   287,   256,
-     340,   292,   294,    61,    61,   136,    66,   295,     2,     3,
-       4,    78,    79,    80,   245,   300,   269,   270,   197,   198,
-     149,   275,   276,   112,   308,   192,   149,   172,   -26,   221,
-     204,   209,   222,   225,   228,   210,   229,   231,   232,   236,
-     237,  -130,   308,   316,   233,   301,   249,   245,   253,   315,
-     255,   310,   293,   327,  -189,   -27,   323,   299,   317,   313,
-     314,   324,   326,   302,   337,   329,   325,   330,   149,   310,
-     265,   278,   277,   328,   189,   331,    61,   335,   341,   100,
-     279,   104,   183,   136,   184,    87,    68,   254,   172,   338,
-     296,   304,   289,   318,   305,    94,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    90,     0,   267,
-     268,   136,   136,   136,   136,   136,   136,   136,   136,   136,
-     136,   136,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   172,   172,     0,     0,   172,   172,
-       0,     0,     0,     0,     0,     0,     0,   136,     0,     0,
-       0,     0,     0,   136,     0,     0,   172,     0,     0,     0,
-      61,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   172,     0,     0,     0,     0,   172,
-       0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,   155,   156,   157,   136,   158,   159,   160,   161,
+      61,   190,    99,    90,   200,   197,   111,   189,   253,   249,
+     304,   322,   155,    47,   111,    48,   259,    71,   224,    66,
+      69,    70,   310,   150,   106,    73,   107,   298,   209,   103,
+     111,    86,    91,   108,   340,   299,   112,   137,   150,    67,
+     310,    95,    77,   236,   112,    84,    96,   197,    85,    72,
+     333,   103,   137,   225,   260,   333,    61,   186,   192,    61,
+     112,     7,    75,    61,   187,    76,   198,   199,    61,   227,
+      98,   111,   111,    78,    79,    80,    47,    77,    48,   206,
+     190,    92,    61,   211,   263,   207,   252,   216,   217,    61,
+     261,   246,    27,    28,   247,    29,   246,    61,   173,   308,
+     267,   112,   112,    37,    61,   246,   281,   109,    78,    79,
+      80,    61,   337,    61,   287,   201,   202,   150,   246,   197,
+     105,   249,   218,   219,   257,   153,   -80,   258,   240,   241,
+     242,   137,   272,   273,   274,   275,   203,   243,   291,   292,
+     204,   183,   246,   257,   111,   288,   295,   244,    66,   214,
+     293,   215,   -27,   341,    61,    61,   296,   268,   269,   137,
+     137,   137,   137,   137,   137,   137,   137,   137,   137,   137,
+     309,     2,     3,     4,   112,    78,    79,    80,   173,   193,
+     -26,   150,    92,   212,   213,   220,   221,   150,   309,   246,
+     301,   270,   271,   205,   317,   137,   276,   277,   316,   328,
+     222,   137,   210,   223,   226,   229,   311,   230,   232,   233,
+     338,   237,   303,   234,   250,   238,  -131,   302,   254,   256,
+     324,   331,  -190,   294,   311,   190,   300,    61,   246,   150,
+     -28,   314,   315,   318,   329,   325,   326,   330,   327,   173,
+     266,   332,   278,   137,   279,   100,   280,   336,   342,   104,
+      87,   184,   185,    68,   255,   297,   305,   339,    90,    94,
+       0,   319,     0,   290,   306,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   173,   173,     0,     0,   173,
+     173,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   173,     0,     0,
+       0,    61,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   173,     0,     0,     0,     0,
+     173,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,   156,   157,   158,     0,   159,   160,   161,   162,
        0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
        0,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,   162,    42,    43,    44,    45,     0,
-       0,     0,   115,    46,   116,   117,   118,   119,     0,     0,
-     120,   121,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   122,
-       0,     0,     0,   163,   164,     0,     0,     0,     0,   165,
-     123,   124,     0,   125,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,   155,   156,   157,     0,   158,
-     159,   160,   161,     0,     0,     0,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,   162,    42,    43,
-      44,    45,     0,     0,     0,   115,    46,   116,   117,   118,
-     119,     0,     0,   120,   121,     0,     0,     0,     0,     0,
+      38,    39,    40,    41,   163,    42,    43,    44,    45,     0,
+       0,     0,   115,    46,   116,   117,   118,   119,   120,     0,
+       0,   121,   122,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   122,     0,     0,     0,   163,   247,     0,     0,
-       0,     0,   165,   123,   124,     0,   125,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   155,   156,
-     157,     0,   158,   159,   160,   161,     0,     0,     0,    12,
+     123,     0,     0,     0,   164,   165,     0,     0,     0,     0,
+     166,   124,   125,     0,   126,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,   156,   157,   158,     0,
+     159,   160,   161,   162,     0,     0,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,   163,    42,
+      43,    44,    45,     0,     0,     0,   115,    46,   116,   117,
+     118,   119,   120,     0,     0,   121,   122,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   123,     0,     0,     0,   164,   248,
+       0,     0,     0,     0,   166,   124,   125,     0,   126,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+     156,   157,   158,     0,   159,   160,   161,   162,     0,     0,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   163,    42,    43,    44,    45,     0,     0,     0,
+     115,    46,   116,   117,   118,   119,   120,     0,     0,   121,
+     122,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   123,     0,
+       0,     0,   164,     0,     0,     0,     0,     0,   166,   124,
+     125,     0,   126,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,   156,   157,   158,     0,   159,   160,
+     161,   162,     0,     0,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,     0,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,   163,    42,    43,    44,
+      45,     0,     0,     0,   115,    46,   116,   117,   118,   119,
+     120,     0,     0,   121,   122,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   123,     0,     0,     0,    98,     0,     0,     0,
+       0,     0,   166,   124,   125,     0,   126,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,   156,   157,
+     158,     0,   159,   160,   161,   162,     0,     0,     0,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-     162,    42,    43,    44,    45,     0,     0,     0,   115,    46,
-     116,   117,   118,   119,     0,     0,   120,   121,     0,     0,
+     163,    42,    43,    44,    45,     0,     0,     0,   115,    46,
+     116,   117,   118,   119,   120,     0,     0,   121,   122,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   122,     0,     0,     0,   163,
-       0,     0,     0,     0,     0,   165,   123,   124,     0,   125,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,   155,   156,   157,     0,   158,   159,   160,   161,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,   162,    42,    43,    44,    45,     0,     0,
-       0,   115,    46,   116,   117,   118,   119,     0,     0,   120,
-     121,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   122,     0,
-       0,     0,    98,     0,     0,     0,     0,     0,   165,   123,
-     124,     0,   125,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,   155,   156,   157,     0,   158,   159,
-     160,   161,     0,     0,     0,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,     0,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,   162,    42,    43,    44,
-      45,     0,     0,     0,   115,    46,   116,   117,   118,   119,
-       0,     0,   120,   121,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   122,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   165,   123,   124,     0,   125,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    12,    13,
+       0,     0,     0,     0,     0,     0,   123,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   166,   124,   125,     0,
+     126,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+       0,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,     0,    42,    43,    44,    45,     0,
+       0,     0,   115,    46,   116,   117,   118,   119,   120,     0,
+       0,   121,   122,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   110,     2,     3,     4,
+     123,     6,     7,     8,     9,    10,    11,     0,     0,     0,
+     166,   124,   125,     0,   126,     0,     0,     0,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,     0,
       42,    43,    44,    45,     0,     0,     0,   115,    46,   116,
-     117,   118,   119,     0,     0,   120,   121,     0,     0,     0,
+     117,   118,   119,   120,     0,     0,   121,   122,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     110,     2,     3,     4,   122,     6,     7,     8,     9,    10,
-      11,     0,     0,     0,   165,   123,   124,     0,   125,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,     0,    42,    43,    44,    45,     0,     0,
-       0,   115,    46,   116,   117,   118,   119,     0,     0,   120,
-     121,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   122,     8,
-       9,    10,    11,     0,     0,     0,     0,     0,     0,   123,
-     124,     0,   125,     0,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,     0,
-       0,     0,     0,     0,    31,    32,    33,    34,    35,    36,
-       0,     0,     0,    40,    41,     0,    42,    43,    44,    45,
-       0,     0,     0,   115,    46,   116,   117,   118,   119,     0,
-       0,   120,   121,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     122,     0,     0,   187,     8,     9,    10,    11,     0,     0,
-       0,   123,   124,     0,   125,     0,     0,     0,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,     0,     0,     0,     0,     0,    31,
-      32,    33,    34,    35,    36,     0,     0,     0,    40,    41,
-       0,    42,    43,    44,    45,     0,     0,     0,   115,    46,
-     116,   117,   118,   119,     0,     0,   120,   121,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   122,     8,     9,    10,    11,
-       0,     0,     0,     0,     0,   234,   123,   124,     0,   125,
+       0,     0,     0,     0,     0,   123,     8,     9,    10,    11,
+       0,     0,     0,     0,     0,     0,   124,   125,     0,   126,
        0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
        0,    31,    32,    33,    34,    35,    36,     0,     0,     0,
       40,    41,     0,    42,    43,    44,    45,     0,     0,     0,
-     115,    46,   116,   117,   118,   119,     0,     0,   120,   121,
+     115,    46,   116,   117,   118,   119,   120,     0,     0,   121,
+     122,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   123,     0,
+       0,   188,     8,     9,    10,    11,     0,     0,     0,   124,
+     125,     0,   126,     0,     0,     0,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,     0,     0,     0,     0,     0,    31,    32,    33,
+      34,    35,    36,     0,     0,     0,    40,    41,     0,    42,
+      43,    44,    45,     0,     0,     0,   115,    46,   116,   117,
+     118,   119,   120,     0,     0,   121,   122,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   122,     0,     0,
-     250,     8,     9,    10,    11,     0,     0,     0,   123,   124,
-       0,   125,     0,     0,     0,     0,    12,    13,    14,    15,
+       0,     0,     0,     0,   123,     8,     9,    10,    11,     0,
+       0,     0,     0,     0,   235,   124,   125,     0,   126,     0,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,     0,     0,     0,     0,     0,
+      31,    32,    33,    34,    35,    36,     0,     0,     0,    40,
+      41,     0,    42,    43,    44,    45,     0,     0,     0,   115,
+      46,   116,   117,   118,   119,   120,     0,     0,   121,   122,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   123,     0,     0,
+     251,     8,     9,    10,    11,     0,     0,     0,   124,   125,
+       0,   126,     0,     0,     0,     0,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
       26,     0,     0,     0,     0,     0,    31,    32,    33,    34,
       35,    36,     0,     0,     0,    40,    41,     0,    42,    43,
       44,    45,     0,     0,     0,   115,    46,   116,   117,   118,
-     119,     0,     0,   120,   121,     0,     0,     0,     0,     0,
+     119,   120,     0,     0,   121,   122,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   122,     8,     9,    10,    11,     0,     0,     0,
-       0,     0,     0,   123,   124,     0,   125,     0,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,     0,     0,     0,     0,     0,    31,    32,
-      33,    34,    35,    36,     0,     0,     0,    40,   207,     0,
-      42,    43,    44,    45,     0,     0,     0,   115,    46,   116,
-     117,   118,   119,     0,     0,   120,   121,     0,     0,     0,
+       0,     0,     0,   123,     8,     9,    10,    11,     0,     0,
+       0,     0,     0,     0,   124,   125,     0,   126,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,     0,     0,     0,     0,     0,    31,
+      32,    33,    34,    35,    36,     0,     0,     0,    40,   208,
+       0,    42,    43,    44,    45,     0,     0,     0,   115,    46,
+     116,   117,   118,   119,   120,     0,     0,   121,   122,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     110,     2,     3,     4,   122,     6,     7,     8,     9,    10,
-      11,     0,     0,     0,     0,   123,   124,     0,   125,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,     0,    42,    43,    44,    45,     0,     0,
-       0,     0,    46,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   110,     2,     3,     4,     0,     6,     7,     8,
-       9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   195,    12,    13,    14,    15,    16,    17,
+       0,     0,   110,     2,     3,     4,   123,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,     0,   124,   125,     0,
+     126,     0,     0,     0,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,     0,    29,    30,    31,    32,    33,    34,    35,    36,
       37,    38,    39,    40,    41,     0,    42,    43,    44,    45,
        0,     0,     0,     0,    46,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   110,     2,     3,     4,     0,     6,
+       0,     0,     0,     0,     0,   110,     2,     3,     4,     0,
+       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   196,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,     0,    42,
+      43,    44,    45,     0,     0,     0,     0,    46,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   110,     2,
+       3,     4,     0,     6,     7,     8,     9,    10,    11,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   228,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,     0,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,     0,    42,    43,    44,    45,     0,     0,     0,     0,
+      46,     0,     0,     0,     0,     0,     0,     0,    93,     0,
+       0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   282,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+       0,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,     0,    42,    43,    44,    45,     0,
+       0,     0,     0,    46,     1,     2,     3,     4,     5,     6,
        7,     8,     9,    10,    11,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   227,    12,    13,    14,    15,
+       0,     0,     0,     0,     0,     0,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,     0,    42,    43,
-      44,    45,     0,     0,     0,     0,    46,     0,     0,     0,
-       0,     0,     0,    93,     0,     0,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   281,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,     0,
-      42,    43,    44,    45,     0,     0,     0,     0,    46,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,     0,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,     0,    42,    43,    44,    45,   110,     2,     3,
-       4,    46,     6,     7,     8,     9,    10,    11,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-       0,    42,    43,    44,    45,     2,     3,     4,     0,    46,
-       0,     8,     9,    10,    11,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,     0,     0,     0,     0,     0,    31,    32,    33,    34,
-      35,    36,     0,     0,     0,    40,    41,     0,    42,    43,
-      44,    45,     2,     3,     4,    88,    46,     0,     8,     9,
-      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,     0,     0,
-       0,     0,     0,    31,    32,    33,    34,    35,    36,     0,
-       0,     0,    40,    41,     0,    42,    43,    44,    45,     8,
-       9,    10,    11,    46,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,     0,
-       0,     0,     0,     0,    31,    32,    33,    34,    35,    36,
-       0,     0,     0,    40,    41,     0,    42,    43,    44,    45,
-       0,     0,     0,   263,    46,     0,     0,     0,   264,     8,
+      44,    45,   110,     2,     3,     4,    46,     6,     7,     8,
        9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,     0,
-       0,     0,     0,     0,    31,    32,    33,    34,    35,    36,
-       0,     0,     0,    40,    41,     0,    42,    43,    44,    45,
-       0,     0,     0,     0,    46
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,     0,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,     0,    42,    43,    44,    45,
+       2,     3,     4,     0,    46,     0,     8,     9,    10,    11,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
+       0,    31,    32,    33,    34,    35,    36,     0,     0,     0,
+      40,    41,     0,    42,    43,    44,    45,     2,     3,     4,
+      88,    46,     0,     8,     9,    10,    11,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,     0,     0,     0,     0,     0,    31,    32,
+      33,    34,    35,    36,     0,     0,     0,    40,    41,     0,
+      42,    43,    44,    45,     8,     9,    10,    11,    46,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,     0,     0,     0,     0,     0,    31,
+      32,    33,    34,    35,    36,     0,     0,     0,    40,    41,
+       0,    42,    43,    44,    45,     0,     0,     0,   264,    46,
+       8,     9,    10,    11,   265,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+       0,     0,     0,     0,     0,    31,    32,    33,    34,    35,
+      36,     0,     0,     0,    40,    41,     0,    42,    43,    44,
+      45,     0,     0,     0,     0,    46
 };
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-292)))
+  (!!((Yystate) == (-298)))
 
 #define yytable_value_is_error(Yytable_value) \
   YYID (0)
 
 static const yytype_int16 yycheck[] =
 {
-       0,   108,    89,    56,    74,   186,     0,   113,   122,   107,
-      97,   177,     0,    92,    97,    64,   307,   284,    64,    92,
-      44,    59,     9,   288,    93,    98,   113,   134,   107,    82,
-      68,    93,   101,    91,   101,    93,    89,    79,   100,   330,
-      64,   306,     9,    98,    97,    74,    75,   161,   154,    95,
-      64,   104,   101,    40,    41,    42,    56,   324,   111,    59,
-     113,     9,   329,    63,    92,    92,   153,   154,    68,    63,
-     153,    98,   114,    40,    41,    63,    43,    92,    95,   186,
-     109,   110,    82,    98,    51,    92,    95,   185,   202,    89,
-      93,    98,    40,    41,    42,    40,    41,    97,    98,   206,
-     153,   154,   106,   107,   104,    92,   185,    72,    73,    64,
-     224,   111,    91,   113,    93,    81,    82,    83,   232,   101,
-     226,   100,    98,   289,    90,   101,    98,    98,    93,   101,
-     101,    95,    97,   103,   100,   105,    64,   244,   245,   226,
-      92,   215,   216,   217,   218,    98,    76,    77,   101,    98,
-     331,   249,   101,   153,   154,   107,    44,   255,     4,     5,
-       6,    40,    41,    42,    98,    99,   213,   214,   120,   121,
-     249,   219,   220,   226,   288,    64,   255,   177,    91,    78,
-      92,    91,    80,    94,   101,   137,   101,    91,    91,    91,
-      96,    91,   306,   300,   101,    56,    93,    98,    94,   297,
-      93,   288,    94,   317,    95,    91,    64,    94,    91,    94,
-      94,    92,    94,   283,   328,    92,    96,    17,   297,   306,
-     203,   222,   221,   101,   331,   100,   226,   101,   101,    76,
-     223,    83,   104,   185,   104,    55,     5,   191,   238,   329,
-     256,   285,   238,   306,   285,    63,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   310,    -1,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   284,   285,    -1,    -1,   288,   289,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   249,    -1,    -1,
-      -1,    -1,    -1,   255,    -1,    -1,   306,    -1,    -1,    -1,
-     310,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   324,    -1,    -1,    -1,    -1,   329,
-      -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,   297,    18,    19,    20,    21,
+       0,   108,    74,    56,   123,   113,    89,   107,   187,   178,
+     285,   308,    97,     0,    97,     0,    64,    64,    80,    44,
+      40,    41,   289,    92,    92,   102,    94,    94,   135,    82,
+     113,    64,    59,   101,   331,   102,    89,    92,   107,    64,
+     307,    68,     9,   162,    97,    99,    96,   155,   102,    96,
+     325,   104,   107,   115,   102,   330,    56,    94,   111,    59,
+     113,     9,    93,    63,   101,    99,   121,   122,    68,   154,
+      96,   154,   155,    40,    41,    42,    63,     9,    63,    93,
+     187,    94,    82,   138,   203,    99,   186,    75,    76,    89,
+      93,    99,    40,    41,   102,    43,    99,    97,    98,    93,
+     207,   154,   155,    51,   104,    99,   225,    96,    40,    41,
+      42,   111,    93,   113,   233,    73,    74,   186,    99,   227,
+      64,   290,   110,   111,    99,   102,    93,   102,    82,    83,
+      84,   186,   216,   217,   218,   219,    94,    91,   245,   246,
+      98,    64,    99,    99,   227,   102,   102,   101,    44,   104,
+     250,   106,    92,   332,   154,   155,   256,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     289,     4,     5,     6,   227,    40,    41,    42,   178,    64,
+      92,   250,    94,   107,   108,    77,    78,   256,   307,    99,
+     100,   214,   215,    93,   301,   250,   220,   221,   298,   318,
+      79,   256,    92,    81,    95,   102,   289,   102,    92,    92,
+     329,    92,   284,   102,    94,    97,    92,    56,    95,    94,
+      64,    17,    96,    95,   307,   332,    95,   227,    99,   298,
+      92,    95,    95,    92,   102,    93,    97,    93,    95,   239,
+     204,   101,   222,   298,   223,    76,   224,   102,   102,    83,
+      55,   104,   104,     5,   192,   257,   286,   330,   311,    63,
+      -1,   307,    -1,   239,   286,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   285,   286,    -1,    -1,   289,
+     290,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   307,    -1,    -1,
+      -1,   311,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   325,    -1,    -1,    -1,    -1,
+     330,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
       -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
       -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
-      -1,    -1,    64,    65,    66,    67,    68,    69,    -1,    -1,
-      72,    73,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,
-      -1,    -1,    -1,    95,    96,    -1,    -1,    -1,    -1,   101,
-     102,   103,    -1,   105,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
-      19,    20,    21,    -1,    -1,    -1,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    -1,    -1,    -1,    64,    65,    66,    67,    68,
-      69,    -1,    -1,    72,    73,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    64,    65,    66,    67,    68,    69,    70,    -1,
+      -1,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    91,    -1,    -1,    -1,    95,    96,    -1,    -1,
-      -1,    -1,   101,   102,   103,    -1,   105,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    -1,    18,    19,    20,    21,    -1,    -1,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    -1,    -1,    -1,    64,    65,
-      66,    67,    68,    69,    -1,    -1,    72,    73,    -1,    -1,
+      92,    -1,    -1,    -1,    96,    97,    -1,    -1,    -1,    -1,
+     102,   103,   104,    -1,   106,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
+      18,    19,    20,    21,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    -1,    -1,    -1,    64,    65,    66,    67,
+      68,    69,    70,    -1,    -1,    73,    74,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    91,    -1,    -1,    -1,    95,
-      -1,    -1,    -1,    -1,    -1,   101,   102,   103,    -1,   105,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    -1,    18,    19,    20,    21,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    -1,    -1,
-      -1,    64,    65,    66,    67,    68,    69,    -1,    -1,    72,
-      73,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    -1,
-      -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,   101,   102,
-     103,    -1,   105,     3,     4,     5,     6,     7,     8,     9,
+      -1,    -1,    -1,    -1,    92,    -1,    -1,    -1,    96,    97,
+      -1,    -1,    -1,    -1,   102,   103,   104,    -1,   106,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    -1,    18,    19,    20,    21,    -1,    -1,
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    -1,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
+      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    73,
+      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    -1,
+      -1,    -1,    96,    -1,    -1,    -1,    -1,    -1,   102,   103,
+     104,    -1,   106,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
       20,    21,    -1,    -1,    -1,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
       60,    -1,    -1,    -1,    64,    65,    66,    67,    68,    69,
-      -1,    -1,    72,    73,    -1,    -1,    -1,    -1,    -1,    -1,
+      70,    -1,    -1,    73,    74,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    91,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   101,   102,   103,    -1,   105,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      -1,    -1,    92,    -1,    -1,    -1,    96,    -1,    -1,    -1,
+      -1,    -1,   102,   103,   104,    -1,   106,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    -1,    18,    19,    20,    21,    -1,    -1,    -1,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    -1,    -1,    -1,    64,    65,
+      66,    67,    68,    69,    70,    -1,    -1,    73,    74,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    92,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   102,   103,   104,    -1,
+     106,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    -1,    57,    58,    59,    60,    -1,
+      -1,    -1,    64,    65,    66,    67,    68,    69,    70,    -1,
+      -1,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
+      92,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
+     102,   103,   104,    -1,   106,    -1,    -1,    -1,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
       37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
       47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
       57,    58,    59,    60,    -1,    -1,    -1,    64,    65,    66,
-      67,    68,    69,    -1,    -1,    72,    73,    -1,    -1,    -1,
+      67,    68,    69,    70,    -1,    -1,    73,    74,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       3,     4,     5,     6,    91,     8,     9,    10,    11,    12,
-      13,    -1,    -1,    -1,   101,   102,   103,    -1,   105,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    -1,    57,    58,    59,    60,    -1,    -1,
-      -1,    64,    65,    66,    67,    68,    69,    -1,    -1,    72,
-      73,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    10,
-      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,   102,
-     103,    -1,   105,    -1,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
-      -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
-      -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,    60,
-      -1,    -1,    -1,    64,    65,    66,    67,    68,    69,    -1,
-      -1,    72,    73,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      91,    -1,    -1,    94,    10,    11,    12,    13,    -1,    -1,
-      -1,   102,   103,    -1,   105,    -1,    -1,    -1,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
-      46,    47,    48,    49,    50,    -1,    -1,    -1,    54,    55,
-      -1,    57,    58,    59,    60,    -1,    -1,    -1,    64,    65,
-      66,    67,    68,    69,    -1,    -1,    72,    73,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    91,    10,    11,    12,    13,
-      -1,    -1,    -1,    -1,    -1,   101,   102,   103,    -1,   105,
+      -1,    -1,    -1,    -1,    -1,    92,    10,    11,    12,    13,
+      -1,    -1,    -1,    -1,    -1,    -1,   103,   104,    -1,   106,
       -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
       -1,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
       54,    55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,
-      64,    65,    66,    67,    68,    69,    -1,    -1,    72,    73,
+      64,    65,    66,    67,    68,    69,    70,    -1,    -1,    73,
+      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    -1,
+      -1,    95,    10,    11,    12,    13,    -1,    -1,    -1,   103,
+     104,    -1,   106,    -1,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
+      48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,
+      58,    59,    60,    -1,    -1,    -1,    64,    65,    66,    67,
+      68,    69,    70,    -1,    -1,    73,    74,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    -1,    -1,
-      94,    10,    11,    12,    13,    -1,    -1,    -1,   102,   103,
-      -1,   105,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
+      -1,    -1,    -1,    -1,    92,    10,    11,    12,    13,    -1,
+      -1,    -1,    -1,    -1,   102,   103,   104,    -1,   106,    -1,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
+      45,    46,    47,    48,    49,    50,    -1,    -1,    -1,    54,
+      55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,    64,
+      65,    66,    67,    68,    69,    70,    -1,    -1,    73,    74,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    -1,    -1,
+      95,    10,    11,    12,    13,    -1,    -1,    -1,   103,   104,
+      -1,   106,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
       39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
       49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,    58,
       59,    60,    -1,    -1,    -1,    64,    65,    66,    67,    68,
-      69,    -1,    -1,    72,    73,    -1,    -1,    -1,    -1,    -1,
+      69,    70,    -1,    -1,    73,    74,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    91,    10,    11,    12,    13,    -1,    -1,    -1,
-      -1,    -1,    -1,   102,   103,    -1,   105,    -1,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
-      47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,
-      57,    58,    59,    60,    -1,    -1,    -1,    64,    65,    66,
-      67,    68,    69,    -1,    -1,    72,    73,    -1,    -1,    -1,
+      -1,    -1,    -1,    92,    10,    11,    12,    13,    -1,    -1,
+      -1,    -1,    -1,    -1,   103,   104,    -1,   106,    -1,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
+      46,    47,    48,    49,    50,    -1,    -1,    -1,    54,    55,
+      -1,    57,    58,    59,    60,    -1,    -1,    -1,    64,    65,
+      66,    67,    68,    69,    70,    -1,    -1,    73,    74,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       3,     4,     5,     6,    91,     8,     9,    10,    11,    12,
-      13,    -1,    -1,    -1,    -1,   102,   103,    -1,   105,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    -1,    57,    58,    59,    60,    -1,    -1,
-      -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     3,     4,     5,     6,    -1,     8,     9,    10,
-      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    96,    25,    26,    27,    28,    29,    30,
+      -1,    -1,     3,     4,     5,     6,    92,     8,     9,    10,
+      11,    12,    13,    -1,    -1,    -1,    -1,   103,   104,    -1,
+     106,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
       41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
       51,    52,    53,    54,    55,    -1,    57,    58,    59,    60,
       -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     3,     4,     5,     6,    -1,     8,
+      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,    -1,
+       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    97,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      58,    59,    60,    -1,    -1,    -1,    -1,    65,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
+       5,     6,    -1,     8,     9,    10,    11,    12,    13,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    97,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
+      65,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,    -1,
+      -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    97,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    -1,    57,    58,    59,    60,    -1,
+      -1,    -1,    -1,    65,     3,     4,     5,     6,     7,     8,
        9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    96,    25,    26,    27,    28,
+      -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
       39,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
-      59,    60,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,
-      -1,    -1,    -1,     0,    -1,    -1,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    96,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
-      57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    -1,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    -1,    57,    58,    59,    60,     3,     4,     5,
-       6,    65,     8,     9,    10,    11,    12,    13,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      -1,    57,    58,    59,    60,     4,     5,     6,    -1,    65,
-      -1,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
-      49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,    58,
-      59,    60,     4,     5,     6,    64,    65,    -1,    10,    11,
-      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
-      -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    -1,
-      -1,    -1,    54,    55,    -1,    57,    58,    59,    60,    10,
-      11,    12,    13,    65,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
-      -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
-      -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,    60,
-      -1,    -1,    -1,    64,    65,    -1,    -1,    -1,    69,    10,
+      59,    60,     3,     4,     5,     6,    65,     8,     9,    10,
       11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
-      -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
-      -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,    60,
-      -1,    -1,    -1,    -1,    65
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    -1,    57,    58,    59,    60,
+       4,     5,     6,    -1,    65,    -1,    10,    11,    12,    13,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+      -1,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
+      54,    55,    -1,    57,    58,    59,    60,     4,     5,     6,
+      64,    65,    -1,    10,    11,    12,    13,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
+      47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,
+      57,    58,    59,    60,    10,    11,    12,    13,    65,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
+      46,    47,    48,    49,    50,    -1,    -1,    -1,    54,    55,
+      -1,    57,    58,    59,    60,    -1,    -1,    -1,    64,    65,
+      10,    11,    12,    13,    70,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
+      50,    -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,
+      60,    -1,    -1,    -1,    -1,    65
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1442,37 +1447,37 @@
       12,    13,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    57,    58,    59,    60,    65,   146,   147,   148,
-     149,   150,   155,   156,   157,   158,   160,   161,   162,   163,
-     164,   165,   166,   198,   199,   200,    44,    64,   163,    40,
-      41,    64,    95,   101,   201,    92,    98,     9,    40,    41,
-      42,   152,   153,   159,    98,   101,    64,   161,    64,   145,
-     162,   164,    93,     0,   199,   164,    95,   168,    95,   184,
-     152,   151,   154,   162,   153,    64,    91,    93,   100,    95,
-       3,   160,   162,   169,   170,    64,    66,    67,    68,    69,
-      72,    73,    91,   102,   103,   105,   116,   117,   118,   120,
+      54,    55,    57,    58,    59,    60,    65,   147,   148,   149,
+     150,   151,   156,   157,   158,   159,   161,   162,   163,   164,
+     165,   166,   167,   199,   200,   201,    44,    64,   164,    40,
+      41,    64,    96,   102,   202,    93,    99,     9,    40,    41,
+      42,   153,   154,   160,    99,   102,    64,   162,    64,   146,
+     163,   165,    94,     0,   200,   165,    96,   169,    96,   185,
+     153,   152,   155,   163,   154,    64,    92,    94,   101,    96,
+       3,   161,   163,   170,   171,    64,    66,    67,    68,    69,
+      70,    73,    74,    92,   103,   104,   106,   117,   118,   119,
      121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
      131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     144,   165,   101,   167,   169,    14,    15,    16,    18,    19,
-      20,    21,    56,    95,    96,   101,   127,   140,   141,   143,
-     146,   147,   165,   174,   175,   176,   177,   185,   186,   187,
-     190,   197,    64,   151,   154,    93,   100,    94,   144,   141,
-     173,   162,    64,   171,   172,    96,   170,   127,   127,   143,
-      72,    73,    93,    97,    92,    92,    98,    55,   141,    91,
-     127,   106,   107,   103,   105,    74,    75,   109,   110,    76,
-      77,    78,    80,    79,   114,    94,   169,    96,   101,   101,
-     192,    91,    91,   101,   101,   143,    91,    96,   178,    81,
-      82,    83,    90,   100,   142,    98,   101,    96,   175,    93,
-      94,   144,   173,    94,   171,    93,    98,   101,    64,   101,
-      92,   119,   143,    64,    69,   122,   141,   127,   127,   129,
-     129,   131,   131,   131,   131,   132,   132,   136,   137,   138,
-     143,    96,   181,   182,   183,   193,   143,   101,   191,   185,
-     141,   141,   144,    94,   101,   144,   172,    93,   101,    94,
-      99,    56,   184,   176,   174,   186,   194,    92,   143,   157,
-     160,   189,   179,    94,    94,   144,   141,    91,   189,   195,
-     196,   181,   188,    64,    92,    96,    94,   143,   101,    92,
-      17,   100,   176,   180,   184,   101,    92,   143,   180,   181,
-     173,   101
+     141,   145,   166,   102,   168,   170,    14,    15,    16,    18,
+      19,    20,    21,    56,    96,    97,   102,   128,   141,   142,
+     144,   147,   148,   166,   175,   176,   177,   178,   186,   187,
+     188,   191,   198,    64,   152,   155,    94,   101,    95,   145,
+     142,   174,   163,    64,   172,   173,    97,   171,   128,   128,
+     144,    73,    74,    94,    98,    93,    93,    99,    55,   142,
+      92,   128,   107,   108,   104,   106,    75,    76,   110,   111,
+      77,    78,    79,    81,    80,   115,    95,   170,    97,   102,
+     102,   193,    92,    92,   102,   102,   144,    92,    97,   179,
+      82,    83,    84,    91,   101,   143,    99,   102,    97,   176,
+      94,    95,   145,   174,    95,   172,    94,    99,   102,    64,
+     102,    93,   120,   144,    64,    70,   123,   142,   128,   128,
+     130,   130,   132,   132,   132,   132,   133,   133,   137,   138,
+     139,   144,    97,   182,   183,   184,   194,   144,   102,   192,
+     186,   142,   142,   145,    95,   102,   145,   173,    94,   102,
+      95,   100,    56,   185,   177,   175,   187,   195,    93,   144,
+     158,   161,   190,   180,    95,    95,   145,   142,    92,   190,
+     196,   197,   182,   189,    64,    93,    97,    95,   144,   102,
+      93,    17,   101,   177,   181,   185,   102,    93,   144,   181,
+     182,   174,   102
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2347,12 +2352,21 @@
 
     {
         ConstantUnion *unionArray = new ConstantUnion[1];
+        unionArray->setUConst((yyvsp[(1) - (1)].lex).u);
+        (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtUInt, EbpUndefined, EvqConst), (yyvsp[(1) - (1)].lex).line);
+    }
+    break;
+
+  case 6:
+
+    {
+        ConstantUnion *unionArray = new ConstantUnion[1];
         unionArray->setFConst((yyvsp[(1) - (1)].lex).f);
         (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtFloat, EbpUndefined, EvqConst), (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
-  case 6:
+  case 7:
 
     {
         ConstantUnion *unionArray = new ConstantUnion[1];
@@ -2361,44 +2375,44 @@
     }
     break;
 
-  case 7:
+  case 8:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(2) - (3)].interm.intermTypedNode);
     }
     break;
 
-  case 8:
-
-    {
-        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
-    }
-    break;
-
   case 9:
 
     {
-        (yyval.interm.intermTypedNode) = context->addIndexExpression((yyvsp[(1) - (4)].interm.intermTypedNode), (yyvsp[(2) - (4)].lex).line, (yyvsp[(3) - (4)].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
   case 10:
 
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+        (yyval.interm.intermTypedNode) = context->addIndexExpression((yyvsp[(1) - (4)].interm.intermTypedNode), (yyvsp[(2) - (4)].lex).line, (yyvsp[(3) - (4)].interm.intermTypedNode));
     }
     break;
 
   case 11:
 
     {
-        (yyval.interm.intermTypedNode) = context->addFieldSelectionExpression((yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, *(yyvsp[(3) - (3)].lex).string, (yyvsp[(3) - (3)].lex).line);
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
   case 12:
 
     {
+        (yyval.interm.intermTypedNode) = context->addFieldSelectionExpression((yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, *(yyvsp[(3) - (3)].lex).string, (yyvsp[(3) - (3)].lex).line);
+    }
+    break;
+
+  case 13:
+
+    {
         if (context->lValueErrorCheck((yyvsp[(2) - (2)].lex).line, "++", (yyvsp[(1) - (2)].interm.intermTypedNode)))
             context->recover();
         (yyval.interm.intermTypedNode) = context->intermediate.addUnaryMath(EOpPostIncrement, (yyvsp[(1) - (2)].interm.intermTypedNode), (yyvsp[(2) - (2)].lex).line, context->symbolTable);
@@ -2410,7 +2424,7 @@
     }
     break;
 
-  case 13:
+  case 14:
 
     {
         if (context->lValueErrorCheck((yyvsp[(2) - (2)].lex).line, "--", (yyvsp[(1) - (2)].interm.intermTypedNode)))
@@ -2424,7 +2438,7 @@
     }
     break;
 
-  case 14:
+  case 15:
 
     {
         if (context->integerErrorCheck((yyvsp[(1) - (1)].interm.intermTypedNode), "[]"))
@@ -2433,7 +2447,7 @@
     }
     break;
 
-  case 15:
+  case 16:
 
     {
         TFunction* fnCall = (yyvsp[(1) - (1)].interm).function;
@@ -2534,14 +2548,14 @@
     }
     break;
 
-  case 16:
+  case 17:
 
     {
         (yyval.interm) = (yyvsp[(1) - (1)].interm);
     }
     break;
 
-  case 17:
+  case 18:
 
     {
         context->error((yyvsp[(3) - (3)].interm).line, "methods are not supported", "");
@@ -2550,14 +2564,6 @@
     }
     break;
 
-  case 18:
-
-    {
-        (yyval.interm) = (yyvsp[(1) - (2)].interm);
-        (yyval.interm).line = (yyvsp[(2) - (2)].lex).line;
-    }
-    break;
-
   case 19:
 
     {
@@ -2569,12 +2575,20 @@
   case 20:
 
     {
+        (yyval.interm) = (yyvsp[(1) - (2)].interm);
+        (yyval.interm).line = (yyvsp[(2) - (2)].lex).line;
+    }
+    break;
+
+  case 21:
+
+    {
         (yyval.interm).function = (yyvsp[(1) - (2)].interm.function);
         (yyval.interm).intermNode = 0;
     }
     break;
 
-  case 21:
+  case 22:
 
     {
         (yyval.interm).function = (yyvsp[(1) - (1)].interm.function);
@@ -2582,7 +2596,7 @@
     }
     break;
 
-  case 22:
+  case 23:
 
     {
         TParameter param = { 0, new TType((yyvsp[(2) - (2)].interm.intermTypedNode)->getType()) };
@@ -2592,7 +2606,7 @@
     }
     break;
 
-  case 23:
+  case 24:
 
     {
         TParameter param = { 0, new TType((yyvsp[(3) - (3)].interm.intermTypedNode)->getType()) };
@@ -2602,28 +2616,17 @@
     }
     break;
 
-  case 24:
+  case 25:
 
     {
         (yyval.interm.function) = (yyvsp[(1) - (2)].interm.function);
     }
     break;
 
-  case 25:
-
-    {
-        (yyval.interm.function) = context->addConstructorFunc((yyvsp[(1) - (1)].interm.type));
-    }
-    break;
-
   case 26:
 
     {
-        if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
-            context->recover();
-        TType type(EbtVoid, EbpUndefined);
-        TFunction *function = new TFunction((yyvsp[(1) - (1)].lex).string, type);
-        (yyval.interm.function) = function;
+        (yyval.interm.function) = context->addConstructorFunc((yyvsp[(1) - (1)].interm.type));
     }
     break;
 
@@ -2641,13 +2644,24 @@
   case 28:
 
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+        if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
+            context->recover();
+        TType type(EbtVoid, EbpUndefined);
+        TFunction *function = new TFunction((yyvsp[(1) - (1)].lex).string, type);
+        (yyval.interm.function) = function;
     }
     break;
 
   case 29:
 
     {
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+    }
+    break;
+
+  case 30:
+
+    {
         if (context->lValueErrorCheck((yyvsp[(1) - (2)].lex).line, "++", (yyvsp[(2) - (2)].interm.intermTypedNode)))
             context->recover();
         (yyval.interm.intermTypedNode) = context->intermediate.addUnaryMath(EOpPreIncrement, (yyvsp[(2) - (2)].interm.intermTypedNode), (yyvsp[(1) - (2)].lex).line, context->symbolTable);
@@ -2659,7 +2673,7 @@
     }
     break;
 
-  case 30:
+  case 31:
 
     {
         if (context->lValueErrorCheck((yyvsp[(1) - (2)].lex).line, "--", (yyvsp[(2) - (2)].interm.intermTypedNode)))
@@ -2673,7 +2687,7 @@
     }
     break;
 
-  case 31:
+  case 32:
 
     {
         if ((yyvsp[(1) - (2)].interm).op != EOpNull) {
@@ -2694,27 +2708,27 @@
     }
     break;
 
-  case 32:
+  case 33:
 
     { (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpNull; }
     break;
 
-  case 33:
+  case 34:
 
     { (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpNegative; }
     break;
 
-  case 34:
+  case 35:
 
     { (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpLogicalNot; }
     break;
 
-  case 35:
+  case 36:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 36:
+  case 37:
 
     {
         FRAG_VERT_ONLY("*", (yyvsp[(2) - (3)].lex).line);
@@ -2727,7 +2741,7 @@
     }
     break;
 
-  case 37:
+  case 38:
 
     {
         FRAG_VERT_ONLY("/", (yyvsp[(2) - (3)].lex).line);
@@ -2740,12 +2754,12 @@
     }
     break;
 
-  case 38:
+  case 39:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 39:
+  case 40:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpAdd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
@@ -2757,7 +2771,7 @@
     }
     break;
 
-  case 40:
+  case 41:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpSub, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
@@ -2769,11 +2783,6 @@
     }
     break;
 
-  case 41:
-
-    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
-    break;
-
   case 42:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
@@ -2781,6 +2790,11 @@
 
   case 43:
 
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+    break;
+
+  case 44:
+
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLessThan, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
         if ((yyval.interm.intermTypedNode) == 0) {
@@ -2793,7 +2807,7 @@
     }
     break;
 
-  case 44:
+  case 45:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpGreaterThan, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
@@ -2807,7 +2821,7 @@
     }
     break;
 
-  case 45:
+  case 46:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLessThanEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
@@ -2821,7 +2835,7 @@
     }
     break;
 
-  case 46:
+  case 47:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpGreaterThanEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
@@ -2835,12 +2849,12 @@
     }
     break;
 
-  case 47:
+  case 48:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 48:
+  case 49:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
@@ -2854,7 +2868,7 @@
     }
     break;
 
-  case 49:
+  case 50:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpNotEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
@@ -2868,11 +2882,6 @@
     }
     break;
 
-  case 50:
-
-    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
-    break;
-
   case 51:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
@@ -2890,6 +2899,11 @@
 
   case 54:
 
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+    break;
+
+  case 55:
+
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalAnd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
         if ((yyval.interm.intermTypedNode) == 0) {
@@ -2902,12 +2916,12 @@
     }
     break;
 
-  case 55:
+  case 56:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 56:
+  case 57:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalXor, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
@@ -2921,12 +2935,12 @@
     }
     break;
 
-  case 57:
+  case 58:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 58:
+  case 59:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalOr, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line, context->symbolTable);
@@ -2940,12 +2954,12 @@
     }
     break;
 
-  case 59:
+  case 60:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 60:
+  case 61:
 
     {
        if (context->boolErrorCheck((yyvsp[(2) - (5)].lex).line, (yyvsp[(1) - (5)].interm.intermTypedNode)))
@@ -2963,12 +2977,12 @@
     }
     break;
 
-  case 61:
+  case 62:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 62:
+  case 63:
 
     {
         if (context->lValueErrorCheck((yyvsp[(2) - (3)].interm).line, "assign", (yyvsp[(1) - (3)].interm.intermTypedNode)))
@@ -2982,39 +2996,39 @@
     }
     break;
 
-  case 63:
+  case 64:
 
     {                                    (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpAssign; }
     break;
 
-  case 64:
+  case 65:
 
     { FRAG_VERT_ONLY("*=", (yyvsp[(1) - (1)].lex).line);     (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpMulAssign; }
     break;
 
-  case 65:
+  case 66:
 
     { FRAG_VERT_ONLY("/=", (yyvsp[(1) - (1)].lex).line);     (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpDivAssign; }
     break;
 
-  case 66:
+  case 67:
 
     {                                    (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpAddAssign; }
     break;
 
-  case 67:
+  case 68:
 
     {                                    (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpSubAssign; }
     break;
 
-  case 68:
+  case 69:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 69:
+  case 70:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addComma((yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
@@ -3026,7 +3040,7 @@
     }
     break;
 
-  case 70:
+  case 71:
 
     {
         if (context->constErrorCheck((yyvsp[(1) - (1)].interm.intermTypedNode)))
@@ -3035,7 +3049,7 @@
     }
     break;
 
-  case 71:
+  case 72:
 
     {
         if (context->enterStructDeclaration((yyvsp[(1) - (2)].lex).line, *(yyvsp[(1) - (2)].lex).string))
@@ -3044,7 +3058,7 @@
     }
     break;
 
-  case 72:
+  case 73:
 
     {
         TFunction &function = *((yyvsp[(1) - (2)].interm).function);
@@ -3075,7 +3089,7 @@
     }
     break;
 
-  case 73:
+  case 74:
 
     {
         if ((yyvsp[(1) - (2)].interm).intermAggregate)
@@ -3084,7 +3098,7 @@
     }
     break;
 
-  case 74:
+  case 75:
 
     {
         if (((yyvsp[(2) - (4)].interm.precision) == EbpHigh) && (context->shaderType == SH_FRAGMENT_SHADER) && !context->fragmentPrecisionHigh) {
@@ -3099,7 +3113,7 @@
     }
     break;
 
-  case 75:
+  case 76:
 
     {
         ES3_ONLY(getQualifierString((yyvsp[(1) - (5)].interm.type).qualifier), (yyvsp[(1) - (5)].interm.type).line, "interface blocks");
@@ -3107,7 +3121,7 @@
     }
     break;
 
-  case 76:
+  case 77:
 
     {
         ES3_ONLY(getQualifierString((yyvsp[(1) - (6)].interm.type).qualifier), (yyvsp[(1) - (6)].interm.type).line, "interface blocks");
@@ -3115,7 +3129,7 @@
     }
     break;
 
-  case 77:
+  case 78:
 
     {
         ES3_ONLY(getQualifierString((yyvsp[(1) - (9)].interm.type).qualifier), (yyvsp[(1) - (9)].interm.type).line, "interface blocks");
@@ -3123,7 +3137,7 @@
     }
     break;
 
-  case 78:
+  case 79:
 
     {
         //
@@ -3162,13 +3176,6 @@
     }
     break;
 
-  case 79:
-
-    {
-        (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
-    }
-    break;
-
   case 80:
 
     {
@@ -3179,6 +3186,13 @@
   case 81:
 
     {
+        (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
+    }
+    break;
+
+  case 82:
+
+    {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[(1) - (2)].interm.function);
         if ((yyvsp[(2) - (2)].interm).param.type->getBasicType() != EbtVoid)
@@ -3188,7 +3202,7 @@
     }
     break;
 
-  case 82:
+  case 83:
 
     {
         //
@@ -3210,7 +3224,7 @@
     }
     break;
 
-  case 83:
+  case 84:
 
     {
         if ((yyvsp[(1) - (3)].interm.type).qualifier != EvqGlobal && (yyvsp[(1) - (3)].interm.type).qualifier != EvqTemporary) {
@@ -3231,7 +3245,7 @@
     }
     break;
 
-  case 84:
+  case 85:
 
     {
         if ((yyvsp[(1) - (2)].interm.type).type == EbtVoid) {
@@ -3246,7 +3260,7 @@
     }
     break;
 
-  case 85:
+  case 86:
 
     {
         // Check that we can make an array out of this type
@@ -3268,7 +3282,7 @@
     }
     break;
 
-  case 86:
+  case 87:
 
     {
         (yyval.interm) = (yyvsp[(3) - (3)].interm);
@@ -3277,29 +3291,9 @@
     }
     break;
 
-  case 87:
-
-    {
-        (yyval.interm) = (yyvsp[(2) - (2)].interm);
-        if (context->parameterSamplerErrorCheck((yyvsp[(2) - (2)].interm).line, (yyvsp[(1) - (2)].interm.qualifier), *(yyvsp[(2) - (2)].interm).param.type))
-            context->recover();
-        if (context->paramErrorCheck((yyvsp[(2) - (2)].interm).line, EvqTemporary, (yyvsp[(1) - (2)].interm.qualifier), (yyval.interm).param.type))
-            context->recover();
-    }
-    break;
-
   case 88:
 
     {
-        (yyval.interm) = (yyvsp[(3) - (3)].interm);
-        if (context->paramErrorCheck((yyvsp[(3) - (3)].interm).line, (yyvsp[(1) - (3)].interm.qualifier), (yyvsp[(2) - (3)].interm.qualifier), (yyval.interm).param.type))
-            context->recover();
-    }
-    break;
-
-  case 89:
-
-    {
         (yyval.interm) = (yyvsp[(2) - (2)].interm);
         if (context->parameterSamplerErrorCheck((yyvsp[(2) - (2)].interm).line, (yyvsp[(1) - (2)].interm.qualifier), *(yyvsp[(2) - (2)].interm).param.type))
             context->recover();
@@ -3308,10 +3302,23 @@
     }
     break;
 
+  case 89:
+
+    {
+        (yyval.interm) = (yyvsp[(3) - (3)].interm);
+        if (context->paramErrorCheck((yyvsp[(3) - (3)].interm).line, (yyvsp[(1) - (3)].interm.qualifier), (yyvsp[(2) - (3)].interm.qualifier), (yyval.interm).param.type))
+            context->recover();
+    }
+    break;
+
   case 90:
 
     {
-        (yyval.interm.qualifier) = EvqIn;
+        (yyval.interm) = (yyvsp[(2) - (2)].interm);
+        if (context->parameterSamplerErrorCheck((yyvsp[(2) - (2)].interm).line, (yyvsp[(1) - (2)].interm.qualifier), *(yyvsp[(2) - (2)].interm).param.type))
+            context->recover();
+        if (context->paramErrorCheck((yyvsp[(2) - (2)].interm).line, EvqTemporary, (yyvsp[(1) - (2)].interm.qualifier), (yyval.interm).param.type))
+            context->recover();
     }
     break;
 
@@ -3325,33 +3332,40 @@
   case 92:
 
     {
-        (yyval.interm.qualifier) = EvqOut;
+        (yyval.interm.qualifier) = EvqIn;
     }
     break;
 
   case 93:
 
     {
-        (yyval.interm.qualifier) = EvqInOut;
+        (yyval.interm.qualifier) = EvqOut;
     }
     break;
 
   case 94:
 
     {
+        (yyval.interm.qualifier) = EvqInOut;
+    }
+    break;
+
+  case 95:
+
+    {
         TParameter param = { 0, new TType((yyvsp[(1) - (1)].interm.type)) };
         (yyval.interm).param = param;
     }
     break;
 
-  case 95:
+  case 96:
 
     {
         (yyval.interm) = (yyvsp[(1) - (1)].interm);
     }
     break;
 
-  case 96:
+  case 97:
 
     {
         if ((yyvsp[(1) - (3)].interm).type.type == EbtInvariant && !(yyvsp[(3) - (3)].lex).symbol)
@@ -3377,7 +3391,7 @@
     }
     break;
 
-  case 97:
+  case 98:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(1) - (5)].interm).type))
@@ -3399,7 +3413,7 @@
     }
     break;
 
-  case 98:
+  case 99:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(3) - (6)].lex).line, (yyvsp[(1) - (6)].interm).type))
@@ -3427,7 +3441,7 @@
     }
     break;
 
-  case 99:
+  case 100:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(1) - (5)].interm).type))
@@ -3451,7 +3465,7 @@
     }
     break;
 
-  case 100:
+  case 101:
 
     {
         (yyval.interm).type = (yyvsp[(1) - (1)].interm.type);
@@ -3459,7 +3473,7 @@
     }
     break;
 
-  case 101:
+  case 102:
 
     {
         TIntermSymbol* symbol = context->intermediate.addSymbol(0, *(yyvsp[(2) - (2)].lex).string, TType((yyvsp[(1) - (2)].interm.type)), (yyvsp[(2) - (2)].lex).line);
@@ -3481,7 +3495,7 @@
     }
     break;
 
-  case 102:
+  case 103:
 
     {
         context->error((yyvsp[(2) - (4)].lex).line, "unsized array declarations not supported", (yyvsp[(2) - (4)].lex).string->c_str());
@@ -3493,7 +3507,7 @@
     }
     break;
 
-  case 103:
+  case 104:
 
     {
         TType type = TType((yyvsp[(1) - (5)].interm.type));
@@ -3529,7 +3543,7 @@
     }
     break;
 
-  case 104:
+  case 105:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(2) - (4)].lex).line, (yyvsp[(1) - (4)].interm.type)))
@@ -3553,7 +3567,7 @@
     }
     break;
 
-  case 105:
+  case 106:
 
     {
         VERTEX_ONLY("invariant declaration", (yyvsp[(1) - (2)].lex).line);
@@ -3575,7 +3589,7 @@
     }
     break;
 
-  case 106:
+  case 107:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
@@ -3588,14 +3602,14 @@
     }
     break;
 
-  case 107:
+  case 108:
 
     {
         (yyval.interm.type) = context->addFullySpecifiedType((yyvsp[(1) - (2)].interm.type).qualifier, (yyvsp[(2) - (2)].interm.type));
     }
     break;
 
-  case 108:
+  case 109:
 
     {
         (yyval.interm.type).qualifier = EvqSmooth;
@@ -3603,7 +3617,7 @@
     }
     break;
 
-  case 109:
+  case 110:
 
     {
         (yyval.interm.type).qualifier = EvqFlat;
@@ -3611,14 +3625,14 @@
     }
     break;
 
-  case 110:
+  case 111:
 
     {
         (yyval.interm.qualifier) = EvqConst;
     }
     break;
 
-  case 111:
+  case 112:
 
     {
         VERTEX_ONLY("attribute", (yyvsp[(1) - (1)].lex).line);
@@ -3629,7 +3643,7 @@
     }
     break;
 
-  case 112:
+  case 113:
 
     {
         ES2_ONLY("varying", (yyvsp[(1) - (1)].lex).line);
@@ -3642,7 +3656,7 @@
     }
     break;
 
-  case 113:
+  case 114:
 
     {
         ES2_ONLY("varying", (yyvsp[(1) - (2)].lex).line);
@@ -3655,14 +3669,14 @@
     }
     break;
 
-  case 114:
+  case 115:
 
     {
         (yyval.interm.type).setBasic(EbtVoid, (yyvsp[(1) - (1)].interm.type).qualifier, (yyvsp[(1) - (1)].interm.type).line);
     }
     break;
 
-  case 115:
+  case 116:
 
     {
         if ((yyvsp[(2) - (2)].interm.type).qualifier == EvqSmoothIn) {
@@ -3702,7 +3716,7 @@
     }
     break;
 
-  case 116:
+  case 117:
 
     {
         context->error((yyvsp[(1) - (1)].interm.type).line, "interpolation qualifier requires a fragment 'in' or vertex 'out' storage qualifier", getInterpolationString((yyvsp[(1) - (1)].interm.type).qualifier));
@@ -3713,7 +3727,7 @@
     }
     break;
 
-  case 117:
+  case 118:
 
     {
         (yyval.interm.type).qualifier = EvqConst;
@@ -3721,7 +3735,7 @@
     }
     break;
 
-  case 118:
+  case 119:
 
     {
         ES3_ONLY("in", (yyvsp[(1) - (1)].lex).line, "storage qualifier");
@@ -3730,7 +3744,7 @@
     }
     break;
 
-  case 119:
+  case 120:
 
     {
         ES3_ONLY("out", (yyvsp[(1) - (1)].lex).line, "storage qualifier");
@@ -3739,7 +3753,7 @@
     }
     break;
 
-  case 120:
+  case 121:
 
     {
         ES3_ONLY("centroid in", (yyvsp[(1) - (2)].lex).line, "storage qualifier");
@@ -3748,7 +3762,7 @@
     }
     break;
 
-  case 121:
+  case 122:
 
     {
         ES3_ONLY("centroid out", (yyvsp[(1) - (2)].lex).line, "storage qualifier");
@@ -3757,7 +3771,7 @@
     }
     break;
 
-  case 122:
+  case 123:
 
     {
         if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "uniform"))
@@ -3767,7 +3781,7 @@
     }
     break;
 
-  case 123:
+  case 124:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
@@ -3781,7 +3795,7 @@
     }
     break;
 
-  case 124:
+  case 125:
 
     {
         (yyval.interm.type) = (yyvsp[(2) - (2)].interm.type);
@@ -3789,35 +3803,35 @@
     }
     break;
 
-  case 125:
+  case 126:
 
     {
         (yyval.interm.precision) = EbpHigh;
     }
     break;
 
-  case 126:
+  case 127:
 
     {
         (yyval.interm.precision) = EbpMedium;
     }
     break;
 
-  case 127:
+  case 128:
 
     {
         (yyval.interm.precision) = EbpLow;
     }
     break;
 
-  case 128:
+  case 129:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
     }
     break;
 
-  case 129:
+  case 130:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (4)].interm.type);
@@ -3833,7 +3847,7 @@
     }
     break;
 
-  case 130:
+  case 131:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3841,19 +3855,11 @@
     }
     break;
 
-  case 131:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-    }
-    break;
-
   case 132:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3861,7 +3867,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3869,7 +3875,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3877,8 +3883,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3887,7 +3892,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setAggregate(2);
     }
     break;
 
@@ -3896,7 +3901,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(3);
     }
     break;
 
@@ -3904,8 +3909,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
     }
     break;
 
@@ -3914,7 +3919,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setAggregate(2);
     }
     break;
 
@@ -3923,7 +3928,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(3);
     }
     break;
 
@@ -3931,8 +3936,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
     }
     break;
 
@@ -3941,7 +3946,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setAggregate(2);
     }
     break;
 
@@ -3950,7 +3955,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(3);
     }
     break;
 
@@ -3958,8 +3963,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
     }
     break;
 
@@ -3968,7 +3973,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setAggregate(2);
     }
     break;
 
@@ -3977,13 +3982,22 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(3);
     }
     break;
 
   case 147:
 
     {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
+    }
+    break;
+
+  case 148:
+
+    {
         FRAG_VERT_ONLY("mat2", (yyvsp[(1) - (1)].lex).line);
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
@@ -3991,7 +4005,7 @@
     }
     break;
 
-  case 148:
+  case 149:
 
     {
         FRAG_VERT_ONLY("mat3", (yyvsp[(1) - (1)].lex).line);
@@ -4001,7 +4015,7 @@
     }
     break;
 
-  case 149:
+  case 150:
 
     {
         FRAG_VERT_ONLY("mat4", (yyvsp[(1) - (1)].lex).line);
@@ -4011,7 +4025,7 @@
     }
     break;
 
-  case 150:
+  case 151:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4020,7 +4034,7 @@
     }
     break;
 
-  case 151:
+  case 152:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4029,7 +4043,7 @@
     }
     break;
 
-  case 152:
+  case 153:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4038,7 +4052,7 @@
     }
     break;
 
-  case 153:
+  case 154:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4047,7 +4061,7 @@
     }
     break;
 
-  case 154:
+  case 155:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4056,7 +4070,7 @@
     }
     break;
 
-  case 155:
+  case 156:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4065,7 +4079,7 @@
     }
     break;
 
-  case 156:
+  case 157:
 
     {
         FRAG_VERT_ONLY("sampler2D", (yyvsp[(1) - (1)].lex).line);
@@ -4074,7 +4088,7 @@
     }
     break;
 
-  case 157:
+  case 158:
 
     {
         FRAG_VERT_ONLY("samplerCube", (yyvsp[(1) - (1)].lex).line);
@@ -4083,7 +4097,7 @@
     }
     break;
 
-  case 158:
+  case 159:
 
     {
         if (!context->supportsExtension("GL_OES_EGL_image_external")) {
@@ -4096,7 +4110,7 @@
     }
     break;
 
-  case 159:
+  case 160:
 
     {
         if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
@@ -4109,7 +4123,7 @@
     }
     break;
 
-  case 160:
+  case 161:
 
     {
         FRAG_VERT_ONLY("struct", (yyvsp[(1) - (1)].interm.type).line);
@@ -4118,7 +4132,7 @@
     }
     break;
 
-  case 161:
+  case 162:
 
     {
         //
@@ -4132,38 +4146,38 @@
     }
     break;
 
-  case 162:
+  case 163:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (3)].lex).line, *(yyvsp[(2) - (3)].lex).string)) context->recover(); }
     break;
 
-  case 163:
+  case 164:
 
     {
         (yyval.interm.type) = context->addStructure((yyvsp[(1) - (6)].lex).line, (yyvsp[(2) - (6)].lex).line, *(yyvsp[(2) - (6)].lex).string, (yyvsp[(5) - (6)].interm.typeList));
     }
     break;
 
-  case 164:
+  case 165:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (2)].lex).line, *(yyvsp[(2) - (2)].lex).string)) context->recover(); }
     break;
 
-  case 165:
+  case 166:
 
     {
         (yyval.interm.type) = context->addStructure((yyvsp[(1) - (5)].lex).line, 0, "", (yyvsp[(4) - (5)].interm.typeList));
     }
     break;
 
-  case 166:
+  case 167:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (1)].interm.typeList);
     }
     break;
 
-  case 167:
+  case 168:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (2)].interm.typeList);
@@ -4179,14 +4193,14 @@
     }
     break;
 
-  case 168:
+  case 169:
 
     {
         (yyval.interm.typeList) = context->addStructDeclaratorList((yyvsp[(1) - (3)].interm.type), (yyvsp[(2) - (3)].interm.typeList));
     }
     break;
 
-  case 169:
+  case 170:
 
     {
         // ES3 Only, but errors should be handled elsewhere
@@ -4195,7 +4209,7 @@
     }
     break;
 
-  case 170:
+  case 171:
 
     {
         (yyval.interm.typeList) = NewPoolTTypeList();
@@ -4203,14 +4217,14 @@
     }
     break;
 
-  case 171:
+  case 172:
 
     {
         (yyval.interm.typeList)->push_back((yyvsp[(3) - (3)].interm.typeLine));
     }
     break;
 
-  case 172:
+  case 173:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
@@ -4222,7 +4236,7 @@
     }
     break;
 
-  case 173:
+  case 174:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (4)].lex).line, *(yyvsp[(1) - (4)].lex).string))
@@ -4239,24 +4253,19 @@
     }
     break;
 
-  case 174:
+  case 175:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 175:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
   case 176:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 177:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
     break;
 
   case 178:
@@ -4286,21 +4295,26 @@
 
   case 183:
 
-    { (yyval.interm.intermAggregate) = 0; }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 184:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermAggregate) = 0; }
     break;
 
   case 185:
 
-    { context->symbolTable.pop(); }
+    { context->symbolTable.push(); }
     break;
 
   case 186:
 
+    { context->symbolTable.pop(); }
+    break;
+
+  case 187:
+
     {
         if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) {
             (yyvsp[(3) - (5)].interm.intermAggregate)->setOp(EOpSequence);
@@ -4310,11 +4324,6 @@
     }
     break;
 
-  case 187:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
   case 188:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
@@ -4322,32 +4331,37 @@
 
   case 189:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 190:
 
-    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    { context->symbolTable.push(); }
     break;
 
   case 191:
 
-    { context->symbolTable.push(); }
+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
     break;
 
   case 192:
 
-    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    { context->symbolTable.push(); }
     break;
 
   case 193:
 
+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    break;
+
+  case 194:
+
     {
         (yyval.interm.intermNode) = 0;
     }
     break;
 
-  case 194:
+  case 195:
 
     {
         if ((yyvsp[(2) - (3)].interm.intermAggregate)) {
@@ -4358,31 +4372,31 @@
     }
     break;
 
-  case 195:
+  case 196:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode), 0);
     }
     break;
 
-  case 196:
+  case 197:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermAggregate), (yyvsp[(2) - (2)].interm.intermNode), 0);
     }
     break;
 
-  case 197:
+  case 198:
 
     { (yyval.interm.intermNode) = 0; }
     break;
 
-  case 198:
+  case 199:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); }
     break;
 
-  case 199:
+  case 200:
 
     {
         if (context->boolErrorCheck((yyvsp[(1) - (5)].lex).line, (yyvsp[(3) - (5)].interm.intermTypedNode)))
@@ -4391,7 +4405,7 @@
     }
     break;
 
-  case 200:
+  case 201:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
@@ -4399,7 +4413,7 @@
     }
     break;
 
-  case 201:
+  case 202:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4407,7 +4421,7 @@
     }
     break;
 
-  case 202:
+  case 203:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
@@ -4416,7 +4430,7 @@
     }
     break;
 
-  case 203:
+  case 204:
 
     {
         TIntermNode* intermNode;
@@ -4434,12 +4448,12 @@
     }
     break;
 
-  case 204:
+  case 205:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 205:
+  case 206:
 
     {
         context->symbolTable.pop();
@@ -4448,12 +4462,12 @@
     }
     break;
 
-  case 206:
+  case 207:
 
     { ++context->loopNestingLevel; }
     break;
 
-  case 207:
+  case 208:
 
     {
         if (context->boolErrorCheck((yyvsp[(8) - (8)].lex).line, (yyvsp[(6) - (8)].interm.intermTypedNode)))
@@ -4464,24 +4478,17 @@
     }
     break;
 
-  case 208:
-
-    { context->symbolTable.push(); ++context->loopNestingLevel; }
-    break;
-
   case 209:
 
-    {
-        context->symbolTable.pop();
-        (yyval.interm.intermNode) = context->intermediate.addLoop(ELoopFor, (yyvsp[(4) - (7)].interm.intermNode), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node1), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node2), (yyvsp[(7) - (7)].interm.intermNode), (yyvsp[(1) - (7)].lex).line);
-        --context->loopNestingLevel;
-    }
+    { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
   case 210:
 
     {
-        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+        context->symbolTable.pop();
+        (yyval.interm.intermNode) = context->intermediate.addLoop(ELoopFor, (yyvsp[(4) - (7)].interm.intermNode), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node1), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node2), (yyvsp[(7) - (7)].interm.intermNode), (yyvsp[(1) - (7)].lex).line);
+        --context->loopNestingLevel;
     }
     break;
 
@@ -4495,26 +4502,33 @@
   case 212:
 
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
   case 213:
 
     {
-        (yyval.interm.intermTypedNode) = 0;
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
   case 214:
 
     {
+        (yyval.interm.intermTypedNode) = 0;
+    }
+    break;
+
+  case 215:
+
+    {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
     break;
 
-  case 215:
+  case 216:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
@@ -4522,7 +4536,7 @@
     }
     break;
 
-  case 216:
+  case 217:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4533,7 +4547,7 @@
     }
     break;
 
-  case 217:
+  case 218:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4544,7 +4558,7 @@
     }
     break;
 
-  case 218:
+  case 219:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).line);
@@ -4555,7 +4569,7 @@
     }
     break;
 
-  case 219:
+  case 220:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).line);
@@ -4570,7 +4584,7 @@
     }
     break;
 
-  case 220:
+  case 221:
 
     {
         FRAG_ONLY("discard", (yyvsp[(1) - (2)].lex).line);
@@ -4578,18 +4592,10 @@
     }
     break;
 
-  case 221:
-
-    {
-        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
-        context->treeRoot = (yyval.interm.intermNode);
-    }
-    break;
-
   case 222:
 
     {
-        (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
         context->treeRoot = (yyval.interm.intermNode);
     }
     break;
@@ -4597,7 +4603,8 @@
   case 223:
 
     {
-        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+        (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
+        context->treeRoot = (yyval.interm.intermNode);
     }
     break;
 
@@ -4611,6 +4618,13 @@
   case 225:
 
     {
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+    }
+    break;
+
+  case 226:
+
+    {
         TFunction* function = (yyvsp[(1) - (1)].interm).function;
         
         const TSymbol *builtIn = context->symbolTable.findBuiltIn(function->getMangledName(), context->shaderVersion);
@@ -4697,7 +4711,7 @@
     }
     break;
 
-  case 226:
+  case 227:
 
     {
         //?? Check that all paths return a value if return type != void ?
diff --git a/src/compiler/glslang_tab.h b/src/compiler/glslang_tab.h
index a794825..be471f1 100644
--- a/src/compiler/glslang_tab.h
+++ b/src/compiler/glslang_tab.h
@@ -111,53 +111,54 @@
      TYPE_NAME = 320,
      FLOATCONSTANT = 321,
      INTCONSTANT = 322,
-     BOOLCONSTANT = 323,
-     FIELD_SELECTION = 324,
-     LEFT_OP = 325,
-     RIGHT_OP = 326,
-     INC_OP = 327,
-     DEC_OP = 328,
-     LE_OP = 329,
-     GE_OP = 330,
-     EQ_OP = 331,
-     NE_OP = 332,
-     AND_OP = 333,
-     OR_OP = 334,
-     XOR_OP = 335,
-     MUL_ASSIGN = 336,
-     DIV_ASSIGN = 337,
-     ADD_ASSIGN = 338,
-     MOD_ASSIGN = 339,
-     LEFT_ASSIGN = 340,
-     RIGHT_ASSIGN = 341,
-     AND_ASSIGN = 342,
-     XOR_ASSIGN = 343,
-     OR_ASSIGN = 344,
-     SUB_ASSIGN = 345,
-     LEFT_PAREN = 346,
-     RIGHT_PAREN = 347,
-     LEFT_BRACKET = 348,
-     RIGHT_BRACKET = 349,
-     LEFT_BRACE = 350,
-     RIGHT_BRACE = 351,
-     DOT = 352,
-     COMMA = 353,
-     COLON = 354,
-     EQUAL = 355,
-     SEMICOLON = 356,
-     BANG = 357,
-     DASH = 358,
-     TILDE = 359,
-     PLUS = 360,
-     STAR = 361,
-     SLASH = 362,
-     PERCENT = 363,
-     LEFT_ANGLE = 364,
-     RIGHT_ANGLE = 365,
-     VERTICAL_BAR = 366,
-     CARET = 367,
-     AMPERSAND = 368,
-     QUESTION = 369
+     UINTCONSTANT = 323,
+     BOOLCONSTANT = 324,
+     FIELD_SELECTION = 325,
+     LEFT_OP = 326,
+     RIGHT_OP = 327,
+     INC_OP = 328,
+     DEC_OP = 329,
+     LE_OP = 330,
+     GE_OP = 331,
+     EQ_OP = 332,
+     NE_OP = 333,
+     AND_OP = 334,
+     OR_OP = 335,
+     XOR_OP = 336,
+     MUL_ASSIGN = 337,
+     DIV_ASSIGN = 338,
+     ADD_ASSIGN = 339,
+     MOD_ASSIGN = 340,
+     LEFT_ASSIGN = 341,
+     RIGHT_ASSIGN = 342,
+     AND_ASSIGN = 343,
+     XOR_ASSIGN = 344,
+     OR_ASSIGN = 345,
+     SUB_ASSIGN = 346,
+     LEFT_PAREN = 347,
+     RIGHT_PAREN = 348,
+     LEFT_BRACKET = 349,
+     RIGHT_BRACKET = 350,
+     LEFT_BRACE = 351,
+     RIGHT_BRACE = 352,
+     DOT = 353,
+     COMMA = 354,
+     COLON = 355,
+     EQUAL = 356,
+     SEMICOLON = 357,
+     BANG = 358,
+     DASH = 359,
+     TILDE = 360,
+     PLUS = 361,
+     STAR = 362,
+     SLASH = 363,
+     PERCENT = 364,
+     LEFT_ANGLE = 365,
+     RIGHT_ANGLE = 366,
+     VERTICAL_BAR = 367,
+     CARET = 368,
+     AMPERSAND = 369,
+     QUESTION = 370
    };
 #endif
 
@@ -173,6 +174,7 @@
             TString *string;
             float f;
             int i;
+            unsigned int u;
             bool b;
         };
         TSymbol* symbol;
diff --git a/src/compiler/preprocessor/Tokenizer.cpp b/src/compiler/preprocessor/Tokenizer.cpp
index feea74e..2b72033 100644
--- a/src/compiler/preprocessor/Tokenizer.cpp
+++ b/src/compiler/preprocessor/Tokenizer.cpp
@@ -367,17 +367,17 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[87] =
+static yyconst flex_int16_t yy_accept[90] =
     {   0,
         0,    0,    0,    0,   39,   37,   34,   35,   35,   33,
         7,   33,   33,   33,   33,   33,   33,   33,   33,    9,
         9,   33,   33,   33,    8,   37,   33,   33,    3,    5,
         5,    4,   34,   35,   19,   27,   20,   30,   25,   12,
        23,   13,   24,   10,    2,    1,   26,   10,    9,   11,
-       11,   11,   11,    9,   14,   16,   18,   17,   15,    8,
-       36,   36,   31,   21,   32,   22,    3,    5,    6,   11,
-       10,   11,    1,   10,   11,    0,   10,    9,   28,   29,
-        0,   10,   10,   10,   10,    0
+       11,   11,    9,   11,    9,    9,   14,   16,   18,   17,
+       15,    8,   36,   36,   31,   21,   32,   22,    3,    5,
+        6,   11,   10,   11,    1,   10,   11,    0,   10,    9,
+       28,   29,    0,   10,   10,   10,    9,   10,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -390,12 +390,12 @@
        16,   16,   16,   16,   16,   17,   17,    9,    9,   18,
        19,   20,    9,    1,   21,   21,   21,   21,   22,   21,
        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
-       23,   23,   23,   23,   23,   23,   23,   24,   23,   23,
-        9,   25,    9,   26,   23,    1,   21,   21,   21,   21,
+       23,   23,   23,   23,   24,   23,   23,   25,   23,   23,
+        9,   26,    9,   27,   23,    1,   21,   21,   21,   21,
 
        22,   21,   23,   23,   23,   23,   23,   23,   23,   23,
-       23,   23,   23,   23,   23,   23,   23,   23,   23,   24,
-       23,   23,    9,   27,    9,    9,    1,    1,    1,    1,
+       23,   23,   23,   23,   23,   23,   24,   23,   23,   25,
+       23,   23,    9,   28,    9,    9,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -412,89 +412,95 @@
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[28] =
+static yyconst flex_int32_t yy_meta[29] =
     {   0,
         1,    1,    2,    2,    1,    1,    1,    1,    1,    3,
-        1,    1,    4,    1,    5,    5,    5,    1,    1,    1,
-        5,    5,    5,    5,    1,    1,    1
+        1,    1,    1,    1,    4,    4,    4,    1,    1,    1,
+        4,    4,    4,    4,    4,    1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[92] =
+static yyconst flex_int16_t yy_base[94] =
     {   0,
-        0,    0,   25,   27,  162,  163,  159,  163,  152,  132,
-      163,  131,   24,  163,  116,   22,   26,   31,   30,   37,
-       40,   44,  115,   46,    0,   64,   50,   15,    0,  163,
-      124,   91,   88,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,   64,  163,    0,  163,   76,   54,   58,
-       79,   91,   91,    0,   56,  163,  163,  163,   32,    0,
-      163,   36,  163,  163,  163,  163,    0,  163,  163,   94,
-        0,  106,    0,    0,  113,   55,   72,  113,  163,  163,
-      116,  101,  108,  123,  126,  163,  143,   31,  148,  153,
-      155
+        0,    0,   26,   28,  167,  173,  164,  173,  129,  107,
+      173,  102,   25,  173,   97,   23,   27,   32,   31,   38,
+       51,   38,   88,   50,    0,   74,   16,   52,    0,  173,
+       98,   81,   80,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,   68,  173,    0,  173,   81,   54,   84,
+       95,  107,    0,  112,    0,    0,   46,  173,  173,  173,
+       39,    0,  173,   49,  173,  173,  173,  173,    0,  173,
+      173,   98,    0,  127,    0,    0,  134,   71,  119,   16,
+      173,  173,  137,  129,  136,  140,    0,  143,  173,  160,
+       33,  164,  168
 
     } ;
 
-static yyconst flex_int16_t yy_def[92] =
+static yyconst flex_int16_t yy_def[94] =
     {   0,
-       86,    1,   87,   87,   86,   86,   86,   86,   86,   86,
-       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
-       20,   86,   86,   86,   88,   86,   86,   86,   89,   86,
-       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
-       86,   86,   86,   86,   86,   90,   86,   86,   20,   20,
-       48,   51,   91,   21,   86,   86,   86,   86,   86,   88,
-       86,   86,   86,   86,   86,   86,   89,   86,   86,   44,
-       44,   70,   90,   48,   51,   86,   52,   91,   86,   86,
-       86,   72,   75,   86,   86,    0,   86,   86,   86,   86,
-       86
+       89,    1,   90,   90,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   91,   89,   89,   89,   92,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   93,   89,   89,   20,   20,
+       48,   51,   51,   89,   21,   51,   89,   89,   89,   89,
+       89,   91,   89,   89,   89,   89,   89,   89,   92,   89,
+       89,   44,   44,   72,   93,   48,   51,   89,   52,   54,
+       89,   89,   89,   74,   77,   89,   51,   89,    0,   89,
+       89,   89,   89
 
     } ;
 
-static yyconst flex_int16_t yy_nxt[191] =
+static yyconst flex_int16_t yy_nxt[202] =
     {   0,
         6,    7,    8,    9,   10,   11,   12,   13,   14,   15,
        16,   17,   18,   19,   20,   21,   21,   22,   23,   24,
-       25,   25,   25,   25,   26,   27,   28,   30,   31,   30,
-       31,   37,   40,   65,   32,   60,   32,   42,   61,   45,
-       41,   66,   38,   46,   43,   44,   44,   44,   47,   48,
-       80,   49,   49,   50,   54,   54,   54,   51,   52,   51,
-       53,   55,   56,   51,   58,   59,   61,   62,   63,   84,
-       84,   84,   50,   50,   79,   64,   70,   51,   71,   71,
-       71,   51,   86,   86,   70,   72,   70,   70,   51,   33,
-       74,   74,   74,   51,   51,   51,   51,   75,   51,   51,
+       25,   25,   25,   25,   25,   26,   27,   28,   30,   31,
+       30,   31,   37,   40,   65,   32,   62,   32,   42,   87,
+       45,   41,   66,   38,   46,   43,   44,   44,   44,   47,
+       48,   63,   49,   49,   50,   57,   58,   82,   51,   52,
+       51,   53,   54,   48,   81,   55,   55,   55,   60,   61,
+       67,   51,   52,   51,   56,   51,   63,   64,   51,   68,
+       72,   33,   73,   73,   73,   86,   86,   86,   72,   74,
+       72,   72,   72,   51,   71,   76,   76,   76,   50,   50,
 
-       51,   76,   76,   51,   69,   77,   77,   77,   70,   70,
-       70,   86,   86,   51,   51,   70,   81,   81,   86,   86,
-       82,   82,   82,   81,   81,   51,   68,   83,   83,   83,
-       85,   85,   85,   57,   39,   51,   51,   84,   84,   84,
-       85,   85,   85,   29,   29,   29,   29,   29,   67,   36,
-       35,   67,   67,   73,   34,   73,   73,   73,   78,   78,
-       33,   86,    5,   86,   86,   86,   86,   86,   86,   86,
-       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
-       86,   86,   86,   86,   86,   86,   86,   86,   86,   86
+       70,   51,   77,   51,   51,   51,   59,   51,   51,   51,
+       51,   51,   72,   72,   72,   39,   51,   78,   78,   72,
+       36,   79,   79,   79,   51,   35,   80,   80,   80,   89,
+       89,   34,   80,   80,   51,   51,   51,   83,   83,   89,
+       89,   84,   84,   84,   83,   83,   89,   89,   85,   85,
+       85,   88,   88,   88,   86,   86,   86,   88,   88,   88,
+       29,   29,   29,   29,   69,   33,   89,   69,   75,   89,
+       75,   75,    5,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+
+       89
     } ;
 
-static yyconst flex_int16_t yy_chk[191] =
+static yyconst flex_int16_t yy_chk[202] =
     {   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,    3,    3,    4,
-        4,   13,   16,   28,    3,   88,    4,   17,   62,   19,
-       16,   28,   13,   19,   17,   18,   18,   18,   19,   20,
-       59,   20,   20,   20,   21,   21,   21,   20,   20,   20,
-       20,   22,   22,   21,   24,   24,   26,   26,   27,   76,
-       76,   76,   50,   50,   55,   27,   44,   49,   44,   44,
-       44,   50,   77,   77,   44,   44,   44,   44,   48,   33,
-       48,   48,   48,   51,   51,   51,   48,   48,   48,   48,
+        1,    1,    1,    1,    1,    1,    1,    1,    3,    3,
+        4,    4,   13,   16,   27,    3,   91,    4,   17,   80,
+       19,   16,   27,   13,   19,   17,   18,   18,   18,   19,
+       20,   64,   20,   20,   20,   22,   22,   61,   20,   20,
+       20,   20,   20,   21,   57,   21,   21,   21,   24,   24,
+       28,   21,   21,   21,   21,   21,   26,   26,   49,   28,
+       44,   33,   44,   44,   44,   78,   78,   78,   44,   44,
+       44,   44,   44,   48,   32,   48,   48,   48,   50,   50,
 
-       51,   52,   52,   53,   32,   52,   52,   52,   70,   70,
-       70,   82,   82,   53,   53,   70,   72,   72,   83,   83,
-       72,   72,   72,   75,   75,   78,   31,   75,   75,   75,
-       81,   81,   81,   23,   15,   78,   78,   84,   84,   84,
-       85,   85,   85,   87,   87,   87,   87,   87,   89,   12,
-       10,   89,   89,   90,    9,   90,   90,   90,   91,   91,
-        7,    5,   86,   86,   86,   86,   86,   86,   86,   86,
-       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
-       86,   86,   86,   86,   86,   86,   86,   86,   86,   86
+       31,   48,   48,   48,   48,   48,   23,   50,   50,   51,
+       51,   51,   72,   72,   72,   15,   51,   52,   52,   72,
+       12,   52,   52,   52,   54,   10,   54,   54,   54,   79,
+       79,    9,   54,   54,   54,   54,   54,   74,   74,   84,
+       84,   74,   74,   74,   77,   77,   85,   85,   77,   77,
+       77,   83,   83,   83,   86,   86,   86,   88,   88,   88,
+       90,   90,   90,   90,   92,    7,    5,   92,   93,    0,
+       93,   93,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+
+       89
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -847,13 +853,13 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 87 )
+				if ( yy_current_state >= 90 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 86 );
+		while ( yy_current_state != 89 );
 		yy_cp = yyg->yy_last_accepting_cpos;
 		yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1446,7 +1452,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 87 )
+			if ( yy_current_state >= 90 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1475,11 +1481,11 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 87 )
+		if ( yy_current_state >= 90 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 86);
+	yy_is_jam = (yy_current_state == 89);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
diff --git a/src/compiler/preprocessor/Tokenizer.l b/src/compiler/preprocessor/Tokenizer.l
index ea87523..89da400 100644
--- a/src/compiler/preprocessor/Tokenizer.l
+++ b/src/compiler/preprocessor/Tokenizer.l
@@ -79,9 +79,9 @@
 IDENTIFIER  [_a-zA-Z][_a-zA-Z0-9]*
 PUNCTUATOR  [][<>(){}.+-/*%^|&~=!:;,?]
 
-DECIMAL_CONSTANT      [1-9][0-9]*
-OCTAL_CONSTANT        0[0-7]*
-HEXADECIMAL_CONSTANT  0[xX][0-9a-fA-F]+
+DECIMAL_CONSTANT      [1-9][0-9]*[uU]?
+OCTAL_CONSTANT        0[0-7]*[uU]?
+HEXADECIMAL_CONSTANT  0[xX][0-9a-fA-F]+[uU]?
 
 DIGIT                [0-9]
 EXPONENT_PART        [eE][+-]?{DIGIT}+
diff --git a/src/compiler/preprocessor/preprocessor.vcxproj b/src/compiler/preprocessor/preprocessor.vcxproj
index ca8530b..b23cf64 100644
--- a/src/compiler/preprocessor/preprocessor.vcxproj
+++ b/src/compiler/preprocessor/preprocessor.vcxproj
@@ -164,6 +164,7 @@
     <ClInclude Include="Tokenizer.h" />

   </ItemGroup>

   <ItemGroup>

+    <None Include="ExpressionParser.y" />

     <None Include="Tokenizer.l" />

   </ItemGroup>

   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

diff --git a/src/compiler/preprocessor/preprocessor.vcxproj.filters b/src/compiler/preprocessor/preprocessor.vcxproj.filters
index 4ac202f..030f5af 100644
--- a/src/compiler/preprocessor/preprocessor.vcxproj.filters
+++ b/src/compiler/preprocessor/preprocessor.vcxproj.filters
@@ -96,5 +96,8 @@
     <None Include="Tokenizer.l">

       <Filter>Source Files</Filter>

     </None>

+    <None Include="ExpressionParser.y">

+      <Filter>Source Files</Filter>

+    </None>

   </ItemGroup>

 </Project>
\ No newline at end of file