Add an option to support for GL_OES_EGL_image_external.

Comes with this extension is the new sampler type samplerExternalOES.

ANGLEBUG=175
TEST=compile the attached shader file
Review URL: http://codereview.appspot.com/4809076

git-svn-id: https://angleproject.googlecode.com/svn/trunk@728 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/compiler/BaseTypes.h b/src/compiler/BaseTypes.h
index 9f4a860..57e1d80 100644
--- a/src/compiler/BaseTypes.h
+++ b/src/compiler/BaseTypes.h
@@ -42,6 +42,7 @@
     EbtGuardSamplerBegin,  // non type:  see implementation of IsSampler()
     EbtSampler2D,
     EbtSamplerCube,
+    EbtSamplerExternalOES,  // Only valid if OES_EGL_image_external exists.
     EbtGuardSamplerEnd,    // non type:  see implementation of IsSampler()
     EbtStruct,
     EbtAddress,            // should be deprecated??
@@ -57,6 +58,7 @@
     case EbtBool:              return "bool";              break;
     case EbtSampler2D:         return "sampler2D";         break;
     case EbtSamplerCube:       return "samplerCube";       break;
+    case EbtSamplerExternalOES: return "samplerExternalOES"; break;
     case EbtStruct:            return "structure";         break;
     default:                   return "unknown type";
     }
diff --git a/src/compiler/Compiler.cpp b/src/compiler/Compiler.cpp
index 0456fa3..16b7bd9 100644
--- a/src/compiler/Compiler.cpp
+++ b/src/compiler/Compiler.cpp
@@ -19,6 +19,7 @@
 {
     TIntermediate intermediate(infoSink);
     TExtensionBehavior extBehavior;
+    InitExtensionBehavior(resources, extBehavior);
     // The builtins deliberately don't specify precisions for the function
     // arguments and return types. For that reason we don't try to check them.
     TParseContext parseContext(symbolTable, extBehavior, intermediate, type, spec, 0, false, NULL, infoSink);
diff --git a/src/compiler/ExtensionBehavior.h b/src/compiler/ExtensionBehavior.h
index ab5a0a5..e9bba4b 100644
--- a/src/compiler/ExtensionBehavior.h
+++ b/src/compiler/ExtensionBehavior.h
@@ -13,7 +13,8 @@
     EBhRequire,
     EBhEnable,
     EBhWarn,
-    EBhDisable
+    EBhDisable,
+    EBhUndefined,
 } TBehavior;
 
 inline const char* getBehaviorString(TBehavior b)
diff --git a/src/compiler/Initialize.cpp b/src/compiler/Initialize.cpp
index 74a2de3..e0e1db9 100644
--- a/src/compiler/Initialize.cpp
+++ b/src/compiler/Initialize.cpp
@@ -363,6 +363,12 @@
     s.append(TString("vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod);"));
     s.append(TString("vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod);"));
 
+    if (resources.OES_EGL_image_external) {
+        s.append(TString("vec4 texture2D(samplerExternalOES sampler, vec2 coord);"));
+        s.append(TString("vec4 texture2DProj(samplerExternalOES sampler, vec3 coord);"));
+        s.append(TString("vec4 texture2DProj(samplerExternalOES sampler, vec4 coord);"));
+    }
+
     return s;
 }
 
@@ -388,6 +394,12 @@
     s.append(TString("vec4 texture2DProj(sampler2D sampler, vec4 coord, float bias);"));
     s.append(TString("vec4 textureCube(samplerCube sampler, vec3 coord, float bias);"));
 
+    if (resources.OES_EGL_image_external) {
+        s.append(TString("vec4 texture2D(samplerExternalOES sampler, vec2 coord);"));
+        s.append(TString("vec4 texture2DProj(samplerExternalOES sampler, vec3 coord);"));
+        s.append(TString("vec4 texture2DProj(samplerExternalOES sampler, vec4 coord);"));
+    }
+
     if (resources.OES_standard_derivatives) {
         s.append(TString("float dFdx(float p);"));
         s.append(TString("vec2  dFdx(vec2  p);"));
@@ -625,5 +637,7 @@
                            TExtensionBehavior& extBehavior)
 {
     if (resources.OES_standard_derivatives)
-        extBehavior["GL_OES_standard_derivatives"] = EBhDisable;
+        extBehavior["GL_OES_standard_derivatives"] = EBhUndefined;
+    if (resources.OES_EGL_image_external)
+        extBehavior["GL_OES_EGL_image_external"] = EBhUndefined;
 }
diff --git a/src/compiler/ParseHelper.cpp b/src/compiler/ParseHelper.cpp
index 3f0836d..e2141c6 100644
--- a/src/compiler/ParseHelper.cpp
+++ b/src/compiler/ParseHelper.cpp
@@ -943,6 +943,12 @@
     return false;
 }
 
+bool TParseContext::supportsExtension(const char* extension)
+{
+    TExtensionBehavior::const_iterator iter = extensionBehavior.find(extension);
+    return (iter != extensionBehavior.end());
+}
+
 /////////////////////////////////////////////////////////////////////////////////
 //
 // Non-Errors.
diff --git a/src/compiler/ParseHelper.h b/src/compiler/ParseHelper.h
index 8637d89..7efc23f 100644
--- a/src/compiler/ParseHelper.h
+++ b/src/compiler/ParseHelper.h
@@ -85,6 +85,7 @@
     bool nonInitErrorCheck(int line, TString& identifier, TPublicType& type, TVariable*& variable);
     bool paramErrorCheck(int line, TQualifier qualifier, TQualifier paramQualifier, TType* type);
     bool extensionErrorCheck(int line, const TString&);
+    bool supportsExtension(const char* extension);
     const TFunction* findFunction(int line, TFunction* pfnCall, bool *builtIn = 0);
     bool executeInitializer(TSourceLoc line, TString& identifier, TPublicType& pType,
                             TIntermTyped* initializer, TIntermNode*& intermNode, TVariable* variable = 0);
diff --git a/src/compiler/ShaderLang.cpp b/src/compiler/ShaderLang.cpp
index ab8799c..65a4d9b 100644
--- a/src/compiler/ShaderLang.cpp
+++ b/src/compiler/ShaderLang.cpp
@@ -104,6 +104,7 @@
 
     // Extensions.
     resources->OES_standard_derivatives = 0;
+    resources->OES_EGL_image_external = 0;
 }
 
 //
diff --git a/src/compiler/TranslatorESSL.cpp b/src/compiler/TranslatorESSL.cpp
index bb201a4..794236b 100644
--- a/src/compiler/TranslatorESSL.cpp
+++ b/src/compiler/TranslatorESSL.cpp
@@ -28,7 +28,9 @@
     const TExtensionBehavior& extensionBehavior = getExtensionBehavior();
     for (TExtensionBehavior::const_iterator iter = extensionBehavior.begin();
          iter != extensionBehavior.end(); ++iter) {
-        sink << "#extension " << iter->first << " : "
-             << getBehaviorString(iter->second) << "\n";
+        if (iter->second != EBhUndefined) {
+            sink << "#extension " << iter->first << " : "
+                 << getBehaviorString(iter->second) << "\n";
+        }
     }
 }
diff --git a/src/compiler/glslang.l b/src/compiler/glslang.l
index 5a7c5d5..f7ecb23 100644
--- a/src/compiler/glslang.l
+++ b/src/compiler/glslang.l
@@ -120,6 +120,7 @@
 
 "sampler2D"       { context->lexAfterType = true; return SAMPLER2D; }
 "samplerCube"     { context->lexAfterType = true; return SAMPLERCUBE; }
+"samplerExternalOES" { context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
 
 "struct"       { context->lexAfterType = true; return(STRUCT); }
 
diff --git a/src/compiler/glslang.y b/src/compiler/glslang.y
index d05f441..c86fdf0 100644
--- a/src/compiler/glslang.y
+++ b/src/compiler/glslang.y
@@ -98,7 +98,7 @@
 %token <lex> BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 VEC2 VEC3 VEC4
 %token <lex> MATRIX2 MATRIX3 MATRIX4 IN_QUAL OUT_QUAL INOUT_QUAL UNIFORM VARYING
 %token <lex> STRUCT VOID_TYPE WHILE
-%token <lex> SAMPLER2D SAMPLERCUBE
+%token <lex> SAMPLER2D SAMPLERCUBE SAMPLER_EXTERNAL_OES
 
 %token <lex> IDENTIFIER TYPE_NAME FLOATCONSTANT INTCONSTANT BOOLCONSTANT
 %token <lex> FIELD_SELECTION
@@ -1615,6 +1615,15 @@
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         $$.setBasic(EbtSamplerCube, qual, $1.line);
     }
