Add support for EXT_YUV_target

Add new sampler type "__samplerExternal2DY2YEXT"
to sample a YUV texture image and output color value
without any color conversion,
new additional type to specify color space standard formula and
built-in functions for yuv to rgb transformation.

Change-Id: I1780650fe84cd75191c1ca1e4118e89d585bfd92
Reviewed-on: https://chromium-review.googlesource.com/454697
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/compiler/fuzz/translator_fuzzer.cpp b/src/compiler/fuzz/translator_fuzzer.cpp
index 6a89c25..dcc0562 100644
--- a/src/compiler/fuzz/translator_fuzzer.cpp
+++ b/src/compiler/fuzz/translator_fuzzer.cpp
@@ -150,6 +150,7 @@
         resources.EXT_shader_framebuffer_fetch    = 1;
         resources.NV_shader_framebuffer_fetch     = 1;
         resources.ARM_shader_framebuffer_fetch    = 1;
+        resources.EXT_YUV_target                  = 1;
         resources.MaxDualSourceDrawBuffers        = 1;
 
         if (!translator->Init(resources))
diff --git a/src/compiler/translator/BaseTypes.h b/src/compiler/translator/BaseTypes.h
index 2425714..905b59f 100644
--- a/src/compiler/translator/BaseTypes.h
+++ b/src/compiler/translator/BaseTypes.h
@@ -65,13 +65,15 @@
     EbtIVec,               // non type: represents ivec2, ivec3, and ivec4
     EbtUVec,               // non type: represents uvec2, uvec3, and uvec4
     EbtBVec,               // non type: represents bvec2, bvec3, and bvec4
+    EbtYuvCscStandardEXT,  // Only valid if EXT_YUV_target exists.
     EbtGuardSamplerBegin,  // non type: see implementation of IsSampler()
     EbtSampler2D,
     EbtSampler3D,
     EbtSamplerCube,
     EbtSampler2DArray,
-    EbtSamplerExternalOES,  // Only valid if OES_EGL_image_external exists.
-    EbtSampler2DRect,       // Only valid if GL_ARB_texture_rectangle exists.
+    EbtSamplerExternalOES,       // Only valid if OES_EGL_image_external exists.
+    EbtSamplerExternal2DY2YEXT,  // Only valid if GL_EXT_YUV_target exists.
+    EbtSampler2DRect,            // Only valid if GL_ARB_texture_rectangle exists.
     EbtSampler2DMS,
     EbtISampler2D,
     EbtISampler3D,
@@ -221,6 +223,7 @@
         case EbtSampler3D:
         case EbtSamplerCube:
         case EbtSamplerExternalOES:
+        case EbtSamplerExternal2DY2YEXT:
         case EbtSampler2DRect:
         case EbtSampler2DArray:
         case EbtSampler2DShadow:
@@ -310,6 +313,7 @@
         case EbtUSampler2DArray:
         case EbtSampler2DRect:
         case EbtSamplerExternalOES:
+        case EbtSamplerExternal2DY2YEXT:
         case EbtSampler2DShadow:
         case EbtSampler2DArrayShadow:
         case EbtSampler2DMS:
@@ -343,6 +347,7 @@
         case EbtSampler2D:
         case EbtSampler3D:
         case EbtSamplerExternalOES:
+        case EbtSamplerExternal2DY2YEXT:
         case EbtSampler2DRect:
         case EbtSampler2DArray:
         case EbtSampler2DMS:
@@ -375,6 +380,7 @@
         case EbtSampler2D:
         case EbtSamplerCube:
         case EbtSamplerExternalOES:
+        case EbtSamplerExternal2DY2YEXT:
         case EbtSampler2DRect:
         case EbtSampler2DArray:
         case EbtSampler2DMS:
@@ -411,6 +417,7 @@
         case EbtUSampler2D:
         case EbtSampler2DRect:
         case EbtSamplerExternalOES:
+        case EbtSamplerExternal2DY2YEXT:
         case EbtSampler3D:
         case EbtISampler3D:
         case EbtUSampler3D:
@@ -452,6 +459,7 @@
         case EbtSampler3D:
         case EbtSamplerCube:
         case EbtSamplerExternalOES:
+        case EbtSamplerExternal2DY2YEXT:
         case EbtSampler2DRect:
         case EbtSampler2DArray:
         case EbtSampler2DMS:
@@ -599,6 +607,14 @@
     EbsStd140
 };
 
+enum TYuvCscStandardEXT
+{
+    EycsUndefined,
+    EycsItu601,
+    EycsItu601FullRange,
+    EycsItu709
+};
+
 struct TLayoutQualifier
 {
     int location;
@@ -617,6 +633,9 @@
     // OVR_multiview num_views.
     int numViews;
 
+    // EXT_YUV_target yuv layout qualifier.
+    bool yuv;
+
     static TLayoutQualifier create()
     {
         TLayoutQualifier layoutQualifier;
@@ -629,6 +648,7 @@
         layoutQualifier.localSize.fill(-1);
         layoutQualifier.binding  = -1;
         layoutQualifier.numViews = -1;
+        layoutQualifier.yuv      = false;
 
         layoutQualifier.imageInternalFormat = EiifUnspecified;
         return layoutQualifier;
@@ -636,7 +656,7 @@
 
     bool isEmpty() const
     {
-        return location == -1 && binding == -1 && numViews == -1 &&
+        return location == -1 && binding == -1 && numViews == -1 && yuv == false &&
                matrixPacking == EmpUnspecified && blockStorage == EbsUnspecified &&
                !localSize.isAnyValueSet() && imageInternalFormat == EiifUnspecified;
     }
@@ -649,9 +669,9 @@
             (location != -1 || binding != -1 || matrixPacking != EmpUnspecified ||
              blockStorage != EbsUnspecified || imageInternalFormat != EiifUnspecified);
 
-        // we can have either the work group size specified, or number of views, or the other layout
-        // qualifiers.
-        return (workSizeSpecified ? 1 : 0) + (numViewsSet ? 1 : 0) +
+        // we can have either the work group size specified, or number of views,
+        // or yuv layout qualifier, or the other layout qualifiers.
+        return (workSizeSpecified ? 1 : 0) + (numViewsSet ? 1 : 0) + (yuv ? 1 : 0) +
                    (otherLayoutQualifiersSpecified ? 1 : 0) <=
                1;
     }
@@ -842,6 +862,33 @@
     }
 }
 
+inline TYuvCscStandardEXT getYuvCscStandardEXT(const std::string &str)
+{
+    if (str == "itu_601")
+        return EycsItu601;
+    else if (str == "itu_601_full_range")
+        return EycsItu601FullRange;
+    else if (str == "itu_709")
+        return EycsItu709;
+    return EycsUndefined;
+}
+
+inline const char *getYuvCscStandardEXTString(TYuvCscStandardEXT ycsq)
+{
+    switch (ycsq)
+    {
+        case EycsItu601:
+            return "itu_601";
+        case EycsItu601FullRange:
+            return "itu_601_full_range";
+        case EycsItu709:
+            return "itu_709";
+        default:
+            UNREACHABLE();
+            return "unknown color space conversion standard";
+    }
+}
+
 }  // namespace sh
 
 #endif  // COMPILER_TRANSLATOR_BASETYPES_H_
diff --git a/src/compiler/translator/Compiler.cpp b/src/compiler/translator/Compiler.cpp
index 58dd39f..8ebd231 100644
--- a/src/compiler/translator/Compiler.cpp
+++ b/src/compiler/translator/Compiler.cpp
@@ -571,6 +571,8 @@
     initSamplerDefaultPrecision(EbtSamplerCube);
     // SamplerExternalOES is specified in the extension to have default precision.
     initSamplerDefaultPrecision(EbtSamplerExternalOES);
+    // SamplerExternal2DY2YEXT is specified in the extension to have default precision.
+    initSamplerDefaultPrecision(EbtSamplerExternal2DY2YEXT);
     // It isn't specified whether Sampler2DRect has default precision.
     initSamplerDefaultPrecision(EbtSampler2DRect);
 
@@ -618,6 +620,7 @@
         << ":EXT_shader_framebuffer_fetch:" << compileResources.EXT_shader_framebuffer_fetch
         << ":NV_shader_framebuffer_fetch:" << compileResources.NV_shader_framebuffer_fetch
         << ":ARM_shader_framebuffer_fetch:" << compileResources.ARM_shader_framebuffer_fetch
+        << ":EXT_YUV_target:" << compileResources.EXT_YUV_target
         << ":MaxVertexOutputVectors:" << compileResources.MaxVertexOutputVectors
         << ":MaxFragmentInputVectors:" << compileResources.MaxFragmentInputVectors
         << ":MinProgramTexelOffset:" << compileResources.MinProgramTexelOffset
diff --git a/src/compiler/translator/ConstantUnion.cpp b/src/compiler/translator/ConstantUnion.cpp
index 464c30c..b960e42 100644
--- a/src/compiler/translator/ConstantUnion.cpp
+++ b/src/compiler/translator/ConstantUnion.cpp
@@ -198,6 +198,11 @@
     return b == bConst;
 }
 
+bool TConstantUnion::operator==(const TYuvCscStandardEXT s) const
+{
+    return s == yuvCscStandardEXTConst;
+}
+
 bool TConstantUnion::operator==(const TConstantUnion &constant) const
 {
     if (constant.type != type)
@@ -213,6 +218,8 @@
             return constant.fConst == fConst;
         case EbtBool:
             return constant.bConst == bConst;
+        case EbtYuvCscStandardEXT:
+            return constant.yuvCscStandardEXTConst == yuvCscStandardEXTConst;
         default:
             return false;
     }
@@ -238,6 +245,11 @@
     return !operator==(b);
 }
 
+bool TConstantUnion::operator!=(const TYuvCscStandardEXT s) const
+{
+    return !operator==(s);
+}
+
 bool TConstantUnion::operator!=(const TConstantUnion &constant) const
 {
     return !operator==(constant);
diff --git a/src/compiler/translator/ConstantUnion.h b/src/compiler/translator/ConstantUnion.h
index dbec67e..870acb6 100644
--- a/src/compiler/translator/ConstantUnion.h
+++ b/src/compiler/translator/ConstantUnion.h
@@ -46,20 +46,29 @@
         type   = EbtBool;
     }
 
+    void setYuvCscStandardEXTConst(TYuvCscStandardEXT s)
+    {
+        yuvCscStandardEXTConst = s;
+        type                   = EbtYuvCscStandardEXT;
+    }
+
     int getIConst() const { return iConst; }
     unsigned int getUConst() const { return uConst; }
     float getFConst() const { return fConst; }
     bool getBConst() const { return bConst; }
+    TYuvCscStandardEXT getYuvCscStandardEXTConst() const { return yuvCscStandardEXTConst; }
 
     bool operator==(const int i) const;
     bool operator==(const unsigned int u) const;
     bool operator==(const float f) const;
     bool operator==(const bool b) const;
+    bool operator==(const TYuvCscStandardEXT s) const;
     bool operator==(const TConstantUnion &constant) const;
     bool operator!=(const int i) const;
     bool operator!=(const unsigned int u) const;
     bool operator!=(const float f) const;
     bool operator!=(const bool b) const;
+    bool operator!=(const TYuvCscStandardEXT s) const;
     bool operator!=(const TConstantUnion &constant) const;
     bool operator>(const TConstantUnion &constant) const;
     bool operator<(const TConstantUnion &constant) const;
@@ -97,6 +106,7 @@
         unsigned int uConst;  // used for uvec, scalar uints
         bool bConst;          // used for bvec, scalar bools
         float fConst;         // used for vec, mat, scalar floats
+        TYuvCscStandardEXT yuvCscStandardEXTConst;
     };
 
     TBasicType type;
diff --git a/src/compiler/translator/Initialize.cpp b/src/compiler/translator/Initialize.cpp
index 1bad320..9abf7d3 100644
--- a/src/compiler/translator/Initialize.cpp
+++ b/src/compiler/translator/Initialize.cpp
@@ -391,6 +391,25 @@
                                   float4);
     }
 
+    if (resources.EXT_YUV_target)
+    {
+        const TType *samplerExternal2DY2YEXT = TCache::getType(EbtSamplerExternal2DY2YEXT);
+
+        symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "texture",
+                                  samplerExternal2DY2YEXT, float2);
+        symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "textureProj",
+                                  samplerExternal2DY2YEXT, float3);
+        symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "textureProj",
+                                  samplerExternal2DY2YEXT, float4);
+
+        const TType *yuvCscStandardEXT = TCache::getType(EbtYuvCscStandardEXT);
+
+        symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float3, "rgb_2_yuv", float3,
+                                  yuvCscStandardEXT);
+        symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float3, "yuv_2_rgb", float3,
+                                  yuvCscStandardEXT);
+    }
+
     if (type == GL_FRAGMENT_SHADER)
     {
         symbolTable.insertBuiltIn(ESSL3_BUILTINS, gvec4, "texture", gsampler2D, float2, float1);
@@ -413,6 +432,18 @@
             symbolTable.insertBuiltIn(ESSL3_BUILTINS, float4, "textureProj", samplerExternalOES,
                                       float4, float1);
         }
+
+        if (resources.EXT_YUV_target)
+        {
+            const TType *samplerExternal2DY2YEXT = TCache::getType(EbtSamplerExternal2DY2YEXT);
+
+            symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "texture",
+                                      samplerExternal2DY2YEXT, float2, float1);
+            symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "textureProj",
+                                      samplerExternal2DY2YEXT, float3, float1);
+            symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "textureProj",
+                                      samplerExternal2DY2YEXT, float4, float1);
+        }
     }
 
     const TType *sampler2DShadow      = TCache::getType(EbtSampler2DShadow);
@@ -452,6 +483,14 @@
         symbolTable.insertBuiltIn(ESSL3_BUILTINS, int2, "textureSize", samplerExternalOES, int1);
     }
 
+    if (resources.EXT_YUV_target)
+    {
+        const TType *samplerExternal2DY2YEXT = TCache::getType(EbtSamplerExternal2DY2YEXT);
+
+        symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", int2, "textureSize",
+                                  samplerExternal2DY2YEXT, int1);
+    }
+
     if (type == GL_FRAGMENT_SHADER)
     {
         symbolTable.insertBuiltInOp(ESSL3_BUILTINS, EOpDFdx, genType, genType);
@@ -532,6 +571,14 @@
                                   int1);
     }
 
+    if (resources.EXT_YUV_target)
+    {
+        const TType *samplerExternal2DY2YEXT = TCache::getType(EbtSamplerExternal2DY2YEXT);
+
+        symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "texelFetch",
+                                  samplerExternal2DY2YEXT, int2, int1);
+    }
+
     symbolTable.insertBuiltIn(ESSL3_BUILTINS, gvec4, "texelFetchOffset", gsampler2D, int2, int1,
                               int2);
     symbolTable.insertBuiltIn(ESSL3_BUILTINS, gvec4, "texelFetchOffset", gsampler3D, int3, int1,
@@ -906,6 +953,10 @@
         extBehavior["GL_OVR_multiview"]  = EBhUndefined;
         extBehavior["GL_OVR_multiview2"] = EBhUndefined;
     }
+    if (resources.EXT_YUV_target)
+    {
+        extBehavior["GL_EXT_YUV_target"] = EBhUndefined;
+    }
 }
 
 void ResetExtensionBehavior(TExtensionBehavior &extBehavior)
diff --git a/src/compiler/translator/OutputGLSLBase.cpp b/src/compiler/translator/OutputGLSLBase.cpp
index 6557501..b5a8b1e 100644
--- a/src/compiler/translator/OutputGLSLBase.cpp
+++ b/src/compiler/translator/OutputGLSLBase.cpp
@@ -73,6 +73,11 @@
         return true;
     }
 
+    if (type.getQualifier() == EvqFragmentOut && layoutQualifier.yuv == true)
+    {
+        return true;
+    }
+
     if (IsOpaqueType(type.getBasicType()) && layoutQualifier.binding != -1)
     {
         return true;
@@ -214,6 +219,14 @@
         }
     }
 
+    if (type.getQualifier() == EvqFragmentOut)
+    {
+        if (layoutQualifier.yuv == true)
+        {
+            out << listItemPrefix << "yuv";
+        }
+    }
+
     if (IsOpaqueType(type.getBasicType()))
     {
         if (layoutQualifier.binding >= 0)
@@ -414,6 +427,9 @@
                 case EbtBool:
                     out << pConstUnion->getBConst();
                     break;
+                case EbtYuvCscStandardEXT:
+                    out << getYuvCscStandardEXTString(pConstUnion->getYuvCscStandardEXTConst());
+                    break;
                 default:
                     UNREACHABLE();
             }
diff --git a/src/compiler/translator/ParseContext.cpp b/src/compiler/translator/ParseContext.cpp
index 47325d4..bb08882 100644
--- a/src/compiler/translator/ParseContext.cpp
+++ b/src/compiler/translator/ParseContext.cpp
@@ -1188,6 +1188,15 @@
         return;
     }
 
+    if ((publicType.qualifier != EvqTemporary && publicType.qualifier != EvqGlobal &&
+         publicType.qualifier != EvqConst) &&
+        publicType.getBasicType() == EbtYuvCscStandardEXT)
+    {
+        error(identifierLocation, "cannot be used with a yuvCscStandardEXT",
+              getQualifierString(publicType.qualifier));
+        return;
+    }
+
     // check for layout qualifier issues
     const TLayoutQualifier layoutQualifier = publicType.layoutQualifier;
 
@@ -1226,6 +1235,19 @@
         checkLocationIsNotSpecified(identifierLocation, publicType.layoutQualifier);
     }
 
+    if (publicType.qualifier == EvqFragmentOut)
+    {
+        if (layoutQualifier.location != -1 && layoutQualifier.yuv == true)
+        {
+            error(identifierLocation, "invalid layout qualifier combination", "yuv");
+            return;
+        }
+    }
+    else
+    {
+        checkYuvIsNotSpecified(identifierLocation, layoutQualifier.yuv);
+    }
+
     if (IsImage(publicType.getBasicType()))
     {
 
@@ -1402,6 +1424,14 @@
     }
 }
 
+void TParseContext::checkYuvIsNotSpecified(const TSourceLoc &location, bool yuv)
+{
+    if (yuv != false)
+    {
+        error(location, "invalid layout qualifier: only valid on program outputs", "yuv");
+    }
+}
+
 void TParseContext::functionCallLValueErrorCheck(const TFunction *fnCandidate,
                                                  TIntermAggregate *fnCall)
 {
@@ -2340,6 +2370,8 @@
 
     checkInternalFormatIsNotSpecified(typeQualifier.line, layoutQualifier.imageInternalFormat);
 
+    checkYuvIsNotSpecified(typeQualifier.line, layoutQualifier.yuv);
+
     if (typeQualifier.qualifier == EvqComputeIn)
     {
         if (mComputeShaderLocalSizeDeclared &&
@@ -2818,6 +2850,8 @@
     // TODO(oetuaho): Remove this and support binding for blocks.
     checkBindingIsNotSpecified(typeQualifier.line, typeQualifier.layoutQualifier.binding);
 
+    checkYuvIsNotSpecified(typeQualifier.line, typeQualifier.layoutQualifier.yuv);
+
     TLayoutQualifier blockLayoutQualifier = typeQualifier.layoutQualifier;
     checkLocationIsNotSpecified(typeQualifier.line, blockLayoutQualifier);
 
@@ -3304,6 +3338,11 @@
         error(qualifierTypeLine, "invalid layout qualifier: location requires an argument",
               qualifierType.c_str());
     }
+    else if (qualifierType == "yuv" && isExtensionEnabled("GL_EXT_YUV_target") &&
+             mShaderType == GL_FRAGMENT_SHADER)
+    {
+        qualifier.yuv = true;
+    }
     else if (qualifierType == "rgba32f")
     {
         checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
diff --git a/src/compiler/translator/ParseContext.h b/src/compiler/translator/ParseContext.h
index 6283d30..66dda7f 100644
--- a/src/compiler/translator/ParseContext.h
+++ b/src/compiler/translator/ParseContext.h
@@ -399,6 +399,8 @@
                                      int objectLocationCount,
                                      const TLayoutQualifier &layoutQualifier);
 
+    void checkYuvIsNotSpecified(const TSourceLoc &location, bool yuv);
+
     TIntermTyped *addBinaryMathInternal(TOperator op,
                                         TIntermTyped *left,
                                         TIntermTyped *right,
diff --git a/src/compiler/translator/QualifierTypes.cpp b/src/compiler/translator/QualifierTypes.cpp
index 51c563a..a70ff97 100644
--- a/src/compiler/translator/QualifierTypes.cpp
+++ b/src/compiler/translator/QualifierTypes.cpp
@@ -560,6 +560,10 @@
         joinedQualifier.location = rightQualifier.location;
         ++joinedQualifier.locationsSpecified;
     }
+    if (rightQualifier.yuv != false)
+    {
+        joinedQualifier.yuv = rightQualifier.yuv;
+    }
     if (rightQualifier.binding != -1)
     {
         joinedQualifier.binding = rightQualifier.binding;
diff --git a/src/compiler/translator/ShaderLang.cpp b/src/compiler/translator/ShaderLang.cpp
index fe7c71d..11b83f3 100644
--- a/src/compiler/translator/ShaderLang.cpp
+++ b/src/compiler/translator/ShaderLang.cpp
@@ -163,6 +163,7 @@
     resources->NV_shader_framebuffer_fetch     = 0;
     resources->ARM_shader_framebuffer_fetch    = 0;
     resources->OVR_multiview                   = 0;
+    resources->EXT_YUV_target                  = 0;
 
     resources->NV_draw_buffers = 0;
 
diff --git a/src/compiler/translator/Types.cpp b/src/compiler/translator/Types.cpp
index c7982f3..9664623 100644
--- a/src/compiler/translator/Types.cpp
+++ b/src/compiler/translator/Types.cpp
@@ -33,6 +33,8 @@
             return "uint";
         case EbtBool:
             return "bool";
+        case EbtYuvCscStandardEXT:
+            return "yuvCscStandardEXT";
         case EbtSampler2D:
             return "sampler2D";
         case EbtSampler3D:
@@ -41,6 +43,8 @@
             return "samplerCube";
         case EbtSamplerExternalOES:
             return "samplerExternalOES";
+        case EbtSamplerExternal2DY2YEXT:
+            return "__samplerExternal2DY2YEXT";
         case EbtSampler2DRect:
             return "sampler2DRect";
         case EbtSampler2DArray:
@@ -292,6 +296,9 @@
         case EbtBool:
             mangledName += 'b';
             break;
+        case EbtYuvCscStandardEXT:
+            mangledName += "ycs";
+            break;
         case EbtSampler2D:
             mangledName += "s2";
             break;
@@ -307,6 +314,9 @@
         case EbtSamplerExternalOES:
             mangledName += "sext";
             break;
+        case EbtSamplerExternal2DY2YEXT:
+            mangledName += "sext2y2y";
+            break;
         case EbtSampler2DRect:
             mangledName += "s2r";
             break;
diff --git a/src/compiler/translator/ValidateOutputs.cpp b/src/compiler/translator/ValidateOutputs.cpp
index 2e0303c..733fe9a 100644
--- a/src/compiler/translator/ValidateOutputs.cpp
+++ b/src/compiler/translator/ValidateOutputs.cpp
@@ -25,7 +25,8 @@
     : TIntermTraverser(true, false, false),
       mMaxDrawBuffers(maxDrawBuffers),
       mAllowUnspecifiedOutputLocationResolution(
-          IsExtensionEnabled(extBehavior, "GL_EXT_blend_func_extended"))
+          IsExtensionEnabled(extBehavior, "GL_EXT_blend_func_extended")),
+      mUsesFragDepth(false)
 {
 }
 
@@ -41,14 +42,22 @@
 
     if (qualifier == EvqFragmentOut)
     {
-        if (symbol->getType().getLayoutQualifier().location == -1)
-        {
-            mUnspecifiedLocationOutputs.push_back(symbol);
-        }
-        else
+        if (symbol->getType().getLayoutQualifier().location != -1)
         {
             mOutputs.push_back(symbol);
         }
+        else if (symbol->getType().getLayoutQualifier().yuv == true)
+        {
+            mYuvOutputs.push_back(symbol);
+        }
+        else
+        {
+            mUnspecifiedLocationOutputs.push_back(symbol);
+        }
+    }
+    else if (qualifier == EvqFragDepth || qualifier == EvqFragDepthEXT)
+    {
+        mUsesFragDepth = true;
     }
 }
 
@@ -106,6 +115,18 @@
                   diagnostics);
         }
     }
+
+    if (!mYuvOutputs.empty() && (mYuvOutputs.size() > 1 || mUsesFragDepth || !mOutputs.empty() ||
+                                 !mUnspecifiedLocationOutputs.empty()))
+    {
+        for (const auto &symbol : mYuvOutputs)
+        {
+            error(*symbol,
+                  "not allowed to specify yuv qualifier when using depth or multiple color "
+                  "fragment outputs",
+                  diagnostics);
+        }
+    }
 }
 
 }  // namespace sh
diff --git a/src/compiler/translator/ValidateOutputs.h b/src/compiler/translator/ValidateOutputs.h
index 152d475..c9282d2 100644
--- a/src/compiler/translator/ValidateOutputs.h
+++ b/src/compiler/translator/ValidateOutputs.h
@@ -29,10 +29,12 @@
   private:
     int mMaxDrawBuffers;
     bool mAllowUnspecifiedOutputLocationResolution;
+    bool mUsesFragDepth;
 
     typedef std::vector<TIntermSymbol *> OutputVector;
     OutputVector mOutputs;
     OutputVector mUnspecifiedLocationOutputs;
+    OutputVector mYuvOutputs;
     std::set<std::string> mVisitedSymbols;
 };
 
diff --git a/src/compiler/translator/glslang.l b/src/compiler/translator/glslang.l
index 91f6ad5..c123bc6 100644
--- a/src/compiler/translator/glslang.l
+++ b/src/compiler/translator/glslang.l
@@ -79,10 +79,12 @@
 static int ES2_ident_ES3_reserved_ES3_1_keyword(TParseContext *context, int token);
 static int ES2_and_ES3_reserved_ES3_1_keyword(TParseContext *context, int token);
 static int ES2_and_ES3_ident_ES3_1_keyword(TParseContext *context, int token);
+static int ES3_extension_keyword_else_ident(TParseContext *context, const char *extension, int token);
 static int uint_constant(TParseContext *context);
 static int int_constant(TParseContext *context);
 static int float_constant(yyscan_t yyscanner);
 static int floatsuffix_check(TParseContext* context);
+static int yuvcscstandardext_constant(TParseContext *context);
 %}
 
 %option noyywrap nounput never-interactive
@@ -194,11 +196,17 @@
 "sampler2DShadow"      { return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
 "samplerCubeShadow"    { return ES2_ident_ES3_keyword(context, SAMPLERCUBESHADOW); }
 "sampler2DArrayShadow" { return ES2_ident_ES3_keyword(context, SAMPLER2DARRAYSHADOW); }
+"__samplerExternal2DY2YEXT"   { return ES3_extension_keyword_else_ident(context, "GL_EXT_YUV_target", SAMPLEREXTERNAL2DY2YEXT); }
 
 "struct"       { return STRUCT; }
 
 "layout"  { return ES2_ident_ES3_keyword(context, LAYOUT); }
 
+"yuvCscStandardEXT"    { return ES3_extension_keyword_else_ident(context, "GL_EXT_YUV_target", YUVCSCSTANDARDEXT); }
+"itu_601"              { return yuvcscstandardext_constant(context); }
+"itu_601_full_range"   { return yuvcscstandardext_constant(context); }
+"itu_709"              { return yuvcscstandardext_constant(context); }
+
 "image2D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2D); }
 "iimage2D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2D); }
 "uimage2D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2D); }
@@ -533,6 +541,21 @@
     return token;
 }
 
+int ES3_extension_keyword_else_ident(TParseContext *context, const char* extension, int token)
+{
+    struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
+    yyscan_t yyscanner = (yyscan_t) context->getScanner();
+
+    // a reserved word in GLSL ES 3.00 with enabled extension, otherwise could be used as an identifier/type name
+    if (context->getShaderVersion() >= 300 && context->isExtensionEnabled(extension))
+    {
+        return token;
+    }
+
+    yylval->lex.string = NewPoolTString(yytext);
+    return check_type(yyscanner);
+}
+
 int uint_constant(TParseContext *context)
 {
     struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
@@ -594,6 +617,22 @@
     return FLOATCONSTANT;
 }
 
