Bläddra i källkod

Updating to hlsl6 6 (#61)

* wip: class inheritance support. 1st broad source inspection pass.

* WIP: core of the change. activate deep lookup (resolve inherited names recursively).

* add miscelaneous utilities
+ add re-emission of interfaces
+ add emission of inheritance lists
+ change base holding from set to vector (to preserve order)
+ fixup base lookup scope (it was target class's scope, must be enclosing)
+ add a typeof case to exploit inheritance lookup

* Evolution of the lookup function to fixup seenats refering to inherited members, and also fully qualified idExpression that were bypassing lookup.

* Prepare some test cases to verify inheritance access understanding.
wip: advanced / verification of seenats not ready

* Fixup of forgotten function-parameter-semantic when that parameter is nameless.

* fixup of symbol dependency ordering: UDT internal variables that got declared prior to a nested type, ended up extracted ABOVE the definition of their own parent type.

* introduce class inheritance seenat advanced test

* add one OK test for the empty diamond case

* Add an error case test to make sure the multi concrete base inheritance correctly spawns a #17 error.

* Updated copyright comment in export keyword script

* Little refresh of RegisterVar to comment on the MeshIndex MeshIndex; case (variable cannot have the same name as an already defined symbol in azsl, but valid in C/C++/HLSL)

* That was an unfortunate bug dating back from May 2020 preventing qualifiers to be used with unnamed function parameters.
anti regression: copy function test to semantic check.

* fixup grun launch

* option with no range: improve message so that users have an immediate answer on how to fix a compiler complaint.

* version up, and --ast must work in case of semantic troubles.

* fixup error message are off by one line

* add keywords:
center
export
globallycoherent
sampler_state
tbuffer
unorm
snorm
indices
vertices

+ improve syntax error report by preserving whitspaces

* Fixup false positive error about many qualifiers on function return types.

* Added 16 bits scalars.
+ moved 'unsigned' as a type qualifier rather than fixed type

* mesh shader test from microsoft sample under MIT license.

* Refactored system for line fixup of error reporting and line directive reemission

* Not convinced about this Streamable solution, because of all the code and the virtual calls, compared to say, use template functions where stream objects are expected. To be judged.
This commit fixes the blank emission of attributes or other emitter code that used overloaded operator<< and Backend methods.

* fixup regression about null character happening because of numeric type resolving overload to char type


* fix test fail false negative, because of compatibility regression introduced by new keywords indices and vertices.

* modify the parser so that the AST doesnt make a difference between a type, a functionType and the qualifiers.
+ this will rehabilitate the possibility to use "unsigned int" in contexts where type didnt have qualifiers allowed.
remainder: this possibility dissappeared when we moved unsigned to qualifiers.
+ remove overly strict 'constant buffer presence in SRG only' semantic check
we can let DXC do the validation. even if it's very weak at times on this matter.

* improve the emission test python to further split tokens

* antlr regeneration

* fixup some emission tests. still 5 failing. notably padding detection.

* fixup of all emission tests.

* WIP, refactoring of type qualifiers.
builds and runs probably as expected but still red tests.
+ deletion of constant buffer over-sensitive semantic check that we don't have anymore.

* Shuffling trick that allows to lower the red tests count from 14 to 3. This is because a lot of tests wait for hardcoded string compare with "static const" in that order.

* fixup texture2DMS to texture2D mutator because of inclusion of unwanted qualifiers in the type AST rule. Especially "in/out/inout"

* fixup last merge problems (hopefully)

* Canonicalize qualifers emission to be done directly from within the type emission function.
+ this fixes typedef emission.


* address comments from pull request review PR #61


* turns out, unordered_set has non-deterministic impact on emission patterns.

* change to lift the strict constraint imposed by the presence of common words in the vocabulary.
notably center, vertices and indices.


* regeneration of antlr


* fixup test issue emerging from change of dumpsym format regarding type storage flags


Signed-off-by: Vivien Oddou <[email protected]>
siliconvoodoo 2 år sedan
förälder
incheckning
727f031231
76 ändrade filer med 5333 tillägg och 5054 borttagningar
  1. 5 4
      Platform/Windows/src/DirectX12PlatformEmitter.cpp
  2. 2 1
      Platform/Windows/src/VulkanPlatformEmitter.cpp
  3. 3 2
      launch_grun.bat
  4. 62 17
      src/AzslcBackend.cpp
  5. 23 19
      src/AzslcBackend.h
  6. 72 184
      src/AzslcEmitter.cpp
  7. 35 38
      src/AzslcEmitter.h
  8. 70 101
      src/AzslcException.h
  9. 23 56
      src/AzslcIntermediateRepresentation.cpp
  10. 7 20
      src/AzslcIntermediateRepresentation.h
  11. 36 31
      src/AzslcKindInfo.h
  12. 1 43
      src/AzslcListener.cpp
  13. 0 1
      src/AzslcListener.h
  14. 61 37
      src/AzslcMain.cpp
  15. 15 13
      src/AzslcPredefinedTypes.h
  16. 9 14
      src/AzslcReflection.cpp
  17. 7 2
      src/AzslcReflection.h
  18. 196 192
      src/AzslcSemanticOrchestrator.cpp
  19. 7 47
      src/AzslcSemanticOrchestrator.h
  20. 9 24
      src/AzslcTypes.h
  21. 81 111
      src/AzslcUtils.h
  22. 96 4
      src/GenericUtils.h
  23. 6 12
      src/NewLineCounterStream.h
  24. 12 12
      src/PadToAttributeMutator.cpp
  25. 47 12
      src/PreprocessorLineDirectiveFinder.h
  26. 4 0
      src/ReflectableEnums.h
  27. 0 32
      src/StdUtils.h
  28. 51 0
      src/StreamableInterface.h
  29. 25 8
      src/Texture2DMSto2DCodeMutator.cpp
  30. 3 1
      src/Texture2DMSto2DCodeMutator.h
  31. 38 19
      src/azslLexer.g4
  32. 22 21
      src/azslParser.g4
  33. 6 14
      src/exportKeywords.py
  34. 3227 3159
      src/generated/azslLexer.cpp
  35. 80 78
      src/generated/azslLexer.h
  36. 446 434
      src/generated/azslParser.cpp
  37. 112 119
      src/generated/azslParser.h
  38. 0 3
      src/generated/azslParserBaseListener.h
  39. 0 3
      src/generated/azslParserListener.h
  40. 6 0
      src/regenerate_azsl_antlr.bat
  41. 1 1
      tests/Advanced/seenat.py
  42. 3 3
      tests/Advanced/texture2DMS-to-texture2D-noms.txt
  43. 2 2
      tests/Advanced/texture2DMS-to-texture2D.txt
  44. 25 25
      tests/Emission/RootSig.txt
  45. 25 25
      tests/Emission/RootSigUnique.txt
  46. 2 2
      tests/Emission/attribute-specifiers-azsl.txt
  47. 1 1
      tests/Emission/complete-cs.txt
  48. 3 3
      tests/Emission/default-argumentvalue-complex.txt
  49. 6 0
      tests/Emission/func-qualifiers.azsl
  50. 2 0
      tests/Emission/func-qualifiers.txt
  51. 1 1
      tests/Emission/gmem.txt
  52. 196 0
      tests/Emission/mesh-shader-microsoft-sample.azsl
  53. 13 0
      tests/Emission/mesh-shader-microsoft-sample.txt
  54. 1 0
      tests/Emission/output-attribute.azsl
  55. 1 0
      tests/Emission/output-attribute.txt
  56. 2 2
      tests/Emission/overloads.txt
  57. 1 0
      tests/Emission/qualified-typealias.azsl
  58. 1 0
      tests/Emission/qualified-typealias.txt
  59. 7 7
      tests/Emission/ray-tracing-hello-world.azsl
  60. 2 1
      tests/Emission/ray-tracing-hello-world.txt
  61. 26 30
      tests/Emission/ray-tracing-procedural-geometry.azsl
  62. 3 0
      tests/Emission/ray-tracing-procedural-geometry.txt
  63. 19 19
      tests/Emission/ray-tracing-simple-lighting.azsl
  64. 1 0
      tests/Semantic/16bit-scalar.azsl
  65. 0 4
      tests/Semantic/AsError/constantbuffer-forbidden-context-arg.azsl
  66. 0 1
      tests/Semantic/AsError/constantbuffer-forbidden-context-funcret.azsl
  67. 0 5
      tests/Semantic/AsError/constantbuffer-forbidden-context-var.azsl
  68. 2 20
      tests/Semantic/AsError/disallowed-function-modifiers.azsl
  69. 3 0
      tests/Semantic/AsError/disallowed-function-modifiers2.azsl
  70. 2 0
      tests/Semantic/AsError/disallowed-function-param-qualifier.azsl
  71. 5 0
      tests/Semantic/AsError/same-varname-as-type.azsl
  72. 49 0
      tests/Semantic/function-signatures.azsl
  73. 5 5
      tests/Syntax/attribute-specifiers-sequence-closure.azsl
  74. 11 2
      tests/Syntax/function-signatures.azsl
  75. 2 2
      tests/testfuncs.py
  76. 5 5
      tests/testhelper.py

+ 5 - 4
Platform/Windows/src/DirectX12PlatformEmitter.cpp

@@ -111,10 +111,11 @@ namespace AZ::ShaderCompiler
                     const auto& samplerInfo = *memberInfo->m_samplerState;
                     const auto& samplerInfo = *memberInfo->m_samplerState;
                     if (!samplerInfo.m_isDynamic)
                     if (!samplerInfo.m_isDynamic)
                     {
                     {
-                        rootParam << "            \"StaticSampler(s" << std::to_string(param.m_registerBinding.m_pair[querySet].m_registerIndex)
-                                  << ", space = " << std::to_string(param.m_registerBinding.m_pair[querySet].m_logicalSpace)
-                                  << ", visibility=SHADER_VISIBILITY_ALL"
-                                  << samplerInfo << ")";
+                        Streamable&& s{MakeOStreamStreamable{rootParam}};
+                        s << "            \"StaticSampler(s" << std::to_string(param.m_registerBinding.m_pair[querySet].m_registerIndex)
+                          << ", space = " << std::to_string(param.m_registerBinding.m_pair[querySet].m_logicalSpace)
+                          << ", visibility=SHADER_VISIBILITY_ALL"
+                          << samplerInfo << ")";
                         rootAttrList.push_back(rootParam.str());
                         rootAttrList.push_back(rootParam.str());
                     }
                     }
                 }
                 }

+ 2 - 1
Platform/Windows/src/VulkanPlatformEmitter.cpp

@@ -57,7 +57,8 @@ namespace AZ::ShaderCompiler
             stream << "#ifdef AZ_USE_SUBPASSINPUT\n";
             stream << "#ifdef AZ_USE_SUBPASSINPUT\n";
             inputAttachmentIndexAttribute->m_namespace = "vk";
             inputAttachmentIndexAttribute->m_namespace = "vk";
             inputAttachmentIndexAttribute->m_category = AttributeCategory::Sequence;
             inputAttachmentIndexAttribute->m_category = AttributeCategory::Sequence;
-            CodeEmitter::EmitAttribute(*inputAttachmentIndexAttribute, stream);
+            MakeOStreamStreamable soss(stream);
+            CodeEmitter::EmitAttribute(*inputAttachmentIndexAttribute, soss);
             stream << "[[vk::binding(" << bindInfoRegisterIndex;
             stream << "[[vk::binding(" << bindInfoRegisterIndex;
             if (stringifiedLogicalSpace)
             if (stringifiedLogicalSpace)
             {
             {

+ 3 - 2
launch_grun.bat

@@ -15,8 +15,9 @@ if "%~1" == "" (
 pushd
 pushd
 
 
 cd "%~dp0\src\generated\java"
 cd "%~dp0\src\generated\java"
-set antlr4=java org.antlr.v4.Tool
-set grun=java org.antlr.v4.gui.TestRig
+
+SET CLASSPATH=.;"..\..\external\antlr-4.9.3-complete.jar";%CLASSPATH%
+set grun=java -cp %CLASSPATH% org.antlr.v4.gui.TestRig
 %grun% azsl compilationUnit -gui "%thepath%"
 %grun% azsl compilationUnit -gui "%thepath%"
 
 
 popd
 popd

+ 62 - 17
src/AzslcBackend.cpp

@@ -69,7 +69,7 @@ namespace AZ::ShaderCompiler
     // Define emission for sampler states
     // Define emission for sampler states
     // Reference: https://github.com/Microsoft/DirectXShaderCompiler/blob/master/tools/clang/unittests/HLSL/FunctionTest.cpp
     // Reference: https://github.com/Microsoft/DirectXShaderCompiler/blob/master/tools/clang/unittests/HLSL/FunctionTest.cpp
 
 
-    std::ostream &operator << (std::ostream &out, const SamplerStateDesc::AddressMode& addressMode)
+    Streamable& operator << (Streamable& out, const SamplerStateDesc::AddressMode& addressMode)
     {
     {
         return out << ((addressMode == SamplerStateDesc::AddressMode::Wrap)   ? "TEXTURE_ADDRESS_WRAP"
         return out << ((addressMode == SamplerStateDesc::AddressMode::Wrap)   ? "TEXTURE_ADDRESS_WRAP"
                      : (addressMode == SamplerStateDesc::AddressMode::Clamp)  ? "TEXTURE_ADDRESS_CLAMP"
                      : (addressMode == SamplerStateDesc::AddressMode::Clamp)  ? "TEXTURE_ADDRESS_CLAMP"
@@ -78,7 +78,7 @@ namespace AZ::ShaderCompiler
                      :                                                          "TEXTURE_ADDRESS_MIRROR_ONCE");
                      :                                                          "TEXTURE_ADDRESS_MIRROR_ONCE");
     }
     }
 
 
-    std::ostream &operator << (std::ostream &out, const SamplerStateDesc::ComparisonFunc& compFunc)
+    Streamable& operator << (Streamable& out, const SamplerStateDesc::ComparisonFunc& compFunc)
     {
     {
         return out << ((compFunc == SamplerStateDesc::ComparisonFunc::Never)        ? "COMPARISON_NEVER"
         return out << ((compFunc == SamplerStateDesc::ComparisonFunc::Never)        ? "COMPARISON_NEVER"
                      : (compFunc == SamplerStateDesc::ComparisonFunc::Less)         ? "COMPARISON_LESS"
                      : (compFunc == SamplerStateDesc::ComparisonFunc::Less)         ? "COMPARISON_LESS"
@@ -90,14 +90,14 @@ namespace AZ::ShaderCompiler
                      :                                                                "COMPARISON_ALWAYS");
                      :                                                                "COMPARISON_ALWAYS");
     }
     }
 
 
-    std::ostream &operator << (std::ostream &out, const SamplerStateDesc::BorderColor& borderColor)
+    Streamable& operator << (Streamable& out, const SamplerStateDesc::BorderColor& borderColor)
     {
     {
         return out << ((borderColor == SamplerStateDesc::BorderColor::OpaqueBlack) ? "STATIC_BORDER_COLOR_OPAQUE_BLACK"
         return out << ((borderColor == SamplerStateDesc::BorderColor::OpaqueBlack) ? "STATIC_BORDER_COLOR_OPAQUE_BLACK"
                      : (borderColor == SamplerStateDesc::BorderColor::OpaqueWhite) ? "STATIC_BORDER_COLOR_OPAQUE_WHITE"
                      : (borderColor == SamplerStateDesc::BorderColor::OpaqueWhite) ? "STATIC_BORDER_COLOR_OPAQUE_WHITE"
                      :                                                               "STATIC_BORDER_COLOR_TRANSPARENT_BLACK");
                      :                                                               "STATIC_BORDER_COLOR_TRANSPARENT_BLACK");
     }
     }
 
 
-    std::ostream &operator << (std::ostream &out, const SamplerStateDesc& samplerDesc)
+    Streamable& operator << (Streamable& out, const SamplerStateDesc& samplerDesc)
     {
     {
         // Resolving the filter is the hardest part of the emission
         // Resolving the filter is the hardest part of the emission
         out << ", filter = FILTER_";
         out << ", filter = FILTER_";
@@ -241,7 +241,7 @@ namespace AZ::ShaderCompiler
         return pair;
         return pair;
     }
     }
 
 
-    std::ostream &operator << (std::ostream &out, const SamplerStateDesc::ReductionType& redcType)
+    Streamable& operator << (Streamable& out, const SamplerStateDesc::ReductionType& redcType)
     {
     {
         return out << ((redcType == SamplerStateDesc::ReductionType::Comparison)  ? "Comparison"
         return out << ((redcType == SamplerStateDesc::ReductionType::Comparison)  ? "Comparison"
                      : (redcType == SamplerStateDesc::ReductionType::Filter)      ? "Filter"
                      : (redcType == SamplerStateDesc::ReductionType::Filter)      ? "Filter"
@@ -280,7 +280,7 @@ namespace AZ::ShaderCompiler
         return token;
         return token;
     }
     }
 
 
-    void Backend::GetTextInStream(misc::Interval interval, std::ostream& output) const
+    void Backend::EmitTranspiledTokens(misc::Interval interval, Streamable& output) const
     {
     {
         ssize_t ii = interval.a;
         ssize_t ii = interval.a;
         while (ii <= interval.b)
         while (ii <= interval.b)
@@ -291,12 +291,13 @@ namespace AZ::ShaderCompiler
         }
         }
     }
     }
 
 
-    string Backend::GetTextAsString(misc::Interval interval) const
+    string Backend::GetTranspiledTokens(misc::Interval interval) const
     {
     {
         static std::stringstream ss;
         static std::stringstream ss;
         ss.str({});
         ss.str({});
         ss.clear();
         ss.clear();
-        GetTextInStream(interval, ss);
+        MakeOStreamStreamable soss(ss);
+        EmitTranspiledTokens(interval, soss);
         return ss.str();
         return ss.str();
     }
     }
 
 
@@ -310,7 +311,7 @@ namespace AZ::ShaderCompiler
         }
         }
 
 
         auto* initClause = varInfo->m_declNode->variableInitializer()->standardVariableInitializer();
         auto* initClause = varInfo->m_declNode->variableInitializer()->standardVariableInitializer();
-        return RemoveWhitespaces(GetTextAsString(initClause->getSourceInterval()));
+        return RemoveWhitespaces(GetTranspiledTokens(initClause->getSourceInterval()));
     }
     }
 
 
     void Backend::AppendOptionRange(Json::Value& varOption, const IdentifierUID& varUid, const VarInfo* varInfo, const Options& options) const
     void Backend::AppendOptionRange(Json::Value& varOption, const IdentifierUID& varUid, const VarInfo* varInfo, const Options& options) const
@@ -355,7 +356,7 @@ namespace AZ::ShaderCompiler
                 if (!rangeAttribute)
                 if (!rangeAttribute)
                 {
                 {
                     throw AzslcEmitterException(EMITTER_INTEGER_HAS_NO_RANGE,
                     throw AzslcEmitterException(EMITTER_INTEGER_HAS_NO_RANGE,
-                                                none, none, ConcatString("Option (", varUid.m_name, ") must specify a range with a minimum and maximum values"));
+                                                none, none, ConcatString("Option (", varUid.m_name, ") must decorate declaration with an attribute [range(minimum value, maximum value)]"));
                 }
                 }
 
 
                 if (rangeAttribute->m_argList.size() != 2)
                 if (rangeAttribute->m_argList.size() != 2)
@@ -693,7 +694,8 @@ namespace AZ::ShaderCompiler
         return rootSig;
         return rootSig;
     }
     }
 
 
-    const char* Backend::GetInputModifier(TypeQualifier typeQualifier)
+    //static
+    const char* Backend::GetInputModifier(const TypeQualifiers& typeQualifier)
     {
     {
         const bool in = TypeHasStorageFlag(typeQualifier, StorageFlag::In);
         const bool in = TypeHasStorageFlag(typeQualifier, StorageFlag::In);
         const bool out = TypeHasStorageFlag(typeQualifier, StorageFlag::Out);
         const bool out = TypeHasStorageFlag(typeQualifier, StorageFlag::Out);
@@ -703,17 +705,60 @@ namespace AZ::ShaderCompiler
                            : (out ? "out" : ""));
                            : (out ? "out" : ""));
     }
     }
 
 
-    string Backend::GetExtendedTypeInfo(const ExtendedTypeInfo& extTypeInfo, std::function<string(const TypeRefInfo&)> translator) const
+    // static
+    string Backend::GetTypeModifier(const ExtendedTypeInfo& typeInfo, const Options& options, Modifiers bannedFlags /*= {}*/)
     {
     {
-        string hlslString = "";
+        using namespace std::string_literals;
+        string modifiers;
+        bool isMatrix = typeInfo.m_coreType.m_arithmeticInfo.IsMatrix();
+        if (typeInfo.CheckHasStorageFlag(StorageFlag::ColumnMajor) && !(bannedFlags & StorageFlag::ColumnMajor))
+        {
+            modifiers = "column_major";
+        }
+        else if (typeInfo.CheckHasStorageFlag(StorageFlag::RowMajor) && !(bannedFlags & StorageFlag::RowMajor))
+        {
+            modifiers = "row_major";
+        }
+        else if (options.m_forceEmitMajor && isMatrix)
+        {
+            modifiers = options.m_forceMatrixRowMajor ? "row_major" : "column_major";
+        }
 
 
+        auto maybeSpace = [&modifiers](){ return modifiers.empty() ? "" : " "; };
+        using SF = StorageFlag;
+        static const StorageFlag toReEmit[] = {SF::Static, SF::Extern, SF::Inline,
+            SF::Const, SF::Volatile, SF::Precise, SF::Groupshared,
+            SF::Uniform, SF::Globallycoherent, SF::Unsigned};
+        for (int i = 0; i < std::size(toReEmit); ++i)
+        {
+            if (typeInfo.CheckHasStorageFlag(toReEmit[i]) && !(bannedFlags & toReEmit[i]))
+            {
+                modifiers += maybeSpace() + ToLower(StorageFlag::ToStr(toReEmit[i]));
+            }
+        }
+
+        if (typeInfo.CheckHasStorageFlag(StorageFlag::Other) && !(bannedFlags & StorageFlag::Other))
+        {
+            for (const auto& flag : typeInfo.m_qualifiers.m_others)
+            {
+                modifiers += " " + flag;
+            }
+        }
+
+        return modifiers;
+    }
+
+    string Backend::GetExtendedTypeInfo(const ExtendedTypeInfo& extTypeInfo, const Options& options, Modifiers banned, std::function<string(const TypeRefInfo&)> translator) const
+    {
+        string hlslString = GetTypeModifier(extTypeInfo, options, banned);
+        hlslString += hlslString.empty() ? "" : " ";
         if (extTypeInfo.m_coreType.m_typeClass == TypeClass::Alias)
         if (extTypeInfo.m_coreType.m_typeClass == TypeClass::Alias)
         {
         {
-            hlslString = GetExtendedTypeInfo(m_ir->GetSymbolSubAs<TypeAliasInfo>(extTypeInfo.m_coreType.m_typeId.GetName())->m_canonicalType, translator);
+            hlslString += GetExtendedTypeInfo(m_ir->GetSymbolSubAs<TypeAliasInfo>(extTypeInfo.m_coreType.m_typeId.GetName())->m_canonicalType, options, banned, translator);
         }
         }
         else if (HasGenericParameter(extTypeInfo.m_coreType.m_typeClass) || !extTypeInfo.m_genericParameter.IsEmpty())
         else if (HasGenericParameter(extTypeInfo.m_coreType.m_typeClass) || !extTypeInfo.m_genericParameter.IsEmpty())
         {
         {
-            hlslString = translator(extTypeInfo.m_coreType)
+            hlslString += translator(extTypeInfo.m_coreType)
                 + "<" + translator(extTypeInfo.m_genericParameter);
                 + "<" + translator(extTypeInfo.m_genericParameter);
             if (extTypeInfo.m_genericDims.IsArray())
             if (extTypeInfo.m_genericDims.IsArray())
             {
             {
@@ -723,7 +768,7 @@ namespace AZ::ShaderCompiler
         }
         }
         else
         else
         {
         {
-            hlslString = translator(extTypeInfo.m_coreType);
+            hlslString += translator(extTypeInfo.m_coreType);
         }
         }
 
 
         return hlslString;
         return hlslString;
@@ -751,7 +796,7 @@ namespace AZ::ShaderCompiler
                 }
                 }
 
 
                 // GetTotalSize of each member of the structure
                 // GetTotalSize of each member of the structure
-                uint32_t size = varInfo.m_typeInfoExt.GetTotalSize(options.m_packDataBuffers, options.m_emitRowMajor);
+                uint32_t size = varInfo.m_typeInfoExt.GetTotalSize(options.m_packDataBuffers, options.m_forceMatrixRowMajor);
 
 
                 numberOf32bitRootConstants += (size / 4);
                 numberOf32bitRootConstants += (size / 4);
             }
             }

+ 23 - 19
src/AzslcBackend.h

@@ -8,6 +8,7 @@
 #pragma once
 #pragma once
 
 
 #include "AzslcListener.h"
 #include "AzslcListener.h"
+#include "NewLineCounterStream.h"
 
 
 #include "jsoncpp/dist/json/json.h"
 #include "jsoncpp/dist/json/json.h"
 
 
@@ -30,7 +31,7 @@ namespace AZ::ShaderCompiler
         bool m_useUniqueIndices = false;
         bool m_useUniqueIndices = false;
         bool m_emitConstantBufferBody = false;
         bool m_emitConstantBufferBody = false;
         bool m_emitRootSig = false;
         bool m_emitRootSig = false;
-        bool m_emitRowMajor = false;     //!< False by default (HLSL standard)
+        bool m_forceMatrixRowMajor = false;     //!< False by default (HLSL standard)
         bool m_forceEmitMajor = false;   //!< True if either -Zpc or -Zpr was specified
         bool m_forceEmitMajor = false;   //!< True if either -Zpc or -Zpr was specified
         bool m_padRootConstantCB = false; //!< If True, the emitted root constant CB will padded to 16-byte boundary.
         bool m_padRootConstantCB = false; //!< If True, the emitted root constant CB will padded to 16-byte boundary.
         bool m_skipAlignmentValidation = false; //! < If True, disables validation of a known DXC issue when certain word or 2-words size variables are preceded by some MatrixRxC variables.
         bool m_skipAlignmentValidation = false; //! < If True, disables validation of a known DXC issue when certain word or 2-words size variables are preceded by some MatrixRxC variables.
@@ -132,13 +133,23 @@ namespace AZ::ShaderCompiler
     class Backend
     class Backend
     {
     {
     public:
     public:
-        Backend(IntermediateRepresentation* ir, TokenStream* tokens, std::ostream& out)
-        : m_ir(ir), m_tokens(tokens), m_out(out)
+        Backend(IntermediateRepresentation* ir, TokenStream* tokens)
+        : m_ir(ir), m_tokens(tokens)
         {}
         {}
 
 
         //! Gets the IntermediateRepresentation object
         //! Gets the IntermediateRepresentation object
         const IntermediateRepresentation* GetIR() const { return m_ir; }
         const IntermediateRepresentation* GetIR() const { return m_ir; }
 
 
+        //! Make a string that lists all type qualifiers/modifiers in HLSL format
+        static string GetTypeModifier(const ExtendedTypeInfo&, const Options& options, Modifiers bannedFlags = {});
+
+        //! Get HLSL form of in/out modifiers
+        static const char* GetInputModifier(const TypeQualifiers& typeQualifier);
+
+        //! Fabricate a HLSL snippet that represents the type stored in typeInfo. Relevant options relate to matrix qualifiers.
+        //! \param banned is the Flag you can setup to list a collection of type qualifiers you don't want to reproduce.
+        string GetExtendedTypeInfo(const ExtendedTypeInfo& extTypeInfo, const Options& options, Modifiers banned, std::function<string(const TypeRefInfo&)> translator) const;
+
     protected:
     protected:
         //! Obtains a supplement emitter which provides per-platform emission functionality.
         //! Obtains a supplement emitter which provides per-platform emission functionality.
         const PlatformEmitter& GetPlatformEmitter() const;
         const PlatformEmitter& GetPlatformEmitter() const;
@@ -146,11 +157,9 @@ namespace AZ::ShaderCompiler
         //! Gets the next and increments tokenIndex. TokenIndex must be in the [misc::Interval.a, misc::Interval.b] range. Token cannot be nullptr.
         //! Gets the next and increments tokenIndex. TokenIndex must be in the [misc::Interval.a, misc::Interval.b] range. Token cannot be nullptr.
         auto GetNextToken(ssize_t& tokenIndex, size_t channel = Token::DEFAULT_CHANNEL) const -> antlr4::Token*;
         auto GetNextToken(ssize_t& tokenIndex, size_t channel = Token::DEFAULT_CHANNEL) const -> antlr4::Token*;
 
 
-        //! Extract an interval of text out of the source token stream, and append it to @output
-        virtual void GetTextInStream(misc::Interval interval, std::ostream& output) const;
+        virtual void EmitTranspiledTokens(misc::Interval interval, Streamable& output) const;
 
 
-        //! Extract an interval of text out of the source token stream
-        string GetTextAsString(misc::Interval interval) const;
+        string GetTranspiledTokens(misc::Interval interval) const;
 
 
         string GetInitializerClause(const AZ::ShaderCompiler::VarInfo* varInfo) const;
         string GetInitializerClause(const AZ::ShaderCompiler::VarInfo* varInfo) const;
 
 
@@ -166,13 +175,8 @@ namespace AZ::ShaderCompiler
 
 
         Json::Value GetVariantList(const Options& options, bool includeEmpty = false) const;
         Json::Value GetVariantList(const Options& options, bool includeEmpty = false) const;
 
 
-        static const char* GetInputModifier(TypeQualifier typeQualifier);
-
-        string GetExtendedTypeInfo(const ExtendedTypeInfo& extTypeInfo, std::function<string(const TypeRefInfo&)> translator) const;
-
-        std::ostream&               m_out;
-        IntermediateRepresentation* m_ir;
-        TokenStream*                m_tokens;
+        IntermediateRepresentation*      m_ir;
+        TokenStream*                     m_tokens;
     };
     };
 
 
     // independent utility functions
     // independent utility functions
@@ -196,9 +200,9 @@ namespace AZ::ShaderCompiler
     // don't use for HLSL emission (this doesn't go through translation)
     // don't use for HLSL emission (this doesn't go through translation)
     string UnmangleTrimedName(const ExtendedTypeInfo& extTypeInfo);
     string UnmangleTrimedName(const ExtendedTypeInfo& extTypeInfo);
 
 
-    std::ostream &operator << (std::ostream &out, const SamplerStateDesc::AddressMode& addressMode);
-    std::ostream &operator << (std::ostream &out, const SamplerStateDesc::ComparisonFunc& compFunc);
-    std::ostream &operator << (std::ostream &out, const SamplerStateDesc::BorderColor& borderColor);
-    std::ostream &operator << (std::ostream &out, const SamplerStateDesc& samplerDesc);
-    std::ostream &operator << (std::ostream &out, const SamplerStateDesc::ReductionType& redcType);
+    Streamable& operator << (Streamable& out, const SamplerStateDesc::AddressMode& addressMode);
+    Streamable& operator << (Streamable& out, const SamplerStateDesc::ComparisonFunc& compFunc);
+    Streamable& operator << (Streamable& out, const SamplerStateDesc::BorderColor& borderColor);
+    Streamable& operator << (Streamable& out, const SamplerStateDesc& samplerDesc);
+    Streamable& operator << (Streamable& out, const SamplerStateDesc::ReductionType& redcType);
 }
 }

+ 72 - 184
src/AzslcEmitter.cpp

@@ -44,7 +44,7 @@ namespace AZ
 namespace AZ::ShaderCompiler
 namespace AZ::ShaderCompiler
 {
 {
     // to activate argument dependent lookup from template utilities in AzslcUtils, this must be in a reachable namespace
     // to activate argument dependent lookup from template utilities in AzslcUtils, this must be in a reachable namespace
-    std::ostream& operator << (std::ostream& out, const AttributeInfo::Argument& arg)
+    Streamable& operator << (Streamable& out, const AttributeInfo::Argument& arg)
     {
     {
         if (holds_alternative<string>(arg))
         if (holds_alternative<string>(arg))
         {
         {
@@ -73,7 +73,7 @@ namespace AZ::ShaderCompiler
         return out;
         return out;
     }
     }
 
 
-    std::ostream& operator << (std::ostream& out, const AttributeInfo& attr)
+    Streamable& operator << (Streamable& out, const AttributeInfo& attr)
     {
     {
         if (!attr.m_namespace.empty())
         if (!attr.m_namespace.empty())
         {
         {
@@ -117,7 +117,10 @@ namespace AZ::ShaderCompiler
             const QualifiedNameView iteratedSymbolName = iteratedSymbolUid.GetName();
             const QualifiedNameView iteratedSymbolName = iteratedSymbolUid.GetName();
             const Kind iteratedSymbolKind = m_ir->GetKind(iteratedSymbolUid);
             const Kind iteratedSymbolKind = m_ir->GetKind(iteratedSymbolUid);
 
 
-            EmitPreprocessorLineDirective(iteratedSymbolName);
+            if (IsTopLevelThroughTranslation(iteratedSymbolUid))
+            {
+                EmitPreprocessorLineDirective(iteratedSymbolName);
+            }
 
 
             switch (iteratedSymbolKind)
             switch (iteratedSymbolKind)
             {
             {
@@ -142,7 +145,7 @@ namespace AZ::ShaderCompiler
                 if (IsTopLevelThroughTranslation(iteratedSymbolUid))
                 if (IsTopLevelThroughTranslation(iteratedSymbolUid))
                 {
                 {
                     auto* aliasInfo = m_ir->GetSymbolSubAs<TypeAliasInfo>(iteratedSymbolName);
                     auto* aliasInfo = m_ir->GetSymbolSubAs<TypeAliasInfo>(iteratedSymbolName);
-                    EmitTypeAlias(iteratedSymbolUid, *aliasInfo);
+                    EmitTypeAlias(iteratedSymbolUid, *aliasInfo, options);
                 }
                 }
                 break;
                 break;
             }
             }
@@ -190,7 +193,7 @@ namespace AZ::ShaderCompiler
                 auto* funcSub = m_ir->GetSymbolSubAs<FunctionInfo>(iteratedSymbolName);
                 auto* funcSub = m_ir->GetSymbolSubAs<FunctionInfo>(iteratedSymbolName);
                 const bool alreadyDeclared = AlreadyEmittedFunctionDeclaration(iteratedSymbolUid);
                 const bool alreadyDeclared = AlreadyEmittedFunctionDeclaration(iteratedSymbolUid);
                 assert(!funcSub->IsEmpty());
                 assert(!funcSub->IsEmpty());
-                const EmitFunctionAs form = funcSub->HasUniqueDeclarationThroughDefinition() || alreadyDeclared ?
+                const EmitFunctionAs form = (funcSub->HasUniqueDeclarationThroughDefinition() || alreadyDeclared) ?
                     EmitFunctionAs::Definition : EmitFunctionAs::Declaration;
                     EmitFunctionAs::Definition : EmitFunctionAs::Declaration;
                 EmitFunction(*funcSub, iteratedSymbolUid, form, options);
                 EmitFunction(*funcSub, iteratedSymbolUid, form, options);
                 break;
                 break;
@@ -460,23 +463,35 @@ namespace AZ::ShaderCompiler
 
 
     void CodeEmitter::EmitPreprocessorLineDirective(size_t azslLineNumber)
     void CodeEmitter::EmitPreprocessorLineDirective(size_t azslLineNumber)
     {
     {
-        const LineDirectiveInfo* lineDirectiveInfo = m_ir->GetNearestPreprocessorLineDirective(azslLineNumber);
-        if (!lineDirectiveInfo)
-        {
-            return;
-        }
-
-        const auto physicalTokenLine = lineDirectiveInfo->m_physicalTokenLine;
-        if (m_alreadyEmittedPreprocessorLineDirectives.find(physicalTokenLine) != m_alreadyEmittedPreprocessorLineDirectives.end())
-        {
-            return;
-        }
-
-        const string& originalFileName = StdFs::absolute(lineDirectiveInfo->m_containingFilename).lexically_normal().generic_string();
-        const auto lineNumber = lineDirectiveInfo->m_forcedLineNumber;
-        m_out << "#line " << lineNumber << " \"" << originalFileName << "\"\n";
-
-        m_alreadyEmittedPreprocessorLineDirectives.insert(physicalTokenLine);
+        if (azslLineNumber == 0)
+            return;  // protect for this invalid case. seems to happen for "virtual" symbols (like OverloadSet)
+
+        size_t supposedVirtualLine = m_lineFinder->GetVirtualLineNumber(azslLineNumber);
+        size_t curHlslLine = m_out.GetLineCount() + 1;  // "lines" is a space that is 1-based indexed.
+        auto lastEmitted = Infimum(m_alreadyEmittedPreprocessorLineDirectives, curHlslLine);
+        if (lastEmitted != m_alreadyEmittedPreprocessorLineDirectives.cend())
+        {
+            // verify if we can skip the line emission if current stream line feed is still in sync with expectations
+            //  image:
+            //            in sync                  out of sync
+            //  1 | #line 1                1 | #line 1
+            //  2 | code                   2 | code
+            //  3 | newSymbol              3 | code
+            //                             4 | #line 2
+            //                             5 | newSymbol
+
+            size_t curHlslPhysicalDistance = curHlslLine - lastEmitted->first;
+            size_t lastVirtualSet = lastEmitted->second;
+            size_t nonAdjustedCurrentLandingLine = lastVirtualSet + curHlslPhysicalDistance - 1;  // -1 because line directives specify the NEXT line
+            if (nonAdjustedCurrentLandingLine == supposedVirtualLine)
+                return; // no need to emit. we can skip
+        }
+        // get the original file as absolute path:
+        const string& originalFileName = StdFs::absolute( m_lineFinder->GetVirtualFileName(azslLineNumber) ).lexically_normal().generic_string();
+        // emit the line:
+        m_out << "#line " << supposedVirtualLine << " \"" << originalFileName << "\"\n";
+        // remember it:
+        m_alreadyEmittedPreprocessorLineDirectives[curHlslLine] = supposedVirtualLine;
     }
     }
 
 
     void CodeEmitter::EmitPreprocessorLineDirective(QualifiedNameView symbolName)
     void CodeEmitter::EmitPreprocessorLineDirective(QualifiedNameView symbolName)
@@ -502,8 +517,6 @@ namespace AZ::ShaderCompiler
 
 
     void CodeEmitter::EmitStruct(const ClassInfo& classInfo, string_view structuredSymName, const Options& options)
     void CodeEmitter::EmitStruct(const ClassInfo& classInfo, string_view structuredSymName, const Options& options)
     {
     {
-        EmitEmptyLinesToLineNumber(classInfo.GetOriginalLineNumber());
-
         auto HlslStructuredDelcTagFromKind = [](Kind k)
         auto HlslStructuredDelcTagFromKind = [](Kind k)
         {
         {
             switch (k)
             switch (k)
@@ -538,7 +551,7 @@ namespace AZ::ShaderCompiler
                 }
                 }
                 else if (info.IsKindOneOf(Kind::TypeAlias))
                 else if (info.IsKindOneOf(Kind::TypeAlias))
                 {
                 {
-                    EmitTypeAlias(uid, info.GetSubRefAs<TypeAliasInfo>());
+                    EmitTypeAlias(uid, info.GetSubRefAs<TypeAliasInfo>(), options);
                 }
                 }
                 else if (info.IsKindOneOf(Kind::Enum))
                 else if (info.IsKindOneOf(Kind::Enum))
                 {
                 {
@@ -622,16 +635,17 @@ namespace AZ::ShaderCompiler
     static string Undecorate(string_view decoration, const AttributeInfo::Argument& arg)
     static string Undecorate(string_view decoration, const AttributeInfo::Argument& arg)
     {
     {
         std::stringstream ss;
         std::stringstream ss;
-        ss << arg;
+        MakeOStreamStreamable soss(ss);
+        (Streamable&)soss << arg;
         return string{AZ::Undecorate(decoration, ss.str())};
         return string{AZ::Undecorate(decoration, ss.str())};
     }
     }
 
 
     void CodeEmitter::EmitAttribute(const AttributeInfo& attrInfo) const
     void CodeEmitter::EmitAttribute(const AttributeInfo& attrInfo) const
     {
     {
-        return EmitAttribute(attrInfo, Backend::m_out);
+        return EmitAttribute(attrInfo, m_out);
     }
     }
 
 
-    void CodeEmitter::EmitAttribute(const AttributeInfo& attrInfo, std::ostream& outstream)
+    void CodeEmitter::EmitAttribute(const AttributeInfo& attrInfo, Streamable& outstream)
     {
     {
         if (attrInfo.m_attribute == "verbatim")
         if (attrInfo.m_attribute == "verbatim")
         {
         {
@@ -648,7 +662,6 @@ namespace AZ::ShaderCompiler
                 if (holds_alternative<string>(attrInfo.m_argList[0]))
                 if (holds_alternative<string>(attrInfo.m_argList[0]))
                 {
                 {
                     string poFormat{ Trim(get<string>(attrInfo.m_argList[0]), "\"") };
                     string poFormat{ Trim(get<string>(attrInfo.m_argList[0]), "\"") };
-                    OutputFormat hint = OutputFormat::FromStr(poFormat);
                     outstream << "#pragma OutputFormatHint(default " << poFormat << ")\n";
                     outstream << "#pragma OutputFormatHint(default " << poFormat << ")\n";
                 }
                 }
                 else if (attrInfo.m_argList.size() > 1 &&
                 else if (attrInfo.m_argList.size() > 1 &&
@@ -659,7 +672,6 @@ namespace AZ::ShaderCompiler
                     if (rtIndex >= 0 && rtIndex <= 7)
                     if (rtIndex >= 0 && rtIndex <= 7)
                     {
                     {
                         string poFormat{ Trim(get<string>(attrInfo.m_argList[1]), "\"") };
                         string poFormat{ Trim(get<string>(attrInfo.m_argList[1]), "\"") };
-                        OutputFormat hint = OutputFormat::FromStr(poFormat);
                         outstream << "#pragma OutputFormatHint(target " << rtIndex << " " << poFormat << ")\n";
                         outstream << "#pragma OutputFormatHint(target " << rtIndex << " " << poFormat << ")\n";
                     }
                     }
                 }
                 }
@@ -682,22 +694,21 @@ namespace AZ::ShaderCompiler
         {
         {
             // We don't block any attributes we don't understand - pass them through
             // We don't block any attributes we don't understand - pass them through
             outstream << ((attrInfo.m_category == AttributeCategory::Single) ? "[" : "[[")
             outstream << ((attrInfo.m_category == AttributeCategory::Single) ? "[" : "[[")
-                  << attrInfo
-                  << ((attrInfo.m_category == AttributeCategory::Single) ? "]" : "]]")
-                  << "\n";
+                      << attrInfo
+                      << ((attrInfo.m_category == AttributeCategory::Single) ? "]" : "]]")
+                      << "\n";
         }
         }
     }
     }
 
 
-    void CodeEmitter::EmitTypeAlias(const IdentifierUID& uid, const TypeAliasInfo& aliasInfo) const
+    void CodeEmitter::EmitTypeAlias(const IdentifierUID& uid, const TypeAliasInfo& aliasInfo, const Options& options) const
     {
     {
-        m_out << "typedef " << GetTranslatedName(aliasInfo.m_canonicalType, UsageContext::ReferenceSite)
+        using SF = StorageFlag;
+        m_out << "typedef " << GetTranslatedName(aliasInfo.m_canonicalType, UsageContext::ReferenceSite, options)
               << " " << GetTranslatedName(uid, UsageContext::DeclarationSite) << ";\n";
               << " " << GetTranslatedName(uid, UsageContext::DeclarationSite) << ";\n";
     }
     }
 
 
     void CodeEmitter::EmitEnum(const IdentifierUID& uid, const ClassInfo& classInfo, const Options& options)
     void CodeEmitter::EmitEnum(const IdentifierUID& uid, const ClassInfo& classInfo, const Options& options)
     {
     {
-        EmitEmptyLinesToLineNumber(classInfo.GetOriginalLineNumber());
-
         const auto& enumInfo = get<EnumerationInfo>(classInfo.m_subInfo);
         const auto& enumInfo = get<EnumerationInfo>(classInfo.m_subInfo);
 
 
         EmitAllAttachedAttributes(uid);
         EmitAllAttachedAttributes(uid);
@@ -746,20 +757,19 @@ namespace AZ::ShaderCompiler
 
 
         AstFuncSig* node = funcSub.m_defNode ? funcSub.m_defNode : funcSub.m_declNode;
         AstFuncSig* node = funcSub.m_defNode ? funcSub.m_defNode : funcSub.m_declNode;
 
 
-        EmitEmptyLinesToLineNumber(funcSub.GetOriginalLineNumber(emitAsDefinition));
-
         EmitAllAttachedAttributes(uid);
         EmitAllAttachedAttributes(uid);
 
 
-        // emit modifiers in case of first declaration/definition
+        // emit some modifiers only in case of first declaration/definition
         // because:    class C{ static vd A(); };
         // because:    class C{ static vd A(); };
         //             static vd C::A(){}    // ill-formed HLSL. we can't repeat static here.
         //             static vd C::A(){}    // ill-formed HLSL. we can't repeat static here.
-        if (!AlreadyEmittedFunctionDeclaration(uid))
+        Modifiers forbidden;
+        bool firstDecl = !AlreadyEmittedFunctionDeclaration(uid);
+        if (!firstDecl)
         {
         {
-            m_out << GetTypeModifier(funcSub, options) << " ";
+            forbidden = Modifiers{StorageFlag::Static} | StorageFlag::Inline | StorageFlag::Extern;
         }
         }
-
         // emit return type:
         // emit return type:
-        m_out << GetTranslatedName(funcSub.m_returnType, UsageContext::ReferenceSite) << " ";
+        m_out << GetTranslatedName(funcSub.m_returnType, UsageContext::ReferenceSite, options, forbidden) << " ";
         // emit Name
         // emit Name
         if (entityConfiguration == EmitFunctionAs::Definition && funcSub.HasDeportedDefinition())
         if (entityConfiguration == EmitFunctionAs::Definition && funcSub.HasDeportedDefinition())
         {
         {
@@ -798,92 +808,14 @@ namespace AZ::ShaderCompiler
             auto funcDefNode = ExtractSpecificParent<azslParser::HlslFunctionDefinitionContext>(astNode);
             auto funcDefNode = ExtractSpecificParent<azslParser::HlslFunctionDefinitionContext>(astNode);
             auto blockInterval = funcDefNode->block()->getSourceInterval();
             auto blockInterval = funcDefNode->block()->getSourceInterval();
             m_out << "\n";
             m_out << "\n";
-            EmitText(blockInterval);
+            EmitTranspiledTokens(blockInterval);
             m_out << "\n\n";
             m_out << "\n\n";
             m_alreadyEmittedFunctionDefinitions.insert(uid);
             m_alreadyEmittedFunctionDefinitions.insert(uid);
         }
         }
     }
     }
 
 
-    // static
-    string CodeEmitter::GetTypeModifier(const VarInfo& var, const Options& options)
-    {
-        using namespace std::string_literals;
-        string modifiers;
-        bool isMatrix = IsArithmetic(var.GetTypeClass()) && var.m_typeInfoExt.m_coreType.m_arithmeticInfo.IsMatrix();
-        if (var.CheckHasStorageFlag(StorageFlag::ColumnMajor))
-        {
-            modifiers = "column_major";
-        }
-        else if (var.CheckHasStorageFlag(StorageFlag::RowMajor))
-        {
-            modifiers = "row_major";
-        }
-        else if (options.m_forceEmitMajor && isMatrix)
-        {
-            modifiers = options.m_emitRowMajor ? "row_major" : "column_major";
-        }
-
-        auto maybeSpace = [&modifiers](){ return modifiers.empty() ? "" : " "; };
-        if (var.CheckHasStorageFlag(StorageFlag::Volatile))
-        {
-            modifiers += maybeSpace() + "volatile"s;
-        }
-        if (var.CheckHasStorageFlag(StorageFlag::Precise))
-        {
-            modifiers += maybeSpace() + "precise"s;
-        }
-        if (var.CheckHasStorageFlag(StorageFlag::Groupshared))
-        {
-            modifiers += maybeSpace() + "groupshared"s;
-        }
-        if (var.CheckHasStorageFlag(StorageFlag::Extern))
-        {
-            assert(false); // should never get there. extern is banned from azsl
-        }
-        if (var.CheckHasStorageFlag(StorageFlag::Static))
-        {
-            modifiers += maybeSpace() + "static"s;
-        }
-        if (var.CheckHasStorageFlag(StorageFlag::Const))
-        {
-            modifiers += maybeSpace() + "const"s;
-        }
-        if (var.CheckHasStorageFlag(StorageFlag::Inline))
-        {
-            // inline should not be added as modifier for variables in HLSL. But in HLSL6 can be useful for functions
-        }
-        if (var.CheckHasStorageFlag(StorageFlag::Unknown))
-        {
-            for (const auto& flag : var.m_unknownQualifiers)
-            {
-                modifiers += " " + flag;
-            }
-        }
-        return modifiers;
-    }
-
-    // static
-    string CodeEmitter::GetTypeModifier(const FunctionInfo& func, const Options& options)
-    {
-        using namespace std::string_literals;
-        string modifiers;
-
-        auto maybeSpace = [&modifiers](){ return modifiers.empty() ? "" : " "; };
-        if (func.CheckHasStorageFlag(StorageFlag::Static))
-        {
-            modifiers += maybeSpace() + "static"s;
-        }
-        if (func.CheckHasStorageFlag(StorageFlag::Inline))
-        {
-            modifiers += maybeSpace() + "inline"s;
-        }
-        return modifiers;
-    }
-
     void CodeEmitter::EmitVariableDeclaration(const VarInfo& varInfo, const IdentifierUID& uid, const Options& options, VarDeclHasFlag declOptions) const
     void CodeEmitter::EmitVariableDeclaration(const VarInfo& varInfo, const IdentifierUID& uid, const Options& options, VarDeclHasFlag declOptions) const
     {
     {
-        EmitEmptyLinesToLineNumber(varInfo.GetOriginalLineNumber());
-
         // from MSDN: https://docs.microsoft.com/en-us/windows/desktop/direct3dhlsl/dx-graphics-hlsl-variable-syntax
         // from MSDN: https://docs.microsoft.com/en-us/windows/desktop/direct3dhlsl/dx-graphics-hlsl-variable-syntax
         // [Storage_Class] [Type_Modifier] Type Name[Index] [: Semantic] [: Packoffset] [: Register]; [Annotations] [= Initial_Value]
         // [Storage_Class] [Type_Modifier] Type Name[Index] [: Semantic] [: Packoffset] [: Register]; [Annotations] [= Initial_Value]
         // example of valid HLSL statement:
         // example of valid HLSL statement:
@@ -913,17 +845,13 @@ namespace AZ::ShaderCompiler
             // parameter in/out modifiers
             // parameter in/out modifiers
             if (declOptions & VarDeclHas::InOutModifiers)
             if (declOptions & VarDeclHas::InOutModifiers)
             {
             {
-                m_out << GetInputModifier(varInfo.m_typeQualifier) << " ";
-            }
-            // type qualifiers (storage class, modifiers...)
-            if (!(declOptions & VarDeclHas::NoModifiers))
-            {
-                m_out << GetTypeModifier(varInfo, options) << " ";
+                m_out << GetInputModifier(varInfo.m_typeInfoExt.m_qualifiers) << " ";
             }
             }
             // type
             // type
             if (!(declOptions & VarDeclHas::NoType) || (declOptions & VarDeclHas::OptionDefine))
             if (!(declOptions & VarDeclHas::NoType) || (declOptions & VarDeclHas::OptionDefine))
             {
             {
-                m_out << GetTranslatedName(varInfo.m_typeInfoExt, UsageContext::ReferenceSite) + " ";
+                auto bannedModifiers = (declOptions & VarDeclHas::NoModifiers) ? ~Modifiers{(StorageFlag::EnumType)0} : Modifiers{};
+                m_out << GetTranslatedName(varInfo.m_typeInfoExt, UsageContext::ReferenceSite, options, bannedModifiers) + " ";
             }
             }
             // var name
             // var name
             m_out << GetTranslatedName(uid.m_name, UsageContext::DeclarationSite);
             m_out << GetTranslatedName(uid.m_name, UsageContext::DeclarationSite);
@@ -933,7 +861,7 @@ namespace AZ::ShaderCompiler
                 for (auto* rankCtx : varInfo.m_declNode->ArrayRankSpecifiers)
                 for (auto* rankCtx : varInfo.m_declNode->ArrayRankSpecifiers)
                 {
                 {
                     // the brackets are included by the rule arrayRankSpecifier
                     // the brackets are included by the rule arrayRankSpecifier
-                    EmitText(rankCtx->getSourceInterval());
+                    EmitTranspiledTokens(rankCtx->getSourceInterval());
                 }
                 }
             }
             }
             else if (!varInfo.GetArrayDimensions().Empty())
             else if (!varInfo.GetArrayDimensions().Empty())
@@ -967,7 +895,7 @@ namespace AZ::ShaderCompiler
                 if (initClause)
                 if (initClause)
                 {
                 {
                     m_out << " ";
                     m_out << " ";
-                    EmitText(initClause->getSourceInterval());
+                    EmitTranspiledTokens(initClause->getSourceInterval());
                 }
                 }
                 else  // fallback on a potentially folded value, that has chances to work for constants like enumerators
                 else  // fallback on a potentially folded value, that has chances to work for constants like enumerators
                 {
                 {
@@ -1063,8 +991,6 @@ namespace AZ::ShaderCompiler
         const auto* varInfo = m_ir->GetSymbolSubAs<VarInfo>(cId.m_name);
         const auto* varInfo = m_ir->GetSymbolSubAs<VarInfo>(cId.m_name);
         auto cbName = ReplaceSeparators(cId.m_name, Underscore);
         auto cbName = ReplaceSeparators(cId.m_name, Underscore);
 
 
-        EmitEmptyLinesToLineNumber(varInfo->GetOriginalLineNumber());
-
         assert(varInfo->IsConstantBuffer());
         assert(varInfo->IsConstantBuffer());
         // note: instead of redoing this work ad-hoc, EmitText could be used directly on the ext type.
         // note: instead of redoing this work ad-hoc, EmitText could be used directly on the ext type.
         const auto genericType = "<" + GetTranslatedName(varInfo->m_typeInfoExt.m_genericParameter, UsageContext::ReferenceSite) + ">";
         const auto genericType = "<" + GetTranslatedName(varInfo->m_typeInfoExt.m_genericParameter, UsageContext::ReferenceSite) + ">";
@@ -1090,8 +1016,6 @@ namespace AZ::ShaderCompiler
         const auto& bindInfo = rootSig.Get(sId);
         const auto& bindInfo = rootSig.Get(sId);
         const auto* varInfo = m_ir->GetSymbolSubAs<VarInfo>(sId.m_name);
         const auto* varInfo = m_ir->GetSymbolSubAs<VarInfo>(sId.m_name);
 
 
-        EmitEmptyLinesToLineNumber(varInfo->GetOriginalLineNumber());
-
         const string spaceX = ", space" + std::to_string(bindInfo.m_registerBinding.m_pair[bindSet].m_logicalSpace);
         const string spaceX = ", space" + std::to_string(bindInfo.m_registerBinding.m_pair[bindSet].m_logicalSpace);
         m_out << (varInfo->m_samplerState->m_isComparison ? "SamplerComparisonState " : "SamplerState ")
         m_out << (varInfo->m_samplerState->m_isComparison ? "SamplerComparisonState " : "SamplerState ")
               << ReplaceSeparators(sId.m_name, Underscore);
               << ReplaceSeparators(sId.m_name, Underscore);
@@ -1108,25 +1032,25 @@ namespace AZ::ShaderCompiler
     }
     }
 
 
     //! For scope-migration-aware name emission of symbol names
     //! For scope-migration-aware name emission of symbol names
-    string CodeEmitter::GetTranslatedName(QualifiedNameView mangledName, UsageContext qualification, ssize_t tokenId /*= NotOverToken*/) const
+    string CodeEmitter::GetTranslatedName(QualifiedNameView mangledName, UsageContext context, ssize_t tokenId /*= NotOverToken*/) const
     {
     {
-        return m_translations.GetTranslatedName(mangledName, qualification, tokenId);
+        return m_translations.GetTranslatedName(mangledName, context, tokenId);
     }
     }
 
 
-    string CodeEmitter::GetTranslatedName(const IdentifierUID& uid, UsageContext qualification, ssize_t tokenId /*= NotOverToken*/) const
+    string CodeEmitter::GetTranslatedName(const IdentifierUID& uid, UsageContext context, ssize_t tokenId /*= NotOverToken*/) const
     {
     {
-        return GetTranslatedName(uid.m_name, qualification, tokenId);
+        return GetTranslatedName(uid.m_name, context, tokenId);
     }
     }
 
 
-    string CodeEmitter::GetTranslatedName(const TypeRefInfo& typeRef, UsageContext qualification, ssize_t tokenId /*= NotOverToken*/) const
+    string CodeEmitter::GetTranslatedName(const TypeRefInfo& typeRef, UsageContext context, ssize_t tokenId /*= NotOverToken*/) const
     {
     {
-        return GetTranslatedName(typeRef.m_typeId, qualification, tokenId);
+        return GetTranslatedName(typeRef.m_typeId, context, tokenId);
     }
     }
 
 
-    string CodeEmitter::GetTranslatedName(const ExtendedTypeInfo& extTypeInfo, UsageContext qualification, ssize_t tokenId /*= NotOverToken*/) const
+    string CodeEmitter::GetTranslatedName(const ExtendedTypeInfo& extTypeInfo, UsageContext context, const Options& options, Modifiers forbidden /*= {}*/, ssize_t tokenId /*= NotOverToken*/) const
     {
     {
-        return GetExtendedTypeInfo(extTypeInfo,
-                                   [this, qualification, tokenId](const TypeRefInfo& tri){ return GetTranslatedName(tri, qualification, tokenId); });
+        return GetExtendedTypeInfo(extTypeInfo, options, forbidden,
+                                   [this, context, tokenId](const TypeRefInfo& tri){ return GetTranslatedName(tri, context, tokenId); });
     }
     }
 
 
     void CodeEmitter::EmitSRGDataView(const IdentifierUID& tId, const Options& options, const RootSigDesc& rootSig) const
     void CodeEmitter::EmitSRGDataView(const IdentifierUID& tId, const Options& options, const RootSigDesc& rootSig) const
@@ -1135,12 +1059,10 @@ namespace AZ::ShaderCompiler
         auto   bindSet = BindingPair::Set::Merged;
         auto   bindSet = BindingPair::Set::Merged;
         auto&  bindInfo = rootSig.Get(tId);
         auto&  bindInfo = rootSig.Get(tId);
         auto*  varInfo = m_ir->GetSymbolSubAs<VarInfo>(tId.m_name);
         auto*  varInfo = m_ir->GetSymbolSubAs<VarInfo>(tId.m_name);
-        string varType = GetTranslatedName(varInfo->m_typeInfoExt, UsageContext::DeclarationSite);
+        string varType = GetTranslatedName(varInfo->m_typeInfoExt, UsageContext::DeclarationSite, options);
         auto   registerTypeLetter = ToLower(BindingType::ToStr(RootParamTypeToBindingType(bindInfo.m_type)));
         auto   registerTypeLetter = ToLower(BindingType::ToStr(RootParamTypeToBindingType(bindInfo.m_type)));
         optional<string> stringifiedLogicalSpace = std::to_string(bindInfo.m_registerBinding.m_pair[bindSet].m_logicalSpace);
         optional<string> stringifiedLogicalSpace = std::to_string(bindInfo.m_registerBinding.m_pair[bindSet].m_logicalSpace);
 
 
-        EmitEmptyLinesToLineNumber(varInfo->GetOriginalLineNumber());
-
         // depending on platforms we may have supplementary attributes or/and type modifier.
         // depending on platforms we may have supplementary attributes or/and type modifier.
         auto [prefix, suffix] = GetPlatformEmitter().GetDataViewHeaderFooter(*this, tId, bindInfo.m_registerBinding.m_pair[bindSet].m_registerIndex, registerTypeLetter, stringifiedLogicalSpace);
         auto [prefix, suffix] = GetPlatformEmitter().GetDataViewHeaderFooter(*this, tId, bindInfo.m_registerBinding.m_pair[bindSet].m_registerIndex, registerTypeLetter, stringifiedLogicalSpace);
         m_out << prefix;
         m_out << prefix;
@@ -1159,7 +1081,7 @@ namespace AZ::ShaderCompiler
         m_out << suffix;
         m_out << suffix;
 
 
         auto interval = m_ir->m_scope.m_scopeIntervals[tId];
         auto interval = m_ir->m_scope.m_scopeIntervals[tId];
-        EmitText(interval);
+        EmitTranspiledTokens(interval);
         m_out << ";\n\n";
         m_out << ";\n\n";
     }
     }
 
 
@@ -1223,8 +1145,6 @@ namespace AZ::ShaderCompiler
         RootSigDesc::SrgDesc srgDesc;
         RootSigDesc::SrgDesc srgDesc;
         srgDesc.m_uid = srgId;
         srgDesc.m_uid = srgId;
 
 
-        EmitEmptyLinesToLineNumber(srgInfo.GetOriginalLineNumber());
-
         m_out << "/* Generated code from ";
         m_out << "/* Generated code from ";
         // We don't emit the SRG attributes (only as a comment), but they can be accessed by the srgId if needed
         // We don't emit the SRG attributes (only as a comment), but they can be accessed by the srgId if needed
         EmitAllAttachedAttributes(srgId);
         EmitAllAttachedAttributes(srgId);
@@ -1277,8 +1197,7 @@ namespace AZ::ShaderCompiler
     }
     }
 
 
     // override of the base method, to incorporate symbol and expression mutations
     // override of the base method, to incorporate symbol and expression mutations
-    template <class StreamLike>
-    void CodeEmitter::GetTextInStreamInternal(misc::Interval interval, StreamLike& output, bool emitNewLines) const
+    void CodeEmitter::EmitTranspiledTokens(misc::Interval interval, Streamable& output) const
     {
     {
         const ICodeEmissionMutator* codeMutator = m_codeMutator;
         const ICodeEmissionMutator* codeMutator = m_codeMutator;
 
 
@@ -1288,11 +1207,6 @@ namespace AZ::ShaderCompiler
         {
         {
             auto* token = GetNextToken(ii /*inout*/);
             auto* token = GetNextToken(ii /*inout*/);
             
             
-            if (emitNewLines)
-            {
-                EmitEmptyLinesToLineNumber(token->getLine());
-            }
-
             const auto tokenIndex = token->getTokenIndex();
             const auto tokenIndex = token->getTokenIndex();
 
 
             const CodeMutation* codeMutation = codeMutator ? codeMutator->GetMutation(tokenIndex) : nullptr;
             const CodeMutation* codeMutation = codeMutator ? codeMutator->GetMutation(tokenIndex) : nullptr;
@@ -1359,30 +1273,4 @@ namespace AZ::ShaderCompiler
             }
             }
         }
         }
     }
     }
-
-    void CodeEmitter::GetTextInStream(misc::Interval interval, std::ostream& output) const
-    {
-        if (m_out.IsTheSameStream(output))
-        {
-            GetTextInStreamInternal(interval, m_out, true);
-        }
-        else
-        {
-            GetTextInStreamInternal(interval, output, false);
-        }
-    }
-
-    void CodeEmitter::EmitText(misc::Interval interval) const
-    {
-        // extract interval (with necessary internal translations) and add it to m_out stream
-        GetTextInStream(interval, Backend::m_out);
-    }
-
-    void CodeEmitter::EmitEmptyLinesToLineNumber(size_t originalLineNumber) const
-    {
-        while (m_out.GetLineCount() < originalLineNumber)
-        {
-            m_out << "\n";
-        }
-    }
 }
 }

+ 35 - 38
src/AzslcEmitter.h

@@ -10,7 +10,6 @@
 #include "AzslcBackend.h"
 #include "AzslcBackend.h"
 #include "AzslcSymbolTranslation.h"
 #include "AzslcSymbolTranslation.h"
 #include "AzslcCodeEmissionMutator.h"
 #include "AzslcCodeEmissionMutator.h"
-#include "NewLineCounterStream.h"
 
 
 namespace Json
 namespace Json
 {
 {
@@ -27,12 +26,11 @@ namespace AZ::ShaderCompiler
 
 
     struct CodeEmitter : Backend
     struct CodeEmitter : Backend
     {
     {
-        using Backend::Backend;
-
-        CodeEmitter(IntermediateRepresentation* ir, TokenStream* tokens, std::ostream& out)
+        CodeEmitter(IntermediateRepresentation* ir, TokenStream* tokens, std::ostream& out, PreprocessorLineDirectiveFinder* lineFinder)
             :
             :
-            Backend(ir, tokens, out),
-            m_out(out)
+            Backend(ir, tokens),
+            m_out(out),
+            m_lineFinder(lineFinder)
         {}
         {}
 
 
         //! Create a companion database of mutations on the IR, through which the emitter backend can query symbols scope and names.
         //! Create a companion database of mutations on the IR, through which the emitter backend can query symbols scope and names.
@@ -45,19 +43,28 @@ namespace AZ::ShaderCompiler
         void Run(const Options& options);
         void Run(const Options& options);
 
 
         //! For scope-migration-aware name emission of symbol names
         //! For scope-migration-aware name emission of symbol names
-        string GetTranslatedName(QualifiedNameView mangledName, UsageContext qualification, ssize_t tokenId = NotOverToken) const;
+        string GetTranslatedName(QualifiedNameView mangledName, UsageContext context, ssize_t tokenId = NotOverToken) const;
 
 
-        string GetTranslatedName(const IdentifierUID& uid, UsageContext qualification, ssize_t tokenId = NotOverToken) const;
+        string GetTranslatedName(const IdentifierUID& uid, UsageContext context, ssize_t tokenId = NotOverToken) const;
 
 
-        string GetTranslatedName(const TypeRefInfo& typeRef, UsageContext qualification, ssize_t tokenId = NotOverToken) const;
+        string GetTranslatedName(const TypeRefInfo& typeRef, UsageContext context, ssize_t tokenId = NotOverToken) const;
 
 
-        string GetTranslatedName(const ExtendedTypeInfo& extType, UsageContext qualification, ssize_t tokenId = NotOverToken) const;
+        string GetTranslatedName(const ExtendedTypeInfo& extType, UsageContext context, const Options& options, Modifiers banned = {}, ssize_t tokenId = NotOverToken) const;
 
 
         //! Write the HLSL formatted shape of an attribute into a stream
         //! Write the HLSL formatted shape of an attribute into a stream
-        static void EmitAttribute(const AttributeInfo& attrInfo, std::ostream& outstream);
+        static void EmitAttribute(const AttributeInfo& attrInfo, Streamable& outstream);
 
 
         void SetCodeMutator(ICodeEmissionMutator* codeMutator) { m_codeMutator = codeMutator; }
         void SetCodeMutator(ICodeEmissionMutator* codeMutator) { m_codeMutator = codeMutator; }
 
 
+        //! It would be nice that the clients don't push text through the passed "out" stream since it's not observed by the line counter;
+        //! use this API in case of custom client text pushing.
+        template< typename Streamable >
+        CodeEmitter& operator << (Streamable&& s)
+        {
+            m_out << s;
+            return *this;
+        }
+
     protected:
     protected:
 
 
         //! Emits the closest preprocessor generated "#line <int> <filepath>" directive located before
         //! Emits the closest preprocessor generated "#line <int> <filepath>" directive located before
@@ -74,7 +81,7 @@ namespace AZ::ShaderCompiler
 
 
         void EmitFunction(const FunctionInfo& funcSub, const IdentifierUID& id, EmitFunctionAs entityConfiguration, const Options& options);
         void EmitFunction(const FunctionInfo& funcSub, const IdentifierUID& id, EmitFunctionAs entityConfiguration, const Options& options);
 
 
-        void EmitTypeAlias(const IdentifierUID& uid, const TypeAliasInfo& aliasInfo) const;
+        void EmitTypeAlias(const IdentifierUID& uid, const TypeAliasInfo& aliasInfo, const Options& options) const;
 
 
         void EmitEnum(const IdentifierUID& uid, const ClassInfo& classInfo, const Options& options);
         void EmitEnum(const IdentifierUID& uid, const ClassInfo& classInfo, const Options& options);
 
 
@@ -92,12 +99,6 @@ namespace AZ::ShaderCompiler
         //! Emits get function definitions for root constants
         //! Emits get function definitions for root constants
         void EmitGetFunctionsForRootConstants(const ClassInfo& classInfo, string_view bufferName) const;
         void EmitGetFunctionsForRootConstants(const ClassInfo& classInfo, string_view bufferName) const;
 
 
-        // for all sorts of const/static/groupshared/matrixmajor....
-        static string GetTypeModifier(const VarInfo&, const Options& options);
-
-        // for all sorts of inline/static/....
-        static string GetTypeModifier(const FunctionInfo&, const Options& options);
-
         //! That is a list of code elements we possibly want to emit (e.g when we emit a variable declaration)
         //! That is a list of code elements we possibly want to emit (e.g when we emit a variable declaration)
         MAKE_REFLECTABLE_ENUM_POWER( VarDeclHas,
         MAKE_REFLECTABLE_ENUM_POWER( VarDeclHas,
             InOutModifiers,  // when we emit in the context of function parameters, HLSL in out keywords are important
             InOutModifiers,  // when we emit in the context of function parameters, HLSL in out keywords are important
@@ -130,15 +131,15 @@ namespace AZ::ShaderCompiler
                 }
                 }
                 else
                 else
                 {
                 {
-                    m_out << GetInputModifier(param.m_typeQualifier) << " ";
+                    m_out << GetInputModifier(param.m_typeInfo.m_qualifiers) << " ";
 
 
-                    m_out << GetTranslatedName(param.m_typeInfo, UsageContext::ReferenceSite);
+                    m_out << GetTranslatedName(param.m_typeInfo, UsageContext::ReferenceSite, options);
 
 
                     if (!param.m_arrayRankSpecifiers.empty())
                     if (!param.m_arrayRankSpecifiers.empty())
                     {
                     {
                         for (auto* rankCtx : param.m_arrayRankSpecifiers)
                         for (auto* rankCtx : param.m_arrayRankSpecifiers)
                         {
                         {
-                            EmitText(rankCtx->getSourceInterval());
+                            EmitTranspiledTokens(rankCtx->getSourceInterval());
                         }
                         }
                     }
                     }
 
 
@@ -149,7 +150,7 @@ namespace AZ::ShaderCompiler
 
 
                     if (param.m_defaultValueExpression)
                     if (param.m_defaultValueExpression)
                     {
                     {
-                        EmitText(param.m_defaultValueExpression->getSourceInterval());
+                        EmitTranspiledTokens(param.m_defaultValueExpression->getSourceInterval());
                     }
                     }
                 }
                 }
 
 
@@ -180,10 +181,10 @@ namespace AZ::ShaderCompiler
         void EmitSRG(const SRGInfo& srgInfo, const IdentifierUID& srgId, const Options& options, const RootSigDesc& rootSig);
         void EmitSRG(const SRGInfo& srgInfo, const IdentifierUID& srgId, const Options& options, const RootSigDesc& rootSig);
 
 
         //! Advanced logic (targeted transpilation transforms included) interval-as-text extractor from source token stream
         //! Advanced logic (targeted transpilation transforms included) interval-as-text extractor from source token stream
-        void GetTextInStream(misc::Interval interval, std::ostream& output) const override;
-
         //! Will copy function body original tokens, skipping comments, reformatting if possible, and translating variable declarations when needed, as well as mutating reference names of migrated SRG contents.
         //! Will copy function body original tokens, skipping comments, reformatting if possible, and translating variable declarations when needed, as well as mutating reference names of migrated SRG contents.
-        void EmitText(misc::Interval interval) const;
+        void EmitTranspiledTokens(misc::Interval interval, Streamable& output) const override;
+
+        void EmitTranspiledTokens(misc::Interval interval) const { EmitTranspiledTokens(interval, m_out); }
 
 
         //! Move a symbol to a different scope. Currently used to strip SRGs of their symbols, so that SRGs are effectively erased.
         //! Move a symbol to a different scope. Currently used to strip SRGs of their symbols, so that SRGs are effectively erased.
         void MigrateASTSubTree(const IdentifierUID& azslSymbol, QualifiedNameView landingScope);
         void MigrateASTSubTree(const IdentifierUID& azslSymbol, QualifiedNameView landingScope);
@@ -211,7 +212,7 @@ namespace AZ::ShaderCompiler
         SymbolTranslation m_translations;
         SymbolTranslation m_translations;
         unordered_set<IdentifierUID> m_alreadyEmittedFunctionDeclarations;
         unordered_set<IdentifierUID> m_alreadyEmittedFunctionDeclarations;
         unordered_set<IdentifierUID> m_alreadyEmittedFunctionDefinitions;
         unordered_set<IdentifierUID> m_alreadyEmittedFunctionDefinitions;
-        unordered_set<size_t> m_alreadyEmittedPreprocessorLineDirectives;
+        map<size_t, size_t> m_alreadyEmittedPreprocessorLineDirectives;
 
 
         IdentifierUID m_shaderVariantFallbackUid;
         IdentifierUID m_shaderVariantFallbackUid;
         
         
@@ -220,19 +221,15 @@ namespace AZ::ShaderCompiler
         ICodeEmissionMutator* m_codeMutator = nullptr;
         ICodeEmissionMutator* m_codeMutator = nullptr;
 
 
         //! We keep track here of the number of lines that have been emitted.
         //! We keep track here of the number of lines that have been emitted.
-        //! The idea is to try to keep the number of lines between the input and the output files
-        //! as close to each other as possible.
-        //! Each symbol has an original line number where it appeared and if the number of output lines
-        //! is less We fill with '\n' (new line) characters until they match.
+        //! Each symbol has an original line number (virtual and physical) where it appeared,
+        //! and emission will also have line directives to remap errors from further tools to the original azsl.
+        //! To avoid spamming the output with line directives, we can keep track of whether a deviation
+        //! has been introduced since the last emitted line directive and the desired virtual line of the currently emitted code construct.
         mutable NewLineCounterStream m_out;
         mutable NewLineCounterStream m_out;
-        void EmitEmptyLinesToLineNumber(size_t originalLineNumber) const;
-
-        //! This template takes over the previous implementation of
-        //! void GetTextInStream(misc::Interval interval, std::ostream& output) const override;
-        //! The idea is that by using the template We only have to write the same code once
-        //! whether We are using a regular std::ostream or an instance of NewLineCounterStream.
-        template <class StreamLike>
-        void GetTextInStreamInternal(misc::Interval interval, StreamLike& output, bool emitNewLines) const;
+
+        PreprocessorLineDirectiveFinder* m_lineFinder;
+
+
 
 
         //! This is a readability function for class emission code. Serves for HLSL declarator of classes
         //! This is a readability function for class emission code. Serves for HLSL declarator of classes
         string EmitInheritanceList(const ClassInfo& clInfo);
         string EmitInheritanceList(const ClassInfo& clInfo);

+ 70 - 101
src/AzslcException.h

@@ -103,8 +103,6 @@ namespace AZ::ShaderCompiler
         EMITTER_UNDEFINED_SRG_MEMBER = 267u,
         EMITTER_UNDEFINED_SRG_MEMBER = 267u,
 
 
         // others
         // others
-        ADVANCED_SYNTAX_CONSTANT_BUFFER_RESTRICTION = 512u,
-        ADVANCED_SYNTAX_CONSTANT_BUFFER_ONLY_IN_SRG = 513u,
         ADVANCED_SYNTAX_DOUBLE_SCOPE_RESOLUTION = 514u,
         ADVANCED_SYNTAX_DOUBLE_SCOPE_RESOLUTION = 514u,
         ADVANCED_RESERVED_NAME_USED = 515u,
         ADVANCED_RESERVED_NAME_USED = 515u,
         ADVANCED_SYNTAX_FUNCTION_IN_STRUCT = 516u,
         ADVANCED_SYNTAX_FUNCTION_IN_STRUCT = 516u,
@@ -115,21 +113,21 @@ namespace AZ::ShaderCompiler
     public:
     public:
         AzslcException(uint32_t errorCode, const char* const errorType, optional<size_t> line, optional<size_t> column, const string& message)
         AzslcException(uint32_t errorCode, const char* const errorType, optional<size_t> line, optional<size_t> column, const string& message)
             : antlr4::RuntimeException(message),
             : antlr4::RuntimeException(message),
-                m_errorCode(errorCode),
-                m_errorType(errorType),
-                m_line(line),
-                m_column(column), 
-                m_errorMessage("")
+              m_errorCode(errorCode),
+              m_errorType(errorType),
+              m_line(line),
+              m_column(column),
+              m_errorMessage("")
         {
         {
             BakeErrorMessage();
             BakeErrorMessage();
         }
         }
 
 
         AzslcException(uint32_t errorCode, const char* const errorType, Token* token, const string& message)
         AzslcException(uint32_t errorCode, const char* const errorType, Token* token, const string& message)
             : RuntimeException(message),
             : RuntimeException(message),
-                m_token(token),
-                m_errorCode(errorCode),
-                m_errorType(errorType),
-                m_errorMessage("")
+              m_token(token),
+              m_errorCode(errorCode),
+              m_errorType(errorType),
+              m_errorMessage("")
         {
         {
             if (m_token)
             if (m_token)
             {
             {
@@ -146,13 +144,13 @@ namespace AZ::ShaderCompiler
         }
         }
 
 
         AzslcException(uint32_t errorCode, const char* const errorType, const string& message)
         AzslcException(uint32_t errorCode, const char* const errorType, const string& message)
-            : RuntimeException(message), 
-                m_token(nullptr), 
-                m_errorCode(errorCode), 
-                m_errorType(errorType),
-                m_line(none),
-                m_column(none),
-                m_errorMessage("")
+            : RuntimeException(message),
+              m_token(nullptr),
+              m_errorCode(errorCode),
+              m_errorType(errorType),
+              m_line(none),
+              m_column(none),
+              m_errorMessage("")
         {
         {
             BakeErrorMessage();
             BakeErrorMessage();
         }
         }
@@ -167,9 +165,12 @@ namespace AZ::ShaderCompiler
             return m_errorCode;
             return m_errorCode;
         }
         }
 
 
-        static string MakeErrorMessage(string_view line, string_view column, string_view errorType, bool error, string_view code, string_view message)
+        static string MakeErrorMessage(string_view filename, string_view line, string_view column, string_view errorType, bool error, string_view code, string_view message)
         {
         {
-            return ConcatString(s_currentSourceFileName,
+            // global filename for error messages. visual studio standard build-tool error format is:
+            // {filename(line# [, column#]) | toolname} : [ any text ] {error | warning} code+number:localizable string [ any text ]
+            // so to respect this, we're going to simplify the API by setting the report file here.
+            return ConcatString(filename,
                                 "(", line, ",", column, ") : ",
                                 "(", line, ",", column, ") : ",
                                 errorType,
                                 errorType,
                                 error ? " error" : " warning",
                                 error ? " error" : " warning",
@@ -180,11 +181,8 @@ namespace AZ::ShaderCompiler
     protected:
     protected:
         void BakeErrorMessage()
         void BakeErrorMessage()
         {
         {
-            if (s_sourceFileLineNumber)
-            {
-                m_line = *s_sourceFileLineNumber;
-            }
-            m_errorMessage = MakeErrorMessage(m_line ? ToString(*m_line) : "",
+            m_errorMessage = MakeErrorMessage(s_lineFinder->GetVirtualFileName(m_line ? *m_line : 0),
+                                              m_line ? ToString(s_lineFinder->GetVirtualLineNumber(*m_line)) : "",
                                               m_column ? ToString(*m_column) : "",
                                               m_column ? ToString(*m_column) : "",
                                               m_errorType ? m_errorType : "",
                                               m_errorType ? m_errorType : "",
                                               m_errorCode != WX_WARNINGS_AS_ERRORS,
                                               m_errorCode != WX_WARNINGS_AS_ERRORS,
@@ -193,13 +191,7 @@ namespace AZ::ShaderCompiler
         }
         }
 
 
     public:
     public:
-        //! global filename for error messages. visual studio standard build-tool error format is:
-        //! {filename(line# [, column#]) | toolname} : [ any text ] {error | warning} code+number:localizable string [ any text ]
-        //! so to respect this, we're going to simplify the API by setting the report file here.
-        static inline string s_currentSourceFileName;
-
-        //! If set, it overrides @m_line.
-        static inline optional<size_t> s_sourceFileLineNumber;
+        static inline PreprocessorLineDirectiveFinder* s_lineFinder;
 
 
     protected:
     protected:
         const uint16_t m_errorCode;
         const uint16_t m_errorCode;
@@ -216,29 +208,26 @@ namespace AZ::ShaderCompiler
         inline static const char* const ErrorType = "Semantic";
         inline static const char* const ErrorType = "Semantic";
 
 
     public:
     public:
-        AzslcOrchestratorException(uint32_t errorCode, optional<size_t> line,optional<size_t> column, const string& message)
+        AzslcOrchestratorException(uint32_t errorCode, optional<size_t> line, optional<size_t> column, const string& message)
             : AzslcException(errorCode,
             : AzslcException(errorCode,
-                ErrorType,
-                line,
-                column,
-                message)
-        {
-        }
+                             ErrorType,
+                             line,
+                             column,
+                             message)
+        {}
 
 
         AzslcOrchestratorException(uint32_t errorCode, Token* token, const string& message)
         AzslcOrchestratorException(uint32_t errorCode, Token* token, const string& message)
-            : AzslcException(errorCode, 
-                ErrorType,
-                token,
-                message)
-        {
-        }
+            : AzslcException(errorCode,
+                             ErrorType,
+                             token,
+                             message)
+        {}
 
 
         AzslcOrchestratorException(uint32_t errorCode, const string& message)
         AzslcOrchestratorException(uint32_t errorCode, const string& message)
             : AzslcException(errorCode,
             : AzslcException(errorCode,
-                ErrorType,
-                message)
-        {
-        }
+                             ErrorType,
+                             message)
+        {}
     };
     };
 
 
     class AzslcIrException final : public AzslcException
     class AzslcIrException final : public AzslcException
@@ -247,12 +236,13 @@ namespace AZ::ShaderCompiler
         inline static const char* const ErrorType = "IR";
         inline static const char* const ErrorType = "IR";
 
 
     public:
     public:
-        AzslcIrException(uint32_t errorCode, const string& message)
-            : AzslcException(errorCode, 
-                ErrorType,
-                message)
-        {
-        }
+        AzslcIrException(uint32_t errorCode, const string& message, optional<size_t> line = none)
+            : AzslcException(errorCode,
+                             ErrorType,
+                             line,
+                             none,
+                             message)
+        {}
     };
     };
 
 
     class AzslcEmitterException final : public AzslcException
     class AzslcEmitterException final : public AzslcException
@@ -263,61 +253,41 @@ namespace AZ::ShaderCompiler
     public:
     public:
         AzslcEmitterException(uint32_t errorCode, optional<size_t> line, optional<size_t> column, const string& message)
         AzslcEmitterException(uint32_t errorCode, optional<size_t> line, optional<size_t> column, const string& message)
             : AzslcException(errorCode,
             : AzslcException(errorCode,
-                ErrorType,
-                line,
-                column,
-                message)
-        {
-        }
+                             ErrorType,
+                             line,
+                             column,
+                             message)
+        {}
 
 
         AzslcEmitterException(uint32_t errorCode, Token* token, const string& message)
         AzslcEmitterException(uint32_t errorCode, Token* token, const string& message)
-            : AzslcException(errorCode, 
-                ErrorType,
-                token,
-                message)
-        {
-        }
+            : AzslcException(errorCode,
+                             ErrorType,
+                             token,
+                             message)
+        {}
 
 
         AzslcEmitterException(uint32_t errorCode, const string& message)
         AzslcEmitterException(uint32_t errorCode, const string& message)
             : AzslcException(errorCode,
             : AzslcException(errorCode,
-                ErrorType,
-                message)
-        {
-        }
+                             ErrorType,
+                             message)
+        {}
     };
     };
 
 
     class AzslParserEventListener final : public antlr4::BaseErrorListener
     class AzslParserEventListener final : public antlr4::BaseErrorListener
     {
     {
     public:
     public:
-        explicit AzslParserEventListener(PreprocessorLineDirectiveFinder& lineDirectiveFinder) : m_lineDirectiveFinder(lineDirectiveFinder) {}
-        AzslParserEventListener() = delete;
-        ~AzslParserEventListener() override = default;
-
         void syntaxError(antlr4::Recognizer* recognizer, antlr4::Token* offendingSymbol, size_t line,
         void syntaxError(antlr4::Recognizer* recognizer, antlr4::Token* offendingSymbol, size_t line,
-            size_t charPositionInLine, const string &msg, std::exception_ptr e) override
+            size_t charPositionInLine, const string& msg, std::exception_ptr e) override
         {
         {
-            string errorMessage;
-            const LineDirectiveInfo* lineDirectiveInfo = m_lineDirectiveFinder.GetNearestPreprocessorLineDirective(line);
-            if (!lineDirectiveInfo)
-            {
-                errorMessage = std::move(AzslcException::MakeErrorMessage(ToString(line),
-                    ToString(charPositionInLine + 1),
-                    "syntax",
-                    true,
-                    ToString(static_cast<int>(PARSER_SYNTAX_ERROR)),
-                    msg));
-            }
-            else
-            {
-                auto absoluteLineNumberInIncludedFile = m_lineDirectiveFinder.GetLineNumberInOriginalSourceFile(*lineDirectiveInfo, line);
-                AzslcException::s_currentSourceFileName = lineDirectiveInfo->m_containingFilename;
-                errorMessage = std::move(AzslcException::MakeErrorMessage(ToString(absoluteLineNumberInIncludedFile),
-                    ToString(charPositionInLine + 1),
-                    "syntax",
-                    true,
-                    ToString(static_cast<int>(PARSER_SYNTAX_ERROR)),
-                    msg));
-            }
+            bool isKeyword = m_isKeywordPredicate(recognizer, offendingSymbol);
+            using Ex = AzslcException;
+            string errorMessage = Ex::MakeErrorMessage(Ex::s_lineFinder->GetVirtualFileName(line),
+                                                       ToString(Ex::s_lineFinder->GetVirtualLineNumber(line)),
+                                                       ToString(charPositionInLine + 1),
+                                                       "syntax",
+                                                       true,
+                                                       ToString(PARSER_SYNTAX_ERROR),
+                                                       ConcatString(msg, " (", offendingSymbol->getText(), isKeyword ? " is a keyword)" : " was unexpected)"));
 
 
             antlr4::ParseCancellationException parseException(errorMessage);
             antlr4::ParseCancellationException parseException(errorMessage);
             if (e)
             if (e)
@@ -330,6 +300,8 @@ namespace AZ::ShaderCompiler
             }
             }
         }
         }
 
 
+        std::function<bool(antlr4::Recognizer*, antlr4::Token* )> m_isKeywordPredicate;
+
         void reportAmbiguity(antlr4::Parser *recognizer, const antlr4::dfa::DFA &dfa, size_t startIndex, size_t stopIndex, bool exact,
         void reportAmbiguity(antlr4::Parser *recognizer, const antlr4::dfa::DFA &dfa, size_t startIndex, size_t stopIndex, bool exact,
             const antlrcpp::BitSet &ambigAlts, antlr4::atn::ATNConfigSet *configs) override
             const antlrcpp::BitSet &ambigAlts, antlr4::atn::ATNConfigSet *configs) override
         {
         {
@@ -344,9 +316,6 @@ namespace AZ::ShaderCompiler
             size_t prediction, antlr4::atn::ATNConfigSet *configs) override
             size_t prediction, antlr4::atn::ATNConfigSet *configs) override
         {
         {
         }
         }
-
-    private:
-        PreprocessorLineDirectiveFinder& m_lineDirectiveFinder;
     };
     };
 
 
     inline void OutputNestedAndException(const exception& e)
     inline void OutputNestedAndException(const exception& e)

+ 23 - 56
src/AzslcIntermediateRepresentation.cpp

@@ -110,7 +110,8 @@ namespace AZ::ShaderCompiler
     }
     }
 
 
     //! execute any logic that relates to intermediate treatment that would need to be done between front end and back end
     //! execute any logic that relates to intermediate treatment that would need to be done between front end and back end
-    void IntermediateRepresentation::MiddleEnd(const MiddleEndConfiguration& middleEndconfigration)
+    void IntermediateRepresentation::MiddleEnd(const MiddleEndConfiguration& middleEndconfigration,
+                                               PreprocessorLineDirectiveFinder* lineFinder)
     {
     {
         // At this point we have an order apparition vector that stores symbols in the immediate naive
         // At this point we have an order apparition vector that stores symbols in the immediate naive
         // order in which they are first seen in the source code.
         // order in which they are first seen in the source code.
@@ -129,7 +130,7 @@ namespace AZ::ShaderCompiler
 
 
         if (!middleEndconfigration.m_skipAlignmentValidation)
         if (!middleEndconfigration.m_skipAlignmentValidation)
         {
         {
-            ValidateAlignmentIssueWhenScalarOrFloat2PrecededByMatrix(middleEndconfigration);
+            ValidateAlignmentIssueWhenScalarOrFloat2PrecededByMatrix(middleEndconfigration, lineFinder);
         }
         }
     }
     }
 
 
@@ -305,9 +306,15 @@ namespace AZ::ShaderCompiler
 
 
     void DumpSymbols(IntermediateRepresentation& ir)
     void DumpSymbols(IntermediateRepresentation& ir)
     {
     {
+        std::unordered_set<IdentifierUID> seen; // avoid functions delc/def repetitions
         // in YAML form
         // in YAML form
         for (auto& uid : ir.m_symbols.GetOrderedSymbols())
         for (auto& uid : ir.m_symbols.GetOrderedSymbols())
         {
         {
+            if (seen.find(uid) != seen.end())
+            {
+                continue;
+            }
+            seen.insert(uid);
             auto& [_, sym] = *ir.m_symbols.GetIdAndKindInfo(uid.m_name);
             auto& [_, sym] = *ir.m_symbols.GetIdAndKindInfo(uid.m_name);
             assert(uid == _);
             assert(uid == _);
             cout << "Symbol " << Decorate("'", uid.m_name) << ":\n";
             cout << "Symbol " << Decorate("'", uid.m_name) << ":\n";
@@ -322,17 +329,9 @@ namespace AZ::ShaderCompiler
                 //  but they don't have actual type or declaration line, so we skip them here.
                 //  but they don't have actual type or declaration line, so we skip them here.
                 cout << "  line: " << (sub.m_declNode ? std::to_string(sub.m_declNode->start->getLine()) : "NA") << "\n";
                 cout << "  line: " << (sub.m_declNode ? std::to_string(sub.m_declNode->start->getLine()) : "NA") << "\n";
                 cout << "  type:\n" << ToYaml(sub.m_typeInfoExt, ir, "    ") << "\n";
                 cout << "  type:\n" << ToYaml(sub.m_typeInfoExt, ir, "    ") << "\n";
+                cout << "  storage: " << sub.m_typeInfoExt.m_qualifiers.GetDisplayName() << "\n";
                 cout << "  array dim: \"" << sub.m_typeInfoExt.m_arrayDims.ToString() << "\"\n";
                 cout << "  array dim: \"" << sub.m_typeInfoExt.m_arrayDims.ToString() << "\"\n";
                 cout << "  has sampler state: " << (sub.m_samplerState ? "yes\n" : "no\n");
                 cout << "  has sampler state: " << (sub.m_samplerState ? "yes\n" : "no\n");
-                cout << "  storage: ";
-                for (auto sf : StorageFlag::Enumerate{})
-                {
-                    auto flag = StorageFlag{sf};
-                    if (sub.CheckHasStorageFlag(flag))
-                    {
-                        cout << StorageFlag::ToStr(flag) << " ";
-                    }
-                }
                 cout << "\n";
                 cout << "\n";
                 if (!holds_alternative<monostate>(sub.m_constVal))
                 if (!holds_alternative<monostate>(sub.m_constVal))
                 {
                 {
@@ -365,6 +364,7 @@ namespace AZ::ShaderCompiler
                 cout << "  is method: " << sub.m_isMethod << "\n";
                 cout << "  is method: " << sub.m_isMethod << "\n";
                 cout << "  is virtual: " << sub.m_isVirtual << "\n";
                 cout << "  is virtual: " << sub.m_isVirtual << "\n";
                 cout << "  return type:\n" << ToYaml(sub.m_returnType, ir, "    ") << "\n";
                 cout << "  return type:\n" << ToYaml(sub.m_returnType, ir, "    ") << "\n";
+                cout << "  storage: " << sub.m_returnType.m_qualifiers.GetDisplayName() << "\n";
                 cout << "  has overriding children:\n" << ToYaml(sub.m_overrides.begin(), sub.m_overrides.end(), "    ");
                 cout << "  has overriding children:\n" << ToYaml(sub.m_overrides.begin(), sub.m_overrides.end(), "    ");
                 cout << "  is hiding base symbol: '" << (sub.m_base ? sub.m_base->m_name.c_str() : "") << "'\n";
                 cout << "  is hiding base symbol: '" << (sub.m_base ? sub.m_base->m_name.c_str() : "") << "'\n";
                 cout << "  parameters:\n";
                 cout << "  parameters:\n";
@@ -631,8 +631,8 @@ namespace AZ::ShaderCompiler
                 string typeName = FormatString("uint%d", padSize / 4);
                 string typeName = FormatString("uint%d", padSize / 4);
 
 
                 ExtractedTypeExt padType = { UnqualifiedNameView(typeName), nullptr };
                 ExtractedTypeExt padType = { UnqualifiedNameView(typeName), nullptr };
-                varInfo.m_typeInfoExt = ExtendedTypeInfo{ m_sema.CreateTypeRefInfo(padType),
-                                 {}, {}, {}, Packing::MatrixMajor::Default };
+                varInfo.m_typeInfoExt = ExtendedTypeInfo{m_sema.CreateTypeRefInfo(padType), {},
+                                                         {}, {}, {}, Packing::MatrixMajor::Default };
 
 
                 newVarKind.GetSubRefAs<VarInfo>() = varInfo;
                 newVarKind.GetSubRefAs<VarInfo>() = varInfo;
                 rootConstantStructKindInfo.GetSubRefAs<ClassInfo>().PushMember(newVarUid, Kind::Variable);
                 rootConstantStructKindInfo.GetSubRefAs<ClassInfo>().PushMember(newVarUid, Kind::Variable);
@@ -642,7 +642,8 @@ namespace AZ::ShaderCompiler
         m_rootConstantStructUID = rootConstantStructUid;
         m_rootConstantStructUID = rootConstantStructUid;
     }
     }
 
 
-    void IntermediateRepresentation::ValidateAlignmentIssueWhenScalarOrFloat2PrecededByMatrix(const MiddleEndConfiguration& middleEndconfigration)
+    void IntermediateRepresentation::ValidateAlignmentIssueWhenScalarOrFloat2PrecededByMatrix(const MiddleEndConfiguration& middleEndconfigration,
+                                                                                              PreprocessorLineDirectiveFinder* lineFinder)
     {
     {
         //! Helper lambda to check if a symbol is a matrix, it also returns
         //! Helper lambda to check if a symbol is a matrix, it also returns
         //! the number of columns in @numColumns
         //! the number of columns in @numColumns
@@ -876,25 +877,22 @@ namespace AZ::ShaderCompiler
             }
             }
 
 
             // Let's get the line number where @insertBeforeThisUid was found in the flat AZSL file.
             // Let's get the line number where @insertBeforeThisUid was found in the flat AZSL file.
-            const auto * tmpThis = this; // To disambiguate which version of GetSymbolSubAs<> to call.
-            const auto * varInfo = tmpThis->GetSymbolSubAs<VarInfo>(insertBeforeThisUid.GetName());
+            const auto* constThis = this; // To disambiguate which cv-version of GetSymbolSubAs<> to call.
+            const auto* varInfo = constThis->GetSymbolSubAs<VarInfo>(insertBeforeThisUid.GetName());
             size_t lineOfDeclaration = varInfo->GetOriginalLineNumber();
             size_t lineOfDeclaration = varInfo->GetOriginalLineNumber();
-            const LineDirectiveInfo* lineInfo = GetNearestPreprocessorLineDirective(lineOfDeclaration);
-            if (!lineInfo)
+            const LineDirectiveInfo* lineInfo = lineFinder->GetNearestPreprocessorLineDirective(lineOfDeclaration);
+            if (!lineInfo || lineOfDeclaration == 0)
             {
             {
-                // When the LineDirectiveInfo* is null, it means We have detected a variable that was added
+                // When the LineDirectiveInfo* is null (or at 0), it means We have detected a variable that was added
                 // by AZSLc itself. e.g. Root Constant padding, etc.
                 // by AZSLc itself. e.g. Root Constant padding, etc.
                 // In such case, this is not an issue We want to interfere with.
                 // In such case, this is not an issue We want to interfere with.
                 return {};
                 return {};
             }
             }
-            const auto originallineNumber = GetLineNumberInOriginalSourceFile(*lineInfo, lineOfDeclaration);
-
+            const auto virtualLine = lineFinder->GetVirtualLineNumber(*lineInfo, lineOfDeclaration);
             string solution = FormatString("- A 'float%d' variable should be added before the variable '%s' in '%s %s' at Line number %zu of '%s'\n",
             string solution = FormatString("- A 'float%d' variable should be added before the variable '%s' in '%s %s' at Line number %zu of '%s'\n",
-                prepadType == PrepadType::Float2 ? 2 : 3, insertBeforeThisUid.GetNameLeaf().c_str(), typeName.c_str(), parentName.data(),
-                originallineNumber, lineInfo->m_containingFilename.c_str());
-
+                                           prepadType == PrepadType::Float2 ? 2 : 3, insertBeforeThisUid.GetNameLeaf().c_str(), typeName.c_str(), parentName.data(),
+                                           virtualLine, lineInfo->m_containingFilename.c_str());
             return solution;
             return solution;
-
         };
         };
 
 
         string solutionsReport;
         string solutionsReport;
@@ -953,35 +951,4 @@ namespace AZ::ShaderCompiler
         return memberList[memberList.size() - 1];
         return memberList[memberList.size() - 1];
     }
     }
 
 
-
-    //////////////////////////////////////////////////////////////////////////
-    // PreprocessorLineDirective overrides...
-    const LineDirectiveInfo* IntermediateRepresentation::GetNearestPreprocessorLineDirective(size_t azslLineNumber) const
-    {
-        if (!azslLineNumber)
-        {
-            return nullptr;
-        }
-
-        auto lineBefore = m_lineMap.lower_bound(azslLineNumber);
-        if (lineBefore != m_lineMap.begin() && (lineBefore != m_lineMap.end() || m_lineMap.size() > 0))
-        {
-            lineBefore--;
-            return &lineBefore->second;
-        }
-        return nullptr;
-    }
-
-    void IntermediateRepresentation::OverrideAzslcExceptionFileAndLine(size_t azslLineNumber) const
-    {
-        const LineDirectiveInfo* lineInfo = GetNearestPreprocessorLineDirective(azslLineNumber);
-        if (!lineInfo)
-        {
-            return;
-        }
-        AzslcException::s_currentSourceFileName = lineInfo->m_containingFilename;
-        AzslcException::s_sourceFileLineNumber = GetLineNumberInOriginalSourceFile(*lineInfo, azslLineNumber);
-    }
-    ///////////////////////////////////////////////////////////////////////////
-
 }  // end of namespace AZ::ShaderCompiler
 }  // end of namespace AZ::ShaderCompiler

+ 7 - 20
src/AzslcIntermediateRepresentation.h

@@ -10,7 +10,6 @@
 #include "AzslcSemanticOrchestrator.h"
 #include "AzslcSemanticOrchestrator.h"
 #include "AzslcTokenToAst.h"
 #include "AzslcTokenToAst.h"
 #include "AzslcKindInfo.h"
 #include "AzslcKindInfo.h"
-#include "PreprocessorLineDirectiveFinder.h"
 #include "PadToAttributeMutator.h"
 #include "PadToAttributeMutator.h"
 
 
 namespace AZ::ShaderCompiler
 namespace AZ::ShaderCompiler
@@ -33,7 +32,7 @@ namespace AZ::ShaderCompiler
 
 
     // Holder responsible for owning post-parsed source data (in the form of an object graph).
     // Holder responsible for owning post-parsed source data (in the form of an object graph).
     // Note that this is not IL. e.g. not a serialized form of IR with op-codes (like DXIL).
     // Note that this is not IL. e.g. not a serialized form of IR with op-codes (like DXIL).
-    struct IntermediateRepresentation : public PreprocessorLineDirectiveFinder
+    struct IntermediateRepresentation
     {
     {
         IntermediateRepresentation(azslLexer* lexer)
         IntermediateRepresentation(azslLexer* lexer)
             : m_scope{[&](QualifiedNameView sym)  // Initialize the scope object with a decoupled identifier getter. (SOLID's D.I.P)
             : m_scope{[&](QualifiedNameView sym)  // Initialize the scope object with a decoupled identifier getter. (SOLID's D.I.P)
@@ -42,7 +41,7 @@ namespace AZ::ShaderCompiler
                       }
                       }
                      }
                      }
             , m_lexer{ lexer }
             , m_lexer{ lexer }
-            , m_sema{&m_symbols, &m_scope, lexer, this}
+            , m_sema{&m_symbols, &m_scope, lexer}
             , m_padToAttributeMutator(*this)
             , m_padToAttributeMutator(*this)
         {
         {
             // Default output format for all targets
             // Default output format for all targets
@@ -187,7 +186,8 @@ namespace AZ::ShaderCompiler
             const AZ::ShaderCompiler::Packing::Layout layoutPacking) const;
             const AZ::ShaderCompiler::Packing::Layout layoutPacking) const;
 
 
         //! execute any logic that relates to intermediate treatment that would need to be done between front end and back end
         //! execute any logic that relates to intermediate treatment that would need to be done between front end and back end
-        void MiddleEnd(const MiddleEndConfiguration& middleEndconfig);
+        void MiddleEnd(const MiddleEndConfiguration& middleEndconfig,
+                       PreprocessorLineDirectiveFinder* lineFinder);
 
 
         bool Validate();
         bool Validate();
 
 
@@ -298,19 +298,8 @@ namespace AZ::ShaderCompiler
         //!     float2 m_value;
         //!     float2 m_value;
         //! }
         //! }
         //!  
         //!  
-        void ValidateAlignmentIssueWhenScalarOrFloat2PrecededByMatrix(const MiddleEndConfiguration& middleEndconfigration);
-
-        //////////////////////////////////////////////////////////////////////////
-        // PreprocessorLineDirective overrides...
-        const LineDirectiveInfo* GetNearestPreprocessorLineDirective(size_t azslLineNumber) const override;
-        void OverrideAzslcExceptionFileAndLine(size_t azslLineNumber) const override;
-        //////////////////////////////////////////////////////////////////////////
-
-        void ThrowAzslcIrException(uint32_t errorCode, size_t lineNumber, const string& message)
-        {
-            OverrideAzslcExceptionFileAndLine(lineNumber);
-            throw AzslcIrException(errorCode, message);
-        }
+        void ValidateAlignmentIssueWhenScalarOrFloat2PrecededByMatrix(const MiddleEndConfiguration& middleEndconfigration,
+                                                                      PreprocessorLineDirectiveFinder* lineFinder);
 
 
         // Returns info for the last variable inside the struct or class named @structUid.
         // Returns info for the last variable inside the struct or class named @structUid.
         // If @structUid is not struct or class, then it returns nullptr.
         // If @structUid is not struct or class, then it returns nullptr.
@@ -329,9 +318,7 @@ namespace AZ::ShaderCompiler
         // the structure that holds root constants (it's a generated thing, and there is only one)
         // the structure that holds root constants (it's a generated thing, and there is only one)
         IdentifierUID         m_rootConstantStructUID;
         IdentifierUID         m_rootConstantStructUID;
 
 
-        map<size_t, LineDirectiveInfo> m_lineMap;
-
-        IRMetaData m_metaData;
+        IRMetaData            m_metaData;
 
 
         // Helper to deal with the [[pad_to(N)]] attribute.
         // Helper to deal with the [[pad_to(N)]] attribute.
         PadToAttributeMutator m_padToAttributeMutator;
         PadToAttributeMutator m_padToAttributeMutator;

+ 36 - 31
src/AzslcKindInfo.h

@@ -77,6 +77,12 @@ namespace AZ::ShaderCompiler
         vector<Argument>  m_argList;
         vector<Argument>  m_argList;
     };
     };
 
 
+    static bool TypeHasStorageFlag(const TypeQualifiers& typeQualifier, StorageFlag flag)
+    {
+        // The mask operation returns an rvalue and it isn't converted to bool
+        return static_cast<bool>(typeQualifier.m_flag & flag);
+    }
+
     //! store base list, member list...
     //! store base list, member list...
     struct ClassInfo
     struct ClassInfo
     {
     {
@@ -225,7 +231,7 @@ namespace AZ::ShaderCompiler
     //! an extended type information gathers:
     //! an extended type information gathers:
     //!  + core type info (immutable and limited amount, all stored in the fixed symbol table)
     //!  + core type info (immutable and limited amount, all stored in the fixed symbol table)
     //!  + array dimensions
     //!  + array dimensions
-    //!  + matrix majorness storage flag
+    //!  + matrix majorness storage flag / all other qualifiers (unsigned, const, volatile, precise, inline, groupshared...)
     struct ExtendedTypeInfo
     struct ExtendedTypeInfo
     {
     {
         const auto& GetDimensions() const
         const auto& GetDimensions() const
@@ -261,9 +267,18 @@ namespace AZ::ShaderCompiler
         void SetMatrixMajor(Packing::MatrixMajor mtxMajor)
         void SetMatrixMajor(Packing::MatrixMajor mtxMajor)
         {
         {
             m_mtxMajor = mtxMajor;
             m_mtxMajor = mtxMajor;
+            m_qualifiers.m_flag &= StorageFlag::ColumnMajor;
+            m_qualifiers.m_flag &= StorageFlag::RowMajor;
+            if (mtxMajor == Packing::MatrixMajor::ColumnMajor)
+            {
+                m_qualifiers.m_flag |= StorageFlag::ColumnMajor;
+            }
+            else if (mtxMajor == Packing::MatrixMajor::RowMajor)
+            {
+                m_qualifiers.m_flag |= StorageFlag::RowMajor;
+            }
         }
         }
 
 
-        //! True if the storage type is in row major. False if the storage type is column major (default).
         const Packing::MatrixMajor GetMatrixMajor() const
         const Packing::MatrixMajor GetMatrixMajor() const
         {
         {
             return m_mtxMajor;
             return m_mtxMajor;
@@ -289,11 +304,21 @@ namespace AZ::ShaderCompiler
                 && (m_genericParameter.IsEmpty() || m_genericParameter.m_typeClass != TypeClass::IsNotType);
                 && (m_genericParameter.IsEmpty() || m_genericParameter.m_typeClass != TypeClass::IsNotType);
         }
         }
 
 
+        bool CheckHasStorageFlag(StorageFlag flag) const
+        {
+            return TypeHasStorageFlag(m_qualifiers, flag);
+        }
+
         friend bool operator == (const ExtendedTypeInfo& lhs, const ExtendedTypeInfo& rhs)
         friend bool operator == (const ExtendedTypeInfo& lhs, const ExtendedTypeInfo& rhs)
         {
         {
+            static const Modifiers inconsequentialModifiers = Modifiers{StorageFlag::Extern}
+                | StorageFlag::Inline | StorageFlag::Static | StorageFlag::Volatile | StorageFlag::Uniform;
+            Modifiers lhsTM = lhs.m_qualifiers.m_flag & ~inconsequentialModifiers;
+            Modifiers rhsTM = rhs.m_qualifiers.m_flag & ~inconsequentialModifiers;
             return lhs.m_coreType == rhs.m_coreType
             return lhs.m_coreType == rhs.m_coreType
                 && lhs.m_genericParameter == rhs.m_genericParameter
                 && lhs.m_genericParameter == rhs.m_genericParameter
-                && lhs.m_arrayDims == rhs.m_arrayDims;
+                && lhs.m_arrayDims == rhs.m_arrayDims
+                && lhsTM == rhsTM;
         }
         }
         friend bool operator != (const ExtendedTypeInfo& lhs, const ExtendedTypeInfo& rhs)
         friend bool operator != (const ExtendedTypeInfo& lhs, const ExtendedTypeInfo& rhs)
         {
         {
@@ -304,7 +329,8 @@ namespace AZ::ShaderCompiler
         //! this is not rigorous and does not constitute a mangling. the full feature is better served at emission side by GetExtendedTypeInfo function.
         //! this is not rigorous and does not constitute a mangling. the full feature is better served at emission side by GetExtendedTypeInfo function.
         string GetDisplayName() const
         string GetDisplayName() const
         {
         {
-             return m_coreType.m_typeId.m_name + (m_genericParameter.IsEmpty() ? "" : Decorate("<", m_genericParameter.m_typeId.m_name, ">"));
+             return m_qualifiers.GetDisplayName() + " " + m_coreType.m_typeId.m_name +
+                 (m_genericParameter.IsEmpty() ? "" : Decorate("<", m_genericParameter.m_typeId.m_name, ">"));
         }
         }
 
 
         //! only use leaf form of names to compose a displayable reconstituted name
         //! only use leaf form of names to compose a displayable reconstituted name
@@ -320,9 +346,9 @@ namespace AZ::ShaderCompiler
         //  This is because of a limitation called array collapsing. (which is kind of important for typeof and the seenat feature)
         //  This is because of a limitation called array collapsing. (which is kind of important for typeof and the seenat feature)
         //  If we store the array dimensions directly in TypeRefInfo, it will not be possible
         //  If we store the array dimensions directly in TypeRefInfo, it will not be possible
         //  to support multiple different arrays of `int`s throughout the whole compilation unit.
         //  to support multiple different arrays of `int`s throughout the whole compilation unit.
-        // Finally m_mtxMajor is not part of the type; we only provide it here as a cache for convenience
         TypeRefInfo          m_coreType;
         TypeRefInfo          m_coreType;
         TypeRefInfo          m_genericParameter;  // in case of Buffer<float> coreType is Buffer, genericParameter is float. note that genericParams can't be arrays since brackets are not part of the "type:" rule
         TypeRefInfo          m_genericParameter;  // in case of Buffer<float> coreType is Buffer, genericParameter is float. note that genericParams can't be arrays since brackets are not part of the "type:" rule
+        TypeQualifiers       m_qualifiers;
         ArrayDimensions      m_arrayDims;
         ArrayDimensions      m_arrayDims;
         ArrayDimensions      m_genericDims;
         ArrayDimensions      m_genericDims;
         Packing::MatrixMajor m_mtxMajor = Packing::MatrixMajor::Default; // Can be changed by #pragmapack_matrix directive, or with the row_major or the column_major qualifiers.
         Packing::MatrixMajor m_mtxMajor = Packing::MatrixMajor::Default; // Can be changed by #pragmapack_matrix directive, or with the row_major or the column_major qualifiers.
@@ -335,12 +361,6 @@ namespace AZ::ShaderCompiler
         ExtendedTypeInfo m_canonicalType;  // ultimate (existing) target of the alias
         ExtendedTypeInfo m_canonicalType;  // ultimate (existing) target of the alias
     };
     };
 
 
-    static bool TypeHasStorageFlag(TypeQualifier typeQualifier, StorageFlag flag)
-    {
-        // The mask operation returns an rvalue and it isn't converted to bool
-        return static_cast<bool>(typeQualifier & flag);
-    }
-
     struct VarInfo
     struct VarInfo
     {
     {
         inline bool                CheckHasStorageFlag(StorageFlag flag) const;
         inline bool                CheckHasStorageFlag(StorageFlag flag) const;
@@ -373,8 +393,6 @@ namespace AZ::ShaderCompiler
 
 
         AstUnnamedVarDecl*         m_declNode = nullptr;
         AstUnnamedVarDecl*         m_declNode = nullptr;
         UnqualifiedName            m_identifier;
         UnqualifiedName            m_identifier;
-        TypeQualifier              m_typeQualifier;
-        vector<string>             m_unknownQualifiers;        // For qualifiers we didn't add to the enum
         bool                       m_srgMember = false;
         bool                       m_srgMember = false;
         bool                       m_isPublic = true;
         bool                       m_isPublic = true;
         ConstNumericVal            m_constVal;   // (attempted folded) initializer value for simple scalars
         ConstNumericVal            m_constVal;   // (attempted folded) initializer value for simple scalars
@@ -382,10 +400,10 @@ namespace AZ::ShaderCompiler
         ExtendedTypeInfo           m_typeInfoExt;
         ExtendedTypeInfo           m_typeInfoExt;
     };
     };
 
 
-    // deported method definitions
+    // VarInfo methods definitions
     bool VarInfo::CheckHasStorageFlag(StorageFlag flag) const
     bool VarInfo::CheckHasStorageFlag(StorageFlag flag) const
     {
     {
-       return TypeHasStorageFlag(m_typeQualifier, flag);
+       return m_typeInfoExt.CheckHasStorageFlag(flag);
     }
     }
 
 
     bool VarInfo::CheckHasAllStorageFlags(std::initializer_list<StorageFlag> vararg) const
     bool VarInfo::CheckHasAllStorageFlags(std::initializer_list<StorageFlag> vararg) const
@@ -660,16 +678,6 @@ namespace AZ::ShaderCompiler
             return m_isMethod && HasPreDeclarationAndLaterDefinition();
             return m_isMethod && HasPreDeclarationAndLaterDefinition();
         }
         }
 
 
-        bool CheckHasStorageFlag(StorageFlag flag) const
-        {
-            return (m_typeQualifier & flag).AsBool();
-        }
-
-        bool HasStorageFlags() const
-        {
-            return !m_typeQualifier.IsEmpty();
-        }
-
         //! queries whether this function has a default value, registered for at least one of its parameters.
         //! queries whether this function has a default value, registered for at least one of its parameters.
         //! e.g such as in "f(int i = 2)"
         //! e.g such as in "f(int i = 2)"
         bool HasAnyDefaultParameterValue() const
         bool HasAnyDefaultParameterValue() const
@@ -680,12 +688,11 @@ namespace AZ::ShaderCompiler
         }
         }
 
 
         //! add a parameter
         //! add a parameter
-        void PushParameter(IdentifierUID varName, const ExtendedTypeInfo& typeInfo, TypeQualifier typeQualifier, AstUnnamedVarDecl* unnamedCtx)
+        void PushParameter(IdentifierUID varName, const ExtendedTypeInfo& typeInfo, AstUnnamedVarDecl* unnamedCtx)
         {
         {
             Parameter param;
             Parameter param;
             param.m_varId = varName;
             param.m_varId = varName;
             param.m_typeInfo = typeInfo;
             param.m_typeInfo = typeInfo;
-            param.m_typeQualifier = typeQualifier;
             param.m_semanticCtx = unnamedCtx->SemanticOpt;
             param.m_semanticCtx = unnamedCtx->SemanticOpt;
             param.m_arrayRankSpecifiers = unnamedCtx->ArrayRankSpecifiers;
             param.m_arrayRankSpecifiers = unnamedCtx->ArrayRankSpecifiers;
             param.m_defaultValueExpression = unnamedCtx->variableInitializer();
             param.m_defaultValueExpression = unnamedCtx->variableInitializer();
@@ -774,12 +781,10 @@ namespace AZ::ShaderCompiler
         bool                      m_isVirtual    = false;     //!< is a method from an interface
         bool                      m_isVirtual    = false;     //!< is a method from an interface
         vector< IdentifierUID >   m_overrides;                //!< list of implementing functions in child classes
         vector< IdentifierUID >   m_overrides;                //!< list of implementing functions in child classes
         optional< IdentifierUID > m_base;   //!< points to the overridden function in the base interface, if applies. only supports one base
         optional< IdentifierUID > m_base;   //!< points to the overridden function in the base interface, if applies. only supports one base
-        TypeQualifier             m_typeQualifier;
         struct Parameter
         struct Parameter
         {
         {
             IdentifierUID m_varId;
             IdentifierUID m_varId;
             ExtendedTypeInfo m_typeInfo;
             ExtendedTypeInfo m_typeInfo;
-            TypeQualifier m_typeQualifier;
             azslParser::HlslSemanticContext* m_semanticCtx = nullptr;
             azslParser::HlslSemanticContext* m_semanticCtx = nullptr;
             std::vector<azslParser::ArrayRankSpecifierContext*> m_arrayRankSpecifiers;
             std::vector<azslParser::ArrayRankSpecifierContext*> m_arrayRankSpecifiers;
             AstVarInitializer* m_defaultValueExpression = nullptr;
             AstVarInitializer* m_defaultValueExpression = nullptr;
@@ -996,7 +1001,7 @@ namespace AZ::ShaderCompiler
 
 
     // usings for data model. of particular relevance for the SymbolTable.
     // usings for data model. of particular relevance for the SymbolTable.
     using IdToKindMap            = unordered_map< IdentifierUID, KindInfo >;
     using IdToKindMap            = unordered_map< IdentifierUID, KindInfo >;
-    using IdAndKind              = IdToKindMap::value_type;  // nicely destructurable ! assign it like this: `auto& [uid, kind] = GetIdAndKind..`
+    using IdAndKind              = IdToKindMap::value_type;  // nicely destructurable! assign it like this: `auto& [uid, kind] = GetIdAndKind..`
 
 
 
 
     struct GetSubKindInfoTypeName_Visitor
     struct GetSubKindInfoTypeName_Visitor
@@ -1126,7 +1131,7 @@ namespace AZ::ShaderCompiler
     {
     {
         const string errorMessage = ConcatString(
         const string errorMessage = ConcatString(
             "redeclaration of ", symbolName, " with a different kind: ", Kind::ToStr(newKind),
             "redeclaration of ", symbolName, " with a different kind: ", Kind::ToStr(newKind),
-            " but was ", Kind::ToStr(kindInfo.GetKind()), GetFirstSeenLineMessage(kindInfo));
+            " but was ", Kind::ToStr(kindInfo.GetKind()), ", ", GetFirstSeenLineMessage(kindInfo));
         throw AzslcOrchestratorException(ORCHESTRATOR_ODR_VIOLATION, lineNumber, none, errorMessage);
         throw AzslcOrchestratorException(ORCHESTRATOR_ODR_VIOLATION, lineNumber, none, errorMessage);
     }
     }
 
 

+ 1 - 43
src/AzslcListener.cpp

@@ -31,7 +31,7 @@ namespace AZ::ShaderCompiler
         else if (auto* typeofExpression = As<azslParser::TypeofExpressionContext*>(ctx->parent))
         else if (auto* typeofExpression = As<azslParser::TypeofExpressionContext*>(ctx->parent))
         {
         {
             QualifiedName startupScope = typeofExpression->Expr ? m_ir->m_sema.TypeofExpr(typeofExpression->Expr)
             QualifiedName startupScope = typeofExpression->Expr ? m_ir->m_sema.TypeofExpr(typeofExpression->Expr)
-                                                                : m_ir->m_sema.TypeofExpr(typeofExpression->functionType());
+                                                                : m_ir->m_sema.TypeofExpr(typeofExpression->type());
             if (m_ir->m_sema.VerifyTypeIsScopeComposable(startupScope).first)
             if (m_ir->m_sema.VerifyTypeIsScopeComposable(startupScope).first)
             {
             {
                 m_ir->m_sema.RegisterSeenat(ctx, startupScope);
                 m_ir->m_sema.RegisterSeenat(ctx, startupScope);
@@ -96,48 +96,6 @@ namespace AZ::ShaderCompiler
         m_ir->m_scope.ExitScope(ctx->RightBrace()->getSourceInterval().b);
         m_ir->m_scope.ExitScope(ctx->RightBrace()->getSourceInterval().b);
     }
     }
 
 
-    void SemaCheckListener::enterConstantBufferTemplated(azslParser::ConstantBufferTemplatedContext* ctx)
-    {
-        // Diagnose undue usage: any scope/contexts are not OK for constant buffers (which are not view types).
-        // Originally the grammar was strictly enforcing at the syntax level that CB appears only in SRG scope.
-        // But for canonicalization with predefined types, now their presence will parse correctly at any place a type rule can appear.
-
-        // the current rule has only one parent: predefinedType, itself has only one parent: type
-        auto* typeNode = As<azslParser::TypeContext*>(ctx->parent->parent);
-        // but the type rule has many parents, exhaustively:
-        //   streamOutputPredefinedType, structuredBufferPredefinedType  (as generics)
-        //   constantBufferTemplated (yes ! because it's generic it has an unrestricted type rule -> risk of recursion. let's forbid it semantically)
-        // and
-        //  functionType         not tolerable to return a constantbuffer, except if parent rule is typealias
-        //  functionParam        not tolerable to pass as argument
-        //  typedefStatement     tolerable anywhere
-        //  CastExpression       let's go the lenient route and accept it whatever it will end up meaning
-        //  variableDeclaration  tolerable depending on scope (SRG: ok, other: no)
-
-        bool isFunctionTypeInTypeAlias = Is<azslParser::FunctionTypeContext>(typeNode->parent) && Is3ParentRuleOfType<azslParser::TypeAliasingDefinitionStatementContext*>(typeNode);
-        if (DynamicTypeIsAnyOf<azslParser::StreamOutputPredefinedTypeContext,
-                               azslParser::StructuredBufferPredefinedTypeContext,
-                               azslParser::ConstantBufferTemplatedContext,
-                               azslParser::FunctionTypeContext,
-                               azslParser::FunctionParamContext>(typeNode->parent)
-            && !isFunctionTypeInTypeAlias)
-        {
-            throw AzslcException(ADVANCED_SYNTAX_CONSTANT_BUFFER_RESTRICTION,
-                                 "Syntax",
-                                 ctx->start,
-                                 "impossible to use ConstantBuffer in that context");
-        }
-
-        bool immediateScopeIsSRG = m_ir->m_sema.GetCurrentScopeIdAndKind().second.GetKind() == Kind::ShaderResourceGroup;
-        if (Is<azslParser::VariableDeclarationContext>(typeNode->parent) && !immediateScopeIsSRG)
-        {   // note that it's only OK in immediate scope, not "as one of the parents, however distant".
-            throw AzslcException(ADVANCED_SYNTAX_CONSTANT_BUFFER_ONLY_IN_SRG,
-                                 "Syntax",
-                                 ctx->start,
-                                 "ConstantBuffer variable declarations may only appear in ShaderResourceGroup");
-        }
-    }
-
     void SemaCheckListener::enterSrgDefinition(azslParser::SrgDefinitionContext* ctx)
     void SemaCheckListener::enterSrgDefinition(azslParser::SrgDefinitionContext* ctx)
     {
     {
         m_ir->m_sema.RegisterSRG(ctx);
         m_ir->m_sema.RegisterSRG(ctx);

+ 0 - 1
src/AzslcListener.h

@@ -29,7 +29,6 @@ namespace AZ::ShaderCompiler
         void enterEnumeratorDeclarator(azslParser::EnumeratorDeclaratorContext* ctx) override;
         void enterEnumeratorDeclarator(azslParser::EnumeratorDeclaratorContext* ctx) override;
         void enterSamplerBodyDeclaration(azslParser::SamplerBodyDeclarationContext* ctx) override;
         void enterSamplerBodyDeclaration(azslParser::SamplerBodyDeclarationContext* ctx) override;
         void exitSamplerBodyDeclaration(azslParser::SamplerBodyDeclarationContext* ctx) override;
         void exitSamplerBodyDeclaration(azslParser::SamplerBodyDeclarationContext* ctx) override;
-        void enterConstantBufferTemplated(azslParser::ConstantBufferTemplatedContext* ctx) override;
         void enterSrgDefinition(azslParser::SrgDefinitionContext* ctx) override;
         void enterSrgDefinition(azslParser::SrgDefinitionContext* ctx) override;
         void exitSrgDefinition(azslParser::SrgDefinitionContext* ctx) override;
         void exitSrgDefinition(azslParser::SrgDefinitionContext* ctx) override;
         void enterSrgSemanticMemberDeclaration(azslParser::SrgSemanticMemberDeclarationContext* ctx) override;
         void enterSrgSemanticMemberDeclaration(azslParser::SrgSemanticMemberDeclarationContext* ctx) override;

+ 61 - 37
src/AzslcMain.cpp

@@ -21,9 +21,11 @@ namespace StdFs = std::filesystem;
 // Correspond to the supported version of the AZSL language.
 // Correspond to the supported version of the AZSL language.
 #define AZSLC_MAJOR "1"
 #define AZSLC_MAJOR "1"
 // For large features or milestones. Minor version allows for breaking changes. Existing tests can change.
 // For large features or milestones. Minor version allows for breaking changes. Existing tests can change.
-#define AZSLC_MINOR "8"   // introduction of class inheritance
+#define AZSLC_MINOR "8"   // last change: introduction of class inheritance
 // For small features or bug fixes. They cannot introduce breaking changes. Existing tests shouldn't change.
 // For small features or bug fixes. They cannot introduce breaking changes. Existing tests shouldn't change.
-#define AZSLC_REVISION "4"
+#define AZSLC_REVISION "8"  // last change: enhanced grammar compliance with HLSL & robust line directive support & refactor of type qualifiler into typeinfoext
+
+
 namespace AZ::ShaderCompiler
 namespace AZ::ShaderCompiler
 {
 {
     DiagnosticStream verboseCout;
     DiagnosticStream verboseCout;
@@ -32,15 +34,14 @@ namespace AZ::ShaderCompiler
 
 
     using MapOfStringViewToSetOfString = map<string_view, set<string>>;
     using MapOfStringViewToSetOfString = map<string_view, set<string>>;
 
 
-    // out argument: classifiedTokens
-    // filter: is a predicate for condition to check to pass registration
-    template <typename FilterFunction>
-    void ClassifyAllTokens(const azslLexer* lexer, MapOfStringViewToSetOfString& classifiedTokens, FilterFunction&& filter = nullptr)
+    template <typename TypeClassFilterPredicate = std::nullptr_t>
+    void VisitTokens(const antlr4::Recognizer* recognizer,
+                     MapOfStringViewToSetOfString& acceptedToken, set<string>& notTypes1,  // out
+                     TypeClassFilterPredicate tcFilter = nullptr)
     {
     {
         // loop over all keywords
         // loop over all keywords
-        const auto& vocabulary = lexer->getVocabulary();
+        const auto& vocabulary = recognizer->getVocabulary();
         size_t maxToken = vocabulary.getMaxTokenType();
         size_t maxToken = vocabulary.getMaxTokenType();
-        set<string> notTypes1;
         for (size_t ii = 0; ii < maxToken; ++ii)
         for (size_t ii = 0; ii < maxToken; ++ii)
         {
         {
             string token = vocabulary.getLiteralName(ii);
             string token = vocabulary.getLiteralName(ii);
@@ -49,9 +50,9 @@ namespace AZ::ShaderCompiler
             {
             {
                 TypeClass tc = AnalyzeTypeClass(TentativeName{token});
                 TypeClass tc = AnalyzeTypeClass(TentativeName{token});
                 bool accept = true;
                 bool accept = true;
-                if constexpr (!is_same_v<std::nullptr_t, std::remove_reference_t<decltype(filter)>>)
+                if constexpr (!is_same_v<std::nullptr_t, std::remove_reference_t<decltype(tcFilter)>>)
                 {
                 {
-                    accept = filter(tc);
+                    accept = tcFilter(tc);
                 }
                 }
 
 
                 if (tc == TypeClass::IsNotType)
                 if (tc == TypeClass::IsNotType)
@@ -61,11 +62,19 @@ namespace AZ::ShaderCompiler
 
 
                 if (accept)
                 if (accept)
                 {
                 {
-                    classifiedTokens[TypeClass::ToStr(tc)].emplace(std::move(token));
+                    acceptedToken[TypeClass::ToStr(tc)].emplace(std::move(token));
                 }
                 }
             }
             }
         }
         }
+    }
 
 
+    // out argument: classifiedTokens
+    // filter: is a predicate for condition to check to pass registration
+    template <typename FilterFunction>
+    void ClassifyAllTokens(const azslLexer* lexer, MapOfStringViewToSetOfString& classifiedTokens, FilterFunction filter)
+    {
+        set<string> notTypes1;
+        VisitTokens(lexer, classifiedTokens, notTypes1, filter);
         // now. because of names such as StructuredBuffer or matrix, need to have a generic appendix to mean something,
         // now. because of names such as StructuredBuffer or matrix, need to have a generic appendix to mean something,
         // they will be classified as IsNotType. So we need to re-attempt analysis by appending something parseable.
         // they will be classified as IsNotType. So we need to re-attempt analysis by appending something parseable.
 
 
@@ -130,6 +139,17 @@ namespace AZ::ShaderCompiler
         } // end for
         } // end for
     }
     }
 
 
+    bool IsKeyword(const antlr4::Recognizer* r, antlr4::Token* token)
+    {
+        MapOfStringViewToSetOfString byTypeClass;
+        set<string> notTypes;
+        VisitTokens(r, byTypeClass, notTypes);
+        bool notType = notTypes.find(token->getText()) != notTypes.end();
+        bool notIdentifier = r->getVocabulary().getSymbolicName(token->getType()) != "Identifier";
+        bool firstIsalpha(isalpha(token->getText()[0]));
+        return notType && notIdentifier && firstIsalpha;
+    }
+
     void DumpClassifiedTokensToYaml(const MapOfStringViewToSetOfString& classifiedTokens)
     void DumpClassifiedTokensToYaml(const MapOfStringViewToSetOfString& classifiedTokens)
     {
     {
         for (const auto& [category, tokens] : classifiedTokens)
         for (const auto& [category, tokens] : classifiedTokens)
@@ -151,9 +171,9 @@ namespace AZ::ShaderCompiler
     }
     }
 
 
     //! iterates on tokens and build the line number mapping (from preprocessor line directives)
     //! iterates on tokens and build the line number mapping (from preprocessor line directives)
-    void ConstructLineMap(vector<std::unique_ptr<Token>>* allTokens, IntermediateRepresentation* irOut)
+    void ConstructLineMap(vector<std::unique_ptr<Token>>* allTokens, PreprocessorLineDirectiveFinder* lineFinder)
     {
     {
-        string lastNonEmptyFileName = AzslcException::s_currentSourceFileName;
+        string lastNonEmptyFileName = lineFinder->m_physicalSourceFileName;
         for (auto& token : *allTokens) // auto& because each element is a unique_ptr we can't copy
         for (auto& token : *allTokens) // auto& because each element is a unique_ptr we can't copy
         {
         {
             if (token->getType() == azslLexer::LineDirective)
             if (token->getType() == azslLexer::LineDirective)
@@ -183,14 +203,13 @@ namespace AZ::ShaderCompiler
                 {
                 {
                     lastNonEmptyFileName = directiveInfo.m_containingFilename;
                     lastNonEmptyFileName = directiveInfo.m_containingFilename;
                 }
                 }
-                irOut->m_lineMap[token->getLine()] = directiveInfo;
+                lineFinder->PushLineDirective(directiveInfo);
             }
             }
         }
         }
-        if (irOut->m_lineMap.find(1) == irOut->m_lineMap.end())
+        if (lineFinder->m_lineMap.find(1) == lineFinder->m_lineMap.end())
         {
         {
-            // if we have no line directives, add one that can be found by lower_bound
-            LineDirectiveInfo catchAllDirective{1, 1, AzslcException::s_currentSourceFileName};
-            irOut->m_lineMap[1] = catchAllDirective;
+            // if we have no line directives on line 1, add one before the file's first line (at 0), that can always be found by Infimum
+            lineFinder->PushLineDirective({0, 1, lineFinder->m_physicalSourceFileName});
         }
         }
     }
     }
 }
 }
@@ -466,7 +485,10 @@ int main(int argc, const char* argv[])
         }
         }
 
 
         const string inputFileName = useStdin ? "" : inputFile;
         const string inputFileName = useStdin ? "" : inputFile;
-        AzslcException::s_currentSourceFileName = useStdin ? "stdin" : inputFile;
+        PreprocessorLineDirectiveFinder lineFinder;
+        lineFinder.m_physicalSourceFileName = useStdin ? "stdin" : inputFile;
+        // setup the line finder address on the exception system so that errors are canonically mutated to "virtual line space"
+        AzslcException::s_lineFinder = &lineFinder;
 
 
         bool useOutputFile = !output.empty();
         bool useOutputFile = !output.empty();
         const string outputFileName = output;
         const string outputFileName = output;
@@ -480,14 +502,21 @@ int main(int argc, const char* argv[])
         {
         {
             throw std::runtime_error("syntax errors present");
             throw std::runtime_error("syntax errors present");
         }
         }
-        ConstructLineMap(&allTokens, &ir);
+        ConstructLineMap(&allTokens, &lineFinder);
         lexer.reset();
         lexer.reset();
-        auto azslParserEventListener = AzslParserEventListener(ir);
+        AzslParserEventListener azslParserEventListener;
         azslParser parser(&tokens);
         azslParser parser(&tokens);
         parser.removeErrorListeners();
         parser.removeErrorListeners();
+        azslParserEventListener.m_isKeywordPredicate = IsKeyword;
         parser.addErrorListener(&azslParserEventListener);
         parser.addErrorListener(&azslParserEventListener);
         tree::ParseTree *tree = parser.compilationUnit();
         tree::ParseTree *tree = parser.compilationUnit();
 
 
+        if (ast)
+        {
+            PrintAst(tree, parser);
+            syntax = true; // ast print is a syntax only build.
+        }
+
         if (parser.getNumberOfSyntaxErrors() > 0)
         if (parser.getNumberOfSyntaxErrors() > 0)
         {
         {
             throw std::runtime_error("grammatic errors present");
             throw std::runtime_error("grammatic errors present");
@@ -504,7 +533,7 @@ int main(int argc, const char* argv[])
                 ir.m_metaData.m_insource = StdFs::absolute(inSource).lexically_normal().generic_string();
                 ir.m_metaData.m_insource = StdFs::absolute(inSource).lexically_normal().generic_string();
             }
             }
             tree::ParseTreeWalker walker;
             tree::ParseTreeWalker walker;
-            Texture2DMSto2DCodeMutator texture2DMSto2DCodeMutator(&ir);
+            Texture2DMSto2DCodeMutator texture2DMSto2DCodeMutator(&ir, &tokens);
             SemaCheckListener semanticListener{&ir};
             SemaCheckListener semanticListener{&ir};
             warningCout.m_onErrorCallback = [](string_view message) {
             warningCout.m_onErrorCallback = [](string_view message) {
                 throw AzslcException{WX_WARNINGS_AS_ERRORS, "as-error", string{message}};
                 throw AzslcException{WX_WARNINGS_AS_ERRORS, "as-error", string{message}};
@@ -566,12 +595,12 @@ int main(int argc, const char* argv[])
             }
             }
             else if (Zpr)
             else if (Zpr)
             {
             {
-                emitOptions.m_emitRowMajor = true;
+                emitOptions.m_forceMatrixRowMajor = true;
                 emitOptions.m_forceEmitMajor = true;
                 emitOptions.m_forceEmitMajor = true;
             }
             }
             else if (Zpc)
             else if (Zpc)
             {
             {
-                emitOptions.m_emitRowMajor = false; // Default
+                emitOptions.m_forceMatrixRowMajor = false; // Default
                 emitOptions.m_forceEmitMajor = true;
                 emitOptions.m_forceEmitMajor = true;
             }
             }
 
 
@@ -597,10 +626,10 @@ int main(int argc, const char* argv[])
             MiddleEndConfiguration middleEndConfigration{emitOptions.m_rootConstantsMaxSize,
             MiddleEndConfiguration middleEndConfigration{emitOptions.m_rootConstantsMaxSize,
                                                          emitOptions.m_packConstantBuffers,
                                                          emitOptions.m_packConstantBuffers,
                                                          emitOptions.m_packDataBuffers,
                                                          emitOptions.m_packDataBuffers,
-                                                         emitOptions.m_emitRowMajor,
+                                                         emitOptions.m_forceMatrixRowMajor,
                                                          emitOptions.m_padRootConstantCB,
                                                          emitOptions.m_padRootConstantCB,
                                                          emitOptions.m_skipAlignmentValidation};
                                                          emitOptions.m_skipAlignmentValidation};
-            ir.MiddleEnd(middleEndConfigration);
+            ir.MiddleEnd(middleEndConfigration, &lineFinder);
             if (noMS)
             if (noMS)
             {
             {
                 texture2DMSto2DCodeMutator.RunMiddleEndMutations();
                 texture2DMSto2DCodeMutator.RunMiddleEndMutations();
@@ -626,11 +655,6 @@ int main(int argc, const char* argv[])
                 DumpSymbols(ir);
                 DumpSymbols(ir);
                 doEmission = false;
                 doEmission = false;
             }
             }
-            else if (ast)
-            {
-                PrintAst(tree, parser);
-                doEmission = false;
-            }
             else if (!visitName.empty())
             else if (!visitName.empty())
             {
             {
                 using RE = RelationshipExtent;
                 using RE = RelationshipExtent;
@@ -697,17 +721,17 @@ int main(int argc, const char* argv[])
 
 
                 if (full)
                 if (full)
                 { // Combine the default emission and the ia, om, srg, options, bindingdep commands
                 { // Combine the default emission and the ia, om, srg, options, bindingdep commands
-                    CodeEmitter emitter{&ir, &tokens, out};
+                    CodeEmitter emitter{&ir, &tokens, out, &lineFinder};
                     if (noMS)
                     if (noMS)
                     {
                     {
                         emitter.SetCodeMutator(&texture2DMSto2DCodeMutator);
                         emitter.SetCodeMutator(&texture2DMSto2DCodeMutator);
                     }
                     }
-                    out << "// HLSL emission by " << versionString << "\n";
+                    emitter << "// HLSL emission by " << versionString << "\n";
                     emitter.Run(emitOptions);
                     emitter.Run(emitOptions);
 
 
                     prepareOutputAndCall("ia", [&](CodeReflection& r) { r.DumpShaderEntries(); });
                     prepareOutputAndCall("ia", [&](CodeReflection& r) { r.DumpShaderEntries(); });
                     prepareOutputAndCall("om", [&](CodeReflection& r) { r.DumpOutputMergerLayout(); });
                     prepareOutputAndCall("om", [&](CodeReflection& r) { r.DumpOutputMergerLayout(); });
-                    prepareOutputAndCall("srg", [&](CodeReflection& r) { r.DumpSRGLayout(emitOptions); });
+                    prepareOutputAndCall("srg", [&](CodeReflection& r) { r.DumpSRGLayout(emitOptions, &lineFinder); });
                     prepareOutputAndCall("options", [&](CodeReflection& r) { r.DumpVariantList(emitOptions); });
                     prepareOutputAndCall("options", [&](CodeReflection& r) { r.DumpVariantList(emitOptions); });
                     prepareOutputAndCall("bindingdep", [&](CodeReflection& r) { r.DumpResourceBindingDependencies(emitOptions); });
                     prepareOutputAndCall("bindingdep", [&](CodeReflection& r) { r.DumpResourceBindingDependencies(emitOptions); });
                 }
                 }
@@ -721,7 +745,7 @@ int main(int argc, const char* argv[])
                 }
                 }
                 else if (srg)
                 else if (srg)
                 { // Reflect the Shader Resource Groups layout
                 { // Reflect the Shader Resource Groups layout
-                    reflecter.DumpSRGLayout(emitOptions);
+                    reflecter.DumpSRGLayout(emitOptions, &lineFinder);
                 }
                 }
                 else if (options)
                 else if (options)
                 { // Reflect the list of available variant options for this shader
                 { // Reflect the list of available variant options for this shader
@@ -733,12 +757,12 @@ int main(int argc, const char* argv[])
                 }
                 }
                 else
                 else
                 { // Emit the shader source code
                 { // Emit the shader source code
-                    CodeEmitter emitter{&ir, &tokens, out};
+                    CodeEmitter emitter{&ir, &tokens, out, &lineFinder};
                     if (noMS)
                     if (noMS)
                     {
                     {
                         emitter.SetCodeMutator(&texture2DMSto2DCodeMutator);
                         emitter.SetCodeMutator(&texture2DMSto2DCodeMutator);
                     }
                     }
-                    out << "// HLSL emission by " << versionString << "\n";
+                    emitter << "// HLSL emission by " << versionString << "\n";
                     emitter.Run(emitOptions);
                     emitter.Run(emitOptions);
                 }
                 }
             }
             }

+ 15 - 13
src/AzslcPredefinedTypes.h

@@ -1,10 +1,10 @@
 /*
 /*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- * 
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
+* Copyright (c) Contributors to the Open 3D Engine Project.
+* For complete copyright and license terms please see the LICENSE at the root of this distribution.
+*
+* SPDX-License-Identifier: Apache-2.0 OR MIT
+*
+*/
 #pragma once
 #pragma once
 
 
 // THIS FILE IS AUTO-GENERATED BY exportKeywords.py
 // THIS FILE IS AUTO-GENERATED BY exportKeywords.py
@@ -165,25 +165,27 @@ static constexpr std::array<const char*, 2> OtherPredefined = {
 static constexpr std::array<const char*, 1> OtherViewBufferType = {
 static constexpr std::array<const char*, 1> OtherViewBufferType = {
 "RaytracingAccelerationStructure"};
 "RaytracingAccelerationStructure"};
 
 
-static constexpr std::array<const char*, 4> Sampler = {
+static constexpr std::array<const char*, 5> Sampler = {
 "Sampler",
 "Sampler",
 "SamplerComparisonState",
 "SamplerComparisonState",
 "SamplerState",
 "SamplerState",
-"sampler"};
+"sampler",
+"sampler_state"};
 
 
-static constexpr std::array<const char*, 12> Scalar = {
+static constexpr std::array<const char*, 13> Scalar = {
 "bool",
 "bool",
 "double",
 "double",
 "dword",
 "dword",
 "float",
 "float",
 "half",
 "half",
 "int",
 "int",
+"int16_t",
 "int32_t",
 "int32_t",
 "int64_t",
 "int64_t",
 "uint",
 "uint",
+"uint16_t",
 "uint32_t",
 "uint32_t",
-"uint64_t",
-"unsigned int"};
+"uint64_t"};
 
 
 static constexpr std::array<const char*, 3> StreamOutput = {
 static constexpr std::array<const char*, 3> StreamOutput = {
 "LineStream",
 "LineStream",
@@ -262,8 +264,8 @@ static constexpr auto All = std::make_tuple(Bag<3>{"Buffer", Buffer},
                                             Bag<2>{"MultisampledTexture", MultisampledTexture},
                                             Bag<2>{"MultisampledTexture", MultisampledTexture},
                                             Bag<2>{"OtherPredefined", OtherPredefined},
                                             Bag<2>{"OtherPredefined", OtherPredefined},
                                             Bag<1>{"OtherViewBufferType", OtherViewBufferType},
                                             Bag<1>{"OtherViewBufferType", OtherViewBufferType},
-                                            Bag<4>{"Sampler", Sampler},
-                                            Bag<12>{"Scalar", Scalar},
+                                            Bag<5>{"Sampler", Sampler},
+                                            Bag<13>{"Scalar", Scalar},
                                             Bag<3>{"StreamOutput", StreamOutput},
                                             Bag<3>{"StreamOutput", StreamOutput},
                                             Bag<5>{"StructuredBuffer", StructuredBuffer},
                                             Bag<5>{"StructuredBuffer", StructuredBuffer},
                                             Bag<19>{"Texture", Texture},
                                             Bag<19>{"Texture", Texture},

+ 9 - 14
src/AzslcReflection.cpp

@@ -21,7 +21,8 @@ namespace AZ::ShaderCompiler
     Json::Value ToJson(const OStreamable& streamableObj)
     Json::Value ToJson(const OStreamable& streamableObj)
     {
     {
         std::ostringstream baseStr;
         std::ostringstream baseStr;
-        baseStr << streamableObj;
+        Streamable&& s{MakeOStreamStreamable{baseStr}};
+        s << streamableObj;
         return baseStr.str();
         return baseStr.str();
     }
     }
 
 
@@ -497,7 +498,7 @@ namespace AZ::ShaderCompiler
                 IsProductType(varClass) ? "Struct"    : TypeClass::ToStr(varClass).data();
                 IsProductType(varClass) ? "Struct"    : TypeClass::ToStr(varClass).data();
             memberLayout["typeName"]         = varInfo.GetTypeId().m_name;         
             memberLayout["typeName"]         = varInfo.GetTypeId().m_name;         
 
 
-            size = varInfo.m_typeInfoExt.GetTotalSize(layoutPacking, options.m_emitRowMajor);
+            size = varInfo.m_typeInfoExt.GetTotalSize(layoutPacking, options.m_forceMatrixRowMajor);
             auto startAt = offset;
             auto startAt = offset;
 
 
             // Alignment start
             // Alignment start
@@ -583,7 +584,7 @@ namespace AZ::ShaderCompiler
             else if (varInfo.m_typeInfoExt.IsArray())
             else if (varInfo.m_typeInfoExt.IsArray())
             {
             {
                 // Get the size of one element from total size
                 // Get the size of one element from total size
-                size = varInfo.m_typeInfoExt.GetSingleElementSize(layoutPacking, options.m_emitRowMajor);
+                size = varInfo.m_typeInfoExt.GetSingleElementSize(layoutPacking, options.m_forceMatrixRowMajor);
             }
             }
             else if (varInfo.GetTypeClass() == TypeClass::Enum)
             else if (varInfo.GetTypeClass() == TypeClass::Enum)
             {
             {
@@ -640,7 +641,7 @@ namespace AZ::ShaderCompiler
         output["space-merged"] = bindInfo.m_registerBinding.m_pair[BindingPair::Set::Merged].m_logicalSpace;
         output["space-merged"] = bindInfo.m_registerBinding.m_pair[BindingPair::Set::Merged].m_logicalSpace;
     }
     }
 
 
-    void CodeReflection::DumpSRGLayout(const Options& options) const
+    void CodeReflection::DumpSRGLayout(const Options& options, PreprocessorLineDirectiveFinder* lineFinder) const
     {
     {
         uint32_t numOf32bitConst = GetNumberOf32BitConstants(options, m_ir->m_rootConstantStructUID);
         uint32_t numOf32bitConst = GetNumberOf32BitConstants(options, m_ir->m_rootConstantStructUID);
         RootSigDesc rootSig = BuildSignatureDescription(options, numOf32bitConst);
         RootSigDesc rootSig = BuildSignatureDescription(options, numOf32bitConst);
@@ -658,16 +659,10 @@ namespace AZ::ShaderCompiler
             srgLayout["id"] = srgInfo->m_declNode->Name->getText();
             srgLayout["id"] = srgInfo->m_declNode->Name->getText();
 
 
             // Try to locate the original filename where this SRG is declared
             // Try to locate the original filename where this SRG is declared
-            auto lineBefore = m_ir->m_lineMap.lower_bound(srgInfo->m_declNode->getStart()->getLine());
-            if (lineBefore != m_ir->m_lineMap.begin() && (lineBefore != m_ir->m_lineMap.end() || m_ir->m_lineMap.size() > 0))
-            {
-                lineBefore--;
-                const string& containing = lineBefore->second.m_containingFilename;
-                srgLayout["originalFileName"]    = StdFs::absolute(containing).lexically_normal().generic_string();
-                srgLayout["originalLineNumber"]  = static_cast<Json::Value::UInt64>(lineBefore->second.m_forcedLineNumber); // TODO: fix according to following concept:
-                /*auto nearestLineDirective = lineBefore->second.m_forcedLineNumber;
-                srgLayout["originalLineNumber"]  =  CurrentLine - nearestLineDirective;*/
-            }
+            size_t physical = srgInfo->m_declNode->getStart()->getLine();
+            srgLayout["originalFileName"]   = StdFs::absolute(lineFinder->GetVirtualFileName(physical)).lexically_normal().generic_string();
+            srgLayout["originalLineNumber"] = lineFinder->GetVirtualLineNumber(physical);
+
             auto semantic = m_ir->GetSymbolSubAs<ClassInfo>(srgInfo->m_semantic->GetName())->Get<SRGSemanticInfo>();
             auto semantic = m_ir->GetSymbolSubAs<ClassInfo>(srgInfo->m_semantic->GetName())->Get<SRGSemanticInfo>();
 
 
             srgLayout["bindingSlot"] = *semantic->m_frequencyId; // Semantic check has asserted that we have it, so we can dereference here.
             srgLayout["bindingSlot"] = *semantic->m_frequencyId; // Semantic check has asserted that we have it, so we can dereference here.

+ 7 - 2
src/AzslcReflection.h

@@ -13,7 +13,10 @@ namespace AZ::ShaderCompiler
 {
 {
     struct CodeReflection : Backend
     struct CodeReflection : Backend
     {
     {
-        using Backend::Backend;
+        CodeReflection(IntermediateRepresentation* ir, TokenStream* tokens, std::ostream& out)
+            : Backend(ir, tokens),
+              m_out(out)
+        {}
 
 
         // bring all non code emitting features here.
         // bring all non code emitting features here.
 
 
@@ -31,7 +34,7 @@ namespace AZ::ShaderCompiler
 
 
         //! Reflect resource groups layout
         //! Reflect resource groups layout
         //! @param options  user configuration parsed from command line
         //! @param options  user configuration parsed from command line
-        void DumpSRGLayout(const Options& options) const;
+        void DumpSRGLayout(const Options& options, PreprocessorLineDirectiveFinder* lineFinder) const;
 
 
         //! Reflect shader options
         //! Reflect shader options
         //! @param options  user configuration parsed from command line
         //! @param options  user configuration parsed from command line
@@ -71,5 +74,7 @@ namespace AZ::ShaderCompiler
         bool IsNonOverloaded(const IdentifierUID& uid) const;
         bool IsNonOverloaded(const IdentifierUID& uid) const;
 
 
         bool IsPotentialEntryPoint(const IdentifierUID& uid) const;
         bool IsPotentialEntryPoint(const IdentifierUID& uid) const;
+
+        std::ostream& m_out;
     };
     };
 }
 }

+ 196 - 192
src/AzslcSemanticOrchestrator.cpp

@@ -1,7 +1,7 @@
 /*
 /*
  * Copyright (c) Contributors to the Open 3D Engine Project.
  * Copyright (c) Contributors to the Open 3D Engine Project.
  * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- * 
+ *
  * SPDX-License-Identifier: Apache-2.0 OR MIT
  * SPDX-License-Identifier: Apache-2.0 OR MIT
  *
  *
  */
  */
@@ -12,49 +12,62 @@ namespace AZ::ShaderCompiler
 {
 {
     namespace  // utility helpers to raise the abstraction level of SemanticOrchestrator's methods.
     namespace  // utility helpers to raise the abstraction level of SemanticOrchestrator's methods.
     {
     {
-        Packing::MatrixMajor ExtractMatrixMajorness(VarInfo& varInfo)
+        Packing::MatrixMajor ExtractMatrixMajorness(TypeQualifiers variableQualificationFlags)
         {
         {
             Packing::MatrixMajor major = Packing::MatrixMajor::Default;
             Packing::MatrixMajor major = Packing::MatrixMajor::Default;
-            if (varInfo.CheckHasStorageFlag(StorageFlag::RowMajor))
+            if (TypeHasStorageFlag(variableQualificationFlags, StorageFlag::RowMajor))
             {
             {
                 major = Packing::MatrixMajor::RowMajor;
                 major = Packing::MatrixMajor::RowMajor;
             }
             }
-            else if (varInfo.CheckHasStorageFlag(StorageFlag::ColumnMajor))
+            else if (TypeHasStorageFlag(variableQualificationFlags, StorageFlag::ColumnMajor))
             {
             {
                 major = Packing::MatrixMajor::ColumnMajor;
                 major = Packing::MatrixMajor::ColumnMajor;
             }
             }
             return major;
             return major;
         }
         }
 
 
-        TypeQualifier ExtractTypeQualifiers(azslParser::StorageFlagsContext* flags, vector<string>* unknownQualifiers = nullptr)
+        TypeQualifiers ExtractTypeQualifiers(azslParser::StorageFlagsContext* flags)
         {
         {
-            TypeQualifier qualifiers;
+            TypeQualifiers qualifiers;
             for (auto* flagCtx : flags->storageFlag())
             for (auto* flagCtx : flags->storageFlag())
             {
             {
-                const auto& newFlag = AsFlag(flagCtx);
-                qualifiers |= newFlag;
-                if (newFlag == StorageFlag::Unknown && unknownQualifiers)
+                StorageFlag newFlag = AsFlag(flagCtx);
+                qualifiers.m_flag |= newFlag;
+                if (newFlag == StorageFlag::Other)
                 {
                 {
-                    unknownQualifiers->push_back(flagCtx->getText());
+                    qualifiers.m_others.push_back(flagCtx->getText());
                 }
                 }
             }
             }
             return qualifiers;
             return qualifiers;
         }
         }
 
 
-        TypeQualifier ExtractTypeQualifiers(AstUnnamedVarDecl* ctx, vector<string>* unknownQualifiers = nullptr)
+        TypeQualifiers ExtractTypeQualifiers(AstType* ctx)
+        {
+            return ctx->storageFlags() ? ExtractTypeQualifiers(ctx->storageFlags()) : TypeQualifiers{};
+        }
+
+        TypeQualifiers ExtractTypeQualifiers(AstUnnamedVarDecl* ctx)
+        {
+            azslParser::StorageFlagsContext* flags = ExtractStorageFlagsFromUnnamedVariableDeclarator(ctx);
+            return flags ? ExtractTypeQualifiers(flags) : TypeQualifiers{};
+        }
+
+        void CheckFunctionReturnTypeModifierNotOptionNorRootconstant(const TypeQualifiers& qualifier, size_t line)
         {
         {
-            azslParser::StorageFlagsContext* flags = ExtractStorageFlagsFromVariableDeclarator(ctx);
-            return flags ? ExtractTypeQualifiers(flags, unknownQualifiers) : TypeQualifier{};
+            auto ngFlags = Modifiers{StorageFlag::Option} | StorageFlag::Rootconstant;
+            if (qualifier.m_flag & ngFlags)
+            {
+                throw AzslcOrchestratorException{ORCHESTRATOR_DISALLOWED_FUNCTION_MODIFIER, line,
+                    none, " Functions can't have option or rootconstant qualified return types."};
+            }
         }
         }
     }
     }
 
 
-    SemanticOrchestrator::SemanticOrchestrator(SymbolAggregator* sema, ScopeTracker* scope, azslLexer* lexer,
-        PreprocessorLineDirectiveFinder* preprocessorLineDirectiveFinder /*= nullptr*/)
+    SemanticOrchestrator::SemanticOrchestrator(SymbolAggregator* sema, ScopeTracker* scope, azslLexer* lexer)
         : m_symbols{ sema },
         : m_symbols{ sema },
           m_scope{ scope },
           m_scope{ scope },
           m_lexer{ lexer },
           m_lexer{ lexer },
-          m_anonymousCounter{ 0 },
-          m_preprocessorLineDirectiveFinder { preprocessorLineDirectiveFinder }
+          m_anonymousCounter{ 0 }
     {
     {
         assert(sema != nullptr && scope != nullptr);
         assert(sema != nullptr && scope != nullptr);
     }
     }
@@ -96,22 +109,22 @@ namespace AZ::ShaderCompiler
         IdAndKind* scopeIdKind = LookupSymbol(extracted.m_core.m_name);
         IdAndKind* scopeIdKind = LookupSymbol(extracted.m_core.m_name);
         if (!scopeIdKind)
         if (!scopeIdKind)
         {
         {
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_SCOPE_NOT_FOUND,
+            throw AzslcOrchestratorException{ORCHESTRATOR_SCOPE_NOT_FOUND,
                 ctx->start, ConcatString("scope ", extracted.m_core.m_name,
                 ctx->start, ConcatString("scope ", extracted.m_core.m_name,
-                    " for method ", uqName, " not found"));
+                                         " for method ", uqName, " not found")};
         }
         }
         auto [scopeUid, scopeKind] = *scopeIdKind;
         auto [scopeUid, scopeKind] = *scopeIdKind;
         if (!scopeKind.IsKindOneOf(Kind::Class, Kind::ShaderResourceGroup))
         if (!scopeKind.IsKindOneOf(Kind::Class, Kind::ShaderResourceGroup))
         {
         {
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_DEPORTED_METHOD_DEFINITION,
-                ctx->start, "Only class and SRG may have deported method definitions");
+            throw AzslcOrchestratorException{ORCHESTRATOR_DEPORTED_METHOD_DEFINITION,
+                ctx->start, "Only class and SRG may have deported method definitions"};
         }
         }
         IdentifierUID holdingScope = GetCurrentScopeIdAndKind().first;
         IdentifierUID holdingScope = GetCurrentScopeIdAndKind().first;
         if (! (holdingScope.m_name == "/" || holdingScope == scopeUid))
         if (! (holdingScope.m_name == "/" || holdingScope == scopeUid))
         {
         {
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_DEFINITION_FOREIGN_SCOPE,
+            throw AzslcOrchestratorException{ORCHESTRATOR_DEFINITION_FOREIGN_SCOPE,
                 ctx->start, ConcatString("definition of (", uqName,
                 ctx->start, ConcatString("definition of (", uqName,
-            ") method of ", scopeUid.m_name, " in foreign scope ", holdingScope.m_name, " is forbidden"));
+                                         ") method of ", scopeUid.m_name, " in foreign scope ", holdingScope.m_name, " is forbidden")};
         }
         }
         // between function name and the entrance into the function scope, the class scope is briefly activated.
         // between function name and the entrance into the function scope, the class scope is briefly activated.
         // this way, parameters may be specified as if in the scope of their holding function. e.g `ObjectOfCurrentScope MyClass::MyMethod(ObjectOfMyClass)`
         // this way, parameters may be specified as if in the scope of their holding function. e.g `ObjectOfCurrentScope MyClass::MyMethod(ObjectOfMyClass)`
@@ -128,19 +141,19 @@ namespace AZ::ShaderCompiler
         // for now, it will be forbidden to inject methods in classes from outside.
         // for now, it will be forbidden to inject methods in classes from outside.
         if (!optionalIdentifier)
         if (!optionalIdentifier)
         {
         {
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_NO_DECLERATION, ctx->start,
-                ConcatString((scopeIsClass ? "class " : "SRG "), scopeUid.m_name, " doesn't have a declaration for ", decoratedUqName));
+            throw AzslcOrchestratorException{ORCHESTRATOR_NO_DECLERATION, ctx->start,
+                ConcatString((scopeIsClass ? "class " : "SRG "), scopeUid.m_name, " doesn't have a declaration for ", decoratedUqName)};
         }
         }
         // verify also the kind of the member
         // verify also the kind of the member
         auto* originalDeclarationAsFunc = m_symbols->GetAsSub<FunctionInfo>(*optionalIdentifier);
         auto* originalDeclarationAsFunc = m_symbols->GetAsSub<FunctionInfo>(*optionalIdentifier);
         if (!originalDeclarationAsFunc)
         if (!originalDeclarationAsFunc)
         {
         {
             Kind realKindOfOriginallyDeclaredMember = m_symbols->GetIdAndKindInfo(optionalIdentifier->GetName())->second.GetKind();
             Kind realKindOfOriginallyDeclaredMember = m_symbols->GetIdAndKindInfo(optionalIdentifier->GetName())->second.GetKind();
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_UNEXPECTED_KIND,
+            throw AzslcOrchestratorException{ORCHESTRATOR_UNEXPECTED_KIND,
                 ctx->start, ConcatString((scopeIsClass ? "class " : "SRG "), scopeUid.m_name,
                 ctx->start, ConcatString((scopeIsClass ? "class " : "SRG "), scopeUid.m_name,
-                     " holds a member ", optionalIdentifier->m_name,
-                     " but it is of kind ", string{ Kind::ToStr(realKindOfOriginallyDeclaredMember) },
-                     " instead of expected ", string{ Kind::ToStr(Kind::Function) }));
+                                         " holds a member ", optionalIdentifier->m_name,
+                                         " but it is of kind ", string{ Kind::ToStr(realKindOfOriginallyDeclaredMember) },
+                                         " instead of expected ", string{ Kind::ToStr(Kind::Function) })};
         }
         }
         // now we're good.
         // now we're good.
         // merge the type and the method name and call the classic register. RegisterFunction is going to re-run the decoration so just pass the naked name.
         // merge the type and the method name and call the classic register. RegisterFunction is going to re-run the decoration so just pass the naked name.
@@ -199,13 +212,13 @@ namespace AZ::ShaderCompiler
         {
         {
             if (isScopeCompositeType)
             if (isScopeCompositeType)
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_OVERLY_QUALIFIED, ctx->Name,
-                    ConcatString(ctx->getText(), " is overly qualified. In-class declarations spawn new identifiers, and don't have to refer to existing symbols."));
+                throw AzslcOrchestratorException{ORCHESTRATOR_OVERLY_QUALIFIED, ctx->Name,
+                    ConcatString(ctx->getText(), " is overly qualified. In-class declarations spawn new identifiers, and don't have to refer to existing symbols.")};
             }
             }
             else
             else
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_DEPORTED_METHOD, ctx->Name,
-                    ConcatString(ctx->getText(), "is a deported method declaration, which is considered ill-formed. You can make it a definition (with a body), or delete that statement."));
+                throw AzslcOrchestratorException{ORCHESTRATOR_DEPORTED_METHOD, ctx->Name,
+                    ConcatString(ctx->getText(), "is a deported method declaration, which is considered ill-formed. You can make it a definition (with a body), or delete that statement.")};
             }
             }
         }
         }
         IdAndKind* symbol = m_symbols->GetIdAndKindInfo(decoratedName);
         IdAndKind* symbol = m_symbols->GetIdAndKindInfo(decoratedName);
@@ -235,9 +248,9 @@ namespace AZ::ShaderCompiler
 
 
             if (alreadyDefined)  // verify that it's not a second definition
             if (alreadyDefined)  // verify that it's not a second definition
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_FUNCTION_ALREADY_DEFINED, ctx->Name,
+                throw AzslcOrchestratorException{ORCHESTRATOR_FUNCTION_ALREADY_DEFINED, ctx->Name,
                     ConcatString("One Definition Rule: function ", symbol->first.m_name,
                     ConcatString("One Definition Rule: function ", symbol->first.m_name,
-                         " is already defined ", GetFirstSeenLineMessage(symbol->second)));
+                                 " is already defined ", GetFirstSeenLineMessage(symbol->second))};
             }
             }
 
 
             // this function was already declared before. (like a forward)
             // this function was already declared before. (like a forward)
@@ -273,10 +286,6 @@ namespace AZ::ShaderCompiler
         // decompose the Id and Kind of this function
         // decompose the Id and Kind of this function
         auto& [newUID, newKind] = *symbol;
         auto& [newUID, newKind] = *symbol;
 
 
-        // Add storage flags
-        funcInfo->m_typeQualifier |= ExtractTypeQualifiers(ctx->storageFlags());
-        CheckQualifersAreOnlyInlineOrStatic(funcInfo->m_typeQualifier, line); // throws a diagnostic if needed
-
         // keep track of original AST node
         // keep track of original AST node
         if (statementGenre == AsFunc::Definition)
         if (statementGenre == AsFunc::Definition)
         {
         {
@@ -289,19 +298,22 @@ namespace AZ::ShaderCompiler
         // OR fusion between decl and def sites
         // OR fusion between decl and def sites
         funcInfo->m_mustOverride = funcInfo->m_mustOverride || ctx->Override() != nullptr;
         funcInfo->m_mustOverride = funcInfo->m_mustOverride || ctx->Override() != nullptr;
         // return types must match (between redeclaration of this concrete function)
         // return types must match (between redeclaration of this concrete function)
-        ExtendedTypeInfo returnType = CreateExtendedTypeInfo(ctx->functionType(), {}, Packing::MatrixMajor::Default);
+        // at the exception of inconsequential type modifiers (extern, inline, static, volatile, uniform) that we must merge to preserve in case of difference
+        ExtendedTypeInfo returnType = CreateExtendedTypeInfo(ctx->type(), {});
         if (alreadyDeclared && funcInfo->m_returnType != returnType)
         if (alreadyDeclared && funcInfo->m_returnType != returnType)
         {
         {
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_FUNCTION_INCONSISTENT_RETURN_TYPE, ctx->functionType()->start,
+            throw AzslcOrchestratorException{ORCHESTRATOR_FUNCTION_INCONSISTENT_RETURN_TYPE, ctx->type()->start,
                                              ConcatString("function definition ",  decoratedName, ", ",
                                              ConcatString("function definition ",  decoratedName, ", ",
                                                           GetFirstSeenLineMessage(symbol->second), ", had a different return type: ",
                                                           GetFirstSeenLineMessage(symbol->second), ", had a different return type: ",
-                                                          funcInfo->m_returnType.GetDisplayName(), ", versus now seen: ", returnType.GetDisplayName()));
+                                                          funcInfo->m_returnType.GetDisplayName(), ", versus now seen: ", returnType.GetDisplayName())};
         }
         }
+        CheckFunctionReturnTypeModifierNotOptionNorRootconstant(returnType.m_qualifiers, line); // throws a diagnostic if needed
+        returnType.m_qualifiers.OrMerge(funcInfo->m_returnType.m_qualifiers);
         funcInfo->m_returnType = returnType;
         funcInfo->m_returnType = returnType;
         assert(!funcInfo->m_returnType.IsEmpty());
         assert(!funcInfo->m_returnType.IsEmpty());
         if (!funcInfo->m_returnType.IsClassFound())
         if (!funcInfo->m_returnType.IsClassFound())
         {
         {
-            PrintWarning(Warn::W2, ctx->functionType()->start, "return type ", ctx->functionType()->getText(), " not understood.",
+            PrintWarning(Warn::W2, ctx->type()->start, "return type ", ctx->type()->getText(), " not understood.",
                          " (for function ", decoratedName, ")");
                          " (for function ", decoratedName, ")");
         }
         }
 
 
@@ -383,12 +395,11 @@ namespace AZ::ShaderCompiler
             varInfo.m_constVal = FoldEvalStaticConstExprNumericValue(ctx->Value);
             varInfo.m_constVal = FoldEvalStaticConstExprNumericValue(ctx->Value);
         }
         }
         varInfo.m_declNode    = nullptr;
         varInfo.m_declNode    = nullptr;
-        varInfo.m_typeQualifier |= StorageFlag::Static;
-        varInfo.m_typeQualifier |= StorageFlag::Const;
-        varInfo.m_typeQualifier |= StorageFlag::Enumerator;
+        Modifiers modifiers = Modifiers{StorageFlag::Static} |
+            StorageFlag::Const | StorageFlag::Enumerator;
 
 
-        varInfo.m_typeInfoExt = ExtendedTypeInfo{CreateTypeRefInfo(UnqualifiedNameView{enumQn}, OnNotFoundOrWrongKind::Diagnose),
-                                                 {}, {}, {}, Packing::MatrixMajor::Default };
+        varInfo.m_typeInfoExt = ExtendedTypeInfo{CreateTypeRefInfo(UnqualifiedNameView{enumQn}, OnNotFoundOrWrongKind::Diagnose), {},
+                                                 {modifiers}, {}, {}};
         enumInfo.PushMember(uid, Kind::Variable);
         enumInfo.PushMember(uid, Kind::Variable);
     }
     }
 
 
@@ -408,7 +419,7 @@ namespace AZ::ShaderCompiler
                 auto& varInfo         = var.GetSubAfterInitAs<Kind::Variable>();
                 auto& varInfo         = var.GetSubAfterInitAs<Kind::Variable>();
                 varInfo.m_constVal    = FoldEvalStaticConstExprNumericValue(intLit);
                 varInfo.m_constVal    = FoldEvalStaticConstExprNumericValue(intLit);
                 varInfo.m_declNode    = nullptr;
                 varInfo.m_declNode    = nullptr;
-                varInfo.m_typeInfoExt = ExtendedTypeInfo{CreateTypeRefInfo(UnqualifiedNameView{"int"}, OnNotFoundOrWrongKind::Diagnose),
+                varInfo.m_typeInfoExt = ExtendedTypeInfo{CreateTypeRefInfo(UnqualifiedNameView{"int"}, OnNotFoundOrWrongKind::Diagnose), {},
                                                          {}, {}, {}, Packing::MatrixMajor::Default };
                                                          {}, {}, {}, Packing::MatrixMajor::Default };
                 srgSemanticInfo.PushMember(uid, Kind::Variable);
                 srgSemanticInfo.PushMember(uid, Kind::Variable);
             }
             }
@@ -424,26 +435,25 @@ namespace AZ::ShaderCompiler
                 auto& varInfo         = var.GetSubAfterInitAs<Kind::Variable>();
                 auto& varInfo         = var.GetSubAfterInitAs<Kind::Variable>();
                 varInfo.m_constVal    = FoldEvalStaticConstExprNumericValue(intLit);
                 varInfo.m_constVal    = FoldEvalStaticConstExprNumericValue(intLit);
                 varInfo.m_declNode    = nullptr;
                 varInfo.m_declNode    = nullptr;
-                varInfo.m_typeInfoExt = ExtendedTypeInfo{CreateTypeRefInfo(UnqualifiedNameView{"int"}, OnNotFoundOrWrongKind::Diagnose),
+                varInfo.m_typeInfoExt = ExtendedTypeInfo{CreateTypeRefInfo(UnqualifiedNameView{"int"}, OnNotFoundOrWrongKind::Diagnose), {},
                                                          {}, {}, {}, Packing::MatrixMajor::Default };
                                                          {}, {}, {}, Packing::MatrixMajor::Default };
                 srgSemanticInfo.PushMember(uid, Kind::Variable);
                 srgSemanticInfo.PushMember(uid, Kind::Variable);
             }
             }
         }
         }
     }
     }
 
 
-    IdAndKind& SemanticOrchestrator::RegisterTypeAlias(string_view newIdentifier, AstFuncType* existingTypeCtx, azslParser::TypeAliasingDefinitionStatementContext* ctx)
+    IdAndKind& SemanticOrchestrator::RegisterTypeAlias(string_view newIdentifier, AstType* existingTypeCtx, azslParser::TypeAliasingDefinitionStatementContext* ctx)
     {
     {
         UnqualifiedNameView newId { newIdentifier };
         UnqualifiedNameView newId { newIdentifier };
         auto& idKind = AddIdentifier(newId, Kind::TypeAlias, ctx->start->getLine());
         auto& idKind = AddIdentifier(newId, Kind::TypeAlias, ctx->start->getLine());
         auto& [uid, kinfo]  = idKind;
         auto& [uid, kinfo]  = idKind;
         TypeAliasInfo& aliasInfo  = kinfo.GetSubAfterInitAs<Kind::TypeAlias>();
         TypeAliasInfo& aliasInfo  = kinfo.GetSubAfterInitAs<Kind::TypeAlias>();
         aliasInfo.m_declNode      = ctx;
         aliasInfo.m_declNode      = ctx;
-        aliasInfo.m_canonicalType = CreateExtendedTypeInfo(existingTypeCtx, {}, Packing::MatrixMajor::Default);
+        aliasInfo.m_canonicalType = CreateExtendedTypeInfo(existingTypeCtx, {});
         if (!aliasInfo.m_canonicalType.IsClassFound())
         if (!aliasInfo.m_canonicalType.IsClassFound())
         {
         {
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_INVALID_TYPEALIAS_TARGET,
-                                             existingTypeCtx->start,
-                                             ConcatString("target type ", existingTypeCtx->getText() + " not understood in typealias expression"));
+            throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_TYPEALIAS_TARGET, existingTypeCtx->start,
+                ConcatString("target type ", existingTypeCtx->getText() + " not understood in typealias expression")};
         }
         }
         assert(aliasInfo.m_canonicalType.m_coreType.m_typeClass != TypeClass::Alias);
         assert(aliasInfo.m_canonicalType.m_coreType.m_typeClass != TypeClass::Alias);
         // further registration in containing scopes
         // further registration in containing scopes
@@ -486,28 +496,34 @@ namespace AZ::ShaderCompiler
     IdAndKind* SemanticOrchestrator::RegisterVar(Token* nameIdentifier, AstUnnamedVarDecl* ctx)
     IdAndKind* SemanticOrchestrator::RegisterVar(Token* nameIdentifier, AstUnnamedVarDecl* ctx)
     {
     {
         azslParser::FunctionParamContext* paramCtx = nullptr;
         azslParser::FunctionParamContext* paramCtx = nullptr;
-        auto typeCtx           = ExtractTypeFromVariableDeclarator(ctx, &paramCtx);
-        auto&& idText          = nameIdentifier->getText();
-        size_t line            = nameIdentifier->getLine();
-        const string verboseMessage = ConcatString(line, ": var decl: ", idText, "\n");
-        verboseCout << verboseMessage;
-        auto uqNameView        = UnqualifiedNameView{idText};
-        auto& varSymbol        = AddIdentifier(uqNameView, Kind::Variable, line);
-        auto& [uid, info]      = varSymbol;
-        // now fillup what we can about that variable in the IR:
-        VarInfo& varInfo       = info.GetSubRefAs<VarInfo>();
-        // discover the storage flags:
-        varInfo.m_typeQualifier = ExtractTypeQualifiers(ctx, &varInfo.m_unknownQualifiers);
-        varInfo.m_declNode   = ctx;
-        varInfo.m_identifier = uqNameView;
-        // discover array dimensions
+        auto typeCtx                    = ExtractTypeFromUnnamedVariableDeclarator(ctx, &paramCtx);
+        auto&& idText                   = nameIdentifier->getText();
+        size_t line                     = nameIdentifier->getLine();
+        verboseCout << ConcatString(line, ": var decl: ", idText, "\n");
+        auto uqNameView                 = UnqualifiedNameView{idText};
+        // Register the variable in the symbol table early:
+        IdAndKind& symbolRef            = AddIdentifier(uqNameView, Kind::Variable, line);
+        auto& [uid, kindInfo]           = symbolRef;
+        VarInfo& varInfo                = kindInfo.GetSubRefAs<VarInfo>();
+        // Discover array dimensions:
         ArrayDimensions arrayDims;
         ArrayDimensions arrayDims;
         TryFoldArrayDimensions(ctx, arrayDims);
         TryFoldArrayDimensions(ctx, arrayDims);
-        // discover matrix majorness
-        Packing::MatrixMajor major = ExtractMatrixMajorness(varInfo);
-        // finally make the structure to hold all type information from the type context (will lookup/resolve type/typeof and compose the data)
-        varInfo.m_typeInfoExt = CreateExtendedTypeInfo(typeCtx, arrayDims, major);
+        // Finally make the structure to hold all type information from the type context:
+        //  this will perform a lookup/resolve type/typeof, extract the qualifiers and compose the data.
+        //
+        //  note: this syntax: "A A;" is allowed in C++/HLSL but not in AZSL.
+        // Because originally in C you can disambiguate lookup using a repetition of the type tag: "struct A A;"
+        // To make it work (I argue that it's undesirable though), it would require:
+        //  - an evolution of the grammar to tolerate tags
+        //  - an inversion between CreateExtendedTypeInfo call AddIdentifier call
+        //  - an evolution in the mangling to be able to store 2 symbols of the same name in the same scope
+        //        E.g "/!A" for type ::A (bang mark would mirror built-ins "?float")
+        varInfo.m_typeInfoExt           = CreateExtendedTypeInfo(typeCtx, arrayDims);
         assert(!varInfo.m_typeInfoExt.IsEmpty());
         assert(!varInfo.m_typeInfoExt.IsEmpty());
+        // now fillup what we can, and already know, about that variable in the IR:
+        varInfo.m_declNode              = ctx;
+        varInfo.m_identifier            = uqNameView;
+
         if (!varInfo.m_typeInfoExt.IsClassFound())
         if (!varInfo.m_typeInfoExt.IsClassFound())
         {
         {
             PrintWarning(Warn::W2, typeCtx->start, "variable type ", typeCtx->getText(), " not understood.",
             PrintWarning(Warn::W2, typeCtx->start, "variable type ", typeCtx->getText(), " not understood.",
@@ -533,8 +549,8 @@ namespace AZ::ShaderCompiler
         // Some semantic checks
         // Some semantic checks
         if (varInfo.CheckHasStorageFlag(StorageFlag::Inline))
         if (varInfo.CheckHasStorageFlag(StorageFlag::Inline))
         {
         {
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_INVALID_INLINED_QUALIFIER, ctx->start,
-                                             "inline qualification on variables is ill-formed");
+            throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_INLINED_QUALIFIER, ctx->start,
+                "inline qualification on variables is ill-formed"};
         }
         }
         bool global = curScopeId.GetName() == "/";
         bool global = curScopeId.GetName() == "/";
         bool isOption = varInfo.CheckHasStorageFlag(StorageFlag::Option);
         bool isOption = varInfo.CheckHasStorageFlag(StorageFlag::Option);
@@ -545,23 +561,23 @@ namespace AZ::ShaderCompiler
         {
         {
             if (arrayDims.IsArray())
             if (arrayDims.IsArray())
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_INVALID_NONGLOBAL_OPTION_OR_ROOTCONSTANT, ctx->start,
-                    "arrays can not be declared as rootconstants.");
+                throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_NONGLOBAL_OPTION_OR_ROOTCONSTANT, ctx->start,
+                    "arrays can not be declared as rootconstants."};
             }
             }
             if (!global)
             if (!global)
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_INVALID_NONGLOBAL_OPTION_OR_ROOTCONSTANT, ctx->start,
-                                                 "rootconstant or option qualifier is only accepted at top-level scope");
+                throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_NONGLOBAL_OPTION_OR_ROOTCONSTANT, ctx->start,
+                    "rootconstant or option qualifier is only accepted at top-level scope"};
             }
             }
             if (hasExplicitLocalFlag)
             if (hasExplicitLocalFlag)
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_INVALID_QUALIFIER_MIX, ctx->start,
-                                                 "static, groupshared qualifiers cannot be used with the rootconstant or option qualifier");
+                throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_QUALIFIER_MIX, ctx->start,
+                    "static, groupshared qualifiers cannot be used with the rootconstant or option qualifier"};
             }
             }
             if (varInfo.CheckHasStorageFlag(StorageFlag::Const))
             if (varInfo.CheckHasStorageFlag(StorageFlag::Const))
             {
             {
                 PrintWarning(Warn::W2, ctx->start, "const ignored in conjunction with rootconstant or option (because already immutable).");
                 PrintWarning(Warn::W2, ctx->start, "const ignored in conjunction with rootconstant or option (because already immutable).");
-                varInfo.m_typeQualifier &= StorageFlag::EnumType(~StorageFlag::Const);
+                varInfo.m_typeInfoExt.m_qualifiers.m_flag &= StorageFlag::EnumType(~StorageFlag::Const);
             }
             }
         }
         }
 
 
@@ -571,11 +587,11 @@ namespace AZ::ShaderCompiler
             {
             {
                 const string message = FormatString("Unknown type '%s' for shader option '%.*s'",
                 const string message = FormatString("Unknown type '%s' for shader option '%.*s'",
                     varInfo.m_typeInfoExt.GetDisplayName().c_str(), static_cast<int>(uqNameView.size()), uqNameView.data());
                     varInfo.m_typeInfoExt.GetDisplayName().c_str(), static_cast<int>(uqNameView.size()), uqNameView.data());
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_UNKNOWN_OPTION_TYPE, ctx->start, message);
+                throw AzslcOrchestratorException{ORCHESTRATOR_UNKNOWN_OPTION_TYPE, ctx->start, message};
             }
             }
             // we'll set that here, an option is better flagged as static const for simplicity during emission
             // we'll set that here, an option is better flagged as static const for simplicity during emission
-            varInfo.m_typeQualifier |= StorageFlag::Static;
-            varInfo.m_typeQualifier |= StorageFlag::Const;
+            varInfo.m_typeInfoExt.m_qualifiers.m_flag |= StorageFlag::Static;
+            varInfo.m_typeInfoExt.m_qualifiers.m_flag |= StorageFlag::Const;
             // we don't do the same for rootconstant because they exist through a ConstantBuffer<STRUCT>
             // we don't do the same for rootconstant because they exist through a ConstantBuffer<STRUCT>
         }
         }
 
 
@@ -606,7 +622,7 @@ namespace AZ::ShaderCompiler
         {
         {
             // We need to register each newly registered parameter variable ID, in the list of the function subinfo too:
             // We need to register each newly registered parameter variable ID, in the list of the function subinfo too:
             auto& funcSub = GetCurrentScopeSubInfoAs<FunctionInfo>();
             auto& funcSub = GetCurrentScopeSubInfoAs<FunctionInfo>();
-            funcSub.PushParameter(uid, varInfo.m_typeInfoExt, varInfo.m_typeQualifier, varInfo.m_declNode);
+            funcSub.PushParameter(uid, varInfo.m_typeInfoExt, varInfo.m_declNode);
         }
         }
 
 
         bool isExtern = !varInfo.StorageFlagIsLocalLinkage(global || enclosedBySRG);
         bool isExtern = !varInfo.StorageFlagIsLocalLinkage(global || enclosedBySRG);
@@ -615,13 +631,13 @@ namespace AZ::ShaderCompiler
         {
         {
             if (global && !varInfo.CheckHasStorageFlag(StorageFlag::Rootconstant))
             if (global && !varInfo.CheckHasStorageFlag(StorageFlag::Rootconstant))
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_ILLEGAL_GLOBAL_VARIABLE, nameIdentifier,
-                    ConcatString(Decorate("'", idText), " extern global variables are ill-formed in AZSL. You might want an internal variable (static or groupshared), a rootconstant, an option, or to put your resource in a ShaderResourceGroup.") );
+                throw AzslcOrchestratorException{ORCHESTRATOR_ILLEGAL_GLOBAL_VARIABLE, nameIdentifier,
+                    ConcatString(Decorate("'", idText), " extern global variables are ill-formed in AZSL. You might want an internal variable (static or groupshared), a rootconstant, an option, or to put your resource in a ShaderResourceGroup.") };
             }
             }
             if (HasStandardInitializer(ctx))
             if (HasStandardInitializer(ctx))
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_EXTERNAL_VARIABLE_WITH_INITIALIZER, nameIdentifier,
-                    ConcatString(Decorate("'", idText), " extern variables can't be initialized from the shader side, since their values are set by bindings.") );
+                throw AzslcOrchestratorException{ORCHESTRATOR_EXTERNAL_VARIABLE_WITH_INITIALIZER, nameIdentifier,
+                    ConcatString(Decorate("'", idText), " extern variables can't be initialized from the shader side, since their values are set by bindings.") };
             }
             }
         }
         }
 
 
@@ -634,16 +650,16 @@ namespace AZ::ShaderCompiler
 
 
             if (HasStandardInitializer(ctx) && !isStaticConst)
             if (HasStandardInitializer(ctx) && !isStaticConst)
             {
             {
-                ThrowAzslcOrchestratorException( ORCHESTRATOR_MEMBER_VARIABLE_WITH_INITIALIZER, nameIdentifier,
-                    ConcatString(idText, " default-member-initializers are not supported.") );
+                throw AzslcOrchestratorException{ ORCHESTRATOR_MEMBER_VARIABLE_WITH_INITIALIZER, nameIdentifier,
+                    ConcatString(idText, " default-member-initializers are not supported.") };
             }
             }
         }
         }
         if (curScopeKind.GetKind() == Kind::Interface)
         if (curScopeKind.GetKind() == Kind::Interface)
         {
         {
             // this is an impossible case because the parser doesn't accept these constructs.
             // this is an impossible case because the parser doesn't accept these constructs.
             // but let's say one day we have an API that allows constructing AST programmatically.
             // but let's say one day we have an API that allows constructing AST programmatically.
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_ILLEGAL_MEMBER_VARIABLE_IN_INTERFACE,
-                nameIdentifier, "member variables in interfaces are forbidden.");
+            throw AzslcOrchestratorException{ORCHESTRATOR_ILLEGAL_MEMBER_VARIABLE_IN_INTERFACE,
+                nameIdentifier, "member variables in interfaces are forbidden."};
         }
         }
         if (enclosedBySRG)
         if (enclosedBySRG)
         {
         {
@@ -653,18 +669,15 @@ namespace AZ::ShaderCompiler
         //  note to maintainers: do NOT try to avoid bloat in the verbose stream, by protecting this in `if (ctx->variableInitializer())`
         //  note to maintainers: do NOT try to avoid bloat in the verbose stream, by protecting this in `if (ctx->variableInitializer())`
         //                       it will result in the "static no-init-assignment zero initialization" case being <failed> instead of 0.
         //                       it will result in the "static no-init-assignment zero initialization" case being <failed> instead of 0.
         varInfo.m_constVal = FoldEvalStaticConstExprNumericValue(varInfo);
         varInfo.m_constVal = FoldEvalStaticConstExprNumericValue(varInfo);
-        return &varSymbol;
+        return &symbolRef;
     }
     }
 
 
     void SemanticOrchestrator::RegisterNamelessFunctionParameter(azslParser::FunctionParamContext* ctx)
     void SemanticOrchestrator::RegisterNamelessFunctionParameter(azslParser::FunctionParamContext* ctx)
     {
     {
-        TypeQualifier typeQualifier = ExtractTypeQualifiers(ctx->storageFlags());
-        CheckQualifersAreOnlyInlineOrStatic(typeQualifier, ctx->start->getLine());  // throws a diagnostic if needed
-
         ArrayDimensions arrayDims;
         ArrayDimensions arrayDims;
         TryFoldArrayDimensions(ctx->unnamedVariableDeclarator(), arrayDims);
         TryFoldArrayDimensions(ctx->unnamedVariableDeclarator(), arrayDims);
-        auto paramType = CreateExtendedTypeInfo(ctx->type(), arrayDims, Packing::MatrixMajor::Default);
-        GetCurrentScopeSubInfoAs<FunctionInfo>().PushParameter({}, paramType, typeQualifier, ctx->unnamedVariableDeclarator());
+        auto paramType = CreateExtendedTypeInfo(ctx->type(), arrayDims);
+        GetCurrentScopeSubInfoAs<FunctionInfo>().PushParameter({}, paramType, ctx->unnamedVariableDeclarator());
     }
     }
 
 
     // Helper to avoid code redundancy for a message that is used in three different places.
     // Helper to avoid code redundancy for a message that is used in three different places.
@@ -680,8 +693,8 @@ namespace AZ::ShaderCompiler
         const bool isUnboundedArray = arrayDims.IsUnbounded();
         const bool isUnboundedArray = arrayDims.IsUnbounded();
         if (!isUnboundedArray && !arrayDims.AreAllDimsFullyConstantFolded())
         if (!isUnboundedArray && !arrayDims.AreAllDimsFullyConstantFolded())
         {
         {
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_ILLEGAL_FOLDABLE_ARRAY_DIMENSIONS, ctx->start
-                , GetNonEasyToFoldMessage(arrayDims));
+            throw AzslcOrchestratorException{ORCHESTRATOR_ILLEGAL_FOLDABLE_ARRAY_DIMENSIONS, ctx->start,
+                GetNonEasyToFoldMessage(arrayDims)};
         }
         }
 
 
         auto& [srgUid, srgKind] = GetCurrentScopeIdAndKind();
         auto& [srgUid, srgKind] = GetCurrentScopeIdAndKind();
@@ -693,7 +706,7 @@ namespace AZ::ShaderCompiler
         string errorMessage;
         string errorMessage;
         if (!m_unboundedArraysValidator.CheckFieldCanBeAddedToSrg(isUnboundedArray, srgUid, srgInfo, varUid, varInfo, typeClass, &errorMessage))
         if (!m_unboundedArraysValidator.CheckFieldCanBeAddedToSrg(isUnboundedArray, srgUid, srgInfo, varUid, varInfo, typeClass, &errorMessage))
         {
         {
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_UNBOUNDED_RESOURCE_ISSUE, ctx->start, errorMessage);
+            throw AzslcOrchestratorException{ORCHESTRATOR_UNBOUNDED_RESOURCE_ISSUE, ctx->start, errorMessage};
         }
         }
 
 
         if (typeClass == TypeClass::ConstantBuffer)
         if (typeClass == TypeClass::ConstantBuffer)
@@ -712,16 +725,16 @@ namespace AZ::ShaderCompiler
         {
         {
             if (isUnboundedArray)
             if (isUnboundedArray)
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_ILLEGAL_FOLDABLE_ARRAY_DIMENSIONS, ctx->start
-                    , GetNonEasyToFoldMessage(arrayDims));
+                throw AzslcOrchestratorException{ORCHESTRATOR_ILLEGAL_FOLDABLE_ARRAY_DIMENSIONS, ctx->start,
+                    GetNonEasyToFoldMessage(arrayDims)};
             }
             }
             if (!varInfo.GetTypeRefInfo().IsPackable())
             if (!varInfo.GetTypeRefInfo().IsPackable())
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_NON_PACKABLE_TYPE_IN_SRG_CONSTANT, ctx->start,
-                                                 ConcatString(varInfo.GetTypeId().m_name,
-                                                              " is of kind ",
-                                                              TypeClass::ToStr(varInfo.GetTypeClass()),
-                                                              " which is a non packable kind of type."));
+                throw AzslcOrchestratorException{ORCHESTRATOR_NON_PACKABLE_TYPE_IN_SRG_CONSTANT, ctx->start,
+                    ConcatString(varInfo.GetTypeId().m_name,
+                                 " is of kind ",
+                                 TypeClass::ToStr(varInfo.GetTypeClass()),
+                                 " which is a non packable kind of type.")};
             }
             }
             auto& classInfo = srgInfo.m_implicitStruct;
             auto& classInfo = srgInfo.m_implicitStruct;
             classInfo.PushMember(varUid, Kind::Variable);
             classInfo.PushMember(varUid, Kind::Variable);
@@ -730,8 +743,8 @@ namespace AZ::ShaderCompiler
         {
         {
             if (isUnboundedArray)
             if (isUnboundedArray)
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_ILLEGAL_FOLDABLE_ARRAY_DIMENSIONS, ctx->start
-                    , GetNonEasyToFoldMessage(arrayDims));
+                throw AzslcOrchestratorException{ORCHESTRATOR_ILLEGAL_FOLDABLE_ARRAY_DIMENSIONS, ctx->start,
+                    GetNonEasyToFoldMessage(arrayDims)};
             }
             }
             assert(varInfo.StorageFlagIsLocalLinkage(true));
             assert(varInfo.StorageFlagIsLocalLinkage(true));
             srgInfo.m_nonexternVariables.push_back(varUid);
             srgInfo.m_nonexternVariables.push_back(varUid);
@@ -885,21 +898,21 @@ namespace AZ::ShaderCompiler
                 SRGInfo& srgInfo = srgSym->second.GetSubRefAs<SRGInfo>();
                 SRGInfo& srgInfo = srgSym->second.GetSubRefAs<SRGInfo>();
                 if (!srgInfo.IsPartial())
                 if (!srgInfo.IsPartial())
                 {
                 {
-                    ThrowAzslcOrchestratorException(ORCHESTRATOR_TRYING_TO_EXTEND_NOT_PARTIAL_SRG,
+                    throw AzslcOrchestratorException{ORCHESTRATOR_TRYING_TO_EXTEND_NOT_PARTIAL_SRG,
                         ctx->Partial()->getSymbol(), ConcatString("Cannot extend ShaderResourceGroup ", uqNameView, " ",
                         ctx->Partial()->getSymbol(), ConcatString("Cannot extend ShaderResourceGroup ", uqNameView, " ",
                                                                   GetFirstSeenLineMessage(srgSym->second),
                                                                   GetFirstSeenLineMessage(srgSym->second),
-                                                                  " because its original declaration isn't 'partial'"));
+                                                                  " because its original declaration isn't 'partial'")};
                 }
                 }
                 return *srgSym;  // valid: both original and current SRG declaration statements carry partial.
                 return *srgSym;  // valid: both original and current SRG declaration statements carry partial.
             }
             }
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_ODR_VIOLATION,
+            throw AzslcOrchestratorException{ORCHESTRATOR_ODR_VIOLATION,
                 ctx->Name, ConcatString("ShaderResourceGroup ", uqNameView, " already exists, ", GetFirstSeenLineMessage(srgSym->second),
                 ctx->Name, ConcatString("ShaderResourceGroup ", uqNameView, " already exists, ", GetFirstSeenLineMessage(srgSym->second),
-                                        ". Consider using the 'partial' keyword (on both declaration sites) to extend a ShaderResourceGroup."));
+                                        ". Consider using the 'partial' keyword (on both declaration sites) to extend a ShaderResourceGroup.")};
         }
         }
         if (!ctx->Partial() && !ctx->Semantic)
         if (!ctx->Partial() && !ctx->Semantic)
         {
         {
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_INVALID_SEMANTIC_DECLARATION,
-                ctx->Name, "A semantic is mandatory on the declaration of a non-partial ShaderResourceGroup.");
+            throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_SEMANTIC_DECLARATION,
+                ctx->Name, "A semantic is mandatory on the declaration of a non-partial ShaderResourceGroup."};
         }
         }
         auto& symbol       = AddIdentifier(uqNameView, Kind::ShaderResourceGroup, line);
         auto& symbol       = AddIdentifier(uqNameView, Kind::ShaderResourceGroup, line);
         // now fillup what we can about the kindinfo:
         // now fillup what we can about the kindinfo:
@@ -925,8 +938,8 @@ namespace AZ::ShaderCompiler
             auto baseSymbol = LookupSymbol(baseName);
             auto baseSymbol = LookupSymbol(baseName);
             if (!baseSymbol)
             if (!baseSymbol)
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_UNSPECIFIED_BASE_SYMBOL,
-                    ctx->start, ConcatString("Base symbol "s, baseName, " not found"));
+                throw AzslcOrchestratorException{ORCHESTRATOR_UNSPECIFIED_BASE_SYMBOL,
+                    ctx->start, ConcatString("Base symbol "s, baseName, " not found")};
             }
             }
             // register base in the class info IR
             // register base in the class info IR
             targetClassInfo->PushBase(baseSymbol->first);
             targetClassInfo->PushBase(baseSymbol->first);
@@ -992,9 +1005,9 @@ namespace AZ::ShaderCompiler
                 }
                 }
                 else
                 else
                 {
                 {
-                    ThrowAzslcOrchestratorException(ORCHESTRATOR_OVERLOAD_RESOLUTION_HARD_FAILURE, argumentListCtx ? argumentListCtx->start : nullptr,
+                    throw AzslcOrchestratorException{ORCHESTRATOR_OVERLOAD_RESOLUTION_HARD_FAILURE, argumentListCtx ? argumentListCtx->start : nullptr,
                                                      ConcatString(message.str(), " This is an error because functions belonging to this overload-set have heterogeneous return types.\n",
                                                      ConcatString(message.str(), " This is an error because functions belonging to this overload-set have heterogeneous return types.\n",
-                                                                  "Consider using type-casts to help type resolution."));
+                                                                  "Consider using type-casts to help type resolution.")};
                 }
                 }
             }
             }
             else
             else
@@ -1172,11 +1185,6 @@ namespace AZ::ShaderCompiler
         return LookupType(ctx).GetName();
         return LookupType(ctx).GetName();
     }
     }
 
 
-    QualifiedName SemanticOrchestrator::TypeofExpr(AstFuncType* ctx) const
-    {
-        return LookupType(ctx).GetName();
-    }
-
     QualifiedName SemanticOrchestrator::TypeofExpr(AstIdExpr* ctx) const
     QualifiedName SemanticOrchestrator::TypeofExpr(AstIdExpr* ctx) const
     {
     {
         // idExpression will represent registered symbol. if not, it's a fail.
         // idExpression will represent registered symbol. if not, it's a fail.
@@ -1268,12 +1276,12 @@ namespace AZ::ShaderCompiler
     QualifiedName SemanticOrchestrator::TypeofExpr(azslParser::TypeofExpressionContext* ctx) const
     QualifiedName SemanticOrchestrator::TypeofExpr(azslParser::TypeofExpressionContext* ctx) const
     {   // typeof(typeof(..)) is typeof(..) | and typeof(A)::id is type of the symbol composed by `lookup-of-A`/id
     {   // typeof(typeof(..)) is typeof(..) | and typeof(A)::id is type of the symbol composed by `lookup-of-A`/id
         auto leftType = ctx->Expr ? TypeofExpr(ctx->Expr)
         auto leftType = ctx->Expr ? TypeofExpr(ctx->Expr)
-                                  : TypeofExpr(ctx->functionType());
+                                  : TypeofExpr(ctx->type());
         if (ctx->SubQualification)
         if (ctx->SubQualification)
         {
         {
             auto [valid, lhsType] = VerifyTypeIsScopeComposable(leftType,
             auto [valid, lhsType] = VerifyTypeIsScopeComposable(leftType,
                                                                 ctx->Expr ? ctx->Expr->getText()
                                                                 ctx->Expr ? ctx->Expr->getText()
-                                                                          : ctx->functionType()->getText(),
+                                                                          : ctx->type()->getText(),
                                                                 ctx->start->getLine());
                                                                 ctx->start->getLine());
             return valid ? ComposeMemberNameWithScopeAndGetType(lhsType, ctx->SubQualification)
             return valid ? ComposeMemberNameWithScopeAndGetType(lhsType, ctx->SubQualification)
                          : QualifiedName{"<fail>"};
                          : QualifiedName{"<fail>"};
@@ -1372,16 +1380,16 @@ namespace AZ::ShaderCompiler
             auto& [baseUid, wannabeInfo] = *infoBase;
             auto& [baseUid, wannabeInfo] = *infoBase;
             if (!wannabeInfo.IsKindOneOf(Kind::Interface, Kind::Class))
             if (!wannabeInfo.IsKindOneOf(Kind::Interface, Kind::Class))
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_INVALID_INTERFACE, declNode->Class()->getSymbol(),
+                throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_INTERFACE, declNode->Class()->getSymbol(),
                     ConcatString("base ", baseUid.m_name, " is not an interface or class (it is a "s,
                     ConcatString("base ", baseUid.m_name, " is not an interface or class (it is a "s,
-                        Kind::ToStr(wannabeInfo.GetKind()).data(), ")"));
+                                 Kind::ToStr(wannabeInfo.GetKind()).data(), ")")};
             }
             }
             concreteBase += wannabeInfo.GetKind() == Kind::Class;
             concreteBase += wannabeInfo.GetKind() == Kind::Class;
             if (concreteBase > 1)
             if (concreteBase > 1)
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_INVALID_INTERFACE, declNode->Class()->getSymbol(),
+                throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_INTERFACE, declNode->Class()->getSymbol(),
                                                 ConcatString("class ", declNode->Name->getText(),
                                                 ConcatString("class ", declNode->Name->getText(),
-                                                             " has multiple concrete bases. Only 1 concrete base allowed"s));
+                                                             " has multiple concrete bases. Only 1 concrete base allowed"s)};
             }
             }
             // verify interfaces full implementation
             // verify interfaces full implementation
             if (wannabeInfo.GetKind() == Kind::Interface)
             if (wannabeInfo.GetKind() == Kind::Interface)
@@ -1391,8 +1399,8 @@ namespace AZ::ShaderCompiler
                 {  // Check that any member present in base is present in this class
                 {  // Check that any member present in base is present in this class
                     if (!classSubInfo.HasMember(basemember.GetNameLeaf()))
                     if (!classSubInfo.HasMember(basemember.GetNameLeaf()))
                     {
                     {
-                        ThrowAzslcOrchestratorException(ORCHESTRATOR_CLASS_REDEFINE, declNode->Class()->getSymbol(),
-                                                        ConcatString("class ", m_scope->m_currentScopeUID.m_name, " does not redefine ", basemember.m_name));
+                        throw AzslcOrchestratorException{ORCHESTRATOR_CLASS_REDEFINE, declNode->Class()->getSymbol(),
+                                                         ConcatString("class ", m_scope->m_currentScopeUID.m_name, " does not redefine ", basemember.m_name)};
                     }
                     }
                 }
                 }
             }
             }
@@ -1417,8 +1425,8 @@ namespace AZ::ShaderCompiler
             if (baseKind != Kind::Function)
             if (baseKind != Kind::Function)
             {
             {
                 auto baseKindStr = Kind::ToStr(baseKind).data();
                 auto baseKindStr = Kind::ToStr(baseKind).data();
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_HIDING_SYMBOL_BASE, ctx->Identifier()->getSymbol(),
-                    ConcatString("function ", thisFuncId.m_name, " is hiding a symbol of a base, that is not of Function kind, but is ", baseKindStr));
+                throw AzslcOrchestratorException{ORCHESTRATOR_HIDING_SYMBOL_BASE, ctx->Identifier()->getSymbol(),
+                    ConcatString("function ", thisFuncId.m_name, " is hiding a symbol of a base, that is not of Function kind, but is ", baseKindStr)};
             }
             }
             auto& baseFuncSubInfo = baseFuncKind.GetSubRefAs<FunctionInfo>();
             auto& baseFuncSubInfo = baseFuncKind.GetSubRefAs<FunctionInfo>();
             if (std::find(baseFuncSubInfo.m_overrides.begin(),  baseFuncSubInfo.m_overrides.end(), thisFuncId) == baseFuncSubInfo.m_overrides.end())
             if (std::find(baseFuncSubInfo.m_overrides.begin(),  baseFuncSubInfo.m_overrides.end(), thisFuncId) == baseFuncSubInfo.m_overrides.end())
@@ -1435,15 +1443,15 @@ namespace AZ::ShaderCompiler
         {
         {
             if (GetCurrentParentScopeIdAndKind().second.GetKind() != Kind::Class)
             if (GetCurrentParentScopeIdAndKind().second.GetKind() != Kind::Class)
             {   // free function case (or in interface !)
             {   // free function case (or in interface !)
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_INVALID_OVERRIDE_SPECIFIER_CLASS, ctx->Identifier()->getSymbol(),
-                    ConcatString("function ", thisFuncId.m_name, " has override specifier but is not part of a class"));
+                throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_OVERRIDE_SPECIFIER_CLASS, ctx->Identifier()->getSymbol(),
+                    ConcatString("function ", thisFuncId.m_name, " has override specifier but is not part of a class")};
             }
             }
             else
             else
             {   // in-class case
             {   // in-class case
                 if (!parentFunction)
                 if (!parentFunction)
                 {
                 {
-                    ThrowAzslcOrchestratorException(ORCHESTRATOR_INVALID_OVERRIDE_SPECIFIER_BASE, ctx->Identifier()->getSymbol(),
-                        ConcatString("method ", thisFuncId.m_name, " has override specifier but is not found in any base"));
+                    throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_OVERRIDE_SPECIFIER_BASE, ctx->Identifier()->getSymbol(),
+                        ConcatString("method ", thisFuncId.m_name, " has override specifier but is not found in any base")};
                 }
                 }
             }
             }
         }
         }
@@ -1461,10 +1469,10 @@ namespace AZ::ShaderCompiler
             bool previousFuncIsCulprit = overloadSet->AnyOf([this](auto&& uid){return this->HasAnyDefaultParameterValue(uid);});
             bool previousFuncIsCulprit = overloadSet->AnyOf([this](auto&& uid){return this->HasAnyDefaultParameterValue(uid);});
             if (thisFuncIsCulprit || previousFuncIsCulprit)
             if (thisFuncIsCulprit || previousFuncIsCulprit)
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_NO_DEFAULT_PARAM_WITH_OVERLOADS, ctx->Identifier()->getSymbol(),
+                throw AzslcOrchestratorException{ORCHESTRATOR_NO_DEFAULT_PARAM_WITH_OVERLOADS, ctx->Identifier()->getSymbol(),
                                                  ConcatString("can't use default arguments in conjunction with function overloading. (function ", thisFuncId.m_name,
                                                  ConcatString("can't use default arguments in conjunction with function overloading. (function ", thisFuncId.m_name,
                                                               thisFuncIsCulprit ? " has defaults arguments, but overloads exist)"
                                                               thisFuncIsCulprit ? " has defaults arguments, but overloads exist)"
-                                                                                : " overloads a function that has default arguments)"));
+                                                                                : " overloads a function that has default arguments)")};
             }
             }
         }
         }
     }
     }
@@ -1481,11 +1489,11 @@ namespace AZ::ShaderCompiler
                 // We only care the specified semantic is the same as the currently defined semantic for the srg.
                 // We only care the specified semantic is the same as the currently defined semantic for the srg.
                 if (srgInfo.m_semantic->GetNameLeaf() != semanticName)
                 if (srgInfo.m_semantic->GetNameLeaf() != semanticName)
                 {
                 {
-                    const LineDirectiveInfo* originalSrglineInfo = m_preprocessorLineDirectiveFinder->GetNearestPreprocessorLineDirective(srgInfo.m_declNode->Semantic->getLine());
+                    const LineDirectiveInfo* originalSrglineInfo = AzslcException::s_lineFinder->GetNearestPreprocessorLineDirective(srgInfo.m_declNode->Semantic->getLine());
                     string errorMsg = FormatString("'partial' extension of ShaderResourceGroup [%s] with semantic [%s] shall not bind a different semantic than [%s] found in line %u of %s",
                     string errorMsg = FormatString("'partial' extension of ShaderResourceGroup [%s] with semantic [%s] shall not bind a different semantic than [%s] found in line %u of %s",
                         ctx->Name->getText().c_str(), semanticName.c_str(), srgInfo.m_semantic->GetNameLeaf().c_str(),
                         ctx->Name->getText().c_str(), semanticName.c_str(), srgInfo.m_semantic->GetNameLeaf().c_str(),
                         originalSrglineInfo->m_forcedLineNumber, originalSrglineInfo->m_containingFilename.c_str());
                         originalSrglineInfo->m_forcedLineNumber, originalSrglineInfo->m_containingFilename.c_str());
-                    ThrowAzslcOrchestratorException(ORCHESTRATOR_SRG_EXTENSION_HAS_DIFFERENT_SEMANTIC, ctx->Semantic, errorMsg);
+                    throw AzslcOrchestratorException{ORCHESTRATOR_SRG_EXTENSION_HAS_DIFFERENT_SEMANTIC, ctx->Semantic, errorMsg};
                 }
                 }
                 // All is good.
                 // All is good.
                 return;
                 return;
@@ -1496,18 +1504,18 @@ namespace AZ::ShaderCompiler
             auto semanticSymbol = LookupSymbol(uqName);
             auto semanticSymbol = LookupSymbol(uqName);
             if (!semanticSymbol)
             if (!semanticSymbol)
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_INVALID_SEMANTIC_DECLARATION, ctx->ShaderResourceGroup()->getSymbol(),
-                                                 ConcatString("Declaration for semantic ", semanticName, " used in SRG ", ctx->Name->getText(), " was not found"));
+                throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_SEMANTIC_DECLARATION, ctx->ShaderResourceGroup()->getSymbol(),
+                                                 ConcatString("Declaration for semantic ", semanticName, " used in SRG ", ctx->Name->getText(), " was not found")};
             }
             }
 
 
             auto& [semanticSymId, semanticSymKind] = *semanticSymbol;
             auto& [semanticSymId, semanticSymKind] = *semanticSymbol;
             Kind kind = semanticSymKind.GetKind();
             Kind kind = semanticSymKind.GetKind();
             if (kind != Kind::ShaderResourceGroupSemantic)
             if (kind != Kind::ShaderResourceGroupSemantic)
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_INVALID_SEMANTIC_DECLARATION_TYPE, ctx->ShaderResourceGroup()->getSymbol(),
+                throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_SEMANTIC_DECLARATION_TYPE, ctx->ShaderResourceGroup()->getSymbol(),
                                                  ConcatString("Declaration for ", semanticName, " used in SRG ", ctx->Name->getText(),
                                                  ConcatString("Declaration for ", semanticName, " used in SRG ", ctx->Name->getText(),
                                                               " is a ", Kind::ToStr(kind).data(),
                                                               " is a ", Kind::ToStr(kind).data(),
-                                                              " but expected a ", Kind::ToStr(Kind::ShaderResourceGroupSemantic).data()));
+                                                              " but expected a ", Kind::ToStr(Kind::ShaderResourceGroupSemantic).data())};
             }
             }
             const IdentifierUID& srgId = GetCurrentScopeIdAndKind().first;
             const IdentifierUID& srgId = GetCurrentScopeIdAndKind().first;
             auto* srgSemanticInfo = semanticSymKind.GetSubRefAs<ClassInfo>().Get<SRGSemanticInfo>();
             auto* srgSemanticInfo = semanticSymKind.GetSubRefAs<ClassInfo>().Get<SRGSemanticInfo>();
@@ -1518,10 +1526,10 @@ namespace AZ::ShaderCompiler
             }
             }
             else if (userSrgIterator->second != srgId)
             else if (userSrgIterator->second != srgId)
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_SRG_REUSES_A_FREQUENCY, ctx->ShaderResourceGroup()->getSymbol(),
+                throw AzslcOrchestratorException{ORCHESTRATOR_SRG_REUSES_A_FREQUENCY, ctx->ShaderResourceGroup()->getSymbol(),
                                                  ConcatString("SRG ", ctx->Name->getText(), " reuses frequencyId "
                                                  ConcatString("SRG ", ctx->Name->getText(), " reuses frequencyId "
                                                               , userSrgIterator->first, " already used by ",
                                                               , userSrgIterator->first, " already used by ",
-                                                              userSrgIterator->second));
+                                                              userSrgIterator->second)};
             }
             }
             // Good, the SRGSemantic is valid, remember a reference to its ID on the SRG:
             // Good, the SRGSemantic is valid, remember a reference to its ID on the SRG:
             srgInfo.m_semantic = semanticSymId;
             srgInfo.m_semantic = semanticSymId;
@@ -1555,7 +1563,7 @@ namespace AZ::ShaderCompiler
 
 
                 ArrayDimensions arrayDims;
                 ArrayDimensions arrayDims;
                 arrayDims.PushBack(keyLength / kShaderVariantKeyRegisterSize);
                 arrayDims.PushBack(keyLength / kShaderVariantKeyRegisterSize);
-                varInfo.m_typeInfoExt = ExtendedTypeInfo{ CreateTypeRefInfo(UnqualifiedNameView{"uint4"}, OnNotFoundOrWrongKind::Diagnose),
+                varInfo.m_typeInfoExt = ExtendedTypeInfo{CreateTypeRefInfo(UnqualifiedNameView{"uint4"}, OnNotFoundOrWrongKind::Diagnose), {},
                                                          {}, arrayDims, {}, Packing::MatrixMajor::Default };
                                                          {}, arrayDims, {}, Packing::MatrixMajor::Default };
 
 
                 srgInfo.m_implicitStruct.PushMember(uid, Kind::Variable);
                 srgInfo.m_implicitStruct.PushMember(uid, Kind::Variable);
@@ -1576,8 +1584,8 @@ namespace AZ::ShaderCompiler
                 bool genericTypeLooksGood = IsFundamental(genericClass) || IsUserDefined(genericClass);
                 bool genericTypeLooksGood = IsFundamental(genericClass) || IsUserDefined(genericClass);
                 if (!genericTypeLooksGood)
                 if (!genericTypeLooksGood)
                 {
                 {
-                    ThrowAzslcOrchestratorException(ORCHESTRATOR_INVALID_EXTERNAL_BOUND_RESOURCE_VIEW, memberInfo.m_declNode->start,
-                        "externally bound resources can't be type-parameterized on view-types");
+                    throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_EXTERNAL_BOUND_RESOURCE_VIEW, memberInfo.m_declNode->start,
+                                                     "externally bound resources can't be type-parameterized on view-types"};
                 }
                 }
             }
             }
         }
         }
@@ -1591,24 +1599,24 @@ namespace AZ::ShaderCompiler
             auto genericClass = memberInfo.GetGenericParameterTypeClass();
             auto genericClass = memberInfo.GetGenericParameterTypeClass();
             if (!IsUserDefined(genericClass))
             if (!IsUserDefined(genericClass))
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_INVALID_GENERIC_TYPE_CONSTANTBUFFER, memberInfo.m_declNode->start,
+                throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_GENERIC_TYPE_CONSTANTBUFFER, memberInfo.m_declNode->start,
                     ConcatString("ConstantBuffer<T>'s generic type ", genericName,
                     ConcatString("ConstantBuffer<T>'s generic type ", genericName,
-                        " must be user defined, but seen as ", TypeClass::ToStr(genericClass).data()));
+                                 " must be user defined, but seen as ", TypeClass::ToStr(genericClass).data())};
             }
             }
             // further checks by actually fetching the symbol
             // further checks by actually fetching the symbol
             IdAndKind* idkind = m_symbols->GetIdAndKindInfo(genericName);
             IdAndKind* idkind = m_symbols->GetIdAndKindInfo(genericName);
             if (!idkind)
             if (!idkind)
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_UNDECLARED_GENERIC_TYPE_CONSTANTBUFFER, memberInfo.m_declNode->start,
+                throw AzslcOrchestratorException{ORCHESTRATOR_UNDECLARED_GENERIC_TYPE_CONSTANTBUFFER, memberInfo.m_declNode->start,
                     ConcatString("ConstantBuffer<T>'s generic type ", genericName,
                     ConcatString("ConstantBuffer<T>'s generic type ", genericName,
-                        " is not declared!"));
+                                 " is not declared!")};
             }
             }
             auto& [id, kind] = *idkind;
             auto& [id, kind] = *idkind;
             if (kind.GetKind() != Kind::Struct)
             if (kind.GetKind() != Kind::Struct)
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_INVALID_GENERIC_TYPE_CONSTANTBUFFER_STRUCT, memberInfo.m_declNode->start,
+                throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_GENERIC_TYPE_CONSTANTBUFFER_STRUCT, memberInfo.m_declNode->start,
                     ConcatString("ConstantBuffer<T>'s generic type ", genericName,
                     ConcatString("ConstantBuffer<T>'s generic type ", genericName,
-                        " must be a struct, but seen as ", Kind::ToStr(kind.GetKind()).data()));
+                                 " must be a struct, but seen as ", Kind::ToStr(kind.GetKind()).data())};
             }
             }
         }
         }
     }
     }
@@ -1627,8 +1635,8 @@ namespace AZ::ShaderCompiler
                 return none;
                 return none;
             }
             }
 
 
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_LITERAL_REQUIRED_SRG_SEMANTIC, ctx->start,
-                ConcatString(intrinsicVarName, " is required in SRG semantic"));
+            throw AzslcOrchestratorException{ORCHESTRATOR_LITERAL_REQUIRED_SRG_SEMANTIC, ctx->start,
+                                             ConcatString(intrinsicVarName, " is required in SRG semantic")};
         }
         }
         auto&[sId, sKind] = *semanticSymbol;
         auto&[sId, sKind] = *semanticSymbol;
         auto& srgSubInfo = GetCurrentScopeSubInfoAs<ClassInfo>();
         auto& srgSubInfo = GetCurrentScopeSubInfoAs<ClassInfo>();
@@ -1642,8 +1650,8 @@ namespace AZ::ShaderCompiler
         int64_t retValue = 0;
         int64_t retValue = 0;
         if (!TryGetConstExprValueAsInt64(varInfo.m_constVal, retValue))
         if (!TryGetConstExprValueAsInt64(varInfo.m_constVal, retValue))
         {
         {
-            throw AzslcOrchestratorException(ORCHESTRATOR_INVALID_INTEGER_CONSTANT,
-                ConcatString("Semantic pass error: couldn't get a meaningful integer constant for ", intrinsicVarName));
+            throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_INTEGER_CONSTANT,
+                                             ConcatString("Semantic pass error: couldn't get a meaningful integer constant for ", intrinsicVarName)};
         }
         }
 
 
         return retValue;
         return retValue;
@@ -1656,8 +1664,8 @@ namespace AZ::ShaderCompiler
         (*semanticInfo).m_frequencyId = TryFoldSRGSemantic(ctx, azslParser::FrequencyId, true);
         (*semanticInfo).m_frequencyId = TryFoldSRGSemantic(ctx, azslParser::FrequencyId, true);
         if (*((*semanticInfo).m_frequencyId) > SRGSemanticInfo_MaxAllowedFrequency)
         if (*((*semanticInfo).m_frequencyId) > SRGSemanticInfo_MaxAllowedFrequency)
         {
         {
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_INVALID_RANGE_FREQUENCY_ID, ctx->Identifier()->getSymbol(),
-                ConcatString("ShaderResourceGroupSemantic must define a FrequencyId with value between 0 and ", SRGSemanticInfo_MaxAllowedFrequency));
+            throw AzslcOrchestratorException{ORCHESTRATOR_INVALID_RANGE_FREQUENCY_ID, ctx->Identifier()->getSymbol(),
+                                             ConcatString("ShaderResourceGroupSemantic must define a FrequencyId with value between 0 and ", SRGSemanticInfo_MaxAllowedFrequency)};
         }
         }
 
 
         (*semanticInfo).m_variantFallback = TryFoldSRGSemantic(ctx, azslParser::ShaderVariantFallback);
         (*semanticInfo).m_variantFallback = TryFoldSRGSemantic(ctx, azslParser::ShaderVariantFallback);
@@ -1687,21 +1695,21 @@ namespace AZ::ShaderCompiler
         auto maybeSymbol = LookupSymbol(uqName);
         auto maybeSymbol = LookupSymbol(uqName);
         if (!maybeSymbol)
         if (!maybeSymbol)
         {
         {
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_CONSTANT_FOLDING_FAULT, idExp->start,
-                ConcatString("in expected constant expression: identifier ", uqName, " not found"));
+            throw AzslcOrchestratorException{ORCHESTRATOR_CONSTANT_FOLDING_FAULT, idExp->start,
+                                             ConcatString("in expected constant expression: identifier ", uqName, " not found")};
         }
         }
         auto& [id, symbol] = *maybeSymbol;
         auto& [id, symbol] = *maybeSymbol;
         auto what = symbol.GetKind();
         auto what = symbol.GetKind();
         if (what != Kind::Variable)
         if (what != Kind::Variable)
         {
         {
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_CONSTANT_FOLDING_FAULT, idExp->start,
-                ConcatString("in expected constant expression: identifier ", uqName, " did not refer to a variable, but a ", Kind::ToStr(what).data()));
+            throw AzslcOrchestratorException{ORCHESTRATOR_CONSTANT_FOLDING_FAULT, idExp->start,
+                                             ConcatString("in expected constant expression: identifier ", uqName, " did not refer to a variable, but a ", Kind::ToStr(what).data())};
         }
         }
         auto const& var = symbol.GetSubRefAs<VarInfo>();
         auto const& var = symbol.GetSubRefAs<VarInfo>();
         if (holds_alternative<monostate>(var.m_constVal))
         if (holds_alternative<monostate>(var.m_constVal))
         {
         {
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_CONSTANT_FOLDING_FAULT, idExp->start,
-                ConcatString("in expected constant expression: variable ", id.m_name, " couldn't be folded to a constant (tip: use --semantic --verbose to diagnose why)"));
+            throw AzslcOrchestratorException{ORCHESTRATOR_CONSTANT_FOLDING_FAULT, idExp->start,
+                                             ConcatString("in expected constant expression: variable ", id.m_name, " couldn't be folded to a constant (tip: use --semantic --verbose to diagnose why)")};
         }
         }
         return var.m_constVal;
         return var.m_constVal;
     }
     }
@@ -1838,8 +1846,8 @@ namespace AZ::ShaderCompiler
         {
         {
             if (policy == OnNotFoundOrWrongKind::Diagnose)
             if (policy == OnNotFoundOrWrongKind::Diagnose)
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_TYPE_LOOKUP_FAULT,
-                    sourceline, none, ConcatString(" type ", string{ typeName }, " requested but not found."));
+                throw AzslcOrchestratorException{ORCHESTRATOR_TYPE_LOOKUP_FAULT,
+                                                 sourceline, none, ConcatString(" type ", string{ typeName }, " requested but not found.")};
             }
             }
             else
             else
             {
             {
@@ -1854,9 +1862,9 @@ namespace AZ::ShaderCompiler
         {
         {
             if (policy == OnNotFoundOrWrongKind::Diagnose)
             if (policy == OnNotFoundOrWrongKind::Diagnose)
             {
             {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_TYPE_LOOKUP_FAULT,
+                throw AzslcOrchestratorException{ORCHESTRATOR_TYPE_LOOKUP_FAULT,
                     sourceline, none, ConcatString(" type ", typeName.data(),
                     sourceline, none, ConcatString(" type ", typeName.data(),
-                        " requested but found as ", Kind::ToStr(kind.GetKind()).data()));
+                                                   " requested but found as ", Kind::ToStr(kind.GetKind()).data())};
             }
             }
             else
             else
             {
             {
@@ -1889,26 +1897,21 @@ namespace AZ::ShaderCompiler
         return true;
         return true;
     }
     }
 
 
-    ExtendedTypeInfo SemanticOrchestrator::CreateExtendedTypeInfo(AstType* ctx, ArrayDimensions dims, Packing::MatrixMajor mtxMajor) const
+    ExtendedTypeInfo SemanticOrchestrator::CreateExtendedTypeInfo(AstType* ctx, ArrayDimensions dims) const
     {
     {
         vector<tree::TerminalNode*> genericDims;
         vector<tree::TerminalNode*> genericDims;
         auto extType = ExtractComposedTypeNamesFromAstContext(ctx, &genericDims);
         auto extType = ExtractComposedTypeNamesFromAstContext(ctx, &genericDims);
         if (!TryFoldGenericArrayDimensions(extType, genericDims))
         if (!TryFoldGenericArrayDimensions(extType, genericDims))
         {
         {
-            ThrowAzslcOrchestratorException(ORCHESTRATOR_DEPORTED_METHOD_DEFINITION, ctx->start,
-                ConcatString("SemanticOrchestrator::CreateExtendedTypeInfo failed for type (", ctx->getText(), ")"));
+            throw AzslcOrchestratorException{ORCHESTRATOR_ILLEGAL_FOLDABLE_ARRAY_DIMENSIONS, ctx->start,
+                                             ConcatString("SemanticOrchestrator::CreateExtendedTypeInfo failed for type (", ctx->getText(), ")")};
         }
         }
-        return CreateExtendedTypeInfo(extType, dims, mtxMajor);
-    }
-
-    ExtendedTypeInfo SemanticOrchestrator::CreateExtendedTypeInfo(AstFuncType* ctx, ArrayDimensions dims, Packing::MatrixMajor mtxMajor) const
-    {
-        return ctx->Void() ?
-            ExtendedTypeInfo{ CreateTypeRefInfo(UnqualifiedNameView{AZ::ShaderCompiler::Predefined::Void[0]}), {}, {}, {}, mtxMajor } :
-            CreateExtendedTypeInfo(ctx->type(), dims, mtxMajor);
+        return CreateExtendedTypeInfo(extType, ExtractTypeQualifiers(ctx->storageFlags()), dims);
     }
     }
 
 
-    ExtendedTypeInfo SemanticOrchestrator::CreateExtendedTypeInfo(const ExtractedComposedType& extractedComposed, ArrayDimensions dims, Packing::MatrixMajor mtxMajor) const
+    ExtendedTypeInfo SemanticOrchestrator::CreateExtendedTypeInfo(const ExtractedComposedType& extractedComposed,
+                                                                  const TypeQualifiers& qualifiers,
+                                                                  ArrayDimensions dims) const
     {
     {
         TypeRefInfo core = CreateTypeRefInfo(extractedComposed.m_core);
         TypeRefInfo core = CreateTypeRefInfo(extractedComposed.m_core);
         TypeRefInfo generic = CreateTypeRefInfo(extractedComposed.m_genericParam);
         TypeRefInfo generic = CreateTypeRefInfo(extractedComposed.m_genericParam);
@@ -1920,7 +1923,8 @@ namespace AZ::ShaderCompiler
             const TypeAliasInfo* targetAlias = m_symbols->GetAsSub<TypeAliasInfo>(core.m_typeId);
             const TypeAliasInfo* targetAlias = m_symbols->GetAsSub<TypeAliasInfo>(core.m_typeId);
             return targetAlias->m_canonicalType;
             return targetAlias->m_canonicalType;
         }
         }
-        return ExtendedTypeInfo{core, generic, dims, extractedComposed.m_genericDimensions, mtxMajor};
+        Packing::MatrixMajor mtxMajor = ExtractMatrixMajorness(qualifiers);
+        return ExtendedTypeInfo{core, generic, qualifiers, dims, extractedComposed.m_genericDimensions, mtxMajor};
     }
     }
 
 
     IdAndKind* SemanticOrchestrator::GetSymbolHiddenInBase(IdentifierUID hidingCandidate)
     IdAndKind* SemanticOrchestrator::GetSymbolHiddenInBase(IdentifierUID hidingCandidate)
@@ -1944,11 +1948,11 @@ namespace AZ::ShaderCompiler
                     {
                     {
                         if (found)
                         if (found)
                         {
                         {
-                            throw AzslcOrchestratorException(ORCHESTRATOR_MULTIPLE_HIDDEN_SYMBOLS,
+                            throw AzslcOrchestratorException{ORCHESTRATOR_MULTIPLE_HIDDEN_SYMBOLS,
                                 ConcatString("Found multiple symbols hidden by ", hidingCandidate.m_name,
                                 ConcatString("Found multiple symbols hidden by ", hidingCandidate.m_name,
                                     " in bases of ", containingScopeId.m_name,
                                     " in bases of ", containingScopeId.m_name,
                                     ". First was ", found->first.m_name,
                                     ". First was ", found->first.m_name,
-                                    ", now also found in ", base.m_name, "."));
+                                    ", now also found in ", base.m_name, ".")};
                         }
                         }
                         // reconstruct the UID found, and return that.
                         // reconstruct the UID found, and return that.
                         string reconstructedPath = JoinPath(base.m_name, hidingCandidate.GetNameLeaf());
                         string reconstructedPath = JoinPath(base.m_name, hidingCandidate.GetNameLeaf());

+ 7 - 47
src/AzslcSemanticOrchestrator.h

@@ -23,8 +23,7 @@ namespace AZ::ShaderCompiler
     //! Deals with jobs that requires access to both Scope and SymbolTable
     //! Deals with jobs that requires access to both Scope and SymbolTable
     struct SemanticOrchestrator
     struct SemanticOrchestrator
     {
     {
-        SemanticOrchestrator(SymbolAggregator* sema, ScopeTracker* scope, azslLexer* lexer,
-            PreprocessorLineDirectiveFinder* preprocessorLineDirectiveFinder = nullptr);
+        SemanticOrchestrator(SymbolAggregator* sema, ScopeTracker* scope, azslLexer* lexer);
 
 
         //! Helper shortcut: uses the current scope as a starting location to lookup a symbol.
         //! Helper shortcut: uses the current scope as a starting location to lookup a symbol.
         //! Returns whatever SymbolAggretator's eponymous returns.
         //! Returns whatever SymbolAggretator's eponymous returns.
@@ -150,7 +149,7 @@ namespace AZ::ShaderCompiler
             return symbol;
             return symbol;
         }
         }
 
 
-        auto RegisterTypeAlias(string_view newIdentifier, AstFuncType* existingTypeCtx, azslParser::TypeAliasingDefinitionStatementContext* ctx) -> IdAndKind&;
+        auto RegisterTypeAlias(string_view newIdentifier, AstType* existingTypeCtx, azslParser::TypeAliasingDefinitionStatementContext* ctx) -> IdAndKind&;
 
 
         auto RegisterSRGSemantic(AstSRGSemanticDeclNode* ctx) -> IdAndKind&;
         auto RegisterSRGSemantic(AstSRGSemanticDeclNode* ctx) -> IdAndKind&;
 
 
@@ -208,7 +207,6 @@ namespace AZ::ShaderCompiler
         auto TypeofExpr(azslParser::ExpressionExtContext* ctx) const -> QualifiedName;
         auto TypeofExpr(azslParser::ExpressionExtContext* ctx) const -> QualifiedName;
         auto TypeofExpr(azslParser::OtherExpressionContext* ctx) const -> QualifiedName;
         auto TypeofExpr(azslParser::OtherExpressionContext* ctx) const -> QualifiedName;
         auto TypeofExpr(AstType* ctx) const -> QualifiedName;
         auto TypeofExpr(AstType* ctx) const -> QualifiedName;
-        auto TypeofExpr(AstFuncType* ctx) const -> QualifiedName;
         auto TypeofExpr(AstIdExpr* ctx) const -> QualifiedName;
         auto TypeofExpr(AstIdExpr* ctx) const -> QualifiedName;
         auto TypeofExpr(azslParser::IdentifierExpressionContext* ctx) const -> QualifiedName;
         auto TypeofExpr(azslParser::IdentifierExpressionContext* ctx) const -> QualifiedName;
         auto TypeofExpr(azslParser::MemberAccessExpressionContext* ctx) const -> QualifiedName;
         auto TypeofExpr(azslParser::MemberAccessExpressionContext* ctx) const -> QualifiedName;
@@ -325,7 +323,7 @@ namespace AZ::ShaderCompiler
         }
         }
 
 
         // lookup the symbol database for a type of a given name (or discover the name through an Ast context) and compose a TypeRefInfo
         // lookup the symbol database for a type of a given name (or discover the name through an Ast context) and compose a TypeRefInfo
-        // ArgumentType maybe UnqualifiedNameView or a TypeCtx (AstType or AstFuncType)
+        // ArgumentType maybe UnqualifiedNameView or a AstType
         template< typename ContextOrNameT >
         template< typename ContextOrNameT >
         auto CreateTypeRefInfo(ContextOrNameT typeNameOrCtx, OnNotFoundOrWrongKind policy = OnNotFoundOrWrongKind::CopeByCopy) const -> TypeRefInfo
         auto CreateTypeRefInfo(ContextOrNameT typeNameOrCtx, OnNotFoundOrWrongKind policy = OnNotFoundOrWrongKind::CopeByCopy) const -> TypeRefInfo
         {
         {
@@ -342,14 +340,14 @@ namespace AZ::ShaderCompiler
         }
         }
 
 
         // Just a helper function to compose the bigger version, that contains more data that can't be stored in the core type (TypeRefInfo).
         // Just a helper function to compose the bigger version, that contains more data that can't be stored in the core type (TypeRefInfo).
-        // Array dimensions and mtxMajor are usually stored in VarInfo for example. If you have a custom way to discover them, use this helper to make your own ExtendedTypeInfo
-        auto CreateExtendedTypeInfo(AstType* ctx, ArrayDimensions dims, Packing::MatrixMajor mtxMajor) const -> ExtendedTypeInfo;
-        auto CreateExtendedTypeInfo(AstFuncType* ctx, ArrayDimensions dims, Packing::MatrixMajor mtxMajor) const -> ExtendedTypeInfo;
+        // Array dimensions are usually stored in VarInfo for example. If you have a custom way to discover them, use this helper to make your own ExtendedTypeInfo
+        auto CreateExtendedTypeInfo(AstType* ctx, ArrayDimensions dims) const -> ExtendedTypeInfo;
+
         // Helper func which folds any possible generic dimensions into the extracted composed type
         // Helper func which folds any possible generic dimensions into the extracted composed type
         bool TryFoldGenericArrayDimensions(ExtractedComposedType& extType, vector<tree::TerminalNode*>& genericDims) const;
         bool TryFoldGenericArrayDimensions(ExtractedComposedType& extType, vector<tree::TerminalNode*>& genericDims) const;
 
 
         // another helper to streamline what to do directly with the result from ExtractTypeNameFromAstContext function families.
         // another helper to streamline what to do directly with the result from ExtractTypeNameFromAstContext function families.
-        auto CreateExtendedTypeInfo(const ExtractedComposedType& extractedComposed, ArrayDimensions dims, Packing::MatrixMajor mtxMajor) const -> ExtendedTypeInfo;
+        auto CreateExtendedTypeInfo(const ExtractedComposedType&, const TypeQualifiers&, ArrayDimensions) const -> ExtendedTypeInfo;
 
 
         //! check if current scope is a structured user defined type ("struct", "class" or "interface")
         //! check if current scope is a structured user defined type ("struct", "class" or "interface")
         bool IsScopeStructClassInterface() const;
         bool IsScopeStructClassInterface() const;
@@ -381,48 +379,10 @@ namespace AZ::ShaderCompiler
         //! queries whether a function has default parameters
         //! queries whether a function has default parameters
         bool HasAnyDefaultParameterValue(const IdentifierUID& functionUid) const;
         bool HasAnyDefaultParameterValue(const IdentifierUID& functionUid) const;
 
 
-        void ThrowAzslcOrchestratorException(uint32_t errorCode, optional<size_t> line, optional<size_t> column, const string& message) const
-        {
-            if (line && m_preprocessorLineDirectiveFinder)
-            {
-                m_preprocessorLineDirectiveFinder->OverrideAzslcExceptionFileAndLine(line.value());
-            }
-            throw AzslcOrchestratorException(errorCode, line, column, message);
-        }
-
-        void ThrowAzslcOrchestratorException(uint32_t errorCode, Token* token, const string& message) const
-        {
-            if (token && m_preprocessorLineDirectiveFinder)
-            {
-                m_preprocessorLineDirectiveFinder->OverrideAzslcExceptionFileAndLine(token->getLine());
-            }
-            throw AzslcOrchestratorException(errorCode, token, message);
-        }
-
-        void ThrowRedeclarationAsDifferentKindInternal(string_view symbolName, Kind newKind, const KindInfo& kindInfo, size_t lineNumber) const
-        {
-            if (lineNumber && m_preprocessorLineDirectiveFinder)
-            {
-                m_preprocessorLineDirectiveFinder->OverrideAzslcExceptionFileAndLine(lineNumber);
-            }
-            ThrowRedeclarationAsDifferentKind(symbolName, newKind, kindInfo, lineNumber);
-        }
-
-        void CheckQualifersAreOnlyInlineOrStatic(TypeQualifier qualifier, size_t line) const
-        {
-            auto okFlags = TypeQualifier{ StorageFlag::Inline } | StorageFlag::Static;
-            if (qualifier & ~okFlags)
-            {
-                ThrowAzslcOrchestratorException(ORCHESTRATOR_DISALLOWED_FUNCTION_MODIFIER, line,
-                    none, " Functions can only have either static or inline modifiers.");
-            }
-        }
-
     public:
     public:
         SymbolAggregator* m_symbols;
         SymbolAggregator* m_symbols;
         ScopeTracker*     m_scope;
         ScopeTracker*     m_scope;
         azslLexer*        m_lexer;
         azslLexer*        m_lexer;
-        PreprocessorLineDirectiveFinder* m_preprocessorLineDirectiveFinder;
         UnboundedArraysValidator m_unboundedArraysValidator;
         UnboundedArraysValidator m_unboundedArraysValidator;
 
 
         //! cached property informing of the presence of at least one input attachment use.
         //! cached property informing of the presence of at least one input attachment use.

+ 9 - 24
src/AzslcTypes.h

@@ -200,25 +200,10 @@ namespace AZ::ShaderCompiler
             {
             {
                 toReturn = TypeClass::TypeofExpression;
                 toReturn = TypeClass::TypeofExpression;
             }
             }
-        }
-        return toReturn;
-    }
-
-    // Get TypeClass for type inside a functype context
-    inline TypeClass AnalyzeTypeClass(AstFuncType* funcTypeNode)
-    {
-        TypeClass toReturn = TypeClass::IsNotType;
-        if (funcTypeNode != nullptr)
-        {
-            if (funcTypeNode->Void())
+            else if (typeNode->Void())
             {
             {
                 toReturn = TypeClass::Void;
                 toReturn = TypeClass::Void;
             }
             }
-            else
-            {
-                AstType* typeNode = funcTypeNode->type();
-                toReturn = AnalyzeTypeClass(typeNode);
-            }
         }
         }
         return toReturn;
         return toReturn;
     }
     }
@@ -244,17 +229,17 @@ namespace AZ::ShaderCompiler
                           || unit->Declarations[0]->attributedFunctionDeclaration() == nullptr
                           || unit->Declarations[0]->attributedFunctionDeclaration() == nullptr
                           || unit->Declarations[0]->attributedFunctionDeclaration()->functionDeclaration() == nullptr
                           || unit->Declarations[0]->attributedFunctionDeclaration()->functionDeclaration() == nullptr
                           || unit->Declarations[0]->attributedFunctionDeclaration()->functionDeclaration()->hlslFunctionDeclaration() == nullptr;
                           || unit->Declarations[0]->attributedFunctionDeclaration()->functionDeclaration()->hlslFunctionDeclaration() == nullptr;
-        AstFuncType* funcTypeNode = nullptr;
+        AstType* typeNode = nullptr;
         if (!failCondition)
         if (!failCondition)
         {
         {
-            funcTypeNode = unit->Declarations[0]->
-                               attributedFunctionDeclaration()->
-                                   functionDeclaration()->
-                                       hlslFunctionDeclaration()->
-                                           leadingTypeFunctionSignature()->
-                                               functionType();
+            typeNode = unit->Declarations[0]->
+                            attributedFunctionDeclaration()->
+                                functionDeclaration()->
+                                    hlslFunctionDeclaration()->
+                                        leadingTypeFunctionSignature()->
+                                            type();
         }
         }
-        return AnalyzeTypeClass(funcTypeNode);
+        return AnalyzeTypeClass(typeNode);
     }
     }
 
 
     struct TentativeName
     struct TentativeName

+ 81 - 111
src/AzslcUtils.h

@@ -39,7 +39,6 @@ namespace AZ::ShaderCompiler
     extern Endl             azEndl;
     extern Endl             azEndl;
 
 
     using AstType                       = azslParser::TypeContext;                  // all usertypes and predefined, but cannot be Void
     using AstType                       = azslParser::TypeContext;                  // all usertypes and predefined, but cannot be Void
-    using AstFuncType                   = azslParser::FunctionTypeContext;          // all (can be Void)
     using AstTypeofNode                 = azslParser::TypeofExpressionContext;
     using AstTypeofNode                 = azslParser::TypeofExpressionContext;
     using AstPredefinedTypeNode         = azslParser::PredefinedTypeContext;
     using AstPredefinedTypeNode         = azslParser::PredefinedTypeContext;
     using AstClassDeclNode              = azslParser::ClassDefinitionContext;
     using AstClassDeclNode              = azslParser::ClassDefinitionContext;
@@ -87,7 +86,7 @@ namespace AZ::ShaderCompiler
     inline string DiagLine(size_t line)
     inline string DiagLine(size_t line)
     {
     {
         using namespace std::string_literals;
         using namespace std::string_literals;
-        return AzslcException::s_currentSourceFileName + "("s + std::to_string(line) + "):";
+        return AzslcException::s_lineFinder->GetVirtualFileName(line) + "("s + std::to_string(line) + "):";
     }
     }
 
 
     inline string DiagLine(optional<int> line)
     inline string DiagLine(optional<int> line)
@@ -115,7 +114,8 @@ namespace AZ::ShaderCompiler
     inline void PrintWarning(DiagnosticStream& stream, Warn::EnumType level, optional<size_t> lineNumber, optional<size_t> column, Types&&... messageBits)
     inline void PrintWarning(DiagnosticStream& stream, Warn::EnumType level, optional<size_t> lineNumber, optional<size_t> column, Types&&... messageBits)
     {
     {
         stream << PushLevel{} << level
         stream << PushLevel{} << level
-               << AzslcException::MakeErrorMessage(lineNumber ? ToString(*lineNumber) : "", column ? ToString(*column) : "",
+               << AzslcException::MakeErrorMessage(lineNumber ? AzslcException::s_lineFinder->GetVirtualFileName(*lineNumber) : "",
+                                                   lineNumber ? ToString(AzslcException::s_lineFinder->GetVirtualLineNumber(*lineNumber)) : "", column ? ToString(*column) : "",
                                                    "", false, "", ConcatString(messageBits..., "\n"))
                                                    "", false, "", ConcatString(messageBits..., "\n"))
                << PopLevel{};
                << PopLevel{};
     }
     }
@@ -134,26 +134,11 @@ namespace AZ::ShaderCompiler
         PrintWarning(warningCout, level, token->getLine(), token->getCharPositionInLine() + 1, messageBits...);
         PrintWarning(warningCout, level, token->getLine(), token->getCharPositionInLine() + 1, messageBits...);
     }
     }
 
 
-    inline bool WasParsedAsPredefinedType(AstType* ctx)
-    {
-        return ctx->predefinedType();
-    }
-
-    inline bool WasParsedAsPredefinedType(AstFuncType* ctx)
-    {
-        return ctx->Void() || WasParsedAsPredefinedType(ctx->type());
-    }
-
     inline AstTypeofNode* ExtractTypeofAstNode(AstType* ctx)
     inline AstTypeofNode* ExtractTypeofAstNode(AstType* ctx)
     {
     {
         return ctx->typeofExpression();
         return ctx->typeofExpression();
     }
     }
 
 
-    inline AstTypeofNode* ExtractTypeofAstNode(AstFuncType* ctx)
-    {
-        return ctx->type() ? ExtractTypeofAstNode(ctx->type()) : nullptr;
-    }
-
     template<typename AnyOther>
     template<typename AnyOther>
     inline AstTypeofNode* ExtractTypeofAstNode(AnyOther*)
     inline AstTypeofNode* ExtractTypeofAstNode(AnyOther*)
     {
     {
@@ -273,9 +258,35 @@ namespace AZ::ShaderCompiler
     }
     }
 
 
     MAKE_REFLECTABLE_ENUM_POWER (StorageFlag,
     MAKE_REFLECTABLE_ENUM_POWER (StorageFlag,
-        Static, Const, Extern, Shared, Groupshared, Precise, Uniform, Volatile, RowMajor, ColumnMajor, In, Out, InOut, Inline, Option, Enumerator, Rootconstant, Unknown
+        Static, Const, Unsigned, RowMajor, ColumnMajor, Extern, Inline, Rootconstant, Option, Precise, Groupshared, Uniform, Volatile, Globallycoherent, In, Out, InOut, Enumerator, Other
     );
     );
-    using TypeQualifier = Flag<StorageFlag>;
+
+    inline Streamable& operator << (Streamable& out, StorageFlag::EnumType sf)
+    {
+        return out << ToLower(StorageFlag::ToStr(sf));
+    }
+
+    using Modifiers = Flag<StorageFlag>;
+    struct TypeQualifiers
+    {
+        Modifiers      m_flag;
+        vector<string> m_others;    // For qualifiers we didn't add to the enum
+
+        string GetDisplayName() const
+        {
+            vector<StorageFlag> bag;
+            auto end = std::copy_if(StorageFlag::Enumerate{}.begin(), StorageFlag::Enumerate{}.end(), std::back_inserter(bag),
+                                    [&](auto sf) -> bool { return (m_flag & sf) && (sf & ~StorageFlag::Other); });
+            // Join will call operator<< on StorageFlag::EnumType for stringification
+            return string{Trim(Join(bag.begin(), bag.end(), " ") + " " + Join(m_others.begin(), m_others.end(), " "))};
+        }
+
+        void OrMerge(const TypeQualifiers& src)
+        {
+            m_flag |= src.m_flag;
+            StableMerge(m_others, src.m_others);  // stable is key to not disturb emission tests accross platforms that could hash differently if using unordered_sets.
+        }
+    };
 
 
     struct ArrayDimensions
     struct ArrayDimensions
     {
     {
@@ -746,23 +757,34 @@ namespace AZ::ShaderCompiler
 
 
         inline uint32_t PackedSizeof(int indexInAzslPredefined_Scalar)
         inline uint32_t PackedSizeof(int indexInAzslPredefined_Scalar)
         {
         {
-            // the array is generated but it's expected to look like: {"bool", "double", "dword", "float", "half", "int", "int32_t", "int64_t", "uint", "uint32_t", "uint64_t", "unsigned int"}
+            // the array is generated but it's expected to look like:
+            // {"bool", "double", "dword", "float", "half", "int", "int16_t", "int32_t", "int64_t", "uint", "uint16_t", "uint32_t", "uint64_t"}
             // just update that code if it changes one day, the assert will pop.
             // just update that code if it changes one day, the assert will pop.
-            if (indexInAzslPredefined_Scalar == 1 || indexInAzslPredefined_Scalar == 7 || indexInAzslPredefined_Scalar == 10)
+            if (indexInAzslPredefined_Scalar == 1 || indexInAzslPredefined_Scalar == 8 || indexInAzslPredefined_Scalar == 12)
             {
             {
                 assert(string_view{"double"} == AZ::ShaderCompiler::Predefined::Scalar[1]);
                 assert(string_view{"double"} == AZ::ShaderCompiler::Predefined::Scalar[1]);
-				assert(string_view{"int64_t"} == AZ::ShaderCompiler::Predefined::Scalar[7]);
-				assert(string_view{"uint64_t"} == AZ::ShaderCompiler::Predefined::Scalar[10]);
+				assert(string_view{"int64_t"} == AZ::ShaderCompiler::Predefined::Scalar[8]);
+				assert(string_view{"uint64_t"} == AZ::ShaderCompiler::Predefined::Scalar[12]);
                 // Shader packing reference:
                 // Shader packing reference:
                 // https://docs.microsoft.com/en-us/windows/desktop/direct3dhlsl/dx-graphics-hlsl-packing-rules
                 // https://docs.microsoft.com/en-us/windows/desktop/direct3dhlsl/dx-graphics-hlsl-packing-rules
                 return 8;
                 return 8;
             }
             }
+            else if (indexInAzslPredefined_Scalar == 4 || indexInAzslPredefined_Scalar == 6 || indexInAzslPredefined_Scalar == 10)
+            {
+                // https://github.com/microsoft/DirectXShaderCompiler/wiki/Buffer-Packing
+                //   extract: "with -enable-16bit-types: HLSL half type maps to native 16-bit float16_t type"
+                //            "native 16-bit types have storage size of 16-bits (as expected)"
+                assert(string_view{"half"} == AZ::ShaderCompiler::Predefined::Scalar[4]);
+                assert(string_view{"int16_t"} == AZ::ShaderCompiler::Predefined::Scalar[6]);
+                assert(string_view{"uint16_t"} == AZ::ShaderCompiler::Predefined::Scalar[10]);
+                return 2;
+            }
             else if (indexInAzslPredefined_Scalar < 0)
             else if (indexInAzslPredefined_Scalar < 0)
             {
             {
                 return 0;  // non-predefined case, surely meaning UDT.
                 return 0;  // non-predefined case, surely meaning UDT.
             }
             }
             assert(indexInAzslPredefined_Scalar < AZ::ShaderCompiler::Predefined::Scalar.size()); // #craefulgang.
             assert(indexInAzslPredefined_Scalar < AZ::ShaderCompiler::Predefined::Scalar.size()); // #craefulgang.
-            return 4;
+            return 4;  // bool is 32 too.
         }
         }
     };
     };
 
 
@@ -1034,7 +1056,7 @@ namespace AZ::ShaderCompiler
         return ExtractSpecificParent<AstVarInitializer>(ctx);
         return ExtractSpecificParent<AstVarInitializer>(ctx);
     }
     }
 
 
-    inline azslParser::FunctionParamContext* ParamContextOverVariableDeclarator(AstUnnamedVarDecl* ctx)
+    inline azslParser::FunctionParamContext* ParamContextOverUnnamedVariableDeclarator(AstUnnamedVarDecl* ctx)
     {
     {
         return As<azslParser::FunctionParamContext*>(ctx->parent);
         return As<azslParser::FunctionParamContext*>(ctx->parent);
     }
     }
@@ -1044,9 +1066,9 @@ namespace AZ::ShaderCompiler
         return As<azslParser::VariableDeclarationContext*>(ctx->parent->parent);
         return As<azslParser::VariableDeclarationContext*>(ctx->parent->parent);
     }
     }
 
 
-    inline azslParser::TypeContext* ExtractTypeFromVariableDeclarator(AstUnnamedVarDecl* ctx, azslParser::FunctionParamContext** funcParamContextOut = nullptr)
+    inline azslParser::TypeContext* ExtractTypeFromUnnamedVariableDeclarator(AstUnnamedVarDecl* ctx, azslParser::FunctionParamContext** funcParamContextOut = nullptr)
     {
     {
-        auto* paramCtx = ParamContextOverVariableDeclarator(ctx);
+        auto* paramCtx = ParamContextOverUnnamedVariableDeclarator(ctx);
         if (paramCtx != nullptr)
         if (paramCtx != nullptr)
         {
         {
             if (funcParamContextOut)
             if (funcParamContextOut)
@@ -1087,86 +1109,44 @@ namespace AZ::ShaderCompiler
 
 
     inline bool TypeIsSamplerComparisonState(AstUnnamedVarDecl* ctx)
     inline bool TypeIsSamplerComparisonState(AstUnnamedVarDecl* ctx)
     {
     {
-        auto* typeCtx = ExtractTypeFromVariableDeclarator(ctx);
+        auto* typeCtx = ExtractTypeFromUnnamedVariableDeclarator(ctx);
         return typeCtx->predefinedType() &&
         return typeCtx->predefinedType() &&
                typeCtx->predefinedType()->samplerStatePredefinedType() &&
                typeCtx->predefinedType()->samplerStatePredefinedType() &&
                typeCtx->predefinedType()->samplerStatePredefinedType()->SamplerComparisonState();
                typeCtx->predefinedType()->samplerStatePredefinedType()->SamplerComparisonState();
     }
     }
 
 
-
-    inline azslParser::StorageFlagsContext* ExtractStorageFlagsFromVariableDeclarator(AstUnnamedVarDecl* ctx)
+    inline azslParser::StorageFlagsContext* ExtractStorageFlagsFromUnnamedVariableDeclarator(AstUnnamedVarDecl* ctx)
     {
     {
-        auto* paramCtx = ParamContextOverVariableDeclarator(ctx);
-        if (paramCtx != nullptr)
-        {
-            return paramCtx->storageFlags();
-        }
-        auto* varDeclCtx = VarDeclContextOverVariableDeclarator(As<AstNamedVarDecl*>(ctx->parent));
-        if (varDeclCtx != nullptr)
-        {
-            return varDeclCtx->storageFlags();
-        }
-        return nullptr;
+        return ExtractTypeFromUnnamedVariableDeclarator(ctx)->storageFlags();
     }
     }
 
 
-    inline bool IsFlag(azslParser::StorageFlagContext* ctx, StorageFlag flag)
+    inline StorageFlag AsFlag(azslParser::StorageFlagContext* ctx)
     {
     {
-        switch (flag)
-        {
-        case StorageFlag::Const: return ctx->Const();
-        case StorageFlag::Extern: return ctx->Extern();
-        case StorageFlag::Groupshared: return ctx->Groupshared();
-        case StorageFlag::Precise: return ctx->Precise();
-        case StorageFlag::Shared: return ctx->Shared();
-        case StorageFlag::Static: return ctx->Static();
-        case StorageFlag::Uniform: return ctx->Uniform();
-        case StorageFlag::Volatile: return ctx->Volatile();
-        case StorageFlag::RowMajor: return ctx->RowMajor();
-        case StorageFlag::ColumnMajor: return ctx->ColumnMajor();
-        case StorageFlag::In: return ctx->In();
-        case StorageFlag::Out: return ctx->Out();
-        case StorageFlag::InOut: return ctx->Inout();
-        case StorageFlag::Inline: return ctx->Inline();
-        case StorageFlag::Rootconstant: return ctx->Rootconstant();
-        case StorageFlag::Option: return ctx->Option();
-        case StorageFlag::Enumerator: return false; // Not a data-driven flag
-        case StorageFlag::Unknown: return false; // Not a data-driven flag
-        default: break;
-        }
-        return false;
+        return ctx->Const()            ? StorageFlag::Const
+             : ctx->Extern()           ? StorageFlag::Extern
+             : ctx->Groupshared()      ? StorageFlag::Groupshared
+             : ctx->Precise()          ? StorageFlag::Precise
+             : ctx->Static()           ? StorageFlag::Static
+             : ctx->Uniform()          ? StorageFlag::Uniform
+             : ctx->Volatile()         ? StorageFlag::Volatile
+             : ctx->Globallycoherent() ? StorageFlag::Globallycoherent
+             : ctx->RowMajor()         ? StorageFlag::RowMajor
+             : ctx->ColumnMajor()      ? StorageFlag::ColumnMajor
+             : ctx->In()               ? StorageFlag::In
+             : ctx->Out()              ? StorageFlag::Out
+             : ctx->Inout()            ? StorageFlag::InOut
+             : ctx->Inline()           ? StorageFlag::Inline
+             : ctx->Option()           ? StorageFlag::Option
+             : ctx->Rootconstant()     ? StorageFlag::Rootconstant
+             : ctx->Unsigned()         ? StorageFlag::Unsigned
+            // Everything else can still be stored, but won't be checked in any special way:
+            // linear, centroid, noninterpolation, noperspective, sample, point, line, triangle, lineadk, triangleadj, indices, vertices, etc...
+             : StorageFlag::Other;
     }
     }
 
 
-    inline StorageFlag AsFlag(azslParser::StorageFlagContext* ctx)
+    inline bool IsFlag(azslParser::StorageFlagContext* ctx, StorageFlag flag)
     {
     {
-        return ctx->Const()        ? StorageFlag::Const
-             : ctx->Extern()       ? StorageFlag::Extern
-             : ctx->Groupshared()  ? StorageFlag::Groupshared
-             : ctx->Precise()      ? StorageFlag::Precise
-             : ctx->Shared()       ? StorageFlag::Shared
-             : ctx->Static()       ? StorageFlag::Static
-             : ctx->Uniform()      ? StorageFlag::Uniform
-             : ctx->Volatile()     ? StorageFlag::Volatile
-             : ctx->RowMajor()     ? StorageFlag::RowMajor
-             : ctx->ColumnMajor()  ? StorageFlag::ColumnMajor
-             : ctx->In()           ? StorageFlag::In
-             : ctx->Out()          ? StorageFlag::Out
-             : ctx->Inout()        ? StorageFlag::InOut
-             : ctx->Inline()       ? StorageFlag::Inline
-             : ctx->Option()       ? StorageFlag::Option
-             : ctx->Rootconstant() ? StorageFlag::Rootconstant
-
-            // Everything unknown can still be stored, but won't be checked in any special way
-             : ctx->Linear()          ? StorageFlag::Unknown
-             : ctx->Centroid()        ? StorageFlag::Unknown
-             : ctx->Nointerpolation() ? StorageFlag::Unknown
-             : ctx->Noperspective()   ? StorageFlag::Unknown
-             : ctx->Sample()          ? StorageFlag::Unknown
-             : ctx->Point()           ? StorageFlag::Unknown
-             : ctx->Line_()           ? StorageFlag::Unknown
-             : ctx->Triangle()        ? StorageFlag::Unknown
-             : ctx->LineAdj()         ? StorageFlag::Unknown
-             : ctx->TriangleAdj()     ? StorageFlag::Unknown
-             :                          StorageFlag::Unknown;
+        return AsFlag(ctx) == flag;
     }
     }
 
 
     // Either just a string, or string + its original source node.
     // Either just a string, or string + its original source node.
@@ -1301,27 +1281,17 @@ namespace AZ::ShaderCompiler
         {
         {
             return ExtractComposedTypeNamesFromAstContext(ctx->userDefinedType(), genericDims);
             return ExtractComposedTypeNamesFromAstContext(ctx->userDefinedType(), genericDims);
         }
         }
-        else if (WasParsedAsPredefinedType(ctx))
+        else if (ctx->predefinedType())
         {
         {
             return ExtractComposedTypeNamesFromAstContext(ctx->predefinedType(), genericDims);
             return ExtractComposedTypeNamesFromAstContext(ctx->predefinedType(), genericDims);
         }
         }
-        // this could be a typeof, let's return the node for further resolve !
-        return {ExtractedTypeExt{UnqualifiedName{ctx->getText()}, ctx}};
-    }
-
-    //! from function type context (highest type level)
-    inline ExtractedComposedType ExtractComposedTypeNamesFromAstContext(AstFuncType* ctx)
-    {
-        if (ctx->type())
-        {
-            return ExtractComposedTypeNamesFromAstContext(ctx->type());
-        }
         else if (ctx->Void())
         else if (ctx->Void())
         {
         {
-            assert(string_view{AZ::ShaderCompiler::Predefined::Void[0]} == ctx->getText());
-            return {UnqualifiedName{ctx->getText()}}; // "void"
+            assert(string_view{AZ::ShaderCompiler::Predefined::Void[0]} == ctx->Void()->getText());
+            return {UnqualifiedName{ctx->Void()->getText()}}; // "void"
         }
         }
-        throw std::logic_error((DiagLine(ctx->start) + " internal error: can't extract name on unsupported expression"));
+        // this could be a typeof, let's return the node for further resolve!
+        return {ExtractedTypeExt{UnqualifiedName{ctx->getText()}, ctx}};
     }
     }
 
 
     //! Parse an HLSL semantic from a context into (semantic name, semantic index, is system value)
     //! Parse an HLSL semantic from a context into (semantic name, semantic index, is system value)

+ 96 - 4
src/GenericUtils.h

@@ -10,6 +10,7 @@
 #include "StdUtils.h"
 #include "StdUtils.h"
 #include "MetaUtils.h"
 #include "MetaUtils.h"
 
 
+#include "StreamableInterface.h"
 #include <sstream>
 #include <sstream>
 
 
 #define AZ_STRINGIFY(x) #x
 #define AZ_STRINGIFY(x) #x
@@ -18,6 +19,37 @@
 
 
 namespace AZ
 namespace AZ
 {
 {
+    // exception type of VisitFirstNonNull
+    struct AllNull : std::runtime_error
+    {
+        using runtime_error::runtime_error;
+    };
+    // Type-heterogeneity-preserving multi pointer object single visitor.
+    // Returns whatever the passed functor would.
+    // Throws if all passed objects are null.
+    template <typename Lambda, typename T>
+    invoke_result_t<Lambda, T*> VisitFirstNonNull(Lambda functor, T* object) noexcept(false)
+    {
+        if (object)
+        {
+            return functor(object);
+        }
+        throw AllNull{ "no non-null object passed" };
+    }
+
+    template <typename Lambda, typename T, typename... TOther>
+    invoke_result_t<Lambda, T*> VisitFirstNonNull(Lambda functor, T*object, TOther*... rest) noexcept(false)
+    {
+        if (object)
+        {
+            return functor(object);
+        }
+        else
+        {
+            return VisitFirstNonNull(functor, rest...);
+        }
+    }
+
     // Create substring views of views. Works like python slicing operator [n:m] with limited modulo semantics.
     // Create substring views of views. Works like python slicing operator [n:m] with limited modulo semantics.
     // what I ultimately desire is the range v.3 feature eg `letters[{2,end-2}]`
     // what I ultimately desire is the range v.3 feature eg `letters[{2,end-2}]`
     // http://ericniebler.com/2014/12/07/a-slice-of-python-in-c/
     // http://ericniebler.com/2014/12/07/a-slice-of-python-in-c/
@@ -156,6 +188,11 @@ namespace AZ
         return haystack;
         return haystack;
     }
     }
 
 
+    inline bool IsAllWhitespaces(string_view s)
+    {
+        return std::all_of(s.begin(), s.end(), [&](char c) { return std::isspace(c); });
+    }
+
     /// tells whether a position in a string is surrounded by round braces
     /// tells whether a position in a string is surrounded by round braces
     /// e.g. true  for arguments {"a(b)", 2}
     /// e.g. true  for arguments {"a(b)", 2}
     /// e.g. true  for arguments {"a()", 1}  by convention
     /// e.g. true  for arguments {"a()", 1}  by convention
@@ -212,14 +249,15 @@ namespace AZ
     template< typename Iter >
     template< typename Iter >
     string Join(Iter begin, Iter end, string_view separator = "")
     string Join(Iter begin, Iter end, string_view separator = "")
     {
     {
-        if (begin == end)
+        if (!(begin != end))
             return "";
             return "";
 
 
         std::stringstream ss;
         std::stringstream ss;
-        ss << *begin;
+        Streamable&& wrap{MakeOStreamStreamable{ss}};
+        wrap << *begin;
 
 
-        auto aggregate = [&ss, &separator](auto s) { ss << separator.data() << s; };
-        std::for_each(std::next(begin), end, aggregate);
+        auto aggregate = [&wrap, &separator](auto s) { wrap << separator.data() << s; };
+        std::for_each(++begin, end, aggregate);
 
 
         return ss.str();
         return ss.str();
     }
     }
@@ -428,6 +466,12 @@ namespace AZ
             return f;
             return f;
         }
         }
 
 
+        friend Flag& operator &= (Flag& f, const Flag& f2)
+        {
+            f.m_value &= f2.m_value;
+            return f;
+        }
+
         friend Flag& operator |= (Flag& f, EnumType e)
         friend Flag& operator |= (Flag& f, EnumType e)
         {
         {
             f.m_value |= static_cast<UnderlyingT>(e);
             f.m_value |= static_cast<UnderlyingT>(e);
@@ -445,6 +489,16 @@ namespace AZ
             return Flag(EnumType(~a_f.m_value));
             return Flag(EnumType(~a_f.m_value));
         }
         }
 
 
+        bool operator == (const Flag& rhs) const
+        {
+            return m_value == rhs.m_value;
+        }
+
+        bool operator != (const Flag& rhs) const
+        {
+            return m_value != rhs.m_value;
+        }
+
         explicit operator bool() const
         explicit operator bool() const
         {
         {
             return m_value != 0;
             return m_value != 0;
@@ -535,6 +589,41 @@ namespace AZ
     {
     {
         return (value > 0) && !(value & (value - 1));
         return (value > 0) && !(value & (value - 1));
     }
     }
+
+    //! Insert rhs at the end of lhs
+    template<typename T>
+    void AppendVector(vector<T>& lhs, vector<T> const& rhs)
+    {
+        using std::begin, std::end;
+        lhs.insert(end(lhs), begin(rhs), end(rhs));
+    }
+
+    //! Stable algorithm to uniquify elements of a vector (preserving order).
+    //! Solution Mohammed Hossain/Yuri https://stackoverflow.com/a/34341344/893406
+    template<typename T>
+    size_t RemoveDuplicatesKeepOrder(vector<T>& vec)
+    {
+        unordered_set<T> seen;
+        auto newEnd = std::remove_if(vec.begin(), vec.end(), [&seen](const T& value)
+                                     {
+                                         if (seen.find(value) != std::end(seen))
+                                             return true;
+
+                                         seen.insert(value);
+                                         return false;
+                                     });
+        vec.erase(newEnd, vec.end());
+        return vec.size();
+    }
+
+    //! Append rhs to lhs and remove duplicates
+    template<typename T>
+    void StableMerge(vector<T>& lhs, vector<T> const& rhs)
+    {
+        AppendVector(lhs, rhs);
+        RemoveDuplicatesKeepOrder(lhs);
+    }
+
 }
 }
 
 
 #ifndef NDEBUG
 #ifndef NDEBUG
@@ -619,6 +708,9 @@ namespace AZ::Tests
             assert(FindInterval(intervals, 6) == intervals.cend());
             assert(FindInterval(intervals, 6) == intervals.cend());
             assert(FindInterval(intervals, 8) != intervals.cend());
             assert(FindInterval(intervals, 8) != intervals.cend());
             assert(FindInterval(intervals, 1) == intervals.cend());
             assert(FindInterval(intervals, 1) == intervals.cend());
+
+            auto high = Infimum(intervals, 20);
+            assert(high->first == 8);
         }
         }
 
 
         assert(Replace("Srg/A", "/", "::") == "Srg::A");
         assert(Replace("Srg/A", "/", "::") == "Srg::A");

+ 6 - 12
src/NewLineCounterStream.h

@@ -7,25 +7,22 @@
  */
  */
 #pragma once
 #pragma once
 
 
-#include "ReflectableEnums.h"
-
-#include <ostream>
+#include "StreamableInterface.h"
 
 
 namespace AZ
 namespace AZ
 {
 {
     //! Wraps and forwards data to a std::ostream,
     //! Wraps and forwards data to a std::ostream,
     //! Overrides operator<< for char, const char * and string data and counts
     //! Overrides operator<< for char, const char * and string data and counts
     //! the number of '\n' (new line) characters that go through it.
     //! the number of '\n' (new line) characters that go through it.
-    class NewLineCounterStream
+    class NewLineCounterStream : public MakeOStreamStreamable
     {
     {
         typedef NewLineCounterStream Self;
         typedef NewLineCounterStream Self;
 
 
     public:
     public:
 
 
-        explicit NewLineCounterStream(std::ostream& streamToWrap) : m_wrappedStream(streamToWrap)
-        {}
+        using MakeOStreamStreamable::MakeOStreamStreamable;
 
 
-        Self& operator<<(char c)
+        Self& operator<<(char c) override
         {
         {
             if (c == '\n')
             if (c == '\n')
             {
             {
@@ -35,7 +32,7 @@ namespace AZ
             return *this;
             return *this;
         }
         }
 
 
-        Self& operator<<(const char * nts)
+        Self& operator<<(const char * nts) override
         {
         {
             const char * tmp = nts;
             const char * tmp = nts;
             while(char c = *tmp++)
             while(char c = *tmp++)
@@ -49,7 +46,7 @@ namespace AZ
             return *this;
             return *this;
         }
         }
 
 
-        Self& operator<<(const std::string& str)
+        Self& operator<<(const string& str) override
         {
         {
             for (char c : str)
             for (char c : str)
             {
             {
@@ -71,10 +68,7 @@ namespace AZ
 
 
         int GetLineCount() const { return m_lineCount; }
         int GetLineCount() const { return m_lineCount; }
 
 
-        bool IsTheSameStream(std::ostream& stream) const { return &stream == &m_wrappedStream; } 
-
     private:
     private:
-        std::ostream& m_wrappedStream;
         int m_lineCount = 0;
         int m_lineCount = 0;
     };
     };
 }
 }

+ 12 - 12
src/PadToAttributeMutator.cpp

@@ -18,27 +18,27 @@ namespace AZ::ShaderCompiler
         if (attrInfo.m_argList.size() != 1)
         if (attrInfo.m_argList.size() != 1)
         {
         {
             auto errorMsg = FormatString("The [[pad_to(N)]] attribute only accepts one argument of integral type. %zu arguments were given.", attrInfo.m_argList.size());
             auto errorMsg = FormatString("The [[pad_to(N)]] attribute only accepts one argument of integral type. %zu arguments were given.", attrInfo.m_argList.size());
-            m_ir.ThrowAzslcIrException(IR_INVALID_PAD_TO_ARGUMENTS, attrInfo.m_lineNumber, errorMsg);
+            throw AzslcIrException{IR_INVALID_PAD_TO_ARGUMENTS, errorMsg, attrInfo.m_lineNumber};
         }
         }
         //Is the argument integral?
         //Is the argument integral?
         if (!holds_alternative<ConstNumericVal>(attrInfo.m_argList[0]))
         if (!holds_alternative<ConstNumericVal>(attrInfo.m_argList[0]))
         {
         {
             string errorMsg("The [[pad_to(N)]] attribute only accepts one argument of integral type. A non integral argument was given.");
             string errorMsg("The [[pad_to(N)]] attribute only accepts one argument of integral type. A non integral argument was given.");
-            m_ir.ThrowAzslcIrException(IR_INVALID_PAD_TO_ARGUMENTS, attrInfo.m_lineNumber, errorMsg);
+            throw AzslcIrException{IR_INVALID_PAD_TO_ARGUMENTS, errorMsg, attrInfo.m_lineNumber};
         }
         }
         // Read the integral.
         // Read the integral.
         auto pad_to_value = ExtractValueAs<uint32_t>(get<ConstNumericVal>(attrInfo.m_argList[0]), uint32_t(0));
         auto pad_to_value = ExtractValueAs<uint32_t>(get<ConstNumericVal>(attrInfo.m_argList[0]), uint32_t(0));
         if (!pad_to_value)
         if (!pad_to_value)
         {
         {
             string errorMsg("Failed to read input integral to [[pad_to(N)]].");
             string errorMsg("Failed to read input integral to [[pad_to(N)]].");
-            m_ir.ThrowAzslcIrException(IR_INVALID_PAD_TO_ARGUMENTS, attrInfo.m_lineNumber, errorMsg);
+            throw AzslcIrException{IR_INVALID_PAD_TO_ARGUMENTS, errorMsg, attrInfo.m_lineNumber};
         }
         }
         // Must be a multiple of 4.
         // Must be a multiple of 4.
         static const uint32_t MultipleOf = 4;
         static const uint32_t MultipleOf = 4;
         if (pad_to_value & (MultipleOf-1))
         if (pad_to_value & (MultipleOf-1))
         {
         {
             auto errorMsg = FormatString("Invalid integral in [[pad_to(N)]]. %u is not a multiple of %u", pad_to_value, MultipleOf);
             auto errorMsg = FormatString("Invalid integral in [[pad_to(N)]]. %u is not a multiple of %u", pad_to_value, MultipleOf);
-            m_ir.ThrowAzslcIrException(IR_INVALID_PAD_TO_ARGUMENTS, attrInfo.m_lineNumber, errorMsg);
+            throw AzslcIrException{IR_INVALID_PAD_TO_ARGUMENTS, errorMsg, attrInfo.m_lineNumber};
         }
         }
 
 
         auto& [curScopeId, curScopeKindInfo] = m_ir.GetCurrentScopeIdAndKind();
         auto& [curScopeId, curScopeKindInfo] = m_ir.GetCurrentScopeIdAndKind();
@@ -51,7 +51,7 @@ namespace AZ::ShaderCompiler
                 auto errorMsg = FormatString("The [[pad_to(N)]] attribute must be added after a member variable."
                 auto errorMsg = FormatString("The [[pad_to(N)]] attribute must be added after a member variable."
                                              " The current scope '%.*s' doesn't have a declared variable yet.",
                                              " The current scope '%.*s' doesn't have a declared variable yet.",
                                              static_cast<int>(curScopeId.GetName().size()), curScopeId.GetName().data());
                                              static_cast<int>(curScopeId.GetName().size()), curScopeId.GetName().data());
-                m_ir.ThrowAzslcIrException(IR_INVALID_PAD_TO_LOCATION, attrInfo.m_lineNumber, errorMsg);
+                throw AzslcIrException{IR_INVALID_PAD_TO_LOCATION, errorMsg, attrInfo.m_lineNumber};
             }
             }
             auto structItor = m_scopesToPad.find(curScopeId);
             auto structItor = m_scopesToPad.find(curScopeId);
             if (structItor == m_scopesToPad.end())
             if (structItor == m_scopesToPad.end())
@@ -64,7 +64,7 @@ namespace AZ::ShaderCompiler
             {
             {
                 // It appears that there are two consecutive [[pad_to(N)]] attributes. This is an error.
                 // It appears that there are two consecutive [[pad_to(N)]] attributes. This is an error.
                 auto errorMsg = string("Two consecutive [[pad_to(N)]] attributes are not allowed inside 'struct'.");
                 auto errorMsg = string("Two consecutive [[pad_to(N)]] attributes are not allowed inside 'struct'.");
-                m_ir.ThrowAzslcIrException(IR_INVALID_PAD_TO_LOCATION, attrInfo.m_lineNumber, errorMsg);
+                throw AzslcIrException{IR_INVALID_PAD_TO_LOCATION, errorMsg, attrInfo.m_lineNumber};
             }
             }
             varInfoUidToPadMap[varUid] = pad_to_value;
             varInfoUidToPadMap[varUid] = pad_to_value;
         }
         }
@@ -73,7 +73,7 @@ namespace AZ::ShaderCompiler
             auto errorMsg = FormatString("The [[pad_to(N)]] attribute is only supported inside  inside 'struct', 'class' or 'ShaderResourceGroup'."
             auto errorMsg = FormatString("The [[pad_to(N)]] attribute is only supported inside  inside 'struct', 'class' or 'ShaderResourceGroup'."
                                          " The current scope '%.*s' is not one of those scope types.",
                                          " The current scope '%.*s' is not one of those scope types.",
                 static_cast<int>(curScopeId.GetName().size()), curScopeId.GetName().data());
                 static_cast<int>(curScopeId.GetName().size()), curScopeId.GetName().data());
-            m_ir.ThrowAzslcIrException(IR_INVALID_PAD_TO_LOCATION, attrInfo.m_lineNumber, errorMsg);
+            throw AzslcIrException{IR_INVALID_PAD_TO_LOCATION, errorMsg, attrInfo.m_lineNumber};
         }
         }
     }
     }
 
 
@@ -226,7 +226,7 @@ namespace AZ::ShaderCompiler
                                                           static_cast<int>(scopeUid.m_name.size()), scopeUid.m_name.data(),
                                                           static_cast<int>(scopeUid.m_name.size()), scopeUid.m_name.data(),
                                                           padToBoundary);
                                                           padToBoundary);
                     const auto * varInfoPtr= m_ir.GetSymbolSubAs<VarInfo>(varUid.m_name);
                     const auto * varInfoPtr= m_ir.GetSymbolSubAs<VarInfo>(varUid.m_name);
-                    m_ir.ThrowAzslcIrException(IR_PAD_TO_CASE_REQUIRES_POWER_OF_TWO, varInfoPtr->GetOriginalLineNumber(), errorMsg);
+                    throw AzslcIrException{IR_PAD_TO_CASE_REQUIRES_POWER_OF_TWO, errorMsg, varInfoPtr->GetOriginalLineNumber()};
                 }
                 }
                 const uint32_t alignedOffset = Packing::AlignUp(nextMemberOffset, padToBoundary);
                 const uint32_t alignedOffset = Packing::AlignUp(nextMemberOffset, padToBoundary);
                 bytesToAdd = alignedOffset - nextMemberOffset;
                 bytesToAdd = alignedOffset - nextMemberOffset;
@@ -434,13 +434,13 @@ namespace AZ::ShaderCompiler
             ExtractedTypeExt padType = { UnqualifiedNameView(typeName), nullptr };
             ExtractedTypeExt padType = { UnqualifiedNameView(typeName), nullptr };
             if (itemsCount < 1)
             if (itemsCount < 1)
             {
             {
-                newVarInfo.m_typeInfoExt = ExtendedTypeInfo{ m_ir.m_sema.CreateTypeRefInfo(padType),
-                             {}, {}, {}, Packing::MatrixMajor::Default };
+                newVarInfo.m_typeInfoExt = ExtendedTypeInfo{m_ir.m_sema.CreateTypeRefInfo(padType), {},
+                                                            {}, {}, {}, Packing::MatrixMajor::Default };
             }
             }
             else
             else
             {
             {
-                newVarInfo.m_typeInfoExt = ExtendedTypeInfo{ m_ir.m_sema.CreateTypeRefInfo(padType),
-                    {}, {{itemsCount}}, {}, Packing::MatrixMajor::Default };
+                newVarInfo.m_typeInfoExt = ExtendedTypeInfo{m_ir.m_sema.CreateTypeRefInfo(padType), {},
+                                                            {}, {{itemsCount}}, {}, Packing::MatrixMajor::Default };
             }
             }
             newVarKind.GetSubRefAs<VarInfo>() = newVarInfo;
             newVarKind.GetSubRefAs<VarInfo>() = newVarInfo;
             return newVarUid;
             return newVarUid;

+ 47 - 12
src/PreprocessorLineDirectiveFinder.h

@@ -1,7 +1,7 @@
-/*
+/*
  * Copyright (c) Contributors to the Open 3D Engine Project.
  * Copyright (c) Contributors to the Open 3D Engine Project.
  * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- * 
+ *
  * SPDX-License-Identifier: Apache-2.0 OR MIT
  * SPDX-License-Identifier: Apache-2.0 OR MIT
  *
  *
  */
  */
@@ -20,7 +20,7 @@ namespace AZ::ShaderCompiler
         string m_containingFilename;
         string m_containingFilename;
     };
     };
 
 
-    //! An interface capable of finding the original line in the source file
+    //! A helper capable of finding the original line in the source file
     //! for the given flat file that is being compiled.
     //! for the given flat file that is being compiled.
     //! A preprocessed azsl file is the file generated by MCPP after all #include and macro definitions
     //! A preprocessed azsl file is the file generated by MCPP after all #include and macro definitions
     //! have been resolved in a single flat file.
     //! have been resolved in a single flat file.
@@ -29,18 +29,53 @@ namespace AZ::ShaderCompiler
     class PreprocessorLineDirectiveFinder
     class PreprocessorLineDirectiveFinder
     {
     {
     public:
     public:
-        virtual ~PreprocessorLineDirectiveFinder() {};
+        const LineDirectiveInfo* GetNearestPreprocessorLineDirective(size_t physicalLine) const
+        {
+            auto it = Infimum(m_lineMap, physicalLine);
+            return it == m_lineMap.cend() ? nullptr : &it->second;
+        }
+
+        //! The "virtual" line is the #line-directive adjusted line number, as opposed to a physical line (given by tokens)
+        size_t GetVirtualLineNumber(const LineDirectiveInfo& lineInfo, size_t physicalLine) const
+        {
+            //  visual explanation:
+            // code editor line │ actual source                                   │ remark
+            // ─────────────────┼─────────────────────────────────────────────────┼────────────────────────────
+            //                1 │ # line 4 "name"                                 │  ┐
+            //                2 │              // this is now line 4, virtually   │  ├  physical distance = 3-1 = 2
+            //                3 │ $yntaX error                                    │  ┘
+            //
+            // the error is on physical line 3, but should be reported as being on line 5 (physical-distance + line## - 1)
+            const size_t physicalDistance = physicalLine - lineInfo.m_physicalTokenLine;
+            return physicalDistance + lineInfo.m_forcedLineNumber - 1;  // virtual line
+        }
+
+        //! More compact API for those who just need the final count adjustment, without access to the LineDirectiveInfo
+        size_t GetVirtualLineNumber(size_t physicalLine) const
+        {
+            const LineDirectiveInfo* found = GetNearestPreprocessorLineDirective(physicalLine);
+            return found ? GetVirtualLineNumber(*found, physicalLine)
+                         : physicalLine;  // Return unadjusted in case of abscence of a virtual space.
+        }
 
 
-        virtual const LineDirectiveInfo* GetNearestPreprocessorLineDirective(size_t azslLineNumber) const = 0;
+        const string& GetVirtualFileName(size_t physicalLine) const
+        {
+            const LineDirectiveInfo* found = GetNearestPreprocessorLineDirective(physicalLine);
+            return found ? found->m_containingFilename
+                         : m_physicalSourceFileName;  // Return unadjusted in case of abscence of a virtual space.
+        }
+
+        void PushLineDirective(const LineDirectiveInfo& ldi)
+        {
+            m_lineMap[ldi.m_physicalTokenLine] = ldi;
+        }
 
 
-        virtual size_t GetLineNumberInOriginalSourceFile(const LineDirectiveInfo& lineInfo, size_t azslLineNumber) const
+        void PushLineDirective(LineDirectiveInfo&& ldi)
         {
         {
-            const size_t lineNumberOfDirectiveinAzslSource = lineInfo.m_physicalTokenLine;
-            const size_t relativeLineNumber = azslLineNumber - lineNumberOfDirectiveinAzslSource;
-            const size_t absoluteLineNumberInIncludedFile = lineInfo.m_forcedLineNumber + relativeLineNumber - 1;
-            return absoluteLineNumberInIncludedFile;
+            m_lineMap.emplace(ldi.m_physicalTokenLine, ldi);
         }
         }
 
 
-        virtual void OverrideAzslcExceptionFileAndLine(size_t azslLineNumber) const = 0;
+        map<size_t, LineDirectiveInfo> m_lineMap;
+        string                         m_physicalSourceFileName;
     };
     };
-}
+}

+ 4 - 0
src/ReflectableEnums.h

@@ -110,6 +110,10 @@ struct EnumTypeName\
     struct Iterator\
     struct Iterator\
     {\
     {\
         EnumType m_i;\
         EnumType m_i;\
+        using iterator_category = std::forward_iterator_tag;\
+        using difference_type   = int;\
+        using value_type        = EnumType;\
+        using reference         = EnumType&;\
         constexpr EnumType operator*() { return m_i; }\
         constexpr EnumType operator*() { return m_i; }\
         constexpr Iterator operator++() { m_i = static_cast<EnumType>(EnumeratorNextOp); return {m_i}; }\
         constexpr Iterator operator++() { m_i = static_cast<EnumType>(EnumeratorNextOp); return {m_i}; }\
         constexpr bool operator!=(const Iterator& rhs) const { return m_i != rhs.m_i; }\
         constexpr bool operator!=(const Iterator& rhs) const { return m_i != rhs.m_i; }\

+ 0 - 32
src/StdUtils.h

@@ -66,38 +66,6 @@ namespace AZ
     using std::unordered_set;
     using std::unordered_set;
     using std::vector;
     using std::vector;
 
 
-    // exception type of VisitFirstNonNull
-    struct AllNull : std::runtime_error
-    {
-        using runtime_error::runtime_error;
-    };
-
-    // Type-heterogeneity-preserving multi pointer object single visitor.
-    // Returns whatever the passed functor would.
-    // Throws if all passed objects are null.
-    template <typename Lambda, typename T>
-    invoke_result_t<Lambda, T*> VisitFirstNonNull(Lambda functor, T* object) noexcept(false)
-    {
-        if (object)
-        {
-            return functor(object);
-        }
-        throw AllNull{ "no non-null object passed" };
-    }
-
-    template <typename Lambda, typename T, typename... TOther>
-    invoke_result_t<Lambda, T*> VisitFirstNonNull(Lambda functor, T*object, TOther*... rest) noexcept(false)
-    {
-        if (object)
-        {
-            return functor(object);
-        }
-        else
-        {
-            return VisitFirstNonNull(functor, rest...);
-        }
-    }
-
     template <typename SetType>
     template <typename SetType>
     void SetMerge(SetType& dest, SetType& src)
     void SetMerge(SetType& dest, SetType& src)
     {
     {

+ 51 - 0
src/StreamableInterface.h

@@ -0,0 +1,51 @@
+/*
+* Copyright (c) Contributors to the Open 3D Engine Project.
+* For complete copyright and license terms please see the LICENSE at the root of this distribution.
+* 
+* SPDX-License-Identifier: Apache-2.0 OR MIT
+*
+*/
+#pragma once
+
+#include <ostream>
+
+namespace AZ
+{
+    //! This class aims at being an abstract base to replace std::ostream which is not deriveable.
+    //! With this facility, stream operator << becomes virtualizable, and emitters/reflectors may stream to
+    //! various types of special streaming service, notably the "linefeed counter" you'll find in NewLineCounterStream.h
+    class Streamable
+    {
+    public:
+        virtual Streamable& operator<<(char) = 0;    // template virtual method are forbidden in C++, so manual listing :(
+        virtual Streamable& operator<<(const char*) = 0;
+        virtual Streamable& operator<<(double) = 0;
+        virtual Streamable& operator<<(int64_t) = 0;
+        virtual Streamable& operator<<(uint32_t) = 0;
+        virtual Streamable& operator<<(size_t) = 0;
+        virtual Streamable& operator<<(bool) = 0;
+        virtual Streamable& operator<<(const std::string&) = 0;
+    };
+
+    // trivial concrete version to wrap classic std::ostream objects
+    class MakeOStreamStreamable : public Streamable
+    {
+    public:
+        MakeOStreamStreamable(std::ostream& streamToWrap)
+            : m_wrappedStream(streamToWrap)
+        {}
+
+        Streamable& operator<<(char c) override                 { m_wrappedStream << c; return *this; }
+        Streamable& operator<<(const char* nts) override        { m_wrappedStream << nts; return *this; }
+        Streamable& operator<<(const std::string& str) override { m_wrappedStream << str; return *this; }
+        Streamable& operator<<(double n) override               { m_wrappedStream << n; return *this; }
+        Streamable& operator<<(int64_t n) override              { m_wrappedStream << n; return *this; }
+        Streamable& operator<<(uint32_t n) override             { m_wrappedStream << n; return *this; }
+        Streamable& operator<<(size_t n) override               { m_wrappedStream << n; return *this; }
+        Streamable& operator<<(bool b) override                 { m_wrappedStream << b; return *this; }
+
+    protected:
+        std::ostream& m_wrappedStream;
+    };
+
+}

+ 25 - 8
src/Texture2DMSto2DCodeMutator.cpp

@@ -321,7 +321,7 @@ namespace AZ::ShaderCompiler
             }
             }
 
 
             //Semantics can be part of a struct, or function parameters.
             //Semantics can be part of a struct, or function parameters.
-            if (ParamContextOverVariableDeclarator(varInfo->m_declNode))
+            if (ParamContextOverUnnamedVariableDeclarator(varInfo->m_declNode))
             {
             {
                 // This is a function parameter.
                 // This is a function parameter.
                 IdentifierUID functionUid = IdentifierUID{ GetParentName(uid.GetName()) };
                 IdentifierUID functionUid = IdentifierUID{ GetParentName(uid.GetName()) };
@@ -336,18 +336,35 @@ namespace AZ::ShaderCompiler
         }
         }
     }
     }
 
 
+    static vector<Token*> NodeTokens(ParserRuleContext* node, TokenStream* stream)
+    {
+        vector<Token*> tokens;
+        misc::Interval src = node->getSourceInterval();
+        for (ssize_t i = src.a; i <= src.b; ++i)
+        {
+            tokens.push_back(stream->get(i));
+        }
+        return tokens;
+    }
+
     //! A helper method that figures out how a function argument should look like
     //! A helper method that figures out how a function argument should look like
     //! when mutated into a local variable.
     //! when mutated into a local variable.
-    static string GetLocalVariableStringFromFunctionArgument(const UnqualifiedName& uqName, AstUnnamedVarDecl* ctx, const char * initializationValue)
+    static string GetLocalVariableStringFromFunctionArgument(TokenStream* stream, const UnqualifiedName& uqName, AstUnnamedVarDecl* ctx, const char * initializationValue)
     {
     {
         azslParser::FunctionParamContext* paramCtx = nullptr;
         azslParser::FunctionParamContext* paramCtx = nullptr;
-        auto typeCtx = ExtractTypeFromVariableDeclarator(ctx, &paramCtx);
-        auto variableTypeStr = typeCtx->getText();
+        auto typeCtx = ExtractTypeFromUnnamedVariableDeclarator(ctx, &paramCtx);
+        auto tokens = NodeTokens(typeCtx, stream);
+        vector<string> stringlets;
+        TransformCopy(tokens, stringlets, [&](Token* t) { return t->getText(); });
+        vector<string> filtered;
+        std::copy_if(stringlets.begin(), stringlets.end(), std::back_inserter(filtered), [&](auto subtok)
+                     { return subtok != "in" && subtok != "out" && subtok != "inout" && !IsAllWhitespaces(subtok); });
+        string typeHlsl = Join(filtered, " ");
         if (initializationValue)
         if (initializationValue)
         {
         {
-            return FormatString("%s %s = (%s)%s;\n", variableTypeStr.c_str(), uqName.c_str(), variableTypeStr.c_str(), initializationValue);
+            return FormatString("%s %s = (%s)%s;\n", typeHlsl.c_str(), uqName.c_str(), typeHlsl.c_str(), initializationValue);
         }
         }
-        return FormatString("%s %s;\n", variableTypeStr.c_str(), uqName.c_str());
+        return FormatString("%s %s;\n", typeHlsl.c_str(), uqName.c_str());
     }
     }
 
 
     void Texture2DMSto2DCodeMutator::DropMultiSamplingSystemSemanticFromFunction(const IdentifierUID& varUid, const VarInfo* varInfo, const string& systemSemanticName, const IdentifierUID& functionUid)
     void Texture2DMSto2DCodeMutator::DropMultiSamplingSystemSemanticFromFunction(const IdentifierUID& varUid, const VarInfo* varInfo, const string& systemSemanticName, const IdentifierUID& functionUid)
@@ -386,7 +403,7 @@ namespace AZ::ShaderCompiler
             initializationValue = "-1";
             initializationValue = "-1";
         }
         }
 
 
-        auto newCode = GetLocalVariableStringFromFunctionArgument(varUid.GetNameLeaf(), varInfo->m_declNode, initializationValue.c_str());
+        auto newCode = GetLocalVariableStringFromFunctionArgument(m_stream, varUid.GetNameLeaf(), varInfo->m_declNode, initializationValue.c_str());
 
 
         // The idea is to find the TokenIndex of the opening bracket "{",
         // The idea is to find the TokenIndex of the opening bracket "{",
         // Once we know that TokenIndex we can add code mutation as an appended
         // Once we know that TokenIndex we can add code mutation as an appended
@@ -432,7 +449,7 @@ namespace AZ::ShaderCompiler
         {
         {
             initializationValue = "-1";
             initializationValue = "-1";
         }
         }
-        auto newCode = GetLocalVariableStringFromFunctionArgument(varUid.GetNameLeaf(), varInfo->m_declNode, initializationValue.c_str());
+        auto newCode = GetLocalVariableStringFromFunctionArgument(m_stream, varUid.GetNameLeaf(), varInfo->m_declNode, initializationValue.c_str());
         auto tokenIndex = varInfo->m_declNode->start->getTokenIndex();
         auto tokenIndex = varInfo->m_declNode->start->getTokenIndex();
         CodeMutation mutation;
         CodeMutation mutation;
         mutation.m_prepend.emplace("static const ");
         mutation.m_prepend.emplace("static const ");

+ 3 - 1
src/Texture2DMSto2DCodeMutator.h

@@ -31,7 +31,7 @@ namespace AZ::ShaderCompiler
         , public ICodeEmissionMutator
         , public ICodeEmissionMutator
     {
     {
         Texture2DMSto2DCodeMutator() = delete;
         Texture2DMSto2DCodeMutator() = delete;
-        explicit Texture2DMSto2DCodeMutator(IntermediateRepresentation* ir) : m_ir(ir) {}
+        explicit Texture2DMSto2DCodeMutator(IntermediateRepresentation* ir, CommonTokenStream* stream) : m_ir(ir), m_stream(stream) {}
         virtual ~Texture2DMSto2DCodeMutator() = default;
         virtual ~Texture2DMSto2DCodeMutator() = default;
 
 
         ///////////////////////////////////////////////////////////////////////
         ///////////////////////////////////////////////////////////////////////
@@ -92,6 +92,8 @@ namespace AZ::ShaderCompiler
         //! Cached when RunMiddleEndMutations is called.
         //! Cached when RunMiddleEndMutations is called.
         IntermediateRepresentation* m_ir = nullptr;
         IntermediateRepresentation* m_ir = nullptr;
 
 
+        CommonTokenStream* m_stream = nullptr;
+
         //! A map of TokenIndex to Mutation. If a TokenIndex is present,
         //! A map of TokenIndex to Mutation. If a TokenIndex is present,
         //! it means it should produce mutated text during emission.
         //! it means it should produce mutated text during emission.
         unordered_map< ssize_t, CodeMutation > m_mutations;
         unordered_map< ssize_t, CodeMutation > m_mutations;

+ 38 - 19
src/azslLexer.g4

@@ -6,7 +6,7 @@ modifications by Amazon. C 2018
  */
  */
 lexer grammar azslLexer;
 lexer grammar azslLexer;
 
 
-channels { PREPROCESSOR }
+channels { PREPROCESSOR, COMMENTS }
 
 
 AppendStructuredBuffer : 'AppendStructuredBuffer';
 AppendStructuredBuffer : 'AppendStructuredBuffer';
 Bool : 'bool';
 Bool : 'bool';
@@ -36,9 +36,9 @@ ByteAddressBuffer : 'ByteAddressBuffer';
 Break : 'break';
 Break : 'break';
 Case : 'case';
 Case : 'case';
 CBuffer : 'cbuffer';
 CBuffer : 'cbuffer';
+Centroid : 'centroid';
 ConstantBuffer : 'constantbuffer';
 ConstantBuffer : 'constantbuffer';
 ConstantBufferCamel : 'ConstantBuffer';
 ConstantBufferCamel : 'ConstantBuffer';
-Centroid : 'centroid';
 Class : 'class';
 Class : 'class';
 ColumnMajor : 'column_major';
 ColumnMajor : 'column_major';
 Const : 'const';
 Const : 'const';
@@ -70,6 +70,7 @@ Double4x3 : 'double4x3';
 Double4x4 : 'double4x4';
 Double4x4 : 'double4x4';
 Else : 'else';
 Else : 'else';
 Enum : 'enum';
 Enum : 'enum';
+Export : 'export';
 Extern : 'extern';
 Extern : 'extern';
 FeedbackTexture2D : 'FeedbackTexture2D';
 FeedbackTexture2D : 'FeedbackTexture2D';
 FeedbackTexture2DArray : 'FeedbackTexture2DArray';
 FeedbackTexture2DArray : 'FeedbackTexture2DArray';
@@ -96,6 +97,7 @@ Float4x3 : 'float4x3';
 Float4x4 : 'float4x4';
 Float4x4 : 'float4x4';
 For : 'for';
 For : 'for';
 Groupshared : 'groupshared';
 Groupshared : 'groupshared';
+Globallycoherent : 'globallycoherent';
 Global: 'global';
 Global: 'global';
 Half : 'half';
 Half : 'half';
 Half1 : 'half1';
 Half1 : 'half1';
@@ -125,6 +127,7 @@ Rootconstant : 'rootconstant';   // Amazon extension
 Inout : 'inout' | 'in out';
 Inout : 'inout' | 'in out';
 InputPatch : 'InputPatch';
 InputPatch : 'InputPatch';
 Int : 'int';
 Int : 'int';
+Int16_t : 'int16_t';
 Int32_t : 'int32_t';
 Int32_t : 'int32_t';
 Int64_t : 'int64_t';
 Int64_t : 'int64_t';
 Int1 : 'int1';
 Int1 : 'int1';
@@ -165,6 +168,9 @@ Packoffset : 'packoffset';
 Point : 'point';
 Point : 'point';
 PointStream : 'PointStream';
 PointStream : 'PointStream';
 Precise : 'precise';
 Precise : 'precise';
+// 'payload' is a free identifier as well, DXC has a hard literal keyword that disrupts semantic understanding in some contexts
+// notably as variable declarator, if you mention payload it will say «'payload' object must be an in parameter»
+// but actually the name the programmer choses doesn't have to be 'payload'. (Also SV_RayPayload appears to be a fake semantic)
 RasterizerOrderedBuffer : 'RasterizerOrderedBuffer';
 RasterizerOrderedBuffer : 'RasterizerOrderedBuffer';
 RasterizerOrderedByteAddressBuffer : 'RasterizerOrderedByteAddressBuffer';
 RasterizerOrderedByteAddressBuffer : 'RasterizerOrderedByteAddressBuffer';
 RasterizerOrderedStructuredBuffer : 'RasterizerOrderedStructuredBuffer';
 RasterizerOrderedStructuredBuffer : 'RasterizerOrderedStructuredBuffer';
@@ -190,14 +196,17 @@ Sample : 'sample';
 Sampler : 'sampler';
 Sampler : 'sampler';
 SamplerCapitalS : 'Sampler';
 SamplerCapitalS : 'Sampler';
 SamplerComparisonState : 'SamplerComparisonState';
 SamplerComparisonState : 'SamplerComparisonState';
-SamplerState : 'SamplerState';
+SamplerStateCamel : 'SamplerState';
+SamplerState : 'sampler_state';
 Shared : 'shared';
 Shared : 'shared';
+SNorm : 'snorm';
 Static : 'static';
 Static : 'static';
 Struct : 'struct';
 Struct : 'struct';
 StructuredBuffer : 'StructuredBuffer';
 StructuredBuffer : 'StructuredBuffer';
 SubpassInput : 'SubpassInput';
 SubpassInput : 'SubpassInput';
 SubpassInputMS : 'SubpassInputMS';
 SubpassInputMS : 'SubpassInputMS';
 Switch : 'switch';
 Switch : 'switch';
+TBuffer : 'tbuffer';
 Texture1D : 'Texture1D';
 Texture1D : 'Texture1D';
 Texture1DArray : 'Texture1DArray';
 Texture1DArray : 'Texture1DArray';
 Texture2D : 'Texture2D';
 Texture2D : 'Texture2D';
@@ -213,12 +222,9 @@ TriangleStream : 'TriangleStream';
 Uniform : 'uniform';
 Uniform : 'uniform';
 // For the --listpredefined option to work, we absolutely need all types to exist in (simple) rules
 // For the --listpredefined option to work, we absolutely need all types to exist in (simple) rules
 // that can return strings from Vocabulary::getLiteralName()
 // that can return strings from Vocabulary::getLiteralName()
-// so that rule: Uint : 'uint' | 'unsigned int' | 'dword' # can't be used because it's non-trivialness makes it a non-citizen.
+// so that rule: Uint : 'uint' | 'dword' # can't be used because it's non-trivialness makes it a non-citizen.
 // I tried to recompose the rule with fragments, but fragment also are not listed in the vocabulary. (_literalNames)
 // I tried to recompose the rule with fragments, but fragment also are not listed in the vocabulary. (_literalNames)
 Uint : 'uint';
 Uint : 'uint';
-Uint32_t : 'uint32_t';
-Uint64_t : 'uint64_t';
-UnsignedInt : 'unsigned int';
 Uint1 : 'uint1';
 Uint1 : 'uint1';
 Uint2 : 'uint2';
 Uint2 : 'uint2';
 Uint3 : 'uint3';
 Uint3 : 'uint3';
@@ -239,6 +245,11 @@ Uint4x1 : 'uint4x1';
 Uint4x2 : 'uint4x2';
 Uint4x2 : 'uint4x2';
 Uint4x3 : 'uint4x3';
 Uint4x3 : 'uint4x3';
 Uint4x4 : 'uint4x4';
 Uint4x4 : 'uint4x4';
+Uint16_t : 'uint16_t';
+Uint32_t : 'uint32_t';
+Uint64_t : 'uint64_t';
+UNorm : 'unorm';
+Unsigned : 'unsigned';
 Dword : 'dword';
 Dword : 'dword';
 // Amazon addition: DXC didn't advertise it, but the vector/matrix forms of dword are now accepted
 // Amazon addition: DXC didn't advertise it, but the vector/matrix forms of dword are now accepted
 Dword1 : 'dword1';
 Dword1 : 'dword1';
@@ -266,7 +277,7 @@ Volatile : 'volatile';
 Void : 'void';
 Void : 'void';
 While : 'while';
 While : 'while';
 
 
-// libray subobject types from modern HLSL:
+// library subobject types from modern HLSL:
 StateObjectConfig : 'StateObjectConfig';
 StateObjectConfig : 'StateObjectConfig';
 LocalRootSignature : 'LocalRootSignature';
 LocalRootSignature : 'LocalRootSignature';
 GlobalRootSignature : 'GlobalRootSignature';
 GlobalRootSignature : 'GlobalRootSignature';
@@ -376,25 +387,26 @@ Dot : '.';
 True : 'true';
 True : 'true';
 False : 'false';
 False : 'false';
 
 
-// AMAZON
+// AZSL extensions
 KW_AssociatedType : 'associatedtype' ;
 KW_AssociatedType : 'associatedtype' ;
 KW_TypeAlias : 'typealias' ;
 KW_TypeAlias : 'typealias' ;
 KW_Typedef : 'typedef' ;
 KW_Typedef : 'typedef' ;
 KW_Fundamental : 'fundamental' ; // [GFX TODO]
 KW_Fundamental : 'fundamental' ; // [GFX TODO]
 KW_Typeof : 'typeof' ;  // simple decltype-like operator
 KW_Typeof : 'typeof' ;  // simple decltype-like operator
 
 
-// AZSLc extensions
+// AZSL SRG
+FrequencyId : 'FrequencyId';
+ShaderVariantFallback : 'ShaderVariantFallback';
+ShaderResourceGroupSemantic : 'ShaderResourceGroupSemantic';
+ShaderResourceGroup : 'ShaderResourceGroup';
+
+// AZSLc-specific internal access keywords
 KW_ext_print_message : '__azslc_print_message' ;
 KW_ext_print_message : '__azslc_print_message' ;
 KW_ext_print_symbol : '__azslc_print_symbol' ;
 KW_ext_print_symbol : '__azslc_print_symbol' ;
 KW_ext_prtsym_fully_qualified : '__azslc_prtsym_fully_qualified' ;
 KW_ext_prtsym_fully_qualified : '__azslc_prtsym_fully_qualified' ;
 KW_ext_prtsym_least_qualified : '__azslc_prtsym_least_qualified' ;
 KW_ext_prtsym_least_qualified : '__azslc_prtsym_least_qualified' ;
 KW_ext_prtsym_constint_value : '__azslc_prtsym_constint_value' ;
 KW_ext_prtsym_constint_value : '__azslc_prtsym_constint_value' ;
 
 
-// AZSL SRG
-FrequencyId : 'FrequencyId';
-ShaderVariantFallback : 'ShaderVariantFallback';
-ShaderResourceGroupSemantic : 'ShaderResourceGroupSemantic';
-ShaderResourceGroup : 'ShaderResourceGroup';
 
 
 HLSLSemanticStream:
 HLSLSemanticStream:
     'BINORMAL'      Digit*
     'BINORMAL'      Digit*
@@ -422,6 +434,13 @@ HLSLSemanticSystem:
   | 'sv_'       (Nondigit | Digit)*
   | 'sv_'       (Nondigit | Digit)*
 ;
 ;
 
 
+// Those keywords are removed from the vocabulary, as of 1.8.8 (were present from 1.8.5)
+// since they can be emulated with a lazy Identifier recognition in the qualifier rule
+//Center : 'center';
+//Indices : 'indices';   // mesh-shader parameter qualifier
+//Vertices : 'vertices'; // mesh-shader parameter qualifier
+//Payload : 'payload';   // mesh-shader parameter qualifier & hit-shader optional qualifier
+
 Identifier
 Identifier
     :   Nondigit (Nondigit | Digit)*
     :   Nondigit (Nondigit | Digit)*
     ;
     ;
@@ -543,20 +562,20 @@ LineDirective
     ;
     ;
 
 
 Whitespace
 Whitespace
-    :   [ \t]+ -> skip
+    :   [ \t]+ -> channel(HIDDEN)
     ;
     ;
 
 
 Newline
 Newline
     :   (   '\r' '\n'?
     :   (   '\r' '\n'?
         |   '\n'
         |   '\n'
-        )  -> skip
+        )  -> channel(HIDDEN)
     ;
     ;
 
 
 // Amazon: The original mode switches from Tim Jones were not working.
 // Amazon: The original mode switches from Tim Jones were not working.
 BlockComment
 BlockComment
-    :   '/*' .*? '*/' -> channel(HIDDEN)
+    :   '/*' .*? '*/' -> channel(COMMENTS)
     ;
     ;
 
 
 LineComment
 LineComment
-    :   '//' ~[\r\n]* -> channel(HIDDEN)
+    :   '//' ~[\r\n]* -> channel(COMMENTS)
     ;
     ;

+ 22 - 21
src/azslParser.g4

@@ -26,7 +26,7 @@ topLevelDeclaration:
     |   attributedSrgDefinition         // AZSLc specific
     |   attributedSrgDefinition         // AZSLc specific
     |   attributedSrgSemantic           // AZSLc specific
     |   attributedSrgSemantic           // AZSLc specific
     |   Semi
     |   Semi
-;       
+;
 
 
 // Amazon: AZSL has scopes, and identifiers can be qualified
 // Amazon: AZSL has scopes, and identifiers can be qualified
 idExpression:
 idExpression:
@@ -147,7 +147,7 @@ functionParams:
 ;
 ;
 
 
 functionParam:
 functionParam:
-    attributeSpecifierAny* storageFlags type Name=Identifier? unnamedVariableDeclarator
+    attributeSpecifierAny* type Name=Identifier? unnamedVariableDeclarator
 ;
 ;
 
 
 hlslSemantic:
 hlslSemantic:
@@ -340,10 +340,8 @@ arguments:
 // TYPES
 // TYPES
 // --------------------------------------
 // --------------------------------------
 
 
-// note that in FXC "int static" (that is `storageFlags type storageFlags`) wasn't valid.
-// but in DXC it's flexible like in C/C++, so we have a restriction compared to DXC here.
 variableDeclaration:
 variableDeclaration:
-    attributeSpecifierAny* storageFlags type variableDeclarators
+    attributeSpecifierAny* type variableDeclarators
 ;
 ;
 
 
 variableDeclarators:
 variableDeclarators:
@@ -388,25 +386,29 @@ packOffsetNode:
 ;
 ;
 
 
 storageFlags:
 storageFlags:
-    storageFlag*
+    storageFlag*?    // *? lazy Kleene star. this allows the use of Identifier as a subrule without swallowing typenames under the storage rule.
 ;
 ;
 
 
 storageFlag:
 storageFlag:
     // Type modifiers
     // Type modifiers
         Const
         Const
+    |   Unsigned
     |   RowMajor
     |   RowMajor
     |   ColumnMajor
     |   ColumnMajor
     // Storage classes
     // Storage classes
     |   Extern
     |   Extern
     |   Inline
     |   Inline
-    |   Rootconstant
-    |   Option
+    |   Rootconstant   // AZSL specific
+    |   Option         // AZSL
     |   Precise
     |   Precise
     |   Shared
     |   Shared
     |   Groupshared
     |   Groupshared
     |   Static
     |   Static
     |   Uniform
     |   Uniform
     |   Volatile
     |   Volatile
+    |   Globallycoherent
+    |   SNorm
+    |   UNorm
     // Interpolation modifiers
     // Interpolation modifiers
     |   Linear
     |   Linear
     |   Centroid
     |   Centroid
@@ -423,12 +425,14 @@ storageFlag:
     |   Triangle
     |   Triangle
     |   LineAdj
     |   LineAdj
     |   TriangleAdj
     |   TriangleAdj
+    // catch-all
+    |   Identifier
 ;
 ;
 
 
+// note that in FXC "int static" (that is `storageFlags type storageFlags`) wasn't valid.
+// but in DXC it's flexible like in C/C++, so we have a restriction compared to DXC here.
 type:
 type:
-        predefinedType
-    |   userDefinedType
-    |   typeofExpression
+	storageFlags (predefinedType | userDefinedType | typeofExpression | Void)
 ;
 ;
 
 
 predefinedType:
 predefinedType:
@@ -505,18 +509,20 @@ samplerStatePredefinedType:
         Sampler
         Sampler
     |   SamplerCapitalS
     |   SamplerCapitalS
     |   SamplerState
     |   SamplerState
+    |   SamplerStateCamel
     |   SamplerComparisonState
     |   SamplerComparisonState
 ;
 ;
 
 
 scalarType:
 scalarType:
         Bool
         Bool
     |   Int
     |   Int
+    |   Int16_t
     |   Int32_t
     |   Int32_t
     |   Int64_t
     |   Int64_t
     |   Uint
     |   Uint
+    |   Uint16_t
     |   Uint32_t
     |   Uint32_t
     |   Uint64_t
     |   Uint64_t
-    |   UnsignedInt
     |   Dword
     |   Dword
     |   Half
     |   Half
     |   Float
     |   Float
@@ -771,7 +777,7 @@ literal:
 
 
 // leading type means a function where the return type is stated first (contrary to trailing type)
 // leading type means a function where the return type is stated first (contrary to trailing type)
 leadingTypeFunctionSignature:
 leadingTypeFunctionSignature:
-    storageFlags functionType (ClassName=userDefinedType ColonColon)? Name=Identifier
+    type (ClassName=userDefinedType ColonColon)? Name=Identifier
     genericParameterList?
     genericParameterList?
     LeftParen functionParams? RightParen
     LeftParen functionParams? RightParen
     Override? hlslSemantic?  // AZSL+
     Override? hlslSemantic?  // AZSL+
@@ -787,11 +793,6 @@ hlslFunctionDeclaration:
     Semi
     Semi
 ;
 ;
 
 
-functionType:
-        type
-    |   Void
-;
-
 userDefinedType:
 userDefinedType:
         idExpression
         idExpression
     |   anyStructuredTypeDefinition   // to allow "struct tag_ {} var;"
     |   anyStructuredTypeDefinition   // to allow "struct tag_ {} var;"
@@ -807,12 +808,12 @@ associatedTypeDeclaration:
 
 
 // typedef support (extension of fxc accepted language, but normal for dxc)
 // typedef support (extension of fxc accepted language, but normal for dxc)
 typedefStatement:
 typedefStatement:
-    KW_Typedef ExistingType=functionType NewTypeName=Identifier Semi
+    KW_Typedef ExistingType=type NewTypeName=Identifier Semi
 ;
 ;
 
 
 // swift/slang-like manner of writing typedef. also close to C++11 using
 // swift/slang-like manner of writing typedef. also close to C++11 using
 typealiasStatement:
 typealiasStatement:
-    KW_TypeAlias NewTypeName=Identifier '=' ExistingType=functionType Semi
+    KW_TypeAlias NewTypeName=Identifier '=' ExistingType=type Semi
 ;
 ;
 
 
 typeAliasingDefinitionStatement:
 typeAliasingDefinitionStatement:
@@ -820,7 +821,7 @@ typeAliasingDefinitionStatement:
 ;
 ;
 
 
 typeofExpression:
 typeofExpression:
-    KW_Typeof '(' (Expr=expressionExt|functionType) ')' ('::' SubQualification=idExpression)?
+    KW_Typeof '(' (Expr=expressionExt|type) ')' ('::' SubQualification=idExpression)?
 ;
 ;
 
 
 genericParameterList:
 genericParameterList:

+ 6 - 14
src/exportKeywords.py

@@ -1,14 +1,10 @@
 #!/usr/bin/python
 #!/usr/bin/python
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
 """
 """
-All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
-its licensors.
+Copyright (c) Contributors to the Open 3D Engine Project.
+For complete copyright and license terms please see the LICENSE at the root of this distribution.
 
 
-For complete copyright and license terms please see the LICENSE at the root of this
-distribution (the "License"). All use of this software is governed by the License,
-or, if provided, by the license below or the license accompanying this file. Do not
-remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+SPDX-License-Identifier: Apache-2.0 OR MIT
 """
 """
 import sys
 import sys
 import os
 import os
@@ -40,14 +36,10 @@ if __name__ == "__main__":
 
 
     with open("AzslcPredefinedTypes.h", 'w') as outfile:
     with open("AzslcPredefinedTypes.h", 'w') as outfile:
         copyright = '''/*
         copyright = '''/*
-* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
-* its licensors.
+* Copyright (c) Contributors to the Open 3D Engine Project.
+* For complete copyright and license terms please see the LICENSE at the root of this distribution.
 *
 *
-* For complete copyright and license terms please see the LICENSE at the root of this
-* distribution (the "License"). All use of this software is governed by the License,
-* or, if provided, by the license below or the license accompanying this file. Do not
-* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* SPDX-License-Identifier: Apache-2.0 OR MIT
 *
 *
 */
 */
 #pragma once
 #pragma once

+ 3227 - 3159
src/generated/azslLexer.cpp

@@ -64,78 +64,80 @@ std::vector<std::string> azslLexer::_ruleNames = {
   "Bool1x1", "Bool1x2", "Bool1x3", "Bool1x4", "Bool2x1", "Bool2x2", "Bool2x3", 
   "Bool1x1", "Bool1x2", "Bool1x3", "Bool1x4", "Bool2x1", "Bool2x2", "Bool2x3", 
   "Bool2x4", "Bool3x1", "Bool3x2", "Bool3x3", "Bool3x4", "Bool4x1", "Bool4x2", 
   "Bool2x4", "Bool3x1", "Bool3x2", "Bool3x3", "Bool3x4", "Bool4x1", "Bool4x2", 
   "Bool4x3", "Bool4x4", "Buffer", "BuiltInTriangleIntersectionAttributes", 
   "Bool4x3", "Bool4x4", "Buffer", "BuiltInTriangleIntersectionAttributes", 
-  "ByteAddressBuffer", "Break", "Case", "CBuffer", "ConstantBuffer", "ConstantBufferCamel", 
-  "Centroid", "Class", "ColumnMajor", "Const", "ConsumeStructuredBuffer", 
+  "ByteAddressBuffer", "Break", "Case", "CBuffer", "Centroid", "ConstantBuffer", 
+  "ConstantBufferCamel", "Class", "ColumnMajor", "Const", "ConsumeStructuredBuffer", 
   "Continue", "Default", "Discard", "Do", "Double", "Double1", "Double2", 
   "Continue", "Default", "Discard", "Do", "Double", "Double1", "Double2", 
   "Double3", "Double4", "Double1x1", "Double1x2", "Double1x3", "Double1x4", 
   "Double3", "Double4", "Double1x1", "Double1x2", "Double1x3", "Double1x4", 
   "Double2x1", "Double2x2", "Double2x3", "Double2x4", "Double3x1", "Double3x2", 
   "Double2x1", "Double2x2", "Double2x3", "Double2x4", "Double3x1", "Double3x2", 
   "Double3x3", "Double3x4", "Double4x1", "Double4x2", "Double4x3", "Double4x4", 
   "Double3x3", "Double3x4", "Double4x1", "Double4x2", "Double4x3", "Double4x4", 
-  "Else", "Enum", "Extern", "FeedbackTexture2D", "FeedbackTexture2DArray", 
+  "Else", "Enum", "Export", "Extern", "FeedbackTexture2D", "FeedbackTexture2DArray", 
   "Float", "Float1", "Float2", "Float3", "Float4", "Float1x1", "Float1x2", 
   "Float", "Float1", "Float2", "Float3", "Float4", "Float1x1", "Float1x2", 
   "Float1x3", "Float1x4", "Float2x1", "Float2x2", "Float2x3", "Float2x4", 
   "Float1x3", "Float1x4", "Float2x1", "Float2x2", "Float2x3", "Float2x4", 
   "Float3x1", "Float3x2", "Float3x3", "Float3x4", "Float4x1", "Float4x2", 
   "Float3x1", "Float3x2", "Float3x3", "Float3x4", "Float4x1", "Float4x2", 
-  "Float4x3", "Float4x4", "For", "Groupshared", "Global", "Half", "Half1", 
-  "Half2", "Half3", "Half4", "Half1x1", "Half1x2", "Half1x3", "Half1x4", 
-  "Half2x1", "Half2x2", "Half2x3", "Half2x4", "Half3x1", "Half3x2", "Half3x3", 
-  "Half3x4", "Half4x1", "Half4x2", "Half4x3", "Half4x4", "If", "In", "Inline", 
-  "Rootconstant", "Inout", "InputPatch", "Int", "Int32_t", "Int64_t", "Int1", 
-  "Int2", "Int3", "Int4", "Int1x1", "Int1x2", "Int1x3", "Int1x4", "Int2x1", 
-  "Int2x2", "Int2x3", "Int2x4", "Int3x1", "Int3x2", "Int3x3", "Int3x4", 
-  "Int4x1", "Int4x2", "Int4x3", "Int4x4", "Interface", "Line_", "LineAdj", 
-  "Linear", "LineStream", "Long", "Matrix", "Nointerpolation", "Noperspective", 
-  "Option", "Out", "OutputPatch", "Override", "Partial", "Packoffset", "Point", 
-  "PointStream", "Precise", "RasterizerOrderedBuffer", "RasterizerOrderedByteAddressBuffer", 
-  "RasterizerOrderedStructuredBuffer", "RasterizerOrderedTexture1D", "RasterizerOrderedTexture1DArray", 
-  "RasterizerOrderedTexture2D", "RasterizerOrderedTexture2DArray", "RasterizerOrderedTexture3D", 
-  "RayDesc", "RaytracingAccelerationStructure", "Register", "Return", "RowMajor", 
-  "RWBuffer", "RWByteAddressBuffer", "RWStructuredBuffer", "RWTexture1D", 
-  "RWTexture1DArray", "RWTexture2D", "RWTexture2DArray", "RWTexture3D", 
-  "Sample", "Sampler", "SamplerCapitalS", "SamplerComparisonState", "SamplerState", 
-  "Shared", "Static", "Struct", "StructuredBuffer", "SubpassInput", "SubpassInputMS", 
-  "Switch", "Texture1D", "Texture1DArray", "Texture2D", "Texture2DArray", 
-  "Texture2DMS", "Texture2DMSArray", "Texture3D", "TextureCube", "TextureCubeArray", 
-  "Triangle", "TriangleAdj", "TriangleStream", "Uniform", "Uint", "Uint32_t", 
-  "Uint64_t", "UnsignedInt", "Uint1", "Uint2", "Uint3", "Uint4", "Uint1x1", 
-  "Uint1x2", "Uint1x3", "Uint1x4", "Uint2x1", "Uint2x2", "Uint2x3", "Uint2x4", 
-  "Uint3x1", "Uint3x2", "Uint3x3", "Uint3x4", "Uint4x1", "Uint4x2", "Uint4x3", 
-  "Uint4x4", "Dword", "Dword1", "Dword2", "Dword3", "Dword4", "Dword1x1", 
-  "Dword1x2", "Dword1x3", "Dword1x4", "Dword2x1", "Dword2x2", "Dword2x3", 
-  "Dword2x4", "Dword3x1", "Dword3x2", "Dword3x3", "Dword3x4", "Dword4x1", 
-  "Dword4x2", "Dword4x3", "Dword4x4", "Vector", "Volatile", "Void", "While", 
-  "StateObjectConfig", "LocalRootSignature", "GlobalRootSignature", "SubobjectToExportsAssociation", 
-  "RaytracingShaderConfig", "RaytracingPipelineConfig", "RaytracingPipelineConfig1", 
-  "TriangleHitGroup", "ProceduralPrimitiveHitGroup", "ADDRESS_U", "ADDRESS_V", 
-  "ADDRESS_W", "BORDER_COLOR", "MIN_FILTER", "MAG_FILTER", "MIP_FILTER", 
-  "MAX_ANISOTROPY", "MAX_LOD", "MIN_LOD", "MIP_LOD_BIAS", "COMPARISON_FUNC", 
-  "REDUCTION_TYPE", "FILTER_MODE_POINT", "FILTER_MODE_LINEAR", "REDUCTION_TYPE_FILTER", 
-  "REDUCTION_TYPE_COMPARISON", "REDUCTION_TYPE_MINIMUM", "REDUCTION_TYPE_MAXIMUM", 
-  "ADDRESS_MODE_WRAP", "ADDRESS_MODE_MIRROR", "ADDRESS_MODE_CLAMP", "ADDRESS_MODE_BORDER", 
-  "ADDRESS_MODE_MIRROR_ONCE", "COMPARISON_FUNCTION_NEVER", "COMPARISON_FUNCTION_LESS", 
-  "COMPARISON_FUNCTION_EQUAL", "COMPARISON_FUNCTION_LESS_EQUAL", "COMPARISON_FUNCTION_GREATER", 
-  "COMPARISON_FUNCTION_NOT_EQUAL", "COMPARISON_FUNCTION_GREATER_EQUAL", 
-  "COMPARISON_FUNCTION_ALWAYS", "BORDER_COLOR_OPAQUE_BLACK", "BORDER_COLOR_TRANSPARENT_BLACK", 
-  "BORDER_COLOR_OPAQUE_WHITE", "LeftParen", "RightParen", "LeftBracket", 
-  "RightBracket", "LeftBrace", "RightBrace", "LeftDoubleBracket", "Less", 
-  "LessEqual", "Greater", "GreaterEqual", "LeftShift", "RightShift", "Plus", 
-  "PlusPlus", "Minus", "MinusMinus", "Star", "Div", "Mod", "And", "Or", 
-  "AndAnd", "OrOr", "Caret", "Not", "Tilde", "Question", "Colon", "ColonColon", 
-  "Semi", "Comma", "Assign", "StarAssign", "DivAssign", "ModAssign", "PlusAssign", 
-  "MinusAssign", "LeftShiftAssign", "RightShiftAssign", "AndAssign", "XorAssign", 
-  "OrAssign", "Equal", "NotEqual", "Dot", "True", "False", "KW_AssociatedType", 
-  "KW_TypeAlias", "KW_Typedef", "KW_Fundamental", "KW_Typeof", "KW_ext_print_message", 
-  "KW_ext_print_symbol", "KW_ext_prtsym_fully_qualified", "KW_ext_prtsym_least_qualified", 
-  "KW_ext_prtsym_constint_value", "FrequencyId", "ShaderVariantFallback", 
-  "ShaderResourceGroupSemantic", "ShaderResourceGroup", "HLSLSemanticStream", 
-  "HLSLSemanticSystem", "Identifier", "Nondigit", "Digit", "DecimalOrOctalIntegerLiteral", 
-  "HexadecimalIntegerLiteral", "HexadecimalDigit", "FractionalConstant", 
-  "ExponentPart", "Sign", "DigitSequence", "HexadecimalDigitSequence", "IntegerSuffix", 
-  "IntegerLiteral", "FloatingSuffix", "FloatLiteral", "EscapeSequence", 
-  "SimpleEscapeSequence", "StringLiteral", "SCharSequence", "SChar", "PragmaDirective", 
-  "LineDirective", "Whitespace", "Newline", "BlockComment", "LineComment"
+  "Float4x3", "Float4x4", "For", "Groupshared", "Globallycoherent", "Global", 
+  "Half", "Half1", "Half2", "Half3", "Half4", "Half1x1", "Half1x2", "Half1x3", 
+  "Half1x4", "Half2x1", "Half2x2", "Half2x3", "Half2x4", "Half3x1", "Half3x2", 
+  "Half3x3", "Half3x4", "Half4x1", "Half4x2", "Half4x3", "Half4x4", "If", 
+  "In", "Inline", "Rootconstant", "Inout", "InputPatch", "Int", "Int16_t", 
+  "Int32_t", "Int64_t", "Int1", "Int2", "Int3", "Int4", "Int1x1", "Int1x2", 
+  "Int1x3", "Int1x4", "Int2x1", "Int2x2", "Int2x3", "Int2x4", "Int3x1", 
+  "Int3x2", "Int3x3", "Int3x4", "Int4x1", "Int4x2", "Int4x3", "Int4x4", 
+  "Interface", "Line_", "LineAdj", "Linear", "LineStream", "Long", "Matrix", 
+  "Nointerpolation", "Noperspective", "Option", "Out", "OutputPatch", "Override", 
+  "Partial", "Packoffset", "Point", "PointStream", "Precise", "RasterizerOrderedBuffer", 
+  "RasterizerOrderedByteAddressBuffer", "RasterizerOrderedStructuredBuffer", 
+  "RasterizerOrderedTexture1D", "RasterizerOrderedTexture1DArray", "RasterizerOrderedTexture2D", 
+  "RasterizerOrderedTexture2DArray", "RasterizerOrderedTexture3D", "RayDesc", 
+  "RaytracingAccelerationStructure", "Register", "Return", "RowMajor", "RWBuffer", 
+  "RWByteAddressBuffer", "RWStructuredBuffer", "RWTexture1D", "RWTexture1DArray", 
+  "RWTexture2D", "RWTexture2DArray", "RWTexture3D", "Sample", "Sampler", 
+  "SamplerCapitalS", "SamplerComparisonState", "SamplerStateCamel", "SamplerState", 
+  "Shared", "SNorm", "Static", "Struct", "StructuredBuffer", "SubpassInput", 
+  "SubpassInputMS", "Switch", "TBuffer", "Texture1D", "Texture1DArray", 
+  "Texture2D", "Texture2DArray", "Texture2DMS", "Texture2DMSArray", "Texture3D", 
+  "TextureCube", "TextureCubeArray", "Triangle", "TriangleAdj", "TriangleStream", 
+  "Uniform", "Uint", "Uint1", "Uint2", "Uint3", "Uint4", "Uint1x1", "Uint1x2", 
+  "Uint1x3", "Uint1x4", "Uint2x1", "Uint2x2", "Uint2x3", "Uint2x4", "Uint3x1", 
+  "Uint3x2", "Uint3x3", "Uint3x4", "Uint4x1", "Uint4x2", "Uint4x3", "Uint4x4", 
+  "Uint16_t", "Uint32_t", "Uint64_t", "UNorm", "Unsigned", "Dword", "Dword1", 
+  "Dword2", "Dword3", "Dword4", "Dword1x1", "Dword1x2", "Dword1x3", "Dword1x4", 
+  "Dword2x1", "Dword2x2", "Dword2x3", "Dword2x4", "Dword3x1", "Dword3x2", 
+  "Dword3x3", "Dword3x4", "Dword4x1", "Dword4x2", "Dword4x3", "Dword4x4", 
+  "Vector", "Volatile", "Void", "While", "StateObjectConfig", "LocalRootSignature", 
+  "GlobalRootSignature", "SubobjectToExportsAssociation", "RaytracingShaderConfig", 
+  "RaytracingPipelineConfig", "RaytracingPipelineConfig1", "TriangleHitGroup", 
+  "ProceduralPrimitiveHitGroup", "ADDRESS_U", "ADDRESS_V", "ADDRESS_W", 
+  "BORDER_COLOR", "MIN_FILTER", "MAG_FILTER", "MIP_FILTER", "MAX_ANISOTROPY", 
+  "MAX_LOD", "MIN_LOD", "MIP_LOD_BIAS", "COMPARISON_FUNC", "REDUCTION_TYPE", 
+  "FILTER_MODE_POINT", "FILTER_MODE_LINEAR", "REDUCTION_TYPE_FILTER", "REDUCTION_TYPE_COMPARISON", 
+  "REDUCTION_TYPE_MINIMUM", "REDUCTION_TYPE_MAXIMUM", "ADDRESS_MODE_WRAP", 
+  "ADDRESS_MODE_MIRROR", "ADDRESS_MODE_CLAMP", "ADDRESS_MODE_BORDER", "ADDRESS_MODE_MIRROR_ONCE", 
+  "COMPARISON_FUNCTION_NEVER", "COMPARISON_FUNCTION_LESS", "COMPARISON_FUNCTION_EQUAL", 
+  "COMPARISON_FUNCTION_LESS_EQUAL", "COMPARISON_FUNCTION_GREATER", "COMPARISON_FUNCTION_NOT_EQUAL", 
+  "COMPARISON_FUNCTION_GREATER_EQUAL", "COMPARISON_FUNCTION_ALWAYS", "BORDER_COLOR_OPAQUE_BLACK", 
+  "BORDER_COLOR_TRANSPARENT_BLACK", "BORDER_COLOR_OPAQUE_WHITE", "LeftParen", 
+  "RightParen", "LeftBracket", "RightBracket", "LeftBrace", "RightBrace", 
+  "LeftDoubleBracket", "Less", "LessEqual", "Greater", "GreaterEqual", "LeftShift", 
+  "RightShift", "Plus", "PlusPlus", "Minus", "MinusMinus", "Star", "Div", 
+  "Mod", "And", "Or", "AndAnd", "OrOr", "Caret", "Not", "Tilde", "Question", 
+  "Colon", "ColonColon", "Semi", "Comma", "Assign", "StarAssign", "DivAssign", 
+  "ModAssign", "PlusAssign", "MinusAssign", "LeftShiftAssign", "RightShiftAssign", 
+  "AndAssign", "XorAssign", "OrAssign", "Equal", "NotEqual", "Dot", "True", 
+  "False", "KW_AssociatedType", "KW_TypeAlias", "KW_Typedef", "KW_Fundamental", 
+  "KW_Typeof", "FrequencyId", "ShaderVariantFallback", "ShaderResourceGroupSemantic", 
+  "ShaderResourceGroup", "KW_ext_print_message", "KW_ext_print_symbol", 
+  "KW_ext_prtsym_fully_qualified", "KW_ext_prtsym_least_qualified", "KW_ext_prtsym_constint_value", 
+  "HLSLSemanticStream", "HLSLSemanticSystem", "Identifier", "Nondigit", 
+  "Digit", "DecimalOrOctalIntegerLiteral", "HexadecimalIntegerLiteral", 
+  "HexadecimalDigit", "FractionalConstant", "ExponentPart", "Sign", "DigitSequence", 
+  "HexadecimalDigitSequence", "IntegerSuffix", "IntegerLiteral", "FloatingSuffix", 
+  "FloatLiteral", "EscapeSequence", "SimpleEscapeSequence", "StringLiteral", 
+  "SCharSequence", "SChar", "PragmaDirective", "LineDirective", "Whitespace", 
+  "Newline", "BlockComment", "LineComment"
 };
 };
 
 
 std::vector<std::string> azslLexer::_channelNames = {
 std::vector<std::string> azslLexer::_channelNames = {
-  "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "PREPROCESSOR"
+  "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "PREPROCESSOR", "COMMENTS"
 };
 };
 
 
 std::vector<std::string> azslLexer::_modeNames = {
 std::vector<std::string> azslLexer::_modeNames = {
@@ -148,46 +150,47 @@ std::vector<std::string> azslLexer::_literalNames = {
   "'bool2x2'", "'bool2x3'", "'bool2x4'", "'bool3x1'", "'bool3x2'", "'bool3x3'", 
   "'bool2x2'", "'bool2x3'", "'bool2x4'", "'bool3x1'", "'bool3x2'", "'bool3x3'", 
   "'bool3x4'", "'bool4x1'", "'bool4x2'", "'bool4x3'", "'bool4x4'", "'Buffer'", 
   "'bool3x4'", "'bool4x1'", "'bool4x2'", "'bool4x3'", "'bool4x4'", "'Buffer'", 
   "'BuiltInTriangleIntersectionAttributes'", "'ByteAddressBuffer'", "'break'", 
   "'BuiltInTriangleIntersectionAttributes'", "'ByteAddressBuffer'", "'break'", 
-  "'case'", "'cbuffer'", "'constantbuffer'", "'ConstantBuffer'", "'centroid'", 
+  "'case'", "'cbuffer'", "'centroid'", "'constantbuffer'", "'ConstantBuffer'", 
   "'class'", "'column_major'", "'const'", "'ConsumeStructuredBuffer'", "'continue'", 
   "'class'", "'column_major'", "'const'", "'ConsumeStructuredBuffer'", "'continue'", 
   "'default'", "'discard'", "'do'", "'double'", "'double1'", "'double2'", 
   "'default'", "'discard'", "'do'", "'double'", "'double1'", "'double2'", 
   "'double3'", "'double4'", "'double1x1'", "'double1x2'", "'double1x3'", 
   "'double3'", "'double4'", "'double1x1'", "'double1x2'", "'double1x3'", 
   "'double1x4'", "'double2x1'", "'double2x2'", "'double2x3'", "'double2x4'", 
   "'double1x4'", "'double2x1'", "'double2x2'", "'double2x3'", "'double2x4'", 
   "'double3x1'", "'double3x2'", "'double3x3'", "'double3x4'", "'double4x1'", 
   "'double3x1'", "'double3x2'", "'double3x3'", "'double3x4'", "'double4x1'", 
-  "'double4x2'", "'double4x3'", "'double4x4'", "'else'", "'enum'", "'extern'", 
-  "'FeedbackTexture2D'", "'FeedbackTexture2DArray'", "'float'", "'float1'", 
-  "'float2'", "'float3'", "'float4'", "'float1x1'", "'float1x2'", "'float1x3'", 
-  "'float1x4'", "'float2x1'", "'float2x2'", "'float2x3'", "'float2x4'", 
-  "'float3x1'", "'float3x2'", "'float3x3'", "'float3x4'", "'float4x1'", 
-  "'float4x2'", "'float4x3'", "'float4x4'", "'for'", "'groupshared'", "'global'", 
-  "'half'", "'half1'", "'half2'", "'half3'", "'half4'", "'half1x1'", "'half1x2'", 
-  "'half1x3'", "'half1x4'", "'half2x1'", "'half2x2'", "'half2x3'", "'half2x4'", 
-  "'half3x1'", "'half3x2'", "'half3x3'", "'half3x4'", "'half4x1'", "'half4x2'", 
-  "'half4x3'", "'half4x4'", "'if'", "'in'", "'inline'", "'rootconstant'", 
-  "", "'InputPatch'", "'int'", "'int32_t'", "'int64_t'", "'int1'", "'int2'", 
-  "'int3'", "'int4'", "'int1x1'", "'int1x2'", "'int1x3'", "'int1x4'", "'int2x1'", 
-  "'int2x2'", "'int2x3'", "'int2x4'", "'int3x1'", "'int3x2'", "'int3x3'", 
-  "'int3x4'", "'int4x1'", "'int4x2'", "'int4x3'", "'int4x4'", "'interface'", 
-  "'line'", "'lineadj'", "'linear'", "'LineStream'", "'long'", "'matrix'", 
-  "'nointerpolation'", "'noperspective'", "'option'", "'out'", "'OutputPatch'", 
-  "'override'", "'partial'", "'packoffset'", "'point'", "'PointStream'", 
-  "'precise'", "'RasterizerOrderedBuffer'", "'RasterizerOrderedByteAddressBuffer'", 
-  "'RasterizerOrderedStructuredBuffer'", "'RasterizerOrderedTexture1D'", 
-  "'RasterizerOrderedTexture1DArray'", "'RasterizerOrderedTexture2D'", "'RasterizerOrderedTexture2DArray'", 
-  "'RasterizerOrderedTexture3D'", "'RayDesc'", "'RaytracingAccelerationStructure'", 
-  "'register'", "'return'", "'row_major'", "'RWBuffer'", "'RWByteAddressBuffer'", 
-  "'RWStructuredBuffer'", "'RWTexture1D'", "'RWTexture1DArray'", "'RWTexture2D'", 
-  "'RWTexture2DArray'", "'RWTexture3D'", "'sample'", "'sampler'", "'Sampler'", 
-  "'SamplerComparisonState'", "'SamplerState'", "'shared'", "'static'", 
-  "'struct'", "'StructuredBuffer'", "'SubpassInput'", "'SubpassInputMS'", 
-  "'switch'", "'Texture1D'", "'Texture1DArray'", "'Texture2D'", "'Texture2DArray'", 
-  "'Texture2DMS'", "'Texture2DMSArray'", "'Texture3D'", "'TextureCube'", 
-  "'TextureCubeArray'", "'triangle'", "'triangleadj'", "'TriangleStream'", 
-  "'uniform'", "'uint'", "'uint32_t'", "'uint64_t'", "'unsigned int'", "'uint1'", 
-  "'uint2'", "'uint3'", "'uint4'", "'uint1x1'", "'uint1x2'", "'uint1x3'", 
-  "'uint1x4'", "'uint2x1'", "'uint2x2'", "'uint2x3'", "'uint2x4'", "'uint3x1'", 
-  "'uint3x2'", "'uint3x3'", "'uint3x4'", "'uint4x1'", "'uint4x2'", "'uint4x3'", 
-  "'uint4x4'", "'dword'", "'dword1'", "'dword2'", "'dword3'", "'dword4'", 
+  "'double4x2'", "'double4x3'", "'double4x4'", "'else'", "'enum'", "'export'", 
+  "'extern'", "'FeedbackTexture2D'", "'FeedbackTexture2DArray'", "'float'", 
+  "'float1'", "'float2'", "'float3'", "'float4'", "'float1x1'", "'float1x2'", 
+  "'float1x3'", "'float1x4'", "'float2x1'", "'float2x2'", "'float2x3'", 
+  "'float2x4'", "'float3x1'", "'float3x2'", "'float3x3'", "'float3x4'", 
+  "'float4x1'", "'float4x2'", "'float4x3'", "'float4x4'", "'for'", "'groupshared'", 
+  "'globallycoherent'", "'global'", "'half'", "'half1'", "'half2'", "'half3'", 
+  "'half4'", "'half1x1'", "'half1x2'", "'half1x3'", "'half1x4'", "'half2x1'", 
+  "'half2x2'", "'half2x3'", "'half2x4'", "'half3x1'", "'half3x2'", "'half3x3'", 
+  "'half3x4'", "'half4x1'", "'half4x2'", "'half4x3'", "'half4x4'", "'if'", 
+  "'in'", "'inline'", "'rootconstant'", "", "'InputPatch'", "'int'", "'int16_t'", 
+  "'int32_t'", "'int64_t'", "'int1'", "'int2'", "'int3'", "'int4'", "'int1x1'", 
+  "'int1x2'", "'int1x3'", "'int1x4'", "'int2x1'", "'int2x2'", "'int2x3'", 
+  "'int2x4'", "'int3x1'", "'int3x2'", "'int3x3'", "'int3x4'", "'int4x1'", 
+  "'int4x2'", "'int4x3'", "'int4x4'", "'interface'", "'line'", "'lineadj'", 
+  "'linear'", "'LineStream'", "'long'", "'matrix'", "'nointerpolation'", 
+  "'noperspective'", "'option'", "'out'", "'OutputPatch'", "'override'", 
+  "'partial'", "'packoffset'", "'point'", "'PointStream'", "'precise'", 
+  "'RasterizerOrderedBuffer'", "'RasterizerOrderedByteAddressBuffer'", "'RasterizerOrderedStructuredBuffer'", 
+  "'RasterizerOrderedTexture1D'", "'RasterizerOrderedTexture1DArray'", "'RasterizerOrderedTexture2D'", 
+  "'RasterizerOrderedTexture2DArray'", "'RasterizerOrderedTexture3D'", "'RayDesc'", 
+  "'RaytracingAccelerationStructure'", "'register'", "'return'", "'row_major'", 
+  "'RWBuffer'", "'RWByteAddressBuffer'", "'RWStructuredBuffer'", "'RWTexture1D'", 
+  "'RWTexture1DArray'", "'RWTexture2D'", "'RWTexture2DArray'", "'RWTexture3D'", 
+  "'sample'", "'sampler'", "'Sampler'", "'SamplerComparisonState'", "'SamplerState'", 
+  "'sampler_state'", "'shared'", "'snorm'", "'static'", "'struct'", "'StructuredBuffer'", 
+  "'SubpassInput'", "'SubpassInputMS'", "'switch'", "'tbuffer'", "'Texture1D'", 
+  "'Texture1DArray'", "'Texture2D'", "'Texture2DArray'", "'Texture2DMS'", 
+  "'Texture2DMSArray'", "'Texture3D'", "'TextureCube'", "'TextureCubeArray'", 
+  "'triangle'", "'triangleadj'", "'TriangleStream'", "'uniform'", "'uint'", 
+  "'uint1'", "'uint2'", "'uint3'", "'uint4'", "'uint1x1'", "'uint1x2'", 
+  "'uint1x3'", "'uint1x4'", "'uint2x1'", "'uint2x2'", "'uint2x3'", "'uint2x4'", 
+  "'uint3x1'", "'uint3x2'", "'uint3x3'", "'uint3x4'", "'uint4x1'", "'uint4x2'", 
+  "'uint4x3'", "'uint4x4'", "'uint16_t'", "'uint32_t'", "'uint64_t'", "'unorm'", 
+  "'unsigned'", "'dword'", "'dword1'", "'dword2'", "'dword3'", "'dword4'", 
   "'dword1x1'", "'dword1x2'", "'dword1x3'", "'dword1x4'", "'dword2x1'", 
   "'dword1x1'", "'dword1x2'", "'dword1x3'", "'dword1x4'", "'dword2x1'", 
   "'dword2x2'", "'dword2x3'", "'dword2x4'", "'dword3x1'", "'dword3x2'", 
   "'dword2x2'", "'dword2x3'", "'dword2x4'", "'dword3x1'", "'dword3x2'", 
   "'dword3x3'", "'dword3x4'", "'dword4x1'", "'dword4x2'", "'dword4x3'", 
   "'dword3x3'", "'dword3x4'", "'dword4x1'", "'dword4x2'", "'dword4x3'", 
@@ -207,10 +210,10 @@ std::vector<std::string> azslLexer::_literalNames = {
   "':'", "'::'", "';'", "','", "'='", "'*='", "'/='", "'%='", "'+='", "'-='", 
   "':'", "'::'", "';'", "','", "'='", "'*='", "'/='", "'%='", "'+='", "'-='", 
   "'<<='", "'>>='", "'&='", "'^='", "'|='", "'=='", "'!='", "'.'", "'true'", 
   "'<<='", "'>>='", "'&='", "'^='", "'|='", "'=='", "'!='", "'.'", "'true'", 
   "'false'", "'associatedtype'", "'typealias'", "'typedef'", "'fundamental'", 
   "'false'", "'associatedtype'", "'typealias'", "'typedef'", "'fundamental'", 
-  "'typeof'", "'__azslc_print_message'", "'__azslc_print_symbol'", "'__azslc_prtsym_fully_qualified'", 
-  "'__azslc_prtsym_least_qualified'", "'__azslc_prtsym_constint_value'", 
-  "'FrequencyId'", "'ShaderVariantFallback'", "'ShaderResourceGroupSemantic'", 
-  "'ShaderResourceGroup'"
+  "'typeof'", "'FrequencyId'", "'ShaderVariantFallback'", "'ShaderResourceGroupSemantic'", 
+  "'ShaderResourceGroup'", "'__azslc_print_message'", "'__azslc_print_symbol'", 
+  "'__azslc_prtsym_fully_qualified'", "'__azslc_prtsym_least_qualified'", 
+  "'__azslc_prtsym_constint_value'"
 };
 };
 
 
 std::vector<std::string> azslLexer::_symbolicNames = {
 std::vector<std::string> azslLexer::_symbolicNames = {
@@ -218,71 +221,72 @@ std::vector<std::string> azslLexer::_symbolicNames = {
   "Bool1x1", "Bool1x2", "Bool1x3", "Bool1x4", "Bool2x1", "Bool2x2", "Bool2x3", 
   "Bool1x1", "Bool1x2", "Bool1x3", "Bool1x4", "Bool2x1", "Bool2x2", "Bool2x3", 
   "Bool2x4", "Bool3x1", "Bool3x2", "Bool3x3", "Bool3x4", "Bool4x1", "Bool4x2", 
   "Bool2x4", "Bool3x1", "Bool3x2", "Bool3x3", "Bool3x4", "Bool4x1", "Bool4x2", 
   "Bool4x3", "Bool4x4", "Buffer", "BuiltInTriangleIntersectionAttributes", 
   "Bool4x3", "Bool4x4", "Buffer", "BuiltInTriangleIntersectionAttributes", 
-  "ByteAddressBuffer", "Break", "Case", "CBuffer", "ConstantBuffer", "ConstantBufferCamel", 
-  "Centroid", "Class", "ColumnMajor", "Const", "ConsumeStructuredBuffer", 
+  "ByteAddressBuffer", "Break", "Case", "CBuffer", "Centroid", "ConstantBuffer", 
+  "ConstantBufferCamel", "Class", "ColumnMajor", "Const", "ConsumeStructuredBuffer", 
   "Continue", "Default", "Discard", "Do", "Double", "Double1", "Double2", 
   "Continue", "Default", "Discard", "Do", "Double", "Double1", "Double2", 
   "Double3", "Double4", "Double1x1", "Double1x2", "Double1x3", "Double1x4", 
   "Double3", "Double4", "Double1x1", "Double1x2", "Double1x3", "Double1x4", 
   "Double2x1", "Double2x2", "Double2x3", "Double2x4", "Double3x1", "Double3x2", 
   "Double2x1", "Double2x2", "Double2x3", "Double2x4", "Double3x1", "Double3x2", 
   "Double3x3", "Double3x4", "Double4x1", "Double4x2", "Double4x3", "Double4x4", 
   "Double3x3", "Double3x4", "Double4x1", "Double4x2", "Double4x3", "Double4x4", 
-  "Else", "Enum", "Extern", "FeedbackTexture2D", "FeedbackTexture2DArray", 
+  "Else", "Enum", "Export", "Extern", "FeedbackTexture2D", "FeedbackTexture2DArray", 
   "Float", "Float1", "Float2", "Float3", "Float4", "Float1x1", "Float1x2", 
   "Float", "Float1", "Float2", "Float3", "Float4", "Float1x1", "Float1x2", 
   "Float1x3", "Float1x4", "Float2x1", "Float2x2", "Float2x3", "Float2x4", 
   "Float1x3", "Float1x4", "Float2x1", "Float2x2", "Float2x3", "Float2x4", 
   "Float3x1", "Float3x2", "Float3x3", "Float3x4", "Float4x1", "Float4x2", 
   "Float3x1", "Float3x2", "Float3x3", "Float3x4", "Float4x1", "Float4x2", 
-  "Float4x3", "Float4x4", "For", "Groupshared", "Global", "Half", "Half1", 
-  "Half2", "Half3", "Half4", "Half1x1", "Half1x2", "Half1x3", "Half1x4", 
-  "Half2x1", "Half2x2", "Half2x3", "Half2x4", "Half3x1", "Half3x2", "Half3x3", 
-  "Half3x4", "Half4x1", "Half4x2", "Half4x3", "Half4x4", "If", "In", "Inline", 
-  "Rootconstant", "Inout", "InputPatch", "Int", "Int32_t", "Int64_t", "Int1", 
-  "Int2", "Int3", "Int4", "Int1x1", "Int1x2", "Int1x3", "Int1x4", "Int2x1", 
-  "Int2x2", "Int2x3", "Int2x4", "Int3x1", "Int3x2", "Int3x3", "Int3x4", 
-  "Int4x1", "Int4x2", "Int4x3", "Int4x4", "Interface", "Line_", "LineAdj", 
-  "Linear", "LineStream", "Long", "Matrix", "Nointerpolation", "Noperspective", 
-  "Option", "Out", "OutputPatch", "Override", "Partial", "Packoffset", "Point", 
-  "PointStream", "Precise", "RasterizerOrderedBuffer", "RasterizerOrderedByteAddressBuffer", 
-  "RasterizerOrderedStructuredBuffer", "RasterizerOrderedTexture1D", "RasterizerOrderedTexture1DArray", 
-  "RasterizerOrderedTexture2D", "RasterizerOrderedTexture2DArray", "RasterizerOrderedTexture3D", 
-  "RayDesc", "RaytracingAccelerationStructure", "Register", "Return", "RowMajor", 
-  "RWBuffer", "RWByteAddressBuffer", "RWStructuredBuffer", "RWTexture1D", 
-  "RWTexture1DArray", "RWTexture2D", "RWTexture2DArray", "RWTexture3D", 
-  "Sample", "Sampler", "SamplerCapitalS", "SamplerComparisonState", "SamplerState", 
-  "Shared", "Static", "Struct", "StructuredBuffer", "SubpassInput", "SubpassInputMS", 
-  "Switch", "Texture1D", "Texture1DArray", "Texture2D", "Texture2DArray", 
-  "Texture2DMS", "Texture2DMSArray", "Texture3D", "TextureCube", "TextureCubeArray", 
-  "Triangle", "TriangleAdj", "TriangleStream", "Uniform", "Uint", "Uint32_t", 
-  "Uint64_t", "UnsignedInt", "Uint1", "Uint2", "Uint3", "Uint4", "Uint1x1", 
-  "Uint1x2", "Uint1x3", "Uint1x4", "Uint2x1", "Uint2x2", "Uint2x3", "Uint2x4", 
-  "Uint3x1", "Uint3x2", "Uint3x3", "Uint3x4", "Uint4x1", "Uint4x2", "Uint4x3", 
-  "Uint4x4", "Dword", "Dword1", "Dword2", "Dword3", "Dword4", "Dword1x1", 
-  "Dword1x2", "Dword1x3", "Dword1x4", "Dword2x1", "Dword2x2", "Dword2x3", 
-  "Dword2x4", "Dword3x1", "Dword3x2", "Dword3x3", "Dword3x4", "Dword4x1", 
-  "Dword4x2", "Dword4x3", "Dword4x4", "Vector", "Volatile", "Void", "While", 
-  "StateObjectConfig", "LocalRootSignature", "GlobalRootSignature", "SubobjectToExportsAssociation", 
-  "RaytracingShaderConfig", "RaytracingPipelineConfig", "RaytracingPipelineConfig1", 
-  "TriangleHitGroup", "ProceduralPrimitiveHitGroup", "ADDRESS_U", "ADDRESS_V", 
-  "ADDRESS_W", "BORDER_COLOR", "MIN_FILTER", "MAG_FILTER", "MIP_FILTER", 
-  "MAX_ANISOTROPY", "MAX_LOD", "MIN_LOD", "MIP_LOD_BIAS", "COMPARISON_FUNC", 
-  "REDUCTION_TYPE", "FILTER_MODE_POINT", "FILTER_MODE_LINEAR", "REDUCTION_TYPE_FILTER", 
-  "REDUCTION_TYPE_COMPARISON", "REDUCTION_TYPE_MINIMUM", "REDUCTION_TYPE_MAXIMUM", 
-  "ADDRESS_MODE_WRAP", "ADDRESS_MODE_MIRROR", "ADDRESS_MODE_CLAMP", "ADDRESS_MODE_BORDER", 
-  "ADDRESS_MODE_MIRROR_ONCE", "COMPARISON_FUNCTION_NEVER", "COMPARISON_FUNCTION_LESS", 
-  "COMPARISON_FUNCTION_EQUAL", "COMPARISON_FUNCTION_LESS_EQUAL", "COMPARISON_FUNCTION_GREATER", 
-  "COMPARISON_FUNCTION_NOT_EQUAL", "COMPARISON_FUNCTION_GREATER_EQUAL", 
-  "COMPARISON_FUNCTION_ALWAYS", "BORDER_COLOR_OPAQUE_BLACK", "BORDER_COLOR_TRANSPARENT_BLACK", 
-  "BORDER_COLOR_OPAQUE_WHITE", "LeftParen", "RightParen", "LeftBracket", 
-  "RightBracket", "LeftBrace", "RightBrace", "LeftDoubleBracket", "Less", 
-  "LessEqual", "Greater", "GreaterEqual", "LeftShift", "RightShift", "Plus", 
-  "PlusPlus", "Minus", "MinusMinus", "Star", "Div", "Mod", "And", "Or", 
-  "AndAnd", "OrOr", "Caret", "Not", "Tilde", "Question", "Colon", "ColonColon", 
-  "Semi", "Comma", "Assign", "StarAssign", "DivAssign", "ModAssign", "PlusAssign", 
-  "MinusAssign", "LeftShiftAssign", "RightShiftAssign", "AndAssign", "XorAssign", 
-  "OrAssign", "Equal", "NotEqual", "Dot", "True", "False", "KW_AssociatedType", 
-  "KW_TypeAlias", "KW_Typedef", "KW_Fundamental", "KW_Typeof", "KW_ext_print_message", 
-  "KW_ext_print_symbol", "KW_ext_prtsym_fully_qualified", "KW_ext_prtsym_least_qualified", 
-  "KW_ext_prtsym_constint_value", "FrequencyId", "ShaderVariantFallback", 
-  "ShaderResourceGroupSemantic", "ShaderResourceGroup", "HLSLSemanticStream", 
-  "HLSLSemanticSystem", "Identifier", "IntegerLiteral", "FloatLiteral", 
-  "StringLiteral", "PragmaDirective", "LineDirective", "Whitespace", "Newline", 
-  "BlockComment", "LineComment"
+  "Float4x3", "Float4x4", "For", "Groupshared", "Globallycoherent", "Global", 
+  "Half", "Half1", "Half2", "Half3", "Half4", "Half1x1", "Half1x2", "Half1x3", 
+  "Half1x4", "Half2x1", "Half2x2", "Half2x3", "Half2x4", "Half3x1", "Half3x2", 
+  "Half3x3", "Half3x4", "Half4x1", "Half4x2", "Half4x3", "Half4x4", "If", 
+  "In", "Inline", "Rootconstant", "Inout", "InputPatch", "Int", "Int16_t", 
+  "Int32_t", "Int64_t", "Int1", "Int2", "Int3", "Int4", "Int1x1", "Int1x2", 
+  "Int1x3", "Int1x4", "Int2x1", "Int2x2", "Int2x3", "Int2x4", "Int3x1", 
+  "Int3x2", "Int3x3", "Int3x4", "Int4x1", "Int4x2", "Int4x3", "Int4x4", 
+  "Interface", "Line_", "LineAdj", "Linear", "LineStream", "Long", "Matrix", 
+  "Nointerpolation", "Noperspective", "Option", "Out", "OutputPatch", "Override", 
+  "Partial", "Packoffset", "Point", "PointStream", "Precise", "RasterizerOrderedBuffer", 
+  "RasterizerOrderedByteAddressBuffer", "RasterizerOrderedStructuredBuffer", 
+  "RasterizerOrderedTexture1D", "RasterizerOrderedTexture1DArray", "RasterizerOrderedTexture2D", 
+  "RasterizerOrderedTexture2DArray", "RasterizerOrderedTexture3D", "RayDesc", 
+  "RaytracingAccelerationStructure", "Register", "Return", "RowMajor", "RWBuffer", 
+  "RWByteAddressBuffer", "RWStructuredBuffer", "RWTexture1D", "RWTexture1DArray", 
+  "RWTexture2D", "RWTexture2DArray", "RWTexture3D", "Sample", "Sampler", 
+  "SamplerCapitalS", "SamplerComparisonState", "SamplerStateCamel", "SamplerState", 
+  "Shared", "SNorm", "Static", "Struct", "StructuredBuffer", "SubpassInput", 
+  "SubpassInputMS", "Switch", "TBuffer", "Texture1D", "Texture1DArray", 
+  "Texture2D", "Texture2DArray", "Texture2DMS", "Texture2DMSArray", "Texture3D", 
+  "TextureCube", "TextureCubeArray", "Triangle", "TriangleAdj", "TriangleStream", 
+  "Uniform", "Uint", "Uint1", "Uint2", "Uint3", "Uint4", "Uint1x1", "Uint1x2", 
+  "Uint1x3", "Uint1x4", "Uint2x1", "Uint2x2", "Uint2x3", "Uint2x4", "Uint3x1", 
+  "Uint3x2", "Uint3x3", "Uint3x4", "Uint4x1", "Uint4x2", "Uint4x3", "Uint4x4", 
+  "Uint16_t", "Uint32_t", "Uint64_t", "UNorm", "Unsigned", "Dword", "Dword1", 
+  "Dword2", "Dword3", "Dword4", "Dword1x1", "Dword1x2", "Dword1x3", "Dword1x4", 
+  "Dword2x1", "Dword2x2", "Dword2x3", "Dword2x4", "Dword3x1", "Dword3x2", 
+  "Dword3x3", "Dword3x4", "Dword4x1", "Dword4x2", "Dword4x3", "Dword4x4", 
+  "Vector", "Volatile", "Void", "While", "StateObjectConfig", "LocalRootSignature", 
+  "GlobalRootSignature", "SubobjectToExportsAssociation", "RaytracingShaderConfig", 
+  "RaytracingPipelineConfig", "RaytracingPipelineConfig1", "TriangleHitGroup", 
+  "ProceduralPrimitiveHitGroup", "ADDRESS_U", "ADDRESS_V", "ADDRESS_W", 
+  "BORDER_COLOR", "MIN_FILTER", "MAG_FILTER", "MIP_FILTER", "MAX_ANISOTROPY", 
+  "MAX_LOD", "MIN_LOD", "MIP_LOD_BIAS", "COMPARISON_FUNC", "REDUCTION_TYPE", 
+  "FILTER_MODE_POINT", "FILTER_MODE_LINEAR", "REDUCTION_TYPE_FILTER", "REDUCTION_TYPE_COMPARISON", 
+  "REDUCTION_TYPE_MINIMUM", "REDUCTION_TYPE_MAXIMUM", "ADDRESS_MODE_WRAP", 
+  "ADDRESS_MODE_MIRROR", "ADDRESS_MODE_CLAMP", "ADDRESS_MODE_BORDER", "ADDRESS_MODE_MIRROR_ONCE", 
+  "COMPARISON_FUNCTION_NEVER", "COMPARISON_FUNCTION_LESS", "COMPARISON_FUNCTION_EQUAL", 
+  "COMPARISON_FUNCTION_LESS_EQUAL", "COMPARISON_FUNCTION_GREATER", "COMPARISON_FUNCTION_NOT_EQUAL", 
+  "COMPARISON_FUNCTION_GREATER_EQUAL", "COMPARISON_FUNCTION_ALWAYS", "BORDER_COLOR_OPAQUE_BLACK", 
+  "BORDER_COLOR_TRANSPARENT_BLACK", "BORDER_COLOR_OPAQUE_WHITE", "LeftParen", 
+  "RightParen", "LeftBracket", "RightBracket", "LeftBrace", "RightBrace", 
+  "LeftDoubleBracket", "Less", "LessEqual", "Greater", "GreaterEqual", "LeftShift", 
+  "RightShift", "Plus", "PlusPlus", "Minus", "MinusMinus", "Star", "Div", 
+  "Mod", "And", "Or", "AndAnd", "OrOr", "Caret", "Not", "Tilde", "Question", 
+  "Colon", "ColonColon", "Semi", "Comma", "Assign", "StarAssign", "DivAssign", 
+  "ModAssign", "PlusAssign", "MinusAssign", "LeftShiftAssign", "RightShiftAssign", 
+  "AndAssign", "XorAssign", "OrAssign", "Equal", "NotEqual", "Dot", "True", 
+  "False", "KW_AssociatedType", "KW_TypeAlias", "KW_Typedef", "KW_Fundamental", 
+  "KW_Typeof", "FrequencyId", "ShaderVariantFallback", "ShaderResourceGroupSemantic", 
+  "ShaderResourceGroup", "KW_ext_print_message", "KW_ext_print_symbol", 
+  "KW_ext_prtsym_fully_qualified", "KW_ext_prtsym_least_qualified", "KW_ext_prtsym_constint_value", 
+  "HLSLSemanticStream", "HLSLSemanticSystem", "Identifier", "IntegerLiteral", 
+  "FloatLiteral", "StringLiteral", "PragmaDirective", "LineDirective", "Whitespace", 
+  "Newline", "BlockComment", "LineComment"
 };
 };
 
 
 dfa::Vocabulary azslLexer::_vocabulary(_literalNames, _symbolicNames);
 dfa::Vocabulary azslLexer::_vocabulary(_literalNames, _symbolicNames);
@@ -306,7 +310,7 @@ azslLexer::Initializer::Initializer() {
 
 
   static const uint16_t serializedATNSegment0[] = {
   static const uint16_t serializedATNSegment0[] = {
     0x3, 0x608b, 0xa72a, 0x8133, 0xb9ed, 0x417c, 0x3be7, 0x7786, 0x5964, 
     0x3, 0x608b, 0xa72a, 0x8133, 0xb9ed, 0x417c, 0x3be7, 0x7786, 0x5964, 
-       0x2, 0x174, 0x1214, 0x8, 0x1, 0x4, 0x2, 0x9, 0x2, 0x4, 0x3, 0x9, 
+       0x2, 0x17c, 0x126b, 0x8, 0x1, 0x4, 0x2, 0x9, 0x2, 0x4, 0x3, 0x9, 
        0x3, 0x4, 0x4, 0x9, 0x4, 0x4, 0x5, 0x9, 0x5, 0x4, 0x6, 0x9, 0x6, 
        0x3, 0x4, 0x4, 0x9, 0x4, 0x4, 0x5, 0x9, 0x5, 0x4, 0x6, 0x9, 0x6, 
        0x4, 0x7, 0x9, 0x7, 0x4, 0x8, 0x9, 0x8, 0x4, 0x9, 0x9, 0x9, 0x4, 
        0x4, 0x7, 0x9, 0x7, 0x4, 0x8, 0x9, 0x8, 0x4, 0x9, 0x9, 0x9, 0x4, 
        0xa, 0x9, 0xa, 0x4, 0xb, 0x9, 0xb, 0x4, 0xc, 0x9, 0xc, 0x4, 0xd, 
        0xa, 0x9, 0xa, 0x4, 0xb, 0x9, 0xb, 0x4, 0xc, 0x9, 0xc, 0x4, 0xd, 
@@ -438,3121 +442,3185 @@ azslLexer::Initializer::Initializer() {
        0x179, 0x4, 0x17a, 0x9, 0x17a, 0x4, 0x17b, 0x9, 0x17b, 0x4, 0x17c, 
        0x179, 0x4, 0x17a, 0x9, 0x17a, 0x4, 0x17b, 0x9, 0x17b, 0x4, 0x17c, 
        0x9, 0x17c, 0x4, 0x17d, 0x9, 0x17d, 0x4, 0x17e, 0x9, 0x17e, 0x4, 
        0x9, 0x17c, 0x4, 0x17d, 0x9, 0x17d, 0x4, 0x17e, 0x9, 0x17e, 0x4, 
        0x17f, 0x9, 0x17f, 0x4, 0x180, 0x9, 0x180, 0x4, 0x181, 0x9, 0x181, 
        0x17f, 0x9, 0x17f, 0x4, 0x180, 0x9, 0x180, 0x4, 0x181, 0x9, 0x181, 
-       0x4, 0x182, 0x9, 0x182, 0x4, 0x183, 0x9, 0x183, 0x3, 0x2, 0x3, 0x2, 
-       0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 
+       0x4, 0x182, 0x9, 0x182, 0x4, 0x183, 0x9, 0x183, 0x4, 0x184, 0x9, 
+       0x184, 0x4, 0x185, 0x9, 0x185, 0x4, 0x186, 0x9, 0x186, 0x4, 0x187, 
+       0x9, 0x187, 0x4, 0x188, 0x9, 0x188, 0x4, 0x189, 0x9, 0x189, 0x4, 
+       0x18a, 0x9, 0x18a, 0x4, 0x18b, 0x9, 0x18b, 0x3, 0x2, 0x3, 0x2, 0x3, 
        0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 
        0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 
        0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 
        0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 
-       0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 
-       0x3, 0x4, 0x3, 0x4, 0x3, 0x4, 0x3, 0x4, 0x3, 0x4, 0x3, 0x4, 0x3, 
-       0x5, 0x3, 0x5, 0x3, 0x5, 0x3, 0x5, 0x3, 0x5, 0x3, 0x5, 0x3, 0x6, 
-       0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x7, 0x3, 
-       0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x8, 0x3, 0x8, 
-       0x3, 0x8, 0x3, 0x8, 0x3, 0x8, 0x3, 0x8, 0x3, 0x8, 0x3, 0x8, 0x3, 
-       0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 0x9, 
-       0x3, 0x9, 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 
-       0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 
-       0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xc, 0x3, 0xc, 0x3, 
-       0xc, 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 0x3, 0xd, 
-       0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 
-       0xd, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 
-       0x3, 0xe, 0x3, 0xe, 0x3, 0xf, 0x3, 0xf, 0x3, 0xf, 0x3, 0xf, 0x3, 
-       0xf, 0x3, 0xf, 0x3, 0xf, 0x3, 0xf, 0x3, 0x10, 0x3, 0x10, 0x3, 0x10, 
-       0x3, 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 0x11, 
-       0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 
-       0x3, 0x11, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 
-       0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 
-       0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x14, 
-       0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 
-       0x3, 0x14, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 
-       0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 
-       0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x17, 
-       0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 
-       0x3, 0x17, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 
-       0x3, 0x18, 0x3, 0x18, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 
-       0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 
-       0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 
-       0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 
-       0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 
-       0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 
-       0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x1a, 0x3, 0x1a, 
-       0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 
-       0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 
-       0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1b, 0x3, 0x1b, 
-       0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1c, 0x3, 0x1c, 
-       0x3, 0x1c, 0x3, 0x1c, 0x3, 0x1c, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1d, 
-       0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1e, 
-       0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 
-       0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 
-       0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 
-       0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 
-       0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x20, 
-       0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 
-       0x3, 0x20, 0x3, 0x20, 0x3, 0x21, 0x3, 0x21, 0x3, 0x21, 0x3, 0x21, 
-       0x3, 0x21, 0x3, 0x21, 0x3, 0x22, 0x3, 0x22, 0x3, 0x22, 0x3, 0x22, 
-       0x3, 0x22, 0x3, 0x22, 0x3, 0x22, 0x3, 0x22, 0x3, 0x22, 0x3, 0x22, 
-       0x3, 0x22, 0x3, 0x22, 0x3, 0x22, 0x3, 0x23, 0x3, 0x23, 0x3, 0x23, 
-       0x3, 0x23, 0x3, 0x23, 0x3, 0x23, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 
-       0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 
-       0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 
-       0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 
-       0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 
-       0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 
-       0x3, 0x26, 0x3, 0x26, 0x3, 0x26, 0x3, 0x26, 0x3, 0x26, 0x3, 0x26, 
-       0x3, 0x26, 0x3, 0x26, 0x3, 0x27, 0x3, 0x27, 0x3, 0x27, 0x3, 0x27, 
-       0x3, 0x27, 0x3, 0x27, 0x3, 0x27, 0x3, 0x27, 0x3, 0x28, 0x3, 0x28, 
-       0x3, 0x28, 0x3, 0x29, 0x3, 0x29, 0x3, 0x29, 0x3, 0x29, 0x3, 0x29, 
-       0x3, 0x29, 0x3, 0x29, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2a, 
-       0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2b, 0x3, 0x2b, 
-       0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2b, 
-       0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 
-       0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 
-       0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2e, 0x3, 0x2e, 
-       0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 
-       0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 
-       0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 
-       0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 
-       0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x31, 0x3, 0x31, 
-       0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 
-       0x3, 0x31, 0x3, 0x31, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 
-       0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 
-       0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 
-       0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x34, 0x3, 0x34, 
-       0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 
-       0x3, 0x34, 0x3, 0x34, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 
-       0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 
-       0x3, 0x36, 0x3, 0x36, 0x3, 0x36, 0x3, 0x36, 0x3, 0x36, 0x3, 0x36, 
-       0x3, 0x36, 0x3, 0x36, 0x3, 0x36, 0x3, 0x36, 0x3, 0x37, 0x3, 0x37, 
-       0x3, 0x37, 0x3, 0x37, 0x3, 0x37, 0x3, 0x37, 0x3, 0x37, 0x3, 0x37, 
-       0x3, 0x37, 0x3, 0x37, 0x3, 0x38, 0x3, 0x38, 0x3, 0x38, 0x3, 0x38, 
-       0x3, 0x38, 0x3, 0x38, 0x3, 0x38, 0x3, 0x38, 0x3, 0x38, 0x3, 0x38, 
-       0x3, 0x39, 0x3, 0x39, 0x3, 0x39, 0x3, 0x39, 0x3, 0x39, 0x3, 0x39, 
-       0x3, 0x39, 0x3, 0x39, 0x3, 0x39, 0x3, 0x39, 0x3, 0x3a, 0x3, 0x3a, 
-       0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3a, 
-       0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3b, 
-       0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3b, 
-       0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 
-       0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3d, 0x3, 0x3d, 
-       0x3, 0x3d, 0x3, 0x3d, 0x3, 0x3d, 0x3, 0x3d, 0x3, 0x3d, 0x3, 0x3d, 
-       0x3, 0x3d, 0x3, 0x3d, 0x3, 0x3e, 0x3, 0x3e, 0x3, 0x3e, 0x3, 0x3e, 
-       0x3, 0x3e, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 
-       0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 
-       0x3, 0x40, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 
-       0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 
-       0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 
-       0x3, 0x41, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 
-       0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 
-       0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 
-       0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 
-       0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 
-       0x3, 0x44, 0x3, 0x44, 0x3, 0x44, 0x3, 0x44, 0x3, 0x44, 0x3, 0x44, 
-       0x3, 0x44, 0x3, 0x45, 0x3, 0x45, 0x3, 0x45, 0x3, 0x45, 0x3, 0x45, 
-       0x3, 0x45, 0x3, 0x45, 0x3, 0x46, 0x3, 0x46, 0x3, 0x46, 0x3, 0x46, 
-       0x3, 0x46, 0x3, 0x46, 0x3, 0x46, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 
-       0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, 0x48, 0x3, 0x48, 
-       0x3, 0x48, 0x3, 0x48, 0x3, 0x48, 0x3, 0x48, 0x3, 0x48, 0x3, 0x48, 
-       0x3, 0x48, 0x3, 0x49, 0x3, 0x49, 0x3, 0x49, 0x3, 0x49, 0x3, 0x49, 
-       0x3, 0x49, 0x3, 0x49, 0x3, 0x49, 0x3, 0x49, 0x3, 0x4a, 0x3, 0x4a, 
-       0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4a, 
-       0x3, 0x4a, 0x3, 0x4b, 0x3, 0x4b, 0x3, 0x4b, 0x3, 0x4b, 0x3, 0x4b, 
-       0x3, 0x4b, 0x3, 0x4b, 0x3, 0x4b, 0x3, 0x4b, 0x3, 0x4c, 0x3, 0x4c, 
-       0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4c, 
-       0x3, 0x4c, 0x3, 0x4d, 0x3, 0x4d, 0x3, 0x4d, 0x3, 0x4d, 0x3, 0x4d, 
-       0x3, 0x4d, 0x3, 0x4d, 0x3, 0x4d, 0x3, 0x4d, 0x3, 0x4e, 0x3, 0x4e, 
-       0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 
-       0x3, 0x4e, 0x3, 0x4f, 0x3, 0x4f, 0x3, 0x4f, 0x3, 0x4f, 0x3, 0x4f, 
-       0x3, 0x4f, 0x3, 0x4f, 0x3, 0x4f, 0x3, 0x4f, 0x3, 0x50, 0x3, 0x50, 
-       0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 
-       0x3, 0x50, 0x3, 0x51, 0x3, 0x51, 0x3, 0x51, 0x3, 0x51, 0x3, 0x51, 
-       0x3, 0x51, 0x3, 0x51, 0x3, 0x51, 0x3, 0x51, 0x3, 0x52, 0x3, 0x52, 
-       0x3, 0x52, 0x3, 0x52, 0x3, 0x52, 0x3, 0x52, 0x3, 0x52, 0x3, 0x52, 
-       0x3, 0x52, 0x3, 0x53, 0x3, 0x53, 0x3, 0x53, 0x3, 0x53, 0x3, 0x53, 
-       0x3, 0x53, 0x3, 0x53, 0x3, 0x53, 0x3, 0x53, 0x3, 0x54, 0x3, 0x54, 
-       0x3, 0x54, 0x3, 0x54, 0x3, 0x54, 0x3, 0x54, 0x3, 0x54, 0x3, 0x54, 
-       0x3, 0x54, 0x3, 0x55, 0x3, 0x55, 0x3, 0x55, 0x3, 0x55, 0x3, 0x55, 
-       0x3, 0x55, 0x3, 0x55, 0x3, 0x55, 0x3, 0x55, 0x3, 0x56, 0x3, 0x56, 
-       0x3, 0x56, 0x3, 0x56, 0x3, 0x56, 0x3, 0x56, 0x3, 0x56, 0x3, 0x56, 
-       0x3, 0x56, 0x3, 0x57, 0x3, 0x57, 0x3, 0x57, 0x3, 0x57, 0x3, 0x57, 
-       0x3, 0x57, 0x3, 0x57, 0x3, 0x57, 0x3, 0x57, 0x3, 0x58, 0x3, 0x58, 
-       0x3, 0x58, 0x3, 0x58, 0x3, 0x59, 0x3, 0x59, 0x3, 0x59, 0x3, 0x59, 
-       0x3, 0x59, 0x3, 0x59, 0x3, 0x59, 0x3, 0x59, 0x3, 0x59, 0x3, 0x59, 
-       0x3, 0x59, 0x3, 0x59, 0x3, 0x5a, 0x3, 0x5a, 0x3, 0x5a, 0x3, 0x5a, 
-       0x3, 0x5a, 0x3, 0x5a, 0x3, 0x5a, 0x3, 0x5b, 0x3, 0x5b, 0x3, 0x5b, 
-       0x3, 0x5b, 0x3, 0x5b, 0x3, 0x5c, 0x3, 0x5c, 0x3, 0x5c, 0x3, 0x5c, 
-       0x3, 0x5c, 0x3, 0x5c, 0x3, 0x5d, 0x3, 0x5d, 0x3, 0x5d, 0x3, 0x5d, 
-       0x3, 0x5d, 0x3, 0x5d, 0x3, 0x5e, 0x3, 0x5e, 0x3, 0x5e, 0x3, 0x5e, 
-       0x3, 0x5e, 0x3, 0x5e, 0x3, 0x5f, 0x3, 0x5f, 0x3, 0x5f, 0x3, 0x5f, 
-       0x3, 0x5f, 0x3, 0x5f, 0x3, 0x60, 0x3, 0x60, 0x3, 0x60, 0x3, 0x60, 
-       0x3, 0x60, 0x3, 0x60, 0x3, 0x60, 0x3, 0x60, 0x3, 0x61, 0x3, 0x61, 
-       0x3, 0x61, 0x3, 0x61, 0x3, 0x61, 0x3, 0x61, 0x3, 0x61, 0x3, 0x61, 
-       0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 
-       0x3, 0x62, 0x3, 0x62, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 
-       0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x64, 0x3, 0x64, 
-       0x3, 0x64, 0x3, 0x64, 0x3, 0x64, 0x3, 0x64, 0x3, 0x64, 0x3, 0x64, 
-       0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 
-       0x3, 0x65, 0x3, 0x65, 0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 
-       0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x67, 0x3, 0x67, 
-       0x3, 0x67, 0x3, 0x67, 0x3, 0x67, 0x3, 0x67, 0x3, 0x67, 0x3, 0x67, 
-       0x3, 0x68, 0x3, 0x68, 0x3, 0x68, 0x3, 0x68, 0x3, 0x68, 0x3, 0x68, 
-       0x3, 0x68, 0x3, 0x68, 0x3, 0x69, 0x3, 0x69, 0x3, 0x69, 0x3, 0x69, 
-       0x3, 0x69, 0x3, 0x69, 0x3, 0x69, 0x3, 0x69, 0x3, 0x6a, 0x3, 0x6a, 
-       0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 
-       0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 
-       0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 
-       0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6d, 0x3, 0x6d, 
-       0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6d, 
-       0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 
-       0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x6f, 
-       0x3, 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x70, 0x3, 0x70, 
-       0x3, 0x70, 0x3, 0x71, 0x3, 0x71, 0x3, 0x71, 0x3, 0x72, 0x3, 0x72, 
-       0x3, 0x72, 0x3, 0x72, 0x3, 0x72, 0x3, 0x72, 0x3, 0x72, 0x3, 0x73, 
-       0x3, 0x73, 0x3, 0x73, 0x3, 0x73, 0x3, 0x73, 0x3, 0x73, 0x3, 0x73, 
-       0x3, 0x73, 0x3, 0x73, 0x3, 0x73, 0x3, 0x73, 0x3, 0x73, 0x3, 0x73, 
-       0x3, 0x74, 0x3, 0x74, 0x3, 0x74, 0x3, 0x74, 0x3, 0x74, 0x3, 0x74, 
-       0x3, 0x74, 0x3, 0x74, 0x3, 0x74, 0x3, 0x74, 0x3, 0x74, 0x5, 0x74, 
-       0x70e, 0xa, 0x74, 0x3, 0x75, 0x3, 0x75, 0x3, 0x75, 0x3, 0x75, 0x3, 
+       0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 
+       0x3, 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 
+       0x4, 0x3, 0x4, 0x3, 0x4, 0x3, 0x4, 0x3, 0x4, 0x3, 0x4, 0x3, 0x5, 
+       0x3, 0x5, 0x3, 0x5, 0x3, 0x5, 0x3, 0x5, 0x3, 0x5, 0x3, 0x6, 0x3, 
+       0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x7, 0x3, 0x7, 
+       0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x8, 0x3, 0x8, 0x3, 
+       0x8, 0x3, 0x8, 0x3, 0x8, 0x3, 0x8, 0x3, 0x8, 0x3, 0x8, 0x3, 0x9, 
+       0x3, 0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 0x9, 0x3, 
+       0x9, 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 
+       0x3, 0xa, 0x3, 0xa, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 
+       0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 
+       0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 0x3, 0xd, 0x3, 
+       0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 
+       0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 
+       0xe, 0x3, 0xe, 0x3, 0xf, 0x3, 0xf, 0x3, 0xf, 0x3, 0xf, 0x3, 0xf, 
+       0x3, 0xf, 0x3, 0xf, 0x3, 0xf, 0x3, 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 
+       0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 0x10, 0x3, 0x11, 0x3, 
+       0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 
+       0x11, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 
+       0x12, 0x3, 0x12, 0x3, 0x12, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 
+       0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x13, 0x3, 0x14, 0x3, 
+       0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 0x14, 0x3, 
+       0x14, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 
+       0x15, 0x3, 0x15, 0x3, 0x15, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 
+       0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x17, 0x3, 
+       0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 0x17, 0x3, 
+       0x17, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 
+       0x18, 0x3, 0x18, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 
+       0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 
+       0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 
+       0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 
+       0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 
+       0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 
+       0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x19, 0x3, 0x1a, 0x3, 0x1a, 0x3, 
+       0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 
+       0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 
+       0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1b, 0x3, 0x1b, 0x3, 
+       0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x3, 0x1c, 0x3, 0x1c, 0x3, 
+       0x1c, 0x3, 0x1c, 0x3, 0x1c, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x3, 
+       0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1e, 0x3, 
+       0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3, 
+       0x1e, 0x3, 0x1e, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 
+       0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 
+       0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x1f, 0x3, 0x20, 0x3, 
+       0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 
+       0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x3, 
+       0x20, 0x3, 0x20, 0x3, 0x21, 0x3, 0x21, 0x3, 0x21, 0x3, 0x21, 0x3, 
+       0x21, 0x3, 0x21, 0x3, 0x22, 0x3, 0x22, 0x3, 0x22, 0x3, 0x22, 0x3, 
+       0x22, 0x3, 0x22, 0x3, 0x22, 0x3, 0x22, 0x3, 0x22, 0x3, 0x22, 0x3, 
+       0x22, 0x3, 0x22, 0x3, 0x22, 0x3, 0x23, 0x3, 0x23, 0x3, 0x23, 0x3, 
+       0x23, 0x3, 0x23, 0x3, 0x23, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 
+       0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 
+       0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 
+       0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 
+       0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 
+       0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 
+       0x26, 0x3, 0x26, 0x3, 0x26, 0x3, 0x26, 0x3, 0x26, 0x3, 0x26, 0x3, 
+       0x26, 0x3, 0x26, 0x3, 0x27, 0x3, 0x27, 0x3, 0x27, 0x3, 0x27, 0x3, 
+       0x27, 0x3, 0x27, 0x3, 0x27, 0x3, 0x27, 0x3, 0x28, 0x3, 0x28, 0x3, 
+       0x28, 0x3, 0x29, 0x3, 0x29, 0x3, 0x29, 0x3, 0x29, 0x3, 0x29, 0x3, 
+       0x29, 0x3, 0x29, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3, 
+       0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2a, 0x3, 0x2b, 0x3, 0x2b, 0x3, 
+       0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, 
+       0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 
+       0x2c, 0x3, 0x2c, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 
+       0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2e, 0x3, 0x2e, 0x3, 
+       0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, 
+       0x2e, 0x3, 0x2e, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 
+       0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, 0x3, 
+       0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 
+       0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x31, 0x3, 0x31, 0x3, 
+       0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 
+       0x31, 0x3, 0x31, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 
+       0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 0x32, 0x3, 
+       0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 
+       0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x34, 0x3, 0x34, 0x3, 
+       0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 0x34, 0x3, 
+       0x34, 0x3, 0x34, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 
+       0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 
+       0x36, 0x3, 0x36, 0x3, 0x36, 0x3, 0x36, 0x3, 0x36, 0x3, 0x36, 0x3, 
+       0x36, 0x3, 0x36, 0x3, 0x36, 0x3, 0x36, 0x3, 0x37, 0x3, 0x37, 0x3, 
+       0x37, 0x3, 0x37, 0x3, 0x37, 0x3, 0x37, 0x3, 0x37, 0x3, 0x37, 0x3, 
+       0x37, 0x3, 0x37, 0x3, 0x38, 0x3, 0x38, 0x3, 0x38, 0x3, 0x38, 0x3, 
+       0x38, 0x3, 0x38, 0x3, 0x38, 0x3, 0x38, 0x3, 0x38, 0x3, 0x38, 0x3, 
+       0x39, 0x3, 0x39, 0x3, 0x39, 0x3, 0x39, 0x3, 0x39, 0x3, 0x39, 0x3, 
+       0x39, 0x3, 0x39, 0x3, 0x39, 0x3, 0x39, 0x3, 0x3a, 0x3, 0x3a, 0x3, 
+       0x3a, 0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3a, 0x3, 
+       0x3a, 0x3, 0x3a, 0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3b, 0x3, 
+       0x3b, 0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3b, 0x3, 
+       0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 
+       0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3d, 0x3, 0x3d, 0x3, 
+       0x3d, 0x3, 0x3d, 0x3, 0x3d, 0x3, 0x3d, 0x3, 0x3d, 0x3, 0x3d, 0x3, 
+       0x3d, 0x3, 0x3d, 0x3, 0x3e, 0x3, 0x3e, 0x3, 0x3e, 0x3, 0x3e, 0x3, 
+       0x3e, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 
+       0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 0x40, 0x3, 
+       0x40, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x3, 
+       0x41, 0x3, 0x41, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 
+       0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 
+       0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 0x42, 0x3, 
+       0x42, 0x3, 0x42, 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 
+       0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 
+       0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 
+       0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 
+       0x43, 0x3, 0x44, 0x3, 0x44, 0x3, 0x44, 0x3, 0x44, 0x3, 0x44, 0x3, 
+       0x44, 0x3, 0x45, 0x3, 0x45, 0x3, 0x45, 0x3, 0x45, 0x3, 0x45, 0x3, 
+       0x45, 0x3, 0x45, 0x3, 0x46, 0x3, 0x46, 0x3, 0x46, 0x3, 0x46, 0x3, 
+       0x46, 0x3, 0x46, 0x3, 0x46, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, 
+       0x47, 0x3, 0x47, 0x3, 0x47, 0x3, 0x47, 0x3, 0x48, 0x3, 0x48, 0x3, 
+       0x48, 0x3, 0x48, 0x3, 0x48, 0x3, 0x48, 0x3, 0x48, 0x3, 0x49, 0x3, 
+       0x49, 0x3, 0x49, 0x3, 0x49, 0x3, 0x49, 0x3, 0x49, 0x3, 0x49, 0x3, 
+       0x49, 0x3, 0x49, 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4a, 0x3, 
+       0x4a, 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4b, 0x3, 
+       0x4b, 0x3, 0x4b, 0x3, 0x4b, 0x3, 0x4b, 0x3, 0x4b, 0x3, 0x4b, 0x3, 
+       0x4b, 0x3, 0x4b, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x3, 
+       0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4d, 0x3, 
+       0x4d, 0x3, 0x4d, 0x3, 0x4d, 0x3, 0x4d, 0x3, 0x4d, 0x3, 0x4d, 0x3, 
+       0x4d, 0x3, 0x4d, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, 
+       0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4f, 0x3, 
+       0x4f, 0x3, 0x4f, 0x3, 0x4f, 0x3, 0x4f, 0x3, 0x4f, 0x3, 0x4f, 0x3, 
+       0x4f, 0x3, 0x4f, 0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 0x3, 
+       0x50, 0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 0x3, 0x51, 0x3, 
+       0x51, 0x3, 0x51, 0x3, 0x51, 0x3, 0x51, 0x3, 0x51, 0x3, 0x51, 0x3, 
+       0x51, 0x3, 0x51, 0x3, 0x52, 0x3, 0x52, 0x3, 0x52, 0x3, 0x52, 0x3, 
+       0x52, 0x3, 0x52, 0x3, 0x52, 0x3, 0x52, 0x3, 0x52, 0x3, 0x53, 0x3, 
+       0x53, 0x3, 0x53, 0x3, 0x53, 0x3, 0x53, 0x3, 0x53, 0x3, 0x53, 0x3, 
+       0x53, 0x3, 0x53, 0x3, 0x54, 0x3, 0x54, 0x3, 0x54, 0x3, 0x54, 0x3, 
+       0x54, 0x3, 0x54, 0x3, 0x54, 0x3, 0x54, 0x3, 0x54, 0x3, 0x55, 0x3, 
+       0x55, 0x3, 0x55, 0x3, 0x55, 0x3, 0x55, 0x3, 0x55, 0x3, 0x55, 0x3, 
+       0x55, 0x3, 0x55, 0x3, 0x56, 0x3, 0x56, 0x3, 0x56, 0x3, 0x56, 0x3, 
+       0x56, 0x3, 0x56, 0x3, 0x56, 0x3, 0x56, 0x3, 0x56, 0x3, 0x57, 0x3, 
+       0x57, 0x3, 0x57, 0x3, 0x57, 0x3, 0x57, 0x3, 0x57, 0x3, 0x57, 0x3, 
+       0x57, 0x3, 0x57, 0x3, 0x58, 0x3, 0x58, 0x3, 0x58, 0x3, 0x58, 0x3, 
+       0x58, 0x3, 0x58, 0x3, 0x58, 0x3, 0x58, 0x3, 0x58, 0x3, 0x59, 0x3, 
+       0x59, 0x3, 0x59, 0x3, 0x59, 0x3, 0x5a, 0x3, 0x5a, 0x3, 0x5a, 0x3, 
+       0x5a, 0x3, 0x5a, 0x3, 0x5a, 0x3, 0x5a, 0x3, 0x5a, 0x3, 0x5a, 0x3, 
+       0x5a, 0x3, 0x5a, 0x3, 0x5a, 0x3, 0x5b, 0x3, 0x5b, 0x3, 0x5b, 0x3, 
+       0x5b, 0x3, 0x5b, 0x3, 0x5b, 0x3, 0x5b, 0x3, 0x5b, 0x3, 0x5b, 0x3, 
+       0x5b, 0x3, 0x5b, 0x3, 0x5b, 0x3, 0x5b, 0x3, 0x5b, 0x3, 0x5b, 0x3, 
+       0x5b, 0x3, 0x5b, 0x3, 0x5c, 0x3, 0x5c, 0x3, 0x5c, 0x3, 0x5c, 0x3, 
+       0x5c, 0x3, 0x5c, 0x3, 0x5c, 0x3, 0x5d, 0x3, 0x5d, 0x3, 0x5d, 0x3, 
+       0x5d, 0x3, 0x5d, 0x3, 0x5e, 0x3, 0x5e, 0x3, 0x5e, 0x3, 0x5e, 0x3, 
+       0x5e, 0x3, 0x5e, 0x3, 0x5f, 0x3, 0x5f, 0x3, 0x5f, 0x3, 0x5f, 0x3, 
+       0x5f, 0x3, 0x5f, 0x3, 0x60, 0x3, 0x60, 0x3, 0x60, 0x3, 0x60, 0x3, 
+       0x60, 0x3, 0x60, 0x3, 0x61, 0x3, 0x61, 0x3, 0x61, 0x3, 0x61, 0x3, 
+       0x61, 0x3, 0x61, 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 
+       0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 0x63, 0x3, 0x63, 0x3, 
+       0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 
+       0x64, 0x3, 0x64, 0x3, 0x64, 0x3, 0x64, 0x3, 0x64, 0x3, 0x64, 0x3, 
+       0x64, 0x3, 0x64, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 
+       0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x66, 0x3, 0x66, 0x3, 
+       0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 
+       0x67, 0x3, 0x67, 0x3, 0x67, 0x3, 0x67, 0x3, 0x67, 0x3, 0x67, 0x3, 
+       0x67, 0x3, 0x67, 0x3, 0x68, 0x3, 0x68, 0x3, 0x68, 0x3, 0x68, 0x3, 
+       0x68, 0x3, 0x68, 0x3, 0x68, 0x3, 0x68, 0x3, 0x69, 0x3, 0x69, 0x3, 
+       0x69, 0x3, 0x69, 0x3, 0x69, 0x3, 0x69, 0x3, 0x69, 0x3, 0x69, 0x3, 
+       0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 
+       0x6a, 0x3, 0x6a, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 
+       0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6c, 0x3, 0x6c, 0x3, 
+       0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 
+       0x6d, 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6d, 0x3, 
+       0x6d, 0x3, 0x6d, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 
+       0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6f, 0x3, 0x6f, 0x3, 
+       0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 
+       0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 
+       0x70, 0x3, 0x70, 0x3, 0x71, 0x3, 0x71, 0x3, 0x71, 0x3, 0x71, 0x3, 
+       0x71, 0x3, 0x71, 0x3, 0x71, 0x3, 0x71, 0x3, 0x72, 0x3, 0x72, 0x3, 
+       0x72, 0x3, 0x73, 0x3, 0x73, 0x3, 0x73, 0x3, 0x74, 0x3, 0x74, 0x3, 
+       0x74, 0x3, 0x74, 0x3, 0x74, 0x3, 0x74, 0x3, 0x74, 0x3, 0x75, 0x3, 
+       0x75, 0x3, 0x75, 0x3, 0x75, 0x3, 0x75, 0x3, 0x75, 0x3, 0x75, 0x3, 
        0x75, 0x3, 0x75, 0x3, 0x75, 0x3, 0x75, 0x3, 0x75, 0x3, 0x75, 0x3, 
        0x75, 0x3, 0x75, 0x3, 0x75, 0x3, 0x75, 0x3, 0x75, 0x3, 0x75, 0x3, 
-       0x75, 0x3, 0x76, 0x3, 0x76, 0x3, 0x76, 0x3, 0x76, 0x3, 0x77, 0x3, 
-       0x77, 0x3, 0x77, 0x3, 0x77, 0x3, 0x77, 0x3, 0x77, 0x3, 0x77, 0x3, 
-       0x77, 0x3, 0x78, 0x3, 0x78, 0x3, 0x78, 0x3, 0x78, 0x3, 0x78, 0x3, 
-       0x78, 0x3, 0x78, 0x3, 0x78, 0x3, 0x79, 0x3, 0x79, 0x3, 0x79, 0x3, 
-       0x79, 0x3, 0x79, 0x3, 0x7a, 0x3, 0x7a, 0x3, 0x7a, 0x3, 0x7a, 0x3, 
-       0x7a, 0x3, 0x7b, 0x3, 0x7b, 0x3, 0x7b, 0x3, 0x7b, 0x3, 0x7b, 0x3, 
-       0x7c, 0x3, 0x7c, 0x3, 0x7c, 0x3, 0x7c, 0x3, 0x7c, 0x3, 0x7d, 0x3, 
-       0x7d, 0x3, 0x7d, 0x3, 0x7d, 0x3, 0x7d, 0x3, 0x7d, 0x3, 0x7d, 0x3, 
-       0x7e, 0x3, 0x7e, 0x3, 0x7e, 0x3, 0x7e, 0x3, 0x7e, 0x3, 0x7e, 0x3, 
-       0x7e, 0x3, 0x7f, 0x3, 0x7f, 0x3, 0x7f, 0x3, 0x7f, 0x3, 0x7f, 0x3, 
-       0x7f, 0x3, 0x7f, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 
-       0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x81, 0x3, 0x81, 0x3, 0x81, 0x3, 
-       0x81, 0x3, 0x81, 0x3, 0x81, 0x3, 0x81, 0x3, 0x82, 0x3, 0x82, 0x3, 
-       0x82, 0x3, 0x82, 0x3, 0x82, 0x3, 0x82, 0x3, 0x82, 0x3, 0x83, 0x3, 
-       0x83, 0x3, 0x83, 0x3, 0x83, 0x3, 0x83, 0x3, 0x83, 0x3, 0x83, 0x3, 
-       0x84, 0x3, 0x84, 0x3, 0x84, 0x3, 0x84, 0x3, 0x84, 0x3, 0x84, 0x3, 
-       0x84, 0x3, 0x85, 0x3, 0x85, 0x3, 0x85, 0x3, 0x85, 0x3, 0x85, 0x3, 
-       0x85, 0x3, 0x85, 0x3, 0x86, 0x3, 0x86, 0x3, 0x86, 0x3, 0x86, 0x3, 
-       0x86, 0x3, 0x86, 0x3, 0x86, 0x3, 0x87, 0x3, 0x87, 0x3, 0x87, 0x3, 
-       0x87, 0x3, 0x87, 0x3, 0x87, 0x3, 0x87, 0x3, 0x88, 0x3, 0x88, 0x3, 
-       0x88, 0x3, 0x88, 0x3, 0x88, 0x3, 0x88, 0x3, 0x88, 0x3, 0x89, 0x3, 
-       0x89, 0x3, 0x89, 0x3, 0x89, 0x3, 0x89, 0x3, 0x89, 0x3, 0x89, 0x3, 
-       0x8a, 0x3, 0x8a, 0x3, 0x8a, 0x3, 0x8a, 0x3, 0x8a, 0x3, 0x8a, 0x3, 
-       0x8a, 0x3, 0x8b, 0x3, 0x8b, 0x3, 0x8b, 0x3, 0x8b, 0x3, 0x8b, 0x3, 
-       0x8b, 0x3, 0x8b, 0x3, 0x8c, 0x3, 0x8c, 0x3, 0x8c, 0x3, 0x8c, 0x3, 
-       0x8c, 0x3, 0x8c, 0x3, 0x8c, 0x3, 0x8d, 0x3, 0x8d, 0x3, 0x8d, 0x3, 
-       0x8d, 0x3, 0x8d, 0x3, 0x8d, 0x3, 0x8d, 0x3, 0x8d, 0x3, 0x8d, 0x3, 
-       0x8d, 0x3, 0x8e, 0x3, 0x8e, 0x3, 0x8e, 0x3, 0x8e, 0x3, 0x8e, 0x3, 
-       0x8f, 0x3, 0x8f, 0x3, 0x8f, 0x3, 0x8f, 0x3, 0x8f, 0x3, 0x8f, 0x3, 
-       0x8f, 0x3, 0x8f, 0x3, 0x90, 0x3, 0x90, 0x3, 0x90, 0x3, 0x90, 0x3, 
-       0x90, 0x3, 0x90, 0x3, 0x90, 0x3, 0x91, 0x3, 0x91, 0x3, 0x91, 0x3, 
-       0x91, 0x3, 0x91, 0x3, 0x91, 0x3, 0x91, 0x3, 0x91, 0x3, 0x91, 0x3, 
-       0x91, 0x3, 0x91, 0x3, 0x92, 0x3, 0x92, 0x3, 0x92, 0x3, 0x92, 0x3, 
-       0x92, 0x3, 0x93, 0x3, 0x93, 0x3, 0x93, 0x3, 0x93, 0x3, 0x93, 0x3, 
-       0x93, 0x3, 0x93, 0x3, 0x94, 0x3, 0x94, 0x3, 0x94, 0x3, 0x94, 0x3, 
-       0x94, 0x3, 0x94, 0x3, 0x94, 0x3, 0x94, 0x3, 0x94, 0x3, 0x94, 0x3, 
-       0x94, 0x3, 0x94, 0x3, 0x94, 0x3, 0x94, 0x3, 0x94, 0x3, 0x94, 0x3, 
-       0x95, 0x3, 0x95, 0x3, 0x95, 0x3, 0x95, 0x3, 0x95, 0x3, 0x95, 0x3, 
-       0x95, 0x3, 0x95, 0x3, 0x95, 0x3, 0x95, 0x3, 0x95, 0x3, 0x95, 0x3, 
-       0x95, 0x3, 0x95, 0x3, 0x96, 0x3, 0x96, 0x3, 0x96, 0x3, 0x96, 0x3, 
-       0x96, 0x3, 0x96, 0x3, 0x96, 0x3, 0x97, 0x3, 0x97, 0x3, 0x97, 0x3, 
-       0x97, 0x3, 0x98, 0x3, 0x98, 0x3, 0x98, 0x3, 0x98, 0x3, 0x98, 0x3, 
-       0x98, 0x3, 0x98, 0x3, 0x98, 0x3, 0x98, 0x3, 0x98, 0x3, 0x98, 0x3, 
-       0x98, 0x3, 0x99, 0x3, 0x99, 0x3, 0x99, 0x3, 0x99, 0x3, 0x99, 0x3, 
-       0x99, 0x3, 0x99, 0x3, 0x99, 0x3, 0x99, 0x3, 0x9a, 0x3, 0x9a, 0x3, 
-       0x9a, 0x3, 0x9a, 0x3, 0x9a, 0x3, 0x9a, 0x3, 0x9a, 0x3, 0x9a, 0x3, 
-       0x9b, 0x3, 0x9b, 0x3, 0x9b, 0x3, 0x9b, 0x3, 0x9b, 0x3, 0x9b, 0x3, 
-       0x9b, 0x3, 0x9b, 0x3, 0x9b, 0x3, 0x9b, 0x3, 0x9b, 0x3, 0x9c, 0x3, 
-       0x9c, 0x3, 0x9c, 0x3, 0x9c, 0x3, 0x9c, 0x3, 0x9c, 0x3, 0x9d, 0x3, 
-       0x9d, 0x3, 0x9d, 0x3, 0x9d, 0x3, 0x9d, 0x3, 0x9d, 0x3, 0x9d, 0x3, 
-       0x9d, 0x3, 0x9d, 0x3, 0x9d, 0x3, 0x9d, 0x3, 0x9d, 0x3, 0x9e, 0x3, 
-       0x9e, 0x3, 0x9e, 0x3, 0x9e, 0x3, 0x9e, 0x3, 0x9e, 0x3, 0x9e, 0x3, 
-       0x9e, 0x3, 0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 
-       0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 
-       0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 
-       0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 
-       0x9f, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 
-       0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 
-       0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 
-       0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 
-       0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 
-       0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 
-       0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 
-       0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 
-       0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 
-       0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 
-       0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 
-       0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa2, 0x3, 0xa2, 0x3, 
-       0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 
-       0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 
-       0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 
-       0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 
-       0xa2, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 
-       0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 
-       0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 
-       0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 
-       0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 
-       0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 
-       0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 
-       0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 
-       0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 
-       0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 
-       0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 
-       0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 
-       0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 
-       0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 
-       0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 
-       0xa5, 0x3, 0xa5, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 
-       0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 
-       0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 
-       0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 
-       0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa7, 0x3, 
-       0xa7, 0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 0x3, 
-       0xa7, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 
-       0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 
-       0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 
-       0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 
-       0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 
-       0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 
-       0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 
-       0xaa, 0x3, 0xaa, 0x3, 0xaa, 0x3, 0xaa, 0x3, 0xaa, 0x3, 0xaa, 0x3, 
-       0xaa, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 
-       0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xac, 0x3, 
-       0xac, 0x3, 0xac, 0x3, 0xac, 0x3, 0xac, 0x3, 0xac, 0x3, 0xac, 0x3, 
-       0xac, 0x3, 0xac, 0x3, 0xad, 0x3, 0xad, 0x3, 0xad, 0x3, 0xad, 0x3, 
-       0xad, 0x3, 0xad, 0x3, 0xad, 0x3, 0xad, 0x3, 0xad, 0x3, 0xad, 0x3, 
-       0xad, 0x3, 0xad, 0x3, 0xad, 0x3, 0xad, 0x3, 0xad, 0x3, 0xad, 0x3, 
-       0xad, 0x3, 0xad, 0x3, 0xad, 0x3, 0xad, 0x3, 0xae, 0x3, 0xae, 0x3, 
-       0xae, 0x3, 0xae, 0x3, 0xae, 0x3, 0xae, 0x3, 0xae, 0x3, 0xae, 0x3, 
-       0xae, 0x3, 0xae, 0x3, 0xae, 0x3, 0xae, 0x3, 0xae, 0x3, 0xae, 0x3, 
-       0xae, 0x3, 0xae, 0x3, 0xae, 0x3, 0xae, 0x3, 0xae, 0x3, 0xaf, 0x3, 
-       0xaf, 0x3, 0xaf, 0x3, 0xaf, 0x3, 0xaf, 0x3, 0xaf, 0x3, 0xaf, 0x3, 
-       0xaf, 0x3, 0xaf, 0x3, 0xaf, 0x3, 0xaf, 0x3, 0xaf, 0x3, 0xb0, 0x3, 
-       0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 
-       0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 
-       0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb1, 0x3, 0xb1, 0x3, 
-       0xb1, 0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb1, 0x3, 
-       0xb1, 0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb2, 0x3, 0xb2, 0x3, 
-       0xb2, 0x3, 0xb2, 0x3, 0xb2, 0x3, 0xb2, 0x3, 0xb2, 0x3, 0xb2, 0x3, 
-       0xb2, 0x3, 0xb2, 0x3, 0xb2, 0x3, 0xb2, 0x3, 0xb2, 0x3, 0xb2, 0x3, 
-       0xb2, 0x3, 0xb2, 0x3, 0xb2, 0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb3, 0x3, 
-       0xb3, 0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb3, 0x3, 
-       0xb3, 0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb4, 0x3, 0xb4, 0x3, 0xb4, 0x3, 
-       0xb4, 0x3, 0xb4, 0x3, 0xb4, 0x3, 0xb4, 0x3, 0xb5, 0x3, 0xb5, 0x3, 
-       0xb5, 0x3, 0xb5, 0x3, 0xb5, 0x3, 0xb5, 0x3, 0xb5, 0x3, 0xb5, 0x3, 
-       0xb6, 0x3, 0xb6, 0x3, 0xb6, 0x3, 0xb6, 0x3, 0xb6, 0x3, 0xb6, 0x3, 
-       0xb6, 0x3, 0xb6, 0x3, 0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 
-       0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 
-       0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 
-       0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 
-       0xb7, 0x3, 0xb8, 0x3, 0xb8, 0x3, 0xb8, 0x3, 0xb8, 0x3, 0xb8, 0x3, 
-       0xb8, 0x3, 0xb8, 0x3, 0xb8, 0x3, 0xb8, 0x3, 0xb8, 0x3, 0xb8, 0x3, 
-       0xb8, 0x3, 0xb8, 0x3, 0xb9, 0x3, 0xb9, 0x3, 0xb9, 0x3, 0xb9, 0x3, 
-       0xb9, 0x3, 0xb9, 0x3, 0xb9, 0x3, 0xba, 0x3, 0xba, 0x3, 0xba, 0x3, 
-       0xba, 0x3, 0xba, 0x3, 0xba, 0x3, 0xba, 0x3, 0xbb, 0x3, 0xbb, 0x3, 
-       0xbb, 0x3, 0xbb, 0x3, 0xbb, 0x3, 0xbb, 0x3, 0xbb, 0x3, 0xbc, 0x3, 
-       0xbc, 0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbc, 0x3, 
-       0xbc, 0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbc, 0x3, 
-       0xbc, 0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbd, 0x3, 0xbd, 0x3, 
-       0xbd, 0x3, 0xbd, 0x3, 0xbd, 0x3, 0xbd, 0x3, 0xbd, 0x3, 0xbd, 0x3, 
-       0xbd, 0x3, 0xbd, 0x3, 0xbd, 0x3, 0xbd, 0x3, 0xbd, 0x3, 0xbe, 0x3, 
-       0xbe, 0x3, 0xbe, 0x3, 0xbe, 0x3, 0xbe, 0x3, 0xbe, 0x3, 0xbe, 0x3, 
-       0xbe, 0x3, 0xbe, 0x3, 0xbe, 0x3, 0xbe, 0x3, 0xbe, 0x3, 0xbe, 0x3, 
-       0xbe, 0x3, 0xbe, 0x3, 0xbf, 0x3, 0xbf, 0x3, 0xbf, 0x3, 0xbf, 0x3, 
-       0xbf, 0x3, 0xbf, 0x3, 0xbf, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 
-       0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 
-       0xc0, 0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 0x3, 
-       0xc1, 0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 0x3, 
-       0xc1, 0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc2, 0x3, 0xc2, 0x3, 
-       0xc2, 0x3, 0xc2, 0x3, 0xc2, 0x3, 0xc2, 0x3, 0xc2, 0x3, 0xc2, 0x3, 
-       0xc2, 0x3, 0xc2, 0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc3, 0x3, 
-       0xc3, 0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc3, 0x3, 
-       0xc3, 0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc4, 0x3, 
-       0xc4, 0x3, 0xc4, 0x3, 0xc4, 0x3, 0xc4, 0x3, 0xc4, 0x3, 0xc4, 0x3, 
-       0xc4, 0x3, 0xc4, 0x3, 0xc4, 0x3, 0xc4, 0x3, 0xc4, 0x3, 0xc5, 0x3, 
-       0xc5, 0x3, 0xc5, 0x3, 0xc5, 0x3, 0xc5, 0x3, 0xc5, 0x3, 0xc5, 0x3, 
-       0xc5, 0x3, 0xc5, 0x3, 0xc5, 0x3, 0xc5, 0x3, 0xc5, 0x3, 0xc5, 0x3, 
-       0xc5, 0x3, 0xc5, 0x3, 0xc5, 0x3, 0xc5, 0x3, 0xc6, 0x3, 0xc6, 0x3, 
-       0xc6, 0x3, 0xc6, 0x3, 0xc6, 0x3, 0xc6, 0x3, 0xc6, 0x3, 0xc6, 0x3, 
-       0xc6, 0x3, 0xc6, 0x3, 0xc7, 0x3, 0xc7, 0x3, 0xc7, 0x3, 0xc7, 0x3, 
-       0xc7, 0x3, 0xc7, 0x3, 0xc7, 0x3, 0xc7, 0x3, 0xc7, 0x3, 0xc7, 0x3, 
-       0xc7, 0x3, 0xc7, 0x3, 0xc8, 0x3, 0xc8, 0x3, 0xc8, 0x3, 0xc8, 0x3, 
-       0xc8, 0x3, 0xc8, 0x3, 0xc8, 0x3, 0xc8, 0x3, 0xc8, 0x3, 0xc8, 0x3, 
-       0xc8, 0x3, 0xc8, 0x3, 0xc8, 0x3, 0xc8, 0x3, 0xc8, 0x3, 0xc8, 0x3, 
-       0xc8, 0x3, 0xc9, 0x3, 0xc9, 0x3, 0xc9, 0x3, 0xc9, 0x3, 0xc9, 0x3, 
-       0xc9, 0x3, 0xc9, 0x3, 0xc9, 0x3, 0xc9, 0x3, 0xca, 0x3, 0xca, 0x3, 
-       0xca, 0x3, 0xca, 0x3, 0xca, 0x3, 0xca, 0x3, 0xca, 0x3, 0xca, 0x3, 
-       0xca, 0x3, 0xca, 0x3, 0xca, 0x3, 0xca, 0x3, 0xcb, 0x3, 0xcb, 0x3, 
-       0xcb, 0x3, 0xcb, 0x3, 0xcb, 0x3, 0xcb, 0x3, 0xcb, 0x3, 0xcb, 0x3, 
-       0xcb, 0x3, 0xcb, 0x3, 0xcb, 0x3, 0xcb, 0x3, 0xcb, 0x3, 0xcb, 0x3, 
-       0xcb, 0x3, 0xcc, 0x3, 0xcc, 0x3, 0xcc, 0x3, 0xcc, 0x3, 0xcc, 0x3, 
-       0xcc, 0x3, 0xcc, 0x3, 0xcc, 0x3, 0xcd, 0x3, 0xcd, 0x3, 0xcd, 0x3, 
-       0xcd, 0x3, 0xcd, 0x3, 0xce, 0x3, 0xce, 0x3, 0xce, 0x3, 0xce, 0x3, 
-       0xce, 0x3, 0xce, 0x3, 0xce, 0x3, 0xce, 0x3, 0xce, 0x3, 0xcf, 0x3, 
-       0xcf, 0x3, 0xcf, 0x3, 0xcf, 0x3, 0xcf, 0x3, 0xcf, 0x3, 0xcf, 0x3, 
-       0xcf, 0x3, 0xcf, 0x3, 0xd0, 0x3, 0xd0, 0x3, 0xd0, 0x3, 0xd0, 0x3, 
-       0xd0, 0x3, 0xd0, 0x3, 0xd0, 0x3, 0xd0, 0x3, 0xd0, 0x3, 0xd0, 0x3, 
-       0xd0, 0x3, 0xd0, 0x3, 0xd0, 0x3, 0xd1, 0x3, 0xd1, 0x3, 0xd1, 0x3, 
-       0xd1, 0x3, 0xd1, 0x3, 0xd1, 0x3, 0xd2, 0x3, 0xd2, 0x3, 0xd2, 0x3, 
-       0xd2, 0x3, 0xd2, 0x3, 0xd2, 0x3, 0xd3, 0x3, 0xd3, 0x3, 0xd3, 0x3, 
-       0xd3, 0x3, 0xd3, 0x3, 0xd3, 0x3, 0xd4, 0x3, 0xd4, 0x3, 0xd4, 0x3, 
-       0xd4, 0x3, 0xd4, 0x3, 0xd4, 0x3, 0xd5, 0x3, 0xd5, 0x3, 0xd5, 0x3, 
-       0xd5, 0x3, 0xd5, 0x3, 0xd5, 0x3, 0xd5, 0x3, 0xd5, 0x3, 0xd6, 0x3, 
-       0xd6, 0x3, 0xd6, 0x3, 0xd6, 0x3, 0xd6, 0x3, 0xd6, 0x3, 0xd6, 0x3, 
-       0xd6, 0x3, 0xd7, 0x3, 0xd7, 0x3, 0xd7, 0x3, 0xd7, 0x3, 0xd7, 0x3, 
-       0xd7, 0x3, 0xd7, 0x3, 0xd7, 0x3, 0xd8, 0x3, 0xd8, 0x3, 0xd8, 0x3, 
-       0xd8, 0x3, 0xd8, 0x3, 0xd8, 0x3, 0xd8, 0x3, 0xd8, 0x3, 0xd9, 0x3, 
-       0xd9, 0x3, 0xd9, 0x3, 0xd9, 0x3, 0xd9, 0x3, 0xd9, 0x3, 0xd9, 0x3, 
-       0xd9, 0x3, 0xda, 0x3, 0xda, 0x3, 0xda, 0x3, 0xda, 0x3, 0xda, 0x3, 
-       0xda, 0x3, 0xda, 0x3, 0xda, 0x3, 0xdb, 0x3, 0xdb, 0x3, 0xdb, 0x3, 
-       0xdb, 0x3, 0xdb, 0x3, 0xdb, 0x3, 0xdb, 0x3, 0xdb, 0x3, 0xdc, 0x3, 
-       0xdc, 0x3, 0xdc, 0x3, 0xdc, 0x3, 0xdc, 0x3, 0xdc, 0x3, 0xdc, 0x3, 
-       0xdc, 0x3, 0xdd, 0x3, 0xdd, 0x3, 0xdd, 0x3, 0xdd, 0x3, 0xdd, 0x3, 
-       0xdd, 0x3, 0xdd, 0x3, 0xdd, 0x3, 0xde, 0x3, 0xde, 0x3, 0xde, 0x3, 
-       0xde, 0x3, 0xde, 0x3, 0xde, 0x3, 0xde, 0x3, 0xde, 0x3, 0xdf, 0x3, 
-       0xdf, 0x3, 0xdf, 0x3, 0xdf, 0x3, 0xdf, 0x3, 0xdf, 0x3, 0xdf, 0x3, 
-       0xdf, 0x3, 0xe0, 0x3, 0xe0, 0x3, 0xe0, 0x3, 0xe0, 0x3, 0xe0, 0x3, 
-       0xe0, 0x3, 0xe0, 0x3, 0xe0, 0x3, 0xe1, 0x3, 0xe1, 0x3, 0xe1, 0x3, 
-       0xe1, 0x3, 0xe1, 0x3, 0xe1, 0x3, 0xe1, 0x3, 0xe1, 0x3, 0xe2, 0x3, 
-       0xe2, 0x3, 0xe2, 0x3, 0xe2, 0x3, 0xe2, 0x3, 0xe2, 0x3, 0xe2, 0x3, 
-       0xe2, 0x3, 0xe3, 0x3, 0xe3, 0x3, 0xe3, 0x3, 0xe3, 0x3, 0xe3, 0x3, 
-       0xe3, 0x3, 0xe3, 0x3, 0xe3, 0x3, 0xe4, 0x3, 0xe4, 0x3, 0xe4, 0x3, 
-       0xe4, 0x3, 0xe4, 0x3, 0xe4, 0x3, 0xe4, 0x3, 0xe4, 0x3, 0xe5, 0x3, 
-       0xe5, 0x3, 0xe5, 0x3, 0xe5, 0x3, 0xe5, 0x3, 0xe5, 0x3, 0xe6, 0x3, 
-       0xe6, 0x3, 0xe6, 0x3, 0xe6, 0x3, 0xe6, 0x3, 0xe6, 0x3, 0xe6, 0x3, 
-       0xe7, 0x3, 0xe7, 0x3, 0xe7, 0x3, 0xe7, 0x3, 0xe7, 0x3, 0xe7, 0x3, 
-       0xe7, 0x3, 0xe8, 0x3, 0xe8, 0x3, 0xe8, 0x3, 0xe8, 0x3, 0xe8, 0x3, 
-       0xe8, 0x3, 0xe8, 0x3, 0xe9, 0x3, 0xe9, 0x3, 0xe9, 0x3, 0xe9, 0x3, 
-       0xe9, 0x3, 0xe9, 0x3, 0xe9, 0x3, 0xea, 0x3, 0xea, 0x3, 0xea, 0x3, 
-       0xea, 0x3, 0xea, 0x3, 0xea, 0x3, 0xea, 0x3, 0xea, 0x3, 0xea, 0x3, 
-       0xeb, 0x3, 0xeb, 0x3, 0xeb, 0x3, 0xeb, 0x3, 0xeb, 0x3, 0xeb, 0x3, 
-       0xeb, 0x3, 0xeb, 0x3, 0xeb, 0x3, 0xec, 0x3, 0xec, 0x3, 0xec, 0x3, 
-       0xec, 0x3, 0xec, 0x3, 0xec, 0x3, 0xec, 0x3, 0xec, 0x3, 0xec, 0x3, 
-       0xed, 0x3, 0xed, 0x3, 0xed, 0x3, 0xed, 0x3, 0xed, 0x3, 0xed, 0x3, 
-       0xed, 0x3, 0xed, 0x3, 0xed, 0x3, 0xee, 0x3, 0xee, 0x3, 0xee, 0x3, 
-       0xee, 0x3, 0xee, 0x3, 0xee, 0x3, 0xee, 0x3, 0xee, 0x3, 0xee, 0x3, 
-       0xef, 0x3, 0xef, 0x3, 0xef, 0x3, 0xef, 0x3, 0xef, 0x3, 0xef, 0x3, 
-       0xef, 0x3, 0xef, 0x3, 0xef, 0x3, 0xf0, 0x3, 0xf0, 0x3, 0xf0, 0x3, 
-       0xf0, 0x3, 0xf0, 0x3, 0xf0, 0x3, 0xf0, 0x3, 0xf0, 0x3, 0xf0, 0x3, 
-       0xf1, 0x3, 0xf1, 0x3, 0xf1, 0x3, 0xf1, 0x3, 0xf1, 0x3, 0xf1, 0x3, 
-       0xf1, 0x3, 0xf1, 0x3, 0xf1, 0x3, 0xf2, 0x3, 0xf2, 0x3, 0xf2, 0x3, 
-       0xf2, 0x3, 0xf2, 0x3, 0xf2, 0x3, 0xf2, 0x3, 0xf2, 0x3, 0xf2, 0x3, 
-       0xf3, 0x3, 0xf3, 0x3, 0xf3, 0x3, 0xf3, 0x3, 0xf3, 0x3, 0xf3, 0x3, 
-       0xf3, 0x3, 0xf3, 0x3, 0xf3, 0x3, 0xf4, 0x3, 0xf4, 0x3, 0xf4, 0x3, 
-       0xf4, 0x3, 0xf4, 0x3, 0xf4, 0x3, 0xf4, 0x3, 0xf4, 0x3, 0xf4, 0x3, 
-       0xf5, 0x3, 0xf5, 0x3, 0xf5, 0x3, 0xf5, 0x3, 0xf5, 0x3, 0xf5, 0x3, 
-       0xf5, 0x3, 0xf5, 0x3, 0xf5, 0x3, 0xf6, 0x3, 0xf6, 0x3, 0xf6, 0x3, 
-       0xf6, 0x3, 0xf6, 0x3, 0xf6, 0x3, 0xf6, 0x3, 0xf6, 0x3, 0xf6, 0x3, 
-       0xf7, 0x3, 0xf7, 0x3, 0xf7, 0x3, 0xf7, 0x3, 0xf7, 0x3, 0xf7, 0x3, 
-       0xf7, 0x3, 0xf7, 0x3, 0xf7, 0x3, 0xf8, 0x3, 0xf8, 0x3, 0xf8, 0x3, 
-       0xf8, 0x3, 0xf8, 0x3, 0xf8, 0x3, 0xf8, 0x3, 0xf8, 0x3, 0xf8, 0x3, 
-       0xf9, 0x3, 0xf9, 0x3, 0xf9, 0x3, 0xf9, 0x3, 0xf9, 0x3, 0xf9, 0x3, 
-       0xf9, 0x3, 0xf9, 0x3, 0xf9, 0x3, 0xfa, 0x3, 0xfa, 0x3, 0xfa, 0x3, 
-       0xfa, 0x3, 0xfa, 0x3, 0xfa, 0x3, 0xfa, 0x3, 0xfb, 0x3, 0xfb, 0x3, 
-       0xfb, 0x3, 0xfb, 0x3, 0xfb, 0x3, 0xfb, 0x3, 0xfb, 0x3, 0xfb, 0x3, 
-       0xfb, 0x3, 0xfc, 0x3, 0xfc, 0x3, 0xfc, 0x3, 0xfc, 0x3, 0xfc, 0x3, 
-       0xfd, 0x3, 0xfd, 0x3, 0xfd, 0x3, 0xfd, 0x3, 0xfd, 0x3, 0xfd, 0x3, 
-       0xfe, 0x3, 0xfe, 0x3, 0xfe, 0x3, 0xfe, 0x3, 0xfe, 0x3, 0xfe, 0x3, 
-       0xfe, 0x3, 0xfe, 0x3, 0xfe, 0x3, 0xfe, 0x3, 0xfe, 0x3, 0xfe, 0x3, 
-       0xfe, 0x3, 0xfe, 0x3, 0xfe, 0x3, 0xfe, 0x3, 0xfe, 0x3, 0xfe, 0x3, 
-       0xff, 0x3, 0xff, 0x3, 0xff, 0x3, 0xff, 0x3, 0xff, 0x3, 0xff, 0x3, 
-       0xff, 0x3, 0xff, 0x3, 0xff, 0x3, 0xff, 0x3, 0xff, 0x3, 0xff, 0x3, 
-       0xff, 0x3, 0xff, 0x3, 0xff, 0x3, 0xff, 0x3, 0xff, 0x3, 0xff, 0x3, 
-       0xff, 0x3, 0x100, 0x3, 0x100, 0x3, 0x100, 0x3, 0x100, 0x3, 0x100, 
-       0x3, 0x100, 0x3, 0x100, 0x3, 0x100, 0x3, 0x100, 0x3, 0x100, 0x3, 
-       0x100, 0x3, 0x100, 0x3, 0x100, 0x3, 0x100, 0x3, 0x100, 0x3, 0x100, 
+       0x76, 0x3, 0x76, 0x3, 0x76, 0x3, 0x76, 0x3, 0x76, 0x3, 0x76, 0x3, 
+       0x76, 0x3, 0x76, 0x3, 0x76, 0x3, 0x76, 0x3, 0x76, 0x5, 0x76, 0x736, 
+       0xa, 0x76, 0x3, 0x77, 0x3, 0x77, 0x3, 0x77, 0x3, 0x77, 0x3, 0x77, 
+       0x3, 0x77, 0x3, 0x77, 0x3, 0x77, 0x3, 0x77, 0x3, 0x77, 0x3, 0x77, 
+       0x3, 0x78, 0x3, 0x78, 0x3, 0x78, 0x3, 0x78, 0x3, 0x79, 0x3, 0x79, 
+       0x3, 0x79, 0x3, 0x79, 0x3, 0x79, 0x3, 0x79, 0x3, 0x79, 0x3, 0x79, 
+       0x3, 0x7a, 0x3, 0x7a, 0x3, 0x7a, 0x3, 0x7a, 0x3, 0x7a, 0x3, 0x7a, 
+       0x3, 0x7a, 0x3, 0x7a, 0x3, 0x7b, 0x3, 0x7b, 0x3, 0x7b, 0x3, 0x7b, 
+       0x3, 0x7b, 0x3, 0x7b, 0x3, 0x7b, 0x3, 0x7b, 0x3, 0x7c, 0x3, 0x7c, 
+       0x3, 0x7c, 0x3, 0x7c, 0x3, 0x7c, 0x3, 0x7d, 0x3, 0x7d, 0x3, 0x7d, 
+       0x3, 0x7d, 0x3, 0x7d, 0x3, 0x7e, 0x3, 0x7e, 0x3, 0x7e, 0x3, 0x7e, 
+       0x3, 0x7e, 0x3, 0x7f, 0x3, 0x7f, 0x3, 0x7f, 0x3, 0x7f, 0x3, 0x7f, 
+       0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 
+       0x3, 0x80, 0x3, 0x81, 0x3, 0x81, 0x3, 0x81, 0x3, 0x81, 0x3, 0x81, 
+       0x3, 0x81, 0x3, 0x81, 0x3, 0x82, 0x3, 0x82, 0x3, 0x82, 0x3, 0x82, 
+       0x3, 0x82, 0x3, 0x82, 0x3, 0x82, 0x3, 0x83, 0x3, 0x83, 0x3, 0x83, 
+       0x3, 0x83, 0x3, 0x83, 0x3, 0x83, 0x3, 0x83, 0x3, 0x84, 0x3, 0x84, 
+       0x3, 0x84, 0x3, 0x84, 0x3, 0x84, 0x3, 0x84, 0x3, 0x84, 0x3, 0x85, 
+       0x3, 0x85, 0x3, 0x85, 0x3, 0x85, 0x3, 0x85, 0x3, 0x85, 0x3, 0x85, 
+       0x3, 0x86, 0x3, 0x86, 0x3, 0x86, 0x3, 0x86, 0x3, 0x86, 0x3, 0x86, 
+       0x3, 0x86, 0x3, 0x87, 0x3, 0x87, 0x3, 0x87, 0x3, 0x87, 0x3, 0x87, 
+       0x3, 0x87, 0x3, 0x87, 0x3, 0x88, 0x3, 0x88, 0x3, 0x88, 0x3, 0x88, 
+       0x3, 0x88, 0x3, 0x88, 0x3, 0x88, 0x3, 0x89, 0x3, 0x89, 0x3, 0x89, 
+       0x3, 0x89, 0x3, 0x89, 0x3, 0x89, 0x3, 0x89, 0x3, 0x8a, 0x3, 0x8a, 
+       0x3, 0x8a, 0x3, 0x8a, 0x3, 0x8a, 0x3, 0x8a, 0x3, 0x8a, 0x3, 0x8b, 
+       0x3, 0x8b, 0x3, 0x8b, 0x3, 0x8b, 0x3, 0x8b, 0x3, 0x8b, 0x3, 0x8b, 
+       0x3, 0x8c, 0x3, 0x8c, 0x3, 0x8c, 0x3, 0x8c, 0x3, 0x8c, 0x3, 0x8c, 
+       0x3, 0x8c, 0x3, 0x8d, 0x3, 0x8d, 0x3, 0x8d, 0x3, 0x8d, 0x3, 0x8d, 
+       0x3, 0x8d, 0x3, 0x8d, 0x3, 0x8e, 0x3, 0x8e, 0x3, 0x8e, 0x3, 0x8e, 
+       0x3, 0x8e, 0x3, 0x8e, 0x3, 0x8e, 0x3, 0x8f, 0x3, 0x8f, 0x3, 0x8f, 
+       0x3, 0x8f, 0x3, 0x8f, 0x3, 0x8f, 0x3, 0x8f, 0x3, 0x90, 0x3, 0x90, 
+       0x3, 0x90, 0x3, 0x90, 0x3, 0x90, 0x3, 0x90, 0x3, 0x90, 0x3, 0x90, 
+       0x3, 0x90, 0x3, 0x90, 0x3, 0x91, 0x3, 0x91, 0x3, 0x91, 0x3, 0x91, 
+       0x3, 0x91, 0x3, 0x92, 0x3, 0x92, 0x3, 0x92, 0x3, 0x92, 0x3, 0x92, 
+       0x3, 0x92, 0x3, 0x92, 0x3, 0x92, 0x3, 0x93, 0x3, 0x93, 0x3, 0x93, 
+       0x3, 0x93, 0x3, 0x93, 0x3, 0x93, 0x3, 0x93, 0x3, 0x94, 0x3, 0x94, 
+       0x3, 0x94, 0x3, 0x94, 0x3, 0x94, 0x3, 0x94, 0x3, 0x94, 0x3, 0x94, 
+       0x3, 0x94, 0x3, 0x94, 0x3, 0x94, 0x3, 0x95, 0x3, 0x95, 0x3, 0x95, 
+       0x3, 0x95, 0x3, 0x95, 0x3, 0x96, 0x3, 0x96, 0x3, 0x96, 0x3, 0x96, 
+       0x3, 0x96, 0x3, 0x96, 0x3, 0x96, 0x3, 0x97, 0x3, 0x97, 0x3, 0x97, 
+       0x3, 0x97, 0x3, 0x97, 0x3, 0x97, 0x3, 0x97, 0x3, 0x97, 0x3, 0x97, 
+       0x3, 0x97, 0x3, 0x97, 0x3, 0x97, 0x3, 0x97, 0x3, 0x97, 0x3, 0x97, 
+       0x3, 0x97, 0x3, 0x98, 0x3, 0x98, 0x3, 0x98, 0x3, 0x98, 0x3, 0x98, 
+       0x3, 0x98, 0x3, 0x98, 0x3, 0x98, 0x3, 0x98, 0x3, 0x98, 0x3, 0x98, 
+       0x3, 0x98, 0x3, 0x98, 0x3, 0x98, 0x3, 0x99, 0x3, 0x99, 0x3, 0x99, 
+       0x3, 0x99, 0x3, 0x99, 0x3, 0x99, 0x3, 0x99, 0x3, 0x9a, 0x3, 0x9a, 
+       0x3, 0x9a, 0x3, 0x9a, 0x3, 0x9b, 0x3, 0x9b, 0x3, 0x9b, 0x3, 0x9b, 
+       0x3, 0x9b, 0x3, 0x9b, 0x3, 0x9b, 0x3, 0x9b, 0x3, 0x9b, 0x3, 0x9b, 
+       0x3, 0x9b, 0x3, 0x9b, 0x3, 0x9c, 0x3, 0x9c, 0x3, 0x9c, 0x3, 0x9c, 
+       0x3, 0x9c, 0x3, 0x9c, 0x3, 0x9c, 0x3, 0x9c, 0x3, 0x9c, 0x3, 0x9d, 
+       0x3, 0x9d, 0x3, 0x9d, 0x3, 0x9d, 0x3, 0x9d, 0x3, 0x9d, 0x3, 0x9d, 
+       0x3, 0x9d, 0x3, 0x9e, 0x3, 0x9e, 0x3, 0x9e, 0x3, 0x9e, 0x3, 0x9e, 
+       0x3, 0x9e, 0x3, 0x9e, 0x3, 0x9e, 0x3, 0x9e, 0x3, 0x9e, 0x3, 0x9e, 
+       0x3, 0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 0x9f, 0x3, 0x9f, 
+       0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 
+       0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 0x3, 0xa0, 
+       0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa1, 
+       0x3, 0xa1, 0x3, 0xa1, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 
+       0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 
+       0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 
+       0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa2, 
+       0x3, 0xa2, 0x3, 0xa2, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 
+       0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 
+       0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 
+       0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 
+       0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 
+       0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 0x3, 0xa3, 
+       0x3, 0xa3, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 
+       0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 
+       0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 
+       0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 
+       0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 
+       0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa4, 0x3, 0xa5, 
+       0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 
+       0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 
+       0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 
+       0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa5, 
+       0x3, 0xa5, 0x3, 0xa5, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 
+       0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 
+       0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 
+       0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 
+       0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 
+       0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa6, 0x3, 0xa7, 0x3, 0xa7, 
+       0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 
+       0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 
+       0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 
+       0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 0x3, 0xa7, 
+       0x3, 0xa7, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 
+       0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 
+       0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 
+       0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 
+       0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 
+       0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa8, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 
+       0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 
+       0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 
+       0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 
+       0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 0x3, 0xa9, 
+       0x3, 0xaa, 0x3, 0xaa, 0x3, 0xaa, 0x3, 0xaa, 0x3, 0xaa, 0x3, 0xaa, 
+       0x3, 0xaa, 0x3, 0xaa, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 
+       0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 
+       0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 
+       0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 
+       0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 
+       0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xab, 0x3, 0xac, 0x3, 0xac, 
+       0x3, 0xac, 0x3, 0xac, 0x3, 0xac, 0x3, 0xac, 0x3, 0xac, 0x3, 0xac, 
+       0x3, 0xac, 0x3, 0xad, 0x3, 0xad, 0x3, 0xad, 0x3, 0xad, 0x3, 0xad, 
+       0x3, 0xad, 0x3, 0xad, 0x3, 0xae, 0x3, 0xae, 0x3, 0xae, 0x3, 0xae, 
+       0x3, 0xae, 0x3, 0xae, 0x3, 0xae, 0x3, 0xae, 0x3, 0xae, 0x3, 0xae, 
+       0x3, 0xaf, 0x3, 0xaf, 0x3, 0xaf, 0x3, 0xaf, 0x3, 0xaf, 0x3, 0xaf, 
+       0x3, 0xaf, 0x3, 0xaf, 0x3, 0xaf, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 
+       0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 
+       0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 
+       0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb0, 0x3, 0xb1, 
+       0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb1, 
+       0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb1, 
+       0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb1, 0x3, 0xb1, 
+       0x3, 0xb2, 0x3, 0xb2, 0x3, 0xb2, 0x3, 0xb2, 0x3, 0xb2, 0x3, 0xb2, 
+       0x3, 0xb2, 0x3, 0xb2, 0x3, 0xb2, 0x3, 0xb2, 0x3, 0xb2, 0x3, 0xb2, 
+       0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb3, 
+       0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb3, 
+       0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb3, 0x3, 0xb4, 
+       0x3, 0xb4, 0x3, 0xb4, 0x3, 0xb4, 0x3, 0xb4, 0x3, 0xb4, 0x3, 0xb4, 
+       0x3, 0xb4, 0x3, 0xb4, 0x3, 0xb4, 0x3, 0xb4, 0x3, 0xb4, 0x3, 0xb5, 
+       0x3, 0xb5, 0x3, 0xb5, 0x3, 0xb5, 0x3, 0xb5, 0x3, 0xb5, 0x3, 0xb5, 
+       0x3, 0xb5, 0x3, 0xb5, 0x3, 0xb5, 0x3, 0xb5, 0x3, 0xb5, 0x3, 0xb5, 
+       0x3, 0xb5, 0x3, 0xb5, 0x3, 0xb5, 0x3, 0xb5, 0x3, 0xb6, 0x3, 0xb6, 
+       0x3, 0xb6, 0x3, 0xb6, 0x3, 0xb6, 0x3, 0xb6, 0x3, 0xb6, 0x3, 0xb6, 
+       0x3, 0xb6, 0x3, 0xb6, 0x3, 0xb6, 0x3, 0xb6, 0x3, 0xb7, 0x3, 0xb7, 
+       0x3, 0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 0xb7, 0x3, 0xb8, 
+       0x3, 0xb8, 0x3, 0xb8, 0x3, 0xb8, 0x3, 0xb8, 0x3, 0xb8, 0x3, 0xb8, 
+       0x3, 0xb8, 0x3, 0xb9, 0x3, 0xb9, 0x3, 0xb9, 0x3, 0xb9, 0x3, 0xb9, 
+       0x3, 0xb9, 0x3, 0xb9, 0x3, 0xb9, 0x3, 0xba, 0x3, 0xba, 0x3, 0xba, 
+       0x3, 0xba, 0x3, 0xba, 0x3, 0xba, 0x3, 0xba, 0x3, 0xba, 0x3, 0xba, 
+       0x3, 0xba, 0x3, 0xba, 0x3, 0xba, 0x3, 0xba, 0x3, 0xba, 0x3, 0xba, 
+       0x3, 0xba, 0x3, 0xba, 0x3, 0xba, 0x3, 0xba, 0x3, 0xba, 0x3, 0xba, 
+       0x3, 0xba, 0x3, 0xba, 0x3, 0xbb, 0x3, 0xbb, 0x3, 0xbb, 0x3, 0xbb, 
+       0x3, 0xbb, 0x3, 0xbb, 0x3, 0xbb, 0x3, 0xbb, 0x3, 0xbb, 0x3, 0xbb, 
+       0x3, 0xbb, 0x3, 0xbb, 0x3, 0xbb, 0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbc, 
+       0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbc, 
+       0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbc, 0x3, 0xbd, 
+       0x3, 0xbd, 0x3, 0xbd, 0x3, 0xbd, 0x3, 0xbd, 0x3, 0xbd, 0x3, 0xbd, 
+       0x3, 0xbe, 0x3, 0xbe, 0x3, 0xbe, 0x3, 0xbe, 0x3, 0xbe, 0x3, 0xbe, 
+       0x3, 0xbf, 0x3, 0xbf, 0x3, 0xbf, 0x3, 0xbf, 0x3, 0xbf, 0x3, 0xbf, 
+       0x3, 0xbf, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 
+       0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 
+       0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 
+       0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 0x3, 0xc1, 
+       0x3, 0xc1, 0x3, 0xc2, 0x3, 0xc2, 0x3, 0xc2, 0x3, 0xc2, 0x3, 0xc2, 
+       0x3, 0xc2, 0x3, 0xc2, 0x3, 0xc2, 0x3, 0xc2, 0x3, 0xc2, 0x3, 0xc2, 
+       0x3, 0xc2, 0x3, 0xc2, 0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc3, 
+       0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc3, 
+       0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc3, 0x3, 0xc4, 
+       0x3, 0xc4, 0x3, 0xc4, 0x3, 0xc4, 0x3, 0xc4, 0x3, 0xc4, 0x3, 0xc4, 
+       0x3, 0xc5, 0x3, 0xc5, 0x3, 0xc5, 0x3, 0xc5, 0x3, 0xc5, 0x3, 0xc5, 
+       0x3, 0xc5, 0x3, 0xc5, 0x3, 0xc6, 0x3, 0xc6, 0x3, 0xc6, 0x3, 0xc6, 
+       0x3, 0xc6, 0x3, 0xc6, 0x3, 0xc6, 0x3, 0xc6, 0x3, 0xc6, 0x3, 0xc6, 
+       0x3, 0xc7, 0x3, 0xc7, 0x3, 0xc7, 0x3, 0xc7, 0x3, 0xc7, 0x3, 0xc7, 
+       0x3, 0xc7, 0x3, 0xc7, 0x3, 0xc7, 0x3, 0xc7, 0x3, 0xc7, 0x3, 0xc7, 
+       0x3, 0xc7, 0x3, 0xc7, 0x3, 0xc7, 0x3, 0xc8, 0x3, 0xc8, 0x3, 0xc8, 
+       0x3, 0xc8, 0x3, 0xc8, 0x3, 0xc8, 0x3, 0xc8, 0x3, 0xc8, 0x3, 0xc8, 
+       0x3, 0xc8, 0x3, 0xc9, 0x3, 0xc9, 0x3, 0xc9, 0x3, 0xc9, 0x3, 0xc9, 
+       0x3, 0xc9, 0x3, 0xc9, 0x3, 0xc9, 0x3, 0xc9, 0x3, 0xc9, 0x3, 0xc9, 
+       0x3, 0xc9, 0x3, 0xc9, 0x3, 0xc9, 0x3, 0xc9, 0x3, 0xca, 0x3, 0xca, 
+       0x3, 0xca, 0x3, 0xca, 0x3, 0xca, 0x3, 0xca, 0x3, 0xca, 0x3, 0xca, 
+       0x3, 0xca, 0x3, 0xca, 0x3, 0xca, 0x3, 0xca, 0x3, 0xcb, 0x3, 0xcb, 
+       0x3, 0xcb, 0x3, 0xcb, 0x3, 0xcb, 0x3, 0xcb, 0x3, 0xcb, 0x3, 0xcb, 
+       0x3, 0xcb, 0x3, 0xcb, 0x3, 0xcb, 0x3, 0xcb, 0x3, 0xcb, 0x3, 0xcb, 
+       0x3, 0xcb, 0x3, 0xcb, 0x3, 0xcb, 0x3, 0xcc, 0x3, 0xcc, 0x3, 0xcc, 
+       0x3, 0xcc, 0x3, 0xcc, 0x3, 0xcc, 0x3, 0xcc, 0x3, 0xcc, 0x3, 0xcc, 
+       0x3, 0xcc, 0x3, 0xcd, 0x3, 0xcd, 0x3, 0xcd, 0x3, 0xcd, 0x3, 0xcd, 
+       0x3, 0xcd, 0x3, 0xcd, 0x3, 0xcd, 0x3, 0xcd, 0x3, 0xcd, 0x3, 0xcd, 
+       0x3, 0xcd, 0x3, 0xce, 0x3, 0xce, 0x3, 0xce, 0x3, 0xce, 0x3, 0xce, 
+       0x3, 0xce, 0x3, 0xce, 0x3, 0xce, 0x3, 0xce, 0x3, 0xce, 0x3, 0xce, 
+       0x3, 0xce, 0x3, 0xce, 0x3, 0xce, 0x3, 0xce, 0x3, 0xce, 0x3, 0xce, 
+       0x3, 0xcf, 0x3, 0xcf, 0x3, 0xcf, 0x3, 0xcf, 0x3, 0xcf, 0x3, 0xcf, 
+       0x3, 0xcf, 0x3, 0xcf, 0x3, 0xcf, 0x3, 0xd0, 0x3, 0xd0, 0x3, 0xd0, 
+       0x3, 0xd0, 0x3, 0xd0, 0x3, 0xd0, 0x3, 0xd0, 0x3, 0xd0, 0x3, 0xd0, 
+       0x3, 0xd0, 0x3, 0xd0, 0x3, 0xd0, 0x3, 0xd1, 0x3, 0xd1, 0x3, 0xd1, 
+       0x3, 0xd1, 0x3, 0xd1, 0x3, 0xd1, 0x3, 0xd1, 0x3, 0xd1, 0x3, 0xd1, 
+       0x3, 0xd1, 0x3, 0xd1, 0x3, 0xd1, 0x3, 0xd1, 0x3, 0xd1, 0x3, 0xd1, 
+       0x3, 0xd2, 0x3, 0xd2, 0x3, 0xd2, 0x3, 0xd2, 0x3, 0xd2, 0x3, 0xd2, 
+       0x3, 0xd2, 0x3, 0xd2, 0x3, 0xd3, 0x3, 0xd3, 0x3, 0xd3, 0x3, 0xd3, 
+       0x3, 0xd3, 0x3, 0xd4, 0x3, 0xd4, 0x3, 0xd4, 0x3, 0xd4, 0x3, 0xd4, 
+       0x3, 0xd4, 0x3, 0xd5, 0x3, 0xd5, 0x3, 0xd5, 0x3, 0xd5, 0x3, 0xd5, 
+       0x3, 0xd5, 0x3, 0xd6, 0x3, 0xd6, 0x3, 0xd6, 0x3, 0xd6, 0x3, 0xd6, 
+       0x3, 0xd6, 0x3, 0xd7, 0x3, 0xd7, 0x3, 0xd7, 0x3, 0xd7, 0x3, 0xd7, 
+       0x3, 0xd7, 0x3, 0xd8, 0x3, 0xd8, 0x3, 0xd8, 0x3, 0xd8, 0x3, 0xd8, 
+       0x3, 0xd8, 0x3, 0xd8, 0x3, 0xd8, 0x3, 0xd9, 0x3, 0xd9, 0x3, 0xd9, 
+       0x3, 0xd9, 0x3, 0xd9, 0x3, 0xd9, 0x3, 0xd9, 0x3, 0xd9, 0x3, 0xda, 
+       0x3, 0xda, 0x3, 0xda, 0x3, 0xda, 0x3, 0xda, 0x3, 0xda, 0x3, 0xda, 
+       0x3, 0xda, 0x3, 0xdb, 0x3, 0xdb, 0x3, 0xdb, 0x3, 0xdb, 0x3, 0xdb, 
+       0x3, 0xdb, 0x3, 0xdb, 0x3, 0xdb, 0x3, 0xdc, 0x3, 0xdc, 0x3, 0xdc, 
+       0x3, 0xdc, 0x3, 0xdc, 0x3, 0xdc, 0x3, 0xdc, 0x3, 0xdc, 0x3, 0xdd, 
+       0x3, 0xdd, 0x3, 0xdd, 0x3, 0xdd, 0x3, 0xdd, 0x3, 0xdd, 0x3, 0xdd, 
+       0x3, 0xdd, 0x3, 0xde, 0x3, 0xde, 0x3, 0xde, 0x3, 0xde, 0x3, 0xde, 
+       0x3, 0xde, 0x3, 0xde, 0x3, 0xde, 0x3, 0xdf, 0x3, 0xdf, 0x3, 0xdf, 
+       0x3, 0xdf, 0x3, 0xdf, 0x3, 0xdf, 0x3, 0xdf, 0x3, 0xdf, 0x3, 0xe0, 
+       0x3, 0xe0, 0x3, 0xe0, 0x3, 0xe0, 0x3, 0xe0, 0x3, 0xe0, 0x3, 0xe0, 
+       0x3, 0xe0, 0x3, 0xe1, 0x3, 0xe1, 0x3, 0xe1, 0x3, 0xe1, 0x3, 0xe1, 
+       0x3, 0xe1, 0x3, 0xe1, 0x3, 0xe1, 0x3, 0xe2, 0x3, 0xe2, 0x3, 0xe2, 
+       0x3, 0xe2, 0x3, 0xe2, 0x3, 0xe2, 0x3, 0xe2, 0x3, 0xe2, 0x3, 0xe3, 
+       0x3, 0xe3, 0x3, 0xe3, 0x3, 0xe3, 0x3, 0xe3, 0x3, 0xe3, 0x3, 0xe3, 
+       0x3, 0xe3, 0x3, 0xe4, 0x3, 0xe4, 0x3, 0xe4, 0x3, 0xe4, 0x3, 0xe4, 
+       0x3, 0xe4, 0x3, 0xe4, 0x3, 0xe4, 0x3, 0xe5, 0x3, 0xe5, 0x3, 0xe5, 
+       0x3, 0xe5, 0x3, 0xe5, 0x3, 0xe5, 0x3, 0xe5, 0x3, 0xe5, 0x3, 0xe6, 
+       0x3, 0xe6, 0x3, 0xe6, 0x3, 0xe6, 0x3, 0xe6, 0x3, 0xe6, 0x3, 0xe6, 
+       0x3, 0xe6, 0x3, 0xe7, 0x3, 0xe7, 0x3, 0xe7, 0x3, 0xe7, 0x3, 0xe7, 
+       0x3, 0xe7, 0x3, 0xe7, 0x3, 0xe7, 0x3, 0xe8, 0x3, 0xe8, 0x3, 0xe8, 
+       0x3, 0xe8, 0x3, 0xe8, 0x3, 0xe8, 0x3, 0xe8, 0x3, 0xe8, 0x3, 0xe8, 
+       0x3, 0xe9, 0x3, 0xe9, 0x3, 0xe9, 0x3, 0xe9, 0x3, 0xe9, 0x3, 0xe9, 
+       0x3, 0xe9, 0x3, 0xe9, 0x3, 0xe9, 0x3, 0xea, 0x3, 0xea, 0x3, 0xea, 
+       0x3, 0xea, 0x3, 0xea, 0x3, 0xea, 0x3, 0xea, 0x3, 0xea, 0x3, 0xea, 
+       0x3, 0xeb, 0x3, 0xeb, 0x3, 0xeb, 0x3, 0xeb, 0x3, 0xeb, 0x3, 0xeb, 
+       0x3, 0xec, 0x3, 0xec, 0x3, 0xec, 0x3, 0xec, 0x3, 0xec, 0x3, 0xec, 
+       0x3, 0xec, 0x3, 0xec, 0x3, 0xec, 0x3, 0xed, 0x3, 0xed, 0x3, 0xed, 
+       0x3, 0xed, 0x3, 0xed, 0x3, 0xed, 0x3, 0xee, 0x3, 0xee, 0x3, 0xee, 
+       0x3, 0xee, 0x3, 0xee, 0x3, 0xee, 0x3, 0xee, 0x3, 0xef, 0x3, 0xef, 
+       0x3, 0xef, 0x3, 0xef, 0x3, 0xef, 0x3, 0xef, 0x3, 0xef, 0x3, 0xf0, 
+       0x3, 0xf0, 0x3, 0xf0, 0x3, 0xf0, 0x3, 0xf0, 0x3, 0xf0, 0x3, 0xf0, 
+       0x3, 0xf1, 0x3, 0xf1, 0x3, 0xf1, 0x3, 0xf1, 0x3, 0xf1, 0x3, 0xf1, 
+       0x3, 0xf1, 0x3, 0xf2, 0x3, 0xf2, 0x3, 0xf2, 0x3, 0xf2, 0x3, 0xf2, 
+       0x3, 0xf2, 0x3, 0xf2, 0x3, 0xf2, 0x3, 0xf2, 0x3, 0xf3, 0x3, 0xf3, 
+       0x3, 0xf3, 0x3, 0xf3, 0x3, 0xf3, 0x3, 0xf3, 0x3, 0xf3, 0x3, 0xf3, 
+       0x3, 0xf3, 0x3, 0xf4, 0x3, 0xf4, 0x3, 0xf4, 0x3, 0xf4, 0x3, 0xf4, 
+       0x3, 0xf4, 0x3, 0xf4, 0x3, 0xf4, 0x3, 0xf4, 0x3, 0xf5, 0x3, 0xf5, 
+       0x3, 0xf5, 0x3, 0xf5, 0x3, 0xf5, 0x3, 0xf5, 0x3, 0xf5, 0x3, 0xf5, 
+       0x3, 0xf5, 0x3, 0xf6, 0x3, 0xf6, 0x3, 0xf6, 0x3, 0xf6, 0x3, 0xf6, 
+       0x3, 0xf6, 0x3, 0xf6, 0x3, 0xf6, 0x3, 0xf6, 0x3, 0xf7, 0x3, 0xf7, 
+       0x3, 0xf7, 0x3, 0xf7, 0x3, 0xf7, 0x3, 0xf7, 0x3, 0xf7, 0x3, 0xf7, 
+       0x3, 0xf7, 0x3, 0xf8, 0x3, 0xf8, 0x3, 0xf8, 0x3, 0xf8, 0x3, 0xf8, 
+       0x3, 0xf8, 0x3, 0xf8, 0x3, 0xf8, 0x3, 0xf8, 0x3, 0xf9, 0x3, 0xf9, 
+       0x3, 0xf9, 0x3, 0xf9, 0x3, 0xf9, 0x3, 0xf9, 0x3, 0xf9, 0x3, 0xf9, 
+       0x3, 0xf9, 0x3, 0xfa, 0x3, 0xfa, 0x3, 0xfa, 0x3, 0xfa, 0x3, 0xfa, 
+       0x3, 0xfa, 0x3, 0xfa, 0x3, 0xfa, 0x3, 0xfa, 0x3, 0xfb, 0x3, 0xfb, 
+       0x3, 0xfb, 0x3, 0xfb, 0x3, 0xfb, 0x3, 0xfb, 0x3, 0xfb, 0x3, 0xfb, 
+       0x3, 0xfb, 0x3, 0xfc, 0x3, 0xfc, 0x3, 0xfc, 0x3, 0xfc, 0x3, 0xfc, 
+       0x3, 0xfc, 0x3, 0xfc, 0x3, 0xfc, 0x3, 0xfc, 0x3, 0xfd, 0x3, 0xfd, 
+       0x3, 0xfd, 0x3, 0xfd, 0x3, 0xfd, 0x3, 0xfd, 0x3, 0xfd, 0x3, 0xfd, 
+       0x3, 0xfd, 0x3, 0xfe, 0x3, 0xfe, 0x3, 0xfe, 0x3, 0xfe, 0x3, 0xfe, 
+       0x3, 0xfe, 0x3, 0xfe, 0x3, 0xfe, 0x3, 0xfe, 0x3, 0xff, 0x3, 0xff, 
+       0x3, 0xff, 0x3, 0xff, 0x3, 0xff, 0x3, 0xff, 0x3, 0xff, 0x3, 0xff, 
+       0x3, 0xff, 0x3, 0x100, 0x3, 0x100, 0x3, 0x100, 0x3, 0x100, 0x3, 0x100, 
        0x3, 0x100, 0x3, 0x100, 0x3, 0x100, 0x3, 0x100, 0x3, 0x101, 0x3, 
        0x3, 0x100, 0x3, 0x100, 0x3, 0x100, 0x3, 0x100, 0x3, 0x101, 0x3, 
        0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 
        0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 
-       0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 
-       0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 
-       0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 
-       0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 0x3, 0x101, 
-       0x3, 0x101, 0x3, 0x102, 0x3, 0x102, 0x3, 0x102, 0x3, 0x102, 0x3, 
-       0x102, 0x3, 0x102, 0x3, 0x102, 0x3, 0x102, 0x3, 0x102, 0x3, 0x102, 
-       0x3, 0x102, 0x3, 0x102, 0x3, 0x102, 0x3, 0x102, 0x3, 0x102, 0x3, 
-       0x102, 0x3, 0x102, 0x3, 0x102, 0x3, 0x102, 0x3, 0x102, 0x3, 0x102, 
-       0x3, 0x102, 0x3, 0x102, 0x3, 0x103, 0x3, 0x103, 0x3, 0x103, 0x3, 
-       0x103, 0x3, 0x103, 0x3, 0x103, 0x3, 0x103, 0x3, 0x103, 0x3, 0x103, 
+       0x3, 0x101, 0x3, 0x101, 0x3, 0x102, 0x3, 0x102, 0x3, 0x102, 0x3, 
+       0x102, 0x3, 0x102, 0x3, 0x102, 0x3, 0x102, 0x3, 0x103, 0x3, 0x103, 
        0x3, 0x103, 0x3, 0x103, 0x3, 0x103, 0x3, 0x103, 0x3, 0x103, 0x3, 
        0x3, 0x103, 0x3, 0x103, 0x3, 0x103, 0x3, 0x103, 0x3, 0x103, 0x3, 
-       0x103, 0x3, 0x103, 0x3, 0x103, 0x3, 0x103, 0x3, 0x103, 0x3, 0x103, 
-       0x3, 0x103, 0x3, 0x103, 0x3, 0x103, 0x3, 0x103, 0x3, 0x103, 0x3, 
-       0x104, 0x3, 0x104, 0x3, 0x104, 0x3, 0x104, 0x3, 0x104, 0x3, 0x104, 
-       0x3, 0x104, 0x3, 0x104, 0x3, 0x104, 0x3, 0x104, 0x3, 0x104, 0x3, 
-       0x104, 0x3, 0x104, 0x3, 0x104, 0x3, 0x104, 0x3, 0x104, 0x3, 0x104, 
-       0x3, 0x104, 0x3, 0x104, 0x3, 0x104, 0x3, 0x104, 0x3, 0x104, 0x3, 
-       0x104, 0x3, 0x104, 0x3, 0x104, 0x3, 0x104, 0x3, 0x105, 0x3, 0x105, 
-       0x3, 0x105, 0x3, 0x105, 0x3, 0x105, 0x3, 0x105, 0x3, 0x105, 0x3, 
-       0x105, 0x3, 0x105, 0x3, 0x105, 0x3, 0x105, 0x3, 0x105, 0x3, 0x105, 
-       0x3, 0x105, 0x3, 0x105, 0x3, 0x105, 0x3, 0x105, 0x3, 0x106, 0x3, 
-       0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 
+       0x103, 0x3, 0x103, 0x3, 0x104, 0x3, 0x104, 0x3, 0x104, 0x3, 0x104, 
+       0x3, 0x104, 0x3, 0x105, 0x3, 0x105, 0x3, 0x105, 0x3, 0x105, 0x3, 
+       0x105, 0x3, 0x105, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 
        0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 
        0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 
        0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 
        0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 
-       0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 
-       0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x107, 
+       0x3, 0x106, 0x3, 0x106, 0x3, 0x106, 0x3, 0x107, 0x3, 0x107, 0x3, 
+       0x107, 0x3, 0x107, 0x3, 0x107, 0x3, 0x107, 0x3, 0x107, 0x3, 0x107, 
        0x3, 0x107, 0x3, 0x107, 0x3, 0x107, 0x3, 0x107, 0x3, 0x107, 0x3, 
        0x3, 0x107, 0x3, 0x107, 0x3, 0x107, 0x3, 0x107, 0x3, 0x107, 0x3, 
-       0x107, 0x3, 0x107, 0x3, 0x107, 0x3, 0x108, 0x3, 0x108, 0x3, 0x108, 
+       0x107, 0x3, 0x107, 0x3, 0x107, 0x3, 0x107, 0x3, 0x107, 0x3, 0x107, 
+       0x3, 0x108, 0x3, 0x108, 0x3, 0x108, 0x3, 0x108, 0x3, 0x108, 0x3, 
+       0x108, 0x3, 0x108, 0x3, 0x108, 0x3, 0x108, 0x3, 0x108, 0x3, 0x108, 
        0x3, 0x108, 0x3, 0x108, 0x3, 0x108, 0x3, 0x108, 0x3, 0x108, 0x3, 
        0x3, 0x108, 0x3, 0x108, 0x3, 0x108, 0x3, 0x108, 0x3, 0x108, 0x3, 
-       0x108, 0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 
-       0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 0x10a, 0x3, 
+       0x108, 0x3, 0x108, 0x3, 0x108, 0x3, 0x108, 0x3, 0x109, 0x3, 0x109, 
+       0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 
+       0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 
+       0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 
+       0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 
+       0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 0x109, 0x3, 
+       0x109, 0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 
+       0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 
        0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 
        0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 
        0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 
        0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 0x10a, 0x3, 
+       0x10a, 0x3, 0x10a, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 
+       0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 
        0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 
        0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 
-       0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10c, 0x3, 
+       0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 
+       0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10b, 0x3, 0x10c, 
+       0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 
+       0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 
+       0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 
        0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 
        0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 
        0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10d, 0x3, 0x10d, 0x3, 
        0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10c, 0x3, 0x10d, 0x3, 0x10d, 0x3, 
        0x10d, 0x3, 0x10d, 0x3, 0x10d, 0x3, 0x10d, 0x3, 0x10d, 0x3, 0x10d, 
        0x10d, 0x3, 0x10d, 0x3, 0x10d, 0x3, 0x10d, 0x3, 0x10d, 0x3, 0x10d, 
-       0x3, 0x10d, 0x3, 0x10d, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 
+       0x3, 0x10d, 0x3, 0x10d, 0x3, 0x10d, 0x3, 0x10d, 0x3, 0x10d, 0x3, 
+       0x10d, 0x3, 0x10d, 0x3, 0x10d, 0x3, 0x10d, 0x3, 0x10e, 0x3, 0x10e, 
+       0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 
        0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 
        0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 
        0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 
        0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 
+       0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 
+       0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10e, 0x3, 0x10f, 0x3, 
        0x10f, 0x3, 0x10f, 0x3, 0x10f, 0x3, 0x10f, 0x3, 0x10f, 0x3, 0x10f, 
        0x10f, 0x3, 0x10f, 0x3, 0x10f, 0x3, 0x10f, 0x3, 0x10f, 0x3, 0x10f, 
-       0x3, 0x10f, 0x3, 0x110, 0x3, 0x110, 0x3, 0x110, 0x3, 0x110, 0x3, 
-       0x110, 0x3, 0x110, 0x3, 0x110, 0x3, 0x111, 0x3, 0x111, 0x3, 0x111, 
+       0x3, 0x10f, 0x3, 0x10f, 0x3, 0x110, 0x3, 0x110, 0x3, 0x110, 0x3, 
+       0x110, 0x3, 0x110, 0x3, 0x110, 0x3, 0x110, 0x3, 0x110, 0x3, 0x110, 
        0x3, 0x111, 0x3, 0x111, 0x3, 0x111, 0x3, 0x111, 0x3, 0x111, 0x3, 
        0x3, 0x111, 0x3, 0x111, 0x3, 0x111, 0x3, 0x111, 0x3, 0x111, 0x3, 
-       0x111, 0x3, 0x111, 0x3, 0x111, 0x3, 0x112, 0x3, 0x112, 0x3, 0x112, 
+       0x111, 0x3, 0x111, 0x3, 0x111, 0x3, 0x111, 0x3, 0x112, 0x3, 0x112, 
        0x3, 0x112, 0x3, 0x112, 0x3, 0x112, 0x3, 0x112, 0x3, 0x112, 0x3, 
        0x3, 0x112, 0x3, 0x112, 0x3, 0x112, 0x3, 0x112, 0x3, 0x112, 0x3, 
-       0x112, 0x3, 0x112, 0x3, 0x112, 0x3, 0x112, 0x3, 0x112, 0x3, 0x112, 
-       0x3, 0x112, 0x3, 0x113, 0x3, 0x113, 0x3, 0x113, 0x3, 0x113, 0x3, 
-       0x113, 0x3, 0x113, 0x3, 0x113, 0x3, 0x113, 0x3, 0x113, 0x3, 0x113, 
-       0x3, 0x113, 0x3, 0x113, 0x3, 0x113, 0x3, 0x113, 0x3, 0x114, 0x3, 
-       0x114, 0x3, 0x114, 0x3, 0x114, 0x3, 0x114, 0x3, 0x114, 0x3, 0x115, 
+       0x112, 0x3, 0x112, 0x3, 0x112, 0x3, 0x112, 0x3, 0x112, 0x3, 0x113, 
+       0x3, 0x113, 0x3, 0x113, 0x3, 0x113, 0x3, 0x113, 0x3, 0x113, 0x3, 
+       0x113, 0x3, 0x113, 0x3, 0x113, 0x3, 0x113, 0x3, 0x114, 0x3, 0x114, 
+       0x3, 0x114, 0x3, 0x114, 0x3, 0x114, 0x3, 0x114, 0x3, 0x114, 0x3, 
+       0x114, 0x3, 0x114, 0x3, 0x114, 0x3, 0x115, 0x3, 0x115, 0x3, 0x115, 
        0x3, 0x115, 0x3, 0x115, 0x3, 0x115, 0x3, 0x115, 0x3, 0x115, 0x3, 
        0x3, 0x115, 0x3, 0x115, 0x3, 0x115, 0x3, 0x115, 0x3, 0x115, 0x3, 
-       0x115, 0x3, 0x116, 0x3, 0x116, 0x3, 0x116, 0x3, 0x116, 0x3, 0x116, 
-       0x3, 0x116, 0x3, 0x116, 0x3, 0x117, 0x3, 0x117, 0x3, 0x117, 0x3, 
-       0x117, 0x3, 0x117, 0x3, 0x117, 0x3, 0x117, 0x3, 0x117, 0x3, 0x117, 
-       0x3, 0x117, 0x3, 0x117, 0x3, 0x118, 0x3, 0x118, 0x3, 0x118, 0x3, 
-       0x118, 0x3, 0x118, 0x3, 0x118, 0x3, 0x118, 0x3, 0x118, 0x3, 0x119, 
-       0x3, 0x119, 0x3, 0x119, 0x3, 0x119, 0x3, 0x119, 0x3, 0x119, 0x3, 
-       0x119, 0x3, 0x119, 0x3, 0x11a, 0x3, 0x11a, 0x3, 0x11a, 0x3, 0x11a, 
-       0x3, 0x11a, 0x3, 0x11b, 0x3, 0x11b, 0x3, 0x11b, 0x3, 0x11b, 0x3, 
-       0x11b, 0x3, 0x11b, 0x3, 0x11b, 0x3, 0x11c, 0x3, 0x11c, 0x3, 0x11c, 
-       0x3, 0x11c, 0x3, 0x11c, 0x3, 0x11c, 0x3, 0x11d, 0x3, 0x11d, 0x3, 
-       0x11d, 0x3, 0x11d, 0x3, 0x11d, 0x3, 0x11d, 0x3, 0x11d, 0x3, 0x11e, 
+       0x115, 0x3, 0x115, 0x3, 0x116, 0x3, 0x116, 0x3, 0x116, 0x3, 0x116, 
+       0x3, 0x116, 0x3, 0x116, 0x3, 0x116, 0x3, 0x116, 0x3, 0x116, 0x3, 
+       0x116, 0x3, 0x116, 0x3, 0x116, 0x3, 0x116, 0x3, 0x116, 0x3, 0x117, 
+       0x3, 0x117, 0x3, 0x117, 0x3, 0x117, 0x3, 0x117, 0x3, 0x117, 0x3, 
+       0x117, 0x3, 0x118, 0x3, 0x118, 0x3, 0x118, 0x3, 0x118, 0x3, 0x118, 
+       0x3, 0x118, 0x3, 0x118, 0x3, 0x119, 0x3, 0x119, 0x3, 0x119, 0x3, 
+       0x119, 0x3, 0x119, 0x3, 0x119, 0x3, 0x119, 0x3, 0x119, 0x3, 0x119, 
+       0x3, 0x119, 0x3, 0x119, 0x3, 0x11a, 0x3, 0x11a, 0x3, 0x11a, 0x3, 
+       0x11a, 0x3, 0x11a, 0x3, 0x11a, 0x3, 0x11a, 0x3, 0x11a, 0x3, 0x11a, 
+       0x3, 0x11a, 0x3, 0x11a, 0x3, 0x11a, 0x3, 0x11a, 0x3, 0x11a, 0x3, 
+       0x11a, 0x3, 0x11b, 0x3, 0x11b, 0x3, 0x11b, 0x3, 0x11b, 0x3, 0x11b, 
+       0x3, 0x11b, 0x3, 0x11b, 0x3, 0x11b, 0x3, 0x11b, 0x3, 0x11b, 0x3, 
+       0x11b, 0x3, 0x11b, 0x3, 0x11b, 0x3, 0x11b, 0x3, 0x11c, 0x3, 0x11c, 
+       0x3, 0x11c, 0x3, 0x11c, 0x3, 0x11c, 0x3, 0x11c, 0x3, 0x11d, 0x3, 
+       0x11d, 0x3, 0x11d, 0x3, 0x11d, 0x3, 0x11d, 0x3, 0x11d, 0x3, 0x11d, 
        0x3, 0x11e, 0x3, 0x11e, 0x3, 0x11e, 0x3, 0x11e, 0x3, 0x11e, 0x3, 
        0x3, 0x11e, 0x3, 0x11e, 0x3, 0x11e, 0x3, 0x11e, 0x3, 0x11e, 0x3, 
-       0x11e, 0x3, 0x11e, 0x3, 0x11e, 0x3, 0x11e, 0x3, 0x11e, 0x3, 0x11f, 
+       0x11e, 0x3, 0x11e, 0x3, 0x11f, 0x3, 0x11f, 0x3, 0x11f, 0x3, 0x11f, 
        0x3, 0x11f, 0x3, 0x11f, 0x3, 0x11f, 0x3, 0x11f, 0x3, 0x11f, 0x3, 
        0x3, 0x11f, 0x3, 0x11f, 0x3, 0x11f, 0x3, 0x11f, 0x3, 0x11f, 0x3, 
-       0x120, 0x3, 0x120, 0x3, 0x120, 0x3, 0x120, 0x3, 0x120, 0x3, 0x121, 
-       0x3, 0x121, 0x3, 0x121, 0x3, 0x121, 0x3, 0x121, 0x3, 0x121, 0x3, 
-       0x122, 0x3, 0x122, 0x3, 0x122, 0x3, 0x122, 0x3, 0x122, 0x3, 0x122, 
-       0x3, 0x122, 0x3, 0x122, 0x3, 0x122, 0x3, 0x122, 0x3, 0x123, 0x3, 
-       0x123, 0x3, 0x123, 0x3, 0x123, 0x3, 0x123, 0x3, 0x123, 0x3, 0x123, 
-       0x3, 0x123, 0x3, 0x124, 0x3, 0x124, 0x3, 0x124, 0x3, 0x124, 0x3, 
-       0x124, 0x3, 0x124, 0x3, 0x124, 0x3, 0x124, 0x3, 0x124, 0x3, 0x125, 
-       0x3, 0x125, 0x3, 0x125, 0x3, 0x125, 0x3, 0x125, 0x3, 0x125, 0x3, 
-       0x125, 0x3, 0x125, 0x3, 0x125, 0x3, 0x125, 0x3, 0x125, 0x3, 0x125, 
-       0x3, 0x125, 0x3, 0x126, 0x3, 0x126, 0x3, 0x126, 0x3, 0x126, 0x3, 
-       0x126, 0x3, 0x126, 0x3, 0x126, 0x3, 0x127, 0x3, 0x127, 0x3, 0x127, 
-       0x3, 0x127, 0x3, 0x127, 0x3, 0x127, 0x3, 0x127, 0x3, 0x127, 0x3, 
-       0x127, 0x3, 0x127, 0x3, 0x127, 0x3, 0x127, 0x3, 0x128, 0x3, 0x128, 
-       0x3, 0x128, 0x3, 0x128, 0x3, 0x128, 0x3, 0x128, 0x3, 0x128, 0x3, 
-       0x128, 0x3, 0x128, 0x3, 0x128, 0x3, 0x128, 0x3, 0x128, 0x3, 0x128, 
+       0x11f, 0x3, 0x11f, 0x3, 0x120, 0x3, 0x120, 0x3, 0x120, 0x3, 0x120, 
+       0x3, 0x120, 0x3, 0x120, 0x3, 0x120, 0x3, 0x120, 0x3, 0x121, 0x3, 
+       0x121, 0x3, 0x121, 0x3, 0x121, 0x3, 0x121, 0x3, 0x121, 0x3, 0x121, 
+       0x3, 0x121, 0x3, 0x122, 0x3, 0x122, 0x3, 0x122, 0x3, 0x122, 0x3, 
+       0x122, 0x3, 0x123, 0x3, 0x123, 0x3, 0x123, 0x3, 0x123, 0x3, 0x123, 
+       0x3, 0x123, 0x3, 0x123, 0x3, 0x124, 0x3, 0x124, 0x3, 0x124, 0x3, 
+       0x124, 0x3, 0x124, 0x3, 0x124, 0x3, 0x125, 0x3, 0x125, 0x3, 0x125, 
+       0x3, 0x125, 0x3, 0x125, 0x3, 0x125, 0x3, 0x125, 0x3, 0x126, 0x3, 
+       0x126, 0x3, 0x126, 0x3, 0x126, 0x3, 0x126, 0x3, 0x126, 0x3, 0x126, 
+       0x3, 0x126, 0x3, 0x126, 0x3, 0x126, 0x3, 0x126, 0x3, 0x127, 0x3, 
+       0x127, 0x3, 0x127, 0x3, 0x127, 0x3, 0x127, 0x3, 0x127, 0x3, 0x128, 
        0x3, 0x128, 0x3, 0x128, 0x3, 0x128, 0x3, 0x128, 0x3, 0x129, 0x3, 
        0x3, 0x128, 0x3, 0x128, 0x3, 0x128, 0x3, 0x128, 0x3, 0x129, 0x3, 
-       0x129, 0x3, 0x129, 0x3, 0x129, 0x3, 0x129, 0x3, 0x129, 0x3, 0x129, 
-       0x3, 0x129, 0x3, 0x129, 0x3, 0x129, 0x3, 0x129, 0x3, 0x129, 0x3, 
-       0x12a, 0x3, 0x12a, 0x3, 0x12b, 0x3, 0x12b, 0x3, 0x12c, 0x3, 0x12c, 
-       0x3, 0x12d, 0x3, 0x12d, 0x3, 0x12e, 0x3, 0x12e, 0x3, 0x12f, 0x3, 
-       0x12f, 0x3, 0x130, 0x3, 0x130, 0x3, 0x130, 0x3, 0x131, 0x3, 0x131, 
-       0x3, 0x132, 0x3, 0x132, 0x3, 0x132, 0x3, 0x133, 0x3, 0x133, 0x3, 
-       0x134, 0x3, 0x134, 0x3, 0x134, 0x3, 0x135, 0x3, 0x135, 0x3, 0x135, 
-       0x3, 0x136, 0x3, 0x136, 0x3, 0x136, 0x3, 0x137, 0x3, 0x137, 0x3, 
-       0x138, 0x3, 0x138, 0x3, 0x138, 0x3, 0x139, 0x3, 0x139, 0x3, 0x13a, 
-       0x3, 0x13a, 0x3, 0x13a, 0x3, 0x13b, 0x3, 0x13b, 0x3, 0x13c, 0x3, 
-       0x13c, 0x3, 0x13d, 0x3, 0x13d, 0x3, 0x13e, 0x3, 0x13e, 0x3, 0x13f, 
-       0x3, 0x13f, 0x3, 0x140, 0x3, 0x140, 0x3, 0x140, 0x3, 0x141, 0x3, 
-       0x141, 0x3, 0x141, 0x3, 0x142, 0x3, 0x142, 0x3, 0x143, 0x3, 0x143, 
-       0x3, 0x144, 0x3, 0x144, 0x3, 0x145, 0x3, 0x145, 0x3, 0x146, 0x3, 
-       0x146, 0x3, 0x147, 0x3, 0x147, 0x3, 0x147, 0x3, 0x148, 0x3, 0x148, 
-       0x3, 0x149, 0x3, 0x149, 0x3, 0x14a, 0x3, 0x14a, 0x3, 0x14b, 0x3, 
-       0x14b, 0x3, 0x14b, 0x3, 0x14c, 0x3, 0x14c, 0x3, 0x14c, 0x3, 0x14d, 
-       0x3, 0x14d, 0x3, 0x14d, 0x3, 0x14e, 0x3, 0x14e, 0x3, 0x14e, 0x3, 
-       0x14f, 0x3, 0x14f, 0x3, 0x14f, 0x3, 0x150, 0x3, 0x150, 0x3, 0x150, 
-       0x3, 0x150, 0x3, 0x151, 0x3, 0x151, 0x3, 0x151, 0x3, 0x151, 0x3, 
-       0x152, 0x3, 0x152, 0x3, 0x152, 0x3, 0x153, 0x3, 0x153, 0x3, 0x153, 
-       0x3, 0x154, 0x3, 0x154, 0x3, 0x154, 0x3, 0x155, 0x3, 0x155, 0x3, 
-       0x155, 0x3, 0x156, 0x3, 0x156, 0x3, 0x156, 0x3, 0x157, 0x3, 0x157, 
-       0x3, 0x158, 0x3, 0x158, 0x3, 0x158, 0x3, 0x158, 0x3, 0x158, 0x3, 
-       0x159, 0x3, 0x159, 0x3, 0x159, 0x3, 0x159, 0x3, 0x159, 0x3, 0x159, 
-       0x3, 0x15a, 0x3, 0x15a, 0x3, 0x15a, 0x3, 0x15a, 0x3, 0x15a, 0x3, 
-       0x15a, 0x3, 0x15a, 0x3, 0x15a, 0x3, 0x15a, 0x3, 0x15a, 0x3, 0x15a, 
-       0x3, 0x15a, 0x3, 0x15a, 0x3, 0x15a, 0x3, 0x15a, 0x3, 0x15b, 0x3, 
-       0x15b, 0x3, 0x15b, 0x3, 0x15b, 0x3, 0x15b, 0x3, 0x15b, 0x3, 0x15b, 
-       0x3, 0x15b, 0x3, 0x15b, 0x3, 0x15b, 0x3, 0x15c, 0x3, 0x15c, 0x3, 
-       0x15c, 0x3, 0x15c, 0x3, 0x15c, 0x3, 0x15c, 0x3, 0x15c, 0x3, 0x15c, 
-       0x3, 0x15d, 0x3, 0x15d, 0x3, 0x15d, 0x3, 0x15d, 0x3, 0x15d, 0x3, 
-       0x15d, 0x3, 0x15d, 0x3, 0x15d, 0x3, 0x15d, 0x3, 0x15d, 0x3, 0x15d, 
-       0x3, 0x15d, 0x3, 0x15e, 0x3, 0x15e, 0x3, 0x15e, 0x3, 0x15e, 0x3, 
-       0x15e, 0x3, 0x15e, 0x3, 0x15e, 0x3, 0x15f, 0x3, 0x15f, 0x3, 0x15f, 
-       0x3, 0x15f, 0x3, 0x15f, 0x3, 0x15f, 0x3, 0x15f, 0x3, 0x15f, 0x3, 
-       0x15f, 0x3, 0x15f, 0x3, 0x15f, 0x3, 0x15f, 0x3, 0x15f, 0x3, 0x15f, 
-       0x3, 0x15f, 0x3, 0x15f, 0x3, 0x15f, 0x3, 0x15f, 0x3, 0x15f, 0x3, 
-       0x15f, 0x3, 0x15f, 0x3, 0x15f, 0x3, 0x160, 0x3, 0x160, 0x3, 0x160, 
-       0x3, 0x160, 0x3, 0x160, 0x3, 0x160, 0x3, 0x160, 0x3, 0x160, 0x3, 
-       0x160, 0x3, 0x160, 0x3, 0x160, 0x3, 0x160, 0x3, 0x160, 0x3, 0x160, 
-       0x3, 0x160, 0x3, 0x160, 0x3, 0x160, 0x3, 0x160, 0x3, 0x160, 0x3, 
-       0x160, 0x3, 0x160, 0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 
+       0x129, 0x3, 0x129, 0x3, 0x129, 0x3, 0x129, 0x3, 0x129, 0x3, 0x12a, 
+       0x3, 0x12a, 0x3, 0x12a, 0x3, 0x12a, 0x3, 0x12a, 0x3, 0x12a, 0x3, 
+       0x12a, 0x3, 0x12a, 0x3, 0x12a, 0x3, 0x12a, 0x3, 0x12b, 0x3, 0x12b, 
+       0x3, 0x12b, 0x3, 0x12b, 0x3, 0x12b, 0x3, 0x12b, 0x3, 0x12b, 0x3, 
+       0x12b, 0x3, 0x12c, 0x3, 0x12c, 0x3, 0x12c, 0x3, 0x12c, 0x3, 0x12c, 
+       0x3, 0x12c, 0x3, 0x12c, 0x3, 0x12c, 0x3, 0x12c, 0x3, 0x12d, 0x3, 
+       0x12d, 0x3, 0x12d, 0x3, 0x12d, 0x3, 0x12d, 0x3, 0x12d, 0x3, 0x12d, 
+       0x3, 0x12d, 0x3, 0x12d, 0x3, 0x12d, 0x3, 0x12d, 0x3, 0x12d, 0x3, 
+       0x12d, 0x3, 0x12e, 0x3, 0x12e, 0x3, 0x12e, 0x3, 0x12e, 0x3, 0x12e, 
+       0x3, 0x12e, 0x3, 0x12e, 0x3, 0x12f, 0x3, 0x12f, 0x3, 0x12f, 0x3, 
+       0x12f, 0x3, 0x12f, 0x3, 0x12f, 0x3, 0x12f, 0x3, 0x12f, 0x3, 0x12f, 
+       0x3, 0x12f, 0x3, 0x12f, 0x3, 0x12f, 0x3, 0x130, 0x3, 0x130, 0x3, 
+       0x130, 0x3, 0x130, 0x3, 0x130, 0x3, 0x130, 0x3, 0x130, 0x3, 0x130, 
+       0x3, 0x130, 0x3, 0x130, 0x3, 0x130, 0x3, 0x130, 0x3, 0x130, 0x3, 
+       0x130, 0x3, 0x130, 0x3, 0x130, 0x3, 0x130, 0x3, 0x131, 0x3, 0x131, 
+       0x3, 0x131, 0x3, 0x131, 0x3, 0x131, 0x3, 0x131, 0x3, 0x131, 0x3, 
+       0x131, 0x3, 0x131, 0x3, 0x131, 0x3, 0x131, 0x3, 0x131, 0x3, 0x132, 
+       0x3, 0x132, 0x3, 0x133, 0x3, 0x133, 0x3, 0x134, 0x3, 0x134, 0x3, 
+       0x135, 0x3, 0x135, 0x3, 0x136, 0x3, 0x136, 0x3, 0x137, 0x3, 0x137, 
+       0x3, 0x138, 0x3, 0x138, 0x3, 0x138, 0x3, 0x139, 0x3, 0x139, 0x3, 
+       0x13a, 0x3, 0x13a, 0x3, 0x13a, 0x3, 0x13b, 0x3, 0x13b, 0x3, 0x13c, 
+       0x3, 0x13c, 0x3, 0x13c, 0x3, 0x13d, 0x3, 0x13d, 0x3, 0x13d, 0x3, 
+       0x13e, 0x3, 0x13e, 0x3, 0x13e, 0x3, 0x13f, 0x3, 0x13f, 0x3, 0x140, 
+       0x3, 0x140, 0x3, 0x140, 0x3, 0x141, 0x3, 0x141, 0x3, 0x142, 0x3, 
+       0x142, 0x3, 0x142, 0x3, 0x143, 0x3, 0x143, 0x3, 0x144, 0x3, 0x144, 
+       0x3, 0x145, 0x3, 0x145, 0x3, 0x146, 0x3, 0x146, 0x3, 0x147, 0x3, 
+       0x147, 0x3, 0x148, 0x3, 0x148, 0x3, 0x148, 0x3, 0x149, 0x3, 0x149, 
+       0x3, 0x149, 0x3, 0x14a, 0x3, 0x14a, 0x3, 0x14b, 0x3, 0x14b, 0x3, 
+       0x14c, 0x3, 0x14c, 0x3, 0x14d, 0x3, 0x14d, 0x3, 0x14e, 0x3, 0x14e, 
+       0x3, 0x14f, 0x3, 0x14f, 0x3, 0x14f, 0x3, 0x150, 0x3, 0x150, 0x3, 
+       0x151, 0x3, 0x151, 0x3, 0x152, 0x3, 0x152, 0x3, 0x153, 0x3, 0x153, 
+       0x3, 0x153, 0x3, 0x154, 0x3, 0x154, 0x3, 0x154, 0x3, 0x155, 0x3, 
+       0x155, 0x3, 0x155, 0x3, 0x156, 0x3, 0x156, 0x3, 0x156, 0x3, 0x157, 
+       0x3, 0x157, 0x3, 0x157, 0x3, 0x158, 0x3, 0x158, 0x3, 0x158, 0x3, 
+       0x158, 0x3, 0x159, 0x3, 0x159, 0x3, 0x159, 0x3, 0x159, 0x3, 0x15a, 
+       0x3, 0x15a, 0x3, 0x15a, 0x3, 0x15b, 0x3, 0x15b, 0x3, 0x15b, 0x3, 
+       0x15c, 0x3, 0x15c, 0x3, 0x15c, 0x3, 0x15d, 0x3, 0x15d, 0x3, 0x15d, 
+       0x3, 0x15e, 0x3, 0x15e, 0x3, 0x15e, 0x3, 0x15f, 0x3, 0x15f, 0x3, 
+       0x160, 0x3, 0x160, 0x3, 0x160, 0x3, 0x160, 0x3, 0x160, 0x3, 0x161, 
        0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 
        0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 
-       0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 
-       0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 
-       0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 
-       0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 0x161, 0x3, 
-       0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 
-       0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 
        0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 
        0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 
        0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 
        0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 
-       0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 
-       0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x163, 0x3, 0x163, 0x3, 
-       0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 
-       0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 
-       0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 
+       0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x162, 0x3, 0x163, 0x3, 0x163, 
        0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 
        0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 
-       0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 0x163, 
+       0x163, 0x3, 0x163, 0x3, 0x163, 0x3, 0x164, 0x3, 0x164, 0x3, 0x164, 
        0x3, 0x164, 0x3, 0x164, 0x3, 0x164, 0x3, 0x164, 0x3, 0x164, 0x3, 
        0x3, 0x164, 0x3, 0x164, 0x3, 0x164, 0x3, 0x164, 0x3, 0x164, 0x3, 
-       0x164, 0x3, 0x164, 0x3, 0x164, 0x3, 0x164, 0x3, 0x164, 0x3, 0x164, 
-       0x3, 0x164, 0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 
        0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 
        0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 
        0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 
        0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 
-       0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 0x3, 0x165, 
-       0x3, 0x165, 0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 0x3, 
-       0x166, 0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 
-       0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 0x3, 
-       0x166, 0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 
-       0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 0x3, 
-       0x166, 0x3, 0x166, 0x3, 0x167, 0x3, 0x167, 0x3, 0x167, 0x3, 0x167, 
-       0x3, 0x167, 0x3, 0x167, 0x3, 0x167, 0x3, 0x167, 0x3, 0x167, 0x3, 
+       0x165, 0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 0x3, 0x166, 
+       0x3, 0x166, 0x3, 0x166, 0x3, 0x167, 0x3, 0x167, 0x3, 0x167, 0x3, 
        0x167, 0x3, 0x167, 0x3, 0x167, 0x3, 0x167, 0x3, 0x167, 0x3, 0x167, 
        0x167, 0x3, 0x167, 0x3, 0x167, 0x3, 0x167, 0x3, 0x167, 0x3, 0x167, 
-       0x3, 0x167, 0x3, 0x167, 0x3, 0x167, 0x3, 0x167, 0x3, 0x167, 0x3, 
-       0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 
-       0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x7, 0x168, 0x1051, 
-       0xa, 0x168, 0xc, 0x168, 0xe, 0x168, 0x1054, 0xb, 0x168, 0x3, 0x168, 
-       0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 
-       0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 
-       0x3, 0x168, 0x3, 0x168, 0x7, 0x168, 0x1064, 0xa, 0x168, 0xc, 0x168, 
-       0xe, 0x168, 0x1067, 0xb, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 
-       0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 
-       0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x7, 0x168, 
-       0x1076, 0xa, 0x168, 0xc, 0x168, 0xe, 0x168, 0x1079, 0xb, 0x168, 0x3, 
-       0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 
-       0x3, 0x168, 0x7, 0x168, 0x1082, 0xa, 0x168, 0xc, 0x168, 0xe, 0x168, 
-       0x1085, 0xb, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 
-       0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x7, 0x168, 0x108f, 
-       0xa, 0x168, 0xc, 0x168, 0xe, 0x168, 0x1092, 0xb, 0x168, 0x3, 0x168, 
-       0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 
-       0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x7, 0x168, 0x109e, 0xa, 
-       0x168, 0xc, 0x168, 0xe, 0x168, 0x10a1, 0xb, 0x168, 0x3, 0x168, 0x3, 
-       0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 
-       0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 
-       0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x7, 0x168, 0x10b3, 0xa, 
-       0x168, 0xc, 0x168, 0xe, 0x168, 0x10b6, 0xb, 0x168, 0x3, 0x168, 0x3, 
-       0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 
-       0x3, 0x168, 0x3, 0x168, 0x7, 0x168, 0x10c1, 0xa, 0x168, 0xc, 0x168, 
-       0xe, 0x168, 0x10c4, 0xb, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 
-       0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 
-       0x168, 0x3, 0x168, 0x7, 0x168, 0x10d0, 0xa, 0x168, 0xc, 0x168, 0xe, 
-       0x168, 0x10d3, 0xb, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 
+       0x3, 0x167, 0x3, 0x167, 0x3, 0x167, 0x3, 0x168, 0x3, 0x168, 0x3, 
        0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 
        0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 
        0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 
        0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 
-       0x168, 0x7, 0x168, 0x10e4, 0xa, 0x168, 0xc, 0x168, 0xe, 0x168, 0x10e7, 
-       0xb, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 
-       0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 
-       0x7, 0x168, 0x10f3, 0xa, 0x168, 0xc, 0x168, 0xe, 0x168, 0x10f6, 0xb, 
        0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 
        0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 
-       0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 
-       0x168, 0x7, 0x168, 0x1103, 0xa, 0x168, 0xc, 0x168, 0xe, 0x168, 0x1106, 
-       0xb, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 
-       0x168, 0x3, 0x168, 0x3, 0x168, 0x7, 0x168, 0x110f, 0xa, 0x168, 0xc, 
-       0x168, 0xe, 0x168, 0x1112, 0xb, 0x168, 0x5, 0x168, 0x1114, 0xa, 0x168, 
+       0x3, 0x168, 0x3, 0x168, 0x3, 0x168, 0x3, 0x169, 0x3, 0x169, 0x3, 
+       0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 
+       0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 
+       0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 
        0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 
        0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 
-       0x169, 0x7, 0x169, 0x111c, 0xa, 0x169, 0xc, 0x169, 0xe, 0x169, 0x111f, 
-       0xb, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 
-       0x169, 0x3, 0x169, 0x7, 0x169, 0x1127, 0xa, 0x169, 0xc, 0x169, 0xe, 
-       0x169, 0x112a, 0xb, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 
-       0x169, 0x3, 0x169, 0x3, 0x169, 0x7, 0x169, 0x1132, 0xa, 0x169, 0xc, 
-       0x169, 0xe, 0x169, 0x1135, 0xb, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 
-       0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x7, 0x169, 0x113d, 0xa, 
-       0x169, 0xc, 0x169, 0xe, 0x169, 0x1140, 0xb, 0x169, 0x5, 0x169, 0x1142, 
-       0xa, 0x169, 0x3, 0x16a, 0x3, 0x16a, 0x3, 0x16a, 0x7, 0x16a, 0x1147, 
-       0xa, 0x16a, 0xc, 0x16a, 0xe, 0x16a, 0x114a, 0xb, 0x16a, 0x3, 0x16b, 
-       0x3, 0x16b, 0x3, 0x16c, 0x3, 0x16c, 0x3, 0x16d, 0x6, 0x16d, 0x1151, 
-       0xa, 0x16d, 0xd, 0x16d, 0xe, 0x16d, 0x1152, 0x3, 0x16e, 0x3, 0x16e, 
-       0x3, 0x16e, 0x3, 0x16e, 0x5, 0x16e, 0x1159, 0xa, 0x16e, 0x3, 0x16e, 
-       0x6, 0x16e, 0x115c, 0xa, 0x16e, 0xd, 0x16e, 0xe, 0x16e, 0x115d, 0x3, 
-       0x16f, 0x3, 0x16f, 0x3, 0x170, 0x5, 0x170, 0x1163, 0xa, 0x170, 0x3, 
-       0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x5, 0x170, 
-       0x116a, 0xa, 0x170, 0x3, 0x171, 0x3, 0x171, 0x5, 0x171, 0x116e, 0xa, 
-       0x171, 0x3, 0x171, 0x3, 0x171, 0x3, 0x171, 0x5, 0x171, 0x1173, 0xa, 
-       0x171, 0x3, 0x171, 0x5, 0x171, 0x1176, 0xa, 0x171, 0x3, 0x172, 0x3, 
-       0x172, 0x3, 0x173, 0x6, 0x173, 0x117b, 0xa, 0x173, 0xd, 0x173, 0xe, 
-       0x173, 0x117c, 0x3, 0x174, 0x6, 0x174, 0x1180, 0xa, 0x174, 0xd, 0x174, 
-       0xe, 0x174, 0x1181, 0x3, 0x175, 0x5, 0x175, 0x1185, 0xa, 0x175, 0x3, 
-       0x175, 0x5, 0x175, 0x1188, 0xa, 0x175, 0x3, 0x175, 0x5, 0x175, 0x118b, 
-       0xa, 0x175, 0x3, 0x175, 0x5, 0x175, 0x118e, 0xa, 0x175, 0x3, 0x175, 
-       0x5, 0x175, 0x1191, 0xa, 0x175, 0x5, 0x175, 0x1193, 0xa, 0x175, 0x3, 
-       0x176, 0x3, 0x176, 0x5, 0x176, 0x1197, 0xa, 0x176, 0x3, 0x176, 0x3, 
-       0x176, 0x5, 0x176, 0x119b, 0xa, 0x176, 0x5, 0x176, 0x119d, 0xa, 0x176, 
-       0x3, 0x177, 0x3, 0x177, 0x3, 0x178, 0x3, 0x178, 0x5, 0x178, 0x11a3, 
-       0xa, 0x178, 0x3, 0x178, 0x5, 0x178, 0x11a6, 0xa, 0x178, 0x3, 0x178, 
-       0x3, 0x178, 0x3, 0x178, 0x5, 0x178, 0x11ab, 0xa, 0x178, 0x5, 0x178, 
-       0x11ad, 0xa, 0x178, 0x3, 0x179, 0x3, 0x179, 0x3, 0x17a, 0x3, 0x17a, 
-       0x3, 0x17a, 0x3, 0x17b, 0x3, 0x17b, 0x5, 0x17b, 0x11b6, 0xa, 0x17b, 
-       0x3, 0x17b, 0x3, 0x17b, 0x3, 0x17c, 0x6, 0x17c, 0x11bb, 0xa, 0x17c, 
-       0xd, 0x17c, 0xe, 0x17c, 0x11bc, 0x3, 0x17d, 0x3, 0x17d, 0x5, 0x17d, 
-       0x11c1, 0xa, 0x17d, 0x3, 0x17e, 0x3, 0x17e, 0x5, 0x17e, 0x11c5, 0xa, 
-       0x17e, 0x3, 0x17e, 0x3, 0x17e, 0x3, 0x17e, 0x3, 0x17e, 0x3, 0x17e, 
-       0x3, 0x17e, 0x3, 0x17e, 0x3, 0x17e, 0x3, 0x17e, 0x7, 0x17e, 0x11d0, 
-       0xa, 0x17e, 0xc, 0x17e, 0xe, 0x17e, 0x11d3, 0xb, 0x17e, 0x3, 0x17e, 
-       0x3, 0x17e, 0x3, 0x17f, 0x3, 0x17f, 0x5, 0x17f, 0x11d9, 0xa, 0x17f, 
-       0x3, 0x17f, 0x3, 0x17f, 0x3, 0x17f, 0x3, 0x17f, 0x3, 0x17f, 0x3, 
-       0x17f, 0x5, 0x17f, 0x11e1, 0xa, 0x17f, 0x3, 0x17f, 0x3, 0x17f, 0x5, 
-       0x17f, 0x11e5, 0xa, 0x17f, 0x3, 0x17f, 0x5, 0x17f, 0x11e8, 0xa, 0x17f, 
-       0x3, 0x17f, 0x3, 0x17f, 0x3, 0x180, 0x6, 0x180, 0x11ed, 0xa, 0x180, 
-       0xd, 0x180, 0xe, 0x180, 0x11ee, 0x3, 0x180, 0x3, 0x180, 0x3, 0x181, 
-       0x3, 0x181, 0x5, 0x181, 0x11f5, 0xa, 0x181, 0x3, 0x181, 0x5, 0x181, 
-       0x11f8, 0xa, 0x181, 0x3, 0x181, 0x3, 0x181, 0x3, 0x182, 0x3, 0x182, 
-       0x3, 0x182, 0x3, 0x182, 0x7, 0x182, 0x1200, 0xa, 0x182, 0xc, 0x182, 
-       0xe, 0x182, 0x1203, 0xb, 0x182, 0x3, 0x182, 0x3, 0x182, 0x3, 0x182, 
-       0x3, 0x182, 0x3, 0x182, 0x3, 0x183, 0x3, 0x183, 0x3, 0x183, 0x3, 
-       0x183, 0x7, 0x183, 0x120e, 0xa, 0x183, 0xc, 0x183, 0xe, 0x183, 0x1211, 
-       0xb, 0x183, 0x3, 0x183, 0x3, 0x183, 0x3, 0x1201, 0x2, 0x184, 0x3, 
-       0x3, 0x5, 0x4, 0x7, 0x5, 0x9, 0x6, 0xb, 0x7, 0xd, 0x8, 0xf, 0x9, 
-       0x11, 0xa, 0x13, 0xb, 0x15, 0xc, 0x17, 0xd, 0x19, 0xe, 0x1b, 0xf, 
-       0x1d, 0x10, 0x1f, 0x11, 0x21, 0x12, 0x23, 0x13, 0x25, 0x14, 0x27, 
-       0x15, 0x29, 0x16, 0x2b, 0x17, 0x2d, 0x18, 0x2f, 0x19, 0x31, 0x1a, 
-       0x33, 0x1b, 0x35, 0x1c, 0x37, 0x1d, 0x39, 0x1e, 0x3b, 0x1f, 0x3d, 
-       0x20, 0x3f, 0x21, 0x41, 0x22, 0x43, 0x23, 0x45, 0x24, 0x47, 0x25, 
-       0x49, 0x26, 0x4b, 0x27, 0x4d, 0x28, 0x4f, 0x29, 0x51, 0x2a, 0x53, 
-       0x2b, 0x55, 0x2c, 0x57, 0x2d, 0x59, 0x2e, 0x5b, 0x2f, 0x5d, 0x30, 
-       0x5f, 0x31, 0x61, 0x32, 0x63, 0x33, 0x65, 0x34, 0x67, 0x35, 0x69, 
-       0x36, 0x6b, 0x37, 0x6d, 0x38, 0x6f, 0x39, 0x71, 0x3a, 0x73, 0x3b, 
-       0x75, 0x3c, 0x77, 0x3d, 0x79, 0x3e, 0x7b, 0x3f, 0x7d, 0x40, 0x7f, 
-       0x41, 0x81, 0x42, 0x83, 0x43, 0x85, 0x44, 0x87, 0x45, 0x89, 0x46, 
-       0x8b, 0x47, 0x8d, 0x48, 0x8f, 0x49, 0x91, 0x4a, 0x93, 0x4b, 0x95, 
-       0x4c, 0x97, 0x4d, 0x99, 0x4e, 0x9b, 0x4f, 0x9d, 0x50, 0x9f, 0x51, 
-       0xa1, 0x52, 0xa3, 0x53, 0xa5, 0x54, 0xa7, 0x55, 0xa9, 0x56, 0xab, 
-       0x57, 0xad, 0x58, 0xaf, 0x59, 0xb1, 0x5a, 0xb3, 0x5b, 0xb5, 0x5c, 
-       0xb7, 0x5d, 0xb9, 0x5e, 0xbb, 0x5f, 0xbd, 0x60, 0xbf, 0x61, 0xc1, 
-       0x62, 0xc3, 0x63, 0xc5, 0x64, 0xc7, 0x65, 0xc9, 0x66, 0xcb, 0x67, 
-       0xcd, 0x68, 0xcf, 0x69, 0xd1, 0x6a, 0xd3, 0x6b, 0xd5, 0x6c, 0xd7, 
-       0x6d, 0xd9, 0x6e, 0xdb, 0x6f, 0xdd, 0x70, 0xdf, 0x71, 0xe1, 0x72, 
-       0xe3, 0x73, 0xe5, 0x74, 0xe7, 0x75, 0xe9, 0x76, 0xeb, 0x77, 0xed, 
-       0x78, 0xef, 0x79, 0xf1, 0x7a, 0xf3, 0x7b, 0xf5, 0x7c, 0xf7, 0x7d, 
-       0xf9, 0x7e, 0xfb, 0x7f, 0xfd, 0x80, 0xff, 0x81, 0x101, 0x82, 0x103, 
-       0x83, 0x105, 0x84, 0x107, 0x85, 0x109, 0x86, 0x10b, 0x87, 0x10d, 
-       0x88, 0x10f, 0x89, 0x111, 0x8a, 0x113, 0x8b, 0x115, 0x8c, 0x117, 
-       0x8d, 0x119, 0x8e, 0x11b, 0x8f, 0x11d, 0x90, 0x11f, 0x91, 0x121, 
-       0x92, 0x123, 0x93, 0x125, 0x94, 0x127, 0x95, 0x129, 0x96, 0x12b, 
-       0x97, 0x12d, 0x98, 0x12f, 0x99, 0x131, 0x9a, 0x133, 0x9b, 0x135, 
-       0x9c, 0x137, 0x9d, 0x139, 0x9e, 0x13b, 0x9f, 0x13d, 0xa0, 0x13f, 
-       0xa1, 0x141, 0xa2, 0x143, 0xa3, 0x145, 0xa4, 0x147, 0xa5, 0x149, 
-       0xa6, 0x14b, 0xa7, 0x14d, 0xa8, 0x14f, 0xa9, 0x151, 0xaa, 0x153, 
-       0xab, 0x155, 0xac, 0x157, 0xad, 0x159, 0xae, 0x15b, 0xaf, 0x15d, 
-       0xb0, 0x15f, 0xb1, 0x161, 0xb2, 0x163, 0xb3, 0x165, 0xb4, 0x167, 
-       0xb5, 0x169, 0xb6, 0x16b, 0xb7, 0x16d, 0xb8, 0x16f, 0xb9, 0x171, 
-       0xba, 0x173, 0xbb, 0x175, 0xbc, 0x177, 0xbd, 0x179, 0xbe, 0x17b, 
-       0xbf, 0x17d, 0xc0, 0x17f, 0xc1, 0x181, 0xc2, 0x183, 0xc3, 0x185, 
-       0xc4, 0x187, 0xc5, 0x189, 0xc6, 0x18b, 0xc7, 0x18d, 0xc8, 0x18f, 
-       0xc9, 0x191, 0xca, 0x193, 0xcb, 0x195, 0xcc, 0x197, 0xcd, 0x199, 
-       0xce, 0x19b, 0xcf, 0x19d, 0xd0, 0x19f, 0xd1, 0x1a1, 0xd2, 0x1a3, 
-       0xd3, 0x1a5, 0xd4, 0x1a7, 0xd5, 0x1a9, 0xd6, 0x1ab, 0xd7, 0x1ad, 
-       0xd8, 0x1af, 0xd9, 0x1b1, 0xda, 0x1b3, 0xdb, 0x1b5, 0xdc, 0x1b7, 
-       0xdd, 0x1b9, 0xde, 0x1bb, 0xdf, 0x1bd, 0xe0, 0x1bf, 0xe1, 0x1c1, 
-       0xe2, 0x1c3, 0xe3, 0x1c5, 0xe4, 0x1c7, 0xe5, 0x1c9, 0xe6, 0x1cb, 
-       0xe7, 0x1cd, 0xe8, 0x1cf, 0xe9, 0x1d1, 0xea, 0x1d3, 0xeb, 0x1d5, 
-       0xec, 0x1d7, 0xed, 0x1d9, 0xee, 0x1db, 0xef, 0x1dd, 0xf0, 0x1df, 
-       0xf1, 0x1e1, 0xf2, 0x1e3, 0xf3, 0x1e5, 0xf4, 0x1e7, 0xf5, 0x1e9, 
-       0xf6, 0x1eb, 0xf7, 0x1ed, 0xf8, 0x1ef, 0xf9, 0x1f1, 0xfa, 0x1f3, 
-       0xfb, 0x1f5, 0xfc, 0x1f7, 0xfd, 0x1f9, 0xfe, 0x1fb, 0xff, 0x1fd, 
-       0x100, 0x1ff, 0x101, 0x201, 0x102, 0x203, 0x103, 0x205, 0x104, 0x207, 
-       0x105, 0x209, 0x106, 0x20b, 0x107, 0x20d, 0x108, 0x20f, 0x109, 0x211, 
-       0x10a, 0x213, 0x10b, 0x215, 0x10c, 0x217, 0x10d, 0x219, 0x10e, 0x21b, 
-       0x10f, 0x21d, 0x110, 0x21f, 0x111, 0x221, 0x112, 0x223, 0x113, 0x225, 
-       0x114, 0x227, 0x115, 0x229, 0x116, 0x22b, 0x117, 0x22d, 0x118, 0x22f, 
-       0x119, 0x231, 0x11a, 0x233, 0x11b, 0x235, 0x11c, 0x237, 0x11d, 0x239, 
-       0x11e, 0x23b, 0x11f, 0x23d, 0x120, 0x23f, 0x121, 0x241, 0x122, 0x243, 
-       0x123, 0x245, 0x124, 0x247, 0x125, 0x249, 0x126, 0x24b, 0x127, 0x24d, 
-       0x128, 0x24f, 0x129, 0x251, 0x12a, 0x253, 0x12b, 0x255, 0x12c, 0x257, 
-       0x12d, 0x259, 0x12e, 0x25b, 0x12f, 0x25d, 0x130, 0x25f, 0x131, 0x261, 
-       0x132, 0x263, 0x133, 0x265, 0x134, 0x267, 0x135, 0x269, 0x136, 0x26b, 
-       0x137, 0x26d, 0x138, 0x26f, 0x139, 0x271, 0x13a, 0x273, 0x13b, 0x275, 
-       0x13c, 0x277, 0x13d, 0x279, 0x13e, 0x27b, 0x13f, 0x27d, 0x140, 0x27f, 
-       0x141, 0x281, 0x142, 0x283, 0x143, 0x285, 0x144, 0x287, 0x145, 0x289, 
-       0x146, 0x28b, 0x147, 0x28d, 0x148, 0x28f, 0x149, 0x291, 0x14a, 0x293, 
-       0x14b, 0x295, 0x14c, 0x297, 0x14d, 0x299, 0x14e, 0x29b, 0x14f, 0x29d, 
-       0x150, 0x29f, 0x151, 0x2a1, 0x152, 0x2a3, 0x153, 0x2a5, 0x154, 0x2a7, 
-       0x155, 0x2a9, 0x156, 0x2ab, 0x157, 0x2ad, 0x158, 0x2af, 0x159, 0x2b1, 
-       0x15a, 0x2b3, 0x15b, 0x2b5, 0x15c, 0x2b7, 0x15d, 0x2b9, 0x15e, 0x2bb, 
-       0x15f, 0x2bd, 0x160, 0x2bf, 0x161, 0x2c1, 0x162, 0x2c3, 0x163, 0x2c5, 
-       0x164, 0x2c7, 0x165, 0x2c9, 0x166, 0x2cb, 0x167, 0x2cd, 0x168, 0x2cf, 
-       0x169, 0x2d1, 0x16a, 0x2d3, 0x16b, 0x2d5, 0x2, 0x2d7, 0x2, 0x2d9, 
-       0x2, 0x2db, 0x2, 0x2dd, 0x2, 0x2df, 0x2, 0x2e1, 0x2, 0x2e3, 0x2, 
-       0x2e5, 0x2, 0x2e7, 0x2, 0x2e9, 0x2, 0x2eb, 0x16c, 0x2ed, 0x2, 0x2ef, 
-       0x16d, 0x2f1, 0x2, 0x2f3, 0x2, 0x2f5, 0x16e, 0x2f7, 0x2, 0x2f9, 0x2, 
-       0x2fb, 0x16f, 0x2fd, 0x170, 0x2ff, 0x171, 0x301, 0x172, 0x303, 0x173, 
-       0x305, 0x174, 0x3, 0x2, 0xd, 0x5, 0x2, 0x43, 0x5c, 0x61, 0x61, 0x63, 
-       0x7c, 0x3, 0x2, 0x32, 0x3b, 0x5, 0x2, 0x32, 0x3b, 0x43, 0x48, 0x63, 
-       0x68, 0x4, 0x2, 0x2d, 0x2d, 0x2f, 0x2f, 0x4, 0x2, 0x57, 0x57, 0x77, 
-       0x77, 0x4, 0x2, 0x4e, 0x4e, 0x6e, 0x6e, 0x8, 0x2, 0x48, 0x48, 0x4a, 
-       0x4a, 0x4e, 0x4e, 0x68, 0x68, 0x6a, 0x6a, 0x6e, 0x6e, 0xc, 0x2, 0x24, 
-       0x24, 0x29, 0x29, 0x41, 0x41, 0x5e, 0x5e, 0x63, 0x64, 0x68, 0x68, 
-       0x70, 0x70, 0x74, 0x74, 0x76, 0x76, 0x78, 0x78, 0x6, 0x2, 0xc, 0xc, 
-       0xf, 0xf, 0x24, 0x24, 0x5e, 0x5e, 0x4, 0x2, 0xc, 0xc, 0xf, 0xf, 0x4, 
-       0x2, 0xb, 0xb, 0x22, 0x22, 0x2, 0x1252, 0x2, 0x3, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x5, 0x3, 0x2, 0x2, 0x2, 0x2, 0x7, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x9, 0x3, 0x2, 0x2, 0x2, 0x2, 0xb, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0xd, 0x3, 0x2, 0x2, 0x2, 0x2, 0xf, 0x3, 0x2, 0x2, 0x2, 0x2, 0x11, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x13, 0x3, 0x2, 0x2, 0x2, 0x2, 0x15, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x17, 0x3, 0x2, 0x2, 0x2, 0x2, 0x19, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x1b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1d, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x1f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x21, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x23, 0x3, 0x2, 0x2, 0x2, 0x2, 0x25, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x27, 0x3, 0x2, 0x2, 0x2, 0x2, 0x29, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2b, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x2d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2f, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x31, 0x3, 0x2, 0x2, 0x2, 0x2, 0x33, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x35, 0x3, 0x2, 0x2, 0x2, 0x2, 0x37, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x39, 0x3, 0x2, 0x2, 0x2, 0x2, 0x3b, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x3d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x3f, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x41, 0x3, 0x2, 0x2, 0x2, 0x2, 0x43, 0x3, 0x2, 0x2, 0x2, 0x2, 0x45, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x47, 0x3, 0x2, 0x2, 0x2, 0x2, 0x49, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x4b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x4d, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x4f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x51, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x53, 0x3, 0x2, 0x2, 0x2, 0x2, 0x55, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x57, 0x3, 0x2, 0x2, 0x2, 0x2, 0x59, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x5b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x5d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x5f, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x61, 0x3, 0x2, 0x2, 0x2, 0x2, 0x63, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x65, 0x3, 0x2, 0x2, 0x2, 0x2, 0x67, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x69, 0x3, 0x2, 0x2, 0x2, 0x2, 0x6b, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x6d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x6f, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x71, 0x3, 0x2, 0x2, 0x2, 0x2, 0x73, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x75, 0x3, 0x2, 0x2, 0x2, 0x2, 0x77, 0x3, 0x2, 0x2, 0x2, 0x2, 0x79, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x7b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x7d, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x7f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x81, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x83, 0x3, 0x2, 0x2, 0x2, 0x2, 0x85, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x87, 0x3, 0x2, 0x2, 0x2, 0x2, 0x89, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x8b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x8d, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x8f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x91, 0x3, 0x2, 0x2, 0x2, 0x2, 0x93, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x95, 0x3, 0x2, 0x2, 0x2, 0x2, 0x97, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x99, 0x3, 0x2, 0x2, 0x2, 0x2, 0x9b, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x9d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x9f, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0xa1, 0x3, 0x2, 0x2, 0x2, 0x2, 0xa3, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0xa5, 0x3, 0x2, 0x2, 0x2, 0x2, 0xa7, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0xa9, 0x3, 0x2, 0x2, 0x2, 0x2, 0xab, 0x3, 0x2, 0x2, 0x2, 0x2, 0xad, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0xaf, 0x3, 0x2, 0x2, 0x2, 0x2, 0xb1, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0xb3, 0x3, 0x2, 0x2, 0x2, 0x2, 0xb5, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0xb7, 0x3, 0x2, 0x2, 0x2, 0x2, 0xb9, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0xbb, 0x3, 0x2, 0x2, 0x2, 0x2, 0xbd, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0xbf, 0x3, 0x2, 0x2, 0x2, 0x2, 0xc1, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0xc3, 0x3, 0x2, 0x2, 0x2, 0x2, 0xc5, 0x3, 0x2, 0x2, 0x2, 0x2, 0xc7, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0xc9, 0x3, 0x2, 0x2, 0x2, 0x2, 0xcb, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0xcd, 0x3, 0x2, 0x2, 0x2, 0x2, 0xcf, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0xd1, 0x3, 0x2, 0x2, 0x2, 0x2, 0xd3, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0xd5, 0x3, 0x2, 0x2, 0x2, 0x2, 0xd7, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0xd9, 0x3, 0x2, 0x2, 0x2, 0x2, 0xdb, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0xdd, 0x3, 0x2, 0x2, 0x2, 0x2, 0xdf, 0x3, 0x2, 0x2, 0x2, 0x2, 0xe1, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0xe3, 0x3, 0x2, 0x2, 0x2, 0x2, 0xe5, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0xe7, 0x3, 0x2, 0x2, 0x2, 0x2, 0xe9, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0xeb, 0x3, 0x2, 0x2, 0x2, 0x2, 0xed, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0xef, 0x3, 0x2, 0x2, 0x2, 0x2, 0xf1, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0xf3, 0x3, 0x2, 0x2, 0x2, 0x2, 0xf5, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0xf7, 0x3, 0x2, 0x2, 0x2, 0x2, 0xf9, 0x3, 0x2, 0x2, 0x2, 0x2, 0xfb, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0xfd, 0x3, 0x2, 0x2, 0x2, 0x2, 0xff, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x101, 0x3, 0x2, 0x2, 0x2, 0x2, 0x103, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x105, 0x3, 0x2, 0x2, 0x2, 0x2, 0x107, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x109, 0x3, 0x2, 0x2, 0x2, 0x2, 0x10b, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x10d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x10f, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x111, 0x3, 0x2, 0x2, 0x2, 0x2, 0x113, 0x3, 0x2, 0x2, 0x2, 0x2, 0x115, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x117, 0x3, 0x2, 0x2, 0x2, 0x2, 0x119, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x11b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x11d, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x11f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x121, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x123, 0x3, 0x2, 0x2, 0x2, 0x2, 0x125, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x127, 0x3, 0x2, 0x2, 0x2, 0x2, 0x129, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x12b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x12d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x12f, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x131, 0x3, 0x2, 0x2, 0x2, 0x2, 0x133, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x135, 0x3, 0x2, 0x2, 0x2, 0x2, 0x137, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x139, 0x3, 0x2, 0x2, 0x2, 0x2, 0x13b, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x13d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x13f, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x141, 0x3, 0x2, 0x2, 0x2, 0x2, 0x143, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x145, 0x3, 0x2, 0x2, 0x2, 0x2, 0x147, 0x3, 0x2, 0x2, 0x2, 0x2, 0x149, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x14b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x14d, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x14f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x151, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x153, 0x3, 0x2, 0x2, 0x2, 0x2, 0x155, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x157, 0x3, 0x2, 0x2, 0x2, 0x2, 0x159, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x15b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x15d, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x15f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x161, 0x3, 0x2, 0x2, 0x2, 0x2, 0x163, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x165, 0x3, 0x2, 0x2, 0x2, 0x2, 0x167, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x169, 0x3, 0x2, 0x2, 0x2, 0x2, 0x16b, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x16d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x16f, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x171, 0x3, 0x2, 0x2, 0x2, 0x2, 0x173, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x175, 0x3, 0x2, 0x2, 0x2, 0x2, 0x177, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x179, 0x3, 0x2, 0x2, 0x2, 0x2, 0x17b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x17d, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x17f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x181, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x183, 0x3, 0x2, 0x2, 0x2, 0x2, 0x185, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x187, 0x3, 0x2, 0x2, 0x2, 0x2, 0x189, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x18b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x18d, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x18f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x191, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x193, 0x3, 0x2, 0x2, 0x2, 0x2, 0x195, 0x3, 0x2, 0x2, 0x2, 0x2, 0x197, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x199, 0x3, 0x2, 0x2, 0x2, 0x2, 0x19b, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x19d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x19f, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x1a1, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1a3, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x1a5, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1a7, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x1a9, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1ab, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x1ad, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1af, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1b1, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x1b3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1b5, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x1b7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1b9, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x1bb, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1bd, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x1bf, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1c1, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x1c3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1c5, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x1c7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1c9, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1cb, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x1cd, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1cf, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x1d1, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1d3, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x1d5, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1d7, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x1d9, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1db, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x1dd, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1df, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x1e1, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1e3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1e5, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x1e7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1e9, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x1eb, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1ed, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x1ef, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1f1, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x1f3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1f5, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x1f7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1f9, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x1fb, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1fd, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1ff, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x201, 0x3, 0x2, 0x2, 0x2, 0x2, 0x203, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x205, 0x3, 0x2, 0x2, 0x2, 0x2, 0x207, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x209, 0x3, 0x2, 0x2, 0x2, 0x2, 0x20b, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x20d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x20f, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x211, 0x3, 0x2, 0x2, 0x2, 0x2, 0x213, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x215, 0x3, 0x2, 0x2, 0x2, 0x2, 0x217, 0x3, 0x2, 0x2, 0x2, 0x2, 0x219, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x21b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x21d, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x21f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x221, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x223, 0x3, 0x2, 0x2, 0x2, 0x2, 0x225, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x227, 0x3, 0x2, 0x2, 0x2, 0x2, 0x229, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x22b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x22d, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x22f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x231, 0x3, 0x2, 0x2, 0x2, 0x2, 0x233, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x235, 0x3, 0x2, 0x2, 0x2, 0x2, 0x237, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x239, 0x3, 0x2, 0x2, 0x2, 0x2, 0x23b, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x23d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x23f, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x241, 0x3, 0x2, 0x2, 0x2, 0x2, 0x243, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x245, 0x3, 0x2, 0x2, 0x2, 0x2, 0x247, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x249, 0x3, 0x2, 0x2, 0x2, 0x2, 0x24b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x24d, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x24f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x251, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x253, 0x3, 0x2, 0x2, 0x2, 0x2, 0x255, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x257, 0x3, 0x2, 0x2, 0x2, 0x2, 0x259, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x25b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x25d, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x25f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x261, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x263, 0x3, 0x2, 0x2, 0x2, 0x2, 0x265, 0x3, 0x2, 0x2, 0x2, 0x2, 0x267, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x269, 0x3, 0x2, 0x2, 0x2, 0x2, 0x26b, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x26d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x26f, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x271, 0x3, 0x2, 0x2, 0x2, 0x2, 0x273, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x275, 0x3, 0x2, 0x2, 0x2, 0x2, 0x277, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x279, 0x3, 0x2, 0x2, 0x2, 0x2, 0x27b, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x27d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x27f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x281, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x283, 0x3, 0x2, 0x2, 0x2, 0x2, 0x285, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x287, 0x3, 0x2, 0x2, 0x2, 0x2, 0x289, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x28b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x28d, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x28f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x291, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x293, 0x3, 0x2, 0x2, 0x2, 0x2, 0x295, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x297, 0x3, 0x2, 0x2, 0x2, 0x2, 0x299, 0x3, 0x2, 0x2, 0x2, 0x2, 0x29b, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x29d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x29f, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x2a1, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2a3, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x2a5, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2a7, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x2a9, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2ab, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x2ad, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2af, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x2b1, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2b3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2b5, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x2b7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2b9, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x2bb, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2bd, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x2bf, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2c1, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x2c3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2c5, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x2c7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2c9, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x2cb, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2cd, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2cf, 
-       0x3, 0x2, 0x2, 0x2, 0x2, 0x2d1, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2d3, 0x3, 
-       0x2, 0x2, 0x2, 0x2, 0x2eb, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2ef, 0x3, 0x2, 
-       0x2, 0x2, 0x2, 0x2f5, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2fb, 0x3, 0x2, 0x2, 
-       0x2, 0x2, 0x2fd, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2ff, 0x3, 0x2, 0x2, 0x2, 
-       0x2, 0x301, 0x3, 0x2, 0x2, 0x2, 0x2, 0x303, 0x3, 0x2, 0x2, 0x2, 0x2, 
-       0x305, 0x3, 0x2, 0x2, 0x2, 0x3, 0x307, 0x3, 0x2, 0x2, 0x2, 0x5, 0x31e, 
-       0x3, 0x2, 0x2, 0x2, 0x7, 0x323, 0x3, 0x2, 0x2, 0x2, 0x9, 0x329, 0x3, 
-       0x2, 0x2, 0x2, 0xb, 0x32f, 0x3, 0x2, 0x2, 0x2, 0xd, 0x335, 0x3, 0x2, 
-       0x2, 0x2, 0xf, 0x33b, 0x3, 0x2, 0x2, 0x2, 0x11, 0x343, 0x3, 0x2, 
-       0x2, 0x2, 0x13, 0x34b, 0x3, 0x2, 0x2, 0x2, 0x15, 0x353, 0x3, 0x2, 
-       0x2, 0x2, 0x17, 0x35b, 0x3, 0x2, 0x2, 0x2, 0x19, 0x363, 0x3, 0x2, 
-       0x2, 0x2, 0x1b, 0x36b, 0x3, 0x2, 0x2, 0x2, 0x1d, 0x373, 0x3, 0x2, 
-       0x2, 0x2, 0x1f, 0x37b, 0x3, 0x2, 0x2, 0x2, 0x21, 0x383, 0x3, 0x2, 
-       0x2, 0x2, 0x23, 0x38b, 0x3, 0x2, 0x2, 0x2, 0x25, 0x393, 0x3, 0x2, 
-       0x2, 0x2, 0x27, 0x39b, 0x3, 0x2, 0x2, 0x2, 0x29, 0x3a3, 0x3, 0x2, 
-       0x2, 0x2, 0x2b, 0x3ab, 0x3, 0x2, 0x2, 0x2, 0x2d, 0x3b3, 0x3, 0x2, 
-       0x2, 0x2, 0x2f, 0x3bb, 0x3, 0x2, 0x2, 0x2, 0x31, 0x3c2, 0x3, 0x2, 
-       0x2, 0x2, 0x33, 0x3e8, 0x3, 0x2, 0x2, 0x2, 0x35, 0x3fa, 0x3, 0x2, 
-       0x2, 0x2, 0x37, 0x400, 0x3, 0x2, 0x2, 0x2, 0x39, 0x405, 0x3, 0x2, 
-       0x2, 0x2, 0x3b, 0x40d, 0x3, 0x2, 0x2, 0x2, 0x3d, 0x41c, 0x3, 0x2, 
-       0x2, 0x2, 0x3f, 0x42b, 0x3, 0x2, 0x2, 0x2, 0x41, 0x434, 0x3, 0x2, 
-       0x2, 0x2, 0x43, 0x43a, 0x3, 0x2, 0x2, 0x2, 0x45, 0x447, 0x3, 0x2, 
-       0x2, 0x2, 0x47, 0x44d, 0x3, 0x2, 0x2, 0x2, 0x49, 0x465, 0x3, 0x2, 
-       0x2, 0x2, 0x4b, 0x46e, 0x3, 0x2, 0x2, 0x2, 0x4d, 0x476, 0x3, 0x2, 
-       0x2, 0x2, 0x4f, 0x47e, 0x3, 0x2, 0x2, 0x2, 0x51, 0x481, 0x3, 0x2, 
-       0x2, 0x2, 0x53, 0x488, 0x3, 0x2, 0x2, 0x2, 0x55, 0x490, 0x3, 0x2, 
-       0x2, 0x2, 0x57, 0x498, 0x3, 0x2, 0x2, 0x2, 0x59, 0x4a0, 0x3, 0x2, 
-       0x2, 0x2, 0x5b, 0x4a8, 0x3, 0x2, 0x2, 0x2, 0x5d, 0x4b2, 0x3, 0x2, 
-       0x2, 0x2, 0x5f, 0x4bc, 0x3, 0x2, 0x2, 0x2, 0x61, 0x4c6, 0x3, 0x2, 
-       0x2, 0x2, 0x63, 0x4d0, 0x3, 0x2, 0x2, 0x2, 0x65, 0x4da, 0x3, 0x2, 
-       0x2, 0x2, 0x67, 0x4e4, 0x3, 0x2, 0x2, 0x2, 0x69, 0x4ee, 0x3, 0x2, 
-       0x2, 0x2, 0x6b, 0x4f8, 0x3, 0x2, 0x2, 0x2, 0x6d, 0x502, 0x3, 0x2, 
-       0x2, 0x2, 0x6f, 0x50c, 0x3, 0x2, 0x2, 0x2, 0x71, 0x516, 0x3, 0x2, 
-       0x2, 0x2, 0x73, 0x520, 0x3, 0x2, 0x2, 0x2, 0x75, 0x52a, 0x3, 0x2, 
-       0x2, 0x2, 0x77, 0x534, 0x3, 0x2, 0x2, 0x2, 0x79, 0x53e, 0x3, 0x2, 
-       0x2, 0x2, 0x7b, 0x548, 0x3, 0x2, 0x2, 0x2, 0x7d, 0x54d, 0x3, 0x2, 
-       0x2, 0x2, 0x7f, 0x552, 0x3, 0x2, 0x2, 0x2, 0x81, 0x559, 0x3, 0x2, 
-       0x2, 0x2, 0x83, 0x56b, 0x3, 0x2, 0x2, 0x2, 0x85, 0x582, 0x3, 0x2, 
-       0x2, 0x2, 0x87, 0x588, 0x3, 0x2, 0x2, 0x2, 0x89, 0x58f, 0x3, 0x2, 
-       0x2, 0x2, 0x8b, 0x596, 0x3, 0x2, 0x2, 0x2, 0x8d, 0x59d, 0x3, 0x2, 
-       0x2, 0x2, 0x8f, 0x5a4, 0x3, 0x2, 0x2, 0x2, 0x91, 0x5ad, 0x3, 0x2, 
-       0x2, 0x2, 0x93, 0x5b6, 0x3, 0x2, 0x2, 0x2, 0x95, 0x5bf, 0x3, 0x2, 
-       0x2, 0x2, 0x97, 0x5c8, 0x3, 0x2, 0x2, 0x2, 0x99, 0x5d1, 0x3, 0x2, 
-       0x2, 0x2, 0x9b, 0x5da, 0x3, 0x2, 0x2, 0x2, 0x9d, 0x5e3, 0x3, 0x2, 
-       0x2, 0x2, 0x9f, 0x5ec, 0x3, 0x2, 0x2, 0x2, 0xa1, 0x5f5, 0x3, 0x2, 
-       0x2, 0x2, 0xa3, 0x5fe, 0x3, 0x2, 0x2, 0x2, 0xa5, 0x607, 0x3, 0x2, 
-       0x2, 0x2, 0xa7, 0x610, 0x3, 0x2, 0x2, 0x2, 0xa9, 0x619, 0x3, 0x2, 
-       0x2, 0x2, 0xab, 0x622, 0x3, 0x2, 0x2, 0x2, 0xad, 0x62b, 0x3, 0x2, 
-       0x2, 0x2, 0xaf, 0x634, 0x3, 0x2, 0x2, 0x2, 0xb1, 0x638, 0x3, 0x2, 
-       0x2, 0x2, 0xb3, 0x644, 0x3, 0x2, 0x2, 0x2, 0xb5, 0x64b, 0x3, 0x2, 
-       0x2, 0x2, 0xb7, 0x650, 0x3, 0x2, 0x2, 0x2, 0xb9, 0x656, 0x3, 0x2, 
-       0x2, 0x2, 0xbb, 0x65c, 0x3, 0x2, 0x2, 0x2, 0xbd, 0x662, 0x3, 0x2, 
-       0x2, 0x2, 0xbf, 0x668, 0x3, 0x2, 0x2, 0x2, 0xc1, 0x670, 0x3, 0x2, 
-       0x2, 0x2, 0xc3, 0x678, 0x3, 0x2, 0x2, 0x2, 0xc5, 0x680, 0x3, 0x2, 
-       0x2, 0x2, 0xc7, 0x688, 0x3, 0x2, 0x2, 0x2, 0xc9, 0x690, 0x3, 0x2, 
-       0x2, 0x2, 0xcb, 0x698, 0x3, 0x2, 0x2, 0x2, 0xcd, 0x6a0, 0x3, 0x2, 
-       0x2, 0x2, 0xcf, 0x6a8, 0x3, 0x2, 0x2, 0x2, 0xd1, 0x6b0, 0x3, 0x2, 
-       0x2, 0x2, 0xd3, 0x6b8, 0x3, 0x2, 0x2, 0x2, 0xd5, 0x6c0, 0x3, 0x2, 
-       0x2, 0x2, 0xd7, 0x6c8, 0x3, 0x2, 0x2, 0x2, 0xd9, 0x6d0, 0x3, 0x2, 
-       0x2, 0x2, 0xdb, 0x6d8, 0x3, 0x2, 0x2, 0x2, 0xdd, 0x6e0, 0x3, 0x2, 
-       0x2, 0x2, 0xdf, 0x6e8, 0x3, 0x2, 0x2, 0x2, 0xe1, 0x6eb, 0x3, 0x2, 
-       0x2, 0x2, 0xe3, 0x6ee, 0x3, 0x2, 0x2, 0x2, 0xe5, 0x6f5, 0x3, 0x2, 
-       0x2, 0x2, 0xe7, 0x70d, 0x3, 0x2, 0x2, 0x2, 0xe9, 0x70f, 0x3, 0x2, 
-       0x2, 0x2, 0xeb, 0x71a, 0x3, 0x2, 0x2, 0x2, 0xed, 0x71e, 0x3, 0x2, 
-       0x2, 0x2, 0xef, 0x726, 0x3, 0x2, 0x2, 0x2, 0xf1, 0x72e, 0x3, 0x2, 
-       0x2, 0x2, 0xf3, 0x733, 0x3, 0x2, 0x2, 0x2, 0xf5, 0x738, 0x3, 0x2, 
-       0x2, 0x2, 0xf7, 0x73d, 0x3, 0x2, 0x2, 0x2, 0xf9, 0x742, 0x3, 0x2, 
-       0x2, 0x2, 0xfb, 0x749, 0x3, 0x2, 0x2, 0x2, 0xfd, 0x750, 0x3, 0x2, 
-       0x2, 0x2, 0xff, 0x757, 0x3, 0x2, 0x2, 0x2, 0x101, 0x75e, 0x3, 0x2, 
-       0x2, 0x2, 0x103, 0x765, 0x3, 0x2, 0x2, 0x2, 0x105, 0x76c, 0x3, 0x2, 
-       0x2, 0x2, 0x107, 0x773, 0x3, 0x2, 0x2, 0x2, 0x109, 0x77a, 0x3, 0x2, 
-       0x2, 0x2, 0x10b, 0x781, 0x3, 0x2, 0x2, 0x2, 0x10d, 0x788, 0x3, 0x2, 
-       0x2, 0x2, 0x10f, 0x78f, 0x3, 0x2, 0x2, 0x2, 0x111, 0x796, 0x3, 0x2, 
-       0x2, 0x2, 0x113, 0x79d, 0x3, 0x2, 0x2, 0x2, 0x115, 0x7a4, 0x3, 0x2, 
-       0x2, 0x2, 0x117, 0x7ab, 0x3, 0x2, 0x2, 0x2, 0x119, 0x7b2, 0x3, 0x2, 
-       0x2, 0x2, 0x11b, 0x7bc, 0x3, 0x2, 0x2, 0x2, 0x11d, 0x7c1, 0x3, 0x2, 
-       0x2, 0x2, 0x11f, 0x7c9, 0x3, 0x2, 0x2, 0x2, 0x121, 0x7d0, 0x3, 0x2, 
-       0x2, 0x2, 0x123, 0x7db, 0x3, 0x2, 0x2, 0x2, 0x125, 0x7e0, 0x3, 0x2, 
-       0x2, 0x2, 0x127, 0x7e7, 0x3, 0x2, 0x2, 0x2, 0x129, 0x7f7, 0x3, 0x2, 
-       0x2, 0x2, 0x12b, 0x805, 0x3, 0x2, 0x2, 0x2, 0x12d, 0x80c, 0x3, 0x2, 
-       0x2, 0x2, 0x12f, 0x810, 0x3, 0x2, 0x2, 0x2, 0x131, 0x81c, 0x3, 0x2, 
-       0x2, 0x2, 0x133, 0x825, 0x3, 0x2, 0x2, 0x2, 0x135, 0x82d, 0x3, 0x2, 
-       0x2, 0x2, 0x137, 0x838, 0x3, 0x2, 0x2, 0x2, 0x139, 0x83e, 0x3, 0x2, 
-       0x2, 0x2, 0x13b, 0x84a, 0x3, 0x2, 0x2, 0x2, 0x13d, 0x852, 0x3, 0x2, 
-       0x2, 0x2, 0x13f, 0x86a, 0x3, 0x2, 0x2, 0x2, 0x141, 0x88d, 0x3, 0x2, 
-       0x2, 0x2, 0x143, 0x8af, 0x3, 0x2, 0x2, 0x2, 0x145, 0x8ca, 0x3, 0x2, 
-       0x2, 0x2, 0x147, 0x8ea, 0x3, 0x2, 0x2, 0x2, 0x149, 0x905, 0x3, 0x2, 
-       0x2, 0x2, 0x14b, 0x925, 0x3, 0x2, 0x2, 0x2, 0x14d, 0x940, 0x3, 0x2, 
-       0x2, 0x2, 0x14f, 0x948, 0x3, 0x2, 0x2, 0x2, 0x151, 0x968, 0x3, 0x2, 
-       0x2, 0x2, 0x153, 0x971, 0x3, 0x2, 0x2, 0x2, 0x155, 0x978, 0x3, 0x2, 
-       0x2, 0x2, 0x157, 0x982, 0x3, 0x2, 0x2, 0x2, 0x159, 0x98b, 0x3, 0x2, 
-       0x2, 0x2, 0x15b, 0x99f, 0x3, 0x2, 0x2, 0x2, 0x15d, 0x9b2, 0x3, 0x2, 
-       0x2, 0x2, 0x15f, 0x9be, 0x3, 0x2, 0x2, 0x2, 0x161, 0x9cf, 0x3, 0x2, 
-       0x2, 0x2, 0x163, 0x9db, 0x3, 0x2, 0x2, 0x2, 0x165, 0x9ec, 0x3, 0x2, 
-       0x2, 0x2, 0x167, 0x9f8, 0x3, 0x2, 0x2, 0x2, 0x169, 0x9ff, 0x3, 0x2, 
-       0x2, 0x2, 0x16b, 0xa07, 0x3, 0x2, 0x2, 0x2, 0x16d, 0xa0f, 0x3, 0x2, 
-       0x2, 0x2, 0x16f, 0xa26, 0x3, 0x2, 0x2, 0x2, 0x171, 0xa33, 0x3, 0x2, 
-       0x2, 0x2, 0x173, 0xa3a, 0x3, 0x2, 0x2, 0x2, 0x175, 0xa41, 0x3, 0x2, 
-       0x2, 0x2, 0x177, 0xa48, 0x3, 0x2, 0x2, 0x2, 0x179, 0xa59, 0x3, 0x2, 
-       0x2, 0x2, 0x17b, 0xa66, 0x3, 0x2, 0x2, 0x2, 0x17d, 0xa75, 0x3, 0x2, 
-       0x2, 0x2, 0x17f, 0xa7c, 0x3, 0x2, 0x2, 0x2, 0x181, 0xa86, 0x3, 0x2, 
-       0x2, 0x2, 0x183, 0xa95, 0x3, 0x2, 0x2, 0x2, 0x185, 0xa9f, 0x3, 0x2, 
-       0x2, 0x2, 0x187, 0xaae, 0x3, 0x2, 0x2, 0x2, 0x189, 0xaba, 0x3, 0x2, 
-       0x2, 0x2, 0x18b, 0xacb, 0x3, 0x2, 0x2, 0x2, 0x18d, 0xad5, 0x3, 0x2, 
-       0x2, 0x2, 0x18f, 0xae1, 0x3, 0x2, 0x2, 0x2, 0x191, 0xaf2, 0x3, 0x2, 
-       0x2, 0x2, 0x193, 0xafb, 0x3, 0x2, 0x2, 0x2, 0x195, 0xb07, 0x3, 0x2, 
-       0x2, 0x2, 0x197, 0xb16, 0x3, 0x2, 0x2, 0x2, 0x199, 0xb1e, 0x3, 0x2, 
-       0x2, 0x2, 0x19b, 0xb23, 0x3, 0x2, 0x2, 0x2, 0x19d, 0xb2c, 0x3, 0x2, 
-       0x2, 0x2, 0x19f, 0xb35, 0x3, 0x2, 0x2, 0x2, 0x1a1, 0xb42, 0x3, 0x2, 
-       0x2, 0x2, 0x1a3, 0xb48, 0x3, 0x2, 0x2, 0x2, 0x1a5, 0xb4e, 0x3, 0x2, 
-       0x2, 0x2, 0x1a7, 0xb54, 0x3, 0x2, 0x2, 0x2, 0x1a9, 0xb5a, 0x3, 0x2, 
-       0x2, 0x2, 0x1ab, 0xb62, 0x3, 0x2, 0x2, 0x2, 0x1ad, 0xb6a, 0x3, 0x2, 
-       0x2, 0x2, 0x1af, 0xb72, 0x3, 0x2, 0x2, 0x2, 0x1b1, 0xb7a, 0x3, 0x2, 
-       0x2, 0x2, 0x1b3, 0xb82, 0x3, 0x2, 0x2, 0x2, 0x1b5, 0xb8a, 0x3, 0x2, 
-       0x2, 0x2, 0x1b7, 0xb92, 0x3, 0x2, 0x2, 0x2, 0x1b9, 0xb9a, 0x3, 0x2, 
-       0x2, 0x2, 0x1bb, 0xba2, 0x3, 0x2, 0x2, 0x2, 0x1bd, 0xbaa, 0x3, 0x2, 
-       0x2, 0x2, 0x1bf, 0xbb2, 0x3, 0x2, 0x2, 0x2, 0x1c1, 0xbba, 0x3, 0x2, 
-       0x2, 0x2, 0x1c3, 0xbc2, 0x3, 0x2, 0x2, 0x2, 0x1c5, 0xbca, 0x3, 0x2, 
-       0x2, 0x2, 0x1c7, 0xbd2, 0x3, 0x2, 0x2, 0x2, 0x1c9, 0xbda, 0x3, 0x2, 
-       0x2, 0x2, 0x1cb, 0xbe0, 0x3, 0x2, 0x2, 0x2, 0x1cd, 0xbe7, 0x3, 0x2, 
-       0x2, 0x2, 0x1cf, 0xbee, 0x3, 0x2, 0x2, 0x2, 0x1d1, 0xbf5, 0x3, 0x2, 
-       0x2, 0x2, 0x1d3, 0xbfc, 0x3, 0x2, 0x2, 0x2, 0x1d5, 0xc05, 0x3, 0x2, 
-       0x2, 0x2, 0x1d7, 0xc0e, 0x3, 0x2, 0x2, 0x2, 0x1d9, 0xc17, 0x3, 0x2, 
-       0x2, 0x2, 0x1db, 0xc20, 0x3, 0x2, 0x2, 0x2, 0x1dd, 0xc29, 0x3, 0x2, 
-       0x2, 0x2, 0x1df, 0xc32, 0x3, 0x2, 0x2, 0x2, 0x1e1, 0xc3b, 0x3, 0x2, 
-       0x2, 0x2, 0x1e3, 0xc44, 0x3, 0x2, 0x2, 0x2, 0x1e5, 0xc4d, 0x3, 0x2, 
-       0x2, 0x2, 0x1e7, 0xc56, 0x3, 0x2, 0x2, 0x2, 0x1e9, 0xc5f, 0x3, 0x2, 
-       0x2, 0x2, 0x1eb, 0xc68, 0x3, 0x2, 0x2, 0x2, 0x1ed, 0xc71, 0x3, 0x2, 
-       0x2, 0x2, 0x1ef, 0xc7a, 0x3, 0x2, 0x2, 0x2, 0x1f1, 0xc83, 0x3, 0x2, 
-       0x2, 0x2, 0x1f3, 0xc8c, 0x3, 0x2, 0x2, 0x2, 0x1f5, 0xc93, 0x3, 0x2, 
-       0x2, 0x2, 0x1f7, 0xc9c, 0x3, 0x2, 0x2, 0x2, 0x1f9, 0xca1, 0x3, 0x2, 
-       0x2, 0x2, 0x1fb, 0xca7, 0x3, 0x2, 0x2, 0x2, 0x1fd, 0xcb9, 0x3, 0x2, 
-       0x2, 0x2, 0x1ff, 0xccc, 0x3, 0x2, 0x2, 0x2, 0x201, 0xce0, 0x3, 0x2, 
-       0x2, 0x2, 0x203, 0xcfe, 0x3, 0x2, 0x2, 0x2, 0x205, 0xd15, 0x3, 0x2, 
-       0x2, 0x2, 0x207, 0xd2e, 0x3, 0x2, 0x2, 0x2, 0x209, 0xd48, 0x3, 0x2, 
-       0x2, 0x2, 0x20b, 0xd59, 0x3, 0x2, 0x2, 0x2, 0x20d, 0xd75, 0x3, 0x2, 
-       0x2, 0x2, 0x20f, 0xd7e, 0x3, 0x2, 0x2, 0x2, 0x211, 0xd87, 0x3, 0x2, 
-       0x2, 0x2, 0x213, 0xd90, 0x3, 0x2, 0x2, 0x2, 0x215, 0xd9c, 0x3, 0x2, 
-       0x2, 0x2, 0x217, 0xda6, 0x3, 0x2, 0x2, 0x2, 0x219, 0xdb0, 0x3, 0x2, 
-       0x2, 0x2, 0x21b, 0xdba, 0x3, 0x2, 0x2, 0x2, 0x21d, 0xdc8, 0x3, 0x2, 
-       0x2, 0x2, 0x21f, 0xdcf, 0x3, 0x2, 0x2, 0x2, 0x221, 0xdd6, 0x3, 0x2, 
-       0x2, 0x2, 0x223, 0xde1, 0x3, 0x2, 0x2, 0x2, 0x225, 0xdf0, 0x3, 0x2, 
-       0x2, 0x2, 0x227, 0xdfe, 0x3, 0x2, 0x2, 0x2, 0x229, 0xe04, 0x3, 0x2, 
-       0x2, 0x2, 0x22b, 0xe0b, 0x3, 0x2, 0x2, 0x2, 0x22d, 0xe12, 0x3, 0x2, 
-       0x2, 0x2, 0x22f, 0xe1d, 0x3, 0x2, 0x2, 0x2, 0x231, 0xe25, 0x3, 0x2, 
-       0x2, 0x2, 0x233, 0xe2d, 0x3, 0x2, 0x2, 0x2, 0x235, 0xe32, 0x3, 0x2, 
-       0x2, 0x2, 0x237, 0xe39, 0x3, 0x2, 0x2, 0x2, 0x239, 0xe3f, 0x3, 0x2, 
-       0x2, 0x2, 0x23b, 0xe46, 0x3, 0x2, 0x2, 0x2, 0x23d, 0xe51, 0x3, 0x2, 
-       0x2, 0x2, 0x23f, 0xe57, 0x3, 0x2, 0x2, 0x2, 0x241, 0xe5c, 0x3, 0x2, 
-       0x2, 0x2, 0x243, 0xe62, 0x3, 0x2, 0x2, 0x2, 0x245, 0xe6c, 0x3, 0x2, 
-       0x2, 0x2, 0x247, 0xe74, 0x3, 0x2, 0x2, 0x2, 0x249, 0xe7d, 0x3, 0x2, 
-       0x2, 0x2, 0x24b, 0xe8a, 0x3, 0x2, 0x2, 0x2, 0x24d, 0xe91, 0x3, 0x2, 
-       0x2, 0x2, 0x24f, 0xe9d, 0x3, 0x2, 0x2, 0x2, 0x251, 0xeae, 0x3, 0x2, 
-       0x2, 0x2, 0x253, 0xeba, 0x3, 0x2, 0x2, 0x2, 0x255, 0xebc, 0x3, 0x2, 
-       0x2, 0x2, 0x257, 0xebe, 0x3, 0x2, 0x2, 0x2, 0x259, 0xec0, 0x3, 0x2, 
-       0x2, 0x2, 0x25b, 0xec2, 0x3, 0x2, 0x2, 0x2, 0x25d, 0xec4, 0x3, 0x2, 
-       0x2, 0x2, 0x25f, 0xec6, 0x3, 0x2, 0x2, 0x2, 0x261, 0xec9, 0x3, 0x2, 
-       0x2, 0x2, 0x263, 0xecb, 0x3, 0x2, 0x2, 0x2, 0x265, 0xece, 0x3, 0x2, 
-       0x2, 0x2, 0x267, 0xed0, 0x3, 0x2, 0x2, 0x2, 0x269, 0xed3, 0x3, 0x2, 
-       0x2, 0x2, 0x26b, 0xed6, 0x3, 0x2, 0x2, 0x2, 0x26d, 0xed9, 0x3, 0x2, 
-       0x2, 0x2, 0x26f, 0xedb, 0x3, 0x2, 0x2, 0x2, 0x271, 0xede, 0x3, 0x2, 
-       0x2, 0x2, 0x273, 0xee0, 0x3, 0x2, 0x2, 0x2, 0x275, 0xee3, 0x3, 0x2, 
-       0x2, 0x2, 0x277, 0xee5, 0x3, 0x2, 0x2, 0x2, 0x279, 0xee7, 0x3, 0x2, 
-       0x2, 0x2, 0x27b, 0xee9, 0x3, 0x2, 0x2, 0x2, 0x27d, 0xeeb, 0x3, 0x2, 
-       0x2, 0x2, 0x27f, 0xeed, 0x3, 0x2, 0x2, 0x2, 0x281, 0xef0, 0x3, 0x2, 
-       0x2, 0x2, 0x283, 0xef3, 0x3, 0x2, 0x2, 0x2, 0x285, 0xef5, 0x3, 0x2, 
-       0x2, 0x2, 0x287, 0xef7, 0x3, 0x2, 0x2, 0x2, 0x289, 0xef9, 0x3, 0x2, 
-       0x2, 0x2, 0x28b, 0xefb, 0x3, 0x2, 0x2, 0x2, 0x28d, 0xefd, 0x3, 0x2, 
-       0x2, 0x2, 0x28f, 0xf00, 0x3, 0x2, 0x2, 0x2, 0x291, 0xf02, 0x3, 0x2, 
-       0x2, 0x2, 0x293, 0xf04, 0x3, 0x2, 0x2, 0x2, 0x295, 0xf06, 0x3, 0x2, 
-       0x2, 0x2, 0x297, 0xf09, 0x3, 0x2, 0x2, 0x2, 0x299, 0xf0c, 0x3, 0x2, 
-       0x2, 0x2, 0x29b, 0xf0f, 0x3, 0x2, 0x2, 0x2, 0x29d, 0xf12, 0x3, 0x2, 
-       0x2, 0x2, 0x29f, 0xf15, 0x3, 0x2, 0x2, 0x2, 0x2a1, 0xf19, 0x3, 0x2, 
-       0x2, 0x2, 0x2a3, 0xf1d, 0x3, 0x2, 0x2, 0x2, 0x2a5, 0xf20, 0x3, 0x2, 
-       0x2, 0x2, 0x2a7, 0xf23, 0x3, 0x2, 0x2, 0x2, 0x2a9, 0xf26, 0x3, 0x2, 
-       0x2, 0x2, 0x2ab, 0xf29, 0x3, 0x2, 0x2, 0x2, 0x2ad, 0xf2c, 0x3, 0x2, 
-       0x2, 0x2, 0x2af, 0xf2e, 0x3, 0x2, 0x2, 0x2, 0x2b1, 0xf33, 0x3, 0x2, 
-       0x2, 0x2, 0x2b3, 0xf39, 0x3, 0x2, 0x2, 0x2, 0x2b5, 0xf48, 0x3, 0x2, 
-       0x2, 0x2, 0x2b7, 0xf52, 0x3, 0x2, 0x2, 0x2, 0x2b9, 0xf5a, 0x3, 0x2, 
-       0x2, 0x2, 0x2bb, 0xf66, 0x3, 0x2, 0x2, 0x2, 0x2bd, 0xf6d, 0x3, 0x2, 
-       0x2, 0x2, 0x2bf, 0xf83, 0x3, 0x2, 0x2, 0x2, 0x2c1, 0xf98, 0x3, 0x2, 
-       0x2, 0x2, 0x2c3, 0xfb7, 0x3, 0x2, 0x2, 0x2, 0x2c5, 0xfd6, 0x3, 0x2, 
-       0x2, 0x2, 0x2c7, 0xff4, 0x3, 0x2, 0x2, 0x2, 0x2c9, 0x1000, 0x3, 0x2, 
-       0x2, 0x2, 0x2cb, 0x1016, 0x3, 0x2, 0x2, 0x2, 0x2cd, 0x1032, 0x3, 
-       0x2, 0x2, 0x2, 0x2cf, 0x1113, 0x3, 0x2, 0x2, 0x2, 0x2d1, 0x1141, 
-       0x3, 0x2, 0x2, 0x2, 0x2d3, 0x1143, 0x3, 0x2, 0x2, 0x2, 0x2d5, 0x114b, 
-       0x3, 0x2, 0x2, 0x2, 0x2d7, 0x114d, 0x3, 0x2, 0x2, 0x2, 0x2d9, 0x1150, 
-       0x3, 0x2, 0x2, 0x2, 0x2db, 0x1158, 0x3, 0x2, 0x2, 0x2, 0x2dd, 0x115f, 
-       0x3, 0x2, 0x2, 0x2, 0x2df, 0x1169, 0x3, 0x2, 0x2, 0x2, 0x2e1, 0x1175, 
-       0x3, 0x2, 0x2, 0x2, 0x2e3, 0x1177, 0x3, 0x2, 0x2, 0x2, 0x2e5, 0x117a, 
-       0x3, 0x2, 0x2, 0x2, 0x2e7, 0x117f, 0x3, 0x2, 0x2, 0x2, 0x2e9, 0x1192, 
-       0x3, 0x2, 0x2, 0x2, 0x2eb, 0x119c, 0x3, 0x2, 0x2, 0x2, 0x2ed, 0x119e, 
-       0x3, 0x2, 0x2, 0x2, 0x2ef, 0x11ac, 0x3, 0x2, 0x2, 0x2, 0x2f1, 0x11ae, 
-       0x3, 0x2, 0x2, 0x2, 0x2f3, 0x11b0, 0x3, 0x2, 0x2, 0x2, 0x2f5, 0x11b3, 
-       0x3, 0x2, 0x2, 0x2, 0x2f7, 0x11ba, 0x3, 0x2, 0x2, 0x2, 0x2f9, 0x11c0, 
-       0x3, 0x2, 0x2, 0x2, 0x2fb, 0x11c2, 0x3, 0x2, 0x2, 0x2, 0x2fd, 0x11d6, 
-       0x3, 0x2, 0x2, 0x2, 0x2ff, 0x11ec, 0x3, 0x2, 0x2, 0x2, 0x301, 0x11f7, 
-       0x3, 0x2, 0x2, 0x2, 0x303, 0x11fb, 0x3, 0x2, 0x2, 0x2, 0x305, 0x1209, 
-       0x3, 0x2, 0x2, 0x2, 0x307, 0x308, 0x7, 0x43, 0x2, 0x2, 0x308, 0x309, 
-       0x7, 0x72, 0x2, 0x2, 0x309, 0x30a, 0x7, 0x72, 0x2, 0x2, 0x30a, 0x30b, 
-       0x7, 0x67, 0x2, 0x2, 0x30b, 0x30c, 0x7, 0x70, 0x2, 0x2, 0x30c, 0x30d, 
-       0x7, 0x66, 0x2, 0x2, 0x30d, 0x30e, 0x7, 0x55, 0x2, 0x2, 0x30e, 0x30f, 
-       0x7, 0x76, 0x2, 0x2, 0x30f, 0x310, 0x7, 0x74, 0x2, 0x2, 0x310, 0x311, 
-       0x7, 0x77, 0x2, 0x2, 0x311, 0x312, 0x7, 0x65, 0x2, 0x2, 0x312, 0x313, 
-       0x7, 0x76, 0x2, 0x2, 0x313, 0x314, 0x7, 0x77, 0x2, 0x2, 0x314, 0x315, 
-       0x7, 0x74, 0x2, 0x2, 0x315, 0x316, 0x7, 0x67, 0x2, 0x2, 0x316, 0x317, 
-       0x7, 0x66, 0x2, 0x2, 0x317, 0x318, 0x7, 0x44, 0x2, 0x2, 0x318, 0x319, 
-       0x7, 0x77, 0x2, 0x2, 0x319, 0x31a, 0x7, 0x68, 0x2, 0x2, 0x31a, 0x31b, 
-       0x7, 0x68, 0x2, 0x2, 0x31b, 0x31c, 0x7, 0x67, 0x2, 0x2, 0x31c, 0x31d, 
-       0x7, 0x74, 0x2, 0x2, 0x31d, 0x4, 0x3, 0x2, 0x2, 0x2, 0x31e, 0x31f, 
-       0x7, 0x64, 0x2, 0x2, 0x31f, 0x320, 0x7, 0x71, 0x2, 0x2, 0x320, 0x321, 
-       0x7, 0x71, 0x2, 0x2, 0x321, 0x322, 0x7, 0x6e, 0x2, 0x2, 0x322, 0x6, 
-       0x3, 0x2, 0x2, 0x2, 0x323, 0x324, 0x7, 0x64, 0x2, 0x2, 0x324, 0x325, 
-       0x7, 0x71, 0x2, 0x2, 0x325, 0x326, 0x7, 0x71, 0x2, 0x2, 0x326, 0x327, 
-       0x7, 0x6e, 0x2, 0x2, 0x327, 0x328, 0x7, 0x33, 0x2, 0x2, 0x328, 0x8, 
-       0x3, 0x2, 0x2, 0x2, 0x329, 0x32a, 0x7, 0x64, 0x2, 0x2, 0x32a, 0x32b, 
-       0x7, 0x71, 0x2, 0x2, 0x32b, 0x32c, 0x7, 0x71, 0x2, 0x2, 0x32c, 0x32d, 
-       0x7, 0x6e, 0x2, 0x2, 0x32d, 0x32e, 0x7, 0x34, 0x2, 0x2, 0x32e, 0xa, 
-       0x3, 0x2, 0x2, 0x2, 0x32f, 0x330, 0x7, 0x64, 0x2, 0x2, 0x330, 0x331, 
-       0x7, 0x71, 0x2, 0x2, 0x331, 0x332, 0x7, 0x71, 0x2, 0x2, 0x332, 0x333, 
-       0x7, 0x6e, 0x2, 0x2, 0x333, 0x334, 0x7, 0x35, 0x2, 0x2, 0x334, 0xc, 
-       0x3, 0x2, 0x2, 0x2, 0x335, 0x336, 0x7, 0x64, 0x2, 0x2, 0x336, 0x337, 
-       0x7, 0x71, 0x2, 0x2, 0x337, 0x338, 0x7, 0x71, 0x2, 0x2, 0x338, 0x339, 
-       0x7, 0x6e, 0x2, 0x2, 0x339, 0x33a, 0x7, 0x36, 0x2, 0x2, 0x33a, 0xe, 
-       0x3, 0x2, 0x2, 0x2, 0x33b, 0x33c, 0x7, 0x64, 0x2, 0x2, 0x33c, 0x33d, 
-       0x7, 0x71, 0x2, 0x2, 0x33d, 0x33e, 0x7, 0x71, 0x2, 0x2, 0x33e, 0x33f, 
-       0x7, 0x6e, 0x2, 0x2, 0x33f, 0x340, 0x7, 0x33, 0x2, 0x2, 0x340, 0x341, 
-       0x7, 0x7a, 0x2, 0x2, 0x341, 0x342, 0x7, 0x33, 0x2, 0x2, 0x342, 0x10, 
-       0x3, 0x2, 0x2, 0x2, 0x343, 0x344, 0x7, 0x64, 0x2, 0x2, 0x344, 0x345, 
-       0x7, 0x71, 0x2, 0x2, 0x345, 0x346, 0x7, 0x71, 0x2, 0x2, 0x346, 0x347, 
-       0x7, 0x6e, 0x2, 0x2, 0x347, 0x348, 0x7, 0x33, 0x2, 0x2, 0x348, 0x349, 
-       0x7, 0x7a, 0x2, 0x2, 0x349, 0x34a, 0x7, 0x34, 0x2, 0x2, 0x34a, 0x12, 
+       0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x169, 0x3, 0x16a, 0x3, 0x16a, 
+       0x3, 0x16a, 0x3, 0x16a, 0x3, 0x16a, 0x3, 0x16a, 0x3, 0x16a, 0x3, 
+       0x16a, 0x3, 0x16a, 0x3, 0x16a, 0x3, 0x16a, 0x3, 0x16a, 0x3, 0x16a, 
+       0x3, 0x16a, 0x3, 0x16a, 0x3, 0x16a, 0x3, 0x16a, 0x3, 0x16a, 0x3, 
+       0x16a, 0x3, 0x16a, 0x3, 0x16b, 0x3, 0x16b, 0x3, 0x16b, 0x3, 0x16b, 
+       0x3, 0x16b, 0x3, 0x16b, 0x3, 0x16b, 0x3, 0x16b, 0x3, 0x16b, 0x3, 
+       0x16b, 0x3, 0x16b, 0x3, 0x16b, 0x3, 0x16b, 0x3, 0x16b, 0x3, 0x16b, 
+       0x3, 0x16b, 0x3, 0x16b, 0x3, 0x16b, 0x3, 0x16b, 0x3, 0x16b, 0x3, 
+       0x16b, 0x3, 0x16b, 0x3, 0x16c, 0x3, 0x16c, 0x3, 0x16c, 0x3, 0x16c, 
+       0x3, 0x16c, 0x3, 0x16c, 0x3, 0x16c, 0x3, 0x16c, 0x3, 0x16c, 0x3, 
+       0x16c, 0x3, 0x16c, 0x3, 0x16c, 0x3, 0x16c, 0x3, 0x16c, 0x3, 0x16c, 
+       0x3, 0x16c, 0x3, 0x16c, 0x3, 0x16c, 0x3, 0x16c, 0x3, 0x16c, 0x3, 
+       0x16c, 0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 
+       0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 0x3, 
+       0x16d, 0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 
+       0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 0x3, 
+       0x16d, 0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 
+       0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16d, 0x3, 0x16e, 0x3, 
+       0x16e, 0x3, 0x16e, 0x3, 0x16e, 0x3, 0x16e, 0x3, 0x16e, 0x3, 0x16e, 
+       0x3, 0x16e, 0x3, 0x16e, 0x3, 0x16e, 0x3, 0x16e, 0x3, 0x16e, 0x3, 
+       0x16e, 0x3, 0x16e, 0x3, 0x16e, 0x3, 0x16e, 0x3, 0x16e, 0x3, 0x16e, 
+       0x3, 0x16e, 0x3, 0x16e, 0x3, 0x16e, 0x3, 0x16e, 0x3, 0x16e, 0x3, 
+       0x16e, 0x3, 0x16e, 0x3, 0x16e, 0x3, 0x16e, 0x3, 0x16e, 0x3, 0x16e, 
+       0x3, 0x16e, 0x3, 0x16e, 0x3, 0x16f, 0x3, 0x16f, 0x3, 0x16f, 0x3, 
+       0x16f, 0x3, 0x16f, 0x3, 0x16f, 0x3, 0x16f, 0x3, 0x16f, 0x3, 0x16f, 
+       0x3, 0x16f, 0x3, 0x16f, 0x3, 0x16f, 0x3, 0x16f, 0x3, 0x16f, 0x3, 
+       0x16f, 0x3, 0x16f, 0x3, 0x16f, 0x3, 0x16f, 0x3, 0x16f, 0x3, 0x16f, 
+       0x3, 0x16f, 0x3, 0x16f, 0x3, 0x16f, 0x3, 0x16f, 0x3, 0x16f, 0x3, 
+       0x16f, 0x3, 0x16f, 0x3, 0x16f, 0x3, 0x16f, 0x3, 0x16f, 0x3, 0x170, 
+       0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 
+       0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x7, 0x170, 0x10a8, 0xa, 
+       0x170, 0xc, 0x170, 0xe, 0x170, 0x10ab, 0xb, 0x170, 0x3, 0x170, 0x3, 
+       0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 
+       0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 
+       0x170, 0x3, 0x170, 0x7, 0x170, 0x10bb, 0xa, 0x170, 0xc, 0x170, 0xe, 
+       0x170, 0x10be, 0xb, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 
+       0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 
+       0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x7, 0x170, 0x10cd, 
+       0xa, 0x170, 0xc, 0x170, 0xe, 0x170, 0x10d0, 0xb, 0x170, 0x3, 0x170, 
+       0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 
+       0x170, 0x7, 0x170, 0x10d9, 0xa, 0x170, 0xc, 0x170, 0xe, 0x170, 0x10dc, 
+       0xb, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 
+       0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x7, 0x170, 0x10e6, 0xa, 
+       0x170, 0xc, 0x170, 0xe, 0x170, 0x10e9, 0xb, 0x170, 0x3, 0x170, 0x3, 
+       0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 
+       0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x7, 0x170, 0x10f5, 0xa, 0x170, 
+       0xc, 0x170, 0xe, 0x170, 0x10f8, 0xb, 0x170, 0x3, 0x170, 0x3, 0x170, 
+       0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 
+       0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 
+       0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x7, 0x170, 0x110a, 0xa, 0x170, 
+       0xc, 0x170, 0xe, 0x170, 0x110d, 0xb, 0x170, 0x3, 0x170, 0x3, 0x170, 
+       0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 
+       0x170, 0x3, 0x170, 0x7, 0x170, 0x1118, 0xa, 0x170, 0xc, 0x170, 0xe, 
+       0x170, 0x111b, 0xb, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 
+       0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 
+       0x3, 0x170, 0x7, 0x170, 0x1127, 0xa, 0x170, 0xc, 0x170, 0xe, 0x170, 
+       0x112a, 0xb, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 
+       0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 
+       0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 
+       0x7, 0x170, 0x113b, 0xa, 0x170, 0xc, 0x170, 0xe, 0x170, 0x113e, 0xb, 
+       0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 
+       0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x7, 
+       0x170, 0x114a, 0xa, 0x170, 0xc, 0x170, 0xe, 0x170, 0x114d, 0xb, 0x170, 
+       0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 
+       0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 
+       0x7, 0x170, 0x115a, 0xa, 0x170, 0xc, 0x170, 0xe, 0x170, 0x115d, 0xb, 
+       0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 0x3, 0x170, 
+       0x3, 0x170, 0x3, 0x170, 0x7, 0x170, 0x1166, 0xa, 0x170, 0xc, 0x170, 
+       0xe, 0x170, 0x1169, 0xb, 0x170, 0x5, 0x170, 0x116b, 0xa, 0x170, 0x3, 
+       0x171, 0x3, 0x171, 0x3, 0x171, 0x3, 0x171, 0x3, 0x171, 0x3, 0x171, 
+       0x7, 0x171, 0x1173, 0xa, 0x171, 0xc, 0x171, 0xe, 0x171, 0x1176, 0xb, 
+       0x171, 0x3, 0x171, 0x3, 0x171, 0x3, 0x171, 0x3, 0x171, 0x3, 0x171, 
+       0x3, 0x171, 0x7, 0x171, 0x117e, 0xa, 0x171, 0xc, 0x171, 0xe, 0x171, 
+       0x1181, 0xb, 0x171, 0x3, 0x171, 0x3, 0x171, 0x3, 0x171, 0x3, 0x171, 
+       0x3, 0x171, 0x3, 0x171, 0x7, 0x171, 0x1189, 0xa, 0x171, 0xc, 0x171, 
+       0xe, 0x171, 0x118c, 0xb, 0x171, 0x3, 0x171, 0x3, 0x171, 0x3, 0x171, 
+       0x3, 0x171, 0x3, 0x171, 0x3, 0x171, 0x7, 0x171, 0x1194, 0xa, 0x171, 
+       0xc, 0x171, 0xe, 0x171, 0x1197, 0xb, 0x171, 0x5, 0x171, 0x1199, 0xa, 
+       0x171, 0x3, 0x172, 0x3, 0x172, 0x3, 0x172, 0x7, 0x172, 0x119e, 0xa, 
+       0x172, 0xc, 0x172, 0xe, 0x172, 0x11a1, 0xb, 0x172, 0x3, 0x173, 0x3, 
+       0x173, 0x3, 0x174, 0x3, 0x174, 0x3, 0x175, 0x6, 0x175, 0x11a8, 0xa, 
+       0x175, 0xd, 0x175, 0xe, 0x175, 0x11a9, 0x3, 0x176, 0x3, 0x176, 0x3, 
+       0x176, 0x3, 0x176, 0x5, 0x176, 0x11b0, 0xa, 0x176, 0x3, 0x176, 0x6, 
+       0x176, 0x11b3, 0xa, 0x176, 0xd, 0x176, 0xe, 0x176, 0x11b4, 0x3, 0x177, 
+       0x3, 0x177, 0x3, 0x178, 0x5, 0x178, 0x11ba, 0xa, 0x178, 0x3, 0x178, 
+       0x3, 0x178, 0x3, 0x178, 0x3, 0x178, 0x3, 0x178, 0x5, 0x178, 0x11c1, 
+       0xa, 0x178, 0x3, 0x179, 0x3, 0x179, 0x5, 0x179, 0x11c5, 0xa, 0x179, 
+       0x3, 0x179, 0x3, 0x179, 0x3, 0x179, 0x5, 0x179, 0x11ca, 0xa, 0x179, 
+       0x3, 0x179, 0x5, 0x179, 0x11cd, 0xa, 0x179, 0x3, 0x17a, 0x3, 0x17a, 
+       0x3, 0x17b, 0x6, 0x17b, 0x11d2, 0xa, 0x17b, 0xd, 0x17b, 0xe, 0x17b, 
+       0x11d3, 0x3, 0x17c, 0x6, 0x17c, 0x11d7, 0xa, 0x17c, 0xd, 0x17c, 0xe, 
+       0x17c, 0x11d8, 0x3, 0x17d, 0x5, 0x17d, 0x11dc, 0xa, 0x17d, 0x3, 0x17d, 
+       0x5, 0x17d, 0x11df, 0xa, 0x17d, 0x3, 0x17d, 0x5, 0x17d, 0x11e2, 0xa, 
+       0x17d, 0x3, 0x17d, 0x5, 0x17d, 0x11e5, 0xa, 0x17d, 0x3, 0x17d, 0x5, 
+       0x17d, 0x11e8, 0xa, 0x17d, 0x5, 0x17d, 0x11ea, 0xa, 0x17d, 0x3, 0x17e, 
+       0x3, 0x17e, 0x5, 0x17e, 0x11ee, 0xa, 0x17e, 0x3, 0x17e, 0x3, 0x17e, 
+       0x5, 0x17e, 0x11f2, 0xa, 0x17e, 0x5, 0x17e, 0x11f4, 0xa, 0x17e, 0x3, 
+       0x17f, 0x3, 0x17f, 0x3, 0x180, 0x3, 0x180, 0x5, 0x180, 0x11fa, 0xa, 
+       0x180, 0x3, 0x180, 0x5, 0x180, 0x11fd, 0xa, 0x180, 0x3, 0x180, 0x3, 
+       0x180, 0x3, 0x180, 0x5, 0x180, 0x1202, 0xa, 0x180, 0x5, 0x180, 0x1204, 
+       0xa, 0x180, 0x3, 0x181, 0x3, 0x181, 0x3, 0x182, 0x3, 0x182, 0x3, 
+       0x182, 0x3, 0x183, 0x3, 0x183, 0x5, 0x183, 0x120d, 0xa, 0x183, 0x3, 
+       0x183, 0x3, 0x183, 0x3, 0x184, 0x6, 0x184, 0x1212, 0xa, 0x184, 0xd, 
+       0x184, 0xe, 0x184, 0x1213, 0x3, 0x185, 0x3, 0x185, 0x5, 0x185, 0x1218, 
+       0xa, 0x185, 0x3, 0x186, 0x3, 0x186, 0x5, 0x186, 0x121c, 0xa, 0x186, 
+       0x3, 0x186, 0x3, 0x186, 0x3, 0x186, 0x3, 0x186, 0x3, 0x186, 0x3, 
+       0x186, 0x3, 0x186, 0x3, 0x186, 0x3, 0x186, 0x7, 0x186, 0x1227, 0xa, 
+       0x186, 0xc, 0x186, 0xe, 0x186, 0x122a, 0xb, 0x186, 0x3, 0x186, 0x3, 
+       0x186, 0x3, 0x187, 0x3, 0x187, 0x5, 0x187, 0x1230, 0xa, 0x187, 0x3, 
+       0x187, 0x3, 0x187, 0x3, 0x187, 0x3, 0x187, 0x3, 0x187, 0x3, 0x187, 
+       0x5, 0x187, 0x1238, 0xa, 0x187, 0x3, 0x187, 0x3, 0x187, 0x5, 0x187, 
+       0x123c, 0xa, 0x187, 0x3, 0x187, 0x5, 0x187, 0x123f, 0xa, 0x187, 0x3, 
+       0x187, 0x3, 0x187, 0x3, 0x188, 0x6, 0x188, 0x1244, 0xa, 0x188, 0xd, 
+       0x188, 0xe, 0x188, 0x1245, 0x3, 0x188, 0x3, 0x188, 0x3, 0x189, 0x3, 
+       0x189, 0x5, 0x189, 0x124c, 0xa, 0x189, 0x3, 0x189, 0x5, 0x189, 0x124f, 
+       0xa, 0x189, 0x3, 0x189, 0x3, 0x189, 0x3, 0x18a, 0x3, 0x18a, 0x3, 
+       0x18a, 0x3, 0x18a, 0x7, 0x18a, 0x1257, 0xa, 0x18a, 0xc, 0x18a, 0xe, 
+       0x18a, 0x125a, 0xb, 0x18a, 0x3, 0x18a, 0x3, 0x18a, 0x3, 0x18a, 0x3, 
+       0x18a, 0x3, 0x18a, 0x3, 0x18b, 0x3, 0x18b, 0x3, 0x18b, 0x3, 0x18b, 
+       0x7, 0x18b, 0x1265, 0xa, 0x18b, 0xc, 0x18b, 0xe, 0x18b, 0x1268, 0xb, 
+       0x18b, 0x3, 0x18b, 0x3, 0x18b, 0x3, 0x1258, 0x2, 0x18c, 0x3, 0x3, 
+       0x5, 0x4, 0x7, 0x5, 0x9, 0x6, 0xb, 0x7, 0xd, 0x8, 0xf, 0x9, 0x11, 
+       0xa, 0x13, 0xb, 0x15, 0xc, 0x17, 0xd, 0x19, 0xe, 0x1b, 0xf, 0x1d, 
+       0x10, 0x1f, 0x11, 0x21, 0x12, 0x23, 0x13, 0x25, 0x14, 0x27, 0x15, 
+       0x29, 0x16, 0x2b, 0x17, 0x2d, 0x18, 0x2f, 0x19, 0x31, 0x1a, 0x33, 
+       0x1b, 0x35, 0x1c, 0x37, 0x1d, 0x39, 0x1e, 0x3b, 0x1f, 0x3d, 0x20, 
+       0x3f, 0x21, 0x41, 0x22, 0x43, 0x23, 0x45, 0x24, 0x47, 0x25, 0x49, 
+       0x26, 0x4b, 0x27, 0x4d, 0x28, 0x4f, 0x29, 0x51, 0x2a, 0x53, 0x2b, 
+       0x55, 0x2c, 0x57, 0x2d, 0x59, 0x2e, 0x5b, 0x2f, 0x5d, 0x30, 0x5f, 
+       0x31, 0x61, 0x32, 0x63, 0x33, 0x65, 0x34, 0x67, 0x35, 0x69, 0x36, 
+       0x6b, 0x37, 0x6d, 0x38, 0x6f, 0x39, 0x71, 0x3a, 0x73, 0x3b, 0x75, 
+       0x3c, 0x77, 0x3d, 0x79, 0x3e, 0x7b, 0x3f, 0x7d, 0x40, 0x7f, 0x41, 
+       0x81, 0x42, 0x83, 0x43, 0x85, 0x44, 0x87, 0x45, 0x89, 0x46, 0x8b, 
+       0x47, 0x8d, 0x48, 0x8f, 0x49, 0x91, 0x4a, 0x93, 0x4b, 0x95, 0x4c, 
+       0x97, 0x4d, 0x99, 0x4e, 0x9b, 0x4f, 0x9d, 0x50, 0x9f, 0x51, 0xa1, 
+       0x52, 0xa3, 0x53, 0xa5, 0x54, 0xa7, 0x55, 0xa9, 0x56, 0xab, 0x57, 
+       0xad, 0x58, 0xaf, 0x59, 0xb1, 0x5a, 0xb3, 0x5b, 0xb5, 0x5c, 0xb7, 
+       0x5d, 0xb9, 0x5e, 0xbb, 0x5f, 0xbd, 0x60, 0xbf, 0x61, 0xc1, 0x62, 
+       0xc3, 0x63, 0xc5, 0x64, 0xc7, 0x65, 0xc9, 0x66, 0xcb, 0x67, 0xcd, 
+       0x68, 0xcf, 0x69, 0xd1, 0x6a, 0xd3, 0x6b, 0xd5, 0x6c, 0xd7, 0x6d, 
+       0xd9, 0x6e, 0xdb, 0x6f, 0xdd, 0x70, 0xdf, 0x71, 0xe1, 0x72, 0xe3, 
+       0x73, 0xe5, 0x74, 0xe7, 0x75, 0xe9, 0x76, 0xeb, 0x77, 0xed, 0x78, 
+       0xef, 0x79, 0xf1, 0x7a, 0xf3, 0x7b, 0xf5, 0x7c, 0xf7, 0x7d, 0xf9, 
+       0x7e, 0xfb, 0x7f, 0xfd, 0x80, 0xff, 0x81, 0x101, 0x82, 0x103, 0x83, 
+       0x105, 0x84, 0x107, 0x85, 0x109, 0x86, 0x10b, 0x87, 0x10d, 0x88, 
+       0x10f, 0x89, 0x111, 0x8a, 0x113, 0x8b, 0x115, 0x8c, 0x117, 0x8d, 
+       0x119, 0x8e, 0x11b, 0x8f, 0x11d, 0x90, 0x11f, 0x91, 0x121, 0x92, 
+       0x123, 0x93, 0x125, 0x94, 0x127, 0x95, 0x129, 0x96, 0x12b, 0x97, 
+       0x12d, 0x98, 0x12f, 0x99, 0x131, 0x9a, 0x133, 0x9b, 0x135, 0x9c, 
+       0x137, 0x9d, 0x139, 0x9e, 0x13b, 0x9f, 0x13d, 0xa0, 0x13f, 0xa1, 
+       0x141, 0xa2, 0x143, 0xa3, 0x145, 0xa4, 0x147, 0xa5, 0x149, 0xa6, 
+       0x14b, 0xa7, 0x14d, 0xa8, 0x14f, 0xa9, 0x151, 0xaa, 0x153, 0xab, 
+       0x155, 0xac, 0x157, 0xad, 0x159, 0xae, 0x15b, 0xaf, 0x15d, 0xb0, 
+       0x15f, 0xb1, 0x161, 0xb2, 0x163, 0xb3, 0x165, 0xb4, 0x167, 0xb5, 
+       0x169, 0xb6, 0x16b, 0xb7, 0x16d, 0xb8, 0x16f, 0xb9, 0x171, 0xba, 
+       0x173, 0xbb, 0x175, 0xbc, 0x177, 0xbd, 0x179, 0xbe, 0x17b, 0xbf, 
+       0x17d, 0xc0, 0x17f, 0xc1, 0x181, 0xc2, 0x183, 0xc3, 0x185, 0xc4, 
+       0x187, 0xc5, 0x189, 0xc6, 0x18b, 0xc7, 0x18d, 0xc8, 0x18f, 0xc9, 
+       0x191, 0xca, 0x193, 0xcb, 0x195, 0xcc, 0x197, 0xcd, 0x199, 0xce, 
+       0x19b, 0xcf, 0x19d, 0xd0, 0x19f, 0xd1, 0x1a1, 0xd2, 0x1a3, 0xd3, 
+       0x1a5, 0xd4, 0x1a7, 0xd5, 0x1a9, 0xd6, 0x1ab, 0xd7, 0x1ad, 0xd8, 
+       0x1af, 0xd9, 0x1b1, 0xda, 0x1b3, 0xdb, 0x1b5, 0xdc, 0x1b7, 0xdd, 
+       0x1b9, 0xde, 0x1bb, 0xdf, 0x1bd, 0xe0, 0x1bf, 0xe1, 0x1c1, 0xe2, 
+       0x1c3, 0xe3, 0x1c5, 0xe4, 0x1c7, 0xe5, 0x1c9, 0xe6, 0x1cb, 0xe7, 
+       0x1cd, 0xe8, 0x1cf, 0xe9, 0x1d1, 0xea, 0x1d3, 0xeb, 0x1d5, 0xec, 
+       0x1d7, 0xed, 0x1d9, 0xee, 0x1db, 0xef, 0x1dd, 0xf0, 0x1df, 0xf1, 
+       0x1e1, 0xf2, 0x1e3, 0xf3, 0x1e5, 0xf4, 0x1e7, 0xf5, 0x1e9, 0xf6, 
+       0x1eb, 0xf7, 0x1ed, 0xf8, 0x1ef, 0xf9, 0x1f1, 0xfa, 0x1f3, 0xfb, 
+       0x1f5, 0xfc, 0x1f7, 0xfd, 0x1f9, 0xfe, 0x1fb, 0xff, 0x1fd, 0x100, 
+       0x1ff, 0x101, 0x201, 0x102, 0x203, 0x103, 0x205, 0x104, 0x207, 0x105, 
+       0x209, 0x106, 0x20b, 0x107, 0x20d, 0x108, 0x20f, 0x109, 0x211, 0x10a, 
+       0x213, 0x10b, 0x215, 0x10c, 0x217, 0x10d, 0x219, 0x10e, 0x21b, 0x10f, 
+       0x21d, 0x110, 0x21f, 0x111, 0x221, 0x112, 0x223, 0x113, 0x225, 0x114, 
+       0x227, 0x115, 0x229, 0x116, 0x22b, 0x117, 0x22d, 0x118, 0x22f, 0x119, 
+       0x231, 0x11a, 0x233, 0x11b, 0x235, 0x11c, 0x237, 0x11d, 0x239, 0x11e, 
+       0x23b, 0x11f, 0x23d, 0x120, 0x23f, 0x121, 0x241, 0x122, 0x243, 0x123, 
+       0x245, 0x124, 0x247, 0x125, 0x249, 0x126, 0x24b, 0x127, 0x24d, 0x128, 
+       0x24f, 0x129, 0x251, 0x12a, 0x253, 0x12b, 0x255, 0x12c, 0x257, 0x12d, 
+       0x259, 0x12e, 0x25b, 0x12f, 0x25d, 0x130, 0x25f, 0x131, 0x261, 0x132, 
+       0x263, 0x133, 0x265, 0x134, 0x267, 0x135, 0x269, 0x136, 0x26b, 0x137, 
+       0x26d, 0x138, 0x26f, 0x139, 0x271, 0x13a, 0x273, 0x13b, 0x275, 0x13c, 
+       0x277, 0x13d, 0x279, 0x13e, 0x27b, 0x13f, 0x27d, 0x140, 0x27f, 0x141, 
+       0x281, 0x142, 0x283, 0x143, 0x285, 0x144, 0x287, 0x145, 0x289, 0x146, 
+       0x28b, 0x147, 0x28d, 0x148, 0x28f, 0x149, 0x291, 0x14a, 0x293, 0x14b, 
+       0x295, 0x14c, 0x297, 0x14d, 0x299, 0x14e, 0x29b, 0x14f, 0x29d, 0x150, 
+       0x29f, 0x151, 0x2a1, 0x152, 0x2a3, 0x153, 0x2a5, 0x154, 0x2a7, 0x155, 
+       0x2a9, 0x156, 0x2ab, 0x157, 0x2ad, 0x158, 0x2af, 0x159, 0x2b1, 0x15a, 
+       0x2b3, 0x15b, 0x2b5, 0x15c, 0x2b7, 0x15d, 0x2b9, 0x15e, 0x2bb, 0x15f, 
+       0x2bd, 0x160, 0x2bf, 0x161, 0x2c1, 0x162, 0x2c3, 0x163, 0x2c5, 0x164, 
+       0x2c7, 0x165, 0x2c9, 0x166, 0x2cb, 0x167, 0x2cd, 0x168, 0x2cf, 0x169, 
+       0x2d1, 0x16a, 0x2d3, 0x16b, 0x2d5, 0x16c, 0x2d7, 0x16d, 0x2d9, 0x16e, 
+       0x2db, 0x16f, 0x2dd, 0x170, 0x2df, 0x171, 0x2e1, 0x172, 0x2e3, 0x173, 
+       0x2e5, 0x2, 0x2e7, 0x2, 0x2e9, 0x2, 0x2eb, 0x2, 0x2ed, 0x2, 0x2ef, 
+       0x2, 0x2f1, 0x2, 0x2f3, 0x2, 0x2f5, 0x2, 0x2f7, 0x2, 0x2f9, 0x2, 
+       0x2fb, 0x174, 0x2fd, 0x2, 0x2ff, 0x175, 0x301, 0x2, 0x303, 0x2, 0x305, 
+       0x176, 0x307, 0x2, 0x309, 0x2, 0x30b, 0x177, 0x30d, 0x178, 0x30f, 
+       0x179, 0x311, 0x17a, 0x313, 0x17b, 0x315, 0x17c, 0x3, 0x2, 0xd, 0x5, 
+       0x2, 0x43, 0x5c, 0x61, 0x61, 0x63, 0x7c, 0x3, 0x2, 0x32, 0x3b, 0x5, 
+       0x2, 0x32, 0x3b, 0x43, 0x48, 0x63, 0x68, 0x4, 0x2, 0x2d, 0x2d, 0x2f, 
+       0x2f, 0x4, 0x2, 0x57, 0x57, 0x77, 0x77, 0x4, 0x2, 0x4e, 0x4e, 0x6e, 
+       0x6e, 0x8, 0x2, 0x48, 0x48, 0x4a, 0x4a, 0x4e, 0x4e, 0x68, 0x68, 0x6a, 
+       0x6a, 0x6e, 0x6e, 0xc, 0x2, 0x24, 0x24, 0x29, 0x29, 0x41, 0x41, 0x5e, 
+       0x5e, 0x63, 0x64, 0x68, 0x68, 0x70, 0x70, 0x74, 0x74, 0x76, 0x76, 
+       0x78, 0x78, 0x6, 0x2, 0xc, 0xc, 0xf, 0xf, 0x24, 0x24, 0x5e, 0x5e, 
+       0x4, 0x2, 0xc, 0xc, 0xf, 0xf, 0x4, 0x2, 0xb, 0xb, 0x22, 0x22, 0x2, 
+       0x12a9, 0x2, 0x3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x5, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x9, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0xb, 0x3, 0x2, 0x2, 0x2, 0x2, 0xd, 0x3, 0x2, 0x2, 0x2, 0x2, 0xf, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x11, 0x3, 0x2, 0x2, 0x2, 0x2, 0x13, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x15, 0x3, 0x2, 0x2, 0x2, 0x2, 0x17, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x19, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1b, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x1d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1f, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x21, 0x3, 0x2, 0x2, 0x2, 0x2, 0x23, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x25, 0x3, 0x2, 0x2, 0x2, 0x2, 0x27, 0x3, 0x2, 0x2, 0x2, 0x2, 0x29, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x2b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2d, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x2f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x31, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x33, 0x3, 0x2, 0x2, 0x2, 0x2, 0x35, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x37, 0x3, 0x2, 0x2, 0x2, 0x2, 0x39, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x3b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x3d, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x3f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x41, 0x3, 0x2, 0x2, 0x2, 0x2, 0x43, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x45, 0x3, 0x2, 0x2, 0x2, 0x2, 0x47, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x49, 0x3, 0x2, 0x2, 0x2, 0x2, 0x4b, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x4d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x4f, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x51, 0x3, 0x2, 0x2, 0x2, 0x2, 0x53, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x55, 0x3, 0x2, 0x2, 0x2, 0x2, 0x57, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x59, 0x3, 0x2, 0x2, 0x2, 0x2, 0x5b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x5d, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x5f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x61, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x63, 0x3, 0x2, 0x2, 0x2, 0x2, 0x65, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x67, 0x3, 0x2, 0x2, 0x2, 0x2, 0x69, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x6b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x6d, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x6f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x71, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x73, 0x3, 0x2, 0x2, 0x2, 0x2, 0x75, 0x3, 0x2, 0x2, 0x2, 0x2, 0x77, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x79, 0x3, 0x2, 0x2, 0x2, 0x2, 0x7b, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x7d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x7f, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x81, 0x3, 0x2, 0x2, 0x2, 0x2, 0x83, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x85, 0x3, 0x2, 0x2, 0x2, 0x2, 0x87, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x89, 0x3, 0x2, 0x2, 0x2, 0x2, 0x8b, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x8d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x8f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x91, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x93, 0x3, 0x2, 0x2, 0x2, 0x2, 0x95, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x97, 0x3, 0x2, 0x2, 0x2, 0x2, 0x99, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x9b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x9d, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x9f, 0x3, 0x2, 0x2, 0x2, 0x2, 0xa1, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0xa3, 0x3, 0x2, 0x2, 0x2, 0x2, 0xa5, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0xa7, 0x3, 0x2, 0x2, 0x2, 0x2, 0xa9, 0x3, 0x2, 0x2, 0x2, 0x2, 0xab, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0xad, 0x3, 0x2, 0x2, 0x2, 0x2, 0xaf, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0xb1, 0x3, 0x2, 0x2, 0x2, 0x2, 0xb3, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0xb5, 0x3, 0x2, 0x2, 0x2, 0x2, 0xb7, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0xb9, 0x3, 0x2, 0x2, 0x2, 0x2, 0xbb, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0xbd, 0x3, 0x2, 0x2, 0x2, 0x2, 0xbf, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0xc1, 0x3, 0x2, 0x2, 0x2, 0x2, 0xc3, 0x3, 0x2, 0x2, 0x2, 0x2, 0xc5, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0xc7, 0x3, 0x2, 0x2, 0x2, 0x2, 0xc9, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0xcb, 0x3, 0x2, 0x2, 0x2, 0x2, 0xcd, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0xcf, 0x3, 0x2, 0x2, 0x2, 0x2, 0xd1, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0xd3, 0x3, 0x2, 0x2, 0x2, 0x2, 0xd5, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0xd7, 0x3, 0x2, 0x2, 0x2, 0x2, 0xd9, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0xdb, 0x3, 0x2, 0x2, 0x2, 0x2, 0xdd, 0x3, 0x2, 0x2, 0x2, 0x2, 0xdf, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0xe1, 0x3, 0x2, 0x2, 0x2, 0x2, 0xe3, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0xe5, 0x3, 0x2, 0x2, 0x2, 0x2, 0xe7, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0xe9, 0x3, 0x2, 0x2, 0x2, 0x2, 0xeb, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0xed, 0x3, 0x2, 0x2, 0x2, 0x2, 0xef, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0xf1, 0x3, 0x2, 0x2, 0x2, 0x2, 0xf3, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0xf5, 0x3, 0x2, 0x2, 0x2, 0x2, 0xf7, 0x3, 0x2, 0x2, 0x2, 0x2, 0xf9, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0xfb, 0x3, 0x2, 0x2, 0x2, 0x2, 0xfd, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0xff, 0x3, 0x2, 0x2, 0x2, 0x2, 0x101, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x103, 0x3, 0x2, 0x2, 0x2, 0x2, 0x105, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x107, 0x3, 0x2, 0x2, 0x2, 0x2, 0x109, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x10b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x10d, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x10f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x111, 0x3, 0x2, 0x2, 0x2, 0x2, 0x113, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x115, 0x3, 0x2, 0x2, 0x2, 0x2, 0x117, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x119, 0x3, 0x2, 0x2, 0x2, 0x2, 0x11b, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x11d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x11f, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x121, 0x3, 0x2, 0x2, 0x2, 0x2, 0x123, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x125, 0x3, 0x2, 0x2, 0x2, 0x2, 0x127, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x129, 0x3, 0x2, 0x2, 0x2, 0x2, 0x12b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x12d, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x12f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x131, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x133, 0x3, 0x2, 0x2, 0x2, 0x2, 0x135, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x137, 0x3, 0x2, 0x2, 0x2, 0x2, 0x139, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x13b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x13d, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x13f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x141, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x143, 0x3, 0x2, 0x2, 0x2, 0x2, 0x145, 0x3, 0x2, 0x2, 0x2, 0x2, 0x147, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x149, 0x3, 0x2, 0x2, 0x2, 0x2, 0x14b, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x14d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x14f, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x151, 0x3, 0x2, 0x2, 0x2, 0x2, 0x153, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x155, 0x3, 0x2, 0x2, 0x2, 0x2, 0x157, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x159, 0x3, 0x2, 0x2, 0x2, 0x2, 0x15b, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x15d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x15f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x161, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x163, 0x3, 0x2, 0x2, 0x2, 0x2, 0x165, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x167, 0x3, 0x2, 0x2, 0x2, 0x2, 0x169, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x16b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x16d, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x16f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x171, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x173, 0x3, 0x2, 0x2, 0x2, 0x2, 0x175, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x177, 0x3, 0x2, 0x2, 0x2, 0x2, 0x179, 0x3, 0x2, 0x2, 0x2, 0x2, 0x17b, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x17d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x17f, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x181, 0x3, 0x2, 0x2, 0x2, 0x2, 0x183, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x185, 0x3, 0x2, 0x2, 0x2, 0x2, 0x187, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x189, 0x3, 0x2, 0x2, 0x2, 0x2, 0x18b, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x18d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x18f, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x191, 0x3, 0x2, 0x2, 0x2, 0x2, 0x193, 0x3, 0x2, 0x2, 0x2, 0x2, 0x195, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x197, 0x3, 0x2, 0x2, 0x2, 0x2, 0x199, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x19b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x19d, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x19f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1a1, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x1a3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1a5, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x1a7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1a9, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x1ab, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1ad, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1af, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x1b1, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1b3, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x1b5, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1b7, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x1b9, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1bb, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x1bd, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1bf, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x1c1, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1c3, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x1c5, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1c7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1c9, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x1cb, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1cd, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x1cf, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1d1, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x1d3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1d5, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x1d7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1d9, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x1db, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1dd, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x1df, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1e1, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1e3, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x1e5, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1e7, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x1e9, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1eb, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x1ed, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1ef, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x1f1, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1f3, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x1f5, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1f7, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x1f9, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1fb, 0x3, 0x2, 0x2, 0x2, 0x2, 0x1fd, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x1ff, 0x3, 0x2, 0x2, 0x2, 0x2, 0x201, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x203, 0x3, 0x2, 0x2, 0x2, 0x2, 0x205, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x207, 0x3, 0x2, 0x2, 0x2, 0x2, 0x209, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x20b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x20d, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x20f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x211, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x213, 0x3, 0x2, 0x2, 0x2, 0x2, 0x215, 0x3, 0x2, 0x2, 0x2, 0x2, 0x217, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x219, 0x3, 0x2, 0x2, 0x2, 0x2, 0x21b, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x21d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x21f, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x221, 0x3, 0x2, 0x2, 0x2, 0x2, 0x223, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x225, 0x3, 0x2, 0x2, 0x2, 0x2, 0x227, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x229, 0x3, 0x2, 0x2, 0x2, 0x2, 0x22b, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x22d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x22f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x231, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x233, 0x3, 0x2, 0x2, 0x2, 0x2, 0x235, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x237, 0x3, 0x2, 0x2, 0x2, 0x2, 0x239, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x23b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x23d, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x23f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x241, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x243, 0x3, 0x2, 0x2, 0x2, 0x2, 0x245, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x247, 0x3, 0x2, 0x2, 0x2, 0x2, 0x249, 0x3, 0x2, 0x2, 0x2, 0x2, 0x24b, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x24d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x24f, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x251, 0x3, 0x2, 0x2, 0x2, 0x2, 0x253, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x255, 0x3, 0x2, 0x2, 0x2, 0x2, 0x257, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x259, 0x3, 0x2, 0x2, 0x2, 0x2, 0x25b, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x25d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x25f, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x261, 0x3, 0x2, 0x2, 0x2, 0x2, 0x263, 0x3, 0x2, 0x2, 0x2, 0x2, 0x265, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x267, 0x3, 0x2, 0x2, 0x2, 0x2, 0x269, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x26b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x26d, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x26f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x271, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x273, 0x3, 0x2, 0x2, 0x2, 0x2, 0x275, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x277, 0x3, 0x2, 0x2, 0x2, 0x2, 0x279, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x27b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x27d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x27f, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x281, 0x3, 0x2, 0x2, 0x2, 0x2, 0x283, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x285, 0x3, 0x2, 0x2, 0x2, 0x2, 0x287, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x289, 0x3, 0x2, 0x2, 0x2, 0x2, 0x28b, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x28d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x28f, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x291, 0x3, 0x2, 0x2, 0x2, 0x2, 0x293, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x295, 0x3, 0x2, 0x2, 0x2, 0x2, 0x297, 0x3, 0x2, 0x2, 0x2, 0x2, 0x299, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x29b, 0x3, 0x2, 0x2, 0x2, 0x2, 0x29d, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x29f, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2a1, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x2a3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2a5, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x2a7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2a9, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x2ab, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2ad, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x2af, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2b1, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2b3, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x2b5, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2b7, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x2b9, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2bb, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x2bd, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2bf, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x2c1, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2c3, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x2c5, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2c7, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x2c9, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2cb, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2cd, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x2cf, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2d1, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x2d3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2d5, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x2d7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2d9, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x2db, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2dd, 0x3, 0x2, 0x2, 0x2, 
+       0x2, 0x2df, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2e1, 0x3, 0x2, 0x2, 0x2, 0x2, 
+       0x2e3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2fb, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2ff, 
+       0x3, 0x2, 0x2, 0x2, 0x2, 0x305, 0x3, 0x2, 0x2, 0x2, 0x2, 0x30b, 0x3, 
+       0x2, 0x2, 0x2, 0x2, 0x30d, 0x3, 0x2, 0x2, 0x2, 0x2, 0x30f, 0x3, 0x2, 
+       0x2, 0x2, 0x2, 0x311, 0x3, 0x2, 0x2, 0x2, 0x2, 0x313, 0x3, 0x2, 0x2, 
+       0x2, 0x2, 0x315, 0x3, 0x2, 0x2, 0x2, 0x3, 0x317, 0x3, 0x2, 0x2, 0x2, 
+       0x5, 0x32e, 0x3, 0x2, 0x2, 0x2, 0x7, 0x333, 0x3, 0x2, 0x2, 0x2, 0x9, 
+       0x339, 0x3, 0x2, 0x2, 0x2, 0xb, 0x33f, 0x3, 0x2, 0x2, 0x2, 0xd, 0x345, 
+       0x3, 0x2, 0x2, 0x2, 0xf, 0x34b, 0x3, 0x2, 0x2, 0x2, 0x11, 0x353, 
+       0x3, 0x2, 0x2, 0x2, 0x13, 0x35b, 0x3, 0x2, 0x2, 0x2, 0x15, 0x363, 
+       0x3, 0x2, 0x2, 0x2, 0x17, 0x36b, 0x3, 0x2, 0x2, 0x2, 0x19, 0x373, 
+       0x3, 0x2, 0x2, 0x2, 0x1b, 0x37b, 0x3, 0x2, 0x2, 0x2, 0x1d, 0x383, 
+       0x3, 0x2, 0x2, 0x2, 0x1f, 0x38b, 0x3, 0x2, 0x2, 0x2, 0x21, 0x393, 
+       0x3, 0x2, 0x2, 0x2, 0x23, 0x39b, 0x3, 0x2, 0x2, 0x2, 0x25, 0x3a3, 
+       0x3, 0x2, 0x2, 0x2, 0x27, 0x3ab, 0x3, 0x2, 0x2, 0x2, 0x29, 0x3b3, 
+       0x3, 0x2, 0x2, 0x2, 0x2b, 0x3bb, 0x3, 0x2, 0x2, 0x2, 0x2d, 0x3c3, 
+       0x3, 0x2, 0x2, 0x2, 0x2f, 0x3cb, 0x3, 0x2, 0x2, 0x2, 0x31, 0x3d2, 
+       0x3, 0x2, 0x2, 0x2, 0x33, 0x3f8, 0x3, 0x2, 0x2, 0x2, 0x35, 0x40a, 
+       0x3, 0x2, 0x2, 0x2, 0x37, 0x410, 0x3, 0x2, 0x2, 0x2, 0x39, 0x415, 
+       0x3, 0x2, 0x2, 0x2, 0x3b, 0x41d, 0x3, 0x2, 0x2, 0x2, 0x3d, 0x426, 
+       0x3, 0x2, 0x2, 0x2, 0x3f, 0x435, 0x3, 0x2, 0x2, 0x2, 0x41, 0x444, 
+       0x3, 0x2, 0x2, 0x2, 0x43, 0x44a, 0x3, 0x2, 0x2, 0x2, 0x45, 0x457, 
+       0x3, 0x2, 0x2, 0x2, 0x47, 0x45d, 0x3, 0x2, 0x2, 0x2, 0x49, 0x475, 
+       0x3, 0x2, 0x2, 0x2, 0x4b, 0x47e, 0x3, 0x2, 0x2, 0x2, 0x4d, 0x486, 
+       0x3, 0x2, 0x2, 0x2, 0x4f, 0x48e, 0x3, 0x2, 0x2, 0x2, 0x51, 0x491, 
+       0x3, 0x2, 0x2, 0x2, 0x53, 0x498, 0x3, 0x2, 0x2, 0x2, 0x55, 0x4a0, 
+       0x3, 0x2, 0x2, 0x2, 0x57, 0x4a8, 0x3, 0x2, 0x2, 0x2, 0x59, 0x4b0, 
+       0x3, 0x2, 0x2, 0x2, 0x5b, 0x4b8, 0x3, 0x2, 0x2, 0x2, 0x5d, 0x4c2, 
+       0x3, 0x2, 0x2, 0x2, 0x5f, 0x4cc, 0x3, 0x2, 0x2, 0x2, 0x61, 0x4d6, 
+       0x3, 0x2, 0x2, 0x2, 0x63, 0x4e0, 0x3, 0x2, 0x2, 0x2, 0x65, 0x4ea, 
+       0x3, 0x2, 0x2, 0x2, 0x67, 0x4f4, 0x3, 0x2, 0x2, 0x2, 0x69, 0x4fe, 
+       0x3, 0x2, 0x2, 0x2, 0x6b, 0x508, 0x3, 0x2, 0x2, 0x2, 0x6d, 0x512, 
+       0x3, 0x2, 0x2, 0x2, 0x6f, 0x51c, 0x3, 0x2, 0x2, 0x2, 0x71, 0x526, 
+       0x3, 0x2, 0x2, 0x2, 0x73, 0x530, 0x3, 0x2, 0x2, 0x2, 0x75, 0x53a, 
+       0x3, 0x2, 0x2, 0x2, 0x77, 0x544, 0x3, 0x2, 0x2, 0x2, 0x79, 0x54e, 
+       0x3, 0x2, 0x2, 0x2, 0x7b, 0x558, 0x3, 0x2, 0x2, 0x2, 0x7d, 0x55d, 
+       0x3, 0x2, 0x2, 0x2, 0x7f, 0x562, 0x3, 0x2, 0x2, 0x2, 0x81, 0x569, 
+       0x3, 0x2, 0x2, 0x2, 0x83, 0x570, 0x3, 0x2, 0x2, 0x2, 0x85, 0x582, 
+       0x3, 0x2, 0x2, 0x2, 0x87, 0x599, 0x3, 0x2, 0x2, 0x2, 0x89, 0x59f, 
+       0x3, 0x2, 0x2, 0x2, 0x8b, 0x5a6, 0x3, 0x2, 0x2, 0x2, 0x8d, 0x5ad, 
+       0x3, 0x2, 0x2, 0x2, 0x8f, 0x5b4, 0x3, 0x2, 0x2, 0x2, 0x91, 0x5bb, 
+       0x3, 0x2, 0x2, 0x2, 0x93, 0x5c4, 0x3, 0x2, 0x2, 0x2, 0x95, 0x5cd, 
+       0x3, 0x2, 0x2, 0x2, 0x97, 0x5d6, 0x3, 0x2, 0x2, 0x2, 0x99, 0x5df, 
+       0x3, 0x2, 0x2, 0x2, 0x9b, 0x5e8, 0x3, 0x2, 0x2, 0x2, 0x9d, 0x5f1, 
+       0x3, 0x2, 0x2, 0x2, 0x9f, 0x5fa, 0x3, 0x2, 0x2, 0x2, 0xa1, 0x603, 
+       0x3, 0x2, 0x2, 0x2, 0xa3, 0x60c, 0x3, 0x2, 0x2, 0x2, 0xa5, 0x615, 
+       0x3, 0x2, 0x2, 0x2, 0xa7, 0x61e, 0x3, 0x2, 0x2, 0x2, 0xa9, 0x627, 
+       0x3, 0x2, 0x2, 0x2, 0xab, 0x630, 0x3, 0x2, 0x2, 0x2, 0xad, 0x639, 
+       0x3, 0x2, 0x2, 0x2, 0xaf, 0x642, 0x3, 0x2, 0x2, 0x2, 0xb1, 0x64b, 
+       0x3, 0x2, 0x2, 0x2, 0xb3, 0x64f, 0x3, 0x2, 0x2, 0x2, 0xb5, 0x65b, 
+       0x3, 0x2, 0x2, 0x2, 0xb7, 0x66c, 0x3, 0x2, 0x2, 0x2, 0xb9, 0x673, 
+       0x3, 0x2, 0x2, 0x2, 0xbb, 0x678, 0x3, 0x2, 0x2, 0x2, 0xbd, 0x67e, 
+       0x3, 0x2, 0x2, 0x2, 0xbf, 0x684, 0x3, 0x2, 0x2, 0x2, 0xc1, 0x68a, 
+       0x3, 0x2, 0x2, 0x2, 0xc3, 0x690, 0x3, 0x2, 0x2, 0x2, 0xc5, 0x698, 
+       0x3, 0x2, 0x2, 0x2, 0xc7, 0x6a0, 0x3, 0x2, 0x2, 0x2, 0xc9, 0x6a8, 
+       0x3, 0x2, 0x2, 0x2, 0xcb, 0x6b0, 0x3, 0x2, 0x2, 0x2, 0xcd, 0x6b8, 
+       0x3, 0x2, 0x2, 0x2, 0xcf, 0x6c0, 0x3, 0x2, 0x2, 0x2, 0xd1, 0x6c8, 
+       0x3, 0x2, 0x2, 0x2, 0xd3, 0x6d0, 0x3, 0x2, 0x2, 0x2, 0xd5, 0x6d8, 
+       0x3, 0x2, 0x2, 0x2, 0xd7, 0x6e0, 0x3, 0x2, 0x2, 0x2, 0xd9, 0x6e8, 
+       0x3, 0x2, 0x2, 0x2, 0xdb, 0x6f0, 0x3, 0x2, 0x2, 0x2, 0xdd, 0x6f8, 
+       0x3, 0x2, 0x2, 0x2, 0xdf, 0x700, 0x3, 0x2, 0x2, 0x2, 0xe1, 0x708, 
+       0x3, 0x2, 0x2, 0x2, 0xe3, 0x710, 0x3, 0x2, 0x2, 0x2, 0xe5, 0x713, 
+       0x3, 0x2, 0x2, 0x2, 0xe7, 0x716, 0x3, 0x2, 0x2, 0x2, 0xe9, 0x71d, 
+       0x3, 0x2, 0x2, 0x2, 0xeb, 0x735, 0x3, 0x2, 0x2, 0x2, 0xed, 0x737, 
+       0x3, 0x2, 0x2, 0x2, 0xef, 0x742, 0x3, 0x2, 0x2, 0x2, 0xf1, 0x746, 
+       0x3, 0x2, 0x2, 0x2, 0xf3, 0x74e, 0x3, 0x2, 0x2, 0x2, 0xf5, 0x756, 
+       0x3, 0x2, 0x2, 0x2, 0xf7, 0x75e, 0x3, 0x2, 0x2, 0x2, 0xf9, 0x763, 
+       0x3, 0x2, 0x2, 0x2, 0xfb, 0x768, 0x3, 0x2, 0x2, 0x2, 0xfd, 0x76d, 
+       0x3, 0x2, 0x2, 0x2, 0xff, 0x772, 0x3, 0x2, 0x2, 0x2, 0x101, 0x779, 
+       0x3, 0x2, 0x2, 0x2, 0x103, 0x780, 0x3, 0x2, 0x2, 0x2, 0x105, 0x787, 
+       0x3, 0x2, 0x2, 0x2, 0x107, 0x78e, 0x3, 0x2, 0x2, 0x2, 0x109, 0x795, 
+       0x3, 0x2, 0x2, 0x2, 0x10b, 0x79c, 0x3, 0x2, 0x2, 0x2, 0x10d, 0x7a3, 
+       0x3, 0x2, 0x2, 0x2, 0x10f, 0x7aa, 0x3, 0x2, 0x2, 0x2, 0x111, 0x7b1, 
+       0x3, 0x2, 0x2, 0x2, 0x113, 0x7b8, 0x3, 0x2, 0x2, 0x2, 0x115, 0x7bf, 
+       0x3, 0x2, 0x2, 0x2, 0x117, 0x7c6, 0x3, 0x2, 0x2, 0x2, 0x119, 0x7cd, 
+       0x3, 0x2, 0x2, 0x2, 0x11b, 0x7d4, 0x3, 0x2, 0x2, 0x2, 0x11d, 0x7db, 
+       0x3, 0x2, 0x2, 0x2, 0x11f, 0x7e2, 0x3, 0x2, 0x2, 0x2, 0x121, 0x7ec, 
+       0x3, 0x2, 0x2, 0x2, 0x123, 0x7f1, 0x3, 0x2, 0x2, 0x2, 0x125, 0x7f9, 
+       0x3, 0x2, 0x2, 0x2, 0x127, 0x800, 0x3, 0x2, 0x2, 0x2, 0x129, 0x80b, 
+       0x3, 0x2, 0x2, 0x2, 0x12b, 0x810, 0x3, 0x2, 0x2, 0x2, 0x12d, 0x817, 
+       0x3, 0x2, 0x2, 0x2, 0x12f, 0x827, 0x3, 0x2, 0x2, 0x2, 0x131, 0x835, 
+       0x3, 0x2, 0x2, 0x2, 0x133, 0x83c, 0x3, 0x2, 0x2, 0x2, 0x135, 0x840, 
+       0x3, 0x2, 0x2, 0x2, 0x137, 0x84c, 0x3, 0x2, 0x2, 0x2, 0x139, 0x855, 
+       0x3, 0x2, 0x2, 0x2, 0x13b, 0x85d, 0x3, 0x2, 0x2, 0x2, 0x13d, 0x868, 
+       0x3, 0x2, 0x2, 0x2, 0x13f, 0x86e, 0x3, 0x2, 0x2, 0x2, 0x141, 0x87a, 
+       0x3, 0x2, 0x2, 0x2, 0x143, 0x882, 0x3, 0x2, 0x2, 0x2, 0x145, 0x89a, 
+       0x3, 0x2, 0x2, 0x2, 0x147, 0x8bd, 0x3, 0x2, 0x2, 0x2, 0x149, 0x8df, 
+       0x3, 0x2, 0x2, 0x2, 0x14b, 0x8fa, 0x3, 0x2, 0x2, 0x2, 0x14d, 0x91a, 
+       0x3, 0x2, 0x2, 0x2, 0x14f, 0x935, 0x3, 0x2, 0x2, 0x2, 0x151, 0x955, 
+       0x3, 0x2, 0x2, 0x2, 0x153, 0x970, 0x3, 0x2, 0x2, 0x2, 0x155, 0x978, 
+       0x3, 0x2, 0x2, 0x2, 0x157, 0x998, 0x3, 0x2, 0x2, 0x2, 0x159, 0x9a1, 
+       0x3, 0x2, 0x2, 0x2, 0x15b, 0x9a8, 0x3, 0x2, 0x2, 0x2, 0x15d, 0x9b2, 
+       0x3, 0x2, 0x2, 0x2, 0x15f, 0x9bb, 0x3, 0x2, 0x2, 0x2, 0x161, 0x9cf, 
+       0x3, 0x2, 0x2, 0x2, 0x163, 0x9e2, 0x3, 0x2, 0x2, 0x2, 0x165, 0x9ee, 
+       0x3, 0x2, 0x2, 0x2, 0x167, 0x9ff, 0x3, 0x2, 0x2, 0x2, 0x169, 0xa0b, 
+       0x3, 0x2, 0x2, 0x2, 0x16b, 0xa1c, 0x3, 0x2, 0x2, 0x2, 0x16d, 0xa28, 
+       0x3, 0x2, 0x2, 0x2, 0x16f, 0xa2f, 0x3, 0x2, 0x2, 0x2, 0x171, 0xa37, 
+       0x3, 0x2, 0x2, 0x2, 0x173, 0xa3f, 0x3, 0x2, 0x2, 0x2, 0x175, 0xa56, 
+       0x3, 0x2, 0x2, 0x2, 0x177, 0xa63, 0x3, 0x2, 0x2, 0x2, 0x179, 0xa71, 
+       0x3, 0x2, 0x2, 0x2, 0x17b, 0xa78, 0x3, 0x2, 0x2, 0x2, 0x17d, 0xa7e, 
+       0x3, 0x2, 0x2, 0x2, 0x17f, 0xa85, 0x3, 0x2, 0x2, 0x2, 0x181, 0xa8c, 
+       0x3, 0x2, 0x2, 0x2, 0x183, 0xa9d, 0x3, 0x2, 0x2, 0x2, 0x185, 0xaaa, 
+       0x3, 0x2, 0x2, 0x2, 0x187, 0xab9, 0x3, 0x2, 0x2, 0x2, 0x189, 0xac0, 
+       0x3, 0x2, 0x2, 0x2, 0x18b, 0xac8, 0x3, 0x2, 0x2, 0x2, 0x18d, 0xad2, 
+       0x3, 0x2, 0x2, 0x2, 0x18f, 0xae1, 0x3, 0x2, 0x2, 0x2, 0x191, 0xaeb, 
+       0x3, 0x2, 0x2, 0x2, 0x193, 0xafa, 0x3, 0x2, 0x2, 0x2, 0x195, 0xb06, 
+       0x3, 0x2, 0x2, 0x2, 0x197, 0xb17, 0x3, 0x2, 0x2, 0x2, 0x199, 0xb21, 
+       0x3, 0x2, 0x2, 0x2, 0x19b, 0xb2d, 0x3, 0x2, 0x2, 0x2, 0x19d, 0xb3e, 
+       0x3, 0x2, 0x2, 0x2, 0x19f, 0xb47, 0x3, 0x2, 0x2, 0x2, 0x1a1, 0xb53, 
+       0x3, 0x2, 0x2, 0x2, 0x1a3, 0xb62, 0x3, 0x2, 0x2, 0x2, 0x1a5, 0xb6a, 
+       0x3, 0x2, 0x2, 0x2, 0x1a7, 0xb6f, 0x3, 0x2, 0x2, 0x2, 0x1a9, 0xb75, 
+       0x3, 0x2, 0x2, 0x2, 0x1ab, 0xb7b, 0x3, 0x2, 0x2, 0x2, 0x1ad, 0xb81, 
+       0x3, 0x2, 0x2, 0x2, 0x1af, 0xb87, 0x3, 0x2, 0x2, 0x2, 0x1b1, 0xb8f, 
+       0x3, 0x2, 0x2, 0x2, 0x1b3, 0xb97, 0x3, 0x2, 0x2, 0x2, 0x1b5, 0xb9f, 
+       0x3, 0x2, 0x2, 0x2, 0x1b7, 0xba7, 0x3, 0x2, 0x2, 0x2, 0x1b9, 0xbaf, 
+       0x3, 0x2, 0x2, 0x2, 0x1bb, 0xbb7, 0x3, 0x2, 0x2, 0x2, 0x1bd, 0xbbf, 
+       0x3, 0x2, 0x2, 0x2, 0x1bf, 0xbc7, 0x3, 0x2, 0x2, 0x2, 0x1c1, 0xbcf, 
+       0x3, 0x2, 0x2, 0x2, 0x1c3, 0xbd7, 0x3, 0x2, 0x2, 0x2, 0x1c5, 0xbdf, 
+       0x3, 0x2, 0x2, 0x2, 0x1c7, 0xbe7, 0x3, 0x2, 0x2, 0x2, 0x1c9, 0xbef, 
+       0x3, 0x2, 0x2, 0x2, 0x1cb, 0xbf7, 0x3, 0x2, 0x2, 0x2, 0x1cd, 0xbff, 
+       0x3, 0x2, 0x2, 0x2, 0x1cf, 0xc07, 0x3, 0x2, 0x2, 0x2, 0x1d1, 0xc10, 
+       0x3, 0x2, 0x2, 0x2, 0x1d3, 0xc19, 0x3, 0x2, 0x2, 0x2, 0x1d5, 0xc22, 
+       0x3, 0x2, 0x2, 0x2, 0x1d7, 0xc28, 0x3, 0x2, 0x2, 0x2, 0x1d9, 0xc31, 
+       0x3, 0x2, 0x2, 0x2, 0x1db, 0xc37, 0x3, 0x2, 0x2, 0x2, 0x1dd, 0xc3e, 
+       0x3, 0x2, 0x2, 0x2, 0x1df, 0xc45, 0x3, 0x2, 0x2, 0x2, 0x1e1, 0xc4c, 
+       0x3, 0x2, 0x2, 0x2, 0x1e3, 0xc53, 0x3, 0x2, 0x2, 0x2, 0x1e5, 0xc5c, 
+       0x3, 0x2, 0x2, 0x2, 0x1e7, 0xc65, 0x3, 0x2, 0x2, 0x2, 0x1e9, 0xc6e, 
+       0x3, 0x2, 0x2, 0x2, 0x1eb, 0xc77, 0x3, 0x2, 0x2, 0x2, 0x1ed, 0xc80, 
+       0x3, 0x2, 0x2, 0x2, 0x1ef, 0xc89, 0x3, 0x2, 0x2, 0x2, 0x1f1, 0xc92, 
+       0x3, 0x2, 0x2, 0x2, 0x1f3, 0xc9b, 0x3, 0x2, 0x2, 0x2, 0x1f5, 0xca4, 
+       0x3, 0x2, 0x2, 0x2, 0x1f7, 0xcad, 0x3, 0x2, 0x2, 0x2, 0x1f9, 0xcb6, 
+       0x3, 0x2, 0x2, 0x2, 0x1fb, 0xcbf, 0x3, 0x2, 0x2, 0x2, 0x1fd, 0xcc8, 
+       0x3, 0x2, 0x2, 0x2, 0x1ff, 0xcd1, 0x3, 0x2, 0x2, 0x2, 0x201, 0xcda, 
+       0x3, 0x2, 0x2, 0x2, 0x203, 0xce3, 0x3, 0x2, 0x2, 0x2, 0x205, 0xcea, 
+       0x3, 0x2, 0x2, 0x2, 0x207, 0xcf3, 0x3, 0x2, 0x2, 0x2, 0x209, 0xcf8, 
+       0x3, 0x2, 0x2, 0x2, 0x20b, 0xcfe, 0x3, 0x2, 0x2, 0x2, 0x20d, 0xd10, 
+       0x3, 0x2, 0x2, 0x2, 0x20f, 0xd23, 0x3, 0x2, 0x2, 0x2, 0x211, 0xd37, 
+       0x3, 0x2, 0x2, 0x2, 0x213, 0xd55, 0x3, 0x2, 0x2, 0x2, 0x215, 0xd6c, 
+       0x3, 0x2, 0x2, 0x2, 0x217, 0xd85, 0x3, 0x2, 0x2, 0x2, 0x219, 0xd9f, 
+       0x3, 0x2, 0x2, 0x2, 0x21b, 0xdb0, 0x3, 0x2, 0x2, 0x2, 0x21d, 0xdcc, 
+       0x3, 0x2, 0x2, 0x2, 0x21f, 0xdd5, 0x3, 0x2, 0x2, 0x2, 0x221, 0xdde, 
+       0x3, 0x2, 0x2, 0x2, 0x223, 0xde7, 0x3, 0x2, 0x2, 0x2, 0x225, 0xdf3, 
+       0x3, 0x2, 0x2, 0x2, 0x227, 0xdfd, 0x3, 0x2, 0x2, 0x2, 0x229, 0xe07, 
+       0x3, 0x2, 0x2, 0x2, 0x22b, 0xe11, 0x3, 0x2, 0x2, 0x2, 0x22d, 0xe1f, 
+       0x3, 0x2, 0x2, 0x2, 0x22f, 0xe26, 0x3, 0x2, 0x2, 0x2, 0x231, 0xe2d, 
+       0x3, 0x2, 0x2, 0x2, 0x233, 0xe38, 0x3, 0x2, 0x2, 0x2, 0x235, 0xe47, 
+       0x3, 0x2, 0x2, 0x2, 0x237, 0xe55, 0x3, 0x2, 0x2, 0x2, 0x239, 0xe5b, 
+       0x3, 0x2, 0x2, 0x2, 0x23b, 0xe62, 0x3, 0x2, 0x2, 0x2, 0x23d, 0xe69, 
+       0x3, 0x2, 0x2, 0x2, 0x23f, 0xe74, 0x3, 0x2, 0x2, 0x2, 0x241, 0xe7c, 
+       0x3, 0x2, 0x2, 0x2, 0x243, 0xe84, 0x3, 0x2, 0x2, 0x2, 0x245, 0xe89, 
+       0x3, 0x2, 0x2, 0x2, 0x247, 0xe90, 0x3, 0x2, 0x2, 0x2, 0x249, 0xe96, 
+       0x3, 0x2, 0x2, 0x2, 0x24b, 0xe9d, 0x3, 0x2, 0x2, 0x2, 0x24d, 0xea8, 
+       0x3, 0x2, 0x2, 0x2, 0x24f, 0xeae, 0x3, 0x2, 0x2, 0x2, 0x251, 0xeb3, 
+       0x3, 0x2, 0x2, 0x2, 0x253, 0xeb9, 0x3, 0x2, 0x2, 0x2, 0x255, 0xec3, 
+       0x3, 0x2, 0x2, 0x2, 0x257, 0xecb, 0x3, 0x2, 0x2, 0x2, 0x259, 0xed4, 
+       0x3, 0x2, 0x2, 0x2, 0x25b, 0xee1, 0x3, 0x2, 0x2, 0x2, 0x25d, 0xee8, 
+       0x3, 0x2, 0x2, 0x2, 0x25f, 0xef4, 0x3, 0x2, 0x2, 0x2, 0x261, 0xf05, 
+       0x3, 0x2, 0x2, 0x2, 0x263, 0xf11, 0x3, 0x2, 0x2, 0x2, 0x265, 0xf13, 
+       0x3, 0x2, 0x2, 0x2, 0x267, 0xf15, 0x3, 0x2, 0x2, 0x2, 0x269, 0xf17, 
+       0x3, 0x2, 0x2, 0x2, 0x26b, 0xf19, 0x3, 0x2, 0x2, 0x2, 0x26d, 0xf1b, 
+       0x3, 0x2, 0x2, 0x2, 0x26f, 0xf1d, 0x3, 0x2, 0x2, 0x2, 0x271, 0xf20, 
+       0x3, 0x2, 0x2, 0x2, 0x273, 0xf22, 0x3, 0x2, 0x2, 0x2, 0x275, 0xf25, 
+       0x3, 0x2, 0x2, 0x2, 0x277, 0xf27, 0x3, 0x2, 0x2, 0x2, 0x279, 0xf2a, 
+       0x3, 0x2, 0x2, 0x2, 0x27b, 0xf2d, 0x3, 0x2, 0x2, 0x2, 0x27d, 0xf30, 
+       0x3, 0x2, 0x2, 0x2, 0x27f, 0xf32, 0x3, 0x2, 0x2, 0x2, 0x281, 0xf35, 
+       0x3, 0x2, 0x2, 0x2, 0x283, 0xf37, 0x3, 0x2, 0x2, 0x2, 0x285, 0xf3a, 
+       0x3, 0x2, 0x2, 0x2, 0x287, 0xf3c, 0x3, 0x2, 0x2, 0x2, 0x289, 0xf3e, 
+       0x3, 0x2, 0x2, 0x2, 0x28b, 0xf40, 0x3, 0x2, 0x2, 0x2, 0x28d, 0xf42, 
+       0x3, 0x2, 0x2, 0x2, 0x28f, 0xf44, 0x3, 0x2, 0x2, 0x2, 0x291, 0xf47, 
+       0x3, 0x2, 0x2, 0x2, 0x293, 0xf4a, 0x3, 0x2, 0x2, 0x2, 0x295, 0xf4c, 
+       0x3, 0x2, 0x2, 0x2, 0x297, 0xf4e, 0x3, 0x2, 0x2, 0x2, 0x299, 0xf50, 
+       0x3, 0x2, 0x2, 0x2, 0x29b, 0xf52, 0x3, 0x2, 0x2, 0x2, 0x29d, 0xf54, 
+       0x3, 0x2, 0x2, 0x2, 0x29f, 0xf57, 0x3, 0x2, 0x2, 0x2, 0x2a1, 0xf59, 
+       0x3, 0x2, 0x2, 0x2, 0x2a3, 0xf5b, 0x3, 0x2, 0x2, 0x2, 0x2a5, 0xf5d, 
+       0x3, 0x2, 0x2, 0x2, 0x2a7, 0xf60, 0x3, 0x2, 0x2, 0x2, 0x2a9, 0xf63, 
+       0x3, 0x2, 0x2, 0x2, 0x2ab, 0xf66, 0x3, 0x2, 0x2, 0x2, 0x2ad, 0xf69, 
+       0x3, 0x2, 0x2, 0x2, 0x2af, 0xf6c, 0x3, 0x2, 0x2, 0x2, 0x2b1, 0xf70, 
+       0x3, 0x2, 0x2, 0x2, 0x2b3, 0xf74, 0x3, 0x2, 0x2, 0x2, 0x2b5, 0xf77, 
+       0x3, 0x2, 0x2, 0x2, 0x2b7, 0xf7a, 0x3, 0x2, 0x2, 0x2, 0x2b9, 0xf7d, 
+       0x3, 0x2, 0x2, 0x2, 0x2bb, 0xf80, 0x3, 0x2, 0x2, 0x2, 0x2bd, 0xf83, 
+       0x3, 0x2, 0x2, 0x2, 0x2bf, 0xf85, 0x3, 0x2, 0x2, 0x2, 0x2c1, 0xf8a, 
+       0x3, 0x2, 0x2, 0x2, 0x2c3, 0xf90, 0x3, 0x2, 0x2, 0x2, 0x2c5, 0xf9f, 
+       0x3, 0x2, 0x2, 0x2, 0x2c7, 0xfa9, 0x3, 0x2, 0x2, 0x2, 0x2c9, 0xfb1, 
+       0x3, 0x2, 0x2, 0x2, 0x2cb, 0xfbd, 0x3, 0x2, 0x2, 0x2, 0x2cd, 0xfc4, 
+       0x3, 0x2, 0x2, 0x2, 0x2cf, 0xfd0, 0x3, 0x2, 0x2, 0x2, 0x2d1, 0xfe6, 
+       0x3, 0x2, 0x2, 0x2, 0x2d3, 0x1002, 0x3, 0x2, 0x2, 0x2, 0x2d5, 0x1016, 
+       0x3, 0x2, 0x2, 0x2, 0x2d7, 0x102c, 0x3, 0x2, 0x2, 0x2, 0x2d9, 0x1041, 
+       0x3, 0x2, 0x2, 0x2, 0x2db, 0x1060, 0x3, 0x2, 0x2, 0x2, 0x2dd, 0x107f, 
+       0x3, 0x2, 0x2, 0x2, 0x2df, 0x116a, 0x3, 0x2, 0x2, 0x2, 0x2e1, 0x1198, 
+       0x3, 0x2, 0x2, 0x2, 0x2e3, 0x119a, 0x3, 0x2, 0x2, 0x2, 0x2e5, 0x11a2, 
+       0x3, 0x2, 0x2, 0x2, 0x2e7, 0x11a4, 0x3, 0x2, 0x2, 0x2, 0x2e9, 0x11a7, 
+       0x3, 0x2, 0x2, 0x2, 0x2eb, 0x11af, 0x3, 0x2, 0x2, 0x2, 0x2ed, 0x11b6, 
+       0x3, 0x2, 0x2, 0x2, 0x2ef, 0x11c0, 0x3, 0x2, 0x2, 0x2, 0x2f1, 0x11cc, 
+       0x3, 0x2, 0x2, 0x2, 0x2f3, 0x11ce, 0x3, 0x2, 0x2, 0x2, 0x2f5, 0x11d1, 
+       0x3, 0x2, 0x2, 0x2, 0x2f7, 0x11d6, 0x3, 0x2, 0x2, 0x2, 0x2f9, 0x11e9, 
+       0x3, 0x2, 0x2, 0x2, 0x2fb, 0x11f3, 0x3, 0x2, 0x2, 0x2, 0x2fd, 0x11f5, 
+       0x3, 0x2, 0x2, 0x2, 0x2ff, 0x1203, 0x3, 0x2, 0x2, 0x2, 0x301, 0x1205, 
+       0x3, 0x2, 0x2, 0x2, 0x303, 0x1207, 0x3, 0x2, 0x2, 0x2, 0x305, 0x120a, 
+       0x3, 0x2, 0x2, 0x2, 0x307, 0x1211, 0x3, 0x2, 0x2, 0x2, 0x309, 0x1217, 
+       0x3, 0x2, 0x2, 0x2, 0x30b, 0x1219, 0x3, 0x2, 0x2, 0x2, 0x30d, 0x122d, 
+       0x3, 0x2, 0x2, 0x2, 0x30f, 0x1243, 0x3, 0x2, 0x2, 0x2, 0x311, 0x124e, 
+       0x3, 0x2, 0x2, 0x2, 0x313, 0x1252, 0x3, 0x2, 0x2, 0x2, 0x315, 0x1260, 
+       0x3, 0x2, 0x2, 0x2, 0x317, 0x318, 0x7, 0x43, 0x2, 0x2, 0x318, 0x319, 
+       0x7, 0x72, 0x2, 0x2, 0x319, 0x31a, 0x7, 0x72, 0x2, 0x2, 0x31a, 0x31b, 
+       0x7, 0x67, 0x2, 0x2, 0x31b, 0x31c, 0x7, 0x70, 0x2, 0x2, 0x31c, 0x31d, 
+       0x7, 0x66, 0x2, 0x2, 0x31d, 0x31e, 0x7, 0x55, 0x2, 0x2, 0x31e, 0x31f, 
+       0x7, 0x76, 0x2, 0x2, 0x31f, 0x320, 0x7, 0x74, 0x2, 0x2, 0x320, 0x321, 
+       0x7, 0x77, 0x2, 0x2, 0x321, 0x322, 0x7, 0x65, 0x2, 0x2, 0x322, 0x323, 
+       0x7, 0x76, 0x2, 0x2, 0x323, 0x324, 0x7, 0x77, 0x2, 0x2, 0x324, 0x325, 
+       0x7, 0x74, 0x2, 0x2, 0x325, 0x326, 0x7, 0x67, 0x2, 0x2, 0x326, 0x327, 
+       0x7, 0x66, 0x2, 0x2, 0x327, 0x328, 0x7, 0x44, 0x2, 0x2, 0x328, 0x329, 
+       0x7, 0x77, 0x2, 0x2, 0x329, 0x32a, 0x7, 0x68, 0x2, 0x2, 0x32a, 0x32b, 
+       0x7, 0x68, 0x2, 0x2, 0x32b, 0x32c, 0x7, 0x67, 0x2, 0x2, 0x32c, 0x32d, 
+       0x7, 0x74, 0x2, 0x2, 0x32d, 0x4, 0x3, 0x2, 0x2, 0x2, 0x32e, 0x32f, 
+       0x7, 0x64, 0x2, 0x2, 0x32f, 0x330, 0x7, 0x71, 0x2, 0x2, 0x330, 0x331, 
+       0x7, 0x71, 0x2, 0x2, 0x331, 0x332, 0x7, 0x6e, 0x2, 0x2, 0x332, 0x6, 
+       0x3, 0x2, 0x2, 0x2, 0x333, 0x334, 0x7, 0x64, 0x2, 0x2, 0x334, 0x335, 
+       0x7, 0x71, 0x2, 0x2, 0x335, 0x336, 0x7, 0x71, 0x2, 0x2, 0x336, 0x337, 
+       0x7, 0x6e, 0x2, 0x2, 0x337, 0x338, 0x7, 0x33, 0x2, 0x2, 0x338, 0x8, 
+       0x3, 0x2, 0x2, 0x2, 0x339, 0x33a, 0x7, 0x64, 0x2, 0x2, 0x33a, 0x33b, 
+       0x7, 0x71, 0x2, 0x2, 0x33b, 0x33c, 0x7, 0x71, 0x2, 0x2, 0x33c, 0x33d, 
+       0x7, 0x6e, 0x2, 0x2, 0x33d, 0x33e, 0x7, 0x34, 0x2, 0x2, 0x33e, 0xa, 
+       0x3, 0x2, 0x2, 0x2, 0x33f, 0x340, 0x7, 0x64, 0x2, 0x2, 0x340, 0x341, 
+       0x7, 0x71, 0x2, 0x2, 0x341, 0x342, 0x7, 0x71, 0x2, 0x2, 0x342, 0x343, 
+       0x7, 0x6e, 0x2, 0x2, 0x343, 0x344, 0x7, 0x35, 0x2, 0x2, 0x344, 0xc, 
+       0x3, 0x2, 0x2, 0x2, 0x345, 0x346, 0x7, 0x64, 0x2, 0x2, 0x346, 0x347, 
+       0x7, 0x71, 0x2, 0x2, 0x347, 0x348, 0x7, 0x71, 0x2, 0x2, 0x348, 0x349, 
+       0x7, 0x6e, 0x2, 0x2, 0x349, 0x34a, 0x7, 0x36, 0x2, 0x2, 0x34a, 0xe, 
        0x3, 0x2, 0x2, 0x2, 0x34b, 0x34c, 0x7, 0x64, 0x2, 0x2, 0x34c, 0x34d, 
        0x3, 0x2, 0x2, 0x2, 0x34b, 0x34c, 0x7, 0x64, 0x2, 0x2, 0x34c, 0x34d, 
        0x7, 0x71, 0x2, 0x2, 0x34d, 0x34e, 0x7, 0x71, 0x2, 0x2, 0x34e, 0x34f, 
        0x7, 0x71, 0x2, 0x2, 0x34d, 0x34e, 0x7, 0x71, 0x2, 0x2, 0x34e, 0x34f, 
        0x7, 0x6e, 0x2, 0x2, 0x34f, 0x350, 0x7, 0x33, 0x2, 0x2, 0x350, 0x351, 
        0x7, 0x6e, 0x2, 0x2, 0x34f, 0x350, 0x7, 0x33, 0x2, 0x2, 0x350, 0x351, 
-       0x7, 0x7a, 0x2, 0x2, 0x351, 0x352, 0x7, 0x35, 0x2, 0x2, 0x352, 0x14, 
+       0x7, 0x7a, 0x2, 0x2, 0x351, 0x352, 0x7, 0x33, 0x2, 0x2, 0x352, 0x10, 
        0x3, 0x2, 0x2, 0x2, 0x353, 0x354, 0x7, 0x64, 0x2, 0x2, 0x354, 0x355, 
        0x3, 0x2, 0x2, 0x2, 0x353, 0x354, 0x7, 0x64, 0x2, 0x2, 0x354, 0x355, 
        0x7, 0x71, 0x2, 0x2, 0x355, 0x356, 0x7, 0x71, 0x2, 0x2, 0x356, 0x357, 
        0x7, 0x71, 0x2, 0x2, 0x355, 0x356, 0x7, 0x71, 0x2, 0x2, 0x356, 0x357, 
        0x7, 0x6e, 0x2, 0x2, 0x357, 0x358, 0x7, 0x33, 0x2, 0x2, 0x358, 0x359, 
        0x7, 0x6e, 0x2, 0x2, 0x357, 0x358, 0x7, 0x33, 0x2, 0x2, 0x358, 0x359, 
-       0x7, 0x7a, 0x2, 0x2, 0x359, 0x35a, 0x7, 0x36, 0x2, 0x2, 0x35a, 0x16, 
+       0x7, 0x7a, 0x2, 0x2, 0x359, 0x35a, 0x7, 0x34, 0x2, 0x2, 0x35a, 0x12, 
        0x3, 0x2, 0x2, 0x2, 0x35b, 0x35c, 0x7, 0x64, 0x2, 0x2, 0x35c, 0x35d, 
        0x3, 0x2, 0x2, 0x2, 0x35b, 0x35c, 0x7, 0x64, 0x2, 0x2, 0x35c, 0x35d, 
        0x7, 0x71, 0x2, 0x2, 0x35d, 0x35e, 0x7, 0x71, 0x2, 0x2, 0x35e, 0x35f, 
        0x7, 0x71, 0x2, 0x2, 0x35d, 0x35e, 0x7, 0x71, 0x2, 0x2, 0x35e, 0x35f, 
-       0x7, 0x6e, 0x2, 0x2, 0x35f, 0x360, 0x7, 0x34, 0x2, 0x2, 0x360, 0x361, 
-       0x7, 0x7a, 0x2, 0x2, 0x361, 0x362, 0x7, 0x33, 0x2, 0x2, 0x362, 0x18, 
+       0x7, 0x6e, 0x2, 0x2, 0x35f, 0x360, 0x7, 0x33, 0x2, 0x2, 0x360, 0x361, 
+       0x7, 0x7a, 0x2, 0x2, 0x361, 0x362, 0x7, 0x35, 0x2, 0x2, 0x362, 0x14, 
        0x3, 0x2, 0x2, 0x2, 0x363, 0x364, 0x7, 0x64, 0x2, 0x2, 0x364, 0x365, 
        0x3, 0x2, 0x2, 0x2, 0x363, 0x364, 0x7, 0x64, 0x2, 0x2, 0x364, 0x365, 
        0x7, 0x71, 0x2, 0x2, 0x365, 0x366, 0x7, 0x71, 0x2, 0x2, 0x366, 0x367, 
        0x7, 0x71, 0x2, 0x2, 0x365, 0x366, 0x7, 0x71, 0x2, 0x2, 0x366, 0x367, 
-       0x7, 0x6e, 0x2, 0x2, 0x367, 0x368, 0x7, 0x34, 0x2, 0x2, 0x368, 0x369, 
-       0x7, 0x7a, 0x2, 0x2, 0x369, 0x36a, 0x7, 0x34, 0x2, 0x2, 0x36a, 0x1a, 
+       0x7, 0x6e, 0x2, 0x2, 0x367, 0x368, 0x7, 0x33, 0x2, 0x2, 0x368, 0x369, 
+       0x7, 0x7a, 0x2, 0x2, 0x369, 0x36a, 0x7, 0x36, 0x2, 0x2, 0x36a, 0x16, 
        0x3, 0x2, 0x2, 0x2, 0x36b, 0x36c, 0x7, 0x64, 0x2, 0x2, 0x36c, 0x36d, 
        0x3, 0x2, 0x2, 0x2, 0x36b, 0x36c, 0x7, 0x64, 0x2, 0x2, 0x36c, 0x36d, 
        0x7, 0x71, 0x2, 0x2, 0x36d, 0x36e, 0x7, 0x71, 0x2, 0x2, 0x36e, 0x36f, 
        0x7, 0x71, 0x2, 0x2, 0x36d, 0x36e, 0x7, 0x71, 0x2, 0x2, 0x36e, 0x36f, 
        0x7, 0x6e, 0x2, 0x2, 0x36f, 0x370, 0x7, 0x34, 0x2, 0x2, 0x370, 0x371, 
        0x7, 0x6e, 0x2, 0x2, 0x36f, 0x370, 0x7, 0x34, 0x2, 0x2, 0x370, 0x371, 
-       0x7, 0x7a, 0x2, 0x2, 0x371, 0x372, 0x7, 0x35, 0x2, 0x2, 0x372, 0x1c, 
+       0x7, 0x7a, 0x2, 0x2, 0x371, 0x372, 0x7, 0x33, 0x2, 0x2, 0x372, 0x18, 
        0x3, 0x2, 0x2, 0x2, 0x373, 0x374, 0x7, 0x64, 0x2, 0x2, 0x374, 0x375, 
        0x3, 0x2, 0x2, 0x2, 0x373, 0x374, 0x7, 0x64, 0x2, 0x2, 0x374, 0x375, 
        0x7, 0x71, 0x2, 0x2, 0x375, 0x376, 0x7, 0x71, 0x2, 0x2, 0x376, 0x377, 
        0x7, 0x71, 0x2, 0x2, 0x375, 0x376, 0x7, 0x71, 0x2, 0x2, 0x376, 0x377, 
        0x7, 0x6e, 0x2, 0x2, 0x377, 0x378, 0x7, 0x34, 0x2, 0x2, 0x378, 0x379, 
        0x7, 0x6e, 0x2, 0x2, 0x377, 0x378, 0x7, 0x34, 0x2, 0x2, 0x378, 0x379, 
-       0x7, 0x7a, 0x2, 0x2, 0x379, 0x37a, 0x7, 0x36, 0x2, 0x2, 0x37a, 0x1e, 
+       0x7, 0x7a, 0x2, 0x2, 0x379, 0x37a, 0x7, 0x34, 0x2, 0x2, 0x37a, 0x1a, 
        0x3, 0x2, 0x2, 0x2, 0x37b, 0x37c, 0x7, 0x64, 0x2, 0x2, 0x37c, 0x37d, 
        0x3, 0x2, 0x2, 0x2, 0x37b, 0x37c, 0x7, 0x64, 0x2, 0x2, 0x37c, 0x37d, 
        0x7, 0x71, 0x2, 0x2, 0x37d, 0x37e, 0x7, 0x71, 0x2, 0x2, 0x37e, 0x37f, 
        0x7, 0x71, 0x2, 0x2, 0x37d, 0x37e, 0x7, 0x71, 0x2, 0x2, 0x37e, 0x37f, 
-       0x7, 0x6e, 0x2, 0x2, 0x37f, 0x380, 0x7, 0x35, 0x2, 0x2, 0x380, 0x381, 
-       0x7, 0x7a, 0x2, 0x2, 0x381, 0x382, 0x7, 0x33, 0x2, 0x2, 0x382, 0x20, 
+       0x7, 0x6e, 0x2, 0x2, 0x37f, 0x380, 0x7, 0x34, 0x2, 0x2, 0x380, 0x381, 
+       0x7, 0x7a, 0x2, 0x2, 0x381, 0x382, 0x7, 0x35, 0x2, 0x2, 0x382, 0x1c, 
        0x3, 0x2, 0x2, 0x2, 0x383, 0x384, 0x7, 0x64, 0x2, 0x2, 0x384, 0x385, 
        0x3, 0x2, 0x2, 0x2, 0x383, 0x384, 0x7, 0x64, 0x2, 0x2, 0x384, 0x385, 
        0x7, 0x71, 0x2, 0x2, 0x385, 0x386, 0x7, 0x71, 0x2, 0x2, 0x386, 0x387, 
        0x7, 0x71, 0x2, 0x2, 0x385, 0x386, 0x7, 0x71, 0x2, 0x2, 0x386, 0x387, 
-       0x7, 0x6e, 0x2, 0x2, 0x387, 0x388, 0x7, 0x35, 0x2, 0x2, 0x388, 0x389, 
-       0x7, 0x7a, 0x2, 0x2, 0x389, 0x38a, 0x7, 0x34, 0x2, 0x2, 0x38a, 0x22, 
+       0x7, 0x6e, 0x2, 0x2, 0x387, 0x388, 0x7, 0x34, 0x2, 0x2, 0x388, 0x389, 
+       0x7, 0x7a, 0x2, 0x2, 0x389, 0x38a, 0x7, 0x36, 0x2, 0x2, 0x38a, 0x1e, 
        0x3, 0x2, 0x2, 0x2, 0x38b, 0x38c, 0x7, 0x64, 0x2, 0x2, 0x38c, 0x38d, 
        0x3, 0x2, 0x2, 0x2, 0x38b, 0x38c, 0x7, 0x64, 0x2, 0x2, 0x38c, 0x38d, 
        0x7, 0x71, 0x2, 0x2, 0x38d, 0x38e, 0x7, 0x71, 0x2, 0x2, 0x38e, 0x38f, 
        0x7, 0x71, 0x2, 0x2, 0x38d, 0x38e, 0x7, 0x71, 0x2, 0x2, 0x38e, 0x38f, 
        0x7, 0x6e, 0x2, 0x2, 0x38f, 0x390, 0x7, 0x35, 0x2, 0x2, 0x390, 0x391, 
        0x7, 0x6e, 0x2, 0x2, 0x38f, 0x390, 0x7, 0x35, 0x2, 0x2, 0x390, 0x391, 
-       0x7, 0x7a, 0x2, 0x2, 0x391, 0x392, 0x7, 0x35, 0x2, 0x2, 0x392, 0x24, 
+       0x7, 0x7a, 0x2, 0x2, 0x391, 0x392, 0x7, 0x33, 0x2, 0x2, 0x392, 0x20, 
        0x3, 0x2, 0x2, 0x2, 0x393, 0x394, 0x7, 0x64, 0x2, 0x2, 0x394, 0x395, 
        0x3, 0x2, 0x2, 0x2, 0x393, 0x394, 0x7, 0x64, 0x2, 0x2, 0x394, 0x395, 
        0x7, 0x71, 0x2, 0x2, 0x395, 0x396, 0x7, 0x71, 0x2, 0x2, 0x396, 0x397, 
        0x7, 0x71, 0x2, 0x2, 0x395, 0x396, 0x7, 0x71, 0x2, 0x2, 0x396, 0x397, 
        0x7, 0x6e, 0x2, 0x2, 0x397, 0x398, 0x7, 0x35, 0x2, 0x2, 0x398, 0x399, 
        0x7, 0x6e, 0x2, 0x2, 0x397, 0x398, 0x7, 0x35, 0x2, 0x2, 0x398, 0x399, 
-       0x7, 0x7a, 0x2, 0x2, 0x399, 0x39a, 0x7, 0x36, 0x2, 0x2, 0x39a, 0x26, 
+       0x7, 0x7a, 0x2, 0x2, 0x399, 0x39a, 0x7, 0x34, 0x2, 0x2, 0x39a, 0x22, 
        0x3, 0x2, 0x2, 0x2, 0x39b, 0x39c, 0x7, 0x64, 0x2, 0x2, 0x39c, 0x39d, 
        0x3, 0x2, 0x2, 0x2, 0x39b, 0x39c, 0x7, 0x64, 0x2, 0x2, 0x39c, 0x39d, 
        0x7, 0x71, 0x2, 0x2, 0x39d, 0x39e, 0x7, 0x71, 0x2, 0x2, 0x39e, 0x39f, 
        0x7, 0x71, 0x2, 0x2, 0x39d, 0x39e, 0x7, 0x71, 0x2, 0x2, 0x39e, 0x39f, 
-       0x7, 0x6e, 0x2, 0x2, 0x39f, 0x3a0, 0x7, 0x36, 0x2, 0x2, 0x3a0, 0x3a1, 
-       0x7, 0x7a, 0x2, 0x2, 0x3a1, 0x3a2, 0x7, 0x33, 0x2, 0x2, 0x3a2, 0x28, 
+       0x7, 0x6e, 0x2, 0x2, 0x39f, 0x3a0, 0x7, 0x35, 0x2, 0x2, 0x3a0, 0x3a1, 
+       0x7, 0x7a, 0x2, 0x2, 0x3a1, 0x3a2, 0x7, 0x35, 0x2, 0x2, 0x3a2, 0x24, 
        0x3, 0x2, 0x2, 0x2, 0x3a3, 0x3a4, 0x7, 0x64, 0x2, 0x2, 0x3a4, 0x3a5, 
        0x3, 0x2, 0x2, 0x2, 0x3a3, 0x3a4, 0x7, 0x64, 0x2, 0x2, 0x3a4, 0x3a5, 
        0x7, 0x71, 0x2, 0x2, 0x3a5, 0x3a6, 0x7, 0x71, 0x2, 0x2, 0x3a6, 0x3a7, 
        0x7, 0x71, 0x2, 0x2, 0x3a5, 0x3a6, 0x7, 0x71, 0x2, 0x2, 0x3a6, 0x3a7, 
-       0x7, 0x6e, 0x2, 0x2, 0x3a7, 0x3a8, 0x7, 0x36, 0x2, 0x2, 0x3a8, 0x3a9, 
-       0x7, 0x7a, 0x2, 0x2, 0x3a9, 0x3aa, 0x7, 0x34, 0x2, 0x2, 0x3aa, 0x2a, 
+       0x7, 0x6e, 0x2, 0x2, 0x3a7, 0x3a8, 0x7, 0x35, 0x2, 0x2, 0x3a8, 0x3a9, 
+       0x7, 0x7a, 0x2, 0x2, 0x3a9, 0x3aa, 0x7, 0x36, 0x2, 0x2, 0x3aa, 0x26, 
        0x3, 0x2, 0x2, 0x2, 0x3ab, 0x3ac, 0x7, 0x64, 0x2, 0x2, 0x3ac, 0x3ad, 
        0x3, 0x2, 0x2, 0x2, 0x3ab, 0x3ac, 0x7, 0x64, 0x2, 0x2, 0x3ac, 0x3ad, 
        0x7, 0x71, 0x2, 0x2, 0x3ad, 0x3ae, 0x7, 0x71, 0x2, 0x2, 0x3ae, 0x3af, 
        0x7, 0x71, 0x2, 0x2, 0x3ad, 0x3ae, 0x7, 0x71, 0x2, 0x2, 0x3ae, 0x3af, 
        0x7, 0x6e, 0x2, 0x2, 0x3af, 0x3b0, 0x7, 0x36, 0x2, 0x2, 0x3b0, 0x3b1, 
        0x7, 0x6e, 0x2, 0x2, 0x3af, 0x3b0, 0x7, 0x36, 0x2, 0x2, 0x3b0, 0x3b1, 
-       0x7, 0x7a, 0x2, 0x2, 0x3b1, 0x3b2, 0x7, 0x35, 0x2, 0x2, 0x3b2, 0x2c, 
+       0x7, 0x7a, 0x2, 0x2, 0x3b1, 0x3b2, 0x7, 0x33, 0x2, 0x2, 0x3b2, 0x28, 
        0x3, 0x2, 0x2, 0x2, 0x3b3, 0x3b4, 0x7, 0x64, 0x2, 0x2, 0x3b4, 0x3b5, 
        0x3, 0x2, 0x2, 0x2, 0x3b3, 0x3b4, 0x7, 0x64, 0x2, 0x2, 0x3b4, 0x3b5, 
        0x7, 0x71, 0x2, 0x2, 0x3b5, 0x3b6, 0x7, 0x71, 0x2, 0x2, 0x3b6, 0x3b7, 
        0x7, 0x71, 0x2, 0x2, 0x3b5, 0x3b6, 0x7, 0x71, 0x2, 0x2, 0x3b6, 0x3b7, 
        0x7, 0x6e, 0x2, 0x2, 0x3b7, 0x3b8, 0x7, 0x36, 0x2, 0x2, 0x3b8, 0x3b9, 
        0x7, 0x6e, 0x2, 0x2, 0x3b7, 0x3b8, 0x7, 0x36, 0x2, 0x2, 0x3b8, 0x3b9, 
-       0x7, 0x7a, 0x2, 0x2, 0x3b9, 0x3ba, 0x7, 0x36, 0x2, 0x2, 0x3ba, 0x2e, 
-       0x3, 0x2, 0x2, 0x2, 0x3bb, 0x3bc, 0x7, 0x44, 0x2, 0x2, 0x3bc, 0x3bd, 
-       0x7, 0x77, 0x2, 0x2, 0x3bd, 0x3be, 0x7, 0x68, 0x2, 0x2, 0x3be, 0x3bf, 
-       0x7, 0x68, 0x2, 0x2, 0x3bf, 0x3c0, 0x7, 0x67, 0x2, 0x2, 0x3c0, 0x3c1, 
-       0x7, 0x74, 0x2, 0x2, 0x3c1, 0x30, 0x3, 0x2, 0x2, 0x2, 0x3c2, 0x3c3, 
-       0x7, 0x44, 0x2, 0x2, 0x3c3, 0x3c4, 0x7, 0x77, 0x2, 0x2, 0x3c4, 0x3c5, 
-       0x7, 0x6b, 0x2, 0x2, 0x3c5, 0x3c6, 0x7, 0x6e, 0x2, 0x2, 0x3c6, 0x3c7, 
-       0x7, 0x76, 0x2, 0x2, 0x3c7, 0x3c8, 0x7, 0x4b, 0x2, 0x2, 0x3c8, 0x3c9, 
-       0x7, 0x70, 0x2, 0x2, 0x3c9, 0x3ca, 0x7, 0x56, 0x2, 0x2, 0x3ca, 0x3cb, 
-       0x7, 0x74, 0x2, 0x2, 0x3cb, 0x3cc, 0x7, 0x6b, 0x2, 0x2, 0x3cc, 0x3cd, 
-       0x7, 0x63, 0x2, 0x2, 0x3cd, 0x3ce, 0x7, 0x70, 0x2, 0x2, 0x3ce, 0x3cf, 
-       0x7, 0x69, 0x2, 0x2, 0x3cf, 0x3d0, 0x7, 0x6e, 0x2, 0x2, 0x3d0, 0x3d1, 
-       0x7, 0x67, 0x2, 0x2, 0x3d1, 0x3d2, 0x7, 0x4b, 0x2, 0x2, 0x3d2, 0x3d3, 
-       0x7, 0x70, 0x2, 0x2, 0x3d3, 0x3d4, 0x7, 0x76, 0x2, 0x2, 0x3d4, 0x3d5, 
-       0x7, 0x67, 0x2, 0x2, 0x3d5, 0x3d6, 0x7, 0x74, 0x2, 0x2, 0x3d6, 0x3d7, 
-       0x7, 0x75, 0x2, 0x2, 0x3d7, 0x3d8, 0x7, 0x67, 0x2, 0x2, 0x3d8, 0x3d9, 
-       0x7, 0x65, 0x2, 0x2, 0x3d9, 0x3da, 0x7, 0x76, 0x2, 0x2, 0x3da, 0x3db, 
-       0x7, 0x6b, 0x2, 0x2, 0x3db, 0x3dc, 0x7, 0x71, 0x2, 0x2, 0x3dc, 0x3dd, 
-       0x7, 0x70, 0x2, 0x2, 0x3dd, 0x3de, 0x7, 0x43, 0x2, 0x2, 0x3de, 0x3df, 
-       0x7, 0x76, 0x2, 0x2, 0x3df, 0x3e0, 0x7, 0x76, 0x2, 0x2, 0x3e0, 0x3e1, 
-       0x7, 0x74, 0x2, 0x2, 0x3e1, 0x3e2, 0x7, 0x6b, 0x2, 0x2, 0x3e2, 0x3e3, 
-       0x7, 0x64, 0x2, 0x2, 0x3e3, 0x3e4, 0x7, 0x77, 0x2, 0x2, 0x3e4, 0x3e5, 
-       0x7, 0x76, 0x2, 0x2, 0x3e5, 0x3e6, 0x7, 0x67, 0x2, 0x2, 0x3e6, 0x3e7, 
-       0x7, 0x75, 0x2, 0x2, 0x3e7, 0x32, 0x3, 0x2, 0x2, 0x2, 0x3e8, 0x3e9, 
-       0x7, 0x44, 0x2, 0x2, 0x3e9, 0x3ea, 0x7, 0x7b, 0x2, 0x2, 0x3ea, 0x3eb, 
-       0x7, 0x76, 0x2, 0x2, 0x3eb, 0x3ec, 0x7, 0x67, 0x2, 0x2, 0x3ec, 0x3ed, 
-       0x7, 0x43, 0x2, 0x2, 0x3ed, 0x3ee, 0x7, 0x66, 0x2, 0x2, 0x3ee, 0x3ef, 
-       0x7, 0x66, 0x2, 0x2, 0x3ef, 0x3f0, 0x7, 0x74, 0x2, 0x2, 0x3f0, 0x3f1, 
-       0x7, 0x67, 0x2, 0x2, 0x3f1, 0x3f2, 0x7, 0x75, 0x2, 0x2, 0x3f2, 0x3f3, 
-       0x7, 0x75, 0x2, 0x2, 0x3f3, 0x3f4, 0x7, 0x44, 0x2, 0x2, 0x3f4, 0x3f5, 
-       0x7, 0x77, 0x2, 0x2, 0x3f5, 0x3f6, 0x7, 0x68, 0x2, 0x2, 0x3f6, 0x3f7, 
-       0x7, 0x68, 0x2, 0x2, 0x3f7, 0x3f8, 0x7, 0x67, 0x2, 0x2, 0x3f8, 0x3f9, 
-       0x7, 0x74, 0x2, 0x2, 0x3f9, 0x34, 0x3, 0x2, 0x2, 0x2, 0x3fa, 0x3fb, 
-       0x7, 0x64, 0x2, 0x2, 0x3fb, 0x3fc, 0x7, 0x74, 0x2, 0x2, 0x3fc, 0x3fd, 
-       0x7, 0x67, 0x2, 0x2, 0x3fd, 0x3fe, 0x7, 0x63, 0x2, 0x2, 0x3fe, 0x3ff, 
-       0x7, 0x6d, 0x2, 0x2, 0x3ff, 0x36, 0x3, 0x2, 0x2, 0x2, 0x400, 0x401, 
-       0x7, 0x65, 0x2, 0x2, 0x401, 0x402, 0x7, 0x63, 0x2, 0x2, 0x402, 0x403, 
-       0x7, 0x75, 0x2, 0x2, 0x403, 0x404, 0x7, 0x67, 0x2, 0x2, 0x404, 0x38, 
-       0x3, 0x2, 0x2, 0x2, 0x405, 0x406, 0x7, 0x65, 0x2, 0x2, 0x406, 0x407, 
-       0x7, 0x64, 0x2, 0x2, 0x407, 0x408, 0x7, 0x77, 0x2, 0x2, 0x408, 0x409, 
-       0x7, 0x68, 0x2, 0x2, 0x409, 0x40a, 0x7, 0x68, 0x2, 0x2, 0x40a, 0x40b, 
-       0x7, 0x67, 0x2, 0x2, 0x40b, 0x40c, 0x7, 0x74, 0x2, 0x2, 0x40c, 0x3a, 
-       0x3, 0x2, 0x2, 0x2, 0x40d, 0x40e, 0x7, 0x65, 0x2, 0x2, 0x40e, 0x40f, 
-       0x7, 0x71, 0x2, 0x2, 0x40f, 0x410, 0x7, 0x70, 0x2, 0x2, 0x410, 0x411, 
-       0x7, 0x75, 0x2, 0x2, 0x411, 0x412, 0x7, 0x76, 0x2, 0x2, 0x412, 0x413, 
-       0x7, 0x63, 0x2, 0x2, 0x413, 0x414, 0x7, 0x70, 0x2, 0x2, 0x414, 0x415, 
-       0x7, 0x76, 0x2, 0x2, 0x415, 0x416, 0x7, 0x64, 0x2, 0x2, 0x416, 0x417, 
-       0x7, 0x77, 0x2, 0x2, 0x417, 0x418, 0x7, 0x68, 0x2, 0x2, 0x418, 0x419, 
-       0x7, 0x68, 0x2, 0x2, 0x419, 0x41a, 0x7, 0x67, 0x2, 0x2, 0x41a, 0x41b, 
-       0x7, 0x74, 0x2, 0x2, 0x41b, 0x3c, 0x3, 0x2, 0x2, 0x2, 0x41c, 0x41d, 
-       0x7, 0x45, 0x2, 0x2, 0x41d, 0x41e, 0x7, 0x71, 0x2, 0x2, 0x41e, 0x41f, 
-       0x7, 0x70, 0x2, 0x2, 0x41f, 0x420, 0x7, 0x75, 0x2, 0x2, 0x420, 0x421, 
-       0x7, 0x76, 0x2, 0x2, 0x421, 0x422, 0x7, 0x63, 0x2, 0x2, 0x422, 0x423, 
-       0x7, 0x70, 0x2, 0x2, 0x423, 0x424, 0x7, 0x76, 0x2, 0x2, 0x424, 0x425, 
-       0x7, 0x44, 0x2, 0x2, 0x425, 0x426, 0x7, 0x77, 0x2, 0x2, 0x426, 0x427, 
-       0x7, 0x68, 0x2, 0x2, 0x427, 0x428, 0x7, 0x68, 0x2, 0x2, 0x428, 0x429, 
-       0x7, 0x67, 0x2, 0x2, 0x429, 0x42a, 0x7, 0x74, 0x2, 0x2, 0x42a, 0x3e, 
-       0x3, 0x2, 0x2, 0x2, 0x42b, 0x42c, 0x7, 0x65, 0x2, 0x2, 0x42c, 0x42d, 
-       0x7, 0x67, 0x2, 0x2, 0x42d, 0x42e, 0x7, 0x70, 0x2, 0x2, 0x42e, 0x42f, 
-       0x7, 0x76, 0x2, 0x2, 0x42f, 0x430, 0x7, 0x74, 0x2, 0x2, 0x430, 0x431, 
-       0x7, 0x71, 0x2, 0x2, 0x431, 0x432, 0x7, 0x6b, 0x2, 0x2, 0x432, 0x433, 
-       0x7, 0x66, 0x2, 0x2, 0x433, 0x40, 0x3, 0x2, 0x2, 0x2, 0x434, 0x435, 
-       0x7, 0x65, 0x2, 0x2, 0x435, 0x436, 0x7, 0x6e, 0x2, 0x2, 0x436, 0x437, 
-       0x7, 0x63, 0x2, 0x2, 0x437, 0x438, 0x7, 0x75, 0x2, 0x2, 0x438, 0x439, 
-       0x7, 0x75, 0x2, 0x2, 0x439, 0x42, 0x3, 0x2, 0x2, 0x2, 0x43a, 0x43b, 
-       0x7, 0x65, 0x2, 0x2, 0x43b, 0x43c, 0x7, 0x71, 0x2, 0x2, 0x43c, 0x43d, 
-       0x7, 0x6e, 0x2, 0x2, 0x43d, 0x43e, 0x7, 0x77, 0x2, 0x2, 0x43e, 0x43f, 
-       0x7, 0x6f, 0x2, 0x2, 0x43f, 0x440, 0x7, 0x70, 0x2, 0x2, 0x440, 0x441, 
-       0x7, 0x61, 0x2, 0x2, 0x441, 0x442, 0x7, 0x6f, 0x2, 0x2, 0x442, 0x443, 
-       0x7, 0x63, 0x2, 0x2, 0x443, 0x444, 0x7, 0x6c, 0x2, 0x2, 0x444, 0x445, 
-       0x7, 0x71, 0x2, 0x2, 0x445, 0x446, 0x7, 0x74, 0x2, 0x2, 0x446, 0x44, 
-       0x3, 0x2, 0x2, 0x2, 0x447, 0x448, 0x7, 0x65, 0x2, 0x2, 0x448, 0x449, 
-       0x7, 0x71, 0x2, 0x2, 0x449, 0x44a, 0x7, 0x70, 0x2, 0x2, 0x44a, 0x44b, 
-       0x7, 0x75, 0x2, 0x2, 0x44b, 0x44c, 0x7, 0x76, 0x2, 0x2, 0x44c, 0x46, 
-       0x3, 0x2, 0x2, 0x2, 0x44d, 0x44e, 0x7, 0x45, 0x2, 0x2, 0x44e, 0x44f, 
-       0x7, 0x71, 0x2, 0x2, 0x44f, 0x450, 0x7, 0x70, 0x2, 0x2, 0x450, 0x451, 
-       0x7, 0x75, 0x2, 0x2, 0x451, 0x452, 0x7, 0x77, 0x2, 0x2, 0x452, 0x453, 
-       0x7, 0x6f, 0x2, 0x2, 0x453, 0x454, 0x7, 0x67, 0x2, 0x2, 0x454, 0x455, 
-       0x7, 0x55, 0x2, 0x2, 0x455, 0x456, 0x7, 0x76, 0x2, 0x2, 0x456, 0x457, 
-       0x7, 0x74, 0x2, 0x2, 0x457, 0x458, 0x7, 0x77, 0x2, 0x2, 0x458, 0x459, 
-       0x7, 0x65, 0x2, 0x2, 0x459, 0x45a, 0x7, 0x76, 0x2, 0x2, 0x45a, 0x45b, 
-       0x7, 0x77, 0x2, 0x2, 0x45b, 0x45c, 0x7, 0x74, 0x2, 0x2, 0x45c, 0x45d, 
-       0x7, 0x67, 0x2, 0x2, 0x45d, 0x45e, 0x7, 0x66, 0x2, 0x2, 0x45e, 0x45f, 
-       0x7, 0x44, 0x2, 0x2, 0x45f, 0x460, 0x7, 0x77, 0x2, 0x2, 0x460, 0x461, 
-       0x7, 0x68, 0x2, 0x2, 0x461, 0x462, 0x7, 0x68, 0x2, 0x2, 0x462, 0x463, 
-       0x7, 0x67, 0x2, 0x2, 0x463, 0x464, 0x7, 0x74, 0x2, 0x2, 0x464, 0x48, 
-       0x3, 0x2, 0x2, 0x2, 0x465, 0x466, 0x7, 0x65, 0x2, 0x2, 0x466, 0x467, 
-       0x7, 0x71, 0x2, 0x2, 0x467, 0x468, 0x7, 0x70, 0x2, 0x2, 0x468, 0x469, 
-       0x7, 0x76, 0x2, 0x2, 0x469, 0x46a, 0x7, 0x6b, 0x2, 0x2, 0x46a, 0x46b, 
-       0x7, 0x70, 0x2, 0x2, 0x46b, 0x46c, 0x7, 0x77, 0x2, 0x2, 0x46c, 0x46d, 
-       0x7, 0x67, 0x2, 0x2, 0x46d, 0x4a, 0x3, 0x2, 0x2, 0x2, 0x46e, 0x46f, 
-       0x7, 0x66, 0x2, 0x2, 0x46f, 0x470, 0x7, 0x67, 0x2, 0x2, 0x470, 0x471, 
-       0x7, 0x68, 0x2, 0x2, 0x471, 0x472, 0x7, 0x63, 0x2, 0x2, 0x472, 0x473, 
-       0x7, 0x77, 0x2, 0x2, 0x473, 0x474, 0x7, 0x6e, 0x2, 0x2, 0x474, 0x475, 
-       0x7, 0x76, 0x2, 0x2, 0x475, 0x4c, 0x3, 0x2, 0x2, 0x2, 0x476, 0x477, 
-       0x7, 0x66, 0x2, 0x2, 0x477, 0x478, 0x7, 0x6b, 0x2, 0x2, 0x478, 0x479, 
-       0x7, 0x75, 0x2, 0x2, 0x479, 0x47a, 0x7, 0x65, 0x2, 0x2, 0x47a, 0x47b, 
-       0x7, 0x63, 0x2, 0x2, 0x47b, 0x47c, 0x7, 0x74, 0x2, 0x2, 0x47c, 0x47d, 
-       0x7, 0x66, 0x2, 0x2, 0x47d, 0x4e, 0x3, 0x2, 0x2, 0x2, 0x47e, 0x47f, 
-       0x7, 0x66, 0x2, 0x2, 0x47f, 0x480, 0x7, 0x71, 0x2, 0x2, 0x480, 0x50, 
-       0x3, 0x2, 0x2, 0x2, 0x481, 0x482, 0x7, 0x66, 0x2, 0x2, 0x482, 0x483, 
-       0x7, 0x71, 0x2, 0x2, 0x483, 0x484, 0x7, 0x77, 0x2, 0x2, 0x484, 0x485, 
-       0x7, 0x64, 0x2, 0x2, 0x485, 0x486, 0x7, 0x6e, 0x2, 0x2, 0x486, 0x487, 
-       0x7, 0x67, 0x2, 0x2, 0x487, 0x52, 0x3, 0x2, 0x2, 0x2, 0x488, 0x489, 
-       0x7, 0x66, 0x2, 0x2, 0x489, 0x48a, 0x7, 0x71, 0x2, 0x2, 0x48a, 0x48b, 
-       0x7, 0x77, 0x2, 0x2, 0x48b, 0x48c, 0x7, 0x64, 0x2, 0x2, 0x48c, 0x48d, 
-       0x7, 0x6e, 0x2, 0x2, 0x48d, 0x48e, 0x7, 0x67, 0x2, 0x2, 0x48e, 0x48f, 
-       0x7, 0x33, 0x2, 0x2, 0x48f, 0x54, 0x3, 0x2, 0x2, 0x2, 0x490, 0x491, 
-       0x7, 0x66, 0x2, 0x2, 0x491, 0x492, 0x7, 0x71, 0x2, 0x2, 0x492, 0x493, 
-       0x7, 0x77, 0x2, 0x2, 0x493, 0x494, 0x7, 0x64, 0x2, 0x2, 0x494, 0x495, 
-       0x7, 0x6e, 0x2, 0x2, 0x495, 0x496, 0x7, 0x67, 0x2, 0x2, 0x496, 0x497, 
-       0x7, 0x34, 0x2, 0x2, 0x497, 0x56, 0x3, 0x2, 0x2, 0x2, 0x498, 0x499, 
+       0x7, 0x7a, 0x2, 0x2, 0x3b9, 0x3ba, 0x7, 0x34, 0x2, 0x2, 0x3ba, 0x2a, 
+       0x3, 0x2, 0x2, 0x2, 0x3bb, 0x3bc, 0x7, 0x64, 0x2, 0x2, 0x3bc, 0x3bd, 
+       0x7, 0x71, 0x2, 0x2, 0x3bd, 0x3be, 0x7, 0x71, 0x2, 0x2, 0x3be, 0x3bf, 
+       0x7, 0x6e, 0x2, 0x2, 0x3bf, 0x3c0, 0x7, 0x36, 0x2, 0x2, 0x3c0, 0x3c1, 
+       0x7, 0x7a, 0x2, 0x2, 0x3c1, 0x3c2, 0x7, 0x35, 0x2, 0x2, 0x3c2, 0x2c, 
+       0x3, 0x2, 0x2, 0x2, 0x3c3, 0x3c4, 0x7, 0x64, 0x2, 0x2, 0x3c4, 0x3c5, 
+       0x7, 0x71, 0x2, 0x2, 0x3c5, 0x3c6, 0x7, 0x71, 0x2, 0x2, 0x3c6, 0x3c7, 
+       0x7, 0x6e, 0x2, 0x2, 0x3c7, 0x3c8, 0x7, 0x36, 0x2, 0x2, 0x3c8, 0x3c9, 
+       0x7, 0x7a, 0x2, 0x2, 0x3c9, 0x3ca, 0x7, 0x36, 0x2, 0x2, 0x3ca, 0x2e, 
+       0x3, 0x2, 0x2, 0x2, 0x3cb, 0x3cc, 0x7, 0x44, 0x2, 0x2, 0x3cc, 0x3cd, 
+       0x7, 0x77, 0x2, 0x2, 0x3cd, 0x3ce, 0x7, 0x68, 0x2, 0x2, 0x3ce, 0x3cf, 
+       0x7, 0x68, 0x2, 0x2, 0x3cf, 0x3d0, 0x7, 0x67, 0x2, 0x2, 0x3d0, 0x3d1, 
+       0x7, 0x74, 0x2, 0x2, 0x3d1, 0x30, 0x3, 0x2, 0x2, 0x2, 0x3d2, 0x3d3, 
+       0x7, 0x44, 0x2, 0x2, 0x3d3, 0x3d4, 0x7, 0x77, 0x2, 0x2, 0x3d4, 0x3d5, 
+       0x7, 0x6b, 0x2, 0x2, 0x3d5, 0x3d6, 0x7, 0x6e, 0x2, 0x2, 0x3d6, 0x3d7, 
+       0x7, 0x76, 0x2, 0x2, 0x3d7, 0x3d8, 0x7, 0x4b, 0x2, 0x2, 0x3d8, 0x3d9, 
+       0x7, 0x70, 0x2, 0x2, 0x3d9, 0x3da, 0x7, 0x56, 0x2, 0x2, 0x3da, 0x3db, 
+       0x7, 0x74, 0x2, 0x2, 0x3db, 0x3dc, 0x7, 0x6b, 0x2, 0x2, 0x3dc, 0x3dd, 
+       0x7, 0x63, 0x2, 0x2, 0x3dd, 0x3de, 0x7, 0x70, 0x2, 0x2, 0x3de, 0x3df, 
+       0x7, 0x69, 0x2, 0x2, 0x3df, 0x3e0, 0x7, 0x6e, 0x2, 0x2, 0x3e0, 0x3e1, 
+       0x7, 0x67, 0x2, 0x2, 0x3e1, 0x3e2, 0x7, 0x4b, 0x2, 0x2, 0x3e2, 0x3e3, 
+       0x7, 0x70, 0x2, 0x2, 0x3e3, 0x3e4, 0x7, 0x76, 0x2, 0x2, 0x3e4, 0x3e5, 
+       0x7, 0x67, 0x2, 0x2, 0x3e5, 0x3e6, 0x7, 0x74, 0x2, 0x2, 0x3e6, 0x3e7, 
+       0x7, 0x75, 0x2, 0x2, 0x3e7, 0x3e8, 0x7, 0x67, 0x2, 0x2, 0x3e8, 0x3e9, 
+       0x7, 0x65, 0x2, 0x2, 0x3e9, 0x3ea, 0x7, 0x76, 0x2, 0x2, 0x3ea, 0x3eb, 
+       0x7, 0x6b, 0x2, 0x2, 0x3eb, 0x3ec, 0x7, 0x71, 0x2, 0x2, 0x3ec, 0x3ed, 
+       0x7, 0x70, 0x2, 0x2, 0x3ed, 0x3ee, 0x7, 0x43, 0x2, 0x2, 0x3ee, 0x3ef, 
+       0x7, 0x76, 0x2, 0x2, 0x3ef, 0x3f0, 0x7, 0x76, 0x2, 0x2, 0x3f0, 0x3f1, 
+       0x7, 0x74, 0x2, 0x2, 0x3f1, 0x3f2, 0x7, 0x6b, 0x2, 0x2, 0x3f2, 0x3f3, 
+       0x7, 0x64, 0x2, 0x2, 0x3f3, 0x3f4, 0x7, 0x77, 0x2, 0x2, 0x3f4, 0x3f5, 
+       0x7, 0x76, 0x2, 0x2, 0x3f5, 0x3f6, 0x7, 0x67, 0x2, 0x2, 0x3f6, 0x3f7, 
+       0x7, 0x75, 0x2, 0x2, 0x3f7, 0x32, 0x3, 0x2, 0x2, 0x2, 0x3f8, 0x3f9, 
+       0x7, 0x44, 0x2, 0x2, 0x3f9, 0x3fa, 0x7, 0x7b, 0x2, 0x2, 0x3fa, 0x3fb, 
+       0x7, 0x76, 0x2, 0x2, 0x3fb, 0x3fc, 0x7, 0x67, 0x2, 0x2, 0x3fc, 0x3fd, 
+       0x7, 0x43, 0x2, 0x2, 0x3fd, 0x3fe, 0x7, 0x66, 0x2, 0x2, 0x3fe, 0x3ff, 
+       0x7, 0x66, 0x2, 0x2, 0x3ff, 0x400, 0x7, 0x74, 0x2, 0x2, 0x400, 0x401, 
+       0x7, 0x67, 0x2, 0x2, 0x401, 0x402, 0x7, 0x75, 0x2, 0x2, 0x402, 0x403, 
+       0x7, 0x75, 0x2, 0x2, 0x403, 0x404, 0x7, 0x44, 0x2, 0x2, 0x404, 0x405, 
+       0x7, 0x77, 0x2, 0x2, 0x405, 0x406, 0x7, 0x68, 0x2, 0x2, 0x406, 0x407, 
+       0x7, 0x68, 0x2, 0x2, 0x407, 0x408, 0x7, 0x67, 0x2, 0x2, 0x408, 0x409, 
+       0x7, 0x74, 0x2, 0x2, 0x409, 0x34, 0x3, 0x2, 0x2, 0x2, 0x40a, 0x40b, 
+       0x7, 0x64, 0x2, 0x2, 0x40b, 0x40c, 0x7, 0x74, 0x2, 0x2, 0x40c, 0x40d, 
+       0x7, 0x67, 0x2, 0x2, 0x40d, 0x40e, 0x7, 0x63, 0x2, 0x2, 0x40e, 0x40f, 
+       0x7, 0x6d, 0x2, 0x2, 0x40f, 0x36, 0x3, 0x2, 0x2, 0x2, 0x410, 0x411, 
+       0x7, 0x65, 0x2, 0x2, 0x411, 0x412, 0x7, 0x63, 0x2, 0x2, 0x412, 0x413, 
+       0x7, 0x75, 0x2, 0x2, 0x413, 0x414, 0x7, 0x67, 0x2, 0x2, 0x414, 0x38, 
+       0x3, 0x2, 0x2, 0x2, 0x415, 0x416, 0x7, 0x65, 0x2, 0x2, 0x416, 0x417, 
+       0x7, 0x64, 0x2, 0x2, 0x417, 0x418, 0x7, 0x77, 0x2, 0x2, 0x418, 0x419, 
+       0x7, 0x68, 0x2, 0x2, 0x419, 0x41a, 0x7, 0x68, 0x2, 0x2, 0x41a, 0x41b, 
+       0x7, 0x67, 0x2, 0x2, 0x41b, 0x41c, 0x7, 0x74, 0x2, 0x2, 0x41c, 0x3a, 
+       0x3, 0x2, 0x2, 0x2, 0x41d, 0x41e, 0x7, 0x65, 0x2, 0x2, 0x41e, 0x41f, 
+       0x7, 0x67, 0x2, 0x2, 0x41f, 0x420, 0x7, 0x70, 0x2, 0x2, 0x420, 0x421, 
+       0x7, 0x76, 0x2, 0x2, 0x421, 0x422, 0x7, 0x74, 0x2, 0x2, 0x422, 0x423, 
+       0x7, 0x71, 0x2, 0x2, 0x423, 0x424, 0x7, 0x6b, 0x2, 0x2, 0x424, 0x425, 
+       0x7, 0x66, 0x2, 0x2, 0x425, 0x3c, 0x3, 0x2, 0x2, 0x2, 0x426, 0x427, 
+       0x7, 0x65, 0x2, 0x2, 0x427, 0x428, 0x7, 0x71, 0x2, 0x2, 0x428, 0x429, 
+       0x7, 0x70, 0x2, 0x2, 0x429, 0x42a, 0x7, 0x75, 0x2, 0x2, 0x42a, 0x42b, 
+       0x7, 0x76, 0x2, 0x2, 0x42b, 0x42c, 0x7, 0x63, 0x2, 0x2, 0x42c, 0x42d, 
+       0x7, 0x70, 0x2, 0x2, 0x42d, 0x42e, 0x7, 0x76, 0x2, 0x2, 0x42e, 0x42f, 
+       0x7, 0x64, 0x2, 0x2, 0x42f, 0x430, 0x7, 0x77, 0x2, 0x2, 0x430, 0x431, 
+       0x7, 0x68, 0x2, 0x2, 0x431, 0x432, 0x7, 0x68, 0x2, 0x2, 0x432, 0x433, 
+       0x7, 0x67, 0x2, 0x2, 0x433, 0x434, 0x7, 0x74, 0x2, 0x2, 0x434, 0x3e, 
+       0x3, 0x2, 0x2, 0x2, 0x435, 0x436, 0x7, 0x45, 0x2, 0x2, 0x436, 0x437, 
+       0x7, 0x71, 0x2, 0x2, 0x437, 0x438, 0x7, 0x70, 0x2, 0x2, 0x438, 0x439, 
+       0x7, 0x75, 0x2, 0x2, 0x439, 0x43a, 0x7, 0x76, 0x2, 0x2, 0x43a, 0x43b, 
+       0x7, 0x63, 0x2, 0x2, 0x43b, 0x43c, 0x7, 0x70, 0x2, 0x2, 0x43c, 0x43d, 
+       0x7, 0x76, 0x2, 0x2, 0x43d, 0x43e, 0x7, 0x44, 0x2, 0x2, 0x43e, 0x43f, 
+       0x7, 0x77, 0x2, 0x2, 0x43f, 0x440, 0x7, 0x68, 0x2, 0x2, 0x440, 0x441, 
+       0x7, 0x68, 0x2, 0x2, 0x441, 0x442, 0x7, 0x67, 0x2, 0x2, 0x442, 0x443, 
+       0x7, 0x74, 0x2, 0x2, 0x443, 0x40, 0x3, 0x2, 0x2, 0x2, 0x444, 0x445, 
+       0x7, 0x65, 0x2, 0x2, 0x445, 0x446, 0x7, 0x6e, 0x2, 0x2, 0x446, 0x447, 
+       0x7, 0x63, 0x2, 0x2, 0x447, 0x448, 0x7, 0x75, 0x2, 0x2, 0x448, 0x449, 
+       0x7, 0x75, 0x2, 0x2, 0x449, 0x42, 0x3, 0x2, 0x2, 0x2, 0x44a, 0x44b, 
+       0x7, 0x65, 0x2, 0x2, 0x44b, 0x44c, 0x7, 0x71, 0x2, 0x2, 0x44c, 0x44d, 
+       0x7, 0x6e, 0x2, 0x2, 0x44d, 0x44e, 0x7, 0x77, 0x2, 0x2, 0x44e, 0x44f, 
+       0x7, 0x6f, 0x2, 0x2, 0x44f, 0x450, 0x7, 0x70, 0x2, 0x2, 0x450, 0x451, 
+       0x7, 0x61, 0x2, 0x2, 0x451, 0x452, 0x7, 0x6f, 0x2, 0x2, 0x452, 0x453, 
+       0x7, 0x63, 0x2, 0x2, 0x453, 0x454, 0x7, 0x6c, 0x2, 0x2, 0x454, 0x455, 
+       0x7, 0x71, 0x2, 0x2, 0x455, 0x456, 0x7, 0x74, 0x2, 0x2, 0x456, 0x44, 
+       0x3, 0x2, 0x2, 0x2, 0x457, 0x458, 0x7, 0x65, 0x2, 0x2, 0x458, 0x459, 
+       0x7, 0x71, 0x2, 0x2, 0x459, 0x45a, 0x7, 0x70, 0x2, 0x2, 0x45a, 0x45b, 
+       0x7, 0x75, 0x2, 0x2, 0x45b, 0x45c, 0x7, 0x76, 0x2, 0x2, 0x45c, 0x46, 
+       0x3, 0x2, 0x2, 0x2, 0x45d, 0x45e, 0x7, 0x45, 0x2, 0x2, 0x45e, 0x45f, 
+       0x7, 0x71, 0x2, 0x2, 0x45f, 0x460, 0x7, 0x70, 0x2, 0x2, 0x460, 0x461, 
+       0x7, 0x75, 0x2, 0x2, 0x461, 0x462, 0x7, 0x77, 0x2, 0x2, 0x462, 0x463, 
+       0x7, 0x6f, 0x2, 0x2, 0x463, 0x464, 0x7, 0x67, 0x2, 0x2, 0x464, 0x465, 
+       0x7, 0x55, 0x2, 0x2, 0x465, 0x466, 0x7, 0x76, 0x2, 0x2, 0x466, 0x467, 
+       0x7, 0x74, 0x2, 0x2, 0x467, 0x468, 0x7, 0x77, 0x2, 0x2, 0x468, 0x469, 
+       0x7, 0x65, 0x2, 0x2, 0x469, 0x46a, 0x7, 0x76, 0x2, 0x2, 0x46a, 0x46b, 
+       0x7, 0x77, 0x2, 0x2, 0x46b, 0x46c, 0x7, 0x74, 0x2, 0x2, 0x46c, 0x46d, 
+       0x7, 0x67, 0x2, 0x2, 0x46d, 0x46e, 0x7, 0x66, 0x2, 0x2, 0x46e, 0x46f, 
+       0x7, 0x44, 0x2, 0x2, 0x46f, 0x470, 0x7, 0x77, 0x2, 0x2, 0x470, 0x471, 
+       0x7, 0x68, 0x2, 0x2, 0x471, 0x472, 0x7, 0x68, 0x2, 0x2, 0x472, 0x473, 
+       0x7, 0x67, 0x2, 0x2, 0x473, 0x474, 0x7, 0x74, 0x2, 0x2, 0x474, 0x48, 
+       0x3, 0x2, 0x2, 0x2, 0x475, 0x476, 0x7, 0x65, 0x2, 0x2, 0x476, 0x477, 
+       0x7, 0x71, 0x2, 0x2, 0x477, 0x478, 0x7, 0x70, 0x2, 0x2, 0x478, 0x479, 
+       0x7, 0x76, 0x2, 0x2, 0x479, 0x47a, 0x7, 0x6b, 0x2, 0x2, 0x47a, 0x47b, 
+       0x7, 0x70, 0x2, 0x2, 0x47b, 0x47c, 0x7, 0x77, 0x2, 0x2, 0x47c, 0x47d, 
+       0x7, 0x67, 0x2, 0x2, 0x47d, 0x4a, 0x3, 0x2, 0x2, 0x2, 0x47e, 0x47f, 
+       0x7, 0x66, 0x2, 0x2, 0x47f, 0x480, 0x7, 0x67, 0x2, 0x2, 0x480, 0x481, 
+       0x7, 0x68, 0x2, 0x2, 0x481, 0x482, 0x7, 0x63, 0x2, 0x2, 0x482, 0x483, 
+       0x7, 0x77, 0x2, 0x2, 0x483, 0x484, 0x7, 0x6e, 0x2, 0x2, 0x484, 0x485, 
+       0x7, 0x76, 0x2, 0x2, 0x485, 0x4c, 0x3, 0x2, 0x2, 0x2, 0x486, 0x487, 
+       0x7, 0x66, 0x2, 0x2, 0x487, 0x488, 0x7, 0x6b, 0x2, 0x2, 0x488, 0x489, 
+       0x7, 0x75, 0x2, 0x2, 0x489, 0x48a, 0x7, 0x65, 0x2, 0x2, 0x48a, 0x48b, 
+       0x7, 0x63, 0x2, 0x2, 0x48b, 0x48c, 0x7, 0x74, 0x2, 0x2, 0x48c, 0x48d, 
+       0x7, 0x66, 0x2, 0x2, 0x48d, 0x4e, 0x3, 0x2, 0x2, 0x2, 0x48e, 0x48f, 
+       0x7, 0x66, 0x2, 0x2, 0x48f, 0x490, 0x7, 0x71, 0x2, 0x2, 0x490, 0x50, 
+       0x3, 0x2, 0x2, 0x2, 0x491, 0x492, 0x7, 0x66, 0x2, 0x2, 0x492, 0x493, 
+       0x7, 0x71, 0x2, 0x2, 0x493, 0x494, 0x7, 0x77, 0x2, 0x2, 0x494, 0x495, 
+       0x7, 0x64, 0x2, 0x2, 0x495, 0x496, 0x7, 0x6e, 0x2, 0x2, 0x496, 0x497, 
+       0x7, 0x67, 0x2, 0x2, 0x497, 0x52, 0x3, 0x2, 0x2, 0x2, 0x498, 0x499, 
        0x7, 0x66, 0x2, 0x2, 0x499, 0x49a, 0x7, 0x71, 0x2, 0x2, 0x49a, 0x49b, 
        0x7, 0x66, 0x2, 0x2, 0x499, 0x49a, 0x7, 0x71, 0x2, 0x2, 0x49a, 0x49b, 
        0x7, 0x77, 0x2, 0x2, 0x49b, 0x49c, 0x7, 0x64, 0x2, 0x2, 0x49c, 0x49d, 
        0x7, 0x77, 0x2, 0x2, 0x49b, 0x49c, 0x7, 0x64, 0x2, 0x2, 0x49c, 0x49d, 
        0x7, 0x6e, 0x2, 0x2, 0x49d, 0x49e, 0x7, 0x67, 0x2, 0x2, 0x49e, 0x49f, 
        0x7, 0x6e, 0x2, 0x2, 0x49d, 0x49e, 0x7, 0x67, 0x2, 0x2, 0x49e, 0x49f, 
-       0x7, 0x35, 0x2, 0x2, 0x49f, 0x58, 0x3, 0x2, 0x2, 0x2, 0x4a0, 0x4a1, 
+       0x7, 0x33, 0x2, 0x2, 0x49f, 0x54, 0x3, 0x2, 0x2, 0x2, 0x4a0, 0x4a1, 
        0x7, 0x66, 0x2, 0x2, 0x4a1, 0x4a2, 0x7, 0x71, 0x2, 0x2, 0x4a2, 0x4a3, 
        0x7, 0x66, 0x2, 0x2, 0x4a1, 0x4a2, 0x7, 0x71, 0x2, 0x2, 0x4a2, 0x4a3, 
        0x7, 0x77, 0x2, 0x2, 0x4a3, 0x4a4, 0x7, 0x64, 0x2, 0x2, 0x4a4, 0x4a5, 
        0x7, 0x77, 0x2, 0x2, 0x4a3, 0x4a4, 0x7, 0x64, 0x2, 0x2, 0x4a4, 0x4a5, 
        0x7, 0x6e, 0x2, 0x2, 0x4a5, 0x4a6, 0x7, 0x67, 0x2, 0x2, 0x4a6, 0x4a7, 
        0x7, 0x6e, 0x2, 0x2, 0x4a5, 0x4a6, 0x7, 0x67, 0x2, 0x2, 0x4a6, 0x4a7, 
-       0x7, 0x36, 0x2, 0x2, 0x4a7, 0x5a, 0x3, 0x2, 0x2, 0x2, 0x4a8, 0x4a9, 
+       0x7, 0x34, 0x2, 0x2, 0x4a7, 0x56, 0x3, 0x2, 0x2, 0x2, 0x4a8, 0x4a9, 
        0x7, 0x66, 0x2, 0x2, 0x4a9, 0x4aa, 0x7, 0x71, 0x2, 0x2, 0x4aa, 0x4ab, 
        0x7, 0x66, 0x2, 0x2, 0x4a9, 0x4aa, 0x7, 0x71, 0x2, 0x2, 0x4aa, 0x4ab, 
        0x7, 0x77, 0x2, 0x2, 0x4ab, 0x4ac, 0x7, 0x64, 0x2, 0x2, 0x4ac, 0x4ad, 
        0x7, 0x77, 0x2, 0x2, 0x4ab, 0x4ac, 0x7, 0x64, 0x2, 0x2, 0x4ac, 0x4ad, 
        0x7, 0x6e, 0x2, 0x2, 0x4ad, 0x4ae, 0x7, 0x67, 0x2, 0x2, 0x4ae, 0x4af, 
        0x7, 0x6e, 0x2, 0x2, 0x4ad, 0x4ae, 0x7, 0x67, 0x2, 0x2, 0x4ae, 0x4af, 
-       0x7, 0x33, 0x2, 0x2, 0x4af, 0x4b0, 0x7, 0x7a, 0x2, 0x2, 0x4b0, 0x4b1, 
-       0x7, 0x33, 0x2, 0x2, 0x4b1, 0x5c, 0x3, 0x2, 0x2, 0x2, 0x4b2, 0x4b3, 
-       0x7, 0x66, 0x2, 0x2, 0x4b3, 0x4b4, 0x7, 0x71, 0x2, 0x2, 0x4b4, 0x4b5, 
-       0x7, 0x77, 0x2, 0x2, 0x4b5, 0x4b6, 0x7, 0x64, 0x2, 0x2, 0x4b6, 0x4b7, 
-       0x7, 0x6e, 0x2, 0x2, 0x4b7, 0x4b8, 0x7, 0x67, 0x2, 0x2, 0x4b8, 0x4b9, 
-       0x7, 0x33, 0x2, 0x2, 0x4b9, 0x4ba, 0x7, 0x7a, 0x2, 0x2, 0x4ba, 0x4bb, 
-       0x7, 0x34, 0x2, 0x2, 0x4bb, 0x5e, 0x3, 0x2, 0x2, 0x2, 0x4bc, 0x4bd, 
-       0x7, 0x66, 0x2, 0x2, 0x4bd, 0x4be, 0x7, 0x71, 0x2, 0x2, 0x4be, 0x4bf, 
-       0x7, 0x77, 0x2, 0x2, 0x4bf, 0x4c0, 0x7, 0x64, 0x2, 0x2, 0x4c0, 0x4c1, 
-       0x7, 0x6e, 0x2, 0x2, 0x4c1, 0x4c2, 0x7, 0x67, 0x2, 0x2, 0x4c2, 0x4c3, 
-       0x7, 0x33, 0x2, 0x2, 0x4c3, 0x4c4, 0x7, 0x7a, 0x2, 0x2, 0x4c4, 0x4c5, 
-       0x7, 0x35, 0x2, 0x2, 0x4c5, 0x60, 0x3, 0x2, 0x2, 0x2, 0x4c6, 0x4c7, 
-       0x7, 0x66, 0x2, 0x2, 0x4c7, 0x4c8, 0x7, 0x71, 0x2, 0x2, 0x4c8, 0x4c9, 
-       0x7, 0x77, 0x2, 0x2, 0x4c9, 0x4ca, 0x7, 0x64, 0x2, 0x2, 0x4ca, 0x4cb, 
-       0x7, 0x6e, 0x2, 0x2, 0x4cb, 0x4cc, 0x7, 0x67, 0x2, 0x2, 0x4cc, 0x4cd, 
-       0x7, 0x33, 0x2, 0x2, 0x4cd, 0x4ce, 0x7, 0x7a, 0x2, 0x2, 0x4ce, 0x4cf, 
-       0x7, 0x36, 0x2, 0x2, 0x4cf, 0x62, 0x3, 0x2, 0x2, 0x2, 0x4d0, 0x4d1, 
-       0x7, 0x66, 0x2, 0x2, 0x4d1, 0x4d2, 0x7, 0x71, 0x2, 0x2, 0x4d2, 0x4d3, 
-       0x7, 0x77, 0x2, 0x2, 0x4d3, 0x4d4, 0x7, 0x64, 0x2, 0x2, 0x4d4, 0x4d5, 
-       0x7, 0x6e, 0x2, 0x2, 0x4d5, 0x4d6, 0x7, 0x67, 0x2, 0x2, 0x4d6, 0x4d7, 
-       0x7, 0x34, 0x2, 0x2, 0x4d7, 0x4d8, 0x7, 0x7a, 0x2, 0x2, 0x4d8, 0x4d9, 
-       0x7, 0x33, 0x2, 0x2, 0x4d9, 0x64, 0x3, 0x2, 0x2, 0x2, 0x4da, 0x4db, 
-       0x7, 0x66, 0x2, 0x2, 0x4db, 0x4dc, 0x7, 0x71, 0x2, 0x2, 0x4dc, 0x4dd, 
-       0x7, 0x77, 0x2, 0x2, 0x4dd, 0x4de, 0x7, 0x64, 0x2, 0x2, 0x4de, 0x4df, 
-       0x7, 0x6e, 0x2, 0x2, 0x4df, 0x4e0, 0x7, 0x67, 0x2, 0x2, 0x4e0, 0x4e1, 
-       0x7, 0x34, 0x2, 0x2, 0x4e1, 0x4e2, 0x7, 0x7a, 0x2, 0x2, 0x4e2, 0x4e3, 
-       0x7, 0x34, 0x2, 0x2, 0x4e3, 0x66, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x4e5, 
-       0x7, 0x66, 0x2, 0x2, 0x4e5, 0x4e6, 0x7, 0x71, 0x2, 0x2, 0x4e6, 0x4e7, 
-       0x7, 0x77, 0x2, 0x2, 0x4e7, 0x4e8, 0x7, 0x64, 0x2, 0x2, 0x4e8, 0x4e9, 
-       0x7, 0x6e, 0x2, 0x2, 0x4e9, 0x4ea, 0x7, 0x67, 0x2, 0x2, 0x4ea, 0x4eb, 
-       0x7, 0x34, 0x2, 0x2, 0x4eb, 0x4ec, 0x7, 0x7a, 0x2, 0x2, 0x4ec, 0x4ed, 
-       0x7, 0x35, 0x2, 0x2, 0x4ed, 0x68, 0x3, 0x2, 0x2, 0x2, 0x4ee, 0x4ef, 
-       0x7, 0x66, 0x2, 0x2, 0x4ef, 0x4f0, 0x7, 0x71, 0x2, 0x2, 0x4f0, 0x4f1, 
-       0x7, 0x77, 0x2, 0x2, 0x4f1, 0x4f2, 0x7, 0x64, 0x2, 0x2, 0x4f2, 0x4f3, 
-       0x7, 0x6e, 0x2, 0x2, 0x4f3, 0x4f4, 0x7, 0x67, 0x2, 0x2, 0x4f4, 0x4f5, 
-       0x7, 0x34, 0x2, 0x2, 0x4f5, 0x4f6, 0x7, 0x7a, 0x2, 0x2, 0x4f6, 0x4f7, 
-       0x7, 0x36, 0x2, 0x2, 0x4f7, 0x6a, 0x3, 0x2, 0x2, 0x2, 0x4f8, 0x4f9, 
-       0x7, 0x66, 0x2, 0x2, 0x4f9, 0x4fa, 0x7, 0x71, 0x2, 0x2, 0x4fa, 0x4fb, 
-       0x7, 0x77, 0x2, 0x2, 0x4fb, 0x4fc, 0x7, 0x64, 0x2, 0x2, 0x4fc, 0x4fd, 
-       0x7, 0x6e, 0x2, 0x2, 0x4fd, 0x4fe, 0x7, 0x67, 0x2, 0x2, 0x4fe, 0x4ff, 
-       0x7, 0x35, 0x2, 0x2, 0x4ff, 0x500, 0x7, 0x7a, 0x2, 0x2, 0x500, 0x501, 
-       0x7, 0x33, 0x2, 0x2, 0x501, 0x6c, 0x3, 0x2, 0x2, 0x2, 0x502, 0x503, 
-       0x7, 0x66, 0x2, 0x2, 0x503, 0x504, 0x7, 0x71, 0x2, 0x2, 0x504, 0x505, 
-       0x7, 0x77, 0x2, 0x2, 0x505, 0x506, 0x7, 0x64, 0x2, 0x2, 0x506, 0x507, 
-       0x7, 0x6e, 0x2, 0x2, 0x507, 0x508, 0x7, 0x67, 0x2, 0x2, 0x508, 0x509, 
-       0x7, 0x35, 0x2, 0x2, 0x509, 0x50a, 0x7, 0x7a, 0x2, 0x2, 0x50a, 0x50b, 
-       0x7, 0x34, 0x2, 0x2, 0x50b, 0x6e, 0x3, 0x2, 0x2, 0x2, 0x50c, 0x50d, 
-       0x7, 0x66, 0x2, 0x2, 0x50d, 0x50e, 0x7, 0x71, 0x2, 0x2, 0x50e, 0x50f, 
-       0x7, 0x77, 0x2, 0x2, 0x50f, 0x510, 0x7, 0x64, 0x2, 0x2, 0x510, 0x511, 
-       0x7, 0x6e, 0x2, 0x2, 0x511, 0x512, 0x7, 0x67, 0x2, 0x2, 0x512, 0x513, 
-       0x7, 0x35, 0x2, 0x2, 0x513, 0x514, 0x7, 0x7a, 0x2, 0x2, 0x514, 0x515, 
-       0x7, 0x35, 0x2, 0x2, 0x515, 0x70, 0x3, 0x2, 0x2, 0x2, 0x516, 0x517, 
-       0x7, 0x66, 0x2, 0x2, 0x517, 0x518, 0x7, 0x71, 0x2, 0x2, 0x518, 0x519, 
-       0x7, 0x77, 0x2, 0x2, 0x519, 0x51a, 0x7, 0x64, 0x2, 0x2, 0x51a, 0x51b, 
-       0x7, 0x6e, 0x2, 0x2, 0x51b, 0x51c, 0x7, 0x67, 0x2, 0x2, 0x51c, 0x51d, 
-       0x7, 0x35, 0x2, 0x2, 0x51d, 0x51e, 0x7, 0x7a, 0x2, 0x2, 0x51e, 0x51f, 
-       0x7, 0x36, 0x2, 0x2, 0x51f, 0x72, 0x3, 0x2, 0x2, 0x2, 0x520, 0x521, 
-       0x7, 0x66, 0x2, 0x2, 0x521, 0x522, 0x7, 0x71, 0x2, 0x2, 0x522, 0x523, 
-       0x7, 0x77, 0x2, 0x2, 0x523, 0x524, 0x7, 0x64, 0x2, 0x2, 0x524, 0x525, 
-       0x7, 0x6e, 0x2, 0x2, 0x525, 0x526, 0x7, 0x67, 0x2, 0x2, 0x526, 0x527, 
-       0x7, 0x36, 0x2, 0x2, 0x527, 0x528, 0x7, 0x7a, 0x2, 0x2, 0x528, 0x529, 
-       0x7, 0x33, 0x2, 0x2, 0x529, 0x74, 0x3, 0x2, 0x2, 0x2, 0x52a, 0x52b, 
-       0x7, 0x66, 0x2, 0x2, 0x52b, 0x52c, 0x7, 0x71, 0x2, 0x2, 0x52c, 0x52d, 
-       0x7, 0x77, 0x2, 0x2, 0x52d, 0x52e, 0x7, 0x64, 0x2, 0x2, 0x52e, 0x52f, 
-       0x7, 0x6e, 0x2, 0x2, 0x52f, 0x530, 0x7, 0x67, 0x2, 0x2, 0x530, 0x531, 
-       0x7, 0x36, 0x2, 0x2, 0x531, 0x532, 0x7, 0x7a, 0x2, 0x2, 0x532, 0x533, 
-       0x7, 0x34, 0x2, 0x2, 0x533, 0x76, 0x3, 0x2, 0x2, 0x2, 0x534, 0x535, 
-       0x7, 0x66, 0x2, 0x2, 0x535, 0x536, 0x7, 0x71, 0x2, 0x2, 0x536, 0x537, 
-       0x7, 0x77, 0x2, 0x2, 0x537, 0x538, 0x7, 0x64, 0x2, 0x2, 0x538, 0x539, 
-       0x7, 0x6e, 0x2, 0x2, 0x539, 0x53a, 0x7, 0x67, 0x2, 0x2, 0x53a, 0x53b, 
-       0x7, 0x36, 0x2, 0x2, 0x53b, 0x53c, 0x7, 0x7a, 0x2, 0x2, 0x53c, 0x53d, 
-       0x7, 0x35, 0x2, 0x2, 0x53d, 0x78, 0x3, 0x2, 0x2, 0x2, 0x53e, 0x53f, 
-       0x7, 0x66, 0x2, 0x2, 0x53f, 0x540, 0x7, 0x71, 0x2, 0x2, 0x540, 0x541, 
-       0x7, 0x77, 0x2, 0x2, 0x541, 0x542, 0x7, 0x64, 0x2, 0x2, 0x542, 0x543, 
-       0x7, 0x6e, 0x2, 0x2, 0x543, 0x544, 0x7, 0x67, 0x2, 0x2, 0x544, 0x545, 
-       0x7, 0x36, 0x2, 0x2, 0x545, 0x546, 0x7, 0x7a, 0x2, 0x2, 0x546, 0x547, 
-       0x7, 0x36, 0x2, 0x2, 0x547, 0x7a, 0x3, 0x2, 0x2, 0x2, 0x548, 0x549, 
-       0x7, 0x67, 0x2, 0x2, 0x549, 0x54a, 0x7, 0x6e, 0x2, 0x2, 0x54a, 0x54b, 
-       0x7, 0x75, 0x2, 0x2, 0x54b, 0x54c, 0x7, 0x67, 0x2, 0x2, 0x54c, 0x7c, 
-       0x3, 0x2, 0x2, 0x2, 0x54d, 0x54e, 0x7, 0x67, 0x2, 0x2, 0x54e, 0x54f, 
-       0x7, 0x70, 0x2, 0x2, 0x54f, 0x550, 0x7, 0x77, 0x2, 0x2, 0x550, 0x551, 
-       0x7, 0x6f, 0x2, 0x2, 0x551, 0x7e, 0x3, 0x2, 0x2, 0x2, 0x552, 0x553, 
-       0x7, 0x67, 0x2, 0x2, 0x553, 0x554, 0x7, 0x7a, 0x2, 0x2, 0x554, 0x555, 
-       0x7, 0x76, 0x2, 0x2, 0x555, 0x556, 0x7, 0x67, 0x2, 0x2, 0x556, 0x557, 
-       0x7, 0x74, 0x2, 0x2, 0x557, 0x558, 0x7, 0x70, 0x2, 0x2, 0x558, 0x80, 
-       0x3, 0x2, 0x2, 0x2, 0x559, 0x55a, 0x7, 0x48, 0x2, 0x2, 0x55a, 0x55b, 
-       0x7, 0x67, 0x2, 0x2, 0x55b, 0x55c, 0x7, 0x67, 0x2, 0x2, 0x55c, 0x55d, 
-       0x7, 0x66, 0x2, 0x2, 0x55d, 0x55e, 0x7, 0x64, 0x2, 0x2, 0x55e, 0x55f, 
-       0x7, 0x63, 0x2, 0x2, 0x55f, 0x560, 0x7, 0x65, 0x2, 0x2, 0x560, 0x561, 
-       0x7, 0x6d, 0x2, 0x2, 0x561, 0x562, 0x7, 0x56, 0x2, 0x2, 0x562, 0x563, 
+       0x7, 0x35, 0x2, 0x2, 0x4af, 0x58, 0x3, 0x2, 0x2, 0x2, 0x4b0, 0x4b1, 
+       0x7, 0x66, 0x2, 0x2, 0x4b1, 0x4b2, 0x7, 0x71, 0x2, 0x2, 0x4b2, 0x4b3, 
+       0x7, 0x77, 0x2, 0x2, 0x4b3, 0x4b4, 0x7, 0x64, 0x2, 0x2, 0x4b4, 0x4b5, 
+       0x7, 0x6e, 0x2, 0x2, 0x4b5, 0x4b6, 0x7, 0x67, 0x2, 0x2, 0x4b6, 0x4b7, 
+       0x7, 0x36, 0x2, 0x2, 0x4b7, 0x5a, 0x3, 0x2, 0x2, 0x2, 0x4b8, 0x4b9, 
+       0x7, 0x66, 0x2, 0x2, 0x4b9, 0x4ba, 0x7, 0x71, 0x2, 0x2, 0x4ba, 0x4bb, 
+       0x7, 0x77, 0x2, 0x2, 0x4bb, 0x4bc, 0x7, 0x64, 0x2, 0x2, 0x4bc, 0x4bd, 
+       0x7, 0x6e, 0x2, 0x2, 0x4bd, 0x4be, 0x7, 0x67, 0x2, 0x2, 0x4be, 0x4bf, 
+       0x7, 0x33, 0x2, 0x2, 0x4bf, 0x4c0, 0x7, 0x7a, 0x2, 0x2, 0x4c0, 0x4c1, 
+       0x7, 0x33, 0x2, 0x2, 0x4c1, 0x5c, 0x3, 0x2, 0x2, 0x2, 0x4c2, 0x4c3, 
+       0x7, 0x66, 0x2, 0x2, 0x4c3, 0x4c4, 0x7, 0x71, 0x2, 0x2, 0x4c4, 0x4c5, 
+       0x7, 0x77, 0x2, 0x2, 0x4c5, 0x4c6, 0x7, 0x64, 0x2, 0x2, 0x4c6, 0x4c7, 
+       0x7, 0x6e, 0x2, 0x2, 0x4c7, 0x4c8, 0x7, 0x67, 0x2, 0x2, 0x4c8, 0x4c9, 
+       0x7, 0x33, 0x2, 0x2, 0x4c9, 0x4ca, 0x7, 0x7a, 0x2, 0x2, 0x4ca, 0x4cb, 
+       0x7, 0x34, 0x2, 0x2, 0x4cb, 0x5e, 0x3, 0x2, 0x2, 0x2, 0x4cc, 0x4cd, 
+       0x7, 0x66, 0x2, 0x2, 0x4cd, 0x4ce, 0x7, 0x71, 0x2, 0x2, 0x4ce, 0x4cf, 
+       0x7, 0x77, 0x2, 0x2, 0x4cf, 0x4d0, 0x7, 0x64, 0x2, 0x2, 0x4d0, 0x4d1, 
+       0x7, 0x6e, 0x2, 0x2, 0x4d1, 0x4d2, 0x7, 0x67, 0x2, 0x2, 0x4d2, 0x4d3, 
+       0x7, 0x33, 0x2, 0x2, 0x4d3, 0x4d4, 0x7, 0x7a, 0x2, 0x2, 0x4d4, 0x4d5, 
+       0x7, 0x35, 0x2, 0x2, 0x4d5, 0x60, 0x3, 0x2, 0x2, 0x2, 0x4d6, 0x4d7, 
+       0x7, 0x66, 0x2, 0x2, 0x4d7, 0x4d8, 0x7, 0x71, 0x2, 0x2, 0x4d8, 0x4d9, 
+       0x7, 0x77, 0x2, 0x2, 0x4d9, 0x4da, 0x7, 0x64, 0x2, 0x2, 0x4da, 0x4db, 
+       0x7, 0x6e, 0x2, 0x2, 0x4db, 0x4dc, 0x7, 0x67, 0x2, 0x2, 0x4dc, 0x4dd, 
+       0x7, 0x33, 0x2, 0x2, 0x4dd, 0x4de, 0x7, 0x7a, 0x2, 0x2, 0x4de, 0x4df, 
+       0x7, 0x36, 0x2, 0x2, 0x4df, 0x62, 0x3, 0x2, 0x2, 0x2, 0x4e0, 0x4e1, 
+       0x7, 0x66, 0x2, 0x2, 0x4e1, 0x4e2, 0x7, 0x71, 0x2, 0x2, 0x4e2, 0x4e3, 
+       0x7, 0x77, 0x2, 0x2, 0x4e3, 0x4e4, 0x7, 0x64, 0x2, 0x2, 0x4e4, 0x4e5, 
+       0x7, 0x6e, 0x2, 0x2, 0x4e5, 0x4e6, 0x7, 0x67, 0x2, 0x2, 0x4e6, 0x4e7, 
+       0x7, 0x34, 0x2, 0x2, 0x4e7, 0x4e8, 0x7, 0x7a, 0x2, 0x2, 0x4e8, 0x4e9, 
+       0x7, 0x33, 0x2, 0x2, 0x4e9, 0x64, 0x3, 0x2, 0x2, 0x2, 0x4ea, 0x4eb, 
+       0x7, 0x66, 0x2, 0x2, 0x4eb, 0x4ec, 0x7, 0x71, 0x2, 0x2, 0x4ec, 0x4ed, 
+       0x7, 0x77, 0x2, 0x2, 0x4ed, 0x4ee, 0x7, 0x64, 0x2, 0x2, 0x4ee, 0x4ef, 
+       0x7, 0x6e, 0x2, 0x2, 0x4ef, 0x4f0, 0x7, 0x67, 0x2, 0x2, 0x4f0, 0x4f1, 
+       0x7, 0x34, 0x2, 0x2, 0x4f1, 0x4f2, 0x7, 0x7a, 0x2, 0x2, 0x4f2, 0x4f3, 
+       0x7, 0x34, 0x2, 0x2, 0x4f3, 0x66, 0x3, 0x2, 0x2, 0x2, 0x4f4, 0x4f5, 
+       0x7, 0x66, 0x2, 0x2, 0x4f5, 0x4f6, 0x7, 0x71, 0x2, 0x2, 0x4f6, 0x4f7, 
+       0x7, 0x77, 0x2, 0x2, 0x4f7, 0x4f8, 0x7, 0x64, 0x2, 0x2, 0x4f8, 0x4f9, 
+       0x7, 0x6e, 0x2, 0x2, 0x4f9, 0x4fa, 0x7, 0x67, 0x2, 0x2, 0x4fa, 0x4fb, 
+       0x7, 0x34, 0x2, 0x2, 0x4fb, 0x4fc, 0x7, 0x7a, 0x2, 0x2, 0x4fc, 0x4fd, 
+       0x7, 0x35, 0x2, 0x2, 0x4fd, 0x68, 0x3, 0x2, 0x2, 0x2, 0x4fe, 0x4ff, 
+       0x7, 0x66, 0x2, 0x2, 0x4ff, 0x500, 0x7, 0x71, 0x2, 0x2, 0x500, 0x501, 
+       0x7, 0x77, 0x2, 0x2, 0x501, 0x502, 0x7, 0x64, 0x2, 0x2, 0x502, 0x503, 
+       0x7, 0x6e, 0x2, 0x2, 0x503, 0x504, 0x7, 0x67, 0x2, 0x2, 0x504, 0x505, 
+       0x7, 0x34, 0x2, 0x2, 0x505, 0x506, 0x7, 0x7a, 0x2, 0x2, 0x506, 0x507, 
+       0x7, 0x36, 0x2, 0x2, 0x507, 0x6a, 0x3, 0x2, 0x2, 0x2, 0x508, 0x509, 
+       0x7, 0x66, 0x2, 0x2, 0x509, 0x50a, 0x7, 0x71, 0x2, 0x2, 0x50a, 0x50b, 
+       0x7, 0x77, 0x2, 0x2, 0x50b, 0x50c, 0x7, 0x64, 0x2, 0x2, 0x50c, 0x50d, 
+       0x7, 0x6e, 0x2, 0x2, 0x50d, 0x50e, 0x7, 0x67, 0x2, 0x2, 0x50e, 0x50f, 
+       0x7, 0x35, 0x2, 0x2, 0x50f, 0x510, 0x7, 0x7a, 0x2, 0x2, 0x510, 0x511, 
+       0x7, 0x33, 0x2, 0x2, 0x511, 0x6c, 0x3, 0x2, 0x2, 0x2, 0x512, 0x513, 
+       0x7, 0x66, 0x2, 0x2, 0x513, 0x514, 0x7, 0x71, 0x2, 0x2, 0x514, 0x515, 
+       0x7, 0x77, 0x2, 0x2, 0x515, 0x516, 0x7, 0x64, 0x2, 0x2, 0x516, 0x517, 
+       0x7, 0x6e, 0x2, 0x2, 0x517, 0x518, 0x7, 0x67, 0x2, 0x2, 0x518, 0x519, 
+       0x7, 0x35, 0x2, 0x2, 0x519, 0x51a, 0x7, 0x7a, 0x2, 0x2, 0x51a, 0x51b, 
+       0x7, 0x34, 0x2, 0x2, 0x51b, 0x6e, 0x3, 0x2, 0x2, 0x2, 0x51c, 0x51d, 
+       0x7, 0x66, 0x2, 0x2, 0x51d, 0x51e, 0x7, 0x71, 0x2, 0x2, 0x51e, 0x51f, 
+       0x7, 0x77, 0x2, 0x2, 0x51f, 0x520, 0x7, 0x64, 0x2, 0x2, 0x520, 0x521, 
+       0x7, 0x6e, 0x2, 0x2, 0x521, 0x522, 0x7, 0x67, 0x2, 0x2, 0x522, 0x523, 
+       0x7, 0x35, 0x2, 0x2, 0x523, 0x524, 0x7, 0x7a, 0x2, 0x2, 0x524, 0x525, 
+       0x7, 0x35, 0x2, 0x2, 0x525, 0x70, 0x3, 0x2, 0x2, 0x2, 0x526, 0x527, 
+       0x7, 0x66, 0x2, 0x2, 0x527, 0x528, 0x7, 0x71, 0x2, 0x2, 0x528, 0x529, 
+       0x7, 0x77, 0x2, 0x2, 0x529, 0x52a, 0x7, 0x64, 0x2, 0x2, 0x52a, 0x52b, 
+       0x7, 0x6e, 0x2, 0x2, 0x52b, 0x52c, 0x7, 0x67, 0x2, 0x2, 0x52c, 0x52d, 
+       0x7, 0x35, 0x2, 0x2, 0x52d, 0x52e, 0x7, 0x7a, 0x2, 0x2, 0x52e, 0x52f, 
+       0x7, 0x36, 0x2, 0x2, 0x52f, 0x72, 0x3, 0x2, 0x2, 0x2, 0x530, 0x531, 
+       0x7, 0x66, 0x2, 0x2, 0x531, 0x532, 0x7, 0x71, 0x2, 0x2, 0x532, 0x533, 
+       0x7, 0x77, 0x2, 0x2, 0x533, 0x534, 0x7, 0x64, 0x2, 0x2, 0x534, 0x535, 
+       0x7, 0x6e, 0x2, 0x2, 0x535, 0x536, 0x7, 0x67, 0x2, 0x2, 0x536, 0x537, 
+       0x7, 0x36, 0x2, 0x2, 0x537, 0x538, 0x7, 0x7a, 0x2, 0x2, 0x538, 0x539, 
+       0x7, 0x33, 0x2, 0x2, 0x539, 0x74, 0x3, 0x2, 0x2, 0x2, 0x53a, 0x53b, 
+       0x7, 0x66, 0x2, 0x2, 0x53b, 0x53c, 0x7, 0x71, 0x2, 0x2, 0x53c, 0x53d, 
+       0x7, 0x77, 0x2, 0x2, 0x53d, 0x53e, 0x7, 0x64, 0x2, 0x2, 0x53e, 0x53f, 
+       0x7, 0x6e, 0x2, 0x2, 0x53f, 0x540, 0x7, 0x67, 0x2, 0x2, 0x540, 0x541, 
+       0x7, 0x36, 0x2, 0x2, 0x541, 0x542, 0x7, 0x7a, 0x2, 0x2, 0x542, 0x543, 
+       0x7, 0x34, 0x2, 0x2, 0x543, 0x76, 0x3, 0x2, 0x2, 0x2, 0x544, 0x545, 
+       0x7, 0x66, 0x2, 0x2, 0x545, 0x546, 0x7, 0x71, 0x2, 0x2, 0x546, 0x547, 
+       0x7, 0x77, 0x2, 0x2, 0x547, 0x548, 0x7, 0x64, 0x2, 0x2, 0x548, 0x549, 
+       0x7, 0x6e, 0x2, 0x2, 0x549, 0x54a, 0x7, 0x67, 0x2, 0x2, 0x54a, 0x54b, 
+       0x7, 0x36, 0x2, 0x2, 0x54b, 0x54c, 0x7, 0x7a, 0x2, 0x2, 0x54c, 0x54d, 
+       0x7, 0x35, 0x2, 0x2, 0x54d, 0x78, 0x3, 0x2, 0x2, 0x2, 0x54e, 0x54f, 
+       0x7, 0x66, 0x2, 0x2, 0x54f, 0x550, 0x7, 0x71, 0x2, 0x2, 0x550, 0x551, 
+       0x7, 0x77, 0x2, 0x2, 0x551, 0x552, 0x7, 0x64, 0x2, 0x2, 0x552, 0x553, 
+       0x7, 0x6e, 0x2, 0x2, 0x553, 0x554, 0x7, 0x67, 0x2, 0x2, 0x554, 0x555, 
+       0x7, 0x36, 0x2, 0x2, 0x555, 0x556, 0x7, 0x7a, 0x2, 0x2, 0x556, 0x557, 
+       0x7, 0x36, 0x2, 0x2, 0x557, 0x7a, 0x3, 0x2, 0x2, 0x2, 0x558, 0x559, 
+       0x7, 0x67, 0x2, 0x2, 0x559, 0x55a, 0x7, 0x6e, 0x2, 0x2, 0x55a, 0x55b, 
+       0x7, 0x75, 0x2, 0x2, 0x55b, 0x55c, 0x7, 0x67, 0x2, 0x2, 0x55c, 0x7c, 
+       0x3, 0x2, 0x2, 0x2, 0x55d, 0x55e, 0x7, 0x67, 0x2, 0x2, 0x55e, 0x55f, 
+       0x7, 0x70, 0x2, 0x2, 0x55f, 0x560, 0x7, 0x77, 0x2, 0x2, 0x560, 0x561, 
+       0x7, 0x6f, 0x2, 0x2, 0x561, 0x7e, 0x3, 0x2, 0x2, 0x2, 0x562, 0x563, 
        0x7, 0x67, 0x2, 0x2, 0x563, 0x564, 0x7, 0x7a, 0x2, 0x2, 0x564, 0x565, 
        0x7, 0x67, 0x2, 0x2, 0x563, 0x564, 0x7, 0x7a, 0x2, 0x2, 0x564, 0x565, 
-       0x7, 0x76, 0x2, 0x2, 0x565, 0x566, 0x7, 0x77, 0x2, 0x2, 0x566, 0x567, 
-       0x7, 0x74, 0x2, 0x2, 0x567, 0x568, 0x7, 0x67, 0x2, 0x2, 0x568, 0x569, 
-       0x7, 0x34, 0x2, 0x2, 0x569, 0x56a, 0x7, 0x46, 0x2, 0x2, 0x56a, 0x82, 
-       0x3, 0x2, 0x2, 0x2, 0x56b, 0x56c, 0x7, 0x48, 0x2, 0x2, 0x56c, 0x56d, 
-       0x7, 0x67, 0x2, 0x2, 0x56d, 0x56e, 0x7, 0x67, 0x2, 0x2, 0x56e, 0x56f, 
-       0x7, 0x66, 0x2, 0x2, 0x56f, 0x570, 0x7, 0x64, 0x2, 0x2, 0x570, 0x571, 
-       0x7, 0x63, 0x2, 0x2, 0x571, 0x572, 0x7, 0x65, 0x2, 0x2, 0x572, 0x573, 
-       0x7, 0x6d, 0x2, 0x2, 0x573, 0x574, 0x7, 0x56, 0x2, 0x2, 0x574, 0x575, 
-       0x7, 0x67, 0x2, 0x2, 0x575, 0x576, 0x7, 0x7a, 0x2, 0x2, 0x576, 0x577, 
-       0x7, 0x76, 0x2, 0x2, 0x577, 0x578, 0x7, 0x77, 0x2, 0x2, 0x578, 0x579, 
-       0x7, 0x74, 0x2, 0x2, 0x579, 0x57a, 0x7, 0x67, 0x2, 0x2, 0x57a, 0x57b, 
-       0x7, 0x34, 0x2, 0x2, 0x57b, 0x57c, 0x7, 0x46, 0x2, 0x2, 0x57c, 0x57d, 
-       0x7, 0x43, 0x2, 0x2, 0x57d, 0x57e, 0x7, 0x74, 0x2, 0x2, 0x57e, 0x57f, 
-       0x7, 0x74, 0x2, 0x2, 0x57f, 0x580, 0x7, 0x63, 0x2, 0x2, 0x580, 0x581, 
-       0x7, 0x7b, 0x2, 0x2, 0x581, 0x84, 0x3, 0x2, 0x2, 0x2, 0x582, 0x583, 
-       0x7, 0x68, 0x2, 0x2, 0x583, 0x584, 0x7, 0x6e, 0x2, 0x2, 0x584, 0x585, 
-       0x7, 0x71, 0x2, 0x2, 0x585, 0x586, 0x7, 0x63, 0x2, 0x2, 0x586, 0x587, 
-       0x7, 0x76, 0x2, 0x2, 0x587, 0x86, 0x3, 0x2, 0x2, 0x2, 0x588, 0x589, 
-       0x7, 0x68, 0x2, 0x2, 0x589, 0x58a, 0x7, 0x6e, 0x2, 0x2, 0x58a, 0x58b, 
-       0x7, 0x71, 0x2, 0x2, 0x58b, 0x58c, 0x7, 0x63, 0x2, 0x2, 0x58c, 0x58d, 
-       0x7, 0x76, 0x2, 0x2, 0x58d, 0x58e, 0x7, 0x33, 0x2, 0x2, 0x58e, 0x88, 
-       0x3, 0x2, 0x2, 0x2, 0x58f, 0x590, 0x7, 0x68, 0x2, 0x2, 0x590, 0x591, 
-       0x7, 0x6e, 0x2, 0x2, 0x591, 0x592, 0x7, 0x71, 0x2, 0x2, 0x592, 0x593, 
-       0x7, 0x63, 0x2, 0x2, 0x593, 0x594, 0x7, 0x76, 0x2, 0x2, 0x594, 0x595, 
-       0x7, 0x34, 0x2, 0x2, 0x595, 0x8a, 0x3, 0x2, 0x2, 0x2, 0x596, 0x597, 
-       0x7, 0x68, 0x2, 0x2, 0x597, 0x598, 0x7, 0x6e, 0x2, 0x2, 0x598, 0x599, 
-       0x7, 0x71, 0x2, 0x2, 0x599, 0x59a, 0x7, 0x63, 0x2, 0x2, 0x59a, 0x59b, 
-       0x7, 0x76, 0x2, 0x2, 0x59b, 0x59c, 0x7, 0x35, 0x2, 0x2, 0x59c, 0x8c, 
-       0x3, 0x2, 0x2, 0x2, 0x59d, 0x59e, 0x7, 0x68, 0x2, 0x2, 0x59e, 0x59f, 
-       0x7, 0x6e, 0x2, 0x2, 0x59f, 0x5a0, 0x7, 0x71, 0x2, 0x2, 0x5a0, 0x5a1, 
-       0x7, 0x63, 0x2, 0x2, 0x5a1, 0x5a2, 0x7, 0x76, 0x2, 0x2, 0x5a2, 0x5a3, 
-       0x7, 0x36, 0x2, 0x2, 0x5a3, 0x8e, 0x3, 0x2, 0x2, 0x2, 0x5a4, 0x5a5, 
-       0x7, 0x68, 0x2, 0x2, 0x5a5, 0x5a6, 0x7, 0x6e, 0x2, 0x2, 0x5a6, 0x5a7, 
-       0x7, 0x71, 0x2, 0x2, 0x5a7, 0x5a8, 0x7, 0x63, 0x2, 0x2, 0x5a8, 0x5a9, 
-       0x7, 0x76, 0x2, 0x2, 0x5a9, 0x5aa, 0x7, 0x33, 0x2, 0x2, 0x5aa, 0x5ab, 
-       0x7, 0x7a, 0x2, 0x2, 0x5ab, 0x5ac, 0x7, 0x33, 0x2, 0x2, 0x5ac, 0x90, 
+       0x7, 0x72, 0x2, 0x2, 0x565, 0x566, 0x7, 0x71, 0x2, 0x2, 0x566, 0x567, 
+       0x7, 0x74, 0x2, 0x2, 0x567, 0x568, 0x7, 0x76, 0x2, 0x2, 0x568, 0x80, 
+       0x3, 0x2, 0x2, 0x2, 0x569, 0x56a, 0x7, 0x67, 0x2, 0x2, 0x56a, 0x56b, 
+       0x7, 0x7a, 0x2, 0x2, 0x56b, 0x56c, 0x7, 0x76, 0x2, 0x2, 0x56c, 0x56d, 
+       0x7, 0x67, 0x2, 0x2, 0x56d, 0x56e, 0x7, 0x74, 0x2, 0x2, 0x56e, 0x56f, 
+       0x7, 0x70, 0x2, 0x2, 0x56f, 0x82, 0x3, 0x2, 0x2, 0x2, 0x570, 0x571, 
+       0x7, 0x48, 0x2, 0x2, 0x571, 0x572, 0x7, 0x67, 0x2, 0x2, 0x572, 0x573, 
+       0x7, 0x67, 0x2, 0x2, 0x573, 0x574, 0x7, 0x66, 0x2, 0x2, 0x574, 0x575, 
+       0x7, 0x64, 0x2, 0x2, 0x575, 0x576, 0x7, 0x63, 0x2, 0x2, 0x576, 0x577, 
+       0x7, 0x65, 0x2, 0x2, 0x577, 0x578, 0x7, 0x6d, 0x2, 0x2, 0x578, 0x579, 
+       0x7, 0x56, 0x2, 0x2, 0x579, 0x57a, 0x7, 0x67, 0x2, 0x2, 0x57a, 0x57b, 
+       0x7, 0x7a, 0x2, 0x2, 0x57b, 0x57c, 0x7, 0x76, 0x2, 0x2, 0x57c, 0x57d, 
+       0x7, 0x77, 0x2, 0x2, 0x57d, 0x57e, 0x7, 0x74, 0x2, 0x2, 0x57e, 0x57f, 
+       0x7, 0x67, 0x2, 0x2, 0x57f, 0x580, 0x7, 0x34, 0x2, 0x2, 0x580, 0x581, 
+       0x7, 0x46, 0x2, 0x2, 0x581, 0x84, 0x3, 0x2, 0x2, 0x2, 0x582, 0x583, 
+       0x7, 0x48, 0x2, 0x2, 0x583, 0x584, 0x7, 0x67, 0x2, 0x2, 0x584, 0x585, 
+       0x7, 0x67, 0x2, 0x2, 0x585, 0x586, 0x7, 0x66, 0x2, 0x2, 0x586, 0x587, 
+       0x7, 0x64, 0x2, 0x2, 0x587, 0x588, 0x7, 0x63, 0x2, 0x2, 0x588, 0x589, 
+       0x7, 0x65, 0x2, 0x2, 0x589, 0x58a, 0x7, 0x6d, 0x2, 0x2, 0x58a, 0x58b, 
+       0x7, 0x56, 0x2, 0x2, 0x58b, 0x58c, 0x7, 0x67, 0x2, 0x2, 0x58c, 0x58d, 
+       0x7, 0x7a, 0x2, 0x2, 0x58d, 0x58e, 0x7, 0x76, 0x2, 0x2, 0x58e, 0x58f, 
+       0x7, 0x77, 0x2, 0x2, 0x58f, 0x590, 0x7, 0x74, 0x2, 0x2, 0x590, 0x591, 
+       0x7, 0x67, 0x2, 0x2, 0x591, 0x592, 0x7, 0x34, 0x2, 0x2, 0x592, 0x593, 
+       0x7, 0x46, 0x2, 0x2, 0x593, 0x594, 0x7, 0x43, 0x2, 0x2, 0x594, 0x595, 
+       0x7, 0x74, 0x2, 0x2, 0x595, 0x596, 0x7, 0x74, 0x2, 0x2, 0x596, 0x597, 
+       0x7, 0x63, 0x2, 0x2, 0x597, 0x598, 0x7, 0x7b, 0x2, 0x2, 0x598, 0x86, 
+       0x3, 0x2, 0x2, 0x2, 0x599, 0x59a, 0x7, 0x68, 0x2, 0x2, 0x59a, 0x59b, 
+       0x7, 0x6e, 0x2, 0x2, 0x59b, 0x59c, 0x7, 0x71, 0x2, 0x2, 0x59c, 0x59d, 
+       0x7, 0x63, 0x2, 0x2, 0x59d, 0x59e, 0x7, 0x76, 0x2, 0x2, 0x59e, 0x88, 
+       0x3, 0x2, 0x2, 0x2, 0x59f, 0x5a0, 0x7, 0x68, 0x2, 0x2, 0x5a0, 0x5a1, 
+       0x7, 0x6e, 0x2, 0x2, 0x5a1, 0x5a2, 0x7, 0x71, 0x2, 0x2, 0x5a2, 0x5a3, 
+       0x7, 0x63, 0x2, 0x2, 0x5a3, 0x5a4, 0x7, 0x76, 0x2, 0x2, 0x5a4, 0x5a5, 
+       0x7, 0x33, 0x2, 0x2, 0x5a5, 0x8a, 0x3, 0x2, 0x2, 0x2, 0x5a6, 0x5a7, 
+       0x7, 0x68, 0x2, 0x2, 0x5a7, 0x5a8, 0x7, 0x6e, 0x2, 0x2, 0x5a8, 0x5a9, 
+       0x7, 0x71, 0x2, 0x2, 0x5a9, 0x5aa, 0x7, 0x63, 0x2, 0x2, 0x5aa, 0x5ab, 
+       0x7, 0x76, 0x2, 0x2, 0x5ab, 0x5ac, 0x7, 0x34, 0x2, 0x2, 0x5ac, 0x8c, 
        0x3, 0x2, 0x2, 0x2, 0x5ad, 0x5ae, 0x7, 0x68, 0x2, 0x2, 0x5ae, 0x5af, 
        0x3, 0x2, 0x2, 0x2, 0x5ad, 0x5ae, 0x7, 0x68, 0x2, 0x2, 0x5ae, 0x5af, 
        0x7, 0x6e, 0x2, 0x2, 0x5af, 0x5b0, 0x7, 0x71, 0x2, 0x2, 0x5b0, 0x5b1, 
        0x7, 0x6e, 0x2, 0x2, 0x5af, 0x5b0, 0x7, 0x71, 0x2, 0x2, 0x5b0, 0x5b1, 
        0x7, 0x63, 0x2, 0x2, 0x5b1, 0x5b2, 0x7, 0x76, 0x2, 0x2, 0x5b2, 0x5b3, 
        0x7, 0x63, 0x2, 0x2, 0x5b1, 0x5b2, 0x7, 0x76, 0x2, 0x2, 0x5b2, 0x5b3, 
-       0x7, 0x33, 0x2, 0x2, 0x5b3, 0x5b4, 0x7, 0x7a, 0x2, 0x2, 0x5b4, 0x5b5, 
-       0x7, 0x34, 0x2, 0x2, 0x5b5, 0x92, 0x3, 0x2, 0x2, 0x2, 0x5b6, 0x5b7, 
-       0x7, 0x68, 0x2, 0x2, 0x5b7, 0x5b8, 0x7, 0x6e, 0x2, 0x2, 0x5b8, 0x5b9, 
-       0x7, 0x71, 0x2, 0x2, 0x5b9, 0x5ba, 0x7, 0x63, 0x2, 0x2, 0x5ba, 0x5bb, 
-       0x7, 0x76, 0x2, 0x2, 0x5bb, 0x5bc, 0x7, 0x33, 0x2, 0x2, 0x5bc, 0x5bd, 
-       0x7, 0x7a, 0x2, 0x2, 0x5bd, 0x5be, 0x7, 0x35, 0x2, 0x2, 0x5be, 0x94, 
-       0x3, 0x2, 0x2, 0x2, 0x5bf, 0x5c0, 0x7, 0x68, 0x2, 0x2, 0x5c0, 0x5c1, 
-       0x7, 0x6e, 0x2, 0x2, 0x5c1, 0x5c2, 0x7, 0x71, 0x2, 0x2, 0x5c2, 0x5c3, 
-       0x7, 0x63, 0x2, 0x2, 0x5c3, 0x5c4, 0x7, 0x76, 0x2, 0x2, 0x5c4, 0x5c5, 
-       0x7, 0x33, 0x2, 0x2, 0x5c5, 0x5c6, 0x7, 0x7a, 0x2, 0x2, 0x5c6, 0x5c7, 
-       0x7, 0x36, 0x2, 0x2, 0x5c7, 0x96, 0x3, 0x2, 0x2, 0x2, 0x5c8, 0x5c9, 
-       0x7, 0x68, 0x2, 0x2, 0x5c9, 0x5ca, 0x7, 0x6e, 0x2, 0x2, 0x5ca, 0x5cb, 
-       0x7, 0x71, 0x2, 0x2, 0x5cb, 0x5cc, 0x7, 0x63, 0x2, 0x2, 0x5cc, 0x5cd, 
-       0x7, 0x76, 0x2, 0x2, 0x5cd, 0x5ce, 0x7, 0x34, 0x2, 0x2, 0x5ce, 0x5cf, 
-       0x7, 0x7a, 0x2, 0x2, 0x5cf, 0x5d0, 0x7, 0x33, 0x2, 0x2, 0x5d0, 0x98, 
-       0x3, 0x2, 0x2, 0x2, 0x5d1, 0x5d2, 0x7, 0x68, 0x2, 0x2, 0x5d2, 0x5d3, 
-       0x7, 0x6e, 0x2, 0x2, 0x5d3, 0x5d4, 0x7, 0x71, 0x2, 0x2, 0x5d4, 0x5d5, 
-       0x7, 0x63, 0x2, 0x2, 0x5d5, 0x5d6, 0x7, 0x76, 0x2, 0x2, 0x5d6, 0x5d7, 
-       0x7, 0x34, 0x2, 0x2, 0x5d7, 0x5d8, 0x7, 0x7a, 0x2, 0x2, 0x5d8, 0x5d9, 
-       0x7, 0x34, 0x2, 0x2, 0x5d9, 0x9a, 0x3, 0x2, 0x2, 0x2, 0x5da, 0x5db, 
-       0x7, 0x68, 0x2, 0x2, 0x5db, 0x5dc, 0x7, 0x6e, 0x2, 0x2, 0x5dc, 0x5dd, 
-       0x7, 0x71, 0x2, 0x2, 0x5dd, 0x5de, 0x7, 0x63, 0x2, 0x2, 0x5de, 0x5df, 
-       0x7, 0x76, 0x2, 0x2, 0x5df, 0x5e0, 0x7, 0x34, 0x2, 0x2, 0x5e0, 0x5e1, 
-       0x7, 0x7a, 0x2, 0x2, 0x5e1, 0x5e2, 0x7, 0x35, 0x2, 0x2, 0x5e2, 0x9c, 
-       0x3, 0x2, 0x2, 0x2, 0x5e3, 0x5e4, 0x7, 0x68, 0x2, 0x2, 0x5e4, 0x5e5, 
-       0x7, 0x6e, 0x2, 0x2, 0x5e5, 0x5e6, 0x7, 0x71, 0x2, 0x2, 0x5e6, 0x5e7, 
-       0x7, 0x63, 0x2, 0x2, 0x5e7, 0x5e8, 0x7, 0x76, 0x2, 0x2, 0x5e8, 0x5e9, 
-       0x7, 0x34, 0x2, 0x2, 0x5e9, 0x5ea, 0x7, 0x7a, 0x2, 0x2, 0x5ea, 0x5eb, 
-       0x7, 0x36, 0x2, 0x2, 0x5eb, 0x9e, 0x3, 0x2, 0x2, 0x2, 0x5ec, 0x5ed, 
-       0x7, 0x68, 0x2, 0x2, 0x5ed, 0x5ee, 0x7, 0x6e, 0x2, 0x2, 0x5ee, 0x5ef, 
-       0x7, 0x71, 0x2, 0x2, 0x5ef, 0x5f0, 0x7, 0x63, 0x2, 0x2, 0x5f0, 0x5f1, 
-       0x7, 0x76, 0x2, 0x2, 0x5f1, 0x5f2, 0x7, 0x35, 0x2, 0x2, 0x5f2, 0x5f3, 
-       0x7, 0x7a, 0x2, 0x2, 0x5f3, 0x5f4, 0x7, 0x33, 0x2, 0x2, 0x5f4, 0xa0, 
-       0x3, 0x2, 0x2, 0x2, 0x5f5, 0x5f6, 0x7, 0x68, 0x2, 0x2, 0x5f6, 0x5f7, 
-       0x7, 0x6e, 0x2, 0x2, 0x5f7, 0x5f8, 0x7, 0x71, 0x2, 0x2, 0x5f8, 0x5f9, 
-       0x7, 0x63, 0x2, 0x2, 0x5f9, 0x5fa, 0x7, 0x76, 0x2, 0x2, 0x5fa, 0x5fb, 
-       0x7, 0x35, 0x2, 0x2, 0x5fb, 0x5fc, 0x7, 0x7a, 0x2, 0x2, 0x5fc, 0x5fd, 
-       0x7, 0x34, 0x2, 0x2, 0x5fd, 0xa2, 0x3, 0x2, 0x2, 0x2, 0x5fe, 0x5ff, 
-       0x7, 0x68, 0x2, 0x2, 0x5ff, 0x600, 0x7, 0x6e, 0x2, 0x2, 0x600, 0x601, 
-       0x7, 0x71, 0x2, 0x2, 0x601, 0x602, 0x7, 0x63, 0x2, 0x2, 0x602, 0x603, 
-       0x7, 0x76, 0x2, 0x2, 0x603, 0x604, 0x7, 0x35, 0x2, 0x2, 0x604, 0x605, 
-       0x7, 0x7a, 0x2, 0x2, 0x605, 0x606, 0x7, 0x35, 0x2, 0x2, 0x606, 0xa4, 
-       0x3, 0x2, 0x2, 0x2, 0x607, 0x608, 0x7, 0x68, 0x2, 0x2, 0x608, 0x609, 
-       0x7, 0x6e, 0x2, 0x2, 0x609, 0x60a, 0x7, 0x71, 0x2, 0x2, 0x60a, 0x60b, 
-       0x7, 0x63, 0x2, 0x2, 0x60b, 0x60c, 0x7, 0x76, 0x2, 0x2, 0x60c, 0x60d, 
-       0x7, 0x35, 0x2, 0x2, 0x60d, 0x60e, 0x7, 0x7a, 0x2, 0x2, 0x60e, 0x60f, 
-       0x7, 0x36, 0x2, 0x2, 0x60f, 0xa6, 0x3, 0x2, 0x2, 0x2, 0x610, 0x611, 
-       0x7, 0x68, 0x2, 0x2, 0x611, 0x612, 0x7, 0x6e, 0x2, 0x2, 0x612, 0x613, 
-       0x7, 0x71, 0x2, 0x2, 0x613, 0x614, 0x7, 0x63, 0x2, 0x2, 0x614, 0x615, 
-       0x7, 0x76, 0x2, 0x2, 0x615, 0x616, 0x7, 0x36, 0x2, 0x2, 0x616, 0x617, 
-       0x7, 0x7a, 0x2, 0x2, 0x617, 0x618, 0x7, 0x33, 0x2, 0x2, 0x618, 0xa8, 
-       0x3, 0x2, 0x2, 0x2, 0x619, 0x61a, 0x7, 0x68, 0x2, 0x2, 0x61a, 0x61b, 
-       0x7, 0x6e, 0x2, 0x2, 0x61b, 0x61c, 0x7, 0x71, 0x2, 0x2, 0x61c, 0x61d, 
-       0x7, 0x63, 0x2, 0x2, 0x61d, 0x61e, 0x7, 0x76, 0x2, 0x2, 0x61e, 0x61f, 
-       0x7, 0x36, 0x2, 0x2, 0x61f, 0x620, 0x7, 0x7a, 0x2, 0x2, 0x620, 0x621, 
-       0x7, 0x34, 0x2, 0x2, 0x621, 0xaa, 0x3, 0x2, 0x2, 0x2, 0x622, 0x623, 
-       0x7, 0x68, 0x2, 0x2, 0x623, 0x624, 0x7, 0x6e, 0x2, 0x2, 0x624, 0x625, 
-       0x7, 0x71, 0x2, 0x2, 0x625, 0x626, 0x7, 0x63, 0x2, 0x2, 0x626, 0x627, 
-       0x7, 0x76, 0x2, 0x2, 0x627, 0x628, 0x7, 0x36, 0x2, 0x2, 0x628, 0x629, 
-       0x7, 0x7a, 0x2, 0x2, 0x629, 0x62a, 0x7, 0x35, 0x2, 0x2, 0x62a, 0xac, 
-       0x3, 0x2, 0x2, 0x2, 0x62b, 0x62c, 0x7, 0x68, 0x2, 0x2, 0x62c, 0x62d, 
-       0x7, 0x6e, 0x2, 0x2, 0x62d, 0x62e, 0x7, 0x71, 0x2, 0x2, 0x62e, 0x62f, 
-       0x7, 0x63, 0x2, 0x2, 0x62f, 0x630, 0x7, 0x76, 0x2, 0x2, 0x630, 0x631, 
-       0x7, 0x36, 0x2, 0x2, 0x631, 0x632, 0x7, 0x7a, 0x2, 0x2, 0x632, 0x633, 
-       0x7, 0x36, 0x2, 0x2, 0x633, 0xae, 0x3, 0x2, 0x2, 0x2, 0x634, 0x635, 
-       0x7, 0x68, 0x2, 0x2, 0x635, 0x636, 0x7, 0x71, 0x2, 0x2, 0x636, 0x637, 
-       0x7, 0x74, 0x2, 0x2, 0x637, 0xb0, 0x3, 0x2, 0x2, 0x2, 0x638, 0x639, 
-       0x7, 0x69, 0x2, 0x2, 0x639, 0x63a, 0x7, 0x74, 0x2, 0x2, 0x63a, 0x63b, 
-       0x7, 0x71, 0x2, 0x2, 0x63b, 0x63c, 0x7, 0x77, 0x2, 0x2, 0x63c, 0x63d, 
-       0x7, 0x72, 0x2, 0x2, 0x63d, 0x63e, 0x7, 0x75, 0x2, 0x2, 0x63e, 0x63f, 
-       0x7, 0x6a, 0x2, 0x2, 0x63f, 0x640, 0x7, 0x63, 0x2, 0x2, 0x640, 0x641, 
-       0x7, 0x74, 0x2, 0x2, 0x641, 0x642, 0x7, 0x67, 0x2, 0x2, 0x642, 0x643, 
-       0x7, 0x66, 0x2, 0x2, 0x643, 0xb2, 0x3, 0x2, 0x2, 0x2, 0x644, 0x645, 
-       0x7, 0x69, 0x2, 0x2, 0x645, 0x646, 0x7, 0x6e, 0x2, 0x2, 0x646, 0x647, 
-       0x7, 0x71, 0x2, 0x2, 0x647, 0x648, 0x7, 0x64, 0x2, 0x2, 0x648, 0x649, 
-       0x7, 0x63, 0x2, 0x2, 0x649, 0x64a, 0x7, 0x6e, 0x2, 0x2, 0x64a, 0xb4, 
-       0x3, 0x2, 0x2, 0x2, 0x64b, 0x64c, 0x7, 0x6a, 0x2, 0x2, 0x64c, 0x64d, 
-       0x7, 0x63, 0x2, 0x2, 0x64d, 0x64e, 0x7, 0x6e, 0x2, 0x2, 0x64e, 0x64f, 
-       0x7, 0x68, 0x2, 0x2, 0x64f, 0xb6, 0x3, 0x2, 0x2, 0x2, 0x650, 0x651, 
-       0x7, 0x6a, 0x2, 0x2, 0x651, 0x652, 0x7, 0x63, 0x2, 0x2, 0x652, 0x653, 
-       0x7, 0x6e, 0x2, 0x2, 0x653, 0x654, 0x7, 0x68, 0x2, 0x2, 0x654, 0x655, 
-       0x7, 0x33, 0x2, 0x2, 0x655, 0xb8, 0x3, 0x2, 0x2, 0x2, 0x656, 0x657, 
-       0x7, 0x6a, 0x2, 0x2, 0x657, 0x658, 0x7, 0x63, 0x2, 0x2, 0x658, 0x659, 
-       0x7, 0x6e, 0x2, 0x2, 0x659, 0x65a, 0x7, 0x68, 0x2, 0x2, 0x65a, 0x65b, 
-       0x7, 0x34, 0x2, 0x2, 0x65b, 0xba, 0x3, 0x2, 0x2, 0x2, 0x65c, 0x65d, 
-       0x7, 0x6a, 0x2, 0x2, 0x65d, 0x65e, 0x7, 0x63, 0x2, 0x2, 0x65e, 0x65f, 
-       0x7, 0x6e, 0x2, 0x2, 0x65f, 0x660, 0x7, 0x68, 0x2, 0x2, 0x660, 0x661, 
-       0x7, 0x35, 0x2, 0x2, 0x661, 0xbc, 0x3, 0x2, 0x2, 0x2, 0x662, 0x663, 
-       0x7, 0x6a, 0x2, 0x2, 0x663, 0x664, 0x7, 0x63, 0x2, 0x2, 0x664, 0x665, 
-       0x7, 0x6e, 0x2, 0x2, 0x665, 0x666, 0x7, 0x68, 0x2, 0x2, 0x666, 0x667, 
-       0x7, 0x36, 0x2, 0x2, 0x667, 0xbe, 0x3, 0x2, 0x2, 0x2, 0x668, 0x669, 
-       0x7, 0x6a, 0x2, 0x2, 0x669, 0x66a, 0x7, 0x63, 0x2, 0x2, 0x66a, 0x66b, 
-       0x7, 0x6e, 0x2, 0x2, 0x66b, 0x66c, 0x7, 0x68, 0x2, 0x2, 0x66c, 0x66d, 
-       0x7, 0x33, 0x2, 0x2, 0x66d, 0x66e, 0x7, 0x7a, 0x2, 0x2, 0x66e, 0x66f, 
-       0x7, 0x33, 0x2, 0x2, 0x66f, 0xc0, 0x3, 0x2, 0x2, 0x2, 0x670, 0x671, 
-       0x7, 0x6a, 0x2, 0x2, 0x671, 0x672, 0x7, 0x63, 0x2, 0x2, 0x672, 0x673, 
-       0x7, 0x6e, 0x2, 0x2, 0x673, 0x674, 0x7, 0x68, 0x2, 0x2, 0x674, 0x675, 
-       0x7, 0x33, 0x2, 0x2, 0x675, 0x676, 0x7, 0x7a, 0x2, 0x2, 0x676, 0x677, 
-       0x7, 0x34, 0x2, 0x2, 0x677, 0xc2, 0x3, 0x2, 0x2, 0x2, 0x678, 0x679, 
+       0x7, 0x35, 0x2, 0x2, 0x5b3, 0x8e, 0x3, 0x2, 0x2, 0x2, 0x5b4, 0x5b5, 
+       0x7, 0x68, 0x2, 0x2, 0x5b5, 0x5b6, 0x7, 0x6e, 0x2, 0x2, 0x5b6, 0x5b7, 
+       0x7, 0x71, 0x2, 0x2, 0x5b7, 0x5b8, 0x7, 0x63, 0x2, 0x2, 0x5b8, 0x5b9, 
+       0x7, 0x76, 0x2, 0x2, 0x5b9, 0x5ba, 0x7, 0x36, 0x2, 0x2, 0x5ba, 0x90, 
+       0x3, 0x2, 0x2, 0x2, 0x5bb, 0x5bc, 0x7, 0x68, 0x2, 0x2, 0x5bc, 0x5bd, 
+       0x7, 0x6e, 0x2, 0x2, 0x5bd, 0x5be, 0x7, 0x71, 0x2, 0x2, 0x5be, 0x5bf, 
+       0x7, 0x63, 0x2, 0x2, 0x5bf, 0x5c0, 0x7, 0x76, 0x2, 0x2, 0x5c0, 0x5c1, 
+       0x7, 0x33, 0x2, 0x2, 0x5c1, 0x5c2, 0x7, 0x7a, 0x2, 0x2, 0x5c2, 0x5c3, 
+       0x7, 0x33, 0x2, 0x2, 0x5c3, 0x92, 0x3, 0x2, 0x2, 0x2, 0x5c4, 0x5c5, 
+       0x7, 0x68, 0x2, 0x2, 0x5c5, 0x5c6, 0x7, 0x6e, 0x2, 0x2, 0x5c6, 0x5c7, 
+       0x7, 0x71, 0x2, 0x2, 0x5c7, 0x5c8, 0x7, 0x63, 0x2, 0x2, 0x5c8, 0x5c9, 
+       0x7, 0x76, 0x2, 0x2, 0x5c9, 0x5ca, 0x7, 0x33, 0x2, 0x2, 0x5ca, 0x5cb, 
+       0x7, 0x7a, 0x2, 0x2, 0x5cb, 0x5cc, 0x7, 0x34, 0x2, 0x2, 0x5cc, 0x94, 
+       0x3, 0x2, 0x2, 0x2, 0x5cd, 0x5ce, 0x7, 0x68, 0x2, 0x2, 0x5ce, 0x5cf, 
+       0x7, 0x6e, 0x2, 0x2, 0x5cf, 0x5d0, 0x7, 0x71, 0x2, 0x2, 0x5d0, 0x5d1, 
+       0x7, 0x63, 0x2, 0x2, 0x5d1, 0x5d2, 0x7, 0x76, 0x2, 0x2, 0x5d2, 0x5d3, 
+       0x7, 0x33, 0x2, 0x2, 0x5d3, 0x5d4, 0x7, 0x7a, 0x2, 0x2, 0x5d4, 0x5d5, 
+       0x7, 0x35, 0x2, 0x2, 0x5d5, 0x96, 0x3, 0x2, 0x2, 0x2, 0x5d6, 0x5d7, 
+       0x7, 0x68, 0x2, 0x2, 0x5d7, 0x5d8, 0x7, 0x6e, 0x2, 0x2, 0x5d8, 0x5d9, 
+       0x7, 0x71, 0x2, 0x2, 0x5d9, 0x5da, 0x7, 0x63, 0x2, 0x2, 0x5da, 0x5db, 
+       0x7, 0x76, 0x2, 0x2, 0x5db, 0x5dc, 0x7, 0x33, 0x2, 0x2, 0x5dc, 0x5dd, 
+       0x7, 0x7a, 0x2, 0x2, 0x5dd, 0x5de, 0x7, 0x36, 0x2, 0x2, 0x5de, 0x98, 
+       0x3, 0x2, 0x2, 0x2, 0x5df, 0x5e0, 0x7, 0x68, 0x2, 0x2, 0x5e0, 0x5e1, 
+       0x7, 0x6e, 0x2, 0x2, 0x5e1, 0x5e2, 0x7, 0x71, 0x2, 0x2, 0x5e2, 0x5e3, 
+       0x7, 0x63, 0x2, 0x2, 0x5e3, 0x5e4, 0x7, 0x76, 0x2, 0x2, 0x5e4, 0x5e5, 
+       0x7, 0x34, 0x2, 0x2, 0x5e5, 0x5e6, 0x7, 0x7a, 0x2, 0x2, 0x5e6, 0x5e7, 
+       0x7, 0x33, 0x2, 0x2, 0x5e7, 0x9a, 0x3, 0x2, 0x2, 0x2, 0x5e8, 0x5e9, 
+       0x7, 0x68, 0x2, 0x2, 0x5e9, 0x5ea, 0x7, 0x6e, 0x2, 0x2, 0x5ea, 0x5eb, 
+       0x7, 0x71, 0x2, 0x2, 0x5eb, 0x5ec, 0x7, 0x63, 0x2, 0x2, 0x5ec, 0x5ed, 
+       0x7, 0x76, 0x2, 0x2, 0x5ed, 0x5ee, 0x7, 0x34, 0x2, 0x2, 0x5ee, 0x5ef, 
+       0x7, 0x7a, 0x2, 0x2, 0x5ef, 0x5f0, 0x7, 0x34, 0x2, 0x2, 0x5f0, 0x9c, 
+       0x3, 0x2, 0x2, 0x2, 0x5f1, 0x5f2, 0x7, 0x68, 0x2, 0x2, 0x5f2, 0x5f3, 
+       0x7, 0x6e, 0x2, 0x2, 0x5f3, 0x5f4, 0x7, 0x71, 0x2, 0x2, 0x5f4, 0x5f5, 
+       0x7, 0x63, 0x2, 0x2, 0x5f5, 0x5f6, 0x7, 0x76, 0x2, 0x2, 0x5f6, 0x5f7, 
+       0x7, 0x34, 0x2, 0x2, 0x5f7, 0x5f8, 0x7, 0x7a, 0x2, 0x2, 0x5f8, 0x5f9, 
+       0x7, 0x35, 0x2, 0x2, 0x5f9, 0x9e, 0x3, 0x2, 0x2, 0x2, 0x5fa, 0x5fb, 
+       0x7, 0x68, 0x2, 0x2, 0x5fb, 0x5fc, 0x7, 0x6e, 0x2, 0x2, 0x5fc, 0x5fd, 
+       0x7, 0x71, 0x2, 0x2, 0x5fd, 0x5fe, 0x7, 0x63, 0x2, 0x2, 0x5fe, 0x5ff, 
+       0x7, 0x76, 0x2, 0x2, 0x5ff, 0x600, 0x7, 0x34, 0x2, 0x2, 0x600, 0x601, 
+       0x7, 0x7a, 0x2, 0x2, 0x601, 0x602, 0x7, 0x36, 0x2, 0x2, 0x602, 0xa0, 
+       0x3, 0x2, 0x2, 0x2, 0x603, 0x604, 0x7, 0x68, 0x2, 0x2, 0x604, 0x605, 
+       0x7, 0x6e, 0x2, 0x2, 0x605, 0x606, 0x7, 0x71, 0x2, 0x2, 0x606, 0x607, 
+       0x7, 0x63, 0x2, 0x2, 0x607, 0x608, 0x7, 0x76, 0x2, 0x2, 0x608, 0x609, 
+       0x7, 0x35, 0x2, 0x2, 0x609, 0x60a, 0x7, 0x7a, 0x2, 0x2, 0x60a, 0x60b, 
+       0x7, 0x33, 0x2, 0x2, 0x60b, 0xa2, 0x3, 0x2, 0x2, 0x2, 0x60c, 0x60d, 
+       0x7, 0x68, 0x2, 0x2, 0x60d, 0x60e, 0x7, 0x6e, 0x2, 0x2, 0x60e, 0x60f, 
+       0x7, 0x71, 0x2, 0x2, 0x60f, 0x610, 0x7, 0x63, 0x2, 0x2, 0x610, 0x611, 
+       0x7, 0x76, 0x2, 0x2, 0x611, 0x612, 0x7, 0x35, 0x2, 0x2, 0x612, 0x613, 
+       0x7, 0x7a, 0x2, 0x2, 0x613, 0x614, 0x7, 0x34, 0x2, 0x2, 0x614, 0xa4, 
+       0x3, 0x2, 0x2, 0x2, 0x615, 0x616, 0x7, 0x68, 0x2, 0x2, 0x616, 0x617, 
+       0x7, 0x6e, 0x2, 0x2, 0x617, 0x618, 0x7, 0x71, 0x2, 0x2, 0x618, 0x619, 
+       0x7, 0x63, 0x2, 0x2, 0x619, 0x61a, 0x7, 0x76, 0x2, 0x2, 0x61a, 0x61b, 
+       0x7, 0x35, 0x2, 0x2, 0x61b, 0x61c, 0x7, 0x7a, 0x2, 0x2, 0x61c, 0x61d, 
+       0x7, 0x35, 0x2, 0x2, 0x61d, 0xa6, 0x3, 0x2, 0x2, 0x2, 0x61e, 0x61f, 
+       0x7, 0x68, 0x2, 0x2, 0x61f, 0x620, 0x7, 0x6e, 0x2, 0x2, 0x620, 0x621, 
+       0x7, 0x71, 0x2, 0x2, 0x621, 0x622, 0x7, 0x63, 0x2, 0x2, 0x622, 0x623, 
+       0x7, 0x76, 0x2, 0x2, 0x623, 0x624, 0x7, 0x35, 0x2, 0x2, 0x624, 0x625, 
+       0x7, 0x7a, 0x2, 0x2, 0x625, 0x626, 0x7, 0x36, 0x2, 0x2, 0x626, 0xa8, 
+       0x3, 0x2, 0x2, 0x2, 0x627, 0x628, 0x7, 0x68, 0x2, 0x2, 0x628, 0x629, 
+       0x7, 0x6e, 0x2, 0x2, 0x629, 0x62a, 0x7, 0x71, 0x2, 0x2, 0x62a, 0x62b, 
+       0x7, 0x63, 0x2, 0x2, 0x62b, 0x62c, 0x7, 0x76, 0x2, 0x2, 0x62c, 0x62d, 
+       0x7, 0x36, 0x2, 0x2, 0x62d, 0x62e, 0x7, 0x7a, 0x2, 0x2, 0x62e, 0x62f, 
+       0x7, 0x33, 0x2, 0x2, 0x62f, 0xaa, 0x3, 0x2, 0x2, 0x2, 0x630, 0x631, 
+       0x7, 0x68, 0x2, 0x2, 0x631, 0x632, 0x7, 0x6e, 0x2, 0x2, 0x632, 0x633, 
+       0x7, 0x71, 0x2, 0x2, 0x633, 0x634, 0x7, 0x63, 0x2, 0x2, 0x634, 0x635, 
+       0x7, 0x76, 0x2, 0x2, 0x635, 0x636, 0x7, 0x36, 0x2, 0x2, 0x636, 0x637, 
+       0x7, 0x7a, 0x2, 0x2, 0x637, 0x638, 0x7, 0x34, 0x2, 0x2, 0x638, 0xac, 
+       0x3, 0x2, 0x2, 0x2, 0x639, 0x63a, 0x7, 0x68, 0x2, 0x2, 0x63a, 0x63b, 
+       0x7, 0x6e, 0x2, 0x2, 0x63b, 0x63c, 0x7, 0x71, 0x2, 0x2, 0x63c, 0x63d, 
+       0x7, 0x63, 0x2, 0x2, 0x63d, 0x63e, 0x7, 0x76, 0x2, 0x2, 0x63e, 0x63f, 
+       0x7, 0x36, 0x2, 0x2, 0x63f, 0x640, 0x7, 0x7a, 0x2, 0x2, 0x640, 0x641, 
+       0x7, 0x35, 0x2, 0x2, 0x641, 0xae, 0x3, 0x2, 0x2, 0x2, 0x642, 0x643, 
+       0x7, 0x68, 0x2, 0x2, 0x643, 0x644, 0x7, 0x6e, 0x2, 0x2, 0x644, 0x645, 
+       0x7, 0x71, 0x2, 0x2, 0x645, 0x646, 0x7, 0x63, 0x2, 0x2, 0x646, 0x647, 
+       0x7, 0x76, 0x2, 0x2, 0x647, 0x648, 0x7, 0x36, 0x2, 0x2, 0x648, 0x649, 
+       0x7, 0x7a, 0x2, 0x2, 0x649, 0x64a, 0x7, 0x36, 0x2, 0x2, 0x64a, 0xb0, 
+       0x3, 0x2, 0x2, 0x2, 0x64b, 0x64c, 0x7, 0x68, 0x2, 0x2, 0x64c, 0x64d, 
+       0x7, 0x71, 0x2, 0x2, 0x64d, 0x64e, 0x7, 0x74, 0x2, 0x2, 0x64e, 0xb2, 
+       0x3, 0x2, 0x2, 0x2, 0x64f, 0x650, 0x7, 0x69, 0x2, 0x2, 0x650, 0x651, 
+       0x7, 0x74, 0x2, 0x2, 0x651, 0x652, 0x7, 0x71, 0x2, 0x2, 0x652, 0x653, 
+       0x7, 0x77, 0x2, 0x2, 0x653, 0x654, 0x7, 0x72, 0x2, 0x2, 0x654, 0x655, 
+       0x7, 0x75, 0x2, 0x2, 0x655, 0x656, 0x7, 0x6a, 0x2, 0x2, 0x656, 0x657, 
+       0x7, 0x63, 0x2, 0x2, 0x657, 0x658, 0x7, 0x74, 0x2, 0x2, 0x658, 0x659, 
+       0x7, 0x67, 0x2, 0x2, 0x659, 0x65a, 0x7, 0x66, 0x2, 0x2, 0x65a, 0xb4, 
+       0x3, 0x2, 0x2, 0x2, 0x65b, 0x65c, 0x7, 0x69, 0x2, 0x2, 0x65c, 0x65d, 
+       0x7, 0x6e, 0x2, 0x2, 0x65d, 0x65e, 0x7, 0x71, 0x2, 0x2, 0x65e, 0x65f, 
+       0x7, 0x64, 0x2, 0x2, 0x65f, 0x660, 0x7, 0x63, 0x2, 0x2, 0x660, 0x661, 
+       0x7, 0x6e, 0x2, 0x2, 0x661, 0x662, 0x7, 0x6e, 0x2, 0x2, 0x662, 0x663, 
+       0x7, 0x7b, 0x2, 0x2, 0x663, 0x664, 0x7, 0x65, 0x2, 0x2, 0x664, 0x665, 
+       0x7, 0x71, 0x2, 0x2, 0x665, 0x666, 0x7, 0x6a, 0x2, 0x2, 0x666, 0x667, 
+       0x7, 0x67, 0x2, 0x2, 0x667, 0x668, 0x7, 0x74, 0x2, 0x2, 0x668, 0x669, 
+       0x7, 0x67, 0x2, 0x2, 0x669, 0x66a, 0x7, 0x70, 0x2, 0x2, 0x66a, 0x66b, 
+       0x7, 0x76, 0x2, 0x2, 0x66b, 0xb6, 0x3, 0x2, 0x2, 0x2, 0x66c, 0x66d, 
+       0x7, 0x69, 0x2, 0x2, 0x66d, 0x66e, 0x7, 0x6e, 0x2, 0x2, 0x66e, 0x66f, 
+       0x7, 0x71, 0x2, 0x2, 0x66f, 0x670, 0x7, 0x64, 0x2, 0x2, 0x670, 0x671, 
+       0x7, 0x63, 0x2, 0x2, 0x671, 0x672, 0x7, 0x6e, 0x2, 0x2, 0x672, 0xb8, 
+       0x3, 0x2, 0x2, 0x2, 0x673, 0x674, 0x7, 0x6a, 0x2, 0x2, 0x674, 0x675, 
+       0x7, 0x63, 0x2, 0x2, 0x675, 0x676, 0x7, 0x6e, 0x2, 0x2, 0x676, 0x677, 
+       0x7, 0x68, 0x2, 0x2, 0x677, 0xba, 0x3, 0x2, 0x2, 0x2, 0x678, 0x679, 
        0x7, 0x6a, 0x2, 0x2, 0x679, 0x67a, 0x7, 0x63, 0x2, 0x2, 0x67a, 0x67b, 
        0x7, 0x6a, 0x2, 0x2, 0x679, 0x67a, 0x7, 0x63, 0x2, 0x2, 0x67a, 0x67b, 
        0x7, 0x6e, 0x2, 0x2, 0x67b, 0x67c, 0x7, 0x68, 0x2, 0x2, 0x67c, 0x67d, 
        0x7, 0x6e, 0x2, 0x2, 0x67b, 0x67c, 0x7, 0x68, 0x2, 0x2, 0x67c, 0x67d, 
-       0x7, 0x33, 0x2, 0x2, 0x67d, 0x67e, 0x7, 0x7a, 0x2, 0x2, 0x67e, 0x67f, 
-       0x7, 0x35, 0x2, 0x2, 0x67f, 0xc4, 0x3, 0x2, 0x2, 0x2, 0x680, 0x681, 
-       0x7, 0x6a, 0x2, 0x2, 0x681, 0x682, 0x7, 0x63, 0x2, 0x2, 0x682, 0x683, 
-       0x7, 0x6e, 0x2, 0x2, 0x683, 0x684, 0x7, 0x68, 0x2, 0x2, 0x684, 0x685, 
-       0x7, 0x33, 0x2, 0x2, 0x685, 0x686, 0x7, 0x7a, 0x2, 0x2, 0x686, 0x687, 
-       0x7, 0x36, 0x2, 0x2, 0x687, 0xc6, 0x3, 0x2, 0x2, 0x2, 0x688, 0x689, 
-       0x7, 0x6a, 0x2, 0x2, 0x689, 0x68a, 0x7, 0x63, 0x2, 0x2, 0x68a, 0x68b, 
-       0x7, 0x6e, 0x2, 0x2, 0x68b, 0x68c, 0x7, 0x68, 0x2, 0x2, 0x68c, 0x68d, 
-       0x7, 0x34, 0x2, 0x2, 0x68d, 0x68e, 0x7, 0x7a, 0x2, 0x2, 0x68e, 0x68f, 
-       0x7, 0x33, 0x2, 0x2, 0x68f, 0xc8, 0x3, 0x2, 0x2, 0x2, 0x690, 0x691, 
+       0x7, 0x33, 0x2, 0x2, 0x67d, 0xbc, 0x3, 0x2, 0x2, 0x2, 0x67e, 0x67f, 
+       0x7, 0x6a, 0x2, 0x2, 0x67f, 0x680, 0x7, 0x63, 0x2, 0x2, 0x680, 0x681, 
+       0x7, 0x6e, 0x2, 0x2, 0x681, 0x682, 0x7, 0x68, 0x2, 0x2, 0x682, 0x683, 
+       0x7, 0x34, 0x2, 0x2, 0x683, 0xbe, 0x3, 0x2, 0x2, 0x2, 0x684, 0x685, 
+       0x7, 0x6a, 0x2, 0x2, 0x685, 0x686, 0x7, 0x63, 0x2, 0x2, 0x686, 0x687, 
+       0x7, 0x6e, 0x2, 0x2, 0x687, 0x688, 0x7, 0x68, 0x2, 0x2, 0x688, 0x689, 
+       0x7, 0x35, 0x2, 0x2, 0x689, 0xc0, 0x3, 0x2, 0x2, 0x2, 0x68a, 0x68b, 
+       0x7, 0x6a, 0x2, 0x2, 0x68b, 0x68c, 0x7, 0x63, 0x2, 0x2, 0x68c, 0x68d, 
+       0x7, 0x6e, 0x2, 0x2, 0x68d, 0x68e, 0x7, 0x68, 0x2, 0x2, 0x68e, 0x68f, 
+       0x7, 0x36, 0x2, 0x2, 0x68f, 0xc2, 0x3, 0x2, 0x2, 0x2, 0x690, 0x691, 
        0x7, 0x6a, 0x2, 0x2, 0x691, 0x692, 0x7, 0x63, 0x2, 0x2, 0x692, 0x693, 
        0x7, 0x6a, 0x2, 0x2, 0x691, 0x692, 0x7, 0x63, 0x2, 0x2, 0x692, 0x693, 
        0x7, 0x6e, 0x2, 0x2, 0x693, 0x694, 0x7, 0x68, 0x2, 0x2, 0x694, 0x695, 
        0x7, 0x6e, 0x2, 0x2, 0x693, 0x694, 0x7, 0x68, 0x2, 0x2, 0x694, 0x695, 
-       0x7, 0x34, 0x2, 0x2, 0x695, 0x696, 0x7, 0x7a, 0x2, 0x2, 0x696, 0x697, 
-       0x7, 0x34, 0x2, 0x2, 0x697, 0xca, 0x3, 0x2, 0x2, 0x2, 0x698, 0x699, 
+       0x7, 0x33, 0x2, 0x2, 0x695, 0x696, 0x7, 0x7a, 0x2, 0x2, 0x696, 0x697, 
+       0x7, 0x33, 0x2, 0x2, 0x697, 0xc4, 0x3, 0x2, 0x2, 0x2, 0x698, 0x699, 
        0x7, 0x6a, 0x2, 0x2, 0x699, 0x69a, 0x7, 0x63, 0x2, 0x2, 0x69a, 0x69b, 
        0x7, 0x6a, 0x2, 0x2, 0x699, 0x69a, 0x7, 0x63, 0x2, 0x2, 0x69a, 0x69b, 
        0x7, 0x6e, 0x2, 0x2, 0x69b, 0x69c, 0x7, 0x68, 0x2, 0x2, 0x69c, 0x69d, 
        0x7, 0x6e, 0x2, 0x2, 0x69b, 0x69c, 0x7, 0x68, 0x2, 0x2, 0x69c, 0x69d, 
-       0x7, 0x34, 0x2, 0x2, 0x69d, 0x69e, 0x7, 0x7a, 0x2, 0x2, 0x69e, 0x69f, 
-       0x7, 0x35, 0x2, 0x2, 0x69f, 0xcc, 0x3, 0x2, 0x2, 0x2, 0x6a0, 0x6a1, 
+       0x7, 0x33, 0x2, 0x2, 0x69d, 0x69e, 0x7, 0x7a, 0x2, 0x2, 0x69e, 0x69f, 
+       0x7, 0x34, 0x2, 0x2, 0x69f, 0xc6, 0x3, 0x2, 0x2, 0x2, 0x6a0, 0x6a1, 
        0x7, 0x6a, 0x2, 0x2, 0x6a1, 0x6a2, 0x7, 0x63, 0x2, 0x2, 0x6a2, 0x6a3, 
        0x7, 0x6a, 0x2, 0x2, 0x6a1, 0x6a2, 0x7, 0x63, 0x2, 0x2, 0x6a2, 0x6a3, 
        0x7, 0x6e, 0x2, 0x2, 0x6a3, 0x6a4, 0x7, 0x68, 0x2, 0x2, 0x6a4, 0x6a5, 
        0x7, 0x6e, 0x2, 0x2, 0x6a3, 0x6a4, 0x7, 0x68, 0x2, 0x2, 0x6a4, 0x6a5, 
-       0x7, 0x34, 0x2, 0x2, 0x6a5, 0x6a6, 0x7, 0x7a, 0x2, 0x2, 0x6a6, 0x6a7, 
-       0x7, 0x36, 0x2, 0x2, 0x6a7, 0xce, 0x3, 0x2, 0x2, 0x2, 0x6a8, 0x6a9, 
+       0x7, 0x33, 0x2, 0x2, 0x6a5, 0x6a6, 0x7, 0x7a, 0x2, 0x2, 0x6a6, 0x6a7, 
+       0x7, 0x35, 0x2, 0x2, 0x6a7, 0xc8, 0x3, 0x2, 0x2, 0x2, 0x6a8, 0x6a9, 
        0x7, 0x6a, 0x2, 0x2, 0x6a9, 0x6aa, 0x7, 0x63, 0x2, 0x2, 0x6aa, 0x6ab, 
        0x7, 0x6a, 0x2, 0x2, 0x6a9, 0x6aa, 0x7, 0x63, 0x2, 0x2, 0x6aa, 0x6ab, 
        0x7, 0x6e, 0x2, 0x2, 0x6ab, 0x6ac, 0x7, 0x68, 0x2, 0x2, 0x6ac, 0x6ad, 
        0x7, 0x6e, 0x2, 0x2, 0x6ab, 0x6ac, 0x7, 0x68, 0x2, 0x2, 0x6ac, 0x6ad, 
-       0x7, 0x35, 0x2, 0x2, 0x6ad, 0x6ae, 0x7, 0x7a, 0x2, 0x2, 0x6ae, 0x6af, 
-       0x7, 0x33, 0x2, 0x2, 0x6af, 0xd0, 0x3, 0x2, 0x2, 0x2, 0x6b0, 0x6b1, 
+       0x7, 0x33, 0x2, 0x2, 0x6ad, 0x6ae, 0x7, 0x7a, 0x2, 0x2, 0x6ae, 0x6af, 
+       0x7, 0x36, 0x2, 0x2, 0x6af, 0xca, 0x3, 0x2, 0x2, 0x2, 0x6b0, 0x6b1, 
        0x7, 0x6a, 0x2, 0x2, 0x6b1, 0x6b2, 0x7, 0x63, 0x2, 0x2, 0x6b2, 0x6b3, 
        0x7, 0x6a, 0x2, 0x2, 0x6b1, 0x6b2, 0x7, 0x63, 0x2, 0x2, 0x6b2, 0x6b3, 
        0x7, 0x6e, 0x2, 0x2, 0x6b3, 0x6b4, 0x7, 0x68, 0x2, 0x2, 0x6b4, 0x6b5, 
        0x7, 0x6e, 0x2, 0x2, 0x6b3, 0x6b4, 0x7, 0x68, 0x2, 0x2, 0x6b4, 0x6b5, 
-       0x7, 0x35, 0x2, 0x2, 0x6b5, 0x6b6, 0x7, 0x7a, 0x2, 0x2, 0x6b6, 0x6b7, 
-       0x7, 0x34, 0x2, 0x2, 0x6b7, 0xd2, 0x3, 0x2, 0x2, 0x2, 0x6b8, 0x6b9, 
+       0x7, 0x34, 0x2, 0x2, 0x6b5, 0x6b6, 0x7, 0x7a, 0x2, 0x2, 0x6b6, 0x6b7, 
+       0x7, 0x33, 0x2, 0x2, 0x6b7, 0xcc, 0x3, 0x2, 0x2, 0x2, 0x6b8, 0x6b9, 
        0x7, 0x6a, 0x2, 0x2, 0x6b9, 0x6ba, 0x7, 0x63, 0x2, 0x2, 0x6ba, 0x6bb, 
        0x7, 0x6a, 0x2, 0x2, 0x6b9, 0x6ba, 0x7, 0x63, 0x2, 0x2, 0x6ba, 0x6bb, 
        0x7, 0x6e, 0x2, 0x2, 0x6bb, 0x6bc, 0x7, 0x68, 0x2, 0x2, 0x6bc, 0x6bd, 
        0x7, 0x6e, 0x2, 0x2, 0x6bb, 0x6bc, 0x7, 0x68, 0x2, 0x2, 0x6bc, 0x6bd, 
-       0x7, 0x35, 0x2, 0x2, 0x6bd, 0x6be, 0x7, 0x7a, 0x2, 0x2, 0x6be, 0x6bf, 
-       0x7, 0x35, 0x2, 0x2, 0x6bf, 0xd4, 0x3, 0x2, 0x2, 0x2, 0x6c0, 0x6c1, 
+       0x7, 0x34, 0x2, 0x2, 0x6bd, 0x6be, 0x7, 0x7a, 0x2, 0x2, 0x6be, 0x6bf, 
+       0x7, 0x34, 0x2, 0x2, 0x6bf, 0xce, 0x3, 0x2, 0x2, 0x2, 0x6c0, 0x6c1, 
        0x7, 0x6a, 0x2, 0x2, 0x6c1, 0x6c2, 0x7, 0x63, 0x2, 0x2, 0x6c2, 0x6c3, 
        0x7, 0x6a, 0x2, 0x2, 0x6c1, 0x6c2, 0x7, 0x63, 0x2, 0x2, 0x6c2, 0x6c3, 
        0x7, 0x6e, 0x2, 0x2, 0x6c3, 0x6c4, 0x7, 0x68, 0x2, 0x2, 0x6c4, 0x6c5, 
        0x7, 0x6e, 0x2, 0x2, 0x6c3, 0x6c4, 0x7, 0x68, 0x2, 0x2, 0x6c4, 0x6c5, 
-       0x7, 0x35, 0x2, 0x2, 0x6c5, 0x6c6, 0x7, 0x7a, 0x2, 0x2, 0x6c6, 0x6c7, 
-       0x7, 0x36, 0x2, 0x2, 0x6c7, 0xd6, 0x3, 0x2, 0x2, 0x2, 0x6c8, 0x6c9, 
+       0x7, 0x34, 0x2, 0x2, 0x6c5, 0x6c6, 0x7, 0x7a, 0x2, 0x2, 0x6c6, 0x6c7, 
+       0x7, 0x35, 0x2, 0x2, 0x6c7, 0xd0, 0x3, 0x2, 0x2, 0x2, 0x6c8, 0x6c9, 
        0x7, 0x6a, 0x2, 0x2, 0x6c9, 0x6ca, 0x7, 0x63, 0x2, 0x2, 0x6ca, 0x6cb, 
        0x7, 0x6a, 0x2, 0x2, 0x6c9, 0x6ca, 0x7, 0x63, 0x2, 0x2, 0x6ca, 0x6cb, 
        0x7, 0x6e, 0x2, 0x2, 0x6cb, 0x6cc, 0x7, 0x68, 0x2, 0x2, 0x6cc, 0x6cd, 
        0x7, 0x6e, 0x2, 0x2, 0x6cb, 0x6cc, 0x7, 0x68, 0x2, 0x2, 0x6cc, 0x6cd, 
-       0x7, 0x36, 0x2, 0x2, 0x6cd, 0x6ce, 0x7, 0x7a, 0x2, 0x2, 0x6ce, 0x6cf, 
-       0x7, 0x33, 0x2, 0x2, 0x6cf, 0xd8, 0x3, 0x2, 0x2, 0x2, 0x6d0, 0x6d1, 
+       0x7, 0x34, 0x2, 0x2, 0x6cd, 0x6ce, 0x7, 0x7a, 0x2, 0x2, 0x6ce, 0x6cf, 
+       0x7, 0x36, 0x2, 0x2, 0x6cf, 0xd2, 0x3, 0x2, 0x2, 0x2, 0x6d0, 0x6d1, 
        0x7, 0x6a, 0x2, 0x2, 0x6d1, 0x6d2, 0x7, 0x63, 0x2, 0x2, 0x6d2, 0x6d3, 
        0x7, 0x6a, 0x2, 0x2, 0x6d1, 0x6d2, 0x7, 0x63, 0x2, 0x2, 0x6d2, 0x6d3, 
        0x7, 0x6e, 0x2, 0x2, 0x6d3, 0x6d4, 0x7, 0x68, 0x2, 0x2, 0x6d4, 0x6d5, 
        0x7, 0x6e, 0x2, 0x2, 0x6d3, 0x6d4, 0x7, 0x68, 0x2, 0x2, 0x6d4, 0x6d5, 
-       0x7, 0x36, 0x2, 0x2, 0x6d5, 0x6d6, 0x7, 0x7a, 0x2, 0x2, 0x6d6, 0x6d7, 
-       0x7, 0x34, 0x2, 0x2, 0x6d7, 0xda, 0x3, 0x2, 0x2, 0x2, 0x6d8, 0x6d9, 
+       0x7, 0x35, 0x2, 0x2, 0x6d5, 0x6d6, 0x7, 0x7a, 0x2, 0x2, 0x6d6, 0x6d7, 
+       0x7, 0x33, 0x2, 0x2, 0x6d7, 0xd4, 0x3, 0x2, 0x2, 0x2, 0x6d8, 0x6d9, 
        0x7, 0x6a, 0x2, 0x2, 0x6d9, 0x6da, 0x7, 0x63, 0x2, 0x2, 0x6da, 0x6db, 
        0x7, 0x6a, 0x2, 0x2, 0x6d9, 0x6da, 0x7, 0x63, 0x2, 0x2, 0x6da, 0x6db, 
        0x7, 0x6e, 0x2, 0x2, 0x6db, 0x6dc, 0x7, 0x68, 0x2, 0x2, 0x6dc, 0x6dd, 
        0x7, 0x6e, 0x2, 0x2, 0x6db, 0x6dc, 0x7, 0x68, 0x2, 0x2, 0x6dc, 0x6dd, 
-       0x7, 0x36, 0x2, 0x2, 0x6dd, 0x6de, 0x7, 0x7a, 0x2, 0x2, 0x6de, 0x6df, 
-       0x7, 0x35, 0x2, 0x2, 0x6df, 0xdc, 0x3, 0x2, 0x2, 0x2, 0x6e0, 0x6e1, 
+       0x7, 0x35, 0x2, 0x2, 0x6dd, 0x6de, 0x7, 0x7a, 0x2, 0x2, 0x6de, 0x6df, 
+       0x7, 0x34, 0x2, 0x2, 0x6df, 0xd6, 0x3, 0x2, 0x2, 0x2, 0x6e0, 0x6e1, 
        0x7, 0x6a, 0x2, 0x2, 0x6e1, 0x6e2, 0x7, 0x63, 0x2, 0x2, 0x6e2, 0x6e3, 
        0x7, 0x6a, 0x2, 0x2, 0x6e1, 0x6e2, 0x7, 0x63, 0x2, 0x2, 0x6e2, 0x6e3, 
        0x7, 0x6e, 0x2, 0x2, 0x6e3, 0x6e4, 0x7, 0x68, 0x2, 0x2, 0x6e4, 0x6e5, 
        0x7, 0x6e, 0x2, 0x2, 0x6e3, 0x6e4, 0x7, 0x68, 0x2, 0x2, 0x6e4, 0x6e5, 
-       0x7, 0x36, 0x2, 0x2, 0x6e5, 0x6e6, 0x7, 0x7a, 0x2, 0x2, 0x6e6, 0x6e7, 
-       0x7, 0x36, 0x2, 0x2, 0x6e7, 0xde, 0x3, 0x2, 0x2, 0x2, 0x6e8, 0x6e9, 
-       0x7, 0x6b, 0x2, 0x2, 0x6e9, 0x6ea, 0x7, 0x68, 0x2, 0x2, 0x6ea, 0xe0, 
-       0x3, 0x2, 0x2, 0x2, 0x6eb, 0x6ec, 0x7, 0x6b, 0x2, 0x2, 0x6ec, 0x6ed, 
-       0x7, 0x70, 0x2, 0x2, 0x6ed, 0xe2, 0x3, 0x2, 0x2, 0x2, 0x6ee, 0x6ef, 
-       0x7, 0x6b, 0x2, 0x2, 0x6ef, 0x6f0, 0x7, 0x70, 0x2, 0x2, 0x6f0, 0x6f1, 
-       0x7, 0x6e, 0x2, 0x2, 0x6f1, 0x6f2, 0x7, 0x6b, 0x2, 0x2, 0x6f2, 0x6f3, 
-       0x7, 0x70, 0x2, 0x2, 0x6f3, 0x6f4, 0x7, 0x67, 0x2, 0x2, 0x6f4, 0xe4, 
-       0x3, 0x2, 0x2, 0x2, 0x6f5, 0x6f6, 0x7, 0x74, 0x2, 0x2, 0x6f6, 0x6f7, 
-       0x7, 0x71, 0x2, 0x2, 0x6f7, 0x6f8, 0x7, 0x71, 0x2, 0x2, 0x6f8, 0x6f9, 
-       0x7, 0x76, 0x2, 0x2, 0x6f9, 0x6fa, 0x7, 0x65, 0x2, 0x2, 0x6fa, 0x6fb, 
-       0x7, 0x71, 0x2, 0x2, 0x6fb, 0x6fc, 0x7, 0x70, 0x2, 0x2, 0x6fc, 0x6fd, 
-       0x7, 0x75, 0x2, 0x2, 0x6fd, 0x6fe, 0x7, 0x76, 0x2, 0x2, 0x6fe, 0x6ff, 
-       0x7, 0x63, 0x2, 0x2, 0x6ff, 0x700, 0x7, 0x70, 0x2, 0x2, 0x700, 0x701, 
-       0x7, 0x76, 0x2, 0x2, 0x701, 0xe6, 0x3, 0x2, 0x2, 0x2, 0x702, 0x703, 
-       0x7, 0x6b, 0x2, 0x2, 0x703, 0x704, 0x7, 0x70, 0x2, 0x2, 0x704, 0x705, 
-       0x7, 0x71, 0x2, 0x2, 0x705, 0x706, 0x7, 0x77, 0x2, 0x2, 0x706, 0x70e, 
-       0x7, 0x76, 0x2, 0x2, 0x707, 0x708, 0x7, 0x6b, 0x2, 0x2, 0x708, 0x709, 
-       0x7, 0x70, 0x2, 0x2, 0x709, 0x70a, 0x7, 0x22, 0x2, 0x2, 0x70a, 0x70b, 
-       0x7, 0x71, 0x2, 0x2, 0x70b, 0x70c, 0x7, 0x77, 0x2, 0x2, 0x70c, 0x70e, 
-       0x7, 0x76, 0x2, 0x2, 0x70d, 0x702, 0x3, 0x2, 0x2, 0x2, 0x70d, 0x707, 
-       0x3, 0x2, 0x2, 0x2, 0x70e, 0xe8, 0x3, 0x2, 0x2, 0x2, 0x70f, 0x710, 
-       0x7, 0x4b, 0x2, 0x2, 0x710, 0x711, 0x7, 0x70, 0x2, 0x2, 0x711, 0x712, 
-       0x7, 0x72, 0x2, 0x2, 0x712, 0x713, 0x7, 0x77, 0x2, 0x2, 0x713, 0x714, 
-       0x7, 0x76, 0x2, 0x2, 0x714, 0x715, 0x7, 0x52, 0x2, 0x2, 0x715, 0x716, 
-       0x7, 0x63, 0x2, 0x2, 0x716, 0x717, 0x7, 0x76, 0x2, 0x2, 0x717, 0x718, 
-       0x7, 0x65, 0x2, 0x2, 0x718, 0x719, 0x7, 0x6a, 0x2, 0x2, 0x719, 0xea, 
-       0x3, 0x2, 0x2, 0x2, 0x71a, 0x71b, 0x7, 0x6b, 0x2, 0x2, 0x71b, 0x71c, 
-       0x7, 0x70, 0x2, 0x2, 0x71c, 0x71d, 0x7, 0x76, 0x2, 0x2, 0x71d, 0xec, 
-       0x3, 0x2, 0x2, 0x2, 0x71e, 0x71f, 0x7, 0x6b, 0x2, 0x2, 0x71f, 0x720, 
-       0x7, 0x70, 0x2, 0x2, 0x720, 0x721, 0x7, 0x76, 0x2, 0x2, 0x721, 0x722, 
-       0x7, 0x35, 0x2, 0x2, 0x722, 0x723, 0x7, 0x34, 0x2, 0x2, 0x723, 0x724, 
-       0x7, 0x61, 0x2, 0x2, 0x724, 0x725, 0x7, 0x76, 0x2, 0x2, 0x725, 0xee, 
-       0x3, 0x2, 0x2, 0x2, 0x726, 0x727, 0x7, 0x6b, 0x2, 0x2, 0x727, 0x728, 
-       0x7, 0x70, 0x2, 0x2, 0x728, 0x729, 0x7, 0x76, 0x2, 0x2, 0x729, 0x72a, 
-       0x7, 0x38, 0x2, 0x2, 0x72a, 0x72b, 0x7, 0x36, 0x2, 0x2, 0x72b, 0x72c, 
-       0x7, 0x61, 0x2, 0x2, 0x72c, 0x72d, 0x7, 0x76, 0x2, 0x2, 0x72d, 0xf0, 
-       0x3, 0x2, 0x2, 0x2, 0x72e, 0x72f, 0x7, 0x6b, 0x2, 0x2, 0x72f, 0x730, 
-       0x7, 0x70, 0x2, 0x2, 0x730, 0x731, 0x7, 0x76, 0x2, 0x2, 0x731, 0x732, 
-       0x7, 0x33, 0x2, 0x2, 0x732, 0xf2, 0x3, 0x2, 0x2, 0x2, 0x733, 0x734, 
-       0x7, 0x6b, 0x2, 0x2, 0x734, 0x735, 0x7, 0x70, 0x2, 0x2, 0x735, 0x736, 
-       0x7, 0x76, 0x2, 0x2, 0x736, 0x737, 0x7, 0x34, 0x2, 0x2, 0x737, 0xf4, 
-       0x3, 0x2, 0x2, 0x2, 0x738, 0x739, 0x7, 0x6b, 0x2, 0x2, 0x739, 0x73a, 
-       0x7, 0x70, 0x2, 0x2, 0x73a, 0x73b, 0x7, 0x76, 0x2, 0x2, 0x73b, 0x73c, 
-       0x7, 0x35, 0x2, 0x2, 0x73c, 0xf6, 0x3, 0x2, 0x2, 0x2, 0x73d, 0x73e, 
-       0x7, 0x6b, 0x2, 0x2, 0x73e, 0x73f, 0x7, 0x70, 0x2, 0x2, 0x73f, 0x740, 
-       0x7, 0x76, 0x2, 0x2, 0x740, 0x741, 0x7, 0x36, 0x2, 0x2, 0x741, 0xf8, 
+       0x7, 0x35, 0x2, 0x2, 0x6e5, 0x6e6, 0x7, 0x7a, 0x2, 0x2, 0x6e6, 0x6e7, 
+       0x7, 0x35, 0x2, 0x2, 0x6e7, 0xd8, 0x3, 0x2, 0x2, 0x2, 0x6e8, 0x6e9, 
+       0x7, 0x6a, 0x2, 0x2, 0x6e9, 0x6ea, 0x7, 0x63, 0x2, 0x2, 0x6ea, 0x6eb, 
+       0x7, 0x6e, 0x2, 0x2, 0x6eb, 0x6ec, 0x7, 0x68, 0x2, 0x2, 0x6ec, 0x6ed, 
+       0x7, 0x35, 0x2, 0x2, 0x6ed, 0x6ee, 0x7, 0x7a, 0x2, 0x2, 0x6ee, 0x6ef, 
+       0x7, 0x36, 0x2, 0x2, 0x6ef, 0xda, 0x3, 0x2, 0x2, 0x2, 0x6f0, 0x6f1, 
+       0x7, 0x6a, 0x2, 0x2, 0x6f1, 0x6f2, 0x7, 0x63, 0x2, 0x2, 0x6f2, 0x6f3, 
+       0x7, 0x6e, 0x2, 0x2, 0x6f3, 0x6f4, 0x7, 0x68, 0x2, 0x2, 0x6f4, 0x6f5, 
+       0x7, 0x36, 0x2, 0x2, 0x6f5, 0x6f6, 0x7, 0x7a, 0x2, 0x2, 0x6f6, 0x6f7, 
+       0x7, 0x33, 0x2, 0x2, 0x6f7, 0xdc, 0x3, 0x2, 0x2, 0x2, 0x6f8, 0x6f9, 
+       0x7, 0x6a, 0x2, 0x2, 0x6f9, 0x6fa, 0x7, 0x63, 0x2, 0x2, 0x6fa, 0x6fb, 
+       0x7, 0x6e, 0x2, 0x2, 0x6fb, 0x6fc, 0x7, 0x68, 0x2, 0x2, 0x6fc, 0x6fd, 
+       0x7, 0x36, 0x2, 0x2, 0x6fd, 0x6fe, 0x7, 0x7a, 0x2, 0x2, 0x6fe, 0x6ff, 
+       0x7, 0x34, 0x2, 0x2, 0x6ff, 0xde, 0x3, 0x2, 0x2, 0x2, 0x700, 0x701, 
+       0x7, 0x6a, 0x2, 0x2, 0x701, 0x702, 0x7, 0x63, 0x2, 0x2, 0x702, 0x703, 
+       0x7, 0x6e, 0x2, 0x2, 0x703, 0x704, 0x7, 0x68, 0x2, 0x2, 0x704, 0x705, 
+       0x7, 0x36, 0x2, 0x2, 0x705, 0x706, 0x7, 0x7a, 0x2, 0x2, 0x706, 0x707, 
+       0x7, 0x35, 0x2, 0x2, 0x707, 0xe0, 0x3, 0x2, 0x2, 0x2, 0x708, 0x709, 
+       0x7, 0x6a, 0x2, 0x2, 0x709, 0x70a, 0x7, 0x63, 0x2, 0x2, 0x70a, 0x70b, 
+       0x7, 0x6e, 0x2, 0x2, 0x70b, 0x70c, 0x7, 0x68, 0x2, 0x2, 0x70c, 0x70d, 
+       0x7, 0x36, 0x2, 0x2, 0x70d, 0x70e, 0x7, 0x7a, 0x2, 0x2, 0x70e, 0x70f, 
+       0x7, 0x36, 0x2, 0x2, 0x70f, 0xe2, 0x3, 0x2, 0x2, 0x2, 0x710, 0x711, 
+       0x7, 0x6b, 0x2, 0x2, 0x711, 0x712, 0x7, 0x68, 0x2, 0x2, 0x712, 0xe4, 
+       0x3, 0x2, 0x2, 0x2, 0x713, 0x714, 0x7, 0x6b, 0x2, 0x2, 0x714, 0x715, 
+       0x7, 0x70, 0x2, 0x2, 0x715, 0xe6, 0x3, 0x2, 0x2, 0x2, 0x716, 0x717, 
+       0x7, 0x6b, 0x2, 0x2, 0x717, 0x718, 0x7, 0x70, 0x2, 0x2, 0x718, 0x719, 
+       0x7, 0x6e, 0x2, 0x2, 0x719, 0x71a, 0x7, 0x6b, 0x2, 0x2, 0x71a, 0x71b, 
+       0x7, 0x70, 0x2, 0x2, 0x71b, 0x71c, 0x7, 0x67, 0x2, 0x2, 0x71c, 0xe8, 
+       0x3, 0x2, 0x2, 0x2, 0x71d, 0x71e, 0x7, 0x74, 0x2, 0x2, 0x71e, 0x71f, 
+       0x7, 0x71, 0x2, 0x2, 0x71f, 0x720, 0x7, 0x71, 0x2, 0x2, 0x720, 0x721, 
+       0x7, 0x76, 0x2, 0x2, 0x721, 0x722, 0x7, 0x65, 0x2, 0x2, 0x722, 0x723, 
+       0x7, 0x71, 0x2, 0x2, 0x723, 0x724, 0x7, 0x70, 0x2, 0x2, 0x724, 0x725, 
+       0x7, 0x75, 0x2, 0x2, 0x725, 0x726, 0x7, 0x76, 0x2, 0x2, 0x726, 0x727, 
+       0x7, 0x63, 0x2, 0x2, 0x727, 0x728, 0x7, 0x70, 0x2, 0x2, 0x728, 0x729, 
+       0x7, 0x76, 0x2, 0x2, 0x729, 0xea, 0x3, 0x2, 0x2, 0x2, 0x72a, 0x72b, 
+       0x7, 0x6b, 0x2, 0x2, 0x72b, 0x72c, 0x7, 0x70, 0x2, 0x2, 0x72c, 0x72d, 
+       0x7, 0x71, 0x2, 0x2, 0x72d, 0x72e, 0x7, 0x77, 0x2, 0x2, 0x72e, 0x736, 
+       0x7, 0x76, 0x2, 0x2, 0x72f, 0x730, 0x7, 0x6b, 0x2, 0x2, 0x730, 0x731, 
+       0x7, 0x70, 0x2, 0x2, 0x731, 0x732, 0x7, 0x22, 0x2, 0x2, 0x732, 0x733, 
+       0x7, 0x71, 0x2, 0x2, 0x733, 0x734, 0x7, 0x77, 0x2, 0x2, 0x734, 0x736, 
+       0x7, 0x76, 0x2, 0x2, 0x735, 0x72a, 0x3, 0x2, 0x2, 0x2, 0x735, 0x72f, 
+       0x3, 0x2, 0x2, 0x2, 0x736, 0xec, 0x3, 0x2, 0x2, 0x2, 0x737, 0x738, 
+       0x7, 0x4b, 0x2, 0x2, 0x738, 0x739, 0x7, 0x70, 0x2, 0x2, 0x739, 0x73a, 
+       0x7, 0x72, 0x2, 0x2, 0x73a, 0x73b, 0x7, 0x77, 0x2, 0x2, 0x73b, 0x73c, 
+       0x7, 0x76, 0x2, 0x2, 0x73c, 0x73d, 0x7, 0x52, 0x2, 0x2, 0x73d, 0x73e, 
+       0x7, 0x63, 0x2, 0x2, 0x73e, 0x73f, 0x7, 0x76, 0x2, 0x2, 0x73f, 0x740, 
+       0x7, 0x65, 0x2, 0x2, 0x740, 0x741, 0x7, 0x6a, 0x2, 0x2, 0x741, 0xee, 
        0x3, 0x2, 0x2, 0x2, 0x742, 0x743, 0x7, 0x6b, 0x2, 0x2, 0x743, 0x744, 
        0x3, 0x2, 0x2, 0x2, 0x742, 0x743, 0x7, 0x6b, 0x2, 0x2, 0x743, 0x744, 
-       0x7, 0x70, 0x2, 0x2, 0x744, 0x745, 0x7, 0x76, 0x2, 0x2, 0x745, 0x746, 
-       0x7, 0x33, 0x2, 0x2, 0x746, 0x747, 0x7, 0x7a, 0x2, 0x2, 0x747, 0x748, 
-       0x7, 0x33, 0x2, 0x2, 0x748, 0xfa, 0x3, 0x2, 0x2, 0x2, 0x749, 0x74a, 
-       0x7, 0x6b, 0x2, 0x2, 0x74a, 0x74b, 0x7, 0x70, 0x2, 0x2, 0x74b, 0x74c, 
-       0x7, 0x76, 0x2, 0x2, 0x74c, 0x74d, 0x7, 0x33, 0x2, 0x2, 0x74d, 0x74e, 
-       0x7, 0x7a, 0x2, 0x2, 0x74e, 0x74f, 0x7, 0x34, 0x2, 0x2, 0x74f, 0xfc, 
-       0x3, 0x2, 0x2, 0x2, 0x750, 0x751, 0x7, 0x6b, 0x2, 0x2, 0x751, 0x752, 
-       0x7, 0x70, 0x2, 0x2, 0x752, 0x753, 0x7, 0x76, 0x2, 0x2, 0x753, 0x754, 
-       0x7, 0x33, 0x2, 0x2, 0x754, 0x755, 0x7, 0x7a, 0x2, 0x2, 0x755, 0x756, 
-       0x7, 0x35, 0x2, 0x2, 0x756, 0xfe, 0x3, 0x2, 0x2, 0x2, 0x757, 0x758, 
-       0x7, 0x6b, 0x2, 0x2, 0x758, 0x759, 0x7, 0x70, 0x2, 0x2, 0x759, 0x75a, 
-       0x7, 0x76, 0x2, 0x2, 0x75a, 0x75b, 0x7, 0x33, 0x2, 0x2, 0x75b, 0x75c, 
-       0x7, 0x7a, 0x2, 0x2, 0x75c, 0x75d, 0x7, 0x36, 0x2, 0x2, 0x75d, 0x100, 
+       0x7, 0x70, 0x2, 0x2, 0x744, 0x745, 0x7, 0x76, 0x2, 0x2, 0x745, 0xf0, 
+       0x3, 0x2, 0x2, 0x2, 0x746, 0x747, 0x7, 0x6b, 0x2, 0x2, 0x747, 0x748, 
+       0x7, 0x70, 0x2, 0x2, 0x748, 0x749, 0x7, 0x76, 0x2, 0x2, 0x749, 0x74a, 
+       0x7, 0x33, 0x2, 0x2, 0x74a, 0x74b, 0x7, 0x38, 0x2, 0x2, 0x74b, 0x74c, 
+       0x7, 0x61, 0x2, 0x2, 0x74c, 0x74d, 0x7, 0x76, 0x2, 0x2, 0x74d, 0xf2, 
+       0x3, 0x2, 0x2, 0x2, 0x74e, 0x74f, 0x7, 0x6b, 0x2, 0x2, 0x74f, 0x750, 
+       0x7, 0x70, 0x2, 0x2, 0x750, 0x751, 0x7, 0x76, 0x2, 0x2, 0x751, 0x752, 
+       0x7, 0x35, 0x2, 0x2, 0x752, 0x753, 0x7, 0x34, 0x2, 0x2, 0x753, 0x754, 
+       0x7, 0x61, 0x2, 0x2, 0x754, 0x755, 0x7, 0x76, 0x2, 0x2, 0x755, 0xf4, 
+       0x3, 0x2, 0x2, 0x2, 0x756, 0x757, 0x7, 0x6b, 0x2, 0x2, 0x757, 0x758, 
+       0x7, 0x70, 0x2, 0x2, 0x758, 0x759, 0x7, 0x76, 0x2, 0x2, 0x759, 0x75a, 
+       0x7, 0x38, 0x2, 0x2, 0x75a, 0x75b, 0x7, 0x36, 0x2, 0x2, 0x75b, 0x75c, 
+       0x7, 0x61, 0x2, 0x2, 0x75c, 0x75d, 0x7, 0x76, 0x2, 0x2, 0x75d, 0xf6, 
        0x3, 0x2, 0x2, 0x2, 0x75e, 0x75f, 0x7, 0x6b, 0x2, 0x2, 0x75f, 0x760, 
        0x3, 0x2, 0x2, 0x2, 0x75e, 0x75f, 0x7, 0x6b, 0x2, 0x2, 0x75f, 0x760, 
        0x7, 0x70, 0x2, 0x2, 0x760, 0x761, 0x7, 0x76, 0x2, 0x2, 0x761, 0x762, 
        0x7, 0x70, 0x2, 0x2, 0x760, 0x761, 0x7, 0x76, 0x2, 0x2, 0x761, 0x762, 
-       0x7, 0x34, 0x2, 0x2, 0x762, 0x763, 0x7, 0x7a, 0x2, 0x2, 0x763, 0x764, 
-       0x7, 0x33, 0x2, 0x2, 0x764, 0x102, 0x3, 0x2, 0x2, 0x2, 0x765, 0x766, 
-       0x7, 0x6b, 0x2, 0x2, 0x766, 0x767, 0x7, 0x70, 0x2, 0x2, 0x767, 0x768, 
-       0x7, 0x76, 0x2, 0x2, 0x768, 0x769, 0x7, 0x34, 0x2, 0x2, 0x769, 0x76a, 
-       0x7, 0x7a, 0x2, 0x2, 0x76a, 0x76b, 0x7, 0x34, 0x2, 0x2, 0x76b, 0x104, 
-       0x3, 0x2, 0x2, 0x2, 0x76c, 0x76d, 0x7, 0x6b, 0x2, 0x2, 0x76d, 0x76e, 
-       0x7, 0x70, 0x2, 0x2, 0x76e, 0x76f, 0x7, 0x76, 0x2, 0x2, 0x76f, 0x770, 
-       0x7, 0x34, 0x2, 0x2, 0x770, 0x771, 0x7, 0x7a, 0x2, 0x2, 0x771, 0x772, 
-       0x7, 0x35, 0x2, 0x2, 0x772, 0x106, 0x3, 0x2, 0x2, 0x2, 0x773, 0x774, 
-       0x7, 0x6b, 0x2, 0x2, 0x774, 0x775, 0x7, 0x70, 0x2, 0x2, 0x775, 0x776, 
-       0x7, 0x76, 0x2, 0x2, 0x776, 0x777, 0x7, 0x34, 0x2, 0x2, 0x777, 0x778, 
-       0x7, 0x7a, 0x2, 0x2, 0x778, 0x779, 0x7, 0x36, 0x2, 0x2, 0x779, 0x108, 
-       0x3, 0x2, 0x2, 0x2, 0x77a, 0x77b, 0x7, 0x6b, 0x2, 0x2, 0x77b, 0x77c, 
-       0x7, 0x70, 0x2, 0x2, 0x77c, 0x77d, 0x7, 0x76, 0x2, 0x2, 0x77d, 0x77e, 
-       0x7, 0x35, 0x2, 0x2, 0x77e, 0x77f, 0x7, 0x7a, 0x2, 0x2, 0x77f, 0x780, 
-       0x7, 0x33, 0x2, 0x2, 0x780, 0x10a, 0x3, 0x2, 0x2, 0x2, 0x781, 0x782, 
-       0x7, 0x6b, 0x2, 0x2, 0x782, 0x783, 0x7, 0x70, 0x2, 0x2, 0x783, 0x784, 
-       0x7, 0x76, 0x2, 0x2, 0x784, 0x785, 0x7, 0x35, 0x2, 0x2, 0x785, 0x786, 
-       0x7, 0x7a, 0x2, 0x2, 0x786, 0x787, 0x7, 0x34, 0x2, 0x2, 0x787, 0x10c, 
-       0x3, 0x2, 0x2, 0x2, 0x788, 0x789, 0x7, 0x6b, 0x2, 0x2, 0x789, 0x78a, 
-       0x7, 0x70, 0x2, 0x2, 0x78a, 0x78b, 0x7, 0x76, 0x2, 0x2, 0x78b, 0x78c, 
-       0x7, 0x35, 0x2, 0x2, 0x78c, 0x78d, 0x7, 0x7a, 0x2, 0x2, 0x78d, 0x78e, 
-       0x7, 0x35, 0x2, 0x2, 0x78e, 0x10e, 0x3, 0x2, 0x2, 0x2, 0x78f, 0x790, 
-       0x7, 0x6b, 0x2, 0x2, 0x790, 0x791, 0x7, 0x70, 0x2, 0x2, 0x791, 0x792, 
-       0x7, 0x76, 0x2, 0x2, 0x792, 0x793, 0x7, 0x35, 0x2, 0x2, 0x793, 0x794, 
-       0x7, 0x7a, 0x2, 0x2, 0x794, 0x795, 0x7, 0x36, 0x2, 0x2, 0x795, 0x110, 
-       0x3, 0x2, 0x2, 0x2, 0x796, 0x797, 0x7, 0x6b, 0x2, 0x2, 0x797, 0x798, 
-       0x7, 0x70, 0x2, 0x2, 0x798, 0x799, 0x7, 0x76, 0x2, 0x2, 0x799, 0x79a, 
-       0x7, 0x36, 0x2, 0x2, 0x79a, 0x79b, 0x7, 0x7a, 0x2, 0x2, 0x79b, 0x79c, 
-       0x7, 0x33, 0x2, 0x2, 0x79c, 0x112, 0x3, 0x2, 0x2, 0x2, 0x79d, 0x79e, 
-       0x7, 0x6b, 0x2, 0x2, 0x79e, 0x79f, 0x7, 0x70, 0x2, 0x2, 0x79f, 0x7a0, 
-       0x7, 0x76, 0x2, 0x2, 0x7a0, 0x7a1, 0x7, 0x36, 0x2, 0x2, 0x7a1, 0x7a2, 
-       0x7, 0x7a, 0x2, 0x2, 0x7a2, 0x7a3, 0x7, 
+       0x7, 0x33, 0x2, 0x2, 0x762, 0xf8, 0x3, 0x2, 0x2, 0x2, 0x763, 0x764, 
+       0x7, 0x6b, 0x2, 0x2, 0x764, 0x765, 0x7, 0x70, 0x2, 0x2, 0x765, 0x766, 
+       0x7, 0x76, 0x2, 0x2, 0x766, 0x767, 0x7, 0x34, 0x2, 0x2, 0x767, 0xfa, 
+       0x3, 0x2, 0x2, 0x2, 0x768, 0x769, 0x7, 0x6b, 0x2, 0x2, 0x769, 0x76a, 
+       0x7, 0x70, 0x2, 0x2, 0x76a, 0x76b, 0x7, 0x76, 0x2, 0x2, 0x76b, 0x76c, 
+       0x7, 0x35, 0x2, 0x2, 0x76c, 0xfc, 0x3, 0x2, 0x2, 0x2, 0x76d, 0x76e, 
+       0x7, 0x6b, 0x2, 0x2, 0x76e, 0x76f, 0x7, 0x70, 0x2, 0x2, 0x76f, 0x770, 
+       0x7, 0x76, 0x2, 0x2, 0x770, 0x771, 0x7, 0x36, 0x2, 0x2, 0x771, 0xfe, 
+       0x3, 0x2, 0x2, 0x2, 0x772, 0x773, 0x7, 0x6b, 0x2, 0x2, 0x773, 0x774, 
+       0x7, 0x70, 0x2, 0x2, 0x774, 0x775, 0x7, 0x76, 0x2, 0x2, 0x775, 0x776, 
+       0x7, 0x33, 0x2, 0x2, 0x776, 0x777, 0x7, 0x7a, 0x2, 0x2, 0x777, 0x778, 
+       0x7, 0x33, 0x2, 0x2, 0x778, 0x100, 0x3, 0x2, 0x2, 0x2, 0x779, 0x77a, 
+       0x7, 0x6b, 0x2, 0x2, 0x77a, 0x77b, 0x7, 0x70, 0x2, 0x2, 0x77b, 0x77c, 
+       0x7, 0x76, 0x2, 0x2, 0x77c, 0x77d, 0x7, 0x33, 0x2, 0x2, 0x77d, 0x77e, 
+       0x7, 0x7a, 0x2, 0x2, 0x77e, 0x77f, 0x7, 0x34, 0x2, 0x2, 0x77f, 0x102, 
+       0x3, 0x2, 0x2, 0x2, 0x780, 0x781, 0x7, 0x6b, 0x2, 0x2, 0x781, 0x782, 
+       0x7, 0x70, 0x2, 0x2, 0x782, 0x783, 0x7, 0x76, 0x2, 
   };
   };
   static const uint16_t serializedATNSegment1[] = {
   static const uint16_t serializedATNSegment1[] = {
-    0x34, 0x2, 0x2, 0x7a3, 0x114, 0x3, 0x2, 0x2, 0x2, 0x7a4, 0x7a5, 0x7, 
-       0x6b, 0x2, 0x2, 0x7a5, 0x7a6, 0x7, 0x70, 0x2, 0x2, 0x7a6, 0x7a7, 
-       0x7, 0x76, 0x2, 0x2, 0x7a7, 0x7a8, 0x7, 0x36, 0x2, 0x2, 0x7a8, 0x7a9, 
-       0x7, 0x7a, 0x2, 0x2, 0x7a9, 0x7aa, 0x7, 0x35, 0x2, 0x2, 0x7aa, 0x116, 
-       0x3, 0x2, 0x2, 0x2, 0x7ab, 0x7ac, 0x7, 0x6b, 0x2, 0x2, 0x7ac, 0x7ad, 
-       0x7, 0x70, 0x2, 0x2, 0x7ad, 0x7ae, 0x7, 0x76, 0x2, 0x2, 0x7ae, 0x7af, 
-       0x7, 0x36, 0x2, 0x2, 0x7af, 0x7b0, 0x7, 0x7a, 0x2, 0x2, 0x7b0, 0x7b1, 
-       0x7, 0x36, 0x2, 0x2, 0x7b1, 0x118, 0x3, 0x2, 0x2, 0x2, 0x7b2, 0x7b3, 
-       0x7, 0x6b, 0x2, 0x2, 0x7b3, 0x7b4, 0x7, 0x70, 0x2, 0x2, 0x7b4, 0x7b5, 
-       0x7, 0x76, 0x2, 0x2, 0x7b5, 0x7b6, 0x7, 0x67, 0x2, 0x2, 0x7b6, 0x7b7, 
-       0x7, 0x74, 0x2, 0x2, 0x7b7, 0x7b8, 0x7, 0x68, 0x2, 0x2, 0x7b8, 0x7b9, 
-       0x7, 0x63, 0x2, 0x2, 0x7b9, 0x7ba, 0x7, 0x65, 0x2, 0x2, 0x7ba, 0x7bb, 
-       0x7, 0x67, 0x2, 0x2, 0x7bb, 0x11a, 0x3, 0x2, 0x2, 0x2, 0x7bc, 0x7bd, 
-       0x7, 0x6e, 0x2, 0x2, 0x7bd, 0x7be, 0x7, 0x6b, 0x2, 0x2, 0x7be, 0x7bf, 
-       0x7, 0x70, 0x2, 0x2, 0x7bf, 0x7c0, 0x7, 0x67, 0x2, 0x2, 0x7c0, 0x11c, 
-       0x3, 0x2, 0x2, 0x2, 0x7c1, 0x7c2, 0x7, 0x6e, 0x2, 0x2, 0x7c2, 0x7c3, 
-       0x7, 0x6b, 0x2, 0x2, 0x7c3, 0x7c4, 0x7, 0x70, 0x2, 0x2, 0x7c4, 0x7c5, 
-       0x7, 0x67, 0x2, 0x2, 0x7c5, 0x7c6, 0x7, 0x63, 0x2, 0x2, 0x7c6, 0x7c7, 
-       0x7, 0x66, 0x2, 0x2, 0x7c7, 0x7c8, 0x7, 0x6c, 0x2, 0x2, 0x7c8, 0x11e, 
-       0x3, 0x2, 0x2, 0x2, 0x7c9, 0x7ca, 0x7, 0x6e, 0x2, 0x2, 0x7ca, 0x7cb, 
-       0x7, 0x6b, 0x2, 0x2, 0x7cb, 0x7cc, 0x7, 0x70, 0x2, 0x2, 0x7cc, 0x7cd, 
-       0x7, 0x67, 0x2, 0x2, 0x7cd, 0x7ce, 0x7, 0x63, 0x2, 0x2, 0x7ce, 0x7cf, 
-       0x7, 0x74, 0x2, 0x2, 0x7cf, 0x120, 0x3, 0x2, 0x2, 0x2, 0x7d0, 0x7d1, 
-       0x7, 0x4e, 0x2, 0x2, 0x7d1, 0x7d2, 0x7, 0x6b, 0x2, 0x2, 0x7d2, 0x7d3, 
-       0x7, 0x70, 0x2, 0x2, 0x7d3, 0x7d4, 0x7, 0x67, 0x2, 0x2, 0x7d4, 0x7d5, 
-       0x7, 0x55, 0x2, 0x2, 0x7d5, 0x7d6, 0x7, 0x76, 0x2, 0x2, 0x7d6, 0x7d7, 
-       0x7, 0x74, 0x2, 0x2, 0x7d7, 0x7d8, 0x7, 0x67, 0x2, 0x2, 0x7d8, 0x7d9, 
-       0x7, 0x63, 0x2, 0x2, 0x7d9, 0x7da, 0x7, 0x6f, 0x2, 0x2, 0x7da, 0x122, 
-       0x3, 0x2, 0x2, 0x2, 0x7db, 0x7dc, 0x7, 0x6e, 0x2, 0x2, 0x7dc, 0x7dd, 
-       0x7, 0x71, 0x2, 0x2, 0x7dd, 0x7de, 0x7, 0x70, 0x2, 0x2, 0x7de, 0x7df, 
-       0x7, 0x69, 0x2, 0x2, 0x7df, 0x124, 0x3, 0x2, 0x2, 0x2, 0x7e0, 0x7e1, 
-       0x7, 0x6f, 0x2, 0x2, 0x7e1, 0x7e2, 0x7, 0x63, 0x2, 0x2, 0x7e2, 0x7e3, 
-       0x7, 0x76, 0x2, 0x2, 0x7e3, 0x7e4, 0x7, 0x74, 0x2, 0x2, 0x7e4, 0x7e5, 
-       0x7, 0x6b, 0x2, 0x2, 0x7e5, 0x7e6, 0x7, 0x7a, 0x2, 0x2, 0x7e6, 0x126, 
-       0x3, 0x2, 0x2, 0x2, 0x7e7, 0x7e8, 0x7, 0x70, 0x2, 0x2, 0x7e8, 0x7e9, 
-       0x7, 0x71, 0x2, 0x2, 0x7e9, 0x7ea, 0x7, 0x6b, 0x2, 0x2, 0x7ea, 0x7eb, 
-       0x7, 0x70, 0x2, 0x2, 0x7eb, 0x7ec, 0x7, 0x76, 0x2, 0x2, 0x7ec, 0x7ed, 
-       0x7, 0x67, 0x2, 0x2, 0x7ed, 0x7ee, 0x7, 0x74, 0x2, 0x2, 0x7ee, 0x7ef, 
-       0x7, 0x72, 0x2, 0x2, 0x7ef, 0x7f0, 0x7, 0x71, 0x2, 0x2, 0x7f0, 0x7f1, 
-       0x7, 0x6e, 0x2, 0x2, 0x7f1, 0x7f2, 0x7, 0x63, 0x2, 0x2, 0x7f2, 0x7f3, 
-       0x7, 0x76, 0x2, 0x2, 0x7f3, 0x7f4, 0x7, 0x6b, 0x2, 0x2, 0x7f4, 0x7f5, 
-       0x7, 0x71, 0x2, 0x2, 0x7f5, 0x7f6, 0x7, 0x70, 0x2, 0x2, 0x7f6, 0x128, 
-       0x3, 0x2, 0x2, 0x2, 0x7f7, 0x7f8, 0x7, 0x70, 0x2, 0x2, 0x7f8, 0x7f9, 
-       0x7, 0x71, 0x2, 0x2, 0x7f9, 0x7fa, 0x7, 0x72, 0x2, 0x2, 0x7fa, 0x7fb, 
-       0x7, 0x67, 0x2, 0x2, 0x7fb, 0x7fc, 0x7, 0x74, 0x2, 0x2, 0x7fc, 0x7fd, 
-       0x7, 0x75, 0x2, 0x2, 0x7fd, 0x7fe, 0x7, 0x72, 0x2, 0x2, 0x7fe, 0x7ff, 
-       0x7, 0x67, 0x2, 0x2, 0x7ff, 0x800, 0x7, 0x65, 0x2, 0x2, 0x800, 0x801, 
-       0x7, 0x76, 0x2, 0x2, 0x801, 0x802, 0x7, 0x6b, 0x2, 0x2, 0x802, 0x803, 
-       0x7, 0x78, 0x2, 0x2, 0x803, 0x804, 0x7, 0x67, 0x2, 0x2, 0x804, 0x12a, 
-       0x3, 0x2, 0x2, 0x2, 0x805, 0x806, 0x7, 0x71, 0x2, 0x2, 0x806, 0x807, 
-       0x7, 0x72, 0x2, 0x2, 0x807, 0x808, 0x7, 0x76, 0x2, 0x2, 0x808, 0x809, 
-       0x7, 0x6b, 0x2, 0x2, 0x809, 0x80a, 0x7, 0x71, 0x2, 0x2, 0x80a, 0x80b, 
-       0x7, 0x70, 0x2, 0x2, 0x80b, 0x12c, 0x3, 0x2, 0x2, 0x2, 0x80c, 0x80d, 
-       0x7, 0x71, 0x2, 0x2, 0x80d, 0x80e, 0x7, 0x77, 0x2, 0x2, 0x80e, 0x80f, 
-       0x7, 0x76, 0x2, 0x2, 0x80f, 0x12e, 0x3, 0x2, 0x2, 0x2, 0x810, 0x811, 
-       0x7, 0x51, 0x2, 0x2, 0x811, 0x812, 0x7, 0x77, 0x2, 0x2, 0x812, 0x813, 
-       0x7, 0x76, 0x2, 0x2, 0x813, 0x814, 0x7, 0x72, 0x2, 0x2, 0x814, 0x815, 
-       0x7, 0x77, 0x2, 0x2, 0x815, 0x816, 0x7, 0x76, 0x2, 0x2, 0x816, 0x817, 
-       0x7, 0x52, 0x2, 0x2, 0x817, 0x818, 0x7, 0x63, 0x2, 0x2, 0x818, 0x819, 
-       0x7, 0x76, 0x2, 0x2, 0x819, 0x81a, 0x7, 0x65, 0x2, 0x2, 0x81a, 0x81b, 
-       0x7, 0x6a, 0x2, 0x2, 0x81b, 0x130, 0x3, 0x2, 0x2, 0x2, 0x81c, 0x81d, 
-       0x7, 0x71, 0x2, 0x2, 0x81d, 0x81e, 0x7, 0x78, 0x2, 0x2, 0x81e, 0x81f, 
-       0x7, 0x67, 0x2, 0x2, 0x81f, 0x820, 0x7, 0x74, 0x2, 0x2, 0x820, 0x821, 
-       0x7, 0x74, 0x2, 0x2, 0x821, 0x822, 0x7, 0x6b, 0x2, 0x2, 0x822, 0x823, 
-       0x7, 0x66, 0x2, 0x2, 0x823, 0x824, 0x7, 0x67, 0x2, 0x2, 0x824, 0x132, 
-       0x3, 0x2, 0x2, 0x2, 0x825, 0x826, 0x7, 0x72, 0x2, 0x2, 0x826, 0x827, 
-       0x7, 0x63, 0x2, 0x2, 0x827, 0x828, 0x7, 0x74, 0x2, 0x2, 0x828, 0x829, 
-       0x7, 0x76, 0x2, 0x2, 0x829, 0x82a, 0x7, 0x6b, 0x2, 0x2, 0x82a, 0x82b, 
-       0x7, 0x63, 0x2, 0x2, 0x82b, 0x82c, 0x7, 0x6e, 0x2, 0x2, 0x82c, 0x134, 
-       0x3, 0x2, 0x2, 0x2, 0x82d, 0x82e, 0x7, 0x72, 0x2, 0x2, 0x82e, 0x82f, 
-       0x7, 0x63, 0x2, 0x2, 0x82f, 0x830, 0x7, 0x65, 0x2, 0x2, 0x830, 0x831, 
-       0x7, 0x6d, 0x2, 0x2, 0x831, 0x832, 0x7, 0x71, 0x2, 0x2, 0x832, 0x833, 
-       0x7, 0x68, 0x2, 0x2, 0x833, 0x834, 0x7, 0x68, 0x2, 0x2, 0x834, 0x835, 
-       0x7, 0x75, 0x2, 0x2, 0x835, 0x836, 0x7, 0x67, 0x2, 0x2, 0x836, 0x837, 
-       0x7, 0x76, 0x2, 0x2, 0x837, 0x136, 0x3, 0x2, 0x2, 0x2, 0x838, 0x839, 
-       0x7, 0x72, 0x2, 0x2, 0x839, 0x83a, 0x7, 0x71, 0x2, 0x2, 0x83a, 0x83b, 
-       0x7, 0x6b, 0x2, 0x2, 0x83b, 0x83c, 0x7, 0x70, 0x2, 0x2, 0x83c, 0x83d, 
-       0x7, 0x76, 0x2, 0x2, 0x83d, 0x138, 0x3, 0x2, 0x2, 0x2, 0x83e, 0x83f, 
-       0x7, 0x52, 0x2, 0x2, 0x83f, 0x840, 0x7, 0x71, 0x2, 0x2, 0x840, 0x841, 
-       0x7, 0x6b, 0x2, 0x2, 0x841, 0x842, 0x7, 0x70, 0x2, 0x2, 0x842, 0x843, 
-       0x7, 0x76, 0x2, 0x2, 0x843, 0x844, 0x7, 0x55, 0x2, 0x2, 0x844, 0x845, 
-       0x7, 0x76, 0x2, 0x2, 0x845, 0x846, 0x7, 0x74, 0x2, 0x2, 0x846, 0x847, 
-       0x7, 0x67, 0x2, 0x2, 0x847, 0x848, 0x7, 0x63, 0x2, 0x2, 0x848, 0x849, 
-       0x7, 0x6f, 0x2, 0x2, 0x849, 0x13a, 0x3, 0x2, 0x2, 0x2, 0x84a, 0x84b, 
-       0x7, 0x72, 0x2, 0x2, 0x84b, 0x84c, 0x7, 0x74, 0x2, 0x2, 0x84c, 0x84d, 
-       0x7, 0x67, 0x2, 0x2, 0x84d, 0x84e, 0x7, 0x65, 0x2, 0x2, 0x84e, 0x84f, 
-       0x7, 0x6b, 0x2, 0x2, 0x84f, 0x850, 0x7, 0x75, 0x2, 0x2, 0x850, 0x851, 
-       0x7, 0x67, 0x2, 0x2, 0x851, 0x13c, 0x3, 0x2, 0x2, 0x2, 0x852, 0x853, 
-       0x7, 0x54, 0x2, 0x2, 0x853, 0x854, 0x7, 0x63, 0x2, 0x2, 0x854, 0x855, 
-       0x7, 0x75, 0x2, 0x2, 0x855, 0x856, 0x7, 0x76, 0x2, 0x2, 0x856, 0x857, 
-       0x7, 0x67, 0x2, 0x2, 0x857, 0x858, 0x7, 0x74, 0x2, 0x2, 0x858, 0x859, 
-       0x7, 0x6b, 0x2, 0x2, 0x859, 0x85a, 0x7, 0x7c, 0x2, 0x2, 0x85a, 0x85b, 
-       0x7, 0x67, 0x2, 0x2, 0x85b, 0x85c, 0x7, 0x74, 0x2, 0x2, 0x85c, 0x85d, 
-       0x7, 0x51, 0x2, 0x2, 0x85d, 0x85e, 0x7, 0x74, 0x2, 0x2, 0x85e, 0x85f, 
-       0x7, 0x66, 0x2, 0x2, 0x85f, 0x860, 0x7, 0x67, 0x2, 0x2, 0x860, 0x861, 
-       0x7, 0x74, 0x2, 0x2, 0x861, 0x862, 0x7, 0x67, 0x2, 0x2, 0x862, 0x863, 
-       0x7, 0x66, 0x2, 0x2, 0x863, 0x864, 0x7, 0x44, 0x2, 0x2, 0x864, 0x865, 
-       0x7, 0x77, 0x2, 0x2, 0x865, 0x866, 0x7, 0x68, 0x2, 0x2, 0x866, 0x867, 
-       0x7, 0x68, 0x2, 0x2, 0x867, 0x868, 0x7, 0x67, 0x2, 0x2, 0x868, 0x869, 
-       0x7, 0x74, 0x2, 0x2, 0x869, 0x13e, 0x3, 0x2, 0x2, 0x2, 0x86a, 0x86b, 
-       0x7, 0x54, 0x2, 0x2, 0x86b, 0x86c, 0x7, 0x63, 0x2, 0x2, 0x86c, 0x86d, 
-       0x7, 0x75, 0x2, 0x2, 0x86d, 0x86e, 0x7, 0x76, 0x2, 0x2, 0x86e, 0x86f, 
-       0x7, 0x67, 0x2, 0x2, 0x86f, 0x870, 0x7, 0x74, 0x2, 0x2, 0x870, 0x871, 
-       0x7, 0x6b, 0x2, 0x2, 0x871, 0x872, 0x7, 0x7c, 0x2, 0x2, 0x872, 0x873, 
-       0x7, 0x67, 0x2, 0x2, 0x873, 0x874, 0x7, 0x74, 0x2, 0x2, 0x874, 0x875, 
-       0x7, 0x51, 0x2, 0x2, 0x875, 0x876, 0x7, 0x74, 0x2, 0x2, 0x876, 0x877, 
-       0x7, 0x66, 0x2, 0x2, 0x877, 0x878, 0x7, 0x67, 0x2, 0x2, 0x878, 0x879, 
-       0x7, 0x74, 0x2, 0x2, 0x879, 0x87a, 0x7, 0x67, 0x2, 0x2, 0x87a, 0x87b, 
-       0x7, 0x66, 0x2, 0x2, 0x87b, 0x87c, 0x7, 0x44, 0x2, 0x2, 0x87c, 0x87d, 
-       0x7, 0x7b, 0x2, 0x2, 0x87d, 0x87e, 0x7, 0x76, 0x2, 0x2, 0x87e, 0x87f, 
-       0x7, 0x67, 0x2, 0x2, 0x87f, 0x880, 0x7, 0x43, 0x2, 0x2, 0x880, 0x881, 
-       0x7, 0x66, 0x2, 0x2, 0x881, 0x882, 0x7, 0x66, 0x2, 0x2, 0x882, 0x883, 
-       0x7, 0x74, 0x2, 0x2, 0x883, 0x884, 0x7, 0x67, 0x2, 0x2, 0x884, 0x885, 
-       0x7, 0x75, 0x2, 0x2, 0x885, 0x886, 0x7, 0x75, 0x2, 0x2, 0x886, 0x887, 
-       0x7, 0x44, 0x2, 0x2, 0x887, 0x888, 0x7, 0x77, 0x2, 0x2, 0x888, 0x889, 
-       0x7, 0x68, 0x2, 0x2, 0x889, 0x88a, 0x7, 0x68, 0x2, 0x2, 0x88a, 0x88b, 
-       0x7, 0x67, 0x2, 0x2, 0x88b, 0x88c, 0x7, 0x74, 0x2, 0x2, 0x88c, 0x140, 
-       0x3, 0x2, 0x2, 0x2, 0x88d, 0x88e, 0x7, 0x54, 0x2, 0x2, 0x88e, 0x88f, 
-       0x7, 0x63, 0x2, 0x2, 0x88f, 0x890, 0x7, 0x75, 0x2, 0x2, 0x890, 0x891, 
-       0x7, 0x76, 0x2, 0x2, 0x891, 0x892, 0x7, 0x67, 0x2, 0x2, 0x892, 0x893, 
-       0x7, 0x74, 0x2, 0x2, 0x893, 0x894, 0x7, 0x6b, 0x2, 0x2, 0x894, 0x895, 
-       0x7, 0x7c, 0x2, 0x2, 0x895, 0x896, 0x7, 0x67, 0x2, 0x2, 0x896, 0x897, 
-       0x7, 0x74, 0x2, 0x2, 0x897, 0x898, 0x7, 0x51, 0x2, 0x2, 0x898, 0x899, 
-       0x7, 0x74, 0x2, 0x2, 0x899, 0x89a, 0x7, 0x66, 0x2, 0x2, 0x89a, 0x89b, 
-       0x7, 0x67, 0x2, 0x2, 0x89b, 0x89c, 0x7, 0x74, 0x2, 0x2, 0x89c, 0x89d, 
-       0x7, 0x67, 0x2, 0x2, 0x89d, 0x89e, 0x7, 0x66, 0x2, 0x2, 0x89e, 0x89f, 
-       0x7, 0x55, 0x2, 0x2, 0x89f, 0x8a0, 0x7, 0x76, 0x2, 0x2, 0x8a0, 0x8a1, 
-       0x7, 0x74, 0x2, 0x2, 0x8a1, 0x8a2, 0x7, 0x77, 0x2, 0x2, 0x8a2, 0x8a3, 
-       0x7, 0x65, 0x2, 0x2, 0x8a3, 0x8a4, 0x7, 0x76, 0x2, 0x2, 0x8a4, 0x8a5, 
-       0x7, 0x77, 0x2, 0x2, 0x8a5, 0x8a6, 0x7, 0x74, 0x2, 0x2, 0x8a6, 0x8a7, 
-       0x7, 0x67, 0x2, 0x2, 0x8a7, 0x8a8, 0x7, 0x66, 0x2, 0x2, 0x8a8, 0x8a9, 
-       0x7, 0x44, 0x2, 0x2, 0x8a9, 0x8aa, 0x7, 0x77, 0x2, 0x2, 0x8aa, 0x8ab, 
-       0x7, 0x68, 0x2, 0x2, 0x8ab, 0x8ac, 0x7, 0x68, 0x2, 0x2, 0x8ac, 0x8ad, 
-       0x7, 0x67, 0x2, 0x2, 0x8ad, 0x8ae, 0x7, 0x74, 0x2, 0x2, 0x8ae, 0x142, 
-       0x3, 0x2, 0x2, 0x2, 0x8af, 0x8b0, 0x7, 0x54, 0x2, 0x2, 0x8b0, 0x8b1, 
-       0x7, 0x63, 0x2, 0x2, 0x8b1, 0x8b2, 0x7, 0x75, 0x2, 0x2, 0x8b2, 0x8b3, 
-       0x7, 0x76, 0x2, 0x2, 0x8b3, 0x8b4, 0x7, 0x67, 0x2, 0x2, 0x8b4, 0x8b5, 
-       0x7, 0x74, 0x2, 0x2, 0x8b5, 0x8b6, 0x7, 0x6b, 0x2, 0x2, 0x8b6, 0x8b7, 
-       0x7, 0x7c, 0x2, 0x2, 0x8b7, 0x8b8, 0x7, 0x67, 0x2, 0x2, 0x8b8, 0x8b9, 
-       0x7, 0x74, 0x2, 0x2, 0x8b9, 0x8ba, 0x7, 0x51, 0x2, 0x2, 0x8ba, 0x8bb, 
-       0x7, 0x74, 0x2, 0x2, 0x8bb, 0x8bc, 0x7, 0x66, 0x2, 0x2, 0x8bc, 0x8bd, 
-       0x7, 0x67, 0x2, 0x2, 0x8bd, 0x8be, 0x7, 0x74, 0x2, 0x2, 0x8be, 0x8bf, 
-       0x7, 0x67, 0x2, 0x2, 0x8bf, 0x8c0, 0x7, 0x66, 0x2, 0x2, 0x8c0, 0x8c1, 
-       0x7, 0x56, 0x2, 0x2, 0x8c1, 0x8c2, 0x7, 0x67, 0x2, 0x2, 0x8c2, 0x8c3, 
-       0x7, 0x7a, 0x2, 0x2, 0x8c3, 0x8c4, 0x7, 0x76, 0x2, 0x2, 0x8c4, 0x8c5, 
-       0x7, 0x77, 0x2, 0x2, 0x8c5, 0x8c6, 0x7, 0x74, 0x2, 0x2, 0x8c6, 0x8c7, 
-       0x7, 0x67, 0x2, 0x2, 0x8c7, 0x8c8, 0x7, 0x33, 0x2, 0x2, 0x8c8, 0x8c9, 
-       0x7, 0x46, 0x2, 0x2, 0x8c9, 0x144, 0x3, 0x2, 0x2, 0x2, 0x8ca, 0x8cb, 
-       0x7, 0x54, 0x2, 0x2, 0x8cb, 0x8cc, 0x7, 0x63, 0x2, 0x2, 0x8cc, 0x8cd, 
-       0x7, 0x75, 0x2, 0x2, 0x8cd, 0x8ce, 0x7, 0x76, 0x2, 0x2, 0x8ce, 0x8cf, 
-       0x7, 0x67, 0x2, 0x2, 0x8cf, 0x8d0, 0x7, 0x74, 0x2, 0x2, 0x8d0, 0x8d1, 
-       0x7, 0x6b, 0x2, 0x2, 0x8d1, 0x8d2, 0x7, 0x7c, 0x2, 0x2, 0x8d2, 0x8d3, 
-       0x7, 0x67, 0x2, 0x2, 0x8d3, 0x8d4, 0x7, 0x74, 0x2, 0x2, 0x8d4, 0x8d5, 
-       0x7, 0x51, 0x2, 0x2, 0x8d5, 0x8d6, 0x7, 0x74, 0x2, 0x2, 0x8d6, 0x8d7, 
-       0x7, 0x66, 0x2, 0x2, 0x8d7, 0x8d8, 0x7, 0x67, 0x2, 0x2, 0x8d8, 0x8d9, 
-       0x7, 0x74, 0x2, 0x2, 0x8d9, 0x8da, 0x7, 0x67, 0x2, 0x2, 0x8da, 0x8db, 
-       0x7, 0x66, 0x2, 0x2, 0x8db, 0x8dc, 0x7, 0x56, 0x2, 0x2, 0x8dc, 0x8dd, 
-       0x7, 0x67, 0x2, 0x2, 0x8dd, 0x8de, 0x7, 0x7a, 0x2, 0x2, 0x8de, 0x8df, 
-       0x7, 0x76, 0x2, 0x2, 0x8df, 0x8e0, 0x7, 0x77, 0x2, 0x2, 0x8e0, 0x8e1, 
-       0x7, 0x74, 0x2, 0x2, 0x8e1, 0x8e2, 0x7, 0x67, 0x2, 0x2, 0x8e2, 0x8e3, 
-       0x7, 0x33, 0x2, 0x2, 0x8e3, 0x8e4, 0x7, 0x46, 0x2, 0x2, 0x8e4, 0x8e5, 
-       0x7, 0x43, 0x2, 0x2, 0x8e5, 0x8e6, 0x7, 0x74, 0x2, 0x2, 0x8e6, 0x8e7, 
-       0x7, 0x74, 0x2, 0x2, 0x8e7, 0x8e8, 0x7, 0x63, 0x2, 0x2, 0x8e8, 0x8e9, 
-       0x7, 0x7b, 0x2, 0x2, 0x8e9, 0x146, 0x3, 0x2, 0x2, 0x2, 0x8ea, 0x8eb, 
-       0x7, 0x54, 0x2, 0x2, 0x8eb, 0x8ec, 0x7, 0x63, 0x2, 0x2, 0x8ec, 0x8ed, 
-       0x7, 0x75, 0x2, 0x2, 0x8ed, 0x8ee, 0x7, 0x76, 0x2, 0x2, 0x8ee, 0x8ef, 
-       0x7, 0x67, 0x2, 0x2, 0x8ef, 0x8f0, 0x7, 0x74, 0x2, 0x2, 0x8f0, 0x8f1, 
-       0x7, 0x6b, 0x2, 0x2, 0x8f1, 0x8f2, 0x7, 0x7c, 0x2, 0x2, 0x8f2, 0x8f3, 
-       0x7, 0x67, 0x2, 0x2, 0x8f3, 0x8f4, 0x7, 0x74, 0x2, 0x2, 0x8f4, 0x8f5, 
-       0x7, 0x51, 0x2, 0x2, 0x8f5, 0x8f6, 0x7, 0x74, 0x2, 0x2, 0x8f6, 0x8f7, 
-       0x7, 0x66, 0x2, 0x2, 0x8f7, 0x8f8, 0x7, 0x67, 0x2, 0x2, 0x8f8, 0x8f9, 
-       0x7, 0x74, 0x2, 0x2, 0x8f9, 0x8fa, 0x7, 0x67, 0x2, 0x2, 0x8fa, 0x8fb, 
-       0x7, 0x66, 0x2, 0x2, 0x8fb, 0x8fc, 0x7, 0x56, 0x2, 0x2, 0x8fc, 0x8fd, 
-       0x7, 0x67, 0x2, 0x2, 0x8fd, 0x8fe, 0x7, 0x7a, 0x2, 0x2, 0x8fe, 0x8ff, 
-       0x7, 0x76, 0x2, 0x2, 0x8ff, 0x900, 0x7, 0x77, 0x2, 0x2, 0x900, 0x901, 
-       0x7, 0x74, 0x2, 0x2, 0x901, 0x902, 0x7, 0x67, 0x2, 0x2, 0x902, 0x903, 
-       0x7, 0x34, 0x2, 0x2, 0x903, 0x904, 0x7, 0x46, 0x2, 0x2, 0x904, 0x148, 
-       0x3, 0x2, 0x2, 0x2, 0x905, 0x906, 0x7, 0x54, 0x2, 0x2, 0x906, 0x907, 
-       0x7, 0x63, 0x2, 0x2, 0x907, 0x908, 0x7, 0x75, 0x2, 0x2, 0x908, 0x909, 
-       0x7, 0x76, 0x2, 0x2, 0x909, 0x90a, 0x7, 0x67, 0x2, 0x2, 0x90a, 0x90b, 
-       0x7, 0x74, 0x2, 0x2, 0x90b, 0x90c, 0x7, 0x6b, 0x2, 0x2, 0x90c, 0x90d, 
-       0x7, 0x7c, 0x2, 0x2, 0x90d, 0x90e, 0x7, 0x67, 0x2, 0x2, 0x90e, 0x90f, 
-       0x7, 0x74, 0x2, 0x2, 0x90f, 0x910, 0x7, 0x51, 0x2, 0x2, 0x910, 0x911, 
-       0x7, 0x74, 0x2, 0x2, 0x911, 0x912, 0x7, 0x66, 0x2, 0x2, 0x912, 0x913, 
-       0x7, 0x67, 0x2, 0x2, 0x913, 0x914, 0x7, 0x74, 0x2, 0x2, 0x914, 0x915, 
-       0x7, 0x67, 0x2, 0x2, 0x915, 0x916, 0x7, 0x66, 0x2, 0x2, 0x916, 0x917, 
-       0x7, 0x56, 0x2, 0x2, 0x917, 0x918, 0x7, 0x67, 0x2, 0x2, 0x918, 0x919, 
-       0x7, 0x7a, 0x2, 0x2, 0x919, 0x91a, 0x7, 0x76, 0x2, 0x2, 0x91a, 0x91b, 
-       0x7, 0x77, 0x2, 0x2, 0x91b, 0x91c, 0x7, 0x74, 0x2, 0x2, 0x91c, 0x91d, 
-       0x7, 0x67, 0x2, 0x2, 0x91d, 0x91e, 0x7, 0x34, 0x2, 0x2, 0x91e, 0x91f, 
-       0x7, 0x46, 0x2, 0x2, 0x91f, 0x920, 0x7, 0x43, 0x2, 0x2, 0x920, 0x921, 
-       0x7, 0x74, 0x2, 0x2, 0x921, 0x922, 0x7, 0x74, 0x2, 0x2, 0x922, 0x923, 
-       0x7, 0x63, 0x2, 0x2, 0x923, 0x924, 0x7, 0x7b, 0x2, 0x2, 0x924, 0x14a, 
-       0x3, 0x2, 0x2, 0x2, 0x925, 0x926, 0x7, 0x54, 0x2, 0x2, 0x926, 0x927, 
-       0x7, 0x63, 0x2, 0x2, 0x927, 0x928, 0x7, 0x75, 0x2, 0x2, 0x928, 0x929, 
-       0x7, 0x76, 0x2, 0x2, 0x929, 0x92a, 0x7, 0x67, 0x2, 0x2, 0x92a, 0x92b, 
-       0x7, 0x74, 0x2, 0x2, 0x92b, 0x92c, 0x7, 0x6b, 0x2, 0x2, 0x92c, 0x92d, 
-       0x7, 0x7c, 0x2, 0x2, 0x92d, 0x92e, 0x7, 0x67, 0x2, 0x2, 0x92e, 0x92f, 
-       0x7, 0x74, 0x2, 0x2, 0x92f, 0x930, 0x7, 0x51, 0x2, 0x2, 0x930, 0x931, 
-       0x7, 0x74, 0x2, 0x2, 0x931, 0x932, 0x7, 0x66, 0x2, 0x2, 0x932, 0x933, 
-       0x7, 0x67, 0x2, 0x2, 0x933, 0x934, 0x7, 0x74, 0x2, 0x2, 0x934, 0x935, 
-       0x7, 0x67, 0x2, 0x2, 0x935, 0x936, 0x7, 0x66, 0x2, 0x2, 0x936, 0x937, 
-       0x7, 0x56, 0x2, 0x2, 0x937, 0x938, 0x7, 0x67, 0x2, 0x2, 0x938, 0x939, 
-       0x7, 0x7a, 0x2, 0x2, 0x939, 0x93a, 0x7, 0x76, 0x2, 0x2, 0x93a, 0x93b, 
-       0x7, 0x77, 0x2, 0x2, 0x93b, 0x93c, 0x7, 0x74, 0x2, 0x2, 0x93c, 0x93d, 
-       0x7, 0x67, 0x2, 0x2, 0x93d, 0x93e, 0x7, 0x35, 0x2, 0x2, 0x93e, 0x93f, 
-       0x7, 0x46, 0x2, 0x2, 0x93f, 0x14c, 0x3, 0x2, 0x2, 0x2, 0x940, 0x941, 
-       0x7, 0x54, 0x2, 0x2, 0x941, 0x942, 0x7, 0x63, 0x2, 0x2, 0x942, 0x943, 
-       0x7, 0x7b, 0x2, 0x2, 0x943, 0x944, 0x7, 0x46, 0x2, 0x2, 0x944, 0x945, 
-       0x7, 0x67, 0x2, 0x2, 0x945, 0x946, 0x7, 0x75, 0x2, 0x2, 0x946, 0x947, 
-       0x7, 0x65, 0x2, 0x2, 0x947, 0x14e, 0x3, 0x2, 0x2, 0x2, 0x948, 0x949, 
-       0x7, 0x54, 0x2, 0x2, 0x949, 0x94a, 0x7, 0x63, 0x2, 0x2, 0x94a, 0x94b, 
-       0x7, 0x7b, 0x2, 0x2, 0x94b, 0x94c, 0x7, 0x76, 0x2, 0x2, 0x94c, 0x94d, 
-       0x7, 0x74, 0x2, 0x2, 0x94d, 0x94e, 0x7, 0x63, 0x2, 0x2, 0x94e, 0x94f, 
-       0x7, 0x65, 0x2, 0x2, 0x94f, 0x950, 0x7, 0x6b, 0x2, 0x2, 0x950, 0x951, 
-       0x7, 0x70, 0x2, 0x2, 0x951, 0x952, 0x7, 0x69, 0x2, 0x2, 0x952, 0x953, 
-       0x7, 0x43, 0x2, 0x2, 0x953, 0x954, 0x7, 0x65, 0x2, 0x2, 0x954, 0x955, 
-       0x7, 0x65, 0x2, 0x2, 0x955, 0x956, 0x7, 0x67, 0x2, 0x2, 0x956, 0x957, 
-       0x7, 0x6e, 0x2, 0x2, 0x957, 0x958, 0x7, 0x67, 0x2, 0x2, 0x958, 0x959, 
-       0x7, 0x74, 0x2, 0x2, 0x959, 0x95a, 0x7, 0x63, 0x2, 0x2, 0x95a, 0x95b, 
-       0x7, 0x76, 0x2, 0x2, 0x95b, 0x95c, 0x7, 0x6b, 0x2, 0x2, 0x95c, 0x95d, 
-       0x7, 0x71, 0x2, 0x2, 0x95d, 0x95e, 0x7, 0x70, 0x2, 0x2, 0x95e, 0x95f, 
-       0x7, 0x55, 0x2, 0x2, 0x95f, 0x960, 0x7, 0x76, 0x2, 0x2, 0x960, 0x961, 
-       0x7, 0x74, 0x2, 0x2, 0x961, 0x962, 0x7, 0x77, 0x2, 0x2, 0x962, 0x963, 
-       0x7, 0x65, 0x2, 0x2, 0x963, 0x964, 0x7, 0x76, 0x2, 0x2, 0x964, 0x965, 
-       0x7, 0x77, 0x2, 0x2, 0x965, 0x966, 0x7, 0x74, 0x2, 0x2, 0x966, 0x967, 
-       0x7, 0x67, 0x2, 0x2, 0x967, 0x150, 0x3, 0x2, 0x2, 0x2, 0x968, 0x969, 
-       0x7, 0x74, 0x2, 0x2, 0x969, 0x96a, 0x7, 0x67, 0x2, 0x2, 0x96a, 0x96b, 
-       0x7, 0x69, 0x2, 0x2, 0x96b, 0x96c, 0x7, 0x6b, 0x2, 0x2, 0x96c, 0x96d, 
-       0x7, 0x75, 0x2, 0x2, 0x96d, 0x96e, 0x7, 0x76, 0x2, 0x2, 0x96e, 0x96f, 
-       0x7, 0x67, 0x2, 0x2, 0x96f, 0x970, 0x7, 0x74, 0x2, 0x2, 0x970, 0x152, 
-       0x3, 0x2, 0x2, 0x2, 0x971, 0x972, 0x7, 0x74, 0x2, 0x2, 0x972, 0x973, 
-       0x7, 0x67, 0x2, 0x2, 0x973, 0x974, 0x7, 0x76, 0x2, 0x2, 0x974, 0x975, 
-       0x7, 0x77, 0x2, 0x2, 0x975, 0x976, 0x7, 0x74, 0x2, 0x2, 0x976, 0x977, 
-       0x7, 0x70, 0x2, 0x2, 0x977, 0x154, 0x3, 0x2, 0x2, 0x2, 0x978, 0x979, 
-       0x7, 0x74, 0x2, 0x2, 0x979, 0x97a, 0x7, 0x71, 0x2, 0x2, 0x97a, 0x97b, 
-       0x7, 0x79, 0x2, 0x2, 0x97b, 0x97c, 0x7, 0x61, 0x2, 0x2, 0x97c, 0x97d, 
-       0x7, 0x6f, 0x2, 0x2, 0x97d, 0x97e, 0x7, 0x63, 0x2, 0x2, 0x97e, 0x97f, 
-       0x7, 0x6c, 0x2, 0x2, 0x97f, 0x980, 0x7, 0x71, 0x2, 0x2, 0x980, 0x981, 
-       0x7, 0x74, 0x2, 0x2, 0x981, 0x156, 0x3, 0x2, 0x2, 0x2, 0x982, 0x983, 
-       0x7, 0x54, 0x2, 0x2, 0x983, 0x984, 0x7, 0x59, 0x2, 0x2, 0x984, 0x985, 
-       0x7, 0x44, 0x2, 0x2, 0x985, 0x986, 0x7, 0x77, 0x2, 0x2, 0x986, 0x987, 
-       0x7, 0x68, 0x2, 0x2, 0x987, 0x988, 0x7, 0x68, 0x2, 0x2, 0x988, 0x989, 
-       0x7, 0x67, 0x2, 0x2, 0x989, 0x98a, 0x7, 0x74, 0x2, 0x2, 0x98a, 0x158, 
-       0x3, 0x2, 0x2, 0x2, 0x98b, 0x98c, 0x7, 0x54, 0x2, 0x2, 0x98c, 0x98d, 
-       0x7, 0x59, 0x2, 0x2, 0x98d, 0x98e, 0x7, 0x44, 0x2, 0x2, 0x98e, 0x98f, 
-       0x7, 0x7b, 0x2, 0x2, 0x98f, 0x990, 0x7, 0x76, 0x2, 0x2, 0x990, 0x991, 
-       0x7, 0x67, 0x2, 0x2, 0x991, 0x992, 0x7, 0x43, 0x2, 0x2, 0x992, 0x993, 
-       0x7, 0x66, 0x2, 0x2, 0x993, 0x994, 0x7, 0x66, 0x2, 0x2, 0x994, 0x995, 
-       0x7, 0x74, 0x2, 0x2, 0x995, 0x996, 0x7, 0x67, 0x2, 0x2, 0x996, 0x997, 
-       0x7, 0x75, 0x2, 0x2, 0x997, 0x998, 0x7, 0x75, 0x2, 0x2, 0x998, 0x999, 
-       0x7, 0x44, 0x2, 0x2, 0x999, 0x99a, 0x7, 0x77, 0x2, 0x2, 0x99a, 0x99b, 
-       0x7, 0x68, 0x2, 0x2, 0x99b, 0x99c, 0x7, 0x68, 0x2, 0x2, 0x99c, 0x99d, 
-       0x7, 0x67, 0x2, 0x2, 0x99d, 0x99e, 0x7, 0x74, 0x2, 0x2, 0x99e, 0x15a, 
-       0x3, 0x2, 0x2, 0x2, 0x99f, 0x9a0, 0x7, 0x54, 0x2, 0x2, 0x9a0, 0x9a1, 
-       0x7, 0x59, 0x2, 0x2, 0x9a1, 0x9a2, 0x7, 0x55, 0x2, 0x2, 0x9a2, 0x9a3, 
-       0x7, 0x76, 0x2, 0x2, 0x9a3, 0x9a4, 0x7, 0x74, 0x2, 0x2, 0x9a4, 0x9a5, 
-       0x7, 0x77, 0x2, 0x2, 0x9a5, 0x9a6, 0x7, 0x65, 0x2, 0x2, 0x9a6, 0x9a7, 
-       0x7, 0x76, 0x2, 0x2, 0x9a7, 0x9a8, 0x7, 0x77, 0x2, 0x2, 0x9a8, 0x9a9, 
-       0x7, 0x74, 0x2, 0x2, 0x9a9, 0x9aa, 0x7, 0x67, 0x2, 0x2, 0x9aa, 0x9ab, 
-       0x7, 0x66, 0x2, 0x2, 0x9ab, 0x9ac, 0x7, 0x44, 0x2, 0x2, 0x9ac, 0x9ad, 
-       0x7, 0x77, 0x2, 0x2, 0x9ad, 0x9ae, 0x7, 0x68, 0x2, 0x2, 0x9ae, 0x9af, 
-       0x7, 0x68, 0x2, 0x2, 0x9af, 0x9b0, 0x7, 0x67, 0x2, 0x2, 0x9b0, 0x9b1, 
-       0x7, 0x74, 0x2, 0x2, 0x9b1, 0x15c, 0x3, 0x2, 0x2, 0x2, 0x9b2, 0x9b3, 
-       0x7, 0x54, 0x2, 0x2, 0x9b3, 0x9b4, 0x7, 0x59, 0x2, 0x2, 0x9b4, 0x9b5, 
-       0x7, 0x56, 0x2, 0x2, 0x9b5, 0x9b6, 0x7, 0x67, 0x2, 0x2, 0x9b6, 0x9b7, 
-       0x7, 0x7a, 0x2, 0x2, 0x9b7, 0x9b8, 0x7, 0x76, 0x2, 0x2, 0x9b8, 0x9b9, 
-       0x7, 0x77, 0x2, 0x2, 0x9b9, 0x9ba, 0x7, 0x74, 0x2, 0x2, 0x9ba, 0x9bb, 
-       0x7, 0x67, 0x2, 0x2, 0x9bb, 0x9bc, 0x7, 0x33, 0x2, 0x2, 0x9bc, 0x9bd, 
-       0x7, 0x46, 0x2, 0x2, 0x9bd, 0x15e, 0x3, 0x2, 0x2, 0x2, 0x9be, 0x9bf, 
-       0x7, 0x54, 0x2, 0x2, 0x9bf, 0x9c0, 0x7, 0x59, 0x2, 0x2, 0x9c0, 0x9c1, 
-       0x7, 0x56, 0x2, 0x2, 0x9c1, 0x9c2, 0x7, 0x67, 0x2, 0x2, 0x9c2, 0x9c3, 
-       0x7, 0x7a, 0x2, 0x2, 0x9c3, 0x9c4, 0x7, 0x76, 0x2, 0x2, 0x9c4, 0x9c5, 
-       0x7, 0x77, 0x2, 0x2, 0x9c5, 0x9c6, 0x7, 0x74, 0x2, 0x2, 0x9c6, 0x9c7, 
-       0x7, 0x67, 0x2, 0x2, 0x9c7, 0x9c8, 0x7, 0x33, 0x2, 0x2, 0x9c8, 0x9c9, 
-       0x7, 0x46, 0x2, 0x2, 0x9c9, 0x9ca, 0x7, 0x43, 0x2, 0x2, 0x9ca, 0x9cb, 
-       0x7, 0x74, 0x2, 0x2, 0x9cb, 0x9cc, 0x7, 0x74, 0x2, 0x2, 0x9cc, 0x9cd, 
-       0x7, 0x63, 0x2, 0x2, 0x9cd, 0x9ce, 0x7, 0x7b, 0x2, 0x2, 0x9ce, 0x160, 
-       0x3, 0x2, 0x2, 0x2, 0x9cf, 0x9d0, 0x7, 0x54, 0x2, 0x2, 0x9d0, 0x9d1, 
-       0x7, 0x59, 0x2, 0x2, 0x9d1, 0x9d2, 0x7, 0x56, 0x2, 0x2, 0x9d2, 0x9d3, 
-       0x7, 0x67, 0x2, 0x2, 0x9d3, 0x9d4, 0x7, 0x7a, 0x2, 0x2, 0x9d4, 0x9d5, 
-       0x7, 0x76, 0x2, 0x2, 0x9d5, 0x9d6, 0x7, 0x77, 0x2, 0x2, 0x9d6, 0x9d7, 
-       0x7, 0x74, 0x2, 0x2, 0x9d7, 0x9d8, 0x7, 0x67, 0x2, 0x2, 0x9d8, 0x9d9, 
-       0x7, 0x34, 0x2, 0x2, 0x9d9, 0x9da, 0x7, 0x46, 0x2, 0x2, 0x9da, 0x162, 
-       0x3, 0x2, 0x2, 0x2, 0x9db, 0x9dc, 0x7, 0x54, 0x2, 0x2, 0x9dc, 0x9dd, 
-       0x7, 0x59, 0x2, 0x2, 0x9dd, 0x9de, 0x7, 0x56, 0x2, 0x2, 0x9de, 0x9df, 
-       0x7, 0x67, 0x2, 0x2, 0x9df, 0x9e0, 0x7, 0x7a, 0x2, 0x2, 0x9e0, 0x9e1, 
-       0x7, 0x76, 0x2, 0x2, 0x9e1, 0x9e2, 0x7, 0x77, 0x2, 0x2, 0x9e2, 0x9e3, 
-       0x7, 0x74, 0x2, 0x2, 0x9e3, 0x9e4, 0x7, 0x67, 0x2, 0x2, 0x9e4, 0x9e5, 
-       0x7, 0x34, 0x2, 0x2, 0x9e5, 0x9e6, 0x7, 0x46, 0x2, 0x2, 0x9e6, 0x9e7, 
-       0x7, 0x43, 0x2, 0x2, 0x9e7, 0x9e8, 0x7, 0x74, 0x2, 0x2, 0x9e8, 0x9e9, 
-       0x7, 0x74, 0x2, 0x2, 0x9e9, 0x9ea, 0x7, 0x63, 0x2, 0x2, 0x9ea, 0x9eb, 
-       0x7, 0x7b, 0x2, 0x2, 0x9eb, 0x164, 0x3, 0x2, 0x2, 0x2, 0x9ec, 0x9ed, 
-       0x7, 0x54, 0x2, 0x2, 0x9ed, 0x9ee, 0x7, 0x59, 0x2, 0x2, 0x9ee, 0x9ef, 
-       0x7, 0x56, 0x2, 0x2, 0x9ef, 0x9f0, 0x7, 0x67, 0x2, 0x2, 0x9f0, 0x9f1, 
-       0x7, 0x7a, 0x2, 0x2, 0x9f1, 0x9f2, 0x7, 0x76, 0x2, 0x2, 0x9f2, 0x9f3, 
-       0x7, 0x77, 0x2, 0x2, 0x9f3, 0x9f4, 0x7, 0x74, 0x2, 0x2, 0x9f4, 0x9f5, 
-       0x7, 0x67, 0x2, 0x2, 0x9f5, 0x9f6, 0x7, 0x35, 0x2, 0x2, 0x9f6, 0x9f7, 
-       0x7, 0x46, 0x2, 0x2, 0x9f7, 0x166, 0x3, 0x2, 0x2, 0x2, 0x9f8, 0x9f9, 
-       0x7, 0x75, 0x2, 0x2, 0x9f9, 0x9fa, 0x7, 0x63, 0x2, 0x2, 0x9fa, 0x9fb, 
-       0x7, 0x6f, 0x2, 0x2, 0x9fb, 0x9fc, 0x7, 0x72, 0x2, 0x2, 0x9fc, 0x9fd, 
-       0x7, 0x6e, 0x2, 0x2, 0x9fd, 0x9fe, 0x7, 0x67, 0x2, 0x2, 0x9fe, 0x168, 
-       0x3, 0x2, 0x2, 0x2, 0x9ff, 0xa00, 0x7, 0x75, 0x2, 0x2, 0xa00, 0xa01, 
-       0x7, 0x63, 0x2, 0x2, 0xa01, 0xa02, 0x7, 0x6f, 0x2, 0x2, 0xa02, 0xa03, 
-       0x7, 0x72, 0x2, 0x2, 0xa03, 0xa04, 0x7, 0x6e, 0x2, 0x2, 0xa04, 0xa05, 
-       0x7, 0x67, 0x2, 0x2, 0xa05, 0xa06, 0x7, 0x74, 0x2, 0x2, 0xa06, 0x16a, 
-       0x3, 0x2, 0x2, 0x2, 0xa07, 0xa08, 0x7, 0x55, 0x2, 0x2, 0xa08, 0xa09, 
-       0x7, 0x63, 0x2, 0x2, 0xa09, 0xa0a, 0x7, 0x6f, 0x2, 0x2, 0xa0a, 0xa0b, 
-       0x7, 0x72, 0x2, 0x2, 0xa0b, 0xa0c, 0x7, 0x6e, 0x2, 0x2, 0xa0c, 0xa0d, 
-       0x7, 0x67, 0x2, 0x2, 0xa0d, 0xa0e, 0x7, 0x74, 0x2, 0x2, 0xa0e, 0x16c, 
-       0x3, 0x2, 0x2, 0x2, 0xa0f, 0xa10, 0x7, 0x55, 0x2, 0x2, 0xa10, 0xa11, 
-       0x7, 0x63, 0x2, 0x2, 0xa11, 0xa12, 0x7, 0x6f, 0x2, 0x2, 0xa12, 0xa13, 
-       0x7, 0x72, 0x2, 0x2, 0xa13, 0xa14, 0x7, 0x6e, 0x2, 0x2, 0xa14, 0xa15, 
-       0x7, 0x67, 0x2, 0x2, 0xa15, 0xa16, 0x7, 0x74, 0x2, 0x2, 0xa16, 0xa17, 
-       0x7, 0x45, 0x2, 0x2, 0xa17, 0xa18, 0x7, 0x71, 0x2, 0x2, 0xa18, 0xa19, 
-       0x7, 0x6f, 0x2, 0x2, 0xa19, 0xa1a, 0x7, 0x72, 0x2, 0x2, 0xa1a, 0xa1b, 
-       0x7, 0x63, 0x2, 0x2, 0xa1b, 0xa1c, 0x7, 0x74, 0x2, 0x2, 0xa1c, 0xa1d, 
-       0x7, 0x6b, 0x2, 0x2, 0xa1d, 0xa1e, 0x7, 0x75, 0x2, 0x2, 0xa1e, 0xa1f, 
-       0x7, 0x71, 0x2, 0x2, 0xa1f, 0xa20, 0x7, 0x70, 0x2, 0x2, 0xa20, 0xa21, 
-       0x7, 0x55, 0x2, 0x2, 0xa21, 0xa22, 0x7, 0x76, 0x2, 0x2, 0xa22, 0xa23, 
-       0x7, 0x63, 0x2, 0x2, 0xa23, 0xa24, 0x7, 0x76, 0x2, 0x2, 0xa24, 0xa25, 
-       0x7, 0x67, 0x2, 0x2, 0xa25, 0x16e, 0x3, 0x2, 0x2, 0x2, 0xa26, 0xa27, 
-       0x7, 0x55, 0x2, 0x2, 0xa27, 0xa28, 0x7, 0x63, 0x2, 0x2, 0xa28, 0xa29, 
-       0x7, 0x6f, 0x2, 0x2, 0xa29, 0xa2a, 0x7, 0x72, 0x2, 0x2, 0xa2a, 0xa2b, 
-       0x7, 0x6e, 0x2, 0x2, 0xa2b, 0xa2c, 0x7, 0x67, 0x2, 0x2, 0xa2c, 0xa2d, 
-       0x7, 0x74, 0x2, 0x2, 0xa2d, 0xa2e, 0x7, 0x55, 0x2, 0x2, 0xa2e, 0xa2f, 
-       0x7, 0x76, 0x2, 0x2, 0xa2f, 0xa30, 0x7, 0x63, 0x2, 0x2, 0xa30, 0xa31, 
-       0x7, 0x76, 0x2, 0x2, 0xa31, 0xa32, 0x7, 0x67, 0x2, 0x2, 0xa32, 0x170, 
-       0x3, 0x2, 0x2, 0x2, 0xa33, 0xa34, 0x7, 0x75, 0x2, 0x2, 0xa34, 0xa35, 
-       0x7, 0x6a, 0x2, 0x2, 0xa35, 0xa36, 0x7, 0x63, 0x2, 0x2, 0xa36, 0xa37, 
-       0x7, 0x74, 0x2, 0x2, 0xa37, 0xa38, 0x7, 0x67, 0x2, 0x2, 0xa38, 0xa39, 
-       0x7, 0x66, 0x2, 0x2, 0xa39, 0x172, 0x3, 0x2, 0x2, 0x2, 0xa3a, 0xa3b, 
-       0x7, 0x75, 0x2, 0x2, 0xa3b, 0xa3c, 0x7, 0x76, 0x2, 0x2, 0xa3c, 0xa3d, 
-       0x7, 0x63, 0x2, 0x2, 0xa3d, 0xa3e, 0x7, 0x76, 0x2, 0x2, 0xa3e, 0xa3f, 
-       0x7, 0x6b, 0x2, 0x2, 0xa3f, 0xa40, 0x7, 0x65, 0x2, 0x2, 0xa40, 0x174, 
-       0x3, 0x2, 0x2, 0x2, 0xa41, 0xa42, 0x7, 0x75, 0x2, 0x2, 0xa42, 0xa43, 
-       0x7, 0x76, 0x2, 0x2, 0xa43, 0xa44, 0x7, 0x74, 0x2, 0x2, 0xa44, 0xa45, 
-       0x7, 0x77, 0x2, 0x2, 0xa45, 0xa46, 0x7, 0x65, 0x2, 0x2, 0xa46, 0xa47, 
-       0x7, 0x76, 0x2, 0x2, 0xa47, 0x176, 0x3, 0x2, 0x2, 0x2, 0xa48, 0xa49, 
-       0x7, 0x55, 0x2, 0x2, 0xa49, 0xa4a, 0x7, 0x76, 0x2, 0x2, 0xa4a, 0xa4b, 
-       0x7, 0x74, 0x2, 0x2, 0xa4b, 0xa4c, 0x7, 0x77, 0x2, 0x2, 0xa4c, 0xa4d, 
-       0x7, 0x65, 0x2, 0x2, 0xa4d, 0xa4e, 0x7, 0x76, 0x2, 0x2, 0xa4e, 0xa4f, 
-       0x7, 0x77, 0x2, 0x2, 0xa4f, 0xa50, 0x7, 0x74, 0x2, 0x2, 0xa50, 0xa51, 
-       0x7, 0x67, 0x2, 0x2, 0xa51, 0xa52, 0x7, 0x66, 0x2, 0x2, 0xa52, 0xa53, 
-       0x7, 0x44, 0x2, 0x2, 0xa53, 0xa54, 0x7, 0x77, 0x2, 0x2, 0xa54, 0xa55, 
-       0x7, 0x68, 0x2, 0x2, 0xa55, 0xa56, 0x7, 0x68, 0x2, 0x2, 0xa56, 0xa57, 
-       0x7, 0x67, 0x2, 0x2, 0xa57, 0xa58, 0x7, 0x74, 0x2, 0x2, 0xa58, 0x178, 
-       0x3, 0x2, 0x2, 0x2, 0xa59, 0xa5a, 0x7, 0x55, 0x2, 0x2, 0xa5a, 0xa5b, 
-       0x7, 0x77, 0x2, 0x2, 0xa5b, 0xa5c, 0x7, 0x64, 0x2, 0x2, 0xa5c, 0xa5d, 
-       0x7, 0x72, 0x2, 0x2, 0xa5d, 0xa5e, 0x7, 0x63, 0x2, 0x2, 0xa5e, 0xa5f, 
-       0x7, 0x75, 0x2, 0x2, 0xa5f, 0xa60, 0x7, 0x75, 0x2, 0x2, 0xa60, 0xa61, 
-       0x7, 0x4b, 0x2, 0x2, 0xa61, 0xa62, 0x7, 0x70, 0x2, 0x2, 0xa62, 0xa63, 
-       0x7, 0x72, 0x2, 0x2, 0xa63, 0xa64, 0x7, 0x77, 0x2, 0x2, 0xa64, 0xa65, 
-       0x7, 0x76, 0x2, 0x2, 0xa65, 0x17a, 0x3, 0x2, 0x2, 0x2, 0xa66, 0xa67, 
-       0x7, 0x55, 0x2, 0x2, 0xa67, 0xa68, 0x7, 0x77, 0x2, 0x2, 0xa68, 0xa69, 
-       0x7, 0x64, 0x2, 0x2, 0xa69, 0xa6a, 0x7, 0x72, 0x2, 0x2, 0xa6a, 0xa6b, 
-       0x7, 0x63, 0x2, 0x2, 0xa6b, 0xa6c, 0x7, 0x75, 0x2, 0x2, 0xa6c, 0xa6d, 
-       0x7, 0x75, 0x2, 0x2, 0xa6d, 0xa6e, 0x7, 0x4b, 0x2, 0x2, 0xa6e, 0xa6f, 
-       0x7, 0x70, 0x2, 0x2, 0xa6f, 0xa70, 0x7, 0x72, 0x2, 0x2, 0xa70, 0xa71, 
-       0x7, 0x77, 0x2, 0x2, 0xa71, 0xa72, 0x7, 0x76, 0x2, 0x2, 0xa72, 0xa73, 
-       0x7, 0x4f, 0x2, 0x2, 0xa73, 0xa74, 0x7, 0x55, 0x2, 0x2, 0xa74, 0x17c, 
-       0x3, 0x2, 0x2, 0x2, 0xa75, 0xa76, 0x7, 0x75, 0x2, 0x2, 0xa76, 0xa77, 
-       0x7, 0x79, 0x2, 0x2, 0xa77, 0xa78, 0x7, 0x6b, 0x2, 0x2, 0xa78, 0xa79, 
-       0x7, 0x76, 0x2, 0x2, 0xa79, 0xa7a, 0x7, 0x65, 0x2, 0x2, 0xa7a, 0xa7b, 
-       0x7, 0x6a, 0x2, 0x2, 0xa7b, 0x17e, 0x3, 0x2, 0x2, 0x2, 0xa7c, 0xa7d, 
-       0x7, 0x56, 0x2, 0x2, 0xa7d, 0xa7e, 0x7, 0x67, 0x2, 0x2, 0xa7e, 0xa7f, 
-       0x7, 0x7a, 0x2, 0x2, 0xa7f, 0xa80, 0x7, 0x76, 0x2, 0x2, 0xa80, 0xa81, 
-       0x7, 0x77, 0x2, 0x2, 0xa81, 0xa82, 0x7, 0x74, 0x2, 0x2, 0xa82, 0xa83, 
-       0x7, 0x67, 0x2, 0x2, 0xa83, 0xa84, 0x7, 0x33, 0x2, 0x2, 0xa84, 0xa85, 
-       0x7, 0x46, 0x2, 0x2, 0xa85, 0x180, 0x3, 0x2, 0x2, 0x2, 0xa86, 0xa87, 
-       0x7, 0x56, 0x2, 0x2, 0xa87, 0xa88, 0x7, 0x67, 0x2, 0x2, 0xa88, 0xa89, 
-       0x7, 0x7a, 0x2, 0x2, 0xa89, 0xa8a, 0x7, 0x76, 0x2, 0x2, 0xa8a, 0xa8b, 
-       0x7, 0x77, 0x2, 0x2, 0xa8b, 0xa8c, 0x7, 0x74, 0x2, 0x2, 0xa8c, 0xa8d, 
-       0x7, 0x67, 0x2, 0x2, 0xa8d, 0xa8e, 0x7, 0x33, 0x2, 0x2, 0xa8e, 0xa8f, 
-       0x7, 0x46, 0x2, 0x2, 0xa8f, 0xa90, 0x7, 0x43, 0x2, 0x2, 0xa90, 0xa91, 
-       0x7, 0x74, 0x2, 0x2, 0xa91, 0xa92, 0x7, 0x74, 0x2, 0x2, 0xa92, 0xa93, 
-       0x7, 0x63, 0x2, 0x2, 0xa93, 0xa94, 0x7, 0x7b, 0x2, 0x2, 0xa94, 0x182, 
-       0x3, 0x2, 0x2, 0x2, 0xa95, 0xa96, 0x7, 0x56, 0x2, 0x2, 0xa96, 0xa97, 
-       0x7, 0x67, 0x2, 0x2, 0xa97, 0xa98, 0x7, 0x7a, 0x2, 0x2, 0xa98, 0xa99, 
-       0x7, 0x76, 0x2, 0x2, 0xa99, 0xa9a, 0x7, 0x77, 0x2, 0x2, 0xa9a, 0xa9b, 
-       0x7, 0x74, 0x2, 0x2, 0xa9b, 0xa9c, 0x7, 0x67, 0x2, 0x2, 0xa9c, 0xa9d, 
-       0x7, 0x34, 0x2, 0x2, 0xa9d, 0xa9e, 0x7, 0x46, 0x2, 0x2, 0xa9e, 0x184, 
-       0x3, 0x2, 0x2, 0x2, 0xa9f, 0xaa0, 0x7, 0x56, 0x2, 0x2, 0xaa0, 0xaa1, 
-       0x7, 0x67, 0x2, 0x2, 0xaa1, 0xaa2, 0x7, 0x7a, 0x2, 0x2, 0xaa2, 0xaa3, 
-       0x7, 0x76, 0x2, 0x2, 0xaa3, 0xaa4, 0x7, 0x77, 0x2, 0x2, 0xaa4, 0xaa5, 
-       0x7, 0x74, 0x2, 0x2, 0xaa5, 0xaa6, 0x7, 0x67, 0x2, 0x2, 0xaa6, 0xaa7, 
-       0x7, 0x34, 0x2, 0x2, 0xaa7, 0xaa8, 0x7, 0x46, 0x2, 0x2, 0xaa8, 0xaa9, 
-       0x7, 0x43, 0x2, 0x2, 0xaa9, 0xaaa, 0x7, 0x74, 0x2, 0x2, 0xaaa, 0xaab, 
-       0x7, 0x74, 0x2, 0x2, 0xaab, 0xaac, 0x7, 0x63, 0x2, 0x2, 0xaac, 0xaad, 
-       0x7, 0x7b, 0x2, 0x2, 0xaad, 0x186, 0x3, 0x2, 0x2, 0x2, 0xaae, 0xaaf, 
-       0x7, 0x56, 0x2, 0x2, 0xaaf, 0xab0, 0x7, 0x67, 0x2, 0x2, 0xab0, 0xab1, 
-       0x7, 0x7a, 0x2, 0x2, 0xab1, 0xab2, 0x7, 0x76, 0x2, 0x2, 0xab2, 0xab3, 
-       0x7, 0x77, 0x2, 0x2, 0xab3, 0xab4, 0x7, 0x74, 0x2, 0x2, 0xab4, 0xab5, 
-       0x7, 0x67, 0x2, 0x2, 0xab5, 0xab6, 0x7, 0x34, 0x2, 0x2, 0xab6, 0xab7, 
-       0x7, 0x46, 0x2, 0x2, 0xab7, 0xab8, 0x7, 0x4f, 0x2, 0x2, 0xab8, 0xab9, 
-       0x7, 0x55, 0x2, 0x2, 0xab9, 0x188, 0x3, 0x2, 0x2, 0x2, 0xaba, 0xabb, 
-       0x7, 0x56, 0x2, 0x2, 0xabb, 0xabc, 0x7, 0x67, 0x2, 0x2, 0xabc, 0xabd, 
-       0x7, 0x7a, 0x2, 0x2, 0xabd, 0xabe, 0x7, 0x76, 0x2, 0x2, 0xabe, 0xabf, 
-       0x7, 0x77, 0x2, 0x2, 0xabf, 0xac0, 0x7, 0x74, 0x2, 0x2, 0xac0, 0xac1, 
-       0x7, 0x67, 0x2, 0x2, 0xac1, 0xac2, 0x7, 0x34, 0x2, 0x2, 0xac2, 0xac3, 
-       0x7, 0x46, 0x2, 0x2, 0xac3, 0xac4, 0x7, 0x4f, 0x2, 0x2, 0xac4, 0xac5, 
-       0x7, 0x55, 0x2, 0x2, 0xac5, 0xac6, 0x7, 0x43, 0x2, 0x2, 0xac6, 0xac7, 
-       0x7, 0x74, 0x2, 0x2, 0xac7, 0xac8, 0x7, 0x74, 0x2, 0x2, 0xac8, 0xac9, 
-       0x7, 0x63, 0x2, 0x2, 0xac9, 0xaca, 0x7, 0x7b, 0x2, 0x2, 0xaca, 0x18a, 
-       0x3, 0x2, 0x2, 0x2, 0xacb, 0xacc, 0x7, 0x56, 0x2, 0x2, 0xacc, 0xacd, 
-       0x7, 0x67, 0x2, 0x2, 0xacd, 0xace, 0x7, 0x7a, 0x2, 0x2, 0xace, 0xacf, 
-       0x7, 0x76, 0x2, 0x2, 0xacf, 0xad0, 0x7, 0x77, 0x2, 0x2, 0xad0, 0xad1, 
-       0x7, 0x74, 0x2, 0x2, 0xad1, 0xad2, 0x7, 0x67, 0x2, 0x2, 0xad2, 0xad3, 
-       0x7, 0x35, 0x2, 0x2, 0xad3, 0xad4, 0x7, 0x46, 0x2, 0x2, 0xad4, 0x18c, 
-       0x3, 0x2, 0x2, 0x2, 0xad5, 0xad6, 0x7, 0x56, 0x2, 0x2, 0xad6, 0xad7, 
-       0x7, 0x67, 0x2, 0x2, 0xad7, 0xad8, 0x7, 0x7a, 0x2, 0x2, 0xad8, 0xad9, 
-       0x7, 0x76, 0x2, 0x2, 0xad9, 0xada, 0x7, 0x77, 0x2, 0x2, 0xada, 0xadb, 
-       0x7, 0x74, 0x2, 0x2, 0xadb, 0xadc, 0x7, 0x67, 0x2, 0x2, 0xadc, 0xadd, 
-       0x7, 0x45, 0x2, 0x2, 0xadd, 0xade, 0x7, 0x77, 0x2, 0x2, 0xade, 0xadf, 
-       0x7, 0x64, 0x2, 0x2, 0xadf, 0xae0, 0x7, 0x67, 0x2, 0x2, 0xae0, 0x18e, 
-       0x3, 0x2, 0x2, 0x2, 0xae1, 0xae2, 0x7, 0x56, 0x2, 0x2, 0xae2, 0xae3, 
-       0x7, 0x67, 0x2, 0x2, 0xae3, 0xae4, 0x7, 0x7a, 0x2, 0x2, 0xae4, 0xae5, 
-       0x7, 0x76, 0x2, 0x2, 0xae5, 0xae6, 0x7, 0x77, 0x2, 0x2, 0xae6, 0xae7, 
-       0x7, 0x74, 0x2, 0x2, 0xae7, 0xae8, 0x7, 0x67, 0x2, 0x2, 0xae8, 0xae9, 
-       0x7, 0x45, 0x2, 0x2, 0xae9, 0xaea, 0x7, 0x77, 0x2, 0x2, 0xaea, 0xaeb, 
-       0x7, 0x64, 0x2, 0x2, 0xaeb, 0xaec, 0x7, 0x67, 0x2, 0x2, 0xaec, 0xaed, 
-       0x7, 0x43, 0x2, 0x2, 0xaed, 0xaee, 0x7, 0x74, 0x2, 0x2, 0xaee, 0xaef, 
-       0x7, 0x74, 0x2, 0x2, 0xaef, 0xaf0, 0x7, 0x63, 0x2, 0x2, 0xaf0, 0xaf1, 
-       0x7, 0x7b, 0x2, 0x2, 0xaf1, 0x190, 0x3, 0x2, 0x2, 0x2, 0xaf2, 0xaf3, 
-       0x7, 0x76, 0x2, 0x2, 0xaf3, 0xaf4, 0x7, 0x74, 0x2, 0x2, 0xaf4, 0xaf5, 
-       0x7, 0x6b, 0x2, 0x2, 0xaf5, 0xaf6, 0x7, 0x63, 0x2, 0x2, 0xaf6, 0xaf7, 
-       0x7, 0x70, 0x2, 0x2, 0xaf7, 0xaf8, 0x7, 0x69, 0x2, 0x2, 0xaf8, 0xaf9, 
-       0x7, 0x6e, 0x2, 0x2, 0xaf9, 0xafa, 0x7, 0x67, 0x2, 0x2, 0xafa, 0x192, 
-       0x3, 0x2, 0x2, 0x2, 0xafb, 0xafc, 0x7, 0x76, 0x2, 0x2, 0xafc, 0xafd, 
-       0x7, 0x74, 0x2, 0x2, 0xafd, 0xafe, 0x7, 0x6b, 0x2, 0x2, 0xafe, 0xaff, 
-       0x7, 0x63, 0x2, 0x2, 0xaff, 0xb00, 0x7, 0x70, 0x2, 0x2, 0xb00, 0xb01, 
-       0x7, 0x69, 0x2, 0x2, 0xb01, 0xb02, 0x7, 0x6e, 0x2, 0x2, 0xb02, 0xb03, 
-       0x7, 0x67, 0x2, 0x2, 0xb03, 0xb04, 0x7, 0x63, 0x2, 0x2, 0xb04, 0xb05, 
-       0x7, 0x66, 0x2, 0x2, 0xb05, 0xb06, 0x7, 0x6c, 0x2, 0x2, 0xb06, 0x194, 
-       0x3, 0x2, 0x2, 0x2, 0xb07, 0xb08, 0x7, 0x56, 0x2, 0x2, 0xb08, 0xb09, 
-       0x7, 0x74, 0x2, 0x2, 0xb09, 0xb0a, 0x7, 0x6b, 0x2, 0x2, 0xb0a, 0xb0b, 
-       0x7, 0x63, 0x2, 0x2, 0xb0b, 0xb0c, 0x7, 0x70, 0x2, 0x2, 0xb0c, 0xb0d, 
-       0x7, 0x69, 0x2, 0x2, 0xb0d, 0xb0e, 0x7, 0x6e, 0x2, 0x2, 0xb0e, 0xb0f, 
-       0x7, 0x67, 0x2, 0x2, 0xb0f, 0xb10, 0x7, 0x55, 0x2, 0x2, 0xb10, 0xb11, 
-       0x7, 0x76, 0x2, 0x2, 0xb11, 0xb12, 0x7, 0x74, 0x2, 0x2, 0xb12, 0xb13, 
-       0x7, 0x67, 0x2, 0x2, 0xb13, 0xb14, 0x7, 0x63, 0x2, 0x2, 0xb14, 0xb15, 
-       0x7, 0x6f, 0x2, 0x2, 0xb15, 0x196, 0x3, 0x2, 0x2, 0x2, 0xb16, 0xb17, 
-       0x7, 0x77, 0x2, 0x2, 0xb17, 0xb18, 0x7, 0x70, 0x2, 0x2, 0xb18, 0xb19, 
-       0x7, 0x6b, 0x2, 0x2, 0xb19, 0xb1a, 0x7, 0x68, 0x2, 0x2, 0xb1a, 0xb1b, 
-       0x7, 0x71, 0x2, 0x2, 0xb1b, 0xb1c, 0x7, 0x74, 0x2, 0x2, 0xb1c, 0xb1d, 
-       0x7, 0x6f, 0x2, 0x2, 0xb1d, 0x198, 0x3, 0x2, 0x2, 0x2, 0xb1e, 0xb1f, 
-       0x7, 0x77, 0x2, 0x2, 0xb1f, 0xb20, 0x7, 0x6b, 0x2, 0x2, 0xb20, 0xb21, 
-       0x7, 0x70, 0x2, 0x2, 0xb21, 0xb22, 0x7, 0x76, 0x2, 0x2, 0xb22, 0x19a, 
-       0x3, 0x2, 0x2, 0x2, 0xb23, 0xb24, 0x7, 0x77, 0x2, 0x2, 0xb24, 0xb25, 
-       0x7, 0x6b, 0x2, 0x2, 0xb25, 0xb26, 0x7, 0x70, 0x2, 0x2, 0xb26, 0xb27, 
-       0x7, 0x76, 0x2, 0x2, 0xb27, 0xb28, 0x7, 0x35, 0x2, 0x2, 0xb28, 0xb29, 
-       0x7, 0x34, 0x2, 0x2, 0xb29, 0xb2a, 0x7, 0x61, 0x2, 0x2, 0xb2a, 0xb2b, 
-       0x7, 0x76, 0x2, 0x2, 0xb2b, 0x19c, 0x3, 0x2, 0x2, 0x2, 0xb2c, 0xb2d, 
-       0x7, 0x77, 0x2, 0x2, 0xb2d, 0xb2e, 0x7, 0x6b, 0x2, 0x2, 0xb2e, 0xb2f, 
-       0x7, 0x70, 0x2, 0x2, 0xb2f, 0xb30, 0x7, 0x76, 0x2, 0x2, 0xb30, 0xb31, 
-       0x7, 0x38, 0x2, 0x2, 0xb31, 0xb32, 0x7, 0x36, 0x2, 0x2, 0xb32, 0xb33, 
-       0x7, 0x61, 0x2, 0x2, 0xb33, 0xb34, 0x7, 0x76, 0x2, 0x2, 0xb34, 0x19e, 
-       0x3, 0x2, 0x2, 0x2, 0xb35, 0xb36, 0x7, 0x77, 0x2, 0x2, 0xb36, 0xb37, 
-       0x7, 0x70, 0x2, 0x2, 0xb37, 0xb38, 0x7, 0x75, 0x2, 0x2, 0xb38, 0xb39, 
-       0x7, 0x6b, 0x2, 0x2, 0xb39, 0xb3a, 0x7, 0x69, 0x2, 0x2, 0xb3a, 0xb3b, 
-       0x7, 0x70, 0x2, 0x2, 0xb3b, 0xb3c, 0x7, 0x67, 0x2, 0x2, 0xb3c, 0xb3d, 
-       0x7, 0x66, 0x2, 0x2, 0xb3d, 0xb3e, 0x7, 0x22, 0x2, 0x2, 0xb3e, 0xb3f, 
-       0x7, 0x6b, 0x2, 0x2, 0xb3f, 0xb40, 0x7, 0x70, 0x2, 0x2, 0xb40, 0xb41, 
-       0x7, 0x76, 0x2, 0x2, 0xb41, 0x1a0, 0x3, 0x2, 0x2, 0x2, 0xb42, 0xb43, 
-       0x7, 0x77, 0x2, 0x2, 0xb43, 0xb44, 0x7, 0x6b, 0x2, 0x2, 0xb44, 0xb45, 
-       0x7, 0x70, 0x2, 0x2, 0xb45, 0xb46, 0x7, 0x76, 0x2, 0x2, 0xb46, 0xb47, 
-       0x7, 0x33, 0x2, 0x2, 0xb47, 0x1a2, 0x3, 0x2, 0x2, 0x2, 0xb48, 0xb49, 
-       0x7, 0x77, 0x2, 0x2, 0xb49, 0xb4a, 0x7, 0x6b, 0x2, 0x2, 0xb4a, 0xb4b, 
-       0x7, 0x70, 0x2, 0x2, 0xb4b, 0xb4c, 0x7, 0x76, 0x2, 0x2, 0xb4c, 0xb4d, 
-       0x7, 0x34, 0x2, 0x2, 0xb4d, 0x1a4, 0x3, 0x2, 0x2, 0x2, 0xb4e, 0xb4f, 
-       0x7, 0x77, 0x2, 0x2, 0xb4f, 0xb50, 0x7, 0x6b, 0x2, 0x2, 0xb50, 0xb51, 
-       0x7, 0x70, 0x2, 0x2, 0xb51, 0xb52, 0x7, 0x76, 0x2, 0x2, 0xb52, 0xb53, 
-       0x7, 0x35, 0x2, 0x2, 0xb53, 0x1a6, 0x3, 0x2, 0x2, 0x2, 0xb54, 0xb55, 
-       0x7, 0x77, 0x2, 0x2, 0xb55, 0xb56, 0x7, 0x6b, 0x2, 0x2, 0xb56, 0xb57, 
-       0x7, 0x70, 0x2, 0x2, 0xb57, 0xb58, 0x7, 0x76, 0x2, 0x2, 0xb58, 0xb59, 
-       0x7, 0x36, 0x2, 0x2, 0xb59, 0x1a8, 0x3, 0x2, 0x2, 0x2, 0xb5a, 0xb5b, 
-       0x7, 0x77, 0x2, 0x2, 0xb5b, 0xb5c, 0x7, 0x6b, 0x2, 0x2, 0xb5c, 0xb5d, 
-       0x7, 0x70, 0x2, 0x2, 0xb5d, 0xb5e, 0x7, 0x76, 0x2, 0x2, 0xb5e, 0xb5f, 
-       0x7, 0x33, 0x2, 0x2, 0xb5f, 0xb60, 0x7, 0x7a, 0x2, 0x2, 0xb60, 0xb61, 
-       0x7, 0x33, 0x2, 0x2, 0xb61, 0x1aa, 0x3, 0x2, 0x2, 0x2, 0xb62, 0xb63, 
-       0x7, 0x77, 0x2, 0x2, 0xb63, 0xb64, 0x7, 0x6b, 0x2, 0x2, 0xb64, 0xb65, 
-       0x7, 0x70, 0x2, 0x2, 0xb65, 0xb66, 0x7, 0x76, 0x2, 0x2, 0xb66, 0xb67, 
-       0x7, 0x33, 0x2, 0x2, 0xb67, 0xb68, 0x7, 0x7a, 0x2, 0x2, 0xb68, 0xb69, 
-       0x7, 0x34, 0x2, 0x2, 0xb69, 0x1ac, 0x3, 0x2, 0x2, 0x2, 0xb6a, 0xb6b, 
-       0x7, 0x77, 0x2, 0x2, 0xb6b, 0xb6c, 0x7, 0x6b, 0x2, 0x2, 0xb6c, 0xb6d, 
-       0x7, 0x70, 0x2, 0x2, 0xb6d, 0xb6e, 0x7, 0x76, 0x2, 0x2, 0xb6e, 0xb6f, 
-       0x7, 0x33, 0x2, 0x2, 0xb6f, 0xb70, 0x7, 0x7a, 0x2, 0x2, 0xb70, 0xb71, 
-       0x7, 0x35, 0x2, 0x2, 0xb71, 0x1ae, 0x3, 0x2, 0x2, 0x2, 0xb72, 0xb73, 
-       0x7, 0x77, 0x2, 0x2, 0xb73, 0xb74, 0x7, 0x6b, 0x2, 0x2, 0xb74, 0xb75, 
-       0x7, 0x70, 0x2, 0x2, 0xb75, 0xb76, 0x7, 0x76, 0x2, 0x2, 0xb76, 0xb77, 
-       0x7, 0x33, 0x2, 0x2, 0xb77, 0xb78, 0x7, 0x7a, 0x2, 0x2, 0xb78, 0xb79, 
-       0x7, 0x36, 0x2, 0x2, 0xb79, 0x1b0, 0x3, 0x2, 0x2, 0x2, 0xb7a, 0xb7b, 
-       0x7, 0x77, 0x2, 0x2, 0xb7b, 0xb7c, 0x7, 0x6b, 0x2, 0x2, 0xb7c, 0xb7d, 
-       0x7, 0x70, 0x2, 0x2, 0xb7d, 0xb7e, 0x7, 0x76, 0x2, 0x2, 0xb7e, 0xb7f, 
-       0x7, 0x34, 0x2, 0x2, 0xb7f, 0xb80, 0x7, 0x7a, 0x2, 0x2, 0xb80, 0xb81, 
-       0x7, 0x33, 0x2, 0x2, 0xb81, 0x1b2, 0x3, 0x2, 0x2, 0x2, 0xb82, 0xb83, 
-       0x7, 0x77, 0x2, 0x2, 0xb83, 0xb84, 0x7, 0x6b, 0x2, 0x2, 0xb84, 0xb85, 
-       0x7, 0x70, 0x2, 0x2, 0xb85, 0xb86, 0x7, 0x76, 0x2, 0x2, 0xb86, 0xb87, 
-       0x7, 0x34, 0x2, 0x2, 0xb87, 0xb88, 0x7, 0x7a, 0x2, 0x2, 0xb88, 0xb89, 
-       0x7, 0x34, 0x2, 0x2, 0xb89, 0x1b4, 0x3, 0x2, 0x2, 0x2, 0xb8a, 0xb8b, 
-       0x7, 0x77, 0x2, 0x2, 0xb8b, 0xb8c, 0x7, 0x6b, 0x2, 0x2, 0xb8c, 0xb8d, 
-       0x7, 0x70, 0x2, 0x2, 0xb8d, 0xb8e, 0x7, 0x76, 0x2, 0x2, 0xb8e, 0xb8f, 
-       0x7, 0x34, 0x2, 0x2, 0xb8f, 0xb90, 0x7, 0x7a, 0x2, 0x2, 0xb90, 0xb91, 
-       0x7, 0x35, 0x2, 0x2, 0xb91, 0x1b6, 0x3, 0x2, 0x2, 0x2, 0xb92, 0xb93, 
-       0x7, 0x77, 0x2, 0x2, 0xb93, 0xb94, 0x7, 0x6b, 0x2, 0x2, 0xb94, 0xb95, 
-       0x7, 0x70, 0x2, 0x2, 0xb95, 0xb96, 0x7, 0x76, 0x2, 0x2, 0xb96, 0xb97, 
-       0x7, 0x34, 0x2, 0x2, 0xb97, 0xb98, 0x7, 0x7a, 0x2, 0x2, 0xb98, 0xb99, 
-       0x7, 0x36, 0x2, 0x2, 0xb99, 0x1b8, 0x3, 0x2, 0x2, 0x2, 0xb9a, 0xb9b, 
-       0x7, 0x77, 0x2, 0x2, 0xb9b, 0xb9c, 0x7, 0x6b, 0x2, 0x2, 0xb9c, 0xb9d, 
-       0x7, 0x70, 0x2, 0x2, 0xb9d, 0xb9e, 0x7, 0x76, 0x2, 0x2, 0xb9e, 0xb9f, 
-       0x7, 0x35, 0x2, 0x2, 0xb9f, 0xba0, 0x7, 0x7a, 0x2, 0x2, 0xba0, 0xba1, 
-       0x7, 0x33, 0x2, 0x2, 0xba1, 0x1ba, 0x3, 0x2, 0x2, 0x2, 0xba2, 0xba3, 
-       0x7, 0x77, 0x2, 0x2, 0xba3, 0xba4, 0x7, 0x6b, 0x2, 0x2, 0xba4, 0xba5, 
-       0x7, 0x70, 0x2, 0x2, 0xba5, 0xba6, 0x7, 0x76, 0x2, 0x2, 0xba6, 0xba7, 
-       0x7, 0x35, 0x2, 0x2, 0xba7, 0xba8, 0x7, 0x7a, 0x2, 0x2, 0xba8, 0xba9, 
-       0x7, 0x34, 0x2, 0x2, 0xba9, 0x1bc, 0x3, 0x2, 0x2, 0x2, 0xbaa, 0xbab, 
-       0x7, 0x77, 0x2, 0x2, 0xbab, 0xbac, 0x7, 0x6b, 0x2, 0x2, 0xbac, 0xbad, 
-       0x7, 0x70, 0x2, 0x2, 0xbad, 0xbae, 0x7, 0x76, 0x2, 0x2, 0xbae, 0xbaf, 
-       0x7, 0x35, 0x2, 0x2, 0xbaf, 0xbb0, 0x7, 0x7a, 0x2, 0x2, 0xbb0, 0xbb1, 
-       0x7, 0x35, 0x2, 0x2, 0xbb1, 0x1be, 0x3, 0x2, 0x2, 0x2, 0xbb2, 0xbb3, 
-       0x7, 0x77, 0x2, 0x2, 0xbb3, 0xbb4, 0x7, 0x6b, 0x2, 0x2, 0xbb4, 0xbb5, 
-       0x7, 0x70, 0x2, 0x2, 0xbb5, 0xbb6, 0x7, 0x76, 0x2, 0x2, 0xbb6, 0xbb7, 
-       0x7, 0x35, 0x2, 0x2, 0xbb7, 0xbb8, 0x7, 0x7a, 0x2, 0x2, 0xbb8, 0xbb9, 
-       0x7, 0x36, 0x2, 0x2, 0xbb9, 0x1c0, 0x3, 0x2, 0x2, 0x2, 0xbba, 0xbbb, 
-       0x7, 0x77, 0x2, 0x2, 0xbbb, 0xbbc, 0x7, 0x6b, 0x2, 0x2, 0xbbc, 0xbbd, 
-       0x7, 0x70, 0x2, 0x2, 0xbbd, 0xbbe, 0x7, 0x76, 0x2, 0x2, 0xbbe, 0xbbf, 
-       0x7, 0x36, 0x2, 0x2, 0xbbf, 0xbc0, 0x7, 0x7a, 0x2, 0x2, 0xbc0, 0xbc1, 
-       0x7, 0x33, 0x2, 0x2, 0xbc1, 0x1c2, 0x3, 0x2, 0x2, 0x2, 0xbc2, 0xbc3, 
-       0x7, 0x77, 0x2, 0x2, 0xbc3, 0xbc4, 0x7, 0x6b, 0x2, 0x2, 0xbc4, 0xbc5, 
-       0x7, 0x70, 0x2, 0x2, 0xbc5, 0xbc6, 0x7, 0x76, 0x2, 0x2, 0xbc6, 0xbc7, 
-       0x7, 0x36, 0x2, 0x2, 0xbc7, 0xbc8, 0x7, 0x7a, 0x2, 0x2, 0xbc8, 0xbc9, 
-       0x7, 0x34, 0x2, 0x2, 0xbc9, 0x1c4, 0x3, 0x2, 0x2, 0x2, 0xbca, 0xbcb, 
-       0x7, 0x77, 0x2, 0x2, 0xbcb, 0xbcc, 0x7, 0x6b, 0x2, 0x2, 0xbcc, 0xbcd, 
-       0x7, 0x70, 0x2, 0x2, 0xbcd, 0xbce, 0x7, 0x76, 0x2, 0x2, 0xbce, 0xbcf, 
-       0x7, 0x36, 0x2, 0x2, 0xbcf, 0xbd0, 0x7, 0x7a, 0x2, 0x2, 0xbd0, 0xbd1, 
-       0x7, 0x35, 0x2, 0x2, 0xbd1, 0x1c6, 0x3, 0x2, 0x2, 0x2, 0xbd2, 0xbd3, 
-       0x7, 0x77, 0x2, 0x2, 0xbd3, 0xbd4, 0x7, 0x6b, 0x2, 0x2, 0xbd4, 0xbd5, 
-       0x7, 0x70, 0x2, 0x2, 0xbd5, 0xbd6, 0x7, 0x76, 0x2, 0x2, 0xbd6, 0xbd7, 
-       0x7, 0x36, 0x2, 0x2, 0xbd7, 0xbd8, 0x7, 0x7a, 0x2, 0x2, 0xbd8, 0xbd9, 
-       0x7, 0x36, 0x2, 0x2, 0xbd9, 0x1c8, 0x3, 0x2, 0x2, 0x2, 0xbda, 0xbdb, 
-       0x7, 0x66, 0x2, 0x2, 0xbdb, 0xbdc, 0x7, 0x79, 0x2, 0x2, 0xbdc, 0xbdd, 
-       0x7, 0x71, 0x2, 0x2, 0xbdd, 0xbde, 0x7, 0x74, 0x2, 0x2, 0xbde, 0xbdf, 
-       0x7, 0x66, 0x2, 0x2, 0xbdf, 0x1ca, 0x3, 0x2, 0x2, 0x2, 0xbe0, 0xbe1, 
-       0x7, 0x66, 0x2, 0x2, 0xbe1, 0xbe2, 0x7, 0x79, 0x2, 0x2, 0xbe2, 0xbe3, 
-       0x7, 0x71, 0x2, 0x2, 0xbe3, 0xbe4, 0x7, 0x74, 0x2, 0x2, 0xbe4, 0xbe5, 
-       0x7, 0x66, 0x2, 0x2, 0xbe5, 0xbe6, 0x7, 0x33, 0x2, 0x2, 0xbe6, 0x1cc, 
-       0x3, 0x2, 0x2, 0x2, 0xbe7, 0xbe8, 0x7, 0x66, 0x2, 0x2, 0xbe8, 0xbe9, 
-       0x7, 0x79, 0x2, 0x2, 0xbe9, 0xbea, 0x7, 0x71, 0x2, 0x2, 0xbea, 0xbeb, 
-       0x7, 0x74, 0x2, 0x2, 0xbeb, 0xbec, 0x7, 0x66, 0x2, 0x2, 0xbec, 0xbed, 
-       0x7, 0x34, 0x2, 0x2, 0xbed, 0x1ce, 0x3, 0x2, 0x2, 0x2, 0xbee, 0xbef, 
-       0x7, 0x66, 0x2, 0x2, 0xbef, 0xbf0, 0x7, 0x79, 0x2, 0x2, 0xbf0, 0xbf1, 
-       0x7, 0x71, 0x2, 0x2, 0xbf1, 0xbf2, 0x7, 0x74, 0x2, 0x2, 0xbf2, 0xbf3, 
-       0x7, 0x66, 0x2, 0x2, 0xbf3, 0xbf4, 0x7, 0x35, 0x2, 0x2, 0xbf4, 0x1d0, 
-       0x3, 0x2, 0x2, 0x2, 0xbf5, 0xbf6, 0x7, 0x66, 0x2, 0x2, 0xbf6, 0xbf7, 
-       0x7, 0x79, 0x2, 0x2, 0xbf7, 0xbf8, 0x7, 0x71, 0x2, 0x2, 0xbf8, 0xbf9, 
-       0x7, 0x74, 0x2, 0x2, 0xbf9, 0xbfa, 0x7, 0x66, 0x2, 0x2, 0xbfa, 0xbfb, 
-       0x7, 0x36, 0x2, 0x2, 0xbfb, 0x1d2, 0x3, 0x2, 0x2, 0x2, 0xbfc, 0xbfd, 
-       0x7, 0x66, 0x2, 0x2, 0xbfd, 0xbfe, 0x7, 0x79, 0x2, 0x2, 0xbfe, 0xbff, 
-       0x7, 0x71, 0x2, 0x2, 0xbff, 0xc00, 0x7, 0x74, 0x2, 0x2, 0xc00, 0xc01, 
-       0x7, 0x66, 0x2, 0x2, 0xc01, 0xc02, 0x7, 0x33, 0x2, 0x2, 0xc02, 0xc03, 
-       0x7, 0x7a, 0x2, 0x2, 0xc03, 0xc04, 0x7, 0x33, 0x2, 0x2, 0xc04, 0x1d4, 
-       0x3, 0x2, 0x2, 0x2, 0xc05, 0xc06, 0x7, 0x66, 0x2, 0x2, 0xc06, 0xc07, 
-       0x7, 0x79, 0x2, 0x2, 0xc07, 0xc08, 0x7, 0x71, 0x2, 0x2, 0xc08, 0xc09, 
-       0x7, 0x74, 0x2, 0x2, 0xc09, 0xc0a, 0x7, 0x66, 0x2, 0x2, 0xc0a, 0xc0b, 
-       0x7, 0x33, 0x2, 0x2, 0xc0b, 0xc0c, 0x7, 0x7a, 0x2, 0x2, 0xc0c, 0xc0d, 
-       0x7, 0x34, 0x2, 0x2, 0xc0d, 0x1d6, 0x3, 0x2, 0x2, 0x2, 0xc0e, 0xc0f, 
-       0x7, 0x66, 0x2, 0x2, 0xc0f, 0xc10, 0x7, 0x79, 0x2, 0x2, 0xc10, 0xc11, 
-       0x7, 0x71, 0x2, 0x2, 0xc11, 0xc12, 0x7, 0x74, 0x2, 0x2, 0xc12, 0xc13, 
-       0x7, 0x66, 0x2, 0x2, 0xc13, 0xc14, 0x7, 0x33, 0x2, 0x2, 0xc14, 0xc15, 
-       0x7, 0x7a, 0x2, 0x2, 0xc15, 0xc16, 0x7, 0x35, 0x2, 0x2, 0xc16, 0x1d8, 
-       0x3, 0x2, 0x2, 0x2, 0xc17, 0xc18, 0x7, 0x66, 0x2, 0x2, 0xc18, 0xc19, 
-       0x7, 0x79, 0x2, 0x2, 0xc19, 0xc1a, 0x7, 0x71, 0x2, 0x2, 0xc1a, 0xc1b, 
-       0x7, 0x74, 0x2, 0x2, 0xc1b, 0xc1c, 0x7, 0x66, 0x2, 0x2, 0xc1c, 0xc1d, 
-       0x7, 0x33, 0x2, 0x2, 0xc1d, 0xc1e, 0x7, 0x7a, 0x2, 0x2, 0xc1e, 0xc1f, 
-       0x7, 0x36, 0x2, 0x2, 0xc1f, 0x1da, 0x3, 0x2, 0x2, 0x2, 0xc20, 0xc21, 
-       0x7, 0x66, 0x2, 0x2, 0xc21, 0xc22, 0x7, 0x79, 0x2, 0x2, 0xc22, 0xc23, 
-       0x7, 0x71, 0x2, 0x2, 0xc23, 0xc24, 0x7, 0x74, 0x2, 0x2, 0xc24, 0xc25, 
-       0x7, 0x66, 0x2, 0x2, 0xc25, 0xc26, 0x7, 0x34, 0x2, 0x2, 0xc26, 0xc27, 
-       0x7, 0x7a, 0x2, 0x2, 0xc27, 0xc28, 0x7, 0x33, 0x2, 0x2, 0xc28, 0x1dc, 
-       0x3, 0x2, 0x2, 0x2, 0xc29, 0xc2a, 0x7, 0x66, 0x2, 0x2, 0xc2a, 0xc2b, 
-       0x7, 0x79, 0x2, 0x2, 0xc2b, 0xc2c, 0x7, 0x71, 0x2, 0x2, 0xc2c, 0xc2d, 
-       0x7, 0x74, 0x2, 0x2, 0xc2d, 0xc2e, 0x7, 0x66, 0x2, 0x2, 0xc2e, 0xc2f, 
-       0x7, 0x34, 0x2, 0x2, 0xc2f, 0xc30, 0x7, 0x7a, 0x2, 0x2, 0xc30, 0xc31, 
-       0x7, 0x34, 0x2, 0x2, 0xc31, 0x1de, 0x3, 0x2, 0x2, 0x2, 0xc32, 0xc33, 
-       0x7, 0x66, 0x2, 0x2, 0xc33, 0xc34, 0x7, 0x79, 0x2, 0x2, 0xc34, 0xc35, 
-       0x7, 0x71, 0x2, 0x2, 0xc35, 0xc36, 0x7, 0x74, 0x2, 0x2, 0xc36, 0xc37, 
-       0x7, 0x66, 0x2, 0x2, 0xc37, 0xc38, 0x7, 0x34, 0x2, 0x2, 0xc38, 0xc39, 
-       0x7, 0x7a, 0x2, 0x2, 0xc39, 0xc3a, 0x7, 0x35, 0x2, 0x2, 0xc3a, 0x1e0, 
-       0x3, 0x2, 0x2, 0x2, 0xc3b, 0xc3c, 0x7, 0x66, 0x2, 0x2, 0xc3c, 0xc3d, 
-       0x7, 0x79, 0x2, 0x2, 0xc3d, 0xc3e, 0x7, 0x71, 0x2, 0x2, 0xc3e, 0xc3f, 
-       0x7, 0x74, 0x2, 0x2, 0xc3f, 0xc40, 0x7, 0x66, 0x2, 0x2, 0xc40, 0xc41, 
-       0x7, 0x34, 0x2, 0x2, 0xc41, 0xc42, 0x7, 0x7a, 0x2, 0x2, 0xc42, 0xc43, 
-       0x7, 0x36, 0x2, 0x2, 0xc43, 0x1e2, 0x3, 0x2, 0x2, 0x2, 0xc44, 0xc45, 
-       0x7, 0x66, 0x2, 0x2, 0xc45, 0xc46, 0x7, 0x79, 0x2, 0x2, 0xc46, 0xc47, 
-       0x7, 0x71, 0x2, 0x2, 0xc47, 0xc48, 0x7, 0x74, 0x2, 0x2, 0xc48, 0xc49, 
-       0x7, 0x66, 0x2, 0x2, 0xc49, 0xc4a, 0x7, 0x35, 0x2, 0x2, 0xc4a, 0xc4b, 
-       0x7, 0x7a, 0x2, 0x2, 0xc4b, 0xc4c, 0x7, 0x33, 0x2, 0x2, 0xc4c, 0x1e4, 
-       0x3, 0x2, 0x2, 0x2, 0xc4d, 0xc4e, 0x7, 0x66, 0x2, 0x2, 0xc4e, 0xc4f, 
-       0x7, 0x79, 0x2, 0x2, 0xc4f, 0xc50, 0x7, 0x71, 0x2, 0x2, 0xc50, 0xc51, 
-       0x7, 0x74, 0x2, 0x2, 0xc51, 0xc52, 0x7, 0x66, 0x2, 0x2, 0xc52, 0xc53, 
-       0x7, 0x35, 0x2, 0x2, 0xc53, 0xc54, 0x7, 0x7a, 0x2, 0x2, 0xc54, 0xc55, 
-       0x7, 0x34, 0x2, 0x2, 0xc55, 0x1e6, 0x3, 0x2, 0x2, 0x2, 0xc56, 0xc57, 
-       0x7, 0x66, 0x2, 0x2, 0xc57, 0xc58, 0x7, 0x79, 0x2, 0x2, 0xc58, 0xc59, 
-       0x7, 0x71, 0x2, 0x2, 0xc59, 0xc5a, 0x7, 0x74, 0x2, 0x2, 0xc5a, 0xc5b, 
-       0x7, 0x66, 0x2, 0x2, 0xc5b, 0xc5c, 0x7, 0x35, 0x2, 0x2, 0xc5c, 0xc5d, 
-       0x7, 0x7a, 0x2, 0x2, 0xc5d, 0xc5e, 0x7, 0x35, 0x2, 0x2, 0xc5e, 0x1e8, 
-       0x3, 0x2, 0x2, 0x2, 0xc5f, 0xc60, 0x7, 0x66, 0x2, 0x2, 0xc60, 0xc61, 
-       0x7, 0x79, 0x2, 0x2, 0xc61, 0xc62, 0x7, 0x71, 0x2, 0x2, 0xc62, 0xc63, 
-       0x7, 0x74, 0x2, 0x2, 0xc63, 0xc64, 0x7, 0x66, 0x2, 0x2, 0xc64, 0xc65, 
-       0x7, 0x35, 0x2, 0x2, 0xc65, 0xc66, 0x7, 0x7a, 0x2, 0x2, 0xc66, 0xc67, 
-       0x7, 0x36, 0x2, 0x2, 0xc67, 0x1ea, 0x3, 0x2, 0x2, 0x2, 0xc68, 0xc69, 
-       0x7, 0x66, 0x2, 0x2, 0xc69, 0xc6a, 0x7, 0x79, 0x2, 0x2, 0xc6a, 0xc6b, 
-       0x7, 0x71, 0x2, 0x2, 0xc6b, 0xc6c, 0x7, 0x74, 0x2, 0x2, 0xc6c, 0xc6d, 
-       0x7, 0x66, 0x2, 0x2, 0xc6d, 0xc6e, 0x7, 0x36, 0x2, 0x2, 0xc6e, 0xc6f, 
-       0x7, 0x7a, 0x2, 0x2, 0xc6f, 0xc70, 0x7, 0x33, 0x2, 0x2, 0xc70, 0x1ec, 
-       0x3, 0x2, 0x2, 0x2, 0xc71, 0xc72, 0x7, 0x66, 0x2, 0x2, 0xc72, 0xc73, 
-       0x7, 0x79, 0x2, 0x2, 0xc73, 0xc74, 0x7, 0x71, 0x2, 0x2, 0xc74, 0xc75, 
-       0x7, 0x74, 0x2, 0x2, 0xc75, 0xc76, 0x7, 0x66, 0x2, 0x2, 0xc76, 0xc77, 
-       0x7, 0x36, 0x2, 0x2, 0xc77, 0xc78, 0x7, 0x7a, 0x2, 0x2, 0xc78, 0xc79, 
-       0x7, 0x34, 0x2, 0x2, 0xc79, 0x1ee, 0x3, 0x2, 0x2, 0x2, 0xc7a, 0xc7b, 
-       0x7, 0x66, 0x2, 0x2, 0xc7b, 0xc7c, 0x7, 0x79, 0x2, 0x2, 0xc7c, 0xc7d, 
-       0x7, 0x71, 0x2, 0x2, 0xc7d, 0xc7e, 0x7, 0x74, 0x2, 0x2, 0xc7e, 0xc7f, 
-       0x7, 0x66, 0x2, 0x2, 0xc7f, 0xc80, 0x7, 0x36, 0x2, 0x2, 0xc80, 0xc81, 
-       0x7, 0x7a, 0x2, 0x2, 0xc81, 0xc82, 0x7, 0x35, 0x2, 0x2, 0xc82, 0x1f0, 
-       0x3, 0x2, 0x2, 0x2, 0xc83, 0xc84, 0x7, 0x66, 0x2, 0x2, 0xc84, 0xc85, 
-       0x7, 0x79, 0x2, 0x2, 0xc85, 0xc86, 0x7, 0x71, 0x2, 0x2, 0xc86, 0xc87, 
-       0x7, 0x74, 0x2, 0x2, 0xc87, 0xc88, 0x7, 0x66, 0x2, 0x2, 0xc88, 0xc89, 
-       0x7, 0x36, 0x2, 0x2, 0xc89, 0xc8a, 0x7, 0x7a, 0x2, 0x2, 0xc8a, 0xc8b, 
-       0x7, 0x36, 0x2, 0x2, 0xc8b, 0x1f2, 0x3, 0x2, 0x2, 0x2, 0xc8c, 0xc8d, 
-       0x7, 0x78, 0x2, 0x2, 0xc8d, 0xc8e, 0x7, 0x67, 0x2, 0x2, 0xc8e, 0xc8f, 
-       0x7, 0x65, 0x2, 0x2, 0xc8f, 0xc90, 0x7, 0x76, 0x2, 0x2, 0xc90, 0xc91, 
-       0x7, 0x71, 0x2, 0x2, 0xc91, 0xc92, 0x7, 0x74, 0x2, 0x2, 0xc92, 0x1f4, 
-       0x3, 0x2, 0x2, 0x2, 0xc93, 0xc94, 0x7, 0x78, 0x2, 0x2, 0xc94, 0xc95, 
-       0x7, 0x71, 0x2, 0x2, 0xc95, 0xc96, 0x7, 0x6e, 0x2, 0x2, 0xc96, 0xc97, 
-       0x7, 0x63, 0x2, 0x2, 0xc97, 0xc98, 0x7, 0x76, 0x2, 0x2, 0xc98, 0xc99, 
-       0x7, 0x6b, 0x2, 0x2, 0xc99, 0xc9a, 0x7, 0x6e, 0x2, 0x2, 0xc9a, 0xc9b, 
-       0x7, 0x67, 0x2, 0x2, 0xc9b, 0x1f6, 0x3, 0x2, 0x2, 0x2, 0xc9c, 0xc9d, 
-       0x7, 0x78, 0x2, 0x2, 0xc9d, 0xc9e, 0x7, 0x71, 0x2, 0x2, 0xc9e, 0xc9f, 
-       0x7, 0x6b, 0x2, 0x2, 0xc9f, 0xca0, 0x7, 0x66, 0x2, 0x2, 0xca0, 0x1f8, 
-       0x3, 0x2, 0x2, 0x2, 0xca1, 0xca2, 0x7, 0x79, 0x2, 0x2, 0xca2, 0xca3, 
-       0x7, 0x6a, 0x2, 0x2, 0xca3, 0xca4, 0x7, 0x6b, 0x2, 0x2, 0xca4, 0xca5, 
-       0x7, 0x6e, 0x2, 0x2, 0xca5, 0xca6, 0x7, 0x67, 0x2, 0x2, 0xca6, 0x1fa, 
-       0x3, 0x2, 0x2, 0x2, 0xca7, 0xca8, 0x7, 0x55, 0x2, 0x2, 0xca8, 0xca9, 
-       0x7, 0x76, 0x2, 0x2, 0xca9, 0xcaa, 0x7, 0x63, 0x2, 0x2, 0xcaa, 0xcab, 
-       0x7, 0x76, 0x2, 0x2, 0xcab, 0xcac, 0x7, 0x67, 0x2, 0x2, 0xcac, 0xcad, 
-       0x7, 0x51, 0x2, 0x2, 0xcad, 0xcae, 0x7, 0x64, 0x2, 0x2, 0xcae, 0xcaf, 
-       0x7, 0x6c, 0x2, 0x2, 0xcaf, 0xcb0, 0x7, 0x67, 0x2, 0x2, 0xcb0, 0xcb1, 
-       0x7, 0x65, 0x2, 0x2, 0xcb1, 0xcb2, 0x7, 0x76, 0x2, 0x2, 0xcb2, 0xcb3, 
-       0x7, 0x45, 0x2, 0x2, 0xcb3, 0xcb4, 0x7, 0x71, 0x2, 0x2, 0xcb4, 0xcb5, 
-       0x7, 0x70, 0x2, 0x2, 0xcb5, 0xcb6, 0x7, 0x68, 0x2, 0x2, 0xcb6, 0xcb7, 
-       0x7, 0x6b, 0x2, 0x2, 0xcb7, 0xcb8, 0x7, 0x69, 0x2, 0x2, 0xcb8, 0x1fc, 
-       0x3, 0x2, 0x2, 0x2, 0xcb9, 0xcba, 0x7, 0x4e, 0x2, 0x2, 0xcba, 0xcbb, 
-       0x7, 0x71, 0x2, 0x2, 0xcbb, 0xcbc, 0x7, 0x65, 0x2, 0x2, 0xcbc, 0xcbd, 
-       0x7, 0x63, 0x2, 0x2, 0xcbd, 0xcbe, 0x7, 0x6e, 0x2, 0x2, 0xcbe, 0xcbf, 
-       0x7, 0x54, 0x2, 0x2, 0xcbf, 0xcc0, 0x7, 0x71, 0x2, 0x2, 0xcc0, 0xcc1, 
-       0x7, 0x71, 0x2, 0x2, 0xcc1, 0xcc2, 0x7, 0x76, 0x2, 0x2, 0xcc2, 0xcc3, 
-       0x7, 0x55, 0x2, 0x2, 0xcc3, 0xcc4, 0x7, 0x6b, 0x2, 0x2, 0xcc4, 0xcc5, 
-       0x7, 0x69, 0x2, 0x2, 0xcc5, 0xcc6, 0x7, 0x70, 0x2, 0x2, 0xcc6, 0xcc7, 
-       0x7, 0x63, 0x2, 0x2, 0xcc7, 0xcc8, 0x7, 0x76, 0x2, 0x2, 0xcc8, 0xcc9, 
-       0x7, 0x77, 0x2, 0x2, 0xcc9, 0xcca, 0x7, 0x74, 0x2, 0x2, 0xcca, 0xccb, 
-       0x7, 0x67, 0x2, 0x2, 0xccb, 0x1fe, 0x3, 0x2, 0x2, 0x2, 0xccc, 0xccd, 
-       0x7, 0x49, 0x2, 0x2, 0xccd, 0xcce, 0x7, 0x6e, 0x2, 0x2, 0xcce, 0xccf, 
-       0x7, 0x71, 0x2, 0x2, 0xccf, 0xcd0, 0x7, 0x64, 0x2, 0x2, 0xcd0, 0xcd1, 
-       0x7, 0x63, 0x2, 0x2, 0xcd1, 0xcd2, 0x7, 0x6e, 0x2, 0x2, 0xcd2, 0xcd3, 
-       0x7, 0x54, 0x2, 0x2, 0xcd3, 0xcd4, 0x7, 0x71, 0x2, 0x2, 0xcd4, 0xcd5, 
-       0x7, 0x71, 0x2, 0x2, 0xcd5, 0xcd6, 0x7, 0x76, 0x2, 0x2, 0xcd6, 0xcd7, 
-       0x7, 0x55, 0x2, 0x2, 0xcd7, 0xcd8, 0x7, 0x6b, 0x2, 0x2, 0xcd8, 0xcd9, 
-       0x7, 0x69, 0x2, 0x2, 0xcd9, 0xcda, 0x7, 0x70, 0x2, 0x2, 0xcda, 0xcdb, 
-       0x7, 0x63, 0x2, 0x2, 0xcdb, 0xcdc, 0x7, 0x76, 0x2, 0x2, 0xcdc, 0xcdd, 
-       0x7, 0x77, 0x2, 0x2, 0xcdd, 0xcde, 0x7, 0x74, 0x2, 0x2, 0xcde, 0xcdf, 
-       0x7, 0x67, 0x2, 0x2, 0xcdf, 0x200, 0x3, 0x2, 0x2, 0x2, 0xce0, 0xce1, 
-       0x7, 0x55, 0x2, 0x2, 0xce1, 0xce2, 0x7, 0x77, 0x2, 0x2, 0xce2, 0xce3, 
-       0x7, 0x64, 0x2, 0x2, 0xce3, 0xce4, 0x7, 0x71, 0x2, 0x2, 0xce4, 0xce5, 
-       0x7, 0x64, 0x2, 0x2, 0xce5, 0xce6, 0x7, 0x6c, 0x2, 0x2, 0xce6, 0xce7, 
-       0x7, 0x67, 0x2, 0x2, 0xce7, 0xce8, 0x7, 0x65, 0x2, 0x2, 0xce8, 0xce9, 
-       0x7, 0x76, 0x2, 0x2, 0xce9, 0xcea, 0x7, 0x56, 0x2, 0x2, 0xcea, 0xceb, 
-       0x7, 0x71, 0x2, 0x2, 0xceb, 0xcec, 0x7, 0x47, 0x2, 0x2, 0xcec, 0xced, 
-       0x7, 0x7a, 0x2, 0x2, 0xced, 0xcee, 0x7, 0x72, 0x2, 0x2, 0xcee, 0xcef, 
-       0x7, 0x71, 0x2, 0x2, 0xcef, 0xcf0, 0x7, 0x74, 0x2, 0x2, 0xcf0, 0xcf1, 
-       0x7, 0x76, 0x2, 0x2, 0xcf1, 0xcf2, 0x7, 0x75, 0x2, 0x2, 0xcf2, 0xcf3, 
-       0x7, 0x43, 0x2, 0x2, 0xcf3, 0xcf4, 0x7, 0x75, 0x2, 0x2, 0xcf4, 0xcf5, 
-       0x7, 0x75, 0x2, 0x2, 0xcf5, 0xcf6, 0x7, 0x71, 0x2, 0x2, 0xcf6, 0xcf7, 
-       0x7, 0x65, 0x2, 0x2, 0xcf7, 0xcf8, 0x7, 0x6b, 0x2, 0x2, 0xcf8, 0xcf9, 
-       0x7, 0x63, 0x2, 0x2, 0xcf9, 0xcfa, 0x7, 0x76, 0x2, 0x2, 0xcfa, 0xcfb, 
-       0x7, 0x6b, 0x2, 0x2, 0xcfb, 0xcfc, 0x7, 0x71, 0x2, 0x2, 0xcfc, 0xcfd, 
-       0x7, 0x70, 0x2, 0x2, 0xcfd, 0x202, 0x3, 0x2, 0x2, 0x2, 0xcfe, 0xcff, 
-       0x7, 0x54, 0x2, 0x2, 0xcff, 0xd00, 0x7, 0x63, 0x2, 0x2, 0xd00, 0xd01, 
-       0x7, 0x7b, 0x2, 0x2, 0xd01, 0xd02, 0x7, 0x76, 0x2, 0x2, 0xd02, 0xd03, 
-       0x7, 0x74, 0x2, 0x2, 0xd03, 0xd04, 0x7, 0x63, 0x2, 0x2, 0xd04, 0xd05, 
-       0x7, 0x65, 0x2, 0x2, 0xd05, 0xd06, 0x7, 0x6b, 0x2, 0x2, 0xd06, 0xd07, 
-       0x7, 0x70, 0x2, 0x2, 0xd07, 0xd08, 0x7, 0x69, 0x2, 0x2, 0xd08, 0xd09, 
-       0x7, 0x55, 0x2, 0x2, 0xd09, 0xd0a, 0x7, 0x6a, 0x2, 0x2, 0xd0a, 0xd0b, 
-       0x7, 0x63, 0x2, 0x2, 0xd0b, 0xd0c, 0x7, 0x66, 0x2, 0x2, 0xd0c, 0xd0d, 
-       0x7, 0x67, 0x2, 0x2, 0xd0d, 0xd0e, 0x7, 0x74, 0x2, 0x2, 0xd0e, 0xd0f, 
-       0x7, 0x45, 0x2, 0x2, 0xd0f, 0xd10, 0x7, 0x71, 0x2, 0x2, 0xd10, 0xd11, 
-       0x7, 0x70, 0x2, 0x2, 0xd11, 0xd12, 0x7, 0x68, 0x2, 0x2, 0xd12, 0xd13, 
-       0x7, 0x6b, 0x2, 0x2, 0xd13, 0xd14, 0x7, 0x69, 0x2, 0x2, 0xd14, 0x204, 
-       0x3, 0x2, 0x2, 0x2, 0xd15, 0xd16, 0x7, 0x54, 0x2, 0x2, 0xd16, 0xd17, 
-       0x7, 0x63, 0x2, 0x2, 0xd17, 0xd18, 0x7, 0x7b, 0x2, 0x2, 0xd18, 0xd19, 
-       0x7, 0x76, 0x2, 0x2, 0xd19, 0xd1a, 0x7, 0x74, 0x2, 0x2, 0xd1a, 0xd1b, 
-       0x7, 0x63, 0x2, 0x2, 0xd1b, 0xd1c, 0x7, 0x65, 0x2, 0x2, 0xd1c, 0xd1d, 
-       0x7, 0x6b, 0x2, 0x2, 0xd1d, 0xd1e, 0x7, 0x70, 0x2, 0x2, 0xd1e, 0xd1f, 
-       0x7, 0x69, 0x2, 0x2, 0xd1f, 0xd20, 0x7, 0x52, 0x2, 0x2, 0xd20, 0xd21, 
-       0x7, 0x6b, 0x2, 0x2, 0xd21, 0xd22, 0x7, 0x72, 0x2, 0x2, 0xd22, 0xd23, 
-       0x7, 0x67, 0x2, 0x2, 0xd23, 0xd24, 0x7, 0x6e, 0x2, 0x2, 0xd24, 0xd25, 
-       0x7, 0x6b, 0x2, 0x2, 0xd25, 0xd26, 0x7, 0x70, 0x2, 0x2, 0xd26, 0xd27, 
-       0x7, 0x67, 0x2, 0x2, 0xd27, 0xd28, 0x7, 0x45, 0x2, 0x2, 0xd28, 0xd29, 
-       0x7, 0x71, 0x2, 0x2, 0xd29, 0xd2a, 0x7, 0x70, 0x2, 0x2, 0xd2a, 0xd2b, 
-       0x7, 0x68, 0x2, 0x2, 0xd2b, 0xd2c, 0x7, 0x6b, 0x2, 0x2, 0xd2c, 0xd2d, 
-       0x7, 0x69, 0x2, 0x2, 0xd2d, 0x206, 0x3, 0x2, 0x2, 0x2, 0xd2e, 0xd2f, 
-       0x7, 0x54, 0x2, 0x2, 0xd2f, 0xd30, 0x7, 0x63, 0x2, 0x2, 0xd30, 0xd31, 
-       0x7, 0x7b, 0x2, 0x2, 0xd31, 0xd32, 0x7, 0x76, 0x2, 0x2, 0xd32, 0xd33, 
-       0x7, 0x74, 0x2, 0x2, 0xd33, 0xd34, 0x7, 0x63, 0x2, 0x2, 0xd34, 0xd35, 
-       0x7, 0x65, 0x2, 0x2, 0xd35, 0xd36, 0x7, 0x6b, 0x2, 0x2, 0xd36, 0xd37, 
-       0x7, 0x70, 0x2, 0x2, 0xd37, 0xd38, 0x7, 0x69, 0x2, 0x2, 0xd38, 0xd39, 
-       0x7, 0x52, 0x2, 0x2, 0xd39, 0xd3a, 0x7, 0x6b, 0x2, 0x2, 0xd3a, 0xd3b, 
-       0x7, 0x72, 0x2, 0x2, 0xd3b, 0xd3c, 0x7, 0x67, 0x2, 0x2, 0xd3c, 0xd3d, 
-       0x7, 0x6e, 0x2, 0x2, 0xd3d, 0xd3e, 0x7, 0x6b, 0x2, 0x2, 0xd3e, 0xd3f, 
-       0x7, 0x70, 0x2, 0x2, 0xd3f, 0xd40, 0x7, 0x67, 0x2, 0x2, 0xd40, 0xd41, 
-       0x7, 0x45, 0x2, 0x2, 0xd41, 0xd42, 0x7, 0x71, 0x2, 0x2, 0xd42, 0xd43, 
-       0x7, 0x70, 0x2, 0x2, 0xd43, 0xd44, 0x7, 0x68, 0x2, 0x2, 0xd44, 0xd45, 
-       0x7, 0x6b, 0x2, 0x2, 0xd45, 0xd46, 0x7, 0x69, 0x2, 0x2, 0xd46, 0xd47, 
-       0x7, 0x33, 0x2, 0x2, 0xd47, 0x208, 0x3, 0x2, 0x2, 0x2, 0xd48, 0xd49, 
-       0x7, 0x56, 0x2, 0x2, 0xd49, 0xd4a, 0x7, 0x74, 0x2, 0x2, 0xd4a, 0xd4b, 
-       0x7, 0x6b, 0x2, 0x2, 0xd4b, 0xd4c, 0x7, 0x63, 0x2, 0x2, 0xd4c, 0xd4d, 
-       0x7, 0x70, 0x2, 0x2, 0xd4d, 0xd4e, 0x7, 0x69, 0x2, 0x2, 0xd4e, 0xd4f, 
-       0x7, 0x6e, 0x2, 0x2, 0xd4f, 0xd50, 0x7, 0x67, 0x2, 0x2, 0xd50, 0xd51, 
-       0x7, 0x4a, 0x2, 0x2, 0xd51, 0xd52, 0x7, 0x6b, 0x2, 0x2, 0xd52, 0xd53, 
-       0x7, 0x76, 0x2, 0x2, 0xd53, 0xd54, 0x7, 0x49, 0x2, 0x2, 0xd54, 0xd55, 
-       0x7, 0x74, 0x2, 0x2, 0xd55, 0xd56, 0x7, 0x71, 0x2, 0x2, 0xd56, 0xd57, 
-       0x7, 0x77, 0x2, 0x2, 0xd57, 0xd58, 0x7, 0x72, 0x2, 0x2, 0xd58, 0x20a, 
-       0x3, 0x2, 0x2, 0x2, 0xd59, 0xd5a, 0x7, 0x52, 0x2, 0x2, 0xd5a, 0xd5b, 
-       0x7, 0x74, 0x2, 0x2, 0xd5b, 0xd5c, 0x7, 0x71, 0x2, 0x2, 0xd5c, 0xd5d, 
-       0x7, 0x65, 0x2, 0x2, 0xd5d, 0xd5e, 0x7, 0x67, 0x2, 0x2, 0xd5e, 0xd5f, 
-       0x7, 0x66, 0x2, 0x2, 0xd5f, 0xd60, 0x7, 0x77, 0x2, 0x2, 0xd60, 0xd61, 
-       0x7, 0x74, 0x2, 0x2, 0xd61, 0xd62, 0x7, 0x63, 0x2, 0x2, 0xd62, 0xd63, 
-       0x7, 0x6e, 0x2, 0x2, 0xd63, 0xd64, 0x7, 0x52, 0x2, 0x2, 0xd64, 0xd65, 
-       0x7, 0x74, 0x2, 0x2, 0xd65, 0xd66, 0x7, 0x6b, 0x2, 0x2, 0xd66, 0xd67, 
-       0x7, 0x6f, 0x2, 0x2, 0xd67, 0xd68, 0x7, 0x6b, 0x2, 0x2, 0xd68, 0xd69, 
-       0x7, 0x76, 0x2, 0x2, 0xd69, 0xd6a, 0x7, 0x6b, 0x2, 0x2, 0xd6a, 0xd6b, 
-       0x7, 0x78, 0x2, 0x2, 0xd6b, 0xd6c, 0x7, 0x67, 0x2, 0x2, 0xd6c, 0xd6d, 
-       0x7, 0x4a, 0x2, 0x2, 0xd6d, 0xd6e, 0x7, 0x6b, 0x2, 0x2, 0xd6e, 0xd6f, 
-       0x7, 0x76, 0x2, 0x2, 0xd6f, 0xd70, 0x7, 0x49, 0x2, 0x2, 0xd70, 0xd71, 
-       0x7, 0x74, 0x2, 0x2, 0xd71, 0xd72, 0x7, 0x71, 0x2, 0x2, 0xd72, 0xd73, 
-       0x7, 0x77, 0x2, 0x2, 0xd73, 0xd74, 0x7, 0x72, 0x2, 0x2, 0xd74, 0x20c, 
-       0x3, 0x2, 0x2, 0x2, 0xd75, 0xd76, 0x7, 0x43, 0x2, 0x2, 0xd76, 0xd77, 
-       0x7, 0x66, 0x2, 0x2, 0xd77, 0xd78, 0x7, 0x66, 0x2, 0x2, 0xd78, 0xd79, 
-       0x7, 0x74, 0x2, 0x2, 0xd79, 0xd7a, 0x7, 0x67, 0x2, 0x2, 0xd7a, 0xd7b, 
-       0x7, 0x75, 0x2, 0x2, 0xd7b, 0xd7c, 0x7, 0x75, 0x2, 0x2, 0xd7c, 0xd7d, 
-       0x7, 0x57, 0x2, 0x2, 0xd7d, 0x20e, 0x3, 0x2, 0x2, 0x2, 0xd7e, 0xd7f, 
-       0x7, 0x43, 0x2, 0x2, 0xd7f, 0xd80, 0x7, 0x66, 0x2, 0x2, 0xd80, 0xd81, 
-       0x7, 0x66, 0x2, 0x2, 0xd81, 0xd82, 0x7, 0x74, 0x2, 0x2, 0xd82, 0xd83, 
-       0x7, 0x67, 0x2, 0x2, 0xd83, 0xd84, 0x7, 0x75, 0x2, 0x2, 0xd84, 0xd85, 
-       0x7, 0x75, 0x2, 0x2, 0xd85, 0xd86, 0x7, 0x58, 0x2, 0x2, 0xd86, 0x210, 
-       0x3, 0x2, 0x2, 0x2, 0xd87, 0xd88, 0x7, 0x43, 0x2, 0x2, 0xd88, 0xd89, 
-       0x7, 0x66, 0x2, 0x2, 0xd89, 0xd8a, 0x7, 0x66, 0x2, 0x2, 0xd8a, 0xd8b, 
-       0x7, 0x74, 0x2, 0x2, 0xd8b, 0xd8c, 0x7, 0x67, 0x2, 0x2, 0xd8c, 0xd8d, 
-       0x7, 0x75, 0x2, 0x2, 0xd8d, 0xd8e, 0x7, 0x75, 0x2, 0x2, 0xd8e, 0xd8f, 
-       0x7, 0x59, 0x2, 0x2, 0xd8f, 0x212, 0x3, 0x2, 0x2, 0x2, 0xd90, 0xd91, 
-       0x7, 0x44, 0x2, 0x2, 0xd91, 0xd92, 0x7, 0x71, 0x2, 0x2, 0xd92, 0xd93, 
-       0x7, 0x74, 0x2, 0x2, 0xd93, 0xd94, 0x7, 0x66, 0x2, 0x2, 0xd94, 0xd95, 
-       0x7, 0x67, 0x2, 0x2, 0xd95, 0xd96, 0x7, 0x74, 0x2, 0x2, 0xd96, 0xd97, 
-       0x7, 0x45, 0x2, 0x2, 0xd97, 0xd98, 0x7, 0x71, 0x2, 0x2, 0xd98, 0xd99, 
-       0x7, 0x6e, 0x2, 0x2, 0xd99, 0xd9a, 0x7, 0x71, 0x2, 0x2, 0xd9a, 0xd9b, 
-       0x7, 0x74, 0x2, 0x2, 0xd9b, 0x214, 0x3, 0x2, 0x2, 0x2, 0xd9c, 0xd9d, 
-       0x7, 0x4f, 0x2, 0x2, 0xd9d, 0xd9e, 0x7, 0x6b, 0x2, 0x2, 0xd9e, 0xd9f, 
-       0x7, 0x70, 0x2, 0x2, 0xd9f, 0xda0, 0x7, 0x48, 0x2, 0x2, 0xda0, 0xda1, 
-       0x7, 0x6b, 0x2, 0x2, 0xda1, 0xda2, 0x7, 0x6e, 0x2, 0x2, 0xda2, 0xda3, 
-       0x7, 0x76, 0x2, 0x2, 0xda3, 0xda4, 0x7, 0x67, 0x2, 0x2, 0xda4, 0xda5, 
-       0x7, 0x74, 0x2, 0x2, 0xda5, 0x216, 0x3, 0x2, 0x2, 0x2, 0xda6, 0xda7, 
-       0x7, 0x4f, 0x2, 0x2, 0xda7, 0xda8, 0x7, 0x63, 0x2, 0x2, 0xda8, 0xda9, 
-       0x7, 0x69, 0x2, 0x2, 0xda9, 0xdaa, 0x7, 0x48, 0x2, 0x2, 0xdaa, 0xdab, 
-       0x7, 0x6b, 0x2, 0x2, 0xdab, 0xdac, 0x7, 0x6e, 0x2, 0x2, 0xdac, 0xdad, 
-       0x7, 0x76, 0x2, 0x2, 0xdad, 0xdae, 0x7, 0x67, 0x2, 0x2, 0xdae, 0xdaf, 
-       0x7, 0x74, 0x2, 0x2, 0xdaf, 0x218, 0x3, 0x2, 0x2, 0x2, 0xdb0, 0xdb1, 
-       0x7, 0x4f, 0x2, 0x2, 0xdb1, 0xdb2, 0x7, 0x6b, 0x2, 0x2, 0xdb2, 0xdb3, 
-       0x7, 0x72, 0x2, 0x2, 0xdb3, 0xdb4, 0x7, 0x48, 0x2, 0x2, 0xdb4, 0xdb5, 
-       0x7, 0x6b, 0x2, 0x2, 0xdb5, 0xdb6, 0x7, 0x6e, 0x2, 0x2, 0xdb6, 0xdb7, 
-       0x7, 0x76, 0x2, 0x2, 0xdb7, 0xdb8, 0x7, 0x67, 0x2, 0x2, 0xdb8, 0xdb9, 
-       0x7, 0x74, 0x2, 0x2, 0xdb9, 0x21a, 0x3, 0x2, 0x2, 0x2, 0xdba, 0xdbb, 
-       0x7, 0x4f, 0x2, 0x2, 0xdbb, 0xdbc, 0x7, 0x63, 0x2, 0x2, 0xdbc, 0xdbd, 
-       0x7, 0x7a, 0x2, 0x2, 0xdbd, 0xdbe, 0x7, 0x43, 0x2, 0x2, 0xdbe, 0xdbf, 
-       0x7, 0x70, 0x2, 0x2, 0xdbf, 0xdc0, 0x7, 0x6b, 0x2, 0x2, 0xdc0, 0xdc1, 
-       0x7, 0x75, 0x2, 0x2, 0xdc1, 0xdc2, 0x7, 0x71, 0x2, 0x2, 0xdc2, 0xdc3, 
-       0x7, 0x76, 0x2, 0x2, 0xdc3, 0xdc4, 0x7, 0x74, 0x2, 0x2, 0xdc4, 0xdc5, 
-       0x7, 0x71, 0x2, 0x2, 0xdc5, 0xdc6, 0x7, 0x72, 0x2, 0x2, 0xdc6, 0xdc7, 
-       0x7, 0x7b, 0x2, 0x2, 0xdc7, 0x21c, 0x3, 0x2, 0x2, 0x2, 0xdc8, 0xdc9, 
-       0x7, 0x4f, 0x2, 0x2, 0xdc9, 0xdca, 0x7, 0x63, 0x2, 0x2, 0xdca, 0xdcb, 
-       0x7, 0x7a, 0x2, 0x2, 0xdcb, 0xdcc, 0x7, 0x4e, 0x2, 0x2, 0xdcc, 0xdcd, 
-       0x7, 0x51, 0x2, 0x2, 0xdcd, 0xdce, 0x7, 0x46, 0x2, 0x2, 0xdce, 0x21e, 
-       0x3, 0x2, 0x2, 0x2, 0xdcf, 0xdd0, 0x7, 0x4f, 0x2, 0x2, 0xdd0, 0xdd1, 
-       0x7, 0x6b, 0x2, 0x2, 0xdd1, 0xdd2, 0x7, 0x70, 0x2, 0x2, 0xdd2, 0xdd3, 
-       0x7, 0x4e, 0x2, 0x2, 0xdd3, 0xdd4, 0x7, 0x51, 0x2, 0x2, 0xdd4, 0xdd5, 
-       0x7, 0x46, 0x2, 0x2, 0xdd5, 0x220, 0x3, 0x2, 0x2, 0x2, 0xdd6, 0xdd7, 
-       0x7, 0x4f, 0x2, 0x2, 0xdd7, 0xdd8, 0x7, 0x6b, 0x2, 0x2, 0xdd8, 0xdd9, 
-       0x7, 0x72, 0x2, 0x2, 0xdd9, 0xdda, 0x7, 0x4e, 0x2, 0x2, 0xdda, 0xddb, 
-       0x7, 0x51, 0x2, 0x2, 0xddb, 0xddc, 0x7, 0x46, 0x2, 0x2, 0xddc, 0xddd, 
-       0x7, 0x44, 0x2, 0x2, 0xddd, 0xdde, 0x7, 0x6b, 0x2, 0x2, 0xdde, 0xddf, 
-       0x7, 0x63, 0x2, 0x2, 0xddf, 0xde0, 0x7, 0x75, 0x2, 0x2, 0xde0, 0x222, 
-       0x3, 0x2, 0x2, 0x2, 0xde1, 0xde2, 0x7, 0x45, 0x2, 0x2, 0xde2, 0xde3, 
-       0x7, 0x71, 0x2, 0x2, 0xde3, 0xde4, 0x7, 0x6f, 0x2, 0x2, 0xde4, 0xde5, 
-       0x7, 0x72, 0x2, 0x2, 0xde5, 0xde6, 0x7, 0x63, 0x2, 0x2, 0xde6, 0xde7, 
-       0x7, 0x74, 0x2, 0x2, 0xde7, 0xde8, 0x7, 0x6b, 0x2, 0x2, 0xde8, 0xde9, 
-       0x7, 0x75, 0x2, 0x2, 0xde9, 0xdea, 0x7, 0x71, 0x2, 0x2, 0xdea, 0xdeb, 
-       0x7, 0x70, 0x2, 0x2, 0xdeb, 0xdec, 0x7, 0x48, 0x2, 0x2, 0xdec, 0xded, 
-       0x7, 0x77, 0x2, 0x2, 0xded, 0xdee, 0x7, 0x70, 0x2, 0x2, 0xdee, 0xdef, 
-       0x7, 0x65, 0x2, 0x2, 0xdef, 0x224, 0x3, 0x2, 0x2, 0x2, 0xdf0, 0xdf1, 
-       0x7, 0x54, 0x2, 0x2, 0xdf1, 0xdf2, 0x7, 0x67, 0x2, 0x2, 0xdf2, 0xdf3, 
-       0x7, 0x66, 0x2, 0x2, 0xdf3, 0xdf4, 0x7, 0x77, 0x2, 0x2, 0xdf4, 0xdf5, 
-       0x7, 0x65, 0x2, 0x2, 0xdf5, 0xdf6, 0x7, 0x76, 0x2, 0x2, 0xdf6, 0xdf7, 
-       0x7, 0x6b, 0x2, 0x2, 0xdf7, 0xdf8, 0x7, 0x71, 0x2, 0x2, 0xdf8, 0xdf9, 
-       0x7, 0x70, 0x2, 0x2, 0xdf9, 0xdfa, 0x7, 0x56, 0x2, 0x2, 0xdfa, 0xdfb, 
-       0x7, 0x7b, 0x2, 0x2, 0xdfb, 0xdfc, 0x7, 0x72, 0x2, 0x2, 0xdfc, 0xdfd, 
-       0x7, 0x67, 0x2, 0x2, 0xdfd, 0x226, 0x3, 0x2, 0x2, 0x2, 0xdfe, 0xdff, 
-       0x7, 0x52, 0x2, 0x2, 0xdff, 0xe00, 0x7, 0x71, 0x2, 0x2, 0xe00, 0xe01, 
-       0x7, 0x6b, 0x2, 0x2, 0xe01, 0xe02, 0x7, 0x70, 0x2, 0x2, 0xe02, 0xe03, 
-       0x7, 0x76, 0x2, 0x2, 0xe03, 0x228, 0x3, 0x2, 0x2, 0x2, 0xe04, 0xe05, 
-       0x7, 0x4e, 0x2, 0x2, 0xe05, 0xe06, 0x7, 0x6b, 0x2, 0x2, 0xe06, 0xe07, 
-       0x7, 0x70, 0x2, 0x2, 0xe07, 0xe08, 0x7, 0x67, 0x2, 0x2, 0xe08, 0xe09, 
-       0x7, 0x63, 0x2, 0x2, 0xe09, 0xe0a, 0x7, 0x74, 0x2, 0x2, 0xe0a, 0x22a, 
-       0x3, 0x2, 0x2, 0x2, 0xe0b, 0xe0c, 0x7, 0x48, 0x2, 0x2, 0xe0c, 0xe0d, 
-       0x7, 0x6b, 0x2, 0x2, 0xe0d, 0xe0e, 0x7, 0x6e, 0x2, 0x2, 0xe0e, 0xe0f, 
-       0x7, 0x76, 0x2, 0x2, 0xe0f, 0xe10, 0x7, 0x67, 0x2, 0x2, 0xe10, 0xe11, 
-       0x7, 0x74, 0x2, 0x2, 0xe11, 0x22c, 0x3, 0x2, 0x2, 0x2, 0xe12, 0xe13, 
-       0x7, 0x45, 0x2, 0x2, 0xe13, 0xe14, 0x7, 0x71, 0x2, 0x2, 0xe14, 0xe15, 
-       0x7, 0x6f, 0x2, 0x2, 0xe15, 0xe16, 0x7, 0x72, 0x2, 0x2, 0xe16, 0xe17, 
-       0x7, 0x63, 0x2, 0x2, 0xe17, 0xe18, 0x7, 0x74, 0x2, 0x2, 0xe18, 0xe19, 
-       0x7, 0x6b, 0x2, 0x2, 0xe19, 0xe1a, 0x7, 0x75, 0x2, 0x2, 0xe1a, 0xe1b, 
-       0x7, 0x71, 0x2, 0x2, 0xe1b, 0xe1c, 0x7, 0x70, 0x2, 0x2, 0xe1c, 0x22e, 
-       0x3, 0x2, 0x2, 0x2, 0xe1d, 0xe1e, 0x7, 0x4f, 0x2, 0x2, 0xe1e, 0xe1f, 
-       0x7, 0x6b, 0x2, 0x2, 0xe1f, 0xe20, 0x7, 0x70, 0x2, 0x2, 0xe20, 0xe21, 
-       0x7, 0x6b, 0x2, 0x2, 0xe21, 0xe22, 0x7, 0x6f, 0x2, 0x2, 0xe22, 0xe23, 
-       0x7, 0x77, 0x2, 0x2, 0xe23, 0xe24, 0x7, 0x6f, 0x2, 0x2, 0xe24, 0x230, 
-       0x3, 0x2, 0x2, 0x2, 0xe25, 0xe26, 0x7, 0x4f, 0x2, 0x2, 0xe26, 0xe27, 
-       0x7, 0x63, 0x2, 0x2, 0xe27, 0xe28, 0x7, 0x7a, 0x2, 0x2, 0xe28, 0xe29, 
-       0x7, 0x6b, 0x2, 0x2, 0xe29, 0xe2a, 0x7, 0x6f, 0x2, 0x2, 0xe2a, 0xe2b, 
-       0x7, 0x77, 0x2, 0x2, 0xe2b, 0xe2c, 0x7, 0x6f, 0x2, 0x2, 0xe2c, 0x232, 
-       0x3, 0x2, 0x2, 0x2, 0xe2d, 0xe2e, 0x7, 0x59, 0x2, 0x2, 0xe2e, 0xe2f, 
-       0x7, 0x74, 0x2, 0x2, 0xe2f, 0xe30, 0x7, 0x63, 0x2, 0x2, 0xe30, 0xe31, 
-       0x7, 0x72, 0x2, 0x2, 0xe31, 0x234, 0x3, 0x2, 0x2, 0x2, 0xe32, 0xe33, 
-       0x7, 0x4f, 0x2, 0x2, 0xe33, 0xe34, 0x7, 0x6b, 0x2, 0x2, 0xe34, 0xe35, 
-       0x7, 0x74, 0x2, 0x2, 0xe35, 0xe36, 0x7, 0x74, 0x2, 0x2, 0xe36, 0xe37, 
-       0x7, 0x71, 0x2, 0x2, 0xe37, 0xe38, 0x7, 0x74, 0x2, 0x2, 0xe38, 0x236, 
-       0x3, 0x2, 0x2, 0x2, 0xe39, 0xe3a, 0x7, 0x45, 0x2, 0x2, 0xe3a, 0xe3b, 
-       0x7, 0x6e, 0x2, 0x2, 0xe3b, 0xe3c, 0x7, 0x63, 0x2, 0x2, 0xe3c, 0xe3d, 
-       0x7, 0x6f, 0x2, 0x2, 0xe3d, 0xe3e, 0x7, 0x72, 0x2, 0x2, 0xe3e, 0x238, 
-       0x3, 0x2, 0x2, 0x2, 0xe3f, 0xe40, 0x7, 0x44, 0x2, 0x2, 0xe40, 0xe41, 
-       0x7, 0x71, 0x2, 0x2, 0xe41, 0xe42, 0x7, 0x74, 0x2, 0x2, 0xe42, 0xe43, 
-       0x7, 0x66, 0x2, 0x2, 0xe43, 0xe44, 0x7, 0x67, 0x2, 0x2, 0xe44, 0xe45, 
-       0x7, 0x74, 0x2, 0x2, 0xe45, 0x23a, 0x3, 0x2, 0x2, 0x2, 0xe46, 0xe47, 
-       0x7, 0x4f, 0x2, 0x2, 0xe47, 0xe48, 0x7, 0x6b, 0x2, 0x2, 0xe48, 0xe49, 
-       0x7, 0x74, 0x2, 0x2, 0xe49, 0xe4a, 0x7, 0x74, 0x2, 0x2, 0xe4a, 0xe4b, 
-       0x7, 0x71, 0x2, 0x2, 0xe4b, 0xe4c, 0x7, 0x74, 0x2, 0x2, 0xe4c, 0xe4d, 
-       0x7, 0x51, 0x2, 0x2, 0xe4d, 0xe4e, 0x7, 0x70, 0x2, 0x2, 0xe4e, 0xe4f, 
-       0x7, 0x65, 0x2, 0x2, 0xe4f, 0xe50, 0x7, 0x67, 0x2, 0x2, 0xe50, 0x23c, 
-       0x3, 0x2, 0x2, 0x2, 0xe51, 0xe52, 0x7, 0x50, 0x2, 0x2, 0xe52, 0xe53, 
-       0x7, 0x67, 0x2, 0x2, 0xe53, 0xe54, 0x7, 0x78, 0x2, 0x2, 0xe54, 0xe55, 
-       0x7, 0x67, 0x2, 0x2, 0xe55, 0xe56, 0x7, 0x74, 0x2, 0x2, 0xe56, 0x23e, 
-       0x3, 0x2, 0x2, 0x2, 0xe57, 0xe58, 0x7, 0x4e, 0x2, 0x2, 0xe58, 0xe59, 
-       0x7, 0x67, 0x2, 0x2, 0xe59, 0xe5a, 0x7, 0x75, 0x2, 0x2, 0xe5a, 0xe5b, 
-       0x7, 0x75, 0x2, 0x2, 0xe5b, 0x240, 0x3, 0x2, 0x2, 0x2, 0xe5c, 0xe5d, 
-       0x7, 0x47, 0x2, 0x2, 0xe5d, 0xe5e, 0x7, 0x73, 0x2, 0x2, 0xe5e, 0xe5f, 
-       0x7, 0x77, 0x2, 0x2, 0xe5f, 0xe60, 0x7, 0x63, 0x2, 0x2, 0xe60, 0xe61, 
-       0x7, 0x6e, 0x2, 0x2, 0xe61, 0x242, 0x3, 0x2, 0x2, 0x2, 0xe62, 0xe63, 
-       0x7, 0x4e, 0x2, 0x2, 0xe63, 0xe64, 0x7, 0x67, 0x2, 0x2, 0xe64, 0xe65, 
-       0x7, 0x75, 0x2, 0x2, 0xe65, 0xe66, 0x7, 0x75, 0x2, 0x2, 0xe66, 0xe67, 
-       0x7, 0x47, 0x2, 0x2, 0xe67, 0xe68, 0x7, 0x73, 0x2, 0x2, 0xe68, 0xe69, 
-       0x7, 0x77, 0x2, 0x2, 0xe69, 0xe6a, 0x7, 0x63, 0x2, 0x2, 0xe6a, 0xe6b, 
-       0x7, 0x6e, 0x2, 0x2, 0xe6b, 0x244, 0x3, 0x2, 0x2, 0x2, 0xe6c, 0xe6d, 
-       0x7, 0x49, 0x2, 0x2, 0xe6d, 0xe6e, 0x7, 0x74, 0x2, 0x2, 0xe6e, 0xe6f, 
-       0x7, 0x67, 0x2, 0x2, 0xe6f, 0xe70, 0x7, 0x63, 0x2, 0x2, 0xe70, 0xe71, 
-       0x7, 0x76, 0x2, 0x2, 0xe71, 0xe72, 0x7, 0x67, 0x2, 0x2, 0xe72, 0xe73, 
-       0x7, 0x74, 0x2, 0x2, 0xe73, 0x246, 0x3, 0x2, 0x2, 0x2, 0xe74, 0xe75, 
-       0x7, 0x50, 0x2, 0x2, 0xe75, 0xe76, 0x7, 0x71, 0x2, 0x2, 0xe76, 0xe77, 
-       0x7, 0x76, 0x2, 0x2, 0xe77, 0xe78, 0x7, 0x47, 0x2, 0x2, 0xe78, 0xe79, 
-       0x7, 0x73, 0x2, 0x2, 0xe79, 0xe7a, 0x7, 0x77, 0x2, 0x2, 0xe7a, 0xe7b, 
-       0x7, 0x63, 0x2, 0x2, 0xe7b, 0xe7c, 0x7, 0x6e, 0x2, 0x2, 0xe7c, 0x248, 
-       0x3, 0x2, 0x2, 0x2, 0xe7d, 0xe7e, 0x7, 0x49, 0x2, 0x2, 0xe7e, 0xe7f, 
-       0x7, 0x74, 0x2, 0x2, 0xe7f, 0xe80, 0x7, 0x67, 0x2, 0x2, 0xe80, 0xe81, 
-       0x7, 0x63, 0x2, 0x2, 0xe81, 0xe82, 0x7, 0x76, 0x2, 0x2, 0xe82, 0xe83, 
-       0x7, 0x67, 0x2, 0x2, 0xe83, 0xe84, 0x7, 0x74, 0x2, 0x2, 0xe84, 0xe85, 
-       0x7, 0x47, 0x2, 0x2, 0xe85, 0xe86, 0x7, 0x73, 0x2, 0x2, 0xe86, 0xe87, 
-       0x7, 0x77, 0x2, 0x2, 0xe87, 0xe88, 0x7, 0x63, 0x2, 0x2, 0xe88, 0xe89, 
-       0x7, 0x6e, 0x2, 0x2, 0xe89, 0x24a, 0x3, 0x2, 0x2, 0x2, 0xe8a, 0xe8b, 
-       0x7, 0x43, 0x2, 0x2, 0xe8b, 0xe8c, 0x7, 0x6e, 0x2, 0x2, 0xe8c, 0xe8d, 
-       0x7, 0x79, 0x2, 0x2, 0xe8d, 0xe8e, 0x7, 0x63, 0x2, 0x2, 0xe8e, 0xe8f, 
-       0x7, 0x7b, 0x2, 0x2, 0xe8f, 0xe90, 0x7, 0x75, 0x2, 0x2, 0xe90, 0x24c, 
-       0x3, 0x2, 0x2, 0x2, 0xe91, 0xe92, 0x7, 0x51, 0x2, 0x2, 0xe92, 0xe93, 
-       0x7, 0x72, 0x2, 0x2, 0xe93, 0xe94, 0x7, 0x63, 0x2, 0x2, 0xe94, 0xe95, 
-       0x7, 0x73, 0x2, 0x2, 0xe95, 0xe96, 0x7, 0x77, 0x2, 0x2, 0xe96, 0xe97, 
-       0x7, 0x67, 0x2, 0x2, 0xe97, 0xe98, 0x7, 0x44, 0x2, 0x2, 0xe98, 0xe99, 
-       0x7, 0x6e, 0x2, 0x2, 0xe99, 0xe9a, 0x7, 0x63, 0x2, 0x2, 0xe9a, 0xe9b, 
-       0x7, 0x65, 0x2, 0x2, 0xe9b, 0xe9c, 0x7, 0x6d, 0x2, 0x2, 0xe9c, 0x24e, 
-       0x3, 0x2, 0x2, 0x2, 0xe9d, 0xe9e, 0x7, 0x56, 0x2, 0x2, 0xe9e, 0xe9f, 
-       0x7, 0x74, 0x2, 0x2, 0xe9f, 0xea0, 0x7, 0x63, 0x2, 0x2, 0xea0, 0xea1, 
-       0x7, 0x70, 0x2, 0x2, 0xea1, 0xea2, 0x7, 0x75, 0x2, 0x2, 0xea2, 0xea3, 
-       0x7, 0x72, 0x2, 0x2, 0xea3, 0xea4, 0x7, 0x63, 0x2, 0x2, 0xea4, 0xea5, 
-       0x7, 0x74, 0x2, 0x2, 0xea5, 0xea6, 0x7, 0x67, 0x2, 0x2, 0xea6, 0xea7, 
-       0x7, 0x70, 0x2, 0x2, 0xea7, 0xea8, 0x7, 0x76, 0x2, 0x2, 0xea8, 0xea9, 
-       0x7, 0x44, 0x2, 0x2, 0xea9, 0xeaa, 0x7, 0x6e, 0x2, 0x2, 0xeaa, 0xeab, 
-       0x7, 0x63, 0x2, 0x2, 0xeab, 0xeac, 0x7, 0x65, 0x2, 0x2, 0xeac, 0xead, 
-       0x7, 0x6d, 0x2, 0x2, 0xead, 0x250, 0x3, 0x2, 0x2, 0x2, 0xeae, 0xeaf, 
-       0x7, 0x51, 0x2, 0x2, 0xeaf, 0xeb0, 0x7, 0x72, 0x2, 0x2, 0xeb0, 0xeb1, 
-       0x7, 0x63, 0x2, 0x2, 0xeb1, 0xeb2, 0x7, 0x73, 0x2, 0x2, 0xeb2, 0xeb3, 
-       0x7, 0x77, 0x2, 0x2, 0xeb3, 0xeb4, 0x7, 0x67, 0x2, 0x2, 0xeb4, 0xeb5, 
-       0x7, 0x59, 0x2, 0x2, 0xeb5, 0xeb6, 0x7, 0x6a, 0x2, 0x2, 0xeb6, 0xeb7, 
-       0x7, 0x6b, 0x2, 0x2, 0xeb7, 0xeb8, 0x7, 0x76, 0x2, 0x2, 0xeb8, 0xeb9, 
-       0x7, 0x67, 0x2, 0x2, 0xeb9, 0x252, 0x3, 0x2, 0x2, 0x2, 0xeba, 0xebb, 
-       0x7, 0x2a, 0x2, 0x2, 0xebb, 0x254, 0x3, 0x2, 0x2, 0x2, 0xebc, 0xebd, 
-       0x7, 0x2b, 0x2, 0x2, 0xebd, 0x256, 0x3, 0x2, 0x2, 0x2, 0xebe, 0xebf, 
-       0x7, 0x5d, 0x2, 0x2, 0xebf, 0x258, 0x3, 0x2, 0x2, 0x2, 0xec0, 0xec1, 
-       0x7, 0x5f, 0x2, 0x2, 0xec1, 0x25a, 0x3, 0x2, 0x2, 0x2, 0xec2, 0xec3, 
-       0x7, 0x7d, 0x2, 0x2, 0xec3, 0x25c, 0x3, 0x2, 0x2, 0x2, 0xec4, 0xec5, 
-       0x7, 0x7f, 0x2, 0x2, 0xec5, 0x25e, 0x3, 0x2, 0x2, 0x2, 0xec6, 0xec7, 
-       0x7, 0x5d, 0x2, 0x2, 0xec7, 0xec8, 0x7, 0x5d, 0x2, 0x2, 0xec8, 0x260, 
-       0x3, 0x2, 0x2, 0x2, 0xec9, 0xeca, 0x7, 0x3e, 0x2, 0x2, 0xeca, 0x262, 
-       0x3, 0x2, 0x2, 0x2, 0xecb, 0xecc, 0x7, 0x3e, 0x2, 0x2, 0xecc, 0xecd, 
-       0x7, 0x3f, 0x2, 0x2, 0xecd, 0x264, 0x3, 0x2, 0x2, 0x2, 0xece, 0xecf, 
-       0x7, 0x40, 0x2, 0x2, 0xecf, 0x266, 0x3, 0x2, 0x2, 0x2, 0xed0, 0xed1, 
-       0x7, 0x40, 0x2, 0x2, 0xed1, 0xed2, 0x7, 0x3f, 0x2, 0x2, 0xed2, 0x268, 
-       0x3, 0x2, 0x2, 0x2, 0xed3, 0xed4, 0x7, 0x3e, 0x2, 0x2, 0xed4, 0xed5, 
-       0x7, 0x3e, 0x2, 0x2, 0xed5, 0x26a, 0x3, 0x2, 0x2, 0x2, 0xed6, 0xed7, 
-       0x7, 0x40, 0x2, 0x2, 0xed7, 0xed8, 0x7, 0x40, 0x2, 0x2, 0xed8, 0x26c, 
-       0x3, 0x2, 0x2, 0x2, 0xed9, 0xeda, 0x7, 0x2d, 0x2, 0x2, 0xeda, 0x26e, 
-       0x3, 0x2, 0x2, 0x2, 0xedb, 0xedc, 0x7, 0x2d, 0x2, 0x2, 0xedc, 0xedd, 
-       0x7, 0x2d, 0x2, 0x2, 0xedd, 0x270, 0x3, 0x2, 0x2, 0x2, 0xede, 0xedf, 
-       0x7, 0x2f, 0x2, 0x2, 0xedf, 0x272, 0x3, 0x2, 0x2, 0x2, 0xee0, 0xee1, 
-       0x7, 0x2f, 0x2, 0x2, 0xee1, 0xee2, 0x7, 0x2f, 0x2, 0x2, 0xee2, 0x274, 
-       0x3, 0x2, 0x2, 0x2, 0xee3, 0xee4, 0x7, 0x2c, 0x2, 0x2, 0xee4, 0x276, 
-       0x3, 0x2, 0x2, 0x2, 0xee5, 0xee6, 0x7, 0x31, 0x2, 0x2, 0xee6, 0x278, 
-       0x3, 0x2, 0x2, 0x2, 0xee7, 0xee8, 0x7, 0x27, 0x2, 0x2, 0xee8, 0x27a, 
-       0x3, 0x2, 0x2, 0x2, 0xee9, 0xeea, 0x7, 0x28, 0x2, 0x2, 0xeea, 0x27c, 
-       0x3, 0x2, 0x2, 0x2, 0xeeb, 0xeec, 0x7, 0x7e, 0x2, 0x2, 0xeec, 0x27e, 
-       0x3, 0x2, 0x2, 0x2, 0xeed, 0xeee, 0x7, 0x28, 0x2, 0x2, 0xeee, 0xeef, 
-       0x7, 0x28, 0x2, 0x2, 0xeef, 0x280, 0x3, 0x2, 0x2, 0x2, 0xef0, 0xef1, 
-       0x7, 0x7e, 0x2, 0x2, 0xef1, 0xef2, 0x7, 0x7e, 0x2, 0x2, 0xef2, 0x282, 
-       0x3, 0x2, 0x2, 0x2, 0xef3, 0xef4, 0x7, 0x60, 0x2, 0x2, 0xef4, 0x284, 
-       0x3, 0x2, 0x2, 0x2, 0xef5, 0xef6, 0x7, 0x23, 0x2, 0x2, 0xef6, 0x286, 
-       0x3, 0x2, 0x2, 0x2, 0xef7, 0xef8, 0x7, 0x80, 0x2, 0x2, 0xef8, 0x288, 
-       0x3, 0x2, 0x2, 0x2, 0xef9, 0xefa, 0x7, 0x41, 0x2, 0x2, 0xefa, 0x28a, 
-       0x3, 0x2, 0x2, 0x2, 0xefb, 0xefc, 0x7, 0x3c, 0x2, 0x2, 0xefc, 0x28c, 
-       0x3, 0x2, 0x2, 0x2, 0xefd, 0xefe, 0x7, 0x3c, 0x2, 0x2, 0xefe, 0xeff, 
-       0x7, 0x3c, 0x2, 0x2, 0xeff, 0x28e, 0x3, 0x2, 0x2, 0x2, 0xf00, 0xf01, 
-       0x7, 0x3d, 0x2, 0x2, 0xf01, 0x290, 0x3, 0x2, 0x2, 0x2, 0xf02, 0xf03, 
-       0x7, 0x2e, 0x2, 0x2, 0xf03, 0x292, 0x3, 0x2, 0x2, 0x2, 0xf04, 0xf05, 
-       0x7, 0x3f, 0x2, 0x2, 0xf05, 0x294, 0x3, 0x2, 0x2, 0x2, 0xf06, 0xf07, 
-       0x7, 0x2c, 0x2, 0x2, 0xf07, 0xf08, 0x7, 0x3f, 0x2, 0x2, 0xf08, 0x296, 
-       0x3, 0x2, 0x2, 0x2, 0xf09, 0xf0a, 0x7, 0x31, 0x2, 0x2, 0xf0a, 0xf0b, 
-       0x7, 0x3f, 0x2, 0x2, 0xf0b, 0x298, 0x3, 0x2, 0x2, 0x2, 0xf0c, 0xf0d, 
-       0x7, 0x27, 0x2, 0x2, 0xf0d, 0xf0e, 0x7, 0x3f, 0x2, 0x2, 0xf0e, 0x29a, 
-       0x3, 0x2, 0x2, 0x2, 0xf0f, 0xf10, 0x7, 0x2d, 0x2, 0x2, 0xf10, 0xf11, 
-       0x7, 0x3f, 0x2, 0x2, 0xf11, 0x29c, 0x3, 0x2, 0x2, 0x2, 0xf12, 0xf13, 
-       0x7, 0x2f, 0x2, 0x2, 0xf13, 0xf14, 0x7, 0x3f, 0x2, 0x2, 0xf14, 0x29e, 
-       0x3, 0x2, 0x2, 0x2, 0xf15, 0xf16, 0x7, 0x3e, 0x2, 0x2, 0xf16, 0xf17, 
-       0x7, 0x3e, 0x2, 0x2, 0xf17, 0xf18, 0x7, 0x3f, 0x2, 0x2, 0xf18, 0x2a0, 
-       0x3, 0x2, 0x2, 0x2, 0xf19, 0xf1a, 0x7, 0x40, 0x2, 0x2, 0xf1a, 0xf1b, 
-       0x7, 0x40, 0x2, 0x2, 0xf1b, 0xf1c, 0x7, 0x3f, 0x2, 0x2, 0xf1c, 0x2a2, 
-       0x3, 0x2, 0x2, 0x2, 0xf1d, 0xf1e, 0x7, 0x28, 0x2, 0x2, 0xf1e, 0xf1f, 
-       0x7, 0x3f, 0x2, 0x2, 0xf1f, 0x2a4, 0x3, 0x2, 0x2, 0x2, 0xf20, 0xf21, 
-       0x7, 0x60, 0x2, 0x2, 0xf21, 0xf22, 0x7, 0x3f, 0x2, 0x2, 0xf22, 0x2a6, 
-       0x3, 0x2, 0x2, 0x2, 0xf23, 0xf24, 0x7, 0x7e, 0x2, 0x2, 0xf24, 0xf25, 
-       0x7, 0x3f, 0x2, 0x2, 0xf25, 0x2a8, 0x3, 0x2, 0x2, 0x2, 0xf26, 0xf27, 
-       0x7, 0x3f, 0x2, 0x2, 0xf27, 0xf28, 0x7, 0x3f, 0x2, 0x2, 0xf28, 0x2aa, 
-       0x3, 0x2, 0x2, 0x2, 0xf29, 0xf2a, 0x7, 0x23, 0x2, 0x2, 0xf2a, 0xf2b, 
-       0x7, 0x3f, 0x2, 0x2, 0xf2b, 0x2ac, 0x3, 0x2, 0x2, 0x2, 0xf2c, 0xf2d, 
-       0x7, 0x30, 0x2, 0x2, 0xf2d, 0x2ae, 0x3, 0x2, 0x2, 0x2, 0xf2e, 0xf2f, 
-       0x7, 0x76, 0x2, 0x2, 0xf2f, 0xf30, 0x7, 0x74, 0x2, 0x2, 0xf30, 0xf31, 
-       0x7, 0x77, 0x2, 0x2, 0xf31, 0xf32, 0x7, 0x67, 0x2, 0x2, 0xf32, 0x2b0, 
-       0x3, 0x2, 0x2, 0x2, 0xf33, 0xf34, 0x7, 0x68, 0x2, 0x2, 0xf34, 0xf35, 
-       0x7, 0x63, 0x2, 0x2, 0xf35, 0xf36, 0x7, 0x6e, 0x2, 0x2, 0xf36, 0xf37, 
-       0x7, 0x75, 0x2, 0x2, 0xf37, 0xf38, 0x7, 0x67, 0x2, 0x2, 0xf38, 0x2b2, 
-       0x3, 0x2, 0x2, 0x2, 0xf39, 0xf3a, 0x7, 0x63, 0x2, 0x2, 0xf3a, 0xf3b, 
-       0x7, 0x75, 0x2, 0x2, 0xf3b, 0xf3c, 0x7, 0x75, 0x2, 0x2, 0xf3c, 0xf3d, 
-       0x7, 0x71, 0x2, 0x2, 0xf3d, 0xf3e, 0x7, 0x65, 0x2, 0x2, 0xf3e, 0xf3f, 
-       0x7, 0x6b, 0x2, 0x2, 0xf3f, 0xf40, 0x7, 0x63, 0x2, 0x2, 0xf40, 0xf41, 
-       0x7, 0x76, 0x2, 0x2, 0xf41, 0xf42, 0x7, 0x67, 0x2, 0x2, 0xf42, 0xf43, 
-       0x7, 0x66, 0x2, 0x2, 0xf43, 0xf44, 0x7, 0x76, 0x2, 0x2, 0xf44, 0xf45, 
-       0x7, 0x7b, 0x2, 0x2, 0xf45, 0xf46, 0x7, 0x72, 0x2, 0x2, 0xf46, 0xf47, 
-       0x7, 0x67, 0x2, 0x2, 0xf47, 0x2b4, 0x3, 0x2, 0x2, 0x2, 0xf48, 0xf49, 
-       0x7, 0x76, 0x2, 0x2, 0xf49, 0xf4a, 0x7, 0x7b, 0x2, 0x2, 0xf4a, 0xf4b, 
-       0x7, 0x72, 0x2, 0x2, 0xf4b, 0xf4c, 0x7, 0x67, 0x2, 0x2, 0xf4c, 0xf4d, 
-       0x7, 0x63, 0x2, 0x2, 0xf4d, 0xf4e, 0x7, 0x6e, 0x2, 0x2, 0xf4e, 0xf4f, 
-       0x7, 0x6b, 0x2, 0x2, 0xf4f, 0xf50, 0x7, 0x63, 0x2, 0x2, 0xf50, 0xf51, 
-       0x7, 0x75, 0x2, 0x2, 0xf51, 0x2b6, 0x3, 0x2, 0x2, 0x2, 0xf52, 0xf53, 
-       0x7, 0x76, 0x2, 0x2, 0xf53, 0xf54, 0x7, 0x7b, 0x2, 0x2, 0xf54, 0xf55, 
-       0x7, 0x72, 0x2, 0x2, 0xf55, 0xf56, 0x7, 0x67, 0x2, 0x2, 0xf56, 0xf57, 
-       0x7, 0x66, 0x2, 0x2, 0xf57, 0xf58, 0x7, 0x67, 0x2, 0x2, 0xf58, 0xf59, 
-       0x7, 0x68, 0x2, 0x2, 0xf59, 0x2b8, 0x3, 0x2, 0x2, 0x2, 0xf5a, 0xf5b, 
-       0x7, 0x68, 0x2, 0x2, 0xf5b, 0xf5c, 0x7, 0x77, 0x2, 0x2, 0xf5c, 0xf5d, 
-       0x7, 0x70, 0x2, 0x2, 0xf5d, 0xf5e, 0x7, 0x66, 0x2, 0x2, 0xf5e, 0xf5f, 
-       0x7, 0x63, 0x2, 0x2, 0xf5f, 0xf60, 0x7, 0x6f, 0x2, 0x2, 0xf60, 0xf61, 
-       0x7, 0x67, 0x2, 0x2, 0xf61, 0xf62, 0x7, 0x70, 0x2, 0x2, 0xf62, 0xf63, 
-       0x7, 0x76, 0x2, 0x2, 0xf63, 0xf64, 0x7, 0x63, 0x2, 0x2, 0xf64, 0xf65, 
-       0x7, 0x6e, 0x2, 0x2, 0xf65, 0x2ba, 0x3, 0x2, 0x2, 0x2, 0xf66, 0xf67, 
-       0x7, 0x76, 0x2, 0x2, 0xf67, 0xf68, 0x7, 0x7b, 0x2, 0x2, 0xf68, 0xf69, 
-       0x7, 0x72, 0x2, 0x2, 0xf69, 0xf6a, 0x7, 0x67, 0x2, 0x2, 0xf6a, 0xf6b, 
-       0x7, 0x71, 0x2, 0x2, 0xf6b, 0xf6c, 0x7, 0x68, 0x2, 0x2, 0xf6c, 0x2bc, 
-       0x3, 0x2, 0x2, 0x2, 0xf6d, 0xf6e, 0x7, 0x61, 0x2, 0x2, 0xf6e, 0xf6f, 
-       0x7, 0x61, 0x2, 0x2, 0xf6f, 0xf70, 0x7, 0x63, 0x2, 0x2, 0xf70, 0xf71, 
-       0x7, 0x7c, 0x2, 0x2, 0xf71, 0xf72, 0x7, 0x75, 0x2, 0x2, 0xf72, 0xf73, 
-       0x7, 0x6e, 0x2, 0x2, 0xf73, 0xf74, 0x7, 0x65, 0x2, 0x2, 0xf74, 0xf75, 
-       0x7, 0x61, 0x2, 0x2, 0xf75, 0xf76, 0x7, 0x72, 0x2, 0x2, 0xf76, 0xf77, 
-       0x7, 0x74, 0x2, 0x2, 0xf77, 0xf78, 0x7, 0x6b, 0x2, 0x2, 0xf78, 0xf79, 
-       0x7, 0x70, 0x2, 0x2, 0xf79, 0xf7a, 0x7, 0x76, 0x2, 0x2, 0xf7a, 0xf7b, 
-       0x7, 0x61, 0x2, 0x2, 0xf7b, 0xf7c, 0x7, 0x6f, 0x2, 0x2, 0xf7c, 0xf7d, 
-       0x7, 0x67, 0x2, 0x2, 0xf7d, 0xf7e, 0x7, 0x75, 0x2, 0x2, 0xf7e, 0xf7f, 
-       0x7, 0x75, 0x2, 0x2, 0xf7f, 0xf80, 0x7, 0x63, 0x2, 0x2, 0xf80, 0xf81, 
-       0x7, 0x69, 0x2, 0x2, 0xf81, 0xf82, 0x7, 0x67, 0x2, 0x2, 0xf82, 0x2be, 
-       0x3, 0x2, 0x2, 0x2, 0xf83, 0xf84, 0x7, 0x61, 0x2, 0x2, 0xf84, 0xf85, 
-       0x7, 0x61, 0x2, 0x2, 0xf85, 0xf86, 0x7, 0x63, 0x2, 0x2, 0xf86, 0xf87, 
-       0x7, 0x7c, 0x2, 0x2, 0xf87, 0xf88, 0x7, 0x75, 0x2, 0x2, 0xf88, 0xf89, 
-       0x7, 0x6e, 0x2, 0x2, 0xf89, 0xf8a, 0x7, 0x65, 0x2, 0x2, 0xf8a, 0xf8b, 
-       0x7, 0x61, 0x2, 0x2, 0xf8b, 0xf8c, 0x7, 0x72, 0x2, 0x2, 0xf8c, 0xf8d, 
-       0x7, 0x74, 0x2, 0x2, 0xf8d, 0xf8e, 0x7, 0x6b, 0x2, 0x2, 0xf8e, 0xf8f, 
-       0x7, 0x70, 0x2, 0x2, 0xf8f, 0xf90, 0x7, 0x76, 0x2, 0x2, 0xf90, 0xf91, 
-       0x7, 0x61, 0x2, 0x2, 0xf91, 0xf92, 0x7, 0x75, 0x2, 0x2, 0xf92, 0xf93, 
-       0x7, 0x7b, 0x2, 0x2, 0xf93, 0xf94, 0x7, 0x6f, 0x2, 0x2, 0xf94, 0xf95, 
-       0x7, 0x64, 0x2, 0x2, 0xf95, 0xf96, 0x7, 0x71, 0x2, 0x2, 0xf96, 0xf97, 
-       0x7, 0x6e, 0x2, 0x2, 0xf97, 0x2c0, 0x3, 0x2, 0x2, 0x2, 0xf98, 0xf99, 
-       0x7, 0x61, 0x2, 0x2, 0xf99, 0xf9a, 0x7, 0x61, 0x2, 0x2, 0xf9a, 0xf9b, 
-       0x7, 0x63, 0x2, 0x2, 0xf9b, 0xf9c, 0x7, 0x7c, 0x2, 0x2, 0xf9c, 0xf9d, 
-       0x7, 0x75, 0x2, 0x2, 0xf9d, 0xf9e, 0x7, 0x6e, 0x2, 0x2, 0xf9e, 0xf9f, 
-       0x7, 0x65, 0x2, 0x2, 0xf9f, 0xfa0, 0x7, 0x61, 0x2, 0x2, 0xfa0, 0xfa1, 
-       0x7, 0x72, 0x2, 0x2, 0xfa1, 0xfa2, 0x7, 0x74, 0x2, 0x2, 0xfa2, 0xfa3, 
-       0x7, 0x76, 0x2, 0x2, 0xfa3, 0xfa4, 0x7, 0x75, 0x2, 0x2, 0xfa4, 0xfa5, 
-       0x7, 0x7b, 0x2, 0x2, 0xfa5, 0xfa6, 0x7, 0x6f, 0x2, 0x2, 0xfa6, 0xfa7, 
-       0x7, 0x61, 0x2, 0x2, 0xfa7, 0xfa8, 0x7, 0x68, 0x2, 0x2, 0xfa8, 0xfa9, 
-       0x7, 0x77, 0x2, 0x2, 0xfa9, 0xfaa, 0x7, 0x6e, 0x2, 0x2, 0xfaa, 0xfab, 
-       0x7, 0x6e, 0x2, 0x2, 0xfab, 0xfac, 0x7, 0x7b, 0x2, 0x2, 0xfac, 0xfad, 
-       0x7, 0x61, 0x2, 0x2, 0xfad, 0xfae, 0x7, 0x73, 0x2, 0x2, 0xfae, 0xfaf, 
-       0x7, 0x77, 0x2, 0x2, 0xfaf, 0xfb0, 0x7, 0x63, 0x2, 0x2, 0xfb0, 0xfb1, 
-       0x7, 0x6e, 0x2, 0x2, 0xfb1, 0xfb2, 0x7, 0x6b, 0x2, 0x2, 0xfb2, 0xfb3, 
-       0x7, 0x68, 0x2, 0x2, 0xfb3, 0xfb4, 0x7, 0x6b, 0x2, 0x2, 0xfb4, 0xfb5, 
-       0x7, 0x67, 0x2, 0x2, 0xfb5, 0xfb6, 0x7, 0x66, 0x2, 0x2, 0xfb6, 0x2c2, 
-       0x3, 0x2, 0x2, 0x2, 0xfb7, 0xfb8, 0x7, 0x61, 0x2, 0x2, 0xfb8, 0xfb9, 
-       0x7, 0x61, 0x2, 0x2, 0xfb9, 0xfba, 0x7, 0x63, 0x2, 0x2, 0xfba, 0xfbb, 
-       0x7, 0x7c, 0x2, 0x2, 0xfbb, 0xfbc, 0x7, 0x75, 0x2, 0x2, 0xfbc, 0xfbd, 
-       0x7, 0x6e, 0x2, 0x2, 0xfbd, 0xfbe, 0x7, 0x65, 0x2, 0x2, 0xfbe, 0xfbf, 
-       0x7, 0x61, 0x2, 0x2, 0xfbf, 0xfc0, 0x7, 0x72, 0x2, 0x2, 0xfc0, 0xfc1, 
-       0x7, 0x74, 0x2, 0x2, 0xfc1, 0xfc2, 0x7, 0x76, 0x2, 0x2, 0xfc2, 0xfc3, 
-       0x7, 0x75, 0x2, 0x2, 0xfc3, 0xfc4, 0x7, 0x7b, 0x2, 0x2, 0xfc4, 0xfc5, 
-       0x7, 0x6f, 0x2, 0x2, 0xfc5, 0xfc6, 0x7, 0x61, 0x2, 0x2, 0xfc6, 0xfc7, 
-       0x7, 0x6e, 0x2, 0x2, 0xfc7, 0xfc8, 0x7, 0x67, 0x2, 0x2, 0xfc8, 0xfc9, 
-       0x7, 0x63, 0x2, 0x2, 0xfc9, 0xfca, 0x7, 0x75, 0x2, 0x2, 0xfca, 0xfcb, 
-       0x7, 0x76, 0x2, 0x2, 0xfcb, 0xfcc, 0x7, 0x61, 0x2, 0x2, 0xfcc, 0xfcd, 
-       0x7, 0x73, 0x2, 0x2, 0xfcd, 0xfce, 0x7, 0x77, 0x2, 0x2, 0xfce, 0xfcf, 
-       0x7, 0x63, 0x2, 0x2, 0xfcf, 0xfd0, 0x7, 0x6e, 0x2, 0x2, 0xfd0, 0xfd1, 
-       0x7, 0x6b, 0x2, 0x2, 0xfd1, 0xfd2, 0x7, 0x68, 0x2, 0x2, 0xfd2, 0xfd3, 
-       0x7, 0x6b, 0x2, 0x2, 0xfd3, 0xfd4, 0x7, 0x67, 0x2, 0x2, 0xfd4, 0xfd5, 
-       0x7, 0x66, 0x2, 0x2, 0xfd5, 0x2c4, 0x3, 0x2, 0x2, 0x2, 0xfd6, 0xfd7, 
-       0x7, 0x61, 0x2, 0x2, 0xfd7, 0xfd8, 0x7, 0x61, 0x2, 0x2, 0xfd8, 0xfd9, 
-       0x7, 0x63, 0x2, 0x2, 0xfd9, 0xfda, 0x7, 0x7c, 0x2, 0x2, 0xfda, 0xfdb, 
-       0x7, 0x75, 0x2, 0x2, 0xfdb, 0xfdc, 0x7, 0x6e, 0x2, 0x2, 0xfdc, 0xfdd, 
-       0x7, 0x65, 0x2, 0x2, 0xfdd, 0xfde, 0x7, 0x61, 0x2, 0x2, 0xfde, 0xfdf, 
-       0x7, 0x72, 0x2, 0x2, 0xfdf, 0xfe0, 0x7, 0x74, 0x2, 0x2, 0xfe0, 0xfe1, 
-       0x7, 0x76, 0x2, 0x2, 0xfe1, 0xfe2, 0x7, 0x75, 0x2, 0x2, 0xfe2, 0xfe3, 
-       0x7, 0x7b, 0x2, 0x2, 0xfe3, 0xfe4, 0x7, 0x6f, 0x2, 0x2, 0xfe4, 0xfe5, 
-       0x7, 0x61, 0x2, 0x2, 0xfe5, 0xfe6, 0x7, 0x65, 0x2, 0x2, 0xfe6, 0xfe7, 
-       0x7, 0x71, 0x2, 0x2, 0xfe7, 0xfe8, 0x7, 0x70, 0x2, 0x2, 0xfe8, 0xfe9, 
-       0x7, 0x75, 0x2, 0x2, 0xfe9, 0xfea, 0x7, 0x76, 0x2, 0x2, 0xfea, 0xfeb, 
-       0x7, 0x6b, 0x2, 0x2, 0xfeb, 0xfec, 0x7, 0x70, 0x2, 0x2, 0xfec, 0xfed, 
-       0x7, 0x76, 0x2, 0x2, 0xfed, 0xfee, 0x7, 0x61, 0x2, 0x2, 0xfee, 0xfef, 
-       0x7, 0x78, 0x2, 0x2, 0xfef, 0xff0, 0x7, 0x63, 0x2, 0x2, 0xff0, 0xff1, 
-       0x7, 0x6e, 0x2, 0x2, 0xff1, 0xff2, 0x7, 0x77, 0x2, 0x2, 0xff2, 0xff3, 
-       0x7, 0x67, 0x2, 0x2, 0xff3, 0x2c6, 0x3, 0x2, 0x2, 0x2, 0xff4, 0xff5, 
-       0x7, 0x48, 0x2, 0x2, 0xff5, 0xff6, 0x7, 0x74, 0x2, 0x2, 0xff6, 0xff7, 
-       0x7, 0x67, 0x2, 0x2, 0xff7, 0xff8, 0x7, 0x73, 0x2, 0x2, 0xff8, 0xff9, 
-       0x7, 0x77, 0x2, 0x2, 0xff9, 0xffa, 0x7, 0x67, 0x2, 0x2, 0xffa, 0xffb, 
-       0x7, 0x70, 0x2, 0x2, 0xffb, 0xffc, 0x7, 0x65, 0x2, 0x2, 0xffc, 0xffd, 
-       0x7, 0x7b, 0x2, 0x2, 0xffd, 0xffe, 0x7, 0x4b, 0x2, 0x2, 0xffe, 0xfff, 
-       0x7, 0x66, 0x2, 0x2, 0xfff, 0x2c8, 0x3, 0x2, 0x2, 0x2, 0x1000, 0x1001, 
-       0x7, 0x55, 0x2, 0x2, 0x1001, 0x1002, 0x7, 0x6a, 0x2, 0x2, 0x1002, 
-       0x1003, 0x7, 0x63, 0x2, 0x2, 0x1003, 0x1004, 0x7, 0x66, 0x2, 0x2, 
-       0x1004, 0x1005, 0x7, 0x67, 0x2, 0x2, 0x1005, 0x1006, 0x7, 0x74, 0x2, 
-       0x2, 0x1006, 0x1007, 0x7, 0x58, 0x2, 0x2, 0x1007, 0x1008, 0x7, 0x63, 
-       0x2, 0x2, 0x1008, 0x1009, 0x7, 0x74, 0x2, 0x2, 0x1009, 0x100a, 0x7, 
-       0x6b, 0x2, 0x2, 0x100a, 0x100b, 0x7, 0x63, 0x2, 0x2, 0x100b, 0x100c, 
-       0x7, 0x70, 0x2, 0x2, 0x100c, 0x100d, 0x7, 0x76, 0x2, 0x2, 0x100d, 
-       0x100e, 0x7, 0x48, 0x2, 0x2, 0x100e, 0x100f, 0x7, 0x63, 0x2, 0x2, 
-       0x100f, 0x1010, 0x7, 0x6e, 0x2, 0x2, 0x1010, 0x1011, 0x7, 0x6e, 0x2, 
-       0x2, 0x1011, 0x1012, 0x7, 0x64, 0x2, 0x2, 0x1012, 0x1013, 0x7, 0x63, 
-       0x2, 0x2, 0x1013, 0x1014, 0x7, 0x65, 0x2, 0x2, 0x1014, 0x1015, 0x7, 
-       0x6d, 0x2, 0x2, 0x1015, 0x2ca, 0x3, 0x2, 0x2, 0x2, 0x1016, 0x1017, 
-       0x7, 0x55, 0x2, 0x2, 0x1017, 0x1018, 0x7, 0x6a, 0x2, 0x2, 0x1018, 
-       0x1019, 0x7, 0x63, 0x2, 0x2, 0x1019, 0x101a, 0x7, 0x66, 0x2, 0x2, 
-       0x101a, 0x101b, 0x7, 0x67, 0x2, 0x2, 0x101b, 0x101c, 0x7, 0x74, 0x2, 
-       0x2, 0x101c, 0x101d, 0x7, 0x54, 0x2, 0x2, 0x101d, 0x101e, 0x7, 0x67, 
-       0x2, 0x2, 0x101e, 0x101f, 0x7, 0x75, 0x2, 0x2, 0x101f, 0x1020, 0x7, 
-       0x71, 0x2, 0x2, 0x1020, 0x1021, 0x7, 0x77, 0x2, 0x2, 0x1021, 0x1022, 
-       0x7, 0x74, 0x2, 0x2, 0x1022, 0x1023, 0x7, 0x65, 0x2, 0x2, 0x1023, 
-       0x1024, 0x7, 0x67, 0x2, 0x2, 0x1024, 0x1025, 0x7, 0x49, 0x2, 0x2, 
-       0x1025, 0x1026, 0x7, 0x74, 0x2, 0x2, 0x1026, 0x1027, 0x7, 0x71, 0x2, 
-       0x2, 0x1027, 0x1028, 0x7, 0x77, 0x2, 0x2, 0x1028, 0x1029, 0x7, 0x72, 
-       0x2, 0x2, 0x1029, 0x102a, 0x7, 0x55, 0x2, 0x2, 0x102a, 0x102b, 0x7, 
-       0x67, 0x2, 0x2, 0x102b, 0x102c, 0x7, 0x6f, 0x2, 0x2, 0x102c, 0x102d, 
-       0x7, 0x63, 0x2, 0x2, 0x102d, 0x102e, 0x7, 0x70, 0x2, 0x2, 0x102e, 
-       0x102f, 0x7, 0x76, 0x2, 0x2, 0x102f, 0x1030, 0x7, 0x6b, 0x2, 0x2, 
-       0x1030, 0x1031, 0x7, 0x65, 0x2, 0x2, 0x1031, 0x2cc, 0x3, 0x2, 0x2, 
-       0x2, 0x1032, 0x1033, 0x7, 0x55, 0x2, 0x2, 0x1033, 0x1034, 0x7, 0x6a, 
-       0x2, 0x2, 0x1034, 0x1035, 0x7, 0x63, 0x2, 0x2, 0x1035, 0x1036, 0x7, 
-       0x66, 0x2, 0x2, 0x1036, 0x1037, 0x7, 0x67, 0x2, 0x2, 0x1037, 0x1038, 
-       0x7, 0x74, 0x2, 0x2, 0x1038, 0x1039, 0x7, 0x54, 0x2, 0x2, 0x1039, 
-       0x103a, 0x7, 0x67, 0x2, 0x2, 0x103a, 0x103b, 0x7, 0x75, 0x2, 0x2, 
-       0x103b, 0x103c, 0x7, 0x71, 0x2, 0x2, 0x103c, 0x103d, 0x7, 0x77, 0x2, 
-       0x2, 0x103d, 0x103e, 0x7, 0x74, 0x2, 0x2, 0x103e, 0x103f, 0x7, 0x65, 
-       0x2, 0x2, 0x103f, 0x1040, 0x7, 0x67, 0x2, 0x2, 0x1040, 0x1041, 0x7, 
-       0x49, 0x2, 0x2, 0x1041, 0x1042, 0x7, 0x74, 0x2, 0x2, 0x1042, 0x1043, 
-       0x7, 0x71, 0x2, 0x2, 0x1043, 0x1044, 0x7, 0x77, 0x2, 0x2, 0x1044, 
-       0x1045, 0x7, 0x72, 0x2, 0x2, 0x1045, 0x2ce, 0x3, 0x2, 0x2, 0x2, 0x1046, 
-       0x1047, 0x7, 0x44, 0x2, 0x2, 0x1047, 0x1048, 0x7, 0x4b, 0x2, 0x2, 
-       0x1048, 0x1049, 0x7, 0x50, 0x2, 0x2, 0x1049, 0x104a, 0x7, 0x51, 0x2, 
-       0x2, 0x104a, 0x104b, 0x7, 0x54, 0x2, 0x2, 0x104b, 0x104c, 0x7, 0x4f, 
-       0x2, 0x2, 0x104c, 0x104d, 0x7, 0x43, 0x2, 0x2, 0x104d, 0x104e, 0x7, 
-       0x4e, 0x2, 0x2, 0x104e, 0x1052, 0x3, 0x2, 0x2, 0x2, 0x104f, 0x1051, 
-       0x5, 0x2d7, 0x16c, 0x2, 0x1050, 0x104f, 0x3, 0x2, 0x2, 0x2, 0x1051, 
-       0x1054, 0x3, 0x2, 0x2, 0x2, 0x1052, 0x1050, 0x3, 0x2, 0x2, 0x2, 0x1052, 
-       0x1053, 0x3, 0x2, 0x2, 0x2, 0x1053, 0x1114, 0x3, 0x2, 0x2, 0x2, 0x1054, 
-       0x1052, 0x3, 0x2, 0x2, 0x2, 0x1055, 0x1056, 0x7, 0x44, 0x2, 0x2, 
-       0x1056, 0x1057, 0x7, 0x4e, 0x2, 0x2, 0x1057, 0x1058, 0x7, 0x47, 0x2, 
-       0x2, 0x1058, 0x1059, 0x7, 0x50, 0x2, 0x2, 0x1059, 0x105a, 0x7, 0x46, 
-       0x2, 0x2, 0x105a, 0x105b, 0x7, 0x4b, 0x2, 0x2, 0x105b, 0x105c, 0x7, 
-       0x50, 0x2, 0x2, 0x105c, 0x105d, 0x7, 0x46, 0x2, 0x2, 0x105d, 0x105e, 
-       0x7, 0x4b, 0x2, 0x2, 0x105e, 0x105f, 0x7, 0x45, 0x2, 0x2, 0x105f, 
-       0x1060, 0x7, 0x47, 0x2, 0x2, 0x1060, 0x1061, 0x7, 0x55, 0x2, 0x2, 
-       0x1061, 0x1065, 0x3, 0x2, 0x2, 0x2, 0x1062, 0x1064, 0x5, 0x2d7, 0x16c, 
-       0x2, 0x1063, 0x1062, 0x3, 0x2, 0x2, 0x2, 0x1064, 0x1067, 0x3, 0x2, 
-       0x2, 0x2, 0x1065, 0x1063, 0x3, 0x2, 0x2, 0x2, 0x1065, 0x1066, 0x3, 
-       0x2, 0x2, 0x2, 0x1066, 0x1114, 0x3, 0x2, 0x2, 0x2, 0x1067, 0x1065, 
-       0x3, 0x2, 0x2, 0x2, 0x1068, 0x1069, 0x7, 0x44, 0x2, 0x2, 0x1069, 
-       0x106a, 0x7, 0x4e, 0x2, 0x2, 0x106a, 0x106b, 0x7, 0x47, 0x2, 0x2, 
-       0x106b, 0x106c, 0x7, 0x50, 0x2, 0x2, 0x106c, 0x106d, 0x7, 0x46, 0x2, 
-       0x2, 0x106d, 0x106e, 0x7, 0x59, 0x2, 0x2, 0x106e, 0x106f, 0x7, 0x47, 
-       0x2, 0x2, 0x106f, 0x1070, 0x7, 0x4b, 0x2, 0x2, 0x1070, 0x1071, 0x7, 
-       0x49, 0x2, 0x2, 0x1071, 0x1072, 0x7, 0x4a, 0x2, 0x2, 0x1072, 0x1073, 
-       0x7, 0x56, 0x2, 0x2, 0x1073, 0x1077, 0x3, 0x2, 0x2, 0x2, 0x1074, 
-       0x1076, 0x5, 0x2d7, 0x16c, 0x2, 0x1075, 0x1074, 0x3, 0x2, 0x2, 0x2, 
-       0x1076, 0x1079, 0x3, 0x2, 0x2, 0x2, 0x1077, 0x1075, 0x3, 0x2, 0x2, 
-       0x2, 0x1077, 0x1078, 0x3, 0x2, 0x2, 0x2, 0x1078, 0x1114, 0x3, 0x2, 
-       0x2, 0x2, 0x1079, 0x1077, 0x3, 0x2, 0x2, 0x2, 0x107a, 0x107b, 0x7, 
-       0x45, 0x2, 0x2, 0x107b, 0x107c, 0x7, 0x51, 0x2, 0x2, 0x107c, 0x107d, 
-       0x7, 0x4e, 0x2, 0x2, 0x107d, 0x107e, 0x7, 0x51, 0x2, 0x2, 0x107e, 
-       0x107f, 0x7, 0x54, 0x2, 0x2, 0x107f, 0x1083, 0x3, 0x2, 0x2, 0x2, 
-       0x1080, 0x1082, 0x5, 0x2d7, 0x16c, 0x2, 0x1081, 0x1080, 0x3, 0x2, 
-       0x2, 0x2, 0x1082, 0x1085, 0x3, 0x2, 0x2, 0x2, 0x1083, 0x1081, 0x3, 
-       0x2, 0x2, 0x2, 0x1083, 0x1084, 0x3, 0x2, 0x2, 0x2, 0x1084, 0x1114, 
-       0x3, 0x2, 0x2, 0x2, 0x1085, 0x1083, 0x3, 0x2, 0x2, 0x2, 0x1086, 0x1087, 
-       0x7, 0x50, 0x2, 0x2, 0x1087, 0x1088, 0x7, 0x51, 0x2, 0x2, 0x1088, 
-       0x1089, 0x7, 0x54, 0x2, 0x2, 0x1089, 0x108a, 0x7, 0x4f, 0x2, 0x2, 
-       0x108a, 0x108b, 0x7, 0x43, 0x2, 0x2, 0x108b, 0x108c, 0x7, 0x4e, 0x2, 
-       0x2, 0x108c, 0x1090, 0x3, 0x2, 0x2, 0x2, 0x108d, 0x108f, 0x5, 0x2d7, 
-       0x16c, 0x2, 0x108e, 0x108d, 0x3, 0x2, 0x2, 0x2, 0x108f, 0x1092, 0x3, 
-       0x2, 0x2, 0x2, 0x1090, 0x108e, 0x3, 0x2, 0x2, 0x2, 0x1090, 0x1091, 
-       0x3, 0x2, 0x2, 0x2, 0x1091, 0x1114, 0x3, 0x2, 0x2, 0x2, 0x1092, 0x1090, 
-       0x3, 0x2, 0x2, 0x2, 0x1093, 0x1094, 0x7, 0x52, 0x2, 0x2, 0x1094, 
-       0x1095, 0x7, 0x51, 0x2, 0x2, 0x1095, 0x1096, 0x7, 0x55, 0x2, 0x2, 
-       0x1096, 0x1097, 0x7, 0x4b, 0x2, 0x2, 0x1097, 0x1098, 0x7, 0x56, 0x2, 
-       0x2, 0x1098, 0x1099, 0x7, 0x4b, 0x2, 0x2, 0x1099, 0x109a, 0x7, 0x51, 
-       0x2, 0x2, 0x109a, 0x109b, 0x7, 0x50, 0x2, 0x2, 0x109b, 0x109f, 0x3, 
-       0x2, 0x2, 0x2, 0x109c, 0x109e, 0x5, 0x2d7, 0x16c, 0x2, 0x109d, 0x109c, 
-       0x3, 0x2, 0x2, 0x2, 0x109e, 0x10a1, 0x3, 0x2, 0x2, 0x2, 0x109f, 0x109d, 
-       0x3, 0x2, 0x2, 0x2, 0x109f, 0x10a0, 0x3, 0x2, 0x2, 0x2, 0x10a0, 0x1114, 
-       0x3, 0x2, 0x2, 0x2, 0x10a1, 0x109f, 0x3, 0x2, 0x2, 0x2, 0x10a2, 0x10a3, 
-       0x7, 0x52, 0x2, 0x2, 0x10a3, 0x10a4, 0x7, 0x51, 0x2, 0x2, 0x10a4, 
-       0x10a5, 0x7, 0x55, 0x2, 0x2, 0x10a5, 0x10a6, 0x7, 0x4b, 0x2, 0x2, 
-       0x10a6, 0x10a7, 0x7, 0x56, 0x2, 0x2, 0x10a7, 0x10a8, 0x7, 0x4b, 0x2, 
-       0x2, 0x10a8, 0x10a9, 0x7, 0x51, 0x2, 0x2, 0x10a9, 0x10aa, 0x7, 0x50, 
-       0x2, 0x2, 0x10aa, 0x1114, 0x7, 0x56, 0x2, 0x2, 0x10ab, 0x10ac, 0x7, 
-       0x52, 0x2, 0x2, 0x10ac, 0x10ad, 0x7, 0x55, 0x2, 0x2, 0x10ad, 0x10ae, 
-       0x7, 0x4b, 0x2, 0x2, 0x10ae, 0x10af, 0x7, 0x5c, 0x2, 0x2, 0x10af, 
-       0x10b0, 0x7, 0x47, 0x2, 0x2, 0x10b0, 0x10b4, 0x3, 0x2, 0x2, 0x2, 
-       0x10b1, 0x10b3, 0x5, 0x2d7, 0x16c, 0x2, 0x10b2, 0x10b1, 0x3, 0x2, 
-       0x2, 0x2, 0x10b3, 0x10b6, 0x3, 0x2, 0x2, 0x2, 0x10b4, 0x10b2, 0x3, 
-       0x2, 0x2, 0x2, 0x10b4, 0x10b5, 0x3, 0x2, 0x2, 0x2, 0x10b5, 0x1114, 
-       0x3, 0x2, 0x2, 0x2, 0x10b6, 0x10b4, 0x3, 0x2, 0x2, 0x2, 0x10b7, 0x10b8, 
-       0x7, 0x56, 0x2, 0x2, 0x10b8, 0x10b9, 0x7, 0x43, 0x2, 0x2, 0x10b9, 
-       0x10ba, 0x7, 0x50, 0x2, 0x2, 0x10ba, 0x10bb, 0x7, 0x49, 0x2, 0x2, 
-       0x10bb, 0x10bc, 0x7, 0x47, 0x2, 0x2, 0x10bc, 0x10bd, 0x7, 0x50, 0x2, 
-       0x2, 0x10bd, 0x10be, 0x7, 0x56, 0x2, 0x2, 0x10be, 0x10c2, 0x3, 0x2, 
-       0x2, 0x2, 0x10bf, 0x10c1, 0x5, 0x2d7, 0x16c, 0x2, 0x10c0, 0x10bf, 
-       0x3, 0x2, 0x2, 0x2, 0x10c1, 0x10c4, 0x3, 0x2, 0x2, 0x2, 0x10c2, 0x10c0, 
-       0x3, 0x2, 0x2, 0x2, 0x10c2, 0x10c3, 0x3, 0x2, 0x2, 0x2, 0x10c3, 0x1114, 
-       0x3, 0x2, 0x2, 0x2, 0x10c4, 0x10c2, 0x3, 0x2, 0x2, 0x2, 0x10c5, 0x10c6, 
-       0x7, 0x56, 0x2, 0x2, 0x10c6, 0x10c7, 0x7, 0x47, 0x2, 0x2, 0x10c7, 
-       0x10c8, 0x7, 0x5a, 0x2, 0x2, 0x10c8, 0x10c9, 0x7, 0x45, 0x2, 0x2, 
-       0x10c9, 0x10ca, 0x7, 0x51, 0x2, 0x2, 0x10ca, 0x10cb, 0x7, 0x51, 0x2, 
-       0x2, 0x10cb, 0x10cc, 0x7, 0x54, 0x2, 0x2, 0x10cc, 0x10cd, 0x7, 0x46, 
-       0x2, 0x2, 0x10cd, 0x10d1, 0x3, 0x2, 0x2, 0x2, 0x10ce, 0x10d0, 0x5, 
-       0x2d7, 0x16c, 0x2, 0x10cf, 0x10ce, 0x3, 0x2, 0x2, 0x2, 0x10d0, 0x10d3, 
-       0x3, 0x2, 0x2, 0x2, 0x10d1, 0x10cf, 0x3, 0x2, 0x2, 0x2, 0x10d1, 0x10d2, 
-       0x3, 0x2, 0x2, 0x2, 0x10d2, 0x1114, 0x3, 0x2, 0x2, 0x2, 0x10d3, 0x10d1, 
-       0x3, 0x2, 0x2, 0x2, 0x10d4, 0x10d5, 0x7, 0x48, 0x2, 0x2, 0x10d5, 
-       0x10d6, 0x7, 0x51, 0x2, 0x2, 0x10d6, 0x1114, 0x7, 0x49, 0x2, 0x2, 
-       0x10d7, 0x10d8, 0x7, 0x56, 0x2, 0x2, 0x10d8, 0x10d9, 0x7, 0x47, 0x2, 
-       0x2, 0x10d9, 0x10da, 0x7, 0x55, 0x2, 0x2, 0x10da, 0x10db, 0x7, 0x55, 
-       0x2, 0x2, 0x10db, 0x10dc, 0x7, 0x48, 0x2, 0x2, 0x10dc, 0x10dd, 0x7, 
-       0x43, 0x2, 0x2, 0x10dd, 0x10de, 0x7, 0x45, 0x2, 0x2, 0x10de, 0x10df, 
-       0x7, 0x56, 0x2, 0x2, 0x10df, 0x10e0, 0x7, 0x51, 0x2, 0x2, 0x10e0, 
-       0x10e1, 0x7, 0x54, 0x2, 0x2, 0x10e1, 0x10e5, 0x3, 0x2, 0x2, 0x2, 
-       0x10e2, 0x10e4, 0x5, 0x2d7, 0x16c, 0x2, 0x10e3, 0x10e2, 0x3, 0x2, 
-       0x2, 0x2, 0x10e4, 0x10e7, 0x3, 0x2, 0x2, 0x2, 0x10e5, 0x10e3, 0x3, 
-       0x2, 0x2, 0x2, 0x10e5, 0x10e6, 0x3, 0x2, 0x2, 0x2, 0x10e6, 0x1114, 
-       0x3, 0x2, 0x2, 0x2, 0x10e7, 0x10e5, 0x3, 0x2, 0x2, 0x2, 0x10e8, 0x10e9, 
-       0x7, 0x56, 0x2, 0x2, 0x10e9, 0x10ea, 0x7, 0x47, 0x2, 0x2, 0x10ea, 
-       0x10eb, 0x7, 0x5a, 0x2, 0x2, 0x10eb, 0x10ec, 0x7, 0x45, 0x2, 0x2, 
-       0x10ec, 0x10ed, 0x7, 0x51, 0x2, 0x2, 0x10ed, 0x10ee, 0x7, 0x51, 0x2, 
-       0x2, 0x10ee, 0x10ef, 0x7, 0x54, 0x2, 0x2, 0x10ef, 0x10f0, 0x7, 0x46, 
-       0x2, 0x2, 0x10f0, 0x10f4, 0x3, 0x2, 0x2, 0x2, 0x10f1, 0x10f3, 0x5, 
-       0x2d7, 0x16c, 0x2, 0x10f2, 0x10f1, 0x3, 0x2, 0x2, 0x2, 0x10f3, 0x10f6, 
-       0x3, 0x2, 0x2, 0x2, 0x10f4, 0x10f2, 0x3, 0x2, 0x2, 0x2, 0x10f4, 0x10f5, 
-       0x3, 0x2, 0x2, 0x2, 0x10f5, 0x1114, 0x3, 0x2, 0x2, 0x2, 0x10f6, 0x10f4, 
-       0x3, 0x2, 0x2, 0x2, 0x10f7, 0x10f8, 0x7, 0x58, 0x2, 0x2, 0x10f8, 
-       0x10f9, 0x7, 0x48, 0x2, 0x2, 0x10f9, 0x10fa, 0x7, 0x43, 0x2, 0x2, 
-       0x10fa, 0x10fb, 0x7, 0x45, 0x2, 0x2, 0x10fb, 0x1114, 0x7, 0x47, 0x2, 
-       0x2, 0x10fc, 0x10fd, 0x7, 0x58, 0x2, 0x2, 0x10fd, 0x10fe, 0x7, 0x52, 
-       0x2, 0x2, 0x10fe, 0x10ff, 0x7, 0x51, 0x2, 0x2, 0x10ff, 0x1100, 0x7, 
-       0x55, 0x2, 0x2, 0x1100, 0x1104, 0x3, 0x2, 0x2, 0x2, 0x1101, 0x1103, 
-       0x5, 0x2d7, 0x16c, 0x2, 0x1102, 0x1101, 0x3, 0x2, 0x2, 0x2, 0x1103, 
-       0x1106, 0x3, 0x2, 0x2, 0x2, 0x1104, 0x1102, 0x3, 0x2, 0x2, 0x2, 0x1104, 
-       0x1105, 0x3, 0x2, 0x2, 0x2, 0x1105, 0x1114, 0x3, 0x2, 0x2, 0x2, 0x1106, 
-       0x1104, 0x3, 0x2, 0x2, 0x2, 0x1107, 0x1108, 0x7, 0x46, 0x2, 0x2, 
-       0x1108, 0x1109, 0x7, 0x47, 0x2, 0x2, 0x1109, 0x110a, 0x7, 0x52, 0x2, 
-       0x2, 0x110a, 0x110b, 0x7, 0x56, 0x2, 0x2, 0x110b, 0x110c, 0x7, 0x4a, 
-       0x2, 0x2, 0x110c, 0x1110, 0x3, 0x2, 0x2, 0x2, 0x110d, 0x110f, 0x5, 
-       0x2d7, 0x16c, 0x2, 0x110e, 0x110d, 0x3, 0x2, 0x2, 0x2, 0x110f, 0x1112, 
-       0x3, 0x2, 0x2, 0x2, 0x1110, 0x110e, 0x3, 0x2, 0x2, 0x2, 0x1110, 0x1111, 
-       0x3, 0x2, 0x2, 0x2, 0x1111, 0x1114, 0x3, 0x2, 0x2, 0x2, 0x1112, 0x1110, 
-       0x3, 0x2, 0x2, 0x2, 0x1113, 0x1046, 0x3, 0x2, 0x2, 0x2, 0x1113, 0x1055, 
-       0x3, 0x2, 0x2, 0x2, 0x1113, 0x1068, 0x3, 0x2, 0x2, 0x2, 0x1113, 0x107a, 
-       0x3, 0x2, 0x2, 0x2, 0x1113, 0x1086, 0x3, 0x2, 0x2, 0x2, 0x1113, 0x1093, 
-       0x3, 0x2, 0x2, 0x2, 0x1113, 0x10a2, 0x3, 0x2, 0x2, 0x2, 0x1113, 0x10ab, 
-       0x3, 0x2, 0x2, 0x2, 0x1113, 0x10b7, 0x3, 0x2, 0x2, 0x2, 0x1113, 0x10c5, 
-       0x3, 0x2, 0x2, 0x2, 0x1113, 0x10d4, 0x3, 0x2, 0x2, 0x2, 0x1113, 0x10d7, 
-       0x3, 0x2, 0x2, 0x2, 0x1113, 0x10e8, 0x3, 0x2, 0x2, 0x2, 0x1113, 0x10f7, 
-       0x3, 0x2, 0x2, 0x2, 0x1113, 0x10fc, 0x3, 0x2, 0x2, 0x2, 0x1113, 0x1107, 
-       0x3, 0x2, 0x2, 0x2, 0x1114, 0x2d0, 0x3, 0x2, 0x2, 0x2, 0x1115, 0x1116, 
-       0x7, 0x55, 0x2, 0x2, 0x1116, 0x1117, 0x7, 0x58, 0x2, 0x2, 0x1117, 
-       0x1118, 0x7, 0x61, 0x2, 0x2, 0x1118, 0x111d, 0x3, 0x2, 0x2, 0x2, 
-       0x1119, 0x111c, 0x5, 0x2d5, 0x16b, 0x2, 0x111a, 0x111c, 0x5, 0x2d7, 
-       0x16c, 0x2, 0x111b, 0x1119, 0x3, 0x2, 0x2, 0x2, 0x111b, 0x111a, 0x3, 
-       0x2, 0x2, 0x2, 0x111c, 0x111f, 0x3, 0x2, 0x2, 0x2, 0x111d, 0x111b, 
-       0x3, 0x2, 0x2, 0x2, 0x111d, 0x111e, 0x3, 0x2, 0x2, 0x2, 0x111e, 0x1142, 
-       0x3, 0x2, 0x2, 0x2, 0x111f, 0x111d, 0x3, 0x2, 0x2, 0x2, 0x1120, 0x1121, 
-       0x7, 0x55, 0x2, 0x2, 0x1121, 0x1122, 0x7, 0x78, 0x2, 0x2, 0x1122, 
-       0x1123, 0x7, 0x61, 0x2, 0x2, 0x1123, 0x1128, 0x3, 0x2, 0x2, 0x2, 
-       0x1124, 0x1127, 0x5, 0x2d5, 0x16b, 0x2, 0x1125, 0x1127, 0x5, 0x2d7, 
-       0x16c, 0x2, 0x1126, 0x1124, 0x3, 0x2, 0x2, 0x2, 0x1126, 0x1125, 0x3, 
-       0x2, 0x2, 0x2, 0x1127, 0x112a, 0x3, 0x2, 0x2, 0x2, 0x1128, 0x1126, 
-       0x3, 0x2, 0x2, 0x2, 0x1128, 0x1129, 0x3, 0x2, 0x2, 0x2, 0x1129, 0x1142, 
-       0x3, 0x2, 0x2, 0x2, 0x112a, 0x1128, 0x3, 0x2, 0x2, 0x2, 0x112b, 0x112c, 
-       0x7, 0x75, 0x2, 0x2, 0x112c, 0x112d, 0x7, 0x58, 0x2, 0x2, 0x112d, 
-       0x112e, 0x7, 0x61, 0x2, 0x2, 0x112e, 0x1133, 0x3, 0x2, 0x2, 0x2, 
-       0x112f, 0x1132, 0x5, 0x2d5, 0x16b, 0x2, 0x1130, 0x1132, 0x5, 0x2d7, 
-       0x16c, 0x2, 0x1131, 0x112f, 0x3, 0x2, 0x2, 0x2, 0x1131, 0x1130, 0x3, 
-       0x2, 0x2, 0x2, 0x1132, 0x1135, 0x3, 0x2, 0x2, 0x2, 0x1133, 0x1131, 
-       0x3, 0x2, 0x2, 0x2, 0x1133, 0x1134, 0x3, 0x2, 0x2, 0x2, 0x1134, 0x1142, 
-       0x3, 0x2, 0x2, 0x2, 0x1135, 0x1133, 0x3, 0x2, 0x2, 0x2, 0x1136, 0x1137, 
-       0x7, 0x75, 0x2, 0x2, 0x1137, 0x1138, 0x7, 0x78, 0x2, 0x2, 0x1138, 
-       0x1139, 0x7, 0x61, 0x2, 0x2, 0x1139, 0x113e, 0x3, 0x2, 0x2, 0x2, 
-       0x113a, 0x113d, 0x5, 0x2d5, 0x16b, 0x2, 0x113b, 0x113d, 0x5, 0x2d7, 
-       0x16c, 0x2, 0x113c, 0x113a, 0x3, 0x2, 0x2, 0x2, 0x113c, 0x113b, 0x3, 
-       0x2, 0x2, 0x2, 0x113d, 0x1140, 0x3, 0x2, 0x2, 0x2, 0x113e, 0x113c, 
-       0x3, 0x2, 0x2, 0x2, 0x113e, 0x113f, 0x3, 0x2, 0x2, 0x2, 0x113f, 0x1142, 
-       0x3, 0x2, 0x2, 0x2, 0x1140, 0x113e, 0x3, 0x2, 0x2, 0x2, 0x1141, 0x1115, 
-       0x3, 0x2, 0x2, 0x2, 0x1141, 0x1120, 0x3, 0x2, 0x2, 0x2, 0x1141, 0x112b, 
-       0x3, 0x2, 0x2, 0x2, 0x1141, 0x1136, 0x3, 0x2, 0x2, 0x2, 0x1142, 0x2d2, 
-       0x3, 0x2, 0x2, 0x2, 0x1143, 0x1148, 0x5, 0x2d5, 0x16b, 0x2, 0x1144, 
-       0x1147, 0x5, 0x2d5, 0x16b, 0x2, 0x1145, 0x1147, 0x5, 0x2d7, 0x16c, 
-       0x2, 0x1146, 0x1144, 0x3, 0x2, 0x2, 0x2, 0x1146, 0x1145, 0x3, 0x2, 
-       0x2, 0x2, 0x1147, 0x114a, 0x3, 0x2, 0x2, 0x2, 0x1148, 0x1146, 0x3, 
-       0x2, 0x2, 0x2, 0x1148, 0x1149, 0x3, 0x2, 0x2, 0x2, 0x1149, 0x2d4, 
-       0x3, 0x2, 0x2, 0x2, 0x114a, 0x1148, 0x3, 0x2, 0x2, 0x2, 0x114b, 0x114c, 
-       0x9, 0x2, 0x2, 0x2, 0x114c, 0x2d6, 0x3, 0x2, 0x2, 0x2, 0x114d, 0x114e, 
-       0x9, 0x3, 0x2, 0x2, 0x114e, 0x2d8, 0x3, 0x2, 0x2, 0x2, 0x114f, 0x1151, 
-       0x5, 0x2d7, 0x16c, 0x2, 0x1150, 0x114f, 0x3, 0x2, 0x2, 0x2, 0x1151, 
-       0x1152, 0x3, 0x2, 0x2, 0x2, 0x1152, 0x1150, 0x3, 0x2, 0x2, 0x2, 0x1152, 
-       0x1153, 0x3, 0x2, 0x2, 0x2, 0x1153, 0x2da, 0x3, 0x2, 0x2, 0x2, 0x1154, 
-       0x1155, 0x7, 0x32, 0x2, 0x2, 0x1155, 0x1159, 0x7, 0x7a, 0x2, 0x2, 
-       0x1156, 0x1157, 0x7, 0x32, 0x2, 0x2, 0x1157, 0x1159, 0x7, 0x5a, 0x2, 
-       0x2, 0x1158, 0x1154, 0x3, 0x2, 0x2, 0x2, 0x1158, 0x1156, 0x3, 0x2, 
-       0x2, 0x2, 0x1159, 0x115b, 0x3, 0x2, 0x2, 0x2, 0x115a, 0x115c, 0x5, 
-       0x2dd, 0x16f, 0x2, 0x115b, 0x115a, 0x3, 0x2, 0x2, 0x2, 0x115c, 0x115d, 
-       0x3, 0x2, 0x2, 0x2, 0x115d, 0x115b, 0x3, 0x2, 0x2, 0x2, 0x115d, 0x115e, 
-       0x3, 0x2, 0x2, 0x2, 0x115e, 0x2dc, 0x3, 0x2, 0x2, 0x2, 0x115f, 0x1160, 
-       0x9, 0x4, 0x2, 0x2, 0x1160, 0x2de, 0x3, 0x2, 0x2, 0x2, 0x1161, 0x1163, 
-       0x5, 0x2e5, 0x173, 0x2, 0x1162, 0x1161, 0x3, 0x2, 0x2, 0x2, 0x1162, 
-       0x1163, 0x3, 0x2, 0x2, 0x2, 0x1163, 0x1164, 0x3, 0x2, 0x2, 0x2, 0x1164, 
-       0x1165, 0x7, 0x30, 0x2, 0x2, 0x1165, 0x116a, 0x5, 0x2e5, 0x173, 0x2, 
-       0x1166, 0x1167, 0x5, 0x2e5, 0x173, 0x2, 0x1167, 0x1168, 0x7, 0x30, 
-       0x2, 0x2, 0x1168, 0x116a, 0x3, 0x2, 0x2, 0x2, 0x1169, 0x1162, 0x3, 
-       0x2, 0x2, 0x2, 0x1169, 0x1166, 0x3, 0x2, 0x2, 0x2, 0x116a, 0x2e0, 
-       0x3, 0x2, 0x2, 0x2, 0x116b, 0x116d, 0x7, 0x67, 0x2, 0x2, 0x116c, 
-       0x116e, 0x5, 0x2e3, 0x172, 0x2, 0x116d, 0x116c, 0x3, 0x2, 0x2, 0x2, 
-       0x116d, 0x116e, 0x3, 0x2, 0x2, 0x2, 0x116e, 0x116f, 0x3, 0x2, 0x2, 
-       0x2, 0x116f, 0x1176, 0x5, 0x2e5, 0x173, 0x2, 0x1170, 0x1172, 0x7, 
-       0x47, 0x2, 0x2, 0x1171, 0x1173, 0x5, 0x2e3, 0x172, 0x2, 0x1172, 0x1171, 
-       0x3, 0x2, 0x2, 0x2, 0x1172, 0x1173, 0x3, 0x2, 0x2, 0x2, 0x1173, 0x1174, 
-       0x3, 0x2, 0x2, 0x2, 0x1174, 0x1176, 0x5, 0x2e5, 0x173, 0x2, 0x1175, 
-       0x116b, 0x3, 0x2, 0x2, 0x2, 0x1175, 0x1170, 0x3, 0x2, 0x2, 0x2, 0x1176, 
-       0x2e2, 0x3, 0x2, 0x2, 0x2, 0x1177, 0x1178, 0x9, 0x5, 0x2, 0x2, 0x1178, 
-       0x2e4, 0x3, 0x2, 0x2, 0x2, 0x1179, 0x117b, 0x5, 0x2d7, 0x16c, 0x2, 
-       0x117a, 0x1179, 0x3, 0x2, 0x2, 0x2, 0x117b, 0x117c, 0x3, 0x2, 0x2, 
-       0x2, 0x117c, 0x117a, 0x3, 0x2, 0x2, 0x2, 0x117c, 0x117d, 0x3, 0x2, 
-       0x2, 0x2, 0x117d, 0x2e6, 0x3, 0x2, 0x2, 0x2, 0x117e, 0x1180, 0x5, 
-       0x2dd, 0x16f, 0x2, 0x117f, 0x117e, 0x3, 0x2, 0x2, 0x2, 0x1180, 0x1181, 
-       0x3, 0x2, 0x2, 0x2, 0x1181, 0x117f, 0x3, 0x2, 0x2, 0x2, 0x1181, 0x1182, 
-       0x3, 0x2, 0x2, 0x2, 0x1182, 0x2e8, 0x3, 0x2, 0x2, 0x2, 0x1183, 0x1185, 
-       0x9, 0x6, 0x2, 0x2, 0x1184, 0x1183, 0x3, 0x2, 0x2, 0x2, 0x1184, 0x1185, 
-       0x3, 0x2, 0x2, 0x2, 0x1185, 0x1187, 0x3, 0x2, 0x2, 0x2, 0x1186, 0x1188, 
-       0x9, 0x7, 0x2, 0x2, 0x1187, 0x1186, 0x3, 0x2, 0x2, 0x2, 0x1187, 0x1188, 
-       0x3, 0x2, 0x2, 0x2, 0x1188, 0x118a, 0x3, 0x2, 0x2, 0x2, 0x1189, 0x118b, 
-       0x9, 0x7, 0x2, 0x2, 0x118a, 0x1189, 0x3, 0x2, 0x2, 0x2, 0x118a, 0x118b, 
-       0x3, 0x2, 0x2, 0x2, 0x118b, 0x1193, 0x3, 0x2, 0x2, 0x2, 0x118c, 0x118e, 
-       0x9, 0x7, 0x2, 0x2, 0x118d, 0x118c, 0x3, 0x2, 0x2, 0x2, 0x118d, 0x118e, 
-       0x3, 0x2, 0x2, 0x2, 0x118e, 0x1190, 0x3, 0x2, 0x2, 0x2, 0x118f, 0x1191, 
-       0x9, 0x6, 0x2, 0x2, 0x1190, 0x118f, 0x3, 0x2, 0x2, 0x2, 0x1190, 0x1191, 
-       0x3, 0x2, 0x2, 0x2, 0x1191, 0x1193, 0x3, 0x2, 0x2, 0x2, 0x1192, 0x1184, 
-       0x3, 0x2, 0x2, 0x2, 0x1192, 0x118d, 0x3, 0x2, 0x2, 0x2, 0x1193, 0x2ea, 
-       0x3, 0x2, 0x2, 0x2, 0x1194, 0x1196, 0x5, 0x2d9, 0x16d, 0x2, 0x1195, 
-       0x1197, 0x5, 0x2e9, 0x175, 0x2, 0x1196, 0x1195, 0x3, 0x2, 0x2, 0x2, 
-       0x1196, 0x1197, 0x3, 0x2, 0x2, 0x2, 0x1197, 0x119d, 0x3, 0x2, 0x2, 
-       0x2, 0x1198, 0x119a, 0x5, 0x2db, 0x16e, 0x2, 0x1199, 0x119b, 0x5, 
-       0x2e9, 0x175, 0x2, 0x119a, 0x1199, 0x3, 0x2, 0x2, 0x2, 0x119a, 0x119b, 
-       0x3, 0x2, 0x2, 0x2, 0x119b, 0x119d, 0x3, 0x2, 0x2, 0x2, 0x119c, 0x1194, 
-       0x3, 0x2, 0x2, 0x2, 0x119c, 0x1198, 0x3, 0x2, 0x2, 0x2, 0x119d, 0x2ec, 
-       0x3, 0x2, 0x2, 0x2, 0x119e, 0x119f, 0x9, 0x8, 0x2, 0x2, 0x119f, 0x2ee, 
-       0x3, 0x2, 0x2, 0x2, 0x11a0, 0x11a2, 0x5, 0x2df, 0x170, 0x2, 0x11a1, 
-       0x11a3, 0x5, 0x2e1, 0x171, 0x2, 0x11a2, 0x11a1, 0x3, 0x2, 0x2, 0x2, 
-       0x11a2, 0x11a3, 0x3, 0x2, 0x2, 0x2, 0x11a3, 0x11a5, 0x3, 0x2, 0x2, 
-       0x2, 0x11a4, 0x11a6, 0x5, 0x2ed, 0x177, 0x2, 0x11a5, 0x11a4, 0x3, 
-       0x2, 0x2, 0x2, 0x11a5, 0x11a6, 0x3, 0x2, 0x2, 0x2, 0x11a6, 0x11ad, 
-       0x3, 0x2, 0x2, 0x2, 0x11a7, 0x11a8, 0x5, 0x2e5, 0x173, 0x2, 0x11a8, 
-       0x11aa, 0x5, 0x2e1, 0x171, 0x2, 0x11a9, 0x11ab, 0x5, 0x2ed, 0x177, 
-       0x2, 0x11aa, 0x11a9, 0x3, 0x2, 0x2, 0x2, 0x11aa, 0x11ab, 0x3, 0x2, 
-       0x2, 0x2, 0x11ab, 0x11ad, 0x3, 0x2, 0x2, 0x2, 0x11ac, 0x11a0, 0x3, 
-       0x2, 0x2, 0x2, 0x11ac, 0x11a7, 0x3, 0x2, 0x2, 0x2, 0x11ad, 0x2f0, 
-       0x3, 0x2, 0x2, 0x2, 0x11ae, 0x11af, 0x5, 0x2f3, 0x17a, 0x2, 0x11af, 
-       0x2f2, 0x3, 0x2, 0x2, 0x2, 0x11b0, 0x11b1, 0x7, 0x5e, 0x2, 0x2, 0x11b1, 
-       0x11b2, 0x9, 0x9, 0x2, 0x2, 0x11b2, 0x2f4, 0x3, 0x2, 0x2, 0x2, 0x11b3, 
-       0x11b5, 0x7, 0x24, 0x2, 0x2, 0x11b4, 0x11b6, 0x5, 0x2f7, 0x17c, 0x2, 
-       0x11b5, 0x11b4, 0x3, 0x2, 0x2, 0x2, 0x11b5, 0x11b6, 0x3, 0x2, 0x2, 
-       0x2, 0x11b6, 0x11b7, 0x3, 0x2, 0x2, 0x2, 0x11b7, 0x11b8, 0x7, 0x24, 
-       0x2, 0x2, 0x11b8, 0x2f6, 0x3, 0x2, 0x2, 0x2, 0x11b9, 0x11bb, 0x5, 
-       0x2f9, 0x17d, 0x2, 0x11ba, 0x11b9, 0x3, 0x2, 0x2, 0x2, 0x11bb, 0x11bc, 
-       0x3, 0x2, 0x2, 0x2, 0x11bc, 0x11ba, 0x3, 0x2, 0x2, 0x2, 0x11bc, 0x11bd, 
-       0x3, 0x2, 0x2, 0x2, 0x11bd, 0x2f8, 0x3, 0x2, 0x2, 0x2, 0x11be, 0x11c1, 
-       0xa, 0xa, 0x2, 0x2, 0x11bf, 0x11c1, 0x5, 0x2f1, 0x179, 0x2, 0x11c0, 
-       0x11be, 0x3, 0x2, 0x2, 0x2, 0x11c0, 0x11bf, 0x3, 0x2, 0x2, 0x2, 0x11c1, 
-       0x2fa, 0x3, 0x2, 0x2, 0x2, 0x11c2, 0x11c4, 0x7, 0x25, 0x2, 0x2, 0x11c3, 
-       0x11c5, 0x5, 0x2ff, 0x180, 0x2, 0x11c4, 0x11c3, 0x3, 0x2, 0x2, 0x2, 
+    0x2, 0x783, 0x784, 0x7, 0x33, 0x2, 0x2, 0x784, 0x785, 0x7, 0x7a, 0x2, 
+       0x2, 0x785, 0x786, 0x7, 0x35, 0x2, 0x2, 0x786, 0x104, 0x3, 0x2, 0x2, 
+       0x2, 0x787, 0x788, 0x7, 0x6b, 0x2, 0x2, 0x788, 0x789, 0x7, 0x70, 
+       0x2, 0x2, 0x789, 0x78a, 0x7, 0x76, 0x2, 0x2, 0x78a, 0x78b, 0x7, 0x33, 
+       0x2, 0x2, 0x78b, 0x78c, 0x7, 0x7a, 0x2, 0x2, 0x78c, 0x78d, 0x7, 0x36, 
+       0x2, 0x2, 0x78d, 0x106, 0x3, 0x2, 0x2, 0x2, 0x78e, 0x78f, 0x7, 0x6b, 
+       0x2, 0x2, 0x78f, 0x790, 0x7, 0x70, 0x2, 0x2, 0x790, 0x791, 0x7, 0x76, 
+       0x2, 0x2, 0x791, 0x792, 0x7, 0x34, 0x2, 0x2, 0x792, 0x793, 0x7, 0x7a, 
+       0x2, 0x2, 0x793, 0x794, 0x7, 0x33, 0x2, 0x2, 0x794, 0x108, 0x3, 0x2, 
+       0x2, 0x2, 0x795, 0x796, 0x7, 0x6b, 0x2, 0x2, 0x796, 0x797, 0x7, 0x70, 
+       0x2, 0x2, 0x797, 0x798, 0x7, 0x76, 0x2, 0x2, 0x798, 0x799, 0x7, 0x34, 
+       0x2, 0x2, 0x799, 0x79a, 0x7, 0x7a, 0x2, 0x2, 0x79a, 0x79b, 0x7, 0x34, 
+       0x2, 0x2, 0x79b, 0x10a, 0x3, 0x2, 0x2, 0x2, 0x79c, 0x79d, 0x7, 0x6b, 
+       0x2, 0x2, 0x79d, 0x79e, 0x7, 0x70, 0x2, 0x2, 0x79e, 0x79f, 0x7, 0x76, 
+       0x2, 0x2, 0x79f, 0x7a0, 0x7, 0x34, 0x2, 0x2, 0x7a0, 0x7a1, 0x7, 0x7a, 
+       0x2, 0x2, 0x7a1, 0x7a2, 0x7, 0x35, 0x2, 0x2, 0x7a2, 0x10c, 0x3, 0x2, 
+       0x2, 0x2, 0x7a3, 0x7a4, 0x7, 0x6b, 0x2, 0x2, 0x7a4, 0x7a5, 0x7, 0x70, 
+       0x2, 0x2, 0x7a5, 0x7a6, 0x7, 0x76, 0x2, 0x2, 0x7a6, 0x7a7, 0x7, 0x34, 
+       0x2, 0x2, 0x7a7, 0x7a8, 0x7, 0x7a, 0x2, 0x2, 0x7a8, 0x7a9, 0x7, 0x36, 
+       0x2, 0x2, 0x7a9, 0x10e, 0x3, 0x2, 0x2, 0x2, 0x7aa, 0x7ab, 0x7, 0x6b, 
+       0x2, 0x2, 0x7ab, 0x7ac, 0x7, 0x70, 0x2, 0x2, 0x7ac, 0x7ad, 0x7, 0x76, 
+       0x2, 0x2, 0x7ad, 0x7ae, 0x7, 0x35, 0x2, 0x2, 0x7ae, 0x7af, 0x7, 0x7a, 
+       0x2, 0x2, 0x7af, 0x7b0, 0x7, 0x33, 0x2, 0x2, 0x7b0, 0x110, 0x3, 0x2, 
+       0x2, 0x2, 0x7b1, 0x7b2, 0x7, 0x6b, 0x2, 0x2, 0x7b2, 0x7b3, 0x7, 0x70, 
+       0x2, 0x2, 0x7b3, 0x7b4, 0x7, 0x76, 0x2, 0x2, 0x7b4, 0x7b5, 0x7, 0x35, 
+       0x2, 0x2, 0x7b5, 0x7b6, 0x7, 0x7a, 0x2, 0x2, 0x7b6, 0x7b7, 0x7, 0x34, 
+       0x2, 0x2, 0x7b7, 0x112, 0x3, 0x2, 0x2, 0x2, 0x7b8, 0x7b9, 0x7, 0x6b, 
+       0x2, 0x2, 0x7b9, 0x7ba, 0x7, 0x70, 0x2, 0x2, 0x7ba, 0x7bb, 0x7, 0x76, 
+       0x2, 0x2, 0x7bb, 0x7bc, 0x7, 0x35, 0x2, 0x2, 0x7bc, 0x7bd, 0x7, 0x7a, 
+       0x2, 0x2, 0x7bd, 0x7be, 0x7, 0x35, 0x2, 0x2, 0x7be, 0x114, 0x3, 0x2, 
+       0x2, 0x2, 0x7bf, 0x7c0, 0x7, 0x6b, 0x2, 0x2, 0x7c0, 0x7c1, 0x7, 0x70, 
+       0x2, 0x2, 0x7c1, 0x7c2, 0x7, 0x76, 0x2, 0x2, 0x7c2, 0x7c3, 0x7, 0x35, 
+       0x2, 0x2, 0x7c3, 0x7c4, 0x7, 0x7a, 0x2, 0x2, 0x7c4, 0x7c5, 0x7, 0x36, 
+       0x2, 0x2, 0x7c5, 0x116, 0x3, 0x2, 0x2, 0x2, 0x7c6, 0x7c7, 0x7, 0x6b, 
+       0x2, 0x2, 0x7c7, 0x7c8, 0x7, 0x70, 0x2, 0x2, 0x7c8, 0x7c9, 0x7, 0x76, 
+       0x2, 0x2, 0x7c9, 0x7ca, 0x7, 0x36, 0x2, 0x2, 0x7ca, 0x7cb, 0x7, 0x7a, 
+       0x2, 0x2, 0x7cb, 0x7cc, 0x7, 0x33, 0x2, 0x2, 0x7cc, 0x118, 0x3, 0x2, 
+       0x2, 0x2, 0x7cd, 0x7ce, 0x7, 0x6b, 0x2, 0x2, 0x7ce, 0x7cf, 0x7, 0x70, 
+       0x2, 0x2, 0x7cf, 0x7d0, 0x7, 0x76, 0x2, 0x2, 0x7d0, 0x7d1, 0x7, 0x36, 
+       0x2, 0x2, 0x7d1, 0x7d2, 0x7, 0x7a, 0x2, 0x2, 0x7d2, 0x7d3, 0x7, 0x34, 
+       0x2, 0x2, 0x7d3, 0x11a, 0x3, 0x2, 0x2, 0x2, 0x7d4, 0x7d5, 0x7, 0x6b, 
+       0x2, 0x2, 0x7d5, 0x7d6, 0x7, 0x70, 0x2, 0x2, 0x7d6, 0x7d7, 0x7, 0x76, 
+       0x2, 0x2, 0x7d7, 0x7d8, 0x7, 0x36, 0x2, 0x2, 0x7d8, 0x7d9, 0x7, 0x7a, 
+       0x2, 0x2, 0x7d9, 0x7da, 0x7, 0x35, 0x2, 0x2, 0x7da, 0x11c, 0x3, 0x2, 
+       0x2, 0x2, 0x7db, 0x7dc, 0x7, 0x6b, 0x2, 0x2, 0x7dc, 0x7dd, 0x7, 0x70, 
+       0x2, 0x2, 0x7dd, 0x7de, 0x7, 0x76, 0x2, 0x2, 0x7de, 0x7df, 0x7, 0x36, 
+       0x2, 0x2, 0x7df, 0x7e0, 0x7, 0x7a, 0x2, 0x2, 0x7e0, 0x7e1, 0x7, 0x36, 
+       0x2, 0x2, 0x7e1, 0x11e, 0x3, 0x2, 0x2, 0x2, 0x7e2, 0x7e3, 0x7, 0x6b, 
+       0x2, 0x2, 0x7e3, 0x7e4, 0x7, 0x70, 0x2, 0x2, 0x7e4, 0x7e5, 0x7, 0x76, 
+       0x2, 0x2, 0x7e5, 0x7e6, 0x7, 0x67, 0x2, 0x2, 0x7e6, 0x7e7, 0x7, 0x74, 
+       0x2, 0x2, 0x7e7, 0x7e8, 0x7, 0x68, 0x2, 0x2, 0x7e8, 0x7e9, 0x7, 0x63, 
+       0x2, 0x2, 0x7e9, 0x7ea, 0x7, 0x65, 0x2, 0x2, 0x7ea, 0x7eb, 0x7, 0x67, 
+       0x2, 0x2, 0x7eb, 0x120, 0x3, 0x2, 0x2, 0x2, 0x7ec, 0x7ed, 0x7, 0x6e, 
+       0x2, 0x2, 0x7ed, 0x7ee, 0x7, 0x6b, 0x2, 0x2, 0x7ee, 0x7ef, 0x7, 0x70, 
+       0x2, 0x2, 0x7ef, 0x7f0, 0x7, 0x67, 0x2, 0x2, 0x7f0, 0x122, 0x3, 0x2, 
+       0x2, 0x2, 0x7f1, 0x7f2, 0x7, 0x6e, 0x2, 0x2, 0x7f2, 0x7f3, 0x7, 0x6b, 
+       0x2, 0x2, 0x7f3, 0x7f4, 0x7, 0x70, 0x2, 0x2, 0x7f4, 0x7f5, 0x7, 0x67, 
+       0x2, 0x2, 0x7f5, 0x7f6, 0x7, 0x63, 0x2, 0x2, 0x7f6, 0x7f7, 0x7, 0x66, 
+       0x2, 0x2, 0x7f7, 0x7f8, 0x7, 0x6c, 0x2, 0x2, 0x7f8, 0x124, 0x3, 0x2, 
+       0x2, 0x2, 0x7f9, 0x7fa, 0x7, 0x6e, 0x2, 0x2, 0x7fa, 0x7fb, 0x7, 0x6b, 
+       0x2, 0x2, 0x7fb, 0x7fc, 0x7, 0x70, 0x2, 0x2, 0x7fc, 0x7fd, 0x7, 0x67, 
+       0x2, 0x2, 0x7fd, 0x7fe, 0x7, 0x63, 0x2, 0x2, 0x7fe, 0x7ff, 0x7, 0x74, 
+       0x2, 0x2, 0x7ff, 0x126, 0x3, 0x2, 0x2, 0x2, 0x800, 0x801, 0x7, 0x4e, 
+       0x2, 0x2, 0x801, 0x802, 0x7, 0x6b, 0x2, 0x2, 0x802, 0x803, 0x7, 0x70, 
+       0x2, 0x2, 0x803, 0x804, 0x7, 0x67, 0x2, 0x2, 0x804, 0x805, 0x7, 0x55, 
+       0x2, 0x2, 0x805, 0x806, 0x7, 0x76, 0x2, 0x2, 0x806, 0x807, 0x7, 0x74, 
+       0x2, 0x2, 0x807, 0x808, 0x7, 0x67, 0x2, 0x2, 0x808, 0x809, 0x7, 0x63, 
+       0x2, 0x2, 0x809, 0x80a, 0x7, 0x6f, 0x2, 0x2, 0x80a, 0x128, 0x3, 0x2, 
+       0x2, 0x2, 0x80b, 0x80c, 0x7, 0x6e, 0x2, 0x2, 0x80c, 0x80d, 0x7, 0x71, 
+       0x2, 0x2, 0x80d, 0x80e, 0x7, 0x70, 0x2, 0x2, 0x80e, 0x80f, 0x7, 0x69, 
+       0x2, 0x2, 0x80f, 0x12a, 0x3, 0x2, 0x2, 0x2, 0x810, 0x811, 0x7, 0x6f, 
+       0x2, 0x2, 0x811, 0x812, 0x7, 0x63, 0x2, 0x2, 0x812, 0x813, 0x7, 0x76, 
+       0x2, 0x2, 0x813, 0x814, 0x7, 0x74, 0x2, 0x2, 0x814, 0x815, 0x7, 0x6b, 
+       0x2, 0x2, 0x815, 0x816, 0x7, 0x7a, 0x2, 0x2, 0x816, 0x12c, 0x3, 0x2, 
+       0x2, 0x2, 0x817, 0x818, 0x7, 0x70, 0x2, 0x2, 0x818, 0x819, 0x7, 0x71, 
+       0x2, 0x2, 0x819, 0x81a, 0x7, 0x6b, 0x2, 0x2, 0x81a, 0x81b, 0x7, 0x70, 
+       0x2, 0x2, 0x81b, 0x81c, 0x7, 0x76, 0x2, 0x2, 0x81c, 0x81d, 0x7, 0x67, 
+       0x2, 0x2, 0x81d, 0x81e, 0x7, 0x74, 0x2, 0x2, 0x81e, 0x81f, 0x7, 0x72, 
+       0x2, 0x2, 0x81f, 0x820, 0x7, 0x71, 0x2, 0x2, 0x820, 0x821, 0x7, 0x6e, 
+       0x2, 0x2, 0x821, 0x822, 0x7, 0x63, 0x2, 0x2, 0x822, 0x823, 0x7, 0x76, 
+       0x2, 0x2, 0x823, 0x824, 0x7, 0x6b, 0x2, 0x2, 0x824, 0x825, 0x7, 0x71, 
+       0x2, 0x2, 0x825, 0x826, 0x7, 0x70, 0x2, 0x2, 0x826, 0x12e, 0x3, 0x2, 
+       0x2, 0x2, 0x827, 0x828, 0x7, 0x70, 0x2, 0x2, 0x828, 0x829, 0x7, 0x71, 
+       0x2, 0x2, 0x829, 0x82a, 0x7, 0x72, 0x2, 0x2, 0x82a, 0x82b, 0x7, 0x67, 
+       0x2, 0x2, 0x82b, 0x82c, 0x7, 0x74, 0x2, 0x2, 0x82c, 0x82d, 0x7, 0x75, 
+       0x2, 0x2, 0x82d, 0x82e, 0x7, 0x72, 0x2, 0x2, 0x82e, 0x82f, 0x7, 0x67, 
+       0x2, 0x2, 0x82f, 0x830, 0x7, 0x65, 0x2, 0x2, 0x830, 0x831, 0x7, 0x76, 
+       0x2, 0x2, 0x831, 0x832, 0x7, 0x6b, 0x2, 0x2, 0x832, 0x833, 0x7, 0x78, 
+       0x2, 0x2, 0x833, 0x834, 0x7, 0x67, 0x2, 0x2, 0x834, 0x130, 0x3, 0x2, 
+       0x2, 0x2, 0x835, 0x836, 0x7, 0x71, 0x2, 0x2, 0x836, 0x837, 0x7, 0x72, 
+       0x2, 0x2, 0x837, 0x838, 0x7, 0x76, 0x2, 0x2, 0x838, 0x839, 0x7, 0x6b, 
+       0x2, 0x2, 0x839, 0x83a, 0x7, 0x71, 0x2, 0x2, 0x83a, 0x83b, 0x7, 0x70, 
+       0x2, 0x2, 0x83b, 0x132, 0x3, 0x2, 0x2, 0x2, 0x83c, 0x83d, 0x7, 0x71, 
+       0x2, 0x2, 0x83d, 0x83e, 0x7, 0x77, 0x2, 0x2, 0x83e, 0x83f, 0x7, 0x76, 
+       0x2, 0x2, 0x83f, 0x134, 0x3, 0x2, 0x2, 0x2, 0x840, 0x841, 0x7, 0x51, 
+       0x2, 0x2, 0x841, 0x842, 0x7, 0x77, 0x2, 0x2, 0x842, 0x843, 0x7, 0x76, 
+       0x2, 0x2, 0x843, 0x844, 0x7, 0x72, 0x2, 0x2, 0x844, 0x845, 0x7, 0x77, 
+       0x2, 0x2, 0x845, 0x846, 0x7, 0x76, 0x2, 0x2, 0x846, 0x847, 0x7, 0x52, 
+       0x2, 0x2, 0x847, 0x848, 0x7, 0x63, 0x2, 0x2, 0x848, 0x849, 0x7, 0x76, 
+       0x2, 0x2, 0x849, 0x84a, 0x7, 0x65, 0x2, 0x2, 0x84a, 0x84b, 0x7, 0x6a, 
+       0x2, 0x2, 0x84b, 0x136, 0x3, 0x2, 0x2, 0x2, 0x84c, 0x84d, 0x7, 0x71, 
+       0x2, 0x2, 0x84d, 0x84e, 0x7, 0x78, 0x2, 0x2, 0x84e, 0x84f, 0x7, 0x67, 
+       0x2, 0x2, 0x84f, 0x850, 0x7, 0x74, 0x2, 0x2, 0x850, 0x851, 0x7, 0x74, 
+       0x2, 0x2, 0x851, 0x852, 0x7, 0x6b, 0x2, 0x2, 0x852, 0x853, 0x7, 0x66, 
+       0x2, 0x2, 0x853, 0x854, 0x7, 0x67, 0x2, 0x2, 0x854, 0x138, 0x3, 0x2, 
+       0x2, 0x2, 0x855, 0x856, 0x7, 0x72, 0x2, 0x2, 0x856, 0x857, 0x7, 0x63, 
+       0x2, 0x2, 0x857, 0x858, 0x7, 0x74, 0x2, 0x2, 0x858, 0x859, 0x7, 0x76, 
+       0x2, 0x2, 0x859, 0x85a, 0x7, 0x6b, 0x2, 0x2, 0x85a, 0x85b, 0x7, 0x63, 
+       0x2, 0x2, 0x85b, 0x85c, 0x7, 0x6e, 0x2, 0x2, 0x85c, 0x13a, 0x3, 0x2, 
+       0x2, 0x2, 0x85d, 0x85e, 0x7, 0x72, 0x2, 0x2, 0x85e, 0x85f, 0x7, 0x63, 
+       0x2, 0x2, 0x85f, 0x860, 0x7, 0x65, 0x2, 0x2, 0x860, 0x861, 0x7, 0x6d, 
+       0x2, 0x2, 0x861, 0x862, 0x7, 0x71, 0x2, 0x2, 0x862, 0x863, 0x7, 0x68, 
+       0x2, 0x2, 0x863, 0x864, 0x7, 0x68, 0x2, 0x2, 0x864, 0x865, 0x7, 0x75, 
+       0x2, 0x2, 0x865, 0x866, 0x7, 0x67, 0x2, 0x2, 0x866, 0x867, 0x7, 0x76, 
+       0x2, 0x2, 0x867, 0x13c, 0x3, 0x2, 0x2, 0x2, 0x868, 0x869, 0x7, 0x72, 
+       0x2, 0x2, 0x869, 0x86a, 0x7, 0x71, 0x2, 0x2, 0x86a, 0x86b, 0x7, 0x6b, 
+       0x2, 0x2, 0x86b, 0x86c, 0x7, 0x70, 0x2, 0x2, 0x86c, 0x86d, 0x7, 0x76, 
+       0x2, 0x2, 0x86d, 0x13e, 0x3, 0x2, 0x2, 0x2, 0x86e, 0x86f, 0x7, 0x52, 
+       0x2, 0x2, 0x86f, 0x870, 0x7, 0x71, 0x2, 0x2, 0x870, 0x871, 0x7, 0x6b, 
+       0x2, 0x2, 0x871, 0x872, 0x7, 0x70, 0x2, 0x2, 0x872, 0x873, 0x7, 0x76, 
+       0x2, 0x2, 0x873, 0x874, 0x7, 0x55, 0x2, 0x2, 0x874, 0x875, 0x7, 0x76, 
+       0x2, 0x2, 0x875, 0x876, 0x7, 0x74, 0x2, 0x2, 0x876, 0x877, 0x7, 0x67, 
+       0x2, 0x2, 0x877, 0x878, 0x7, 0x63, 0x2, 0x2, 0x878, 0x879, 0x7, 0x6f, 
+       0x2, 0x2, 0x879, 0x140, 0x3, 0x2, 0x2, 0x2, 0x87a, 0x87b, 0x7, 0x72, 
+       0x2, 0x2, 0x87b, 0x87c, 0x7, 0x74, 0x2, 0x2, 0x87c, 0x87d, 0x7, 0x67, 
+       0x2, 0x2, 0x87d, 0x87e, 0x7, 0x65, 0x2, 0x2, 0x87e, 0x87f, 0x7, 0x6b, 
+       0x2, 0x2, 0x87f, 0x880, 0x7, 0x75, 0x2, 0x2, 0x880, 0x881, 0x7, 0x67, 
+       0x2, 0x2, 0x881, 0x142, 0x3, 0x2, 0x2, 0x2, 0x882, 0x883, 0x7, 0x54, 
+       0x2, 0x2, 0x883, 0x884, 0x7, 0x63, 0x2, 0x2, 0x884, 0x885, 0x7, 0x75, 
+       0x2, 0x2, 0x885, 0x886, 0x7, 0x76, 0x2, 0x2, 0x886, 0x887, 0x7, 0x67, 
+       0x2, 0x2, 0x887, 0x888, 0x7, 0x74, 0x2, 0x2, 0x888, 0x889, 0x7, 0x6b, 
+       0x2, 0x2, 0x889, 0x88a, 0x7, 0x7c, 0x2, 0x2, 0x88a, 0x88b, 0x7, 0x67, 
+       0x2, 0x2, 0x88b, 0x88c, 0x7, 0x74, 0x2, 0x2, 0x88c, 0x88d, 0x7, 0x51, 
+       0x2, 0x2, 0x88d, 0x88e, 0x7, 0x74, 0x2, 0x2, 0x88e, 0x88f, 0x7, 0x66, 
+       0x2, 0x2, 0x88f, 0x890, 0x7, 0x67, 0x2, 0x2, 0x890, 0x891, 0x7, 0x74, 
+       0x2, 0x2, 0x891, 0x892, 0x7, 0x67, 0x2, 0x2, 0x892, 0x893, 0x7, 0x66, 
+       0x2, 0x2, 0x893, 0x894, 0x7, 0x44, 0x2, 0x2, 0x894, 0x895, 0x7, 0x77, 
+       0x2, 0x2, 0x895, 0x896, 0x7, 0x68, 0x2, 0x2, 0x896, 0x897, 0x7, 0x68, 
+       0x2, 0x2, 0x897, 0x898, 0x7, 0x67, 0x2, 0x2, 0x898, 0x899, 0x7, 0x74, 
+       0x2, 0x2, 0x899, 0x144, 0x3, 0x2, 0x2, 0x2, 0x89a, 0x89b, 0x7, 0x54, 
+       0x2, 0x2, 0x89b, 0x89c, 0x7, 0x63, 0x2, 0x2, 0x89c, 0x89d, 0x7, 0x75, 
+       0x2, 0x2, 0x89d, 0x89e, 0x7, 0x76, 0x2, 0x2, 0x89e, 0x89f, 0x7, 0x67, 
+       0x2, 0x2, 0x89f, 0x8a0, 0x7, 0x74, 0x2, 0x2, 0x8a0, 0x8a1, 0x7, 0x6b, 
+       0x2, 0x2, 0x8a1, 0x8a2, 0x7, 0x7c, 0x2, 0x2, 0x8a2, 0x8a3, 0x7, 0x67, 
+       0x2, 0x2, 0x8a3, 0x8a4, 0x7, 0x74, 0x2, 0x2, 0x8a4, 0x8a5, 0x7, 0x51, 
+       0x2, 0x2, 0x8a5, 0x8a6, 0x7, 0x74, 0x2, 0x2, 0x8a6, 0x8a7, 0x7, 0x66, 
+       0x2, 0x2, 0x8a7, 0x8a8, 0x7, 0x67, 0x2, 0x2, 0x8a8, 0x8a9, 0x7, 0x74, 
+       0x2, 0x2, 0x8a9, 0x8aa, 0x7, 0x67, 0x2, 0x2, 0x8aa, 0x8ab, 0x7, 0x66, 
+       0x2, 0x2, 0x8ab, 0x8ac, 0x7, 0x44, 0x2, 0x2, 0x8ac, 0x8ad, 0x7, 0x7b, 
+       0x2, 0x2, 0x8ad, 0x8ae, 0x7, 0x76, 0x2, 0x2, 0x8ae, 0x8af, 0x7, 0x67, 
+       0x2, 0x2, 0x8af, 0x8b0, 0x7, 0x43, 0x2, 0x2, 0x8b0, 0x8b1, 0x7, 0x66, 
+       0x2, 0x2, 0x8b1, 0x8b2, 0x7, 0x66, 0x2, 0x2, 0x8b2, 0x8b3, 0x7, 0x74, 
+       0x2, 0x2, 0x8b3, 0x8b4, 0x7, 0x67, 0x2, 0x2, 0x8b4, 0x8b5, 0x7, 0x75, 
+       0x2, 0x2, 0x8b5, 0x8b6, 0x7, 0x75, 0x2, 0x2, 0x8b6, 0x8b7, 0x7, 0x44, 
+       0x2, 0x2, 0x8b7, 0x8b8, 0x7, 0x77, 0x2, 0x2, 0x8b8, 0x8b9, 0x7, 0x68, 
+       0x2, 0x2, 0x8b9, 0x8ba, 0x7, 0x68, 0x2, 0x2, 0x8ba, 0x8bb, 0x7, 0x67, 
+       0x2, 0x2, 0x8bb, 0x8bc, 0x7, 0x74, 0x2, 0x2, 0x8bc, 0x146, 0x3, 0x2, 
+       0x2, 0x2, 0x8bd, 0x8be, 0x7, 0x54, 0x2, 0x2, 0x8be, 0x8bf, 0x7, 0x63, 
+       0x2, 0x2, 0x8bf, 0x8c0, 0x7, 0x75, 0x2, 0x2, 0x8c0, 0x8c1, 0x7, 0x76, 
+       0x2, 0x2, 0x8c1, 0x8c2, 0x7, 0x67, 0x2, 0x2, 0x8c2, 0x8c3, 0x7, 0x74, 
+       0x2, 0x2, 0x8c3, 0x8c4, 0x7, 0x6b, 0x2, 0x2, 0x8c4, 0x8c5, 0x7, 0x7c, 
+       0x2, 0x2, 0x8c5, 0x8c6, 0x7, 0x67, 0x2, 0x2, 0x8c6, 0x8c7, 0x7, 0x74, 
+       0x2, 0x2, 0x8c7, 0x8c8, 0x7, 0x51, 0x2, 0x2, 0x8c8, 0x8c9, 0x7, 0x74, 
+       0x2, 0x2, 0x8c9, 0x8ca, 0x7, 0x66, 0x2, 0x2, 0x8ca, 0x8cb, 0x7, 0x67, 
+       0x2, 0x2, 0x8cb, 0x8cc, 0x7, 0x74, 0x2, 0x2, 0x8cc, 0x8cd, 0x7, 0x67, 
+       0x2, 0x2, 0x8cd, 0x8ce, 0x7, 0x66, 0x2, 0x2, 0x8ce, 0x8cf, 0x7, 0x55, 
+       0x2, 0x2, 0x8cf, 0x8d0, 0x7, 0x76, 0x2, 0x2, 0x8d0, 0x8d1, 0x7, 0x74, 
+       0x2, 0x2, 0x8d1, 0x8d2, 0x7, 0x77, 0x2, 0x2, 0x8d2, 0x8d3, 0x7, 0x65, 
+       0x2, 0x2, 0x8d3, 0x8d4, 0x7, 0x76, 0x2, 0x2, 0x8d4, 0x8d5, 0x7, 0x77, 
+       0x2, 0x2, 0x8d5, 0x8d6, 0x7, 0x74, 0x2, 0x2, 0x8d6, 0x8d7, 0x7, 0x67, 
+       0x2, 0x2, 0x8d7, 0x8d8, 0x7, 0x66, 0x2, 0x2, 0x8d8, 0x8d9, 0x7, 0x44, 
+       0x2, 0x2, 0x8d9, 0x8da, 0x7, 0x77, 0x2, 0x2, 0x8da, 0x8db, 0x7, 0x68, 
+       0x2, 0x2, 0x8db, 0x8dc, 0x7, 0x68, 0x2, 0x2, 0x8dc, 0x8dd, 0x7, 0x67, 
+       0x2, 0x2, 0x8dd, 0x8de, 0x7, 0x74, 0x2, 0x2, 0x8de, 0x148, 0x3, 0x2, 
+       0x2, 0x2, 0x8df, 0x8e0, 0x7, 0x54, 0x2, 0x2, 0x8e0, 0x8e1, 0x7, 0x63, 
+       0x2, 0x2, 0x8e1, 0x8e2, 0x7, 0x75, 0x2, 0x2, 0x8e2, 0x8e3, 0x7, 0x76, 
+       0x2, 0x2, 0x8e3, 0x8e4, 0x7, 0x67, 0x2, 0x2, 0x8e4, 0x8e5, 0x7, 0x74, 
+       0x2, 0x2, 0x8e5, 0x8e6, 0x7, 0x6b, 0x2, 0x2, 0x8e6, 0x8e7, 0x7, 0x7c, 
+       0x2, 0x2, 0x8e7, 0x8e8, 0x7, 0x67, 0x2, 0x2, 0x8e8, 0x8e9, 0x7, 0x74, 
+       0x2, 0x2, 0x8e9, 0x8ea, 0x7, 0x51, 0x2, 0x2, 0x8ea, 0x8eb, 0x7, 0x74, 
+       0x2, 0x2, 0x8eb, 0x8ec, 0x7, 0x66, 0x2, 0x2, 0x8ec, 0x8ed, 0x7, 0x67, 
+       0x2, 0x2, 0x8ed, 0x8ee, 0x7, 0x74, 0x2, 0x2, 0x8ee, 0x8ef, 0x7, 0x67, 
+       0x2, 0x2, 0x8ef, 0x8f0, 0x7, 0x66, 0x2, 0x2, 0x8f0, 0x8f1, 0x7, 0x56, 
+       0x2, 0x2, 0x8f1, 0x8f2, 0x7, 0x67, 0x2, 0x2, 0x8f2, 0x8f3, 0x7, 0x7a, 
+       0x2, 0x2, 0x8f3, 0x8f4, 0x7, 0x76, 0x2, 0x2, 0x8f4, 0x8f5, 0x7, 0x77, 
+       0x2, 0x2, 0x8f5, 0x8f6, 0x7, 0x74, 0x2, 0x2, 0x8f6, 0x8f7, 0x7, 0x67, 
+       0x2, 0x2, 0x8f7, 0x8f8, 0x7, 0x33, 0x2, 0x2, 0x8f8, 0x8f9, 0x7, 0x46, 
+       0x2, 0x2, 0x8f9, 0x14a, 0x3, 0x2, 0x2, 0x2, 0x8fa, 0x8fb, 0x7, 0x54, 
+       0x2, 0x2, 0x8fb, 0x8fc, 0x7, 0x63, 0x2, 0x2, 0x8fc, 0x8fd, 0x7, 0x75, 
+       0x2, 0x2, 0x8fd, 0x8fe, 0x7, 0x76, 0x2, 0x2, 0x8fe, 0x8ff, 0x7, 0x67, 
+       0x2, 0x2, 0x8ff, 0x900, 0x7, 0x74, 0x2, 0x2, 0x900, 0x901, 0x7, 0x6b, 
+       0x2, 0x2, 0x901, 0x902, 0x7, 0x7c, 0x2, 0x2, 0x902, 0x903, 0x7, 0x67, 
+       0x2, 0x2, 0x903, 0x904, 0x7, 0x74, 0x2, 0x2, 0x904, 0x905, 0x7, 0x51, 
+       0x2, 0x2, 0x905, 0x906, 0x7, 0x74, 0x2, 0x2, 0x906, 0x907, 0x7, 0x66, 
+       0x2, 0x2, 0x907, 0x908, 0x7, 0x67, 0x2, 0x2, 0x908, 0x909, 0x7, 0x74, 
+       0x2, 0x2, 0x909, 0x90a, 0x7, 0x67, 0x2, 0x2, 0x90a, 0x90b, 0x7, 0x66, 
+       0x2, 0x2, 0x90b, 0x90c, 0x7, 0x56, 0x2, 0x2, 0x90c, 0x90d, 0x7, 0x67, 
+       0x2, 0x2, 0x90d, 0x90e, 0x7, 0x7a, 0x2, 0x2, 0x90e, 0x90f, 0x7, 0x76, 
+       0x2, 0x2, 0x90f, 0x910, 0x7, 0x77, 0x2, 0x2, 0x910, 0x911, 0x7, 0x74, 
+       0x2, 0x2, 0x911, 0x912, 0x7, 0x67, 0x2, 0x2, 0x912, 0x913, 0x7, 0x33, 
+       0x2, 0x2, 0x913, 0x914, 0x7, 0x46, 0x2, 0x2, 0x914, 0x915, 0x7, 0x43, 
+       0x2, 0x2, 0x915, 0x916, 0x7, 0x74, 0x2, 0x2, 0x916, 0x917, 0x7, 0x74, 
+       0x2, 0x2, 0x917, 0x918, 0x7, 0x63, 0x2, 0x2, 0x918, 0x919, 0x7, 0x7b, 
+       0x2, 0x2, 0x919, 0x14c, 0x3, 0x2, 0x2, 0x2, 0x91a, 0x91b, 0x7, 0x54, 
+       0x2, 0x2, 0x91b, 0x91c, 0x7, 0x63, 0x2, 0x2, 0x91c, 0x91d, 0x7, 0x75, 
+       0x2, 0x2, 0x91d, 0x91e, 0x7, 0x76, 0x2, 0x2, 0x91e, 0x91f, 0x7, 0x67, 
+       0x2, 0x2, 0x91f, 0x920, 0x7, 0x74, 0x2, 0x2, 0x920, 0x921, 0x7, 0x6b, 
+       0x2, 0x2, 0x921, 0x922, 0x7, 0x7c, 0x2, 0x2, 0x922, 0x923, 0x7, 0x67, 
+       0x2, 0x2, 0x923, 0x924, 0x7, 0x74, 0x2, 0x2, 0x924, 0x925, 0x7, 0x51, 
+       0x2, 0x2, 0x925, 0x926, 0x7, 0x74, 0x2, 0x2, 0x926, 0x927, 0x7, 0x66, 
+       0x2, 0x2, 0x927, 0x928, 0x7, 0x67, 0x2, 0x2, 0x928, 0x929, 0x7, 0x74, 
+       0x2, 0x2, 0x929, 0x92a, 0x7, 0x67, 0x2, 0x2, 0x92a, 0x92b, 0x7, 0x66, 
+       0x2, 0x2, 0x92b, 0x92c, 0x7, 0x56, 0x2, 0x2, 0x92c, 0x92d, 0x7, 0x67, 
+       0x2, 0x2, 0x92d, 0x92e, 0x7, 0x7a, 0x2, 0x2, 0x92e, 0x92f, 0x7, 0x76, 
+       0x2, 0x2, 0x92f, 0x930, 0x7, 0x77, 0x2, 0x2, 0x930, 0x931, 0x7, 0x74, 
+       0x2, 0x2, 0x931, 0x932, 0x7, 0x67, 0x2, 0x2, 0x932, 0x933, 0x7, 0x34, 
+       0x2, 0x2, 0x933, 0x934, 0x7, 0x46, 0x2, 0x2, 0x934, 0x14e, 0x3, 0x2, 
+       0x2, 0x2, 0x935, 0x936, 0x7, 0x54, 0x2, 0x2, 0x936, 0x937, 0x7, 0x63, 
+       0x2, 0x2, 0x937, 0x938, 0x7, 0x75, 0x2, 0x2, 0x938, 0x939, 0x7, 0x76, 
+       0x2, 0x2, 0x939, 0x93a, 0x7, 0x67, 0x2, 0x2, 0x93a, 0x93b, 0x7, 0x74, 
+       0x2, 0x2, 0x93b, 0x93c, 0x7, 0x6b, 0x2, 0x2, 0x93c, 0x93d, 0x7, 0x7c, 
+       0x2, 0x2, 0x93d, 0x93e, 0x7, 0x67, 0x2, 0x2, 0x93e, 0x93f, 0x7, 0x74, 
+       0x2, 0x2, 0x93f, 0x940, 0x7, 0x51, 0x2, 0x2, 0x940, 0x941, 0x7, 0x74, 
+       0x2, 0x2, 0x941, 0x942, 0x7, 0x66, 0x2, 0x2, 0x942, 0x943, 0x7, 0x67, 
+       0x2, 0x2, 0x943, 0x944, 0x7, 0x74, 0x2, 0x2, 0x944, 0x945, 0x7, 0x67, 
+       0x2, 0x2, 0x945, 0x946, 0x7, 0x66, 0x2, 0x2, 0x946, 0x947, 0x7, 0x56, 
+       0x2, 0x2, 0x947, 0x948, 0x7, 0x67, 0x2, 0x2, 0x948, 0x949, 0x7, 0x7a, 
+       0x2, 0x2, 0x949, 0x94a, 0x7, 0x76, 0x2, 0x2, 0x94a, 0x94b, 0x7, 0x77, 
+       0x2, 0x2, 0x94b, 0x94c, 0x7, 0x74, 0x2, 0x2, 0x94c, 0x94d, 0x7, 0x67, 
+       0x2, 0x2, 0x94d, 0x94e, 0x7, 0x34, 0x2, 0x2, 0x94e, 0x94f, 0x7, 0x46, 
+       0x2, 0x2, 0x94f, 0x950, 0x7, 0x43, 0x2, 0x2, 0x950, 0x951, 0x7, 0x74, 
+       0x2, 0x2, 0x951, 0x952, 0x7, 0x74, 0x2, 0x2, 0x952, 0x953, 0x7, 0x63, 
+       0x2, 0x2, 0x953, 0x954, 0x7, 0x7b, 0x2, 0x2, 0x954, 0x150, 0x3, 0x2, 
+       0x2, 0x2, 0x955, 0x956, 0x7, 0x54, 0x2, 0x2, 0x956, 0x957, 0x7, 0x63, 
+       0x2, 0x2, 0x957, 0x958, 0x7, 0x75, 0x2, 0x2, 0x958, 0x959, 0x7, 0x76, 
+       0x2, 0x2, 0x959, 0x95a, 0x7, 0x67, 0x2, 0x2, 0x95a, 0x95b, 0x7, 0x74, 
+       0x2, 0x2, 0x95b, 0x95c, 0x7, 0x6b, 0x2, 0x2, 0x95c, 0x95d, 0x7, 0x7c, 
+       0x2, 0x2, 0x95d, 0x95e, 0x7, 0x67, 0x2, 0x2, 0x95e, 0x95f, 0x7, 0x74, 
+       0x2, 0x2, 0x95f, 0x960, 0x7, 0x51, 0x2, 0x2, 0x960, 0x961, 0x7, 0x74, 
+       0x2, 0x2, 0x961, 0x962, 0x7, 0x66, 0x2, 0x2, 0x962, 0x963, 0x7, 0x67, 
+       0x2, 0x2, 0x963, 0x964, 0x7, 0x74, 0x2, 0x2, 0x964, 0x965, 0x7, 0x67, 
+       0x2, 0x2, 0x965, 0x966, 0x7, 0x66, 0x2, 0x2, 0x966, 0x967, 0x7, 0x56, 
+       0x2, 0x2, 0x967, 0x968, 0x7, 0x67, 0x2, 0x2, 0x968, 0x969, 0x7, 0x7a, 
+       0x2, 0x2, 0x969, 0x96a, 0x7, 0x76, 0x2, 0x2, 0x96a, 0x96b, 0x7, 0x77, 
+       0x2, 0x2, 0x96b, 0x96c, 0x7, 0x74, 0x2, 0x2, 0x96c, 0x96d, 0x7, 0x67, 
+       0x2, 0x2, 0x96d, 0x96e, 0x7, 0x35, 0x2, 0x2, 0x96e, 0x96f, 0x7, 0x46, 
+       0x2, 0x2, 0x96f, 0x152, 0x3, 0x2, 0x2, 0x2, 0x970, 0x971, 0x7, 0x54, 
+       0x2, 0x2, 0x971, 0x972, 0x7, 0x63, 0x2, 0x2, 0x972, 0x973, 0x7, 0x7b, 
+       0x2, 0x2, 0x973, 0x974, 0x7, 0x46, 0x2, 0x2, 0x974, 0x975, 0x7, 0x67, 
+       0x2, 0x2, 0x975, 0x976, 0x7, 0x75, 0x2, 0x2, 0x976, 0x977, 0x7, 0x65, 
+       0x2, 0x2, 0x977, 0x154, 0x3, 0x2, 0x2, 0x2, 0x978, 0x979, 0x7, 0x54, 
+       0x2, 0x2, 0x979, 0x97a, 0x7, 0x63, 0x2, 0x2, 0x97a, 0x97b, 0x7, 0x7b, 
+       0x2, 0x2, 0x97b, 0x97c, 0x7, 0x76, 0x2, 0x2, 0x97c, 0x97d, 0x7, 0x74, 
+       0x2, 0x2, 0x97d, 0x97e, 0x7, 0x63, 0x2, 0x2, 0x97e, 0x97f, 0x7, 0x65, 
+       0x2, 0x2, 0x97f, 0x980, 0x7, 0x6b, 0x2, 0x2, 0x980, 0x981, 0x7, 0x70, 
+       0x2, 0x2, 0x981, 0x982, 0x7, 0x69, 0x2, 0x2, 0x982, 0x983, 0x7, 0x43, 
+       0x2, 0x2, 0x983, 0x984, 0x7, 0x65, 0x2, 0x2, 0x984, 0x985, 0x7, 0x65, 
+       0x2, 0x2, 0x985, 0x986, 0x7, 0x67, 0x2, 0x2, 0x986, 0x987, 0x7, 0x6e, 
+       0x2, 0x2, 0x987, 0x988, 0x7, 0x67, 0x2, 0x2, 0x988, 0x989, 0x7, 0x74, 
+       0x2, 0x2, 0x989, 0x98a, 0x7, 0x63, 0x2, 0x2, 0x98a, 0x98b, 0x7, 0x76, 
+       0x2, 0x2, 0x98b, 0x98c, 0x7, 0x6b, 0x2, 0x2, 0x98c, 0x98d, 0x7, 0x71, 
+       0x2, 0x2, 0x98d, 0x98e, 0x7, 0x70, 0x2, 0x2, 0x98e, 0x98f, 0x7, 0x55, 
+       0x2, 0x2, 0x98f, 0x990, 0x7, 0x76, 0x2, 0x2, 0x990, 0x991, 0x7, 0x74, 
+       0x2, 0x2, 0x991, 0x992, 0x7, 0x77, 0x2, 0x2, 0x992, 0x993, 0x7, 0x65, 
+       0x2, 0x2, 0x993, 0x994, 0x7, 0x76, 0x2, 0x2, 0x994, 0x995, 0x7, 0x77, 
+       0x2, 0x2, 0x995, 0x996, 0x7, 0x74, 0x2, 0x2, 0x996, 0x997, 0x7, 0x67, 
+       0x2, 0x2, 0x997, 0x156, 0x3, 0x2, 0x2, 0x2, 0x998, 0x999, 0x7, 0x74, 
+       0x2, 0x2, 0x999, 0x99a, 0x7, 0x67, 0x2, 0x2, 0x99a, 0x99b, 0x7, 0x69, 
+       0x2, 0x2, 0x99b, 0x99c, 0x7, 0x6b, 0x2, 0x2, 0x99c, 0x99d, 0x7, 0x75, 
+       0x2, 0x2, 0x99d, 0x99e, 0x7, 0x76, 0x2, 0x2, 0x99e, 0x99f, 0x7, 0x67, 
+       0x2, 0x2, 0x99f, 0x9a0, 0x7, 0x74, 0x2, 0x2, 0x9a0, 0x158, 0x3, 0x2, 
+       0x2, 0x2, 0x9a1, 0x9a2, 0x7, 0x74, 0x2, 0x2, 0x9a2, 0x9a3, 0x7, 0x67, 
+       0x2, 0x2, 0x9a3, 0x9a4, 0x7, 0x76, 0x2, 0x2, 0x9a4, 0x9a5, 0x7, 0x77, 
+       0x2, 0x2, 0x9a5, 0x9a6, 0x7, 0x74, 0x2, 0x2, 0x9a6, 0x9a7, 0x7, 0x70, 
+       0x2, 0x2, 0x9a7, 0x15a, 0x3, 0x2, 0x2, 0x2, 0x9a8, 0x9a9, 0x7, 0x74, 
+       0x2, 0x2, 0x9a9, 0x9aa, 0x7, 0x71, 0x2, 0x2, 0x9aa, 0x9ab, 0x7, 0x79, 
+       0x2, 0x2, 0x9ab, 0x9ac, 0x7, 0x61, 0x2, 0x2, 0x9ac, 0x9ad, 0x7, 0x6f, 
+       0x2, 0x2, 0x9ad, 0x9ae, 0x7, 0x63, 0x2, 0x2, 0x9ae, 0x9af, 0x7, 0x6c, 
+       0x2, 0x2, 0x9af, 0x9b0, 0x7, 0x71, 0x2, 0x2, 0x9b0, 0x9b1, 0x7, 0x74, 
+       0x2, 0x2, 0x9b1, 0x15c, 0x3, 0x2, 0x2, 0x2, 0x9b2, 0x9b3, 0x7, 0x54, 
+       0x2, 0x2, 0x9b3, 0x9b4, 0x7, 0x59, 0x2, 0x2, 0x9b4, 0x9b5, 0x7, 0x44, 
+       0x2, 0x2, 0x9b5, 0x9b6, 0x7, 0x77, 0x2, 0x2, 0x9b6, 0x9b7, 0x7, 0x68, 
+       0x2, 0x2, 0x9b7, 0x9b8, 0x7, 0x68, 0x2, 0x2, 0x9b8, 0x9b9, 0x7, 0x67, 
+       0x2, 0x2, 0x9b9, 0x9ba, 0x7, 0x74, 0x2, 0x2, 0x9ba, 0x15e, 0x3, 0x2, 
+       0x2, 0x2, 0x9bb, 0x9bc, 0x7, 0x54, 0x2, 0x2, 0x9bc, 0x9bd, 0x7, 0x59, 
+       0x2, 0x2, 0x9bd, 0x9be, 0x7, 0x44, 0x2, 0x2, 0x9be, 0x9bf, 0x7, 0x7b, 
+       0x2, 0x2, 0x9bf, 0x9c0, 0x7, 0x76, 0x2, 0x2, 0x9c0, 0x9c1, 0x7, 0x67, 
+       0x2, 0x2, 0x9c1, 0x9c2, 0x7, 0x43, 0x2, 0x2, 0x9c2, 0x9c3, 0x7, 0x66, 
+       0x2, 0x2, 0x9c3, 0x9c4, 0x7, 0x66, 0x2, 0x2, 0x9c4, 0x9c5, 0x7, 0x74, 
+       0x2, 0x2, 0x9c5, 0x9c6, 0x7, 0x67, 0x2, 0x2, 0x9c6, 0x9c7, 0x7, 0x75, 
+       0x2, 0x2, 0x9c7, 0x9c8, 0x7, 0x75, 0x2, 0x2, 0x9c8, 0x9c9, 0x7, 0x44, 
+       0x2, 0x2, 0x9c9, 0x9ca, 0x7, 0x77, 0x2, 0x2, 0x9ca, 0x9cb, 0x7, 0x68, 
+       0x2, 0x2, 0x9cb, 0x9cc, 0x7, 0x68, 0x2, 0x2, 0x9cc, 0x9cd, 0x7, 0x67, 
+       0x2, 0x2, 0x9cd, 0x9ce, 0x7, 0x74, 0x2, 0x2, 0x9ce, 0x160, 0x3, 0x2, 
+       0x2, 0x2, 0x9cf, 0x9d0, 0x7, 0x54, 0x2, 0x2, 0x9d0, 0x9d1, 0x7, 0x59, 
+       0x2, 0x2, 0x9d1, 0x9d2, 0x7, 0x55, 0x2, 0x2, 0x9d2, 0x9d3, 0x7, 0x76, 
+       0x2, 0x2, 0x9d3, 0x9d4, 0x7, 0x74, 0x2, 0x2, 0x9d4, 0x9d5, 0x7, 0x77, 
+       0x2, 0x2, 0x9d5, 0x9d6, 0x7, 0x65, 0x2, 0x2, 0x9d6, 0x9d7, 0x7, 0x76, 
+       0x2, 0x2, 0x9d7, 0x9d8, 0x7, 0x77, 0x2, 0x2, 0x9d8, 0x9d9, 0x7, 0x74, 
+       0x2, 0x2, 0x9d9, 0x9da, 0x7, 0x67, 0x2, 0x2, 0x9da, 0x9db, 0x7, 0x66, 
+       0x2, 0x2, 0x9db, 0x9dc, 0x7, 0x44, 0x2, 0x2, 0x9dc, 0x9dd, 0x7, 0x77, 
+       0x2, 0x2, 0x9dd, 0x9de, 0x7, 0x68, 0x2, 0x2, 0x9de, 0x9df, 0x7, 0x68, 
+       0x2, 0x2, 0x9df, 0x9e0, 0x7, 0x67, 0x2, 0x2, 0x9e0, 0x9e1, 0x7, 0x74, 
+       0x2, 0x2, 0x9e1, 0x162, 0x3, 0x2, 0x2, 0x2, 0x9e2, 0x9e3, 0x7, 0x54, 
+       0x2, 0x2, 0x9e3, 0x9e4, 0x7, 0x59, 0x2, 0x2, 0x9e4, 0x9e5, 0x7, 0x56, 
+       0x2, 0x2, 0x9e5, 0x9e6, 0x7, 0x67, 0x2, 0x2, 0x9e6, 0x9e7, 0x7, 0x7a, 
+       0x2, 0x2, 0x9e7, 0x9e8, 0x7, 0x76, 0x2, 0x2, 0x9e8, 0x9e9, 0x7, 0x77, 
+       0x2, 0x2, 0x9e9, 0x9ea, 0x7, 0x74, 0x2, 0x2, 0x9ea, 0x9eb, 0x7, 0x67, 
+       0x2, 0x2, 0x9eb, 0x9ec, 0x7, 0x33, 0x2, 0x2, 0x9ec, 0x9ed, 0x7, 0x46, 
+       0x2, 0x2, 0x9ed, 0x164, 0x3, 0x2, 0x2, 0x2, 0x9ee, 0x9ef, 0x7, 0x54, 
+       0x2, 0x2, 0x9ef, 0x9f0, 0x7, 0x59, 0x2, 0x2, 0x9f0, 0x9f1, 0x7, 0x56, 
+       0x2, 0x2, 0x9f1, 0x9f2, 0x7, 0x67, 0x2, 0x2, 0x9f2, 0x9f3, 0x7, 0x7a, 
+       0x2, 0x2, 0x9f3, 0x9f4, 0x7, 0x76, 0x2, 0x2, 0x9f4, 0x9f5, 0x7, 0x77, 
+       0x2, 0x2, 0x9f5, 0x9f6, 0x7, 0x74, 0x2, 0x2, 0x9f6, 0x9f7, 0x7, 0x67, 
+       0x2, 0x2, 0x9f7, 0x9f8, 0x7, 0x33, 0x2, 0x2, 0x9f8, 0x9f9, 0x7, 0x46, 
+       0x2, 0x2, 0x9f9, 0x9fa, 0x7, 0x43, 0x2, 0x2, 0x9fa, 0x9fb, 0x7, 0x74, 
+       0x2, 0x2, 0x9fb, 0x9fc, 0x7, 0x74, 0x2, 0x2, 0x9fc, 0x9fd, 0x7, 0x63, 
+       0x2, 0x2, 0x9fd, 0x9fe, 0x7, 0x7b, 0x2, 0x2, 0x9fe, 0x166, 0x3, 0x2, 
+       0x2, 0x2, 0x9ff, 0xa00, 0x7, 0x54, 0x2, 0x2, 0xa00, 0xa01, 0x7, 0x59, 
+       0x2, 0x2, 0xa01, 0xa02, 0x7, 0x56, 0x2, 0x2, 0xa02, 0xa03, 0x7, 0x67, 
+       0x2, 0x2, 0xa03, 0xa04, 0x7, 0x7a, 0x2, 0x2, 0xa04, 0xa05, 0x7, 0x76, 
+       0x2, 0x2, 0xa05, 0xa06, 0x7, 0x77, 0x2, 0x2, 0xa06, 0xa07, 0x7, 0x74, 
+       0x2, 0x2, 0xa07, 0xa08, 0x7, 0x67, 0x2, 0x2, 0xa08, 0xa09, 0x7, 0x34, 
+       0x2, 0x2, 0xa09, 0xa0a, 0x7, 0x46, 0x2, 0x2, 0xa0a, 0x168, 0x3, 0x2, 
+       0x2, 0x2, 0xa0b, 0xa0c, 0x7, 0x54, 0x2, 0x2, 0xa0c, 0xa0d, 0x7, 0x59, 
+       0x2, 0x2, 0xa0d, 0xa0e, 0x7, 0x56, 0x2, 0x2, 0xa0e, 0xa0f, 0x7, 0x67, 
+       0x2, 0x2, 0xa0f, 0xa10, 0x7, 0x7a, 0x2, 0x2, 0xa10, 0xa11, 0x7, 0x76, 
+       0x2, 0x2, 0xa11, 0xa12, 0x7, 0x77, 0x2, 0x2, 0xa12, 0xa13, 0x7, 0x74, 
+       0x2, 0x2, 0xa13, 0xa14, 0x7, 0x67, 0x2, 0x2, 0xa14, 0xa15, 0x7, 0x34, 
+       0x2, 0x2, 0xa15, 0xa16, 0x7, 0x46, 0x2, 0x2, 0xa16, 0xa17, 0x7, 0x43, 
+       0x2, 0x2, 0xa17, 0xa18, 0x7, 0x74, 0x2, 0x2, 0xa18, 0xa19, 0x7, 0x74, 
+       0x2, 0x2, 0xa19, 0xa1a, 0x7, 0x63, 0x2, 0x2, 0xa1a, 0xa1b, 0x7, 0x7b, 
+       0x2, 0x2, 0xa1b, 0x16a, 0x3, 0x2, 0x2, 0x2, 0xa1c, 0xa1d, 0x7, 0x54, 
+       0x2, 0x2, 0xa1d, 0xa1e, 0x7, 0x59, 0x2, 0x2, 0xa1e, 0xa1f, 0x7, 0x56, 
+       0x2, 0x2, 0xa1f, 0xa20, 0x7, 0x67, 0x2, 0x2, 0xa20, 0xa21, 0x7, 0x7a, 
+       0x2, 0x2, 0xa21, 0xa22, 0x7, 0x76, 0x2, 0x2, 0xa22, 0xa23, 0x7, 0x77, 
+       0x2, 0x2, 0xa23, 0xa24, 0x7, 0x74, 0x2, 0x2, 0xa24, 0xa25, 0x7, 0x67, 
+       0x2, 0x2, 0xa25, 0xa26, 0x7, 0x35, 0x2, 0x2, 0xa26, 0xa27, 0x7, 0x46, 
+       0x2, 0x2, 0xa27, 0x16c, 0x3, 0x2, 0x2, 0x2, 0xa28, 0xa29, 0x7, 0x75, 
+       0x2, 0x2, 0xa29, 0xa2a, 0x7, 0x63, 0x2, 0x2, 0xa2a, 0xa2b, 0x7, 0x6f, 
+       0x2, 0x2, 0xa2b, 0xa2c, 0x7, 0x72, 0x2, 0x2, 0xa2c, 0xa2d, 0x7, 0x6e, 
+       0x2, 0x2, 0xa2d, 0xa2e, 0x7, 0x67, 0x2, 0x2, 0xa2e, 0x16e, 0x3, 0x2, 
+       0x2, 0x2, 0xa2f, 0xa30, 0x7, 0x75, 0x2, 0x2, 0xa30, 0xa31, 0x7, 0x63, 
+       0x2, 0x2, 0xa31, 0xa32, 0x7, 0x6f, 0x2, 0x2, 0xa32, 0xa33, 0x7, 0x72, 
+       0x2, 0x2, 0xa33, 0xa34, 0x7, 0x6e, 0x2, 0x2, 0xa34, 0xa35, 0x7, 0x67, 
+       0x2, 0x2, 0xa35, 0xa36, 0x7, 0x74, 0x2, 0x2, 0xa36, 0x170, 0x3, 0x2, 
+       0x2, 0x2, 0xa37, 0xa38, 0x7, 0x55, 0x2, 0x2, 0xa38, 0xa39, 0x7, 0x63, 
+       0x2, 0x2, 0xa39, 0xa3a, 0x7, 0x6f, 0x2, 0x2, 0xa3a, 0xa3b, 0x7, 0x72, 
+       0x2, 0x2, 0xa3b, 0xa3c, 0x7, 0x6e, 0x2, 0x2, 0xa3c, 0xa3d, 0x7, 0x67, 
+       0x2, 0x2, 0xa3d, 0xa3e, 0x7, 0x74, 0x2, 0x2, 0xa3e, 0x172, 0x3, 0x2, 
+       0x2, 0x2, 0xa3f, 0xa40, 0x7, 0x55, 0x2, 0x2, 0xa40, 0xa41, 0x7, 0x63, 
+       0x2, 0x2, 0xa41, 0xa42, 0x7, 0x6f, 0x2, 0x2, 0xa42, 0xa43, 0x7, 0x72, 
+       0x2, 0x2, 0xa43, 0xa44, 0x7, 0x6e, 0x2, 0x2, 0xa44, 0xa45, 0x7, 0x67, 
+       0x2, 0x2, 0xa45, 0xa46, 0x7, 0x74, 0x2, 0x2, 0xa46, 0xa47, 0x7, 0x45, 
+       0x2, 0x2, 0xa47, 0xa48, 0x7, 0x71, 0x2, 0x2, 0xa48, 0xa49, 0x7, 0x6f, 
+       0x2, 0x2, 0xa49, 0xa4a, 0x7, 0x72, 0x2, 0x2, 0xa4a, 0xa4b, 0x7, 0x63, 
+       0x2, 0x2, 0xa4b, 0xa4c, 0x7, 0x74, 0x2, 0x2, 0xa4c, 0xa4d, 0x7, 0x6b, 
+       0x2, 0x2, 0xa4d, 0xa4e, 0x7, 0x75, 0x2, 0x2, 0xa4e, 0xa4f, 0x7, 0x71, 
+       0x2, 0x2, 0xa4f, 0xa50, 0x7, 0x70, 0x2, 0x2, 0xa50, 0xa51, 0x7, 0x55, 
+       0x2, 0x2, 0xa51, 0xa52, 0x7, 0x76, 0x2, 0x2, 0xa52, 0xa53, 0x7, 0x63, 
+       0x2, 0x2, 0xa53, 0xa54, 0x7, 0x76, 0x2, 0x2, 0xa54, 0xa55, 0x7, 0x67, 
+       0x2, 0x2, 0xa55, 0x174, 0x3, 0x2, 0x2, 0x2, 0xa56, 0xa57, 0x7, 0x55, 
+       0x2, 0x2, 0xa57, 0xa58, 0x7, 0x63, 0x2, 0x2, 0xa58, 0xa59, 0x7, 0x6f, 
+       0x2, 0x2, 0xa59, 0xa5a, 0x7, 0x72, 0x2, 0x2, 0xa5a, 0xa5b, 0x7, 0x6e, 
+       0x2, 0x2, 0xa5b, 0xa5c, 0x7, 0x67, 0x2, 0x2, 0xa5c, 0xa5d, 0x7, 0x74, 
+       0x2, 0x2, 0xa5d, 0xa5e, 0x7, 0x55, 0x2, 0x2, 0xa5e, 0xa5f, 0x7, 0x76, 
+       0x2, 0x2, 0xa5f, 0xa60, 0x7, 0x63, 0x2, 0x2, 0xa60, 0xa61, 0x7, 0x76, 
+       0x2, 0x2, 0xa61, 0xa62, 0x7, 0x67, 0x2, 0x2, 0xa62, 0x176, 0x3, 0x2, 
+       0x2, 0x2, 0xa63, 0xa64, 0x7, 0x75, 0x2, 0x2, 0xa64, 0xa65, 0x7, 0x63, 
+       0x2, 0x2, 0xa65, 0xa66, 0x7, 0x6f, 0x2, 0x2, 0xa66, 0xa67, 0x7, 0x72, 
+       0x2, 0x2, 0xa67, 0xa68, 0x7, 0x6e, 0x2, 0x2, 0xa68, 0xa69, 0x7, 0x67, 
+       0x2, 0x2, 0xa69, 0xa6a, 0x7, 0x74, 0x2, 0x2, 0xa6a, 0xa6b, 0x7, 0x61, 
+       0x2, 0x2, 0xa6b, 0xa6c, 0x7, 0x75, 0x2, 0x2, 0xa6c, 0xa6d, 0x7, 0x76, 
+       0x2, 0x2, 0xa6d, 0xa6e, 0x7, 0x63, 0x2, 0x2, 0xa6e, 0xa6f, 0x7, 0x76, 
+       0x2, 0x2, 0xa6f, 0xa70, 0x7, 0x67, 0x2, 0x2, 0xa70, 0x178, 0x3, 0x2, 
+       0x2, 0x2, 0xa71, 0xa72, 0x7, 0x75, 0x2, 0x2, 0xa72, 0xa73, 0x7, 0x6a, 
+       0x2, 0x2, 0xa73, 0xa74, 0x7, 0x63, 0x2, 0x2, 0xa74, 0xa75, 0x7, 0x74, 
+       0x2, 0x2, 0xa75, 0xa76, 0x7, 0x67, 0x2, 0x2, 0xa76, 0xa77, 0x7, 0x66, 
+       0x2, 0x2, 0xa77, 0x17a, 0x3, 0x2, 0x2, 0x2, 0xa78, 0xa79, 0x7, 0x75, 
+       0x2, 0x2, 0xa79, 0xa7a, 0x7, 0x70, 0x2, 0x2, 0xa7a, 0xa7b, 0x7, 0x71, 
+       0x2, 0x2, 0xa7b, 0xa7c, 0x7, 0x74, 0x2, 0x2, 0xa7c, 0xa7d, 0x7, 0x6f, 
+       0x2, 0x2, 0xa7d, 0x17c, 0x3, 0x2, 0x2, 0x2, 0xa7e, 0xa7f, 0x7, 0x75, 
+       0x2, 0x2, 0xa7f, 0xa80, 0x7, 0x76, 0x2, 0x2, 0xa80, 0xa81, 0x7, 0x63, 
+       0x2, 0x2, 0xa81, 0xa82, 0x7, 0x76, 0x2, 0x2, 0xa82, 0xa83, 0x7, 0x6b, 
+       0x2, 0x2, 0xa83, 0xa84, 0x7, 0x65, 0x2, 0x2, 0xa84, 0x17e, 0x3, 0x2, 
+       0x2, 0x2, 0xa85, 0xa86, 0x7, 0x75, 0x2, 0x2, 0xa86, 0xa87, 0x7, 0x76, 
+       0x2, 0x2, 0xa87, 0xa88, 0x7, 0x74, 0x2, 0x2, 0xa88, 0xa89, 0x7, 0x77, 
+       0x2, 0x2, 0xa89, 0xa8a, 0x7, 0x65, 0x2, 0x2, 0xa8a, 0xa8b, 0x7, 0x76, 
+       0x2, 0x2, 0xa8b, 0x180, 0x3, 0x2, 0x2, 0x2, 0xa8c, 0xa8d, 0x7, 0x55, 
+       0x2, 0x2, 0xa8d, 0xa8e, 0x7, 0x76, 0x2, 0x2, 0xa8e, 0xa8f, 0x7, 0x74, 
+       0x2, 0x2, 0xa8f, 0xa90, 0x7, 0x77, 0x2, 0x2, 0xa90, 0xa91, 0x7, 0x65, 
+       0x2, 0x2, 0xa91, 0xa92, 0x7, 0x76, 0x2, 0x2, 0xa92, 0xa93, 0x7, 0x77, 
+       0x2, 0x2, 0xa93, 0xa94, 0x7, 0x74, 0x2, 0x2, 0xa94, 0xa95, 0x7, 0x67, 
+       0x2, 0x2, 0xa95, 0xa96, 0x7, 0x66, 0x2, 0x2, 0xa96, 0xa97, 0x7, 0x44, 
+       0x2, 0x2, 0xa97, 0xa98, 0x7, 0x77, 0x2, 0x2, 0xa98, 0xa99, 0x7, 0x68, 
+       0x2, 0x2, 0xa99, 0xa9a, 0x7, 0x68, 0x2, 0x2, 0xa9a, 0xa9b, 0x7, 0x67, 
+       0x2, 0x2, 0xa9b, 0xa9c, 0x7, 0x74, 0x2, 0x2, 0xa9c, 0x182, 0x3, 0x2, 
+       0x2, 0x2, 0xa9d, 0xa9e, 0x7, 0x55, 0x2, 0x2, 0xa9e, 0xa9f, 0x7, 0x77, 
+       0x2, 0x2, 0xa9f, 0xaa0, 0x7, 0x64, 0x2, 0x2, 0xaa0, 0xaa1, 0x7, 0x72, 
+       0x2, 0x2, 0xaa1, 0xaa2, 0x7, 0x63, 0x2, 0x2, 0xaa2, 0xaa3, 0x7, 0x75, 
+       0x2, 0x2, 0xaa3, 0xaa4, 0x7, 0x75, 0x2, 0x2, 0xaa4, 0xaa5, 0x7, 0x4b, 
+       0x2, 0x2, 0xaa5, 0xaa6, 0x7, 0x70, 0x2, 0x2, 0xaa6, 0xaa7, 0x7, 0x72, 
+       0x2, 0x2, 0xaa7, 0xaa8, 0x7, 0x77, 0x2, 0x2, 0xaa8, 0xaa9, 0x7, 0x76, 
+       0x2, 0x2, 0xaa9, 0x184, 0x3, 0x2, 0x2, 0x2, 0xaaa, 0xaab, 0x7, 0x55, 
+       0x2, 0x2, 0xaab, 0xaac, 0x7, 0x77, 0x2, 0x2, 0xaac, 0xaad, 0x7, 0x64, 
+       0x2, 0x2, 0xaad, 0xaae, 0x7, 0x72, 0x2, 0x2, 0xaae, 0xaaf, 0x7, 0x63, 
+       0x2, 0x2, 0xaaf, 0xab0, 0x7, 0x75, 0x2, 0x2, 0xab0, 0xab1, 0x7, 0x75, 
+       0x2, 0x2, 0xab1, 0xab2, 0x7, 0x4b, 0x2, 0x2, 0xab2, 0xab3, 0x7, 0x70, 
+       0x2, 0x2, 0xab3, 0xab4, 0x7, 0x72, 0x2, 0x2, 0xab4, 0xab5, 0x7, 0x77, 
+       0x2, 0x2, 0xab5, 0xab6, 0x7, 0x76, 0x2, 0x2, 0xab6, 0xab7, 0x7, 0x4f, 
+       0x2, 0x2, 0xab7, 0xab8, 0x7, 0x55, 0x2, 0x2, 0xab8, 0x186, 0x3, 0x2, 
+       0x2, 0x2, 0xab9, 0xaba, 0x7, 0x75, 0x2, 0x2, 0xaba, 0xabb, 0x7, 0x79, 
+       0x2, 0x2, 0xabb, 0xabc, 0x7, 0x6b, 0x2, 0x2, 0xabc, 0xabd, 0x7, 0x76, 
+       0x2, 0x2, 0xabd, 0xabe, 0x7, 0x65, 0x2, 0x2, 0xabe, 0xabf, 0x7, 0x6a, 
+       0x2, 0x2, 0xabf, 0x188, 0x3, 0x2, 0x2, 0x2, 0xac0, 0xac1, 0x7, 0x76, 
+       0x2, 0x2, 0xac1, 0xac2, 0x7, 0x64, 0x2, 0x2, 0xac2, 0xac3, 0x7, 0x77, 
+       0x2, 0x2, 0xac3, 0xac4, 0x7, 0x68, 0x2, 0x2, 0xac4, 0xac5, 0x7, 0x68, 
+       0x2, 0x2, 0xac5, 0xac6, 0x7, 0x67, 0x2, 0x2, 0xac6, 0xac7, 0x7, 0x74, 
+       0x2, 0x2, 0xac7, 0x18a, 0x3, 0x2, 0x2, 0x2, 0xac8, 0xac9, 0x7, 0x56, 
+       0x2, 0x2, 0xac9, 0xaca, 0x7, 0x67, 0x2, 0x2, 0xaca, 0xacb, 0x7, 0x7a, 
+       0x2, 0x2, 0xacb, 0xacc, 0x7, 0x76, 0x2, 0x2, 0xacc, 0xacd, 0x7, 0x77, 
+       0x2, 0x2, 0xacd, 0xace, 0x7, 0x74, 0x2, 0x2, 0xace, 0xacf, 0x7, 0x67, 
+       0x2, 0x2, 0xacf, 0xad0, 0x7, 0x33, 0x2, 0x2, 0xad0, 0xad1, 0x7, 0x46, 
+       0x2, 0x2, 0xad1, 0x18c, 0x3, 0x2, 0x2, 0x2, 0xad2, 0xad3, 0x7, 0x56, 
+       0x2, 0x2, 0xad3, 0xad4, 0x7, 0x67, 0x2, 0x2, 0xad4, 0xad5, 0x7, 0x7a, 
+       0x2, 0x2, 0xad5, 0xad6, 0x7, 0x76, 0x2, 0x2, 0xad6, 0xad7, 0x7, 0x77, 
+       0x2, 0x2, 0xad7, 0xad8, 0x7, 0x74, 0x2, 0x2, 0xad8, 0xad9, 0x7, 0x67, 
+       0x2, 0x2, 0xad9, 0xada, 0x7, 0x33, 0x2, 0x2, 0xada, 0xadb, 0x7, 0x46, 
+       0x2, 0x2, 0xadb, 0xadc, 0x7, 0x43, 0x2, 0x2, 0xadc, 0xadd, 0x7, 0x74, 
+       0x2, 0x2, 0xadd, 0xade, 0x7, 0x74, 0x2, 0x2, 0xade, 0xadf, 0x7, 0x63, 
+       0x2, 0x2, 0xadf, 0xae0, 0x7, 0x7b, 0x2, 0x2, 0xae0, 0x18e, 0x3, 0x2, 
+       0x2, 0x2, 0xae1, 0xae2, 0x7, 0x56, 0x2, 0x2, 0xae2, 0xae3, 0x7, 0x67, 
+       0x2, 0x2, 0xae3, 0xae4, 0x7, 0x7a, 0x2, 0x2, 0xae4, 0xae5, 0x7, 0x76, 
+       0x2, 0x2, 0xae5, 0xae6, 0x7, 0x77, 0x2, 0x2, 0xae6, 0xae7, 0x7, 0x74, 
+       0x2, 0x2, 0xae7, 0xae8, 0x7, 0x67, 0x2, 0x2, 0xae8, 0xae9, 0x7, 0x34, 
+       0x2, 0x2, 0xae9, 0xaea, 0x7, 0x46, 0x2, 0x2, 0xaea, 0x190, 0x3, 0x2, 
+       0x2, 0x2, 0xaeb, 0xaec, 0x7, 0x56, 0x2, 0x2, 0xaec, 0xaed, 0x7, 0x67, 
+       0x2, 0x2, 0xaed, 0xaee, 0x7, 0x7a, 0x2, 0x2, 0xaee, 0xaef, 0x7, 0x76, 
+       0x2, 0x2, 0xaef, 0xaf0, 0x7, 0x77, 0x2, 0x2, 0xaf0, 0xaf1, 0x7, 0x74, 
+       0x2, 0x2, 0xaf1, 0xaf2, 0x7, 0x67, 0x2, 0x2, 0xaf2, 0xaf3, 0x7, 0x34, 
+       0x2, 0x2, 0xaf3, 0xaf4, 0x7, 0x46, 0x2, 0x2, 0xaf4, 0xaf5, 0x7, 0x43, 
+       0x2, 0x2, 0xaf5, 0xaf6, 0x7, 0x74, 0x2, 0x2, 0xaf6, 0xaf7, 0x7, 0x74, 
+       0x2, 0x2, 0xaf7, 0xaf8, 0x7, 0x63, 0x2, 0x2, 0xaf8, 0xaf9, 0x7, 0x7b, 
+       0x2, 0x2, 0xaf9, 0x192, 0x3, 0x2, 0x2, 0x2, 0xafa, 0xafb, 0x7, 0x56, 
+       0x2, 0x2, 0xafb, 0xafc, 0x7, 0x67, 0x2, 0x2, 0xafc, 0xafd, 0x7, 0x7a, 
+       0x2, 0x2, 0xafd, 0xafe, 0x7, 0x76, 0x2, 0x2, 0xafe, 0xaff, 0x7, 0x77, 
+       0x2, 0x2, 0xaff, 0xb00, 0x7, 0x74, 0x2, 0x2, 0xb00, 0xb01, 0x7, 0x67, 
+       0x2, 0x2, 0xb01, 0xb02, 0x7, 0x34, 0x2, 0x2, 0xb02, 0xb03, 0x7, 0x46, 
+       0x2, 0x2, 0xb03, 0xb04, 0x7, 0x4f, 0x2, 0x2, 0xb04, 0xb05, 0x7, 0x55, 
+       0x2, 0x2, 0xb05, 0x194, 0x3, 0x2, 0x2, 0x2, 0xb06, 0xb07, 0x7, 0x56, 
+       0x2, 0x2, 0xb07, 0xb08, 0x7, 0x67, 0x2, 0x2, 0xb08, 0xb09, 0x7, 0x7a, 
+       0x2, 0x2, 0xb09, 0xb0a, 0x7, 0x76, 0x2, 0x2, 0xb0a, 0xb0b, 0x7, 0x77, 
+       0x2, 0x2, 0xb0b, 0xb0c, 0x7, 0x74, 0x2, 0x2, 0xb0c, 0xb0d, 0x7, 0x67, 
+       0x2, 0x2, 0xb0d, 0xb0e, 0x7, 0x34, 0x2, 0x2, 0xb0e, 0xb0f, 0x7, 0x46, 
+       0x2, 0x2, 0xb0f, 0xb10, 0x7, 0x4f, 0x2, 0x2, 0xb10, 0xb11, 0x7, 0x55, 
+       0x2, 0x2, 0xb11, 0xb12, 0x7, 0x43, 0x2, 0x2, 0xb12, 0xb13, 0x7, 0x74, 
+       0x2, 0x2, 0xb13, 0xb14, 0x7, 0x74, 0x2, 0x2, 0xb14, 0xb15, 0x7, 0x63, 
+       0x2, 0x2, 0xb15, 0xb16, 0x7, 0x7b, 0x2, 0x2, 0xb16, 0x196, 0x3, 0x2, 
+       0x2, 0x2, 0xb17, 0xb18, 0x7, 0x56, 0x2, 0x2, 0xb18, 0xb19, 0x7, 0x67, 
+       0x2, 0x2, 0xb19, 0xb1a, 0x7, 0x7a, 0x2, 0x2, 0xb1a, 0xb1b, 0x7, 0x76, 
+       0x2, 0x2, 0xb1b, 0xb1c, 0x7, 0x77, 0x2, 0x2, 0xb1c, 0xb1d, 0x7, 0x74, 
+       0x2, 0x2, 0xb1d, 0xb1e, 0x7, 0x67, 0x2, 0x2, 0xb1e, 0xb1f, 0x7, 0x35, 
+       0x2, 0x2, 0xb1f, 0xb20, 0x7, 0x46, 0x2, 0x2, 0xb20, 0x198, 0x3, 0x2, 
+       0x2, 0x2, 0xb21, 0xb22, 0x7, 0x56, 0x2, 0x2, 0xb22, 0xb23, 0x7, 0x67, 
+       0x2, 0x2, 0xb23, 0xb24, 0x7, 0x7a, 0x2, 0x2, 0xb24, 0xb25, 0x7, 0x76, 
+       0x2, 0x2, 0xb25, 0xb26, 0x7, 0x77, 0x2, 0x2, 0xb26, 0xb27, 0x7, 0x74, 
+       0x2, 0x2, 0xb27, 0xb28, 0x7, 0x67, 0x2, 0x2, 0xb28, 0xb29, 0x7, 0x45, 
+       0x2, 0x2, 0xb29, 0xb2a, 0x7, 0x77, 0x2, 0x2, 0xb2a, 0xb2b, 0x7, 0x64, 
+       0x2, 0x2, 0xb2b, 0xb2c, 0x7, 0x67, 0x2, 0x2, 0xb2c, 0x19a, 0x3, 0x2, 
+       0x2, 0x2, 0xb2d, 0xb2e, 0x7, 0x56, 0x2, 0x2, 0xb2e, 0xb2f, 0x7, 0x67, 
+       0x2, 0x2, 0xb2f, 0xb30, 0x7, 0x7a, 0x2, 0x2, 0xb30, 0xb31, 0x7, 0x76, 
+       0x2, 0x2, 0xb31, 0xb32, 0x7, 0x77, 0x2, 0x2, 0xb32, 0xb33, 0x7, 0x74, 
+       0x2, 0x2, 0xb33, 0xb34, 0x7, 0x67, 0x2, 0x2, 0xb34, 0xb35, 0x7, 0x45, 
+       0x2, 0x2, 0xb35, 0xb36, 0x7, 0x77, 0x2, 0x2, 0xb36, 0xb37, 0x7, 0x64, 
+       0x2, 0x2, 0xb37, 0xb38, 0x7, 0x67, 0x2, 0x2, 0xb38, 0xb39, 0x7, 0x43, 
+       0x2, 0x2, 0xb39, 0xb3a, 0x7, 0x74, 0x2, 0x2, 0xb3a, 0xb3b, 0x7, 0x74, 
+       0x2, 0x2, 0xb3b, 0xb3c, 0x7, 0x63, 0x2, 0x2, 0xb3c, 0xb3d, 0x7, 0x7b, 
+       0x2, 0x2, 0xb3d, 0x19c, 0x3, 0x2, 0x2, 0x2, 0xb3e, 0xb3f, 0x7, 0x76, 
+       0x2, 0x2, 0xb3f, 0xb40, 0x7, 0x74, 0x2, 0x2, 0xb40, 0xb41, 0x7, 0x6b, 
+       0x2, 0x2, 0xb41, 0xb42, 0x7, 0x63, 0x2, 0x2, 0xb42, 0xb43, 0x7, 0x70, 
+       0x2, 0x2, 0xb43, 0xb44, 0x7, 0x69, 0x2, 0x2, 0xb44, 0xb45, 0x7, 0x6e, 
+       0x2, 0x2, 0xb45, 0xb46, 0x7, 0x67, 0x2, 0x2, 0xb46, 0x19e, 0x3, 0x2, 
+       0x2, 0x2, 0xb47, 0xb48, 0x7, 0x76, 0x2, 0x2, 0xb48, 0xb49, 0x7, 0x74, 
+       0x2, 0x2, 0xb49, 0xb4a, 0x7, 0x6b, 0x2, 0x2, 0xb4a, 0xb4b, 0x7, 0x63, 
+       0x2, 0x2, 0xb4b, 0xb4c, 0x7, 0x70, 0x2, 0x2, 0xb4c, 0xb4d, 0x7, 0x69, 
+       0x2, 0x2, 0xb4d, 0xb4e, 0x7, 0x6e, 0x2, 0x2, 0xb4e, 0xb4f, 0x7, 0x67, 
+       0x2, 0x2, 0xb4f, 0xb50, 0x7, 0x63, 0x2, 0x2, 0xb50, 0xb51, 0x7, 0x66, 
+       0x2, 0x2, 0xb51, 0xb52, 0x7, 0x6c, 0x2, 0x2, 0xb52, 0x1a0, 0x3, 0x2, 
+       0x2, 0x2, 0xb53, 0xb54, 0x7, 0x56, 0x2, 0x2, 0xb54, 0xb55, 0x7, 0x74, 
+       0x2, 0x2, 0xb55, 0xb56, 0x7, 0x6b, 0x2, 0x2, 0xb56, 0xb57, 0x7, 0x63, 
+       0x2, 0x2, 0xb57, 0xb58, 0x7, 0x70, 0x2, 0x2, 0xb58, 0xb59, 0x7, 0x69, 
+       0x2, 0x2, 0xb59, 0xb5a, 0x7, 0x6e, 0x2, 0x2, 0xb5a, 0xb5b, 0x7, 0x67, 
+       0x2, 0x2, 0xb5b, 0xb5c, 0x7, 0x55, 0x2, 0x2, 0xb5c, 0xb5d, 0x7, 0x76, 
+       0x2, 0x2, 0xb5d, 0xb5e, 0x7, 0x74, 0x2, 0x2, 0xb5e, 0xb5f, 0x7, 0x67, 
+       0x2, 0x2, 0xb5f, 0xb60, 0x7, 0x63, 0x2, 0x2, 0xb60, 0xb61, 0x7, 0x6f, 
+       0x2, 0x2, 0xb61, 0x1a2, 0x3, 0x2, 0x2, 0x2, 0xb62, 0xb63, 0x7, 0x77, 
+       0x2, 0x2, 0xb63, 0xb64, 0x7, 0x70, 0x2, 0x2, 0xb64, 0xb65, 0x7, 0x6b, 
+       0x2, 0x2, 0xb65, 0xb66, 0x7, 0x68, 0x2, 0x2, 0xb66, 0xb67, 0x7, 0x71, 
+       0x2, 0x2, 0xb67, 0xb68, 0x7, 0x74, 0x2, 0x2, 0xb68, 0xb69, 0x7, 0x6f, 
+       0x2, 0x2, 0xb69, 0x1a4, 0x3, 0x2, 0x2, 0x2, 0xb6a, 0xb6b, 0x7, 0x77, 
+       0x2, 0x2, 0xb6b, 0xb6c, 0x7, 0x6b, 0x2, 0x2, 0xb6c, 0xb6d, 0x7, 0x70, 
+       0x2, 0x2, 0xb6d, 0xb6e, 0x7, 0x76, 0x2, 0x2, 0xb6e, 0x1a6, 0x3, 0x2, 
+       0x2, 0x2, 0xb6f, 0xb70, 0x7, 0x77, 0x2, 0x2, 0xb70, 0xb71, 0x7, 0x6b, 
+       0x2, 0x2, 0xb71, 0xb72, 0x7, 0x70, 0x2, 0x2, 0xb72, 0xb73, 0x7, 0x76, 
+       0x2, 0x2, 0xb73, 0xb74, 0x7, 0x33, 0x2, 0x2, 0xb74, 0x1a8, 0x3, 0x2, 
+       0x2, 0x2, 0xb75, 0xb76, 0x7, 0x77, 0x2, 0x2, 0xb76, 0xb77, 0x7, 0x6b, 
+       0x2, 0x2, 0xb77, 0xb78, 0x7, 0x70, 0x2, 0x2, 0xb78, 0xb79, 0x7, 0x76, 
+       0x2, 0x2, 0xb79, 0xb7a, 0x7, 0x34, 0x2, 0x2, 0xb7a, 0x1aa, 0x3, 0x2, 
+       0x2, 0x2, 0xb7b, 0xb7c, 0x7, 0x77, 0x2, 0x2, 0xb7c, 0xb7d, 0x7, 0x6b, 
+       0x2, 0x2, 0xb7d, 0xb7e, 0x7, 0x70, 0x2, 0x2, 0xb7e, 0xb7f, 0x7, 0x76, 
+       0x2, 0x2, 0xb7f, 0xb80, 0x7, 0x35, 0x2, 0x2, 0xb80, 0x1ac, 0x3, 0x2, 
+       0x2, 0x2, 0xb81, 0xb82, 0x7, 0x77, 0x2, 0x2, 0xb82, 0xb83, 0x7, 0x6b, 
+       0x2, 0x2, 0xb83, 0xb84, 0x7, 0x70, 0x2, 0x2, 0xb84, 0xb85, 0x7, 0x76, 
+       0x2, 0x2, 0xb85, 0xb86, 0x7, 0x36, 0x2, 0x2, 0xb86, 0x1ae, 0x3, 0x2, 
+       0x2, 0x2, 0xb87, 0xb88, 0x7, 0x77, 0x2, 0x2, 0xb88, 0xb89, 0x7, 0x6b, 
+       0x2, 0x2, 0xb89, 0xb8a, 0x7, 0x70, 0x2, 0x2, 0xb8a, 0xb8b, 0x7, 0x76, 
+       0x2, 0x2, 0xb8b, 0xb8c, 0x7, 0x33, 0x2, 0x2, 0xb8c, 0xb8d, 0x7, 0x7a, 
+       0x2, 0x2, 0xb8d, 0xb8e, 0x7, 0x33, 0x2, 0x2, 0xb8e, 0x1b0, 0x3, 0x2, 
+       0x2, 0x2, 0xb8f, 0xb90, 0x7, 0x77, 0x2, 0x2, 0xb90, 0xb91, 0x7, 0x6b, 
+       0x2, 0x2, 0xb91, 0xb92, 0x7, 0x70, 0x2, 0x2, 0xb92, 0xb93, 0x7, 0x76, 
+       0x2, 0x2, 0xb93, 0xb94, 0x7, 0x33, 0x2, 0x2, 0xb94, 0xb95, 0x7, 0x7a, 
+       0x2, 0x2, 0xb95, 0xb96, 0x7, 0x34, 0x2, 0x2, 0xb96, 0x1b2, 0x3, 0x2, 
+       0x2, 0x2, 0xb97, 0xb98, 0x7, 0x77, 0x2, 0x2, 0xb98, 0xb99, 0x7, 0x6b, 
+       0x2, 0x2, 0xb99, 0xb9a, 0x7, 0x70, 0x2, 0x2, 0xb9a, 0xb9b, 0x7, 0x76, 
+       0x2, 0x2, 0xb9b, 0xb9c, 0x7, 0x33, 0x2, 0x2, 0xb9c, 0xb9d, 0x7, 0x7a, 
+       0x2, 0x2, 0xb9d, 0xb9e, 0x7, 0x35, 0x2, 0x2, 0xb9e, 0x1b4, 0x3, 0x2, 
+       0x2, 0x2, 0xb9f, 0xba0, 0x7, 0x77, 0x2, 0x2, 0xba0, 0xba1, 0x7, 0x6b, 
+       0x2, 0x2, 0xba1, 0xba2, 0x7, 0x70, 0x2, 0x2, 0xba2, 0xba3, 0x7, 0x76, 
+       0x2, 0x2, 0xba3, 0xba4, 0x7, 0x33, 0x2, 0x2, 0xba4, 0xba5, 0x7, 0x7a, 
+       0x2, 0x2, 0xba5, 0xba6, 0x7, 0x36, 0x2, 0x2, 0xba6, 0x1b6, 0x3, 0x2, 
+       0x2, 0x2, 0xba7, 0xba8, 0x7, 0x77, 0x2, 0x2, 0xba8, 0xba9, 0x7, 0x6b, 
+       0x2, 0x2, 0xba9, 0xbaa, 0x7, 0x70, 0x2, 0x2, 0xbaa, 0xbab, 0x7, 0x76, 
+       0x2, 0x2, 0xbab, 0xbac, 0x7, 0x34, 0x2, 0x2, 0xbac, 0xbad, 0x7, 0x7a, 
+       0x2, 0x2, 0xbad, 0xbae, 0x7, 0x33, 0x2, 0x2, 0xbae, 0x1b8, 0x3, 0x2, 
+       0x2, 0x2, 0xbaf, 0xbb0, 0x7, 0x77, 0x2, 0x2, 0xbb0, 0xbb1, 0x7, 0x6b, 
+       0x2, 0x2, 0xbb1, 0xbb2, 0x7, 0x70, 0x2, 0x2, 0xbb2, 0xbb3, 0x7, 0x76, 
+       0x2, 0x2, 0xbb3, 0xbb4, 0x7, 0x34, 0x2, 0x2, 0xbb4, 0xbb5, 0x7, 0x7a, 
+       0x2, 0x2, 0xbb5, 0xbb6, 0x7, 0x34, 0x2, 0x2, 0xbb6, 0x1ba, 0x3, 0x2, 
+       0x2, 0x2, 0xbb7, 0xbb8, 0x7, 0x77, 0x2, 0x2, 0xbb8, 0xbb9, 0x7, 0x6b, 
+       0x2, 0x2, 0xbb9, 0xbba, 0x7, 0x70, 0x2, 0x2, 0xbba, 0xbbb, 0x7, 0x76, 
+       0x2, 0x2, 0xbbb, 0xbbc, 0x7, 0x34, 0x2, 0x2, 0xbbc, 0xbbd, 0x7, 0x7a, 
+       0x2, 0x2, 0xbbd, 0xbbe, 0x7, 0x35, 0x2, 0x2, 0xbbe, 0x1bc, 0x3, 0x2, 
+       0x2, 0x2, 0xbbf, 0xbc0, 0x7, 0x77, 0x2, 0x2, 0xbc0, 0xbc1, 0x7, 0x6b, 
+       0x2, 0x2, 0xbc1, 0xbc2, 0x7, 0x70, 0x2, 0x2, 0xbc2, 0xbc3, 0x7, 0x76, 
+       0x2, 0x2, 0xbc3, 0xbc4, 0x7, 0x34, 0x2, 0x2, 0xbc4, 0xbc5, 0x7, 0x7a, 
+       0x2, 0x2, 0xbc5, 0xbc6, 0x7, 0x36, 0x2, 0x2, 0xbc6, 0x1be, 0x3, 0x2, 
+       0x2, 0x2, 0xbc7, 0xbc8, 0x7, 0x77, 0x2, 0x2, 0xbc8, 0xbc9, 0x7, 0x6b, 
+       0x2, 0x2, 0xbc9, 0xbca, 0x7, 0x70, 0x2, 0x2, 0xbca, 0xbcb, 0x7, 0x76, 
+       0x2, 0x2, 0xbcb, 0xbcc, 0x7, 0x35, 0x2, 0x2, 0xbcc, 0xbcd, 0x7, 0x7a, 
+       0x2, 0x2, 0xbcd, 0xbce, 0x7, 0x33, 0x2, 0x2, 0xbce, 0x1c0, 0x3, 0x2, 
+       0x2, 0x2, 0xbcf, 0xbd0, 0x7, 0x77, 0x2, 0x2, 0xbd0, 0xbd1, 0x7, 0x6b, 
+       0x2, 0x2, 0xbd1, 0xbd2, 0x7, 0x70, 0x2, 0x2, 0xbd2, 0xbd3, 0x7, 0x76, 
+       0x2, 0x2, 0xbd3, 0xbd4, 0x7, 0x35, 0x2, 0x2, 0xbd4, 0xbd5, 0x7, 0x7a, 
+       0x2, 0x2, 0xbd5, 0xbd6, 0x7, 0x34, 0x2, 0x2, 0xbd6, 0x1c2, 0x3, 0x2, 
+       0x2, 0x2, 0xbd7, 0xbd8, 0x7, 0x77, 0x2, 0x2, 0xbd8, 0xbd9, 0x7, 0x6b, 
+       0x2, 0x2, 0xbd9, 0xbda, 0x7, 0x70, 0x2, 0x2, 0xbda, 0xbdb, 0x7, 0x76, 
+       0x2, 0x2, 0xbdb, 0xbdc, 0x7, 0x35, 0x2, 0x2, 0xbdc, 0xbdd, 0x7, 0x7a, 
+       0x2, 0x2, 0xbdd, 0xbde, 0x7, 0x35, 0x2, 0x2, 0xbde, 0x1c4, 0x3, 0x2, 
+       0x2, 0x2, 0xbdf, 0xbe0, 0x7, 0x77, 0x2, 0x2, 0xbe0, 0xbe1, 0x7, 0x6b, 
+       0x2, 0x2, 0xbe1, 0xbe2, 0x7, 0x70, 0x2, 0x2, 0xbe2, 0xbe3, 0x7, 0x76, 
+       0x2, 0x2, 0xbe3, 0xbe4, 0x7, 0x35, 0x2, 0x2, 0xbe4, 0xbe5, 0x7, 0x7a, 
+       0x2, 0x2, 0xbe5, 0xbe6, 0x7, 0x36, 0x2, 0x2, 0xbe6, 0x1c6, 0x3, 0x2, 
+       0x2, 0x2, 0xbe7, 0xbe8, 0x7, 0x77, 0x2, 0x2, 0xbe8, 0xbe9, 0x7, 0x6b, 
+       0x2, 0x2, 0xbe9, 0xbea, 0x7, 0x70, 0x2, 0x2, 0xbea, 0xbeb, 0x7, 0x76, 
+       0x2, 0x2, 0xbeb, 0xbec, 0x7, 0x36, 0x2, 0x2, 0xbec, 0xbed, 0x7, 0x7a, 
+       0x2, 0x2, 0xbed, 0xbee, 0x7, 0x33, 0x2, 0x2, 0xbee, 0x1c8, 0x3, 0x2, 
+       0x2, 0x2, 0xbef, 0xbf0, 0x7, 0x77, 0x2, 0x2, 0xbf0, 0xbf1, 0x7, 0x6b, 
+       0x2, 0x2, 0xbf1, 0xbf2, 0x7, 0x70, 0x2, 0x2, 0xbf2, 0xbf3, 0x7, 0x76, 
+       0x2, 0x2, 0xbf3, 0xbf4, 0x7, 0x36, 0x2, 0x2, 0xbf4, 0xbf5, 0x7, 0x7a, 
+       0x2, 0x2, 0xbf5, 0xbf6, 0x7, 0x34, 0x2, 0x2, 0xbf6, 0x1ca, 0x3, 0x2, 
+       0x2, 0x2, 0xbf7, 0xbf8, 0x7, 0x77, 0x2, 0x2, 0xbf8, 0xbf9, 0x7, 0x6b, 
+       0x2, 0x2, 0xbf9, 0xbfa, 0x7, 0x70, 0x2, 0x2, 0xbfa, 0xbfb, 0x7, 0x76, 
+       0x2, 0x2, 0xbfb, 0xbfc, 0x7, 0x36, 0x2, 0x2, 0xbfc, 0xbfd, 0x7, 0x7a, 
+       0x2, 0x2, 0xbfd, 0xbfe, 0x7, 0x35, 0x2, 0x2, 0xbfe, 0x1cc, 0x3, 0x2, 
+       0x2, 0x2, 0xbff, 0xc00, 0x7, 0x77, 0x2, 0x2, 0xc00, 0xc01, 0x7, 0x6b, 
+       0x2, 0x2, 0xc01, 0xc02, 0x7, 0x70, 0x2, 0x2, 0xc02, 0xc03, 0x7, 0x76, 
+       0x2, 0x2, 0xc03, 0xc04, 0x7, 0x36, 0x2, 0x2, 0xc04, 0xc05, 0x7, 0x7a, 
+       0x2, 0x2, 0xc05, 0xc06, 0x7, 0x36, 0x2, 0x2, 0xc06, 0x1ce, 0x3, 0x2, 
+       0x2, 0x2, 0xc07, 0xc08, 0x7, 0x77, 0x2, 0x2, 0xc08, 0xc09, 0x7, 0x6b, 
+       0x2, 0x2, 0xc09, 0xc0a, 0x7, 0x70, 0x2, 0x2, 0xc0a, 0xc0b, 0x7, 0x76, 
+       0x2, 0x2, 0xc0b, 0xc0c, 0x7, 0x33, 0x2, 0x2, 0xc0c, 0xc0d, 0x7, 0x38, 
+       0x2, 0x2, 0xc0d, 0xc0e, 0x7, 0x61, 0x2, 0x2, 0xc0e, 0xc0f, 0x7, 0x76, 
+       0x2, 0x2, 0xc0f, 0x1d0, 0x3, 0x2, 0x2, 0x2, 0xc10, 0xc11, 0x7, 0x77, 
+       0x2, 0x2, 0xc11, 0xc12, 0x7, 0x6b, 0x2, 0x2, 0xc12, 0xc13, 0x7, 0x70, 
+       0x2, 0x2, 0xc13, 0xc14, 0x7, 0x76, 0x2, 0x2, 0xc14, 0xc15, 0x7, 0x35, 
+       0x2, 0x2, 0xc15, 0xc16, 0x7, 0x34, 0x2, 0x2, 0xc16, 0xc17, 0x7, 0x61, 
+       0x2, 0x2, 0xc17, 0xc18, 0x7, 0x76, 0x2, 0x2, 0xc18, 0x1d2, 0x3, 0x2, 
+       0x2, 0x2, 0xc19, 0xc1a, 0x7, 0x77, 0x2, 0x2, 0xc1a, 0xc1b, 0x7, 0x6b, 
+       0x2, 0x2, 0xc1b, 0xc1c, 0x7, 0x70, 0x2, 0x2, 0xc1c, 0xc1d, 0x7, 0x76, 
+       0x2, 0x2, 0xc1d, 0xc1e, 0x7, 0x38, 0x2, 0x2, 0xc1e, 0xc1f, 0x7, 0x36, 
+       0x2, 0x2, 0xc1f, 0xc20, 0x7, 0x61, 0x2, 0x2, 0xc20, 0xc21, 0x7, 0x76, 
+       0x2, 0x2, 0xc21, 0x1d4, 0x3, 0x2, 0x2, 0x2, 0xc22, 0xc23, 0x7, 0x77, 
+       0x2, 0x2, 0xc23, 0xc24, 0x7, 0x70, 0x2, 0x2, 0xc24, 0xc25, 0x7, 0x71, 
+       0x2, 0x2, 0xc25, 0xc26, 0x7, 0x74, 0x2, 0x2, 0xc26, 0xc27, 0x7, 0x6f, 
+       0x2, 0x2, 0xc27, 0x1d6, 0x3, 0x2, 0x2, 0x2, 0xc28, 0xc29, 0x7, 0x77, 
+       0x2, 0x2, 0xc29, 0xc2a, 0x7, 0x70, 0x2, 0x2, 0xc2a, 0xc2b, 0x7, 0x75, 
+       0x2, 0x2, 0xc2b, 0xc2c, 0x7, 0x6b, 0x2, 0x2, 0xc2c, 0xc2d, 0x7, 0x69, 
+       0x2, 0x2, 0xc2d, 0xc2e, 0x7, 0x70, 0x2, 0x2, 0xc2e, 0xc2f, 0x7, 0x67, 
+       0x2, 0x2, 0xc2f, 0xc30, 0x7, 0x66, 0x2, 0x2, 0xc30, 0x1d8, 0x3, 0x2, 
+       0x2, 0x2, 0xc31, 0xc32, 0x7, 0x66, 0x2, 0x2, 0xc32, 0xc33, 0x7, 0x79, 
+       0x2, 0x2, 0xc33, 0xc34, 0x7, 0x71, 0x2, 0x2, 0xc34, 0xc35, 0x7, 0x74, 
+       0x2, 0x2, 0xc35, 0xc36, 0x7, 0x66, 0x2, 0x2, 0xc36, 0x1da, 0x3, 0x2, 
+       0x2, 0x2, 0xc37, 0xc38, 0x7, 0x66, 0x2, 0x2, 0xc38, 0xc39, 0x7, 0x79, 
+       0x2, 0x2, 0xc39, 0xc3a, 0x7, 0x71, 0x2, 0x2, 0xc3a, 0xc3b, 0x7, 0x74, 
+       0x2, 0x2, 0xc3b, 0xc3c, 0x7, 0x66, 0x2, 0x2, 0xc3c, 0xc3d, 0x7, 0x33, 
+       0x2, 0x2, 0xc3d, 0x1dc, 0x3, 0x2, 0x2, 0x2, 0xc3e, 0xc3f, 0x7, 0x66, 
+       0x2, 0x2, 0xc3f, 0xc40, 0x7, 0x79, 0x2, 0x2, 0xc40, 0xc41, 0x7, 0x71, 
+       0x2, 0x2, 0xc41, 0xc42, 0x7, 0x74, 0x2, 0x2, 0xc42, 0xc43, 0x7, 0x66, 
+       0x2, 0x2, 0xc43, 0xc44, 0x7, 0x34, 0x2, 0x2, 0xc44, 0x1de, 0x3, 0x2, 
+       0x2, 0x2, 0xc45, 0xc46, 0x7, 0x66, 0x2, 0x2, 0xc46, 0xc47, 0x7, 0x79, 
+       0x2, 0x2, 0xc47, 0xc48, 0x7, 0x71, 0x2, 0x2, 0xc48, 0xc49, 0x7, 0x74, 
+       0x2, 0x2, 0xc49, 0xc4a, 0x7, 0x66, 0x2, 0x2, 0xc4a, 0xc4b, 0x7, 0x35, 
+       0x2, 0x2, 0xc4b, 0x1e0, 0x3, 0x2, 0x2, 0x2, 0xc4c, 0xc4d, 0x7, 0x66, 
+       0x2, 0x2, 0xc4d, 0xc4e, 0x7, 0x79, 0x2, 0x2, 0xc4e, 0xc4f, 0x7, 0x71, 
+       0x2, 0x2, 0xc4f, 0xc50, 0x7, 0x74, 0x2, 0x2, 0xc50, 0xc51, 0x7, 0x66, 
+       0x2, 0x2, 0xc51, 0xc52, 0x7, 0x36, 0x2, 0x2, 0xc52, 0x1e2, 0x3, 0x2, 
+       0x2, 0x2, 0xc53, 0xc54, 0x7, 0x66, 0x2, 0x2, 0xc54, 0xc55, 0x7, 0x79, 
+       0x2, 0x2, 0xc55, 0xc56, 0x7, 0x71, 0x2, 0x2, 0xc56, 0xc57, 0x7, 0x74, 
+       0x2, 0x2, 0xc57, 0xc58, 0x7, 0x66, 0x2, 0x2, 0xc58, 0xc59, 0x7, 0x33, 
+       0x2, 0x2, 0xc59, 0xc5a, 0x7, 0x7a, 0x2, 0x2, 0xc5a, 0xc5b, 0x7, 0x33, 
+       0x2, 0x2, 0xc5b, 0x1e4, 0x3, 0x2, 0x2, 0x2, 0xc5c, 0xc5d, 0x7, 0x66, 
+       0x2, 0x2, 0xc5d, 0xc5e, 0x7, 0x79, 0x2, 0x2, 0xc5e, 0xc5f, 0x7, 0x71, 
+       0x2, 0x2, 0xc5f, 0xc60, 0x7, 0x74, 0x2, 0x2, 0xc60, 0xc61, 0x7, 0x66, 
+       0x2, 0x2, 0xc61, 0xc62, 0x7, 0x33, 0x2, 0x2, 0xc62, 0xc63, 0x7, 0x7a, 
+       0x2, 0x2, 0xc63, 0xc64, 0x7, 0x34, 0x2, 0x2, 0xc64, 0x1e6, 0x3, 0x2, 
+       0x2, 0x2, 0xc65, 0xc66, 0x7, 0x66, 0x2, 0x2, 0xc66, 0xc67, 0x7, 0x79, 
+       0x2, 0x2, 0xc67, 0xc68, 0x7, 0x71, 0x2, 0x2, 0xc68, 0xc69, 0x7, 0x74, 
+       0x2, 0x2, 0xc69, 0xc6a, 0x7, 0x66, 0x2, 0x2, 0xc6a, 0xc6b, 0x7, 0x33, 
+       0x2, 0x2, 0xc6b, 0xc6c, 0x7, 0x7a, 0x2, 0x2, 0xc6c, 0xc6d, 0x7, 0x35, 
+       0x2, 0x2, 0xc6d, 0x1e8, 0x3, 0x2, 0x2, 0x2, 0xc6e, 0xc6f, 0x7, 0x66, 
+       0x2, 0x2, 0xc6f, 0xc70, 0x7, 0x79, 0x2, 0x2, 0xc70, 0xc71, 0x7, 0x71, 
+       0x2, 0x2, 0xc71, 0xc72, 0x7, 0x74, 0x2, 0x2, 0xc72, 0xc73, 0x7, 0x66, 
+       0x2, 0x2, 0xc73, 0xc74, 0x7, 0x33, 0x2, 0x2, 0xc74, 0xc75, 0x7, 0x7a, 
+       0x2, 0x2, 0xc75, 0xc76, 0x7, 0x36, 0x2, 0x2, 0xc76, 0x1ea, 0x3, 0x2, 
+       0x2, 0x2, 0xc77, 0xc78, 0x7, 0x66, 0x2, 0x2, 0xc78, 0xc79, 0x7, 0x79, 
+       0x2, 0x2, 0xc79, 0xc7a, 0x7, 0x71, 0x2, 0x2, 0xc7a, 0xc7b, 0x7, 0x74, 
+       0x2, 0x2, 0xc7b, 0xc7c, 0x7, 0x66, 0x2, 0x2, 0xc7c, 0xc7d, 0x7, 0x34, 
+       0x2, 0x2, 0xc7d, 0xc7e, 0x7, 0x7a, 0x2, 0x2, 0xc7e, 0xc7f, 0x7, 0x33, 
+       0x2, 0x2, 0xc7f, 0x1ec, 0x3, 0x2, 0x2, 0x2, 0xc80, 0xc81, 0x7, 0x66, 
+       0x2, 0x2, 0xc81, 0xc82, 0x7, 0x79, 0x2, 0x2, 0xc82, 0xc83, 0x7, 0x71, 
+       0x2, 0x2, 0xc83, 0xc84, 0x7, 0x74, 0x2, 0x2, 0xc84, 0xc85, 0x7, 0x66, 
+       0x2, 0x2, 0xc85, 0xc86, 0x7, 0x34, 0x2, 0x2, 0xc86, 0xc87, 0x7, 0x7a, 
+       0x2, 0x2, 0xc87, 0xc88, 0x7, 0x34, 0x2, 0x2, 0xc88, 0x1ee, 0x3, 0x2, 
+       0x2, 0x2, 0xc89, 0xc8a, 0x7, 0x66, 0x2, 0x2, 0xc8a, 0xc8b, 0x7, 0x79, 
+       0x2, 0x2, 0xc8b, 0xc8c, 0x7, 0x71, 0x2, 0x2, 0xc8c, 0xc8d, 0x7, 0x74, 
+       0x2, 0x2, 0xc8d, 0xc8e, 0x7, 0x66, 0x2, 0x2, 0xc8e, 0xc8f, 0x7, 0x34, 
+       0x2, 0x2, 0xc8f, 0xc90, 0x7, 0x7a, 0x2, 0x2, 0xc90, 0xc91, 0x7, 0x35, 
+       0x2, 0x2, 0xc91, 0x1f0, 0x3, 0x2, 0x2, 0x2, 0xc92, 0xc93, 0x7, 0x66, 
+       0x2, 0x2, 0xc93, 0xc94, 0x7, 0x79, 0x2, 0x2, 0xc94, 0xc95, 0x7, 0x71, 
+       0x2, 0x2, 0xc95, 0xc96, 0x7, 0x74, 0x2, 0x2, 0xc96, 0xc97, 0x7, 0x66, 
+       0x2, 0x2, 0xc97, 0xc98, 0x7, 0x34, 0x2, 0x2, 0xc98, 0xc99, 0x7, 0x7a, 
+       0x2, 0x2, 0xc99, 0xc9a, 0x7, 0x36, 0x2, 0x2, 0xc9a, 0x1f2, 0x3, 0x2, 
+       0x2, 0x2, 0xc9b, 0xc9c, 0x7, 0x66, 0x2, 0x2, 0xc9c, 0xc9d, 0x7, 0x79, 
+       0x2, 0x2, 0xc9d, 0xc9e, 0x7, 0x71, 0x2, 0x2, 0xc9e, 0xc9f, 0x7, 0x74, 
+       0x2, 0x2, 0xc9f, 0xca0, 0x7, 0x66, 0x2, 0x2, 0xca0, 0xca1, 0x7, 0x35, 
+       0x2, 0x2, 0xca1, 0xca2, 0x7, 0x7a, 0x2, 0x2, 0xca2, 0xca3, 0x7, 0x33, 
+       0x2, 0x2, 0xca3, 0x1f4, 0x3, 0x2, 0x2, 0x2, 0xca4, 0xca5, 0x7, 0x66, 
+       0x2, 0x2, 0xca5, 0xca6, 0x7, 0x79, 0x2, 0x2, 0xca6, 0xca7, 0x7, 0x71, 
+       0x2, 0x2, 0xca7, 0xca8, 0x7, 0x74, 0x2, 0x2, 0xca8, 0xca9, 0x7, 0x66, 
+       0x2, 0x2, 0xca9, 0xcaa, 0x7, 0x35, 0x2, 0x2, 0xcaa, 0xcab, 0x7, 0x7a, 
+       0x2, 0x2, 0xcab, 0xcac, 0x7, 0x34, 0x2, 0x2, 0xcac, 0x1f6, 0x3, 0x2, 
+       0x2, 0x2, 0xcad, 0xcae, 0x7, 0x66, 0x2, 0x2, 0xcae, 0xcaf, 0x7, 0x79, 
+       0x2, 0x2, 0xcaf, 0xcb0, 0x7, 0x71, 0x2, 0x2, 0xcb0, 0xcb1, 0x7, 0x74, 
+       0x2, 0x2, 0xcb1, 0xcb2, 0x7, 0x66, 0x2, 0x2, 0xcb2, 0xcb3, 0x7, 0x35, 
+       0x2, 0x2, 0xcb3, 0xcb4, 0x7, 0x7a, 0x2, 0x2, 0xcb4, 0xcb5, 0x7, 0x35, 
+       0x2, 0x2, 0xcb5, 0x1f8, 0x3, 0x2, 0x2, 0x2, 0xcb6, 0xcb7, 0x7, 0x66, 
+       0x2, 0x2, 0xcb7, 0xcb8, 0x7, 0x79, 0x2, 0x2, 0xcb8, 0xcb9, 0x7, 0x71, 
+       0x2, 0x2, 0xcb9, 0xcba, 0x7, 0x74, 0x2, 0x2, 0xcba, 0xcbb, 0x7, 0x66, 
+       0x2, 0x2, 0xcbb, 0xcbc, 0x7, 0x35, 0x2, 0x2, 0xcbc, 0xcbd, 0x7, 0x7a, 
+       0x2, 0x2, 0xcbd, 0xcbe, 0x7, 0x36, 0x2, 0x2, 0xcbe, 0x1fa, 0x3, 0x2, 
+       0x2, 0x2, 0xcbf, 0xcc0, 0x7, 0x66, 0x2, 0x2, 0xcc0, 0xcc1, 0x7, 0x79, 
+       0x2, 0x2, 0xcc1, 0xcc2, 0x7, 0x71, 0x2, 0x2, 0xcc2, 0xcc3, 0x7, 0x74, 
+       0x2, 0x2, 0xcc3, 0xcc4, 0x7, 0x66, 0x2, 0x2, 0xcc4, 0xcc5, 0x7, 0x36, 
+       0x2, 0x2, 0xcc5, 0xcc6, 0x7, 0x7a, 0x2, 0x2, 0xcc6, 0xcc7, 0x7, 0x33, 
+       0x2, 0x2, 0xcc7, 0x1fc, 0x3, 0x2, 0x2, 0x2, 0xcc8, 0xcc9, 0x7, 0x66, 
+       0x2, 0x2, 0xcc9, 0xcca, 0x7, 0x79, 0x2, 0x2, 0xcca, 0xccb, 0x7, 0x71, 
+       0x2, 0x2, 0xccb, 0xccc, 0x7, 0x74, 0x2, 0x2, 0xccc, 0xccd, 0x7, 0x66, 
+       0x2, 0x2, 0xccd, 0xcce, 0x7, 0x36, 0x2, 0x2, 0xcce, 0xccf, 0x7, 0x7a, 
+       0x2, 0x2, 0xccf, 0xcd0, 0x7, 0x34, 0x2, 0x2, 0xcd0, 0x1fe, 0x3, 0x2, 
+       0x2, 0x2, 0xcd1, 0xcd2, 0x7, 0x66, 0x2, 0x2, 0xcd2, 0xcd3, 0x7, 0x79, 
+       0x2, 0x2, 0xcd3, 0xcd4, 0x7, 0x71, 0x2, 0x2, 0xcd4, 0xcd5, 0x7, 0x74, 
+       0x2, 0x2, 0xcd5, 0xcd6, 0x7, 0x66, 0x2, 0x2, 0xcd6, 0xcd7, 0x7, 0x36, 
+       0x2, 0x2, 0xcd7, 0xcd8, 0x7, 0x7a, 0x2, 0x2, 0xcd8, 0xcd9, 0x7, 0x35, 
+       0x2, 0x2, 0xcd9, 0x200, 0x3, 0x2, 0x2, 0x2, 0xcda, 0xcdb, 0x7, 0x66, 
+       0x2, 0x2, 0xcdb, 0xcdc, 0x7, 0x79, 0x2, 0x2, 0xcdc, 0xcdd, 0x7, 0x71, 
+       0x2, 0x2, 0xcdd, 0xcde, 0x7, 0x74, 0x2, 0x2, 0xcde, 0xcdf, 0x7, 0x66, 
+       0x2, 0x2, 0xcdf, 0xce0, 0x7, 0x36, 0x2, 0x2, 0xce0, 0xce1, 0x7, 0x7a, 
+       0x2, 0x2, 0xce1, 0xce2, 0x7, 0x36, 0x2, 0x2, 0xce2, 0x202, 0x3, 0x2, 
+       0x2, 0x2, 0xce3, 0xce4, 0x7, 0x78, 0x2, 0x2, 0xce4, 0xce5, 0x7, 0x67, 
+       0x2, 0x2, 0xce5, 0xce6, 0x7, 0x65, 0x2, 0x2, 0xce6, 0xce7, 0x7, 0x76, 
+       0x2, 0x2, 0xce7, 0xce8, 0x7, 0x71, 0x2, 0x2, 0xce8, 0xce9, 0x7, 0x74, 
+       0x2, 0x2, 0xce9, 0x204, 0x3, 0x2, 0x2, 0x2, 0xcea, 0xceb, 0x7, 0x78, 
+       0x2, 0x2, 0xceb, 0xcec, 0x7, 0x71, 0x2, 0x2, 0xcec, 0xced, 0x7, 0x6e, 
+       0x2, 0x2, 0xced, 0xcee, 0x7, 0x63, 0x2, 0x2, 0xcee, 0xcef, 0x7, 0x76, 
+       0x2, 0x2, 0xcef, 0xcf0, 0x7, 0x6b, 0x2, 0x2, 0xcf0, 0xcf1, 0x7, 0x6e, 
+       0x2, 0x2, 0xcf1, 0xcf2, 0x7, 0x67, 0x2, 0x2, 0xcf2, 0x206, 0x3, 0x2, 
+       0x2, 0x2, 0xcf3, 0xcf4, 0x7, 0x78, 0x2, 0x2, 0xcf4, 0xcf5, 0x7, 0x71, 
+       0x2, 0x2, 0xcf5, 0xcf6, 0x7, 0x6b, 0x2, 0x2, 0xcf6, 0xcf7, 0x7, 0x66, 
+       0x2, 0x2, 0xcf7, 0x208, 0x3, 0x2, 0x2, 0x2, 0xcf8, 0xcf9, 0x7, 0x79, 
+       0x2, 0x2, 0xcf9, 0xcfa, 0x7, 0x6a, 0x2, 0x2, 0xcfa, 0xcfb, 0x7, 0x6b, 
+       0x2, 0x2, 0xcfb, 0xcfc, 0x7, 0x6e, 0x2, 0x2, 0xcfc, 0xcfd, 0x7, 0x67, 
+       0x2, 0x2, 0xcfd, 0x20a, 0x3, 0x2, 0x2, 0x2, 0xcfe, 0xcff, 0x7, 0x55, 
+       0x2, 0x2, 0xcff, 0xd00, 0x7, 0x76, 0x2, 0x2, 0xd00, 0xd01, 0x7, 0x63, 
+       0x2, 0x2, 0xd01, 0xd02, 0x7, 0x76, 0x2, 0x2, 0xd02, 0xd03, 0x7, 0x67, 
+       0x2, 0x2, 0xd03, 0xd04, 0x7, 0x51, 0x2, 0x2, 0xd04, 0xd05, 0x7, 0x64, 
+       0x2, 0x2, 0xd05, 0xd06, 0x7, 0x6c, 0x2, 0x2, 0xd06, 0xd07, 0x7, 0x67, 
+       0x2, 0x2, 0xd07, 0xd08, 0x7, 0x65, 0x2, 0x2, 0xd08, 0xd09, 0x7, 0x76, 
+       0x2, 0x2, 0xd09, 0xd0a, 0x7, 0x45, 0x2, 0x2, 0xd0a, 0xd0b, 0x7, 0x71, 
+       0x2, 0x2, 0xd0b, 0xd0c, 0x7, 0x70, 0x2, 0x2, 0xd0c, 0xd0d, 0x7, 0x68, 
+       0x2, 0x2, 0xd0d, 0xd0e, 0x7, 0x6b, 0x2, 0x2, 0xd0e, 0xd0f, 0x7, 0x69, 
+       0x2, 0x2, 0xd0f, 0x20c, 0x3, 0x2, 0x2, 0x2, 0xd10, 0xd11, 0x7, 0x4e, 
+       0x2, 0x2, 0xd11, 0xd12, 0x7, 0x71, 0x2, 0x2, 0xd12, 0xd13, 0x7, 0x65, 
+       0x2, 0x2, 0xd13, 0xd14, 0x7, 0x63, 0x2, 0x2, 0xd14, 0xd15, 0x7, 0x6e, 
+       0x2, 0x2, 0xd15, 0xd16, 0x7, 0x54, 0x2, 0x2, 0xd16, 0xd17, 0x7, 0x71, 
+       0x2, 0x2, 0xd17, 0xd18, 0x7, 0x71, 0x2, 0x2, 0xd18, 0xd19, 0x7, 0x76, 
+       0x2, 0x2, 0xd19, 0xd1a, 0x7, 0x55, 0x2, 0x2, 0xd1a, 0xd1b, 0x7, 0x6b, 
+       0x2, 0x2, 0xd1b, 0xd1c, 0x7, 0x69, 0x2, 0x2, 0xd1c, 0xd1d, 0x7, 0x70, 
+       0x2, 0x2, 0xd1d, 0xd1e, 0x7, 0x63, 0x2, 0x2, 0xd1e, 0xd1f, 0x7, 0x76, 
+       0x2, 0x2, 0xd1f, 0xd20, 0x7, 0x77, 0x2, 0x2, 0xd20, 0xd21, 0x7, 0x74, 
+       0x2, 0x2, 0xd21, 0xd22, 0x7, 0x67, 0x2, 0x2, 0xd22, 0x20e, 0x3, 0x2, 
+       0x2, 0x2, 0xd23, 0xd24, 0x7, 0x49, 0x2, 0x2, 0xd24, 0xd25, 0x7, 0x6e, 
+       0x2, 0x2, 0xd25, 0xd26, 0x7, 0x71, 0x2, 0x2, 0xd26, 0xd27, 0x7, 0x64, 
+       0x2, 0x2, 0xd27, 0xd28, 0x7, 0x63, 0x2, 0x2, 0xd28, 0xd29, 0x7, 0x6e, 
+       0x2, 0x2, 0xd29, 0xd2a, 0x7, 0x54, 0x2, 0x2, 0xd2a, 0xd2b, 0x7, 0x71, 
+       0x2, 0x2, 0xd2b, 0xd2c, 0x7, 0x71, 0x2, 0x2, 0xd2c, 0xd2d, 0x7, 0x76, 
+       0x2, 0x2, 0xd2d, 0xd2e, 0x7, 0x55, 0x2, 0x2, 0xd2e, 0xd2f, 0x7, 0x6b, 
+       0x2, 0x2, 0xd2f, 0xd30, 0x7, 0x69, 0x2, 0x2, 0xd30, 0xd31, 0x7, 0x70, 
+       0x2, 0x2, 0xd31, 0xd32, 0x7, 0x63, 0x2, 0x2, 0xd32, 0xd33, 0x7, 0x76, 
+       0x2, 0x2, 0xd33, 0xd34, 0x7, 0x77, 0x2, 0x2, 0xd34, 0xd35, 0x7, 0x74, 
+       0x2, 0x2, 0xd35, 0xd36, 0x7, 0x67, 0x2, 0x2, 0xd36, 0x210, 0x3, 0x2, 
+       0x2, 0x2, 0xd37, 0xd38, 0x7, 0x55, 0x2, 0x2, 0xd38, 0xd39, 0x7, 0x77, 
+       0x2, 0x2, 0xd39, 0xd3a, 0x7, 0x64, 0x2, 0x2, 0xd3a, 0xd3b, 0x7, 0x71, 
+       0x2, 0x2, 0xd3b, 0xd3c, 0x7, 0x64, 0x2, 0x2, 0xd3c, 0xd3d, 0x7, 0x6c, 
+       0x2, 0x2, 0xd3d, 0xd3e, 0x7, 0x67, 0x2, 0x2, 0xd3e, 0xd3f, 0x7, 0x65, 
+       0x2, 0x2, 0xd3f, 0xd40, 0x7, 0x76, 0x2, 0x2, 0xd40, 0xd41, 0x7, 0x56, 
+       0x2, 0x2, 0xd41, 0xd42, 0x7, 0x71, 0x2, 0x2, 0xd42, 0xd43, 0x7, 0x47, 
+       0x2, 0x2, 0xd43, 0xd44, 0x7, 0x7a, 0x2, 0x2, 0xd44, 0xd45, 0x7, 0x72, 
+       0x2, 0x2, 0xd45, 0xd46, 0x7, 0x71, 0x2, 0x2, 0xd46, 0xd47, 0x7, 0x74, 
+       0x2, 0x2, 0xd47, 0xd48, 0x7, 0x76, 0x2, 0x2, 0xd48, 0xd49, 0x7, 0x75, 
+       0x2, 0x2, 0xd49, 0xd4a, 0x7, 0x43, 0x2, 0x2, 0xd4a, 0xd4b, 0x7, 0x75, 
+       0x2, 0x2, 0xd4b, 0xd4c, 0x7, 0x75, 0x2, 0x2, 0xd4c, 0xd4d, 0x7, 0x71, 
+       0x2, 0x2, 0xd4d, 0xd4e, 0x7, 0x65, 0x2, 0x2, 0xd4e, 0xd4f, 0x7, 0x6b, 
+       0x2, 0x2, 0xd4f, 0xd50, 0x7, 0x63, 0x2, 0x2, 0xd50, 0xd51, 0x7, 0x76, 
+       0x2, 0x2, 0xd51, 0xd52, 0x7, 0x6b, 0x2, 0x2, 0xd52, 0xd53, 0x7, 0x71, 
+       0x2, 0x2, 0xd53, 0xd54, 0x7, 0x70, 0x2, 0x2, 0xd54, 0x212, 0x3, 0x2, 
+       0x2, 0x2, 0xd55, 0xd56, 0x7, 0x54, 0x2, 0x2, 0xd56, 0xd57, 0x7, 0x63, 
+       0x2, 0x2, 0xd57, 0xd58, 0x7, 0x7b, 0x2, 0x2, 0xd58, 0xd59, 0x7, 0x76, 
+       0x2, 0x2, 0xd59, 0xd5a, 0x7, 0x74, 0x2, 0x2, 0xd5a, 0xd5b, 0x7, 0x63, 
+       0x2, 0x2, 0xd5b, 0xd5c, 0x7, 0x65, 0x2, 0x2, 0xd5c, 0xd5d, 0x7, 0x6b, 
+       0x2, 0x2, 0xd5d, 0xd5e, 0x7, 0x70, 0x2, 0x2, 0xd5e, 0xd5f, 0x7, 0x69, 
+       0x2, 0x2, 0xd5f, 0xd60, 0x7, 0x55, 0x2, 0x2, 0xd60, 0xd61, 0x7, 0x6a, 
+       0x2, 0x2, 0xd61, 0xd62, 0x7, 0x63, 0x2, 0x2, 0xd62, 0xd63, 0x7, 0x66, 
+       0x2, 0x2, 0xd63, 0xd64, 0x7, 0x67, 0x2, 0x2, 0xd64, 0xd65, 0x7, 0x74, 
+       0x2, 0x2, 0xd65, 0xd66, 0x7, 0x45, 0x2, 0x2, 0xd66, 0xd67, 0x7, 0x71, 
+       0x2, 0x2, 0xd67, 0xd68, 0x7, 0x70, 0x2, 0x2, 0xd68, 0xd69, 0x7, 0x68, 
+       0x2, 0x2, 0xd69, 0xd6a, 0x7, 0x6b, 0x2, 0x2, 0xd6a, 0xd6b, 0x7, 0x69, 
+       0x2, 0x2, 0xd6b, 0x214, 0x3, 0x2, 0x2, 0x2, 0xd6c, 0xd6d, 0x7, 0x54, 
+       0x2, 0x2, 0xd6d, 0xd6e, 0x7, 0x63, 0x2, 0x2, 0xd6e, 0xd6f, 0x7, 0x7b, 
+       0x2, 0x2, 0xd6f, 0xd70, 0x7, 0x76, 0x2, 0x2, 0xd70, 0xd71, 0x7, 0x74, 
+       0x2, 0x2, 0xd71, 0xd72, 0x7, 0x63, 0x2, 0x2, 0xd72, 0xd73, 0x7, 0x65, 
+       0x2, 0x2, 0xd73, 0xd74, 0x7, 0x6b, 0x2, 0x2, 0xd74, 0xd75, 0x7, 0x70, 
+       0x2, 0x2, 0xd75, 0xd76, 0x7, 0x69, 0x2, 0x2, 0xd76, 0xd77, 0x7, 0x52, 
+       0x2, 0x2, 0xd77, 0xd78, 0x7, 0x6b, 0x2, 0x2, 0xd78, 0xd79, 0x7, 0x72, 
+       0x2, 0x2, 0xd79, 0xd7a, 0x7, 0x67, 0x2, 0x2, 0xd7a, 0xd7b, 0x7, 0x6e, 
+       0x2, 0x2, 0xd7b, 0xd7c, 0x7, 0x6b, 0x2, 0x2, 0xd7c, 0xd7d, 0x7, 0x70, 
+       0x2, 0x2, 0xd7d, 0xd7e, 0x7, 0x67, 0x2, 0x2, 0xd7e, 0xd7f, 0x7, 0x45, 
+       0x2, 0x2, 0xd7f, 0xd80, 0x7, 0x71, 0x2, 0x2, 0xd80, 0xd81, 0x7, 0x70, 
+       0x2, 0x2, 0xd81, 0xd82, 0x7, 0x68, 0x2, 0x2, 0xd82, 0xd83, 0x7, 0x6b, 
+       0x2, 0x2, 0xd83, 0xd84, 0x7, 0x69, 0x2, 0x2, 0xd84, 0x216, 0x3, 0x2, 
+       0x2, 0x2, 0xd85, 0xd86, 0x7, 0x54, 0x2, 0x2, 0xd86, 0xd87, 0x7, 0x63, 
+       0x2, 0x2, 0xd87, 0xd88, 0x7, 0x7b, 0x2, 0x2, 0xd88, 0xd89, 0x7, 0x76, 
+       0x2, 0x2, 0xd89, 0xd8a, 0x7, 0x74, 0x2, 0x2, 0xd8a, 0xd8b, 0x7, 0x63, 
+       0x2, 0x2, 0xd8b, 0xd8c, 0x7, 0x65, 0x2, 0x2, 0xd8c, 0xd8d, 0x7, 0x6b, 
+       0x2, 0x2, 0xd8d, 0xd8e, 0x7, 0x70, 0x2, 0x2, 0xd8e, 0xd8f, 0x7, 0x69, 
+       0x2, 0x2, 0xd8f, 0xd90, 0x7, 0x52, 0x2, 0x2, 0xd90, 0xd91, 0x7, 0x6b, 
+       0x2, 0x2, 0xd91, 0xd92, 0x7, 0x72, 0x2, 0x2, 0xd92, 0xd93, 0x7, 0x67, 
+       0x2, 0x2, 0xd93, 0xd94, 0x7, 0x6e, 0x2, 0x2, 0xd94, 0xd95, 0x7, 0x6b, 
+       0x2, 0x2, 0xd95, 0xd96, 0x7, 0x70, 0x2, 0x2, 0xd96, 0xd97, 0x7, 0x67, 
+       0x2, 0x2, 0xd97, 0xd98, 0x7, 0x45, 0x2, 0x2, 0xd98, 0xd99, 0x7, 0x71, 
+       0x2, 0x2, 0xd99, 0xd9a, 0x7, 0x70, 0x2, 0x2, 0xd9a, 0xd9b, 0x7, 0x68, 
+       0x2, 0x2, 0xd9b, 0xd9c, 0x7, 0x6b, 0x2, 0x2, 0xd9c, 0xd9d, 0x7, 0x69, 
+       0x2, 0x2, 0xd9d, 0xd9e, 0x7, 0x33, 0x2, 0x2, 0xd9e, 0x218, 0x3, 0x2, 
+       0x2, 0x2, 0xd9f, 0xda0, 0x7, 0x56, 0x2, 0x2, 0xda0, 0xda1, 0x7, 0x74, 
+       0x2, 0x2, 0xda1, 0xda2, 0x7, 0x6b, 0x2, 0x2, 0xda2, 0xda3, 0x7, 0x63, 
+       0x2, 0x2, 0xda3, 0xda4, 0x7, 0x70, 0x2, 0x2, 0xda4, 0xda5, 0x7, 0x69, 
+       0x2, 0x2, 0xda5, 0xda6, 0x7, 0x6e, 0x2, 0x2, 0xda6, 0xda7, 0x7, 0x67, 
+       0x2, 0x2, 0xda7, 0xda8, 0x7, 0x4a, 0x2, 0x2, 0xda8, 0xda9, 0x7, 0x6b, 
+       0x2, 0x2, 0xda9, 0xdaa, 0x7, 0x76, 0x2, 0x2, 0xdaa, 0xdab, 0x7, 0x49, 
+       0x2, 0x2, 0xdab, 0xdac, 0x7, 0x74, 0x2, 0x2, 0xdac, 0xdad, 0x7, 0x71, 
+       0x2, 0x2, 0xdad, 0xdae, 0x7, 0x77, 0x2, 0x2, 0xdae, 0xdaf, 0x7, 0x72, 
+       0x2, 0x2, 0xdaf, 0x21a, 0x3, 0x2, 0x2, 0x2, 0xdb0, 0xdb1, 0x7, 0x52, 
+       0x2, 0x2, 0xdb1, 0xdb2, 0x7, 0x74, 0x2, 0x2, 0xdb2, 0xdb3, 0x7, 0x71, 
+       0x2, 0x2, 0xdb3, 0xdb4, 0x7, 0x65, 0x2, 0x2, 0xdb4, 0xdb5, 0x7, 0x67, 
+       0x2, 0x2, 0xdb5, 0xdb6, 0x7, 0x66, 0x2, 0x2, 0xdb6, 0xdb7, 0x7, 0x77, 
+       0x2, 0x2, 0xdb7, 0xdb8, 0x7, 0x74, 0x2, 0x2, 0xdb8, 0xdb9, 0x7, 0x63, 
+       0x2, 0x2, 0xdb9, 0xdba, 0x7, 0x6e, 0x2, 0x2, 0xdba, 0xdbb, 0x7, 0x52, 
+       0x2, 0x2, 0xdbb, 0xdbc, 0x7, 0x74, 0x2, 0x2, 0xdbc, 0xdbd, 0x7, 0x6b, 
+       0x2, 0x2, 0xdbd, 0xdbe, 0x7, 0x6f, 0x2, 0x2, 0xdbe, 0xdbf, 0x7, 0x6b, 
+       0x2, 0x2, 0xdbf, 0xdc0, 0x7, 0x76, 0x2, 0x2, 0xdc0, 0xdc1, 0x7, 0x6b, 
+       0x2, 0x2, 0xdc1, 0xdc2, 0x7, 0x78, 0x2, 0x2, 0xdc2, 0xdc3, 0x7, 0x67, 
+       0x2, 0x2, 0xdc3, 0xdc4, 0x7, 0x4a, 0x2, 0x2, 0xdc4, 0xdc5, 0x7, 0x6b, 
+       0x2, 0x2, 0xdc5, 0xdc6, 0x7, 0x76, 0x2, 0x2, 0xdc6, 0xdc7, 0x7, 0x49, 
+       0x2, 0x2, 0xdc7, 0xdc8, 0x7, 0x74, 0x2, 0x2, 0xdc8, 0xdc9, 0x7, 0x71, 
+       0x2, 0x2, 0xdc9, 0xdca, 0x7, 0x77, 0x2, 0x2, 0xdca, 0xdcb, 0x7, 0x72, 
+       0x2, 0x2, 0xdcb, 0x21c, 0x3, 0x2, 0x2, 0x2, 0xdcc, 0xdcd, 0x7, 0x43, 
+       0x2, 0x2, 0xdcd, 0xdce, 0x7, 0x66, 0x2, 0x2, 0xdce, 0xdcf, 0x7, 0x66, 
+       0x2, 0x2, 0xdcf, 0xdd0, 0x7, 0x74, 0x2, 0x2, 0xdd0, 0xdd1, 0x7, 0x67, 
+       0x2, 0x2, 0xdd1, 0xdd2, 0x7, 0x75, 0x2, 0x2, 0xdd2, 0xdd3, 0x7, 0x75, 
+       0x2, 0x2, 0xdd3, 0xdd4, 0x7, 0x57, 0x2, 0x2, 0xdd4, 0x21e, 0x3, 0x2, 
+       0x2, 0x2, 0xdd5, 0xdd6, 0x7, 0x43, 0x2, 0x2, 0xdd6, 0xdd7, 0x7, 0x66, 
+       0x2, 0x2, 0xdd7, 0xdd8, 0x7, 0x66, 0x2, 0x2, 0xdd8, 0xdd9, 0x7, 0x74, 
+       0x2, 0x2, 0xdd9, 0xdda, 0x7, 0x67, 0x2, 0x2, 0xdda, 0xddb, 0x7, 0x75, 
+       0x2, 0x2, 0xddb, 0xddc, 0x7, 0x75, 0x2, 0x2, 0xddc, 0xddd, 0x7, 0x58, 
+       0x2, 0x2, 0xddd, 0x220, 0x3, 0x2, 0x2, 0x2, 0xdde, 0xddf, 0x7, 0x43, 
+       0x2, 0x2, 0xddf, 0xde0, 0x7, 0x66, 0x2, 0x2, 0xde0, 0xde1, 0x7, 0x66, 
+       0x2, 0x2, 0xde1, 0xde2, 0x7, 0x74, 0x2, 0x2, 0xde2, 0xde3, 0x7, 0x67, 
+       0x2, 0x2, 0xde3, 0xde4, 0x7, 0x75, 0x2, 0x2, 0xde4, 0xde5, 0x7, 0x75, 
+       0x2, 0x2, 0xde5, 0xde6, 0x7, 0x59, 0x2, 0x2, 0xde6, 0x222, 0x3, 0x2, 
+       0x2, 0x2, 0xde7, 0xde8, 0x7, 0x44, 0x2, 0x2, 0xde8, 0xde9, 0x7, 0x71, 
+       0x2, 0x2, 0xde9, 0xdea, 0x7, 0x74, 0x2, 0x2, 0xdea, 0xdeb, 0x7, 0x66, 
+       0x2, 0x2, 0xdeb, 0xdec, 0x7, 0x67, 0x2, 0x2, 0xdec, 0xded, 0x7, 0x74, 
+       0x2, 0x2, 0xded, 0xdee, 0x7, 0x45, 0x2, 0x2, 0xdee, 0xdef, 0x7, 0x71, 
+       0x2, 0x2, 0xdef, 0xdf0, 0x7, 0x6e, 0x2, 0x2, 0xdf0, 0xdf1, 0x7, 0x71, 
+       0x2, 0x2, 0xdf1, 0xdf2, 0x7, 0x74, 0x2, 0x2, 0xdf2, 0x224, 0x3, 0x2, 
+       0x2, 0x2, 0xdf3, 0xdf4, 0x7, 0x4f, 0x2, 0x2, 0xdf4, 0xdf5, 0x7, 0x6b, 
+       0x2, 0x2, 0xdf5, 0xdf6, 0x7, 0x70, 0x2, 0x2, 0xdf6, 0xdf7, 0x7, 0x48, 
+       0x2, 0x2, 0xdf7, 0xdf8, 0x7, 0x6b, 0x2, 0x2, 0xdf8, 0xdf9, 0x7, 0x6e, 
+       0x2, 0x2, 0xdf9, 0xdfa, 0x7, 0x76, 0x2, 0x2, 0xdfa, 0xdfb, 0x7, 0x67, 
+       0x2, 0x2, 0xdfb, 0xdfc, 0x7, 0x74, 0x2, 0x2, 0xdfc, 0x226, 0x3, 0x2, 
+       0x2, 0x2, 0xdfd, 0xdfe, 0x7, 0x4f, 0x2, 0x2, 0xdfe, 0xdff, 0x7, 0x63, 
+       0x2, 0x2, 0xdff, 0xe00, 0x7, 0x69, 0x2, 0x2, 0xe00, 0xe01, 0x7, 0x48, 
+       0x2, 0x2, 0xe01, 0xe02, 0x7, 0x6b, 0x2, 0x2, 0xe02, 0xe03, 0x7, 0x6e, 
+       0x2, 0x2, 0xe03, 0xe04, 0x7, 0x76, 0x2, 0x2, 0xe04, 0xe05, 0x7, 0x67, 
+       0x2, 0x2, 0xe05, 0xe06, 0x7, 0x74, 0x2, 0x2, 0xe06, 0x228, 0x3, 0x2, 
+       0x2, 0x2, 0xe07, 0xe08, 0x7, 0x4f, 0x2, 0x2, 0xe08, 0xe09, 0x7, 0x6b, 
+       0x2, 0x2, 0xe09, 0xe0a, 0x7, 0x72, 0x2, 0x2, 0xe0a, 0xe0b, 0x7, 0x48, 
+       0x2, 0x2, 0xe0b, 0xe0c, 0x7, 0x6b, 0x2, 0x2, 0xe0c, 0xe0d, 0x7, 0x6e, 
+       0x2, 0x2, 0xe0d, 0xe0e, 0x7, 0x76, 0x2, 0x2, 0xe0e, 0xe0f, 0x7, 0x67, 
+       0x2, 0x2, 0xe0f, 0xe10, 0x7, 0x74, 0x2, 0x2, 0xe10, 0x22a, 0x3, 0x2, 
+       0x2, 0x2, 0xe11, 0xe12, 0x7, 0x4f, 0x2, 0x2, 0xe12, 0xe13, 0x7, 0x63, 
+       0x2, 0x2, 0xe13, 0xe14, 0x7, 0x7a, 0x2, 0x2, 0xe14, 0xe15, 0x7, 0x43, 
+       0x2, 0x2, 0xe15, 0xe16, 0x7, 0x70, 0x2, 0x2, 0xe16, 0xe17, 0x7, 0x6b, 
+       0x2, 0x2, 0xe17, 0xe18, 0x7, 0x75, 0x2, 0x2, 0xe18, 0xe19, 0x7, 0x71, 
+       0x2, 0x2, 0xe19, 0xe1a, 0x7, 0x76, 0x2, 0x2, 0xe1a, 0xe1b, 0x7, 0x74, 
+       0x2, 0x2, 0xe1b, 0xe1c, 0x7, 0x71, 0x2, 0x2, 0xe1c, 0xe1d, 0x7, 0x72, 
+       0x2, 0x2, 0xe1d, 0xe1e, 0x7, 0x7b, 0x2, 0x2, 0xe1e, 0x22c, 0x3, 0x2, 
+       0x2, 0x2, 0xe1f, 0xe20, 0x7, 0x4f, 0x2, 0x2, 0xe20, 0xe21, 0x7, 0x63, 
+       0x2, 0x2, 0xe21, 0xe22, 0x7, 0x7a, 0x2, 0x2, 0xe22, 0xe23, 0x7, 0x4e, 
+       0x2, 0x2, 0xe23, 0xe24, 0x7, 0x51, 0x2, 0x2, 0xe24, 0xe25, 0x7, 0x46, 
+       0x2, 0x2, 0xe25, 0x22e, 0x3, 0x2, 0x2, 0x2, 0xe26, 0xe27, 0x7, 0x4f, 
+       0x2, 0x2, 0xe27, 0xe28, 0x7, 0x6b, 0x2, 0x2, 0xe28, 0xe29, 0x7, 0x70, 
+       0x2, 0x2, 0xe29, 0xe2a, 0x7, 0x4e, 0x2, 0x2, 0xe2a, 0xe2b, 0x7, 0x51, 
+       0x2, 0x2, 0xe2b, 0xe2c, 0x7, 0x46, 0x2, 0x2, 0xe2c, 0x230, 0x3, 0x2, 
+       0x2, 0x2, 0xe2d, 0xe2e, 0x7, 0x4f, 0x2, 0x2, 0xe2e, 0xe2f, 0x7, 0x6b, 
+       0x2, 0x2, 0xe2f, 0xe30, 0x7, 0x72, 0x2, 0x2, 0xe30, 0xe31, 0x7, 0x4e, 
+       0x2, 0x2, 0xe31, 0xe32, 0x7, 0x51, 0x2, 0x2, 0xe32, 0xe33, 0x7, 0x46, 
+       0x2, 0x2, 0xe33, 0xe34, 0x7, 0x44, 0x2, 0x2, 0xe34, 0xe35, 0x7, 0x6b, 
+       0x2, 0x2, 0xe35, 0xe36, 0x7, 0x63, 0x2, 0x2, 0xe36, 0xe37, 0x7, 0x75, 
+       0x2, 0x2, 0xe37, 0x232, 0x3, 0x2, 0x2, 0x2, 0xe38, 0xe39, 0x7, 0x45, 
+       0x2, 0x2, 0xe39, 0xe3a, 0x7, 0x71, 0x2, 0x2, 0xe3a, 0xe3b, 0x7, 0x6f, 
+       0x2, 0x2, 0xe3b, 0xe3c, 0x7, 0x72, 0x2, 0x2, 0xe3c, 0xe3d, 0x7, 0x63, 
+       0x2, 0x2, 0xe3d, 0xe3e, 0x7, 0x74, 0x2, 0x2, 0xe3e, 0xe3f, 0x7, 0x6b, 
+       0x2, 0x2, 0xe3f, 0xe40, 0x7, 0x75, 0x2, 0x2, 0xe40, 0xe41, 0x7, 0x71, 
+       0x2, 0x2, 0xe41, 0xe42, 0x7, 0x70, 0x2, 0x2, 0xe42, 0xe43, 0x7, 0x48, 
+       0x2, 0x2, 0xe43, 0xe44, 0x7, 0x77, 0x2, 0x2, 0xe44, 0xe45, 0x7, 0x70, 
+       0x2, 0x2, 0xe45, 0xe46, 0x7, 0x65, 0x2, 0x2, 0xe46, 0x234, 0x3, 0x2, 
+       0x2, 0x2, 0xe47, 0xe48, 0x7, 0x54, 0x2, 0x2, 0xe48, 0xe49, 0x7, 0x67, 
+       0x2, 0x2, 0xe49, 0xe4a, 0x7, 0x66, 0x2, 0x2, 0xe4a, 0xe4b, 0x7, 0x77, 
+       0x2, 0x2, 0xe4b, 0xe4c, 0x7, 0x65, 0x2, 0x2, 0xe4c, 0xe4d, 0x7, 0x76, 
+       0x2, 0x2, 0xe4d, 0xe4e, 0x7, 0x6b, 0x2, 0x2, 0xe4e, 0xe4f, 0x7, 0x71, 
+       0x2, 0x2, 0xe4f, 0xe50, 0x7, 0x70, 0x2, 0x2, 0xe50, 0xe51, 0x7, 0x56, 
+       0x2, 0x2, 0xe51, 0xe52, 0x7, 0x7b, 0x2, 0x2, 0xe52, 0xe53, 0x7, 0x72, 
+       0x2, 0x2, 0xe53, 0xe54, 0x7, 0x67, 0x2, 0x2, 0xe54, 0x236, 0x3, 0x2, 
+       0x2, 0x2, 0xe55, 0xe56, 0x7, 0x52, 0x2, 0x2, 0xe56, 0xe57, 0x7, 0x71, 
+       0x2, 0x2, 0xe57, 0xe58, 0x7, 0x6b, 0x2, 0x2, 0xe58, 0xe59, 0x7, 0x70, 
+       0x2, 0x2, 0xe59, 0xe5a, 0x7, 0x76, 0x2, 0x2, 0xe5a, 0x238, 0x3, 0x2, 
+       0x2, 0x2, 0xe5b, 0xe5c, 0x7, 0x4e, 0x2, 0x2, 0xe5c, 0xe5d, 0x7, 0x6b, 
+       0x2, 0x2, 0xe5d, 0xe5e, 0x7, 0x70, 0x2, 0x2, 0xe5e, 0xe5f, 0x7, 0x67, 
+       0x2, 0x2, 0xe5f, 0xe60, 0x7, 0x63, 0x2, 0x2, 0xe60, 0xe61, 0x7, 0x74, 
+       0x2, 0x2, 0xe61, 0x23a, 0x3, 0x2, 0x2, 0x2, 0xe62, 0xe63, 0x7, 0x48, 
+       0x2, 0x2, 0xe63, 0xe64, 0x7, 0x6b, 0x2, 0x2, 0xe64, 0xe65, 0x7, 0x6e, 
+       0x2, 0x2, 0xe65, 0xe66, 0x7, 0x76, 0x2, 0x2, 0xe66, 0xe67, 0x7, 0x67, 
+       0x2, 0x2, 0xe67, 0xe68, 0x7, 0x74, 0x2, 0x2, 0xe68, 0x23c, 0x3, 0x2, 
+       0x2, 0x2, 0xe69, 0xe6a, 0x7, 0x45, 0x2, 0x2, 0xe6a, 0xe6b, 0x7, 0x71, 
+       0x2, 0x2, 0xe6b, 0xe6c, 0x7, 0x6f, 0x2, 0x2, 0xe6c, 0xe6d, 0x7, 0x72, 
+       0x2, 0x2, 0xe6d, 0xe6e, 0x7, 0x63, 0x2, 0x2, 0xe6e, 0xe6f, 0x7, 0x74, 
+       0x2, 0x2, 0xe6f, 0xe70, 0x7, 0x6b, 0x2, 0x2, 0xe70, 0xe71, 0x7, 0x75, 
+       0x2, 0x2, 0xe71, 0xe72, 0x7, 0x71, 0x2, 0x2, 0xe72, 0xe73, 0x7, 0x70, 
+       0x2, 0x2, 0xe73, 0x23e, 0x3, 0x2, 0x2, 0x2, 0xe74, 0xe75, 0x7, 0x4f, 
+       0x2, 0x2, 0xe75, 0xe76, 0x7, 0x6b, 0x2, 0x2, 0xe76, 0xe77, 0x7, 0x70, 
+       0x2, 0x2, 0xe77, 0xe78, 0x7, 0x6b, 0x2, 0x2, 0xe78, 0xe79, 0x7, 0x6f, 
+       0x2, 0x2, 0xe79, 0xe7a, 0x7, 0x77, 0x2, 0x2, 0xe7a, 0xe7b, 0x7, 0x6f, 
+       0x2, 0x2, 0xe7b, 0x240, 0x3, 0x2, 0x2, 0x2, 0xe7c, 0xe7d, 0x7, 0x4f, 
+       0x2, 0x2, 0xe7d, 0xe7e, 0x7, 0x63, 0x2, 0x2, 0xe7e, 0xe7f, 0x7, 0x7a, 
+       0x2, 0x2, 0xe7f, 0xe80, 0x7, 0x6b, 0x2, 0x2, 0xe80, 0xe81, 0x7, 0x6f, 
+       0x2, 0x2, 0xe81, 0xe82, 0x7, 0x77, 0x2, 0x2, 0xe82, 0xe83, 0x7, 0x6f, 
+       0x2, 0x2, 0xe83, 0x242, 0x3, 0x2, 0x2, 0x2, 0xe84, 0xe85, 0x7, 0x59, 
+       0x2, 0x2, 0xe85, 0xe86, 0x7, 0x74, 0x2, 0x2, 0xe86, 0xe87, 0x7, 0x63, 
+       0x2, 0x2, 0xe87, 0xe88, 0x7, 0x72, 0x2, 0x2, 0xe88, 0x244, 0x3, 0x2, 
+       0x2, 0x2, 0xe89, 0xe8a, 0x7, 0x4f, 0x2, 0x2, 0xe8a, 0xe8b, 0x7, 0x6b, 
+       0x2, 0x2, 0xe8b, 0xe8c, 0x7, 0x74, 0x2, 0x2, 0xe8c, 0xe8d, 0x7, 0x74, 
+       0x2, 0x2, 0xe8d, 0xe8e, 0x7, 0x71, 0x2, 0x2, 0xe8e, 0xe8f, 0x7, 0x74, 
+       0x2, 0x2, 0xe8f, 0x246, 0x3, 0x2, 0x2, 0x2, 0xe90, 0xe91, 0x7, 0x45, 
+       0x2, 0x2, 0xe91, 0xe92, 0x7, 0x6e, 0x2, 0x2, 0xe92, 0xe93, 0x7, 0x63, 
+       0x2, 0x2, 0xe93, 0xe94, 0x7, 0x6f, 0x2, 0x2, 0xe94, 0xe95, 0x7, 0x72, 
+       0x2, 0x2, 0xe95, 0x248, 0x3, 0x2, 0x2, 0x2, 0xe96, 0xe97, 0x7, 0x44, 
+       0x2, 0x2, 0xe97, 0xe98, 0x7, 0x71, 0x2, 0x2, 0xe98, 0xe99, 0x7, 0x74, 
+       0x2, 0x2, 0xe99, 0xe9a, 0x7, 0x66, 0x2, 0x2, 0xe9a, 0xe9b, 0x7, 0x67, 
+       0x2, 0x2, 0xe9b, 0xe9c, 0x7, 0x74, 0x2, 0x2, 0xe9c, 0x24a, 0x3, 0x2, 
+       0x2, 0x2, 0xe9d, 0xe9e, 0x7, 0x4f, 0x2, 0x2, 0xe9e, 0xe9f, 0x7, 0x6b, 
+       0x2, 0x2, 0xe9f, 0xea0, 0x7, 0x74, 0x2, 0x2, 0xea0, 0xea1, 0x7, 0x74, 
+       0x2, 0x2, 0xea1, 0xea2, 0x7, 0x71, 0x2, 0x2, 0xea2, 0xea3, 0x7, 0x74, 
+       0x2, 0x2, 0xea3, 0xea4, 0x7, 0x51, 0x2, 0x2, 0xea4, 0xea5, 0x7, 0x70, 
+       0x2, 0x2, 0xea5, 0xea6, 0x7, 0x65, 0x2, 0x2, 0xea6, 0xea7, 0x7, 0x67, 
+       0x2, 0x2, 0xea7, 0x24c, 0x3, 0x2, 0x2, 0x2, 0xea8, 0xea9, 0x7, 0x50, 
+       0x2, 0x2, 0xea9, 0xeaa, 0x7, 0x67, 0x2, 0x2, 0xeaa, 0xeab, 0x7, 0x78, 
+       0x2, 0x2, 0xeab, 0xeac, 0x7, 0x67, 0x2, 0x2, 0xeac, 0xead, 0x7, 0x74, 
+       0x2, 0x2, 0xead, 0x24e, 0x3, 0x2, 0x2, 0x2, 0xeae, 0xeaf, 0x7, 0x4e, 
+       0x2, 0x2, 0xeaf, 0xeb0, 0x7, 0x67, 0x2, 0x2, 0xeb0, 0xeb1, 0x7, 0x75, 
+       0x2, 0x2, 0xeb1, 0xeb2, 0x7, 0x75, 0x2, 0x2, 0xeb2, 0x250, 0x3, 0x2, 
+       0x2, 0x2, 0xeb3, 0xeb4, 0x7, 0x47, 0x2, 0x2, 0xeb4, 0xeb5, 0x7, 0x73, 
+       0x2, 0x2, 0xeb5, 0xeb6, 0x7, 0x77, 0x2, 0x2, 0xeb6, 0xeb7, 0x7, 0x63, 
+       0x2, 0x2, 0xeb7, 0xeb8, 0x7, 0x6e, 0x2, 0x2, 0xeb8, 0x252, 0x3, 0x2, 
+       0x2, 0x2, 0xeb9, 0xeba, 0x7, 0x4e, 0x2, 0x2, 0xeba, 0xebb, 0x7, 0x67, 
+       0x2, 0x2, 0xebb, 0xebc, 0x7, 0x75, 0x2, 0x2, 0xebc, 0xebd, 0x7, 0x75, 
+       0x2, 0x2, 0xebd, 0xebe, 0x7, 0x47, 0x2, 0x2, 0xebe, 0xebf, 0x7, 0x73, 
+       0x2, 0x2, 0xebf, 0xec0, 0x7, 0x77, 0x2, 0x2, 0xec0, 0xec1, 0x7, 0x63, 
+       0x2, 0x2, 0xec1, 0xec2, 0x7, 0x6e, 0x2, 0x2, 0xec2, 0x254, 0x3, 0x2, 
+       0x2, 0x2, 0xec3, 0xec4, 0x7, 0x49, 0x2, 0x2, 0xec4, 0xec5, 0x7, 0x74, 
+       0x2, 0x2, 0xec5, 0xec6, 0x7, 0x67, 0x2, 0x2, 0xec6, 0xec7, 0x7, 0x63, 
+       0x2, 0x2, 0xec7, 0xec8, 0x7, 0x76, 0x2, 0x2, 0xec8, 0xec9, 0x7, 0x67, 
+       0x2, 0x2, 0xec9, 0xeca, 0x7, 0x74, 0x2, 0x2, 0xeca, 0x256, 0x3, 0x2, 
+       0x2, 0x2, 0xecb, 0xecc, 0x7, 0x50, 0x2, 0x2, 0xecc, 0xecd, 0x7, 0x71, 
+       0x2, 0x2, 0xecd, 0xece, 0x7, 0x76, 0x2, 0x2, 0xece, 0xecf, 0x7, 0x47, 
+       0x2, 0x2, 0xecf, 0xed0, 0x7, 0x73, 0x2, 0x2, 0xed0, 0xed1, 0x7, 0x77, 
+       0x2, 0x2, 0xed1, 0xed2, 0x7, 0x63, 0x2, 0x2, 0xed2, 0xed3, 0x7, 0x6e, 
+       0x2, 0x2, 0xed3, 0x258, 0x3, 0x2, 0x2, 0x2, 0xed4, 0xed5, 0x7, 0x49, 
+       0x2, 0x2, 0xed5, 0xed6, 0x7, 0x74, 0x2, 0x2, 0xed6, 0xed7, 0x7, 0x67, 
+       0x2, 0x2, 0xed7, 0xed8, 0x7, 0x63, 0x2, 0x2, 0xed8, 0xed9, 0x7, 0x76, 
+       0x2, 0x2, 0xed9, 0xeda, 0x7, 0x67, 0x2, 0x2, 0xeda, 0xedb, 0x7, 0x74, 
+       0x2, 0x2, 0xedb, 0xedc, 0x7, 0x47, 0x2, 0x2, 0xedc, 0xedd, 0x7, 0x73, 
+       0x2, 0x2, 0xedd, 0xede, 0x7, 0x77, 0x2, 0x2, 0xede, 0xedf, 0x7, 0x63, 
+       0x2, 0x2, 0xedf, 0xee0, 0x7, 0x6e, 0x2, 0x2, 0xee0, 0x25a, 0x3, 0x2, 
+       0x2, 0x2, 0xee1, 0xee2, 0x7, 0x43, 0x2, 0x2, 0xee2, 0xee3, 0x7, 0x6e, 
+       0x2, 0x2, 0xee3, 0xee4, 0x7, 0x79, 0x2, 0x2, 0xee4, 0xee5, 0x7, 0x63, 
+       0x2, 0x2, 0xee5, 0xee6, 0x7, 0x7b, 0x2, 0x2, 0xee6, 0xee7, 0x7, 0x75, 
+       0x2, 0x2, 0xee7, 0x25c, 0x3, 0x2, 0x2, 0x2, 0xee8, 0xee9, 0x7, 0x51, 
+       0x2, 0x2, 0xee9, 0xeea, 0x7, 0x72, 0x2, 0x2, 0xeea, 0xeeb, 0x7, 0x63, 
+       0x2, 0x2, 0xeeb, 0xeec, 0x7, 0x73, 0x2, 0x2, 0xeec, 0xeed, 0x7, 0x77, 
+       0x2, 0x2, 0xeed, 0xeee, 0x7, 0x67, 0x2, 0x2, 0xeee, 0xeef, 0x7, 0x44, 
+       0x2, 0x2, 0xeef, 0xef0, 0x7, 0x6e, 0x2, 0x2, 0xef0, 0xef1, 0x7, 0x63, 
+       0x2, 0x2, 0xef1, 0xef2, 0x7, 0x65, 0x2, 0x2, 0xef2, 0xef3, 0x7, 0x6d, 
+       0x2, 0x2, 0xef3, 0x25e, 0x3, 0x2, 0x2, 0x2, 0xef4, 0xef5, 0x7, 0x56, 
+       0x2, 0x2, 0xef5, 0xef6, 0x7, 0x74, 0x2, 0x2, 0xef6, 0xef7, 0x7, 0x63, 
+       0x2, 0x2, 0xef7, 0xef8, 0x7, 0x70, 0x2, 0x2, 0xef8, 0xef9, 0x7, 0x75, 
+       0x2, 0x2, 0xef9, 0xefa, 0x7, 0x72, 0x2, 0x2, 0xefa, 0xefb, 0x7, 0x63, 
+       0x2, 0x2, 0xefb, 0xefc, 0x7, 0x74, 0x2, 0x2, 0xefc, 0xefd, 0x7, 0x67, 
+       0x2, 0x2, 0xefd, 0xefe, 0x7, 0x70, 0x2, 0x2, 0xefe, 0xeff, 0x7, 0x76, 
+       0x2, 0x2, 0xeff, 0xf00, 0x7, 0x44, 0x2, 0x2, 0xf00, 0xf01, 0x7, 0x6e, 
+       0x2, 0x2, 0xf01, 0xf02, 0x7, 0x63, 0x2, 0x2, 0xf02, 0xf03, 0x7, 0x65, 
+       0x2, 0x2, 0xf03, 0xf04, 0x7, 0x6d, 0x2, 0x2, 0xf04, 0x260, 0x3, 0x2, 
+       0x2, 0x2, 0xf05, 0xf06, 0x7, 0x51, 0x2, 0x2, 0xf06, 0xf07, 0x7, 0x72, 
+       0x2, 0x2, 0xf07, 0xf08, 0x7, 0x63, 0x2, 0x2, 0xf08, 0xf09, 0x7, 0x73, 
+       0x2, 0x2, 0xf09, 0xf0a, 0x7, 0x77, 0x2, 0x2, 0xf0a, 0xf0b, 0x7, 0x67, 
+       0x2, 0x2, 0xf0b, 0xf0c, 0x7, 0x59, 0x2, 0x2, 0xf0c, 0xf0d, 0x7, 0x6a, 
+       0x2, 0x2, 0xf0d, 0xf0e, 0x7, 0x6b, 0x2, 0x2, 0xf0e, 0xf0f, 0x7, 0x76, 
+       0x2, 0x2, 0xf0f, 0xf10, 0x7, 0x67, 0x2, 0x2, 0xf10, 0x262, 0x3, 0x2, 
+       0x2, 0x2, 0xf11, 0xf12, 0x7, 0x2a, 0x2, 0x2, 0xf12, 0x264, 0x3, 0x2, 
+       0x2, 0x2, 0xf13, 0xf14, 0x7, 0x2b, 0x2, 0x2, 0xf14, 0x266, 0x3, 0x2, 
+       0x2, 0x2, 0xf15, 0xf16, 0x7, 0x5d, 0x2, 0x2, 0xf16, 0x268, 0x3, 0x2, 
+       0x2, 0x2, 0xf17, 0xf18, 0x7, 0x5f, 0x2, 0x2, 0xf18, 0x26a, 0x3, 0x2, 
+       0x2, 0x2, 0xf19, 0xf1a, 0x7, 0x7d, 0x2, 0x2, 0xf1a, 0x26c, 0x3, 0x2, 
+       0x2, 0x2, 0xf1b, 0xf1c, 0x7, 0x7f, 0x2, 0x2, 0xf1c, 0x26e, 0x3, 0x2, 
+       0x2, 0x2, 0xf1d, 0xf1e, 0x7, 0x5d, 0x2, 0x2, 0xf1e, 0xf1f, 0x7, 0x5d, 
+       0x2, 0x2, 0xf1f, 0x270, 0x3, 0x2, 0x2, 0x2, 0xf20, 0xf21, 0x7, 0x3e, 
+       0x2, 0x2, 0xf21, 0x272, 0x3, 0x2, 0x2, 0x2, 0xf22, 0xf23, 0x7, 0x3e, 
+       0x2, 0x2, 0xf23, 0xf24, 0x7, 0x3f, 0x2, 0x2, 0xf24, 0x274, 0x3, 0x2, 
+       0x2, 0x2, 0xf25, 0xf26, 0x7, 0x40, 0x2, 0x2, 0xf26, 0x276, 0x3, 0x2, 
+       0x2, 0x2, 0xf27, 0xf28, 0x7, 0x40, 0x2, 0x2, 0xf28, 0xf29, 0x7, 0x3f, 
+       0x2, 0x2, 0xf29, 0x278, 0x3, 0x2, 0x2, 0x2, 0xf2a, 0xf2b, 0x7, 0x3e, 
+       0x2, 0x2, 0xf2b, 0xf2c, 0x7, 0x3e, 0x2, 0x2, 0xf2c, 0x27a, 0x3, 0x2, 
+       0x2, 0x2, 0xf2d, 0xf2e, 0x7, 0x40, 0x2, 0x2, 0xf2e, 0xf2f, 0x7, 0x40, 
+       0x2, 0x2, 0xf2f, 0x27c, 0x3, 0x2, 0x2, 0x2, 0xf30, 0xf31, 0x7, 0x2d, 
+       0x2, 0x2, 0xf31, 0x27e, 0x3, 0x2, 0x2, 0x2, 0xf32, 0xf33, 0x7, 0x2d, 
+       0x2, 0x2, 0xf33, 0xf34, 0x7, 0x2d, 0x2, 0x2, 0xf34, 0x280, 0x3, 0x2, 
+       0x2, 0x2, 0xf35, 0xf36, 0x7, 0x2f, 0x2, 0x2, 0xf36, 0x282, 0x3, 0x2, 
+       0x2, 0x2, 0xf37, 0xf38, 0x7, 0x2f, 0x2, 0x2, 0xf38, 0xf39, 0x7, 0x2f, 
+       0x2, 0x2, 0xf39, 0x284, 0x3, 0x2, 0x2, 0x2, 0xf3a, 0xf3b, 0x7, 0x2c, 
+       0x2, 0x2, 0xf3b, 0x286, 0x3, 0x2, 0x2, 0x2, 0xf3c, 0xf3d, 0x7, 0x31, 
+       0x2, 0x2, 0xf3d, 0x288, 0x3, 0x2, 0x2, 0x2, 0xf3e, 0xf3f, 0x7, 0x27, 
+       0x2, 0x2, 0xf3f, 0x28a, 0x3, 0x2, 0x2, 0x2, 0xf40, 0xf41, 0x7, 0x28, 
+       0x2, 0x2, 0xf41, 0x28c, 0x3, 0x2, 0x2, 0x2, 0xf42, 0xf43, 0x7, 0x7e, 
+       0x2, 0x2, 0xf43, 0x28e, 0x3, 0x2, 0x2, 0x2, 0xf44, 0xf45, 0x7, 0x28, 
+       0x2, 0x2, 0xf45, 0xf46, 0x7, 0x28, 0x2, 0x2, 0xf46, 0x290, 0x3, 0x2, 
+       0x2, 0x2, 0xf47, 0xf48, 0x7, 0x7e, 0x2, 0x2, 0xf48, 0xf49, 0x7, 0x7e, 
+       0x2, 0x2, 0xf49, 0x292, 0x3, 0x2, 0x2, 0x2, 0xf4a, 0xf4b, 0x7, 0x60, 
+       0x2, 0x2, 0xf4b, 0x294, 0x3, 0x2, 0x2, 0x2, 0xf4c, 0xf4d, 0x7, 0x23, 
+       0x2, 0x2, 0xf4d, 0x296, 0x3, 0x2, 0x2, 0x2, 0xf4e, 0xf4f, 0x7, 0x80, 
+       0x2, 0x2, 0xf4f, 0x298, 0x3, 0x2, 0x2, 0x2, 0xf50, 0xf51, 0x7, 0x41, 
+       0x2, 0x2, 0xf51, 0x29a, 0x3, 0x2, 0x2, 0x2, 0xf52, 0xf53, 0x7, 0x3c, 
+       0x2, 0x2, 0xf53, 0x29c, 0x3, 0x2, 0x2, 0x2, 0xf54, 0xf55, 0x7, 0x3c, 
+       0x2, 0x2, 0xf55, 0xf56, 0x7, 0x3c, 0x2, 0x2, 0xf56, 0x29e, 0x3, 0x2, 
+       0x2, 0x2, 0xf57, 0xf58, 0x7, 0x3d, 0x2, 0x2, 0xf58, 0x2a0, 0x3, 0x2, 
+       0x2, 0x2, 0xf59, 0xf5a, 0x7, 0x2e, 0x2, 0x2, 0xf5a, 0x2a2, 0x3, 0x2, 
+       0x2, 0x2, 0xf5b, 0xf5c, 0x7, 0x3f, 0x2, 0x2, 0xf5c, 0x2a4, 0x3, 0x2, 
+       0x2, 0x2, 0xf5d, 0xf5e, 0x7, 0x2c, 0x2, 0x2, 0xf5e, 0xf5f, 0x7, 0x3f, 
+       0x2, 0x2, 0xf5f, 0x2a6, 0x3, 0x2, 0x2, 0x2, 0xf60, 0xf61, 0x7, 0x31, 
+       0x2, 0x2, 0xf61, 0xf62, 0x7, 0x3f, 0x2, 0x2, 0xf62, 0x2a8, 0x3, 0x2, 
+       0x2, 0x2, 0xf63, 0xf64, 0x7, 0x27, 0x2, 0x2, 0xf64, 0xf65, 0x7, 0x3f, 
+       0x2, 0x2, 0xf65, 0x2aa, 0x3, 0x2, 0x2, 0x2, 0xf66, 0xf67, 0x7, 0x2d, 
+       0x2, 0x2, 0xf67, 0xf68, 0x7, 0x3f, 0x2, 0x2, 0xf68, 0x2ac, 0x3, 0x2, 
+       0x2, 0x2, 0xf69, 0xf6a, 0x7, 0x2f, 0x2, 0x2, 0xf6a, 0xf6b, 0x7, 0x3f, 
+       0x2, 0x2, 0xf6b, 0x2ae, 0x3, 0x2, 0x2, 0x2, 0xf6c, 0xf6d, 0x7, 0x3e, 
+       0x2, 0x2, 0xf6d, 0xf6e, 0x7, 0x3e, 0x2, 0x2, 0xf6e, 0xf6f, 0x7, 0x3f, 
+       0x2, 0x2, 0xf6f, 0x2b0, 0x3, 0x2, 0x2, 0x2, 0xf70, 0xf71, 0x7, 0x40, 
+       0x2, 0x2, 0xf71, 0xf72, 0x7, 0x40, 0x2, 0x2, 0xf72, 0xf73, 0x7, 0x3f, 
+       0x2, 0x2, 0xf73, 0x2b2, 0x3, 0x2, 0x2, 0x2, 0xf74, 0xf75, 0x7, 0x28, 
+       0x2, 0x2, 0xf75, 0xf76, 0x7, 0x3f, 0x2, 0x2, 0xf76, 0x2b4, 0x3, 0x2, 
+       0x2, 0x2, 0xf77, 0xf78, 0x7, 0x60, 0x2, 0x2, 0xf78, 0xf79, 0x7, 0x3f, 
+       0x2, 0x2, 0xf79, 0x2b6, 0x3, 0x2, 0x2, 0x2, 0xf7a, 0xf7b, 0x7, 0x7e, 
+       0x2, 0x2, 0xf7b, 0xf7c, 0x7, 0x3f, 0x2, 0x2, 0xf7c, 0x2b8, 0x3, 0x2, 
+       0x2, 0x2, 0xf7d, 0xf7e, 0x7, 0x3f, 0x2, 0x2, 0xf7e, 0xf7f, 0x7, 0x3f, 
+       0x2, 0x2, 0xf7f, 0x2ba, 0x3, 0x2, 0x2, 0x2, 0xf80, 0xf81, 0x7, 0x23, 
+       0x2, 0x2, 0xf81, 0xf82, 0x7, 0x3f, 0x2, 0x2, 0xf82, 0x2bc, 0x3, 0x2, 
+       0x2, 0x2, 0xf83, 0xf84, 0x7, 0x30, 0x2, 0x2, 0xf84, 0x2be, 0x3, 0x2, 
+       0x2, 0x2, 0xf85, 0xf86, 0x7, 0x76, 0x2, 0x2, 0xf86, 0xf87, 0x7, 0x74, 
+       0x2, 0x2, 0xf87, 0xf88, 0x7, 0x77, 0x2, 0x2, 0xf88, 0xf89, 0x7, 0x67, 
+       0x2, 0x2, 0xf89, 0x2c0, 0x3, 0x2, 0x2, 0x2, 0xf8a, 0xf8b, 0x7, 0x68, 
+       0x2, 0x2, 0xf8b, 0xf8c, 0x7, 0x63, 0x2, 0x2, 0xf8c, 0xf8d, 0x7, 0x6e, 
+       0x2, 0x2, 0xf8d, 0xf8e, 0x7, 0x75, 0x2, 0x2, 0xf8e, 0xf8f, 0x7, 0x67, 
+       0x2, 0x2, 0xf8f, 0x2c2, 0x3, 0x2, 0x2, 0x2, 0xf90, 0xf91, 0x7, 0x63, 
+       0x2, 0x2, 0xf91, 0xf92, 0x7, 0x75, 0x2, 0x2, 0xf92, 0xf93, 0x7, 0x75, 
+       0x2, 0x2, 0xf93, 0xf94, 0x7, 0x71, 0x2, 0x2, 0xf94, 0xf95, 0x7, 0x65, 
+       0x2, 0x2, 0xf95, 0xf96, 0x7, 0x6b, 0x2, 0x2, 0xf96, 0xf97, 0x7, 0x63, 
+       0x2, 0x2, 0xf97, 0xf98, 0x7, 0x76, 0x2, 0x2, 0xf98, 0xf99, 0x7, 0x67, 
+       0x2, 0x2, 0xf99, 0xf9a, 0x7, 0x66, 0x2, 0x2, 0xf9a, 0xf9b, 0x7, 0x76, 
+       0x2, 0x2, 0xf9b, 0xf9c, 0x7, 0x7b, 0x2, 0x2, 0xf9c, 0xf9d, 0x7, 0x72, 
+       0x2, 0x2, 0xf9d, 0xf9e, 0x7, 0x67, 0x2, 0x2, 0xf9e, 0x2c4, 0x3, 0x2, 
+       0x2, 0x2, 0xf9f, 0xfa0, 0x7, 0x76, 0x2, 0x2, 0xfa0, 0xfa1, 0x7, 0x7b, 
+       0x2, 0x2, 0xfa1, 0xfa2, 0x7, 0x72, 0x2, 0x2, 0xfa2, 0xfa3, 0x7, 0x67, 
+       0x2, 0x2, 0xfa3, 0xfa4, 0x7, 0x63, 0x2, 0x2, 0xfa4, 0xfa5, 0x7, 0x6e, 
+       0x2, 0x2, 0xfa5, 0xfa6, 0x7, 0x6b, 0x2, 0x2, 0xfa6, 0xfa7, 0x7, 0x63, 
+       0x2, 0x2, 0xfa7, 0xfa8, 0x7, 0x75, 0x2, 0x2, 0xfa8, 0x2c6, 0x3, 0x2, 
+       0x2, 0x2, 0xfa9, 0xfaa, 0x7, 0x76, 0x2, 0x2, 0xfaa, 0xfab, 0x7, 0x7b, 
+       0x2, 0x2, 0xfab, 0xfac, 0x7, 0x72, 0x2, 0x2, 0xfac, 0xfad, 0x7, 0x67, 
+       0x2, 0x2, 0xfad, 0xfae, 0x7, 0x66, 0x2, 0x2, 0xfae, 0xfaf, 0x7, 0x67, 
+       0x2, 0x2, 0xfaf, 0xfb0, 0x7, 0x68, 0x2, 0x2, 0xfb0, 0x2c8, 0x3, 0x2, 
+       0x2, 0x2, 0xfb1, 0xfb2, 0x7, 0x68, 0x2, 0x2, 0xfb2, 0xfb3, 0x7, 0x77, 
+       0x2, 0x2, 0xfb3, 0xfb4, 0x7, 0x70, 0x2, 0x2, 0xfb4, 0xfb5, 0x7, 0x66, 
+       0x2, 0x2, 0xfb5, 0xfb6, 0x7, 0x63, 0x2, 0x2, 0xfb6, 0xfb7, 0x7, 0x6f, 
+       0x2, 0x2, 0xfb7, 0xfb8, 0x7, 0x67, 0x2, 0x2, 0xfb8, 0xfb9, 0x7, 0x70, 
+       0x2, 0x2, 0xfb9, 0xfba, 0x7, 0x76, 0x2, 0x2, 0xfba, 0xfbb, 0x7, 0x63, 
+       0x2, 0x2, 0xfbb, 0xfbc, 0x7, 0x6e, 0x2, 0x2, 0xfbc, 0x2ca, 0x3, 0x2, 
+       0x2, 0x2, 0xfbd, 0xfbe, 0x7, 0x76, 0x2, 0x2, 0xfbe, 0xfbf, 0x7, 0x7b, 
+       0x2, 0x2, 0xfbf, 0xfc0, 0x7, 0x72, 0x2, 0x2, 0xfc0, 0xfc1, 0x7, 0x67, 
+       0x2, 0x2, 0xfc1, 0xfc2, 0x7, 0x71, 0x2, 0x2, 0xfc2, 0xfc3, 0x7, 0x68, 
+       0x2, 0x2, 0xfc3, 0x2cc, 0x3, 0x2, 0x2, 0x2, 0xfc4, 0xfc5, 0x7, 0x48, 
+       0x2, 0x2, 0xfc5, 0xfc6, 0x7, 0x74, 0x2, 0x2, 0xfc6, 0xfc7, 0x7, 0x67, 
+       0x2, 0x2, 0xfc7, 0xfc8, 0x7, 0x73, 0x2, 0x2, 0xfc8, 0xfc9, 0x7, 0x77, 
+       0x2, 0x2, 0xfc9, 0xfca, 0x7, 0x67, 0x2, 0x2, 0xfca, 0xfcb, 0x7, 0x70, 
+       0x2, 0x2, 0xfcb, 0xfcc, 0x7, 0x65, 0x2, 0x2, 0xfcc, 0xfcd, 0x7, 0x7b, 
+       0x2, 0x2, 0xfcd, 0xfce, 0x7, 0x4b, 0x2, 0x2, 0xfce, 0xfcf, 0x7, 0x66, 
+       0x2, 0x2, 0xfcf, 0x2ce, 0x3, 0x2, 0x2, 0x2, 0xfd0, 0xfd1, 0x7, 0x55, 
+       0x2, 0x2, 0xfd1, 0xfd2, 0x7, 0x6a, 0x2, 0x2, 0xfd2, 0xfd3, 0x7, 0x63, 
+       0x2, 0x2, 0xfd3, 0xfd4, 0x7, 0x66, 0x2, 0x2, 0xfd4, 0xfd5, 0x7, 0x67, 
+       0x2, 0x2, 0xfd5, 0xfd6, 0x7, 0x74, 0x2, 0x2, 0xfd6, 0xfd7, 0x7, 0x58, 
+       0x2, 0x2, 0xfd7, 0xfd8, 0x7, 0x63, 0x2, 0x2, 0xfd8, 0xfd9, 0x7, 0x74, 
+       0x2, 0x2, 0xfd9, 0xfda, 0x7, 0x6b, 0x2, 0x2, 0xfda, 0xfdb, 0x7, 0x63, 
+       0x2, 0x2, 0xfdb, 0xfdc, 0x7, 0x70, 0x2, 0x2, 0xfdc, 0xfdd, 0x7, 0x76, 
+       0x2, 0x2, 0xfdd, 0xfde, 0x7, 0x48, 0x2, 0x2, 0xfde, 0xfdf, 0x7, 0x63, 
+       0x2, 0x2, 0xfdf, 0xfe0, 0x7, 0x6e, 0x2, 0x2, 0xfe0, 0xfe1, 0x7, 0x6e, 
+       0x2, 0x2, 0xfe1, 0xfe2, 0x7, 0x64, 0x2, 0x2, 0xfe2, 0xfe3, 0x7, 0x63, 
+       0x2, 0x2, 0xfe3, 0xfe4, 0x7, 0x65, 0x2, 0x2, 0xfe4, 0xfe5, 0x7, 0x6d, 
+       0x2, 0x2, 0xfe5, 0x2d0, 0x3, 0x2, 0x2, 0x2, 0xfe6, 0xfe7, 0x7, 0x55, 
+       0x2, 0x2, 0xfe7, 0xfe8, 0x7, 0x6a, 0x2, 0x2, 0xfe8, 0xfe9, 0x7, 0x63, 
+       0x2, 0x2, 0xfe9, 0xfea, 0x7, 0x66, 0x2, 0x2, 0xfea, 0xfeb, 0x7, 0x67, 
+       0x2, 0x2, 0xfeb, 0xfec, 0x7, 0x74, 0x2, 0x2, 0xfec, 0xfed, 0x7, 0x54, 
+       0x2, 0x2, 0xfed, 0xfee, 0x7, 0x67, 0x2, 0x2, 0xfee, 0xfef, 0x7, 0x75, 
+       0x2, 0x2, 0xfef, 0xff0, 0x7, 0x71, 0x2, 0x2, 0xff0, 0xff1, 0x7, 0x77, 
+       0x2, 0x2, 0xff1, 0xff2, 0x7, 0x74, 0x2, 0x2, 0xff2, 0xff3, 0x7, 0x65, 
+       0x2, 0x2, 0xff3, 0xff4, 0x7, 0x67, 0x2, 0x2, 0xff4, 0xff5, 0x7, 0x49, 
+       0x2, 0x2, 0xff5, 0xff6, 0x7, 0x74, 0x2, 0x2, 0xff6, 0xff7, 0x7, 0x71, 
+       0x2, 0x2, 0xff7, 0xff8, 0x7, 0x77, 0x2, 0x2, 0xff8, 0xff9, 0x7, 0x72, 
+       0x2, 0x2, 0xff9, 0xffa, 0x7, 0x55, 0x2, 0x2, 0xffa, 0xffb, 0x7, 0x67, 
+       0x2, 0x2, 0xffb, 0xffc, 0x7, 0x6f, 0x2, 0x2, 0xffc, 0xffd, 0x7, 0x63, 
+       0x2, 0x2, 0xffd, 0xffe, 0x7, 0x70, 0x2, 0x2, 0xffe, 0xfff, 0x7, 0x76, 
+       0x2, 0x2, 0xfff, 0x1000, 0x7, 0x6b, 0x2, 0x2, 0x1000, 0x1001, 0x7, 
+       0x65, 0x2, 0x2, 0x1001, 0x2d2, 0x3, 0x2, 0x2, 0x2, 0x1002, 0x1003, 
+       0x7, 0x55, 0x2, 0x2, 0x1003, 0x1004, 0x7, 0x6a, 0x2, 0x2, 0x1004, 
+       0x1005, 0x7, 0x63, 0x2, 0x2, 0x1005, 0x1006, 0x7, 0x66, 0x2, 0x2, 
+       0x1006, 0x1007, 0x7, 0x67, 0x2, 0x2, 0x1007, 0x1008, 0x7, 0x74, 0x2, 
+       0x2, 0x1008, 0x1009, 0x7, 0x54, 0x2, 0x2, 0x1009, 0x100a, 0x7, 0x67, 
+       0x2, 0x2, 0x100a, 0x100b, 0x7, 0x75, 0x2, 0x2, 0x100b, 0x100c, 0x7, 
+       0x71, 0x2, 0x2, 0x100c, 0x100d, 0x7, 0x77, 0x2, 0x2, 0x100d, 0x100e, 
+       0x7, 0x74, 0x2, 0x2, 0x100e, 0x100f, 0x7, 0x65, 0x2, 0x2, 0x100f, 
+       0x1010, 0x7, 0x67, 0x2, 0x2, 0x1010, 0x1011, 0x7, 0x49, 0x2, 0x2, 
+       0x1011, 0x1012, 0x7, 0x74, 0x2, 0x2, 0x1012, 0x1013, 0x7, 0x71, 0x2, 
+       0x2, 0x1013, 0x1014, 0x7, 0x77, 0x2, 0x2, 0x1014, 0x1015, 0x7, 0x72, 
+       0x2, 0x2, 0x1015, 0x2d4, 0x3, 0x2, 0x2, 0x2, 0x1016, 0x1017, 0x7, 
+       0x61, 0x2, 0x2, 0x1017, 0x1018, 0x7, 0x61, 0x2, 0x2, 0x1018, 0x1019, 
+       0x7, 0x63, 0x2, 0x2, 0x1019, 0x101a, 0x7, 0x7c, 0x2, 0x2, 0x101a, 
+       0x101b, 0x7, 0x75, 0x2, 0x2, 0x101b, 0x101c, 0x7, 0x6e, 0x2, 0x2, 
+       0x101c, 0x101d, 0x7, 0x65, 0x2, 0x2, 0x101d, 0x101e, 0x7, 0x61, 0x2, 
+       0x2, 0x101e, 0x101f, 0x7, 0x72, 0x2, 0x2, 0x101f, 0x1020, 0x7, 0x74, 
+       0x2, 0x2, 0x1020, 0x1021, 0x7, 0x6b, 0x2, 0x2, 0x1021, 0x1022, 0x7, 
+       0x70, 0x2, 0x2, 0x1022, 0x1023, 0x7, 0x76, 0x2, 0x2, 0x1023, 0x1024, 
+       0x7, 0x61, 0x2, 0x2, 0x1024, 0x1025, 0x7, 0x6f, 0x2, 0x2, 0x1025, 
+       0x1026, 0x7, 0x67, 0x2, 0x2, 0x1026, 0x1027, 0x7, 0x75, 0x2, 0x2, 
+       0x1027, 0x1028, 0x7, 0x75, 0x2, 0x2, 0x1028, 0x1029, 0x7, 0x63, 0x2, 
+       0x2, 0x1029, 0x102a, 0x7, 0x69, 0x2, 0x2, 0x102a, 0x102b, 0x7, 0x67, 
+       0x2, 0x2, 0x102b, 0x2d6, 0x3, 0x2, 0x2, 0x2, 0x102c, 0x102d, 0x7, 
+       0x61, 0x2, 0x2, 0x102d, 0x102e, 0x7, 0x61, 0x2, 0x2, 0x102e, 0x102f, 
+       0x7, 0x63, 0x2, 0x2, 0x102f, 0x1030, 0x7, 0x7c, 0x2, 0x2, 0x1030, 
+       0x1031, 0x7, 0x75, 0x2, 0x2, 0x1031, 0x1032, 0x7, 0x6e, 0x2, 0x2, 
+       0x1032, 0x1033, 0x7, 0x65, 0x2, 0x2, 0x1033, 0x1034, 0x7, 0x61, 0x2, 
+       0x2, 0x1034, 0x1035, 0x7, 0x72, 0x2, 0x2, 0x1035, 0x1036, 0x7, 0x74, 
+       0x2, 0x2, 0x1036, 0x1037, 0x7, 0x6b, 0x2, 0x2, 0x1037, 0x1038, 0x7, 
+       0x70, 0x2, 0x2, 0x1038, 0x1039, 0x7, 0x76, 0x2, 0x2, 0x1039, 0x103a, 
+       0x7, 0x61, 0x2, 0x2, 0x103a, 0x103b, 0x7, 0x75, 0x2, 0x2, 0x103b, 
+       0x103c, 0x7, 0x7b, 0x2, 0x2, 0x103c, 0x103d, 0x7, 0x6f, 0x2, 0x2, 
+       0x103d, 0x103e, 0x7, 0x64, 0x2, 0x2, 0x103e, 0x103f, 0x7, 0x71, 0x2, 
+       0x2, 0x103f, 0x1040, 0x7, 0x6e, 0x2, 0x2, 0x1040, 0x2d8, 0x3, 0x2, 
+       0x2, 0x2, 0x1041, 0x1042, 0x7, 0x61, 0x2, 0x2, 0x1042, 0x1043, 0x7, 
+       0x61, 0x2, 0x2, 0x1043, 0x1044, 0x7, 0x63, 0x2, 0x2, 0x1044, 0x1045, 
+       0x7, 0x7c, 0x2, 0x2, 0x1045, 0x1046, 0x7, 0x75, 0x2, 0x2, 0x1046, 
+       0x1047, 0x7, 0x6e, 0x2, 0x2, 0x1047, 0x1048, 0x7, 0x65, 0x2, 0x2, 
+       0x1048, 0x1049, 0x7, 0x61, 0x2, 0x2, 0x1049, 0x104a, 0x7, 0x72, 0x2, 
+       0x2, 0x104a, 0x104b, 0x7, 0x74, 0x2, 0x2, 0x104b, 0x104c, 0x7, 0x76, 
+       0x2, 0x2, 0x104c, 0x104d, 0x7, 0x75, 0x2, 0x2, 0x104d, 0x104e, 0x7, 
+       0x7b, 0x2, 0x2, 0x104e, 0x104f, 0x7, 0x6f, 0x2, 0x2, 0x104f, 0x1050, 
+       0x7, 0x61, 0x2, 0x2, 0x1050, 0x1051, 0x7, 0x68, 0x2, 0x2, 0x1051, 
+       0x1052, 0x7, 0x77, 0x2, 0x2, 0x1052, 0x1053, 0x7, 0x6e, 0x2, 0x2, 
+       0x1053, 0x1054, 0x7, 0x6e, 0x2, 0x2, 0x1054, 0x1055, 0x7, 0x7b, 0x2, 
+       0x2, 0x1055, 0x1056, 0x7, 0x61, 0x2, 0x2, 0x1056, 0x1057, 0x7, 0x73, 
+       0x2, 0x2, 0x1057, 0x1058, 0x7, 0x77, 0x2, 0x2, 0x1058, 0x1059, 0x7, 
+       0x63, 0x2, 0x2, 0x1059, 0x105a, 0x7, 0x6e, 0x2, 0x2, 0x105a, 0x105b, 
+       0x7, 0x6b, 0x2, 0x2, 0x105b, 0x105c, 0x7, 0x68, 0x2, 0x2, 0x105c, 
+       0x105d, 0x7, 0x6b, 0x2, 0x2, 0x105d, 0x105e, 0x7, 0x67, 0x2, 0x2, 
+       0x105e, 0x105f, 0x7, 0x66, 0x2, 0x2, 0x105f, 0x2da, 0x3, 0x2, 0x2, 
+       0x2, 0x1060, 0x1061, 0x7, 0x61, 0x2, 0x2, 0x1061, 0x1062, 0x7, 0x61, 
+       0x2, 0x2, 0x1062, 0x1063, 0x7, 0x63, 0x2, 0x2, 0x1063, 0x1064, 0x7, 
+       0x7c, 0x2, 0x2, 0x1064, 0x1065, 0x7, 0x75, 0x2, 0x2, 0x1065, 0x1066, 
+       0x7, 0x6e, 0x2, 0x2, 0x1066, 0x1067, 0x7, 0x65, 0x2, 0x2, 0x1067, 
+       0x1068, 0x7, 0x61, 0x2, 0x2, 0x1068, 0x1069, 0x7, 0x72, 0x2, 0x2, 
+       0x1069, 0x106a, 0x7, 0x74, 0x2, 0x2, 0x106a, 0x106b, 0x7, 0x76, 0x2, 
+       0x2, 0x106b, 0x106c, 0x7, 0x75, 0x2, 0x2, 0x106c, 0x106d, 0x7, 0x7b, 
+       0x2, 0x2, 0x106d, 0x106e, 0x7, 0x6f, 0x2, 0x2, 0x106e, 0x106f, 0x7, 
+       0x61, 0x2, 0x2, 0x106f, 0x1070, 0x7, 0x6e, 0x2, 0x2, 0x1070, 0x1071, 
+       0x7, 0x67, 0x2, 0x2, 0x1071, 0x1072, 0x7, 0x63, 0x2, 0x2, 0x1072, 
+       0x1073, 0x7, 0x75, 0x2, 0x2, 0x1073, 0x1074, 0x7, 0x76, 0x2, 0x2, 
+       0x1074, 0x1075, 0x7, 0x61, 0x2, 0x2, 0x1075, 0x1076, 0x7, 0x73, 0x2, 
+       0x2, 0x1076, 0x1077, 0x7, 0x77, 0x2, 0x2, 0x1077, 0x1078, 0x7, 0x63, 
+       0x2, 0x2, 0x1078, 0x1079, 0x7, 0x6e, 0x2, 0x2, 0x1079, 0x107a, 0x7, 
+       0x6b, 0x2, 0x2, 0x107a, 0x107b, 0x7, 0x68, 0x2, 0x2, 0x107b, 0x107c, 
+       0x7, 0x6b, 0x2, 0x2, 0x107c, 0x107d, 0x7, 0x67, 0x2, 0x2, 0x107d, 
+       0x107e, 0x7, 0x66, 0x2, 0x2, 0x107e, 0x2dc, 0x3, 0x2, 0x2, 0x2, 0x107f, 
+       0x1080, 0x7, 0x61, 0x2, 0x2, 0x1080, 0x1081, 0x7, 0x61, 0x2, 0x2, 
+       0x1081, 0x1082, 0x7, 0x63, 0x2, 0x2, 0x1082, 0x1083, 0x7, 0x7c, 0x2, 
+       0x2, 0x1083, 0x1084, 0x7, 0x75, 0x2, 0x2, 0x1084, 0x1085, 0x7, 0x6e, 
+       0x2, 0x2, 0x1085, 0x1086, 0x7, 0x65, 0x2, 0x2, 0x1086, 0x1087, 0x7, 
+       0x61, 0x2, 0x2, 0x1087, 0x1088, 0x7, 0x72, 0x2, 0x2, 0x1088, 0x1089, 
+       0x7, 0x74, 0x2, 0x2, 0x1089, 0x108a, 0x7, 0x76, 0x2, 0x2, 0x108a, 
+       0x108b, 0x7, 0x75, 0x2, 0x2, 0x108b, 0x108c, 0x7, 0x7b, 0x2, 0x2, 
+       0x108c, 0x108d, 0x7, 0x6f, 0x2, 0x2, 0x108d, 0x108e, 0x7, 0x61, 0x2, 
+       0x2, 0x108e, 0x108f, 0x7, 0x65, 0x2, 0x2, 0x108f, 0x1090, 0x7, 0x71, 
+       0x2, 0x2, 0x1090, 0x1091, 0x7, 0x70, 0x2, 0x2, 0x1091, 0x1092, 0x7, 
+       0x75, 0x2, 0x2, 0x1092, 0x1093, 0x7, 0x76, 0x2, 0x2, 0x1093, 0x1094, 
+       0x7, 0x6b, 0x2, 0x2, 0x1094, 0x1095, 0x7, 0x70, 0x2, 0x2, 0x1095, 
+       0x1096, 0x7, 0x76, 0x2, 0x2, 0x1096, 0x1097, 0x7, 0x61, 0x2, 0x2, 
+       0x1097, 0x1098, 0x7, 0x78, 0x2, 0x2, 0x1098, 0x1099, 0x7, 0x63, 0x2, 
+       0x2, 0x1099, 0x109a, 0x7, 0x6e, 0x2, 0x2, 0x109a, 0x109b, 0x7, 0x77, 
+       0x2, 0x2, 0x109b, 0x109c, 0x7, 0x67, 0x2, 0x2, 0x109c, 0x2de, 0x3, 
+       0x2, 0x2, 0x2, 0x109d, 0x109e, 0x7, 0x44, 0x2, 0x2, 0x109e, 0x109f, 
+       0x7, 0x4b, 0x2, 0x2, 0x109f, 0x10a0, 0x7, 0x50, 0x2, 0x2, 0x10a0, 
+       0x10a1, 0x7, 0x51, 0x2, 0x2, 0x10a1, 0x10a2, 0x7, 0x54, 0x2, 0x2, 
+       0x10a2, 0x10a3, 0x7, 0x4f, 0x2, 0x2, 0x10a3, 0x10a4, 0x7, 0x43, 0x2, 
+       0x2, 0x10a4, 0x10a5, 0x7, 0x4e, 0x2, 0x2, 0x10a5, 0x10a9, 0x3, 0x2, 
+       0x2, 0x2, 0x10a6, 0x10a8, 0x5, 0x2e7, 0x174, 0x2, 0x10a7, 0x10a6, 
+       0x3, 0x2, 0x2, 0x2, 0x10a8, 0x10ab, 0x3, 0x2, 0x2, 0x2, 0x10a9, 0x10a7, 
+       0x3, 0x2, 0x2, 0x2, 0x10a9, 0x10aa, 0x3, 0x2, 0x2, 0x2, 0x10aa, 0x116b, 
+       0x3, 0x2, 0x2, 0x2, 0x10ab, 0x10a9, 0x3, 0x2, 0x2, 0x2, 0x10ac, 0x10ad, 
+       0x7, 0x44, 0x2, 0x2, 0x10ad, 0x10ae, 0x7, 0x4e, 0x2, 0x2, 0x10ae, 
+       0x10af, 0x7, 0x47, 0x2, 0x2, 0x10af, 0x10b0, 0x7, 0x50, 0x2, 0x2, 
+       0x10b0, 0x10b1, 0x7, 0x46, 0x2, 0x2, 0x10b1, 0x10b2, 0x7, 0x4b, 0x2, 
+       0x2, 0x10b2, 0x10b3, 0x7, 0x50, 0x2, 0x2, 0x10b3, 0x10b4, 0x7, 0x46, 
+       0x2, 0x2, 0x10b4, 0x10b5, 0x7, 0x4b, 0x2, 0x2, 0x10b5, 0x10b6, 0x7, 
+       0x45, 0x2, 0x2, 0x10b6, 0x10b7, 0x7, 0x47, 0x2, 0x2, 0x10b7, 0x10b8, 
+       0x7, 0x55, 0x2, 0x2, 0x10b8, 0x10bc, 0x3, 0x2, 0x2, 0x2, 0x10b9, 
+       0x10bb, 0x5, 0x2e7, 0x174, 0x2, 0x10ba, 0x10b9, 0x3, 0x2, 0x2, 0x2, 
+       0x10bb, 0x10be, 0x3, 0x2, 0x2, 0x2, 0x10bc, 0x10ba, 0x3, 0x2, 0x2, 
+       0x2, 0x10bc, 0x10bd, 0x3, 0x2, 0x2, 0x2, 0x10bd, 0x116b, 0x3, 0x2, 
+       0x2, 0x2, 0x10be, 0x10bc, 0x3, 0x2, 0x2, 0x2, 0x10bf, 0x10c0, 0x7, 
+       0x44, 0x2, 0x2, 0x10c0, 0x10c1, 0x7, 0x4e, 0x2, 0x2, 0x10c1, 0x10c2, 
+       0x7, 0x47, 0x2, 0x2, 0x10c2, 0x10c3, 0x7, 0x50, 0x2, 0x2, 0x10c3, 
+       0x10c4, 0x7, 0x46, 0x2, 0x2, 0x10c4, 0x10c5, 0x7, 0x59, 0x2, 0x2, 
+       0x10c5, 0x10c6, 0x7, 0x47, 0x2, 0x2, 0x10c6, 0x10c7, 0x7, 0x4b, 0x2, 
+       0x2, 0x10c7, 0x10c8, 0x7, 0x49, 0x2, 0x2, 0x10c8, 0x10c9, 0x7, 0x4a, 
+       0x2, 0x2, 0x10c9, 0x10ca, 0x7, 0x56, 0x2, 0x2, 0x10ca, 0x10ce, 0x3, 
+       0x2, 0x2, 0x2, 0x10cb, 0x10cd, 0x5, 0x2e7, 0x174, 0x2, 0x10cc, 0x10cb, 
+       0x3, 0x2, 0x2, 0x2, 0x10cd, 0x10d0, 0x3, 0x2, 0x2, 0x2, 0x10ce, 0x10cc, 
+       0x3, 0x2, 0x2, 0x2, 0x10ce, 0x10cf, 0x3, 0x2, 0x2, 0x2, 0x10cf, 0x116b, 
+       0x3, 0x2, 0x2, 0x2, 0x10d0, 0x10ce, 0x3, 0x2, 0x2, 0x2, 0x10d1, 0x10d2, 
+       0x7, 0x45, 0x2, 0x2, 0x10d2, 0x10d3, 0x7, 0x51, 0x2, 0x2, 0x10d3, 
+       0x10d4, 0x7, 0x4e, 0x2, 0x2, 0x10d4, 0x10d5, 0x7, 0x51, 0x2, 0x2, 
+       0x10d5, 0x10d6, 0x7, 0x54, 0x2, 0x2, 0x10d6, 0x10da, 0x3, 0x2, 0x2, 
+       0x2, 0x10d7, 0x10d9, 0x5, 0x2e7, 0x174, 0x2, 0x10d8, 0x10d7, 0x3, 
+       0x2, 0x2, 0x2, 0x10d9, 0x10dc, 0x3, 0x2, 0x2, 0x2, 0x10da, 0x10d8, 
+       0x3, 0x2, 0x2, 0x2, 0x10da, 0x10db, 0x3, 0x2, 0x2, 0x2, 0x10db, 0x116b, 
+       0x3, 0x2, 0x2, 0x2, 0x10dc, 0x10da, 0x3, 0x2, 0x2, 0x2, 0x10dd, 0x10de, 
+       0x7, 0x50, 0x2, 0x2, 0x10de, 0x10df, 0x7, 0x51, 0x2, 0x2, 0x10df, 
+       0x10e0, 0x7, 0x54, 0x2, 0x2, 0x10e0, 0x10e1, 0x7, 0x4f, 0x2, 0x2, 
+       0x10e1, 0x10e2, 0x7, 0x43, 0x2, 0x2, 0x10e2, 0x10e3, 0x7, 0x4e, 0x2, 
+       0x2, 0x10e3, 0x10e7, 0x3, 0x2, 0x2, 0x2, 0x10e4, 0x10e6, 0x5, 0x2e7, 
+       0x174, 0x2, 0x10e5, 0x10e4, 0x3, 0x2, 0x2, 0x2, 0x10e6, 0x10e9, 0x3, 
+       0x2, 0x2, 0x2, 0x10e7, 0x10e5, 0x3, 0x2, 0x2, 0x2, 0x10e7, 0x10e8, 
+       0x3, 0x2, 0x2, 0x2, 0x10e8, 0x116b, 0x3, 0x2, 0x2, 0x2, 0x10e9, 0x10e7, 
+       0x3, 0x2, 0x2, 0x2, 0x10ea, 0x10eb, 0x7, 0x52, 0x2, 0x2, 0x10eb, 
+       0x10ec, 0x7, 0x51, 0x2, 0x2, 0x10ec, 0x10ed, 0x7, 0x55, 0x2, 0x2, 
+       0x10ed, 0x10ee, 0x7, 0x4b, 0x2, 0x2, 0x10ee, 0x10ef, 0x7, 0x56, 0x2, 
+       0x2, 0x10ef, 0x10f0, 0x7, 0x4b, 0x2, 0x2, 0x10f0, 0x10f1, 0x7, 0x51, 
+       0x2, 0x2, 0x10f1, 0x10f2, 0x7, 0x50, 0x2, 0x2, 0x10f2, 0x10f6, 0x3, 
+       0x2, 0x2, 0x2, 0x10f3, 0x10f5, 0x5, 0x2e7, 0x174, 0x2, 0x10f4, 0x10f3, 
+       0x3, 0x2, 0x2, 0x2, 0x10f5, 0x10f8, 0x3, 0x2, 0x2, 0x2, 0x10f6, 0x10f4, 
+       0x3, 0x2, 0x2, 0x2, 0x10f6, 0x10f7, 0x3, 0x2, 0x2, 0x2, 0x10f7, 0x116b, 
+       0x3, 0x2, 0x2, 0x2, 0x10f8, 0x10f6, 0x3, 0x2, 0x2, 0x2, 0x10f9, 0x10fa, 
+       0x7, 0x52, 0x2, 0x2, 0x10fa, 0x10fb, 0x7, 0x51, 0x2, 0x2, 0x10fb, 
+       0x10fc, 0x7, 0x55, 0x2, 0x2, 0x10fc, 0x10fd, 0x7, 0x4b, 0x2, 0x2, 
+       0x10fd, 0x10fe, 0x7, 0x56, 0x2, 0x2, 0x10fe, 0x10ff, 0x7, 0x4b, 0x2, 
+       0x2, 0x10ff, 0x1100, 0x7, 0x51, 0x2, 0x2, 0x1100, 0x1101, 0x7, 0x50, 
+       0x2, 0x2, 0x1101, 0x116b, 0x7, 0x56, 0x2, 0x2, 0x1102, 0x1103, 0x7, 
+       0x52, 0x2, 0x2, 0x1103, 0x1104, 0x7, 0x55, 0x2, 0x2, 0x1104, 0x1105, 
+       0x7, 0x4b, 0x2, 0x2, 0x1105, 0x1106, 0x7, 0x5c, 0x2, 0x2, 0x1106, 
+       0x1107, 0x7, 0x47, 0x2, 0x2, 0x1107, 0x110b, 0x3, 0x2, 0x2, 0x2, 
+       0x1108, 0x110a, 0x5, 0x2e7, 0x174, 0x2, 0x1109, 0x1108, 0x3, 0x2, 
+       0x2, 0x2, 0x110a, 0x110d, 0x3, 0x2, 0x2, 0x2, 0x110b, 0x1109, 0x3, 
+       0x2, 0x2, 0x2, 0x110b, 0x110c, 0x3, 0x2, 0x2, 0x2, 0x110c, 0x116b, 
+       0x3, 0x2, 0x2, 0x2, 0x110d, 0x110b, 0x3, 0x2, 0x2, 0x2, 0x110e, 0x110f, 
+       0x7, 0x56, 0x2, 0x2, 0x110f, 0x1110, 0x7, 0x43, 0x2, 0x2, 0x1110, 
+       0x1111, 0x7, 0x50, 0x2, 0x2, 0x1111, 0x1112, 0x7, 0x49, 0x2, 0x2, 
+       0x1112, 0x1113, 0x7, 0x47, 0x2, 0x2, 0x1113, 0x1114, 0x7, 0x50, 0x2, 
+       0x2, 0x1114, 0x1115, 0x7, 0x56, 0x2, 0x2, 0x1115, 0x1119, 0x3, 0x2, 
+       0x2, 0x2, 0x1116, 0x1118, 0x5, 0x2e7, 0x174, 0x2, 0x1117, 0x1116, 
+       0x3, 0x2, 0x2, 0x2, 0x1118, 0x111b, 0x3, 0x2, 0x2, 0x2, 0x1119, 0x1117, 
+       0x3, 0x2, 0x2, 0x2, 0x1119, 0x111a, 0x3, 0x2, 0x2, 0x2, 0x111a, 0x116b, 
+       0x3, 0x2, 0x2, 0x2, 0x111b, 0x1119, 0x3, 0x2, 0x2, 0x2, 0x111c, 0x111d, 
+       0x7, 0x56, 0x2, 0x2, 0x111d, 0x111e, 0x7, 0x47, 0x2, 0x2, 0x111e, 
+       0x111f, 0x7, 0x5a, 0x2, 0x2, 0x111f, 0x1120, 0x7, 0x45, 0x2, 0x2, 
+       0x1120, 0x1121, 0x7, 0x51, 0x2, 0x2, 0x1121, 0x1122, 0x7, 0x51, 0x2, 
+       0x2, 0x1122, 0x1123, 0x7, 0x54, 0x2, 0x2, 0x1123, 0x1124, 0x7, 0x46, 
+       0x2, 0x2, 0x1124, 0x1128, 0x3, 0x2, 0x2, 0x2, 0x1125, 0x1127, 0x5, 
+       0x2e7, 0x174, 0x2, 0x1126, 0x1125, 0x3, 0x2, 0x2, 0x2, 0x1127, 0x112a, 
+       0x3, 0x2, 0x2, 0x2, 0x1128, 0x1126, 0x3, 0x2, 0x2, 0x2, 0x1128, 0x1129, 
+       0x3, 0x2, 0x2, 0x2, 0x1129, 0x116b, 0x3, 0x2, 0x2, 0x2, 0x112a, 0x1128, 
+       0x3, 0x2, 0x2, 0x2, 0x112b, 0x112c, 0x7, 0x48, 0x2, 0x2, 0x112c, 
+       0x112d, 0x7, 0x51, 0x2, 0x2, 0x112d, 0x116b, 0x7, 0x49, 0x2, 0x2, 
+       0x112e, 0x112f, 0x7, 0x56, 0x2, 0x2, 0x112f, 0x1130, 0x7, 0x47, 0x2, 
+       0x2, 0x1130, 0x1131, 0x7, 0x55, 0x2, 0x2, 0x1131, 0x1132, 0x7, 0x55, 
+       0x2, 0x2, 0x1132, 0x1133, 0x7, 0x48, 0x2, 0x2, 0x1133, 0x1134, 0x7, 
+       0x43, 0x2, 0x2, 0x1134, 0x1135, 0x7, 0x45, 0x2, 0x2, 0x1135, 0x1136, 
+       0x7, 0x56, 0x2, 0x2, 0x1136, 0x1137, 0x7, 0x51, 0x2, 0x2, 0x1137, 
+       0x1138, 0x7, 0x54, 0x2, 0x2, 0x1138, 0x113c, 0x3, 0x2, 0x2, 0x2, 
+       0x1139, 0x113b, 0x5, 0x2e7, 0x174, 0x2, 0x113a, 0x1139, 0x3, 0x2, 
+       0x2, 0x2, 0x113b, 0x113e, 0x3, 0x2, 0x2, 0x2, 0x113c, 0x113a, 0x3, 
+       0x2, 0x2, 0x2, 0x113c, 0x113d, 0x3, 0x2, 0x2, 0x2, 0x113d, 0x116b, 
+       0x3, 0x2, 0x2, 0x2, 0x113e, 0x113c, 0x3, 0x2, 0x2, 0x2, 0x113f, 0x1140, 
+       0x7, 0x56, 0x2, 0x2, 0x1140, 0x1141, 0x7, 0x47, 0x2, 0x2, 0x1141, 
+       0x1142, 0x7, 0x5a, 0x2, 0x2, 0x1142, 0x1143, 0x7, 0x45, 0x2, 0x2, 
+       0x1143, 0x1144, 0x7, 0x51, 0x2, 0x2, 0x1144, 0x1145, 0x7, 0x51, 0x2, 
+       0x2, 0x1145, 0x1146, 0x7, 0x54, 0x2, 0x2, 0x1146, 0x1147, 0x7, 0x46, 
+       0x2, 0x2, 0x1147, 0x114b, 0x3, 0x2, 0x2, 0x2, 0x1148, 0x114a, 0x5, 
+       0x2e7, 0x174, 0x2, 0x1149, 0x1148, 0x3, 0x2, 0x2, 0x2, 0x114a, 0x114d, 
+       0x3, 0x2, 0x2, 0x2, 0x114b, 0x1149, 0x3, 0x2, 0x2, 0x2, 0x114b, 0x114c, 
+       0x3, 0x2, 0x2, 0x2, 0x114c, 0x116b, 0x3, 0x2, 0x2, 0x2, 0x114d, 0x114b, 
+       0x3, 0x2, 0x2, 0x2, 0x114e, 0x114f, 0x7, 0x58, 0x2, 0x2, 0x114f, 
+       0x1150, 0x7, 0x48, 0x2, 0x2, 0x1150, 0x1151, 0x7, 0x43, 0x2, 0x2, 
+       0x1151, 0x1152, 0x7, 0x45, 0x2, 0x2, 0x1152, 0x116b, 0x7, 0x47, 0x2, 
+       0x2, 0x1153, 0x1154, 0x7, 0x58, 0x2, 0x2, 0x1154, 0x1155, 0x7, 0x52, 
+       0x2, 0x2, 0x1155, 0x1156, 0x7, 0x51, 0x2, 0x2, 0x1156, 0x1157, 0x7, 
+       0x55, 0x2, 0x2, 0x1157, 0x115b, 0x3, 0x2, 0x2, 0x2, 0x1158, 0x115a, 
+       0x5, 0x2e7, 0x174, 0x2, 0x1159, 0x1158, 0x3, 0x2, 0x2, 0x2, 0x115a, 
+       0x115d, 0x3, 0x2, 0x2, 0x2, 0x115b, 0x1159, 0x3, 0x2, 0x2, 0x2, 0x115b, 
+       0x115c, 0x3, 0x2, 0x2, 0x2, 0x115c, 0x116b, 0x3, 0x2, 0x2, 0x2, 0x115d, 
+       0x115b, 0x3, 0x2, 0x2, 0x2, 0x115e, 0x115f, 0x7, 0x46, 0x2, 0x2, 
+       0x115f, 0x1160, 0x7, 0x47, 0x2, 0x2, 0x1160, 0x1161, 0x7, 0x52, 0x2, 
+       0x2, 0x1161, 0x1162, 0x7, 0x56, 0x2, 0x2, 0x1162, 0x1163, 0x7, 0x4a, 
+       0x2, 0x2, 0x1163, 0x1167, 0x3, 0x2, 0x2, 0x2, 0x1164, 0x1166, 0x5, 
+       0x2e7, 0x174, 0x2, 0x1165, 0x1164, 0x3, 0x2, 0x2, 0x2, 0x1166, 0x1169, 
+       0x3, 0x2, 0x2, 0x2, 0x1167, 0x1165, 0x3, 0x2, 0x2, 0x2, 0x1167, 0x1168, 
+       0x3, 0x2, 0x2, 0x2, 0x1168, 0x116b, 0x3, 0x2, 0x2, 0x2, 0x1169, 0x1167, 
+       0x3, 0x2, 0x2, 0x2, 0x116a, 0x109d, 0x3, 0x2, 0x2, 0x2, 0x116a, 0x10ac, 
+       0x3, 0x2, 0x2, 0x2, 0x116a, 0x10bf, 0x3, 0x2, 0x2, 0x2, 0x116a, 0x10d1, 
+       0x3, 0x2, 0x2, 0x2, 0x116a, 0x10dd, 0x3, 0x2, 0x2, 0x2, 0x116a, 0x10ea, 
+       0x3, 0x2, 0x2, 0x2, 0x116a, 0x10f9, 0x3, 0x2, 0x2, 0x2, 0x116a, 0x1102, 
+       0x3, 0x2, 0x2, 0x2, 0x116a, 0x110e, 0x3, 0x2, 0x2, 0x2, 0x116a, 0x111c, 
+       0x3, 0x2, 0x2, 0x2, 0x116a, 0x112b, 0x3, 0x2, 0x2, 0x2, 0x116a, 0x112e, 
+       0x3, 0x2, 0x2, 0x2, 0x116a, 0x113f, 0x3, 0x2, 0x2, 0x2, 0x116a, 0x114e, 
+       0x3, 0x2, 0x2, 0x2, 0x116a, 0x1153, 0x3, 0x2, 0x2, 0x2, 0x116a, 0x115e, 
+       0x3, 0x2, 0x2, 0x2, 0x116b, 0x2e0, 0x3, 0x2, 0x2, 0x2, 0x116c, 0x116d, 
+       0x7, 0x55, 0x2, 0x2, 0x116d, 0x116e, 0x7, 0x58, 0x2, 0x2, 0x116e, 
+       0x116f, 0x7, 0x61, 0x2, 0x2, 0x116f, 0x1174, 0x3, 0x2, 0x2, 0x2, 
+       0x1170, 0x1173, 0x5, 0x2e5, 0x173, 0x2, 0x1171, 0x1173, 0x5, 0x2e7, 
+       0x174, 0x2, 0x1172, 0x1170, 0x3, 0x2, 0x2, 0x2, 0x1172, 0x1171, 0x3, 
+       0x2, 0x2, 0x2, 0x1173, 0x1176, 0x3, 0x2, 0x2, 0x2, 0x1174, 0x1172, 
+       0x3, 0x2, 0x2, 0x2, 0x1174, 0x1175, 0x3, 0x2, 0x2, 0x2, 0x1175, 0x1199, 
+       0x3, 0x2, 0x2, 0x2, 0x1176, 0x1174, 0x3, 0x2, 0x2, 0x2, 0x1177, 0x1178, 
+       0x7, 0x55, 0x2, 0x2, 0x1178, 0x1179, 0x7, 0x78, 0x2, 0x2, 0x1179, 
+       0x117a, 0x7, 0x61, 0x2, 0x2, 0x117a, 0x117f, 0x3, 0x2, 0x2, 0x2, 
+       0x117b, 0x117e, 0x5, 0x2e5, 0x173, 0x2, 0x117c, 0x117e, 0x5, 0x2e7, 
+       0x174, 0x2, 0x117d, 0x117b, 0x3, 0x2, 0x2, 0x2, 0x117d, 0x117c, 0x3, 
+       0x2, 0x2, 0x2, 0x117e, 0x1181, 0x3, 0x2, 0x2, 0x2, 0x117f, 0x117d, 
+       0x3, 0x2, 0x2, 0x2, 0x117f, 0x1180, 0x3, 0x2, 0x2, 0x2, 0x1180, 0x1199, 
+       0x3, 0x2, 0x2, 0x2, 0x1181, 0x117f, 0x3, 0x2, 0x2, 0x2, 0x1182, 0x1183, 
+       0x7, 0x75, 0x2, 0x2, 0x1183, 0x1184, 0x7, 0x58, 0x2, 0x2, 0x1184, 
+       0x1185, 0x7, 0x61, 0x2, 0x2, 0x1185, 0x118a, 0x3, 0x2, 0x2, 0x2, 
+       0x1186, 0x1189, 0x5, 0x2e5, 0x173, 0x2, 0x1187, 0x1189, 0x5, 0x2e7, 
+       0x174, 0x2, 0x1188, 0x1186, 0x3, 0x2, 0x2, 0x2, 0x1188, 0x1187, 0x3, 
+       0x2, 0x2, 0x2, 0x1189, 0x118c, 0x3, 0x2, 0x2, 0x2, 0x118a, 0x1188, 
+       0x3, 0x2, 0x2, 0x2, 0x118a, 0x118b, 0x3, 0x2, 0x2, 0x2, 0x118b, 0x1199, 
+       0x3, 0x2, 0x2, 0x2, 0x118c, 0x118a, 0x3, 0x2, 0x2, 0x2, 0x118d, 0x118e, 
+       0x7, 0x75, 0x2, 0x2, 0x118e, 0x118f, 0x7, 0x78, 0x2, 0x2, 0x118f, 
+       0x1190, 0x7, 0x61, 0x2, 0x2, 0x1190, 0x1195, 0x3, 0x2, 0x2, 0x2, 
+       0x1191, 0x1194, 0x5, 0x2e5, 0x173, 0x2, 0x1192, 0x1194, 0x5, 0x2e7, 
+       0x174, 0x2, 0x1193, 0x1191, 0x3, 0x2, 0x2, 0x2, 0x1193, 0x1192, 0x3, 
+       0x2, 0x2, 0x2, 0x1194, 0x1197, 0x3, 0x2, 0x2, 0x2, 0x1195, 0x1193, 
+       0x3, 0x2, 0x2, 0x2, 0x1195, 0x1196, 0x3, 0x2, 0x2, 0x2, 0x1196, 0x1199, 
+       0x3, 0x2, 0x2, 0x2, 0x1197, 0x1195, 0x3, 0x2, 0x2, 0x2, 0x1198, 0x116c, 
+       0x3, 0x2, 0x2, 0x2, 0x1198, 0x1177, 0x3, 0x2, 0x2, 0x2, 0x1198, 0x1182, 
+       0x3, 0x2, 0x2, 0x2, 0x1198, 0x118d, 0x3, 0x2, 0x2, 0x2, 0x1199, 0x2e2, 
+       0x3, 0x2, 0x2, 0x2, 0x119a, 0x119f, 0x5, 0x2e5, 0x173, 0x2, 0x119b, 
+       0x119e, 0x5, 0x2e5, 0x173, 0x2, 0x119c, 0x119e, 0x5, 0x2e7, 0x174, 
+       0x2, 0x119d, 0x119b, 0x3, 0x2, 0x2, 0x2, 0x119d, 0x119c, 0x3, 0x2, 
+       0x2, 0x2, 0x119e, 0x11a1, 0x3, 0x2, 0x2, 0x2, 0x119f, 0x119d, 0x3, 
+       0x2, 0x2, 0x2, 0x119f, 0x11a0, 0x3, 0x2, 0x2, 0x2, 0x11a0, 0x2e4, 
+       0x3, 0x2, 0x2, 0x2, 0x11a1, 0x119f, 0x3, 0x2, 0x2, 0x2, 0x11a2, 0x11a3, 
+       0x9, 0x2, 0x2, 0x2, 0x11a3, 0x2e6, 0x3, 0x2, 0x2, 0x2, 0x11a4, 0x11a5, 
+       0x9, 0x3, 0x2, 0x2, 0x11a5, 0x2e8, 0x3, 0x2, 0x2, 0x2, 0x11a6, 0x11a8, 
+       0x5, 0x2e7, 0x174, 0x2, 0x11a7, 0x11a6, 0x3, 0x2, 0x2, 0x2, 0x11a8, 
+       0x11a9, 0x3, 0x2, 0x2, 0x2, 0x11a9, 0x11a7, 0x3, 0x2, 0x2, 0x2, 0x11a9, 
+       0x11aa, 0x3, 0x2, 0x2, 0x2, 0x11aa, 0x2ea, 0x3, 0x2, 0x2, 0x2, 0x11ab, 
+       0x11ac, 0x7, 0x32, 0x2, 0x2, 0x11ac, 0x11b0, 0x7, 0x7a, 0x2, 0x2, 
+       0x11ad, 0x11ae, 0x7, 0x32, 0x2, 0x2, 0x11ae, 0x11b0, 0x7, 0x5a, 0x2, 
+       0x2, 0x11af, 0x11ab, 0x3, 0x2, 0x2, 0x2, 0x11af, 0x11ad, 0x3, 0x2, 
+       0x2, 0x2, 0x11b0, 0x11b2, 0x3, 0x2, 0x2, 0x2, 0x11b1, 0x11b3, 0x5, 
+       0x2ed, 0x177, 0x2, 0x11b2, 0x11b1, 0x3, 0x2, 0x2, 0x2, 0x11b3, 0x11b4, 
+       0x3, 0x2, 0x2, 0x2, 0x11b4, 0x11b2, 0x3, 0x2, 0x2, 0x2, 0x11b4, 0x11b5, 
+       0x3, 0x2, 0x2, 0x2, 0x11b5, 0x2ec, 0x3, 0x2, 0x2, 0x2, 0x11b6, 0x11b7, 
+       0x9, 0x4, 0x2, 0x2, 0x11b7, 0x2ee, 0x3, 0x2, 0x2, 0x2, 0x11b8, 0x11ba, 
+       0x5, 0x2f5, 0x17b, 0x2, 0x11b9, 0x11b8, 0x3, 0x2, 0x2, 0x2, 0x11b9, 
+       0x11ba, 0x3, 0x2, 0x2, 0x2, 0x11ba, 0x11bb, 0x3, 0x2, 0x2, 0x2, 0x11bb, 
+       0x11bc, 0x7, 0x30, 0x2, 0x2, 0x11bc, 0x11c1, 0x5, 0x2f5, 0x17b, 0x2, 
+       0x11bd, 0x11be, 0x5, 0x2f5, 0x17b, 0x2, 0x11be, 0x11bf, 0x7, 0x30, 
+       0x2, 0x2, 0x11bf, 0x11c1, 0x3, 0x2, 0x2, 0x2, 0x11c0, 0x11b9, 0x3, 
+       0x2, 0x2, 0x2, 0x11c0, 0x11bd, 0x3, 0x2, 0x2, 0x2, 0x11c1, 0x2f0, 
+       0x3, 0x2, 0x2, 0x2, 0x11c2, 0x11c4, 0x7, 0x67, 0x2, 0x2, 0x11c3, 
+       0x11c5, 0x5, 0x2f3, 0x17a, 0x2, 0x11c4, 0x11c3, 0x3, 0x2, 0x2, 0x2, 
        0x11c4, 0x11c5, 0x3, 0x2, 0x2, 0x2, 0x11c5, 0x11c6, 0x3, 0x2, 0x2, 
        0x11c4, 0x11c5, 0x3, 0x2, 0x2, 0x2, 0x11c5, 0x11c6, 0x3, 0x2, 0x2, 
-       0x2, 0x11c6, 0x11c7, 0x7, 0x72, 0x2, 0x2, 0x11c7, 0x11c8, 0x7, 0x74, 
-       0x2, 0x2, 0x11c8, 0x11c9, 0x7, 0x63, 0x2, 0x2, 0x11c9, 0x11ca, 0x7, 
-       0x69, 0x2, 0x2, 0x11ca, 0x11cb, 0x7, 0x6f, 0x2, 0x2, 0x11cb, 0x11cc, 
-       0x7, 0x63, 0x2, 0x2, 0x11cc, 0x11cd, 0x3, 0x2, 0x2, 0x2, 0x11cd, 
-       0x11d1, 0x5, 0x2ff, 0x180, 0x2, 0x11ce, 0x11d0, 0xa, 0xb, 0x2, 0x2, 
-       0x11cf, 0x11ce, 0x3, 0x2, 0x2, 0x2, 0x11d0, 0x11d3, 0x3, 0x2, 0x2, 
-       0x2, 0x11d1, 0x11cf, 0x3, 0x2, 0x2, 0x2, 0x11d1, 0x11d2, 0x3, 0x2, 
-       0x2, 0x2, 0x11d2, 0x11d4, 0x3, 0x2, 0x2, 0x2, 0x11d3, 0x11d1, 0x3, 
-       0x2, 0x2, 0x2, 0x11d4, 0x11d5, 0x8, 0x17e, 0x2, 0x2, 0x11d5, 0x2fc, 
-       0x3, 0x2, 0x2, 0x2, 0x11d6, 0x11d8, 0x7, 0x25, 0x2, 0x2, 0x11d7, 
-       0x11d9, 0x5, 0x2ff, 0x180, 0x2, 0x11d8, 0x11d7, 0x3, 0x2, 0x2, 0x2, 
-       0x11d8, 0x11d9, 0x3, 0x2, 0x2, 0x2, 0x11d9, 0x11e0, 0x3, 0x2, 0x2, 
-       0x2, 0x11da, 0x11db, 0x7, 0x6e, 0x2, 0x2, 0x11db, 0x11dc, 0x7, 0x6b, 
-       0x2, 0x2, 0x11dc, 0x11dd, 0x7, 0x70, 0x2, 0x2, 0x11dd, 0x11de, 0x7, 
-       0x67, 0x2, 0x2, 0x11de, 0x11df, 0x3, 0x2, 0x2, 0x2, 0x11df, 0x11e1, 
-       0x5, 0x2ff, 0x180, 0x2, 0x11e0, 0x11da, 0x3, 0x2, 0x2, 0x2, 0x11e0, 
-       0x11e1, 0x3, 0x2, 0x2, 0x2, 0x11e1, 0x11e2, 0x3, 0x2, 0x2, 0x2, 0x11e2, 
-       0x11e4, 0x5, 0x2eb, 0x176, 0x2, 0x11e3, 0x11e5, 0x5, 0x2ff, 0x180, 
-       0x2, 0x11e4, 0x11e3, 0x3, 0x2, 0x2, 0x2, 0x11e4, 0x11e5, 0x3, 0x2, 
-       0x2, 0x2, 0x11e5, 0x11e7, 0x3, 0x2, 0x2, 0x2, 0x11e6, 0x11e8, 0x5, 
-       0x2f5, 0x17b, 0x2, 0x11e7, 0x11e6, 0x3, 0x2, 0x2, 0x2, 0x11e7, 0x11e8, 
-       0x3, 0x2, 0x2, 0x2, 0x11e8, 0x11e9, 0x3, 0x2, 0x2, 0x2, 0x11e9, 0x11ea, 
-       0x8, 0x17f, 0x2, 0x2, 0x11ea, 0x2fe, 0x3, 0x2, 0x2, 0x2, 0x11eb, 
-       0x11ed, 0x9, 0xc, 0x2, 0x2, 0x11ec, 0x11eb, 0x3, 0x2, 0x2, 0x2, 0x11ed, 
-       0x11ee, 0x3, 0x2, 0x2, 0x2, 0x11ee, 0x11ec, 0x3, 0x2, 0x2, 0x2, 0x11ee, 
-       0x11ef, 0x3, 0x2, 0x2, 0x2, 0x11ef, 0x11f0, 0x3, 0x2, 0x2, 0x2, 0x11f0, 
-       0x11f1, 0x8, 0x180, 0x3, 0x2, 0x11f1, 0x300, 0x3, 0x2, 0x2, 0x2, 
-       0x11f2, 0x11f4, 0x7, 0xf, 0x2, 0x2, 0x11f3, 0x11f5, 0x7, 0xc, 0x2, 
-       0x2, 0x11f4, 0x11f3, 0x3, 0x2, 0x2, 0x2, 0x11f4, 0x11f5, 0x3, 0x2, 
-       0x2, 0x2, 0x11f5, 0x11f8, 0x3, 0x2, 0x2, 0x2, 0x11f6, 0x11f8, 0x7, 
-       0xc, 0x2, 0x2, 0x11f7, 0x11f2, 0x3, 0x2, 0x2, 0x2, 0x11f7, 0x11f6, 
-       0x3, 0x2, 0x2, 0x2, 0x11f8, 0x11f9, 0x3, 0x2, 0x2, 0x2, 0x11f9, 0x11fa, 
-       0x8, 0x181, 0x3, 0x2, 0x11fa, 0x302, 0x3, 0x2, 0x2, 0x2, 0x11fb, 
-       0x11fc, 0x7, 0x31, 0x2, 0x2, 0x11fc, 0x11fd, 0x7, 0x2c, 0x2, 0x2, 
-       0x11fd, 0x1201, 0x3, 0x2, 0x2, 0x2, 0x11fe, 0x1200, 0xb, 0x2, 0x2, 
-       0x2, 0x11ff, 0x11fe, 0x3, 0x2, 0x2, 0x2, 0x1200, 0x1203, 0x3, 0x2, 
-       0x2, 0x2, 0x1201, 0x1202, 0x3, 0x2, 0x2, 0x2, 0x1201, 0x11ff, 0x3, 
-       0x2, 0x2, 0x2, 0x1202, 0x1204, 0x3, 0x2, 0x2, 0x2, 0x1203, 0x1201, 
-       0x3, 0x2, 0x2, 0x2, 0x1204, 0x1205, 0x7, 0x2c, 0x2, 0x2, 0x1205, 
-       0x1206, 0x7, 0x31, 0x2, 0x2, 0x1206, 0x1207, 0x3, 0x2, 0x2, 0x2, 
-       0x1207, 0x1208, 0x8, 0x182, 0x4, 0x2, 0x1208, 0x304, 0x3, 0x2, 0x2, 
-       0x2, 0x1209, 0x120a, 0x7, 0x31, 0x2, 0x2, 0x120a, 0x120b, 0x7, 0x31, 
-       0x2, 0x2, 0x120b, 0x120f, 0x3, 0x2, 0x2, 0x2, 0x120c, 0x120e, 0xa, 
-       0xb, 0x2, 0x2, 0x120d, 0x120c, 0x3, 0x2, 0x2, 0x2, 0x120e, 0x1211, 
-       0x3, 0x2, 0x2, 0x2, 0x120f, 0x120d, 0x3, 0x2, 0x2, 0x2, 0x120f, 0x1210, 
-       0x3, 0x2, 0x2, 0x2, 0x1210, 0x1212, 0x3, 0x2, 0x2, 0x2, 0x1211, 0x120f, 
-       0x3, 0x2, 0x2, 0x2, 0x1212, 0x1213, 0x8, 0x183, 0x4, 0x2, 0x1213, 
-       0x306, 0x3, 0x2, 0x2, 0x2, 0x42, 0x2, 0x70d, 0x1052, 0x1065, 0x1077, 
-       0x1083, 0x1090, 0x109f, 0x10b4, 0x10c2, 0x10d1, 0x10e5, 0x10f4, 0x1104, 
-       0x1110, 0x1113, 0x111b, 0x111d, 0x1126, 0x1128, 0x1131, 0x1133, 0x113c, 
-       0x113e, 0x1141, 0x1146, 0x1148, 0x1152, 0x1158, 0x115d, 0x1162, 0x1169, 
-       0x116d, 0x1172, 0x1175, 0x117c, 0x1181, 0x1184, 0x1187, 0x118a, 0x118d, 
-       0x1190, 0x1192, 0x1196, 0x119a, 0x119c, 0x11a2, 0x11a5, 0x11aa, 0x11ac, 
-       0x11b5, 0x11bc, 0x11c0, 0x11c4, 0x11d1, 0x11d8, 0x11e0, 0x11e4, 0x11e7, 
-       0x11ee, 0x11f4, 0x11f7, 0x1201, 0x120f, 0x5, 0x2, 0x4, 0x2, 0x8, 
-       0x2, 0x2, 0x2, 0x3, 0x2, 
+       0x2, 0x11c6, 0x11cd, 0x5, 0x2f5, 0x17b, 0x2, 0x11c7, 0x11c9, 0x7, 
+       0x47, 0x2, 0x2, 0x11c8, 0x11ca, 0x5, 0x2f3, 0x17a, 0x2, 0x11c9, 0x11c8, 
+       0x3, 0x2, 0x2, 0x2, 0x11c9, 0x11ca, 0x3, 0x2, 0x2, 0x2, 0x11ca, 0x11cb, 
+       0x3, 0x2, 0x2, 0x2, 0x11cb, 0x11cd, 0x5, 0x2f5, 0x17b, 0x2, 0x11cc, 
+       0x11c2, 0x3, 0x2, 0x2, 0x2, 0x11cc, 0x11c7, 0x3, 0x2, 0x2, 0x2, 0x11cd, 
+       0x2f2, 0x3, 0x2, 0x2, 0x2, 0x11ce, 0x11cf, 0x9, 0x5, 0x2, 0x2, 0x11cf, 
+       0x2f4, 0x3, 0x2, 0x2, 0x2, 0x11d0, 0x11d2, 0x5, 0x2e7, 0x174, 0x2, 
+       0x11d1, 0x11d0, 0x3, 0x2, 0x2, 0x2, 0x11d2, 0x11d3, 0x3, 0x2, 0x2, 
+       0x2, 0x11d3, 0x11d1, 0x3, 0x2, 0x2, 0x2, 0x11d3, 0x11d4, 0x3, 0x2, 
+       0x2, 0x2, 0x11d4, 0x2f6, 0x3, 0x2, 0x2, 0x2, 0x11d5, 0x11d7, 0x5, 
+       0x2ed, 0x177, 0x2, 0x11d6, 0x11d5, 0x3, 0x2, 0x2, 0x2, 0x11d7, 0x11d8, 
+       0x3, 0x2, 0x2, 0x2, 0x11d8, 0x11d6, 0x3, 0x2, 0x2, 0x2, 0x11d8, 0x11d9, 
+       0x3, 0x2, 0x2, 0x2, 0x11d9, 0x2f8, 0x3, 0x2, 0x2, 0x2, 0x11da, 0x11dc, 
+       0x9, 0x6, 0x2, 0x2, 0x11db, 0x11da, 0x3, 0x2, 0x2, 0x2, 0x11db, 0x11dc, 
+       0x3, 0x2, 0x2, 0x2, 0x11dc, 0x11de, 0x3, 0x2, 0x2, 0x2, 0x11dd, 0x11df, 
+       0x9, 0x7, 0x2, 0x2, 0x11de, 0x11dd, 0x3, 0x2, 0x2, 0x2, 0x11de, 0x11df, 
+       0x3, 0x2, 0x2, 0x2, 0x11df, 0x11e1, 0x3, 0x2, 0x2, 0x2, 0x11e0, 0x11e2, 
+       0x9, 0x7, 0x2, 0x2, 0x11e1, 0x11e0, 0x3, 0x2, 0x2, 0x2, 0x11e1, 0x11e2, 
+       0x3, 0x2, 0x2, 0x2, 0x11e2, 0x11ea, 0x3, 0x2, 0x2, 0x2, 0x11e3, 0x11e5, 
+       0x9, 0x7, 0x2, 0x2, 0x11e4, 0x11e3, 0x3, 0x2, 0x2, 0x2, 0x11e4, 0x11e5, 
+       0x3, 0x2, 0x2, 0x2, 0x11e5, 0x11e7, 0x3, 0x2, 0x2, 0x2, 0x11e6, 0x11e8, 
+       0x9, 0x6, 0x2, 0x2, 0x11e7, 0x11e6, 0x3, 0x2, 0x2, 0x2, 0x11e7, 0x11e8, 
+       0x3, 0x2, 0x2, 0x2, 0x11e8, 0x11ea, 0x3, 0x2, 0x2, 0x2, 0x11e9, 0x11db, 
+       0x3, 0x2, 0x2, 0x2, 0x11e9, 0x11e4, 0x3, 0x2, 0x2, 0x2, 0x11ea, 0x2fa, 
+       0x3, 0x2, 0x2, 0x2, 0x11eb, 0x11ed, 0x5, 0x2e9, 0x175, 0x2, 0x11ec, 
+       0x11ee, 0x5, 0x2f9, 0x17d, 0x2, 0x11ed, 0x11ec, 0x3, 0x2, 0x2, 0x2, 
+       0x11ed, 0x11ee, 0x3, 0x2, 0x2, 0x2, 0x11ee, 0x11f4, 0x3, 0x2, 0x2, 
+       0x2, 0x11ef, 0x11f1, 0x5, 0x2eb, 0x176, 0x2, 0x11f0, 0x11f2, 0x5, 
+       0x2f9, 0x17d, 0x2, 0x11f1, 0x11f0, 0x3, 0x2, 0x2, 0x2, 0x11f1, 0x11f2, 
+       0x3, 0x2, 0x2, 0x2, 0x11f2, 0x11f4, 0x3, 0x2, 0x2, 0x2, 0x11f3, 0x11eb, 
+       0x3, 0x2, 0x2, 0x2, 0x11f3, 0x11ef, 0x3, 0x2, 0x2, 0x2, 0x11f4, 0x2fc, 
+       0x3, 0x2, 0x2, 0x2, 0x11f5, 0x11f6, 0x9, 0x8, 0x2, 0x2, 0x11f6, 0x2fe, 
+       0x3, 0x2, 0x2, 0x2, 0x11f7, 0x11f9, 0x5, 0x2ef, 0x178, 0x2, 0x11f8, 
+       0x11fa, 0x5, 0x2f1, 0x179, 0x2, 0x11f9, 0x11f8, 0x3, 0x2, 0x2, 0x2, 
+       0x11f9, 0x11fa, 0x3, 0x2, 0x2, 0x2, 0x11fa, 0x11fc, 0x3, 0x2, 0x2, 
+       0x2, 0x11fb, 0x11fd, 0x5, 0x2fd, 0x17f, 0x2, 0x11fc, 0x11fb, 0x3, 
+       0x2, 0x2, 0x2, 0x11fc, 0x11fd, 0x3, 0x2, 0x2, 0x2, 0x11fd, 0x1204, 
+       0x3, 0x2, 0x2, 0x2, 0x11fe, 0x11ff, 0x5, 0x2f5, 0x17b, 0x2, 0x11ff, 
+       0x1201, 0x5, 0x2f1, 0x179, 0x2, 0x1200, 0x1202, 0x5, 0x2fd, 0x17f, 
+       0x2, 0x1201, 0x1200, 0x3, 0x2, 0x2, 0x2, 0x1201, 0x1202, 0x3, 0x2, 
+       0x2, 0x2, 0x1202, 0x1204, 0x3, 0x2, 0x2, 0x2, 0x1203, 0x11f7, 0x3, 
+       0x2, 0x2, 0x2, 0x1203, 0x11fe, 0x3, 0x2, 0x2, 0x2, 0x1204, 0x300, 
+       0x3, 0x2, 0x2, 0x2, 0x1205, 0x1206, 0x5, 0x303, 0x182, 0x2, 0x1206, 
+       0x302, 0x3, 0x2, 0x2, 0x2, 0x1207, 0x1208, 0x7, 0x5e, 0x2, 0x2, 0x1208, 
+       0x1209, 0x9, 0x9, 0x2, 0x2, 0x1209, 0x304, 0x3, 0x2, 0x2, 0x2, 0x120a, 
+       0x120c, 0x7, 0x24, 0x2, 0x2, 0x120b, 0x120d, 0x5, 0x307, 0x184, 0x2, 
+       0x120c, 0x120b, 0x3, 0x2, 0x2, 0x2, 0x120c, 0x120d, 0x3, 0x2, 0x2, 
+       0x2, 0x120d, 0x120e, 0x3, 0x2, 0x2, 0x2, 0x120e, 0x120f, 0x7, 0x24, 
+       0x2, 0x2, 0x120f, 0x306, 0x3, 0x2, 0x2, 0x2, 0x1210, 0x1212, 0x5, 
+       0x309, 0x185, 0x2, 0x1211, 0x1210, 0x3, 0x2, 0x2, 0x2, 0x1212, 0x1213, 
+       0x3, 0x2, 0x2, 0x2, 0x1213, 0x1211, 0x3, 0x2, 0x2, 0x2, 0x1213, 0x1214, 
+       0x3, 0x2, 0x2, 0x2, 0x1214, 0x308, 0x3, 0x2, 0x2, 0x2, 0x1215, 0x1218, 
+       0xa, 0xa, 0x2, 0x2, 0x1216, 0x1218, 0x5, 0x301, 0x181, 0x2, 0x1217, 
+       0x1215, 0x3, 0x2, 0x2, 0x2, 0x1217, 0x1216, 0x3, 0x2, 0x2, 0x2, 0x1218, 
+       0x30a, 0x3, 0x2, 0x2, 0x2, 0x1219, 0x121b, 0x7, 0x25, 0x2, 0x2, 0x121a, 
+       0x121c, 0x5, 0x30f, 0x188, 0x2, 0x121b, 0x121a, 0x3, 0x2, 0x2, 0x2, 
+       0x121b, 0x121c, 0x3, 0x2, 0x2, 0x2, 0x121c, 0x121d, 0x3, 0x2, 0x2, 
+       0x2, 0x121d, 0x121e, 0x7, 0x72, 0x2, 0x2, 0x121e, 0x121f, 0x7, 0x74, 
+       0x2, 0x2, 0x121f, 0x1220, 0x7, 0x63, 0x2, 0x2, 0x1220, 0x1221, 0x7, 
+       0x69, 0x2, 0x2, 0x1221, 0x1222, 0x7, 0x6f, 0x2, 0x2, 0x1222, 0x1223, 
+       0x7, 0x63, 0x2, 0x2, 0x1223, 0x1224, 0x3, 0x2, 0x2, 0x2, 0x1224, 
+       0x1228, 0x5, 0x30f, 0x188, 0x2, 0x1225, 0x1227, 0xa, 0xb, 0x2, 0x2, 
+       0x1226, 0x1225, 0x3, 0x2, 0x2, 0x2, 0x1227, 0x122a, 0x3, 0x2, 0x2, 
+       0x2, 0x1228, 0x1226, 0x3, 0x2, 0x2, 0x2, 0x1228, 0x1229, 0x3, 0x2, 
+       0x2, 0x2, 0x1229, 0x122b, 0x3, 0x2, 0x2, 0x2, 0x122a, 0x1228, 0x3, 
+       0x2, 0x2, 0x2, 0x122b, 0x122c, 0x8, 0x186, 0x2, 0x2, 0x122c, 0x30c, 
+       0x3, 0x2, 0x2, 0x2, 0x122d, 0x122f, 0x7, 0x25, 0x2, 0x2, 0x122e, 
+       0x1230, 0x5, 0x30f, 0x188, 0x2, 0x122f, 0x122e, 0x3, 0x2, 0x2, 0x2, 
+       0x122f, 0x1230, 0x3, 0x2, 0x2, 0x2, 0x1230, 0x1237, 0x3, 0x2, 0x2, 
+       0x2, 0x1231, 0x1232, 0x7, 0x6e, 0x2, 0x2, 0x1232, 0x1233, 0x7, 0x6b, 
+       0x2, 0x2, 0x1233, 0x1234, 0x7, 0x70, 0x2, 0x2, 0x1234, 0x1235, 0x7, 
+       0x67, 0x2, 0x2, 0x1235, 0x1236, 0x3, 0x2, 0x2, 0x2, 0x1236, 0x1238, 
+       0x5, 0x30f, 0x188, 0x2, 0x1237, 0x1231, 0x3, 0x2, 0x2, 0x2, 0x1237, 
+       0x1238, 0x3, 0x2, 0x2, 0x2, 0x1238, 0x1239, 0x3, 0x2, 0x2, 0x2, 0x1239, 
+       0x123b, 0x5, 0x2fb, 0x17e, 0x2, 0x123a, 0x123c, 0x5, 0x30f, 0x188, 
+       0x2, 0x123b, 0x123a, 0x3, 0x2, 0x2, 0x2, 0x123b, 0x123c, 0x3, 0x2, 
+       0x2, 0x2, 0x123c, 0x123e, 0x3, 0x2, 0x2, 0x2, 0x123d, 0x123f, 0x5, 
+       0x305, 0x183, 0x2, 0x123e, 0x123d, 0x3, 0x2, 0x2, 0x2, 0x123e, 0x123f, 
+       0x3, 0x2, 0x2, 0x2, 0x123f, 0x1240, 0x3, 0x2, 0x2, 0x2, 0x1240, 0x1241, 
+       0x8, 0x187, 0x2, 0x2, 0x1241, 0x30e, 0x3, 0x2, 0x2, 0x2, 0x1242, 
+       0x1244, 0x9, 0xc, 0x2, 0x2, 0x1243, 0x1242, 0x3, 0x2, 0x2, 0x2, 0x1244, 
+       0x1245, 0x3, 0x2, 0x2, 0x2, 0x1245, 0x1243, 0x3, 0x2, 0x2, 0x2, 0x1245, 
+       0x1246, 0x3, 0x2, 0x2, 0x2, 0x1246, 0x1247, 0x3, 0x2, 0x2, 0x2, 0x1247, 
+       0x1248, 0x8, 0x188, 0x3, 0x2, 0x1248, 0x310, 0x3, 0x2, 0x2, 0x2, 
+       0x1249, 0x124b, 0x7, 0xf, 0x2, 0x2, 0x124a, 0x124c, 0x7, 0xc, 0x2, 
+       0x2, 0x124b, 0x124a, 0x3, 0x2, 0x2, 0x2, 0x124b, 0x124c, 0x3, 0x2, 
+       0x2, 0x2, 0x124c, 0x124f, 0x3, 0x2, 0x2, 0x2, 0x124d, 0x124f, 0x7, 
+       0xc, 0x2, 0x2, 0x124e, 0x1249, 0x3, 0x2, 0x2, 0x2, 0x124e, 0x124d, 
+       0x3, 0x2, 0x2, 0x2, 0x124f, 0x1250, 0x3, 0x2, 0x2, 0x2, 0x1250, 0x1251, 
+       0x8, 0x189, 0x3, 0x2, 0x1251, 0x312, 0x3, 0x2, 0x2, 0x2, 0x1252, 
+       0x1253, 0x7, 0x31, 0x2, 0x2, 0x1253, 0x1254, 0x7, 0x2c, 0x2, 0x2, 
+       0x1254, 0x1258, 0x3, 0x2, 0x2, 0x2, 0x1255, 0x1257, 0xb, 0x2, 0x2, 
+       0x2, 0x1256, 0x1255, 0x3, 0x2, 0x2, 0x2, 0x1257, 0x125a, 0x3, 0x2, 
+       0x2, 0x2, 0x1258, 0x1259, 0x3, 0x2, 0x2, 0x2, 0x1258, 0x1256, 0x3, 
+       0x2, 0x2, 0x2, 0x1259, 0x125b, 0x3, 0x2, 0x2, 0x2, 0x125a, 0x1258, 
+       0x3, 0x2, 0x2, 0x2, 0x125b, 0x125c, 0x7, 0x2c, 0x2, 0x2, 0x125c, 
+       0x125d, 0x7, 0x31, 0x2, 0x2, 0x125d, 0x125e, 0x3, 0x2, 0x2, 0x2, 
+       0x125e, 0x125f, 0x8, 0x18a, 0x4, 0x2, 0x125f, 0x314, 0x3, 0x2, 0x2, 
+       0x2, 0x1260, 0x1261, 0x7, 0x31, 0x2, 0x2, 0x1261, 0x1262, 0x7, 0x31, 
+       0x2, 0x2, 0x1262, 0x1266, 0x3, 0x2, 0x2, 0x2, 0x1263, 0x1265, 0xa, 
+       0xb, 0x2, 0x2, 0x1264, 0x1263, 0x3, 0x2, 0x2, 0x2, 0x1265, 0x1268, 
+       0x3, 0x2, 0x2, 0x2, 0x1266, 0x1264, 0x3, 0x2, 0x2, 0x2, 0x1266, 0x1267, 
+       0x3, 0x2, 0x2, 0x2, 0x1267, 0x1269, 0x3, 0x2, 0x2, 0x2, 0x1268, 0x1266, 
+       0x3, 0x2, 0x2, 0x2, 0x1269, 0x126a, 0x8, 0x18b, 0x4, 0x2, 0x126a, 
+       0x316, 0x3, 0x2, 0x2, 0x2, 0x42, 0x2, 0x735, 0x10a9, 0x10bc, 0x10ce, 
+       0x10da, 0x10e7, 0x10f6, 0x110b, 0x1119, 0x1128, 0x113c, 0x114b, 0x115b, 
+       0x1167, 0x116a, 0x1172, 0x1174, 0x117d, 0x117f, 0x1188, 0x118a, 0x1193, 
+       0x1195, 0x1198, 0x119d, 0x119f, 0x11a9, 0x11af, 0x11b4, 0x11b9, 0x11c0, 
+       0x11c4, 0x11c9, 0x11cc, 0x11d3, 0x11d8, 0x11db, 0x11de, 0x11e1, 0x11e4, 
+       0x11e7, 0x11e9, 0x11ed, 0x11f1, 0x11f3, 0x11f9, 0x11fc, 0x1201, 0x1203, 
+       0x120c, 0x1213, 0x1217, 0x121b, 0x1228, 0x122f, 0x1237, 0x123b, 0x123e, 
+       0x1245, 0x124b, 0x124e, 0x1258, 0x1266, 0x5, 0x2, 0x4, 0x2, 0x2, 
+       0x3, 0x2, 0x2, 0x5, 0x2, 
   };
   };
 
 
   _serializedATN.insert(_serializedATN.end(), serializedATNSegment0,
   _serializedATN.insert(_serializedATN.end(), serializedATNSegment0,

+ 80 - 78
src/generated/azslLexer.h

@@ -17,92 +17,94 @@ public:
     Bool2x2 = 12, Bool2x3 = 13, Bool2x4 = 14, Bool3x1 = 15, Bool3x2 = 16, 
     Bool2x2 = 12, Bool2x3 = 13, Bool2x4 = 14, Bool3x1 = 15, Bool3x2 = 16, 
     Bool3x3 = 17, Bool3x4 = 18, Bool4x1 = 19, Bool4x2 = 20, Bool4x3 = 21, 
     Bool3x3 = 17, Bool3x4 = 18, Bool4x1 = 19, Bool4x2 = 20, Bool4x3 = 21, 
     Bool4x4 = 22, Buffer = 23, BuiltInTriangleIntersectionAttributes = 24, 
     Bool4x4 = 22, Buffer = 23, BuiltInTriangleIntersectionAttributes = 24, 
-    ByteAddressBuffer = 25, Break = 26, Case = 27, CBuffer = 28, ConstantBuffer = 29, 
-    ConstantBufferCamel = 30, Centroid = 31, Class = 32, ColumnMajor = 33, 
+    ByteAddressBuffer = 25, Break = 26, Case = 27, CBuffer = 28, Centroid = 29, 
+    ConstantBuffer = 30, ConstantBufferCamel = 31, Class = 32, ColumnMajor = 33, 
     Const = 34, ConsumeStructuredBuffer = 35, Continue = 36, Default = 37, 
     Const = 34, ConsumeStructuredBuffer = 35, Continue = 36, Default = 37, 
     Discard = 38, Do = 39, Double = 40, Double1 = 41, Double2 = 42, Double3 = 43, 
     Discard = 38, Do = 39, Double = 40, Double1 = 41, Double2 = 42, Double3 = 43, 
     Double4 = 44, Double1x1 = 45, Double1x2 = 46, Double1x3 = 47, Double1x4 = 48, 
     Double4 = 44, Double1x1 = 45, Double1x2 = 46, Double1x3 = 47, Double1x4 = 48, 
     Double2x1 = 49, Double2x2 = 50, Double2x3 = 51, Double2x4 = 52, Double3x1 = 53, 
     Double2x1 = 49, Double2x2 = 50, Double2x3 = 51, Double2x4 = 52, Double3x1 = 53, 
     Double3x2 = 54, Double3x3 = 55, Double3x4 = 56, Double4x1 = 57, Double4x2 = 58, 
     Double3x2 = 54, Double3x3 = 55, Double3x4 = 56, Double4x1 = 57, Double4x2 = 58, 
-    Double4x3 = 59, Double4x4 = 60, Else = 61, Enum = 62, Extern = 63, FeedbackTexture2D = 64, 
-    FeedbackTexture2DArray = 65, Float = 66, Float1 = 67, Float2 = 68, Float3 = 69, 
-    Float4 = 70, Float1x1 = 71, Float1x2 = 72, Float1x3 = 73, Float1x4 = 74, 
-    Float2x1 = 75, Float2x2 = 76, Float2x3 = 77, Float2x4 = 78, Float3x1 = 79, 
-    Float3x2 = 80, Float3x3 = 81, Float3x4 = 82, Float4x1 = 83, Float4x2 = 84, 
-    Float4x3 = 85, Float4x4 = 86, For = 87, Groupshared = 88, Global = 89, 
-    Half = 90, Half1 = 91, Half2 = 92, Half3 = 93, Half4 = 94, Half1x1 = 95, 
-    Half1x2 = 96, Half1x3 = 97, Half1x4 = 98, Half2x1 = 99, Half2x2 = 100, 
-    Half2x3 = 101, Half2x4 = 102, Half3x1 = 103, Half3x2 = 104, Half3x3 = 105, 
-    Half3x4 = 106, Half4x1 = 107, Half4x2 = 108, Half4x3 = 109, Half4x4 = 110, 
-    If = 111, In = 112, Inline = 113, Rootconstant = 114, Inout = 115, InputPatch = 116, 
-    Int = 117, Int32_t = 118, Int64_t = 119, Int1 = 120, Int2 = 121, Int3 = 122, 
-    Int4 = 123, Int1x1 = 124, Int1x2 = 125, Int1x3 = 126, Int1x4 = 127, 
-    Int2x1 = 128, Int2x2 = 129, Int2x3 = 130, Int2x4 = 131, Int3x1 = 132, 
-    Int3x2 = 133, Int3x3 = 134, Int3x4 = 135, Int4x1 = 136, Int4x2 = 137, 
-    Int4x3 = 138, Int4x4 = 139, Interface = 140, Line_ = 141, LineAdj = 142, 
-    Linear = 143, LineStream = 144, Long = 145, Matrix = 146, Nointerpolation = 147, 
-    Noperspective = 148, Option = 149, Out = 150, OutputPatch = 151, Override = 152, 
-    Partial = 153, Packoffset = 154, Point = 155, PointStream = 156, Precise = 157, 
-    RasterizerOrderedBuffer = 158, RasterizerOrderedByteAddressBuffer = 159, 
-    RasterizerOrderedStructuredBuffer = 160, RasterizerOrderedTexture1D = 161, 
-    RasterizerOrderedTexture1DArray = 162, RasterizerOrderedTexture2D = 163, 
-    RasterizerOrderedTexture2DArray = 164, RasterizerOrderedTexture3D = 165, 
-    RayDesc = 166, RaytracingAccelerationStructure = 167, Register = 168, 
-    Return = 169, RowMajor = 170, RWBuffer = 171, RWByteAddressBuffer = 172, 
-    RWStructuredBuffer = 173, RWTexture1D = 174, RWTexture1DArray = 175, 
-    RWTexture2D = 176, RWTexture2DArray = 177, RWTexture3D = 178, Sample = 179, 
-    Sampler = 180, SamplerCapitalS = 181, SamplerComparisonState = 182, 
-    SamplerState = 183, Shared = 184, Static = 185, Struct = 186, StructuredBuffer = 187, 
-    SubpassInput = 188, SubpassInputMS = 189, Switch = 190, Texture1D = 191, 
-    Texture1DArray = 192, Texture2D = 193, Texture2DArray = 194, Texture2DMS = 195, 
-    Texture2DMSArray = 196, Texture3D = 197, TextureCube = 198, TextureCubeArray = 199, 
-    Triangle = 200, TriangleAdj = 201, TriangleStream = 202, Uniform = 203, 
-    Uint = 204, Uint32_t = 205, Uint64_t = 206, UnsignedInt = 207, Uint1 = 208, 
-    Uint2 = 209, Uint3 = 210, Uint4 = 211, Uint1x1 = 212, Uint1x2 = 213, 
-    Uint1x3 = 214, Uint1x4 = 215, Uint2x1 = 216, Uint2x2 = 217, Uint2x3 = 218, 
-    Uint2x4 = 219, Uint3x1 = 220, Uint3x2 = 221, Uint3x3 = 222, Uint3x4 = 223, 
-    Uint4x1 = 224, Uint4x2 = 225, Uint4x3 = 226, Uint4x4 = 227, Dword = 228, 
-    Dword1 = 229, Dword2 = 230, Dword3 = 231, Dword4 = 232, Dword1x1 = 233, 
-    Dword1x2 = 234, Dword1x3 = 235, Dword1x4 = 236, Dword2x1 = 237, Dword2x2 = 238, 
-    Dword2x3 = 239, Dword2x4 = 240, Dword3x1 = 241, Dword3x2 = 242, Dword3x3 = 243, 
-    Dword3x4 = 244, Dword4x1 = 245, Dword4x2 = 246, Dword4x3 = 247, Dword4x4 = 248, 
-    Vector = 249, Volatile = 250, Void = 251, While = 252, StateObjectConfig = 253, 
-    LocalRootSignature = 254, GlobalRootSignature = 255, SubobjectToExportsAssociation = 256, 
-    RaytracingShaderConfig = 257, RaytracingPipelineConfig = 258, RaytracingPipelineConfig1 = 259, 
-    TriangleHitGroup = 260, ProceduralPrimitiveHitGroup = 261, ADDRESS_U = 262, 
-    ADDRESS_V = 263, ADDRESS_W = 264, BORDER_COLOR = 265, MIN_FILTER = 266, 
-    MAG_FILTER = 267, MIP_FILTER = 268, MAX_ANISOTROPY = 269, MAX_LOD = 270, 
-    MIN_LOD = 271, MIP_LOD_BIAS = 272, COMPARISON_FUNC = 273, REDUCTION_TYPE = 274, 
-    FILTER_MODE_POINT = 275, FILTER_MODE_LINEAR = 276, REDUCTION_TYPE_FILTER = 277, 
-    REDUCTION_TYPE_COMPARISON = 278, REDUCTION_TYPE_MINIMUM = 279, REDUCTION_TYPE_MAXIMUM = 280, 
-    ADDRESS_MODE_WRAP = 281, ADDRESS_MODE_MIRROR = 282, ADDRESS_MODE_CLAMP = 283, 
-    ADDRESS_MODE_BORDER = 284, ADDRESS_MODE_MIRROR_ONCE = 285, COMPARISON_FUNCTION_NEVER = 286, 
-    COMPARISON_FUNCTION_LESS = 287, COMPARISON_FUNCTION_EQUAL = 288, COMPARISON_FUNCTION_LESS_EQUAL = 289, 
-    COMPARISON_FUNCTION_GREATER = 290, COMPARISON_FUNCTION_NOT_EQUAL = 291, 
-    COMPARISON_FUNCTION_GREATER_EQUAL = 292, COMPARISON_FUNCTION_ALWAYS = 293, 
-    BORDER_COLOR_OPAQUE_BLACK = 294, BORDER_COLOR_TRANSPARENT_BLACK = 295, 
-    BORDER_COLOR_OPAQUE_WHITE = 296, LeftParen = 297, RightParen = 298, 
-    LeftBracket = 299, RightBracket = 300, LeftBrace = 301, RightBrace = 302, 
-    LeftDoubleBracket = 303, Less = 304, LessEqual = 305, Greater = 306, 
-    GreaterEqual = 307, LeftShift = 308, RightShift = 309, Plus = 310, PlusPlus = 311, 
-    Minus = 312, MinusMinus = 313, Star = 314, Div = 315, Mod = 316, And = 317, 
-    Or = 318, AndAnd = 319, OrOr = 320, Caret = 321, Not = 322, Tilde = 323, 
-    Question = 324, Colon = 325, ColonColon = 326, Semi = 327, Comma = 328, 
-    Assign = 329, StarAssign = 330, DivAssign = 331, ModAssign = 332, PlusAssign = 333, 
-    MinusAssign = 334, LeftShiftAssign = 335, RightShiftAssign = 336, AndAssign = 337, 
-    XorAssign = 338, OrAssign = 339, Equal = 340, NotEqual = 341, Dot = 342, 
-    True = 343, False = 344, KW_AssociatedType = 345, KW_TypeAlias = 346, 
-    KW_Typedef = 347, KW_Fundamental = 348, KW_Typeof = 349, KW_ext_print_message = 350, 
-    KW_ext_print_symbol = 351, KW_ext_prtsym_fully_qualified = 352, KW_ext_prtsym_least_qualified = 353, 
-    KW_ext_prtsym_constint_value = 354, FrequencyId = 355, ShaderVariantFallback = 356, 
-    ShaderResourceGroupSemantic = 357, ShaderResourceGroup = 358, HLSLSemanticStream = 359, 
-    HLSLSemanticSystem = 360, Identifier = 361, IntegerLiteral = 362, FloatLiteral = 363, 
-    StringLiteral = 364, PragmaDirective = 365, LineDirective = 366, Whitespace = 367, 
-    Newline = 368, BlockComment = 369, LineComment = 370
+    Double4x3 = 59, Double4x4 = 60, Else = 61, Enum = 62, Export = 63, Extern = 64, 
+    FeedbackTexture2D = 65, FeedbackTexture2DArray = 66, Float = 67, Float1 = 68, 
+    Float2 = 69, Float3 = 70, Float4 = 71, Float1x1 = 72, Float1x2 = 73, 
+    Float1x3 = 74, Float1x4 = 75, Float2x1 = 76, Float2x2 = 77, Float2x3 = 78, 
+    Float2x4 = 79, Float3x1 = 80, Float3x2 = 81, Float3x3 = 82, Float3x4 = 83, 
+    Float4x1 = 84, Float4x2 = 85, Float4x3 = 86, Float4x4 = 87, For = 88, 
+    Groupshared = 89, Globallycoherent = 90, Global = 91, Half = 92, Half1 = 93, 
+    Half2 = 94, Half3 = 95, Half4 = 96, Half1x1 = 97, Half1x2 = 98, Half1x3 = 99, 
+    Half1x4 = 100, Half2x1 = 101, Half2x2 = 102, Half2x3 = 103, Half2x4 = 104, 
+    Half3x1 = 105, Half3x2 = 106, Half3x3 = 107, Half3x4 = 108, Half4x1 = 109, 
+    Half4x2 = 110, Half4x3 = 111, Half4x4 = 112, If = 113, In = 114, Inline = 115, 
+    Rootconstant = 116, Inout = 117, InputPatch = 118, Int = 119, Int16_t = 120, 
+    Int32_t = 121, Int64_t = 122, Int1 = 123, Int2 = 124, Int3 = 125, Int4 = 126, 
+    Int1x1 = 127, Int1x2 = 128, Int1x3 = 129, Int1x4 = 130, Int2x1 = 131, 
+    Int2x2 = 132, Int2x3 = 133, Int2x4 = 134, Int3x1 = 135, Int3x2 = 136, 
+    Int3x3 = 137, Int3x4 = 138, Int4x1 = 139, Int4x2 = 140, Int4x3 = 141, 
+    Int4x4 = 142, Interface = 143, Line_ = 144, LineAdj = 145, Linear = 146, 
+    LineStream = 147, Long = 148, Matrix = 149, Nointerpolation = 150, Noperspective = 151, 
+    Option = 152, Out = 153, OutputPatch = 154, Override = 155, Partial = 156, 
+    Packoffset = 157, Point = 158, PointStream = 159, Precise = 160, RasterizerOrderedBuffer = 161, 
+    RasterizerOrderedByteAddressBuffer = 162, RasterizerOrderedStructuredBuffer = 163, 
+    RasterizerOrderedTexture1D = 164, RasterizerOrderedTexture1DArray = 165, 
+    RasterizerOrderedTexture2D = 166, RasterizerOrderedTexture2DArray = 167, 
+    RasterizerOrderedTexture3D = 168, RayDesc = 169, RaytracingAccelerationStructure = 170, 
+    Register = 171, Return = 172, RowMajor = 173, RWBuffer = 174, RWByteAddressBuffer = 175, 
+    RWStructuredBuffer = 176, RWTexture1D = 177, RWTexture1DArray = 178, 
+    RWTexture2D = 179, RWTexture2DArray = 180, RWTexture3D = 181, Sample = 182, 
+    Sampler = 183, SamplerCapitalS = 184, SamplerComparisonState = 185, 
+    SamplerStateCamel = 186, SamplerState = 187, Shared = 188, SNorm = 189, 
+    Static = 190, Struct = 191, StructuredBuffer = 192, SubpassInput = 193, 
+    SubpassInputMS = 194, Switch = 195, TBuffer = 196, Texture1D = 197, 
+    Texture1DArray = 198, Texture2D = 199, Texture2DArray = 200, Texture2DMS = 201, 
+    Texture2DMSArray = 202, Texture3D = 203, TextureCube = 204, TextureCubeArray = 205, 
+    Triangle = 206, TriangleAdj = 207, TriangleStream = 208, Uniform = 209, 
+    Uint = 210, Uint1 = 211, Uint2 = 212, Uint3 = 213, Uint4 = 214, Uint1x1 = 215, 
+    Uint1x2 = 216, Uint1x3 = 217, Uint1x4 = 218, Uint2x1 = 219, Uint2x2 = 220, 
+    Uint2x3 = 221, Uint2x4 = 222, Uint3x1 = 223, Uint3x2 = 224, Uint3x3 = 225, 
+    Uint3x4 = 226, Uint4x1 = 227, Uint4x2 = 228, Uint4x3 = 229, Uint4x4 = 230, 
+    Uint16_t = 231, Uint32_t = 232, Uint64_t = 233, UNorm = 234, Unsigned = 235, 
+    Dword = 236, Dword1 = 237, Dword2 = 238, Dword3 = 239, Dword4 = 240, 
+    Dword1x1 = 241, Dword1x2 = 242, Dword1x3 = 243, Dword1x4 = 244, Dword2x1 = 245, 
+    Dword2x2 = 246, Dword2x3 = 247, Dword2x4 = 248, Dword3x1 = 249, Dword3x2 = 250, 
+    Dword3x3 = 251, Dword3x4 = 252, Dword4x1 = 253, Dword4x2 = 254, Dword4x3 = 255, 
+    Dword4x4 = 256, Vector = 257, Volatile = 258, Void = 259, While = 260, 
+    StateObjectConfig = 261, LocalRootSignature = 262, GlobalRootSignature = 263, 
+    SubobjectToExportsAssociation = 264, RaytracingShaderConfig = 265, RaytracingPipelineConfig = 266, 
+    RaytracingPipelineConfig1 = 267, TriangleHitGroup = 268, ProceduralPrimitiveHitGroup = 269, 
+    ADDRESS_U = 270, ADDRESS_V = 271, ADDRESS_W = 272, BORDER_COLOR = 273, 
+    MIN_FILTER = 274, MAG_FILTER = 275, MIP_FILTER = 276, MAX_ANISOTROPY = 277, 
+    MAX_LOD = 278, MIN_LOD = 279, MIP_LOD_BIAS = 280, COMPARISON_FUNC = 281, 
+    REDUCTION_TYPE = 282, FILTER_MODE_POINT = 283, FILTER_MODE_LINEAR = 284, 
+    REDUCTION_TYPE_FILTER = 285, REDUCTION_TYPE_COMPARISON = 286, REDUCTION_TYPE_MINIMUM = 287, 
+    REDUCTION_TYPE_MAXIMUM = 288, ADDRESS_MODE_WRAP = 289, ADDRESS_MODE_MIRROR = 290, 
+    ADDRESS_MODE_CLAMP = 291, ADDRESS_MODE_BORDER = 292, ADDRESS_MODE_MIRROR_ONCE = 293, 
+    COMPARISON_FUNCTION_NEVER = 294, COMPARISON_FUNCTION_LESS = 295, COMPARISON_FUNCTION_EQUAL = 296, 
+    COMPARISON_FUNCTION_LESS_EQUAL = 297, COMPARISON_FUNCTION_GREATER = 298, 
+    COMPARISON_FUNCTION_NOT_EQUAL = 299, COMPARISON_FUNCTION_GREATER_EQUAL = 300, 
+    COMPARISON_FUNCTION_ALWAYS = 301, BORDER_COLOR_OPAQUE_BLACK = 302, BORDER_COLOR_TRANSPARENT_BLACK = 303, 
+    BORDER_COLOR_OPAQUE_WHITE = 304, LeftParen = 305, RightParen = 306, 
+    LeftBracket = 307, RightBracket = 308, LeftBrace = 309, RightBrace = 310, 
+    LeftDoubleBracket = 311, Less = 312, LessEqual = 313, Greater = 314, 
+    GreaterEqual = 315, LeftShift = 316, RightShift = 317, Plus = 318, PlusPlus = 319, 
+    Minus = 320, MinusMinus = 321, Star = 322, Div = 323, Mod = 324, And = 325, 
+    Or = 326, AndAnd = 327, OrOr = 328, Caret = 329, Not = 330, Tilde = 331, 
+    Question = 332, Colon = 333, ColonColon = 334, Semi = 335, Comma = 336, 
+    Assign = 337, StarAssign = 338, DivAssign = 339, ModAssign = 340, PlusAssign = 341, 
+    MinusAssign = 342, LeftShiftAssign = 343, RightShiftAssign = 344, AndAssign = 345, 
+    XorAssign = 346, OrAssign = 347, Equal = 348, NotEqual = 349, Dot = 350, 
+    True = 351, False = 352, KW_AssociatedType = 353, KW_TypeAlias = 354, 
+    KW_Typedef = 355, KW_Fundamental = 356, KW_Typeof = 357, FrequencyId = 358, 
+    ShaderVariantFallback = 359, ShaderResourceGroupSemantic = 360, ShaderResourceGroup = 361, 
+    KW_ext_print_message = 362, KW_ext_print_symbol = 363, KW_ext_prtsym_fully_qualified = 364, 
+    KW_ext_prtsym_least_qualified = 365, KW_ext_prtsym_constint_value = 366, 
+    HLSLSemanticStream = 367, HLSLSemanticSystem = 368, Identifier = 369, 
+    IntegerLiteral = 370, FloatLiteral = 371, StringLiteral = 372, PragmaDirective = 373, 
+    LineDirective = 374, Whitespace = 375, Newline = 376, BlockComment = 377, 
+    LineComment = 378
   };
   };
 
 
   enum {
   enum {
-    PREPROCESSOR = 2
+    PREPROCESSOR = 2, COMMENTS = 3
   };
   };
 
 
   explicit azslLexer(antlr4::CharStream *input);
   explicit azslLexer(antlr4::CharStream *input);

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 446 - 434
src/generated/azslParser.cpp


+ 112 - 119
src/generated/azslParser.h

@@ -17,88 +17,90 @@ public:
     Bool2x2 = 12, Bool2x3 = 13, Bool2x4 = 14, Bool3x1 = 15, Bool3x2 = 16, 
     Bool2x2 = 12, Bool2x3 = 13, Bool2x4 = 14, Bool3x1 = 15, Bool3x2 = 16, 
     Bool3x3 = 17, Bool3x4 = 18, Bool4x1 = 19, Bool4x2 = 20, Bool4x3 = 21, 
     Bool3x3 = 17, Bool3x4 = 18, Bool4x1 = 19, Bool4x2 = 20, Bool4x3 = 21, 
     Bool4x4 = 22, Buffer = 23, BuiltInTriangleIntersectionAttributes = 24, 
     Bool4x4 = 22, Buffer = 23, BuiltInTriangleIntersectionAttributes = 24, 
-    ByteAddressBuffer = 25, Break = 26, Case = 27, CBuffer = 28, ConstantBuffer = 29, 
-    ConstantBufferCamel = 30, Centroid = 31, Class = 32, ColumnMajor = 33, 
+    ByteAddressBuffer = 25, Break = 26, Case = 27, CBuffer = 28, Centroid = 29, 
+    ConstantBuffer = 30, ConstantBufferCamel = 31, Class = 32, ColumnMajor = 33, 
     Const = 34, ConsumeStructuredBuffer = 35, Continue = 36, Default = 37, 
     Const = 34, ConsumeStructuredBuffer = 35, Continue = 36, Default = 37, 
     Discard = 38, Do = 39, Double = 40, Double1 = 41, Double2 = 42, Double3 = 43, 
     Discard = 38, Do = 39, Double = 40, Double1 = 41, Double2 = 42, Double3 = 43, 
     Double4 = 44, Double1x1 = 45, Double1x2 = 46, Double1x3 = 47, Double1x4 = 48, 
     Double4 = 44, Double1x1 = 45, Double1x2 = 46, Double1x3 = 47, Double1x4 = 48, 
     Double2x1 = 49, Double2x2 = 50, Double2x3 = 51, Double2x4 = 52, Double3x1 = 53, 
     Double2x1 = 49, Double2x2 = 50, Double2x3 = 51, Double2x4 = 52, Double3x1 = 53, 
     Double3x2 = 54, Double3x3 = 55, Double3x4 = 56, Double4x1 = 57, Double4x2 = 58, 
     Double3x2 = 54, Double3x3 = 55, Double3x4 = 56, Double4x1 = 57, Double4x2 = 58, 
-    Double4x3 = 59, Double4x4 = 60, Else = 61, Enum = 62, Extern = 63, FeedbackTexture2D = 64, 
-    FeedbackTexture2DArray = 65, Float = 66, Float1 = 67, Float2 = 68, Float3 = 69, 
-    Float4 = 70, Float1x1 = 71, Float1x2 = 72, Float1x3 = 73, Float1x4 = 74, 
-    Float2x1 = 75, Float2x2 = 76, Float2x3 = 77, Float2x4 = 78, Float3x1 = 79, 
-    Float3x2 = 80, Float3x3 = 81, Float3x4 = 82, Float4x1 = 83, Float4x2 = 84, 
-    Float4x3 = 85, Float4x4 = 86, For = 87, Groupshared = 88, Global = 89, 
-    Half = 90, Half1 = 91, Half2 = 92, Half3 = 93, Half4 = 94, Half1x1 = 95, 
-    Half1x2 = 96, Half1x3 = 97, Half1x4 = 98, Half2x1 = 99, Half2x2 = 100, 
-    Half2x3 = 101, Half2x4 = 102, Half3x1 = 103, Half3x2 = 104, Half3x3 = 105, 
-    Half3x4 = 106, Half4x1 = 107, Half4x2 = 108, Half4x3 = 109, Half4x4 = 110, 
-    If = 111, In = 112, Inline = 113, Rootconstant = 114, Inout = 115, InputPatch = 116, 
-    Int = 117, Int32_t = 118, Int64_t = 119, Int1 = 120, Int2 = 121, Int3 = 122, 
-    Int4 = 123, Int1x1 = 124, Int1x2 = 125, Int1x3 = 126, Int1x4 = 127, 
-    Int2x1 = 128, Int2x2 = 129, Int2x3 = 130, Int2x4 = 131, Int3x1 = 132, 
-    Int3x2 = 133, Int3x3 = 134, Int3x4 = 135, Int4x1 = 136, Int4x2 = 137, 
-    Int4x3 = 138, Int4x4 = 139, Interface = 140, Line_ = 141, LineAdj = 142, 
-    Linear = 143, LineStream = 144, Long = 145, Matrix = 146, Nointerpolation = 147, 
-    Noperspective = 148, Option = 149, Out = 150, OutputPatch = 151, Override = 152, 
-    Partial = 153, Packoffset = 154, Point = 155, PointStream = 156, Precise = 157, 
-    RasterizerOrderedBuffer = 158, RasterizerOrderedByteAddressBuffer = 159, 
-    RasterizerOrderedStructuredBuffer = 160, RasterizerOrderedTexture1D = 161, 
-    RasterizerOrderedTexture1DArray = 162, RasterizerOrderedTexture2D = 163, 
-    RasterizerOrderedTexture2DArray = 164, RasterizerOrderedTexture3D = 165, 
-    RayDesc = 166, RaytracingAccelerationStructure = 167, Register = 168, 
-    Return = 169, RowMajor = 170, RWBuffer = 171, RWByteAddressBuffer = 172, 
-    RWStructuredBuffer = 173, RWTexture1D = 174, RWTexture1DArray = 175, 
-    RWTexture2D = 176, RWTexture2DArray = 177, RWTexture3D = 178, Sample = 179, 
-    Sampler = 180, SamplerCapitalS = 181, SamplerComparisonState = 182, 
-    SamplerState = 183, Shared = 184, Static = 185, Struct = 186, StructuredBuffer = 187, 
-    SubpassInput = 188, SubpassInputMS = 189, Switch = 190, Texture1D = 191, 
-    Texture1DArray = 192, Texture2D = 193, Texture2DArray = 194, Texture2DMS = 195, 
-    Texture2DMSArray = 196, Texture3D = 197, TextureCube = 198, TextureCubeArray = 199, 
-    Triangle = 200, TriangleAdj = 201, TriangleStream = 202, Uniform = 203, 
-    Uint = 204, Uint32_t = 205, Uint64_t = 206, UnsignedInt = 207, Uint1 = 208, 
-    Uint2 = 209, Uint3 = 210, Uint4 = 211, Uint1x1 = 212, Uint1x2 = 213, 
-    Uint1x3 = 214, Uint1x4 = 215, Uint2x1 = 216, Uint2x2 = 217, Uint2x3 = 218, 
-    Uint2x4 = 219, Uint3x1 = 220, Uint3x2 = 221, Uint3x3 = 222, Uint3x4 = 223, 
-    Uint4x1 = 224, Uint4x2 = 225, Uint4x3 = 226, Uint4x4 = 227, Dword = 228, 
-    Dword1 = 229, Dword2 = 230, Dword3 = 231, Dword4 = 232, Dword1x1 = 233, 
-    Dword1x2 = 234, Dword1x3 = 235, Dword1x4 = 236, Dword2x1 = 237, Dword2x2 = 238, 
-    Dword2x3 = 239, Dword2x4 = 240, Dword3x1 = 241, Dword3x2 = 242, Dword3x3 = 243, 
-    Dword3x4 = 244, Dword4x1 = 245, Dword4x2 = 246, Dword4x3 = 247, Dword4x4 = 248, 
-    Vector = 249, Volatile = 250, Void = 251, While = 252, StateObjectConfig = 253, 
-    LocalRootSignature = 254, GlobalRootSignature = 255, SubobjectToExportsAssociation = 256, 
-    RaytracingShaderConfig = 257, RaytracingPipelineConfig = 258, RaytracingPipelineConfig1 = 259, 
-    TriangleHitGroup = 260, ProceduralPrimitiveHitGroup = 261, ADDRESS_U = 262, 
-    ADDRESS_V = 263, ADDRESS_W = 264, BORDER_COLOR = 265, MIN_FILTER = 266, 
-    MAG_FILTER = 267, MIP_FILTER = 268, MAX_ANISOTROPY = 269, MAX_LOD = 270, 
-    MIN_LOD = 271, MIP_LOD_BIAS = 272, COMPARISON_FUNC = 273, REDUCTION_TYPE = 274, 
-    FILTER_MODE_POINT = 275, FILTER_MODE_LINEAR = 276, REDUCTION_TYPE_FILTER = 277, 
-    REDUCTION_TYPE_COMPARISON = 278, REDUCTION_TYPE_MINIMUM = 279, REDUCTION_TYPE_MAXIMUM = 280, 
-    ADDRESS_MODE_WRAP = 281, ADDRESS_MODE_MIRROR = 282, ADDRESS_MODE_CLAMP = 283, 
-    ADDRESS_MODE_BORDER = 284, ADDRESS_MODE_MIRROR_ONCE = 285, COMPARISON_FUNCTION_NEVER = 286, 
-    COMPARISON_FUNCTION_LESS = 287, COMPARISON_FUNCTION_EQUAL = 288, COMPARISON_FUNCTION_LESS_EQUAL = 289, 
-    COMPARISON_FUNCTION_GREATER = 290, COMPARISON_FUNCTION_NOT_EQUAL = 291, 
-    COMPARISON_FUNCTION_GREATER_EQUAL = 292, COMPARISON_FUNCTION_ALWAYS = 293, 
-    BORDER_COLOR_OPAQUE_BLACK = 294, BORDER_COLOR_TRANSPARENT_BLACK = 295, 
-    BORDER_COLOR_OPAQUE_WHITE = 296, LeftParen = 297, RightParen = 298, 
-    LeftBracket = 299, RightBracket = 300, LeftBrace = 301, RightBrace = 302, 
-    LeftDoubleBracket = 303, Less = 304, LessEqual = 305, Greater = 306, 
-    GreaterEqual = 307, LeftShift = 308, RightShift = 309, Plus = 310, PlusPlus = 311, 
-    Minus = 312, MinusMinus = 313, Star = 314, Div = 315, Mod = 316, And = 317, 
-    Or = 318, AndAnd = 319, OrOr = 320, Caret = 321, Not = 322, Tilde = 323, 
-    Question = 324, Colon = 325, ColonColon = 326, Semi = 327, Comma = 328, 
-    Assign = 329, StarAssign = 330, DivAssign = 331, ModAssign = 332, PlusAssign = 333, 
-    MinusAssign = 334, LeftShiftAssign = 335, RightShiftAssign = 336, AndAssign = 337, 
-    XorAssign = 338, OrAssign = 339, Equal = 340, NotEqual = 341, Dot = 342, 
-    True = 343, False = 344, KW_AssociatedType = 345, KW_TypeAlias = 346, 
-    KW_Typedef = 347, KW_Fundamental = 348, KW_Typeof = 349, KW_ext_print_message = 350, 
-    KW_ext_print_symbol = 351, KW_ext_prtsym_fully_qualified = 352, KW_ext_prtsym_least_qualified = 353, 
-    KW_ext_prtsym_constint_value = 354, FrequencyId = 355, ShaderVariantFallback = 356, 
-    ShaderResourceGroupSemantic = 357, ShaderResourceGroup = 358, HLSLSemanticStream = 359, 
-    HLSLSemanticSystem = 360, Identifier = 361, IntegerLiteral = 362, FloatLiteral = 363, 
-    StringLiteral = 364, PragmaDirective = 365, LineDirective = 366, Whitespace = 367, 
-    Newline = 368, BlockComment = 369, LineComment = 370
+    Double4x3 = 59, Double4x4 = 60, Else = 61, Enum = 62, Export = 63, Extern = 64, 
+    FeedbackTexture2D = 65, FeedbackTexture2DArray = 66, Float = 67, Float1 = 68, 
+    Float2 = 69, Float3 = 70, Float4 = 71, Float1x1 = 72, Float1x2 = 73, 
+    Float1x3 = 74, Float1x4 = 75, Float2x1 = 76, Float2x2 = 77, Float2x3 = 78, 
+    Float2x4 = 79, Float3x1 = 80, Float3x2 = 81, Float3x3 = 82, Float3x4 = 83, 
+    Float4x1 = 84, Float4x2 = 85, Float4x3 = 86, Float4x4 = 87, For = 88, 
+    Groupshared = 89, Globallycoherent = 90, Global = 91, Half = 92, Half1 = 93, 
+    Half2 = 94, Half3 = 95, Half4 = 96, Half1x1 = 97, Half1x2 = 98, Half1x3 = 99, 
+    Half1x4 = 100, Half2x1 = 101, Half2x2 = 102, Half2x3 = 103, Half2x4 = 104, 
+    Half3x1 = 105, Half3x2 = 106, Half3x3 = 107, Half3x4 = 108, Half4x1 = 109, 
+    Half4x2 = 110, Half4x3 = 111, Half4x4 = 112, If = 113, In = 114, Inline = 115, 
+    Rootconstant = 116, Inout = 117, InputPatch = 118, Int = 119, Int16_t = 120, 
+    Int32_t = 121, Int64_t = 122, Int1 = 123, Int2 = 124, Int3 = 125, Int4 = 126, 
+    Int1x1 = 127, Int1x2 = 128, Int1x3 = 129, Int1x4 = 130, Int2x1 = 131, 
+    Int2x2 = 132, Int2x3 = 133, Int2x4 = 134, Int3x1 = 135, Int3x2 = 136, 
+    Int3x3 = 137, Int3x4 = 138, Int4x1 = 139, Int4x2 = 140, Int4x3 = 141, 
+    Int4x4 = 142, Interface = 143, Line_ = 144, LineAdj = 145, Linear = 146, 
+    LineStream = 147, Long = 148, Matrix = 149, Nointerpolation = 150, Noperspective = 151, 
+    Option = 152, Out = 153, OutputPatch = 154, Override = 155, Partial = 156, 
+    Packoffset = 157, Point = 158, PointStream = 159, Precise = 160, RasterizerOrderedBuffer = 161, 
+    RasterizerOrderedByteAddressBuffer = 162, RasterizerOrderedStructuredBuffer = 163, 
+    RasterizerOrderedTexture1D = 164, RasterizerOrderedTexture1DArray = 165, 
+    RasterizerOrderedTexture2D = 166, RasterizerOrderedTexture2DArray = 167, 
+    RasterizerOrderedTexture3D = 168, RayDesc = 169, RaytracingAccelerationStructure = 170, 
+    Register = 171, Return = 172, RowMajor = 173, RWBuffer = 174, RWByteAddressBuffer = 175, 
+    RWStructuredBuffer = 176, RWTexture1D = 177, RWTexture1DArray = 178, 
+    RWTexture2D = 179, RWTexture2DArray = 180, RWTexture3D = 181, Sample = 182, 
+    Sampler = 183, SamplerCapitalS = 184, SamplerComparisonState = 185, 
+    SamplerStateCamel = 186, SamplerState = 187, Shared = 188, SNorm = 189, 
+    Static = 190, Struct = 191, StructuredBuffer = 192, SubpassInput = 193, 
+    SubpassInputMS = 194, Switch = 195, TBuffer = 196, Texture1D = 197, 
+    Texture1DArray = 198, Texture2D = 199, Texture2DArray = 200, Texture2DMS = 201, 
+    Texture2DMSArray = 202, Texture3D = 203, TextureCube = 204, TextureCubeArray = 205, 
+    Triangle = 206, TriangleAdj = 207, TriangleStream = 208, Uniform = 209, 
+    Uint = 210, Uint1 = 211, Uint2 = 212, Uint3 = 213, Uint4 = 214, Uint1x1 = 215, 
+    Uint1x2 = 216, Uint1x3 = 217, Uint1x4 = 218, Uint2x1 = 219, Uint2x2 = 220, 
+    Uint2x3 = 221, Uint2x4 = 222, Uint3x1 = 223, Uint3x2 = 224, Uint3x3 = 225, 
+    Uint3x4 = 226, Uint4x1 = 227, Uint4x2 = 228, Uint4x3 = 229, Uint4x4 = 230, 
+    Uint16_t = 231, Uint32_t = 232, Uint64_t = 233, UNorm = 234, Unsigned = 235, 
+    Dword = 236, Dword1 = 237, Dword2 = 238, Dword3 = 239, Dword4 = 240, 
+    Dword1x1 = 241, Dword1x2 = 242, Dword1x3 = 243, Dword1x4 = 244, Dword2x1 = 245, 
+    Dword2x2 = 246, Dword2x3 = 247, Dword2x4 = 248, Dword3x1 = 249, Dword3x2 = 250, 
+    Dword3x3 = 251, Dword3x4 = 252, Dword4x1 = 253, Dword4x2 = 254, Dword4x3 = 255, 
+    Dword4x4 = 256, Vector = 257, Volatile = 258, Void = 259, While = 260, 
+    StateObjectConfig = 261, LocalRootSignature = 262, GlobalRootSignature = 263, 
+    SubobjectToExportsAssociation = 264, RaytracingShaderConfig = 265, RaytracingPipelineConfig = 266, 
+    RaytracingPipelineConfig1 = 267, TriangleHitGroup = 268, ProceduralPrimitiveHitGroup = 269, 
+    ADDRESS_U = 270, ADDRESS_V = 271, ADDRESS_W = 272, BORDER_COLOR = 273, 
+    MIN_FILTER = 274, MAG_FILTER = 275, MIP_FILTER = 276, MAX_ANISOTROPY = 277, 
+    MAX_LOD = 278, MIN_LOD = 279, MIP_LOD_BIAS = 280, COMPARISON_FUNC = 281, 
+    REDUCTION_TYPE = 282, FILTER_MODE_POINT = 283, FILTER_MODE_LINEAR = 284, 
+    REDUCTION_TYPE_FILTER = 285, REDUCTION_TYPE_COMPARISON = 286, REDUCTION_TYPE_MINIMUM = 287, 
+    REDUCTION_TYPE_MAXIMUM = 288, ADDRESS_MODE_WRAP = 289, ADDRESS_MODE_MIRROR = 290, 
+    ADDRESS_MODE_CLAMP = 291, ADDRESS_MODE_BORDER = 292, ADDRESS_MODE_MIRROR_ONCE = 293, 
+    COMPARISON_FUNCTION_NEVER = 294, COMPARISON_FUNCTION_LESS = 295, COMPARISON_FUNCTION_EQUAL = 296, 
+    COMPARISON_FUNCTION_LESS_EQUAL = 297, COMPARISON_FUNCTION_GREATER = 298, 
+    COMPARISON_FUNCTION_NOT_EQUAL = 299, COMPARISON_FUNCTION_GREATER_EQUAL = 300, 
+    COMPARISON_FUNCTION_ALWAYS = 301, BORDER_COLOR_OPAQUE_BLACK = 302, BORDER_COLOR_TRANSPARENT_BLACK = 303, 
+    BORDER_COLOR_OPAQUE_WHITE = 304, LeftParen = 305, RightParen = 306, 
+    LeftBracket = 307, RightBracket = 308, LeftBrace = 309, RightBrace = 310, 
+    LeftDoubleBracket = 311, Less = 312, LessEqual = 313, Greater = 314, 
+    GreaterEqual = 315, LeftShift = 316, RightShift = 317, Plus = 318, PlusPlus = 319, 
+    Minus = 320, MinusMinus = 321, Star = 322, Div = 323, Mod = 324, And = 325, 
+    Or = 326, AndAnd = 327, OrOr = 328, Caret = 329, Not = 330, Tilde = 331, 
+    Question = 332, Colon = 333, ColonColon = 334, Semi = 335, Comma = 336, 
+    Assign = 337, StarAssign = 338, DivAssign = 339, ModAssign = 340, PlusAssign = 341, 
+    MinusAssign = 342, LeftShiftAssign = 343, RightShiftAssign = 344, AndAssign = 345, 
+    XorAssign = 346, OrAssign = 347, Equal = 348, NotEqual = 349, Dot = 350, 
+    True = 351, False = 352, KW_AssociatedType = 353, KW_TypeAlias = 354, 
+    KW_Typedef = 355, KW_Fundamental = 356, KW_Typeof = 357, FrequencyId = 358, 
+    ShaderVariantFallback = 359, ShaderResourceGroupSemantic = 360, ShaderResourceGroup = 361, 
+    KW_ext_print_message = 362, KW_ext_print_symbol = 363, KW_ext_prtsym_fully_qualified = 364, 
+    KW_ext_prtsym_least_qualified = 365, KW_ext_prtsym_constint_value = 366, 
+    HLSLSemanticStream = 367, HLSLSemanticSystem = 368, Identifier = 369, 
+    IntegerLiteral = 370, FloatLiteral = 371, StringLiteral = 372, PragmaDirective = 373, 
+    LineDirective = 374, Whitespace = 375, Newline = 376, BlockComment = 377, 
+    LineComment = 378
   };
   };
 
 
   enum {
   enum {
@@ -134,23 +136,23 @@ public:
     RuleGenericVectorType = 84, RuleScalarOrVectorType = 85, RuleScalarOrVectorOrMatrixType = 86, 
     RuleGenericVectorType = 84, RuleScalarOrVectorType = 85, RuleScalarOrVectorOrMatrixType = 86, 
     RuleMatrixType = 87, RuleGenericMatrixPredefinedType = 88, RuleRegisterAllocation = 89, 
     RuleMatrixType = 87, RuleGenericMatrixPredefinedType = 88, RuleRegisterAllocation = 89, 
     RuleSamplerStateProperty = 90, RuleLiteral = 91, RuleLeadingTypeFunctionSignature = 92, 
     RuleSamplerStateProperty = 90, RuleLiteral = 91, RuleLeadingTypeFunctionSignature = 92, 
-    RuleHlslFunctionDefinition = 93, RuleHlslFunctionDeclaration = 94, RuleFunctionType = 95, 
-    RuleUserDefinedType = 96, RuleAssociatedTypeDeclaration = 97, RuleTypedefStatement = 98, 
-    RuleTypealiasStatement = 99, RuleTypeAliasingDefinitionStatement = 100, 
-    RuleTypeofExpression = 101, RuleGenericParameterList = 102, RuleGenericTypeDefinition = 103, 
-    RuleGenericConstraint = 104, RuleLanguageDefinedConstraint = 105, RuleFunctionDeclaration = 106, 
-    RuleAttributedFunctionDeclaration = 107, RuleFunctionDefinition = 108, 
-    RuleAttributedFunctionDefinition = 109, RuleCompilerExtensionStatement = 110, 
-    RuleSrgDefinition = 111, RuleAttributedSrgDefinition = 112, RuleSrgMemberDeclaration = 113, 
-    RuleSrgSemantic = 114, RuleAttributedSrgSemantic = 115, RuleSrgSemanticBodyDeclaration = 116, 
-    RuleSrgSemanticMemberDeclaration = 117, RuleSamplerBodyDeclaration = 118, 
-    RuleSamplerMemberDeclaration = 119, RuleMaxAnisotropyOption = 120, RuleMinFilterOption = 121, 
-    RuleMagFilterOption = 122, RuleMipFilterOption = 123, RuleReductionTypeOption = 124, 
-    RuleComparisonFunctionOption = 125, RuleAddressUOption = 126, RuleAddressVOption = 127, 
-    RuleAddressWOption = 128, RuleMinLodOption = 129, RuleMaxLodOption = 130, 
-    RuleMipLodBiasOption = 131, RuleBorderColorOption = 132, RuleFilterModeEnum = 133, 
-    RuleReductionTypeEnum = 134, RuleAddressModeEnum = 135, RuleComparisonFunctionEnum = 136, 
-    RuleBorderColorEnum = 137
+    RuleHlslFunctionDefinition = 93, RuleHlslFunctionDeclaration = 94, RuleUserDefinedType = 95, 
+    RuleAssociatedTypeDeclaration = 96, RuleTypedefStatement = 97, RuleTypealiasStatement = 98, 
+    RuleTypeAliasingDefinitionStatement = 99, RuleTypeofExpression = 100, 
+    RuleGenericParameterList = 101, RuleGenericTypeDefinition = 102, RuleGenericConstraint = 103, 
+    RuleLanguageDefinedConstraint = 104, RuleFunctionDeclaration = 105, 
+    RuleAttributedFunctionDeclaration = 106, RuleFunctionDefinition = 107, 
+    RuleAttributedFunctionDefinition = 108, RuleCompilerExtensionStatement = 109, 
+    RuleSrgDefinition = 110, RuleAttributedSrgDefinition = 111, RuleSrgMemberDeclaration = 112, 
+    RuleSrgSemantic = 113, RuleAttributedSrgSemantic = 114, RuleSrgSemanticBodyDeclaration = 115, 
+    RuleSrgSemanticMemberDeclaration = 116, RuleSamplerBodyDeclaration = 117, 
+    RuleSamplerMemberDeclaration = 118, RuleMaxAnisotropyOption = 119, RuleMinFilterOption = 120, 
+    RuleMagFilterOption = 121, RuleMipFilterOption = 122, RuleReductionTypeOption = 123, 
+    RuleComparisonFunctionOption = 124, RuleAddressUOption = 125, RuleAddressVOption = 126, 
+    RuleAddressWOption = 127, RuleMinLodOption = 128, RuleMaxLodOption = 129, 
+    RuleMipLodBiasOption = 130, RuleBorderColorOption = 131, RuleFilterModeEnum = 132, 
+    RuleReductionTypeEnum = 133, RuleAddressModeEnum = 134, RuleComparisonFunctionEnum = 135, 
+    RuleBorderColorEnum = 136
   };
   };
 
 
   explicit azslParser(antlr4::TokenStream *input);
   explicit azslParser(antlr4::TokenStream *input);
@@ -258,7 +260,6 @@ public:
   class LeadingTypeFunctionSignatureContext;
   class LeadingTypeFunctionSignatureContext;
   class HlslFunctionDefinitionContext;
   class HlslFunctionDefinitionContext;
   class HlslFunctionDeclarationContext;
   class HlslFunctionDeclarationContext;
-  class FunctionTypeContext;
   class UserDefinedTypeContext;
   class UserDefinedTypeContext;
   class AssociatedTypeDeclarationContext;
   class AssociatedTypeDeclarationContext;
   class TypedefStatementContext;
   class TypedefStatementContext;
@@ -758,7 +759,6 @@ public:
     antlr4::Token *Name = nullptr;
     antlr4::Token *Name = nullptr;
     FunctionParamContext(antlr4::ParserRuleContext *parent, size_t invokingState);
     FunctionParamContext(antlr4::ParserRuleContext *parent, size_t invokingState);
     virtual size_t getRuleIndex() const override;
     virtual size_t getRuleIndex() const override;
-    StorageFlagsContext *storageFlags();
     TypeContext *type();
     TypeContext *type();
     UnnamedVariableDeclaratorContext *unnamedVariableDeclarator();
     UnnamedVariableDeclaratorContext *unnamedVariableDeclarator();
     std::vector<AttributeSpecifierAnyContext *> attributeSpecifierAny();
     std::vector<AttributeSpecifierAnyContext *> attributeSpecifierAny();
@@ -1590,7 +1590,6 @@ public:
   public:
   public:
     VariableDeclarationContext(antlr4::ParserRuleContext *parent, size_t invokingState);
     VariableDeclarationContext(antlr4::ParserRuleContext *parent, size_t invokingState);
     virtual size_t getRuleIndex() const override;
     virtual size_t getRuleIndex() const override;
-    StorageFlagsContext *storageFlags();
     TypeContext *type();
     TypeContext *type();
     VariableDeclaratorsContext *variableDeclarators();
     VariableDeclaratorsContext *variableDeclarators();
     std::vector<AttributeSpecifierAnyContext *> attributeSpecifierAny();
     std::vector<AttributeSpecifierAnyContext *> attributeSpecifierAny();
@@ -1763,6 +1762,7 @@ public:
     StorageFlagContext(antlr4::ParserRuleContext *parent, size_t invokingState);
     StorageFlagContext(antlr4::ParserRuleContext *parent, size_t invokingState);
     virtual size_t getRuleIndex() const override;
     virtual size_t getRuleIndex() const override;
     antlr4::tree::TerminalNode *Const();
     antlr4::tree::TerminalNode *Const();
+    antlr4::tree::TerminalNode *Unsigned();
     antlr4::tree::TerminalNode *RowMajor();
     antlr4::tree::TerminalNode *RowMajor();
     antlr4::tree::TerminalNode *ColumnMajor();
     antlr4::tree::TerminalNode *ColumnMajor();
     antlr4::tree::TerminalNode *Extern();
     antlr4::tree::TerminalNode *Extern();
@@ -1775,6 +1775,9 @@ public:
     antlr4::tree::TerminalNode *Static();
     antlr4::tree::TerminalNode *Static();
     antlr4::tree::TerminalNode *Uniform();
     antlr4::tree::TerminalNode *Uniform();
     antlr4::tree::TerminalNode *Volatile();
     antlr4::tree::TerminalNode *Volatile();
+    antlr4::tree::TerminalNode *Globallycoherent();
+    antlr4::tree::TerminalNode *SNorm();
+    antlr4::tree::TerminalNode *UNorm();
     antlr4::tree::TerminalNode *Linear();
     antlr4::tree::TerminalNode *Linear();
     antlr4::tree::TerminalNode *Centroid();
     antlr4::tree::TerminalNode *Centroid();
     antlr4::tree::TerminalNode *Nointerpolation();
     antlr4::tree::TerminalNode *Nointerpolation();
@@ -1788,6 +1791,7 @@ public:
     antlr4::tree::TerminalNode *Triangle();
     antlr4::tree::TerminalNode *Triangle();
     antlr4::tree::TerminalNode *LineAdj();
     antlr4::tree::TerminalNode *LineAdj();
     antlr4::tree::TerminalNode *TriangleAdj();
     antlr4::tree::TerminalNode *TriangleAdj();
+    antlr4::tree::TerminalNode *Identifier();
 
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
@@ -1800,9 +1804,11 @@ public:
   public:
   public:
     TypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
     TypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
     virtual size_t getRuleIndex() const override;
     virtual size_t getRuleIndex() const override;
+    StorageFlagsContext *storageFlags();
     PredefinedTypeContext *predefinedType();
     PredefinedTypeContext *predefinedType();
     UserDefinedTypeContext *userDefinedType();
     UserDefinedTypeContext *userDefinedType();
     TypeofExpressionContext *typeofExpression();
     TypeofExpressionContext *typeofExpression();
+    antlr4::tree::TerminalNode *Void();
 
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
@@ -1976,6 +1982,7 @@ public:
     antlr4::tree::TerminalNode *Sampler();
     antlr4::tree::TerminalNode *Sampler();
     antlr4::tree::TerminalNode *SamplerCapitalS();
     antlr4::tree::TerminalNode *SamplerCapitalS();
     antlr4::tree::TerminalNode *SamplerState();
     antlr4::tree::TerminalNode *SamplerState();
+    antlr4::tree::TerminalNode *SamplerStateCamel();
     antlr4::tree::TerminalNode *SamplerComparisonState();
     antlr4::tree::TerminalNode *SamplerComparisonState();
 
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
@@ -1991,12 +1998,13 @@ public:
     virtual size_t getRuleIndex() const override;
     virtual size_t getRuleIndex() const override;
     antlr4::tree::TerminalNode *Bool();
     antlr4::tree::TerminalNode *Bool();
     antlr4::tree::TerminalNode *Int();
     antlr4::tree::TerminalNode *Int();
+    antlr4::tree::TerminalNode *Int16_t();
     antlr4::tree::TerminalNode *Int32_t();
     antlr4::tree::TerminalNode *Int32_t();
     antlr4::tree::TerminalNode *Int64_t();
     antlr4::tree::TerminalNode *Int64_t();
     antlr4::tree::TerminalNode *Uint();
     antlr4::tree::TerminalNode *Uint();
+    antlr4::tree::TerminalNode *Uint16_t();
     antlr4::tree::TerminalNode *Uint32_t();
     antlr4::tree::TerminalNode *Uint32_t();
     antlr4::tree::TerminalNode *Uint64_t();
     antlr4::tree::TerminalNode *Uint64_t();
-    antlr4::tree::TerminalNode *UnsignedInt();
     antlr4::tree::TerminalNode *Dword();
     antlr4::tree::TerminalNode *Dword();
     antlr4::tree::TerminalNode *Half();
     antlr4::tree::TerminalNode *Half();
     antlr4::tree::TerminalNode *Float();
     antlr4::tree::TerminalNode *Float();
@@ -2463,8 +2471,7 @@ public:
     antlr4::Token *Name = nullptr;
     antlr4::Token *Name = nullptr;
     LeadingTypeFunctionSignatureContext(antlr4::ParserRuleContext *parent, size_t invokingState);
     LeadingTypeFunctionSignatureContext(antlr4::ParserRuleContext *parent, size_t invokingState);
     virtual size_t getRuleIndex() const override;
     virtual size_t getRuleIndex() const override;
-    StorageFlagsContext *storageFlags();
-    FunctionTypeContext *functionType();
+    TypeContext *type();
     antlr4::tree::TerminalNode *LeftParen();
     antlr4::tree::TerminalNode *LeftParen();
     antlr4::tree::TerminalNode *RightParen();
     antlr4::tree::TerminalNode *RightParen();
     antlr4::tree::TerminalNode *Identifier();
     antlr4::tree::TerminalNode *Identifier();
@@ -2510,20 +2517,6 @@ public:
 
 
   HlslFunctionDeclarationContext* hlslFunctionDeclaration();
   HlslFunctionDeclarationContext* hlslFunctionDeclaration();
 
 
-  class  FunctionTypeContext : public antlr4::ParserRuleContext {
-  public:
-    FunctionTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
-    virtual size_t getRuleIndex() const override;
-    TypeContext *type();
-    antlr4::tree::TerminalNode *Void();
-
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-   
-  };
-
-  FunctionTypeContext* functionType();
-
   class  UserDefinedTypeContext : public antlr4::ParserRuleContext {
   class  UserDefinedTypeContext : public antlr4::ParserRuleContext {
   public:
   public:
     UserDefinedTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
     UserDefinedTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
@@ -2557,13 +2550,13 @@ public:
 
 
   class  TypedefStatementContext : public antlr4::ParserRuleContext {
   class  TypedefStatementContext : public antlr4::ParserRuleContext {
   public:
   public:
-    azslParser::FunctionTypeContext *ExistingType = nullptr;
+    azslParser::TypeContext *ExistingType = nullptr;
     antlr4::Token *NewTypeName = nullptr;
     antlr4::Token *NewTypeName = nullptr;
     TypedefStatementContext(antlr4::ParserRuleContext *parent, size_t invokingState);
     TypedefStatementContext(antlr4::ParserRuleContext *parent, size_t invokingState);
     virtual size_t getRuleIndex() const override;
     virtual size_t getRuleIndex() const override;
     antlr4::tree::TerminalNode *KW_Typedef();
     antlr4::tree::TerminalNode *KW_Typedef();
     antlr4::tree::TerminalNode *Semi();
     antlr4::tree::TerminalNode *Semi();
-    FunctionTypeContext *functionType();
+    TypeContext *type();
     antlr4::tree::TerminalNode *Identifier();
     antlr4::tree::TerminalNode *Identifier();
 
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
@@ -2576,14 +2569,14 @@ public:
   class  TypealiasStatementContext : public antlr4::ParserRuleContext {
   class  TypealiasStatementContext : public antlr4::ParserRuleContext {
   public:
   public:
     antlr4::Token *NewTypeName = nullptr;
     antlr4::Token *NewTypeName = nullptr;
-    azslParser::FunctionTypeContext *ExistingType = nullptr;
+    azslParser::TypeContext *ExistingType = nullptr;
     TypealiasStatementContext(antlr4::ParserRuleContext *parent, size_t invokingState);
     TypealiasStatementContext(antlr4::ParserRuleContext *parent, size_t invokingState);
     virtual size_t getRuleIndex() const override;
     virtual size_t getRuleIndex() const override;
     antlr4::tree::TerminalNode *KW_TypeAlias();
     antlr4::tree::TerminalNode *KW_TypeAlias();
     antlr4::tree::TerminalNode *Assign();
     antlr4::tree::TerminalNode *Assign();
     antlr4::tree::TerminalNode *Semi();
     antlr4::tree::TerminalNode *Semi();
     antlr4::tree::TerminalNode *Identifier();
     antlr4::tree::TerminalNode *Identifier();
-    FunctionTypeContext *functionType();
+    TypeContext *type();
 
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
@@ -2615,7 +2608,7 @@ public:
     antlr4::tree::TerminalNode *KW_Typeof();
     antlr4::tree::TerminalNode *KW_Typeof();
     antlr4::tree::TerminalNode *LeftParen();
     antlr4::tree::TerminalNode *LeftParen();
     antlr4::tree::TerminalNode *RightParen();
     antlr4::tree::TerminalNode *RightParen();
-    FunctionTypeContext *functionType();
+    TypeContext *type();
     ExpressionExtContext *expressionExt();
     ExpressionExtContext *expressionExt();
     antlr4::tree::TerminalNode *ColonColon();
     antlr4::tree::TerminalNode *ColonColon();
     IdExpressionContext *idExpression();
     IdExpressionContext *idExpression();

+ 0 - 3
src/generated/azslParserBaseListener.h

@@ -388,9 +388,6 @@ public:
   virtual void enterHlslFunctionDeclaration(azslParser::HlslFunctionDeclarationContext * /*ctx*/) override { }
   virtual void enterHlslFunctionDeclaration(azslParser::HlslFunctionDeclarationContext * /*ctx*/) override { }
   virtual void exitHlslFunctionDeclaration(azslParser::HlslFunctionDeclarationContext * /*ctx*/) override { }
   virtual void exitHlslFunctionDeclaration(azslParser::HlslFunctionDeclarationContext * /*ctx*/) override { }
 
 
-  virtual void enterFunctionType(azslParser::FunctionTypeContext * /*ctx*/) override { }
-  virtual void exitFunctionType(azslParser::FunctionTypeContext * /*ctx*/) override { }
-
   virtual void enterUserDefinedType(azslParser::UserDefinedTypeContext * /*ctx*/) override { }
   virtual void enterUserDefinedType(azslParser::UserDefinedTypeContext * /*ctx*/) override { }
   virtual void exitUserDefinedType(azslParser::UserDefinedTypeContext * /*ctx*/) override { }
   virtual void exitUserDefinedType(azslParser::UserDefinedTypeContext * /*ctx*/) override { }
 
 

+ 0 - 3
src/generated/azslParserListener.h

@@ -386,9 +386,6 @@ public:
   virtual void enterHlslFunctionDeclaration(azslParser::HlslFunctionDeclarationContext *ctx) = 0;
   virtual void enterHlslFunctionDeclaration(azslParser::HlslFunctionDeclarationContext *ctx) = 0;
   virtual void exitHlslFunctionDeclaration(azslParser::HlslFunctionDeclarationContext *ctx) = 0;
   virtual void exitHlslFunctionDeclaration(azslParser::HlslFunctionDeclarationContext *ctx) = 0;
 
 
-  virtual void enterFunctionType(azslParser::FunctionTypeContext *ctx) = 0;
-  virtual void exitFunctionType(azslParser::FunctionTypeContext *ctx) = 0;
-
   virtual void enterUserDefinedType(azslParser::UserDefinedTypeContext *ctx) = 0;
   virtual void enterUserDefinedType(azslParser::UserDefinedTypeContext *ctx) = 0;
   virtual void exitUserDefinedType(azslParser::UserDefinedTypeContext *ctx) = 0;
   virtual void exitUserDefinedType(azslParser::UserDefinedTypeContext *ctx) = 0;
 
 

+ 6 - 0
src/regenerate_azsl_antlr.bat

@@ -6,6 +6,12 @@ java -cp "../external/antlr-4.9.3-complete.jar" org.antlr.v4.Tool ../azslLexer.g
 java -cp "../external/antlr-4.9.3-complete.jar" org.antlr.v4.Tool ../azslParser.g4 -o java
 java -cp "../external/antlr-4.9.3-complete.jar" org.antlr.v4.Tool ../azslParser.g4 -o java
 java -cp "../external/antlr-4.9.3-complete.jar" org.antlr.v4.Tool ../azslLexer.g4 -Dlanguage=Cpp
 java -cp "../external/antlr-4.9.3-complete.jar" org.antlr.v4.Tool ../azslLexer.g4 -Dlanguage=Cpp
 java -cp "../external/antlr-4.9.3-complete.jar" org.antlr.v4.Tool ../azslParser.g4 -Dlanguage=Cpp
 java -cp "../external/antlr-4.9.3-complete.jar" org.antlr.v4.Tool ../azslParser.g4 -Dlanguage=Cpp
+@REM for some reason it's necessary to call two times, or new tokens are unrecognized
+java -cp "../external/antlr-4.9.3-complete.jar" org.antlr.v4.Tool ../azslLexer.g4 -o java
+java -cp "../external/antlr-4.9.3-complete.jar" org.antlr.v4.Tool ../azslParser.g4 -o java
+java -cp "../external/antlr-4.9.3-complete.jar" org.antlr.v4.Tool ../azslLexer.g4 -Dlanguage=Cpp
+java -cp "../external/antlr-4.9.3-complete.jar" org.antlr.v4.Tool ../azslParser.g4 -Dlanguage=Cpp
+
 cd java
 cd java
 @REM for grun
 @REM for grun
 javac -cp "../../external/antlr-4.9.3-complete.jar" azsl*.java
 javac -cp "../../external/antlr-4.9.3-complete.jar" azsl*.java

+ 1 - 1
tests/Advanced/seenat.py

@@ -27,7 +27,7 @@ def testVariables(thefile, compilerPath, silent):
         # now check global var `b`
         # now check global var `b`
         predicates.append(lambda: symbols["Symbol '/b'"]['kind'] == 'Variable')
         predicates.append(lambda: symbols["Symbol '/b'"]['kind'] == 'Variable')
         predicates.append(lambda: symbols["Symbol '/b'"]['type']['core']['name'] == '?int')
         predicates.append(lambda: symbols["Symbol '/b'"]['type']['core']['name'] == '?int')
-        predicates.append(lambda: symbols["Symbol '/b'"]['storage'] == 'Static Const')
+        predicates.append(lambda: set(symbols["Symbol '/b'"]['storage'].split()) == set(['static', 'const']))
         # it appears in 2 places:
         # it appears in 2 places:
         predicates.append(lambda: len(symbols["Symbol '/b'"]['references']) == 2)
         predicates.append(lambda: len(symbols["Symbol '/b'"]['references']) == 2)
         predicates.append(lambda: symbols["Symbol '/b'"]['references'][0]['line'] == 10)  # c = b;
         predicates.append(lambda: symbols["Symbol '/b'"]['references'][0]['line'] == 10)  # c = b;

+ 3 - 3
tests/Advanced/texture2DMS-to-texture2D-noms.txt

@@ -11,13 +11,13 @@
 "color += :: PassSrg_m_texture0ms . Load ( int3 ( texelLoc + texelLocDelta , 0 ) , int2 ( 0 , 2 ) ) ;"
 "color += :: PassSrg_m_texture0ms . Load ( int3 ( texelLoc + texelLocDelta , 0 ) , int2 ( 0 , 2 ) ) ;"
 "color -= :: PassSrg_m_texture1 . Load ( int3 ( texelLoc , 0 ) ) ;"
 "color -= :: PassSrg_m_texture1 . Load ( int3 ( texelLoc , 0 ) ) ;"
 "color += :: PassSrg_m_texture1 . Load ( int3 ( texelLoc , 1 ) ) ;"
 "color += :: PassSrg_m_texture1 . Load ( int3 ( texelLoc , 1 ) ) ;"
-"color -= :: PassSrg_m_texture2ms . Load ( int3 ( texelLoc - 2.0 * texelLocDelta , 0 ) , int2 ( 1 , 1 ) ) ;"
+"color -= :: PassSrg_m_texture2ms . Load ( int3 ( texelLoc - 2 . 0 * texelLocDelta , 0 ) , int2 ( 1 , 1 ) ) ;"
 "color += :: PassSrg_m_textureArray0ms . Load ( int4 ( int3 ( texelLoc , element ) , 0 ) ) - :: PassSrg_m_textureArray1 . Load ( int4 ( texelLoc , element , 3 ) ) ;"
 "color += :: PassSrg_m_textureArray0ms . Load ( int4 ( int3 ( texelLoc , element ) , 0 ) ) - :: PassSrg_m_textureArray1 . Load ( int4 ( texelLoc , element , 3 ) ) ;"
 "return color ;"
 "return color ;"
 "}"
 "}"
 "float2 PassSrg_GetSamplePosition ( int sampleIndex )"
 "float2 PassSrg_GetSamplePosition ( int sampleIndex )"
 "{"
 "{"
-"return float2 ( 0, 0 ) + float2 ( 0, 0 ) + float2 ( 0, 0 ) ;"
+"return float2 ( 0 , 0 ) + float2 ( 0 , 0 ) + float2 ( 0 , 0 ) ;"
 "}"
 "}"
 "void PassSrg_GetDimensions ( out uint width , out uint height , out uint elements , out uint numSamples )"
 "void PassSrg_GetDimensions ( out uint width , out uint height , out uint elements , out uint numSamples )"
 "{"
 "{"
@@ -62,7 +62,7 @@
 "color += tex0ms . Load ( int3 ( texelLoc + texelLocDelta , 0 ) , int2 ( 0 , 2 ) ) ;"
 "color += tex0ms . Load ( int3 ( texelLoc + texelLocDelta , 0 ) , int2 ( 0 , 2 ) ) ;"
 "color -= tex1 . Load ( int3 ( texelLoc , 0 ) ) ;"
 "color -= tex1 . Load ( int3 ( texelLoc , 0 ) ) ;"
 "color += tex1 . Load ( int3 ( texelLoc , 1 ) ) ;"
 "color += tex1 . Load ( int3 ( texelLoc , 1 ) ) ;"
-"color -= tex2ms . Load ( int3 ( texelLoc - 2.0 * texelLocDelta , 0 ) , int2 ( 1 , 1 ) ) ;"
+"color -= tex2ms . Load ( int3 ( texelLoc - 2 . 0 * texelLocDelta , 0 ) , int2 ( 1 , 1 ) ) ;"
 "color += texArray0ms . Load ( int4 ( int3 ( texelLoc , element ) , 0 ) ) - texArray1 . Load ( int4 ( texelLoc , element , 3 ) ) ;"
 "color += texArray0ms . Load ( int4 ( int3 ( texelLoc , element ) , 0 ) ) - texArray1 . Load ( int4 ( texelLoc , element , 3 ) ) ;"
 "return color ;"
 "return color ;"
 "}"
 "}"

+ 2 - 2
tests/Advanced/texture2DMS-to-texture2D.txt

@@ -11,7 +11,7 @@
 "color += :: PassSrg_m_texture0ms . Load ( texelLoc + texelLocDelta , sampleIndex + sampleIndex , int2 ( 0 , 2 ) ) ;"
 "color += :: PassSrg_m_texture0ms . Load ( texelLoc + texelLocDelta , sampleIndex + sampleIndex , int2 ( 0 , 2 ) ) ;"
 "color -= :: PassSrg_m_texture1 . Load ( int3 ( texelLoc , 0 ) ) ;"
 "color -= :: PassSrg_m_texture1 . Load ( int3 ( texelLoc , 0 ) ) ;"
 "color += :: PassSrg_m_texture1 . Load ( int3 ( texelLoc , 1 ) ) ;"
 "color += :: PassSrg_m_texture1 . Load ( int3 ( texelLoc , 1 ) ) ;"
-"color -= :: PassSrg_m_texture2ms . Load ( texelLoc - 2.0 * texelLocDelta , sampleIndex + 1 , int2 ( 1 , 1 ) ) ;"
+"color -= :: PassSrg_m_texture2ms . Load ( texelLoc - 2 . 0 * texelLocDelta , sampleIndex + 1 , int2 ( 1 , 1 ) ) ;"
 "color += :: PassSrg_m_textureArray0ms . Load ( int3 ( texelLoc , element ) , sampleIndex / 2 ) - :: PassSrg_m_textureArray1 . Load ( int4 ( texelLoc , element , 3 ) ) ;"
 "color += :: PassSrg_m_textureArray0ms . Load ( int3 ( texelLoc , element ) , sampleIndex / 2 ) - :: PassSrg_m_textureArray1 . Load ( int4 ( texelLoc , element , 3 ) ) ;"
 "return color ;"
 "return color ;"
 "}"
 "}"
@@ -62,7 +62,7 @@
 "color += tex0ms . Load ( texelLoc + texelLocDelta , sampleIndex + sampleIndex , int2 ( 0 , 2 ) ) ;"
 "color += tex0ms . Load ( texelLoc + texelLocDelta , sampleIndex + sampleIndex , int2 ( 0 , 2 ) ) ;"
 "color -= tex1 . Load ( int3 ( texelLoc , 0 ) ) ;"
 "color -= tex1 . Load ( int3 ( texelLoc , 0 ) ) ;"
 "color += tex1 . Load ( int3 ( texelLoc , 1 ) ) ;"
 "color += tex1 . Load ( int3 ( texelLoc , 1 ) ) ;"
-"color -= tex2ms . Load ( texelLoc - 2.0 * texelLocDelta , sampleIndex + 1 , int2 ( 1 , 1 ) ) ;"
+"color -= tex2ms . Load ( texelLoc - 2 . 0 * texelLocDelta , sampleIndex + 1 , int2 ( 1 , 1 ) ) ;"
 "color += texArray0ms . Load ( int3 ( texelLoc , element ) , sampleIndex / 2 ) - texArray1 . Load ( int4 ( texelLoc , element , 3 ) ) ;"
 "color += texArray0ms . Load ( int3 ( texelLoc , element ) , sampleIndex / 2 ) - texArray1 . Load ( int4 ( texelLoc , element , 3 ) ) ;"
 "return color ;"
 "return color ;"
 "}"
 "}"

+ 25 - 25
tests/Emission/RootSig.txt

@@ -6,31 +6,31 @@
 "CBV ( b0 , space = 3"
 "CBV ( b0 , space = 3"
 "CBV ( b0 , space = 5"
 "CBV ( b0 , space = 5"
 "UAV ( u0 , space = 0"
 "UAV ( u0 , space = 0"
-"Sampler ( s0  , space = 0, numDescriptors = 1 )"
-"Sampler ( s2  , space = 0, numDescriptors = 4 )"
-"SRV     ( t0  , space = 1, numDescriptors = 1 )"
-"SRV     ( t1  , space = 1, numDescriptors = 1 )"
-"SRV     ( t2  , space = 1, numDescriptors = 1 )"
-"SRV     ( t3  , space = 1, numDescriptors = 1 )"
-"CBV     ( b0  , space = 1, numDescriptors = 1 )"
-"SRV     ( t0  , space = 2, numDescriptors = 1 )"
-"SRV     ( t1  , space = 2, numDescriptors = 1 )"
-"SRV     ( t2  , space = 2, numDescriptors = 1 )"
-"SRV     ( t3  , space = 2, numDescriptors = 1 )"
-"UAV     ( u0  , space = 2, numDescriptors = 1 )"
-"UAV     ( u1  , space = 2, numDescriptors = 1 )"
-"UAV     ( u2  , space = 2, numDescriptors = 1 )"
-"UAV     ( u3  , space = 2, numDescriptors = 1 )"
-"UAV     ( u0  , space = 3, numDescriptors = 4 )"
-"UAV     ( u4  , space = 3, numDescriptors = 1 )"
-"UAV     ( u5  , space = 3, numDescriptors = 1 )"
-"UAV     ( u6  , space = 3, numDescriptors = 1 )"
-"UAV     ( u0  , space = 4, numDescriptors = 1 )"
-"UAV     ( u1  , space = 4, numDescriptors = 1 )"
-"SRV     ( t0  , space = 4, numDescriptors = 3 )"
-"SRV     ( t3  , space = 4, numDescriptors = 1 )"
-"UAV     ( u2  , space = 4, numDescriptors = 1 )"
-"UAV     ( u3  , space = 4, numDescriptors = 1 )"
+"Sampler ( s0  , space = 0 , numDescriptors = 1 )"
+"Sampler ( s2  , space = 0 , numDescriptors = 4 )"
+"SRV     ( t0  , space = 1 , numDescriptors = 1 )"
+"SRV     ( t1  , space = 1 , numDescriptors = 1 )"
+"SRV     ( t2  , space = 1 , numDescriptors = 1 )"
+"SRV     ( t3  , space = 1 , numDescriptors = 1 )"
+"CBV     ( b0  , space = 1 , numDescriptors = 1 )"
+"SRV     ( t0  , space = 2 , numDescriptors = 1 )"
+"SRV     ( t1  , space = 2 , numDescriptors = 1 )"
+"SRV     ( t2  , space = 2 , numDescriptors = 1 )"
+"SRV     ( t3  , space = 2 , numDescriptors = 1 )"
+"UAV     ( u0  , space = 2 , numDescriptors = 1 )"
+"UAV     ( u1  , space = 2 , numDescriptors = 1 )"
+"UAV     ( u2  , space = 2 , numDescriptors = 1 )"
+"UAV     ( u3  , space = 2 , numDescriptors = 1 )"
+"UAV     ( u0  , space = 3 , numDescriptors = 4 )"
+"UAV     ( u4  , space = 3 , numDescriptors = 1 )"
+"UAV     ( u5  , space = 3 , numDescriptors = 1 )"
+"UAV     ( u6  , space = 3 , numDescriptors = 1 )"
+"UAV     ( u0  , space = 4 , numDescriptors = 1 )"
+"UAV     ( u1  , space = 4 , numDescriptors = 1 )"
+"SRV     ( t0  , space = 4 , numDescriptors = 3 )"
+"SRV     ( t3  , space = 4 , numDescriptors = 1 )"
+"UAV     ( u2  , space = 4 , numDescriptors = 1 )"
+"UAV     ( u3  , space = 4 , numDescriptors = 1 )"
 "StaticSampler ( s1 , space = 0 "
 "StaticSampler ( s1 , space = 0 "
 "StaticSampler ( s6 , space = 0 "
 "StaticSampler ( s6 , space = 0 "
 
 

+ 25 - 25
tests/Emission/RootSigUnique.txt

@@ -6,31 +6,31 @@
 "CBV ( b7 , space = 3"
 "CBV ( b7 , space = 3"
 "CBV ( b0 , space = 5"
 "CBV ( b0 , space = 5"
 "UAV ( u0 , space = 0"
 "UAV ( u0 , space = 0"
-"Sampler ( s1  , space = 0, numDescriptors = 1 )"
-"Sampler ( s3  , space = 0, numDescriptors = 4 )" 
-"SRV     ( t0  , space = 1, numDescriptors = 1 )"
-"SRV     ( t1 , space = 1, numDescriptors = 1 )"
-"SRV     ( t2 , space = 1, numDescriptors = 1 )"
-"SRV     ( t3 , space = 1, numDescriptors = 1 )"
-"CBV     ( b4 , space = 1, numDescriptors = 1 )"
-"SRV     ( t0 , space = 2, numDescriptors = 1 )"
-"SRV     ( t1 , space = 2, numDescriptors = 1 )"
-"SRV     ( t2 , space = 2, numDescriptors = 1 )"
-"SRV     ( t3 , space = 2, numDescriptors = 1 )"
-"UAV     ( u4 , space = 2, numDescriptors = 1 )"
-"UAV     ( u5 , space = 2, numDescriptors = 1 )"
-"UAV     ( u6 , space = 2, numDescriptors = 1 )"
-"UAV     ( u7 , space = 2, numDescriptors = 1 )"
-"UAV     ( u0 , space = 3, numDescriptors = 4 )"
-"UAV     ( u4 , space = 3, numDescriptors = 1 )"
-"UAV     ( u5 , space = 3, numDescriptors = 1 )"
-"UAV     ( u6 , space = 3, numDescriptors = 1 )"
-"UAV     ( u0 , space = 4, numDescriptors = 1 )"
-"UAV     ( u1 , space = 4, numDescriptors = 1 )"
-"SRV     ( t2 , space = 4, numDescriptors = 3 )"
-"SRV     ( t5 , space = 4, numDescriptors = 1 )"
-"UAV     ( u6 , space = 4, numDescriptors = 1 )"
-"UAV     ( u7 , space = 4, numDescriptors = 1 )"
+"Sampler ( s1  , space = 0 , numDescriptors = 1 )"
+"Sampler ( s3  , space = 0 , numDescriptors = 4 )"
+"SRV     ( t0  , space = 1 , numDescriptors = 1 )"
+"SRV     ( t1 , space = 1 , numDescriptors = 1 )"
+"SRV     ( t2 , space = 1 , numDescriptors = 1 )"
+"SRV     ( t3 , space = 1 , numDescriptors = 1 )"
+"CBV     ( b4 , space = 1 , numDescriptors = 1 )"
+"SRV     ( t0 , space = 2 , numDescriptors = 1 )"
+"SRV     ( t1 , space = 2 , numDescriptors = 1 )"
+"SRV     ( t2 , space = 2 , numDescriptors = 1 )"
+"SRV     ( t3 , space = 2 , numDescriptors = 1 )"
+"UAV     ( u4 , space = 2 , numDescriptors = 1 )"
+"UAV     ( u5 , space = 2 , numDescriptors = 1 )"
+"UAV     ( u6 , space = 2 , numDescriptors = 1 )"
+"UAV     ( u7 , space = 2 , numDescriptors = 1 )"
+"UAV     ( u0 , space = 3 , numDescriptors = 4 )"
+"UAV     ( u4 , space = 3 , numDescriptors = 1 )"
+"UAV     ( u5 , space = 3 , numDescriptors = 1 )"
+"UAV     ( u6 , space = 3 , numDescriptors = 1 )"
+"UAV     ( u0 , space = 4 , numDescriptors = 1 )"
+"UAV     ( u1 , space = 4 , numDescriptors = 1 )"
+"SRV     ( t2 , space = 4 , numDescriptors = 3 )"
+"SRV     ( t5 , space = 4 , numDescriptors = 1 )"
+"UAV     ( u6 , space = 4 , numDescriptors = 1 )"
+"UAV     ( u7 , space = 4 , numDescriptors = 1 )"
 "StaticSampler ( s2 , space = 0 "
 "StaticSampler ( s2 , space = 0 "
 "StaticSampler ( s7 , space = 0 "
 "StaticSampler ( s7 , space = 0 "
 
 

+ 2 - 2
tests/Emission/attribute-specifiers-azsl.txt

@@ -6,7 +6,7 @@
 "define PLATFORM   DX12 "
 "define PLATFORM   DX12 "
 "sometag"
 "sometag"
 "struct SRG_SRGConstantsStruct"
 "struct SRG_SRGConstantsStruct"
-"range ( 0, 10 ) "
+"range ( 0 , 10 ) "
 "static const int a = a_OPTION_DEF ;"
 "static const int a = a_OPTION_DEF ;"
-"range ( 0, 10 ) "
+"range ( 0 , 10 ) "
 "static const int a = GetShaderVariantKey_a ( ) ; "
 "static const int a = GetShaderVariantKey_a ( ) ; "

+ 1 - 1
tests/Emission/complete-cs.txt

@@ -1,5 +1,5 @@
 "groupshared uint gs_GpShared [ 1024 ] "
 "groupshared uint gs_GpShared [ 1024 ] "
-" [ numthreads ( 1, 1, 1 ) ] "
+" [ numthreads ( 1 , 1 , 1 ) ] "
 " InterlockedAdd ( gs_GpShared [ thread_id . x ] , 1 ) "
 " InterlockedAdd ( gs_GpShared [ thread_id . x ] , 1 ) "
 " InterlockedAdd ( gs_GpShared [ thread_id . x ] , 1 , origVal ) "
 " InterlockedAdd ( gs_GpShared [ thread_id . x ] , 1 , origVal ) "
 " InterlockedOr ( gs_GpShared [ thread_id . x ] , 1 ) "
 " InterlockedOr ( gs_GpShared [ thread_id . x ] , 1 ) "

+ 3 - 3
tests/Emission/default-argumentvalue-complex.txt

@@ -1,14 +1,14 @@
 "void f ( float , int ) ;"
 "void f ( float , int ) ;"
 "void f ( float , int )"
 "void f ( float , int )"
-"void g ( float = 3. f , int ) ;"
+"void g ( float = 3 . f , int ) ;"
 "void g ( float , int )"
 "void g ( float , int )"
 "void h ( float , int = 2 ) ; "
 "void h ( float , int = 2 ) ; "
 "void h ( float , int ) "
 "void h ( float , int ) "
-"void i ( float = ( h ( 0 , 0 ) , 0.2 f ) , int = 2 ) ;"
+"void i ( float = ( h ( 0 , 0 ) , 0 . 2 f ) , int = 2 ) ;"
 "void i ( float , int )"
 "void i ( float , int )"
 "void j ( float , int = 4 ) ;"
 "void j ( float , int = 4 ) ;"
 "void j ( float , int )"
 "void j ( float , int )"
 "void k ( float , int i = 5 )"
 "void k ( float , int i = 5 )"
 "void l ( float , int = 6 ) ;"
 "void l ( float , int = 6 ) ;"
-"void m ( float = 0.3 f , int = 6 ) ;"
+"void m ( float = 0 . 3 f , int = 6 ) ;"
 "void m ( float f , int i )"
 "void m ( float f , int i )"

+ 6 - 0
tests/Emission/func-qualifiers.azsl

@@ -0,0 +1,6 @@
+inline volatile payload static unorm const unsigned int t();
+
+center centroid unorm const unsigned int t()
+{
+    return 0;
+}

+ 2 - 0
tests/Emission/func-qualifiers.txt

@@ -0,0 +1,2 @@
+"static inline const volatile unsigned center centroid unorm payload int t ( ) ;"
+"const volatile unsigned center centroid unorm payload int t ( )"

+ 1 - 1
tests/Emission/gmem.txt

@@ -8,7 +8,7 @@
 "# define SubpassInput SubpassInputStub"
 "# define SubpassInput SubpassInputStub"
 "# ifdef AZ_USE_SUBPASSINPUT"
 "# ifdef AZ_USE_SUBPASSINPUT"
 "[[ vk :: input_attachment_index ( 0 ) ]]"
 "[[ vk :: input_attachment_index ( 0 ) ]]"
-"[[ vk :: binding ( 0, 0 ) ]]"
+"[[ vk :: binding ( 0 , 0 ) ]]"
 "# else"
 "# else"
 "SubpassInput SRG_m_sub ;"
 "SubpassInput SRG_m_sub ;"
 "MainPS"
 "MainPS"

+ 196 - 0
tests/Emission/mesh-shader-microsoft-sample.azsl

@@ -0,0 +1,196 @@
+//*********************************************************
+//
+// Copyright (c) Microsoft. All rights reserved.
+// This code is licensed under the MIT License (MIT).
+// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
+// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
+// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
+// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
+//
+//*********************************************************
+
+struct Instance
+{
+    float4x4 World;
+    float4x4 WorldInvTrans;
+    float Scale;
+    uint Flags;
+};
+
+struct Constants
+{
+    float4x4 View;
+    float4x4 ViewProj;
+    float4 Planes[6];
+
+    float3 ViewPosition;
+    uint HighlightedIndex;
+
+    float3 CullViewPosition;
+    uint SelectedIndex;
+
+    uint DrawMeshlets;
+};
+
+struct MeshInfo
+{
+    uint IndexSize;
+    uint MeshletCount;
+
+    uint LastMeshletVertCount;
+    uint LastMeshletPrimCount;
+};
+
+struct Meshlet
+{
+    uint VertCount;
+    uint VertOffset;
+    uint PrimCount;
+    uint PrimOffset;
+};
+
+struct CullData
+{
+    float4 BoundingSphere;
+    uint NormalCone;
+    float ApexOffset;
+};
+
+bool IsConeDegenerate(CullData c)
+{
+    return (c.NormalCone >> 24) == 0xff;
+}
+
+float4 UnpackCone(uint packed)
+{
+    float4 v;
+    v.x = float((packed >> 0) & 0xFF);
+    v.y = float((packed >> 8) & 0xFF);
+    v.z = float((packed >> 16) & 0xFF);
+    v.w = float((packed >> 24) & 0xFF);
+
+    v = v / 255.0;
+    v.xyz = v.xyz * 2.0 - 1.0;
+
+    return v;
+}
+
+struct Vertex
+{
+    float3 Position;
+    float3 Normal;
+};
+
+struct VertexOut
+{
+    float4 PositionHS : SV_Position;
+    float3 PositionVS : POSITION0;
+    float3 Normal : NORMAL0;
+    uint MeshletIndex : COLOR0;
+};
+
+struct Payload
+{
+    uint MeshletIndices[ 32 ];
+};
+
+ShaderResourceGroupSemantic slot1
+{
+    FrequencyId = 1;
+};
+
+ShaderResourceGroup u_ : slot1
+{
+	ConstantBuffer<Constants> GConstants;
+	ConstantBuffer<MeshInfo> GMeshInfo;
+	ConstantBuffer<Instance> GInstance;
+	StructuredBuffer<Vertex> Vertices;
+	StructuredBuffer<Meshlet> Meshlets; 
+	ByteAddressBuffer UniqueVertexIndices;
+	StructuredBuffer<uint> PrimitiveIndices;
+	StructuredBuffer<CullData> MeshletCullData;
+}
+
+float3 RotateVector(float3 v0, float3 axis, float angle)
+{
+    float cs = cos(angle);
+    return cs * v0 + sin(angle) * cross(axis, v0) + (1 - cs) * dot(axis, v0) * axis;
+}
+
+uint3 UnpackPrimitive(uint primitive) { return uint3(primitive & 0x3FF, (primitive >> 10) & 0x3FF, (primitive >> 20) & 0x3FF); }
+
+
+uint GetVertexIndex(Meshlet m, uint localIndex)
+{
+    localIndex = m.VertOffset + localIndex;
+
+    if (u_::GMeshInfo.IndexSize == 4)
+    {
+        return u_::UniqueVertexIndices.Load(localIndex * 4);
+    }
+    else
+    {
+
+        uint wordOffset = (localIndex & 0x1);
+        uint byteOffset = (localIndex / 2) * 4;
+
+
+        uint indexPair = u_::UniqueVertexIndices.Load(byteOffset);
+        uint index = (indexPair >> (wordOffset * 16)) & 0xffff;
+
+        return index;
+    }
+}
+
+uint3 GetPrimitive(Meshlet m, uint index)
+{
+    return UnpackPrimitive(u_::PrimitiveIndices[m.PrimOffset + index]);
+}
+
+VertexOut GetVertexAttributes(uint meshletIndex, uint vertexIndex)
+{
+    Vertex v = u_::Vertices[vertexIndex];
+
+    float4 positionWS = mul(float4(v.Position, 1), u_::GInstance.World);
+
+    VertexOut vout;
+    vout.PositionVS = mul(positionWS, u_::GConstants.View).xyz;
+    vout.PositionHS = mul(positionWS, u_::GConstants.ViewProj);
+    vout.Normal = mul(float4(v.Normal, 0), u_::GInstance.WorldInvTrans).xyz;
+    vout.MeshletIndex = meshletIndex;
+
+    return vout;
+}
+
+
+[RootSignature( "CBV(b0), CBV(b1), CBV(b2), SRV(t0), SRV(t1), SRV(t2), SRV(t3), SRV(t4)" )]
+[NumThreads(128, 1, 1)]
+[OutputTopology("triangle")]
+void main(
+    uint dtid : SV_DispatchThreadID,
+    uint gtid : SV_GroupThreadID,
+    uint gid : SV_GroupID,
+    in payload Payload a_payload,
+    out vertices VertexOut verts[64],
+    out indices uint3 tris[126]
+)
+{
+    uint meshletIndex = a_payload.MeshletIndices[gid];
+
+    if (meshletIndex >= u_::GMeshInfo.MeshletCount)
+        return;
+
+    Meshlet m = u_::Meshlets[meshletIndex];
+    SetMeshOutputCounts(m.VertCount, m.PrimCount);
+
+    if (gtid < m.VertCount)
+    {
+        uint vertexIndex = GetVertexIndex(m, gtid);
+        verts[gtid] = GetVertexAttributes(meshletIndex, vertexIndex);
+    }
+
+    if (gtid < m.PrimCount)
+    {
+        tris[gtid] = GetPrimitive(m, gtid);
+    }
+}

+ 13 - 0
tests/Emission/mesh-shader-microsoft-sample.txt

@@ -0,0 +1,13 @@
+"struct Instance"
+"float4x4 World ;"
+"struct Constants"
+"float4 Planes [ 6 ] ;"
+"struct MeshInfo"
+"struct Meshlet"
+"bool IsConeDegenerate ( :: CullData c )"
+"StructuredBuffer < Vertex > u__Vertices : register ( t0 , space0 ) ;"
+"StructuredBuffer < Meshlet > u__Meshlets : register ( t1 , space0 ) ;"
+"ConstantBuffer < :: MeshInfo > u__GMeshInfo : register ( b1 , space0 ) ;"
+"[ NumThreads ( 128 , 1 , 1 ) ]"
+"[ OutputTopology ( " triangle " ) ]"
+" void main ( uint dtid : SV_DispatchThreadID , uint gtid : SV_GroupThreadID , uint gid : SV_GroupID , in payload :: Payload a_payload , out vertices :: VertexOut verts [ 64 ] , out indices uint3 tris [ 126 ] )"

+ 1 - 0
tests/Emission/output-attribute.azsl

@@ -0,0 +1 @@
+[[global::output_format(0, "R32")]]

+ 1 - 0
tests/Emission/output-attribute.txt

@@ -0,0 +1 @@
+" # pragma OutputFormatHint ( target 0 R32 ) "

+ 2 - 2
tests/Emission/overloads.txt

@@ -2,6 +2,6 @@
 "float MySRG_Luminosity ( float )"
 "float MySRG_Luminosity ( float )"
 "void MySRG_DoStuff ( )"
 "void MySRG_DoStuff ( )"
 # here is the important part, we can see that the unresolved call is translated anyway.
 # here is the important part, we can see that the unresolved call is translated anyway.
-"half x = :: MySRG_Luminosity ( 0.5 h ) ;"
+"half x = :: MySRG_Luminosity ( 0 . 5 h ) ;"
 "void MySRG2_DoStuff ( )"
 "void MySRG2_DoStuff ( )"
-"half x = :: MySRG_Luminosity ( 0.5 ) ;"
+"half x = :: MySRG_Luminosity ( 0 . 5 ) ;"

+ 1 - 0
tests/Emission/qualified-typealias.azsl

@@ -0,0 +1 @@
+typealias CUD = const unsigned dword;

+ 1 - 0
tests/Emission/qualified-typealias.txt

@@ -0,0 +1 @@
+" typedef const unsigned dword CUD ; "

+ 7 - 7
tests/Emission/ray-tracing-hello-world.azsl

@@ -95,11 +95,11 @@ void MyRaygenShader()
         // TMin should be kept small to prevent missing geometry at close contact areas.
         // TMin should be kept small to prevent missing geometry at close contact areas.
         ray.TMin = 0.001;
         ray.TMin = 0.001;
         ray.TMax = 10000.0;
         ray.TMax = 10000.0;
-        RayPayload payload = { float4(0, 0, 0, 0) };
-        TraceRay(RaySRG::Scene, RAY_FLAG_CULL_BACK_FACING_TRIANGLES, ~0, 0, 1, 0, ray, payload);
+        RayPayload Payload = { float4(0, 0, 0, 0) };
+        TraceRay(RaySRG::Scene, RAY_FLAG_CULL_BACK_FACING_TRIANGLES, ~0, 0, 1, 0, ray, Payload);
 
 
         // Write the raytraced color to the output texture.
         // Write the raytraced color to the output texture.
-        RaySRG::RenderTarget[DispatchRaysIndex().xy] = payload.color;
+        RaySRG::RenderTarget[DispatchRaysIndex().xy] = Payload.color;
     }
     }
     else
     else
     {
     {
@@ -109,14 +109,14 @@ void MyRaygenShader()
 }
 }
 
 
 [shader("closesthit")]
 [shader("closesthit")]
-void MyClosestHitShader(inout RayPayload payload, in MyAttributes attr)
+void MyClosestHitShader(inout RayPayload a_payload, in MyAttributes attr)
 {
 {
     float3 barycentrics = float3(1 - attr.barycentrics.x - attr.barycentrics.y, attr.barycentrics.x, attr.barycentrics.y);
     float3 barycentrics = float3(1 - attr.barycentrics.x - attr.barycentrics.y, attr.barycentrics.x, attr.barycentrics.y);
-    payload.color = float4(barycentrics, 1);
+    a_payload.color = float4(barycentrics, 1);
 }
 }
 
 
 [shader("miss")]
 [shader("miss")]
-void MyMissShader(inout RayPayload payload)
+void MyMissShader(inout RayPayload a_payload)
 {
 {
-    payload.color = float4(0, 0, 0, 1);
+    a_payload.color = float4(0, 0, 0, 1);
 }
 }

+ 2 - 1
tests/Emission/ray-tracing-hello-world.txt

@@ -1,4 +1,5 @@
 "RaytracingAccelerationStructure RaySRG_Scene : register ( t0 , space0 ) ;"
 "RaytracingAccelerationStructure RaySRG_Scene : register ( t0 , space0 ) ;"
 "RWTexture2D < float4 > RaySRG_RenderTarget : register ( u0 , space0 ) ;"
 "RWTexture2D < float4 > RaySRG_RenderTarget : register ( u0 , space0 ) ;"
 "ConstantBuffer < :: RayGenConstantBuffer > RaySRG_g_rayGenCB : register ( b0 , space0 ) ;"
 "ConstantBuffer < :: RayGenConstantBuffer > RaySRG_g_rayGenCB : register ( b0 , space0 ) ;"
-
+"[ shader ( " miss " ) ]"
+"void MyMissShader ( inout :: RayPayload a_payload )"

+ 26 - 30
tests/Emission/ray-tracing-procedural-geometry.azsl

@@ -180,31 +180,27 @@ bool IsInRange(in float val, in float min, in float max)
     return (val >= min && val <= max);
     return (val >= min && val <= max);
 }
 }
 
 
-
-// TODO Support the static keyword
-// Can functions *not* be inlined?
-// static 
-uint3 Load3x16BitIndices(uint offsetBytes, ByteAddressBuffer Indices)
+static uint3 Load3x16BitIndices(uint offsetBytes, ByteAddressBuffer Indices)
 {
 {
-    uint3 indices;
+    uint3 indices_;
     const uint dwordAlignedOffset = offsetBytes & ~3;
     const uint dwordAlignedOffset = offsetBytes & ~3;
     const uint2 four16BitIndices = Indices.Load2(dwordAlignedOffset);
     const uint2 four16BitIndices = Indices.Load2(dwordAlignedOffset);
 
 
 
 
     if (dwordAlignedOffset == offsetBytes)
     if (dwordAlignedOffset == offsetBytes)
     {
     {
-        indices.x = four16BitIndices.x & 0xffff;
-        indices.y = (four16BitIndices.x >> 16) & 0xffff;
-        indices.z = four16BitIndices.y & 0xffff;
+        indices_.x = four16BitIndices.x & 0xffff;
+        indices_.y = (four16BitIndices.x >> 16) & 0xffff;
+        indices_.z = four16BitIndices.y & 0xffff;
     }
     }
     else
     else
     {
     {
-        indices.x = (four16BitIndices.x >> 16) & 0xffff;
-        indices.y = four16BitIndices.y & 0xffff;
-        indices.z = (four16BitIndices.y >> 16) & 0xffff;
+        indices_.x = (four16BitIndices.x >> 16) & 0xffff;
+        indices_.y = four16BitIndices.y & 0xffff;
+        indices_.z = (four16BitIndices.y >> 16) & 0xffff;
     }
     }
 
 
-    return indices;
+    return indices_;
 }
 }
 
 
 
 
@@ -323,17 +319,17 @@ bool SolveQuadraticEqn(float a, float b, float c, out float x0, out float x1)
 }
 }
 
 
 
 
-float3 CalculateNormalForARaySphereHit(in Ray ray, in float thit, float3 center)
+float3 CalculateNormalForARaySphereHit(in Ray ray, in float thit, float3 a_center)
 {
 {
     float3 hitPosition = ray.origin + thit * ray.direction;
     float3 hitPosition = ray.origin + thit * ray.direction;
-    return normalize(hitPosition - center);
+    return normalize(hitPosition - a_center);
 }
 }
 
 
 
 
 
 
-bool SolveRaySphereIntersectionEquation(in Ray ray, out float tmin, out float tmax, in float3 center, in float radius)
+bool SolveRaySphereIntersectionEquation(in Ray ray, out float tmin, out float tmax, in float3 a_center, in float radius)
 {
 {
-    float3 L = ray.origin - center;
+    float3 L = ray.origin - a_center;
     float a = dot(ray.direction, ray.direction);
     float a = dot(ray.direction, ray.direction);
     float b = 2 * dot(ray.direction, L);
     float b = 2 * dot(ray.direction, L);
     float c = dot(L, L) - radius * radius;
     float c = dot(L, L) - radius * radius;
@@ -341,11 +337,11 @@ bool SolveRaySphereIntersectionEquation(in Ray ray, out float tmin, out float tm
 }
 }
 
 
 
 
-bool RaySphereIntersectionTest(in Ray ray, out float thit, out float tmax, in ProceduralPrimitiveAttributes attr, in float3 center = float3(0, 0, 0), in float radius = 1)
+bool RaySphereIntersectionTest(in Ray ray, out float thit, out float tmax, in ProceduralPrimitiveAttributes attr, in float3 a_center = float3(0, 0, 0), in float radius = 1)
 {
 {
     float t0, t1;
     float t0, t1;
 
 
-    if (!SolveRaySphereIntersectionEquation(ray, t0, t1, center, radius)) return false;
+    if (!SolveRaySphereIntersectionEquation(ray, t0, t1, a_center, radius)) return false;
     tmax = t1;
     tmax = t1;
 
 
     if (t0 < RayTMin())
     if (t0 < RayTMin())
@@ -353,7 +349,7 @@ bool RaySphereIntersectionTest(in Ray ray, out float thit, out float tmax, in Pr
 
 
         if (t1 < RayTMin()) return false;
         if (t1 < RayTMin()) return false;
 
 
-        attr.normal = CalculateNormalForARaySphereHit(ray, t1, center);
+        attr.normal = CalculateNormalForARaySphereHit(ray, t1, a_center);
         if (IsAValidHit(ray, t1, attr.normal))
         if (IsAValidHit(ray, t1, attr.normal))
         {
         {
             thit = t1;
             thit = t1;
@@ -362,14 +358,14 @@ bool RaySphereIntersectionTest(in Ray ray, out float thit, out float tmax, in Pr
     }
     }
     else
     else
     {
     {
-        attr.normal = CalculateNormalForARaySphereHit(ray, t0, center);
+        attr.normal = CalculateNormalForARaySphereHit(ray, t0, a_center);
         if (IsAValidHit(ray, t0, attr.normal))
         if (IsAValidHit(ray, t0, attr.normal))
         {
         {
             thit = t0;
             thit = t0;
             return true;
             return true;
         }
         }
 
 
-        attr.normal = CalculateNormalForARaySphereHit(ray, t1, center);
+        attr.normal = CalculateNormalForARaySphereHit(ray, t1, a_center);
         if (IsAValidHit(ray, t1, attr.normal))
         if (IsAValidHit(ray, t1, attr.normal))
         {
         {
             thit = t1;
             thit = t1;
@@ -381,11 +377,11 @@ bool RaySphereIntersectionTest(in Ray ray, out float thit, out float tmax, in Pr
 
 
 
 
 
 
-bool RaySolidSphereIntersectionTest(in Ray ray, out float thit, out float tmax, in float3 center = float3(0, 0, 0), in float radius = 1)
+bool RaySolidSphereIntersectionTest(in Ray ray, out float thit, out float tmax, in float3 a_center = float3(0, 0, 0), in float radius = 1)
 {
 {
     float t0, t1;
     float t0, t1;
 
 
-    if (!SolveRaySphereIntersectionEquation(ray, t0, t1, center, radius))
+    if (!SolveRaySphereIntersectionEquation(ray, t0, t1, a_center, radius))
         return false;
         return false;
 
 
 
 
@@ -483,7 +479,7 @@ bool RayAABBIntersectionTest(Ray ray, float3 aabb[2], out float thit, out Proced
 
 
 struct Metaball
 struct Metaball
 {
 {
-    float3 center;
+    float3 m_center;
     float radius;
     float radius;
 };
 };
 
 
@@ -492,7 +488,7 @@ struct Metaball
 
 
 float CalculateMetaballPotential(in float3 position, in Metaball blob, out float distance)
 float CalculateMetaballPotential(in float3 position, in Metaball blob, out float distance)
 {
 {
-    distance = length(position - blob.center);
+    distance = length(position - blob.m_center);
 
 
     if (distance <= blob.radius)
     if (distance <= blob.radius)
     {
     {
@@ -558,7 +554,7 @@ void InitializeAnimatedMetaballs(out Metaball blobs[3], in float elapsedTime, in
     float tAnimate = CalculateAnimationInterpolant(elapsedTime, cycleDuration);
     float tAnimate = CalculateAnimationInterpolant(elapsedTime, cycleDuration);
     for (uint j = 0; j < 3; j++)
     for (uint j = 0; j < 3; j++)
     {
     {
-        blobs[j].center = lerp(keyFrameCenters[j][0], keyFrameCenters[j][1], tAnimate);
+        blobs[j].m_center = lerp(keyFrameCenters[j][0], keyFrameCenters[j][1], tAnimate);
         blobs[j].radius = radii[j];
         blobs[j].radius = radii[j];
     }
     }
 }
 }
@@ -575,7 +571,7 @@ void FindIntersectingMetaballs(in Ray ray, out float tmin, out float tmax, inout
     for (uint i = 0; i < 3; i++)
     for (uint i = 0; i < 3; i++)
     {
     {
         float _thit, _tmax;
         float _thit, _tmax;
-        if (RaySolidSphereIntersectionTest(ray, _thit, _tmax, blobs[i].center, blobs[i].radius))
+        if (RaySolidSphereIntersectionTest(ray, _thit, _tmax, blobs[i].m_center, blobs[i].radius))
         {
         {
             tmin = min(_thit, tmin);
             tmin = min(_thit, tmin);
             tmax = max(_tmax, tmax);
             tmax = max(_tmax, tmax);
@@ -1201,10 +1197,10 @@ void MyClosestHitShader_Triangle(inout RayPayload rayPayload, in BuiltInTriangle
     uint baseIndex = PrimitiveIndex() * triangleIndexStride;
     uint baseIndex = PrimitiveIndex() * triangleIndexStride;
 
 
 
 
-    const uint3 indices = Load3x16BitIndices(baseIndex, g_indices);
+    const uint3 indices_ = Load3x16BitIndices(baseIndex, g_indices);
 
 
 
 
-    float3 triangleNormal = g_vertices[indices[0]].normal;
+    float3 triangleNormal = g_vertices[indices_[0]].normal;
 
 
 
 
 
 

+ 3 - 0
tests/Emission/ray-tracing-procedural-geometry.txt

@@ -1,3 +1,6 @@
+"enum class SignedDistancePrimitive_Enum"
+"void swap ( inout float a , inout float b )"
+"static uint3 Load3x16BitIndices ( uint offsetBytes , ByteAddressBuffer Indices )"
 "RaytracingAccelerationStructure RaySRG_g_scene : register ( t0 , space0 ) ;"
 "RaytracingAccelerationStructure RaySRG_g_scene : register ( t0 , space0 ) ;"
 "RWTexture2D < float4 > RaySRG_g_renderTarget : register ( u0 , space0 ) ;"
 "RWTexture2D < float4 > RaySRG_g_renderTarget : register ( u0 , space0 ) ;"
 "ByteAddressBuffer RaySRG_g_indices : register ( t1 , space0 ) ;"
 "ByteAddressBuffer RaySRG_g_indices : register ( t1 , space0 ) ;"

+ 19 - 19
tests/Emission/ray-tracing-simple-lighting.azsl

@@ -78,7 +78,7 @@ ShaderResourceGroup RaySRG : RaySemantic
 // Load three 16 bit indices from a byte addressed buffer.
 // Load three 16 bit indices from a byte addressed buffer.
 uint3 Load3x16BitIndices(uint offsetBytes)
 uint3 Load3x16BitIndices(uint offsetBytes)
 {
 {
-    uint3 indices;
+    uint3 indices_;
 
 
     // ByteAdressBuffer loads must be aligned at a 4 byte boundary.
     // ByteAdressBuffer loads must be aligned at a 4 byte boundary.
     // Since we need to read three 16 bit indices: { 0, 1, 2 } 
     // Since we need to read three 16 bit indices: { 0, 1, 2 } 
@@ -93,18 +93,18 @@ uint3 Load3x16BitIndices(uint offsetBytes)
     // Aligned: { 0 1 | 2 - } => retrieve first three 16bit indices
     // Aligned: { 0 1 | 2 - } => retrieve first three 16bit indices
     if (dwordAlignedOffset == offsetBytes)
     if (dwordAlignedOffset == offsetBytes)
     {
     {
-        indices.x = four16BitIndices.x & 0xffff;
-        indices.y = (four16BitIndices.x >> 16) & 0xffff;
-        indices.z = four16BitIndices.y & 0xffff;
+        indices_.x = four16BitIndices.x & 0xffff;
+        indices_.y = (four16BitIndices.x >> 16) & 0xffff;
+        indices_.z = four16BitIndices.y & 0xffff;
     }
     }
     else // Not aligned: { - 0 | 1 2 } => retrieve last three 16bit indices
     else // Not aligned: { - 0 | 1 2 } => retrieve last three 16bit indices
     {
     {
-        indices.x = (four16BitIndices.x >> 16) & 0xffff;
-        indices.y = four16BitIndices.y & 0xffff;
-        indices.z = (four16BitIndices.y >> 16) & 0xffff;
+        indices_.x = (four16BitIndices.x >> 16) & 0xffff;
+        indices_.y = four16BitIndices.y & 0xffff;
+        indices_.z = (four16BitIndices.y >> 16) & 0xffff;
     }
     }
 
 
-    return indices;
+    return indices_;
 }
 }
 
 
 // [Atom-942] TODO support typedef
 // [Atom-942] TODO support typedef
@@ -176,15 +176,15 @@ void MyRaygenShader()
     // TMin should be kept small to prevent missing geometry at close contact areas.
     // TMin should be kept small to prevent missing geometry at close contact areas.
     ray.TMin = 0.001;
     ray.TMin = 0.001;
     ray.TMax = 10000.0;
     ray.TMax = 10000.0;
-    RayPayload payload = { float4(0, 0, 0, 0) };
-    TraceRay(RaySRG::Scene, RAY_FLAG_CULL_BACK_FACING_TRIANGLES, ~0, 0, 1, 0, ray, payload);
+    RayPayload payload_ = { float4(0, 0, 0, 0) };
+    TraceRay(RaySRG::Scene, RAY_FLAG_CULL_BACK_FACING_TRIANGLES, ~0, 0, 1, 0, ray, payload_);
 
 
     // Write the raytraced color to the output texture.
     // Write the raytraced color to the output texture.
-    RaySRG::RenderTarget[DispatchRaysIndex().xy] = payload.color;
+    RaySRG::RenderTarget[DispatchRaysIndex().xy] = payload_.color;
 }
 }
 
 
 [shader("closesthit")]
 [shader("closesthit")]
-void MyClosestHitShader(inout RayPayload payload, in BuiltInTriangleIntersectionAttributes attr)
+void MyClosestHitShader(inout RayPayload a_payload, in BuiltInTriangleIntersectionAttributes attr)
 {
 {
     float3 hitPosition = HitWorldPosition();
     float3 hitPosition = HitWorldPosition();
 
 
@@ -195,13 +195,13 @@ void MyClosestHitShader(inout RayPayload payload, in BuiltInTriangleIntersection
     uint baseIndex = PrimitiveIndex() * triangleIndexStride;
     uint baseIndex = PrimitiveIndex() * triangleIndexStride;
 
 
     // Load up 3 16 bit indices for the triangle.
     // Load up 3 16 bit indices for the triangle.
-    const uint3 indices = Load3x16BitIndices(baseIndex);
+    const uint3 indices_ = Load3x16BitIndices(baseIndex);
 
 
     // Retrieve corresponding vertex normals for the triangle vertices.
     // Retrieve corresponding vertex normals for the triangle vertices.
     float3 vertexNormals[3] = { 
     float3 vertexNormals[3] = { 
-        RaySRG::Vertices[indices[0]].normal, 
-        RaySRG::Vertices[indices[1]].normal, 
-        RaySRG::Vertices[indices[2]].normal 
+        RaySRG::Vertices[indices_[0]].normal, 
+        RaySRG::Vertices[indices_[1]].normal, 
+        RaySRG::Vertices[indices_[2]].normal 
     };
     };
 
 
     // Compute the triangle's normal.
     // Compute the triangle's normal.
@@ -212,12 +212,12 @@ void MyClosestHitShader(inout RayPayload payload, in BuiltInTriangleIntersection
     float4 diffuseColor = CalculateDiffuseLighting(hitPosition, triangleNormal);
     float4 diffuseColor = CalculateDiffuseLighting(hitPosition, triangleNormal);
     float4 color = RaySRG::g_sceneCB.lightAmbientColor + diffuseColor;
     float4 color = RaySRG::g_sceneCB.lightAmbientColor + diffuseColor;
 
 
-    payload.color = color;
+    a_payload.color = color;
 }
 }
 
 
 [shader("miss")]
 [shader("miss")]
-void MyMissShader(inout RayPayload payload)
+void MyMissShader(inout RayPayload a_payload)
 {
 {
     float4 background = float4(0.0f, 0.2f, 0.4f, 1.0f);
     float4 background = float4(0.0f, 0.2f, 0.4f, 1.0f);
-    payload.color = background;
+    a_payload.color = background;
 }
 }

+ 1 - 0
tests/Semantic/16bit-scalar.azsl

@@ -0,0 +1 @@
+static unsigned int16_t g;

+ 0 - 4
tests/Semantic/AsError/constantbuffer-forbidden-context-arg.azsl

@@ -1,4 +0,0 @@
-struct S{};
-void func(ConstantBuffer<S> arg) // #EC 512 'impossible to use ConstantBuffer in that context'
-{
-}

+ 0 - 1
tests/Semantic/AsError/constantbuffer-forbidden-context-funcret.azsl

@@ -1 +0,0 @@
-ConstantBuffer<struct S{}> func();  // #EC 512 impossible to use ConstantBuffer in that context

+ 0 - 5
tests/Semantic/AsError/constantbuffer-forbidden-context-var.azsl

@@ -1,5 +0,0 @@
-struct S{};
-void func()
-{
-    ConstantBuffer<S> var;  // #EC 513 'ConstantBuffer variable declarations may only appear in ShaderResourceGroup'
-}

+ 2 - 20
tests/Semantic/AsError/disallowed-function-modifiers.azsl

@@ -1,21 +1,3 @@
-const void FuncC();
-row_major void FuncRM();
-column_major void FuncCM();
-extern void FuncE();
-option void FuncO();
-precise void FuncP();
-shared void FuncS();
-groupshared void FuncGS();
-uniform void FuncU();
-volatile inline void FuncV();
-linear void FuncL();
-centroid void FuncCD();
-nointerpolation void FuncNI();
-noperspective void FuncNP();
-sample void FuncSpl();
-in void FuncIn();
-out void FuncOut();
-inout void FuncIO();
+option void Func1(); // #EC 33
 
 
-// Semantic Error 33: line 1 ' Functions can only have the static and inline modifiers!'
-// #EC 33
+// Semantic Error 33: ' Functions can't have option or rootconstant qualified return types.

+ 3 - 0
tests/Semantic/AsError/disallowed-function-modifiers2.azsl

@@ -0,0 +1,3 @@
+rootconstant void Func2();  // #EC 33
+
+// Semantic Error 33: line 1 ' Functions can't have option or rootconstant qualified return types.

+ 2 - 0
tests/Semantic/AsError/disallowed-function-param-qualifier.azsl

@@ -0,0 +1,2 @@
+void Func1(option int a, rootconstant float b); // #EC11
+// Semantic error 11: rootconstant or option qualifier is only accepted at top-level scope

+ 5 - 0
tests/Semantic/AsError/same-varname-as-type.azsl

@@ -0,0 +1,5 @@
+struct A{};
+
+static A A;  // #EC32
+
+// Semantic error 32: redeclaration of /A with a different kind: Variable but was Struct, first seen line 1

+ 49 - 0
tests/Semantic/function-signatures.azsl

@@ -0,0 +1,49 @@
+struct MyT{};
+
+int func1();
+void func2();
+float func3(int arg1);
+snorm float func4(int);
+MyT func5();
+MyT func6(MyT);
+MyT func7(MyT arg1);
+float4x4 func8(unorm double arg1, float3x3 arg2, int, bool);
+uint64_t func9(int32_t arg1, int64_t arg2, uint32_t arg3, uint64_t arg4);
+bool func10(in out int);
+bool func11(in out int i);
+bool func12(inout int i);
+float4 func13() : SV_Target0;
+float4 func14(in float2 : TEXCOORD0) : SV_Target0;
+float4 func15(in float2 uv : TEXCOORD0) : SV_Target0;
+
+[shader( "raygeneration" )]
+void func16();
+
+struct TriVertex{ float3 p : POSITION; };
+float4 main( TriVertex in_ ) : SV_POSITION {return 0;}
+
+struct P { float3 c; };
+struct Attributes { float2 bary; };
+[shader( "closesthit" )]
+void closest(inout P a_payload : SV_RayPayload,
+             Attributes attrib);
+
+[shader("anyhit")]
+void closest(inout P a_payload : SV_RayPayload,
+             in BuiltInTriangleIntersectionAttributes myAttr);
+
+struct Payload {};
+struct VertexOut {};
+
+[RootSignature( "CBV(b0), CBV(b1), CBV(b2), SRV(t0), SRV(t1), SRV(t2), SRV(t3), SRV(t4)" )]
+[NumThreads(128, 1, 1)]
+[OutputTopology("triangle")]
+void main2(
+    uint dtid : SV_DispatchThreadID,
+    uint gtid : SV_GroupThreadID,
+    uint gid : SV_GroupID,
+    in payload Payload a_payload,
+    out vertices VertexOut verts[64],
+    out indices uint3 tris[126]
+)
+{}

+ 5 - 5
tests/Syntax/attribute-specifiers-sequence-closure.azsl

@@ -10,14 +10,14 @@
 [[global::output_format(7, "R32G32B32A32")]]
 [[global::output_format(7, "R32G32B32A32")]]
 
 
 struct V { float3 normal; };
 struct V { float3 normal; };
-static const V vertices[8];
-static const uint3 indices;
+static const V Vertices[8];
+static const uint3 Indices;
 
 
 void F()
 void F()
 {
 {
     float3 vertexNormals[3] = { 
     float3 vertexNormals[3] = { 
-        Vertices[indices[0]].normal, 
-        Vertices[indices[1]].normal, 
-        Vertices[indices[2]].normal 
+        Vertices[Indices[0]].normal, 
+        Vertices[Indices[1]].normal, 
+        Vertices[Indices[2]].normal 
     };
     };
 }
 }

+ 11 - 2
tests/Syntax/function-signatures.azsl

@@ -1,9 +1,18 @@
 int func1();
 int func1();
 void func2();
 void func2();
 float func3(int arg1);
 float func3(int arg1);
-float func4(int);
+snorm float func4(int);
 MyT func5();
 MyT func5();
 MyT func6(MyT);
 MyT func6(MyT);
 MyT func7(MyT arg1);
 MyT func7(MyT arg1);
-float4x4 func8(double arg1, float3x3 arg2, int, bool);
+float4x4 func8(unorm double arg1, float3x3 arg2, int, bool);
 uint64_t func9(int32_t arg1, int64_t arg2, uint32_t arg3, uint64_t arg4);
 uint64_t func9(int32_t arg1, int64_t arg2, uint32_t arg3, uint64_t arg4);
+bool func10(in out int);
+bool func11(in out int i);
+bool func12(inout int i);
+float4 func13() : SV_Target0;
+float4 func14(in float2 : TEXCOORD0) : SV_Target0;
+float4 func15(in float2 uv : TEXCOORD0) : SV_Target0;
+[shader( "raygeneration" )]
+void func16();
+float4 main( TriVertex in_ ) : SV_POSITION;

+ 2 - 2
tests/testfuncs.py

@@ -156,7 +156,7 @@ def dumpKeywords(compilerPath):
             return (None, False)
             return (None, False)
         return (tokens, code == 0)
         return (tokens, code == 0)
 
 
-def verifyAllPredicates(predicates, j, silent=True):
+def verifyAllPredicates(predicates, code, silent=True):
     import clr
     import clr
     import pprint
     import pprint
     import inspect
     import inspect
@@ -176,5 +176,5 @@ def verifyAllPredicates(predicates, j, silent=True):
     if not allok and not silent:
     if not allok and not silent:
         print ("dump as parsed:")
         print ("dump as parsed:")
         pp = pprint.PrettyPrinter(indent=2, width=160)
         pp = pprint.PrettyPrinter(indent=2, width=160)
-        pp.pprint(j)
+        pp.pprint(code)
     return allok
     return allok

+ 5 - 5
tests/testhelper.py

@@ -43,7 +43,7 @@ def found(needle, haystack):
         return True
         return True
     return False
     return False
 
 
-# pars the argument mentioned in the shader source file Ex : Cmdargs: --namespace=vk   or Cmdargs: ['--unique-idx', '--root-sig', '--root-const', '0']
+# parse the argument mentioned in the shader source file Ex : Cmdargs: --namespace=vk   or Cmdargs: ['--unique-idx', '--root-sig', '--root-const', '0']
 def parse_strlist(sl):
 def parse_strlist(sl):
     clean = re.sub("[\[\],\s]","",sl)
     clean = re.sub("[\[\],\s]","",sl)
     splitted = re.split("[\'\"]",clean)
     splitted = re.split("[\'\"]",clean)
@@ -59,7 +59,7 @@ def verifyEmissionPattern(azslFile, patternsFileName, compilerPath, silent, argL
         print ("Pattern file not found: " + patternsFileName)
         print ("Pattern file not found: " + patternsFileName)
         return False
         return False
     arg = []
     arg = []
-    with io.open(patternsFileName, "r", encoding="latin-1") as f:
+    with io.open(patternsFileName, "r", encoding="utf-8") as f:
         for line in f:
         for line in f:
             if line.find("Cmdargs") >= 0:
             if line.find("Cmdargs") >= 0:
                 line = line[line.rfind(':')+1:]
                 line = line[line.rfind(':')+1:]
@@ -72,12 +72,12 @@ def verifyEmissionPattern(azslFile, patternsFileName, compilerPath, silent, argL
         if not silent: print (style.BRIGHT + fg.CYAN + "Now to check emission patterns for " + patternsFileName + style.RESET_ALL)
         if not silent: print (style.BRIGHT + fg.CYAN + "Now to check emission patterns for " + patternsFileName + style.RESET_ALL)
         # normalizes the shader code by inserting spaces around identifiers stuck to other things.
         # normalizes the shader code by inserting spaces around identifiers stuck to other things.
         # eg : 'func()' will become 'func ( )'
         # eg : 'func()' will become 'func ( )'
-        allidents = re.split("([a-zA-Z_]+[a-zA-Z_0-9]*)|(;)|(\()|(\))|(<)|(>)|( )", shaderCode.decode('utf-8'))
+        allidents = re.split("([a-zA-Z_]+[a-zA-Z_0-9]*)|(\.)|(,)|(::)|(;)|(\()|(\))|(<)|(>)|( )", shaderCode.decode('utf-8'))
         allidents = filter(lambda s: s is not None and s!="" and s!=" ", allidents)  # remove empties from ['', 'code', '', 'piece']...
         allidents = filter(lambda s: s is not None and s!="" and s!=" ", allidents)  # remove empties from ['', 'code', '', 'piece']...
         shaderCode = " ".join(allidents)
         shaderCode = " ".join(allidents)
         predicates = []
         predicates = []
         # load the pattern file:
         # load the pattern file:
-        with io.open(patternsFileName, encoding="latin-1") as f:
+        with io.open(patternsFileName, encoding="utf-8") as f:
             i = 0
             i = 0
             for line in f:
             for line in f:
                 if line.startswith("\""):
                 if line.startswith("\""):
@@ -138,7 +138,7 @@ def compileAndExpectError(thefile, compilerPath, silent, argList):
         failList.append(thefile)
         failList.append(thefile)
         return 0 # Failure
         return 0 # Failure
     # Read the expected error code from the source file.
     # Read the expected error code from the source file.
-    f = io.open(thefile, 'r', encoding="latin-1")
+    f = io.open(thefile, 'r', encoding="utf-8")
     azslCode = f.read()
     azslCode = f.read()
     f.close()
     f.close()
     expectedErrorCode = testfuncs.findTokenToInt(azslCode, r"#EC\s\d*")
     expectedErrorCode = testfuncs.findTokenToInt(azslCode, r"#EC\s\d*")

Vissa filer visades inte eftersom för många filer har ändrats