+    | SAMPLER_EXTERNAL_OES {
+        if (!context->supportsExtension("GL_OES_EGL_image_external")) {
+            context->error($1.line, "unsupported type", "samplerExternalOES", "");
+            context->recover();
+        }
+        FRAG_VERT_ONLY("samplerExternalOES", $1.line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtSamplerExternalOES, qual, $1.line);
+    }
     | struct_specifier {
         FRAG_VERT_ONLY("struct", $1.line);
         $$ = $1;
diff --git a/src/compiler/glslang_lex.cpp b/src/compiler/glslang_lex.cpp
index 9d5f53f..1448ce1 100644
--- a/src/compiler/glslang_lex.cpp
+++ b/src/compiler/glslang_lex.cpp
@@ -1,4 +1,4 @@
-#line 17 "compiler/glslang.l"
+#line 17 "./glslang.l"
 //
 // Copyright (c) 2010 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
@@ -9,7 +9,7 @@
 
 
 
-#line 13 "compiler/glslang_lex.cpp"
+#line 13 "./glslang_lex.cpp"
 
 #define  YY_INT_ALIGNED short int
 
@@ -179,6 +179,11 @@
 typedef struct yy_buffer_state *YY_BUFFER_STATE;
 #endif
 
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
 #define EOB_ACT_CONTINUE_SCAN 0
 #define EOB_ACT_END_OF_FILE 1
 #define EOB_ACT_LAST_MATCH 2
@@ -214,11 +219,6 @@
 
 #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
 
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
 #ifndef YY_STRUCT_YY_BUFFER_STATE
 #define YY_STRUCT_YY_BUFFER_STATE
 struct yy_buffer_state
@@ -236,7 +236,7 @@
 	/* Number of characters read into yy_ch_buf, not including EOB
 	 * characters.
 	 */
-	int yy_n_chars;
+	yy_size_t yy_n_chars;
 
 	/* Whether we "own" the buffer - i.e., we know we created it,
 	 * and can realloc() it to grow it, and should free() it to
@@ -315,7 +315,7 @@
 
 YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
 YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
-YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner );
 
 void *yyalloc (yy_size_t ,yyscan_t yyscanner );
 void *yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
@@ -371,8 +371,8 @@
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 145
-#define YY_END_OF_BUFFER 146
+#define YY_NUM_RULES 146
+#define YY_END_OF_BUFFER 147
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -380,53 +380,55 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[411] =
+static yyconst flex_int16_t yy_accept[422] =
     {   0,
-        0,    0,    0,    0,    0,    0,  146,  144,  143,  143,
-      128,  134,  139,  123,  124,  132,  131,  120,  129,  127,
-      133,   92,   92,  121,  117,  135,  122,  136,  140,   88,
-      125,  126,  138,   88,   88,   88,   88,   88,   88,   88,
-       88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
-       88,   88,   88,  118,  137,  119,  130,    3,    4,    3,
-      142,  145,  141,  114,  100,  119,  108,  103,   98,  106,
-       96,  107,   97,   95,    2,    1,   99,   94,   90,   91,
-        0,    0,   92,  126,  118,  125,  115,  111,  113,  112,
-      116,   88,  104,  110,   88,   88,   88,   88,   88,   88,
+        0,    0,    0,    0,    0,    0,  147,  145,  144,  144,
+      129,  135,  140,  124,  125,  133,  132,  121,  130,  128,
+      134,   93,   93,  122,  118,  136,  123,  137,  141,   89,
+      126,  127,  139,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,  119,  138,  120,  131,    3,    4,    3,
+      143,  146,  142,  115,  101,  120,  109,  104,   99,  107,
+       97,  108,   98,   96,    2,    1,  100,   95,   91,   92,
+        0,    0,   93,  127,  119,  126,  116,  112,  114,  113,
+      117,   89,  105,  111,   89,   89,   89,   89,   89,   89,
 
-       88,   88,   88,   88,   17,   88,   88,   88,   88,   88,
-       88,   88,   88,   88,   88,   88,   88,   88,   20,   22,
-       88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
-       88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
-       88,   88,   88,   88,   88,   88,  105,  109,    5,  141,
-        0,    1,   94,    0,    0,   93,   89,  101,  102,   48,
-       88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
-       88,   88,   88,   88,   88,   88,   88,   18,   88,   88,
-       88,   88,   88,   88,   88,   88,   26,   88,   88,   88,
-       88,   88,   88,   88,   88,   23,   88,   88,   88,   88,
+       89,   89,   89,   89,   17,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   20,   22,
+       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,  106,  110,    5,  142,
+        0,    1,   95,    0,    0,   94,   90,  102,  103,   49,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   18,   89,   89,
+       89,   89,   89,   89,   89,   89,   26,   89,   89,   89,
+       89,   89,   89,   89,   89,   23,   89,   89,   89,   89,
 
-       88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
-       88,   88,   88,   88,   88,   88,   88,   88,    0,   95,
-        0,   94,   88,   28,   88,   88,   85,   88,   88,   88,
-       88,   88,   88,   88,   21,   51,   88,   88,   88,   88,
-       88,   56,   70,   88,   88,   88,   88,   88,   88,   88,
-       88,   67,    9,   33,   34,   35,   88,   88,   88,   88,
-       88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
-       88,   54,   29,   88,   88,   88,   88,   88,   88,   36,
-       37,   38,   27,   88,   88,   88,   15,   42,   43,   44,
-       49,   12,   88,   88,   88,   88,   81,   82,   83,   88,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,    0,   96,
+        0,   95,   89,   28,   89,   89,   86,   89,   89,   89,
+       89,   89,   89,   89,   21,   52,   89,   89,   89,   89,
+       89,   57,   71,   89,   89,   89,   89,   89,   89,   89,
+       89,   68,    9,   33,   34,   35,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   55,   29,   89,   89,   89,   89,   89,   89,   36,
+       37,   38,   27,   89,   89,   89,   15,   42,   43,   44,
+       50,   12,   89,   89,   89,   89,   82,   83,   84,   89,
 
-       30,   71,   25,   78,   79,   80,    7,   75,   76,   77,
-       88,   24,   73,   88,   88,   39,   40,   41,   88,   88,
-       88,   88,   88,   88,   88,   88,   88,   68,   88,   88,
-       88,   88,   88,   88,   88,   50,   88,   87,   88,   88,
-       19,   88,   88,   88,   88,   69,   64,   59,   88,   88,
-       88,   88,   88,   74,   55,   88,   62,   32,   88,   84,
-       63,   47,   57,   88,   88,   88,   88,   88,   88,   88,
-       88,   58,   31,   88,   88,   88,    8,   88,   88,   88,
-       88,   88,   52,   13,   88,   14,   88,   88,   16,   65,
-       88,   88,   88,   60,   88,   88,   88,   53,   72,   61,
+       30,   72,   25,   79,   80,   81,    7,   76,   77,   78,
+       89,   24,   74,   89,   89,   39,   40,   41,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   69,   89,   89,
+       89,   89,   89,   89,   89,   51,   89,   88,   89,   89,
+       19,   89,   89,   89,   89,   70,   65,   60,   89,   89,
+       89,   89,   89,   75,   56,   89,   63,   32,   89,   85,
+       64,   48,   58,   89,   89,   89,   89,   89,   89,   89,
+       89,   59,   31,   89,   89,   89,    8,   89,   89,   89,
+       89,   89,   53,   13,   89,   14,   89,   89,   16,   66,
+       89,   89,   89,   61,   89,   89,   89,   89,   54,   73,
 
-       11,   66,    6,   86,   10,   45,   88,   88,   46,    0
+       62,   11,   67,    6,   87,   10,   45,   89,   89,   89,
+       89,   46,   89,   89,   89,   89,   89,   89,   89,   47,
+        0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -438,13 +440,13 @@
         8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
        18,   19,   16,   16,   16,   20,   20,   21,   22,   23,
        24,   25,   26,    1,   27,   27,   28,   29,   30,   27,
-       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
-       31,   31,   31,   31,   31,   31,   31,   32,   31,   31,
-       33,    1,   34,   35,   31,    1,   36,   37,   38,   39,
+       31,   31,   31,   31,   31,   31,   31,   31,   32,   31,
+       31,   31,   33,   31,   31,   31,   31,   34,   31,   31,
+       35,    1,   36,   37,   31,    1,   38,   39,   40,   41,
 
-       40,   41,   42,   43,   44,   31,   45,   46,   47,   48,
-       49,   50,   31,   51,   52,   53,   54,   55,   56,   57,
-       58,   59,   60,   61,   62,   63,    1,    1,    1,    1,
+       42,   43,   44,   45,   46,   31,   47,   48,   49,   50,
+       51,   52,   31,   53,   54,   55,   56,   57,   58,   59,
+       60,   61,   62,   63,   64,   65,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -461,195 +463,199 @@
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[64] =
+static yyconst flex_int32_t yy_meta[66] =
     {   0,
         1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    3,    3,    3,    3,    3,    3,
         1,    1,    1,    1,    1,    1,    3,    3,    3,    3,
-        4,    4,    1,    1,    1,    3,    3,    3,    3,    3,
-        3,    4,    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,    1,    1,    1,    3,    3,    3,
+        3,    3,    3,    4,    4,    4,    4,    4,    4,    4,
+        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+        4,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[416] =
+static yyconst flex_int16_t yy_base[427] =
     {   0,
-        0,    0,   61,   62,   71,    0,  606,  607,  607,  607,
-      581,   42,  129,  607,  607,  580,  126,  607,  125,  123,
-      137,  149,  157,  578,  607,  175,  578,   44,  607,    0,
-      607,  607,  120,   95,  103,  142,  146,  136,  156,  552,
-      168,  162,  551,  120,  158,  545,  173,  558,  172,  178,
-      111,  186,  554,  607,  159,  607,  607,  607,  607,  582,
-      607,  607,    0,  607,  607,  607,  607,  607,  607,  607,
-      607,  607,  607,  222,  607,    0,  607,  228,  254,  262,
-      281,    0,  290,  607,  607,  607,  571,  607,  607,  607,
-      570,    0,  607,  607,  546,  539,  542,  550,  549,  536,
+        0,    0,   63,   64,   73,    0,  621,  622,  622,  622,
+      596,   44,  133,  622,  622,  595,  130,  622,  129,  127,
+      141,  153,  161,  593,  622,  177,  593,   46,  622,    0,
+      622,  622,  124,   97,  105,  137,  148,  154,  168,  565,
+      151,  167,  564,  121,  158,  558,  111,  571,  177,  176,
+      157,  188,  567,  622,  168,  622,  622,  622,  622,  597,
+      622,  622,    0,  622,  622,  622,  622,  622,  622,  622,
+      622,  622,  622,  225,  622,    0,  622,  231,  259,  267,
+      288,    0,  297,  622,  622,  622,  586,  622,  622,  622,
+      585,    0,  622,  622,  559,  552,  555,  563,  562,  549,
 
-      551,  538,  544,  532,  529,  542,  529,  526,  526,  532,
-      520,  527,  524,  534,  520,  526,  529,  530,    0,  204,
-      529,  207,  515,  528,  519,  521,  511,  525,  522,  524,
-      507,  512,  509,  498,  183,  512,  508,  510,  499,  502,
-      212,  507,  499,  511,  186,  504,  607,  607,  607,    0,
-      306,    0,  316,  332,  270,  342,    0,  607,  607,    0,
-      496,  500,  509,  506,  490,  490,  161,  505,  502,  502,
-      500,  497,  489,  495,  482,  493,  496,    0,  493,  481,
-      488,  485,  489,  482,  471,  470,  483,  486,  483,  478,
-      469,  294,  474,  477,  468,  465,  469,  475,  466,  457,
+      564,  551,  557,  545,  542,  555,  542,  539,  539,  545,
+      533,  540,  537,  547,  533,  539,  542,  543,    0,  205,
+      542,  170,  528,  541,  532,  534,  524,  538,  535,  537,
+      520,  525,  522,  511,  199,  525,  521,  523,  512,  515,
+      212,  520,  512,  524,  138,  517,  622,  622,  622,    0,
+      313,    0,  325,  341,  275,  353,    0,  622,  622,    0,
+      509,  513,  522,  519,  503,  503,  179,  518,  515,  515,
+      513,  510,  502,  508,  495,  506,  509,    0,  506,  494,
+      501,  498,  502,  495,  484,  483,  496,  499,  496,  491,
+      482,  246,  487,  490,  481,  478,  482,  488,  479,  470,
 
-      460,  458,  468,  454,  452,  452,  454,  451,  462,  461,
-      278,  456,  451,  440,  320,  458,  460,  449,  348,  354,
-      360,  366,  450,    0,  448,  336,    0,  440,  438,  446,
-      435,  452,  441,  370,    0,    0,  435,  445,  445,  430,
-      373,    0,    0,  432,  376,  433,  427,  426,  427,  426,
-      379,    0,    0,    0,    0,    0,  422,  423,  428,  419,
-      432,  427,  426,  418,  422,  414,  417,  421,  426,  425,
-      416,    0,    0,  422,  411,  411,  416,  415,  412,    0,
-        0,    0,    0,  402,  414,  416,    0,    0,    0,    0,
-        0,    0,  404,  405,  399,  409,    0,    0,    0,  400,
+      473,  471,  481,  467,  465,  465,  467,  464,  475,  474,
+      245,  469,  464,  453,  251,  471,  473,  462,  359,  365,
+      371,  377,  463,    0,  461,  301,    0,  453,  451,  459,
+      448,  465,  454,  317,    0,    0,  448,  458,  458,  443,
+      329,    0,    0,  445,  345,  446,  440,  439,  440,  439,
+      381,    0,    0,    0,    0,    0,  435,  436,  441,  432,
+      445,  440,  439,  431,  435,  427,  430,  434,  439,  438,
+      429,    0,    0,  435,  424,  424,  429,  428,  425,    0,
+        0,    0,    0,  415,  427,  429,    0,    0,    0,    0,
+        0,    0,  417,  418,  412,  422,    0,    0,    0,  413,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      407,    0,    0,  405,  401,    0,    0,    0,  397,  393,
-      398,  388,  401,  387,  400,  389,  396,    0,  394,  396,
-      380,  389,  395,  390,  378,    0,  380,    0,  379,  382,
-        0,  371,  370,  370,  383,    0,  385,    0,  384,  383,
-      368,  381,  368,    0,    0,  371,    0,    0,  363,    0,
-        0,    0,    0,  360,  371,  364,  368,  303,  297,  288,
-      300,    0,    0,  283,  290,  269,    0,  277,  274,  255,
-      232,  255,    0,    0,  244,    0,  236,  226,    0,    0,
-      225,  208,  211,    0,  185,  202,  131,    0,    0,    0,
+      420,    0,    0,  418,  414,    0,    0,    0,  410,  406,
+      411,  401,  414,  400,  413,  402,  409,    0,  407,  409,
+      393,  402,  408,  403,  391,    0,  393,    0,  392,  395,
+        0,  384,  383,  383,  396,    0,  398,    0,  397,  396,
+      381,  394,  381,    0,    0,  384,    0,    0,  376,    0,
+        0,    0,    0,  373,  384,  377,  383,  380,  375,  367,
+      379,    0,    0,  372,  379,  368,    0,  377,  374,  364,
+      294,  372,    0,    0,  372,    0,  368,  324,    0,    0,
+      323,  299,  310,    0,  300,  320,  282,  278,    0,    0,
 
-        0,    0,    0,    0,    0,    0,  134,  117,    0,  607,
-      398,  400,  402,  406,  142
+        0,    0,    0,    0,    0,    0,    0,  287,  266,  260,
+      257,    0,  228,  221,  221,  206,  206,  197,  160,    0,
+      622,  400,  402,  404,  408,  157
     } ;
 
-static yyconst flex_int16_t yy_def[416] =
+static yyconst flex_int16_t yy_def[427] =
     {   0,
-      410,    1,  411,  411,  410,    5,  410,  410,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  412,
-      410,  410,  410,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  410,  410,  410,  410,  410,  410,  410,
-      410,  410,  413,  410,  410,  410,  410,  410,  410,  410,
-      410,  410,  410,  410,  410,  414,  410,  410,  410,  410,
-      410,  415,  410,  410,  410,  410,  410,  410,  410,  410,
-      410,  412,  410,  410,  412,  412,  412,  412,  412,  412,
+      421,    1,  422,  422,  421,    5,  421,  421,  421,  421,
+      421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
+      421,  421,  421,  421,  421,  421,  421,  421,  421,  423,
+      421,  421,  421,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  421,  421,  421,  421,  421,  421,  421,
+      421,  421,  424,  421,  421,  421,  421,  421,  421,  421,
+      421,  421,  421,  421,  421,  425,  421,  421,  421,  421,
+      421,  426,  421,  421,  421,  421,  421,  421,  421,  421,
+      421,  423,  421,  421,  423,  423,  423,  423,  423,  423,
 
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  410,  410,  410,  413,
-      410,  414,  410,  410,  410,  410,  415,  410,  410,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  421,  421,  421,  424,
+      421,  425,  421,  421,  421,  421,  426,  421,  421,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
 
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  410,  410,
-      410,  410,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  421,  421,
+      421,  421,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
 
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
-      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
 
-      412,  412,  412,  412,  412,  412,  412,  412,  412,    0,
-      410,  410,  410,  410,  410
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+      423,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+        0,  421,  421,  421,  421,  421
     } ;
 
-static yyconst flex_int16_t yy_nxt[671] =
+static yyconst flex_int16_t yy_nxt[688] =
     {   0,
         8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
        18,   19,   20,   21,   22,   23,   23,   23,   23,   23,
        24,   25,   26,   27,   28,   29,   30,   30,   30,   30,
-       30,   30,   31,   32,   33,   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,
+       30,   30,   30,   30,   31,   32,   33,   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,    8,    8,    8,    8,    8,    8,
-        8,    8,    8,    8,    8,    8,    8,   63,   63,   63,
+        8,    8,    8,    8,    8,    8,    8,    8,    8,   63,
 
-       63,   63,   63,    8,    8,    8,   63,   63,   63,   63,
+       63,   63,   63,   63,   63,   63,   63,    8,    8,    8,
        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,   93,  157,   75,   95,   96,   73,   71,
-       76,   97,   68,   98,   94,  123,  409,   99,  141,  124,
-       77,   78,  142,   79,   79,   79,   79,   79,   80,   78,
-      408,   83,   83,   83,   83,   83,   83,  100,   81,   85,
-       82,  107,  147,  108,  407,  103,   81,  101,   81,  104,
-      102,  110,  109,  125,  105,   86,   81,   87,   88,  111,
+       63,   63,   63,   63,    8,    8,    8,    8,   67,   70,
+       72,   74,   74,   74,   74,   74,   74,   93,  128,   75,
+       95,   96,   73,   71,   76,   97,   68,   98,  123,  157,
+       94,   99,  124,  129,   77,   78,  130,   79,   79,   79,
+       79,   79,   80,   78,  100,   83,   83,   83,   83,   83,
+       83,   85,   81,  216,  101,  217,   82,  102,  116,  103,
+       81,  147,  420,  104,   81,  125,  117,   86,  105,   87,
 
-      106,  112,  119,  116,  113,   82,  126,  132,  128,  120,
-      114,  117,  229,  230,  133,  134,  121,  137,  204,  148,
-      138,  143,  118,  129,  135,  144,  130,  136,  139,  216,
-      406,  217,  405,  205,  145,  140,   74,   74,   74,   74,
-       74,   74,  153,  153,  153,  153,  153,  153,  396,  184,
-      404,  151,  185,  186,  190,  211,  187,  154,  188,  397,
-      403,  151,  191,  212,  402,  401,   78,  154,   79,   79,
-       79,   79,   79,   80,   78,  400,   80,   80,   80,   80,
-       80,   80,  399,   81,  156,  156,  156,  156,  156,  156,
-      155,   81,  155,   81,  398,  156,  156,  156,  156,  156,
+       88,  107,   81,  108,  106,  110,  141,  118,  126,  119,
+      142,   82,  109,  111,  132,  112,  120,  137,  113,  190,
+      138,  133,  134,  121,  114,  143,  419,  191,  139,  144,
+      148,  135,  229,  230,  136,  140,  204,  418,  145,   74,
+       74,   74,   74,   74,   74,  153,  153,  153,  153,  153,
+      153,  205,  184,  417,  151,  185,  186,  211,  416,  187,
+      154,  188,  254,  255,  256,  212,  151,  280,  281,  282,
+      415,   78,  154,   79,   79,   79,   79,   79,   80,   78,
+      414,   80,   80,   80,   80,   80,   80,  275,   81,  156,
+      156,  156,  156,  156,  156,  276,   81,  155,  413,  155,
 
-      156,   81,   78,  395,   83,   83,   83,   83,   83,   83,
-      254,  255,  256,  394,  393,  219,  392,  219,  275,   81,
-      220,  220,  220,  220,  220,  220,  276,  391,  390,   81,
-      153,  153,  153,  153,  153,  153,  280,  281,  282,  389,
-      388,  221,  387,  221,  386,  154,  222,  222,  222,  222,
-      222,  222,  288,  289,  290,  154,  156,  156,  156,  156,
-      156,  156,  220,  220,  220,  220,  220,  220,  220,  220,
-      220,  220,  220,  220,  222,  222,  222,  222,  222,  222,
-      222,  222,  222,  222,  222,  222,  297,  298,  299,  304,
-      305,  306,  308,  309,  310,  316,  317,  318,   58,   58,
+       81,  412,  156,  156,  156,  156,  156,  156,   81,   78,
+      396,   83,   83,   83,   83,   83,   83,  288,  289,  290,
+      411,  397,  219,  398,  219,  410,   81,  220,  220,  220,
+      220,  220,  220,  297,  298,  299,  409,  408,   81,  153,
+      153,  153,  153,  153,  153,  304,  305,  306,  407,  406,
+      221,  405,  221,  404,  154,  222,  222,  222,  222,  222,
+      222,  308,  309,  310,  403,  402,  154,  156,  156,  156,
+      156,  156,  156,  220,  220,  220,  220,  220,  220,  220,
+      220,  220,  220,  220,  220,  222,  222,  222,  222,  222,
+      222,  222,  222,  222,  222,  222,  222,  316,  317,  318,
 
-       58,   58,   92,   92,  150,  150,  152,  385,  152,  152,
-      384,  383,  382,  381,  380,  379,  378,  377,  376,  375,
-      374,  373,  372,  371,  370,  369,  368,  367,  366,  365,
-      364,  363,  362,  361,  360,  359,  358,  357,  356,  355,
-      354,  353,  352,  351,  350,  349,  348,  347,  346,  345,
-      344,  343,  342,  341,  340,  339,  338,  337,  336,  335,
-      334,  333,  332,  331,  330,  329,  328,  327,  326,  325,
-      324,  323,  322,  321,  320,  319,  315,  314,  313,  312,
-      311,  307,  303,  302,  301,  300,  296,  295,  294,  293,
-      292,  291,  287,  286,  285,  284,  283,  279,  278,  277,
+       58,   58,   58,   58,   92,   92,  150,  150,  152,  401,
+      152,  152,  400,  399,  395,  394,  393,  392,  391,  390,
+      389,  388,  387,  386,  385,  384,  383,  382,  381,  380,
+      379,  378,  377,  376,  375,  374,  373,  372,  371,  370,
+      369,  368,  367,  366,  365,  364,  363,  362,  361,  360,
+      359,  358,  357,  356,  355,  354,  353,  352,  351,  350,
+      349,  348,  347,  346,  345,  344,  343,  342,  341,  340,
+      339,  338,  337,  336,  335,  334,  333,  332,  331,  330,
+      329,  328,  327,  326,  325,  324,  323,  322,  321,  320,
+      319,  315,  314,  313,  312,  311,  307,  303,  302,  301,
 
-      274,  273,  272,  271,  270,  269,  268,  267,  266,  265,
-      264,  263,  262,  261,  260,  259,  258,  257,  253,  252,
-      251,  250,  249,  248,  247,  246,  245,  244,  243,  242,
-      241,  240,  239,  238,  237,  236,  235,  234,  233,  232,
-      231,  228,  227,  226,  225,  224,  223,  218,  215,  214,
-      213,  210,  209,  208,  207,  206,  203,  202,  201,  200,
-      199,  198,  197,  196,  195,  194,  193,  192,  189,  183,
-      182,  181,  180,  179,  178,  177,  176,  175,  174,  173,
-      172,  171,  170,  169,  168,  167,  166,  165,  164,  163,
-      162,  161,  160,  159,  158,  149,  146,  131,  127,  122,
+      300,  296,  295,  294,  293,  292,  291,  287,  286,  285,
+      284,  283,  279,  278,  277,  274,  273,  272,  271,  270,
+      269,  268,  267,  266,  265,  264,  263,  262,  261,  260,
+      259,  258,  257,  253,  252,  251,  250,  249,  248,  247,
+      246,  245,  244,  243,  242,  241,  240,  239,  238,  237,
+      236,  235,  234,  233,  232,  231,  228,  227,  226,  225,
+      224,  223,  218,  215,  214,  213,  210,  209,  208,  207,
+      206,  203,  202,  201,  200,  199,  198,  197,  196,  195,
+      194,  193,  192,  189,  183,  182,  181,  180,  179,  178,
+      177,  176,  175,  174,  173,  172,  171,  170,  169,  168,
 
-      115,   89,   84,   69,   64,  410,    7,  410,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410
+      167,  166,  165,  164,  163,  162,  161,  160,  159,  158,
+      149,  146,  131,  127,  122,  115,   89,   84,   69,   64,
+      421,    7,  421,  421,  421,  421,  421,  421,  421,  421,
+      421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
+      421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
+      421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
+      421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
+      421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
+      421,  421,  421,  421,  421,  421,  421
     } ;
 
-static yyconst flex_int16_t yy_chk[671] =
+static yyconst flex_int16_t yy_chk[688] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -657,77 +663,79 @@
         1,    1,    1,    1,    1,    1,    1,    1,    1,    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,    5,    5,    5,    5,    5,    5,    5,    5,
+        1,    1,    1,    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,    5,    5,    5,    5,    5,    5,    5,
 
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         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,   33,  415,   21,   34,   34,   19,   17,
-       21,   35,   13,   35,   33,   44,  408,   35,   51,   44,
-       21,   22,   51,   22,   22,   22,   22,   22,   22,   23,
-      407,   23,   23,   23,   23,   23,   23,   36,   22,   26,
-       22,   38,   55,   38,  397,   37,   23,   36,   22,   37,
-       36,   39,   38,   45,   37,   26,   23,   26,   26,   39,
+        5,    5,    5,    5,    5,    5,    5,    5,   13,   17,
+       19,   20,   20,   20,   20,   20,   20,   33,   47,   21,
+       34,   34,   19,   17,   21,   35,   13,   35,   44,  426,
+       33,   35,   44,   47,   21,   22,   47,   22,   22,   22,
+       22,   22,   22,   23,   36,   23,   23,   23,   23,   23,
+       23,   26,   22,  145,   36,  145,   22,   36,   41,   37,
+       23,   55,  419,   37,   22,   45,   41,   26,   37,   26,
 
-       37,   39,   42,   41,   39,   22,   45,   49,   47,   42,
-       39,   41,  167,  167,   49,   49,   42,   50,  135,   55,
-       50,   52,   41,   47,   49,   52,   47,   49,   50,  145,
-      396,  145,  395,  135,   52,   50,   74,   74,   74,   74,
-       74,   74,   78,   78,   78,   78,   78,   78,  381,  120,
-      393,   74,  120,  120,  122,  141,  120,   78,  120,  381,
-      392,   74,  122,  141,  391,  388,   79,   78,   79,   79,
-       79,   79,   79,   79,   80,  387,   80,   80,   80,   80,
-       80,   80,  385,   79,  155,  155,  155,  155,  155,  155,
-       81,   80,   81,   79,  382,   81,   81,   81,   81,   81,
+       26,   38,   23,   38,   37,   39,   51,   41,   45,   42,
+       51,   22,   38,   39,   49,   39,   42,   50,   39,  122,
+       50,   49,   49,   42,   39,   52,  418,  122,   50,   52,
+       55,   49,  167,  167,   49,   50,  135,  417,   52,   74,
+       74,   74,   74,   74,   74,   78,   78,   78,   78,   78,
+       78,  135,  120,  416,   74,  120,  120,  141,  415,  120,
+       78,  120,  192,  192,  192,  141,   74,  215,  215,  215,
+      414,   79,   78,   79,   79,   79,   79,   79,   79,   80,
+      413,   80,   80,   80,   80,   80,   80,  211,   79,  155,
+      155,  155,  155,  155,  155,  211,   80,   81,  411,   81,
 
-       81,   80,   83,  380,   83,   83,   83,   83,   83,   83,
-      192,  192,  192,  379,  378,  151,  376,  151,  211,   83,
-      151,  151,  151,  151,  151,  151,  211,  375,  374,   83,
-      153,  153,  153,  153,  153,  153,  215,  215,  215,  371,
-      370,  154,  369,  154,  368,  153,  154,  154,  154,  154,
-      154,  154,  226,  226,  226,  153,  156,  156,  156,  156,
-      156,  156,  219,  219,  219,  219,  219,  219,  220,  220,
-      220,  220,  220,  220,  221,  221,  221,  221,  221,  221,
-      222,  222,  222,  222,  222,  222,  234,  234,  234,  241,
-      241,  241,  245,  245,  245,  251,  251,  251,  411,  411,
+       79,  410,   81,   81,   81,   81,   81,   81,   80,   83,
+      381,   83,   83,   83,   83,   83,   83,  226,  226,  226,
+      409,  381,  151,  381,  151,  408,   83,  151,  151,  151,
+      151,  151,  151,  234,  234,  234,  398,  397,   83,  153,
+      153,  153,  153,  153,  153,  241,  241,  241,  396,  395,
+      154,  393,  154,  392,  153,  154,  154,  154,  154,  154,
+      154,  245,  245,  245,  391,  388,  153,  156,  156,  156,
+      156,  156,  156,  219,  219,  219,  219,  219,  219,  220,
+      220,  220,  220,  220,  220,  221,  221,  221,  221,  221,
+      221,  222,  222,  222,  222,  222,  222,  251,  251,  251,
 
-      411,  411,  412,  412,  413,  413,  414,  367,  414,  414,
-      366,  365,  364,  359,  356,  353,  352,  351,  350,  349,
-      347,  345,  344,  343,  342,  340,  339,  337,  335,  334,
-      333,  332,  331,  330,  329,  327,  326,  325,  324,  323,
-      322,  321,  320,  319,  315,  314,  311,  300,  296,  295,
-      294,  293,  286,  285,  284,  279,  278,  277,  276,  275,
-      274,  271,  270,  269,  268,  267,  266,  265,  264,  263,
-      262,  261,  260,  259,  258,  257,  250,  249,  248,  247,
-      246,  244,  240,  239,  238,  237,  233,  232,  231,  230,
-      229,  228,  225,  223,  218,  217,  216,  214,  213,  212,
+      422,  422,  422,  422,  423,  423,  424,  424,  425,  387,
+      425,  425,  385,  382,  380,  379,  378,  376,  375,  374,
+      371,  370,  369,  368,  367,  366,  365,  364,  359,  356,
+      353,  352,  351,  350,  349,  347,  345,  344,  343,  342,
+      340,  339,  337,  335,  334,  333,  332,  331,  330,  329,
+      327,  326,  325,  324,  323,  322,  321,  320,  319,  315,
+      314,  311,  300,  296,  295,  294,  293,  286,  285,  284,
+      279,  278,  277,  276,  275,  274,  271,  270,  269,  268,
+      267,  266,  265,  264,  263,  262,  261,  260,  259,  258,
+      257,  250,  249,  248,  247,  246,  244,  240,  239,  238,
 
-      210,  209,  208,  207,  206,  205,  204,  203,  202,  201,
-      200,  199,  198,  197,  196,  195,  194,  193,  191,  190,
-      189,  188,  187,  186,  185,  184,  183,  182,  181,  180,
-      179,  177,  176,  175,  174,  173,  172,  171,  170,  169,
-      168,  166,  165,  164,  163,  162,  161,  146,  144,  143,
-      142,  140,  139,  138,  137,  136,  134,  133,  132,  131,
-      130,  129,  128,  127,  126,  125,  124,  123,  121,  118,
-      117,  116,  115,  114,  113,  112,  111,  110,  109,  108,
-      107,  106,  105,  104,  103,  102,  101,  100,   99,   98,
-       97,   96,   95,   91,   87,   60,   53,   48,   46,   43,
+      237,  233,  232,  231,  230,  229,  228,  225,  223,  218,
+      217,  216,  214,  213,  212,  210,  209,  208,  207,  206,
+      205,  204,  203,  202,  201,  200,  199,  198,  197,  196,
+      195,  194,  193,  191,  190,  189,  188,  187,  186,  185,
+      184,  183,  182,  181,  180,  179,  177,  176,  175,  174,
+      173,  172,  171,  170,  169,  168,  166,  165,  164,  163,
+      162,  161,  146,  144,  143,  142,  140,  139,  138,  137,
+      136,  134,  133,  132,  131,  130,  129,  128,  127,  126,
+      125,  124,  123,  121,  118,  117,  116,  115,  114,  113,
+      112,  111,  110,  109,  108,  107,  106,  105,  104,  103,
 
-       40,   27,   24,   16,   11,    7,  410,  410,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410
+      102,  101,  100,   99,   98,   97,   96,   95,   91,   87,
+       60,   53,   48,   46,   43,   40,   27,   24,   16,   11,
+        7,  421,  421,  421,  421,  421,  421,  421,  421,  421,
+      421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
+      421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
+      421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
+      421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
+      421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
+      421,  421,  421,  421,  421,  421,  421
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[146] =
+static yyconst flex_int32_t yy_rule_can_match_eol[147] =
     {   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, 
@@ -736,7 +744,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, 1, 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.
@@ -797,8 +805,8 @@
     size_t yy_buffer_stack_max; /**< capacity of stack. */
     YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
     char yy_hold_char;
-    int yy_n_chars;
-    int yyleng_r;
+    yy_size_t yy_n_chars;
+    yy_size_t yyleng_r;
     char *yy_c_buf_p;
     int yy_init;
     int yy_start;
@@ -851,7 +859,7 @@
 
 void yyset_out  (FILE * out_str ,yyscan_t yyscanner );
 
-int yyget_leng (yyscan_t yyscanner );
+yy_size_t yyget_leng (yyscan_t yyscanner );
 
 char *yyget_text (yyscan_t yyscanner );
 
@@ -920,7 +928,7 @@
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		int n; \
+		yy_size_t n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -1062,13 +1070,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 >= 411 )
+				if ( yy_current_state >= 422 )
 					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 != 410 );