+int yuvcscstandardext_constant(TParseContext *context)
+{
+    struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
+    yyscan_t yyscanner = (yyscan_t) context->getScanner();
+
+    // a reserved word in GLSL ES 3.00 with enabled extension, otherwise could be used as an identifier/type name
+    if (context->getShaderVersion() >= 300 && context->isExtensionEnabled("GL_EXT_YUV_target"))
+    {
+        yylval->lex.string = NewPoolTString(yytext);
+        return YUVCSCSTANDARDEXTCONSTANT;
+    }
+
+    yylval->lex.string = NewPoolTString(yytext);
+    return check_type(yyscanner);
+}
+
 int glslang_initialize(TParseContext* context) {
     yyscan_t scanner = NULL;
     if (yylex_init_extra(context, &scanner))
diff --git a/src/compiler/translator/glslang.y b/src/compiler/translator/glslang.y
index 8674087..d67752c 100644
--- a/src/compiler/translator/glslang.y
+++ b/src/compiler/translator/glslang.y
@@ -178,9 +178,11 @@
 %token <lex> USAMPLER2D USAMPLER3D USAMPLERCUBE USAMPLER2DARRAY
 %token <lex> SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS
 %token <lex> SAMPLER3D SAMPLER3DRECT SAMPLER2DSHADOW SAMPLERCUBESHADOW SAMPLER2DARRAYSHADOW
+%token <lex> SAMPLEREXTERNAL2DY2YEXT
 %token <lex> IMAGE2D IIMAGE2D UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D IMAGE2DARRAY IIMAGE2DARRAY UIMAGE2DARRAY
 %token <lex> IMAGECUBE IIMAGECUBE UIMAGECUBE
 %token <lex> LAYOUT
+%token <lex> YUVCSCSTANDARDEXT YUVCSCSTANDARDEXTCONSTANT
 
 %token <lex> IDENTIFIER TYPE_NAME FLOATCONSTANT INTCONSTANT UINTCONSTANT BOOLCONSTANT
 %token <lex> FIELD_SELECTION
@@ -280,6 +282,14 @@
         unionArray->setBConst($1.b);
         $$ = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), @1);
     }
+    | YUVCSCSTANDARDEXTCONSTANT {
+        if (!context->isExtensionEnabled("GL_EXT_YUV_target")) {
+           context->error(@1, "unsupported value", $1.string->c_str());
+        }
+        TConstantUnion *unionArray = new TConstantUnion[1];
+        unionArray->setYuvCscStandardEXTConst(getYuvCscStandardEXT($1.string->c_str()));
+        $$ = context->intermediate.addConstantUnion(unionArray, TType(EbtYuvCscStandardEXT, EbpUndefined, EvqConst), @1);
+    }
     | LEFT_PAREN expression RIGHT_PAREN {
         $$ = $2;
     }
@@ -1130,6 +1140,12 @@
         $$.initialize(EbtFloat, @1);
         $$.setMatrix(4, 3);
     }
+    | YUVCSCSTANDARDEXT {
+        if (!context->isExtensionEnabled("GL_EXT_YUV_target")) {
+            context->error(@1, "unsupported type", "yuvCscStandardEXT");
+        }
+        $$.initialize(EbtYuvCscStandardEXT, @1);
+    }
     | SAMPLER2D {
         $$.initialize(EbtSampler2D, @1);
     }
@@ -1191,6 +1207,12 @@
         }
         $$.initialize(EbtSamplerExternalOES, @1);
     }
