diff --git a/CHANGELOG.md b/CHANGELOG.md index cb1e867..2f7efd7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ ## Unreleased +- added support for builtin type aliases - #78 +- updated to latest IntelliJ platform + ## 0.0.32 - 2024-08-01 - remove max release so hopefully it should work for all future versions - @andreypfau diff --git a/examples/tickey_67.wgsl b/examples/ticket_67.wgsl similarity index 100% rename from examples/tickey_67.wgsl rename to examples/ticket_67.wgsl diff --git a/examples/ticket_78.wgsl b/examples/ticket_78.wgsl new file mode 100644 index 0000000..3fb4e6f --- /dev/null +++ b/examples/ticket_78.wgsl @@ -0,0 +1,16 @@ +struct Vertex { + @builtin(position) pos: vec4f; + xxx: mat4x4f +} + +@vertex +fn vs_main(@builtin(vertex_index) in_vertex_index: u32) -> Vertex { + let x = f32(1 - i32(in_vertex_index)) * 0.5; + let y = f32(i32(in_vertex_index & 1u) * 2 - 1) * 0.5; + return Vertex(vec4(x, y, 0.0, 1.0)); +} + +@fragment +fn fs_main(in: Vertex) -> @location(0) vec4f { + return vec4(1.0, 0.0, 0.0, 1.0); +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 715a0a0..6a066ae 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,11 +9,10 @@ pluginVersion = 0.0.32 # See https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html # for insight into build numbers and IntelliJ Platform versions. pluginSinceBuild = 222 -#pluginUntilBuild = 241.* # IntelliJ Platform Properties -> https://github.com/JetBrains/gradle-intellij-plugin#intellij-platform-properties platformType = IC -platformVersion = 2022.2 +platformVersion = 2022.3.3 # Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html # Example: platformPlugins = com.intellij.java, com.jetbrains.php:203.4449.22 @@ -23,7 +22,7 @@ platformPlugins = org.intellij.plugins.markdown javaVersion = 17 # Gradle Releases -> https://github.com/gradle/gradle/releases -gradleVersion = 8.6 +gradleVersion = 8.10.2 # Opt-out flag for bundling Kotlin standard library. # See https://plugins.jetbrains.com/docs/intellij/kotlin.html#kotlin-standard-library for details. diff --git a/src/main/gen/wgslplugin/language/_WgslLexer.java b/src/main/gen/wgslplugin/language/_WgslLexer.java index f32ec28..8d53442 100644 --- a/src/main/gen/wgslplugin/language/_WgslLexer.java +++ b/src/main/gen/wgslplugin/language/_WgslLexer.java @@ -130,27 +130,28 @@ private static int zzUnpackcmap_blocks(String packed, int offset, int [] result) "\1\116\4\25\1\117\3\25\1\120\12\25\1\121\1\122"+ "\1\123\1\124\1\125\1\25\1\16\16\25\1\126\13\25"+ "\1\0\1\114\1\127\3\25\1\130\1\131\5\25\1\132"+ - "\12\25\1\133\41\25\1\134\1\114\1\135\5\25\1\136"+ - "\1\25\1\137\1\140\1\141\1\142\1\143\1\144\1\145"+ - "\1\146\1\147\1\25\1\150\2\25\1\151\1\152\13\25"+ - "\1\153\1\25\1\154\26\25\1\155\1\25\1\156\1\157"+ - "\2\25\1\160\4\25\1\161\2\25\1\162\1\163\1\25"+ - "\1\164\1\165\1\166\1\167\10\25\1\170\1\25\1\171"+ - "\14\25\1\172\1\173\2\25\1\174\2\25\1\175\4\25"+ - "\1\176\1\25\1\177\1\200\3\25\1\201\1\202\1\25"+ - "\1\203\1\204\1\205\1\206\34\25\1\207\1\210\7\25"+ - "\1\211\1\25\1\212\1\25\1\213\1\25\1\214\3\25"+ - "\1\215\1\216\1\217\4\25\1\220\1\25\1\221\3\25"+ - "\1\222\1\223\1\25\1\224\1\225\1\226\1\227\1\25"+ - "\1\230\13\25\1\231\1\232\3\25\1\233\1\25\1\234"+ - "\5\25\1\235\1\236\1\25\1\237\7\25\1\240\21\25"+ - "\1\241\1\242\1\25\1\243\1\25\1\244\15\25\1\245"+ - "\1\246\1\25\1\247\2\25\1\250\1\251\1\252\17\25"+ - "\1\253\6\25\1\254\1\25\1\255\1\25\1\256\4\25"+ - "\1\257"; + "\12\25\1\133\1\134\1\135\1\136\1\137\1\140\1\141"+ + "\1\142\1\143\1\144\1\145\1\146\1\147\41\25\1\150"+ + "\1\114\1\151\5\25\1\152\1\25\1\153\1\154\1\155"+ + "\1\156\1\157\1\160\1\161\1\162\1\163\1\25\1\164"+ + "\2\25\1\165\1\166\13\25\1\167\1\25\1\170\26\25"+ + "\1\171\1\25\1\172\1\173\2\25\1\174\4\25\1\175"+ + "\2\25\1\176\1\177\1\25\1\200\1\201\1\202\1\203"+ + "\10\25\1\204\1\25\1\205\14\25\1\206\1\207\2\25"+ + "\1\210\2\25\1\211\4\25\1\212\1\25\1\213\1\214"+ + "\3\25\1\215\1\216\1\25\1\217\1\220\1\221\1\222"+ + "\34\25\1\223\1\224\7\25\1\225\1\25\1\226\1\25"+ + "\1\227\1\25\1\230\3\25\1\231\1\232\1\233\4\25"+ + "\1\234\1\25\1\235\3\25\1\236\1\237\1\25\1\240"+ + "\1\241\1\242\1\243\1\25\1\244\13\25\1\245\1\246"+ + "\3\25\1\247\1\25\1\250\5\25\1\251\1\252\1\25"+ + "\1\253\7\25\1\254\21\25\1\255\1\256\1\25\1\257"+ + "\1\25\1\260\15\25\1\261\1\262\1\25\1\263\2\25"+ + "\1\264\1\265\1\266\17\25\1\267\6\25\1\270\1\25"+ + "\1\271\1\25\1\272\4\25\1\273"; private static int [] zzUnpackAction() { - int [] result = new int[671]; + int [] result = new int[683]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -208,60 +209,62 @@ private static int zzUnpackAction(String packed, int offset, int [] result) { "\0\u2fe5\0\u3028\0\u306b\0\u30ae\0\u30f1\0\u0605\0\u3134\0\u0605"+ "\0\u3177\0\u31ba\0\u31fd\0\u3240\0\u0605\0\u3283\0\u32c6\0\u3309"+ "\0\u0605\0\u334c\0\u338f\0\u33d2\0\u3415\0\u3458\0\u349b\0\u34de"+ - "\0\u3521\0\u3564\0\u35a7\0\u0605\0\u0605\0\u0605\0\u0605\0\u0605"+ - "\0\u35ea\0\u2a23\0\u362d\0\u3670\0\u36b3\0\u36f6\0\u3739\0\u377c"+ - "\0\u37bf\0\u3802\0\u3845\0\u3888\0\u38cb\0\u390e\0\u3951\0\u3994"+ - "\0\u39d7\0\u3a1a\0\u3a5d\0\u3aa0\0\u3ae3\0\u3b26\0\u3b69\0\u3bac"+ - "\0\u3bef\0\u3c32\0\u3c75\0\u3cb8\0\u3cfb\0\u3d3e\0\u0605\0\u3d81"+ - "\0\u3dc4\0\u3e07\0\u0605\0\u0605\0\u3e4a\0\u3e8d\0\u3ed0\0\u3f13"+ - "\0\u3f56\0\u0605\0\u3f99\0\u3fdc\0\u401f\0\u4062\0\u40a5\0\u40e8"+ - "\0\u412b\0\u416e\0\u41b1\0\u41f4\0\u0605\0\u4237\0\u427a\0\u42bd"+ - "\0\u4300\0\u4343\0\u4386\0\u43c9\0\u440c\0\u444f\0\u4492\0\u44d5"+ - "\0\u4518\0\u455b\0\u459e\0\u45e1\0\u4624\0\u4667\0\u46aa\0\u46ed"+ - "\0\u4730\0\u4773\0\u47b6\0\u47f9\0\u483c\0\u487f\0\u48c2\0\u4905"+ - "\0\u4948\0\u498b\0\u49ce\0\u4a11\0\u4a54\0\u4a97\0\u0605\0\u01d5"+ - "\0\u0605\0\u4ada\0\u4b1d\0\u4b60\0\u4ba3\0\u4be6\0\u0605\0\u4c29"+ + "\0\u3521\0\u3564\0\u35a7\0\u0605\0\u0605\0\u35ea\0\u362d\0\u3670"+ + "\0\u36b3\0\u2a23\0\u36f6\0\u3739\0\u377c\0\u37bf\0\u3802\0\u3845"+ + "\0\u3888\0\u38cb\0\u390e\0\u3951\0\u3994\0\u39d7\0\u3a1a\0\u3a5d"+ + "\0\u3aa0\0\u3ae3\0\u3b26\0\u3b69\0\u3bac\0\u3bef\0\u3c32\0\u3c75"+ + "\0\u3cb8\0\u3cfb\0\u3d3e\0\u3d81\0\u3dc4\0\u3e07\0\u0605\0\u3e4a"+ + "\0\u3e8d\0\u3ed0\0\u0605\0\u0605\0\u3f13\0\u3f56\0\u3f99\0\u3fdc"+ + "\0\u401f\0\u0605\0\u4062\0\u40a5\0\u40e8\0\u412b\0\u416e\0\u41b1"+ + "\0\u41f4\0\u4237\0\u427a\0\u42bd\0\u0605\0\u0605\0\u0605\0\u0605"+ "\0\u0605\0\u0605\0\u0605\0\u0605\0\u0605\0\u0605\0\u0605\0\u0605"+ - "\0\u0605\0\u4c6c\0\u0605\0\u4caf\0\u4cf2\0\u0605\0\u0605\0\u4d35"+ - "\0\u4d78\0\u4dbb\0\u4dfe\0\u4e41\0\u4e84\0\u4ec7\0\u4f0a\0\u4f4d"+ - "\0\u4f90\0\u4fd3\0\u0605\0\u5016\0\u0605\0\u5059\0\u509c\0\u50df"+ - "\0\u5122\0\u5165\0\u51a8\0\u51eb\0\u522e\0\u5271\0\u52b4\0\u52f7"+ - "\0\u533a\0\u537d\0\u53c0\0\u5403\0\u5446\0\u5489\0\u54cc\0\u550f"+ - "\0\u5552\0\u5595\0\u55d8\0\u0605\0\u561b\0\u0605\0\u0605\0\u565e"+ - "\0\u56a1\0\u56e4\0\u5727\0\u576a\0\u57ad\0\u57f0\0\u0605\0\u5833"+ - "\0\u5876\0\u0605\0\u0605\0\u58b9\0\u0605\0\u0605\0\u0605\0\u0605"+ - "\0\u58fc\0\u593f\0\u5982\0\u59c5\0\u5a08\0\u5a4b\0\u5a8e\0\u5ad1"+ - "\0\u0605\0\u5b14\0\u0605\0\u5b57\0\u5b9a\0\u5bdd\0\u5c20\0\u5c63"+ - "\0\u5ca6\0\u5ce9\0\u5d2c\0\u5d6f\0\u5db2\0\u5df5\0\u5e38\0\u0605"+ - "\0\u0605\0\u5e7b\0\u5ebe\0\u0605\0\u5f01\0\u5f44\0\u0605\0\u5f87"+ - "\0\u5fca\0\u600d\0\u6050\0\u0605\0\u6093\0\u0605\0\u0605\0\u60d6"+ - "\0\u6119\0\u615c\0\u0605\0\u0605\0\u619f\0\u0605\0\u0605\0\u0605"+ - "\0\u0605\0\u61e2\0\u6225\0\u6268\0\u62ab\0\u62ee\0\u6331\0\u6374"+ - "\0\u63b7\0\u63fa\0\u643d\0\u6480\0\u64c3\0\u6506\0\u6549\0\u658c"+ - "\0\u65cf\0\u6612\0\u6655\0\u6698\0\u66db\0\u671e\0\u6761\0\u67a4"+ - "\0\u67e7\0\u682a\0\u686d\0\u68b0\0\u68f3\0\u0605\0\u0605\0\u6936"+ - "\0\u6979\0\u69bc\0\u69ff\0\u6a42\0\u6a85\0\u6ac8\0\u0605\0\u6b0b"+ - "\0\u0605\0\u6b4e\0\u0605\0\u6b91\0\u0605\0\u6bd4\0\u6c17\0\u6c5a"+ - "\0\u0605\0\u6c9d\0\u0605\0\u6ce0\0\u6d23\0\u6d66\0\u6da9\0\u6dec"+ - "\0\u6e2f\0\u0605\0\u6e72\0\u6eb5\0\u6ef8\0\u0605\0\u0605\0\u6f3b"+ - "\0\u0605\0\u0605\0\u0605\0\u6f7e\0\u6fc1\0\u0605\0\u7004\0\u7047"+ - "\0\u708a\0\u70cd\0\u7110\0\u7153\0\u7196\0\u71d9\0\u721c\0\u725f"+ - "\0\u72a2\0\u0605\0\u0605\0\u72e5\0\u7328\0\u736b\0\u0605\0\u73ae"+ - "\0\u73f1\0\u7434\0\u7477\0\u74ba\0\u74fd\0\u7540\0\u0605\0\u0605"+ - "\0\u7583\0\u0605\0\u75c6\0\u7609\0\u764c\0\u768f\0\u76d2\0\u7715"+ - "\0\u7758\0\u0605\0\u779b\0\u77de\0\u7821\0\u7864\0\u78a7\0\u78ea"+ - "\0\u792d\0\u7970\0\u79b3\0\u79f6\0\u7a39\0\u7a7c\0\u7abf\0\u7b02"+ - "\0\u7b45\0\u7b88\0\u7bcb\0\u0605\0\u0605\0\u7c0e\0\u0605\0\u7c51"+ - "\0\u7c94\0\u7cd7\0\u7d1a\0\u7d5d\0\u7da0\0\u7de3\0\u7e26\0\u7e69"+ - "\0\u7eac\0\u7eef\0\u7f32\0\u7f75\0\u7fb8\0\u7ffb\0\u0605\0\u0605"+ - "\0\u803e\0\u8081\0\u80c4\0\u8107\0\u0605\0\u814a\0\u0605\0\u818d"+ - "\0\u81d0\0\u8213\0\u8256\0\u8299\0\u82dc\0\u831f\0\u8362\0\u83a5"+ - "\0\u83e8\0\u842b\0\u846e\0\u84b1\0\u84f4\0\u8537\0\u0605\0\u857a"+ - "\0\u85bd\0\u8600\0\u8643\0\u8686\0\u86c9\0\u0605\0\u870c\0\u0605"+ - "\0\u874f\0\u0605\0\u8792\0\u87d5\0\u8818\0\u885b\0\u0605"; + "\0\u0605\0\u4300\0\u4343\0\u4386\0\u43c9\0\u440c\0\u444f\0\u4492"+ + "\0\u44d5\0\u4518\0\u455b\0\u459e\0\u45e1\0\u4624\0\u4667\0\u46aa"+ + "\0\u46ed\0\u4730\0\u4773\0\u47b6\0\u47f9\0\u483c\0\u487f\0\u48c2"+ + "\0\u4905\0\u4948\0\u498b\0\u49ce\0\u4a11\0\u4a54\0\u4a97\0\u4ada"+ + "\0\u4b1d\0\u4b60\0\u0605\0\u01d5\0\u0605\0\u4ba3\0\u4be6\0\u4c29"+ + "\0\u4c6c\0\u4caf\0\u0605\0\u4cf2\0\u0605\0\u0605\0\u0605\0\u0605"+ + "\0\u0605\0\u0605\0\u0605\0\u0605\0\u0605\0\u4d35\0\u0605\0\u4d78"+ + "\0\u4dbb\0\u0605\0\u0605\0\u4dfe\0\u4e41\0\u4e84\0\u4ec7\0\u4f0a"+ + "\0\u4f4d\0\u4f90\0\u4fd3\0\u5016\0\u5059\0\u509c\0\u0605\0\u50df"+ + "\0\u0605\0\u5122\0\u5165\0\u51a8\0\u51eb\0\u522e\0\u5271\0\u52b4"+ + "\0\u52f7\0\u533a\0\u537d\0\u53c0\0\u5403\0\u5446\0\u5489\0\u54cc"+ + "\0\u550f\0\u5552\0\u5595\0\u55d8\0\u561b\0\u565e\0\u56a1\0\u0605"+ + "\0\u56e4\0\u0605\0\u0605\0\u5727\0\u576a\0\u57ad\0\u57f0\0\u5833"+ + "\0\u5876\0\u58b9\0\u0605\0\u58fc\0\u593f\0\u0605\0\u0605\0\u5982"+ + "\0\u0605\0\u0605\0\u0605\0\u0605\0\u59c5\0\u5a08\0\u5a4b\0\u5a8e"+ + "\0\u5ad1\0\u5b14\0\u5b57\0\u5b9a\0\u0605\0\u5bdd\0\u0605\0\u5c20"+ + "\0\u5c63\0\u5ca6\0\u5ce9\0\u5d2c\0\u5d6f\0\u5db2\0\u5df5\0\u5e38"+ + "\0\u5e7b\0\u5ebe\0\u5f01\0\u0605\0\u0605\0\u5f44\0\u5f87\0\u0605"+ + "\0\u5fca\0\u600d\0\u0605\0\u6050\0\u6093\0\u60d6\0\u6119\0\u0605"+ + "\0\u615c\0\u0605\0\u0605\0\u619f\0\u61e2\0\u6225\0\u0605\0\u0605"+ + "\0\u6268\0\u0605\0\u0605\0\u0605\0\u0605\0\u62ab\0\u62ee\0\u6331"+ + "\0\u6374\0\u63b7\0\u63fa\0\u643d\0\u6480\0\u64c3\0\u6506\0\u6549"+ + "\0\u658c\0\u65cf\0\u6612\0\u6655\0\u6698\0\u66db\0\u671e\0\u6761"+ + "\0\u67a4\0\u67e7\0\u682a\0\u686d\0\u68b0\0\u68f3\0\u6936\0\u6979"+ + "\0\u69bc\0\u0605\0\u0605\0\u69ff\0\u6a42\0\u6a85\0\u6ac8\0\u6b0b"+ + "\0\u6b4e\0\u6b91\0\u0605\0\u6bd4\0\u0605\0\u6c17\0\u0605\0\u6c5a"+ + "\0\u0605\0\u6c9d\0\u6ce0\0\u6d23\0\u0605\0\u6d66\0\u0605\0\u6da9"+ + "\0\u6dec\0\u6e2f\0\u6e72\0\u6eb5\0\u6ef8\0\u0605\0\u6f3b\0\u6f7e"+ + "\0\u6fc1\0\u0605\0\u0605\0\u7004\0\u0605\0\u0605\0\u0605\0\u7047"+ + "\0\u708a\0\u0605\0\u70cd\0\u7110\0\u7153\0\u7196\0\u71d9\0\u721c"+ + "\0\u725f\0\u72a2\0\u72e5\0\u7328\0\u736b\0\u0605\0\u0605\0\u73ae"+ + "\0\u73f1\0\u7434\0\u0605\0\u7477\0\u74ba\0\u74fd\0\u7540\0\u7583"+ + "\0\u75c6\0\u7609\0\u0605\0\u0605\0\u764c\0\u0605\0\u768f\0\u76d2"+ + "\0\u7715\0\u7758\0\u779b\0\u77de\0\u7821\0\u0605\0\u7864\0\u78a7"+ + "\0\u78ea\0\u792d\0\u7970\0\u79b3\0\u79f6\0\u7a39\0\u7a7c\0\u7abf"+ + "\0\u7b02\0\u7b45\0\u7b88\0\u7bcb\0\u7c0e\0\u7c51\0\u7c94\0\u0605"+ + "\0\u0605\0\u7cd7\0\u0605\0\u7d1a\0\u7d5d\0\u7da0\0\u7de3\0\u7e26"+ + "\0\u7e69\0\u7eac\0\u7eef\0\u7f32\0\u7f75\0\u7fb8\0\u7ffb\0\u803e"+ + "\0\u8081\0\u80c4\0\u0605\0\u0605\0\u8107\0\u814a\0\u818d\0\u81d0"+ + "\0\u0605\0\u8213\0\u0605\0\u8256\0\u8299\0\u82dc\0\u831f\0\u8362"+ + "\0\u83a5\0\u83e8\0\u842b\0\u846e\0\u84b1\0\u84f4\0\u8537\0\u857a"+ + "\0\u85bd\0\u8600\0\u0605\0\u8643\0\u8686\0\u86c9\0\u870c\0\u874f"+ + "\0\u8792\0\u0605\0\u87d5\0\u0605\0\u8818\0\u0605\0\u885b\0\u889e"+ + "\0\u88e1\0\u8924\0\u0605"; private static int [] zzUnpackRowMap() { - int [] result = new int[671]; + int [] result = new int[683]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -502,327 +505,332 @@ private static int zzUnpackRowMap(String packed, int offset, int [] result) { "\5\36\3\0\3\36\1\u0142\24\36\25\0\10\36\6\0"+ "\5\36\3\0\3\36\1\u0143\24\36\25\0\10\36\6\0"+ "\5\36\3\0\23\36\1\u0144\4\36\25\0\10\36\6\0"+ - "\5\36\3\0\5\36\1\u0145\22\36\25\0\7\36\1\u0146"+ - "\6\0\5\36\3\0\30\36\25\0\10\36\6\0\5\36"+ - "\3\0\22\36\1\u0147\5\36\25\0\10\36\6\0\5\36"+ - "\3\0\1\36\1\u0148\26\36\25\0\10\36\6\0\5\36"+ - "\3\0\1\u0149\27\36\25\0\10\36\6\0\5\36\3\0"+ - "\13\36\1\u014a\14\36\25\0\10\36\6\0\5\36\3\0"+ - "\11\36\1\u014b\16\36\25\0\10\36\6\0\5\36\3\0"+ - "\11\36\1\u014c\16\36\25\0\10\36\6\0\5\36\3\0"+ - "\13\36\1\u014d\14\36\25\0\10\36\6\0\5\36\3\0"+ - "\11\36\1\u014e\16\36\25\0\10\36\6\0\5\36\3\0"+ - "\11\36\1\u014f\16\36\25\0\10\36\6\0\5\36\3\0"+ - "\15\36\1\u0150\12\36\25\0\10\36\6\0\5\36\3\0"+ - "\16\36\1\u0151\11\36\25\0\10\36\6\0\5\36\3\0"+ - "\15\36\1\u0152\12\36\25\0\10\36\6\0\5\36\3\0"+ - "\16\36\1\u0153\11\36\25\0\10\36\6\0\5\36\3\0"+ - "\1\u0154\27\36\25\0\10\36\6\0\5\36\3\0\2\36"+ - "\1\u0155\25\36\25\0\10\36\6\0\5\36\3\0\6\36"+ - "\1\u0156\12\36\1\u0157\1\36\1\u0158\4\36\25\0\10\36"+ - "\6\0\5\36\3\0\6\36\1\u0159\12\36\1\u015a\1\36"+ - "\1\u015b\4\36\25\0\10\36\6\0\5\36\3\0\11\36"+ - "\1\u015c\3\36\1\u015d\12\36\25\0\10\36\6\0\5\36"+ - "\3\0\11\36\1\u015e\3\36\1\u015f\12\36\25\0\1\u0160"+ - "\7\36\6\0\5\36\3\0\30\36\25\0\1\36\1\u0161"+ - "\1\36\1\u0162\3\36\1\u0163\6\0\5\36\3\0\30\36"+ - "\25\0\10\36\6\0\5\36\3\0\1\36\1\u0164\26\36"+ - "\25\0\10\36\6\0\5\36\3\0\16\36\1\u0165\11\36"+ - "\25\0\10\36\6\0\5\36\3\0\7\36\1\u0166\20\36"+ - "\25\0\10\36\6\0\5\36\3\0\5\36\1\u0167\22\36"+ - "\25\0\10\u012e\73\0\10\u012e\24\0\1\u0168\46\0\10\36"+ - "\6\0\5\36\3\0\3\36\1\u0169\24\36\25\0\10\36"+ - "\6\0\5\36\3\0\15\36\1\u016a\12\36\25\0\10\36"+ - "\6\0\5\36\3\0\21\36\1\u016b\6\36\25\0\10\36"+ - "\6\0\5\36\3\0\15\36\1\u016c\12\36\25\0\10\36"+ - "\6\0\5\36\3\0\13\36\1\u016d\14\36\25\0\10\36"+ - "\6\0\5\36\3\0\20\36\1\u016e\7\36\25\0\10\36"+ - "\6\0\5\36\3\0\5\36\1\u016f\22\36\25\0\10\36"+ - "\6\0\5\36\3\0\10\36\1\u0170\17\36\25\0\2\36"+ - "\1\u0171\1\u0172\1\u0173\3\36\6\0\5\36\3\0\30\36"+ - "\25\0\2\36\1\u0174\1\u0175\1\u0176\3\36\6\0\5\36"+ - "\3\0\30\36\25\0\2\36\1\u0177\1\u0178\1\u0179\3\36"+ - "\6\0\5\36\3\0\30\36\25\0\10\36\6\0\5\36"+ - "\3\0\11\36\1\u017a\16\36\25\0\10\36\6\0\5\36"+ - "\3\0\15\36\1\u017b\12\36\25\0\10\36\6\0\5\36"+ - "\3\0\5\36\1\u017c\22\36\25\0\10\36\6\0\5\36"+ - "\3\0\3\36\1\u017d\24\36\25\0\10\36\6\0\5\36"+ - "\3\0\22\36\1\u017e\5\36\25\0\10\36\6\0\5\36"+ - "\3\0\10\36\1\u017f\17\36\25\0\10\36\6\0\5\36"+ - "\3\0\20\36\1\u0180\7\36\25\0\10\36\6\0\5\36"+ - "\3\0\23\36\1\u0181\4\36\25\0\10\36\6\0\5\36"+ - "\3\0\11\36\1\u0182\16\36\25\0\10\36\6\0\5\36"+ - "\3\0\22\36\1\u0183\5\36\25\0\10\36\6\0\5\36"+ - "\3\0\3\36\1\u0184\24\36\25\0\10\36\6\0\5\36"+ - "\3\0\16\36\1\u0185\11\36\25\0\10\36\6\0\5\36"+ - "\3\0\15\36\1\u0186\12\36\25\0\10\36\6\0\5\36"+ - "\3\0\15\36\1\u0187\12\36\25\0\10\36\6\0\5\36"+ - "\3\0\16\36\1\u0188\11\36\25\0\10\36\6\0\5\36"+ - "\3\0\15\36\1\u0189\12\36\25\0\10\36\6\0\5\36"+ - "\3\0\15\36\1\u018a\12\36\25\0\10\36\6\0\5\36"+ - "\3\0\22\36\1\u018b\5\36\25\0\10\36\6\0\5\36"+ - "\3\0\20\36\1\u018c\7\36\25\0\10\36\6\0\5\36"+ - "\3\0\22\36\1\u018d\5\36\25\0\10\36\6\0\5\36"+ - "\3\0\20\36\1\u018e\7\36\25\0\10\36\6\0\5\36"+ - "\3\0\25\36\1\u018f\2\36\25\0\1\36\1\u0190\6\36"+ - "\6\0\5\36\3\0\30\36\25\0\10\36\6\0\5\36"+ - "\3\0\13\36\1\u0191\14\36\25\0\10\36\6\0\5\36"+ - "\3\0\11\36\1\u0192\16\36\25\0\10\36\6\0\5\36"+ - "\3\0\11\36\1\u0193\16\36\25\0\10\36\6\0\5\36"+ - "\3\0\13\36\1\u0194\14\36\25\0\10\36\6\0\5\36"+ - "\3\0\11\36\1\u0195\16\36\25\0\10\36\6\0\5\36"+ - "\3\0\11\36\1\u0196\16\36\25\0\10\36\6\0\5\36"+ - "\3\0\15\36\1\u0197\12\36\25\0\10\36\6\0\5\36"+ - "\3\0\16\36\1\u0198\11\36\25\0\10\36\6\0\5\36"+ - "\3\0\15\36\1\u0199\12\36\25\0\10\36\6\0\5\36"+ - "\3\0\16\36\1\u019a\11\36\25\0\10\36\6\0\5\36"+ - "\3\0\1\36\1\u019b\26\36\25\0\6\36\1\u019c\1\36"+ - "\6\0\5\36\3\0\30\36\25\0\2\36\1\u019d\5\36"+ - "\6\0\5\36\3\0\30\36\25\0\10\36\6\0\5\36"+ - "\3\0\21\36\1\u019e\1\36\1\u019f\4\36\25\0\10\36"+ - "\6\0\5\36\3\0\7\36\1\u01a0\20\36\25\0\10\36"+ - "\6\0\5\36\3\0\20\36\1\u01a1\7\36\25\0\10\36"+ - "\6\0\5\36\3\0\20\36\1\u01a2\7\36\25\0\10\36"+ - "\6\0\5\36\3\0\7\36\1\u01a3\20\36\25\0\10\36"+ - "\6\0\5\36\3\0\22\36\1\u01a4\5\36\25\0\10\36"+ - "\6\0\5\36\3\0\23\36\1\u01a5\4\36\25\0\10\36"+ - "\6\0\5\36\3\0\22\36\1\u01a6\5\36\25\0\10\36"+ - "\6\0\5\36\3\0\4\36\1\u01a7\23\36\25\0\10\36"+ - "\6\0\5\36\3\0\20\36\1\u01a8\7\36\25\0\10\36"+ - "\6\0\5\36\3\0\4\36\1\u01a9\23\36\25\0\10\36"+ - "\6\0\5\36\3\0\20\36\1\u01aa\7\36\25\0\10\36"+ - "\6\0\1\u01ab\4\36\3\0\30\36\25\0\10\36\6\0"+ - "\5\36\3\0\5\36\1\u01ac\22\36\25\0\10\36\6\0"+ - "\5\36\3\0\15\36\1\u01ad\12\36\25\0\10\36\6\0"+ - "\5\36\3\0\16\36\1\u01ae\11\36\25\0\10\36\6\0"+ - "\5\36\3\0\5\36\1\u01af\22\36\25\0\10\36\6\0"+ - "\5\36\3\0\16\36\1\u01b0\11\36\25\0\10\36\6\0"+ - "\5\36\3\0\1\36\1\u01b1\26\36\25\0\10\36\6\0"+ + "\5\36\3\0\6\36\1\u0145\1\36\1\u0146\1\u0147\11\36"+ + "\1\u0148\4\36\25\0\10\36\6\0\5\36\3\0\6\36"+ + "\1\u0149\1\36\1\u014a\1\u014b\11\36\1\u014c\4\36\25\0"+ + "\10\36\6\0\5\36\3\0\6\36\1\u014d\1\36\1\u014e"+ + "\1\u014f\11\36\1\u0150\4\36\25\0\10\36\6\0\5\36"+ + "\3\0\5\36\1\u0151\22\36\25\0\7\36\1\u0152\6\0"+ + "\5\36\3\0\30\36\25\0\10\36\6\0\5\36\3\0"+ + "\22\36\1\u0153\5\36\25\0\10\36\6\0\5\36\3\0"+ + "\1\36\1\u0154\26\36\25\0\10\36\6\0\5\36\3\0"+ + "\1\u0155\27\36\25\0\10\36\6\0\5\36\3\0\13\36"+ + "\1\u0156\14\36\25\0\10\36\6\0\5\36\3\0\11\36"+ + "\1\u0157\16\36\25\0\10\36\6\0\5\36\3\0\11\36"+ + "\1\u0158\16\36\25\0\10\36\6\0\5\36\3\0\13\36"+ + "\1\u0159\14\36\25\0\10\36\6\0\5\36\3\0\11\36"+ + "\1\u015a\16\36\25\0\10\36\6\0\5\36\3\0\11\36"+ + "\1\u015b\16\36\25\0\10\36\6\0\5\36\3\0\15\36"+ + "\1\u015c\12\36\25\0\10\36\6\0\5\36\3\0\16\36"+ + "\1\u015d\11\36\25\0\10\36\6\0\5\36\3\0\15\36"+ + "\1\u015e\12\36\25\0\10\36\6\0\5\36\3\0\16\36"+ + "\1\u015f\11\36\25\0\10\36\6\0\5\36\3\0\1\u0160"+ + "\27\36\25\0\10\36\6\0\5\36\3\0\2\36\1\u0161"+ + "\25\36\25\0\10\36\6\0\5\36\3\0\6\36\1\u0162"+ + "\12\36\1\u0163\1\36\1\u0164\4\36\25\0\10\36\6\0"+ + "\5\36\3\0\6\36\1\u0165\12\36\1\u0166\1\36\1\u0167"+ + "\4\36\25\0\10\36\6\0\5\36\3\0\11\36\1\u0168"+ + "\3\36\1\u0169\12\36\25\0\10\36\6\0\5\36\3\0"+ + "\11\36\1\u016a\3\36\1\u016b\12\36\25\0\1\u016c\7\36"+ + "\6\0\5\36\3\0\30\36\25\0\1\36\1\u016d\1\36"+ + "\1\u016e\3\36\1\u016f\6\0\5\36\3\0\30\36\25\0"+ + "\10\36\6\0\5\36\3\0\1\36\1\u0170\26\36\25\0"+ + "\10\36\6\0\5\36\3\0\16\36\1\u0171\11\36\25\0"+ + "\10\36\6\0\5\36\3\0\7\36\1\u0172\20\36\25\0"+ + "\10\36\6\0\5\36\3\0\5\36\1\u0173\22\36\25\0"+ + "\10\u012e\73\0\10\u012e\24\0\1\u0174\46\0\10\36\6\0"+ + "\5\36\3\0\3\36\1\u0175\24\36\25\0\10\36\6\0"+ + "\5\36\3\0\15\36\1\u0176\12\36\25\0\10\36\6\0"+ + "\5\36\3\0\21\36\1\u0177\6\36\25\0\10\36\6\0"+ + "\5\36\3\0\15\36\1\u0178\12\36\25\0\10\36\6\0"+ + "\5\36\3\0\13\36\1\u0179\14\36\25\0\10\36\6\0"+ + "\5\36\3\0\20\36\1\u017a\7\36\25\0\10\36\6\0"+ + "\5\36\3\0\5\36\1\u017b\22\36\25\0\10\36\6\0"+ + "\5\36\3\0\10\36\1\u017c\17\36\25\0\2\36\1\u017d"+ + "\1\u017e\1\u017f\3\36\6\0\5\36\3\0\30\36\25\0"+ + "\2\36\1\u0180\1\u0181\1\u0182\3\36\6\0\5\36\3\0"+ + "\30\36\25\0\2\36\1\u0183\1\u0184\1\u0185\3\36\6\0"+ + "\5\36\3\0\30\36\25\0\10\36\6\0\5\36\3\0"+ + "\11\36\1\u0186\16\36\25\0\10\36\6\0\5\36\3\0"+ + "\15\36\1\u0187\12\36\25\0\10\36\6\0\5\36\3\0"+ + "\5\36\1\u0188\22\36\25\0\10\36\6\0\5\36\3\0"+ + "\3\36\1\u0189\24\36\25\0\10\36\6\0\5\36\3\0"+ + "\22\36\1\u018a\5\36\25\0\10\36\6\0\5\36\3\0"+ + "\10\36\1\u018b\17\36\25\0\10\36\6\0\5\36\3\0"+ + "\20\36\1\u018c\7\36\25\0\10\36\6\0\5\36\3\0"+ + "\23\36\1\u018d\4\36\25\0\10\36\6\0\5\36\3\0"+ + "\11\36\1\u018e\16\36\25\0\10\36\6\0\5\36\3\0"+ + "\22\36\1\u018f\5\36\25\0\10\36\6\0\5\36\3\0"+ + "\3\36\1\u0190\24\36\25\0\10\36\6\0\5\36\3\0"+ + "\16\36\1\u0191\11\36\25\0\10\36\6\0\5\36\3\0"+ + "\15\36\1\u0192\12\36\25\0\10\36\6\0\5\36\3\0"+ + "\15\36\1\u0193\12\36\25\0\10\36\6\0\5\36\3\0"+ + "\16\36\1\u0194\11\36\25\0\10\36\6\0\5\36\3\0"+ + "\15\36\1\u0195\12\36\25\0\10\36\6\0\5\36\3\0"+ + "\15\36\1\u0196\12\36\25\0\10\36\6\0\5\36\3\0"+ + "\22\36\1\u0197\5\36\25\0\10\36\6\0\5\36\3\0"+ + "\20\36\1\u0198\7\36\25\0\10\36\6\0\5\36\3\0"+ + "\22\36\1\u0199\5\36\25\0\10\36\6\0\5\36\3\0"+ + "\20\36\1\u019a\7\36\25\0\10\36\6\0\5\36\3\0"+ + "\25\36\1\u019b\2\36\25\0\1\36\1\u019c\6\36\6\0"+ + "\5\36\3\0\30\36\25\0\10\36\6\0\5\36\3\0"+ + "\13\36\1\u019d\14\36\25\0\10\36\6\0\5\36\3\0"+ + "\11\36\1\u019e\16\36\25\0\10\36\6\0\5\36\3\0"+ + "\11\36\1\u019f\16\36\25\0\10\36\6\0\5\36\3\0"+ + "\13\36\1\u01a0\14\36\25\0\10\36\6\0\5\36\3\0"+ + "\11\36\1\u01a1\16\36\25\0\10\36\6\0\5\36\3\0"+ + "\11\36\1\u01a2\16\36\25\0\10\36\6\0\5\36\3\0"+ + "\15\36\1\u01a3\12\36\25\0\10\36\6\0\5\36\3\0"+ + "\16\36\1\u01a4\11\36\25\0\10\36\6\0\5\36\3\0"+ + "\15\36\1\u01a5\12\36\25\0\10\36\6\0\5\36\3\0"+ + "\16\36\1\u01a6\11\36\25\0\10\36\6\0\5\36\3\0"+ + "\1\36\1\u01a7\26\36\25\0\6\36\1\u01a8\1\36\6\0"+ + "\5\36\3\0\30\36\25\0\2\36\1\u01a9\5\36\6\0"+ + "\5\36\3\0\30\36\25\0\10\36\6\0\5\36\3\0"+ + "\21\36\1\u01aa\1\36\1\u01ab\4\36\25\0\10\36\6\0"+ + "\5\36\3\0\7\36\1\u01ac\20\36\25\0\10\36\6\0"+ + "\5\36\3\0\20\36\1\u01ad\7\36\25\0\10\36\6\0"+ + "\5\36\3\0\20\36\1\u01ae\7\36\25\0\10\36\6\0"+ + "\5\36\3\0\7\36\1\u01af\20\36\25\0\10\36\6\0"+ + "\5\36\3\0\22\36\1\u01b0\5\36\25\0\10\36\6\0"+ + "\5\36\3\0\23\36\1\u01b1\4\36\25\0\10\36\6\0"+ "\5\36\3\0\22\36\1\u01b2\5\36\25\0\10\36\6\0"+ - "\5\36\3\0\22\36\1\u01b3\5\36\25\0\10\36\6\0"+ - "\5\36\3\0\1\36\1\u01b4\26\36\25\0\10\36\6\0"+ - "\5\36\3\0\22\36\1\u01b5\5\36\25\0\10\36\6\0"+ - "\5\36\3\0\22\36\1\u01b6\5\36\25\0\10\36\6\0"+ - "\5\36\3\0\14\36\1\u01b7\13\36\25\0\10\36\6\0"+ - "\5\36\3\0\14\36\1\u01b8\13\36\25\0\10\36\6\0"+ - "\5\36\3\0\20\36\1\u01b9\7\36\25\0\1\u01ba\7\36"+ - "\6\0\5\36\3\0\30\36\25\0\10\36\6\0\5\36"+ - "\3\0\16\36\1\u01bb\11\36\25\0\10\36\6\0\5\36"+ - "\3\0\15\36\1\u01bc\12\36\25\0\10\36\6\0\5\36"+ - "\3\0\15\36\1\u01bd\12\36\25\0\10\36\6\0\5\36"+ - "\3\0\16\36\1\u01be\11\36\25\0\10\36\6\0\5\36"+ - "\3\0\15\36\1\u01bf\12\36\25\0\10\36\6\0\5\36"+ - "\3\0\15\36\1\u01c0\12\36\25\0\10\36\6\0\5\36"+ + "\5\36\3\0\4\36\1\u01b3\23\36\25\0\10\36\6\0"+ + "\5\36\3\0\20\36\1\u01b4\7\36\25\0\10\36\6\0"+ + "\5\36\3\0\4\36\1\u01b5\23\36\25\0\10\36\6\0"+ + "\5\36\3\0\20\36\1\u01b6\7\36\25\0\10\36\6\0"+ + "\1\u01b7\4\36\3\0\30\36\25\0\10\36\6\0\5\36"+ + "\3\0\5\36\1\u01b8\22\36\25\0\10\36\6\0\5\36"+ + "\3\0\15\36\1\u01b9\12\36\25\0\10\36\6\0\5\36"+ + "\3\0\16\36\1\u01ba\11\36\25\0\10\36\6\0\5\36"+ + "\3\0\5\36\1\u01bb\22\36\25\0\10\36\6\0\5\36"+ + "\3\0\16\36\1\u01bc\11\36\25\0\10\36\6\0\5\36"+ + "\3\0\1\36\1\u01bd\26\36\25\0\10\36\6\0\5\36"+ + "\3\0\22\36\1\u01be\5\36\25\0\10\36\6\0\5\36"+ + "\3\0\22\36\1\u01bf\5\36\25\0\10\36\6\0\5\36"+ + "\3\0\1\36\1\u01c0\26\36\25\0\10\36\6\0\5\36"+ "\3\0\22\36\1\u01c1\5\36\25\0\10\36\6\0\5\36"+ - "\3\0\20\36\1\u01c2\7\36\25\0\10\36\6\0\5\36"+ - "\3\0\22\36\1\u01c3\5\36\25\0\10\36\6\0\5\36"+ - "\3\0\20\36\1\u01c4\7\36\25\0\2\36\1\u01c5\5\36"+ - "\6\0\5\36\3\0\30\36\25\0\10\36\6\0\5\36"+ - "\3\0\6\36\1\u01c6\12\36\1\u01c7\1\36\1\u01c8\4\36"+ - "\25\0\10\36\6\0\5\36\3\0\6\36\1\u01c9\12\36"+ - "\1\u01ca\1\36\1\u01cb\4\36\25\0\10\36\6\0\5\36"+ - "\3\0\11\36\1\u01cc\3\36\1\u01cd\12\36\25\0\10\36"+ - "\6\0\5\36\3\0\11\36\1\u01ce\3\36\1\u01cf\12\36"+ - "\25\0\10\36\6\0\5\36\3\0\5\36\1\u01d0\22\36"+ - "\25\0\10\36\6\0\5\36\3\0\14\36\1\u01d1\13\36"+ - "\25\0\10\36\6\0\5\36\3\0\16\36\1\u01d2\11\36"+ - "\25\0\10\36\6\0\5\36\3\0\1\u01d3\27\36\25\0"+ - "\10\36\6\0\5\36\3\0\5\36\1\u01d4\3\36\1\u01d5"+ - "\16\36\25\0\10\36\6\0\5\36\3\0\16\36\1\u01d6"+ - "\11\36\25\0\10\36\6\0\5\36\3\0\5\36\1\u01d7"+ - "\22\36\25\0\10\36\6\0\5\36\3\0\1\u01d8\27\36"+ - "\25\0\10\36\6\0\5\36\3\0\21\36\1\u01d9\6\36"+ - "\25\0\10\36\6\0\5\36\3\0\1\u01da\27\36\25\0"+ - "\10\36\6\0\5\36\3\0\16\36\1\u01db\11\36\25\0"+ - "\10\36\6\0\5\36\3\0\15\36\1\u01dc\12\36\25\0"+ - "\10\36\6\0\5\36\3\0\15\36\1\u01dd\12\36\25\0"+ - "\10\36\6\0\5\36\3\0\22\36\1\u01de\5\36\25\0"+ - "\10\36\6\0\5\36\3\0\22\36\1\u01df\5\36\25\0"+ - "\10\36\6\0\5\36\3\0\11\36\1\u01e0\16\36\25\0"+ - "\10\36\6\0\5\36\3\0\6\36\1\u01e1\21\36\25\0"+ - "\10\36\6\0\5\36\3\0\1\36\1\u01e2\26\36\25\0"+ - "\10\36\6\0\5\36\3\0\22\36\1\u01e3\5\36\25\0"+ - "\10\36\6\0\5\36\3\0\22\36\1\u01e4\5\36\25\0"+ - "\10\36\6\0\5\36\3\0\1\36\1\u01e5\26\36\25\0"+ - "\10\36\6\0\5\36\3\0\22\36\1\u01e6\5\36\25\0"+ - "\10\36\6\0\5\36\3\0\22\36\1\u01e7\5\36\25\0"+ - "\10\36\6\0\5\36\3\0\14\36\1\u01e8\13\36\25\0"+ - "\10\36\6\0\5\36\3\0\14\36\1\u01e9\13\36\25\0"+ - "\10\36\6\0\5\36\3\0\23\36\1\u01ea\4\36\25\0"+ - "\10\36\6\0\5\36\3\0\13\36\1\u01eb\14\36\25\0"+ - "\10\36\6\0\5\36\3\0\11\36\1\u01ec\16\36\25\0"+ - "\10\36\6\0\5\36\3\0\11\36\1\u01ed\16\36\25\0"+ - "\10\36\6\0\5\36\3\0\13\36\1\u01ee\14\36\25\0"+ - "\10\36\6\0\5\36\3\0\11\36\1\u01ef\16\36\25\0"+ - "\10\36\6\0\5\36\3\0\11\36\1\u01f0\16\36\25\0"+ - "\10\36\6\0\5\36\3\0\15\36\1\u01f1\12\36\25\0"+ - "\10\36\6\0\5\36\3\0\16\36\1\u01f2\11\36\25\0"+ - "\10\36\6\0\5\36\3\0\15\36\1\u01f3\12\36\25\0"+ - "\10\36\6\0\5\36\3\0\16\36\1\u01f4\11\36\25\0"+ - "\10\36\6\0\5\36\3\0\23\36\1\u01f5\4\36\25\0"+ - "\10\36\6\0\5\36\3\0\1\36\1\u01f6\26\36\25\0"+ - "\10\36\6\0\5\36\3\0\15\36\1\u01f7\12\36\25\0"+ - "\10\36\6\0\5\36\3\0\23\36\1\u01f8\4\36\25\0"+ - "\10\36\6\0\5\36\3\0\3\36\1\u01f9\24\36\25\0"+ - "\10\36\6\0\5\36\3\0\21\36\1\u01fa\6\36\25\0"+ - "\1\36\1\u01fb\1\u01fc\1\u01fd\4\36\6\0\5\36\3\0"+ - "\3\36\1\u01fe\1\u01ff\7\36\1\u0200\4\36\1\u0201\6\36"+ - "\25\0\10\36\6\0\5\36\3\0\20\36\1\u0202\7\36"+ - "\25\0\10\36\6\0\5\36\3\0\21\36\1\u0203\6\36"+ - "\25\0\10\36\6\0\5\36\3\0\22\36\1\u0204\5\36"+ - "\25\0\10\36\6\0\5\36\3\0\13\36\1\u0205\14\36"+ - "\25\0\10\36\6\0\5\36\3\0\22\36\1\u0206\5\36"+ - "\25\0\10\36\6\0\5\36\3\0\22\36\1\u0207\5\36"+ - "\25\0\10\36\6\0\5\36\3\0\15\36\1\u0208\12\36"+ - "\25\0\10\36\6\0\5\36\3\0\16\36\1\u0209\11\36"+ - "\25\0\10\36\6\0\5\36\3\0\15\36\1\u020a\12\36"+ - "\25\0\10\36\6\0\5\36\3\0\15\36\1\u020b\12\36"+ - "\25\0\10\36\6\0\5\36\3\0\16\36\1\u020c\11\36"+ - "\25\0\10\36\6\0\5\36\3\0\15\36\1\u020d\12\36"+ - "\25\0\10\36\6\0\5\36\3\0\15\36\1\u020e\12\36"+ - "\25\0\10\36\6\0\5\36\3\0\22\36\1\u020f\5\36"+ - "\25\0\10\36\6\0\5\36\3\0\20\36\1\u0210\7\36"+ - "\25\0\10\36\6\0\5\36\3\0\22\36\1\u0211\5\36"+ - "\25\0\10\36\6\0\5\36\3\0\20\36\1\u0212\7\36"+ - "\25\0\10\36\6\0\5\36\3\0\17\36\1\u0213\10\36"+ - "\25\0\10\36\6\0\5\36\3\0\20\36\1\u0214\7\36"+ - "\25\0\10\36\6\0\5\36\3\0\7\36\1\u0215\20\36"+ - "\25\0\10\36\6\0\5\36\3\0\7\36\1\u0216\20\36"+ - "\25\0\10\36\6\0\5\36\3\0\16\36\1\u0217\11\36"+ - "\25\0\10\36\6\0\5\36\3\0\5\36\1\u0218\22\36"+ - "\25\0\10\36\6\0\5\36\3\0\4\36\1\u0219\23\36"+ - "\25\0\10\36\6\0\5\36\3\0\4\36\1\u021a\23\36"+ - "\25\0\10\36\6\0\5\36\3\0\4\36\1\u021b\23\36"+ - "\25\0\10\36\6\0\5\36\3\0\23\36\1\u021c\4\36"+ - "\25\0\10\36\6\0\5\36\3\0\5\36\1\u021d\22\36"+ - "\25\0\10\36\6\0\5\36\3\0\23\36\1\u021e\4\36"+ - "\25\0\10\36\6\0\5\36\3\0\22\36\1\u021f\5\36"+ - "\25\0\10\36\6\0\5\36\3\0\14\36\1\u0220\13\36"+ - "\25\0\10\36\6\0\5\36\3\0\22\36\1\u0221\5\36"+ - "\25\0\10\36\6\0\5\36\3\0\5\36\1\u0222\22\36"+ - "\25\0\10\36\6\0\5\36\3\0\16\36\1\u0223\11\36"+ - "\25\0\10\36\6\0\5\36\3\0\16\36\1\u0224\11\36"+ - "\25\0\10\36\6\0\5\36\3\0\1\36\1\u0225\26\36"+ - "\25\0\10\36\6\0\5\36\3\0\22\36\1\u0226\5\36"+ - "\25\0\10\36\6\0\5\36\3\0\22\36\1\u0227\5\36"+ - "\25\0\10\36\6\0\5\36\3\0\1\36\1\u0228\26\36"+ - "\25\0\10\36\6\0\5\36\3\0\22\36\1\u0229\5\36"+ - "\25\0\10\36\6\0\5\36\3\0\22\36\1\u022a\5\36"+ - "\25\0\10\36\6\0\5\36\3\0\14\36\1\u022b\13\36"+ - "\25\0\10\36\6\0\5\36\3\0\14\36\1\u022c\13\36"+ - "\25\0\10\36\6\0\5\36\3\0\20\36\1\u022d\7\36"+ - "\25\0\10\36\6\0\5\36\3\0\10\36\1\u022e\17\36"+ - "\25\0\10\36\6\0\5\36\3\0\14\36\1\u022f\13\36"+ - "\25\0\10\36\6\0\5\36\3\0\20\36\1\u0230\7\36"+ - "\25\0\10\36\6\0\5\36\3\0\1\u0231\27\36\25\0"+ - "\10\36\6\0\5\36\3\0\2\36\1\u0232\25\36\25\0"+ - "\10\36\6\0\5\36\3\0\17\36\1\u0233\10\36\25\0"+ - "\10\36\6\0\5\36\3\0\13\36\1\u0234\14\36\25\0"+ - "\10\36\6\0\5\36\3\0\16\36\1\u0235\11\36\25\0"+ - "\10\36\6\0\5\36\3\0\1\u0236\27\36\25\0\10\36"+ - "\6\0\5\36\3\0\1\36\1\u0237\26\36\25\0\10\36"+ - "\6\0\5\36\3\0\1\36\1\u0238\26\36\25\0\10\36"+ - "\6\0\5\36\3\0\20\36\1\u0239\7\36\25\0\10\36"+ - "\6\0\5\36\3\0\22\36\1\u023a\5\36\25\0\10\36"+ - "\6\0\5\36\3\0\22\36\1\u023b\5\36\25\0\10\36"+ - "\6\0\5\36\3\0\1\u023c\27\36\25\0\10\36\6\0"+ - "\5\36\3\0\1\36\1\u023d\26\36\25\0\10\36\6\0"+ - "\5\36\3\0\17\36\1\u023e\10\36\25\0\10\36\6\0"+ - "\5\36\3\0\22\36\1\u023f\5\36\25\0\10\36\6\0"+ - "\5\36\3\0\1\36\1\u0240\26\36\25\0\10\36\6\0"+ - "\5\36\3\0\5\36\1\u0241\22\36\25\0\10\36\6\0"+ - "\5\36\3\0\22\36\1\u0242\5\36\25\0\10\36\6\0"+ - "\5\36\3\0\22\36\1\u0243\5\36\25\0\10\36\6\0"+ - "\5\36\3\0\20\36\1\u0244\7\36\25\0\10\36\6\0"+ - "\5\36\3\0\21\36\1\u0245\6\36\25\0\10\36\6\0"+ - "\5\36\3\0\15\36\1\u0246\12\36\25\0\10\36\6\0"+ + "\3\0\22\36\1\u01c2\5\36\25\0\10\36\6\0\5\36"+ + "\3\0\14\36\1\u01c3\13\36\25\0\10\36\6\0\5\36"+ + "\3\0\14\36\1\u01c4\13\36\25\0\10\36\6\0\5\36"+ + "\3\0\20\36\1\u01c5\7\36\25\0\1\u01c6\7\36\6\0"+ + "\5\36\3\0\30\36\25\0\10\36\6\0\5\36\3\0"+ + "\16\36\1\u01c7\11\36\25\0\10\36\6\0\5\36\3\0"+ + "\15\36\1\u01c8\12\36\25\0\10\36\6\0\5\36\3\0"+ + "\15\36\1\u01c9\12\36\25\0\10\36\6\0\5\36\3\0"+ + "\16\36\1\u01ca\11\36\25\0\10\36\6\0\5\36\3\0"+ + "\15\36\1\u01cb\12\36\25\0\10\36\6\0\5\36\3\0"+ + "\15\36\1\u01cc\12\36\25\0\10\36\6\0\5\36\3\0"+ + "\22\36\1\u01cd\5\36\25\0\10\36\6\0\5\36\3\0"+ + "\20\36\1\u01ce\7\36\25\0\10\36\6\0\5\36\3\0"+ + "\22\36\1\u01cf\5\36\25\0\10\36\6\0\5\36\3\0"+ + "\20\36\1\u01d0\7\36\25\0\2\36\1\u01d1\5\36\6\0"+ + "\5\36\3\0\30\36\25\0\10\36\6\0\5\36\3\0"+ + "\6\36\1\u01d2\12\36\1\u01d3\1\36\1\u01d4\4\36\25\0"+ + "\10\36\6\0\5\36\3\0\6\36\1\u01d5\12\36\1\u01d6"+ + "\1\36\1\u01d7\4\36\25\0\10\36\6\0\5\36\3\0"+ + "\11\36\1\u01d8\3\36\1\u01d9\12\36\25\0\10\36\6\0"+ + "\5\36\3\0\11\36\1\u01da\3\36\1\u01db\12\36\25\0"+ + "\10\36\6\0\5\36\3\0\5\36\1\u01dc\22\36\25\0"+ + "\10\36\6\0\5\36\3\0\14\36\1\u01dd\13\36\25\0"+ + "\10\36\6\0\5\36\3\0\16\36\1\u01de\11\36\25\0"+ + "\10\36\6\0\5\36\3\0\1\u01df\27\36\25\0\10\36"+ + "\6\0\5\36\3\0\5\36\1\u01e0\3\36\1\u01e1\16\36"+ + "\25\0\10\36\6\0\5\36\3\0\16\36\1\u01e2\11\36"+ + "\25\0\10\36\6\0\5\36\3\0\5\36\1\u01e3\22\36"+ + "\25\0\10\36\6\0\5\36\3\0\1\u01e4\27\36\25\0"+ + "\10\36\6\0\5\36\3\0\21\36\1\u01e5\6\36\25\0"+ + "\10\36\6\0\5\36\3\0\1\u01e6\27\36\25\0\10\36"+ + "\6\0\5\36\3\0\16\36\1\u01e7\11\36\25\0\10\36"+ + "\6\0\5\36\3\0\15\36\1\u01e8\12\36\25\0\10\36"+ + "\6\0\5\36\3\0\15\36\1\u01e9\12\36\25\0\10\36"+ + "\6\0\5\36\3\0\22\36\1\u01ea\5\36\25\0\10\36"+ + "\6\0\5\36\3\0\22\36\1\u01eb\5\36\25\0\10\36"+ + "\6\0\5\36\3\0\11\36\1\u01ec\16\36\25\0\10\36"+ + "\6\0\5\36\3\0\6\36\1\u01ed\21\36\25\0\10\36"+ + "\6\0\5\36\3\0\1\36\1\u01ee\26\36\25\0\10\36"+ + "\6\0\5\36\3\0\22\36\1\u01ef\5\36\25\0\10\36"+ + "\6\0\5\36\3\0\22\36\1\u01f0\5\36\25\0\10\36"+ + "\6\0\5\36\3\0\1\36\1\u01f1\26\36\25\0\10\36"+ + "\6\0\5\36\3\0\22\36\1\u01f2\5\36\25\0\10\36"+ + "\6\0\5\36\3\0\22\36\1\u01f3\5\36\25\0\10\36"+ + "\6\0\5\36\3\0\14\36\1\u01f4\13\36\25\0\10\36"+ + "\6\0\5\36\3\0\14\36\1\u01f5\13\36\25\0\10\36"+ + "\6\0\5\36\3\0\23\36\1\u01f6\4\36\25\0\10\36"+ + "\6\0\5\36\3\0\13\36\1\u01f7\14\36\25\0\10\36"+ + "\6\0\5\36\3\0\11\36\1\u01f8\16\36\25\0\10\36"+ + "\6\0\5\36\3\0\11\36\1\u01f9\16\36\25\0\10\36"+ + "\6\0\5\36\3\0\13\36\1\u01fa\14\36\25\0\10\36"+ + "\6\0\5\36\3\0\11\36\1\u01fb\16\36\25\0\10\36"+ + "\6\0\5\36\3\0\11\36\1\u01fc\16\36\25\0\10\36"+ + "\6\0\5\36\3\0\15\36\1\u01fd\12\36\25\0\10\36"+ + "\6\0\5\36\3\0\16\36\1\u01fe\11\36\25\0\10\36"+ + "\6\0\5\36\3\0\15\36\1\u01ff\12\36\25\0\10\36"+ + "\6\0\5\36\3\0\16\36\1\u0200\11\36\25\0\10\36"+ + "\6\0\5\36\3\0\23\36\1\u0201\4\36\25\0\10\36"+ + "\6\0\5\36\3\0\1\36\1\u0202\26\36\25\0\10\36"+ + "\6\0\5\36\3\0\15\36\1\u0203\12\36\25\0\10\36"+ + "\6\0\5\36\3\0\23\36\1\u0204\4\36\25\0\10\36"+ + "\6\0\5\36\3\0\3\36\1\u0205\24\36\25\0\10\36"+ + "\6\0\5\36\3\0\21\36\1\u0206\6\36\25\0\1\36"+ + "\1\u0207\1\u0208\1\u0209\4\36\6\0\5\36\3\0\3\36"+ + "\1\u020a\1\u020b\7\36\1\u020c\4\36\1\u020d\6\36\25\0"+ + "\10\36\6\0\5\36\3\0\20\36\1\u020e\7\36\25\0"+ + "\10\36\6\0\5\36\3\0\21\36\1\u020f\6\36\25\0"+ + "\10\36\6\0\5\36\3\0\22\36\1\u0210\5\36\25\0"+ + "\10\36\6\0\5\36\3\0\13\36\1\u0211\14\36\25\0"+ + "\10\36\6\0\5\36\3\0\22\36\1\u0212\5\36\25\0"+ + "\10\36\6\0\5\36\3\0\22\36\1\u0213\5\36\25\0"+ + "\10\36\6\0\5\36\3\0\15\36\1\u0214\12\36\25\0"+ + "\10\36\6\0\5\36\3\0\16\36\1\u0215\11\36\25\0"+ + "\10\36\6\0\5\36\3\0\15\36\1\u0216\12\36\25\0"+ + "\10\36\6\0\5\36\3\0\15\36\1\u0217\12\36\25\0"+ + "\10\36\6\0\5\36\3\0\16\36\1\u0218\11\36\25\0"+ + "\10\36\6\0\5\36\3\0\15\36\1\u0219\12\36\25\0"+ + "\10\36\6\0\5\36\3\0\15\36\1\u021a\12\36\25\0"+ + "\10\36\6\0\5\36\3\0\22\36\1\u021b\5\36\25\0"+ + "\10\36\6\0\5\36\3\0\20\36\1\u021c\7\36\25\0"+ + "\10\36\6\0\5\36\3\0\22\36\1\u021d\5\36\25\0"+ + "\10\36\6\0\5\36\3\0\20\36\1\u021e\7\36\25\0"+ + "\10\36\6\0\5\36\3\0\17\36\1\u021f\10\36\25\0"+ + "\10\36\6\0\5\36\3\0\20\36\1\u0220\7\36\25\0"+ + "\10\36\6\0\5\36\3\0\7\36\1\u0221\20\36\25\0"+ + "\10\36\6\0\5\36\3\0\7\36\1\u0222\20\36\25\0"+ + "\10\36\6\0\5\36\3\0\16\36\1\u0223\11\36\25\0"+ + "\10\36\6\0\5\36\3\0\5\36\1\u0224\22\36\25\0"+ + "\10\36\6\0\5\36\3\0\4\36\1\u0225\23\36\25\0"+ + "\10\36\6\0\5\36\3\0\4\36\1\u0226\23\36\25\0"+ + "\10\36\6\0\5\36\3\0\4\36\1\u0227\23\36\25\0"+ + "\10\36\6\0\5\36\3\0\23\36\1\u0228\4\36\25\0"+ + "\10\36\6\0\5\36\3\0\5\36\1\u0229\22\36\25\0"+ + "\10\36\6\0\5\36\3\0\23\36\1\u022a\4\36\25\0"+ + "\10\36\6\0\5\36\3\0\22\36\1\u022b\5\36\25\0"+ + "\10\36\6\0\5\36\3\0\14\36\1\u022c\13\36\25\0"+ + "\10\36\6\0\5\36\3\0\22\36\1\u022d\5\36\25\0"+ + "\10\36\6\0\5\36\3\0\5\36\1\u022e\22\36\25\0"+ + "\10\36\6\0\5\36\3\0\16\36\1\u022f\11\36\25\0"+ + "\10\36\6\0\5\36\3\0\16\36\1\u0230\11\36\25\0"+ + "\10\36\6\0\5\36\3\0\1\36\1\u0231\26\36\25\0"+ + "\10\36\6\0\5\36\3\0\22\36\1\u0232\5\36\25\0"+ + "\10\36\6\0\5\36\3\0\22\36\1\u0233\5\36\25\0"+ + "\10\36\6\0\5\36\3\0\1\36\1\u0234\26\36\25\0"+ + "\10\36\6\0\5\36\3\0\22\36\1\u0235\5\36\25\0"+ + "\10\36\6\0\5\36\3\0\22\36\1\u0236\5\36\25\0"+ + "\10\36\6\0\5\36\3\0\14\36\1\u0237\13\36\25\0"+ + "\10\36\6\0\5\36\3\0\14\36\1\u0238\13\36\25\0"+ + "\10\36\6\0\5\36\3\0\20\36\1\u0239\7\36\25\0"+ + "\10\36\6\0\5\36\3\0\10\36\1\u023a\17\36\25\0"+ + "\10\36\6\0\5\36\3\0\14\36\1\u023b\13\36\25\0"+ + "\10\36\6\0\5\36\3\0\20\36\1\u023c\7\36\25\0"+ + "\10\36\6\0\5\36\3\0\1\u023d\27\36\25\0\10\36"+ + "\6\0\5\36\3\0\2\36\1\u023e\25\36\25\0\10\36"+ + "\6\0\5\36\3\0\17\36\1\u023f\10\36\25\0\10\36"+ + "\6\0\5\36\3\0\13\36\1\u0240\14\36\25\0\10\36"+ + "\6\0\5\36\3\0\16\36\1\u0241\11\36\25\0\10\36"+ + "\6\0\5\36\3\0\1\u0242\27\36\25\0\10\36\6\0"+ + "\5\36\3\0\1\36\1\u0243\26\36\25\0\10\36\6\0"+ + "\5\36\3\0\1\36\1\u0244\26\36\25\0\10\36\6\0"+ + "\5\36\3\0\20\36\1\u0245\7\36\25\0\10\36\6\0"+ + "\5\36\3\0\22\36\1\u0246\5\36\25\0\10\36\6\0"+ "\5\36\3\0\22\36\1\u0247\5\36\25\0\10\36\6\0"+ - "\5\36\3\0\14\36\1\u0248\13\36\25\0\10\36\6\0"+ - "\5\36\3\0\21\36\1\u0249\6\36\25\0\10\36\6\0"+ - "\5\36\3\0\27\36\1\u024a\25\0\10\36\6\0\5\36"+ - "\3\0\1\36\1\u024b\26\36\25\0\10\36\6\0\5\36"+ - "\3\0\20\36\1\u024c\7\36\25\0\10\36\6\0\5\36"+ - "\3\0\1\u024d\27\36\25\0\10\36\6\0\5\36\3\0"+ - "\10\36\1\u024e\17\36\25\0\10\36\6\0\5\36\3\0"+ - "\11\36\1\u024f\16\36\25\0\10\36\6\0\5\36\3\0"+ - "\1\36\1\u0250\26\36\25\0\10\36\6\0\5\36\3\0"+ - "\20\36\1\u0251\7\36\25\0\10\36\6\0\5\36\3\0"+ - "\22\36\1\u0252\5\36\25\0\10\36\6\0\5\36\3\0"+ - "\20\36\1\u0253\7\36\25\0\10\36\6\0\5\36\3\0"+ - "\20\36\1\u0254\7\36\25\0\10\36\6\0\5\36\3\0"+ - "\20\36\1\u0255\7\36\25\0\10\36\6\0\5\36\3\0"+ - "\1\36\1\u0256\26\36\25\0\10\36\6\0\5\36\3\0"+ - "\1\u0257\27\36\25\0\10\36\6\0\5\36\3\0\21\36"+ - "\1\u0258\6\36\25\0\10\36\6\0\5\36\3\0\7\36"+ - "\1\u0259\20\36\25\0\10\36\6\0\5\36\3\0\7\36"+ - "\1\u025a\20\36\25\0\10\36\6\0\5\36\3\0\7\36"+ - "\1\u025b\20\36\25\0\10\36\6\0\5\36\3\0\11\36"+ - "\1\u025c\16\36\25\0\10\36\6\0\5\36\3\0\1\36"+ - "\1\u025d\26\36\25\0\10\36\6\0\5\36\3\0\20\36"+ - "\1\u025e\7\36\25\0\2\36\1\u025f\5\36\6\0\5\36"+ - "\3\0\3\36\1\u0260\10\36\1\u0261\13\36\25\0\10\36"+ - "\6\0\5\36\3\0\1\36\1\u0262\26\36\25\0\10\36"+ - "\6\0\5\36\3\0\5\36\1\u0263\22\36\25\0\10\36"+ - "\6\0\5\36\3\0\2\36\1\u0264\25\36\25\0\10\36"+ - "\6\0\5\36\3\0\2\36\1\u0265\25\36\25\0\10\36"+ - "\6\0\5\36\3\0\21\36\1\u0266\6\36\25\0\10\36"+ - "\6\0\5\36\3\0\27\36\1\u0267\25\0\10\36\6\0"+ - "\5\36\3\0\20\36\1\u0268\7\36\25\0\10\36\6\0"+ - "\5\36\3\0\4\36\1\u0269\23\36\25\0\10\36\6\0"+ - "\5\36\3\0\23\36\1\u026a\4\36\25\0\10\36\6\0"+ - "\5\36\3\0\23\36\1\u026b\4\36\25\0\10\36\6\0"+ - "\5\36\3\0\14\36\1\u026c\13\36\25\0\10\36\6\0"+ - "\5\36\3\0\1\u026d\27\36\25\0\10\36\6\0\5\36"+ - "\3\0\16\36\1\u026e\11\36\25\0\10\36\6\0\5\36"+ - "\3\0\1\36\1\u026f\26\36\25\0\10\36\6\0\5\36"+ - "\3\0\1\u0270\27\36\25\0\10\36\6\0\5\36\3\0"+ - "\2\36\1\u0271\25\36\25\0\10\36\6\0\5\36\3\0"+ - "\13\36\1\u0272\14\36\25\0\10\36\6\0\5\36\3\0"+ - "\17\36\1\u0273\10\36\25\0\1\36\1\u0274\1\u0275\1\u0276"+ - "\4\36\6\0\5\36\3\0\30\36\25\0\10\36\6\0"+ - "\5\36\3\0\15\36\1\u0277\12\36\25\0\10\36\6\0"+ - "\5\36\3\0\27\36\1\u0278\25\0\10\36\6\0\5\36"+ - "\3\0\1\36\1\u0279\26\36\25\0\10\36\6\0\5\36"+ - "\3\0\5\36\1\u027a\22\36\25\0\10\36\6\0\5\36"+ - "\3\0\22\36\1\u027b\5\36\25\0\10\36\6\0\5\36"+ - "\3\0\13\36\1\u027c\14\36\25\0\10\36\6\0\5\36"+ - "\3\0\4\36\1\u027d\23\36\25\0\10\36\6\0\5\36"+ - "\3\0\4\36\1\u027e\23\36\25\0\10\36\6\0\5\36"+ - "\3\0\4\36\1\u027f\23\36\25\0\10\36\6\0\5\36"+ - "\3\0\20\36\1\u0280\7\36\25\0\10\36\6\0\5\36"+ - "\3\0\1\u0281\27\36\25\0\10\36\6\0\5\36\3\0"+ - "\11\36\1\u0282\16\36\25\0\10\36\6\0\5\36\3\0"+ - "\5\36\1\u0283\22\36\25\0\10\36\6\0\5\36\3\0"+ - "\1\u0284\27\36\25\0\10\36\6\0\5\36\3\0\20\36"+ - "\1\u0285\7\36\25\0\10\36\6\0\5\36\3\0\1\36"+ - "\1\u0286\26\36\25\0\10\36\6\0\5\36\3\0\21\36"+ - "\1\u0287\6\36\25\0\10\36\6\0\5\36\3\0\4\36"+ - "\1\u0288\23\36\25\0\10\36\6\0\5\36\3\0\1\36"+ - "\1\u0289\26\36\25\0\10\36\6\0\5\36\3\0\1\36"+ - "\1\u028a\26\36\25\0\10\36\6\0\5\36\3\0\20\36"+ - "\1\u028b\7\36\25\0\10\36\6\0\5\36\3\0\1\36"+ - "\1\u028c\26\36\25\0\10\36\6\0\5\36\3\0\1\u028d"+ - "\27\36\25\0\10\36\6\0\5\36\3\0\20\36\1\u028e"+ - "\7\36\25\0\10\36\6\0\5\36\3\0\27\36\1\u028f"+ - "\25\0\10\36\6\0\5\36\3\0\20\36\1\u0290\7\36"+ - "\25\0\10\36\6\0\5\36\3\0\14\36\1\u0291\13\36"+ - "\25\0\2\36\1\u0292\5\36\6\0\5\36\3\0\30\36"+ - "\25\0\10\36\6\0\5\36\3\0\20\36\1\u0293\7\36"+ - "\25\0\10\36\6\0\5\36\3\0\1\36\1\u0294\26\36"+ - "\25\0\10\36\6\0\5\36\3\0\17\36\1\u0295\10\36"+ - "\25\0\10\36\6\0\5\36\3\0\4\36\1\u0296\23\36"+ - "\25\0\10\36\6\0\5\36\3\0\1\36\1\u0297\26\36"+ - "\25\0\10\36\6\0\5\36\3\0\27\36\1\u0298\25\0"+ - "\10\36\6\0\5\36\3\0\13\36\1\u0299\14\36\25\0"+ - "\10\36\6\0\5\36\3\0\27\36\1\u029a\25\0\10\36"+ - "\6\0\5\36\3\0\5\36\1\u029b\22\36\25\0\10\36"+ - "\6\0\5\36\3\0\4\36\1\u029c\23\36\25\0\10\36"+ - "\6\0\5\36\3\0\1\u029d\27\36\25\0\2\36\1\u029e"+ - "\5\36\6\0\5\36\3\0\30\36\25\0\10\36\6\0"+ - "\5\36\3\0\4\36\1\u029f\23\36\5\0"; + "\5\36\3\0\1\u0248\27\36\25\0\10\36\6\0\5\36"+ + "\3\0\1\36\1\u0249\26\36\25\0\10\36\6\0\5\36"+ + "\3\0\17\36\1\u024a\10\36\25\0\10\36\6\0\5\36"+ + "\3\0\22\36\1\u024b\5\36\25\0\10\36\6\0\5\36"+ + "\3\0\1\36\1\u024c\26\36\25\0\10\36\6\0\5\36"+ + "\3\0\5\36\1\u024d\22\36\25\0\10\36\6\0\5\36"+ + "\3\0\22\36\1\u024e\5\36\25\0\10\36\6\0\5\36"+ + "\3\0\22\36\1\u024f\5\36\25\0\10\36\6\0\5\36"+ + "\3\0\20\36\1\u0250\7\36\25\0\10\36\6\0\5\36"+ + "\3\0\21\36\1\u0251\6\36\25\0\10\36\6\0\5\36"+ + "\3\0\15\36\1\u0252\12\36\25\0\10\36\6\0\5\36"+ + "\3\0\22\36\1\u0253\5\36\25\0\10\36\6\0\5\36"+ + "\3\0\14\36\1\u0254\13\36\25\0\10\36\6\0\5\36"+ + "\3\0\21\36\1\u0255\6\36\25\0\10\36\6\0\5\36"+ + "\3\0\27\36\1\u0256\25\0\10\36\6\0\5\36\3\0"+ + "\1\36\1\u0257\26\36\25\0\10\36\6\0\5\36\3\0"+ + "\20\36\1\u0258\7\36\25\0\10\36\6\0\5\36\3\0"+ + "\1\u0259\27\36\25\0\10\36\6\0\5\36\3\0\10\36"+ + "\1\u025a\17\36\25\0\10\36\6\0\5\36\3\0\11\36"+ + "\1\u025b\16\36\25\0\10\36\6\0\5\36\3\0\1\36"+ + "\1\u025c\26\36\25\0\10\36\6\0\5\36\3\0\20\36"+ + "\1\u025d\7\36\25\0\10\36\6\0\5\36\3\0\22\36"+ + "\1\u025e\5\36\25\0\10\36\6\0\5\36\3\0\20\36"+ + "\1\u025f\7\36\25\0\10\36\6\0\5\36\3\0\20\36"+ + "\1\u0260\7\36\25\0\10\36\6\0\5\36\3\0\20\36"+ + "\1\u0261\7\36\25\0\10\36\6\0\5\36\3\0\1\36"+ + "\1\u0262\26\36\25\0\10\36\6\0\5\36\3\0\1\u0263"+ + "\27\36\25\0\10\36\6\0\5\36\3\0\21\36\1\u0264"+ + "\6\36\25\0\10\36\6\0\5\36\3\0\7\36\1\u0265"+ + "\20\36\25\0\10\36\6\0\5\36\3\0\7\36\1\u0266"+ + "\20\36\25\0\10\36\6\0\5\36\3\0\7\36\1\u0267"+ + "\20\36\25\0\10\36\6\0\5\36\3\0\11\36\1\u0268"+ + "\16\36\25\0\10\36\6\0\5\36\3\0\1\36\1\u0269"+ + "\26\36\25\0\10\36\6\0\5\36\3\0\20\36\1\u026a"+ + "\7\36\25\0\2\36\1\u026b\5\36\6\0\5\36\3\0"+ + "\3\36\1\u026c\10\36\1\u026d\13\36\25\0\10\36\6\0"+ + "\5\36\3\0\1\36\1\u026e\26\36\25\0\10\36\6\0"+ + "\5\36\3\0\5\36\1\u026f\22\36\25\0\10\36\6\0"+ + "\5\36\3\0\2\36\1\u0270\25\36\25\0\10\36\6\0"+ + "\5\36\3\0\2\36\1\u0271\25\36\25\0\10\36\6\0"+ + "\5\36\3\0\21\36\1\u0272\6\36\25\0\10\36\6\0"+ + "\5\36\3\0\27\36\1\u0273\25\0\10\36\6\0\5\36"+ + "\3\0\20\36\1\u0274\7\36\25\0\10\36\6\0\5\36"+ + "\3\0\4\36\1\u0275\23\36\25\0\10\36\6\0\5\36"+ + "\3\0\23\36\1\u0276\4\36\25\0\10\36\6\0\5\36"+ + "\3\0\23\36\1\u0277\4\36\25\0\10\36\6\0\5\36"+ + "\3\0\14\36\1\u0278\13\36\25\0\10\36\6\0\5\36"+ + "\3\0\1\u0279\27\36\25\0\10\36\6\0\5\36\3\0"+ + "\16\36\1\u027a\11\36\25\0\10\36\6\0\5\36\3\0"+ + "\1\36\1\u027b\26\36\25\0\10\36\6\0\5\36\3\0"+ + "\1\u027c\27\36\25\0\10\36\6\0\5\36\3\0\2\36"+ + "\1\u027d\25\36\25\0\10\36\6\0\5\36\3\0\13\36"+ + "\1\u027e\14\36\25\0\10\36\6\0\5\36\3\0\17\36"+ + "\1\u027f\10\36\25\0\1\36\1\u0280\1\u0281\1\u0282\4\36"+ + "\6\0\5\36\3\0\30\36\25\0\10\36\6\0\5\36"+ + "\3\0\15\36\1\u0283\12\36\25\0\10\36\6\0\5\36"+ + "\3\0\27\36\1\u0284\25\0\10\36\6\0\5\36\3\0"+ + "\1\36\1\u0285\26\36\25\0\10\36\6\0\5\36\3\0"+ + "\5\36\1\u0286\22\36\25\0\10\36\6\0\5\36\3\0"+ + "\22\36\1\u0287\5\36\25\0\10\36\6\0\5\36\3\0"+ + "\13\36\1\u0288\14\36\25\0\10\36\6\0\5\36\3\0"+ + "\4\36\1\u0289\23\36\25\0\10\36\6\0\5\36\3\0"+ + "\4\36\1\u028a\23\36\25\0\10\36\6\0\5\36\3\0"+ + "\4\36\1\u028b\23\36\25\0\10\36\6\0\5\36\3\0"+ + "\20\36\1\u028c\7\36\25\0\10\36\6\0\5\36\3\0"+ + "\1\u028d\27\36\25\0\10\36\6\0\5\36\3\0\11\36"+ + "\1\u028e\16\36\25\0\10\36\6\0\5\36\3\0\5\36"+ + "\1\u028f\22\36\25\0\10\36\6\0\5\36\3\0\1\u0290"+ + "\27\36\25\0\10\36\6\0\5\36\3\0\20\36\1\u0291"+ + "\7\36\25\0\10\36\6\0\5\36\3\0\1\36\1\u0292"+ + "\26\36\25\0\10\36\6\0\5\36\3\0\21\36\1\u0293"+ + "\6\36\25\0\10\36\6\0\5\36\3\0\4\36\1\u0294"+ + "\23\36\25\0\10\36\6\0\5\36\3\0\1\36\1\u0295"+ + "\26\36\25\0\10\36\6\0\5\36\3\0\1\36\1\u0296"+ + "\26\36\25\0\10\36\6\0\5\36\3\0\20\36\1\u0297"+ + "\7\36\25\0\10\36\6\0\5\36\3\0\1\36\1\u0298"+ + "\26\36\25\0\10\36\6\0\5\36\3\0\1\u0299\27\36"+ + "\25\0\10\36\6\0\5\36\3\0\20\36\1\u029a\7\36"+ + "\25\0\10\36\6\0\5\36\3\0\27\36\1\u029b\25\0"+ + "\10\36\6\0\5\36\3\0\20\36\1\u029c\7\36\25\0"+ + "\10\36\6\0\5\36\3\0\14\36\1\u029d\13\36\25\0"+ + "\2\36\1\u029e\5\36\6\0\5\36\3\0\30\36\25\0"+ + "\10\36\6\0\5\36\3\0\20\36\1\u029f\7\36\25\0"+ + "\10\36\6\0\5\36\3\0\1\36\1\u02a0\26\36\25\0"+ + "\10\36\6\0\5\36\3\0\17\36\1\u02a1\10\36\25\0"+ + "\10\36\6\0\5\36\3\0\4\36\1\u02a2\23\36\25\0"+ + "\10\36\6\0\5\36\3\0\1\36\1\u02a3\26\36\25\0"+ + "\10\36\6\0\5\36\3\0\27\36\1\u02a4\25\0\10\36"+ + "\6\0\5\36\3\0\13\36\1\u02a5\14\36\25\0\10\36"+ + "\6\0\5\36\3\0\27\36\1\u02a6\25\0\10\36\6\0"+ + "\5\36\3\0\5\36\1\u02a7\22\36\25\0\10\36\6\0"+ + "\5\36\3\0\4\36\1\u02a8\23\36\25\0\10\36\6\0"+ + "\5\36\3\0\1\u02a9\27\36\25\0\2\36\1\u02aa\5\36"+ + "\6\0\5\36\3\0\30\36\25\0\10\36\6\0\5\36"+ + "\3\0\4\36\1\u02ab\23\36\5\0"; private static int [] zzUnpacktrans() { - int [] result = new int[34974]; + int [] result = new int[35175]; int offset = 0; offset = zzUnpacktrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -867,10 +875,10 @@ private static int zzUnpacktrans(String packed, int offset, int [] result) { "\1\1\2\11\41\1\2\11\2\0\1\1\1\0\1\1"+ "\1\0\15\1\1\11\1\1\1\0\1\11\2\0\1\1"+ "\1\0\1\1\2\11\41\1\1\0\24\1\1\11\1\1"+ - "\1\0\73\1\1\0\72\1\1\11\u0137\1"; + "\1\0\73\1\1\0\106\1\1\11\u0137\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[671]; + int [] result = new int[683]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -1240,877 +1248,937 @@ else if (zzAtEOF) { { return BAD_CHARACTER; } // fall through - case 176: break; + case 188: break; case 2: { return WHITE_SPACE; } // fall through - case 177: break; + case 189: break; case 3: { return BANG; } // fall through - case 178: break; + case 190: break; case 4: { return MODULO; } // fall through - case 179: break; + case 191: break; case 5: { return AND; } // fall through - case 180: break; + case 192: break; case 6: { return PAREN_LEFT; } // fall through - case 181: break; + case 193: break; case 7: { return PAREN_RIGHT; } // fall through - case 182: break; + case 194: break; case 8: { return STAR; } // fall through - case 183: break; + case 195: break; case 9: { return PLUS; } // fall through - case 184: break; + case 196: break; case 10: { return COMMA; } // fall through - case 185: break; + case 197: break; case 11: { return MINUS; } // fall through - case 186: break; + case 198: break; case 12: { return PERIOD; } // fall through - case 187: break; + case 199: break; case 13: { return FORWARD_SLASH; } // fall through - case 188: break; + case 200: break; case 14: { return INT_LITERAL; } // fall through - case 189: break; + case 201: break; case 15: { return COLON; } // fall through - case 190: break; + case 202: break; case 16: { return SEMICOLON; } // fall through - case 191: break; + case 203: break; case 17: { return LESS_THAN; } // fall through - case 192: break; + case 204: break; case 18: { return EQUAL; } // fall through - case 193: break; + case 205: break; case 19: { return GREATER_THAN; } // fall through - case 194: break; + case 206: break; case 20: { return AT; } // fall through - case 195: break; + case 207: break; case 21: { return IDENT; } // fall through - case 196: break; + case 208: break; case 22: { return BRACKET_LEFT; } // fall through - case 197: break; + case 209: break; case 23: { return BRACKET_RIGHT; } // fall through - case 198: break; + case 210: break; case 24: { return XOR; } // fall through - case 199: break; + case 211: break; case 25: { return UNDERSCORE; } // fall through - case 200: break; + case 212: break; case 26: { return BRACE_LEFT; } // fall through - case 201: break; + case 213: break; case 27: { return OR; } // fall through - case 202: break; + case 214: break; case 28: { return BRACE_RIGHT; } // fall through - case 203: break; + case 215: break; case 29: { return TILDE; } // fall through - case 204: break; + case 216: break; case 30: { popState(); return PAREN_LEFT; } // fall through - case 205: break; + case 217: break; case 31: { popState(); return COLON; } // fall through - case 206: break; + case 218: break; case 32: { return TYPE_LESS_THAN; } // fall through - case 207: break; + case 219: break; case 33: { popState(); return EQUAL; } // fall through - case 208: break; + case 220: break; case 34: { popState(); return TYPE_GREATER_THAN; } // fall through - case 209: break; + case 221: break; case 35: { return PREPROCESSOR_DECLARATION; } // fall through - case 210: break; + case 222: break; case 36: { popState(); return WHITE_SPACE; } // fall through - case 211: break; + case 223: break; case 37: { pushState(PREPROCESSOR); return PREPROCESSOR_DECLARATION; } // fall through - case 212: break; + case 224: break; case 38: { popState(); return PREPROCESSOR_DECLARATION; } // fall through - case 213: break; + case 225: break; case 39: { pushState(PREPROCESSOR_NESTED); return PREPROCESSOR_DECLARATION; } // fall through - case 214: break; + case 226: break; case 40: { return NOT_EQUAL; } // fall through - case 215: break; + case 227: break; case 41: { return MODULO_EQUAL; } // fall through - case 216: break; + case 228: break; case 42: { return AND_AND; } // fall through - case 217: break; + case 229: break; case 43: { return AND_EQUAL; } // fall through - case 218: break; + case 230: break; case 44: { return TIMES_EQUAL; } // fall through - case 219: break; + case 231: break; case 45: { return PLUS_PLUS; } // fall through - case 220: break; + case 232: break; case 46: { return PLUS_EQUAL; } // fall through - case 221: break; + case 233: break; case 47: { return MINUS_MINUS; } // fall through - case 222: break; + case 234: break; case 48: { return MINUS_EQUAL; } // fall through - case 223: break; + case 235: break; case 49: { return ARROW; } // fall through - case 224: break; + case 236: break; case 50: { return DECIMAL_FLOAT_LITERAL; } // fall through - case 225: break; + case 237: break; case 51: { return BLOCK_COMMENT; } // fall through - case 226: break; + case 238: break; case 52: { return LINE_COMMENT; } // fall through - case 227: break; + case 239: break; case 53: { return DIVISION_EQUAL; } // fall through - case 228: break; + case 240: break; case 54: { return UINT_LITERAL; } // fall through - case 229: break; + case 241: break; case 55: { return SHIFT_LEFT; } // fall through - case 230: break; + case 242: break; case 56: { return LESS_THAN_EQUAL; } // fall through - case 231: break; + case 243: break; case 57: { return EQUAL_EQUAL; } // fall through - case 232: break; + case 244: break; case 58: { return GREATER_THAN_EQUAL; } // fall through - case 233: break; + case 245: break; case 59: { return SHIFT_RIGHT; } // fall through - case 234: break; + case 246: break; case 60: { pushState(ATTRIBUTE); return ATTR_LEFT; } // fall through - case 235: break; + case 247: break; case 61: { return XOR_EQUAL; } // fall through - case 236: break; + case 248: break; case 62: { return FN; } // fall through - case 237: break; + case 249: break; case 63: { return IF; } // fall through - case 238: break; + case 250: break; case 64: { return OR_EQUAL; } // fall through - case 239: break; + case 251: break; case 65: { return OR_OR; } // fall through - case 240: break; + case 252: break; case 66: { popState(); return ATTR_RIGHT; } // fall through - case 241: break; + case 253: break; case 67: { return SHIFT_LEFT_EQUAL; } // fall through - case 242: break; + case 254: break; case 68: { return SHIFT_RIGHT_EQUAL; } // fall through - case 243: break; + case 255: break; case 69: { return FLOAT32; } // fall through - case 244: break; + case 256: break; case 70: { return FOR; } // fall through - case 245: break; + case 257: break; case 71: { return INT32; } // fall through - case 246: break; + case 258: break; case 72: { return LET; } // fall through - case 247: break; + case 259: break; case 73: { pushState(TYPE_SPEC); return POINTER; } // fall through - case 248: break; + case 260: break; case 74: { return UINT32; } // fall through - case 249: break; + case 261: break; case 75: { pushState(TYPE_SPEC); return VAR; } // fall through - case 250: break; + case 262: break; case 76: { return HEX_FLOAT_LITERAL; } // fall through - case 251: break; + case 263: break; case 77: { return BOOL; } // fall through - case 252: break; + case 264: break; case 78: { return CASE; } // fall through - case 253: break; + case 265: break; case 79: { return ELSE; } // fall through - case 254: break; + case 266: break; case 80: { return LOOP; } // fall through - case 255: break; + case 267: break; case 81: { return TRUE; } // fall through - case 256: break; + case 268: break; case 82: { return TYPE; } // fall through - case 257: break; + case 269: break; case 83: { pushState(TYPE_SPEC); return VEC2; } // fall through - case 258: break; + case 270: break; case 84: { pushState(TYPE_SPEC); return VEC3; } // fall through - case 259: break; + case 271: break; case 85: { pushState(TYPE_SPEC); return VEC4; } // fall through - case 260: break; + case 272: break; case 86: { return READ; } // fall through - case 261: break; + case 273: break; case 87: { pushState(TYPE_SPEC); return ARRAY; } // fall through - case 262: break; + case 274: break; case 88: { return BREAK; } // fall through - case 263: break; + case 275: break; case 89: { pushState(TYPE_SPEC); return CONST; } // fall through - case 264: break; + case 276: break; case 90: { return FALSE; } // fall through - case 265: break; + case 277: break; case 91: - { return WHILE; + { return VEC2F; } // fall through - case 266: break; + case 278: break; case 92: - { return WRITE; + { return VEC2H; } // fall through - case 267: break; + case 279: break; case 93: - { pushState(TYPE_SPEC); return ATOMIC; + { return VEC2I; } // fall through - case 268: break; + case 280: break; case 94: - { return ENABLE; + { return VEC2U; } // fall through - case 269: break; + case 281: break; case 95: - { pushState(TYPE_SPEC); return MAT2X2; + { return VEC3F; } // fall through - case 270: break; + case 282: break; case 96: - { pushState(TYPE_SPEC); return MAT2X3; + { return VEC3H; } // fall through - case 271: break; + case 283: break; case 97: - { pushState(TYPE_SPEC); return MAT2X4; + { return VEC3I; } // fall through - case 272: break; + case 284: break; case 98: - { pushState(TYPE_SPEC); return MAT3X2; + { return VEC3U; } // fall through - case 273: break; + case 285: break; case 99: - { pushState(TYPE_SPEC); return MAT3X3; + { return VEC4F; } // fall through - case 274: break; + case 286: break; case 100: - { pushState(TYPE_SPEC); return MAT3X4; + { return VEC4H; } // fall through - case 275: break; + case 287: break; case 101: - { pushState(TYPE_SPEC); return MAT4X2; + { return VEC4I; } // fall through - case 276: break; + case 288: break; case 102: - { pushState(TYPE_SPEC); return MAT4X3; + { return VEC4U; } // fall through - case 277: break; + case 289: break; case 103: - { pushState(TYPE_SPEC); return MAT4X4; + { return WHILE; } // fall through - case 278: break; + case 290: break; case 104: - { return RETURN; + { return WRITE; } // fall through - case 279: break; + case 291: break; case 105: - { return STRUCT; + { pushState(TYPE_SPEC); return ATOMIC; } // fall through - case 280: break; + case 292: break; case 106: - { return SWITCH; + { return ENABLE; } // fall through - case 281: break; + case 293: break; case 107: - { return R8SINT; + { pushState(TYPE_SPEC); return MAT2X2; } // fall through - case 282: break; + case 294: break; case 108: - { return R8UINT; + { pushState(TYPE_SPEC); return MAT2X3; } // fall through - case 283: break; + case 295: break; case 109: - { pushState(TYPE_SPEC); return BITCAST; + { pushState(TYPE_SPEC); return MAT2X4; } // fall through - case 284: break; + case 296: break; case 110: - { return DEFAULT; + { pushState(TYPE_SPEC); return MAT3X2; } // fall through - case 285: break; + case 297: break; case 111: - { return DISCARD; + { pushState(TYPE_SPEC); return MAT3X3; } // fall through - case 286: break; + case 298: break; case 112: - { return SAMPLER; + { pushState(TYPE_SPEC); return MAT3X4; } // fall through - case 287: break; + case 299: break; case 113: - { return PRIVATE; + { pushState(TYPE_SPEC); return MAT4X2; } // fall through - case 288: break; + case 300: break; case 114: - { return R16SINT; + { pushState(TYPE_SPEC); return MAT4X3; } // fall through - case 289: break; + case 301: break; case 115: - { return R16UINT; + { pushState(TYPE_SPEC); return MAT4X4; } // fall through - case 290: break; + case 302: break; case 116: - { return R32SINT; + { return RETURN; } // fall through - case 291: break; + case 303: break; case 117: - { return R32UINT; + { return STRUCT; } // fall through - case 292: break; + case 304: break; case 118: - { return R8SNORM; + { return SWITCH; } // fall through - case 293: break; + case 305: break; case 119: - { return R8UNORM; + { return R8SINT; } // fall through - case 294: break; + case 306: break; case 120: - { return RG8SINT; + { return R8UINT; } // fall through - case 295: break; + case 307: break; case 121: - { return RG8UINT; + { pushState(TYPE_SPEC); return BITCAST; } // fall through - case 296: break; + case 308: break; case 122: - { return STORAGE; + { return DEFAULT; } // fall through - case 297: break; + case 309: break; case 123: - { return UNIFORM; + { return DISCARD; } // fall through - case 298: break; + case 310: break; case 124: - { return CONTINUE; + { return SAMPLER; } // fall through - case 299: break; + case 311: break; case 125: - { return OVERRIDE; + { return PRIVATE; } // fall through - case 300: break; + case 312: break; case 126: - { return FUNCTION; + { return R16SINT; } // fall through - case 301: break; + case 313: break; case 127: - { return R16FLOAT; + { return R16UINT; } // fall through - case 302: break; + case 314: break; case 128: - { return R32FLOAT; + { return R32SINT; } // fall through - case 303: break; + case 315: break; case 129: - { return RG16SINT; + { return R32UINT; } // fall through - case 304: break; + case 316: break; case 130: - { return RG16UINT; + { return R8SNORM; } // fall through - case 305: break; + case 317: break; case 131: - { return RG32SINT; + { return R8UNORM; } // fall through - case 306: break; + case 318: break; case 132: - { return RG32UINT; + { return RG8SINT; } // fall through - case 307: break; + case 319: break; case 133: - { return RG8SNORM; + { return RG8UINT; } // fall through - case 308: break; + case 320: break; case 134: - { return RG8UNORM; + { return STORAGE; } // fall through - case 309: break; + case 321: break; case 135: - { return RG16FLOAT; + { return UNIFORM; } // fall through - case 310: break; + case 322: break; case 136: - { return RG32FLOAT; + { return CONTINUE; } // fall through - case 311: break; + case 323: break; case 137: - { return RGBA8SINT; + { return OVERRIDE; } // fall through - case 312: break; + case 324: break; case 138: - { return RGBA8UINT; + { return FUNCTION; } // fall through - case 313: break; + case 325: break; case 139: - { return WORKGROUP; + { return R16FLOAT; } // fall through - case 314: break; + case 326: break; case 140: - { return CONTINUING; + { return R32FLOAT; } // fall through - case 315: break; + case 327: break; case 141: - { pushState(TYPE_SPEC); return TEXTURE_1D; + { return RG16SINT; } // fall through - case 316: break; + case 328: break; case 142: - { pushState(TYPE_SPEC); return TEXTURE_2D; + { return RG16UINT; } // fall through - case 317: break; + case 329: break; case 143: - { pushState(TYPE_SPEC); return TEXTURE_3D; + { return RG32SINT; } // fall through - case 318: break; + case 330: break; case 144: - { return BGRA8UNORM; + { return RG32UINT; } // fall through - case 319: break; + case 331: break; case 145: - { return READ_WRITE; + { return RG8SNORM; } // fall through - case 320: break; + case 332: break; case 146: - { return RGBA16SINT; + { return RG8UNORM; } // fall through - case 321: break; + case 333: break; case 147: - { return RGBA16UINT; + { return RG16FLOAT; } // fall through - case 322: break; + case 334: break; case 148: - { return RGBA32SINT; + { return RG32FLOAT; } // fall through - case 323: break; + case 335: break; case 149: - { return RGBA32UINT; + { return RGBA8SINT; } // fall through - case 324: break; + case 336: break; case 150: - { return RGBA8SNORM; + { return RGBA8UINT; } // fall through - case 325: break; + case 337: break; case 151: - { return RGBA8UNORM; + { return WORKGROUP; } // fall through - case 326: break; + case 338: break; case 152: - { return FALLTHROUGH; + { return CONTINUING; } // fall through - case 327: break; + case 339: break; case 153: - { return RGBA16FLOAT; + { pushState(TYPE_SPEC); return TEXTURE_1D; } // fall through - case 328: break; + case 340: break; case 154: - { return RGBA32FLOAT; + { pushState(TYPE_SPEC); return TEXTURE_2D; } // fall through - case 329: break; + case 341: break; case 155: - { return STATIC_ASSERT; + { pushState(TYPE_SPEC); return TEXTURE_3D; } // fall through - case 330: break; + case 342: break; case 156: - { pushState(TYPE_SPEC); return TEXTURE_CUBE; + { return BGRA8UNORM; } // fall through - case 331: break; + case 343: break; case 157: - { return RG11B10FLOAT; + { return READ_WRITE; } // fall through - case 332: break; + case 344: break; case 158: - { return RGB10A2UNORM; + { return RGBA16SINT; } // fall through - case 333: break; + case 345: break; case 159: - { pushState(BIND_SPEC); return BINDING_ARRAY; + { return RGBA16UINT; } // fall through - case 334: break; + case 346: break; case 160: - { return PUSH_CONSTANT; + { return RGBA32SINT; } // fall through - case 335: break; + case 347: break; case 161: - { return BGRA8UNORM_SRGB; + { return RGBA32UINT; } // fall through - case 336: break; + case 348: break; case 162: - { return RGBA8UNORM_SRGB; + { return RGBA8SNORM; } // fall through - case 337: break; + case 349: break; case 163: - { pushState(TYPE_SPEC); return TEXTURE_2D_ARRAY; + { return RGBA8UNORM; } // fall through - case 338: break; + case 350: break; case 164: - { return TEXTURE_DEPTH_2D; + { return FALLTHROUGH; } // fall through - case 339: break; + case 351: break; case 165: - { return SAMPLER_COMPARISON; + { return RGBA16FLOAT; } // fall through - case 340: break; + case 352: break; case 166: - { pushState(TYPE_SPEC); return TEXTURE_CUBE_ARRAY; + { return RGBA32FLOAT; } // fall through - case 341: break; + case 353: break; case 167: - { return TEXTURE_DEPTH_CUBE; + { return STATIC_ASSERT; } // fall through - case 342: break; + case 354: break; case 168: - { pushState(TYPE_SPEC); return TEXTURE_STORAGE_1D; + { pushState(TYPE_SPEC); return TEXTURE_CUBE; } // fall through - case 343: break; + case 355: break; case 169: - { pushState(TYPE_SPEC); return TEXTURE_STORAGE_2D; + { return RG11B10FLOAT; } // fall through - case 344: break; + case 356: break; case 170: - { pushState(TYPE_SPEC); return TEXTURE_STORAGE_3D; + { return RGB10A2UNORM; } // fall through - case 345: break; + case 357: break; case 171: - { return TEXTURE_DEPTH_2D_ARRAY; + { pushState(BIND_SPEC); return BINDING_ARRAY; } // fall through - case 346: break; + case 358: break; case 172: - { pushState(TYPE_SPEC); return TEXTURE_MULTISAMPLED_2D; + { return PUSH_CONSTANT; } // fall through - case 347: break; + case 359: break; case 173: - { return TEXTURE_DEPTH_CUBE_ARRAY; + { return BGRA8UNORM_SRGB; } // fall through - case 348: break; + case 360: break; case 174: - { pushState(TYPE_SPEC); return TEXTURE_STORAGE_2D_ARRAY; + { return RGBA8UNORM_SRGB; } // fall through - case 349: break; + case 361: break; case 175: + { pushState(TYPE_SPEC); return TEXTURE_2D_ARRAY; + } + // fall through + case 362: break; + case 176: + { return TEXTURE_DEPTH_2D; + } + // fall through + case 363: break; + case 177: + { return SAMPLER_COMPARISON; + } + // fall through + case 364: break; + case 178: + { pushState(TYPE_SPEC); return TEXTURE_CUBE_ARRAY; + } + // fall through + case 365: break; + case 179: + { return TEXTURE_DEPTH_CUBE; + } + // fall through + case 366: break; + case 180: + { pushState(TYPE_SPEC); return TEXTURE_STORAGE_1D; + } + // fall through + case 367: break; + case 181: + { pushState(TYPE_SPEC); return TEXTURE_STORAGE_2D; + } + // fall through + case 368: break; + case 182: + { pushState(TYPE_SPEC); return TEXTURE_STORAGE_3D; + } + // fall through + case 369: break; + case 183: + { return TEXTURE_DEPTH_2D_ARRAY; + } + // fall through + case 370: break; + case 184: + { pushState(TYPE_SPEC); return TEXTURE_MULTISAMPLED_2D; + } + // fall through + case 371: break; + case 185: + { return TEXTURE_DEPTH_CUBE_ARRAY; + } + // fall through + case 372: break; + case 186: + { pushState(TYPE_SPEC); return TEXTURE_STORAGE_2D_ARRAY; + } + // fall through + case 373: break; + case 187: { return TEXTURE_DEPTH_MULTISAMPLED_2D; } // fall through - case 350: break; + case 374: break; default: zzScanError(ZZ_NO_MATCH); } diff --git a/src/main/gen/wgslplugin/language/parser/WgslParser.java b/src/main/gen/wgslplugin/language/parser/WgslParser.java index 61166cc..d97e7b2 100644 --- a/src/main/gen/wgslplugin/language/parser/WgslParser.java +++ b/src/main/gen/wgslplugin/language/parser/WgslParser.java @@ -4,7 +4,7 @@ import com.intellij.lang.PsiBuilder; import com.intellij.lang.PsiBuilder.Marker; import static wgslplugin.language.psi.WGSLTypes.*; -import static com.intellij.lang.parser.GeneratedParserUtilBase.*; +import static wgslplugin.language.parser.WgslParserUtil.*; import com.intellij.psi.tree.IElementType; import com.intellij.lang.ASTNode; import com.intellij.psi.tree.TokenSet; @@ -350,6 +350,75 @@ public static boolean break_statement(PsiBuilder b, int l) { return r; } + /* ********************************************************** */ + // VEC2I + // | VEC3I + // | VEC4I + // | VEC2U + // | VEC3U + // | VEC4U + // | VEC2F + // | VEC3F + // | VEC4F + // | VEC2H + // | VEC3H + // | VEC4H + // | MAT2X2F + // | MAT2X3F + // | MAT2X4F + // | MAT3X2F + // | MAT3X3F + // | MAT3X4F + // | MAT4X2F + // | MAT4X3F + // | MAT4X4F + // | MAT2X2H + // | MAT2X3H + // | MAT2X4H + // | MAT3X2H + // | MAT3X3H + // | MAT3X4H + // | MAT4X2H + // | MAT4X3H + // | MAT4X4H + public static boolean builtin_type_alias(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "builtin_type_alias")) return false; + boolean r; + Marker m = enter_section_(b, l, _NONE_, BUILTIN_TYPE_ALIAS, ""); + r = consumeToken(b, VEC2I); + if (!r) r = consumeToken(b, VEC3I); + if (!r) r = consumeToken(b, VEC4I); + if (!r) r = consumeToken(b, VEC2U); + if (!r) r = consumeToken(b, VEC3U); + if (!r) r = consumeToken(b, VEC4U); + if (!r) r = consumeToken(b, VEC2F); + if (!r) r = consumeToken(b, VEC3F); + if (!r) r = consumeToken(b, VEC4F); + if (!r) r = consumeToken(b, VEC2H); + if (!r) r = consumeToken(b, VEC3H); + if (!r) r = consumeToken(b, VEC4H); + if (!r) r = consumeToken(b, MAT2X2F); + if (!r) r = consumeToken(b, MAT2X3F); + if (!r) r = consumeToken(b, MAT2X4F); + if (!r) r = consumeToken(b, MAT3X2F); + if (!r) r = consumeToken(b, MAT3X3F); + if (!r) r = consumeToken(b, MAT3X4F); + if (!r) r = consumeToken(b, MAT4X2F); + if (!r) r = consumeToken(b, MAT4X3F); + if (!r) r = consumeToken(b, MAT4X4F); + if (!r) r = consumeToken(b, MAT2X2H); + if (!r) r = consumeToken(b, MAT2X3H); + if (!r) r = consumeToken(b, MAT2X4H); + if (!r) r = consumeToken(b, MAT3X2H); + if (!r) r = consumeToken(b, MAT3X3H); + if (!r) r = consumeToken(b, MAT3X4H); + if (!r) r = consumeToken(b, MAT4X2H); + if (!r) r = consumeToken(b, MAT4X3H); + if (!r) r = consumeToken(b, MAT4X4H); + exit_section_(b, l, m, r, false, null); + return r; + } + /* ********************************************************** */ // statement case_body? // | FALLTHROUGH SEMICOLON @@ -2195,6 +2264,7 @@ public static boolean type_alias_decl(PsiBuilder b, int l) { // | ATOMIC TYPE_LESS_THAN type_decl TYPE_GREATER_THAN // | texture_sampler_types // | BINDING_ARRAY TYPE_LESS_THAN type_decl ( COMMA element_count_expression )? TYPE_GREATER_THAN + // | builtin_type_alias public static boolean type_decl(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "type_decl")) return false; boolean r; @@ -2211,6 +2281,7 @@ public static boolean type_decl(PsiBuilder b, int l) { if (!r) r = type_decl_9(b, l + 1); if (!r) r = texture_sampler_types(b, l + 1); if (!r) r = type_decl_11(b, l + 1); + if (!r) r = builtin_type_alias(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } diff --git a/src/main/gen/wgslplugin/language/parser/WgslParserUtil.java b/src/main/gen/wgslplugin/language/parser/WgslParserUtil.java new file mode 100644 index 0000000..58045fd --- /dev/null +++ b/src/main/gen/wgslplugin/language/parser/WgslParserUtil.java @@ -0,0 +1,6 @@ +package wgslplugin.language.parser; + +import com.intellij.lang.parser.GeneratedParserUtilBase; + +public class WgslParserUtil extends GeneratedParserUtilBase { +} diff --git a/src/main/gen/wgslplugin/language/psi/WGSLBuiltinTypeAlias.java b/src/main/gen/wgslplugin/language/psi/WGSLBuiltinTypeAlias.java new file mode 100644 index 0000000..f6fa068 --- /dev/null +++ b/src/main/gen/wgslplugin/language/psi/WGSLBuiltinTypeAlias.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package wgslplugin.language.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface WGSLBuiltinTypeAlias extends PsiElement { + +} diff --git a/src/main/gen/wgslplugin/language/psi/WGSLTypeDecl.java b/src/main/gen/wgslplugin/language/psi/WGSLTypeDecl.java index 03ea918..892bef5 100644 --- a/src/main/gen/wgslplugin/language/psi/WGSLTypeDecl.java +++ b/src/main/gen/wgslplugin/language/psi/WGSLTypeDecl.java @@ -13,6 +13,9 @@ public interface WGSLTypeDecl extends PsiElement { @Nullable WGSLArrayTypeDecl getArrayTypeDecl(); + @Nullable + WGSLBuiltinTypeAlias getBuiltinTypeAlias(); + @Nullable WGSLElementCountExpression getElementCountExpression(); diff --git a/src/main/gen/wgslplugin/language/psi/WGSLTypes.java b/src/main/gen/wgslplugin/language/psi/WGSLTypes.java index 9aea6b8..6e2adf6 100644 --- a/src/main/gen/wgslplugin/language/psi/WGSLTypes.java +++ b/src/main/gen/wgslplugin/language/psi/WGSLTypes.java @@ -16,6 +16,7 @@ public interface WGSLTypes { IElementType ATTRIBUTE_LIST = new WGSLElementType("ATTRIBUTE_LIST"); IElementType ATTRIBUTE_NAME = new WGSLElementType("ATTRIBUTE_NAME"); IElementType BREAK_STATEMENT = new WGSLElementType("BREAK_STATEMENT"); + IElementType BUILTIN_TYPE_ALIAS = new WGSLElementType("BUILTIN_TYPE_ALIAS"); IElementType CASE_BODY = new WGSLElementType("CASE_BODY"); IElementType CASE_SELECTORS = new WGSLElementType("CASE_SELECTORS"); IElementType COMPOUND_ASSIGNMENT_OPERATOR = new WGSLElementType("COMPOUND_ASSIGNMENT_OPERATOR"); @@ -143,14 +144,32 @@ public interface WGSLTypes { IElementType LINE_COMMENT = new WGSLTokenType("LINE_COMMENT"); IElementType LOOP = new WGSLTokenType("LOOP"); IElementType MAT2X2 = new WGSLTokenType("MAT2X2"); + IElementType MAT2X2F = new WGSLTokenType("MAT2X2F"); + IElementType MAT2X2H = new WGSLTokenType("MAT2X2H"); IElementType MAT2X3 = new WGSLTokenType("MAT2X3"); + IElementType MAT2X3F = new WGSLTokenType("MAT2X3F"); + IElementType MAT2X3H = new WGSLTokenType("MAT2X3H"); IElementType MAT2X4 = new WGSLTokenType("MAT2X4"); + IElementType MAT2X4F = new WGSLTokenType("MAT2X4F"); + IElementType MAT2X4H = new WGSLTokenType("MAT2X4H"); IElementType MAT3X2 = new WGSLTokenType("MAT3X2"); + IElementType MAT3X2F = new WGSLTokenType("MAT3X2F"); + IElementType MAT3X2H = new WGSLTokenType("MAT3X2H"); IElementType MAT3X3 = new WGSLTokenType("MAT3X3"); + IElementType MAT3X3F = new WGSLTokenType("MAT3X3F"); + IElementType MAT3X3H = new WGSLTokenType("MAT3X3H"); IElementType MAT3X4 = new WGSLTokenType("MAT3X4"); + IElementType MAT3X4F = new WGSLTokenType("MAT3X4F"); + IElementType MAT3X4H = new WGSLTokenType("MAT3X4H"); IElementType MAT4X2 = new WGSLTokenType("MAT4X2"); + IElementType MAT4X2F = new WGSLTokenType("MAT4X2F"); + IElementType MAT4X2H = new WGSLTokenType("MAT4X2H"); IElementType MAT4X3 = new WGSLTokenType("MAT4X3"); + IElementType MAT4X3F = new WGSLTokenType("MAT4X3F"); + IElementType MAT4X3H = new WGSLTokenType("MAT4X3H"); IElementType MAT4X4 = new WGSLTokenType("MAT4X4"); + IElementType MAT4X4F = new WGSLTokenType("MAT4X4F"); + IElementType MAT4X4H = new WGSLTokenType("MAT4X4H"); IElementType MINUS = new WGSLTokenType("MINUS"); IElementType MINUS_EQUAL = new WGSLTokenType("MINUS_EQUAL"); IElementType MINUS_MINUS = new WGSLTokenType("MINUS_MINUS"); @@ -247,8 +266,20 @@ public interface WGSLTypes { IElementType UNIFORM = new WGSLTokenType("UNIFORM"); IElementType VAR = new WGSLTokenType("VAR"); IElementType VEC2 = new WGSLTokenType("VEC2"); + IElementType VEC2F = new WGSLTokenType("VEC2F"); + IElementType VEC2H = new WGSLTokenType("VEC2H"); + IElementType VEC2I = new WGSLTokenType("VEC2I"); + IElementType VEC2U = new WGSLTokenType("VEC2U"); IElementType VEC3 = new WGSLTokenType("VEC3"); + IElementType VEC3F = new WGSLTokenType("VEC3F"); + IElementType VEC3H = new WGSLTokenType("VEC3H"); + IElementType VEC3I = new WGSLTokenType("VEC3I"); + IElementType VEC3U = new WGSLTokenType("VEC3U"); IElementType VEC4 = new WGSLTokenType("VEC4"); + IElementType VEC4F = new WGSLTokenType("VEC4F"); + IElementType VEC4H = new WGSLTokenType("VEC4H"); + IElementType VEC4I = new WGSLTokenType("VEC4I"); + IElementType VEC4U = new WGSLTokenType("VEC4U"); IElementType WHILE = new WGSLTokenType("WHILE"); IElementType WORKGROUP = new WGSLTokenType("WORKGROUP"); IElementType WRITE = new WGSLTokenType("WRITE"); @@ -282,6 +313,9 @@ else if (type == ATTRIBUTE_NAME) { else if (type == BREAK_STATEMENT) { return new WGSLBreakStatementImpl(node); } + else if (type == BUILTIN_TYPE_ALIAS) { + return new WGSLBuiltinTypeAliasImpl(node); + } else if (type == CASE_BODY) { return new WGSLCaseBodyImpl(node); } diff --git a/src/main/gen/wgslplugin/language/psi/WGSLVisitor.java b/src/main/gen/wgslplugin/language/psi/WGSLVisitor.java index 2f06ac7..d4602bc 100644 --- a/src/main/gen/wgslplugin/language/psi/WGSLVisitor.java +++ b/src/main/gen/wgslplugin/language/psi/WGSLVisitor.java @@ -39,6 +39,10 @@ public void visitBreakStatement(@NotNull WGSLBreakStatement o) { visitPsiElement(o); } + public void visitBuiltinTypeAlias(@NotNull WGSLBuiltinTypeAlias o) { + visitPsiElement(o); + } + public void visitCaseBody(@NotNull WGSLCaseBody o) { visitPsiElement(o); } diff --git a/src/main/gen/wgslplugin/language/psi/impl/WGSLBuiltinTypeAliasImpl.java b/src/main/gen/wgslplugin/language/psi/impl/WGSLBuiltinTypeAliasImpl.java new file mode 100644 index 0000000..82d2b07 --- /dev/null +++ b/src/main/gen/wgslplugin/language/psi/impl/WGSLBuiltinTypeAliasImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package wgslplugin.language.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static wgslplugin.language.psi.WGSLTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import wgslplugin.language.psi.*; + +public class WGSLBuiltinTypeAliasImpl extends ASTWrapperPsiElement implements WGSLBuiltinTypeAlias { + + public WGSLBuiltinTypeAliasImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull WGSLVisitor visitor) { + visitor.visitBuiltinTypeAlias(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof WGSLVisitor) accept((WGSLVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/src/main/gen/wgslplugin/language/psi/impl/WGSLTypeDeclImpl.java b/src/main/gen/wgslplugin/language/psi/impl/WGSLTypeDeclImpl.java index e70211c..fc4623b 100644 --- a/src/main/gen/wgslplugin/language/psi/impl/WGSLTypeDeclImpl.java +++ b/src/main/gen/wgslplugin/language/psi/impl/WGSLTypeDeclImpl.java @@ -39,6 +39,12 @@ public WGSLArrayTypeDecl getArrayTypeDecl() { return findChildByClass(WGSLArrayTypeDecl.class); } + @Override + @Nullable + public WGSLBuiltinTypeAlias getBuiltinTypeAlias() { + return findChildByClass(WGSLBuiltinTypeAlias.class); + } + @Override @Nullable public WGSLElementCountExpression getElementCountExpression() { diff --git a/src/main/java/wgslplugin/language/BuiltInFunctions.java b/src/main/java/wgslplugin/language/BuiltInFunctions.java index 4582061..5293fb2 100644 --- a/src/main/java/wgslplugin/language/BuiltInFunctions.java +++ b/src/main/java/wgslplugin/language/BuiltInFunctions.java @@ -8,6 +8,7 @@ import java.io.ByteArrayOutputStream; import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; @@ -30,7 +31,7 @@ public synchronized WGSLFunctionDecl get(PsiElement element) { bos.write(buf, 0, L); L = s.read(buf); } - builtInFunctionsFile = WGSLElementFactory.createFile(element.getProject(), bos.toString("UTF-8")); + builtInFunctionsFile = WGSLElementFactory.createFile(element.getProject(), bos.toString(StandardCharsets.UTF_8)); allBuiltinFunctions = PsiTreeUtil.collectElements(builtInFunctionsFile, e -> e instanceof WGSLFunctionDecl); for(PsiElement func : allBuiltinFunctions) { diff --git a/src/main/java/wgslplugin/language/WGSLLexer.flex b/src/main/java/wgslplugin/language/WGSLLexer.flex index 8ee7ded..33a17b7 100644 --- a/src/main/java/wgslplugin/language/WGSLLexer.flex +++ b/src/main/java/wgslplugin/language/WGSLLexer.flex @@ -135,14 +135,48 @@ IDENT = ([a-zA-Z_][0-9a-zA-Z_][0-9a-zA-Z_]*)|([a-zA-Z][0-9a-zA-Z_]*) "texture_depth_cube_array" { return TEXTURE_DEPTH_CUBE_ARRAY; } "texture_depth_multisampled_2d" { return TEXTURE_DEPTH_MULTISAMPLED_2D; } - "type" { return TYPE; } - "=" { return EQUAL; } - "=" { popState(); return EQUAL; } + "type" { return TYPE; } + "=" { return EQUAL; } + "=" { popState(); return EQUAL; } + "bool" { return BOOL; } "f32" { return FLOAT32; } "i32" { return INT32; } "u32" { return UINT32; } + "vec2i" { return VEC2I; } + "vec3i" { return VEC3I; } + "vec4i" { return VEC4I; } + "vec2u" { return VEC2U; } + "vec3u" { return VEC3U; } + "vec4u" { return VEC4U; } + "vec2f" { return VEC2F; } + "vec3f" { return VEC3F; } + "vec4f" { return VEC4F; } + "vec2h" { return VEC2H; } + "vec3h" { return VEC3H; } + "vec4h" { return VEC4H; } + + "mat2x2f" { return MAT2X2F; } + "mat2x3f" { return MAT2X3F; } + "mat2x4f" { return MAT2X4F; } + "mat3x2f" { return MAT3X2F; } + "mat3x3f" { return MAT3X3F; } + "mat3x4f" { return MAT3X4F; } + "mat4x2f" { return MAT4X2F; } + "mat4x3f" { return MAT4X3F; } + "mat4x4f" { return MAT4X4F; } + "mat2x2h" { return MAT2X2H; } + "mat2x3h" { return MAT2X3H; } + "mat2x4h" { return MAT2X4H; } + "mat3x2h" { return MAT3X2H; } + "mat3x3h" { return MAT3X3H; } + "mat3x4h" { return MAT3X4H; } + "mat4x2h" { return MAT4X2H; } + "mat4x3h" { return MAT4X3H; } + "mat4x4h" { return MAT4X4H; } + + "vec2" { pushState(TYPE_SPEC); return VEC2; } "vec3" { pushState(TYPE_SPEC); return VEC3; } "vec4" { pushState(TYPE_SPEC); return VEC4; } @@ -157,6 +191,7 @@ IDENT = ([a-zA-Z_][0-9a-zA-Z_][0-9a-zA-Z_]*)|([a-zA-Z][0-9a-zA-Z_]*) "mat4x3" { pushState(TYPE_SPEC); return MAT4X3; } "mat4x4" { pushState(TYPE_SPEC); return MAT4X4; } "atomic" { pushState(TYPE_SPEC); return ATOMIC; } + "let" { return LET; } "var" { pushState(TYPE_SPEC); return VAR; } "const" { pushState(TYPE_SPEC); return CONST; } diff --git a/src/main/java/wgslplugin/language/WGSLSyntaxHighlighter.java b/src/main/java/wgslplugin/language/WGSLSyntaxHighlighter.java index 2ff9d1c..610f64c 100644 --- a/src/main/java/wgslplugin/language/WGSLSyntaxHighlighter.java +++ b/src/main/java/wgslplugin/language/WGSLSyntaxHighlighter.java @@ -6,6 +6,7 @@ import com.intellij.psi.TokenType; import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; +import wgslplugin.language.psi.WGSLTokenType; import wgslplugin.language.psi.WGSLTypes; import java.util.Arrays; @@ -47,7 +48,11 @@ public class WGSLSyntaxHighlighter extends SyntaxHighlighterBase { , WGSLTypes.TEXTURE_DEPTH_CUBE_ARRAY , WGSLTypes.TEXTURE_DEPTH_MULTISAMPLED_2D , WGSLTypes.UINT32 , WGSLTypes.VEC2 , WGSLTypes.VEC3 , WGSLTypes.VEC4 , WGSLTypes.TEXTURE_2D_ARRAY, WGSLTypes.BINDING_ARRAY - ); + , WGSLTypes.VEC2I, WGSLTypes.VEC3I, WGSLTypes.VEC4I + , WGSLTypes.VEC2U, WGSLTypes.VEC3U, WGSLTypes.VEC4U + , WGSLTypes.VEC2F, WGSLTypes.VEC3F, WGSLTypes.VEC4F + , WGSLTypes.VEC2H, WGSLTypes.VEC3H, WGSLTypes.VEC4H + ); private static final Set KEYWORD_TOKENS = tokens( WGSLTypes.BITCAST , WGSLTypes.BREAK diff --git a/src/main/java/wgslplugin/language/wgsl.bnf b/src/main/java/wgslplugin/language/wgsl.bnf index 2a5a58d..b44c7fb 100644 --- a/src/main/java/wgslplugin/language/wgsl.bnf +++ b/src/main/java/wgslplugin/language/wgsl.bnf @@ -1,5 +1,6 @@ { parserClass="wgslplugin.language.parser.WgslParser" + parserUtilClass="wgslplugin.language.parser.WgslParserUtil" // parserUtilClass="wgslplugin.language.parser.WgslParserUtil" extends="com.intellij.extapi.psi.ASTWrapperPsiElement" @@ -186,6 +187,40 @@ type_decl ::= | ATOMIC TYPE_LESS_THAN type_decl TYPE_GREATER_THAN | texture_sampler_types | BINDING_ARRAY TYPE_LESS_THAN type_decl ( COMMA element_count_expression )? TYPE_GREATER_THAN + | builtin_type_alias + +builtin_type_alias ::= + VEC2I + | VEC3I + | VEC4I + | VEC2U + | VEC3U + | VEC4U + | VEC2F + | VEC3F + | VEC4F + | VEC2H + | VEC3H + | VEC4H + | MAT2X2F + | MAT2X3F + | MAT2X4F + | MAT3X2F + | MAT3X3F + | MAT3X4F + | MAT4X2F + | MAT4X3F + | MAT4X4F + | MAT2X2H + | MAT2X3H + | MAT2X4H + | MAT3X2H + | MAT3X3H + | MAT3X4H + | MAT4X2H + | MAT4X3H + | MAT4X4H + vec_prefix ::= VEC2