+		while ( yy_current_state != 421 );
 		yy_cp = yyg->yy_last_accepting_cpos;
 		yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1285,11 +1293,11 @@
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return(STRUCT); }
+{ context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
+{ context->lexAfterType = true; return(STRUCT); }
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
@@ -1449,30 +1457,30 @@
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
+{ return reserved_word(yyscanner); }
+	YY_BREAK
+case 89:
+YY_RULE_SETUP
 {
    yylval->lex.string = NewPoolTString(yytext); 
    return check_type(yyscanner);
 }
 	YY_BREAK
-case 89:
-YY_RULE_SETUP
-{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
-	YY_BREAK
 case 90:
 YY_RULE_SETUP
 { yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-{ context->error(yylineno, "Invalid Octal number.", yytext, "", ""); context->recover(); return 0;}
+{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
-{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
+{ context->error(yylineno, "Invalid Octal number.", yytext, "", ""); context->recover(); return 0;}
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
-{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
+{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
@@ -1484,198 +1492,202 @@
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
-{  return(ADD_ASSIGN); }
+{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
-{  return(SUB_ASSIGN); }
+{  return(ADD_ASSIGN); }
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
-{  return(MUL_ASSIGN); }
+{  return(SUB_ASSIGN); }
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
-{  return(DIV_ASSIGN); }
+{  return(MUL_ASSIGN); }
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
-{  return(MOD_ASSIGN); }
+{  return(DIV_ASSIGN); }
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
-{  return(LEFT_ASSIGN); }
+{  return(MOD_ASSIGN); }
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
-{  return(RIGHT_ASSIGN); }
+{  return(LEFT_ASSIGN); }
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
-{  return(AND_ASSIGN); }
+{  return(RIGHT_ASSIGN); }
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
-{  return(XOR_ASSIGN); }
+{  return(AND_ASSIGN); }
 	YY_BREAK
 case 105:
 YY_RULE_SETUP
-{  return(OR_ASSIGN); }
+{  return(XOR_ASSIGN); }
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
-{  return(INC_OP); }
+{  return(OR_ASSIGN); }
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
-{  return(DEC_OP); }
+{  return(INC_OP); }
 	YY_BREAK
 case 108:
 YY_RULE_SETUP
-{  return(AND_OP); }
+{  return(DEC_OP); }
 	YY_BREAK
 case 109:
 YY_RULE_SETUP
-{  return(OR_OP); }
+{  return(AND_OP); }
 	YY_BREAK
 case 110:
 YY_RULE_SETUP
-{  return(XOR_OP); }
+{  return(OR_OP); }
 	YY_BREAK
 case 111:
 YY_RULE_SETUP
-{  return(LE_OP); }
+{  return(XOR_OP); }
 	YY_BREAK
 case 112:
 YY_RULE_SETUP
-{  return(GE_OP); }
+{  return(LE_OP); }
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
-{  return(EQ_OP); }
+{  return(GE_OP); }
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
-{  return(NE_OP); }
+{  return(EQ_OP); }
 	YY_BREAK
 case 115:
 YY_RULE_SETUP
-{  return(LEFT_OP); }
+{  return(NE_OP); }
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
-{  return(RIGHT_OP); }
+{  return(LEFT_OP); }
 	YY_BREAK
 case 117:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(SEMICOLON); }
+{  return(RIGHT_OP); }
 	YY_BREAK
 case 118:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(LEFT_BRACE); }
+{ context->lexAfterType = false; return(SEMICOLON); }
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
-{ return(RIGHT_BRACE); }
+{ context->lexAfterType = false; return(LEFT_BRACE); }
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
-{ if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
+{ return(RIGHT_BRACE); }
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
-{ return(COLON); }
+{ if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(EQUAL); }
+{ return(COLON); }
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
-{ context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
+{ context->lexAfterType = false; return(EQUAL); }
 	YY_BREAK
 case 124:
 YY_RULE_SETUP
-{ context->inTypeParen = false; return(RIGHT_PAREN); }
+{ context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
-{ return(LEFT_BRACKET); }
+{ context->inTypeParen = false; return(RIGHT_PAREN); }
 	YY_BREAK
 case 126:
 YY_RULE_SETUP
-{ return(RIGHT_BRACKET); }
+{ return(LEFT_BRACKET); }
 	YY_BREAK
 case 127:
 YY_RULE_SETUP
-{ BEGIN(FIELDS);  return(DOT); }
+{ return(RIGHT_BRACKET); }
 	YY_BREAK
 case 128:
 YY_RULE_SETUP
-{ return(BANG); }
+{ BEGIN(FIELDS);  return(DOT); }
 	YY_BREAK
 case 129:
 YY_RULE_SETUP
-{ return(DASH); }
+{ return(BANG); }
 	YY_BREAK
 case 130:
 YY_RULE_SETUP
-{ return(TILDE); }
+{ return(DASH); }
 	YY_BREAK
 case 131:
 YY_RULE_SETUP
-{ return(PLUS); }
+{ return(TILDE); }
 	YY_BREAK
 case 132:
 YY_RULE_SETUP
-{ return(STAR); }
+{ return(PLUS); }
 	YY_BREAK
 case 133:
 YY_RULE_SETUP
-{ return(SLASH); }
+{ return(STAR); }
 	YY_BREAK
 case 134:
 YY_RULE_SETUP
-{ return(PERCENT); }
+{ return(SLASH); }
 	YY_BREAK
 case 135:
 YY_RULE_SETUP
-{ return(LEFT_ANGLE); }
+{ return(PERCENT); }
 	YY_BREAK
 case 136:
 YY_RULE_SETUP
-{ return(RIGHT_ANGLE); }
+{ return(LEFT_ANGLE); }
 	YY_BREAK
 case 137:
 YY_RULE_SETUP
-{ return(VERTICAL_BAR); }
+{ return(RIGHT_ANGLE); }
 	YY_BREAK
 case 138:
 YY_RULE_SETUP
-{ return(CARET); }
+{ return(VERTICAL_BAR); }
 	YY_BREAK
 case 139:
 YY_RULE_SETUP
-{ return(AMPERSAND); }
+{ return(CARET); }
 	YY_BREAK
 case 140:
 YY_RULE_SETUP
-{ return(QUESTION); }
+{ return(AMPERSAND); }
 	YY_BREAK
 case 141:
 YY_RULE_SETUP
+{ return(QUESTION); }
+	YY_BREAK
+case 142:
+YY_RULE_SETUP
 { 
     BEGIN(INITIAL);
     yylval->lex.string = NewPoolTString(yytext); 
     return FIELD_SELECTION;
 }
 	YY_BREAK
-case 142:
+case 143:
 YY_RULE_SETUP
 {}
 	YY_BREAK
-case 143:
-/* rule 143 can match eol */
+case 144:
+/* rule 144 can match eol */
 YY_RULE_SETUP
 {  }
 	YY_BREAK
@@ -1684,11 +1696,11 @@
 case YY_STATE_EOF(FIELDS):
 { context->AfterEOF = true; yyterminate(); }
 	YY_BREAK
-case 144:
+case 145:
 YY_RULE_SETUP
 { context->warning(yylineno, "Unknown char", yytext, ""); return 0; }
 	YY_BREAK
-case 145:
+case 146:
 YY_RULE_SETUP
 ECHO;
 	YY_BREAK
@@ -1877,7 +1889,7 @@
 
 	else
 		{
-			int num_to_read =
+			yy_size_t num_to_read =
 			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
 		while ( num_to_read <= 0 )
@@ -1891,7 +1903,7 @@
 
 			if ( b->yy_is_our_buffer )
 				{
-				int new_size = b->yy_buf_size * 2;
+				yy_size_t new_size = b->yy_buf_size * 2;
 
 				if ( new_size <= 0 )
 					b->yy_buf_size += b->yy_buf_size / 8;
@@ -1922,7 +1934,7 @@
 
 		/* Read in more data. */
 		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-			yyg->yy_n_chars, (size_t) num_to_read );
+			yyg->yy_n_chars, num_to_read );
 
 		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
 		}
@@ -1984,7 +1996,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 >= 411 )
+			if ( yy_current_state >= 422 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2013,11 +2025,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 >= 411 )
+		if ( yy_current_state >= 422 )
 			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 == 410);
+	yy_is_jam = (yy_current_state == 421);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2047,7 +2059,7 @@
 
 		else
 			{ /* need more input */
-			int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
+			yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
 			++yyg->yy_c_buf_p;
 
 			switch ( yy_get_next_buffer( yyscanner ) )
@@ -2071,7 +2083,7 @@
 				case EOB_ACT_END_OF_FILE:
 					{
 					if ( yywrap(yyscanner ) )
-						return EOF;
+						return 0;
 
 					if ( ! yyg->yy_did_buffer_switch_on_eof )
 						YY_NEW_FILE;
@@ -2334,7 +2346,7 @@
  */
 static void yyensure_buffer_stack (yyscan_t yyscanner)
 {
-	int num_to_alloc;
+	yy_size_t num_to_alloc;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
 	if (!yyg->yy_buffer_stack) {
@@ -2432,12 +2444,11 @@
  * @param yyscanner The scanner object.
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len , yyscan_t yyscanner)
+YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len , yyscan_t yyscanner)
 {
 	YY_BUFFER_STATE b;
 	char *buf;
-	yy_size_t n;
-	int i;
+	yy_size_t n, i;
     
 	/* Get memory for full buffer, including space for trailing EOB's. */
 	n = _yybytes_len + 2;
@@ -2587,7 +2598,7 @@
 /** Get the length of the current token.
  * @param yyscanner The scanner object.
  */
-int yyget_leng  (yyscan_t yyscanner)
+yy_size_t yyget_leng  (yyscan_t yyscanner)
 {
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
     return yyleng;
diff --git a/src/compiler/glslang_tab.cpp b/src/compiler/glslang_tab.cpp
index 47ca2ee..e1f033e 100644
--- a/src/compiler/glslang_tab.cpp
+++ b/src/compiler/glslang_tab.cpp
@@ -106,57 +106,58 @@
      WHILE = 295,
      SAMPLER2D = 296,
      SAMPLERCUBE = 297,
-     IDENTIFIER = 298,
-     TYPE_NAME = 299,
-     FLOATCONSTANT = 300,
-     INTCONSTANT = 301,
-     BOOLCONSTANT = 302,
-     FIELD_SELECTION = 303,
-     LEFT_OP = 304,
-     RIGHT_OP = 305,
-     INC_OP = 306,
-     DEC_OP = 307,
-     LE_OP = 308,
-     GE_OP = 309,
-     EQ_OP = 310,
-     NE_OP = 311,
-     AND_OP = 312,
-     OR_OP = 313,
-     XOR_OP = 314,
-     MUL_ASSIGN = 315,
-     DIV_ASSIGN = 316,
-     ADD_ASSIGN = 317,
-     MOD_ASSIGN = 318,
-     LEFT_ASSIGN = 319,
-     RIGHT_ASSIGN = 320,
-     AND_ASSIGN = 321,
-     XOR_ASSIGN = 322,
-     OR_ASSIGN = 323,
-     SUB_ASSIGN = 324,
-     LEFT_PAREN = 325,
-     RIGHT_PAREN = 326,
-     LEFT_BRACKET = 327,
-     RIGHT_BRACKET = 328,
-     LEFT_BRACE = 329,
-     RIGHT_BRACE = 330,
-     DOT = 331,
-     COMMA = 332,
-     COLON = 333,
-     EQUAL = 334,
-     SEMICOLON = 335,
-     BANG = 336,
-     DASH = 337,
-     TILDE = 338,
-     PLUS = 339,
-     STAR = 340,
-     SLASH = 341,
-     PERCENT = 342,
-     LEFT_ANGLE = 343,
-     RIGHT_ANGLE = 344,
-     VERTICAL_BAR = 345,
-     CARET = 346,
-     AMPERSAND = 347,
-     QUESTION = 348
+     SAMPLER_EXTERNAL_OES = 298,
+     IDENTIFIER = 299,
+     TYPE_NAME = 300,
+     FLOATCONSTANT = 301,
+     INTCONSTANT = 302,
+     BOOLCONSTANT = 303,
+     FIELD_SELECTION = 304,
+     LEFT_OP = 305,
+     RIGHT_OP = 306,
+     INC_OP = 307,
+     DEC_OP = 308,
+     LE_OP = 309,
+     GE_OP = 310,
+     EQ_OP = 311,
+     NE_OP = 312,
+     AND_OP = 313,
+     OR_OP = 314,
+     XOR_OP = 315,
+     MUL_ASSIGN = 316,
+     DIV_ASSIGN = 317,
+     ADD_ASSIGN = 318,
+     MOD_ASSIGN = 319,
+     LEFT_ASSIGN = 320,
+     RIGHT_ASSIGN = 321,
+     AND_ASSIGN = 322,
+     XOR_ASSIGN = 323,
+     OR_ASSIGN = 324,
+     SUB_ASSIGN = 325,
+     LEFT_PAREN = 326,
+     RIGHT_PAREN = 327,
+     LEFT_BRACKET = 328,
+     RIGHT_BRACKET = 329,
+     LEFT_BRACE = 330,
+     RIGHT_BRACE = 331,
+     DOT = 332,
+     COMMA = 333,
+     COLON = 334,
+     EQUAL = 335,
+     SEMICOLON = 336,
+     BANG = 337,
+     DASH = 338,
+     TILDE = 339,
+     PLUS = 340,
+     STAR = 341,
+     SLASH = 342,
+     PERCENT = 343,
+     LEFT_ANGLE = 344,
+     RIGHT_ANGLE = 345,
+     VERTICAL_BAR = 346,
+     CARET = 347,
+     AMPERSAND = 348,
+     QUESTION = 349
    };
 #endif
 /* Tokens.  */
@@ -200,57 +201,58 @@
 #define WHILE 295
 #define SAMPLER2D 296
 #define SAMPLERCUBE 297
-#define IDENTIFIER 298
-#define TYPE_NAME 299
-#define FLOATCONSTANT 300
-#define INTCONSTANT 301
-#define BOOLCONSTANT 302
-#define FIELD_SELECTION 303
-#define LEFT_OP 304
-#define RIGHT_OP 305
-#define INC_OP 306
-#define DEC_OP 307
-#define LE_OP 308
-#define GE_OP 309
-#define EQ_OP 310
-#define NE_OP 311
-#define AND_OP 312
-#define OR_OP 313
-#define XOR_OP 314
-#define MUL_ASSIGN 315
-#define DIV_ASSIGN 316
-#define ADD_ASSIGN 317
-#define MOD_ASSIGN 318
-#define LEFT_ASSIGN 319
-#define RIGHT_ASSIGN 320
-#define AND_ASSIGN 321
-#define XOR_ASSIGN 322
-#define OR_ASSIGN 323
-#define SUB_ASSIGN 324
-#define LEFT_PAREN 325
-#define RIGHT_PAREN 326
-#define LEFT_BRACKET 327
-#define RIGHT_BRACKET 328
-#define LEFT_BRACE 329
-#define RIGHT_BRACE 330
-#define DOT 331
-#define COMMA 332
-#define COLON 333
-#define EQUAL 334
-#define SEMICOLON 335
-#define BANG 336
-#define DASH 337
-#define TILDE 338
-#define PLUS 339
-#define STAR 340
-#define SLASH 341
-#define PERCENT 342
-#define LEFT_ANGLE 343
-#define RIGHT_ANGLE 344
-#define VERTICAL_BAR 345
-#define CARET 346
-#define AMPERSAND 347
-#define QUESTION 348
+#define SAMPLER_EXTERNAL_OES 298
+#define IDENTIFIER 299
+#define TYPE_NAME 300
+#define FLOATCONSTANT 301
+#define INTCONSTANT 302
+#define BOOLCONSTANT 303
+#define FIELD_SELECTION 304
+#define LEFT_OP 305
+#define RIGHT_OP 306
+#define INC_OP 307
+#define DEC_OP 308
+#define LE_OP 309
+#define GE_OP 310
+#define EQ_OP 311
+#define NE_OP 312
+#define AND_OP 313
+#define OR_OP 314
+#define XOR_OP 315
+#define MUL_ASSIGN 316
+#define DIV_ASSIGN 317
+#define ADD_ASSIGN 318
+#define MOD_ASSIGN 319
+#define LEFT_ASSIGN 320
+#define RIGHT_ASSIGN 321
+#define AND_ASSIGN 322
+#define XOR_ASSIGN 323
+#define OR_ASSIGN 324
+#define SUB_ASSIGN 325
+#define LEFT_PAREN 326
+#define RIGHT_PAREN 327
+#define LEFT_BRACKET 328
+#define RIGHT_BRACKET 329
+#define LEFT_BRACE 330
+#define RIGHT_BRACE 331
+#define DOT 332
+#define COMMA 333
+#define COLON 334
+#define EQUAL 335
+#define SEMICOLON 336
+#define BANG 337
+#define DASH 338
+#define TILDE 339
+#define PLUS 340
+#define STAR 341
+#define SLASH 342
+#define PERCENT 343
+#define LEFT_ANGLE 344
+#define RIGHT_ANGLE 345
+#define VERTICAL_BAR 346
+#define CARET 347
+#define AMPERSAND 348
+#define QUESTION 349
 
 
 
@@ -578,22 +580,22 @@
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  69
+#define YYFINAL  70
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1362
+#define YYLAST   1381
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  94
+#define YYNTOKENS  95
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  78
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  193
+#define YYNRULES  194
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  296
+#define YYNSTATES  297
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   348
+#define YYMAXUTOK   349
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -635,7 +637,7 @@
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94
 };
 
 #if YYDEBUG
@@ -656,74 +658,74 @@
      298,   303,   306,   308,   311,   313,   315,   317,   320,   322,
      324,   327,   329,   331,   333,   335,   340,   342,   344,   346,
      348,   350,   352,   354,   356,   358,   360,   362,   364,   366,
-     368,   370,   372,   374,   376,   378,   380,   386,   391,   393,
-     396,   400,   402,   406,   408,   413,   415,   417,   419,   421,
-     423,   425,   427,   429,   431,   434,   435,   436,   442,   444,
-     446,   449,   453,   455,   458,   460,   463,   469,   473,   475,
-     477,   482,   483,   490,   491,   500,   501,   509,   511,   513,
-     515,   516,   519,   523,   526,   529,   532,   536,   539,   541,
-     544,   546,   548,   549
+     368,   370,   372,   374,   376,   378,   380,   382,   388,   393,
+     395,   398,   402,   404,   408,   410,   415,   417,   419,   421,
+     423,   425,   427,   429,   431,   433,   436,   437,   438,   444,
+     446,   448,   451,   455,   457,   460,   462,   465,   471,   475,
+     477,   479,   484,   485,   492,   493,   502,   503,   511,   513,
+     515,   517,   518,   521,   525,   528,   531,   534,   538,   541,
+     543,   546,   548,   550,   551
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     168,     0,    -1,    43,    -1,    95,    -1,    46,    -1,    45,
-      -1,    47,    -1,    70,   122,    71,    -1,    96,    -1,    97,
-      72,    98,    73,    -1,    99,    -1,    97,    76,    48,    -1,
-      97,    51,    -1,    97,    52,    -1,   122,    -1,   100,    -1,
-     101,    -1,    97,    76,   101,    -1,   103,    71,    -1,   102,
-      71,    -1,   104,    39,    -1,   104,    -1,   104,   120,    -1,
-     103,    77,   120,    -1,   105,    70,    -1,   140,    -1,    43,
-      -1,    48,    -1,    97,    -1,    51,   106,    -1,    52,   106,
-      -1,   107,   106,    -1,    84,    -1,    82,    -1,    81,    -1,
-     106,    -1,   108,    85,   106,    -1,   108,    86,   106,    -1,
-     108,    -1,   109,    84,   108,    -1,   109,    82,   108,    -1,
-     109,    -1,   110,    -1,   111,    88,   110,    -1,   111,    89,
-     110,    -1,   111,    53,   110,    -1,   111,    54,   110,    -1,
-     111,    -1,   112,    55,   111,    -1,   112,    56,   111,    -1,
-     112,    -1,   113,    -1,   114,    -1,   115,    -1,   116,    57,
-     115,    -1,   116,    -1,   117,    59,   116,    -1,   117,    -1,
-     118,    58,   117,    -1,   118,    -1,   118,    93,   122,    78,
-     120,    -1,   119,    -1,   106,   121,   120,    -1,    79,    -1,
-      60,    -1,    61,    -1,    62,    -1,    69,    -1,   120,    -1,
-     122,    77,   120,    -1,   119,    -1,   125,    80,    -1,   133,
-      80,    -1,     7,   138,   139,    80,    -1,   126,    71,    -1,
-     128,    -1,   127,    -1,   128,   130,    -1,   127,    77,   130,
-      -1,   135,    43,    70,    -1,   137,    43,    -1,   137,    43,
-      72,   123,    73,    -1,   136,   131,   129,    -1,   131,   129,
-      -1,   136,   131,   132,    -1,   131,   132,    -1,    -1,    33,
-      -1,    34,    -1,    35,    -1,   137,    -1,   134,    -1,   133,
-      77,    43,    -1,   133,    77,    43,    72,    73,    -1,   133,
-      77,    43,    72,   123,    73,    -1,   133,    77,    43,    79,
-     146,    -1,   135,    -1,   135,    43,    -1,   135,    43,    72,
-      73,    -1,   135,    43,    72,   123,    73,    -1,   135,    43,
-      79,   146,    -1,     3,    43,    -1,   137,    -1,   136,   137,
+     169,     0,    -1,    44,    -1,    96,    -1,    47,    -1,    46,
+      -1,    48,    -1,    71,   123,    72,    -1,    97,    -1,    98,
+      73,    99,    74,    -1,   100,    -1,    98,    77,    49,    -1,
+      98,    52,    -1,    98,    53,    -1,   123,    -1,   101,    -1,
+     102,    -1,    98,    77,   102,    -1,   104,    72,    -1,   103,
+      72,    -1,   105,    39,    -1,   105,    -1,   105,   121,    -1,
+     104,    78,   121,    -1,   106,    71,    -1,   141,    -1,    44,
+      -1,    49,    -1,    98,    -1,    52,   107,    -1,    53,   107,
+      -1,   108,   107,    -1,    85,    -1,    83,    -1,    82,    -1,
+     107,    -1,   109,    86,   107,    -1,   109,    87,   107,    -1,
+     109,    -1,   110,    85,   109,    -1,   110,    83,   109,    -1,
+     110,    -1,   111,    -1,   112,    89,   111,    -1,   112,    90,
+     111,    -1,   112,    54,   111,    -1,   112,    55,   111,    -1,
+     112,    -1,   113,    56,   112,    -1,   113,    57,   112,    -1,
+     113,    -1,   114,    -1,   115,    -1,   116,    -1,   117,    58,
+     116,    -1,   117,    -1,   118,    60,   117,    -1,   118,    -1,
+     119,    59,   118,    -1,   119,    -1,   119,    94,   123,    79,
+     121,    -1,   120,    -1,   107,   122,   121,    -1,    80,    -1,
+      61,    -1,    62,    -1,    63,    -1,    70,    -1,   121,    -1,
+     123,    78,   121,    -1,   120,    -1,   126,    81,    -1,   134,
+      81,    -1,     7,   139,   140,    81,    -1,   127,    72,    -1,
+     129,    -1,   128,    -1,   129,   131,    -1,   128,    78,   131,
+      -1,   136,    44,    71,    -1,   138,    44,    -1,   138,    44,
+      73,   124,    74,    -1,   137,   132,   130,    -1,   132,   130,
+      -1,   137,   132,   133,    -1,   132,   133,    -1,    -1,    33,
+      -1,    34,    -1,    35,    -1,   138,    -1,   135,    -1,   134,
+      78,    44,    -1,   134,    78,    44,    73,    74,    -1,   134,
+      78,    44,    73,   124,    74,    -1,   134,    78,    44,    80,
+     147,    -1,   136,    -1,   136,    44,    -1,   136,    44,    73,
+      74,    -1,   136,    44,    73,   124,    74,    -1,   136,    44,
+      80,   147,    -1,     3,    44,    -1,   138,    -1,   137,   138,
       -1,     9,    -1,     8,    -1,    37,    -1,     3,    37,    -1,
-      36,    -1,   139,    -1,   138,   139,    -1,     4,    -1,     5,
-      -1,     6,    -1,   140,    -1,   140,    72,   123,    73,    -1,
+      36,    -1,   140,    -1,   139,   140,    -1,     4,    -1,     5,
+      -1,     6,    -1,   141,    -1,   141,    73,   124,    74,    -1,
       39,    -1,    11,    -1,    12,    -1,    10,    -1,    27,    -1,
       28,    -1,    29,    -1,    21,    -1,    22,    -1,    23,    -1,
       24,    -1,    25,    -1,    26,    -1,    30,    -1,    31,    -1,
-      32,    -1,    41,    -1,    42,    -1,   141,    -1,    44,    -1,
-      38,    43,    74,   142,    75,    -1,    38,    74,   142,    75,
-      -1,   143,    -1,   142,   143,    -1,   137,   144,    80,    -1,
-     145,    -1,   144,    77,   145,    -1,    43,    -1,    43,    72,
-     123,    73,    -1,   120,    -1,   124,    -1,   150,    -1,   149,
-      -1,   147,    -1,   156,    -1,   157,    -1,   160,    -1,   167,
-      -1,    74,    75,    -1,    -1,    -1,    74,   151,   155,   152,
-      75,    -1,   154,    -1,   149,    -1,    74,    75,    -1,    74,
-     155,    75,    -1,   148,    -1,   155,   148,    -1,    80,    -1,
-     122,    80,    -1,    18,    70,   122,    71,   158,    -1,   148,
-      16,   148,    -1,   148,    -1,   122,    -1,   135,    43,    79,
-     146,    -1,    -1,    40,    70,   161,   159,    71,   153,    -1,
-      -1,    15,   162,   148,    40,    70,   122,    71,    80,    -1,
-      -1,    17,    70,   163,   164,   166,    71,   153,    -1,   156,
-      -1,   147,    -1,   159,    -1,    -1,   165,    80,    -1,   165,
-      80,   122,    -1,    14,    80,    -1,    13,    80,    -1,    20,
-      80,    -1,    20,   122,    80,    -1,    19,    80,    -1,   169,
-      -1,   168,   169,    -1,   170,    -1,   124,    -1,    -1,   125,
-     171,   154,    -1
+      32,    -1,    41,    -1,    42,    -1,    43,    -1,   142,    -1,
+      45,    -1,    38,    44,    75,   143,    76,    -1,    38,    75,
+     143,    76,    -1,   144,    -1,   143,   144,    -1,   138,   145,
+      81,    -1,   146,    -1,   145,    78,   146,    -1,    44,    -1,
+      44,    73,   124,    74,    -1,   121,    -1,   125,    -1,   151,
+      -1,   150,    -1,   148,    -1,   157,    -1,   158,    -1,   161,
+      -1,   168,    -1,    75,    76,    -1,    -1,    -1,    75,   152,
+     156,   153,    76,    -1,   155,    -1,   150,    -1,    75,    76,
+      -1,    75,   156,    76,    -1,   149,    -1,   156,   149,    -1,
+      81,    -1,   123,    81,    -1,    18,    71,   123,    72,   159,
+      -1,   149,    16,   149,    -1,   149,    -1,   123,    -1,   136,
+      44,    80,   147,    -1,    -1,    40,    71,   162,   160,    72,
+     154,    -1,    -1,    15,   163,   149,    40,    71,   123,    72,
+      81,    -1,    -1,    17,    71,   164,   165,   167,    72,   154,
+      -1,   157,    -1,   148,    -1,   160,    -1,    -1,   166,    81,
+      -1,   166,    81,   123,    -1,    14,    81,    -1,    13,    81,
+      -1,    20,    81,    -1,    20,   123,    81,    -1,    19,    81,
+      -1,   170,    -1,   169,   170,    -1,   171,    -1,   125,    -1,
+      -1,   126,   172,   155,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -742,13 +744,13 @@
     1316,  1336,  1412,  1421,  1444,  1447,  1453,  1461,  1469,  1477,
     1487,  1494,  1497,  1500,  1506,  1509,  1524,  1528,  1532,  1536,
     1545,  1550,  1555,  1560,  1565,  1570,  1575,  1580,  1585,  1590,
-    1596,  1602,  1608,  1613,  1618,  1623,  1636,  1649,  1657,  1660,
-    1675,  1707,  1711,  1717,  1725,  1741,  1745,  1749,  1750,  1756,
-    1757,  1758,  1759,  1760,  1764,  1765,  1765,  1765,  1775,  1776,
-    1781,  1784,  1794,  1797,  1803,  1804,  1808,  1816,  1820,  1830,
-    1835,  1852,  1852,  1857,  1857,  1864,  1864,  1872,  1875,  1881,
-    1884,  1890,  1894,  1901,  1908,  1915,  1922,  1933,  1942,  1946,
-    1953,  1956,  1962,  1962
+    1596,  1602,  1608,  1613,  1618,  1627,  1632,  1645,  1658,  1666,
+    1669,  1684,  1716,  1720,  1726,  1734,  1750,  1754,  1758,  1759,
+    1765,  1766,  1767,  1768,  1769,  1773,  1774,  1774,  1774,  1784,
+    1785,  1790,  1793,  1803,  1806,  1812,  1813,  1817,  1825,  1829,
+    1839,  1844,  1861,  1861,  1866,  1866,  1873,  1873,  1881,  1884,
+    1890,  1893,  1899,  1903,  1910,  1917,  1924,  1931,  1942,  1951,
+    1955,  1962,  1965,  1971,  1971
 };
 #endif
 
@@ -764,12 +766,12 @@
   "BVEC4", "IVEC2", "IVEC3", "IVEC4", "VEC2", "VEC3", "VEC4", "MATRIX2",
   "MATRIX3", "MATRIX4", "IN_QUAL", "OUT_QUAL", "INOUT_QUAL", "UNIFORM",
   "VARYING", "STRUCT", "VOID_TYPE", "WHILE", "SAMPLER2D", "SAMPLERCUBE",
-  "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",
+  "SAMPLER_EXTERNAL_OES", "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",
   "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",
@@ -819,33 +821,33 @@
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348
+     345,   346,   347,   348,   349
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    94,    95,    96,    96,    96,    96,    96,    97,    97,
-      97,    97,    97,    97,    98,    99,   100,   100,   101,   101,
-     102,   102,   103,   103,   104,   105,   105,   105,   106,   106,
-     106,   106,   107,   107,   107,   108,   108,   108,   109,   109,
-     109,   110,   111,   111,   111,   111,   111,   112,   112,   112,
-     113,   114,   115,   116,   116,   117,   117,   118,   118,   119,
-     119,   120,   120,   121,   121,   121,   121,   121,   122,   122,
-     123,   124,   124,   124,   125,   126,   126,   127,   127,   128,
-     129,   129,   130,   130,   130,   130,   131,   131,   131,   131,
-     132,   133,   133,   133,   133,   133,   134,   134,   134,   134,
-     134,   134,   135,   135,   136,   136,   136,   136,   136,   137,
-     137,   138,   138,   138,   139,   139,   140,   140,   140,   140,
-     140,   140,   140,   140,   140,   140,   140,   140,   140,   140,
-     140,   140,   140,   140,   140,   140,   141,   141,   142,   142,
-     143,   144,   144,   145,   145,   146,   147,   148,   148,   149,
-     149,   149,   149,   149,   150,   151,   152,   150,   153,   153,
-     154,   154,   155,   155,   156,   156,   157,   158,   158,   159,
-     159,   161,   160,   162,   160,   163,   160,   164,   164,   165,
-     165,   166,   166,   167,   167,   167,   167,   167,   168,   168,
-     169,   169,   171,   170
+       0,    95,    96,    97,    97,    97,    97,    97,    98,    98,
+      98,    98,    98,    98,    99,   100,   101,   101,   102,   102,
+     103,   103,   104,   104,   105,   106,   106,   106,   107,   107,
+     107,   107,   108,   108,   108,   109,   109,   109,   110,   110,
+     110,   111,   112,   112,   112,   112,   112,   113,   113,   113,
+     114,   115,   116,   117,   117,   118,   118,   119,   119,   120,
+     120,   121,   121,   122,   122,   122,   122,   122,   123,   123,
+     124,   125,   125,   125,   126,   127,   127,   128,   128,   129,
+     130,   130,   131,   131,   131,   131,   132,   132,   132,   132,
+     133,   134,   134,   134,   134,   134,   135,   135,   135,   135,
+     135,   135,   136,   136,   137,   137,   137,   137,   137,   138,
+     138,   139,   139,   139,   140,   140,   141,   141,   141,   141,
+     141,   141,   141,   141,   141,   141,   141,   141,   141,   141,
+     141,   141,   141,   141,   141,   141,   141,   142,   142,   143,
+     143,   144,   145,   145,   146,   146,   147,   148,   149,   149,
+     150,   150,   150,   150,   150,   151,   152,   153,   151,   154,
+     154,   155,   155,   156,   156,   157,   157,   158,   159,   159,
+     160,   160,   162,   161,   163,   161,   164,   161,   165,   165,
+     166,   166,   167,   167,   168,   168,   168,   168,   168,   169,
+     169,   170,   170,   172,   171
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -864,13 +866,13 @@
        4,     2,     1,     2,     1,     1,     1,     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,     5,     4,     1,     2,
-       3,     1,     3,     1,     4,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     2,     0,     0,     5,     1,     1,
-       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,     1,     1,     1,     1,     5,     4,     1,
+       2,     3,     1,     3,     1,     4,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     2,     0,     0,     5,     1,
+       1,     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 rule to reduce with in state
@@ -880,97 +882,97 @@
 {
        0,     0,   111,   112,   113,     0,   105,   104,   119,   117,
      118,   123,   124,   125,   126,   127,   128,   120,   121,   122,
-     129,   130,   131,   108,   106,     0,   116,   132,   133,   135,
-     191,   192,     0,    76,    86,     0,    91,    96,     0,   102,
-       0,   109,   114,   134,     0,   188,   190,   107,   101,     0,
-       0,     0,    71,     0,    74,    86,     0,    87,    88,    89,
-      77,     0,    86,     0,    72,    97,   103,   110,     0,     1,
-     189,     0,     0,     0,     0,   138,     0,   193,    78,    83,
-      85,    90,     0,    92,    79,     0,     0,     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,    73,     0,   143,     0,   141,   137,
-     139,     0,     0,   173,     0,     0,     0,     0,     0,   155,
-     160,   164,    35,    61,    68,     0,   146,     0,   114,   149,
-     162,   148,   147,     0,   150,   151,   152,   153,    80,    82,
-      84,     0,     0,    98,     0,   145,   100,    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,   115,   136,     0,     0,   140,
-     184,   183,     0,   175,     0,   187,   185,     0,   171,   154,
-       0,    64,    65,    66,    67,    63,     0,     0,   165,   161,
-     163,     0,    93,     0,    95,    99,     7,     0,    14,    26,
-      11,    17,    23,    36,    37,    40,    39,    45,    46,    43,
-      44,    48,    49,    54,    56,    58,     0,     0,   142,     0,
-       0,     0,   186,     0,   156,    62,    69,     0,    94,     9,
-       0,   144,     0,   178,   177,   180,     0,   169,     0,     0,
-       0,    81,    60,     0,   179,     0,     0,   168,   166,     0,
-       0,   157,     0,   181,     0,     0,     0,   159,   172,   158,
-       0,   182,   176,   167,   170,   174
+     129,   130,   131,   108,   106,     0,   116,   132,   133,   134,
+     136,   192,   193,     0,    76,    86,     0,    91,    96,     0,
+     102,     0,   109,   114,   135,     0,   189,   191,   107,   101,
+       0,     0,     0,    71,     0,    74,    86,     0,    87,    88,
+      89,    77,     0,    86,     0,    72,    97,   103,   110,     0,
+       1,   190,     0,     0,     0,     0,   139,     0,   194,    78,
+      83,    85,    90,     0,    92,    79,     0,     0,     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,    73,     0,   144,     0,   142,
+     138,   140,     0,     0,   174,     0,     0,     0,     0,     0,
+     156,   161,   165,    35,    61,    68,     0,   147,     0,   114,
+     150,   163,   149,   148,     0,   151,   152,   153,   154,    80,
+      82,    84,     0,     0,    98,     0,   146,   100,    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,   115,   137,     0,     0,
+     141,   185,   184,     0,   176,     0,   188,   186,     0,   172,
+     155,     0,    64,    65,    66,    67,    63,     0,     0,   166,
+     162,   164,     0,    93,     0,    95,    99,     7,     0,    14,
+      26,    11,    17,    23,    36,    37,    40,    39,    45,    46,
+      43,    44,    48,    49,    54,    56,    58,     0,     0,   143,
+       0,     0,     0,   187,     0,   157,    62,    69,     0,    94,
+       9,     0,   145,     0,   179,   178,   181,     0,   170,     0,
+       0,     0,    81,    60,     0,   180,     0,     0,   169,   167,
+       0,     0,   158,     0,   182,     0,     0,     0,   160,   173,
+     159,     0,   183,   177,   168,   171,   175
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    98,    99,   100,   227,   101,   102,   103,   104,   105,
-     106,   107,   142,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   143,   144,   216,   145,   122,
-     146,   147,    32,    33,    34,    79,    60,    61,    80,    35,
-      36,    37,    38,    39,    40,    41,   123,    43,    74,    75,
-     127,   128,   166,   149,   150,   151,   152,   210,   270,   288,
-     289,   153,   154,   155,   278,   269,   156,   253,   202,   250,
-     265,   275,   276,   157,    44,    45,    46,    53
+      -1,    99,   100,   101,   228,   102,   103,   104,   105,   106,
+     107,   108,   143,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   144,   145,   217,   146,   123,
+     147,   148,    33,    34,    35,    80,    61,    62,    81,    36,
+      37,    38,    39,    40,    41,    42,   124,    44,    75,    76,
+     128,   129,   167,   150,   151,   152,   153,   211,   271,   289,
+     290,   154,   155,   156,   279,   270,   157,   254,   203,   251,
+     266,   276,   277,   158,    45,    46,    47,    54
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -250
+#define YYPACT_NINF -251
 static const yytype_int16 yypact[] =
 {
-    1218,   -13,  -250,  -250,  -250,   137,  -250,  -250,  -250,  -250,
-    -250,  -250,  -250,  -250,  -250,  -250,  -250,  -250,  -250,  -250,
-    -250,  -250,  -250,  -250,  -250,   -28,  -250,  -250,  -250,  -250,
-    -250,   -55,   -38,    -4,    33,   -20,  -250,    44,  1259,  -250,
-    1318,  -250,    18,  -250,  1176,  -250,  -250,  -250,  -250,  1318,
-     -22,  1259,  -250,    29,  -250,    85,    73,  -250,  -250,  -250,
-    -250,  1259,   113,    70,  -250,    13,  -250,  -250,   949,  -250,
-    -250,    49,  1259,    90,  1080,  -250,   283,  -250,  -250,  -250,
-    -250,   101,  1259,   -56,  -250,   757,   949,    80,  -250,  -250,
-    -250,  -250,   949,   949,   949,  -250,  -250,  -250,  -250,  -250,
-     -33,  -250,  -250,  -250,    81,   -15,  1013,    92,  -250,   949,
-      52,   -75,  -250,   -25,    40,  -250,  -250,  -250,   106,   105,
-     -46,  -250,    93,  -250,  -250,  1121,    95,     9,  -250,  -250,
-    -250,    88,    89,  -250,   100,   102,    91,   821,   104,   103,
-    -250,  -250,    66,  -250,  -250,    20,  -250,   -55,    79,  -250,
-    -250,  -250,  -250,   365,  -250,  -250,  -250,  -250,   107,  -250,
-    -250,   885,   949,  -250,   109,  -250,  -250,  -250,  -250,    -6,
-    -250,  -250,   949,  1283,  -250,  -250,   949,   110,  -250,  -250,
-    -250,   949,   949,   949,   949,   949,   949,   949,   949,   949,
-     949,   949,   949,   949,   949,  -250,  -250,   949,    90,  -250,
-    -250,  -250,   447,  -250,   949,  -250,  -250,    34,  -250,  -250,
-     447,  -250,  -250,  -250,  -250,  -250,   949,   949,  -250,  -250,
-    -250,   949,  -250,   111,  -250,  -250,  -250,   112,    99,  -250,
-     116,  -250,  -250,  -250,  -250,    52,    52,  -250,  -250,  -250,
-    -250,   -25,   -25,  -250,   106,   105,    77,   114,  -250,   125,
-     611,     4,  -250,   693,   447,  -250,  -250,   115,  -250,  -250,
-     949,  -250,   119,  -250,  -250,   693,   447,    99,   134,   122,
-     108,  -250,  -250,   949,  -250,   117,   123,   174,  -250,   120,
-     529,  -250,     7,   949,   529,   447,   949,  -250,  -250,  -250,
-     118,    99,  -250,  -250,  -250,  -250
+    1233,   -19,  -251,  -251,  -251,   130,  -251,  -251,  -251,  -251,
+    -251,  -251,  -251,  -251,  -251,  -251,  -251,  -251,  -251,  -251,
+    -251,  -251,  -251,  -251,  -251,   -24,  -251,  -251,  -251,  -251,
+    -251,  -251,   -62,    -6,    17,    34,   -20,  -251,    36,  1275,
+    -251,  1336,  -251,    32,  -251,  1190,  -251,  -251,  -251,  -251,
+    1336,    44,  1275,  -251,    47,  -251,    51,    78,  -251,  -251,
+    -251,  -251,  1275,   109,    81,  -251,   -50,  -251,  -251,   959,
+    -251,  -251,    56,  1275,   102,  1092,  -251,   284,  -251,  -251,
+    -251,  -251,   111,  1275,   -44,  -251,   764,   959,    87,  -251,
+    -251,  -251,  -251,   959,   959,   959,  -251,  -251,  -251,  -251,
+    -251,    37,  -251,  -251,  -251,    89,    22,  1024,    88,  -251,
+     959,   -54,    -9,  -251,   -43,    92,  -251,  -251,  -251,   105,
+     104,   -45,  -251,    91,  -251,  -251,  1134,    93,    15,  -251,
+    -251,  -251,    86,    90,  -251,    97,    98,    94,   829,    99,
+     101,  -251,  -251,     2,  -251,  -251,    31,  -251,   -62,    74,
+    -251,  -251,  -251,  -251,   367,  -251,  -251,  -251,  -251,   100,
+    -251,  -251,   894,   959,  -251,   107,  -251,  -251,  -251,  -251,
+      25,  -251,  -251,   959,  1300,  -251,  -251,   959,   103,  -251,
+    -251,  -251,   959,   959,   959,   959,   959,   959,   959,   959,
+     959,   959,   959,   959,   959,   959,  -251,  -251,   959,   102,
+    -251,  -251,  -251,   450,  -251,   959,  -251,  -251,    40,  -251,
+    -251,   450,  -251,  -251,  -251,  -251,  -251,   959,   959,  -251,
+    -251,  -251,   959,  -251,   108,  -251,  -251,  -251,   110,   113,
+    -251,   112,  -251,  -251,  -251,  -251,   -54,   -54,  -251,  -251,
+    -251,  -251,   -43,   -43,  -251,   105,   104,    72,   114,  -251,
+     138,   616,    26,  -251,   699,   450,  -251,  -251,   115,  -251,
+    -251,   959,  -251,   116,  -251,  -251,   699,   450,   113,   135,
+     121,   118,  -251,  -251,   959,  -251,   117,   123,   169,  -251,
+     106,   533,  -251,    35,   959,   533,   450,   959,  -251,  -251,
+    -251,   119,   113,  -251,  -251,  -251,  -251
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -250,  -250,  -250,  -250,  -250,  -250,  -250,    22,  -250,  -250,
-    -250,  -250,    31,  -250,   -27,  -250,   -79,   -30,  -250,  -250,
-    -250,     5,     8,    12,  -250,   -63,   -85,  -250,   -92,   -82,
-      10,    11,  -250,  -250,  -250,   121,   149,   144,   126,  -250,
-    -250,  -233,   -21,   -24,   202,   -23,     0,  -250,   139,   -66,
-    -250,    27,  -156,   -41,  -149,  -249,  -250,  -250,  -250,   -58,
-     176,    17,   -19,  -250,  -250,   -35,  -250,  -250,  -250,  -250,
-    -250,  -250,  -250,  -250,  -250,   188,  -250,  -250
+    -251,  -251,  -251,  -251,  -251,  -251,  -251,    23,  -251,  -251,
+    -251,  -251,    30,  -251,   -32,  -251,   -58,   -34,  -251,  -251,
+    -251,     4,     6,     7,  -251,   -60,   -85,  -251,   -94,   -81,
+       8,    10,  -251,  -251,  -251,   122,   148,   143,   124,  -251,
+    -251,  -238,   -22,   -35,   203,   -26,     0,  -251,   136,   -69,
+    -251,    11,  -160,   -25,  -147,  -250,  -251,  -251,  -251,   -56,
+     171,    16,   -21,  -251,  -251,   -33,  -251,  -251,  -251,  -251,
+    -251,  -251,  -251,  -251,  -251,   186,  -251,  -251
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -980,284 +982,288 @@
 #define YYTABLE_NINF -117
 static const yytype_int16 yytable[] =
 {
-      42,   165,   169,   164,   220,   121,   224,   183,   130,   184,
-      30,    31,   193,    62,    66,    50,   161,    67,   170,   171,
-     268,   178,   121,   162,    47,    52,    71,    73,   185,   186,
-      48,   287,   268,    54,    62,   287,    56,    81,    42,   172,
-      42,     6,     7,   173,    42,   207,    51,   194,    73,    42,
-      73,    42,    72,   249,    30,    31,   175,    63,    81,   130,
-      64,    42,   176,   187,   188,   226,    57,    58,    59,    23,
-      24,   217,    42,    55,    42,   266,   148,   165,   290,   223,
-     228,   217,    42,    84,   217,    85,   198,    65,    56,   199,
-      68,   232,    86,     6,     7,   189,   190,   217,   121,   108,
-     218,    73,   246,    76,   -75,   220,   237,   238,   239,   240,
-      47,   217,   251,    83,   252,   247,   108,   277,    57,    58,
-      59,    23,    24,   167,   168,    42,   211,   212,   213,   124,
-     294,   255,   256,   126,   121,   214,   293,   181,   182,   257,
-     180,     2,     3,     4,   158,   215,    57,    58,    59,   -25,
-     -26,    68,   174,   148,   217,   260,   235,   236,   121,   241,
-     242,   267,   179,   191,   192,   262,   195,   197,   200,   201,
-     203,   205,   204,   267,   208,   272,   217,   279,   209,   221,
-    -116,   282,   225,   281,   258,   259,   -27,   261,   271,   273,
-     285,   291,   108,   280,   284,   231,   243,   283,   295,   286,
-     244,   165,   148,   159,    78,   245,    82,    49,   160,   263,
-     148,   125,   233,   234,   108,   108,   108,   108,   108,   108,
-     108,   108,   108,   108,   108,   248,   292,   254,   108,    77,
-     274,   264,    70,     0,     0,     0,     0,     0,     0,     0,
+      43,   170,   166,   225,    67,   165,   131,   221,    31,   122,
+      32,   186,   187,    63,   194,    68,   269,    74,    48,    53,
+      51,    85,   179,    86,    72,    49,   122,    82,   269,   162,
+      87,   288,   182,   183,    63,   288,   163,    57,    74,    43,
+      74,    43,     6,     7,   208,    43,   188,   189,    82,   195,
+      43,    52,    43,    31,    57,    32,   250,   131,    64,     6,
+       7,    65,    43,   212,   213,   214,    55,    58,    59,    60,
+      23,    24,   215,    43,   184,    43,   185,   149,   166,   229,
+      66,   224,   216,    43,    58,    59,    60,    23,    24,   171,
+     172,    74,   233,   199,   176,    56,   200,   227,   267,   109,
+     177,   247,   122,   218,   218,    69,   -75,   291,   221,   218,
+     173,   252,   219,   218,   174,    48,   109,   248,   218,    73,
+     278,   253,    77,   168,   169,    84,    43,   295,   238,   239,
+     240,   241,   256,   257,     2,     3,     4,   125,   122,   294,
+     181,   258,    58,    59,    60,   -25,   127,    69,   190,   191,
+     218,   261,   236,   237,   149,   159,   242,   243,   -26,   180,
+     268,   175,   122,   192,   193,   196,   198,   201,   204,   205,
+     209,   202,   268,   222,  -116,   206,   273,   210,   263,   280,
+     283,   226,   259,   -27,   260,   286,   287,   274,   262,   272,
+     292,   218,   109,   281,   282,   285,   244,   232,   284,   245,
+     296,   246,   166,   149,    79,   160,    83,   161,    50,   126,
+     249,   149,   234,   235,   109,   109,   109,   109,   109,   109,
+     109,   109,   109,   109,   109,    78,   264,   255,   109,   293,
+     265,    71,     0,   275,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     148,     0,   108,   148,   148,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   148,   148,     0,     0,     0,
+       0,   149,   109,     0,   149,   149,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   149,   149,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     148,     0,     0,     0,   148,   148,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,   131,   132,   133,     0,
-     134,   135,   136,   137,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,     0,     0,     0,    23,
-      24,    25,    26,   138,    27,    28,    87,    29,    88,    89,
-      90,    91,     0,     0,    92,    93,     0,     0,     0,     0,
+       0,   149,     0,     0,     0,   149,   149,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,   132,   133,   134,
+       0,   135,   136,   137,   138,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,     0,     0,     0,
+      23,    24,    25,    26,   139,    27,    28,    29,    88,    30,
+      89,    90,    91,    92,     0,     0,    93,    94,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    94,     0,     0,     0,   139,   140,     0,
-       0,     0,     0,   141,    95,    96,     0,    97,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,   131,   132,
-     133,     0,   134,   135,   136,   137,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,     0,     0,
-       0,    23,    24,    25,    26,   138,    27,    28,    87,    29,
-      88,    89,    90,    91,     0,     0,    92,    93,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    94,     0,     0,     0,   139,
-     219,     0,     0,     0,     0,   141,    95,    96,     0,    97,
+       0,     0,     0,     0,     0,    95,     0,     0,     0,   140,
+     141,     0,     0,     0,     0,   142,    96,    97,     0,    98,
        1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-     131,   132,   133,     0,   134,   135,   136,   137,    11,    12,
+     132,   133,   134,     0,   135,   136,   137,   138,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-       0,     0,     0,    23,    24,    25,    26,   138,    27,    28,
-      87,    29,    88,    89,    90,    91,     0,     0,    92,    93,
+       0,     0,     0,    23,    24,    25,    26,   139,    27,    28,
+      29,    88,    30,    89,    90,    91,    92,     0,     0,    93,
+      94,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    95,     0,
+       0,     0,   140,   220,     0,     0,     0,     0,   142,    96,
+      97,     0,    98,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,   132,   133,   134,     0,   135,   136,   137,
+     138,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,     0,     0,     0,    23,    24,    25,    26,
+     139,    27,    28,    29,    88,    30,    89,    90,    91,    92,
+       0,     0,    93,    94,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    94,     0,     0,
-       0,   139,     0,     0,     0,     0,     0,   141,    95,    96,
-       0,    97,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,   131,   132,   133,     0,   134,   135,   136,   137,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,     0,     0,     0,    23,    24,    25,    26,   138,
-      27,    28,    87,    29,    88,    89,    90,    91,     0,     0,
-      92,    93,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    94,
-       0,     0,     0,    76,     0,     0,     0,     0,     0,   141,
-      95,    96,     0,    97,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,     0,     0,     0,     0,     0,     0,
-       0,     0,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,     0,     0,     0,    23,    24,    25,
-      26,     0,    27,    28,    87,    29,    88,    89,    90,    91,
-       0,     0,    92,    93,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    94,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   141,    95,    96,     0,    97,    56,     2,     3,     4,
-       0,     6,     7,     8,     9,    10,     0,     0,     0,     0,
-       0,     0,     0,     0,    11,    12,    13,    14,    15,    16,
+       0,    95,     0,     0,     0,   140,     0,     0,     0,     0,
+       0,   142,    96,    97,     0,    98,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,   132,   133,   134,     0,
+     135,   136,   137,   138,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,     0,     0,     0,    23,
-      24,    25,    26,     0,    27,    28,    87,    29,    88,    89,
-      90,    91,     0,     0,    92,    93,     0,     0,     0,     0,
+      24,    25,    26,   139,    27,    28,    29,    88,    30,    89,
+      90,    91,    92,     0,     0,    93,    94,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    94,     0,     0,     0,     8,     9,    10,
-       0,     0,     0,     0,    95,    96,     0,    97,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-       0,     0,     0,     0,     0,    25,    26,     0,    27,    28,
-      87,    29,    88,    89,    90,    91,     0,     0,    92,    93,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    94,     0,     0,
-     163,     8,     9,    10,     0,     0,     0,     0,    95,    96,
-       0,    97,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,     0,     0,     0,     0,     0,    25,
-      26,     0,    27,    28,    87,    29,    88,    89,    90,    91,
-       0,     0,    92,    93,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    94,     0,     0,     0,     8,     9,    10,     0,     0,
-       0,   206,    95,    96,     0,    97,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,     0,     0,
-       0,     0,     0,    25,    26,     0,    27,    28,    87,    29,
-      88,    89,    90,    91,     0,     0,    92,    93,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    94,     0,     0,   222,     8,
-       9,    10,     0,     0,     0,     0,    95,    96,     0,    97,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,     0,     0,     0,     0,     0,    25,    26,     0,
-      27,    28,    87,    29,    88,    89,    90,    91,     0,     0,
-      92,    93,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    94,
-       0,     0,     0,     8,     9,    10,     0,     0,     0,     0,
-      95,    96,     0,    97,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,     0,     0,     0,     0,
-       0,    25,   177,     0,    27,    28,    87,    29,    88,    89,
-      90,    91,     0,     0,    92,    93,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    94,     2,     3,     4,     0,     0,     0,
-       8,     9,    10,     0,    95,    96,     0,    97,     0,     0,
-       0,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,     0,     0,     0,     0,     0,    25,    26,
-       0,    27,    28,     0,    29,     2,     3,     4,     0,     0,
-       0,     8,     9,    10,     0,     0,     0,     0,     0,     0,
-       0,     0,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,     0,   129,     0,     0,     0,    25,
-      26,     0,    27,    28,     0,    29,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    69,     0,     0,     1,
+       0,     0,     0,     0,    95,     0,     0,     0,    77,     0,
+       0,     0,     0,     0,   142,    96,    97,     0,    98,     1,
        2,     3,     4,     5,     6,     7,     8,     9,    10,     0,
-       0,     0,     0,     0,     0,     0,   196,    11,    12,    13,
+       0,     0,     0,     0,     0,     0,     0,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,     0,
-       0,     0,    23,    24,    25,    26,     0,    27,    28,     0,
-      29,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,     0,     0,     0,     0,     0,     0,     0,     0,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,     0,     0,     0,    23,    24,    25,    26,     0,    27,
-      28,     0,    29,     2,     3,     4,     0,     0,     0,     8,
+       0,     0,    23,    24,    25,    26,     0,    27,    28,    29,
+      88,    30,    89,    90,    91,    92,     0,     0,    93,    94,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    95,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   142,    96,    97,
+       0,    98,    57,     2,     3,     4,     0,     6,     7,     8,
        9,    10,     0,     0,     0,     0,     0,     0,     0,     0,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,     0,     8,     9,    10,     0,    25,    26,     0,
-      27,    28,     0,    29,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,     0,     0,     0,     0,
-       0,    25,    26,     0,    27,    28,   229,    29,     8,     9,
-      10,   230,     0,     0,     0,     0,     0,     0,     0,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,     0,     0,     0,     0,     0,    25,    26,     0,    27,
-      28,     0,    29
+      21,    22,     0,     0,     0,    23,    24,    25,    26,     0,
+      27,    28,    29,    88,    30,    89,    90,    91,    92,     0,
+       0,    93,    94,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      95,     0,     0,     0,     8,     9,    10,     0,     0,     0,
+       0,    96,    97,     0,    98,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,     0,     0,     0,
+       0,     0,    25,    26,     0,    27,    28,    29,    88,    30,
+      89,    90,    91,    92,     0,     0,    93,    94,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    95,     0,     0,   164,     8,
+       9,    10,     0,     0,     0,     0,    96,    97,     0,    98,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,     0,     0,     0,     0,     0,    25,    26,     0,
+      27,    28,    29,    88,    30,    89,    90,    91,    92,     0,
+       0,    93,    94,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      95,     0,     0,     0,     8,     9,    10,     0,     0,     0,
+     207,    96,    97,     0,    98,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,     0,     0,     0,
+       0,     0,    25,    26,     0,    27,    28,    29,    88,    30,
+      89,    90,    91,    92,     0,     0,    93,    94,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    95,     0,     0,   223,     8,
+       9,    10,     0,     0,     0,     0,    96,    97,     0,    98,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,     0,     0,     0,     0,     0,    25,    26,     0,
+      27,    28,    29,    88,    30,    89,    90,    91,    92,     0,
+       0,    93,    94,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      95,     0,     0,     0,     8,     9,    10,     0,     0,     0,
+       0,    96,    97,     0,    98,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,     0,     0,     0,
+       0,     0,    25,   178,     0,    27,    28,    29,    88,    30,
+      89,    90,    91,    92,     0,     0,    93,    94,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    95,     2,     3,     4,     0,
+       0,     0,     8,     9,    10,     0,    96,    97,     0,    98,
+       0,     0,     0,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,     0,     0,     0,     0,     0,
+      25,    26,     0,    27,    28,    29,     0,    30,     2,     3,
+       4,     0,     0,     0,     8,     9,    10,     0,     0,     0,
+       0,     0,     0,     0,     0,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,     0,   130,     0,
+       0,     0,    25,    26,     0,    27,    28,    29,     0,    30,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      70,     0,     0,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,     0,     0,     0,     0,     0,     0,     0,
+     197,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,     0,     0,     0,    23,    24,    25,    26,
+       0,    27,    28,    29,     0,    30,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,     0,     0,     0,     0,
+       0,     0,     0,     0,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,     0,     0,     0,    23,
+      24,    25,    26,     0,    27,    28,    29,     0,    30,     2,
+       3,     4,     0,     0,     0,     8,     9,    10,     0,     0,
+       0,     0,     0,     0,     0,     0,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,     0,     0,
+       8,     9,    10,    25,    26,     0,    27,    28,    29,     0,
+      30,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,     0,     0,     0,     0,     0,    25,    26,
+       0,    27,    28,    29,   230,    30,     8,     9,    10,   231,
+       0,     0,     0,     0,     0,     0,     0,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,     0,
+       0,     0,     0,     0,    25,    26,     0,    27,    28,    29,
+       0,    30
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    86,    94,    85,   153,    68,   162,    82,    74,    84,
-       0,     0,    58,    34,    38,    43,    72,    40,    51,    52,
-     253,   106,    85,    79,    37,    80,    49,    51,    53,    54,
-      43,   280,   265,    71,    55,   284,     3,    61,    38,    72,
-      40,     8,     9,    76,    44,   137,    74,    93,    72,    49,
-      74,    51,    74,   202,    44,    44,    71,    77,    82,   125,
-      80,    61,    77,    88,    89,    71,    33,    34,    35,    36,
-      37,    77,    72,    77,    74,    71,    76,   162,    71,   161,
-     172,    77,    82,    70,    77,    72,    77,    43,     3,    80,
-      72,   176,    79,     8,     9,    55,    56,    77,   161,    68,
-      80,   125,   194,    74,    71,   254,   185,   186,   187,   188,
-      37,    77,   204,    43,    80,   197,    85,   266,    33,    34,
-      35,    36,    37,    92,    93,   125,    60,    61,    62,    80,
-     286,   216,   217,    43,   197,    69,   285,    85,    86,   221,
-     109,     4,     5,     6,    43,    79,    33,    34,    35,    70,
-      70,    72,    71,   153,    77,    78,   183,   184,   221,   189,
-     190,   253,    70,    57,    59,    40,    73,    72,    80,    80,
-      70,    80,    70,   265,    70,   260,    77,    43,    75,    72,
-      70,   273,    73,    75,    73,    73,    70,    73,    73,    70,
-      16,   283,   161,    71,    71,   173,   191,    80,    80,    79,
-     192,   286,   202,    82,    55,   193,    62,     5,    82,   250,
-     210,    72,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   198,   284,   210,   197,    53,
-     265,   250,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       0,    95,    87,   163,    39,    86,    75,   154,     0,    69,
+       0,    54,    55,    35,    59,    41,   254,    52,    37,    81,
+      44,    71,   107,    73,    50,    44,    86,    62,   266,    73,
+      80,   281,    86,    87,    56,   285,    80,     3,    73,    39,
+      75,    41,     8,     9,   138,    45,    89,    90,    83,    94,
+      50,    75,    52,    45,     3,    45,   203,   126,    78,     8,
+       9,    81,    62,    61,    62,    63,    72,    33,    34,    35,
+      36,    37,    70,    73,    83,    75,    85,    77,   163,   173,
+      44,   162,    80,    83,    33,    34,    35,    36,    37,    52,
+      53,   126,   177,    78,    72,    78,    81,    72,    72,    69,
+      78,   195,   162,    78,    78,    73,    72,    72,   255,    78,
+      73,   205,    81,    78,    77,    37,    86,   198,    78,    75,
+     267,    81,    75,    93,    94,    44,   126,   287,   186,   187,
+     188,   189,   217,   218,     4,     5,     6,    81,   198,   286,
+     110,   222,    33,    34,    35,    71,    44,    73,    56,    57,
+      78,    79,   184,   185,   154,    44,   190,   191,    71,    71,
+     254,    72,   222,    58,    60,    74,    73,    81,    71,    71,
+      71,    81,   266,    73,    71,    81,   261,    76,    40,    44,
+     274,    74,    74,    71,    74,    16,    80,    71,    74,    74,
+     284,    78,   162,    72,    76,    72,   192,   174,    81,   193,
+      81,   194,   287,   203,    56,    83,    63,    83,     5,    73,
+     199,   211,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,    54,   251,   211,   198,   285,
+     251,    45,    -1,   266,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     250,    -1,   221,   253,   254,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   265,   266,    -1,    -1,    -1,
+      -1,   251,   222,    -1,   254,   255,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   266,   267,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     280,    -1,    -1,    -1,   284,   285,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    -1,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    -1,    -1,    -1,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    -1,    -1,    51,    52,    -1,    -1,    -1,    -1,
+      -1,   281,    -1,    -1,    -1,   285,   286,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      -1,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    -1,    -1,    -1,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    -1,    -1,    52,    53,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    70,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    -1,    -1,    80,    81,    82,    -1,    84,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    -1,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    -1,    -1,
-      -1,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    -1,    -1,    51,    52,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    74,
-      75,    -1,    -1,    -1,    -1,    80,    81,    82,    -1,    84,
+      -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    75,
+      76,    -1,    -1,    -1,    -1,    81,    82,    83,    -1,    85,
        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    -1,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       -1,    -1,    -1,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    -1,    -1,    51,    52,
+      43,    44,    45,    46,    47,    48,    49,    -1,    -1,    52,
+      53,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,
+      -1,    -1,    75,    76,    -1,    -1,    -1,    -1,    81,    82,
+      83,    -1,    85,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    -1,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    -1,    -1,    -1,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      -1,    -1,    52,    53,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,
-      -1,    74,    -1,    -1,    -1,    -1,    -1,    80,    81,    82,
-      -1,    84,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    -1,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    -1,    -1,    -1,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    -1,    -1,
-      51,    52,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-      -1,    -1,    -1,    74,    -1,    -1,    -1,    -1,    -1,    80,
-      81,    82,    -1,    84,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    -1,    -1,    -1,    36,    37,    38,
-      39,    -1,    41,    42,    43,    44,    45,    46,    47,    48,
-      -1,    -1,    51,    52,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    80,    81,    82,    -1,    84,     3,     4,     5,     6,
-      -1,     8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    21,    22,    23,    24,    25,    26,
+      -1,    71,    -1,    -1,    -1,    75,    -1,    -1,    -1,    -1,
+      -1,    81,    82,    83,    -1,    85,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    -1,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    -1,    -1,    -1,    36,
-      37,    38,    39,    -1,    41,    42,    43,    44,    45,    46,
-      47,    48,    -1,    -1,    51,    52,    -1,    -1,    -1,    -1,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    -1,    -1,    52,    53,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    70,    -1,    -1,    -1,    10,    11,    12,
-      -1,    -1,    -1,    -1,    81,    82,    -1,    84,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      -1,    -1,    -1,    -1,    -1,    38,    39,    -1,    41,    42,
-      43,    44,    45,    46,    47,    48,    -1,    -1,    51,    52,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,
-      73,    10,    11,    12,    -1,    -1,    -1,    -1,    81,    82,
-      -1,    84,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    38,
-      39,    -1,    41,    42,    43,    44,    45,    46,    47,    48,
-      -1,    -1,    51,    52,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    70,    -1,    -1,    -1,    10,    11,    12,    -1,    -1,
-      -1,    80,    81,    82,    -1,    84,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    -1,    -1,
-      -1,    -1,    -1,    38,    39,    -1,    41,    42,    43,    44,
-      45,    46,    47,    48,    -1,    -1,    51,    52,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    73,    10,
-      11,    12,    -1,    -1,    -1,    -1,    81,    82,    -1,    84,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    -1,    -1,    -1,    -1,    -1,    38,    39,    -1,
-      41,    42,    43,    44,    45,    46,    47,    48,    -1,    -1,
-      51,    52,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-      -1,    -1,    -1,    10,    11,    12,    -1,    -1,    -1,    -1,
-      81,    82,    -1,    84,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    38,    39,    -1,    41,    42,    43,    44,    45,    46,
-      47,    48,    -1,    -1,    51,    52,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    70,     4,     5,     6,    -1,    -1,    -1,
-      10,    11,    12,    -1,    81,    82,    -1,    84,    -1,    -1,
-      -1,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    38,    39,
-      -1,    41,    42,    -1,    44,     4,     5,     6,    -1,    -1,
-      -1,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    -1,    75,    -1,    -1,    -1,    38,
-      39,    -1,    41,    42,    -1,    44,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     0,    -1,    -1,     3,
+      -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,
+      -1,    -1,    -1,    -1,    81,    82,    83,    -1,    85,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    75,    21,    22,    23,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
-      -1,    -1,    36,    37,    38,    39,    -1,    41,    42,    -1,
-      44,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    -1,    -1,    -1,    36,    37,    38,    39,    -1,    41,
-      42,    -1,    44,     4,     5,     6,    -1,    -1,    -1,    10,
+      -1,    -1,    36,    37,    38,    39,    -1,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    -1,    -1,    52,    53,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    82,    83,
+      -1,    85,     3,     4,     5,     6,    -1,     8,     9,    10,
       11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    -1,    10,    11,    12,    -1,    38,    39,    -1,
-      41,    42,    -1,    44,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    38,    39,    -1,    41,    42,    43,    44,    10,    11,
-      12,    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    -1,    -1,    -1,    -1,    -1,    38,    39,    -1,    41,
-      42,    -1,    44
+      31,    32,    -1,    -1,    -1,    36,    37,    38,    39,    -1,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    -1,
+      -1,    52,    53,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      71,    -1,    -1,    -1,    10,    11,    12,    -1,    -1,    -1,
+      -1,    82,    83,    -1,    85,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    -1,    -1,    -1,
+      -1,    -1,    38,    39,    -1,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    -1,    -1,    52,    53,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    74,    10,
+      11,    12,    -1,    -1,    -1,    -1,    82,    83,    -1,    85,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    -1,    -1,    -1,    -1,    -1,    38,    39,    -1,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    -1,
+      -1,    52,    53,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      71,    -1,    -1,    -1,    10,    11,    12,    -1,    -1,    -1,
+      81,    82,    83,    -1,    85,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    -1,    -1,    -1,
+      -1,    -1,    38,    39,    -1,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    -1,    -1,    52,    53,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    74,    10,
+      11,    12,    -1,    -1,    -1,    -1,    82,    83,    -1,    85,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    -1,    -1,    -1,    -1,    -1,    38,    39,    -1,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    -1,
+      -1,    52,    53,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      71,    -1,    -1,    -1,    10,    11,    12,    -1,    -1,    -1,
+      -1,    82,    83,    -1,    85,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    -1,    -1,    -1,
+      -1,    -1,    38,    39,    -1,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    -1,    -1,    52,    53,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    71,     4,     5,     6,    -1,
+      -1,    -1,    10,    11,    12,    -1,    82,    83,    -1,    85,
+      -1,    -1,    -1,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
+      38,    39,    -1,    41,    42,    43,    -1,    45,     4,     5,
+       6,    -1,    -1,    -1,    10,    11,    12,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    -1,    76,    -1,
+      -1,    -1,    38,    39,    -1,    41,    42,    43,    -1,    45,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       0,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      76,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    -1,    -1,    -1,    36,    37,    38,    39,
+      -1,    41,    42,    43,    -1,    45,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    -1,    -1,    -1,    36,
+      37,    38,    39,    -1,    41,    42,    43,    -1,    45,     4,
+       5,     6,    -1,    -1,    -1,    10,    11,    12,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    -1,    -1,
+      10,    11,    12,    38,    39,    -1,    41,    42,    43,    -1,
+      45,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    38,    39,
+      -1,    41,    42,    43,    44,    45,    10,    11,    12,    49,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
+      -1,    -1,    -1,    -1,    38,    39,    -1,    41,    42,    43,
+      -1,    45
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1266,34 +1272,34 @@
 {
        0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    36,    37,    38,    39,    41,    42,    44,
-     124,   125,   126,   127,   128,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   168,   169,   170,    37,    43,   138,
-      43,    74,    80,   171,    71,    77,     3,    33,    34,    35,
-     130,   131,   136,    77,    80,    43,   137,   139,    72,     0,
-     169,   139,    74,   137,   142,   143,    74,   154,   130,   129,
-     132,   137,   131,    43,    70,    72,    79,    43,    45,    46,
-      47,    48,    51,    52,    70,    81,    82,    84,    95,    96,
-      97,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+      30,    31,    32,    36,    37,    38,    39,    41,    42,    43,
+      45,   125,   126,   127,   128,   129,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   169,   170,   171,    37,    44,
+     139,    44,    75,    81,   172,    72,    78,     3,    33,    34,
+      35,   131,   132,   137,    78,    81,    44,   138,   140,    73,
+       0,   170,   140,    75,   138,   143,   144,    75,   155,   131,
+     130,   133,   138,   132,    44,    71,    73,    80,    44,    46,
+      47,    48,    49,    52,    53,    71,    82,    83,    85,    96,
+      97,    98,   100,   101,   102,   103,   104,   105,   106,   107,
      108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   123,   140,    80,   142,    43,   144,   145,    75,
-     143,    13,    14,    15,    17,    18,    19,    20,    40,    74,
-      75,    80,   106,   119,   120,   122,   124,   125,   140,   147,
-     148,   149,   150,   155,   156,   157,   160,   167,    43,   129,
-     132,    72,    79,    73,   123,   120,   146,   106,   106,   122,
-      51,    52,    72,    76,    71,    71,    77,    39,   120,    70,
-     106,    85,    86,    82,    84,    53,    54,    88,    89,    55,
-      56,    57,    59,    58,    93,    73,    75,    72,    77,    80,
-      80,    80,   162,    70,    70,    80,    80,   122,    70,    75,
-     151,    60,    61,    62,    69,    79,   121,    77,    80,    75,
-     148,    72,    73,   123,   146,    73,    71,    98,   122,    43,
-      48,   101,   120,   106,   106,   108,   108,   110,   110,   110,
-     110,   111,   111,   115,   116,   117,   122,   123,   145,   148,
-     163,   122,    80,   161,   155,   120,   120,   123,    73,    73,
-      78,    73,    40,   147,   156,   164,    71,   122,   135,   159,
-     152,    73,   120,    70,   159,   165,   166,   148,   158,    43,
-      71,    75,   122,    80,    71,    16,    79,   149,   153,   154,
-      71,   122,   153,   148,   146,    80
+     118,   119,   120,   124,   141,    81,   143,    44,   145,   146,
+      76,   144,    13,    14,    15,    17,    18,    19,    20,    40,
+      75,    76,    81,   107,   120,   121,   123,   125,   126,   141,
+     148,   149,   150,   151,   156,   157,   158,   161,   168,    44,
+     130,   133,    73,    80,    74,   124,   121,   147,   107,   107,
+     123,    52,    53,    73,    77,    72,    72,    78,    39,   121,
+      71,   107,    86,    87,    83,    85,    54,    55,    89,    90,
+      56,    57,    58,    60,    59,    94,    74,    76,    73,    78,
+      81,    81,    81,   163,    71,    71,    81,    81,   123,    71,
+      76,   152,    61,    62,    63,    70,    80,   122,    78,    81,
+      76,   149,    73,    74,   124,   147,    74,    72,    99,   123,
+      44,    49,   102,   121,   107,   107,   109,   109,   111,   111,
+     111,   111,   112,   112,   116,   117,   118,   123,   124,   146,
+     149,   164,   123,    81,   162,   156,   121,   121,   124,    74,
+      74,    79,    74,    40,   148,   157,   165,    72,   123,   136,
+     160,   153,    74,   121,    71,   160,   166,   167,   149,   159,
+      44,    72,    76,   123,    81,    72,    16,    80,   150,   154,
+     155,    72,   123,   154,   149,   147,    81
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -3884,13 +3890,26 @@
   case 134:
 
     {
+        if (!context->supportsExtension("GL_OES_EGL_image_external")) {
+            context->error((yyvsp[(1) - (1)].lex).line, "unsupported type", "samplerExternalOES", "");
+            context->recover();
+        }
+        FRAG_VERT_ONLY("samplerExternalOES", (yyvsp[(1) - (1)].lex).line);
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtSamplerExternalOES, qual, (yyvsp[(1) - (1)].lex).line);
+    ;}
+    break;
+
+  case 135:
+
+    {
         FRAG_VERT_ONLY("struct", (yyvsp[(1) - (1)].interm.type).line);
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
         (yyval.interm.type).qualifier = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
     ;}
     break;
 
-  case 135:
+  case 136:
 
     {
         //
@@ -3904,7 +3923,7 @@
     ;}
     break;
 
-  case 136:
+  case 137:
 
     {
         if (context->reservedErrorCheck((yyvsp[(2) - (5)].lex).line, *(yyvsp[(2) - (5)].lex).string))
@@ -3921,7 +3940,7 @@
     ;}
     break;
 
-  case 137:
+  case 138:
 
     {
         TType* structure = new TType((yyvsp[(3) - (4)].interm.typeList), TString(""));
@@ -3930,14 +3949,14 @@
     ;}
     break;
 
-  case 138:
+  case 139:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (1)].interm.typeList);
     ;}
     break;
 
-  case 139:
+  case 140:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (2)].interm.typeList);
@@ -3953,7 +3972,7 @@
     ;}
     break;
 
-  case 140:
+  case 141:
 
     {
         (yyval.interm.typeList) = (yyvsp[(2) - (3)].interm.typeList);
@@ -3986,7 +4005,7 @@
     ;}
     break;
 
-  case 141:
+  case 142:
 
     {
         (yyval.interm.typeList) = NewPoolTTypeList();
@@ -3994,14 +4013,14 @@
     ;}
     break;
 
-  case 142:
+  case 143:
 
     {
         (yyval.interm.typeList)->push_back((yyvsp[(3) - (3)].interm.typeLine));
     ;}
     break;
 
-  case 143:
+  case 144:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
@@ -4013,7 +4032,7 @@
     ;}
     break;
 
-  case 144:
+  case 145:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (4)].lex).line, *(yyvsp[(1) - (4)].lex).string))
@@ -4030,24 +4049,19 @@
     ;}
     break;
 