+    | SAMPLEREXTERNAL2DY2YEXT {
+        if (!context->isExtensionEnabled("GL_EXT_YUV_target")) {
+            context->error(@1, "unsupported type", "__samplerExternal2DY2YEXT");
+        }
+        $$.initialize(EbtSamplerExternal2DY2YEXT, @1);
+    }
     | SAMPLER2DRECT {
         if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
             context->error(@1, "unsupported type", "sampler2DRect");
diff --git a/src/compiler/translator/glslang_lex.cpp b/src/compiler/translator/glslang_lex.cpp
index d7c9e9b..6d00711 100644
--- a/src/compiler/translator/glslang_lex.cpp
+++ b/src/compiler/translator/glslang_lex.cpp
@@ -402,8 +402,8 @@
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 241
-#define YY_END_OF_BUFFER 242
+#define YY_NUM_RULES 246
+#define YY_END_OF_BUFFER 247
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -411,99 +411,105 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[824] =
+static yyconst flex_int16_t yy_accept[886] =
     {   0,
-        0,    0,    0,    0,  242,  240,  239,  239,  223,  229,
-      234,  218,  219,  227,  226,  215,  224,  222,  228,  181,
-      181,  216,  212,  230,  217,  231,  235,  178,  220,  221,
-      233,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  213,  232,  214,  225,  238,  237,  241,  236,  209,
-      195,  214,  203,  198,  193,  201,  191,  202,  192,  187,
-      194,  186,  180,  181,    0,  184,    0,  221,  213,  220,
-      210,  206,  208,  207,  211,  178,  199,  205,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+        0,    0,    0,    0,  247,  245,  244,  244,  228,  234,
+      239,  223,  224,  232,  231,  220,  229,  227,  233,  186,
+      186,  221,  217,  235,  222,  236,  240,  183,  225,  226,
+      238,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  218,  237,  219,  230,  243,  242,  246,
+      241,  214,  200,  219,  208,  203,  198,  206,  196,  207,
+      197,  192,  199,  191,  185,  186,    0,  189,    0,  226,
+      218,  225,  215,  211,  213,  212,  216,  183,  204,  210,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
 
-       12,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,   15,  178,  178,   23,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  200,  204,  236,    0,  190,  186,    0,  189,  183,
-        0,  185,  179,  196,  197,  178,  138,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-       13,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      183,  183,  183,   12,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,   15,  183,  183,
+       23,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  205,  209,  241,    0,
+      195,  191,    0,  194,  188,    0,  190,  184,  201,  202,
+      183,  183,  143,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,   13,  183,  183,  183,
 
-      178,   28,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,   24,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,    0,
-      187,    0,  186,  188,  182,  178,  178,  178,   31,  178,
-      178,   18,  175,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,   16,  141,  178,  178,  178,  178,   21,
-      178,  178,  145,  156,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  153,    4,   36,   37,
+      183,  183,  183,  183,  183,  183,  183,   28,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+       24,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,    0,  192,    0,
+      191,  193,  187,  183,  183,  183,  183,   31,  183,  183,
+       18,  180,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,   16,  146,  183,  183,  183,  183,   21,  183,
+      183,  150,  161,  183,  183,  183,  183,  183,  183,  183,
 
-       38,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  144,   32,  178,  178,
-       29,  178,  178,  178,  178,  178,  178,  178,   48,   49,
-       50,   30,  178,  178,  178,  178,  178,  178,   10,   54,
-       55,   56,  178,  139,  178,  178,    7,  178,  178,  178,
-      178,  165,  166,  167,  178,   33,  178,  157,   27,  168,
-      169,  170,    2,  162,  163,  164,  178,  178,  178,   25,
-      160,  178,  178,  178,   51,   52,   53,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  103,  178,
+      183,  183,  183,  183,  183,  183,  158,    4,   36,   37,
+       38,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  149,   32,  183,  183,
+       29,  183,  183,  183,  183,  183,  183,  183,   48,   49,
+       50,   30,  183,  183,  183,  183,  183,  183,  183,  183,
+       10,   54,   55,   56,  183,  144,  183,  183,    7,  183,
+      183,  183,  183,  170,  171,  172,  183,   33,  183,  162,
+       27,  173,  174,  175,    2,  167,  168,  169,  183,  183,
+      183,   25,  165,  183,  183,  183,  183,  183,   51,   52,
 
-      178,  178,  178,  178,  178,  178,  178,  154,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  140,
-      178,  178,  177,   57,   58,   59,  178,  178,   14,  178,
-      108,  178,  178,  178,  178,  106,  178,  178,  178,  155,
-      150,  109,  178,  178,  178,  178,  178,  178,  146,  178,
-      178,  178,   82,   39,   42,   44,   43,   40,   46,   45,
-       47,   41,  178,  178,  178,  178,  161,  137,  178,  178,
-      148,  178,  178,  178,   35,  104,   26,  174,   22,  149,
-       81,  178,  159,   17,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,   19,   34,
+       53,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  108,  183,  183,  183,  183,  183,  183,  183,
+      183,  159,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  145,  183,  183,  182,   57,   58,   59,
+      183,  183,   14,  183,  183,  183,  113,  183,  183,  183,
+      183,  111,  183,  183,  183,  160,  155,  114,  183,  183,
+      183,  183,  183,  183,  151,  183,  183,  183,  183,  183,
+       83,   39,   42,   44,   43,   40,   46,   45,   47,   41,
+      183,  183,  183,  183,  166,  142,  183,  183,  153,  183,
+      183,  183,   35,  109,   26,  179,   22,  154,   82,  183,
 
-      178,  178,  178,  178,  178,  178,  110,   83,   89,  178,
-      178,  178,  178,  178,    3,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  142,  178,  178,  178,
-      178,  178,    8,  178,  178,    9,  178,  178,  178,  178,
-       20,   97,   11,  151,  111,   84,   91,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  147,
-      178,  178,  178,   95,  100,   98,  178,  178,  178,  178,
-      178,  178,  178,  143,  112,   85,   90,  178,  178,  158,
-      178,   99,  178,  178,    6,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,   94,  152,    1,  178,  178,  178,
+      164,   17,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,   19,   34,
+      183,  183,  183,  183,  183,  183,  115,   88,   94,  183,
+      183,  183,  183,  183,   85,   87,    3,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  147,  183,
+      183,  183,  183,  183,    8,  183,  183,    9,  183,  183,
+      183,  183,  183,  183,   20,  102,   11,  156,  116,   89,
+       96,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  152,  183,  183,  183,  100,  105,
+      103,  183,  183,  183,  183,  183,  183,  183,  148,  117,
 
-      178,  178,  176,  178,  107,    5,  171,   60,   63,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,   96,  178,  178,  178,  178,   92,  178,  178,
-      178,  178,  178,  125,   68,   69,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  105,
-      178,  178,  178,   93,  127,   73,   74,  178,  178,  101,
-      178,  178,  178,  178,  178,  178,  178,  120,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,   67,  178,
-      178,  178,  178,   61,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  121,  113,  178,   86,
+       90,   95,  183,  183,  163,  183,  104,  183,  183,  183,
+      183,    6,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,   99,  157,    1,  183,  183,  183,  183,  183,  183,
+      181,  183,  112,    5,  176,   60,   63,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      101,  183,  183,  183,  183,  183,  183,   97,  183,  183,
+      183,  183,  183,  130,   68,   69,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      110,  183,  183,  183,   98,  132,   73,   74,  183,  183,
+      183,  183,  106,  183,  183,  183,  183,  183,  183,  183,
 
-      178,  178,  178,   72,  178,  178,   70,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      122,  178,  178,   77,  178,  178,   75,  114,   87,  178,
-      116,  178,  117,  178,  178,  178,  178,  178,  102,  178,
-      178,  178,  178,   65,  178,   64,  131,  178,  178,  115,
-       88,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  129,  132,  123,  178,   66,  178,  178,  178,  178,
-      178,  178,  178,  178,  130,  133,  178,  178,  126,   71,
-      178,  178,  172,  178,  178,  178,   78,  178,  178,  128,
-       76,  178,  178,  178,  178,  178,  178,  134,  178,  178,
+      125,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,   67,  183,  183,  183,  183,   61,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  126,  118,  183,   91,  183,  183,  183,   72,
+      183,  183,   70,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  127,  183,  183,
+       77,  183,  183,   75,  183,  183,  119,   92,  183,  121,
+      183,  122,  183,  183,  183,  183,  183,  183,  107,  183,
+      183,  183,  183,   65,  183,   64,  136,  183,  183,  120,
+       93,  183,  183,  183,  183,  183,  183,  183,  183,  183,
 
-      178,  178,  178,  178,  135,  178,  178,  178,   79,  178,
-      136,  118,  119,  178,  178,  178,   62,  178,  178,  173,
-      124,   80,    0
+      183,  183,  183,  134,  137,  183,  128,  183,   66,  183,
+      183,  183,  183,  183,  183,  183,  183,  135,  138,  183,
+      183,  183,  183,  131,   71,  183,  183,  183,  177,  183,
+      183,  183,   78,  183,  183,  133,   76,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  139,  183,  183,  183,
+      183,  183,  183,  183,  183,  140,  183,  183,  183,  183,
+       79,  183,  141,   84,  183,  123,  124,   86,  183,  183,
+      183,   62,  183,  183,  183,  178,  183,  129,   80,  183,
+      183,  183,  183,   81,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -513,15 +519,15 @@
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    2,    4,    1,    1,    1,    5,    6,    1,    7,
         8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
-       18,   19,   20,   20,   20,   21,   21,   22,   23,   24,
-       25,   26,   27,    1,   28,   29,   30,   31,   32,   33,
-       34,   34,   34,   34,   34,   34,   35,   34,   36,   34,
-       34,   37,   38,   34,   39,   34,   34,   40,   34,   34,
-       41,    1,   42,   43,   44,    1,   45,   46,   47,   48,
+       18,   19,   20,   21,   22,   23,   24,   25,   26,   27,
+       28,   29,   30,    1,   31,   32,   33,   34,   35,   36,
+       37,   37,   37,   37,   37,   37,   38,   37,   39,   37,
+       37,   40,   41,   42,   43,   37,   37,   44,   45,   37,
+       46,    1,   47,   48,   49,    1,   50,   51,   52,   53,
 
-       49,   50,   51,   52,   53,   34,   54,   55,   56,   57,
-       58,   59,   34,   60,   61,   62,   63,   64,   65,   66,
-       67,   68,   69,   70,   71,   72,    1,    1,    1,    1,
+       54,   55,   56,   57,   58,   37,   59,   60,   61,   62,
+       63,   64,   37,   65,   66,   67,   68,   69,   70,   71,
+       72,   73,   74,   75,   76,   77,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -538,334 +544,357 @@
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[73] =
+static yyconst flex_int32_t yy_meta[78] =
     {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    2,    2,    2,    2,    2,    2,
-        2,    1,    1,    1,    1,    1,    1,    3,    3,    3,
-        3,    2,    2,    4,    4,    4,    4,    4,    4,    4,
-        1,    1,    1,    4,    3,    3,    3,    3,    2,    2,
-        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    4,    4,    4,    4,    4,    4,    1,    1,
-        1,    1
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
+        1,    2,    3,    1,    4,    4,    4,    4,    4,    4,
+        4,    4,    4,    4,    1,    1,    1,    1,    1,    1,
+        5,    5,    5,    5,    6,    7,    8,    8,    8,    8,
+        8,    8,    9,    8,    8,    1,    1,    1,    8,    5,
+        5,    5,    5,    6,    7,    8,    8,    8,    8,    8,
+        8,    8,    8,    8,    8,    8,    8,    9,    8,    8,
+        8,    8,    8,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[829] =
+static yyconst flex_int16_t yy_base[895] =
     {   0,
-        0,    0,   72,    0, 1020, 1021, 1021, 1021,  994,  120,
-      141, 1021, 1021,  993,  138, 1021,  137,  135,  992,  154,
-      208,  990, 1021,  154,  990,  132, 1021,    0, 1021, 1021,
-      139,  130,  123,  140,  147,  133,  177,  956,  186,  151,
-      139,  116,  161,  950,  173,  963,  193,  199,  208,  215,
-      108, 1021,  184, 1021, 1021, 1021, 1021, 1021,    0, 1021,
-     1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021,  230,
-     1021,  235,  235,    0,  271, 1021,    0, 1021, 1021, 1021,
-      986, 1021, 1021, 1021,  985,    0, 1021, 1021,  947,  952,
-      152,  949,  957,  956,  943,  946,  957,  243,  951,  939,
+        0,    0,   77,    0, 1089, 1090, 1090, 1090, 1060,  127,
+      151, 1090, 1090, 1059,  148, 1090,  147,  145, 1058,  167,
+      158, 1056, 1090,  167, 1056,  145, 1090,    0, 1090, 1090,
+      149, 1034,  147,  135,  155,  162,  146,  174, 1019,  172,
+      178,  179,  153,  196, 1013,  198, 1026,  200,  197,  213,
+      202,  113, 1011, 1090,  153, 1090, 1090, 1090, 1090, 1090,
+        0, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+     1090,  237, 1090,  241,  237,  271,  243, 1090,    0, 1090,
+     1090, 1090, 1050, 1090, 1090, 1090, 1049,    0, 1090, 1090,
+     1010, 1008, 1013,  156, 1010, 1018, 1017, 1004, 1007, 1018,
 
-      936,  949,  936,  933,  933,  939,  147,  248,  933,  943,
-      929,  935,  938,  939,    0,  931,  941,  249,  940,  935,
-      916,  177,  920,  933,  924,  184,  917,  250,  929,  931,
-      257,  920,  251,  907,  916,  260,  257,  920,  916,  918,
-      907,  910,  196,  217,  269,  919,  907,  919,  262,  912,
-      911, 1021, 1021,    0,  311, 1021,  292,  328, 1021, 1021,
-      335,  342,  325, 1021, 1021,  910,    0,  906,  901,  905,
-      914,  911,  316,  895,  895,  906,  898,  215,  908,  905,
-      905,  903,  900,  892,  898,  885,  883,  895,  881,  897,
-        0,  894,  882,  889,  886,  890,  891,  884,  881,  870,
+      226, 1012, 1000,  997, 1010,  997,  994,  994, 1000,  189,
+      235,  994, 1004,  990,  996,  999, 1000,    0,  992, 1002,
+      230, 1001,  982,  995,  976,  216,  980,  993,  984,  243,
+      977,  237,  989,  991,  250,  980,  259,  967,  976,  253,
+      259,  980,  976,  978,  967,  970,  250,  255,  269,  979,
+      967,  979,  266,  972,  971,  959, 1090, 1090,    0,  318,
+     1090,  296,  323, 1090, 1090,  325,  324,  286, 1090, 1090,
+      977,  968,    0,  964,  959,  963,  972,  969,  298,  953,
+      953,  964,  956,  271,  966,  963,  963,  961,  958,  950,
+      956,  943,  941,  953,  939,  955,    0,  952,  940,  947,
 
-      869,  882,  885,  873,  881,  869,  875,  866,  316,  871,
-      874,  865,  872,  861,  865,  856,  870,  869,  860,  866,
-      308,  850,  853,  851,  850,  860,  850,  845,  843,  845,
-      855,  841,  843,  840,  851,  850,  853,  835,  318,  843,
-      839,  837,  846,  825,  354,  843,  845,  834,  826,  364,
-      378,  385,  397, 1021, 1021,  823,  833,  832,    0,  830,
-      372,    0,    0,  823,  821,  821,  822,  817,  825,  814,
-      831,  820,  390,    0,    0,  814,  824,  823,  823,    0,
-      808,  402,    0,    0,  810,  405,  817,  818,  809,  803,
-      802,  803,  802,  802,  408,  797,    0,    0,  793,  792,
+      944,  948,  949,  942,  939,  928,  927,  940,  943,  931,
+      942,  938,  926,  932,  923,  338,  928,  931,  922,  929,
+      918,  922,  913,  927,  926,  917,  923,  295,  907,  910,
+      908,  907,  917,  907,  902,  900,  902,  912,  898,  900,
+      897,  908,  907,  910,  892,  298,  900,  896,  894,  903,
+      882,  349,  900,  902,  891,  883,  916,  354,  370,  368,
+      383, 1090, 1090,  887,  878,  888,  887,    0,  885,  379,
+        0,    0,  878,  876,  876,  877,  872,  880,  869,  886,
+      875,  382,    0,    0,  869,  879,  878,  878,    0,  863,
+      385,    0,    0,  865,  390,  872,  873,  864,  858,  857,
 
-      791,  793,  794,  799,  793,  789,  802,  797,  797,  795,
-      794,  788,  782,  784,  783,  787,  792,  778,  781,  776,
-      784,  789,  777,  774,  786,  777,    0,    0,  783,  779,
-        0,  771,  771,  776,  767,  774,  414,  771,    0,    0,
-        0,    0,  761,  773,  772,  771,  772,  772,    0,    0,
-        0,    0,  759,    0,  767,  758,    0,  757,  758,  752,
-      762,    0,    0,    0,  753,    0,  749,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  759,  419,  758,    0,
-        0,  756,  752,  749,    0,    0,    0,  741,  421,  424,
-      427,  746,  742,  747,  738,  736,  749,  734,    0,  734,
+      858,  857,  857,  342,  393,  852,    0,    0,  848,  847,
+      846,  848,  849,  854,  848,  844,  857,  852,  852,  850,
+      849,  843,  837,  839,  838,  842,  847,  833,  836,  831,
+      839,  844,  832,  829,  841,  832,    0,    0,  838,  834,
+        0,  826,  826,  831,  822,  829,  396,  826,    0,    0,
+        0,    0,  816,  828,  827,  814,  815,  824,  825,  825,
+        0,    0,    0,    0,  812,    0,  820,  811,    0,  810,
+      811,  805,  815,    0,    0,    0,  806,    0,  802,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  812,  400,
+      811,    0,    0,  809,  805,  802,  846,  845,    0,    0,
 
-      747,  736,  732,  738,  733,  740,  740,    0,  737,  734,
-      738,  722,  720,  723,  729,  735,  730,  729,  717,    0,
-      719,  720,    0,    0,    0,    0,  717,  720,    0,  714,
-        0,  727,  707,  716,  711,    0,  704,  704,  717,    0,
-      719,    0,  434,  732,  731,  730,  697,  696,    0,  713,
-      712,  707,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  696,  709,  696,  693,    0,    0,  698,  697,
-        0,  694,  701,  700,    0,  686,    0,    0,    0,    0,
-        0,  683,    0,    0,  682,  693,  437,  686,  692,  691,
-      688,  683,  680,  673,  673,  686,  671,  683,    0,    0,
+        0,  792,  403,  409,  412,  797,  793,  798,  789,  787,
+      800,  785,    0,  785,  798,  787,  783,  789,  784,  791,
+      791,    0,  788,  785,  789,  773,  771,  774,  780,  786,
+      781,  780,  768,    0,  770,  771,    0,    0,    0,    0,
+      768,  771,    0,  765,  775,  766,    0,  776,  756,  765,
+      760,    0,  753,  753,  766,    0,  768,    0,  418,  783,
+      782,  781,  746,  745,    0,  762,  761,  756,  793,  784,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      743,  756,  743,  740,    0,    0,  745,  744,    0,  741,
+      748,  747,    0,  733,    0,    0,    0,    0,    0,  730,
 
-      676,  699,  698,  697,  664,  663,  339,  430,    0,  675,
-      678,  676,  665,  661,    0,  673,  670,  669,  659,  658,
-      648,  665,  651,  443,  659,  662,    0,  679,  678,  677,
-      644,  643,    0,  657,  644,    0,  654,  647,  648,  651,
-        0,    0,    0,    0,  671,  670,    0,  647,  650,  635,
-      642,  633,  640,  641,  641,  640,  626,  453,  638,    0,
-      639,  628,  627,    0,    0,    0,  652,  651,  650,  617,
-      616,  612,  620,    0,  648,  647,    0,  624,  627,    0,
-      460,    0,  605,  614,    0,  610,  609,  618,  618,  606,
-      620,  604,  618,  613,    0,    0,    0,  630,  629,  628,
+        0,    0,  729,  740,  423,  733,  739,  738,  735,  730,
+      727,  747,  733,  718,  718,  731,  716,  728,    0,    0,
+      721,  746,  745,  744,  709,  708,  233,  406,    0,  720,
+      723,  721,  710,  706,  721,    0,    0,  717,  714,  713,
+      703,  702,  692,  709,  695,  426,  703,  706,    0,  725,
+      724,  723,  688,  687,    0,  701,  688,    0,  698,  691,
+      683,  684,  690,  693,    0,    0,    0,    0,  715,  714,
+        0,  689,  692,  677,  684,  675,  682,  683,  683,  682,
+      668,  436,  679,  679,    0,  680,  669,  668,    0,    0,
+        0,  695,  694,  693,  658,  657,  653,  661,    0,  691,
 
-      595,  594,    0,  594,    0,    0,  446,  457,  618,  604,
-      607,  590,  602,  590,  589,  598,  598,  615,  614,  613,
-      580,  579,    0,  579,  580,  579,  589,    0,  592,  588,
-      590,  586,  573,  604,  451,    0,  581,  584,  576,  568,
-      575,  566,  587,  575,  571,  573,  571,  571,  570,    0,
-      558,  557,  567,    0,  587,  463,    0,  564,  567,    0,
-      567,  566,  550,  542,  550,  540,  548,    0,  545,  544,
-      565,  553,  551,  551,  535,  538,  552,  536,  567,  547,
-      548,  545,  542,  552,  529,  543,  542,  526,  525,  524,
-      545,  533,  531,  531,  512,  511,    0,  539,  511,  537,
+      690,    0,  665,  668,    0,  446,    0,  646,  667,  681,
+      653,    0,  649,  648,  657,  657,  645,  659,  643,  657,
+      652,    0,    0,    0,  671,  670,  669,  634,  633,  632,
+        0,  632,    0,    0,  426,  434,  658,  642,  645,  628,
+      640,  628,  627,  636,  636,  655,  654,  653,  618,  617,
+        0,  622,  612,  615,  616,  615,  625,    0,  628,  624,
+      626,  622,  609,  642,  442,    0,  617,  620,  610,  611,
+      603,  610,  601,  624,  610,  606,  608,  606,  606,  605,
+        0,  593,  592,  602,    0,  624,  445,    0,  599,  602,
+      599,  584,    0,  600,  599,  583,  575,  583,  573,  581,
 
-      509,  513,  512,  543,  523,  520,    0,  519,  522,  518,
-      520,  504,  501,  514,  499,  500,  507,  501,  490,  489,
-        0,  495,  494,  525,  505,  502,    0,    0,    0,  498,
-        0,  497,    0,  503,  502,  486,  483,  484,    0,  476,
-      484,  474,  480,  501,  480,    0,    0,  492,  491,    0,
-        0,  490,  489,  473,  470,  471,  485,  484,  461,  460,
-      466,    0,    0,  487,  459,  485,  477,  128,  151,  196,
-      227,  227,  269,  277,    0,    0,  291,  321,    0,    0,
-      329,  334,    0,  335,  343,  384,    0,  376,  420,    0,
-        0,  412,  404,  407,  413,  436,  442,    0,  445,  431,
+        0,  578,  577,  600,  586,  584,  584,  577,  567,  570,
+      584,  568,  601,  579,  580,  577,  574,  586,  561,  575,
+      574,  558,  557,  556,  579,  565,  563,  563,  566,  561,
+      542,  541,    0,  571,  541,  569,  539,  543,  542,  575,
+      553,  550,    0,  554,  548,  551,  547,  549,  532,  527,
+      534,  516,  514,  507,  501,  489,  124,    0,  162,  250,
+      289,  307,  327,    0,  329,  340,    0,    0,  366,    0,
+      367,    0,  395,  396,  383,  382,  395,  401,    0,  398,
+      408,  405,  416,  443,  423,    0,    0,  437,  438,    0,
+        0,  439,  440,  426,  425,  428,  441,  433,  446,  447,
 
-      465,  432,  436,  437,    0,  455,  456,  447,    0,  468,
-        0,    0,    0,  449,  450,  444,    0,  445,  446,    0,
-        0,    0, 1021,  510,  513,  516,  517,  518
+      426,  427,  435,    0,    0,  451,  461,  433,  463,  455,
+      449,  437,  455,  449,  438,  439,  447,    0,    0,  478,
+      464,  462,  463,    0,    0,  467,  456,  462,    0,  463,
+      449,  472,    0,  460,  485,    0,    0,  475,  482,  467,
+      465,  466,  458,  475,  482,  483,    0,  481,  465,  501,
+      465,  496,  522,  470,  471,    0,  488,  490,  491,  482,
+        0,  505,    0,    0,  513,    0,    0,    0,  485,  486,
+      480,    0,  506,  482,  483,    0,  537,    0,    0,  510,
+      521,  513,  516,    0, 1090,  556,  562,  568,  574,  578,
+      584,  585,  591,  594
+
     } ;
 
-static yyconst flex_int16_t yy_def[829] =
+static yyconst flex_int16_t yy_def[895] =
     {   0,
-      823,    1,  823,    3,  823,  823,  823,  823,  823,  823,
-      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
-      823,  823,  823,  823,  823,  823,  823,  824,  823,  823,
-      823,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  823,  823,  823,  823,  823,  823,  823,  825,  823,
-      823,  823,  823,  823,  823,  823,  823,  823,  823,  826,
-      823,  827,   20,   21,  823,  823,  828,  823,  823,  823,
-      823,  823,  823,  823,  823,  824,  823,  823,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      885,    1,  885,    3,  885,  885,  885,  885,  885,  885,
+      885,  885,  885,  885,  885,  885,  885,  885,  885,  885,
+      886,  885,  885,  885,  885,  885,  885,  887,  885,  885,
+      885,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  885,  885,  885,  885,  885,  885,  885,
+      888,  885,  885,  885,  885,  885,  885,  885,  885,  885,
+      885,  889,  885,  890,   20,  886,  891,  885,  892,  885,
+      885,  885,  885,  885,  885,  885,  885,  887,  885,  885,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
 
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  823,  823,  825,  823,  823,  827,  823,  823,  823,
-      823,  823,  828,  823,  823,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  885,  885,  888,  893,
+      885,  890,  894,  885,  885,  885,  891,  892,  885,  885,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
 
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  823,
-      823,  823,  823,  823,  823,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  885,  893,  885,
+      894,  885,  885,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
 
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
 
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
 
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
 
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
 
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
 
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
-      824,  824,    0,  823,  823,  823,  823,  823
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,    0,  885,  885,  885,  885,  885,
+      885,  885,  885,  885
+
     } ;
 
-static yyconst flex_int16_t yy_nxt[1094] =
+static yyconst flex_int16_t yy_nxt[1168] =
     {   0,
         6,    7,    8,    9,   10,   11,   12,   13,   14,   15,
        16,   17,   18,   19,   20,   21,   21,   21,   21,   21,
-       21,   22,   23,   24,   25,   26,   27,   28,   28,   28,
+       21,   21,   21,   21,   22,   23,   24,   25,   26,   27,
        28,   28,   28,   28,   28,   28,   28,   28,   28,   28,
-       29,   30,   31,   28,   32,   33,   34,   35,   36,   37,
-       38,   39,   40,   28,   41,   42,   43,   44,   45,   46,
-       47,   48,   49,   50,   51,   28,   28,   28,   52,   53,
-       54,   55,   56,   57,   58,   56,   56,   56,   56,   56,
-       56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-       56,   56,   56,   56,   56,   56,   56,   56,   56,   59,
+       28,   28,   28,   28,   28,   29,   30,   31,   32,   33,
+       34,   35,   36,   37,   38,   39,   40,   41,   28,   42,
+       43,   44,   45,   46,   47,   48,   49,   50,   51,   52,
+       28,   53,   28,   54,   55,   56,   57,   58,   59,   60,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
 
-       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
-       59,   59,   56,   56,   56,   59,   59,   59,   59,   59,
-       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
-       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
-       56,   56,   56,   56,   61,   62,   63,   66,   68,   70,
-       70,   70,   70,   70,   70,   70,   84,   85,   79,  150,
-      123,   69,   67,   87,  124,   64,   72,  151,   73,   73,
-       73,   73,   73,   73,   74,   80,   89,   81,   82,  786,
-       92,   88,   93,  121,   95,   75,   94,  103,   96,  104,
-       90,   91,   76,   77,   97,   99,  122,   98,  105,  100,
+       58,   58,   58,   58,   58,   58,   58,   61,   61,   61,
+       61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
+       61,   61,   58,   58,   58,   61,   61,   61,   61,   61,
+       61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
+       61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
+       58,   58,   58,   58,   63,   64,   65,   68,   70,   72,
+       72,   72,   72,   72,   72,   72,   72,   72,   72,  154,
+       74,   81,   86,   87,   71,   69,   89,  155,   66,   74,
+      157,   75,   75,   75,   75,   75,   75,   75,   75,   76,
+       76,   82,   77,   83,   84,  791,   90,   95,   92,   96,
 
-      115,  187,   75,  116,  101,  125,  117,  118,  152,  168,
-      102,  119,  188,  169,  120,  787,   76,  128,  126,   77,
-       72,  106,   74,   74,   74,   74,   74,   74,   74,  107,
-      112,  108,  129,  207,  109,  130,  212,  132,  113,   75,
-      110,  208,  213,  788,  133,  134,   76,  139,  135,  114,
-      140,  237,  238,  153,  136,  137,   75,  138,  141,  147,
-      143,  155,  156,  148,  144,  142,  158,  159,  145,  239,
-       76,  146,  149,  160,  823,  268,  269,  240,  155,  156,
-      161,  789,  161,  158,  159,  162,  162,  162,  162,  162,
-      162,  162,  189,  790,  176,  224,  215,  160,  177,  178,
+       78,   77,  127,   97,   98,  106,  128,  107,   99,   78,
+       79,   77,   93,   94,  100,  102,  108,  101,  174,  103,
+       77,  115,  175,  109,  104,   78,  792,  158,  125,  116,
+      105,  110,  118,  111,   78,  119,  112,   79,  120,  121,
+      117,  126,  113,  122,  123,  129,  124,  132,  193,  136,
+      143,  151,  166,  144,  166,  152,  137,  138,  130,  194,
+      139,  145,  133,  574,  153,  134,  140,  141,  146,  142,
+      147,  160,  161,  575,  148,  163,  164,  214,  149,  165,
+      885,  150,  182,   74,  195,  215,  183,  184,  222,  205,
+      160,  161,  206,  207,  163,  164,  208,  196,  209,  227,
 
-      823,  220,  230,  199,  228,  190,  200,  201,  225,  216,
-      202,  217,  203,  241,  246,  231,  247,  221,  222,  229,
-      250,  242,  250,  158,  159,  251,  251,  251,  251,  251,
-      251,  251,  299,  300,  301,  791,  792,  252,  793,  252,
-      158,  159,  253,  253,  253,  253,  253,  253,  253,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  255,  262,  313,  550,  332,  794,  314,
-      339,  340,  341,  795,  254,  333,  551,  263,  251,  251,
-      251,  251,  251,  251,  251,  796,  797,  255,  350,  351,
-      352,  254,  251,  251,  251,  251,  251,  251,  251,  253,
+      219,  223,  235,  224,  165,   77,  220,  885,  231,  237,
+      244,  245,  246,   78,  793,  228,  229,  236,  248,  794,
+      247,  232,  238,  253,   77,  254,  249,  258,  263,  258,
+      163,  164,  260,  885,  260,  885,  277,  278,   78,  167,
+      167,  167,  167,  167,  167,  167,  167,  167,  167,  163,
+      164,  271,  342,  263,  309,  310,  311,  323,  795,  262,
+      343,  324,  397,  398,  272,  349,  350,  351,  259,  259,
+      259,  259,  259,  259,  259,  259,  259,  259,  262,  885,
+      796,  885,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  885,  797,  885,  362,  363,  364,  374,  375,
 
-      253,  253,  253,  253,  253,  253,  362,  363,  364,  798,
-      156,  253,  253,  253,  253,  253,  253,  253,  370,  371,
-      372,  374,  375,  376,  385,  386,  387,  156,  799,  159,
-      424,  425,  426,  800,  444,  445,  446,  454,  455,  456,
-      457,  458,  459,  460,  461,  462,  159,  447,  448,  502,
-      503,  504,  528,  529,  530,  801,  802,  552,  567,  568,
-      569,  803,  505,  506,  804,  531,  532,  553,  598,  599,
-      600,  570,  571,  640,  572,  618,  619,  620,  670,  805,
-      806,  601,  602,  641,  642,  671,  807,  672,  621,  622,
-      690,  643,  808,  644,  645,  809,  810,  691,  811,  692,
+      376,  382,  383,  384,  798,  161,  386,  387,  388,  399,
+      400,  401,  438,  439,  440,  460,  461,  462,  164,  472,
+      473,  474,  799,  800,  161,  475,  476,  477,  478,  479,
+      480,  463,  464,  522,  523,  524,  576,  164,  550,  551,
+      552,  592,  593,  594,  801,  802,  577,  803,  804,  525,
+      526,  625,  626,  627,  553,  554,  671,  595,  596,  805,
+      597,  646,  647,  648,  673,  806,  672,  628,  629,  807,
+      808,  674,  703,  675,  676,  724,  809,  649,  650,  704,
+      810,  705,  725,  811,  726,  812,  813,  814,  815,  816,
+      817,  818,  819,  820,  821,  822,  823,  824,  825,  826,
 
-      812,  813,  814,  815,  816,  817,  818,  819,  820,  821,
-      822,   86,   86,   86,  154,  154,  154,   70,  157,  163,
-      163,  785,  784,  783,  782,  781,  780,  779,  778,  777,
-      776,  775,  774,  773,  772,  771,  770,  769,  768,  767,
-      766,  765,  764,  763,  762,  761,  760,  759,  758,  757,
-      756,  755,  754,  753,  752,  751,  750,  749,  748,  747,
-      746,  745,  744,  743,  742,  741,  740,  739,  738,  737,
-      736,  735,  734,  733,  732,  731,  730,  729,  728,  727,
-      726,  725,  724,  723,  722,  721,  720,  719,  718,  717,
-      716,  715,  714,  713,  712,  711,  710,  709,  708,  707,
+      827,  828,  829,  830,  831,  832,  833,  834,  835,  836,
+      837,  838,  839,  840,  841,  842,  843,  844,  845,  846,
+      847,  848,  849,  850,  851,  852,  853,  854,  855,  856,
+      857,  858,  859,  860,  861,  862,  863,  864,  865,  866,
+      867,  868,  869,  870,  871,  872,  873,  874,  875,  876,
+      877,  878,  879,  880,  881,  882,  883,  884,   76,   76,
+      790,   76,  789,  788,   76,   88,   88,   88,   88,   88,
+       88,  159,  159,  159,  159,  159,  159,   72,  787,   72,
+       72,  162,  786,  162,  162,  167,  785,  167,  168,  168,
+      168,  168,  259,  784,  259,  261,  783,  261,  782,  781,
 
-      706,  705,  704,  703,  702,  701,  700,  699,  698,  697,
-      696,  695,  694,  693,  689,  688,  687,  686,  685,  684,
-      683,  682,  681,  680,  679,  678,  677,  676,  675,  674,
-      673,  669,  668,  667,  666,  665,  664,  663,  662,  661,
-      660,  659,  658,  657,  656,  655,  654,  653,  652,  651,
-      650,  649,  648,  647,  646,  639,  638,  637,  636,  635,
-      634,  633,  632,  631,  630,  629,  628,  627,  626,  625,
-      624,  623,  617,  616,  615,  614,  613,  612,  611,  610,
-      609,  608,  607,  606,  605,  604,  603,  597,  596,  595,
-      594,  593,  592,  591,  590,  589,  588,  587,  586,  585,
+      780,  779,  778,  777,  776,  775,  774,  773,  772,  771,
+      770,  769,  768,  767,  766,  765,  764,  763,  762,  761,
+      760,  759,  758,  757,  756,  755,  754,  753,  752,  751,
+      750,  749,  748,  747,  746,  745,  744,  743,  742,  741,
+      740,  739,  738,  737,  736,  735,  734,  733,  732,  731,
+      730,  729,  728,  727,  723,  722,  721,  720,  719,  718,
+      717,  716,  715,  714,  713,  712,  711,  710,  709,  708,
+      707,  706,  702,  701,  700,  699,  698,  697,  696,  695,
+      694,  693,  692,  691,  690,  689,  688,  687,  686,  685,
+      684,  683,  682,  681,  680,  679,  678,  677,  670,  669,
 
-      584,  583,  582,  581,  580,  579,  578,  577,  576,  575,
-      574,  573,  566,  565,  564,  563,  562,  561,  560,  559,
-      558,  557,  556,  555,  554,  549,  548,  547,  546,  545,
-      544,  543,  542,  541,  540,  539,  538,  537,  536,  535,
-      534,  533,  527,  526,  525,  524,  523,  522,  521,  520,
-      519,  518,  517,  516,  515,  514,  513,  512,  511,  510,
-      509,  508,  507,  501,  500,  499,  498,  497,  496,  495,
-      494,  493,  492,  491,  490,  489,  488,  487,  486,  485,
-      484,  483,  482,  481,  480,  479,  478,  477,  476,  475,
-      474,  473,  472,  471,  470,  469,  468,  467,  466,  465,
+      668,  667,  666,  665,  664,  663,  662,  661,  660,  659,
+      658,  657,  656,  655,  654,  653,  652,  651,  645,  644,
+      643,  642,  641,  640,  639,  638,  637,  636,  635,  634,
+      633,  632,  631,  630,  624,  623,  622,  621,  620,  619,
+      618,  617,  616,  615,  614,  613,  612,  611,  610,  609,
+      608,  607,  606,  605,  604,  603,  602,  601,  600,  599,
+      598,  591,  590,  589,  588,  587,  586,  585,  584,  583,
+      582,  581,  580,  579,  578,  573,  572,  571,  570,  569,
+      568,  567,  566,  565,  564,  563,  562,  561,  560,  559,
+      558,  557,  556,  555,  549,  548,  547,  546,  545,  544,
 
-      464,  463,  453,  452,  451,  450,  449,  443,  442,  441,
-      440,  439,  438,  437,  436,  435,  434,  433,  432,  431,
-      430,  429,  428,  427,  423,  422,  421,  420,  419,  418,
-      417,  416,  415,  414,  413,  412,  411,  410,  409,  408,
-      407,  406,  405,  404,  403,  402,  401,  400,  399,  398,
-      397,  396,  395,  394,  393,  392,  391,  390,  389,  388,
-      384,  383,  382,  381,  380,  379,  378,  377,  373,  369,
-      368,  367,  366,  365,  361,  360,  359,  358,  357,  356,
-      355,  354,  353,  349,  348,  347,  346,  345,  344,  343,
-      342,  338,  337,  336,  335,  334,  331,  330,  329,  328,
+      543,  542,  541,  540,  539,  538,  537,  536,  535,  534,
+      533,  532,  531,  530,  529,  528,  527,  521,  520,  519,
+      518,  517,  516,  515,  514,  513,  512,  511,  510,  509,
+      508,  507,  506,  505,  504,  503,  502,  501,  500,  499,
+      498,  497,  496,  495,  494,  493,  492,  491,  490,  489,
+      488,  487,  486,  485,  484,  483,  482,  481,  471,  470,
+      469,  468,  467,  466,  465,  459,  458,  457,  456,  455,
+      454,  453,  452,  451,  450,  449,  448,  447,  446,  445,
+      444,  443,  442,  441,  437,  436,  435,  434,  433,  432,
+      431,  430,  429,  428,  427,  426,  425,  424,  423,  422,
 
-      327,  326,  325,  324,  323,  322,  321,  320,  319,  318,
-      317,  316,  315,  312,  311,  310,  309,  308,  307,  306,
-      305,  304,  303,  302,  298,  297,  296,  295,  294,  293,
-      292,  291,  290,  289,  288,  287,  286,  285,  284,  283,
-      282,  281,  280,  279,  278,  277,  276,  275,  274,  273,
-      272,  271,  270,  267,  266,  265,  264,  261,  260,  259,
-      258,  257,  256,  249,  248,  245,  244,  243,  236,  235,
-      234,  233,  232,  227,  226,  223,  219,  218,  214,  211,
-      210,  209,  206,  205,  204,  198,  197,  196,  195,  194,
-      193,  192,  191,  186,  185,  184,  183,  182,  181,  180,
+      421,  420,  419,  418,  417,  416,  415,  414,  413,  412,
+      411,  410,  409,  408,  407,  406,  405,  404,  403,  402,
+      396,  395,  394,  393,  392,  391,  390,  389,  385,  381,
+      380,  379,  378,  377,  373,  372,  371,  370,  369,  368,
+      367,  366,  365,  361,  360,  359,  358,  357,  356,  355,
+      354,  353,  352,  348,  347,  346,  345,  344,  341,  340,
+      339,  338,  337,  336,  335,  334,  333,  332,  331,  330,
+      329,  328,  327,  326,  325,  322,  321,  320,  319,  318,
+      317,  316,  315,  314,  313,  312,  308,  307,  306,  305,
+      304,  303,  302,  301,  300,  299,  298,  297,  296,  295,
 
-      179,  175,  174,  173,  172,  171,  170,  167,  166,  165,
-      164,  131,  127,  111,   83,   78,   71,   65,   60,  823,
-        5,  823,  823,  823,  823,  823,  823,  823,  823,  823,
-      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
-      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
-      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
-      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
-      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
-      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
-      823,  823,  823
+      294,  293,  292,  291,  290,  289,  288,  287,  286,  285,
+      284,  283,  282,  281,  280,  279,  276,  275,  274,  273,
+      270,  269,  268,  267,  266,  265,  264,  257,  256,  255,
+      252,  251,  250,  243,  242,  241,  240,  239,  234,  233,
+      230,  226,  225,  221,  218,  217,  216,  213,  212,  211,
+      210,  204,  203,  202,  201,  200,  199,  198,  197,  192,
+      191,  190,  189,  188,  187,  186,  185,  181,  180,  179,
+      178,  177,  176,  173,  172,  171,  170,  169,  156,  135,
+      131,  114,   91,   85,   80,   73,   67,   62,  885,    5,
+      885,  885,  885,  885,  885,  885,  885,  885,  885,  885,
 
+      885,  885,  885,  885,  885,  885,  885,  885,  885,  885,
+      885,  885,  885,  885,  885,  885,  885,  885,  885,  885,
+      885,  885,  885,  885,  885,  885,  885,  885,  885,  885,
+      885,  885,  885,  885,  885,  885,  885,  885,  885,  885,
+      885,  885,  885,  885,  885,  885,  885,  885,  885,  885,
+      885,  885,  885,  885,  885,  885,  885,  885,  885,  885,
+      885,  885,  885,  885,  885,  885,  885
     } ;
 
-static yyconst flex_int16_t yy_chk[1094] =
+static yyconst flex_int16_t yy_chk[1168] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -874,7 +903,7 @@
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    3,    3,    3,    3,    3,    3,    3,    3,
+        1,    1,    1,    1,    1,    1,    1,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
 
@@ -882,116 +911,123 @@
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,   10,   10,   11,   15,   17,   18,
-       18,   18,   18,   18,   18,   18,   26,   26,   24,   51,
-       42,   17,   15,   31,   42,   11,   20,   51,   20,   20,
-       20,   20,   20,   20,   20,   24,   32,   24,   24,  768,
-       33,   31,   33,   41,   34,   20,   33,   36,   34,   36,
-       32,   32,   20,   20,   34,   35,   41,   34,   36,   35,
+       18,   18,   18,   18,   18,   18,   18,   18,   18,   52,
+       21,   24,   26,   26,   17,   15,   31,   52,   11,   20,
+       55,   20,   20,   20,   20,   20,   20,   20,   20,   20,
+       20,   24,   21,   24,   24,  757,   31,   34,   33,   34,
 
-       40,  107,   20,   40,   35,   43,   40,   40,   53,   91,
-       35,   40,  107,   91,   40,  769,   20,   45,   43,   20,
-       21,   37,   21,   21,   21,   21,   21,   21,   21,   37,
-       39,   37,   45,  122,   37,   45,  126,   47,   39,   21,
-       37,  122,  126,  770,   47,   47,   21,   48,   47,   39,
-       48,  143,  143,   53,   47,   47,   21,   47,   48,   50,
-       49,   70,   70,   50,   49,   48,   72,   72,   49,  144,
-       21,   49,   50,   73,   73,  178,  178,  144,   70,   70,
-       75,  771,   75,   72,   72,   75,   75,   75,   75,   75,
-       75,   75,  108,  772,   98,  133,  128,   73,   98,   98,
+       21,   20,   43,   34,   35,   37,   43,   37,   35,   20,
+       20,   21,   33,   33,   35,   36,   37,   35,   94,   36,
+       20,   40,   94,   38,   36,   21,  759,   55,   42,   40,
+       36,   38,   41,   38,   20,   41,   38,   20,   41,   41,
+       40,   42,   38,   41,   41,   44,   41,   46,  110,   48,
+       49,   51,   77,   49,   77,   51,   48,   48,   44,  110,
+       48,   49,   46,  527,   51,   46,   48,   48,   49,   48,
+       50,   72,   72,  527,   50,   74,   74,  126,   50,   75,
+       75,   50,  101,   76,  111,  126,  101,  101,  132,  121,
+       72,   72,  121,  121,   74,   74,  121,  111,  121,  135,
 
-       73,  131,  137,  118,  136,  108,  118,  118,  133,  128,
-      118,  128,  118,  145,  149,  137,  149,  131,  131,  136,
-      155,  145,  155,  157,  157,  155,  155,  155,  155,  155,
-      155,  155,  209,  209,  209,  773,  774,  158,  777,  158,
-      157,  157,  158,  158,  158,  158,  158,  158,  158,  161,
-      161,  161,  161,  161,  161,  161,  162,  162,  162,  162,
-      162,  162,  162,  163,  173,  221,  507,  239,  778,  221,
-      245,  245,  245,  781,  162,  239,  507,  173,  250,  250,
-      250,  250,  250,  250,  250,  782,  784,  163,  261,  261,
-      261,  162,  251,  251,  251,  251,  251,  251,  251,  252,
+      130,  132,  140,  132,   75,   76,  130,   75,  137,  141,
+      147,  147,  148,   76,  760,  135,  135,  140,  149,  761,
+      148,  137,  141,  153,   76,  153,  149,  160,  168,  160,
+      162,  162,  163,  167,  163,  167,  184,  184,   76,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  162,
+      162,  179,  246,  168,  216,  216,  216,  228,  762,  167,
+      246,  228,  304,  304,  179,  252,  252,  252,  258,  258,
+      258,  258,  258,  258,  258,  258,  258,  258,  167,  259,
+      763,  259,  260,  260,  260,  260,  260,  260,  260,  260,
+      260,  260,  261,  765,  261,  270,  270,  270,  282,  282,
 
-      252,  252,  252,  252,  252,  252,  273,  273,  273,  785,
-      251,  253,  253,  253,  253,  253,  253,  253,  282,  282,
-      282,  286,  286,  286,  295,  295,  295,  251,  786,  253,
-      337,  337,  337,  788,  378,  378,  378,  389,  389,  389,
-      390,  390,  390,  391,  391,  391,  253,  378,  378,  443,
-      443,  443,  487,  487,  487,  789,  792,  508,  524,  524,
-      524,  793,  443,  443,  794,  487,  487,  508,  558,  558,
-      558,  524,  524,  607,  524,  581,  581,  581,  635,  795,
-      796,  558,  558,  607,  608,  635,  797,  635,  581,  581,
-      656,  608,  799,  608,  608,  800,  801,  656,  802,  656,
+      282,  291,  291,  291,  766,  259,  295,  295,  295,  305,
+      305,  305,  347,  347,  347,  390,  390,  390,  261,  403,
+      403,  403,  769,  771,  259,  404,  404,  404,  405,  405,
+      405,  390,  390,  459,  459,  459,  528,  261,  505,  505,
+      505,  546,  546,  546,  773,  774,  528,  775,  776,  459,
+      459,  582,  582,  582,  505,  505,  635,  546,  546,  777,
+      546,  606,  606,  606,  636,  778,  635,  582,  582,  780,
+      781,  636,  665,  636,  636,  687,  782,  606,  606,  665,
+      783,  665,  687,  784,  687,  785,  788,  789,  792,  793,
+      794,  795,  796,  797,  798,  799,  800,  801,  802,  803,
 
-      803,  804,  806,  807,  808,  810,  814,  815,  816,  818,
-      819,  824,  824,  824,  825,  825,  825,  826,  827,  828,
-      828,  767,  766,  765,  764,  761,  760,  759,  758,  757,
-      756,  755,  754,  753,  752,  749,  748,  745,  744,  743,
-      742,  741,  740,  738,  737,  736,  735,  734,  732,  730,
-      726,  725,  724,  723,  722,  720,  719,  718,  717,  716,
-      715,  714,  713,  712,  711,  710,  709,  708,  706,  705,
-      704,  703,  702,  701,  700,  699,  698,  696,  695,  694,
-      693,  692,  691,  690,  689,  688,  687,  686,  685,  684,
-      683,  682,  681,  680,  679,  678,  677,  676,  675,  674,
+      806,  807,  808,  809,  810,  811,  812,  813,  814,  815,
+      816,  817,  820,  821,  822,  823,  826,  827,  828,  830,
+      831,  832,  834,  835,  838,  839,  840,  841,  842,  843,
+      844,  845,  846,  848,  849,  850,  851,  852,  853,  854,
+      855,  857,  858,  859,  860,  862,  865,  869,  870,  871,
+      873,  874,  875,  877,  880,  881,  882,  883,  886,  886,
+      756,  886,  755,  754,  886,  887,  887,  887,  887,  887,
+      887,  888,  888,  888,  888,  888,  888,  889,  753,  889,
+      889,  890,  752,  890,  890,  891,  751,  891,  892,  892,
+      892,  892,  893,  750,  893,  894,  749,  894,  748,  747,
 
-      673,  672,  671,  670,  669,  667,  666,  665,  664,  663,
-      662,  661,  659,  658,  655,  653,  652,  651,  649,  648,
-      647,  646,  645,  644,  643,  642,  641,  640,  639,  638,
-      637,  634,  633,  632,  631,  630,  629,  627,  626,  625,
-      624,  622,  621,  620,  619,  618,  617,  616,  615,  614,
-      613,  612,  611,  610,  609,  604,  602,  601,  600,  599,
-      598,  594,  593,  592,  591,  590,  589,  588,  587,  586,
-      584,  583,  579,  578,  576,  575,  573,  572,  571,  570,
-      569,  568,  567,  563,  562,  561,  559,  557,  556,  555,
-      554,  553,  552,  551,  550,  549,  548,  546,  545,  540,
+      746,  745,  744,  742,  741,  740,  739,  738,  737,  736,
+      735,  734,  732,  731,  730,  729,  728,  727,  726,  725,
+      724,  723,  722,  721,  720,  719,  718,  717,  716,  715,
+      714,  713,  712,  711,  710,  709,  708,  707,  706,  705,
+      704,  703,  702,  700,  699,  698,  697,  696,  695,  694,
+      692,  691,  690,  689,  686,  684,  683,  682,  680,  679,
+      678,  677,  676,  675,  674,  673,  672,  671,  670,  669,
+      668,  667,  664,  663,  662,  661,  660,  659,  657,  656,
+      655,  654,  653,  652,  650,  649,  648,  647,  646,  645,
+      644,  643,  642,  641,  640,  639,  638,  637,  632,  630,
 
-      539,  538,  537,  535,  534,  532,  531,  530,  529,  528,
-      526,  525,  523,  522,  521,  520,  519,  518,  517,  516,
-      514,  513,  512,  511,  510,  506,  505,  504,  503,  502,
-      501,  498,  497,  496,  495,  494,  493,  492,  491,  490,
-      489,  488,  486,  485,  482,  476,  474,  473,  472,  470,
-      469,  466,  465,  464,  463,  452,  451,  450,  448,  447,
-      446,  445,  444,  441,  439,  438,  437,  435,  434,  433,
-      432,  430,  428,  427,  422,  421,  419,  418,  417,  416,
-      415,  414,  413,  412,  411,  410,  409,  407,  406,  405,
-      404,  403,  402,  401,  400,  398,  397,  396,  395,  394,
+      629,  628,  627,  626,  625,  621,  620,  619,  618,  617,
+      616,  615,  614,  613,  611,  610,  609,  608,  604,  603,
+      601,  600,  598,  597,  596,  595,  594,  593,  592,  588,
+      587,  586,  584,  583,  581,  580,  579,  578,  577,  576,
+      575,  574,  573,  572,  570,  569,  564,  563,  562,  561,
+      560,  559,  557,  556,  554,  553,  552,  551,  550,  548,
+      547,  545,  544,  543,  542,  541,  540,  539,  538,  535,
+      534,  533,  532,  531,  530,  526,  525,  524,  523,  522,
+      521,  518,  517,  516,  515,  514,  513,  512,  511,  510,
+      509,  508,  507,  506,  504,  503,  500,  494,  492,  491,
 
-      393,  392,  388,  384,  383,  382,  379,  377,  367,  365,
-      361,  360,  359,  358,  356,  355,  353,  348,  347,  346,
-      345,  344,  343,  338,  336,  335,  334,  333,  332,  330,
-      329,  326,  325,  324,  323,  322,  321,  320,  319,  318,
-      317,  316,  315,  314,  313,  312,  311,  310,  309,  308,
-      307,  306,  305,  304,  303,  302,  301,  300,  299,  296,
-      294,  293,  292,  291,  290,  289,  288,  287,  285,  281,
-      279,  278,  277,  276,  272,  271,  270,  269,  268,  267,
-      266,  265,  264,  260,  258,  257,  256,  249,  248,  247,
-      246,  244,  243,  242,  241,  240,  238,  237,  236,  235,
+      490,  488,  487,  484,  483,  482,  481,  470,  469,  468,
+      467,  466,  464,  463,  462,  461,  460,  457,  455,  454,
+      453,  451,  450,  449,  448,  446,  445,  444,  442,  441,
+      436,  435,  433,  432,  431,  430,  429,  428,  427,  426,
+      425,  424,  423,  421,  420,  419,  418,  417,  416,  415,
+      414,  412,  411,  410,  409,  408,  407,  406,  402,  398,
+      397,  396,  395,  394,  391,  389,  379,  377,  373,  372,
+      371,  370,  368,  367,  365,  360,  359,  358,  357,  356,
+      355,  354,  353,  348,  346,  345,  344,  343,  342,  340,
+      339,  336,  335,  334,  333,  332,  331,  330,  329,  328,
 
-      234,  233,  232,  231,  230,  229,  228,  227,  226,  225,
-      224,  223,  222,  220,  219,  218,  217,  216,  215,  214,
-      213,  212,  211,  210,  208,  207,  206,  205,  204,  203,
-      202,  201,  200,  199,  198,  197,  196,  195,  194,  193,
-      192,  190,  189,  188,  187,  186,  185,  184,  183,  182,
-      181,  180,  179,  177,  176,  175,  174,  172,  171,  170,
-      169,  168,  166,  151,  150,  148,  147,  146,  142,  141,
-      140,  139,  138,  135,  134,  132,  130,  129,  127,  125,
-      124,  123,  121,  120,  119,  117,  116,  114,  113,  112,
-      111,  110,  109,  106,  105,  104,  103,  102,  101,  100,
+      327,  326,  325,  324,  323,  322,  321,  320,  319,  318,
+      317,  316,  315,  314,  313,  312,  311,  310,  309,  306,
+      303,  302,  301,  300,  299,  298,  297,  296,  294,  290,
+      288,  287,  286,  285,  281,  280,  279,  278,  277,  276,
+      275,  274,  273,  269,  267,  266,  265,  264,  257,  256,
+      255,  254,  253,  251,  250,  249,  248,  247,  245,  244,
+      243,  242,  241,  240,  239,  238,  237,  236,  235,  234,
+      233,  232,  231,  230,  229,  227,  226,  225,  224,  223,
+      222,  221,  220,  219,  218,  217,  215,  214,  213,  212,
+      211,  210,  209,  208,  207,  206,  205,  204,  203,  202,
 
-       99,   97,   96,   95,   94,   93,   92,   90,   89,   85,
-       81,   46,   44,   38,   25,   22,   19,   14,    9,    5,
-      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
-      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
-      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
-      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
-      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
-      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
-      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
-      823,  823,  823
+      201,  200,  199,  198,  196,  195,  194,  193,  192,  191,
+      190,  189,  188,  187,  186,  185,  183,  182,  181,  180,
+      178,  177,  176,  175,  174,  172,  171,  156,  155,  154,
+      152,  151,  150,  146,  145,  144,  143,  142,  139,  138,
+      136,  134,  133,  131,  129,  128,  127,  125,  124,  123,
+      122,  120,  119,  117,  116,  115,  114,  113,  112,  109,
+      108,  107,  106,  105,  104,  103,  102,  100,   99,   98,
+       97,   96,   95,   93,   92,   91,   87,   83,   53,   47,
+       45,   39,   32,   25,   22,   19,   14,    9,    5,  885,
+      885,  885,  885,  885,  885,  885,  885,  885,  885,  885,
 
+      885,  885,  885,  885,  885,  885,  885,  885,  885,  885,
+      885,  885,  885,  885,  885,  885,  885,  885,  885,  885,
+      885,  885,  885,  885,  885,  885,  885,  885,  885,  885,
+      885,  885,  885,  885,  885,  885,  885,  885,  885,  885,
+      885,  885,  885,  885,  885,  885,  885,  885,  885,  885,
+      885,  885,  885,  885,  885,  885,  885,  885,  885,  885,
+      885,  885,  885,  885,  885,  885,  885
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[242] =
+static yyconst flex_int32_t yy_rule_can_match_eol[247] =
     {   0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -1004,8 +1040,8 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-    0, 0,     };
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 1, 0, 0,     };
 
 /* The intent behind this definition is that it'll catch
  * any uses of REJECT which flex missed.
@@ -1067,10 +1103,12 @@
 static int ES2_ident_ES3_reserved_ES3_1_keyword(TParseContext *context, int token);
 static int ES2_and_ES3_reserved_ES3_1_keyword(TParseContext *context, int token);
 static int ES2_and_ES3_ident_ES3_1_keyword(TParseContext *context, int token);
+static int ES3_extension_keyword_else_ident(TParseContext *context, const char *extension, int token);
 static int uint_constant(TParseContext *context);
 static int int_constant(TParseContext *context);
 static int float_constant(yyscan_t yyscanner);
 static int floatsuffix_check(TParseContext* context);
+static int yuvcscstandardext_constant(TParseContext *context);
 
 #define INITIAL 0
 #define FIELDS 1
@@ -1363,13 +1401,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 >= 824 )
+				if ( yy_current_state >= 886 )
 					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 != 823 );
+		while ( yy_current_state != 885 );
 		yy_cp = yyg->yy_last_accepting_cpos;
 		yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1723,86 +1761,101 @@
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
-{ return STRUCT; }
+{ return ES3_extension_keyword_else_ident(context, "GL_EXT_YUV_target", SAMPLEREXTERNAL2DY2YEXT); }
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, LAYOUT); }
+{ return STRUCT; }
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2D); }
+{ return ES2_ident_ES3_keyword(context, LAYOUT); }
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2D); }
+{ return ES3_extension_keyword_else_ident(context, "GL_EXT_YUV_target", YUVCSCSTANDARDEXT); }
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2D); }
+{ return yuvcscstandardext_constant(context); }
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2DARRAY); }
+{ return yuvcscstandardext_constant(context); }
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2DARRAY); }
+{ return yuvcscstandardext_constant(context); }
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2DARRAY); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2D); }
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE3D); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2D); }
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE3D); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2D); }
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE3D); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2DARRAY); }
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGECUBE); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2DARRAY); }
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGECUBE); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2DARRAY); }
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGECUBE); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE3D); }
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, READONLY); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE3D); }
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, WRITEONLY); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE3D); }
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, COHERENT); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGECUBE); }
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, RESTRICT); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGECUBE); }
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGECUBE); }
+	YY_BREAK
+case 100:
+YY_RULE_SETUP
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, READONLY); }
+	YY_BREAK
+case 101:
+YY_RULE_SETUP
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, WRITEONLY); }
+	YY_BREAK
+case 102:
+YY_RULE_SETUP
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, COHERENT); }
+	YY_BREAK
+case 103:
+YY_RULE_SETUP
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, RESTRICT); }
+	YY_BREAK
+case 104:
+YY_RULE_SETUP
 { return ES2_and_ES3_reserved_ES3_1_keyword(context, VOLATILE); }
 	YY_BREAK
 /* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
-case 100:
-case 101:
-case 102:
-case 103:
-case 104:
 case 105:
 case 106:
 case 107:
@@ -1835,6 +1888,11 @@
 case 134:
 case 135:
 case 136:
+case 137:
+case 138:
+case 139:
+case 140:
+case 141:
 YY_RULE_SETUP
 { 
     if (context->getShaderVersion() < 300) {
@@ -1845,7 +1903,7 @@
 }
 	YY_BREAK
 /* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */
-case 137:
+case 142:
 YY_RULE_SETUP
 {
     if (context->getShaderVersion() >= 300)
@@ -1858,11 +1916,6 @@
 }
 	YY_BREAK
 /* Reserved keywords */
-case 138:
-case 139:
-case 140:
-case 141:
-case 142:
 case 143:
 case 144:
 case 145:
@@ -1898,265 +1951,270 @@
 case 175:
 case 176:
 case 177:
+case 178:
+case 179:
+case 180:
+case 181:
+case 182:
 YY_RULE_SETUP
 { return reserved_word(yyscanner); }
 	YY_BREAK
-case 178:
+case 183:
 YY_RULE_SETUP
 {
    yylval->lex.string = NewPoolTString(yytext); 
    return check_type(yyscanner);
 }
 	YY_BREAK
-case 179:
-YY_RULE_SETUP
-{ return int_constant(context); }
-	YY_BREAK
-case 180:
-YY_RULE_SETUP
-{ return int_constant(context); }
-	YY_BREAK
-case 181:
-YY_RULE_SETUP
-{ return int_constant(context); }
-	YY_BREAK
-case 182:
-YY_RULE_SETUP
-{ return uint_constant(context); }
-	YY_BREAK
-case 183:
-YY_RULE_SETUP
-{ return uint_constant(context); }
-	YY_BREAK
 case 184:
 YY_RULE_SETUP
-{ return uint_constant(context); }
+{ return int_constant(context); }
 	YY_BREAK
 case 185:
 YY_RULE_SETUP
-{ return float_constant(yyscanner); }
+{ return int_constant(context); }
 	YY_BREAK
 case 186:
 YY_RULE_SETUP
-{ return float_constant(yyscanner); }
+{ return int_constant(context); }
 	YY_BREAK
 case 187:
 YY_RULE_SETUP
-{ return float_constant(yyscanner); }
+{ return uint_constant(context); }
 	YY_BREAK
 case 188:
 YY_RULE_SETUP
-{ return floatsuffix_check(context); }
+{ return uint_constant(context); }
 	YY_BREAK
 case 189:
 YY_RULE_SETUP
-{ return floatsuffix_check(context); }
+{ return uint_constant(context); }
 	YY_BREAK
 case 190:
 YY_RULE_SETUP
-{ return floatsuffix_check(context); }
+{ return float_constant(yyscanner); }
 	YY_BREAK
 case 191:
 YY_RULE_SETUP
-{ return ADD_ASSIGN; }
+{ return float_constant(yyscanner); }
 	YY_BREAK
 case 192:
 YY_RULE_SETUP
-{ return SUB_ASSIGN; }
+{ return float_constant(yyscanner); }
 	YY_BREAK
 case 193:
 YY_RULE_SETUP
-{ return MUL_ASSIGN; }
+{ return floatsuffix_check(context); }
 	YY_BREAK
 case 194:
 YY_RULE_SETUP
-{ return DIV_ASSIGN; }
+{ return floatsuffix_check(context); }
 	YY_BREAK
 case 195:
 YY_RULE_SETUP
-{ return MOD_ASSIGN; }
+{ return floatsuffix_check(context); }
 	YY_BREAK
 case 196:
 YY_RULE_SETUP
-{ return LEFT_ASSIGN; }
+{ return ADD_ASSIGN; }
 	YY_BREAK
 case 197:
 YY_RULE_SETUP
-{ return RIGHT_ASSIGN; }
+{ return SUB_ASSIGN; }
 	YY_BREAK
 case 198:
 YY_RULE_SETUP
-{ return AND_ASSIGN; }
+{ return MUL_ASSIGN; }
 	YY_BREAK
 case 199:
 YY_RULE_SETUP
-{ return XOR_ASSIGN; }
+{ return DIV_ASSIGN; }
 	YY_BREAK
 case 200:
 YY_RULE_SETUP
-{ return OR_ASSIGN; }
+{ return MOD_ASSIGN; }
 	YY_BREAK
 case 201:
 YY_RULE_SETUP
-{ return INC_OP; }
+{ return LEFT_ASSIGN; }
 	YY_BREAK
 case 202:
 YY_RULE_SETUP
-{ return DEC_OP; }
+{ return RIGHT_ASSIGN; }
 	YY_BREAK
 case 203:
 YY_RULE_SETUP
-{ return AND_OP; }
+{ return AND_ASSIGN; }
 	YY_BREAK
 case 204:
 YY_RULE_SETUP
-{ return OR_OP; }
+{ return XOR_ASSIGN; }
 	YY_BREAK
 case 205:
 YY_RULE_SETUP
-{ return XOR_OP; }
+{ return OR_ASSIGN; }
 	YY_BREAK
 case 206:
 YY_RULE_SETUP
-{ return LE_OP; }
+{ return INC_OP; }
 	YY_BREAK
 case 207:
 YY_RULE_SETUP
-{ return GE_OP; }
+{ return DEC_OP; }
 	YY_BREAK
 case 208:
 YY_RULE_SETUP
-{ return EQ_OP; }
+{ return AND_OP; }
 	YY_BREAK
 case 209:
 YY_RULE_SETUP
-{ return NE_OP; }
+{ return OR_OP; }
 	YY_BREAK
 case 210:
 YY_RULE_SETUP
-{ return LEFT_OP; }
+{ return XOR_OP; }
 	YY_BREAK
 case 211:
 YY_RULE_SETUP
-{ return RIGHT_OP; }
+{ return LE_OP; }
 	YY_BREAK
 case 212:
 YY_RULE_SETUP
-{ return SEMICOLON; }
+{ return GE_OP; }
 	YY_BREAK
 case 213:
 YY_RULE_SETUP
-{ return LEFT_BRACE; }
+{ return EQ_OP; }
 	YY_BREAK
 case 214:
 YY_RULE_SETUP
-{ return RIGHT_BRACE; }
+{ return NE_OP; }
 	YY_BREAK
 case 215:
 YY_RULE_SETUP
-{ return COMMA; }
+{ return LEFT_OP; }
 	YY_BREAK
 case 216:
 YY_RULE_SETUP
-{ return COLON; }
+{ return RIGHT_OP; }
 	YY_BREAK
 case 217:
 YY_RULE_SETUP
-{ return EQUAL; }
+{ return SEMICOLON; }
 	YY_BREAK
 case 218:
 YY_RULE_SETUP
-{ return LEFT_PAREN; }
+{ return LEFT_BRACE; }
 	YY_BREAK
 case 219:
 YY_RULE_SETUP
-{ return RIGHT_PAREN; }
+{ return RIGHT_BRACE; }
 	YY_BREAK
 case 220:
 YY_RULE_SETUP
-{ return LEFT_BRACKET; }
+{ return COMMA; }
 	YY_BREAK
 case 221:
 YY_RULE_SETUP
-{ return RIGHT_BRACKET; }
+{ return COLON; }
 	YY_BREAK
 case 222:
 YY_RULE_SETUP
-{ BEGIN(FIELDS); return DOT; }
+{ return EQUAL; }
 	YY_BREAK
 case 223:
 YY_RULE_SETUP
-{ return BANG; }
+{ return LEFT_PAREN; }
 	YY_BREAK
 case 224:
 YY_RULE_SETUP
-{ return DASH; }
+{ return RIGHT_PAREN; }
 	YY_BREAK
 case 225:
 YY_RULE_SETUP
-{ return TILDE; }
+{ return LEFT_BRACKET; }
 	YY_BREAK
 case 226:
 YY_RULE_SETUP
-{ return PLUS; }
+{ return RIGHT_BRACKET; }
 	YY_BREAK
 case 227:
 YY_RULE_SETUP
-{ return STAR; }
+{ BEGIN(FIELDS); return DOT; }
 	YY_BREAK
 case 228:
 YY_RULE_SETUP
-{ return SLASH; }
+{ return BANG; }
 	YY_BREAK
 case 229:
 YY_RULE_SETUP
-{ return PERCENT; }
+{ return DASH; }
 	YY_BREAK
 case 230:
 YY_RULE_SETUP
-{ return LEFT_ANGLE; }
+{ return TILDE; }
 	YY_BREAK
 case 231:
 YY_RULE_SETUP
-{ return RIGHT_ANGLE; }
+{ return PLUS; }
 	YY_BREAK
 case 232:
 YY_RULE_SETUP
-{ return VERTICAL_BAR; }
+{ return STAR; }
 	YY_BREAK
 case 233:
 YY_RULE_SETUP
-{ return CARET; }
+{ return SLASH; }
 	YY_BREAK
 case 234:
 YY_RULE_SETUP
-{ return AMPERSAND; }
+{ return PERCENT; }
 	YY_BREAK
 case 235:
 YY_RULE_SETUP
-{ return QUESTION; }
+{ return LEFT_ANGLE; }
 	YY_BREAK
 case 236:
 YY_RULE_SETUP
+{ return RIGHT_ANGLE; }
+	YY_BREAK
+case 237:
+YY_RULE_SETUP
+{ return VERTICAL_BAR; }
+	YY_BREAK
+case 238:
+YY_RULE_SETUP
+{ return CARET; }
+	YY_BREAK
+case 239:
+YY_RULE_SETUP
+{ return AMPERSAND; }
+	YY_BREAK
+case 240:
+YY_RULE_SETUP
+{ return QUESTION; }
+	YY_BREAK
+case 241:
+YY_RULE_SETUP
 {
     BEGIN(INITIAL);
     yylval->lex.string = NewPoolTString(yytext);
     return FIELD_SELECTION;
 }
 	YY_BREAK
-case 237:
+case 242:
 YY_RULE_SETUP
 {}
 	YY_BREAK
-case 238:
+case 243:
 YY_RULE_SETUP
 {
     yyextra->error(*yylloc, "Illegal character at fieldname start", yytext);
     return 0;
 }
 	YY_BREAK
-case 239:
-/* rule 239 can match eol */
+case 244:
+/* rule 244 can match eol */
 YY_RULE_SETUP
 { }
 	YY_BREAK
@@ -2164,11 +2222,11 @@
 case YY_STATE_EOF(FIELDS):
 { yyterminate(); }
 	YY_BREAK
-case 240:
+case 245:
 YY_RULE_SETUP
 { assert(false); return 0; }
 	YY_BREAK
-case 241:
+case 246:
 YY_RULE_SETUP
 ECHO;
 	YY_BREAK
@@ -2467,7 +2525,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 >= 824 )
+			if ( yy_current_state >= 886 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2496,11 +2554,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 >= 824 )
+		if ( yy_current_state >= 886 )
 			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 == 823);