-  case 145:
+  case 146:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); ;}
     break;
 
-  case 146:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); ;}
-    break;
-
   case 147:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); ;}
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); ;}
     break;
 
   case 148:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); ;}
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); ;}
     break;
 
   case 149:
@@ -4077,21 +4091,26 @@
 
   case 154:
 
-    { (yyval.interm.intermAggregate) = 0; ;}
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); ;}
     break;
 
   case 155:
 
-    { context->symbolTable.push(); ;}
+    { (yyval.interm.intermAggregate) = 0; ;}
     break;
 
   case 156:
 
-    { context->symbolTable.pop(); ;}
+    { context->symbolTable.push(); ;}
     break;
 
   case 157:
 
+    { context->symbolTable.pop(); ;}
+    break;
+
+  case 158:
+
     {
         if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) {
             (yyvsp[(3) - (5)].interm.intermAggregate)->setOp(EOpSequence);
@@ -4101,11 +4120,6 @@
     ;}
     break;
 
-  case 158:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); ;}
-    break;
-
   case 159:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); ;}
@@ -4113,12 +4127,17 @@
 
   case 160:
 
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); ;}
+    break;
+
+  case 161:
+
     {
         (yyval.interm.intermNode) = 0;
     ;}
     break;
 
-  case 161:
+  case 162:
 
     {
         if ((yyvsp[(2) - (3)].interm.intermAggregate)) {
@@ -4129,31 +4148,31 @@
     ;}
     break;
 
-  case 162:
+  case 163:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode), 0);
     ;}
     break;
 
-  case 163:
+  case 164:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermAggregate), (yyvsp[(2) - (2)].interm.intermNode), 0);
     ;}
     break;
 
-  case 164:
+  case 165:
 
     { (yyval.interm.intermNode) = 0; ;}
     break;
 
-  case 165:
+  case 166:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); ;}
     break;
 
-  case 166:
+  case 167:
 
     {
         if (context->boolErrorCheck((yyvsp[(1) - (5)].lex).line, (yyvsp[(3) - (5)].interm.intermTypedNode)))
@@ -4162,7 +4181,7 @@
     ;}
     break;
 
-  case 167:
+  case 168:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
@@ -4170,7 +4189,7 @@
     ;}
     break;
 
-  case 168:
+  case 169:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4178,7 +4197,7 @@
     ;}
     break;
 
-  case 169:
+  case 170:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
@@ -4187,7 +4206,7 @@
     ;}
     break;
 
-  case 170:
+  case 171:
 
     {
         TIntermNode* intermNode;
@@ -4205,12 +4224,12 @@
     ;}
     break;
 
-  case 171:
+  case 172:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; ;}
     break;
 
-  case 172:
+  case 173:
 
     {
         context->symbolTable.pop();
@@ -4219,12 +4238,12 @@
     ;}
     break;
 