+	yy_is_jam = (yy_current_state == 885);
 
 	(void)yyg;
 	return yy_is_jam ? 0 : yy_current_state;
@@ -3440,6 +3498,21 @@
     return token;
 }
 
+int ES3_extension_keyword_else_ident(TParseContext *context, const char* extension, int token)
+{
+    struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
+    yyscan_t yyscanner = (yyscan_t) context->getScanner();
+
+    // a reserved word in GLSL ES 3.00 with enabled extension, otherwise could be used as an identifier/type name
+    if (context->getShaderVersion() >= 300 && context->isExtensionEnabled(extension))
+    {
+        return token;
+    }
+
+    yylval->lex.string = NewPoolTString(yytext);
+    return check_type(yyscanner);
+}
+
 int uint_constant(TParseContext *context)
 {
     struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
@@ -3501,6 +3574,22 @@
     return FLOATCONSTANT;
 }
 
+int yuvcscstandardext_constant(TParseContext *context)
+{
+    struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
+    yyscan_t yyscanner = (yyscan_t) context->getScanner();
+
+    // a reserved word in GLSL ES 3.00 with enabled extension, otherwise could be used as an identifier/type name
+    if (context->getShaderVersion() >= 300 && context->isExtensionEnabled("GL_EXT_YUV_target"))
+    {
+        yylval->lex.string = NewPoolTString(yytext);
+        return YUVCSCSTANDARDEXTCONSTANT;
+    }
+
+    yylval->lex.string = NewPoolTString(yytext);
+    return check_type(yyscanner);
+}
+
 int glslang_initialize(TParseContext* context) {
     yyscan_t scanner = NULL;
     if (yylex_init_extra(context,&scanner))
diff --git a/src/compiler/translator/glslang_tab.cpp b/src/compiler/translator/glslang_tab.cpp
index b6f1a04..41f7cdf 100644
--- a/src/compiler/translator/glslang_tab.cpp
+++ b/src/compiler/translator/glslang_tab.cpp
@@ -218,71 +218,74 @@
     SAMPLER2DSHADOW = 336,
     SAMPLERCUBESHADOW = 337,
     SAMPLER2DARRAYSHADOW = 338,
-    IMAGE2D = 339,
-    IIMAGE2D = 340,
-    UIMAGE2D = 341,
-    IMAGE3D = 342,
-    IIMAGE3D = 343,
-    UIMAGE3D = 344,
-    IMAGE2DARRAY = 345,
-    IIMAGE2DARRAY = 346,
-    UIMAGE2DARRAY = 347,
-    IMAGECUBE = 348,
-    IIMAGECUBE = 349,
-    UIMAGECUBE = 350,
-    LAYOUT = 351,
-    IDENTIFIER = 352,
-    TYPE_NAME = 353,
-    FLOATCONSTANT = 354,
-    INTCONSTANT = 355,
-    UINTCONSTANT = 356,
-    BOOLCONSTANT = 357,
-    FIELD_SELECTION = 358,
-    LEFT_OP = 359,
-    RIGHT_OP = 360,
-    INC_OP = 361,
-    DEC_OP = 362,
-    LE_OP = 363,
-    GE_OP = 364,
-    EQ_OP = 365,
-    NE_OP = 366,
-    AND_OP = 367,
-    OR_OP = 368,
-    XOR_OP = 369,
-    MUL_ASSIGN = 370,
-    DIV_ASSIGN = 371,
-    ADD_ASSIGN = 372,
-    MOD_ASSIGN = 373,
-    LEFT_ASSIGN = 374,
-    RIGHT_ASSIGN = 375,
-    AND_ASSIGN = 376,
-    XOR_ASSIGN = 377,
-    OR_ASSIGN = 378,
-    SUB_ASSIGN = 379,
-    LEFT_PAREN = 380,
-    RIGHT_PAREN = 381,
-    LEFT_BRACKET = 382,
-    RIGHT_BRACKET = 383,
-    LEFT_BRACE = 384,
-    RIGHT_BRACE = 385,
-    DOT = 386,
-    COMMA = 387,
-    COLON = 388,
-    EQUAL = 389,
-    SEMICOLON = 390,
-    BANG = 391,
-    DASH = 392,
-    TILDE = 393,
-    PLUS = 394,
-    STAR = 395,
-    SLASH = 396,
-    PERCENT = 397,
-    LEFT_ANGLE = 398,
-    RIGHT_ANGLE = 399,
-    VERTICAL_BAR = 400,
-    CARET = 401,
-    AMPERSAND = 402,
-    QUESTION = 403
+    SAMPLEREXTERNAL2DY2YEXT = 339,
+    IMAGE2D = 340,
+    IIMAGE2D = 341,
+    UIMAGE2D = 342,
+    IMAGE3D = 343,
+    IIMAGE3D = 344,
+    UIMAGE3D = 345,
+    IMAGE2DARRAY = 346,
+    IIMAGE2DARRAY = 347,
+    UIMAGE2DARRAY = 348,
+    IMAGECUBE = 349,
+    IIMAGECUBE = 350,
+    UIMAGECUBE = 351,
+    LAYOUT = 352,
+    YUVCSCSTANDARDEXT = 353,
+    YUVCSCSTANDARDEXTCONSTANT = 354,
+    IDENTIFIER = 355,
+    TYPE_NAME = 356,
+    FLOATCONSTANT = 357,
+    INTCONSTANT = 358,
+    UINTCONSTANT = 359,
+    BOOLCONSTANT = 360,
+    FIELD_SELECTION = 361,
+    LEFT_OP = 362,
+    RIGHT_OP = 363,
+    INC_OP = 364,
+    DEC_OP = 365,
+    LE_OP = 366,
+    GE_OP = 367,
+    EQ_OP = 368,
+    NE_OP = 369,
+    AND_OP = 370,
+    OR_OP = 371,
+    XOR_OP = 372,
+    MUL_ASSIGN = 373,
+    DIV_ASSIGN = 374,
+    ADD_ASSIGN = 375,
+    MOD_ASSIGN = 376,
+    LEFT_ASSIGN = 377,
+    RIGHT_ASSIGN = 378,
+    AND_ASSIGN = 379,
+    XOR_ASSIGN = 380,
+    OR_ASSIGN = 381,
+    SUB_ASSIGN = 382,
+    LEFT_PAREN = 383,
+    RIGHT_PAREN = 384,
+    LEFT_BRACKET = 385,
+    RIGHT_BRACKET = 386,
+    LEFT_BRACE = 387,
+    RIGHT_BRACE = 388,
+    DOT = 389,
+    COMMA = 390,
+    COLON = 391,
+    EQUAL = 392,
+    SEMICOLON = 393,
+    BANG = 394,
+    DASH = 395,
+    TILDE = 396,
+    PLUS = 397,
+    STAR = 398,
+    SLASH = 399,
+    PERCENT = 400,
+    LEFT_ANGLE = 401,
+    RIGHT_ANGLE = 402,
+    VERTICAL_BAR = 403,
+    CARET = 404,
+    AMPERSAND = 405,
+    QUESTION = 406
   };
 #endif
 
@@ -666,23 +669,23 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  130
+#define YYFINAL  132
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2916
+#define YYLAST   2993
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  149
+#define YYNTOKENS  152
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  94
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  291
+#define YYNRULES  294
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  427
+#define YYNSTATES  430
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   403
+#define YYMAXUTOK   406
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -731,43 +734,43 @@
      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148
+     145,   146,   147,   148,   149,   150,   151
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   246,   246,   247,   250,   260,   263,   268,   273,   278,
-     283,   289,   292,   295,   298,   301,   304,   310,   317,   323,
-     327,   335,   338,   344,   348,   355,   360,   367,   375,   381,
-     387,   396,   399,   402,   405,   415,   416,   417,   418,   426,
-     427,   430,   433,   440,   441,   444,   450,   451,   455,   462,
-     463,   466,   469,   472,   478,   479,   482,   488,   489,   496,
-     497,   504,   505,   512,   513,   519,   520,   526,   527,   533,
-     534,   540,   541,   548,   549,   550,   551,   555,   556,   557,
-     561,   565,   569,   573,   580,   583,   589,   596,   603,   606,
-     609,   618,   622,   626,   630,   634,   641,   648,   651,   658,
-     666,   686,   696,   704,   729,   733,   737,   741,   748,   755,
-     758,   762,   766,   771,   776,   783,   787,   791,   795,   800,
-     805,   812,   816,   822,   825,   831,   835,   842,   848,   852,
-     856,   859,   862,   871,   877,   885,   888,   908,   927,   934,
-     938,   942,   945,   948,   951,   954,   957,   965,   972,   975,
-     978,   984,   991,   994,  1000,  1003,  1006,  1009,  1015,  1018,
-    1023,  1034,  1037,  1040,  1043,  1046,  1049,  1053,  1057,  1061,
-    1065,  1069,  1073,  1077,  1081,  1085,  1089,  1093,  1097,  1101,
-    1105,  1109,  1113,  1117,  1121,  1125,  1129,  1133,  1136,  1139,
-    1142,  1145,  1148,  1151,  1154,  1157,  1160,  1163,  1166,  1169,
-    1172,  1175,  1178,  1181,  1184,  1187,  1194,  1200,  1203,  1206,
-    1209,  1212,  1215,  1218,  1221,  1224,  1227,  1230,  1233,  1236,
-    1239,  1251,  1251,  1254,  1254,  1260,  1263,  1269,  1272,  1279,
-    1283,  1289,  1295,  1307,  1311,  1315,  1316,  1322,  1323,  1324,
-    1325,  1326,  1327,  1328,  1332,  1333,  1333,  1333,  1342,  1343,
-    1347,  1347,  1348,  1348,  1353,  1356,  1365,  1370,  1377,  1378,
-    1382,  1389,  1393,  1400,  1400,  1407,  1410,  1417,  1421,  1434,
-    1434,  1439,  1439,  1445,  1445,  1453,  1456,  1462,  1465,  1471,
-    1475,  1482,  1485,  1488,  1491,  1494,  1503,  1509,  1515,  1518,
-    1524,  1524
+       0,   248,   248,   249,   252,   262,   265,   270,   275,   280,
+     285,   293,   299,   302,   305,   308,   311,   314,   320,   327,
+     333,   337,   345,   348,   354,   358,   365,   370,   377,   385,
+     391,   397,   406,   409,   412,   415,   425,   426,   427,   428,
+     436,   437,   440,   443,   450,   451,   454,   460,   461,   465,
+     472,   473,   476,   479,   482,   488,   489,   492,   498,   499,
+     506,   507,   514,   515,   522,   523,   529,   530,   536,   537,
+     543,   544,   550,   551,   558,   559,   560,   561,   565,   566,
+     567,   571,   575,   579,   583,   590,   593,   599,   606,   613,
+     616,   619,   628,   632,   636,   640,   644,   651,   658,   661,
+     668,   676,   696,   706,   714,   739,   743,   747,   751,   758,
+     765,   768,   772,   776,   781,   786,   793,   797,   801,   805,
+     810,   815,   822,   826,   832,   835,   841,   845,   852,   858,
+     862,   866,   869,   872,   881,   887,   895,   898,   918,   937,
+     944,   948,   952,   955,   958,   961,   964,   967,   975,   982,
+     985,   988,   994,  1001,  1004,  1010,  1013,  1016,  1019,  1025,
+    1028,  1033,  1044,  1047,  1050,  1053,  1056,  1059,  1063,  1067,
+    1071,  1075,  1079,  1083,  1087,  1091,  1095,  1099,  1103,  1107,
+    1111,  1115,  1119,  1123,  1127,  1131,  1135,  1139,  1143,  1149,
+    1152,  1155,  1158,  1161,  1164,  1167,  1170,  1173,  1176,  1179,
+    1182,  1185,  1188,  1191,  1194,  1197,  1200,  1203,  1210,  1216,
+    1222,  1225,  1228,  1231,  1234,  1237,  1240,  1243,  1246,  1249,
+    1252,  1255,  1258,  1261,  1273,  1273,  1276,  1276,  1282,  1285,
+    1291,  1294,  1301,  1305,  1311,  1317,  1329,  1333,  1337,  1338,
+    1344,  1345,  1346,  1347,  1348,  1349,  1350,  1354,  1355,  1355,
+    1355,  1364,  1365,  1369,  1369,  1370,  1370,  1375,  1378,  1387,
+    1392,  1399,  1400,  1404,  1411,  1415,  1422,  1422,  1429,  1432,
+    1439,  1443,  1456,  1456,  1461,  1461,  1467,  1467,  1475,  1478,
+    1484,  1487,  1493,  1497,  1504,  1507,  1510,  1513,  1516,  1525,
+    1531,  1537,  1540,  1546,  1546
 };
 #endif
 
@@ -791,10 +794,11 @@
   "ISAMPLERCUBE", "ISAMPLER2DARRAY", "USAMPLER2D", "USAMPLER3D",
   "USAMPLERCUBE", "USAMPLER2DARRAY", "SAMPLER2DMS", "ISAMPLER2DMS",
   "USAMPLER2DMS", "SAMPLER3D", "SAMPLER3DRECT", "SAMPLER2DSHADOW",
-  "SAMPLERCUBESHADOW", "SAMPLER2DARRAYSHADOW", "IMAGE2D", "IIMAGE2D",
-  "UIMAGE2D", "IMAGE3D", "IIMAGE3D", "UIMAGE3D", "IMAGE2DARRAY",
-  "IIMAGE2DARRAY", "UIMAGE2DARRAY", "IMAGECUBE", "IIMAGECUBE",
-  "UIMAGECUBE", "LAYOUT", "IDENTIFIER", "TYPE_NAME", "FLOATCONSTANT",
+  "SAMPLERCUBESHADOW", "SAMPLER2DARRAYSHADOW", "SAMPLEREXTERNAL2DY2YEXT",
+  "IMAGE2D", "IIMAGE2D", "UIMAGE2D", "IMAGE3D", "IIMAGE3D", "UIMAGE3D",
+  "IMAGE2DARRAY", "IIMAGE2DARRAY", "UIMAGE2DARRAY", "IMAGECUBE",
+  "IIMAGECUBE", "UIMAGECUBE", "LAYOUT", "YUVCSCSTANDARDEXT",
+  "YUVCSCSTANDARDEXTCONSTANT", "IDENTIFIER", "TYPE_NAME", "FLOATCONSTANT",
   "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT", "FIELD_SELECTION",
   "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP",
   "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN",
@@ -858,16 +862,17 @@
      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
-     395,   396,   397,   398,   399,   400,   401,   402,   403
+     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
+     405,   406
 };
 # endif
 
-#define YYPACT_NINF -375
+#define YYPACT_NINF -368
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-375)))
+  (!!((Yystate) == (-368)))
 