-  case 173:
+  case 174:
 
     { ++context->loopNestingLevel; ;}
     break;
 
-  case 174:
+  case 175:
 
     {
         if (context->boolErrorCheck((yyvsp[(8) - (8)].lex).line, (yyvsp[(6) - (8)].interm.intermTypedNode)))
@@ -4235,24 +4254,17 @@
     ;}
     break;
 
-  case 175:
-
-    { context->symbolTable.push(); ++context->loopNestingLevel; ;}
-    break;
-
   case 176:
 
-    {
-        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 177:
 
     {
-        (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;
 
@@ -4266,26 +4278,33 @@
   case 179:
 
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     ;}
     break;
 
   case 180:
 
     {
-        (yyval.interm.intermTypedNode) = 0;
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     ;}
     break;
 
   case 181:
 
     {
+        (yyval.interm.intermTypedNode) = 0;
+    ;}
+    break;
+
+  case 182:
+
+    {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     ;}
     break;
 
-  case 182:
+  case 183:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
@@ -4293,7 +4312,7 @@
     ;}
     break;
 
-  case 183:
+  case 184:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4304,7 +4323,7 @@
     ;}
     break;
 
-  case 184:
+  case 185:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4315,7 +4334,7 @@
     ;}
     break;
 
-  case 185:
+  case 186:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).line);
@@ -4326,7 +4345,7 @@
     ;}
     break;
 