-#define YYTABLE_NINF -251
+#define YYTABLE_NINF -254
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -876,49 +881,49 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2544,  -375,  -375,  -375,  -375,   102,  -375,  -375,  -375,  -375,
-    -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
-    -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
-    -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
-    -375,  -375,  -375,  -375,  -375,  -375,  -375,   -76,  -375,  -375,
-    -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
-    -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
-    -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
-    -375,  -101,  -375,  -375,   -92,   -75,   -52,  2640,   -97,  -375,
-     -12,  -375,  1332,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
-     -79,  -375,  2448,  -375,  -375,  2818,  -375,  -375,  -375,   -59,
-     -41,  -375,   -38,  -375,  2640,  -375,  -375,  -375,  2640,    43,
-      43,  -375,    -5,  -102,  -109,  -375,  2640,  -375,  -375,  1423,
-    -375,  -375,     8,  2640,  -375,  -375,     1,   -72,  -375,   411,
-    -375,  -375,  -375,  -375,     3,   -98,  -375,  1542,  1896,  -375,
-    -375,  2640,    43,  2130,  -375,    27,  -375,  -375,  -375,  -375,
-    -375,  1896,  1896,  1896,  -375,  -375,  -375,  -375,  -375,  -375,
-    -375,   -43,  -375,  -375,  -375,    45,   -49,  2012,    55,  -375,
-    1896,    26,   -71,   -11,   -62,    38,    39,    42,    40,    75,
-      77,   -86,  -375,    61,  -375,  -375,  2236,  2640,    54,  -375,
-     -41,    57,    58,  -375,    70,    78,    65,  1661,    79,  1896,
-      69,    80,    76,  -375,  -375,    41,  -375,  -375,   -57,  -375,
-     -92,    82,  -375,  -375,  -375,  -375,   548,  -375,  -375,  -375,
-    -375,  -375,  -375,  1896,  1777,  1896,    74,    81,  -375,  -375,
-      43,    83,    -4,  -375,   -78,  -375,  -375,  -375,   -37,  -375,
-    -375,  1896,  2729,  -375,  -375,  1896,    85,  -375,  -375,  -375,
-    1896,  1896,  1896,  1896,  1896,  1896,  1896,  1896,  1896,  1896,
-    1896,  1896,  1896,  1896,  1896,  1896,  1896,  1896,  1896,  1896,
-    -375,  -375,  2342,  -375,  -375,  -375,  -375,  -375,    86,  -375,
-    1896,  -375,  -375,    -3,  1896,    84,  -375,  -375,  -375,   685,
-    -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
-    -375,  1896,  1896,  -375,  -375,  -375,    88,    87,    90,  -375,
-    1896,    89,     2,  1896,    43,  -375,  -104,  -375,  -375,    91,
-      92,  -375,    95,  -375,  -375,  -375,  -375,  -375,    26,    26,
-     -71,   -71,   -11,   -11,   -11,   -11,   -62,   -62,    38,    39,
-      42,    40,    75,    77,    37,  -375,   160,   -38,   959,  1096,
-     -36,  -375,   -23,  -375,  1214,   685,  -375,  -375,  -375,  1896,
-      93,  -375,  1896,  -375,    97,  -375,  1896,  -375,  -375,  1896,
-     103,  -375,  -375,  -375,  -375,  1214,    86,  -375,    92,    43,
-    2640,   104,    99,  -375,  1896,  -375,  -375,   108,  -375,  1896,
-    -375,   105,   111,   221,  -375,   110,   112,   822,  -375,  -375,
-     107,   -22,  1896,   822,    86,  -375,  1896,  -375,  -375,  -375,
-    -375,   109,    92,  -375,  -375,  -375,  -375
+    2609,  -368,  -368,  -368,  -368,   142,  -368,  -368,  -368,  -368,
+    -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,
+    -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,
+    -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,
+    -368,  -368,  -368,  -368,  -368,  -368,  -368,   -80,  -368,  -368,
+    -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,
+    -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,
+    -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,
+    -368,  -368,   -68,  -368,  -368,  -368,   -69,   -56,   -50,  2708,
+     -95,  -368,   -75,  -368,  1364,  -368,  -368,  -368,  -368,  -368,
+    -368,  -368,   -37,  -368,  2510,  -368,  -368,  2892,  -368,  -368,
+    -368,   -22,   -43,  -368,   -17,  -368,  2708,  -368,  -368,  -368,
+    2708,    29,    29,  -368,   -20,  -103,   -96,  -368,  2708,  -368,
+    -368,  1458,  -368,  -368,   -32,  2708,  -368,  -368,   -15,   -65,
+    -368,   422,  -368,  -368,  -368,  -368,     9,   -99,  -368,  1580,
+    1943,  -368,  -368,  2708,    29,  2183,  -368,  -368,    24,  -368,
+    -368,  -368,  -368,  -368,  1943,  1943,  1943,  -368,  -368,  -368,
+    -368,  -368,  -368,  -368,   -38,  -368,  -368,  -368,    35,   -48,
+    2062,    26,  -368,  1943,     6,   -89,    49,   -67,    23,    18,
+      22,    27,    57,    60,   -93,  -368,    47,  -368,  -368,  2292,
+    2708,    55,  -368,   -43,    41,    42,  -368,    53,    56,    48,
+    1702,    61,  1943,    52,    62,    50,  -368,  -368,    98,  -368,
+    -368,   -73,  -368,   -69,    64,  -368,  -368,  -368,  -368,   562,
+    -368,  -368,  -368,  -368,  -368,  -368,  1943,  1821,  1943,    58,
+      54,  -368,  -368,    29,    63,   -52,  -368,   -82,  -368,  -368,
+    -368,   -47,  -368,  -368,  1943,  2800,  -368,  -368,  1943,    67,
+    -368,  -368,  -368,  1943,  1943,  1943,  1943,  1943,  1943,  1943,
+    1943,  1943,  1943,  1943,  1943,  1943,  1943,  1943,  1943,  1943,
+    1943,  1943,  1943,  -368,  -368,  2401,  -368,  -368,  -368,  -368,
+    -368,    65,  -368,  1943,  -368,  -368,   -40,  1943,    66,  -368,
+    -368,  -368,   702,  -368,  -368,  -368,  -368,  -368,  -368,  -368,
+    -368,  -368,  -368,  -368,  1943,  1943,  -368,  -368,  -368,    70,
+      68,    72,  -368,  1943,    69,   -12,  1943,    29,  -368,  -106,
+    -368,  -368,    76,    73,  -368,    83,  -368,  -368,  -368,  -368,
+    -368,     6,     6,   -89,   -89,    49,    49,    49,    49,   -67,
+     -67,    23,    18,    22,    27,    57,    60,    25,  -368,   151,
+     -17,   982,  1122,   -45,  -368,   -26,  -368,  1243,   702,  -368,
+    -368,  -368,  1943,    78,  -368,  1943,  -368,    95,  -368,  1943,
+    -368,  -368,  1943,    99,  -368,  -368,  -368,  -368,  1243,    65,
+    -368,    73,    29,  2708,   101,   103,  -368,  1943,  -368,  -368,
+     106,  -368,  1943,  -368,    94,   109,   222,  -368,   108,   105,
+     842,  -368,  -368,   107,   -24,  1943,   842,    65,  -368,  1943,
+    -368,  -368,  -368,  -368,   110,    73,  -368,  -368,  -368,  -368
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -926,79 +931,79 @@
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,   127,   148,   149,   150,     0,   133,   135,   165,   162,
-     163,   164,   169,   170,   171,   172,   173,   174,   166,   167,
-     168,   175,   176,   177,   178,   179,   180,   136,   137,   138,
-     140,   134,   181,   182,   183,   184,   185,   186,   139,   124,
-     123,   141,   142,   143,   144,   145,   146,     0,   161,   187,
-     189,   205,   206,   190,   192,   193,   194,   195,   197,   198,
-     199,   200,   191,   196,   201,   188,   202,   203,   204,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,     0,   220,   289,   290,     0,    98,    97,     0,   109,
-     115,   131,     0,   132,   125,   128,   121,   130,   129,   147,
-     158,   207,     0,   286,   288,     0,     2,     3,   223,     0,
-       0,    88,     0,    96,     0,   105,    99,   107,     0,   108,
-       0,    89,     2,   116,     0,    94,     0,   126,   122,     0,
-       1,   287,     0,     0,   221,   157,   154,     0,   152,     0,
-     291,   100,   104,   106,   102,   110,   101,     0,     0,    87,
-      95,     0,     0,     0,   225,     4,     8,     6,     7,     9,
-      30,     0,     0,     0,   159,    37,    36,    38,    35,     5,
-      11,    31,    13,    18,    19,     0,     0,    24,     0,    39,
-       0,    43,    46,    49,    54,    57,    59,    61,    63,    65,
-      67,    69,    86,     0,    28,    90,     0,     0,     0,   151,
-       0,     0,     0,   271,     0,     0,     0,     0,     0,     0,
-       0,     0,   245,   254,   258,    39,    71,    84,     0,   234,
-       0,   147,   237,   256,   236,   235,     0,   238,   239,   240,
-     241,   242,   243,     0,     0,     0,     0,     0,   233,   120,
-       0,   231,     0,   229,     0,   226,    32,    33,     0,    15,
-      16,     0,     0,    22,    21,     0,   161,    25,    27,    34,
+       0,   128,   149,   150,   151,     0,   134,   136,   166,   163,
+     164,   165,   170,   171,   172,   173,   174,   175,   167,   168,
+     169,   176,   177,   178,   179,   180,   181,   137,   138,   139,
+     141,   135,   182,   183,   184,   185,   186,   187,   140,   125,
+     124,   142,   143,   144,   145,   146,   147,     0,   162,   189,
+     191,   207,   209,   192,   194,   195,   196,   197,   199,   200,
+     201,   202,   193,   198,   203,   190,   204,   205,   206,   208,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,     0,   188,   223,   292,   293,     0,    99,    98,
+       0,   110,   116,   132,     0,   133,   126,   129,   122,   131,
+     130,   148,   159,   210,     0,   289,   291,     0,     2,     3,
+     226,     0,     0,    89,     0,    97,     0,   106,   100,   108,
+       0,   109,     0,    90,     2,   117,     0,    95,     0,   127,
+     123,     0,     1,   290,     0,     0,   224,   158,   155,     0,
+     153,     0,   294,   101,   105,   107,   103,   111,   102,     0,
+       0,    88,    96,     0,     0,     0,   228,    10,     4,     8,
+       6,     7,     9,    31,     0,     0,     0,   160,    38,    37,
+      39,    36,     5,    12,    32,    14,    19,    20,     0,     0,
+      25,     0,    40,     0,    44,    47,    50,    55,    58,    60,
+      62,    64,    66,    68,    70,    87,     0,    29,    91,     0,
+       0,     0,   152,     0,     0,     0,   274,     0,     0,     0,
+       0,     0,     0,     0,     0,   248,   257,   261,    40,    72,
+      85,     0,   237,     0,   148,   240,   259,   239,   238,     0,
+     241,   242,   243,   244,   245,   246,     0,     0,     0,     0,
+       0,   236,   121,     0,   234,     0,   232,     0,   229,    33,
+      34,     0,    16,    17,     0,     0,    23,    22,     0,   162,
+      26,    28,    35,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     160,   224,     0,   155,   156,   153,   282,   281,   252,   273,
-       0,   285,   283,     0,     0,     0,   266,   269,   244,     0,
-      74,    75,    77,    76,    79,    80,    81,    82,    83,    78,
-      73,     0,     0,   259,   255,   257,     0,     0,     0,   114,
-       0,   117,     0,     0,     0,   227,     0,    91,    10,     0,
-      17,    29,    14,    20,    26,    40,    41,    42,    45,    44,
-      47,    48,    52,    53,    50,    51,    55,    56,    58,    60,
-      62,    64,    66,    68,     0,   222,     0,     0,     0,     0,
-       0,   284,     0,   265,     0,   246,    72,    85,   103,     0,
-     111,   118,     0,   228,     0,   230,     0,    92,    12,     0,
-       0,   251,   253,   276,   275,   278,   252,   263,   267,     0,
-       0,     0,     0,   112,     0,   119,   232,     0,    70,     0,
-     277,     0,     0,   262,   260,     0,     0,     0,   247,   113,
-       0,     0,   279,     0,   252,   264,     0,   249,   270,   248,
-      93,     0,   280,   274,   261,   268,   272
+       0,     0,     0,   161,   227,     0,   156,   157,   154,   285,
+     284,   255,   276,     0,   288,   286,     0,     0,     0,   269,
+     272,   247,     0,    75,    76,    78,    77,    80,    81,    82,
+      83,    84,    79,    74,     0,     0,   262,   258,   260,     0,
+       0,     0,   115,     0,   118,     0,     0,     0,   230,     0,
+      92,    11,     0,    18,    30,    15,    21,    27,    41,    42,
+      43,    46,    45,    48,    49,    53,    54,    51,    52,    56,
+      57,    59,    61,    63,    65,    67,    69,     0,   225,     0,
+       0,     0,     0,     0,   287,     0,   268,     0,   249,    73,
+      86,   104,     0,   112,   119,     0,   231,     0,   233,     0,
+      93,    13,     0,     0,   254,   256,   279,   278,   281,   255,
+     266,   270,     0,     0,     0,     0,   113,     0,   120,   235,
+       0,    71,     0,   280,     0,     0,   265,   263,     0,     0,
+       0,   250,   114,     0,     0,   282,     0,   255,   267,     0,
+     252,   273,   251,    94,     0,   283,   277,   264,   271,   275
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -375,   -46,  -375,  -375,  -375,  -375,  -375,  -375,    -7,  -375,
-    -375,  -375,  -375,    52,  -375,   -87,   -82,  -145,   -93,   -25,
-     -24,   -21,   -19,   -26,   -20,  -375,   -88,  -138,  -375,  -152,
-    -133,  -375,     9,    17,  -375,  -375,  -375,   134,   139,   137,
-    -375,  -375,  -327,  -375,   -81,  -375,   -90,  -375,   -84,   254,
-    -375,  -375,    62,     0,  -375,  -375,  -375,  -375,  -118,  -146,
-      23,   -60,  -222,   -94,  -221,  -342,  -139,  -375,  -375,  -144,
-    -374,  -375,  -375,  -108,   -32,   -91,  -375,  -375,  -375,  -375,
-    -375,  -115,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
-    -375,   169,  -375,  -375
+    -368,   -46,  -368,  -368,  -368,  -368,  -368,  -368,    -9,  -368,
+    -368,  -368,  -368,    45,  -368,  -104,  -102,  -139,  -105,   -33,
+     -27,   -25,   -28,   -21,   -29,  -368,  -112,  -141,  -368,  -155,
+    -135,  -368,    10,    17,  -368,  -368,  -368,   134,   139,   138,
+    -368,  -368,  -339,  -368,   -81,  -368,   -90,  -368,   -87,   256,
+    -368,  -368,    59,     0,  -368,  -368,  -368,  -368,  -122,  -140,
+      20,   -63,  -232,   -97,  -224,  -349,  -142,  -368,  -368,  -148,
+    -367,  -368,  -368,  -111,   -31,   -92,  -368,  -368,  -368,  -368,
+    -368,  -119,  -368,  -368,  -368,  -368,  -368,  -368,  -368,  -368,
+    -368,   168,  -368,  -368
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   241,   169,   170,   171,   329,   172,   173,   174,   175,
-     176,   177,   178,   215,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   216,   217,   311,   218,
-     193,   126,   219,   220,    85,    86,    87,   115,   116,   117,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,   137,   138,   194,   100,   101,   197,   133,   153,   154,
-     242,   243,   239,   222,   223,   224,   225,   299,   392,   418,
-     356,   357,   358,   419,   226,   227,   228,   404,   229,   405,
-     230,   391,   231,   364,   288,   359,   385,   401,   402,   232,
-     102,   103,   104,   112
+      -1,   244,   172,   173,   174,   332,   175,   176,   177,   178,
+     179,   180,   181,   218,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   219,   220,   314,   221,
+     196,   128,   222,   223,    87,    88,    89,   117,   118,   119,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   139,   140,   197,   102,   103,   200,   135,   155,   156,
+     245,   246,   242,   225,   226,   227,   228,   302,   395,   421,
+     359,   360,   361,   422,   229,   230,   231,   407,   232,   408,
+     233,   394,   234,   367,   291,   362,   388,   404,   405,   235,
+     104,   105,   106,   114
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1006,130 +1011,145 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      99,   109,   127,   119,   140,   315,   118,   245,   128,    83,
-     238,   248,   403,   319,   237,   196,   382,    84,   135,   326,
-     149,   106,   107,   376,   110,   147,   150,   278,   127,   234,
-     119,   377,   148,   118,   119,   120,   235,   389,   121,   257,
-     424,   192,   152,   111,   123,   151,   267,   268,   129,   152,
-     245,   113,   151,   108,   199,   293,   136,   327,   389,   192,
-     200,   127,   279,   249,   250,   417,   263,   240,   264,   152,
-     134,   417,   151,   144,   145,   312,   295,   254,   313,   282,
-     114,   269,   270,   255,   251,   122,   107,    99,   252,   328,
-     386,   139,    99,   265,   266,   312,   312,   238,   371,   330,
-     316,   318,    99,   387,   421,   132,     2,     3,     4,   312,
-     312,    83,   152,   152,    99,   151,   151,   334,    99,    84,
-     146,   192,   342,   343,   344,   345,    99,   354,   324,   312,
-     233,   325,   361,    99,   324,   198,   245,   373,   360,   221,
-     106,   107,   362,   195,   315,   192,   192,   393,   271,   272,
-     395,    99,   -29,    99,   283,   284,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   260,   261,   262,   312,
-     379,   253,   409,   366,   367,   310,   338,   339,   346,   347,
-     258,   179,   238,   340,   341,   275,   273,   276,   274,   280,
-     374,   277,   286,   287,   425,   289,    99,    99,   152,   179,
-     291,   151,   296,   290,   294,   297,   298,   -28,   320,   321,
-     323,   -23,   388,   246,   247,  -250,   368,   363,   370,   378,
-     -30,   369,   380,   372,   312,   396,   221,   394,   399,   408,
-     407,   238,   259,   388,   238,   192,   410,   413,   414,   212,
-     412,   398,   420,   397,   426,   333,   416,   411,   348,   381,
-     349,   352,   142,   141,   350,   143,   238,   351,   353,   105,
-     422,   179,   285,   322,   375,   383,   415,   365,   384,   423,
-     400,   131,     0,     0,     0,     0,     0,     0,   238,     0,
-       0,     0,    99,   390,     0,   179,   179,     0,   192,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   221,
-     127,     0,     0,     0,   390,     0,   128,     0,     0,     0,
-       0,     0,   335,   336,   337,   179,   179,   179,   179,   179,
-     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
-     179,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   406,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   221,   221,
-       0,     0,     0,     0,   221,   221,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   179,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   221,     0,     0,     0,     0,
-      99,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   221,     0,     0,
-       0,     0,     0,   221,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,   201,   202,   203,   179,   204,
-     205,   206,   207,   208,   209,   210,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,   211,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,     0,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,   155,    82,
-     156,   157,   158,   159,   160,     0,     0,   161,   162,     0,
+     101,   111,   121,   142,   129,   318,   322,   130,   120,   241,
+      85,   251,   385,   199,   240,   248,   137,    86,   329,   195,
+     108,   109,   406,   281,   379,   124,   109,   149,   392,   121,
+     129,   237,   380,   121,   150,   120,   151,   195,   238,   260,
+     122,   154,   152,   123,   270,   271,   125,   153,   154,   392,
+     427,   266,   110,   267,   153,   296,   330,   138,   282,   248,
+     112,   420,   315,   129,   202,   316,   243,   420,   154,   113,
+     203,   252,   253,   115,   153,   146,   147,   298,   285,   272,
+     273,   257,   331,   327,   389,   116,   328,   258,   315,   101,
+     315,   374,   254,   131,   101,   315,   255,   241,   364,   333,
+     195,   319,   321,   390,   101,   424,   198,   134,   148,   315,
+     136,   315,   154,   154,    85,   141,   101,   337,   153,   153,
+     101,    86,   201,   327,   195,   195,   376,   357,   101,   108,
+     109,   345,   346,   347,   348,   101,   274,   275,   363,   236,
+     396,   224,   365,   398,   318,   248,     2,     3,     4,   263,
+     264,   265,   -30,   101,   261,   101,   268,   269,   286,   287,
+     315,   382,   341,   342,   256,   412,   343,   344,   276,   349,
+     350,   277,   279,   369,   370,   278,   182,   280,   283,   289,
+     290,   292,   241,   301,   293,   324,   294,   428,   299,   297,
+     300,   377,   -29,   326,   182,   323,   -24,  -253,   154,   101,
+     101,   371,   366,   373,   153,   372,   375,   381,   315,   249,
+     250,   -31,   391,   383,   195,   397,   303,   304,   305,   306,
+     307,   308,   309,   310,   311,   312,   399,   402,   262,   224,
+     410,   241,   415,   391,   241,   313,   411,   413,   416,   417,
+     215,   401,   419,   351,   400,   423,   336,   414,   429,   384,
+     352,   354,   356,   353,   144,   143,   241,   182,   145,   355,
+     425,   107,   288,   325,   378,   386,   418,   195,   426,   403,
+     387,   368,   133,     0,     0,     0,     0,     0,   241,     0,
+       0,   182,   182,     0,     0,   101,   393,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   163,     0,     0,     0,
-     212,   213,     0,     0,     0,     0,   214,   165,   166,   167,
-     168,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,   201,   202,   203,     0,   204,   205,   206,   207,
-     208,   209,   210,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-     211,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,     0,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,   155,    82,   156,   157,   158,
-     159,   160,     0,     0,   161,   162,     0,     0,     0,     0,
+       0,     0,   224,   129,     0,     0,   130,   393,   338,   339,
+     340,   182,   182,   182,   182,   182,   182,   182,   182,   182,
+     182,   182,   182,   182,   182,   182,   182,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   163,     0,     0,     0,   212,   314,     0,
-       0,     0,     0,   214,   165,   166,   167,   168,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,   201,
-     202,   203,     0,   204,   205,   206,   207,   208,   209,   210,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,   211,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,     0,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,   155,    82,   156,   157,   158,   159,   160,     0,
-       0,   161,   162,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   409,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     163,     0,     0,     0,   212,     0,     0,     0,     0,     0,
-     214,   165,   166,   167,   168,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,   201,   202,   203,     0,
-     204,   205,   206,   207,   208,   209,   210,    12,    13,    14,
+       0,   224,   224,     0,     0,     0,     0,   224,   224,     0,
+       0,   182,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   224,     0,
+       0,     0,     0,   101,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     224,     0,     0,     0,     0,     0,   224,     0,     0,     0,
+       0,     0,     0,     0,   182,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,   204,   205,   206,     0,
+     207,   208,   209,   210,   211,   212,   213,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,   211,    49,    50,    51,    52,    53,
+      45,    46,    47,    48,   214,    49,    50,    51,    52,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,     0,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,   155,
-      82,   156,   157,   158,   159,   160,     0,     0,   161,   162,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,   157,   158,    84,   159,   160,   161,   162,   163,     0,
+       0,   164,   165,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   163,     0,     0,
-       0,   139,     0,     0,     0,     0,     0,   214,   165,   166,
-     167,   168,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,   201,   202,   203,     0,   204,   205,   206,
-     207,   208,   209,   210,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,   211,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,     0,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,   155,    82,   156,   157,
-     158,   159,   160,     0,     0,   161,   162,     0,     0,     0,
+     166,     0,     0,     0,   215,   216,     0,     0,     0,     0,
+     217,   168,   169,   170,   171,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,   204,   205,   206,     0,
+     207,   208,   209,   210,   211,   212,   213,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,   214,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,     0,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,   157,   158,    84,   159,   160,   161,   162,   163,     0,
+       0,   164,   165,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   163,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   214,   165,   166,   167,   168,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+     166,     0,     0,     0,   215,   317,     0,     0,     0,     0,
+     217,   168,   169,   170,   171,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,   204,   205,   206,     0,
+     207,   208,   209,   210,   211,   212,   213,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,   214,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,     0,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,   157,   158,    84,   159,   160,   161,   162,   163,     0,
+       0,   164,   165,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,     0,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,     0,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,   155,    82,   156,   157,   158,   159,   160,
-       0,     0,   161,   162,     0,     0,     0,     0,     0,     0,
+     166,     0,     0,     0,   215,     0,     0,     0,     0,     0,
+     217,   168,   169,   170,   171,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,   204,   205,   206,     0,
+     207,   208,   209,   210,   211,   212,   213,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,   214,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,     0,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,   157,   158,    84,   159,   160,   161,   162,   163,     0,
+       0,   164,   165,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     166,     0,     0,     0,   141,     0,     0,     0,     0,     0,
+     217,   168,   169,   170,   171,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,   204,   205,   206,     0,
+     207,   208,   209,   210,   211,   212,   213,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,   214,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,     0,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,   157,   158,    84,   159,   160,   161,   162,   163,     0,
+       0,   164,   165,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     166,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     217,   168,   169,   170,   171,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,     0,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,     0,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,   157,   158,    84,   159,   160,   161,   162,   163,     0,
+       0,   164,   165,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     1,     2,     3,     4,
+     166,     6,     7,     8,     9,    10,    11,     0,     0,     0,
+     217,   168,   169,   170,   171,     0,     0,     0,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,     0,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,     0,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,   157,   158,    84,   159,   160,   161,   162,   163,
+       0,     0,   164,   165,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     1,     2,     3,
-       4,   163,     6,     7,     8,     9,    10,    11,     0,     0,
-       0,   214,   165,   166,   167,   168,     0,     0,     0,    12,
+       4,   166,     6,     7,     8,     9,    10,    11,     0,     0,
+       0,     0,   168,   169,   170,   171,     0,     0,     0,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
@@ -1137,254 +1157,207 @@
       52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,     0,    66,    67,    68,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,   155,    82,   156,   157,   158,   159,   160,     0,     0,
-     161,   162,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     1,     2,     3,     4,   163,
-       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
-     165,   166,   167,   168,     0,     0,     0,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,     0,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,     0,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,   124,
-      82,     0,     0,     8,     9,    10,    11,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,     0,     0,     0,     0,   125,    32,    33,
-      34,    35,    36,    37,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    47,    48,     0,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,     0,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,     0,
-     155,    82,   156,   157,   158,   159,   160,     0,     0,   161,
-     162,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   163,     0,
-       0,   164,     8,     9,    10,    11,     0,     0,     0,   165,
-     166,   167,   168,     0,     0,     0,     0,    12,    13,    14,
+      81,    82,    83,     0,   126,    84,     0,     0,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,     0,     0,
+       0,     0,   127,    32,    33,    34,    35,    36,    37,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    47,    48,
+       0,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,     0,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,     0,    83,   157,   158,    84,
+     159,   160,   161,   162,   163,     0,     0,   164,   165,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   166,     0,     0,   167,
+       8,     9,    10,    11,     0,     0,     0,   168,   169,   170,
+     171,     0,     0,     0,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+       0,     0,     0,     0,     0,    32,    33,    34,    35,    36,
+      37,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      47,    48,     0,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+       0,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,     0,    83,   157,
+     158,    84,   159,   160,   161,   162,   163,     0,     0,   164,
+     165,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   166,     0,
+       0,   239,     8,     9,    10,    11,     0,     0,     0,   168,
+     169,   170,   171,     0,     0,     0,     0,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,     0,     0,     0,     0,     0,    32,    33,    34,
       35,    36,    37,     0,     0,     0,     0,     0,     0,     0,
        0,     0,    47,    48,     0,    49,    50,    51,    52,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,     0,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,     0,   155,
-      82,   156,   157,   158,   159,   160,     0,     0,   161,   162,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,     0,
+      83,   157,   158,    84,   159,   160,   161,   162,   163,     0,
+       0,   164,   165,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   163,     0,     0,
-     236,     8,     9,    10,    11,     0,     0,     0,   165,   166,
-     167,   168,     0,     0,     0,     0,    12,    13,    14,    15,
+     166,     8,     9,    10,    11,     0,     0,     0,     0,     0,
+     295,   168,   169,   170,   171,     0,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
       26,     0,     0,     0,     0,     0,    32,    33,    34,    35,
       36,    37,     0,     0,     0,     0,     0,     0,     0,     0,
        0,    47,    48,     0,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,     0,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,     0,   155,    82,
-     156,   157,   158,   159,   160,     0,     0,   161,   162,     0,
+      74,    75,    76,    77,    78,    79,    80,    81,     0,    83,
+     157,   158,    84,   159,   160,   161,   162,   163,     0,     0,
+     164,   165,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   166,
+       0,     0,   320,     8,     9,    10,    11,     0,     0,     0,
+     168,   169,   170,   171,     0,     0,     0,     0,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,     0,     0,     0,     0,     0,    32,    33,
+      34,    35,    36,    37,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    47,    48,     0,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,     0,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+       0,    83,   157,   158,    84,   159,   160,   161,   162,   163,
+       0,     0,   164,   165,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   163,     8,     9,    10,
-      11,     0,     0,     0,     0,     0,   292,   165,   166,   167,
-     168,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
-       0,     0,    32,    33,    34,    35,    36,    37,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    47,    48,     0,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,     0,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,     0,   155,    82,   156,   157,   158,   159,
-     160,     0,     0,   161,   162,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   163,     0,     0,   317,     8,     9,    10,    11,
-       0,     0,     0,   165,   166,   167,   168,     0,     0,     0,
-       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
-       0,    32,    33,    34,    35,    36,    37,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    47,    48,     0,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,     0,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,     0,   155,    82,   156,   157,   158,   159,   160,
-       0,     0,   161,   162,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   163,     8,     9,    10,    11,     0,     0,     0,     0,
-       0,     0,   165,   166,   167,   168,     0,    12,    13,    14,
+       0,   166,     8,     9,    10,    11,     0,     0,     0,     0,
+       0,     0,   168,   169,   170,   171,     0,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,     0,     0,     0,     0,     0,    32,    33,    34,
       35,    36,    37,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    47,   256,     0,    49,    50,    51,    52,    53,
+       0,     0,    47,   259,     0,    49,    50,    51,    52,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,     0,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,     0,   155,
-      82,   156,   157,   158,   159,   160,     0,     0,   161,   162,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     1,     2,     3,     4,   163,     6,     7,
-       8,     9,    10,    11,     0,     0,     0,     0,   165,   166,
-     167,   168,     0,     0,     0,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,     0,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-       0,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,     0,    82,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     1,
-       2,     3,     4,     0,     6,     7,     8,     9,    10,    11,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     244,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,     0,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,     0,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,     0,    82,     0,     0,     0,     0,     0,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,     0,
+      83,   157,   158,    84,   159,   160,   161,   162,   163,     0,
+       0,   164,   165,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     1,     2,     3,     4,
+     166,     6,     7,     8,     9,    10,    11,     0,     0,     0,
+       0,   168,   169,   170,   171,     0,     0,     0,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,     0,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,     0,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,     0,     0,    84,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     1,     2,     3,     4,     0,
        6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   281,    12,    13,    14,
+       0,     0,     0,     0,     0,     0,   247,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,     0,    49,    50,    51,    52,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,     0,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,     0,
-      82,     0,     0,     0,     0,     0,     0,     0,   130,     0,
-       0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   355,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-       0,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,     0,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,     0,    82,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,     0,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,     0,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,     0,    82,     1,     2,     3,     4,     0,     6,     7,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,     0,     0,    84,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     1,     2,     3,     4,     0,     6,
+       7,     8,     9,    10,    11,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   284,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,     0,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,     0,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+       0,     0,    84,     0,     0,     0,     0,     0,     0,     0,
+     132,     0,     0,     1,     2,     3,     4,     5,     6,     7,
        8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    12,    13,    14,    15,    16,
+       0,     0,     0,     0,   358,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
       47,    48,     0,    49,    50,    51,    52,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
        0,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,     0,    82,     8,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,     0,
+       0,    84,     1,     2,     3,     4,     5,     6,     7,     8,
        9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,     0,
-       0,     0,     0,     0,    32,    33,    34,    35,    36,    37,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    47,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,     0,    49,    50,    51,    52,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,     0,
       66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,     0,   331,    82,     8,     9,
-      10,    11,   332,     0,     0,     0,     0,     0,     0,     0,
+      76,    77,    78,    79,    80,    81,    82,    83,     0,     0,
+      84,     1,     2,     3,     4,     0,     6,     7,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,     0,     0,
-       0,     0,     0,    32,    33,    34,    35,    36,    37,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    47,    48,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
        0,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,     0,    66,
       67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,     0,     0,    82
+      77,    78,    79,    80,    81,    82,    83,     0,     0,    84,
+       8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+       0,     0,     0,     0,     0,    32,    33,    34,    35,    36,
+      37,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      47,    48,     0,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+       0,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,     0,    83,     0,
+     334,    84,     8,     9,    10,    11,   335,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,     0,     0,     0,     0,     0,    32,    33,    34,
+      35,    36,    37,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    47,    48,     0,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,     0,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,     0,
+      83,     0,     0,    84
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    47,    92,    87,   112,   226,    87,   153,    92,     0,
-     148,   163,   386,   235,   147,   133,   358,     0,    59,    97,
-     129,    97,    98,   127,   125,   127,   135,   113,   118,   127,
-     114,   135,   134,   114,   118,   132,   134,   364,   135,   177,
-     414,   129,   126,   135,    90,   126,   108,   109,   127,   133,
-     196,   126,   133,   129,   126,   207,    97,   135,   385,   147,
-     132,   151,   148,   106,   107,   407,   137,   151,   139,   153,
-     129,   413,   153,   119,   120,   132,   209,   126,   135,   197,
-     132,   143,   144,   132,   127,    97,    98,    87,   131,   126,
-     126,   129,    92,   104,   105,   132,   132,   235,   320,   251,
-     233,   234,   102,   126,   126,   105,     4,     5,     6,   132,
-     132,   102,   196,   197,   114,   196,   197,   255,   118,   102,
-     125,   209,   267,   268,   269,   270,   126,   279,   132,   132,
-     127,   135,   135,   133,   132,   134,   282,   135,   290,   139,
-      97,    98,   294,   135,   365,   233,   234,   369,   110,   111,
-     372,   151,   125,   153,   100,   101,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   140,   141,   142,   132,
-     133,   126,   394,   311,   312,   134,   263,   264,   271,   272,
-     125,   129,   320,   265,   266,   145,   147,   112,   146,   128,
-     323,   114,   135,   135,   416,   125,   196,   197,   282,   147,
-     135,   282,   133,   125,   125,   125,   130,   125,   134,   128,
-     127,   126,   364,   161,   162,   129,   128,   133,   128,   128,
-     125,   134,    62,   134,   132,   128,   226,   134,   125,   130,
-     126,   369,   180,   385,   372,   323,   128,   126,    17,   129,
-     135,   379,   135,   376,   135,   252,   134,   399,   273,   357,
-     274,   277,   118,   114,   275,   118,   394,   276,   278,     5,
-     412,   209,   200,   240,   324,   359,   405,   299,   359,   413,
-     385,   102,    -1,    -1,    -1,    -1,    -1,    -1,   416,    -1,
-      -1,    -1,   282,   364,    -1,   233,   234,    -1,   376,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   299,
-     390,    -1,    -1,    -1,   385,    -1,   390,    -1,    -1,    -1,
-      -1,    -1,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   389,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,   359,
-      -1,    -1,    -1,    -1,   364,   365,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   323,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   385,    -1,    -1,    -1,    -1,
-     390,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   407,    -1,    -1,
-      -1,    -1,    -1,   413,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,   376,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    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,    -1,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,    -1,    -1,   106,   107,    -1,
+       0,    47,    89,   114,    94,   229,   238,    94,    89,   150,
+       0,   166,   361,   135,   149,   155,    59,     0,   100,   131,
+     100,   101,   389,   116,   130,   100,   101,   130,   367,   116,
+     120,   130,   138,   120,   137,   116,   132,   149,   137,   180,
+     135,   128,   138,   138,   111,   112,    92,   128,   135,   388,
+     417,   140,   132,   142,   135,   210,   138,   100,   151,   199,
+     128,   410,   135,   153,   129,   138,   153,   416,   155,   138,
+     135,   109,   110,   129,   155,   121,   122,   212,   200,   146,
+     147,   129,   129,   135,   129,   135,   138,   135,   135,    89,
+     135,   323,   130,   130,    94,   135,   134,   238,   138,   254,
+     212,   236,   237,   129,   104,   129,   138,   107,   128,   135,
+     132,   135,   199,   200,   104,   132,   116,   258,   199,   200,
+     120,   104,   137,   135,   236,   237,   138,   282,   128,   100,
+     101,   270,   271,   272,   273,   135,   113,   114,   293,   130,
+     372,   141,   297,   375,   368,   285,     4,     5,     6,   143,
+     144,   145,   128,   153,   128,   155,   107,   108,   103,   104,
+     135,   136,   266,   267,   129,   397,   268,   269,   150,   274,
+     275,   149,   115,   314,   315,   148,   131,   117,   131,   138,
+     138,   128,   323,   133,   128,   131,   138,   419,   136,   128,
+     128,   326,   128,   130,   149,   137,   129,   132,   285,   199,
+     200,   131,   136,   131,   285,   137,   137,   131,   135,   164,
+     165,   128,   367,    62,   326,   137,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   131,   128,   183,   229,
+     129,   372,   138,   388,   375,   137,   133,   131,   129,    17,
+     132,   382,   137,   276,   379,   138,   255,   402,   138,   360,
+     277,   279,   281,   278,   120,   116,   397,   212,   120,   280,
+     415,     5,   203,   243,   327,   362,   408,   379,   416,   388,
+     362,   302,   104,    -1,    -1,    -1,    -1,    -1,   419,    -1,
+      -1,   236,   237,    -1,    -1,   285,   367,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   125,    -1,    -1,    -1,
-     129,   130,    -1,    -1,    -1,    -1,   135,   136,   137,   138,
-     139,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    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,    -1,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,    -1,    -1,   106,   107,    -1,    -1,    -1,    -1,
+      -1,    -1,   302,   393,    -1,    -1,   393,   388,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   125,    -1,    -1,    -1,   129,   130,    -1,
-      -1,    -1,    -1,   135,   136,   137,   138,   139,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      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,    -1,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,    -1,
-      -1,   106,   107,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   392,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     125,    -1,    -1,    -1,   129,    -1,    -1,    -1,    -1,    -1,
-     135,   136,   137,   138,   139,     3,     4,     5,     6,     7,
+      -1,   361,   362,    -1,    -1,    -1,    -1,   367,   368,    -1,
+      -1,   326,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   388,    -1,
+      -1,    -1,    -1,   393,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     410,    -1,    -1,    -1,    -1,    -1,   416,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   379,     3,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
@@ -1394,50 +1367,69 @@
       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    -1,    81,    82,    83,    84,    85,    86,    87,
       88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,    -1,    -1,   106,   107,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,    -1,
+      -1,   109,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   125,    -1,    -1,
-      -1,   129,    -1,    -1,    -1,    -1,    -1,   135,   136,   137,
-     138,   139,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    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,    -1,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,    -1,    -1,   106,   107,    -1,    -1,    -1,
+     128,    -1,    -1,    -1,   132,   133,    -1,    -1,    -1,    -1,
+     138,   139,   140,   141,   142,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    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,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,    -1,
+      -1,   109,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   125,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   135,   136,   137,   138,   139,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+     128,    -1,    -1,    -1,   132,   133,    -1,    -1,    -1,    -1,
+     138,   139,   140,   141,   142,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    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,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,    -1,
+      -1,   109,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    -1,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    -1,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-      -1,    -1,   106,   107,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
-       6,   125,     8,     9,    10,    11,    12,    13,    -1,    -1,
-      -1,   135,   136,   137,   138,   139,    -1,    -1,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    -1,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    -1,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
-     106,   107,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,   125,
+     128,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,
+     138,   139,   140,   141,   142,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    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,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,    -1,
+      -1,   109,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     128,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,
+     138,   139,   140,   141,   142,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    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,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,    -1,
+      -1,   109,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     128,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     138,   139,   140,   141,   142,     3,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
-     136,   137,   138,   139,    -1,    -1,    -1,    25,    26,    27,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
@@ -1445,120 +1437,23 @@
       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    -1,    81,    82,    83,    84,    85,    86,    87,
       88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    -1,    -1,    10,    11,    12,    13,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,    -1,
+      -1,   109,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
+     128,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
+     138,   139,   140,   141,   142,    -1,    -1,    -1,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    -1,    -1,    -1,    -1,   135,    45,    46,
-      47,    48,    49,    50,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    60,    61,    -1,    63,    64,    65,    66,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    -1,    63,    64,    65,    66,
       67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
       77,    78,    79,    -1,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    -1,
-      97,    98,    99,   100,   101,   102,   103,    -1,    -1,   106,
-     107,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   125,    -1,
-      -1,   128,    10,    11,    12,    13,    -1,    -1,    -1,   136,
-     137,   138,   139,    -1,    -1,    -1,    -1,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
-      48,    49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    60,    61,    -1,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    -1,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
-      98,    99,   100,   101,   102,   103,    -1,    -1,   106,   107,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   125,    -1,    -1,
-     128,    10,    11,    12,    13,    -1,    -1,    -1,   136,   137,
-     138,   139,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
-      49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    60,    61,    -1,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    -1,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    -1,    97,    98,
-      99,   100,   101,   102,   103,    -1,    -1,   106,   107,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   125,    10,    11,    12,
-      13,    -1,    -1,    -1,    -1,    -1,   135,   136,   137,   138,
-     139,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
-      -1,    -1,    45,    46,    47,    48,    49,    50,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    -1,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    -1,    97,    98,    99,   100,   101,   102,
-     103,    -1,    -1,   106,   107,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   125,    -1,    -1,   128,    10,    11,    12,    13,
-      -1,    -1,    -1,   136,   137,   138,   139,    -1,    -1,    -1,
-      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
-      -1,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    -1,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    -1,    97,    98,    99,   100,   101,   102,   103,
-      -1,    -1,   106,   107,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   125,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
-      -1,    -1,   136,   137,   138,   139,    -1,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
-      48,    49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    60,    61,    -1,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    -1,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
-      98,    99,   100,   101,   102,   103,    -1,    -1,   106,   107,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     3,     4,     5,     6,   125,     8,     9,
-      10,    11,    12,    13,    -1,    -1,    -1,    -1,   136,   137,
-     138,   139,    -1,    -1,    -1,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    -1,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      -1,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    -1,    98,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
-       4,     5,     6,    -1,     8,     9,    10,    11,    12,    13,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     130,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    -1,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    -1,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    -1,    98,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,    -1,
-       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   130,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    -1,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    -1,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    -1,
-      98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,    -1,
-      -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   130,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    -1,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    -1,    98,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+      -1,    -1,   109,   110,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
+       6,   128,     8,     9,    10,    11,    12,    13,    -1,    -1,
+      -1,    -1,   139,   140,   141,   142,    -1,    -1,    -1,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
@@ -1566,34 +1461,160 @@
       66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
       76,    77,    78,    79,    -1,    81,    82,    83,    84,    85,
       86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    -1,    98,     3,     4,     5,     6,    -1,     8,     9,
+      96,    97,    98,    -1,   100,   101,    -1,    -1,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
+      -1,    -1,   138,    45,    46,    47,    48,    49,    50,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    61,
+      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    -1,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    -1,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,    -1,    -1,   109,   110,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   128,    -1,    -1,   131,
+      10,    11,    12,    13,    -1,    -1,    -1,   139,   140,   141,
+     142,    -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
+      50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      60,    61,    -1,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      -1,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    -1,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,    -1,    -1,   109,
+     110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   128,    -1,
+      -1,   131,    10,    11,    12,    13,    -1,    -1,    -1,   139,
+     140,   141,   142,    -1,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
+      48,    49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    60,    61,    -1,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    -1,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,    -1,
+      -1,   109,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     128,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
+     138,   139,   140,   141,   142,    -1,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
+      49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    60,    61,    -1,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    -1,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    -1,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,    -1,    -1,
+     109,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   128,
+      -1,    -1,   131,    10,    11,    12,    13,    -1,    -1,    -1,
+     139,   140,   141,   142,    -1,    -1,    -1,    -1,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
+      47,    48,    49,    50,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    60,    61,    -1,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    -1,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      -1,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+      -1,    -1,   109,   110,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   128,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+      -1,    -1,   139,   140,   141,   142,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
+      48,    49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    60,    61,    -1,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    -1,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,    -1,
+      -1,   109,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
+     128,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
+      -1,   139,   140,   141,   142,    -1,    -1,    -1,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    -1,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    -1,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,    -1,
+       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   133,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    -1,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,     3,     4,     5,     6,    -1,     8,
+       9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   133,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    -1,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    -1,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       0,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,
+      -1,    -1,    -1,    -1,   133,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    -1,    63,    64,    65,    66,    67,    68,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
       -1,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    -1,    98,    10,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    -1,
+      -1,   101,     3,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
-      -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    -1,
       81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    -1,    97,    98,    10,    11,
-      12,    13,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      91,    92,    93,    94,    95,    96,    97,    98,    -1,    -1,
+     101,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
-      -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    61,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
       -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    -1,    81,
       82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    98
+      92,    93,    94,    95,    96,    97,    98,    -1,    -1,   101,
+      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
+      50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      60,    61,    -1,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      -1,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    -1,    98,    -1,
+     100,   101,    10,    11,    12,    13,   106,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
+      48,    49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    60,    61,    -1,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    -1,
+      98,    -1,    -1,   101
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1608,111 +1629,111 @@
       64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    98,   181,   182,   183,   184,   185,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   202,
-     203,   204,   239,   240,   241,   198,    97,    98,   129,   150,
-     125,   135,   242,   126,   132,   186,   187,   188,   193,   197,
-     132,   135,    97,   150,    97,   135,   180,   195,   197,   127,
-       0,   240,   202,   206,   129,    59,    97,   200,   201,   129,
-     222,   187,   186,   188,   150,   150,   125,   127,   134,   129,
-     135,   193,   197,   207,   208,    97,    99,   100,   101,   102,
-     103,   106,   107,   125,   128,   136,   137,   138,   139,   151,
-     152,   153,   155,   156,   157,   158,   159,   160,   161,   162,
+      95,    96,    97,    98,   101,   184,   185,   186,   187,   188,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   205,   206,   207,   242,   243,   244,   201,   100,   101,
+     132,   153,   128,   138,   245,   129,   135,   189,   190,   191,
+     196,   200,   135,   138,   100,   153,   100,   138,   183,   198,
+     200,   130,     0,   243,   205,   209,   132,    59,   100,   203,
+     204,   132,   225,   190,   189,   191,   153,   153,   128,   130,
+     137,   132,   138,   196,   200,   210,   211,    99,   100,   102,
+     103,   104,   105,   106,   109,   110,   128,   131,   139,   140,
+     141,   142,   154,   155,   156,   158,   159,   160,   161,   162,
      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   179,   202,   135,   207,   205,   134,   126,
-     132,    14,    15,    16,    18,    19,    20,    21,    22,    23,
-      24,    62,   129,   130,   135,   162,   175,   176,   178,   181,
-     182,   202,   212,   213,   214,   215,   223,   224,   225,   227,
-     229,   231,   238,   127,   127,   134,   128,   179,   176,   211,
-     197,   150,   209,   210,   130,   208,   162,   162,   178,   106,
-     107,   127,   131,   126,   126,   132,    61,   176,   125,   162,
-     140,   141,   142,   137,   139,   104,   105,   108,   109,   143,
-     144,   110,   111,   147,   146,   145,   112,   114,   113,   148,
-     128,   130,   207,   100,   101,   201,   135,   135,   233,   125,
-     125,   135,   135,   178,   125,   179,   133,   125,   130,   216,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     134,   177,   132,   135,   130,   213,   179,   128,   179,   211,
-     134,   128,   209,   127,   132,   135,    97,   135,   126,   154,
-     178,    97,   103,   157,   176,   162,   162,   162,   164,   164,
-     165,   165,   166,   166,   166,   166,   167,   167,   168,   169,
-     170,   171,   172,   173,   178,   130,   219,   220,   221,   234,
-     178,   135,   178,   133,   232,   223,   176,   176,   128,   134,
-     128,   211,   134,   135,   179,   210,   127,   135,   128,   133,
-      62,   222,   214,   212,   224,   235,   126,   126,   178,   191,
-     193,   230,   217,   211,   134,   211,   128,   179,   176,   125,
-     230,   236,   237,   219,   226,   228,   150,   126,   130,   211,
-     128,   178,   135,   126,    17,   215,   134,   214,   218,   222,
-     135,   126,   178,   218,   219,   211,   135
+     173,   174,   175,   176,   177,   178,   182,   205,   138,   210,
+     208,   137,   129,   135,    14,    15,    16,    18,    19,    20,
+      21,    22,    23,    24,    62,   132,   133,   138,   165,   178,
+     179,   181,   184,   185,   205,   215,   216,   217,   218,   226,
+     227,   228,   230,   232,   234,   241,   130,   130,   137,   131,
+     182,   179,   214,   200,   153,   212,   213,   133,   211,   165,
+     165,   181,   109,   110,   130,   134,   129,   129,   135,    61,
+     179,   128,   165,   143,   144,   145,   140,   142,   107,   108,
+     111,   112,   146,   147,   113,   114,   150,   149,   148,   115,
+     117,   116,   151,   131,   133,   210,   103,   104,   204,   138,
+     138,   236,   128,   128,   138,   138,   181,   128,   182,   136,
+     128,   133,   219,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   137,   180,   135,   138,   133,   216,   182,
+     131,   182,   214,   137,   131,   212,   130,   135,   138,   100,
+     138,   129,   157,   181,   100,   106,   160,   179,   165,   165,
+     165,   167,   167,   168,   168,   169,   169,   169,   169,   170,
+     170,   171,   172,   173,   174,   175,   176,   181,   133,   222,
+     223,   224,   237,   181,   138,   181,   136,   235,   226,   179,
+     179,   131,   137,   131,   214,   137,   138,   182,   213,   130,
+     138,   131,   136,    62,   225,   217,   215,   227,   238,   129,
+     129,   181,   194,   196,   233,   220,   214,   137,   214,   131,
+     182,   179,   128,   233,   239,   240,   222,   229,   231,   153,
+     129,   133,   214,   131,   181,   138,   129,    17,   218,   137,
+     217,   221,   225,   138,   129,   181,   221,   222,   214,   138
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   149,   150,   150,   151,   152,   152,   152,   152,   152,
-     152,   153,   153,   153,   153,   153,   153,   154,   155,   156,
-     156,   157,   157,   158,   158,   159,   159,   160,   161,   161,
-     161,   162,   162,   162,   162,   163,   163,   163,   163,   164,
-     164,   164,   164,   165,   165,   165,   166,   166,   166,   167,
-     167,   167,   167,   167,   168,   168,   168,   169,   169,   170,
-     170,   171,   171,   172,   172,   173,   173,   174,   174,   175,
-     175,   176,   176,   177,   177,   177,   177,   177,   177,   177,
-     177,   177,   177,   177,   178,   178,   179,   180,   181,   181,
-     181,   181,   181,   181,   181,   181,   182,   183,   183,   184,
-     184,   185,   186,   186,   187,   187,   187,   187,   188,   189,
-     189,   189,   189,   189,   189,   190,   190,   190,   190,   190,
-     190,   191,   191,   192,   192,   193,   193,   194,   195,   195,
-     195,   195,   195,   196,   196,   196,   196,   196,   196,   196,
-     196,   196,   196,   196,   196,   196,   196,   197,   198,   198,
-     198,   199,   200,   200,   201,   201,   201,   201,   202,   202,
-     202,   203,   203,   203,   203,   203,   203,   203,   203,   203,
-     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
-     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
-     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
-     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
-     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
-     203,   205,   204,   206,   204,   207,   207,   208,   208,   209,
-     209,   210,   210,   211,   212,   213,   213,   214,   214,   214,
-     214,   214,   214,   214,   215,   216,   217,   215,   218,   218,
-     220,   219,   221,   219,   222,   222,   223,   223,   224,   224,
-     225,   226,   226,   228,   227,   229,   229,   230,   230,   232,
-     231,   233,   231,   234,   231,   235,   235,   236,   236,   237,
-     237,   238,   238,   238,   238,   238,   239,   239,   240,   240,
-     242,   241
+       0,   152,   153,   153,   154,   155,   155,   155,   155,   155,
+     155,   155,   156,   156,   156,   156,   156,   156,   157,   158,
+     159,   159,   160,   160,   161,   161,   162,   162,   163,   164,
+     164,   164,   165,   165,   165,   165,   166,   166,   166,   166,
+     167,   167,   167,   167,   168,   168,   168,   169,   169,   169,
+     170,   170,   170,   170,   170,   171,   171,   171,   172,   172,
+     173,   173,   174,   174,   175,   175,   176,   176,   177,   177,
+     178,   178,   179,   179,   180,   180,   180,   180,   180,   180,
+     180,   180,   180,   180,   180,   181,   181,   182,   183,   184,
+     184,   184,   184,   184,   184,   184,   184,   185,   186,   186,
+     187,   187,   188,   189,   189,   190,   190,   190,   190,   191,
+     192,   192,   192,   192,   192,   192,   193,   193,   193,   193,
+     193,   193,   194,   194,   195,   195,   196,   196,   197,   198,
+     198,   198,   198,   198,   199,   199,   199,   199,   199,   199,
+     199,   199,   199,   199,   199,   199,   199,   199,   200,   201,
+     201,   201,   202,   203,   203,   204,   204,   204,   204,   205,
+     205,   205,   206,   206,   206,   206,   206,   206,   206,   206,
+     206,   206,   206,   206,   206,   206,   206,   206,   206,   206,
+     206,   206,   206,   206,   206,   206,   206,   206,   206,   206,
+     206,   206,   206,   206,   206,   206,   206,   206,   206,   206,
+     206,   206,   206,   206,   206,   206,   206,   206,   206,   206,
+     206,   206,   206,   206,   206,   206,   206,   206,   206,   206,
+     206,   206,   206,   206,   208,   207,   209,   207,   210,   210,
+     211,   211,   212,   212,   213,   213,   214,   215,   216,   216,
+     217,   217,   217,   217,   217,   217,   217,   218,   219,   220,
+     218,   221,   221,   223,   222,   224,   222,   225,   225,   226,
+     226,   227,   227,   228,   229,   229,   231,   230,   232,   232,
+     233,   233,   235,   234,   236,   234,   237,   234,   238,   238,
+     239,   239,   240,   240,   241,   241,   241,   241,   241,   242,
+     242,   243,   243,   245,   244
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
        0,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-       3,     1,     4,     1,     3,     2,     2,     1,     1,     1,
-       3,     2,     2,     2,     1,     2,     3,     2,     1,     1,
-       1,     1,     2,     2,     2,     1,     1,     1,     1,     1,
-       3,     3,     3,     1,     3,     3,     1,     3,     3,     1,
-       3,     3,     3,     3,     1,     3,     3,     1,     3,     1,
-       3,     1,     3,     1,     3,     1,     3,     1,     3,     1,
-       5,     1,     3,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     3,     1,     2,     2,     2,
-       4,     5,     6,     9,     2,     3,     2,     1,     1,     2,
-       3,     3,     2,     5,     2,     1,     2,     1,     1,     1,
-       3,     6,     7,     8,     5,     1,     2,     5,     6,     7,
-       4,     1,     2,     1,     1,     1,     2,     1,     1,     1,
+       1,     3,     1,     4,     1,     3,     2,     2,     1,     1,
+       1,     3,     2,     2,     2,     1,     2,     3,     2,     1,
+       1,     1,     1,     2,     2,     2,     1,     1,     1,     1,
+       1,     3,     3,     3,     1,     3,     3,     1,     3,     3,
+       1,     3,     3,     3,     3,     1,     3,     3,     1,     3,
+       1,     3,     1,     3,     1,     3,     1,     3,     1,     3,
+       1,     5,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     3,     1,     2,     2,
+       2,     4,     5,     6,     9,     2,     3,     2,     1,     1,
+       2,     3,     3,     2,     5,     2,     1,     2,     1,     1,
+       1,     3,     6,     7,     8,     5,     1,     2,     5,     6,
+       7,     4,     1,     2,     1,     1,     1,     2,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     4,     1,     3,     1,     3,     3,     1,     1,     3,
-       4,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     4,     1,     3,     1,     3,     3,     1,     1,
+       3,     4,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     6,     0,     5,     1,     2,     3,     4,     1,
-       3,     1,     4,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     2,     0,     0,     5,     1,     1,
-       0,     2,     0,     2,     2,     3,     1,     2,     1,     2,
-       5,     3,     1,     0,     6,     3,     2,     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,     0,     6,     0,     5,     1,     2,
+       3,     4,     1,     3,     1,     4,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     2,     0,     0,
+       5,     1,     1,     0,     2,     0,     2,     2,     3,     1,
+       2,     1,     2,     5,     3,     1,     0,     6,     3,     2,
+       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
 };
 
 
@@ -2554,7 +2575,12 @@
   case 10:
 
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
+        if (!context->isExtensionEnabled("GL_EXT_YUV_target")) {
+           context->error((yylsp[0]), "unsupported value", (yyvsp[0].lex).string->c_str());
+        }
+        TConstantUnion *unionArray = new TConstantUnion[1];
+        unionArray->setYuvCscStandardEXTConst(getYuvCscStandardEXT((yyvsp[0].lex).string->c_str()));
+        (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtYuvCscStandardEXT, EbpUndefined, EvqConst), (yylsp[0]));
     }
 
     break;
@@ -2562,7 +2588,7 @@
   case 11:
 
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+        (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
     }
 
     break;
@@ -2570,7 +2596,7 @@
   case 12:
 
     {
-        (yyval.interm.intermTypedNode) = context->addIndexExpression((yyvsp[-3].interm.intermTypedNode), (yylsp[-2]), (yyvsp[-1].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
 
     break;
@@ -2578,7 +2604,7 @@
   case 13:
 
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+        (yyval.interm.intermTypedNode) = context->addIndexExpression((yyvsp[-3].interm.intermTypedNode), (yylsp[-2]), (yyvsp[-1].interm.intermTypedNode));
     }
 
     break;
@@ -2586,7 +2612,7 @@
   case 14:
 
     {
-        (yyval.interm.intermTypedNode) = context->addFieldSelectionExpression((yyvsp[-2].interm.intermTypedNode), (yylsp[-1]), *(yyvsp[0].lex).string, (yylsp[0]));
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
 
     break;
@@ -2594,7 +2620,7 @@
   case 15:
 
     {
-        (yyval.interm.intermTypedNode) = context->addUnaryMathLValue(EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode), (yylsp[0]));
+        (yyval.interm.intermTypedNode) = context->addFieldSelectionExpression((yyvsp[-2].interm.intermTypedNode), (yylsp[-1]), *(yyvsp[0].lex).string, (yylsp[0]));
     }
 
     break;
@@ -2602,7 +2628,7 @@
   case 16:
 
     {
-        (yyval.interm.intermTypedNode) = context->addUnaryMathLValue(EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode), (yylsp[0]));
+        (yyval.interm.intermTypedNode) = context->addUnaryMathLValue(EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode), (yylsp[0]));
     }
 
     break;