-  case 186:
+  case 187:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).line);
@@ -4341,7 +4360,7 @@
     ;}
     break;
 
-  case 187:
+  case 188:
 
     {
         FRAG_ONLY("discard", (yyvsp[(1) - (2)].lex).line);
@@ -4349,18 +4368,10 @@
     ;}
     break;
 
-  case 188:
-
-    {
-        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
-        context->treeRoot = (yyval.interm.intermNode);
-    ;}
-    break;
-
   case 189:
 
     {
-        (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;
@@ -4368,7 +4379,8 @@
   case 190:
 
     {
-        (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;
 
@@ -4382,6 +4394,13 @@
   case 192:
 
     {
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+    ;}
+    break;
+
+  case 193:
+
+    {
         TFunction* function = (yyvsp[(1) - (1)].interm).function;
         TFunction* prevDec = static_cast<TFunction*>(context->symbolTable.find(function->getMangledName()));
         //
@@ -4464,7 +4483,7 @@
     ;}
     break;
 
-  case 193:
+  case 194:
 
     {
         //?? 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 fa8480d..185dc84 100644
--- a/src/compiler/glslang_tab.h
+++ b/src/compiler/glslang_tab.h
@@ -79,57 +79,58 @@
      WHILE = 295,
      SAMPLER2D = 296,
      SAMPLERCUBE = 297,
-     IDENTIFIER = 298,
-     TYPE_NAME = 299,
-     FLOATCONSTANT = 300,
-     INTCONSTANT = 301,
-     BOOLCONSTANT = 302,
-     FIELD_SELECTION = 303,
-     LEFT_OP = 304,
-     RIGHT_OP = 305,
-     INC_OP = 306,
-     DEC_OP = 307,
-     LE_OP = 308,
-     GE_OP = 309,
-     EQ_OP = 310,
-     NE_OP = 311,
-     AND_OP = 312,
-     OR_OP = 313,
-     XOR_OP = 314,
-     MUL_ASSIGN = 315,
-     DIV_ASSIGN = 316,
-     ADD_ASSIGN = 317,
-     MOD_ASSIGN = 318,
-     LEFT_ASSIGN = 319,
-     RIGHT_ASSIGN = 320,
-     AND_ASSIGN = 321,
-     XOR_ASSIGN = 322,
-     OR_ASSIGN = 323,
-     SUB_ASSIGN = 324,
-     LEFT_PAREN = 325,
-     RIGHT_PAREN = 326,
-     LEFT_BRACKET = 327,
-     RIGHT_BRACKET = 328,
-     LEFT_BRACE = 329,
-     RIGHT_BRACE = 330,
-     DOT = 331,
-     COMMA = 332,
-     COLON = 333,
-     EQUAL = 334,
-     SEMICOLON = 335,
-     BANG = 336,
-     DASH = 337,
-     TILDE = 338,
-     PLUS = 339,
-     STAR = 340,
-     SLASH = 341,
-     PERCENT = 342,
-     LEFT_ANGLE = 343,
-     RIGHT_ANGLE = 344,
-     VERTICAL_BAR = 345,
-     CARET = 346,
-     AMPERSAND = 347,
-     QUESTION = 348
+     SAMPLER_EXTERNAL_OES = 298,
+     IDENTIFIER = 299,
+     TYPE_NAME = 300,
+     FLOATCONSTANT = 301,
+     INTCONSTANT = 302,
+     BOOLCONSTANT = 303,
+     FIELD_SELECTION = 304,
+     LEFT_OP = 305,
+     RIGHT_OP = 306,
+     INC_OP = 307,
+     DEC_OP = 308,
+     LE_OP = 309,
+     GE_OP = 310,
+     EQ_OP = 311,
+     NE_OP = 312,
+     AND_OP = 313,
+     OR_OP = 314,
+     XOR_OP = 315,
+     MUL_ASSIGN = 316,
+     DIV_ASSIGN = 317,
+     ADD_ASSIGN = 318,
+     MOD_ASSIGN = 319,
+     LEFT_ASSIGN = 320,
+     RIGHT_ASSIGN = 321,
+     AND_ASSIGN = 322,
+     XOR_ASSIGN = 323,
+     OR_ASSIGN = 324,
+     SUB_ASSIGN = 325,
+     LEFT_PAREN = 326,
+     RIGHT_PAREN = 327,
+     LEFT_BRACKET = 328,
+     RIGHT_BRACKET = 329,
+     LEFT_BRACE = 330,
+     RIGHT_BRACE = 331,
+     DOT = 332,
+     COMMA = 333,
+     COLON = 334,
+     EQUAL = 335,
+     SEMICOLON = 336,
+     BANG = 337,
+     DASH = 338,
+     TILDE = 339,
+     PLUS = 340,
+     STAR = 341,
+     SLASH = 342,
+     PERCENT = 343,
+     LEFT_ANGLE = 344,
+     RIGHT_ANGLE = 345,
+     VERTICAL_BAR = 346,
+     CARET = 347,
+     AMPERSAND = 348,
+     QUESTION = 349
    };
 #endif
 /* Tokens.  */
@@ -173,57 +174,58 @@
 #define WHILE 295
 #define SAMPLER2D 296
 #define SAMPLERCUBE 297
-#define IDENTIFIER 298
-#define TYPE_NAME 299
-#define FLOATCONSTANT 300
-#define INTCONSTANT 301
-#define BOOLCONSTANT 302
-#define FIELD_SELECTION 303
-#define LEFT_OP 304
-#define RIGHT_OP 305
-#define INC_OP 306
-#define DEC_OP 307
-#define LE_OP 308
-#define GE_OP 309
-#define EQ_OP 310
-#define NE_OP 311
-#define AND_OP 312
-#define OR_OP 313
-#define XOR_OP 314
-#define MUL_ASSIGN 315
-#define DIV_ASSIGN 316
-#define ADD_ASSIGN 317
-#define MOD_ASSIGN 318
-#define LEFT_ASSIGN 319
-#define RIGHT_ASSIGN 320
-#define AND_ASSIGN 321
-#define XOR_ASSIGN 322
-#define OR_ASSIGN 323
-#define SUB_ASSIGN 324
-#define LEFT_PAREN 325
-#define RIGHT_PAREN 326
-#define LEFT_BRACKET 327
-#define RIGHT_BRACKET 328
-#define LEFT_BRACE 329
-#define RIGHT_BRACE 330
-#define DOT 331
-#define COMMA 332
-#define COLON 333
-#define EQUAL 334
-#define SEMICOLON 335
-#define BANG 336
-#define DASH 337
-#define TILDE 338
-#define PLUS 339
-#define STAR 340
-#define SLASH 341
-#define PERCENT 342
-#define LEFT_ANGLE 343
-#define RIGHT_ANGLE 344
-#define VERTICAL_BAR 345
-#define CARET 346
-#define AMPERSAND 347
-#define QUESTION 348
+#define SAMPLER_EXTERNAL_OES 298
+#define IDENTIFIER 299
+#define TYPE_NAME 300
+#define FLOATCONSTANT 301
+#define INTCONSTANT 302
+#define BOOLCONSTANT 303
+#define FIELD_SELECTION 304
+#define LEFT_OP 305
+#define RIGHT_OP 306
+#define INC_OP 307
+#define DEC_OP 308
+#define LE_OP 309
+#define GE_OP 310
+#define EQ_OP 311
+#define NE_OP 312
+#define AND_OP 313
+#define OR_OP 314
+#define XOR_OP 315
+#define MUL_ASSIGN 316
+#define DIV_ASSIGN 317
+#define ADD_ASSIGN 318
+#define MOD_ASSIGN 319
+#define LEFT_ASSIGN 320
+#define RIGHT_ASSIGN 321
+#define AND_ASSIGN 322
+#define XOR_ASSIGN 323
+#define OR_ASSIGN 324
+#define SUB_ASSIGN 325
+#define LEFT_PAREN 326
+#define RIGHT_PAREN 327
+#define LEFT_BRACKET 328
+#define RIGHT_BRACKET 329
+#define LEFT_BRACE 330
+#define RIGHT_BRACE 331
+#define DOT 332
+#define COMMA 333
+#define COLON 334
+#define EQUAL 335
+#define SEMICOLON 336
+#define BANG 337
+#define DASH 338
+#define TILDE 339
+#define PLUS 340
+#define STAR 341
+#define SLASH 342
+#define PERCENT 343
+#define LEFT_ANGLE 344
+#define RIGHT_ANGLE 345
+#define VERTICAL_BAR 346
+#define CARET 347
+#define AMPERSAND 348
+#define QUESTION 349