@@ -2610,13 +2636,21 @@
   case 17:
 
     {
+        (yyval.interm.intermTypedNode) = context->addUnaryMathLValue(EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode), (yylsp[0]));
+    }
+
+    break;
+
+  case 18:
+
+    {
         context->checkIsScalarInteger((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
 
     break;
 
-  case 18:
+  case 19:
 
     {
         (yyval.interm.intermTypedNode) = context->addFunctionCallOrMethod((yyvsp[0].interm).function, (yyvsp[0].interm).callOrMethodPair.arguments, (yyvsp[0].interm).callOrMethodPair.thisNode, (yylsp[0]));
@@ -2624,7 +2658,7 @@
 
     break;
 
-  case 19:
+  case 20:
 
     {
         (yyval.interm) = (yyvsp[0].interm);
@@ -2633,7 +2667,7 @@
 
     break;
 
-  case 20:
+  case 21:
 
     {
         ES3_OR_NEWER("", (yylsp[0]), "methods");
@@ -2643,14 +2677,6 @@
 
     break;
 
-  case 21:
-
-    {
-        (yyval.interm) = (yyvsp[-1].interm);
-    }
-
-    break;
-
   case 22:
 
     {
@@ -2662,8 +2688,7 @@
   case 23:
 
     {
-        (yyval.interm).function = (yyvsp[-1].interm.function);
-        (yyval.interm).callOrMethodPair.arguments = context->createEmptyArgumentsList();
+        (yyval.interm) = (yyvsp[-1].interm);
     }
 
     break;
@@ -2671,7 +2696,7 @@
   case 24:
 
     {
-        (yyval.interm).function = (yyvsp[0].interm.function);
+        (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).callOrMethodPair.arguments = context->createEmptyArgumentsList();
     }
 
@@ -2680,9 +2705,8 @@
   case 25:
 
     {
+        (yyval.interm).function = (yyvsp[0].interm.function);
         (yyval.interm).callOrMethodPair.arguments = context->createEmptyArgumentsList();
-        (yyval.interm).function = (yyvsp[-1].interm.function);
-        (yyval.interm).callOrMethodPair.arguments->push_back((yyvsp[0].interm.intermTypedNode));
     }
 
     break;
@@ -2690,7 +2714,8 @@
   case 26:
 
     {
-        (yyval.interm).function = (yyvsp[-2].interm).function;
+        (yyval.interm).callOrMethodPair.arguments = context->createEmptyArgumentsList();
+        (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).callOrMethodPair.arguments->push_back((yyvsp[0].interm.intermTypedNode));
     }
 
@@ -2699,7 +2724,8 @@
   case 27:
 
     {
-        (yyval.interm.function) = (yyvsp[-1].interm.function);
+        (yyval.interm).function = (yyvsp[-2].interm).function;
+        (yyval.interm).callOrMethodPair.arguments->push_back((yyvsp[0].interm.intermTypedNode));
     }
 
     break;
@@ -2707,10 +2733,7 @@
   case 28:
 
     {
-        if ((yyvsp[0].interm.type).array) {
-            ES3_OR_NEWER("[]", (yylsp[0]), "array constructor");
-        }
-        (yyval.interm.function) = context->addConstructorFunc((yyvsp[0].interm.type));
+        (yyval.interm.function) = (yyvsp[-1].interm.function);
     }
 
     break;
@@ -2718,10 +2741,10 @@
   case 29:
 
     {
-        context->checkIsNotReserved((yylsp[0]), *(yyvsp[0].lex).string);
-        const TType *type = TCache::getType(EbtVoid, EbpUndefined);
-        TFunction *function = new TFunction((yyvsp[0].lex).string, type);
-        (yyval.interm.function) = function;
+        if ((yyvsp[0].interm.type).array) {
+            ES3_OR_NEWER("[]", (yylsp[0]), "array constructor");
+        }
+        (yyval.interm.function) = context->addConstructorFunc((yyvsp[0].interm.type));
     }
 
     break;
@@ -2740,7 +2763,10 @@
   case 31:
 
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+        context->checkIsNotReserved((yylsp[0]), *(yyvsp[0].lex).string);
+        const TType *type = TCache::getType(EbtVoid, EbpUndefined);
+        TFunction *function = new TFunction((yyvsp[0].lex).string, type);
+        (yyval.interm.function) = function;
     }
 
     break;
@@ -2748,7 +2774,7 @@
   case 32:
 
     {
-        (yyval.interm.intermTypedNode) = context->addUnaryMathLValue(EOpPreIncrement, (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
 
     break;
@@ -2756,7 +2782,7 @@
   case 33:
 
     {
-        (yyval.interm.intermTypedNode) = context->addUnaryMathLValue(EOpPreDecrement, (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
+        (yyval.interm.intermTypedNode) = context->addUnaryMathLValue(EOpPreIncrement, (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
     }
 
     break;
@@ -2764,6 +2790,14 @@
   case 34:
 
     {
+        (yyval.interm.intermTypedNode) = context->addUnaryMathLValue(EOpPreDecrement, (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
+    }
+
+    break;
+
+  case 35:
+
+    {
         if ((yyvsp[-1].interm).op != EOpNull) {
             (yyval.interm.intermTypedNode) = context->addUnaryMath((yyvsp[-1].interm).op, (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
         } else
@@ -2772,25 +2806,25 @@
 
     break;
 
-  case 35:
+  case 36:
 
     { (yyval.interm).op = EOpPositive; }
 
     break;
 
-  case 36:
+  case 37:
 
     { (yyval.interm).op = EOpNegative; }
 
     break;
 
-  case 37:
+  case 38:
 
     { (yyval.interm).op = EOpLogicalNot; }
 
     break;
 
-  case 38:
+  case 39:
 
     {
         ES3_OR_NEWER("~", (yyloc), "bit-wise operator");
@@ -2799,13 +2833,13 @@
 
     break;
 
-  case 39:
+  case 40:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
-  case 40:
+  case 41:
 
     {
         (yyval.interm.intermTypedNode) = context->addBinaryMath(EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
@@ -2813,7 +2847,7 @@
 
     break;
 
-  case 41:
+  case 42:
 
     {
         (yyval.interm.intermTypedNode) = context->addBinaryMath(EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
@@ -2821,7 +2855,7 @@
 
     break;
 
-  case 42:
+  case 43:
 
     {
         ES3_OR_NEWER("%", (yylsp[-1]), "integer modulus operator");
@@ -2830,13 +2864,13 @@
 
     break;
 
-  case 43:
+  case 44:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
-  case 44:
+  case 45:
 
     {
         (yyval.interm.intermTypedNode) = context->addBinaryMath(EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
@@ -2844,7 +2878,7 @@
 
     break;
 
-  case 45:
+  case 46:
 
     {
         (yyval.interm.intermTypedNode) = context->addBinaryMath(EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
@@ -2852,13 +2886,13 @@
 
     break;
 
-  case 46:
+  case 47:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
-  case 47:
+  case 48:
 
     {
         ES3_OR_NEWER("<<", (yylsp[-1]), "bit-wise operator");
@@ -2867,7 +2901,7 @@
 
     break;
 
-  case 48:
+  case 49:
 
     {
         ES3_OR_NEWER(">>", (yylsp[-1]), "bit-wise operator");
@@ -2876,13 +2910,13 @@
 
     break;
 
-  case 49:
+  case 50:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
-  case 50:
+  case 51:
 
     {
         (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
@@ -2890,7 +2924,7 @@
 
     break;
 
-  case 51:
+  case 52:
 
     {
         (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
@@ -2898,7 +2932,7 @@
 
     break;
 
-  case 52:
+  case 53:
 
     {
         (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
@@ -2906,7 +2940,7 @@
 
     break;
 
-  case 53:
+  case 54:
 
     {
         (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
@@ -2914,13 +2948,13 @@
 
     break;
 
-  case 54:
+  case 55:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
-  case 55:
+  case 56:
 
     {
         (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(EOpEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
@@ -2928,7 +2962,7 @@
 
     break;
 
-  case 56:
+  case 57:
 
     {
         (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(EOpNotEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
@@ -2936,13 +2970,13 @@
 
     break;
 
-  case 57:
+  case 58:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
-  case 58:
+  case 59:
 
     {
         ES3_OR_NEWER("&", (yylsp[-1]), "bit-wise operator");
@@ -2951,13 +2985,13 @@
 
     break;
 
-  case 59:
+  case 60:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
-  case 60:
+  case 61:
 
     {
         ES3_OR_NEWER("^", (yylsp[-1]), "bit-wise operator");
@@ -2966,13 +3000,13 @@
 
     break;
 
-  case 61:
+  case 62:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
-  case 62:
+  case 63:
 
     {
         ES3_OR_NEWER("|", (yylsp[-1]), "bit-wise operator");
@@ -2981,13 +3015,13 @@
 
     break;
 
-  case 63:
+  case 64:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
-  case 64:
+  case 65:
 
     {
         (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
@@ -2995,13 +3029,13 @@
 
     break;
 
-  case 65:
+  case 66:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
-  case 66:
+  case 67:
 
     {
         (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
@@ -3009,13 +3043,13 @@
 
     break;
 
-  case 67:
+  case 68:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
-  case 68:
+  case 69:
 
     {
         (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
@@ -3023,13 +3057,13 @@
 
     break;
 
-  case 69:
+  case 70:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
-  case 70:
+  case 71:
 
     {
         (yyval.interm.intermTypedNode) = context->addTernarySelection((yyvsp[-4].interm.intermTypedNode), (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-3]));
@@ -3037,13 +3071,13 @@
 
     break;
 
-  case 71:
+  case 72:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
-  case 72:
+  case 73:
 
     {
         context->checkCanBeLValue((yylsp[-1]), "assign", (yyvsp[-2].interm.intermTypedNode));
@@ -3052,25 +3086,25 @@
 
     break;
 
-  case 73:
+  case 74:
 
     { (yyval.interm).op = EOpAssign; }
 
     break;
 
-  case 74:
+  case 75:
 
     { (yyval.interm).op = EOpMulAssign; }
 
     break;
 
-  case 75:
+  case 76:
 
     { (yyval.interm).op = EOpDivAssign; }
 
     break;
 
-  case 76:
+  case 77:
 
     {
         ES3_OR_NEWER("%=", (yyloc), "integer modulus operator");
@@ -3079,19 +3113,19 @@
 
     break;
 
-  case 77:
+  case 78:
 
     { (yyval.interm).op = EOpAddAssign; }
 
     break;
 
-  case 78:
+  case 79:
 
     { (yyval.interm).op = EOpSubAssign; }
 
     break;
 
-  case 79:
+  case 80:
 
     {
         ES3_OR_NEWER("<<=", (yyloc), "bit-wise operator");
@@ -3100,7 +3134,7 @@
 
     break;
 
-  case 80:
+  case 81:
 
     {
         ES3_OR_NEWER(">>=", (yyloc), "bit-wise operator");
@@ -3109,7 +3143,7 @@
 
     break;
 
-  case 81:
+  case 82:
 
     {
         ES3_OR_NEWER("&=", (yyloc), "bit-wise operator");
@@ -3118,7 +3152,7 @@
 
     break;
 
-  case 82:
+  case 83:
 
     {
         ES3_OR_NEWER("^=", (yyloc), "bit-wise operator");
@@ -3127,7 +3161,7 @@
 
     break;
 
-  case 83:
+  case 84:
 
     {
         ES3_OR_NEWER("|=", (yyloc), "bit-wise operator");
@@ -3136,7 +3170,7 @@
 
     break;
 
-  case 84:
+  case 85:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
@@ -3144,7 +3178,7 @@
 
     break;
 
-  case 85:
+  case 86:
 
     {
         (yyval.interm.intermTypedNode) = context->addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
@@ -3152,7 +3186,7 @@
 
     break;
 
-  case 86:
+  case 87:
 
     {
         context->checkIsConst((yyvsp[0].interm.intermTypedNode));
@@ -3161,7 +3195,7 @@
 
     break;
 
-  case 87:
+  case 88:
 
     {
         context->enterStructDeclaration((yylsp[-1]), *(yyvsp[-1].lex).string);
@@ -3170,7 +3204,7 @@
 
     break;
 
-  case 88:
+  case 89:
 
     {
         (yyval.interm.intermNode) = context->addFunctionPrototypeDeclaration(*((yyvsp[-1].interm).function), (yylsp[-1]));
@@ -3178,7 +3212,7 @@
 
     break;
 
-  case 89:
+  case 90:
 
     {
         (yyval.interm.intermNode) = (yyvsp[-1].interm).intermDeclaration;
@@ -3186,7 +3220,7 @@
 
     break;
 
-  case 90:
+  case 91:
 
     {
         if (((yyvsp[-2].interm.precision) == EbpHigh) && (context->getShaderType() == GL_FRAGMENT_SHADER) && !context->getFragmentPrecisionHigh()) {
@@ -3200,7 +3234,7 @@
 
     break;
 
-  case 91:
+  case 92:
 
     {
         ES3_OR_NEWER((yyvsp[-3].lex).string->c_str(), (yylsp[-4]), "interface blocks");
@@ -3209,7 +3243,7 @@
 
     break;
 
-  case 92:
+  case 93:
 
     {
         ES3_OR_NEWER((yyvsp[-4].lex).string->c_str(), (yylsp[-5]), "interface blocks");
@@ -3218,7 +3252,7 @@
 
     break;
 
-  case 93:
+  case 94:
 
     {
         ES3_OR_NEWER((yyvsp[-7].lex).string->c_str(), (yylsp[-8]), "interface blocks");
@@ -3227,7 +3261,7 @@
 
     break;
 
-  case 94:
+  case 95:
 
     {
         context->parseGlobalLayoutQualifier(*(yyvsp[-1].interm.typeQualifierBuilder));
@@ -3236,7 +3270,7 @@
 
     break;
 
-  case 95:
+  case 96:
 
     {
         (yyval.interm.intermNode) = context->parseInvariantDeclaration(*(yyvsp[-2].interm.typeQualifierBuilder), (yylsp[-1]), (yyvsp[-1].lex).string, (yyvsp[-1].lex).symbol);
@@ -3244,7 +3278,7 @@
 
     break;
 
-  case 96:
+  case 97:
 
     {
         (yyval.interm).function = context->parseFunctionDeclarator((yylsp[0]), (yyvsp[-1].interm.function));
@@ -3253,14 +3287,6 @@
 
     break;
 
-  case 97:
-
-    {
-        (yyval.interm.function) = (yyvsp[0].interm.function);
-    }
-
-    break;
-
   case 98:
 
     {
@@ -3272,6 +3298,14 @@
   case 99:
 
     {
+        (yyval.interm.function) = (yyvsp[0].interm.function);
+    }
+
+    break;
+
+  case 100:
+
+    {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[-1].interm.function);
         if ((yyvsp[0].interm).param.type->getBasicType() != EbtVoid)
@@ -3282,7 +3316,7 @@
 
     break;
 
-  case 100:
+  case 101:
 
     {
         //
@@ -3304,7 +3338,7 @@
 
     break;
 
-  case 101:
+  case 102:
 
     {
         (yyval.interm.function) = context->parseFunctionHeader((yyvsp[-2].interm.type), (yyvsp[-1].lex).string, (yylsp[-1]));
@@ -3315,7 +3349,7 @@
 
     break;
 
-  case 102:
+  case 103:
 
     {
         if ((yyvsp[-1].interm.type).getBasicType() == EbtVoid) {
@@ -3328,7 +3362,7 @@
 
     break;
 
-  case 103:
+  case 104:
 
     {
         // Check that we can make an array out of this type
@@ -3347,20 +3381,11 @@
 
     break;
 
-  case 104:
-
-    {
-        (yyval.interm) = (yyvsp[0].interm);
-        context->checkIsParameterQualifierValid((yylsp[0]), *(yyvsp[-1].interm.typeQualifierBuilder), (yyvsp[0].interm).param.type);
-    }
-
-    break;
-
   case 105:
 
     {
         (yyval.interm) = (yyvsp[0].interm);
-        (yyval.interm).param.type->setQualifier(EvqIn);
+        context->checkIsParameterQualifierValid((yylsp[0]), *(yyvsp[-1].interm.typeQualifierBuilder), (yyvsp[0].interm).param.type);
     }
 
     break;
@@ -3369,7 +3394,7 @@
 
     {
         (yyval.interm) = (yyvsp[0].interm);
-        context->checkIsParameterQualifierValid((yylsp[0]), *(yyvsp[-1].interm.typeQualifierBuilder), (yyvsp[0].interm).param.type);
+        (yyval.interm).param.type->setQualifier(EvqIn);
     }
 
     break;
@@ -3378,7 +3403,7 @@
 
     {
         (yyval.interm) = (yyvsp[0].interm);
-        (yyval.interm).param.type->setQualifier(EvqIn);
+        context->checkIsParameterQualifierValid((yylsp[0]), *(yyvsp[-1].interm.typeQualifierBuilder), (yyvsp[0].interm).param.type);
     }
 
     break;
@@ -3386,13 +3411,22 @@
   case 108:
 
     {
+        (yyval.interm) = (yyvsp[0].interm);
+        (yyval.interm).param.type->setQualifier(EvqIn);
+    }
+
+    break;
+
+  case 109:
+
+    {
         TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
         (yyval.interm).param = param;
     }
 
     break;
 
-  case 109:
+  case 110:
 
     {
         (yyval.interm) = (yyvsp[0].interm);
@@ -3400,7 +3434,7 @@
 
     break;
 
-  case 110:
+  case 111:
 
     {
         (yyval.interm) = (yyvsp[-2].interm);
@@ -3409,7 +3443,7 @@
 
     break;
 
-  case 111:
+  case 112:
 
     {
         (yyval.interm) = (yyvsp[-5].interm);
@@ -3418,7 +3452,7 @@
 
     break;
 
-  case 112:
+  case 113:
 
     {
         ES3_OR_NEWER("[]", (yylsp[-4]), "implicitly sized array");
@@ -3428,7 +3462,7 @@
 
     break;
 
-  case 113:
+  case 114:
 
     {
         ES3_OR_NEWER("=", (yylsp[-1]), "first-class arrays (array initializer)");
@@ -3438,7 +3472,7 @@
 
     break;
 
-  case 114:
+  case 115:
 
     {
         (yyval.interm) = (yyvsp[-4].interm);
@@ -3447,7 +3481,7 @@
 
     break;
 
-  case 115:
+  case 116:
 
     {
         (yyval.interm).type = (yyvsp[0].interm.type);
@@ -3456,7 +3490,7 @@
 
     break;
 
-  case 116:
+  case 117:
 
     {
         (yyval.interm).type = (yyvsp[-1].interm.type);
@@ -3465,7 +3499,7 @@
 
     break;
 
-  case 117:
+  case 118:
 
     {
         (yyval.interm).type = (yyvsp[-4].interm.type);
@@ -3474,7 +3508,7 @@
 
     break;
 
-  case 118:
+  case 119:
 
     {
         ES3_OR_NEWER("[]", (yylsp[-3]), "implicitly sized array");
@@ -3484,7 +3518,7 @@
 
     break;
 
-  case 119:
+  case 120:
 
     {
         ES3_OR_NEWER("=", (yylsp[-1]), "first-class arrays (array initializer)");
@@ -3494,7 +3528,7 @@
 
     break;
 
-  case 120:
+  case 121:
 
     {
         (yyval.interm).type = (yyvsp[-3].interm.type);
@@ -3503,7 +3537,7 @@
 
     break;
 
-  case 121:
+  case 122:
 
     {
         context->addFullySpecifiedType(&(yyvsp[0].interm.type));
@@ -3512,7 +3546,7 @@
 
     break;
 
-  case 122:
+  case 123:
 
     {
         (yyval.interm.type) = context->addFullySpecifiedType(*(yyvsp[-1].interm.typeQualifierBuilder), (yyvsp[0].interm.type));
@@ -3520,7 +3554,7 @@
 
     break;
 
-  case 123:
+  case 124:
 
     {
         (yyval.interm.qualifier) = EvqSmooth;
@@ -3528,7 +3562,7 @@
 
     break;
 
-  case 124:
+  case 125:
 
     {
         (yyval.interm.qualifier) = EvqFlat;
@@ -3536,7 +3570,7 @@
 
     break;
 
-  case 125:
+  case 126:
 
     {
         (yyval.interm.typeQualifierBuilder) = context->createTypeQualifierBuilder((yylsp[0]));
@@ -3545,7 +3579,7 @@
 
     break;
 
-  case 126:
+  case 127:
 
     {
         (yyval.interm.typeQualifierBuilder) = (yyvsp[-1].interm.typeQualifierBuilder);
@@ -3554,7 +3588,7 @@
 
     break;
 
-  case 127:
+  case 128:
 
     {
         // empty
@@ -3562,7 +3596,7 @@
 
     break;
 
-  case 128:
+  case 129:
 
     {
         context->checkLocalVariableConstStorageQualifier(*(yyvsp[0].interm.qualifierWrapper));
@@ -3571,7 +3605,7 @@
 
     break;
 
-  case 129:
+  case 130:
 
     {
         context->checkIsAtGlobalLevel((yylsp[0]), "layout");
@@ -3580,7 +3614,7 @@
 
     break;
 
-  case 130:
+  case 131:
 
     {
         (yyval.interm.qualifierWrapper) = new TPrecisionQualifierWrapper((yyvsp[0].interm.precision), (yylsp[0]));
@@ -3588,7 +3622,7 @@
 
     break;
 
-  case 131:
+  case 132:
 
     {
         (yyval.interm.qualifierWrapper) = new TInterpolationQualifierWrapper((yyvsp[0].interm.qualifier), (yylsp[0]));
@@ -3596,7 +3630,7 @@
 
     break;
 
-  case 132:
+  case 133:
 
     {
         context->checkIsAtGlobalLevel((yylsp[0]), "invariant");
@@ -3605,7 +3639,7 @@
 
     break;
 
-  case 133:
+  case 134:
 
     {
         VERTEX_ONLY("attribute", (yylsp[0]));
@@ -3616,7 +3650,7 @@
 
     break;
 
-  case 134:
+  case 135:
 
     {
         ES2_ONLY("varying", (yylsp[0]));
@@ -3629,7 +3663,7 @@
 
     break;
 
-  case 135:
+  case 136:
 
     {
         (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqConst, (yylsp[0]));
@@ -3637,7 +3671,7 @@
 
     break;
 
-  case 136:
+  case 137:
 
     {
         if (context->declaringFunction())
@@ -3662,7 +3696,7 @@
 
     break;
 
-  case 137:
+  case 138:
 
     {
         if (context->declaringFunction())
@@ -3686,7 +3720,7 @@
 
     break;
 
-  case 138:
+  case 139:
 
     {
         if (!context->declaringFunction())
@@ -3698,7 +3732,7 @@
 
     break;
 
-  case 139:
+  case 140:
 
     {
         ES3_OR_NEWER("centroid", (yylsp[0]), "storage qualifier");
@@ -3707,7 +3741,7 @@
 
     break;
 
-  case 140:
+  case 141:
 
     {
         context->checkIsAtGlobalLevel((yylsp[0]), "uniform");
@@ -3716,7 +3750,7 @@
 
     break;
 
-  case 141:
+  case 142:
 
     {
         (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqReadOnly, (yylsp[0]));
@@ -3724,7 +3758,7 @@
 
     break;
 
-  case 142:
+  case 143:
 
     {
         (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqWriteOnly, (yylsp[0]));
@@ -3732,7 +3766,7 @@
 
     break;
 
-  case 143:
+  case 144:
 
     {
         (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqCoherent, (yylsp[0]));
@@ -3740,7 +3774,7 @@
 
     break;
 
-  case 144:
+  case 145:
 
     {
         (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqRestrict, (yylsp[0]));
@@ -3748,7 +3782,7 @@
 
     break;
 
-  case 145:
+  case 146:
 
     {
         (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqVolatile, (yylsp[0]));
@@ -3756,7 +3790,7 @@
 
     break;
 
-  case 146:
+  case 147:
 
     {
         context->checkIsAtGlobalLevel((yylsp[0]), "shared");
@@ -3766,7 +3800,7 @@
 
     break;
 
-  case 147:
+  case 148:
 
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
@@ -3775,7 +3809,7 @@
 
     break;
 
-  case 148:
+  case 149:
 
     {
         (yyval.interm.precision) = EbpHigh;
@@ -3783,7 +3817,7 @@
 
     break;
 
-  case 149:
+  case 150:
 
     {
         (yyval.interm.precision) = EbpMedium;
@@ -3791,7 +3825,7 @@
 
     break;
 
-  case 150:
+  case 151:
 
     {
         (yyval.interm.precision) = EbpLow;
@@ -3799,7 +3833,7 @@
 
     break;
 
-  case 151:
+  case 152:
 
     {
         ES3_OR_NEWER("layout", (yylsp[-3]), "qualifier");
@@ -3808,7 +3842,7 @@
 
     break;
 
-  case 152:
+  case 153:
 
     {
         (yyval.interm.layoutQualifier) = (yyvsp[0].interm.layoutQualifier);
@@ -3816,7 +3850,7 @@
 
     break;
 
-  case 153:
+  case 154:
 
     {
         (yyval.interm.layoutQualifier) = context->joinLayoutQualifiers((yyvsp[-2].interm.layoutQualifier), (yyvsp[0].interm.layoutQualifier), (yylsp[0]));
@@ -3824,18 +3858,10 @@
 
     break;
 
-  case 154:
-
-    {
-        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[0].lex).string, (yylsp[0]));
-    }
-
-    break;
-
   case 155:
 
     {
-        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[-2].lex).string, (yylsp[-2]), (yyvsp[0].lex).i, (yylsp[0]));
+        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[0].lex).string, (yylsp[0]));
     }
 
     break;
@@ -3851,7 +3877,7 @@
   case 157:
 
     {
-        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier("shared", (yylsp[0]));
+        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[-2].lex).string, (yylsp[-2]), (yyvsp[0].lex).i, (yylsp[0]));
     }
 
     break;
@@ -3859,7 +3885,7 @@
   case 158:
 
     {
-        (yyval.interm.type).initialize((yyvsp[0].interm.typeSpecifierNonArray), (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
+        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier("shared", (yylsp[0]));
     }
 
     break;
@@ -3867,6 +3893,14 @@
   case 159:
 
     {
+        (yyval.interm.type).initialize((yyvsp[0].interm.typeSpecifierNonArray), (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
+    }
+
+    break;
+
+  case 160:
+
+    {
         ES3_OR_NEWER("[]", (yylsp[-1]), "implicitly sized array");
         (yyval.interm.type).initialize((yyvsp[-2].interm.typeSpecifierNonArray), (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
         (yyval.interm.type).setArraySize(0);
@@ -3874,7 +3908,7 @@
 
     break;
 
-  case 160:
+  case 161:
 
     {
         (yyval.interm.type).initialize((yyvsp[-3].interm.typeSpecifierNonArray), (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
@@ -3887,7 +3921,7 @@
 
     break;
 
-  case 161:
+  case 162:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtVoid, (yylsp[0]));
@@ -3895,18 +3929,10 @@
 
     break;
 
-  case 162:
-
-    {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-    }
-
-    break;
-
   case 163:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
     }
 
     break;
@@ -3914,7 +3940,7 @@
   case 164:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
     }
 
     break;
@@ -3922,7 +3948,7 @@
   case 165:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
     }
 
     break;
@@ -3930,8 +3956,7 @@
   case 166:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(2);
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
     }
 
     break;
@@ -3940,7 +3965,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(3);
+        (yyval.interm.typeSpecifierNonArray).setAggregate(2);
     }
 
     break;
@@ -3949,7 +3974,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(4);
+        (yyval.interm.typeSpecifierNonArray).setAggregate(3);
     }
 
     break;
@@ -3957,8 +3982,8 @@
   case 169:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(2);
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).setAggregate(4);
     }
 
     break;
@@ -3967,7 +3992,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(3);
+        (yyval.interm.typeSpecifierNonArray).setAggregate(2);
     }
 
     break;
@@ -3976,7 +4001,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(4);
+        (yyval.interm.typeSpecifierNonArray).setAggregate(3);
     }
 
     break;
@@ -3984,8 +4009,8 @@
   case 172:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(2);
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).setAggregate(4);
     }
 
     break;
@@ -3994,7 +4019,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(3);
+        (yyval.interm.typeSpecifierNonArray).setAggregate(2);
     }
 
     break;
@@ -4003,7 +4028,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(4);
+        (yyval.interm.typeSpecifierNonArray).setAggregate(3);
     }
 
     break;
@@ -4011,8 +4036,8 @@
   case 175:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(2);
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).setAggregate(4);
     }
 
     break;
@@ -4021,7 +4046,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(3);
+        (yyval.interm.typeSpecifierNonArray).setAggregate(2);
     }
 
     break;
@@ -4030,7 +4055,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(4);
+        (yyval.interm.typeSpecifierNonArray).setAggregate(3);
     }
 
     break;
@@ -4038,8 +4063,8 @@
   case 178:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(2, 2);
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).setAggregate(4);
     }
 
     break;
@@ -4048,7 +4073,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(3, 3);
+        (yyval.interm.typeSpecifierNonArray).setMatrix(2, 2);
     }
 
     break;
@@ -4057,7 +4082,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(4, 4);
+        (yyval.interm.typeSpecifierNonArray).setMatrix(3, 3);
     }
 
     break;
@@ -4066,7 +4091,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(2, 3);
+        (yyval.interm.typeSpecifierNonArray).setMatrix(4, 4);
     }
 
     break;
@@ -4075,7 +4100,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(3, 2);
+        (yyval.interm.typeSpecifierNonArray).setMatrix(2, 3);
     }
 
     break;
@@ -4084,7 +4109,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(2, 4);
+        (yyval.interm.typeSpecifierNonArray).setMatrix(3, 2);
     }
 
     break;
@@ -4093,7 +4118,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(4, 2);
+        (yyval.interm.typeSpecifierNonArray).setMatrix(2, 4);
     }
 
     break;
@@ -4102,7 +4127,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(3, 4);
+        (yyval.interm.typeSpecifierNonArray).setMatrix(4, 2);
     }
 
     break;
@@ -4111,7 +4136,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(4, 3);
+        (yyval.interm.typeSpecifierNonArray).setMatrix(3, 4);
     }
 
     break;
@@ -4119,7 +4144,8 @@
   case 187:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2D, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).setMatrix(4, 3);
     }
 
     break;
@@ -4127,7 +4153,10 @@
   case 188:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler3D, (yylsp[0]));
+        if (!context->isExtensionEnabled("GL_EXT_YUV_target")) {
+            context->error((yylsp[0]), "unsupported type", "yuvCscStandardEXT");
+        }
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtYuvCscStandardEXT, (yylsp[0]));
     }
 
     break;
@@ -4135,7 +4164,7 @@
   case 189:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCube, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2D, (yylsp[0]));
     }
 
     break;
@@ -4143,7 +4172,7 @@
   case 190:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArray, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler3D, (yylsp[0]));
     }
 
     break;
@@ -4151,7 +4180,7 @@
   case 191:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DMS, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCube, (yylsp[0]));
     }
 
     break;
@@ -4159,7 +4188,7 @@
   case 192:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2D, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArray, (yylsp[0]));
     }
 
     break;
@@ -4167,7 +4196,7 @@
   case 193:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler3D, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DMS, (yylsp[0]));
     }
 
     break;
@@ -4175,7 +4204,7 @@
   case 194:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerCube, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2D, (yylsp[0]));
     }
 
     break;
@@ -4183,7 +4212,7 @@
   case 195:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DArray, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler3D, (yylsp[0]));
     }
 
     break;
@@ -4191,7 +4220,7 @@
   case 196:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DMS, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerCube, (yylsp[0]));
     }
 
     break;
@@ -4199,7 +4228,7 @@
   case 197:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2D, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DArray, (yylsp[0]));
     }
 
     break;
@@ -4207,7 +4236,7 @@
   case 198:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler3D, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DMS, (yylsp[0]));
     }
 
     break;
@@ -4215,7 +4244,7 @@
   case 199:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerCube, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2D, (yylsp[0]));
     }
 
     break;
@@ -4223,7 +4252,7 @@
   case 200:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DArray, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler3D, (yylsp[0]));
     }
 
     break;
@@ -4231,7 +4260,7 @@
   case 201:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DMS, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerCube, (yylsp[0]));
     }
 
     break;
@@ -4239,7 +4268,7 @@
   case 202:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DShadow, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DArray, (yylsp[0]));
     }
 
     break;
@@ -4247,7 +4276,7 @@
   case 203:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeShadow, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DMS, (yylsp[0]));
     }
 
     break;
@@ -4255,7 +4284,7 @@
   case 204:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArrayShadow, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DShadow, (yylsp[0]));
     }
 
     break;
@@ -4263,6 +4292,22 @@
   case 205:
 
     {
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeShadow, (yylsp[0]));
+    }
+
+    break;
+
+  case 206:
+
+    {
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArrayShadow, (yylsp[0]));
+    }
+
+    break;
+
+  case 207:
+
+    {
         if (!context->supportsExtension("GL_OES_EGL_image_external") &&
             !context->supportsExtension("GL_NV_EGL_stream_consumer_external")) {
             context->error((yylsp[0]), "unsupported type", "samplerExternalOES");
@@ -4272,7 +4317,18 @@
 
     break;
 
-  case 206:
+  case 208:
+
+    {
+        if (!context->isExtensionEnabled("GL_EXT_YUV_target")) {
+            context->error((yylsp[0]), "unsupported type", "__samplerExternal2DY2YEXT");
+        }
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerExternal2DY2YEXT, (yylsp[0]));
+    }
+
+    break;
+
+  case 209:
 
     {
         if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
@@ -4283,7 +4339,7 @@
 
     break;
 
-  case 207:
+  case 210:
 
     {
         (yyval.interm.typeSpecifierNonArray) = (yyvsp[0].interm.typeSpecifierNonArray);
@@ -4291,7 +4347,7 @@
 
     break;
 
-  case 208:
+  case 211:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtImage2D, (yylsp[0]));
@@ -4299,7 +4355,7 @@
 
     break;
 
-  case 209:
+  case 212:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage2D, (yylsp[0]));
@@ -4307,7 +4363,7 @@
 
     break;
 
-  case 210:
+  case 213:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage2D, (yylsp[0]));
@@ -4315,7 +4371,7 @@
 
     break;
 
-  case 211:
+  case 214:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtImage3D, (yylsp[0]));
@@ -4323,7 +4379,7 @@
 
     break;
 
-  case 212:
+  case 215:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage3D, (yylsp[0]));
@@ -4331,7 +4387,7 @@
 
     break;
 
-  case 213:
+  case 216:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage3D, (yylsp[0]));
@@ -4339,7 +4395,7 @@
 
     break;
 
-  case 214:
+  case 217:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtImage2DArray, (yylsp[0]));
@@ -4347,7 +4403,7 @@
 
     break;
 
-  case 215:
+  case 218:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage2DArray, (yylsp[0]));
@@ -4355,7 +4411,7 @@
 
     break;
 
-  case 216:
+  case 219:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage2DArray, (yylsp[0]));
@@ -4363,7 +4419,7 @@
 
     break;
 
-  case 217:
+  case 220:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtImageCube, (yylsp[0]));
@@ -4371,7 +4427,7 @@
 
     break;
 
-  case 218:
+  case 221:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtIImageCube, (yylsp[0]));
@@ -4379,7 +4435,7 @@
 
     break;
 
-  case 219:
+  case 222:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtUImageCube, (yylsp[0]));
@@ -4387,7 +4443,7 @@
 
     break;
 
-  case 220:
+  case 223:
 
     {
         //
@@ -4401,13 +4457,13 @@
 
     break;
 
-  case 221:
+  case 224:
 
     { context->enterStructDeclaration((yylsp[-1]), *(yyvsp[-1].lex).string); }
 
     break;
 
-  case 222:
+  case 225:
 
     {
         (yyval.interm.typeSpecifierNonArray) = context->addStructure((yylsp[-5]), (yylsp[-4]), (yyvsp[-4].lex).string, (yyvsp[-1].interm.fieldList));
@@ -4415,13 +4471,13 @@
 
     break;
 
-  case 223:
+  case 226:
 
     { context->enterStructDeclaration((yylsp[0]), *(yyvsp[0].lex).string); }
 
     break;
 
-  case 224:
+  case 227:
 
     {
         (yyval.interm.typeSpecifierNonArray) = context->addStructure((yylsp[-4]), (yyloc), NewPoolTString(""), (yyvsp[-1].interm.fieldList));
@@ -4429,7 +4485,7 @@
 
     break;
 
-  case 225:
+  case 228:
 
     {
         (yyval.interm.fieldList) = (yyvsp[0].interm.fieldList);
@@ -4437,7 +4493,7 @@
 
     break;
 
-  case 226:
+  case 229:
 
     {
         (yyval.interm.fieldList) = context->combineStructFieldLists((yyvsp[-1].interm.fieldList), (yyvsp[0].interm.fieldList), (yylsp[0]));
@@ -4445,7 +4501,7 @@
 
     break;
 
-  case 227:
+  case 230:
 
     {
         (yyval.interm.fieldList) = context->addStructDeclaratorList((yyvsp[-2].interm.type), (yyvsp[-1].interm.fieldList));
@@ -4453,7 +4509,7 @@
 
     break;
 
-  case 228:
+  case 231:
 
     {
         // ES3 Only, but errors should be handled elsewhere
@@ -4462,7 +4518,7 @@
 
     break;
 
-  case 229:
+  case 232:
 
     {
         (yyval.interm.fieldList) = NewPoolTFieldList();
@@ -4471,7 +4527,7 @@
 
     break;
 
-  case 230:
+  case 233:
 
     {
         (yyval.interm.fieldList)->push_back((yyvsp[0].interm.field));
@@ -4479,7 +4535,7 @@
 
     break;
 
-  case 231:
+  case 234:
 
     {
         context->checkIsNotReserved((yylsp[0]), *(yyvsp[0].lex).string);
@@ -4490,7 +4546,7 @@
 
     break;
 
-  case 232:
+  case 235:
 
     {
         context->checkIsNotReserved((yylsp[-3]), *(yyvsp[-3].lex).string);
@@ -4504,27 +4560,9 @@
 
     break;
 
-  case 233:
-
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-
-    break;
-
-  case 234:
-
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-
-    break;
-
-  case 235:
-
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock); }
-
-    break;
-
   case 236:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
@@ -4536,7 +4574,7 @@
 
   case 238:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock); }
 
     break;
 
@@ -4548,13 +4586,13 @@
 
   case 240:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermSwitch); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
   case 241:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermCase); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
@@ -4566,30 +4604,48 @@
 
   case 243:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermSwitch); }
 
     break;
 
   case 244:
 
-    { (yyval.interm.intermBlock) = 0; }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermCase); }
 
     break;
 
   case 245:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
   case 246:
 
-    { context->symbolTable.pop(); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
   case 247:
 
+    { (yyval.interm.intermBlock) = 0; }
+
+    break;
+
+  case 248:
+
+    { context->symbolTable.push(); }
+
+    break;
+
+  case 249:
+
+    { context->symbolTable.pop(); }
+
+    break;
+
+  case 250:
+
     {
         if ((yyvsp[-2].interm.intermBlock) != 0) {
             (yyvsp[-2].interm.intermBlock)->setLine((yyloc));
@@ -4599,43 +4655,43 @@
 
     break;
 
-  case 248:
+  case 251:
 
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock); }
 
     break;
 
-  case 249:
+  case 252:
 
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
-  case 250:
+  case 253:
 
     { context->symbolTable.push(); }
 
     break;
 
-  case 251:
+  case 254:
 
     { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock); }
 
     break;
 
-  case 252:
+  case 255:
 
     { context->symbolTable.push(); }
 
     break;
 
-  case 253:
+  case 256:
 
     { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
-  case 254:
+  case 257:
 
     {
         (yyval.interm.intermBlock) = 0;
@@ -4643,7 +4699,7 @@
 
     break;
 
-  case 255:
+  case 258:
 
     {
         if ((yyvsp[-1].interm.intermBlock)) {
@@ -4654,7 +4710,7 @@
 
     break;
 
-  case 256:
+  case 259:
 
     {
         (yyval.interm.intermBlock) = new TIntermBlock();
@@ -4664,7 +4720,7 @@
 
     break;
 
-  case 257:
+  case 260:
 
     {
         (yyval.interm.intermBlock) = (yyvsp[-1].interm.intermBlock);
@@ -4673,19 +4729,19 @@
 
     break;
 
-  case 258:
+  case 261:
 
     { (yyval.interm.intermNode) = 0; }
 
     break;
 
-  case 259:
+  case 262:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
 
     break;
 
-  case 260:
+  case 263:
 
     {
         context->checkIsScalarBool((yylsp[-4]), (yyvsp[-2].interm.intermTypedNode));
@@ -4694,7 +4750,7 @@
 
     break;
 
-  case 261:
+  case 264:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
@@ -4703,7 +4759,7 @@
 
     break;
 
-  case 262:
+  case 265:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
@@ -4712,13 +4768,13 @@
 
     break;
 
-  case 263:
+  case 266:
 
     { context->incrSwitchNestingLevel(); }
 
     break;
 
-  case 264:
+  case 267:
 
     {
         (yyval.interm.intermSwitch) = context->addSwitch((yyvsp[-3].interm.intermTypedNode), (yyvsp[0].interm.intermBlock), (yylsp[-5]));
@@ -4727,7 +4783,7 @@
 
     break;
 
-  case 265:
+  case 268:
 
     {
         (yyval.interm.intermCase) = context->addCase((yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
@@ -4735,7 +4791,7 @@
 
     break;
 
-  case 266:
+  case 269:
 
     {
         (yyval.interm.intermCase) = context->addDefault((yylsp[-1]));
@@ -4743,7 +4799,7 @@
 
     break;
 
-  case 267:
+  case 270:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
@@ -4752,7 +4808,7 @@
 
     break;
 
-  case 268:
+  case 271:
 
     {
         TIntermBinary *initNode = nullptr;
@@ -4767,13 +4823,13 @@
 
     break;
 
-  case 269:
+  case 272:
 
     { context->symbolTable.push(); context->incrLoopNestingLevel(); }
 
     break;
 
-  case 270:
+  case 273:
 
     {
         context->symbolTable.pop();
@@ -4783,13 +4839,13 @@
 
     break;
 
-  case 271:
+  case 274:
 
     { context->incrLoopNestingLevel(); }
 
     break;
 
-  case 272:
+  case 275:
 
     {
         context->checkIsScalarBool((yylsp[0]), (yyvsp[-2].interm.intermTypedNode));
@@ -4800,13 +4856,13 @@
 
     break;
 
-  case 273:
+  case 276:
 
     { context->symbolTable.push(); context->incrLoopNestingLevel(); }
 
     break;
 
-  case 274:
+  case 277:
 
     {
         context->symbolTable.pop();
@@ -4816,7 +4872,7 @@
 
     break;
 
-  case 275:
+  case 278:
 
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
@@ -4824,7 +4880,7 @@
 
     break;
 
-  case 276:
+  case 279:
 
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
@@ -4832,7 +4888,7 @@
 
     break;
 
-  case 277:
+  case 280:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
@@ -4840,7 +4896,7 @@
 
     break;
 
-  case 278:
+  case 281:
 
     {
         (yyval.interm.intermTypedNode) = 0;
@@ -4848,7 +4904,7 @@
 
     break;
 
-  case 279:
+  case 282:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
@@ -4857,7 +4913,7 @@
 
     break;
 
-  case 280:
+  case 283:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
@@ -4866,7 +4922,7 @@
 
     break;
 
-  case 281:
+  case 284:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpContinue, (yylsp[-1]));
@@ -4874,7 +4930,7 @@
 
     break;
 
-  case 282:
+  case 285:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpBreak, (yylsp[-1]));
@@ -4882,7 +4938,7 @@
 
     break;
 
-  case 283:
+  case 286:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpReturn, (yylsp[-1]));
@@ -4890,7 +4946,7 @@
 
     break;
 
-  case 284:
+  case 287:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpReturn, (yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
@@ -4898,7 +4954,7 @@
 
     break;
 
-  case 285:
+  case 288:
 
     {
         FRAG_ONLY("discard", (yylsp[-1]));
@@ -4907,7 +4963,7 @@
 
     break;
 
-  case 286:
+  case 289:
 
     {
         (yyval.interm.intermBlock) = new TIntermBlock();
@@ -4918,7 +4974,7 @@
 
     break;
 
-  case 287:
+  case 290:
 
     {
         (yyval.interm.intermBlock)->appendStatement((yyvsp[0].interm.intermNode));
@@ -4926,7 +4982,7 @@
 
     break;
 
-  case 288:
+  case 291:
 
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
@@ -4934,7 +4990,7 @@
 
     break;
 
-  case 289:
+  case 292:
 
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
@@ -4942,7 +4998,7 @@
 
     break;
 
-  case 290:
+  case 293:
 
     {
         context->parseFunctionDefinitionHeader((yylsp[0]), &((yyvsp[0].interm).function), &((yyvsp[0].interm).intermFunctionPrototype));
@@ -4950,7 +5006,7 @@
 
     break;
 
-  case 291:
+  case 294:
 
     {
         (yyval.interm.intermNode) = context->addFunctionDefinition((yyvsp[-2].interm).intermFunctionPrototype, (yyvsp[0].interm.intermBlock), (yylsp[-2]));
diff --git a/src/compiler/translator/glslang_tab.h b/src/compiler/translator/glslang_tab.h
index fb7399c..49aae95 100644
--- a/src/compiler/translator/glslang_tab.h
+++ b/src/compiler/translator/glslang_tab.h
@@ -49,152 +49,155 @@
 #define YYTOKENTYPE
 enum yytokentype
 {
-    INVARIANT            = 258,
-    HIGH_PRECISION       = 259,
-    MEDIUM_PRECISION     = 260,
-    LOW_PRECISION        = 261,
-    PRECISION            = 262,
-    ATTRIBUTE            = 263,
-    CONST_QUAL           = 264,
-    BOOL_TYPE            = 265,
-    FLOAT_TYPE           = 266,
-    INT_TYPE             = 267,
-    UINT_TYPE            = 268,
-    BREAK                = 269,
-    CONTINUE             = 270,
-    DO                   = 271,
-    ELSE                 = 272,
-    FOR                  = 273,
-    IF                   = 274,
-    DISCARD              = 275,
-    RETURN               = 276,
-    SWITCH               = 277,
-    CASE                 = 278,
-    DEFAULT              = 279,
-    BVEC2                = 280,
-    BVEC3                = 281,
-    BVEC4                = 282,
-    IVEC2                = 283,
-    IVEC3                = 284,
-    IVEC4                = 285,
-    VEC2                 = 286,
-    VEC3                 = 287,
-    VEC4                 = 288,
-    UVEC2                = 289,
-    UVEC3                = 290,
-    UVEC4                = 291,
-    MATRIX2              = 292,
-    MATRIX3              = 293,
-    MATRIX4              = 294,
-    IN_QUAL              = 295,
-    OUT_QUAL             = 296,
-    INOUT_QUAL           = 297,
-    UNIFORM              = 298,
-    VARYING              = 299,
-    MATRIX2x3            = 300,
-    MATRIX3x2            = 301,
-    MATRIX2x4            = 302,
-    MATRIX4x2            = 303,
-    MATRIX3x4            = 304,
-    MATRIX4x3            = 305,
-    CENTROID             = 306,
-    FLAT                 = 307,
-    SMOOTH               = 308,
-    READONLY             = 309,
-    WRITEONLY            = 310,
-    COHERENT             = 311,
-    RESTRICT             = 312,
-    VOLATILE             = 313,
-    SHARED               = 314,
-    STRUCT               = 315,
-    VOID_TYPE            = 316,
-    WHILE                = 317,
-    SAMPLER2D            = 318,
-    SAMPLERCUBE          = 319,
-    SAMPLER_EXTERNAL_OES = 320,
-    SAMPLER2DRECT        = 321,
-    SAMPLER2DARRAY       = 322,
-    ISAMPLER2D           = 323,
-    ISAMPLER3D           = 324,
-    ISAMPLERCUBE         = 325,
-    ISAMPLER2DARRAY      = 326,
-    USAMPLER2D           = 327,
-    USAMPLER3D           = 328,
-    USAMPLERCUBE         = 329,
-    USAMPLER2DARRAY      = 330,
-    SAMPLER2DMS          = 331,
-    ISAMPLER2DMS         = 332,
-    USAMPLER2DMS         = 333,
-    SAMPLER3D            = 334,
-    SAMPLER3DRECT        = 335,
-    SAMPLER2DSHADOW      = 336,
-    SAMPLERCUBESHADOW    = 337,
-    SAMPLER2DARRAYSHADOW = 338,
-    IMAGE2D              = 339,
-    IIMAGE2D             = 340,
-    UIMAGE2D             = 341,
-    IMAGE3D              = 342,
-    IIMAGE3D             = 343,
-    UIMAGE3D             = 344,
-    IMAGE2DARRAY         = 345,
-    IIMAGE2DARRAY        = 346,
-    UIMAGE2DARRAY        = 347,
-    IMAGECUBE            = 348,
-    IIMAGECUBE           = 349,
-    UIMAGECUBE           = 350,
-    LAYOUT               = 351,
-    IDENTIFIER           = 352,
-    TYPE_NAME            = 353,
-    FLOATCONSTANT        = 354,
-    INTCONSTANT          = 355,
-    UINTCONSTANT         = 356,
-    BOOLCONSTANT         = 357,
-    FIELD_SELECTION      = 358,
-    LEFT_OP              = 359,
-    RIGHT_OP             = 360,
-    INC_OP               = 361,
-    DEC_OP               = 362,
-    LE_OP                = 363,
-    GE_OP                = 364,
-    EQ_OP                = 365,
-    NE_OP                = 366,
-    AND_OP               = 367,
-    OR_OP                = 368,
-    XOR_OP               = 369,
-    MUL_ASSIGN           = 370,
-    DIV_ASSIGN           = 371,
-    ADD_ASSIGN           = 372,
-    MOD_ASSIGN           = 373,
-    LEFT_ASSIGN          = 374,
-    RIGHT_ASSIGN         = 375,
-    AND_ASSIGN           = 376,
-    XOR_ASSIGN           = 377,
-    OR_ASSIGN            = 378,
-    SUB_ASSIGN           = 379,
-    LEFT_PAREN           = 380,
-    RIGHT_PAREN          = 381,
-    LEFT_BRACKET         = 382,
-    RIGHT_BRACKET        = 383,
-    LEFT_BRACE           = 384,
-    RIGHT_BRACE          = 385,
-    DOT                  = 386,
-    COMMA                = 387,
-    COLON                = 388,
-    EQUAL                = 389,
-    SEMICOLON            = 390,
-    BANG                 = 391,
-    DASH                 = 392,
-    TILDE                = 393,
-    PLUS                 = 394,
-    STAR                 = 395,
-    SLASH                = 396,
-    PERCENT              = 397,
-    LEFT_ANGLE           = 398,
-    RIGHT_ANGLE          = 399,
-    VERTICAL_BAR         = 400,
-    CARET                = 401,
-    AMPERSAND            = 402,
-    QUESTION             = 403
+    INVARIANT                 = 258,
+    HIGH_PRECISION            = 259,
+    MEDIUM_PRECISION          = 260,
+    LOW_PRECISION             = 261,
+    PRECISION                 = 262,
+    ATTRIBUTE                 = 263,
+    CONST_QUAL                = 264,
+    BOOL_TYPE                 = 265,
+    FLOAT_TYPE                = 266,
+    INT_TYPE                  = 267,
+    UINT_TYPE                 = 268,
+    BREAK                     = 269,
+    CONTINUE                  = 270,
+    DO                        = 271,
+    ELSE                      = 272,
+    FOR                       = 273,
+    IF                        = 274,
+    DISCARD                   = 275,
+    RETURN                    = 276,
+    SWITCH                    = 277,
+    CASE                      = 278,
+    DEFAULT                   = 279,
+    BVEC2                     = 280,
+    BVEC3                     = 281,
+    BVEC4                     = 282,
+    IVEC2                     = 283,
+    IVEC3                     = 284,
+    IVEC4                     = 285,
+    VEC2                      = 286,
+    VEC3                      = 287,
+    VEC4                      = 288,
+    UVEC2                     = 289,
+    UVEC3                     = 290,
+    UVEC4                     = 291,
+    MATRIX2                   = 292,
+    MATRIX3                   = 293,
+    MATRIX4                   = 294,
+    IN_QUAL                   = 295,
+    OUT_QUAL                  = 296,
+    INOUT_QUAL                = 297,
+    UNIFORM                   = 298,
+    VARYING                   = 299,
+    MATRIX2x3                 = 300,
+    MATRIX3x2                 = 301,
+    MATRIX2x4                 = 302,
+    MATRIX4x2                 = 303,
+    MATRIX3x4                 = 304,
+    MATRIX4x3                 = 305,
+    CENTROID                  = 306,
+    FLAT                      = 307,
+    SMOOTH                    = 308,
+    READONLY                  = 309,
+    WRITEONLY                 = 310,
+    COHERENT                  = 311,
+    RESTRICT                  = 312,
+    VOLATILE                  = 313,
+    SHARED                    = 314,
+    STRUCT                    = 315,
+    VOID_TYPE                 = 316,
+    WHILE                     = 317,
+    SAMPLER2D                 = 318,
+    SAMPLERCUBE               = 319,
+    SAMPLER_EXTERNAL_OES      = 320,
+    SAMPLER2DRECT             = 321,
+    SAMPLER2DARRAY            = 322,
+    ISAMPLER2D                = 323,
+    ISAMPLER3D                = 324,
+    ISAMPLERCUBE              = 325,
+    ISAMPLER2DARRAY           = 326,
+    USAMPLER2D                = 327,
+    USAMPLER3D                = 328,
+    USAMPLERCUBE              = 329,
+    USAMPLER2DARRAY           = 330,
+    SAMPLER2DMS               = 331,
+    ISAMPLER2DMS              = 332,
+    USAMPLER2DMS              = 333,
+    SAMPLER3D                 = 334,
+    SAMPLER3DRECT             = 335,
+    SAMPLER2DSHADOW           = 336,
+    SAMPLERCUBESHADOW         = 337,
+    SAMPLER2DARRAYSHADOW      = 338,
+    SAMPLEREXTERNAL2DY2YEXT   = 339,
+    IMAGE2D                   = 340,
+    IIMAGE2D                  = 341,
+    UIMAGE2D                  = 342,
+    IMAGE3D                   = 343,
+    IIMAGE3D                  = 344,
+    UIMAGE3D                  = 345,
+    IMAGE2DARRAY              = 346,
+    IIMAGE2DARRAY             = 347,
+    UIMAGE2DARRAY             = 348,
+    IMAGECUBE                 = 349,
+    IIMAGECUBE                = 350,
+    UIMAGECUBE                = 351,
+    LAYOUT                    = 352,
+    YUVCSCSTANDARDEXT         = 353,
+    YUVCSCSTANDARDEXTCONSTANT = 354,
+    IDENTIFIER                = 355,
+    TYPE_NAME                 = 356,
+    FLOATCONSTANT             = 357,
+    INTCONSTANT               = 358,
+    UINTCONSTANT              = 359,
+    BOOLCONSTANT              = 360,
+    FIELD_SELECTION           = 361,
+    LEFT_OP                   = 362,
+    RIGHT_OP                  = 363,
+    INC_OP                    = 364,
+    DEC_OP                    = 365,
+    LE_OP                     = 366,
+    GE_OP                     = 367,
+    EQ_OP                     = 368,
+    NE_OP                     = 369,
+    AND_OP                    = 370,
+    OR_OP                     = 371,
+    XOR_OP                    = 372,
+    MUL_ASSIGN                = 373,
+    DIV_ASSIGN                = 374,
+    ADD_ASSIGN                = 375,
+    MOD_ASSIGN                = 376,
+    LEFT_ASSIGN               = 377,
+    RIGHT_ASSIGN              = 378,
+    AND_ASSIGN                = 379,
+    XOR_ASSIGN                = 380,
+    OR_ASSIGN                 = 381,
+    SUB_ASSIGN                = 382,
+    LEFT_PAREN                = 383,
+    RIGHT_PAREN               = 384,
+    LEFT_BRACKET              = 385,
+    RIGHT_BRACKET             = 386,
+    LEFT_BRACE                = 387,
+    RIGHT_BRACE               = 388,
+    DOT                       = 389,
+    COMMA                     = 390,
+    COLON                     = 391,
+    EQUAL                     = 392,
+    SEMICOLON                 = 393,
+    BANG                      = 394,
+    DASH                      = 395,
+    TILDE                     = 396,
+    PLUS                      = 397,
+    STAR                      = 398,
+    SLASH                     = 399,
+    PERCENT                   = 400,
+    LEFT_ANGLE                = 401,
+    RIGHT_ANGLE               = 402,
+    VERTICAL_BAR              = 403,
+    CARET                     = 404,
+    AMPERSAND                 = 405,
+    QUESTION                  = 406
 };
 #endif
 
diff --git a/src/compiler/translator/intermOut.cpp b/src/compiler/translator/intermOut.cpp
index 6312ef7..af2c199 100644
--- a/src/compiler/translator/intermOut.cpp
+++ b/src/compiler/translator/intermOut.cpp
@@ -609,9 +609,14 @@
                 out << node->getUnionArrayPointer()[i].getUConst();
                 out << " (const uint)\n";
                 break;
+            case EbtYuvCscStandardEXT:
+                out << getYuvCscStandardEXTString(
+                    node->getUnionArrayPointer()[i].getYuvCscStandardEXTConst());
+                out << " (const yuvCscStandardEXT)\n";
+                break;
             default:
                 out.prefix(SH_ERROR);
-                out << "Unknown constant";
+                out << "Unknown constant\n";
                 break;
         }
     }
diff --git a/src/compiler/translator/util.cpp b/src/compiler/translator/util.cpp
index 87a3dda..6a2f9fa 100644
--- a/src/compiler/translator/util.cpp
+++ b/src/compiler/translator/util.cpp
@@ -334,6 +334,8 @@
             return GL_SAMPLER_CUBE;
         case EbtSamplerExternalOES:
             return GL_SAMPLER_EXTERNAL_OES;
+        case EbtSamplerExternal2DY2YEXT:
+            return GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT;
         case EbtSampler2DRect:
             return GL_SAMPLER_2D_RECT_ARB;
         case EbtSampler2DArray: