From 6938fb27818b23a2810950c6f15985efd1f0b009 Mon Sep 17 00:00:00 2001 From: Jiatai Zhang Date: Tue, 29 Oct 2024 19:56:25 -0400 Subject: [PATCH 1/7] Add description of changes --- benchmarks/wasm/for_loop.wat | 25 +++++++++++++++++++++++++ grammar/WatLexer.g4 | 2 ++ grammar/WatParser.g4 | 5 +++++ src/main/scala/wasm/AST.scala | 1 + src/test/scala/genwasym/TestEval.scala | 3 +++ 5 files changed, 36 insertions(+) create mode 100644 benchmarks/wasm/for_loop.wat diff --git a/benchmarks/wasm/for_loop.wat b/benchmarks/wasm/for_loop.wat new file mode 100644 index 000000000..a19559400 --- /dev/null +++ b/benchmarks/wasm/for_loop.wat @@ -0,0 +1,25 @@ +(module + (func $for_loop (result i32) + (local i32) ;; local 0 + (local i32) ;; local 1: loop counter + + ;; For + (for + ;; init + (local.set 0 (i32.const 0)) + (local.set 1 (i32.const 0)) + + ;; cond + (i32.lt_s (local.get 1) (i32.const 10)) + + ;; post + (local.set 1 (i32.add (local.get 1) (i32.const 1))) + + ;; es + (local.set 0 (i32.add (local.get 0) (i32.const 1))) + ) + + ;; + (local.get 0) + ) +) diff --git a/grammar/WatLexer.g4 b/grammar/WatLexer.g4 index 4e046ffae..c9c1083f0 100644 --- a/grammar/WatLexer.g4 +++ b/grammar/WatLexer.g4 @@ -57,6 +57,8 @@ UNREACHABLE: 'unreachable' ; DROP: 'drop' ; BLOCK: 'block' ; LOOP: 'loop' ; +FOR : 'for'; +VBAR: '|'; END: 'end' ; BR: 'br' ; BR_IF: 'br_if' ; diff --git a/grammar/WatParser.g4 b/grammar/WatParser.g4 index c738e8b69..5f4c10617 100644 --- a/grammar/WatParser.g4 +++ b/grammar/WatParser.g4 @@ -121,6 +121,11 @@ instr /* | callInstrInstr */ | blockInstr | foldedInstr + | forLoop + ; + +forLoop + : 'for' '(' instrList '|' instrList '|' instrList ')' instrList ; plainInstr diff --git a/src/main/scala/wasm/AST.scala b/src/main/scala/wasm/AST.scala index 434acb8ec..e4c768acd 100644 --- a/src/main/scala/wasm/AST.scala +++ b/src/main/scala/wasm/AST.scala @@ -64,6 +64,7 @@ case class Select(ty: Option[List[ValueType]]) extends Instr case class Block(ty: BlockType, instrs: List[Instr]) extends Instr case class IdBlock(id: Int, ty: BlockType, instrs: List[Instr]) extends Instr case class Loop(ty: BlockType, instrs: List[Instr]) extends Instr +case class ForLoop(init:List[Instr], cond: List[Instr], post: List[Instr], body: List[Instr]) extends Instr case class IdLoop(id: Int, ty: BlockType, instrs: List[Instr]) extends Instr case class If(ty: BlockType, thenInstrs: List[Instr], elseInstrs: List[Instr]) extends Instr case class IdIf(ty: BlockType, thenInstrs: IdBlock, elseInstrs: IdBlock) extends Instr diff --git a/src/test/scala/genwasym/TestEval.scala b/src/test/scala/genwasym/TestEval.scala index 810509098..120165c4b 100644 --- a/src/test/scala/genwasym/TestEval.scala +++ b/src/test/scala/genwasym/TestEval.scala @@ -73,6 +73,9 @@ class TestEval extends FunSuite { test("loop block - poly br") { testFile("./benchmarks/wasm/loop_poly.wat", None, ExpStack(List(2, 1))) } + test("for loop") { + testFile("./benchmarks/wasm/for_loop.wat", Some("for_loop"), ExpInt(10)) + } // FIXME: //test("tribonacci-ret") { testFile("./benchmarks/wasm/tribonacci_ret.wat", None, Some(504)) } From 8e13c4e2c7418ee8cb6af2aff4a6f741cbd8cabb Mon Sep 17 00:00:00 2001 From: Jiatai Zhang Date: Tue, 29 Oct 2024 21:37:22 -0400 Subject: [PATCH 2/7] update --- src/main/scala/wasm/MiniWasm.scala | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/scala/wasm/MiniWasm.scala b/src/main/scala/wasm/MiniWasm.scala index 95438b83a..f013d69c0 100644 --- a/src/main/scala/wasm/MiniWasm.scala +++ b/src/main/scala/wasm/MiniWasm.scala @@ -334,6 +334,21 @@ object Evaluator { def loop(retStack: List[Value]): Ans = eval(inner, retStack.take(funcTy.inps.size), frame, restK, loop _ :: trail) loop(inputs) + case ForLoop(init, cond, post, body) => + val restK: Cont[Ans] = retStack => + eval(rest, retStack, frame, kont, trail) + + def loopContinuation(retStack: List[Value]): Ans = { + eval(cond, retStack, frame, { + case I32V(0) :: _ => restK(retStack) + case _ => + eval(body, retStack, frame, newStack => + eval(post, newStack, frame, loopContinuation, trail) + , trail) + }, trail) + } + + eval(init, stack, frame, loopContinuation, trail) case If(ty, thn, els) => val funcTy = getFuncType(frame.module, ty) val I32V(cond) :: newStack = stack From 8cb8e5dd4e25ac75a7f606a8a88d049dcec43f71 Mon Sep 17 00:00:00 2001 From: Jiatai Zhang Date: Thu, 31 Oct 2024 02:22:00 -0400 Subject: [PATCH 3/7] update --- benchmarks/wasm/for_loop.wat | 48 ++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/benchmarks/wasm/for_loop.wat b/benchmarks/wasm/for_loop.wat index a19559400..afebaf3ea 100644 --- a/benchmarks/wasm/for_loop.wat +++ b/benchmarks/wasm/for_loop.wat @@ -1,25 +1,37 @@ (module (func $for_loop (result i32) - (local i32) ;; local 0 - (local i32) ;; local 1: loop counter + (local i32) ;; local 0: + (local i32) ;; local 1: + for + ( + ;; init + i32.const 0 + local.set 0 + i32.const 0 + local.set 1 + | + ;; cond + local.get 1 + i32.const 10 + i32.lt_s + i32.eqz + | + ;; post + local.get 1 + i32.const 1 + i32.add + local.set 1 + ) - ;; For - (for - ;; init - (local.set 0 (i32.const 0)) - (local.set 1 (i32.const 0)) + ;; es + local.get 0 + i32.const 1 + i32.add + local.set 0 + (local.get 0) + ) - ;; cond - (i32.lt_s (local.get 1) (i32.const 10)) + ) - ;; post - (local.set 1 (i32.add (local.get 1) (i32.const 1))) - ;; es - (local.set 0 (i32.add (local.get 0) (i32.const 1))) - ) - ;; - (local.get 0) - ) -) From 9e28faa222b1afce1ab7f08f20ac3dc3c24589a3 Mon Sep 17 00:00:00 2001 From: Jiatai Zhang Date: Thu, 31 Oct 2024 02:37:27 -0400 Subject: [PATCH 4/7] --- grammar/WatLexer.interp | 493 ++ grammar/WatLexer.java | 1496 ++++ grammar/WatLexer.tokens | 281 + grammar/WatParser.interp | 385 + grammar/WatParser.java | 7314 +++++++++++++++++ grammar/WatParser.tokens | 281 + grammar/WatParserBaseListener.java | 903 ++ grammar/WatParserBaseVisitor.java | 518 ++ grammar/WatParserListener.java | 729 ++ grammar/WatParserVisitor.java | 444 + src/main/java/wasm/WatLexer.java | 2556 +++--- src/main/java/wasm/WatParser.java | 3238 ++++---- src/main/java/wasm/WatParserBaseListener.java | 14 +- src/main/java/wasm/WatParserListener.java | 12 +- src/main/scala/wasm/Parser.scala | 8 + 15 files changed, 15642 insertions(+), 3030 deletions(-) create mode 100644 grammar/WatLexer.interp create mode 100644 grammar/WatLexer.java create mode 100644 grammar/WatLexer.tokens create mode 100644 grammar/WatParser.interp create mode 100644 grammar/WatParser.java create mode 100644 grammar/WatParser.tokens create mode 100644 grammar/WatParserBaseListener.java create mode 100644 grammar/WatParserBaseVisitor.java create mode 100644 grammar/WatParserListener.java create mode 100644 grammar/WatParserVisitor.java diff --git a/grammar/WatLexer.interp b/grammar/WatLexer.interp new file mode 100644 index 000000000..86e7e349a --- /dev/null +++ b/grammar/WatLexer.interp @@ -0,0 +1,493 @@ +token literal names: +null +'(' +')' +null +null +null +null +null +null +null +'funcref' +'externref' +'mut' +'nop' +'sym_assert' +'alloc' +'free' +'unreachable' +'drop' +'block' +'loop' +'for' +'|' +'end' +'br' +'br_if' +'br_table' +'return' +'if' +'then' +'else' +'.select' +'call' +'call_indirect' +'return_call' +'return_call_indirect' +'local.get' +'local.set' +'local.tee' +'global.get' +'global.set' +null +null +'_' +'offset=' +'align=' +null +null +'i32' +'i64' +'f32' +'f64' +null +null +'.eqz' +'.eq' +'.ne' +'.lt' +'.lt_s' +'.lt_u' +'.le' +'.le_s' +'.le_u' +'.gt' +'.gt_s' +'.gt_u' +'.ge' +'.ge_s' +'.ge_u' +'.clz' +'.ctz' +'.popcnt' +'.neg' +'.abs' +'.sqrt' +'.ceil' +'.floor' +'.trunc' +'.nearest' +'.add' +'.sub' +'.mul' +'.div' +'.div_s' +'.div_u' +'.rem_s' +'.rem_u' +'.and' +'.or' +'.xor' +'.shl' +'.shr_s' +'.shr_u' +'.rotl' +'.rotr' +'.min' +'.max' +'.copysign' +'.wrap_' +'.trunc_' +'.trunc_sat_' +'.convert_' +'.extend_' +'.demote_' +'.promote_' +'.reinterpret_' +'memory.size' +'memory.grow' +'memory.fill' +'memory.copy' +'memory.init' +null +null +null +null +null +'type' +'func' +'extern' +'start' +'param' +'result' +'local' +'global' +'table' +'memory' +'elem' +'data' +'offset' +'import' +'export' +'module' +'binary' +'quote' +'script' +'register' +'invoke' +'get' +'assert_malformed' +'assert_invalid' +'assert_unlinkable' +'assert_return' +'assert_return_canonical_nan' +'assert_return_arithmetic_nan' +'assert_trap' +'assert_exhaustion' +'input' +'output' +null +'v128' +null +null + +token symbolic names: +null +LPAR +RPAR +NAT +INT +FLOAT +STRING_ +VALUE_TYPE +CONST +SYMBOLIC +FUNCREF +EXTERNREF +MUT +NOP +SYM_ASSERT +ALLOC +FREE +UNREACHABLE +DROP +BLOCK +LOOP +FOR +VBAR +END +BR +BR_IF +BR_TABLE +RETURN +IF +THEN +ELSE +SELECT +CALL +CALL_INDIRECT +RETURN_CALL +RETURN_CALL_INDIRECT +LOCAL_GET +LOCAL_SET +LOCAL_TEE +GLOBAL_GET +GLOBAL_SET +LOAD +STORE +UNDERSCORE +OFFSET_EQ +ALIGN_EQ +SIGN_POSTFIX +MEM_SIZE +I32 +I64 +F32 +F64 +IXX +FXX +OP_EQZ +OP_EQ +OP_NE +OP_LT +OP_LTS +OP_LTU +OP_LE +OP_LES +OP_LEU +OP_GT +OP_GTS +OP_GTU +OP_GE +OP_GES +OP_GEU +OP_CLZ +OP_CTZ +OP_POPCNT +OP_NEG +OP_ABS +OP_SQRT +OP_CEIL +OP_FLOOR +OP_TRUNC +OP_NEAREST +OP_ADD +OP_SUB +OP_MUL +OP_DIV +OP_DIV_S +OP_DIV_U +OP_REM_S +OP_REM_U +OP_AND +OP_OR +OP_XOR +OP_SHL +OP_SHR_S +OP_SHR_U +OP_ROTL +OP_ROTR +OP_MIN +OP_MAX +OP_COPYSIGN +OP_WRAP +OP_TRUNC_ +OP_TRUNC_SAT +OP_CONVERT +OP_EXTEND +OP_DEMOTE +OP_PROMOTE +OP_REINTER +MEMORY_SIZE +MEMORY_GROW +MEMORY_FILL +MEMORY_COPY +MEMORY_INIT +TEST +COMPARE +UNARY +BINARY +CONVERT +TYPE +FUNC +EXTERN +START_ +PARAM +RESULT +LOCAL +GLOBAL +TABLE +MEMORY +ELEM +DATA +OFFSET +IMPORT +EXPORT +MODULE +BIN +QUOTE +SCRIPT +REGISTER +INVOKE +GET +ASSERT_MALFORMED +ASSERT_INVALID +ASSERT_UNLINKABLE +ASSERT_RETURN +ASSERT_RETURN_CANONICAL_NAN +ASSERT_RETURN_ARITHMETIC_NAN +ASSERT_TRAP +ASSERT_EXHAUSTION +INPUT +OUTPUT +VAR +V128 +SPACE +COMMENT + +rule names: +LPAR +RPAR +NAT +INT +FLOAT +STRING_ +VALUE_TYPE +CONST +SYMBOLIC +FUNCREF +EXTERNREF +MUT +NOP +SYM_ASSERT +ALLOC +FREE +UNREACHABLE +DROP +BLOCK +LOOP +FOR +VBAR +END +BR +BR_IF +BR_TABLE +RETURN +IF +THEN +ELSE +SELECT +CALL +CALL_INDIRECT +RETURN_CALL +RETURN_CALL_INDIRECT +LOCAL_GET +LOCAL_SET +LOCAL_TEE +GLOBAL_GET +GLOBAL_SET +LOAD +STORE +UNDERSCORE +OFFSET_EQ +ALIGN_EQ +SIGN_POSTFIX +MEM_SIZE +I32 +I64 +F32 +F64 +IXX +FXX +OP_EQZ +OP_EQ +OP_NE +OP_LT +OP_LTS +OP_LTU +OP_LE +OP_LES +OP_LEU +OP_GT +OP_GTS +OP_GTU +OP_GE +OP_GES +OP_GEU +OP_CLZ +OP_CTZ +OP_POPCNT +OP_NEG +OP_ABS +OP_SQRT +OP_CEIL +OP_FLOOR +OP_TRUNC +OP_NEAREST +OP_ADD +OP_SUB +OP_MUL +OP_DIV +OP_DIV_S +OP_DIV_U +OP_REM_S +OP_REM_U +OP_AND +OP_OR +OP_XOR +OP_SHL +OP_SHR_S +OP_SHR_U +OP_ROTL +OP_ROTR +OP_MIN +OP_MAX +OP_COPYSIGN +OP_WRAP +OP_TRUNC_ +OP_TRUNC_SAT +OP_CONVERT +OP_EXTEND +OP_DEMOTE +OP_PROMOTE +OP_REINTER +MEMORY_SIZE +MEMORY_GROW +MEMORY_FILL +MEMORY_COPY +MEMORY_INIT +TEST +COMPARE +UNARY +BINARY +CONVERT +TYPE +FUNC +EXTERN +START_ +PARAM +RESULT +LOCAL +GLOBAL +TABLE +MEMORY +ELEM +DATA +OFFSET +IMPORT +EXPORT +MODULE +BIN +QUOTE +SCRIPT +REGISTER +INVOKE +GET +ASSERT_MALFORMED +ASSERT_INVALID +ASSERT_UNLINKABLE +ASSERT_RETURN +ASSERT_RETURN_CANONICAL_NAN +ASSERT_RETURN_ARITHMETIC_NAN +ASSERT_TRAP +ASSERT_EXHAUSTION +INPUT +OUTPUT +VAR +V128 +SPACE +COMMENT +Symbol +Num +HexNum +Sign +Digit +HexDigit +Letter +Nat +Int +Frac +HexFrac +Float +String_ +Name +Escape +NXX +Char +Ascii +Ascii_no_nl +Utf8Cont +Utf8 +Utf8_no_nl +Utf8Enc + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 151, 2128, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 629, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 639, 8, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 667, 8, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 3, 51, 687, 8, 51, 1, 52, 1, 52, 3, 52, 691, 8, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1184, 8, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 3, 112, 1259, 8, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 3, 113, 1411, 8, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 3, 114, 1575, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 4, 149, 1889, 8, 149, 11, 149, 12, 149, 1890, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 5, 150, 1899, 8, 150, 10, 150, 12, 150, 1902, 9, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 5, 150, 1910, 8, 150, 10, 150, 12, 150, 1913, 9, 150, 1, 150, 3, 150, 1916, 8, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 152, 1, 152, 3, 152, 1924, 8, 152, 1, 152, 5, 152, 1927, 8, 152, 10, 152, 12, 152, 1930, 9, 152, 1, 153, 1, 153, 3, 153, 1934, 8, 153, 1, 153, 5, 153, 1937, 8, 153, 10, 153, 12, 153, 1940, 9, 153, 1, 154, 1, 154, 1, 155, 1, 155, 1, 156, 1, 156, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 3, 158, 1955, 8, 158, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 161, 1, 161, 1, 162, 3, 162, 1965, 8, 162, 1, 162, 1, 162, 1, 162, 3, 162, 1970, 8, 162, 1, 162, 3, 162, 1973, 8, 162, 1, 162, 1, 162, 1, 162, 3, 162, 1978, 8, 162, 3, 162, 1980, 8, 162, 1, 162, 1, 162, 3, 162, 1984, 8, 162, 1, 162, 1, 162, 1, 162, 3, 162, 1989, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 1997, 8, 162, 1, 162, 3, 162, 2000, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 2008, 8, 162, 3, 162, 2010, 8, 162, 1, 162, 1, 162, 3, 162, 2014, 8, 162, 1, 162, 1, 162, 1, 162, 3, 162, 2019, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 2025, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 2031, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 2042, 8, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 4, 163, 2056, 8, 163, 11, 163, 12, 163, 2057, 1, 163, 1, 163, 5, 163, 2062, 8, 163, 10, 163, 12, 163, 2065, 9, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 4, 164, 2074, 8, 164, 11, 164, 12, 164, 2075, 1, 165, 1, 165, 1, 166, 1, 166, 3, 166, 2082, 8, 166, 1, 167, 1, 167, 1, 168, 1, 168, 1, 169, 1, 169, 1, 170, 1, 170, 1, 171, 1, 171, 3, 171, 2094, 8, 171, 1, 172, 1, 172, 3, 172, 2098, 8, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 3, 173, 2127, 8, 173, 2, 1900, 1911, 0, 174, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 0, 305, 0, 307, 0, 309, 0, 311, 0, 313, 0, 315, 0, 317, 0, 319, 0, 321, 0, 323, 0, 325, 0, 327, 0, 329, 0, 331, 0, 333, 0, 335, 0, 337, 0, 339, 0, 341, 0, 343, 0, 345, 0, 347, 0, 1, 0, 26, 2, 0, 115, 115, 117, 117, 3, 0, 9, 10, 13, 13, 32, 32, 11, 0, 33, 33, 35, 39, 42, 43, 45, 47, 58, 58, 60, 64, 92, 92, 94, 94, 96, 96, 124, 124, 126, 126, 2, 0, 43, 43, 45, 45, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 65, 90, 97, 122, 2, 0, 69, 69, 101, 101, 2, 0, 80, 80, 112, 112, 3, 0, 9, 10, 39, 39, 92, 92, 6, 0, 34, 34, 39, 39, 92, 92, 110, 110, 114, 114, 116, 116, 5, 0, 0, 31, 34, 34, 39, 39, 92, 92, 127, 255, 1, 0, 0, 127, 2, 0, 0, 9, 11, 127, 1, 0, 128, 191, 1, 0, 194, 223, 1, 0, 224, 224, 1, 0, 160, 191, 1, 0, 237, 237, 1, 0, 128, 159, 2, 0, 225, 236, 238, 239, 1, 0, 240, 240, 1, 0, 144, 191, 1, 0, 244, 244, 1, 0, 128, 143, 1, 0, 241, 243, 2214, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 1, 349, 1, 0, 0, 0, 3, 351, 1, 0, 0, 0, 5, 353, 1, 0, 0, 0, 7, 355, 1, 0, 0, 0, 9, 357, 1, 0, 0, 0, 11, 359, 1, 0, 0, 0, 13, 361, 1, 0, 0, 0, 15, 363, 1, 0, 0, 0, 17, 371, 1, 0, 0, 0, 19, 382, 1, 0, 0, 0, 21, 390, 1, 0, 0, 0, 23, 400, 1, 0, 0, 0, 25, 404, 1, 0, 0, 0, 27, 408, 1, 0, 0, 0, 29, 419, 1, 0, 0, 0, 31, 425, 1, 0, 0, 0, 33, 430, 1, 0, 0, 0, 35, 442, 1, 0, 0, 0, 37, 447, 1, 0, 0, 0, 39, 453, 1, 0, 0, 0, 41, 458, 1, 0, 0, 0, 43, 462, 1, 0, 0, 0, 45, 464, 1, 0, 0, 0, 47, 468, 1, 0, 0, 0, 49, 471, 1, 0, 0, 0, 51, 477, 1, 0, 0, 0, 53, 486, 1, 0, 0, 0, 55, 493, 1, 0, 0, 0, 57, 496, 1, 0, 0, 0, 59, 501, 1, 0, 0, 0, 61, 506, 1, 0, 0, 0, 63, 514, 1, 0, 0, 0, 65, 519, 1, 0, 0, 0, 67, 533, 1, 0, 0, 0, 69, 545, 1, 0, 0, 0, 71, 566, 1, 0, 0, 0, 73, 576, 1, 0, 0, 0, 75, 586, 1, 0, 0, 0, 77, 596, 1, 0, 0, 0, 79, 607, 1, 0, 0, 0, 81, 618, 1, 0, 0, 0, 83, 630, 1, 0, 0, 0, 85, 640, 1, 0, 0, 0, 87, 642, 1, 0, 0, 0, 89, 650, 1, 0, 0, 0, 91, 657, 1, 0, 0, 0, 93, 666, 1, 0, 0, 0, 95, 668, 1, 0, 0, 0, 97, 672, 1, 0, 0, 0, 99, 676, 1, 0, 0, 0, 101, 680, 1, 0, 0, 0, 103, 686, 1, 0, 0, 0, 105, 690, 1, 0, 0, 0, 107, 692, 1, 0, 0, 0, 109, 697, 1, 0, 0, 0, 111, 701, 1, 0, 0, 0, 113, 705, 1, 0, 0, 0, 115, 709, 1, 0, 0, 0, 117, 715, 1, 0, 0, 0, 119, 721, 1, 0, 0, 0, 121, 725, 1, 0, 0, 0, 123, 731, 1, 0, 0, 0, 125, 737, 1, 0, 0, 0, 127, 741, 1, 0, 0, 0, 129, 747, 1, 0, 0, 0, 131, 753, 1, 0, 0, 0, 133, 757, 1, 0, 0, 0, 135, 763, 1, 0, 0, 0, 137, 769, 1, 0, 0, 0, 139, 774, 1, 0, 0, 0, 141, 779, 1, 0, 0, 0, 143, 787, 1, 0, 0, 0, 145, 792, 1, 0, 0, 0, 147, 797, 1, 0, 0, 0, 149, 803, 1, 0, 0, 0, 151, 809, 1, 0, 0, 0, 153, 816, 1, 0, 0, 0, 155, 823, 1, 0, 0, 0, 157, 832, 1, 0, 0, 0, 159, 837, 1, 0, 0, 0, 161, 842, 1, 0, 0, 0, 163, 847, 1, 0, 0, 0, 165, 852, 1, 0, 0, 0, 167, 859, 1, 0, 0, 0, 169, 866, 1, 0, 0, 0, 171, 873, 1, 0, 0, 0, 173, 880, 1, 0, 0, 0, 175, 885, 1, 0, 0, 0, 177, 889, 1, 0, 0, 0, 179, 894, 1, 0, 0, 0, 181, 899, 1, 0, 0, 0, 183, 906, 1, 0, 0, 0, 185, 913, 1, 0, 0, 0, 187, 919, 1, 0, 0, 0, 189, 925, 1, 0, 0, 0, 191, 930, 1, 0, 0, 0, 193, 935, 1, 0, 0, 0, 195, 945, 1, 0, 0, 0, 197, 952, 1, 0, 0, 0, 199, 960, 1, 0, 0, 0, 201, 972, 1, 0, 0, 0, 203, 982, 1, 0, 0, 0, 205, 991, 1, 0, 0, 0, 207, 1000, 1, 0, 0, 0, 209, 1010, 1, 0, 0, 0, 211, 1024, 1, 0, 0, 0, 213, 1036, 1, 0, 0, 0, 215, 1048, 1, 0, 0, 0, 217, 1060, 1, 0, 0, 0, 219, 1072, 1, 0, 0, 0, 221, 1084, 1, 0, 0, 0, 223, 1183, 1, 0, 0, 0, 225, 1258, 1, 0, 0, 0, 227, 1410, 1, 0, 0, 0, 229, 1574, 1, 0, 0, 0, 231, 1576, 1, 0, 0, 0, 233, 1581, 1, 0, 0, 0, 235, 1586, 1, 0, 0, 0, 237, 1593, 1, 0, 0, 0, 239, 1599, 1, 0, 0, 0, 241, 1605, 1, 0, 0, 0, 243, 1612, 1, 0, 0, 0, 245, 1618, 1, 0, 0, 0, 247, 1625, 1, 0, 0, 0, 249, 1631, 1, 0, 0, 0, 251, 1638, 1, 0, 0, 0, 253, 1643, 1, 0, 0, 0, 255, 1648, 1, 0, 0, 0, 257, 1655, 1, 0, 0, 0, 259, 1662, 1, 0, 0, 0, 261, 1669, 1, 0, 0, 0, 263, 1676, 1, 0, 0, 0, 265, 1683, 1, 0, 0, 0, 267, 1689, 1, 0, 0, 0, 269, 1696, 1, 0, 0, 0, 271, 1705, 1, 0, 0, 0, 273, 1712, 1, 0, 0, 0, 275, 1716, 1, 0, 0, 0, 277, 1733, 1, 0, 0, 0, 279, 1748, 1, 0, 0, 0, 281, 1766, 1, 0, 0, 0, 283, 1780, 1, 0, 0, 0, 285, 1808, 1, 0, 0, 0, 287, 1837, 1, 0, 0, 0, 289, 1849, 1, 0, 0, 0, 291, 1867, 1, 0, 0, 0, 293, 1873, 1, 0, 0, 0, 295, 1880, 1, 0, 0, 0, 297, 1882, 1, 0, 0, 0, 299, 1888, 1, 0, 0, 0, 301, 1915, 1, 0, 0, 0, 303, 1919, 1, 0, 0, 0, 305, 1921, 1, 0, 0, 0, 307, 1931, 1, 0, 0, 0, 309, 1941, 1, 0, 0, 0, 311, 1943, 1, 0, 0, 0, 313, 1945, 1, 0, 0, 0, 315, 1947, 1, 0, 0, 0, 317, 1954, 1, 0, 0, 0, 319, 1956, 1, 0, 0, 0, 321, 1959, 1, 0, 0, 0, 323, 1961, 1, 0, 0, 0, 325, 2041, 1, 0, 0, 0, 327, 2043, 1, 0, 0, 0, 329, 2068, 1, 0, 0, 0, 331, 2077, 1, 0, 0, 0, 333, 2081, 1, 0, 0, 0, 335, 2083, 1, 0, 0, 0, 337, 2085, 1, 0, 0, 0, 339, 2087, 1, 0, 0, 0, 341, 2089, 1, 0, 0, 0, 343, 2093, 1, 0, 0, 0, 345, 2097, 1, 0, 0, 0, 347, 2126, 1, 0, 0, 0, 349, 350, 5, 40, 0, 0, 350, 2, 1, 0, 0, 0, 351, 352, 5, 41, 0, 0, 352, 4, 1, 0, 0, 0, 353, 354, 3, 317, 158, 0, 354, 6, 1, 0, 0, 0, 355, 356, 3, 319, 159, 0, 356, 8, 1, 0, 0, 0, 357, 358, 3, 325, 162, 0, 358, 10, 1, 0, 0, 0, 359, 360, 3, 327, 163, 0, 360, 12, 1, 0, 0, 0, 361, 362, 3, 333, 166, 0, 362, 14, 1, 0, 0, 0, 363, 364, 3, 333, 166, 0, 364, 365, 5, 46, 0, 0, 365, 366, 5, 99, 0, 0, 366, 367, 5, 111, 0, 0, 367, 368, 5, 110, 0, 0, 368, 369, 5, 115, 0, 0, 369, 370, 5, 116, 0, 0, 370, 16, 1, 0, 0, 0, 371, 372, 3, 333, 166, 0, 372, 373, 5, 46, 0, 0, 373, 374, 5, 115, 0, 0, 374, 375, 5, 121, 0, 0, 375, 376, 5, 109, 0, 0, 376, 377, 5, 98, 0, 0, 377, 378, 5, 111, 0, 0, 378, 379, 5, 108, 0, 0, 379, 380, 5, 105, 0, 0, 380, 381, 5, 99, 0, 0, 381, 18, 1, 0, 0, 0, 382, 383, 5, 102, 0, 0, 383, 384, 5, 117, 0, 0, 384, 385, 5, 110, 0, 0, 385, 386, 5, 99, 0, 0, 386, 387, 5, 114, 0, 0, 387, 388, 5, 101, 0, 0, 388, 389, 5, 102, 0, 0, 389, 20, 1, 0, 0, 0, 390, 391, 5, 101, 0, 0, 391, 392, 5, 120, 0, 0, 392, 393, 5, 116, 0, 0, 393, 394, 5, 101, 0, 0, 394, 395, 5, 114, 0, 0, 395, 396, 5, 110, 0, 0, 396, 397, 5, 114, 0, 0, 397, 398, 5, 101, 0, 0, 398, 399, 5, 102, 0, 0, 399, 22, 1, 0, 0, 0, 400, 401, 5, 109, 0, 0, 401, 402, 5, 117, 0, 0, 402, 403, 5, 116, 0, 0, 403, 24, 1, 0, 0, 0, 404, 405, 5, 110, 0, 0, 405, 406, 5, 111, 0, 0, 406, 407, 5, 112, 0, 0, 407, 26, 1, 0, 0, 0, 408, 409, 5, 115, 0, 0, 409, 410, 5, 121, 0, 0, 410, 411, 5, 109, 0, 0, 411, 412, 5, 95, 0, 0, 412, 413, 5, 97, 0, 0, 413, 414, 5, 115, 0, 0, 414, 415, 5, 115, 0, 0, 415, 416, 5, 101, 0, 0, 416, 417, 5, 114, 0, 0, 417, 418, 5, 116, 0, 0, 418, 28, 1, 0, 0, 0, 419, 420, 5, 97, 0, 0, 420, 421, 5, 108, 0, 0, 421, 422, 5, 108, 0, 0, 422, 423, 5, 111, 0, 0, 423, 424, 5, 99, 0, 0, 424, 30, 1, 0, 0, 0, 425, 426, 5, 102, 0, 0, 426, 427, 5, 114, 0, 0, 427, 428, 5, 101, 0, 0, 428, 429, 5, 101, 0, 0, 429, 32, 1, 0, 0, 0, 430, 431, 5, 117, 0, 0, 431, 432, 5, 110, 0, 0, 432, 433, 5, 114, 0, 0, 433, 434, 5, 101, 0, 0, 434, 435, 5, 97, 0, 0, 435, 436, 5, 99, 0, 0, 436, 437, 5, 104, 0, 0, 437, 438, 5, 97, 0, 0, 438, 439, 5, 98, 0, 0, 439, 440, 5, 108, 0, 0, 440, 441, 5, 101, 0, 0, 441, 34, 1, 0, 0, 0, 442, 443, 5, 100, 0, 0, 443, 444, 5, 114, 0, 0, 444, 445, 5, 111, 0, 0, 445, 446, 5, 112, 0, 0, 446, 36, 1, 0, 0, 0, 447, 448, 5, 98, 0, 0, 448, 449, 5, 108, 0, 0, 449, 450, 5, 111, 0, 0, 450, 451, 5, 99, 0, 0, 451, 452, 5, 107, 0, 0, 452, 38, 1, 0, 0, 0, 453, 454, 5, 108, 0, 0, 454, 455, 5, 111, 0, 0, 455, 456, 5, 111, 0, 0, 456, 457, 5, 112, 0, 0, 457, 40, 1, 0, 0, 0, 458, 459, 5, 102, 0, 0, 459, 460, 5, 111, 0, 0, 460, 461, 5, 114, 0, 0, 461, 42, 1, 0, 0, 0, 462, 463, 5, 124, 0, 0, 463, 44, 1, 0, 0, 0, 464, 465, 5, 101, 0, 0, 465, 466, 5, 110, 0, 0, 466, 467, 5, 100, 0, 0, 467, 46, 1, 0, 0, 0, 468, 469, 5, 98, 0, 0, 469, 470, 5, 114, 0, 0, 470, 48, 1, 0, 0, 0, 471, 472, 5, 98, 0, 0, 472, 473, 5, 114, 0, 0, 473, 474, 5, 95, 0, 0, 474, 475, 5, 105, 0, 0, 475, 476, 5, 102, 0, 0, 476, 50, 1, 0, 0, 0, 477, 478, 5, 98, 0, 0, 478, 479, 5, 114, 0, 0, 479, 480, 5, 95, 0, 0, 480, 481, 5, 116, 0, 0, 481, 482, 5, 97, 0, 0, 482, 483, 5, 98, 0, 0, 483, 484, 5, 108, 0, 0, 484, 485, 5, 101, 0, 0, 485, 52, 1, 0, 0, 0, 486, 487, 5, 114, 0, 0, 487, 488, 5, 101, 0, 0, 488, 489, 5, 116, 0, 0, 489, 490, 5, 117, 0, 0, 490, 491, 5, 114, 0, 0, 491, 492, 5, 110, 0, 0, 492, 54, 1, 0, 0, 0, 493, 494, 5, 105, 0, 0, 494, 495, 5, 102, 0, 0, 495, 56, 1, 0, 0, 0, 496, 497, 5, 116, 0, 0, 497, 498, 5, 104, 0, 0, 498, 499, 5, 101, 0, 0, 499, 500, 5, 110, 0, 0, 500, 58, 1, 0, 0, 0, 501, 502, 5, 101, 0, 0, 502, 503, 5, 108, 0, 0, 503, 504, 5, 115, 0, 0, 504, 505, 5, 101, 0, 0, 505, 60, 1, 0, 0, 0, 506, 507, 5, 46, 0, 0, 507, 508, 5, 115, 0, 0, 508, 509, 5, 101, 0, 0, 509, 510, 5, 108, 0, 0, 510, 511, 5, 101, 0, 0, 511, 512, 5, 99, 0, 0, 512, 513, 5, 116, 0, 0, 513, 62, 1, 0, 0, 0, 514, 515, 5, 99, 0, 0, 515, 516, 5, 97, 0, 0, 516, 517, 5, 108, 0, 0, 517, 518, 5, 108, 0, 0, 518, 64, 1, 0, 0, 0, 519, 520, 5, 99, 0, 0, 520, 521, 5, 97, 0, 0, 521, 522, 5, 108, 0, 0, 522, 523, 5, 108, 0, 0, 523, 524, 5, 95, 0, 0, 524, 525, 5, 105, 0, 0, 525, 526, 5, 110, 0, 0, 526, 527, 5, 100, 0, 0, 527, 528, 5, 105, 0, 0, 528, 529, 5, 114, 0, 0, 529, 530, 5, 101, 0, 0, 530, 531, 5, 99, 0, 0, 531, 532, 5, 116, 0, 0, 532, 66, 1, 0, 0, 0, 533, 534, 5, 114, 0, 0, 534, 535, 5, 101, 0, 0, 535, 536, 5, 116, 0, 0, 536, 537, 5, 117, 0, 0, 537, 538, 5, 114, 0, 0, 538, 539, 5, 110, 0, 0, 539, 540, 5, 95, 0, 0, 540, 541, 5, 99, 0, 0, 541, 542, 5, 97, 0, 0, 542, 543, 5, 108, 0, 0, 543, 544, 5, 108, 0, 0, 544, 68, 1, 0, 0, 0, 545, 546, 5, 114, 0, 0, 546, 547, 5, 101, 0, 0, 547, 548, 5, 116, 0, 0, 548, 549, 5, 117, 0, 0, 549, 550, 5, 114, 0, 0, 550, 551, 5, 110, 0, 0, 551, 552, 5, 95, 0, 0, 552, 553, 5, 99, 0, 0, 553, 554, 5, 97, 0, 0, 554, 555, 5, 108, 0, 0, 555, 556, 5, 108, 0, 0, 556, 557, 5, 95, 0, 0, 557, 558, 5, 105, 0, 0, 558, 559, 5, 110, 0, 0, 559, 560, 5, 100, 0, 0, 560, 561, 5, 105, 0, 0, 561, 562, 5, 114, 0, 0, 562, 563, 5, 101, 0, 0, 563, 564, 5, 99, 0, 0, 564, 565, 5, 116, 0, 0, 565, 70, 1, 0, 0, 0, 566, 567, 5, 108, 0, 0, 567, 568, 5, 111, 0, 0, 568, 569, 5, 99, 0, 0, 569, 570, 5, 97, 0, 0, 570, 571, 5, 108, 0, 0, 571, 572, 5, 46, 0, 0, 572, 573, 5, 103, 0, 0, 573, 574, 5, 101, 0, 0, 574, 575, 5, 116, 0, 0, 575, 72, 1, 0, 0, 0, 576, 577, 5, 108, 0, 0, 577, 578, 5, 111, 0, 0, 578, 579, 5, 99, 0, 0, 579, 580, 5, 97, 0, 0, 580, 581, 5, 108, 0, 0, 581, 582, 5, 46, 0, 0, 582, 583, 5, 115, 0, 0, 583, 584, 5, 101, 0, 0, 584, 585, 5, 116, 0, 0, 585, 74, 1, 0, 0, 0, 586, 587, 5, 108, 0, 0, 587, 588, 5, 111, 0, 0, 588, 589, 5, 99, 0, 0, 589, 590, 5, 97, 0, 0, 590, 591, 5, 108, 0, 0, 591, 592, 5, 46, 0, 0, 592, 593, 5, 116, 0, 0, 593, 594, 5, 101, 0, 0, 594, 595, 5, 101, 0, 0, 595, 76, 1, 0, 0, 0, 596, 597, 5, 103, 0, 0, 597, 598, 5, 108, 0, 0, 598, 599, 5, 111, 0, 0, 599, 600, 5, 98, 0, 0, 600, 601, 5, 97, 0, 0, 601, 602, 5, 108, 0, 0, 602, 603, 5, 46, 0, 0, 603, 604, 5, 103, 0, 0, 604, 605, 5, 101, 0, 0, 605, 606, 5, 116, 0, 0, 606, 78, 1, 0, 0, 0, 607, 608, 5, 103, 0, 0, 608, 609, 5, 108, 0, 0, 609, 610, 5, 111, 0, 0, 610, 611, 5, 98, 0, 0, 611, 612, 5, 97, 0, 0, 612, 613, 5, 108, 0, 0, 613, 614, 5, 46, 0, 0, 614, 615, 5, 115, 0, 0, 615, 616, 5, 101, 0, 0, 616, 617, 5, 116, 0, 0, 617, 80, 1, 0, 0, 0, 618, 619, 5, 46, 0, 0, 619, 620, 5, 108, 0, 0, 620, 621, 5, 111, 0, 0, 621, 622, 5, 97, 0, 0, 622, 623, 5, 100, 0, 0, 623, 628, 1, 0, 0, 0, 624, 625, 3, 93, 46, 0, 625, 626, 3, 85, 42, 0, 626, 627, 3, 91, 45, 0, 627, 629, 1, 0, 0, 0, 628, 624, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 82, 1, 0, 0, 0, 630, 631, 5, 46, 0, 0, 631, 632, 5, 115, 0, 0, 632, 633, 5, 116, 0, 0, 633, 634, 5, 111, 0, 0, 634, 635, 5, 114, 0, 0, 635, 636, 5, 101, 0, 0, 636, 638, 1, 0, 0, 0, 637, 639, 3, 93, 46, 0, 638, 637, 1, 0, 0, 0, 638, 639, 1, 0, 0, 0, 639, 84, 1, 0, 0, 0, 640, 641, 5, 95, 0, 0, 641, 86, 1, 0, 0, 0, 642, 643, 5, 111, 0, 0, 643, 644, 5, 102, 0, 0, 644, 645, 5, 102, 0, 0, 645, 646, 5, 115, 0, 0, 646, 647, 5, 101, 0, 0, 647, 648, 5, 116, 0, 0, 648, 649, 5, 61, 0, 0, 649, 88, 1, 0, 0, 0, 650, 651, 5, 97, 0, 0, 651, 652, 5, 108, 0, 0, 652, 653, 5, 105, 0, 0, 653, 654, 5, 103, 0, 0, 654, 655, 5, 110, 0, 0, 655, 656, 5, 61, 0, 0, 656, 90, 1, 0, 0, 0, 657, 658, 7, 0, 0, 0, 658, 92, 1, 0, 0, 0, 659, 667, 5, 56, 0, 0, 660, 661, 5, 49, 0, 0, 661, 667, 5, 54, 0, 0, 662, 663, 5, 51, 0, 0, 663, 667, 5, 50, 0, 0, 664, 665, 5, 54, 0, 0, 665, 667, 5, 52, 0, 0, 666, 659, 1, 0, 0, 0, 666, 660, 1, 0, 0, 0, 666, 662, 1, 0, 0, 0, 666, 664, 1, 0, 0, 0, 667, 94, 1, 0, 0, 0, 668, 669, 5, 105, 0, 0, 669, 670, 5, 51, 0, 0, 670, 671, 5, 50, 0, 0, 671, 96, 1, 0, 0, 0, 672, 673, 5, 105, 0, 0, 673, 674, 5, 54, 0, 0, 674, 675, 5, 52, 0, 0, 675, 98, 1, 0, 0, 0, 676, 677, 5, 102, 0, 0, 677, 678, 5, 51, 0, 0, 678, 679, 5, 50, 0, 0, 679, 100, 1, 0, 0, 0, 680, 681, 5, 102, 0, 0, 681, 682, 5, 54, 0, 0, 682, 683, 5, 52, 0, 0, 683, 102, 1, 0, 0, 0, 684, 687, 3, 95, 47, 0, 685, 687, 3, 97, 48, 0, 686, 684, 1, 0, 0, 0, 686, 685, 1, 0, 0, 0, 687, 104, 1, 0, 0, 0, 688, 691, 3, 99, 49, 0, 689, 691, 3, 101, 50, 0, 690, 688, 1, 0, 0, 0, 690, 689, 1, 0, 0, 0, 691, 106, 1, 0, 0, 0, 692, 693, 5, 46, 0, 0, 693, 694, 5, 101, 0, 0, 694, 695, 5, 113, 0, 0, 695, 696, 5, 122, 0, 0, 696, 108, 1, 0, 0, 0, 697, 698, 5, 46, 0, 0, 698, 699, 5, 101, 0, 0, 699, 700, 5, 113, 0, 0, 700, 110, 1, 0, 0, 0, 701, 702, 5, 46, 0, 0, 702, 703, 5, 110, 0, 0, 703, 704, 5, 101, 0, 0, 704, 112, 1, 0, 0, 0, 705, 706, 5, 46, 0, 0, 706, 707, 5, 108, 0, 0, 707, 708, 5, 116, 0, 0, 708, 114, 1, 0, 0, 0, 709, 710, 5, 46, 0, 0, 710, 711, 5, 108, 0, 0, 711, 712, 5, 116, 0, 0, 712, 713, 5, 95, 0, 0, 713, 714, 5, 115, 0, 0, 714, 116, 1, 0, 0, 0, 715, 716, 5, 46, 0, 0, 716, 717, 5, 108, 0, 0, 717, 718, 5, 116, 0, 0, 718, 719, 5, 95, 0, 0, 719, 720, 5, 117, 0, 0, 720, 118, 1, 0, 0, 0, 721, 722, 5, 46, 0, 0, 722, 723, 5, 108, 0, 0, 723, 724, 5, 101, 0, 0, 724, 120, 1, 0, 0, 0, 725, 726, 5, 46, 0, 0, 726, 727, 5, 108, 0, 0, 727, 728, 5, 101, 0, 0, 728, 729, 5, 95, 0, 0, 729, 730, 5, 115, 0, 0, 730, 122, 1, 0, 0, 0, 731, 732, 5, 46, 0, 0, 732, 733, 5, 108, 0, 0, 733, 734, 5, 101, 0, 0, 734, 735, 5, 95, 0, 0, 735, 736, 5, 117, 0, 0, 736, 124, 1, 0, 0, 0, 737, 738, 5, 46, 0, 0, 738, 739, 5, 103, 0, 0, 739, 740, 5, 116, 0, 0, 740, 126, 1, 0, 0, 0, 741, 742, 5, 46, 0, 0, 742, 743, 5, 103, 0, 0, 743, 744, 5, 116, 0, 0, 744, 745, 5, 95, 0, 0, 745, 746, 5, 115, 0, 0, 746, 128, 1, 0, 0, 0, 747, 748, 5, 46, 0, 0, 748, 749, 5, 103, 0, 0, 749, 750, 5, 116, 0, 0, 750, 751, 5, 95, 0, 0, 751, 752, 5, 117, 0, 0, 752, 130, 1, 0, 0, 0, 753, 754, 5, 46, 0, 0, 754, 755, 5, 103, 0, 0, 755, 756, 5, 101, 0, 0, 756, 132, 1, 0, 0, 0, 757, 758, 5, 46, 0, 0, 758, 759, 5, 103, 0, 0, 759, 760, 5, 101, 0, 0, 760, 761, 5, 95, 0, 0, 761, 762, 5, 115, 0, 0, 762, 134, 1, 0, 0, 0, 763, 764, 5, 46, 0, 0, 764, 765, 5, 103, 0, 0, 765, 766, 5, 101, 0, 0, 766, 767, 5, 95, 0, 0, 767, 768, 5, 117, 0, 0, 768, 136, 1, 0, 0, 0, 769, 770, 5, 46, 0, 0, 770, 771, 5, 99, 0, 0, 771, 772, 5, 108, 0, 0, 772, 773, 5, 122, 0, 0, 773, 138, 1, 0, 0, 0, 774, 775, 5, 46, 0, 0, 775, 776, 5, 99, 0, 0, 776, 777, 5, 116, 0, 0, 777, 778, 5, 122, 0, 0, 778, 140, 1, 0, 0, 0, 779, 780, 5, 46, 0, 0, 780, 781, 5, 112, 0, 0, 781, 782, 5, 111, 0, 0, 782, 783, 5, 112, 0, 0, 783, 784, 5, 99, 0, 0, 784, 785, 5, 110, 0, 0, 785, 786, 5, 116, 0, 0, 786, 142, 1, 0, 0, 0, 787, 788, 5, 46, 0, 0, 788, 789, 5, 110, 0, 0, 789, 790, 5, 101, 0, 0, 790, 791, 5, 103, 0, 0, 791, 144, 1, 0, 0, 0, 792, 793, 5, 46, 0, 0, 793, 794, 5, 97, 0, 0, 794, 795, 5, 98, 0, 0, 795, 796, 5, 115, 0, 0, 796, 146, 1, 0, 0, 0, 797, 798, 5, 46, 0, 0, 798, 799, 5, 115, 0, 0, 799, 800, 5, 113, 0, 0, 800, 801, 5, 114, 0, 0, 801, 802, 5, 116, 0, 0, 802, 148, 1, 0, 0, 0, 803, 804, 5, 46, 0, 0, 804, 805, 5, 99, 0, 0, 805, 806, 5, 101, 0, 0, 806, 807, 5, 105, 0, 0, 807, 808, 5, 108, 0, 0, 808, 150, 1, 0, 0, 0, 809, 810, 5, 46, 0, 0, 810, 811, 5, 102, 0, 0, 811, 812, 5, 108, 0, 0, 812, 813, 5, 111, 0, 0, 813, 814, 5, 111, 0, 0, 814, 815, 5, 114, 0, 0, 815, 152, 1, 0, 0, 0, 816, 817, 5, 46, 0, 0, 817, 818, 5, 116, 0, 0, 818, 819, 5, 114, 0, 0, 819, 820, 5, 117, 0, 0, 820, 821, 5, 110, 0, 0, 821, 822, 5, 99, 0, 0, 822, 154, 1, 0, 0, 0, 823, 824, 5, 46, 0, 0, 824, 825, 5, 110, 0, 0, 825, 826, 5, 101, 0, 0, 826, 827, 5, 97, 0, 0, 827, 828, 5, 114, 0, 0, 828, 829, 5, 101, 0, 0, 829, 830, 5, 115, 0, 0, 830, 831, 5, 116, 0, 0, 831, 156, 1, 0, 0, 0, 832, 833, 5, 46, 0, 0, 833, 834, 5, 97, 0, 0, 834, 835, 5, 100, 0, 0, 835, 836, 5, 100, 0, 0, 836, 158, 1, 0, 0, 0, 837, 838, 5, 46, 0, 0, 838, 839, 5, 115, 0, 0, 839, 840, 5, 117, 0, 0, 840, 841, 5, 98, 0, 0, 841, 160, 1, 0, 0, 0, 842, 843, 5, 46, 0, 0, 843, 844, 5, 109, 0, 0, 844, 845, 5, 117, 0, 0, 845, 846, 5, 108, 0, 0, 846, 162, 1, 0, 0, 0, 847, 848, 5, 46, 0, 0, 848, 849, 5, 100, 0, 0, 849, 850, 5, 105, 0, 0, 850, 851, 5, 118, 0, 0, 851, 164, 1, 0, 0, 0, 852, 853, 5, 46, 0, 0, 853, 854, 5, 100, 0, 0, 854, 855, 5, 105, 0, 0, 855, 856, 5, 118, 0, 0, 856, 857, 5, 95, 0, 0, 857, 858, 5, 115, 0, 0, 858, 166, 1, 0, 0, 0, 859, 860, 5, 46, 0, 0, 860, 861, 5, 100, 0, 0, 861, 862, 5, 105, 0, 0, 862, 863, 5, 118, 0, 0, 863, 864, 5, 95, 0, 0, 864, 865, 5, 117, 0, 0, 865, 168, 1, 0, 0, 0, 866, 867, 5, 46, 0, 0, 867, 868, 5, 114, 0, 0, 868, 869, 5, 101, 0, 0, 869, 870, 5, 109, 0, 0, 870, 871, 5, 95, 0, 0, 871, 872, 5, 115, 0, 0, 872, 170, 1, 0, 0, 0, 873, 874, 5, 46, 0, 0, 874, 875, 5, 114, 0, 0, 875, 876, 5, 101, 0, 0, 876, 877, 5, 109, 0, 0, 877, 878, 5, 95, 0, 0, 878, 879, 5, 117, 0, 0, 879, 172, 1, 0, 0, 0, 880, 881, 5, 46, 0, 0, 881, 882, 5, 97, 0, 0, 882, 883, 5, 110, 0, 0, 883, 884, 5, 100, 0, 0, 884, 174, 1, 0, 0, 0, 885, 886, 5, 46, 0, 0, 886, 887, 5, 111, 0, 0, 887, 888, 5, 114, 0, 0, 888, 176, 1, 0, 0, 0, 889, 890, 5, 46, 0, 0, 890, 891, 5, 120, 0, 0, 891, 892, 5, 111, 0, 0, 892, 893, 5, 114, 0, 0, 893, 178, 1, 0, 0, 0, 894, 895, 5, 46, 0, 0, 895, 896, 5, 115, 0, 0, 896, 897, 5, 104, 0, 0, 897, 898, 5, 108, 0, 0, 898, 180, 1, 0, 0, 0, 899, 900, 5, 46, 0, 0, 900, 901, 5, 115, 0, 0, 901, 902, 5, 104, 0, 0, 902, 903, 5, 114, 0, 0, 903, 904, 5, 95, 0, 0, 904, 905, 5, 115, 0, 0, 905, 182, 1, 0, 0, 0, 906, 907, 5, 46, 0, 0, 907, 908, 5, 115, 0, 0, 908, 909, 5, 104, 0, 0, 909, 910, 5, 114, 0, 0, 910, 911, 5, 95, 0, 0, 911, 912, 5, 117, 0, 0, 912, 184, 1, 0, 0, 0, 913, 914, 5, 46, 0, 0, 914, 915, 5, 114, 0, 0, 915, 916, 5, 111, 0, 0, 916, 917, 5, 116, 0, 0, 917, 918, 5, 108, 0, 0, 918, 186, 1, 0, 0, 0, 919, 920, 5, 46, 0, 0, 920, 921, 5, 114, 0, 0, 921, 922, 5, 111, 0, 0, 922, 923, 5, 116, 0, 0, 923, 924, 5, 114, 0, 0, 924, 188, 1, 0, 0, 0, 925, 926, 5, 46, 0, 0, 926, 927, 5, 109, 0, 0, 927, 928, 5, 105, 0, 0, 928, 929, 5, 110, 0, 0, 929, 190, 1, 0, 0, 0, 930, 931, 5, 46, 0, 0, 931, 932, 5, 109, 0, 0, 932, 933, 5, 97, 0, 0, 933, 934, 5, 120, 0, 0, 934, 192, 1, 0, 0, 0, 935, 936, 5, 46, 0, 0, 936, 937, 5, 99, 0, 0, 937, 938, 5, 111, 0, 0, 938, 939, 5, 112, 0, 0, 939, 940, 5, 121, 0, 0, 940, 941, 5, 115, 0, 0, 941, 942, 5, 105, 0, 0, 942, 943, 5, 103, 0, 0, 943, 944, 5, 110, 0, 0, 944, 194, 1, 0, 0, 0, 945, 946, 5, 46, 0, 0, 946, 947, 5, 119, 0, 0, 947, 948, 5, 114, 0, 0, 948, 949, 5, 97, 0, 0, 949, 950, 5, 112, 0, 0, 950, 951, 5, 95, 0, 0, 951, 196, 1, 0, 0, 0, 952, 953, 5, 46, 0, 0, 953, 954, 5, 116, 0, 0, 954, 955, 5, 114, 0, 0, 955, 956, 5, 117, 0, 0, 956, 957, 5, 110, 0, 0, 957, 958, 5, 99, 0, 0, 958, 959, 5, 95, 0, 0, 959, 198, 1, 0, 0, 0, 960, 961, 5, 46, 0, 0, 961, 962, 5, 116, 0, 0, 962, 963, 5, 114, 0, 0, 963, 964, 5, 117, 0, 0, 964, 965, 5, 110, 0, 0, 965, 966, 5, 99, 0, 0, 966, 967, 5, 95, 0, 0, 967, 968, 5, 115, 0, 0, 968, 969, 5, 97, 0, 0, 969, 970, 5, 116, 0, 0, 970, 971, 5, 95, 0, 0, 971, 200, 1, 0, 0, 0, 972, 973, 5, 46, 0, 0, 973, 974, 5, 99, 0, 0, 974, 975, 5, 111, 0, 0, 975, 976, 5, 110, 0, 0, 976, 977, 5, 118, 0, 0, 977, 978, 5, 101, 0, 0, 978, 979, 5, 114, 0, 0, 979, 980, 5, 116, 0, 0, 980, 981, 5, 95, 0, 0, 981, 202, 1, 0, 0, 0, 982, 983, 5, 46, 0, 0, 983, 984, 5, 101, 0, 0, 984, 985, 5, 120, 0, 0, 985, 986, 5, 116, 0, 0, 986, 987, 5, 101, 0, 0, 987, 988, 5, 110, 0, 0, 988, 989, 5, 100, 0, 0, 989, 990, 5, 95, 0, 0, 990, 204, 1, 0, 0, 0, 991, 992, 5, 46, 0, 0, 992, 993, 5, 100, 0, 0, 993, 994, 5, 101, 0, 0, 994, 995, 5, 109, 0, 0, 995, 996, 5, 111, 0, 0, 996, 997, 5, 116, 0, 0, 997, 998, 5, 101, 0, 0, 998, 999, 5, 95, 0, 0, 999, 206, 1, 0, 0, 0, 1000, 1001, 5, 46, 0, 0, 1001, 1002, 5, 112, 0, 0, 1002, 1003, 5, 114, 0, 0, 1003, 1004, 5, 111, 0, 0, 1004, 1005, 5, 109, 0, 0, 1005, 1006, 5, 111, 0, 0, 1006, 1007, 5, 116, 0, 0, 1007, 1008, 5, 101, 0, 0, 1008, 1009, 5, 95, 0, 0, 1009, 208, 1, 0, 0, 0, 1010, 1011, 5, 46, 0, 0, 1011, 1012, 5, 114, 0, 0, 1012, 1013, 5, 101, 0, 0, 1013, 1014, 5, 105, 0, 0, 1014, 1015, 5, 110, 0, 0, 1015, 1016, 5, 116, 0, 0, 1016, 1017, 5, 101, 0, 0, 1017, 1018, 5, 114, 0, 0, 1018, 1019, 5, 112, 0, 0, 1019, 1020, 5, 114, 0, 0, 1020, 1021, 5, 101, 0, 0, 1021, 1022, 5, 116, 0, 0, 1022, 1023, 5, 95, 0, 0, 1023, 210, 1, 0, 0, 0, 1024, 1025, 5, 109, 0, 0, 1025, 1026, 5, 101, 0, 0, 1026, 1027, 5, 109, 0, 0, 1027, 1028, 5, 111, 0, 0, 1028, 1029, 5, 114, 0, 0, 1029, 1030, 5, 121, 0, 0, 1030, 1031, 5, 46, 0, 0, 1031, 1032, 5, 115, 0, 0, 1032, 1033, 5, 105, 0, 0, 1033, 1034, 5, 122, 0, 0, 1034, 1035, 5, 101, 0, 0, 1035, 212, 1, 0, 0, 0, 1036, 1037, 5, 109, 0, 0, 1037, 1038, 5, 101, 0, 0, 1038, 1039, 5, 109, 0, 0, 1039, 1040, 5, 111, 0, 0, 1040, 1041, 5, 114, 0, 0, 1041, 1042, 5, 121, 0, 0, 1042, 1043, 5, 46, 0, 0, 1043, 1044, 5, 103, 0, 0, 1044, 1045, 5, 114, 0, 0, 1045, 1046, 5, 111, 0, 0, 1046, 1047, 5, 119, 0, 0, 1047, 214, 1, 0, 0, 0, 1048, 1049, 5, 109, 0, 0, 1049, 1050, 5, 101, 0, 0, 1050, 1051, 5, 109, 0, 0, 1051, 1052, 5, 111, 0, 0, 1052, 1053, 5, 114, 0, 0, 1053, 1054, 5, 121, 0, 0, 1054, 1055, 5, 46, 0, 0, 1055, 1056, 5, 102, 0, 0, 1056, 1057, 5, 105, 0, 0, 1057, 1058, 5, 108, 0, 0, 1058, 1059, 5, 108, 0, 0, 1059, 216, 1, 0, 0, 0, 1060, 1061, 5, 109, 0, 0, 1061, 1062, 5, 101, 0, 0, 1062, 1063, 5, 109, 0, 0, 1063, 1064, 5, 111, 0, 0, 1064, 1065, 5, 114, 0, 0, 1065, 1066, 5, 121, 0, 0, 1066, 1067, 5, 46, 0, 0, 1067, 1068, 5, 99, 0, 0, 1068, 1069, 5, 111, 0, 0, 1069, 1070, 5, 112, 0, 0, 1070, 1071, 5, 121, 0, 0, 1071, 218, 1, 0, 0, 0, 1072, 1073, 5, 109, 0, 0, 1073, 1074, 5, 101, 0, 0, 1074, 1075, 5, 109, 0, 0, 1075, 1076, 5, 111, 0, 0, 1076, 1077, 5, 114, 0, 0, 1077, 1078, 5, 121, 0, 0, 1078, 1079, 5, 46, 0, 0, 1079, 1080, 5, 105, 0, 0, 1080, 1081, 5, 110, 0, 0, 1081, 1082, 5, 105, 0, 0, 1082, 1083, 5, 116, 0, 0, 1083, 220, 1, 0, 0, 0, 1084, 1085, 3, 103, 51, 0, 1085, 1086, 3, 107, 53, 0, 1086, 222, 1, 0, 0, 0, 1087, 1088, 3, 103, 51, 0, 1088, 1089, 5, 46, 0, 0, 1089, 1090, 5, 101, 0, 0, 1090, 1091, 5, 113, 0, 0, 1091, 1184, 1, 0, 0, 0, 1092, 1093, 3, 103, 51, 0, 1093, 1094, 5, 46, 0, 0, 1094, 1095, 5, 110, 0, 0, 1095, 1096, 5, 101, 0, 0, 1096, 1184, 1, 0, 0, 0, 1097, 1098, 3, 103, 51, 0, 1098, 1099, 5, 46, 0, 0, 1099, 1100, 5, 108, 0, 0, 1100, 1101, 5, 116, 0, 0, 1101, 1102, 5, 95, 0, 0, 1102, 1103, 5, 115, 0, 0, 1103, 1184, 1, 0, 0, 0, 1104, 1105, 3, 103, 51, 0, 1105, 1106, 5, 46, 0, 0, 1106, 1107, 5, 108, 0, 0, 1107, 1108, 5, 116, 0, 0, 1108, 1109, 5, 95, 0, 0, 1109, 1110, 5, 117, 0, 0, 1110, 1184, 1, 0, 0, 0, 1111, 1112, 3, 103, 51, 0, 1112, 1113, 5, 46, 0, 0, 1113, 1114, 5, 108, 0, 0, 1114, 1115, 5, 101, 0, 0, 1115, 1116, 5, 95, 0, 0, 1116, 1117, 5, 115, 0, 0, 1117, 1184, 1, 0, 0, 0, 1118, 1119, 3, 103, 51, 0, 1119, 1120, 5, 46, 0, 0, 1120, 1121, 5, 108, 0, 0, 1121, 1122, 5, 101, 0, 0, 1122, 1123, 5, 95, 0, 0, 1123, 1124, 5, 117, 0, 0, 1124, 1184, 1, 0, 0, 0, 1125, 1126, 3, 103, 51, 0, 1126, 1127, 5, 46, 0, 0, 1127, 1128, 5, 103, 0, 0, 1128, 1129, 5, 116, 0, 0, 1129, 1130, 5, 95, 0, 0, 1130, 1131, 5, 115, 0, 0, 1131, 1184, 1, 0, 0, 0, 1132, 1133, 3, 103, 51, 0, 1133, 1134, 5, 46, 0, 0, 1134, 1135, 5, 103, 0, 0, 1135, 1136, 5, 116, 0, 0, 1136, 1137, 5, 95, 0, 0, 1137, 1138, 5, 117, 0, 0, 1138, 1184, 1, 0, 0, 0, 1139, 1140, 3, 103, 51, 0, 1140, 1141, 5, 46, 0, 0, 1141, 1142, 5, 103, 0, 0, 1142, 1143, 5, 101, 0, 0, 1143, 1144, 5, 95, 0, 0, 1144, 1145, 5, 115, 0, 0, 1145, 1184, 1, 0, 0, 0, 1146, 1147, 3, 103, 51, 0, 1147, 1148, 5, 46, 0, 0, 1148, 1149, 5, 103, 0, 0, 1149, 1150, 5, 101, 0, 0, 1150, 1151, 5, 95, 0, 0, 1151, 1152, 5, 117, 0, 0, 1152, 1184, 1, 0, 0, 0, 1153, 1154, 3, 105, 52, 0, 1154, 1155, 5, 46, 0, 0, 1155, 1156, 5, 101, 0, 0, 1156, 1157, 5, 113, 0, 0, 1157, 1184, 1, 0, 0, 0, 1158, 1159, 3, 105, 52, 0, 1159, 1160, 5, 46, 0, 0, 1160, 1161, 5, 110, 0, 0, 1161, 1162, 5, 101, 0, 0, 1162, 1184, 1, 0, 0, 0, 1163, 1164, 3, 105, 52, 0, 1164, 1165, 5, 46, 0, 0, 1165, 1166, 5, 108, 0, 0, 1166, 1167, 5, 116, 0, 0, 1167, 1184, 1, 0, 0, 0, 1168, 1169, 3, 105, 52, 0, 1169, 1170, 5, 46, 0, 0, 1170, 1171, 5, 108, 0, 0, 1171, 1172, 5, 101, 0, 0, 1172, 1184, 1, 0, 0, 0, 1173, 1174, 3, 105, 52, 0, 1174, 1175, 5, 46, 0, 0, 1175, 1176, 5, 103, 0, 0, 1176, 1177, 5, 116, 0, 0, 1177, 1184, 1, 0, 0, 0, 1178, 1179, 3, 105, 52, 0, 1179, 1180, 5, 46, 0, 0, 1180, 1181, 5, 103, 0, 0, 1181, 1182, 5, 101, 0, 0, 1182, 1184, 1, 0, 0, 0, 1183, 1087, 1, 0, 0, 0, 1183, 1092, 1, 0, 0, 0, 1183, 1097, 1, 0, 0, 0, 1183, 1104, 1, 0, 0, 0, 1183, 1111, 1, 0, 0, 0, 1183, 1118, 1, 0, 0, 0, 1183, 1125, 1, 0, 0, 0, 1183, 1132, 1, 0, 0, 0, 1183, 1139, 1, 0, 0, 0, 1183, 1146, 1, 0, 0, 0, 1183, 1153, 1, 0, 0, 0, 1183, 1158, 1, 0, 0, 0, 1183, 1163, 1, 0, 0, 0, 1183, 1168, 1, 0, 0, 0, 1183, 1173, 1, 0, 0, 0, 1183, 1178, 1, 0, 0, 0, 1184, 224, 1, 0, 0, 0, 1185, 1186, 3, 103, 51, 0, 1186, 1187, 5, 46, 0, 0, 1187, 1188, 5, 99, 0, 0, 1188, 1189, 5, 108, 0, 0, 1189, 1190, 5, 122, 0, 0, 1190, 1259, 1, 0, 0, 0, 1191, 1192, 3, 103, 51, 0, 1192, 1193, 5, 46, 0, 0, 1193, 1194, 5, 99, 0, 0, 1194, 1195, 5, 116, 0, 0, 1195, 1196, 5, 122, 0, 0, 1196, 1259, 1, 0, 0, 0, 1197, 1198, 3, 103, 51, 0, 1198, 1199, 5, 46, 0, 0, 1199, 1200, 5, 112, 0, 0, 1200, 1201, 5, 111, 0, 0, 1201, 1202, 5, 112, 0, 0, 1202, 1203, 5, 99, 0, 0, 1203, 1204, 5, 110, 0, 0, 1204, 1205, 5, 116, 0, 0, 1205, 1259, 1, 0, 0, 0, 1206, 1207, 3, 105, 52, 0, 1207, 1208, 5, 46, 0, 0, 1208, 1209, 5, 110, 0, 0, 1209, 1210, 5, 101, 0, 0, 1210, 1211, 5, 103, 0, 0, 1211, 1259, 1, 0, 0, 0, 1212, 1213, 3, 105, 52, 0, 1213, 1214, 5, 46, 0, 0, 1214, 1215, 5, 97, 0, 0, 1215, 1216, 5, 98, 0, 0, 1216, 1217, 5, 115, 0, 0, 1217, 1259, 1, 0, 0, 0, 1218, 1219, 3, 105, 52, 0, 1219, 1220, 5, 46, 0, 0, 1220, 1221, 5, 115, 0, 0, 1221, 1222, 5, 113, 0, 0, 1222, 1223, 5, 114, 0, 0, 1223, 1224, 5, 116, 0, 0, 1224, 1259, 1, 0, 0, 0, 1225, 1226, 3, 105, 52, 0, 1226, 1227, 5, 46, 0, 0, 1227, 1228, 5, 99, 0, 0, 1228, 1229, 5, 101, 0, 0, 1229, 1230, 5, 105, 0, 0, 1230, 1231, 5, 108, 0, 0, 1231, 1259, 1, 0, 0, 0, 1232, 1233, 3, 105, 52, 0, 1233, 1234, 5, 46, 0, 0, 1234, 1235, 5, 102, 0, 0, 1235, 1236, 5, 108, 0, 0, 1236, 1237, 5, 111, 0, 0, 1237, 1238, 5, 111, 0, 0, 1238, 1239, 5, 114, 0, 0, 1239, 1259, 1, 0, 0, 0, 1240, 1241, 3, 105, 52, 0, 1241, 1242, 5, 46, 0, 0, 1242, 1243, 5, 116, 0, 0, 1243, 1244, 5, 114, 0, 0, 1244, 1245, 5, 117, 0, 0, 1245, 1246, 5, 110, 0, 0, 1246, 1247, 5, 99, 0, 0, 1247, 1259, 1, 0, 0, 0, 1248, 1249, 3, 105, 52, 0, 1249, 1250, 5, 46, 0, 0, 1250, 1251, 5, 110, 0, 0, 1251, 1252, 5, 101, 0, 0, 1252, 1253, 5, 97, 0, 0, 1253, 1254, 5, 114, 0, 0, 1254, 1255, 5, 101, 0, 0, 1255, 1256, 5, 115, 0, 0, 1256, 1257, 5, 116, 0, 0, 1257, 1259, 1, 0, 0, 0, 1258, 1185, 1, 0, 0, 0, 1258, 1191, 1, 0, 0, 0, 1258, 1197, 1, 0, 0, 0, 1258, 1206, 1, 0, 0, 0, 1258, 1212, 1, 0, 0, 0, 1258, 1218, 1, 0, 0, 0, 1258, 1225, 1, 0, 0, 0, 1258, 1232, 1, 0, 0, 0, 1258, 1240, 1, 0, 0, 0, 1258, 1248, 1, 0, 0, 0, 1259, 226, 1, 0, 0, 0, 1260, 1261, 3, 103, 51, 0, 1261, 1262, 5, 46, 0, 0, 1262, 1263, 5, 97, 0, 0, 1263, 1264, 5, 100, 0, 0, 1264, 1265, 5, 100, 0, 0, 1265, 1411, 1, 0, 0, 0, 1266, 1267, 3, 103, 51, 0, 1267, 1268, 5, 46, 0, 0, 1268, 1269, 5, 115, 0, 0, 1269, 1270, 5, 117, 0, 0, 1270, 1271, 5, 98, 0, 0, 1271, 1411, 1, 0, 0, 0, 1272, 1273, 3, 103, 51, 0, 1273, 1274, 5, 46, 0, 0, 1274, 1275, 5, 109, 0, 0, 1275, 1276, 5, 117, 0, 0, 1276, 1277, 5, 108, 0, 0, 1277, 1411, 1, 0, 0, 0, 1278, 1279, 3, 103, 51, 0, 1279, 1280, 5, 46, 0, 0, 1280, 1281, 5, 100, 0, 0, 1281, 1282, 5, 105, 0, 0, 1282, 1283, 5, 118, 0, 0, 1283, 1284, 5, 95, 0, 0, 1284, 1285, 5, 115, 0, 0, 1285, 1411, 1, 0, 0, 0, 1286, 1287, 3, 103, 51, 0, 1287, 1288, 5, 46, 0, 0, 1288, 1289, 5, 100, 0, 0, 1289, 1290, 5, 105, 0, 0, 1290, 1291, 5, 118, 0, 0, 1291, 1292, 5, 95, 0, 0, 1292, 1293, 5, 117, 0, 0, 1293, 1411, 1, 0, 0, 0, 1294, 1295, 3, 103, 51, 0, 1295, 1296, 5, 46, 0, 0, 1296, 1297, 5, 114, 0, 0, 1297, 1298, 5, 101, 0, 0, 1298, 1299, 5, 109, 0, 0, 1299, 1300, 5, 95, 0, 0, 1300, 1301, 5, 115, 0, 0, 1301, 1411, 1, 0, 0, 0, 1302, 1303, 3, 103, 51, 0, 1303, 1304, 5, 46, 0, 0, 1304, 1305, 5, 114, 0, 0, 1305, 1306, 5, 101, 0, 0, 1306, 1307, 5, 109, 0, 0, 1307, 1308, 5, 95, 0, 0, 1308, 1309, 5, 117, 0, 0, 1309, 1411, 1, 0, 0, 0, 1310, 1311, 3, 103, 51, 0, 1311, 1312, 5, 46, 0, 0, 1312, 1313, 5, 97, 0, 0, 1313, 1314, 5, 110, 0, 0, 1314, 1315, 5, 100, 0, 0, 1315, 1411, 1, 0, 0, 0, 1316, 1317, 3, 103, 51, 0, 1317, 1318, 5, 46, 0, 0, 1318, 1319, 5, 111, 0, 0, 1319, 1320, 5, 114, 0, 0, 1320, 1411, 1, 0, 0, 0, 1321, 1322, 3, 103, 51, 0, 1322, 1323, 5, 46, 0, 0, 1323, 1324, 5, 120, 0, 0, 1324, 1325, 5, 111, 0, 0, 1325, 1326, 5, 114, 0, 0, 1326, 1411, 1, 0, 0, 0, 1327, 1328, 3, 103, 51, 0, 1328, 1329, 5, 46, 0, 0, 1329, 1330, 5, 115, 0, 0, 1330, 1331, 5, 104, 0, 0, 1331, 1332, 5, 108, 0, 0, 1332, 1411, 1, 0, 0, 0, 1333, 1334, 3, 103, 51, 0, 1334, 1335, 5, 46, 0, 0, 1335, 1336, 5, 115, 0, 0, 1336, 1337, 5, 104, 0, 0, 1337, 1338, 5, 114, 0, 0, 1338, 1339, 5, 95, 0, 0, 1339, 1340, 5, 115, 0, 0, 1340, 1411, 1, 0, 0, 0, 1341, 1342, 3, 103, 51, 0, 1342, 1343, 5, 46, 0, 0, 1343, 1344, 5, 115, 0, 0, 1344, 1345, 5, 104, 0, 0, 1345, 1346, 5, 114, 0, 0, 1346, 1347, 5, 95, 0, 0, 1347, 1348, 5, 117, 0, 0, 1348, 1411, 1, 0, 0, 0, 1349, 1350, 3, 103, 51, 0, 1350, 1351, 5, 46, 0, 0, 1351, 1352, 5, 114, 0, 0, 1352, 1353, 5, 111, 0, 0, 1353, 1354, 5, 116, 0, 0, 1354, 1355, 5, 108, 0, 0, 1355, 1411, 1, 0, 0, 0, 1356, 1357, 3, 103, 51, 0, 1357, 1358, 5, 46, 0, 0, 1358, 1359, 5, 114, 0, 0, 1359, 1360, 5, 111, 0, 0, 1360, 1361, 5, 116, 0, 0, 1361, 1362, 5, 114, 0, 0, 1362, 1411, 1, 0, 0, 0, 1363, 1364, 3, 105, 52, 0, 1364, 1365, 5, 46, 0, 0, 1365, 1366, 5, 97, 0, 0, 1366, 1367, 5, 100, 0, 0, 1367, 1368, 5, 100, 0, 0, 1368, 1411, 1, 0, 0, 0, 1369, 1370, 3, 105, 52, 0, 1370, 1371, 5, 46, 0, 0, 1371, 1372, 5, 115, 0, 0, 1372, 1373, 5, 117, 0, 0, 1373, 1374, 5, 98, 0, 0, 1374, 1411, 1, 0, 0, 0, 1375, 1376, 3, 105, 52, 0, 1376, 1377, 5, 46, 0, 0, 1377, 1378, 5, 109, 0, 0, 1378, 1379, 5, 117, 0, 0, 1379, 1380, 5, 108, 0, 0, 1380, 1411, 1, 0, 0, 0, 1381, 1382, 3, 105, 52, 0, 1382, 1383, 5, 46, 0, 0, 1383, 1384, 5, 100, 0, 0, 1384, 1385, 5, 105, 0, 0, 1385, 1386, 5, 118, 0, 0, 1386, 1411, 1, 0, 0, 0, 1387, 1388, 3, 105, 52, 0, 1388, 1389, 5, 46, 0, 0, 1389, 1390, 5, 109, 0, 0, 1390, 1391, 5, 105, 0, 0, 1391, 1392, 5, 110, 0, 0, 1392, 1411, 1, 0, 0, 0, 1393, 1394, 3, 105, 52, 0, 1394, 1395, 5, 46, 0, 0, 1395, 1396, 5, 109, 0, 0, 1396, 1397, 5, 97, 0, 0, 1397, 1398, 5, 120, 0, 0, 1398, 1411, 1, 0, 0, 0, 1399, 1400, 3, 105, 52, 0, 1400, 1401, 5, 46, 0, 0, 1401, 1402, 5, 99, 0, 0, 1402, 1403, 5, 111, 0, 0, 1403, 1404, 5, 112, 0, 0, 1404, 1405, 5, 121, 0, 0, 1405, 1406, 5, 115, 0, 0, 1406, 1407, 5, 105, 0, 0, 1407, 1408, 5, 103, 0, 0, 1408, 1409, 5, 110, 0, 0, 1409, 1411, 1, 0, 0, 0, 1410, 1260, 1, 0, 0, 0, 1410, 1266, 1, 0, 0, 0, 1410, 1272, 1, 0, 0, 0, 1410, 1278, 1, 0, 0, 0, 1410, 1286, 1, 0, 0, 0, 1410, 1294, 1, 0, 0, 0, 1410, 1302, 1, 0, 0, 0, 1410, 1310, 1, 0, 0, 0, 1410, 1316, 1, 0, 0, 0, 1410, 1321, 1, 0, 0, 0, 1410, 1327, 1, 0, 0, 0, 1410, 1333, 1, 0, 0, 0, 1410, 1341, 1, 0, 0, 0, 1410, 1349, 1, 0, 0, 0, 1410, 1356, 1, 0, 0, 0, 1410, 1363, 1, 0, 0, 0, 1410, 1369, 1, 0, 0, 0, 1410, 1375, 1, 0, 0, 0, 1410, 1381, 1, 0, 0, 0, 1410, 1387, 1, 0, 0, 0, 1410, 1393, 1, 0, 0, 0, 1410, 1399, 1, 0, 0, 0, 1411, 228, 1, 0, 0, 0, 1412, 1413, 3, 95, 47, 0, 1413, 1414, 5, 46, 0, 0, 1414, 1415, 5, 119, 0, 0, 1415, 1416, 5, 114, 0, 0, 1416, 1417, 5, 97, 0, 0, 1417, 1418, 5, 112, 0, 0, 1418, 1419, 5, 95, 0, 0, 1419, 1420, 1, 0, 0, 0, 1420, 1421, 3, 97, 48, 0, 1421, 1575, 1, 0, 0, 0, 1422, 1423, 3, 103, 51, 0, 1423, 1424, 5, 46, 0, 0, 1424, 1425, 5, 116, 0, 0, 1425, 1426, 5, 114, 0, 0, 1426, 1427, 5, 117, 0, 0, 1427, 1428, 5, 110, 0, 0, 1428, 1429, 5, 99, 0, 0, 1429, 1430, 5, 95, 0, 0, 1430, 1431, 1, 0, 0, 0, 1431, 1432, 3, 105, 52, 0, 1432, 1433, 3, 85, 42, 0, 1433, 1434, 3, 91, 45, 0, 1434, 1575, 1, 0, 0, 0, 1435, 1436, 3, 103, 51, 0, 1436, 1437, 5, 46, 0, 0, 1437, 1438, 5, 116, 0, 0, 1438, 1439, 5, 114, 0, 0, 1439, 1440, 5, 117, 0, 0, 1440, 1441, 5, 110, 0, 0, 1441, 1442, 5, 99, 0, 0, 1442, 1443, 5, 95, 0, 0, 1443, 1444, 5, 115, 0, 0, 1444, 1445, 5, 97, 0, 0, 1445, 1446, 5, 116, 0, 0, 1446, 1447, 5, 95, 0, 0, 1447, 1448, 1, 0, 0, 0, 1448, 1449, 3, 105, 52, 0, 1449, 1450, 3, 85, 42, 0, 1450, 1451, 3, 91, 45, 0, 1451, 1575, 1, 0, 0, 0, 1452, 1453, 3, 97, 48, 0, 1453, 1454, 5, 46, 0, 0, 1454, 1455, 5, 101, 0, 0, 1455, 1456, 5, 120, 0, 0, 1456, 1457, 5, 116, 0, 0, 1457, 1458, 5, 101, 0, 0, 1458, 1459, 5, 110, 0, 0, 1459, 1460, 5, 100, 0, 0, 1460, 1461, 5, 95, 0, 0, 1461, 1462, 1, 0, 0, 0, 1462, 1463, 3, 95, 47, 0, 1463, 1464, 3, 85, 42, 0, 1464, 1465, 3, 91, 45, 0, 1465, 1575, 1, 0, 0, 0, 1466, 1467, 3, 105, 52, 0, 1467, 1468, 5, 46, 0, 0, 1468, 1469, 5, 99, 0, 0, 1469, 1470, 5, 111, 0, 0, 1470, 1471, 5, 110, 0, 0, 1471, 1472, 5, 118, 0, 0, 1472, 1473, 5, 101, 0, 0, 1473, 1474, 5, 114, 0, 0, 1474, 1475, 5, 116, 0, 0, 1475, 1476, 5, 95, 0, 0, 1476, 1477, 1, 0, 0, 0, 1477, 1478, 3, 103, 51, 0, 1478, 1479, 3, 85, 42, 0, 1479, 1480, 3, 91, 45, 0, 1480, 1575, 1, 0, 0, 0, 1481, 1482, 3, 99, 49, 0, 1482, 1483, 5, 46, 0, 0, 1483, 1484, 5, 100, 0, 0, 1484, 1485, 5, 101, 0, 0, 1485, 1486, 5, 109, 0, 0, 1486, 1487, 5, 111, 0, 0, 1487, 1488, 5, 116, 0, 0, 1488, 1489, 5, 101, 0, 0, 1489, 1490, 5, 95, 0, 0, 1490, 1491, 1, 0, 0, 0, 1491, 1492, 3, 101, 50, 0, 1492, 1575, 1, 0, 0, 0, 1493, 1494, 3, 101, 50, 0, 1494, 1495, 5, 46, 0, 0, 1495, 1496, 5, 112, 0, 0, 1496, 1497, 5, 114, 0, 0, 1497, 1498, 5, 111, 0, 0, 1498, 1499, 5, 109, 0, 0, 1499, 1500, 5, 111, 0, 0, 1500, 1501, 5, 116, 0, 0, 1501, 1502, 5, 101, 0, 0, 1502, 1503, 5, 95, 0, 0, 1503, 1504, 1, 0, 0, 0, 1504, 1505, 3, 99, 49, 0, 1505, 1575, 1, 0, 0, 0, 1506, 1507, 3, 99, 49, 0, 1507, 1508, 5, 46, 0, 0, 1508, 1509, 5, 114, 0, 0, 1509, 1510, 5, 101, 0, 0, 1510, 1511, 5, 105, 0, 0, 1511, 1512, 5, 110, 0, 0, 1512, 1513, 5, 116, 0, 0, 1513, 1514, 5, 101, 0, 0, 1514, 1515, 5, 114, 0, 0, 1515, 1516, 5, 112, 0, 0, 1516, 1517, 5, 114, 0, 0, 1517, 1518, 5, 101, 0, 0, 1518, 1519, 5, 116, 0, 0, 1519, 1520, 5, 95, 0, 0, 1520, 1521, 1, 0, 0, 0, 1521, 1522, 3, 95, 47, 0, 1522, 1575, 1, 0, 0, 0, 1523, 1524, 3, 101, 50, 0, 1524, 1525, 5, 46, 0, 0, 1525, 1526, 5, 114, 0, 0, 1526, 1527, 5, 101, 0, 0, 1527, 1528, 5, 105, 0, 0, 1528, 1529, 5, 110, 0, 0, 1529, 1530, 5, 116, 0, 0, 1530, 1531, 5, 101, 0, 0, 1531, 1532, 5, 114, 0, 0, 1532, 1533, 5, 112, 0, 0, 1533, 1534, 5, 114, 0, 0, 1534, 1535, 5, 101, 0, 0, 1535, 1536, 5, 116, 0, 0, 1536, 1537, 5, 95, 0, 0, 1537, 1538, 1, 0, 0, 0, 1538, 1539, 3, 97, 48, 0, 1539, 1575, 1, 0, 0, 0, 1540, 1541, 3, 95, 47, 0, 1541, 1542, 5, 46, 0, 0, 1542, 1543, 5, 114, 0, 0, 1543, 1544, 5, 101, 0, 0, 1544, 1545, 5, 105, 0, 0, 1545, 1546, 5, 110, 0, 0, 1546, 1547, 5, 116, 0, 0, 1547, 1548, 5, 101, 0, 0, 1548, 1549, 5, 114, 0, 0, 1549, 1550, 5, 112, 0, 0, 1550, 1551, 5, 114, 0, 0, 1551, 1552, 5, 101, 0, 0, 1552, 1553, 5, 116, 0, 0, 1553, 1554, 5, 95, 0, 0, 1554, 1555, 1, 0, 0, 0, 1555, 1556, 3, 99, 49, 0, 1556, 1575, 1, 0, 0, 0, 1557, 1558, 3, 97, 48, 0, 1558, 1559, 5, 46, 0, 0, 1559, 1560, 5, 114, 0, 0, 1560, 1561, 5, 101, 0, 0, 1561, 1562, 5, 105, 0, 0, 1562, 1563, 5, 110, 0, 0, 1563, 1564, 5, 116, 0, 0, 1564, 1565, 5, 101, 0, 0, 1565, 1566, 5, 114, 0, 0, 1566, 1567, 5, 112, 0, 0, 1567, 1568, 5, 114, 0, 0, 1568, 1569, 5, 101, 0, 0, 1569, 1570, 5, 116, 0, 0, 1570, 1571, 5, 95, 0, 0, 1571, 1572, 1, 0, 0, 0, 1572, 1573, 3, 101, 50, 0, 1573, 1575, 1, 0, 0, 0, 1574, 1412, 1, 0, 0, 0, 1574, 1422, 1, 0, 0, 0, 1574, 1435, 1, 0, 0, 0, 1574, 1452, 1, 0, 0, 0, 1574, 1466, 1, 0, 0, 0, 1574, 1481, 1, 0, 0, 0, 1574, 1493, 1, 0, 0, 0, 1574, 1506, 1, 0, 0, 0, 1574, 1523, 1, 0, 0, 0, 1574, 1540, 1, 0, 0, 0, 1574, 1557, 1, 0, 0, 0, 1575, 230, 1, 0, 0, 0, 1576, 1577, 5, 116, 0, 0, 1577, 1578, 5, 121, 0, 0, 1578, 1579, 5, 112, 0, 0, 1579, 1580, 5, 101, 0, 0, 1580, 232, 1, 0, 0, 0, 1581, 1582, 5, 102, 0, 0, 1582, 1583, 5, 117, 0, 0, 1583, 1584, 5, 110, 0, 0, 1584, 1585, 5, 99, 0, 0, 1585, 234, 1, 0, 0, 0, 1586, 1587, 5, 101, 0, 0, 1587, 1588, 5, 120, 0, 0, 1588, 1589, 5, 116, 0, 0, 1589, 1590, 5, 101, 0, 0, 1590, 1591, 5, 114, 0, 0, 1591, 1592, 5, 110, 0, 0, 1592, 236, 1, 0, 0, 0, 1593, 1594, 5, 115, 0, 0, 1594, 1595, 5, 116, 0, 0, 1595, 1596, 5, 97, 0, 0, 1596, 1597, 5, 114, 0, 0, 1597, 1598, 5, 116, 0, 0, 1598, 238, 1, 0, 0, 0, 1599, 1600, 5, 112, 0, 0, 1600, 1601, 5, 97, 0, 0, 1601, 1602, 5, 114, 0, 0, 1602, 1603, 5, 97, 0, 0, 1603, 1604, 5, 109, 0, 0, 1604, 240, 1, 0, 0, 0, 1605, 1606, 5, 114, 0, 0, 1606, 1607, 5, 101, 0, 0, 1607, 1608, 5, 115, 0, 0, 1608, 1609, 5, 117, 0, 0, 1609, 1610, 5, 108, 0, 0, 1610, 1611, 5, 116, 0, 0, 1611, 242, 1, 0, 0, 0, 1612, 1613, 5, 108, 0, 0, 1613, 1614, 5, 111, 0, 0, 1614, 1615, 5, 99, 0, 0, 1615, 1616, 5, 97, 0, 0, 1616, 1617, 5, 108, 0, 0, 1617, 244, 1, 0, 0, 0, 1618, 1619, 5, 103, 0, 0, 1619, 1620, 5, 108, 0, 0, 1620, 1621, 5, 111, 0, 0, 1621, 1622, 5, 98, 0, 0, 1622, 1623, 5, 97, 0, 0, 1623, 1624, 5, 108, 0, 0, 1624, 246, 1, 0, 0, 0, 1625, 1626, 5, 116, 0, 0, 1626, 1627, 5, 97, 0, 0, 1627, 1628, 5, 98, 0, 0, 1628, 1629, 5, 108, 0, 0, 1629, 1630, 5, 101, 0, 0, 1630, 248, 1, 0, 0, 0, 1631, 1632, 5, 109, 0, 0, 1632, 1633, 5, 101, 0, 0, 1633, 1634, 5, 109, 0, 0, 1634, 1635, 5, 111, 0, 0, 1635, 1636, 5, 114, 0, 0, 1636, 1637, 5, 121, 0, 0, 1637, 250, 1, 0, 0, 0, 1638, 1639, 5, 101, 0, 0, 1639, 1640, 5, 108, 0, 0, 1640, 1641, 5, 101, 0, 0, 1641, 1642, 5, 109, 0, 0, 1642, 252, 1, 0, 0, 0, 1643, 1644, 5, 100, 0, 0, 1644, 1645, 5, 97, 0, 0, 1645, 1646, 5, 116, 0, 0, 1646, 1647, 5, 97, 0, 0, 1647, 254, 1, 0, 0, 0, 1648, 1649, 5, 111, 0, 0, 1649, 1650, 5, 102, 0, 0, 1650, 1651, 5, 102, 0, 0, 1651, 1652, 5, 115, 0, 0, 1652, 1653, 5, 101, 0, 0, 1653, 1654, 5, 116, 0, 0, 1654, 256, 1, 0, 0, 0, 1655, 1656, 5, 105, 0, 0, 1656, 1657, 5, 109, 0, 0, 1657, 1658, 5, 112, 0, 0, 1658, 1659, 5, 111, 0, 0, 1659, 1660, 5, 114, 0, 0, 1660, 1661, 5, 116, 0, 0, 1661, 258, 1, 0, 0, 0, 1662, 1663, 5, 101, 0, 0, 1663, 1664, 5, 120, 0, 0, 1664, 1665, 5, 112, 0, 0, 1665, 1666, 5, 111, 0, 0, 1666, 1667, 5, 114, 0, 0, 1667, 1668, 5, 116, 0, 0, 1668, 260, 1, 0, 0, 0, 1669, 1670, 5, 109, 0, 0, 1670, 1671, 5, 111, 0, 0, 1671, 1672, 5, 100, 0, 0, 1672, 1673, 5, 117, 0, 0, 1673, 1674, 5, 108, 0, 0, 1674, 1675, 5, 101, 0, 0, 1675, 262, 1, 0, 0, 0, 1676, 1677, 5, 98, 0, 0, 1677, 1678, 5, 105, 0, 0, 1678, 1679, 5, 110, 0, 0, 1679, 1680, 5, 97, 0, 0, 1680, 1681, 5, 114, 0, 0, 1681, 1682, 5, 121, 0, 0, 1682, 264, 1, 0, 0, 0, 1683, 1684, 5, 113, 0, 0, 1684, 1685, 5, 117, 0, 0, 1685, 1686, 5, 111, 0, 0, 1686, 1687, 5, 116, 0, 0, 1687, 1688, 5, 101, 0, 0, 1688, 266, 1, 0, 0, 0, 1689, 1690, 5, 115, 0, 0, 1690, 1691, 5, 99, 0, 0, 1691, 1692, 5, 114, 0, 0, 1692, 1693, 5, 105, 0, 0, 1693, 1694, 5, 112, 0, 0, 1694, 1695, 5, 116, 0, 0, 1695, 268, 1, 0, 0, 0, 1696, 1697, 5, 114, 0, 0, 1697, 1698, 5, 101, 0, 0, 1698, 1699, 5, 103, 0, 0, 1699, 1700, 5, 105, 0, 0, 1700, 1701, 5, 115, 0, 0, 1701, 1702, 5, 116, 0, 0, 1702, 1703, 5, 101, 0, 0, 1703, 1704, 5, 114, 0, 0, 1704, 270, 1, 0, 0, 0, 1705, 1706, 5, 105, 0, 0, 1706, 1707, 5, 110, 0, 0, 1707, 1708, 5, 118, 0, 0, 1708, 1709, 5, 111, 0, 0, 1709, 1710, 5, 107, 0, 0, 1710, 1711, 5, 101, 0, 0, 1711, 272, 1, 0, 0, 0, 1712, 1713, 5, 103, 0, 0, 1713, 1714, 5, 101, 0, 0, 1714, 1715, 5, 116, 0, 0, 1715, 274, 1, 0, 0, 0, 1716, 1717, 5, 97, 0, 0, 1717, 1718, 5, 115, 0, 0, 1718, 1719, 5, 115, 0, 0, 1719, 1720, 5, 101, 0, 0, 1720, 1721, 5, 114, 0, 0, 1721, 1722, 5, 116, 0, 0, 1722, 1723, 5, 95, 0, 0, 1723, 1724, 5, 109, 0, 0, 1724, 1725, 5, 97, 0, 0, 1725, 1726, 5, 108, 0, 0, 1726, 1727, 5, 102, 0, 0, 1727, 1728, 5, 111, 0, 0, 1728, 1729, 5, 114, 0, 0, 1729, 1730, 5, 109, 0, 0, 1730, 1731, 5, 101, 0, 0, 1731, 1732, 5, 100, 0, 0, 1732, 276, 1, 0, 0, 0, 1733, 1734, 5, 97, 0, 0, 1734, 1735, 5, 115, 0, 0, 1735, 1736, 5, 115, 0, 0, 1736, 1737, 5, 101, 0, 0, 1737, 1738, 5, 114, 0, 0, 1738, 1739, 5, 116, 0, 0, 1739, 1740, 5, 95, 0, 0, 1740, 1741, 5, 105, 0, 0, 1741, 1742, 5, 110, 0, 0, 1742, 1743, 5, 118, 0, 0, 1743, 1744, 5, 97, 0, 0, 1744, 1745, 5, 108, 0, 0, 1745, 1746, 5, 105, 0, 0, 1746, 1747, 5, 100, 0, 0, 1747, 278, 1, 0, 0, 0, 1748, 1749, 5, 97, 0, 0, 1749, 1750, 5, 115, 0, 0, 1750, 1751, 5, 115, 0, 0, 1751, 1752, 5, 101, 0, 0, 1752, 1753, 5, 114, 0, 0, 1753, 1754, 5, 116, 0, 0, 1754, 1755, 5, 95, 0, 0, 1755, 1756, 5, 117, 0, 0, 1756, 1757, 5, 110, 0, 0, 1757, 1758, 5, 108, 0, 0, 1758, 1759, 5, 105, 0, 0, 1759, 1760, 5, 110, 0, 0, 1760, 1761, 5, 107, 0, 0, 1761, 1762, 5, 97, 0, 0, 1762, 1763, 5, 98, 0, 0, 1763, 1764, 5, 108, 0, 0, 1764, 1765, 5, 101, 0, 0, 1765, 280, 1, 0, 0, 0, 1766, 1767, 5, 97, 0, 0, 1767, 1768, 5, 115, 0, 0, 1768, 1769, 5, 115, 0, 0, 1769, 1770, 5, 101, 0, 0, 1770, 1771, 5, 114, 0, 0, 1771, 1772, 5, 116, 0, 0, 1772, 1773, 5, 95, 0, 0, 1773, 1774, 5, 114, 0, 0, 1774, 1775, 5, 101, 0, 0, 1775, 1776, 5, 116, 0, 0, 1776, 1777, 5, 117, 0, 0, 1777, 1778, 5, 114, 0, 0, 1778, 1779, 5, 110, 0, 0, 1779, 282, 1, 0, 0, 0, 1780, 1781, 5, 97, 0, 0, 1781, 1782, 5, 115, 0, 0, 1782, 1783, 5, 115, 0, 0, 1783, 1784, 5, 101, 0, 0, 1784, 1785, 5, 114, 0, 0, 1785, 1786, 5, 116, 0, 0, 1786, 1787, 5, 95, 0, 0, 1787, 1788, 5, 114, 0, 0, 1788, 1789, 5, 101, 0, 0, 1789, 1790, 5, 116, 0, 0, 1790, 1791, 5, 117, 0, 0, 1791, 1792, 5, 114, 0, 0, 1792, 1793, 5, 110, 0, 0, 1793, 1794, 5, 95, 0, 0, 1794, 1795, 5, 99, 0, 0, 1795, 1796, 5, 97, 0, 0, 1796, 1797, 5, 110, 0, 0, 1797, 1798, 5, 111, 0, 0, 1798, 1799, 5, 110, 0, 0, 1799, 1800, 5, 105, 0, 0, 1800, 1801, 5, 99, 0, 0, 1801, 1802, 5, 97, 0, 0, 1802, 1803, 5, 108, 0, 0, 1803, 1804, 5, 95, 0, 0, 1804, 1805, 5, 110, 0, 0, 1805, 1806, 5, 97, 0, 0, 1806, 1807, 5, 110, 0, 0, 1807, 284, 1, 0, 0, 0, 1808, 1809, 5, 97, 0, 0, 1809, 1810, 5, 115, 0, 0, 1810, 1811, 5, 115, 0, 0, 1811, 1812, 5, 101, 0, 0, 1812, 1813, 5, 114, 0, 0, 1813, 1814, 5, 116, 0, 0, 1814, 1815, 5, 95, 0, 0, 1815, 1816, 5, 114, 0, 0, 1816, 1817, 5, 101, 0, 0, 1817, 1818, 5, 116, 0, 0, 1818, 1819, 5, 117, 0, 0, 1819, 1820, 5, 114, 0, 0, 1820, 1821, 5, 110, 0, 0, 1821, 1822, 5, 95, 0, 0, 1822, 1823, 5, 97, 0, 0, 1823, 1824, 5, 114, 0, 0, 1824, 1825, 5, 105, 0, 0, 1825, 1826, 5, 116, 0, 0, 1826, 1827, 5, 104, 0, 0, 1827, 1828, 5, 109, 0, 0, 1828, 1829, 5, 101, 0, 0, 1829, 1830, 5, 116, 0, 0, 1830, 1831, 5, 105, 0, 0, 1831, 1832, 5, 99, 0, 0, 1832, 1833, 5, 95, 0, 0, 1833, 1834, 5, 110, 0, 0, 1834, 1835, 5, 97, 0, 0, 1835, 1836, 5, 110, 0, 0, 1836, 286, 1, 0, 0, 0, 1837, 1838, 5, 97, 0, 0, 1838, 1839, 5, 115, 0, 0, 1839, 1840, 5, 115, 0, 0, 1840, 1841, 5, 101, 0, 0, 1841, 1842, 5, 114, 0, 0, 1842, 1843, 5, 116, 0, 0, 1843, 1844, 5, 95, 0, 0, 1844, 1845, 5, 116, 0, 0, 1845, 1846, 5, 114, 0, 0, 1846, 1847, 5, 97, 0, 0, 1847, 1848, 5, 112, 0, 0, 1848, 288, 1, 0, 0, 0, 1849, 1850, 5, 97, 0, 0, 1850, 1851, 5, 115, 0, 0, 1851, 1852, 5, 115, 0, 0, 1852, 1853, 5, 101, 0, 0, 1853, 1854, 5, 114, 0, 0, 1854, 1855, 5, 116, 0, 0, 1855, 1856, 5, 95, 0, 0, 1856, 1857, 5, 101, 0, 0, 1857, 1858, 5, 120, 0, 0, 1858, 1859, 5, 104, 0, 0, 1859, 1860, 5, 97, 0, 0, 1860, 1861, 5, 117, 0, 0, 1861, 1862, 5, 115, 0, 0, 1862, 1863, 5, 116, 0, 0, 1863, 1864, 5, 105, 0, 0, 1864, 1865, 5, 111, 0, 0, 1865, 1866, 5, 110, 0, 0, 1866, 290, 1, 0, 0, 0, 1867, 1868, 5, 105, 0, 0, 1868, 1869, 5, 110, 0, 0, 1869, 1870, 5, 112, 0, 0, 1870, 1871, 5, 117, 0, 0, 1871, 1872, 5, 116, 0, 0, 1872, 292, 1, 0, 0, 0, 1873, 1874, 5, 111, 0, 0, 1874, 1875, 5, 117, 0, 0, 1875, 1876, 5, 116, 0, 0, 1876, 1877, 5, 112, 0, 0, 1877, 1878, 5, 117, 0, 0, 1878, 1879, 5, 116, 0, 0, 1879, 294, 1, 0, 0, 0, 1880, 1881, 3, 329, 164, 0, 1881, 296, 1, 0, 0, 0, 1882, 1883, 5, 118, 0, 0, 1883, 1884, 5, 49, 0, 0, 1884, 1885, 5, 50, 0, 0, 1885, 1886, 5, 56, 0, 0, 1886, 298, 1, 0, 0, 0, 1887, 1889, 7, 1, 0, 0, 1888, 1887, 1, 0, 0, 0, 1889, 1890, 1, 0, 0, 0, 1890, 1888, 1, 0, 0, 0, 1890, 1891, 1, 0, 0, 0, 1891, 1892, 1, 0, 0, 0, 1892, 1893, 6, 149, 0, 0, 1893, 300, 1, 0, 0, 0, 1894, 1895, 5, 40, 0, 0, 1895, 1896, 5, 59, 0, 0, 1896, 1900, 1, 0, 0, 0, 1897, 1899, 9, 0, 0, 0, 1898, 1897, 1, 0, 0, 0, 1899, 1902, 1, 0, 0, 0, 1900, 1901, 1, 0, 0, 0, 1900, 1898, 1, 0, 0, 0, 1901, 1903, 1, 0, 0, 0, 1902, 1900, 1, 0, 0, 0, 1903, 1904, 5, 59, 0, 0, 1904, 1916, 5, 41, 0, 0, 1905, 1906, 5, 59, 0, 0, 1906, 1907, 5, 59, 0, 0, 1907, 1911, 1, 0, 0, 0, 1908, 1910, 9, 0, 0, 0, 1909, 1908, 1, 0, 0, 0, 1910, 1913, 1, 0, 0, 0, 1911, 1912, 1, 0, 0, 0, 1911, 1909, 1, 0, 0, 0, 1912, 1914, 1, 0, 0, 0, 1913, 1911, 1, 0, 0, 0, 1914, 1916, 5, 10, 0, 0, 1915, 1894, 1, 0, 0, 0, 1915, 1905, 1, 0, 0, 0, 1916, 1917, 1, 0, 0, 0, 1917, 1918, 6, 150, 0, 0, 1918, 302, 1, 0, 0, 0, 1919, 1920, 7, 2, 0, 0, 1920, 304, 1, 0, 0, 0, 1921, 1928, 3, 311, 155, 0, 1922, 1924, 5, 95, 0, 0, 1923, 1922, 1, 0, 0, 0, 1923, 1924, 1, 0, 0, 0, 1924, 1925, 1, 0, 0, 0, 1925, 1927, 3, 311, 155, 0, 1926, 1923, 1, 0, 0, 0, 1927, 1930, 1, 0, 0, 0, 1928, 1926, 1, 0, 0, 0, 1928, 1929, 1, 0, 0, 0, 1929, 306, 1, 0, 0, 0, 1930, 1928, 1, 0, 0, 0, 1931, 1938, 3, 313, 156, 0, 1932, 1934, 5, 95, 0, 0, 1933, 1932, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 1935, 1, 0, 0, 0, 1935, 1937, 3, 313, 156, 0, 1936, 1933, 1, 0, 0, 0, 1937, 1940, 1, 0, 0, 0, 1938, 1936, 1, 0, 0, 0, 1938, 1939, 1, 0, 0, 0, 1939, 308, 1, 0, 0, 0, 1940, 1938, 1, 0, 0, 0, 1941, 1942, 7, 3, 0, 0, 1942, 310, 1, 0, 0, 0, 1943, 1944, 7, 4, 0, 0, 1944, 312, 1, 0, 0, 0, 1945, 1946, 7, 5, 0, 0, 1946, 314, 1, 0, 0, 0, 1947, 1948, 7, 6, 0, 0, 1948, 316, 1, 0, 0, 0, 1949, 1955, 3, 305, 152, 0, 1950, 1951, 5, 48, 0, 0, 1951, 1952, 5, 120, 0, 0, 1952, 1953, 1, 0, 0, 0, 1953, 1955, 3, 307, 153, 0, 1954, 1949, 1, 0, 0, 0, 1954, 1950, 1, 0, 0, 0, 1955, 318, 1, 0, 0, 0, 1956, 1957, 3, 309, 154, 0, 1957, 1958, 3, 317, 158, 0, 1958, 320, 1, 0, 0, 0, 1959, 1960, 3, 305, 152, 0, 1960, 322, 1, 0, 0, 0, 1961, 1962, 3, 307, 153, 0, 1962, 324, 1, 0, 0, 0, 1963, 1965, 3, 309, 154, 0, 1964, 1963, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 1966, 1, 0, 0, 0, 1966, 1967, 3, 305, 152, 0, 1967, 1969, 5, 46, 0, 0, 1968, 1970, 3, 321, 160, 0, 1969, 1968, 1, 0, 0, 0, 1969, 1970, 1, 0, 0, 0, 1970, 2042, 1, 0, 0, 0, 1971, 1973, 3, 309, 154, 0, 1972, 1971, 1, 0, 0, 0, 1972, 1973, 1, 0, 0, 0, 1973, 1974, 1, 0, 0, 0, 1974, 1979, 3, 305, 152, 0, 1975, 1977, 5, 46, 0, 0, 1976, 1978, 3, 321, 160, 0, 1977, 1976, 1, 0, 0, 0, 1977, 1978, 1, 0, 0, 0, 1978, 1980, 1, 0, 0, 0, 1979, 1975, 1, 0, 0, 0, 1979, 1980, 1, 0, 0, 0, 1980, 1981, 1, 0, 0, 0, 1981, 1983, 7, 7, 0, 0, 1982, 1984, 3, 309, 154, 0, 1983, 1982, 1, 0, 0, 0, 1983, 1984, 1, 0, 0, 0, 1984, 1985, 1, 0, 0, 0, 1985, 1986, 3, 305, 152, 0, 1986, 2042, 1, 0, 0, 0, 1987, 1989, 3, 309, 154, 0, 1988, 1987, 1, 0, 0, 0, 1988, 1989, 1, 0, 0, 0, 1989, 1990, 1, 0, 0, 0, 1990, 1991, 5, 48, 0, 0, 1991, 1992, 5, 120, 0, 0, 1992, 1993, 1, 0, 0, 0, 1993, 1994, 3, 307, 153, 0, 1994, 1996, 5, 46, 0, 0, 1995, 1997, 3, 323, 161, 0, 1996, 1995, 1, 0, 0, 0, 1996, 1997, 1, 0, 0, 0, 1997, 2042, 1, 0, 0, 0, 1998, 2000, 3, 309, 154, 0, 1999, 1998, 1, 0, 0, 0, 1999, 2000, 1, 0, 0, 0, 2000, 2001, 1, 0, 0, 0, 2001, 2002, 5, 48, 0, 0, 2002, 2003, 5, 120, 0, 0, 2003, 2004, 1, 0, 0, 0, 2004, 2009, 3, 307, 153, 0, 2005, 2007, 5, 46, 0, 0, 2006, 2008, 3, 323, 161, 0, 2007, 2006, 1, 0, 0, 0, 2007, 2008, 1, 0, 0, 0, 2008, 2010, 1, 0, 0, 0, 2009, 2005, 1, 0, 0, 0, 2009, 2010, 1, 0, 0, 0, 2010, 2011, 1, 0, 0, 0, 2011, 2013, 7, 8, 0, 0, 2012, 2014, 3, 309, 154, 0, 2013, 2012, 1, 0, 0, 0, 2013, 2014, 1, 0, 0, 0, 2014, 2015, 1, 0, 0, 0, 2015, 2016, 3, 305, 152, 0, 2016, 2042, 1, 0, 0, 0, 2017, 2019, 3, 309, 154, 0, 2018, 2017, 1, 0, 0, 0, 2018, 2019, 1, 0, 0, 0, 2019, 2020, 1, 0, 0, 0, 2020, 2021, 5, 105, 0, 0, 2021, 2022, 5, 110, 0, 0, 2022, 2042, 5, 102, 0, 0, 2023, 2025, 3, 309, 154, 0, 2024, 2023, 1, 0, 0, 0, 2024, 2025, 1, 0, 0, 0, 2025, 2026, 1, 0, 0, 0, 2026, 2027, 5, 110, 0, 0, 2027, 2028, 5, 97, 0, 0, 2028, 2042, 5, 110, 0, 0, 2029, 2031, 3, 309, 154, 0, 2030, 2029, 1, 0, 0, 0, 2030, 2031, 1, 0, 0, 0, 2031, 2032, 1, 0, 0, 0, 2032, 2033, 5, 110, 0, 0, 2033, 2034, 5, 97, 0, 0, 2034, 2035, 5, 110, 0, 0, 2035, 2036, 5, 58, 0, 0, 2036, 2037, 1, 0, 0, 0, 2037, 2038, 5, 48, 0, 0, 2038, 2039, 5, 120, 0, 0, 2039, 2040, 1, 0, 0, 0, 2040, 2042, 3, 307, 153, 0, 2041, 1964, 1, 0, 0, 0, 2041, 1972, 1, 0, 0, 0, 2041, 1988, 1, 0, 0, 0, 2041, 1999, 1, 0, 0, 0, 2041, 2018, 1, 0, 0, 0, 2041, 2024, 1, 0, 0, 0, 2041, 2030, 1, 0, 0, 0, 2042, 326, 1, 0, 0, 0, 2043, 2063, 5, 34, 0, 0, 2044, 2062, 3, 335, 167, 0, 2045, 2062, 7, 9, 0, 0, 2046, 2047, 5, 92, 0, 0, 2047, 2048, 3, 313, 156, 0, 2048, 2049, 3, 313, 156, 0, 2049, 2062, 1, 0, 0, 0, 2050, 2051, 5, 92, 0, 0, 2051, 2052, 5, 117, 0, 0, 2052, 2053, 5, 123, 0, 0, 2053, 2055, 1, 0, 0, 0, 2054, 2056, 3, 313, 156, 0, 2055, 2054, 1, 0, 0, 0, 2056, 2057, 1, 0, 0, 0, 2057, 2055, 1, 0, 0, 0, 2057, 2058, 1, 0, 0, 0, 2058, 2059, 1, 0, 0, 0, 2059, 2060, 5, 125, 0, 0, 2060, 2062, 1, 0, 0, 0, 2061, 2044, 1, 0, 0, 0, 2061, 2045, 1, 0, 0, 0, 2061, 2046, 1, 0, 0, 0, 2061, 2050, 1, 0, 0, 0, 2062, 2065, 1, 0, 0, 0, 2063, 2061, 1, 0, 0, 0, 2063, 2064, 1, 0, 0, 0, 2064, 2066, 1, 0, 0, 0, 2065, 2063, 1, 0, 0, 0, 2066, 2067, 5, 34, 0, 0, 2067, 328, 1, 0, 0, 0, 2068, 2073, 5, 36, 0, 0, 2069, 2074, 3, 315, 157, 0, 2070, 2074, 3, 311, 155, 0, 2071, 2074, 5, 95, 0, 0, 2072, 2074, 3, 303, 151, 0, 2073, 2069, 1, 0, 0, 0, 2073, 2070, 1, 0, 0, 0, 2073, 2071, 1, 0, 0, 0, 2073, 2072, 1, 0, 0, 0, 2074, 2075, 1, 0, 0, 0, 2075, 2073, 1, 0, 0, 0, 2075, 2076, 1, 0, 0, 0, 2076, 330, 1, 0, 0, 0, 2077, 2078, 7, 10, 0, 0, 2078, 332, 1, 0, 0, 0, 2079, 2082, 3, 103, 51, 0, 2080, 2082, 3, 105, 52, 0, 2081, 2079, 1, 0, 0, 0, 2081, 2080, 1, 0, 0, 0, 2082, 334, 1, 0, 0, 0, 2083, 2084, 8, 11, 0, 0, 2084, 336, 1, 0, 0, 0, 2085, 2086, 7, 12, 0, 0, 2086, 338, 1, 0, 0, 0, 2087, 2088, 7, 13, 0, 0, 2088, 340, 1, 0, 0, 0, 2089, 2090, 7, 14, 0, 0, 2090, 342, 1, 0, 0, 0, 2091, 2094, 3, 337, 168, 0, 2092, 2094, 3, 347, 173, 0, 2093, 2091, 1, 0, 0, 0, 2093, 2092, 1, 0, 0, 0, 2094, 344, 1, 0, 0, 0, 2095, 2098, 3, 339, 169, 0, 2096, 2098, 3, 347, 173, 0, 2097, 2095, 1, 0, 0, 0, 2097, 2096, 1, 0, 0, 0, 2098, 346, 1, 0, 0, 0, 2099, 2100, 7, 15, 0, 0, 2100, 2127, 3, 341, 170, 0, 2101, 2102, 7, 16, 0, 0, 2102, 2103, 7, 17, 0, 0, 2103, 2127, 3, 341, 170, 0, 2104, 2105, 7, 18, 0, 0, 2105, 2106, 7, 19, 0, 0, 2106, 2127, 3, 341, 170, 0, 2107, 2108, 7, 20, 0, 0, 2108, 2109, 3, 341, 170, 0, 2109, 2110, 3, 341, 170, 0, 2110, 2127, 1, 0, 0, 0, 2111, 2112, 7, 21, 0, 0, 2112, 2113, 7, 22, 0, 0, 2113, 2114, 3, 341, 170, 0, 2114, 2115, 3, 341, 170, 0, 2115, 2127, 1, 0, 0, 0, 2116, 2117, 7, 23, 0, 0, 2117, 2118, 7, 24, 0, 0, 2118, 2119, 3, 341, 170, 0, 2119, 2120, 3, 341, 170, 0, 2120, 2127, 1, 0, 0, 0, 2121, 2122, 7, 25, 0, 0, 2122, 2123, 3, 341, 170, 0, 2123, 2124, 3, 341, 170, 0, 2124, 2125, 3, 341, 170, 0, 2125, 2127, 1, 0, 0, 0, 2126, 2099, 1, 0, 0, 0, 2126, 2101, 1, 0, 0, 0, 2126, 2104, 1, 0, 0, 0, 2126, 2107, 1, 0, 0, 0, 2126, 2111, 1, 0, 0, 0, 2126, 2116, 1, 0, 0, 0, 2126, 2121, 1, 0, 0, 0, 2127, 348, 1, 0, 0, 0, 44, 0, 628, 638, 666, 686, 690, 1183, 1258, 1410, 1574, 1890, 1900, 1911, 1915, 1923, 1928, 1933, 1938, 1954, 1964, 1969, 1972, 1977, 1979, 1983, 1988, 1996, 1999, 2007, 2009, 2013, 2018, 2024, 2030, 2041, 2057, 2061, 2063, 2073, 2075, 2081, 2093, 2097, 2126, 1, 6, 0, 0] \ No newline at end of file diff --git a/grammar/WatLexer.java b/grammar/WatLexer.java new file mode 100644 index 000000000..07ed22d10 --- /dev/null +++ b/grammar/WatLexer.java @@ -0,0 +1,1496 @@ +// Generated from WatLexer.g4 by ANTLR 4.13.2 +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) +public class WatLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.13.2", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + LPAR=1, RPAR=2, NAT=3, INT=4, FLOAT=5, STRING_=6, VALUE_TYPE=7, CONST=8, + SYMBOLIC=9, FUNCREF=10, EXTERNREF=11, MUT=12, NOP=13, SYM_ASSERT=14, ALLOC=15, + FREE=16, UNREACHABLE=17, DROP=18, BLOCK=19, LOOP=20, FOR=21, VBAR=22, + END=23, BR=24, BR_IF=25, BR_TABLE=26, RETURN=27, IF=28, THEN=29, ELSE=30, + SELECT=31, CALL=32, CALL_INDIRECT=33, RETURN_CALL=34, RETURN_CALL_INDIRECT=35, + LOCAL_GET=36, LOCAL_SET=37, LOCAL_TEE=38, GLOBAL_GET=39, GLOBAL_SET=40, + LOAD=41, STORE=42, UNDERSCORE=43, OFFSET_EQ=44, ALIGN_EQ=45, SIGN_POSTFIX=46, + MEM_SIZE=47, I32=48, I64=49, F32=50, F64=51, IXX=52, FXX=53, OP_EQZ=54, + OP_EQ=55, OP_NE=56, OP_LT=57, OP_LTS=58, OP_LTU=59, OP_LE=60, OP_LES=61, + OP_LEU=62, OP_GT=63, OP_GTS=64, OP_GTU=65, OP_GE=66, OP_GES=67, OP_GEU=68, + OP_CLZ=69, OP_CTZ=70, OP_POPCNT=71, OP_NEG=72, OP_ABS=73, OP_SQRT=74, + OP_CEIL=75, OP_FLOOR=76, OP_TRUNC=77, OP_NEAREST=78, OP_ADD=79, OP_SUB=80, + OP_MUL=81, OP_DIV=82, OP_DIV_S=83, OP_DIV_U=84, OP_REM_S=85, OP_REM_U=86, + OP_AND=87, OP_OR=88, OP_XOR=89, OP_SHL=90, OP_SHR_S=91, OP_SHR_U=92, OP_ROTL=93, + OP_ROTR=94, OP_MIN=95, OP_MAX=96, OP_COPYSIGN=97, OP_WRAP=98, OP_TRUNC_=99, + OP_TRUNC_SAT=100, OP_CONVERT=101, OP_EXTEND=102, OP_DEMOTE=103, OP_PROMOTE=104, + OP_REINTER=105, MEMORY_SIZE=106, MEMORY_GROW=107, MEMORY_FILL=108, MEMORY_COPY=109, + MEMORY_INIT=110, TEST=111, COMPARE=112, UNARY=113, BINARY=114, CONVERT=115, + TYPE=116, FUNC=117, EXTERN=118, START_=119, PARAM=120, RESULT=121, LOCAL=122, + GLOBAL=123, TABLE=124, MEMORY=125, ELEM=126, DATA=127, OFFSET=128, IMPORT=129, + EXPORT=130, MODULE=131, BIN=132, QUOTE=133, SCRIPT=134, REGISTER=135, + INVOKE=136, GET=137, ASSERT_MALFORMED=138, ASSERT_INVALID=139, ASSERT_UNLINKABLE=140, + ASSERT_RETURN=141, ASSERT_RETURN_CANONICAL_NAN=142, ASSERT_RETURN_ARITHMETIC_NAN=143, + ASSERT_TRAP=144, ASSERT_EXHAUSTION=145, INPUT=146, OUTPUT=147, VAR=148, + V128=149, SPACE=150, COMMENT=151; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "LPAR", "RPAR", "NAT", "INT", "FLOAT", "STRING_", "VALUE_TYPE", "CONST", + "SYMBOLIC", "FUNCREF", "EXTERNREF", "MUT", "NOP", "SYM_ASSERT", "ALLOC", + "FREE", "UNREACHABLE", "DROP", "BLOCK", "LOOP", "FOR", "VBAR", "END", + "BR", "BR_IF", "BR_TABLE", "RETURN", "IF", "THEN", "ELSE", "SELECT", + "CALL", "CALL_INDIRECT", "RETURN_CALL", "RETURN_CALL_INDIRECT", "LOCAL_GET", + "LOCAL_SET", "LOCAL_TEE", "GLOBAL_GET", "GLOBAL_SET", "LOAD", "STORE", + "UNDERSCORE", "OFFSET_EQ", "ALIGN_EQ", "SIGN_POSTFIX", "MEM_SIZE", "I32", + "I64", "F32", "F64", "IXX", "FXX", "OP_EQZ", "OP_EQ", "OP_NE", "OP_LT", + "OP_LTS", "OP_LTU", "OP_LE", "OP_LES", "OP_LEU", "OP_GT", "OP_GTS", "OP_GTU", + "OP_GE", "OP_GES", "OP_GEU", "OP_CLZ", "OP_CTZ", "OP_POPCNT", "OP_NEG", + "OP_ABS", "OP_SQRT", "OP_CEIL", "OP_FLOOR", "OP_TRUNC", "OP_NEAREST", + "OP_ADD", "OP_SUB", "OP_MUL", "OP_DIV", "OP_DIV_S", "OP_DIV_U", "OP_REM_S", + "OP_REM_U", "OP_AND", "OP_OR", "OP_XOR", "OP_SHL", "OP_SHR_S", "OP_SHR_U", + "OP_ROTL", "OP_ROTR", "OP_MIN", "OP_MAX", "OP_COPYSIGN", "OP_WRAP", "OP_TRUNC_", + "OP_TRUNC_SAT", "OP_CONVERT", "OP_EXTEND", "OP_DEMOTE", "OP_PROMOTE", + "OP_REINTER", "MEMORY_SIZE", "MEMORY_GROW", "MEMORY_FILL", "MEMORY_COPY", + "MEMORY_INIT", "TEST", "COMPARE", "UNARY", "BINARY", "CONVERT", "TYPE", + "FUNC", "EXTERN", "START_", "PARAM", "RESULT", "LOCAL", "GLOBAL", "TABLE", + "MEMORY", "ELEM", "DATA", "OFFSET", "IMPORT", "EXPORT", "MODULE", "BIN", + "QUOTE", "SCRIPT", "REGISTER", "INVOKE", "GET", "ASSERT_MALFORMED", "ASSERT_INVALID", + "ASSERT_UNLINKABLE", "ASSERT_RETURN", "ASSERT_RETURN_CANONICAL_NAN", + "ASSERT_RETURN_ARITHMETIC_NAN", "ASSERT_TRAP", "ASSERT_EXHAUSTION", "INPUT", + "OUTPUT", "VAR", "V128", "SPACE", "COMMENT", "Symbol", "Num", "HexNum", + "Sign", "Digit", "HexDigit", "Letter", "Nat", "Int", "Frac", "HexFrac", + "Float", "String_", "Name", "Escape", "NXX", "Char", "Ascii", "Ascii_no_nl", + "Utf8Cont", "Utf8", "Utf8_no_nl", "Utf8Enc" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'('", "')'", null, null, null, null, null, null, null, "'funcref'", + "'externref'", "'mut'", "'nop'", "'sym_assert'", "'alloc'", "'free'", + "'unreachable'", "'drop'", "'block'", "'loop'", "'for'", "'|'", "'end'", + "'br'", "'br_if'", "'br_table'", "'return'", "'if'", "'then'", "'else'", + "'.select'", "'call'", "'call_indirect'", "'return_call'", "'return_call_indirect'", + "'local.get'", "'local.set'", "'local.tee'", "'global.get'", "'global.set'", + null, null, "'_'", "'offset='", "'align='", null, null, "'i32'", "'i64'", + "'f32'", "'f64'", null, null, "'.eqz'", "'.eq'", "'.ne'", "'.lt'", "'.lt_s'", + "'.lt_u'", "'.le'", "'.le_s'", "'.le_u'", "'.gt'", "'.gt_s'", "'.gt_u'", + "'.ge'", "'.ge_s'", "'.ge_u'", "'.clz'", "'.ctz'", "'.popcnt'", "'.neg'", + "'.abs'", "'.sqrt'", "'.ceil'", "'.floor'", "'.trunc'", "'.nearest'", + "'.add'", "'.sub'", "'.mul'", "'.div'", "'.div_s'", "'.div_u'", "'.rem_s'", + "'.rem_u'", "'.and'", "'.or'", "'.xor'", "'.shl'", "'.shr_s'", "'.shr_u'", + "'.rotl'", "'.rotr'", "'.min'", "'.max'", "'.copysign'", "'.wrap_'", + "'.trunc_'", "'.trunc_sat_'", "'.convert_'", "'.extend_'", "'.demote_'", + "'.promote_'", "'.reinterpret_'", "'memory.size'", "'memory.grow'", "'memory.fill'", + "'memory.copy'", "'memory.init'", null, null, null, null, null, "'type'", + "'func'", "'extern'", "'start'", "'param'", "'result'", "'local'", "'global'", + "'table'", "'memory'", "'elem'", "'data'", "'offset'", "'import'", "'export'", + "'module'", "'binary'", "'quote'", "'script'", "'register'", "'invoke'", + "'get'", "'assert_malformed'", "'assert_invalid'", "'assert_unlinkable'", + "'assert_return'", "'assert_return_canonical_nan'", "'assert_return_arithmetic_nan'", + "'assert_trap'", "'assert_exhaustion'", "'input'", "'output'", null, + "'v128'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "LPAR", "RPAR", "NAT", "INT", "FLOAT", "STRING_", "VALUE_TYPE", + "CONST", "SYMBOLIC", "FUNCREF", "EXTERNREF", "MUT", "NOP", "SYM_ASSERT", + "ALLOC", "FREE", "UNREACHABLE", "DROP", "BLOCK", "LOOP", "FOR", "VBAR", + "END", "BR", "BR_IF", "BR_TABLE", "RETURN", "IF", "THEN", "ELSE", "SELECT", + "CALL", "CALL_INDIRECT", "RETURN_CALL", "RETURN_CALL_INDIRECT", "LOCAL_GET", + "LOCAL_SET", "LOCAL_TEE", "GLOBAL_GET", "GLOBAL_SET", "LOAD", "STORE", + "UNDERSCORE", "OFFSET_EQ", "ALIGN_EQ", "SIGN_POSTFIX", "MEM_SIZE", "I32", + "I64", "F32", "F64", "IXX", "FXX", "OP_EQZ", "OP_EQ", "OP_NE", "OP_LT", + "OP_LTS", "OP_LTU", "OP_LE", "OP_LES", "OP_LEU", "OP_GT", "OP_GTS", "OP_GTU", + "OP_GE", "OP_GES", "OP_GEU", "OP_CLZ", "OP_CTZ", "OP_POPCNT", "OP_NEG", + "OP_ABS", "OP_SQRT", "OP_CEIL", "OP_FLOOR", "OP_TRUNC", "OP_NEAREST", + "OP_ADD", "OP_SUB", "OP_MUL", "OP_DIV", "OP_DIV_S", "OP_DIV_U", "OP_REM_S", + "OP_REM_U", "OP_AND", "OP_OR", "OP_XOR", "OP_SHL", "OP_SHR_S", "OP_SHR_U", + "OP_ROTL", "OP_ROTR", "OP_MIN", "OP_MAX", "OP_COPYSIGN", "OP_WRAP", "OP_TRUNC_", + "OP_TRUNC_SAT", "OP_CONVERT", "OP_EXTEND", "OP_DEMOTE", "OP_PROMOTE", + "OP_REINTER", "MEMORY_SIZE", "MEMORY_GROW", "MEMORY_FILL", "MEMORY_COPY", + "MEMORY_INIT", "TEST", "COMPARE", "UNARY", "BINARY", "CONVERT", "TYPE", + "FUNC", "EXTERN", "START_", "PARAM", "RESULT", "LOCAL", "GLOBAL", "TABLE", + "MEMORY", "ELEM", "DATA", "OFFSET", "IMPORT", "EXPORT", "MODULE", "BIN", + "QUOTE", "SCRIPT", "REGISTER", "INVOKE", "GET", "ASSERT_MALFORMED", "ASSERT_INVALID", + "ASSERT_UNLINKABLE", "ASSERT_RETURN", "ASSERT_RETURN_CANONICAL_NAN", + "ASSERT_RETURN_ARITHMETIC_NAN", "ASSERT_TRAP", "ASSERT_EXHAUSTION", "INPUT", + "OUTPUT", "VAR", "V128", "SPACE", "COMMENT" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public WatLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "WatLexer.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\u0004\u0000\u0097\u0850\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002"+ + "\u0001\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002"+ + "\u0004\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002"+ + "\u0007\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002"+ + "\u000b\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e"+ + "\u0002\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011"+ + "\u0002\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014"+ + "\u0002\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017"+ + "\u0002\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a"+ + "\u0002\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d"+ + "\u0002\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!"+ + "\u0007!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002"+ + "&\u0007&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002"+ + "+\u0007+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u0002"+ + "0\u00070\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u0002"+ + "5\u00075\u00026\u00076\u00027\u00077\u00028\u00078\u00029\u00079\u0002"+ + ":\u0007:\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002"+ + "?\u0007?\u0002@\u0007@\u0002A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002"+ + "D\u0007D\u0002E\u0007E\u0002F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002"+ + "I\u0007I\u0002J\u0007J\u0002K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002"+ + "N\u0007N\u0002O\u0007O\u0002P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002"+ + "S\u0007S\u0002T\u0007T\u0002U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002"+ + "X\u0007X\u0002Y\u0007Y\u0002Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002"+ + "]\u0007]\u0002^\u0007^\u0002_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002"+ + "b\u0007b\u0002c\u0007c\u0002d\u0007d\u0002e\u0007e\u0002f\u0007f\u0002"+ + "g\u0007g\u0002h\u0007h\u0002i\u0007i\u0002j\u0007j\u0002k\u0007k\u0002"+ + "l\u0007l\u0002m\u0007m\u0002n\u0007n\u0002o\u0007o\u0002p\u0007p\u0002"+ + "q\u0007q\u0002r\u0007r\u0002s\u0007s\u0002t\u0007t\u0002u\u0007u\u0002"+ + "v\u0007v\u0002w\u0007w\u0002x\u0007x\u0002y\u0007y\u0002z\u0007z\u0002"+ + "{\u0007{\u0002|\u0007|\u0002}\u0007}\u0002~\u0007~\u0002\u007f\u0007\u007f"+ + "\u0002\u0080\u0007\u0080\u0002\u0081\u0007\u0081\u0002\u0082\u0007\u0082"+ + "\u0002\u0083\u0007\u0083\u0002\u0084\u0007\u0084\u0002\u0085\u0007\u0085"+ + "\u0002\u0086\u0007\u0086\u0002\u0087\u0007\u0087\u0002\u0088\u0007\u0088"+ + "\u0002\u0089\u0007\u0089\u0002\u008a\u0007\u008a\u0002\u008b\u0007\u008b"+ + "\u0002\u008c\u0007\u008c\u0002\u008d\u0007\u008d\u0002\u008e\u0007\u008e"+ + "\u0002\u008f\u0007\u008f\u0002\u0090\u0007\u0090\u0002\u0091\u0007\u0091"+ + "\u0002\u0092\u0007\u0092\u0002\u0093\u0007\u0093\u0002\u0094\u0007\u0094"+ + "\u0002\u0095\u0007\u0095\u0002\u0096\u0007\u0096\u0002\u0097\u0007\u0097"+ + "\u0002\u0098\u0007\u0098\u0002\u0099\u0007\u0099\u0002\u009a\u0007\u009a"+ + "\u0002\u009b\u0007\u009b\u0002\u009c\u0007\u009c\u0002\u009d\u0007\u009d"+ + "\u0002\u009e\u0007\u009e\u0002\u009f\u0007\u009f\u0002\u00a0\u0007\u00a0"+ + "\u0002\u00a1\u0007\u00a1\u0002\u00a2\u0007\u00a2\u0002\u00a3\u0007\u00a3"+ + "\u0002\u00a4\u0007\u00a4\u0002\u00a5\u0007\u00a5\u0002\u00a6\u0007\u00a6"+ + "\u0002\u00a7\u0007\u00a7\u0002\u00a8\u0007\u00a8\u0002\u00a9\u0007\u00a9"+ + "\u0002\u00aa\u0007\u00aa\u0002\u00ab\u0007\u00ab\u0002\u00ac\u0007\u00ac"+ + "\u0002\u00ad\u0007\u00ad\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001"+ + "\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004"+ + "\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ + "\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+ + "\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001"+ + "\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+ + "\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001"+ + "\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+ + "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001"+ + "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+ + "\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001"+ + "\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+ + "\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001"+ + "\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001"+ + "\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+ + "\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ + "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001"+ + "\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+ + "\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001"+ + "\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001"+ + "\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+ + "\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ + "\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001"+ + " \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001"+ + "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001\"\u0001"+ + "\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+ + "\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+ + "\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+ + "#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ + "$\u0001$\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001"+ + "%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001"+ + "&\u0001&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001"+ + "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001(\u0001("+ + "\u0001(\u0001(\u0001(\u0001(\u0001(\u0003(\u0275\b(\u0001)\u0001)\u0001"+ + ")\u0001)\u0001)\u0001)\u0001)\u0001)\u0003)\u027f\b)\u0001*\u0001*\u0001"+ + "+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001,\u0001,\u0001"+ + ",\u0001,\u0001,\u0001,\u0001,\u0001-\u0001-\u0001.\u0001.\u0001.\u0001"+ + ".\u0001.\u0001.\u0001.\u0003.\u029b\b.\u0001/\u0001/\u0001/\u0001/\u0001"+ + "0\u00010\u00010\u00010\u00011\u00011\u00011\u00011\u00012\u00012\u0001"+ + "2\u00012\u00013\u00013\u00033\u02af\b3\u00014\u00014\u00034\u02b3\b4\u0001"+ + "5\u00015\u00015\u00015\u00015\u00016\u00016\u00016\u00016\u00017\u0001"+ + "7\u00017\u00017\u00018\u00018\u00018\u00018\u00019\u00019\u00019\u0001"+ + "9\u00019\u00019\u0001:\u0001:\u0001:\u0001:\u0001:\u0001:\u0001;\u0001"+ + ";\u0001;\u0001;\u0001<\u0001<\u0001<\u0001<\u0001<\u0001<\u0001=\u0001"+ + "=\u0001=\u0001=\u0001=\u0001=\u0001>\u0001>\u0001>\u0001>\u0001?\u0001"+ + "?\u0001?\u0001?\u0001?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001@\u0001"+ + "@\u0001A\u0001A\u0001A\u0001A\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001D\u0001"+ + "D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001E\u0001F\u0001F\u0001F\u0001"+ + "F\u0001F\u0001F\u0001F\u0001F\u0001G\u0001G\u0001G\u0001G\u0001G\u0001"+ + "H\u0001H\u0001H\u0001H\u0001H\u0001I\u0001I\u0001I\u0001I\u0001I\u0001"+ + "I\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001K\u0001K\u0001K\u0001"+ + "K\u0001K\u0001K\u0001K\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001"+ + "L\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ + "N\u0001N\u0001N\u0001N\u0001N\u0001O\u0001O\u0001O\u0001O\u0001O\u0001"+ + "P\u0001P\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001"+ + "R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001S\u0001S\u0001S\u0001"+ + "S\u0001S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001T\u0001T\u0001"+ + "T\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001V\u0001V\u0001"+ + "V\u0001V\u0001V\u0001W\u0001W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001"+ + "X\u0001X\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001"+ + "Z\u0001Z\u0001Z\u0001Z\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001"+ + "[\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001]\u0001]\u0001"+ + "]\u0001]\u0001]\u0001]\u0001^\u0001^\u0001^\u0001^\u0001^\u0001_\u0001"+ + "_\u0001_\u0001_\u0001_\u0001`\u0001`\u0001`\u0001`\u0001`\u0001`\u0001"+ + "`\u0001`\u0001`\u0001`\u0001a\u0001a\u0001a\u0001a\u0001a\u0001a\u0001"+ + "a\u0001b\u0001b\u0001b\u0001b\u0001b\u0001b\u0001b\u0001b\u0001c\u0001"+ + "c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001"+ + "c\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001"+ + "d\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001"+ + "f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001g\u0001"+ + "g\u0001g\u0001g\u0001g\u0001g\u0001g\u0001g\u0001g\u0001g\u0001h\u0001"+ + "h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001"+ + "h\u0001h\u0001h\u0001i\u0001i\u0001i\u0001i\u0001i\u0001i\u0001i\u0001"+ + "i\u0001i\u0001i\u0001i\u0001i\u0001j\u0001j\u0001j\u0001j\u0001j\u0001"+ + "j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001k\u0001k\u0001k\u0001"+ + "k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001l\u0001"+ + "l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001"+ + "l\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001"+ + "m\u0001m\u0001m\u0001n\u0001n\u0001n\u0001o\u0001o\u0001o\u0001o\u0001"+ + "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ + "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ + "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ + "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ + "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ + "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ + "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ + "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ + "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ + "o\u0001o\u0003o\u04a0\bo\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ + "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ + "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ + "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ + "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ + "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ + "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ + "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0003p\u04eb\bp\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0003q\u0583"+ + "\bq\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0003r\u0627\br\u0001s\u0001s\u0001s\u0001s\u0001s\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001v\u0001v\u0001v\u0001v\u0001v\u0001v\u0001w\u0001w\u0001"+ + "w\u0001w\u0001w\u0001w\u0001x\u0001x\u0001x\u0001x\u0001x\u0001x\u0001"+ + "x\u0001y\u0001y\u0001y\u0001y\u0001y\u0001y\u0001z\u0001z\u0001z\u0001"+ + "z\u0001z\u0001z\u0001z\u0001{\u0001{\u0001{\u0001{\u0001{\u0001{\u0001"+ + "|\u0001|\u0001|\u0001|\u0001|\u0001|\u0001|\u0001}\u0001}\u0001}\u0001"+ + "}\u0001}\u0001~\u0001~\u0001~\u0001~\u0001~\u0001\u007f\u0001\u007f\u0001"+ + "\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u0080\u0001"+ + "\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001"+ + "\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001"+ + "\u0081\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001"+ + "\u0082\u0001\u0082\u0001\u0083\u0001\u0083\u0001\u0083\u0001\u0083\u0001"+ + "\u0083\u0001\u0083\u0001\u0083\u0001\u0084\u0001\u0084\u0001\u0084\u0001"+ + "\u0084\u0001\u0084\u0001\u0084\u0001\u0085\u0001\u0085\u0001\u0085\u0001"+ + "\u0085\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0086\u0001\u0086\u0001"+ + "\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001"+ + "\u0086\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001"+ + "\u0087\u0001\u0087\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088\u0001"+ + "\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001"+ + "\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001"+ + "\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u008a\u0001"+ + "\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001"+ + "\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001"+ + "\u008a\u0001\u008a\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001"+ + "\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001"+ + "\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001"+ + "\u008b\u0001\u008b\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001"+ + "\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001"+ + "\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008d\u0001\u008d\u0001"+ + "\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001"+ + "\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001"+ + "\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001"+ + "\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001"+ + "\u008d\u0001\u008d\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001"+ + "\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001"+ + "\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001"+ + "\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001"+ + "\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001"+ + "\u008e\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001"+ + "\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001"+ + "\u008f\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001"+ + "\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001"+ + "\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001"+ + "\u0090\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001"+ + "\u0091\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092\u0001"+ + "\u0092\u0001\u0092\u0001\u0093\u0001\u0093\u0001\u0094\u0001\u0094\u0001"+ + "\u0094\u0001\u0094\u0001\u0094\u0001\u0095\u0004\u0095\u0761\b\u0095\u000b"+ + "\u0095\f\u0095\u0762\u0001\u0095\u0001\u0095\u0001\u0096\u0001\u0096\u0001"+ + "\u0096\u0001\u0096\u0005\u0096\u076b\b\u0096\n\u0096\f\u0096\u076e\t\u0096"+ + "\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096"+ + "\u0005\u0096\u0776\b\u0096\n\u0096\f\u0096\u0779\t\u0096\u0001\u0096\u0003"+ + "\u0096\u077c\b\u0096\u0001\u0096\u0001\u0096\u0001\u0097\u0001\u0097\u0001"+ + "\u0098\u0001\u0098\u0003\u0098\u0784\b\u0098\u0001\u0098\u0005\u0098\u0787"+ + "\b\u0098\n\u0098\f\u0098\u078a\t\u0098\u0001\u0099\u0001\u0099\u0003\u0099"+ + "\u078e\b\u0099\u0001\u0099\u0005\u0099\u0791\b\u0099\n\u0099\f\u0099\u0794"+ + "\t\u0099\u0001\u009a\u0001\u009a\u0001\u009b\u0001\u009b\u0001\u009c\u0001"+ + "\u009c\u0001\u009d\u0001\u009d\u0001\u009e\u0001\u009e\u0001\u009e\u0001"+ + "\u009e\u0001\u009e\u0003\u009e\u07a3\b\u009e\u0001\u009f\u0001\u009f\u0001"+ + "\u009f\u0001\u00a0\u0001\u00a0\u0001\u00a1\u0001\u00a1\u0001\u00a2\u0003"+ + "\u00a2\u07ad\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0003\u00a2\u07b2"+ + "\b\u00a2\u0001\u00a2\u0003\u00a2\u07b5\b\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0001\u00a2\u0003\u00a2\u07ba\b\u00a2\u0003\u00a2\u07bc\b\u00a2\u0001"+ + "\u00a2\u0001\u00a2\u0003\u00a2\u07c0\b\u00a2\u0001\u00a2\u0001\u00a2\u0001"+ + "\u00a2\u0003\u00a2\u07c5\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001"+ + "\u00a2\u0001\u00a2\u0001\u00a2\u0003\u00a2\u07cd\b\u00a2\u0001\u00a2\u0003"+ + "\u00a2\u07d0\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001"+ + "\u00a2\u0001\u00a2\u0003\u00a2\u07d8\b\u00a2\u0003\u00a2\u07da\b\u00a2"+ + "\u0001\u00a2\u0001\u00a2\u0003\u00a2\u07de\b\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0001\u00a2\u0003\u00a2\u07e3\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0001\u00a2\u0003\u00a2\u07e9\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0001\u00a2\u0003\u00a2\u07ef\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0003\u00a2\u07fa\b\u00a2\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3"+ + "\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3"+ + "\u0001\u00a3\u0001\u00a3\u0004\u00a3\u0808\b\u00a3\u000b\u00a3\f\u00a3"+ + "\u0809\u0001\u00a3\u0001\u00a3\u0005\u00a3\u080e\b\u00a3\n\u00a3\f\u00a3"+ + "\u0811\t\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a4\u0001\u00a4\u0001\u00a4"+ + "\u0001\u00a4\u0001\u00a4\u0004\u00a4\u081a\b\u00a4\u000b\u00a4\f\u00a4"+ + "\u081b\u0001\u00a5\u0001\u00a5\u0001\u00a6\u0001\u00a6\u0003\u00a6\u0822"+ + "\b\u00a6\u0001\u00a7\u0001\u00a7\u0001\u00a8\u0001\u00a8\u0001\u00a9\u0001"+ + "\u00a9\u0001\u00aa\u0001\u00aa\u0001\u00ab\u0001\u00ab\u0003\u00ab\u082e"+ + "\b\u00ab\u0001\u00ac\u0001\u00ac\u0003\u00ac\u0832\b\u00ac\u0001\u00ad"+ + "\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad"+ + "\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad"+ + "\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad"+ + "\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad"+ + "\u0001\u00ad\u0001\u00ad\u0003\u00ad\u084f\b\u00ad\u0002\u076c\u0777\u0000"+ + "\u00ae\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006"+ + "\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e"+ + "\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017"+ + "/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%"+ + "K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f@\u0081A\u0083"+ + "B\u0085C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095K\u0097"+ + "L\u0099M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9U\u00ab"+ + "V\u00adW\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf"+ + "`\u00c1a\u00c3b\u00c5c\u00c7d\u00c9e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3"+ + "j\u00d5k\u00d7l\u00d9m\u00dbn\u00ddo\u00dfp\u00e1q\u00e3r\u00e5s\u00e7"+ + "t\u00e9u\u00ebv\u00edw\u00efx\u00f1y\u00f3z\u00f5{\u00f7|\u00f9}\u00fb"+ + "~\u00fd\u007f\u00ff\u0080\u0101\u0081\u0103\u0082\u0105\u0083\u0107\u0084"+ + "\u0109\u0085\u010b\u0086\u010d\u0087\u010f\u0088\u0111\u0089\u0113\u008a"+ + "\u0115\u008b\u0117\u008c\u0119\u008d\u011b\u008e\u011d\u008f\u011f\u0090"+ + "\u0121\u0091\u0123\u0092\u0125\u0093\u0127\u0094\u0129\u0095\u012b\u0096"+ + "\u012d\u0097\u012f\u0000\u0131\u0000\u0133\u0000\u0135\u0000\u0137\u0000"+ + "\u0139\u0000\u013b\u0000\u013d\u0000\u013f\u0000\u0141\u0000\u0143\u0000"+ + "\u0145\u0000\u0147\u0000\u0149\u0000\u014b\u0000\u014d\u0000\u014f\u0000"+ + "\u0151\u0000\u0153\u0000\u0155\u0000\u0157\u0000\u0159\u0000\u015b\u0000"+ + "\u0001\u0000\u001a\u0002\u0000ssuu\u0003\u0000\t\n\r\r \u000b\u0000!"+ + "!#\'*+-/::<@\\\\^^``||~~\u0002\u0000++--\u0001\u000009\u0003\u000009A"+ + "Faf\u0002\u0000AZaz\u0002\u0000EEee\u0002\u0000PPpp\u0003\u0000\t\n\'"+ + "\'\\\\\u0006\u0000\"\"\'\'\\\\nnrrtt\u0005\u0000\u0000\u001f\"\"\'\'\\"+ + "\\\u007f\u00ff\u0001\u0000\u0000\u007f\u0002\u0000\u0000\t\u000b\u007f"+ + "\u0001\u0000\u0080\u00bf\u0001\u0000\u00c2\u00df\u0001\u0000\u00e0\u00e0"+ + "\u0001\u0000\u00a0\u00bf\u0001\u0000\u00ed\u00ed\u0001\u0000\u0080\u009f"+ + "\u0002\u0000\u00e1\u00ec\u00ee\u00ef\u0001\u0000\u00f0\u00f0\u0001\u0000"+ + "\u0090\u00bf\u0001\u0000\u00f4\u00f4\u0001\u0000\u0080\u008f\u0001\u0000"+ + "\u00f1\u00f3\u08a6\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001"+ + "\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001"+ + "\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000"+ + "\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000"+ + "\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000"+ + "\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000"+ + "\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000"+ + "\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000"+ + "\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000"+ + "%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001"+ + "\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000"+ + "\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u0000"+ + "3\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001"+ + "\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000"+ + "\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000"+ + "A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001"+ + "\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000"+ + "\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000"+ + "O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001"+ + "\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000"+ + "\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000"+ + "]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001"+ + "\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000"+ + "\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000"+ + "k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001"+ + "\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000"+ + "\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000"+ + "y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001"+ + "\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001"+ + "\u0000\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001"+ + "\u0000\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001"+ + "\u0000\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001"+ + "\u0000\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001"+ + "\u0000\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001"+ + "\u0000\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001"+ + "\u0000\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001"+ + "\u0000\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000\u0000\u00a1\u0001"+ + "\u0000\u0000\u0000\u0000\u00a3\u0001\u0000\u0000\u0000\u0000\u00a5\u0001"+ + "\u0000\u0000\u0000\u0000\u00a7\u0001\u0000\u0000\u0000\u0000\u00a9\u0001"+ + "\u0000\u0000\u0000\u0000\u00ab\u0001\u0000\u0000\u0000\u0000\u00ad\u0001"+ + "\u0000\u0000\u0000\u0000\u00af\u0001\u0000\u0000\u0000\u0000\u00b1\u0001"+ + "\u0000\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000\u0000\u00b5\u0001"+ + "\u0000\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000\u0000\u00b9\u0001"+ + "\u0000\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000\u0000\u00bd\u0001"+ + "\u0000\u0000\u0000\u0000\u00bf\u0001\u0000\u0000\u0000\u0000\u00c1\u0001"+ + "\u0000\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000\u0000\u00c5\u0001"+ + "\u0000\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000\u0000\u00c9\u0001"+ + "\u0000\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000\u0000\u00cd\u0001"+ + "\u0000\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000\u0000\u00d1\u0001"+ + "\u0000\u0000\u0000\u0000\u00d3\u0001\u0000\u0000\u0000\u0000\u00d5\u0001"+ + "\u0000\u0000\u0000\u0000\u00d7\u0001\u0000\u0000\u0000\u0000\u00d9\u0001"+ + "\u0000\u0000\u0000\u0000\u00db\u0001\u0000\u0000\u0000\u0000\u00dd\u0001"+ + "\u0000\u0000\u0000\u0000\u00df\u0001\u0000\u0000\u0000\u0000\u00e1\u0001"+ + "\u0000\u0000\u0000\u0000\u00e3\u0001\u0000\u0000\u0000\u0000\u00e5\u0001"+ + "\u0000\u0000\u0000\u0000\u00e7\u0001\u0000\u0000\u0000\u0000\u00e9\u0001"+ + "\u0000\u0000\u0000\u0000\u00eb\u0001\u0000\u0000\u0000\u0000\u00ed\u0001"+ + "\u0000\u0000\u0000\u0000\u00ef\u0001\u0000\u0000\u0000\u0000\u00f1\u0001"+ + "\u0000\u0000\u0000\u0000\u00f3\u0001\u0000\u0000\u0000\u0000\u00f5\u0001"+ + "\u0000\u0000\u0000\u0000\u00f7\u0001\u0000\u0000\u0000\u0000\u00f9\u0001"+ + "\u0000\u0000\u0000\u0000\u00fb\u0001\u0000\u0000\u0000\u0000\u00fd\u0001"+ + "\u0000\u0000\u0000\u0000\u00ff\u0001\u0000\u0000\u0000\u0000\u0101\u0001"+ + "\u0000\u0000\u0000\u0000\u0103\u0001\u0000\u0000\u0000\u0000\u0105\u0001"+ + "\u0000\u0000\u0000\u0000\u0107\u0001\u0000\u0000\u0000\u0000\u0109\u0001"+ + "\u0000\u0000\u0000\u0000\u010b\u0001\u0000\u0000\u0000\u0000\u010d\u0001"+ + "\u0000\u0000\u0000\u0000\u010f\u0001\u0000\u0000\u0000\u0000\u0111\u0001"+ + "\u0000\u0000\u0000\u0000\u0113\u0001\u0000\u0000\u0000\u0000\u0115\u0001"+ + "\u0000\u0000\u0000\u0000\u0117\u0001\u0000\u0000\u0000\u0000\u0119\u0001"+ + "\u0000\u0000\u0000\u0000\u011b\u0001\u0000\u0000\u0000\u0000\u011d\u0001"+ + "\u0000\u0000\u0000\u0000\u011f\u0001\u0000\u0000\u0000\u0000\u0121\u0001"+ + "\u0000\u0000\u0000\u0000\u0123\u0001\u0000\u0000\u0000\u0000\u0125\u0001"+ + "\u0000\u0000\u0000\u0000\u0127\u0001\u0000\u0000\u0000\u0000\u0129\u0001"+ + "\u0000\u0000\u0000\u0000\u012b\u0001\u0000\u0000\u0000\u0000\u012d\u0001"+ + "\u0000\u0000\u0000\u0001\u015d\u0001\u0000\u0000\u0000\u0003\u015f\u0001"+ + "\u0000\u0000\u0000\u0005\u0161\u0001\u0000\u0000\u0000\u0007\u0163\u0001"+ + "\u0000\u0000\u0000\t\u0165\u0001\u0000\u0000\u0000\u000b\u0167\u0001\u0000"+ + "\u0000\u0000\r\u0169\u0001\u0000\u0000\u0000\u000f\u016b\u0001\u0000\u0000"+ + "\u0000\u0011\u0173\u0001\u0000\u0000\u0000\u0013\u017e\u0001\u0000\u0000"+ + "\u0000\u0015\u0186\u0001\u0000\u0000\u0000\u0017\u0190\u0001\u0000\u0000"+ + "\u0000\u0019\u0194\u0001\u0000\u0000\u0000\u001b\u0198\u0001\u0000\u0000"+ + "\u0000\u001d\u01a3\u0001\u0000\u0000\u0000\u001f\u01a9\u0001\u0000\u0000"+ + "\u0000!\u01ae\u0001\u0000\u0000\u0000#\u01ba\u0001\u0000\u0000\u0000%"+ + "\u01bf\u0001\u0000\u0000\u0000\'\u01c5\u0001\u0000\u0000\u0000)\u01ca"+ + "\u0001\u0000\u0000\u0000+\u01ce\u0001\u0000\u0000\u0000-\u01d0\u0001\u0000"+ + "\u0000\u0000/\u01d4\u0001\u0000\u0000\u00001\u01d7\u0001\u0000\u0000\u0000"+ + "3\u01dd\u0001\u0000\u0000\u00005\u01e6\u0001\u0000\u0000\u00007\u01ed"+ + "\u0001\u0000\u0000\u00009\u01f0\u0001\u0000\u0000\u0000;\u01f5\u0001\u0000"+ + "\u0000\u0000=\u01fa\u0001\u0000\u0000\u0000?\u0202\u0001\u0000\u0000\u0000"+ + "A\u0207\u0001\u0000\u0000\u0000C\u0215\u0001\u0000\u0000\u0000E\u0221"+ + "\u0001\u0000\u0000\u0000G\u0236\u0001\u0000\u0000\u0000I\u0240\u0001\u0000"+ + "\u0000\u0000K\u024a\u0001\u0000\u0000\u0000M\u0254\u0001\u0000\u0000\u0000"+ + "O\u025f\u0001\u0000\u0000\u0000Q\u026a\u0001\u0000\u0000\u0000S\u0276"+ + "\u0001\u0000\u0000\u0000U\u0280\u0001\u0000\u0000\u0000W\u0282\u0001\u0000"+ + "\u0000\u0000Y\u028a\u0001\u0000\u0000\u0000[\u0291\u0001\u0000\u0000\u0000"+ + "]\u029a\u0001\u0000\u0000\u0000_\u029c\u0001\u0000\u0000\u0000a\u02a0"+ + "\u0001\u0000\u0000\u0000c\u02a4\u0001\u0000\u0000\u0000e\u02a8\u0001\u0000"+ + "\u0000\u0000g\u02ae\u0001\u0000\u0000\u0000i\u02b2\u0001\u0000\u0000\u0000"+ + "k\u02b4\u0001\u0000\u0000\u0000m\u02b9\u0001\u0000\u0000\u0000o\u02bd"+ + "\u0001\u0000\u0000\u0000q\u02c1\u0001\u0000\u0000\u0000s\u02c5\u0001\u0000"+ + "\u0000\u0000u\u02cb\u0001\u0000\u0000\u0000w\u02d1\u0001\u0000\u0000\u0000"+ + "y\u02d5\u0001\u0000\u0000\u0000{\u02db\u0001\u0000\u0000\u0000}\u02e1"+ + "\u0001\u0000\u0000\u0000\u007f\u02e5\u0001\u0000\u0000\u0000\u0081\u02eb"+ + "\u0001\u0000\u0000\u0000\u0083\u02f1\u0001\u0000\u0000\u0000\u0085\u02f5"+ + "\u0001\u0000\u0000\u0000\u0087\u02fb\u0001\u0000\u0000\u0000\u0089\u0301"+ + "\u0001\u0000\u0000\u0000\u008b\u0306\u0001\u0000\u0000\u0000\u008d\u030b"+ + "\u0001\u0000\u0000\u0000\u008f\u0313\u0001\u0000\u0000\u0000\u0091\u0318"+ + "\u0001\u0000\u0000\u0000\u0093\u031d\u0001\u0000\u0000\u0000\u0095\u0323"+ + "\u0001\u0000\u0000\u0000\u0097\u0329\u0001\u0000\u0000\u0000\u0099\u0330"+ + "\u0001\u0000\u0000\u0000\u009b\u0337\u0001\u0000\u0000\u0000\u009d\u0340"+ + "\u0001\u0000\u0000\u0000\u009f\u0345\u0001\u0000\u0000\u0000\u00a1\u034a"+ + "\u0001\u0000\u0000\u0000\u00a3\u034f\u0001\u0000\u0000\u0000\u00a5\u0354"+ + "\u0001\u0000\u0000\u0000\u00a7\u035b\u0001\u0000\u0000\u0000\u00a9\u0362"+ + "\u0001\u0000\u0000\u0000\u00ab\u0369\u0001\u0000\u0000\u0000\u00ad\u0370"+ + "\u0001\u0000\u0000\u0000\u00af\u0375\u0001\u0000\u0000\u0000\u00b1\u0379"+ + "\u0001\u0000\u0000\u0000\u00b3\u037e\u0001\u0000\u0000\u0000\u00b5\u0383"+ + "\u0001\u0000\u0000\u0000\u00b7\u038a\u0001\u0000\u0000\u0000\u00b9\u0391"+ + "\u0001\u0000\u0000\u0000\u00bb\u0397\u0001\u0000\u0000\u0000\u00bd\u039d"+ + "\u0001\u0000\u0000\u0000\u00bf\u03a2\u0001\u0000\u0000\u0000\u00c1\u03a7"+ + "\u0001\u0000\u0000\u0000\u00c3\u03b1\u0001\u0000\u0000\u0000\u00c5\u03b8"+ + "\u0001\u0000\u0000\u0000\u00c7\u03c0\u0001\u0000\u0000\u0000\u00c9\u03cc"+ + "\u0001\u0000\u0000\u0000\u00cb\u03d6\u0001\u0000\u0000\u0000\u00cd\u03df"+ + "\u0001\u0000\u0000\u0000\u00cf\u03e8\u0001\u0000\u0000\u0000\u00d1\u03f2"+ + "\u0001\u0000\u0000\u0000\u00d3\u0400\u0001\u0000\u0000\u0000\u00d5\u040c"+ + "\u0001\u0000\u0000\u0000\u00d7\u0418\u0001\u0000\u0000\u0000\u00d9\u0424"+ + "\u0001\u0000\u0000\u0000\u00db\u0430\u0001\u0000\u0000\u0000\u00dd\u043c"+ + "\u0001\u0000\u0000\u0000\u00df\u049f\u0001\u0000\u0000\u0000\u00e1\u04ea"+ + "\u0001\u0000\u0000\u0000\u00e3\u0582\u0001\u0000\u0000\u0000\u00e5\u0626"+ + "\u0001\u0000\u0000\u0000\u00e7\u0628\u0001\u0000\u0000\u0000\u00e9\u062d"+ + "\u0001\u0000\u0000\u0000\u00eb\u0632\u0001\u0000\u0000\u0000\u00ed\u0639"+ + "\u0001\u0000\u0000\u0000\u00ef\u063f\u0001\u0000\u0000\u0000\u00f1\u0645"+ + "\u0001\u0000\u0000\u0000\u00f3\u064c\u0001\u0000\u0000\u0000\u00f5\u0652"+ + "\u0001\u0000\u0000\u0000\u00f7\u0659\u0001\u0000\u0000\u0000\u00f9\u065f"+ + "\u0001\u0000\u0000\u0000\u00fb\u0666\u0001\u0000\u0000\u0000\u00fd\u066b"+ + "\u0001\u0000\u0000\u0000\u00ff\u0670\u0001\u0000\u0000\u0000\u0101\u0677"+ + "\u0001\u0000\u0000\u0000\u0103\u067e\u0001\u0000\u0000\u0000\u0105\u0685"+ + "\u0001\u0000\u0000\u0000\u0107\u068c\u0001\u0000\u0000\u0000\u0109\u0693"+ + "\u0001\u0000\u0000\u0000\u010b\u0699\u0001\u0000\u0000\u0000\u010d\u06a0"+ + "\u0001\u0000\u0000\u0000\u010f\u06a9\u0001\u0000\u0000\u0000\u0111\u06b0"+ + "\u0001\u0000\u0000\u0000\u0113\u06b4\u0001\u0000\u0000\u0000\u0115\u06c5"+ + "\u0001\u0000\u0000\u0000\u0117\u06d4\u0001\u0000\u0000\u0000\u0119\u06e6"+ + "\u0001\u0000\u0000\u0000\u011b\u06f4\u0001\u0000\u0000\u0000\u011d\u0710"+ + "\u0001\u0000\u0000\u0000\u011f\u072d\u0001\u0000\u0000\u0000\u0121\u0739"+ + "\u0001\u0000\u0000\u0000\u0123\u074b\u0001\u0000\u0000\u0000\u0125\u0751"+ + "\u0001\u0000\u0000\u0000\u0127\u0758\u0001\u0000\u0000\u0000\u0129\u075a"+ + "\u0001\u0000\u0000\u0000\u012b\u0760\u0001\u0000\u0000\u0000\u012d\u077b"+ + "\u0001\u0000\u0000\u0000\u012f\u077f\u0001\u0000\u0000\u0000\u0131\u0781"+ + "\u0001\u0000\u0000\u0000\u0133\u078b\u0001\u0000\u0000\u0000\u0135\u0795"+ + "\u0001\u0000\u0000\u0000\u0137\u0797\u0001\u0000\u0000\u0000\u0139\u0799"+ + "\u0001\u0000\u0000\u0000\u013b\u079b\u0001\u0000\u0000\u0000\u013d\u07a2"+ + "\u0001\u0000\u0000\u0000\u013f\u07a4\u0001\u0000\u0000\u0000\u0141\u07a7"+ + "\u0001\u0000\u0000\u0000\u0143\u07a9\u0001\u0000\u0000\u0000\u0145\u07f9"+ + "\u0001\u0000\u0000\u0000\u0147\u07fb\u0001\u0000\u0000\u0000\u0149\u0814"+ + "\u0001\u0000\u0000\u0000\u014b\u081d\u0001\u0000\u0000\u0000\u014d\u0821"+ + "\u0001\u0000\u0000\u0000\u014f\u0823\u0001\u0000\u0000\u0000\u0151\u0825"+ + "\u0001\u0000\u0000\u0000\u0153\u0827\u0001\u0000\u0000\u0000\u0155\u0829"+ + "\u0001\u0000\u0000\u0000\u0157\u082d\u0001\u0000\u0000\u0000\u0159\u0831"+ + "\u0001\u0000\u0000\u0000\u015b\u084e\u0001\u0000\u0000\u0000\u015d\u015e"+ + "\u0005(\u0000\u0000\u015e\u0002\u0001\u0000\u0000\u0000\u015f\u0160\u0005"+ + ")\u0000\u0000\u0160\u0004\u0001\u0000\u0000\u0000\u0161\u0162\u0003\u013d"+ + "\u009e\u0000\u0162\u0006\u0001\u0000\u0000\u0000\u0163\u0164\u0003\u013f"+ + "\u009f\u0000\u0164\b\u0001\u0000\u0000\u0000\u0165\u0166\u0003\u0145\u00a2"+ + "\u0000\u0166\n\u0001\u0000\u0000\u0000\u0167\u0168\u0003\u0147\u00a3\u0000"+ + "\u0168\f\u0001\u0000\u0000\u0000\u0169\u016a\u0003\u014d\u00a6\u0000\u016a"+ + "\u000e\u0001\u0000\u0000\u0000\u016b\u016c\u0003\u014d\u00a6\u0000\u016c"+ + "\u016d\u0005.\u0000\u0000\u016d\u016e\u0005c\u0000\u0000\u016e\u016f\u0005"+ + "o\u0000\u0000\u016f\u0170\u0005n\u0000\u0000\u0170\u0171\u0005s\u0000"+ + "\u0000\u0171\u0172\u0005t\u0000\u0000\u0172\u0010\u0001\u0000\u0000\u0000"+ + "\u0173\u0174\u0003\u014d\u00a6\u0000\u0174\u0175\u0005.\u0000\u0000\u0175"+ + "\u0176\u0005s\u0000\u0000\u0176\u0177\u0005y\u0000\u0000\u0177\u0178\u0005"+ + "m\u0000\u0000\u0178\u0179\u0005b\u0000\u0000\u0179\u017a\u0005o\u0000"+ + "\u0000\u017a\u017b\u0005l\u0000\u0000\u017b\u017c\u0005i\u0000\u0000\u017c"+ + "\u017d\u0005c\u0000\u0000\u017d\u0012\u0001\u0000\u0000\u0000\u017e\u017f"+ + "\u0005f\u0000\u0000\u017f\u0180\u0005u\u0000\u0000\u0180\u0181\u0005n"+ + "\u0000\u0000\u0181\u0182\u0005c\u0000\u0000\u0182\u0183\u0005r\u0000\u0000"+ + "\u0183\u0184\u0005e\u0000\u0000\u0184\u0185\u0005f\u0000\u0000\u0185\u0014"+ + "\u0001\u0000\u0000\u0000\u0186\u0187\u0005e\u0000\u0000\u0187\u0188\u0005"+ + "x\u0000\u0000\u0188\u0189\u0005t\u0000\u0000\u0189\u018a\u0005e\u0000"+ + "\u0000\u018a\u018b\u0005r\u0000\u0000\u018b\u018c\u0005n\u0000\u0000\u018c"+ + "\u018d\u0005r\u0000\u0000\u018d\u018e\u0005e\u0000\u0000\u018e\u018f\u0005"+ + "f\u0000\u0000\u018f\u0016\u0001\u0000\u0000\u0000\u0190\u0191\u0005m\u0000"+ + "\u0000\u0191\u0192\u0005u\u0000\u0000\u0192\u0193\u0005t\u0000\u0000\u0193"+ + "\u0018\u0001\u0000\u0000\u0000\u0194\u0195\u0005n\u0000\u0000\u0195\u0196"+ + "\u0005o\u0000\u0000\u0196\u0197\u0005p\u0000\u0000\u0197\u001a\u0001\u0000"+ + "\u0000\u0000\u0198\u0199\u0005s\u0000\u0000\u0199\u019a\u0005y\u0000\u0000"+ + "\u019a\u019b\u0005m\u0000\u0000\u019b\u019c\u0005_\u0000\u0000\u019c\u019d"+ + "\u0005a\u0000\u0000\u019d\u019e\u0005s\u0000\u0000\u019e\u019f\u0005s"+ + "\u0000\u0000\u019f\u01a0\u0005e\u0000\u0000\u01a0\u01a1\u0005r\u0000\u0000"+ + "\u01a1\u01a2\u0005t\u0000\u0000\u01a2\u001c\u0001\u0000\u0000\u0000\u01a3"+ + "\u01a4\u0005a\u0000\u0000\u01a4\u01a5\u0005l\u0000\u0000\u01a5\u01a6\u0005"+ + "l\u0000\u0000\u01a6\u01a7\u0005o\u0000\u0000\u01a7\u01a8\u0005c\u0000"+ + "\u0000\u01a8\u001e\u0001\u0000\u0000\u0000\u01a9\u01aa\u0005f\u0000\u0000"+ + "\u01aa\u01ab\u0005r\u0000\u0000\u01ab\u01ac\u0005e\u0000\u0000\u01ac\u01ad"+ + "\u0005e\u0000\u0000\u01ad \u0001\u0000\u0000\u0000\u01ae\u01af\u0005u"+ + "\u0000\u0000\u01af\u01b0\u0005n\u0000\u0000\u01b0\u01b1\u0005r\u0000\u0000"+ + "\u01b1\u01b2\u0005e\u0000\u0000\u01b2\u01b3\u0005a\u0000\u0000\u01b3\u01b4"+ + "\u0005c\u0000\u0000\u01b4\u01b5\u0005h\u0000\u0000\u01b5\u01b6\u0005a"+ + "\u0000\u0000\u01b6\u01b7\u0005b\u0000\u0000\u01b7\u01b8\u0005l\u0000\u0000"+ + "\u01b8\u01b9\u0005e\u0000\u0000\u01b9\"\u0001\u0000\u0000\u0000\u01ba"+ + "\u01bb\u0005d\u0000\u0000\u01bb\u01bc\u0005r\u0000\u0000\u01bc\u01bd\u0005"+ + "o\u0000\u0000\u01bd\u01be\u0005p\u0000\u0000\u01be$\u0001\u0000\u0000"+ + "\u0000\u01bf\u01c0\u0005b\u0000\u0000\u01c0\u01c1\u0005l\u0000\u0000\u01c1"+ + "\u01c2\u0005o\u0000\u0000\u01c2\u01c3\u0005c\u0000\u0000\u01c3\u01c4\u0005"+ + "k\u0000\u0000\u01c4&\u0001\u0000\u0000\u0000\u01c5\u01c6\u0005l\u0000"+ + "\u0000\u01c6\u01c7\u0005o\u0000\u0000\u01c7\u01c8\u0005o\u0000\u0000\u01c8"+ + "\u01c9\u0005p\u0000\u0000\u01c9(\u0001\u0000\u0000\u0000\u01ca\u01cb\u0005"+ + "f\u0000\u0000\u01cb\u01cc\u0005o\u0000\u0000\u01cc\u01cd\u0005r\u0000"+ + "\u0000\u01cd*\u0001\u0000\u0000\u0000\u01ce\u01cf\u0005|\u0000\u0000\u01cf"+ + ",\u0001\u0000\u0000\u0000\u01d0\u01d1\u0005e\u0000\u0000\u01d1\u01d2\u0005"+ + "n\u0000\u0000\u01d2\u01d3\u0005d\u0000\u0000\u01d3.\u0001\u0000\u0000"+ + "\u0000\u01d4\u01d5\u0005b\u0000\u0000\u01d5\u01d6\u0005r\u0000\u0000\u01d6"+ + "0\u0001\u0000\u0000\u0000\u01d7\u01d8\u0005b\u0000\u0000\u01d8\u01d9\u0005"+ + "r\u0000\u0000\u01d9\u01da\u0005_\u0000\u0000\u01da\u01db\u0005i\u0000"+ + "\u0000\u01db\u01dc\u0005f\u0000\u0000\u01dc2\u0001\u0000\u0000\u0000\u01dd"+ + "\u01de\u0005b\u0000\u0000\u01de\u01df\u0005r\u0000\u0000\u01df\u01e0\u0005"+ + "_\u0000\u0000\u01e0\u01e1\u0005t\u0000\u0000\u01e1\u01e2\u0005a\u0000"+ + "\u0000\u01e2\u01e3\u0005b\u0000\u0000\u01e3\u01e4\u0005l\u0000\u0000\u01e4"+ + "\u01e5\u0005e\u0000\u0000\u01e54\u0001\u0000\u0000\u0000\u01e6\u01e7\u0005"+ + "r\u0000\u0000\u01e7\u01e8\u0005e\u0000\u0000\u01e8\u01e9\u0005t\u0000"+ + "\u0000\u01e9\u01ea\u0005u\u0000\u0000\u01ea\u01eb\u0005r\u0000\u0000\u01eb"+ + "\u01ec\u0005n\u0000\u0000\u01ec6\u0001\u0000\u0000\u0000\u01ed\u01ee\u0005"+ + "i\u0000\u0000\u01ee\u01ef\u0005f\u0000\u0000\u01ef8\u0001\u0000\u0000"+ + "\u0000\u01f0\u01f1\u0005t\u0000\u0000\u01f1\u01f2\u0005h\u0000\u0000\u01f2"+ + "\u01f3\u0005e\u0000\u0000\u01f3\u01f4\u0005n\u0000\u0000\u01f4:\u0001"+ + "\u0000\u0000\u0000\u01f5\u01f6\u0005e\u0000\u0000\u01f6\u01f7\u0005l\u0000"+ + "\u0000\u01f7\u01f8\u0005s\u0000\u0000\u01f8\u01f9\u0005e\u0000\u0000\u01f9"+ + "<\u0001\u0000\u0000\u0000\u01fa\u01fb\u0005.\u0000\u0000\u01fb\u01fc\u0005"+ + "s\u0000\u0000\u01fc\u01fd\u0005e\u0000\u0000\u01fd\u01fe\u0005l\u0000"+ + "\u0000\u01fe\u01ff\u0005e\u0000\u0000\u01ff\u0200\u0005c\u0000\u0000\u0200"+ + "\u0201\u0005t\u0000\u0000\u0201>\u0001\u0000\u0000\u0000\u0202\u0203\u0005"+ + "c\u0000\u0000\u0203\u0204\u0005a\u0000\u0000\u0204\u0205\u0005l\u0000"+ + "\u0000\u0205\u0206\u0005l\u0000\u0000\u0206@\u0001\u0000\u0000\u0000\u0207"+ + "\u0208\u0005c\u0000\u0000\u0208\u0209\u0005a\u0000\u0000\u0209\u020a\u0005"+ + "l\u0000\u0000\u020a\u020b\u0005l\u0000\u0000\u020b\u020c\u0005_\u0000"+ + "\u0000\u020c\u020d\u0005i\u0000\u0000\u020d\u020e\u0005n\u0000\u0000\u020e"+ + "\u020f\u0005d\u0000\u0000\u020f\u0210\u0005i\u0000\u0000\u0210\u0211\u0005"+ + "r\u0000\u0000\u0211\u0212\u0005e\u0000\u0000\u0212\u0213\u0005c\u0000"+ + "\u0000\u0213\u0214\u0005t\u0000\u0000\u0214B\u0001\u0000\u0000\u0000\u0215"+ + "\u0216\u0005r\u0000\u0000\u0216\u0217\u0005e\u0000\u0000\u0217\u0218\u0005"+ + "t\u0000\u0000\u0218\u0219\u0005u\u0000\u0000\u0219\u021a\u0005r\u0000"+ + "\u0000\u021a\u021b\u0005n\u0000\u0000\u021b\u021c\u0005_\u0000\u0000\u021c"+ + "\u021d\u0005c\u0000\u0000\u021d\u021e\u0005a\u0000\u0000\u021e\u021f\u0005"+ + "l\u0000\u0000\u021f\u0220\u0005l\u0000\u0000\u0220D\u0001\u0000\u0000"+ + "\u0000\u0221\u0222\u0005r\u0000\u0000\u0222\u0223\u0005e\u0000\u0000\u0223"+ + "\u0224\u0005t\u0000\u0000\u0224\u0225\u0005u\u0000\u0000\u0225\u0226\u0005"+ + "r\u0000\u0000\u0226\u0227\u0005n\u0000\u0000\u0227\u0228\u0005_\u0000"+ + "\u0000\u0228\u0229\u0005c\u0000\u0000\u0229\u022a\u0005a\u0000\u0000\u022a"+ + "\u022b\u0005l\u0000\u0000\u022b\u022c\u0005l\u0000\u0000\u022c\u022d\u0005"+ + "_\u0000\u0000\u022d\u022e\u0005i\u0000\u0000\u022e\u022f\u0005n\u0000"+ + "\u0000\u022f\u0230\u0005d\u0000\u0000\u0230\u0231\u0005i\u0000\u0000\u0231"+ + "\u0232\u0005r\u0000\u0000\u0232\u0233\u0005e\u0000\u0000\u0233\u0234\u0005"+ + "c\u0000\u0000\u0234\u0235\u0005t\u0000\u0000\u0235F\u0001\u0000\u0000"+ + "\u0000\u0236\u0237\u0005l\u0000\u0000\u0237\u0238\u0005o\u0000\u0000\u0238"+ + "\u0239\u0005c\u0000\u0000\u0239\u023a\u0005a\u0000\u0000\u023a\u023b\u0005"+ + "l\u0000\u0000\u023b\u023c\u0005.\u0000\u0000\u023c\u023d\u0005g\u0000"+ + "\u0000\u023d\u023e\u0005e\u0000\u0000\u023e\u023f\u0005t\u0000\u0000\u023f"+ + "H\u0001\u0000\u0000\u0000\u0240\u0241\u0005l\u0000\u0000\u0241\u0242\u0005"+ + "o\u0000\u0000\u0242\u0243\u0005c\u0000\u0000\u0243\u0244\u0005a\u0000"+ + "\u0000\u0244\u0245\u0005l\u0000\u0000\u0245\u0246\u0005.\u0000\u0000\u0246"+ + "\u0247\u0005s\u0000\u0000\u0247\u0248\u0005e\u0000\u0000\u0248\u0249\u0005"+ + "t\u0000\u0000\u0249J\u0001\u0000\u0000\u0000\u024a\u024b\u0005l\u0000"+ + "\u0000\u024b\u024c\u0005o\u0000\u0000\u024c\u024d\u0005c\u0000\u0000\u024d"+ + "\u024e\u0005a\u0000\u0000\u024e\u024f\u0005l\u0000\u0000\u024f\u0250\u0005"+ + ".\u0000\u0000\u0250\u0251\u0005t\u0000\u0000\u0251\u0252\u0005e\u0000"+ + "\u0000\u0252\u0253\u0005e\u0000\u0000\u0253L\u0001\u0000\u0000\u0000\u0254"+ + "\u0255\u0005g\u0000\u0000\u0255\u0256\u0005l\u0000\u0000\u0256\u0257\u0005"+ + "o\u0000\u0000\u0257\u0258\u0005b\u0000\u0000\u0258\u0259\u0005a\u0000"+ + "\u0000\u0259\u025a\u0005l\u0000\u0000\u025a\u025b\u0005.\u0000\u0000\u025b"+ + "\u025c\u0005g\u0000\u0000\u025c\u025d\u0005e\u0000\u0000\u025d\u025e\u0005"+ + "t\u0000\u0000\u025eN\u0001\u0000\u0000\u0000\u025f\u0260\u0005g\u0000"+ + "\u0000\u0260\u0261\u0005l\u0000\u0000\u0261\u0262\u0005o\u0000\u0000\u0262"+ + "\u0263\u0005b\u0000\u0000\u0263\u0264\u0005a\u0000\u0000\u0264\u0265\u0005"+ + "l\u0000\u0000\u0265\u0266\u0005.\u0000\u0000\u0266\u0267\u0005s\u0000"+ + "\u0000\u0267\u0268\u0005e\u0000\u0000\u0268\u0269\u0005t\u0000\u0000\u0269"+ + "P\u0001\u0000\u0000\u0000\u026a\u026b\u0005.\u0000\u0000\u026b\u026c\u0005"+ + "l\u0000\u0000\u026c\u026d\u0005o\u0000\u0000\u026d\u026e\u0005a\u0000"+ + "\u0000\u026e\u026f\u0005d\u0000\u0000\u026f\u0274\u0001\u0000\u0000\u0000"+ + "\u0270\u0271\u0003].\u0000\u0271\u0272\u0003U*\u0000\u0272\u0273\u0003"+ + "[-\u0000\u0273\u0275\u0001\u0000\u0000\u0000\u0274\u0270\u0001\u0000\u0000"+ + "\u0000\u0274\u0275\u0001\u0000\u0000\u0000\u0275R\u0001\u0000\u0000\u0000"+ + "\u0276\u0277\u0005.\u0000\u0000\u0277\u0278\u0005s\u0000\u0000\u0278\u0279"+ + "\u0005t\u0000\u0000\u0279\u027a\u0005o\u0000\u0000\u027a\u027b\u0005r"+ + "\u0000\u0000\u027b\u027c\u0005e\u0000\u0000\u027c\u027e\u0001\u0000\u0000"+ + "\u0000\u027d\u027f\u0003].\u0000\u027e\u027d\u0001\u0000\u0000\u0000\u027e"+ + "\u027f\u0001\u0000\u0000\u0000\u027fT\u0001\u0000\u0000\u0000\u0280\u0281"+ + "\u0005_\u0000\u0000\u0281V\u0001\u0000\u0000\u0000\u0282\u0283\u0005o"+ + "\u0000\u0000\u0283\u0284\u0005f\u0000\u0000\u0284\u0285\u0005f\u0000\u0000"+ + "\u0285\u0286\u0005s\u0000\u0000\u0286\u0287\u0005e\u0000\u0000\u0287\u0288"+ + "\u0005t\u0000\u0000\u0288\u0289\u0005=\u0000\u0000\u0289X\u0001\u0000"+ + "\u0000\u0000\u028a\u028b\u0005a\u0000\u0000\u028b\u028c\u0005l\u0000\u0000"+ + "\u028c\u028d\u0005i\u0000\u0000\u028d\u028e\u0005g\u0000\u0000\u028e\u028f"+ + "\u0005n\u0000\u0000\u028f\u0290\u0005=\u0000\u0000\u0290Z\u0001\u0000"+ + "\u0000\u0000\u0291\u0292\u0007\u0000\u0000\u0000\u0292\\\u0001\u0000\u0000"+ + "\u0000\u0293\u029b\u00058\u0000\u0000\u0294\u0295\u00051\u0000\u0000\u0295"+ + "\u029b\u00056\u0000\u0000\u0296\u0297\u00053\u0000\u0000\u0297\u029b\u0005"+ + "2\u0000\u0000\u0298\u0299\u00056\u0000\u0000\u0299\u029b\u00054\u0000"+ + "\u0000\u029a\u0293\u0001\u0000\u0000\u0000\u029a\u0294\u0001\u0000\u0000"+ + "\u0000\u029a\u0296\u0001\u0000\u0000\u0000\u029a\u0298\u0001\u0000\u0000"+ + "\u0000\u029b^\u0001\u0000\u0000\u0000\u029c\u029d\u0005i\u0000\u0000\u029d"+ + "\u029e\u00053\u0000\u0000\u029e\u029f\u00052\u0000\u0000\u029f`\u0001"+ + "\u0000\u0000\u0000\u02a0\u02a1\u0005i\u0000\u0000\u02a1\u02a2\u00056\u0000"+ + "\u0000\u02a2\u02a3\u00054\u0000\u0000\u02a3b\u0001\u0000\u0000\u0000\u02a4"+ + "\u02a5\u0005f\u0000\u0000\u02a5\u02a6\u00053\u0000\u0000\u02a6\u02a7\u0005"+ + "2\u0000\u0000\u02a7d\u0001\u0000\u0000\u0000\u02a8\u02a9\u0005f\u0000"+ + "\u0000\u02a9\u02aa\u00056\u0000\u0000\u02aa\u02ab\u00054\u0000\u0000\u02ab"+ + "f\u0001\u0000\u0000\u0000\u02ac\u02af\u0003_/\u0000\u02ad\u02af\u0003"+ + "a0\u0000\u02ae\u02ac\u0001\u0000\u0000\u0000\u02ae\u02ad\u0001\u0000\u0000"+ + "\u0000\u02afh\u0001\u0000\u0000\u0000\u02b0\u02b3\u0003c1\u0000\u02b1"+ + "\u02b3\u0003e2\u0000\u02b2\u02b0\u0001\u0000\u0000\u0000\u02b2\u02b1\u0001"+ + "\u0000\u0000\u0000\u02b3j\u0001\u0000\u0000\u0000\u02b4\u02b5\u0005.\u0000"+ + "\u0000\u02b5\u02b6\u0005e\u0000\u0000\u02b6\u02b7\u0005q\u0000\u0000\u02b7"+ + "\u02b8\u0005z\u0000\u0000\u02b8l\u0001\u0000\u0000\u0000\u02b9\u02ba\u0005"+ + ".\u0000\u0000\u02ba\u02bb\u0005e\u0000\u0000\u02bb\u02bc\u0005q\u0000"+ + "\u0000\u02bcn\u0001\u0000\u0000\u0000\u02bd\u02be\u0005.\u0000\u0000\u02be"+ + "\u02bf\u0005n\u0000\u0000\u02bf\u02c0\u0005e\u0000\u0000\u02c0p\u0001"+ + "\u0000\u0000\u0000\u02c1\u02c2\u0005.\u0000\u0000\u02c2\u02c3\u0005l\u0000"+ + "\u0000\u02c3\u02c4\u0005t\u0000\u0000\u02c4r\u0001\u0000\u0000\u0000\u02c5"+ + "\u02c6\u0005.\u0000\u0000\u02c6\u02c7\u0005l\u0000\u0000\u02c7\u02c8\u0005"+ + "t\u0000\u0000\u02c8\u02c9\u0005_\u0000\u0000\u02c9\u02ca\u0005s\u0000"+ + "\u0000\u02cat\u0001\u0000\u0000\u0000\u02cb\u02cc\u0005.\u0000\u0000\u02cc"+ + "\u02cd\u0005l\u0000\u0000\u02cd\u02ce\u0005t\u0000\u0000\u02ce\u02cf\u0005"+ + "_\u0000\u0000\u02cf\u02d0\u0005u\u0000\u0000\u02d0v\u0001\u0000\u0000"+ + "\u0000\u02d1\u02d2\u0005.\u0000\u0000\u02d2\u02d3\u0005l\u0000\u0000\u02d3"+ + "\u02d4\u0005e\u0000\u0000\u02d4x\u0001\u0000\u0000\u0000\u02d5\u02d6\u0005"+ + ".\u0000\u0000\u02d6\u02d7\u0005l\u0000\u0000\u02d7\u02d8\u0005e\u0000"+ + "\u0000\u02d8\u02d9\u0005_\u0000\u0000\u02d9\u02da\u0005s\u0000\u0000\u02da"+ + "z\u0001\u0000\u0000\u0000\u02db\u02dc\u0005.\u0000\u0000\u02dc\u02dd\u0005"+ + "l\u0000\u0000\u02dd\u02de\u0005e\u0000\u0000\u02de\u02df\u0005_\u0000"+ + "\u0000\u02df\u02e0\u0005u\u0000\u0000\u02e0|\u0001\u0000\u0000\u0000\u02e1"+ + "\u02e2\u0005.\u0000\u0000\u02e2\u02e3\u0005g\u0000\u0000\u02e3\u02e4\u0005"+ + "t\u0000\u0000\u02e4~\u0001\u0000\u0000\u0000\u02e5\u02e6\u0005.\u0000"+ + "\u0000\u02e6\u02e7\u0005g\u0000\u0000\u02e7\u02e8\u0005t\u0000\u0000\u02e8"+ + "\u02e9\u0005_\u0000\u0000\u02e9\u02ea\u0005s\u0000\u0000\u02ea\u0080\u0001"+ + "\u0000\u0000\u0000\u02eb\u02ec\u0005.\u0000\u0000\u02ec\u02ed\u0005g\u0000"+ + "\u0000\u02ed\u02ee\u0005t\u0000\u0000\u02ee\u02ef\u0005_\u0000\u0000\u02ef"+ + "\u02f0\u0005u\u0000\u0000\u02f0\u0082\u0001\u0000\u0000\u0000\u02f1\u02f2"+ + "\u0005.\u0000\u0000\u02f2\u02f3\u0005g\u0000\u0000\u02f3\u02f4\u0005e"+ + "\u0000\u0000\u02f4\u0084\u0001\u0000\u0000\u0000\u02f5\u02f6\u0005.\u0000"+ + "\u0000\u02f6\u02f7\u0005g\u0000\u0000\u02f7\u02f8\u0005e\u0000\u0000\u02f8"+ + "\u02f9\u0005_\u0000\u0000\u02f9\u02fa\u0005s\u0000\u0000\u02fa\u0086\u0001"+ + "\u0000\u0000\u0000\u02fb\u02fc\u0005.\u0000\u0000\u02fc\u02fd\u0005g\u0000"+ + "\u0000\u02fd\u02fe\u0005e\u0000\u0000\u02fe\u02ff\u0005_\u0000\u0000\u02ff"+ + "\u0300\u0005u\u0000\u0000\u0300\u0088\u0001\u0000\u0000\u0000\u0301\u0302"+ + "\u0005.\u0000\u0000\u0302\u0303\u0005c\u0000\u0000\u0303\u0304\u0005l"+ + "\u0000\u0000\u0304\u0305\u0005z\u0000\u0000\u0305\u008a\u0001\u0000\u0000"+ + "\u0000\u0306\u0307\u0005.\u0000\u0000\u0307\u0308\u0005c\u0000\u0000\u0308"+ + "\u0309\u0005t\u0000\u0000\u0309\u030a\u0005z\u0000\u0000\u030a\u008c\u0001"+ + "\u0000\u0000\u0000\u030b\u030c\u0005.\u0000\u0000\u030c\u030d\u0005p\u0000"+ + "\u0000\u030d\u030e\u0005o\u0000\u0000\u030e\u030f\u0005p\u0000\u0000\u030f"+ + "\u0310\u0005c\u0000\u0000\u0310\u0311\u0005n\u0000\u0000\u0311\u0312\u0005"+ + "t\u0000\u0000\u0312\u008e\u0001\u0000\u0000\u0000\u0313\u0314\u0005.\u0000"+ + "\u0000\u0314\u0315\u0005n\u0000\u0000\u0315\u0316\u0005e\u0000\u0000\u0316"+ + "\u0317\u0005g\u0000\u0000\u0317\u0090\u0001\u0000\u0000\u0000\u0318\u0319"+ + "\u0005.\u0000\u0000\u0319\u031a\u0005a\u0000\u0000\u031a\u031b\u0005b"+ + "\u0000\u0000\u031b\u031c\u0005s\u0000\u0000\u031c\u0092\u0001\u0000\u0000"+ + "\u0000\u031d\u031e\u0005.\u0000\u0000\u031e\u031f\u0005s\u0000\u0000\u031f"+ + "\u0320\u0005q\u0000\u0000\u0320\u0321\u0005r\u0000\u0000\u0321\u0322\u0005"+ + "t\u0000\u0000\u0322\u0094\u0001\u0000\u0000\u0000\u0323\u0324\u0005.\u0000"+ + "\u0000\u0324\u0325\u0005c\u0000\u0000\u0325\u0326\u0005e\u0000\u0000\u0326"+ + "\u0327\u0005i\u0000\u0000\u0327\u0328\u0005l\u0000\u0000\u0328\u0096\u0001"+ + "\u0000\u0000\u0000\u0329\u032a\u0005.\u0000\u0000\u032a\u032b\u0005f\u0000"+ + "\u0000\u032b\u032c\u0005l\u0000\u0000\u032c\u032d\u0005o\u0000\u0000\u032d"+ + "\u032e\u0005o\u0000\u0000\u032e\u032f\u0005r\u0000\u0000\u032f\u0098\u0001"+ + "\u0000\u0000\u0000\u0330\u0331\u0005.\u0000\u0000\u0331\u0332\u0005t\u0000"+ + "\u0000\u0332\u0333\u0005r\u0000\u0000\u0333\u0334\u0005u\u0000\u0000\u0334"+ + "\u0335\u0005n\u0000\u0000\u0335\u0336\u0005c\u0000\u0000\u0336\u009a\u0001"+ + "\u0000\u0000\u0000\u0337\u0338\u0005.\u0000\u0000\u0338\u0339\u0005n\u0000"+ + "\u0000\u0339\u033a\u0005e\u0000\u0000\u033a\u033b\u0005a\u0000\u0000\u033b"+ + "\u033c\u0005r\u0000\u0000\u033c\u033d\u0005e\u0000\u0000\u033d\u033e\u0005"+ + "s\u0000\u0000\u033e\u033f\u0005t\u0000\u0000\u033f\u009c\u0001\u0000\u0000"+ + "\u0000\u0340\u0341\u0005.\u0000\u0000\u0341\u0342\u0005a\u0000\u0000\u0342"+ + "\u0343\u0005d\u0000\u0000\u0343\u0344\u0005d\u0000\u0000\u0344\u009e\u0001"+ + "\u0000\u0000\u0000\u0345\u0346\u0005.\u0000\u0000\u0346\u0347\u0005s\u0000"+ + "\u0000\u0347\u0348\u0005u\u0000\u0000\u0348\u0349\u0005b\u0000\u0000\u0349"+ + "\u00a0\u0001\u0000\u0000\u0000\u034a\u034b\u0005.\u0000\u0000\u034b\u034c"+ + "\u0005m\u0000\u0000\u034c\u034d\u0005u\u0000\u0000\u034d\u034e\u0005l"+ + "\u0000\u0000\u034e\u00a2\u0001\u0000\u0000\u0000\u034f\u0350\u0005.\u0000"+ + "\u0000\u0350\u0351\u0005d\u0000\u0000\u0351\u0352\u0005i\u0000\u0000\u0352"+ + "\u0353\u0005v\u0000\u0000\u0353\u00a4\u0001\u0000\u0000\u0000\u0354\u0355"+ + "\u0005.\u0000\u0000\u0355\u0356\u0005d\u0000\u0000\u0356\u0357\u0005i"+ + "\u0000\u0000\u0357\u0358\u0005v\u0000\u0000\u0358\u0359\u0005_\u0000\u0000"+ + "\u0359\u035a\u0005s\u0000\u0000\u035a\u00a6\u0001\u0000\u0000\u0000\u035b"+ + "\u035c\u0005.\u0000\u0000\u035c\u035d\u0005d\u0000\u0000\u035d\u035e\u0005"+ + "i\u0000\u0000\u035e\u035f\u0005v\u0000\u0000\u035f\u0360\u0005_\u0000"+ + "\u0000\u0360\u0361\u0005u\u0000\u0000\u0361\u00a8\u0001\u0000\u0000\u0000"+ + "\u0362\u0363\u0005.\u0000\u0000\u0363\u0364\u0005r\u0000\u0000\u0364\u0365"+ + "\u0005e\u0000\u0000\u0365\u0366\u0005m\u0000\u0000\u0366\u0367\u0005_"+ + "\u0000\u0000\u0367\u0368\u0005s\u0000\u0000\u0368\u00aa\u0001\u0000\u0000"+ + "\u0000\u0369\u036a\u0005.\u0000\u0000\u036a\u036b\u0005r\u0000\u0000\u036b"+ + "\u036c\u0005e\u0000\u0000\u036c\u036d\u0005m\u0000\u0000\u036d\u036e\u0005"+ + "_\u0000\u0000\u036e\u036f\u0005u\u0000\u0000\u036f\u00ac\u0001\u0000\u0000"+ + "\u0000\u0370\u0371\u0005.\u0000\u0000\u0371\u0372\u0005a\u0000\u0000\u0372"+ + "\u0373\u0005n\u0000\u0000\u0373\u0374\u0005d\u0000\u0000\u0374\u00ae\u0001"+ + "\u0000\u0000\u0000\u0375\u0376\u0005.\u0000\u0000\u0376\u0377\u0005o\u0000"+ + "\u0000\u0377\u0378\u0005r\u0000\u0000\u0378\u00b0\u0001\u0000\u0000\u0000"+ + "\u0379\u037a\u0005.\u0000\u0000\u037a\u037b\u0005x\u0000\u0000\u037b\u037c"+ + "\u0005o\u0000\u0000\u037c\u037d\u0005r\u0000\u0000\u037d\u00b2\u0001\u0000"+ + "\u0000\u0000\u037e\u037f\u0005.\u0000\u0000\u037f\u0380\u0005s\u0000\u0000"+ + "\u0380\u0381\u0005h\u0000\u0000\u0381\u0382\u0005l\u0000\u0000\u0382\u00b4"+ + "\u0001\u0000\u0000\u0000\u0383\u0384\u0005.\u0000\u0000\u0384\u0385\u0005"+ + "s\u0000\u0000\u0385\u0386\u0005h\u0000\u0000\u0386\u0387\u0005r\u0000"+ + "\u0000\u0387\u0388\u0005_\u0000\u0000\u0388\u0389\u0005s\u0000\u0000\u0389"+ + "\u00b6\u0001\u0000\u0000\u0000\u038a\u038b\u0005.\u0000\u0000\u038b\u038c"+ + "\u0005s\u0000\u0000\u038c\u038d\u0005h\u0000\u0000\u038d\u038e\u0005r"+ + "\u0000\u0000\u038e\u038f\u0005_\u0000\u0000\u038f\u0390\u0005u\u0000\u0000"+ + "\u0390\u00b8\u0001\u0000\u0000\u0000\u0391\u0392\u0005.\u0000\u0000\u0392"+ + "\u0393\u0005r\u0000\u0000\u0393\u0394\u0005o\u0000\u0000\u0394\u0395\u0005"+ + "t\u0000\u0000\u0395\u0396\u0005l\u0000\u0000\u0396\u00ba\u0001\u0000\u0000"+ + "\u0000\u0397\u0398\u0005.\u0000\u0000\u0398\u0399\u0005r\u0000\u0000\u0399"+ + "\u039a\u0005o\u0000\u0000\u039a\u039b\u0005t\u0000\u0000\u039b\u039c\u0005"+ + "r\u0000\u0000\u039c\u00bc\u0001\u0000\u0000\u0000\u039d\u039e\u0005.\u0000"+ + "\u0000\u039e\u039f\u0005m\u0000\u0000\u039f\u03a0\u0005i\u0000\u0000\u03a0"+ + "\u03a1\u0005n\u0000\u0000\u03a1\u00be\u0001\u0000\u0000\u0000\u03a2\u03a3"+ + "\u0005.\u0000\u0000\u03a3\u03a4\u0005m\u0000\u0000\u03a4\u03a5\u0005a"+ + "\u0000\u0000\u03a5\u03a6\u0005x\u0000\u0000\u03a6\u00c0\u0001\u0000\u0000"+ + "\u0000\u03a7\u03a8\u0005.\u0000\u0000\u03a8\u03a9\u0005c\u0000\u0000\u03a9"+ + "\u03aa\u0005o\u0000\u0000\u03aa\u03ab\u0005p\u0000\u0000\u03ab\u03ac\u0005"+ + "y\u0000\u0000\u03ac\u03ad\u0005s\u0000\u0000\u03ad\u03ae\u0005i\u0000"+ + "\u0000\u03ae\u03af\u0005g\u0000\u0000\u03af\u03b0\u0005n\u0000\u0000\u03b0"+ + "\u00c2\u0001\u0000\u0000\u0000\u03b1\u03b2\u0005.\u0000\u0000\u03b2\u03b3"+ + "\u0005w\u0000\u0000\u03b3\u03b4\u0005r\u0000\u0000\u03b4\u03b5\u0005a"+ + "\u0000\u0000\u03b5\u03b6\u0005p\u0000\u0000\u03b6\u03b7\u0005_\u0000\u0000"+ + "\u03b7\u00c4\u0001\u0000\u0000\u0000\u03b8\u03b9\u0005.\u0000\u0000\u03b9"+ + "\u03ba\u0005t\u0000\u0000\u03ba\u03bb\u0005r\u0000\u0000\u03bb\u03bc\u0005"+ + "u\u0000\u0000\u03bc\u03bd\u0005n\u0000\u0000\u03bd\u03be\u0005c\u0000"+ + "\u0000\u03be\u03bf\u0005_\u0000\u0000\u03bf\u00c6\u0001\u0000\u0000\u0000"+ + "\u03c0\u03c1\u0005.\u0000\u0000\u03c1\u03c2\u0005t\u0000\u0000\u03c2\u03c3"+ + "\u0005r\u0000\u0000\u03c3\u03c4\u0005u\u0000\u0000\u03c4\u03c5\u0005n"+ + "\u0000\u0000\u03c5\u03c6\u0005c\u0000\u0000\u03c6\u03c7\u0005_\u0000\u0000"+ + "\u03c7\u03c8\u0005s\u0000\u0000\u03c8\u03c9\u0005a\u0000\u0000\u03c9\u03ca"+ + "\u0005t\u0000\u0000\u03ca\u03cb\u0005_\u0000\u0000\u03cb\u00c8\u0001\u0000"+ + "\u0000\u0000\u03cc\u03cd\u0005.\u0000\u0000\u03cd\u03ce\u0005c\u0000\u0000"+ + "\u03ce\u03cf\u0005o\u0000\u0000\u03cf\u03d0\u0005n\u0000\u0000\u03d0\u03d1"+ + "\u0005v\u0000\u0000\u03d1\u03d2\u0005e\u0000\u0000\u03d2\u03d3\u0005r"+ + "\u0000\u0000\u03d3\u03d4\u0005t\u0000\u0000\u03d4\u03d5\u0005_\u0000\u0000"+ + "\u03d5\u00ca\u0001\u0000\u0000\u0000\u03d6\u03d7\u0005.\u0000\u0000\u03d7"+ + "\u03d8\u0005e\u0000\u0000\u03d8\u03d9\u0005x\u0000\u0000\u03d9\u03da\u0005"+ + "t\u0000\u0000\u03da\u03db\u0005e\u0000\u0000\u03db\u03dc\u0005n\u0000"+ + "\u0000\u03dc\u03dd\u0005d\u0000\u0000\u03dd\u03de\u0005_\u0000\u0000\u03de"+ + "\u00cc\u0001\u0000\u0000\u0000\u03df\u03e0\u0005.\u0000\u0000\u03e0\u03e1"+ + "\u0005d\u0000\u0000\u03e1\u03e2\u0005e\u0000\u0000\u03e2\u03e3\u0005m"+ + "\u0000\u0000\u03e3\u03e4\u0005o\u0000\u0000\u03e4\u03e5\u0005t\u0000\u0000"+ + "\u03e5\u03e6\u0005e\u0000\u0000\u03e6\u03e7\u0005_\u0000\u0000\u03e7\u00ce"+ + "\u0001\u0000\u0000\u0000\u03e8\u03e9\u0005.\u0000\u0000\u03e9\u03ea\u0005"+ + "p\u0000\u0000\u03ea\u03eb\u0005r\u0000\u0000\u03eb\u03ec\u0005o\u0000"+ + "\u0000\u03ec\u03ed\u0005m\u0000\u0000\u03ed\u03ee\u0005o\u0000\u0000\u03ee"+ + "\u03ef\u0005t\u0000\u0000\u03ef\u03f0\u0005e\u0000\u0000\u03f0\u03f1\u0005"+ + "_\u0000\u0000\u03f1\u00d0\u0001\u0000\u0000\u0000\u03f2\u03f3\u0005.\u0000"+ + "\u0000\u03f3\u03f4\u0005r\u0000\u0000\u03f4\u03f5\u0005e\u0000\u0000\u03f5"+ + "\u03f6\u0005i\u0000\u0000\u03f6\u03f7\u0005n\u0000\u0000\u03f7\u03f8\u0005"+ + "t\u0000\u0000\u03f8\u03f9\u0005e\u0000\u0000\u03f9\u03fa\u0005r\u0000"+ + "\u0000\u03fa\u03fb\u0005p\u0000\u0000\u03fb\u03fc\u0005r\u0000\u0000\u03fc"+ + "\u03fd\u0005e\u0000\u0000\u03fd\u03fe\u0005t\u0000\u0000\u03fe\u03ff\u0005"+ + "_\u0000\u0000\u03ff\u00d2\u0001\u0000\u0000\u0000\u0400\u0401\u0005m\u0000"+ + "\u0000\u0401\u0402\u0005e\u0000\u0000\u0402\u0403\u0005m\u0000\u0000\u0403"+ + "\u0404\u0005o\u0000\u0000\u0404\u0405\u0005r\u0000\u0000\u0405\u0406\u0005"+ + "y\u0000\u0000\u0406\u0407\u0005.\u0000\u0000\u0407\u0408\u0005s\u0000"+ + "\u0000\u0408\u0409\u0005i\u0000\u0000\u0409\u040a\u0005z\u0000\u0000\u040a"+ + "\u040b\u0005e\u0000\u0000\u040b\u00d4\u0001\u0000\u0000\u0000\u040c\u040d"+ + "\u0005m\u0000\u0000\u040d\u040e\u0005e\u0000\u0000\u040e\u040f\u0005m"+ + "\u0000\u0000\u040f\u0410\u0005o\u0000\u0000\u0410\u0411\u0005r\u0000\u0000"+ + "\u0411\u0412\u0005y\u0000\u0000\u0412\u0413\u0005.\u0000\u0000\u0413\u0414"+ + "\u0005g\u0000\u0000\u0414\u0415\u0005r\u0000\u0000\u0415\u0416\u0005o"+ + "\u0000\u0000\u0416\u0417\u0005w\u0000\u0000\u0417\u00d6\u0001\u0000\u0000"+ + "\u0000\u0418\u0419\u0005m\u0000\u0000\u0419\u041a\u0005e\u0000\u0000\u041a"+ + "\u041b\u0005m\u0000\u0000\u041b\u041c\u0005o\u0000\u0000\u041c\u041d\u0005"+ + "r\u0000\u0000\u041d\u041e\u0005y\u0000\u0000\u041e\u041f\u0005.\u0000"+ + "\u0000\u041f\u0420\u0005f\u0000\u0000\u0420\u0421\u0005i\u0000\u0000\u0421"+ + "\u0422\u0005l\u0000\u0000\u0422\u0423\u0005l\u0000\u0000\u0423\u00d8\u0001"+ + "\u0000\u0000\u0000\u0424\u0425\u0005m\u0000\u0000\u0425\u0426\u0005e\u0000"+ + "\u0000\u0426\u0427\u0005m\u0000\u0000\u0427\u0428\u0005o\u0000\u0000\u0428"+ + "\u0429\u0005r\u0000\u0000\u0429\u042a\u0005y\u0000\u0000\u042a\u042b\u0005"+ + ".\u0000\u0000\u042b\u042c\u0005c\u0000\u0000\u042c\u042d\u0005o\u0000"+ + "\u0000\u042d\u042e\u0005p\u0000\u0000\u042e\u042f\u0005y\u0000\u0000\u042f"+ + "\u00da\u0001\u0000\u0000\u0000\u0430\u0431\u0005m\u0000\u0000\u0431\u0432"+ + "\u0005e\u0000\u0000\u0432\u0433\u0005m\u0000\u0000\u0433\u0434\u0005o"+ + "\u0000\u0000\u0434\u0435\u0005r\u0000\u0000\u0435\u0436\u0005y\u0000\u0000"+ + "\u0436\u0437\u0005.\u0000\u0000\u0437\u0438\u0005i\u0000\u0000\u0438\u0439"+ + "\u0005n\u0000\u0000\u0439\u043a\u0005i\u0000\u0000\u043a\u043b\u0005t"+ + "\u0000\u0000\u043b\u00dc\u0001\u0000\u0000\u0000\u043c\u043d\u0003g3\u0000"+ + "\u043d\u043e\u0003k5\u0000\u043e\u00de\u0001\u0000\u0000\u0000\u043f\u0440"+ + "\u0003g3\u0000\u0440\u0441\u0005.\u0000\u0000\u0441\u0442\u0005e\u0000"+ + "\u0000\u0442\u0443\u0005q\u0000\u0000\u0443\u04a0\u0001\u0000\u0000\u0000"+ + "\u0444\u0445\u0003g3\u0000\u0445\u0446\u0005.\u0000\u0000\u0446\u0447"+ + "\u0005n\u0000\u0000\u0447\u0448\u0005e\u0000\u0000\u0448\u04a0\u0001\u0000"+ + "\u0000\u0000\u0449\u044a\u0003g3\u0000\u044a\u044b\u0005.\u0000\u0000"+ + "\u044b\u044c\u0005l\u0000\u0000\u044c\u044d\u0005t\u0000\u0000\u044d\u044e"+ + "\u0005_\u0000\u0000\u044e\u044f\u0005s\u0000\u0000\u044f\u04a0\u0001\u0000"+ + "\u0000\u0000\u0450\u0451\u0003g3\u0000\u0451\u0452\u0005.\u0000\u0000"+ + "\u0452\u0453\u0005l\u0000\u0000\u0453\u0454\u0005t\u0000\u0000\u0454\u0455"+ + "\u0005_\u0000\u0000\u0455\u0456\u0005u\u0000\u0000\u0456\u04a0\u0001\u0000"+ + "\u0000\u0000\u0457\u0458\u0003g3\u0000\u0458\u0459\u0005.\u0000\u0000"+ + "\u0459\u045a\u0005l\u0000\u0000\u045a\u045b\u0005e\u0000\u0000\u045b\u045c"+ + "\u0005_\u0000\u0000\u045c\u045d\u0005s\u0000\u0000\u045d\u04a0\u0001\u0000"+ + "\u0000\u0000\u045e\u045f\u0003g3\u0000\u045f\u0460\u0005.\u0000\u0000"+ + "\u0460\u0461\u0005l\u0000\u0000\u0461\u0462\u0005e\u0000\u0000\u0462\u0463"+ + "\u0005_\u0000\u0000\u0463\u0464\u0005u\u0000\u0000\u0464\u04a0\u0001\u0000"+ + "\u0000\u0000\u0465\u0466\u0003g3\u0000\u0466\u0467\u0005.\u0000\u0000"+ + "\u0467\u0468\u0005g\u0000\u0000\u0468\u0469\u0005t\u0000\u0000\u0469\u046a"+ + "\u0005_\u0000\u0000\u046a\u046b\u0005s\u0000\u0000\u046b\u04a0\u0001\u0000"+ + "\u0000\u0000\u046c\u046d\u0003g3\u0000\u046d\u046e\u0005.\u0000\u0000"+ + "\u046e\u046f\u0005g\u0000\u0000\u046f\u0470\u0005t\u0000\u0000\u0470\u0471"+ + "\u0005_\u0000\u0000\u0471\u0472\u0005u\u0000\u0000\u0472\u04a0\u0001\u0000"+ + "\u0000\u0000\u0473\u0474\u0003g3\u0000\u0474\u0475\u0005.\u0000\u0000"+ + "\u0475\u0476\u0005g\u0000\u0000\u0476\u0477\u0005e\u0000\u0000\u0477\u0478"+ + "\u0005_\u0000\u0000\u0478\u0479\u0005s\u0000\u0000\u0479\u04a0\u0001\u0000"+ + "\u0000\u0000\u047a\u047b\u0003g3\u0000\u047b\u047c\u0005.\u0000\u0000"+ + "\u047c\u047d\u0005g\u0000\u0000\u047d\u047e\u0005e\u0000\u0000\u047e\u047f"+ + "\u0005_\u0000\u0000\u047f\u0480\u0005u\u0000\u0000\u0480\u04a0\u0001\u0000"+ + "\u0000\u0000\u0481\u0482\u0003i4\u0000\u0482\u0483\u0005.\u0000\u0000"+ + "\u0483\u0484\u0005e\u0000\u0000\u0484\u0485\u0005q\u0000\u0000\u0485\u04a0"+ + "\u0001\u0000\u0000\u0000\u0486\u0487\u0003i4\u0000\u0487\u0488\u0005."+ + "\u0000\u0000\u0488\u0489\u0005n\u0000\u0000\u0489\u048a\u0005e\u0000\u0000"+ + "\u048a\u04a0\u0001\u0000\u0000\u0000\u048b\u048c\u0003i4\u0000\u048c\u048d"+ + "\u0005.\u0000\u0000\u048d\u048e\u0005l\u0000\u0000\u048e\u048f\u0005t"+ + "\u0000\u0000\u048f\u04a0\u0001\u0000\u0000\u0000\u0490\u0491\u0003i4\u0000"+ + "\u0491\u0492\u0005.\u0000\u0000\u0492\u0493\u0005l\u0000\u0000\u0493\u0494"+ + "\u0005e\u0000\u0000\u0494\u04a0\u0001\u0000\u0000\u0000\u0495\u0496\u0003"+ + "i4\u0000\u0496\u0497\u0005.\u0000\u0000\u0497\u0498\u0005g\u0000\u0000"+ + "\u0498\u0499\u0005t\u0000\u0000\u0499\u04a0\u0001\u0000\u0000\u0000\u049a"+ + "\u049b\u0003i4\u0000\u049b\u049c\u0005.\u0000\u0000\u049c\u049d\u0005"+ + "g\u0000\u0000\u049d\u049e\u0005e\u0000\u0000\u049e\u04a0\u0001\u0000\u0000"+ + "\u0000\u049f\u043f\u0001\u0000\u0000\u0000\u049f\u0444\u0001\u0000\u0000"+ + "\u0000\u049f\u0449\u0001\u0000\u0000\u0000\u049f\u0450\u0001\u0000\u0000"+ + "\u0000\u049f\u0457\u0001\u0000\u0000\u0000\u049f\u045e\u0001\u0000\u0000"+ + "\u0000\u049f\u0465\u0001\u0000\u0000\u0000\u049f\u046c\u0001\u0000\u0000"+ + "\u0000\u049f\u0473\u0001\u0000\u0000\u0000\u049f\u047a\u0001\u0000\u0000"+ + "\u0000\u049f\u0481\u0001\u0000\u0000\u0000\u049f\u0486\u0001\u0000\u0000"+ + "\u0000\u049f\u048b\u0001\u0000\u0000\u0000\u049f\u0490\u0001\u0000\u0000"+ + "\u0000\u049f\u0495\u0001\u0000\u0000\u0000\u049f\u049a\u0001\u0000\u0000"+ + "\u0000\u04a0\u00e0\u0001\u0000\u0000\u0000\u04a1\u04a2\u0003g3\u0000\u04a2"+ + "\u04a3\u0005.\u0000\u0000\u04a3\u04a4\u0005c\u0000\u0000\u04a4\u04a5\u0005"+ + "l\u0000\u0000\u04a5\u04a6\u0005z\u0000\u0000\u04a6\u04eb\u0001\u0000\u0000"+ + "\u0000\u04a7\u04a8\u0003g3\u0000\u04a8\u04a9\u0005.\u0000\u0000\u04a9"+ + "\u04aa\u0005c\u0000\u0000\u04aa\u04ab\u0005t\u0000\u0000\u04ab\u04ac\u0005"+ + "z\u0000\u0000\u04ac\u04eb\u0001\u0000\u0000\u0000\u04ad\u04ae\u0003g3"+ + "\u0000\u04ae\u04af\u0005.\u0000\u0000\u04af\u04b0\u0005p\u0000\u0000\u04b0"+ + "\u04b1\u0005o\u0000\u0000\u04b1\u04b2\u0005p\u0000\u0000\u04b2\u04b3\u0005"+ + "c\u0000\u0000\u04b3\u04b4\u0005n\u0000\u0000\u04b4\u04b5\u0005t\u0000"+ + "\u0000\u04b5\u04eb\u0001\u0000\u0000\u0000\u04b6\u04b7\u0003i4\u0000\u04b7"+ + "\u04b8\u0005.\u0000\u0000\u04b8\u04b9\u0005n\u0000\u0000\u04b9\u04ba\u0005"+ + "e\u0000\u0000\u04ba\u04bb\u0005g\u0000\u0000\u04bb\u04eb\u0001\u0000\u0000"+ + "\u0000\u04bc\u04bd\u0003i4\u0000\u04bd\u04be\u0005.\u0000\u0000\u04be"+ + "\u04bf\u0005a\u0000\u0000\u04bf\u04c0\u0005b\u0000\u0000\u04c0\u04c1\u0005"+ + "s\u0000\u0000\u04c1\u04eb\u0001\u0000\u0000\u0000\u04c2\u04c3\u0003i4"+ + "\u0000\u04c3\u04c4\u0005.\u0000\u0000\u04c4\u04c5\u0005s\u0000\u0000\u04c5"+ + "\u04c6\u0005q\u0000\u0000\u04c6\u04c7\u0005r\u0000\u0000\u04c7\u04c8\u0005"+ + "t\u0000\u0000\u04c8\u04eb\u0001\u0000\u0000\u0000\u04c9\u04ca\u0003i4"+ + "\u0000\u04ca\u04cb\u0005.\u0000\u0000\u04cb\u04cc\u0005c\u0000\u0000\u04cc"+ + "\u04cd\u0005e\u0000\u0000\u04cd\u04ce\u0005i\u0000\u0000\u04ce\u04cf\u0005"+ + "l\u0000\u0000\u04cf\u04eb\u0001\u0000\u0000\u0000\u04d0\u04d1\u0003i4"+ + "\u0000\u04d1\u04d2\u0005.\u0000\u0000\u04d2\u04d3\u0005f\u0000\u0000\u04d3"+ + "\u04d4\u0005l\u0000\u0000\u04d4\u04d5\u0005o\u0000\u0000\u04d5\u04d6\u0005"+ + "o\u0000\u0000\u04d6\u04d7\u0005r\u0000\u0000\u04d7\u04eb\u0001\u0000\u0000"+ + "\u0000\u04d8\u04d9\u0003i4\u0000\u04d9\u04da\u0005.\u0000\u0000\u04da"+ + "\u04db\u0005t\u0000\u0000\u04db\u04dc\u0005r\u0000\u0000\u04dc\u04dd\u0005"+ + "u\u0000\u0000\u04dd\u04de\u0005n\u0000\u0000\u04de\u04df\u0005c\u0000"+ + "\u0000\u04df\u04eb\u0001\u0000\u0000\u0000\u04e0\u04e1\u0003i4\u0000\u04e1"+ + "\u04e2\u0005.\u0000\u0000\u04e2\u04e3\u0005n\u0000\u0000\u04e3\u04e4\u0005"+ + "e\u0000\u0000\u04e4\u04e5\u0005a\u0000\u0000\u04e5\u04e6\u0005r\u0000"+ + "\u0000\u04e6\u04e7\u0005e\u0000\u0000\u04e7\u04e8\u0005s\u0000\u0000\u04e8"+ + "\u04e9\u0005t\u0000\u0000\u04e9\u04eb\u0001\u0000\u0000\u0000\u04ea\u04a1"+ + "\u0001\u0000\u0000\u0000\u04ea\u04a7\u0001\u0000\u0000\u0000\u04ea\u04ad"+ + "\u0001\u0000\u0000\u0000\u04ea\u04b6\u0001\u0000\u0000\u0000\u04ea\u04bc"+ + "\u0001\u0000\u0000\u0000\u04ea\u04c2\u0001\u0000\u0000\u0000\u04ea\u04c9"+ + "\u0001\u0000\u0000\u0000\u04ea\u04d0\u0001\u0000\u0000\u0000\u04ea\u04d8"+ + "\u0001\u0000\u0000\u0000\u04ea\u04e0\u0001\u0000\u0000\u0000\u04eb\u00e2"+ + "\u0001\u0000\u0000\u0000\u04ec\u04ed\u0003g3\u0000\u04ed\u04ee\u0005."+ + "\u0000\u0000\u04ee\u04ef\u0005a\u0000\u0000\u04ef\u04f0\u0005d\u0000\u0000"+ + "\u04f0\u04f1\u0005d\u0000\u0000\u04f1\u0583\u0001\u0000\u0000\u0000\u04f2"+ + "\u04f3\u0003g3\u0000\u04f3\u04f4\u0005.\u0000\u0000\u04f4\u04f5\u0005"+ + "s\u0000\u0000\u04f5\u04f6\u0005u\u0000\u0000\u04f6\u04f7\u0005b\u0000"+ + "\u0000\u04f7\u0583\u0001\u0000\u0000\u0000\u04f8\u04f9\u0003g3\u0000\u04f9"+ + "\u04fa\u0005.\u0000\u0000\u04fa\u04fb\u0005m\u0000\u0000\u04fb\u04fc\u0005"+ + "u\u0000\u0000\u04fc\u04fd\u0005l\u0000\u0000\u04fd\u0583\u0001\u0000\u0000"+ + "\u0000\u04fe\u04ff\u0003g3\u0000\u04ff\u0500\u0005.\u0000\u0000\u0500"+ + "\u0501\u0005d\u0000\u0000\u0501\u0502\u0005i\u0000\u0000\u0502\u0503\u0005"+ + "v\u0000\u0000\u0503\u0504\u0005_\u0000\u0000\u0504\u0505\u0005s\u0000"+ + "\u0000\u0505\u0583\u0001\u0000\u0000\u0000\u0506\u0507\u0003g3\u0000\u0507"+ + "\u0508\u0005.\u0000\u0000\u0508\u0509\u0005d\u0000\u0000\u0509\u050a\u0005"+ + "i\u0000\u0000\u050a\u050b\u0005v\u0000\u0000\u050b\u050c\u0005_\u0000"+ + "\u0000\u050c\u050d\u0005u\u0000\u0000\u050d\u0583\u0001\u0000\u0000\u0000"+ + "\u050e\u050f\u0003g3\u0000\u050f\u0510\u0005.\u0000\u0000\u0510\u0511"+ + "\u0005r\u0000\u0000\u0511\u0512\u0005e\u0000\u0000\u0512\u0513\u0005m"+ + "\u0000\u0000\u0513\u0514\u0005_\u0000\u0000\u0514\u0515\u0005s\u0000\u0000"+ + "\u0515\u0583\u0001\u0000\u0000\u0000\u0516\u0517\u0003g3\u0000\u0517\u0518"+ + "\u0005.\u0000\u0000\u0518\u0519\u0005r\u0000\u0000\u0519\u051a\u0005e"+ + "\u0000\u0000\u051a\u051b\u0005m\u0000\u0000\u051b\u051c\u0005_\u0000\u0000"+ + "\u051c\u051d\u0005u\u0000\u0000\u051d\u0583\u0001\u0000\u0000\u0000\u051e"+ + "\u051f\u0003g3\u0000\u051f\u0520\u0005.\u0000\u0000\u0520\u0521\u0005"+ + "a\u0000\u0000\u0521\u0522\u0005n\u0000\u0000\u0522\u0523\u0005d\u0000"+ + "\u0000\u0523\u0583\u0001\u0000\u0000\u0000\u0524\u0525\u0003g3\u0000\u0525"+ + "\u0526\u0005.\u0000\u0000\u0526\u0527\u0005o\u0000\u0000\u0527\u0528\u0005"+ + "r\u0000\u0000\u0528\u0583\u0001\u0000\u0000\u0000\u0529\u052a\u0003g3"+ + "\u0000\u052a\u052b\u0005.\u0000\u0000\u052b\u052c\u0005x\u0000\u0000\u052c"+ + "\u052d\u0005o\u0000\u0000\u052d\u052e\u0005r\u0000\u0000\u052e\u0583\u0001"+ + "\u0000\u0000\u0000\u052f\u0530\u0003g3\u0000\u0530\u0531\u0005.\u0000"+ + "\u0000\u0531\u0532\u0005s\u0000\u0000\u0532\u0533\u0005h\u0000\u0000\u0533"+ + "\u0534\u0005l\u0000\u0000\u0534\u0583\u0001\u0000\u0000\u0000\u0535\u0536"+ + "\u0003g3\u0000\u0536\u0537\u0005.\u0000\u0000\u0537\u0538\u0005s\u0000"+ + "\u0000\u0538\u0539\u0005h\u0000\u0000\u0539\u053a\u0005r\u0000\u0000\u053a"+ + "\u053b\u0005_\u0000\u0000\u053b\u053c\u0005s\u0000\u0000\u053c\u0583\u0001"+ + "\u0000\u0000\u0000\u053d\u053e\u0003g3\u0000\u053e\u053f\u0005.\u0000"+ + "\u0000\u053f\u0540\u0005s\u0000\u0000\u0540\u0541\u0005h\u0000\u0000\u0541"+ + "\u0542\u0005r\u0000\u0000\u0542\u0543\u0005_\u0000\u0000\u0543\u0544\u0005"+ + "u\u0000\u0000\u0544\u0583\u0001\u0000\u0000\u0000\u0545\u0546\u0003g3"+ + "\u0000\u0546\u0547\u0005.\u0000\u0000\u0547\u0548\u0005r\u0000\u0000\u0548"+ + "\u0549\u0005o\u0000\u0000\u0549\u054a\u0005t\u0000\u0000\u054a\u054b\u0005"+ + "l\u0000\u0000\u054b\u0583\u0001\u0000\u0000\u0000\u054c\u054d\u0003g3"+ + "\u0000\u054d\u054e\u0005.\u0000\u0000\u054e\u054f\u0005r\u0000\u0000\u054f"+ + "\u0550\u0005o\u0000\u0000\u0550\u0551\u0005t\u0000\u0000\u0551\u0552\u0005"+ + "r\u0000\u0000\u0552\u0583\u0001\u0000\u0000\u0000\u0553\u0554\u0003i4"+ + "\u0000\u0554\u0555\u0005.\u0000\u0000\u0555\u0556\u0005a\u0000\u0000\u0556"+ + "\u0557\u0005d\u0000\u0000\u0557\u0558\u0005d\u0000\u0000\u0558\u0583\u0001"+ + "\u0000\u0000\u0000\u0559\u055a\u0003i4\u0000\u055a\u055b\u0005.\u0000"+ + "\u0000\u055b\u055c\u0005s\u0000\u0000\u055c\u055d\u0005u\u0000\u0000\u055d"+ + "\u055e\u0005b\u0000\u0000\u055e\u0583\u0001\u0000\u0000\u0000\u055f\u0560"+ + "\u0003i4\u0000\u0560\u0561\u0005.\u0000\u0000\u0561\u0562\u0005m\u0000"+ + "\u0000\u0562\u0563\u0005u\u0000\u0000\u0563\u0564\u0005l\u0000\u0000\u0564"+ + "\u0583\u0001\u0000\u0000\u0000\u0565\u0566\u0003i4\u0000\u0566\u0567\u0005"+ + ".\u0000\u0000\u0567\u0568\u0005d\u0000\u0000\u0568\u0569\u0005i\u0000"+ + "\u0000\u0569\u056a\u0005v\u0000\u0000\u056a\u0583\u0001\u0000\u0000\u0000"+ + "\u056b\u056c\u0003i4\u0000\u056c\u056d\u0005.\u0000\u0000\u056d\u056e"+ + "\u0005m\u0000\u0000\u056e\u056f\u0005i\u0000\u0000\u056f\u0570\u0005n"+ + "\u0000\u0000\u0570\u0583\u0001\u0000\u0000\u0000\u0571\u0572\u0003i4\u0000"+ + "\u0572\u0573\u0005.\u0000\u0000\u0573\u0574\u0005m\u0000\u0000\u0574\u0575"+ + "\u0005a\u0000\u0000\u0575\u0576\u0005x\u0000\u0000\u0576\u0583\u0001\u0000"+ + "\u0000\u0000\u0577\u0578\u0003i4\u0000\u0578\u0579\u0005.\u0000\u0000"+ + "\u0579\u057a\u0005c\u0000\u0000\u057a\u057b\u0005o\u0000\u0000\u057b\u057c"+ + "\u0005p\u0000\u0000\u057c\u057d\u0005y\u0000\u0000\u057d\u057e\u0005s"+ + "\u0000\u0000\u057e\u057f\u0005i\u0000\u0000\u057f\u0580\u0005g\u0000\u0000"+ + "\u0580\u0581\u0005n\u0000\u0000\u0581\u0583\u0001\u0000\u0000\u0000\u0582"+ + "\u04ec\u0001\u0000\u0000\u0000\u0582\u04f2\u0001\u0000\u0000\u0000\u0582"+ + "\u04f8\u0001\u0000\u0000\u0000\u0582\u04fe\u0001\u0000\u0000\u0000\u0582"+ + "\u0506\u0001\u0000\u0000\u0000\u0582\u050e\u0001\u0000\u0000\u0000\u0582"+ + "\u0516\u0001\u0000\u0000\u0000\u0582\u051e\u0001\u0000\u0000\u0000\u0582"+ + "\u0524\u0001\u0000\u0000\u0000\u0582\u0529\u0001\u0000\u0000\u0000\u0582"+ + "\u052f\u0001\u0000\u0000\u0000\u0582\u0535\u0001\u0000\u0000\u0000\u0582"+ + "\u053d\u0001\u0000\u0000\u0000\u0582\u0545\u0001\u0000\u0000\u0000\u0582"+ + "\u054c\u0001\u0000\u0000\u0000\u0582\u0553\u0001\u0000\u0000\u0000\u0582"+ + "\u0559\u0001\u0000\u0000\u0000\u0582\u055f\u0001\u0000\u0000\u0000\u0582"+ + "\u0565\u0001\u0000\u0000\u0000\u0582\u056b\u0001\u0000\u0000\u0000\u0582"+ + "\u0571\u0001\u0000\u0000\u0000\u0582\u0577\u0001\u0000\u0000\u0000\u0583"+ + "\u00e4\u0001\u0000\u0000\u0000\u0584\u0585\u0003_/\u0000\u0585\u0586\u0005"+ + ".\u0000\u0000\u0586\u0587\u0005w\u0000\u0000\u0587\u0588\u0005r\u0000"+ + "\u0000\u0588\u0589\u0005a\u0000\u0000\u0589\u058a\u0005p\u0000\u0000\u058a"+ + "\u058b\u0005_\u0000\u0000\u058b\u058c\u0001\u0000\u0000\u0000\u058c\u058d"+ + "\u0003a0\u0000\u058d\u0627\u0001\u0000\u0000\u0000\u058e\u058f\u0003g"+ + "3\u0000\u058f\u0590\u0005.\u0000\u0000\u0590\u0591\u0005t\u0000\u0000"+ + "\u0591\u0592\u0005r\u0000\u0000\u0592\u0593\u0005u\u0000\u0000\u0593\u0594"+ + "\u0005n\u0000\u0000\u0594\u0595\u0005c\u0000\u0000\u0595\u0596\u0005_"+ + "\u0000\u0000\u0596\u0597\u0001\u0000\u0000\u0000\u0597\u0598\u0003i4\u0000"+ + "\u0598\u0599\u0003U*\u0000\u0599\u059a\u0003[-\u0000\u059a\u0627\u0001"+ + "\u0000\u0000\u0000\u059b\u059c\u0003g3\u0000\u059c\u059d\u0005.\u0000"+ + "\u0000\u059d\u059e\u0005t\u0000\u0000\u059e\u059f\u0005r\u0000\u0000\u059f"+ + "\u05a0\u0005u\u0000\u0000\u05a0\u05a1\u0005n\u0000\u0000\u05a1\u05a2\u0005"+ + "c\u0000\u0000\u05a2\u05a3\u0005_\u0000\u0000\u05a3\u05a4\u0005s\u0000"+ + "\u0000\u05a4\u05a5\u0005a\u0000\u0000\u05a5\u05a6\u0005t\u0000\u0000\u05a6"+ + "\u05a7\u0005_\u0000\u0000\u05a7\u05a8\u0001\u0000\u0000\u0000\u05a8\u05a9"+ + "\u0003i4\u0000\u05a9\u05aa\u0003U*\u0000\u05aa\u05ab\u0003[-\u0000\u05ab"+ + "\u0627\u0001\u0000\u0000\u0000\u05ac\u05ad\u0003a0\u0000\u05ad\u05ae\u0005"+ + ".\u0000\u0000\u05ae\u05af\u0005e\u0000\u0000\u05af\u05b0\u0005x\u0000"+ + "\u0000\u05b0\u05b1\u0005t\u0000\u0000\u05b1\u05b2\u0005e\u0000\u0000\u05b2"+ + "\u05b3\u0005n\u0000\u0000\u05b3\u05b4\u0005d\u0000\u0000\u05b4\u05b5\u0005"+ + "_\u0000\u0000\u05b5\u05b6\u0001\u0000\u0000\u0000\u05b6\u05b7\u0003_/"+ + "\u0000\u05b7\u05b8\u0003U*\u0000\u05b8\u05b9\u0003[-\u0000\u05b9\u0627"+ + "\u0001\u0000\u0000\u0000\u05ba\u05bb\u0003i4\u0000\u05bb\u05bc\u0005."+ + "\u0000\u0000\u05bc\u05bd\u0005c\u0000\u0000\u05bd\u05be\u0005o\u0000\u0000"+ + "\u05be\u05bf\u0005n\u0000\u0000\u05bf\u05c0\u0005v\u0000\u0000\u05c0\u05c1"+ + "\u0005e\u0000\u0000\u05c1\u05c2\u0005r\u0000\u0000\u05c2\u05c3\u0005t"+ + "\u0000\u0000\u05c3\u05c4\u0005_\u0000\u0000\u05c4\u05c5\u0001\u0000\u0000"+ + "\u0000\u05c5\u05c6\u0003g3\u0000\u05c6\u05c7\u0003U*\u0000\u05c7\u05c8"+ + "\u0003[-\u0000\u05c8\u0627\u0001\u0000\u0000\u0000\u05c9\u05ca\u0003c"+ + "1\u0000\u05ca\u05cb\u0005.\u0000\u0000\u05cb\u05cc\u0005d\u0000\u0000"+ + "\u05cc\u05cd\u0005e\u0000\u0000\u05cd\u05ce\u0005m\u0000\u0000\u05ce\u05cf"+ + "\u0005o\u0000\u0000\u05cf\u05d0\u0005t\u0000\u0000\u05d0\u05d1\u0005e"+ + "\u0000\u0000\u05d1\u05d2\u0005_\u0000\u0000\u05d2\u05d3\u0001\u0000\u0000"+ + "\u0000\u05d3\u05d4\u0003e2\u0000\u05d4\u0627\u0001\u0000\u0000\u0000\u05d5"+ + "\u05d6\u0003e2\u0000\u05d6\u05d7\u0005.\u0000\u0000\u05d7\u05d8\u0005"+ + "p\u0000\u0000\u05d8\u05d9\u0005r\u0000\u0000\u05d9\u05da\u0005o\u0000"+ + "\u0000\u05da\u05db\u0005m\u0000\u0000\u05db\u05dc\u0005o\u0000\u0000\u05dc"+ + "\u05dd\u0005t\u0000\u0000\u05dd\u05de\u0005e\u0000\u0000\u05de\u05df\u0005"+ + "_\u0000\u0000\u05df\u05e0\u0001\u0000\u0000\u0000\u05e0\u05e1\u0003c1"+ + "\u0000\u05e1\u0627\u0001\u0000\u0000\u0000\u05e2\u05e3\u0003c1\u0000\u05e3"+ + "\u05e4\u0005.\u0000\u0000\u05e4\u05e5\u0005r\u0000\u0000\u05e5\u05e6\u0005"+ + "e\u0000\u0000\u05e6\u05e7\u0005i\u0000\u0000\u05e7\u05e8\u0005n\u0000"+ + "\u0000\u05e8\u05e9\u0005t\u0000\u0000\u05e9\u05ea\u0005e\u0000\u0000\u05ea"+ + "\u05eb\u0005r\u0000\u0000\u05eb\u05ec\u0005p\u0000\u0000\u05ec\u05ed\u0005"+ + "r\u0000\u0000\u05ed\u05ee\u0005e\u0000\u0000\u05ee\u05ef\u0005t\u0000"+ + "\u0000\u05ef\u05f0\u0005_\u0000\u0000\u05f0\u05f1\u0001\u0000\u0000\u0000"+ + "\u05f1\u05f2\u0003_/\u0000\u05f2\u0627\u0001\u0000\u0000\u0000\u05f3\u05f4"+ + "\u0003e2\u0000\u05f4\u05f5\u0005.\u0000\u0000\u05f5\u05f6\u0005r\u0000"+ + "\u0000\u05f6\u05f7\u0005e\u0000\u0000\u05f7\u05f8\u0005i\u0000\u0000\u05f8"+ + "\u05f9\u0005n\u0000\u0000\u05f9\u05fa\u0005t\u0000\u0000\u05fa\u05fb\u0005"+ + "e\u0000\u0000\u05fb\u05fc\u0005r\u0000\u0000\u05fc\u05fd\u0005p\u0000"+ + "\u0000\u05fd\u05fe\u0005r\u0000\u0000\u05fe\u05ff\u0005e\u0000\u0000\u05ff"+ + "\u0600\u0005t\u0000\u0000\u0600\u0601\u0005_\u0000\u0000\u0601\u0602\u0001"+ + "\u0000\u0000\u0000\u0602\u0603\u0003a0\u0000\u0603\u0627\u0001\u0000\u0000"+ + "\u0000\u0604\u0605\u0003_/\u0000\u0605\u0606\u0005.\u0000\u0000\u0606"+ + "\u0607\u0005r\u0000\u0000\u0607\u0608\u0005e\u0000\u0000\u0608\u0609\u0005"+ + "i\u0000\u0000\u0609\u060a\u0005n\u0000\u0000\u060a\u060b\u0005t\u0000"+ + "\u0000\u060b\u060c\u0005e\u0000\u0000\u060c\u060d\u0005r\u0000\u0000\u060d"+ + "\u060e\u0005p\u0000\u0000\u060e\u060f\u0005r\u0000\u0000\u060f\u0610\u0005"+ + "e\u0000\u0000\u0610\u0611\u0005t\u0000\u0000\u0611\u0612\u0005_\u0000"+ + "\u0000\u0612\u0613\u0001\u0000\u0000\u0000\u0613\u0614\u0003c1\u0000\u0614"+ + "\u0627\u0001\u0000\u0000\u0000\u0615\u0616\u0003a0\u0000\u0616\u0617\u0005"+ + ".\u0000\u0000\u0617\u0618\u0005r\u0000\u0000\u0618\u0619\u0005e\u0000"+ + "\u0000\u0619\u061a\u0005i\u0000\u0000\u061a\u061b\u0005n\u0000\u0000\u061b"+ + "\u061c\u0005t\u0000\u0000\u061c\u061d\u0005e\u0000\u0000\u061d\u061e\u0005"+ + "r\u0000\u0000\u061e\u061f\u0005p\u0000\u0000\u061f\u0620\u0005r\u0000"+ + "\u0000\u0620\u0621\u0005e\u0000\u0000\u0621\u0622\u0005t\u0000\u0000\u0622"+ + "\u0623\u0005_\u0000\u0000\u0623\u0624\u0001\u0000\u0000\u0000\u0624\u0625"+ + "\u0003e2\u0000\u0625\u0627\u0001\u0000\u0000\u0000\u0626\u0584\u0001\u0000"+ + "\u0000\u0000\u0626\u058e\u0001\u0000\u0000\u0000\u0626\u059b\u0001\u0000"+ + "\u0000\u0000\u0626\u05ac\u0001\u0000\u0000\u0000\u0626\u05ba\u0001\u0000"+ + "\u0000\u0000\u0626\u05c9\u0001\u0000\u0000\u0000\u0626\u05d5\u0001\u0000"+ + "\u0000\u0000\u0626\u05e2\u0001\u0000\u0000\u0000\u0626\u05f3\u0001\u0000"+ + "\u0000\u0000\u0626\u0604\u0001\u0000\u0000\u0000\u0626\u0615\u0001\u0000"+ + "\u0000\u0000\u0627\u00e6\u0001\u0000\u0000\u0000\u0628\u0629\u0005t\u0000"+ + "\u0000\u0629\u062a\u0005y\u0000\u0000\u062a\u062b\u0005p\u0000\u0000\u062b"+ + "\u062c\u0005e\u0000\u0000\u062c\u00e8\u0001\u0000\u0000\u0000\u062d\u062e"+ + "\u0005f\u0000\u0000\u062e\u062f\u0005u\u0000\u0000\u062f\u0630\u0005n"+ + "\u0000\u0000\u0630\u0631\u0005c\u0000\u0000\u0631\u00ea\u0001\u0000\u0000"+ + "\u0000\u0632\u0633\u0005e\u0000\u0000\u0633\u0634\u0005x\u0000\u0000\u0634"+ + "\u0635\u0005t\u0000\u0000\u0635\u0636\u0005e\u0000\u0000\u0636\u0637\u0005"+ + "r\u0000\u0000\u0637\u0638\u0005n\u0000\u0000\u0638\u00ec\u0001\u0000\u0000"+ + "\u0000\u0639\u063a\u0005s\u0000\u0000\u063a\u063b\u0005t\u0000\u0000\u063b"+ + "\u063c\u0005a\u0000\u0000\u063c\u063d\u0005r\u0000\u0000\u063d\u063e\u0005"+ + "t\u0000\u0000\u063e\u00ee\u0001\u0000\u0000\u0000\u063f\u0640\u0005p\u0000"+ + "\u0000\u0640\u0641\u0005a\u0000\u0000\u0641\u0642\u0005r\u0000\u0000\u0642"+ + "\u0643\u0005a\u0000\u0000\u0643\u0644\u0005m\u0000\u0000\u0644\u00f0\u0001"+ + "\u0000\u0000\u0000\u0645\u0646\u0005r\u0000\u0000\u0646\u0647\u0005e\u0000"+ + "\u0000\u0647\u0648\u0005s\u0000\u0000\u0648\u0649\u0005u\u0000\u0000\u0649"+ + "\u064a\u0005l\u0000\u0000\u064a\u064b\u0005t\u0000\u0000\u064b\u00f2\u0001"+ + "\u0000\u0000\u0000\u064c\u064d\u0005l\u0000\u0000\u064d\u064e\u0005o\u0000"+ + "\u0000\u064e\u064f\u0005c\u0000\u0000\u064f\u0650\u0005a\u0000\u0000\u0650"+ + "\u0651\u0005l\u0000\u0000\u0651\u00f4\u0001\u0000\u0000\u0000\u0652\u0653"+ + "\u0005g\u0000\u0000\u0653\u0654\u0005l\u0000\u0000\u0654\u0655\u0005o"+ + "\u0000\u0000\u0655\u0656\u0005b\u0000\u0000\u0656\u0657\u0005a\u0000\u0000"+ + "\u0657\u0658\u0005l\u0000\u0000\u0658\u00f6\u0001\u0000\u0000\u0000\u0659"+ + "\u065a\u0005t\u0000\u0000\u065a\u065b\u0005a\u0000\u0000\u065b\u065c\u0005"+ + "b\u0000\u0000\u065c\u065d\u0005l\u0000\u0000\u065d\u065e\u0005e\u0000"+ + "\u0000\u065e\u00f8\u0001\u0000\u0000\u0000\u065f\u0660\u0005m\u0000\u0000"+ + "\u0660\u0661\u0005e\u0000\u0000\u0661\u0662\u0005m\u0000\u0000\u0662\u0663"+ + "\u0005o\u0000\u0000\u0663\u0664\u0005r\u0000\u0000\u0664\u0665\u0005y"+ + "\u0000\u0000\u0665\u00fa\u0001\u0000\u0000\u0000\u0666\u0667\u0005e\u0000"+ + "\u0000\u0667\u0668\u0005l\u0000\u0000\u0668\u0669\u0005e\u0000\u0000\u0669"+ + "\u066a\u0005m\u0000\u0000\u066a\u00fc\u0001\u0000\u0000\u0000\u066b\u066c"+ + "\u0005d\u0000\u0000\u066c\u066d\u0005a\u0000\u0000\u066d\u066e\u0005t"+ + "\u0000\u0000\u066e\u066f\u0005a\u0000\u0000\u066f\u00fe\u0001\u0000\u0000"+ + "\u0000\u0670\u0671\u0005o\u0000\u0000\u0671\u0672\u0005f\u0000\u0000\u0672"+ + "\u0673\u0005f\u0000\u0000\u0673\u0674\u0005s\u0000\u0000\u0674\u0675\u0005"+ + "e\u0000\u0000\u0675\u0676\u0005t\u0000\u0000\u0676\u0100\u0001\u0000\u0000"+ + "\u0000\u0677\u0678\u0005i\u0000\u0000\u0678\u0679\u0005m\u0000\u0000\u0679"+ + "\u067a\u0005p\u0000\u0000\u067a\u067b\u0005o\u0000\u0000\u067b\u067c\u0005"+ + "r\u0000\u0000\u067c\u067d\u0005t\u0000\u0000\u067d\u0102\u0001\u0000\u0000"+ + "\u0000\u067e\u067f\u0005e\u0000\u0000\u067f\u0680\u0005x\u0000\u0000\u0680"+ + "\u0681\u0005p\u0000\u0000\u0681\u0682\u0005o\u0000\u0000\u0682\u0683\u0005"+ + "r\u0000\u0000\u0683\u0684\u0005t\u0000\u0000\u0684\u0104\u0001\u0000\u0000"+ + "\u0000\u0685\u0686\u0005m\u0000\u0000\u0686\u0687\u0005o\u0000\u0000\u0687"+ + "\u0688\u0005d\u0000\u0000\u0688\u0689\u0005u\u0000\u0000\u0689\u068a\u0005"+ + "l\u0000\u0000\u068a\u068b\u0005e\u0000\u0000\u068b\u0106\u0001\u0000\u0000"+ + "\u0000\u068c\u068d\u0005b\u0000\u0000\u068d\u068e\u0005i\u0000\u0000\u068e"+ + "\u068f\u0005n\u0000\u0000\u068f\u0690\u0005a\u0000\u0000\u0690\u0691\u0005"+ + "r\u0000\u0000\u0691\u0692\u0005y\u0000\u0000\u0692\u0108\u0001\u0000\u0000"+ + "\u0000\u0693\u0694\u0005q\u0000\u0000\u0694\u0695\u0005u\u0000\u0000\u0695"+ + "\u0696\u0005o\u0000\u0000\u0696\u0697\u0005t\u0000\u0000\u0697\u0698\u0005"+ + "e\u0000\u0000\u0698\u010a\u0001\u0000\u0000\u0000\u0699\u069a\u0005s\u0000"+ + "\u0000\u069a\u069b\u0005c\u0000\u0000\u069b\u069c\u0005r\u0000\u0000\u069c"+ + "\u069d\u0005i\u0000\u0000\u069d\u069e\u0005p\u0000\u0000\u069e\u069f\u0005"+ + "t\u0000\u0000\u069f\u010c\u0001\u0000\u0000\u0000\u06a0\u06a1\u0005r\u0000"+ + "\u0000\u06a1\u06a2\u0005e\u0000\u0000\u06a2\u06a3\u0005g\u0000\u0000\u06a3"+ + "\u06a4\u0005i\u0000\u0000\u06a4\u06a5\u0005s\u0000\u0000\u06a5\u06a6\u0005"+ + "t\u0000\u0000\u06a6\u06a7\u0005e\u0000\u0000\u06a7\u06a8\u0005r\u0000"+ + "\u0000\u06a8\u010e\u0001\u0000\u0000\u0000\u06a9\u06aa\u0005i\u0000\u0000"+ + "\u06aa\u06ab\u0005n\u0000\u0000\u06ab\u06ac\u0005v\u0000\u0000\u06ac\u06ad"+ + "\u0005o\u0000\u0000\u06ad\u06ae\u0005k\u0000\u0000\u06ae\u06af\u0005e"+ + "\u0000\u0000\u06af\u0110\u0001\u0000\u0000\u0000\u06b0\u06b1\u0005g\u0000"+ + "\u0000\u06b1\u06b2\u0005e\u0000\u0000\u06b2\u06b3\u0005t\u0000\u0000\u06b3"+ + "\u0112\u0001\u0000\u0000\u0000\u06b4\u06b5\u0005a\u0000\u0000\u06b5\u06b6"+ + "\u0005s\u0000\u0000\u06b6\u06b7\u0005s\u0000\u0000\u06b7\u06b8\u0005e"+ + "\u0000\u0000\u06b8\u06b9\u0005r\u0000\u0000\u06b9\u06ba\u0005t\u0000\u0000"+ + "\u06ba\u06bb\u0005_\u0000\u0000\u06bb\u06bc\u0005m\u0000\u0000\u06bc\u06bd"+ + "\u0005a\u0000\u0000\u06bd\u06be\u0005l\u0000\u0000\u06be\u06bf\u0005f"+ + "\u0000\u0000\u06bf\u06c0\u0005o\u0000\u0000\u06c0\u06c1\u0005r\u0000\u0000"+ + "\u06c1\u06c2\u0005m\u0000\u0000\u06c2\u06c3\u0005e\u0000\u0000\u06c3\u06c4"+ + "\u0005d\u0000\u0000\u06c4\u0114\u0001\u0000\u0000\u0000\u06c5\u06c6\u0005"+ + "a\u0000\u0000\u06c6\u06c7\u0005s\u0000\u0000\u06c7\u06c8\u0005s\u0000"+ + "\u0000\u06c8\u06c9\u0005e\u0000\u0000\u06c9\u06ca\u0005r\u0000\u0000\u06ca"+ + "\u06cb\u0005t\u0000\u0000\u06cb\u06cc\u0005_\u0000\u0000\u06cc\u06cd\u0005"+ + "i\u0000\u0000\u06cd\u06ce\u0005n\u0000\u0000\u06ce\u06cf\u0005v\u0000"+ + "\u0000\u06cf\u06d0\u0005a\u0000\u0000\u06d0\u06d1\u0005l\u0000\u0000\u06d1"+ + "\u06d2\u0005i\u0000\u0000\u06d2\u06d3\u0005d\u0000\u0000\u06d3\u0116\u0001"+ + "\u0000\u0000\u0000\u06d4\u06d5\u0005a\u0000\u0000\u06d5\u06d6\u0005s\u0000"+ + "\u0000\u06d6\u06d7\u0005s\u0000\u0000\u06d7\u06d8\u0005e\u0000\u0000\u06d8"+ + "\u06d9\u0005r\u0000\u0000\u06d9\u06da\u0005t\u0000\u0000\u06da\u06db\u0005"+ + "_\u0000\u0000\u06db\u06dc\u0005u\u0000\u0000\u06dc\u06dd\u0005n\u0000"+ + "\u0000\u06dd\u06de\u0005l\u0000\u0000\u06de\u06df\u0005i\u0000\u0000\u06df"+ + "\u06e0\u0005n\u0000\u0000\u06e0\u06e1\u0005k\u0000\u0000\u06e1\u06e2\u0005"+ + "a\u0000\u0000\u06e2\u06e3\u0005b\u0000\u0000\u06e3\u06e4\u0005l\u0000"+ + "\u0000\u06e4\u06e5\u0005e\u0000\u0000\u06e5\u0118\u0001\u0000\u0000\u0000"+ + "\u06e6\u06e7\u0005a\u0000\u0000\u06e7\u06e8\u0005s\u0000\u0000\u06e8\u06e9"+ + "\u0005s\u0000\u0000\u06e9\u06ea\u0005e\u0000\u0000\u06ea\u06eb\u0005r"+ + "\u0000\u0000\u06eb\u06ec\u0005t\u0000\u0000\u06ec\u06ed\u0005_\u0000\u0000"+ + "\u06ed\u06ee\u0005r\u0000\u0000\u06ee\u06ef\u0005e\u0000\u0000\u06ef\u06f0"+ + "\u0005t\u0000\u0000\u06f0\u06f1\u0005u\u0000\u0000\u06f1\u06f2\u0005r"+ + "\u0000\u0000\u06f2\u06f3\u0005n\u0000\u0000\u06f3\u011a\u0001\u0000\u0000"+ + "\u0000\u06f4\u06f5\u0005a\u0000\u0000\u06f5\u06f6\u0005s\u0000\u0000\u06f6"+ + "\u06f7\u0005s\u0000\u0000\u06f7\u06f8\u0005e\u0000\u0000\u06f8\u06f9\u0005"+ + "r\u0000\u0000\u06f9\u06fa\u0005t\u0000\u0000\u06fa\u06fb\u0005_\u0000"+ + "\u0000\u06fb\u06fc\u0005r\u0000\u0000\u06fc\u06fd\u0005e\u0000\u0000\u06fd"+ + "\u06fe\u0005t\u0000\u0000\u06fe\u06ff\u0005u\u0000\u0000\u06ff\u0700\u0005"+ + "r\u0000\u0000\u0700\u0701\u0005n\u0000\u0000\u0701\u0702\u0005_\u0000"+ + "\u0000\u0702\u0703\u0005c\u0000\u0000\u0703\u0704\u0005a\u0000\u0000\u0704"+ + "\u0705\u0005n\u0000\u0000\u0705\u0706\u0005o\u0000\u0000\u0706\u0707\u0005"+ + "n\u0000\u0000\u0707\u0708\u0005i\u0000\u0000\u0708\u0709\u0005c\u0000"+ + "\u0000\u0709\u070a\u0005a\u0000\u0000\u070a\u070b\u0005l\u0000\u0000\u070b"+ + "\u070c\u0005_\u0000\u0000\u070c\u070d\u0005n\u0000\u0000\u070d\u070e\u0005"+ + "a\u0000\u0000\u070e\u070f\u0005n\u0000\u0000\u070f\u011c\u0001\u0000\u0000"+ + "\u0000\u0710\u0711\u0005a\u0000\u0000\u0711\u0712\u0005s\u0000\u0000\u0712"+ + "\u0713\u0005s\u0000\u0000\u0713\u0714\u0005e\u0000\u0000\u0714\u0715\u0005"+ + "r\u0000\u0000\u0715\u0716\u0005t\u0000\u0000\u0716\u0717\u0005_\u0000"+ + "\u0000\u0717\u0718\u0005r\u0000\u0000\u0718\u0719\u0005e\u0000\u0000\u0719"+ + "\u071a\u0005t\u0000\u0000\u071a\u071b\u0005u\u0000\u0000\u071b\u071c\u0005"+ + "r\u0000\u0000\u071c\u071d\u0005n\u0000\u0000\u071d\u071e\u0005_\u0000"+ + "\u0000\u071e\u071f\u0005a\u0000\u0000\u071f\u0720\u0005r\u0000\u0000\u0720"+ + "\u0721\u0005i\u0000\u0000\u0721\u0722\u0005t\u0000\u0000\u0722\u0723\u0005"+ + "h\u0000\u0000\u0723\u0724\u0005m\u0000\u0000\u0724\u0725\u0005e\u0000"+ + "\u0000\u0725\u0726\u0005t\u0000\u0000\u0726\u0727\u0005i\u0000\u0000\u0727"+ + "\u0728\u0005c\u0000\u0000\u0728\u0729\u0005_\u0000\u0000\u0729\u072a\u0005"+ + "n\u0000\u0000\u072a\u072b\u0005a\u0000\u0000\u072b\u072c\u0005n\u0000"+ + "\u0000\u072c\u011e\u0001\u0000\u0000\u0000\u072d\u072e\u0005a\u0000\u0000"+ + "\u072e\u072f\u0005s\u0000\u0000\u072f\u0730\u0005s\u0000\u0000\u0730\u0731"+ + "\u0005e\u0000\u0000\u0731\u0732\u0005r\u0000\u0000\u0732\u0733\u0005t"+ + "\u0000\u0000\u0733\u0734\u0005_\u0000\u0000\u0734\u0735\u0005t\u0000\u0000"+ + "\u0735\u0736\u0005r\u0000\u0000\u0736\u0737\u0005a\u0000\u0000\u0737\u0738"+ + "\u0005p\u0000\u0000\u0738\u0120\u0001\u0000\u0000\u0000\u0739\u073a\u0005"+ + "a\u0000\u0000\u073a\u073b\u0005s\u0000\u0000\u073b\u073c\u0005s\u0000"+ + "\u0000\u073c\u073d\u0005e\u0000\u0000\u073d\u073e\u0005r\u0000\u0000\u073e"+ + "\u073f\u0005t\u0000\u0000\u073f\u0740\u0005_\u0000\u0000\u0740\u0741\u0005"+ + "e\u0000\u0000\u0741\u0742\u0005x\u0000\u0000\u0742\u0743\u0005h\u0000"+ + "\u0000\u0743\u0744\u0005a\u0000\u0000\u0744\u0745\u0005u\u0000\u0000\u0745"+ + "\u0746\u0005s\u0000\u0000\u0746\u0747\u0005t\u0000\u0000\u0747\u0748\u0005"+ + "i\u0000\u0000\u0748\u0749\u0005o\u0000\u0000\u0749\u074a\u0005n\u0000"+ + "\u0000\u074a\u0122\u0001\u0000\u0000\u0000\u074b\u074c\u0005i\u0000\u0000"+ + "\u074c\u074d\u0005n\u0000\u0000\u074d\u074e\u0005p\u0000\u0000\u074e\u074f"+ + "\u0005u\u0000\u0000\u074f\u0750\u0005t\u0000\u0000\u0750\u0124\u0001\u0000"+ + "\u0000\u0000\u0751\u0752\u0005o\u0000\u0000\u0752\u0753\u0005u\u0000\u0000"+ + "\u0753\u0754\u0005t\u0000\u0000\u0754\u0755\u0005p\u0000\u0000\u0755\u0756"+ + "\u0005u\u0000\u0000\u0756\u0757\u0005t\u0000\u0000\u0757\u0126\u0001\u0000"+ + "\u0000\u0000\u0758\u0759\u0003\u0149\u00a4\u0000\u0759\u0128\u0001\u0000"+ + "\u0000\u0000\u075a\u075b\u0005v\u0000\u0000\u075b\u075c\u00051\u0000\u0000"+ + "\u075c\u075d\u00052\u0000\u0000\u075d\u075e\u00058\u0000\u0000\u075e\u012a"+ + "\u0001\u0000\u0000\u0000\u075f\u0761\u0007\u0001\u0000\u0000\u0760\u075f"+ + "\u0001\u0000\u0000\u0000\u0761\u0762\u0001\u0000\u0000\u0000\u0762\u0760"+ + "\u0001\u0000\u0000\u0000\u0762\u0763\u0001\u0000\u0000\u0000\u0763\u0764"+ + "\u0001\u0000\u0000\u0000\u0764\u0765\u0006\u0095\u0000\u0000\u0765\u012c"+ + "\u0001\u0000\u0000\u0000\u0766\u0767\u0005(\u0000\u0000\u0767\u0768\u0005"+ + ";\u0000\u0000\u0768\u076c\u0001\u0000\u0000\u0000\u0769\u076b\t\u0000"+ + "\u0000\u0000\u076a\u0769\u0001\u0000\u0000\u0000\u076b\u076e\u0001\u0000"+ + "\u0000\u0000\u076c\u076d\u0001\u0000\u0000\u0000\u076c\u076a\u0001\u0000"+ + "\u0000\u0000\u076d\u076f\u0001\u0000\u0000\u0000\u076e\u076c\u0001\u0000"+ + "\u0000\u0000\u076f\u0770\u0005;\u0000\u0000\u0770\u077c\u0005)\u0000\u0000"+ + "\u0771\u0772\u0005;\u0000\u0000\u0772\u0773\u0005;\u0000\u0000\u0773\u0777"+ + "\u0001\u0000\u0000\u0000\u0774\u0776\t\u0000\u0000\u0000\u0775\u0774\u0001"+ + "\u0000\u0000\u0000\u0776\u0779\u0001\u0000\u0000\u0000\u0777\u0778\u0001"+ + "\u0000\u0000\u0000\u0777\u0775\u0001\u0000\u0000\u0000\u0778\u077a\u0001"+ + "\u0000\u0000\u0000\u0779\u0777\u0001\u0000\u0000\u0000\u077a\u077c\u0005"+ + "\n\u0000\u0000\u077b\u0766\u0001\u0000\u0000\u0000\u077b\u0771\u0001\u0000"+ + "\u0000\u0000\u077c\u077d\u0001\u0000\u0000\u0000\u077d\u077e\u0006\u0096"+ + "\u0000\u0000\u077e\u012e\u0001\u0000\u0000\u0000\u077f\u0780\u0007\u0002"+ + "\u0000\u0000\u0780\u0130\u0001\u0000\u0000\u0000\u0781\u0788\u0003\u0137"+ + "\u009b\u0000\u0782\u0784\u0005_\u0000\u0000\u0783\u0782\u0001\u0000\u0000"+ + "\u0000\u0783\u0784\u0001\u0000\u0000\u0000\u0784\u0785\u0001\u0000\u0000"+ + "\u0000\u0785\u0787\u0003\u0137\u009b\u0000\u0786\u0783\u0001\u0000\u0000"+ + "\u0000\u0787\u078a\u0001\u0000\u0000\u0000\u0788\u0786\u0001\u0000\u0000"+ + "\u0000\u0788\u0789\u0001\u0000\u0000\u0000\u0789\u0132\u0001\u0000\u0000"+ + "\u0000\u078a\u0788\u0001\u0000\u0000\u0000\u078b\u0792\u0003\u0139\u009c"+ + "\u0000\u078c\u078e\u0005_\u0000\u0000\u078d\u078c\u0001\u0000\u0000\u0000"+ + "\u078d\u078e\u0001\u0000\u0000\u0000\u078e\u078f\u0001\u0000\u0000\u0000"+ + "\u078f\u0791\u0003\u0139\u009c\u0000\u0790\u078d\u0001\u0000\u0000\u0000"+ + "\u0791\u0794\u0001\u0000\u0000\u0000\u0792\u0790\u0001\u0000\u0000\u0000"+ + "\u0792\u0793\u0001\u0000\u0000\u0000\u0793\u0134\u0001\u0000\u0000\u0000"+ + "\u0794\u0792\u0001\u0000\u0000\u0000\u0795\u0796\u0007\u0003\u0000\u0000"+ + "\u0796\u0136\u0001\u0000\u0000\u0000\u0797\u0798\u0007\u0004\u0000\u0000"+ + "\u0798\u0138\u0001\u0000\u0000\u0000\u0799\u079a\u0007\u0005\u0000\u0000"+ + "\u079a\u013a\u0001\u0000\u0000\u0000\u079b\u079c\u0007\u0006\u0000\u0000"+ + "\u079c\u013c\u0001\u0000\u0000\u0000\u079d\u07a3\u0003\u0131\u0098\u0000"+ + "\u079e\u079f\u00050\u0000\u0000\u079f\u07a0\u0005x\u0000\u0000\u07a0\u07a1"+ + "\u0001\u0000\u0000\u0000\u07a1\u07a3\u0003\u0133\u0099\u0000\u07a2\u079d"+ + "\u0001\u0000\u0000\u0000\u07a2\u079e\u0001\u0000\u0000\u0000\u07a3\u013e"+ + "\u0001\u0000\u0000\u0000\u07a4\u07a5\u0003\u0135\u009a\u0000\u07a5\u07a6"+ + "\u0003\u013d\u009e\u0000\u07a6\u0140\u0001\u0000\u0000\u0000\u07a7\u07a8"+ + "\u0003\u0131\u0098\u0000\u07a8\u0142\u0001\u0000\u0000\u0000\u07a9\u07aa"+ + "\u0003\u0133\u0099\u0000\u07aa\u0144\u0001\u0000\u0000\u0000\u07ab\u07ad"+ + "\u0003\u0135\u009a\u0000\u07ac\u07ab\u0001\u0000\u0000\u0000\u07ac\u07ad"+ + "\u0001\u0000\u0000\u0000\u07ad\u07ae\u0001\u0000\u0000\u0000\u07ae\u07af"+ + "\u0003\u0131\u0098\u0000\u07af\u07b1\u0005.\u0000\u0000\u07b0\u07b2\u0003"+ + "\u0141\u00a0\u0000\u07b1\u07b0\u0001\u0000\u0000\u0000\u07b1\u07b2\u0001"+ + "\u0000\u0000\u0000\u07b2\u07fa\u0001\u0000\u0000\u0000\u07b3\u07b5\u0003"+ + "\u0135\u009a\u0000\u07b4\u07b3\u0001\u0000\u0000\u0000\u07b4\u07b5\u0001"+ + "\u0000\u0000\u0000\u07b5\u07b6\u0001\u0000\u0000\u0000\u07b6\u07bb\u0003"+ + "\u0131\u0098\u0000\u07b7\u07b9\u0005.\u0000\u0000\u07b8\u07ba\u0003\u0141"+ + "\u00a0\u0000\u07b9\u07b8\u0001\u0000\u0000\u0000\u07b9\u07ba\u0001\u0000"+ + "\u0000\u0000\u07ba\u07bc\u0001\u0000\u0000\u0000\u07bb\u07b7\u0001\u0000"+ + "\u0000\u0000\u07bb\u07bc\u0001\u0000\u0000\u0000\u07bc\u07bd\u0001\u0000"+ + "\u0000\u0000\u07bd\u07bf\u0007\u0007\u0000\u0000\u07be\u07c0\u0003\u0135"+ + "\u009a\u0000\u07bf\u07be\u0001\u0000\u0000\u0000\u07bf\u07c0\u0001\u0000"+ + "\u0000\u0000\u07c0\u07c1\u0001\u0000\u0000\u0000\u07c1\u07c2\u0003\u0131"+ + "\u0098\u0000\u07c2\u07fa\u0001\u0000\u0000\u0000\u07c3\u07c5\u0003\u0135"+ + "\u009a\u0000\u07c4\u07c3\u0001\u0000\u0000\u0000\u07c4\u07c5\u0001\u0000"+ + "\u0000\u0000\u07c5\u07c6\u0001\u0000\u0000\u0000\u07c6\u07c7\u00050\u0000"+ + "\u0000\u07c7\u07c8\u0005x\u0000\u0000\u07c8\u07c9\u0001\u0000\u0000\u0000"+ + "\u07c9\u07ca\u0003\u0133\u0099\u0000\u07ca\u07cc\u0005.\u0000\u0000\u07cb"+ + "\u07cd\u0003\u0143\u00a1\u0000\u07cc\u07cb\u0001\u0000\u0000\u0000\u07cc"+ + "\u07cd\u0001\u0000\u0000\u0000\u07cd\u07fa\u0001\u0000\u0000\u0000\u07ce"+ + "\u07d0\u0003\u0135\u009a\u0000\u07cf\u07ce\u0001\u0000\u0000\u0000\u07cf"+ + "\u07d0\u0001\u0000\u0000\u0000\u07d0\u07d1\u0001\u0000\u0000\u0000\u07d1"+ + "\u07d2\u00050\u0000\u0000\u07d2\u07d3\u0005x\u0000\u0000\u07d3\u07d4\u0001"+ + "\u0000\u0000\u0000\u07d4\u07d9\u0003\u0133\u0099\u0000\u07d5\u07d7\u0005"+ + ".\u0000\u0000\u07d6\u07d8\u0003\u0143\u00a1\u0000\u07d7\u07d6\u0001\u0000"+ + "\u0000\u0000\u07d7\u07d8\u0001\u0000\u0000\u0000\u07d8\u07da\u0001\u0000"+ + "\u0000\u0000\u07d9\u07d5\u0001\u0000\u0000\u0000\u07d9\u07da\u0001\u0000"+ + "\u0000\u0000\u07da\u07db\u0001\u0000\u0000\u0000\u07db\u07dd\u0007\b\u0000"+ + "\u0000\u07dc\u07de\u0003\u0135\u009a\u0000\u07dd\u07dc\u0001\u0000\u0000"+ + "\u0000\u07dd\u07de\u0001\u0000\u0000\u0000\u07de\u07df\u0001\u0000\u0000"+ + "\u0000\u07df\u07e0\u0003\u0131\u0098\u0000\u07e0\u07fa\u0001\u0000\u0000"+ + "\u0000\u07e1\u07e3\u0003\u0135\u009a\u0000\u07e2\u07e1\u0001\u0000\u0000"+ + "\u0000\u07e2\u07e3\u0001\u0000\u0000\u0000\u07e3\u07e4\u0001\u0000\u0000"+ + "\u0000\u07e4\u07e5\u0005i\u0000\u0000\u07e5\u07e6\u0005n\u0000\u0000\u07e6"+ + "\u07fa\u0005f\u0000\u0000\u07e7\u07e9\u0003\u0135\u009a\u0000\u07e8\u07e7"+ + "\u0001\u0000\u0000\u0000\u07e8\u07e9\u0001\u0000\u0000\u0000\u07e9\u07ea"+ + "\u0001\u0000\u0000\u0000\u07ea\u07eb\u0005n\u0000\u0000\u07eb\u07ec\u0005"+ + "a\u0000\u0000\u07ec\u07fa\u0005n\u0000\u0000\u07ed\u07ef\u0003\u0135\u009a"+ + "\u0000\u07ee\u07ed\u0001\u0000\u0000\u0000\u07ee\u07ef\u0001\u0000\u0000"+ + "\u0000\u07ef\u07f0\u0001\u0000\u0000\u0000\u07f0\u07f1\u0005n\u0000\u0000"+ + "\u07f1\u07f2\u0005a\u0000\u0000\u07f2\u07f3\u0005n\u0000\u0000\u07f3\u07f4"+ + "\u0005:\u0000\u0000\u07f4\u07f5\u0001\u0000\u0000\u0000\u07f5\u07f6\u0005"+ + "0\u0000\u0000\u07f6\u07f7\u0005x\u0000\u0000\u07f7\u07f8\u0001\u0000\u0000"+ + "\u0000\u07f8\u07fa\u0003\u0133\u0099\u0000\u07f9\u07ac\u0001\u0000\u0000"+ + "\u0000\u07f9\u07b4\u0001\u0000\u0000\u0000\u07f9\u07c4\u0001\u0000\u0000"+ + "\u0000\u07f9\u07cf\u0001\u0000\u0000\u0000\u07f9\u07e2\u0001\u0000\u0000"+ + "\u0000\u07f9\u07e8\u0001\u0000\u0000\u0000\u07f9\u07ee\u0001\u0000\u0000"+ + "\u0000\u07fa\u0146\u0001\u0000\u0000\u0000\u07fb\u080f\u0005\"\u0000\u0000"+ + "\u07fc\u080e\u0003\u014f\u00a7\u0000\u07fd\u080e\u0007\t\u0000\u0000\u07fe"+ + "\u07ff\u0005\\\u0000\u0000\u07ff\u0800\u0003\u0139\u009c\u0000\u0800\u0801"+ + "\u0003\u0139\u009c\u0000\u0801\u080e\u0001\u0000\u0000\u0000\u0802\u0803"+ + "\u0005\\\u0000\u0000\u0803\u0804\u0005u\u0000\u0000\u0804\u0805\u0005"+ + "{\u0000\u0000\u0805\u0807\u0001\u0000\u0000\u0000\u0806\u0808\u0003\u0139"+ + "\u009c\u0000\u0807\u0806\u0001\u0000\u0000\u0000\u0808\u0809\u0001\u0000"+ + "\u0000\u0000\u0809\u0807\u0001\u0000\u0000\u0000\u0809\u080a\u0001\u0000"+ + "\u0000\u0000\u080a\u080b\u0001\u0000\u0000\u0000\u080b\u080c\u0005}\u0000"+ + "\u0000\u080c\u080e\u0001\u0000\u0000\u0000\u080d\u07fc\u0001\u0000\u0000"+ + "\u0000\u080d\u07fd\u0001\u0000\u0000\u0000\u080d\u07fe\u0001\u0000\u0000"+ + "\u0000\u080d\u0802\u0001\u0000\u0000\u0000\u080e\u0811\u0001\u0000\u0000"+ + "\u0000\u080f\u080d\u0001\u0000\u0000\u0000\u080f\u0810\u0001\u0000\u0000"+ + "\u0000\u0810\u0812\u0001\u0000\u0000\u0000\u0811\u080f\u0001\u0000\u0000"+ + "\u0000\u0812\u0813\u0005\"\u0000\u0000\u0813\u0148\u0001\u0000\u0000\u0000"+ + "\u0814\u0819\u0005$\u0000\u0000\u0815\u081a\u0003\u013b\u009d\u0000\u0816"+ + "\u081a\u0003\u0137\u009b\u0000\u0817\u081a\u0005_\u0000\u0000\u0818\u081a"+ + "\u0003\u012f\u0097\u0000\u0819\u0815\u0001\u0000\u0000\u0000\u0819\u0816"+ + "\u0001\u0000\u0000\u0000\u0819\u0817\u0001\u0000\u0000\u0000\u0819\u0818"+ + "\u0001\u0000\u0000\u0000\u081a\u081b\u0001\u0000\u0000\u0000\u081b\u0819"+ + "\u0001\u0000\u0000\u0000\u081b\u081c\u0001\u0000\u0000\u0000\u081c\u014a"+ + "\u0001\u0000\u0000\u0000\u081d\u081e\u0007\n\u0000\u0000\u081e\u014c\u0001"+ + "\u0000\u0000\u0000\u081f\u0822\u0003g3\u0000\u0820\u0822\u0003i4\u0000"+ + "\u0821\u081f\u0001\u0000\u0000\u0000\u0821\u0820\u0001\u0000\u0000\u0000"+ + "\u0822\u014e\u0001\u0000\u0000\u0000\u0823\u0824\b\u000b\u0000\u0000\u0824"+ + "\u0150\u0001\u0000\u0000\u0000\u0825\u0826\u0007\f\u0000\u0000\u0826\u0152"+ + "\u0001\u0000\u0000\u0000\u0827\u0828\u0007\r\u0000\u0000\u0828\u0154\u0001"+ + "\u0000\u0000\u0000\u0829\u082a\u0007\u000e\u0000\u0000\u082a\u0156\u0001"+ + "\u0000\u0000\u0000\u082b\u082e\u0003\u0151\u00a8\u0000\u082c\u082e\u0003"+ + "\u015b\u00ad\u0000\u082d\u082b\u0001\u0000\u0000\u0000\u082d\u082c\u0001"+ + "\u0000\u0000\u0000\u082e\u0158\u0001\u0000\u0000\u0000\u082f\u0832\u0003"+ + "\u0153\u00a9\u0000\u0830\u0832\u0003\u015b\u00ad\u0000\u0831\u082f\u0001"+ + "\u0000\u0000\u0000\u0831\u0830\u0001\u0000\u0000\u0000\u0832\u015a\u0001"+ + "\u0000\u0000\u0000\u0833\u0834\u0007\u000f\u0000\u0000\u0834\u084f\u0003"+ + "\u0155\u00aa\u0000\u0835\u0836\u0007\u0010\u0000\u0000\u0836\u0837\u0007"+ + "\u0011\u0000\u0000\u0837\u084f\u0003\u0155\u00aa\u0000\u0838\u0839\u0007"+ + "\u0012\u0000\u0000\u0839\u083a\u0007\u0013\u0000\u0000\u083a\u084f\u0003"+ + "\u0155\u00aa\u0000\u083b\u083c\u0007\u0014\u0000\u0000\u083c\u083d\u0003"+ + "\u0155\u00aa\u0000\u083d\u083e\u0003\u0155\u00aa\u0000\u083e\u084f\u0001"+ + "\u0000\u0000\u0000\u083f\u0840\u0007\u0015\u0000\u0000\u0840\u0841\u0007"+ + "\u0016\u0000\u0000\u0841\u0842\u0003\u0155\u00aa\u0000\u0842\u0843\u0003"+ + "\u0155\u00aa\u0000\u0843\u084f\u0001\u0000\u0000\u0000\u0844\u0845\u0007"+ + "\u0017\u0000\u0000\u0845\u0846\u0007\u0018\u0000\u0000\u0846\u0847\u0003"+ + "\u0155\u00aa\u0000\u0847\u0848\u0003\u0155\u00aa\u0000\u0848\u084f\u0001"+ + "\u0000\u0000\u0000\u0849\u084a\u0007\u0019\u0000\u0000\u084a\u084b\u0003"+ + "\u0155\u00aa\u0000\u084b\u084c\u0003\u0155\u00aa\u0000\u084c\u084d\u0003"+ + "\u0155\u00aa\u0000\u084d\u084f\u0001\u0000\u0000\u0000\u084e\u0833\u0001"+ + "\u0000\u0000\u0000\u084e\u0835\u0001\u0000\u0000\u0000\u084e\u0838\u0001"+ + "\u0000\u0000\u0000\u084e\u083b\u0001\u0000\u0000\u0000\u084e\u083f\u0001"+ + "\u0000\u0000\u0000\u084e\u0844\u0001\u0000\u0000\u0000\u084e\u0849\u0001"+ + "\u0000\u0000\u0000\u084f\u015c\u0001\u0000\u0000\u0000,\u0000\u0274\u027e"+ + "\u029a\u02ae\u02b2\u049f\u04ea\u0582\u0626\u0762\u076c\u0777\u077b\u0783"+ + "\u0788\u078d\u0792\u07a2\u07ac\u07b1\u07b4\u07b9\u07bb\u07bf\u07c4\u07cc"+ + "\u07cf\u07d7\u07d9\u07dd\u07e2\u07e8\u07ee\u07f9\u0809\u080d\u080f\u0819"+ + "\u081b\u0821\u082d\u0831\u084e\u0001\u0006\u0000\u0000"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/grammar/WatLexer.tokens b/grammar/WatLexer.tokens new file mode 100644 index 000000000..3284f78c5 --- /dev/null +++ b/grammar/WatLexer.tokens @@ -0,0 +1,281 @@ +LPAR=1 +RPAR=2 +NAT=3 +INT=4 +FLOAT=5 +STRING_=6 +VALUE_TYPE=7 +CONST=8 +SYMBOLIC=9 +FUNCREF=10 +EXTERNREF=11 +MUT=12 +NOP=13 +SYM_ASSERT=14 +ALLOC=15 +FREE=16 +UNREACHABLE=17 +DROP=18 +BLOCK=19 +LOOP=20 +FOR=21 +VBAR=22 +END=23 +BR=24 +BR_IF=25 +BR_TABLE=26 +RETURN=27 +IF=28 +THEN=29 +ELSE=30 +SELECT=31 +CALL=32 +CALL_INDIRECT=33 +RETURN_CALL=34 +RETURN_CALL_INDIRECT=35 +LOCAL_GET=36 +LOCAL_SET=37 +LOCAL_TEE=38 +GLOBAL_GET=39 +GLOBAL_SET=40 +LOAD=41 +STORE=42 +UNDERSCORE=43 +OFFSET_EQ=44 +ALIGN_EQ=45 +SIGN_POSTFIX=46 +MEM_SIZE=47 +I32=48 +I64=49 +F32=50 +F64=51 +IXX=52 +FXX=53 +OP_EQZ=54 +OP_EQ=55 +OP_NE=56 +OP_LT=57 +OP_LTS=58 +OP_LTU=59 +OP_LE=60 +OP_LES=61 +OP_LEU=62 +OP_GT=63 +OP_GTS=64 +OP_GTU=65 +OP_GE=66 +OP_GES=67 +OP_GEU=68 +OP_CLZ=69 +OP_CTZ=70 +OP_POPCNT=71 +OP_NEG=72 +OP_ABS=73 +OP_SQRT=74 +OP_CEIL=75 +OP_FLOOR=76 +OP_TRUNC=77 +OP_NEAREST=78 +OP_ADD=79 +OP_SUB=80 +OP_MUL=81 +OP_DIV=82 +OP_DIV_S=83 +OP_DIV_U=84 +OP_REM_S=85 +OP_REM_U=86 +OP_AND=87 +OP_OR=88 +OP_XOR=89 +OP_SHL=90 +OP_SHR_S=91 +OP_SHR_U=92 +OP_ROTL=93 +OP_ROTR=94 +OP_MIN=95 +OP_MAX=96 +OP_COPYSIGN=97 +OP_WRAP=98 +OP_TRUNC_=99 +OP_TRUNC_SAT=100 +OP_CONVERT=101 +OP_EXTEND=102 +OP_DEMOTE=103 +OP_PROMOTE=104 +OP_REINTER=105 +MEMORY_SIZE=106 +MEMORY_GROW=107 +MEMORY_FILL=108 +MEMORY_COPY=109 +MEMORY_INIT=110 +TEST=111 +COMPARE=112 +UNARY=113 +BINARY=114 +CONVERT=115 +TYPE=116 +FUNC=117 +EXTERN=118 +START_=119 +PARAM=120 +RESULT=121 +LOCAL=122 +GLOBAL=123 +TABLE=124 +MEMORY=125 +ELEM=126 +DATA=127 +OFFSET=128 +IMPORT=129 +EXPORT=130 +MODULE=131 +BIN=132 +QUOTE=133 +SCRIPT=134 +REGISTER=135 +INVOKE=136 +GET=137 +ASSERT_MALFORMED=138 +ASSERT_INVALID=139 +ASSERT_UNLINKABLE=140 +ASSERT_RETURN=141 +ASSERT_RETURN_CANONICAL_NAN=142 +ASSERT_RETURN_ARITHMETIC_NAN=143 +ASSERT_TRAP=144 +ASSERT_EXHAUSTION=145 +INPUT=146 +OUTPUT=147 +VAR=148 +V128=149 +SPACE=150 +COMMENT=151 +'('=1 +')'=2 +'funcref'=10 +'externref'=11 +'mut'=12 +'nop'=13 +'sym_assert'=14 +'alloc'=15 +'free'=16 +'unreachable'=17 +'drop'=18 +'block'=19 +'loop'=20 +'for'=21 +'|'=22 +'end'=23 +'br'=24 +'br_if'=25 +'br_table'=26 +'return'=27 +'if'=28 +'then'=29 +'else'=30 +'.select'=31 +'call'=32 +'call_indirect'=33 +'return_call'=34 +'return_call_indirect'=35 +'local.get'=36 +'local.set'=37 +'local.tee'=38 +'global.get'=39 +'global.set'=40 +'_'=43 +'offset='=44 +'align='=45 +'i32'=48 +'i64'=49 +'f32'=50 +'f64'=51 +'.eqz'=54 +'.eq'=55 +'.ne'=56 +'.lt'=57 +'.lt_s'=58 +'.lt_u'=59 +'.le'=60 +'.le_s'=61 +'.le_u'=62 +'.gt'=63 +'.gt_s'=64 +'.gt_u'=65 +'.ge'=66 +'.ge_s'=67 +'.ge_u'=68 +'.clz'=69 +'.ctz'=70 +'.popcnt'=71 +'.neg'=72 +'.abs'=73 +'.sqrt'=74 +'.ceil'=75 +'.floor'=76 +'.trunc'=77 +'.nearest'=78 +'.add'=79 +'.sub'=80 +'.mul'=81 +'.div'=82 +'.div_s'=83 +'.div_u'=84 +'.rem_s'=85 +'.rem_u'=86 +'.and'=87 +'.or'=88 +'.xor'=89 +'.shl'=90 +'.shr_s'=91 +'.shr_u'=92 +'.rotl'=93 +'.rotr'=94 +'.min'=95 +'.max'=96 +'.copysign'=97 +'.wrap_'=98 +'.trunc_'=99 +'.trunc_sat_'=100 +'.convert_'=101 +'.extend_'=102 +'.demote_'=103 +'.promote_'=104 +'.reinterpret_'=105 +'memory.size'=106 +'memory.grow'=107 +'memory.fill'=108 +'memory.copy'=109 +'memory.init'=110 +'type'=116 +'func'=117 +'extern'=118 +'start'=119 +'param'=120 +'result'=121 +'local'=122 +'global'=123 +'table'=124 +'memory'=125 +'elem'=126 +'data'=127 +'offset'=128 +'import'=129 +'export'=130 +'module'=131 +'binary'=132 +'quote'=133 +'script'=134 +'register'=135 +'invoke'=136 +'get'=137 +'assert_malformed'=138 +'assert_invalid'=139 +'assert_unlinkable'=140 +'assert_return'=141 +'assert_return_canonical_nan'=142 +'assert_return_arithmetic_nan'=143 +'assert_trap'=144 +'assert_exhaustion'=145 +'input'=146 +'output'=147 +'v128'=149 diff --git a/grammar/WatParser.interp b/grammar/WatParser.interp new file mode 100644 index 000000000..53c1592b0 --- /dev/null +++ b/grammar/WatParser.interp @@ -0,0 +1,385 @@ +token literal names: +null +'(' +')' +null +null +null +null +null +null +null +'funcref' +'externref' +'mut' +'nop' +'sym_assert' +'alloc' +'free' +'unreachable' +'drop' +'block' +'loop' +'for' +'|' +'end' +'br' +'br_if' +'br_table' +'return' +'if' +'then' +'else' +'.select' +'call' +'call_indirect' +'return_call' +'return_call_indirect' +'local.get' +'local.set' +'local.tee' +'global.get' +'global.set' +null +null +'_' +'offset=' +'align=' +null +null +'i32' +'i64' +'f32' +'f64' +null +null +'.eqz' +'.eq' +'.ne' +'.lt' +'.lt_s' +'.lt_u' +'.le' +'.le_s' +'.le_u' +'.gt' +'.gt_s' +'.gt_u' +'.ge' +'.ge_s' +'.ge_u' +'.clz' +'.ctz' +'.popcnt' +'.neg' +'.abs' +'.sqrt' +'.ceil' +'.floor' +'.trunc' +'.nearest' +'.add' +'.sub' +'.mul' +'.div' +'.div_s' +'.div_u' +'.rem_s' +'.rem_u' +'.and' +'.or' +'.xor' +'.shl' +'.shr_s' +'.shr_u' +'.rotl' +'.rotr' +'.min' +'.max' +'.copysign' +'.wrap_' +'.trunc_' +'.trunc_sat_' +'.convert_' +'.extend_' +'.demote_' +'.promote_' +'.reinterpret_' +'memory.size' +'memory.grow' +'memory.fill' +'memory.copy' +'memory.init' +null +null +null +null +null +'type' +'func' +'extern' +'start' +'param' +'result' +'local' +'global' +'table' +'memory' +'elem' +'data' +'offset' +'import' +'export' +'module' +'binary' +'quote' +'script' +'register' +'invoke' +'get' +'assert_malformed' +'assert_invalid' +'assert_unlinkable' +'assert_return' +'assert_return_canonical_nan' +'assert_return_arithmetic_nan' +'assert_trap' +'assert_exhaustion' +'input' +'output' +null +'v128' +null +null + +token symbolic names: +null +LPAR +RPAR +NAT +INT +FLOAT +STRING_ +VALUE_TYPE +CONST +SYMBOLIC +FUNCREF +EXTERNREF +MUT +NOP +SYM_ASSERT +ALLOC +FREE +UNREACHABLE +DROP +BLOCK +LOOP +FOR +VBAR +END +BR +BR_IF +BR_TABLE +RETURN +IF +THEN +ELSE +SELECT +CALL +CALL_INDIRECT +RETURN_CALL +RETURN_CALL_INDIRECT +LOCAL_GET +LOCAL_SET +LOCAL_TEE +GLOBAL_GET +GLOBAL_SET +LOAD +STORE +UNDERSCORE +OFFSET_EQ +ALIGN_EQ +SIGN_POSTFIX +MEM_SIZE +I32 +I64 +F32 +F64 +IXX +FXX +OP_EQZ +OP_EQ +OP_NE +OP_LT +OP_LTS +OP_LTU +OP_LE +OP_LES +OP_LEU +OP_GT +OP_GTS +OP_GTU +OP_GE +OP_GES +OP_GEU +OP_CLZ +OP_CTZ +OP_POPCNT +OP_NEG +OP_ABS +OP_SQRT +OP_CEIL +OP_FLOOR +OP_TRUNC +OP_NEAREST +OP_ADD +OP_SUB +OP_MUL +OP_DIV +OP_DIV_S +OP_DIV_U +OP_REM_S +OP_REM_U +OP_AND +OP_OR +OP_XOR +OP_SHL +OP_SHR_S +OP_SHR_U +OP_ROTL +OP_ROTR +OP_MIN +OP_MAX +OP_COPYSIGN +OP_WRAP +OP_TRUNC_ +OP_TRUNC_SAT +OP_CONVERT +OP_EXTEND +OP_DEMOTE +OP_PROMOTE +OP_REINTER +MEMORY_SIZE +MEMORY_GROW +MEMORY_FILL +MEMORY_COPY +MEMORY_INIT +TEST +COMPARE +UNARY +BINARY +CONVERT +TYPE +FUNC +EXTERN +START_ +PARAM +RESULT +LOCAL +GLOBAL +TABLE +MEMORY +ELEM +DATA +OFFSET +IMPORT +EXPORT +MODULE +BIN +QUOTE +SCRIPT +REGISTER +INVOKE +GET +ASSERT_MALFORMED +ASSERT_INVALID +ASSERT_UNLINKABLE +ASSERT_RETURN +ASSERT_RETURN_CANONICAL_NAN +ASSERT_RETURN_ARITHMETIC_NAN +ASSERT_TRAP +ASSERT_EXHAUSTION +INPUT +OUTPUT +VAR +V128 +SPACE +COMMENT + +rule names: +value +name +numType +refType +vecType +valType +heapType +globalType +defType +funcParamType +funcResType +funcType +tableType +memoryType +typeUse +literal +idx +bindVar +instr +forLoop +plainInstr +offsetEq +alignEq +load +store +selectInstr +callIndirectInstr +callInstrParams +callInstrParamsInstr +callInstrResultsInstr +blockInstr +blockType +block +foldedInstr +expr +callExprType +callExprParams +callExprResults +instrList +constExpr +function +funcFields +funcFieldsBody +funcBody +offset +elem +table +tableField +data +memory +memoryField +global +globalField +importDesc +simport +inlineImport +exportDesc +export_ +inlineExport +typeDef +start_ +moduleField +module_ +scriptModule +action_ +assertion +cmd +meta +wconst +constList +script +module + + +atn: +[4, 1, 151, 1050, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 3, 5, 158, 8, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 168, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 5, 9, 178, 8, 9, 10, 9, 12, 9, 181, 9, 9, 1, 9, 1, 9, 1, 9, 3, 9, 186, 8, 9, 1, 9, 5, 9, 189, 8, 9, 10, 9, 12, 9, 192, 9, 9, 1, 10, 1, 10, 1, 10, 5, 10, 197, 8, 10, 10, 10, 12, 10, 200, 9, 10, 1, 10, 5, 10, 203, 8, 10, 10, 10, 12, 10, 206, 9, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 3, 12, 213, 8, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 219, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 236, 8, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 4, 20, 258, 8, 20, 11, 20, 12, 20, 259, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 279, 8, 20, 1, 20, 3, 20, 282, 8, 20, 1, 20, 1, 20, 3, 20, 286, 8, 20, 1, 20, 3, 20, 289, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 309, 8, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 322, 8, 23, 1, 24, 1, 24, 1, 24, 3, 24, 327, 8, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 3, 26, 334, 8, 26, 1, 26, 1, 26, 1, 26, 3, 26, 339, 8, 26, 1, 26, 3, 26, 342, 8, 26, 1, 27, 1, 27, 1, 27, 5, 27, 347, 8, 27, 10, 27, 12, 27, 350, 9, 27, 1, 27, 5, 27, 353, 8, 27, 10, 27, 12, 27, 356, 9, 27, 1, 27, 1, 27, 1, 27, 5, 27, 361, 8, 27, 10, 27, 12, 27, 364, 9, 27, 1, 27, 5, 27, 367, 8, 27, 10, 27, 12, 27, 370, 9, 27, 1, 28, 1, 28, 1, 28, 5, 28, 375, 8, 28, 10, 28, 12, 28, 378, 9, 28, 1, 28, 5, 28, 381, 8, 28, 10, 28, 12, 28, 384, 9, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 5, 29, 391, 8, 29, 10, 29, 12, 29, 394, 9, 29, 1, 29, 5, 29, 397, 8, 29, 10, 29, 12, 29, 400, 9, 29, 1, 29, 1, 29, 1, 30, 1, 30, 3, 30, 406, 8, 30, 1, 30, 1, 30, 1, 30, 3, 30, 411, 8, 30, 1, 30, 1, 30, 3, 30, 415, 8, 30, 1, 30, 1, 30, 1, 30, 3, 30, 420, 8, 30, 1, 30, 1, 30, 3, 30, 424, 8, 30, 1, 30, 1, 30, 1, 30, 3, 30, 429, 8, 30, 1, 30, 3, 30, 432, 8, 30, 1, 30, 1, 30, 3, 30, 436, 8, 30, 3, 30, 438, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 445, 8, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 451, 8, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 5, 34, 462, 8, 34, 10, 34, 12, 34, 465, 9, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 473, 8, 34, 1, 34, 1, 34, 1, 34, 3, 34, 478, 8, 34, 1, 34, 1, 34, 1, 34, 3, 34, 483, 8, 34, 1, 34, 1, 34, 5, 34, 487, 8, 34, 10, 34, 12, 34, 490, 9, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 500, 8, 34, 3, 34, 502, 8, 34, 1, 35, 3, 35, 505, 8, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 5, 36, 512, 8, 36, 10, 36, 12, 36, 515, 9, 36, 1, 36, 5, 36, 518, 8, 36, 10, 36, 12, 36, 521, 9, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 5, 37, 528, 8, 37, 10, 37, 12, 37, 531, 9, 37, 1, 37, 5, 37, 534, 8, 37, 10, 37, 12, 37, 537, 9, 37, 1, 37, 5, 37, 540, 8, 37, 10, 37, 12, 37, 543, 9, 37, 1, 38, 5, 38, 546, 8, 38, 10, 38, 12, 38, 549, 9, 38, 1, 38, 3, 38, 552, 8, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 3, 40, 559, 8, 40, 1, 40, 1, 40, 1, 40, 1, 41, 3, 41, 565, 8, 41, 1, 41, 1, 41, 1, 41, 3, 41, 570, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 577, 8, 41, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 5, 43, 585, 8, 43, 10, 43, 12, 43, 588, 9, 43, 1, 43, 1, 43, 1, 43, 3, 43, 593, 8, 43, 1, 43, 5, 43, 596, 8, 43, 10, 43, 12, 43, 599, 9, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 609, 8, 44, 1, 45, 1, 45, 1, 45, 3, 45, 614, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 620, 8, 45, 10, 45, 12, 45, 623, 9, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 630, 8, 45, 1, 45, 1, 45, 5, 45, 634, 8, 45, 10, 45, 12, 45, 637, 9, 45, 1, 45, 1, 45, 3, 45, 641, 8, 45, 1, 46, 1, 46, 1, 46, 3, 46, 646, 8, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 662, 8, 47, 10, 47, 12, 47, 665, 9, 47, 1, 47, 1, 47, 3, 47, 669, 8, 47, 1, 48, 1, 48, 1, 48, 3, 48, 674, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 680, 8, 48, 10, 48, 12, 48, 683, 9, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 690, 8, 48, 1, 48, 1, 48, 5, 48, 694, 8, 48, 10, 48, 12, 48, 697, 9, 48, 1, 48, 1, 48, 3, 48, 701, 8, 48, 1, 49, 1, 49, 1, 49, 3, 49, 706, 8, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 721, 8, 50, 10, 50, 12, 50, 724, 9, 50, 1, 50, 3, 50, 727, 8, 50, 1, 51, 1, 51, 1, 51, 3, 51, 732, 8, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 746, 8, 52, 1, 53, 1, 53, 1, 53, 3, 53, 751, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 759, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 767, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 775, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 783, 8, 53, 1, 53, 1, 53, 1, 53, 3, 53, 788, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 823, 8, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 3, 59, 839, 8, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 859, 8, 61, 1, 62, 1, 62, 1, 62, 3, 62, 864, 8, 62, 1, 62, 5, 62, 867, 8, 62, 10, 62, 12, 62, 870, 9, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 878, 8, 63, 1, 63, 1, 63, 5, 63, 882, 8, 63, 10, 63, 12, 63, 885, 9, 63, 1, 63, 3, 63, 888, 8, 63, 1, 64, 1, 64, 1, 64, 3, 64, 893, 8, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 902, 8, 64, 1, 64, 1, 64, 1, 64, 3, 64, 907, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 961, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 970, 8, 66, 1, 66, 1, 66, 1, 66, 3, 66, 975, 8, 66, 1, 67, 1, 67, 1, 67, 3, 67, 980, 8, 67, 1, 67, 5, 67, 983, 8, 67, 10, 67, 12, 67, 986, 9, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 992, 8, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 999, 8, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 1006, 8, 67, 1, 67, 3, 67, 1009, 8, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 5, 69, 1017, 8, 69, 10, 69, 12, 69, 1020, 9, 69, 1, 70, 5, 70, 1023, 8, 70, 10, 70, 12, 70, 1026, 9, 70, 1, 70, 1, 70, 4, 70, 1030, 8, 70, 11, 70, 12, 70, 1031, 1, 70, 1, 70, 3, 70, 1036, 8, 70, 1, 71, 1, 71, 1, 71, 1, 71, 5, 71, 1042, 8, 71, 10, 71, 12, 71, 1045, 9, 71, 1, 71, 3, 71, 1048, 8, 71, 1, 71, 0, 0, 72, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 0, 6, 1, 0, 4, 5, 1, 0, 10, 11, 1, 0, 117, 118, 1, 0, 3, 5, 2, 0, 3, 3, 148, 148, 1, 0, 132, 133, 1161, 0, 144, 1, 0, 0, 0, 2, 146, 1, 0, 0, 0, 4, 148, 1, 0, 0, 0, 6, 150, 1, 0, 0, 0, 8, 152, 1, 0, 0, 0, 10, 157, 1, 0, 0, 0, 12, 159, 1, 0, 0, 0, 14, 167, 1, 0, 0, 0, 16, 169, 1, 0, 0, 0, 18, 190, 1, 0, 0, 0, 20, 204, 1, 0, 0, 0, 22, 207, 1, 0, 0, 0, 24, 210, 1, 0, 0, 0, 26, 216, 1, 0, 0, 0, 28, 220, 1, 0, 0, 0, 30, 225, 1, 0, 0, 0, 32, 227, 1, 0, 0, 0, 34, 229, 1, 0, 0, 0, 36, 235, 1, 0, 0, 0, 38, 237, 1, 0, 0, 0, 40, 308, 1, 0, 0, 0, 42, 310, 1, 0, 0, 0, 44, 313, 1, 0, 0, 0, 46, 316, 1, 0, 0, 0, 48, 323, 1, 0, 0, 0, 50, 328, 1, 0, 0, 0, 52, 341, 1, 0, 0, 0, 54, 354, 1, 0, 0, 0, 56, 382, 1, 0, 0, 0, 58, 398, 1, 0, 0, 0, 60, 437, 1, 0, 0, 0, 62, 450, 1, 0, 0, 0, 64, 452, 1, 0, 0, 0, 66, 455, 1, 0, 0, 0, 68, 501, 1, 0, 0, 0, 70, 504, 1, 0, 0, 0, 72, 519, 1, 0, 0, 0, 74, 535, 1, 0, 0, 0, 76, 547, 1, 0, 0, 0, 78, 553, 1, 0, 0, 0, 80, 555, 1, 0, 0, 0, 82, 576, 1, 0, 0, 0, 84, 578, 1, 0, 0, 0, 86, 597, 1, 0, 0, 0, 88, 608, 1, 0, 0, 0, 90, 640, 1, 0, 0, 0, 92, 642, 1, 0, 0, 0, 94, 668, 1, 0, 0, 0, 96, 700, 1, 0, 0, 0, 98, 702, 1, 0, 0, 0, 100, 726, 1, 0, 0, 0, 102, 728, 1, 0, 0, 0, 104, 745, 1, 0, 0, 0, 106, 787, 1, 0, 0, 0, 108, 789, 1, 0, 0, 0, 110, 796, 1, 0, 0, 0, 112, 822, 1, 0, 0, 0, 114, 824, 1, 0, 0, 0, 116, 830, 1, 0, 0, 0, 118, 835, 1, 0, 0, 0, 120, 843, 1, 0, 0, 0, 122, 858, 1, 0, 0, 0, 124, 860, 1, 0, 0, 0, 126, 887, 1, 0, 0, 0, 128, 906, 1, 0, 0, 0, 130, 960, 1, 0, 0, 0, 132, 974, 1, 0, 0, 0, 134, 1008, 1, 0, 0, 0, 136, 1010, 1, 0, 0, 0, 138, 1018, 1, 0, 0, 0, 140, 1035, 1, 0, 0, 0, 142, 1047, 1, 0, 0, 0, 144, 145, 7, 0, 0, 0, 145, 1, 1, 0, 0, 0, 146, 147, 5, 6, 0, 0, 147, 3, 1, 0, 0, 0, 148, 149, 5, 7, 0, 0, 149, 5, 1, 0, 0, 0, 150, 151, 7, 1, 0, 0, 151, 7, 1, 0, 0, 0, 152, 153, 5, 149, 0, 0, 153, 9, 1, 0, 0, 0, 154, 158, 3, 4, 2, 0, 155, 158, 3, 8, 4, 0, 156, 158, 3, 6, 3, 0, 157, 154, 1, 0, 0, 0, 157, 155, 1, 0, 0, 0, 157, 156, 1, 0, 0, 0, 158, 11, 1, 0, 0, 0, 159, 160, 7, 2, 0, 0, 160, 13, 1, 0, 0, 0, 161, 168, 3, 10, 5, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 12, 0, 0, 164, 165, 3, 10, 5, 0, 165, 166, 5, 2, 0, 0, 166, 168, 1, 0, 0, 0, 167, 161, 1, 0, 0, 0, 167, 162, 1, 0, 0, 0, 168, 15, 1, 0, 0, 0, 169, 170, 5, 1, 0, 0, 170, 171, 5, 117, 0, 0, 171, 172, 3, 22, 11, 0, 172, 173, 5, 2, 0, 0, 173, 17, 1, 0, 0, 0, 174, 175, 5, 1, 0, 0, 175, 185, 5, 120, 0, 0, 176, 178, 3, 10, 5, 0, 177, 176, 1, 0, 0, 0, 178, 181, 1, 0, 0, 0, 179, 177, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 186, 1, 0, 0, 0, 181, 179, 1, 0, 0, 0, 182, 183, 3, 34, 17, 0, 183, 184, 3, 10, 5, 0, 184, 186, 1, 0, 0, 0, 185, 179, 1, 0, 0, 0, 185, 182, 1, 0, 0, 0, 186, 187, 1, 0, 0, 0, 187, 189, 5, 2, 0, 0, 188, 174, 1, 0, 0, 0, 189, 192, 1, 0, 0, 0, 190, 188, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 19, 1, 0, 0, 0, 192, 190, 1, 0, 0, 0, 193, 194, 5, 1, 0, 0, 194, 198, 5, 121, 0, 0, 195, 197, 3, 10, 5, 0, 196, 195, 1, 0, 0, 0, 197, 200, 1, 0, 0, 0, 198, 196, 1, 0, 0, 0, 198, 199, 1, 0, 0, 0, 199, 201, 1, 0, 0, 0, 200, 198, 1, 0, 0, 0, 201, 203, 5, 2, 0, 0, 202, 193, 1, 0, 0, 0, 203, 206, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 21, 1, 0, 0, 0, 206, 204, 1, 0, 0, 0, 207, 208, 3, 18, 9, 0, 208, 209, 3, 20, 10, 0, 209, 23, 1, 0, 0, 0, 210, 212, 5, 3, 0, 0, 211, 213, 5, 3, 0, 0, 212, 211, 1, 0, 0, 0, 212, 213, 1, 0, 0, 0, 213, 214, 1, 0, 0, 0, 214, 215, 3, 6, 3, 0, 215, 25, 1, 0, 0, 0, 216, 218, 5, 3, 0, 0, 217, 219, 5, 3, 0, 0, 218, 217, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 27, 1, 0, 0, 0, 220, 221, 5, 1, 0, 0, 221, 222, 5, 116, 0, 0, 222, 223, 3, 32, 16, 0, 223, 224, 5, 2, 0, 0, 224, 29, 1, 0, 0, 0, 225, 226, 7, 3, 0, 0, 226, 31, 1, 0, 0, 0, 227, 228, 7, 4, 0, 0, 228, 33, 1, 0, 0, 0, 229, 230, 5, 148, 0, 0, 230, 35, 1, 0, 0, 0, 231, 236, 3, 40, 20, 0, 232, 236, 3, 60, 30, 0, 233, 236, 3, 66, 33, 0, 234, 236, 3, 38, 19, 0, 235, 231, 1, 0, 0, 0, 235, 232, 1, 0, 0, 0, 235, 233, 1, 0, 0, 0, 235, 234, 1, 0, 0, 0, 236, 37, 1, 0, 0, 0, 237, 238, 5, 21, 0, 0, 238, 239, 5, 1, 0, 0, 239, 240, 3, 76, 38, 0, 240, 241, 5, 22, 0, 0, 241, 242, 3, 76, 38, 0, 242, 243, 5, 22, 0, 0, 243, 244, 3, 76, 38, 0, 244, 245, 5, 2, 0, 0, 245, 246, 3, 76, 38, 0, 246, 39, 1, 0, 0, 0, 247, 309, 5, 17, 0, 0, 248, 309, 5, 13, 0, 0, 249, 309, 5, 18, 0, 0, 250, 309, 3, 50, 25, 0, 251, 252, 5, 24, 0, 0, 252, 309, 3, 32, 16, 0, 253, 254, 5, 25, 0, 0, 254, 309, 3, 32, 16, 0, 255, 257, 5, 26, 0, 0, 256, 258, 3, 32, 16, 0, 257, 256, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 257, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 309, 1, 0, 0, 0, 261, 309, 5, 27, 0, 0, 262, 263, 5, 32, 0, 0, 263, 309, 3, 32, 16, 0, 264, 265, 5, 34, 0, 0, 265, 309, 3, 32, 16, 0, 266, 267, 5, 36, 0, 0, 267, 309, 3, 32, 16, 0, 268, 269, 5, 37, 0, 0, 269, 309, 3, 32, 16, 0, 270, 271, 5, 38, 0, 0, 271, 309, 3, 32, 16, 0, 272, 273, 5, 39, 0, 0, 273, 309, 3, 32, 16, 0, 274, 275, 5, 40, 0, 0, 275, 309, 3, 32, 16, 0, 276, 278, 3, 46, 23, 0, 277, 279, 3, 42, 21, 0, 278, 277, 1, 0, 0, 0, 278, 279, 1, 0, 0, 0, 279, 281, 1, 0, 0, 0, 280, 282, 3, 44, 22, 0, 281, 280, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 309, 1, 0, 0, 0, 283, 285, 3, 48, 24, 0, 284, 286, 3, 42, 21, 0, 285, 284, 1, 0, 0, 0, 285, 286, 1, 0, 0, 0, 286, 288, 1, 0, 0, 0, 287, 289, 3, 44, 22, 0, 288, 287, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 309, 1, 0, 0, 0, 290, 309, 5, 106, 0, 0, 291, 309, 5, 107, 0, 0, 292, 309, 5, 108, 0, 0, 293, 309, 5, 109, 0, 0, 294, 295, 5, 110, 0, 0, 295, 309, 3, 32, 16, 0, 296, 297, 5, 8, 0, 0, 297, 309, 3, 30, 15, 0, 298, 309, 5, 9, 0, 0, 299, 309, 5, 14, 0, 0, 300, 309, 5, 15, 0, 0, 301, 309, 5, 16, 0, 0, 302, 309, 5, 111, 0, 0, 303, 309, 5, 112, 0, 0, 304, 309, 5, 113, 0, 0, 305, 309, 5, 114, 0, 0, 306, 309, 5, 115, 0, 0, 307, 309, 3, 52, 26, 0, 308, 247, 1, 0, 0, 0, 308, 248, 1, 0, 0, 0, 308, 249, 1, 0, 0, 0, 308, 250, 1, 0, 0, 0, 308, 251, 1, 0, 0, 0, 308, 253, 1, 0, 0, 0, 308, 255, 1, 0, 0, 0, 308, 261, 1, 0, 0, 0, 308, 262, 1, 0, 0, 0, 308, 264, 1, 0, 0, 0, 308, 266, 1, 0, 0, 0, 308, 268, 1, 0, 0, 0, 308, 270, 1, 0, 0, 0, 308, 272, 1, 0, 0, 0, 308, 274, 1, 0, 0, 0, 308, 276, 1, 0, 0, 0, 308, 283, 1, 0, 0, 0, 308, 290, 1, 0, 0, 0, 308, 291, 1, 0, 0, 0, 308, 292, 1, 0, 0, 0, 308, 293, 1, 0, 0, 0, 308, 294, 1, 0, 0, 0, 308, 296, 1, 0, 0, 0, 308, 298, 1, 0, 0, 0, 308, 299, 1, 0, 0, 0, 308, 300, 1, 0, 0, 0, 308, 301, 1, 0, 0, 0, 308, 302, 1, 0, 0, 0, 308, 303, 1, 0, 0, 0, 308, 304, 1, 0, 0, 0, 308, 305, 1, 0, 0, 0, 308, 306, 1, 0, 0, 0, 308, 307, 1, 0, 0, 0, 309, 41, 1, 0, 0, 0, 310, 311, 5, 44, 0, 0, 311, 312, 5, 3, 0, 0, 312, 43, 1, 0, 0, 0, 313, 314, 5, 45, 0, 0, 314, 315, 5, 3, 0, 0, 315, 45, 1, 0, 0, 0, 316, 317, 3, 4, 2, 0, 317, 321, 5, 41, 0, 0, 318, 319, 5, 47, 0, 0, 319, 320, 5, 43, 0, 0, 320, 322, 5, 46, 0, 0, 321, 318, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 47, 1, 0, 0, 0, 323, 324, 3, 4, 2, 0, 324, 326, 5, 42, 0, 0, 325, 327, 5, 47, 0, 0, 326, 325, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 49, 1, 0, 0, 0, 328, 329, 3, 4, 2, 0, 329, 330, 5, 31, 0, 0, 330, 51, 1, 0, 0, 0, 331, 333, 5, 33, 0, 0, 332, 334, 3, 32, 16, 0, 333, 332, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 342, 3, 28, 14, 0, 336, 338, 5, 35, 0, 0, 337, 339, 3, 32, 16, 0, 338, 337, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 342, 3, 28, 14, 0, 341, 331, 1, 0, 0, 0, 341, 336, 1, 0, 0, 0, 342, 53, 1, 0, 0, 0, 343, 344, 5, 1, 0, 0, 344, 348, 5, 120, 0, 0, 345, 347, 3, 10, 5, 0, 346, 345, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 351, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 351, 353, 5, 2, 0, 0, 352, 343, 1, 0, 0, 0, 353, 356, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 368, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 357, 358, 5, 1, 0, 0, 358, 362, 5, 121, 0, 0, 359, 361, 3, 10, 5, 0, 360, 359, 1, 0, 0, 0, 361, 364, 1, 0, 0, 0, 362, 360, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 365, 1, 0, 0, 0, 364, 362, 1, 0, 0, 0, 365, 367, 5, 2, 0, 0, 366, 357, 1, 0, 0, 0, 367, 370, 1, 0, 0, 0, 368, 366, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 55, 1, 0, 0, 0, 370, 368, 1, 0, 0, 0, 371, 372, 5, 1, 0, 0, 372, 376, 5, 120, 0, 0, 373, 375, 3, 10, 5, 0, 374, 373, 1, 0, 0, 0, 375, 378, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 379, 1, 0, 0, 0, 378, 376, 1, 0, 0, 0, 379, 381, 5, 2, 0, 0, 380, 371, 1, 0, 0, 0, 381, 384, 1, 0, 0, 0, 382, 380, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 385, 1, 0, 0, 0, 384, 382, 1, 0, 0, 0, 385, 386, 3, 58, 29, 0, 386, 57, 1, 0, 0, 0, 387, 388, 5, 1, 0, 0, 388, 392, 5, 121, 0, 0, 389, 391, 3, 10, 5, 0, 390, 389, 1, 0, 0, 0, 391, 394, 1, 0, 0, 0, 392, 390, 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 393, 395, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 395, 397, 5, 2, 0, 0, 396, 387, 1, 0, 0, 0, 397, 400, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 398, 399, 1, 0, 0, 0, 399, 401, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 401, 402, 3, 36, 18, 0, 402, 59, 1, 0, 0, 0, 403, 405, 5, 19, 0, 0, 404, 406, 3, 34, 17, 0, 405, 404, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 407, 1, 0, 0, 0, 407, 408, 3, 64, 32, 0, 408, 410, 5, 23, 0, 0, 409, 411, 3, 34, 17, 0, 410, 409, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 438, 1, 0, 0, 0, 412, 414, 5, 20, 0, 0, 413, 415, 3, 34, 17, 0, 414, 413, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 417, 3, 64, 32, 0, 417, 419, 5, 23, 0, 0, 418, 420, 3, 34, 17, 0, 419, 418, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 438, 1, 0, 0, 0, 421, 423, 5, 28, 0, 0, 422, 424, 3, 34, 17, 0, 423, 422, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 431, 3, 64, 32, 0, 426, 428, 5, 30, 0, 0, 427, 429, 3, 34, 17, 0, 428, 427, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 432, 3, 76, 38, 0, 431, 426, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 433, 435, 5, 23, 0, 0, 434, 436, 3, 34, 17, 0, 435, 434, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 438, 1, 0, 0, 0, 437, 403, 1, 0, 0, 0, 437, 412, 1, 0, 0, 0, 437, 421, 1, 0, 0, 0, 438, 61, 1, 0, 0, 0, 439, 440, 5, 1, 0, 0, 440, 441, 5, 121, 0, 0, 441, 442, 3, 10, 5, 0, 442, 443, 5, 2, 0, 0, 443, 445, 1, 0, 0, 0, 444, 439, 1, 0, 0, 0, 444, 445, 1, 0, 0, 0, 445, 451, 1, 0, 0, 0, 446, 447, 3, 28, 14, 0, 447, 448, 3, 22, 11, 0, 448, 451, 1, 0, 0, 0, 449, 451, 3, 22, 11, 0, 450, 444, 1, 0, 0, 0, 450, 446, 1, 0, 0, 0, 450, 449, 1, 0, 0, 0, 451, 63, 1, 0, 0, 0, 452, 453, 3, 62, 31, 0, 453, 454, 3, 76, 38, 0, 454, 65, 1, 0, 0, 0, 455, 456, 5, 1, 0, 0, 456, 457, 3, 68, 34, 0, 457, 458, 5, 2, 0, 0, 458, 67, 1, 0, 0, 0, 459, 463, 3, 40, 20, 0, 460, 462, 3, 68, 34, 0, 461, 460, 1, 0, 0, 0, 462, 465, 1, 0, 0, 0, 463, 461, 1, 0, 0, 0, 463, 464, 1, 0, 0, 0, 464, 502, 1, 0, 0, 0, 465, 463, 1, 0, 0, 0, 466, 467, 5, 33, 0, 0, 467, 502, 3, 70, 35, 0, 468, 469, 5, 35, 0, 0, 469, 502, 3, 70, 35, 0, 470, 472, 5, 19, 0, 0, 471, 473, 3, 34, 17, 0, 472, 471, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 474, 1, 0, 0, 0, 474, 502, 3, 64, 32, 0, 475, 477, 5, 20, 0, 0, 476, 478, 3, 34, 17, 0, 477, 476, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 502, 3, 64, 32, 0, 480, 482, 5, 28, 0, 0, 481, 483, 3, 34, 17, 0, 482, 481, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 488, 3, 62, 31, 0, 485, 487, 3, 66, 33, 0, 486, 485, 1, 0, 0, 0, 487, 490, 1, 0, 0, 0, 488, 486, 1, 0, 0, 0, 488, 489, 1, 0, 0, 0, 489, 491, 1, 0, 0, 0, 490, 488, 1, 0, 0, 0, 491, 492, 5, 1, 0, 0, 492, 493, 5, 29, 0, 0, 493, 499, 3, 76, 38, 0, 494, 495, 5, 1, 0, 0, 495, 496, 5, 30, 0, 0, 496, 497, 3, 76, 38, 0, 497, 498, 5, 2, 0, 0, 498, 500, 1, 0, 0, 0, 499, 494, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 502, 1, 0, 0, 0, 501, 459, 1, 0, 0, 0, 501, 466, 1, 0, 0, 0, 501, 468, 1, 0, 0, 0, 501, 470, 1, 0, 0, 0, 501, 475, 1, 0, 0, 0, 501, 480, 1, 0, 0, 0, 502, 69, 1, 0, 0, 0, 503, 505, 3, 28, 14, 0, 504, 503, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 507, 3, 72, 36, 0, 507, 71, 1, 0, 0, 0, 508, 509, 5, 1, 0, 0, 509, 513, 5, 120, 0, 0, 510, 512, 3, 10, 5, 0, 511, 510, 1, 0, 0, 0, 512, 515, 1, 0, 0, 0, 513, 511, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 514, 516, 1, 0, 0, 0, 515, 513, 1, 0, 0, 0, 516, 518, 5, 2, 0, 0, 517, 508, 1, 0, 0, 0, 518, 521, 1, 0, 0, 0, 519, 517, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 522, 1, 0, 0, 0, 521, 519, 1, 0, 0, 0, 522, 523, 3, 74, 37, 0, 523, 73, 1, 0, 0, 0, 524, 525, 5, 1, 0, 0, 525, 529, 5, 121, 0, 0, 526, 528, 3, 10, 5, 0, 527, 526, 1, 0, 0, 0, 528, 531, 1, 0, 0, 0, 529, 527, 1, 0, 0, 0, 529, 530, 1, 0, 0, 0, 530, 532, 1, 0, 0, 0, 531, 529, 1, 0, 0, 0, 532, 534, 5, 2, 0, 0, 533, 524, 1, 0, 0, 0, 534, 537, 1, 0, 0, 0, 535, 533, 1, 0, 0, 0, 535, 536, 1, 0, 0, 0, 536, 541, 1, 0, 0, 0, 537, 535, 1, 0, 0, 0, 538, 540, 3, 68, 34, 0, 539, 538, 1, 0, 0, 0, 540, 543, 1, 0, 0, 0, 541, 539, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 75, 1, 0, 0, 0, 543, 541, 1, 0, 0, 0, 544, 546, 3, 36, 18, 0, 545, 544, 1, 0, 0, 0, 546, 549, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, 551, 1, 0, 0, 0, 549, 547, 1, 0, 0, 0, 550, 552, 3, 52, 26, 0, 551, 550, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 77, 1, 0, 0, 0, 553, 554, 3, 76, 38, 0, 554, 79, 1, 0, 0, 0, 555, 556, 5, 1, 0, 0, 556, 558, 5, 117, 0, 0, 557, 559, 3, 34, 17, 0, 558, 557, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 560, 1, 0, 0, 0, 560, 561, 3, 82, 41, 0, 561, 562, 5, 2, 0, 0, 562, 81, 1, 0, 0, 0, 563, 565, 3, 28, 14, 0, 564, 563, 1, 0, 0, 0, 564, 565, 1, 0, 0, 0, 565, 566, 1, 0, 0, 0, 566, 577, 3, 84, 42, 0, 567, 569, 3, 110, 55, 0, 568, 570, 3, 28, 14, 0, 569, 568, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 571, 1, 0, 0, 0, 571, 572, 3, 22, 11, 0, 572, 577, 1, 0, 0, 0, 573, 574, 3, 116, 58, 0, 574, 575, 3, 82, 41, 0, 575, 577, 1, 0, 0, 0, 576, 564, 1, 0, 0, 0, 576, 567, 1, 0, 0, 0, 576, 573, 1, 0, 0, 0, 577, 83, 1, 0, 0, 0, 578, 579, 3, 22, 11, 0, 579, 580, 3, 86, 43, 0, 580, 85, 1, 0, 0, 0, 581, 582, 5, 1, 0, 0, 582, 592, 5, 122, 0, 0, 583, 585, 3, 10, 5, 0, 584, 583, 1, 0, 0, 0, 585, 588, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 593, 1, 0, 0, 0, 588, 586, 1, 0, 0, 0, 589, 590, 3, 34, 17, 0, 590, 591, 3, 10, 5, 0, 591, 593, 1, 0, 0, 0, 592, 586, 1, 0, 0, 0, 592, 589, 1, 0, 0, 0, 593, 594, 1, 0, 0, 0, 594, 596, 5, 2, 0, 0, 595, 581, 1, 0, 0, 0, 596, 599, 1, 0, 0, 0, 597, 595, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 600, 1, 0, 0, 0, 599, 597, 1, 0, 0, 0, 600, 601, 3, 76, 38, 0, 601, 87, 1, 0, 0, 0, 602, 603, 5, 1, 0, 0, 603, 604, 5, 128, 0, 0, 604, 605, 3, 78, 39, 0, 605, 606, 5, 2, 0, 0, 606, 609, 1, 0, 0, 0, 607, 609, 3, 68, 34, 0, 608, 602, 1, 0, 0, 0, 608, 607, 1, 0, 0, 0, 609, 89, 1, 0, 0, 0, 610, 611, 5, 1, 0, 0, 611, 613, 5, 126, 0, 0, 612, 614, 3, 32, 16, 0, 613, 612, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 616, 5, 1, 0, 0, 616, 617, 3, 36, 18, 0, 617, 621, 5, 2, 0, 0, 618, 620, 3, 32, 16, 0, 619, 618, 1, 0, 0, 0, 620, 623, 1, 0, 0, 0, 621, 619, 1, 0, 0, 0, 621, 622, 1, 0, 0, 0, 622, 624, 1, 0, 0, 0, 623, 621, 1, 0, 0, 0, 624, 625, 5, 2, 0, 0, 625, 641, 1, 0, 0, 0, 626, 627, 5, 1, 0, 0, 627, 629, 5, 126, 0, 0, 628, 630, 3, 32, 16, 0, 629, 628, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 635, 3, 88, 44, 0, 632, 634, 3, 32, 16, 0, 633, 632, 1, 0, 0, 0, 634, 637, 1, 0, 0, 0, 635, 633, 1, 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 638, 1, 0, 0, 0, 637, 635, 1, 0, 0, 0, 638, 639, 5, 2, 0, 0, 639, 641, 1, 0, 0, 0, 640, 610, 1, 0, 0, 0, 640, 626, 1, 0, 0, 0, 641, 91, 1, 0, 0, 0, 642, 643, 5, 1, 0, 0, 643, 645, 5, 124, 0, 0, 644, 646, 3, 34, 17, 0, 645, 644, 1, 0, 0, 0, 645, 646, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 648, 3, 94, 47, 0, 648, 649, 5, 2, 0, 0, 649, 93, 1, 0, 0, 0, 650, 669, 3, 24, 12, 0, 651, 652, 3, 110, 55, 0, 652, 653, 3, 24, 12, 0, 653, 669, 1, 0, 0, 0, 654, 655, 3, 116, 58, 0, 655, 656, 3, 94, 47, 0, 656, 669, 1, 0, 0, 0, 657, 658, 3, 6, 3, 0, 658, 659, 5, 1, 0, 0, 659, 663, 5, 126, 0, 0, 660, 662, 3, 32, 16, 0, 661, 660, 1, 0, 0, 0, 662, 665, 1, 0, 0, 0, 663, 661, 1, 0, 0, 0, 663, 664, 1, 0, 0, 0, 664, 666, 1, 0, 0, 0, 665, 663, 1, 0, 0, 0, 666, 667, 5, 2, 0, 0, 667, 669, 1, 0, 0, 0, 668, 650, 1, 0, 0, 0, 668, 651, 1, 0, 0, 0, 668, 654, 1, 0, 0, 0, 668, 657, 1, 0, 0, 0, 669, 95, 1, 0, 0, 0, 670, 671, 5, 1, 0, 0, 671, 673, 5, 127, 0, 0, 672, 674, 3, 32, 16, 0, 673, 672, 1, 0, 0, 0, 673, 674, 1, 0, 0, 0, 674, 675, 1, 0, 0, 0, 675, 676, 5, 1, 0, 0, 676, 677, 3, 36, 18, 0, 677, 681, 5, 2, 0, 0, 678, 680, 5, 6, 0, 0, 679, 678, 1, 0, 0, 0, 680, 683, 1, 0, 0, 0, 681, 679, 1, 0, 0, 0, 681, 682, 1, 0, 0, 0, 682, 684, 1, 0, 0, 0, 683, 681, 1, 0, 0, 0, 684, 685, 5, 2, 0, 0, 685, 701, 1, 0, 0, 0, 686, 687, 5, 1, 0, 0, 687, 689, 5, 127, 0, 0, 688, 690, 3, 32, 16, 0, 689, 688, 1, 0, 0, 0, 689, 690, 1, 0, 0, 0, 690, 691, 1, 0, 0, 0, 691, 695, 3, 88, 44, 0, 692, 694, 5, 6, 0, 0, 693, 692, 1, 0, 0, 0, 694, 697, 1, 0, 0, 0, 695, 693, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 698, 1, 0, 0, 0, 697, 695, 1, 0, 0, 0, 698, 699, 5, 2, 0, 0, 699, 701, 1, 0, 0, 0, 700, 670, 1, 0, 0, 0, 700, 686, 1, 0, 0, 0, 701, 97, 1, 0, 0, 0, 702, 703, 5, 1, 0, 0, 703, 705, 5, 125, 0, 0, 704, 706, 3, 34, 17, 0, 705, 704, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 707, 1, 0, 0, 0, 707, 708, 3, 100, 50, 0, 708, 709, 5, 2, 0, 0, 709, 99, 1, 0, 0, 0, 710, 727, 3, 26, 13, 0, 711, 712, 3, 110, 55, 0, 712, 713, 3, 26, 13, 0, 713, 727, 1, 0, 0, 0, 714, 715, 3, 116, 58, 0, 715, 716, 3, 100, 50, 0, 716, 727, 1, 0, 0, 0, 717, 718, 5, 1, 0, 0, 718, 722, 5, 127, 0, 0, 719, 721, 5, 6, 0, 0, 720, 719, 1, 0, 0, 0, 721, 724, 1, 0, 0, 0, 722, 720, 1, 0, 0, 0, 722, 723, 1, 0, 0, 0, 723, 725, 1, 0, 0, 0, 724, 722, 1, 0, 0, 0, 725, 727, 5, 2, 0, 0, 726, 710, 1, 0, 0, 0, 726, 711, 1, 0, 0, 0, 726, 714, 1, 0, 0, 0, 726, 717, 1, 0, 0, 0, 727, 101, 1, 0, 0, 0, 728, 729, 5, 1, 0, 0, 729, 731, 5, 123, 0, 0, 730, 732, 3, 34, 17, 0, 731, 730, 1, 0, 0, 0, 731, 732, 1, 0, 0, 0, 732, 733, 1, 0, 0, 0, 733, 734, 3, 104, 52, 0, 734, 735, 5, 2, 0, 0, 735, 103, 1, 0, 0, 0, 736, 737, 3, 14, 7, 0, 737, 738, 3, 78, 39, 0, 738, 746, 1, 0, 0, 0, 739, 740, 3, 110, 55, 0, 740, 741, 3, 14, 7, 0, 741, 746, 1, 0, 0, 0, 742, 743, 3, 116, 58, 0, 743, 744, 3, 104, 52, 0, 744, 746, 1, 0, 0, 0, 745, 736, 1, 0, 0, 0, 745, 739, 1, 0, 0, 0, 745, 742, 1, 0, 0, 0, 746, 105, 1, 0, 0, 0, 747, 748, 5, 1, 0, 0, 748, 750, 5, 117, 0, 0, 749, 751, 3, 34, 17, 0, 750, 749, 1, 0, 0, 0, 750, 751, 1, 0, 0, 0, 751, 752, 1, 0, 0, 0, 752, 753, 3, 28, 14, 0, 753, 754, 5, 2, 0, 0, 754, 788, 1, 0, 0, 0, 755, 756, 5, 1, 0, 0, 756, 758, 5, 117, 0, 0, 757, 759, 3, 34, 17, 0, 758, 757, 1, 0, 0, 0, 758, 759, 1, 0, 0, 0, 759, 760, 1, 0, 0, 0, 760, 761, 3, 22, 11, 0, 761, 762, 5, 2, 0, 0, 762, 788, 1, 0, 0, 0, 763, 764, 5, 1, 0, 0, 764, 766, 5, 124, 0, 0, 765, 767, 3, 34, 17, 0, 766, 765, 1, 0, 0, 0, 766, 767, 1, 0, 0, 0, 767, 768, 1, 0, 0, 0, 768, 769, 3, 24, 12, 0, 769, 770, 5, 2, 0, 0, 770, 788, 1, 0, 0, 0, 771, 772, 5, 1, 0, 0, 772, 774, 5, 125, 0, 0, 773, 775, 3, 34, 17, 0, 774, 773, 1, 0, 0, 0, 774, 775, 1, 0, 0, 0, 775, 776, 1, 0, 0, 0, 776, 777, 3, 26, 13, 0, 777, 778, 5, 2, 0, 0, 778, 788, 1, 0, 0, 0, 779, 780, 5, 1, 0, 0, 780, 782, 5, 123, 0, 0, 781, 783, 3, 34, 17, 0, 782, 781, 1, 0, 0, 0, 782, 783, 1, 0, 0, 0, 783, 784, 1, 0, 0, 0, 784, 785, 3, 14, 7, 0, 785, 786, 5, 2, 0, 0, 786, 788, 1, 0, 0, 0, 787, 747, 1, 0, 0, 0, 787, 755, 1, 0, 0, 0, 787, 763, 1, 0, 0, 0, 787, 771, 1, 0, 0, 0, 787, 779, 1, 0, 0, 0, 788, 107, 1, 0, 0, 0, 789, 790, 5, 1, 0, 0, 790, 791, 5, 129, 0, 0, 791, 792, 3, 2, 1, 0, 792, 793, 3, 2, 1, 0, 793, 794, 3, 106, 53, 0, 794, 795, 5, 2, 0, 0, 795, 109, 1, 0, 0, 0, 796, 797, 5, 1, 0, 0, 797, 798, 5, 129, 0, 0, 798, 799, 3, 2, 1, 0, 799, 800, 3, 2, 1, 0, 800, 801, 5, 2, 0, 0, 801, 111, 1, 0, 0, 0, 802, 803, 5, 1, 0, 0, 803, 804, 5, 117, 0, 0, 804, 805, 3, 32, 16, 0, 805, 806, 5, 2, 0, 0, 806, 823, 1, 0, 0, 0, 807, 808, 5, 1, 0, 0, 808, 809, 5, 124, 0, 0, 809, 810, 3, 32, 16, 0, 810, 811, 5, 2, 0, 0, 811, 823, 1, 0, 0, 0, 812, 813, 5, 1, 0, 0, 813, 814, 5, 125, 0, 0, 814, 815, 3, 32, 16, 0, 815, 816, 5, 2, 0, 0, 816, 823, 1, 0, 0, 0, 817, 818, 5, 1, 0, 0, 818, 819, 5, 123, 0, 0, 819, 820, 3, 32, 16, 0, 820, 821, 5, 2, 0, 0, 821, 823, 1, 0, 0, 0, 822, 802, 1, 0, 0, 0, 822, 807, 1, 0, 0, 0, 822, 812, 1, 0, 0, 0, 822, 817, 1, 0, 0, 0, 823, 113, 1, 0, 0, 0, 824, 825, 5, 1, 0, 0, 825, 826, 5, 130, 0, 0, 826, 827, 3, 2, 1, 0, 827, 828, 3, 112, 56, 0, 828, 829, 5, 2, 0, 0, 829, 115, 1, 0, 0, 0, 830, 831, 5, 1, 0, 0, 831, 832, 5, 130, 0, 0, 832, 833, 3, 2, 1, 0, 833, 834, 5, 2, 0, 0, 834, 117, 1, 0, 0, 0, 835, 836, 5, 1, 0, 0, 836, 838, 5, 116, 0, 0, 837, 839, 3, 34, 17, 0, 838, 837, 1, 0, 0, 0, 838, 839, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 841, 3, 16, 8, 0, 841, 842, 5, 2, 0, 0, 842, 119, 1, 0, 0, 0, 843, 844, 5, 1, 0, 0, 844, 845, 5, 119, 0, 0, 845, 846, 3, 32, 16, 0, 846, 847, 5, 2, 0, 0, 847, 121, 1, 0, 0, 0, 848, 859, 3, 118, 59, 0, 849, 859, 3, 102, 51, 0, 850, 859, 3, 92, 46, 0, 851, 859, 3, 98, 49, 0, 852, 859, 3, 80, 40, 0, 853, 859, 3, 90, 45, 0, 854, 859, 3, 96, 48, 0, 855, 859, 3, 120, 60, 0, 856, 859, 3, 108, 54, 0, 857, 859, 3, 114, 57, 0, 858, 848, 1, 0, 0, 0, 858, 849, 1, 0, 0, 0, 858, 850, 1, 0, 0, 0, 858, 851, 1, 0, 0, 0, 858, 852, 1, 0, 0, 0, 858, 853, 1, 0, 0, 0, 858, 854, 1, 0, 0, 0, 858, 855, 1, 0, 0, 0, 858, 856, 1, 0, 0, 0, 858, 857, 1, 0, 0, 0, 859, 123, 1, 0, 0, 0, 860, 861, 5, 1, 0, 0, 861, 863, 5, 131, 0, 0, 862, 864, 5, 148, 0, 0, 863, 862, 1, 0, 0, 0, 863, 864, 1, 0, 0, 0, 864, 868, 1, 0, 0, 0, 865, 867, 3, 122, 61, 0, 866, 865, 1, 0, 0, 0, 867, 870, 1, 0, 0, 0, 868, 866, 1, 0, 0, 0, 868, 869, 1, 0, 0, 0, 869, 871, 1, 0, 0, 0, 870, 868, 1, 0, 0, 0, 871, 872, 5, 2, 0, 0, 872, 125, 1, 0, 0, 0, 873, 888, 3, 124, 62, 0, 874, 875, 5, 1, 0, 0, 875, 877, 5, 131, 0, 0, 876, 878, 5, 148, 0, 0, 877, 876, 1, 0, 0, 0, 877, 878, 1, 0, 0, 0, 878, 879, 1, 0, 0, 0, 879, 883, 7, 5, 0, 0, 880, 882, 5, 6, 0, 0, 881, 880, 1, 0, 0, 0, 882, 885, 1, 0, 0, 0, 883, 881, 1, 0, 0, 0, 883, 884, 1, 0, 0, 0, 884, 886, 1, 0, 0, 0, 885, 883, 1, 0, 0, 0, 886, 888, 5, 2, 0, 0, 887, 873, 1, 0, 0, 0, 887, 874, 1, 0, 0, 0, 888, 127, 1, 0, 0, 0, 889, 890, 5, 1, 0, 0, 890, 892, 5, 136, 0, 0, 891, 893, 5, 148, 0, 0, 892, 891, 1, 0, 0, 0, 892, 893, 1, 0, 0, 0, 893, 894, 1, 0, 0, 0, 894, 895, 3, 2, 1, 0, 895, 896, 3, 138, 69, 0, 896, 897, 5, 2, 0, 0, 897, 907, 1, 0, 0, 0, 898, 899, 5, 1, 0, 0, 899, 901, 5, 137, 0, 0, 900, 902, 5, 148, 0, 0, 901, 900, 1, 0, 0, 0, 901, 902, 1, 0, 0, 0, 902, 903, 1, 0, 0, 0, 903, 904, 3, 2, 1, 0, 904, 905, 5, 2, 0, 0, 905, 907, 1, 0, 0, 0, 906, 889, 1, 0, 0, 0, 906, 898, 1, 0, 0, 0, 907, 129, 1, 0, 0, 0, 908, 909, 5, 1, 0, 0, 909, 910, 5, 138, 0, 0, 910, 911, 3, 126, 63, 0, 911, 912, 5, 6, 0, 0, 912, 913, 5, 2, 0, 0, 913, 961, 1, 0, 0, 0, 914, 915, 5, 1, 0, 0, 915, 916, 5, 139, 0, 0, 916, 917, 3, 126, 63, 0, 917, 918, 5, 6, 0, 0, 918, 919, 5, 2, 0, 0, 919, 961, 1, 0, 0, 0, 920, 921, 5, 1, 0, 0, 921, 922, 5, 140, 0, 0, 922, 923, 3, 126, 63, 0, 923, 924, 5, 6, 0, 0, 924, 925, 5, 2, 0, 0, 925, 961, 1, 0, 0, 0, 926, 927, 5, 1, 0, 0, 927, 928, 5, 144, 0, 0, 928, 929, 3, 126, 63, 0, 929, 930, 5, 6, 0, 0, 930, 931, 5, 2, 0, 0, 931, 961, 1, 0, 0, 0, 932, 933, 5, 1, 0, 0, 933, 934, 5, 141, 0, 0, 934, 935, 3, 128, 64, 0, 935, 936, 3, 138, 69, 0, 936, 937, 5, 2, 0, 0, 937, 961, 1, 0, 0, 0, 938, 939, 5, 1, 0, 0, 939, 940, 5, 142, 0, 0, 940, 941, 3, 128, 64, 0, 941, 942, 5, 2, 0, 0, 942, 961, 1, 0, 0, 0, 943, 944, 5, 1, 0, 0, 944, 945, 5, 143, 0, 0, 945, 946, 3, 128, 64, 0, 946, 947, 5, 2, 0, 0, 947, 961, 1, 0, 0, 0, 948, 949, 5, 1, 0, 0, 949, 950, 5, 144, 0, 0, 950, 951, 3, 128, 64, 0, 951, 952, 5, 6, 0, 0, 952, 953, 5, 2, 0, 0, 953, 961, 1, 0, 0, 0, 954, 955, 5, 1, 0, 0, 955, 956, 5, 145, 0, 0, 956, 957, 3, 128, 64, 0, 957, 958, 5, 6, 0, 0, 958, 959, 5, 2, 0, 0, 959, 961, 1, 0, 0, 0, 960, 908, 1, 0, 0, 0, 960, 914, 1, 0, 0, 0, 960, 920, 1, 0, 0, 0, 960, 926, 1, 0, 0, 0, 960, 932, 1, 0, 0, 0, 960, 938, 1, 0, 0, 0, 960, 943, 1, 0, 0, 0, 960, 948, 1, 0, 0, 0, 960, 954, 1, 0, 0, 0, 961, 131, 1, 0, 0, 0, 962, 975, 3, 128, 64, 0, 963, 975, 3, 130, 65, 0, 964, 975, 3, 126, 63, 0, 965, 966, 5, 1, 0, 0, 966, 967, 5, 135, 0, 0, 967, 969, 3, 2, 1, 0, 968, 970, 5, 148, 0, 0, 969, 968, 1, 0, 0, 0, 969, 970, 1, 0, 0, 0, 970, 971, 1, 0, 0, 0, 971, 972, 5, 2, 0, 0, 972, 975, 1, 0, 0, 0, 973, 975, 3, 134, 67, 0, 974, 962, 1, 0, 0, 0, 974, 963, 1, 0, 0, 0, 974, 964, 1, 0, 0, 0, 974, 965, 1, 0, 0, 0, 974, 973, 1, 0, 0, 0, 975, 133, 1, 0, 0, 0, 976, 977, 5, 1, 0, 0, 977, 979, 5, 134, 0, 0, 978, 980, 5, 148, 0, 0, 979, 978, 1, 0, 0, 0, 979, 980, 1, 0, 0, 0, 980, 984, 1, 0, 0, 0, 981, 983, 3, 132, 66, 0, 982, 981, 1, 0, 0, 0, 983, 986, 1, 0, 0, 0, 984, 982, 1, 0, 0, 0, 984, 985, 1, 0, 0, 0, 985, 987, 1, 0, 0, 0, 986, 984, 1, 0, 0, 0, 987, 1009, 5, 2, 0, 0, 988, 989, 5, 1, 0, 0, 989, 991, 5, 146, 0, 0, 990, 992, 5, 148, 0, 0, 991, 990, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 994, 5, 6, 0, 0, 994, 1009, 5, 2, 0, 0, 995, 996, 5, 1, 0, 0, 996, 998, 5, 147, 0, 0, 997, 999, 5, 148, 0, 0, 998, 997, 1, 0, 0, 0, 998, 999, 1, 0, 0, 0, 999, 1000, 1, 0, 0, 0, 1000, 1001, 5, 6, 0, 0, 1001, 1009, 5, 2, 0, 0, 1002, 1003, 5, 1, 0, 0, 1003, 1005, 5, 147, 0, 0, 1004, 1006, 5, 148, 0, 0, 1005, 1004, 1, 0, 0, 0, 1005, 1006, 1, 0, 0, 0, 1006, 1007, 1, 0, 0, 0, 1007, 1009, 5, 2, 0, 0, 1008, 976, 1, 0, 0, 0, 1008, 988, 1, 0, 0, 0, 1008, 995, 1, 0, 0, 0, 1008, 1002, 1, 0, 0, 0, 1009, 135, 1, 0, 0, 0, 1010, 1011, 5, 1, 0, 0, 1011, 1012, 5, 8, 0, 0, 1012, 1013, 3, 30, 15, 0, 1013, 1014, 5, 2, 0, 0, 1014, 137, 1, 0, 0, 0, 1015, 1017, 3, 136, 68, 0, 1016, 1015, 1, 0, 0, 0, 1017, 1020, 1, 0, 0, 0, 1018, 1016, 1, 0, 0, 0, 1018, 1019, 1, 0, 0, 0, 1019, 139, 1, 0, 0, 0, 1020, 1018, 1, 0, 0, 0, 1021, 1023, 3, 132, 66, 0, 1022, 1021, 1, 0, 0, 0, 1023, 1026, 1, 0, 0, 0, 1024, 1022, 1, 0, 0, 0, 1024, 1025, 1, 0, 0, 0, 1025, 1027, 1, 0, 0, 0, 1026, 1024, 1, 0, 0, 0, 1027, 1036, 5, 0, 0, 1, 1028, 1030, 3, 122, 61, 0, 1029, 1028, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 1029, 1, 0, 0, 0, 1031, 1032, 1, 0, 0, 0, 1032, 1033, 1, 0, 0, 0, 1033, 1034, 5, 0, 0, 1, 1034, 1036, 1, 0, 0, 0, 1035, 1024, 1, 0, 0, 0, 1035, 1029, 1, 0, 0, 0, 1036, 141, 1, 0, 0, 0, 1037, 1038, 3, 124, 62, 0, 1038, 1039, 5, 0, 0, 1, 1039, 1048, 1, 0, 0, 0, 1040, 1042, 3, 122, 61, 0, 1041, 1040, 1, 0, 0, 0, 1042, 1045, 1, 0, 0, 0, 1043, 1041, 1, 0, 0, 0, 1043, 1044, 1, 0, 0, 0, 1044, 1046, 1, 0, 0, 0, 1045, 1043, 1, 0, 0, 0, 1046, 1048, 5, 0, 0, 1, 1047, 1037, 1, 0, 0, 0, 1047, 1043, 1, 0, 0, 0, 1048, 143, 1, 0, 0, 0, 113, 157, 167, 179, 185, 190, 198, 204, 212, 218, 235, 259, 278, 281, 285, 288, 308, 321, 326, 333, 338, 341, 348, 354, 362, 368, 376, 382, 392, 398, 405, 410, 414, 419, 423, 428, 431, 435, 437, 444, 450, 463, 472, 477, 482, 488, 499, 501, 504, 513, 519, 529, 535, 541, 547, 551, 558, 564, 569, 576, 586, 592, 597, 608, 613, 621, 629, 635, 640, 645, 663, 668, 673, 681, 689, 695, 700, 705, 722, 726, 731, 745, 750, 758, 766, 774, 782, 787, 822, 838, 858, 863, 868, 877, 883, 887, 892, 901, 906, 960, 969, 974, 979, 984, 991, 998, 1005, 1008, 1018, 1024, 1031, 1035, 1043, 1047] \ No newline at end of file diff --git a/grammar/WatParser.java b/grammar/WatParser.java new file mode 100644 index 000000000..7f6d0c049 --- /dev/null +++ b/grammar/WatParser.java @@ -0,0 +1,7314 @@ +// Generated from WatParser.g4 by ANTLR 4.13.2 +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) +public class WatParser extends Parser { + static { RuntimeMetaData.checkVersion("4.13.2", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + LPAR=1, RPAR=2, NAT=3, INT=4, FLOAT=5, STRING_=6, VALUE_TYPE=7, CONST=8, + SYMBOLIC=9, FUNCREF=10, EXTERNREF=11, MUT=12, NOP=13, SYM_ASSERT=14, ALLOC=15, + FREE=16, UNREACHABLE=17, DROP=18, BLOCK=19, LOOP=20, FOR=21, VBAR=22, + END=23, BR=24, BR_IF=25, BR_TABLE=26, RETURN=27, IF=28, THEN=29, ELSE=30, + SELECT=31, CALL=32, CALL_INDIRECT=33, RETURN_CALL=34, RETURN_CALL_INDIRECT=35, + LOCAL_GET=36, LOCAL_SET=37, LOCAL_TEE=38, GLOBAL_GET=39, GLOBAL_SET=40, + LOAD=41, STORE=42, UNDERSCORE=43, OFFSET_EQ=44, ALIGN_EQ=45, SIGN_POSTFIX=46, + MEM_SIZE=47, I32=48, I64=49, F32=50, F64=51, IXX=52, FXX=53, OP_EQZ=54, + OP_EQ=55, OP_NE=56, OP_LT=57, OP_LTS=58, OP_LTU=59, OP_LE=60, OP_LES=61, + OP_LEU=62, OP_GT=63, OP_GTS=64, OP_GTU=65, OP_GE=66, OP_GES=67, OP_GEU=68, + OP_CLZ=69, OP_CTZ=70, OP_POPCNT=71, OP_NEG=72, OP_ABS=73, OP_SQRT=74, + OP_CEIL=75, OP_FLOOR=76, OP_TRUNC=77, OP_NEAREST=78, OP_ADD=79, OP_SUB=80, + OP_MUL=81, OP_DIV=82, OP_DIV_S=83, OP_DIV_U=84, OP_REM_S=85, OP_REM_U=86, + OP_AND=87, OP_OR=88, OP_XOR=89, OP_SHL=90, OP_SHR_S=91, OP_SHR_U=92, OP_ROTL=93, + OP_ROTR=94, OP_MIN=95, OP_MAX=96, OP_COPYSIGN=97, OP_WRAP=98, OP_TRUNC_=99, + OP_TRUNC_SAT=100, OP_CONVERT=101, OP_EXTEND=102, OP_DEMOTE=103, OP_PROMOTE=104, + OP_REINTER=105, MEMORY_SIZE=106, MEMORY_GROW=107, MEMORY_FILL=108, MEMORY_COPY=109, + MEMORY_INIT=110, TEST=111, COMPARE=112, UNARY=113, BINARY=114, CONVERT=115, + TYPE=116, FUNC=117, EXTERN=118, START_=119, PARAM=120, RESULT=121, LOCAL=122, + GLOBAL=123, TABLE=124, MEMORY=125, ELEM=126, DATA=127, OFFSET=128, IMPORT=129, + EXPORT=130, MODULE=131, BIN=132, QUOTE=133, SCRIPT=134, REGISTER=135, + INVOKE=136, GET=137, ASSERT_MALFORMED=138, ASSERT_INVALID=139, ASSERT_UNLINKABLE=140, + ASSERT_RETURN=141, ASSERT_RETURN_CANONICAL_NAN=142, ASSERT_RETURN_ARITHMETIC_NAN=143, + ASSERT_TRAP=144, ASSERT_EXHAUSTION=145, INPUT=146, OUTPUT=147, VAR=148, + V128=149, SPACE=150, COMMENT=151; + public static final int + RULE_value = 0, RULE_name = 1, RULE_numType = 2, RULE_refType = 3, RULE_vecType = 4, + RULE_valType = 5, RULE_heapType = 6, RULE_globalType = 7, RULE_defType = 8, + RULE_funcParamType = 9, RULE_funcResType = 10, RULE_funcType = 11, RULE_tableType = 12, + RULE_memoryType = 13, RULE_typeUse = 14, RULE_literal = 15, RULE_idx = 16, + RULE_bindVar = 17, RULE_instr = 18, RULE_forLoop = 19, RULE_plainInstr = 20, + RULE_offsetEq = 21, RULE_alignEq = 22, RULE_load = 23, RULE_store = 24, + RULE_selectInstr = 25, RULE_callIndirectInstr = 26, RULE_callInstrParams = 27, + RULE_callInstrParamsInstr = 28, RULE_callInstrResultsInstr = 29, RULE_blockInstr = 30, + RULE_blockType = 31, RULE_block = 32, RULE_foldedInstr = 33, RULE_expr = 34, + RULE_callExprType = 35, RULE_callExprParams = 36, RULE_callExprResults = 37, + RULE_instrList = 38, RULE_constExpr = 39, RULE_function = 40, RULE_funcFields = 41, + RULE_funcFieldsBody = 42, RULE_funcBody = 43, RULE_offset = 44, RULE_elem = 45, + RULE_table = 46, RULE_tableField = 47, RULE_data = 48, RULE_memory = 49, + RULE_memoryField = 50, RULE_global = 51, RULE_globalField = 52, RULE_importDesc = 53, + RULE_simport = 54, RULE_inlineImport = 55, RULE_exportDesc = 56, RULE_export_ = 57, + RULE_inlineExport = 58, RULE_typeDef = 59, RULE_start_ = 60, RULE_moduleField = 61, + RULE_module_ = 62, RULE_scriptModule = 63, RULE_action_ = 64, RULE_assertion = 65, + RULE_cmd = 66, RULE_meta = 67, RULE_wconst = 68, RULE_constList = 69, + RULE_script = 70, RULE_module = 71; + private static String[] makeRuleNames() { + return new String[] { + "value", "name", "numType", "refType", "vecType", "valType", "heapType", + "globalType", "defType", "funcParamType", "funcResType", "funcType", + "tableType", "memoryType", "typeUse", "literal", "idx", "bindVar", "instr", + "forLoop", "plainInstr", "offsetEq", "alignEq", "load", "store", "selectInstr", + "callIndirectInstr", "callInstrParams", "callInstrParamsInstr", "callInstrResultsInstr", + "blockInstr", "blockType", "block", "foldedInstr", "expr", "callExprType", + "callExprParams", "callExprResults", "instrList", "constExpr", "function", + "funcFields", "funcFieldsBody", "funcBody", "offset", "elem", "table", + "tableField", "data", "memory", "memoryField", "global", "globalField", + "importDesc", "simport", "inlineImport", "exportDesc", "export_", "inlineExport", + "typeDef", "start_", "moduleField", "module_", "scriptModule", "action_", + "assertion", "cmd", "meta", "wconst", "constList", "script", "module" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'('", "')'", null, null, null, null, null, null, null, "'funcref'", + "'externref'", "'mut'", "'nop'", "'sym_assert'", "'alloc'", "'free'", + "'unreachable'", "'drop'", "'block'", "'loop'", "'for'", "'|'", "'end'", + "'br'", "'br_if'", "'br_table'", "'return'", "'if'", "'then'", "'else'", + "'.select'", "'call'", "'call_indirect'", "'return_call'", "'return_call_indirect'", + "'local.get'", "'local.set'", "'local.tee'", "'global.get'", "'global.set'", + null, null, "'_'", "'offset='", "'align='", null, null, "'i32'", "'i64'", + "'f32'", "'f64'", null, null, "'.eqz'", "'.eq'", "'.ne'", "'.lt'", "'.lt_s'", + "'.lt_u'", "'.le'", "'.le_s'", "'.le_u'", "'.gt'", "'.gt_s'", "'.gt_u'", + "'.ge'", "'.ge_s'", "'.ge_u'", "'.clz'", "'.ctz'", "'.popcnt'", "'.neg'", + "'.abs'", "'.sqrt'", "'.ceil'", "'.floor'", "'.trunc'", "'.nearest'", + "'.add'", "'.sub'", "'.mul'", "'.div'", "'.div_s'", "'.div_u'", "'.rem_s'", + "'.rem_u'", "'.and'", "'.or'", "'.xor'", "'.shl'", "'.shr_s'", "'.shr_u'", + "'.rotl'", "'.rotr'", "'.min'", "'.max'", "'.copysign'", "'.wrap_'", + "'.trunc_'", "'.trunc_sat_'", "'.convert_'", "'.extend_'", "'.demote_'", + "'.promote_'", "'.reinterpret_'", "'memory.size'", "'memory.grow'", "'memory.fill'", + "'memory.copy'", "'memory.init'", null, null, null, null, null, "'type'", + "'func'", "'extern'", "'start'", "'param'", "'result'", "'local'", "'global'", + "'table'", "'memory'", "'elem'", "'data'", "'offset'", "'import'", "'export'", + "'module'", "'binary'", "'quote'", "'script'", "'register'", "'invoke'", + "'get'", "'assert_malformed'", "'assert_invalid'", "'assert_unlinkable'", + "'assert_return'", "'assert_return_canonical_nan'", "'assert_return_arithmetic_nan'", + "'assert_trap'", "'assert_exhaustion'", "'input'", "'output'", null, + "'v128'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "LPAR", "RPAR", "NAT", "INT", "FLOAT", "STRING_", "VALUE_TYPE", + "CONST", "SYMBOLIC", "FUNCREF", "EXTERNREF", "MUT", "NOP", "SYM_ASSERT", + "ALLOC", "FREE", "UNREACHABLE", "DROP", "BLOCK", "LOOP", "FOR", "VBAR", + "END", "BR", "BR_IF", "BR_TABLE", "RETURN", "IF", "THEN", "ELSE", "SELECT", + "CALL", "CALL_INDIRECT", "RETURN_CALL", "RETURN_CALL_INDIRECT", "LOCAL_GET", + "LOCAL_SET", "LOCAL_TEE", "GLOBAL_GET", "GLOBAL_SET", "LOAD", "STORE", + "UNDERSCORE", "OFFSET_EQ", "ALIGN_EQ", "SIGN_POSTFIX", "MEM_SIZE", "I32", + "I64", "F32", "F64", "IXX", "FXX", "OP_EQZ", "OP_EQ", "OP_NE", "OP_LT", + "OP_LTS", "OP_LTU", "OP_LE", "OP_LES", "OP_LEU", "OP_GT", "OP_GTS", "OP_GTU", + "OP_GE", "OP_GES", "OP_GEU", "OP_CLZ", "OP_CTZ", "OP_POPCNT", "OP_NEG", + "OP_ABS", "OP_SQRT", "OP_CEIL", "OP_FLOOR", "OP_TRUNC", "OP_NEAREST", + "OP_ADD", "OP_SUB", "OP_MUL", "OP_DIV", "OP_DIV_S", "OP_DIV_U", "OP_REM_S", + "OP_REM_U", "OP_AND", "OP_OR", "OP_XOR", "OP_SHL", "OP_SHR_S", "OP_SHR_U", + "OP_ROTL", "OP_ROTR", "OP_MIN", "OP_MAX", "OP_COPYSIGN", "OP_WRAP", "OP_TRUNC_", + "OP_TRUNC_SAT", "OP_CONVERT", "OP_EXTEND", "OP_DEMOTE", "OP_PROMOTE", + "OP_REINTER", "MEMORY_SIZE", "MEMORY_GROW", "MEMORY_FILL", "MEMORY_COPY", + "MEMORY_INIT", "TEST", "COMPARE", "UNARY", "BINARY", "CONVERT", "TYPE", + "FUNC", "EXTERN", "START_", "PARAM", "RESULT", "LOCAL", "GLOBAL", "TABLE", + "MEMORY", "ELEM", "DATA", "OFFSET", "IMPORT", "EXPORT", "MODULE", "BIN", + "QUOTE", "SCRIPT", "REGISTER", "INVOKE", "GET", "ASSERT_MALFORMED", "ASSERT_INVALID", + "ASSERT_UNLINKABLE", "ASSERT_RETURN", "ASSERT_RETURN_CANONICAL_NAN", + "ASSERT_RETURN_ARITHMETIC_NAN", "ASSERT_TRAP", "ASSERT_EXHAUSTION", "INPUT", + "OUTPUT", "VAR", "V128", "SPACE", "COMMENT" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "WatParser.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public WatParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @SuppressWarnings("CheckReturnValue") + public static class ValueContext extends ParserRuleContext { + public TerminalNode INT() { return getToken(WatParser.INT, 0); } + public TerminalNode FLOAT() { return getToken(WatParser.FLOAT, 0); } + public ValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_value; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitValue(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitValue(this); + else return visitor.visitChildren(this); + } + } + + public final ValueContext value() throws RecognitionException { + ValueContext _localctx = new ValueContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_value); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(144); + _la = _input.LA(1); + if ( !(_la==INT || _la==FLOAT) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class NameContext extends ParserRuleContext { + public TerminalNode STRING_() { return getToken(WatParser.STRING_, 0); } + public NameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_name; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitName(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitName(this); + else return visitor.visitChildren(this); + } + } + + public final NameContext name() throws RecognitionException { + NameContext _localctx = new NameContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_name); + try { + enterOuterAlt(_localctx, 1); + { + setState(146); + match(STRING_); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class NumTypeContext extends ParserRuleContext { + public TerminalNode VALUE_TYPE() { return getToken(WatParser.VALUE_TYPE, 0); } + public NumTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_numType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterNumType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitNumType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitNumType(this); + else return visitor.visitChildren(this); + } + } + + public final NumTypeContext numType() throws RecognitionException { + NumTypeContext _localctx = new NumTypeContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_numType); + try { + enterOuterAlt(_localctx, 1); + { + setState(148); + match(VALUE_TYPE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RefTypeContext extends ParserRuleContext { + public TerminalNode FUNCREF() { return getToken(WatParser.FUNCREF, 0); } + public TerminalNode EXTERNREF() { return getToken(WatParser.EXTERNREF, 0); } + public RefTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_refType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterRefType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitRefType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitRefType(this); + else return visitor.visitChildren(this); + } + } + + public final RefTypeContext refType() throws RecognitionException { + RefTypeContext _localctx = new RefTypeContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_refType); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(150); + _la = _input.LA(1); + if ( !(_la==FUNCREF || _la==EXTERNREF) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class VecTypeContext extends ParserRuleContext { + public TerminalNode V128() { return getToken(WatParser.V128, 0); } + public VecTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_vecType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterVecType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitVecType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitVecType(this); + else return visitor.visitChildren(this); + } + } + + public final VecTypeContext vecType() throws RecognitionException { + VecTypeContext _localctx = new VecTypeContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_vecType); + try { + enterOuterAlt(_localctx, 1); + { + setState(152); + match(V128); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ValTypeContext extends ParserRuleContext { + public NumTypeContext numType() { + return getRuleContext(NumTypeContext.class,0); + } + public VecTypeContext vecType() { + return getRuleContext(VecTypeContext.class,0); + } + public RefTypeContext refType() { + return getRuleContext(RefTypeContext.class,0); + } + public ValTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_valType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterValType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitValType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitValType(this); + else return visitor.visitChildren(this); + } + } + + public final ValTypeContext valType() throws RecognitionException { + ValTypeContext _localctx = new ValTypeContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_valType); + try { + setState(157); + _errHandler.sync(this); + switch (_input.LA(1)) { + case VALUE_TYPE: + enterOuterAlt(_localctx, 1); + { + setState(154); + numType(); + } + break; + case V128: + enterOuterAlt(_localctx, 2); + { + setState(155); + vecType(); + } + break; + case FUNCREF: + case EXTERNREF: + enterOuterAlt(_localctx, 3); + { + setState(156); + refType(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class HeapTypeContext extends ParserRuleContext { + public TerminalNode FUNC() { return getToken(WatParser.FUNC, 0); } + public TerminalNode EXTERN() { return getToken(WatParser.EXTERN, 0); } + public HeapTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_heapType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterHeapType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitHeapType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitHeapType(this); + else return visitor.visitChildren(this); + } + } + + public final HeapTypeContext heapType() throws RecognitionException { + HeapTypeContext _localctx = new HeapTypeContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_heapType); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(159); + _la = _input.LA(1); + if ( !(_la==FUNC || _la==EXTERN) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class GlobalTypeContext extends ParserRuleContext { + public ValTypeContext valType() { + return getRuleContext(ValTypeContext.class,0); + } + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode MUT() { return getToken(WatParser.MUT, 0); } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public GlobalTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_globalType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterGlobalType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitGlobalType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitGlobalType(this); + else return visitor.visitChildren(this); + } + } + + public final GlobalTypeContext globalType() throws RecognitionException { + GlobalTypeContext _localctx = new GlobalTypeContext(_ctx, getState()); + enterRule(_localctx, 14, RULE_globalType); + try { + setState(167); + _errHandler.sync(this); + switch (_input.LA(1)) { + case VALUE_TYPE: + case FUNCREF: + case EXTERNREF: + case V128: + enterOuterAlt(_localctx, 1); + { + setState(161); + valType(); + } + break; + case LPAR: + enterOuterAlt(_localctx, 2); + { + setState(162); + match(LPAR); + setState(163); + match(MUT); + setState(164); + valType(); + setState(165); + match(RPAR); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DefTypeContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode FUNC() { return getToken(WatParser.FUNC, 0); } + public FuncTypeContext funcType() { + return getRuleContext(FuncTypeContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public DefTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_defType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterDefType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitDefType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitDefType(this); + else return visitor.visitChildren(this); + } + } + + public final DefTypeContext defType() throws RecognitionException { + DefTypeContext _localctx = new DefTypeContext(_ctx, getState()); + enterRule(_localctx, 16, RULE_defType); + try { + enterOuterAlt(_localctx, 1); + { + setState(169); + match(LPAR); + setState(170); + match(FUNC); + setState(171); + funcType(); + setState(172); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FuncParamTypeContext extends ParserRuleContext { + public List LPAR() { return getTokens(WatParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(WatParser.LPAR, i); + } + public List PARAM() { return getTokens(WatParser.PARAM); } + public TerminalNode PARAM(int i) { + return getToken(WatParser.PARAM, i); + } + public List RPAR() { return getTokens(WatParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(WatParser.RPAR, i); + } + public List bindVar() { + return getRuleContexts(BindVarContext.class); + } + public BindVarContext bindVar(int i) { + return getRuleContext(BindVarContext.class,i); + } + public List valType() { + return getRuleContexts(ValTypeContext.class); + } + public ValTypeContext valType(int i) { + return getRuleContext(ValTypeContext.class,i); + } + public FuncParamTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_funcParamType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterFuncParamType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncParamType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncParamType(this); + else return visitor.visitChildren(this); + } + } + + public final FuncParamTypeContext funcParamType() throws RecognitionException { + FuncParamTypeContext _localctx = new FuncParamTypeContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_funcParamType); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(190); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,4,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(174); + match(LPAR); + setState(175); + match(PARAM); + setState(185); + _errHandler.sync(this); + switch (_input.LA(1)) { + case RPAR: + case VALUE_TYPE: + case FUNCREF: + case EXTERNREF: + case V128: + { + setState(179); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { + { + { + setState(176); + valType(); + } + } + setState(181); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case VAR: + { + setState(182); + bindVar(); + setState(183); + valType(); + } + break; + default: + throw new NoViableAltException(this); + } + setState(187); + match(RPAR); + } + } + } + setState(192); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,4,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FuncResTypeContext extends ParserRuleContext { + public List LPAR() { return getTokens(WatParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(WatParser.LPAR, i); + } + public List RESULT() { return getTokens(WatParser.RESULT); } + public TerminalNode RESULT(int i) { + return getToken(WatParser.RESULT, i); + } + public List RPAR() { return getTokens(WatParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(WatParser.RPAR, i); + } + public List valType() { + return getRuleContexts(ValTypeContext.class); + } + public ValTypeContext valType(int i) { + return getRuleContext(ValTypeContext.class,i); + } + public FuncResTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_funcResType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterFuncResType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncResType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncResType(this); + else return visitor.visitChildren(this); + } + } + + public final FuncResTypeContext funcResType() throws RecognitionException { + FuncResTypeContext _localctx = new FuncResTypeContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_funcResType); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(204); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,6,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(193); + match(LPAR); + setState(194); + match(RESULT); + setState(198); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { + { + { + setState(195); + valType(); + } + } + setState(200); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(201); + match(RPAR); + } + } + } + setState(206); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,6,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FuncTypeContext extends ParserRuleContext { + public FuncParamTypeContext funcParamType() { + return getRuleContext(FuncParamTypeContext.class,0); + } + public FuncResTypeContext funcResType() { + return getRuleContext(FuncResTypeContext.class,0); + } + public FuncTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_funcType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterFuncType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncType(this); + else return visitor.visitChildren(this); + } + } + + public final FuncTypeContext funcType() throws RecognitionException { + FuncTypeContext _localctx = new FuncTypeContext(_ctx, getState()); + enterRule(_localctx, 22, RULE_funcType); + try { + enterOuterAlt(_localctx, 1); + { + setState(207); + funcParamType(); + setState(208); + funcResType(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TableTypeContext extends ParserRuleContext { + public List NAT() { return getTokens(WatParser.NAT); } + public TerminalNode NAT(int i) { + return getToken(WatParser.NAT, i); + } + public RefTypeContext refType() { + return getRuleContext(RefTypeContext.class,0); + } + public TableTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tableType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterTableType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTableType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTableType(this); + else return visitor.visitChildren(this); + } + } + + public final TableTypeContext tableType() throws RecognitionException { + TableTypeContext _localctx = new TableTypeContext(_ctx, getState()); + enterRule(_localctx, 24, RULE_tableType); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(210); + match(NAT); + setState(212); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NAT) { + { + setState(211); + match(NAT); + } + } + + setState(214); + refType(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MemoryTypeContext extends ParserRuleContext { + public List NAT() { return getTokens(WatParser.NAT); } + public TerminalNode NAT(int i) { + return getToken(WatParser.NAT, i); + } + public MemoryTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_memoryType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterMemoryType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitMemoryType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitMemoryType(this); + else return visitor.visitChildren(this); + } + } + + public final MemoryTypeContext memoryType() throws RecognitionException { + MemoryTypeContext _localctx = new MemoryTypeContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_memoryType); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(216); + match(NAT); + setState(218); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NAT) { + { + setState(217); + match(NAT); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TypeUseContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode TYPE() { return getToken(WatParser.TYPE, 0); } + public IdxContext idx() { + return getRuleContext(IdxContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public TypeUseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeUse; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterTypeUse(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTypeUse(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTypeUse(this); + else return visitor.visitChildren(this); + } + } + + public final TypeUseContext typeUse() throws RecognitionException { + TypeUseContext _localctx = new TypeUseContext(_ctx, getState()); + enterRule(_localctx, 28, RULE_typeUse); + try { + enterOuterAlt(_localctx, 1); + { + setState(220); + match(LPAR); + setState(221); + match(TYPE); + setState(222); + idx(); + setState(223); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LiteralContext extends ParserRuleContext { + public TerminalNode NAT() { return getToken(WatParser.NAT, 0); } + public TerminalNode INT() { return getToken(WatParser.INT, 0); } + public TerminalNode FLOAT() { return getToken(WatParser.FLOAT, 0); } + public LiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_literal; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitLiteral(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitLiteral(this); + else return visitor.visitChildren(this); + } + } + + public final LiteralContext literal() throws RecognitionException { + LiteralContext _localctx = new LiteralContext(_ctx, getState()); + enterRule(_localctx, 30, RULE_literal); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(225); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 56L) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IdxContext extends ParserRuleContext { + public TerminalNode NAT() { return getToken(WatParser.NAT, 0); } + public TerminalNode VAR() { return getToken(WatParser.VAR, 0); } + public IdxContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_idx; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterIdx(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitIdx(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitIdx(this); + else return visitor.visitChildren(this); + } + } + + public final IdxContext idx() throws RecognitionException { + IdxContext _localctx = new IdxContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_idx); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(227); + _la = _input.LA(1); + if ( !(_la==NAT || _la==VAR) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BindVarContext extends ParserRuleContext { + public TerminalNode VAR() { return getToken(WatParser.VAR, 0); } + public BindVarContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_bindVar; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterBindVar(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitBindVar(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitBindVar(this); + else return visitor.visitChildren(this); + } + } + + public final BindVarContext bindVar() throws RecognitionException { + BindVarContext _localctx = new BindVarContext(_ctx, getState()); + enterRule(_localctx, 34, RULE_bindVar); + try { + enterOuterAlt(_localctx, 1); + { + setState(229); + match(VAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class InstrContext extends ParserRuleContext { + public PlainInstrContext plainInstr() { + return getRuleContext(PlainInstrContext.class,0); + } + public BlockInstrContext blockInstr() { + return getRuleContext(BlockInstrContext.class,0); + } + public FoldedInstrContext foldedInstr() { + return getRuleContext(FoldedInstrContext.class,0); + } + public ForLoopContext forLoop() { + return getRuleContext(ForLoopContext.class,0); + } + public InstrContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_instr; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterInstr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitInstr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitInstr(this); + else return visitor.visitChildren(this); + } + } + + public final InstrContext instr() throws RecognitionException { + InstrContext _localctx = new InstrContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_instr); + try { + setState(235); + _errHandler.sync(this); + switch (_input.LA(1)) { + case VALUE_TYPE: + case CONST: + case SYMBOLIC: + case NOP: + case SYM_ASSERT: + case ALLOC: + case FREE: + case UNREACHABLE: + case DROP: + case BR: + case BR_IF: + case BR_TABLE: + case RETURN: + case CALL: + case CALL_INDIRECT: + case RETURN_CALL: + case RETURN_CALL_INDIRECT: + case LOCAL_GET: + case LOCAL_SET: + case LOCAL_TEE: + case GLOBAL_GET: + case GLOBAL_SET: + case MEMORY_SIZE: + case MEMORY_GROW: + case MEMORY_FILL: + case MEMORY_COPY: + case MEMORY_INIT: + case TEST: + case COMPARE: + case UNARY: + case BINARY: + case CONVERT: + enterOuterAlt(_localctx, 1); + { + setState(231); + plainInstr(); + } + break; + case BLOCK: + case LOOP: + case IF: + enterOuterAlt(_localctx, 2); + { + setState(232); + blockInstr(); + } + break; + case LPAR: + enterOuterAlt(_localctx, 3); + { + setState(233); + foldedInstr(); + } + break; + case FOR: + enterOuterAlt(_localctx, 4); + { + setState(234); + forLoop(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ForLoopContext extends ParserRuleContext { + public TerminalNode FOR() { return getToken(WatParser.FOR, 0); } + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public List instrList() { + return getRuleContexts(InstrListContext.class); + } + public InstrListContext instrList(int i) { + return getRuleContext(InstrListContext.class,i); + } + public List VBAR() { return getTokens(WatParser.VBAR); } + public TerminalNode VBAR(int i) { + return getToken(WatParser.VBAR, i); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public ForLoopContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_forLoop; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterForLoop(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitForLoop(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitForLoop(this); + else return visitor.visitChildren(this); + } + } + + public final ForLoopContext forLoop() throws RecognitionException { + ForLoopContext _localctx = new ForLoopContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_forLoop); + try { + enterOuterAlt(_localctx, 1); + { + setState(237); + match(FOR); + setState(238); + match(LPAR); + setState(239); + instrList(); + setState(240); + match(VBAR); + setState(241); + instrList(); + setState(242); + match(VBAR); + setState(243); + instrList(); + setState(244); + match(RPAR); + setState(245); + instrList(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PlainInstrContext extends ParserRuleContext { + public TerminalNode UNREACHABLE() { return getToken(WatParser.UNREACHABLE, 0); } + public TerminalNode NOP() { return getToken(WatParser.NOP, 0); } + public TerminalNode DROP() { return getToken(WatParser.DROP, 0); } + public SelectInstrContext selectInstr() { + return getRuleContext(SelectInstrContext.class,0); + } + public TerminalNode BR() { return getToken(WatParser.BR, 0); } + public List idx() { + return getRuleContexts(IdxContext.class); + } + public IdxContext idx(int i) { + return getRuleContext(IdxContext.class,i); + } + public TerminalNode BR_IF() { return getToken(WatParser.BR_IF, 0); } + public TerminalNode BR_TABLE() { return getToken(WatParser.BR_TABLE, 0); } + public TerminalNode RETURN() { return getToken(WatParser.RETURN, 0); } + public TerminalNode CALL() { return getToken(WatParser.CALL, 0); } + public TerminalNode RETURN_CALL() { return getToken(WatParser.RETURN_CALL, 0); } + public TerminalNode LOCAL_GET() { return getToken(WatParser.LOCAL_GET, 0); } + public TerminalNode LOCAL_SET() { return getToken(WatParser.LOCAL_SET, 0); } + public TerminalNode LOCAL_TEE() { return getToken(WatParser.LOCAL_TEE, 0); } + public TerminalNode GLOBAL_GET() { return getToken(WatParser.GLOBAL_GET, 0); } + public TerminalNode GLOBAL_SET() { return getToken(WatParser.GLOBAL_SET, 0); } + public LoadContext load() { + return getRuleContext(LoadContext.class,0); + } + public OffsetEqContext offsetEq() { + return getRuleContext(OffsetEqContext.class,0); + } + public AlignEqContext alignEq() { + return getRuleContext(AlignEqContext.class,0); + } + public StoreContext store() { + return getRuleContext(StoreContext.class,0); + } + public TerminalNode MEMORY_SIZE() { return getToken(WatParser.MEMORY_SIZE, 0); } + public TerminalNode MEMORY_GROW() { return getToken(WatParser.MEMORY_GROW, 0); } + public TerminalNode MEMORY_FILL() { return getToken(WatParser.MEMORY_FILL, 0); } + public TerminalNode MEMORY_COPY() { return getToken(WatParser.MEMORY_COPY, 0); } + public TerminalNode MEMORY_INIT() { return getToken(WatParser.MEMORY_INIT, 0); } + public TerminalNode CONST() { return getToken(WatParser.CONST, 0); } + public LiteralContext literal() { + return getRuleContext(LiteralContext.class,0); + } + public TerminalNode SYMBOLIC() { return getToken(WatParser.SYMBOLIC, 0); } + public TerminalNode SYM_ASSERT() { return getToken(WatParser.SYM_ASSERT, 0); } + public TerminalNode ALLOC() { return getToken(WatParser.ALLOC, 0); } + public TerminalNode FREE() { return getToken(WatParser.FREE, 0); } + public TerminalNode TEST() { return getToken(WatParser.TEST, 0); } + public TerminalNode COMPARE() { return getToken(WatParser.COMPARE, 0); } + public TerminalNode UNARY() { return getToken(WatParser.UNARY, 0); } + public TerminalNode BINARY() { return getToken(WatParser.BINARY, 0); } + public TerminalNode CONVERT() { return getToken(WatParser.CONVERT, 0); } + public CallIndirectInstrContext callIndirectInstr() { + return getRuleContext(CallIndirectInstrContext.class,0); + } + public PlainInstrContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_plainInstr; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterPlainInstr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitPlainInstr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitPlainInstr(this); + else return visitor.visitChildren(this); + } + } + + public final PlainInstrContext plainInstr() throws RecognitionException { + PlainInstrContext _localctx = new PlainInstrContext(_ctx, getState()); + enterRule(_localctx, 40, RULE_plainInstr); + int _la; + try { + int _alt; + setState(308); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(247); + match(UNREACHABLE); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(248); + match(NOP); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(249); + match(DROP); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(250); + selectInstr(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(251); + match(BR); + setState(252); + idx(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(253); + match(BR_IF); + setState(254); + idx(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(255); + match(BR_TABLE); + setState(257); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(256); + idx(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(259); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,10,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(261); + match(RETURN); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(262); + match(CALL); + setState(263); + idx(); + } + break; + case 10: + enterOuterAlt(_localctx, 10); + { + setState(264); + match(RETURN_CALL); + setState(265); + idx(); + } + break; + case 11: + enterOuterAlt(_localctx, 11); + { + setState(266); + match(LOCAL_GET); + setState(267); + idx(); + } + break; + case 12: + enterOuterAlt(_localctx, 12); + { + setState(268); + match(LOCAL_SET); + setState(269); + idx(); + } + break; + case 13: + enterOuterAlt(_localctx, 13); + { + setState(270); + match(LOCAL_TEE); + setState(271); + idx(); + } + break; + case 14: + enterOuterAlt(_localctx, 14); + { + setState(272); + match(GLOBAL_GET); + setState(273); + idx(); + } + break; + case 15: + enterOuterAlt(_localctx, 15); + { + setState(274); + match(GLOBAL_SET); + setState(275); + idx(); + } + break; + case 16: + enterOuterAlt(_localctx, 16); + { + setState(276); + load(); + setState(278); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==OFFSET_EQ) { + { + setState(277); + offsetEq(); + } + } + + setState(281); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ALIGN_EQ) { + { + setState(280); + alignEq(); + } + } + + } + break; + case 17: + enterOuterAlt(_localctx, 17); + { + setState(283); + store(); + setState(285); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==OFFSET_EQ) { + { + setState(284); + offsetEq(); + } + } + + setState(288); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ALIGN_EQ) { + { + setState(287); + alignEq(); + } + } + + } + break; + case 18: + enterOuterAlt(_localctx, 18); + { + setState(290); + match(MEMORY_SIZE); + } + break; + case 19: + enterOuterAlt(_localctx, 19); + { + setState(291); + match(MEMORY_GROW); + } + break; + case 20: + enterOuterAlt(_localctx, 20); + { + setState(292); + match(MEMORY_FILL); + } + break; + case 21: + enterOuterAlt(_localctx, 21); + { + setState(293); + match(MEMORY_COPY); + } + break; + case 22: + enterOuterAlt(_localctx, 22); + { + setState(294); + match(MEMORY_INIT); + setState(295); + idx(); + } + break; + case 23: + enterOuterAlt(_localctx, 23); + { + setState(296); + match(CONST); + setState(297); + literal(); + } + break; + case 24: + enterOuterAlt(_localctx, 24); + { + setState(298); + match(SYMBOLIC); + } + break; + case 25: + enterOuterAlt(_localctx, 25); + { + setState(299); + match(SYM_ASSERT); + } + break; + case 26: + enterOuterAlt(_localctx, 26); + { + setState(300); + match(ALLOC); + } + break; + case 27: + enterOuterAlt(_localctx, 27); + { + setState(301); + match(FREE); + } + break; + case 28: + enterOuterAlt(_localctx, 28); + { + setState(302); + match(TEST); + } + break; + case 29: + enterOuterAlt(_localctx, 29); + { + setState(303); + match(COMPARE); + } + break; + case 30: + enterOuterAlt(_localctx, 30); + { + setState(304); + match(UNARY); + } + break; + case 31: + enterOuterAlt(_localctx, 31); + { + setState(305); + match(BINARY); + } + break; + case 32: + enterOuterAlt(_localctx, 32); + { + setState(306); + match(CONVERT); + } + break; + case 33: + enterOuterAlt(_localctx, 33); + { + setState(307); + callIndirectInstr(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OffsetEqContext extends ParserRuleContext { + public TerminalNode OFFSET_EQ() { return getToken(WatParser.OFFSET_EQ, 0); } + public TerminalNode NAT() { return getToken(WatParser.NAT, 0); } + public OffsetEqContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_offsetEq; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterOffsetEq(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitOffsetEq(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitOffsetEq(this); + else return visitor.visitChildren(this); + } + } + + public final OffsetEqContext offsetEq() throws RecognitionException { + OffsetEqContext _localctx = new OffsetEqContext(_ctx, getState()); + enterRule(_localctx, 42, RULE_offsetEq); + try { + enterOuterAlt(_localctx, 1); + { + setState(310); + match(OFFSET_EQ); + setState(311); + match(NAT); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AlignEqContext extends ParserRuleContext { + public TerminalNode ALIGN_EQ() { return getToken(WatParser.ALIGN_EQ, 0); } + public TerminalNode NAT() { return getToken(WatParser.NAT, 0); } + public AlignEqContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alignEq; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterAlignEq(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitAlignEq(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitAlignEq(this); + else return visitor.visitChildren(this); + } + } + + public final AlignEqContext alignEq() throws RecognitionException { + AlignEqContext _localctx = new AlignEqContext(_ctx, getState()); + enterRule(_localctx, 44, RULE_alignEq); + try { + enterOuterAlt(_localctx, 1); + { + setState(313); + match(ALIGN_EQ); + setState(314); + match(NAT); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LoadContext extends ParserRuleContext { + public NumTypeContext numType() { + return getRuleContext(NumTypeContext.class,0); + } + public TerminalNode LOAD() { return getToken(WatParser.LOAD, 0); } + public TerminalNode MEM_SIZE() { return getToken(WatParser.MEM_SIZE, 0); } + public TerminalNode UNDERSCORE() { return getToken(WatParser.UNDERSCORE, 0); } + public TerminalNode SIGN_POSTFIX() { return getToken(WatParser.SIGN_POSTFIX, 0); } + public LoadContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_load; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterLoad(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitLoad(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitLoad(this); + else return visitor.visitChildren(this); + } + } + + public final LoadContext load() throws RecognitionException { + LoadContext _localctx = new LoadContext(_ctx, getState()); + enterRule(_localctx, 46, RULE_load); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(316); + numType(); + setState(317); + match(LOAD); + setState(321); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==MEM_SIZE) { + { + setState(318); + match(MEM_SIZE); + setState(319); + match(UNDERSCORE); + setState(320); + match(SIGN_POSTFIX); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StoreContext extends ParserRuleContext { + public NumTypeContext numType() { + return getRuleContext(NumTypeContext.class,0); + } + public TerminalNode STORE() { return getToken(WatParser.STORE, 0); } + public TerminalNode MEM_SIZE() { return getToken(WatParser.MEM_SIZE, 0); } + public StoreContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_store; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterStore(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitStore(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitStore(this); + else return visitor.visitChildren(this); + } + } + + public final StoreContext store() throws RecognitionException { + StoreContext _localctx = new StoreContext(_ctx, getState()); + enterRule(_localctx, 48, RULE_store); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(323); + numType(); + setState(324); + match(STORE); + setState(326); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==MEM_SIZE) { + { + setState(325); + match(MEM_SIZE); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SelectInstrContext extends ParserRuleContext { + public NumTypeContext numType() { + return getRuleContext(NumTypeContext.class,0); + } + public TerminalNode SELECT() { return getToken(WatParser.SELECT, 0); } + public SelectInstrContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selectInstr; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterSelectInstr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitSelectInstr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitSelectInstr(this); + else return visitor.visitChildren(this); + } + } + + public final SelectInstrContext selectInstr() throws RecognitionException { + SelectInstrContext _localctx = new SelectInstrContext(_ctx, getState()); + enterRule(_localctx, 50, RULE_selectInstr); + try { + enterOuterAlt(_localctx, 1); + { + setState(328); + numType(); + setState(329); + match(SELECT); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CallIndirectInstrContext extends ParserRuleContext { + public TerminalNode CALL_INDIRECT() { return getToken(WatParser.CALL_INDIRECT, 0); } + public TypeUseContext typeUse() { + return getRuleContext(TypeUseContext.class,0); + } + public IdxContext idx() { + return getRuleContext(IdxContext.class,0); + } + public TerminalNode RETURN_CALL_INDIRECT() { return getToken(WatParser.RETURN_CALL_INDIRECT, 0); } + public CallIndirectInstrContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_callIndirectInstr; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterCallIndirectInstr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallIndirectInstr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallIndirectInstr(this); + else return visitor.visitChildren(this); + } + } + + public final CallIndirectInstrContext callIndirectInstr() throws RecognitionException { + CallIndirectInstrContext _localctx = new CallIndirectInstrContext(_ctx, getState()); + enterRule(_localctx, 52, RULE_callIndirectInstr); + int _la; + try { + setState(341); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CALL_INDIRECT: + enterOuterAlt(_localctx, 1); + { + setState(331); + match(CALL_INDIRECT); + setState(333); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NAT || _la==VAR) { + { + setState(332); + idx(); + } + } + + setState(335); + typeUse(); + } + break; + case RETURN_CALL_INDIRECT: + enterOuterAlt(_localctx, 2); + { + setState(336); + match(RETURN_CALL_INDIRECT); + setState(338); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NAT || _la==VAR) { + { + setState(337); + idx(); + } + } + + setState(340); + typeUse(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CallInstrParamsContext extends ParserRuleContext { + public List LPAR() { return getTokens(WatParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(WatParser.LPAR, i); + } + public List PARAM() { return getTokens(WatParser.PARAM); } + public TerminalNode PARAM(int i) { + return getToken(WatParser.PARAM, i); + } + public List RPAR() { return getTokens(WatParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(WatParser.RPAR, i); + } + public List RESULT() { return getTokens(WatParser.RESULT); } + public TerminalNode RESULT(int i) { + return getToken(WatParser.RESULT, i); + } + public List valType() { + return getRuleContexts(ValTypeContext.class); + } + public ValTypeContext valType(int i) { + return getRuleContext(ValTypeContext.class,i); + } + public CallInstrParamsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_callInstrParams; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterCallInstrParams(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallInstrParams(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallInstrParams(this); + else return visitor.visitChildren(this); + } + } + + public final CallInstrParamsContext callInstrParams() throws RecognitionException { + CallInstrParamsContext _localctx = new CallInstrParamsContext(_ctx, getState()); + enterRule(_localctx, 54, RULE_callInstrParams); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(354); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,22,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(343); + match(LPAR); + setState(344); + match(PARAM); + setState(348); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { + { + { + setState(345); + valType(); + } + } + setState(350); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(351); + match(RPAR); + } + } + } + setState(356); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,22,_ctx); + } + setState(368); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==LPAR) { + { + { + setState(357); + match(LPAR); + setState(358); + match(RESULT); + setState(362); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { + { + { + setState(359); + valType(); + } + } + setState(364); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(365); + match(RPAR); + } + } + setState(370); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CallInstrParamsInstrContext extends ParserRuleContext { + public CallInstrResultsInstrContext callInstrResultsInstr() { + return getRuleContext(CallInstrResultsInstrContext.class,0); + } + public List LPAR() { return getTokens(WatParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(WatParser.LPAR, i); + } + public List PARAM() { return getTokens(WatParser.PARAM); } + public TerminalNode PARAM(int i) { + return getToken(WatParser.PARAM, i); + } + public List RPAR() { return getTokens(WatParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(WatParser.RPAR, i); + } + public List valType() { + return getRuleContexts(ValTypeContext.class); + } + public ValTypeContext valType(int i) { + return getRuleContext(ValTypeContext.class,i); + } + public CallInstrParamsInstrContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_callInstrParamsInstr; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterCallInstrParamsInstr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallInstrParamsInstr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallInstrParamsInstr(this); + else return visitor.visitChildren(this); + } + } + + public final CallInstrParamsInstrContext callInstrParamsInstr() throws RecognitionException { + CallInstrParamsInstrContext _localctx = new CallInstrParamsInstrContext(_ctx, getState()); + enterRule(_localctx, 56, RULE_callInstrParamsInstr); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(382); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,26,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(371); + match(LPAR); + setState(372); + match(PARAM); + setState(376); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { + { + { + setState(373); + valType(); + } + } + setState(378); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(379); + match(RPAR); + } + } + } + setState(384); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,26,_ctx); + } + setState(385); + callInstrResultsInstr(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CallInstrResultsInstrContext extends ParserRuleContext { + public InstrContext instr() { + return getRuleContext(InstrContext.class,0); + } + public List LPAR() { return getTokens(WatParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(WatParser.LPAR, i); + } + public List RESULT() { return getTokens(WatParser.RESULT); } + public TerminalNode RESULT(int i) { + return getToken(WatParser.RESULT, i); + } + public List RPAR() { return getTokens(WatParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(WatParser.RPAR, i); + } + public List valType() { + return getRuleContexts(ValTypeContext.class); + } + public ValTypeContext valType(int i) { + return getRuleContext(ValTypeContext.class,i); + } + public CallInstrResultsInstrContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_callInstrResultsInstr; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterCallInstrResultsInstr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallInstrResultsInstr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallInstrResultsInstr(this); + else return visitor.visitChildren(this); + } + } + + public final CallInstrResultsInstrContext callInstrResultsInstr() throws RecognitionException { + CallInstrResultsInstrContext _localctx = new CallInstrResultsInstrContext(_ctx, getState()); + enterRule(_localctx, 58, RULE_callInstrResultsInstr); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(398); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,28,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(387); + match(LPAR); + setState(388); + match(RESULT); + setState(392); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { + { + { + setState(389); + valType(); + } + } + setState(394); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(395); + match(RPAR); + } + } + } + setState(400); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,28,_ctx); + } + setState(401); + instr(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BlockInstrContext extends ParserRuleContext { + public TerminalNode BLOCK() { return getToken(WatParser.BLOCK, 0); } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public TerminalNode END() { return getToken(WatParser.END, 0); } + public List bindVar() { + return getRuleContexts(BindVarContext.class); + } + public BindVarContext bindVar(int i) { + return getRuleContext(BindVarContext.class,i); + } + public TerminalNode LOOP() { return getToken(WatParser.LOOP, 0); } + public TerminalNode IF() { return getToken(WatParser.IF, 0); } + public TerminalNode ELSE() { return getToken(WatParser.ELSE, 0); } + public InstrListContext instrList() { + return getRuleContext(InstrListContext.class,0); + } + public BlockInstrContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_blockInstr; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterBlockInstr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitBlockInstr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitBlockInstr(this); + else return visitor.visitChildren(this); + } + } + + public final BlockInstrContext blockInstr() throws RecognitionException { + BlockInstrContext _localctx = new BlockInstrContext(_ctx, getState()); + enterRule(_localctx, 60, RULE_blockInstr); + int _la; + try { + setState(437); + _errHandler.sync(this); + switch (_input.LA(1)) { + case BLOCK: + enterOuterAlt(_localctx, 1); + { + setState(403); + match(BLOCK); + setState(405); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(404); + bindVar(); + } + } + + setState(407); + block(); + setState(408); + match(END); + setState(410); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,30,_ctx) ) { + case 1: + { + setState(409); + bindVar(); + } + break; + } + } + break; + case LOOP: + enterOuterAlt(_localctx, 2); + { + setState(412); + match(LOOP); + setState(414); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(413); + bindVar(); + } + } + + setState(416); + block(); + setState(417); + match(END); + setState(419); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,32,_ctx) ) { + case 1: + { + setState(418); + bindVar(); + } + break; + } + } + break; + case IF: + enterOuterAlt(_localctx, 3); + { + setState(421); + match(IF); + setState(423); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(422); + bindVar(); + } + } + + setState(425); + block(); + setState(431); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ELSE) { + { + setState(426); + match(ELSE); + setState(428); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(427); + bindVar(); + } + } + + setState(430); + instrList(); + } + } + + setState(433); + match(END); + setState(435); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) { + case 1: + { + setState(434); + bindVar(); + } + break; + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BlockTypeContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode RESULT() { return getToken(WatParser.RESULT, 0); } + public ValTypeContext valType() { + return getRuleContext(ValTypeContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public TypeUseContext typeUse() { + return getRuleContext(TypeUseContext.class,0); + } + public FuncTypeContext funcType() { + return getRuleContext(FuncTypeContext.class,0); + } + public BlockTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_blockType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterBlockType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitBlockType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitBlockType(this); + else return visitor.visitChildren(this); + } + } + + public final BlockTypeContext blockType() throws RecognitionException { + BlockTypeContext _localctx = new BlockTypeContext(_ctx, getState()); + enterRule(_localctx, 62, RULE_blockType); + try { + setState(450); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(444); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) { + case 1: + { + setState(439); + match(LPAR); + setState(440); + match(RESULT); + setState(441); + valType(); + setState(442); + match(RPAR); + } + break; + } + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(446); + typeUse(); + setState(447); + funcType(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(449); + funcType(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BlockContext extends ParserRuleContext { + public BlockTypeContext blockType() { + return getRuleContext(BlockTypeContext.class,0); + } + public InstrListContext instrList() { + return getRuleContext(InstrListContext.class,0); + } + public BlockContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_block; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterBlock(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitBlock(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitBlock(this); + else return visitor.visitChildren(this); + } + } + + public final BlockContext block() throws RecognitionException { + BlockContext _localctx = new BlockContext(_ctx, getState()); + enterRule(_localctx, 64, RULE_block); + try { + enterOuterAlt(_localctx, 1); + { + setState(452); + blockType(); + setState(453); + instrList(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FoldedInstrContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public FoldedInstrContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_foldedInstr; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterFoldedInstr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFoldedInstr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFoldedInstr(this); + else return visitor.visitChildren(this); + } + } + + public final FoldedInstrContext foldedInstr() throws RecognitionException { + FoldedInstrContext _localctx = new FoldedInstrContext(_ctx, getState()); + enterRule(_localctx, 66, RULE_foldedInstr); + try { + enterOuterAlt(_localctx, 1); + { + setState(455); + match(LPAR); + setState(456); + expr(); + setState(457); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExprContext extends ParserRuleContext { + public PlainInstrContext plainInstr() { + return getRuleContext(PlainInstrContext.class,0); + } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode CALL_INDIRECT() { return getToken(WatParser.CALL_INDIRECT, 0); } + public CallExprTypeContext callExprType() { + return getRuleContext(CallExprTypeContext.class,0); + } + public TerminalNode RETURN_CALL_INDIRECT() { return getToken(WatParser.RETURN_CALL_INDIRECT, 0); } + public TerminalNode BLOCK() { return getToken(WatParser.BLOCK, 0); } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public BindVarContext bindVar() { + return getRuleContext(BindVarContext.class,0); + } + public TerminalNode LOOP() { return getToken(WatParser.LOOP, 0); } + public TerminalNode IF() { return getToken(WatParser.IF, 0); } + public BlockTypeContext blockType() { + return getRuleContext(BlockTypeContext.class,0); + } + public List LPAR() { return getTokens(WatParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(WatParser.LPAR, i); + } + public TerminalNode THEN() { return getToken(WatParser.THEN, 0); } + public List instrList() { + return getRuleContexts(InstrListContext.class); + } + public InstrListContext instrList(int i) { + return getRuleContext(InstrListContext.class,i); + } + public List foldedInstr() { + return getRuleContexts(FoldedInstrContext.class); + } + public FoldedInstrContext foldedInstr(int i) { + return getRuleContext(FoldedInstrContext.class,i); + } + public TerminalNode ELSE() { return getToken(WatParser.ELSE, 0); } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public ExprContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitExpr(this); + else return visitor.visitChildren(this); + } + } + + public final ExprContext expr() throws RecognitionException { + ExprContext _localctx = new ExprContext(_ctx, getState()); + enterRule(_localctx, 68, RULE_expr); + int _la; + try { + int _alt; + setState(501); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,46,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(459); + plainInstr(); + setState(463); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,40,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(460); + expr(); + } + } + } + setState(465); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,40,_ctx); + } + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(466); + match(CALL_INDIRECT); + setState(467); + callExprType(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(468); + match(RETURN_CALL_INDIRECT); + setState(469); + callExprType(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(470); + match(BLOCK); + setState(472); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,41,_ctx) ) { + case 1: + { + setState(471); + bindVar(); + } + break; + } + setState(474); + block(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(475); + match(LOOP); + setState(477); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) { + case 1: + { + setState(476); + bindVar(); + } + break; + } + setState(479); + block(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(480); + match(IF); + setState(482); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(481); + bindVar(); + } + } + + setState(484); + blockType(); + setState(488); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,44,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(485); + foldedInstr(); + } + } + } + setState(490); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,44,_ctx); + } + setState(491); + match(LPAR); + setState(492); + match(THEN); + setState(493); + instrList(); + setState(499); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LPAR) { + { + setState(494); + match(LPAR); + setState(495); + match(ELSE); + setState(496); + instrList(); + setState(497); + match(RPAR); + } + } + + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CallExprTypeContext extends ParserRuleContext { + public CallExprParamsContext callExprParams() { + return getRuleContext(CallExprParamsContext.class,0); + } + public TypeUseContext typeUse() { + return getRuleContext(TypeUseContext.class,0); + } + public CallExprTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_callExprType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterCallExprType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallExprType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallExprType(this); + else return visitor.visitChildren(this); + } + } + + public final CallExprTypeContext callExprType() throws RecognitionException { + CallExprTypeContext _localctx = new CallExprTypeContext(_ctx, getState()); + enterRule(_localctx, 70, RULE_callExprType); + try { + enterOuterAlt(_localctx, 1); + { + setState(504); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,47,_ctx) ) { + case 1: + { + setState(503); + typeUse(); + } + break; + } + setState(506); + callExprParams(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CallExprParamsContext extends ParserRuleContext { + public CallExprResultsContext callExprResults() { + return getRuleContext(CallExprResultsContext.class,0); + } + public List LPAR() { return getTokens(WatParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(WatParser.LPAR, i); + } + public List PARAM() { return getTokens(WatParser.PARAM); } + public TerminalNode PARAM(int i) { + return getToken(WatParser.PARAM, i); + } + public List RPAR() { return getTokens(WatParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(WatParser.RPAR, i); + } + public List valType() { + return getRuleContexts(ValTypeContext.class); + } + public ValTypeContext valType(int i) { + return getRuleContext(ValTypeContext.class,i); + } + public CallExprParamsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_callExprParams; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterCallExprParams(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallExprParams(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallExprParams(this); + else return visitor.visitChildren(this); + } + } + + public final CallExprParamsContext callExprParams() throws RecognitionException { + CallExprParamsContext _localctx = new CallExprParamsContext(_ctx, getState()); + enterRule(_localctx, 72, RULE_callExprParams); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(519); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,49,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(508); + match(LPAR); + setState(509); + match(PARAM); + setState(513); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { + { + { + setState(510); + valType(); + } + } + setState(515); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(516); + match(RPAR); + } + } + } + setState(521); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,49,_ctx); + } + setState(522); + callExprResults(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CallExprResultsContext extends ParserRuleContext { + public List LPAR() { return getTokens(WatParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(WatParser.LPAR, i); + } + public List RESULT() { return getTokens(WatParser.RESULT); } + public TerminalNode RESULT(int i) { + return getToken(WatParser.RESULT, i); + } + public List RPAR() { return getTokens(WatParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(WatParser.RPAR, i); + } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public List valType() { + return getRuleContexts(ValTypeContext.class); + } + public ValTypeContext valType(int i) { + return getRuleContext(ValTypeContext.class,i); + } + public CallExprResultsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_callExprResults; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterCallExprResults(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallExprResults(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallExprResults(this); + else return visitor.visitChildren(this); + } + } + + public final CallExprResultsContext callExprResults() throws RecognitionException { + CallExprResultsContext _localctx = new CallExprResultsContext(_ctx, getState()); + enterRule(_localctx, 74, RULE_callExprResults); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(535); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==LPAR) { + { + { + setState(524); + match(LPAR); + setState(525); + match(RESULT); + setState(529); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { + { + { + setState(526); + valType(); + } + } + setState(531); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(532); + match(RPAR); + } + } + setState(537); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(541); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,52,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(538); + expr(); + } + } + } + setState(543); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,52,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class InstrListContext extends ParserRuleContext { + public List instr() { + return getRuleContexts(InstrContext.class); + } + public InstrContext instr(int i) { + return getRuleContext(InstrContext.class,i); + } + public CallIndirectInstrContext callIndirectInstr() { + return getRuleContext(CallIndirectInstrContext.class,0); + } + public InstrListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_instrList; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterInstrList(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitInstrList(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitInstrList(this); + else return visitor.visitChildren(this); + } + } + + public final InstrListContext instrList() throws RecognitionException { + InstrListContext _localctx = new InstrListContext(_ctx, getState()); + enterRule(_localctx, 76, RULE_instrList); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(547); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,53,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(544); + instr(); + } + } + } + setState(549); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,53,_ctx); + } + setState(551); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) { + case 1: + { + setState(550); + callIndirectInstr(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ConstExprContext extends ParserRuleContext { + public InstrListContext instrList() { + return getRuleContext(InstrListContext.class,0); + } + public ConstExprContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_constExpr; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterConstExpr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitConstExpr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitConstExpr(this); + else return visitor.visitChildren(this); + } + } + + public final ConstExprContext constExpr() throws RecognitionException { + ConstExprContext _localctx = new ConstExprContext(_ctx, getState()); + enterRule(_localctx, 78, RULE_constExpr); + try { + enterOuterAlt(_localctx, 1); + { + setState(553); + instrList(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode FUNC() { return getToken(WatParser.FUNC, 0); } + public FuncFieldsContext funcFields() { + return getRuleContext(FuncFieldsContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public BindVarContext bindVar() { + return getRuleContext(BindVarContext.class,0); + } + public FunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_function; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFunction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFunction(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionContext function() throws RecognitionException { + FunctionContext _localctx = new FunctionContext(_ctx, getState()); + enterRule(_localctx, 80, RULE_function); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(555); + match(LPAR); + setState(556); + match(FUNC); + setState(558); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(557); + bindVar(); + } + } + + setState(560); + funcFields(); + setState(561); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FuncFieldsContext extends ParserRuleContext { + public FuncFieldsBodyContext funcFieldsBody() { + return getRuleContext(FuncFieldsBodyContext.class,0); + } + public TypeUseContext typeUse() { + return getRuleContext(TypeUseContext.class,0); + } + public InlineImportContext inlineImport() { + return getRuleContext(InlineImportContext.class,0); + } + public FuncTypeContext funcType() { + return getRuleContext(FuncTypeContext.class,0); + } + public InlineExportContext inlineExport() { + return getRuleContext(InlineExportContext.class,0); + } + public FuncFieldsContext funcFields() { + return getRuleContext(FuncFieldsContext.class,0); + } + public FuncFieldsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_funcFields; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterFuncFields(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncFields(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncFields(this); + else return visitor.visitChildren(this); + } + } + + public final FuncFieldsContext funcFields() throws RecognitionException { + FuncFieldsContext _localctx = new FuncFieldsContext(_ctx, getState()); + enterRule(_localctx, 82, RULE_funcFields); + try { + setState(576); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,58,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(564); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,56,_ctx) ) { + case 1: + { + setState(563); + typeUse(); + } + break; + } + setState(566); + funcFieldsBody(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(567); + inlineImport(); + setState(569); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,57,_ctx) ) { + case 1: + { + setState(568); + typeUse(); + } + break; + } + setState(571); + funcType(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(573); + inlineExport(); + setState(574); + funcFields(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FuncFieldsBodyContext extends ParserRuleContext { + public FuncTypeContext funcType() { + return getRuleContext(FuncTypeContext.class,0); + } + public FuncBodyContext funcBody() { + return getRuleContext(FuncBodyContext.class,0); + } + public FuncFieldsBodyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_funcFieldsBody; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterFuncFieldsBody(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncFieldsBody(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncFieldsBody(this); + else return visitor.visitChildren(this); + } + } + + public final FuncFieldsBodyContext funcFieldsBody() throws RecognitionException { + FuncFieldsBodyContext _localctx = new FuncFieldsBodyContext(_ctx, getState()); + enterRule(_localctx, 84, RULE_funcFieldsBody); + try { + enterOuterAlt(_localctx, 1); + { + setState(578); + funcType(); + setState(579); + funcBody(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FuncBodyContext extends ParserRuleContext { + public InstrListContext instrList() { + return getRuleContext(InstrListContext.class,0); + } + public List LPAR() { return getTokens(WatParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(WatParser.LPAR, i); + } + public List LOCAL() { return getTokens(WatParser.LOCAL); } + public TerminalNode LOCAL(int i) { + return getToken(WatParser.LOCAL, i); + } + public List RPAR() { return getTokens(WatParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(WatParser.RPAR, i); + } + public List bindVar() { + return getRuleContexts(BindVarContext.class); + } + public BindVarContext bindVar(int i) { + return getRuleContext(BindVarContext.class,i); + } + public List valType() { + return getRuleContexts(ValTypeContext.class); + } + public ValTypeContext valType(int i) { + return getRuleContext(ValTypeContext.class,i); + } + public FuncBodyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_funcBody; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterFuncBody(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncBody(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncBody(this); + else return visitor.visitChildren(this); + } + } + + public final FuncBodyContext funcBody() throws RecognitionException { + FuncBodyContext _localctx = new FuncBodyContext(_ctx, getState()); + enterRule(_localctx, 86, RULE_funcBody); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(597); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,61,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(581); + match(LPAR); + setState(582); + match(LOCAL); + setState(592); + _errHandler.sync(this); + switch (_input.LA(1)) { + case RPAR: + case VALUE_TYPE: + case FUNCREF: + case EXTERNREF: + case V128: + { + setState(586); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { + { + { + setState(583); + valType(); + } + } + setState(588); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case VAR: + { + setState(589); + bindVar(); + setState(590); + valType(); + } + break; + default: + throw new NoViableAltException(this); + } + setState(594); + match(RPAR); + } + } + } + setState(599); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,61,_ctx); + } + setState(600); + instrList(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OffsetContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode OFFSET() { return getToken(WatParser.OFFSET, 0); } + public ConstExprContext constExpr() { + return getRuleContext(ConstExprContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public OffsetContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_offset; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterOffset(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitOffset(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitOffset(this); + else return visitor.visitChildren(this); + } + } + + public final OffsetContext offset() throws RecognitionException { + OffsetContext _localctx = new OffsetContext(_ctx, getState()); + enterRule(_localctx, 88, RULE_offset); + try { + setState(608); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LPAR: + enterOuterAlt(_localctx, 1); + { + setState(602); + match(LPAR); + setState(603); + match(OFFSET); + setState(604); + constExpr(); + setState(605); + match(RPAR); + } + break; + case VALUE_TYPE: + case CONST: + case SYMBOLIC: + case NOP: + case SYM_ASSERT: + case ALLOC: + case FREE: + case UNREACHABLE: + case DROP: + case BLOCK: + case LOOP: + case BR: + case BR_IF: + case BR_TABLE: + case RETURN: + case IF: + case CALL: + case CALL_INDIRECT: + case RETURN_CALL: + case RETURN_CALL_INDIRECT: + case LOCAL_GET: + case LOCAL_SET: + case LOCAL_TEE: + case GLOBAL_GET: + case GLOBAL_SET: + case MEMORY_SIZE: + case MEMORY_GROW: + case MEMORY_FILL: + case MEMORY_COPY: + case MEMORY_INIT: + case TEST: + case COMPARE: + case UNARY: + case BINARY: + case CONVERT: + enterOuterAlt(_localctx, 2); + { + setState(607); + expr(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ElemContext extends ParserRuleContext { + public List LPAR() { return getTokens(WatParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(WatParser.LPAR, i); + } + public TerminalNode ELEM() { return getToken(WatParser.ELEM, 0); } + public InstrContext instr() { + return getRuleContext(InstrContext.class,0); + } + public List RPAR() { return getTokens(WatParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(WatParser.RPAR, i); + } + public List idx() { + return getRuleContexts(IdxContext.class); + } + public IdxContext idx(int i) { + return getRuleContext(IdxContext.class,i); + } + public OffsetContext offset() { + return getRuleContext(OffsetContext.class,0); + } + public ElemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_elem; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterElem(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitElem(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitElem(this); + else return visitor.visitChildren(this); + } + } + + public final ElemContext elem() throws RecognitionException { + ElemContext _localctx = new ElemContext(_ctx, getState()); + enterRule(_localctx, 90, RULE_elem); + int _la; + try { + setState(640); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,67,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(610); + match(LPAR); + setState(611); + match(ELEM); + setState(613); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NAT || _la==VAR) { + { + setState(612); + idx(); + } + } + + setState(615); + match(LPAR); + setState(616); + instr(); + setState(617); + match(RPAR); + setState(621); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NAT || _la==VAR) { + { + { + setState(618); + idx(); + } + } + setState(623); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(624); + match(RPAR); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(626); + match(LPAR); + setState(627); + match(ELEM); + setState(629); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NAT || _la==VAR) { + { + setState(628); + idx(); + } + } + + setState(631); + offset(); + setState(635); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NAT || _la==VAR) { + { + { + setState(632); + idx(); + } + } + setState(637); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(638); + match(RPAR); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TableContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode TABLE() { return getToken(WatParser.TABLE, 0); } + public TableFieldContext tableField() { + return getRuleContext(TableFieldContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public BindVarContext bindVar() { + return getRuleContext(BindVarContext.class,0); + } + public TableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_table; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterTable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTable(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTable(this); + else return visitor.visitChildren(this); + } + } + + public final TableContext table() throws RecognitionException { + TableContext _localctx = new TableContext(_ctx, getState()); + enterRule(_localctx, 92, RULE_table); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(642); + match(LPAR); + setState(643); + match(TABLE); + setState(645); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(644); + bindVar(); + } + } + + setState(647); + tableField(); + setState(648); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TableFieldContext extends ParserRuleContext { + public TableTypeContext tableType() { + return getRuleContext(TableTypeContext.class,0); + } + public InlineImportContext inlineImport() { + return getRuleContext(InlineImportContext.class,0); + } + public InlineExportContext inlineExport() { + return getRuleContext(InlineExportContext.class,0); + } + public TableFieldContext tableField() { + return getRuleContext(TableFieldContext.class,0); + } + public RefTypeContext refType() { + return getRuleContext(RefTypeContext.class,0); + } + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode ELEM() { return getToken(WatParser.ELEM, 0); } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public List idx() { + return getRuleContexts(IdxContext.class); + } + public IdxContext idx(int i) { + return getRuleContext(IdxContext.class,i); + } + public TableFieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tableField; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterTableField(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTableField(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTableField(this); + else return visitor.visitChildren(this); + } + } + + public final TableFieldContext tableField() throws RecognitionException { + TableFieldContext _localctx = new TableFieldContext(_ctx, getState()); + enterRule(_localctx, 94, RULE_tableField); + int _la; + try { + setState(668); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(650); + tableType(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(651); + inlineImport(); + setState(652); + tableType(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(654); + inlineExport(); + setState(655); + tableField(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(657); + refType(); + setState(658); + match(LPAR); + setState(659); + match(ELEM); + setState(663); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NAT || _la==VAR) { + { + { + setState(660); + idx(); + } + } + setState(665); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(666); + match(RPAR); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DataContext extends ParserRuleContext { + public List LPAR() { return getTokens(WatParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(WatParser.LPAR, i); + } + public TerminalNode DATA() { return getToken(WatParser.DATA, 0); } + public InstrContext instr() { + return getRuleContext(InstrContext.class,0); + } + public List RPAR() { return getTokens(WatParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(WatParser.RPAR, i); + } + public IdxContext idx() { + return getRuleContext(IdxContext.class,0); + } + public List STRING_() { return getTokens(WatParser.STRING_); } + public TerminalNode STRING_(int i) { + return getToken(WatParser.STRING_, i); + } + public OffsetContext offset() { + return getRuleContext(OffsetContext.class,0); + } + public DataContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_data; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterData(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitData(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitData(this); + else return visitor.visitChildren(this); + } + } + + public final DataContext data() throws RecognitionException { + DataContext _localctx = new DataContext(_ctx, getState()); + enterRule(_localctx, 96, RULE_data); + int _la; + try { + setState(700); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,75,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(670); + match(LPAR); + setState(671); + match(DATA); + setState(673); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NAT || _la==VAR) { + { + setState(672); + idx(); + } + } + + setState(675); + match(LPAR); + setState(676); + instr(); + setState(677); + match(RPAR); + setState(681); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==STRING_) { + { + { + setState(678); + match(STRING_); + } + } + setState(683); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(684); + match(RPAR); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(686); + match(LPAR); + setState(687); + match(DATA); + setState(689); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NAT || _la==VAR) { + { + setState(688); + idx(); + } + } + + setState(691); + offset(); + setState(695); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==STRING_) { + { + { + setState(692); + match(STRING_); + } + } + setState(697); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(698); + match(RPAR); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MemoryContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode MEMORY() { return getToken(WatParser.MEMORY, 0); } + public MemoryFieldContext memoryField() { + return getRuleContext(MemoryFieldContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public BindVarContext bindVar() { + return getRuleContext(BindVarContext.class,0); + } + public MemoryContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_memory; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterMemory(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitMemory(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitMemory(this); + else return visitor.visitChildren(this); + } + } + + public final MemoryContext memory() throws RecognitionException { + MemoryContext _localctx = new MemoryContext(_ctx, getState()); + enterRule(_localctx, 98, RULE_memory); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(702); + match(LPAR); + setState(703); + match(MEMORY); + setState(705); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(704); + bindVar(); + } + } + + setState(707); + memoryField(); + setState(708); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MemoryFieldContext extends ParserRuleContext { + public MemoryTypeContext memoryType() { + return getRuleContext(MemoryTypeContext.class,0); + } + public InlineImportContext inlineImport() { + return getRuleContext(InlineImportContext.class,0); + } + public InlineExportContext inlineExport() { + return getRuleContext(InlineExportContext.class,0); + } + public MemoryFieldContext memoryField() { + return getRuleContext(MemoryFieldContext.class,0); + } + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode DATA() { return getToken(WatParser.DATA, 0); } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public List STRING_() { return getTokens(WatParser.STRING_); } + public TerminalNode STRING_(int i) { + return getToken(WatParser.STRING_, i); + } + public MemoryFieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_memoryField; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterMemoryField(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitMemoryField(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitMemoryField(this); + else return visitor.visitChildren(this); + } + } + + public final MemoryFieldContext memoryField() throws RecognitionException { + MemoryFieldContext _localctx = new MemoryFieldContext(_ctx, getState()); + enterRule(_localctx, 100, RULE_memoryField); + int _la; + try { + setState(726); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,78,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(710); + memoryType(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(711); + inlineImport(); + setState(712); + memoryType(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(714); + inlineExport(); + setState(715); + memoryField(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(717); + match(LPAR); + setState(718); + match(DATA); + setState(722); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==STRING_) { + { + { + setState(719); + match(STRING_); + } + } + setState(724); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(725); + match(RPAR); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class GlobalContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode GLOBAL() { return getToken(WatParser.GLOBAL, 0); } + public GlobalFieldContext globalField() { + return getRuleContext(GlobalFieldContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public BindVarContext bindVar() { + return getRuleContext(BindVarContext.class,0); + } + public GlobalContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_global; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterGlobal(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitGlobal(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitGlobal(this); + else return visitor.visitChildren(this); + } + } + + public final GlobalContext global() throws RecognitionException { + GlobalContext _localctx = new GlobalContext(_ctx, getState()); + enterRule(_localctx, 102, RULE_global); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(728); + match(LPAR); + setState(729); + match(GLOBAL); + setState(731); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(730); + bindVar(); + } + } + + setState(733); + globalField(); + setState(734); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class GlobalFieldContext extends ParserRuleContext { + public GlobalTypeContext globalType() { + return getRuleContext(GlobalTypeContext.class,0); + } + public ConstExprContext constExpr() { + return getRuleContext(ConstExprContext.class,0); + } + public InlineImportContext inlineImport() { + return getRuleContext(InlineImportContext.class,0); + } + public InlineExportContext inlineExport() { + return getRuleContext(InlineExportContext.class,0); + } + public GlobalFieldContext globalField() { + return getRuleContext(GlobalFieldContext.class,0); + } + public GlobalFieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_globalField; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterGlobalField(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitGlobalField(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitGlobalField(this); + else return visitor.visitChildren(this); + } + } + + public final GlobalFieldContext globalField() throws RecognitionException { + GlobalFieldContext _localctx = new GlobalFieldContext(_ctx, getState()); + enterRule(_localctx, 104, RULE_globalField); + try { + setState(745); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,80,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(736); + globalType(); + setState(737); + constExpr(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(739); + inlineImport(); + setState(740); + globalType(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(742); + inlineExport(); + setState(743); + globalField(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ImportDescContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode FUNC() { return getToken(WatParser.FUNC, 0); } + public TypeUseContext typeUse() { + return getRuleContext(TypeUseContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public BindVarContext bindVar() { + return getRuleContext(BindVarContext.class,0); + } + public FuncTypeContext funcType() { + return getRuleContext(FuncTypeContext.class,0); + } + public TerminalNode TABLE() { return getToken(WatParser.TABLE, 0); } + public TableTypeContext tableType() { + return getRuleContext(TableTypeContext.class,0); + } + public TerminalNode MEMORY() { return getToken(WatParser.MEMORY, 0); } + public MemoryTypeContext memoryType() { + return getRuleContext(MemoryTypeContext.class,0); + } + public TerminalNode GLOBAL() { return getToken(WatParser.GLOBAL, 0); } + public GlobalTypeContext globalType() { + return getRuleContext(GlobalTypeContext.class,0); + } + public ImportDescContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_importDesc; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterImportDesc(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitImportDesc(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitImportDesc(this); + else return visitor.visitChildren(this); + } + } + + public final ImportDescContext importDesc() throws RecognitionException { + ImportDescContext _localctx = new ImportDescContext(_ctx, getState()); + enterRule(_localctx, 106, RULE_importDesc); + int _la; + try { + setState(787); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,86,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(747); + match(LPAR); + setState(748); + match(FUNC); + setState(750); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(749); + bindVar(); + } + } + + setState(752); + typeUse(); + setState(753); + match(RPAR); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(755); + match(LPAR); + setState(756); + match(FUNC); + setState(758); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(757); + bindVar(); + } + } + + setState(760); + funcType(); + setState(761); + match(RPAR); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(763); + match(LPAR); + setState(764); + match(TABLE); + setState(766); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(765); + bindVar(); + } + } + + setState(768); + tableType(); + setState(769); + match(RPAR); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(771); + match(LPAR); + setState(772); + match(MEMORY); + setState(774); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(773); + bindVar(); + } + } + + setState(776); + memoryType(); + setState(777); + match(RPAR); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(779); + match(LPAR); + setState(780); + match(GLOBAL); + setState(782); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(781); + bindVar(); + } + } + + setState(784); + globalType(); + setState(785); + match(RPAR); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SimportContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode IMPORT() { return getToken(WatParser.IMPORT, 0); } + public List name() { + return getRuleContexts(NameContext.class); + } + public NameContext name(int i) { + return getRuleContext(NameContext.class,i); + } + public ImportDescContext importDesc() { + return getRuleContext(ImportDescContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public SimportContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simport; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterSimport(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitSimport(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitSimport(this); + else return visitor.visitChildren(this); + } + } + + public final SimportContext simport() throws RecognitionException { + SimportContext _localctx = new SimportContext(_ctx, getState()); + enterRule(_localctx, 108, RULE_simport); + try { + enterOuterAlt(_localctx, 1); + { + setState(789); + match(LPAR); + setState(790); + match(IMPORT); + setState(791); + name(); + setState(792); + name(); + setState(793); + importDesc(); + setState(794); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class InlineImportContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode IMPORT() { return getToken(WatParser.IMPORT, 0); } + public List name() { + return getRuleContexts(NameContext.class); + } + public NameContext name(int i) { + return getRuleContext(NameContext.class,i); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public InlineImportContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_inlineImport; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterInlineImport(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitInlineImport(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitInlineImport(this); + else return visitor.visitChildren(this); + } + } + + public final InlineImportContext inlineImport() throws RecognitionException { + InlineImportContext _localctx = new InlineImportContext(_ctx, getState()); + enterRule(_localctx, 110, RULE_inlineImport); + try { + enterOuterAlt(_localctx, 1); + { + setState(796); + match(LPAR); + setState(797); + match(IMPORT); + setState(798); + name(); + setState(799); + name(); + setState(800); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExportDescContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode FUNC() { return getToken(WatParser.FUNC, 0); } + public IdxContext idx() { + return getRuleContext(IdxContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public TerminalNode TABLE() { return getToken(WatParser.TABLE, 0); } + public TerminalNode MEMORY() { return getToken(WatParser.MEMORY, 0); } + public TerminalNode GLOBAL() { return getToken(WatParser.GLOBAL, 0); } + public ExportDescContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_exportDesc; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterExportDesc(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitExportDesc(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitExportDesc(this); + else return visitor.visitChildren(this); + } + } + + public final ExportDescContext exportDesc() throws RecognitionException { + ExportDescContext _localctx = new ExportDescContext(_ctx, getState()); + enterRule(_localctx, 112, RULE_exportDesc); + try { + setState(822); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,87,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(802); + match(LPAR); + setState(803); + match(FUNC); + setState(804); + idx(); + setState(805); + match(RPAR); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(807); + match(LPAR); + setState(808); + match(TABLE); + setState(809); + idx(); + setState(810); + match(RPAR); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(812); + match(LPAR); + setState(813); + match(MEMORY); + setState(814); + idx(); + setState(815); + match(RPAR); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(817); + match(LPAR); + setState(818); + match(GLOBAL); + setState(819); + idx(); + setState(820); + match(RPAR); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Export_Context extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode EXPORT() { return getToken(WatParser.EXPORT, 0); } + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public ExportDescContext exportDesc() { + return getRuleContext(ExportDescContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public Export_Context(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_export_; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterExport_(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitExport_(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitExport_(this); + else return visitor.visitChildren(this); + } + } + + public final Export_Context export_() throws RecognitionException { + Export_Context _localctx = new Export_Context(_ctx, getState()); + enterRule(_localctx, 114, RULE_export_); + try { + enterOuterAlt(_localctx, 1); + { + setState(824); + match(LPAR); + setState(825); + match(EXPORT); + setState(826); + name(); + setState(827); + exportDesc(); + setState(828); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class InlineExportContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode EXPORT() { return getToken(WatParser.EXPORT, 0); } + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public InlineExportContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_inlineExport; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterInlineExport(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitInlineExport(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitInlineExport(this); + else return visitor.visitChildren(this); + } + } + + public final InlineExportContext inlineExport() throws RecognitionException { + InlineExportContext _localctx = new InlineExportContext(_ctx, getState()); + enterRule(_localctx, 116, RULE_inlineExport); + try { + enterOuterAlt(_localctx, 1); + { + setState(830); + match(LPAR); + setState(831); + match(EXPORT); + setState(832); + name(); + setState(833); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class TypeDefContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode TYPE() { return getToken(WatParser.TYPE, 0); } + public DefTypeContext defType() { + return getRuleContext(DefTypeContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public BindVarContext bindVar() { + return getRuleContext(BindVarContext.class,0); + } + public TypeDefContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeDef; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterTypeDef(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTypeDef(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTypeDef(this); + else return visitor.visitChildren(this); + } + } + + public final TypeDefContext typeDef() throws RecognitionException { + TypeDefContext _localctx = new TypeDefContext(_ctx, getState()); + enterRule(_localctx, 118, RULE_typeDef); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(835); + match(LPAR); + setState(836); + match(TYPE); + setState(838); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(837); + bindVar(); + } + } + + setState(840); + defType(); + setState(841); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Start_Context extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode START_() { return getToken(WatParser.START_, 0); } + public IdxContext idx() { + return getRuleContext(IdxContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public Start_Context(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_start_; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterStart_(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitStart_(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitStart_(this); + else return visitor.visitChildren(this); + } + } + + public final Start_Context start_() throws RecognitionException { + Start_Context _localctx = new Start_Context(_ctx, getState()); + enterRule(_localctx, 120, RULE_start_); + try { + enterOuterAlt(_localctx, 1); + { + setState(843); + match(LPAR); + setState(844); + match(START_); + setState(845); + idx(); + setState(846); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ModuleFieldContext extends ParserRuleContext { + public TypeDefContext typeDef() { + return getRuleContext(TypeDefContext.class,0); + } + public GlobalContext global() { + return getRuleContext(GlobalContext.class,0); + } + public TableContext table() { + return getRuleContext(TableContext.class,0); + } + public MemoryContext memory() { + return getRuleContext(MemoryContext.class,0); + } + public FunctionContext function() { + return getRuleContext(FunctionContext.class,0); + } + public ElemContext elem() { + return getRuleContext(ElemContext.class,0); + } + public DataContext data() { + return getRuleContext(DataContext.class,0); + } + public Start_Context start_() { + return getRuleContext(Start_Context.class,0); + } + public SimportContext simport() { + return getRuleContext(SimportContext.class,0); + } + public Export_Context export_() { + return getRuleContext(Export_Context.class,0); + } + public ModuleFieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_moduleField; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterModuleField(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitModuleField(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitModuleField(this); + else return visitor.visitChildren(this); + } + } + + public final ModuleFieldContext moduleField() throws RecognitionException { + ModuleFieldContext _localctx = new ModuleFieldContext(_ctx, getState()); + enterRule(_localctx, 122, RULE_moduleField); + try { + setState(858); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,89,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(848); + typeDef(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(849); + global(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(850); + table(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(851); + memory(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(852); + function(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(853); + elem(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(854); + data(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(855); + start_(); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(856); + simport(); + } + break; + case 10: + enterOuterAlt(_localctx, 10); + { + setState(857); + export_(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Module_Context extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode MODULE() { return getToken(WatParser.MODULE, 0); } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public TerminalNode VAR() { return getToken(WatParser.VAR, 0); } + public List moduleField() { + return getRuleContexts(ModuleFieldContext.class); + } + public ModuleFieldContext moduleField(int i) { + return getRuleContext(ModuleFieldContext.class,i); + } + public Module_Context(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_module_; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterModule_(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitModule_(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitModule_(this); + else return visitor.visitChildren(this); + } + } + + public final Module_Context module_() throws RecognitionException { + Module_Context _localctx = new Module_Context(_ctx, getState()); + enterRule(_localctx, 124, RULE_module_); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(860); + match(LPAR); + setState(861); + match(MODULE); + setState(863); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(862); + match(VAR); + } + } + + setState(868); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==LPAR) { + { + { + setState(865); + moduleField(); + } + } + setState(870); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(871); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ScriptModuleContext extends ParserRuleContext { + public Module_Context module_() { + return getRuleContext(Module_Context.class,0); + } + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode MODULE() { return getToken(WatParser.MODULE, 0); } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public TerminalNode BIN() { return getToken(WatParser.BIN, 0); } + public TerminalNode QUOTE() { return getToken(WatParser.QUOTE, 0); } + public TerminalNode VAR() { return getToken(WatParser.VAR, 0); } + public List STRING_() { return getTokens(WatParser.STRING_); } + public TerminalNode STRING_(int i) { + return getToken(WatParser.STRING_, i); + } + public ScriptModuleContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_scriptModule; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterScriptModule(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitScriptModule(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitScriptModule(this); + else return visitor.visitChildren(this); + } + } + + public final ScriptModuleContext scriptModule() throws RecognitionException { + ScriptModuleContext _localctx = new ScriptModuleContext(_ctx, getState()); + enterRule(_localctx, 126, RULE_scriptModule); + int _la; + try { + setState(887); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,94,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(873); + module_(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(874); + match(LPAR); + setState(875); + match(MODULE); + setState(877); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(876); + match(VAR); + } + } + + setState(879); + _la = _input.LA(1); + if ( !(_la==BIN || _la==QUOTE) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(883); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==STRING_) { + { + { + setState(880); + match(STRING_); + } + } + setState(885); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(886); + match(RPAR); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class Action_Context extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode INVOKE() { return getToken(WatParser.INVOKE, 0); } + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public ConstListContext constList() { + return getRuleContext(ConstListContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public TerminalNode VAR() { return getToken(WatParser.VAR, 0); } + public TerminalNode GET() { return getToken(WatParser.GET, 0); } + public Action_Context(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_action_; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterAction_(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitAction_(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitAction_(this); + else return visitor.visitChildren(this); + } + } + + public final Action_Context action_() throws RecognitionException { + Action_Context _localctx = new Action_Context(_ctx, getState()); + enterRule(_localctx, 128, RULE_action_); + int _la; + try { + setState(906); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,97,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(889); + match(LPAR); + setState(890); + match(INVOKE); + setState(892); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(891); + match(VAR); + } + } + + setState(894); + name(); + setState(895); + constList(); + setState(896); + match(RPAR); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(898); + match(LPAR); + setState(899); + match(GET); + setState(901); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(900); + match(VAR); + } + } + + setState(903); + name(); + setState(904); + match(RPAR); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AssertionContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode ASSERT_MALFORMED() { return getToken(WatParser.ASSERT_MALFORMED, 0); } + public ScriptModuleContext scriptModule() { + return getRuleContext(ScriptModuleContext.class,0); + } + public TerminalNode STRING_() { return getToken(WatParser.STRING_, 0); } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public TerminalNode ASSERT_INVALID() { return getToken(WatParser.ASSERT_INVALID, 0); } + public TerminalNode ASSERT_UNLINKABLE() { return getToken(WatParser.ASSERT_UNLINKABLE, 0); } + public TerminalNode ASSERT_TRAP() { return getToken(WatParser.ASSERT_TRAP, 0); } + public TerminalNode ASSERT_RETURN() { return getToken(WatParser.ASSERT_RETURN, 0); } + public Action_Context action_() { + return getRuleContext(Action_Context.class,0); + } + public ConstListContext constList() { + return getRuleContext(ConstListContext.class,0); + } + public TerminalNode ASSERT_RETURN_CANONICAL_NAN() { return getToken(WatParser.ASSERT_RETURN_CANONICAL_NAN, 0); } + public TerminalNode ASSERT_RETURN_ARITHMETIC_NAN() { return getToken(WatParser.ASSERT_RETURN_ARITHMETIC_NAN, 0); } + public TerminalNode ASSERT_EXHAUSTION() { return getToken(WatParser.ASSERT_EXHAUSTION, 0); } + public AssertionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assertion; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterAssertion(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitAssertion(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitAssertion(this); + else return visitor.visitChildren(this); + } + } + + public final AssertionContext assertion() throws RecognitionException { + AssertionContext _localctx = new AssertionContext(_ctx, getState()); + enterRule(_localctx, 130, RULE_assertion); + try { + setState(960); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,98,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(908); + match(LPAR); + setState(909); + match(ASSERT_MALFORMED); + setState(910); + scriptModule(); + setState(911); + match(STRING_); + setState(912); + match(RPAR); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(914); + match(LPAR); + setState(915); + match(ASSERT_INVALID); + setState(916); + scriptModule(); + setState(917); + match(STRING_); + setState(918); + match(RPAR); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(920); + match(LPAR); + setState(921); + match(ASSERT_UNLINKABLE); + setState(922); + scriptModule(); + setState(923); + match(STRING_); + setState(924); + match(RPAR); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(926); + match(LPAR); + setState(927); + match(ASSERT_TRAP); + setState(928); + scriptModule(); + setState(929); + match(STRING_); + setState(930); + match(RPAR); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(932); + match(LPAR); + setState(933); + match(ASSERT_RETURN); + setState(934); + action_(); + setState(935); + constList(); + setState(936); + match(RPAR); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(938); + match(LPAR); + setState(939); + match(ASSERT_RETURN_CANONICAL_NAN); + setState(940); + action_(); + setState(941); + match(RPAR); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(943); + match(LPAR); + setState(944); + match(ASSERT_RETURN_ARITHMETIC_NAN); + setState(945); + action_(); + setState(946); + match(RPAR); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(948); + match(LPAR); + setState(949); + match(ASSERT_TRAP); + setState(950); + action_(); + setState(951); + match(STRING_); + setState(952); + match(RPAR); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(954); + match(LPAR); + setState(955); + match(ASSERT_EXHAUSTION); + setState(956); + action_(); + setState(957); + match(STRING_); + setState(958); + match(RPAR); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CmdContext extends ParserRuleContext { + public Action_Context action_() { + return getRuleContext(Action_Context.class,0); + } + public AssertionContext assertion() { + return getRuleContext(AssertionContext.class,0); + } + public ScriptModuleContext scriptModule() { + return getRuleContext(ScriptModuleContext.class,0); + } + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode REGISTER() { return getToken(WatParser.REGISTER, 0); } + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public TerminalNode VAR() { return getToken(WatParser.VAR, 0); } + public MetaContext meta() { + return getRuleContext(MetaContext.class,0); + } + public CmdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_cmd; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterCmd(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCmd(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCmd(this); + else return visitor.visitChildren(this); + } + } + + public final CmdContext cmd() throws RecognitionException { + CmdContext _localctx = new CmdContext(_ctx, getState()); + enterRule(_localctx, 132, RULE_cmd); + int _la; + try { + setState(974); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,100,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(962); + action_(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(963); + assertion(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(964); + scriptModule(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(965); + match(LPAR); + setState(966); + match(REGISTER); + setState(967); + name(); + setState(969); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(968); + match(VAR); + } + } + + setState(971); + match(RPAR); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(973); + meta(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MetaContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode SCRIPT() { return getToken(WatParser.SCRIPT, 0); } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public TerminalNode VAR() { return getToken(WatParser.VAR, 0); } + public List cmd() { + return getRuleContexts(CmdContext.class); + } + public CmdContext cmd(int i) { + return getRuleContext(CmdContext.class,i); + } + public TerminalNode INPUT() { return getToken(WatParser.INPUT, 0); } + public TerminalNode STRING_() { return getToken(WatParser.STRING_, 0); } + public TerminalNode OUTPUT() { return getToken(WatParser.OUTPUT, 0); } + public MetaContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_meta; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterMeta(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitMeta(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitMeta(this); + else return visitor.visitChildren(this); + } + } + + public final MetaContext meta() throws RecognitionException { + MetaContext _localctx = new MetaContext(_ctx, getState()); + enterRule(_localctx, 134, RULE_meta); + int _la; + try { + setState(1008); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,106,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(976); + match(LPAR); + setState(977); + match(SCRIPT); + setState(979); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(978); + match(VAR); + } + } + + setState(984); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==LPAR) { + { + { + setState(981); + cmd(); + } + } + setState(986); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(987); + match(RPAR); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(988); + match(LPAR); + setState(989); + match(INPUT); + setState(991); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(990); + match(VAR); + } + } + + setState(993); + match(STRING_); + setState(994); + match(RPAR); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(995); + match(LPAR); + setState(996); + match(OUTPUT); + setState(998); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(997); + match(VAR); + } + } + + setState(1000); + match(STRING_); + setState(1001); + match(RPAR); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1002); + match(LPAR); + setState(1003); + match(OUTPUT); + setState(1005); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAR) { + { + setState(1004); + match(VAR); + } + } + + setState(1007); + match(RPAR); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class WconstContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public TerminalNode CONST() { return getToken(WatParser.CONST, 0); } + public LiteralContext literal() { + return getRuleContext(LiteralContext.class,0); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public WconstContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_wconst; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterWconst(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitWconst(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitWconst(this); + else return visitor.visitChildren(this); + } + } + + public final WconstContext wconst() throws RecognitionException { + WconstContext _localctx = new WconstContext(_ctx, getState()); + enterRule(_localctx, 136, RULE_wconst); + try { + enterOuterAlt(_localctx, 1); + { + setState(1010); + match(LPAR); + setState(1011); + match(CONST); + setState(1012); + literal(); + setState(1013); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ConstListContext extends ParserRuleContext { + public List wconst() { + return getRuleContexts(WconstContext.class); + } + public WconstContext wconst(int i) { + return getRuleContext(WconstContext.class,i); + } + public ConstListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_constList; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterConstList(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitConstList(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitConstList(this); + else return visitor.visitChildren(this); + } + } + + public final ConstListContext constList() throws RecognitionException { + ConstListContext _localctx = new ConstListContext(_ctx, getState()); + enterRule(_localctx, 138, RULE_constList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1018); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==LPAR) { + { + { + setState(1015); + wconst(); + } + } + setState(1020); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ScriptContext extends ParserRuleContext { + public TerminalNode EOF() { return getToken(WatParser.EOF, 0); } + public List cmd() { + return getRuleContexts(CmdContext.class); + } + public CmdContext cmd(int i) { + return getRuleContext(CmdContext.class,i); + } + public List moduleField() { + return getRuleContexts(ModuleFieldContext.class); + } + public ModuleFieldContext moduleField(int i) { + return getRuleContext(ModuleFieldContext.class,i); + } + public ScriptContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_script; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterScript(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitScript(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitScript(this); + else return visitor.visitChildren(this); + } + } + + public final ScriptContext script() throws RecognitionException { + ScriptContext _localctx = new ScriptContext(_ctx, getState()); + enterRule(_localctx, 140, RULE_script); + int _la; + try { + setState(1035); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,110,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1024); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==LPAR) { + { + { + setState(1021); + cmd(); + } + } + setState(1026); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1027); + match(EOF); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1029); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(1028); + moduleField(); + } + } + setState(1031); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==LPAR ); + setState(1033); + match(EOF); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ModuleContext extends ParserRuleContext { + public Module_Context module_() { + return getRuleContext(Module_Context.class,0); + } + public TerminalNode EOF() { return getToken(WatParser.EOF, 0); } + public List moduleField() { + return getRuleContexts(ModuleFieldContext.class); + } + public ModuleFieldContext moduleField(int i) { + return getRuleContext(ModuleFieldContext.class,i); + } + public ModuleContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_module; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterModule(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitModule(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitModule(this); + else return visitor.visitChildren(this); + } + } + + public final ModuleContext module() throws RecognitionException { + ModuleContext _localctx = new ModuleContext(_ctx, getState()); + enterRule(_localctx, 142, RULE_module); + int _la; + try { + setState(1047); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,112,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1037); + module_(); + setState(1038); + match(EOF); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1043); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==LPAR) { + { + { + setState(1040); + moduleField(); + } + } + setState(1045); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1046); + match(EOF); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static final String _serializedATN = + "\u0004\u0001\u0097\u041a\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001"+ + "\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004"+ + "\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007"+ + "\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b"+ + "\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007"+ + "\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007"+ + "\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007"+ + "\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007"+ + "\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007"+ + "\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007"+ + "\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007"+ + "\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007"+ + "\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007"+ + ",\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u00070\u00021\u0007"+ + "1\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u00075\u00026\u0007"+ + "6\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007:\u0002;\u0007"+ + ";\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007?\u0002@\u0007"+ + "@\u0002A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007D\u0002E\u0007"+ + "E\u0002F\u0007F\u0002G\u0007G\u0001\u0000\u0001\u0000\u0001\u0001\u0001"+ + "\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001"+ + "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0003\u0005\u009e\b\u0005\u0001"+ + "\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+ + "\u0007\u0001\u0007\u0003\u0007\u00a8\b\u0007\u0001\b\u0001\b\u0001\b\u0001"+ + "\b\u0001\b\u0001\t\u0001\t\u0001\t\u0005\t\u00b2\b\t\n\t\f\t\u00b5\t\t"+ + "\u0001\t\u0001\t\u0001\t\u0003\t\u00ba\b\t\u0001\t\u0005\t\u00bd\b\t\n"+ + "\t\f\t\u00c0\t\t\u0001\n\u0001\n\u0001\n\u0005\n\u00c5\b\n\n\n\f\n\u00c8"+ + "\t\n\u0001\n\u0005\n\u00cb\b\n\n\n\f\n\u00ce\t\n\u0001\u000b\u0001\u000b"+ + "\u0001\u000b\u0001\f\u0001\f\u0003\f\u00d5\b\f\u0001\f\u0001\f\u0001\r"+ + "\u0001\r\u0003\r\u00db\b\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+ + "\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0011"+ + "\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0003\u0012"+ + "\u00ec\b\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+ + "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0004\u0014\u0102\b\u0014\u000b\u0014"+ + "\f\u0014\u0103\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ + "\u0003\u0014\u0117\b\u0014\u0001\u0014\u0003\u0014\u011a\b\u0014\u0001"+ + "\u0014\u0001\u0014\u0003\u0014\u011e\b\u0014\u0001\u0014\u0003\u0014\u0121"+ + "\b\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0003\u0014\u0135\b\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001"+ + "\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+ + "\u0017\u0001\u0017\u0003\u0017\u0142\b\u0017\u0001\u0018\u0001\u0018\u0001"+ + "\u0018\u0003\u0018\u0147\b\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ + "\u001a\u0001\u001a\u0003\u001a\u014e\b\u001a\u0001\u001a\u0001\u001a\u0001"+ + "\u001a\u0003\u001a\u0153\b\u001a\u0001\u001a\u0003\u001a\u0156\b\u001a"+ + "\u0001\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u015b\b\u001b\n\u001b"+ + "\f\u001b\u015e\t\u001b\u0001\u001b\u0005\u001b\u0161\b\u001b\n\u001b\f"+ + "\u001b\u0164\t\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u0169"+ + "\b\u001b\n\u001b\f\u001b\u016c\t\u001b\u0001\u001b\u0005\u001b\u016f\b"+ + "\u001b\n\u001b\f\u001b\u0172\t\u001b\u0001\u001c\u0001\u001c\u0001\u001c"+ + "\u0005\u001c\u0177\b\u001c\n\u001c\f\u001c\u017a\t\u001c\u0001\u001c\u0005"+ + "\u001c\u017d\b\u001c\n\u001c\f\u001c\u0180\t\u001c\u0001\u001c\u0001\u001c"+ + "\u0001\u001d\u0001\u001d\u0001\u001d\u0005\u001d\u0187\b\u001d\n\u001d"+ + "\f\u001d\u018a\t\u001d\u0001\u001d\u0005\u001d\u018d\b\u001d\n\u001d\f"+ + "\u001d\u0190\t\u001d\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0003"+ + "\u001e\u0196\b\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0003\u001e\u019b"+ + "\b\u001e\u0001\u001e\u0001\u001e\u0003\u001e\u019f\b\u001e\u0001\u001e"+ + "\u0001\u001e\u0001\u001e\u0003\u001e\u01a4\b\u001e\u0001\u001e\u0001\u001e"+ + "\u0003\u001e\u01a8\b\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0003\u001e"+ + "\u01ad\b\u001e\u0001\u001e\u0003\u001e\u01b0\b\u001e\u0001\u001e\u0001"+ + "\u001e\u0003\u001e\u01b4\b\u001e\u0003\u001e\u01b6\b\u001e\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0003\u001f\u01bd\b\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0003\u001f\u01c3\b\u001f"+ + "\u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001!\u0001\"\u0001\"\u0005"+ + "\"\u01ce\b\"\n\"\f\"\u01d1\t\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\""+ + "\u0001\"\u0003\"\u01d9\b\"\u0001\"\u0001\"\u0001\"\u0003\"\u01de\b\"\u0001"+ + "\"\u0001\"\u0001\"\u0003\"\u01e3\b\"\u0001\"\u0001\"\u0005\"\u01e7\b\""+ + "\n\"\f\"\u01ea\t\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+ + "\"\u0001\"\u0003\"\u01f4\b\"\u0003\"\u01f6\b\"\u0001#\u0003#\u01f9\b#"+ + "\u0001#\u0001#\u0001$\u0001$\u0001$\u0005$\u0200\b$\n$\f$\u0203\t$\u0001"+ + "$\u0005$\u0206\b$\n$\f$\u0209\t$\u0001$\u0001$\u0001%\u0001%\u0001%\u0005"+ + "%\u0210\b%\n%\f%\u0213\t%\u0001%\u0005%\u0216\b%\n%\f%\u0219\t%\u0001"+ + "%\u0005%\u021c\b%\n%\f%\u021f\t%\u0001&\u0005&\u0222\b&\n&\f&\u0225\t"+ + "&\u0001&\u0003&\u0228\b&\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0003(\u022f"+ + "\b(\u0001(\u0001(\u0001(\u0001)\u0003)\u0235\b)\u0001)\u0001)\u0001)\u0003"+ + ")\u023a\b)\u0001)\u0001)\u0001)\u0001)\u0001)\u0003)\u0241\b)\u0001*\u0001"+ + "*\u0001*\u0001+\u0001+\u0001+\u0005+\u0249\b+\n+\f+\u024c\t+\u0001+\u0001"+ + "+\u0001+\u0003+\u0251\b+\u0001+\u0005+\u0254\b+\n+\f+\u0257\t+\u0001+"+ + "\u0001+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0003,\u0261\b,\u0001"+ + "-\u0001-\u0001-\u0003-\u0266\b-\u0001-\u0001-\u0001-\u0001-\u0005-\u026c"+ + "\b-\n-\f-\u026f\t-\u0001-\u0001-\u0001-\u0001-\u0001-\u0003-\u0276\b-"+ + "\u0001-\u0001-\u0005-\u027a\b-\n-\f-\u027d\t-\u0001-\u0001-\u0003-\u0281"+ + "\b-\u0001.\u0001.\u0001.\u0003.\u0286\b.\u0001.\u0001.\u0001.\u0001/\u0001"+ + "/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0005"+ + "/\u0296\b/\n/\f/\u0299\t/\u0001/\u0001/\u0003/\u029d\b/\u00010\u00010"+ + "\u00010\u00030\u02a2\b0\u00010\u00010\u00010\u00010\u00050\u02a8\b0\n"+ + "0\f0\u02ab\t0\u00010\u00010\u00010\u00010\u00010\u00030\u02b2\b0\u0001"+ + "0\u00010\u00050\u02b6\b0\n0\f0\u02b9\t0\u00010\u00010\u00030\u02bd\b0"+ + "\u00011\u00011\u00011\u00031\u02c2\b1\u00011\u00011\u00011\u00012\u0001"+ + "2\u00012\u00012\u00012\u00012\u00012\u00012\u00012\u00012\u00052\u02d1"+ + "\b2\n2\f2\u02d4\t2\u00012\u00032\u02d7\b2\u00013\u00013\u00013\u00033"+ + "\u02dc\b3\u00013\u00013\u00013\u00014\u00014\u00014\u00014\u00014\u0001"+ + "4\u00014\u00014\u00014\u00034\u02ea\b4\u00015\u00015\u00015\u00035\u02ef"+ + "\b5\u00015\u00015\u00015\u00015\u00015\u00015\u00035\u02f7\b5\u00015\u0001"+ + "5\u00015\u00015\u00015\u00015\u00035\u02ff\b5\u00015\u00015\u00015\u0001"+ + "5\u00015\u00015\u00035\u0307\b5\u00015\u00015\u00015\u00015\u00015\u0001"+ + "5\u00035\u030f\b5\u00015\u00015\u00015\u00035\u0314\b5\u00016\u00016\u0001"+ + "6\u00016\u00016\u00016\u00016\u00017\u00017\u00017\u00017\u00017\u0001"+ + "7\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ + "8\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ + "8\u00038\u0337\b8\u00019\u00019\u00019\u00019\u00019\u00019\u0001:\u0001"+ + ":\u0001:\u0001:\u0001:\u0001;\u0001;\u0001;\u0003;\u0347\b;\u0001;\u0001"+ + ";\u0001;\u0001<\u0001<\u0001<\u0001<\u0001<\u0001=\u0001=\u0001=\u0001"+ + "=\u0001=\u0001=\u0001=\u0001=\u0001=\u0001=\u0003=\u035b\b=\u0001>\u0001"+ + ">\u0001>\u0003>\u0360\b>\u0001>\u0005>\u0363\b>\n>\f>\u0366\t>\u0001>"+ + "\u0001>\u0001?\u0001?\u0001?\u0001?\u0003?\u036e\b?\u0001?\u0001?\u0005"+ + "?\u0372\b?\n?\f?\u0375\t?\u0001?\u0003?\u0378\b?\u0001@\u0001@\u0001@"+ + "\u0003@\u037d\b@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0003"+ + "@\u0386\b@\u0001@\u0001@\u0001@\u0003@\u038b\b@\u0001A\u0001A\u0001A\u0001"+ + "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+ + "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+ + "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+ + "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+ + "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0003A\u03c1"+ + "\bA\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0003B\u03ca\bB\u0001"+ + "B\u0001B\u0001B\u0003B\u03cf\bB\u0001C\u0001C\u0001C\u0003C\u03d4\bC\u0001"+ + "C\u0005C\u03d7\bC\nC\fC\u03da\tC\u0001C\u0001C\u0001C\u0001C\u0003C\u03e0"+ + "\bC\u0001C\u0001C\u0001C\u0001C\u0001C\u0003C\u03e7\bC\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0003C\u03ee\bC\u0001C\u0003C\u03f1\bC\u0001D\u0001D\u0001"+ + "D\u0001D\u0001D\u0001E\u0005E\u03f9\bE\nE\fE\u03fc\tE\u0001F\u0005F\u03ff"+ + "\bF\nF\fF\u0402\tF\u0001F\u0001F\u0004F\u0406\bF\u000bF\fF\u0407\u0001"+ + "F\u0001F\u0003F\u040c\bF\u0001G\u0001G\u0001G\u0001G\u0005G\u0412\bG\n"+ + "G\fG\u0415\tG\u0001G\u0003G\u0418\bG\u0001G\u0000\u0000H\u0000\u0002\u0004"+ + "\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e \""+ + "$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086"+ + "\u0088\u008a\u008c\u008e\u0000\u0006\u0001\u0000\u0004\u0005\u0001\u0000"+ + "\n\u000b\u0001\u0000uv\u0001\u0000\u0003\u0005\u0002\u0000\u0003\u0003"+ + "\u0094\u0094\u0001\u0000\u0084\u0085\u0489\u0000\u0090\u0001\u0000\u0000"+ + "\u0000\u0002\u0092\u0001\u0000\u0000\u0000\u0004\u0094\u0001\u0000\u0000"+ + "\u0000\u0006\u0096\u0001\u0000\u0000\u0000\b\u0098\u0001\u0000\u0000\u0000"+ + "\n\u009d\u0001\u0000\u0000\u0000\f\u009f\u0001\u0000\u0000\u0000\u000e"+ + "\u00a7\u0001\u0000\u0000\u0000\u0010\u00a9\u0001\u0000\u0000\u0000\u0012"+ + "\u00be\u0001\u0000\u0000\u0000\u0014\u00cc\u0001\u0000\u0000\u0000\u0016"+ + "\u00cf\u0001\u0000\u0000\u0000\u0018\u00d2\u0001\u0000\u0000\u0000\u001a"+ + "\u00d8\u0001\u0000\u0000\u0000\u001c\u00dc\u0001\u0000\u0000\u0000\u001e"+ + "\u00e1\u0001\u0000\u0000\u0000 \u00e3\u0001\u0000\u0000\u0000\"\u00e5"+ + "\u0001\u0000\u0000\u0000$\u00eb\u0001\u0000\u0000\u0000&\u00ed\u0001\u0000"+ + "\u0000\u0000(\u0134\u0001\u0000\u0000\u0000*\u0136\u0001\u0000\u0000\u0000"+ + ",\u0139\u0001\u0000\u0000\u0000.\u013c\u0001\u0000\u0000\u00000\u0143"+ + "\u0001\u0000\u0000\u00002\u0148\u0001\u0000\u0000\u00004\u0155\u0001\u0000"+ + "\u0000\u00006\u0162\u0001\u0000\u0000\u00008\u017e\u0001\u0000\u0000\u0000"+ + ":\u018e\u0001\u0000\u0000\u0000<\u01b5\u0001\u0000\u0000\u0000>\u01c2"+ + "\u0001\u0000\u0000\u0000@\u01c4\u0001\u0000\u0000\u0000B\u01c7\u0001\u0000"+ + "\u0000\u0000D\u01f5\u0001\u0000\u0000\u0000F\u01f8\u0001\u0000\u0000\u0000"+ + "H\u0207\u0001\u0000\u0000\u0000J\u0217\u0001\u0000\u0000\u0000L\u0223"+ + "\u0001\u0000\u0000\u0000N\u0229\u0001\u0000\u0000\u0000P\u022b\u0001\u0000"+ + "\u0000\u0000R\u0240\u0001\u0000\u0000\u0000T\u0242\u0001\u0000\u0000\u0000"+ + "V\u0255\u0001\u0000\u0000\u0000X\u0260\u0001\u0000\u0000\u0000Z\u0280"+ + "\u0001\u0000\u0000\u0000\\\u0282\u0001\u0000\u0000\u0000^\u029c\u0001"+ + "\u0000\u0000\u0000`\u02bc\u0001\u0000\u0000\u0000b\u02be\u0001\u0000\u0000"+ + "\u0000d\u02d6\u0001\u0000\u0000\u0000f\u02d8\u0001\u0000\u0000\u0000h"+ + "\u02e9\u0001\u0000\u0000\u0000j\u0313\u0001\u0000\u0000\u0000l\u0315\u0001"+ + "\u0000\u0000\u0000n\u031c\u0001\u0000\u0000\u0000p\u0336\u0001\u0000\u0000"+ + "\u0000r\u0338\u0001\u0000\u0000\u0000t\u033e\u0001\u0000\u0000\u0000v"+ + "\u0343\u0001\u0000\u0000\u0000x\u034b\u0001\u0000\u0000\u0000z\u035a\u0001"+ + "\u0000\u0000\u0000|\u035c\u0001\u0000\u0000\u0000~\u0377\u0001\u0000\u0000"+ + "\u0000\u0080\u038a\u0001\u0000\u0000\u0000\u0082\u03c0\u0001\u0000\u0000"+ + "\u0000\u0084\u03ce\u0001\u0000\u0000\u0000\u0086\u03f0\u0001\u0000\u0000"+ + "\u0000\u0088\u03f2\u0001\u0000\u0000\u0000\u008a\u03fa\u0001\u0000\u0000"+ + "\u0000\u008c\u040b\u0001\u0000\u0000\u0000\u008e\u0417\u0001\u0000\u0000"+ + "\u0000\u0090\u0091\u0007\u0000\u0000\u0000\u0091\u0001\u0001\u0000\u0000"+ + "\u0000\u0092\u0093\u0005\u0006\u0000\u0000\u0093\u0003\u0001\u0000\u0000"+ + "\u0000\u0094\u0095\u0005\u0007\u0000\u0000\u0095\u0005\u0001\u0000\u0000"+ + "\u0000\u0096\u0097\u0007\u0001\u0000\u0000\u0097\u0007\u0001\u0000\u0000"+ + "\u0000\u0098\u0099\u0005\u0095\u0000\u0000\u0099\t\u0001\u0000\u0000\u0000"+ + "\u009a\u009e\u0003\u0004\u0002\u0000\u009b\u009e\u0003\b\u0004\u0000\u009c"+ + "\u009e\u0003\u0006\u0003\u0000\u009d\u009a\u0001\u0000\u0000\u0000\u009d"+ + "\u009b\u0001\u0000\u0000\u0000\u009d\u009c\u0001\u0000\u0000\u0000\u009e"+ + "\u000b\u0001\u0000\u0000\u0000\u009f\u00a0\u0007\u0002\u0000\u0000\u00a0"+ + "\r\u0001\u0000\u0000\u0000\u00a1\u00a8\u0003\n\u0005\u0000\u00a2\u00a3"+ + "\u0005\u0001\u0000\u0000\u00a3\u00a4\u0005\f\u0000\u0000\u00a4\u00a5\u0003"+ + "\n\u0005\u0000\u00a5\u00a6\u0005\u0002\u0000\u0000\u00a6\u00a8\u0001\u0000"+ + "\u0000\u0000\u00a7\u00a1\u0001\u0000\u0000\u0000\u00a7\u00a2\u0001\u0000"+ + "\u0000\u0000\u00a8\u000f\u0001\u0000\u0000\u0000\u00a9\u00aa\u0005\u0001"+ + "\u0000\u0000\u00aa\u00ab\u0005u\u0000\u0000\u00ab\u00ac\u0003\u0016\u000b"+ + "\u0000\u00ac\u00ad\u0005\u0002\u0000\u0000\u00ad\u0011\u0001\u0000\u0000"+ + "\u0000\u00ae\u00af\u0005\u0001\u0000\u0000\u00af\u00b9\u0005x\u0000\u0000"+ + "\u00b0\u00b2\u0003\n\u0005\u0000\u00b1\u00b0\u0001\u0000\u0000\u0000\u00b2"+ + "\u00b5\u0001\u0000\u0000\u0000\u00b3\u00b1\u0001\u0000\u0000\u0000\u00b3"+ + "\u00b4\u0001\u0000\u0000\u0000\u00b4\u00ba\u0001\u0000\u0000\u0000\u00b5"+ + "\u00b3\u0001\u0000\u0000\u0000\u00b6\u00b7\u0003\"\u0011\u0000\u00b7\u00b8"+ + "\u0003\n\u0005\u0000\u00b8\u00ba\u0001\u0000\u0000\u0000\u00b9\u00b3\u0001"+ + "\u0000\u0000\u0000\u00b9\u00b6\u0001\u0000\u0000\u0000\u00ba\u00bb\u0001"+ + "\u0000\u0000\u0000\u00bb\u00bd\u0005\u0002\u0000\u0000\u00bc\u00ae\u0001"+ + "\u0000\u0000\u0000\u00bd\u00c0\u0001\u0000\u0000\u0000\u00be\u00bc\u0001"+ + "\u0000\u0000\u0000\u00be\u00bf\u0001\u0000\u0000\u0000\u00bf\u0013\u0001"+ + "\u0000\u0000\u0000\u00c0\u00be\u0001\u0000\u0000\u0000\u00c1\u00c2\u0005"+ + "\u0001\u0000\u0000\u00c2\u00c6\u0005y\u0000\u0000\u00c3\u00c5\u0003\n"+ + "\u0005\u0000\u00c4\u00c3\u0001\u0000\u0000\u0000\u00c5\u00c8\u0001\u0000"+ + "\u0000\u0000\u00c6\u00c4\u0001\u0000\u0000\u0000\u00c6\u00c7\u0001\u0000"+ + "\u0000\u0000\u00c7\u00c9\u0001\u0000\u0000\u0000\u00c8\u00c6\u0001\u0000"+ + "\u0000\u0000\u00c9\u00cb\u0005\u0002\u0000\u0000\u00ca\u00c1\u0001\u0000"+ + "\u0000\u0000\u00cb\u00ce\u0001\u0000\u0000\u0000\u00cc\u00ca\u0001\u0000"+ + "\u0000\u0000\u00cc\u00cd\u0001\u0000\u0000\u0000\u00cd\u0015\u0001\u0000"+ + "\u0000\u0000\u00ce\u00cc\u0001\u0000\u0000\u0000\u00cf\u00d0\u0003\u0012"+ + "\t\u0000\u00d0\u00d1\u0003\u0014\n\u0000\u00d1\u0017\u0001\u0000\u0000"+ + "\u0000\u00d2\u00d4\u0005\u0003\u0000\u0000\u00d3\u00d5\u0005\u0003\u0000"+ + "\u0000\u00d4\u00d3\u0001\u0000\u0000\u0000\u00d4\u00d5\u0001\u0000\u0000"+ + "\u0000\u00d5\u00d6\u0001\u0000\u0000\u0000\u00d6\u00d7\u0003\u0006\u0003"+ + "\u0000\u00d7\u0019\u0001\u0000\u0000\u0000\u00d8\u00da\u0005\u0003\u0000"+ + "\u0000\u00d9\u00db\u0005\u0003\u0000\u0000\u00da\u00d9\u0001\u0000\u0000"+ + "\u0000\u00da\u00db\u0001\u0000\u0000\u0000\u00db\u001b\u0001\u0000\u0000"+ + "\u0000\u00dc\u00dd\u0005\u0001\u0000\u0000\u00dd\u00de\u0005t\u0000\u0000"+ + "\u00de\u00df\u0003 \u0010\u0000\u00df\u00e0\u0005\u0002\u0000\u0000\u00e0"+ + "\u001d\u0001\u0000\u0000\u0000\u00e1\u00e2\u0007\u0003\u0000\u0000\u00e2"+ + "\u001f\u0001\u0000\u0000\u0000\u00e3\u00e4\u0007\u0004\u0000\u0000\u00e4"+ + "!\u0001\u0000\u0000\u0000\u00e5\u00e6\u0005\u0094\u0000\u0000\u00e6#\u0001"+ + "\u0000\u0000\u0000\u00e7\u00ec\u0003(\u0014\u0000\u00e8\u00ec\u0003<\u001e"+ + "\u0000\u00e9\u00ec\u0003B!\u0000\u00ea\u00ec\u0003&\u0013\u0000\u00eb"+ + "\u00e7\u0001\u0000\u0000\u0000\u00eb\u00e8\u0001\u0000\u0000\u0000\u00eb"+ + "\u00e9\u0001\u0000\u0000\u0000\u00eb\u00ea\u0001\u0000\u0000\u0000\u00ec"+ + "%\u0001\u0000\u0000\u0000\u00ed\u00ee\u0005\u0015\u0000\u0000\u00ee\u00ef"+ + "\u0005\u0001\u0000\u0000\u00ef\u00f0\u0003L&\u0000\u00f0\u00f1\u0005\u0016"+ + "\u0000\u0000\u00f1\u00f2\u0003L&\u0000\u00f2\u00f3\u0005\u0016\u0000\u0000"+ + "\u00f3\u00f4\u0003L&\u0000\u00f4\u00f5\u0005\u0002\u0000\u0000\u00f5\u00f6"+ + "\u0003L&\u0000\u00f6\'\u0001\u0000\u0000\u0000\u00f7\u0135\u0005\u0011"+ + "\u0000\u0000\u00f8\u0135\u0005\r\u0000\u0000\u00f9\u0135\u0005\u0012\u0000"+ + "\u0000\u00fa\u0135\u00032\u0019\u0000\u00fb\u00fc\u0005\u0018\u0000\u0000"+ + "\u00fc\u0135\u0003 \u0010\u0000\u00fd\u00fe\u0005\u0019\u0000\u0000\u00fe"+ + "\u0135\u0003 \u0010\u0000\u00ff\u0101\u0005\u001a\u0000\u0000\u0100\u0102"+ + "\u0003 \u0010\u0000\u0101\u0100\u0001\u0000\u0000\u0000\u0102\u0103\u0001"+ + "\u0000\u0000\u0000\u0103\u0101\u0001\u0000\u0000\u0000\u0103\u0104\u0001"+ + "\u0000\u0000\u0000\u0104\u0135\u0001\u0000\u0000\u0000\u0105\u0135\u0005"+ + "\u001b\u0000\u0000\u0106\u0107\u0005 \u0000\u0000\u0107\u0135\u0003 \u0010"+ + "\u0000\u0108\u0109\u0005\"\u0000\u0000\u0109\u0135\u0003 \u0010\u0000"+ + "\u010a\u010b\u0005$\u0000\u0000\u010b\u0135\u0003 \u0010\u0000\u010c\u010d"+ + "\u0005%\u0000\u0000\u010d\u0135\u0003 \u0010\u0000\u010e\u010f\u0005&"+ + "\u0000\u0000\u010f\u0135\u0003 \u0010\u0000\u0110\u0111\u0005\'\u0000"+ + "\u0000\u0111\u0135\u0003 \u0010\u0000\u0112\u0113\u0005(\u0000\u0000\u0113"+ + "\u0135\u0003 \u0010\u0000\u0114\u0116\u0003.\u0017\u0000\u0115\u0117\u0003"+ + "*\u0015\u0000\u0116\u0115\u0001\u0000\u0000\u0000\u0116\u0117\u0001\u0000"+ + "\u0000\u0000\u0117\u0119\u0001\u0000\u0000\u0000\u0118\u011a\u0003,\u0016"+ + "\u0000\u0119\u0118\u0001\u0000\u0000\u0000\u0119\u011a\u0001\u0000\u0000"+ + "\u0000\u011a\u0135\u0001\u0000\u0000\u0000\u011b\u011d\u00030\u0018\u0000"+ + "\u011c\u011e\u0003*\u0015\u0000\u011d\u011c\u0001\u0000\u0000\u0000\u011d"+ + "\u011e\u0001\u0000\u0000\u0000\u011e\u0120\u0001\u0000\u0000\u0000\u011f"+ + "\u0121\u0003,\u0016\u0000\u0120\u011f\u0001\u0000\u0000\u0000\u0120\u0121"+ + "\u0001\u0000\u0000\u0000\u0121\u0135\u0001\u0000\u0000\u0000\u0122\u0135"+ + "\u0005j\u0000\u0000\u0123\u0135\u0005k\u0000\u0000\u0124\u0135\u0005l"+ + "\u0000\u0000\u0125\u0135\u0005m\u0000\u0000\u0126\u0127\u0005n\u0000\u0000"+ + "\u0127\u0135\u0003 \u0010\u0000\u0128\u0129\u0005\b\u0000\u0000\u0129"+ + "\u0135\u0003\u001e\u000f\u0000\u012a\u0135\u0005\t\u0000\u0000\u012b\u0135"+ + "\u0005\u000e\u0000\u0000\u012c\u0135\u0005\u000f\u0000\u0000\u012d\u0135"+ + "\u0005\u0010\u0000\u0000\u012e\u0135\u0005o\u0000\u0000\u012f\u0135\u0005"+ + "p\u0000\u0000\u0130\u0135\u0005q\u0000\u0000\u0131\u0135\u0005r\u0000"+ + "\u0000\u0132\u0135\u0005s\u0000\u0000\u0133\u0135\u00034\u001a\u0000\u0134"+ + "\u00f7\u0001\u0000\u0000\u0000\u0134\u00f8\u0001\u0000\u0000\u0000\u0134"+ + "\u00f9\u0001\u0000\u0000\u0000\u0134\u00fa\u0001\u0000\u0000\u0000\u0134"+ + "\u00fb\u0001\u0000\u0000\u0000\u0134\u00fd\u0001\u0000\u0000\u0000\u0134"+ + "\u00ff\u0001\u0000\u0000\u0000\u0134\u0105\u0001\u0000\u0000\u0000\u0134"+ + "\u0106\u0001\u0000\u0000\u0000\u0134\u0108\u0001\u0000\u0000\u0000\u0134"+ + "\u010a\u0001\u0000\u0000\u0000\u0134\u010c\u0001\u0000\u0000\u0000\u0134"+ + "\u010e\u0001\u0000\u0000\u0000\u0134\u0110\u0001\u0000\u0000\u0000\u0134"+ + "\u0112\u0001\u0000\u0000\u0000\u0134\u0114\u0001\u0000\u0000\u0000\u0134"+ + "\u011b\u0001\u0000\u0000\u0000\u0134\u0122\u0001\u0000\u0000\u0000\u0134"+ + "\u0123\u0001\u0000\u0000\u0000\u0134\u0124\u0001\u0000\u0000\u0000\u0134"+ + "\u0125\u0001\u0000\u0000\u0000\u0134\u0126\u0001\u0000\u0000\u0000\u0134"+ + "\u0128\u0001\u0000\u0000\u0000\u0134\u012a\u0001\u0000\u0000\u0000\u0134"+ + "\u012b\u0001\u0000\u0000\u0000\u0134\u012c\u0001\u0000\u0000\u0000\u0134"+ + "\u012d\u0001\u0000\u0000\u0000\u0134\u012e\u0001\u0000\u0000\u0000\u0134"+ + "\u012f\u0001\u0000\u0000\u0000\u0134\u0130\u0001\u0000\u0000\u0000\u0134"+ + "\u0131\u0001\u0000\u0000\u0000\u0134\u0132\u0001\u0000\u0000\u0000\u0134"+ + "\u0133\u0001\u0000\u0000\u0000\u0135)\u0001\u0000\u0000\u0000\u0136\u0137"+ + "\u0005,\u0000\u0000\u0137\u0138\u0005\u0003\u0000\u0000\u0138+\u0001\u0000"+ + "\u0000\u0000\u0139\u013a\u0005-\u0000\u0000\u013a\u013b\u0005\u0003\u0000"+ + "\u0000\u013b-\u0001\u0000\u0000\u0000\u013c\u013d\u0003\u0004\u0002\u0000"+ + "\u013d\u0141\u0005)\u0000\u0000\u013e\u013f\u0005/\u0000\u0000\u013f\u0140"+ + "\u0005+\u0000\u0000\u0140\u0142\u0005.\u0000\u0000\u0141\u013e\u0001\u0000"+ + "\u0000\u0000\u0141\u0142\u0001\u0000\u0000\u0000\u0142/\u0001\u0000\u0000"+ + "\u0000\u0143\u0144\u0003\u0004\u0002\u0000\u0144\u0146\u0005*\u0000\u0000"+ + "\u0145\u0147\u0005/\u0000\u0000\u0146\u0145\u0001\u0000\u0000\u0000\u0146"+ + "\u0147\u0001\u0000\u0000\u0000\u01471\u0001\u0000\u0000\u0000\u0148\u0149"+ + "\u0003\u0004\u0002\u0000\u0149\u014a\u0005\u001f\u0000\u0000\u014a3\u0001"+ + "\u0000\u0000\u0000\u014b\u014d\u0005!\u0000\u0000\u014c\u014e\u0003 \u0010"+ + "\u0000\u014d\u014c\u0001\u0000\u0000\u0000\u014d\u014e\u0001\u0000\u0000"+ + "\u0000\u014e\u014f\u0001\u0000\u0000\u0000\u014f\u0156\u0003\u001c\u000e"+ + "\u0000\u0150\u0152\u0005#\u0000\u0000\u0151\u0153\u0003 \u0010\u0000\u0152"+ + "\u0151\u0001\u0000\u0000\u0000\u0152\u0153\u0001\u0000\u0000\u0000\u0153"+ + "\u0154\u0001\u0000\u0000\u0000\u0154\u0156\u0003\u001c\u000e\u0000\u0155"+ + "\u014b\u0001\u0000\u0000\u0000\u0155\u0150\u0001\u0000\u0000\u0000\u0156"+ + "5\u0001\u0000\u0000\u0000\u0157\u0158\u0005\u0001\u0000\u0000\u0158\u015c"+ + "\u0005x\u0000\u0000\u0159\u015b\u0003\n\u0005\u0000\u015a\u0159\u0001"+ + "\u0000\u0000\u0000\u015b\u015e\u0001\u0000\u0000\u0000\u015c\u015a\u0001"+ + "\u0000\u0000\u0000\u015c\u015d\u0001\u0000\u0000\u0000\u015d\u015f\u0001"+ + "\u0000\u0000\u0000\u015e\u015c\u0001\u0000\u0000\u0000\u015f\u0161\u0005"+ + "\u0002\u0000\u0000\u0160\u0157\u0001\u0000\u0000\u0000\u0161\u0164\u0001"+ + "\u0000\u0000\u0000\u0162\u0160\u0001\u0000\u0000\u0000\u0162\u0163\u0001"+ + "\u0000\u0000\u0000\u0163\u0170\u0001\u0000\u0000\u0000\u0164\u0162\u0001"+ + "\u0000\u0000\u0000\u0165\u0166\u0005\u0001\u0000\u0000\u0166\u016a\u0005"+ + "y\u0000\u0000\u0167\u0169\u0003\n\u0005\u0000\u0168\u0167\u0001\u0000"+ + "\u0000\u0000\u0169\u016c\u0001\u0000\u0000\u0000\u016a\u0168\u0001\u0000"+ + "\u0000\u0000\u016a\u016b\u0001\u0000\u0000\u0000\u016b\u016d\u0001\u0000"+ + "\u0000\u0000\u016c\u016a\u0001\u0000\u0000\u0000\u016d\u016f\u0005\u0002"+ + "\u0000\u0000\u016e\u0165\u0001\u0000\u0000\u0000\u016f\u0172\u0001\u0000"+ + "\u0000\u0000\u0170\u016e\u0001\u0000\u0000\u0000\u0170\u0171\u0001\u0000"+ + "\u0000\u0000\u01717\u0001\u0000\u0000\u0000\u0172\u0170\u0001\u0000\u0000"+ + "\u0000\u0173\u0174\u0005\u0001\u0000\u0000\u0174\u0178\u0005x\u0000\u0000"+ + "\u0175\u0177\u0003\n\u0005\u0000\u0176\u0175\u0001\u0000\u0000\u0000\u0177"+ + "\u017a\u0001\u0000\u0000\u0000\u0178\u0176\u0001\u0000\u0000\u0000\u0178"+ + "\u0179\u0001\u0000\u0000\u0000\u0179\u017b\u0001\u0000\u0000\u0000\u017a"+ + "\u0178\u0001\u0000\u0000\u0000\u017b\u017d\u0005\u0002\u0000\u0000\u017c"+ + "\u0173\u0001\u0000\u0000\u0000\u017d\u0180\u0001\u0000\u0000\u0000\u017e"+ + "\u017c\u0001\u0000\u0000\u0000\u017e\u017f\u0001\u0000\u0000\u0000\u017f"+ + "\u0181\u0001\u0000\u0000\u0000\u0180\u017e\u0001\u0000\u0000\u0000\u0181"+ + "\u0182\u0003:\u001d\u0000\u01829\u0001\u0000\u0000\u0000\u0183\u0184\u0005"+ + "\u0001\u0000\u0000\u0184\u0188\u0005y\u0000\u0000\u0185\u0187\u0003\n"+ + "\u0005\u0000\u0186\u0185\u0001\u0000\u0000\u0000\u0187\u018a\u0001\u0000"+ + "\u0000\u0000\u0188\u0186\u0001\u0000\u0000\u0000\u0188\u0189\u0001\u0000"+ + "\u0000\u0000\u0189\u018b\u0001\u0000\u0000\u0000\u018a\u0188\u0001\u0000"+ + "\u0000\u0000\u018b\u018d\u0005\u0002\u0000\u0000\u018c\u0183\u0001\u0000"+ + "\u0000\u0000\u018d\u0190\u0001\u0000\u0000\u0000\u018e\u018c\u0001\u0000"+ + "\u0000\u0000\u018e\u018f\u0001\u0000\u0000\u0000\u018f\u0191\u0001\u0000"+ + "\u0000\u0000\u0190\u018e\u0001\u0000\u0000\u0000\u0191\u0192\u0003$\u0012"+ + "\u0000\u0192;\u0001\u0000\u0000\u0000\u0193\u0195\u0005\u0013\u0000\u0000"+ + "\u0194\u0196\u0003\"\u0011\u0000\u0195\u0194\u0001\u0000\u0000\u0000\u0195"+ + "\u0196\u0001\u0000\u0000\u0000\u0196\u0197\u0001\u0000\u0000\u0000\u0197"+ + "\u0198\u0003@ \u0000\u0198\u019a\u0005\u0017\u0000\u0000\u0199\u019b\u0003"+ + "\"\u0011\u0000\u019a\u0199\u0001\u0000\u0000\u0000\u019a\u019b\u0001\u0000"+ + "\u0000\u0000\u019b\u01b6\u0001\u0000\u0000\u0000\u019c\u019e\u0005\u0014"+ + "\u0000\u0000\u019d\u019f\u0003\"\u0011\u0000\u019e\u019d\u0001\u0000\u0000"+ + "\u0000\u019e\u019f\u0001\u0000\u0000\u0000\u019f\u01a0\u0001\u0000\u0000"+ + "\u0000\u01a0\u01a1\u0003@ \u0000\u01a1\u01a3\u0005\u0017\u0000\u0000\u01a2"+ + "\u01a4\u0003\"\u0011\u0000\u01a3\u01a2\u0001\u0000\u0000\u0000\u01a3\u01a4"+ + "\u0001\u0000\u0000\u0000\u01a4\u01b6\u0001\u0000\u0000\u0000\u01a5\u01a7"+ + "\u0005\u001c\u0000\u0000\u01a6\u01a8\u0003\"\u0011\u0000\u01a7\u01a6\u0001"+ + "\u0000\u0000\u0000\u01a7\u01a8\u0001\u0000\u0000\u0000\u01a8\u01a9\u0001"+ + "\u0000\u0000\u0000\u01a9\u01af\u0003@ \u0000\u01aa\u01ac\u0005\u001e\u0000"+ + "\u0000\u01ab\u01ad\u0003\"\u0011\u0000\u01ac\u01ab\u0001\u0000\u0000\u0000"+ + "\u01ac\u01ad\u0001\u0000\u0000\u0000\u01ad\u01ae\u0001\u0000\u0000\u0000"+ + "\u01ae\u01b0\u0003L&\u0000\u01af\u01aa\u0001\u0000\u0000\u0000\u01af\u01b0"+ + "\u0001\u0000\u0000\u0000\u01b0\u01b1\u0001\u0000\u0000\u0000\u01b1\u01b3"+ + "\u0005\u0017\u0000\u0000\u01b2\u01b4\u0003\"\u0011\u0000\u01b3\u01b2\u0001"+ + "\u0000\u0000\u0000\u01b3\u01b4\u0001\u0000\u0000\u0000\u01b4\u01b6\u0001"+ + "\u0000\u0000\u0000\u01b5\u0193\u0001\u0000\u0000\u0000\u01b5\u019c\u0001"+ + "\u0000\u0000\u0000\u01b5\u01a5\u0001\u0000\u0000\u0000\u01b6=\u0001\u0000"+ + "\u0000\u0000\u01b7\u01b8\u0005\u0001\u0000\u0000\u01b8\u01b9\u0005y\u0000"+ + "\u0000\u01b9\u01ba\u0003\n\u0005\u0000\u01ba\u01bb\u0005\u0002\u0000\u0000"+ + "\u01bb\u01bd\u0001\u0000\u0000\u0000\u01bc\u01b7\u0001\u0000\u0000\u0000"+ + "\u01bc\u01bd\u0001\u0000\u0000\u0000\u01bd\u01c3\u0001\u0000\u0000\u0000"+ + "\u01be\u01bf\u0003\u001c\u000e\u0000\u01bf\u01c0\u0003\u0016\u000b\u0000"+ + "\u01c0\u01c3\u0001\u0000\u0000\u0000\u01c1\u01c3\u0003\u0016\u000b\u0000"+ + "\u01c2\u01bc\u0001\u0000\u0000\u0000\u01c2\u01be\u0001\u0000\u0000\u0000"+ + "\u01c2\u01c1\u0001\u0000\u0000\u0000\u01c3?\u0001\u0000\u0000\u0000\u01c4"+ + "\u01c5\u0003>\u001f\u0000\u01c5\u01c6\u0003L&\u0000\u01c6A\u0001\u0000"+ + "\u0000\u0000\u01c7\u01c8\u0005\u0001\u0000\u0000\u01c8\u01c9\u0003D\""+ + "\u0000\u01c9\u01ca\u0005\u0002\u0000\u0000\u01caC\u0001\u0000\u0000\u0000"+ + "\u01cb\u01cf\u0003(\u0014\u0000\u01cc\u01ce\u0003D\"\u0000\u01cd\u01cc"+ + "\u0001\u0000\u0000\u0000\u01ce\u01d1\u0001\u0000\u0000\u0000\u01cf\u01cd"+ + "\u0001\u0000\u0000\u0000\u01cf\u01d0\u0001\u0000\u0000\u0000\u01d0\u01f6"+ + "\u0001\u0000\u0000\u0000\u01d1\u01cf\u0001\u0000\u0000\u0000\u01d2\u01d3"+ + "\u0005!\u0000\u0000\u01d3\u01f6\u0003F#\u0000\u01d4\u01d5\u0005#\u0000"+ + "\u0000\u01d5\u01f6\u0003F#\u0000\u01d6\u01d8\u0005\u0013\u0000\u0000\u01d7"+ + "\u01d9\u0003\"\u0011\u0000\u01d8\u01d7\u0001\u0000\u0000\u0000\u01d8\u01d9"+ + "\u0001\u0000\u0000\u0000\u01d9\u01da\u0001\u0000\u0000\u0000\u01da\u01f6"+ + "\u0003@ \u0000\u01db\u01dd\u0005\u0014\u0000\u0000\u01dc\u01de\u0003\""+ + "\u0011\u0000\u01dd\u01dc\u0001\u0000\u0000\u0000\u01dd\u01de\u0001\u0000"+ + "\u0000\u0000\u01de\u01df\u0001\u0000\u0000\u0000\u01df\u01f6\u0003@ \u0000"+ + "\u01e0\u01e2\u0005\u001c\u0000\u0000\u01e1\u01e3\u0003\"\u0011\u0000\u01e2"+ + "\u01e1\u0001\u0000\u0000\u0000\u01e2\u01e3\u0001\u0000\u0000\u0000\u01e3"+ + "\u01e4\u0001\u0000\u0000\u0000\u01e4\u01e8\u0003>\u001f\u0000\u01e5\u01e7"+ + "\u0003B!\u0000\u01e6\u01e5\u0001\u0000\u0000\u0000\u01e7\u01ea\u0001\u0000"+ + "\u0000\u0000\u01e8\u01e6\u0001\u0000\u0000\u0000\u01e8\u01e9\u0001\u0000"+ + "\u0000\u0000\u01e9\u01eb\u0001\u0000\u0000\u0000\u01ea\u01e8\u0001\u0000"+ + "\u0000\u0000\u01eb\u01ec\u0005\u0001\u0000\u0000\u01ec\u01ed\u0005\u001d"+ + "\u0000\u0000\u01ed\u01f3\u0003L&\u0000\u01ee\u01ef\u0005\u0001\u0000\u0000"+ + "\u01ef\u01f0\u0005\u001e\u0000\u0000\u01f0\u01f1\u0003L&\u0000\u01f1\u01f2"+ + "\u0005\u0002\u0000\u0000\u01f2\u01f4\u0001\u0000\u0000\u0000\u01f3\u01ee"+ + "\u0001\u0000\u0000\u0000\u01f3\u01f4\u0001\u0000\u0000\u0000\u01f4\u01f6"+ + "\u0001\u0000\u0000\u0000\u01f5\u01cb\u0001\u0000\u0000\u0000\u01f5\u01d2"+ + "\u0001\u0000\u0000\u0000\u01f5\u01d4\u0001\u0000\u0000\u0000\u01f5\u01d6"+ + "\u0001\u0000\u0000\u0000\u01f5\u01db\u0001\u0000\u0000\u0000\u01f5\u01e0"+ + "\u0001\u0000\u0000\u0000\u01f6E\u0001\u0000\u0000\u0000\u01f7\u01f9\u0003"+ + "\u001c\u000e\u0000\u01f8\u01f7\u0001\u0000\u0000\u0000\u01f8\u01f9\u0001"+ + "\u0000\u0000\u0000\u01f9\u01fa\u0001\u0000\u0000\u0000\u01fa\u01fb\u0003"+ + "H$\u0000\u01fbG\u0001\u0000\u0000\u0000\u01fc\u01fd\u0005\u0001\u0000"+ + "\u0000\u01fd\u0201\u0005x\u0000\u0000\u01fe\u0200\u0003\n\u0005\u0000"+ + "\u01ff\u01fe\u0001\u0000\u0000\u0000\u0200\u0203\u0001\u0000\u0000\u0000"+ + "\u0201\u01ff\u0001\u0000\u0000\u0000\u0201\u0202\u0001\u0000\u0000\u0000"+ + "\u0202\u0204\u0001\u0000\u0000\u0000\u0203\u0201\u0001\u0000\u0000\u0000"+ + "\u0204\u0206\u0005\u0002\u0000\u0000\u0205\u01fc\u0001\u0000\u0000\u0000"+ + "\u0206\u0209\u0001\u0000\u0000\u0000\u0207\u0205\u0001\u0000\u0000\u0000"+ + "\u0207\u0208\u0001\u0000\u0000\u0000\u0208\u020a\u0001\u0000\u0000\u0000"+ + "\u0209\u0207\u0001\u0000\u0000\u0000\u020a\u020b\u0003J%\u0000\u020bI"+ + "\u0001\u0000\u0000\u0000\u020c\u020d\u0005\u0001\u0000\u0000\u020d\u0211"+ + "\u0005y\u0000\u0000\u020e\u0210\u0003\n\u0005\u0000\u020f\u020e\u0001"+ + "\u0000\u0000\u0000\u0210\u0213\u0001\u0000\u0000\u0000\u0211\u020f\u0001"+ + "\u0000\u0000\u0000\u0211\u0212\u0001\u0000\u0000\u0000\u0212\u0214\u0001"+ + "\u0000\u0000\u0000\u0213\u0211\u0001\u0000\u0000\u0000\u0214\u0216\u0005"+ + "\u0002\u0000\u0000\u0215\u020c\u0001\u0000\u0000\u0000\u0216\u0219\u0001"+ + "\u0000\u0000\u0000\u0217\u0215\u0001\u0000\u0000\u0000\u0217\u0218\u0001"+ + "\u0000\u0000\u0000\u0218\u021d\u0001\u0000\u0000\u0000\u0219\u0217\u0001"+ + "\u0000\u0000\u0000\u021a\u021c\u0003D\"\u0000\u021b\u021a\u0001\u0000"+ + "\u0000\u0000\u021c\u021f\u0001\u0000\u0000\u0000\u021d\u021b\u0001\u0000"+ + "\u0000\u0000\u021d\u021e\u0001\u0000\u0000\u0000\u021eK\u0001\u0000\u0000"+ + "\u0000\u021f\u021d\u0001\u0000\u0000\u0000\u0220\u0222\u0003$\u0012\u0000"+ + "\u0221\u0220\u0001\u0000\u0000\u0000\u0222\u0225\u0001\u0000\u0000\u0000"+ + "\u0223\u0221\u0001\u0000\u0000\u0000\u0223\u0224\u0001\u0000\u0000\u0000"+ + "\u0224\u0227\u0001\u0000\u0000\u0000\u0225\u0223\u0001\u0000\u0000\u0000"+ + "\u0226\u0228\u00034\u001a\u0000\u0227\u0226\u0001\u0000\u0000\u0000\u0227"+ + "\u0228\u0001\u0000\u0000\u0000\u0228M\u0001\u0000\u0000\u0000\u0229\u022a"+ + "\u0003L&\u0000\u022aO\u0001\u0000\u0000\u0000\u022b\u022c\u0005\u0001"+ + "\u0000\u0000\u022c\u022e\u0005u\u0000\u0000\u022d\u022f\u0003\"\u0011"+ + "\u0000\u022e\u022d\u0001\u0000\u0000\u0000\u022e\u022f\u0001\u0000\u0000"+ + "\u0000\u022f\u0230\u0001\u0000\u0000\u0000\u0230\u0231\u0003R)\u0000\u0231"+ + "\u0232\u0005\u0002\u0000\u0000\u0232Q\u0001\u0000\u0000\u0000\u0233\u0235"+ + "\u0003\u001c\u000e\u0000\u0234\u0233\u0001\u0000\u0000\u0000\u0234\u0235"+ + "\u0001\u0000\u0000\u0000\u0235\u0236\u0001\u0000\u0000\u0000\u0236\u0241"+ + "\u0003T*\u0000\u0237\u0239\u0003n7\u0000\u0238\u023a\u0003\u001c\u000e"+ + "\u0000\u0239\u0238\u0001\u0000\u0000\u0000\u0239\u023a\u0001\u0000\u0000"+ + "\u0000\u023a\u023b\u0001\u0000\u0000\u0000\u023b\u023c\u0003\u0016\u000b"+ + "\u0000\u023c\u0241\u0001\u0000\u0000\u0000\u023d\u023e\u0003t:\u0000\u023e"+ + "\u023f\u0003R)\u0000\u023f\u0241\u0001\u0000\u0000\u0000\u0240\u0234\u0001"+ + "\u0000\u0000\u0000\u0240\u0237\u0001\u0000\u0000\u0000\u0240\u023d\u0001"+ + "\u0000\u0000\u0000\u0241S\u0001\u0000\u0000\u0000\u0242\u0243\u0003\u0016"+ + "\u000b\u0000\u0243\u0244\u0003V+\u0000\u0244U\u0001\u0000\u0000\u0000"+ + "\u0245\u0246\u0005\u0001\u0000\u0000\u0246\u0250\u0005z\u0000\u0000\u0247"+ + "\u0249\u0003\n\u0005\u0000\u0248\u0247\u0001\u0000\u0000\u0000\u0249\u024c"+ + "\u0001\u0000\u0000\u0000\u024a\u0248\u0001\u0000\u0000\u0000\u024a\u024b"+ + "\u0001\u0000\u0000\u0000\u024b\u0251\u0001\u0000\u0000\u0000\u024c\u024a"+ + "\u0001\u0000\u0000\u0000\u024d\u024e\u0003\"\u0011\u0000\u024e\u024f\u0003"+ + "\n\u0005\u0000\u024f\u0251\u0001\u0000\u0000\u0000\u0250\u024a\u0001\u0000"+ + "\u0000\u0000\u0250\u024d\u0001\u0000\u0000\u0000\u0251\u0252\u0001\u0000"+ + "\u0000\u0000\u0252\u0254\u0005\u0002\u0000\u0000\u0253\u0245\u0001\u0000"+ + "\u0000\u0000\u0254\u0257\u0001\u0000\u0000\u0000\u0255\u0253\u0001\u0000"+ + "\u0000\u0000\u0255\u0256\u0001\u0000\u0000\u0000\u0256\u0258\u0001\u0000"+ + "\u0000\u0000\u0257\u0255\u0001\u0000\u0000\u0000\u0258\u0259\u0003L&\u0000"+ + "\u0259W\u0001\u0000\u0000\u0000\u025a\u025b\u0005\u0001\u0000\u0000\u025b"+ + "\u025c\u0005\u0080\u0000\u0000\u025c\u025d\u0003N\'\u0000\u025d\u025e"+ + "\u0005\u0002\u0000\u0000\u025e\u0261\u0001\u0000\u0000\u0000\u025f\u0261"+ + "\u0003D\"\u0000\u0260\u025a\u0001\u0000\u0000\u0000\u0260\u025f\u0001"+ + "\u0000\u0000\u0000\u0261Y\u0001\u0000\u0000\u0000\u0262\u0263\u0005\u0001"+ + "\u0000\u0000\u0263\u0265\u0005~\u0000\u0000\u0264\u0266\u0003 \u0010\u0000"+ + "\u0265\u0264\u0001\u0000\u0000\u0000\u0265\u0266\u0001\u0000\u0000\u0000"+ + "\u0266\u0267\u0001\u0000\u0000\u0000\u0267\u0268\u0005\u0001\u0000\u0000"+ + "\u0268\u0269\u0003$\u0012\u0000\u0269\u026d\u0005\u0002\u0000\u0000\u026a"+ + "\u026c\u0003 \u0010\u0000\u026b\u026a\u0001\u0000\u0000\u0000\u026c\u026f"+ + "\u0001\u0000\u0000\u0000\u026d\u026b\u0001\u0000\u0000\u0000\u026d\u026e"+ + "\u0001\u0000\u0000\u0000\u026e\u0270\u0001\u0000\u0000\u0000\u026f\u026d"+ + "\u0001\u0000\u0000\u0000\u0270\u0271\u0005\u0002\u0000\u0000\u0271\u0281"+ + "\u0001\u0000\u0000\u0000\u0272\u0273\u0005\u0001\u0000\u0000\u0273\u0275"+ + "\u0005~\u0000\u0000\u0274\u0276\u0003 \u0010\u0000\u0275\u0274\u0001\u0000"+ + "\u0000\u0000\u0275\u0276\u0001\u0000\u0000\u0000\u0276\u0277\u0001\u0000"+ + "\u0000\u0000\u0277\u027b\u0003X,\u0000\u0278\u027a\u0003 \u0010\u0000"+ + "\u0279\u0278\u0001\u0000\u0000\u0000\u027a\u027d\u0001\u0000\u0000\u0000"+ + "\u027b\u0279\u0001\u0000\u0000\u0000\u027b\u027c\u0001\u0000\u0000\u0000"+ + "\u027c\u027e\u0001\u0000\u0000\u0000\u027d\u027b\u0001\u0000\u0000\u0000"+ + "\u027e\u027f\u0005\u0002\u0000\u0000\u027f\u0281\u0001\u0000\u0000\u0000"+ + "\u0280\u0262\u0001\u0000\u0000\u0000\u0280\u0272\u0001\u0000\u0000\u0000"+ + "\u0281[\u0001\u0000\u0000\u0000\u0282\u0283\u0005\u0001\u0000\u0000\u0283"+ + "\u0285\u0005|\u0000\u0000\u0284\u0286\u0003\"\u0011\u0000\u0285\u0284"+ + "\u0001\u0000\u0000\u0000\u0285\u0286\u0001\u0000\u0000\u0000\u0286\u0287"+ + "\u0001\u0000\u0000\u0000\u0287\u0288\u0003^/\u0000\u0288\u0289\u0005\u0002"+ + "\u0000\u0000\u0289]\u0001\u0000\u0000\u0000\u028a\u029d\u0003\u0018\f"+ + "\u0000\u028b\u028c\u0003n7\u0000\u028c\u028d\u0003\u0018\f\u0000\u028d"+ + "\u029d\u0001\u0000\u0000\u0000\u028e\u028f\u0003t:\u0000\u028f\u0290\u0003"+ + "^/\u0000\u0290\u029d\u0001\u0000\u0000\u0000\u0291\u0292\u0003\u0006\u0003"+ + "\u0000\u0292\u0293\u0005\u0001\u0000\u0000\u0293\u0297\u0005~\u0000\u0000"+ + "\u0294\u0296\u0003 \u0010\u0000\u0295\u0294\u0001\u0000\u0000\u0000\u0296"+ + "\u0299\u0001\u0000\u0000\u0000\u0297\u0295\u0001\u0000\u0000\u0000\u0297"+ + "\u0298\u0001\u0000\u0000\u0000\u0298\u029a\u0001\u0000\u0000\u0000\u0299"+ + "\u0297\u0001\u0000\u0000\u0000\u029a\u029b\u0005\u0002\u0000\u0000\u029b"+ + "\u029d\u0001\u0000\u0000\u0000\u029c\u028a\u0001\u0000\u0000\u0000\u029c"+ + "\u028b\u0001\u0000\u0000\u0000\u029c\u028e\u0001\u0000\u0000\u0000\u029c"+ + "\u0291\u0001\u0000\u0000\u0000\u029d_\u0001\u0000\u0000\u0000\u029e\u029f"+ + "\u0005\u0001\u0000\u0000\u029f\u02a1\u0005\u007f\u0000\u0000\u02a0\u02a2"+ + "\u0003 \u0010\u0000\u02a1\u02a0\u0001\u0000\u0000\u0000\u02a1\u02a2\u0001"+ + "\u0000\u0000\u0000\u02a2\u02a3\u0001\u0000\u0000\u0000\u02a3\u02a4\u0005"+ + "\u0001\u0000\u0000\u02a4\u02a5\u0003$\u0012\u0000\u02a5\u02a9\u0005\u0002"+ + "\u0000\u0000\u02a6\u02a8\u0005\u0006\u0000\u0000\u02a7\u02a6\u0001\u0000"+ + "\u0000\u0000\u02a8\u02ab\u0001\u0000\u0000\u0000\u02a9\u02a7\u0001\u0000"+ + "\u0000\u0000\u02a9\u02aa\u0001\u0000\u0000\u0000\u02aa\u02ac\u0001\u0000"+ + "\u0000\u0000\u02ab\u02a9\u0001\u0000\u0000\u0000\u02ac\u02ad\u0005\u0002"+ + "\u0000\u0000\u02ad\u02bd\u0001\u0000\u0000\u0000\u02ae\u02af\u0005\u0001"+ + "\u0000\u0000\u02af\u02b1\u0005\u007f\u0000\u0000\u02b0\u02b2\u0003 \u0010"+ + "\u0000\u02b1\u02b0\u0001\u0000\u0000\u0000\u02b1\u02b2\u0001\u0000\u0000"+ + "\u0000\u02b2\u02b3\u0001\u0000\u0000\u0000\u02b3\u02b7\u0003X,\u0000\u02b4"+ + "\u02b6\u0005\u0006\u0000\u0000\u02b5\u02b4\u0001\u0000\u0000\u0000\u02b6"+ + "\u02b9\u0001\u0000\u0000\u0000\u02b7\u02b5\u0001\u0000\u0000\u0000\u02b7"+ + "\u02b8\u0001\u0000\u0000\u0000\u02b8\u02ba\u0001\u0000\u0000\u0000\u02b9"+ + "\u02b7\u0001\u0000\u0000\u0000\u02ba\u02bb\u0005\u0002\u0000\u0000\u02bb"+ + "\u02bd\u0001\u0000\u0000\u0000\u02bc\u029e\u0001\u0000\u0000\u0000\u02bc"+ + "\u02ae\u0001\u0000\u0000\u0000\u02bda\u0001\u0000\u0000\u0000\u02be\u02bf"+ + "\u0005\u0001\u0000\u0000\u02bf\u02c1\u0005}\u0000\u0000\u02c0\u02c2\u0003"+ + "\"\u0011\u0000\u02c1\u02c0\u0001\u0000\u0000\u0000\u02c1\u02c2\u0001\u0000"+ + "\u0000\u0000\u02c2\u02c3\u0001\u0000\u0000\u0000\u02c3\u02c4\u0003d2\u0000"+ + "\u02c4\u02c5\u0005\u0002\u0000\u0000\u02c5c\u0001\u0000\u0000\u0000\u02c6"+ + "\u02d7\u0003\u001a\r\u0000\u02c7\u02c8\u0003n7\u0000\u02c8\u02c9\u0003"+ + "\u001a\r\u0000\u02c9\u02d7\u0001\u0000\u0000\u0000\u02ca\u02cb\u0003t"+ + ":\u0000\u02cb\u02cc\u0003d2\u0000\u02cc\u02d7\u0001\u0000\u0000\u0000"+ + "\u02cd\u02ce\u0005\u0001\u0000\u0000\u02ce\u02d2\u0005\u007f\u0000\u0000"+ + "\u02cf\u02d1\u0005\u0006\u0000\u0000\u02d0\u02cf\u0001\u0000\u0000\u0000"+ + "\u02d1\u02d4\u0001\u0000\u0000\u0000\u02d2\u02d0\u0001\u0000\u0000\u0000"+ + "\u02d2\u02d3\u0001\u0000\u0000\u0000\u02d3\u02d5\u0001\u0000\u0000\u0000"+ + "\u02d4\u02d2\u0001\u0000\u0000\u0000\u02d5\u02d7\u0005\u0002\u0000\u0000"+ + "\u02d6\u02c6\u0001\u0000\u0000\u0000\u02d6\u02c7\u0001\u0000\u0000\u0000"+ + "\u02d6\u02ca\u0001\u0000\u0000\u0000\u02d6\u02cd\u0001\u0000\u0000\u0000"+ + "\u02d7e\u0001\u0000\u0000\u0000\u02d8\u02d9\u0005\u0001\u0000\u0000\u02d9"+ + "\u02db\u0005{\u0000\u0000\u02da\u02dc\u0003\"\u0011\u0000\u02db\u02da"+ + "\u0001\u0000\u0000\u0000\u02db\u02dc\u0001\u0000\u0000\u0000\u02dc\u02dd"+ + "\u0001\u0000\u0000\u0000\u02dd\u02de\u0003h4\u0000\u02de\u02df\u0005\u0002"+ + "\u0000\u0000\u02dfg\u0001\u0000\u0000\u0000\u02e0\u02e1\u0003\u000e\u0007"+ + "\u0000\u02e1\u02e2\u0003N\'\u0000\u02e2\u02ea\u0001\u0000\u0000\u0000"+ + "\u02e3\u02e4\u0003n7\u0000\u02e4\u02e5\u0003\u000e\u0007\u0000\u02e5\u02ea"+ + "\u0001\u0000\u0000\u0000\u02e6\u02e7\u0003t:\u0000\u02e7\u02e8\u0003h"+ + "4\u0000\u02e8\u02ea\u0001\u0000\u0000\u0000\u02e9\u02e0\u0001\u0000\u0000"+ + "\u0000\u02e9\u02e3\u0001\u0000\u0000\u0000\u02e9\u02e6\u0001\u0000\u0000"+ + "\u0000\u02eai\u0001\u0000\u0000\u0000\u02eb\u02ec\u0005\u0001\u0000\u0000"+ + "\u02ec\u02ee\u0005u\u0000\u0000\u02ed\u02ef\u0003\"\u0011\u0000\u02ee"+ + "\u02ed\u0001\u0000\u0000\u0000\u02ee\u02ef\u0001\u0000\u0000\u0000\u02ef"+ + "\u02f0\u0001\u0000\u0000\u0000\u02f0\u02f1\u0003\u001c\u000e\u0000\u02f1"+ + "\u02f2\u0005\u0002\u0000\u0000\u02f2\u0314\u0001\u0000\u0000\u0000\u02f3"+ + "\u02f4\u0005\u0001\u0000\u0000\u02f4\u02f6\u0005u\u0000\u0000\u02f5\u02f7"+ + "\u0003\"\u0011\u0000\u02f6\u02f5\u0001\u0000\u0000\u0000\u02f6\u02f7\u0001"+ + "\u0000\u0000\u0000\u02f7\u02f8\u0001\u0000\u0000\u0000\u02f8\u02f9\u0003"+ + "\u0016\u000b\u0000\u02f9\u02fa\u0005\u0002\u0000\u0000\u02fa\u0314\u0001"+ + "\u0000\u0000\u0000\u02fb\u02fc\u0005\u0001\u0000\u0000\u02fc\u02fe\u0005"+ + "|\u0000\u0000\u02fd\u02ff\u0003\"\u0011\u0000\u02fe\u02fd\u0001\u0000"+ + "\u0000\u0000\u02fe\u02ff\u0001\u0000\u0000\u0000\u02ff\u0300\u0001\u0000"+ + "\u0000\u0000\u0300\u0301\u0003\u0018\f\u0000\u0301\u0302\u0005\u0002\u0000"+ + "\u0000\u0302\u0314\u0001\u0000\u0000\u0000\u0303\u0304\u0005\u0001\u0000"+ + "\u0000\u0304\u0306\u0005}\u0000\u0000\u0305\u0307\u0003\"\u0011\u0000"+ + "\u0306\u0305\u0001\u0000\u0000\u0000\u0306\u0307\u0001\u0000\u0000\u0000"+ + "\u0307\u0308\u0001\u0000\u0000\u0000\u0308\u0309\u0003\u001a\r\u0000\u0309"+ + "\u030a\u0005\u0002\u0000\u0000\u030a\u0314\u0001\u0000\u0000\u0000\u030b"+ + "\u030c\u0005\u0001\u0000\u0000\u030c\u030e\u0005{\u0000\u0000\u030d\u030f"+ + "\u0003\"\u0011\u0000\u030e\u030d\u0001\u0000\u0000\u0000\u030e\u030f\u0001"+ + "\u0000\u0000\u0000\u030f\u0310\u0001\u0000\u0000\u0000\u0310\u0311\u0003"+ + "\u000e\u0007\u0000\u0311\u0312\u0005\u0002\u0000\u0000\u0312\u0314\u0001"+ + "\u0000\u0000\u0000\u0313\u02eb\u0001\u0000\u0000\u0000\u0313\u02f3\u0001"+ + "\u0000\u0000\u0000\u0313\u02fb\u0001\u0000\u0000\u0000\u0313\u0303\u0001"+ + "\u0000\u0000\u0000\u0313\u030b\u0001\u0000\u0000\u0000\u0314k\u0001\u0000"+ + "\u0000\u0000\u0315\u0316\u0005\u0001\u0000\u0000\u0316\u0317\u0005\u0081"+ + "\u0000\u0000\u0317\u0318\u0003\u0002\u0001\u0000\u0318\u0319\u0003\u0002"+ + "\u0001\u0000\u0319\u031a\u0003j5\u0000\u031a\u031b\u0005\u0002\u0000\u0000"+ + "\u031bm\u0001\u0000\u0000\u0000\u031c\u031d\u0005\u0001\u0000\u0000\u031d"+ + "\u031e\u0005\u0081\u0000\u0000\u031e\u031f\u0003\u0002\u0001\u0000\u031f"+ + "\u0320\u0003\u0002\u0001\u0000\u0320\u0321\u0005\u0002\u0000\u0000\u0321"+ + "o\u0001\u0000\u0000\u0000\u0322\u0323\u0005\u0001\u0000\u0000\u0323\u0324"+ + "\u0005u\u0000\u0000\u0324\u0325\u0003 \u0010\u0000\u0325\u0326\u0005\u0002"+ + "\u0000\u0000\u0326\u0337\u0001\u0000\u0000\u0000\u0327\u0328\u0005\u0001"+ + "\u0000\u0000\u0328\u0329\u0005|\u0000\u0000\u0329\u032a\u0003 \u0010\u0000"+ + "\u032a\u032b\u0005\u0002\u0000\u0000\u032b\u0337\u0001\u0000\u0000\u0000"+ + "\u032c\u032d\u0005\u0001\u0000\u0000\u032d\u032e\u0005}\u0000\u0000\u032e"+ + "\u032f\u0003 \u0010\u0000\u032f\u0330\u0005\u0002\u0000\u0000\u0330\u0337"+ + "\u0001\u0000\u0000\u0000\u0331\u0332\u0005\u0001\u0000\u0000\u0332\u0333"+ + "\u0005{\u0000\u0000\u0333\u0334\u0003 \u0010\u0000\u0334\u0335\u0005\u0002"+ + "\u0000\u0000\u0335\u0337\u0001\u0000\u0000\u0000\u0336\u0322\u0001\u0000"+ + "\u0000\u0000\u0336\u0327\u0001\u0000\u0000\u0000\u0336\u032c\u0001\u0000"+ + "\u0000\u0000\u0336\u0331\u0001\u0000\u0000\u0000\u0337q\u0001\u0000\u0000"+ + "\u0000\u0338\u0339\u0005\u0001\u0000\u0000\u0339\u033a\u0005\u0082\u0000"+ + "\u0000\u033a\u033b\u0003\u0002\u0001\u0000\u033b\u033c\u0003p8\u0000\u033c"+ + "\u033d\u0005\u0002\u0000\u0000\u033ds\u0001\u0000\u0000\u0000\u033e\u033f"+ + "\u0005\u0001\u0000\u0000\u033f\u0340\u0005\u0082\u0000\u0000\u0340\u0341"+ + "\u0003\u0002\u0001\u0000\u0341\u0342\u0005\u0002\u0000\u0000\u0342u\u0001"+ + "\u0000\u0000\u0000\u0343\u0344\u0005\u0001\u0000\u0000\u0344\u0346\u0005"+ + "t\u0000\u0000\u0345\u0347\u0003\"\u0011\u0000\u0346\u0345\u0001\u0000"+ + "\u0000\u0000\u0346\u0347\u0001\u0000\u0000\u0000\u0347\u0348\u0001\u0000"+ + "\u0000\u0000\u0348\u0349\u0003\u0010\b\u0000\u0349\u034a\u0005\u0002\u0000"+ + "\u0000\u034aw\u0001\u0000\u0000\u0000\u034b\u034c\u0005\u0001\u0000\u0000"+ + "\u034c\u034d\u0005w\u0000\u0000\u034d\u034e\u0003 \u0010\u0000\u034e\u034f"+ + "\u0005\u0002\u0000\u0000\u034fy\u0001\u0000\u0000\u0000\u0350\u035b\u0003"+ + "v;\u0000\u0351\u035b\u0003f3\u0000\u0352\u035b\u0003\\.\u0000\u0353\u035b"+ + "\u0003b1\u0000\u0354\u035b\u0003P(\u0000\u0355\u035b\u0003Z-\u0000\u0356"+ + "\u035b\u0003`0\u0000\u0357\u035b\u0003x<\u0000\u0358\u035b\u0003l6\u0000"+ + "\u0359\u035b\u0003r9\u0000\u035a\u0350\u0001\u0000\u0000\u0000\u035a\u0351"+ + "\u0001\u0000\u0000\u0000\u035a\u0352\u0001\u0000\u0000\u0000\u035a\u0353"+ + "\u0001\u0000\u0000\u0000\u035a\u0354\u0001\u0000\u0000\u0000\u035a\u0355"+ + "\u0001\u0000\u0000\u0000\u035a\u0356\u0001\u0000\u0000\u0000\u035a\u0357"+ + "\u0001\u0000\u0000\u0000\u035a\u0358\u0001\u0000\u0000\u0000\u035a\u0359"+ + "\u0001\u0000\u0000\u0000\u035b{\u0001\u0000\u0000\u0000\u035c\u035d\u0005"+ + "\u0001\u0000\u0000\u035d\u035f\u0005\u0083\u0000\u0000\u035e\u0360\u0005"+ + "\u0094\u0000\u0000\u035f\u035e\u0001\u0000\u0000\u0000\u035f\u0360\u0001"+ + "\u0000\u0000\u0000\u0360\u0364\u0001\u0000\u0000\u0000\u0361\u0363\u0003"+ + "z=\u0000\u0362\u0361\u0001\u0000\u0000\u0000\u0363\u0366\u0001\u0000\u0000"+ + "\u0000\u0364\u0362\u0001\u0000\u0000\u0000\u0364\u0365\u0001\u0000\u0000"+ + "\u0000\u0365\u0367\u0001\u0000\u0000\u0000\u0366\u0364\u0001\u0000\u0000"+ + "\u0000\u0367\u0368\u0005\u0002\u0000\u0000\u0368}\u0001\u0000\u0000\u0000"+ + "\u0369\u0378\u0003|>\u0000\u036a\u036b\u0005\u0001\u0000\u0000\u036b\u036d"+ + "\u0005\u0083\u0000\u0000\u036c\u036e\u0005\u0094\u0000\u0000\u036d\u036c"+ + "\u0001\u0000\u0000\u0000\u036d\u036e\u0001\u0000\u0000\u0000\u036e\u036f"+ + "\u0001\u0000\u0000\u0000\u036f\u0373\u0007\u0005\u0000\u0000\u0370\u0372"+ + "\u0005\u0006\u0000\u0000\u0371\u0370\u0001\u0000\u0000\u0000\u0372\u0375"+ + "\u0001\u0000\u0000\u0000\u0373\u0371\u0001\u0000\u0000\u0000\u0373\u0374"+ + "\u0001\u0000\u0000\u0000\u0374\u0376\u0001\u0000\u0000\u0000\u0375\u0373"+ + "\u0001\u0000\u0000\u0000\u0376\u0378\u0005\u0002\u0000\u0000\u0377\u0369"+ + "\u0001\u0000\u0000\u0000\u0377\u036a\u0001\u0000\u0000\u0000\u0378\u007f"+ + "\u0001\u0000\u0000\u0000\u0379\u037a\u0005\u0001\u0000\u0000\u037a\u037c"+ + "\u0005\u0088\u0000\u0000\u037b\u037d\u0005\u0094\u0000\u0000\u037c\u037b"+ + "\u0001\u0000\u0000\u0000\u037c\u037d\u0001\u0000\u0000\u0000\u037d\u037e"+ + "\u0001\u0000\u0000\u0000\u037e\u037f\u0003\u0002\u0001\u0000\u037f\u0380"+ + "\u0003\u008aE\u0000\u0380\u0381\u0005\u0002\u0000\u0000\u0381\u038b\u0001"+ + "\u0000\u0000\u0000\u0382\u0383\u0005\u0001\u0000\u0000\u0383\u0385\u0005"+ + "\u0089\u0000\u0000\u0384\u0386\u0005\u0094\u0000\u0000\u0385\u0384\u0001"+ + "\u0000\u0000\u0000\u0385\u0386\u0001\u0000\u0000\u0000\u0386\u0387\u0001"+ + "\u0000\u0000\u0000\u0387\u0388\u0003\u0002\u0001\u0000\u0388\u0389\u0005"+ + "\u0002\u0000\u0000\u0389\u038b\u0001\u0000\u0000\u0000\u038a\u0379\u0001"+ + "\u0000\u0000\u0000\u038a\u0382\u0001\u0000\u0000\u0000\u038b\u0081\u0001"+ + "\u0000\u0000\u0000\u038c\u038d\u0005\u0001\u0000\u0000\u038d\u038e\u0005"+ + "\u008a\u0000\u0000\u038e\u038f\u0003~?\u0000\u038f\u0390\u0005\u0006\u0000"+ + "\u0000\u0390\u0391\u0005\u0002\u0000\u0000\u0391\u03c1\u0001\u0000\u0000"+ + "\u0000\u0392\u0393\u0005\u0001\u0000\u0000\u0393\u0394\u0005\u008b\u0000"+ + "\u0000\u0394\u0395\u0003~?\u0000\u0395\u0396\u0005\u0006\u0000\u0000\u0396"+ + "\u0397\u0005\u0002\u0000\u0000\u0397\u03c1\u0001\u0000\u0000\u0000\u0398"+ + "\u0399\u0005\u0001\u0000\u0000\u0399\u039a\u0005\u008c\u0000\u0000\u039a"+ + "\u039b\u0003~?\u0000\u039b\u039c\u0005\u0006\u0000\u0000\u039c\u039d\u0005"+ + "\u0002\u0000\u0000\u039d\u03c1\u0001\u0000\u0000\u0000\u039e\u039f\u0005"+ + "\u0001\u0000\u0000\u039f\u03a0\u0005\u0090\u0000\u0000\u03a0\u03a1\u0003"+ + "~?\u0000\u03a1\u03a2\u0005\u0006\u0000\u0000\u03a2\u03a3\u0005\u0002\u0000"+ + "\u0000\u03a3\u03c1\u0001\u0000\u0000\u0000\u03a4\u03a5\u0005\u0001\u0000"+ + "\u0000\u03a5\u03a6\u0005\u008d\u0000\u0000\u03a6\u03a7\u0003\u0080@\u0000"+ + "\u03a7\u03a8\u0003\u008aE\u0000\u03a8\u03a9\u0005\u0002\u0000\u0000\u03a9"+ + "\u03c1\u0001\u0000\u0000\u0000\u03aa\u03ab\u0005\u0001\u0000\u0000\u03ab"+ + "\u03ac\u0005\u008e\u0000\u0000\u03ac\u03ad\u0003\u0080@\u0000\u03ad\u03ae"+ + "\u0005\u0002\u0000\u0000\u03ae\u03c1\u0001\u0000\u0000\u0000\u03af\u03b0"+ + "\u0005\u0001\u0000\u0000\u03b0\u03b1\u0005\u008f\u0000\u0000\u03b1\u03b2"+ + "\u0003\u0080@\u0000\u03b2\u03b3\u0005\u0002\u0000\u0000\u03b3\u03c1\u0001"+ + "\u0000\u0000\u0000\u03b4\u03b5\u0005\u0001\u0000\u0000\u03b5\u03b6\u0005"+ + "\u0090\u0000\u0000\u03b6\u03b7\u0003\u0080@\u0000\u03b7\u03b8\u0005\u0006"+ + "\u0000\u0000\u03b8\u03b9\u0005\u0002\u0000\u0000\u03b9\u03c1\u0001\u0000"+ + "\u0000\u0000\u03ba\u03bb\u0005\u0001\u0000\u0000\u03bb\u03bc\u0005\u0091"+ + "\u0000\u0000\u03bc\u03bd\u0003\u0080@\u0000\u03bd\u03be\u0005\u0006\u0000"+ + "\u0000\u03be\u03bf\u0005\u0002\u0000\u0000\u03bf\u03c1\u0001\u0000\u0000"+ + "\u0000\u03c0\u038c\u0001\u0000\u0000\u0000\u03c0\u0392\u0001\u0000\u0000"+ + "\u0000\u03c0\u0398\u0001\u0000\u0000\u0000\u03c0\u039e\u0001\u0000\u0000"+ + "\u0000\u03c0\u03a4\u0001\u0000\u0000\u0000\u03c0\u03aa\u0001\u0000\u0000"+ + "\u0000\u03c0\u03af\u0001\u0000\u0000\u0000\u03c0\u03b4\u0001\u0000\u0000"+ + "\u0000\u03c0\u03ba\u0001\u0000\u0000\u0000\u03c1\u0083\u0001\u0000\u0000"+ + "\u0000\u03c2\u03cf\u0003\u0080@\u0000\u03c3\u03cf\u0003\u0082A\u0000\u03c4"+ + "\u03cf\u0003~?\u0000\u03c5\u03c6\u0005\u0001\u0000\u0000\u03c6\u03c7\u0005"+ + "\u0087\u0000\u0000\u03c7\u03c9\u0003\u0002\u0001\u0000\u03c8\u03ca\u0005"+ + "\u0094\u0000\u0000\u03c9\u03c8\u0001\u0000\u0000\u0000\u03c9\u03ca\u0001"+ + "\u0000\u0000\u0000\u03ca\u03cb\u0001\u0000\u0000\u0000\u03cb\u03cc\u0005"+ + "\u0002\u0000\u0000\u03cc\u03cf\u0001\u0000\u0000\u0000\u03cd\u03cf\u0003"+ + "\u0086C\u0000\u03ce\u03c2\u0001\u0000\u0000\u0000\u03ce\u03c3\u0001\u0000"+ + "\u0000\u0000\u03ce\u03c4\u0001\u0000\u0000\u0000\u03ce\u03c5\u0001\u0000"+ + "\u0000\u0000\u03ce\u03cd\u0001\u0000\u0000\u0000\u03cf\u0085\u0001\u0000"+ + "\u0000\u0000\u03d0\u03d1\u0005\u0001\u0000\u0000\u03d1\u03d3\u0005\u0086"+ + "\u0000\u0000\u03d2\u03d4\u0005\u0094\u0000\u0000\u03d3\u03d2\u0001\u0000"+ + "\u0000\u0000\u03d3\u03d4\u0001\u0000\u0000\u0000\u03d4\u03d8\u0001\u0000"+ + "\u0000\u0000\u03d5\u03d7\u0003\u0084B\u0000\u03d6\u03d5\u0001\u0000\u0000"+ + "\u0000\u03d7\u03da\u0001\u0000\u0000\u0000\u03d8\u03d6\u0001\u0000\u0000"+ + "\u0000\u03d8\u03d9\u0001\u0000\u0000\u0000\u03d9\u03db\u0001\u0000\u0000"+ + "\u0000\u03da\u03d8\u0001\u0000\u0000\u0000\u03db\u03f1\u0005\u0002\u0000"+ + "\u0000\u03dc\u03dd\u0005\u0001\u0000\u0000\u03dd\u03df\u0005\u0092\u0000"+ + "\u0000\u03de\u03e0\u0005\u0094\u0000\u0000\u03df\u03de\u0001\u0000\u0000"+ + "\u0000\u03df\u03e0\u0001\u0000\u0000\u0000\u03e0\u03e1\u0001\u0000\u0000"+ + "\u0000\u03e1\u03e2\u0005\u0006\u0000\u0000\u03e2\u03f1\u0005\u0002\u0000"+ + "\u0000\u03e3\u03e4\u0005\u0001\u0000\u0000\u03e4\u03e6\u0005\u0093\u0000"+ + "\u0000\u03e5\u03e7\u0005\u0094\u0000\u0000\u03e6\u03e5\u0001\u0000\u0000"+ + "\u0000\u03e6\u03e7\u0001\u0000\u0000\u0000\u03e7\u03e8\u0001\u0000\u0000"+ + "\u0000\u03e8\u03e9\u0005\u0006\u0000\u0000\u03e9\u03f1\u0005\u0002\u0000"+ + "\u0000\u03ea\u03eb\u0005\u0001\u0000\u0000\u03eb\u03ed\u0005\u0093\u0000"+ + "\u0000\u03ec\u03ee\u0005\u0094\u0000\u0000\u03ed\u03ec\u0001\u0000\u0000"+ + "\u0000\u03ed\u03ee\u0001\u0000\u0000\u0000\u03ee\u03ef\u0001\u0000\u0000"+ + "\u0000\u03ef\u03f1\u0005\u0002\u0000\u0000\u03f0\u03d0\u0001\u0000\u0000"+ + "\u0000\u03f0\u03dc\u0001\u0000\u0000\u0000\u03f0\u03e3\u0001\u0000\u0000"+ + "\u0000\u03f0\u03ea\u0001\u0000\u0000\u0000\u03f1\u0087\u0001\u0000\u0000"+ + "\u0000\u03f2\u03f3\u0005\u0001\u0000\u0000\u03f3\u03f4\u0005\b\u0000\u0000"+ + "\u03f4\u03f5\u0003\u001e\u000f\u0000\u03f5\u03f6\u0005\u0002\u0000\u0000"+ + "\u03f6\u0089\u0001\u0000\u0000\u0000\u03f7\u03f9\u0003\u0088D\u0000\u03f8"+ + "\u03f7\u0001\u0000\u0000\u0000\u03f9\u03fc\u0001\u0000\u0000\u0000\u03fa"+ + "\u03f8\u0001\u0000\u0000\u0000\u03fa\u03fb\u0001\u0000\u0000\u0000\u03fb"+ + "\u008b\u0001\u0000\u0000\u0000\u03fc\u03fa\u0001\u0000\u0000\u0000\u03fd"+ + "\u03ff\u0003\u0084B\u0000\u03fe\u03fd\u0001\u0000\u0000\u0000\u03ff\u0402"+ + "\u0001\u0000\u0000\u0000\u0400\u03fe\u0001\u0000\u0000\u0000\u0400\u0401"+ + "\u0001\u0000\u0000\u0000\u0401\u0403\u0001\u0000\u0000\u0000\u0402\u0400"+ + "\u0001\u0000\u0000\u0000\u0403\u040c\u0005\u0000\u0000\u0001\u0404\u0406"+ + "\u0003z=\u0000\u0405\u0404\u0001\u0000\u0000\u0000\u0406\u0407\u0001\u0000"+ + "\u0000\u0000\u0407\u0405\u0001\u0000\u0000\u0000\u0407\u0408\u0001\u0000"+ + "\u0000\u0000\u0408\u0409\u0001\u0000\u0000\u0000\u0409\u040a\u0005\u0000"+ + "\u0000\u0001\u040a\u040c\u0001\u0000\u0000\u0000\u040b\u0400\u0001\u0000"+ + "\u0000\u0000\u040b\u0405\u0001\u0000\u0000\u0000\u040c\u008d\u0001\u0000"+ + "\u0000\u0000\u040d\u040e\u0003|>\u0000\u040e\u040f\u0005\u0000\u0000\u0001"+ + "\u040f\u0418\u0001\u0000\u0000\u0000\u0410\u0412\u0003z=\u0000\u0411\u0410"+ + "\u0001\u0000\u0000\u0000\u0412\u0415\u0001\u0000\u0000\u0000\u0413\u0411"+ + "\u0001\u0000\u0000\u0000\u0413\u0414\u0001\u0000\u0000\u0000\u0414\u0416"+ + "\u0001\u0000\u0000\u0000\u0415\u0413\u0001\u0000\u0000\u0000\u0416\u0418"+ + "\u0005\u0000\u0000\u0001\u0417\u040d\u0001\u0000\u0000\u0000\u0417\u0413"+ + "\u0001\u0000\u0000\u0000\u0418\u008f\u0001\u0000\u0000\u0000q\u009d\u00a7"+ + "\u00b3\u00b9\u00be\u00c6\u00cc\u00d4\u00da\u00eb\u0103\u0116\u0119\u011d"+ + "\u0120\u0134\u0141\u0146\u014d\u0152\u0155\u015c\u0162\u016a\u0170\u0178"+ + "\u017e\u0188\u018e\u0195\u019a\u019e\u01a3\u01a7\u01ac\u01af\u01b3\u01b5"+ + "\u01bc\u01c2\u01cf\u01d8\u01dd\u01e2\u01e8\u01f3\u01f5\u01f8\u0201\u0207"+ + "\u0211\u0217\u021d\u0223\u0227\u022e\u0234\u0239\u0240\u024a\u0250\u0255"+ + "\u0260\u0265\u026d\u0275\u027b\u0280\u0285\u0297\u029c\u02a1\u02a9\u02b1"+ + "\u02b7\u02bc\u02c1\u02d2\u02d6\u02db\u02e9\u02ee\u02f6\u02fe\u0306\u030e"+ + "\u0313\u0336\u0346\u035a\u035f\u0364\u036d\u0373\u0377\u037c\u0385\u038a"+ + "\u03c0\u03c9\u03ce\u03d3\u03d8\u03df\u03e6\u03ed\u03f0\u03fa\u0400\u0407"+ + "\u040b\u0413\u0417"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/grammar/WatParser.tokens b/grammar/WatParser.tokens new file mode 100644 index 000000000..3284f78c5 --- /dev/null +++ b/grammar/WatParser.tokens @@ -0,0 +1,281 @@ +LPAR=1 +RPAR=2 +NAT=3 +INT=4 +FLOAT=5 +STRING_=6 +VALUE_TYPE=7 +CONST=8 +SYMBOLIC=9 +FUNCREF=10 +EXTERNREF=11 +MUT=12 +NOP=13 +SYM_ASSERT=14 +ALLOC=15 +FREE=16 +UNREACHABLE=17 +DROP=18 +BLOCK=19 +LOOP=20 +FOR=21 +VBAR=22 +END=23 +BR=24 +BR_IF=25 +BR_TABLE=26 +RETURN=27 +IF=28 +THEN=29 +ELSE=30 +SELECT=31 +CALL=32 +CALL_INDIRECT=33 +RETURN_CALL=34 +RETURN_CALL_INDIRECT=35 +LOCAL_GET=36 +LOCAL_SET=37 +LOCAL_TEE=38 +GLOBAL_GET=39 +GLOBAL_SET=40 +LOAD=41 +STORE=42 +UNDERSCORE=43 +OFFSET_EQ=44 +ALIGN_EQ=45 +SIGN_POSTFIX=46 +MEM_SIZE=47 +I32=48 +I64=49 +F32=50 +F64=51 +IXX=52 +FXX=53 +OP_EQZ=54 +OP_EQ=55 +OP_NE=56 +OP_LT=57 +OP_LTS=58 +OP_LTU=59 +OP_LE=60 +OP_LES=61 +OP_LEU=62 +OP_GT=63 +OP_GTS=64 +OP_GTU=65 +OP_GE=66 +OP_GES=67 +OP_GEU=68 +OP_CLZ=69 +OP_CTZ=70 +OP_POPCNT=71 +OP_NEG=72 +OP_ABS=73 +OP_SQRT=74 +OP_CEIL=75 +OP_FLOOR=76 +OP_TRUNC=77 +OP_NEAREST=78 +OP_ADD=79 +OP_SUB=80 +OP_MUL=81 +OP_DIV=82 +OP_DIV_S=83 +OP_DIV_U=84 +OP_REM_S=85 +OP_REM_U=86 +OP_AND=87 +OP_OR=88 +OP_XOR=89 +OP_SHL=90 +OP_SHR_S=91 +OP_SHR_U=92 +OP_ROTL=93 +OP_ROTR=94 +OP_MIN=95 +OP_MAX=96 +OP_COPYSIGN=97 +OP_WRAP=98 +OP_TRUNC_=99 +OP_TRUNC_SAT=100 +OP_CONVERT=101 +OP_EXTEND=102 +OP_DEMOTE=103 +OP_PROMOTE=104 +OP_REINTER=105 +MEMORY_SIZE=106 +MEMORY_GROW=107 +MEMORY_FILL=108 +MEMORY_COPY=109 +MEMORY_INIT=110 +TEST=111 +COMPARE=112 +UNARY=113 +BINARY=114 +CONVERT=115 +TYPE=116 +FUNC=117 +EXTERN=118 +START_=119 +PARAM=120 +RESULT=121 +LOCAL=122 +GLOBAL=123 +TABLE=124 +MEMORY=125 +ELEM=126 +DATA=127 +OFFSET=128 +IMPORT=129 +EXPORT=130 +MODULE=131 +BIN=132 +QUOTE=133 +SCRIPT=134 +REGISTER=135 +INVOKE=136 +GET=137 +ASSERT_MALFORMED=138 +ASSERT_INVALID=139 +ASSERT_UNLINKABLE=140 +ASSERT_RETURN=141 +ASSERT_RETURN_CANONICAL_NAN=142 +ASSERT_RETURN_ARITHMETIC_NAN=143 +ASSERT_TRAP=144 +ASSERT_EXHAUSTION=145 +INPUT=146 +OUTPUT=147 +VAR=148 +V128=149 +SPACE=150 +COMMENT=151 +'('=1 +')'=2 +'funcref'=10 +'externref'=11 +'mut'=12 +'nop'=13 +'sym_assert'=14 +'alloc'=15 +'free'=16 +'unreachable'=17 +'drop'=18 +'block'=19 +'loop'=20 +'for'=21 +'|'=22 +'end'=23 +'br'=24 +'br_if'=25 +'br_table'=26 +'return'=27 +'if'=28 +'then'=29 +'else'=30 +'.select'=31 +'call'=32 +'call_indirect'=33 +'return_call'=34 +'return_call_indirect'=35 +'local.get'=36 +'local.set'=37 +'local.tee'=38 +'global.get'=39 +'global.set'=40 +'_'=43 +'offset='=44 +'align='=45 +'i32'=48 +'i64'=49 +'f32'=50 +'f64'=51 +'.eqz'=54 +'.eq'=55 +'.ne'=56 +'.lt'=57 +'.lt_s'=58 +'.lt_u'=59 +'.le'=60 +'.le_s'=61 +'.le_u'=62 +'.gt'=63 +'.gt_s'=64 +'.gt_u'=65 +'.ge'=66 +'.ge_s'=67 +'.ge_u'=68 +'.clz'=69 +'.ctz'=70 +'.popcnt'=71 +'.neg'=72 +'.abs'=73 +'.sqrt'=74 +'.ceil'=75 +'.floor'=76 +'.trunc'=77 +'.nearest'=78 +'.add'=79 +'.sub'=80 +'.mul'=81 +'.div'=82 +'.div_s'=83 +'.div_u'=84 +'.rem_s'=85 +'.rem_u'=86 +'.and'=87 +'.or'=88 +'.xor'=89 +'.shl'=90 +'.shr_s'=91 +'.shr_u'=92 +'.rotl'=93 +'.rotr'=94 +'.min'=95 +'.max'=96 +'.copysign'=97 +'.wrap_'=98 +'.trunc_'=99 +'.trunc_sat_'=100 +'.convert_'=101 +'.extend_'=102 +'.demote_'=103 +'.promote_'=104 +'.reinterpret_'=105 +'memory.size'=106 +'memory.grow'=107 +'memory.fill'=108 +'memory.copy'=109 +'memory.init'=110 +'type'=116 +'func'=117 +'extern'=118 +'start'=119 +'param'=120 +'result'=121 +'local'=122 +'global'=123 +'table'=124 +'memory'=125 +'elem'=126 +'data'=127 +'offset'=128 +'import'=129 +'export'=130 +'module'=131 +'binary'=132 +'quote'=133 +'script'=134 +'register'=135 +'invoke'=136 +'get'=137 +'assert_malformed'=138 +'assert_invalid'=139 +'assert_unlinkable'=140 +'assert_return'=141 +'assert_return_canonical_nan'=142 +'assert_return_arithmetic_nan'=143 +'assert_trap'=144 +'assert_exhaustion'=145 +'input'=146 +'output'=147 +'v128'=149 diff --git a/grammar/WatParserBaseListener.java b/grammar/WatParserBaseListener.java new file mode 100644 index 000000000..67fc71037 --- /dev/null +++ b/grammar/WatParserBaseListener.java @@ -0,0 +1,903 @@ +// Generated from WatParser.g4 by ANTLR 4.13.2 + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.ErrorNode; +import org.antlr.v4.runtime.tree.TerminalNode; + +/** + * This class provides an empty implementation of {@link WatParserListener}, + * which can be extended to create a listener which only needs to handle a subset + * of the available methods. + */ +@SuppressWarnings("CheckReturnValue") +public class WatParserBaseListener implements WatParserListener { + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterValue(WatParser.ValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitValue(WatParser.ValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterName(WatParser.NameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitName(WatParser.NameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNumType(WatParser.NumTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNumType(WatParser.NumTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRefType(WatParser.RefTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRefType(WatParser.RefTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterVecType(WatParser.VecTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitVecType(WatParser.VecTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterValType(WatParser.ValTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitValType(WatParser.ValTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterHeapType(WatParser.HeapTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitHeapType(WatParser.HeapTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGlobalType(WatParser.GlobalTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGlobalType(WatParser.GlobalTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDefType(WatParser.DefTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDefType(WatParser.DefTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFuncParamType(WatParser.FuncParamTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFuncParamType(WatParser.FuncParamTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFuncResType(WatParser.FuncResTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFuncResType(WatParser.FuncResTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFuncType(WatParser.FuncTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFuncType(WatParser.FuncTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableType(WatParser.TableTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableType(WatParser.TableTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMemoryType(WatParser.MemoryTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMemoryType(WatParser.MemoryTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeUse(WatParser.TypeUseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeUse(WatParser.TypeUseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLiteral(WatParser.LiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLiteral(WatParser.LiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIdx(WatParser.IdxContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIdx(WatParser.IdxContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBindVar(WatParser.BindVarContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBindVar(WatParser.BindVarContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInstr(WatParser.InstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInstr(WatParser.InstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterForLoop(WatParser.ForLoopContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitForLoop(WatParser.ForLoopContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPlainInstr(WatParser.PlainInstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPlainInstr(WatParser.PlainInstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOffsetEq(WatParser.OffsetEqContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOffsetEq(WatParser.OffsetEqContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlignEq(WatParser.AlignEqContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlignEq(WatParser.AlignEqContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLoad(WatParser.LoadContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLoad(WatParser.LoadContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStore(WatParser.StoreContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStore(WatParser.StoreContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectInstr(WatParser.SelectInstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectInstr(WatParser.SelectInstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCallIndirectInstr(WatParser.CallIndirectInstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCallIndirectInstr(WatParser.CallIndirectInstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCallInstrParams(WatParser.CallInstrParamsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCallInstrParams(WatParser.CallInstrParamsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCallInstrParamsInstr(WatParser.CallInstrParamsInstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCallInstrParamsInstr(WatParser.CallInstrParamsInstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCallInstrResultsInstr(WatParser.CallInstrResultsInstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCallInstrResultsInstr(WatParser.CallInstrResultsInstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBlockInstr(WatParser.BlockInstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBlockInstr(WatParser.BlockInstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBlockType(WatParser.BlockTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBlockType(WatParser.BlockTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBlock(WatParser.BlockContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBlock(WatParser.BlockContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFoldedInstr(WatParser.FoldedInstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFoldedInstr(WatParser.FoldedInstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpr(WatParser.ExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpr(WatParser.ExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCallExprType(WatParser.CallExprTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCallExprType(WatParser.CallExprTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCallExprParams(WatParser.CallExprParamsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCallExprParams(WatParser.CallExprParamsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCallExprResults(WatParser.CallExprResultsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCallExprResults(WatParser.CallExprResultsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInstrList(WatParser.InstrListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInstrList(WatParser.InstrListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConstExpr(WatParser.ConstExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConstExpr(WatParser.ConstExprContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunction(WatParser.FunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunction(WatParser.FunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFuncFields(WatParser.FuncFieldsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFuncFields(WatParser.FuncFieldsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFuncFieldsBody(WatParser.FuncFieldsBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFuncFieldsBody(WatParser.FuncFieldsBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFuncBody(WatParser.FuncBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFuncBody(WatParser.FuncBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOffset(WatParser.OffsetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOffset(WatParser.OffsetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterElem(WatParser.ElemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitElem(WatParser.ElemContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTable(WatParser.TableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTable(WatParser.TableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTableField(WatParser.TableFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTableField(WatParser.TableFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterData(WatParser.DataContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitData(WatParser.DataContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMemory(WatParser.MemoryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMemory(WatParser.MemoryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMemoryField(WatParser.MemoryFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMemoryField(WatParser.MemoryFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGlobal(WatParser.GlobalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGlobal(WatParser.GlobalContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGlobalField(WatParser.GlobalFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGlobalField(WatParser.GlobalFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterImportDesc(WatParser.ImportDescContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitImportDesc(WatParser.ImportDescContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimport(WatParser.SimportContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimport(WatParser.SimportContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInlineImport(WatParser.InlineImportContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInlineImport(WatParser.InlineImportContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExportDesc(WatParser.ExportDescContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExportDesc(WatParser.ExportDescContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExport_(WatParser.Export_Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExport_(WatParser.Export_Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInlineExport(WatParser.InlineExportContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInlineExport(WatParser.InlineExportContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeDef(WatParser.TypeDefContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeDef(WatParser.TypeDefContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStart_(WatParser.Start_Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStart_(WatParser.Start_Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterModuleField(WatParser.ModuleFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitModuleField(WatParser.ModuleFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterModule_(WatParser.Module_Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitModule_(WatParser.Module_Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterScriptModule(WatParser.ScriptModuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitScriptModule(WatParser.ScriptModuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAction_(WatParser.Action_Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAction_(WatParser.Action_Context ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAssertion(WatParser.AssertionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAssertion(WatParser.AssertionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCmd(WatParser.CmdContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCmd(WatParser.CmdContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMeta(WatParser.MetaContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMeta(WatParser.MetaContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterWconst(WatParser.WconstContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitWconst(WatParser.WconstContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConstList(WatParser.ConstListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConstList(WatParser.ConstListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterScript(WatParser.ScriptContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitScript(WatParser.ScriptContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterModule(WatParser.ModuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitModule(WatParser.ModuleContext ctx) { } + + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitTerminal(TerminalNode node) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitErrorNode(ErrorNode node) { } +} \ No newline at end of file diff --git a/grammar/WatParserBaseVisitor.java b/grammar/WatParserBaseVisitor.java new file mode 100644 index 000000000..4dca62bbd --- /dev/null +++ b/grammar/WatParserBaseVisitor.java @@ -0,0 +1,518 @@ +// Generated from WatParser.g4 by ANTLR 4.13.2 +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; + +/** + * This class provides an empty implementation of {@link WatParserVisitor}, + * which can be extended to create a visitor which only needs to handle a subset + * of the available methods. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +@SuppressWarnings("CheckReturnValue") +public class WatParserBaseVisitor extends AbstractParseTreeVisitor implements WatParserVisitor { + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitValue(WatParser.ValueContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitName(WatParser.NameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNumType(WatParser.NumTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRefType(WatParser.RefTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitVecType(WatParser.VecTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitValType(WatParser.ValTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHeapType(WatParser.HeapTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGlobalType(WatParser.GlobalTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDefType(WatParser.DefTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFuncParamType(WatParser.FuncParamTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFuncResType(WatParser.FuncResTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFuncType(WatParser.FuncTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableType(WatParser.TableTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMemoryType(WatParser.MemoryTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTypeUse(WatParser.TypeUseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLiteral(WatParser.LiteralContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIdx(WatParser.IdxContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBindVar(WatParser.BindVarContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInstr(WatParser.InstrContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitForLoop(WatParser.ForLoopContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPlainInstr(WatParser.PlainInstrContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOffsetEq(WatParser.OffsetEqContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlignEq(WatParser.AlignEqContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLoad(WatParser.LoadContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStore(WatParser.StoreContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelectInstr(WatParser.SelectInstrContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCallIndirectInstr(WatParser.CallIndirectInstrContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCallInstrParams(WatParser.CallInstrParamsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCallInstrParamsInstr(WatParser.CallInstrParamsInstrContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCallInstrResultsInstr(WatParser.CallInstrResultsInstrContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBlockInstr(WatParser.BlockInstrContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBlockType(WatParser.BlockTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBlock(WatParser.BlockContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFoldedInstr(WatParser.FoldedInstrContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpr(WatParser.ExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCallExprType(WatParser.CallExprTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCallExprParams(WatParser.CallExprParamsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCallExprResults(WatParser.CallExprResultsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInstrList(WatParser.InstrListContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitConstExpr(WatParser.ConstExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFunction(WatParser.FunctionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFuncFields(WatParser.FuncFieldsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFuncFieldsBody(WatParser.FuncFieldsBodyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFuncBody(WatParser.FuncBodyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOffset(WatParser.OffsetContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitElem(WatParser.ElemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTable(WatParser.TableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTableField(WatParser.TableFieldContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitData(WatParser.DataContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMemory(WatParser.MemoryContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMemoryField(WatParser.MemoryFieldContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGlobal(WatParser.GlobalContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGlobalField(WatParser.GlobalFieldContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitImportDesc(WatParser.ImportDescContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSimport(WatParser.SimportContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInlineImport(WatParser.InlineImportContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExportDesc(WatParser.ExportDescContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExport_(WatParser.Export_Context ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInlineExport(WatParser.InlineExportContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTypeDef(WatParser.TypeDefContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStart_(WatParser.Start_Context ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitModuleField(WatParser.ModuleFieldContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitModule_(WatParser.Module_Context ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitScriptModule(WatParser.ScriptModuleContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAction_(WatParser.Action_Context ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAssertion(WatParser.AssertionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCmd(WatParser.CmdContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMeta(WatParser.MetaContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitWconst(WatParser.WconstContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitConstList(WatParser.ConstListContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitScript(WatParser.ScriptContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitModule(WatParser.ModuleContext ctx) { return visitChildren(ctx); } +} \ No newline at end of file diff --git a/grammar/WatParserListener.java b/grammar/WatParserListener.java new file mode 100644 index 000000000..506d6f163 --- /dev/null +++ b/grammar/WatParserListener.java @@ -0,0 +1,729 @@ +// Generated from WatParser.g4 by ANTLR 4.13.2 +import org.antlr.v4.runtime.tree.ParseTreeListener; + +/** + * This interface defines a complete listener for a parse tree produced by + * {@link WatParser}. + */ +public interface WatParserListener extends ParseTreeListener { + /** + * Enter a parse tree produced by {@link WatParser#value}. + * @param ctx the parse tree + */ + void enterValue(WatParser.ValueContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#value}. + * @param ctx the parse tree + */ + void exitValue(WatParser.ValueContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#name}. + * @param ctx the parse tree + */ + void enterName(WatParser.NameContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#name}. + * @param ctx the parse tree + */ + void exitName(WatParser.NameContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#numType}. + * @param ctx the parse tree + */ + void enterNumType(WatParser.NumTypeContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#numType}. + * @param ctx the parse tree + */ + void exitNumType(WatParser.NumTypeContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#refType}. + * @param ctx the parse tree + */ + void enterRefType(WatParser.RefTypeContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#refType}. + * @param ctx the parse tree + */ + void exitRefType(WatParser.RefTypeContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#vecType}. + * @param ctx the parse tree + */ + void enterVecType(WatParser.VecTypeContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#vecType}. + * @param ctx the parse tree + */ + void exitVecType(WatParser.VecTypeContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#valType}. + * @param ctx the parse tree + */ + void enterValType(WatParser.ValTypeContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#valType}. + * @param ctx the parse tree + */ + void exitValType(WatParser.ValTypeContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#heapType}. + * @param ctx the parse tree + */ + void enterHeapType(WatParser.HeapTypeContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#heapType}. + * @param ctx the parse tree + */ + void exitHeapType(WatParser.HeapTypeContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#globalType}. + * @param ctx the parse tree + */ + void enterGlobalType(WatParser.GlobalTypeContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#globalType}. + * @param ctx the parse tree + */ + void exitGlobalType(WatParser.GlobalTypeContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#defType}. + * @param ctx the parse tree + */ + void enterDefType(WatParser.DefTypeContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#defType}. + * @param ctx the parse tree + */ + void exitDefType(WatParser.DefTypeContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#funcParamType}. + * @param ctx the parse tree + */ + void enterFuncParamType(WatParser.FuncParamTypeContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#funcParamType}. + * @param ctx the parse tree + */ + void exitFuncParamType(WatParser.FuncParamTypeContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#funcResType}. + * @param ctx the parse tree + */ + void enterFuncResType(WatParser.FuncResTypeContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#funcResType}. + * @param ctx the parse tree + */ + void exitFuncResType(WatParser.FuncResTypeContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#funcType}. + * @param ctx the parse tree + */ + void enterFuncType(WatParser.FuncTypeContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#funcType}. + * @param ctx the parse tree + */ + void exitFuncType(WatParser.FuncTypeContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#tableType}. + * @param ctx the parse tree + */ + void enterTableType(WatParser.TableTypeContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#tableType}. + * @param ctx the parse tree + */ + void exitTableType(WatParser.TableTypeContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#memoryType}. + * @param ctx the parse tree + */ + void enterMemoryType(WatParser.MemoryTypeContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#memoryType}. + * @param ctx the parse tree + */ + void exitMemoryType(WatParser.MemoryTypeContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#typeUse}. + * @param ctx the parse tree + */ + void enterTypeUse(WatParser.TypeUseContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#typeUse}. + * @param ctx the parse tree + */ + void exitTypeUse(WatParser.TypeUseContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#literal}. + * @param ctx the parse tree + */ + void enterLiteral(WatParser.LiteralContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#literal}. + * @param ctx the parse tree + */ + void exitLiteral(WatParser.LiteralContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#idx}. + * @param ctx the parse tree + */ + void enterIdx(WatParser.IdxContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#idx}. + * @param ctx the parse tree + */ + void exitIdx(WatParser.IdxContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#bindVar}. + * @param ctx the parse tree + */ + void enterBindVar(WatParser.BindVarContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#bindVar}. + * @param ctx the parse tree + */ + void exitBindVar(WatParser.BindVarContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#instr}. + * @param ctx the parse tree + */ + void enterInstr(WatParser.InstrContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#instr}. + * @param ctx the parse tree + */ + void exitInstr(WatParser.InstrContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#forLoop}. + * @param ctx the parse tree + */ + void enterForLoop(WatParser.ForLoopContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#forLoop}. + * @param ctx the parse tree + */ + void exitForLoop(WatParser.ForLoopContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#plainInstr}. + * @param ctx the parse tree + */ + void enterPlainInstr(WatParser.PlainInstrContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#plainInstr}. + * @param ctx the parse tree + */ + void exitPlainInstr(WatParser.PlainInstrContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#offsetEq}. + * @param ctx the parse tree + */ + void enterOffsetEq(WatParser.OffsetEqContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#offsetEq}. + * @param ctx the parse tree + */ + void exitOffsetEq(WatParser.OffsetEqContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#alignEq}. + * @param ctx the parse tree + */ + void enterAlignEq(WatParser.AlignEqContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#alignEq}. + * @param ctx the parse tree + */ + void exitAlignEq(WatParser.AlignEqContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#load}. + * @param ctx the parse tree + */ + void enterLoad(WatParser.LoadContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#load}. + * @param ctx the parse tree + */ + void exitLoad(WatParser.LoadContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#store}. + * @param ctx the parse tree + */ + void enterStore(WatParser.StoreContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#store}. + * @param ctx the parse tree + */ + void exitStore(WatParser.StoreContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#selectInstr}. + * @param ctx the parse tree + */ + void enterSelectInstr(WatParser.SelectInstrContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#selectInstr}. + * @param ctx the parse tree + */ + void exitSelectInstr(WatParser.SelectInstrContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#callIndirectInstr}. + * @param ctx the parse tree + */ + void enterCallIndirectInstr(WatParser.CallIndirectInstrContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#callIndirectInstr}. + * @param ctx the parse tree + */ + void exitCallIndirectInstr(WatParser.CallIndirectInstrContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#callInstrParams}. + * @param ctx the parse tree + */ + void enterCallInstrParams(WatParser.CallInstrParamsContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#callInstrParams}. + * @param ctx the parse tree + */ + void exitCallInstrParams(WatParser.CallInstrParamsContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#callInstrParamsInstr}. + * @param ctx the parse tree + */ + void enterCallInstrParamsInstr(WatParser.CallInstrParamsInstrContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#callInstrParamsInstr}. + * @param ctx the parse tree + */ + void exitCallInstrParamsInstr(WatParser.CallInstrParamsInstrContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#callInstrResultsInstr}. + * @param ctx the parse tree + */ + void enterCallInstrResultsInstr(WatParser.CallInstrResultsInstrContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#callInstrResultsInstr}. + * @param ctx the parse tree + */ + void exitCallInstrResultsInstr(WatParser.CallInstrResultsInstrContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#blockInstr}. + * @param ctx the parse tree + */ + void enterBlockInstr(WatParser.BlockInstrContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#blockInstr}. + * @param ctx the parse tree + */ + void exitBlockInstr(WatParser.BlockInstrContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#blockType}. + * @param ctx the parse tree + */ + void enterBlockType(WatParser.BlockTypeContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#blockType}. + * @param ctx the parse tree + */ + void exitBlockType(WatParser.BlockTypeContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#block}. + * @param ctx the parse tree + */ + void enterBlock(WatParser.BlockContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#block}. + * @param ctx the parse tree + */ + void exitBlock(WatParser.BlockContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#foldedInstr}. + * @param ctx the parse tree + */ + void enterFoldedInstr(WatParser.FoldedInstrContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#foldedInstr}. + * @param ctx the parse tree + */ + void exitFoldedInstr(WatParser.FoldedInstrContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#expr}. + * @param ctx the parse tree + */ + void enterExpr(WatParser.ExprContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#expr}. + * @param ctx the parse tree + */ + void exitExpr(WatParser.ExprContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#callExprType}. + * @param ctx the parse tree + */ + void enterCallExprType(WatParser.CallExprTypeContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#callExprType}. + * @param ctx the parse tree + */ + void exitCallExprType(WatParser.CallExprTypeContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#callExprParams}. + * @param ctx the parse tree + */ + void enterCallExprParams(WatParser.CallExprParamsContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#callExprParams}. + * @param ctx the parse tree + */ + void exitCallExprParams(WatParser.CallExprParamsContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#callExprResults}. + * @param ctx the parse tree + */ + void enterCallExprResults(WatParser.CallExprResultsContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#callExprResults}. + * @param ctx the parse tree + */ + void exitCallExprResults(WatParser.CallExprResultsContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#instrList}. + * @param ctx the parse tree + */ + void enterInstrList(WatParser.InstrListContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#instrList}. + * @param ctx the parse tree + */ + void exitInstrList(WatParser.InstrListContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#constExpr}. + * @param ctx the parse tree + */ + void enterConstExpr(WatParser.ConstExprContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#constExpr}. + * @param ctx the parse tree + */ + void exitConstExpr(WatParser.ConstExprContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#function}. + * @param ctx the parse tree + */ + void enterFunction(WatParser.FunctionContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#function}. + * @param ctx the parse tree + */ + void exitFunction(WatParser.FunctionContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#funcFields}. + * @param ctx the parse tree + */ + void enterFuncFields(WatParser.FuncFieldsContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#funcFields}. + * @param ctx the parse tree + */ + void exitFuncFields(WatParser.FuncFieldsContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#funcFieldsBody}. + * @param ctx the parse tree + */ + void enterFuncFieldsBody(WatParser.FuncFieldsBodyContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#funcFieldsBody}. + * @param ctx the parse tree + */ + void exitFuncFieldsBody(WatParser.FuncFieldsBodyContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#funcBody}. + * @param ctx the parse tree + */ + void enterFuncBody(WatParser.FuncBodyContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#funcBody}. + * @param ctx the parse tree + */ + void exitFuncBody(WatParser.FuncBodyContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#offset}. + * @param ctx the parse tree + */ + void enterOffset(WatParser.OffsetContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#offset}. + * @param ctx the parse tree + */ + void exitOffset(WatParser.OffsetContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#elem}. + * @param ctx the parse tree + */ + void enterElem(WatParser.ElemContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#elem}. + * @param ctx the parse tree + */ + void exitElem(WatParser.ElemContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#table}. + * @param ctx the parse tree + */ + void enterTable(WatParser.TableContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#table}. + * @param ctx the parse tree + */ + void exitTable(WatParser.TableContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#tableField}. + * @param ctx the parse tree + */ + void enterTableField(WatParser.TableFieldContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#tableField}. + * @param ctx the parse tree + */ + void exitTableField(WatParser.TableFieldContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#data}. + * @param ctx the parse tree + */ + void enterData(WatParser.DataContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#data}. + * @param ctx the parse tree + */ + void exitData(WatParser.DataContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#memory}. + * @param ctx the parse tree + */ + void enterMemory(WatParser.MemoryContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#memory}. + * @param ctx the parse tree + */ + void exitMemory(WatParser.MemoryContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#memoryField}. + * @param ctx the parse tree + */ + void enterMemoryField(WatParser.MemoryFieldContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#memoryField}. + * @param ctx the parse tree + */ + void exitMemoryField(WatParser.MemoryFieldContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#global}. + * @param ctx the parse tree + */ + void enterGlobal(WatParser.GlobalContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#global}. + * @param ctx the parse tree + */ + void exitGlobal(WatParser.GlobalContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#globalField}. + * @param ctx the parse tree + */ + void enterGlobalField(WatParser.GlobalFieldContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#globalField}. + * @param ctx the parse tree + */ + void exitGlobalField(WatParser.GlobalFieldContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#importDesc}. + * @param ctx the parse tree + */ + void enterImportDesc(WatParser.ImportDescContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#importDesc}. + * @param ctx the parse tree + */ + void exitImportDesc(WatParser.ImportDescContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#simport}. + * @param ctx the parse tree + */ + void enterSimport(WatParser.SimportContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#simport}. + * @param ctx the parse tree + */ + void exitSimport(WatParser.SimportContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#inlineImport}. + * @param ctx the parse tree + */ + void enterInlineImport(WatParser.InlineImportContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#inlineImport}. + * @param ctx the parse tree + */ + void exitInlineImport(WatParser.InlineImportContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#exportDesc}. + * @param ctx the parse tree + */ + void enterExportDesc(WatParser.ExportDescContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#exportDesc}. + * @param ctx the parse tree + */ + void exitExportDesc(WatParser.ExportDescContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#export_}. + * @param ctx the parse tree + */ + void enterExport_(WatParser.Export_Context ctx); + /** + * Exit a parse tree produced by {@link WatParser#export_}. + * @param ctx the parse tree + */ + void exitExport_(WatParser.Export_Context ctx); + /** + * Enter a parse tree produced by {@link WatParser#inlineExport}. + * @param ctx the parse tree + */ + void enterInlineExport(WatParser.InlineExportContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#inlineExport}. + * @param ctx the parse tree + */ + void exitInlineExport(WatParser.InlineExportContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#typeDef}. + * @param ctx the parse tree + */ + void enterTypeDef(WatParser.TypeDefContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#typeDef}. + * @param ctx the parse tree + */ + void exitTypeDef(WatParser.TypeDefContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#start_}. + * @param ctx the parse tree + */ + void enterStart_(WatParser.Start_Context ctx); + /** + * Exit a parse tree produced by {@link WatParser#start_}. + * @param ctx the parse tree + */ + void exitStart_(WatParser.Start_Context ctx); + /** + * Enter a parse tree produced by {@link WatParser#moduleField}. + * @param ctx the parse tree + */ + void enterModuleField(WatParser.ModuleFieldContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#moduleField}. + * @param ctx the parse tree + */ + void exitModuleField(WatParser.ModuleFieldContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#module_}. + * @param ctx the parse tree + */ + void enterModule_(WatParser.Module_Context ctx); + /** + * Exit a parse tree produced by {@link WatParser#module_}. + * @param ctx the parse tree + */ + void exitModule_(WatParser.Module_Context ctx); + /** + * Enter a parse tree produced by {@link WatParser#scriptModule}. + * @param ctx the parse tree + */ + void enterScriptModule(WatParser.ScriptModuleContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#scriptModule}. + * @param ctx the parse tree + */ + void exitScriptModule(WatParser.ScriptModuleContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#action_}. + * @param ctx the parse tree + */ + void enterAction_(WatParser.Action_Context ctx); + /** + * Exit a parse tree produced by {@link WatParser#action_}. + * @param ctx the parse tree + */ + void exitAction_(WatParser.Action_Context ctx); + /** + * Enter a parse tree produced by {@link WatParser#assertion}. + * @param ctx the parse tree + */ + void enterAssertion(WatParser.AssertionContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#assertion}. + * @param ctx the parse tree + */ + void exitAssertion(WatParser.AssertionContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#cmd}. + * @param ctx the parse tree + */ + void enterCmd(WatParser.CmdContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#cmd}. + * @param ctx the parse tree + */ + void exitCmd(WatParser.CmdContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#meta}. + * @param ctx the parse tree + */ + void enterMeta(WatParser.MetaContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#meta}. + * @param ctx the parse tree + */ + void exitMeta(WatParser.MetaContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#wconst}. + * @param ctx the parse tree + */ + void enterWconst(WatParser.WconstContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#wconst}. + * @param ctx the parse tree + */ + void exitWconst(WatParser.WconstContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#constList}. + * @param ctx the parse tree + */ + void enterConstList(WatParser.ConstListContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#constList}. + * @param ctx the parse tree + */ + void exitConstList(WatParser.ConstListContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#script}. + * @param ctx the parse tree + */ + void enterScript(WatParser.ScriptContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#script}. + * @param ctx the parse tree + */ + void exitScript(WatParser.ScriptContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#module}. + * @param ctx the parse tree + */ + void enterModule(WatParser.ModuleContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#module}. + * @param ctx the parse tree + */ + void exitModule(WatParser.ModuleContext ctx); +} \ No newline at end of file diff --git a/grammar/WatParserVisitor.java b/grammar/WatParserVisitor.java new file mode 100644 index 000000000..66ec1d7b6 --- /dev/null +++ b/grammar/WatParserVisitor.java @@ -0,0 +1,444 @@ +// Generated from WatParser.g4 by ANTLR 4.13.2 +import org.antlr.v4.runtime.tree.ParseTreeVisitor; + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by {@link WatParser}. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +public interface WatParserVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by {@link WatParser#value}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitValue(WatParser.ValueContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#name}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitName(WatParser.NameContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#numType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNumType(WatParser.NumTypeContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#refType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRefType(WatParser.RefTypeContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#vecType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitVecType(WatParser.VecTypeContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#valType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitValType(WatParser.ValTypeContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#heapType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHeapType(WatParser.HeapTypeContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#globalType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGlobalType(WatParser.GlobalTypeContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#defType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDefType(WatParser.DefTypeContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#funcParamType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFuncParamType(WatParser.FuncParamTypeContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#funcResType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFuncResType(WatParser.FuncResTypeContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#funcType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFuncType(WatParser.FuncTypeContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#tableType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableType(WatParser.TableTypeContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#memoryType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMemoryType(WatParser.MemoryTypeContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#typeUse}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTypeUse(WatParser.TypeUseContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#literal}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLiteral(WatParser.LiteralContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#idx}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIdx(WatParser.IdxContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#bindVar}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBindVar(WatParser.BindVarContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#instr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInstr(WatParser.InstrContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#forLoop}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitForLoop(WatParser.ForLoopContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#plainInstr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPlainInstr(WatParser.PlainInstrContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#offsetEq}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOffsetEq(WatParser.OffsetEqContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#alignEq}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlignEq(WatParser.AlignEqContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#load}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLoad(WatParser.LoadContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#store}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStore(WatParser.StoreContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#selectInstr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelectInstr(WatParser.SelectInstrContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#callIndirectInstr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCallIndirectInstr(WatParser.CallIndirectInstrContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#callInstrParams}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCallInstrParams(WatParser.CallInstrParamsContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#callInstrParamsInstr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCallInstrParamsInstr(WatParser.CallInstrParamsInstrContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#callInstrResultsInstr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCallInstrResultsInstr(WatParser.CallInstrResultsInstrContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#blockInstr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBlockInstr(WatParser.BlockInstrContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#blockType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBlockType(WatParser.BlockTypeContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#block}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBlock(WatParser.BlockContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#foldedInstr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFoldedInstr(WatParser.FoldedInstrContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpr(WatParser.ExprContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#callExprType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCallExprType(WatParser.CallExprTypeContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#callExprParams}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCallExprParams(WatParser.CallExprParamsContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#callExprResults}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCallExprResults(WatParser.CallExprResultsContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#instrList}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInstrList(WatParser.InstrListContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#constExpr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitConstExpr(WatParser.ConstExprContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#function}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunction(WatParser.FunctionContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#funcFields}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFuncFields(WatParser.FuncFieldsContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#funcFieldsBody}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFuncFieldsBody(WatParser.FuncFieldsBodyContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#funcBody}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFuncBody(WatParser.FuncBodyContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#offset}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOffset(WatParser.OffsetContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#elem}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitElem(WatParser.ElemContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#table}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTable(WatParser.TableContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#tableField}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTableField(WatParser.TableFieldContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#data}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitData(WatParser.DataContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#memory}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMemory(WatParser.MemoryContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#memoryField}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMemoryField(WatParser.MemoryFieldContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#global}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGlobal(WatParser.GlobalContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#globalField}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGlobalField(WatParser.GlobalFieldContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#importDesc}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitImportDesc(WatParser.ImportDescContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#simport}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSimport(WatParser.SimportContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#inlineImport}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInlineImport(WatParser.InlineImportContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#exportDesc}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExportDesc(WatParser.ExportDescContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#export_}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExport_(WatParser.Export_Context ctx); + /** + * Visit a parse tree produced by {@link WatParser#inlineExport}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInlineExport(WatParser.InlineExportContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#typeDef}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTypeDef(WatParser.TypeDefContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#start_}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStart_(WatParser.Start_Context ctx); + /** + * Visit a parse tree produced by {@link WatParser#moduleField}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitModuleField(WatParser.ModuleFieldContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#module_}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitModule_(WatParser.Module_Context ctx); + /** + * Visit a parse tree produced by {@link WatParser#scriptModule}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitScriptModule(WatParser.ScriptModuleContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#action_}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAction_(WatParser.Action_Context ctx); + /** + * Visit a parse tree produced by {@link WatParser#assertion}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAssertion(WatParser.AssertionContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#cmd}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCmd(WatParser.CmdContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#meta}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMeta(WatParser.MetaContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#wconst}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitWconst(WatParser.WconstContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#constList}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitConstList(WatParser.ConstListContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#script}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitScript(WatParser.ScriptContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#module}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitModule(WatParser.ModuleContext ctx); +} \ No newline at end of file diff --git a/src/main/java/wasm/WatLexer.java b/src/main/java/wasm/WatLexer.java index c1373e3a6..5826f02fe 100644 --- a/src/main/java/wasm/WatLexer.java +++ b/src/main/java/wasm/WatLexer.java @@ -1,5 +1,5 @@ package gensym.wasm; -// Generated from WatLexer.g4 by ANTLR 4.13.0 +// Generated from WatLexer.g4 by ANTLR 4.13.2 import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.Token; @@ -9,9 +9,9 @@ import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.misc.*; -@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) public class WatLexer extends Lexer { - static { RuntimeMetaData.checkVersion("4.13.0", RuntimeMetaData.VERSION); } + static { RuntimeMetaData.checkVersion("4.13.2", RuntimeMetaData.VERSION); } protected static final DFA[] _decisionToDFA; protected static final PredictionContextCache _sharedContextCache = @@ -19,28 +19,29 @@ public class WatLexer extends Lexer { public static final int LPAR=1, RPAR=2, NAT=3, INT=4, FLOAT=5, STRING_=6, VALUE_TYPE=7, CONST=8, SYMBOLIC=9, FUNCREF=10, EXTERNREF=11, MUT=12, NOP=13, SYM_ASSERT=14, ALLOC=15, - FREE=16, UNREACHABLE=17, DROP=18, BLOCK=19, LOOP=20, END=21, BR=22, BR_IF=23, - BR_TABLE=24, RETURN=25, IF=26, THEN=27, ELSE=28, SELECT=29, CALL=30, CALL_INDIRECT=31, - RETURN_CALL=32, RETURN_CALL_INDIRECT=33, LOCAL_GET=34, LOCAL_SET=35, LOCAL_TEE=36, - GLOBAL_GET=37, GLOBAL_SET=38, LOAD=39, STORE=40, UNDERSCORE=41, OFFSET_EQ=42, - ALIGN_EQ=43, SIGN_POSTFIX=44, MEM_SIZE=45, I32=46, I64=47, F32=48, F64=49, - IXX=50, FXX=51, OP_EQZ=52, OP_EQ=53, OP_NE=54, OP_LT=55, OP_LTS=56, OP_LTU=57, - OP_LE=58, OP_LES=59, OP_LEU=60, OP_GT=61, OP_GTS=62, OP_GTU=63, OP_GE=64, - OP_GES=65, OP_GEU=66, OP_CLZ=67, OP_CTZ=68, OP_POPCNT=69, OP_NEG=70, OP_ABS=71, - OP_SQRT=72, OP_CEIL=73, OP_FLOOR=74, OP_TRUNC=75, OP_NEAREST=76, OP_ADD=77, - OP_SUB=78, OP_MUL=79, OP_DIV=80, OP_DIV_S=81, OP_DIV_U=82, OP_REM_S=83, - OP_REM_U=84, OP_AND=85, OP_OR=86, OP_XOR=87, OP_SHL=88, OP_SHR_S=89, OP_SHR_U=90, - OP_ROTL=91, OP_ROTR=92, OP_MIN=93, OP_MAX=94, OP_COPYSIGN=95, OP_WRAP=96, - OP_TRUNC_=97, OP_TRUNC_SAT=98, OP_CONVERT=99, OP_EXTEND=100, OP_DEMOTE=101, - OP_PROMOTE=102, OP_REINTER=103, MEMORY_SIZE=104, MEMORY_GROW=105, MEMORY_FILL=106, - MEMORY_COPY=107, MEMORY_INIT=108, TEST=109, COMPARE=110, UNARY=111, BINARY=112, - CONVERT=113, TYPE=114, FUNC=115, EXTERN=116, START_=117, PARAM=118, RESULT=119, - LOCAL=120, GLOBAL=121, TABLE=122, MEMORY=123, ELEM=124, DATA=125, OFFSET=126, - IMPORT=127, EXPORT=128, MODULE=129, BIN=130, QUOTE=131, SCRIPT=132, REGISTER=133, - INVOKE=134, GET=135, ASSERT_MALFORMED=136, ASSERT_INVALID=137, ASSERT_UNLINKABLE=138, - ASSERT_RETURN=139, ASSERT_RETURN_CANONICAL_NAN=140, ASSERT_RETURN_ARITHMETIC_NAN=141, - ASSERT_TRAP=142, ASSERT_EXHAUSTION=143, INPUT=144, OUTPUT=145, VAR=146, - V128=147, SPACE=148, COMMENT=149; + FREE=16, UNREACHABLE=17, DROP=18, BLOCK=19, LOOP=20, FOR=21, VBAR=22, + END=23, BR=24, BR_IF=25, BR_TABLE=26, RETURN=27, IF=28, THEN=29, ELSE=30, + SELECT=31, CALL=32, CALL_INDIRECT=33, RETURN_CALL=34, RETURN_CALL_INDIRECT=35, + LOCAL_GET=36, LOCAL_SET=37, LOCAL_TEE=38, GLOBAL_GET=39, GLOBAL_SET=40, + LOAD=41, STORE=42, UNDERSCORE=43, OFFSET_EQ=44, ALIGN_EQ=45, SIGN_POSTFIX=46, + MEM_SIZE=47, I32=48, I64=49, F32=50, F64=51, IXX=52, FXX=53, OP_EQZ=54, + OP_EQ=55, OP_NE=56, OP_LT=57, OP_LTS=58, OP_LTU=59, OP_LE=60, OP_LES=61, + OP_LEU=62, OP_GT=63, OP_GTS=64, OP_GTU=65, OP_GE=66, OP_GES=67, OP_GEU=68, + OP_CLZ=69, OP_CTZ=70, OP_POPCNT=71, OP_NEG=72, OP_ABS=73, OP_SQRT=74, + OP_CEIL=75, OP_FLOOR=76, OP_TRUNC=77, OP_NEAREST=78, OP_ADD=79, OP_SUB=80, + OP_MUL=81, OP_DIV=82, OP_DIV_S=83, OP_DIV_U=84, OP_REM_S=85, OP_REM_U=86, + OP_AND=87, OP_OR=88, OP_XOR=89, OP_SHL=90, OP_SHR_S=91, OP_SHR_U=92, OP_ROTL=93, + OP_ROTR=94, OP_MIN=95, OP_MAX=96, OP_COPYSIGN=97, OP_WRAP=98, OP_TRUNC_=99, + OP_TRUNC_SAT=100, OP_CONVERT=101, OP_EXTEND=102, OP_DEMOTE=103, OP_PROMOTE=104, + OP_REINTER=105, MEMORY_SIZE=106, MEMORY_GROW=107, MEMORY_FILL=108, MEMORY_COPY=109, + MEMORY_INIT=110, TEST=111, COMPARE=112, UNARY=113, BINARY=114, CONVERT=115, + TYPE=116, FUNC=117, EXTERN=118, START_=119, PARAM=120, RESULT=121, LOCAL=122, + GLOBAL=123, TABLE=124, MEMORY=125, ELEM=126, DATA=127, OFFSET=128, IMPORT=129, + EXPORT=130, MODULE=131, BIN=132, QUOTE=133, SCRIPT=134, REGISTER=135, + INVOKE=136, GET=137, ASSERT_MALFORMED=138, ASSERT_INVALID=139, ASSERT_UNLINKABLE=140, + ASSERT_RETURN=141, ASSERT_RETURN_CANONICAL_NAN=142, ASSERT_RETURN_ARITHMETIC_NAN=143, + ASSERT_TRAP=144, ASSERT_EXHAUSTION=145, INPUT=146, OUTPUT=147, VAR=148, + V128=149, SPACE=150, COMMENT=151; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -53,29 +54,30 @@ private static String[] makeRuleNames() { return new String[] { "LPAR", "RPAR", "NAT", "INT", "FLOAT", "STRING_", "VALUE_TYPE", "CONST", "SYMBOLIC", "FUNCREF", "EXTERNREF", "MUT", "NOP", "SYM_ASSERT", "ALLOC", - "FREE", "UNREACHABLE", "DROP", "BLOCK", "LOOP", "END", "BR", "BR_IF", - "BR_TABLE", "RETURN", "IF", "THEN", "ELSE", "SELECT", "CALL", "CALL_INDIRECT", - "RETURN_CALL", "RETURN_CALL_INDIRECT", "LOCAL_GET", "LOCAL_SET", "LOCAL_TEE", - "GLOBAL_GET", "GLOBAL_SET", "LOAD", "STORE", "UNDERSCORE", "OFFSET_EQ", - "ALIGN_EQ", "SIGN_POSTFIX", "MEM_SIZE", "I32", "I64", "F32", "F64", "IXX", - "FXX", "OP_EQZ", "OP_EQ", "OP_NE", "OP_LT", "OP_LTS", "OP_LTU", "OP_LE", - "OP_LES", "OP_LEU", "OP_GT", "OP_GTS", "OP_GTU", "OP_GE", "OP_GES", "OP_GEU", - "OP_CLZ", "OP_CTZ", "OP_POPCNT", "OP_NEG", "OP_ABS", "OP_SQRT", "OP_CEIL", - "OP_FLOOR", "OP_TRUNC", "OP_NEAREST", "OP_ADD", "OP_SUB", "OP_MUL", "OP_DIV", - "OP_DIV_S", "OP_DIV_U", "OP_REM_S", "OP_REM_U", "OP_AND", "OP_OR", "OP_XOR", - "OP_SHL", "OP_SHR_S", "OP_SHR_U", "OP_ROTL", "OP_ROTR", "OP_MIN", "OP_MAX", - "OP_COPYSIGN", "OP_WRAP", "OP_TRUNC_", "OP_TRUNC_SAT", "OP_CONVERT", - "OP_EXTEND", "OP_DEMOTE", "OP_PROMOTE", "OP_REINTER", "MEMORY_SIZE", - "MEMORY_GROW", "MEMORY_FILL", "MEMORY_COPY", "MEMORY_INIT", "TEST", "COMPARE", - "UNARY", "BINARY", "CONVERT", "TYPE", "FUNC", "EXTERN", "START_", "PARAM", - "RESULT", "LOCAL", "GLOBAL", "TABLE", "MEMORY", "ELEM", "DATA", "OFFSET", - "IMPORT", "EXPORT", "MODULE", "BIN", "QUOTE", "SCRIPT", "REGISTER", "INVOKE", - "GET", "ASSERT_MALFORMED", "ASSERT_INVALID", "ASSERT_UNLINKABLE", "ASSERT_RETURN", - "ASSERT_RETURN_CANONICAL_NAN", "ASSERT_RETURN_ARITHMETIC_NAN", "ASSERT_TRAP", - "ASSERT_EXHAUSTION", "INPUT", "OUTPUT", "VAR", "V128", "SPACE", "COMMENT", - "Symbol", "Num", "HexNum", "Sign", "Digit", "HexDigit", "Letter", "Nat", - "Int", "Frac", "HexFrac", "Float", "String_", "Name", "Escape", "NXX", - "Char", "Ascii", "Ascii_no_nl", "Utf8Cont", "Utf8", "Utf8_no_nl", "Utf8Enc" + "FREE", "UNREACHABLE", "DROP", "BLOCK", "LOOP", "FOR", "VBAR", "END", + "BR", "BR_IF", "BR_TABLE", "RETURN", "IF", "THEN", "ELSE", "SELECT", + "CALL", "CALL_INDIRECT", "RETURN_CALL", "RETURN_CALL_INDIRECT", "LOCAL_GET", + "LOCAL_SET", "LOCAL_TEE", "GLOBAL_GET", "GLOBAL_SET", "LOAD", "STORE", + "UNDERSCORE", "OFFSET_EQ", "ALIGN_EQ", "SIGN_POSTFIX", "MEM_SIZE", "I32", + "I64", "F32", "F64", "IXX", "FXX", "OP_EQZ", "OP_EQ", "OP_NE", "OP_LT", + "OP_LTS", "OP_LTU", "OP_LE", "OP_LES", "OP_LEU", "OP_GT", "OP_GTS", "OP_GTU", + "OP_GE", "OP_GES", "OP_GEU", "OP_CLZ", "OP_CTZ", "OP_POPCNT", "OP_NEG", + "OP_ABS", "OP_SQRT", "OP_CEIL", "OP_FLOOR", "OP_TRUNC", "OP_NEAREST", + "OP_ADD", "OP_SUB", "OP_MUL", "OP_DIV", "OP_DIV_S", "OP_DIV_U", "OP_REM_S", + "OP_REM_U", "OP_AND", "OP_OR", "OP_XOR", "OP_SHL", "OP_SHR_S", "OP_SHR_U", + "OP_ROTL", "OP_ROTR", "OP_MIN", "OP_MAX", "OP_COPYSIGN", "OP_WRAP", "OP_TRUNC_", + "OP_TRUNC_SAT", "OP_CONVERT", "OP_EXTEND", "OP_DEMOTE", "OP_PROMOTE", + "OP_REINTER", "MEMORY_SIZE", "MEMORY_GROW", "MEMORY_FILL", "MEMORY_COPY", + "MEMORY_INIT", "TEST", "COMPARE", "UNARY", "BINARY", "CONVERT", "TYPE", + "FUNC", "EXTERN", "START_", "PARAM", "RESULT", "LOCAL", "GLOBAL", "TABLE", + "MEMORY", "ELEM", "DATA", "OFFSET", "IMPORT", "EXPORT", "MODULE", "BIN", + "QUOTE", "SCRIPT", "REGISTER", "INVOKE", "GET", "ASSERT_MALFORMED", "ASSERT_INVALID", + "ASSERT_UNLINKABLE", "ASSERT_RETURN", "ASSERT_RETURN_CANONICAL_NAN", + "ASSERT_RETURN_ARITHMETIC_NAN", "ASSERT_TRAP", "ASSERT_EXHAUSTION", "INPUT", + "OUTPUT", "VAR", "V128", "SPACE", "COMMENT", "Symbol", "Num", "HexNum", + "Sign", "Digit", "HexDigit", "Letter", "Nat", "Int", "Frac", "HexFrac", + "Float", "String_", "Name", "Escape", "NXX", "Char", "Ascii", "Ascii_no_nl", + "Utf8Cont", "Utf8", "Utf8_no_nl", "Utf8Enc" }; } public static final String[] ruleNames = makeRuleNames(); @@ -84,12 +86,12 @@ private static String[] makeLiteralNames() { return new String[] { null, "'('", "')'", null, null, null, null, null, null, null, "'funcref'", "'externref'", "'mut'", "'nop'", "'sym_assert'", "'alloc'", "'free'", - "'unreachable'", "'drop'", "'block'", "'loop'", "'end'", "'br'", "'br_if'", - "'br_table'", "'return'", "'if'", "'then'", "'else'", "'.select'", "'call'", - "'call_indirect'", "'return_call'", "'return_call_indirect'", "'local.get'", - "'local.set'", "'local.tee'", "'global.get'", "'global.set'", null, null, - "'_'", "'offset='", "'align='", null, null, "'i32'", "'i64'", "'f32'", - "'f64'", null, null, "'.eqz'", "'.eq'", "'.ne'", "'.lt'", "'.lt_s'", + "'unreachable'", "'drop'", "'block'", "'loop'", "'for'", "'|'", "'end'", + "'br'", "'br_if'", "'br_table'", "'return'", "'if'", "'then'", "'else'", + "'.select'", "'call'", "'call_indirect'", "'return_call'", "'return_call_indirect'", + "'local.get'", "'local.set'", "'local.tee'", "'global.get'", "'global.set'", + null, null, "'_'", "'offset='", "'align='", null, null, "'i32'", "'i64'", + "'f32'", "'f64'", null, null, "'.eqz'", "'.eq'", "'.ne'", "'.lt'", "'.lt_s'", "'.lt_u'", "'.le'", "'.le_s'", "'.le_u'", "'.gt'", "'.gt_s'", "'.gt_u'", "'.ge'", "'.ge_s'", "'.ge_u'", "'.clz'", "'.ctz'", "'.popcnt'", "'.neg'", "'.abs'", "'.sqrt'", "'.ceil'", "'.floor'", "'.trunc'", "'.nearest'", @@ -113,9 +115,9 @@ private static String[] makeSymbolicNames() { return new String[] { null, "LPAR", "RPAR", "NAT", "INT", "FLOAT", "STRING_", "VALUE_TYPE", "CONST", "SYMBOLIC", "FUNCREF", "EXTERNREF", "MUT", "NOP", "SYM_ASSERT", - "ALLOC", "FREE", "UNREACHABLE", "DROP", "BLOCK", "LOOP", "END", "BR", - "BR_IF", "BR_TABLE", "RETURN", "IF", "THEN", "ELSE", "SELECT", "CALL", - "CALL_INDIRECT", "RETURN_CALL", "RETURN_CALL_INDIRECT", "LOCAL_GET", + "ALLOC", "FREE", "UNREACHABLE", "DROP", "BLOCK", "LOOP", "FOR", "VBAR", + "END", "BR", "BR_IF", "BR_TABLE", "RETURN", "IF", "THEN", "ELSE", "SELECT", + "CALL", "CALL_INDIRECT", "RETURN_CALL", "RETURN_CALL_INDIRECT", "LOCAL_GET", "LOCAL_SET", "LOCAL_TEE", "GLOBAL_GET", "GLOBAL_SET", "LOAD", "STORE", "UNDERSCORE", "OFFSET_EQ", "ALIGN_EQ", "SIGN_POSTFIX", "MEM_SIZE", "I32", "I64", "F32", "F64", "IXX", "FXX", "OP_EQZ", "OP_EQ", "OP_NE", "OP_LT", @@ -195,7 +197,7 @@ public WatLexer(CharStream input) { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\u0004\u0000\u0095\u0846\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002"+ + "\u0004\u0000\u0097\u0850\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002"+ "\u0001\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002"+ "\u0004\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002"+ "\u0007\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002"+ @@ -239,111 +241,91 @@ public WatLexer(CharStream input) { "\u0002\u00a1\u0007\u00a1\u0002\u00a2\u0007\u00a2\u0002\u00a3\u0007\u00a3"+ "\u0002\u00a4\u0007\u00a4\u0002\u00a5\u0007\u00a5\u0002\u00a6\u0007\u00a6"+ "\u0002\u00a7\u0007\u00a7\u0002\u00a8\u0007\u00a8\u0002\u00a9\u0007\u00a9"+ - "\u0002\u00aa\u0007\u00aa\u0002\u00ab\u0007\u00ab\u0001\u0000\u0001\u0000"+ - "\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003"+ - "\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006"+ + "\u0002\u00aa\u0007\u00aa\u0002\u00ab\u0007\u00ab\u0002\u00ac\u0007\u00ac"+ + "\u0002\u00ad\u0007\u00ad\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001"+ + "\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004"+ + "\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007"+ "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ - "\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+ - "\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001"+ - "\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+ - "\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001"+ - "\u000b\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001"+ - "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+ - "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+ - "\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001"+ + "\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+ + "\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001"+ + "\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+ + "\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001"+ + "\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+ + "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001"+ + "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ - "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001"+ - "\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001"+ - "\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001"+ - "\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ - "\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001"+ - "\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001"+ - "\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+ - "\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+ - "\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001"+ - "\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+ + "\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001"+ + "\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+ + "\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001"+ + "\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001"+ + "\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+ + "\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ + "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001"+ + "\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+ "\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001"+ - "\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001"+ - "\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001"+ - "\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+ - "\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+ - "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ - "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ - " \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001"+ - " \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001"+ - " \u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ - "!\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+ + "\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001"+ + "\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+ + "\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ + "\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001"+ + " \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001"+ + "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001\"\u0001"+ + "\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+ + "\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+ "\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+ "#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ - "$\u0001$\u0001$\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001"+ - "%\u0001%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001"+ - "&\u0001&\u0001&\u0001&\u0003&\u026b\b&\u0001\'\u0001\'\u0001\'\u0001\'"+ - "\u0001\'\u0001\'\u0001\'\u0001\'\u0003\'\u0275\b\'\u0001(\u0001(\u0001"+ - ")\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001"+ - "*\u0001*\u0001*\u0001*\u0001*\u0001+\u0001+\u0001,\u0001,\u0001,\u0001"+ - ",\u0001,\u0001,\u0001,\u0003,\u0291\b,\u0001-\u0001-\u0001-\u0001-\u0001"+ - ".\u0001.\u0001.\u0001.\u0001/\u0001/\u0001/\u0001/\u00010\u00010\u0001"+ - "0\u00010\u00011\u00011\u00031\u02a5\b1\u00012\u00012\u00032\u02a9\b2\u0001"+ - "3\u00013\u00013\u00013\u00013\u00014\u00014\u00014\u00014\u00015\u0001"+ - "5\u00015\u00015\u00016\u00016\u00016\u00016\u00017\u00017\u00017\u0001"+ - "7\u00017\u00017\u00018\u00018\u00018\u00018\u00018\u00018\u00019\u0001"+ + "$\u0001$\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001"+ + "%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001"+ + "&\u0001&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001"+ + "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001(\u0001("+ + "\u0001(\u0001(\u0001(\u0001(\u0001(\u0003(\u0275\b(\u0001)\u0001)\u0001"+ + ")\u0001)\u0001)\u0001)\u0001)\u0001)\u0003)\u027f\b)\u0001*\u0001*\u0001"+ + "+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001,\u0001,\u0001"+ + ",\u0001,\u0001,\u0001,\u0001,\u0001-\u0001-\u0001.\u0001.\u0001.\u0001"+ + ".\u0001.\u0001.\u0001.\u0003.\u029b\b.\u0001/\u0001/\u0001/\u0001/\u0001"+ + "0\u00010\u00010\u00010\u00011\u00011\u00011\u00011\u00012\u00012\u0001"+ + "2\u00012\u00013\u00013\u00033\u02af\b3\u00014\u00014\u00034\u02b3\b4\u0001"+ + "5\u00015\u00015\u00015\u00015\u00016\u00016\u00016\u00016\u00017\u0001"+ + "7\u00017\u00017\u00018\u00018\u00018\u00018\u00019\u00019\u00019\u0001"+ "9\u00019\u00019\u0001:\u0001:\u0001:\u0001:\u0001:\u0001:\u0001;\u0001"+ - ";\u0001;\u0001;\u0001;\u0001;\u0001<\u0001<\u0001<\u0001<\u0001=\u0001"+ - "=\u0001=\u0001=\u0001=\u0001=\u0001>\u0001>\u0001>\u0001>\u0001>\u0001"+ - ">\u0001?\u0001?\u0001?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001@\u0001"+ - "@\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001B\u0001B\u0001B\u0001"+ - "B\u0001B\u0001C\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001D\u0001"+ - "D\u0001D\u0001D\u0001D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001E\u0001"+ + ";\u0001;\u0001;\u0001<\u0001<\u0001<\u0001<\u0001<\u0001<\u0001=\u0001"+ + "=\u0001=\u0001=\u0001=\u0001=\u0001>\u0001>\u0001>\u0001>\u0001?\u0001"+ + "?\u0001?\u0001?\u0001?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001@\u0001"+ + "@\u0001A\u0001A\u0001A\u0001A\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001D\u0001"+ + "D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001E\u0001F\u0001F\u0001F\u0001"+ "F\u0001F\u0001F\u0001F\u0001F\u0001G\u0001G\u0001G\u0001G\u0001G\u0001"+ - "G\u0001H\u0001H\u0001H\u0001H\u0001H\u0001H\u0001I\u0001I\u0001I\u0001"+ - "I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001"+ - "J\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001"+ - "L\u0001L\u0001L\u0001L\u0001L\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ + "H\u0001H\u0001H\u0001H\u0001H\u0001I\u0001I\u0001I\u0001I\u0001I\u0001"+ + "I\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001K\u0001K\u0001K\u0001"+ + "K\u0001K\u0001K\u0001K\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001"+ + "L\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ "N\u0001N\u0001N\u0001N\u0001N\u0001O\u0001O\u0001O\u0001O\u0001O\u0001"+ - "P\u0001P\u0001P\u0001P\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0001"+ - "Q\u0001Q\u0001Q\u0001Q\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001"+ - "R\u0001S\u0001S\u0001S\u0001S\u0001S\u0001S\u0001S\u0001T\u0001T\u0001"+ - "T\u0001T\u0001T\u0001U\u0001U\u0001U\u0001U\u0001V\u0001V\u0001V\u0001"+ - "V\u0001V\u0001W\u0001W\u0001W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001"+ - "X\u0001X\u0001X\u0001X\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001"+ - "Y\u0001Z\u0001Z\u0001Z\u0001Z\u0001Z\u0001Z\u0001[\u0001[\u0001[\u0001"+ - "[\u0001[\u0001[\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001]\u0001]"+ - "\u0001]\u0001]\u0001]\u0001^\u0001^\u0001^\u0001^\u0001^\u0001^\u0001"+ - "^\u0001^\u0001^\u0001^\u0001_\u0001_\u0001_\u0001_\u0001_\u0001_\u0001"+ - "_\u0001`\u0001`\u0001`\u0001`\u0001`\u0001`\u0001`\u0001`\u0001a\u0001"+ - "a\u0001a\u0001a\u0001a\u0001a\u0001a\u0001a\u0001a\u0001a\u0001a\u0001"+ - "a\u0001b\u0001b\u0001b\u0001b\u0001b\u0001b\u0001b\u0001b\u0001b\u0001"+ - "b\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001"+ - "d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001e\u0001"+ - "e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001f\u0001"+ - "f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001"+ - "f\u0001f\u0001f\u0001g\u0001g\u0001g\u0001g\u0001g\u0001g\u0001g\u0001"+ - "g\u0001g\u0001g\u0001g\u0001g\u0001h\u0001h\u0001h\u0001h\u0001h\u0001"+ - "h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001i\u0001i\u0001i\u0001"+ - "i\u0001i\u0001i\u0001i\u0001i\u0001i\u0001i\u0001i\u0001i\u0001j\u0001"+ - "j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001"+ - "j\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001"+ - "k\u0001k\u0001k\u0001l\u0001l\u0001l\u0001m\u0001m\u0001m\u0001m\u0001"+ - "m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001"+ - "m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001"+ - "m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001"+ - "m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001"+ - "m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001"+ - "m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001"+ - "m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001"+ - "m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001"+ - "m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001"+ - "m\u0001m\u0003m\u0496\bm\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001"+ - "n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001"+ - "n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001"+ - "n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001"+ - "n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001"+ - "n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001"+ - "n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001"+ - "n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0003n\u04e1\bn\u0001o\u0001"+ - "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ - "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ - "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ + "P\u0001P\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001"+ + "R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001S\u0001S\u0001S\u0001"+ + "S\u0001S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001T\u0001T\u0001"+ + "T\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001V\u0001V\u0001"+ + "V\u0001V\u0001V\u0001W\u0001W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001"+ + "X\u0001X\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001"+ + "Z\u0001Z\u0001Z\u0001Z\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001"+ + "[\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001]\u0001]\u0001"+ + "]\u0001]\u0001]\u0001]\u0001^\u0001^\u0001^\u0001^\u0001^\u0001_\u0001"+ + "_\u0001_\u0001_\u0001_\u0001`\u0001`\u0001`\u0001`\u0001`\u0001`\u0001"+ + "`\u0001`\u0001`\u0001`\u0001a\u0001a\u0001a\u0001a\u0001a\u0001a\u0001"+ + "a\u0001b\u0001b\u0001b\u0001b\u0001b\u0001b\u0001b\u0001b\u0001c\u0001"+ + "c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001"+ + "c\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001"+ + "d\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001"+ + "f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001g\u0001"+ + "g\u0001g\u0001g\u0001g\u0001g\u0001g\u0001g\u0001g\u0001g\u0001h\u0001"+ + "h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001"+ + "h\u0001h\u0001h\u0001i\u0001i\u0001i\u0001i\u0001i\u0001i\u0001i\u0001"+ + "i\u0001i\u0001i\u0001i\u0001i\u0001j\u0001j\u0001j\u0001j\u0001j\u0001"+ + "j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001k\u0001k\u0001k\u0001"+ + "k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001l\u0001"+ + "l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001"+ + "l\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001"+ + "m\u0001m\u0001m\u0001n\u0001n\u0001n\u0001o\u0001o\u0001o\u0001o\u0001"+ "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ @@ -353,1131 +335,1157 @@ public WatLexer(CharStream input) { "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ - "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ - "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ - "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0003o\u0579"+ - "\bo\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ + "o\u0001o\u0003o\u04a0\bo\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0003p\u061d\bp\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ - "r\u0001r\u0001r\u0001r\u0001r\u0001s\u0001s\u0001s\u0001s\u0001s\u0001"+ - "s\u0001s\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001v\u0001v\u0001v\u0001v\u0001v\u0001v\u0001"+ - "v\u0001w\u0001w\u0001w\u0001w\u0001w\u0001w\u0001x\u0001x\u0001x\u0001"+ - "x\u0001x\u0001x\u0001x\u0001y\u0001y\u0001y\u0001y\u0001y\u0001y\u0001"+ - "z\u0001z\u0001z\u0001z\u0001z\u0001z\u0001z\u0001{\u0001{\u0001{\u0001"+ - "{\u0001{\u0001|\u0001|\u0001|\u0001|\u0001|\u0001}\u0001}\u0001}\u0001"+ - "}\u0001}\u0001}\u0001}\u0001~\u0001~\u0001~\u0001~\u0001~\u0001~\u0001"+ - "~\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f"+ - "\u0001\u007f\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0080"+ - "\u0001\u0080\u0001\u0080\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081"+ - "\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0082\u0001\u0082\u0001\u0082"+ - "\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0083\u0001\u0083\u0001\u0083"+ - "\u0001\u0083\u0001\u0083\u0001\u0083\u0001\u0083\u0001\u0084\u0001\u0084"+ - "\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0084"+ - "\u0001\u0084\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0085"+ - "\u0001\u0085\u0001\u0085\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086"+ - "\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087"+ - "\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087"+ - "\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0088"+ - "\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088"+ - "\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088"+ - "\u0001\u0088\u0001\u0088\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089"+ - "\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089"+ - "\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089"+ - "\u0001\u0089\u0001\u0089\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a"+ - "\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a"+ - "\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008b\u0001\u008b"+ - "\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b"+ - "\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b"+ - "\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b"+ - "\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b"+ - "\u0001\u008b\u0001\u008b\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c"+ - "\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c"+ - "\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c"+ - "\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c"+ - "\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c"+ - "\u0001\u008c\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d"+ - "\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d"+ - "\u0001\u008d\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e"+ - "\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e"+ - "\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e"+ - "\u0001\u008e\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f"+ - "\u0001\u008f\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090"+ - "\u0001\u0090\u0001\u0090\u0001\u0091\u0001\u0091\u0001\u0092\u0001\u0092"+ - "\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0093\u0004\u0093\u0757\b\u0093"+ - "\u000b\u0093\f\u0093\u0758\u0001\u0093\u0001\u0093\u0001\u0094\u0001\u0094"+ - "\u0001\u0094\u0001\u0094\u0005\u0094\u0761\b\u0094\n\u0094\f\u0094\u0764"+ - "\t\u0094\u0001\u0094\u0001\u0094\u0001\u0094\u0001\u0094\u0001\u0094\u0001"+ - "\u0094\u0005\u0094\u076c\b\u0094\n\u0094\f\u0094\u076f\t\u0094\u0001\u0094"+ - "\u0003\u0094\u0772\b\u0094\u0001\u0094\u0001\u0094\u0001\u0095\u0001\u0095"+ - "\u0001\u0096\u0001\u0096\u0003\u0096\u077a\b\u0096\u0001\u0096\u0005\u0096"+ - "\u077d\b\u0096\n\u0096\f\u0096\u0780\t\u0096\u0001\u0097\u0001\u0097\u0003"+ - "\u0097\u0784\b\u0097\u0001\u0097\u0005\u0097\u0787\b\u0097\n\u0097\f\u0097"+ - "\u078a\t\u0097\u0001\u0098\u0001\u0098\u0001\u0099\u0001\u0099\u0001\u009a"+ - "\u0001\u009a\u0001\u009b\u0001\u009b\u0001\u009c\u0001\u009c\u0001\u009c"+ - "\u0001\u009c\u0001\u009c\u0003\u009c\u0799\b\u009c\u0001\u009d\u0001\u009d"+ - "\u0001\u009d\u0001\u009e\u0001\u009e\u0001\u009f\u0001\u009f\u0001\u00a0"+ - "\u0003\u00a0\u07a3\b\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0003\u00a0"+ - "\u07a8\b\u00a0\u0001\u00a0\u0003\u00a0\u07ab\b\u00a0\u0001\u00a0\u0001"+ - "\u00a0\u0001\u00a0\u0003\u00a0\u07b0\b\u00a0\u0003\u00a0\u07b2\b\u00a0"+ - "\u0001\u00a0\u0001\u00a0\u0003\u00a0\u07b6\b\u00a0\u0001\u00a0\u0001\u00a0"+ - "\u0001\u00a0\u0003\u00a0\u07bb\b\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0"+ - "\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0003\u00a0\u07c3\b\u00a0\u0001\u00a0"+ - "\u0003\u00a0\u07c6\b\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0"+ - "\u0001\u00a0\u0001\u00a0\u0003\u00a0\u07ce\b\u00a0\u0003\u00a0\u07d0\b"+ - "\u00a0\u0001\u00a0\u0001\u00a0\u0003\u00a0\u07d4\b\u00a0\u0001\u00a0\u0001"+ - "\u00a0\u0001\u00a0\u0003\u00a0\u07d9\b\u00a0\u0001\u00a0\u0001\u00a0\u0001"+ - "\u00a0\u0001\u00a0\u0003\u00a0\u07df\b\u00a0\u0001\u00a0\u0001\u00a0\u0001"+ - "\u00a0\u0001\u00a0\u0003\u00a0\u07e5\b\u00a0\u0001\u00a0\u0001\u00a0\u0001"+ - "\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001"+ - "\u00a0\u0003\u00a0\u07f0\b\u00a0\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001"+ - "\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001"+ - "\u00a1\u0001\u00a1\u0001\u00a1\u0004\u00a1\u07fe\b\u00a1\u000b\u00a1\f"+ - "\u00a1\u07ff\u0001\u00a1\u0001\u00a1\u0005\u00a1\u0804\b\u00a1\n\u00a1"+ - "\f\u00a1\u0807\t\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a2\u0001\u00a2"+ - "\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0004\u00a2\u0810\b\u00a2\u000b\u00a2"+ - "\f\u00a2\u0811\u0001\u00a3\u0001\u00a3\u0001\u00a4\u0001\u00a4\u0003\u00a4"+ - "\u0818\b\u00a4\u0001\u00a5\u0001\u00a5\u0001\u00a6\u0001\u00a6\u0001\u00a7"+ - "\u0001\u00a7\u0001\u00a8\u0001\u00a8\u0001\u00a9\u0001\u00a9\u0003\u00a9"+ - "\u0824\b\u00a9\u0001\u00aa\u0001\u00aa\u0003\u00aa\u0828\b\u00aa\u0001"+ - "\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001"+ - "\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001"+ - "\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001"+ - "\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001"+ - "\u00ab\u0001\u00ab\u0001\u00ab\u0003\u00ab\u0845\b\u00ab\u0002\u0762\u076d"+ - "\u0000\u00ac\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b"+ - "\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b"+ - "\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016"+ - "-\u0017/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\""+ - "E#G$I%K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f@\u0081"+ - "A\u0083B\u0085C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095"+ - "K\u0097L\u0099M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9"+ - "U\u00abV\u00adW\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb^\u00bd"+ - "_\u00bf`\u00c1a\u00c3b\u00c5c\u00c7d\u00c9e\u00cbf\u00cdg\u00cfh\u00d1"+ - "i\u00d3j\u00d5k\u00d7l\u00d9m\u00dbn\u00ddo\u00dfp\u00e1q\u00e3r\u00e5"+ - "s\u00e7t\u00e9u\u00ebv\u00edw\u00efx\u00f1y\u00f3z\u00f5{\u00f7|\u00f9"+ - "}\u00fb~\u00fd\u007f\u00ff\u0080\u0101\u0081\u0103\u0082\u0105\u0083\u0107"+ - "\u0084\u0109\u0085\u010b\u0086\u010d\u0087\u010f\u0088\u0111\u0089\u0113"+ - "\u008a\u0115\u008b\u0117\u008c\u0119\u008d\u011b\u008e\u011d\u008f\u011f"+ - "\u0090\u0121\u0091\u0123\u0092\u0125\u0093\u0127\u0094\u0129\u0095\u012b"+ - "\u0000\u012d\u0000\u012f\u0000\u0131\u0000\u0133\u0000\u0135\u0000\u0137"+ - "\u0000\u0139\u0000\u013b\u0000\u013d\u0000\u013f\u0000\u0141\u0000\u0143"+ - "\u0000\u0145\u0000\u0147\u0000\u0149\u0000\u014b\u0000\u014d\u0000\u014f"+ - "\u0000\u0151\u0000\u0153\u0000\u0155\u0000\u0157\u0000\u0001\u0000\u001a"+ - "\u0002\u0000ssuu\u0003\u0000\t\n\r\r \u000b\u0000!!#\'*+-/::<@\\\\^^"+ - "``||~~\u0002\u0000++--\u0001\u000009\u0003\u000009AFaf\u0002\u0000AZa"+ - "z\u0002\u0000EEee\u0002\u0000PPpp\u0003\u0000\t\n\'\'\\\\\u0006\u0000"+ - "\"\"\'\'\\\\nnrrtt\u0005\u0000\u0000\u001f\"\"\'\'\\\\\u007f\u00ff\u0001"+ - "\u0000\u0000\u007f\u0002\u0000\u0000\t\u000b\u007f\u0001\u0000\u0080\u00bf"+ - "\u0001\u0000\u00c2\u00df\u0001\u0000\u00e0\u00e0\u0001\u0000\u00a0\u00bf"+ - "\u0001\u0000\u00ed\u00ed\u0001\u0000\u0080\u009f\u0002\u0000\u00e1\u00ec"+ - "\u00ee\u00ef\u0001\u0000\u00f0\u00f0\u0001\u0000\u0090\u00bf\u0001\u0000"+ - "\u00f4\u00f4\u0001\u0000\u0080\u008f\u0001\u0000\u00f1\u00f3\u089c\u0000"+ - "\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000"+ - "\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000"+ - "\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r"+ - "\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011"+ - "\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015"+ - "\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019"+ - "\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000\u0000\u001d"+ - "\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000\u0000!\u0001"+ - "\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%\u0001\u0000\u0000"+ - "\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001\u0000\u0000\u0000"+ - "\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000\u0000\u0000/"+ - "\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u00003\u0001\u0000"+ - "\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001\u0000\u0000\u0000"+ - "\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000\u0000\u0000="+ - "\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000A\u0001\u0000"+ - "\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001\u0000\u0000\u0000"+ - "\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000\u0000\u0000K"+ - "\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000O\u0001\u0000"+ - "\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001\u0000\u0000\u0000"+ - "\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000\u0000\u0000Y"+ - "\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000]\u0001\u0000"+ - "\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001\u0000\u0000\u0000"+ - "\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000\u0000\u0000g"+ - "\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000k\u0001\u0000"+ - "\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001\u0000\u0000\u0000"+ - "\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000\u0000\u0000u"+ - "\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000y\u0001\u0000"+ - "\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001\u0000\u0000\u0000"+ - "\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001\u0000\u0000\u0000"+ - "\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001\u0000\u0000\u0000"+ - "\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001\u0000\u0000\u0000"+ - "\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001\u0000\u0000\u0000"+ - "\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001\u0000\u0000\u0000"+ - "\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001\u0000\u0000\u0000"+ - "\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001\u0000\u0000\u0000"+ - "\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001\u0000\u0000\u0000"+ - "\u0000\u009f\u0001\u0000\u0000\u0000\u0000\u00a1\u0001\u0000\u0000\u0000"+ - "\u0000\u00a3\u0001\u0000\u0000\u0000\u0000\u00a5\u0001\u0000\u0000\u0000"+ - "\u0000\u00a7\u0001\u0000\u0000\u0000\u0000\u00a9\u0001\u0000\u0000\u0000"+ - "\u0000\u00ab\u0001\u0000\u0000\u0000\u0000\u00ad\u0001\u0000\u0000\u0000"+ - "\u0000\u00af\u0001\u0000\u0000\u0000\u0000\u00b1\u0001\u0000\u0000\u0000"+ - "\u0000\u00b3\u0001\u0000\u0000\u0000\u0000\u00b5\u0001\u0000\u0000\u0000"+ - "\u0000\u00b7\u0001\u0000\u0000\u0000\u0000\u00b9\u0001\u0000\u0000\u0000"+ - "\u0000\u00bb\u0001\u0000\u0000\u0000\u0000\u00bd\u0001\u0000\u0000\u0000"+ - "\u0000\u00bf\u0001\u0000\u0000\u0000\u0000\u00c1\u0001\u0000\u0000\u0000"+ - "\u0000\u00c3\u0001\u0000\u0000\u0000\u0000\u00c5\u0001\u0000\u0000\u0000"+ - "\u0000\u00c7\u0001\u0000\u0000\u0000\u0000\u00c9\u0001\u0000\u0000\u0000"+ - "\u0000\u00cb\u0001\u0000\u0000\u0000\u0000\u00cd\u0001\u0000\u0000\u0000"+ - "\u0000\u00cf\u0001\u0000\u0000\u0000\u0000\u00d1\u0001\u0000\u0000\u0000"+ - "\u0000\u00d3\u0001\u0000\u0000\u0000\u0000\u00d5\u0001\u0000\u0000\u0000"+ - "\u0000\u00d7\u0001\u0000\u0000\u0000\u0000\u00d9\u0001\u0000\u0000\u0000"+ - "\u0000\u00db\u0001\u0000\u0000\u0000\u0000\u00dd\u0001\u0000\u0000\u0000"+ - "\u0000\u00df\u0001\u0000\u0000\u0000\u0000\u00e1\u0001\u0000\u0000\u0000"+ - "\u0000\u00e3\u0001\u0000\u0000\u0000\u0000\u00e5\u0001\u0000\u0000\u0000"+ - "\u0000\u00e7\u0001\u0000\u0000\u0000\u0000\u00e9\u0001\u0000\u0000\u0000"+ - "\u0000\u00eb\u0001\u0000\u0000\u0000\u0000\u00ed\u0001\u0000\u0000\u0000"+ - "\u0000\u00ef\u0001\u0000\u0000\u0000\u0000\u00f1\u0001\u0000\u0000\u0000"+ - "\u0000\u00f3\u0001\u0000\u0000\u0000\u0000\u00f5\u0001\u0000\u0000\u0000"+ - "\u0000\u00f7\u0001\u0000\u0000\u0000\u0000\u00f9\u0001\u0000\u0000\u0000"+ - "\u0000\u00fb\u0001\u0000\u0000\u0000\u0000\u00fd\u0001\u0000\u0000\u0000"+ - "\u0000\u00ff\u0001\u0000\u0000\u0000\u0000\u0101\u0001\u0000\u0000\u0000"+ - "\u0000\u0103\u0001\u0000\u0000\u0000\u0000\u0105\u0001\u0000\u0000\u0000"+ - "\u0000\u0107\u0001\u0000\u0000\u0000\u0000\u0109\u0001\u0000\u0000\u0000"+ - "\u0000\u010b\u0001\u0000\u0000\u0000\u0000\u010d\u0001\u0000\u0000\u0000"+ - "\u0000\u010f\u0001\u0000\u0000\u0000\u0000\u0111\u0001\u0000\u0000\u0000"+ - "\u0000\u0113\u0001\u0000\u0000\u0000\u0000\u0115\u0001\u0000\u0000\u0000"+ - "\u0000\u0117\u0001\u0000\u0000\u0000\u0000\u0119\u0001\u0000\u0000\u0000"+ - "\u0000\u011b\u0001\u0000\u0000\u0000\u0000\u011d\u0001\u0000\u0000\u0000"+ - "\u0000\u011f\u0001\u0000\u0000\u0000\u0000\u0121\u0001\u0000\u0000\u0000"+ - "\u0000\u0123\u0001\u0000\u0000\u0000\u0000\u0125\u0001\u0000\u0000\u0000"+ - "\u0000\u0127\u0001\u0000\u0000\u0000\u0000\u0129\u0001\u0000\u0000\u0000"+ - "\u0001\u0159\u0001\u0000\u0000\u0000\u0003\u015b\u0001\u0000\u0000\u0000"+ - "\u0005\u015d\u0001\u0000\u0000\u0000\u0007\u015f\u0001\u0000\u0000\u0000"+ - "\t\u0161\u0001\u0000\u0000\u0000\u000b\u0163\u0001\u0000\u0000\u0000\r"+ - "\u0165\u0001\u0000\u0000\u0000\u000f\u0167\u0001\u0000\u0000\u0000\u0011"+ - "\u016f\u0001\u0000\u0000\u0000\u0013\u017a\u0001\u0000\u0000\u0000\u0015"+ - "\u0182\u0001\u0000\u0000\u0000\u0017\u018c\u0001\u0000\u0000\u0000\u0019"+ - "\u0190\u0001\u0000\u0000\u0000\u001b\u0194\u0001\u0000\u0000\u0000\u001d"+ - "\u019f\u0001\u0000\u0000\u0000\u001f\u01a5\u0001\u0000\u0000\u0000!\u01aa"+ - "\u0001\u0000\u0000\u0000#\u01b6\u0001\u0000\u0000\u0000%\u01bb\u0001\u0000"+ - "\u0000\u0000\'\u01c1\u0001\u0000\u0000\u0000)\u01c6\u0001\u0000\u0000"+ - "\u0000+\u01ca\u0001\u0000\u0000\u0000-\u01cd\u0001\u0000\u0000\u0000/"+ - "\u01d3\u0001\u0000\u0000\u00001\u01dc\u0001\u0000\u0000\u00003\u01e3\u0001"+ - "\u0000\u0000\u00005\u01e6\u0001\u0000\u0000\u00007\u01eb\u0001\u0000\u0000"+ - "\u00009\u01f0\u0001\u0000\u0000\u0000;\u01f8\u0001\u0000\u0000\u0000="+ - "\u01fd\u0001\u0000\u0000\u0000?\u020b\u0001\u0000\u0000\u0000A\u0217\u0001"+ - "\u0000\u0000\u0000C\u022c\u0001\u0000\u0000\u0000E\u0236\u0001\u0000\u0000"+ - "\u0000G\u0240\u0001\u0000\u0000\u0000I\u024a\u0001\u0000\u0000\u0000K"+ - "\u0255\u0001\u0000\u0000\u0000M\u0260\u0001\u0000\u0000\u0000O\u026c\u0001"+ - "\u0000\u0000\u0000Q\u0276\u0001\u0000\u0000\u0000S\u0278\u0001\u0000\u0000"+ - "\u0000U\u0280\u0001\u0000\u0000\u0000W\u0287\u0001\u0000\u0000\u0000Y"+ - "\u0290\u0001\u0000\u0000\u0000[\u0292\u0001\u0000\u0000\u0000]\u0296\u0001"+ - "\u0000\u0000\u0000_\u029a\u0001\u0000\u0000\u0000a\u029e\u0001\u0000\u0000"+ - "\u0000c\u02a4\u0001\u0000\u0000\u0000e\u02a8\u0001\u0000\u0000\u0000g"+ - "\u02aa\u0001\u0000\u0000\u0000i\u02af\u0001\u0000\u0000\u0000k\u02b3\u0001"+ - "\u0000\u0000\u0000m\u02b7\u0001\u0000\u0000\u0000o\u02bb\u0001\u0000\u0000"+ - "\u0000q\u02c1\u0001\u0000\u0000\u0000s\u02c7\u0001\u0000\u0000\u0000u"+ - "\u02cb\u0001\u0000\u0000\u0000w\u02d1\u0001\u0000\u0000\u0000y\u02d7\u0001"+ - "\u0000\u0000\u0000{\u02db\u0001\u0000\u0000\u0000}\u02e1\u0001\u0000\u0000"+ - "\u0000\u007f\u02e7\u0001\u0000\u0000\u0000\u0081\u02eb\u0001\u0000\u0000"+ - "\u0000\u0083\u02f1\u0001\u0000\u0000\u0000\u0085\u02f7\u0001\u0000\u0000"+ - "\u0000\u0087\u02fc\u0001\u0000\u0000\u0000\u0089\u0301\u0001\u0000\u0000"+ - "\u0000\u008b\u0309\u0001\u0000\u0000\u0000\u008d\u030e\u0001\u0000\u0000"+ - "\u0000\u008f\u0313\u0001\u0000\u0000\u0000\u0091\u0319\u0001\u0000\u0000"+ - "\u0000\u0093\u031f\u0001\u0000\u0000\u0000\u0095\u0326\u0001\u0000\u0000"+ - "\u0000\u0097\u032d\u0001\u0000\u0000\u0000\u0099\u0336\u0001\u0000\u0000"+ - "\u0000\u009b\u033b\u0001\u0000\u0000\u0000\u009d\u0340\u0001\u0000\u0000"+ - "\u0000\u009f\u0345\u0001\u0000\u0000\u0000\u00a1\u034a\u0001\u0000\u0000"+ - "\u0000\u00a3\u0351\u0001\u0000\u0000\u0000\u00a5\u0358\u0001\u0000\u0000"+ - "\u0000\u00a7\u035f\u0001\u0000\u0000\u0000\u00a9\u0366\u0001\u0000\u0000"+ - "\u0000\u00ab\u036b\u0001\u0000\u0000\u0000\u00ad\u036f\u0001\u0000\u0000"+ - "\u0000\u00af\u0374\u0001\u0000\u0000\u0000\u00b1\u0379\u0001\u0000\u0000"+ - "\u0000\u00b3\u0380\u0001\u0000\u0000\u0000\u00b5\u0387\u0001\u0000\u0000"+ - "\u0000\u00b7\u038d\u0001\u0000\u0000\u0000\u00b9\u0393\u0001\u0000\u0000"+ - "\u0000\u00bb\u0398\u0001\u0000\u0000\u0000\u00bd\u039d\u0001\u0000\u0000"+ - "\u0000\u00bf\u03a7\u0001\u0000\u0000\u0000\u00c1\u03ae\u0001\u0000\u0000"+ - "\u0000\u00c3\u03b6\u0001\u0000\u0000\u0000\u00c5\u03c2\u0001\u0000\u0000"+ - "\u0000\u00c7\u03cc\u0001\u0000\u0000\u0000\u00c9\u03d5\u0001\u0000\u0000"+ - "\u0000\u00cb\u03de\u0001\u0000\u0000\u0000\u00cd\u03e8\u0001\u0000\u0000"+ - "\u0000\u00cf\u03f6\u0001\u0000\u0000\u0000\u00d1\u0402\u0001\u0000\u0000"+ - "\u0000\u00d3\u040e\u0001\u0000\u0000\u0000\u00d5\u041a\u0001\u0000\u0000"+ - "\u0000\u00d7\u0426\u0001\u0000\u0000\u0000\u00d9\u0432\u0001\u0000\u0000"+ - "\u0000\u00db\u0495\u0001\u0000\u0000\u0000\u00dd\u04e0\u0001\u0000\u0000"+ - "\u0000\u00df\u0578\u0001\u0000\u0000\u0000\u00e1\u061c\u0001\u0000\u0000"+ - "\u0000\u00e3\u061e\u0001\u0000\u0000\u0000\u00e5\u0623\u0001\u0000\u0000"+ - "\u0000\u00e7\u0628\u0001\u0000\u0000\u0000\u00e9\u062f\u0001\u0000\u0000"+ - "\u0000\u00eb\u0635\u0001\u0000\u0000\u0000\u00ed\u063b\u0001\u0000\u0000"+ - "\u0000\u00ef\u0642\u0001\u0000\u0000\u0000\u00f1\u0648\u0001\u0000\u0000"+ - "\u0000\u00f3\u064f\u0001\u0000\u0000\u0000\u00f5\u0655\u0001\u0000\u0000"+ - "\u0000\u00f7\u065c\u0001\u0000\u0000\u0000\u00f9\u0661\u0001\u0000\u0000"+ - "\u0000\u00fb\u0666\u0001\u0000\u0000\u0000\u00fd\u066d\u0001\u0000\u0000"+ - "\u0000\u00ff\u0674\u0001\u0000\u0000\u0000\u0101\u067b\u0001\u0000\u0000"+ - "\u0000\u0103\u0682\u0001\u0000\u0000\u0000\u0105\u0689\u0001\u0000\u0000"+ - "\u0000\u0107\u068f\u0001\u0000\u0000\u0000\u0109\u0696\u0001\u0000\u0000"+ - "\u0000\u010b\u069f\u0001\u0000\u0000\u0000\u010d\u06a6\u0001\u0000\u0000"+ - "\u0000\u010f\u06aa\u0001\u0000\u0000\u0000\u0111\u06bb\u0001\u0000\u0000"+ - "\u0000\u0113\u06ca\u0001\u0000\u0000\u0000\u0115\u06dc\u0001\u0000\u0000"+ - "\u0000\u0117\u06ea\u0001\u0000\u0000\u0000\u0119\u0706\u0001\u0000\u0000"+ - "\u0000\u011b\u0723\u0001\u0000\u0000\u0000\u011d\u072f\u0001\u0000\u0000"+ - "\u0000\u011f\u0741\u0001\u0000\u0000\u0000\u0121\u0747\u0001\u0000\u0000"+ - "\u0000\u0123\u074e\u0001\u0000\u0000\u0000\u0125\u0750\u0001\u0000\u0000"+ - "\u0000\u0127\u0756\u0001\u0000\u0000\u0000\u0129\u0771\u0001\u0000\u0000"+ - "\u0000\u012b\u0775\u0001\u0000\u0000\u0000\u012d\u0777\u0001\u0000\u0000"+ - "\u0000\u012f\u0781\u0001\u0000\u0000\u0000\u0131\u078b\u0001\u0000\u0000"+ - "\u0000\u0133\u078d\u0001\u0000\u0000\u0000\u0135\u078f\u0001\u0000\u0000"+ - "\u0000\u0137\u0791\u0001\u0000\u0000\u0000\u0139\u0798\u0001\u0000\u0000"+ - "\u0000\u013b\u079a\u0001\u0000\u0000\u0000\u013d\u079d\u0001\u0000\u0000"+ - "\u0000\u013f\u079f\u0001\u0000\u0000\u0000\u0141\u07ef\u0001\u0000\u0000"+ - "\u0000\u0143\u07f1\u0001\u0000\u0000\u0000\u0145\u080a\u0001\u0000\u0000"+ - "\u0000\u0147\u0813\u0001\u0000\u0000\u0000\u0149\u0817\u0001\u0000\u0000"+ - "\u0000\u014b\u0819\u0001\u0000\u0000\u0000\u014d\u081b\u0001\u0000\u0000"+ - "\u0000\u014f\u081d\u0001\u0000\u0000\u0000\u0151\u081f\u0001\u0000\u0000"+ - "\u0000\u0153\u0823\u0001\u0000\u0000\u0000\u0155\u0827\u0001\u0000\u0000"+ - "\u0000\u0157\u0844\u0001\u0000\u0000\u0000\u0159\u015a\u0005(\u0000\u0000"+ - "\u015a\u0002\u0001\u0000\u0000\u0000\u015b\u015c\u0005)\u0000\u0000\u015c"+ - "\u0004\u0001\u0000\u0000\u0000\u015d\u015e\u0003\u0139\u009c\u0000\u015e"+ - "\u0006\u0001\u0000\u0000\u0000\u015f\u0160\u0003\u013b\u009d\u0000\u0160"+ - "\b\u0001\u0000\u0000\u0000\u0161\u0162\u0003\u0141\u00a0\u0000\u0162\n"+ - "\u0001\u0000\u0000\u0000\u0163\u0164\u0003\u0143\u00a1\u0000\u0164\f\u0001"+ - "\u0000\u0000\u0000\u0165\u0166\u0003\u0149\u00a4\u0000\u0166\u000e\u0001"+ - "\u0000\u0000\u0000\u0167\u0168\u0003\u0149\u00a4\u0000\u0168\u0169\u0005"+ - ".\u0000\u0000\u0169\u016a\u0005c\u0000\u0000\u016a\u016b\u0005o\u0000"+ - "\u0000\u016b\u016c\u0005n\u0000\u0000\u016c\u016d\u0005s\u0000\u0000\u016d"+ - "\u016e\u0005t\u0000\u0000\u016e\u0010\u0001\u0000\u0000\u0000\u016f\u0170"+ - "\u0003\u0149\u00a4\u0000\u0170\u0171\u0005.\u0000\u0000\u0171\u0172\u0005"+ - "s\u0000\u0000\u0172\u0173\u0005y\u0000\u0000\u0173\u0174\u0005m\u0000"+ - "\u0000\u0174\u0175\u0005b\u0000\u0000\u0175\u0176\u0005o\u0000\u0000\u0176"+ - "\u0177\u0005l\u0000\u0000\u0177\u0178\u0005i\u0000\u0000\u0178\u0179\u0005"+ - "c\u0000\u0000\u0179\u0012\u0001\u0000\u0000\u0000\u017a\u017b\u0005f\u0000"+ - "\u0000\u017b\u017c\u0005u\u0000\u0000\u017c\u017d\u0005n\u0000\u0000\u017d"+ - "\u017e\u0005c\u0000\u0000\u017e\u017f\u0005r\u0000\u0000\u017f\u0180\u0005"+ - "e\u0000\u0000\u0180\u0181\u0005f\u0000\u0000\u0181\u0014\u0001\u0000\u0000"+ - "\u0000\u0182\u0183\u0005e\u0000\u0000\u0183\u0184\u0005x\u0000\u0000\u0184"+ - "\u0185\u0005t\u0000\u0000\u0185\u0186\u0005e\u0000\u0000\u0186\u0187\u0005"+ - "r\u0000\u0000\u0187\u0188\u0005n\u0000\u0000\u0188\u0189\u0005r\u0000"+ - "\u0000\u0189\u018a\u0005e\u0000\u0000\u018a\u018b\u0005f\u0000\u0000\u018b"+ - "\u0016\u0001\u0000\u0000\u0000\u018c\u018d\u0005m\u0000\u0000\u018d\u018e"+ - "\u0005u\u0000\u0000\u018e\u018f\u0005t\u0000\u0000\u018f\u0018\u0001\u0000"+ - "\u0000\u0000\u0190\u0191\u0005n\u0000\u0000\u0191\u0192\u0005o\u0000\u0000"+ - "\u0192\u0193\u0005p\u0000\u0000\u0193\u001a\u0001\u0000\u0000\u0000\u0194"+ - "\u0195\u0005s\u0000\u0000\u0195\u0196\u0005y\u0000\u0000\u0196\u0197\u0005"+ - "m\u0000\u0000\u0197\u0198\u0005_\u0000\u0000\u0198\u0199\u0005a\u0000"+ - "\u0000\u0199\u019a\u0005s\u0000\u0000\u019a\u019b\u0005s\u0000\u0000\u019b"+ - "\u019c\u0005e\u0000\u0000\u019c\u019d\u0005r\u0000\u0000\u019d\u019e\u0005"+ - "t\u0000\u0000\u019e\u001c\u0001\u0000\u0000\u0000\u019f\u01a0\u0005a\u0000"+ - "\u0000\u01a0\u01a1\u0005l\u0000\u0000\u01a1\u01a2\u0005l\u0000\u0000\u01a2"+ - "\u01a3\u0005o\u0000\u0000\u01a3\u01a4\u0005c\u0000\u0000\u01a4\u001e\u0001"+ - "\u0000\u0000\u0000\u01a5\u01a6\u0005f\u0000\u0000\u01a6\u01a7\u0005r\u0000"+ - "\u0000\u01a7\u01a8\u0005e\u0000\u0000\u01a8\u01a9\u0005e\u0000\u0000\u01a9"+ - " \u0001\u0000\u0000\u0000\u01aa\u01ab\u0005u\u0000\u0000\u01ab\u01ac\u0005"+ - "n\u0000\u0000\u01ac\u01ad\u0005r\u0000\u0000\u01ad\u01ae\u0005e\u0000"+ - "\u0000\u01ae\u01af\u0005a\u0000\u0000\u01af\u01b0\u0005c\u0000\u0000\u01b0"+ - "\u01b1\u0005h\u0000\u0000\u01b1\u01b2\u0005a\u0000\u0000\u01b2\u01b3\u0005"+ - "b\u0000\u0000\u01b3\u01b4\u0005l\u0000\u0000\u01b4\u01b5\u0005e\u0000"+ - "\u0000\u01b5\"\u0001\u0000\u0000\u0000\u01b6\u01b7\u0005d\u0000\u0000"+ - "\u01b7\u01b8\u0005r\u0000\u0000\u01b8\u01b9\u0005o\u0000\u0000\u01b9\u01ba"+ - "\u0005p\u0000\u0000\u01ba$\u0001\u0000\u0000\u0000\u01bb\u01bc\u0005b"+ - "\u0000\u0000\u01bc\u01bd\u0005l\u0000\u0000\u01bd\u01be\u0005o\u0000\u0000"+ - "\u01be\u01bf\u0005c\u0000\u0000\u01bf\u01c0\u0005k\u0000\u0000\u01c0&"+ - "\u0001\u0000\u0000\u0000\u01c1\u01c2\u0005l\u0000\u0000\u01c2\u01c3\u0005"+ - "o\u0000\u0000\u01c3\u01c4\u0005o\u0000\u0000\u01c4\u01c5\u0005p\u0000"+ - "\u0000\u01c5(\u0001\u0000\u0000\u0000\u01c6\u01c7\u0005e\u0000\u0000\u01c7"+ - "\u01c8\u0005n\u0000\u0000\u01c8\u01c9\u0005d\u0000\u0000\u01c9*\u0001"+ - "\u0000\u0000\u0000\u01ca\u01cb\u0005b\u0000\u0000\u01cb\u01cc\u0005r\u0000"+ - "\u0000\u01cc,\u0001\u0000\u0000\u0000\u01cd\u01ce\u0005b\u0000\u0000\u01ce"+ - "\u01cf\u0005r\u0000\u0000\u01cf\u01d0\u0005_\u0000\u0000\u01d0\u01d1\u0005"+ - "i\u0000\u0000\u01d1\u01d2\u0005f\u0000\u0000\u01d2.\u0001\u0000\u0000"+ - "\u0000\u01d3\u01d4\u0005b\u0000\u0000\u01d4\u01d5\u0005r\u0000\u0000\u01d5"+ - "\u01d6\u0005_\u0000\u0000\u01d6\u01d7\u0005t\u0000\u0000\u01d7\u01d8\u0005"+ - "a\u0000\u0000\u01d8\u01d9\u0005b\u0000\u0000\u01d9\u01da\u0005l\u0000"+ - "\u0000\u01da\u01db\u0005e\u0000\u0000\u01db0\u0001\u0000\u0000\u0000\u01dc"+ - "\u01dd\u0005r\u0000\u0000\u01dd\u01de\u0005e\u0000\u0000\u01de\u01df\u0005"+ - "t\u0000\u0000\u01df\u01e0\u0005u\u0000\u0000\u01e0\u01e1\u0005r\u0000"+ - "\u0000\u01e1\u01e2\u0005n\u0000\u0000\u01e22\u0001\u0000\u0000\u0000\u01e3"+ - "\u01e4\u0005i\u0000\u0000\u01e4\u01e5\u0005f\u0000\u0000\u01e54\u0001"+ - "\u0000\u0000\u0000\u01e6\u01e7\u0005t\u0000\u0000\u01e7\u01e8\u0005h\u0000"+ - "\u0000\u01e8\u01e9\u0005e\u0000\u0000\u01e9\u01ea\u0005n\u0000\u0000\u01ea"+ - "6\u0001\u0000\u0000\u0000\u01eb\u01ec\u0005e\u0000\u0000\u01ec\u01ed\u0005"+ - "l\u0000\u0000\u01ed\u01ee\u0005s\u0000\u0000\u01ee\u01ef\u0005e\u0000"+ - "\u0000\u01ef8\u0001\u0000\u0000\u0000\u01f0\u01f1\u0005.\u0000\u0000\u01f1"+ - "\u01f2\u0005s\u0000\u0000\u01f2\u01f3\u0005e\u0000\u0000\u01f3\u01f4\u0005"+ - "l\u0000\u0000\u01f4\u01f5\u0005e\u0000\u0000\u01f5\u01f6\u0005c\u0000"+ - "\u0000\u01f6\u01f7\u0005t\u0000\u0000\u01f7:\u0001\u0000\u0000\u0000\u01f8"+ - "\u01f9\u0005c\u0000\u0000\u01f9\u01fa\u0005a\u0000\u0000\u01fa\u01fb\u0005"+ - "l\u0000\u0000\u01fb\u01fc\u0005l\u0000\u0000\u01fc<\u0001\u0000\u0000"+ - "\u0000\u01fd\u01fe\u0005c\u0000\u0000\u01fe\u01ff\u0005a\u0000\u0000\u01ff"+ - "\u0200\u0005l\u0000\u0000\u0200\u0201\u0005l\u0000\u0000\u0201\u0202\u0005"+ - "_\u0000\u0000\u0202\u0203\u0005i\u0000\u0000\u0203\u0204\u0005n\u0000"+ - "\u0000\u0204\u0205\u0005d\u0000\u0000\u0205\u0206\u0005i\u0000\u0000\u0206"+ - "\u0207\u0005r\u0000\u0000\u0207\u0208\u0005e\u0000\u0000\u0208\u0209\u0005"+ - "c\u0000\u0000\u0209\u020a\u0005t\u0000\u0000\u020a>\u0001\u0000\u0000"+ - "\u0000\u020b\u020c\u0005r\u0000\u0000\u020c\u020d\u0005e\u0000\u0000\u020d"+ - "\u020e\u0005t\u0000\u0000\u020e\u020f\u0005u\u0000\u0000\u020f\u0210\u0005"+ - "r\u0000\u0000\u0210\u0211\u0005n\u0000\u0000\u0211\u0212\u0005_\u0000"+ - "\u0000\u0212\u0213\u0005c\u0000\u0000\u0213\u0214\u0005a\u0000\u0000\u0214"+ - "\u0215\u0005l\u0000\u0000\u0215\u0216\u0005l\u0000\u0000\u0216@\u0001"+ - "\u0000\u0000\u0000\u0217\u0218\u0005r\u0000\u0000\u0218\u0219\u0005e\u0000"+ - "\u0000\u0219\u021a\u0005t\u0000\u0000\u021a\u021b\u0005u\u0000\u0000\u021b"+ - "\u021c\u0005r\u0000\u0000\u021c\u021d\u0005n\u0000\u0000\u021d\u021e\u0005"+ - "_\u0000\u0000\u021e\u021f\u0005c\u0000\u0000\u021f\u0220\u0005a\u0000"+ - "\u0000\u0220\u0221\u0005l\u0000\u0000\u0221\u0222\u0005l\u0000\u0000\u0222"+ - "\u0223\u0005_\u0000\u0000\u0223\u0224\u0005i\u0000\u0000\u0224\u0225\u0005"+ - "n\u0000\u0000\u0225\u0226\u0005d\u0000\u0000\u0226\u0227\u0005i\u0000"+ - "\u0000\u0227\u0228\u0005r\u0000\u0000\u0228\u0229\u0005e\u0000\u0000\u0229"+ - "\u022a\u0005c\u0000\u0000\u022a\u022b\u0005t\u0000\u0000\u022bB\u0001"+ - "\u0000\u0000\u0000\u022c\u022d\u0005l\u0000\u0000\u022d\u022e\u0005o\u0000"+ - "\u0000\u022e\u022f\u0005c\u0000\u0000\u022f\u0230\u0005a\u0000\u0000\u0230"+ - "\u0231\u0005l\u0000\u0000\u0231\u0232\u0005.\u0000\u0000\u0232\u0233\u0005"+ - "g\u0000\u0000\u0233\u0234\u0005e\u0000\u0000\u0234\u0235\u0005t\u0000"+ - "\u0000\u0235D\u0001\u0000\u0000\u0000\u0236\u0237\u0005l\u0000\u0000\u0237"+ - "\u0238\u0005o\u0000\u0000\u0238\u0239\u0005c\u0000\u0000\u0239\u023a\u0005"+ - "a\u0000\u0000\u023a\u023b\u0005l\u0000\u0000\u023b\u023c\u0005.\u0000"+ - "\u0000\u023c\u023d\u0005s\u0000\u0000\u023d\u023e\u0005e\u0000\u0000\u023e"+ - "\u023f\u0005t\u0000\u0000\u023fF\u0001\u0000\u0000\u0000\u0240\u0241\u0005"+ - "l\u0000\u0000\u0241\u0242\u0005o\u0000\u0000\u0242\u0243\u0005c\u0000"+ - "\u0000\u0243\u0244\u0005a\u0000\u0000\u0244\u0245\u0005l\u0000\u0000\u0245"+ - "\u0246\u0005.\u0000\u0000\u0246\u0247\u0005t\u0000\u0000\u0247\u0248\u0005"+ - "e\u0000\u0000\u0248\u0249\u0005e\u0000\u0000\u0249H\u0001\u0000\u0000"+ - "\u0000\u024a\u024b\u0005g\u0000\u0000\u024b\u024c\u0005l\u0000\u0000\u024c"+ - "\u024d\u0005o\u0000\u0000\u024d\u024e\u0005b\u0000\u0000\u024e\u024f\u0005"+ - "a\u0000\u0000\u024f\u0250\u0005l\u0000\u0000\u0250\u0251\u0005.\u0000"+ - "\u0000\u0251\u0252\u0005g\u0000\u0000\u0252\u0253\u0005e\u0000\u0000\u0253"+ - "\u0254\u0005t\u0000\u0000\u0254J\u0001\u0000\u0000\u0000\u0255\u0256\u0005"+ - "g\u0000\u0000\u0256\u0257\u0005l\u0000\u0000\u0257\u0258\u0005o\u0000"+ - "\u0000\u0258\u0259\u0005b\u0000\u0000\u0259\u025a\u0005a\u0000\u0000\u025a"+ - "\u025b\u0005l\u0000\u0000\u025b\u025c\u0005.\u0000\u0000\u025c\u025d\u0005"+ - "s\u0000\u0000\u025d\u025e\u0005e\u0000\u0000\u025e\u025f\u0005t\u0000"+ - "\u0000\u025fL\u0001\u0000\u0000\u0000\u0260\u0261\u0005.\u0000\u0000\u0261"+ - "\u0262\u0005l\u0000\u0000\u0262\u0263\u0005o\u0000\u0000\u0263\u0264\u0005"+ - "a\u0000\u0000\u0264\u0265\u0005d\u0000\u0000\u0265\u026a\u0001\u0000\u0000"+ - "\u0000\u0266\u0267\u0003Y,\u0000\u0267\u0268\u0003Q(\u0000\u0268\u0269"+ - "\u0003W+\u0000\u0269\u026b\u0001\u0000\u0000\u0000\u026a\u0266\u0001\u0000"+ - "\u0000\u0000\u026a\u026b\u0001\u0000\u0000\u0000\u026bN\u0001\u0000\u0000"+ - "\u0000\u026c\u026d\u0005.\u0000\u0000\u026d\u026e\u0005s\u0000\u0000\u026e"+ - "\u026f\u0005t\u0000\u0000\u026f\u0270\u0005o\u0000\u0000\u0270\u0271\u0005"+ - "r\u0000\u0000\u0271\u0272\u0005e\u0000\u0000\u0272\u0274\u0001\u0000\u0000"+ - "\u0000\u0273\u0275\u0003Y,\u0000\u0274\u0273\u0001\u0000\u0000\u0000\u0274"+ - "\u0275\u0001\u0000\u0000\u0000\u0275P\u0001\u0000\u0000\u0000\u0276\u0277"+ - "\u0005_\u0000\u0000\u0277R\u0001\u0000\u0000\u0000\u0278\u0279\u0005o"+ - "\u0000\u0000\u0279\u027a\u0005f\u0000\u0000\u027a\u027b\u0005f\u0000\u0000"+ - "\u027b\u027c\u0005s\u0000\u0000\u027c\u027d\u0005e\u0000\u0000\u027d\u027e"+ - "\u0005t\u0000\u0000\u027e\u027f\u0005=\u0000\u0000\u027fT\u0001\u0000"+ - "\u0000\u0000\u0280\u0281\u0005a\u0000\u0000\u0281\u0282\u0005l\u0000\u0000"+ - "\u0282\u0283\u0005i\u0000\u0000\u0283\u0284\u0005g\u0000\u0000\u0284\u0285"+ - "\u0005n\u0000\u0000\u0285\u0286\u0005=\u0000\u0000\u0286V\u0001\u0000"+ - "\u0000\u0000\u0287\u0288\u0007\u0000\u0000\u0000\u0288X\u0001\u0000\u0000"+ - "\u0000\u0289\u0291\u00058\u0000\u0000\u028a\u028b\u00051\u0000\u0000\u028b"+ - "\u0291\u00056\u0000\u0000\u028c\u028d\u00053\u0000\u0000\u028d\u0291\u0005"+ - "2\u0000\u0000\u028e\u028f\u00056\u0000\u0000\u028f\u0291\u00054\u0000"+ - "\u0000\u0290\u0289\u0001\u0000\u0000\u0000\u0290\u028a\u0001\u0000\u0000"+ - "\u0000\u0290\u028c\u0001\u0000\u0000\u0000\u0290\u028e\u0001\u0000\u0000"+ - "\u0000\u0291Z\u0001\u0000\u0000\u0000\u0292\u0293\u0005i\u0000\u0000\u0293"+ - "\u0294\u00053\u0000\u0000\u0294\u0295\u00052\u0000\u0000\u0295\\\u0001"+ - "\u0000\u0000\u0000\u0296\u0297\u0005i\u0000\u0000\u0297\u0298\u00056\u0000"+ - "\u0000\u0298\u0299\u00054\u0000\u0000\u0299^\u0001\u0000\u0000\u0000\u029a"+ - "\u029b\u0005f\u0000\u0000\u029b\u029c\u00053\u0000\u0000\u029c\u029d\u0005"+ - "2\u0000\u0000\u029d`\u0001\u0000\u0000\u0000\u029e\u029f\u0005f\u0000"+ - "\u0000\u029f\u02a0\u00056\u0000\u0000\u02a0\u02a1\u00054\u0000\u0000\u02a1"+ - "b\u0001\u0000\u0000\u0000\u02a2\u02a5\u0003[-\u0000\u02a3\u02a5\u0003"+ - "].\u0000\u02a4\u02a2\u0001\u0000\u0000\u0000\u02a4\u02a3\u0001\u0000\u0000"+ - "\u0000\u02a5d\u0001\u0000\u0000\u0000\u02a6\u02a9\u0003_/\u0000\u02a7"+ - "\u02a9\u0003a0\u0000\u02a8\u02a6\u0001\u0000\u0000\u0000\u02a8\u02a7\u0001"+ - "\u0000\u0000\u0000\u02a9f\u0001\u0000\u0000\u0000\u02aa\u02ab\u0005.\u0000"+ - "\u0000\u02ab\u02ac\u0005e\u0000\u0000\u02ac\u02ad\u0005q\u0000\u0000\u02ad"+ - "\u02ae\u0005z\u0000\u0000\u02aeh\u0001\u0000\u0000\u0000\u02af\u02b0\u0005"+ - ".\u0000\u0000\u02b0\u02b1\u0005e\u0000\u0000\u02b1\u02b2\u0005q\u0000"+ - "\u0000\u02b2j\u0001\u0000\u0000\u0000\u02b3\u02b4\u0005.\u0000\u0000\u02b4"+ - "\u02b5\u0005n\u0000\u0000\u02b5\u02b6\u0005e\u0000\u0000\u02b6l\u0001"+ - "\u0000\u0000\u0000\u02b7\u02b8\u0005.\u0000\u0000\u02b8\u02b9\u0005l\u0000"+ - "\u0000\u02b9\u02ba\u0005t\u0000\u0000\u02ban\u0001\u0000\u0000\u0000\u02bb"+ - "\u02bc\u0005.\u0000\u0000\u02bc\u02bd\u0005l\u0000\u0000\u02bd\u02be\u0005"+ - "t\u0000\u0000\u02be\u02bf\u0005_\u0000\u0000\u02bf\u02c0\u0005s\u0000"+ - "\u0000\u02c0p\u0001\u0000\u0000\u0000\u02c1\u02c2\u0005.\u0000\u0000\u02c2"+ - "\u02c3\u0005l\u0000\u0000\u02c3\u02c4\u0005t\u0000\u0000\u02c4\u02c5\u0005"+ - "_\u0000\u0000\u02c5\u02c6\u0005u\u0000\u0000\u02c6r\u0001\u0000\u0000"+ - "\u0000\u02c7\u02c8\u0005.\u0000\u0000\u02c8\u02c9\u0005l\u0000\u0000\u02c9"+ - "\u02ca\u0005e\u0000\u0000\u02cat\u0001\u0000\u0000\u0000\u02cb\u02cc\u0005"+ - ".\u0000\u0000\u02cc\u02cd\u0005l\u0000\u0000\u02cd\u02ce\u0005e\u0000"+ - "\u0000\u02ce\u02cf\u0005_\u0000\u0000\u02cf\u02d0\u0005s\u0000\u0000\u02d0"+ - "v\u0001\u0000\u0000\u0000\u02d1\u02d2\u0005.\u0000\u0000\u02d2\u02d3\u0005"+ - "l\u0000\u0000\u02d3\u02d4\u0005e\u0000\u0000\u02d4\u02d5\u0005_\u0000"+ - "\u0000\u02d5\u02d6\u0005u\u0000\u0000\u02d6x\u0001\u0000\u0000\u0000\u02d7"+ - "\u02d8\u0005.\u0000\u0000\u02d8\u02d9\u0005g\u0000\u0000\u02d9\u02da\u0005"+ - "t\u0000\u0000\u02daz\u0001\u0000\u0000\u0000\u02db\u02dc\u0005.\u0000"+ - "\u0000\u02dc\u02dd\u0005g\u0000\u0000\u02dd\u02de\u0005t\u0000\u0000\u02de"+ - "\u02df\u0005_\u0000\u0000\u02df\u02e0\u0005s\u0000\u0000\u02e0|\u0001"+ - "\u0000\u0000\u0000\u02e1\u02e2\u0005.\u0000\u0000\u02e2\u02e3\u0005g\u0000"+ - "\u0000\u02e3\u02e4\u0005t\u0000\u0000\u02e4\u02e5\u0005_\u0000\u0000\u02e5"+ - "\u02e6\u0005u\u0000\u0000\u02e6~\u0001\u0000\u0000\u0000\u02e7\u02e8\u0005"+ - ".\u0000\u0000\u02e8\u02e9\u0005g\u0000\u0000\u02e9\u02ea\u0005e\u0000"+ - "\u0000\u02ea\u0080\u0001\u0000\u0000\u0000\u02eb\u02ec\u0005.\u0000\u0000"+ - "\u02ec\u02ed\u0005g\u0000\u0000\u02ed\u02ee\u0005e\u0000\u0000\u02ee\u02ef"+ - "\u0005_\u0000\u0000\u02ef\u02f0\u0005s\u0000\u0000\u02f0\u0082\u0001\u0000"+ - "\u0000\u0000\u02f1\u02f2\u0005.\u0000\u0000\u02f2\u02f3\u0005g\u0000\u0000"+ - "\u02f3\u02f4\u0005e\u0000\u0000\u02f4\u02f5\u0005_\u0000\u0000\u02f5\u02f6"+ - "\u0005u\u0000\u0000\u02f6\u0084\u0001\u0000\u0000\u0000\u02f7\u02f8\u0005"+ - ".\u0000\u0000\u02f8\u02f9\u0005c\u0000\u0000\u02f9\u02fa\u0005l\u0000"+ - "\u0000\u02fa\u02fb\u0005z\u0000\u0000\u02fb\u0086\u0001\u0000\u0000\u0000"+ - "\u02fc\u02fd\u0005.\u0000\u0000\u02fd\u02fe\u0005c\u0000\u0000\u02fe\u02ff"+ - "\u0005t\u0000\u0000\u02ff\u0300\u0005z\u0000\u0000\u0300\u0088\u0001\u0000"+ - "\u0000\u0000\u0301\u0302\u0005.\u0000\u0000\u0302\u0303\u0005p\u0000\u0000"+ - "\u0303\u0304\u0005o\u0000\u0000\u0304\u0305\u0005p\u0000\u0000\u0305\u0306"+ - "\u0005c\u0000\u0000\u0306\u0307\u0005n\u0000\u0000\u0307\u0308\u0005t"+ - "\u0000\u0000\u0308\u008a\u0001\u0000\u0000\u0000\u0309\u030a\u0005.\u0000"+ - "\u0000\u030a\u030b\u0005n\u0000\u0000\u030b\u030c\u0005e\u0000\u0000\u030c"+ - "\u030d\u0005g\u0000\u0000\u030d\u008c\u0001\u0000\u0000\u0000\u030e\u030f"+ - "\u0005.\u0000\u0000\u030f\u0310\u0005a\u0000\u0000\u0310\u0311\u0005b"+ - "\u0000\u0000\u0311\u0312\u0005s\u0000\u0000\u0312\u008e\u0001\u0000\u0000"+ - "\u0000\u0313\u0314\u0005.\u0000\u0000\u0314\u0315\u0005s\u0000\u0000\u0315"+ - "\u0316\u0005q\u0000\u0000\u0316\u0317\u0005r\u0000\u0000\u0317\u0318\u0005"+ - "t\u0000\u0000\u0318\u0090\u0001\u0000\u0000\u0000\u0319\u031a\u0005.\u0000"+ - "\u0000\u031a\u031b\u0005c\u0000\u0000\u031b\u031c\u0005e\u0000\u0000\u031c"+ - "\u031d\u0005i\u0000\u0000\u031d\u031e\u0005l\u0000\u0000\u031e\u0092\u0001"+ - "\u0000\u0000\u0000\u031f\u0320\u0005.\u0000\u0000\u0320\u0321\u0005f\u0000"+ - "\u0000\u0321\u0322\u0005l\u0000\u0000\u0322\u0323\u0005o\u0000\u0000\u0323"+ - "\u0324\u0005o\u0000\u0000\u0324\u0325\u0005r\u0000\u0000\u0325\u0094\u0001"+ - "\u0000\u0000\u0000\u0326\u0327\u0005.\u0000\u0000\u0327\u0328\u0005t\u0000"+ - "\u0000\u0328\u0329\u0005r\u0000\u0000\u0329\u032a\u0005u\u0000\u0000\u032a"+ - "\u032b\u0005n\u0000\u0000\u032b\u032c\u0005c\u0000\u0000\u032c\u0096\u0001"+ - "\u0000\u0000\u0000\u032d\u032e\u0005.\u0000\u0000\u032e\u032f\u0005n\u0000"+ - "\u0000\u032f\u0330\u0005e\u0000\u0000\u0330\u0331\u0005a\u0000\u0000\u0331"+ - "\u0332\u0005r\u0000\u0000\u0332\u0333\u0005e\u0000\u0000\u0333\u0334\u0005"+ - "s\u0000\u0000\u0334\u0335\u0005t\u0000\u0000\u0335\u0098\u0001\u0000\u0000"+ - "\u0000\u0336\u0337\u0005.\u0000\u0000\u0337\u0338\u0005a\u0000\u0000\u0338"+ - "\u0339\u0005d\u0000\u0000\u0339\u033a\u0005d\u0000\u0000\u033a\u009a\u0001"+ - "\u0000\u0000\u0000\u033b\u033c\u0005.\u0000\u0000\u033c\u033d\u0005s\u0000"+ - "\u0000\u033d\u033e\u0005u\u0000\u0000\u033e\u033f\u0005b\u0000\u0000\u033f"+ - "\u009c\u0001\u0000\u0000\u0000\u0340\u0341\u0005.\u0000\u0000\u0341\u0342"+ - "\u0005m\u0000\u0000\u0342\u0343\u0005u\u0000\u0000\u0343\u0344\u0005l"+ - "\u0000\u0000\u0344\u009e\u0001\u0000\u0000\u0000\u0345\u0346\u0005.\u0000"+ - "\u0000\u0346\u0347\u0005d\u0000\u0000\u0347\u0348\u0005i\u0000\u0000\u0348"+ - "\u0349\u0005v\u0000\u0000\u0349\u00a0\u0001\u0000\u0000\u0000\u034a\u034b"+ - "\u0005.\u0000\u0000\u034b\u034c\u0005d\u0000\u0000\u034c\u034d\u0005i"+ - "\u0000\u0000\u034d\u034e\u0005v\u0000\u0000\u034e\u034f\u0005_\u0000\u0000"+ - "\u034f\u0350\u0005s\u0000\u0000\u0350\u00a2\u0001\u0000\u0000\u0000\u0351"+ - "\u0352\u0005.\u0000\u0000\u0352\u0353\u0005d\u0000\u0000\u0353\u0354\u0005"+ - "i\u0000\u0000\u0354\u0355\u0005v\u0000\u0000\u0355\u0356\u0005_\u0000"+ - "\u0000\u0356\u0357\u0005u\u0000\u0000\u0357\u00a4\u0001\u0000\u0000\u0000"+ - "\u0358\u0359\u0005.\u0000\u0000\u0359\u035a\u0005r\u0000\u0000\u035a\u035b"+ - "\u0005e\u0000\u0000\u035b\u035c\u0005m\u0000\u0000\u035c\u035d\u0005_"+ - "\u0000\u0000\u035d\u035e\u0005s\u0000\u0000\u035e\u00a6\u0001\u0000\u0000"+ - "\u0000\u035f\u0360\u0005.\u0000\u0000\u0360\u0361\u0005r\u0000\u0000\u0361"+ - "\u0362\u0005e\u0000\u0000\u0362\u0363\u0005m\u0000\u0000\u0363\u0364\u0005"+ - "_\u0000\u0000\u0364\u0365\u0005u\u0000\u0000\u0365\u00a8\u0001\u0000\u0000"+ - "\u0000\u0366\u0367\u0005.\u0000\u0000\u0367\u0368\u0005a\u0000\u0000\u0368"+ - "\u0369\u0005n\u0000\u0000\u0369\u036a\u0005d\u0000\u0000\u036a\u00aa\u0001"+ - "\u0000\u0000\u0000\u036b\u036c\u0005.\u0000\u0000\u036c\u036d\u0005o\u0000"+ - "\u0000\u036d\u036e\u0005r\u0000\u0000\u036e\u00ac\u0001\u0000\u0000\u0000"+ - "\u036f\u0370\u0005.\u0000\u0000\u0370\u0371\u0005x\u0000\u0000\u0371\u0372"+ - "\u0005o\u0000\u0000\u0372\u0373\u0005r\u0000\u0000\u0373\u00ae\u0001\u0000"+ - "\u0000\u0000\u0374\u0375\u0005.\u0000\u0000\u0375\u0376\u0005s\u0000\u0000"+ - "\u0376\u0377\u0005h\u0000\u0000\u0377\u0378\u0005l\u0000\u0000\u0378\u00b0"+ - "\u0001\u0000\u0000\u0000\u0379\u037a\u0005.\u0000\u0000\u037a\u037b\u0005"+ - "s\u0000\u0000\u037b\u037c\u0005h\u0000\u0000\u037c\u037d\u0005r\u0000"+ - "\u0000\u037d\u037e\u0005_\u0000\u0000\u037e\u037f\u0005s\u0000\u0000\u037f"+ - "\u00b2\u0001\u0000\u0000\u0000\u0380\u0381\u0005.\u0000\u0000\u0381\u0382"+ - "\u0005s\u0000\u0000\u0382\u0383\u0005h\u0000\u0000\u0383\u0384\u0005r"+ - "\u0000\u0000\u0384\u0385\u0005_\u0000\u0000\u0385\u0386\u0005u\u0000\u0000"+ - "\u0386\u00b4\u0001\u0000\u0000\u0000\u0387\u0388\u0005.\u0000\u0000\u0388"+ - "\u0389\u0005r\u0000\u0000\u0389\u038a\u0005o\u0000\u0000\u038a\u038b\u0005"+ - "t\u0000\u0000\u038b\u038c\u0005l\u0000\u0000\u038c\u00b6\u0001\u0000\u0000"+ - "\u0000\u038d\u038e\u0005.\u0000\u0000\u038e\u038f\u0005r\u0000\u0000\u038f"+ - "\u0390\u0005o\u0000\u0000\u0390\u0391\u0005t\u0000\u0000\u0391\u0392\u0005"+ - "r\u0000\u0000\u0392\u00b8\u0001\u0000\u0000\u0000\u0393\u0394\u0005.\u0000"+ - "\u0000\u0394\u0395\u0005m\u0000\u0000\u0395\u0396\u0005i\u0000\u0000\u0396"+ - "\u0397\u0005n\u0000\u0000\u0397\u00ba\u0001\u0000\u0000\u0000\u0398\u0399"+ - "\u0005.\u0000\u0000\u0399\u039a\u0005m\u0000\u0000\u039a\u039b\u0005a"+ - "\u0000\u0000\u039b\u039c\u0005x\u0000\u0000\u039c\u00bc\u0001\u0000\u0000"+ - "\u0000\u039d\u039e\u0005.\u0000\u0000\u039e\u039f\u0005c\u0000\u0000\u039f"+ - "\u03a0\u0005o\u0000\u0000\u03a0\u03a1\u0005p\u0000\u0000\u03a1\u03a2\u0005"+ - "y\u0000\u0000\u03a2\u03a3\u0005s\u0000\u0000\u03a3\u03a4\u0005i\u0000"+ - "\u0000\u03a4\u03a5\u0005g\u0000\u0000\u03a5\u03a6\u0005n\u0000\u0000\u03a6"+ - "\u00be\u0001\u0000\u0000\u0000\u03a7\u03a8\u0005.\u0000\u0000\u03a8\u03a9"+ - "\u0005w\u0000\u0000\u03a9\u03aa\u0005r\u0000\u0000\u03aa\u03ab\u0005a"+ - "\u0000\u0000\u03ab\u03ac\u0005p\u0000\u0000\u03ac\u03ad\u0005_\u0000\u0000"+ - "\u03ad\u00c0\u0001\u0000\u0000\u0000\u03ae\u03af\u0005.\u0000\u0000\u03af"+ - "\u03b0\u0005t\u0000\u0000\u03b0\u03b1\u0005r\u0000\u0000\u03b1\u03b2\u0005"+ - "u\u0000\u0000\u03b2\u03b3\u0005n\u0000\u0000\u03b3\u03b4\u0005c\u0000"+ - "\u0000\u03b4\u03b5\u0005_\u0000\u0000\u03b5\u00c2\u0001\u0000\u0000\u0000"+ - "\u03b6\u03b7\u0005.\u0000\u0000\u03b7\u03b8\u0005t\u0000\u0000\u03b8\u03b9"+ - "\u0005r\u0000\u0000\u03b9\u03ba\u0005u\u0000\u0000\u03ba\u03bb\u0005n"+ - "\u0000\u0000\u03bb\u03bc\u0005c\u0000\u0000\u03bc\u03bd\u0005_\u0000\u0000"+ - "\u03bd\u03be\u0005s\u0000\u0000\u03be\u03bf\u0005a\u0000\u0000\u03bf\u03c0"+ - "\u0005t\u0000\u0000\u03c0\u03c1\u0005_\u0000\u0000\u03c1\u00c4\u0001\u0000"+ - "\u0000\u0000\u03c2\u03c3\u0005.\u0000\u0000\u03c3\u03c4\u0005c\u0000\u0000"+ - "\u03c4\u03c5\u0005o\u0000\u0000\u03c5\u03c6\u0005n\u0000\u0000\u03c6\u03c7"+ - "\u0005v\u0000\u0000\u03c7\u03c8\u0005e\u0000\u0000\u03c8\u03c9\u0005r"+ - "\u0000\u0000\u03c9\u03ca\u0005t\u0000\u0000\u03ca\u03cb\u0005_\u0000\u0000"+ - "\u03cb\u00c6\u0001\u0000\u0000\u0000\u03cc\u03cd\u0005.\u0000\u0000\u03cd"+ - "\u03ce\u0005e\u0000\u0000\u03ce\u03cf\u0005x\u0000\u0000\u03cf\u03d0\u0005"+ - "t\u0000\u0000\u03d0\u03d1\u0005e\u0000\u0000\u03d1\u03d2\u0005n\u0000"+ - "\u0000\u03d2\u03d3\u0005d\u0000\u0000\u03d3\u03d4\u0005_\u0000\u0000\u03d4"+ - "\u00c8\u0001\u0000\u0000\u0000\u03d5\u03d6\u0005.\u0000\u0000\u03d6\u03d7"+ - "\u0005d\u0000\u0000\u03d7\u03d8\u0005e\u0000\u0000\u03d8\u03d9\u0005m"+ - "\u0000\u0000\u03d9\u03da\u0005o\u0000\u0000\u03da\u03db\u0005t\u0000\u0000"+ - "\u03db\u03dc\u0005e\u0000\u0000\u03dc\u03dd\u0005_\u0000\u0000\u03dd\u00ca"+ - "\u0001\u0000\u0000\u0000\u03de\u03df\u0005.\u0000\u0000\u03df\u03e0\u0005"+ - "p\u0000\u0000\u03e0\u03e1\u0005r\u0000\u0000\u03e1\u03e2\u0005o\u0000"+ - "\u0000\u03e2\u03e3\u0005m\u0000\u0000\u03e3\u03e4\u0005o\u0000\u0000\u03e4"+ - "\u03e5\u0005t\u0000\u0000\u03e5\u03e6\u0005e\u0000\u0000\u03e6\u03e7\u0005"+ - "_\u0000\u0000\u03e7\u00cc\u0001\u0000\u0000\u0000\u03e8\u03e9\u0005.\u0000"+ - "\u0000\u03e9\u03ea\u0005r\u0000\u0000\u03ea\u03eb\u0005e\u0000\u0000\u03eb"+ - "\u03ec\u0005i\u0000\u0000\u03ec\u03ed\u0005n\u0000\u0000\u03ed\u03ee\u0005"+ - "t\u0000\u0000\u03ee\u03ef\u0005e\u0000\u0000\u03ef\u03f0\u0005r\u0000"+ - "\u0000\u03f0\u03f1\u0005p\u0000\u0000\u03f1\u03f2\u0005r\u0000\u0000\u03f2"+ - "\u03f3\u0005e\u0000\u0000\u03f3\u03f4\u0005t\u0000\u0000\u03f4\u03f5\u0005"+ - "_\u0000\u0000\u03f5\u00ce\u0001\u0000\u0000\u0000\u03f6\u03f7\u0005m\u0000"+ - "\u0000\u03f7\u03f8\u0005e\u0000\u0000\u03f8\u03f9\u0005m\u0000\u0000\u03f9"+ - "\u03fa\u0005o\u0000\u0000\u03fa\u03fb\u0005r\u0000\u0000\u03fb\u03fc\u0005"+ - "y\u0000\u0000\u03fc\u03fd\u0005.\u0000\u0000\u03fd\u03fe\u0005s\u0000"+ - "\u0000\u03fe\u03ff\u0005i\u0000\u0000\u03ff\u0400\u0005z\u0000\u0000\u0400"+ - "\u0401\u0005e\u0000\u0000\u0401\u00d0\u0001\u0000\u0000\u0000\u0402\u0403"+ - "\u0005m\u0000\u0000\u0403\u0404\u0005e\u0000\u0000\u0404\u0405\u0005m"+ - "\u0000\u0000\u0405\u0406\u0005o\u0000\u0000\u0406\u0407\u0005r\u0000\u0000"+ - "\u0407\u0408\u0005y\u0000\u0000\u0408\u0409\u0005.\u0000\u0000\u0409\u040a"+ - "\u0005g\u0000\u0000\u040a\u040b\u0005r\u0000\u0000\u040b\u040c\u0005o"+ - "\u0000\u0000\u040c\u040d\u0005w\u0000\u0000\u040d\u00d2\u0001\u0000\u0000"+ - "\u0000\u040e\u040f\u0005m\u0000\u0000\u040f\u0410\u0005e\u0000\u0000\u0410"+ - "\u0411\u0005m\u0000\u0000\u0411\u0412\u0005o\u0000\u0000\u0412\u0413\u0005"+ - "r\u0000\u0000\u0413\u0414\u0005y\u0000\u0000\u0414\u0415\u0005.\u0000"+ - "\u0000\u0415\u0416\u0005f\u0000\u0000\u0416\u0417\u0005i\u0000\u0000\u0417"+ - "\u0418\u0005l\u0000\u0000\u0418\u0419\u0005l\u0000\u0000\u0419\u00d4\u0001"+ - "\u0000\u0000\u0000\u041a\u041b\u0005m\u0000\u0000\u041b\u041c\u0005e\u0000"+ - "\u0000\u041c\u041d\u0005m\u0000\u0000\u041d\u041e\u0005o\u0000\u0000\u041e"+ - "\u041f\u0005r\u0000\u0000\u041f\u0420\u0005y\u0000\u0000\u0420\u0421\u0005"+ - ".\u0000\u0000\u0421\u0422\u0005c\u0000\u0000\u0422\u0423\u0005o\u0000"+ - "\u0000\u0423\u0424\u0005p\u0000\u0000\u0424\u0425\u0005y\u0000\u0000\u0425"+ - "\u00d6\u0001\u0000\u0000\u0000\u0426\u0427\u0005m\u0000\u0000\u0427\u0428"+ - "\u0005e\u0000\u0000\u0428\u0429\u0005m\u0000\u0000\u0429\u042a\u0005o"+ - "\u0000\u0000\u042a\u042b\u0005r\u0000\u0000\u042b\u042c\u0005y\u0000\u0000"+ - "\u042c\u042d\u0005.\u0000\u0000\u042d\u042e\u0005i\u0000\u0000\u042e\u042f"+ - "\u0005n\u0000\u0000\u042f\u0430\u0005i\u0000\u0000\u0430\u0431\u0005t"+ - "\u0000\u0000\u0431\u00d8\u0001\u0000\u0000\u0000\u0432\u0433\u0003c1\u0000"+ - "\u0433\u0434\u0003g3\u0000\u0434\u00da\u0001\u0000\u0000\u0000\u0435\u0436"+ - "\u0003c1\u0000\u0436\u0437\u0005.\u0000\u0000\u0437\u0438\u0005e\u0000"+ - "\u0000\u0438\u0439\u0005q\u0000\u0000\u0439\u0496\u0001\u0000\u0000\u0000"+ - "\u043a\u043b\u0003c1\u0000\u043b\u043c\u0005.\u0000\u0000\u043c\u043d"+ - "\u0005n\u0000\u0000\u043d\u043e\u0005e\u0000\u0000\u043e\u0496\u0001\u0000"+ - "\u0000\u0000\u043f\u0440\u0003c1\u0000\u0440\u0441\u0005.\u0000\u0000"+ - "\u0441\u0442\u0005l\u0000\u0000\u0442\u0443\u0005t\u0000\u0000\u0443\u0444"+ - "\u0005_\u0000\u0000\u0444\u0445\u0005s\u0000\u0000\u0445\u0496\u0001\u0000"+ - "\u0000\u0000\u0446\u0447\u0003c1\u0000\u0447\u0448\u0005.\u0000\u0000"+ - "\u0448\u0449\u0005l\u0000\u0000\u0449\u044a\u0005t\u0000\u0000\u044a\u044b"+ - "\u0005_\u0000\u0000\u044b\u044c\u0005u\u0000\u0000\u044c\u0496\u0001\u0000"+ - "\u0000\u0000\u044d\u044e\u0003c1\u0000\u044e\u044f\u0005.\u0000\u0000"+ - "\u044f\u0450\u0005l\u0000\u0000\u0450\u0451\u0005e\u0000\u0000\u0451\u0452"+ - "\u0005_\u0000\u0000\u0452\u0453\u0005s\u0000\u0000\u0453\u0496\u0001\u0000"+ - "\u0000\u0000\u0454\u0455\u0003c1\u0000\u0455\u0456\u0005.\u0000\u0000"+ - "\u0456\u0457\u0005l\u0000\u0000\u0457\u0458\u0005e\u0000\u0000\u0458\u0459"+ - "\u0005_\u0000\u0000\u0459\u045a\u0005u\u0000\u0000\u045a\u0496\u0001\u0000"+ - "\u0000\u0000\u045b\u045c\u0003c1\u0000\u045c\u045d\u0005.\u0000\u0000"+ - "\u045d\u045e\u0005g\u0000\u0000\u045e\u045f\u0005t\u0000\u0000\u045f\u0460"+ - "\u0005_\u0000\u0000\u0460\u0461\u0005s\u0000\u0000\u0461\u0496\u0001\u0000"+ - "\u0000\u0000\u0462\u0463\u0003c1\u0000\u0463\u0464\u0005.\u0000\u0000"+ - "\u0464\u0465\u0005g\u0000\u0000\u0465\u0466\u0005t\u0000\u0000\u0466\u0467"+ - "\u0005_\u0000\u0000\u0467\u0468\u0005u\u0000\u0000\u0468\u0496\u0001\u0000"+ - "\u0000\u0000\u0469\u046a\u0003c1\u0000\u046a\u046b\u0005.\u0000\u0000"+ - "\u046b\u046c\u0005g\u0000\u0000\u046c\u046d\u0005e\u0000\u0000\u046d\u046e"+ - "\u0005_\u0000\u0000\u046e\u046f\u0005s\u0000\u0000\u046f\u0496\u0001\u0000"+ - "\u0000\u0000\u0470\u0471\u0003c1\u0000\u0471\u0472\u0005.\u0000\u0000"+ - "\u0472\u0473\u0005g\u0000\u0000\u0473\u0474\u0005e\u0000\u0000\u0474\u0475"+ - "\u0005_\u0000\u0000\u0475\u0476\u0005u\u0000\u0000\u0476\u0496\u0001\u0000"+ - "\u0000\u0000\u0477\u0478\u0003e2\u0000\u0478\u0479\u0005.\u0000\u0000"+ - "\u0479\u047a\u0005e\u0000\u0000\u047a\u047b\u0005q\u0000\u0000\u047b\u0496"+ - "\u0001\u0000\u0000\u0000\u047c\u047d\u0003e2\u0000\u047d\u047e\u0005."+ - "\u0000\u0000\u047e\u047f\u0005n\u0000\u0000\u047f\u0480\u0005e\u0000\u0000"+ - "\u0480\u0496\u0001\u0000\u0000\u0000\u0481\u0482\u0003e2\u0000\u0482\u0483"+ - "\u0005.\u0000\u0000\u0483\u0484\u0005l\u0000\u0000\u0484\u0485\u0005t"+ - "\u0000\u0000\u0485\u0496\u0001\u0000\u0000\u0000\u0486\u0487\u0003e2\u0000"+ - "\u0487\u0488\u0005.\u0000\u0000\u0488\u0489\u0005l\u0000\u0000\u0489\u048a"+ - "\u0005e\u0000\u0000\u048a\u0496\u0001\u0000\u0000\u0000\u048b\u048c\u0003"+ - "e2\u0000\u048c\u048d\u0005.\u0000\u0000\u048d\u048e\u0005g\u0000\u0000"+ - "\u048e\u048f\u0005t\u0000\u0000\u048f\u0496\u0001\u0000\u0000\u0000\u0490"+ - "\u0491\u0003e2\u0000\u0491\u0492\u0005.\u0000\u0000\u0492\u0493\u0005"+ - "g\u0000\u0000\u0493\u0494\u0005e\u0000\u0000\u0494\u0496\u0001\u0000\u0000"+ - "\u0000\u0495\u0435\u0001\u0000\u0000\u0000\u0495\u043a\u0001\u0000\u0000"+ - "\u0000\u0495\u043f\u0001\u0000\u0000\u0000\u0495\u0446\u0001\u0000\u0000"+ - "\u0000\u0495\u044d\u0001\u0000\u0000\u0000\u0495\u0454\u0001\u0000\u0000"+ - "\u0000\u0495\u045b\u0001\u0000\u0000\u0000\u0495\u0462\u0001\u0000\u0000"+ - "\u0000\u0495\u0469\u0001\u0000\u0000\u0000\u0495\u0470\u0001\u0000\u0000"+ - "\u0000\u0495\u0477\u0001\u0000\u0000\u0000\u0495\u047c\u0001\u0000\u0000"+ - "\u0000\u0495\u0481\u0001\u0000\u0000\u0000\u0495\u0486\u0001\u0000\u0000"+ - "\u0000\u0495\u048b\u0001\u0000\u0000\u0000\u0495\u0490\u0001\u0000\u0000"+ - "\u0000\u0496\u00dc\u0001\u0000\u0000\u0000\u0497\u0498\u0003c1\u0000\u0498"+ - "\u0499\u0005.\u0000\u0000\u0499\u049a\u0005c\u0000\u0000\u049a\u049b\u0005"+ - "l\u0000\u0000\u049b\u049c\u0005z\u0000\u0000\u049c\u04e1\u0001\u0000\u0000"+ - "\u0000\u049d\u049e\u0003c1\u0000\u049e\u049f\u0005.\u0000\u0000\u049f"+ - "\u04a0\u0005c\u0000\u0000\u04a0\u04a1\u0005t\u0000\u0000\u04a1\u04a2\u0005"+ - "z\u0000\u0000\u04a2\u04e1\u0001\u0000\u0000\u0000\u04a3\u04a4\u0003c1"+ - "\u0000\u04a4\u04a5\u0005.\u0000\u0000\u04a5\u04a6\u0005p\u0000\u0000\u04a6"+ - "\u04a7\u0005o\u0000\u0000\u04a7\u04a8\u0005p\u0000\u0000\u04a8\u04a9\u0005"+ - "c\u0000\u0000\u04a9\u04aa\u0005n\u0000\u0000\u04aa\u04ab\u0005t\u0000"+ - "\u0000\u04ab\u04e1\u0001\u0000\u0000\u0000\u04ac\u04ad\u0003e2\u0000\u04ad"+ - "\u04ae\u0005.\u0000\u0000\u04ae\u04af\u0005n\u0000\u0000\u04af\u04b0\u0005"+ - "e\u0000\u0000\u04b0\u04b1\u0005g\u0000\u0000\u04b1\u04e1\u0001\u0000\u0000"+ - "\u0000\u04b2\u04b3\u0003e2\u0000\u04b3\u04b4\u0005.\u0000\u0000\u04b4"+ - "\u04b5\u0005a\u0000\u0000\u04b5\u04b6\u0005b\u0000\u0000\u04b6\u04b7\u0005"+ - "s\u0000\u0000\u04b7\u04e1\u0001\u0000\u0000\u0000\u04b8\u04b9\u0003e2"+ - "\u0000\u04b9\u04ba\u0005.\u0000\u0000\u04ba\u04bb\u0005s\u0000\u0000\u04bb"+ - "\u04bc\u0005q\u0000\u0000\u04bc\u04bd\u0005r\u0000\u0000\u04bd\u04be\u0005"+ - "t\u0000\u0000\u04be\u04e1\u0001\u0000\u0000\u0000\u04bf\u04c0\u0003e2"+ - "\u0000\u04c0\u04c1\u0005.\u0000\u0000\u04c1\u04c2\u0005c\u0000\u0000\u04c2"+ - "\u04c3\u0005e\u0000\u0000\u04c3\u04c4\u0005i\u0000\u0000\u04c4\u04c5\u0005"+ - "l\u0000\u0000\u04c5\u04e1\u0001\u0000\u0000\u0000\u04c6\u04c7\u0003e2"+ - "\u0000\u04c7\u04c8\u0005.\u0000\u0000\u04c8\u04c9\u0005f\u0000\u0000\u04c9"+ - "\u04ca\u0005l\u0000\u0000\u04ca\u04cb\u0005o\u0000\u0000\u04cb\u04cc\u0005"+ - "o\u0000\u0000\u04cc\u04cd\u0005r\u0000\u0000\u04cd\u04e1\u0001\u0000\u0000"+ - "\u0000\u04ce\u04cf\u0003e2\u0000\u04cf\u04d0\u0005.\u0000\u0000\u04d0"+ - "\u04d1\u0005t\u0000\u0000\u04d1\u04d2\u0005r\u0000\u0000\u04d2\u04d3\u0005"+ - "u\u0000\u0000\u04d3\u04d4\u0005n\u0000\u0000\u04d4\u04d5\u0005c\u0000"+ - "\u0000\u04d5\u04e1\u0001\u0000\u0000\u0000\u04d6\u04d7\u0003e2\u0000\u04d7"+ - "\u04d8\u0005.\u0000\u0000\u04d8\u04d9\u0005n\u0000\u0000\u04d9\u04da\u0005"+ - "e\u0000\u0000\u04da\u04db\u0005a\u0000\u0000\u04db\u04dc\u0005r\u0000"+ - "\u0000\u04dc\u04dd\u0005e\u0000\u0000\u04dd\u04de\u0005s\u0000\u0000\u04de"+ - "\u04df\u0005t\u0000\u0000\u04df\u04e1\u0001\u0000\u0000\u0000\u04e0\u0497"+ - "\u0001\u0000\u0000\u0000\u04e0\u049d\u0001\u0000\u0000\u0000\u04e0\u04a3"+ - "\u0001\u0000\u0000\u0000\u04e0\u04ac\u0001\u0000\u0000\u0000\u04e0\u04b2"+ - "\u0001\u0000\u0000\u0000\u04e0\u04b8\u0001\u0000\u0000\u0000\u04e0\u04bf"+ - "\u0001\u0000\u0000\u0000\u04e0\u04c6\u0001\u0000\u0000\u0000\u04e0\u04ce"+ - "\u0001\u0000\u0000\u0000\u04e0\u04d6\u0001\u0000\u0000\u0000\u04e1\u00de"+ - "\u0001\u0000\u0000\u0000\u04e2\u04e3\u0003c1\u0000\u04e3\u04e4\u0005."+ - "\u0000\u0000\u04e4\u04e5\u0005a\u0000\u0000\u04e5\u04e6\u0005d\u0000\u0000"+ - "\u04e6\u04e7\u0005d\u0000\u0000\u04e7\u0579\u0001\u0000\u0000\u0000\u04e8"+ - "\u04e9\u0003c1\u0000\u04e9\u04ea\u0005.\u0000\u0000\u04ea\u04eb\u0005"+ - "s\u0000\u0000\u04eb\u04ec\u0005u\u0000\u0000\u04ec\u04ed\u0005b\u0000"+ - "\u0000\u04ed\u0579\u0001\u0000\u0000\u0000\u04ee\u04ef\u0003c1\u0000\u04ef"+ - "\u04f0\u0005.\u0000\u0000\u04f0\u04f1\u0005m\u0000\u0000\u04f1\u04f2\u0005"+ - "u\u0000\u0000\u04f2\u04f3\u0005l\u0000\u0000\u04f3\u0579\u0001\u0000\u0000"+ - "\u0000\u04f4\u04f5\u0003c1\u0000\u04f5\u04f6\u0005.\u0000\u0000\u04f6"+ - "\u04f7\u0005d\u0000\u0000\u04f7\u04f8\u0005i\u0000\u0000\u04f8\u04f9\u0005"+ - "v\u0000\u0000\u04f9\u04fa\u0005_\u0000\u0000\u04fa\u04fb\u0005s\u0000"+ - "\u0000\u04fb\u0579\u0001\u0000\u0000\u0000\u04fc\u04fd\u0003c1\u0000\u04fd"+ - "\u04fe\u0005.\u0000\u0000\u04fe\u04ff\u0005d\u0000\u0000\u04ff\u0500\u0005"+ - "i\u0000\u0000\u0500\u0501\u0005v\u0000\u0000\u0501\u0502\u0005_\u0000"+ - "\u0000\u0502\u0503\u0005u\u0000\u0000\u0503\u0579\u0001\u0000\u0000\u0000"+ - "\u0504\u0505\u0003c1\u0000\u0505\u0506\u0005.\u0000\u0000\u0506\u0507"+ - "\u0005r\u0000\u0000\u0507\u0508\u0005e\u0000\u0000\u0508\u0509\u0005m"+ - "\u0000\u0000\u0509\u050a\u0005_\u0000\u0000\u050a\u050b\u0005s\u0000\u0000"+ - "\u050b\u0579\u0001\u0000\u0000\u0000\u050c\u050d\u0003c1\u0000\u050d\u050e"+ - "\u0005.\u0000\u0000\u050e\u050f\u0005r\u0000\u0000\u050f\u0510\u0005e"+ - "\u0000\u0000\u0510\u0511\u0005m\u0000\u0000\u0511\u0512\u0005_\u0000\u0000"+ - "\u0512\u0513\u0005u\u0000\u0000\u0513\u0579\u0001\u0000\u0000\u0000\u0514"+ - "\u0515\u0003c1\u0000\u0515\u0516\u0005.\u0000\u0000\u0516\u0517\u0005"+ - "a\u0000\u0000\u0517\u0518\u0005n\u0000\u0000\u0518\u0519\u0005d\u0000"+ - "\u0000\u0519\u0579\u0001\u0000\u0000\u0000\u051a\u051b\u0003c1\u0000\u051b"+ - "\u051c\u0005.\u0000\u0000\u051c\u051d\u0005o\u0000\u0000\u051d\u051e\u0005"+ - "r\u0000\u0000\u051e\u0579\u0001\u0000\u0000\u0000\u051f\u0520\u0003c1"+ - "\u0000\u0520\u0521\u0005.\u0000\u0000\u0521\u0522\u0005x\u0000\u0000\u0522"+ - "\u0523\u0005o\u0000\u0000\u0523\u0524\u0005r\u0000\u0000\u0524\u0579\u0001"+ - "\u0000\u0000\u0000\u0525\u0526\u0003c1\u0000\u0526\u0527\u0005.\u0000"+ - "\u0000\u0527\u0528\u0005s\u0000\u0000\u0528\u0529\u0005h\u0000\u0000\u0529"+ - "\u052a\u0005l\u0000\u0000\u052a\u0579\u0001\u0000\u0000\u0000\u052b\u052c"+ - "\u0003c1\u0000\u052c\u052d\u0005.\u0000\u0000\u052d\u052e\u0005s\u0000"+ - "\u0000\u052e\u052f\u0005h\u0000\u0000\u052f\u0530\u0005r\u0000\u0000\u0530"+ - "\u0531\u0005_\u0000\u0000\u0531\u0532\u0005s\u0000\u0000\u0532\u0579\u0001"+ - "\u0000\u0000\u0000\u0533\u0534\u0003c1\u0000\u0534\u0535\u0005.\u0000"+ - "\u0000\u0535\u0536\u0005s\u0000\u0000\u0536\u0537\u0005h\u0000\u0000\u0537"+ - "\u0538\u0005r\u0000\u0000\u0538\u0539\u0005_\u0000\u0000\u0539\u053a\u0005"+ - "u\u0000\u0000\u053a\u0579\u0001\u0000\u0000\u0000\u053b\u053c\u0003c1"+ - "\u0000\u053c\u053d\u0005.\u0000\u0000\u053d\u053e\u0005r\u0000\u0000\u053e"+ - "\u053f\u0005o\u0000\u0000\u053f\u0540\u0005t\u0000\u0000\u0540\u0541\u0005"+ - "l\u0000\u0000\u0541\u0579\u0001\u0000\u0000\u0000\u0542\u0543\u0003c1"+ - "\u0000\u0543\u0544\u0005.\u0000\u0000\u0544\u0545\u0005r\u0000\u0000\u0545"+ - "\u0546\u0005o\u0000\u0000\u0546\u0547\u0005t\u0000\u0000\u0547\u0548\u0005"+ - "r\u0000\u0000\u0548\u0579\u0001\u0000\u0000\u0000\u0549\u054a\u0003e2"+ - "\u0000\u054a\u054b\u0005.\u0000\u0000\u054b\u054c\u0005a\u0000\u0000\u054c"+ - "\u054d\u0005d\u0000\u0000\u054d\u054e\u0005d\u0000\u0000\u054e\u0579\u0001"+ - "\u0000\u0000\u0000\u054f\u0550\u0003e2\u0000\u0550\u0551\u0005.\u0000"+ - "\u0000\u0551\u0552\u0005s\u0000\u0000\u0552\u0553\u0005u\u0000\u0000\u0553"+ - "\u0554\u0005b\u0000\u0000\u0554\u0579\u0001\u0000\u0000\u0000\u0555\u0556"+ - "\u0003e2\u0000\u0556\u0557\u0005.\u0000\u0000\u0557\u0558\u0005m\u0000"+ - "\u0000\u0558\u0559\u0005u\u0000\u0000\u0559\u055a\u0005l\u0000\u0000\u055a"+ - "\u0579\u0001\u0000\u0000\u0000\u055b\u055c\u0003e2\u0000\u055c\u055d\u0005"+ - ".\u0000\u0000\u055d\u055e\u0005d\u0000\u0000\u055e\u055f\u0005i\u0000"+ - "\u0000\u055f\u0560\u0005v\u0000\u0000\u0560\u0579\u0001\u0000\u0000\u0000"+ - "\u0561\u0562\u0003e2\u0000\u0562\u0563\u0005.\u0000\u0000\u0563\u0564"+ - "\u0005m\u0000\u0000\u0564\u0565\u0005i\u0000\u0000\u0565\u0566\u0005n"+ - "\u0000\u0000\u0566\u0579\u0001\u0000\u0000\u0000\u0567\u0568\u0003e2\u0000"+ - "\u0568\u0569\u0005.\u0000\u0000\u0569\u056a\u0005m\u0000\u0000\u056a\u056b"+ - "\u0005a\u0000\u0000\u056b\u056c\u0005x\u0000\u0000\u056c\u0579\u0001\u0000"+ - "\u0000\u0000\u056d\u056e\u0003e2\u0000\u056e\u056f\u0005.\u0000\u0000"+ - "\u056f\u0570\u0005c\u0000\u0000\u0570\u0571\u0005o\u0000\u0000\u0571\u0572"+ - "\u0005p\u0000\u0000\u0572\u0573\u0005y\u0000\u0000\u0573\u0574\u0005s"+ - "\u0000\u0000\u0574\u0575\u0005i\u0000\u0000\u0575\u0576\u0005g\u0000\u0000"+ - "\u0576\u0577\u0005n\u0000\u0000\u0577\u0579\u0001\u0000\u0000\u0000\u0578"+ - "\u04e2\u0001\u0000\u0000\u0000\u0578\u04e8\u0001\u0000\u0000\u0000\u0578"+ - "\u04ee\u0001\u0000\u0000\u0000\u0578\u04f4\u0001\u0000\u0000\u0000\u0578"+ - "\u04fc\u0001\u0000\u0000\u0000\u0578\u0504\u0001\u0000\u0000\u0000\u0578"+ - "\u050c\u0001\u0000\u0000\u0000\u0578\u0514\u0001\u0000\u0000\u0000\u0578"+ - "\u051a\u0001\u0000\u0000\u0000\u0578\u051f\u0001\u0000\u0000\u0000\u0578"+ - "\u0525\u0001\u0000\u0000\u0000\u0578\u052b\u0001\u0000\u0000\u0000\u0578"+ - "\u0533\u0001\u0000\u0000\u0000\u0578\u053b\u0001\u0000\u0000\u0000\u0578"+ - "\u0542\u0001\u0000\u0000\u0000\u0578\u0549\u0001\u0000\u0000\u0000\u0578"+ - "\u054f\u0001\u0000\u0000\u0000\u0578\u0555\u0001\u0000\u0000\u0000\u0578"+ - "\u055b\u0001\u0000\u0000\u0000\u0578\u0561\u0001\u0000\u0000\u0000\u0578"+ - "\u0567\u0001\u0000\u0000\u0000\u0578\u056d\u0001\u0000\u0000\u0000\u0579"+ - "\u00e0\u0001\u0000\u0000\u0000\u057a\u057b\u0003[-\u0000\u057b\u057c\u0005"+ - ".\u0000\u0000\u057c\u057d\u0005w\u0000\u0000\u057d\u057e\u0005r\u0000"+ - "\u0000\u057e\u057f\u0005a\u0000\u0000\u057f\u0580\u0005p\u0000\u0000\u0580"+ - "\u0581\u0005_\u0000\u0000\u0581\u0582\u0001\u0000\u0000\u0000\u0582\u0583"+ - "\u0003].\u0000\u0583\u061d\u0001\u0000\u0000\u0000\u0584\u0585\u0003c"+ - "1\u0000\u0585\u0586\u0005.\u0000\u0000\u0586\u0587\u0005t\u0000\u0000"+ - "\u0587\u0588\u0005r\u0000\u0000\u0588\u0589\u0005u\u0000\u0000\u0589\u058a"+ - "\u0005n\u0000\u0000\u058a\u058b\u0005c\u0000\u0000\u058b\u058c\u0005_"+ - "\u0000\u0000\u058c\u058d\u0001\u0000\u0000\u0000\u058d\u058e\u0003e2\u0000"+ - "\u058e\u058f\u0003Q(\u0000\u058f\u0590\u0003W+\u0000\u0590\u061d\u0001"+ - "\u0000\u0000\u0000\u0591\u0592\u0003c1\u0000\u0592\u0593\u0005.\u0000"+ - "\u0000\u0593\u0594\u0005t\u0000\u0000\u0594\u0595\u0005r\u0000\u0000\u0595"+ - "\u0596\u0005u\u0000\u0000\u0596\u0597\u0005n\u0000\u0000\u0597\u0598\u0005"+ - "c\u0000\u0000\u0598\u0599\u0005_\u0000\u0000\u0599\u059a\u0005s\u0000"+ - "\u0000\u059a\u059b\u0005a\u0000\u0000\u059b\u059c\u0005t\u0000\u0000\u059c"+ - "\u059d\u0005_\u0000\u0000\u059d\u059e\u0001\u0000\u0000\u0000\u059e\u059f"+ - "\u0003e2\u0000\u059f\u05a0\u0003Q(\u0000\u05a0\u05a1\u0003W+\u0000\u05a1"+ - "\u061d\u0001\u0000\u0000\u0000\u05a2\u05a3\u0003].\u0000\u05a3\u05a4\u0005"+ - ".\u0000\u0000\u05a4\u05a5\u0005e\u0000\u0000\u05a5\u05a6\u0005x\u0000"+ - "\u0000\u05a6\u05a7\u0005t\u0000\u0000\u05a7\u05a8\u0005e\u0000\u0000\u05a8"+ - "\u05a9\u0005n\u0000\u0000\u05a9\u05aa\u0005d\u0000\u0000\u05aa\u05ab\u0005"+ - "_\u0000\u0000\u05ab\u05ac\u0001\u0000\u0000\u0000\u05ac\u05ad\u0003[-"+ - "\u0000\u05ad\u05ae\u0003Q(\u0000\u05ae\u05af\u0003W+\u0000\u05af\u061d"+ - "\u0001\u0000\u0000\u0000\u05b0\u05b1\u0003e2\u0000\u05b1\u05b2\u0005."+ - "\u0000\u0000\u05b2\u05b3\u0005c\u0000\u0000\u05b3\u05b4\u0005o\u0000\u0000"+ - "\u05b4\u05b5\u0005n\u0000\u0000\u05b5\u05b6\u0005v\u0000\u0000\u05b6\u05b7"+ - "\u0005e\u0000\u0000\u05b7\u05b8\u0005r\u0000\u0000\u05b8\u05b9\u0005t"+ - "\u0000\u0000\u05b9\u05ba\u0005_\u0000\u0000\u05ba\u05bb\u0001\u0000\u0000"+ - "\u0000\u05bb\u05bc\u0003c1\u0000\u05bc\u05bd\u0003Q(\u0000\u05bd\u05be"+ - "\u0003W+\u0000\u05be\u061d\u0001\u0000\u0000\u0000\u05bf\u05c0\u0003_"+ - "/\u0000\u05c0\u05c1\u0005.\u0000\u0000\u05c1\u05c2\u0005d\u0000\u0000"+ - "\u05c2\u05c3\u0005e\u0000\u0000\u05c3\u05c4\u0005m\u0000\u0000\u05c4\u05c5"+ - "\u0005o\u0000\u0000\u05c5\u05c6\u0005t\u0000\u0000\u05c6\u05c7\u0005e"+ - "\u0000\u0000\u05c7\u05c8\u0005_\u0000\u0000\u05c8\u05c9\u0001\u0000\u0000"+ - "\u0000\u05c9\u05ca\u0003a0\u0000\u05ca\u061d\u0001\u0000\u0000\u0000\u05cb"+ - "\u05cc\u0003a0\u0000\u05cc\u05cd\u0005.\u0000\u0000\u05cd\u05ce\u0005"+ - "p\u0000\u0000\u05ce\u05cf\u0005r\u0000\u0000\u05cf\u05d0\u0005o\u0000"+ - "\u0000\u05d0\u05d1\u0005m\u0000\u0000\u05d1\u05d2\u0005o\u0000\u0000\u05d2"+ - "\u05d3\u0005t\u0000\u0000\u05d3\u05d4\u0005e\u0000\u0000\u05d4\u05d5\u0005"+ - "_\u0000\u0000\u05d5\u05d6\u0001\u0000\u0000\u0000\u05d6\u05d7\u0003_/"+ - "\u0000\u05d7\u061d\u0001\u0000\u0000\u0000\u05d8\u05d9\u0003_/\u0000\u05d9"+ - "\u05da\u0005.\u0000\u0000\u05da\u05db\u0005r\u0000\u0000\u05db\u05dc\u0005"+ - "e\u0000\u0000\u05dc\u05dd\u0005i\u0000\u0000\u05dd\u05de\u0005n\u0000"+ - "\u0000\u05de\u05df\u0005t\u0000\u0000\u05df\u05e0\u0005e\u0000\u0000\u05e0"+ - "\u05e1\u0005r\u0000\u0000\u05e1\u05e2\u0005p\u0000\u0000\u05e2\u05e3\u0005"+ - "r\u0000\u0000\u05e3\u05e4\u0005e\u0000\u0000\u05e4\u05e5\u0005t\u0000"+ - "\u0000\u05e5\u05e6\u0005_\u0000\u0000\u05e6\u05e7\u0001\u0000\u0000\u0000"+ - "\u05e7\u05e8\u0003[-\u0000\u05e8\u061d\u0001\u0000\u0000\u0000\u05e9\u05ea"+ - "\u0003a0\u0000\u05ea\u05eb\u0005.\u0000\u0000\u05eb\u05ec\u0005r\u0000"+ - "\u0000\u05ec\u05ed\u0005e\u0000\u0000\u05ed\u05ee\u0005i\u0000\u0000\u05ee"+ - "\u05ef\u0005n\u0000\u0000\u05ef\u05f0\u0005t\u0000\u0000\u05f0\u05f1\u0005"+ - "e\u0000\u0000\u05f1\u05f2\u0005r\u0000\u0000\u05f2\u05f3\u0005p\u0000"+ - "\u0000\u05f3\u05f4\u0005r\u0000\u0000\u05f4\u05f5\u0005e\u0000\u0000\u05f5"+ - "\u05f6\u0005t\u0000\u0000\u05f6\u05f7\u0005_\u0000\u0000\u05f7\u05f8\u0001"+ - "\u0000\u0000\u0000\u05f8\u05f9\u0003].\u0000\u05f9\u061d\u0001\u0000\u0000"+ - "\u0000\u05fa\u05fb\u0003[-\u0000\u05fb\u05fc\u0005.\u0000\u0000\u05fc"+ - "\u05fd\u0005r\u0000\u0000\u05fd\u05fe\u0005e\u0000\u0000\u05fe\u05ff\u0005"+ - "i\u0000\u0000\u05ff\u0600\u0005n\u0000\u0000\u0600\u0601\u0005t\u0000"+ - "\u0000\u0601\u0602\u0005e\u0000\u0000\u0602\u0603\u0005r\u0000\u0000\u0603"+ - "\u0604\u0005p\u0000\u0000\u0604\u0605\u0005r\u0000\u0000\u0605\u0606\u0005"+ - "e\u0000\u0000\u0606\u0607\u0005t\u0000\u0000\u0607\u0608\u0005_\u0000"+ - "\u0000\u0608\u0609\u0001\u0000\u0000\u0000\u0609\u060a\u0003_/\u0000\u060a"+ - "\u061d\u0001\u0000\u0000\u0000\u060b\u060c\u0003].\u0000\u060c\u060d\u0005"+ - ".\u0000\u0000\u060d\u060e\u0005r\u0000\u0000\u060e\u060f\u0005e\u0000"+ - "\u0000\u060f\u0610\u0005i\u0000\u0000\u0610\u0611\u0005n\u0000\u0000\u0611"+ - "\u0612\u0005t\u0000\u0000\u0612\u0613\u0005e\u0000\u0000\u0613\u0614\u0005"+ - "r\u0000\u0000\u0614\u0615\u0005p\u0000\u0000\u0615\u0616\u0005r\u0000"+ - "\u0000\u0616\u0617\u0005e\u0000\u0000\u0617\u0618\u0005t\u0000\u0000\u0618"+ - "\u0619\u0005_\u0000\u0000\u0619\u061a\u0001\u0000\u0000\u0000\u061a\u061b"+ - "\u0003a0\u0000\u061b\u061d\u0001\u0000\u0000\u0000\u061c\u057a\u0001\u0000"+ - "\u0000\u0000\u061c\u0584\u0001\u0000\u0000\u0000\u061c\u0591\u0001\u0000"+ - "\u0000\u0000\u061c\u05a2\u0001\u0000\u0000\u0000\u061c\u05b0\u0001\u0000"+ - "\u0000\u0000\u061c\u05bf\u0001\u0000\u0000\u0000\u061c\u05cb\u0001\u0000"+ - "\u0000\u0000\u061c\u05d8\u0001\u0000\u0000\u0000\u061c\u05e9\u0001\u0000"+ - "\u0000\u0000\u061c\u05fa\u0001\u0000\u0000\u0000\u061c\u060b\u0001\u0000"+ - "\u0000\u0000\u061d\u00e2\u0001\u0000\u0000\u0000\u061e\u061f\u0005t\u0000"+ - "\u0000\u061f\u0620\u0005y\u0000\u0000\u0620\u0621\u0005p\u0000\u0000\u0621"+ - "\u0622\u0005e\u0000\u0000\u0622\u00e4\u0001\u0000\u0000\u0000\u0623\u0624"+ - "\u0005f\u0000\u0000\u0624\u0625\u0005u\u0000\u0000\u0625\u0626\u0005n"+ - "\u0000\u0000\u0626\u0627\u0005c\u0000\u0000\u0627\u00e6\u0001\u0000\u0000"+ - "\u0000\u0628\u0629\u0005e\u0000\u0000\u0629\u062a\u0005x\u0000\u0000\u062a"+ - "\u062b\u0005t\u0000\u0000\u062b\u062c\u0005e\u0000\u0000\u062c\u062d\u0005"+ - "r\u0000\u0000\u062d\u062e\u0005n\u0000\u0000\u062e\u00e8\u0001\u0000\u0000"+ - "\u0000\u062f\u0630\u0005s\u0000\u0000\u0630\u0631\u0005t\u0000\u0000\u0631"+ - "\u0632\u0005a\u0000\u0000\u0632\u0633\u0005r\u0000\u0000\u0633\u0634\u0005"+ - "t\u0000\u0000\u0634\u00ea\u0001\u0000\u0000\u0000\u0635\u0636\u0005p\u0000"+ - "\u0000\u0636\u0637\u0005a\u0000\u0000\u0637\u0638\u0005r\u0000\u0000\u0638"+ - "\u0639\u0005a\u0000\u0000\u0639\u063a\u0005m\u0000\u0000\u063a\u00ec\u0001"+ - "\u0000\u0000\u0000\u063b\u063c\u0005r\u0000\u0000\u063c\u063d\u0005e\u0000"+ - "\u0000\u063d\u063e\u0005s\u0000\u0000\u063e\u063f\u0005u\u0000\u0000\u063f"+ - "\u0640\u0005l\u0000\u0000\u0640\u0641\u0005t\u0000\u0000\u0641\u00ee\u0001"+ - "\u0000\u0000\u0000\u0642\u0643\u0005l\u0000\u0000\u0643\u0644\u0005o\u0000"+ - "\u0000\u0644\u0645\u0005c\u0000\u0000\u0645\u0646\u0005a\u0000\u0000\u0646"+ - "\u0647\u0005l\u0000\u0000\u0647\u00f0\u0001\u0000\u0000\u0000\u0648\u0649"+ - "\u0005g\u0000\u0000\u0649\u064a\u0005l\u0000\u0000\u064a\u064b\u0005o"+ - "\u0000\u0000\u064b\u064c\u0005b\u0000\u0000\u064c\u064d\u0005a\u0000\u0000"+ - "\u064d\u064e\u0005l\u0000\u0000\u064e\u00f2\u0001\u0000\u0000\u0000\u064f"+ - "\u0650\u0005t\u0000\u0000\u0650\u0651\u0005a\u0000\u0000\u0651\u0652\u0005"+ - "b\u0000\u0000\u0652\u0653\u0005l\u0000\u0000\u0653\u0654\u0005e\u0000"+ - "\u0000\u0654\u00f4\u0001\u0000\u0000\u0000\u0655\u0656\u0005m\u0000\u0000"+ - "\u0656\u0657\u0005e\u0000\u0000\u0657\u0658\u0005m\u0000\u0000\u0658\u0659"+ - "\u0005o\u0000\u0000\u0659\u065a\u0005r\u0000\u0000\u065a\u065b\u0005y"+ - "\u0000\u0000\u065b\u00f6\u0001\u0000\u0000\u0000\u065c\u065d\u0005e\u0000"+ - "\u0000\u065d\u065e\u0005l\u0000\u0000\u065e\u065f\u0005e\u0000\u0000\u065f"+ - "\u0660\u0005m\u0000\u0000\u0660\u00f8\u0001\u0000\u0000\u0000\u0661\u0662"+ - "\u0005d\u0000\u0000\u0662\u0663\u0005a\u0000\u0000\u0663\u0664\u0005t"+ - "\u0000\u0000\u0664\u0665\u0005a\u0000\u0000\u0665\u00fa\u0001\u0000\u0000"+ - "\u0000\u0666\u0667\u0005o\u0000\u0000\u0667\u0668\u0005f\u0000\u0000\u0668"+ - "\u0669\u0005f\u0000\u0000\u0669\u066a\u0005s\u0000\u0000\u066a\u066b\u0005"+ - "e\u0000\u0000\u066b\u066c\u0005t\u0000\u0000\u066c\u00fc\u0001\u0000\u0000"+ - "\u0000\u066d\u066e\u0005i\u0000\u0000\u066e\u066f\u0005m\u0000\u0000\u066f"+ - "\u0670\u0005p\u0000\u0000\u0670\u0671\u0005o\u0000\u0000\u0671\u0672\u0005"+ - "r\u0000\u0000\u0672\u0673\u0005t\u0000\u0000\u0673\u00fe\u0001\u0000\u0000"+ - "\u0000\u0674\u0675\u0005e\u0000\u0000\u0675\u0676\u0005x\u0000\u0000\u0676"+ - "\u0677\u0005p\u0000\u0000\u0677\u0678\u0005o\u0000\u0000\u0678\u0679\u0005"+ - "r\u0000\u0000\u0679\u067a\u0005t\u0000\u0000\u067a\u0100\u0001\u0000\u0000"+ - "\u0000\u067b\u067c\u0005m\u0000\u0000\u067c\u067d\u0005o\u0000\u0000\u067d"+ - "\u067e\u0005d\u0000\u0000\u067e\u067f\u0005u\u0000\u0000\u067f\u0680\u0005"+ - "l\u0000\u0000\u0680\u0681\u0005e\u0000\u0000\u0681\u0102\u0001\u0000\u0000"+ - "\u0000\u0682\u0683\u0005b\u0000\u0000\u0683\u0684\u0005i\u0000\u0000\u0684"+ - "\u0685\u0005n\u0000\u0000\u0685\u0686\u0005a\u0000\u0000\u0686\u0687\u0005"+ - "r\u0000\u0000\u0687\u0688\u0005y\u0000\u0000\u0688\u0104\u0001\u0000\u0000"+ - "\u0000\u0689\u068a\u0005q\u0000\u0000\u068a\u068b\u0005u\u0000\u0000\u068b"+ - "\u068c\u0005o\u0000\u0000\u068c\u068d\u0005t\u0000\u0000\u068d\u068e\u0005"+ - "e\u0000\u0000\u068e\u0106\u0001\u0000\u0000\u0000\u068f\u0690\u0005s\u0000"+ - "\u0000\u0690\u0691\u0005c\u0000\u0000\u0691\u0692\u0005r\u0000\u0000\u0692"+ - "\u0693\u0005i\u0000\u0000\u0693\u0694\u0005p\u0000\u0000\u0694\u0695\u0005"+ - "t\u0000\u0000\u0695\u0108\u0001\u0000\u0000\u0000\u0696\u0697\u0005r\u0000"+ - "\u0000\u0697\u0698\u0005e\u0000\u0000\u0698\u0699\u0005g\u0000\u0000\u0699"+ - "\u069a\u0005i\u0000\u0000\u069a\u069b\u0005s\u0000\u0000\u069b\u069c\u0005"+ - "t\u0000\u0000\u069c\u069d\u0005e\u0000\u0000\u069d\u069e\u0005r\u0000"+ - "\u0000\u069e\u010a\u0001\u0000\u0000\u0000\u069f\u06a0\u0005i\u0000\u0000"+ - "\u06a0\u06a1\u0005n\u0000\u0000\u06a1\u06a2\u0005v\u0000\u0000\u06a2\u06a3"+ - "\u0005o\u0000\u0000\u06a3\u06a4\u0005k\u0000\u0000\u06a4\u06a5\u0005e"+ - "\u0000\u0000\u06a5\u010c\u0001\u0000\u0000\u0000\u06a6\u06a7\u0005g\u0000"+ - "\u0000\u06a7\u06a8\u0005e\u0000\u0000\u06a8\u06a9\u0005t\u0000\u0000\u06a9"+ - "\u010e\u0001\u0000\u0000\u0000\u06aa\u06ab\u0005a\u0000\u0000\u06ab\u06ac"+ - "\u0005s\u0000\u0000\u06ac\u06ad\u0005s\u0000\u0000\u06ad\u06ae\u0005e"+ - "\u0000\u0000\u06ae\u06af\u0005r\u0000\u0000\u06af\u06b0\u0005t\u0000\u0000"+ - "\u06b0\u06b1\u0005_\u0000\u0000\u06b1\u06b2\u0005m\u0000\u0000\u06b2\u06b3"+ - "\u0005a\u0000\u0000\u06b3\u06b4\u0005l\u0000\u0000\u06b4\u06b5\u0005f"+ - "\u0000\u0000\u06b5\u06b6\u0005o\u0000\u0000\u06b6\u06b7\u0005r\u0000\u0000"+ - "\u06b7\u06b8\u0005m\u0000\u0000\u06b8\u06b9\u0005e\u0000\u0000\u06b9\u06ba"+ - "\u0005d\u0000\u0000\u06ba\u0110\u0001\u0000\u0000\u0000\u06bb\u06bc\u0005"+ - "a\u0000\u0000\u06bc\u06bd\u0005s\u0000\u0000\u06bd\u06be\u0005s\u0000"+ - "\u0000\u06be\u06bf\u0005e\u0000\u0000\u06bf\u06c0\u0005r\u0000\u0000\u06c0"+ - "\u06c1\u0005t\u0000\u0000\u06c1\u06c2\u0005_\u0000\u0000\u06c2\u06c3\u0005"+ - "i\u0000\u0000\u06c3\u06c4\u0005n\u0000\u0000\u06c4\u06c5\u0005v\u0000"+ - "\u0000\u06c5\u06c6\u0005a\u0000\u0000\u06c6\u06c7\u0005l\u0000\u0000\u06c7"+ - "\u06c8\u0005i\u0000\u0000\u06c8\u06c9\u0005d\u0000\u0000\u06c9\u0112\u0001"+ - "\u0000\u0000\u0000\u06ca\u06cb\u0005a\u0000\u0000\u06cb\u06cc\u0005s\u0000"+ - "\u0000\u06cc\u06cd\u0005s\u0000\u0000\u06cd\u06ce\u0005e\u0000\u0000\u06ce"+ - "\u06cf\u0005r\u0000\u0000\u06cf\u06d0\u0005t\u0000\u0000\u06d0\u06d1\u0005"+ - "_\u0000\u0000\u06d1\u06d2\u0005u\u0000\u0000\u06d2\u06d3\u0005n\u0000"+ - "\u0000\u06d3\u06d4\u0005l\u0000\u0000\u06d4\u06d5\u0005i\u0000\u0000\u06d5"+ - "\u06d6\u0005n\u0000\u0000\u06d6\u06d7\u0005k\u0000\u0000\u06d7\u06d8\u0005"+ - "a\u0000\u0000\u06d8\u06d9\u0005b\u0000\u0000\u06d9\u06da\u0005l\u0000"+ - "\u0000\u06da\u06db\u0005e\u0000\u0000\u06db\u0114\u0001\u0000\u0000\u0000"+ - "\u06dc\u06dd\u0005a\u0000\u0000\u06dd\u06de\u0005s\u0000\u0000\u06de\u06df"+ - "\u0005s\u0000\u0000\u06df\u06e0\u0005e\u0000\u0000\u06e0\u06e1\u0005r"+ - "\u0000\u0000\u06e1\u06e2\u0005t\u0000\u0000\u06e2\u06e3\u0005_\u0000\u0000"+ - "\u06e3\u06e4\u0005r\u0000\u0000\u06e4\u06e5\u0005e\u0000\u0000\u06e5\u06e6"+ - "\u0005t\u0000\u0000\u06e6\u06e7\u0005u\u0000\u0000\u06e7\u06e8\u0005r"+ - "\u0000\u0000\u06e8\u06e9\u0005n\u0000\u0000\u06e9\u0116\u0001\u0000\u0000"+ - "\u0000\u06ea\u06eb\u0005a\u0000\u0000\u06eb\u06ec\u0005s\u0000\u0000\u06ec"+ - "\u06ed\u0005s\u0000\u0000\u06ed\u06ee\u0005e\u0000\u0000\u06ee\u06ef\u0005"+ - "r\u0000\u0000\u06ef\u06f0\u0005t\u0000\u0000\u06f0\u06f1\u0005_\u0000"+ - "\u0000\u06f1\u06f2\u0005r\u0000\u0000\u06f2\u06f3\u0005e\u0000\u0000\u06f3"+ - "\u06f4\u0005t\u0000\u0000\u06f4\u06f5\u0005u\u0000\u0000\u06f5\u06f6\u0005"+ - "r\u0000\u0000\u06f6\u06f7\u0005n\u0000\u0000\u06f7\u06f8\u0005_\u0000"+ - "\u0000\u06f8\u06f9\u0005c\u0000\u0000\u06f9\u06fa\u0005a\u0000\u0000\u06fa"+ - "\u06fb\u0005n\u0000\u0000\u06fb\u06fc\u0005o\u0000\u0000\u06fc\u06fd\u0005"+ - "n\u0000\u0000\u06fd\u06fe\u0005i\u0000\u0000\u06fe\u06ff\u0005c\u0000"+ - "\u0000\u06ff\u0700\u0005a\u0000\u0000\u0700\u0701\u0005l\u0000\u0000\u0701"+ - "\u0702\u0005_\u0000\u0000\u0702\u0703\u0005n\u0000\u0000\u0703\u0704\u0005"+ - "a\u0000\u0000\u0704\u0705\u0005n\u0000\u0000\u0705\u0118\u0001\u0000\u0000"+ - "\u0000\u0706\u0707\u0005a\u0000\u0000\u0707\u0708\u0005s\u0000\u0000\u0708"+ - "\u0709\u0005s\u0000\u0000\u0709\u070a\u0005e\u0000\u0000\u070a\u070b\u0005"+ - "r\u0000\u0000\u070b\u070c\u0005t\u0000\u0000\u070c\u070d\u0005_\u0000"+ - "\u0000\u070d\u070e\u0005r\u0000\u0000\u070e\u070f\u0005e\u0000\u0000\u070f"+ - "\u0710\u0005t\u0000\u0000\u0710\u0711\u0005u\u0000\u0000\u0711\u0712\u0005"+ - "r\u0000\u0000\u0712\u0713\u0005n\u0000\u0000\u0713\u0714\u0005_\u0000"+ - "\u0000\u0714\u0715\u0005a\u0000\u0000\u0715\u0716\u0005r\u0000\u0000\u0716"+ - "\u0717\u0005i\u0000\u0000\u0717\u0718\u0005t\u0000\u0000\u0718\u0719\u0005"+ - "h\u0000\u0000\u0719\u071a\u0005m\u0000\u0000\u071a\u071b\u0005e\u0000"+ - "\u0000\u071b\u071c\u0005t\u0000\u0000\u071c\u071d\u0005i\u0000\u0000\u071d"+ - "\u071e\u0005c\u0000\u0000\u071e\u071f\u0005_\u0000\u0000\u071f\u0720\u0005"+ - "n\u0000\u0000\u0720\u0721\u0005a\u0000\u0000\u0721\u0722\u0005n\u0000"+ - "\u0000\u0722\u011a\u0001\u0000\u0000\u0000\u0723\u0724\u0005a\u0000\u0000"+ - "\u0724\u0725\u0005s\u0000\u0000\u0725\u0726\u0005s\u0000\u0000\u0726\u0727"+ - "\u0005e\u0000\u0000\u0727\u0728\u0005r\u0000\u0000\u0728\u0729\u0005t"+ - "\u0000\u0000\u0729\u072a\u0005_\u0000\u0000\u072a\u072b\u0005t\u0000\u0000"+ - "\u072b\u072c\u0005r\u0000\u0000\u072c\u072d\u0005a\u0000\u0000\u072d\u072e"+ - "\u0005p\u0000\u0000\u072e\u011c\u0001\u0000\u0000\u0000\u072f\u0730\u0005"+ - "a\u0000\u0000\u0730\u0731\u0005s\u0000\u0000\u0731\u0732\u0005s\u0000"+ - "\u0000\u0732\u0733\u0005e\u0000\u0000\u0733\u0734\u0005r\u0000\u0000\u0734"+ - "\u0735\u0005t\u0000\u0000\u0735\u0736\u0005_\u0000\u0000\u0736\u0737\u0005"+ - "e\u0000\u0000\u0737\u0738\u0005x\u0000\u0000\u0738\u0739\u0005h\u0000"+ - "\u0000\u0739\u073a\u0005a\u0000\u0000\u073a\u073b\u0005u\u0000\u0000\u073b"+ - "\u073c\u0005s\u0000\u0000\u073c\u073d\u0005t\u0000\u0000\u073d\u073e\u0005"+ - "i\u0000\u0000\u073e\u073f\u0005o\u0000\u0000\u073f\u0740\u0005n\u0000"+ - "\u0000\u0740\u011e\u0001\u0000\u0000\u0000\u0741\u0742\u0005i\u0000\u0000"+ - "\u0742\u0743\u0005n\u0000\u0000\u0743\u0744\u0005p\u0000\u0000\u0744\u0745"+ - "\u0005u\u0000\u0000\u0745\u0746\u0005t\u0000\u0000\u0746\u0120\u0001\u0000"+ - "\u0000\u0000\u0747\u0748\u0005o\u0000\u0000\u0748\u0749\u0005u\u0000\u0000"+ - "\u0749\u074a\u0005t\u0000\u0000\u074a\u074b\u0005p\u0000\u0000\u074b\u074c"+ - "\u0005u\u0000\u0000\u074c\u074d\u0005t\u0000\u0000\u074d\u0122\u0001\u0000"+ - "\u0000\u0000\u074e\u074f\u0003\u0145\u00a2\u0000\u074f\u0124\u0001\u0000"+ - "\u0000\u0000\u0750\u0751\u0005v\u0000\u0000\u0751\u0752\u00051\u0000\u0000"+ - "\u0752\u0753\u00052\u0000\u0000\u0753\u0754\u00058\u0000\u0000\u0754\u0126"+ - "\u0001\u0000\u0000\u0000\u0755\u0757\u0007\u0001\u0000\u0000\u0756\u0755"+ - "\u0001\u0000\u0000\u0000\u0757\u0758\u0001\u0000\u0000\u0000\u0758\u0756"+ - "\u0001\u0000\u0000\u0000\u0758\u0759\u0001\u0000\u0000\u0000\u0759\u075a"+ - "\u0001\u0000\u0000\u0000\u075a\u075b\u0006\u0093\u0000\u0000\u075b\u0128"+ - "\u0001\u0000\u0000\u0000\u075c\u075d\u0005(\u0000\u0000\u075d\u075e\u0005"+ - ";\u0000\u0000\u075e\u0762\u0001\u0000\u0000\u0000\u075f\u0761\t\u0000"+ - "\u0000\u0000\u0760\u075f\u0001\u0000\u0000\u0000\u0761\u0764\u0001\u0000"+ - "\u0000\u0000\u0762\u0763\u0001\u0000\u0000\u0000\u0762\u0760\u0001\u0000"+ - "\u0000\u0000\u0763\u0765\u0001\u0000\u0000\u0000\u0764\u0762\u0001\u0000"+ - "\u0000\u0000\u0765\u0766\u0005;\u0000\u0000\u0766\u0772\u0005)\u0000\u0000"+ - "\u0767\u0768\u0005;\u0000\u0000\u0768\u0769\u0005;\u0000\u0000\u0769\u076d"+ - "\u0001\u0000\u0000\u0000\u076a\u076c\t\u0000\u0000\u0000\u076b\u076a\u0001"+ - "\u0000\u0000\u0000\u076c\u076f\u0001\u0000\u0000\u0000\u076d\u076e\u0001"+ - "\u0000\u0000\u0000\u076d\u076b\u0001\u0000\u0000\u0000\u076e\u0770\u0001"+ - "\u0000\u0000\u0000\u076f\u076d\u0001\u0000\u0000\u0000\u0770\u0772\u0005"+ - "\n\u0000\u0000\u0771\u075c\u0001\u0000\u0000\u0000\u0771\u0767\u0001\u0000"+ - "\u0000\u0000\u0772\u0773\u0001\u0000\u0000\u0000\u0773\u0774\u0006\u0094"+ - "\u0000\u0000\u0774\u012a\u0001\u0000\u0000\u0000\u0775\u0776\u0007\u0002"+ - "\u0000\u0000\u0776\u012c\u0001\u0000\u0000\u0000\u0777\u077e\u0003\u0133"+ - "\u0099\u0000\u0778\u077a\u0005_\u0000\u0000\u0779\u0778\u0001\u0000\u0000"+ - "\u0000\u0779\u077a\u0001\u0000\u0000\u0000\u077a\u077b\u0001\u0000\u0000"+ - "\u0000\u077b\u077d\u0003\u0133\u0099\u0000\u077c\u0779\u0001\u0000\u0000"+ - "\u0000\u077d\u0780\u0001\u0000\u0000\u0000\u077e\u077c\u0001\u0000\u0000"+ - "\u0000\u077e\u077f\u0001\u0000\u0000\u0000\u077f\u012e\u0001\u0000\u0000"+ - "\u0000\u0780\u077e\u0001\u0000\u0000\u0000\u0781\u0788\u0003\u0135\u009a"+ - "\u0000\u0782\u0784\u0005_\u0000\u0000\u0783\u0782\u0001\u0000\u0000\u0000"+ - "\u0783\u0784\u0001\u0000\u0000\u0000\u0784\u0785\u0001\u0000\u0000\u0000"+ - "\u0785\u0787\u0003\u0135\u009a\u0000\u0786\u0783\u0001\u0000\u0000\u0000"+ - "\u0787\u078a\u0001\u0000\u0000\u0000\u0788\u0786\u0001\u0000\u0000\u0000"+ - "\u0788\u0789\u0001\u0000\u0000\u0000\u0789\u0130\u0001\u0000\u0000\u0000"+ - "\u078a\u0788\u0001\u0000\u0000\u0000\u078b\u078c\u0007\u0003\u0000\u0000"+ - "\u078c\u0132\u0001\u0000\u0000\u0000\u078d\u078e\u0007\u0004\u0000\u0000"+ - "\u078e\u0134\u0001\u0000\u0000\u0000\u078f\u0790\u0007\u0005\u0000\u0000"+ - "\u0790\u0136\u0001\u0000\u0000\u0000\u0791\u0792\u0007\u0006\u0000\u0000"+ - "\u0792\u0138\u0001\u0000\u0000\u0000\u0793\u0799\u0003\u012d\u0096\u0000"+ - "\u0794\u0795\u00050\u0000\u0000\u0795\u0796\u0005x\u0000\u0000\u0796\u0797"+ - "\u0001\u0000\u0000\u0000\u0797\u0799\u0003\u012f\u0097\u0000\u0798\u0793"+ - "\u0001\u0000\u0000\u0000\u0798\u0794\u0001\u0000\u0000\u0000\u0799\u013a"+ - "\u0001\u0000\u0000\u0000\u079a\u079b\u0003\u0131\u0098\u0000\u079b\u079c"+ - "\u0003\u0139\u009c\u0000\u079c\u013c\u0001\u0000\u0000\u0000\u079d\u079e"+ - "\u0003\u012d\u0096\u0000\u079e\u013e\u0001\u0000\u0000\u0000\u079f\u07a0"+ - "\u0003\u012f\u0097\u0000\u07a0\u0140\u0001\u0000\u0000\u0000\u07a1\u07a3"+ - "\u0003\u0131\u0098\u0000\u07a2\u07a1\u0001\u0000\u0000\u0000\u07a2\u07a3"+ - "\u0001\u0000\u0000\u0000\u07a3\u07a4\u0001\u0000\u0000\u0000\u07a4\u07a5"+ - "\u0003\u012d\u0096\u0000\u07a5\u07a7\u0005.\u0000\u0000\u07a6\u07a8\u0003"+ - "\u013d\u009e\u0000\u07a7\u07a6\u0001\u0000\u0000\u0000\u07a7\u07a8\u0001"+ - "\u0000\u0000\u0000\u07a8\u07f0\u0001\u0000\u0000\u0000\u07a9\u07ab\u0003"+ - "\u0131\u0098\u0000\u07aa\u07a9\u0001\u0000\u0000\u0000\u07aa\u07ab\u0001"+ - "\u0000\u0000\u0000\u07ab\u07ac\u0001\u0000\u0000\u0000\u07ac\u07b1\u0003"+ - "\u012d\u0096\u0000\u07ad\u07af\u0005.\u0000\u0000\u07ae\u07b0\u0003\u013d"+ - "\u009e\u0000\u07af\u07ae\u0001\u0000\u0000\u0000\u07af\u07b0\u0001\u0000"+ - "\u0000\u0000\u07b0\u07b2\u0001\u0000\u0000\u0000\u07b1\u07ad\u0001\u0000"+ - "\u0000\u0000\u07b1\u07b2\u0001\u0000\u0000\u0000\u07b2\u07b3\u0001\u0000"+ - "\u0000\u0000\u07b3\u07b5\u0007\u0007\u0000\u0000\u07b4\u07b6\u0003\u0131"+ - "\u0098\u0000\u07b5\u07b4\u0001\u0000\u0000\u0000\u07b5\u07b6\u0001\u0000"+ - "\u0000\u0000\u07b6\u07b7\u0001\u0000\u0000\u0000\u07b7\u07b8\u0003\u012d"+ - "\u0096\u0000\u07b8\u07f0\u0001\u0000\u0000\u0000\u07b9\u07bb\u0003\u0131"+ - "\u0098\u0000\u07ba\u07b9\u0001\u0000\u0000\u0000\u07ba\u07bb\u0001\u0000"+ - "\u0000\u0000\u07bb\u07bc\u0001\u0000\u0000\u0000\u07bc\u07bd\u00050\u0000"+ - "\u0000\u07bd\u07be\u0005x\u0000\u0000\u07be\u07bf\u0001\u0000\u0000\u0000"+ - "\u07bf\u07c0\u0003\u012f\u0097\u0000\u07c0\u07c2\u0005.\u0000\u0000\u07c1"+ - "\u07c3\u0003\u013f\u009f\u0000\u07c2\u07c1\u0001\u0000\u0000\u0000\u07c2"+ - "\u07c3\u0001\u0000\u0000\u0000\u07c3\u07f0\u0001\u0000\u0000\u0000\u07c4"+ - "\u07c6\u0003\u0131\u0098\u0000\u07c5\u07c4\u0001\u0000\u0000\u0000\u07c5"+ - "\u07c6\u0001\u0000\u0000\u0000\u07c6\u07c7\u0001\u0000\u0000\u0000\u07c7"+ - "\u07c8\u00050\u0000\u0000\u07c8\u07c9\u0005x\u0000\u0000\u07c9\u07ca\u0001"+ - "\u0000\u0000\u0000\u07ca\u07cf\u0003\u012f\u0097\u0000\u07cb\u07cd\u0005"+ - ".\u0000\u0000\u07cc\u07ce\u0003\u013f\u009f\u0000\u07cd\u07cc\u0001\u0000"+ - "\u0000\u0000\u07cd\u07ce\u0001\u0000\u0000\u0000\u07ce\u07d0\u0001\u0000"+ - "\u0000\u0000\u07cf\u07cb\u0001\u0000\u0000\u0000\u07cf\u07d0\u0001\u0000"+ - "\u0000\u0000\u07d0\u07d1\u0001\u0000\u0000\u0000\u07d1\u07d3\u0007\b\u0000"+ - "\u0000\u07d2\u07d4\u0003\u0131\u0098\u0000\u07d3\u07d2\u0001\u0000\u0000"+ - "\u0000\u07d3\u07d4\u0001\u0000\u0000\u0000\u07d4\u07d5\u0001\u0000\u0000"+ - "\u0000\u07d5\u07d6\u0003\u012d\u0096\u0000\u07d6\u07f0\u0001\u0000\u0000"+ - "\u0000\u07d7\u07d9\u0003\u0131\u0098\u0000\u07d8\u07d7\u0001\u0000\u0000"+ - "\u0000\u07d8\u07d9\u0001\u0000\u0000\u0000\u07d9\u07da\u0001\u0000\u0000"+ - "\u0000\u07da\u07db\u0005i\u0000\u0000\u07db\u07dc\u0005n\u0000\u0000\u07dc"+ - "\u07f0\u0005f\u0000\u0000\u07dd\u07df\u0003\u0131\u0098\u0000\u07de\u07dd"+ - "\u0001\u0000\u0000\u0000\u07de\u07df\u0001\u0000\u0000\u0000\u07df\u07e0"+ - "\u0001\u0000\u0000\u0000\u07e0\u07e1\u0005n\u0000\u0000\u07e1\u07e2\u0005"+ - "a\u0000\u0000\u07e2\u07f0\u0005n\u0000\u0000\u07e3\u07e5\u0003\u0131\u0098"+ - "\u0000\u07e4\u07e3\u0001\u0000\u0000\u0000\u07e4\u07e5\u0001\u0000\u0000"+ - "\u0000\u07e5\u07e6\u0001\u0000\u0000\u0000\u07e6\u07e7\u0005n\u0000\u0000"+ - "\u07e7\u07e8\u0005a\u0000\u0000\u07e8\u07e9\u0005n\u0000\u0000\u07e9\u07ea"+ - "\u0005:\u0000\u0000\u07ea\u07eb\u0001\u0000\u0000\u0000\u07eb\u07ec\u0005"+ - "0\u0000\u0000\u07ec\u07ed\u0005x\u0000\u0000\u07ed\u07ee\u0001\u0000\u0000"+ - "\u0000\u07ee\u07f0\u0003\u012f\u0097\u0000\u07ef\u07a2\u0001\u0000\u0000"+ - "\u0000\u07ef\u07aa\u0001\u0000\u0000\u0000\u07ef\u07ba\u0001\u0000\u0000"+ - "\u0000\u07ef\u07c5\u0001\u0000\u0000\u0000\u07ef\u07d8\u0001\u0000\u0000"+ - "\u0000\u07ef\u07de\u0001\u0000\u0000\u0000\u07ef\u07e4\u0001\u0000\u0000"+ - "\u0000\u07f0\u0142\u0001\u0000\u0000\u0000\u07f1\u0805\u0005\"\u0000\u0000"+ - "\u07f2\u0804\u0003\u014b\u00a5\u0000\u07f3\u0804\u0007\t\u0000\u0000\u07f4"+ - "\u07f5\u0005\\\u0000\u0000\u07f5\u07f6\u0003\u0135\u009a\u0000\u07f6\u07f7"+ - "\u0003\u0135\u009a\u0000\u07f7\u0804\u0001\u0000\u0000\u0000\u07f8\u07f9"+ - "\u0005\\\u0000\u0000\u07f9\u07fa\u0005u\u0000\u0000\u07fa\u07fb\u0005"+ - "{\u0000\u0000\u07fb\u07fd\u0001\u0000\u0000\u0000\u07fc\u07fe\u0003\u0135"+ - "\u009a\u0000\u07fd\u07fc\u0001\u0000\u0000\u0000\u07fe\u07ff\u0001\u0000"+ - "\u0000\u0000\u07ff\u07fd\u0001\u0000\u0000\u0000\u07ff\u0800\u0001\u0000"+ - "\u0000\u0000\u0800\u0801\u0001\u0000\u0000\u0000\u0801\u0802\u0005}\u0000"+ - "\u0000\u0802\u0804\u0001\u0000\u0000\u0000\u0803\u07f2\u0001\u0000\u0000"+ - "\u0000\u0803\u07f3\u0001\u0000\u0000\u0000\u0803\u07f4\u0001\u0000\u0000"+ - "\u0000\u0803\u07f8\u0001\u0000\u0000\u0000\u0804\u0807\u0001\u0000\u0000"+ - "\u0000\u0805\u0803\u0001\u0000\u0000\u0000\u0805\u0806\u0001\u0000\u0000"+ - "\u0000\u0806\u0808\u0001\u0000\u0000\u0000\u0807\u0805\u0001\u0000\u0000"+ - "\u0000\u0808\u0809\u0005\"\u0000\u0000\u0809\u0144\u0001\u0000\u0000\u0000"+ - "\u080a\u080f\u0005$\u0000\u0000\u080b\u0810\u0003\u0137\u009b\u0000\u080c"+ - "\u0810\u0003\u0133\u0099\u0000\u080d\u0810\u0005_\u0000\u0000\u080e\u0810"+ - "\u0003\u012b\u0095\u0000\u080f\u080b\u0001\u0000\u0000\u0000\u080f\u080c"+ - "\u0001\u0000\u0000\u0000\u080f\u080d\u0001\u0000\u0000\u0000\u080f\u080e"+ - "\u0001\u0000\u0000\u0000\u0810\u0811\u0001\u0000\u0000\u0000\u0811\u080f"+ - "\u0001\u0000\u0000\u0000\u0811\u0812\u0001\u0000\u0000\u0000\u0812\u0146"+ - "\u0001\u0000\u0000\u0000\u0813\u0814\u0007\n\u0000\u0000\u0814\u0148\u0001"+ - "\u0000\u0000\u0000\u0815\u0818\u0003c1\u0000\u0816\u0818\u0003e2\u0000"+ - "\u0817\u0815\u0001\u0000\u0000\u0000\u0817\u0816\u0001\u0000\u0000\u0000"+ - "\u0818\u014a\u0001\u0000\u0000\u0000\u0819\u081a\b\u000b\u0000\u0000\u081a"+ - "\u014c\u0001\u0000\u0000\u0000\u081b\u081c\u0007\f\u0000\u0000\u081c\u014e"+ - "\u0001\u0000\u0000\u0000\u081d\u081e\u0007\r\u0000\u0000\u081e\u0150\u0001"+ - "\u0000\u0000\u0000\u081f\u0820\u0007\u000e\u0000\u0000\u0820\u0152\u0001"+ - "\u0000\u0000\u0000\u0821\u0824\u0003\u014d\u00a6\u0000\u0822\u0824\u0003"+ - "\u0157\u00ab\u0000\u0823\u0821\u0001\u0000\u0000\u0000\u0823\u0822\u0001"+ - "\u0000\u0000\u0000\u0824\u0154\u0001\u0000\u0000\u0000\u0825\u0828\u0003"+ - "\u014f\u00a7\u0000\u0826\u0828\u0003\u0157\u00ab\u0000\u0827\u0825\u0001"+ - "\u0000\u0000\u0000\u0827\u0826\u0001\u0000\u0000\u0000\u0828\u0156\u0001"+ - "\u0000\u0000\u0000\u0829\u082a\u0007\u000f\u0000\u0000\u082a\u0845\u0003"+ - "\u0151\u00a8\u0000\u082b\u082c\u0007\u0010\u0000\u0000\u082c\u082d\u0007"+ - "\u0011\u0000\u0000\u082d\u0845\u0003\u0151\u00a8\u0000\u082e\u082f\u0007"+ - "\u0012\u0000\u0000\u082f\u0830\u0007\u0013\u0000\u0000\u0830\u0845\u0003"+ - "\u0151\u00a8\u0000\u0831\u0832\u0007\u0014\u0000\u0000\u0832\u0833\u0003"+ - "\u0151\u00a8\u0000\u0833\u0834\u0003\u0151\u00a8\u0000\u0834\u0845\u0001"+ - "\u0000\u0000\u0000\u0835\u0836\u0007\u0015\u0000\u0000\u0836\u0837\u0007"+ - "\u0016\u0000\u0000\u0837\u0838\u0003\u0151\u00a8\u0000\u0838\u0839\u0003"+ - "\u0151\u00a8\u0000\u0839\u0845\u0001\u0000\u0000\u0000\u083a\u083b\u0007"+ - "\u0017\u0000\u0000\u083b\u083c\u0007\u0018\u0000\u0000\u083c\u083d\u0003"+ - "\u0151\u00a8\u0000\u083d\u083e\u0003\u0151\u00a8\u0000\u083e\u0845\u0001"+ - "\u0000\u0000\u0000\u083f\u0840\u0007\u0019\u0000\u0000\u0840\u0841\u0003"+ - "\u0151\u00a8\u0000\u0841\u0842\u0003\u0151\u00a8\u0000\u0842\u0843\u0003"+ - "\u0151\u00a8\u0000\u0843\u0845\u0001\u0000\u0000\u0000\u0844\u0829\u0001"+ - "\u0000\u0000\u0000\u0844\u082b\u0001\u0000\u0000\u0000\u0844\u082e\u0001"+ - "\u0000\u0000\u0000\u0844\u0831\u0001\u0000\u0000\u0000\u0844\u0835\u0001"+ - "\u0000\u0000\u0000\u0844\u083a\u0001\u0000\u0000\u0000\u0844\u083f\u0001"+ - "\u0000\u0000\u0000\u0845\u0158\u0001\u0000\u0000\u0000,\u0000\u026a\u0274"+ - "\u0290\u02a4\u02a8\u0495\u04e0\u0578\u061c\u0758\u0762\u076d\u0771\u0779"+ - "\u077e\u0783\u0788\u0798\u07a2\u07a7\u07aa\u07af\u07b1\u07b5\u07ba\u07c2"+ - "\u07c5\u07cd\u07cf\u07d3\u07d8\u07de\u07e4\u07ef\u07ff\u0803\u0805\u080f"+ - "\u0811\u0817\u0823\u0827\u0844\u0001\u0006\u0000\u0000"; + "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0003p\u04eb\bp\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0003q\u0583"+ + "\bq\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001r\u0003r\u0627\br\u0001s\u0001s\u0001s\u0001s\u0001s\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001v\u0001v\u0001v\u0001v\u0001v\u0001v\u0001w\u0001w\u0001"+ + "w\u0001w\u0001w\u0001w\u0001x\u0001x\u0001x\u0001x\u0001x\u0001x\u0001"+ + "x\u0001y\u0001y\u0001y\u0001y\u0001y\u0001y\u0001z\u0001z\u0001z\u0001"+ + "z\u0001z\u0001z\u0001z\u0001{\u0001{\u0001{\u0001{\u0001{\u0001{\u0001"+ + "|\u0001|\u0001|\u0001|\u0001|\u0001|\u0001|\u0001}\u0001}\u0001}\u0001"+ + "}\u0001}\u0001~\u0001~\u0001~\u0001~\u0001~\u0001\u007f\u0001\u007f\u0001"+ + "\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u0080\u0001"+ + "\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001"+ + "\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001"+ + "\u0081\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001"+ + "\u0082\u0001\u0082\u0001\u0083\u0001\u0083\u0001\u0083\u0001\u0083\u0001"+ + "\u0083\u0001\u0083\u0001\u0083\u0001\u0084\u0001\u0084\u0001\u0084\u0001"+ + "\u0084\u0001\u0084\u0001\u0084\u0001\u0085\u0001\u0085\u0001\u0085\u0001"+ + "\u0085\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0086\u0001\u0086\u0001"+ + "\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001"+ + "\u0086\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001"+ + "\u0087\u0001\u0087\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088\u0001"+ + "\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001"+ + "\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001"+ + "\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u008a\u0001"+ + "\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001"+ + "\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001"+ + "\u008a\u0001\u008a\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001"+ + "\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001"+ + "\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001"+ + "\u008b\u0001\u008b\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001"+ + "\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001"+ + "\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008d\u0001\u008d\u0001"+ + "\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001"+ + "\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001"+ + "\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001"+ + "\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001"+ + "\u008d\u0001\u008d\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001"+ + "\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001"+ + "\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001"+ + "\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001"+ + "\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001"+ + "\u008e\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001"+ + "\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001"+ + "\u008f\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001"+ + "\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001"+ + "\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001"+ + "\u0090\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001"+ + "\u0091\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092\u0001"+ + "\u0092\u0001\u0092\u0001\u0093\u0001\u0093\u0001\u0094\u0001\u0094\u0001"+ + "\u0094\u0001\u0094\u0001\u0094\u0001\u0095\u0004\u0095\u0761\b\u0095\u000b"+ + "\u0095\f\u0095\u0762\u0001\u0095\u0001\u0095\u0001\u0096\u0001\u0096\u0001"+ + "\u0096\u0001\u0096\u0005\u0096\u076b\b\u0096\n\u0096\f\u0096\u076e\t\u0096"+ + "\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096"+ + "\u0005\u0096\u0776\b\u0096\n\u0096\f\u0096\u0779\t\u0096\u0001\u0096\u0003"+ + "\u0096\u077c\b\u0096\u0001\u0096\u0001\u0096\u0001\u0097\u0001\u0097\u0001"+ + "\u0098\u0001\u0098\u0003\u0098\u0784\b\u0098\u0001\u0098\u0005\u0098\u0787"+ + "\b\u0098\n\u0098\f\u0098\u078a\t\u0098\u0001\u0099\u0001\u0099\u0003\u0099"+ + "\u078e\b\u0099\u0001\u0099\u0005\u0099\u0791\b\u0099\n\u0099\f\u0099\u0794"+ + "\t\u0099\u0001\u009a\u0001\u009a\u0001\u009b\u0001\u009b\u0001\u009c\u0001"+ + "\u009c\u0001\u009d\u0001\u009d\u0001\u009e\u0001\u009e\u0001\u009e\u0001"+ + "\u009e\u0001\u009e\u0003\u009e\u07a3\b\u009e\u0001\u009f\u0001\u009f\u0001"+ + "\u009f\u0001\u00a0\u0001\u00a0\u0001\u00a1\u0001\u00a1\u0001\u00a2\u0003"+ + "\u00a2\u07ad\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0003\u00a2\u07b2"+ + "\b\u00a2\u0001\u00a2\u0003\u00a2\u07b5\b\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0001\u00a2\u0003\u00a2\u07ba\b\u00a2\u0003\u00a2\u07bc\b\u00a2\u0001"+ + "\u00a2\u0001\u00a2\u0003\u00a2\u07c0\b\u00a2\u0001\u00a2\u0001\u00a2\u0001"+ + "\u00a2\u0003\u00a2\u07c5\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001"+ + "\u00a2\u0001\u00a2\u0001\u00a2\u0003\u00a2\u07cd\b\u00a2\u0001\u00a2\u0003"+ + "\u00a2\u07d0\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001"+ + "\u00a2\u0001\u00a2\u0003\u00a2\u07d8\b\u00a2\u0003\u00a2\u07da\b\u00a2"+ + "\u0001\u00a2\u0001\u00a2\u0003\u00a2\u07de\b\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0001\u00a2\u0003\u00a2\u07e3\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0001\u00a2\u0003\u00a2\u07e9\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0001\u00a2\u0003\u00a2\u07ef\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0003\u00a2\u07fa\b\u00a2\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3"+ + "\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3"+ + "\u0001\u00a3\u0001\u00a3\u0004\u00a3\u0808\b\u00a3\u000b\u00a3\f\u00a3"+ + "\u0809\u0001\u00a3\u0001\u00a3\u0005\u00a3\u080e\b\u00a3\n\u00a3\f\u00a3"+ + "\u0811\t\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a4\u0001\u00a4\u0001\u00a4"+ + "\u0001\u00a4\u0001\u00a4\u0004\u00a4\u081a\b\u00a4\u000b\u00a4\f\u00a4"+ + "\u081b\u0001\u00a5\u0001\u00a5\u0001\u00a6\u0001\u00a6\u0003\u00a6\u0822"+ + "\b\u00a6\u0001\u00a7\u0001\u00a7\u0001\u00a8\u0001\u00a8\u0001\u00a9\u0001"+ + "\u00a9\u0001\u00aa\u0001\u00aa\u0001\u00ab\u0001\u00ab\u0003\u00ab\u082e"+ + "\b\u00ab\u0001\u00ac\u0001\u00ac\u0003\u00ac\u0832\b\u00ac\u0001\u00ad"+ + "\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad"+ + "\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad"+ + "\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad"+ + "\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad"+ + "\u0001\u00ad\u0001\u00ad\u0003\u00ad\u084f\b\u00ad\u0002\u076c\u0777\u0000"+ + "\u00ae\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006"+ + "\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e"+ + "\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017"+ + "/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%"+ + "K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f@\u0081A\u0083"+ + "B\u0085C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095K\u0097"+ + "L\u0099M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9U\u00ab"+ + "V\u00adW\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf"+ + "`\u00c1a\u00c3b\u00c5c\u00c7d\u00c9e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3"+ + "j\u00d5k\u00d7l\u00d9m\u00dbn\u00ddo\u00dfp\u00e1q\u00e3r\u00e5s\u00e7"+ + "t\u00e9u\u00ebv\u00edw\u00efx\u00f1y\u00f3z\u00f5{\u00f7|\u00f9}\u00fb"+ + "~\u00fd\u007f\u00ff\u0080\u0101\u0081\u0103\u0082\u0105\u0083\u0107\u0084"+ + "\u0109\u0085\u010b\u0086\u010d\u0087\u010f\u0088\u0111\u0089\u0113\u008a"+ + "\u0115\u008b\u0117\u008c\u0119\u008d\u011b\u008e\u011d\u008f\u011f\u0090"+ + "\u0121\u0091\u0123\u0092\u0125\u0093\u0127\u0094\u0129\u0095\u012b\u0096"+ + "\u012d\u0097\u012f\u0000\u0131\u0000\u0133\u0000\u0135\u0000\u0137\u0000"+ + "\u0139\u0000\u013b\u0000\u013d\u0000\u013f\u0000\u0141\u0000\u0143\u0000"+ + "\u0145\u0000\u0147\u0000\u0149\u0000\u014b\u0000\u014d\u0000\u014f\u0000"+ + "\u0151\u0000\u0153\u0000\u0155\u0000\u0157\u0000\u0159\u0000\u015b\u0000"+ + "\u0001\u0000\u001a\u0002\u0000ssuu\u0003\u0000\t\n\r\r \u000b\u0000!"+ + "!#\'*+-/::<@\\\\^^``||~~\u0002\u0000++--\u0001\u000009\u0003\u000009A"+ + "Faf\u0002\u0000AZaz\u0002\u0000EEee\u0002\u0000PPpp\u0003\u0000\t\n\'"+ + "\'\\\\\u0006\u0000\"\"\'\'\\\\nnrrtt\u0005\u0000\u0000\u001f\"\"\'\'\\"+ + "\\\u007f\u00ff\u0001\u0000\u0000\u007f\u0002\u0000\u0000\t\u000b\u007f"+ + "\u0001\u0000\u0080\u00bf\u0001\u0000\u00c2\u00df\u0001\u0000\u00e0\u00e0"+ + "\u0001\u0000\u00a0\u00bf\u0001\u0000\u00ed\u00ed\u0001\u0000\u0080\u009f"+ + "\u0002\u0000\u00e1\u00ec\u00ee\u00ef\u0001\u0000\u00f0\u00f0\u0001\u0000"+ + "\u0090\u00bf\u0001\u0000\u00f4\u00f4\u0001\u0000\u0080\u008f\u0001\u0000"+ + "\u00f1\u00f3\u08a6\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001"+ + "\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001"+ + "\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000"+ + "\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000"+ + "\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000"+ + "\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000"+ + "\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000"+ + "\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000"+ + "\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000"+ + "%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001"+ + "\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000"+ + "\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u0000"+ + "3\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001"+ + "\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000"+ + "\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000"+ + "A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001"+ + "\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000"+ + "\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000"+ + "O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001"+ + "\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000"+ + "\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000"+ + "]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001"+ + "\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000"+ + "\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000"+ + "k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001"+ + "\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000"+ + "\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000"+ + "y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001"+ + "\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001"+ + "\u0000\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001"+ + "\u0000\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001"+ + "\u0000\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001"+ + "\u0000\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001"+ + "\u0000\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001"+ + "\u0000\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001"+ + "\u0000\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001"+ + "\u0000\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000\u0000\u00a1\u0001"+ + "\u0000\u0000\u0000\u0000\u00a3\u0001\u0000\u0000\u0000\u0000\u00a5\u0001"+ + "\u0000\u0000\u0000\u0000\u00a7\u0001\u0000\u0000\u0000\u0000\u00a9\u0001"+ + "\u0000\u0000\u0000\u0000\u00ab\u0001\u0000\u0000\u0000\u0000\u00ad\u0001"+ + "\u0000\u0000\u0000\u0000\u00af\u0001\u0000\u0000\u0000\u0000\u00b1\u0001"+ + "\u0000\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000\u0000\u00b5\u0001"+ + "\u0000\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000\u0000\u00b9\u0001"+ + "\u0000\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000\u0000\u00bd\u0001"+ + "\u0000\u0000\u0000\u0000\u00bf\u0001\u0000\u0000\u0000\u0000\u00c1\u0001"+ + "\u0000\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000\u0000\u00c5\u0001"+ + "\u0000\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000\u0000\u00c9\u0001"+ + "\u0000\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000\u0000\u00cd\u0001"+ + "\u0000\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000\u0000\u00d1\u0001"+ + "\u0000\u0000\u0000\u0000\u00d3\u0001\u0000\u0000\u0000\u0000\u00d5\u0001"+ + "\u0000\u0000\u0000\u0000\u00d7\u0001\u0000\u0000\u0000\u0000\u00d9\u0001"+ + "\u0000\u0000\u0000\u0000\u00db\u0001\u0000\u0000\u0000\u0000\u00dd\u0001"+ + "\u0000\u0000\u0000\u0000\u00df\u0001\u0000\u0000\u0000\u0000\u00e1\u0001"+ + "\u0000\u0000\u0000\u0000\u00e3\u0001\u0000\u0000\u0000\u0000\u00e5\u0001"+ + "\u0000\u0000\u0000\u0000\u00e7\u0001\u0000\u0000\u0000\u0000\u00e9\u0001"+ + "\u0000\u0000\u0000\u0000\u00eb\u0001\u0000\u0000\u0000\u0000\u00ed\u0001"+ + "\u0000\u0000\u0000\u0000\u00ef\u0001\u0000\u0000\u0000\u0000\u00f1\u0001"+ + "\u0000\u0000\u0000\u0000\u00f3\u0001\u0000\u0000\u0000\u0000\u00f5\u0001"+ + "\u0000\u0000\u0000\u0000\u00f7\u0001\u0000\u0000\u0000\u0000\u00f9\u0001"+ + "\u0000\u0000\u0000\u0000\u00fb\u0001\u0000\u0000\u0000\u0000\u00fd\u0001"+ + "\u0000\u0000\u0000\u0000\u00ff\u0001\u0000\u0000\u0000\u0000\u0101\u0001"+ + "\u0000\u0000\u0000\u0000\u0103\u0001\u0000\u0000\u0000\u0000\u0105\u0001"+ + "\u0000\u0000\u0000\u0000\u0107\u0001\u0000\u0000\u0000\u0000\u0109\u0001"+ + "\u0000\u0000\u0000\u0000\u010b\u0001\u0000\u0000\u0000\u0000\u010d\u0001"+ + "\u0000\u0000\u0000\u0000\u010f\u0001\u0000\u0000\u0000\u0000\u0111\u0001"+ + "\u0000\u0000\u0000\u0000\u0113\u0001\u0000\u0000\u0000\u0000\u0115\u0001"+ + "\u0000\u0000\u0000\u0000\u0117\u0001\u0000\u0000\u0000\u0000\u0119\u0001"+ + "\u0000\u0000\u0000\u0000\u011b\u0001\u0000\u0000\u0000\u0000\u011d\u0001"+ + "\u0000\u0000\u0000\u0000\u011f\u0001\u0000\u0000\u0000\u0000\u0121\u0001"+ + "\u0000\u0000\u0000\u0000\u0123\u0001\u0000\u0000\u0000\u0000\u0125\u0001"+ + "\u0000\u0000\u0000\u0000\u0127\u0001\u0000\u0000\u0000\u0000\u0129\u0001"+ + "\u0000\u0000\u0000\u0000\u012b\u0001\u0000\u0000\u0000\u0000\u012d\u0001"+ + "\u0000\u0000\u0000\u0001\u015d\u0001\u0000\u0000\u0000\u0003\u015f\u0001"+ + "\u0000\u0000\u0000\u0005\u0161\u0001\u0000\u0000\u0000\u0007\u0163\u0001"+ + "\u0000\u0000\u0000\t\u0165\u0001\u0000\u0000\u0000\u000b\u0167\u0001\u0000"+ + "\u0000\u0000\r\u0169\u0001\u0000\u0000\u0000\u000f\u016b\u0001\u0000\u0000"+ + "\u0000\u0011\u0173\u0001\u0000\u0000\u0000\u0013\u017e\u0001\u0000\u0000"+ + "\u0000\u0015\u0186\u0001\u0000\u0000\u0000\u0017\u0190\u0001\u0000\u0000"+ + "\u0000\u0019\u0194\u0001\u0000\u0000\u0000\u001b\u0198\u0001\u0000\u0000"+ + "\u0000\u001d\u01a3\u0001\u0000\u0000\u0000\u001f\u01a9\u0001\u0000\u0000"+ + "\u0000!\u01ae\u0001\u0000\u0000\u0000#\u01ba\u0001\u0000\u0000\u0000%"+ + "\u01bf\u0001\u0000\u0000\u0000\'\u01c5\u0001\u0000\u0000\u0000)\u01ca"+ + "\u0001\u0000\u0000\u0000+\u01ce\u0001\u0000\u0000\u0000-\u01d0\u0001\u0000"+ + "\u0000\u0000/\u01d4\u0001\u0000\u0000\u00001\u01d7\u0001\u0000\u0000\u0000"+ + "3\u01dd\u0001\u0000\u0000\u00005\u01e6\u0001\u0000\u0000\u00007\u01ed"+ + "\u0001\u0000\u0000\u00009\u01f0\u0001\u0000\u0000\u0000;\u01f5\u0001\u0000"+ + "\u0000\u0000=\u01fa\u0001\u0000\u0000\u0000?\u0202\u0001\u0000\u0000\u0000"+ + "A\u0207\u0001\u0000\u0000\u0000C\u0215\u0001\u0000\u0000\u0000E\u0221"+ + "\u0001\u0000\u0000\u0000G\u0236\u0001\u0000\u0000\u0000I\u0240\u0001\u0000"+ + "\u0000\u0000K\u024a\u0001\u0000\u0000\u0000M\u0254\u0001\u0000\u0000\u0000"+ + "O\u025f\u0001\u0000\u0000\u0000Q\u026a\u0001\u0000\u0000\u0000S\u0276"+ + "\u0001\u0000\u0000\u0000U\u0280\u0001\u0000\u0000\u0000W\u0282\u0001\u0000"+ + "\u0000\u0000Y\u028a\u0001\u0000\u0000\u0000[\u0291\u0001\u0000\u0000\u0000"+ + "]\u029a\u0001\u0000\u0000\u0000_\u029c\u0001\u0000\u0000\u0000a\u02a0"+ + "\u0001\u0000\u0000\u0000c\u02a4\u0001\u0000\u0000\u0000e\u02a8\u0001\u0000"+ + "\u0000\u0000g\u02ae\u0001\u0000\u0000\u0000i\u02b2\u0001\u0000\u0000\u0000"+ + "k\u02b4\u0001\u0000\u0000\u0000m\u02b9\u0001\u0000\u0000\u0000o\u02bd"+ + "\u0001\u0000\u0000\u0000q\u02c1\u0001\u0000\u0000\u0000s\u02c5\u0001\u0000"+ + "\u0000\u0000u\u02cb\u0001\u0000\u0000\u0000w\u02d1\u0001\u0000\u0000\u0000"+ + "y\u02d5\u0001\u0000\u0000\u0000{\u02db\u0001\u0000\u0000\u0000}\u02e1"+ + "\u0001\u0000\u0000\u0000\u007f\u02e5\u0001\u0000\u0000\u0000\u0081\u02eb"+ + "\u0001\u0000\u0000\u0000\u0083\u02f1\u0001\u0000\u0000\u0000\u0085\u02f5"+ + "\u0001\u0000\u0000\u0000\u0087\u02fb\u0001\u0000\u0000\u0000\u0089\u0301"+ + "\u0001\u0000\u0000\u0000\u008b\u0306\u0001\u0000\u0000\u0000\u008d\u030b"+ + "\u0001\u0000\u0000\u0000\u008f\u0313\u0001\u0000\u0000\u0000\u0091\u0318"+ + "\u0001\u0000\u0000\u0000\u0093\u031d\u0001\u0000\u0000\u0000\u0095\u0323"+ + "\u0001\u0000\u0000\u0000\u0097\u0329\u0001\u0000\u0000\u0000\u0099\u0330"+ + "\u0001\u0000\u0000\u0000\u009b\u0337\u0001\u0000\u0000\u0000\u009d\u0340"+ + "\u0001\u0000\u0000\u0000\u009f\u0345\u0001\u0000\u0000\u0000\u00a1\u034a"+ + "\u0001\u0000\u0000\u0000\u00a3\u034f\u0001\u0000\u0000\u0000\u00a5\u0354"+ + "\u0001\u0000\u0000\u0000\u00a7\u035b\u0001\u0000\u0000\u0000\u00a9\u0362"+ + "\u0001\u0000\u0000\u0000\u00ab\u0369\u0001\u0000\u0000\u0000\u00ad\u0370"+ + "\u0001\u0000\u0000\u0000\u00af\u0375\u0001\u0000\u0000\u0000\u00b1\u0379"+ + "\u0001\u0000\u0000\u0000\u00b3\u037e\u0001\u0000\u0000\u0000\u00b5\u0383"+ + "\u0001\u0000\u0000\u0000\u00b7\u038a\u0001\u0000\u0000\u0000\u00b9\u0391"+ + "\u0001\u0000\u0000\u0000\u00bb\u0397\u0001\u0000\u0000\u0000\u00bd\u039d"+ + "\u0001\u0000\u0000\u0000\u00bf\u03a2\u0001\u0000\u0000\u0000\u00c1\u03a7"+ + "\u0001\u0000\u0000\u0000\u00c3\u03b1\u0001\u0000\u0000\u0000\u00c5\u03b8"+ + "\u0001\u0000\u0000\u0000\u00c7\u03c0\u0001\u0000\u0000\u0000\u00c9\u03cc"+ + "\u0001\u0000\u0000\u0000\u00cb\u03d6\u0001\u0000\u0000\u0000\u00cd\u03df"+ + "\u0001\u0000\u0000\u0000\u00cf\u03e8\u0001\u0000\u0000\u0000\u00d1\u03f2"+ + "\u0001\u0000\u0000\u0000\u00d3\u0400\u0001\u0000\u0000\u0000\u00d5\u040c"+ + "\u0001\u0000\u0000\u0000\u00d7\u0418\u0001\u0000\u0000\u0000\u00d9\u0424"+ + "\u0001\u0000\u0000\u0000\u00db\u0430\u0001\u0000\u0000\u0000\u00dd\u043c"+ + "\u0001\u0000\u0000\u0000\u00df\u049f\u0001\u0000\u0000\u0000\u00e1\u04ea"+ + "\u0001\u0000\u0000\u0000\u00e3\u0582\u0001\u0000\u0000\u0000\u00e5\u0626"+ + "\u0001\u0000\u0000\u0000\u00e7\u0628\u0001\u0000\u0000\u0000\u00e9\u062d"+ + "\u0001\u0000\u0000\u0000\u00eb\u0632\u0001\u0000\u0000\u0000\u00ed\u0639"+ + "\u0001\u0000\u0000\u0000\u00ef\u063f\u0001\u0000\u0000\u0000\u00f1\u0645"+ + "\u0001\u0000\u0000\u0000\u00f3\u064c\u0001\u0000\u0000\u0000\u00f5\u0652"+ + "\u0001\u0000\u0000\u0000\u00f7\u0659\u0001\u0000\u0000\u0000\u00f9\u065f"+ + "\u0001\u0000\u0000\u0000\u00fb\u0666\u0001\u0000\u0000\u0000\u00fd\u066b"+ + "\u0001\u0000\u0000\u0000\u00ff\u0670\u0001\u0000\u0000\u0000\u0101\u0677"+ + "\u0001\u0000\u0000\u0000\u0103\u067e\u0001\u0000\u0000\u0000\u0105\u0685"+ + "\u0001\u0000\u0000\u0000\u0107\u068c\u0001\u0000\u0000\u0000\u0109\u0693"+ + "\u0001\u0000\u0000\u0000\u010b\u0699\u0001\u0000\u0000\u0000\u010d\u06a0"+ + "\u0001\u0000\u0000\u0000\u010f\u06a9\u0001\u0000\u0000\u0000\u0111\u06b0"+ + "\u0001\u0000\u0000\u0000\u0113\u06b4\u0001\u0000\u0000\u0000\u0115\u06c5"+ + "\u0001\u0000\u0000\u0000\u0117\u06d4\u0001\u0000\u0000\u0000\u0119\u06e6"+ + "\u0001\u0000\u0000\u0000\u011b\u06f4\u0001\u0000\u0000\u0000\u011d\u0710"+ + "\u0001\u0000\u0000\u0000\u011f\u072d\u0001\u0000\u0000\u0000\u0121\u0739"+ + "\u0001\u0000\u0000\u0000\u0123\u074b\u0001\u0000\u0000\u0000\u0125\u0751"+ + "\u0001\u0000\u0000\u0000\u0127\u0758\u0001\u0000\u0000\u0000\u0129\u075a"+ + "\u0001\u0000\u0000\u0000\u012b\u0760\u0001\u0000\u0000\u0000\u012d\u077b"+ + "\u0001\u0000\u0000\u0000\u012f\u077f\u0001\u0000\u0000\u0000\u0131\u0781"+ + "\u0001\u0000\u0000\u0000\u0133\u078b\u0001\u0000\u0000\u0000\u0135\u0795"+ + "\u0001\u0000\u0000\u0000\u0137\u0797\u0001\u0000\u0000\u0000\u0139\u0799"+ + "\u0001\u0000\u0000\u0000\u013b\u079b\u0001\u0000\u0000\u0000\u013d\u07a2"+ + "\u0001\u0000\u0000\u0000\u013f\u07a4\u0001\u0000\u0000\u0000\u0141\u07a7"+ + "\u0001\u0000\u0000\u0000\u0143\u07a9\u0001\u0000\u0000\u0000\u0145\u07f9"+ + "\u0001\u0000\u0000\u0000\u0147\u07fb\u0001\u0000\u0000\u0000\u0149\u0814"+ + "\u0001\u0000\u0000\u0000\u014b\u081d\u0001\u0000\u0000\u0000\u014d\u0821"+ + "\u0001\u0000\u0000\u0000\u014f\u0823\u0001\u0000\u0000\u0000\u0151\u0825"+ + "\u0001\u0000\u0000\u0000\u0153\u0827\u0001\u0000\u0000\u0000\u0155\u0829"+ + "\u0001\u0000\u0000\u0000\u0157\u082d\u0001\u0000\u0000\u0000\u0159\u0831"+ + "\u0001\u0000\u0000\u0000\u015b\u084e\u0001\u0000\u0000\u0000\u015d\u015e"+ + "\u0005(\u0000\u0000\u015e\u0002\u0001\u0000\u0000\u0000\u015f\u0160\u0005"+ + ")\u0000\u0000\u0160\u0004\u0001\u0000\u0000\u0000\u0161\u0162\u0003\u013d"+ + "\u009e\u0000\u0162\u0006\u0001\u0000\u0000\u0000\u0163\u0164\u0003\u013f"+ + "\u009f\u0000\u0164\b\u0001\u0000\u0000\u0000\u0165\u0166\u0003\u0145\u00a2"+ + "\u0000\u0166\n\u0001\u0000\u0000\u0000\u0167\u0168\u0003\u0147\u00a3\u0000"+ + "\u0168\f\u0001\u0000\u0000\u0000\u0169\u016a\u0003\u014d\u00a6\u0000\u016a"+ + "\u000e\u0001\u0000\u0000\u0000\u016b\u016c\u0003\u014d\u00a6\u0000\u016c"+ + "\u016d\u0005.\u0000\u0000\u016d\u016e\u0005c\u0000\u0000\u016e\u016f\u0005"+ + "o\u0000\u0000\u016f\u0170\u0005n\u0000\u0000\u0170\u0171\u0005s\u0000"+ + "\u0000\u0171\u0172\u0005t\u0000\u0000\u0172\u0010\u0001\u0000\u0000\u0000"+ + "\u0173\u0174\u0003\u014d\u00a6\u0000\u0174\u0175\u0005.\u0000\u0000\u0175"+ + "\u0176\u0005s\u0000\u0000\u0176\u0177\u0005y\u0000\u0000\u0177\u0178\u0005"+ + "m\u0000\u0000\u0178\u0179\u0005b\u0000\u0000\u0179\u017a\u0005o\u0000"+ + "\u0000\u017a\u017b\u0005l\u0000\u0000\u017b\u017c\u0005i\u0000\u0000\u017c"+ + "\u017d\u0005c\u0000\u0000\u017d\u0012\u0001\u0000\u0000\u0000\u017e\u017f"+ + "\u0005f\u0000\u0000\u017f\u0180\u0005u\u0000\u0000\u0180\u0181\u0005n"+ + "\u0000\u0000\u0181\u0182\u0005c\u0000\u0000\u0182\u0183\u0005r\u0000\u0000"+ + "\u0183\u0184\u0005e\u0000\u0000\u0184\u0185\u0005f\u0000\u0000\u0185\u0014"+ + "\u0001\u0000\u0000\u0000\u0186\u0187\u0005e\u0000\u0000\u0187\u0188\u0005"+ + "x\u0000\u0000\u0188\u0189\u0005t\u0000\u0000\u0189\u018a\u0005e\u0000"+ + "\u0000\u018a\u018b\u0005r\u0000\u0000\u018b\u018c\u0005n\u0000\u0000\u018c"+ + "\u018d\u0005r\u0000\u0000\u018d\u018e\u0005e\u0000\u0000\u018e\u018f\u0005"+ + "f\u0000\u0000\u018f\u0016\u0001\u0000\u0000\u0000\u0190\u0191\u0005m\u0000"+ + "\u0000\u0191\u0192\u0005u\u0000\u0000\u0192\u0193\u0005t\u0000\u0000\u0193"+ + "\u0018\u0001\u0000\u0000\u0000\u0194\u0195\u0005n\u0000\u0000\u0195\u0196"+ + "\u0005o\u0000\u0000\u0196\u0197\u0005p\u0000\u0000\u0197\u001a\u0001\u0000"+ + "\u0000\u0000\u0198\u0199\u0005s\u0000\u0000\u0199\u019a\u0005y\u0000\u0000"+ + "\u019a\u019b\u0005m\u0000\u0000\u019b\u019c\u0005_\u0000\u0000\u019c\u019d"+ + "\u0005a\u0000\u0000\u019d\u019e\u0005s\u0000\u0000\u019e\u019f\u0005s"+ + "\u0000\u0000\u019f\u01a0\u0005e\u0000\u0000\u01a0\u01a1\u0005r\u0000\u0000"+ + "\u01a1\u01a2\u0005t\u0000\u0000\u01a2\u001c\u0001\u0000\u0000\u0000\u01a3"+ + "\u01a4\u0005a\u0000\u0000\u01a4\u01a5\u0005l\u0000\u0000\u01a5\u01a6\u0005"+ + "l\u0000\u0000\u01a6\u01a7\u0005o\u0000\u0000\u01a7\u01a8\u0005c\u0000"+ + "\u0000\u01a8\u001e\u0001\u0000\u0000\u0000\u01a9\u01aa\u0005f\u0000\u0000"+ + "\u01aa\u01ab\u0005r\u0000\u0000\u01ab\u01ac\u0005e\u0000\u0000\u01ac\u01ad"+ + "\u0005e\u0000\u0000\u01ad \u0001\u0000\u0000\u0000\u01ae\u01af\u0005u"+ + "\u0000\u0000\u01af\u01b0\u0005n\u0000\u0000\u01b0\u01b1\u0005r\u0000\u0000"+ + "\u01b1\u01b2\u0005e\u0000\u0000\u01b2\u01b3\u0005a\u0000\u0000\u01b3\u01b4"+ + "\u0005c\u0000\u0000\u01b4\u01b5\u0005h\u0000\u0000\u01b5\u01b6\u0005a"+ + "\u0000\u0000\u01b6\u01b7\u0005b\u0000\u0000\u01b7\u01b8\u0005l\u0000\u0000"+ + "\u01b8\u01b9\u0005e\u0000\u0000\u01b9\"\u0001\u0000\u0000\u0000\u01ba"+ + "\u01bb\u0005d\u0000\u0000\u01bb\u01bc\u0005r\u0000\u0000\u01bc\u01bd\u0005"+ + "o\u0000\u0000\u01bd\u01be\u0005p\u0000\u0000\u01be$\u0001\u0000\u0000"+ + "\u0000\u01bf\u01c0\u0005b\u0000\u0000\u01c0\u01c1\u0005l\u0000\u0000\u01c1"+ + "\u01c2\u0005o\u0000\u0000\u01c2\u01c3\u0005c\u0000\u0000\u01c3\u01c4\u0005"+ + "k\u0000\u0000\u01c4&\u0001\u0000\u0000\u0000\u01c5\u01c6\u0005l\u0000"+ + "\u0000\u01c6\u01c7\u0005o\u0000\u0000\u01c7\u01c8\u0005o\u0000\u0000\u01c8"+ + "\u01c9\u0005p\u0000\u0000\u01c9(\u0001\u0000\u0000\u0000\u01ca\u01cb\u0005"+ + "f\u0000\u0000\u01cb\u01cc\u0005o\u0000\u0000\u01cc\u01cd\u0005r\u0000"+ + "\u0000\u01cd*\u0001\u0000\u0000\u0000\u01ce\u01cf\u0005|\u0000\u0000\u01cf"+ + ",\u0001\u0000\u0000\u0000\u01d0\u01d1\u0005e\u0000\u0000\u01d1\u01d2\u0005"+ + "n\u0000\u0000\u01d2\u01d3\u0005d\u0000\u0000\u01d3.\u0001\u0000\u0000"+ + "\u0000\u01d4\u01d5\u0005b\u0000\u0000\u01d5\u01d6\u0005r\u0000\u0000\u01d6"+ + "0\u0001\u0000\u0000\u0000\u01d7\u01d8\u0005b\u0000\u0000\u01d8\u01d9\u0005"+ + "r\u0000\u0000\u01d9\u01da\u0005_\u0000\u0000\u01da\u01db\u0005i\u0000"+ + "\u0000\u01db\u01dc\u0005f\u0000\u0000\u01dc2\u0001\u0000\u0000\u0000\u01dd"+ + "\u01de\u0005b\u0000\u0000\u01de\u01df\u0005r\u0000\u0000\u01df\u01e0\u0005"+ + "_\u0000\u0000\u01e0\u01e1\u0005t\u0000\u0000\u01e1\u01e2\u0005a\u0000"+ + "\u0000\u01e2\u01e3\u0005b\u0000\u0000\u01e3\u01e4\u0005l\u0000\u0000\u01e4"+ + "\u01e5\u0005e\u0000\u0000\u01e54\u0001\u0000\u0000\u0000\u01e6\u01e7\u0005"+ + "r\u0000\u0000\u01e7\u01e8\u0005e\u0000\u0000\u01e8\u01e9\u0005t\u0000"+ + "\u0000\u01e9\u01ea\u0005u\u0000\u0000\u01ea\u01eb\u0005r\u0000\u0000\u01eb"+ + "\u01ec\u0005n\u0000\u0000\u01ec6\u0001\u0000\u0000\u0000\u01ed\u01ee\u0005"+ + "i\u0000\u0000\u01ee\u01ef\u0005f\u0000\u0000\u01ef8\u0001\u0000\u0000"+ + "\u0000\u01f0\u01f1\u0005t\u0000\u0000\u01f1\u01f2\u0005h\u0000\u0000\u01f2"+ + "\u01f3\u0005e\u0000\u0000\u01f3\u01f4\u0005n\u0000\u0000\u01f4:\u0001"+ + "\u0000\u0000\u0000\u01f5\u01f6\u0005e\u0000\u0000\u01f6\u01f7\u0005l\u0000"+ + "\u0000\u01f7\u01f8\u0005s\u0000\u0000\u01f8\u01f9\u0005e\u0000\u0000\u01f9"+ + "<\u0001\u0000\u0000\u0000\u01fa\u01fb\u0005.\u0000\u0000\u01fb\u01fc\u0005"+ + "s\u0000\u0000\u01fc\u01fd\u0005e\u0000\u0000\u01fd\u01fe\u0005l\u0000"+ + "\u0000\u01fe\u01ff\u0005e\u0000\u0000\u01ff\u0200\u0005c\u0000\u0000\u0200"+ + "\u0201\u0005t\u0000\u0000\u0201>\u0001\u0000\u0000\u0000\u0202\u0203\u0005"+ + "c\u0000\u0000\u0203\u0204\u0005a\u0000\u0000\u0204\u0205\u0005l\u0000"+ + "\u0000\u0205\u0206\u0005l\u0000\u0000\u0206@\u0001\u0000\u0000\u0000\u0207"+ + "\u0208\u0005c\u0000\u0000\u0208\u0209\u0005a\u0000\u0000\u0209\u020a\u0005"+ + "l\u0000\u0000\u020a\u020b\u0005l\u0000\u0000\u020b\u020c\u0005_\u0000"+ + "\u0000\u020c\u020d\u0005i\u0000\u0000\u020d\u020e\u0005n\u0000\u0000\u020e"+ + "\u020f\u0005d\u0000\u0000\u020f\u0210\u0005i\u0000\u0000\u0210\u0211\u0005"+ + "r\u0000\u0000\u0211\u0212\u0005e\u0000\u0000\u0212\u0213\u0005c\u0000"+ + "\u0000\u0213\u0214\u0005t\u0000\u0000\u0214B\u0001\u0000\u0000\u0000\u0215"+ + "\u0216\u0005r\u0000\u0000\u0216\u0217\u0005e\u0000\u0000\u0217\u0218\u0005"+ + "t\u0000\u0000\u0218\u0219\u0005u\u0000\u0000\u0219\u021a\u0005r\u0000"+ + "\u0000\u021a\u021b\u0005n\u0000\u0000\u021b\u021c\u0005_\u0000\u0000\u021c"+ + "\u021d\u0005c\u0000\u0000\u021d\u021e\u0005a\u0000\u0000\u021e\u021f\u0005"+ + "l\u0000\u0000\u021f\u0220\u0005l\u0000\u0000\u0220D\u0001\u0000\u0000"+ + "\u0000\u0221\u0222\u0005r\u0000\u0000\u0222\u0223\u0005e\u0000\u0000\u0223"+ + "\u0224\u0005t\u0000\u0000\u0224\u0225\u0005u\u0000\u0000\u0225\u0226\u0005"+ + "r\u0000\u0000\u0226\u0227\u0005n\u0000\u0000\u0227\u0228\u0005_\u0000"+ + "\u0000\u0228\u0229\u0005c\u0000\u0000\u0229\u022a\u0005a\u0000\u0000\u022a"+ + "\u022b\u0005l\u0000\u0000\u022b\u022c\u0005l\u0000\u0000\u022c\u022d\u0005"+ + "_\u0000\u0000\u022d\u022e\u0005i\u0000\u0000\u022e\u022f\u0005n\u0000"+ + "\u0000\u022f\u0230\u0005d\u0000\u0000\u0230\u0231\u0005i\u0000\u0000\u0231"+ + "\u0232\u0005r\u0000\u0000\u0232\u0233\u0005e\u0000\u0000\u0233\u0234\u0005"+ + "c\u0000\u0000\u0234\u0235\u0005t\u0000\u0000\u0235F\u0001\u0000\u0000"+ + "\u0000\u0236\u0237\u0005l\u0000\u0000\u0237\u0238\u0005o\u0000\u0000\u0238"+ + "\u0239\u0005c\u0000\u0000\u0239\u023a\u0005a\u0000\u0000\u023a\u023b\u0005"+ + "l\u0000\u0000\u023b\u023c\u0005.\u0000\u0000\u023c\u023d\u0005g\u0000"+ + "\u0000\u023d\u023e\u0005e\u0000\u0000\u023e\u023f\u0005t\u0000\u0000\u023f"+ + "H\u0001\u0000\u0000\u0000\u0240\u0241\u0005l\u0000\u0000\u0241\u0242\u0005"+ + "o\u0000\u0000\u0242\u0243\u0005c\u0000\u0000\u0243\u0244\u0005a\u0000"+ + "\u0000\u0244\u0245\u0005l\u0000\u0000\u0245\u0246\u0005.\u0000\u0000\u0246"+ + "\u0247\u0005s\u0000\u0000\u0247\u0248\u0005e\u0000\u0000\u0248\u0249\u0005"+ + "t\u0000\u0000\u0249J\u0001\u0000\u0000\u0000\u024a\u024b\u0005l\u0000"+ + "\u0000\u024b\u024c\u0005o\u0000\u0000\u024c\u024d\u0005c\u0000\u0000\u024d"+ + "\u024e\u0005a\u0000\u0000\u024e\u024f\u0005l\u0000\u0000\u024f\u0250\u0005"+ + ".\u0000\u0000\u0250\u0251\u0005t\u0000\u0000\u0251\u0252\u0005e\u0000"+ + "\u0000\u0252\u0253\u0005e\u0000\u0000\u0253L\u0001\u0000\u0000\u0000\u0254"+ + "\u0255\u0005g\u0000\u0000\u0255\u0256\u0005l\u0000\u0000\u0256\u0257\u0005"+ + "o\u0000\u0000\u0257\u0258\u0005b\u0000\u0000\u0258\u0259\u0005a\u0000"+ + "\u0000\u0259\u025a\u0005l\u0000\u0000\u025a\u025b\u0005.\u0000\u0000\u025b"+ + "\u025c\u0005g\u0000\u0000\u025c\u025d\u0005e\u0000\u0000\u025d\u025e\u0005"+ + "t\u0000\u0000\u025eN\u0001\u0000\u0000\u0000\u025f\u0260\u0005g\u0000"+ + "\u0000\u0260\u0261\u0005l\u0000\u0000\u0261\u0262\u0005o\u0000\u0000\u0262"+ + "\u0263\u0005b\u0000\u0000\u0263\u0264\u0005a\u0000\u0000\u0264\u0265\u0005"+ + "l\u0000\u0000\u0265\u0266\u0005.\u0000\u0000\u0266\u0267\u0005s\u0000"+ + "\u0000\u0267\u0268\u0005e\u0000\u0000\u0268\u0269\u0005t\u0000\u0000\u0269"+ + "P\u0001\u0000\u0000\u0000\u026a\u026b\u0005.\u0000\u0000\u026b\u026c\u0005"+ + "l\u0000\u0000\u026c\u026d\u0005o\u0000\u0000\u026d\u026e\u0005a\u0000"+ + "\u0000\u026e\u026f\u0005d\u0000\u0000\u026f\u0274\u0001\u0000\u0000\u0000"+ + "\u0270\u0271\u0003].\u0000\u0271\u0272\u0003U*\u0000\u0272\u0273\u0003"+ + "[-\u0000\u0273\u0275\u0001\u0000\u0000\u0000\u0274\u0270\u0001\u0000\u0000"+ + "\u0000\u0274\u0275\u0001\u0000\u0000\u0000\u0275R\u0001\u0000\u0000\u0000"+ + "\u0276\u0277\u0005.\u0000\u0000\u0277\u0278\u0005s\u0000\u0000\u0278\u0279"+ + "\u0005t\u0000\u0000\u0279\u027a\u0005o\u0000\u0000\u027a\u027b\u0005r"+ + "\u0000\u0000\u027b\u027c\u0005e\u0000\u0000\u027c\u027e\u0001\u0000\u0000"+ + "\u0000\u027d\u027f\u0003].\u0000\u027e\u027d\u0001\u0000\u0000\u0000\u027e"+ + "\u027f\u0001\u0000\u0000\u0000\u027fT\u0001\u0000\u0000\u0000\u0280\u0281"+ + "\u0005_\u0000\u0000\u0281V\u0001\u0000\u0000\u0000\u0282\u0283\u0005o"+ + "\u0000\u0000\u0283\u0284\u0005f\u0000\u0000\u0284\u0285\u0005f\u0000\u0000"+ + "\u0285\u0286\u0005s\u0000\u0000\u0286\u0287\u0005e\u0000\u0000\u0287\u0288"+ + "\u0005t\u0000\u0000\u0288\u0289\u0005=\u0000\u0000\u0289X\u0001\u0000"+ + "\u0000\u0000\u028a\u028b\u0005a\u0000\u0000\u028b\u028c\u0005l\u0000\u0000"+ + "\u028c\u028d\u0005i\u0000\u0000\u028d\u028e\u0005g\u0000\u0000\u028e\u028f"+ + "\u0005n\u0000\u0000\u028f\u0290\u0005=\u0000\u0000\u0290Z\u0001\u0000"+ + "\u0000\u0000\u0291\u0292\u0007\u0000\u0000\u0000\u0292\\\u0001\u0000\u0000"+ + "\u0000\u0293\u029b\u00058\u0000\u0000\u0294\u0295\u00051\u0000\u0000\u0295"+ + "\u029b\u00056\u0000\u0000\u0296\u0297\u00053\u0000\u0000\u0297\u029b\u0005"+ + "2\u0000\u0000\u0298\u0299\u00056\u0000\u0000\u0299\u029b\u00054\u0000"+ + "\u0000\u029a\u0293\u0001\u0000\u0000\u0000\u029a\u0294\u0001\u0000\u0000"+ + "\u0000\u029a\u0296\u0001\u0000\u0000\u0000\u029a\u0298\u0001\u0000\u0000"+ + "\u0000\u029b^\u0001\u0000\u0000\u0000\u029c\u029d\u0005i\u0000\u0000\u029d"+ + "\u029e\u00053\u0000\u0000\u029e\u029f\u00052\u0000\u0000\u029f`\u0001"+ + "\u0000\u0000\u0000\u02a0\u02a1\u0005i\u0000\u0000\u02a1\u02a2\u00056\u0000"+ + "\u0000\u02a2\u02a3\u00054\u0000\u0000\u02a3b\u0001\u0000\u0000\u0000\u02a4"+ + "\u02a5\u0005f\u0000\u0000\u02a5\u02a6\u00053\u0000\u0000\u02a6\u02a7\u0005"+ + "2\u0000\u0000\u02a7d\u0001\u0000\u0000\u0000\u02a8\u02a9\u0005f\u0000"+ + "\u0000\u02a9\u02aa\u00056\u0000\u0000\u02aa\u02ab\u00054\u0000\u0000\u02ab"+ + "f\u0001\u0000\u0000\u0000\u02ac\u02af\u0003_/\u0000\u02ad\u02af\u0003"+ + "a0\u0000\u02ae\u02ac\u0001\u0000\u0000\u0000\u02ae\u02ad\u0001\u0000\u0000"+ + "\u0000\u02afh\u0001\u0000\u0000\u0000\u02b0\u02b3\u0003c1\u0000\u02b1"+ + "\u02b3\u0003e2\u0000\u02b2\u02b0\u0001\u0000\u0000\u0000\u02b2\u02b1\u0001"+ + "\u0000\u0000\u0000\u02b3j\u0001\u0000\u0000\u0000\u02b4\u02b5\u0005.\u0000"+ + "\u0000\u02b5\u02b6\u0005e\u0000\u0000\u02b6\u02b7\u0005q\u0000\u0000\u02b7"+ + "\u02b8\u0005z\u0000\u0000\u02b8l\u0001\u0000\u0000\u0000\u02b9\u02ba\u0005"+ + ".\u0000\u0000\u02ba\u02bb\u0005e\u0000\u0000\u02bb\u02bc\u0005q\u0000"+ + "\u0000\u02bcn\u0001\u0000\u0000\u0000\u02bd\u02be\u0005.\u0000\u0000\u02be"+ + "\u02bf\u0005n\u0000\u0000\u02bf\u02c0\u0005e\u0000\u0000\u02c0p\u0001"+ + "\u0000\u0000\u0000\u02c1\u02c2\u0005.\u0000\u0000\u02c2\u02c3\u0005l\u0000"+ + "\u0000\u02c3\u02c4\u0005t\u0000\u0000\u02c4r\u0001\u0000\u0000\u0000\u02c5"+ + "\u02c6\u0005.\u0000\u0000\u02c6\u02c7\u0005l\u0000\u0000\u02c7\u02c8\u0005"+ + "t\u0000\u0000\u02c8\u02c9\u0005_\u0000\u0000\u02c9\u02ca\u0005s\u0000"+ + "\u0000\u02cat\u0001\u0000\u0000\u0000\u02cb\u02cc\u0005.\u0000\u0000\u02cc"+ + "\u02cd\u0005l\u0000\u0000\u02cd\u02ce\u0005t\u0000\u0000\u02ce\u02cf\u0005"+ + "_\u0000\u0000\u02cf\u02d0\u0005u\u0000\u0000\u02d0v\u0001\u0000\u0000"+ + "\u0000\u02d1\u02d2\u0005.\u0000\u0000\u02d2\u02d3\u0005l\u0000\u0000\u02d3"+ + "\u02d4\u0005e\u0000\u0000\u02d4x\u0001\u0000\u0000\u0000\u02d5\u02d6\u0005"+ + ".\u0000\u0000\u02d6\u02d7\u0005l\u0000\u0000\u02d7\u02d8\u0005e\u0000"+ + "\u0000\u02d8\u02d9\u0005_\u0000\u0000\u02d9\u02da\u0005s\u0000\u0000\u02da"+ + "z\u0001\u0000\u0000\u0000\u02db\u02dc\u0005.\u0000\u0000\u02dc\u02dd\u0005"+ + "l\u0000\u0000\u02dd\u02de\u0005e\u0000\u0000\u02de\u02df\u0005_\u0000"+ + "\u0000\u02df\u02e0\u0005u\u0000\u0000\u02e0|\u0001\u0000\u0000\u0000\u02e1"+ + "\u02e2\u0005.\u0000\u0000\u02e2\u02e3\u0005g\u0000\u0000\u02e3\u02e4\u0005"+ + "t\u0000\u0000\u02e4~\u0001\u0000\u0000\u0000\u02e5\u02e6\u0005.\u0000"+ + "\u0000\u02e6\u02e7\u0005g\u0000\u0000\u02e7\u02e8\u0005t\u0000\u0000\u02e8"+ + "\u02e9\u0005_\u0000\u0000\u02e9\u02ea\u0005s\u0000\u0000\u02ea\u0080\u0001"+ + "\u0000\u0000\u0000\u02eb\u02ec\u0005.\u0000\u0000\u02ec\u02ed\u0005g\u0000"+ + "\u0000\u02ed\u02ee\u0005t\u0000\u0000\u02ee\u02ef\u0005_\u0000\u0000\u02ef"+ + "\u02f0\u0005u\u0000\u0000\u02f0\u0082\u0001\u0000\u0000\u0000\u02f1\u02f2"+ + "\u0005.\u0000\u0000\u02f2\u02f3\u0005g\u0000\u0000\u02f3\u02f4\u0005e"+ + "\u0000\u0000\u02f4\u0084\u0001\u0000\u0000\u0000\u02f5\u02f6\u0005.\u0000"+ + "\u0000\u02f6\u02f7\u0005g\u0000\u0000\u02f7\u02f8\u0005e\u0000\u0000\u02f8"+ + "\u02f9\u0005_\u0000\u0000\u02f9\u02fa\u0005s\u0000\u0000\u02fa\u0086\u0001"+ + "\u0000\u0000\u0000\u02fb\u02fc\u0005.\u0000\u0000\u02fc\u02fd\u0005g\u0000"+ + "\u0000\u02fd\u02fe\u0005e\u0000\u0000\u02fe\u02ff\u0005_\u0000\u0000\u02ff"+ + "\u0300\u0005u\u0000\u0000\u0300\u0088\u0001\u0000\u0000\u0000\u0301\u0302"+ + "\u0005.\u0000\u0000\u0302\u0303\u0005c\u0000\u0000\u0303\u0304\u0005l"+ + "\u0000\u0000\u0304\u0305\u0005z\u0000\u0000\u0305\u008a\u0001\u0000\u0000"+ + "\u0000\u0306\u0307\u0005.\u0000\u0000\u0307\u0308\u0005c\u0000\u0000\u0308"+ + "\u0309\u0005t\u0000\u0000\u0309\u030a\u0005z\u0000\u0000\u030a\u008c\u0001"+ + "\u0000\u0000\u0000\u030b\u030c\u0005.\u0000\u0000\u030c\u030d\u0005p\u0000"+ + "\u0000\u030d\u030e\u0005o\u0000\u0000\u030e\u030f\u0005p\u0000\u0000\u030f"+ + "\u0310\u0005c\u0000\u0000\u0310\u0311\u0005n\u0000\u0000\u0311\u0312\u0005"+ + "t\u0000\u0000\u0312\u008e\u0001\u0000\u0000\u0000\u0313\u0314\u0005.\u0000"+ + "\u0000\u0314\u0315\u0005n\u0000\u0000\u0315\u0316\u0005e\u0000\u0000\u0316"+ + "\u0317\u0005g\u0000\u0000\u0317\u0090\u0001\u0000\u0000\u0000\u0318\u0319"+ + "\u0005.\u0000\u0000\u0319\u031a\u0005a\u0000\u0000\u031a\u031b\u0005b"+ + "\u0000\u0000\u031b\u031c\u0005s\u0000\u0000\u031c\u0092\u0001\u0000\u0000"+ + "\u0000\u031d\u031e\u0005.\u0000\u0000\u031e\u031f\u0005s\u0000\u0000\u031f"+ + "\u0320\u0005q\u0000\u0000\u0320\u0321\u0005r\u0000\u0000\u0321\u0322\u0005"+ + "t\u0000\u0000\u0322\u0094\u0001\u0000\u0000\u0000\u0323\u0324\u0005.\u0000"+ + "\u0000\u0324\u0325\u0005c\u0000\u0000\u0325\u0326\u0005e\u0000\u0000\u0326"+ + "\u0327\u0005i\u0000\u0000\u0327\u0328\u0005l\u0000\u0000\u0328\u0096\u0001"+ + "\u0000\u0000\u0000\u0329\u032a\u0005.\u0000\u0000\u032a\u032b\u0005f\u0000"+ + "\u0000\u032b\u032c\u0005l\u0000\u0000\u032c\u032d\u0005o\u0000\u0000\u032d"+ + "\u032e\u0005o\u0000\u0000\u032e\u032f\u0005r\u0000\u0000\u032f\u0098\u0001"+ + "\u0000\u0000\u0000\u0330\u0331\u0005.\u0000\u0000\u0331\u0332\u0005t\u0000"+ + "\u0000\u0332\u0333\u0005r\u0000\u0000\u0333\u0334\u0005u\u0000\u0000\u0334"+ + "\u0335\u0005n\u0000\u0000\u0335\u0336\u0005c\u0000\u0000\u0336\u009a\u0001"+ + "\u0000\u0000\u0000\u0337\u0338\u0005.\u0000\u0000\u0338\u0339\u0005n\u0000"+ + "\u0000\u0339\u033a\u0005e\u0000\u0000\u033a\u033b\u0005a\u0000\u0000\u033b"+ + "\u033c\u0005r\u0000\u0000\u033c\u033d\u0005e\u0000\u0000\u033d\u033e\u0005"+ + "s\u0000\u0000\u033e\u033f\u0005t\u0000\u0000\u033f\u009c\u0001\u0000\u0000"+ + "\u0000\u0340\u0341\u0005.\u0000\u0000\u0341\u0342\u0005a\u0000\u0000\u0342"+ + "\u0343\u0005d\u0000\u0000\u0343\u0344\u0005d\u0000\u0000\u0344\u009e\u0001"+ + "\u0000\u0000\u0000\u0345\u0346\u0005.\u0000\u0000\u0346\u0347\u0005s\u0000"+ + "\u0000\u0347\u0348\u0005u\u0000\u0000\u0348\u0349\u0005b\u0000\u0000\u0349"+ + "\u00a0\u0001\u0000\u0000\u0000\u034a\u034b\u0005.\u0000\u0000\u034b\u034c"+ + "\u0005m\u0000\u0000\u034c\u034d\u0005u\u0000\u0000\u034d\u034e\u0005l"+ + "\u0000\u0000\u034e\u00a2\u0001\u0000\u0000\u0000\u034f\u0350\u0005.\u0000"+ + "\u0000\u0350\u0351\u0005d\u0000\u0000\u0351\u0352\u0005i\u0000\u0000\u0352"+ + "\u0353\u0005v\u0000\u0000\u0353\u00a4\u0001\u0000\u0000\u0000\u0354\u0355"+ + "\u0005.\u0000\u0000\u0355\u0356\u0005d\u0000\u0000\u0356\u0357\u0005i"+ + "\u0000\u0000\u0357\u0358\u0005v\u0000\u0000\u0358\u0359\u0005_\u0000\u0000"+ + "\u0359\u035a\u0005s\u0000\u0000\u035a\u00a6\u0001\u0000\u0000\u0000\u035b"+ + "\u035c\u0005.\u0000\u0000\u035c\u035d\u0005d\u0000\u0000\u035d\u035e\u0005"+ + "i\u0000\u0000\u035e\u035f\u0005v\u0000\u0000\u035f\u0360\u0005_\u0000"+ + "\u0000\u0360\u0361\u0005u\u0000\u0000\u0361\u00a8\u0001\u0000\u0000\u0000"+ + "\u0362\u0363\u0005.\u0000\u0000\u0363\u0364\u0005r\u0000\u0000\u0364\u0365"+ + "\u0005e\u0000\u0000\u0365\u0366\u0005m\u0000\u0000\u0366\u0367\u0005_"+ + "\u0000\u0000\u0367\u0368\u0005s\u0000\u0000\u0368\u00aa\u0001\u0000\u0000"+ + "\u0000\u0369\u036a\u0005.\u0000\u0000\u036a\u036b\u0005r\u0000\u0000\u036b"+ + "\u036c\u0005e\u0000\u0000\u036c\u036d\u0005m\u0000\u0000\u036d\u036e\u0005"+ + "_\u0000\u0000\u036e\u036f\u0005u\u0000\u0000\u036f\u00ac\u0001\u0000\u0000"+ + "\u0000\u0370\u0371\u0005.\u0000\u0000\u0371\u0372\u0005a\u0000\u0000\u0372"+ + "\u0373\u0005n\u0000\u0000\u0373\u0374\u0005d\u0000\u0000\u0374\u00ae\u0001"+ + "\u0000\u0000\u0000\u0375\u0376\u0005.\u0000\u0000\u0376\u0377\u0005o\u0000"+ + "\u0000\u0377\u0378\u0005r\u0000\u0000\u0378\u00b0\u0001\u0000\u0000\u0000"+ + "\u0379\u037a\u0005.\u0000\u0000\u037a\u037b\u0005x\u0000\u0000\u037b\u037c"+ + "\u0005o\u0000\u0000\u037c\u037d\u0005r\u0000\u0000\u037d\u00b2\u0001\u0000"+ + "\u0000\u0000\u037e\u037f\u0005.\u0000\u0000\u037f\u0380\u0005s\u0000\u0000"+ + "\u0380\u0381\u0005h\u0000\u0000\u0381\u0382\u0005l\u0000\u0000\u0382\u00b4"+ + "\u0001\u0000\u0000\u0000\u0383\u0384\u0005.\u0000\u0000\u0384\u0385\u0005"+ + "s\u0000\u0000\u0385\u0386\u0005h\u0000\u0000\u0386\u0387\u0005r\u0000"+ + "\u0000\u0387\u0388\u0005_\u0000\u0000\u0388\u0389\u0005s\u0000\u0000\u0389"+ + "\u00b6\u0001\u0000\u0000\u0000\u038a\u038b\u0005.\u0000\u0000\u038b\u038c"+ + "\u0005s\u0000\u0000\u038c\u038d\u0005h\u0000\u0000\u038d\u038e\u0005r"+ + "\u0000\u0000\u038e\u038f\u0005_\u0000\u0000\u038f\u0390\u0005u\u0000\u0000"+ + "\u0390\u00b8\u0001\u0000\u0000\u0000\u0391\u0392\u0005.\u0000\u0000\u0392"+ + "\u0393\u0005r\u0000\u0000\u0393\u0394\u0005o\u0000\u0000\u0394\u0395\u0005"+ + "t\u0000\u0000\u0395\u0396\u0005l\u0000\u0000\u0396\u00ba\u0001\u0000\u0000"+ + "\u0000\u0397\u0398\u0005.\u0000\u0000\u0398\u0399\u0005r\u0000\u0000\u0399"+ + "\u039a\u0005o\u0000\u0000\u039a\u039b\u0005t\u0000\u0000\u039b\u039c\u0005"+ + "r\u0000\u0000\u039c\u00bc\u0001\u0000\u0000\u0000\u039d\u039e\u0005.\u0000"+ + "\u0000\u039e\u039f\u0005m\u0000\u0000\u039f\u03a0\u0005i\u0000\u0000\u03a0"+ + "\u03a1\u0005n\u0000\u0000\u03a1\u00be\u0001\u0000\u0000\u0000\u03a2\u03a3"+ + "\u0005.\u0000\u0000\u03a3\u03a4\u0005m\u0000\u0000\u03a4\u03a5\u0005a"+ + "\u0000\u0000\u03a5\u03a6\u0005x\u0000\u0000\u03a6\u00c0\u0001\u0000\u0000"+ + "\u0000\u03a7\u03a8\u0005.\u0000\u0000\u03a8\u03a9\u0005c\u0000\u0000\u03a9"+ + "\u03aa\u0005o\u0000\u0000\u03aa\u03ab\u0005p\u0000\u0000\u03ab\u03ac\u0005"+ + "y\u0000\u0000\u03ac\u03ad\u0005s\u0000\u0000\u03ad\u03ae\u0005i\u0000"+ + "\u0000\u03ae\u03af\u0005g\u0000\u0000\u03af\u03b0\u0005n\u0000\u0000\u03b0"+ + "\u00c2\u0001\u0000\u0000\u0000\u03b1\u03b2\u0005.\u0000\u0000\u03b2\u03b3"+ + "\u0005w\u0000\u0000\u03b3\u03b4\u0005r\u0000\u0000\u03b4\u03b5\u0005a"+ + "\u0000\u0000\u03b5\u03b6\u0005p\u0000\u0000\u03b6\u03b7\u0005_\u0000\u0000"+ + "\u03b7\u00c4\u0001\u0000\u0000\u0000\u03b8\u03b9\u0005.\u0000\u0000\u03b9"+ + "\u03ba\u0005t\u0000\u0000\u03ba\u03bb\u0005r\u0000\u0000\u03bb\u03bc\u0005"+ + "u\u0000\u0000\u03bc\u03bd\u0005n\u0000\u0000\u03bd\u03be\u0005c\u0000"+ + "\u0000\u03be\u03bf\u0005_\u0000\u0000\u03bf\u00c6\u0001\u0000\u0000\u0000"+ + "\u03c0\u03c1\u0005.\u0000\u0000\u03c1\u03c2\u0005t\u0000\u0000\u03c2\u03c3"+ + "\u0005r\u0000\u0000\u03c3\u03c4\u0005u\u0000\u0000\u03c4\u03c5\u0005n"+ + "\u0000\u0000\u03c5\u03c6\u0005c\u0000\u0000\u03c6\u03c7\u0005_\u0000\u0000"+ + "\u03c7\u03c8\u0005s\u0000\u0000\u03c8\u03c9\u0005a\u0000\u0000\u03c9\u03ca"+ + "\u0005t\u0000\u0000\u03ca\u03cb\u0005_\u0000\u0000\u03cb\u00c8\u0001\u0000"+ + "\u0000\u0000\u03cc\u03cd\u0005.\u0000\u0000\u03cd\u03ce\u0005c\u0000\u0000"+ + "\u03ce\u03cf\u0005o\u0000\u0000\u03cf\u03d0\u0005n\u0000\u0000\u03d0\u03d1"+ + "\u0005v\u0000\u0000\u03d1\u03d2\u0005e\u0000\u0000\u03d2\u03d3\u0005r"+ + "\u0000\u0000\u03d3\u03d4\u0005t\u0000\u0000\u03d4\u03d5\u0005_\u0000\u0000"+ + "\u03d5\u00ca\u0001\u0000\u0000\u0000\u03d6\u03d7\u0005.\u0000\u0000\u03d7"+ + "\u03d8\u0005e\u0000\u0000\u03d8\u03d9\u0005x\u0000\u0000\u03d9\u03da\u0005"+ + "t\u0000\u0000\u03da\u03db\u0005e\u0000\u0000\u03db\u03dc\u0005n\u0000"+ + "\u0000\u03dc\u03dd\u0005d\u0000\u0000\u03dd\u03de\u0005_\u0000\u0000\u03de"+ + "\u00cc\u0001\u0000\u0000\u0000\u03df\u03e0\u0005.\u0000\u0000\u03e0\u03e1"+ + "\u0005d\u0000\u0000\u03e1\u03e2\u0005e\u0000\u0000\u03e2\u03e3\u0005m"+ + "\u0000\u0000\u03e3\u03e4\u0005o\u0000\u0000\u03e4\u03e5\u0005t\u0000\u0000"+ + "\u03e5\u03e6\u0005e\u0000\u0000\u03e6\u03e7\u0005_\u0000\u0000\u03e7\u00ce"+ + "\u0001\u0000\u0000\u0000\u03e8\u03e9\u0005.\u0000\u0000\u03e9\u03ea\u0005"+ + "p\u0000\u0000\u03ea\u03eb\u0005r\u0000\u0000\u03eb\u03ec\u0005o\u0000"+ + "\u0000\u03ec\u03ed\u0005m\u0000\u0000\u03ed\u03ee\u0005o\u0000\u0000\u03ee"+ + "\u03ef\u0005t\u0000\u0000\u03ef\u03f0\u0005e\u0000\u0000\u03f0\u03f1\u0005"+ + "_\u0000\u0000\u03f1\u00d0\u0001\u0000\u0000\u0000\u03f2\u03f3\u0005.\u0000"+ + "\u0000\u03f3\u03f4\u0005r\u0000\u0000\u03f4\u03f5\u0005e\u0000\u0000\u03f5"+ + "\u03f6\u0005i\u0000\u0000\u03f6\u03f7\u0005n\u0000\u0000\u03f7\u03f8\u0005"+ + "t\u0000\u0000\u03f8\u03f9\u0005e\u0000\u0000\u03f9\u03fa\u0005r\u0000"+ + "\u0000\u03fa\u03fb\u0005p\u0000\u0000\u03fb\u03fc\u0005r\u0000\u0000\u03fc"+ + "\u03fd\u0005e\u0000\u0000\u03fd\u03fe\u0005t\u0000\u0000\u03fe\u03ff\u0005"+ + "_\u0000\u0000\u03ff\u00d2\u0001\u0000\u0000\u0000\u0400\u0401\u0005m\u0000"+ + "\u0000\u0401\u0402\u0005e\u0000\u0000\u0402\u0403\u0005m\u0000\u0000\u0403"+ + "\u0404\u0005o\u0000\u0000\u0404\u0405\u0005r\u0000\u0000\u0405\u0406\u0005"+ + "y\u0000\u0000\u0406\u0407\u0005.\u0000\u0000\u0407\u0408\u0005s\u0000"+ + "\u0000\u0408\u0409\u0005i\u0000\u0000\u0409\u040a\u0005z\u0000\u0000\u040a"+ + "\u040b\u0005e\u0000\u0000\u040b\u00d4\u0001\u0000\u0000\u0000\u040c\u040d"+ + "\u0005m\u0000\u0000\u040d\u040e\u0005e\u0000\u0000\u040e\u040f\u0005m"+ + "\u0000\u0000\u040f\u0410\u0005o\u0000\u0000\u0410\u0411\u0005r\u0000\u0000"+ + "\u0411\u0412\u0005y\u0000\u0000\u0412\u0413\u0005.\u0000\u0000\u0413\u0414"+ + "\u0005g\u0000\u0000\u0414\u0415\u0005r\u0000\u0000\u0415\u0416\u0005o"+ + "\u0000\u0000\u0416\u0417\u0005w\u0000\u0000\u0417\u00d6\u0001\u0000\u0000"+ + "\u0000\u0418\u0419\u0005m\u0000\u0000\u0419\u041a\u0005e\u0000\u0000\u041a"+ + "\u041b\u0005m\u0000\u0000\u041b\u041c\u0005o\u0000\u0000\u041c\u041d\u0005"+ + "r\u0000\u0000\u041d\u041e\u0005y\u0000\u0000\u041e\u041f\u0005.\u0000"+ + "\u0000\u041f\u0420\u0005f\u0000\u0000\u0420\u0421\u0005i\u0000\u0000\u0421"+ + "\u0422\u0005l\u0000\u0000\u0422\u0423\u0005l\u0000\u0000\u0423\u00d8\u0001"+ + "\u0000\u0000\u0000\u0424\u0425\u0005m\u0000\u0000\u0425\u0426\u0005e\u0000"+ + "\u0000\u0426\u0427\u0005m\u0000\u0000\u0427\u0428\u0005o\u0000\u0000\u0428"+ + "\u0429\u0005r\u0000\u0000\u0429\u042a\u0005y\u0000\u0000\u042a\u042b\u0005"+ + ".\u0000\u0000\u042b\u042c\u0005c\u0000\u0000\u042c\u042d\u0005o\u0000"+ + "\u0000\u042d\u042e\u0005p\u0000\u0000\u042e\u042f\u0005y\u0000\u0000\u042f"+ + "\u00da\u0001\u0000\u0000\u0000\u0430\u0431\u0005m\u0000\u0000\u0431\u0432"+ + "\u0005e\u0000\u0000\u0432\u0433\u0005m\u0000\u0000\u0433\u0434\u0005o"+ + "\u0000\u0000\u0434\u0435\u0005r\u0000\u0000\u0435\u0436\u0005y\u0000\u0000"+ + "\u0436\u0437\u0005.\u0000\u0000\u0437\u0438\u0005i\u0000\u0000\u0438\u0439"+ + "\u0005n\u0000\u0000\u0439\u043a\u0005i\u0000\u0000\u043a\u043b\u0005t"+ + "\u0000\u0000\u043b\u00dc\u0001\u0000\u0000\u0000\u043c\u043d\u0003g3\u0000"+ + "\u043d\u043e\u0003k5\u0000\u043e\u00de\u0001\u0000\u0000\u0000\u043f\u0440"+ + "\u0003g3\u0000\u0440\u0441\u0005.\u0000\u0000\u0441\u0442\u0005e\u0000"+ + "\u0000\u0442\u0443\u0005q\u0000\u0000\u0443\u04a0\u0001\u0000\u0000\u0000"+ + "\u0444\u0445\u0003g3\u0000\u0445\u0446\u0005.\u0000\u0000\u0446\u0447"+ + "\u0005n\u0000\u0000\u0447\u0448\u0005e\u0000\u0000\u0448\u04a0\u0001\u0000"+ + "\u0000\u0000\u0449\u044a\u0003g3\u0000\u044a\u044b\u0005.\u0000\u0000"+ + "\u044b\u044c\u0005l\u0000\u0000\u044c\u044d\u0005t\u0000\u0000\u044d\u044e"+ + "\u0005_\u0000\u0000\u044e\u044f\u0005s\u0000\u0000\u044f\u04a0\u0001\u0000"+ + "\u0000\u0000\u0450\u0451\u0003g3\u0000\u0451\u0452\u0005.\u0000\u0000"+ + "\u0452\u0453\u0005l\u0000\u0000\u0453\u0454\u0005t\u0000\u0000\u0454\u0455"+ + "\u0005_\u0000\u0000\u0455\u0456\u0005u\u0000\u0000\u0456\u04a0\u0001\u0000"+ + "\u0000\u0000\u0457\u0458\u0003g3\u0000\u0458\u0459\u0005.\u0000\u0000"+ + "\u0459\u045a\u0005l\u0000\u0000\u045a\u045b\u0005e\u0000\u0000\u045b\u045c"+ + "\u0005_\u0000\u0000\u045c\u045d\u0005s\u0000\u0000\u045d\u04a0\u0001\u0000"+ + "\u0000\u0000\u045e\u045f\u0003g3\u0000\u045f\u0460\u0005.\u0000\u0000"+ + "\u0460\u0461\u0005l\u0000\u0000\u0461\u0462\u0005e\u0000\u0000\u0462\u0463"+ + "\u0005_\u0000\u0000\u0463\u0464\u0005u\u0000\u0000\u0464\u04a0\u0001\u0000"+ + "\u0000\u0000\u0465\u0466\u0003g3\u0000\u0466\u0467\u0005.\u0000\u0000"+ + "\u0467\u0468\u0005g\u0000\u0000\u0468\u0469\u0005t\u0000\u0000\u0469\u046a"+ + "\u0005_\u0000\u0000\u046a\u046b\u0005s\u0000\u0000\u046b\u04a0\u0001\u0000"+ + "\u0000\u0000\u046c\u046d\u0003g3\u0000\u046d\u046e\u0005.\u0000\u0000"+ + "\u046e\u046f\u0005g\u0000\u0000\u046f\u0470\u0005t\u0000\u0000\u0470\u0471"+ + "\u0005_\u0000\u0000\u0471\u0472\u0005u\u0000\u0000\u0472\u04a0\u0001\u0000"+ + "\u0000\u0000\u0473\u0474\u0003g3\u0000\u0474\u0475\u0005.\u0000\u0000"+ + "\u0475\u0476\u0005g\u0000\u0000\u0476\u0477\u0005e\u0000\u0000\u0477\u0478"+ + "\u0005_\u0000\u0000\u0478\u0479\u0005s\u0000\u0000\u0479\u04a0\u0001\u0000"+ + "\u0000\u0000\u047a\u047b\u0003g3\u0000\u047b\u047c\u0005.\u0000\u0000"+ + "\u047c\u047d\u0005g\u0000\u0000\u047d\u047e\u0005e\u0000\u0000\u047e\u047f"+ + "\u0005_\u0000\u0000\u047f\u0480\u0005u\u0000\u0000\u0480\u04a0\u0001\u0000"+ + "\u0000\u0000\u0481\u0482\u0003i4\u0000\u0482\u0483\u0005.\u0000\u0000"+ + "\u0483\u0484\u0005e\u0000\u0000\u0484\u0485\u0005q\u0000\u0000\u0485\u04a0"+ + "\u0001\u0000\u0000\u0000\u0486\u0487\u0003i4\u0000\u0487\u0488\u0005."+ + "\u0000\u0000\u0488\u0489\u0005n\u0000\u0000\u0489\u048a\u0005e\u0000\u0000"+ + "\u048a\u04a0\u0001\u0000\u0000\u0000\u048b\u048c\u0003i4\u0000\u048c\u048d"+ + "\u0005.\u0000\u0000\u048d\u048e\u0005l\u0000\u0000\u048e\u048f\u0005t"+ + "\u0000\u0000\u048f\u04a0\u0001\u0000\u0000\u0000\u0490\u0491\u0003i4\u0000"+ + "\u0491\u0492\u0005.\u0000\u0000\u0492\u0493\u0005l\u0000\u0000\u0493\u0494"+ + "\u0005e\u0000\u0000\u0494\u04a0\u0001\u0000\u0000\u0000\u0495\u0496\u0003"+ + "i4\u0000\u0496\u0497\u0005.\u0000\u0000\u0497\u0498\u0005g\u0000\u0000"+ + "\u0498\u0499\u0005t\u0000\u0000\u0499\u04a0\u0001\u0000\u0000\u0000\u049a"+ + "\u049b\u0003i4\u0000\u049b\u049c\u0005.\u0000\u0000\u049c\u049d\u0005"+ + "g\u0000\u0000\u049d\u049e\u0005e\u0000\u0000\u049e\u04a0\u0001\u0000\u0000"+ + "\u0000\u049f\u043f\u0001\u0000\u0000\u0000\u049f\u0444\u0001\u0000\u0000"+ + "\u0000\u049f\u0449\u0001\u0000\u0000\u0000\u049f\u0450\u0001\u0000\u0000"+ + "\u0000\u049f\u0457\u0001\u0000\u0000\u0000\u049f\u045e\u0001\u0000\u0000"+ + "\u0000\u049f\u0465\u0001\u0000\u0000\u0000\u049f\u046c\u0001\u0000\u0000"+ + "\u0000\u049f\u0473\u0001\u0000\u0000\u0000\u049f\u047a\u0001\u0000\u0000"+ + "\u0000\u049f\u0481\u0001\u0000\u0000\u0000\u049f\u0486\u0001\u0000\u0000"+ + "\u0000\u049f\u048b\u0001\u0000\u0000\u0000\u049f\u0490\u0001\u0000\u0000"+ + "\u0000\u049f\u0495\u0001\u0000\u0000\u0000\u049f\u049a\u0001\u0000\u0000"+ + "\u0000\u04a0\u00e0\u0001\u0000\u0000\u0000\u04a1\u04a2\u0003g3\u0000\u04a2"+ + "\u04a3\u0005.\u0000\u0000\u04a3\u04a4\u0005c\u0000\u0000\u04a4\u04a5\u0005"+ + "l\u0000\u0000\u04a5\u04a6\u0005z\u0000\u0000\u04a6\u04eb\u0001\u0000\u0000"+ + "\u0000\u04a7\u04a8\u0003g3\u0000\u04a8\u04a9\u0005.\u0000\u0000\u04a9"+ + "\u04aa\u0005c\u0000\u0000\u04aa\u04ab\u0005t\u0000\u0000\u04ab\u04ac\u0005"+ + "z\u0000\u0000\u04ac\u04eb\u0001\u0000\u0000\u0000\u04ad\u04ae\u0003g3"+ + "\u0000\u04ae\u04af\u0005.\u0000\u0000\u04af\u04b0\u0005p\u0000\u0000\u04b0"+ + "\u04b1\u0005o\u0000\u0000\u04b1\u04b2\u0005p\u0000\u0000\u04b2\u04b3\u0005"+ + "c\u0000\u0000\u04b3\u04b4\u0005n\u0000\u0000\u04b4\u04b5\u0005t\u0000"+ + "\u0000\u04b5\u04eb\u0001\u0000\u0000\u0000\u04b6\u04b7\u0003i4\u0000\u04b7"+ + "\u04b8\u0005.\u0000\u0000\u04b8\u04b9\u0005n\u0000\u0000\u04b9\u04ba\u0005"+ + "e\u0000\u0000\u04ba\u04bb\u0005g\u0000\u0000\u04bb\u04eb\u0001\u0000\u0000"+ + "\u0000\u04bc\u04bd\u0003i4\u0000\u04bd\u04be\u0005.\u0000\u0000\u04be"+ + "\u04bf\u0005a\u0000\u0000\u04bf\u04c0\u0005b\u0000\u0000\u04c0\u04c1\u0005"+ + "s\u0000\u0000\u04c1\u04eb\u0001\u0000\u0000\u0000\u04c2\u04c3\u0003i4"+ + "\u0000\u04c3\u04c4\u0005.\u0000\u0000\u04c4\u04c5\u0005s\u0000\u0000\u04c5"+ + "\u04c6\u0005q\u0000\u0000\u04c6\u04c7\u0005r\u0000\u0000\u04c7\u04c8\u0005"+ + "t\u0000\u0000\u04c8\u04eb\u0001\u0000\u0000\u0000\u04c9\u04ca\u0003i4"+ + "\u0000\u04ca\u04cb\u0005.\u0000\u0000\u04cb\u04cc\u0005c\u0000\u0000\u04cc"+ + "\u04cd\u0005e\u0000\u0000\u04cd\u04ce\u0005i\u0000\u0000\u04ce\u04cf\u0005"+ + "l\u0000\u0000\u04cf\u04eb\u0001\u0000\u0000\u0000\u04d0\u04d1\u0003i4"+ + "\u0000\u04d1\u04d2\u0005.\u0000\u0000\u04d2\u04d3\u0005f\u0000\u0000\u04d3"+ + "\u04d4\u0005l\u0000\u0000\u04d4\u04d5\u0005o\u0000\u0000\u04d5\u04d6\u0005"+ + "o\u0000\u0000\u04d6\u04d7\u0005r\u0000\u0000\u04d7\u04eb\u0001\u0000\u0000"+ + "\u0000\u04d8\u04d9\u0003i4\u0000\u04d9\u04da\u0005.\u0000\u0000\u04da"+ + "\u04db\u0005t\u0000\u0000\u04db\u04dc\u0005r\u0000\u0000\u04dc\u04dd\u0005"+ + "u\u0000\u0000\u04dd\u04de\u0005n\u0000\u0000\u04de\u04df\u0005c\u0000"+ + "\u0000\u04df\u04eb\u0001\u0000\u0000\u0000\u04e0\u04e1\u0003i4\u0000\u04e1"+ + "\u04e2\u0005.\u0000\u0000\u04e2\u04e3\u0005n\u0000\u0000\u04e3\u04e4\u0005"+ + "e\u0000\u0000\u04e4\u04e5\u0005a\u0000\u0000\u04e5\u04e6\u0005r\u0000"+ + "\u0000\u04e6\u04e7\u0005e\u0000\u0000\u04e7\u04e8\u0005s\u0000\u0000\u04e8"+ + "\u04e9\u0005t\u0000\u0000\u04e9\u04eb\u0001\u0000\u0000\u0000\u04ea\u04a1"+ + "\u0001\u0000\u0000\u0000\u04ea\u04a7\u0001\u0000\u0000\u0000\u04ea\u04ad"+ + "\u0001\u0000\u0000\u0000\u04ea\u04b6\u0001\u0000\u0000\u0000\u04ea\u04bc"+ + "\u0001\u0000\u0000\u0000\u04ea\u04c2\u0001\u0000\u0000\u0000\u04ea\u04c9"+ + "\u0001\u0000\u0000\u0000\u04ea\u04d0\u0001\u0000\u0000\u0000\u04ea\u04d8"+ + "\u0001\u0000\u0000\u0000\u04ea\u04e0\u0001\u0000\u0000\u0000\u04eb\u00e2"+ + "\u0001\u0000\u0000\u0000\u04ec\u04ed\u0003g3\u0000\u04ed\u04ee\u0005."+ + "\u0000\u0000\u04ee\u04ef\u0005a\u0000\u0000\u04ef\u04f0\u0005d\u0000\u0000"+ + "\u04f0\u04f1\u0005d\u0000\u0000\u04f1\u0583\u0001\u0000\u0000\u0000\u04f2"+ + "\u04f3\u0003g3\u0000\u04f3\u04f4\u0005.\u0000\u0000\u04f4\u04f5\u0005"+ + "s\u0000\u0000\u04f5\u04f6\u0005u\u0000\u0000\u04f6\u04f7\u0005b\u0000"+ + "\u0000\u04f7\u0583\u0001\u0000\u0000\u0000\u04f8\u04f9\u0003g3\u0000\u04f9"+ + "\u04fa\u0005.\u0000\u0000\u04fa\u04fb\u0005m\u0000\u0000\u04fb\u04fc\u0005"+ + "u\u0000\u0000\u04fc\u04fd\u0005l\u0000\u0000\u04fd\u0583\u0001\u0000\u0000"+ + "\u0000\u04fe\u04ff\u0003g3\u0000\u04ff\u0500\u0005.\u0000\u0000\u0500"+ + "\u0501\u0005d\u0000\u0000\u0501\u0502\u0005i\u0000\u0000\u0502\u0503\u0005"+ + "v\u0000\u0000\u0503\u0504\u0005_\u0000\u0000\u0504\u0505\u0005s\u0000"+ + "\u0000\u0505\u0583\u0001\u0000\u0000\u0000\u0506\u0507\u0003g3\u0000\u0507"+ + "\u0508\u0005.\u0000\u0000\u0508\u0509\u0005d\u0000\u0000\u0509\u050a\u0005"+ + "i\u0000\u0000\u050a\u050b\u0005v\u0000\u0000\u050b\u050c\u0005_\u0000"+ + "\u0000\u050c\u050d\u0005u\u0000\u0000\u050d\u0583\u0001\u0000\u0000\u0000"+ + "\u050e\u050f\u0003g3\u0000\u050f\u0510\u0005.\u0000\u0000\u0510\u0511"+ + "\u0005r\u0000\u0000\u0511\u0512\u0005e\u0000\u0000\u0512\u0513\u0005m"+ + "\u0000\u0000\u0513\u0514\u0005_\u0000\u0000\u0514\u0515\u0005s\u0000\u0000"+ + "\u0515\u0583\u0001\u0000\u0000\u0000\u0516\u0517\u0003g3\u0000\u0517\u0518"+ + "\u0005.\u0000\u0000\u0518\u0519\u0005r\u0000\u0000\u0519\u051a\u0005e"+ + "\u0000\u0000\u051a\u051b\u0005m\u0000\u0000\u051b\u051c\u0005_\u0000\u0000"+ + "\u051c\u051d\u0005u\u0000\u0000\u051d\u0583\u0001\u0000\u0000\u0000\u051e"+ + "\u051f\u0003g3\u0000\u051f\u0520\u0005.\u0000\u0000\u0520\u0521\u0005"+ + "a\u0000\u0000\u0521\u0522\u0005n\u0000\u0000\u0522\u0523\u0005d\u0000"+ + "\u0000\u0523\u0583\u0001\u0000\u0000\u0000\u0524\u0525\u0003g3\u0000\u0525"+ + "\u0526\u0005.\u0000\u0000\u0526\u0527\u0005o\u0000\u0000\u0527\u0528\u0005"+ + "r\u0000\u0000\u0528\u0583\u0001\u0000\u0000\u0000\u0529\u052a\u0003g3"+ + "\u0000\u052a\u052b\u0005.\u0000\u0000\u052b\u052c\u0005x\u0000\u0000\u052c"+ + "\u052d\u0005o\u0000\u0000\u052d\u052e\u0005r\u0000\u0000\u052e\u0583\u0001"+ + "\u0000\u0000\u0000\u052f\u0530\u0003g3\u0000\u0530\u0531\u0005.\u0000"+ + "\u0000\u0531\u0532\u0005s\u0000\u0000\u0532\u0533\u0005h\u0000\u0000\u0533"+ + "\u0534\u0005l\u0000\u0000\u0534\u0583\u0001\u0000\u0000\u0000\u0535\u0536"+ + "\u0003g3\u0000\u0536\u0537\u0005.\u0000\u0000\u0537\u0538\u0005s\u0000"+ + "\u0000\u0538\u0539\u0005h\u0000\u0000\u0539\u053a\u0005r\u0000\u0000\u053a"+ + "\u053b\u0005_\u0000\u0000\u053b\u053c\u0005s\u0000\u0000\u053c\u0583\u0001"+ + "\u0000\u0000\u0000\u053d\u053e\u0003g3\u0000\u053e\u053f\u0005.\u0000"+ + "\u0000\u053f\u0540\u0005s\u0000\u0000\u0540\u0541\u0005h\u0000\u0000\u0541"+ + "\u0542\u0005r\u0000\u0000\u0542\u0543\u0005_\u0000\u0000\u0543\u0544\u0005"+ + "u\u0000\u0000\u0544\u0583\u0001\u0000\u0000\u0000\u0545\u0546\u0003g3"+ + "\u0000\u0546\u0547\u0005.\u0000\u0000\u0547\u0548\u0005r\u0000\u0000\u0548"+ + "\u0549\u0005o\u0000\u0000\u0549\u054a\u0005t\u0000\u0000\u054a\u054b\u0005"+ + "l\u0000\u0000\u054b\u0583\u0001\u0000\u0000\u0000\u054c\u054d\u0003g3"+ + "\u0000\u054d\u054e\u0005.\u0000\u0000\u054e\u054f\u0005r\u0000\u0000\u054f"+ + "\u0550\u0005o\u0000\u0000\u0550\u0551\u0005t\u0000\u0000\u0551\u0552\u0005"+ + "r\u0000\u0000\u0552\u0583\u0001\u0000\u0000\u0000\u0553\u0554\u0003i4"+ + "\u0000\u0554\u0555\u0005.\u0000\u0000\u0555\u0556\u0005a\u0000\u0000\u0556"+ + "\u0557\u0005d\u0000\u0000\u0557\u0558\u0005d\u0000\u0000\u0558\u0583\u0001"+ + "\u0000\u0000\u0000\u0559\u055a\u0003i4\u0000\u055a\u055b\u0005.\u0000"+ + "\u0000\u055b\u055c\u0005s\u0000\u0000\u055c\u055d\u0005u\u0000\u0000\u055d"+ + "\u055e\u0005b\u0000\u0000\u055e\u0583\u0001\u0000\u0000\u0000\u055f\u0560"+ + "\u0003i4\u0000\u0560\u0561\u0005.\u0000\u0000\u0561\u0562\u0005m\u0000"+ + "\u0000\u0562\u0563\u0005u\u0000\u0000\u0563\u0564\u0005l\u0000\u0000\u0564"+ + "\u0583\u0001\u0000\u0000\u0000\u0565\u0566\u0003i4\u0000\u0566\u0567\u0005"+ + ".\u0000\u0000\u0567\u0568\u0005d\u0000\u0000\u0568\u0569\u0005i\u0000"+ + "\u0000\u0569\u056a\u0005v\u0000\u0000\u056a\u0583\u0001\u0000\u0000\u0000"+ + "\u056b\u056c\u0003i4\u0000\u056c\u056d\u0005.\u0000\u0000\u056d\u056e"+ + "\u0005m\u0000\u0000\u056e\u056f\u0005i\u0000\u0000\u056f\u0570\u0005n"+ + "\u0000\u0000\u0570\u0583\u0001\u0000\u0000\u0000\u0571\u0572\u0003i4\u0000"+ + "\u0572\u0573\u0005.\u0000\u0000\u0573\u0574\u0005m\u0000\u0000\u0574\u0575"+ + "\u0005a\u0000\u0000\u0575\u0576\u0005x\u0000\u0000\u0576\u0583\u0001\u0000"+ + "\u0000\u0000\u0577\u0578\u0003i4\u0000\u0578\u0579\u0005.\u0000\u0000"+ + "\u0579\u057a\u0005c\u0000\u0000\u057a\u057b\u0005o\u0000\u0000\u057b\u057c"+ + "\u0005p\u0000\u0000\u057c\u057d\u0005y\u0000\u0000\u057d\u057e\u0005s"+ + "\u0000\u0000\u057e\u057f\u0005i\u0000\u0000\u057f\u0580\u0005g\u0000\u0000"+ + "\u0580\u0581\u0005n\u0000\u0000\u0581\u0583\u0001\u0000\u0000\u0000\u0582"+ + "\u04ec\u0001\u0000\u0000\u0000\u0582\u04f2\u0001\u0000\u0000\u0000\u0582"+ + "\u04f8\u0001\u0000\u0000\u0000\u0582\u04fe\u0001\u0000\u0000\u0000\u0582"+ + "\u0506\u0001\u0000\u0000\u0000\u0582\u050e\u0001\u0000\u0000\u0000\u0582"+ + "\u0516\u0001\u0000\u0000\u0000\u0582\u051e\u0001\u0000\u0000\u0000\u0582"+ + "\u0524\u0001\u0000\u0000\u0000\u0582\u0529\u0001\u0000\u0000\u0000\u0582"+ + "\u052f\u0001\u0000\u0000\u0000\u0582\u0535\u0001\u0000\u0000\u0000\u0582"+ + "\u053d\u0001\u0000\u0000\u0000\u0582\u0545\u0001\u0000\u0000\u0000\u0582"+ + "\u054c\u0001\u0000\u0000\u0000\u0582\u0553\u0001\u0000\u0000\u0000\u0582"+ + "\u0559\u0001\u0000\u0000\u0000\u0582\u055f\u0001\u0000\u0000\u0000\u0582"+ + "\u0565\u0001\u0000\u0000\u0000\u0582\u056b\u0001\u0000\u0000\u0000\u0582"+ + "\u0571\u0001\u0000\u0000\u0000\u0582\u0577\u0001\u0000\u0000\u0000\u0583"+ + "\u00e4\u0001\u0000\u0000\u0000\u0584\u0585\u0003_/\u0000\u0585\u0586\u0005"+ + ".\u0000\u0000\u0586\u0587\u0005w\u0000\u0000\u0587\u0588\u0005r\u0000"+ + "\u0000\u0588\u0589\u0005a\u0000\u0000\u0589\u058a\u0005p\u0000\u0000\u058a"+ + "\u058b\u0005_\u0000\u0000\u058b\u058c\u0001\u0000\u0000\u0000\u058c\u058d"+ + "\u0003a0\u0000\u058d\u0627\u0001\u0000\u0000\u0000\u058e\u058f\u0003g"+ + "3\u0000\u058f\u0590\u0005.\u0000\u0000\u0590\u0591\u0005t\u0000\u0000"+ + "\u0591\u0592\u0005r\u0000\u0000\u0592\u0593\u0005u\u0000\u0000\u0593\u0594"+ + "\u0005n\u0000\u0000\u0594\u0595\u0005c\u0000\u0000\u0595\u0596\u0005_"+ + "\u0000\u0000\u0596\u0597\u0001\u0000\u0000\u0000\u0597\u0598\u0003i4\u0000"+ + "\u0598\u0599\u0003U*\u0000\u0599\u059a\u0003[-\u0000\u059a\u0627\u0001"+ + "\u0000\u0000\u0000\u059b\u059c\u0003g3\u0000\u059c\u059d\u0005.\u0000"+ + "\u0000\u059d\u059e\u0005t\u0000\u0000\u059e\u059f\u0005r\u0000\u0000\u059f"+ + "\u05a0\u0005u\u0000\u0000\u05a0\u05a1\u0005n\u0000\u0000\u05a1\u05a2\u0005"+ + "c\u0000\u0000\u05a2\u05a3\u0005_\u0000\u0000\u05a3\u05a4\u0005s\u0000"+ + "\u0000\u05a4\u05a5\u0005a\u0000\u0000\u05a5\u05a6\u0005t\u0000\u0000\u05a6"+ + "\u05a7\u0005_\u0000\u0000\u05a7\u05a8\u0001\u0000\u0000\u0000\u05a8\u05a9"+ + "\u0003i4\u0000\u05a9\u05aa\u0003U*\u0000\u05aa\u05ab\u0003[-\u0000\u05ab"+ + "\u0627\u0001\u0000\u0000\u0000\u05ac\u05ad\u0003a0\u0000\u05ad\u05ae\u0005"+ + ".\u0000\u0000\u05ae\u05af\u0005e\u0000\u0000\u05af\u05b0\u0005x\u0000"+ + "\u0000\u05b0\u05b1\u0005t\u0000\u0000\u05b1\u05b2\u0005e\u0000\u0000\u05b2"+ + "\u05b3\u0005n\u0000\u0000\u05b3\u05b4\u0005d\u0000\u0000\u05b4\u05b5\u0005"+ + "_\u0000\u0000\u05b5\u05b6\u0001\u0000\u0000\u0000\u05b6\u05b7\u0003_/"+ + "\u0000\u05b7\u05b8\u0003U*\u0000\u05b8\u05b9\u0003[-\u0000\u05b9\u0627"+ + "\u0001\u0000\u0000\u0000\u05ba\u05bb\u0003i4\u0000\u05bb\u05bc\u0005."+ + "\u0000\u0000\u05bc\u05bd\u0005c\u0000\u0000\u05bd\u05be\u0005o\u0000\u0000"+ + "\u05be\u05bf\u0005n\u0000\u0000\u05bf\u05c0\u0005v\u0000\u0000\u05c0\u05c1"+ + "\u0005e\u0000\u0000\u05c1\u05c2\u0005r\u0000\u0000\u05c2\u05c3\u0005t"+ + "\u0000\u0000\u05c3\u05c4\u0005_\u0000\u0000\u05c4\u05c5\u0001\u0000\u0000"+ + "\u0000\u05c5\u05c6\u0003g3\u0000\u05c6\u05c7\u0003U*\u0000\u05c7\u05c8"+ + "\u0003[-\u0000\u05c8\u0627\u0001\u0000\u0000\u0000\u05c9\u05ca\u0003c"+ + "1\u0000\u05ca\u05cb\u0005.\u0000\u0000\u05cb\u05cc\u0005d\u0000\u0000"+ + "\u05cc\u05cd\u0005e\u0000\u0000\u05cd\u05ce\u0005m\u0000\u0000\u05ce\u05cf"+ + "\u0005o\u0000\u0000\u05cf\u05d0\u0005t\u0000\u0000\u05d0\u05d1\u0005e"+ + "\u0000\u0000\u05d1\u05d2\u0005_\u0000\u0000\u05d2\u05d3\u0001\u0000\u0000"+ + "\u0000\u05d3\u05d4\u0003e2\u0000\u05d4\u0627\u0001\u0000\u0000\u0000\u05d5"+ + "\u05d6\u0003e2\u0000\u05d6\u05d7\u0005.\u0000\u0000\u05d7\u05d8\u0005"+ + "p\u0000\u0000\u05d8\u05d9\u0005r\u0000\u0000\u05d9\u05da\u0005o\u0000"+ + "\u0000\u05da\u05db\u0005m\u0000\u0000\u05db\u05dc\u0005o\u0000\u0000\u05dc"+ + "\u05dd\u0005t\u0000\u0000\u05dd\u05de\u0005e\u0000\u0000\u05de\u05df\u0005"+ + "_\u0000\u0000\u05df\u05e0\u0001\u0000\u0000\u0000\u05e0\u05e1\u0003c1"+ + "\u0000\u05e1\u0627\u0001\u0000\u0000\u0000\u05e2\u05e3\u0003c1\u0000\u05e3"+ + "\u05e4\u0005.\u0000\u0000\u05e4\u05e5\u0005r\u0000\u0000\u05e5\u05e6\u0005"+ + "e\u0000\u0000\u05e6\u05e7\u0005i\u0000\u0000\u05e7\u05e8\u0005n\u0000"+ + "\u0000\u05e8\u05e9\u0005t\u0000\u0000\u05e9\u05ea\u0005e\u0000\u0000\u05ea"+ + "\u05eb\u0005r\u0000\u0000\u05eb\u05ec\u0005p\u0000\u0000\u05ec\u05ed\u0005"+ + "r\u0000\u0000\u05ed\u05ee\u0005e\u0000\u0000\u05ee\u05ef\u0005t\u0000"+ + "\u0000\u05ef\u05f0\u0005_\u0000\u0000\u05f0\u05f1\u0001\u0000\u0000\u0000"+ + "\u05f1\u05f2\u0003_/\u0000\u05f2\u0627\u0001\u0000\u0000\u0000\u05f3\u05f4"+ + "\u0003e2\u0000\u05f4\u05f5\u0005.\u0000\u0000\u05f5\u05f6\u0005r\u0000"+ + "\u0000\u05f6\u05f7\u0005e\u0000\u0000\u05f7\u05f8\u0005i\u0000\u0000\u05f8"+ + "\u05f9\u0005n\u0000\u0000\u05f9\u05fa\u0005t\u0000\u0000\u05fa\u05fb\u0005"+ + "e\u0000\u0000\u05fb\u05fc\u0005r\u0000\u0000\u05fc\u05fd\u0005p\u0000"+ + "\u0000\u05fd\u05fe\u0005r\u0000\u0000\u05fe\u05ff\u0005e\u0000\u0000\u05ff"+ + "\u0600\u0005t\u0000\u0000\u0600\u0601\u0005_\u0000\u0000\u0601\u0602\u0001"+ + "\u0000\u0000\u0000\u0602\u0603\u0003a0\u0000\u0603\u0627\u0001\u0000\u0000"+ + "\u0000\u0604\u0605\u0003_/\u0000\u0605\u0606\u0005.\u0000\u0000\u0606"+ + "\u0607\u0005r\u0000\u0000\u0607\u0608\u0005e\u0000\u0000\u0608\u0609\u0005"+ + "i\u0000\u0000\u0609\u060a\u0005n\u0000\u0000\u060a\u060b\u0005t\u0000"+ + "\u0000\u060b\u060c\u0005e\u0000\u0000\u060c\u060d\u0005r\u0000\u0000\u060d"+ + "\u060e\u0005p\u0000\u0000\u060e\u060f\u0005r\u0000\u0000\u060f\u0610\u0005"+ + "e\u0000\u0000\u0610\u0611\u0005t\u0000\u0000\u0611\u0612\u0005_\u0000"+ + "\u0000\u0612\u0613\u0001\u0000\u0000\u0000\u0613\u0614\u0003c1\u0000\u0614"+ + "\u0627\u0001\u0000\u0000\u0000\u0615\u0616\u0003a0\u0000\u0616\u0617\u0005"+ + ".\u0000\u0000\u0617\u0618\u0005r\u0000\u0000\u0618\u0619\u0005e\u0000"+ + "\u0000\u0619\u061a\u0005i\u0000\u0000\u061a\u061b\u0005n\u0000\u0000\u061b"+ + "\u061c\u0005t\u0000\u0000\u061c\u061d\u0005e\u0000\u0000\u061d\u061e\u0005"+ + "r\u0000\u0000\u061e\u061f\u0005p\u0000\u0000\u061f\u0620\u0005r\u0000"+ + "\u0000\u0620\u0621\u0005e\u0000\u0000\u0621\u0622\u0005t\u0000\u0000\u0622"+ + "\u0623\u0005_\u0000\u0000\u0623\u0624\u0001\u0000\u0000\u0000\u0624\u0625"+ + "\u0003e2\u0000\u0625\u0627\u0001\u0000\u0000\u0000\u0626\u0584\u0001\u0000"+ + "\u0000\u0000\u0626\u058e\u0001\u0000\u0000\u0000\u0626\u059b\u0001\u0000"+ + "\u0000\u0000\u0626\u05ac\u0001\u0000\u0000\u0000\u0626\u05ba\u0001\u0000"+ + "\u0000\u0000\u0626\u05c9\u0001\u0000\u0000\u0000\u0626\u05d5\u0001\u0000"+ + "\u0000\u0000\u0626\u05e2\u0001\u0000\u0000\u0000\u0626\u05f3\u0001\u0000"+ + "\u0000\u0000\u0626\u0604\u0001\u0000\u0000\u0000\u0626\u0615\u0001\u0000"+ + "\u0000\u0000\u0627\u00e6\u0001\u0000\u0000\u0000\u0628\u0629\u0005t\u0000"+ + "\u0000\u0629\u062a\u0005y\u0000\u0000\u062a\u062b\u0005p\u0000\u0000\u062b"+ + "\u062c\u0005e\u0000\u0000\u062c\u00e8\u0001\u0000\u0000\u0000\u062d\u062e"+ + "\u0005f\u0000\u0000\u062e\u062f\u0005u\u0000\u0000\u062f\u0630\u0005n"+ + "\u0000\u0000\u0630\u0631\u0005c\u0000\u0000\u0631\u00ea\u0001\u0000\u0000"+ + "\u0000\u0632\u0633\u0005e\u0000\u0000\u0633\u0634\u0005x\u0000\u0000\u0634"+ + "\u0635\u0005t\u0000\u0000\u0635\u0636\u0005e\u0000\u0000\u0636\u0637\u0005"+ + "r\u0000\u0000\u0637\u0638\u0005n\u0000\u0000\u0638\u00ec\u0001\u0000\u0000"+ + "\u0000\u0639\u063a\u0005s\u0000\u0000\u063a\u063b\u0005t\u0000\u0000\u063b"+ + "\u063c\u0005a\u0000\u0000\u063c\u063d\u0005r\u0000\u0000\u063d\u063e\u0005"+ + "t\u0000\u0000\u063e\u00ee\u0001\u0000\u0000\u0000\u063f\u0640\u0005p\u0000"+ + "\u0000\u0640\u0641\u0005a\u0000\u0000\u0641\u0642\u0005r\u0000\u0000\u0642"+ + "\u0643\u0005a\u0000\u0000\u0643\u0644\u0005m\u0000\u0000\u0644\u00f0\u0001"+ + "\u0000\u0000\u0000\u0645\u0646\u0005r\u0000\u0000\u0646\u0647\u0005e\u0000"+ + "\u0000\u0647\u0648\u0005s\u0000\u0000\u0648\u0649\u0005u\u0000\u0000\u0649"+ + "\u064a\u0005l\u0000\u0000\u064a\u064b\u0005t\u0000\u0000\u064b\u00f2\u0001"+ + "\u0000\u0000\u0000\u064c\u064d\u0005l\u0000\u0000\u064d\u064e\u0005o\u0000"+ + "\u0000\u064e\u064f\u0005c\u0000\u0000\u064f\u0650\u0005a\u0000\u0000\u0650"+ + "\u0651\u0005l\u0000\u0000\u0651\u00f4\u0001\u0000\u0000\u0000\u0652\u0653"+ + "\u0005g\u0000\u0000\u0653\u0654\u0005l\u0000\u0000\u0654\u0655\u0005o"+ + "\u0000\u0000\u0655\u0656\u0005b\u0000\u0000\u0656\u0657\u0005a\u0000\u0000"+ + "\u0657\u0658\u0005l\u0000\u0000\u0658\u00f6\u0001\u0000\u0000\u0000\u0659"+ + "\u065a\u0005t\u0000\u0000\u065a\u065b\u0005a\u0000\u0000\u065b\u065c\u0005"+ + "b\u0000\u0000\u065c\u065d\u0005l\u0000\u0000\u065d\u065e\u0005e\u0000"+ + "\u0000\u065e\u00f8\u0001\u0000\u0000\u0000\u065f\u0660\u0005m\u0000\u0000"+ + "\u0660\u0661\u0005e\u0000\u0000\u0661\u0662\u0005m\u0000\u0000\u0662\u0663"+ + "\u0005o\u0000\u0000\u0663\u0664\u0005r\u0000\u0000\u0664\u0665\u0005y"+ + "\u0000\u0000\u0665\u00fa\u0001\u0000\u0000\u0000\u0666\u0667\u0005e\u0000"+ + "\u0000\u0667\u0668\u0005l\u0000\u0000\u0668\u0669\u0005e\u0000\u0000\u0669"+ + "\u066a\u0005m\u0000\u0000\u066a\u00fc\u0001\u0000\u0000\u0000\u066b\u066c"+ + "\u0005d\u0000\u0000\u066c\u066d\u0005a\u0000\u0000\u066d\u066e\u0005t"+ + "\u0000\u0000\u066e\u066f\u0005a\u0000\u0000\u066f\u00fe\u0001\u0000\u0000"+ + "\u0000\u0670\u0671\u0005o\u0000\u0000\u0671\u0672\u0005f\u0000\u0000\u0672"+ + "\u0673\u0005f\u0000\u0000\u0673\u0674\u0005s\u0000\u0000\u0674\u0675\u0005"+ + "e\u0000\u0000\u0675\u0676\u0005t\u0000\u0000\u0676\u0100\u0001\u0000\u0000"+ + "\u0000\u0677\u0678\u0005i\u0000\u0000\u0678\u0679\u0005m\u0000\u0000\u0679"+ + "\u067a\u0005p\u0000\u0000\u067a\u067b\u0005o\u0000\u0000\u067b\u067c\u0005"+ + "r\u0000\u0000\u067c\u067d\u0005t\u0000\u0000\u067d\u0102\u0001\u0000\u0000"+ + "\u0000\u067e\u067f\u0005e\u0000\u0000\u067f\u0680\u0005x\u0000\u0000\u0680"+ + "\u0681\u0005p\u0000\u0000\u0681\u0682\u0005o\u0000\u0000\u0682\u0683\u0005"+ + "r\u0000\u0000\u0683\u0684\u0005t\u0000\u0000\u0684\u0104\u0001\u0000\u0000"+ + "\u0000\u0685\u0686\u0005m\u0000\u0000\u0686\u0687\u0005o\u0000\u0000\u0687"+ + "\u0688\u0005d\u0000\u0000\u0688\u0689\u0005u\u0000\u0000\u0689\u068a\u0005"+ + "l\u0000\u0000\u068a\u068b\u0005e\u0000\u0000\u068b\u0106\u0001\u0000\u0000"+ + "\u0000\u068c\u068d\u0005b\u0000\u0000\u068d\u068e\u0005i\u0000\u0000\u068e"+ + "\u068f\u0005n\u0000\u0000\u068f\u0690\u0005a\u0000\u0000\u0690\u0691\u0005"+ + "r\u0000\u0000\u0691\u0692\u0005y\u0000\u0000\u0692\u0108\u0001\u0000\u0000"+ + "\u0000\u0693\u0694\u0005q\u0000\u0000\u0694\u0695\u0005u\u0000\u0000\u0695"+ + "\u0696\u0005o\u0000\u0000\u0696\u0697\u0005t\u0000\u0000\u0697\u0698\u0005"+ + "e\u0000\u0000\u0698\u010a\u0001\u0000\u0000\u0000\u0699\u069a\u0005s\u0000"+ + "\u0000\u069a\u069b\u0005c\u0000\u0000\u069b\u069c\u0005r\u0000\u0000\u069c"+ + "\u069d\u0005i\u0000\u0000\u069d\u069e\u0005p\u0000\u0000\u069e\u069f\u0005"+ + "t\u0000\u0000\u069f\u010c\u0001\u0000\u0000\u0000\u06a0\u06a1\u0005r\u0000"+ + "\u0000\u06a1\u06a2\u0005e\u0000\u0000\u06a2\u06a3\u0005g\u0000\u0000\u06a3"+ + "\u06a4\u0005i\u0000\u0000\u06a4\u06a5\u0005s\u0000\u0000\u06a5\u06a6\u0005"+ + "t\u0000\u0000\u06a6\u06a7\u0005e\u0000\u0000\u06a7\u06a8\u0005r\u0000"+ + "\u0000\u06a8\u010e\u0001\u0000\u0000\u0000\u06a9\u06aa\u0005i\u0000\u0000"+ + "\u06aa\u06ab\u0005n\u0000\u0000\u06ab\u06ac\u0005v\u0000\u0000\u06ac\u06ad"+ + "\u0005o\u0000\u0000\u06ad\u06ae\u0005k\u0000\u0000\u06ae\u06af\u0005e"+ + "\u0000\u0000\u06af\u0110\u0001\u0000\u0000\u0000\u06b0\u06b1\u0005g\u0000"+ + "\u0000\u06b1\u06b2\u0005e\u0000\u0000\u06b2\u06b3\u0005t\u0000\u0000\u06b3"+ + "\u0112\u0001\u0000\u0000\u0000\u06b4\u06b5\u0005a\u0000\u0000\u06b5\u06b6"+ + "\u0005s\u0000\u0000\u06b6\u06b7\u0005s\u0000\u0000\u06b7\u06b8\u0005e"+ + "\u0000\u0000\u06b8\u06b9\u0005r\u0000\u0000\u06b9\u06ba\u0005t\u0000\u0000"+ + "\u06ba\u06bb\u0005_\u0000\u0000\u06bb\u06bc\u0005m\u0000\u0000\u06bc\u06bd"+ + "\u0005a\u0000\u0000\u06bd\u06be\u0005l\u0000\u0000\u06be\u06bf\u0005f"+ + "\u0000\u0000\u06bf\u06c0\u0005o\u0000\u0000\u06c0\u06c1\u0005r\u0000\u0000"+ + "\u06c1\u06c2\u0005m\u0000\u0000\u06c2\u06c3\u0005e\u0000\u0000\u06c3\u06c4"+ + "\u0005d\u0000\u0000\u06c4\u0114\u0001\u0000\u0000\u0000\u06c5\u06c6\u0005"+ + "a\u0000\u0000\u06c6\u06c7\u0005s\u0000\u0000\u06c7\u06c8\u0005s\u0000"+ + "\u0000\u06c8\u06c9\u0005e\u0000\u0000\u06c9\u06ca\u0005r\u0000\u0000\u06ca"+ + "\u06cb\u0005t\u0000\u0000\u06cb\u06cc\u0005_\u0000\u0000\u06cc\u06cd\u0005"+ + "i\u0000\u0000\u06cd\u06ce\u0005n\u0000\u0000\u06ce\u06cf\u0005v\u0000"+ + "\u0000\u06cf\u06d0\u0005a\u0000\u0000\u06d0\u06d1\u0005l\u0000\u0000\u06d1"+ + "\u06d2\u0005i\u0000\u0000\u06d2\u06d3\u0005d\u0000\u0000\u06d3\u0116\u0001"+ + "\u0000\u0000\u0000\u06d4\u06d5\u0005a\u0000\u0000\u06d5\u06d6\u0005s\u0000"+ + "\u0000\u06d6\u06d7\u0005s\u0000\u0000\u06d7\u06d8\u0005e\u0000\u0000\u06d8"+ + "\u06d9\u0005r\u0000\u0000\u06d9\u06da\u0005t\u0000\u0000\u06da\u06db\u0005"+ + "_\u0000\u0000\u06db\u06dc\u0005u\u0000\u0000\u06dc\u06dd\u0005n\u0000"+ + "\u0000\u06dd\u06de\u0005l\u0000\u0000\u06de\u06df\u0005i\u0000\u0000\u06df"+ + "\u06e0\u0005n\u0000\u0000\u06e0\u06e1\u0005k\u0000\u0000\u06e1\u06e2\u0005"+ + "a\u0000\u0000\u06e2\u06e3\u0005b\u0000\u0000\u06e3\u06e4\u0005l\u0000"+ + "\u0000\u06e4\u06e5\u0005e\u0000\u0000\u06e5\u0118\u0001\u0000\u0000\u0000"+ + "\u06e6\u06e7\u0005a\u0000\u0000\u06e7\u06e8\u0005s\u0000\u0000\u06e8\u06e9"+ + "\u0005s\u0000\u0000\u06e9\u06ea\u0005e\u0000\u0000\u06ea\u06eb\u0005r"+ + "\u0000\u0000\u06eb\u06ec\u0005t\u0000\u0000\u06ec\u06ed\u0005_\u0000\u0000"+ + "\u06ed\u06ee\u0005r\u0000\u0000\u06ee\u06ef\u0005e\u0000\u0000\u06ef\u06f0"+ + "\u0005t\u0000\u0000\u06f0\u06f1\u0005u\u0000\u0000\u06f1\u06f2\u0005r"+ + "\u0000\u0000\u06f2\u06f3\u0005n\u0000\u0000\u06f3\u011a\u0001\u0000\u0000"+ + "\u0000\u06f4\u06f5\u0005a\u0000\u0000\u06f5\u06f6\u0005s\u0000\u0000\u06f6"+ + "\u06f7\u0005s\u0000\u0000\u06f7\u06f8\u0005e\u0000\u0000\u06f8\u06f9\u0005"+ + "r\u0000\u0000\u06f9\u06fa\u0005t\u0000\u0000\u06fa\u06fb\u0005_\u0000"+ + "\u0000\u06fb\u06fc\u0005r\u0000\u0000\u06fc\u06fd\u0005e\u0000\u0000\u06fd"+ + "\u06fe\u0005t\u0000\u0000\u06fe\u06ff\u0005u\u0000\u0000\u06ff\u0700\u0005"+ + "r\u0000\u0000\u0700\u0701\u0005n\u0000\u0000\u0701\u0702\u0005_\u0000"+ + "\u0000\u0702\u0703\u0005c\u0000\u0000\u0703\u0704\u0005a\u0000\u0000\u0704"+ + "\u0705\u0005n\u0000\u0000\u0705\u0706\u0005o\u0000\u0000\u0706\u0707\u0005"+ + "n\u0000\u0000\u0707\u0708\u0005i\u0000\u0000\u0708\u0709\u0005c\u0000"+ + "\u0000\u0709\u070a\u0005a\u0000\u0000\u070a\u070b\u0005l\u0000\u0000\u070b"+ + "\u070c\u0005_\u0000\u0000\u070c\u070d\u0005n\u0000\u0000\u070d\u070e\u0005"+ + "a\u0000\u0000\u070e\u070f\u0005n\u0000\u0000\u070f\u011c\u0001\u0000\u0000"+ + "\u0000\u0710\u0711\u0005a\u0000\u0000\u0711\u0712\u0005s\u0000\u0000\u0712"+ + "\u0713\u0005s\u0000\u0000\u0713\u0714\u0005e\u0000\u0000\u0714\u0715\u0005"+ + "r\u0000\u0000\u0715\u0716\u0005t\u0000\u0000\u0716\u0717\u0005_\u0000"+ + "\u0000\u0717\u0718\u0005r\u0000\u0000\u0718\u0719\u0005e\u0000\u0000\u0719"+ + "\u071a\u0005t\u0000\u0000\u071a\u071b\u0005u\u0000\u0000\u071b\u071c\u0005"+ + "r\u0000\u0000\u071c\u071d\u0005n\u0000\u0000\u071d\u071e\u0005_\u0000"+ + "\u0000\u071e\u071f\u0005a\u0000\u0000\u071f\u0720\u0005r\u0000\u0000\u0720"+ + "\u0721\u0005i\u0000\u0000\u0721\u0722\u0005t\u0000\u0000\u0722\u0723\u0005"+ + "h\u0000\u0000\u0723\u0724\u0005m\u0000\u0000\u0724\u0725\u0005e\u0000"+ + "\u0000\u0725\u0726\u0005t\u0000\u0000\u0726\u0727\u0005i\u0000\u0000\u0727"+ + "\u0728\u0005c\u0000\u0000\u0728\u0729\u0005_\u0000\u0000\u0729\u072a\u0005"+ + "n\u0000\u0000\u072a\u072b\u0005a\u0000\u0000\u072b\u072c\u0005n\u0000"+ + "\u0000\u072c\u011e\u0001\u0000\u0000\u0000\u072d\u072e\u0005a\u0000\u0000"+ + "\u072e\u072f\u0005s\u0000\u0000\u072f\u0730\u0005s\u0000\u0000\u0730\u0731"+ + "\u0005e\u0000\u0000\u0731\u0732\u0005r\u0000\u0000\u0732\u0733\u0005t"+ + "\u0000\u0000\u0733\u0734\u0005_\u0000\u0000\u0734\u0735\u0005t\u0000\u0000"+ + "\u0735\u0736\u0005r\u0000\u0000\u0736\u0737\u0005a\u0000\u0000\u0737\u0738"+ + "\u0005p\u0000\u0000\u0738\u0120\u0001\u0000\u0000\u0000\u0739\u073a\u0005"+ + "a\u0000\u0000\u073a\u073b\u0005s\u0000\u0000\u073b\u073c\u0005s\u0000"+ + "\u0000\u073c\u073d\u0005e\u0000\u0000\u073d\u073e\u0005r\u0000\u0000\u073e"+ + "\u073f\u0005t\u0000\u0000\u073f\u0740\u0005_\u0000\u0000\u0740\u0741\u0005"+ + "e\u0000\u0000\u0741\u0742\u0005x\u0000\u0000\u0742\u0743\u0005h\u0000"+ + "\u0000\u0743\u0744\u0005a\u0000\u0000\u0744\u0745\u0005u\u0000\u0000\u0745"+ + "\u0746\u0005s\u0000\u0000\u0746\u0747\u0005t\u0000\u0000\u0747\u0748\u0005"+ + "i\u0000\u0000\u0748\u0749\u0005o\u0000\u0000\u0749\u074a\u0005n\u0000"+ + "\u0000\u074a\u0122\u0001\u0000\u0000\u0000\u074b\u074c\u0005i\u0000\u0000"+ + "\u074c\u074d\u0005n\u0000\u0000\u074d\u074e\u0005p\u0000\u0000\u074e\u074f"+ + "\u0005u\u0000\u0000\u074f\u0750\u0005t\u0000\u0000\u0750\u0124\u0001\u0000"+ + "\u0000\u0000\u0751\u0752\u0005o\u0000\u0000\u0752\u0753\u0005u\u0000\u0000"+ + "\u0753\u0754\u0005t\u0000\u0000\u0754\u0755\u0005p\u0000\u0000\u0755\u0756"+ + "\u0005u\u0000\u0000\u0756\u0757\u0005t\u0000\u0000\u0757\u0126\u0001\u0000"+ + "\u0000\u0000\u0758\u0759\u0003\u0149\u00a4\u0000\u0759\u0128\u0001\u0000"+ + "\u0000\u0000\u075a\u075b\u0005v\u0000\u0000\u075b\u075c\u00051\u0000\u0000"+ + "\u075c\u075d\u00052\u0000\u0000\u075d\u075e\u00058\u0000\u0000\u075e\u012a"+ + "\u0001\u0000\u0000\u0000\u075f\u0761\u0007\u0001\u0000\u0000\u0760\u075f"+ + "\u0001\u0000\u0000\u0000\u0761\u0762\u0001\u0000\u0000\u0000\u0762\u0760"+ + "\u0001\u0000\u0000\u0000\u0762\u0763\u0001\u0000\u0000\u0000\u0763\u0764"+ + "\u0001\u0000\u0000\u0000\u0764\u0765\u0006\u0095\u0000\u0000\u0765\u012c"+ + "\u0001\u0000\u0000\u0000\u0766\u0767\u0005(\u0000\u0000\u0767\u0768\u0005"+ + ";\u0000\u0000\u0768\u076c\u0001\u0000\u0000\u0000\u0769\u076b\t\u0000"+ + "\u0000\u0000\u076a\u0769\u0001\u0000\u0000\u0000\u076b\u076e\u0001\u0000"+ + "\u0000\u0000\u076c\u076d\u0001\u0000\u0000\u0000\u076c\u076a\u0001\u0000"+ + "\u0000\u0000\u076d\u076f\u0001\u0000\u0000\u0000\u076e\u076c\u0001\u0000"+ + "\u0000\u0000\u076f\u0770\u0005;\u0000\u0000\u0770\u077c\u0005)\u0000\u0000"+ + "\u0771\u0772\u0005;\u0000\u0000\u0772\u0773\u0005;\u0000\u0000\u0773\u0777"+ + "\u0001\u0000\u0000\u0000\u0774\u0776\t\u0000\u0000\u0000\u0775\u0774\u0001"+ + "\u0000\u0000\u0000\u0776\u0779\u0001\u0000\u0000\u0000\u0777\u0778\u0001"+ + "\u0000\u0000\u0000\u0777\u0775\u0001\u0000\u0000\u0000\u0778\u077a\u0001"+ + "\u0000\u0000\u0000\u0779\u0777\u0001\u0000\u0000\u0000\u077a\u077c\u0005"+ + "\n\u0000\u0000\u077b\u0766\u0001\u0000\u0000\u0000\u077b\u0771\u0001\u0000"+ + "\u0000\u0000\u077c\u077d\u0001\u0000\u0000\u0000\u077d\u077e\u0006\u0096"+ + "\u0000\u0000\u077e\u012e\u0001\u0000\u0000\u0000\u077f\u0780\u0007\u0002"+ + "\u0000\u0000\u0780\u0130\u0001\u0000\u0000\u0000\u0781\u0788\u0003\u0137"+ + "\u009b\u0000\u0782\u0784\u0005_\u0000\u0000\u0783\u0782\u0001\u0000\u0000"+ + "\u0000\u0783\u0784\u0001\u0000\u0000\u0000\u0784\u0785\u0001\u0000\u0000"+ + "\u0000\u0785\u0787\u0003\u0137\u009b\u0000\u0786\u0783\u0001\u0000\u0000"+ + "\u0000\u0787\u078a\u0001\u0000\u0000\u0000\u0788\u0786\u0001\u0000\u0000"+ + "\u0000\u0788\u0789\u0001\u0000\u0000\u0000\u0789\u0132\u0001\u0000\u0000"+ + "\u0000\u078a\u0788\u0001\u0000\u0000\u0000\u078b\u0792\u0003\u0139\u009c"+ + "\u0000\u078c\u078e\u0005_\u0000\u0000\u078d\u078c\u0001\u0000\u0000\u0000"+ + "\u078d\u078e\u0001\u0000\u0000\u0000\u078e\u078f\u0001\u0000\u0000\u0000"+ + "\u078f\u0791\u0003\u0139\u009c\u0000\u0790\u078d\u0001\u0000\u0000\u0000"+ + "\u0791\u0794\u0001\u0000\u0000\u0000\u0792\u0790\u0001\u0000\u0000\u0000"+ + "\u0792\u0793\u0001\u0000\u0000\u0000\u0793\u0134\u0001\u0000\u0000\u0000"+ + "\u0794\u0792\u0001\u0000\u0000\u0000\u0795\u0796\u0007\u0003\u0000\u0000"+ + "\u0796\u0136\u0001\u0000\u0000\u0000\u0797\u0798\u0007\u0004\u0000\u0000"+ + "\u0798\u0138\u0001\u0000\u0000\u0000\u0799\u079a\u0007\u0005\u0000\u0000"+ + "\u079a\u013a\u0001\u0000\u0000\u0000\u079b\u079c\u0007\u0006\u0000\u0000"+ + "\u079c\u013c\u0001\u0000\u0000\u0000\u079d\u07a3\u0003\u0131\u0098\u0000"+ + "\u079e\u079f\u00050\u0000\u0000\u079f\u07a0\u0005x\u0000\u0000\u07a0\u07a1"+ + "\u0001\u0000\u0000\u0000\u07a1\u07a3\u0003\u0133\u0099\u0000\u07a2\u079d"+ + "\u0001\u0000\u0000\u0000\u07a2\u079e\u0001\u0000\u0000\u0000\u07a3\u013e"+ + "\u0001\u0000\u0000\u0000\u07a4\u07a5\u0003\u0135\u009a\u0000\u07a5\u07a6"+ + "\u0003\u013d\u009e\u0000\u07a6\u0140\u0001\u0000\u0000\u0000\u07a7\u07a8"+ + "\u0003\u0131\u0098\u0000\u07a8\u0142\u0001\u0000\u0000\u0000\u07a9\u07aa"+ + "\u0003\u0133\u0099\u0000\u07aa\u0144\u0001\u0000\u0000\u0000\u07ab\u07ad"+ + "\u0003\u0135\u009a\u0000\u07ac\u07ab\u0001\u0000\u0000\u0000\u07ac\u07ad"+ + "\u0001\u0000\u0000\u0000\u07ad\u07ae\u0001\u0000\u0000\u0000\u07ae\u07af"+ + "\u0003\u0131\u0098\u0000\u07af\u07b1\u0005.\u0000\u0000\u07b0\u07b2\u0003"+ + "\u0141\u00a0\u0000\u07b1\u07b0\u0001\u0000\u0000\u0000\u07b1\u07b2\u0001"+ + "\u0000\u0000\u0000\u07b2\u07fa\u0001\u0000\u0000\u0000\u07b3\u07b5\u0003"+ + "\u0135\u009a\u0000\u07b4\u07b3\u0001\u0000\u0000\u0000\u07b4\u07b5\u0001"+ + "\u0000\u0000\u0000\u07b5\u07b6\u0001\u0000\u0000\u0000\u07b6\u07bb\u0003"+ + "\u0131\u0098\u0000\u07b7\u07b9\u0005.\u0000\u0000\u07b8\u07ba\u0003\u0141"+ + "\u00a0\u0000\u07b9\u07b8\u0001\u0000\u0000\u0000\u07b9\u07ba\u0001\u0000"+ + "\u0000\u0000\u07ba\u07bc\u0001\u0000\u0000\u0000\u07bb\u07b7\u0001\u0000"+ + "\u0000\u0000\u07bb\u07bc\u0001\u0000\u0000\u0000\u07bc\u07bd\u0001\u0000"+ + "\u0000\u0000\u07bd\u07bf\u0007\u0007\u0000\u0000\u07be\u07c0\u0003\u0135"+ + "\u009a\u0000\u07bf\u07be\u0001\u0000\u0000\u0000\u07bf\u07c0\u0001\u0000"+ + "\u0000\u0000\u07c0\u07c1\u0001\u0000\u0000\u0000\u07c1\u07c2\u0003\u0131"+ + "\u0098\u0000\u07c2\u07fa\u0001\u0000\u0000\u0000\u07c3\u07c5\u0003\u0135"+ + "\u009a\u0000\u07c4\u07c3\u0001\u0000\u0000\u0000\u07c4\u07c5\u0001\u0000"+ + "\u0000\u0000\u07c5\u07c6\u0001\u0000\u0000\u0000\u07c6\u07c7\u00050\u0000"+ + "\u0000\u07c7\u07c8\u0005x\u0000\u0000\u07c8\u07c9\u0001\u0000\u0000\u0000"+ + "\u07c9\u07ca\u0003\u0133\u0099\u0000\u07ca\u07cc\u0005.\u0000\u0000\u07cb"+ + "\u07cd\u0003\u0143\u00a1\u0000\u07cc\u07cb\u0001\u0000\u0000\u0000\u07cc"+ + "\u07cd\u0001\u0000\u0000\u0000\u07cd\u07fa\u0001\u0000\u0000\u0000\u07ce"+ + "\u07d0\u0003\u0135\u009a\u0000\u07cf\u07ce\u0001\u0000\u0000\u0000\u07cf"+ + "\u07d0\u0001\u0000\u0000\u0000\u07d0\u07d1\u0001\u0000\u0000\u0000\u07d1"+ + "\u07d2\u00050\u0000\u0000\u07d2\u07d3\u0005x\u0000\u0000\u07d3\u07d4\u0001"+ + "\u0000\u0000\u0000\u07d4\u07d9\u0003\u0133\u0099\u0000\u07d5\u07d7\u0005"+ + ".\u0000\u0000\u07d6\u07d8\u0003\u0143\u00a1\u0000\u07d7\u07d6\u0001\u0000"+ + "\u0000\u0000\u07d7\u07d8\u0001\u0000\u0000\u0000\u07d8\u07da\u0001\u0000"+ + "\u0000\u0000\u07d9\u07d5\u0001\u0000\u0000\u0000\u07d9\u07da\u0001\u0000"+ + "\u0000\u0000\u07da\u07db\u0001\u0000\u0000\u0000\u07db\u07dd\u0007\b\u0000"+ + "\u0000\u07dc\u07de\u0003\u0135\u009a\u0000\u07dd\u07dc\u0001\u0000\u0000"+ + "\u0000\u07dd\u07de\u0001\u0000\u0000\u0000\u07de\u07df\u0001\u0000\u0000"+ + "\u0000\u07df\u07e0\u0003\u0131\u0098\u0000\u07e0\u07fa\u0001\u0000\u0000"+ + "\u0000\u07e1\u07e3\u0003\u0135\u009a\u0000\u07e2\u07e1\u0001\u0000\u0000"+ + "\u0000\u07e2\u07e3\u0001\u0000\u0000\u0000\u07e3\u07e4\u0001\u0000\u0000"+ + "\u0000\u07e4\u07e5\u0005i\u0000\u0000\u07e5\u07e6\u0005n\u0000\u0000\u07e6"+ + "\u07fa\u0005f\u0000\u0000\u07e7\u07e9\u0003\u0135\u009a\u0000\u07e8\u07e7"+ + "\u0001\u0000\u0000\u0000\u07e8\u07e9\u0001\u0000\u0000\u0000\u07e9\u07ea"+ + "\u0001\u0000\u0000\u0000\u07ea\u07eb\u0005n\u0000\u0000\u07eb\u07ec\u0005"+ + "a\u0000\u0000\u07ec\u07fa\u0005n\u0000\u0000\u07ed\u07ef\u0003\u0135\u009a"+ + "\u0000\u07ee\u07ed\u0001\u0000\u0000\u0000\u07ee\u07ef\u0001\u0000\u0000"+ + "\u0000\u07ef\u07f0\u0001\u0000\u0000\u0000\u07f0\u07f1\u0005n\u0000\u0000"+ + "\u07f1\u07f2\u0005a\u0000\u0000\u07f2\u07f3\u0005n\u0000\u0000\u07f3\u07f4"+ + "\u0005:\u0000\u0000\u07f4\u07f5\u0001\u0000\u0000\u0000\u07f5\u07f6\u0005"+ + "0\u0000\u0000\u07f6\u07f7\u0005x\u0000\u0000\u07f7\u07f8\u0001\u0000\u0000"+ + "\u0000\u07f8\u07fa\u0003\u0133\u0099\u0000\u07f9\u07ac\u0001\u0000\u0000"+ + "\u0000\u07f9\u07b4\u0001\u0000\u0000\u0000\u07f9\u07c4\u0001\u0000\u0000"+ + "\u0000\u07f9\u07cf\u0001\u0000\u0000\u0000\u07f9\u07e2\u0001\u0000\u0000"+ + "\u0000\u07f9\u07e8\u0001\u0000\u0000\u0000\u07f9\u07ee\u0001\u0000\u0000"+ + "\u0000\u07fa\u0146\u0001\u0000\u0000\u0000\u07fb\u080f\u0005\"\u0000\u0000"+ + "\u07fc\u080e\u0003\u014f\u00a7\u0000\u07fd\u080e\u0007\t\u0000\u0000\u07fe"+ + "\u07ff\u0005\\\u0000\u0000\u07ff\u0800\u0003\u0139\u009c\u0000\u0800\u0801"+ + "\u0003\u0139\u009c\u0000\u0801\u080e\u0001\u0000\u0000\u0000\u0802\u0803"+ + "\u0005\\\u0000\u0000\u0803\u0804\u0005u\u0000\u0000\u0804\u0805\u0005"+ + "{\u0000\u0000\u0805\u0807\u0001\u0000\u0000\u0000\u0806\u0808\u0003\u0139"+ + "\u009c\u0000\u0807\u0806\u0001\u0000\u0000\u0000\u0808\u0809\u0001\u0000"+ + "\u0000\u0000\u0809\u0807\u0001\u0000\u0000\u0000\u0809\u080a\u0001\u0000"+ + "\u0000\u0000\u080a\u080b\u0001\u0000\u0000\u0000\u080b\u080c\u0005}\u0000"+ + "\u0000\u080c\u080e\u0001\u0000\u0000\u0000\u080d\u07fc\u0001\u0000\u0000"+ + "\u0000\u080d\u07fd\u0001\u0000\u0000\u0000\u080d\u07fe\u0001\u0000\u0000"+ + "\u0000\u080d\u0802\u0001\u0000\u0000\u0000\u080e\u0811\u0001\u0000\u0000"+ + "\u0000\u080f\u080d\u0001\u0000\u0000\u0000\u080f\u0810\u0001\u0000\u0000"+ + "\u0000\u0810\u0812\u0001\u0000\u0000\u0000\u0811\u080f\u0001\u0000\u0000"+ + "\u0000\u0812\u0813\u0005\"\u0000\u0000\u0813\u0148\u0001\u0000\u0000\u0000"+ + "\u0814\u0819\u0005$\u0000\u0000\u0815\u081a\u0003\u013b\u009d\u0000\u0816"+ + "\u081a\u0003\u0137\u009b\u0000\u0817\u081a\u0005_\u0000\u0000\u0818\u081a"+ + "\u0003\u012f\u0097\u0000\u0819\u0815\u0001\u0000\u0000\u0000\u0819\u0816"+ + "\u0001\u0000\u0000\u0000\u0819\u0817\u0001\u0000\u0000\u0000\u0819\u0818"+ + "\u0001\u0000\u0000\u0000\u081a\u081b\u0001\u0000\u0000\u0000\u081b\u0819"+ + "\u0001\u0000\u0000\u0000\u081b\u081c\u0001\u0000\u0000\u0000\u081c\u014a"+ + "\u0001\u0000\u0000\u0000\u081d\u081e\u0007\n\u0000\u0000\u081e\u014c\u0001"+ + "\u0000\u0000\u0000\u081f\u0822\u0003g3\u0000\u0820\u0822\u0003i4\u0000"+ + "\u0821\u081f\u0001\u0000\u0000\u0000\u0821\u0820\u0001\u0000\u0000\u0000"+ + "\u0822\u014e\u0001\u0000\u0000\u0000\u0823\u0824\b\u000b\u0000\u0000\u0824"+ + "\u0150\u0001\u0000\u0000\u0000\u0825\u0826\u0007\f\u0000\u0000\u0826\u0152"+ + "\u0001\u0000\u0000\u0000\u0827\u0828\u0007\r\u0000\u0000\u0828\u0154\u0001"+ + "\u0000\u0000\u0000\u0829\u082a\u0007\u000e\u0000\u0000\u082a\u0156\u0001"+ + "\u0000\u0000\u0000\u082b\u082e\u0003\u0151\u00a8\u0000\u082c\u082e\u0003"+ + "\u015b\u00ad\u0000\u082d\u082b\u0001\u0000\u0000\u0000\u082d\u082c\u0001"+ + "\u0000\u0000\u0000\u082e\u0158\u0001\u0000\u0000\u0000\u082f\u0832\u0003"+ + "\u0153\u00a9\u0000\u0830\u0832\u0003\u015b\u00ad\u0000\u0831\u082f\u0001"+ + "\u0000\u0000\u0000\u0831\u0830\u0001\u0000\u0000\u0000\u0832\u015a\u0001"+ + "\u0000\u0000\u0000\u0833\u0834\u0007\u000f\u0000\u0000\u0834\u084f\u0003"+ + "\u0155\u00aa\u0000\u0835\u0836\u0007\u0010\u0000\u0000\u0836\u0837\u0007"+ + "\u0011\u0000\u0000\u0837\u084f\u0003\u0155\u00aa\u0000\u0838\u0839\u0007"+ + "\u0012\u0000\u0000\u0839\u083a\u0007\u0013\u0000\u0000\u083a\u084f\u0003"+ + "\u0155\u00aa\u0000\u083b\u083c\u0007\u0014\u0000\u0000\u083c\u083d\u0003"+ + "\u0155\u00aa\u0000\u083d\u083e\u0003\u0155\u00aa\u0000\u083e\u084f\u0001"+ + "\u0000\u0000\u0000\u083f\u0840\u0007\u0015\u0000\u0000\u0840\u0841\u0007"+ + "\u0016\u0000\u0000\u0841\u0842\u0003\u0155\u00aa\u0000\u0842\u0843\u0003"+ + "\u0155\u00aa\u0000\u0843\u084f\u0001\u0000\u0000\u0000\u0844\u0845\u0007"+ + "\u0017\u0000\u0000\u0845\u0846\u0007\u0018\u0000\u0000\u0846\u0847\u0003"+ + "\u0155\u00aa\u0000\u0847\u0848\u0003\u0155\u00aa\u0000\u0848\u084f\u0001"+ + "\u0000\u0000\u0000\u0849\u084a\u0007\u0019\u0000\u0000\u084a\u084b\u0003"+ + "\u0155\u00aa\u0000\u084b\u084c\u0003\u0155\u00aa\u0000\u084c\u084d\u0003"+ + "\u0155\u00aa\u0000\u084d\u084f\u0001\u0000\u0000\u0000\u084e\u0833\u0001"+ + "\u0000\u0000\u0000\u084e\u0835\u0001\u0000\u0000\u0000\u084e\u0838\u0001"+ + "\u0000\u0000\u0000\u084e\u083b\u0001\u0000\u0000\u0000\u084e\u083f\u0001"+ + "\u0000\u0000\u0000\u084e\u0844\u0001\u0000\u0000\u0000\u084e\u0849\u0001"+ + "\u0000\u0000\u0000\u084f\u015c\u0001\u0000\u0000\u0000,\u0000\u0274\u027e"+ + "\u029a\u02ae\u02b2\u049f\u04ea\u0582\u0626\u0762\u076c\u0777\u077b\u0783"+ + "\u0788\u078d\u0792\u07a2\u07ac\u07b1\u07b4\u07b9\u07bb\u07bf\u07c4\u07cc"+ + "\u07cf\u07d7\u07d9\u07dd\u07e2\u07e8\u07ee\u07f9\u0809\u080d\u080f\u0819"+ + "\u081b\u0821\u082d\u0831\u084e\u0001\u0006\u0000\u0000"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/wasm/WatParser.java b/src/main/java/wasm/WatParser.java index 5f1e2bc1e..c017b7578 100644 --- a/src/main/java/wasm/WatParser.java +++ b/src/main/java/wasm/WatParser.java @@ -1,5 +1,5 @@ package gensym.wasm; -// Generated from WatParser.g4 by ANTLR 4.13.0 +// Generated from WatParser.g4 by ANTLR 4.13.2 import org.antlr.v4.runtime.atn.*; import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.*; @@ -9,9 +9,9 @@ import java.util.Iterator; import java.util.ArrayList; -@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) public class WatParser extends Parser { - static { RuntimeMetaData.checkVersion("4.13.0", RuntimeMetaData.VERSION); } + static { RuntimeMetaData.checkVersion("4.13.2", RuntimeMetaData.VERSION); } protected static final DFA[] _decisionToDFA; protected static final PredictionContextCache _sharedContextCache = @@ -19,54 +19,55 @@ public class WatParser extends Parser { public static final int LPAR=1, RPAR=2, NAT=3, INT=4, FLOAT=5, STRING_=6, VALUE_TYPE=7, CONST=8, SYMBOLIC=9, FUNCREF=10, EXTERNREF=11, MUT=12, NOP=13, SYM_ASSERT=14, ALLOC=15, - FREE=16, UNREACHABLE=17, DROP=18, BLOCK=19, LOOP=20, END=21, BR=22, BR_IF=23, - BR_TABLE=24, RETURN=25, IF=26, THEN=27, ELSE=28, SELECT=29, CALL=30, CALL_INDIRECT=31, - RETURN_CALL=32, RETURN_CALL_INDIRECT=33, LOCAL_GET=34, LOCAL_SET=35, LOCAL_TEE=36, - GLOBAL_GET=37, GLOBAL_SET=38, LOAD=39, STORE=40, UNDERSCORE=41, OFFSET_EQ=42, - ALIGN_EQ=43, SIGN_POSTFIX=44, MEM_SIZE=45, I32=46, I64=47, F32=48, F64=49, - IXX=50, FXX=51, OP_EQZ=52, OP_EQ=53, OP_NE=54, OP_LT=55, OP_LTS=56, OP_LTU=57, - OP_LE=58, OP_LES=59, OP_LEU=60, OP_GT=61, OP_GTS=62, OP_GTU=63, OP_GE=64, - OP_GES=65, OP_GEU=66, OP_CLZ=67, OP_CTZ=68, OP_POPCNT=69, OP_NEG=70, OP_ABS=71, - OP_SQRT=72, OP_CEIL=73, OP_FLOOR=74, OP_TRUNC=75, OP_NEAREST=76, OP_ADD=77, - OP_SUB=78, OP_MUL=79, OP_DIV=80, OP_DIV_S=81, OP_DIV_U=82, OP_REM_S=83, - OP_REM_U=84, OP_AND=85, OP_OR=86, OP_XOR=87, OP_SHL=88, OP_SHR_S=89, OP_SHR_U=90, - OP_ROTL=91, OP_ROTR=92, OP_MIN=93, OP_MAX=94, OP_COPYSIGN=95, OP_WRAP=96, - OP_TRUNC_=97, OP_TRUNC_SAT=98, OP_CONVERT=99, OP_EXTEND=100, OP_DEMOTE=101, - OP_PROMOTE=102, OP_REINTER=103, MEMORY_SIZE=104, MEMORY_GROW=105, MEMORY_FILL=106, - MEMORY_COPY=107, MEMORY_INIT=108, TEST=109, COMPARE=110, UNARY=111, BINARY=112, - CONVERT=113, TYPE=114, FUNC=115, EXTERN=116, START_=117, PARAM=118, RESULT=119, - LOCAL=120, GLOBAL=121, TABLE=122, MEMORY=123, ELEM=124, DATA=125, OFFSET=126, - IMPORT=127, EXPORT=128, MODULE=129, BIN=130, QUOTE=131, SCRIPT=132, REGISTER=133, - INVOKE=134, GET=135, ASSERT_MALFORMED=136, ASSERT_INVALID=137, ASSERT_UNLINKABLE=138, - ASSERT_RETURN=139, ASSERT_RETURN_CANONICAL_NAN=140, ASSERT_RETURN_ARITHMETIC_NAN=141, - ASSERT_TRAP=142, ASSERT_EXHAUSTION=143, INPUT=144, OUTPUT=145, VAR=146, - V128=147, SPACE=148, COMMENT=149; + FREE=16, UNREACHABLE=17, DROP=18, BLOCK=19, LOOP=20, FOR=21, VBAR=22, + END=23, BR=24, BR_IF=25, BR_TABLE=26, RETURN=27, IF=28, THEN=29, ELSE=30, + SELECT=31, CALL=32, CALL_INDIRECT=33, RETURN_CALL=34, RETURN_CALL_INDIRECT=35, + LOCAL_GET=36, LOCAL_SET=37, LOCAL_TEE=38, GLOBAL_GET=39, GLOBAL_SET=40, + LOAD=41, STORE=42, UNDERSCORE=43, OFFSET_EQ=44, ALIGN_EQ=45, SIGN_POSTFIX=46, + MEM_SIZE=47, I32=48, I64=49, F32=50, F64=51, IXX=52, FXX=53, OP_EQZ=54, + OP_EQ=55, OP_NE=56, OP_LT=57, OP_LTS=58, OP_LTU=59, OP_LE=60, OP_LES=61, + OP_LEU=62, OP_GT=63, OP_GTS=64, OP_GTU=65, OP_GE=66, OP_GES=67, OP_GEU=68, + OP_CLZ=69, OP_CTZ=70, OP_POPCNT=71, OP_NEG=72, OP_ABS=73, OP_SQRT=74, + OP_CEIL=75, OP_FLOOR=76, OP_TRUNC=77, OP_NEAREST=78, OP_ADD=79, OP_SUB=80, + OP_MUL=81, OP_DIV=82, OP_DIV_S=83, OP_DIV_U=84, OP_REM_S=85, OP_REM_U=86, + OP_AND=87, OP_OR=88, OP_XOR=89, OP_SHL=90, OP_SHR_S=91, OP_SHR_U=92, OP_ROTL=93, + OP_ROTR=94, OP_MIN=95, OP_MAX=96, OP_COPYSIGN=97, OP_WRAP=98, OP_TRUNC_=99, + OP_TRUNC_SAT=100, OP_CONVERT=101, OP_EXTEND=102, OP_DEMOTE=103, OP_PROMOTE=104, + OP_REINTER=105, MEMORY_SIZE=106, MEMORY_GROW=107, MEMORY_FILL=108, MEMORY_COPY=109, + MEMORY_INIT=110, TEST=111, COMPARE=112, UNARY=113, BINARY=114, CONVERT=115, + TYPE=116, FUNC=117, EXTERN=118, START_=119, PARAM=120, RESULT=121, LOCAL=122, + GLOBAL=123, TABLE=124, MEMORY=125, ELEM=126, DATA=127, OFFSET=128, IMPORT=129, + EXPORT=130, MODULE=131, BIN=132, QUOTE=133, SCRIPT=134, REGISTER=135, + INVOKE=136, GET=137, ASSERT_MALFORMED=138, ASSERT_INVALID=139, ASSERT_UNLINKABLE=140, + ASSERT_RETURN=141, ASSERT_RETURN_CANONICAL_NAN=142, ASSERT_RETURN_ARITHMETIC_NAN=143, + ASSERT_TRAP=144, ASSERT_EXHAUSTION=145, INPUT=146, OUTPUT=147, VAR=148, + V128=149, SPACE=150, COMMENT=151; public static final int RULE_value = 0, RULE_name = 1, RULE_numType = 2, RULE_refType = 3, RULE_vecType = 4, RULE_valType = 5, RULE_heapType = 6, RULE_globalType = 7, RULE_defType = 8, RULE_funcParamType = 9, RULE_funcResType = 10, RULE_funcType = 11, RULE_tableType = 12, RULE_memoryType = 13, RULE_typeUse = 14, RULE_literal = 15, RULE_idx = 16, - RULE_bindVar = 17, RULE_instr = 18, RULE_plainInstr = 19, RULE_offsetEq = 20, - RULE_alignEq = 21, RULE_load = 22, RULE_store = 23, RULE_selectInstr = 24, - RULE_callIndirectInstr = 25, RULE_callInstrParams = 26, RULE_callInstrParamsInstr = 27, - RULE_callInstrResultsInstr = 28, RULE_blockInstr = 29, RULE_blockType = 30, - RULE_block = 31, RULE_foldedInstr = 32, RULE_expr = 33, RULE_callExprType = 34, - RULE_callExprParams = 35, RULE_callExprResults = 36, RULE_instrList = 37, - RULE_constExpr = 38, RULE_function = 39, RULE_funcFields = 40, RULE_funcFieldsBody = 41, - RULE_funcBody = 42, RULE_offset = 43, RULE_elem = 44, RULE_table = 45, - RULE_tableField = 46, RULE_data = 47, RULE_memory = 48, RULE_memoryField = 49, - RULE_global = 50, RULE_globalField = 51, RULE_importDesc = 52, RULE_simport = 53, - RULE_inlineImport = 54, RULE_exportDesc = 55, RULE_export_ = 56, RULE_inlineExport = 57, - RULE_typeDef = 58, RULE_start_ = 59, RULE_moduleField = 60, RULE_module_ = 61, - RULE_scriptModule = 62, RULE_action_ = 63, RULE_assertion = 64, RULE_cmd = 65, - RULE_meta = 66, RULE_wconst = 67, RULE_constList = 68, RULE_script = 69, - RULE_module = 70; + RULE_bindVar = 17, RULE_instr = 18, RULE_forLoop = 19, RULE_plainInstr = 20, + RULE_offsetEq = 21, RULE_alignEq = 22, RULE_load = 23, RULE_store = 24, + RULE_selectInstr = 25, RULE_callIndirectInstr = 26, RULE_callInstrParams = 27, + RULE_callInstrParamsInstr = 28, RULE_callInstrResultsInstr = 29, RULE_blockInstr = 30, + RULE_blockType = 31, RULE_block = 32, RULE_foldedInstr = 33, RULE_expr = 34, + RULE_callExprType = 35, RULE_callExprParams = 36, RULE_callExprResults = 37, + RULE_instrList = 38, RULE_constExpr = 39, RULE_function = 40, RULE_funcFields = 41, + RULE_funcFieldsBody = 42, RULE_funcBody = 43, RULE_offset = 44, RULE_elem = 45, + RULE_table = 46, RULE_tableField = 47, RULE_data = 48, RULE_memory = 49, + RULE_memoryField = 50, RULE_global = 51, RULE_globalField = 52, RULE_importDesc = 53, + RULE_simport = 54, RULE_inlineImport = 55, RULE_exportDesc = 56, RULE_export_ = 57, + RULE_inlineExport = 58, RULE_typeDef = 59, RULE_start_ = 60, RULE_moduleField = 61, + RULE_module_ = 62, RULE_scriptModule = 63, RULE_action_ = 64, RULE_assertion = 65, + RULE_cmd = 66, RULE_meta = 67, RULE_wconst = 68, RULE_constList = 69, + RULE_script = 70, RULE_module = 71; private static String[] makeRuleNames() { return new String[] { "value", "name", "numType", "refType", "vecType", "valType", "heapType", "globalType", "defType", "funcParamType", "funcResType", "funcType", "tableType", "memoryType", "typeUse", "literal", "idx", "bindVar", "instr", - "plainInstr", "offsetEq", "alignEq", "load", "store", "selectInstr", + "forLoop", "plainInstr", "offsetEq", "alignEq", "load", "store", "selectInstr", "callIndirectInstr", "callInstrParams", "callInstrParamsInstr", "callInstrResultsInstr", "blockInstr", "blockType", "block", "foldedInstr", "expr", "callExprType", "callExprParams", "callExprResults", "instrList", "constExpr", "function", @@ -83,12 +84,12 @@ private static String[] makeLiteralNames() { return new String[] { null, "'('", "')'", null, null, null, null, null, null, null, "'funcref'", "'externref'", "'mut'", "'nop'", "'sym_assert'", "'alloc'", "'free'", - "'unreachable'", "'drop'", "'block'", "'loop'", "'end'", "'br'", "'br_if'", - "'br_table'", "'return'", "'if'", "'then'", "'else'", "'.select'", "'call'", - "'call_indirect'", "'return_call'", "'return_call_indirect'", "'local.get'", - "'local.set'", "'local.tee'", "'global.get'", "'global.set'", null, null, - "'_'", "'offset='", "'align='", null, null, "'i32'", "'i64'", "'f32'", - "'f64'", null, null, "'.eqz'", "'.eq'", "'.ne'", "'.lt'", "'.lt_s'", + "'unreachable'", "'drop'", "'block'", "'loop'", "'for'", "'|'", "'end'", + "'br'", "'br_if'", "'br_table'", "'return'", "'if'", "'then'", "'else'", + "'.select'", "'call'", "'call_indirect'", "'return_call'", "'return_call_indirect'", + "'local.get'", "'local.set'", "'local.tee'", "'global.get'", "'global.set'", + null, null, "'_'", "'offset='", "'align='", null, null, "'i32'", "'i64'", + "'f32'", "'f64'", null, null, "'.eqz'", "'.eq'", "'.ne'", "'.lt'", "'.lt_s'", "'.lt_u'", "'.le'", "'.le_s'", "'.le_u'", "'.gt'", "'.gt_s'", "'.gt_u'", "'.ge'", "'.ge_s'", "'.ge_u'", "'.clz'", "'.ctz'", "'.popcnt'", "'.neg'", "'.abs'", "'.sqrt'", "'.ceil'", "'.floor'", "'.trunc'", "'.nearest'", @@ -112,9 +113,9 @@ private static String[] makeSymbolicNames() { return new String[] { null, "LPAR", "RPAR", "NAT", "INT", "FLOAT", "STRING_", "VALUE_TYPE", "CONST", "SYMBOLIC", "FUNCREF", "EXTERNREF", "MUT", "NOP", "SYM_ASSERT", - "ALLOC", "FREE", "UNREACHABLE", "DROP", "BLOCK", "LOOP", "END", "BR", - "BR_IF", "BR_TABLE", "RETURN", "IF", "THEN", "ELSE", "SELECT", "CALL", - "CALL_INDIRECT", "RETURN_CALL", "RETURN_CALL_INDIRECT", "LOCAL_GET", + "ALLOC", "FREE", "UNREACHABLE", "DROP", "BLOCK", "LOOP", "FOR", "VBAR", + "END", "BR", "BR_IF", "BR_TABLE", "RETURN", "IF", "THEN", "ELSE", "SELECT", + "CALL", "CALL_INDIRECT", "RETURN_CALL", "RETURN_CALL_INDIRECT", "LOCAL_GET", "LOCAL_SET", "LOCAL_TEE", "GLOBAL_GET", "GLOBAL_SET", "LOAD", "STORE", "UNDERSCORE", "OFFSET_EQ", "ALIGN_EQ", "SIGN_POSTFIX", "MEM_SIZE", "I32", "I64", "F32", "F64", "IXX", "FXX", "OP_EQZ", "OP_EQ", "OP_NE", "OP_LT", @@ -202,11 +203,6 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitValue(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitValue(this); - else return visitor.visitChildren(this); - } } public final ValueContext value() throws RecognitionException { @@ -216,7 +212,7 @@ public final ValueContext value() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(142); + setState(144); _la = _input.LA(1); if ( !(_la==INT || _la==FLOAT) ) { _errHandler.recoverInline(this); @@ -254,11 +250,6 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitName(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitName(this); - else return visitor.visitChildren(this); - } } public final NameContext name() throws RecognitionException { @@ -267,7 +258,7 @@ public final NameContext name() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(144); + setState(146); match(STRING_); } } @@ -297,11 +288,6 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitNumType(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitNumType(this); - else return visitor.visitChildren(this); - } } public final NumTypeContext numType() throws RecognitionException { @@ -310,7 +296,7 @@ public final NumTypeContext numType() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(146); + setState(148); match(VALUE_TYPE); } } @@ -341,11 +327,6 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitRefType(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitRefType(this); - else return visitor.visitChildren(this); - } } public final RefTypeContext refType() throws RecognitionException { @@ -355,7 +336,7 @@ public final RefTypeContext refType() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(148); + setState(150); _la = _input.LA(1); if ( !(_la==FUNCREF || _la==EXTERNREF) ) { _errHandler.recoverInline(this); @@ -393,11 +374,6 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitVecType(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitVecType(this); - else return visitor.visitChildren(this); - } } public final VecTypeContext vecType() throws RecognitionException { @@ -406,7 +382,7 @@ public final VecTypeContext vecType() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(150); + setState(152); match(V128); } } @@ -444,31 +420,26 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitValType(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitValType(this); - else return visitor.visitChildren(this); - } } public final ValTypeContext valType() throws RecognitionException { ValTypeContext _localctx = new ValTypeContext(_ctx, getState()); enterRule(_localctx, 10, RULE_valType); try { - setState(155); + setState(157); _errHandler.sync(this); switch (_input.LA(1)) { case VALUE_TYPE: enterOuterAlt(_localctx, 1); { - setState(152); + setState(154); numType(); } break; case V128: enterOuterAlt(_localctx, 2); { - setState(153); + setState(155); vecType(); } break; @@ -476,7 +447,7 @@ public final ValTypeContext valType() throws RecognitionException { case EXTERNREF: enterOuterAlt(_localctx, 3); { - setState(154); + setState(156); refType(); } break; @@ -511,11 +482,6 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitHeapType(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitHeapType(this); - else return visitor.visitChildren(this); - } } public final HeapTypeContext heapType() throws RecognitionException { @@ -525,7 +491,7 @@ public final HeapTypeContext heapType() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(157); + setState(159); _la = _input.LA(1); if ( !(_la==FUNC || _la==EXTERN) ) { _errHandler.recoverInline(this); @@ -568,18 +534,13 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitGlobalType(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitGlobalType(this); - else return visitor.visitChildren(this); - } } public final GlobalTypeContext globalType() throws RecognitionException { GlobalTypeContext _localctx = new GlobalTypeContext(_ctx, getState()); enterRule(_localctx, 14, RULE_globalType); try { - setState(165); + setState(167); _errHandler.sync(this); switch (_input.LA(1)) { case VALUE_TYPE: @@ -588,20 +549,20 @@ public final GlobalTypeContext globalType() throws RecognitionException { case V128: enterOuterAlt(_localctx, 1); { - setState(159); + setState(161); valType(); } break; case LPAR: enterOuterAlt(_localctx, 2); { - setState(160); + setState(162); match(LPAR); - setState(161); + setState(163); match(MUT); - setState(162); + setState(164); valType(); - setState(163); + setState(165); match(RPAR); } break; @@ -640,11 +601,6 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitDefType(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitDefType(this); - else return visitor.visitChildren(this); - } } public final DefTypeContext defType() throws RecognitionException { @@ -653,13 +609,13 @@ public final DefTypeContext defType() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(167); + setState(169); match(LPAR); - setState(168); + setState(170); match(FUNC); - setState(169); + setState(171); funcType(); - setState(170); + setState(172); match(RPAR); } } @@ -712,11 +668,6 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncParamType(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncParamType(this); - else return visitor.visitChildren(this); - } } public final FuncParamTypeContext funcParamType() throws RecognitionException { @@ -727,18 +678,18 @@ public final FuncParamTypeContext funcParamType() throws RecognitionException { int _alt; enterOuterAlt(_localctx, 1); { - setState(188); + setState(190); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,4,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(172); + setState(174); match(LPAR); - setState(173); + setState(175); match(PARAM); - setState(183); + setState(185); _errHandler.sync(this); switch (_input.LA(1)) { case RPAR: @@ -747,17 +698,17 @@ public final FuncParamTypeContext funcParamType() throws RecognitionException { case EXTERNREF: case V128: { - setState(177); + setState(179); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { { { - setState(174); + setState(176); valType(); } } - setState(179); + setState(181); _errHandler.sync(this); _la = _input.LA(1); } @@ -765,21 +716,21 @@ public final FuncParamTypeContext funcParamType() throws RecognitionException { break; case VAR: { - setState(180); + setState(182); bindVar(); - setState(181); + setState(183); valType(); } break; default: throw new NoViableAltException(this); } - setState(185); + setState(187); match(RPAR); } } } - setState(190); + setState(192); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,4,_ctx); } @@ -828,11 +779,6 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncResType(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncResType(this); - else return visitor.visitChildren(this); - } } public final FuncResTypeContext funcResType() throws RecognitionException { @@ -843,37 +789,37 @@ public final FuncResTypeContext funcResType() throws RecognitionException { int _alt; enterOuterAlt(_localctx, 1); { - setState(202); + setState(204); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,6,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(191); + setState(193); match(LPAR); - setState(192); + setState(194); match(RESULT); - setState(196); + setState(198); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { { { - setState(193); + setState(195); valType(); } } - setState(198); + setState(200); _errHandler.sync(this); _la = _input.LA(1); } - setState(199); + setState(201); match(RPAR); } } } - setState(204); + setState(206); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,6,_ctx); } @@ -910,11 +856,6 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncType(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncType(this); - else return visitor.visitChildren(this); - } } public final FuncTypeContext funcType() throws RecognitionException { @@ -923,9 +864,9 @@ public final FuncTypeContext funcType() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(205); + setState(207); funcParamType(); - setState(206); + setState(208); funcResType(); } } @@ -961,11 +902,6 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTableType(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTableType(this); - else return visitor.visitChildren(this); - } } public final TableTypeContext tableType() throws RecognitionException { @@ -975,19 +911,19 @@ public final TableTypeContext tableType() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(208); - match(NAT); setState(210); + match(NAT); + setState(212); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAT) { { - setState(209); + setState(211); match(NAT); } } - setState(212); + setState(214); refType(); } } @@ -1020,11 +956,6 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitMemoryType(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitMemoryType(this); - else return visitor.visitChildren(this); - } } public final MemoryTypeContext memoryType() throws RecognitionException { @@ -1034,14 +965,14 @@ public final MemoryTypeContext memoryType() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(214); - match(NAT); setState(216); + match(NAT); + setState(218); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAT) { { - setState(215); + setState(217); match(NAT); } } @@ -1079,11 +1010,6 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTypeUse(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTypeUse(this); - else return visitor.visitChildren(this); - } } public final TypeUseContext typeUse() throws RecognitionException { @@ -1092,13 +1018,13 @@ public final TypeUseContext typeUse() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(218); + setState(220); match(LPAR); - setState(219); + setState(221); match(TYPE); - setState(220); + setState(222); idx(); - setState(221); + setState(223); match(RPAR); } } @@ -1130,11 +1056,6 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitLiteral(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitLiteral(this); - else return visitor.visitChildren(this); - } } public final LiteralContext literal() throws RecognitionException { @@ -1144,7 +1065,7 @@ public final LiteralContext literal() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(223); + setState(225); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 56L) != 0)) ) { _errHandler.recoverInline(this); @@ -1183,11 +1104,6 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitIdx(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitIdx(this); - else return visitor.visitChildren(this); - } } public final IdxContext idx() throws RecognitionException { @@ -1197,7 +1113,7 @@ public final IdxContext idx() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(225); + setState(227); _la = _input.LA(1); if ( !(_la==NAT || _la==VAR) ) { _errHandler.recoverInline(this); @@ -1235,11 +1151,6 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitBindVar(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitBindVar(this); - else return visitor.visitChildren(this); - } } public final BindVarContext bindVar() throws RecognitionException { @@ -1248,7 +1159,7 @@ public final BindVarContext bindVar() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(227); + setState(229); match(VAR); } } @@ -1274,6 +1185,9 @@ public BlockInstrContext blockInstr() { public FoldedInstrContext foldedInstr() { return getRuleContext(FoldedInstrContext.class,0); } + public ForLoopContext forLoop() { + return getRuleContext(ForLoopContext.class,0); + } public InstrContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -1286,18 +1200,13 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitInstr(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitInstr(this); - else return visitor.visitChildren(this); - } } public final InstrContext instr() throws RecognitionException { InstrContext _localctx = new InstrContext(_ctx, getState()); enterRule(_localctx, 36, RULE_instr); try { - setState(232); + setState(235); _errHandler.sync(this); switch (_input.LA(1)) { case VALUE_TYPE: @@ -1334,7 +1243,7 @@ public final InstrContext instr() throws RecognitionException { case CONVERT: enterOuterAlt(_localctx, 1); { - setState(229); + setState(231); plainInstr(); } break; @@ -1343,17 +1252,24 @@ public final InstrContext instr() throws RecognitionException { case IF: enterOuterAlt(_localctx, 2); { - setState(230); + setState(232); blockInstr(); } break; case LPAR: enterOuterAlt(_localctx, 3); { - setState(231); + setState(233); foldedInstr(); } break; + case FOR: + enterOuterAlt(_localctx, 4); + { + setState(234); + forLoop(); + } + break; default: throw new NoViableAltException(this); } @@ -1369,6 +1285,72 @@ public final InstrContext instr() throws RecognitionException { return _localctx; } + @SuppressWarnings("CheckReturnValue") + public static class ForLoopContext extends ParserRuleContext { + public TerminalNode FOR() { return getToken(WatParser.FOR, 0); } + public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } + public List instrList() { + return getRuleContexts(InstrListContext.class); + } + public InstrListContext instrList(int i) { + return getRuleContext(InstrListContext.class,i); + } + public List VBAR() { return getTokens(WatParser.VBAR); } + public TerminalNode VBAR(int i) { + return getToken(WatParser.VBAR, i); + } + public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } + public ForLoopContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_forLoop; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterForLoop(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitForLoop(this); + } + } + + public final ForLoopContext forLoop() throws RecognitionException { + ForLoopContext _localctx = new ForLoopContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_forLoop); + try { + enterOuterAlt(_localctx, 1); + { + setState(237); + match(FOR); + setState(238); + match(LPAR); + setState(239); + instrList(); + setState(240); + match(VBAR); + setState(241); + instrList(); + setState(242); + match(VBAR); + setState(243); + instrList(); + setState(244); + match(RPAR); + setState(245); + instrList(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + @SuppressWarnings("CheckReturnValue") public static class PlainInstrContext extends ParserRuleContext { public TerminalNode UNREACHABLE() { return getToken(WatParser.UNREACHABLE, 0); } @@ -1439,74 +1421,69 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitPlainInstr(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitPlainInstr(this); - else return visitor.visitChildren(this); - } } public final PlainInstrContext plainInstr() throws RecognitionException { PlainInstrContext _localctx = new PlainInstrContext(_ctx, getState()); - enterRule(_localctx, 38, RULE_plainInstr); + enterRule(_localctx, 40, RULE_plainInstr); int _la; try { int _alt; - setState(295); + setState(308); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(234); + setState(247); match(UNREACHABLE); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(235); + setState(248); match(NOP); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(236); + setState(249); match(DROP); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(237); + setState(250); selectInstr(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(238); + setState(251); match(BR); - setState(239); + setState(252); idx(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(240); + setState(253); match(BR_IF); - setState(241); + setState(254); idx(); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(242); + setState(255); match(BR_TABLE); - setState(244); + setState(257); _errHandler.sync(this); _alt = 1; do { @@ -1514,7 +1491,7 @@ public final PlainInstrContext plainInstr() throws RecognitionException { case 1: { { - setState(243); + setState(256); idx(); } } @@ -1522,7 +1499,7 @@ public final PlainInstrContext plainInstr() throws RecognitionException { default: throw new NoViableAltException(this); } - setState(246); + setState(259); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,10,_ctx); } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); @@ -1531,94 +1508,94 @@ public final PlainInstrContext plainInstr() throws RecognitionException { case 8: enterOuterAlt(_localctx, 8); { - setState(248); + setState(261); match(RETURN); } break; case 9: enterOuterAlt(_localctx, 9); { - setState(249); + setState(262); match(CALL); - setState(250); + setState(263); idx(); } break; case 10: enterOuterAlt(_localctx, 10); { - setState(251); + setState(264); match(RETURN_CALL); - setState(252); + setState(265); idx(); } break; case 11: enterOuterAlt(_localctx, 11); { - setState(253); + setState(266); match(LOCAL_GET); - setState(254); + setState(267); idx(); } break; case 12: enterOuterAlt(_localctx, 12); { - setState(255); + setState(268); match(LOCAL_SET); - setState(256); + setState(269); idx(); } break; case 13: enterOuterAlt(_localctx, 13); { - setState(257); + setState(270); match(LOCAL_TEE); - setState(258); + setState(271); idx(); } break; case 14: enterOuterAlt(_localctx, 14); { - setState(259); + setState(272); match(GLOBAL_GET); - setState(260); + setState(273); idx(); } break; case 15: enterOuterAlt(_localctx, 15); { - setState(261); + setState(274); match(GLOBAL_SET); - setState(262); + setState(275); idx(); } break; case 16: enterOuterAlt(_localctx, 16); { - setState(263); + setState(276); load(); - setState(265); + setState(278); _errHandler.sync(this); _la = _input.LA(1); if (_la==OFFSET_EQ) { { - setState(264); + setState(277); offsetEq(); } } - setState(268); + setState(281); _errHandler.sync(this); _la = _input.LA(1); if (_la==ALIGN_EQ) { { - setState(267); + setState(280); alignEq(); } } @@ -1628,24 +1605,24 @@ public final PlainInstrContext plainInstr() throws RecognitionException { case 17: enterOuterAlt(_localctx, 17); { - setState(270); + setState(283); store(); - setState(272); + setState(285); _errHandler.sync(this); _la = _input.LA(1); if (_la==OFFSET_EQ) { { - setState(271); + setState(284); offsetEq(); } } - setState(275); + setState(288); _errHandler.sync(this); _la = _input.LA(1); if (_la==ALIGN_EQ) { { - setState(274); + setState(287); alignEq(); } } @@ -1655,116 +1632,116 @@ public final PlainInstrContext plainInstr() throws RecognitionException { case 18: enterOuterAlt(_localctx, 18); { - setState(277); + setState(290); match(MEMORY_SIZE); } break; case 19: enterOuterAlt(_localctx, 19); { - setState(278); + setState(291); match(MEMORY_GROW); } break; case 20: enterOuterAlt(_localctx, 20); { - setState(279); + setState(292); match(MEMORY_FILL); } break; case 21: enterOuterAlt(_localctx, 21); { - setState(280); + setState(293); match(MEMORY_COPY); } break; case 22: enterOuterAlt(_localctx, 22); { - setState(281); + setState(294); match(MEMORY_INIT); - setState(282); + setState(295); idx(); } break; case 23: enterOuterAlt(_localctx, 23); { - setState(283); + setState(296); match(CONST); - setState(284); + setState(297); literal(); } break; case 24: enterOuterAlt(_localctx, 24); { - setState(285); + setState(298); match(SYMBOLIC); } break; case 25: enterOuterAlt(_localctx, 25); { - setState(286); + setState(299); match(SYM_ASSERT); } break; case 26: enterOuterAlt(_localctx, 26); { - setState(287); + setState(300); match(ALLOC); } break; case 27: enterOuterAlt(_localctx, 27); { - setState(288); + setState(301); match(FREE); } break; case 28: enterOuterAlt(_localctx, 28); { - setState(289); + setState(302); match(TEST); } break; case 29: enterOuterAlt(_localctx, 29); { - setState(290); + setState(303); match(COMPARE); } break; case 30: enterOuterAlt(_localctx, 30); { - setState(291); + setState(304); match(UNARY); } break; case 31: enterOuterAlt(_localctx, 31); { - setState(292); + setState(305); match(BINARY); } break; case 32: enterOuterAlt(_localctx, 32); { - setState(293); + setState(306); match(CONVERT); } break; case 33: enterOuterAlt(_localctx, 33); { - setState(294); + setState(307); callIndirectInstr(); } break; @@ -1797,22 +1774,17 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitOffsetEq(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitOffsetEq(this); - else return visitor.visitChildren(this); - } } public final OffsetEqContext offsetEq() throws RecognitionException { OffsetEqContext _localctx = new OffsetEqContext(_ctx, getState()); - enterRule(_localctx, 40, RULE_offsetEq); + enterRule(_localctx, 42, RULE_offsetEq); try { enterOuterAlt(_localctx, 1); { - setState(297); + setState(310); match(OFFSET_EQ); - setState(298); + setState(311); match(NAT); } } @@ -1843,22 +1815,17 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitAlignEq(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitAlignEq(this); - else return visitor.visitChildren(this); - } } public final AlignEqContext alignEq() throws RecognitionException { AlignEqContext _localctx = new AlignEqContext(_ctx, getState()); - enterRule(_localctx, 42, RULE_alignEq); + enterRule(_localctx, 44, RULE_alignEq); try { enterOuterAlt(_localctx, 1); { - setState(300); + setState(313); match(ALIGN_EQ); - setState(301); + setState(314); match(NAT); } } @@ -1894,34 +1861,29 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitLoad(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitLoad(this); - else return visitor.visitChildren(this); - } } public final LoadContext load() throws RecognitionException { LoadContext _localctx = new LoadContext(_ctx, getState()); - enterRule(_localctx, 44, RULE_load); + enterRule(_localctx, 46, RULE_load); int _la; try { enterOuterAlt(_localctx, 1); { - setState(303); + setState(316); numType(); - setState(304); + setState(317); match(LOAD); - setState(308); + setState(321); _errHandler.sync(this); _la = _input.LA(1); if (_la==MEM_SIZE) { { - setState(305); + setState(318); match(MEM_SIZE); - setState(306); + setState(319); match(UNDERSCORE); - setState(307); + setState(320); match(SIGN_POSTFIX); } } @@ -1958,30 +1920,25 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitStore(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitStore(this); - else return visitor.visitChildren(this); - } } public final StoreContext store() throws RecognitionException { StoreContext _localctx = new StoreContext(_ctx, getState()); - enterRule(_localctx, 46, RULE_store); + enterRule(_localctx, 48, RULE_store); int _la; try { enterOuterAlt(_localctx, 1); { - setState(310); + setState(323); numType(); - setState(311); + setState(324); match(STORE); - setState(313); + setState(326); _errHandler.sync(this); _la = _input.LA(1); if (_la==MEM_SIZE) { { - setState(312); + setState(325); match(MEM_SIZE); } } @@ -2017,22 +1974,17 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitSelectInstr(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitSelectInstr(this); - else return visitor.visitChildren(this); - } } public final SelectInstrContext selectInstr() throws RecognitionException { SelectInstrContext _localctx = new SelectInstrContext(_ctx, getState()); - enterRule(_localctx, 48, RULE_selectInstr); + enterRule(_localctx, 50, RULE_selectInstr); try { enterOuterAlt(_localctx, 1); { - setState(315); + setState(328); numType(); - setState(316); + setState(329); match(SELECT); } } @@ -2069,56 +2021,51 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallIndirectInstr(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallIndirectInstr(this); - else return visitor.visitChildren(this); - } } public final CallIndirectInstrContext callIndirectInstr() throws RecognitionException { CallIndirectInstrContext _localctx = new CallIndirectInstrContext(_ctx, getState()); - enterRule(_localctx, 50, RULE_callIndirectInstr); + enterRule(_localctx, 52, RULE_callIndirectInstr); int _la; try { - setState(328); + setState(341); _errHandler.sync(this); switch (_input.LA(1)) { case CALL_INDIRECT: enterOuterAlt(_localctx, 1); { - setState(318); + setState(331); match(CALL_INDIRECT); - setState(320); + setState(333); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAT || _la==VAR) { { - setState(319); + setState(332); idx(); } } - setState(322); + setState(335); typeUse(); } break; case RETURN_CALL_INDIRECT: enterOuterAlt(_localctx, 2); { - setState(323); + setState(336); match(RETURN_CALL_INDIRECT); - setState(325); + setState(338); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAT || _la==VAR) { { - setState(324); + setState(337); idx(); } } - setState(327); + setState(340); typeUse(); } break; @@ -2173,84 +2120,79 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallInstrParams(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallInstrParams(this); - else return visitor.visitChildren(this); - } } public final CallInstrParamsContext callInstrParams() throws RecognitionException { CallInstrParamsContext _localctx = new CallInstrParamsContext(_ctx, getState()); - enterRule(_localctx, 52, RULE_callInstrParams); + enterRule(_localctx, 54, RULE_callInstrParams); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(341); + setState(354); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,22,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(330); + setState(343); match(LPAR); - setState(331); + setState(344); match(PARAM); - setState(335); + setState(348); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { { { - setState(332); + setState(345); valType(); } } - setState(337); + setState(350); _errHandler.sync(this); _la = _input.LA(1); } - setState(338); + setState(351); match(RPAR); } } } - setState(343); + setState(356); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,22,_ctx); } - setState(355); + setState(368); _errHandler.sync(this); _la = _input.LA(1); while (_la==LPAR) { { { - setState(344); + setState(357); match(LPAR); - setState(345); + setState(358); match(RESULT); - setState(349); + setState(362); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { { { - setState(346); + setState(359); valType(); } } - setState(351); + setState(364); _errHandler.sync(this); _la = _input.LA(1); } - setState(352); + setState(365); match(RPAR); } } - setState(357); + setState(370); _errHandler.sync(this); _la = _input.LA(1); } @@ -2302,56 +2244,51 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallInstrParamsInstr(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallInstrParamsInstr(this); - else return visitor.visitChildren(this); - } } public final CallInstrParamsInstrContext callInstrParamsInstr() throws RecognitionException { CallInstrParamsInstrContext _localctx = new CallInstrParamsInstrContext(_ctx, getState()); - enterRule(_localctx, 54, RULE_callInstrParamsInstr); + enterRule(_localctx, 56, RULE_callInstrParamsInstr); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(369); + setState(382); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,26,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(358); + setState(371); match(LPAR); - setState(359); + setState(372); match(PARAM); - setState(363); + setState(376); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { { { - setState(360); + setState(373); valType(); } } - setState(365); + setState(378); _errHandler.sync(this); _la = _input.LA(1); } - setState(366); + setState(379); match(RPAR); } } } - setState(371); + setState(384); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,26,_ctx); } - setState(372); + setState(385); callInstrResultsInstr(); } } @@ -2401,56 +2338,51 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallInstrResultsInstr(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallInstrResultsInstr(this); - else return visitor.visitChildren(this); - } } public final CallInstrResultsInstrContext callInstrResultsInstr() throws RecognitionException { CallInstrResultsInstrContext _localctx = new CallInstrResultsInstrContext(_ctx, getState()); - enterRule(_localctx, 56, RULE_callInstrResultsInstr); + enterRule(_localctx, 58, RULE_callInstrResultsInstr); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(385); + setState(398); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,28,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(374); + setState(387); match(LPAR); - setState(375); + setState(388); match(RESULT); - setState(379); + setState(392); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { { { - setState(376); + setState(389); valType(); } } - setState(381); + setState(394); _errHandler.sync(this); _la = _input.LA(1); } - setState(382); + setState(395); match(RPAR); } } } - setState(387); + setState(400); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,28,_ctx); } - setState(388); + setState(401); instr(); } } @@ -2496,46 +2428,41 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitBlockInstr(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitBlockInstr(this); - else return visitor.visitChildren(this); - } } public final BlockInstrContext blockInstr() throws RecognitionException { BlockInstrContext _localctx = new BlockInstrContext(_ctx, getState()); - enterRule(_localctx, 58, RULE_blockInstr); + enterRule(_localctx, 60, RULE_blockInstr); int _la; try { - setState(424); + setState(437); _errHandler.sync(this); switch (_input.LA(1)) { case BLOCK: enterOuterAlt(_localctx, 1); { - setState(390); + setState(403); match(BLOCK); - setState(392); + setState(405); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(391); + setState(404); bindVar(); } } - setState(394); + setState(407); block(); - setState(395); + setState(408); match(END); - setState(397); + setState(410); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,30,_ctx) ) { case 1: { - setState(396); + setState(409); bindVar(); } break; @@ -2545,28 +2472,28 @@ public final BlockInstrContext blockInstr() throws RecognitionException { case LOOP: enterOuterAlt(_localctx, 2); { - setState(399); + setState(412); match(LOOP); - setState(401); + setState(414); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(400); + setState(413); bindVar(); } } - setState(403); + setState(416); block(); - setState(404); + setState(417); match(END); - setState(406); + setState(419); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,32,_ctx) ) { case 1: { - setState(405); + setState(418); bindVar(); } break; @@ -2576,50 +2503,50 @@ public final BlockInstrContext blockInstr() throws RecognitionException { case IF: enterOuterAlt(_localctx, 3); { - setState(408); + setState(421); match(IF); - setState(410); + setState(423); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(409); + setState(422); bindVar(); } } - setState(412); + setState(425); block(); - setState(418); + setState(431); _errHandler.sync(this); _la = _input.LA(1); if (_la==ELSE) { { - setState(413); + setState(426); match(ELSE); - setState(415); + setState(428); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(414); + setState(427); bindVar(); } } - setState(417); + setState(430); instrList(); } } - setState(420); + setState(433); match(END); - setState(422); + setState(435); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) { case 1: { - setState(421); + setState(434); bindVar(); } break; @@ -2667,35 +2594,30 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitBlockType(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitBlockType(this); - else return visitor.visitChildren(this); - } } public final BlockTypeContext blockType() throws RecognitionException { BlockTypeContext _localctx = new BlockTypeContext(_ctx, getState()); - enterRule(_localctx, 60, RULE_blockType); + enterRule(_localctx, 62, RULE_blockType); try { - setState(437); + setState(450); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(431); + setState(444); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) { case 1: { - setState(426); + setState(439); match(LPAR); - setState(427); + setState(440); match(RESULT); - setState(428); + setState(441); valType(); - setState(429); + setState(442); match(RPAR); } break; @@ -2705,16 +2627,16 @@ public final BlockTypeContext blockType() throws RecognitionException { case 2: enterOuterAlt(_localctx, 2); { - setState(433); + setState(446); typeUse(); - setState(434); + setState(447); funcType(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(436); + setState(449); funcType(); } break; @@ -2751,22 +2673,17 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitBlock(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitBlock(this); - else return visitor.visitChildren(this); - } } public final BlockContext block() throws RecognitionException { BlockContext _localctx = new BlockContext(_ctx, getState()); - enterRule(_localctx, 62, RULE_block); + enterRule(_localctx, 64, RULE_block); try { enterOuterAlt(_localctx, 1); { - setState(439); + setState(452); blockType(); - setState(440); + setState(453); instrList(); } } @@ -2800,24 +2717,19 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFoldedInstr(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFoldedInstr(this); - else return visitor.visitChildren(this); - } } public final FoldedInstrContext foldedInstr() throws RecognitionException { FoldedInstrContext _localctx = new FoldedInstrContext(_ctx, getState()); - enterRule(_localctx, 64, RULE_foldedInstr); + enterRule(_localctx, 66, RULE_foldedInstr); try { enterOuterAlt(_localctx, 1); { - setState(442); + setState(455); match(LPAR); - setState(443); + setState(456); expr(); - setState(444); + setState(457); match(RPAR); } } @@ -2891,40 +2803,35 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitExpr(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitExpr(this); - else return visitor.visitChildren(this); - } } public final ExprContext expr() throws RecognitionException { ExprContext _localctx = new ExprContext(_ctx, getState()); - enterRule(_localctx, 66, RULE_expr); + enterRule(_localctx, 68, RULE_expr); int _la; try { int _alt; - setState(488); + setState(501); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,46,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(446); + setState(459); plainInstr(); - setState(450); + setState(463); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,40,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(447); + setState(460); expr(); } } } - setState(452); + setState(465); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,40,_ctx); } @@ -2933,110 +2840,110 @@ public final ExprContext expr() throws RecognitionException { case 2: enterOuterAlt(_localctx, 2); { - setState(453); + setState(466); match(CALL_INDIRECT); - setState(454); + setState(467); callExprType(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(455); + setState(468); match(RETURN_CALL_INDIRECT); - setState(456); + setState(469); callExprType(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(457); + setState(470); match(BLOCK); - setState(459); + setState(472); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,41,_ctx) ) { case 1: { - setState(458); + setState(471); bindVar(); } break; } - setState(461); + setState(474); block(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(462); + setState(475); match(LOOP); - setState(464); + setState(477); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) { case 1: { - setState(463); + setState(476); bindVar(); } break; } - setState(466); + setState(479); block(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(467); + setState(480); match(IF); - setState(469); + setState(482); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(468); + setState(481); bindVar(); } } - setState(471); + setState(484); blockType(); - setState(475); + setState(488); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,44,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(472); + setState(485); foldedInstr(); } } } - setState(477); + setState(490); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,44,_ctx); } - setState(478); + setState(491); match(LPAR); - setState(479); + setState(492); match(THEN); - setState(480); + setState(493); instrList(); - setState(486); + setState(499); _errHandler.sync(this); _la = _input.LA(1); if (_la==LPAR) { { - setState(481); + setState(494); match(LPAR); - setState(482); + setState(495); match(ELSE); - setState(483); + setState(496); instrList(); - setState(484); + setState(497); match(RPAR); } } @@ -3076,30 +2983,25 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallExprType(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallExprType(this); - else return visitor.visitChildren(this); - } } public final CallExprTypeContext callExprType() throws RecognitionException { CallExprTypeContext _localctx = new CallExprTypeContext(_ctx, getState()); - enterRule(_localctx, 68, RULE_callExprType); + enterRule(_localctx, 70, RULE_callExprType); try { enterOuterAlt(_localctx, 1); { - setState(491); + setState(504); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,47,_ctx) ) { case 1: { - setState(490); + setState(503); typeUse(); } break; } - setState(493); + setState(506); callExprParams(); } } @@ -3149,56 +3051,51 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallExprParams(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallExprParams(this); - else return visitor.visitChildren(this); - } } public final CallExprParamsContext callExprParams() throws RecognitionException { CallExprParamsContext _localctx = new CallExprParamsContext(_ctx, getState()); - enterRule(_localctx, 70, RULE_callExprParams); + enterRule(_localctx, 72, RULE_callExprParams); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(506); + setState(519); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,49,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(495); + setState(508); match(LPAR); - setState(496); + setState(509); match(PARAM); - setState(500); + setState(513); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { { { - setState(497); + setState(510); valType(); } } - setState(502); + setState(515); _errHandler.sync(this); _la = _input.LA(1); } - setState(503); + setState(516); match(RPAR); } } } - setState(508); + setState(521); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,49,_ctx); } - setState(509); + setState(522); callExprResults(); } } @@ -3251,66 +3148,61 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallExprResults(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallExprResults(this); - else return visitor.visitChildren(this); - } } public final CallExprResultsContext callExprResults() throws RecognitionException { CallExprResultsContext _localctx = new CallExprResultsContext(_ctx, getState()); - enterRule(_localctx, 72, RULE_callExprResults); + enterRule(_localctx, 74, RULE_callExprResults); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(522); + setState(535); _errHandler.sync(this); _la = _input.LA(1); while (_la==LPAR) { { { - setState(511); + setState(524); match(LPAR); - setState(512); + setState(525); match(RESULT); - setState(516); + setState(529); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { { { - setState(513); + setState(526); valType(); } } - setState(518); + setState(531); _errHandler.sync(this); _la = _input.LA(1); } - setState(519); + setState(532); match(RPAR); } } - setState(524); + setState(537); _errHandler.sync(this); _la = _input.LA(1); } - setState(528); + setState(541); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,52,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(525); + setState(538); expr(); } } } - setState(530); + setState(543); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,52,_ctx); } @@ -3350,42 +3242,37 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitInstrList(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitInstrList(this); - else return visitor.visitChildren(this); - } } public final InstrListContext instrList() throws RecognitionException { InstrListContext _localctx = new InstrListContext(_ctx, getState()); - enterRule(_localctx, 74, RULE_instrList); + enterRule(_localctx, 76, RULE_instrList); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(534); + setState(547); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,53,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(531); + setState(544); instr(); } } } - setState(536); + setState(549); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,53,_ctx); } - setState(538); + setState(551); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) { case 1: { - setState(537); + setState(550); callIndirectInstr(); } break; @@ -3420,20 +3307,15 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitConstExpr(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitConstExpr(this); - else return visitor.visitChildren(this); - } } public final ConstExprContext constExpr() throws RecognitionException { ConstExprContext _localctx = new ConstExprContext(_ctx, getState()); - enterRule(_localctx, 76, RULE_constExpr); + enterRule(_localctx, 78, RULE_constExpr); try { enterOuterAlt(_localctx, 1); { - setState(540); + setState(553); instrList(); } } @@ -3471,37 +3353,32 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFunction(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFunction(this); - else return visitor.visitChildren(this); - } } public final FunctionContext function() throws RecognitionException { FunctionContext _localctx = new FunctionContext(_ctx, getState()); - enterRule(_localctx, 78, RULE_function); + enterRule(_localctx, 80, RULE_function); int _la; try { enterOuterAlt(_localctx, 1); { - setState(542); + setState(555); match(LPAR); - setState(543); + setState(556); match(FUNC); - setState(545); + setState(558); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(544); + setState(557); bindVar(); } } - setState(547); + setState(560); funcFields(); - setState(548); + setState(561); match(RPAR); } } @@ -3548,62 +3425,57 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncFields(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncFields(this); - else return visitor.visitChildren(this); - } } public final FuncFieldsContext funcFields() throws RecognitionException { FuncFieldsContext _localctx = new FuncFieldsContext(_ctx, getState()); - enterRule(_localctx, 80, RULE_funcFields); + enterRule(_localctx, 82, RULE_funcFields); try { - setState(563); + setState(576); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,58,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(551); + setState(564); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,56,_ctx) ) { case 1: { - setState(550); + setState(563); typeUse(); } break; } - setState(553); + setState(566); funcFieldsBody(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(554); + setState(567); inlineImport(); - setState(556); + setState(569); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,57,_ctx) ) { case 1: { - setState(555); + setState(568); typeUse(); } break; } - setState(558); + setState(571); funcType(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(560); + setState(573); inlineExport(); - setState(561); + setState(574); funcFields(); } break; @@ -3640,22 +3512,17 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncFieldsBody(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncFieldsBody(this); - else return visitor.visitChildren(this); - } } public final FuncFieldsBodyContext funcFieldsBody() throws RecognitionException { FuncFieldsBodyContext _localctx = new FuncFieldsBodyContext(_ctx, getState()); - enterRule(_localctx, 82, RULE_funcFieldsBody); + enterRule(_localctx, 84, RULE_funcFieldsBody); try { enterOuterAlt(_localctx, 1); { - setState(565); + setState(578); funcType(); - setState(566); + setState(579); funcBody(); } } @@ -3711,33 +3578,28 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncBody(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncBody(this); - else return visitor.visitChildren(this); - } } public final FuncBodyContext funcBody() throws RecognitionException { FuncBodyContext _localctx = new FuncBodyContext(_ctx, getState()); - enterRule(_localctx, 84, RULE_funcBody); + enterRule(_localctx, 86, RULE_funcBody); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(584); + setState(597); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,61,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(568); + setState(581); match(LPAR); - setState(569); + setState(582); match(LOCAL); - setState(579); + setState(592); _errHandler.sync(this); switch (_input.LA(1)) { case RPAR: @@ -3746,17 +3608,17 @@ public final FuncBodyContext funcBody() throws RecognitionException { case EXTERNREF: case V128: { - setState(573); + setState(586); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { { { - setState(570); + setState(583); valType(); } } - setState(575); + setState(588); _errHandler.sync(this); _la = _input.LA(1); } @@ -3764,25 +3626,25 @@ public final FuncBodyContext funcBody() throws RecognitionException { break; case VAR: { - setState(576); + setState(589); bindVar(); - setState(577); + setState(590); valType(); } break; default: throw new NoViableAltException(this); } - setState(581); + setState(594); match(RPAR); } } } - setState(586); + setState(599); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,61,_ctx); } - setState(587); + setState(600); instrList(); } } @@ -3820,30 +3682,25 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitOffset(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitOffset(this); - else return visitor.visitChildren(this); - } } public final OffsetContext offset() throws RecognitionException { OffsetContext _localctx = new OffsetContext(_ctx, getState()); - enterRule(_localctx, 86, RULE_offset); + enterRule(_localctx, 88, RULE_offset); try { - setState(595); + setState(608); _errHandler.sync(this); switch (_input.LA(1)) { case LPAR: enterOuterAlt(_localctx, 1); { - setState(589); + setState(602); match(LPAR); - setState(590); + setState(603); match(OFFSET); - setState(591); + setState(604); constExpr(); - setState(592); + setState(605); match(RPAR); } break; @@ -3884,7 +3741,7 @@ public final OffsetContext offset() throws RecognitionException { case CONVERT: enterOuterAlt(_localctx, 2); { - setState(594); + setState(607); expr(); } break; @@ -3938,96 +3795,91 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitElem(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitElem(this); - else return visitor.visitChildren(this); - } } public final ElemContext elem() throws RecognitionException { ElemContext _localctx = new ElemContext(_ctx, getState()); - enterRule(_localctx, 88, RULE_elem); + enterRule(_localctx, 90, RULE_elem); int _la; try { - setState(627); + setState(640); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,67,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(597); + setState(610); match(LPAR); - setState(598); + setState(611); match(ELEM); - setState(600); + setState(613); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAT || _la==VAR) { { - setState(599); + setState(612); idx(); } } - setState(602); + setState(615); match(LPAR); - setState(603); + setState(616); instr(); - setState(604); + setState(617); match(RPAR); - setState(608); + setState(621); _errHandler.sync(this); _la = _input.LA(1); while (_la==NAT || _la==VAR) { { { - setState(605); + setState(618); idx(); } } - setState(610); + setState(623); _errHandler.sync(this); _la = _input.LA(1); } - setState(611); + setState(624); match(RPAR); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(613); + setState(626); match(LPAR); - setState(614); + setState(627); match(ELEM); - setState(616); + setState(629); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAT || _la==VAR) { { - setState(615); + setState(628); idx(); } } - setState(618); + setState(631); offset(); - setState(622); + setState(635); _errHandler.sync(this); _la = _input.LA(1); while (_la==NAT || _la==VAR) { { { - setState(619); + setState(632); idx(); } } - setState(624); + setState(637); _errHandler.sync(this); _la = _input.LA(1); } - setState(625); + setState(638); match(RPAR); } break; @@ -4067,37 +3919,32 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTable(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTable(this); - else return visitor.visitChildren(this); - } } public final TableContext table() throws RecognitionException { TableContext _localctx = new TableContext(_ctx, getState()); - enterRule(_localctx, 90, RULE_table); + enterRule(_localctx, 92, RULE_table); int _la; try { enterOuterAlt(_localctx, 1); { - setState(629); + setState(642); match(LPAR); - setState(630); + setState(643); match(TABLE); - setState(632); + setState(645); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(631); + setState(644); bindVar(); } } - setState(634); + setState(647); tableField(); - setState(635); + setState(648); match(RPAR); } } @@ -4150,70 +3997,65 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTableField(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTableField(this); - else return visitor.visitChildren(this); - } } public final TableFieldContext tableField() throws RecognitionException { TableFieldContext _localctx = new TableFieldContext(_ctx, getState()); - enterRule(_localctx, 92, RULE_tableField); + enterRule(_localctx, 94, RULE_tableField); int _la; try { - setState(655); + setState(668); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(637); + setState(650); tableType(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(638); + setState(651); inlineImport(); - setState(639); + setState(652); tableType(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(641); + setState(654); inlineExport(); - setState(642); + setState(655); tableField(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(644); + setState(657); refType(); - setState(645); + setState(658); match(LPAR); - setState(646); + setState(659); match(ELEM); - setState(650); + setState(663); _errHandler.sync(this); _la = _input.LA(1); while (_la==NAT || _la==VAR) { { { - setState(647); + setState(660); idx(); } } - setState(652); + setState(665); _errHandler.sync(this); _la = _input.LA(1); } - setState(653); + setState(666); match(RPAR); } break; @@ -4266,96 +4108,91 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitData(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitData(this); - else return visitor.visitChildren(this); - } } public final DataContext data() throws RecognitionException { DataContext _localctx = new DataContext(_ctx, getState()); - enterRule(_localctx, 94, RULE_data); + enterRule(_localctx, 96, RULE_data); int _la; try { - setState(687); + setState(700); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,75,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(657); + setState(670); match(LPAR); - setState(658); + setState(671); match(DATA); - setState(660); + setState(673); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAT || _la==VAR) { { - setState(659); + setState(672); idx(); } } - setState(662); + setState(675); match(LPAR); - setState(663); + setState(676); instr(); - setState(664); + setState(677); match(RPAR); - setState(668); + setState(681); _errHandler.sync(this); _la = _input.LA(1); while (_la==STRING_) { { { - setState(665); + setState(678); match(STRING_); } } - setState(670); + setState(683); _errHandler.sync(this); _la = _input.LA(1); } - setState(671); + setState(684); match(RPAR); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(673); + setState(686); match(LPAR); - setState(674); + setState(687); match(DATA); - setState(676); + setState(689); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAT || _la==VAR) { { - setState(675); + setState(688); idx(); } } - setState(678); + setState(691); offset(); - setState(682); + setState(695); _errHandler.sync(this); _la = _input.LA(1); while (_la==STRING_) { { { - setState(679); + setState(692); match(STRING_); } } - setState(684); + setState(697); _errHandler.sync(this); _la = _input.LA(1); } - setState(685); + setState(698); match(RPAR); } break; @@ -4395,37 +4232,32 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitMemory(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitMemory(this); - else return visitor.visitChildren(this); - } } public final MemoryContext memory() throws RecognitionException { MemoryContext _localctx = new MemoryContext(_ctx, getState()); - enterRule(_localctx, 96, RULE_memory); + enterRule(_localctx, 98, RULE_memory); int _la; try { enterOuterAlt(_localctx, 1); { - setState(689); + setState(702); match(LPAR); - setState(690); + setState(703); match(MEMORY); - setState(692); + setState(705); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(691); + setState(704); bindVar(); } } - setState(694); + setState(707); memoryField(); - setState(695); + setState(708); match(RPAR); } } @@ -4473,68 +4305,63 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitMemoryField(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitMemoryField(this); - else return visitor.visitChildren(this); - } } public final MemoryFieldContext memoryField() throws RecognitionException { MemoryFieldContext _localctx = new MemoryFieldContext(_ctx, getState()); - enterRule(_localctx, 98, RULE_memoryField); + enterRule(_localctx, 100, RULE_memoryField); int _la; try { - setState(713); + setState(726); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,78,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(697); + setState(710); memoryType(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(698); + setState(711); inlineImport(); - setState(699); + setState(712); memoryType(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(701); + setState(714); inlineExport(); - setState(702); + setState(715); memoryField(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(704); + setState(717); match(LPAR); - setState(705); + setState(718); match(DATA); - setState(709); + setState(722); _errHandler.sync(this); _la = _input.LA(1); while (_la==STRING_) { { { - setState(706); + setState(719); match(STRING_); } } - setState(711); + setState(724); _errHandler.sync(this); _la = _input.LA(1); } - setState(712); + setState(725); match(RPAR); } break; @@ -4574,37 +4401,32 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitGlobal(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitGlobal(this); - else return visitor.visitChildren(this); - } } public final GlobalContext global() throws RecognitionException { GlobalContext _localctx = new GlobalContext(_ctx, getState()); - enterRule(_localctx, 100, RULE_global); + enterRule(_localctx, 102, RULE_global); int _la; try { enterOuterAlt(_localctx, 1); { - setState(715); + setState(728); match(LPAR); - setState(716); + setState(729); match(GLOBAL); - setState(718); + setState(731); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(717); + setState(730); bindVar(); } } - setState(720); + setState(733); globalField(); - setState(721); + setState(734); match(RPAR); } } @@ -4648,44 +4470,39 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitGlobalField(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitGlobalField(this); - else return visitor.visitChildren(this); - } } public final GlobalFieldContext globalField() throws RecognitionException { GlobalFieldContext _localctx = new GlobalFieldContext(_ctx, getState()); - enterRule(_localctx, 102, RULE_globalField); + enterRule(_localctx, 104, RULE_globalField); try { - setState(732); + setState(745); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,80,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(723); + setState(736); globalType(); - setState(724); + setState(737); constExpr(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(726); + setState(739); inlineImport(); - setState(727); + setState(740); globalType(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(729); + setState(742); inlineExport(); - setState(730); + setState(743); globalField(); } break; @@ -4740,133 +4557,128 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitImportDesc(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitImportDesc(this); - else return visitor.visitChildren(this); - } } public final ImportDescContext importDesc() throws RecognitionException { ImportDescContext _localctx = new ImportDescContext(_ctx, getState()); - enterRule(_localctx, 104, RULE_importDesc); + enterRule(_localctx, 106, RULE_importDesc); int _la; try { - setState(774); + setState(787); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,86,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(734); + setState(747); match(LPAR); - setState(735); + setState(748); match(FUNC); - setState(737); + setState(750); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(736); + setState(749); bindVar(); } } - setState(739); + setState(752); typeUse(); - setState(740); + setState(753); match(RPAR); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(742); + setState(755); match(LPAR); - setState(743); + setState(756); match(FUNC); - setState(745); + setState(758); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(744); + setState(757); bindVar(); } } - setState(747); + setState(760); funcType(); - setState(748); + setState(761); match(RPAR); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(750); + setState(763); match(LPAR); - setState(751); + setState(764); match(TABLE); - setState(753); + setState(766); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(752); + setState(765); bindVar(); } } - setState(755); + setState(768); tableType(); - setState(756); + setState(769); match(RPAR); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(758); + setState(771); match(LPAR); - setState(759); + setState(772); match(MEMORY); - setState(761); + setState(774); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(760); + setState(773); bindVar(); } } - setState(763); + setState(776); memoryType(); - setState(764); + setState(777); match(RPAR); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(766); + setState(779); match(LPAR); - setState(767); + setState(780); match(GLOBAL); - setState(769); + setState(782); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(768); + setState(781); bindVar(); } } - setState(771); + setState(784); globalType(); - setState(772); + setState(785); match(RPAR); } break; @@ -4909,30 +4721,25 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitSimport(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitSimport(this); - else return visitor.visitChildren(this); - } } public final SimportContext simport() throws RecognitionException { SimportContext _localctx = new SimportContext(_ctx, getState()); - enterRule(_localctx, 106, RULE_simport); + enterRule(_localctx, 108, RULE_simport); try { enterOuterAlt(_localctx, 1); { - setState(776); + setState(789); match(LPAR); - setState(777); + setState(790); match(IMPORT); - setState(778); + setState(791); name(); - setState(779); + setState(792); name(); - setState(780); + setState(793); importDesc(); - setState(781); + setState(794); match(RPAR); } } @@ -4970,28 +4777,23 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitInlineImport(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitInlineImport(this); - else return visitor.visitChildren(this); - } } public final InlineImportContext inlineImport() throws RecognitionException { InlineImportContext _localctx = new InlineImportContext(_ctx, getState()); - enterRule(_localctx, 108, RULE_inlineImport); + enterRule(_localctx, 110, RULE_inlineImport); try { enterOuterAlt(_localctx, 1); { - setState(783); + setState(796); match(LPAR); - setState(784); + setState(797); match(IMPORT); - setState(785); + setState(798); name(); - setState(786); + setState(799); name(); - setState(787); + setState(800); match(RPAR); } } @@ -5029,69 +4831,64 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitExportDesc(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitExportDesc(this); - else return visitor.visitChildren(this); - } } public final ExportDescContext exportDesc() throws RecognitionException { ExportDescContext _localctx = new ExportDescContext(_ctx, getState()); - enterRule(_localctx, 110, RULE_exportDesc); + enterRule(_localctx, 112, RULE_exportDesc); try { - setState(809); + setState(822); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,87,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(789); + setState(802); match(LPAR); - setState(790); + setState(803); match(FUNC); - setState(791); + setState(804); idx(); - setState(792); + setState(805); match(RPAR); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(794); + setState(807); match(LPAR); - setState(795); + setState(808); match(TABLE); - setState(796); + setState(809); idx(); - setState(797); + setState(810); match(RPAR); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(799); + setState(812); match(LPAR); - setState(800); + setState(813); match(MEMORY); - setState(801); + setState(814); idx(); - setState(802); + setState(815); match(RPAR); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(804); + setState(817); match(LPAR); - setState(805); + setState(818); match(GLOBAL); - setState(806); + setState(819); idx(); - setState(807); + setState(820); match(RPAR); } break; @@ -5131,28 +4928,23 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitExport_(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitExport_(this); - else return visitor.visitChildren(this); - } } public final Export_Context export_() throws RecognitionException { Export_Context _localctx = new Export_Context(_ctx, getState()); - enterRule(_localctx, 112, RULE_export_); + enterRule(_localctx, 114, RULE_export_); try { enterOuterAlt(_localctx, 1); { - setState(811); + setState(824); match(LPAR); - setState(812); + setState(825); match(EXPORT); - setState(813); + setState(826); name(); - setState(814); + setState(827); exportDesc(); - setState(815); + setState(828); match(RPAR); } } @@ -5187,26 +4979,21 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitInlineExport(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitInlineExport(this); - else return visitor.visitChildren(this); - } } public final InlineExportContext inlineExport() throws RecognitionException { InlineExportContext _localctx = new InlineExportContext(_ctx, getState()); - enterRule(_localctx, 114, RULE_inlineExport); + enterRule(_localctx, 116, RULE_inlineExport); try { enterOuterAlt(_localctx, 1); { - setState(817); + setState(830); match(LPAR); - setState(818); + setState(831); match(EXPORT); - setState(819); + setState(832); name(); - setState(820); + setState(833); match(RPAR); } } @@ -5244,37 +5031,32 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTypeDef(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTypeDef(this); - else return visitor.visitChildren(this); - } } public final TypeDefContext typeDef() throws RecognitionException { TypeDefContext _localctx = new TypeDefContext(_ctx, getState()); - enterRule(_localctx, 116, RULE_typeDef); + enterRule(_localctx, 118, RULE_typeDef); int _la; try { enterOuterAlt(_localctx, 1); { - setState(822); + setState(835); match(LPAR); - setState(823); + setState(836); match(TYPE); - setState(825); + setState(838); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(824); + setState(837); bindVar(); } } - setState(827); + setState(840); defType(); - setState(828); + setState(841); match(RPAR); } } @@ -5309,26 +5091,21 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitStart_(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitStart_(this); - else return visitor.visitChildren(this); - } } public final Start_Context start_() throws RecognitionException { Start_Context _localctx = new Start_Context(_ctx, getState()); - enterRule(_localctx, 118, RULE_start_); + enterRule(_localctx, 120, RULE_start_); try { enterOuterAlt(_localctx, 1); { - setState(830); + setState(843); match(LPAR); - setState(831); + setState(844); match(START_); - setState(832); + setState(845); idx(); - setState(833); + setState(846); match(RPAR); } } @@ -5387,87 +5164,82 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitModuleField(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitModuleField(this); - else return visitor.visitChildren(this); - } } public final ModuleFieldContext moduleField() throws RecognitionException { ModuleFieldContext _localctx = new ModuleFieldContext(_ctx, getState()); - enterRule(_localctx, 120, RULE_moduleField); + enterRule(_localctx, 122, RULE_moduleField); try { - setState(845); + setState(858); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,89,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(835); + setState(848); typeDef(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(836); + setState(849); global(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(837); + setState(850); table(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(838); + setState(851); memory(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(839); + setState(852); function(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(840); + setState(853); elem(); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(841); + setState(854); data(); } break; case 8: enterOuterAlt(_localctx, 8); { - setState(842); + setState(855); start_(); } break; case 9: enterOuterAlt(_localctx, 9); { - setState(843); + setState(856); simport(); } break; case 10: enterOuterAlt(_localctx, 10); { - setState(844); + setState(857); export_(); } break; @@ -5508,49 +5280,44 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitModule_(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitModule_(this); - else return visitor.visitChildren(this); - } } public final Module_Context module_() throws RecognitionException { Module_Context _localctx = new Module_Context(_ctx, getState()); - enterRule(_localctx, 122, RULE_module_); + enterRule(_localctx, 124, RULE_module_); int _la; try { enterOuterAlt(_localctx, 1); { - setState(847); + setState(860); match(LPAR); - setState(848); + setState(861); match(MODULE); - setState(850); + setState(863); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(849); + setState(862); match(VAR); } } - setState(855); + setState(868); _errHandler.sync(this); _la = _input.LA(1); while (_la==LPAR) { { { - setState(852); + setState(865); moduleField(); } } - setState(857); + setState(870); _errHandler.sync(this); _la = _input.LA(1); } - setState(858); + setState(871); match(RPAR); } } @@ -5592,46 +5359,41 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitScriptModule(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitScriptModule(this); - else return visitor.visitChildren(this); - } } public final ScriptModuleContext scriptModule() throws RecognitionException { ScriptModuleContext _localctx = new ScriptModuleContext(_ctx, getState()); - enterRule(_localctx, 124, RULE_scriptModule); + enterRule(_localctx, 126, RULE_scriptModule); int _la; try { - setState(874); + setState(887); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,94,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(860); + setState(873); module_(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(861); + setState(874); match(LPAR); - setState(862); + setState(875); match(MODULE); - setState(864); + setState(877); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(863); + setState(876); match(VAR); } } - setState(866); + setState(879); _la = _input.LA(1); if ( !(_la==BIN || _la==QUOTE) ) { _errHandler.recoverInline(this); @@ -5641,21 +5403,21 @@ public final ScriptModuleContext scriptModule() throws RecognitionException { _errHandler.reportMatch(this); consume(); } - setState(870); + setState(883); _errHandler.sync(this); _la = _input.LA(1); while (_la==STRING_) { { { - setState(867); + setState(880); match(STRING_); } } - setState(872); + setState(885); _errHandler.sync(this); _la = _input.LA(1); } - setState(873); + setState(886); match(RPAR); } break; @@ -5697,66 +5459,61 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitAction_(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitAction_(this); - else return visitor.visitChildren(this); - } } public final Action_Context action_() throws RecognitionException { Action_Context _localctx = new Action_Context(_ctx, getState()); - enterRule(_localctx, 126, RULE_action_); + enterRule(_localctx, 128, RULE_action_); int _la; try { - setState(893); + setState(906); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,97,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(876); + setState(889); match(LPAR); - setState(877); + setState(890); match(INVOKE); - setState(879); + setState(892); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(878); + setState(891); match(VAR); } } - setState(881); + setState(894); name(); - setState(882); + setState(895); constList(); - setState(883); + setState(896); match(RPAR); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(885); + setState(898); match(LPAR); - setState(886); + setState(899); match(GET); - setState(888); + setState(901); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(887); + setState(900); match(VAR); } } - setState(890); + setState(903); name(); - setState(891); + setState(904); match(RPAR); } break; @@ -5807,148 +5564,143 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitAssertion(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitAssertion(this); - else return visitor.visitChildren(this); - } } public final AssertionContext assertion() throws RecognitionException { AssertionContext _localctx = new AssertionContext(_ctx, getState()); - enterRule(_localctx, 128, RULE_assertion); + enterRule(_localctx, 130, RULE_assertion); try { - setState(947); + setState(960); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,98,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(895); + setState(908); match(LPAR); - setState(896); + setState(909); match(ASSERT_MALFORMED); - setState(897); + setState(910); scriptModule(); - setState(898); + setState(911); match(STRING_); - setState(899); + setState(912); match(RPAR); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(901); + setState(914); match(LPAR); - setState(902); + setState(915); match(ASSERT_INVALID); - setState(903); + setState(916); scriptModule(); - setState(904); + setState(917); match(STRING_); - setState(905); + setState(918); match(RPAR); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(907); + setState(920); match(LPAR); - setState(908); + setState(921); match(ASSERT_UNLINKABLE); - setState(909); + setState(922); scriptModule(); - setState(910); + setState(923); match(STRING_); - setState(911); + setState(924); match(RPAR); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(913); + setState(926); match(LPAR); - setState(914); + setState(927); match(ASSERT_TRAP); - setState(915); + setState(928); scriptModule(); - setState(916); + setState(929); match(STRING_); - setState(917); + setState(930); match(RPAR); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(919); + setState(932); match(LPAR); - setState(920); + setState(933); match(ASSERT_RETURN); - setState(921); + setState(934); action_(); - setState(922); + setState(935); constList(); - setState(923); + setState(936); match(RPAR); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(925); + setState(938); match(LPAR); - setState(926); + setState(939); match(ASSERT_RETURN_CANONICAL_NAN); - setState(927); + setState(940); action_(); - setState(928); + setState(941); match(RPAR); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(930); + setState(943); match(LPAR); - setState(931); + setState(944); match(ASSERT_RETURN_ARITHMETIC_NAN); - setState(932); + setState(945); action_(); - setState(933); + setState(946); match(RPAR); } break; case 8: enterOuterAlt(_localctx, 8); { - setState(935); + setState(948); match(LPAR); - setState(936); + setState(949); match(ASSERT_TRAP); - setState(937); + setState(950); action_(); - setState(938); + setState(951); match(STRING_); - setState(939); + setState(952); match(RPAR); } break; case 9: enterOuterAlt(_localctx, 9); { - setState(941); + setState(954); match(LPAR); - setState(942); + setState(955); match(ASSERT_EXHAUSTION); - setState(943); + setState(956); action_(); - setState(944); + setState(957); match(STRING_); - setState(945); + setState(958); match(RPAR); } break; @@ -5998,69 +5750,64 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCmd(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCmd(this); - else return visitor.visitChildren(this); - } } public final CmdContext cmd() throws RecognitionException { CmdContext _localctx = new CmdContext(_ctx, getState()); - enterRule(_localctx, 130, RULE_cmd); + enterRule(_localctx, 132, RULE_cmd); int _la; try { - setState(961); + setState(974); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,100,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(949); + setState(962); action_(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(950); + setState(963); assertion(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(951); + setState(964); scriptModule(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(952); + setState(965); match(LPAR); - setState(953); + setState(966); match(REGISTER); - setState(954); + setState(967); name(); - setState(956); + setState(969); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(955); + setState(968); match(VAR); } } - setState(958); + setState(971); match(RPAR); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(960); + setState(973); meta(); } break; @@ -6104,120 +5851,115 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitMeta(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitMeta(this); - else return visitor.visitChildren(this); - } } public final MetaContext meta() throws RecognitionException { MetaContext _localctx = new MetaContext(_ctx, getState()); - enterRule(_localctx, 132, RULE_meta); + enterRule(_localctx, 134, RULE_meta); int _la; try { - setState(995); + setState(1008); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,106,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(963); + setState(976); match(LPAR); - setState(964); + setState(977); match(SCRIPT); - setState(966); + setState(979); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(965); + setState(978); match(VAR); } } - setState(971); + setState(984); _errHandler.sync(this); _la = _input.LA(1); while (_la==LPAR) { { { - setState(968); + setState(981); cmd(); } } - setState(973); + setState(986); _errHandler.sync(this); _la = _input.LA(1); } - setState(974); + setState(987); match(RPAR); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(975); + setState(988); match(LPAR); - setState(976); + setState(989); match(INPUT); - setState(978); + setState(991); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(977); + setState(990); match(VAR); } } - setState(980); + setState(993); match(STRING_); - setState(981); + setState(994); match(RPAR); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(982); + setState(995); match(LPAR); - setState(983); + setState(996); match(OUTPUT); - setState(985); + setState(998); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(984); + setState(997); match(VAR); } } - setState(987); + setState(1000); match(STRING_); - setState(988); + setState(1001); match(RPAR); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(989); + setState(1002); match(LPAR); - setState(990); + setState(1003); match(OUTPUT); - setState(992); + setState(1005); _errHandler.sync(this); _la = _input.LA(1); if (_la==VAR) { { - setState(991); + setState(1004); match(VAR); } } - setState(994); + setState(1007); match(RPAR); } break; @@ -6254,26 +5996,21 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitWconst(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitWconst(this); - else return visitor.visitChildren(this); - } } public final WconstContext wconst() throws RecognitionException { WconstContext _localctx = new WconstContext(_ctx, getState()); - enterRule(_localctx, 134, RULE_wconst); + enterRule(_localctx, 136, RULE_wconst); try { enterOuterAlt(_localctx, 1); { - setState(997); + setState(1010); match(LPAR); - setState(998); + setState(1011); match(CONST); - setState(999); + setState(1012); literal(); - setState(1000); + setState(1013); match(RPAR); } } @@ -6308,31 +6045,26 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitConstList(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitConstList(this); - else return visitor.visitChildren(this); - } } public final ConstListContext constList() throws RecognitionException { ConstListContext _localctx = new ConstListContext(_ctx, getState()); - enterRule(_localctx, 136, RULE_constList); + enterRule(_localctx, 138, RULE_constList); int _la; try { enterOuterAlt(_localctx, 1); { - setState(1005); + setState(1018); _errHandler.sync(this); _la = _input.LA(1); while (_la==LPAR) { { { - setState(1002); + setState(1015); wconst(); } } - setState(1007); + setState(1020); _errHandler.sync(this); _la = _input.LA(1); } @@ -6376,60 +6108,55 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitScript(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitScript(this); - else return visitor.visitChildren(this); - } } public final ScriptContext script() throws RecognitionException { ScriptContext _localctx = new ScriptContext(_ctx, getState()); - enterRule(_localctx, 138, RULE_script); + enterRule(_localctx, 140, RULE_script); int _la; try { - setState(1022); + setState(1035); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,110,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1011); + setState(1024); _errHandler.sync(this); _la = _input.LA(1); while (_la==LPAR) { { { - setState(1008); + setState(1021); cmd(); } } - setState(1013); + setState(1026); _errHandler.sync(this); _la = _input.LA(1); } - setState(1014); + setState(1027); match(EOF); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(1016); + setState(1029); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(1015); + setState(1028); moduleField(); } } - setState(1018); + setState(1031); _errHandler.sync(this); _la = _input.LA(1); } while ( _la==LPAR ); - setState(1020); + setState(1033); match(EOF); } break; @@ -6470,48 +6197,43 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitModule(this); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitModule(this); - else return visitor.visitChildren(this); - } } public final ModuleContext module() throws RecognitionException { ModuleContext _localctx = new ModuleContext(_ctx, getState()); - enterRule(_localctx, 140, RULE_module); + enterRule(_localctx, 142, RULE_module); int _la; try { - setState(1034); + setState(1047); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,112,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(1024); + setState(1037); module_(); - setState(1025); + setState(1038); match(EOF); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(1030); + setState(1043); _errHandler.sync(this); _la = _input.LA(1); while (_la==LPAR) { { { - setState(1027); + setState(1040); moduleField(); } } - setState(1032); + setState(1045); _errHandler.sync(this); _la = _input.LA(1); } - setState(1033); + setState(1046); match(EOF); } break; @@ -6529,7 +6251,7 @@ public final ModuleContext module() throws RecognitionException { } public static final String _serializedATN = - "\u0004\u0001\u0095\u040d\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001"+ + "\u0004\u0001\u0097\u041a\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001"+ "\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004"+ "\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007"+ "\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b"+ @@ -6547,673 +6269,681 @@ public final ModuleContext module() throws RecognitionException { "6\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007:\u0002;\u0007"+ ";\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007?\u0002@\u0007"+ "@\u0002A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007D\u0002E\u0007"+ - "E\u0002F\u0007F\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001"+ - "\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001"+ - "\u0005\u0001\u0005\u0001\u0005\u0003\u0005\u009c\b\u0005\u0001\u0006\u0001"+ - "\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+ - "\u0007\u0003\u0007\u00a6\b\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+ - "\b\u0001\t\u0001\t\u0001\t\u0005\t\u00b0\b\t\n\t\f\t\u00b3\t\t\u0001\t"+ - "\u0001\t\u0001\t\u0003\t\u00b8\b\t\u0001\t\u0005\t\u00bb\b\t\n\t\f\t\u00be"+ - "\t\t\u0001\n\u0001\n\u0001\n\u0005\n\u00c3\b\n\n\n\f\n\u00c6\t\n\u0001"+ - "\n\u0005\n\u00c9\b\n\n\n\f\n\u00cc\t\n\u0001\u000b\u0001\u000b\u0001\u000b"+ - "\u0001\f\u0001\f\u0003\f\u00d3\b\f\u0001\f\u0001\f\u0001\r\u0001\r\u0003"+ - "\r\u00d9\b\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+ - "\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011"+ - "\u0001\u0012\u0001\u0012\u0001\u0012\u0003\u0012\u00e9\b\u0012\u0001\u0013"+ - "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+ - "\u0001\u0013\u0001\u0013\u0001\u0013\u0004\u0013\u00f5\b\u0013\u000b\u0013"+ - "\f\u0013\u00f6\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+ - "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+ - "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+ - "\u0003\u0013\u010a\b\u0013\u0001\u0013\u0003\u0013\u010d\b\u0013\u0001"+ - "\u0013\u0001\u0013\u0003\u0013\u0111\b\u0013\u0001\u0013\u0003\u0013\u0114"+ - "\b\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+ - "\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+ - "\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+ - "\u0013\u0003\u0013\u0128\b\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ - "\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001"+ - "\u0016\u0001\u0016\u0003\u0016\u0135\b\u0016\u0001\u0017\u0001\u0017\u0001"+ - "\u0017\u0003\u0017\u013a\b\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+ - "\u0019\u0001\u0019\u0003\u0019\u0141\b\u0019\u0001\u0019\u0001\u0019\u0001"+ - "\u0019\u0003\u0019\u0146\b\u0019\u0001\u0019\u0003\u0019\u0149\b\u0019"+ - "\u0001\u001a\u0001\u001a\u0001\u001a\u0005\u001a\u014e\b\u001a\n\u001a"+ - "\f\u001a\u0151\t\u001a\u0001\u001a\u0005\u001a\u0154\b\u001a\n\u001a\f"+ - "\u001a\u0157\t\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0005\u001a\u015c"+ - "\b\u001a\n\u001a\f\u001a\u015f\t\u001a\u0001\u001a\u0005\u001a\u0162\b"+ - "\u001a\n\u001a\f\u001a\u0165\t\u001a\u0001\u001b\u0001\u001b\u0001\u001b"+ - "\u0005\u001b\u016a\b\u001b\n\u001b\f\u001b\u016d\t\u001b\u0001\u001b\u0005"+ - "\u001b\u0170\b\u001b\n\u001b\f\u001b\u0173\t\u001b\u0001\u001b\u0001\u001b"+ - "\u0001\u001c\u0001\u001c\u0001\u001c\u0005\u001c\u017a\b\u001c\n\u001c"+ - "\f\u001c\u017d\t\u001c\u0001\u001c\u0005\u001c\u0180\b\u001c\n\u001c\f"+ - "\u001c\u0183\t\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0003"+ - "\u001d\u0189\b\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0003\u001d\u018e"+ - "\b\u001d\u0001\u001d\u0001\u001d\u0003\u001d\u0192\b\u001d\u0001\u001d"+ - "\u0001\u001d\u0001\u001d\u0003\u001d\u0197\b\u001d\u0001\u001d\u0001\u001d"+ - "\u0003\u001d\u019b\b\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0003\u001d"+ - "\u01a0\b\u001d\u0001\u001d\u0003\u001d\u01a3\b\u001d\u0001\u001d\u0001"+ - "\u001d\u0003\u001d\u01a7\b\u001d\u0003\u001d\u01a9\b\u001d\u0001\u001e"+ - "\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0003\u001e\u01b0\b\u001e"+ - "\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0003\u001e\u01b6\b\u001e"+ - "\u0001\u001f\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001 \u0001"+ - "!\u0001!\u0005!\u01c1\b!\n!\f!\u01c4\t!\u0001!\u0001!\u0001!\u0001!\u0001"+ - "!\u0001!\u0003!\u01cc\b!\u0001!\u0001!\u0001!\u0003!\u01d1\b!\u0001!\u0001"+ - "!\u0001!\u0003!\u01d6\b!\u0001!\u0001!\u0005!\u01da\b!\n!\f!\u01dd\t!"+ - "\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0003!\u01e7"+ - "\b!\u0003!\u01e9\b!\u0001\"\u0003\"\u01ec\b\"\u0001\"\u0001\"\u0001#\u0001"+ - "#\u0001#\u0005#\u01f3\b#\n#\f#\u01f6\t#\u0001#\u0005#\u01f9\b#\n#\f#\u01fc"+ - "\t#\u0001#\u0001#\u0001$\u0001$\u0001$\u0005$\u0203\b$\n$\f$\u0206\t$"+ - "\u0001$\u0005$\u0209\b$\n$\f$\u020c\t$\u0001$\u0005$\u020f\b$\n$\f$\u0212"+ - "\t$\u0001%\u0005%\u0215\b%\n%\f%\u0218\t%\u0001%\u0003%\u021b\b%\u0001"+ - "&\u0001&\u0001\'\u0001\'\u0001\'\u0003\'\u0222\b\'\u0001\'\u0001\'\u0001"+ - "\'\u0001(\u0003(\u0228\b(\u0001(\u0001(\u0001(\u0003(\u022d\b(\u0001("+ - "\u0001(\u0001(\u0001(\u0001(\u0003(\u0234\b(\u0001)\u0001)\u0001)\u0001"+ - "*\u0001*\u0001*\u0005*\u023c\b*\n*\f*\u023f\t*\u0001*\u0001*\u0001*\u0003"+ - "*\u0244\b*\u0001*\u0005*\u0247\b*\n*\f*\u024a\t*\u0001*\u0001*\u0001+"+ - "\u0001+\u0001+\u0001+\u0001+\u0001+\u0003+\u0254\b+\u0001,\u0001,\u0001"+ - ",\u0003,\u0259\b,\u0001,\u0001,\u0001,\u0001,\u0005,\u025f\b,\n,\f,\u0262"+ - "\t,\u0001,\u0001,\u0001,\u0001,\u0001,\u0003,\u0269\b,\u0001,\u0001,\u0005"+ - ",\u026d\b,\n,\f,\u0270\t,\u0001,\u0001,\u0003,\u0274\b,\u0001-\u0001-"+ - "\u0001-\u0003-\u0279\b-\u0001-\u0001-\u0001-\u0001.\u0001.\u0001.\u0001"+ - ".\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0005.\u0289\b.\n."+ - "\f.\u028c\t.\u0001.\u0001.\u0003.\u0290\b.\u0001/\u0001/\u0001/\u0003"+ - "/\u0295\b/\u0001/\u0001/\u0001/\u0001/\u0005/\u029b\b/\n/\f/\u029e\t/"+ - "\u0001/\u0001/\u0001/\u0001/\u0001/\u0003/\u02a5\b/\u0001/\u0001/\u0005"+ - "/\u02a9\b/\n/\f/\u02ac\t/\u0001/\u0001/\u0003/\u02b0\b/\u00010\u00010"+ - "\u00010\u00030\u02b5\b0\u00010\u00010\u00010\u00011\u00011\u00011\u0001"+ - "1\u00011\u00011\u00011\u00011\u00011\u00011\u00051\u02c4\b1\n1\f1\u02c7"+ - "\t1\u00011\u00031\u02ca\b1\u00012\u00012\u00012\u00032\u02cf\b2\u0001"+ - "2\u00012\u00012\u00013\u00013\u00013\u00013\u00013\u00013\u00013\u0001"+ - "3\u00013\u00033\u02dd\b3\u00014\u00014\u00014\u00034\u02e2\b4\u00014\u0001"+ - "4\u00014\u00014\u00014\u00014\u00034\u02ea\b4\u00014\u00014\u00014\u0001"+ - "4\u00014\u00014\u00034\u02f2\b4\u00014\u00014\u00014\u00014\u00014\u0001"+ - "4\u00034\u02fa\b4\u00014\u00014\u00014\u00014\u00014\u00014\u00034\u0302"+ - "\b4\u00014\u00014\u00014\u00034\u0307\b4\u00015\u00015\u00015\u00015\u0001"+ - "5\u00015\u00015\u00016\u00016\u00016\u00016\u00016\u00016\u00017\u0001"+ - "7\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ - "7\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00037\u032a"+ - "\b7\u00018\u00018\u00018\u00018\u00018\u00018\u00019\u00019\u00019\u0001"+ - "9\u00019\u0001:\u0001:\u0001:\u0003:\u033a\b:\u0001:\u0001:\u0001:\u0001"+ - ";\u0001;\u0001;\u0001;\u0001;\u0001<\u0001<\u0001<\u0001<\u0001<\u0001"+ - "<\u0001<\u0001<\u0001<\u0001<\u0003<\u034e\b<\u0001=\u0001=\u0001=\u0003"+ - "=\u0353\b=\u0001=\u0005=\u0356\b=\n=\f=\u0359\t=\u0001=\u0001=\u0001>"+ - "\u0001>\u0001>\u0001>\u0003>\u0361\b>\u0001>\u0001>\u0005>\u0365\b>\n"+ - ">\f>\u0368\t>\u0001>\u0003>\u036b\b>\u0001?\u0001?\u0001?\u0003?\u0370"+ - "\b?\u0001?\u0001?\u0001?\u0001?\u0001?\u0001?\u0001?\u0003?\u0379\b?\u0001"+ - "?\u0001?\u0001?\u0003?\u037e\b?\u0001@\u0001@\u0001@\u0001@\u0001@\u0001"+ - "@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001"+ - "@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001"+ - "@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001"+ - "@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001"+ - "@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0003@\u03b4\b@\u0001A\u0001"+ - "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0003A\u03bd\bA\u0001A\u0001A\u0001"+ - "A\u0003A\u03c2\bA\u0001B\u0001B\u0001B\u0003B\u03c7\bB\u0001B\u0005B\u03ca"+ - "\bB\nB\fB\u03cd\tB\u0001B\u0001B\u0001B\u0001B\u0003B\u03d3\bB\u0001B"+ - "\u0001B\u0001B\u0001B\u0001B\u0003B\u03da\bB\u0001B\u0001B\u0001B\u0001"+ - "B\u0001B\u0003B\u03e1\bB\u0001B\u0003B\u03e4\bB\u0001C\u0001C\u0001C\u0001"+ - "C\u0001C\u0001D\u0005D\u03ec\bD\nD\fD\u03ef\tD\u0001E\u0005E\u03f2\bE"+ - "\nE\fE\u03f5\tE\u0001E\u0001E\u0004E\u03f9\bE\u000bE\fE\u03fa\u0001E\u0001"+ - "E\u0003E\u03ff\bE\u0001F\u0001F\u0001F\u0001F\u0005F\u0405\bF\nF\fF\u0408"+ - "\tF\u0001F\u0003F\u040b\bF\u0001F\u0000\u0000G\u0000\u0002\u0004\u0006"+ - "\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,."+ - "02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088"+ - "\u008a\u008c\u0000\u0006\u0001\u0000\u0004\u0005\u0001\u0000\n\u000b\u0001"+ - "\u0000st\u0001\u0000\u0003\u0005\u0002\u0000\u0003\u0003\u0092\u0092\u0001"+ - "\u0000\u0082\u0083\u047c\u0000\u008e\u0001\u0000\u0000\u0000\u0002\u0090"+ - "\u0001\u0000\u0000\u0000\u0004\u0092\u0001\u0000\u0000\u0000\u0006\u0094"+ - "\u0001\u0000\u0000\u0000\b\u0096\u0001\u0000\u0000\u0000\n\u009b\u0001"+ - "\u0000\u0000\u0000\f\u009d\u0001\u0000\u0000\u0000\u000e\u00a5\u0001\u0000"+ - "\u0000\u0000\u0010\u00a7\u0001\u0000\u0000\u0000\u0012\u00bc\u0001\u0000"+ - "\u0000\u0000\u0014\u00ca\u0001\u0000\u0000\u0000\u0016\u00cd\u0001\u0000"+ - "\u0000\u0000\u0018\u00d0\u0001\u0000\u0000\u0000\u001a\u00d6\u0001\u0000"+ - "\u0000\u0000\u001c\u00da\u0001\u0000\u0000\u0000\u001e\u00df\u0001\u0000"+ - "\u0000\u0000 \u00e1\u0001\u0000\u0000\u0000\"\u00e3\u0001\u0000\u0000"+ - "\u0000$\u00e8\u0001\u0000\u0000\u0000&\u0127\u0001\u0000\u0000\u0000("+ - "\u0129\u0001\u0000\u0000\u0000*\u012c\u0001\u0000\u0000\u0000,\u012f\u0001"+ - "\u0000\u0000\u0000.\u0136\u0001\u0000\u0000\u00000\u013b\u0001\u0000\u0000"+ - "\u00002\u0148\u0001\u0000\u0000\u00004\u0155\u0001\u0000\u0000\u00006"+ - "\u0171\u0001\u0000\u0000\u00008\u0181\u0001\u0000\u0000\u0000:\u01a8\u0001"+ - "\u0000\u0000\u0000<\u01b5\u0001\u0000\u0000\u0000>\u01b7\u0001\u0000\u0000"+ - "\u0000@\u01ba\u0001\u0000\u0000\u0000B\u01e8\u0001\u0000\u0000\u0000D"+ - "\u01eb\u0001\u0000\u0000\u0000F\u01fa\u0001\u0000\u0000\u0000H\u020a\u0001"+ - "\u0000\u0000\u0000J\u0216\u0001\u0000\u0000\u0000L\u021c\u0001\u0000\u0000"+ - "\u0000N\u021e\u0001\u0000\u0000\u0000P\u0233\u0001\u0000\u0000\u0000R"+ - "\u0235\u0001\u0000\u0000\u0000T\u0248\u0001\u0000\u0000\u0000V\u0253\u0001"+ - "\u0000\u0000\u0000X\u0273\u0001\u0000\u0000\u0000Z\u0275\u0001\u0000\u0000"+ - "\u0000\\\u028f\u0001\u0000\u0000\u0000^\u02af\u0001\u0000\u0000\u0000"+ - "`\u02b1\u0001\u0000\u0000\u0000b\u02c9\u0001\u0000\u0000\u0000d\u02cb"+ - "\u0001\u0000\u0000\u0000f\u02dc\u0001\u0000\u0000\u0000h\u0306\u0001\u0000"+ - "\u0000\u0000j\u0308\u0001\u0000\u0000\u0000l\u030f\u0001\u0000\u0000\u0000"+ - "n\u0329\u0001\u0000\u0000\u0000p\u032b\u0001\u0000\u0000\u0000r\u0331"+ - "\u0001\u0000\u0000\u0000t\u0336\u0001\u0000\u0000\u0000v\u033e\u0001\u0000"+ - "\u0000\u0000x\u034d\u0001\u0000\u0000\u0000z\u034f\u0001\u0000\u0000\u0000"+ - "|\u036a\u0001\u0000\u0000\u0000~\u037d\u0001\u0000\u0000\u0000\u0080\u03b3"+ - "\u0001\u0000\u0000\u0000\u0082\u03c1\u0001\u0000\u0000\u0000\u0084\u03e3"+ - "\u0001\u0000\u0000\u0000\u0086\u03e5\u0001\u0000\u0000\u0000\u0088\u03ed"+ - "\u0001\u0000\u0000\u0000\u008a\u03fe\u0001\u0000\u0000\u0000\u008c\u040a"+ - "\u0001\u0000\u0000\u0000\u008e\u008f\u0007\u0000\u0000\u0000\u008f\u0001"+ - "\u0001\u0000\u0000\u0000\u0090\u0091\u0005\u0006\u0000\u0000\u0091\u0003"+ - "\u0001\u0000\u0000\u0000\u0092\u0093\u0005\u0007\u0000\u0000\u0093\u0005"+ - "\u0001\u0000\u0000\u0000\u0094\u0095\u0007\u0001\u0000\u0000\u0095\u0007"+ - "\u0001\u0000\u0000\u0000\u0096\u0097\u0005\u0093\u0000\u0000\u0097\t\u0001"+ - "\u0000\u0000\u0000\u0098\u009c\u0003\u0004\u0002\u0000\u0099\u009c\u0003"+ - "\b\u0004\u0000\u009a\u009c\u0003\u0006\u0003\u0000\u009b\u0098\u0001\u0000"+ - "\u0000\u0000\u009b\u0099\u0001\u0000\u0000\u0000\u009b\u009a\u0001\u0000"+ - "\u0000\u0000\u009c\u000b\u0001\u0000\u0000\u0000\u009d\u009e\u0007\u0002"+ - "\u0000\u0000\u009e\r\u0001\u0000\u0000\u0000\u009f\u00a6\u0003\n\u0005"+ - "\u0000\u00a0\u00a1\u0005\u0001\u0000\u0000\u00a1\u00a2\u0005\f\u0000\u0000"+ - "\u00a2\u00a3\u0003\n\u0005\u0000\u00a3\u00a4\u0005\u0002\u0000\u0000\u00a4"+ - "\u00a6\u0001\u0000\u0000\u0000\u00a5\u009f\u0001\u0000\u0000\u0000\u00a5"+ - "\u00a0\u0001\u0000\u0000\u0000\u00a6\u000f\u0001\u0000\u0000\u0000\u00a7"+ - "\u00a8\u0005\u0001\u0000\u0000\u00a8\u00a9\u0005s\u0000\u0000\u00a9\u00aa"+ - "\u0003\u0016\u000b\u0000\u00aa\u00ab\u0005\u0002\u0000\u0000\u00ab\u0011"+ - "\u0001\u0000\u0000\u0000\u00ac\u00ad\u0005\u0001\u0000\u0000\u00ad\u00b7"+ - "\u0005v\u0000\u0000\u00ae\u00b0\u0003\n\u0005\u0000\u00af\u00ae\u0001"+ - "\u0000\u0000\u0000\u00b0\u00b3\u0001\u0000\u0000\u0000\u00b1\u00af\u0001"+ - "\u0000\u0000\u0000\u00b1\u00b2\u0001\u0000\u0000\u0000\u00b2\u00b8\u0001"+ - "\u0000\u0000\u0000\u00b3\u00b1\u0001\u0000\u0000\u0000\u00b4\u00b5\u0003"+ - "\"\u0011\u0000\u00b5\u00b6\u0003\n\u0005\u0000\u00b6\u00b8\u0001\u0000"+ - "\u0000\u0000\u00b7\u00b1\u0001\u0000\u0000\u0000\u00b7\u00b4\u0001\u0000"+ - "\u0000\u0000\u00b8\u00b9\u0001\u0000\u0000\u0000\u00b9\u00bb\u0005\u0002"+ - "\u0000\u0000\u00ba\u00ac\u0001\u0000\u0000\u0000\u00bb\u00be\u0001\u0000"+ - "\u0000\u0000\u00bc\u00ba\u0001\u0000\u0000\u0000\u00bc\u00bd\u0001\u0000"+ - "\u0000\u0000\u00bd\u0013\u0001\u0000\u0000\u0000\u00be\u00bc\u0001\u0000"+ - "\u0000\u0000\u00bf\u00c0\u0005\u0001\u0000\u0000\u00c0\u00c4\u0005w\u0000"+ - "\u0000\u00c1\u00c3\u0003\n\u0005\u0000\u00c2\u00c1\u0001\u0000\u0000\u0000"+ - "\u00c3\u00c6\u0001\u0000\u0000\u0000\u00c4\u00c2\u0001\u0000\u0000\u0000"+ - "\u00c4\u00c5\u0001\u0000\u0000\u0000\u00c5\u00c7\u0001\u0000\u0000\u0000"+ - "\u00c6\u00c4\u0001\u0000\u0000\u0000\u00c7\u00c9\u0005\u0002\u0000\u0000"+ - "\u00c8\u00bf\u0001\u0000\u0000\u0000\u00c9\u00cc\u0001\u0000\u0000\u0000"+ - "\u00ca\u00c8\u0001\u0000\u0000\u0000\u00ca\u00cb\u0001\u0000\u0000\u0000"+ - "\u00cb\u0015\u0001\u0000\u0000\u0000\u00cc\u00ca\u0001\u0000\u0000\u0000"+ - "\u00cd\u00ce\u0003\u0012\t\u0000\u00ce\u00cf\u0003\u0014\n\u0000\u00cf"+ - "\u0017\u0001\u0000\u0000\u0000\u00d0\u00d2\u0005\u0003\u0000\u0000\u00d1"+ - "\u00d3\u0005\u0003\u0000\u0000\u00d2\u00d1\u0001\u0000\u0000\u0000\u00d2"+ - "\u00d3\u0001\u0000\u0000\u0000\u00d3\u00d4\u0001\u0000\u0000\u0000\u00d4"+ - "\u00d5\u0003\u0006\u0003\u0000\u00d5\u0019\u0001\u0000\u0000\u0000\u00d6"+ - "\u00d8\u0005\u0003\u0000\u0000\u00d7\u00d9\u0005\u0003\u0000\u0000\u00d8"+ - "\u00d7\u0001\u0000\u0000\u0000\u00d8\u00d9\u0001\u0000\u0000\u0000\u00d9"+ - "\u001b\u0001\u0000\u0000\u0000\u00da\u00db\u0005\u0001\u0000\u0000\u00db"+ - "\u00dc\u0005r\u0000\u0000\u00dc\u00dd\u0003 \u0010\u0000\u00dd\u00de\u0005"+ - "\u0002\u0000\u0000\u00de\u001d\u0001\u0000\u0000\u0000\u00df\u00e0\u0007"+ - "\u0003\u0000\u0000\u00e0\u001f\u0001\u0000\u0000\u0000\u00e1\u00e2\u0007"+ - "\u0004\u0000\u0000\u00e2!\u0001\u0000\u0000\u0000\u00e3\u00e4\u0005\u0092"+ - "\u0000\u0000\u00e4#\u0001\u0000\u0000\u0000\u00e5\u00e9\u0003&\u0013\u0000"+ - "\u00e6\u00e9\u0003:\u001d\u0000\u00e7\u00e9\u0003@ \u0000\u00e8\u00e5"+ - "\u0001\u0000\u0000\u0000\u00e8\u00e6\u0001\u0000\u0000\u0000\u00e8\u00e7"+ - "\u0001\u0000\u0000\u0000\u00e9%\u0001\u0000\u0000\u0000\u00ea\u0128\u0005"+ - "\u0011\u0000\u0000\u00eb\u0128\u0005\r\u0000\u0000\u00ec\u0128\u0005\u0012"+ - "\u0000\u0000\u00ed\u0128\u00030\u0018\u0000\u00ee\u00ef\u0005\u0016\u0000"+ - "\u0000\u00ef\u0128\u0003 \u0010\u0000\u00f0\u00f1\u0005\u0017\u0000\u0000"+ - "\u00f1\u0128\u0003 \u0010\u0000\u00f2\u00f4\u0005\u0018\u0000\u0000\u00f3"+ - "\u00f5\u0003 \u0010\u0000\u00f4\u00f3\u0001\u0000\u0000\u0000\u00f5\u00f6"+ - "\u0001\u0000\u0000\u0000\u00f6\u00f4\u0001\u0000\u0000\u0000\u00f6\u00f7"+ - "\u0001\u0000\u0000\u0000\u00f7\u0128\u0001\u0000\u0000\u0000\u00f8\u0128"+ - "\u0005\u0019\u0000\u0000\u00f9\u00fa\u0005\u001e\u0000\u0000\u00fa\u0128"+ - "\u0003 \u0010\u0000\u00fb\u00fc\u0005 \u0000\u0000\u00fc\u0128\u0003 "+ - "\u0010\u0000\u00fd\u00fe\u0005\"\u0000\u0000\u00fe\u0128\u0003 \u0010"+ - "\u0000\u00ff\u0100\u0005#\u0000\u0000\u0100\u0128\u0003 \u0010\u0000\u0101"+ - "\u0102\u0005$\u0000\u0000\u0102\u0128\u0003 \u0010\u0000\u0103\u0104\u0005"+ - "%\u0000\u0000\u0104\u0128\u0003 \u0010\u0000\u0105\u0106\u0005&\u0000"+ - "\u0000\u0106\u0128\u0003 \u0010\u0000\u0107\u0109\u0003,\u0016\u0000\u0108"+ - "\u010a\u0003(\u0014\u0000\u0109\u0108\u0001\u0000\u0000\u0000\u0109\u010a"+ - "\u0001\u0000\u0000\u0000\u010a\u010c\u0001\u0000\u0000\u0000\u010b\u010d"+ - "\u0003*\u0015\u0000\u010c\u010b\u0001\u0000\u0000\u0000\u010c\u010d\u0001"+ - "\u0000\u0000\u0000\u010d\u0128\u0001\u0000\u0000\u0000\u010e\u0110\u0003"+ - ".\u0017\u0000\u010f\u0111\u0003(\u0014\u0000\u0110\u010f\u0001\u0000\u0000"+ - "\u0000\u0110\u0111\u0001\u0000\u0000\u0000\u0111\u0113\u0001\u0000\u0000"+ - "\u0000\u0112\u0114\u0003*\u0015\u0000\u0113\u0112\u0001\u0000\u0000\u0000"+ - "\u0113\u0114\u0001\u0000\u0000\u0000\u0114\u0128\u0001\u0000\u0000\u0000"+ - "\u0115\u0128\u0005h\u0000\u0000\u0116\u0128\u0005i\u0000\u0000\u0117\u0128"+ - "\u0005j\u0000\u0000\u0118\u0128\u0005k\u0000\u0000\u0119\u011a\u0005l"+ - "\u0000\u0000\u011a\u0128\u0003 \u0010\u0000\u011b\u011c\u0005\b\u0000"+ - "\u0000\u011c\u0128\u0003\u001e\u000f\u0000\u011d\u0128\u0005\t\u0000\u0000"+ - "\u011e\u0128\u0005\u000e\u0000\u0000\u011f\u0128\u0005\u000f\u0000\u0000"+ - "\u0120\u0128\u0005\u0010\u0000\u0000\u0121\u0128\u0005m\u0000\u0000\u0122"+ - "\u0128\u0005n\u0000\u0000\u0123\u0128\u0005o\u0000\u0000\u0124\u0128\u0005"+ - "p\u0000\u0000\u0125\u0128\u0005q\u0000\u0000\u0126\u0128\u00032\u0019"+ - "\u0000\u0127\u00ea\u0001\u0000\u0000\u0000\u0127\u00eb\u0001\u0000\u0000"+ - "\u0000\u0127\u00ec\u0001\u0000\u0000\u0000\u0127\u00ed\u0001\u0000\u0000"+ - "\u0000\u0127\u00ee\u0001\u0000\u0000\u0000\u0127\u00f0\u0001\u0000\u0000"+ - "\u0000\u0127\u00f2\u0001\u0000\u0000\u0000\u0127\u00f8\u0001\u0000\u0000"+ - "\u0000\u0127\u00f9\u0001\u0000\u0000\u0000\u0127\u00fb\u0001\u0000\u0000"+ - "\u0000\u0127\u00fd\u0001\u0000\u0000\u0000\u0127\u00ff\u0001\u0000\u0000"+ - "\u0000\u0127\u0101\u0001\u0000\u0000\u0000\u0127\u0103\u0001\u0000\u0000"+ - "\u0000\u0127\u0105\u0001\u0000\u0000\u0000\u0127\u0107\u0001\u0000\u0000"+ - "\u0000\u0127\u010e\u0001\u0000\u0000\u0000\u0127\u0115\u0001\u0000\u0000"+ - "\u0000\u0127\u0116\u0001\u0000\u0000\u0000\u0127\u0117\u0001\u0000\u0000"+ - "\u0000\u0127\u0118\u0001\u0000\u0000\u0000\u0127\u0119\u0001\u0000\u0000"+ - "\u0000\u0127\u011b\u0001\u0000\u0000\u0000\u0127\u011d\u0001\u0000\u0000"+ - "\u0000\u0127\u011e\u0001\u0000\u0000\u0000\u0127\u011f\u0001\u0000\u0000"+ - "\u0000\u0127\u0120\u0001\u0000\u0000\u0000\u0127\u0121\u0001\u0000\u0000"+ - "\u0000\u0127\u0122\u0001\u0000\u0000\u0000\u0127\u0123\u0001\u0000\u0000"+ - "\u0000\u0127\u0124\u0001\u0000\u0000\u0000\u0127\u0125\u0001\u0000\u0000"+ - "\u0000\u0127\u0126\u0001\u0000\u0000\u0000\u0128\'\u0001\u0000\u0000\u0000"+ - "\u0129\u012a\u0005*\u0000\u0000\u012a\u012b\u0005\u0003\u0000\u0000\u012b"+ - ")\u0001\u0000\u0000\u0000\u012c\u012d\u0005+\u0000\u0000\u012d\u012e\u0005"+ - "\u0003\u0000\u0000\u012e+\u0001\u0000\u0000\u0000\u012f\u0130\u0003\u0004"+ - "\u0002\u0000\u0130\u0134\u0005\'\u0000\u0000\u0131\u0132\u0005-\u0000"+ - "\u0000\u0132\u0133\u0005)\u0000\u0000\u0133\u0135\u0005,\u0000\u0000\u0134"+ - "\u0131\u0001\u0000\u0000\u0000\u0134\u0135\u0001\u0000\u0000\u0000\u0135"+ - "-\u0001\u0000\u0000\u0000\u0136\u0137\u0003\u0004\u0002\u0000\u0137\u0139"+ - "\u0005(\u0000\u0000\u0138\u013a\u0005-\u0000\u0000\u0139\u0138\u0001\u0000"+ - "\u0000\u0000\u0139\u013a\u0001\u0000\u0000\u0000\u013a/\u0001\u0000\u0000"+ - "\u0000\u013b\u013c\u0003\u0004\u0002\u0000\u013c\u013d\u0005\u001d\u0000"+ - "\u0000\u013d1\u0001\u0000\u0000\u0000\u013e\u0140\u0005\u001f\u0000\u0000"+ - "\u013f\u0141\u0003 \u0010\u0000\u0140\u013f\u0001\u0000\u0000\u0000\u0140"+ - "\u0141\u0001\u0000\u0000\u0000\u0141\u0142\u0001\u0000\u0000\u0000\u0142"+ - "\u0149\u0003\u001c\u000e\u0000\u0143\u0145\u0005!\u0000\u0000\u0144\u0146"+ - "\u0003 \u0010\u0000\u0145\u0144\u0001\u0000\u0000\u0000\u0145\u0146\u0001"+ - "\u0000\u0000\u0000\u0146\u0147\u0001\u0000\u0000\u0000\u0147\u0149\u0003"+ - "\u001c\u000e\u0000\u0148\u013e\u0001\u0000\u0000\u0000\u0148\u0143\u0001"+ - "\u0000\u0000\u0000\u01493\u0001\u0000\u0000\u0000\u014a\u014b\u0005\u0001"+ - "\u0000\u0000\u014b\u014f\u0005v\u0000\u0000\u014c\u014e\u0003\n\u0005"+ - "\u0000\u014d\u014c\u0001\u0000\u0000\u0000\u014e\u0151\u0001\u0000\u0000"+ - "\u0000\u014f\u014d\u0001\u0000\u0000\u0000\u014f\u0150\u0001\u0000\u0000"+ - "\u0000\u0150\u0152\u0001\u0000\u0000\u0000\u0151\u014f\u0001\u0000\u0000"+ - "\u0000\u0152\u0154\u0005\u0002\u0000\u0000\u0153\u014a\u0001\u0000\u0000"+ - "\u0000\u0154\u0157\u0001\u0000\u0000\u0000\u0155\u0153\u0001\u0000\u0000"+ - "\u0000\u0155\u0156\u0001\u0000\u0000\u0000\u0156\u0163\u0001\u0000\u0000"+ - "\u0000\u0157\u0155\u0001\u0000\u0000\u0000\u0158\u0159\u0005\u0001\u0000"+ - "\u0000\u0159\u015d\u0005w\u0000\u0000\u015a\u015c\u0003\n\u0005\u0000"+ - "\u015b\u015a\u0001\u0000\u0000\u0000\u015c\u015f\u0001\u0000\u0000\u0000"+ - "\u015d\u015b\u0001\u0000\u0000\u0000\u015d\u015e\u0001\u0000\u0000\u0000"+ - "\u015e\u0160\u0001\u0000\u0000\u0000\u015f\u015d\u0001\u0000\u0000\u0000"+ - "\u0160\u0162\u0005\u0002\u0000\u0000\u0161\u0158\u0001\u0000\u0000\u0000"+ - "\u0162\u0165\u0001\u0000\u0000\u0000\u0163\u0161\u0001\u0000\u0000\u0000"+ - "\u0163\u0164\u0001\u0000\u0000\u0000\u01645\u0001\u0000\u0000\u0000\u0165"+ - "\u0163\u0001\u0000\u0000\u0000\u0166\u0167\u0005\u0001\u0000\u0000\u0167"+ - "\u016b\u0005v\u0000\u0000\u0168\u016a\u0003\n\u0005\u0000\u0169\u0168"+ - "\u0001\u0000\u0000\u0000\u016a\u016d\u0001\u0000\u0000\u0000\u016b\u0169"+ - "\u0001\u0000\u0000\u0000\u016b\u016c\u0001\u0000\u0000\u0000\u016c\u016e"+ - "\u0001\u0000\u0000\u0000\u016d\u016b\u0001\u0000\u0000\u0000\u016e\u0170"+ - "\u0005\u0002\u0000\u0000\u016f\u0166\u0001\u0000\u0000\u0000\u0170\u0173"+ - "\u0001\u0000\u0000\u0000\u0171\u016f\u0001\u0000\u0000\u0000\u0171\u0172"+ - "\u0001\u0000\u0000\u0000\u0172\u0174\u0001\u0000\u0000\u0000\u0173\u0171"+ - "\u0001\u0000\u0000\u0000\u0174\u0175\u00038\u001c\u0000\u01757\u0001\u0000"+ - "\u0000\u0000\u0176\u0177\u0005\u0001\u0000\u0000\u0177\u017b\u0005w\u0000"+ - "\u0000\u0178\u017a\u0003\n\u0005\u0000\u0179\u0178\u0001\u0000\u0000\u0000"+ - "\u017a\u017d\u0001\u0000\u0000\u0000\u017b\u0179\u0001\u0000\u0000\u0000"+ - "\u017b\u017c\u0001\u0000\u0000\u0000\u017c\u017e\u0001\u0000\u0000\u0000"+ - "\u017d\u017b\u0001\u0000\u0000\u0000\u017e\u0180\u0005\u0002\u0000\u0000"+ - "\u017f\u0176\u0001\u0000\u0000\u0000\u0180\u0183\u0001\u0000\u0000\u0000"+ - "\u0181\u017f\u0001\u0000\u0000\u0000\u0181\u0182\u0001\u0000\u0000\u0000"+ - "\u0182\u0184\u0001\u0000\u0000\u0000\u0183\u0181\u0001\u0000\u0000\u0000"+ - "\u0184\u0185\u0003$\u0012\u0000\u01859\u0001\u0000\u0000\u0000\u0186\u0188"+ - "\u0005\u0013\u0000\u0000\u0187\u0189\u0003\"\u0011\u0000\u0188\u0187\u0001"+ - "\u0000\u0000\u0000\u0188\u0189\u0001\u0000\u0000\u0000\u0189\u018a\u0001"+ - "\u0000\u0000\u0000\u018a\u018b\u0003>\u001f\u0000\u018b\u018d\u0005\u0015"+ - "\u0000\u0000\u018c\u018e\u0003\"\u0011\u0000\u018d\u018c\u0001\u0000\u0000"+ - "\u0000\u018d\u018e\u0001\u0000\u0000\u0000\u018e\u01a9\u0001\u0000\u0000"+ - "\u0000\u018f\u0191\u0005\u0014\u0000\u0000\u0190\u0192\u0003\"\u0011\u0000"+ - "\u0191\u0190\u0001\u0000\u0000\u0000\u0191\u0192\u0001\u0000\u0000\u0000"+ - "\u0192\u0193\u0001\u0000\u0000\u0000\u0193\u0194\u0003>\u001f\u0000\u0194"+ - "\u0196\u0005\u0015\u0000\u0000\u0195\u0197\u0003\"\u0011\u0000\u0196\u0195"+ - "\u0001\u0000\u0000\u0000\u0196\u0197\u0001\u0000\u0000\u0000\u0197\u01a9"+ - "\u0001\u0000\u0000\u0000\u0198\u019a\u0005\u001a\u0000\u0000\u0199\u019b"+ - "\u0003\"\u0011\u0000\u019a\u0199\u0001\u0000\u0000\u0000\u019a\u019b\u0001"+ - "\u0000\u0000\u0000\u019b\u019c\u0001\u0000\u0000\u0000\u019c\u01a2\u0003"+ - ">\u001f\u0000\u019d\u019f\u0005\u001c\u0000\u0000\u019e\u01a0\u0003\""+ - "\u0011\u0000\u019f\u019e\u0001\u0000\u0000\u0000\u019f\u01a0\u0001\u0000"+ - "\u0000\u0000\u01a0\u01a1\u0001\u0000\u0000\u0000\u01a1\u01a3\u0003J%\u0000"+ - "\u01a2\u019d\u0001\u0000\u0000\u0000\u01a2\u01a3\u0001\u0000\u0000\u0000"+ - "\u01a3\u01a4\u0001\u0000\u0000\u0000\u01a4\u01a6\u0005\u0015\u0000\u0000"+ - "\u01a5\u01a7\u0003\"\u0011\u0000\u01a6\u01a5\u0001\u0000\u0000\u0000\u01a6"+ - "\u01a7\u0001\u0000\u0000\u0000\u01a7\u01a9\u0001\u0000\u0000\u0000\u01a8"+ - "\u0186\u0001\u0000\u0000\u0000\u01a8\u018f\u0001\u0000\u0000\u0000\u01a8"+ - "\u0198\u0001\u0000\u0000\u0000\u01a9;\u0001\u0000\u0000\u0000\u01aa\u01ab"+ - "\u0005\u0001\u0000\u0000\u01ab\u01ac\u0005w\u0000\u0000\u01ac\u01ad\u0003"+ - "\n\u0005\u0000\u01ad\u01ae\u0005\u0002\u0000\u0000\u01ae\u01b0\u0001\u0000"+ - "\u0000\u0000\u01af\u01aa\u0001\u0000\u0000\u0000\u01af\u01b0\u0001\u0000"+ - "\u0000\u0000\u01b0\u01b6\u0001\u0000\u0000\u0000\u01b1\u01b2\u0003\u001c"+ - "\u000e\u0000\u01b2\u01b3\u0003\u0016\u000b\u0000\u01b3\u01b6\u0001\u0000"+ - "\u0000\u0000\u01b4\u01b6\u0003\u0016\u000b\u0000\u01b5\u01af\u0001\u0000"+ - "\u0000\u0000\u01b5\u01b1\u0001\u0000\u0000\u0000\u01b5\u01b4\u0001\u0000"+ - "\u0000\u0000\u01b6=\u0001\u0000\u0000\u0000\u01b7\u01b8\u0003<\u001e\u0000"+ - "\u01b8\u01b9\u0003J%\u0000\u01b9?\u0001\u0000\u0000\u0000\u01ba\u01bb"+ - "\u0005\u0001\u0000\u0000\u01bb\u01bc\u0003B!\u0000\u01bc\u01bd\u0005\u0002"+ - "\u0000\u0000\u01bdA\u0001\u0000\u0000\u0000\u01be\u01c2\u0003&\u0013\u0000"+ - "\u01bf\u01c1\u0003B!\u0000\u01c0\u01bf\u0001\u0000\u0000\u0000\u01c1\u01c4"+ - "\u0001\u0000\u0000\u0000\u01c2\u01c0\u0001\u0000\u0000\u0000\u01c2\u01c3"+ - "\u0001\u0000\u0000\u0000\u01c3\u01e9\u0001\u0000\u0000\u0000\u01c4\u01c2"+ - "\u0001\u0000\u0000\u0000\u01c5\u01c6\u0005\u001f\u0000\u0000\u01c6\u01e9"+ - "\u0003D\"\u0000\u01c7\u01c8\u0005!\u0000\u0000\u01c8\u01e9\u0003D\"\u0000"+ - "\u01c9\u01cb\u0005\u0013\u0000\u0000\u01ca\u01cc\u0003\"\u0011\u0000\u01cb"+ - "\u01ca\u0001\u0000\u0000\u0000\u01cb\u01cc\u0001\u0000\u0000\u0000\u01cc"+ - "\u01cd\u0001\u0000\u0000\u0000\u01cd\u01e9\u0003>\u001f\u0000\u01ce\u01d0"+ - "\u0005\u0014\u0000\u0000\u01cf\u01d1\u0003\"\u0011\u0000\u01d0\u01cf\u0001"+ - "\u0000\u0000\u0000\u01d0\u01d1\u0001\u0000\u0000\u0000\u01d1\u01d2\u0001"+ - "\u0000\u0000\u0000\u01d2\u01e9\u0003>\u001f\u0000\u01d3\u01d5\u0005\u001a"+ - "\u0000\u0000\u01d4\u01d6\u0003\"\u0011\u0000\u01d5\u01d4\u0001\u0000\u0000"+ - "\u0000\u01d5\u01d6\u0001\u0000\u0000\u0000\u01d6\u01d7\u0001\u0000\u0000"+ - "\u0000\u01d7\u01db\u0003<\u001e\u0000\u01d8\u01da\u0003@ \u0000\u01d9"+ - "\u01d8\u0001\u0000\u0000\u0000\u01da\u01dd\u0001\u0000\u0000\u0000\u01db"+ - "\u01d9\u0001\u0000\u0000\u0000\u01db\u01dc\u0001\u0000\u0000\u0000\u01dc"+ - "\u01de\u0001\u0000\u0000\u0000\u01dd\u01db\u0001\u0000\u0000\u0000\u01de"+ - "\u01df\u0005\u0001\u0000\u0000\u01df\u01e0\u0005\u001b\u0000\u0000\u01e0"+ - "\u01e6\u0003J%\u0000\u01e1\u01e2\u0005\u0001\u0000\u0000\u01e2\u01e3\u0005"+ - "\u001c\u0000\u0000\u01e3\u01e4\u0003J%\u0000\u01e4\u01e5\u0005\u0002\u0000"+ - "\u0000\u01e5\u01e7\u0001\u0000\u0000\u0000\u01e6\u01e1\u0001\u0000\u0000"+ - "\u0000\u01e6\u01e7\u0001\u0000\u0000\u0000\u01e7\u01e9\u0001\u0000\u0000"+ - "\u0000\u01e8\u01be\u0001\u0000\u0000\u0000\u01e8\u01c5\u0001\u0000\u0000"+ - "\u0000\u01e8\u01c7\u0001\u0000\u0000\u0000\u01e8\u01c9\u0001\u0000\u0000"+ - "\u0000\u01e8\u01ce\u0001\u0000\u0000\u0000\u01e8\u01d3\u0001\u0000\u0000"+ - "\u0000\u01e9C\u0001\u0000\u0000\u0000\u01ea\u01ec\u0003\u001c\u000e\u0000"+ - "\u01eb\u01ea\u0001\u0000\u0000\u0000\u01eb\u01ec\u0001\u0000\u0000\u0000"+ - "\u01ec\u01ed\u0001\u0000\u0000\u0000\u01ed\u01ee\u0003F#\u0000\u01eeE"+ - "\u0001\u0000\u0000\u0000\u01ef\u01f0\u0005\u0001\u0000\u0000\u01f0\u01f4"+ - "\u0005v\u0000\u0000\u01f1\u01f3\u0003\n\u0005\u0000\u01f2\u01f1\u0001"+ - "\u0000\u0000\u0000\u01f3\u01f6\u0001\u0000\u0000\u0000\u01f4\u01f2\u0001"+ - "\u0000\u0000\u0000\u01f4\u01f5\u0001\u0000\u0000\u0000\u01f5\u01f7\u0001"+ - "\u0000\u0000\u0000\u01f6\u01f4\u0001\u0000\u0000\u0000\u01f7\u01f9\u0005"+ - "\u0002\u0000\u0000\u01f8\u01ef\u0001\u0000\u0000\u0000\u01f9\u01fc\u0001"+ - "\u0000\u0000\u0000\u01fa\u01f8\u0001\u0000\u0000\u0000\u01fa\u01fb\u0001"+ - "\u0000\u0000\u0000\u01fb\u01fd\u0001\u0000\u0000\u0000\u01fc\u01fa\u0001"+ - "\u0000\u0000\u0000\u01fd\u01fe\u0003H$\u0000\u01feG\u0001\u0000\u0000"+ - "\u0000\u01ff\u0200\u0005\u0001\u0000\u0000\u0200\u0204\u0005w\u0000\u0000"+ - "\u0201\u0203\u0003\n\u0005\u0000\u0202\u0201\u0001\u0000\u0000\u0000\u0203"+ - "\u0206\u0001\u0000\u0000\u0000\u0204\u0202\u0001\u0000\u0000\u0000\u0204"+ - "\u0205\u0001\u0000\u0000\u0000\u0205\u0207\u0001\u0000\u0000\u0000\u0206"+ - "\u0204\u0001\u0000\u0000\u0000\u0207\u0209\u0005\u0002\u0000\u0000\u0208"+ - "\u01ff\u0001\u0000\u0000\u0000\u0209\u020c\u0001\u0000\u0000\u0000\u020a"+ - "\u0208\u0001\u0000\u0000\u0000\u020a\u020b\u0001\u0000\u0000\u0000\u020b"+ - "\u0210\u0001\u0000\u0000\u0000\u020c\u020a\u0001\u0000\u0000\u0000\u020d"+ - "\u020f\u0003B!\u0000\u020e\u020d\u0001\u0000\u0000\u0000\u020f\u0212\u0001"+ - "\u0000\u0000\u0000\u0210\u020e\u0001\u0000\u0000\u0000\u0210\u0211\u0001"+ - "\u0000\u0000\u0000\u0211I\u0001\u0000\u0000\u0000\u0212\u0210\u0001\u0000"+ - "\u0000\u0000\u0213\u0215\u0003$\u0012\u0000\u0214\u0213\u0001\u0000\u0000"+ - "\u0000\u0215\u0218\u0001\u0000\u0000\u0000\u0216\u0214\u0001\u0000\u0000"+ - "\u0000\u0216\u0217\u0001\u0000\u0000\u0000\u0217\u021a\u0001\u0000\u0000"+ - "\u0000\u0218\u0216\u0001\u0000\u0000\u0000\u0219\u021b\u00032\u0019\u0000"+ - "\u021a\u0219\u0001\u0000\u0000\u0000\u021a\u021b\u0001\u0000\u0000\u0000"+ - "\u021bK\u0001\u0000\u0000\u0000\u021c\u021d\u0003J%\u0000\u021dM\u0001"+ - "\u0000\u0000\u0000\u021e\u021f\u0005\u0001\u0000\u0000\u021f\u0221\u0005"+ - "s\u0000\u0000\u0220\u0222\u0003\"\u0011\u0000\u0221\u0220\u0001\u0000"+ - "\u0000\u0000\u0221\u0222\u0001\u0000\u0000\u0000\u0222\u0223\u0001\u0000"+ - "\u0000\u0000\u0223\u0224\u0003P(\u0000\u0224\u0225\u0005\u0002\u0000\u0000"+ - "\u0225O\u0001\u0000\u0000\u0000\u0226\u0228\u0003\u001c\u000e\u0000\u0227"+ - "\u0226\u0001\u0000\u0000\u0000\u0227\u0228\u0001\u0000\u0000\u0000\u0228"+ - "\u0229\u0001\u0000\u0000\u0000\u0229\u0234\u0003R)\u0000\u022a\u022c\u0003"+ - "l6\u0000\u022b\u022d\u0003\u001c\u000e\u0000\u022c\u022b\u0001\u0000\u0000"+ - "\u0000\u022c\u022d\u0001\u0000\u0000\u0000\u022d\u022e\u0001\u0000\u0000"+ - "\u0000\u022e\u022f\u0003\u0016\u000b\u0000\u022f\u0234\u0001\u0000\u0000"+ - "\u0000\u0230\u0231\u0003r9\u0000\u0231\u0232\u0003P(\u0000\u0232\u0234"+ - "\u0001\u0000\u0000\u0000\u0233\u0227\u0001\u0000\u0000\u0000\u0233\u022a"+ - "\u0001\u0000\u0000\u0000\u0233\u0230\u0001\u0000\u0000\u0000\u0234Q\u0001"+ - "\u0000\u0000\u0000\u0235\u0236\u0003\u0016\u000b\u0000\u0236\u0237\u0003"+ - "T*\u0000\u0237S\u0001\u0000\u0000\u0000\u0238\u0239\u0005\u0001\u0000"+ - "\u0000\u0239\u0243\u0005x\u0000\u0000\u023a\u023c\u0003\n\u0005\u0000"+ - "\u023b\u023a\u0001\u0000\u0000\u0000\u023c\u023f\u0001\u0000\u0000\u0000"+ - "\u023d\u023b\u0001\u0000\u0000\u0000\u023d\u023e\u0001\u0000\u0000\u0000"+ - "\u023e\u0244\u0001\u0000\u0000\u0000\u023f\u023d\u0001\u0000\u0000\u0000"+ - "\u0240\u0241\u0003\"\u0011\u0000\u0241\u0242\u0003\n\u0005\u0000\u0242"+ - "\u0244\u0001\u0000\u0000\u0000\u0243\u023d\u0001\u0000\u0000\u0000\u0243"+ - "\u0240\u0001\u0000\u0000\u0000\u0244\u0245\u0001\u0000\u0000\u0000\u0245"+ - "\u0247\u0005\u0002\u0000\u0000\u0246\u0238\u0001\u0000\u0000\u0000\u0247"+ - "\u024a\u0001\u0000\u0000\u0000\u0248\u0246\u0001\u0000\u0000\u0000\u0248"+ - "\u0249\u0001\u0000\u0000\u0000\u0249\u024b\u0001\u0000\u0000\u0000\u024a"+ - "\u0248\u0001\u0000\u0000\u0000\u024b\u024c\u0003J%\u0000\u024cU\u0001"+ - "\u0000\u0000\u0000\u024d\u024e\u0005\u0001\u0000\u0000\u024e\u024f\u0005"+ - "~\u0000\u0000\u024f\u0250\u0003L&\u0000\u0250\u0251\u0005\u0002\u0000"+ - "\u0000\u0251\u0254\u0001\u0000\u0000\u0000\u0252\u0254\u0003B!\u0000\u0253"+ - "\u024d\u0001\u0000\u0000\u0000\u0253\u0252\u0001\u0000\u0000\u0000\u0254"+ - "W\u0001\u0000\u0000\u0000\u0255\u0256\u0005\u0001\u0000\u0000\u0256\u0258"+ - "\u0005|\u0000\u0000\u0257\u0259\u0003 \u0010\u0000\u0258\u0257\u0001\u0000"+ - "\u0000\u0000\u0258\u0259\u0001\u0000\u0000\u0000\u0259\u025a\u0001\u0000"+ - "\u0000\u0000\u025a\u025b\u0005\u0001\u0000\u0000\u025b\u025c\u0003$\u0012"+ - "\u0000\u025c\u0260\u0005\u0002\u0000\u0000\u025d\u025f\u0003 \u0010\u0000"+ - "\u025e\u025d\u0001\u0000\u0000\u0000\u025f\u0262\u0001\u0000\u0000\u0000"+ - "\u0260\u025e\u0001\u0000\u0000\u0000\u0260\u0261\u0001\u0000\u0000\u0000"+ - "\u0261\u0263\u0001\u0000\u0000\u0000\u0262\u0260\u0001\u0000\u0000\u0000"+ - "\u0263\u0264\u0005\u0002\u0000\u0000\u0264\u0274\u0001\u0000\u0000\u0000"+ - "\u0265\u0266\u0005\u0001\u0000\u0000\u0266\u0268\u0005|\u0000\u0000\u0267"+ - "\u0269\u0003 \u0010\u0000\u0268\u0267\u0001\u0000\u0000\u0000\u0268\u0269"+ - "\u0001\u0000\u0000\u0000\u0269\u026a\u0001\u0000\u0000\u0000\u026a\u026e"+ - "\u0003V+\u0000\u026b\u026d\u0003 \u0010\u0000\u026c\u026b\u0001\u0000"+ - "\u0000\u0000\u026d\u0270\u0001\u0000\u0000\u0000\u026e\u026c\u0001\u0000"+ - "\u0000\u0000\u026e\u026f\u0001\u0000\u0000\u0000\u026f\u0271\u0001\u0000"+ - "\u0000\u0000\u0270\u026e\u0001\u0000\u0000\u0000\u0271\u0272\u0005\u0002"+ - "\u0000\u0000\u0272\u0274\u0001\u0000\u0000\u0000\u0273\u0255\u0001\u0000"+ - "\u0000\u0000\u0273\u0265\u0001\u0000\u0000\u0000\u0274Y\u0001\u0000\u0000"+ - "\u0000\u0275\u0276\u0005\u0001\u0000\u0000\u0276\u0278\u0005z\u0000\u0000"+ - "\u0277\u0279\u0003\"\u0011\u0000\u0278\u0277\u0001\u0000\u0000\u0000\u0278"+ - "\u0279\u0001\u0000\u0000\u0000\u0279\u027a\u0001\u0000\u0000\u0000\u027a"+ - "\u027b\u0003\\.\u0000\u027b\u027c\u0005\u0002\u0000\u0000\u027c[\u0001"+ - "\u0000\u0000\u0000\u027d\u0290\u0003\u0018\f\u0000\u027e\u027f\u0003l"+ - "6\u0000\u027f\u0280\u0003\u0018\f\u0000\u0280\u0290\u0001\u0000\u0000"+ - "\u0000\u0281\u0282\u0003r9\u0000\u0282\u0283\u0003\\.\u0000\u0283\u0290"+ - "\u0001\u0000\u0000\u0000\u0284\u0285\u0003\u0006\u0003\u0000\u0285\u0286"+ - "\u0005\u0001\u0000\u0000\u0286\u028a\u0005|\u0000\u0000\u0287\u0289\u0003"+ - " \u0010\u0000\u0288\u0287\u0001\u0000\u0000\u0000\u0289\u028c\u0001\u0000"+ - "\u0000\u0000\u028a\u0288\u0001\u0000\u0000\u0000\u028a\u028b\u0001\u0000"+ - "\u0000\u0000\u028b\u028d\u0001\u0000\u0000\u0000\u028c\u028a\u0001\u0000"+ - "\u0000\u0000\u028d\u028e\u0005\u0002\u0000\u0000\u028e\u0290\u0001\u0000"+ - "\u0000\u0000\u028f\u027d\u0001\u0000\u0000\u0000\u028f\u027e\u0001\u0000"+ - "\u0000\u0000\u028f\u0281\u0001\u0000\u0000\u0000\u028f\u0284\u0001\u0000"+ - "\u0000\u0000\u0290]\u0001\u0000\u0000\u0000\u0291\u0292\u0005\u0001\u0000"+ - "\u0000\u0292\u0294\u0005}\u0000\u0000\u0293\u0295\u0003 \u0010\u0000\u0294"+ - "\u0293\u0001\u0000\u0000\u0000\u0294\u0295\u0001\u0000\u0000\u0000\u0295"+ - "\u0296\u0001\u0000\u0000\u0000\u0296\u0297\u0005\u0001\u0000\u0000\u0297"+ - "\u0298\u0003$\u0012\u0000\u0298\u029c\u0005\u0002\u0000\u0000\u0299\u029b"+ - "\u0005\u0006\u0000\u0000\u029a\u0299\u0001\u0000\u0000\u0000\u029b\u029e"+ - "\u0001\u0000\u0000\u0000\u029c\u029a\u0001\u0000\u0000\u0000\u029c\u029d"+ - "\u0001\u0000\u0000\u0000\u029d\u029f\u0001\u0000\u0000\u0000\u029e\u029c"+ - "\u0001\u0000\u0000\u0000\u029f\u02a0\u0005\u0002\u0000\u0000\u02a0\u02b0"+ - "\u0001\u0000\u0000\u0000\u02a1\u02a2\u0005\u0001\u0000\u0000\u02a2\u02a4"+ - "\u0005}\u0000\u0000\u02a3\u02a5\u0003 \u0010\u0000\u02a4\u02a3\u0001\u0000"+ - "\u0000\u0000\u02a4\u02a5\u0001\u0000\u0000\u0000\u02a5\u02a6\u0001\u0000"+ - "\u0000\u0000\u02a6\u02aa\u0003V+\u0000\u02a7\u02a9\u0005\u0006\u0000\u0000"+ - "\u02a8\u02a7\u0001\u0000\u0000\u0000\u02a9\u02ac\u0001\u0000\u0000\u0000"+ - "\u02aa\u02a8\u0001\u0000\u0000\u0000\u02aa\u02ab\u0001\u0000\u0000\u0000"+ - "\u02ab\u02ad\u0001\u0000\u0000\u0000\u02ac\u02aa\u0001\u0000\u0000\u0000"+ - "\u02ad\u02ae\u0005\u0002\u0000\u0000\u02ae\u02b0\u0001\u0000\u0000\u0000"+ - "\u02af\u0291\u0001\u0000\u0000\u0000\u02af\u02a1\u0001\u0000\u0000\u0000"+ - "\u02b0_\u0001\u0000\u0000\u0000\u02b1\u02b2\u0005\u0001\u0000\u0000\u02b2"+ - "\u02b4\u0005{\u0000\u0000\u02b3\u02b5\u0003\"\u0011\u0000\u02b4\u02b3"+ - "\u0001\u0000\u0000\u0000\u02b4\u02b5\u0001\u0000\u0000\u0000\u02b5\u02b6"+ - "\u0001\u0000\u0000\u0000\u02b6\u02b7\u0003b1\u0000\u02b7\u02b8\u0005\u0002"+ - "\u0000\u0000\u02b8a\u0001\u0000\u0000\u0000\u02b9\u02ca\u0003\u001a\r"+ - "\u0000\u02ba\u02bb\u0003l6\u0000\u02bb\u02bc\u0003\u001a\r\u0000\u02bc"+ - "\u02ca\u0001\u0000\u0000\u0000\u02bd\u02be\u0003r9\u0000\u02be\u02bf\u0003"+ - "b1\u0000\u02bf\u02ca\u0001\u0000\u0000\u0000\u02c0\u02c1\u0005\u0001\u0000"+ - "\u0000\u02c1\u02c5\u0005}\u0000\u0000\u02c2\u02c4\u0005\u0006\u0000\u0000"+ - "\u02c3\u02c2\u0001\u0000\u0000\u0000\u02c4\u02c7\u0001\u0000\u0000\u0000"+ - "\u02c5\u02c3\u0001\u0000\u0000\u0000\u02c5\u02c6\u0001\u0000\u0000\u0000"+ - "\u02c6\u02c8\u0001\u0000\u0000\u0000\u02c7\u02c5\u0001\u0000\u0000\u0000"+ - "\u02c8\u02ca\u0005\u0002\u0000\u0000\u02c9\u02b9\u0001\u0000\u0000\u0000"+ - "\u02c9\u02ba\u0001\u0000\u0000\u0000\u02c9\u02bd\u0001\u0000\u0000\u0000"+ - "\u02c9\u02c0\u0001\u0000\u0000\u0000\u02cac\u0001\u0000\u0000\u0000\u02cb"+ - "\u02cc\u0005\u0001\u0000\u0000\u02cc\u02ce\u0005y\u0000\u0000\u02cd\u02cf"+ - "\u0003\"\u0011\u0000\u02ce\u02cd\u0001\u0000\u0000\u0000\u02ce\u02cf\u0001"+ - "\u0000\u0000\u0000\u02cf\u02d0\u0001\u0000\u0000\u0000\u02d0\u02d1\u0003"+ - "f3\u0000\u02d1\u02d2\u0005\u0002\u0000\u0000\u02d2e\u0001\u0000\u0000"+ - "\u0000\u02d3\u02d4\u0003\u000e\u0007\u0000\u02d4\u02d5\u0003L&\u0000\u02d5"+ - "\u02dd\u0001\u0000\u0000\u0000\u02d6\u02d7\u0003l6\u0000\u02d7\u02d8\u0003"+ - "\u000e\u0007\u0000\u02d8\u02dd\u0001\u0000\u0000\u0000\u02d9\u02da\u0003"+ - "r9\u0000\u02da\u02db\u0003f3\u0000\u02db\u02dd\u0001\u0000\u0000\u0000"+ - "\u02dc\u02d3\u0001\u0000\u0000\u0000\u02dc\u02d6\u0001\u0000\u0000\u0000"+ - "\u02dc\u02d9\u0001\u0000\u0000\u0000\u02ddg\u0001\u0000\u0000\u0000\u02de"+ - "\u02df\u0005\u0001\u0000\u0000\u02df\u02e1\u0005s\u0000\u0000\u02e0\u02e2"+ - "\u0003\"\u0011\u0000\u02e1\u02e0\u0001\u0000\u0000\u0000\u02e1\u02e2\u0001"+ - "\u0000\u0000\u0000\u02e2\u02e3\u0001\u0000\u0000\u0000\u02e3\u02e4\u0003"+ - "\u001c\u000e\u0000\u02e4\u02e5\u0005\u0002\u0000\u0000\u02e5\u0307\u0001"+ - "\u0000\u0000\u0000\u02e6\u02e7\u0005\u0001\u0000\u0000\u02e7\u02e9\u0005"+ - "s\u0000\u0000\u02e8\u02ea\u0003\"\u0011\u0000\u02e9\u02e8\u0001\u0000"+ - "\u0000\u0000\u02e9\u02ea\u0001\u0000\u0000\u0000\u02ea\u02eb\u0001\u0000"+ - "\u0000\u0000\u02eb\u02ec\u0003\u0016\u000b\u0000\u02ec\u02ed\u0005\u0002"+ - "\u0000\u0000\u02ed\u0307\u0001\u0000\u0000\u0000\u02ee\u02ef\u0005\u0001"+ - "\u0000\u0000\u02ef\u02f1\u0005z\u0000\u0000\u02f0\u02f2\u0003\"\u0011"+ - "\u0000\u02f1\u02f0\u0001\u0000\u0000\u0000\u02f1\u02f2\u0001\u0000\u0000"+ - "\u0000\u02f2\u02f3\u0001\u0000\u0000\u0000\u02f3\u02f4\u0003\u0018\f\u0000"+ - "\u02f4\u02f5\u0005\u0002\u0000\u0000\u02f5\u0307\u0001\u0000\u0000\u0000"+ - "\u02f6\u02f7\u0005\u0001\u0000\u0000\u02f7\u02f9\u0005{\u0000\u0000\u02f8"+ - "\u02fa\u0003\"\u0011\u0000\u02f9\u02f8\u0001\u0000\u0000\u0000\u02f9\u02fa"+ - "\u0001\u0000\u0000\u0000\u02fa\u02fb\u0001\u0000\u0000\u0000\u02fb\u02fc"+ - "\u0003\u001a\r\u0000\u02fc\u02fd\u0005\u0002\u0000\u0000\u02fd\u0307\u0001"+ - "\u0000\u0000\u0000\u02fe\u02ff\u0005\u0001\u0000\u0000\u02ff\u0301\u0005"+ - "y\u0000\u0000\u0300\u0302\u0003\"\u0011\u0000\u0301\u0300\u0001\u0000"+ - "\u0000\u0000\u0301\u0302\u0001\u0000\u0000\u0000\u0302\u0303\u0001\u0000"+ - "\u0000\u0000\u0303\u0304\u0003\u000e\u0007\u0000\u0304\u0305\u0005\u0002"+ - "\u0000\u0000\u0305\u0307\u0001\u0000\u0000\u0000\u0306\u02de\u0001\u0000"+ - "\u0000\u0000\u0306\u02e6\u0001\u0000\u0000\u0000\u0306\u02ee\u0001\u0000"+ - "\u0000\u0000\u0306\u02f6\u0001\u0000\u0000\u0000\u0306\u02fe\u0001\u0000"+ - "\u0000\u0000\u0307i\u0001\u0000\u0000\u0000\u0308\u0309\u0005\u0001\u0000"+ - "\u0000\u0309\u030a\u0005\u007f\u0000\u0000\u030a\u030b\u0003\u0002\u0001"+ - "\u0000\u030b\u030c\u0003\u0002\u0001\u0000\u030c\u030d\u0003h4\u0000\u030d"+ - "\u030e\u0005\u0002\u0000\u0000\u030ek\u0001\u0000\u0000\u0000\u030f\u0310"+ - "\u0005\u0001\u0000\u0000\u0310\u0311\u0005\u007f\u0000\u0000\u0311\u0312"+ - "\u0003\u0002\u0001\u0000\u0312\u0313\u0003\u0002\u0001\u0000\u0313\u0314"+ - "\u0005\u0002\u0000\u0000\u0314m\u0001\u0000\u0000\u0000\u0315\u0316\u0005"+ - "\u0001\u0000\u0000\u0316\u0317\u0005s\u0000\u0000\u0317\u0318\u0003 \u0010"+ - "\u0000\u0318\u0319\u0005\u0002\u0000\u0000\u0319\u032a\u0001\u0000\u0000"+ - "\u0000\u031a\u031b\u0005\u0001\u0000\u0000\u031b\u031c\u0005z\u0000\u0000"+ - "\u031c\u031d\u0003 \u0010\u0000\u031d\u031e\u0005\u0002\u0000\u0000\u031e"+ - "\u032a\u0001\u0000\u0000\u0000\u031f\u0320\u0005\u0001\u0000\u0000\u0320"+ - "\u0321\u0005{\u0000\u0000\u0321\u0322\u0003 \u0010\u0000\u0322\u0323\u0005"+ - "\u0002\u0000\u0000\u0323\u032a\u0001\u0000\u0000\u0000\u0324\u0325\u0005"+ - "\u0001\u0000\u0000\u0325\u0326\u0005y\u0000\u0000\u0326\u0327\u0003 \u0010"+ - "\u0000\u0327\u0328\u0005\u0002\u0000\u0000\u0328\u032a\u0001\u0000\u0000"+ - "\u0000\u0329\u0315\u0001\u0000\u0000\u0000\u0329\u031a\u0001\u0000\u0000"+ - "\u0000\u0329\u031f\u0001\u0000\u0000\u0000\u0329\u0324\u0001\u0000\u0000"+ - "\u0000\u032ao\u0001\u0000\u0000\u0000\u032b\u032c\u0005\u0001\u0000\u0000"+ - "\u032c\u032d\u0005\u0080\u0000\u0000\u032d\u032e\u0003\u0002\u0001\u0000"+ - "\u032e\u032f\u0003n7\u0000\u032f\u0330\u0005\u0002\u0000\u0000\u0330q"+ + "E\u0002F\u0007F\u0002G\u0007G\u0001\u0000\u0001\u0000\u0001\u0001\u0001"+ + "\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001"+ + "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0003\u0005\u009e\b\u0005\u0001"+ + "\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+ + "\u0007\u0001\u0007\u0003\u0007\u00a8\b\u0007\u0001\b\u0001\b\u0001\b\u0001"+ + "\b\u0001\b\u0001\t\u0001\t\u0001\t\u0005\t\u00b2\b\t\n\t\f\t\u00b5\t\t"+ + "\u0001\t\u0001\t\u0001\t\u0003\t\u00ba\b\t\u0001\t\u0005\t\u00bd\b\t\n"+ + "\t\f\t\u00c0\t\t\u0001\n\u0001\n\u0001\n\u0005\n\u00c5\b\n\n\n\f\n\u00c8"+ + "\t\n\u0001\n\u0005\n\u00cb\b\n\n\n\f\n\u00ce\t\n\u0001\u000b\u0001\u000b"+ + "\u0001\u000b\u0001\f\u0001\f\u0003\f\u00d5\b\f\u0001\f\u0001\f\u0001\r"+ + "\u0001\r\u0003\r\u00db\b\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+ + "\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0011"+ + "\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0003\u0012"+ + "\u00ec\b\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+ + "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0004\u0014\u0102\b\u0014\u000b\u0014"+ + "\f\u0014\u0103\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ + "\u0003\u0014\u0117\b\u0014\u0001\u0014\u0003\u0014\u011a\b\u0014\u0001"+ + "\u0014\u0001\u0014\u0003\u0014\u011e\b\u0014\u0001\u0014\u0003\u0014\u0121"+ + "\b\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0003\u0014\u0135\b\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001"+ + "\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+ + "\u0017\u0001\u0017\u0003\u0017\u0142\b\u0017\u0001\u0018\u0001\u0018\u0001"+ + "\u0018\u0003\u0018\u0147\b\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ + "\u001a\u0001\u001a\u0003\u001a\u014e\b\u001a\u0001\u001a\u0001\u001a\u0001"+ + "\u001a\u0003\u001a\u0153\b\u001a\u0001\u001a\u0003\u001a\u0156\b\u001a"+ + "\u0001\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u015b\b\u001b\n\u001b"+ + "\f\u001b\u015e\t\u001b\u0001\u001b\u0005\u001b\u0161\b\u001b\n\u001b\f"+ + "\u001b\u0164\t\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u0169"+ + "\b\u001b\n\u001b\f\u001b\u016c\t\u001b\u0001\u001b\u0005\u001b\u016f\b"+ + "\u001b\n\u001b\f\u001b\u0172\t\u001b\u0001\u001c\u0001\u001c\u0001\u001c"+ + "\u0005\u001c\u0177\b\u001c\n\u001c\f\u001c\u017a\t\u001c\u0001\u001c\u0005"+ + "\u001c\u017d\b\u001c\n\u001c\f\u001c\u0180\t\u001c\u0001\u001c\u0001\u001c"+ + "\u0001\u001d\u0001\u001d\u0001\u001d\u0005\u001d\u0187\b\u001d\n\u001d"+ + "\f\u001d\u018a\t\u001d\u0001\u001d\u0005\u001d\u018d\b\u001d\n\u001d\f"+ + "\u001d\u0190\t\u001d\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0003"+ + "\u001e\u0196\b\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0003\u001e\u019b"+ + "\b\u001e\u0001\u001e\u0001\u001e\u0003\u001e\u019f\b\u001e\u0001\u001e"+ + "\u0001\u001e\u0001\u001e\u0003\u001e\u01a4\b\u001e\u0001\u001e\u0001\u001e"+ + "\u0003\u001e\u01a8\b\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0003\u001e"+ + "\u01ad\b\u001e\u0001\u001e\u0003\u001e\u01b0\b\u001e\u0001\u001e\u0001"+ + "\u001e\u0003\u001e\u01b4\b\u001e\u0003\u001e\u01b6\b\u001e\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0003\u001f\u01bd\b\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0003\u001f\u01c3\b\u001f"+ + "\u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001!\u0001\"\u0001\"\u0005"+ + "\"\u01ce\b\"\n\"\f\"\u01d1\t\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\""+ + "\u0001\"\u0003\"\u01d9\b\"\u0001\"\u0001\"\u0001\"\u0003\"\u01de\b\"\u0001"+ + "\"\u0001\"\u0001\"\u0003\"\u01e3\b\"\u0001\"\u0001\"\u0005\"\u01e7\b\""+ + "\n\"\f\"\u01ea\t\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+ + "\"\u0001\"\u0003\"\u01f4\b\"\u0003\"\u01f6\b\"\u0001#\u0003#\u01f9\b#"+ + "\u0001#\u0001#\u0001$\u0001$\u0001$\u0005$\u0200\b$\n$\f$\u0203\t$\u0001"+ + "$\u0005$\u0206\b$\n$\f$\u0209\t$\u0001$\u0001$\u0001%\u0001%\u0001%\u0005"+ + "%\u0210\b%\n%\f%\u0213\t%\u0001%\u0005%\u0216\b%\n%\f%\u0219\t%\u0001"+ + "%\u0005%\u021c\b%\n%\f%\u021f\t%\u0001&\u0005&\u0222\b&\n&\f&\u0225\t"+ + "&\u0001&\u0003&\u0228\b&\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0003(\u022f"+ + "\b(\u0001(\u0001(\u0001(\u0001)\u0003)\u0235\b)\u0001)\u0001)\u0001)\u0003"+ + ")\u023a\b)\u0001)\u0001)\u0001)\u0001)\u0001)\u0003)\u0241\b)\u0001*\u0001"+ + "*\u0001*\u0001+\u0001+\u0001+\u0005+\u0249\b+\n+\f+\u024c\t+\u0001+\u0001"+ + "+\u0001+\u0003+\u0251\b+\u0001+\u0005+\u0254\b+\n+\f+\u0257\t+\u0001+"+ + "\u0001+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0003,\u0261\b,\u0001"+ + "-\u0001-\u0001-\u0003-\u0266\b-\u0001-\u0001-\u0001-\u0001-\u0005-\u026c"+ + "\b-\n-\f-\u026f\t-\u0001-\u0001-\u0001-\u0001-\u0001-\u0003-\u0276\b-"+ + "\u0001-\u0001-\u0005-\u027a\b-\n-\f-\u027d\t-\u0001-\u0001-\u0003-\u0281"+ + "\b-\u0001.\u0001.\u0001.\u0003.\u0286\b.\u0001.\u0001.\u0001.\u0001/\u0001"+ + "/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0005"+ + "/\u0296\b/\n/\f/\u0299\t/\u0001/\u0001/\u0003/\u029d\b/\u00010\u00010"+ + "\u00010\u00030\u02a2\b0\u00010\u00010\u00010\u00010\u00050\u02a8\b0\n"+ + "0\f0\u02ab\t0\u00010\u00010\u00010\u00010\u00010\u00030\u02b2\b0\u0001"+ + "0\u00010\u00050\u02b6\b0\n0\f0\u02b9\t0\u00010\u00010\u00030\u02bd\b0"+ + "\u00011\u00011\u00011\u00031\u02c2\b1\u00011\u00011\u00011\u00012\u0001"+ + "2\u00012\u00012\u00012\u00012\u00012\u00012\u00012\u00012\u00052\u02d1"+ + "\b2\n2\f2\u02d4\t2\u00012\u00032\u02d7\b2\u00013\u00013\u00013\u00033"+ + "\u02dc\b3\u00013\u00013\u00013\u00014\u00014\u00014\u00014\u00014\u0001"+ + "4\u00014\u00014\u00014\u00034\u02ea\b4\u00015\u00015\u00015\u00035\u02ef"+ + "\b5\u00015\u00015\u00015\u00015\u00015\u00015\u00035\u02f7\b5\u00015\u0001"+ + "5\u00015\u00015\u00015\u00015\u00035\u02ff\b5\u00015\u00015\u00015\u0001"+ + "5\u00015\u00015\u00035\u0307\b5\u00015\u00015\u00015\u00015\u00015\u0001"+ + "5\u00035\u030f\b5\u00015\u00015\u00015\u00035\u0314\b5\u00016\u00016\u0001"+ + "6\u00016\u00016\u00016\u00016\u00017\u00017\u00017\u00017\u00017\u0001"+ + "7\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ + "8\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ + "8\u00038\u0337\b8\u00019\u00019\u00019\u00019\u00019\u00019\u0001:\u0001"+ + ":\u0001:\u0001:\u0001:\u0001;\u0001;\u0001;\u0003;\u0347\b;\u0001;\u0001"+ + ";\u0001;\u0001<\u0001<\u0001<\u0001<\u0001<\u0001=\u0001=\u0001=\u0001"+ + "=\u0001=\u0001=\u0001=\u0001=\u0001=\u0001=\u0003=\u035b\b=\u0001>\u0001"+ + ">\u0001>\u0003>\u0360\b>\u0001>\u0005>\u0363\b>\n>\f>\u0366\t>\u0001>"+ + "\u0001>\u0001?\u0001?\u0001?\u0001?\u0003?\u036e\b?\u0001?\u0001?\u0005"+ + "?\u0372\b?\n?\f?\u0375\t?\u0001?\u0003?\u0378\b?\u0001@\u0001@\u0001@"+ + "\u0003@\u037d\b@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0003"+ + "@\u0386\b@\u0001@\u0001@\u0001@\u0003@\u038b\b@\u0001A\u0001A\u0001A\u0001"+ + "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+ + "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+ + "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+ + "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+ + "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0003A\u03c1"+ + "\bA\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0003B\u03ca\bB\u0001"+ + "B\u0001B\u0001B\u0003B\u03cf\bB\u0001C\u0001C\u0001C\u0003C\u03d4\bC\u0001"+ + "C\u0005C\u03d7\bC\nC\fC\u03da\tC\u0001C\u0001C\u0001C\u0001C\u0003C\u03e0"+ + "\bC\u0001C\u0001C\u0001C\u0001C\u0001C\u0003C\u03e7\bC\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0003C\u03ee\bC\u0001C\u0003C\u03f1\bC\u0001D\u0001D\u0001"+ + "D\u0001D\u0001D\u0001E\u0005E\u03f9\bE\nE\fE\u03fc\tE\u0001F\u0005F\u03ff"+ + "\bF\nF\fF\u0402\tF\u0001F\u0001F\u0004F\u0406\bF\u000bF\fF\u0407\u0001"+ + "F\u0001F\u0003F\u040c\bF\u0001G\u0001G\u0001G\u0001G\u0005G\u0412\bG\n"+ + "G\fG\u0415\tG\u0001G\u0003G\u0418\bG\u0001G\u0000\u0000H\u0000\u0002\u0004"+ + "\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e \""+ + "$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086"+ + "\u0088\u008a\u008c\u008e\u0000\u0006\u0001\u0000\u0004\u0005\u0001\u0000"+ + "\n\u000b\u0001\u0000uv\u0001\u0000\u0003\u0005\u0002\u0000\u0003\u0003"+ + "\u0094\u0094\u0001\u0000\u0084\u0085\u0489\u0000\u0090\u0001\u0000\u0000"+ + "\u0000\u0002\u0092\u0001\u0000\u0000\u0000\u0004\u0094\u0001\u0000\u0000"+ + "\u0000\u0006\u0096\u0001\u0000\u0000\u0000\b\u0098\u0001\u0000\u0000\u0000"+ + "\n\u009d\u0001\u0000\u0000\u0000\f\u009f\u0001\u0000\u0000\u0000\u000e"+ + "\u00a7\u0001\u0000\u0000\u0000\u0010\u00a9\u0001\u0000\u0000\u0000\u0012"+ + "\u00be\u0001\u0000\u0000\u0000\u0014\u00cc\u0001\u0000\u0000\u0000\u0016"+ + "\u00cf\u0001\u0000\u0000\u0000\u0018\u00d2\u0001\u0000\u0000\u0000\u001a"+ + "\u00d8\u0001\u0000\u0000\u0000\u001c\u00dc\u0001\u0000\u0000\u0000\u001e"+ + "\u00e1\u0001\u0000\u0000\u0000 \u00e3\u0001\u0000\u0000\u0000\"\u00e5"+ + "\u0001\u0000\u0000\u0000$\u00eb\u0001\u0000\u0000\u0000&\u00ed\u0001\u0000"+ + "\u0000\u0000(\u0134\u0001\u0000\u0000\u0000*\u0136\u0001\u0000\u0000\u0000"+ + ",\u0139\u0001\u0000\u0000\u0000.\u013c\u0001\u0000\u0000\u00000\u0143"+ + "\u0001\u0000\u0000\u00002\u0148\u0001\u0000\u0000\u00004\u0155\u0001\u0000"+ + "\u0000\u00006\u0162\u0001\u0000\u0000\u00008\u017e\u0001\u0000\u0000\u0000"+ + ":\u018e\u0001\u0000\u0000\u0000<\u01b5\u0001\u0000\u0000\u0000>\u01c2"+ + "\u0001\u0000\u0000\u0000@\u01c4\u0001\u0000\u0000\u0000B\u01c7\u0001\u0000"+ + "\u0000\u0000D\u01f5\u0001\u0000\u0000\u0000F\u01f8\u0001\u0000\u0000\u0000"+ + "H\u0207\u0001\u0000\u0000\u0000J\u0217\u0001\u0000\u0000\u0000L\u0223"+ + "\u0001\u0000\u0000\u0000N\u0229\u0001\u0000\u0000\u0000P\u022b\u0001\u0000"+ + "\u0000\u0000R\u0240\u0001\u0000\u0000\u0000T\u0242\u0001\u0000\u0000\u0000"+ + "V\u0255\u0001\u0000\u0000\u0000X\u0260\u0001\u0000\u0000\u0000Z\u0280"+ + "\u0001\u0000\u0000\u0000\\\u0282\u0001\u0000\u0000\u0000^\u029c\u0001"+ + "\u0000\u0000\u0000`\u02bc\u0001\u0000\u0000\u0000b\u02be\u0001\u0000\u0000"+ + "\u0000d\u02d6\u0001\u0000\u0000\u0000f\u02d8\u0001\u0000\u0000\u0000h"+ + "\u02e9\u0001\u0000\u0000\u0000j\u0313\u0001\u0000\u0000\u0000l\u0315\u0001"+ + "\u0000\u0000\u0000n\u031c\u0001\u0000\u0000\u0000p\u0336\u0001\u0000\u0000"+ + "\u0000r\u0338\u0001\u0000\u0000\u0000t\u033e\u0001\u0000\u0000\u0000v"+ + "\u0343\u0001\u0000\u0000\u0000x\u034b\u0001\u0000\u0000\u0000z\u035a\u0001"+ + "\u0000\u0000\u0000|\u035c\u0001\u0000\u0000\u0000~\u0377\u0001\u0000\u0000"+ + "\u0000\u0080\u038a\u0001\u0000\u0000\u0000\u0082\u03c0\u0001\u0000\u0000"+ + "\u0000\u0084\u03ce\u0001\u0000\u0000\u0000\u0086\u03f0\u0001\u0000\u0000"+ + "\u0000\u0088\u03f2\u0001\u0000\u0000\u0000\u008a\u03fa\u0001\u0000\u0000"+ + "\u0000\u008c\u040b\u0001\u0000\u0000\u0000\u008e\u0417\u0001\u0000\u0000"+ + "\u0000\u0090\u0091\u0007\u0000\u0000\u0000\u0091\u0001\u0001\u0000\u0000"+ + "\u0000\u0092\u0093\u0005\u0006\u0000\u0000\u0093\u0003\u0001\u0000\u0000"+ + "\u0000\u0094\u0095\u0005\u0007\u0000\u0000\u0095\u0005\u0001\u0000\u0000"+ + "\u0000\u0096\u0097\u0007\u0001\u0000\u0000\u0097\u0007\u0001\u0000\u0000"+ + "\u0000\u0098\u0099\u0005\u0095\u0000\u0000\u0099\t\u0001\u0000\u0000\u0000"+ + "\u009a\u009e\u0003\u0004\u0002\u0000\u009b\u009e\u0003\b\u0004\u0000\u009c"+ + "\u009e\u0003\u0006\u0003\u0000\u009d\u009a\u0001\u0000\u0000\u0000\u009d"+ + "\u009b\u0001\u0000\u0000\u0000\u009d\u009c\u0001\u0000\u0000\u0000\u009e"+ + "\u000b\u0001\u0000\u0000\u0000\u009f\u00a0\u0007\u0002\u0000\u0000\u00a0"+ + "\r\u0001\u0000\u0000\u0000\u00a1\u00a8\u0003\n\u0005\u0000\u00a2\u00a3"+ + "\u0005\u0001\u0000\u0000\u00a3\u00a4\u0005\f\u0000\u0000\u00a4\u00a5\u0003"+ + "\n\u0005\u0000\u00a5\u00a6\u0005\u0002\u0000\u0000\u00a6\u00a8\u0001\u0000"+ + "\u0000\u0000\u00a7\u00a1\u0001\u0000\u0000\u0000\u00a7\u00a2\u0001\u0000"+ + "\u0000\u0000\u00a8\u000f\u0001\u0000\u0000\u0000\u00a9\u00aa\u0005\u0001"+ + "\u0000\u0000\u00aa\u00ab\u0005u\u0000\u0000\u00ab\u00ac\u0003\u0016\u000b"+ + "\u0000\u00ac\u00ad\u0005\u0002\u0000\u0000\u00ad\u0011\u0001\u0000\u0000"+ + "\u0000\u00ae\u00af\u0005\u0001\u0000\u0000\u00af\u00b9\u0005x\u0000\u0000"+ + "\u00b0\u00b2\u0003\n\u0005\u0000\u00b1\u00b0\u0001\u0000\u0000\u0000\u00b2"+ + "\u00b5\u0001\u0000\u0000\u0000\u00b3\u00b1\u0001\u0000\u0000\u0000\u00b3"+ + "\u00b4\u0001\u0000\u0000\u0000\u00b4\u00ba\u0001\u0000\u0000\u0000\u00b5"+ + "\u00b3\u0001\u0000\u0000\u0000\u00b6\u00b7\u0003\"\u0011\u0000\u00b7\u00b8"+ + "\u0003\n\u0005\u0000\u00b8\u00ba\u0001\u0000\u0000\u0000\u00b9\u00b3\u0001"+ + "\u0000\u0000\u0000\u00b9\u00b6\u0001\u0000\u0000\u0000\u00ba\u00bb\u0001"+ + "\u0000\u0000\u0000\u00bb\u00bd\u0005\u0002\u0000\u0000\u00bc\u00ae\u0001"+ + "\u0000\u0000\u0000\u00bd\u00c0\u0001\u0000\u0000\u0000\u00be\u00bc\u0001"+ + "\u0000\u0000\u0000\u00be\u00bf\u0001\u0000\u0000\u0000\u00bf\u0013\u0001"+ + "\u0000\u0000\u0000\u00c0\u00be\u0001\u0000\u0000\u0000\u00c1\u00c2\u0005"+ + "\u0001\u0000\u0000\u00c2\u00c6\u0005y\u0000\u0000\u00c3\u00c5\u0003\n"+ + "\u0005\u0000\u00c4\u00c3\u0001\u0000\u0000\u0000\u00c5\u00c8\u0001\u0000"+ + "\u0000\u0000\u00c6\u00c4\u0001\u0000\u0000\u0000\u00c6\u00c7\u0001\u0000"+ + "\u0000\u0000\u00c7\u00c9\u0001\u0000\u0000\u0000\u00c8\u00c6\u0001\u0000"+ + "\u0000\u0000\u00c9\u00cb\u0005\u0002\u0000\u0000\u00ca\u00c1\u0001\u0000"+ + "\u0000\u0000\u00cb\u00ce\u0001\u0000\u0000\u0000\u00cc\u00ca\u0001\u0000"+ + "\u0000\u0000\u00cc\u00cd\u0001\u0000\u0000\u0000\u00cd\u0015\u0001\u0000"+ + "\u0000\u0000\u00ce\u00cc\u0001\u0000\u0000\u0000\u00cf\u00d0\u0003\u0012"+ + "\t\u0000\u00d0\u00d1\u0003\u0014\n\u0000\u00d1\u0017\u0001\u0000\u0000"+ + "\u0000\u00d2\u00d4\u0005\u0003\u0000\u0000\u00d3\u00d5\u0005\u0003\u0000"+ + "\u0000\u00d4\u00d3\u0001\u0000\u0000\u0000\u00d4\u00d5\u0001\u0000\u0000"+ + "\u0000\u00d5\u00d6\u0001\u0000\u0000\u0000\u00d6\u00d7\u0003\u0006\u0003"+ + "\u0000\u00d7\u0019\u0001\u0000\u0000\u0000\u00d8\u00da\u0005\u0003\u0000"+ + "\u0000\u00d9\u00db\u0005\u0003\u0000\u0000\u00da\u00d9\u0001\u0000\u0000"+ + "\u0000\u00da\u00db\u0001\u0000\u0000\u0000\u00db\u001b\u0001\u0000\u0000"+ + "\u0000\u00dc\u00dd\u0005\u0001\u0000\u0000\u00dd\u00de\u0005t\u0000\u0000"+ + "\u00de\u00df\u0003 \u0010\u0000\u00df\u00e0\u0005\u0002\u0000\u0000\u00e0"+ + "\u001d\u0001\u0000\u0000\u0000\u00e1\u00e2\u0007\u0003\u0000\u0000\u00e2"+ + "\u001f\u0001\u0000\u0000\u0000\u00e3\u00e4\u0007\u0004\u0000\u0000\u00e4"+ + "!\u0001\u0000\u0000\u0000\u00e5\u00e6\u0005\u0094\u0000\u0000\u00e6#\u0001"+ + "\u0000\u0000\u0000\u00e7\u00ec\u0003(\u0014\u0000\u00e8\u00ec\u0003<\u001e"+ + "\u0000\u00e9\u00ec\u0003B!\u0000\u00ea\u00ec\u0003&\u0013\u0000\u00eb"+ + "\u00e7\u0001\u0000\u0000\u0000\u00eb\u00e8\u0001\u0000\u0000\u0000\u00eb"+ + "\u00e9\u0001\u0000\u0000\u0000\u00eb\u00ea\u0001\u0000\u0000\u0000\u00ec"+ + "%\u0001\u0000\u0000\u0000\u00ed\u00ee\u0005\u0015\u0000\u0000\u00ee\u00ef"+ + "\u0005\u0001\u0000\u0000\u00ef\u00f0\u0003L&\u0000\u00f0\u00f1\u0005\u0016"+ + "\u0000\u0000\u00f1\u00f2\u0003L&\u0000\u00f2\u00f3\u0005\u0016\u0000\u0000"+ + "\u00f3\u00f4\u0003L&\u0000\u00f4\u00f5\u0005\u0002\u0000\u0000\u00f5\u00f6"+ + "\u0003L&\u0000\u00f6\'\u0001\u0000\u0000\u0000\u00f7\u0135\u0005\u0011"+ + "\u0000\u0000\u00f8\u0135\u0005\r\u0000\u0000\u00f9\u0135\u0005\u0012\u0000"+ + "\u0000\u00fa\u0135\u00032\u0019\u0000\u00fb\u00fc\u0005\u0018\u0000\u0000"+ + "\u00fc\u0135\u0003 \u0010\u0000\u00fd\u00fe\u0005\u0019\u0000\u0000\u00fe"+ + "\u0135\u0003 \u0010\u0000\u00ff\u0101\u0005\u001a\u0000\u0000\u0100\u0102"+ + "\u0003 \u0010\u0000\u0101\u0100\u0001\u0000\u0000\u0000\u0102\u0103\u0001"+ + "\u0000\u0000\u0000\u0103\u0101\u0001\u0000\u0000\u0000\u0103\u0104\u0001"+ + "\u0000\u0000\u0000\u0104\u0135\u0001\u0000\u0000\u0000\u0105\u0135\u0005"+ + "\u001b\u0000\u0000\u0106\u0107\u0005 \u0000\u0000\u0107\u0135\u0003 \u0010"+ + "\u0000\u0108\u0109\u0005\"\u0000\u0000\u0109\u0135\u0003 \u0010\u0000"+ + "\u010a\u010b\u0005$\u0000\u0000\u010b\u0135\u0003 \u0010\u0000\u010c\u010d"+ + "\u0005%\u0000\u0000\u010d\u0135\u0003 \u0010\u0000\u010e\u010f\u0005&"+ + "\u0000\u0000\u010f\u0135\u0003 \u0010\u0000\u0110\u0111\u0005\'\u0000"+ + "\u0000\u0111\u0135\u0003 \u0010\u0000\u0112\u0113\u0005(\u0000\u0000\u0113"+ + "\u0135\u0003 \u0010\u0000\u0114\u0116\u0003.\u0017\u0000\u0115\u0117\u0003"+ + "*\u0015\u0000\u0116\u0115\u0001\u0000\u0000\u0000\u0116\u0117\u0001\u0000"+ + "\u0000\u0000\u0117\u0119\u0001\u0000\u0000\u0000\u0118\u011a\u0003,\u0016"+ + "\u0000\u0119\u0118\u0001\u0000\u0000\u0000\u0119\u011a\u0001\u0000\u0000"+ + "\u0000\u011a\u0135\u0001\u0000\u0000\u0000\u011b\u011d\u00030\u0018\u0000"+ + "\u011c\u011e\u0003*\u0015\u0000\u011d\u011c\u0001\u0000\u0000\u0000\u011d"+ + "\u011e\u0001\u0000\u0000\u0000\u011e\u0120\u0001\u0000\u0000\u0000\u011f"+ + "\u0121\u0003,\u0016\u0000\u0120\u011f\u0001\u0000\u0000\u0000\u0120\u0121"+ + "\u0001\u0000\u0000\u0000\u0121\u0135\u0001\u0000\u0000\u0000\u0122\u0135"+ + "\u0005j\u0000\u0000\u0123\u0135\u0005k\u0000\u0000\u0124\u0135\u0005l"+ + "\u0000\u0000\u0125\u0135\u0005m\u0000\u0000\u0126\u0127\u0005n\u0000\u0000"+ + "\u0127\u0135\u0003 \u0010\u0000\u0128\u0129\u0005\b\u0000\u0000\u0129"+ + "\u0135\u0003\u001e\u000f\u0000\u012a\u0135\u0005\t\u0000\u0000\u012b\u0135"+ + "\u0005\u000e\u0000\u0000\u012c\u0135\u0005\u000f\u0000\u0000\u012d\u0135"+ + "\u0005\u0010\u0000\u0000\u012e\u0135\u0005o\u0000\u0000\u012f\u0135\u0005"+ + "p\u0000\u0000\u0130\u0135\u0005q\u0000\u0000\u0131\u0135\u0005r\u0000"+ + "\u0000\u0132\u0135\u0005s\u0000\u0000\u0133\u0135\u00034\u001a\u0000\u0134"+ + "\u00f7\u0001\u0000\u0000\u0000\u0134\u00f8\u0001\u0000\u0000\u0000\u0134"+ + "\u00f9\u0001\u0000\u0000\u0000\u0134\u00fa\u0001\u0000\u0000\u0000\u0134"+ + "\u00fb\u0001\u0000\u0000\u0000\u0134\u00fd\u0001\u0000\u0000\u0000\u0134"+ + "\u00ff\u0001\u0000\u0000\u0000\u0134\u0105\u0001\u0000\u0000\u0000\u0134"+ + "\u0106\u0001\u0000\u0000\u0000\u0134\u0108\u0001\u0000\u0000\u0000\u0134"+ + "\u010a\u0001\u0000\u0000\u0000\u0134\u010c\u0001\u0000\u0000\u0000\u0134"+ + "\u010e\u0001\u0000\u0000\u0000\u0134\u0110\u0001\u0000\u0000\u0000\u0134"+ + "\u0112\u0001\u0000\u0000\u0000\u0134\u0114\u0001\u0000\u0000\u0000\u0134"+ + "\u011b\u0001\u0000\u0000\u0000\u0134\u0122\u0001\u0000\u0000\u0000\u0134"+ + "\u0123\u0001\u0000\u0000\u0000\u0134\u0124\u0001\u0000\u0000\u0000\u0134"+ + "\u0125\u0001\u0000\u0000\u0000\u0134\u0126\u0001\u0000\u0000\u0000\u0134"+ + "\u0128\u0001\u0000\u0000\u0000\u0134\u012a\u0001\u0000\u0000\u0000\u0134"+ + "\u012b\u0001\u0000\u0000\u0000\u0134\u012c\u0001\u0000\u0000\u0000\u0134"+ + "\u012d\u0001\u0000\u0000\u0000\u0134\u012e\u0001\u0000\u0000\u0000\u0134"+ + "\u012f\u0001\u0000\u0000\u0000\u0134\u0130\u0001\u0000\u0000\u0000\u0134"+ + "\u0131\u0001\u0000\u0000\u0000\u0134\u0132\u0001\u0000\u0000\u0000\u0134"+ + "\u0133\u0001\u0000\u0000\u0000\u0135)\u0001\u0000\u0000\u0000\u0136\u0137"+ + "\u0005,\u0000\u0000\u0137\u0138\u0005\u0003\u0000\u0000\u0138+\u0001\u0000"+ + "\u0000\u0000\u0139\u013a\u0005-\u0000\u0000\u013a\u013b\u0005\u0003\u0000"+ + "\u0000\u013b-\u0001\u0000\u0000\u0000\u013c\u013d\u0003\u0004\u0002\u0000"+ + "\u013d\u0141\u0005)\u0000\u0000\u013e\u013f\u0005/\u0000\u0000\u013f\u0140"+ + "\u0005+\u0000\u0000\u0140\u0142\u0005.\u0000\u0000\u0141\u013e\u0001\u0000"+ + "\u0000\u0000\u0141\u0142\u0001\u0000\u0000\u0000\u0142/\u0001\u0000\u0000"+ + "\u0000\u0143\u0144\u0003\u0004\u0002\u0000\u0144\u0146\u0005*\u0000\u0000"+ + "\u0145\u0147\u0005/\u0000\u0000\u0146\u0145\u0001\u0000\u0000\u0000\u0146"+ + "\u0147\u0001\u0000\u0000\u0000\u01471\u0001\u0000\u0000\u0000\u0148\u0149"+ + "\u0003\u0004\u0002\u0000\u0149\u014a\u0005\u001f\u0000\u0000\u014a3\u0001"+ + "\u0000\u0000\u0000\u014b\u014d\u0005!\u0000\u0000\u014c\u014e\u0003 \u0010"+ + "\u0000\u014d\u014c\u0001\u0000\u0000\u0000\u014d\u014e\u0001\u0000\u0000"+ + "\u0000\u014e\u014f\u0001\u0000\u0000\u0000\u014f\u0156\u0003\u001c\u000e"+ + "\u0000\u0150\u0152\u0005#\u0000\u0000\u0151\u0153\u0003 \u0010\u0000\u0152"+ + "\u0151\u0001\u0000\u0000\u0000\u0152\u0153\u0001\u0000\u0000\u0000\u0153"+ + "\u0154\u0001\u0000\u0000\u0000\u0154\u0156\u0003\u001c\u000e\u0000\u0155"+ + "\u014b\u0001\u0000\u0000\u0000\u0155\u0150\u0001\u0000\u0000\u0000\u0156"+ + "5\u0001\u0000\u0000\u0000\u0157\u0158\u0005\u0001\u0000\u0000\u0158\u015c"+ + "\u0005x\u0000\u0000\u0159\u015b\u0003\n\u0005\u0000\u015a\u0159\u0001"+ + "\u0000\u0000\u0000\u015b\u015e\u0001\u0000\u0000\u0000\u015c\u015a\u0001"+ + "\u0000\u0000\u0000\u015c\u015d\u0001\u0000\u0000\u0000\u015d\u015f\u0001"+ + "\u0000\u0000\u0000\u015e\u015c\u0001\u0000\u0000\u0000\u015f\u0161\u0005"+ + "\u0002\u0000\u0000\u0160\u0157\u0001\u0000\u0000\u0000\u0161\u0164\u0001"+ + "\u0000\u0000\u0000\u0162\u0160\u0001\u0000\u0000\u0000\u0162\u0163\u0001"+ + "\u0000\u0000\u0000\u0163\u0170\u0001\u0000\u0000\u0000\u0164\u0162\u0001"+ + "\u0000\u0000\u0000\u0165\u0166\u0005\u0001\u0000\u0000\u0166\u016a\u0005"+ + "y\u0000\u0000\u0167\u0169\u0003\n\u0005\u0000\u0168\u0167\u0001\u0000"+ + "\u0000\u0000\u0169\u016c\u0001\u0000\u0000\u0000\u016a\u0168\u0001\u0000"+ + "\u0000\u0000\u016a\u016b\u0001\u0000\u0000\u0000\u016b\u016d\u0001\u0000"+ + "\u0000\u0000\u016c\u016a\u0001\u0000\u0000\u0000\u016d\u016f\u0005\u0002"+ + "\u0000\u0000\u016e\u0165\u0001\u0000\u0000\u0000\u016f\u0172\u0001\u0000"+ + "\u0000\u0000\u0170\u016e\u0001\u0000\u0000\u0000\u0170\u0171\u0001\u0000"+ + "\u0000\u0000\u01717\u0001\u0000\u0000\u0000\u0172\u0170\u0001\u0000\u0000"+ + "\u0000\u0173\u0174\u0005\u0001\u0000\u0000\u0174\u0178\u0005x\u0000\u0000"+ + "\u0175\u0177\u0003\n\u0005\u0000\u0176\u0175\u0001\u0000\u0000\u0000\u0177"+ + "\u017a\u0001\u0000\u0000\u0000\u0178\u0176\u0001\u0000\u0000\u0000\u0178"+ + "\u0179\u0001\u0000\u0000\u0000\u0179\u017b\u0001\u0000\u0000\u0000\u017a"+ + "\u0178\u0001\u0000\u0000\u0000\u017b\u017d\u0005\u0002\u0000\u0000\u017c"+ + "\u0173\u0001\u0000\u0000\u0000\u017d\u0180\u0001\u0000\u0000\u0000\u017e"+ + "\u017c\u0001\u0000\u0000\u0000\u017e\u017f\u0001\u0000\u0000\u0000\u017f"+ + "\u0181\u0001\u0000\u0000\u0000\u0180\u017e\u0001\u0000\u0000\u0000\u0181"+ + "\u0182\u0003:\u001d\u0000\u01829\u0001\u0000\u0000\u0000\u0183\u0184\u0005"+ + "\u0001\u0000\u0000\u0184\u0188\u0005y\u0000\u0000\u0185\u0187\u0003\n"+ + "\u0005\u0000\u0186\u0185\u0001\u0000\u0000\u0000\u0187\u018a\u0001\u0000"+ + "\u0000\u0000\u0188\u0186\u0001\u0000\u0000\u0000\u0188\u0189\u0001\u0000"+ + "\u0000\u0000\u0189\u018b\u0001\u0000\u0000\u0000\u018a\u0188\u0001\u0000"+ + "\u0000\u0000\u018b\u018d\u0005\u0002\u0000\u0000\u018c\u0183\u0001\u0000"+ + "\u0000\u0000\u018d\u0190\u0001\u0000\u0000\u0000\u018e\u018c\u0001\u0000"+ + "\u0000\u0000\u018e\u018f\u0001\u0000\u0000\u0000\u018f\u0191\u0001\u0000"+ + "\u0000\u0000\u0190\u018e\u0001\u0000\u0000\u0000\u0191\u0192\u0003$\u0012"+ + "\u0000\u0192;\u0001\u0000\u0000\u0000\u0193\u0195\u0005\u0013\u0000\u0000"+ + "\u0194\u0196\u0003\"\u0011\u0000\u0195\u0194\u0001\u0000\u0000\u0000\u0195"+ + "\u0196\u0001\u0000\u0000\u0000\u0196\u0197\u0001\u0000\u0000\u0000\u0197"+ + "\u0198\u0003@ \u0000\u0198\u019a\u0005\u0017\u0000\u0000\u0199\u019b\u0003"+ + "\"\u0011\u0000\u019a\u0199\u0001\u0000\u0000\u0000\u019a\u019b\u0001\u0000"+ + "\u0000\u0000\u019b\u01b6\u0001\u0000\u0000\u0000\u019c\u019e\u0005\u0014"+ + "\u0000\u0000\u019d\u019f\u0003\"\u0011\u0000\u019e\u019d\u0001\u0000\u0000"+ + "\u0000\u019e\u019f\u0001\u0000\u0000\u0000\u019f\u01a0\u0001\u0000\u0000"+ + "\u0000\u01a0\u01a1\u0003@ \u0000\u01a1\u01a3\u0005\u0017\u0000\u0000\u01a2"+ + "\u01a4\u0003\"\u0011\u0000\u01a3\u01a2\u0001\u0000\u0000\u0000\u01a3\u01a4"+ + "\u0001\u0000\u0000\u0000\u01a4\u01b6\u0001\u0000\u0000\u0000\u01a5\u01a7"+ + "\u0005\u001c\u0000\u0000\u01a6\u01a8\u0003\"\u0011\u0000\u01a7\u01a6\u0001"+ + "\u0000\u0000\u0000\u01a7\u01a8\u0001\u0000\u0000\u0000\u01a8\u01a9\u0001"+ + "\u0000\u0000\u0000\u01a9\u01af\u0003@ \u0000\u01aa\u01ac\u0005\u001e\u0000"+ + "\u0000\u01ab\u01ad\u0003\"\u0011\u0000\u01ac\u01ab\u0001\u0000\u0000\u0000"+ + "\u01ac\u01ad\u0001\u0000\u0000\u0000\u01ad\u01ae\u0001\u0000\u0000\u0000"+ + "\u01ae\u01b0\u0003L&\u0000\u01af\u01aa\u0001\u0000\u0000\u0000\u01af\u01b0"+ + "\u0001\u0000\u0000\u0000\u01b0\u01b1\u0001\u0000\u0000\u0000\u01b1\u01b3"+ + "\u0005\u0017\u0000\u0000\u01b2\u01b4\u0003\"\u0011\u0000\u01b3\u01b2\u0001"+ + "\u0000\u0000\u0000\u01b3\u01b4\u0001\u0000\u0000\u0000\u01b4\u01b6\u0001"+ + "\u0000\u0000\u0000\u01b5\u0193\u0001\u0000\u0000\u0000\u01b5\u019c\u0001"+ + "\u0000\u0000\u0000\u01b5\u01a5\u0001\u0000\u0000\u0000\u01b6=\u0001\u0000"+ + "\u0000\u0000\u01b7\u01b8\u0005\u0001\u0000\u0000\u01b8\u01b9\u0005y\u0000"+ + "\u0000\u01b9\u01ba\u0003\n\u0005\u0000\u01ba\u01bb\u0005\u0002\u0000\u0000"+ + "\u01bb\u01bd\u0001\u0000\u0000\u0000\u01bc\u01b7\u0001\u0000\u0000\u0000"+ + "\u01bc\u01bd\u0001\u0000\u0000\u0000\u01bd\u01c3\u0001\u0000\u0000\u0000"+ + "\u01be\u01bf\u0003\u001c\u000e\u0000\u01bf\u01c0\u0003\u0016\u000b\u0000"+ + "\u01c0\u01c3\u0001\u0000\u0000\u0000\u01c1\u01c3\u0003\u0016\u000b\u0000"+ + "\u01c2\u01bc\u0001\u0000\u0000\u0000\u01c2\u01be\u0001\u0000\u0000\u0000"+ + "\u01c2\u01c1\u0001\u0000\u0000\u0000\u01c3?\u0001\u0000\u0000\u0000\u01c4"+ + "\u01c5\u0003>\u001f\u0000\u01c5\u01c6\u0003L&\u0000\u01c6A\u0001\u0000"+ + "\u0000\u0000\u01c7\u01c8\u0005\u0001\u0000\u0000\u01c8\u01c9\u0003D\""+ + "\u0000\u01c9\u01ca\u0005\u0002\u0000\u0000\u01caC\u0001\u0000\u0000\u0000"+ + "\u01cb\u01cf\u0003(\u0014\u0000\u01cc\u01ce\u0003D\"\u0000\u01cd\u01cc"+ + "\u0001\u0000\u0000\u0000\u01ce\u01d1\u0001\u0000\u0000\u0000\u01cf\u01cd"+ + "\u0001\u0000\u0000\u0000\u01cf\u01d0\u0001\u0000\u0000\u0000\u01d0\u01f6"+ + "\u0001\u0000\u0000\u0000\u01d1\u01cf\u0001\u0000\u0000\u0000\u01d2\u01d3"+ + "\u0005!\u0000\u0000\u01d3\u01f6\u0003F#\u0000\u01d4\u01d5\u0005#\u0000"+ + "\u0000\u01d5\u01f6\u0003F#\u0000\u01d6\u01d8\u0005\u0013\u0000\u0000\u01d7"+ + "\u01d9\u0003\"\u0011\u0000\u01d8\u01d7\u0001\u0000\u0000\u0000\u01d8\u01d9"+ + "\u0001\u0000\u0000\u0000\u01d9\u01da\u0001\u0000\u0000\u0000\u01da\u01f6"+ + "\u0003@ \u0000\u01db\u01dd\u0005\u0014\u0000\u0000\u01dc\u01de\u0003\""+ + "\u0011\u0000\u01dd\u01dc\u0001\u0000\u0000\u0000\u01dd\u01de\u0001\u0000"+ + "\u0000\u0000\u01de\u01df\u0001\u0000\u0000\u0000\u01df\u01f6\u0003@ \u0000"+ + "\u01e0\u01e2\u0005\u001c\u0000\u0000\u01e1\u01e3\u0003\"\u0011\u0000\u01e2"+ + "\u01e1\u0001\u0000\u0000\u0000\u01e2\u01e3\u0001\u0000\u0000\u0000\u01e3"+ + "\u01e4\u0001\u0000\u0000\u0000\u01e4\u01e8\u0003>\u001f\u0000\u01e5\u01e7"+ + "\u0003B!\u0000\u01e6\u01e5\u0001\u0000\u0000\u0000\u01e7\u01ea\u0001\u0000"+ + "\u0000\u0000\u01e8\u01e6\u0001\u0000\u0000\u0000\u01e8\u01e9\u0001\u0000"+ + "\u0000\u0000\u01e9\u01eb\u0001\u0000\u0000\u0000\u01ea\u01e8\u0001\u0000"+ + "\u0000\u0000\u01eb\u01ec\u0005\u0001\u0000\u0000\u01ec\u01ed\u0005\u001d"+ + "\u0000\u0000\u01ed\u01f3\u0003L&\u0000\u01ee\u01ef\u0005\u0001\u0000\u0000"+ + "\u01ef\u01f0\u0005\u001e\u0000\u0000\u01f0\u01f1\u0003L&\u0000\u01f1\u01f2"+ + "\u0005\u0002\u0000\u0000\u01f2\u01f4\u0001\u0000\u0000\u0000\u01f3\u01ee"+ + "\u0001\u0000\u0000\u0000\u01f3\u01f4\u0001\u0000\u0000\u0000\u01f4\u01f6"+ + "\u0001\u0000\u0000\u0000\u01f5\u01cb\u0001\u0000\u0000\u0000\u01f5\u01d2"+ + "\u0001\u0000\u0000\u0000\u01f5\u01d4\u0001\u0000\u0000\u0000\u01f5\u01d6"+ + "\u0001\u0000\u0000\u0000\u01f5\u01db\u0001\u0000\u0000\u0000\u01f5\u01e0"+ + "\u0001\u0000\u0000\u0000\u01f6E\u0001\u0000\u0000\u0000\u01f7\u01f9\u0003"+ + "\u001c\u000e\u0000\u01f8\u01f7\u0001\u0000\u0000\u0000\u01f8\u01f9\u0001"+ + "\u0000\u0000\u0000\u01f9\u01fa\u0001\u0000\u0000\u0000\u01fa\u01fb\u0003"+ + "H$\u0000\u01fbG\u0001\u0000\u0000\u0000\u01fc\u01fd\u0005\u0001\u0000"+ + "\u0000\u01fd\u0201\u0005x\u0000\u0000\u01fe\u0200\u0003\n\u0005\u0000"+ + "\u01ff\u01fe\u0001\u0000\u0000\u0000\u0200\u0203\u0001\u0000\u0000\u0000"+ + "\u0201\u01ff\u0001\u0000\u0000\u0000\u0201\u0202\u0001\u0000\u0000\u0000"+ + "\u0202\u0204\u0001\u0000\u0000\u0000\u0203\u0201\u0001\u0000\u0000\u0000"+ + "\u0204\u0206\u0005\u0002\u0000\u0000\u0205\u01fc\u0001\u0000\u0000\u0000"+ + "\u0206\u0209\u0001\u0000\u0000\u0000\u0207\u0205\u0001\u0000\u0000\u0000"+ + "\u0207\u0208\u0001\u0000\u0000\u0000\u0208\u020a\u0001\u0000\u0000\u0000"+ + "\u0209\u0207\u0001\u0000\u0000\u0000\u020a\u020b\u0003J%\u0000\u020bI"+ + "\u0001\u0000\u0000\u0000\u020c\u020d\u0005\u0001\u0000\u0000\u020d\u0211"+ + "\u0005y\u0000\u0000\u020e\u0210\u0003\n\u0005\u0000\u020f\u020e\u0001"+ + "\u0000\u0000\u0000\u0210\u0213\u0001\u0000\u0000\u0000\u0211\u020f\u0001"+ + "\u0000\u0000\u0000\u0211\u0212\u0001\u0000\u0000\u0000\u0212\u0214\u0001"+ + "\u0000\u0000\u0000\u0213\u0211\u0001\u0000\u0000\u0000\u0214\u0216\u0005"+ + "\u0002\u0000\u0000\u0215\u020c\u0001\u0000\u0000\u0000\u0216\u0219\u0001"+ + "\u0000\u0000\u0000\u0217\u0215\u0001\u0000\u0000\u0000\u0217\u0218\u0001"+ + "\u0000\u0000\u0000\u0218\u021d\u0001\u0000\u0000\u0000\u0219\u0217\u0001"+ + "\u0000\u0000\u0000\u021a\u021c\u0003D\"\u0000\u021b\u021a\u0001\u0000"+ + "\u0000\u0000\u021c\u021f\u0001\u0000\u0000\u0000\u021d\u021b\u0001\u0000"+ + "\u0000\u0000\u021d\u021e\u0001\u0000\u0000\u0000\u021eK\u0001\u0000\u0000"+ + "\u0000\u021f\u021d\u0001\u0000\u0000\u0000\u0220\u0222\u0003$\u0012\u0000"+ + "\u0221\u0220\u0001\u0000\u0000\u0000\u0222\u0225\u0001\u0000\u0000\u0000"+ + "\u0223\u0221\u0001\u0000\u0000\u0000\u0223\u0224\u0001\u0000\u0000\u0000"+ + "\u0224\u0227\u0001\u0000\u0000\u0000\u0225\u0223\u0001\u0000\u0000\u0000"+ + "\u0226\u0228\u00034\u001a\u0000\u0227\u0226\u0001\u0000\u0000\u0000\u0227"+ + "\u0228\u0001\u0000\u0000\u0000\u0228M\u0001\u0000\u0000\u0000\u0229\u022a"+ + "\u0003L&\u0000\u022aO\u0001\u0000\u0000\u0000\u022b\u022c\u0005\u0001"+ + "\u0000\u0000\u022c\u022e\u0005u\u0000\u0000\u022d\u022f\u0003\"\u0011"+ + "\u0000\u022e\u022d\u0001\u0000\u0000\u0000\u022e\u022f\u0001\u0000\u0000"+ + "\u0000\u022f\u0230\u0001\u0000\u0000\u0000\u0230\u0231\u0003R)\u0000\u0231"+ + "\u0232\u0005\u0002\u0000\u0000\u0232Q\u0001\u0000\u0000\u0000\u0233\u0235"+ + "\u0003\u001c\u000e\u0000\u0234\u0233\u0001\u0000\u0000\u0000\u0234\u0235"+ + "\u0001\u0000\u0000\u0000\u0235\u0236\u0001\u0000\u0000\u0000\u0236\u0241"+ + "\u0003T*\u0000\u0237\u0239\u0003n7\u0000\u0238\u023a\u0003\u001c\u000e"+ + "\u0000\u0239\u0238\u0001\u0000\u0000\u0000\u0239\u023a\u0001\u0000\u0000"+ + "\u0000\u023a\u023b\u0001\u0000\u0000\u0000\u023b\u023c\u0003\u0016\u000b"+ + "\u0000\u023c\u0241\u0001\u0000\u0000\u0000\u023d\u023e\u0003t:\u0000\u023e"+ + "\u023f\u0003R)\u0000\u023f\u0241\u0001\u0000\u0000\u0000\u0240\u0234\u0001"+ + "\u0000\u0000\u0000\u0240\u0237\u0001\u0000\u0000\u0000\u0240\u023d\u0001"+ + "\u0000\u0000\u0000\u0241S\u0001\u0000\u0000\u0000\u0242\u0243\u0003\u0016"+ + "\u000b\u0000\u0243\u0244\u0003V+\u0000\u0244U\u0001\u0000\u0000\u0000"+ + "\u0245\u0246\u0005\u0001\u0000\u0000\u0246\u0250\u0005z\u0000\u0000\u0247"+ + "\u0249\u0003\n\u0005\u0000\u0248\u0247\u0001\u0000\u0000\u0000\u0249\u024c"+ + "\u0001\u0000\u0000\u0000\u024a\u0248\u0001\u0000\u0000\u0000\u024a\u024b"+ + "\u0001\u0000\u0000\u0000\u024b\u0251\u0001\u0000\u0000\u0000\u024c\u024a"+ + "\u0001\u0000\u0000\u0000\u024d\u024e\u0003\"\u0011\u0000\u024e\u024f\u0003"+ + "\n\u0005\u0000\u024f\u0251\u0001\u0000\u0000\u0000\u0250\u024a\u0001\u0000"+ + "\u0000\u0000\u0250\u024d\u0001\u0000\u0000\u0000\u0251\u0252\u0001\u0000"+ + "\u0000\u0000\u0252\u0254\u0005\u0002\u0000\u0000\u0253\u0245\u0001\u0000"+ + "\u0000\u0000\u0254\u0257\u0001\u0000\u0000\u0000\u0255\u0253\u0001\u0000"+ + "\u0000\u0000\u0255\u0256\u0001\u0000\u0000\u0000\u0256\u0258\u0001\u0000"+ + "\u0000\u0000\u0257\u0255\u0001\u0000\u0000\u0000\u0258\u0259\u0003L&\u0000"+ + "\u0259W\u0001\u0000\u0000\u0000\u025a\u025b\u0005\u0001\u0000\u0000\u025b"+ + "\u025c\u0005\u0080\u0000\u0000\u025c\u025d\u0003N\'\u0000\u025d\u025e"+ + "\u0005\u0002\u0000\u0000\u025e\u0261\u0001\u0000\u0000\u0000\u025f\u0261"+ + "\u0003D\"\u0000\u0260\u025a\u0001\u0000\u0000\u0000\u0260\u025f\u0001"+ + "\u0000\u0000\u0000\u0261Y\u0001\u0000\u0000\u0000\u0262\u0263\u0005\u0001"+ + "\u0000\u0000\u0263\u0265\u0005~\u0000\u0000\u0264\u0266\u0003 \u0010\u0000"+ + "\u0265\u0264\u0001\u0000\u0000\u0000\u0265\u0266\u0001\u0000\u0000\u0000"+ + "\u0266\u0267\u0001\u0000\u0000\u0000\u0267\u0268\u0005\u0001\u0000\u0000"+ + "\u0268\u0269\u0003$\u0012\u0000\u0269\u026d\u0005\u0002\u0000\u0000\u026a"+ + "\u026c\u0003 \u0010\u0000\u026b\u026a\u0001\u0000\u0000\u0000\u026c\u026f"+ + "\u0001\u0000\u0000\u0000\u026d\u026b\u0001\u0000\u0000\u0000\u026d\u026e"+ + "\u0001\u0000\u0000\u0000\u026e\u0270\u0001\u0000\u0000\u0000\u026f\u026d"+ + "\u0001\u0000\u0000\u0000\u0270\u0271\u0005\u0002\u0000\u0000\u0271\u0281"+ + "\u0001\u0000\u0000\u0000\u0272\u0273\u0005\u0001\u0000\u0000\u0273\u0275"+ + "\u0005~\u0000\u0000\u0274\u0276\u0003 \u0010\u0000\u0275\u0274\u0001\u0000"+ + "\u0000\u0000\u0275\u0276\u0001\u0000\u0000\u0000\u0276\u0277\u0001\u0000"+ + "\u0000\u0000\u0277\u027b\u0003X,\u0000\u0278\u027a\u0003 \u0010\u0000"+ + "\u0279\u0278\u0001\u0000\u0000\u0000\u027a\u027d\u0001\u0000\u0000\u0000"+ + "\u027b\u0279\u0001\u0000\u0000\u0000\u027b\u027c\u0001\u0000\u0000\u0000"+ + "\u027c\u027e\u0001\u0000\u0000\u0000\u027d\u027b\u0001\u0000\u0000\u0000"+ + "\u027e\u027f\u0005\u0002\u0000\u0000\u027f\u0281\u0001\u0000\u0000\u0000"+ + "\u0280\u0262\u0001\u0000\u0000\u0000\u0280\u0272\u0001\u0000\u0000\u0000"+ + "\u0281[\u0001\u0000\u0000\u0000\u0282\u0283\u0005\u0001\u0000\u0000\u0283"+ + "\u0285\u0005|\u0000\u0000\u0284\u0286\u0003\"\u0011\u0000\u0285\u0284"+ + "\u0001\u0000\u0000\u0000\u0285\u0286\u0001\u0000\u0000\u0000\u0286\u0287"+ + "\u0001\u0000\u0000\u0000\u0287\u0288\u0003^/\u0000\u0288\u0289\u0005\u0002"+ + "\u0000\u0000\u0289]\u0001\u0000\u0000\u0000\u028a\u029d\u0003\u0018\f"+ + "\u0000\u028b\u028c\u0003n7\u0000\u028c\u028d\u0003\u0018\f\u0000\u028d"+ + "\u029d\u0001\u0000\u0000\u0000\u028e\u028f\u0003t:\u0000\u028f\u0290\u0003"+ + "^/\u0000\u0290\u029d\u0001\u0000\u0000\u0000\u0291\u0292\u0003\u0006\u0003"+ + "\u0000\u0292\u0293\u0005\u0001\u0000\u0000\u0293\u0297\u0005~\u0000\u0000"+ + "\u0294\u0296\u0003 \u0010\u0000\u0295\u0294\u0001\u0000\u0000\u0000\u0296"+ + "\u0299\u0001\u0000\u0000\u0000\u0297\u0295\u0001\u0000\u0000\u0000\u0297"+ + "\u0298\u0001\u0000\u0000\u0000\u0298\u029a\u0001\u0000\u0000\u0000\u0299"+ + "\u0297\u0001\u0000\u0000\u0000\u029a\u029b\u0005\u0002\u0000\u0000\u029b"+ + "\u029d\u0001\u0000\u0000\u0000\u029c\u028a\u0001\u0000\u0000\u0000\u029c"+ + "\u028b\u0001\u0000\u0000\u0000\u029c\u028e\u0001\u0000\u0000\u0000\u029c"+ + "\u0291\u0001\u0000\u0000\u0000\u029d_\u0001\u0000\u0000\u0000\u029e\u029f"+ + "\u0005\u0001\u0000\u0000\u029f\u02a1\u0005\u007f\u0000\u0000\u02a0\u02a2"+ + "\u0003 \u0010\u0000\u02a1\u02a0\u0001\u0000\u0000\u0000\u02a1\u02a2\u0001"+ + "\u0000\u0000\u0000\u02a2\u02a3\u0001\u0000\u0000\u0000\u02a3\u02a4\u0005"+ + "\u0001\u0000\u0000\u02a4\u02a5\u0003$\u0012\u0000\u02a5\u02a9\u0005\u0002"+ + "\u0000\u0000\u02a6\u02a8\u0005\u0006\u0000\u0000\u02a7\u02a6\u0001\u0000"+ + "\u0000\u0000\u02a8\u02ab\u0001\u0000\u0000\u0000\u02a9\u02a7\u0001\u0000"+ + "\u0000\u0000\u02a9\u02aa\u0001\u0000\u0000\u0000\u02aa\u02ac\u0001\u0000"+ + "\u0000\u0000\u02ab\u02a9\u0001\u0000\u0000\u0000\u02ac\u02ad\u0005\u0002"+ + "\u0000\u0000\u02ad\u02bd\u0001\u0000\u0000\u0000\u02ae\u02af\u0005\u0001"+ + "\u0000\u0000\u02af\u02b1\u0005\u007f\u0000\u0000\u02b0\u02b2\u0003 \u0010"+ + "\u0000\u02b1\u02b0\u0001\u0000\u0000\u0000\u02b1\u02b2\u0001\u0000\u0000"+ + "\u0000\u02b2\u02b3\u0001\u0000\u0000\u0000\u02b3\u02b7\u0003X,\u0000\u02b4"+ + "\u02b6\u0005\u0006\u0000\u0000\u02b5\u02b4\u0001\u0000\u0000\u0000\u02b6"+ + "\u02b9\u0001\u0000\u0000\u0000\u02b7\u02b5\u0001\u0000\u0000\u0000\u02b7"+ + "\u02b8\u0001\u0000\u0000\u0000\u02b8\u02ba\u0001\u0000\u0000\u0000\u02b9"+ + "\u02b7\u0001\u0000\u0000\u0000\u02ba\u02bb\u0005\u0002\u0000\u0000\u02bb"+ + "\u02bd\u0001\u0000\u0000\u0000\u02bc\u029e\u0001\u0000\u0000\u0000\u02bc"+ + "\u02ae\u0001\u0000\u0000\u0000\u02bda\u0001\u0000\u0000\u0000\u02be\u02bf"+ + "\u0005\u0001\u0000\u0000\u02bf\u02c1\u0005}\u0000\u0000\u02c0\u02c2\u0003"+ + "\"\u0011\u0000\u02c1\u02c0\u0001\u0000\u0000\u0000\u02c1\u02c2\u0001\u0000"+ + "\u0000\u0000\u02c2\u02c3\u0001\u0000\u0000\u0000\u02c3\u02c4\u0003d2\u0000"+ + "\u02c4\u02c5\u0005\u0002\u0000\u0000\u02c5c\u0001\u0000\u0000\u0000\u02c6"+ + "\u02d7\u0003\u001a\r\u0000\u02c7\u02c8\u0003n7\u0000\u02c8\u02c9\u0003"+ + "\u001a\r\u0000\u02c9\u02d7\u0001\u0000\u0000\u0000\u02ca\u02cb\u0003t"+ + ":\u0000\u02cb\u02cc\u0003d2\u0000\u02cc\u02d7\u0001\u0000\u0000\u0000"+ + "\u02cd\u02ce\u0005\u0001\u0000\u0000\u02ce\u02d2\u0005\u007f\u0000\u0000"+ + "\u02cf\u02d1\u0005\u0006\u0000\u0000\u02d0\u02cf\u0001\u0000\u0000\u0000"+ + "\u02d1\u02d4\u0001\u0000\u0000\u0000\u02d2\u02d0\u0001\u0000\u0000\u0000"+ + "\u02d2\u02d3\u0001\u0000\u0000\u0000\u02d3\u02d5\u0001\u0000\u0000\u0000"+ + "\u02d4\u02d2\u0001\u0000\u0000\u0000\u02d5\u02d7\u0005\u0002\u0000\u0000"+ + "\u02d6\u02c6\u0001\u0000\u0000\u0000\u02d6\u02c7\u0001\u0000\u0000\u0000"+ + "\u02d6\u02ca\u0001\u0000\u0000\u0000\u02d6\u02cd\u0001\u0000\u0000\u0000"+ + "\u02d7e\u0001\u0000\u0000\u0000\u02d8\u02d9\u0005\u0001\u0000\u0000\u02d9"+ + "\u02db\u0005{\u0000\u0000\u02da\u02dc\u0003\"\u0011\u0000\u02db\u02da"+ + "\u0001\u0000\u0000\u0000\u02db\u02dc\u0001\u0000\u0000\u0000\u02dc\u02dd"+ + "\u0001\u0000\u0000\u0000\u02dd\u02de\u0003h4\u0000\u02de\u02df\u0005\u0002"+ + "\u0000\u0000\u02dfg\u0001\u0000\u0000\u0000\u02e0\u02e1\u0003\u000e\u0007"+ + "\u0000\u02e1\u02e2\u0003N\'\u0000\u02e2\u02ea\u0001\u0000\u0000\u0000"+ + "\u02e3\u02e4\u0003n7\u0000\u02e4\u02e5\u0003\u000e\u0007\u0000\u02e5\u02ea"+ + "\u0001\u0000\u0000\u0000\u02e6\u02e7\u0003t:\u0000\u02e7\u02e8\u0003h"+ + "4\u0000\u02e8\u02ea\u0001\u0000\u0000\u0000\u02e9\u02e0\u0001\u0000\u0000"+ + "\u0000\u02e9\u02e3\u0001\u0000\u0000\u0000\u02e9\u02e6\u0001\u0000\u0000"+ + "\u0000\u02eai\u0001\u0000\u0000\u0000\u02eb\u02ec\u0005\u0001\u0000\u0000"+ + "\u02ec\u02ee\u0005u\u0000\u0000\u02ed\u02ef\u0003\"\u0011\u0000\u02ee"+ + "\u02ed\u0001\u0000\u0000\u0000\u02ee\u02ef\u0001\u0000\u0000\u0000\u02ef"+ + "\u02f0\u0001\u0000\u0000\u0000\u02f0\u02f1\u0003\u001c\u000e\u0000\u02f1"+ + "\u02f2\u0005\u0002\u0000\u0000\u02f2\u0314\u0001\u0000\u0000\u0000\u02f3"+ + "\u02f4\u0005\u0001\u0000\u0000\u02f4\u02f6\u0005u\u0000\u0000\u02f5\u02f7"+ + "\u0003\"\u0011\u0000\u02f6\u02f5\u0001\u0000\u0000\u0000\u02f6\u02f7\u0001"+ + "\u0000\u0000\u0000\u02f7\u02f8\u0001\u0000\u0000\u0000\u02f8\u02f9\u0003"+ + "\u0016\u000b\u0000\u02f9\u02fa\u0005\u0002\u0000\u0000\u02fa\u0314\u0001"+ + "\u0000\u0000\u0000\u02fb\u02fc\u0005\u0001\u0000\u0000\u02fc\u02fe\u0005"+ + "|\u0000\u0000\u02fd\u02ff\u0003\"\u0011\u0000\u02fe\u02fd\u0001\u0000"+ + "\u0000\u0000\u02fe\u02ff\u0001\u0000\u0000\u0000\u02ff\u0300\u0001\u0000"+ + "\u0000\u0000\u0300\u0301\u0003\u0018\f\u0000\u0301\u0302\u0005\u0002\u0000"+ + "\u0000\u0302\u0314\u0001\u0000\u0000\u0000\u0303\u0304\u0005\u0001\u0000"+ + "\u0000\u0304\u0306\u0005}\u0000\u0000\u0305\u0307\u0003\"\u0011\u0000"+ + "\u0306\u0305\u0001\u0000\u0000\u0000\u0306\u0307\u0001\u0000\u0000\u0000"+ + "\u0307\u0308\u0001\u0000\u0000\u0000\u0308\u0309\u0003\u001a\r\u0000\u0309"+ + "\u030a\u0005\u0002\u0000\u0000\u030a\u0314\u0001\u0000\u0000\u0000\u030b"+ + "\u030c\u0005\u0001\u0000\u0000\u030c\u030e\u0005{\u0000\u0000\u030d\u030f"+ + "\u0003\"\u0011\u0000\u030e\u030d\u0001\u0000\u0000\u0000\u030e\u030f\u0001"+ + "\u0000\u0000\u0000\u030f\u0310\u0001\u0000\u0000\u0000\u0310\u0311\u0003"+ + "\u000e\u0007\u0000\u0311\u0312\u0005\u0002\u0000\u0000\u0312\u0314\u0001"+ + "\u0000\u0000\u0000\u0313\u02eb\u0001\u0000\u0000\u0000\u0313\u02f3\u0001"+ + "\u0000\u0000\u0000\u0313\u02fb\u0001\u0000\u0000\u0000\u0313\u0303\u0001"+ + "\u0000\u0000\u0000\u0313\u030b\u0001\u0000\u0000\u0000\u0314k\u0001\u0000"+ + "\u0000\u0000\u0315\u0316\u0005\u0001\u0000\u0000\u0316\u0317\u0005\u0081"+ + "\u0000\u0000\u0317\u0318\u0003\u0002\u0001\u0000\u0318\u0319\u0003\u0002"+ + "\u0001\u0000\u0319\u031a\u0003j5\u0000\u031a\u031b\u0005\u0002\u0000\u0000"+ + "\u031bm\u0001\u0000\u0000\u0000\u031c\u031d\u0005\u0001\u0000\u0000\u031d"+ + "\u031e\u0005\u0081\u0000\u0000\u031e\u031f\u0003\u0002\u0001\u0000\u031f"+ + "\u0320\u0003\u0002\u0001\u0000\u0320\u0321\u0005\u0002\u0000\u0000\u0321"+ + "o\u0001\u0000\u0000\u0000\u0322\u0323\u0005\u0001\u0000\u0000\u0323\u0324"+ + "\u0005u\u0000\u0000\u0324\u0325\u0003 \u0010\u0000\u0325\u0326\u0005\u0002"+ + "\u0000\u0000\u0326\u0337\u0001\u0000\u0000\u0000\u0327\u0328\u0005\u0001"+ + "\u0000\u0000\u0328\u0329\u0005|\u0000\u0000\u0329\u032a\u0003 \u0010\u0000"+ + "\u032a\u032b\u0005\u0002\u0000\u0000\u032b\u0337\u0001\u0000\u0000\u0000"+ + "\u032c\u032d\u0005\u0001\u0000\u0000\u032d\u032e\u0005}\u0000\u0000\u032e"+ + "\u032f\u0003 \u0010\u0000\u032f\u0330\u0005\u0002\u0000\u0000\u0330\u0337"+ "\u0001\u0000\u0000\u0000\u0331\u0332\u0005\u0001\u0000\u0000\u0332\u0333"+ - "\u0005\u0080\u0000\u0000\u0333\u0334\u0003\u0002\u0001\u0000\u0334\u0335"+ - "\u0005\u0002\u0000\u0000\u0335s\u0001\u0000\u0000\u0000\u0336\u0337\u0005"+ - "\u0001\u0000\u0000\u0337\u0339\u0005r\u0000\u0000\u0338\u033a\u0003\""+ - "\u0011\u0000\u0339\u0338\u0001\u0000\u0000\u0000\u0339\u033a\u0001\u0000"+ - "\u0000\u0000\u033a\u033b\u0001\u0000\u0000\u0000\u033b\u033c\u0003\u0010"+ - "\b\u0000\u033c\u033d\u0005\u0002\u0000\u0000\u033du\u0001\u0000\u0000"+ - "\u0000\u033e\u033f\u0005\u0001\u0000\u0000\u033f\u0340\u0005u\u0000\u0000"+ - "\u0340\u0341\u0003 \u0010\u0000\u0341\u0342\u0005\u0002\u0000\u0000\u0342"+ - "w\u0001\u0000\u0000\u0000\u0343\u034e\u0003t:\u0000\u0344\u034e\u0003"+ - "d2\u0000\u0345\u034e\u0003Z-\u0000\u0346\u034e\u0003`0\u0000\u0347\u034e"+ - "\u0003N\'\u0000\u0348\u034e\u0003X,\u0000\u0349\u034e\u0003^/\u0000\u034a"+ - "\u034e\u0003v;\u0000\u034b\u034e\u0003j5\u0000\u034c\u034e\u0003p8\u0000"+ - "\u034d\u0343\u0001\u0000\u0000\u0000\u034d\u0344\u0001\u0000\u0000\u0000"+ - "\u034d\u0345\u0001\u0000\u0000\u0000\u034d\u0346\u0001\u0000\u0000\u0000"+ - "\u034d\u0347\u0001\u0000\u0000\u0000\u034d\u0348\u0001\u0000\u0000\u0000"+ - "\u034d\u0349\u0001\u0000\u0000\u0000\u034d\u034a\u0001\u0000\u0000\u0000"+ - "\u034d\u034b\u0001\u0000\u0000\u0000\u034d\u034c\u0001\u0000\u0000\u0000"+ - "\u034ey\u0001\u0000\u0000\u0000\u034f\u0350\u0005\u0001\u0000\u0000\u0350"+ - "\u0352\u0005\u0081\u0000\u0000\u0351\u0353\u0005\u0092\u0000\u0000\u0352"+ - "\u0351\u0001\u0000\u0000\u0000\u0352\u0353\u0001\u0000\u0000\u0000\u0353"+ - "\u0357\u0001\u0000\u0000\u0000\u0354\u0356\u0003x<\u0000\u0355\u0354\u0001"+ - "\u0000\u0000\u0000\u0356\u0359\u0001\u0000\u0000\u0000\u0357\u0355\u0001"+ - "\u0000\u0000\u0000\u0357\u0358\u0001\u0000\u0000\u0000\u0358\u035a\u0001"+ - "\u0000\u0000\u0000\u0359\u0357\u0001\u0000\u0000\u0000\u035a\u035b\u0005"+ - "\u0002\u0000\u0000\u035b{\u0001\u0000\u0000\u0000\u035c\u036b\u0003z="+ - "\u0000\u035d\u035e\u0005\u0001\u0000\u0000\u035e\u0360\u0005\u0081\u0000"+ - "\u0000\u035f\u0361\u0005\u0092\u0000\u0000\u0360\u035f\u0001\u0000\u0000"+ - "\u0000\u0360\u0361\u0001\u0000\u0000\u0000\u0361\u0362\u0001\u0000\u0000"+ - "\u0000\u0362\u0366\u0007\u0005\u0000\u0000\u0363\u0365\u0005\u0006\u0000"+ - "\u0000\u0364\u0363\u0001\u0000\u0000\u0000\u0365\u0368\u0001\u0000\u0000"+ - "\u0000\u0366\u0364\u0001\u0000\u0000\u0000\u0366\u0367\u0001\u0000\u0000"+ - "\u0000\u0367\u0369\u0001\u0000\u0000\u0000\u0368\u0366\u0001\u0000\u0000"+ - "\u0000\u0369\u036b\u0005\u0002\u0000\u0000\u036a\u035c\u0001\u0000\u0000"+ - "\u0000\u036a\u035d\u0001\u0000\u0000\u0000\u036b}\u0001\u0000\u0000\u0000"+ - "\u036c\u036d\u0005\u0001\u0000\u0000\u036d\u036f\u0005\u0086\u0000\u0000"+ - "\u036e\u0370\u0005\u0092\u0000\u0000\u036f\u036e\u0001\u0000\u0000\u0000"+ - "\u036f\u0370\u0001\u0000\u0000\u0000\u0370\u0371\u0001\u0000\u0000\u0000"+ - "\u0371\u0372\u0003\u0002\u0001\u0000\u0372\u0373\u0003\u0088D\u0000\u0373"+ - "\u0374\u0005\u0002\u0000\u0000\u0374\u037e\u0001\u0000\u0000\u0000\u0375"+ - "\u0376\u0005\u0001\u0000\u0000\u0376\u0378\u0005\u0087\u0000\u0000\u0377"+ - "\u0379\u0005\u0092\u0000\u0000\u0378\u0377\u0001\u0000\u0000\u0000\u0378"+ - "\u0379\u0001\u0000\u0000\u0000\u0379\u037a\u0001\u0000\u0000\u0000\u037a"+ - "\u037b\u0003\u0002\u0001\u0000\u037b\u037c\u0005\u0002\u0000\u0000\u037c"+ - "\u037e\u0001\u0000\u0000\u0000\u037d\u036c\u0001\u0000\u0000\u0000\u037d"+ - "\u0375\u0001\u0000\u0000\u0000\u037e\u007f\u0001\u0000\u0000\u0000\u037f"+ - "\u0380\u0005\u0001\u0000\u0000\u0380\u0381\u0005\u0088\u0000\u0000\u0381"+ - "\u0382\u0003|>\u0000\u0382\u0383\u0005\u0006\u0000\u0000\u0383\u0384\u0005"+ - "\u0002\u0000\u0000\u0384\u03b4\u0001\u0000\u0000\u0000\u0385\u0386\u0005"+ - "\u0001\u0000\u0000\u0386\u0387\u0005\u0089\u0000\u0000\u0387\u0388\u0003"+ - "|>\u0000\u0388\u0389\u0005\u0006\u0000\u0000\u0389\u038a\u0005\u0002\u0000"+ - "\u0000\u038a\u03b4\u0001\u0000\u0000\u0000\u038b\u038c\u0005\u0001\u0000"+ - "\u0000\u038c\u038d\u0005\u008a\u0000\u0000\u038d\u038e\u0003|>\u0000\u038e"+ - "\u038f\u0005\u0006\u0000\u0000\u038f\u0390\u0005\u0002\u0000\u0000\u0390"+ - "\u03b4\u0001\u0000\u0000\u0000\u0391\u0392\u0005\u0001\u0000\u0000\u0392"+ - "\u0393\u0005\u008e\u0000\u0000\u0393\u0394\u0003|>\u0000\u0394\u0395\u0005"+ - "\u0006\u0000\u0000\u0395\u0396\u0005\u0002\u0000\u0000\u0396\u03b4\u0001"+ - "\u0000\u0000\u0000\u0397\u0398\u0005\u0001\u0000\u0000\u0398\u0399\u0005"+ - "\u008b\u0000\u0000\u0399\u039a\u0003~?\u0000\u039a\u039b\u0003\u0088D"+ - "\u0000\u039b\u039c\u0005\u0002\u0000\u0000\u039c\u03b4\u0001\u0000\u0000"+ - "\u0000\u039d\u039e\u0005\u0001\u0000\u0000\u039e\u039f\u0005\u008c\u0000"+ - "\u0000\u039f\u03a0\u0003~?\u0000\u03a0\u03a1\u0005\u0002\u0000\u0000\u03a1"+ - "\u03b4\u0001\u0000\u0000\u0000\u03a2\u03a3\u0005\u0001\u0000\u0000\u03a3"+ - "\u03a4\u0005\u008d\u0000\u0000\u03a4\u03a5\u0003~?\u0000\u03a5\u03a6\u0005"+ - "\u0002\u0000\u0000\u03a6\u03b4\u0001\u0000\u0000\u0000\u03a7\u03a8\u0005"+ - "\u0001\u0000\u0000\u03a8\u03a9\u0005\u008e\u0000\u0000\u03a9\u03aa\u0003"+ - "~?\u0000\u03aa\u03ab\u0005\u0006\u0000\u0000\u03ab\u03ac\u0005\u0002\u0000"+ - "\u0000\u03ac\u03b4\u0001\u0000\u0000\u0000\u03ad\u03ae\u0005\u0001\u0000"+ - "\u0000\u03ae\u03af\u0005\u008f\u0000\u0000\u03af\u03b0\u0003~?\u0000\u03b0"+ - "\u03b1\u0005\u0006\u0000\u0000\u03b1\u03b2\u0005\u0002\u0000\u0000\u03b2"+ - "\u03b4\u0001\u0000\u0000\u0000\u03b3\u037f\u0001\u0000\u0000\u0000\u03b3"+ - "\u0385\u0001\u0000\u0000\u0000\u03b3\u038b\u0001\u0000\u0000\u0000\u03b3"+ - "\u0391\u0001\u0000\u0000\u0000\u03b3\u0397\u0001\u0000\u0000\u0000\u03b3"+ - "\u039d\u0001\u0000\u0000\u0000\u03b3\u03a2\u0001\u0000\u0000\u0000\u03b3"+ - "\u03a7\u0001\u0000\u0000\u0000\u03b3\u03ad\u0001\u0000\u0000\u0000\u03b4"+ - "\u0081\u0001\u0000\u0000\u0000\u03b5\u03c2\u0003~?\u0000\u03b6\u03c2\u0003"+ - "\u0080@\u0000\u03b7\u03c2\u0003|>\u0000\u03b8\u03b9\u0005\u0001\u0000"+ - "\u0000\u03b9\u03ba\u0005\u0085\u0000\u0000\u03ba\u03bc\u0003\u0002\u0001"+ - "\u0000\u03bb\u03bd\u0005\u0092\u0000\u0000\u03bc\u03bb\u0001\u0000\u0000"+ - "\u0000\u03bc\u03bd\u0001\u0000\u0000\u0000\u03bd\u03be\u0001\u0000\u0000"+ - "\u0000\u03be\u03bf\u0005\u0002\u0000\u0000\u03bf\u03c2\u0001\u0000\u0000"+ - "\u0000\u03c0\u03c2\u0003\u0084B\u0000\u03c1\u03b5\u0001\u0000\u0000\u0000"+ - "\u03c1\u03b6\u0001\u0000\u0000\u0000\u03c1\u03b7\u0001\u0000\u0000\u0000"+ - "\u03c1\u03b8\u0001\u0000\u0000\u0000\u03c1\u03c0\u0001\u0000\u0000\u0000"+ - "\u03c2\u0083\u0001\u0000\u0000\u0000\u03c3\u03c4\u0005\u0001\u0000\u0000"+ - "\u03c4\u03c6\u0005\u0084\u0000\u0000\u03c5\u03c7\u0005\u0092\u0000\u0000"+ - "\u03c6\u03c5\u0001\u0000\u0000\u0000\u03c6\u03c7\u0001\u0000\u0000\u0000"+ - "\u03c7\u03cb\u0001\u0000\u0000\u0000\u03c8\u03ca\u0003\u0082A\u0000\u03c9"+ - "\u03c8\u0001\u0000\u0000\u0000\u03ca\u03cd\u0001\u0000\u0000\u0000\u03cb"+ - "\u03c9\u0001\u0000\u0000\u0000\u03cb\u03cc\u0001\u0000\u0000\u0000\u03cc"+ - "\u03ce\u0001\u0000\u0000\u0000\u03cd\u03cb\u0001\u0000\u0000\u0000\u03ce"+ - "\u03e4\u0005\u0002\u0000\u0000\u03cf\u03d0\u0005\u0001\u0000\u0000\u03d0"+ - "\u03d2\u0005\u0090\u0000\u0000\u03d1\u03d3\u0005\u0092\u0000\u0000\u03d2"+ - "\u03d1\u0001\u0000\u0000\u0000\u03d2\u03d3\u0001\u0000\u0000\u0000\u03d3"+ - "\u03d4\u0001\u0000\u0000\u0000\u03d4\u03d5\u0005\u0006\u0000\u0000\u03d5"+ - "\u03e4\u0005\u0002\u0000\u0000\u03d6\u03d7\u0005\u0001\u0000\u0000\u03d7"+ - "\u03d9\u0005\u0091\u0000\u0000\u03d8\u03da\u0005\u0092\u0000\u0000\u03d9"+ - "\u03d8\u0001\u0000\u0000\u0000\u03d9\u03da\u0001\u0000\u0000\u0000\u03da"+ - "\u03db\u0001\u0000\u0000\u0000\u03db\u03dc\u0005\u0006\u0000\u0000\u03dc"+ - "\u03e4\u0005\u0002\u0000\u0000\u03dd\u03de\u0005\u0001\u0000\u0000\u03de"+ - "\u03e0\u0005\u0091\u0000\u0000\u03df\u03e1\u0005\u0092\u0000\u0000\u03e0"+ - "\u03df\u0001\u0000\u0000\u0000\u03e0\u03e1\u0001\u0000\u0000\u0000\u03e1"+ - "\u03e2\u0001\u0000\u0000\u0000\u03e2\u03e4\u0005\u0002\u0000\u0000\u03e3"+ - "\u03c3\u0001\u0000\u0000\u0000\u03e3\u03cf\u0001\u0000\u0000\u0000\u03e3"+ - "\u03d6\u0001\u0000\u0000\u0000\u03e3\u03dd\u0001\u0000\u0000\u0000\u03e4"+ - "\u0085\u0001\u0000\u0000\u0000\u03e5\u03e6\u0005\u0001\u0000\u0000\u03e6"+ - "\u03e7\u0005\b\u0000\u0000\u03e7\u03e8\u0003\u001e\u000f\u0000\u03e8\u03e9"+ - "\u0005\u0002\u0000\u0000\u03e9\u0087\u0001\u0000\u0000\u0000\u03ea\u03ec"+ - "\u0003\u0086C\u0000\u03eb\u03ea\u0001\u0000\u0000\u0000\u03ec\u03ef\u0001"+ - "\u0000\u0000\u0000\u03ed\u03eb\u0001\u0000\u0000\u0000\u03ed\u03ee\u0001"+ - "\u0000\u0000\u0000\u03ee\u0089\u0001\u0000\u0000\u0000\u03ef\u03ed\u0001"+ - "\u0000\u0000\u0000\u03f0\u03f2\u0003\u0082A\u0000\u03f1\u03f0\u0001\u0000"+ - "\u0000\u0000\u03f2\u03f5\u0001\u0000\u0000\u0000\u03f3\u03f1\u0001\u0000"+ - "\u0000\u0000\u03f3\u03f4\u0001\u0000\u0000\u0000\u03f4\u03f6\u0001\u0000"+ - "\u0000\u0000\u03f5\u03f3\u0001\u0000\u0000\u0000\u03f6\u03ff\u0005\u0000"+ - "\u0000\u0001\u03f7\u03f9\u0003x<\u0000\u03f8\u03f7\u0001\u0000\u0000\u0000"+ - "\u03f9\u03fa\u0001\u0000\u0000\u0000\u03fa\u03f8\u0001\u0000\u0000\u0000"+ - "\u03fa\u03fb\u0001\u0000\u0000\u0000\u03fb\u03fc\u0001\u0000\u0000\u0000"+ - "\u03fc\u03fd\u0005\u0000\u0000\u0001\u03fd\u03ff\u0001\u0000\u0000\u0000"+ - "\u03fe\u03f3\u0001\u0000\u0000\u0000\u03fe\u03f8\u0001\u0000\u0000\u0000"+ - "\u03ff\u008b\u0001\u0000\u0000\u0000\u0400\u0401\u0003z=\u0000\u0401\u0402"+ - "\u0005\u0000\u0000\u0001\u0402\u040b\u0001\u0000\u0000\u0000\u0403\u0405"+ - "\u0003x<\u0000\u0404\u0403\u0001\u0000\u0000\u0000\u0405\u0408\u0001\u0000"+ - "\u0000\u0000\u0406\u0404\u0001\u0000\u0000\u0000\u0406\u0407\u0001\u0000"+ - "\u0000\u0000\u0407\u0409\u0001\u0000\u0000\u0000\u0408\u0406\u0001\u0000"+ - "\u0000\u0000\u0409\u040b\u0005\u0000\u0000\u0001\u040a\u0400\u0001\u0000"+ - "\u0000\u0000\u040a\u0406\u0001\u0000\u0000\u0000\u040b\u008d\u0001\u0000"+ - "\u0000\u0000q\u009b\u00a5\u00b1\u00b7\u00bc\u00c4\u00ca\u00d2\u00d8\u00e8"+ - "\u00f6\u0109\u010c\u0110\u0113\u0127\u0134\u0139\u0140\u0145\u0148\u014f"+ - "\u0155\u015d\u0163\u016b\u0171\u017b\u0181\u0188\u018d\u0191\u0196\u019a"+ - "\u019f\u01a2\u01a6\u01a8\u01af\u01b5\u01c2\u01cb\u01d0\u01d5\u01db\u01e6"+ - "\u01e8\u01eb\u01f4\u01fa\u0204\u020a\u0210\u0216\u021a\u0221\u0227\u022c"+ - "\u0233\u023d\u0243\u0248\u0253\u0258\u0260\u0268\u026e\u0273\u0278\u028a"+ - "\u028f\u0294\u029c\u02a4\u02aa\u02af\u02b4\u02c5\u02c9\u02ce\u02dc\u02e1"+ - "\u02e9\u02f1\u02f9\u0301\u0306\u0329\u0339\u034d\u0352\u0357\u0360\u0366"+ - "\u036a\u036f\u0378\u037d\u03b3\u03bc\u03c1\u03c6\u03cb\u03d2\u03d9\u03e0"+ - "\u03e3\u03ed\u03f3\u03fa\u03fe\u0406\u040a"; + "\u0005{\u0000\u0000\u0333\u0334\u0003 \u0010\u0000\u0334\u0335\u0005\u0002"+ + "\u0000\u0000\u0335\u0337\u0001\u0000\u0000\u0000\u0336\u0322\u0001\u0000"+ + "\u0000\u0000\u0336\u0327\u0001\u0000\u0000\u0000\u0336\u032c\u0001\u0000"+ + "\u0000\u0000\u0336\u0331\u0001\u0000\u0000\u0000\u0337q\u0001\u0000\u0000"+ + "\u0000\u0338\u0339\u0005\u0001\u0000\u0000\u0339\u033a\u0005\u0082\u0000"+ + "\u0000\u033a\u033b\u0003\u0002\u0001\u0000\u033b\u033c\u0003p8\u0000\u033c"+ + "\u033d\u0005\u0002\u0000\u0000\u033ds\u0001\u0000\u0000\u0000\u033e\u033f"+ + "\u0005\u0001\u0000\u0000\u033f\u0340\u0005\u0082\u0000\u0000\u0340\u0341"+ + "\u0003\u0002\u0001\u0000\u0341\u0342\u0005\u0002\u0000\u0000\u0342u\u0001"+ + "\u0000\u0000\u0000\u0343\u0344\u0005\u0001\u0000\u0000\u0344\u0346\u0005"+ + "t\u0000\u0000\u0345\u0347\u0003\"\u0011\u0000\u0346\u0345\u0001\u0000"+ + "\u0000\u0000\u0346\u0347\u0001\u0000\u0000\u0000\u0347\u0348\u0001\u0000"+ + "\u0000\u0000\u0348\u0349\u0003\u0010\b\u0000\u0349\u034a\u0005\u0002\u0000"+ + "\u0000\u034aw\u0001\u0000\u0000\u0000\u034b\u034c\u0005\u0001\u0000\u0000"+ + "\u034c\u034d\u0005w\u0000\u0000\u034d\u034e\u0003 \u0010\u0000\u034e\u034f"+ + "\u0005\u0002\u0000\u0000\u034fy\u0001\u0000\u0000\u0000\u0350\u035b\u0003"+ + "v;\u0000\u0351\u035b\u0003f3\u0000\u0352\u035b\u0003\\.\u0000\u0353\u035b"+ + "\u0003b1\u0000\u0354\u035b\u0003P(\u0000\u0355\u035b\u0003Z-\u0000\u0356"+ + "\u035b\u0003`0\u0000\u0357\u035b\u0003x<\u0000\u0358\u035b\u0003l6\u0000"+ + "\u0359\u035b\u0003r9\u0000\u035a\u0350\u0001\u0000\u0000\u0000\u035a\u0351"+ + "\u0001\u0000\u0000\u0000\u035a\u0352\u0001\u0000\u0000\u0000\u035a\u0353"+ + "\u0001\u0000\u0000\u0000\u035a\u0354\u0001\u0000\u0000\u0000\u035a\u0355"+ + "\u0001\u0000\u0000\u0000\u035a\u0356\u0001\u0000\u0000\u0000\u035a\u0357"+ + "\u0001\u0000\u0000\u0000\u035a\u0358\u0001\u0000\u0000\u0000\u035a\u0359"+ + "\u0001\u0000\u0000\u0000\u035b{\u0001\u0000\u0000\u0000\u035c\u035d\u0005"+ + "\u0001\u0000\u0000\u035d\u035f\u0005\u0083\u0000\u0000\u035e\u0360\u0005"+ + "\u0094\u0000\u0000\u035f\u035e\u0001\u0000\u0000\u0000\u035f\u0360\u0001"+ + "\u0000\u0000\u0000\u0360\u0364\u0001\u0000\u0000\u0000\u0361\u0363\u0003"+ + "z=\u0000\u0362\u0361\u0001\u0000\u0000\u0000\u0363\u0366\u0001\u0000\u0000"+ + "\u0000\u0364\u0362\u0001\u0000\u0000\u0000\u0364\u0365\u0001\u0000\u0000"+ + "\u0000\u0365\u0367\u0001\u0000\u0000\u0000\u0366\u0364\u0001\u0000\u0000"+ + "\u0000\u0367\u0368\u0005\u0002\u0000\u0000\u0368}\u0001\u0000\u0000\u0000"+ + "\u0369\u0378\u0003|>\u0000\u036a\u036b\u0005\u0001\u0000\u0000\u036b\u036d"+ + "\u0005\u0083\u0000\u0000\u036c\u036e\u0005\u0094\u0000\u0000\u036d\u036c"+ + "\u0001\u0000\u0000\u0000\u036d\u036e\u0001\u0000\u0000\u0000\u036e\u036f"+ + "\u0001\u0000\u0000\u0000\u036f\u0373\u0007\u0005\u0000\u0000\u0370\u0372"+ + "\u0005\u0006\u0000\u0000\u0371\u0370\u0001\u0000\u0000\u0000\u0372\u0375"+ + "\u0001\u0000\u0000\u0000\u0373\u0371\u0001\u0000\u0000\u0000\u0373\u0374"+ + "\u0001\u0000\u0000\u0000\u0374\u0376\u0001\u0000\u0000\u0000\u0375\u0373"+ + "\u0001\u0000\u0000\u0000\u0376\u0378\u0005\u0002\u0000\u0000\u0377\u0369"+ + "\u0001\u0000\u0000\u0000\u0377\u036a\u0001\u0000\u0000\u0000\u0378\u007f"+ + "\u0001\u0000\u0000\u0000\u0379\u037a\u0005\u0001\u0000\u0000\u037a\u037c"+ + "\u0005\u0088\u0000\u0000\u037b\u037d\u0005\u0094\u0000\u0000\u037c\u037b"+ + "\u0001\u0000\u0000\u0000\u037c\u037d\u0001\u0000\u0000\u0000\u037d\u037e"+ + "\u0001\u0000\u0000\u0000\u037e\u037f\u0003\u0002\u0001\u0000\u037f\u0380"+ + "\u0003\u008aE\u0000\u0380\u0381\u0005\u0002\u0000\u0000\u0381\u038b\u0001"+ + "\u0000\u0000\u0000\u0382\u0383\u0005\u0001\u0000\u0000\u0383\u0385\u0005"+ + "\u0089\u0000\u0000\u0384\u0386\u0005\u0094\u0000\u0000\u0385\u0384\u0001"+ + "\u0000\u0000\u0000\u0385\u0386\u0001\u0000\u0000\u0000\u0386\u0387\u0001"+ + "\u0000\u0000\u0000\u0387\u0388\u0003\u0002\u0001\u0000\u0388\u0389\u0005"+ + "\u0002\u0000\u0000\u0389\u038b\u0001\u0000\u0000\u0000\u038a\u0379\u0001"+ + "\u0000\u0000\u0000\u038a\u0382\u0001\u0000\u0000\u0000\u038b\u0081\u0001"+ + "\u0000\u0000\u0000\u038c\u038d\u0005\u0001\u0000\u0000\u038d\u038e\u0005"+ + "\u008a\u0000\u0000\u038e\u038f\u0003~?\u0000\u038f\u0390\u0005\u0006\u0000"+ + "\u0000\u0390\u0391\u0005\u0002\u0000\u0000\u0391\u03c1\u0001\u0000\u0000"+ + "\u0000\u0392\u0393\u0005\u0001\u0000\u0000\u0393\u0394\u0005\u008b\u0000"+ + "\u0000\u0394\u0395\u0003~?\u0000\u0395\u0396\u0005\u0006\u0000\u0000\u0396"+ + "\u0397\u0005\u0002\u0000\u0000\u0397\u03c1\u0001\u0000\u0000\u0000\u0398"+ + "\u0399\u0005\u0001\u0000\u0000\u0399\u039a\u0005\u008c\u0000\u0000\u039a"+ + "\u039b\u0003~?\u0000\u039b\u039c\u0005\u0006\u0000\u0000\u039c\u039d\u0005"+ + "\u0002\u0000\u0000\u039d\u03c1\u0001\u0000\u0000\u0000\u039e\u039f\u0005"+ + "\u0001\u0000\u0000\u039f\u03a0\u0005\u0090\u0000\u0000\u03a0\u03a1\u0003"+ + "~?\u0000\u03a1\u03a2\u0005\u0006\u0000\u0000\u03a2\u03a3\u0005\u0002\u0000"+ + "\u0000\u03a3\u03c1\u0001\u0000\u0000\u0000\u03a4\u03a5\u0005\u0001\u0000"+ + "\u0000\u03a5\u03a6\u0005\u008d\u0000\u0000\u03a6\u03a7\u0003\u0080@\u0000"+ + "\u03a7\u03a8\u0003\u008aE\u0000\u03a8\u03a9\u0005\u0002\u0000\u0000\u03a9"+ + "\u03c1\u0001\u0000\u0000\u0000\u03aa\u03ab\u0005\u0001\u0000\u0000\u03ab"+ + "\u03ac\u0005\u008e\u0000\u0000\u03ac\u03ad\u0003\u0080@\u0000\u03ad\u03ae"+ + "\u0005\u0002\u0000\u0000\u03ae\u03c1\u0001\u0000\u0000\u0000\u03af\u03b0"+ + "\u0005\u0001\u0000\u0000\u03b0\u03b1\u0005\u008f\u0000\u0000\u03b1\u03b2"+ + "\u0003\u0080@\u0000\u03b2\u03b3\u0005\u0002\u0000\u0000\u03b3\u03c1\u0001"+ + "\u0000\u0000\u0000\u03b4\u03b5\u0005\u0001\u0000\u0000\u03b5\u03b6\u0005"+ + "\u0090\u0000\u0000\u03b6\u03b7\u0003\u0080@\u0000\u03b7\u03b8\u0005\u0006"+ + "\u0000\u0000\u03b8\u03b9\u0005\u0002\u0000\u0000\u03b9\u03c1\u0001\u0000"+ + "\u0000\u0000\u03ba\u03bb\u0005\u0001\u0000\u0000\u03bb\u03bc\u0005\u0091"+ + "\u0000\u0000\u03bc\u03bd\u0003\u0080@\u0000\u03bd\u03be\u0005\u0006\u0000"+ + "\u0000\u03be\u03bf\u0005\u0002\u0000\u0000\u03bf\u03c1\u0001\u0000\u0000"+ + "\u0000\u03c0\u038c\u0001\u0000\u0000\u0000\u03c0\u0392\u0001\u0000\u0000"+ + "\u0000\u03c0\u0398\u0001\u0000\u0000\u0000\u03c0\u039e\u0001\u0000\u0000"+ + "\u0000\u03c0\u03a4\u0001\u0000\u0000\u0000\u03c0\u03aa\u0001\u0000\u0000"+ + "\u0000\u03c0\u03af\u0001\u0000\u0000\u0000\u03c0\u03b4\u0001\u0000\u0000"+ + "\u0000\u03c0\u03ba\u0001\u0000\u0000\u0000\u03c1\u0083\u0001\u0000\u0000"+ + "\u0000\u03c2\u03cf\u0003\u0080@\u0000\u03c3\u03cf\u0003\u0082A\u0000\u03c4"+ + "\u03cf\u0003~?\u0000\u03c5\u03c6\u0005\u0001\u0000\u0000\u03c6\u03c7\u0005"+ + "\u0087\u0000\u0000\u03c7\u03c9\u0003\u0002\u0001\u0000\u03c8\u03ca\u0005"+ + "\u0094\u0000\u0000\u03c9\u03c8\u0001\u0000\u0000\u0000\u03c9\u03ca\u0001"+ + "\u0000\u0000\u0000\u03ca\u03cb\u0001\u0000\u0000\u0000\u03cb\u03cc\u0005"+ + "\u0002\u0000\u0000\u03cc\u03cf\u0001\u0000\u0000\u0000\u03cd\u03cf\u0003"+ + "\u0086C\u0000\u03ce\u03c2\u0001\u0000\u0000\u0000\u03ce\u03c3\u0001\u0000"+ + "\u0000\u0000\u03ce\u03c4\u0001\u0000\u0000\u0000\u03ce\u03c5\u0001\u0000"+ + "\u0000\u0000\u03ce\u03cd\u0001\u0000\u0000\u0000\u03cf\u0085\u0001\u0000"+ + "\u0000\u0000\u03d0\u03d1\u0005\u0001\u0000\u0000\u03d1\u03d3\u0005\u0086"+ + "\u0000\u0000\u03d2\u03d4\u0005\u0094\u0000\u0000\u03d3\u03d2\u0001\u0000"+ + "\u0000\u0000\u03d3\u03d4\u0001\u0000\u0000\u0000\u03d4\u03d8\u0001\u0000"+ + "\u0000\u0000\u03d5\u03d7\u0003\u0084B\u0000\u03d6\u03d5\u0001\u0000\u0000"+ + "\u0000\u03d7\u03da\u0001\u0000\u0000\u0000\u03d8\u03d6\u0001\u0000\u0000"+ + "\u0000\u03d8\u03d9\u0001\u0000\u0000\u0000\u03d9\u03db\u0001\u0000\u0000"+ + "\u0000\u03da\u03d8\u0001\u0000\u0000\u0000\u03db\u03f1\u0005\u0002\u0000"+ + "\u0000\u03dc\u03dd\u0005\u0001\u0000\u0000\u03dd\u03df\u0005\u0092\u0000"+ + "\u0000\u03de\u03e0\u0005\u0094\u0000\u0000\u03df\u03de\u0001\u0000\u0000"+ + "\u0000\u03df\u03e0\u0001\u0000\u0000\u0000\u03e0\u03e1\u0001\u0000\u0000"+ + "\u0000\u03e1\u03e2\u0005\u0006\u0000\u0000\u03e2\u03f1\u0005\u0002\u0000"+ + "\u0000\u03e3\u03e4\u0005\u0001\u0000\u0000\u03e4\u03e6\u0005\u0093\u0000"+ + "\u0000\u03e5\u03e7\u0005\u0094\u0000\u0000\u03e6\u03e5\u0001\u0000\u0000"+ + "\u0000\u03e6\u03e7\u0001\u0000\u0000\u0000\u03e7\u03e8\u0001\u0000\u0000"+ + "\u0000\u03e8\u03e9\u0005\u0006\u0000\u0000\u03e9\u03f1\u0005\u0002\u0000"+ + "\u0000\u03ea\u03eb\u0005\u0001\u0000\u0000\u03eb\u03ed\u0005\u0093\u0000"+ + "\u0000\u03ec\u03ee\u0005\u0094\u0000\u0000\u03ed\u03ec\u0001\u0000\u0000"+ + "\u0000\u03ed\u03ee\u0001\u0000\u0000\u0000\u03ee\u03ef\u0001\u0000\u0000"+ + "\u0000\u03ef\u03f1\u0005\u0002\u0000\u0000\u03f0\u03d0\u0001\u0000\u0000"+ + "\u0000\u03f0\u03dc\u0001\u0000\u0000\u0000\u03f0\u03e3\u0001\u0000\u0000"+ + "\u0000\u03f0\u03ea\u0001\u0000\u0000\u0000\u03f1\u0087\u0001\u0000\u0000"+ + "\u0000\u03f2\u03f3\u0005\u0001\u0000\u0000\u03f3\u03f4\u0005\b\u0000\u0000"+ + "\u03f4\u03f5\u0003\u001e\u000f\u0000\u03f5\u03f6\u0005\u0002\u0000\u0000"+ + "\u03f6\u0089\u0001\u0000\u0000\u0000\u03f7\u03f9\u0003\u0088D\u0000\u03f8"+ + "\u03f7\u0001\u0000\u0000\u0000\u03f9\u03fc\u0001\u0000\u0000\u0000\u03fa"+ + "\u03f8\u0001\u0000\u0000\u0000\u03fa\u03fb\u0001\u0000\u0000\u0000\u03fb"+ + "\u008b\u0001\u0000\u0000\u0000\u03fc\u03fa\u0001\u0000\u0000\u0000\u03fd"+ + "\u03ff\u0003\u0084B\u0000\u03fe\u03fd\u0001\u0000\u0000\u0000\u03ff\u0402"+ + "\u0001\u0000\u0000\u0000\u0400\u03fe\u0001\u0000\u0000\u0000\u0400\u0401"+ + "\u0001\u0000\u0000\u0000\u0401\u0403\u0001\u0000\u0000\u0000\u0402\u0400"+ + "\u0001\u0000\u0000\u0000\u0403\u040c\u0005\u0000\u0000\u0001\u0404\u0406"+ + "\u0003z=\u0000\u0405\u0404\u0001\u0000\u0000\u0000\u0406\u0407\u0001\u0000"+ + "\u0000\u0000\u0407\u0405\u0001\u0000\u0000\u0000\u0407\u0408\u0001\u0000"+ + "\u0000\u0000\u0408\u0409\u0001\u0000\u0000\u0000\u0409\u040a\u0005\u0000"+ + "\u0000\u0001\u040a\u040c\u0001\u0000\u0000\u0000\u040b\u0400\u0001\u0000"+ + "\u0000\u0000\u040b\u0405\u0001\u0000\u0000\u0000\u040c\u008d\u0001\u0000"+ + "\u0000\u0000\u040d\u040e\u0003|>\u0000\u040e\u040f\u0005\u0000\u0000\u0001"+ + "\u040f\u0418\u0001\u0000\u0000\u0000\u0410\u0412\u0003z=\u0000\u0411\u0410"+ + "\u0001\u0000\u0000\u0000\u0412\u0415\u0001\u0000\u0000\u0000\u0413\u0411"+ + "\u0001\u0000\u0000\u0000\u0413\u0414\u0001\u0000\u0000\u0000\u0414\u0416"+ + "\u0001\u0000\u0000\u0000\u0415\u0413\u0001\u0000\u0000\u0000\u0416\u0418"+ + "\u0005\u0000\u0000\u0001\u0417\u040d\u0001\u0000\u0000\u0000\u0417\u0413"+ + "\u0001\u0000\u0000\u0000\u0418\u008f\u0001\u0000\u0000\u0000q\u009d\u00a7"+ + "\u00b3\u00b9\u00be\u00c6\u00cc\u00d4\u00da\u00eb\u0103\u0116\u0119\u011d"+ + "\u0120\u0134\u0141\u0146\u014d\u0152\u0155\u015c\u0162\u016a\u0170\u0178"+ + "\u017e\u0188\u018e\u0195\u019a\u019e\u01a3\u01a7\u01ac\u01af\u01b3\u01b5"+ + "\u01bc\u01c2\u01cf\u01d8\u01dd\u01e2\u01e8\u01f3\u01f5\u01f8\u0201\u0207"+ + "\u0211\u0217\u021d\u0223\u0227\u022e\u0234\u0239\u0240\u024a\u0250\u0255"+ + "\u0260\u0265\u026d\u0275\u027b\u0280\u0285\u0297\u029c\u02a1\u02a9\u02b1"+ + "\u02b7\u02bc\u02c1\u02d2\u02d6\u02db\u02e9\u02ee\u02f6\u02fe\u0306\u030e"+ + "\u0313\u0336\u0346\u035a\u035f\u0364\u036d\u0373\u0377\u037c\u0385\u038a"+ + "\u03c0\u03c9\u03ce\u03d3\u03d8\u03df\u03e6\u03ed\u03f0\u03fa\u0400\u0407"+ + "\u040b\u0413\u0417"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/wasm/WatParserBaseListener.java b/src/main/java/wasm/WatParserBaseListener.java index f13e580f8..83cc14508 100644 --- a/src/main/java/wasm/WatParserBaseListener.java +++ b/src/main/java/wasm/WatParserBaseListener.java @@ -1,5 +1,5 @@ package gensym.wasm; -// Generated from WatParser.g4 by ANTLR 4.13.0 +// Generated from WatParser.g4 by ANTLR 4.13.2 import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ErrorNode; @@ -240,6 +240,18 @@ public class WatParserBaseListener implements WatParserListener { *

The default implementation does nothing.

*/ @Override public void exitInstr(WatParser.InstrContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterForLoop(WatParser.ForLoopContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitForLoop(WatParser.ForLoopContext ctx) { } /** * {@inheritDoc} * diff --git a/src/main/java/wasm/WatParserListener.java b/src/main/java/wasm/WatParserListener.java index b4e4d6d44..2fecee417 100644 --- a/src/main/java/wasm/WatParserListener.java +++ b/src/main/java/wasm/WatParserListener.java @@ -1,5 +1,5 @@ package gensym.wasm; -// Generated from WatParser.g4 by ANTLR 4.13.0 +// Generated from WatParser.g4 by ANTLR 4.13.2 import org.antlr.v4.runtime.tree.ParseTreeListener; /** @@ -197,6 +197,16 @@ public interface WatParserListener extends ParseTreeListener { * @param ctx the parse tree */ void exitInstr(WatParser.InstrContext ctx); + /** + * Enter a parse tree produced by {@link WatParser#forLoop}. + * @param ctx the parse tree + */ + void enterForLoop(WatParser.ForLoopContext ctx); + /** + * Exit a parse tree produced by {@link WatParser#forLoop}. + * @param ctx the parse tree + */ + void exitForLoop(WatParser.ForLoopContext ctx); /** * Enter a parse tree produced by {@link WatParser#plainInstr}. * @param ctx the parse tree diff --git a/src/main/scala/wasm/Parser.scala b/src/main/scala/wasm/Parser.scala index 10e3dbb8f..a1101b77f 100644 --- a/src/main/scala/wasm/Parser.scala +++ b/src/main/scala/wasm/Parser.scala @@ -81,6 +81,14 @@ class GSWasmVisitor extends WatParserBaseVisitor[WIR] { def toNumType(t: String): NumType = NumType(toNumKind(t)) /* Overriding visitors */ + override def visitForLoop(ctx:ForLoopContext): Instr = { + val InstrList(init) = visit(ctx.instrList(0)) + val InstrList(cond) = visit(ctx.instrList(1)) + val InstrList(post) = visit(ctx.instrList(2)) + val InstrList(body) = visit(ctx.instrList(3)) + ForLoop(init,cond,post,body) + + } override def visitModule(ctx: ModuleContext): WIR = { if (ctx.module_() != null) return visit(ctx.module_()) From 8ca998599f2f7a980666bfc5e2fbab396925adfb Mon Sep 17 00:00:00 2001 From: Guannan Wei Date: Sat, 2 Nov 2024 01:52:06 +0100 Subject: [PATCH 5/7] regenerate java files --- grammar/WatLexer.interp | 493 -- grammar/WatLexer.java | 1496 ---- grammar/WatLexer.tokens | 281 - grammar/WatParser.interp | 385 - grammar/WatParser.java | 7314 ----------------- grammar/WatParser.tokens | 281 - grammar/WatParserBaseListener.java | 903 -- grammar/WatParserBaseVisitor.java | 518 -- grammar/WatParserListener.java | 729 -- grammar/WatParserVisitor.java | 444 - src/main/java/wasm/WatLexer.java | 6 +- src/main/java/wasm/WatParser.java | 366 +- src/main/java/wasm/WatParserBaseListener.java | 2 +- src/main/java/wasm/WatParserBaseVisitor.java | 7 + src/main/java/wasm/WatParserListener.java | 2 +- src/main/java/wasm/WatParserVisitor.java | 6 + 16 files changed, 381 insertions(+), 12852 deletions(-) delete mode 100644 grammar/WatLexer.interp delete mode 100644 grammar/WatLexer.java delete mode 100644 grammar/WatLexer.tokens delete mode 100644 grammar/WatParser.interp delete mode 100644 grammar/WatParser.java delete mode 100644 grammar/WatParser.tokens delete mode 100644 grammar/WatParserBaseListener.java delete mode 100644 grammar/WatParserBaseVisitor.java delete mode 100644 grammar/WatParserListener.java delete mode 100644 grammar/WatParserVisitor.java diff --git a/grammar/WatLexer.interp b/grammar/WatLexer.interp deleted file mode 100644 index 86e7e349a..000000000 --- a/grammar/WatLexer.interp +++ /dev/null @@ -1,493 +0,0 @@ -token literal names: -null -'(' -')' -null -null -null -null -null -null -null -'funcref' -'externref' -'mut' -'nop' -'sym_assert' -'alloc' -'free' -'unreachable' -'drop' -'block' -'loop' -'for' -'|' -'end' -'br' -'br_if' -'br_table' -'return' -'if' -'then' -'else' -'.select' -'call' -'call_indirect' -'return_call' -'return_call_indirect' -'local.get' -'local.set' -'local.tee' -'global.get' -'global.set' -null -null -'_' -'offset=' -'align=' -null -null -'i32' -'i64' -'f32' -'f64' -null -null -'.eqz' -'.eq' -'.ne' -'.lt' -'.lt_s' -'.lt_u' -'.le' -'.le_s' -'.le_u' -'.gt' -'.gt_s' -'.gt_u' -'.ge' -'.ge_s' -'.ge_u' -'.clz' -'.ctz' -'.popcnt' -'.neg' -'.abs' -'.sqrt' -'.ceil' -'.floor' -'.trunc' -'.nearest' -'.add' -'.sub' -'.mul' -'.div' -'.div_s' -'.div_u' -'.rem_s' -'.rem_u' -'.and' -'.or' -'.xor' -'.shl' -'.shr_s' -'.shr_u' -'.rotl' -'.rotr' -'.min' -'.max' -'.copysign' -'.wrap_' -'.trunc_' -'.trunc_sat_' -'.convert_' -'.extend_' -'.demote_' -'.promote_' -'.reinterpret_' -'memory.size' -'memory.grow' -'memory.fill' -'memory.copy' -'memory.init' -null -null -null -null -null -'type' -'func' -'extern' -'start' -'param' -'result' -'local' -'global' -'table' -'memory' -'elem' -'data' -'offset' -'import' -'export' -'module' -'binary' -'quote' -'script' -'register' -'invoke' -'get' -'assert_malformed' -'assert_invalid' -'assert_unlinkable' -'assert_return' -'assert_return_canonical_nan' -'assert_return_arithmetic_nan' -'assert_trap' -'assert_exhaustion' -'input' -'output' -null -'v128' -null -null - -token symbolic names: -null -LPAR -RPAR -NAT -INT -FLOAT -STRING_ -VALUE_TYPE -CONST -SYMBOLIC -FUNCREF -EXTERNREF -MUT -NOP -SYM_ASSERT -ALLOC -FREE -UNREACHABLE -DROP -BLOCK -LOOP -FOR -VBAR -END -BR -BR_IF -BR_TABLE -RETURN -IF -THEN -ELSE -SELECT -CALL -CALL_INDIRECT -RETURN_CALL -RETURN_CALL_INDIRECT -LOCAL_GET -LOCAL_SET -LOCAL_TEE -GLOBAL_GET -GLOBAL_SET -LOAD -STORE -UNDERSCORE -OFFSET_EQ -ALIGN_EQ -SIGN_POSTFIX -MEM_SIZE -I32 -I64 -F32 -F64 -IXX -FXX -OP_EQZ -OP_EQ -OP_NE -OP_LT -OP_LTS -OP_LTU -OP_LE -OP_LES -OP_LEU -OP_GT -OP_GTS -OP_GTU -OP_GE -OP_GES -OP_GEU -OP_CLZ -OP_CTZ -OP_POPCNT -OP_NEG -OP_ABS -OP_SQRT -OP_CEIL -OP_FLOOR -OP_TRUNC -OP_NEAREST -OP_ADD -OP_SUB -OP_MUL -OP_DIV -OP_DIV_S -OP_DIV_U -OP_REM_S -OP_REM_U -OP_AND -OP_OR -OP_XOR -OP_SHL -OP_SHR_S -OP_SHR_U -OP_ROTL -OP_ROTR -OP_MIN -OP_MAX -OP_COPYSIGN -OP_WRAP -OP_TRUNC_ -OP_TRUNC_SAT -OP_CONVERT -OP_EXTEND -OP_DEMOTE -OP_PROMOTE -OP_REINTER -MEMORY_SIZE -MEMORY_GROW -MEMORY_FILL -MEMORY_COPY -MEMORY_INIT -TEST -COMPARE -UNARY -BINARY -CONVERT -TYPE -FUNC -EXTERN -START_ -PARAM -RESULT -LOCAL -GLOBAL -TABLE -MEMORY -ELEM -DATA -OFFSET -IMPORT -EXPORT -MODULE -BIN -QUOTE -SCRIPT -REGISTER -INVOKE -GET -ASSERT_MALFORMED -ASSERT_INVALID -ASSERT_UNLINKABLE -ASSERT_RETURN -ASSERT_RETURN_CANONICAL_NAN -ASSERT_RETURN_ARITHMETIC_NAN -ASSERT_TRAP -ASSERT_EXHAUSTION -INPUT -OUTPUT -VAR -V128 -SPACE -COMMENT - -rule names: -LPAR -RPAR -NAT -INT -FLOAT -STRING_ -VALUE_TYPE -CONST -SYMBOLIC -FUNCREF -EXTERNREF -MUT -NOP -SYM_ASSERT -ALLOC -FREE -UNREACHABLE -DROP -BLOCK -LOOP -FOR -VBAR -END -BR -BR_IF -BR_TABLE -RETURN -IF -THEN -ELSE -SELECT -CALL -CALL_INDIRECT -RETURN_CALL -RETURN_CALL_INDIRECT -LOCAL_GET -LOCAL_SET -LOCAL_TEE -GLOBAL_GET -GLOBAL_SET -LOAD -STORE -UNDERSCORE -OFFSET_EQ -ALIGN_EQ -SIGN_POSTFIX -MEM_SIZE -I32 -I64 -F32 -F64 -IXX -FXX -OP_EQZ -OP_EQ -OP_NE -OP_LT -OP_LTS -OP_LTU -OP_LE -OP_LES -OP_LEU -OP_GT -OP_GTS -OP_GTU -OP_GE -OP_GES -OP_GEU -OP_CLZ -OP_CTZ -OP_POPCNT -OP_NEG -OP_ABS -OP_SQRT -OP_CEIL -OP_FLOOR -OP_TRUNC -OP_NEAREST -OP_ADD -OP_SUB -OP_MUL -OP_DIV -OP_DIV_S -OP_DIV_U -OP_REM_S -OP_REM_U -OP_AND -OP_OR -OP_XOR -OP_SHL -OP_SHR_S -OP_SHR_U -OP_ROTL -OP_ROTR -OP_MIN -OP_MAX -OP_COPYSIGN -OP_WRAP -OP_TRUNC_ -OP_TRUNC_SAT -OP_CONVERT -OP_EXTEND -OP_DEMOTE -OP_PROMOTE -OP_REINTER -MEMORY_SIZE -MEMORY_GROW -MEMORY_FILL -MEMORY_COPY -MEMORY_INIT -TEST -COMPARE -UNARY -BINARY -CONVERT -TYPE -FUNC -EXTERN -START_ -PARAM -RESULT -LOCAL -GLOBAL -TABLE -MEMORY -ELEM -DATA -OFFSET -IMPORT -EXPORT -MODULE -BIN -QUOTE -SCRIPT -REGISTER -INVOKE -GET -ASSERT_MALFORMED -ASSERT_INVALID -ASSERT_UNLINKABLE -ASSERT_RETURN -ASSERT_RETURN_CANONICAL_NAN -ASSERT_RETURN_ARITHMETIC_NAN -ASSERT_TRAP -ASSERT_EXHAUSTION -INPUT -OUTPUT -VAR -V128 -SPACE -COMMENT -Symbol -Num -HexNum -Sign -Digit -HexDigit -Letter -Nat -Int -Frac -HexFrac -Float -String_ -Name -Escape -NXX -Char -Ascii -Ascii_no_nl -Utf8Cont -Utf8 -Utf8_no_nl -Utf8Enc - -channel names: -DEFAULT_TOKEN_CHANNEL -HIDDEN - -mode names: -DEFAULT_MODE - -atn: -[4, 0, 151, 2128, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 629, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 639, 8, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 667, 8, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 3, 51, 687, 8, 51, 1, 52, 1, 52, 3, 52, 691, 8, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1184, 8, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 3, 112, 1259, 8, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 3, 113, 1411, 8, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 3, 114, 1575, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 4, 149, 1889, 8, 149, 11, 149, 12, 149, 1890, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 5, 150, 1899, 8, 150, 10, 150, 12, 150, 1902, 9, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 5, 150, 1910, 8, 150, 10, 150, 12, 150, 1913, 9, 150, 1, 150, 3, 150, 1916, 8, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 152, 1, 152, 3, 152, 1924, 8, 152, 1, 152, 5, 152, 1927, 8, 152, 10, 152, 12, 152, 1930, 9, 152, 1, 153, 1, 153, 3, 153, 1934, 8, 153, 1, 153, 5, 153, 1937, 8, 153, 10, 153, 12, 153, 1940, 9, 153, 1, 154, 1, 154, 1, 155, 1, 155, 1, 156, 1, 156, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 3, 158, 1955, 8, 158, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 161, 1, 161, 1, 162, 3, 162, 1965, 8, 162, 1, 162, 1, 162, 1, 162, 3, 162, 1970, 8, 162, 1, 162, 3, 162, 1973, 8, 162, 1, 162, 1, 162, 1, 162, 3, 162, 1978, 8, 162, 3, 162, 1980, 8, 162, 1, 162, 1, 162, 3, 162, 1984, 8, 162, 1, 162, 1, 162, 1, 162, 3, 162, 1989, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 1997, 8, 162, 1, 162, 3, 162, 2000, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 2008, 8, 162, 3, 162, 2010, 8, 162, 1, 162, 1, 162, 3, 162, 2014, 8, 162, 1, 162, 1, 162, 1, 162, 3, 162, 2019, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 2025, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 2031, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 2042, 8, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 4, 163, 2056, 8, 163, 11, 163, 12, 163, 2057, 1, 163, 1, 163, 5, 163, 2062, 8, 163, 10, 163, 12, 163, 2065, 9, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 4, 164, 2074, 8, 164, 11, 164, 12, 164, 2075, 1, 165, 1, 165, 1, 166, 1, 166, 3, 166, 2082, 8, 166, 1, 167, 1, 167, 1, 168, 1, 168, 1, 169, 1, 169, 1, 170, 1, 170, 1, 171, 1, 171, 3, 171, 2094, 8, 171, 1, 172, 1, 172, 3, 172, 2098, 8, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 3, 173, 2127, 8, 173, 2, 1900, 1911, 0, 174, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 0, 305, 0, 307, 0, 309, 0, 311, 0, 313, 0, 315, 0, 317, 0, 319, 0, 321, 0, 323, 0, 325, 0, 327, 0, 329, 0, 331, 0, 333, 0, 335, 0, 337, 0, 339, 0, 341, 0, 343, 0, 345, 0, 347, 0, 1, 0, 26, 2, 0, 115, 115, 117, 117, 3, 0, 9, 10, 13, 13, 32, 32, 11, 0, 33, 33, 35, 39, 42, 43, 45, 47, 58, 58, 60, 64, 92, 92, 94, 94, 96, 96, 124, 124, 126, 126, 2, 0, 43, 43, 45, 45, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 65, 90, 97, 122, 2, 0, 69, 69, 101, 101, 2, 0, 80, 80, 112, 112, 3, 0, 9, 10, 39, 39, 92, 92, 6, 0, 34, 34, 39, 39, 92, 92, 110, 110, 114, 114, 116, 116, 5, 0, 0, 31, 34, 34, 39, 39, 92, 92, 127, 255, 1, 0, 0, 127, 2, 0, 0, 9, 11, 127, 1, 0, 128, 191, 1, 0, 194, 223, 1, 0, 224, 224, 1, 0, 160, 191, 1, 0, 237, 237, 1, 0, 128, 159, 2, 0, 225, 236, 238, 239, 1, 0, 240, 240, 1, 0, 144, 191, 1, 0, 244, 244, 1, 0, 128, 143, 1, 0, 241, 243, 2214, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 1, 349, 1, 0, 0, 0, 3, 351, 1, 0, 0, 0, 5, 353, 1, 0, 0, 0, 7, 355, 1, 0, 0, 0, 9, 357, 1, 0, 0, 0, 11, 359, 1, 0, 0, 0, 13, 361, 1, 0, 0, 0, 15, 363, 1, 0, 0, 0, 17, 371, 1, 0, 0, 0, 19, 382, 1, 0, 0, 0, 21, 390, 1, 0, 0, 0, 23, 400, 1, 0, 0, 0, 25, 404, 1, 0, 0, 0, 27, 408, 1, 0, 0, 0, 29, 419, 1, 0, 0, 0, 31, 425, 1, 0, 0, 0, 33, 430, 1, 0, 0, 0, 35, 442, 1, 0, 0, 0, 37, 447, 1, 0, 0, 0, 39, 453, 1, 0, 0, 0, 41, 458, 1, 0, 0, 0, 43, 462, 1, 0, 0, 0, 45, 464, 1, 0, 0, 0, 47, 468, 1, 0, 0, 0, 49, 471, 1, 0, 0, 0, 51, 477, 1, 0, 0, 0, 53, 486, 1, 0, 0, 0, 55, 493, 1, 0, 0, 0, 57, 496, 1, 0, 0, 0, 59, 501, 1, 0, 0, 0, 61, 506, 1, 0, 0, 0, 63, 514, 1, 0, 0, 0, 65, 519, 1, 0, 0, 0, 67, 533, 1, 0, 0, 0, 69, 545, 1, 0, 0, 0, 71, 566, 1, 0, 0, 0, 73, 576, 1, 0, 0, 0, 75, 586, 1, 0, 0, 0, 77, 596, 1, 0, 0, 0, 79, 607, 1, 0, 0, 0, 81, 618, 1, 0, 0, 0, 83, 630, 1, 0, 0, 0, 85, 640, 1, 0, 0, 0, 87, 642, 1, 0, 0, 0, 89, 650, 1, 0, 0, 0, 91, 657, 1, 0, 0, 0, 93, 666, 1, 0, 0, 0, 95, 668, 1, 0, 0, 0, 97, 672, 1, 0, 0, 0, 99, 676, 1, 0, 0, 0, 101, 680, 1, 0, 0, 0, 103, 686, 1, 0, 0, 0, 105, 690, 1, 0, 0, 0, 107, 692, 1, 0, 0, 0, 109, 697, 1, 0, 0, 0, 111, 701, 1, 0, 0, 0, 113, 705, 1, 0, 0, 0, 115, 709, 1, 0, 0, 0, 117, 715, 1, 0, 0, 0, 119, 721, 1, 0, 0, 0, 121, 725, 1, 0, 0, 0, 123, 731, 1, 0, 0, 0, 125, 737, 1, 0, 0, 0, 127, 741, 1, 0, 0, 0, 129, 747, 1, 0, 0, 0, 131, 753, 1, 0, 0, 0, 133, 757, 1, 0, 0, 0, 135, 763, 1, 0, 0, 0, 137, 769, 1, 0, 0, 0, 139, 774, 1, 0, 0, 0, 141, 779, 1, 0, 0, 0, 143, 787, 1, 0, 0, 0, 145, 792, 1, 0, 0, 0, 147, 797, 1, 0, 0, 0, 149, 803, 1, 0, 0, 0, 151, 809, 1, 0, 0, 0, 153, 816, 1, 0, 0, 0, 155, 823, 1, 0, 0, 0, 157, 832, 1, 0, 0, 0, 159, 837, 1, 0, 0, 0, 161, 842, 1, 0, 0, 0, 163, 847, 1, 0, 0, 0, 165, 852, 1, 0, 0, 0, 167, 859, 1, 0, 0, 0, 169, 866, 1, 0, 0, 0, 171, 873, 1, 0, 0, 0, 173, 880, 1, 0, 0, 0, 175, 885, 1, 0, 0, 0, 177, 889, 1, 0, 0, 0, 179, 894, 1, 0, 0, 0, 181, 899, 1, 0, 0, 0, 183, 906, 1, 0, 0, 0, 185, 913, 1, 0, 0, 0, 187, 919, 1, 0, 0, 0, 189, 925, 1, 0, 0, 0, 191, 930, 1, 0, 0, 0, 193, 935, 1, 0, 0, 0, 195, 945, 1, 0, 0, 0, 197, 952, 1, 0, 0, 0, 199, 960, 1, 0, 0, 0, 201, 972, 1, 0, 0, 0, 203, 982, 1, 0, 0, 0, 205, 991, 1, 0, 0, 0, 207, 1000, 1, 0, 0, 0, 209, 1010, 1, 0, 0, 0, 211, 1024, 1, 0, 0, 0, 213, 1036, 1, 0, 0, 0, 215, 1048, 1, 0, 0, 0, 217, 1060, 1, 0, 0, 0, 219, 1072, 1, 0, 0, 0, 221, 1084, 1, 0, 0, 0, 223, 1183, 1, 0, 0, 0, 225, 1258, 1, 0, 0, 0, 227, 1410, 1, 0, 0, 0, 229, 1574, 1, 0, 0, 0, 231, 1576, 1, 0, 0, 0, 233, 1581, 1, 0, 0, 0, 235, 1586, 1, 0, 0, 0, 237, 1593, 1, 0, 0, 0, 239, 1599, 1, 0, 0, 0, 241, 1605, 1, 0, 0, 0, 243, 1612, 1, 0, 0, 0, 245, 1618, 1, 0, 0, 0, 247, 1625, 1, 0, 0, 0, 249, 1631, 1, 0, 0, 0, 251, 1638, 1, 0, 0, 0, 253, 1643, 1, 0, 0, 0, 255, 1648, 1, 0, 0, 0, 257, 1655, 1, 0, 0, 0, 259, 1662, 1, 0, 0, 0, 261, 1669, 1, 0, 0, 0, 263, 1676, 1, 0, 0, 0, 265, 1683, 1, 0, 0, 0, 267, 1689, 1, 0, 0, 0, 269, 1696, 1, 0, 0, 0, 271, 1705, 1, 0, 0, 0, 273, 1712, 1, 0, 0, 0, 275, 1716, 1, 0, 0, 0, 277, 1733, 1, 0, 0, 0, 279, 1748, 1, 0, 0, 0, 281, 1766, 1, 0, 0, 0, 283, 1780, 1, 0, 0, 0, 285, 1808, 1, 0, 0, 0, 287, 1837, 1, 0, 0, 0, 289, 1849, 1, 0, 0, 0, 291, 1867, 1, 0, 0, 0, 293, 1873, 1, 0, 0, 0, 295, 1880, 1, 0, 0, 0, 297, 1882, 1, 0, 0, 0, 299, 1888, 1, 0, 0, 0, 301, 1915, 1, 0, 0, 0, 303, 1919, 1, 0, 0, 0, 305, 1921, 1, 0, 0, 0, 307, 1931, 1, 0, 0, 0, 309, 1941, 1, 0, 0, 0, 311, 1943, 1, 0, 0, 0, 313, 1945, 1, 0, 0, 0, 315, 1947, 1, 0, 0, 0, 317, 1954, 1, 0, 0, 0, 319, 1956, 1, 0, 0, 0, 321, 1959, 1, 0, 0, 0, 323, 1961, 1, 0, 0, 0, 325, 2041, 1, 0, 0, 0, 327, 2043, 1, 0, 0, 0, 329, 2068, 1, 0, 0, 0, 331, 2077, 1, 0, 0, 0, 333, 2081, 1, 0, 0, 0, 335, 2083, 1, 0, 0, 0, 337, 2085, 1, 0, 0, 0, 339, 2087, 1, 0, 0, 0, 341, 2089, 1, 0, 0, 0, 343, 2093, 1, 0, 0, 0, 345, 2097, 1, 0, 0, 0, 347, 2126, 1, 0, 0, 0, 349, 350, 5, 40, 0, 0, 350, 2, 1, 0, 0, 0, 351, 352, 5, 41, 0, 0, 352, 4, 1, 0, 0, 0, 353, 354, 3, 317, 158, 0, 354, 6, 1, 0, 0, 0, 355, 356, 3, 319, 159, 0, 356, 8, 1, 0, 0, 0, 357, 358, 3, 325, 162, 0, 358, 10, 1, 0, 0, 0, 359, 360, 3, 327, 163, 0, 360, 12, 1, 0, 0, 0, 361, 362, 3, 333, 166, 0, 362, 14, 1, 0, 0, 0, 363, 364, 3, 333, 166, 0, 364, 365, 5, 46, 0, 0, 365, 366, 5, 99, 0, 0, 366, 367, 5, 111, 0, 0, 367, 368, 5, 110, 0, 0, 368, 369, 5, 115, 0, 0, 369, 370, 5, 116, 0, 0, 370, 16, 1, 0, 0, 0, 371, 372, 3, 333, 166, 0, 372, 373, 5, 46, 0, 0, 373, 374, 5, 115, 0, 0, 374, 375, 5, 121, 0, 0, 375, 376, 5, 109, 0, 0, 376, 377, 5, 98, 0, 0, 377, 378, 5, 111, 0, 0, 378, 379, 5, 108, 0, 0, 379, 380, 5, 105, 0, 0, 380, 381, 5, 99, 0, 0, 381, 18, 1, 0, 0, 0, 382, 383, 5, 102, 0, 0, 383, 384, 5, 117, 0, 0, 384, 385, 5, 110, 0, 0, 385, 386, 5, 99, 0, 0, 386, 387, 5, 114, 0, 0, 387, 388, 5, 101, 0, 0, 388, 389, 5, 102, 0, 0, 389, 20, 1, 0, 0, 0, 390, 391, 5, 101, 0, 0, 391, 392, 5, 120, 0, 0, 392, 393, 5, 116, 0, 0, 393, 394, 5, 101, 0, 0, 394, 395, 5, 114, 0, 0, 395, 396, 5, 110, 0, 0, 396, 397, 5, 114, 0, 0, 397, 398, 5, 101, 0, 0, 398, 399, 5, 102, 0, 0, 399, 22, 1, 0, 0, 0, 400, 401, 5, 109, 0, 0, 401, 402, 5, 117, 0, 0, 402, 403, 5, 116, 0, 0, 403, 24, 1, 0, 0, 0, 404, 405, 5, 110, 0, 0, 405, 406, 5, 111, 0, 0, 406, 407, 5, 112, 0, 0, 407, 26, 1, 0, 0, 0, 408, 409, 5, 115, 0, 0, 409, 410, 5, 121, 0, 0, 410, 411, 5, 109, 0, 0, 411, 412, 5, 95, 0, 0, 412, 413, 5, 97, 0, 0, 413, 414, 5, 115, 0, 0, 414, 415, 5, 115, 0, 0, 415, 416, 5, 101, 0, 0, 416, 417, 5, 114, 0, 0, 417, 418, 5, 116, 0, 0, 418, 28, 1, 0, 0, 0, 419, 420, 5, 97, 0, 0, 420, 421, 5, 108, 0, 0, 421, 422, 5, 108, 0, 0, 422, 423, 5, 111, 0, 0, 423, 424, 5, 99, 0, 0, 424, 30, 1, 0, 0, 0, 425, 426, 5, 102, 0, 0, 426, 427, 5, 114, 0, 0, 427, 428, 5, 101, 0, 0, 428, 429, 5, 101, 0, 0, 429, 32, 1, 0, 0, 0, 430, 431, 5, 117, 0, 0, 431, 432, 5, 110, 0, 0, 432, 433, 5, 114, 0, 0, 433, 434, 5, 101, 0, 0, 434, 435, 5, 97, 0, 0, 435, 436, 5, 99, 0, 0, 436, 437, 5, 104, 0, 0, 437, 438, 5, 97, 0, 0, 438, 439, 5, 98, 0, 0, 439, 440, 5, 108, 0, 0, 440, 441, 5, 101, 0, 0, 441, 34, 1, 0, 0, 0, 442, 443, 5, 100, 0, 0, 443, 444, 5, 114, 0, 0, 444, 445, 5, 111, 0, 0, 445, 446, 5, 112, 0, 0, 446, 36, 1, 0, 0, 0, 447, 448, 5, 98, 0, 0, 448, 449, 5, 108, 0, 0, 449, 450, 5, 111, 0, 0, 450, 451, 5, 99, 0, 0, 451, 452, 5, 107, 0, 0, 452, 38, 1, 0, 0, 0, 453, 454, 5, 108, 0, 0, 454, 455, 5, 111, 0, 0, 455, 456, 5, 111, 0, 0, 456, 457, 5, 112, 0, 0, 457, 40, 1, 0, 0, 0, 458, 459, 5, 102, 0, 0, 459, 460, 5, 111, 0, 0, 460, 461, 5, 114, 0, 0, 461, 42, 1, 0, 0, 0, 462, 463, 5, 124, 0, 0, 463, 44, 1, 0, 0, 0, 464, 465, 5, 101, 0, 0, 465, 466, 5, 110, 0, 0, 466, 467, 5, 100, 0, 0, 467, 46, 1, 0, 0, 0, 468, 469, 5, 98, 0, 0, 469, 470, 5, 114, 0, 0, 470, 48, 1, 0, 0, 0, 471, 472, 5, 98, 0, 0, 472, 473, 5, 114, 0, 0, 473, 474, 5, 95, 0, 0, 474, 475, 5, 105, 0, 0, 475, 476, 5, 102, 0, 0, 476, 50, 1, 0, 0, 0, 477, 478, 5, 98, 0, 0, 478, 479, 5, 114, 0, 0, 479, 480, 5, 95, 0, 0, 480, 481, 5, 116, 0, 0, 481, 482, 5, 97, 0, 0, 482, 483, 5, 98, 0, 0, 483, 484, 5, 108, 0, 0, 484, 485, 5, 101, 0, 0, 485, 52, 1, 0, 0, 0, 486, 487, 5, 114, 0, 0, 487, 488, 5, 101, 0, 0, 488, 489, 5, 116, 0, 0, 489, 490, 5, 117, 0, 0, 490, 491, 5, 114, 0, 0, 491, 492, 5, 110, 0, 0, 492, 54, 1, 0, 0, 0, 493, 494, 5, 105, 0, 0, 494, 495, 5, 102, 0, 0, 495, 56, 1, 0, 0, 0, 496, 497, 5, 116, 0, 0, 497, 498, 5, 104, 0, 0, 498, 499, 5, 101, 0, 0, 499, 500, 5, 110, 0, 0, 500, 58, 1, 0, 0, 0, 501, 502, 5, 101, 0, 0, 502, 503, 5, 108, 0, 0, 503, 504, 5, 115, 0, 0, 504, 505, 5, 101, 0, 0, 505, 60, 1, 0, 0, 0, 506, 507, 5, 46, 0, 0, 507, 508, 5, 115, 0, 0, 508, 509, 5, 101, 0, 0, 509, 510, 5, 108, 0, 0, 510, 511, 5, 101, 0, 0, 511, 512, 5, 99, 0, 0, 512, 513, 5, 116, 0, 0, 513, 62, 1, 0, 0, 0, 514, 515, 5, 99, 0, 0, 515, 516, 5, 97, 0, 0, 516, 517, 5, 108, 0, 0, 517, 518, 5, 108, 0, 0, 518, 64, 1, 0, 0, 0, 519, 520, 5, 99, 0, 0, 520, 521, 5, 97, 0, 0, 521, 522, 5, 108, 0, 0, 522, 523, 5, 108, 0, 0, 523, 524, 5, 95, 0, 0, 524, 525, 5, 105, 0, 0, 525, 526, 5, 110, 0, 0, 526, 527, 5, 100, 0, 0, 527, 528, 5, 105, 0, 0, 528, 529, 5, 114, 0, 0, 529, 530, 5, 101, 0, 0, 530, 531, 5, 99, 0, 0, 531, 532, 5, 116, 0, 0, 532, 66, 1, 0, 0, 0, 533, 534, 5, 114, 0, 0, 534, 535, 5, 101, 0, 0, 535, 536, 5, 116, 0, 0, 536, 537, 5, 117, 0, 0, 537, 538, 5, 114, 0, 0, 538, 539, 5, 110, 0, 0, 539, 540, 5, 95, 0, 0, 540, 541, 5, 99, 0, 0, 541, 542, 5, 97, 0, 0, 542, 543, 5, 108, 0, 0, 543, 544, 5, 108, 0, 0, 544, 68, 1, 0, 0, 0, 545, 546, 5, 114, 0, 0, 546, 547, 5, 101, 0, 0, 547, 548, 5, 116, 0, 0, 548, 549, 5, 117, 0, 0, 549, 550, 5, 114, 0, 0, 550, 551, 5, 110, 0, 0, 551, 552, 5, 95, 0, 0, 552, 553, 5, 99, 0, 0, 553, 554, 5, 97, 0, 0, 554, 555, 5, 108, 0, 0, 555, 556, 5, 108, 0, 0, 556, 557, 5, 95, 0, 0, 557, 558, 5, 105, 0, 0, 558, 559, 5, 110, 0, 0, 559, 560, 5, 100, 0, 0, 560, 561, 5, 105, 0, 0, 561, 562, 5, 114, 0, 0, 562, 563, 5, 101, 0, 0, 563, 564, 5, 99, 0, 0, 564, 565, 5, 116, 0, 0, 565, 70, 1, 0, 0, 0, 566, 567, 5, 108, 0, 0, 567, 568, 5, 111, 0, 0, 568, 569, 5, 99, 0, 0, 569, 570, 5, 97, 0, 0, 570, 571, 5, 108, 0, 0, 571, 572, 5, 46, 0, 0, 572, 573, 5, 103, 0, 0, 573, 574, 5, 101, 0, 0, 574, 575, 5, 116, 0, 0, 575, 72, 1, 0, 0, 0, 576, 577, 5, 108, 0, 0, 577, 578, 5, 111, 0, 0, 578, 579, 5, 99, 0, 0, 579, 580, 5, 97, 0, 0, 580, 581, 5, 108, 0, 0, 581, 582, 5, 46, 0, 0, 582, 583, 5, 115, 0, 0, 583, 584, 5, 101, 0, 0, 584, 585, 5, 116, 0, 0, 585, 74, 1, 0, 0, 0, 586, 587, 5, 108, 0, 0, 587, 588, 5, 111, 0, 0, 588, 589, 5, 99, 0, 0, 589, 590, 5, 97, 0, 0, 590, 591, 5, 108, 0, 0, 591, 592, 5, 46, 0, 0, 592, 593, 5, 116, 0, 0, 593, 594, 5, 101, 0, 0, 594, 595, 5, 101, 0, 0, 595, 76, 1, 0, 0, 0, 596, 597, 5, 103, 0, 0, 597, 598, 5, 108, 0, 0, 598, 599, 5, 111, 0, 0, 599, 600, 5, 98, 0, 0, 600, 601, 5, 97, 0, 0, 601, 602, 5, 108, 0, 0, 602, 603, 5, 46, 0, 0, 603, 604, 5, 103, 0, 0, 604, 605, 5, 101, 0, 0, 605, 606, 5, 116, 0, 0, 606, 78, 1, 0, 0, 0, 607, 608, 5, 103, 0, 0, 608, 609, 5, 108, 0, 0, 609, 610, 5, 111, 0, 0, 610, 611, 5, 98, 0, 0, 611, 612, 5, 97, 0, 0, 612, 613, 5, 108, 0, 0, 613, 614, 5, 46, 0, 0, 614, 615, 5, 115, 0, 0, 615, 616, 5, 101, 0, 0, 616, 617, 5, 116, 0, 0, 617, 80, 1, 0, 0, 0, 618, 619, 5, 46, 0, 0, 619, 620, 5, 108, 0, 0, 620, 621, 5, 111, 0, 0, 621, 622, 5, 97, 0, 0, 622, 623, 5, 100, 0, 0, 623, 628, 1, 0, 0, 0, 624, 625, 3, 93, 46, 0, 625, 626, 3, 85, 42, 0, 626, 627, 3, 91, 45, 0, 627, 629, 1, 0, 0, 0, 628, 624, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 82, 1, 0, 0, 0, 630, 631, 5, 46, 0, 0, 631, 632, 5, 115, 0, 0, 632, 633, 5, 116, 0, 0, 633, 634, 5, 111, 0, 0, 634, 635, 5, 114, 0, 0, 635, 636, 5, 101, 0, 0, 636, 638, 1, 0, 0, 0, 637, 639, 3, 93, 46, 0, 638, 637, 1, 0, 0, 0, 638, 639, 1, 0, 0, 0, 639, 84, 1, 0, 0, 0, 640, 641, 5, 95, 0, 0, 641, 86, 1, 0, 0, 0, 642, 643, 5, 111, 0, 0, 643, 644, 5, 102, 0, 0, 644, 645, 5, 102, 0, 0, 645, 646, 5, 115, 0, 0, 646, 647, 5, 101, 0, 0, 647, 648, 5, 116, 0, 0, 648, 649, 5, 61, 0, 0, 649, 88, 1, 0, 0, 0, 650, 651, 5, 97, 0, 0, 651, 652, 5, 108, 0, 0, 652, 653, 5, 105, 0, 0, 653, 654, 5, 103, 0, 0, 654, 655, 5, 110, 0, 0, 655, 656, 5, 61, 0, 0, 656, 90, 1, 0, 0, 0, 657, 658, 7, 0, 0, 0, 658, 92, 1, 0, 0, 0, 659, 667, 5, 56, 0, 0, 660, 661, 5, 49, 0, 0, 661, 667, 5, 54, 0, 0, 662, 663, 5, 51, 0, 0, 663, 667, 5, 50, 0, 0, 664, 665, 5, 54, 0, 0, 665, 667, 5, 52, 0, 0, 666, 659, 1, 0, 0, 0, 666, 660, 1, 0, 0, 0, 666, 662, 1, 0, 0, 0, 666, 664, 1, 0, 0, 0, 667, 94, 1, 0, 0, 0, 668, 669, 5, 105, 0, 0, 669, 670, 5, 51, 0, 0, 670, 671, 5, 50, 0, 0, 671, 96, 1, 0, 0, 0, 672, 673, 5, 105, 0, 0, 673, 674, 5, 54, 0, 0, 674, 675, 5, 52, 0, 0, 675, 98, 1, 0, 0, 0, 676, 677, 5, 102, 0, 0, 677, 678, 5, 51, 0, 0, 678, 679, 5, 50, 0, 0, 679, 100, 1, 0, 0, 0, 680, 681, 5, 102, 0, 0, 681, 682, 5, 54, 0, 0, 682, 683, 5, 52, 0, 0, 683, 102, 1, 0, 0, 0, 684, 687, 3, 95, 47, 0, 685, 687, 3, 97, 48, 0, 686, 684, 1, 0, 0, 0, 686, 685, 1, 0, 0, 0, 687, 104, 1, 0, 0, 0, 688, 691, 3, 99, 49, 0, 689, 691, 3, 101, 50, 0, 690, 688, 1, 0, 0, 0, 690, 689, 1, 0, 0, 0, 691, 106, 1, 0, 0, 0, 692, 693, 5, 46, 0, 0, 693, 694, 5, 101, 0, 0, 694, 695, 5, 113, 0, 0, 695, 696, 5, 122, 0, 0, 696, 108, 1, 0, 0, 0, 697, 698, 5, 46, 0, 0, 698, 699, 5, 101, 0, 0, 699, 700, 5, 113, 0, 0, 700, 110, 1, 0, 0, 0, 701, 702, 5, 46, 0, 0, 702, 703, 5, 110, 0, 0, 703, 704, 5, 101, 0, 0, 704, 112, 1, 0, 0, 0, 705, 706, 5, 46, 0, 0, 706, 707, 5, 108, 0, 0, 707, 708, 5, 116, 0, 0, 708, 114, 1, 0, 0, 0, 709, 710, 5, 46, 0, 0, 710, 711, 5, 108, 0, 0, 711, 712, 5, 116, 0, 0, 712, 713, 5, 95, 0, 0, 713, 714, 5, 115, 0, 0, 714, 116, 1, 0, 0, 0, 715, 716, 5, 46, 0, 0, 716, 717, 5, 108, 0, 0, 717, 718, 5, 116, 0, 0, 718, 719, 5, 95, 0, 0, 719, 720, 5, 117, 0, 0, 720, 118, 1, 0, 0, 0, 721, 722, 5, 46, 0, 0, 722, 723, 5, 108, 0, 0, 723, 724, 5, 101, 0, 0, 724, 120, 1, 0, 0, 0, 725, 726, 5, 46, 0, 0, 726, 727, 5, 108, 0, 0, 727, 728, 5, 101, 0, 0, 728, 729, 5, 95, 0, 0, 729, 730, 5, 115, 0, 0, 730, 122, 1, 0, 0, 0, 731, 732, 5, 46, 0, 0, 732, 733, 5, 108, 0, 0, 733, 734, 5, 101, 0, 0, 734, 735, 5, 95, 0, 0, 735, 736, 5, 117, 0, 0, 736, 124, 1, 0, 0, 0, 737, 738, 5, 46, 0, 0, 738, 739, 5, 103, 0, 0, 739, 740, 5, 116, 0, 0, 740, 126, 1, 0, 0, 0, 741, 742, 5, 46, 0, 0, 742, 743, 5, 103, 0, 0, 743, 744, 5, 116, 0, 0, 744, 745, 5, 95, 0, 0, 745, 746, 5, 115, 0, 0, 746, 128, 1, 0, 0, 0, 747, 748, 5, 46, 0, 0, 748, 749, 5, 103, 0, 0, 749, 750, 5, 116, 0, 0, 750, 751, 5, 95, 0, 0, 751, 752, 5, 117, 0, 0, 752, 130, 1, 0, 0, 0, 753, 754, 5, 46, 0, 0, 754, 755, 5, 103, 0, 0, 755, 756, 5, 101, 0, 0, 756, 132, 1, 0, 0, 0, 757, 758, 5, 46, 0, 0, 758, 759, 5, 103, 0, 0, 759, 760, 5, 101, 0, 0, 760, 761, 5, 95, 0, 0, 761, 762, 5, 115, 0, 0, 762, 134, 1, 0, 0, 0, 763, 764, 5, 46, 0, 0, 764, 765, 5, 103, 0, 0, 765, 766, 5, 101, 0, 0, 766, 767, 5, 95, 0, 0, 767, 768, 5, 117, 0, 0, 768, 136, 1, 0, 0, 0, 769, 770, 5, 46, 0, 0, 770, 771, 5, 99, 0, 0, 771, 772, 5, 108, 0, 0, 772, 773, 5, 122, 0, 0, 773, 138, 1, 0, 0, 0, 774, 775, 5, 46, 0, 0, 775, 776, 5, 99, 0, 0, 776, 777, 5, 116, 0, 0, 777, 778, 5, 122, 0, 0, 778, 140, 1, 0, 0, 0, 779, 780, 5, 46, 0, 0, 780, 781, 5, 112, 0, 0, 781, 782, 5, 111, 0, 0, 782, 783, 5, 112, 0, 0, 783, 784, 5, 99, 0, 0, 784, 785, 5, 110, 0, 0, 785, 786, 5, 116, 0, 0, 786, 142, 1, 0, 0, 0, 787, 788, 5, 46, 0, 0, 788, 789, 5, 110, 0, 0, 789, 790, 5, 101, 0, 0, 790, 791, 5, 103, 0, 0, 791, 144, 1, 0, 0, 0, 792, 793, 5, 46, 0, 0, 793, 794, 5, 97, 0, 0, 794, 795, 5, 98, 0, 0, 795, 796, 5, 115, 0, 0, 796, 146, 1, 0, 0, 0, 797, 798, 5, 46, 0, 0, 798, 799, 5, 115, 0, 0, 799, 800, 5, 113, 0, 0, 800, 801, 5, 114, 0, 0, 801, 802, 5, 116, 0, 0, 802, 148, 1, 0, 0, 0, 803, 804, 5, 46, 0, 0, 804, 805, 5, 99, 0, 0, 805, 806, 5, 101, 0, 0, 806, 807, 5, 105, 0, 0, 807, 808, 5, 108, 0, 0, 808, 150, 1, 0, 0, 0, 809, 810, 5, 46, 0, 0, 810, 811, 5, 102, 0, 0, 811, 812, 5, 108, 0, 0, 812, 813, 5, 111, 0, 0, 813, 814, 5, 111, 0, 0, 814, 815, 5, 114, 0, 0, 815, 152, 1, 0, 0, 0, 816, 817, 5, 46, 0, 0, 817, 818, 5, 116, 0, 0, 818, 819, 5, 114, 0, 0, 819, 820, 5, 117, 0, 0, 820, 821, 5, 110, 0, 0, 821, 822, 5, 99, 0, 0, 822, 154, 1, 0, 0, 0, 823, 824, 5, 46, 0, 0, 824, 825, 5, 110, 0, 0, 825, 826, 5, 101, 0, 0, 826, 827, 5, 97, 0, 0, 827, 828, 5, 114, 0, 0, 828, 829, 5, 101, 0, 0, 829, 830, 5, 115, 0, 0, 830, 831, 5, 116, 0, 0, 831, 156, 1, 0, 0, 0, 832, 833, 5, 46, 0, 0, 833, 834, 5, 97, 0, 0, 834, 835, 5, 100, 0, 0, 835, 836, 5, 100, 0, 0, 836, 158, 1, 0, 0, 0, 837, 838, 5, 46, 0, 0, 838, 839, 5, 115, 0, 0, 839, 840, 5, 117, 0, 0, 840, 841, 5, 98, 0, 0, 841, 160, 1, 0, 0, 0, 842, 843, 5, 46, 0, 0, 843, 844, 5, 109, 0, 0, 844, 845, 5, 117, 0, 0, 845, 846, 5, 108, 0, 0, 846, 162, 1, 0, 0, 0, 847, 848, 5, 46, 0, 0, 848, 849, 5, 100, 0, 0, 849, 850, 5, 105, 0, 0, 850, 851, 5, 118, 0, 0, 851, 164, 1, 0, 0, 0, 852, 853, 5, 46, 0, 0, 853, 854, 5, 100, 0, 0, 854, 855, 5, 105, 0, 0, 855, 856, 5, 118, 0, 0, 856, 857, 5, 95, 0, 0, 857, 858, 5, 115, 0, 0, 858, 166, 1, 0, 0, 0, 859, 860, 5, 46, 0, 0, 860, 861, 5, 100, 0, 0, 861, 862, 5, 105, 0, 0, 862, 863, 5, 118, 0, 0, 863, 864, 5, 95, 0, 0, 864, 865, 5, 117, 0, 0, 865, 168, 1, 0, 0, 0, 866, 867, 5, 46, 0, 0, 867, 868, 5, 114, 0, 0, 868, 869, 5, 101, 0, 0, 869, 870, 5, 109, 0, 0, 870, 871, 5, 95, 0, 0, 871, 872, 5, 115, 0, 0, 872, 170, 1, 0, 0, 0, 873, 874, 5, 46, 0, 0, 874, 875, 5, 114, 0, 0, 875, 876, 5, 101, 0, 0, 876, 877, 5, 109, 0, 0, 877, 878, 5, 95, 0, 0, 878, 879, 5, 117, 0, 0, 879, 172, 1, 0, 0, 0, 880, 881, 5, 46, 0, 0, 881, 882, 5, 97, 0, 0, 882, 883, 5, 110, 0, 0, 883, 884, 5, 100, 0, 0, 884, 174, 1, 0, 0, 0, 885, 886, 5, 46, 0, 0, 886, 887, 5, 111, 0, 0, 887, 888, 5, 114, 0, 0, 888, 176, 1, 0, 0, 0, 889, 890, 5, 46, 0, 0, 890, 891, 5, 120, 0, 0, 891, 892, 5, 111, 0, 0, 892, 893, 5, 114, 0, 0, 893, 178, 1, 0, 0, 0, 894, 895, 5, 46, 0, 0, 895, 896, 5, 115, 0, 0, 896, 897, 5, 104, 0, 0, 897, 898, 5, 108, 0, 0, 898, 180, 1, 0, 0, 0, 899, 900, 5, 46, 0, 0, 900, 901, 5, 115, 0, 0, 901, 902, 5, 104, 0, 0, 902, 903, 5, 114, 0, 0, 903, 904, 5, 95, 0, 0, 904, 905, 5, 115, 0, 0, 905, 182, 1, 0, 0, 0, 906, 907, 5, 46, 0, 0, 907, 908, 5, 115, 0, 0, 908, 909, 5, 104, 0, 0, 909, 910, 5, 114, 0, 0, 910, 911, 5, 95, 0, 0, 911, 912, 5, 117, 0, 0, 912, 184, 1, 0, 0, 0, 913, 914, 5, 46, 0, 0, 914, 915, 5, 114, 0, 0, 915, 916, 5, 111, 0, 0, 916, 917, 5, 116, 0, 0, 917, 918, 5, 108, 0, 0, 918, 186, 1, 0, 0, 0, 919, 920, 5, 46, 0, 0, 920, 921, 5, 114, 0, 0, 921, 922, 5, 111, 0, 0, 922, 923, 5, 116, 0, 0, 923, 924, 5, 114, 0, 0, 924, 188, 1, 0, 0, 0, 925, 926, 5, 46, 0, 0, 926, 927, 5, 109, 0, 0, 927, 928, 5, 105, 0, 0, 928, 929, 5, 110, 0, 0, 929, 190, 1, 0, 0, 0, 930, 931, 5, 46, 0, 0, 931, 932, 5, 109, 0, 0, 932, 933, 5, 97, 0, 0, 933, 934, 5, 120, 0, 0, 934, 192, 1, 0, 0, 0, 935, 936, 5, 46, 0, 0, 936, 937, 5, 99, 0, 0, 937, 938, 5, 111, 0, 0, 938, 939, 5, 112, 0, 0, 939, 940, 5, 121, 0, 0, 940, 941, 5, 115, 0, 0, 941, 942, 5, 105, 0, 0, 942, 943, 5, 103, 0, 0, 943, 944, 5, 110, 0, 0, 944, 194, 1, 0, 0, 0, 945, 946, 5, 46, 0, 0, 946, 947, 5, 119, 0, 0, 947, 948, 5, 114, 0, 0, 948, 949, 5, 97, 0, 0, 949, 950, 5, 112, 0, 0, 950, 951, 5, 95, 0, 0, 951, 196, 1, 0, 0, 0, 952, 953, 5, 46, 0, 0, 953, 954, 5, 116, 0, 0, 954, 955, 5, 114, 0, 0, 955, 956, 5, 117, 0, 0, 956, 957, 5, 110, 0, 0, 957, 958, 5, 99, 0, 0, 958, 959, 5, 95, 0, 0, 959, 198, 1, 0, 0, 0, 960, 961, 5, 46, 0, 0, 961, 962, 5, 116, 0, 0, 962, 963, 5, 114, 0, 0, 963, 964, 5, 117, 0, 0, 964, 965, 5, 110, 0, 0, 965, 966, 5, 99, 0, 0, 966, 967, 5, 95, 0, 0, 967, 968, 5, 115, 0, 0, 968, 969, 5, 97, 0, 0, 969, 970, 5, 116, 0, 0, 970, 971, 5, 95, 0, 0, 971, 200, 1, 0, 0, 0, 972, 973, 5, 46, 0, 0, 973, 974, 5, 99, 0, 0, 974, 975, 5, 111, 0, 0, 975, 976, 5, 110, 0, 0, 976, 977, 5, 118, 0, 0, 977, 978, 5, 101, 0, 0, 978, 979, 5, 114, 0, 0, 979, 980, 5, 116, 0, 0, 980, 981, 5, 95, 0, 0, 981, 202, 1, 0, 0, 0, 982, 983, 5, 46, 0, 0, 983, 984, 5, 101, 0, 0, 984, 985, 5, 120, 0, 0, 985, 986, 5, 116, 0, 0, 986, 987, 5, 101, 0, 0, 987, 988, 5, 110, 0, 0, 988, 989, 5, 100, 0, 0, 989, 990, 5, 95, 0, 0, 990, 204, 1, 0, 0, 0, 991, 992, 5, 46, 0, 0, 992, 993, 5, 100, 0, 0, 993, 994, 5, 101, 0, 0, 994, 995, 5, 109, 0, 0, 995, 996, 5, 111, 0, 0, 996, 997, 5, 116, 0, 0, 997, 998, 5, 101, 0, 0, 998, 999, 5, 95, 0, 0, 999, 206, 1, 0, 0, 0, 1000, 1001, 5, 46, 0, 0, 1001, 1002, 5, 112, 0, 0, 1002, 1003, 5, 114, 0, 0, 1003, 1004, 5, 111, 0, 0, 1004, 1005, 5, 109, 0, 0, 1005, 1006, 5, 111, 0, 0, 1006, 1007, 5, 116, 0, 0, 1007, 1008, 5, 101, 0, 0, 1008, 1009, 5, 95, 0, 0, 1009, 208, 1, 0, 0, 0, 1010, 1011, 5, 46, 0, 0, 1011, 1012, 5, 114, 0, 0, 1012, 1013, 5, 101, 0, 0, 1013, 1014, 5, 105, 0, 0, 1014, 1015, 5, 110, 0, 0, 1015, 1016, 5, 116, 0, 0, 1016, 1017, 5, 101, 0, 0, 1017, 1018, 5, 114, 0, 0, 1018, 1019, 5, 112, 0, 0, 1019, 1020, 5, 114, 0, 0, 1020, 1021, 5, 101, 0, 0, 1021, 1022, 5, 116, 0, 0, 1022, 1023, 5, 95, 0, 0, 1023, 210, 1, 0, 0, 0, 1024, 1025, 5, 109, 0, 0, 1025, 1026, 5, 101, 0, 0, 1026, 1027, 5, 109, 0, 0, 1027, 1028, 5, 111, 0, 0, 1028, 1029, 5, 114, 0, 0, 1029, 1030, 5, 121, 0, 0, 1030, 1031, 5, 46, 0, 0, 1031, 1032, 5, 115, 0, 0, 1032, 1033, 5, 105, 0, 0, 1033, 1034, 5, 122, 0, 0, 1034, 1035, 5, 101, 0, 0, 1035, 212, 1, 0, 0, 0, 1036, 1037, 5, 109, 0, 0, 1037, 1038, 5, 101, 0, 0, 1038, 1039, 5, 109, 0, 0, 1039, 1040, 5, 111, 0, 0, 1040, 1041, 5, 114, 0, 0, 1041, 1042, 5, 121, 0, 0, 1042, 1043, 5, 46, 0, 0, 1043, 1044, 5, 103, 0, 0, 1044, 1045, 5, 114, 0, 0, 1045, 1046, 5, 111, 0, 0, 1046, 1047, 5, 119, 0, 0, 1047, 214, 1, 0, 0, 0, 1048, 1049, 5, 109, 0, 0, 1049, 1050, 5, 101, 0, 0, 1050, 1051, 5, 109, 0, 0, 1051, 1052, 5, 111, 0, 0, 1052, 1053, 5, 114, 0, 0, 1053, 1054, 5, 121, 0, 0, 1054, 1055, 5, 46, 0, 0, 1055, 1056, 5, 102, 0, 0, 1056, 1057, 5, 105, 0, 0, 1057, 1058, 5, 108, 0, 0, 1058, 1059, 5, 108, 0, 0, 1059, 216, 1, 0, 0, 0, 1060, 1061, 5, 109, 0, 0, 1061, 1062, 5, 101, 0, 0, 1062, 1063, 5, 109, 0, 0, 1063, 1064, 5, 111, 0, 0, 1064, 1065, 5, 114, 0, 0, 1065, 1066, 5, 121, 0, 0, 1066, 1067, 5, 46, 0, 0, 1067, 1068, 5, 99, 0, 0, 1068, 1069, 5, 111, 0, 0, 1069, 1070, 5, 112, 0, 0, 1070, 1071, 5, 121, 0, 0, 1071, 218, 1, 0, 0, 0, 1072, 1073, 5, 109, 0, 0, 1073, 1074, 5, 101, 0, 0, 1074, 1075, 5, 109, 0, 0, 1075, 1076, 5, 111, 0, 0, 1076, 1077, 5, 114, 0, 0, 1077, 1078, 5, 121, 0, 0, 1078, 1079, 5, 46, 0, 0, 1079, 1080, 5, 105, 0, 0, 1080, 1081, 5, 110, 0, 0, 1081, 1082, 5, 105, 0, 0, 1082, 1083, 5, 116, 0, 0, 1083, 220, 1, 0, 0, 0, 1084, 1085, 3, 103, 51, 0, 1085, 1086, 3, 107, 53, 0, 1086, 222, 1, 0, 0, 0, 1087, 1088, 3, 103, 51, 0, 1088, 1089, 5, 46, 0, 0, 1089, 1090, 5, 101, 0, 0, 1090, 1091, 5, 113, 0, 0, 1091, 1184, 1, 0, 0, 0, 1092, 1093, 3, 103, 51, 0, 1093, 1094, 5, 46, 0, 0, 1094, 1095, 5, 110, 0, 0, 1095, 1096, 5, 101, 0, 0, 1096, 1184, 1, 0, 0, 0, 1097, 1098, 3, 103, 51, 0, 1098, 1099, 5, 46, 0, 0, 1099, 1100, 5, 108, 0, 0, 1100, 1101, 5, 116, 0, 0, 1101, 1102, 5, 95, 0, 0, 1102, 1103, 5, 115, 0, 0, 1103, 1184, 1, 0, 0, 0, 1104, 1105, 3, 103, 51, 0, 1105, 1106, 5, 46, 0, 0, 1106, 1107, 5, 108, 0, 0, 1107, 1108, 5, 116, 0, 0, 1108, 1109, 5, 95, 0, 0, 1109, 1110, 5, 117, 0, 0, 1110, 1184, 1, 0, 0, 0, 1111, 1112, 3, 103, 51, 0, 1112, 1113, 5, 46, 0, 0, 1113, 1114, 5, 108, 0, 0, 1114, 1115, 5, 101, 0, 0, 1115, 1116, 5, 95, 0, 0, 1116, 1117, 5, 115, 0, 0, 1117, 1184, 1, 0, 0, 0, 1118, 1119, 3, 103, 51, 0, 1119, 1120, 5, 46, 0, 0, 1120, 1121, 5, 108, 0, 0, 1121, 1122, 5, 101, 0, 0, 1122, 1123, 5, 95, 0, 0, 1123, 1124, 5, 117, 0, 0, 1124, 1184, 1, 0, 0, 0, 1125, 1126, 3, 103, 51, 0, 1126, 1127, 5, 46, 0, 0, 1127, 1128, 5, 103, 0, 0, 1128, 1129, 5, 116, 0, 0, 1129, 1130, 5, 95, 0, 0, 1130, 1131, 5, 115, 0, 0, 1131, 1184, 1, 0, 0, 0, 1132, 1133, 3, 103, 51, 0, 1133, 1134, 5, 46, 0, 0, 1134, 1135, 5, 103, 0, 0, 1135, 1136, 5, 116, 0, 0, 1136, 1137, 5, 95, 0, 0, 1137, 1138, 5, 117, 0, 0, 1138, 1184, 1, 0, 0, 0, 1139, 1140, 3, 103, 51, 0, 1140, 1141, 5, 46, 0, 0, 1141, 1142, 5, 103, 0, 0, 1142, 1143, 5, 101, 0, 0, 1143, 1144, 5, 95, 0, 0, 1144, 1145, 5, 115, 0, 0, 1145, 1184, 1, 0, 0, 0, 1146, 1147, 3, 103, 51, 0, 1147, 1148, 5, 46, 0, 0, 1148, 1149, 5, 103, 0, 0, 1149, 1150, 5, 101, 0, 0, 1150, 1151, 5, 95, 0, 0, 1151, 1152, 5, 117, 0, 0, 1152, 1184, 1, 0, 0, 0, 1153, 1154, 3, 105, 52, 0, 1154, 1155, 5, 46, 0, 0, 1155, 1156, 5, 101, 0, 0, 1156, 1157, 5, 113, 0, 0, 1157, 1184, 1, 0, 0, 0, 1158, 1159, 3, 105, 52, 0, 1159, 1160, 5, 46, 0, 0, 1160, 1161, 5, 110, 0, 0, 1161, 1162, 5, 101, 0, 0, 1162, 1184, 1, 0, 0, 0, 1163, 1164, 3, 105, 52, 0, 1164, 1165, 5, 46, 0, 0, 1165, 1166, 5, 108, 0, 0, 1166, 1167, 5, 116, 0, 0, 1167, 1184, 1, 0, 0, 0, 1168, 1169, 3, 105, 52, 0, 1169, 1170, 5, 46, 0, 0, 1170, 1171, 5, 108, 0, 0, 1171, 1172, 5, 101, 0, 0, 1172, 1184, 1, 0, 0, 0, 1173, 1174, 3, 105, 52, 0, 1174, 1175, 5, 46, 0, 0, 1175, 1176, 5, 103, 0, 0, 1176, 1177, 5, 116, 0, 0, 1177, 1184, 1, 0, 0, 0, 1178, 1179, 3, 105, 52, 0, 1179, 1180, 5, 46, 0, 0, 1180, 1181, 5, 103, 0, 0, 1181, 1182, 5, 101, 0, 0, 1182, 1184, 1, 0, 0, 0, 1183, 1087, 1, 0, 0, 0, 1183, 1092, 1, 0, 0, 0, 1183, 1097, 1, 0, 0, 0, 1183, 1104, 1, 0, 0, 0, 1183, 1111, 1, 0, 0, 0, 1183, 1118, 1, 0, 0, 0, 1183, 1125, 1, 0, 0, 0, 1183, 1132, 1, 0, 0, 0, 1183, 1139, 1, 0, 0, 0, 1183, 1146, 1, 0, 0, 0, 1183, 1153, 1, 0, 0, 0, 1183, 1158, 1, 0, 0, 0, 1183, 1163, 1, 0, 0, 0, 1183, 1168, 1, 0, 0, 0, 1183, 1173, 1, 0, 0, 0, 1183, 1178, 1, 0, 0, 0, 1184, 224, 1, 0, 0, 0, 1185, 1186, 3, 103, 51, 0, 1186, 1187, 5, 46, 0, 0, 1187, 1188, 5, 99, 0, 0, 1188, 1189, 5, 108, 0, 0, 1189, 1190, 5, 122, 0, 0, 1190, 1259, 1, 0, 0, 0, 1191, 1192, 3, 103, 51, 0, 1192, 1193, 5, 46, 0, 0, 1193, 1194, 5, 99, 0, 0, 1194, 1195, 5, 116, 0, 0, 1195, 1196, 5, 122, 0, 0, 1196, 1259, 1, 0, 0, 0, 1197, 1198, 3, 103, 51, 0, 1198, 1199, 5, 46, 0, 0, 1199, 1200, 5, 112, 0, 0, 1200, 1201, 5, 111, 0, 0, 1201, 1202, 5, 112, 0, 0, 1202, 1203, 5, 99, 0, 0, 1203, 1204, 5, 110, 0, 0, 1204, 1205, 5, 116, 0, 0, 1205, 1259, 1, 0, 0, 0, 1206, 1207, 3, 105, 52, 0, 1207, 1208, 5, 46, 0, 0, 1208, 1209, 5, 110, 0, 0, 1209, 1210, 5, 101, 0, 0, 1210, 1211, 5, 103, 0, 0, 1211, 1259, 1, 0, 0, 0, 1212, 1213, 3, 105, 52, 0, 1213, 1214, 5, 46, 0, 0, 1214, 1215, 5, 97, 0, 0, 1215, 1216, 5, 98, 0, 0, 1216, 1217, 5, 115, 0, 0, 1217, 1259, 1, 0, 0, 0, 1218, 1219, 3, 105, 52, 0, 1219, 1220, 5, 46, 0, 0, 1220, 1221, 5, 115, 0, 0, 1221, 1222, 5, 113, 0, 0, 1222, 1223, 5, 114, 0, 0, 1223, 1224, 5, 116, 0, 0, 1224, 1259, 1, 0, 0, 0, 1225, 1226, 3, 105, 52, 0, 1226, 1227, 5, 46, 0, 0, 1227, 1228, 5, 99, 0, 0, 1228, 1229, 5, 101, 0, 0, 1229, 1230, 5, 105, 0, 0, 1230, 1231, 5, 108, 0, 0, 1231, 1259, 1, 0, 0, 0, 1232, 1233, 3, 105, 52, 0, 1233, 1234, 5, 46, 0, 0, 1234, 1235, 5, 102, 0, 0, 1235, 1236, 5, 108, 0, 0, 1236, 1237, 5, 111, 0, 0, 1237, 1238, 5, 111, 0, 0, 1238, 1239, 5, 114, 0, 0, 1239, 1259, 1, 0, 0, 0, 1240, 1241, 3, 105, 52, 0, 1241, 1242, 5, 46, 0, 0, 1242, 1243, 5, 116, 0, 0, 1243, 1244, 5, 114, 0, 0, 1244, 1245, 5, 117, 0, 0, 1245, 1246, 5, 110, 0, 0, 1246, 1247, 5, 99, 0, 0, 1247, 1259, 1, 0, 0, 0, 1248, 1249, 3, 105, 52, 0, 1249, 1250, 5, 46, 0, 0, 1250, 1251, 5, 110, 0, 0, 1251, 1252, 5, 101, 0, 0, 1252, 1253, 5, 97, 0, 0, 1253, 1254, 5, 114, 0, 0, 1254, 1255, 5, 101, 0, 0, 1255, 1256, 5, 115, 0, 0, 1256, 1257, 5, 116, 0, 0, 1257, 1259, 1, 0, 0, 0, 1258, 1185, 1, 0, 0, 0, 1258, 1191, 1, 0, 0, 0, 1258, 1197, 1, 0, 0, 0, 1258, 1206, 1, 0, 0, 0, 1258, 1212, 1, 0, 0, 0, 1258, 1218, 1, 0, 0, 0, 1258, 1225, 1, 0, 0, 0, 1258, 1232, 1, 0, 0, 0, 1258, 1240, 1, 0, 0, 0, 1258, 1248, 1, 0, 0, 0, 1259, 226, 1, 0, 0, 0, 1260, 1261, 3, 103, 51, 0, 1261, 1262, 5, 46, 0, 0, 1262, 1263, 5, 97, 0, 0, 1263, 1264, 5, 100, 0, 0, 1264, 1265, 5, 100, 0, 0, 1265, 1411, 1, 0, 0, 0, 1266, 1267, 3, 103, 51, 0, 1267, 1268, 5, 46, 0, 0, 1268, 1269, 5, 115, 0, 0, 1269, 1270, 5, 117, 0, 0, 1270, 1271, 5, 98, 0, 0, 1271, 1411, 1, 0, 0, 0, 1272, 1273, 3, 103, 51, 0, 1273, 1274, 5, 46, 0, 0, 1274, 1275, 5, 109, 0, 0, 1275, 1276, 5, 117, 0, 0, 1276, 1277, 5, 108, 0, 0, 1277, 1411, 1, 0, 0, 0, 1278, 1279, 3, 103, 51, 0, 1279, 1280, 5, 46, 0, 0, 1280, 1281, 5, 100, 0, 0, 1281, 1282, 5, 105, 0, 0, 1282, 1283, 5, 118, 0, 0, 1283, 1284, 5, 95, 0, 0, 1284, 1285, 5, 115, 0, 0, 1285, 1411, 1, 0, 0, 0, 1286, 1287, 3, 103, 51, 0, 1287, 1288, 5, 46, 0, 0, 1288, 1289, 5, 100, 0, 0, 1289, 1290, 5, 105, 0, 0, 1290, 1291, 5, 118, 0, 0, 1291, 1292, 5, 95, 0, 0, 1292, 1293, 5, 117, 0, 0, 1293, 1411, 1, 0, 0, 0, 1294, 1295, 3, 103, 51, 0, 1295, 1296, 5, 46, 0, 0, 1296, 1297, 5, 114, 0, 0, 1297, 1298, 5, 101, 0, 0, 1298, 1299, 5, 109, 0, 0, 1299, 1300, 5, 95, 0, 0, 1300, 1301, 5, 115, 0, 0, 1301, 1411, 1, 0, 0, 0, 1302, 1303, 3, 103, 51, 0, 1303, 1304, 5, 46, 0, 0, 1304, 1305, 5, 114, 0, 0, 1305, 1306, 5, 101, 0, 0, 1306, 1307, 5, 109, 0, 0, 1307, 1308, 5, 95, 0, 0, 1308, 1309, 5, 117, 0, 0, 1309, 1411, 1, 0, 0, 0, 1310, 1311, 3, 103, 51, 0, 1311, 1312, 5, 46, 0, 0, 1312, 1313, 5, 97, 0, 0, 1313, 1314, 5, 110, 0, 0, 1314, 1315, 5, 100, 0, 0, 1315, 1411, 1, 0, 0, 0, 1316, 1317, 3, 103, 51, 0, 1317, 1318, 5, 46, 0, 0, 1318, 1319, 5, 111, 0, 0, 1319, 1320, 5, 114, 0, 0, 1320, 1411, 1, 0, 0, 0, 1321, 1322, 3, 103, 51, 0, 1322, 1323, 5, 46, 0, 0, 1323, 1324, 5, 120, 0, 0, 1324, 1325, 5, 111, 0, 0, 1325, 1326, 5, 114, 0, 0, 1326, 1411, 1, 0, 0, 0, 1327, 1328, 3, 103, 51, 0, 1328, 1329, 5, 46, 0, 0, 1329, 1330, 5, 115, 0, 0, 1330, 1331, 5, 104, 0, 0, 1331, 1332, 5, 108, 0, 0, 1332, 1411, 1, 0, 0, 0, 1333, 1334, 3, 103, 51, 0, 1334, 1335, 5, 46, 0, 0, 1335, 1336, 5, 115, 0, 0, 1336, 1337, 5, 104, 0, 0, 1337, 1338, 5, 114, 0, 0, 1338, 1339, 5, 95, 0, 0, 1339, 1340, 5, 115, 0, 0, 1340, 1411, 1, 0, 0, 0, 1341, 1342, 3, 103, 51, 0, 1342, 1343, 5, 46, 0, 0, 1343, 1344, 5, 115, 0, 0, 1344, 1345, 5, 104, 0, 0, 1345, 1346, 5, 114, 0, 0, 1346, 1347, 5, 95, 0, 0, 1347, 1348, 5, 117, 0, 0, 1348, 1411, 1, 0, 0, 0, 1349, 1350, 3, 103, 51, 0, 1350, 1351, 5, 46, 0, 0, 1351, 1352, 5, 114, 0, 0, 1352, 1353, 5, 111, 0, 0, 1353, 1354, 5, 116, 0, 0, 1354, 1355, 5, 108, 0, 0, 1355, 1411, 1, 0, 0, 0, 1356, 1357, 3, 103, 51, 0, 1357, 1358, 5, 46, 0, 0, 1358, 1359, 5, 114, 0, 0, 1359, 1360, 5, 111, 0, 0, 1360, 1361, 5, 116, 0, 0, 1361, 1362, 5, 114, 0, 0, 1362, 1411, 1, 0, 0, 0, 1363, 1364, 3, 105, 52, 0, 1364, 1365, 5, 46, 0, 0, 1365, 1366, 5, 97, 0, 0, 1366, 1367, 5, 100, 0, 0, 1367, 1368, 5, 100, 0, 0, 1368, 1411, 1, 0, 0, 0, 1369, 1370, 3, 105, 52, 0, 1370, 1371, 5, 46, 0, 0, 1371, 1372, 5, 115, 0, 0, 1372, 1373, 5, 117, 0, 0, 1373, 1374, 5, 98, 0, 0, 1374, 1411, 1, 0, 0, 0, 1375, 1376, 3, 105, 52, 0, 1376, 1377, 5, 46, 0, 0, 1377, 1378, 5, 109, 0, 0, 1378, 1379, 5, 117, 0, 0, 1379, 1380, 5, 108, 0, 0, 1380, 1411, 1, 0, 0, 0, 1381, 1382, 3, 105, 52, 0, 1382, 1383, 5, 46, 0, 0, 1383, 1384, 5, 100, 0, 0, 1384, 1385, 5, 105, 0, 0, 1385, 1386, 5, 118, 0, 0, 1386, 1411, 1, 0, 0, 0, 1387, 1388, 3, 105, 52, 0, 1388, 1389, 5, 46, 0, 0, 1389, 1390, 5, 109, 0, 0, 1390, 1391, 5, 105, 0, 0, 1391, 1392, 5, 110, 0, 0, 1392, 1411, 1, 0, 0, 0, 1393, 1394, 3, 105, 52, 0, 1394, 1395, 5, 46, 0, 0, 1395, 1396, 5, 109, 0, 0, 1396, 1397, 5, 97, 0, 0, 1397, 1398, 5, 120, 0, 0, 1398, 1411, 1, 0, 0, 0, 1399, 1400, 3, 105, 52, 0, 1400, 1401, 5, 46, 0, 0, 1401, 1402, 5, 99, 0, 0, 1402, 1403, 5, 111, 0, 0, 1403, 1404, 5, 112, 0, 0, 1404, 1405, 5, 121, 0, 0, 1405, 1406, 5, 115, 0, 0, 1406, 1407, 5, 105, 0, 0, 1407, 1408, 5, 103, 0, 0, 1408, 1409, 5, 110, 0, 0, 1409, 1411, 1, 0, 0, 0, 1410, 1260, 1, 0, 0, 0, 1410, 1266, 1, 0, 0, 0, 1410, 1272, 1, 0, 0, 0, 1410, 1278, 1, 0, 0, 0, 1410, 1286, 1, 0, 0, 0, 1410, 1294, 1, 0, 0, 0, 1410, 1302, 1, 0, 0, 0, 1410, 1310, 1, 0, 0, 0, 1410, 1316, 1, 0, 0, 0, 1410, 1321, 1, 0, 0, 0, 1410, 1327, 1, 0, 0, 0, 1410, 1333, 1, 0, 0, 0, 1410, 1341, 1, 0, 0, 0, 1410, 1349, 1, 0, 0, 0, 1410, 1356, 1, 0, 0, 0, 1410, 1363, 1, 0, 0, 0, 1410, 1369, 1, 0, 0, 0, 1410, 1375, 1, 0, 0, 0, 1410, 1381, 1, 0, 0, 0, 1410, 1387, 1, 0, 0, 0, 1410, 1393, 1, 0, 0, 0, 1410, 1399, 1, 0, 0, 0, 1411, 228, 1, 0, 0, 0, 1412, 1413, 3, 95, 47, 0, 1413, 1414, 5, 46, 0, 0, 1414, 1415, 5, 119, 0, 0, 1415, 1416, 5, 114, 0, 0, 1416, 1417, 5, 97, 0, 0, 1417, 1418, 5, 112, 0, 0, 1418, 1419, 5, 95, 0, 0, 1419, 1420, 1, 0, 0, 0, 1420, 1421, 3, 97, 48, 0, 1421, 1575, 1, 0, 0, 0, 1422, 1423, 3, 103, 51, 0, 1423, 1424, 5, 46, 0, 0, 1424, 1425, 5, 116, 0, 0, 1425, 1426, 5, 114, 0, 0, 1426, 1427, 5, 117, 0, 0, 1427, 1428, 5, 110, 0, 0, 1428, 1429, 5, 99, 0, 0, 1429, 1430, 5, 95, 0, 0, 1430, 1431, 1, 0, 0, 0, 1431, 1432, 3, 105, 52, 0, 1432, 1433, 3, 85, 42, 0, 1433, 1434, 3, 91, 45, 0, 1434, 1575, 1, 0, 0, 0, 1435, 1436, 3, 103, 51, 0, 1436, 1437, 5, 46, 0, 0, 1437, 1438, 5, 116, 0, 0, 1438, 1439, 5, 114, 0, 0, 1439, 1440, 5, 117, 0, 0, 1440, 1441, 5, 110, 0, 0, 1441, 1442, 5, 99, 0, 0, 1442, 1443, 5, 95, 0, 0, 1443, 1444, 5, 115, 0, 0, 1444, 1445, 5, 97, 0, 0, 1445, 1446, 5, 116, 0, 0, 1446, 1447, 5, 95, 0, 0, 1447, 1448, 1, 0, 0, 0, 1448, 1449, 3, 105, 52, 0, 1449, 1450, 3, 85, 42, 0, 1450, 1451, 3, 91, 45, 0, 1451, 1575, 1, 0, 0, 0, 1452, 1453, 3, 97, 48, 0, 1453, 1454, 5, 46, 0, 0, 1454, 1455, 5, 101, 0, 0, 1455, 1456, 5, 120, 0, 0, 1456, 1457, 5, 116, 0, 0, 1457, 1458, 5, 101, 0, 0, 1458, 1459, 5, 110, 0, 0, 1459, 1460, 5, 100, 0, 0, 1460, 1461, 5, 95, 0, 0, 1461, 1462, 1, 0, 0, 0, 1462, 1463, 3, 95, 47, 0, 1463, 1464, 3, 85, 42, 0, 1464, 1465, 3, 91, 45, 0, 1465, 1575, 1, 0, 0, 0, 1466, 1467, 3, 105, 52, 0, 1467, 1468, 5, 46, 0, 0, 1468, 1469, 5, 99, 0, 0, 1469, 1470, 5, 111, 0, 0, 1470, 1471, 5, 110, 0, 0, 1471, 1472, 5, 118, 0, 0, 1472, 1473, 5, 101, 0, 0, 1473, 1474, 5, 114, 0, 0, 1474, 1475, 5, 116, 0, 0, 1475, 1476, 5, 95, 0, 0, 1476, 1477, 1, 0, 0, 0, 1477, 1478, 3, 103, 51, 0, 1478, 1479, 3, 85, 42, 0, 1479, 1480, 3, 91, 45, 0, 1480, 1575, 1, 0, 0, 0, 1481, 1482, 3, 99, 49, 0, 1482, 1483, 5, 46, 0, 0, 1483, 1484, 5, 100, 0, 0, 1484, 1485, 5, 101, 0, 0, 1485, 1486, 5, 109, 0, 0, 1486, 1487, 5, 111, 0, 0, 1487, 1488, 5, 116, 0, 0, 1488, 1489, 5, 101, 0, 0, 1489, 1490, 5, 95, 0, 0, 1490, 1491, 1, 0, 0, 0, 1491, 1492, 3, 101, 50, 0, 1492, 1575, 1, 0, 0, 0, 1493, 1494, 3, 101, 50, 0, 1494, 1495, 5, 46, 0, 0, 1495, 1496, 5, 112, 0, 0, 1496, 1497, 5, 114, 0, 0, 1497, 1498, 5, 111, 0, 0, 1498, 1499, 5, 109, 0, 0, 1499, 1500, 5, 111, 0, 0, 1500, 1501, 5, 116, 0, 0, 1501, 1502, 5, 101, 0, 0, 1502, 1503, 5, 95, 0, 0, 1503, 1504, 1, 0, 0, 0, 1504, 1505, 3, 99, 49, 0, 1505, 1575, 1, 0, 0, 0, 1506, 1507, 3, 99, 49, 0, 1507, 1508, 5, 46, 0, 0, 1508, 1509, 5, 114, 0, 0, 1509, 1510, 5, 101, 0, 0, 1510, 1511, 5, 105, 0, 0, 1511, 1512, 5, 110, 0, 0, 1512, 1513, 5, 116, 0, 0, 1513, 1514, 5, 101, 0, 0, 1514, 1515, 5, 114, 0, 0, 1515, 1516, 5, 112, 0, 0, 1516, 1517, 5, 114, 0, 0, 1517, 1518, 5, 101, 0, 0, 1518, 1519, 5, 116, 0, 0, 1519, 1520, 5, 95, 0, 0, 1520, 1521, 1, 0, 0, 0, 1521, 1522, 3, 95, 47, 0, 1522, 1575, 1, 0, 0, 0, 1523, 1524, 3, 101, 50, 0, 1524, 1525, 5, 46, 0, 0, 1525, 1526, 5, 114, 0, 0, 1526, 1527, 5, 101, 0, 0, 1527, 1528, 5, 105, 0, 0, 1528, 1529, 5, 110, 0, 0, 1529, 1530, 5, 116, 0, 0, 1530, 1531, 5, 101, 0, 0, 1531, 1532, 5, 114, 0, 0, 1532, 1533, 5, 112, 0, 0, 1533, 1534, 5, 114, 0, 0, 1534, 1535, 5, 101, 0, 0, 1535, 1536, 5, 116, 0, 0, 1536, 1537, 5, 95, 0, 0, 1537, 1538, 1, 0, 0, 0, 1538, 1539, 3, 97, 48, 0, 1539, 1575, 1, 0, 0, 0, 1540, 1541, 3, 95, 47, 0, 1541, 1542, 5, 46, 0, 0, 1542, 1543, 5, 114, 0, 0, 1543, 1544, 5, 101, 0, 0, 1544, 1545, 5, 105, 0, 0, 1545, 1546, 5, 110, 0, 0, 1546, 1547, 5, 116, 0, 0, 1547, 1548, 5, 101, 0, 0, 1548, 1549, 5, 114, 0, 0, 1549, 1550, 5, 112, 0, 0, 1550, 1551, 5, 114, 0, 0, 1551, 1552, 5, 101, 0, 0, 1552, 1553, 5, 116, 0, 0, 1553, 1554, 5, 95, 0, 0, 1554, 1555, 1, 0, 0, 0, 1555, 1556, 3, 99, 49, 0, 1556, 1575, 1, 0, 0, 0, 1557, 1558, 3, 97, 48, 0, 1558, 1559, 5, 46, 0, 0, 1559, 1560, 5, 114, 0, 0, 1560, 1561, 5, 101, 0, 0, 1561, 1562, 5, 105, 0, 0, 1562, 1563, 5, 110, 0, 0, 1563, 1564, 5, 116, 0, 0, 1564, 1565, 5, 101, 0, 0, 1565, 1566, 5, 114, 0, 0, 1566, 1567, 5, 112, 0, 0, 1567, 1568, 5, 114, 0, 0, 1568, 1569, 5, 101, 0, 0, 1569, 1570, 5, 116, 0, 0, 1570, 1571, 5, 95, 0, 0, 1571, 1572, 1, 0, 0, 0, 1572, 1573, 3, 101, 50, 0, 1573, 1575, 1, 0, 0, 0, 1574, 1412, 1, 0, 0, 0, 1574, 1422, 1, 0, 0, 0, 1574, 1435, 1, 0, 0, 0, 1574, 1452, 1, 0, 0, 0, 1574, 1466, 1, 0, 0, 0, 1574, 1481, 1, 0, 0, 0, 1574, 1493, 1, 0, 0, 0, 1574, 1506, 1, 0, 0, 0, 1574, 1523, 1, 0, 0, 0, 1574, 1540, 1, 0, 0, 0, 1574, 1557, 1, 0, 0, 0, 1575, 230, 1, 0, 0, 0, 1576, 1577, 5, 116, 0, 0, 1577, 1578, 5, 121, 0, 0, 1578, 1579, 5, 112, 0, 0, 1579, 1580, 5, 101, 0, 0, 1580, 232, 1, 0, 0, 0, 1581, 1582, 5, 102, 0, 0, 1582, 1583, 5, 117, 0, 0, 1583, 1584, 5, 110, 0, 0, 1584, 1585, 5, 99, 0, 0, 1585, 234, 1, 0, 0, 0, 1586, 1587, 5, 101, 0, 0, 1587, 1588, 5, 120, 0, 0, 1588, 1589, 5, 116, 0, 0, 1589, 1590, 5, 101, 0, 0, 1590, 1591, 5, 114, 0, 0, 1591, 1592, 5, 110, 0, 0, 1592, 236, 1, 0, 0, 0, 1593, 1594, 5, 115, 0, 0, 1594, 1595, 5, 116, 0, 0, 1595, 1596, 5, 97, 0, 0, 1596, 1597, 5, 114, 0, 0, 1597, 1598, 5, 116, 0, 0, 1598, 238, 1, 0, 0, 0, 1599, 1600, 5, 112, 0, 0, 1600, 1601, 5, 97, 0, 0, 1601, 1602, 5, 114, 0, 0, 1602, 1603, 5, 97, 0, 0, 1603, 1604, 5, 109, 0, 0, 1604, 240, 1, 0, 0, 0, 1605, 1606, 5, 114, 0, 0, 1606, 1607, 5, 101, 0, 0, 1607, 1608, 5, 115, 0, 0, 1608, 1609, 5, 117, 0, 0, 1609, 1610, 5, 108, 0, 0, 1610, 1611, 5, 116, 0, 0, 1611, 242, 1, 0, 0, 0, 1612, 1613, 5, 108, 0, 0, 1613, 1614, 5, 111, 0, 0, 1614, 1615, 5, 99, 0, 0, 1615, 1616, 5, 97, 0, 0, 1616, 1617, 5, 108, 0, 0, 1617, 244, 1, 0, 0, 0, 1618, 1619, 5, 103, 0, 0, 1619, 1620, 5, 108, 0, 0, 1620, 1621, 5, 111, 0, 0, 1621, 1622, 5, 98, 0, 0, 1622, 1623, 5, 97, 0, 0, 1623, 1624, 5, 108, 0, 0, 1624, 246, 1, 0, 0, 0, 1625, 1626, 5, 116, 0, 0, 1626, 1627, 5, 97, 0, 0, 1627, 1628, 5, 98, 0, 0, 1628, 1629, 5, 108, 0, 0, 1629, 1630, 5, 101, 0, 0, 1630, 248, 1, 0, 0, 0, 1631, 1632, 5, 109, 0, 0, 1632, 1633, 5, 101, 0, 0, 1633, 1634, 5, 109, 0, 0, 1634, 1635, 5, 111, 0, 0, 1635, 1636, 5, 114, 0, 0, 1636, 1637, 5, 121, 0, 0, 1637, 250, 1, 0, 0, 0, 1638, 1639, 5, 101, 0, 0, 1639, 1640, 5, 108, 0, 0, 1640, 1641, 5, 101, 0, 0, 1641, 1642, 5, 109, 0, 0, 1642, 252, 1, 0, 0, 0, 1643, 1644, 5, 100, 0, 0, 1644, 1645, 5, 97, 0, 0, 1645, 1646, 5, 116, 0, 0, 1646, 1647, 5, 97, 0, 0, 1647, 254, 1, 0, 0, 0, 1648, 1649, 5, 111, 0, 0, 1649, 1650, 5, 102, 0, 0, 1650, 1651, 5, 102, 0, 0, 1651, 1652, 5, 115, 0, 0, 1652, 1653, 5, 101, 0, 0, 1653, 1654, 5, 116, 0, 0, 1654, 256, 1, 0, 0, 0, 1655, 1656, 5, 105, 0, 0, 1656, 1657, 5, 109, 0, 0, 1657, 1658, 5, 112, 0, 0, 1658, 1659, 5, 111, 0, 0, 1659, 1660, 5, 114, 0, 0, 1660, 1661, 5, 116, 0, 0, 1661, 258, 1, 0, 0, 0, 1662, 1663, 5, 101, 0, 0, 1663, 1664, 5, 120, 0, 0, 1664, 1665, 5, 112, 0, 0, 1665, 1666, 5, 111, 0, 0, 1666, 1667, 5, 114, 0, 0, 1667, 1668, 5, 116, 0, 0, 1668, 260, 1, 0, 0, 0, 1669, 1670, 5, 109, 0, 0, 1670, 1671, 5, 111, 0, 0, 1671, 1672, 5, 100, 0, 0, 1672, 1673, 5, 117, 0, 0, 1673, 1674, 5, 108, 0, 0, 1674, 1675, 5, 101, 0, 0, 1675, 262, 1, 0, 0, 0, 1676, 1677, 5, 98, 0, 0, 1677, 1678, 5, 105, 0, 0, 1678, 1679, 5, 110, 0, 0, 1679, 1680, 5, 97, 0, 0, 1680, 1681, 5, 114, 0, 0, 1681, 1682, 5, 121, 0, 0, 1682, 264, 1, 0, 0, 0, 1683, 1684, 5, 113, 0, 0, 1684, 1685, 5, 117, 0, 0, 1685, 1686, 5, 111, 0, 0, 1686, 1687, 5, 116, 0, 0, 1687, 1688, 5, 101, 0, 0, 1688, 266, 1, 0, 0, 0, 1689, 1690, 5, 115, 0, 0, 1690, 1691, 5, 99, 0, 0, 1691, 1692, 5, 114, 0, 0, 1692, 1693, 5, 105, 0, 0, 1693, 1694, 5, 112, 0, 0, 1694, 1695, 5, 116, 0, 0, 1695, 268, 1, 0, 0, 0, 1696, 1697, 5, 114, 0, 0, 1697, 1698, 5, 101, 0, 0, 1698, 1699, 5, 103, 0, 0, 1699, 1700, 5, 105, 0, 0, 1700, 1701, 5, 115, 0, 0, 1701, 1702, 5, 116, 0, 0, 1702, 1703, 5, 101, 0, 0, 1703, 1704, 5, 114, 0, 0, 1704, 270, 1, 0, 0, 0, 1705, 1706, 5, 105, 0, 0, 1706, 1707, 5, 110, 0, 0, 1707, 1708, 5, 118, 0, 0, 1708, 1709, 5, 111, 0, 0, 1709, 1710, 5, 107, 0, 0, 1710, 1711, 5, 101, 0, 0, 1711, 272, 1, 0, 0, 0, 1712, 1713, 5, 103, 0, 0, 1713, 1714, 5, 101, 0, 0, 1714, 1715, 5, 116, 0, 0, 1715, 274, 1, 0, 0, 0, 1716, 1717, 5, 97, 0, 0, 1717, 1718, 5, 115, 0, 0, 1718, 1719, 5, 115, 0, 0, 1719, 1720, 5, 101, 0, 0, 1720, 1721, 5, 114, 0, 0, 1721, 1722, 5, 116, 0, 0, 1722, 1723, 5, 95, 0, 0, 1723, 1724, 5, 109, 0, 0, 1724, 1725, 5, 97, 0, 0, 1725, 1726, 5, 108, 0, 0, 1726, 1727, 5, 102, 0, 0, 1727, 1728, 5, 111, 0, 0, 1728, 1729, 5, 114, 0, 0, 1729, 1730, 5, 109, 0, 0, 1730, 1731, 5, 101, 0, 0, 1731, 1732, 5, 100, 0, 0, 1732, 276, 1, 0, 0, 0, 1733, 1734, 5, 97, 0, 0, 1734, 1735, 5, 115, 0, 0, 1735, 1736, 5, 115, 0, 0, 1736, 1737, 5, 101, 0, 0, 1737, 1738, 5, 114, 0, 0, 1738, 1739, 5, 116, 0, 0, 1739, 1740, 5, 95, 0, 0, 1740, 1741, 5, 105, 0, 0, 1741, 1742, 5, 110, 0, 0, 1742, 1743, 5, 118, 0, 0, 1743, 1744, 5, 97, 0, 0, 1744, 1745, 5, 108, 0, 0, 1745, 1746, 5, 105, 0, 0, 1746, 1747, 5, 100, 0, 0, 1747, 278, 1, 0, 0, 0, 1748, 1749, 5, 97, 0, 0, 1749, 1750, 5, 115, 0, 0, 1750, 1751, 5, 115, 0, 0, 1751, 1752, 5, 101, 0, 0, 1752, 1753, 5, 114, 0, 0, 1753, 1754, 5, 116, 0, 0, 1754, 1755, 5, 95, 0, 0, 1755, 1756, 5, 117, 0, 0, 1756, 1757, 5, 110, 0, 0, 1757, 1758, 5, 108, 0, 0, 1758, 1759, 5, 105, 0, 0, 1759, 1760, 5, 110, 0, 0, 1760, 1761, 5, 107, 0, 0, 1761, 1762, 5, 97, 0, 0, 1762, 1763, 5, 98, 0, 0, 1763, 1764, 5, 108, 0, 0, 1764, 1765, 5, 101, 0, 0, 1765, 280, 1, 0, 0, 0, 1766, 1767, 5, 97, 0, 0, 1767, 1768, 5, 115, 0, 0, 1768, 1769, 5, 115, 0, 0, 1769, 1770, 5, 101, 0, 0, 1770, 1771, 5, 114, 0, 0, 1771, 1772, 5, 116, 0, 0, 1772, 1773, 5, 95, 0, 0, 1773, 1774, 5, 114, 0, 0, 1774, 1775, 5, 101, 0, 0, 1775, 1776, 5, 116, 0, 0, 1776, 1777, 5, 117, 0, 0, 1777, 1778, 5, 114, 0, 0, 1778, 1779, 5, 110, 0, 0, 1779, 282, 1, 0, 0, 0, 1780, 1781, 5, 97, 0, 0, 1781, 1782, 5, 115, 0, 0, 1782, 1783, 5, 115, 0, 0, 1783, 1784, 5, 101, 0, 0, 1784, 1785, 5, 114, 0, 0, 1785, 1786, 5, 116, 0, 0, 1786, 1787, 5, 95, 0, 0, 1787, 1788, 5, 114, 0, 0, 1788, 1789, 5, 101, 0, 0, 1789, 1790, 5, 116, 0, 0, 1790, 1791, 5, 117, 0, 0, 1791, 1792, 5, 114, 0, 0, 1792, 1793, 5, 110, 0, 0, 1793, 1794, 5, 95, 0, 0, 1794, 1795, 5, 99, 0, 0, 1795, 1796, 5, 97, 0, 0, 1796, 1797, 5, 110, 0, 0, 1797, 1798, 5, 111, 0, 0, 1798, 1799, 5, 110, 0, 0, 1799, 1800, 5, 105, 0, 0, 1800, 1801, 5, 99, 0, 0, 1801, 1802, 5, 97, 0, 0, 1802, 1803, 5, 108, 0, 0, 1803, 1804, 5, 95, 0, 0, 1804, 1805, 5, 110, 0, 0, 1805, 1806, 5, 97, 0, 0, 1806, 1807, 5, 110, 0, 0, 1807, 284, 1, 0, 0, 0, 1808, 1809, 5, 97, 0, 0, 1809, 1810, 5, 115, 0, 0, 1810, 1811, 5, 115, 0, 0, 1811, 1812, 5, 101, 0, 0, 1812, 1813, 5, 114, 0, 0, 1813, 1814, 5, 116, 0, 0, 1814, 1815, 5, 95, 0, 0, 1815, 1816, 5, 114, 0, 0, 1816, 1817, 5, 101, 0, 0, 1817, 1818, 5, 116, 0, 0, 1818, 1819, 5, 117, 0, 0, 1819, 1820, 5, 114, 0, 0, 1820, 1821, 5, 110, 0, 0, 1821, 1822, 5, 95, 0, 0, 1822, 1823, 5, 97, 0, 0, 1823, 1824, 5, 114, 0, 0, 1824, 1825, 5, 105, 0, 0, 1825, 1826, 5, 116, 0, 0, 1826, 1827, 5, 104, 0, 0, 1827, 1828, 5, 109, 0, 0, 1828, 1829, 5, 101, 0, 0, 1829, 1830, 5, 116, 0, 0, 1830, 1831, 5, 105, 0, 0, 1831, 1832, 5, 99, 0, 0, 1832, 1833, 5, 95, 0, 0, 1833, 1834, 5, 110, 0, 0, 1834, 1835, 5, 97, 0, 0, 1835, 1836, 5, 110, 0, 0, 1836, 286, 1, 0, 0, 0, 1837, 1838, 5, 97, 0, 0, 1838, 1839, 5, 115, 0, 0, 1839, 1840, 5, 115, 0, 0, 1840, 1841, 5, 101, 0, 0, 1841, 1842, 5, 114, 0, 0, 1842, 1843, 5, 116, 0, 0, 1843, 1844, 5, 95, 0, 0, 1844, 1845, 5, 116, 0, 0, 1845, 1846, 5, 114, 0, 0, 1846, 1847, 5, 97, 0, 0, 1847, 1848, 5, 112, 0, 0, 1848, 288, 1, 0, 0, 0, 1849, 1850, 5, 97, 0, 0, 1850, 1851, 5, 115, 0, 0, 1851, 1852, 5, 115, 0, 0, 1852, 1853, 5, 101, 0, 0, 1853, 1854, 5, 114, 0, 0, 1854, 1855, 5, 116, 0, 0, 1855, 1856, 5, 95, 0, 0, 1856, 1857, 5, 101, 0, 0, 1857, 1858, 5, 120, 0, 0, 1858, 1859, 5, 104, 0, 0, 1859, 1860, 5, 97, 0, 0, 1860, 1861, 5, 117, 0, 0, 1861, 1862, 5, 115, 0, 0, 1862, 1863, 5, 116, 0, 0, 1863, 1864, 5, 105, 0, 0, 1864, 1865, 5, 111, 0, 0, 1865, 1866, 5, 110, 0, 0, 1866, 290, 1, 0, 0, 0, 1867, 1868, 5, 105, 0, 0, 1868, 1869, 5, 110, 0, 0, 1869, 1870, 5, 112, 0, 0, 1870, 1871, 5, 117, 0, 0, 1871, 1872, 5, 116, 0, 0, 1872, 292, 1, 0, 0, 0, 1873, 1874, 5, 111, 0, 0, 1874, 1875, 5, 117, 0, 0, 1875, 1876, 5, 116, 0, 0, 1876, 1877, 5, 112, 0, 0, 1877, 1878, 5, 117, 0, 0, 1878, 1879, 5, 116, 0, 0, 1879, 294, 1, 0, 0, 0, 1880, 1881, 3, 329, 164, 0, 1881, 296, 1, 0, 0, 0, 1882, 1883, 5, 118, 0, 0, 1883, 1884, 5, 49, 0, 0, 1884, 1885, 5, 50, 0, 0, 1885, 1886, 5, 56, 0, 0, 1886, 298, 1, 0, 0, 0, 1887, 1889, 7, 1, 0, 0, 1888, 1887, 1, 0, 0, 0, 1889, 1890, 1, 0, 0, 0, 1890, 1888, 1, 0, 0, 0, 1890, 1891, 1, 0, 0, 0, 1891, 1892, 1, 0, 0, 0, 1892, 1893, 6, 149, 0, 0, 1893, 300, 1, 0, 0, 0, 1894, 1895, 5, 40, 0, 0, 1895, 1896, 5, 59, 0, 0, 1896, 1900, 1, 0, 0, 0, 1897, 1899, 9, 0, 0, 0, 1898, 1897, 1, 0, 0, 0, 1899, 1902, 1, 0, 0, 0, 1900, 1901, 1, 0, 0, 0, 1900, 1898, 1, 0, 0, 0, 1901, 1903, 1, 0, 0, 0, 1902, 1900, 1, 0, 0, 0, 1903, 1904, 5, 59, 0, 0, 1904, 1916, 5, 41, 0, 0, 1905, 1906, 5, 59, 0, 0, 1906, 1907, 5, 59, 0, 0, 1907, 1911, 1, 0, 0, 0, 1908, 1910, 9, 0, 0, 0, 1909, 1908, 1, 0, 0, 0, 1910, 1913, 1, 0, 0, 0, 1911, 1912, 1, 0, 0, 0, 1911, 1909, 1, 0, 0, 0, 1912, 1914, 1, 0, 0, 0, 1913, 1911, 1, 0, 0, 0, 1914, 1916, 5, 10, 0, 0, 1915, 1894, 1, 0, 0, 0, 1915, 1905, 1, 0, 0, 0, 1916, 1917, 1, 0, 0, 0, 1917, 1918, 6, 150, 0, 0, 1918, 302, 1, 0, 0, 0, 1919, 1920, 7, 2, 0, 0, 1920, 304, 1, 0, 0, 0, 1921, 1928, 3, 311, 155, 0, 1922, 1924, 5, 95, 0, 0, 1923, 1922, 1, 0, 0, 0, 1923, 1924, 1, 0, 0, 0, 1924, 1925, 1, 0, 0, 0, 1925, 1927, 3, 311, 155, 0, 1926, 1923, 1, 0, 0, 0, 1927, 1930, 1, 0, 0, 0, 1928, 1926, 1, 0, 0, 0, 1928, 1929, 1, 0, 0, 0, 1929, 306, 1, 0, 0, 0, 1930, 1928, 1, 0, 0, 0, 1931, 1938, 3, 313, 156, 0, 1932, 1934, 5, 95, 0, 0, 1933, 1932, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 1935, 1, 0, 0, 0, 1935, 1937, 3, 313, 156, 0, 1936, 1933, 1, 0, 0, 0, 1937, 1940, 1, 0, 0, 0, 1938, 1936, 1, 0, 0, 0, 1938, 1939, 1, 0, 0, 0, 1939, 308, 1, 0, 0, 0, 1940, 1938, 1, 0, 0, 0, 1941, 1942, 7, 3, 0, 0, 1942, 310, 1, 0, 0, 0, 1943, 1944, 7, 4, 0, 0, 1944, 312, 1, 0, 0, 0, 1945, 1946, 7, 5, 0, 0, 1946, 314, 1, 0, 0, 0, 1947, 1948, 7, 6, 0, 0, 1948, 316, 1, 0, 0, 0, 1949, 1955, 3, 305, 152, 0, 1950, 1951, 5, 48, 0, 0, 1951, 1952, 5, 120, 0, 0, 1952, 1953, 1, 0, 0, 0, 1953, 1955, 3, 307, 153, 0, 1954, 1949, 1, 0, 0, 0, 1954, 1950, 1, 0, 0, 0, 1955, 318, 1, 0, 0, 0, 1956, 1957, 3, 309, 154, 0, 1957, 1958, 3, 317, 158, 0, 1958, 320, 1, 0, 0, 0, 1959, 1960, 3, 305, 152, 0, 1960, 322, 1, 0, 0, 0, 1961, 1962, 3, 307, 153, 0, 1962, 324, 1, 0, 0, 0, 1963, 1965, 3, 309, 154, 0, 1964, 1963, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 1966, 1, 0, 0, 0, 1966, 1967, 3, 305, 152, 0, 1967, 1969, 5, 46, 0, 0, 1968, 1970, 3, 321, 160, 0, 1969, 1968, 1, 0, 0, 0, 1969, 1970, 1, 0, 0, 0, 1970, 2042, 1, 0, 0, 0, 1971, 1973, 3, 309, 154, 0, 1972, 1971, 1, 0, 0, 0, 1972, 1973, 1, 0, 0, 0, 1973, 1974, 1, 0, 0, 0, 1974, 1979, 3, 305, 152, 0, 1975, 1977, 5, 46, 0, 0, 1976, 1978, 3, 321, 160, 0, 1977, 1976, 1, 0, 0, 0, 1977, 1978, 1, 0, 0, 0, 1978, 1980, 1, 0, 0, 0, 1979, 1975, 1, 0, 0, 0, 1979, 1980, 1, 0, 0, 0, 1980, 1981, 1, 0, 0, 0, 1981, 1983, 7, 7, 0, 0, 1982, 1984, 3, 309, 154, 0, 1983, 1982, 1, 0, 0, 0, 1983, 1984, 1, 0, 0, 0, 1984, 1985, 1, 0, 0, 0, 1985, 1986, 3, 305, 152, 0, 1986, 2042, 1, 0, 0, 0, 1987, 1989, 3, 309, 154, 0, 1988, 1987, 1, 0, 0, 0, 1988, 1989, 1, 0, 0, 0, 1989, 1990, 1, 0, 0, 0, 1990, 1991, 5, 48, 0, 0, 1991, 1992, 5, 120, 0, 0, 1992, 1993, 1, 0, 0, 0, 1993, 1994, 3, 307, 153, 0, 1994, 1996, 5, 46, 0, 0, 1995, 1997, 3, 323, 161, 0, 1996, 1995, 1, 0, 0, 0, 1996, 1997, 1, 0, 0, 0, 1997, 2042, 1, 0, 0, 0, 1998, 2000, 3, 309, 154, 0, 1999, 1998, 1, 0, 0, 0, 1999, 2000, 1, 0, 0, 0, 2000, 2001, 1, 0, 0, 0, 2001, 2002, 5, 48, 0, 0, 2002, 2003, 5, 120, 0, 0, 2003, 2004, 1, 0, 0, 0, 2004, 2009, 3, 307, 153, 0, 2005, 2007, 5, 46, 0, 0, 2006, 2008, 3, 323, 161, 0, 2007, 2006, 1, 0, 0, 0, 2007, 2008, 1, 0, 0, 0, 2008, 2010, 1, 0, 0, 0, 2009, 2005, 1, 0, 0, 0, 2009, 2010, 1, 0, 0, 0, 2010, 2011, 1, 0, 0, 0, 2011, 2013, 7, 8, 0, 0, 2012, 2014, 3, 309, 154, 0, 2013, 2012, 1, 0, 0, 0, 2013, 2014, 1, 0, 0, 0, 2014, 2015, 1, 0, 0, 0, 2015, 2016, 3, 305, 152, 0, 2016, 2042, 1, 0, 0, 0, 2017, 2019, 3, 309, 154, 0, 2018, 2017, 1, 0, 0, 0, 2018, 2019, 1, 0, 0, 0, 2019, 2020, 1, 0, 0, 0, 2020, 2021, 5, 105, 0, 0, 2021, 2022, 5, 110, 0, 0, 2022, 2042, 5, 102, 0, 0, 2023, 2025, 3, 309, 154, 0, 2024, 2023, 1, 0, 0, 0, 2024, 2025, 1, 0, 0, 0, 2025, 2026, 1, 0, 0, 0, 2026, 2027, 5, 110, 0, 0, 2027, 2028, 5, 97, 0, 0, 2028, 2042, 5, 110, 0, 0, 2029, 2031, 3, 309, 154, 0, 2030, 2029, 1, 0, 0, 0, 2030, 2031, 1, 0, 0, 0, 2031, 2032, 1, 0, 0, 0, 2032, 2033, 5, 110, 0, 0, 2033, 2034, 5, 97, 0, 0, 2034, 2035, 5, 110, 0, 0, 2035, 2036, 5, 58, 0, 0, 2036, 2037, 1, 0, 0, 0, 2037, 2038, 5, 48, 0, 0, 2038, 2039, 5, 120, 0, 0, 2039, 2040, 1, 0, 0, 0, 2040, 2042, 3, 307, 153, 0, 2041, 1964, 1, 0, 0, 0, 2041, 1972, 1, 0, 0, 0, 2041, 1988, 1, 0, 0, 0, 2041, 1999, 1, 0, 0, 0, 2041, 2018, 1, 0, 0, 0, 2041, 2024, 1, 0, 0, 0, 2041, 2030, 1, 0, 0, 0, 2042, 326, 1, 0, 0, 0, 2043, 2063, 5, 34, 0, 0, 2044, 2062, 3, 335, 167, 0, 2045, 2062, 7, 9, 0, 0, 2046, 2047, 5, 92, 0, 0, 2047, 2048, 3, 313, 156, 0, 2048, 2049, 3, 313, 156, 0, 2049, 2062, 1, 0, 0, 0, 2050, 2051, 5, 92, 0, 0, 2051, 2052, 5, 117, 0, 0, 2052, 2053, 5, 123, 0, 0, 2053, 2055, 1, 0, 0, 0, 2054, 2056, 3, 313, 156, 0, 2055, 2054, 1, 0, 0, 0, 2056, 2057, 1, 0, 0, 0, 2057, 2055, 1, 0, 0, 0, 2057, 2058, 1, 0, 0, 0, 2058, 2059, 1, 0, 0, 0, 2059, 2060, 5, 125, 0, 0, 2060, 2062, 1, 0, 0, 0, 2061, 2044, 1, 0, 0, 0, 2061, 2045, 1, 0, 0, 0, 2061, 2046, 1, 0, 0, 0, 2061, 2050, 1, 0, 0, 0, 2062, 2065, 1, 0, 0, 0, 2063, 2061, 1, 0, 0, 0, 2063, 2064, 1, 0, 0, 0, 2064, 2066, 1, 0, 0, 0, 2065, 2063, 1, 0, 0, 0, 2066, 2067, 5, 34, 0, 0, 2067, 328, 1, 0, 0, 0, 2068, 2073, 5, 36, 0, 0, 2069, 2074, 3, 315, 157, 0, 2070, 2074, 3, 311, 155, 0, 2071, 2074, 5, 95, 0, 0, 2072, 2074, 3, 303, 151, 0, 2073, 2069, 1, 0, 0, 0, 2073, 2070, 1, 0, 0, 0, 2073, 2071, 1, 0, 0, 0, 2073, 2072, 1, 0, 0, 0, 2074, 2075, 1, 0, 0, 0, 2075, 2073, 1, 0, 0, 0, 2075, 2076, 1, 0, 0, 0, 2076, 330, 1, 0, 0, 0, 2077, 2078, 7, 10, 0, 0, 2078, 332, 1, 0, 0, 0, 2079, 2082, 3, 103, 51, 0, 2080, 2082, 3, 105, 52, 0, 2081, 2079, 1, 0, 0, 0, 2081, 2080, 1, 0, 0, 0, 2082, 334, 1, 0, 0, 0, 2083, 2084, 8, 11, 0, 0, 2084, 336, 1, 0, 0, 0, 2085, 2086, 7, 12, 0, 0, 2086, 338, 1, 0, 0, 0, 2087, 2088, 7, 13, 0, 0, 2088, 340, 1, 0, 0, 0, 2089, 2090, 7, 14, 0, 0, 2090, 342, 1, 0, 0, 0, 2091, 2094, 3, 337, 168, 0, 2092, 2094, 3, 347, 173, 0, 2093, 2091, 1, 0, 0, 0, 2093, 2092, 1, 0, 0, 0, 2094, 344, 1, 0, 0, 0, 2095, 2098, 3, 339, 169, 0, 2096, 2098, 3, 347, 173, 0, 2097, 2095, 1, 0, 0, 0, 2097, 2096, 1, 0, 0, 0, 2098, 346, 1, 0, 0, 0, 2099, 2100, 7, 15, 0, 0, 2100, 2127, 3, 341, 170, 0, 2101, 2102, 7, 16, 0, 0, 2102, 2103, 7, 17, 0, 0, 2103, 2127, 3, 341, 170, 0, 2104, 2105, 7, 18, 0, 0, 2105, 2106, 7, 19, 0, 0, 2106, 2127, 3, 341, 170, 0, 2107, 2108, 7, 20, 0, 0, 2108, 2109, 3, 341, 170, 0, 2109, 2110, 3, 341, 170, 0, 2110, 2127, 1, 0, 0, 0, 2111, 2112, 7, 21, 0, 0, 2112, 2113, 7, 22, 0, 0, 2113, 2114, 3, 341, 170, 0, 2114, 2115, 3, 341, 170, 0, 2115, 2127, 1, 0, 0, 0, 2116, 2117, 7, 23, 0, 0, 2117, 2118, 7, 24, 0, 0, 2118, 2119, 3, 341, 170, 0, 2119, 2120, 3, 341, 170, 0, 2120, 2127, 1, 0, 0, 0, 2121, 2122, 7, 25, 0, 0, 2122, 2123, 3, 341, 170, 0, 2123, 2124, 3, 341, 170, 0, 2124, 2125, 3, 341, 170, 0, 2125, 2127, 1, 0, 0, 0, 2126, 2099, 1, 0, 0, 0, 2126, 2101, 1, 0, 0, 0, 2126, 2104, 1, 0, 0, 0, 2126, 2107, 1, 0, 0, 0, 2126, 2111, 1, 0, 0, 0, 2126, 2116, 1, 0, 0, 0, 2126, 2121, 1, 0, 0, 0, 2127, 348, 1, 0, 0, 0, 44, 0, 628, 638, 666, 686, 690, 1183, 1258, 1410, 1574, 1890, 1900, 1911, 1915, 1923, 1928, 1933, 1938, 1954, 1964, 1969, 1972, 1977, 1979, 1983, 1988, 1996, 1999, 2007, 2009, 2013, 2018, 2024, 2030, 2041, 2057, 2061, 2063, 2073, 2075, 2081, 2093, 2097, 2126, 1, 6, 0, 0] \ No newline at end of file diff --git a/grammar/WatLexer.java b/grammar/WatLexer.java deleted file mode 100644 index 07ed22d10..000000000 --- a/grammar/WatLexer.java +++ /dev/null @@ -1,1496 +0,0 @@ -// Generated from WatLexer.g4 by ANTLR 4.13.2 -import org.antlr.v4.runtime.Lexer; -import org.antlr.v4.runtime.CharStream; -import org.antlr.v4.runtime.Token; -import org.antlr.v4.runtime.TokenStream; -import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.atn.*; -import org.antlr.v4.runtime.dfa.DFA; -import org.antlr.v4.runtime.misc.*; - -@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) -public class WatLexer extends Lexer { - static { RuntimeMetaData.checkVersion("4.13.2", RuntimeMetaData.VERSION); } - - protected static final DFA[] _decisionToDFA; - protected static final PredictionContextCache _sharedContextCache = - new PredictionContextCache(); - public static final int - LPAR=1, RPAR=2, NAT=3, INT=4, FLOAT=5, STRING_=6, VALUE_TYPE=7, CONST=8, - SYMBOLIC=9, FUNCREF=10, EXTERNREF=11, MUT=12, NOP=13, SYM_ASSERT=14, ALLOC=15, - FREE=16, UNREACHABLE=17, DROP=18, BLOCK=19, LOOP=20, FOR=21, VBAR=22, - END=23, BR=24, BR_IF=25, BR_TABLE=26, RETURN=27, IF=28, THEN=29, ELSE=30, - SELECT=31, CALL=32, CALL_INDIRECT=33, RETURN_CALL=34, RETURN_CALL_INDIRECT=35, - LOCAL_GET=36, LOCAL_SET=37, LOCAL_TEE=38, GLOBAL_GET=39, GLOBAL_SET=40, - LOAD=41, STORE=42, UNDERSCORE=43, OFFSET_EQ=44, ALIGN_EQ=45, SIGN_POSTFIX=46, - MEM_SIZE=47, I32=48, I64=49, F32=50, F64=51, IXX=52, FXX=53, OP_EQZ=54, - OP_EQ=55, OP_NE=56, OP_LT=57, OP_LTS=58, OP_LTU=59, OP_LE=60, OP_LES=61, - OP_LEU=62, OP_GT=63, OP_GTS=64, OP_GTU=65, OP_GE=66, OP_GES=67, OP_GEU=68, - OP_CLZ=69, OP_CTZ=70, OP_POPCNT=71, OP_NEG=72, OP_ABS=73, OP_SQRT=74, - OP_CEIL=75, OP_FLOOR=76, OP_TRUNC=77, OP_NEAREST=78, OP_ADD=79, OP_SUB=80, - OP_MUL=81, OP_DIV=82, OP_DIV_S=83, OP_DIV_U=84, OP_REM_S=85, OP_REM_U=86, - OP_AND=87, OP_OR=88, OP_XOR=89, OP_SHL=90, OP_SHR_S=91, OP_SHR_U=92, OP_ROTL=93, - OP_ROTR=94, OP_MIN=95, OP_MAX=96, OP_COPYSIGN=97, OP_WRAP=98, OP_TRUNC_=99, - OP_TRUNC_SAT=100, OP_CONVERT=101, OP_EXTEND=102, OP_DEMOTE=103, OP_PROMOTE=104, - OP_REINTER=105, MEMORY_SIZE=106, MEMORY_GROW=107, MEMORY_FILL=108, MEMORY_COPY=109, - MEMORY_INIT=110, TEST=111, COMPARE=112, UNARY=113, BINARY=114, CONVERT=115, - TYPE=116, FUNC=117, EXTERN=118, START_=119, PARAM=120, RESULT=121, LOCAL=122, - GLOBAL=123, TABLE=124, MEMORY=125, ELEM=126, DATA=127, OFFSET=128, IMPORT=129, - EXPORT=130, MODULE=131, BIN=132, QUOTE=133, SCRIPT=134, REGISTER=135, - INVOKE=136, GET=137, ASSERT_MALFORMED=138, ASSERT_INVALID=139, ASSERT_UNLINKABLE=140, - ASSERT_RETURN=141, ASSERT_RETURN_CANONICAL_NAN=142, ASSERT_RETURN_ARITHMETIC_NAN=143, - ASSERT_TRAP=144, ASSERT_EXHAUSTION=145, INPUT=146, OUTPUT=147, VAR=148, - V128=149, SPACE=150, COMMENT=151; - public static String[] channelNames = { - "DEFAULT_TOKEN_CHANNEL", "HIDDEN" - }; - - public static String[] modeNames = { - "DEFAULT_MODE" - }; - - private static String[] makeRuleNames() { - return new String[] { - "LPAR", "RPAR", "NAT", "INT", "FLOAT", "STRING_", "VALUE_TYPE", "CONST", - "SYMBOLIC", "FUNCREF", "EXTERNREF", "MUT", "NOP", "SYM_ASSERT", "ALLOC", - "FREE", "UNREACHABLE", "DROP", "BLOCK", "LOOP", "FOR", "VBAR", "END", - "BR", "BR_IF", "BR_TABLE", "RETURN", "IF", "THEN", "ELSE", "SELECT", - "CALL", "CALL_INDIRECT", "RETURN_CALL", "RETURN_CALL_INDIRECT", "LOCAL_GET", - "LOCAL_SET", "LOCAL_TEE", "GLOBAL_GET", "GLOBAL_SET", "LOAD", "STORE", - "UNDERSCORE", "OFFSET_EQ", "ALIGN_EQ", "SIGN_POSTFIX", "MEM_SIZE", "I32", - "I64", "F32", "F64", "IXX", "FXX", "OP_EQZ", "OP_EQ", "OP_NE", "OP_LT", - "OP_LTS", "OP_LTU", "OP_LE", "OP_LES", "OP_LEU", "OP_GT", "OP_GTS", "OP_GTU", - "OP_GE", "OP_GES", "OP_GEU", "OP_CLZ", "OP_CTZ", "OP_POPCNT", "OP_NEG", - "OP_ABS", "OP_SQRT", "OP_CEIL", "OP_FLOOR", "OP_TRUNC", "OP_NEAREST", - "OP_ADD", "OP_SUB", "OP_MUL", "OP_DIV", "OP_DIV_S", "OP_DIV_U", "OP_REM_S", - "OP_REM_U", "OP_AND", "OP_OR", "OP_XOR", "OP_SHL", "OP_SHR_S", "OP_SHR_U", - "OP_ROTL", "OP_ROTR", "OP_MIN", "OP_MAX", "OP_COPYSIGN", "OP_WRAP", "OP_TRUNC_", - "OP_TRUNC_SAT", "OP_CONVERT", "OP_EXTEND", "OP_DEMOTE", "OP_PROMOTE", - "OP_REINTER", "MEMORY_SIZE", "MEMORY_GROW", "MEMORY_FILL", "MEMORY_COPY", - "MEMORY_INIT", "TEST", "COMPARE", "UNARY", "BINARY", "CONVERT", "TYPE", - "FUNC", "EXTERN", "START_", "PARAM", "RESULT", "LOCAL", "GLOBAL", "TABLE", - "MEMORY", "ELEM", "DATA", "OFFSET", "IMPORT", "EXPORT", "MODULE", "BIN", - "QUOTE", "SCRIPT", "REGISTER", "INVOKE", "GET", "ASSERT_MALFORMED", "ASSERT_INVALID", - "ASSERT_UNLINKABLE", "ASSERT_RETURN", "ASSERT_RETURN_CANONICAL_NAN", - "ASSERT_RETURN_ARITHMETIC_NAN", "ASSERT_TRAP", "ASSERT_EXHAUSTION", "INPUT", - "OUTPUT", "VAR", "V128", "SPACE", "COMMENT", "Symbol", "Num", "HexNum", - "Sign", "Digit", "HexDigit", "Letter", "Nat", "Int", "Frac", "HexFrac", - "Float", "String_", "Name", "Escape", "NXX", "Char", "Ascii", "Ascii_no_nl", - "Utf8Cont", "Utf8", "Utf8_no_nl", "Utf8Enc" - }; - } - public static final String[] ruleNames = makeRuleNames(); - - private static String[] makeLiteralNames() { - return new String[] { - null, "'('", "')'", null, null, null, null, null, null, null, "'funcref'", - "'externref'", "'mut'", "'nop'", "'sym_assert'", "'alloc'", "'free'", - "'unreachable'", "'drop'", "'block'", "'loop'", "'for'", "'|'", "'end'", - "'br'", "'br_if'", "'br_table'", "'return'", "'if'", "'then'", "'else'", - "'.select'", "'call'", "'call_indirect'", "'return_call'", "'return_call_indirect'", - "'local.get'", "'local.set'", "'local.tee'", "'global.get'", "'global.set'", - null, null, "'_'", "'offset='", "'align='", null, null, "'i32'", "'i64'", - "'f32'", "'f64'", null, null, "'.eqz'", "'.eq'", "'.ne'", "'.lt'", "'.lt_s'", - "'.lt_u'", "'.le'", "'.le_s'", "'.le_u'", "'.gt'", "'.gt_s'", "'.gt_u'", - "'.ge'", "'.ge_s'", "'.ge_u'", "'.clz'", "'.ctz'", "'.popcnt'", "'.neg'", - "'.abs'", "'.sqrt'", "'.ceil'", "'.floor'", "'.trunc'", "'.nearest'", - "'.add'", "'.sub'", "'.mul'", "'.div'", "'.div_s'", "'.div_u'", "'.rem_s'", - "'.rem_u'", "'.and'", "'.or'", "'.xor'", "'.shl'", "'.shr_s'", "'.shr_u'", - "'.rotl'", "'.rotr'", "'.min'", "'.max'", "'.copysign'", "'.wrap_'", - "'.trunc_'", "'.trunc_sat_'", "'.convert_'", "'.extend_'", "'.demote_'", - "'.promote_'", "'.reinterpret_'", "'memory.size'", "'memory.grow'", "'memory.fill'", - "'memory.copy'", "'memory.init'", null, null, null, null, null, "'type'", - "'func'", "'extern'", "'start'", "'param'", "'result'", "'local'", "'global'", - "'table'", "'memory'", "'elem'", "'data'", "'offset'", "'import'", "'export'", - "'module'", "'binary'", "'quote'", "'script'", "'register'", "'invoke'", - "'get'", "'assert_malformed'", "'assert_invalid'", "'assert_unlinkable'", - "'assert_return'", "'assert_return_canonical_nan'", "'assert_return_arithmetic_nan'", - "'assert_trap'", "'assert_exhaustion'", "'input'", "'output'", null, - "'v128'" - }; - } - private static final String[] _LITERAL_NAMES = makeLiteralNames(); - private static String[] makeSymbolicNames() { - return new String[] { - null, "LPAR", "RPAR", "NAT", "INT", "FLOAT", "STRING_", "VALUE_TYPE", - "CONST", "SYMBOLIC", "FUNCREF", "EXTERNREF", "MUT", "NOP", "SYM_ASSERT", - "ALLOC", "FREE", "UNREACHABLE", "DROP", "BLOCK", "LOOP", "FOR", "VBAR", - "END", "BR", "BR_IF", "BR_TABLE", "RETURN", "IF", "THEN", "ELSE", "SELECT", - "CALL", "CALL_INDIRECT", "RETURN_CALL", "RETURN_CALL_INDIRECT", "LOCAL_GET", - "LOCAL_SET", "LOCAL_TEE", "GLOBAL_GET", "GLOBAL_SET", "LOAD", "STORE", - "UNDERSCORE", "OFFSET_EQ", "ALIGN_EQ", "SIGN_POSTFIX", "MEM_SIZE", "I32", - "I64", "F32", "F64", "IXX", "FXX", "OP_EQZ", "OP_EQ", "OP_NE", "OP_LT", - "OP_LTS", "OP_LTU", "OP_LE", "OP_LES", "OP_LEU", "OP_GT", "OP_GTS", "OP_GTU", - "OP_GE", "OP_GES", "OP_GEU", "OP_CLZ", "OP_CTZ", "OP_POPCNT", "OP_NEG", - "OP_ABS", "OP_SQRT", "OP_CEIL", "OP_FLOOR", "OP_TRUNC", "OP_NEAREST", - "OP_ADD", "OP_SUB", "OP_MUL", "OP_DIV", "OP_DIV_S", "OP_DIV_U", "OP_REM_S", - "OP_REM_U", "OP_AND", "OP_OR", "OP_XOR", "OP_SHL", "OP_SHR_S", "OP_SHR_U", - "OP_ROTL", "OP_ROTR", "OP_MIN", "OP_MAX", "OP_COPYSIGN", "OP_WRAP", "OP_TRUNC_", - "OP_TRUNC_SAT", "OP_CONVERT", "OP_EXTEND", "OP_DEMOTE", "OP_PROMOTE", - "OP_REINTER", "MEMORY_SIZE", "MEMORY_GROW", "MEMORY_FILL", "MEMORY_COPY", - "MEMORY_INIT", "TEST", "COMPARE", "UNARY", "BINARY", "CONVERT", "TYPE", - "FUNC", "EXTERN", "START_", "PARAM", "RESULT", "LOCAL", "GLOBAL", "TABLE", - "MEMORY", "ELEM", "DATA", "OFFSET", "IMPORT", "EXPORT", "MODULE", "BIN", - "QUOTE", "SCRIPT", "REGISTER", "INVOKE", "GET", "ASSERT_MALFORMED", "ASSERT_INVALID", - "ASSERT_UNLINKABLE", "ASSERT_RETURN", "ASSERT_RETURN_CANONICAL_NAN", - "ASSERT_RETURN_ARITHMETIC_NAN", "ASSERT_TRAP", "ASSERT_EXHAUSTION", "INPUT", - "OUTPUT", "VAR", "V128", "SPACE", "COMMENT" - }; - } - private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); - public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); - - /** - * @deprecated Use {@link #VOCABULARY} instead. - */ - @Deprecated - public static final String[] tokenNames; - static { - tokenNames = new String[_SYMBOLIC_NAMES.length]; - for (int i = 0; i < tokenNames.length; i++) { - tokenNames[i] = VOCABULARY.getLiteralName(i); - if (tokenNames[i] == null) { - tokenNames[i] = VOCABULARY.getSymbolicName(i); - } - - if (tokenNames[i] == null) { - tokenNames[i] = ""; - } - } - } - - @Override - @Deprecated - public String[] getTokenNames() { - return tokenNames; - } - - @Override - - public Vocabulary getVocabulary() { - return VOCABULARY; - } - - - public WatLexer(CharStream input) { - super(input); - _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); - } - - @Override - public String getGrammarFileName() { return "WatLexer.g4"; } - - @Override - public String[] getRuleNames() { return ruleNames; } - - @Override - public String getSerializedATN() { return _serializedATN; } - - @Override - public String[] getChannelNames() { return channelNames; } - - @Override - public String[] getModeNames() { return modeNames; } - - @Override - public ATN getATN() { return _ATN; } - - public static final String _serializedATN = - "\u0004\u0000\u0097\u0850\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002"+ - "\u0001\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002"+ - "\u0004\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002"+ - "\u0007\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002"+ - "\u000b\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e"+ - "\u0002\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011"+ - "\u0002\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014"+ - "\u0002\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017"+ - "\u0002\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a"+ - "\u0002\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d"+ - "\u0002\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!"+ - "\u0007!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002"+ - "&\u0007&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002"+ - "+\u0007+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u0002"+ - "0\u00070\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u0002"+ - "5\u00075\u00026\u00076\u00027\u00077\u00028\u00078\u00029\u00079\u0002"+ - ":\u0007:\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002"+ - "?\u0007?\u0002@\u0007@\u0002A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002"+ - "D\u0007D\u0002E\u0007E\u0002F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002"+ - "I\u0007I\u0002J\u0007J\u0002K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002"+ - "N\u0007N\u0002O\u0007O\u0002P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002"+ - "S\u0007S\u0002T\u0007T\u0002U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002"+ - "X\u0007X\u0002Y\u0007Y\u0002Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002"+ - "]\u0007]\u0002^\u0007^\u0002_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002"+ - "b\u0007b\u0002c\u0007c\u0002d\u0007d\u0002e\u0007e\u0002f\u0007f\u0002"+ - "g\u0007g\u0002h\u0007h\u0002i\u0007i\u0002j\u0007j\u0002k\u0007k\u0002"+ - "l\u0007l\u0002m\u0007m\u0002n\u0007n\u0002o\u0007o\u0002p\u0007p\u0002"+ - "q\u0007q\u0002r\u0007r\u0002s\u0007s\u0002t\u0007t\u0002u\u0007u\u0002"+ - "v\u0007v\u0002w\u0007w\u0002x\u0007x\u0002y\u0007y\u0002z\u0007z\u0002"+ - "{\u0007{\u0002|\u0007|\u0002}\u0007}\u0002~\u0007~\u0002\u007f\u0007\u007f"+ - "\u0002\u0080\u0007\u0080\u0002\u0081\u0007\u0081\u0002\u0082\u0007\u0082"+ - "\u0002\u0083\u0007\u0083\u0002\u0084\u0007\u0084\u0002\u0085\u0007\u0085"+ - "\u0002\u0086\u0007\u0086\u0002\u0087\u0007\u0087\u0002\u0088\u0007\u0088"+ - "\u0002\u0089\u0007\u0089\u0002\u008a\u0007\u008a\u0002\u008b\u0007\u008b"+ - "\u0002\u008c\u0007\u008c\u0002\u008d\u0007\u008d\u0002\u008e\u0007\u008e"+ - "\u0002\u008f\u0007\u008f\u0002\u0090\u0007\u0090\u0002\u0091\u0007\u0091"+ - "\u0002\u0092\u0007\u0092\u0002\u0093\u0007\u0093\u0002\u0094\u0007\u0094"+ - "\u0002\u0095\u0007\u0095\u0002\u0096\u0007\u0096\u0002\u0097\u0007\u0097"+ - "\u0002\u0098\u0007\u0098\u0002\u0099\u0007\u0099\u0002\u009a\u0007\u009a"+ - "\u0002\u009b\u0007\u009b\u0002\u009c\u0007\u009c\u0002\u009d\u0007\u009d"+ - "\u0002\u009e\u0007\u009e\u0002\u009f\u0007\u009f\u0002\u00a0\u0007\u00a0"+ - "\u0002\u00a1\u0007\u00a1\u0002\u00a2\u0007\u00a2\u0002\u00a3\u0007\u00a3"+ - "\u0002\u00a4\u0007\u00a4\u0002\u00a5\u0007\u00a5\u0002\u00a6\u0007\u00a6"+ - "\u0002\u00a7\u0007\u00a7\u0002\u00a8\u0007\u00a8\u0002\u00a9\u0007\u00a9"+ - "\u0002\u00aa\u0007\u00aa\u0002\u00ab\u0007\u00ab\u0002\u00ac\u0007\u00ac"+ - "\u0002\u00ad\u0007\u00ad\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001"+ - "\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004"+ - "\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007"+ - "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ - "\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+ - "\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001"+ - "\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+ - "\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001"+ - "\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+ - "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001"+ - "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001"+ - "\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ - "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ - "\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+ - "\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001"+ - "\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+ - "\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001"+ - "\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001"+ - "\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+ - "\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ - "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001"+ - "\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+ - "\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001"+ - "\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001"+ - "\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+ - "\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ - "\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001"+ - " \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001"+ - "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001\"\u0001"+ - "\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+ - "\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+ - "\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+ - "#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ - "$\u0001$\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001"+ - "%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001"+ - "&\u0001&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001"+ - "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001(\u0001("+ - "\u0001(\u0001(\u0001(\u0001(\u0001(\u0003(\u0275\b(\u0001)\u0001)\u0001"+ - ")\u0001)\u0001)\u0001)\u0001)\u0001)\u0003)\u027f\b)\u0001*\u0001*\u0001"+ - "+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001,\u0001,\u0001"+ - ",\u0001,\u0001,\u0001,\u0001,\u0001-\u0001-\u0001.\u0001.\u0001.\u0001"+ - ".\u0001.\u0001.\u0001.\u0003.\u029b\b.\u0001/\u0001/\u0001/\u0001/\u0001"+ - "0\u00010\u00010\u00010\u00011\u00011\u00011\u00011\u00012\u00012\u0001"+ - "2\u00012\u00013\u00013\u00033\u02af\b3\u00014\u00014\u00034\u02b3\b4\u0001"+ - "5\u00015\u00015\u00015\u00015\u00016\u00016\u00016\u00016\u00017\u0001"+ - "7\u00017\u00017\u00018\u00018\u00018\u00018\u00019\u00019\u00019\u0001"+ - "9\u00019\u00019\u0001:\u0001:\u0001:\u0001:\u0001:\u0001:\u0001;\u0001"+ - ";\u0001;\u0001;\u0001<\u0001<\u0001<\u0001<\u0001<\u0001<\u0001=\u0001"+ - "=\u0001=\u0001=\u0001=\u0001=\u0001>\u0001>\u0001>\u0001>\u0001?\u0001"+ - "?\u0001?\u0001?\u0001?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001@\u0001"+ - "@\u0001A\u0001A\u0001A\u0001A\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ - "B\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001D\u0001"+ - "D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001E\u0001F\u0001F\u0001F\u0001"+ - "F\u0001F\u0001F\u0001F\u0001F\u0001G\u0001G\u0001G\u0001G\u0001G\u0001"+ - "H\u0001H\u0001H\u0001H\u0001H\u0001I\u0001I\u0001I\u0001I\u0001I\u0001"+ - "I\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001K\u0001K\u0001K\u0001"+ - "K\u0001K\u0001K\u0001K\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001"+ - "L\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ - "N\u0001N\u0001N\u0001N\u0001N\u0001O\u0001O\u0001O\u0001O\u0001O\u0001"+ - "P\u0001P\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001"+ - "R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001S\u0001S\u0001S\u0001"+ - "S\u0001S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001T\u0001T\u0001"+ - "T\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001V\u0001V\u0001"+ - "V\u0001V\u0001V\u0001W\u0001W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001"+ - "X\u0001X\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001"+ - "Z\u0001Z\u0001Z\u0001Z\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001"+ - "[\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001]\u0001]\u0001"+ - "]\u0001]\u0001]\u0001]\u0001^\u0001^\u0001^\u0001^\u0001^\u0001_\u0001"+ - "_\u0001_\u0001_\u0001_\u0001`\u0001`\u0001`\u0001`\u0001`\u0001`\u0001"+ - "`\u0001`\u0001`\u0001`\u0001a\u0001a\u0001a\u0001a\u0001a\u0001a\u0001"+ - "a\u0001b\u0001b\u0001b\u0001b\u0001b\u0001b\u0001b\u0001b\u0001c\u0001"+ - "c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001"+ - "c\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001"+ - "d\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001"+ - "f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001g\u0001"+ - "g\u0001g\u0001g\u0001g\u0001g\u0001g\u0001g\u0001g\u0001g\u0001h\u0001"+ - "h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001h\u0001"+ - "h\u0001h\u0001h\u0001i\u0001i\u0001i\u0001i\u0001i\u0001i\u0001i\u0001"+ - "i\u0001i\u0001i\u0001i\u0001i\u0001j\u0001j\u0001j\u0001j\u0001j\u0001"+ - "j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001k\u0001k\u0001k\u0001"+ - "k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001l\u0001"+ - "l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001"+ - "l\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001m\u0001"+ - "m\u0001m\u0001m\u0001n\u0001n\u0001n\u0001o\u0001o\u0001o\u0001o\u0001"+ - "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ - "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ - "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ - "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ - "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ - "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ - "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ - "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ - "o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001o\u0001"+ - "o\u0001o\u0003o\u04a0\bo\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0003p\u04eb\bp\u0001q\u0001"+ - "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ - "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ - "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ - "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ - "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ - "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ - "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ - "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ - "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ - "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ - "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ - "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ - "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ - "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001"+ - "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001q\u0003q\u0583"+ - "\bq\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001r\u0003r\u0627\br\u0001s\u0001s\u0001s\u0001s\u0001s\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001v\u0001v\u0001v\u0001v\u0001v\u0001v\u0001w\u0001w\u0001"+ - "w\u0001w\u0001w\u0001w\u0001x\u0001x\u0001x\u0001x\u0001x\u0001x\u0001"+ - "x\u0001y\u0001y\u0001y\u0001y\u0001y\u0001y\u0001z\u0001z\u0001z\u0001"+ - "z\u0001z\u0001z\u0001z\u0001{\u0001{\u0001{\u0001{\u0001{\u0001{\u0001"+ - "|\u0001|\u0001|\u0001|\u0001|\u0001|\u0001|\u0001}\u0001}\u0001}\u0001"+ - "}\u0001}\u0001~\u0001~\u0001~\u0001~\u0001~\u0001\u007f\u0001\u007f\u0001"+ - "\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u0080\u0001"+ - "\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001"+ - "\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001"+ - "\u0081\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001"+ - "\u0082\u0001\u0082\u0001\u0083\u0001\u0083\u0001\u0083\u0001\u0083\u0001"+ - "\u0083\u0001\u0083\u0001\u0083\u0001\u0084\u0001\u0084\u0001\u0084\u0001"+ - "\u0084\u0001\u0084\u0001\u0084\u0001\u0085\u0001\u0085\u0001\u0085\u0001"+ - "\u0085\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0086\u0001\u0086\u0001"+ - "\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001"+ - "\u0086\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001"+ - "\u0087\u0001\u0087\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088\u0001"+ - "\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001"+ - "\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001"+ - "\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u008a\u0001"+ - "\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001"+ - "\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001"+ - "\u008a\u0001\u008a\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001"+ - "\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001"+ - "\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001"+ - "\u008b\u0001\u008b\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001"+ - "\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001"+ - "\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008d\u0001\u008d\u0001"+ - "\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001"+ - "\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001"+ - "\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001"+ - "\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001"+ - "\u008d\u0001\u008d\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001"+ - "\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001"+ - "\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001"+ - "\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001"+ - "\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001"+ - "\u008e\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001"+ - "\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001"+ - "\u008f\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001"+ - "\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001"+ - "\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001"+ - "\u0090\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001"+ - "\u0091\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092\u0001"+ - "\u0092\u0001\u0092\u0001\u0093\u0001\u0093\u0001\u0094\u0001\u0094\u0001"+ - "\u0094\u0001\u0094\u0001\u0094\u0001\u0095\u0004\u0095\u0761\b\u0095\u000b"+ - "\u0095\f\u0095\u0762\u0001\u0095\u0001\u0095\u0001\u0096\u0001\u0096\u0001"+ - "\u0096\u0001\u0096\u0005\u0096\u076b\b\u0096\n\u0096\f\u0096\u076e\t\u0096"+ - "\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096"+ - "\u0005\u0096\u0776\b\u0096\n\u0096\f\u0096\u0779\t\u0096\u0001\u0096\u0003"+ - "\u0096\u077c\b\u0096\u0001\u0096\u0001\u0096\u0001\u0097\u0001\u0097\u0001"+ - "\u0098\u0001\u0098\u0003\u0098\u0784\b\u0098\u0001\u0098\u0005\u0098\u0787"+ - "\b\u0098\n\u0098\f\u0098\u078a\t\u0098\u0001\u0099\u0001\u0099\u0003\u0099"+ - "\u078e\b\u0099\u0001\u0099\u0005\u0099\u0791\b\u0099\n\u0099\f\u0099\u0794"+ - "\t\u0099\u0001\u009a\u0001\u009a\u0001\u009b\u0001\u009b\u0001\u009c\u0001"+ - "\u009c\u0001\u009d\u0001\u009d\u0001\u009e\u0001\u009e\u0001\u009e\u0001"+ - "\u009e\u0001\u009e\u0003\u009e\u07a3\b\u009e\u0001\u009f\u0001\u009f\u0001"+ - "\u009f\u0001\u00a0\u0001\u00a0\u0001\u00a1\u0001\u00a1\u0001\u00a2\u0003"+ - "\u00a2\u07ad\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0003\u00a2\u07b2"+ - "\b\u00a2\u0001\u00a2\u0003\u00a2\u07b5\b\u00a2\u0001\u00a2\u0001\u00a2"+ - "\u0001\u00a2\u0003\u00a2\u07ba\b\u00a2\u0003\u00a2\u07bc\b\u00a2\u0001"+ - "\u00a2\u0001\u00a2\u0003\u00a2\u07c0\b\u00a2\u0001\u00a2\u0001\u00a2\u0001"+ - "\u00a2\u0003\u00a2\u07c5\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001"+ - "\u00a2\u0001\u00a2\u0001\u00a2\u0003\u00a2\u07cd\b\u00a2\u0001\u00a2\u0003"+ - "\u00a2\u07d0\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001"+ - "\u00a2\u0001\u00a2\u0003\u00a2\u07d8\b\u00a2\u0003\u00a2\u07da\b\u00a2"+ - "\u0001\u00a2\u0001\u00a2\u0003\u00a2\u07de\b\u00a2\u0001\u00a2\u0001\u00a2"+ - "\u0001\u00a2\u0003\u00a2\u07e3\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ - "\u0001\u00a2\u0003\u00a2\u07e9\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ - "\u0001\u00a2\u0003\u00a2\u07ef\b\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ - "\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ - "\u0003\u00a2\u07fa\b\u00a2\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3"+ - "\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3"+ - "\u0001\u00a3\u0001\u00a3\u0004\u00a3\u0808\b\u00a3\u000b\u00a3\f\u00a3"+ - "\u0809\u0001\u00a3\u0001\u00a3\u0005\u00a3\u080e\b\u00a3\n\u00a3\f\u00a3"+ - "\u0811\t\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a4\u0001\u00a4\u0001\u00a4"+ - "\u0001\u00a4\u0001\u00a4\u0004\u00a4\u081a\b\u00a4\u000b\u00a4\f\u00a4"+ - "\u081b\u0001\u00a5\u0001\u00a5\u0001\u00a6\u0001\u00a6\u0003\u00a6\u0822"+ - "\b\u00a6\u0001\u00a7\u0001\u00a7\u0001\u00a8\u0001\u00a8\u0001\u00a9\u0001"+ - "\u00a9\u0001\u00aa\u0001\u00aa\u0001\u00ab\u0001\u00ab\u0003\u00ab\u082e"+ - "\b\u00ab\u0001\u00ac\u0001\u00ac\u0003\u00ac\u0832\b\u00ac\u0001\u00ad"+ - "\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad"+ - "\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad"+ - "\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad"+ - "\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad"+ - "\u0001\u00ad\u0001\u00ad\u0003\u00ad\u084f\b\u00ad\u0002\u076c\u0777\u0000"+ - "\u00ae\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006"+ - "\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e"+ - "\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017"+ - "/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%"+ - "K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f@\u0081A\u0083"+ - "B\u0085C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095K\u0097"+ - "L\u0099M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9U\u00ab"+ - "V\u00adW\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf"+ - "`\u00c1a\u00c3b\u00c5c\u00c7d\u00c9e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3"+ - "j\u00d5k\u00d7l\u00d9m\u00dbn\u00ddo\u00dfp\u00e1q\u00e3r\u00e5s\u00e7"+ - "t\u00e9u\u00ebv\u00edw\u00efx\u00f1y\u00f3z\u00f5{\u00f7|\u00f9}\u00fb"+ - "~\u00fd\u007f\u00ff\u0080\u0101\u0081\u0103\u0082\u0105\u0083\u0107\u0084"+ - "\u0109\u0085\u010b\u0086\u010d\u0087\u010f\u0088\u0111\u0089\u0113\u008a"+ - "\u0115\u008b\u0117\u008c\u0119\u008d\u011b\u008e\u011d\u008f\u011f\u0090"+ - "\u0121\u0091\u0123\u0092\u0125\u0093\u0127\u0094\u0129\u0095\u012b\u0096"+ - "\u012d\u0097\u012f\u0000\u0131\u0000\u0133\u0000\u0135\u0000\u0137\u0000"+ - "\u0139\u0000\u013b\u0000\u013d\u0000\u013f\u0000\u0141\u0000\u0143\u0000"+ - "\u0145\u0000\u0147\u0000\u0149\u0000\u014b\u0000\u014d\u0000\u014f\u0000"+ - "\u0151\u0000\u0153\u0000\u0155\u0000\u0157\u0000\u0159\u0000\u015b\u0000"+ - "\u0001\u0000\u001a\u0002\u0000ssuu\u0003\u0000\t\n\r\r \u000b\u0000!"+ - "!#\'*+-/::<@\\\\^^``||~~\u0002\u0000++--\u0001\u000009\u0003\u000009A"+ - "Faf\u0002\u0000AZaz\u0002\u0000EEee\u0002\u0000PPpp\u0003\u0000\t\n\'"+ - "\'\\\\\u0006\u0000\"\"\'\'\\\\nnrrtt\u0005\u0000\u0000\u001f\"\"\'\'\\"+ - "\\\u007f\u00ff\u0001\u0000\u0000\u007f\u0002\u0000\u0000\t\u000b\u007f"+ - "\u0001\u0000\u0080\u00bf\u0001\u0000\u00c2\u00df\u0001\u0000\u00e0\u00e0"+ - "\u0001\u0000\u00a0\u00bf\u0001\u0000\u00ed\u00ed\u0001\u0000\u0080\u009f"+ - "\u0002\u0000\u00e1\u00ec\u00ee\u00ef\u0001\u0000\u00f0\u00f0\u0001\u0000"+ - "\u0090\u00bf\u0001\u0000\u00f4\u00f4\u0001\u0000\u0080\u008f\u0001\u0000"+ - "\u00f1\u00f3\u08a6\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001"+ - "\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001"+ - "\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000"+ - "\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000"+ - "\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000"+ - "\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000"+ - "\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000"+ - "\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000"+ - "\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000"+ - "%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001"+ - "\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000"+ - "\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u0000"+ - "3\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001"+ - "\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000"+ - "\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000"+ - "A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001"+ - "\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000"+ - "\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000"+ - "O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001"+ - "\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000"+ - "\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000"+ - "]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001"+ - "\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000"+ - "\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000"+ - "k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001"+ - "\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000"+ - "\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000"+ - "y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001"+ - "\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001"+ - "\u0000\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001"+ - "\u0000\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001"+ - "\u0000\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001"+ - "\u0000\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001"+ - "\u0000\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001"+ - "\u0000\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001"+ - "\u0000\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001"+ - "\u0000\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000\u0000\u00a1\u0001"+ - "\u0000\u0000\u0000\u0000\u00a3\u0001\u0000\u0000\u0000\u0000\u00a5\u0001"+ - "\u0000\u0000\u0000\u0000\u00a7\u0001\u0000\u0000\u0000\u0000\u00a9\u0001"+ - "\u0000\u0000\u0000\u0000\u00ab\u0001\u0000\u0000\u0000\u0000\u00ad\u0001"+ - "\u0000\u0000\u0000\u0000\u00af\u0001\u0000\u0000\u0000\u0000\u00b1\u0001"+ - "\u0000\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000\u0000\u00b5\u0001"+ - "\u0000\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000\u0000\u00b9\u0001"+ - "\u0000\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000\u0000\u00bd\u0001"+ - "\u0000\u0000\u0000\u0000\u00bf\u0001\u0000\u0000\u0000\u0000\u00c1\u0001"+ - "\u0000\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000\u0000\u00c5\u0001"+ - "\u0000\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000\u0000\u00c9\u0001"+ - "\u0000\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000\u0000\u00cd\u0001"+ - "\u0000\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000\u0000\u00d1\u0001"+ - "\u0000\u0000\u0000\u0000\u00d3\u0001\u0000\u0000\u0000\u0000\u00d5\u0001"+ - "\u0000\u0000\u0000\u0000\u00d7\u0001\u0000\u0000\u0000\u0000\u00d9\u0001"+ - "\u0000\u0000\u0000\u0000\u00db\u0001\u0000\u0000\u0000\u0000\u00dd\u0001"+ - "\u0000\u0000\u0000\u0000\u00df\u0001\u0000\u0000\u0000\u0000\u00e1\u0001"+ - "\u0000\u0000\u0000\u0000\u00e3\u0001\u0000\u0000\u0000\u0000\u00e5\u0001"+ - "\u0000\u0000\u0000\u0000\u00e7\u0001\u0000\u0000\u0000\u0000\u00e9\u0001"+ - "\u0000\u0000\u0000\u0000\u00eb\u0001\u0000\u0000\u0000\u0000\u00ed\u0001"+ - "\u0000\u0000\u0000\u0000\u00ef\u0001\u0000\u0000\u0000\u0000\u00f1\u0001"+ - "\u0000\u0000\u0000\u0000\u00f3\u0001\u0000\u0000\u0000\u0000\u00f5\u0001"+ - "\u0000\u0000\u0000\u0000\u00f7\u0001\u0000\u0000\u0000\u0000\u00f9\u0001"+ - "\u0000\u0000\u0000\u0000\u00fb\u0001\u0000\u0000\u0000\u0000\u00fd\u0001"+ - "\u0000\u0000\u0000\u0000\u00ff\u0001\u0000\u0000\u0000\u0000\u0101\u0001"+ - "\u0000\u0000\u0000\u0000\u0103\u0001\u0000\u0000\u0000\u0000\u0105\u0001"+ - "\u0000\u0000\u0000\u0000\u0107\u0001\u0000\u0000\u0000\u0000\u0109\u0001"+ - "\u0000\u0000\u0000\u0000\u010b\u0001\u0000\u0000\u0000\u0000\u010d\u0001"+ - "\u0000\u0000\u0000\u0000\u010f\u0001\u0000\u0000\u0000\u0000\u0111\u0001"+ - "\u0000\u0000\u0000\u0000\u0113\u0001\u0000\u0000\u0000\u0000\u0115\u0001"+ - "\u0000\u0000\u0000\u0000\u0117\u0001\u0000\u0000\u0000\u0000\u0119\u0001"+ - "\u0000\u0000\u0000\u0000\u011b\u0001\u0000\u0000\u0000\u0000\u011d\u0001"+ - "\u0000\u0000\u0000\u0000\u011f\u0001\u0000\u0000\u0000\u0000\u0121\u0001"+ - "\u0000\u0000\u0000\u0000\u0123\u0001\u0000\u0000\u0000\u0000\u0125\u0001"+ - "\u0000\u0000\u0000\u0000\u0127\u0001\u0000\u0000\u0000\u0000\u0129\u0001"+ - "\u0000\u0000\u0000\u0000\u012b\u0001\u0000\u0000\u0000\u0000\u012d\u0001"+ - "\u0000\u0000\u0000\u0001\u015d\u0001\u0000\u0000\u0000\u0003\u015f\u0001"+ - "\u0000\u0000\u0000\u0005\u0161\u0001\u0000\u0000\u0000\u0007\u0163\u0001"+ - "\u0000\u0000\u0000\t\u0165\u0001\u0000\u0000\u0000\u000b\u0167\u0001\u0000"+ - "\u0000\u0000\r\u0169\u0001\u0000\u0000\u0000\u000f\u016b\u0001\u0000\u0000"+ - "\u0000\u0011\u0173\u0001\u0000\u0000\u0000\u0013\u017e\u0001\u0000\u0000"+ - "\u0000\u0015\u0186\u0001\u0000\u0000\u0000\u0017\u0190\u0001\u0000\u0000"+ - "\u0000\u0019\u0194\u0001\u0000\u0000\u0000\u001b\u0198\u0001\u0000\u0000"+ - "\u0000\u001d\u01a3\u0001\u0000\u0000\u0000\u001f\u01a9\u0001\u0000\u0000"+ - "\u0000!\u01ae\u0001\u0000\u0000\u0000#\u01ba\u0001\u0000\u0000\u0000%"+ - "\u01bf\u0001\u0000\u0000\u0000\'\u01c5\u0001\u0000\u0000\u0000)\u01ca"+ - "\u0001\u0000\u0000\u0000+\u01ce\u0001\u0000\u0000\u0000-\u01d0\u0001\u0000"+ - "\u0000\u0000/\u01d4\u0001\u0000\u0000\u00001\u01d7\u0001\u0000\u0000\u0000"+ - "3\u01dd\u0001\u0000\u0000\u00005\u01e6\u0001\u0000\u0000\u00007\u01ed"+ - "\u0001\u0000\u0000\u00009\u01f0\u0001\u0000\u0000\u0000;\u01f5\u0001\u0000"+ - "\u0000\u0000=\u01fa\u0001\u0000\u0000\u0000?\u0202\u0001\u0000\u0000\u0000"+ - "A\u0207\u0001\u0000\u0000\u0000C\u0215\u0001\u0000\u0000\u0000E\u0221"+ - "\u0001\u0000\u0000\u0000G\u0236\u0001\u0000\u0000\u0000I\u0240\u0001\u0000"+ - "\u0000\u0000K\u024a\u0001\u0000\u0000\u0000M\u0254\u0001\u0000\u0000\u0000"+ - "O\u025f\u0001\u0000\u0000\u0000Q\u026a\u0001\u0000\u0000\u0000S\u0276"+ - "\u0001\u0000\u0000\u0000U\u0280\u0001\u0000\u0000\u0000W\u0282\u0001\u0000"+ - "\u0000\u0000Y\u028a\u0001\u0000\u0000\u0000[\u0291\u0001\u0000\u0000\u0000"+ - "]\u029a\u0001\u0000\u0000\u0000_\u029c\u0001\u0000\u0000\u0000a\u02a0"+ - "\u0001\u0000\u0000\u0000c\u02a4\u0001\u0000\u0000\u0000e\u02a8\u0001\u0000"+ - "\u0000\u0000g\u02ae\u0001\u0000\u0000\u0000i\u02b2\u0001\u0000\u0000\u0000"+ - "k\u02b4\u0001\u0000\u0000\u0000m\u02b9\u0001\u0000\u0000\u0000o\u02bd"+ - "\u0001\u0000\u0000\u0000q\u02c1\u0001\u0000\u0000\u0000s\u02c5\u0001\u0000"+ - "\u0000\u0000u\u02cb\u0001\u0000\u0000\u0000w\u02d1\u0001\u0000\u0000\u0000"+ - "y\u02d5\u0001\u0000\u0000\u0000{\u02db\u0001\u0000\u0000\u0000}\u02e1"+ - "\u0001\u0000\u0000\u0000\u007f\u02e5\u0001\u0000\u0000\u0000\u0081\u02eb"+ - "\u0001\u0000\u0000\u0000\u0083\u02f1\u0001\u0000\u0000\u0000\u0085\u02f5"+ - "\u0001\u0000\u0000\u0000\u0087\u02fb\u0001\u0000\u0000\u0000\u0089\u0301"+ - "\u0001\u0000\u0000\u0000\u008b\u0306\u0001\u0000\u0000\u0000\u008d\u030b"+ - "\u0001\u0000\u0000\u0000\u008f\u0313\u0001\u0000\u0000\u0000\u0091\u0318"+ - "\u0001\u0000\u0000\u0000\u0093\u031d\u0001\u0000\u0000\u0000\u0095\u0323"+ - "\u0001\u0000\u0000\u0000\u0097\u0329\u0001\u0000\u0000\u0000\u0099\u0330"+ - "\u0001\u0000\u0000\u0000\u009b\u0337\u0001\u0000\u0000\u0000\u009d\u0340"+ - "\u0001\u0000\u0000\u0000\u009f\u0345\u0001\u0000\u0000\u0000\u00a1\u034a"+ - "\u0001\u0000\u0000\u0000\u00a3\u034f\u0001\u0000\u0000\u0000\u00a5\u0354"+ - "\u0001\u0000\u0000\u0000\u00a7\u035b\u0001\u0000\u0000\u0000\u00a9\u0362"+ - "\u0001\u0000\u0000\u0000\u00ab\u0369\u0001\u0000\u0000\u0000\u00ad\u0370"+ - "\u0001\u0000\u0000\u0000\u00af\u0375\u0001\u0000\u0000\u0000\u00b1\u0379"+ - "\u0001\u0000\u0000\u0000\u00b3\u037e\u0001\u0000\u0000\u0000\u00b5\u0383"+ - "\u0001\u0000\u0000\u0000\u00b7\u038a\u0001\u0000\u0000\u0000\u00b9\u0391"+ - "\u0001\u0000\u0000\u0000\u00bb\u0397\u0001\u0000\u0000\u0000\u00bd\u039d"+ - "\u0001\u0000\u0000\u0000\u00bf\u03a2\u0001\u0000\u0000\u0000\u00c1\u03a7"+ - "\u0001\u0000\u0000\u0000\u00c3\u03b1\u0001\u0000\u0000\u0000\u00c5\u03b8"+ - "\u0001\u0000\u0000\u0000\u00c7\u03c0\u0001\u0000\u0000\u0000\u00c9\u03cc"+ - "\u0001\u0000\u0000\u0000\u00cb\u03d6\u0001\u0000\u0000\u0000\u00cd\u03df"+ - "\u0001\u0000\u0000\u0000\u00cf\u03e8\u0001\u0000\u0000\u0000\u00d1\u03f2"+ - "\u0001\u0000\u0000\u0000\u00d3\u0400\u0001\u0000\u0000\u0000\u00d5\u040c"+ - "\u0001\u0000\u0000\u0000\u00d7\u0418\u0001\u0000\u0000\u0000\u00d9\u0424"+ - "\u0001\u0000\u0000\u0000\u00db\u0430\u0001\u0000\u0000\u0000\u00dd\u043c"+ - "\u0001\u0000\u0000\u0000\u00df\u049f\u0001\u0000\u0000\u0000\u00e1\u04ea"+ - "\u0001\u0000\u0000\u0000\u00e3\u0582\u0001\u0000\u0000\u0000\u00e5\u0626"+ - "\u0001\u0000\u0000\u0000\u00e7\u0628\u0001\u0000\u0000\u0000\u00e9\u062d"+ - "\u0001\u0000\u0000\u0000\u00eb\u0632\u0001\u0000\u0000\u0000\u00ed\u0639"+ - "\u0001\u0000\u0000\u0000\u00ef\u063f\u0001\u0000\u0000\u0000\u00f1\u0645"+ - "\u0001\u0000\u0000\u0000\u00f3\u064c\u0001\u0000\u0000\u0000\u00f5\u0652"+ - "\u0001\u0000\u0000\u0000\u00f7\u0659\u0001\u0000\u0000\u0000\u00f9\u065f"+ - "\u0001\u0000\u0000\u0000\u00fb\u0666\u0001\u0000\u0000\u0000\u00fd\u066b"+ - "\u0001\u0000\u0000\u0000\u00ff\u0670\u0001\u0000\u0000\u0000\u0101\u0677"+ - "\u0001\u0000\u0000\u0000\u0103\u067e\u0001\u0000\u0000\u0000\u0105\u0685"+ - "\u0001\u0000\u0000\u0000\u0107\u068c\u0001\u0000\u0000\u0000\u0109\u0693"+ - "\u0001\u0000\u0000\u0000\u010b\u0699\u0001\u0000\u0000\u0000\u010d\u06a0"+ - "\u0001\u0000\u0000\u0000\u010f\u06a9\u0001\u0000\u0000\u0000\u0111\u06b0"+ - "\u0001\u0000\u0000\u0000\u0113\u06b4\u0001\u0000\u0000\u0000\u0115\u06c5"+ - "\u0001\u0000\u0000\u0000\u0117\u06d4\u0001\u0000\u0000\u0000\u0119\u06e6"+ - "\u0001\u0000\u0000\u0000\u011b\u06f4\u0001\u0000\u0000\u0000\u011d\u0710"+ - "\u0001\u0000\u0000\u0000\u011f\u072d\u0001\u0000\u0000\u0000\u0121\u0739"+ - "\u0001\u0000\u0000\u0000\u0123\u074b\u0001\u0000\u0000\u0000\u0125\u0751"+ - "\u0001\u0000\u0000\u0000\u0127\u0758\u0001\u0000\u0000\u0000\u0129\u075a"+ - "\u0001\u0000\u0000\u0000\u012b\u0760\u0001\u0000\u0000\u0000\u012d\u077b"+ - "\u0001\u0000\u0000\u0000\u012f\u077f\u0001\u0000\u0000\u0000\u0131\u0781"+ - "\u0001\u0000\u0000\u0000\u0133\u078b\u0001\u0000\u0000\u0000\u0135\u0795"+ - "\u0001\u0000\u0000\u0000\u0137\u0797\u0001\u0000\u0000\u0000\u0139\u0799"+ - "\u0001\u0000\u0000\u0000\u013b\u079b\u0001\u0000\u0000\u0000\u013d\u07a2"+ - "\u0001\u0000\u0000\u0000\u013f\u07a4\u0001\u0000\u0000\u0000\u0141\u07a7"+ - "\u0001\u0000\u0000\u0000\u0143\u07a9\u0001\u0000\u0000\u0000\u0145\u07f9"+ - "\u0001\u0000\u0000\u0000\u0147\u07fb\u0001\u0000\u0000\u0000\u0149\u0814"+ - "\u0001\u0000\u0000\u0000\u014b\u081d\u0001\u0000\u0000\u0000\u014d\u0821"+ - "\u0001\u0000\u0000\u0000\u014f\u0823\u0001\u0000\u0000\u0000\u0151\u0825"+ - "\u0001\u0000\u0000\u0000\u0153\u0827\u0001\u0000\u0000\u0000\u0155\u0829"+ - "\u0001\u0000\u0000\u0000\u0157\u082d\u0001\u0000\u0000\u0000\u0159\u0831"+ - "\u0001\u0000\u0000\u0000\u015b\u084e\u0001\u0000\u0000\u0000\u015d\u015e"+ - "\u0005(\u0000\u0000\u015e\u0002\u0001\u0000\u0000\u0000\u015f\u0160\u0005"+ - ")\u0000\u0000\u0160\u0004\u0001\u0000\u0000\u0000\u0161\u0162\u0003\u013d"+ - "\u009e\u0000\u0162\u0006\u0001\u0000\u0000\u0000\u0163\u0164\u0003\u013f"+ - "\u009f\u0000\u0164\b\u0001\u0000\u0000\u0000\u0165\u0166\u0003\u0145\u00a2"+ - "\u0000\u0166\n\u0001\u0000\u0000\u0000\u0167\u0168\u0003\u0147\u00a3\u0000"+ - "\u0168\f\u0001\u0000\u0000\u0000\u0169\u016a\u0003\u014d\u00a6\u0000\u016a"+ - "\u000e\u0001\u0000\u0000\u0000\u016b\u016c\u0003\u014d\u00a6\u0000\u016c"+ - "\u016d\u0005.\u0000\u0000\u016d\u016e\u0005c\u0000\u0000\u016e\u016f\u0005"+ - "o\u0000\u0000\u016f\u0170\u0005n\u0000\u0000\u0170\u0171\u0005s\u0000"+ - "\u0000\u0171\u0172\u0005t\u0000\u0000\u0172\u0010\u0001\u0000\u0000\u0000"+ - "\u0173\u0174\u0003\u014d\u00a6\u0000\u0174\u0175\u0005.\u0000\u0000\u0175"+ - "\u0176\u0005s\u0000\u0000\u0176\u0177\u0005y\u0000\u0000\u0177\u0178\u0005"+ - "m\u0000\u0000\u0178\u0179\u0005b\u0000\u0000\u0179\u017a\u0005o\u0000"+ - "\u0000\u017a\u017b\u0005l\u0000\u0000\u017b\u017c\u0005i\u0000\u0000\u017c"+ - "\u017d\u0005c\u0000\u0000\u017d\u0012\u0001\u0000\u0000\u0000\u017e\u017f"+ - "\u0005f\u0000\u0000\u017f\u0180\u0005u\u0000\u0000\u0180\u0181\u0005n"+ - "\u0000\u0000\u0181\u0182\u0005c\u0000\u0000\u0182\u0183\u0005r\u0000\u0000"+ - "\u0183\u0184\u0005e\u0000\u0000\u0184\u0185\u0005f\u0000\u0000\u0185\u0014"+ - "\u0001\u0000\u0000\u0000\u0186\u0187\u0005e\u0000\u0000\u0187\u0188\u0005"+ - "x\u0000\u0000\u0188\u0189\u0005t\u0000\u0000\u0189\u018a\u0005e\u0000"+ - "\u0000\u018a\u018b\u0005r\u0000\u0000\u018b\u018c\u0005n\u0000\u0000\u018c"+ - "\u018d\u0005r\u0000\u0000\u018d\u018e\u0005e\u0000\u0000\u018e\u018f\u0005"+ - "f\u0000\u0000\u018f\u0016\u0001\u0000\u0000\u0000\u0190\u0191\u0005m\u0000"+ - "\u0000\u0191\u0192\u0005u\u0000\u0000\u0192\u0193\u0005t\u0000\u0000\u0193"+ - "\u0018\u0001\u0000\u0000\u0000\u0194\u0195\u0005n\u0000\u0000\u0195\u0196"+ - "\u0005o\u0000\u0000\u0196\u0197\u0005p\u0000\u0000\u0197\u001a\u0001\u0000"+ - "\u0000\u0000\u0198\u0199\u0005s\u0000\u0000\u0199\u019a\u0005y\u0000\u0000"+ - "\u019a\u019b\u0005m\u0000\u0000\u019b\u019c\u0005_\u0000\u0000\u019c\u019d"+ - "\u0005a\u0000\u0000\u019d\u019e\u0005s\u0000\u0000\u019e\u019f\u0005s"+ - "\u0000\u0000\u019f\u01a0\u0005e\u0000\u0000\u01a0\u01a1\u0005r\u0000\u0000"+ - "\u01a1\u01a2\u0005t\u0000\u0000\u01a2\u001c\u0001\u0000\u0000\u0000\u01a3"+ - "\u01a4\u0005a\u0000\u0000\u01a4\u01a5\u0005l\u0000\u0000\u01a5\u01a6\u0005"+ - "l\u0000\u0000\u01a6\u01a7\u0005o\u0000\u0000\u01a7\u01a8\u0005c\u0000"+ - "\u0000\u01a8\u001e\u0001\u0000\u0000\u0000\u01a9\u01aa\u0005f\u0000\u0000"+ - "\u01aa\u01ab\u0005r\u0000\u0000\u01ab\u01ac\u0005e\u0000\u0000\u01ac\u01ad"+ - "\u0005e\u0000\u0000\u01ad \u0001\u0000\u0000\u0000\u01ae\u01af\u0005u"+ - "\u0000\u0000\u01af\u01b0\u0005n\u0000\u0000\u01b0\u01b1\u0005r\u0000\u0000"+ - "\u01b1\u01b2\u0005e\u0000\u0000\u01b2\u01b3\u0005a\u0000\u0000\u01b3\u01b4"+ - "\u0005c\u0000\u0000\u01b4\u01b5\u0005h\u0000\u0000\u01b5\u01b6\u0005a"+ - "\u0000\u0000\u01b6\u01b7\u0005b\u0000\u0000\u01b7\u01b8\u0005l\u0000\u0000"+ - "\u01b8\u01b9\u0005e\u0000\u0000\u01b9\"\u0001\u0000\u0000\u0000\u01ba"+ - "\u01bb\u0005d\u0000\u0000\u01bb\u01bc\u0005r\u0000\u0000\u01bc\u01bd\u0005"+ - "o\u0000\u0000\u01bd\u01be\u0005p\u0000\u0000\u01be$\u0001\u0000\u0000"+ - "\u0000\u01bf\u01c0\u0005b\u0000\u0000\u01c0\u01c1\u0005l\u0000\u0000\u01c1"+ - "\u01c2\u0005o\u0000\u0000\u01c2\u01c3\u0005c\u0000\u0000\u01c3\u01c4\u0005"+ - "k\u0000\u0000\u01c4&\u0001\u0000\u0000\u0000\u01c5\u01c6\u0005l\u0000"+ - "\u0000\u01c6\u01c7\u0005o\u0000\u0000\u01c7\u01c8\u0005o\u0000\u0000\u01c8"+ - "\u01c9\u0005p\u0000\u0000\u01c9(\u0001\u0000\u0000\u0000\u01ca\u01cb\u0005"+ - "f\u0000\u0000\u01cb\u01cc\u0005o\u0000\u0000\u01cc\u01cd\u0005r\u0000"+ - "\u0000\u01cd*\u0001\u0000\u0000\u0000\u01ce\u01cf\u0005|\u0000\u0000\u01cf"+ - ",\u0001\u0000\u0000\u0000\u01d0\u01d1\u0005e\u0000\u0000\u01d1\u01d2\u0005"+ - "n\u0000\u0000\u01d2\u01d3\u0005d\u0000\u0000\u01d3.\u0001\u0000\u0000"+ - "\u0000\u01d4\u01d5\u0005b\u0000\u0000\u01d5\u01d6\u0005r\u0000\u0000\u01d6"+ - "0\u0001\u0000\u0000\u0000\u01d7\u01d8\u0005b\u0000\u0000\u01d8\u01d9\u0005"+ - "r\u0000\u0000\u01d9\u01da\u0005_\u0000\u0000\u01da\u01db\u0005i\u0000"+ - "\u0000\u01db\u01dc\u0005f\u0000\u0000\u01dc2\u0001\u0000\u0000\u0000\u01dd"+ - "\u01de\u0005b\u0000\u0000\u01de\u01df\u0005r\u0000\u0000\u01df\u01e0\u0005"+ - "_\u0000\u0000\u01e0\u01e1\u0005t\u0000\u0000\u01e1\u01e2\u0005a\u0000"+ - "\u0000\u01e2\u01e3\u0005b\u0000\u0000\u01e3\u01e4\u0005l\u0000\u0000\u01e4"+ - "\u01e5\u0005e\u0000\u0000\u01e54\u0001\u0000\u0000\u0000\u01e6\u01e7\u0005"+ - "r\u0000\u0000\u01e7\u01e8\u0005e\u0000\u0000\u01e8\u01e9\u0005t\u0000"+ - "\u0000\u01e9\u01ea\u0005u\u0000\u0000\u01ea\u01eb\u0005r\u0000\u0000\u01eb"+ - "\u01ec\u0005n\u0000\u0000\u01ec6\u0001\u0000\u0000\u0000\u01ed\u01ee\u0005"+ - "i\u0000\u0000\u01ee\u01ef\u0005f\u0000\u0000\u01ef8\u0001\u0000\u0000"+ - "\u0000\u01f0\u01f1\u0005t\u0000\u0000\u01f1\u01f2\u0005h\u0000\u0000\u01f2"+ - "\u01f3\u0005e\u0000\u0000\u01f3\u01f4\u0005n\u0000\u0000\u01f4:\u0001"+ - "\u0000\u0000\u0000\u01f5\u01f6\u0005e\u0000\u0000\u01f6\u01f7\u0005l\u0000"+ - "\u0000\u01f7\u01f8\u0005s\u0000\u0000\u01f8\u01f9\u0005e\u0000\u0000\u01f9"+ - "<\u0001\u0000\u0000\u0000\u01fa\u01fb\u0005.\u0000\u0000\u01fb\u01fc\u0005"+ - "s\u0000\u0000\u01fc\u01fd\u0005e\u0000\u0000\u01fd\u01fe\u0005l\u0000"+ - "\u0000\u01fe\u01ff\u0005e\u0000\u0000\u01ff\u0200\u0005c\u0000\u0000\u0200"+ - "\u0201\u0005t\u0000\u0000\u0201>\u0001\u0000\u0000\u0000\u0202\u0203\u0005"+ - "c\u0000\u0000\u0203\u0204\u0005a\u0000\u0000\u0204\u0205\u0005l\u0000"+ - "\u0000\u0205\u0206\u0005l\u0000\u0000\u0206@\u0001\u0000\u0000\u0000\u0207"+ - "\u0208\u0005c\u0000\u0000\u0208\u0209\u0005a\u0000\u0000\u0209\u020a\u0005"+ - "l\u0000\u0000\u020a\u020b\u0005l\u0000\u0000\u020b\u020c\u0005_\u0000"+ - "\u0000\u020c\u020d\u0005i\u0000\u0000\u020d\u020e\u0005n\u0000\u0000\u020e"+ - "\u020f\u0005d\u0000\u0000\u020f\u0210\u0005i\u0000\u0000\u0210\u0211\u0005"+ - "r\u0000\u0000\u0211\u0212\u0005e\u0000\u0000\u0212\u0213\u0005c\u0000"+ - "\u0000\u0213\u0214\u0005t\u0000\u0000\u0214B\u0001\u0000\u0000\u0000\u0215"+ - "\u0216\u0005r\u0000\u0000\u0216\u0217\u0005e\u0000\u0000\u0217\u0218\u0005"+ - "t\u0000\u0000\u0218\u0219\u0005u\u0000\u0000\u0219\u021a\u0005r\u0000"+ - "\u0000\u021a\u021b\u0005n\u0000\u0000\u021b\u021c\u0005_\u0000\u0000\u021c"+ - "\u021d\u0005c\u0000\u0000\u021d\u021e\u0005a\u0000\u0000\u021e\u021f\u0005"+ - "l\u0000\u0000\u021f\u0220\u0005l\u0000\u0000\u0220D\u0001\u0000\u0000"+ - "\u0000\u0221\u0222\u0005r\u0000\u0000\u0222\u0223\u0005e\u0000\u0000\u0223"+ - "\u0224\u0005t\u0000\u0000\u0224\u0225\u0005u\u0000\u0000\u0225\u0226\u0005"+ - "r\u0000\u0000\u0226\u0227\u0005n\u0000\u0000\u0227\u0228\u0005_\u0000"+ - "\u0000\u0228\u0229\u0005c\u0000\u0000\u0229\u022a\u0005a\u0000\u0000\u022a"+ - "\u022b\u0005l\u0000\u0000\u022b\u022c\u0005l\u0000\u0000\u022c\u022d\u0005"+ - "_\u0000\u0000\u022d\u022e\u0005i\u0000\u0000\u022e\u022f\u0005n\u0000"+ - "\u0000\u022f\u0230\u0005d\u0000\u0000\u0230\u0231\u0005i\u0000\u0000\u0231"+ - "\u0232\u0005r\u0000\u0000\u0232\u0233\u0005e\u0000\u0000\u0233\u0234\u0005"+ - "c\u0000\u0000\u0234\u0235\u0005t\u0000\u0000\u0235F\u0001\u0000\u0000"+ - "\u0000\u0236\u0237\u0005l\u0000\u0000\u0237\u0238\u0005o\u0000\u0000\u0238"+ - "\u0239\u0005c\u0000\u0000\u0239\u023a\u0005a\u0000\u0000\u023a\u023b\u0005"+ - "l\u0000\u0000\u023b\u023c\u0005.\u0000\u0000\u023c\u023d\u0005g\u0000"+ - "\u0000\u023d\u023e\u0005e\u0000\u0000\u023e\u023f\u0005t\u0000\u0000\u023f"+ - "H\u0001\u0000\u0000\u0000\u0240\u0241\u0005l\u0000\u0000\u0241\u0242\u0005"+ - "o\u0000\u0000\u0242\u0243\u0005c\u0000\u0000\u0243\u0244\u0005a\u0000"+ - "\u0000\u0244\u0245\u0005l\u0000\u0000\u0245\u0246\u0005.\u0000\u0000\u0246"+ - "\u0247\u0005s\u0000\u0000\u0247\u0248\u0005e\u0000\u0000\u0248\u0249\u0005"+ - "t\u0000\u0000\u0249J\u0001\u0000\u0000\u0000\u024a\u024b\u0005l\u0000"+ - "\u0000\u024b\u024c\u0005o\u0000\u0000\u024c\u024d\u0005c\u0000\u0000\u024d"+ - "\u024e\u0005a\u0000\u0000\u024e\u024f\u0005l\u0000\u0000\u024f\u0250\u0005"+ - ".\u0000\u0000\u0250\u0251\u0005t\u0000\u0000\u0251\u0252\u0005e\u0000"+ - "\u0000\u0252\u0253\u0005e\u0000\u0000\u0253L\u0001\u0000\u0000\u0000\u0254"+ - "\u0255\u0005g\u0000\u0000\u0255\u0256\u0005l\u0000\u0000\u0256\u0257\u0005"+ - "o\u0000\u0000\u0257\u0258\u0005b\u0000\u0000\u0258\u0259\u0005a\u0000"+ - "\u0000\u0259\u025a\u0005l\u0000\u0000\u025a\u025b\u0005.\u0000\u0000\u025b"+ - "\u025c\u0005g\u0000\u0000\u025c\u025d\u0005e\u0000\u0000\u025d\u025e\u0005"+ - "t\u0000\u0000\u025eN\u0001\u0000\u0000\u0000\u025f\u0260\u0005g\u0000"+ - "\u0000\u0260\u0261\u0005l\u0000\u0000\u0261\u0262\u0005o\u0000\u0000\u0262"+ - "\u0263\u0005b\u0000\u0000\u0263\u0264\u0005a\u0000\u0000\u0264\u0265\u0005"+ - "l\u0000\u0000\u0265\u0266\u0005.\u0000\u0000\u0266\u0267\u0005s\u0000"+ - "\u0000\u0267\u0268\u0005e\u0000\u0000\u0268\u0269\u0005t\u0000\u0000\u0269"+ - "P\u0001\u0000\u0000\u0000\u026a\u026b\u0005.\u0000\u0000\u026b\u026c\u0005"+ - "l\u0000\u0000\u026c\u026d\u0005o\u0000\u0000\u026d\u026e\u0005a\u0000"+ - "\u0000\u026e\u026f\u0005d\u0000\u0000\u026f\u0274\u0001\u0000\u0000\u0000"+ - "\u0270\u0271\u0003].\u0000\u0271\u0272\u0003U*\u0000\u0272\u0273\u0003"+ - "[-\u0000\u0273\u0275\u0001\u0000\u0000\u0000\u0274\u0270\u0001\u0000\u0000"+ - "\u0000\u0274\u0275\u0001\u0000\u0000\u0000\u0275R\u0001\u0000\u0000\u0000"+ - "\u0276\u0277\u0005.\u0000\u0000\u0277\u0278\u0005s\u0000\u0000\u0278\u0279"+ - "\u0005t\u0000\u0000\u0279\u027a\u0005o\u0000\u0000\u027a\u027b\u0005r"+ - "\u0000\u0000\u027b\u027c\u0005e\u0000\u0000\u027c\u027e\u0001\u0000\u0000"+ - "\u0000\u027d\u027f\u0003].\u0000\u027e\u027d\u0001\u0000\u0000\u0000\u027e"+ - "\u027f\u0001\u0000\u0000\u0000\u027fT\u0001\u0000\u0000\u0000\u0280\u0281"+ - "\u0005_\u0000\u0000\u0281V\u0001\u0000\u0000\u0000\u0282\u0283\u0005o"+ - "\u0000\u0000\u0283\u0284\u0005f\u0000\u0000\u0284\u0285\u0005f\u0000\u0000"+ - "\u0285\u0286\u0005s\u0000\u0000\u0286\u0287\u0005e\u0000\u0000\u0287\u0288"+ - "\u0005t\u0000\u0000\u0288\u0289\u0005=\u0000\u0000\u0289X\u0001\u0000"+ - "\u0000\u0000\u028a\u028b\u0005a\u0000\u0000\u028b\u028c\u0005l\u0000\u0000"+ - "\u028c\u028d\u0005i\u0000\u0000\u028d\u028e\u0005g\u0000\u0000\u028e\u028f"+ - "\u0005n\u0000\u0000\u028f\u0290\u0005=\u0000\u0000\u0290Z\u0001\u0000"+ - "\u0000\u0000\u0291\u0292\u0007\u0000\u0000\u0000\u0292\\\u0001\u0000\u0000"+ - "\u0000\u0293\u029b\u00058\u0000\u0000\u0294\u0295\u00051\u0000\u0000\u0295"+ - "\u029b\u00056\u0000\u0000\u0296\u0297\u00053\u0000\u0000\u0297\u029b\u0005"+ - "2\u0000\u0000\u0298\u0299\u00056\u0000\u0000\u0299\u029b\u00054\u0000"+ - "\u0000\u029a\u0293\u0001\u0000\u0000\u0000\u029a\u0294\u0001\u0000\u0000"+ - "\u0000\u029a\u0296\u0001\u0000\u0000\u0000\u029a\u0298\u0001\u0000\u0000"+ - "\u0000\u029b^\u0001\u0000\u0000\u0000\u029c\u029d\u0005i\u0000\u0000\u029d"+ - "\u029e\u00053\u0000\u0000\u029e\u029f\u00052\u0000\u0000\u029f`\u0001"+ - "\u0000\u0000\u0000\u02a0\u02a1\u0005i\u0000\u0000\u02a1\u02a2\u00056\u0000"+ - "\u0000\u02a2\u02a3\u00054\u0000\u0000\u02a3b\u0001\u0000\u0000\u0000\u02a4"+ - "\u02a5\u0005f\u0000\u0000\u02a5\u02a6\u00053\u0000\u0000\u02a6\u02a7\u0005"+ - "2\u0000\u0000\u02a7d\u0001\u0000\u0000\u0000\u02a8\u02a9\u0005f\u0000"+ - "\u0000\u02a9\u02aa\u00056\u0000\u0000\u02aa\u02ab\u00054\u0000\u0000\u02ab"+ - "f\u0001\u0000\u0000\u0000\u02ac\u02af\u0003_/\u0000\u02ad\u02af\u0003"+ - "a0\u0000\u02ae\u02ac\u0001\u0000\u0000\u0000\u02ae\u02ad\u0001\u0000\u0000"+ - "\u0000\u02afh\u0001\u0000\u0000\u0000\u02b0\u02b3\u0003c1\u0000\u02b1"+ - "\u02b3\u0003e2\u0000\u02b2\u02b0\u0001\u0000\u0000\u0000\u02b2\u02b1\u0001"+ - "\u0000\u0000\u0000\u02b3j\u0001\u0000\u0000\u0000\u02b4\u02b5\u0005.\u0000"+ - "\u0000\u02b5\u02b6\u0005e\u0000\u0000\u02b6\u02b7\u0005q\u0000\u0000\u02b7"+ - "\u02b8\u0005z\u0000\u0000\u02b8l\u0001\u0000\u0000\u0000\u02b9\u02ba\u0005"+ - ".\u0000\u0000\u02ba\u02bb\u0005e\u0000\u0000\u02bb\u02bc\u0005q\u0000"+ - "\u0000\u02bcn\u0001\u0000\u0000\u0000\u02bd\u02be\u0005.\u0000\u0000\u02be"+ - "\u02bf\u0005n\u0000\u0000\u02bf\u02c0\u0005e\u0000\u0000\u02c0p\u0001"+ - "\u0000\u0000\u0000\u02c1\u02c2\u0005.\u0000\u0000\u02c2\u02c3\u0005l\u0000"+ - "\u0000\u02c3\u02c4\u0005t\u0000\u0000\u02c4r\u0001\u0000\u0000\u0000\u02c5"+ - "\u02c6\u0005.\u0000\u0000\u02c6\u02c7\u0005l\u0000\u0000\u02c7\u02c8\u0005"+ - "t\u0000\u0000\u02c8\u02c9\u0005_\u0000\u0000\u02c9\u02ca\u0005s\u0000"+ - "\u0000\u02cat\u0001\u0000\u0000\u0000\u02cb\u02cc\u0005.\u0000\u0000\u02cc"+ - "\u02cd\u0005l\u0000\u0000\u02cd\u02ce\u0005t\u0000\u0000\u02ce\u02cf\u0005"+ - "_\u0000\u0000\u02cf\u02d0\u0005u\u0000\u0000\u02d0v\u0001\u0000\u0000"+ - "\u0000\u02d1\u02d2\u0005.\u0000\u0000\u02d2\u02d3\u0005l\u0000\u0000\u02d3"+ - "\u02d4\u0005e\u0000\u0000\u02d4x\u0001\u0000\u0000\u0000\u02d5\u02d6\u0005"+ - ".\u0000\u0000\u02d6\u02d7\u0005l\u0000\u0000\u02d7\u02d8\u0005e\u0000"+ - "\u0000\u02d8\u02d9\u0005_\u0000\u0000\u02d9\u02da\u0005s\u0000\u0000\u02da"+ - "z\u0001\u0000\u0000\u0000\u02db\u02dc\u0005.\u0000\u0000\u02dc\u02dd\u0005"+ - "l\u0000\u0000\u02dd\u02de\u0005e\u0000\u0000\u02de\u02df\u0005_\u0000"+ - "\u0000\u02df\u02e0\u0005u\u0000\u0000\u02e0|\u0001\u0000\u0000\u0000\u02e1"+ - "\u02e2\u0005.\u0000\u0000\u02e2\u02e3\u0005g\u0000\u0000\u02e3\u02e4\u0005"+ - "t\u0000\u0000\u02e4~\u0001\u0000\u0000\u0000\u02e5\u02e6\u0005.\u0000"+ - "\u0000\u02e6\u02e7\u0005g\u0000\u0000\u02e7\u02e8\u0005t\u0000\u0000\u02e8"+ - "\u02e9\u0005_\u0000\u0000\u02e9\u02ea\u0005s\u0000\u0000\u02ea\u0080\u0001"+ - "\u0000\u0000\u0000\u02eb\u02ec\u0005.\u0000\u0000\u02ec\u02ed\u0005g\u0000"+ - "\u0000\u02ed\u02ee\u0005t\u0000\u0000\u02ee\u02ef\u0005_\u0000\u0000\u02ef"+ - "\u02f0\u0005u\u0000\u0000\u02f0\u0082\u0001\u0000\u0000\u0000\u02f1\u02f2"+ - "\u0005.\u0000\u0000\u02f2\u02f3\u0005g\u0000\u0000\u02f3\u02f4\u0005e"+ - "\u0000\u0000\u02f4\u0084\u0001\u0000\u0000\u0000\u02f5\u02f6\u0005.\u0000"+ - "\u0000\u02f6\u02f7\u0005g\u0000\u0000\u02f7\u02f8\u0005e\u0000\u0000\u02f8"+ - "\u02f9\u0005_\u0000\u0000\u02f9\u02fa\u0005s\u0000\u0000\u02fa\u0086\u0001"+ - "\u0000\u0000\u0000\u02fb\u02fc\u0005.\u0000\u0000\u02fc\u02fd\u0005g\u0000"+ - "\u0000\u02fd\u02fe\u0005e\u0000\u0000\u02fe\u02ff\u0005_\u0000\u0000\u02ff"+ - "\u0300\u0005u\u0000\u0000\u0300\u0088\u0001\u0000\u0000\u0000\u0301\u0302"+ - "\u0005.\u0000\u0000\u0302\u0303\u0005c\u0000\u0000\u0303\u0304\u0005l"+ - "\u0000\u0000\u0304\u0305\u0005z\u0000\u0000\u0305\u008a\u0001\u0000\u0000"+ - "\u0000\u0306\u0307\u0005.\u0000\u0000\u0307\u0308\u0005c\u0000\u0000\u0308"+ - "\u0309\u0005t\u0000\u0000\u0309\u030a\u0005z\u0000\u0000\u030a\u008c\u0001"+ - "\u0000\u0000\u0000\u030b\u030c\u0005.\u0000\u0000\u030c\u030d\u0005p\u0000"+ - "\u0000\u030d\u030e\u0005o\u0000\u0000\u030e\u030f\u0005p\u0000\u0000\u030f"+ - "\u0310\u0005c\u0000\u0000\u0310\u0311\u0005n\u0000\u0000\u0311\u0312\u0005"+ - "t\u0000\u0000\u0312\u008e\u0001\u0000\u0000\u0000\u0313\u0314\u0005.\u0000"+ - "\u0000\u0314\u0315\u0005n\u0000\u0000\u0315\u0316\u0005e\u0000\u0000\u0316"+ - "\u0317\u0005g\u0000\u0000\u0317\u0090\u0001\u0000\u0000\u0000\u0318\u0319"+ - "\u0005.\u0000\u0000\u0319\u031a\u0005a\u0000\u0000\u031a\u031b\u0005b"+ - "\u0000\u0000\u031b\u031c\u0005s\u0000\u0000\u031c\u0092\u0001\u0000\u0000"+ - "\u0000\u031d\u031e\u0005.\u0000\u0000\u031e\u031f\u0005s\u0000\u0000\u031f"+ - "\u0320\u0005q\u0000\u0000\u0320\u0321\u0005r\u0000\u0000\u0321\u0322\u0005"+ - "t\u0000\u0000\u0322\u0094\u0001\u0000\u0000\u0000\u0323\u0324\u0005.\u0000"+ - "\u0000\u0324\u0325\u0005c\u0000\u0000\u0325\u0326\u0005e\u0000\u0000\u0326"+ - "\u0327\u0005i\u0000\u0000\u0327\u0328\u0005l\u0000\u0000\u0328\u0096\u0001"+ - "\u0000\u0000\u0000\u0329\u032a\u0005.\u0000\u0000\u032a\u032b\u0005f\u0000"+ - "\u0000\u032b\u032c\u0005l\u0000\u0000\u032c\u032d\u0005o\u0000\u0000\u032d"+ - "\u032e\u0005o\u0000\u0000\u032e\u032f\u0005r\u0000\u0000\u032f\u0098\u0001"+ - "\u0000\u0000\u0000\u0330\u0331\u0005.\u0000\u0000\u0331\u0332\u0005t\u0000"+ - "\u0000\u0332\u0333\u0005r\u0000\u0000\u0333\u0334\u0005u\u0000\u0000\u0334"+ - "\u0335\u0005n\u0000\u0000\u0335\u0336\u0005c\u0000\u0000\u0336\u009a\u0001"+ - "\u0000\u0000\u0000\u0337\u0338\u0005.\u0000\u0000\u0338\u0339\u0005n\u0000"+ - "\u0000\u0339\u033a\u0005e\u0000\u0000\u033a\u033b\u0005a\u0000\u0000\u033b"+ - "\u033c\u0005r\u0000\u0000\u033c\u033d\u0005e\u0000\u0000\u033d\u033e\u0005"+ - "s\u0000\u0000\u033e\u033f\u0005t\u0000\u0000\u033f\u009c\u0001\u0000\u0000"+ - "\u0000\u0340\u0341\u0005.\u0000\u0000\u0341\u0342\u0005a\u0000\u0000\u0342"+ - "\u0343\u0005d\u0000\u0000\u0343\u0344\u0005d\u0000\u0000\u0344\u009e\u0001"+ - "\u0000\u0000\u0000\u0345\u0346\u0005.\u0000\u0000\u0346\u0347\u0005s\u0000"+ - "\u0000\u0347\u0348\u0005u\u0000\u0000\u0348\u0349\u0005b\u0000\u0000\u0349"+ - "\u00a0\u0001\u0000\u0000\u0000\u034a\u034b\u0005.\u0000\u0000\u034b\u034c"+ - "\u0005m\u0000\u0000\u034c\u034d\u0005u\u0000\u0000\u034d\u034e\u0005l"+ - "\u0000\u0000\u034e\u00a2\u0001\u0000\u0000\u0000\u034f\u0350\u0005.\u0000"+ - "\u0000\u0350\u0351\u0005d\u0000\u0000\u0351\u0352\u0005i\u0000\u0000\u0352"+ - "\u0353\u0005v\u0000\u0000\u0353\u00a4\u0001\u0000\u0000\u0000\u0354\u0355"+ - "\u0005.\u0000\u0000\u0355\u0356\u0005d\u0000\u0000\u0356\u0357\u0005i"+ - "\u0000\u0000\u0357\u0358\u0005v\u0000\u0000\u0358\u0359\u0005_\u0000\u0000"+ - "\u0359\u035a\u0005s\u0000\u0000\u035a\u00a6\u0001\u0000\u0000\u0000\u035b"+ - "\u035c\u0005.\u0000\u0000\u035c\u035d\u0005d\u0000\u0000\u035d\u035e\u0005"+ - "i\u0000\u0000\u035e\u035f\u0005v\u0000\u0000\u035f\u0360\u0005_\u0000"+ - "\u0000\u0360\u0361\u0005u\u0000\u0000\u0361\u00a8\u0001\u0000\u0000\u0000"+ - "\u0362\u0363\u0005.\u0000\u0000\u0363\u0364\u0005r\u0000\u0000\u0364\u0365"+ - "\u0005e\u0000\u0000\u0365\u0366\u0005m\u0000\u0000\u0366\u0367\u0005_"+ - "\u0000\u0000\u0367\u0368\u0005s\u0000\u0000\u0368\u00aa\u0001\u0000\u0000"+ - "\u0000\u0369\u036a\u0005.\u0000\u0000\u036a\u036b\u0005r\u0000\u0000\u036b"+ - "\u036c\u0005e\u0000\u0000\u036c\u036d\u0005m\u0000\u0000\u036d\u036e\u0005"+ - "_\u0000\u0000\u036e\u036f\u0005u\u0000\u0000\u036f\u00ac\u0001\u0000\u0000"+ - "\u0000\u0370\u0371\u0005.\u0000\u0000\u0371\u0372\u0005a\u0000\u0000\u0372"+ - "\u0373\u0005n\u0000\u0000\u0373\u0374\u0005d\u0000\u0000\u0374\u00ae\u0001"+ - "\u0000\u0000\u0000\u0375\u0376\u0005.\u0000\u0000\u0376\u0377\u0005o\u0000"+ - "\u0000\u0377\u0378\u0005r\u0000\u0000\u0378\u00b0\u0001\u0000\u0000\u0000"+ - "\u0379\u037a\u0005.\u0000\u0000\u037a\u037b\u0005x\u0000\u0000\u037b\u037c"+ - "\u0005o\u0000\u0000\u037c\u037d\u0005r\u0000\u0000\u037d\u00b2\u0001\u0000"+ - "\u0000\u0000\u037e\u037f\u0005.\u0000\u0000\u037f\u0380\u0005s\u0000\u0000"+ - "\u0380\u0381\u0005h\u0000\u0000\u0381\u0382\u0005l\u0000\u0000\u0382\u00b4"+ - "\u0001\u0000\u0000\u0000\u0383\u0384\u0005.\u0000\u0000\u0384\u0385\u0005"+ - "s\u0000\u0000\u0385\u0386\u0005h\u0000\u0000\u0386\u0387\u0005r\u0000"+ - "\u0000\u0387\u0388\u0005_\u0000\u0000\u0388\u0389\u0005s\u0000\u0000\u0389"+ - "\u00b6\u0001\u0000\u0000\u0000\u038a\u038b\u0005.\u0000\u0000\u038b\u038c"+ - "\u0005s\u0000\u0000\u038c\u038d\u0005h\u0000\u0000\u038d\u038e\u0005r"+ - "\u0000\u0000\u038e\u038f\u0005_\u0000\u0000\u038f\u0390\u0005u\u0000\u0000"+ - "\u0390\u00b8\u0001\u0000\u0000\u0000\u0391\u0392\u0005.\u0000\u0000\u0392"+ - "\u0393\u0005r\u0000\u0000\u0393\u0394\u0005o\u0000\u0000\u0394\u0395\u0005"+ - "t\u0000\u0000\u0395\u0396\u0005l\u0000\u0000\u0396\u00ba\u0001\u0000\u0000"+ - "\u0000\u0397\u0398\u0005.\u0000\u0000\u0398\u0399\u0005r\u0000\u0000\u0399"+ - "\u039a\u0005o\u0000\u0000\u039a\u039b\u0005t\u0000\u0000\u039b\u039c\u0005"+ - "r\u0000\u0000\u039c\u00bc\u0001\u0000\u0000\u0000\u039d\u039e\u0005.\u0000"+ - "\u0000\u039e\u039f\u0005m\u0000\u0000\u039f\u03a0\u0005i\u0000\u0000\u03a0"+ - "\u03a1\u0005n\u0000\u0000\u03a1\u00be\u0001\u0000\u0000\u0000\u03a2\u03a3"+ - "\u0005.\u0000\u0000\u03a3\u03a4\u0005m\u0000\u0000\u03a4\u03a5\u0005a"+ - "\u0000\u0000\u03a5\u03a6\u0005x\u0000\u0000\u03a6\u00c0\u0001\u0000\u0000"+ - "\u0000\u03a7\u03a8\u0005.\u0000\u0000\u03a8\u03a9\u0005c\u0000\u0000\u03a9"+ - "\u03aa\u0005o\u0000\u0000\u03aa\u03ab\u0005p\u0000\u0000\u03ab\u03ac\u0005"+ - "y\u0000\u0000\u03ac\u03ad\u0005s\u0000\u0000\u03ad\u03ae\u0005i\u0000"+ - "\u0000\u03ae\u03af\u0005g\u0000\u0000\u03af\u03b0\u0005n\u0000\u0000\u03b0"+ - "\u00c2\u0001\u0000\u0000\u0000\u03b1\u03b2\u0005.\u0000\u0000\u03b2\u03b3"+ - "\u0005w\u0000\u0000\u03b3\u03b4\u0005r\u0000\u0000\u03b4\u03b5\u0005a"+ - "\u0000\u0000\u03b5\u03b6\u0005p\u0000\u0000\u03b6\u03b7\u0005_\u0000\u0000"+ - "\u03b7\u00c4\u0001\u0000\u0000\u0000\u03b8\u03b9\u0005.\u0000\u0000\u03b9"+ - "\u03ba\u0005t\u0000\u0000\u03ba\u03bb\u0005r\u0000\u0000\u03bb\u03bc\u0005"+ - "u\u0000\u0000\u03bc\u03bd\u0005n\u0000\u0000\u03bd\u03be\u0005c\u0000"+ - "\u0000\u03be\u03bf\u0005_\u0000\u0000\u03bf\u00c6\u0001\u0000\u0000\u0000"+ - "\u03c0\u03c1\u0005.\u0000\u0000\u03c1\u03c2\u0005t\u0000\u0000\u03c2\u03c3"+ - "\u0005r\u0000\u0000\u03c3\u03c4\u0005u\u0000\u0000\u03c4\u03c5\u0005n"+ - "\u0000\u0000\u03c5\u03c6\u0005c\u0000\u0000\u03c6\u03c7\u0005_\u0000\u0000"+ - "\u03c7\u03c8\u0005s\u0000\u0000\u03c8\u03c9\u0005a\u0000\u0000\u03c9\u03ca"+ - "\u0005t\u0000\u0000\u03ca\u03cb\u0005_\u0000\u0000\u03cb\u00c8\u0001\u0000"+ - "\u0000\u0000\u03cc\u03cd\u0005.\u0000\u0000\u03cd\u03ce\u0005c\u0000\u0000"+ - "\u03ce\u03cf\u0005o\u0000\u0000\u03cf\u03d0\u0005n\u0000\u0000\u03d0\u03d1"+ - "\u0005v\u0000\u0000\u03d1\u03d2\u0005e\u0000\u0000\u03d2\u03d3\u0005r"+ - "\u0000\u0000\u03d3\u03d4\u0005t\u0000\u0000\u03d4\u03d5\u0005_\u0000\u0000"+ - "\u03d5\u00ca\u0001\u0000\u0000\u0000\u03d6\u03d7\u0005.\u0000\u0000\u03d7"+ - "\u03d8\u0005e\u0000\u0000\u03d8\u03d9\u0005x\u0000\u0000\u03d9\u03da\u0005"+ - "t\u0000\u0000\u03da\u03db\u0005e\u0000\u0000\u03db\u03dc\u0005n\u0000"+ - "\u0000\u03dc\u03dd\u0005d\u0000\u0000\u03dd\u03de\u0005_\u0000\u0000\u03de"+ - "\u00cc\u0001\u0000\u0000\u0000\u03df\u03e0\u0005.\u0000\u0000\u03e0\u03e1"+ - "\u0005d\u0000\u0000\u03e1\u03e2\u0005e\u0000\u0000\u03e2\u03e3\u0005m"+ - "\u0000\u0000\u03e3\u03e4\u0005o\u0000\u0000\u03e4\u03e5\u0005t\u0000\u0000"+ - "\u03e5\u03e6\u0005e\u0000\u0000\u03e6\u03e7\u0005_\u0000\u0000\u03e7\u00ce"+ - "\u0001\u0000\u0000\u0000\u03e8\u03e9\u0005.\u0000\u0000\u03e9\u03ea\u0005"+ - "p\u0000\u0000\u03ea\u03eb\u0005r\u0000\u0000\u03eb\u03ec\u0005o\u0000"+ - "\u0000\u03ec\u03ed\u0005m\u0000\u0000\u03ed\u03ee\u0005o\u0000\u0000\u03ee"+ - "\u03ef\u0005t\u0000\u0000\u03ef\u03f0\u0005e\u0000\u0000\u03f0\u03f1\u0005"+ - "_\u0000\u0000\u03f1\u00d0\u0001\u0000\u0000\u0000\u03f2\u03f3\u0005.\u0000"+ - "\u0000\u03f3\u03f4\u0005r\u0000\u0000\u03f4\u03f5\u0005e\u0000\u0000\u03f5"+ - "\u03f6\u0005i\u0000\u0000\u03f6\u03f7\u0005n\u0000\u0000\u03f7\u03f8\u0005"+ - "t\u0000\u0000\u03f8\u03f9\u0005e\u0000\u0000\u03f9\u03fa\u0005r\u0000"+ - "\u0000\u03fa\u03fb\u0005p\u0000\u0000\u03fb\u03fc\u0005r\u0000\u0000\u03fc"+ - "\u03fd\u0005e\u0000\u0000\u03fd\u03fe\u0005t\u0000\u0000\u03fe\u03ff\u0005"+ - "_\u0000\u0000\u03ff\u00d2\u0001\u0000\u0000\u0000\u0400\u0401\u0005m\u0000"+ - "\u0000\u0401\u0402\u0005e\u0000\u0000\u0402\u0403\u0005m\u0000\u0000\u0403"+ - "\u0404\u0005o\u0000\u0000\u0404\u0405\u0005r\u0000\u0000\u0405\u0406\u0005"+ - "y\u0000\u0000\u0406\u0407\u0005.\u0000\u0000\u0407\u0408\u0005s\u0000"+ - "\u0000\u0408\u0409\u0005i\u0000\u0000\u0409\u040a\u0005z\u0000\u0000\u040a"+ - "\u040b\u0005e\u0000\u0000\u040b\u00d4\u0001\u0000\u0000\u0000\u040c\u040d"+ - "\u0005m\u0000\u0000\u040d\u040e\u0005e\u0000\u0000\u040e\u040f\u0005m"+ - "\u0000\u0000\u040f\u0410\u0005o\u0000\u0000\u0410\u0411\u0005r\u0000\u0000"+ - "\u0411\u0412\u0005y\u0000\u0000\u0412\u0413\u0005.\u0000\u0000\u0413\u0414"+ - "\u0005g\u0000\u0000\u0414\u0415\u0005r\u0000\u0000\u0415\u0416\u0005o"+ - "\u0000\u0000\u0416\u0417\u0005w\u0000\u0000\u0417\u00d6\u0001\u0000\u0000"+ - "\u0000\u0418\u0419\u0005m\u0000\u0000\u0419\u041a\u0005e\u0000\u0000\u041a"+ - "\u041b\u0005m\u0000\u0000\u041b\u041c\u0005o\u0000\u0000\u041c\u041d\u0005"+ - "r\u0000\u0000\u041d\u041e\u0005y\u0000\u0000\u041e\u041f\u0005.\u0000"+ - "\u0000\u041f\u0420\u0005f\u0000\u0000\u0420\u0421\u0005i\u0000\u0000\u0421"+ - "\u0422\u0005l\u0000\u0000\u0422\u0423\u0005l\u0000\u0000\u0423\u00d8\u0001"+ - "\u0000\u0000\u0000\u0424\u0425\u0005m\u0000\u0000\u0425\u0426\u0005e\u0000"+ - "\u0000\u0426\u0427\u0005m\u0000\u0000\u0427\u0428\u0005o\u0000\u0000\u0428"+ - "\u0429\u0005r\u0000\u0000\u0429\u042a\u0005y\u0000\u0000\u042a\u042b\u0005"+ - ".\u0000\u0000\u042b\u042c\u0005c\u0000\u0000\u042c\u042d\u0005o\u0000"+ - "\u0000\u042d\u042e\u0005p\u0000\u0000\u042e\u042f\u0005y\u0000\u0000\u042f"+ - "\u00da\u0001\u0000\u0000\u0000\u0430\u0431\u0005m\u0000\u0000\u0431\u0432"+ - "\u0005e\u0000\u0000\u0432\u0433\u0005m\u0000\u0000\u0433\u0434\u0005o"+ - "\u0000\u0000\u0434\u0435\u0005r\u0000\u0000\u0435\u0436\u0005y\u0000\u0000"+ - "\u0436\u0437\u0005.\u0000\u0000\u0437\u0438\u0005i\u0000\u0000\u0438\u0439"+ - "\u0005n\u0000\u0000\u0439\u043a\u0005i\u0000\u0000\u043a\u043b\u0005t"+ - "\u0000\u0000\u043b\u00dc\u0001\u0000\u0000\u0000\u043c\u043d\u0003g3\u0000"+ - "\u043d\u043e\u0003k5\u0000\u043e\u00de\u0001\u0000\u0000\u0000\u043f\u0440"+ - "\u0003g3\u0000\u0440\u0441\u0005.\u0000\u0000\u0441\u0442\u0005e\u0000"+ - "\u0000\u0442\u0443\u0005q\u0000\u0000\u0443\u04a0\u0001\u0000\u0000\u0000"+ - "\u0444\u0445\u0003g3\u0000\u0445\u0446\u0005.\u0000\u0000\u0446\u0447"+ - "\u0005n\u0000\u0000\u0447\u0448\u0005e\u0000\u0000\u0448\u04a0\u0001\u0000"+ - "\u0000\u0000\u0449\u044a\u0003g3\u0000\u044a\u044b\u0005.\u0000\u0000"+ - "\u044b\u044c\u0005l\u0000\u0000\u044c\u044d\u0005t\u0000\u0000\u044d\u044e"+ - "\u0005_\u0000\u0000\u044e\u044f\u0005s\u0000\u0000\u044f\u04a0\u0001\u0000"+ - "\u0000\u0000\u0450\u0451\u0003g3\u0000\u0451\u0452\u0005.\u0000\u0000"+ - "\u0452\u0453\u0005l\u0000\u0000\u0453\u0454\u0005t\u0000\u0000\u0454\u0455"+ - "\u0005_\u0000\u0000\u0455\u0456\u0005u\u0000\u0000\u0456\u04a0\u0001\u0000"+ - "\u0000\u0000\u0457\u0458\u0003g3\u0000\u0458\u0459\u0005.\u0000\u0000"+ - "\u0459\u045a\u0005l\u0000\u0000\u045a\u045b\u0005e\u0000\u0000\u045b\u045c"+ - "\u0005_\u0000\u0000\u045c\u045d\u0005s\u0000\u0000\u045d\u04a0\u0001\u0000"+ - "\u0000\u0000\u045e\u045f\u0003g3\u0000\u045f\u0460\u0005.\u0000\u0000"+ - "\u0460\u0461\u0005l\u0000\u0000\u0461\u0462\u0005e\u0000\u0000\u0462\u0463"+ - "\u0005_\u0000\u0000\u0463\u0464\u0005u\u0000\u0000\u0464\u04a0\u0001\u0000"+ - "\u0000\u0000\u0465\u0466\u0003g3\u0000\u0466\u0467\u0005.\u0000\u0000"+ - "\u0467\u0468\u0005g\u0000\u0000\u0468\u0469\u0005t\u0000\u0000\u0469\u046a"+ - "\u0005_\u0000\u0000\u046a\u046b\u0005s\u0000\u0000\u046b\u04a0\u0001\u0000"+ - "\u0000\u0000\u046c\u046d\u0003g3\u0000\u046d\u046e\u0005.\u0000\u0000"+ - "\u046e\u046f\u0005g\u0000\u0000\u046f\u0470\u0005t\u0000\u0000\u0470\u0471"+ - "\u0005_\u0000\u0000\u0471\u0472\u0005u\u0000\u0000\u0472\u04a0\u0001\u0000"+ - "\u0000\u0000\u0473\u0474\u0003g3\u0000\u0474\u0475\u0005.\u0000\u0000"+ - "\u0475\u0476\u0005g\u0000\u0000\u0476\u0477\u0005e\u0000\u0000\u0477\u0478"+ - "\u0005_\u0000\u0000\u0478\u0479\u0005s\u0000\u0000\u0479\u04a0\u0001\u0000"+ - "\u0000\u0000\u047a\u047b\u0003g3\u0000\u047b\u047c\u0005.\u0000\u0000"+ - "\u047c\u047d\u0005g\u0000\u0000\u047d\u047e\u0005e\u0000\u0000\u047e\u047f"+ - "\u0005_\u0000\u0000\u047f\u0480\u0005u\u0000\u0000\u0480\u04a0\u0001\u0000"+ - "\u0000\u0000\u0481\u0482\u0003i4\u0000\u0482\u0483\u0005.\u0000\u0000"+ - "\u0483\u0484\u0005e\u0000\u0000\u0484\u0485\u0005q\u0000\u0000\u0485\u04a0"+ - "\u0001\u0000\u0000\u0000\u0486\u0487\u0003i4\u0000\u0487\u0488\u0005."+ - "\u0000\u0000\u0488\u0489\u0005n\u0000\u0000\u0489\u048a\u0005e\u0000\u0000"+ - "\u048a\u04a0\u0001\u0000\u0000\u0000\u048b\u048c\u0003i4\u0000\u048c\u048d"+ - "\u0005.\u0000\u0000\u048d\u048e\u0005l\u0000\u0000\u048e\u048f\u0005t"+ - "\u0000\u0000\u048f\u04a0\u0001\u0000\u0000\u0000\u0490\u0491\u0003i4\u0000"+ - "\u0491\u0492\u0005.\u0000\u0000\u0492\u0493\u0005l\u0000\u0000\u0493\u0494"+ - "\u0005e\u0000\u0000\u0494\u04a0\u0001\u0000\u0000\u0000\u0495\u0496\u0003"+ - "i4\u0000\u0496\u0497\u0005.\u0000\u0000\u0497\u0498\u0005g\u0000\u0000"+ - "\u0498\u0499\u0005t\u0000\u0000\u0499\u04a0\u0001\u0000\u0000\u0000\u049a"+ - "\u049b\u0003i4\u0000\u049b\u049c\u0005.\u0000\u0000\u049c\u049d\u0005"+ - "g\u0000\u0000\u049d\u049e\u0005e\u0000\u0000\u049e\u04a0\u0001\u0000\u0000"+ - "\u0000\u049f\u043f\u0001\u0000\u0000\u0000\u049f\u0444\u0001\u0000\u0000"+ - "\u0000\u049f\u0449\u0001\u0000\u0000\u0000\u049f\u0450\u0001\u0000\u0000"+ - "\u0000\u049f\u0457\u0001\u0000\u0000\u0000\u049f\u045e\u0001\u0000\u0000"+ - "\u0000\u049f\u0465\u0001\u0000\u0000\u0000\u049f\u046c\u0001\u0000\u0000"+ - "\u0000\u049f\u0473\u0001\u0000\u0000\u0000\u049f\u047a\u0001\u0000\u0000"+ - "\u0000\u049f\u0481\u0001\u0000\u0000\u0000\u049f\u0486\u0001\u0000\u0000"+ - "\u0000\u049f\u048b\u0001\u0000\u0000\u0000\u049f\u0490\u0001\u0000\u0000"+ - "\u0000\u049f\u0495\u0001\u0000\u0000\u0000\u049f\u049a\u0001\u0000\u0000"+ - "\u0000\u04a0\u00e0\u0001\u0000\u0000\u0000\u04a1\u04a2\u0003g3\u0000\u04a2"+ - "\u04a3\u0005.\u0000\u0000\u04a3\u04a4\u0005c\u0000\u0000\u04a4\u04a5\u0005"+ - "l\u0000\u0000\u04a5\u04a6\u0005z\u0000\u0000\u04a6\u04eb\u0001\u0000\u0000"+ - "\u0000\u04a7\u04a8\u0003g3\u0000\u04a8\u04a9\u0005.\u0000\u0000\u04a9"+ - "\u04aa\u0005c\u0000\u0000\u04aa\u04ab\u0005t\u0000\u0000\u04ab\u04ac\u0005"+ - "z\u0000\u0000\u04ac\u04eb\u0001\u0000\u0000\u0000\u04ad\u04ae\u0003g3"+ - "\u0000\u04ae\u04af\u0005.\u0000\u0000\u04af\u04b0\u0005p\u0000\u0000\u04b0"+ - "\u04b1\u0005o\u0000\u0000\u04b1\u04b2\u0005p\u0000\u0000\u04b2\u04b3\u0005"+ - "c\u0000\u0000\u04b3\u04b4\u0005n\u0000\u0000\u04b4\u04b5\u0005t\u0000"+ - "\u0000\u04b5\u04eb\u0001\u0000\u0000\u0000\u04b6\u04b7\u0003i4\u0000\u04b7"+ - "\u04b8\u0005.\u0000\u0000\u04b8\u04b9\u0005n\u0000\u0000\u04b9\u04ba\u0005"+ - "e\u0000\u0000\u04ba\u04bb\u0005g\u0000\u0000\u04bb\u04eb\u0001\u0000\u0000"+ - "\u0000\u04bc\u04bd\u0003i4\u0000\u04bd\u04be\u0005.\u0000\u0000\u04be"+ - "\u04bf\u0005a\u0000\u0000\u04bf\u04c0\u0005b\u0000\u0000\u04c0\u04c1\u0005"+ - "s\u0000\u0000\u04c1\u04eb\u0001\u0000\u0000\u0000\u04c2\u04c3\u0003i4"+ - "\u0000\u04c3\u04c4\u0005.\u0000\u0000\u04c4\u04c5\u0005s\u0000\u0000\u04c5"+ - "\u04c6\u0005q\u0000\u0000\u04c6\u04c7\u0005r\u0000\u0000\u04c7\u04c8\u0005"+ - "t\u0000\u0000\u04c8\u04eb\u0001\u0000\u0000\u0000\u04c9\u04ca\u0003i4"+ - "\u0000\u04ca\u04cb\u0005.\u0000\u0000\u04cb\u04cc\u0005c\u0000\u0000\u04cc"+ - "\u04cd\u0005e\u0000\u0000\u04cd\u04ce\u0005i\u0000\u0000\u04ce\u04cf\u0005"+ - "l\u0000\u0000\u04cf\u04eb\u0001\u0000\u0000\u0000\u04d0\u04d1\u0003i4"+ - "\u0000\u04d1\u04d2\u0005.\u0000\u0000\u04d2\u04d3\u0005f\u0000\u0000\u04d3"+ - "\u04d4\u0005l\u0000\u0000\u04d4\u04d5\u0005o\u0000\u0000\u04d5\u04d6\u0005"+ - "o\u0000\u0000\u04d6\u04d7\u0005r\u0000\u0000\u04d7\u04eb\u0001\u0000\u0000"+ - "\u0000\u04d8\u04d9\u0003i4\u0000\u04d9\u04da\u0005.\u0000\u0000\u04da"+ - "\u04db\u0005t\u0000\u0000\u04db\u04dc\u0005r\u0000\u0000\u04dc\u04dd\u0005"+ - "u\u0000\u0000\u04dd\u04de\u0005n\u0000\u0000\u04de\u04df\u0005c\u0000"+ - "\u0000\u04df\u04eb\u0001\u0000\u0000\u0000\u04e0\u04e1\u0003i4\u0000\u04e1"+ - "\u04e2\u0005.\u0000\u0000\u04e2\u04e3\u0005n\u0000\u0000\u04e3\u04e4\u0005"+ - "e\u0000\u0000\u04e4\u04e5\u0005a\u0000\u0000\u04e5\u04e6\u0005r\u0000"+ - "\u0000\u04e6\u04e7\u0005e\u0000\u0000\u04e7\u04e8\u0005s\u0000\u0000\u04e8"+ - "\u04e9\u0005t\u0000\u0000\u04e9\u04eb\u0001\u0000\u0000\u0000\u04ea\u04a1"+ - "\u0001\u0000\u0000\u0000\u04ea\u04a7\u0001\u0000\u0000\u0000\u04ea\u04ad"+ - "\u0001\u0000\u0000\u0000\u04ea\u04b6\u0001\u0000\u0000\u0000\u04ea\u04bc"+ - "\u0001\u0000\u0000\u0000\u04ea\u04c2\u0001\u0000\u0000\u0000\u04ea\u04c9"+ - "\u0001\u0000\u0000\u0000\u04ea\u04d0\u0001\u0000\u0000\u0000\u04ea\u04d8"+ - "\u0001\u0000\u0000\u0000\u04ea\u04e0\u0001\u0000\u0000\u0000\u04eb\u00e2"+ - "\u0001\u0000\u0000\u0000\u04ec\u04ed\u0003g3\u0000\u04ed\u04ee\u0005."+ - "\u0000\u0000\u04ee\u04ef\u0005a\u0000\u0000\u04ef\u04f0\u0005d\u0000\u0000"+ - "\u04f0\u04f1\u0005d\u0000\u0000\u04f1\u0583\u0001\u0000\u0000\u0000\u04f2"+ - "\u04f3\u0003g3\u0000\u04f3\u04f4\u0005.\u0000\u0000\u04f4\u04f5\u0005"+ - "s\u0000\u0000\u04f5\u04f6\u0005u\u0000\u0000\u04f6\u04f7\u0005b\u0000"+ - "\u0000\u04f7\u0583\u0001\u0000\u0000\u0000\u04f8\u04f9\u0003g3\u0000\u04f9"+ - "\u04fa\u0005.\u0000\u0000\u04fa\u04fb\u0005m\u0000\u0000\u04fb\u04fc\u0005"+ - "u\u0000\u0000\u04fc\u04fd\u0005l\u0000\u0000\u04fd\u0583\u0001\u0000\u0000"+ - "\u0000\u04fe\u04ff\u0003g3\u0000\u04ff\u0500\u0005.\u0000\u0000\u0500"+ - "\u0501\u0005d\u0000\u0000\u0501\u0502\u0005i\u0000\u0000\u0502\u0503\u0005"+ - "v\u0000\u0000\u0503\u0504\u0005_\u0000\u0000\u0504\u0505\u0005s\u0000"+ - "\u0000\u0505\u0583\u0001\u0000\u0000\u0000\u0506\u0507\u0003g3\u0000\u0507"+ - "\u0508\u0005.\u0000\u0000\u0508\u0509\u0005d\u0000\u0000\u0509\u050a\u0005"+ - "i\u0000\u0000\u050a\u050b\u0005v\u0000\u0000\u050b\u050c\u0005_\u0000"+ - "\u0000\u050c\u050d\u0005u\u0000\u0000\u050d\u0583\u0001\u0000\u0000\u0000"+ - "\u050e\u050f\u0003g3\u0000\u050f\u0510\u0005.\u0000\u0000\u0510\u0511"+ - "\u0005r\u0000\u0000\u0511\u0512\u0005e\u0000\u0000\u0512\u0513\u0005m"+ - "\u0000\u0000\u0513\u0514\u0005_\u0000\u0000\u0514\u0515\u0005s\u0000\u0000"+ - "\u0515\u0583\u0001\u0000\u0000\u0000\u0516\u0517\u0003g3\u0000\u0517\u0518"+ - "\u0005.\u0000\u0000\u0518\u0519\u0005r\u0000\u0000\u0519\u051a\u0005e"+ - "\u0000\u0000\u051a\u051b\u0005m\u0000\u0000\u051b\u051c\u0005_\u0000\u0000"+ - "\u051c\u051d\u0005u\u0000\u0000\u051d\u0583\u0001\u0000\u0000\u0000\u051e"+ - "\u051f\u0003g3\u0000\u051f\u0520\u0005.\u0000\u0000\u0520\u0521\u0005"+ - "a\u0000\u0000\u0521\u0522\u0005n\u0000\u0000\u0522\u0523\u0005d\u0000"+ - "\u0000\u0523\u0583\u0001\u0000\u0000\u0000\u0524\u0525\u0003g3\u0000\u0525"+ - "\u0526\u0005.\u0000\u0000\u0526\u0527\u0005o\u0000\u0000\u0527\u0528\u0005"+ - "r\u0000\u0000\u0528\u0583\u0001\u0000\u0000\u0000\u0529\u052a\u0003g3"+ - "\u0000\u052a\u052b\u0005.\u0000\u0000\u052b\u052c\u0005x\u0000\u0000\u052c"+ - "\u052d\u0005o\u0000\u0000\u052d\u052e\u0005r\u0000\u0000\u052e\u0583\u0001"+ - "\u0000\u0000\u0000\u052f\u0530\u0003g3\u0000\u0530\u0531\u0005.\u0000"+ - "\u0000\u0531\u0532\u0005s\u0000\u0000\u0532\u0533\u0005h\u0000\u0000\u0533"+ - "\u0534\u0005l\u0000\u0000\u0534\u0583\u0001\u0000\u0000\u0000\u0535\u0536"+ - "\u0003g3\u0000\u0536\u0537\u0005.\u0000\u0000\u0537\u0538\u0005s\u0000"+ - "\u0000\u0538\u0539\u0005h\u0000\u0000\u0539\u053a\u0005r\u0000\u0000\u053a"+ - "\u053b\u0005_\u0000\u0000\u053b\u053c\u0005s\u0000\u0000\u053c\u0583\u0001"+ - "\u0000\u0000\u0000\u053d\u053e\u0003g3\u0000\u053e\u053f\u0005.\u0000"+ - "\u0000\u053f\u0540\u0005s\u0000\u0000\u0540\u0541\u0005h\u0000\u0000\u0541"+ - "\u0542\u0005r\u0000\u0000\u0542\u0543\u0005_\u0000\u0000\u0543\u0544\u0005"+ - "u\u0000\u0000\u0544\u0583\u0001\u0000\u0000\u0000\u0545\u0546\u0003g3"+ - "\u0000\u0546\u0547\u0005.\u0000\u0000\u0547\u0548\u0005r\u0000\u0000\u0548"+ - "\u0549\u0005o\u0000\u0000\u0549\u054a\u0005t\u0000\u0000\u054a\u054b\u0005"+ - "l\u0000\u0000\u054b\u0583\u0001\u0000\u0000\u0000\u054c\u054d\u0003g3"+ - "\u0000\u054d\u054e\u0005.\u0000\u0000\u054e\u054f\u0005r\u0000\u0000\u054f"+ - "\u0550\u0005o\u0000\u0000\u0550\u0551\u0005t\u0000\u0000\u0551\u0552\u0005"+ - "r\u0000\u0000\u0552\u0583\u0001\u0000\u0000\u0000\u0553\u0554\u0003i4"+ - "\u0000\u0554\u0555\u0005.\u0000\u0000\u0555\u0556\u0005a\u0000\u0000\u0556"+ - "\u0557\u0005d\u0000\u0000\u0557\u0558\u0005d\u0000\u0000\u0558\u0583\u0001"+ - "\u0000\u0000\u0000\u0559\u055a\u0003i4\u0000\u055a\u055b\u0005.\u0000"+ - "\u0000\u055b\u055c\u0005s\u0000\u0000\u055c\u055d\u0005u\u0000\u0000\u055d"+ - "\u055e\u0005b\u0000\u0000\u055e\u0583\u0001\u0000\u0000\u0000\u055f\u0560"+ - "\u0003i4\u0000\u0560\u0561\u0005.\u0000\u0000\u0561\u0562\u0005m\u0000"+ - "\u0000\u0562\u0563\u0005u\u0000\u0000\u0563\u0564\u0005l\u0000\u0000\u0564"+ - "\u0583\u0001\u0000\u0000\u0000\u0565\u0566\u0003i4\u0000\u0566\u0567\u0005"+ - ".\u0000\u0000\u0567\u0568\u0005d\u0000\u0000\u0568\u0569\u0005i\u0000"+ - "\u0000\u0569\u056a\u0005v\u0000\u0000\u056a\u0583\u0001\u0000\u0000\u0000"+ - "\u056b\u056c\u0003i4\u0000\u056c\u056d\u0005.\u0000\u0000\u056d\u056e"+ - "\u0005m\u0000\u0000\u056e\u056f\u0005i\u0000\u0000\u056f\u0570\u0005n"+ - "\u0000\u0000\u0570\u0583\u0001\u0000\u0000\u0000\u0571\u0572\u0003i4\u0000"+ - "\u0572\u0573\u0005.\u0000\u0000\u0573\u0574\u0005m\u0000\u0000\u0574\u0575"+ - "\u0005a\u0000\u0000\u0575\u0576\u0005x\u0000\u0000\u0576\u0583\u0001\u0000"+ - "\u0000\u0000\u0577\u0578\u0003i4\u0000\u0578\u0579\u0005.\u0000\u0000"+ - "\u0579\u057a\u0005c\u0000\u0000\u057a\u057b\u0005o\u0000\u0000\u057b\u057c"+ - "\u0005p\u0000\u0000\u057c\u057d\u0005y\u0000\u0000\u057d\u057e\u0005s"+ - "\u0000\u0000\u057e\u057f\u0005i\u0000\u0000\u057f\u0580\u0005g\u0000\u0000"+ - "\u0580\u0581\u0005n\u0000\u0000\u0581\u0583\u0001\u0000\u0000\u0000\u0582"+ - "\u04ec\u0001\u0000\u0000\u0000\u0582\u04f2\u0001\u0000\u0000\u0000\u0582"+ - "\u04f8\u0001\u0000\u0000\u0000\u0582\u04fe\u0001\u0000\u0000\u0000\u0582"+ - "\u0506\u0001\u0000\u0000\u0000\u0582\u050e\u0001\u0000\u0000\u0000\u0582"+ - "\u0516\u0001\u0000\u0000\u0000\u0582\u051e\u0001\u0000\u0000\u0000\u0582"+ - "\u0524\u0001\u0000\u0000\u0000\u0582\u0529\u0001\u0000\u0000\u0000\u0582"+ - "\u052f\u0001\u0000\u0000\u0000\u0582\u0535\u0001\u0000\u0000\u0000\u0582"+ - "\u053d\u0001\u0000\u0000\u0000\u0582\u0545\u0001\u0000\u0000\u0000\u0582"+ - "\u054c\u0001\u0000\u0000\u0000\u0582\u0553\u0001\u0000\u0000\u0000\u0582"+ - "\u0559\u0001\u0000\u0000\u0000\u0582\u055f\u0001\u0000\u0000\u0000\u0582"+ - "\u0565\u0001\u0000\u0000\u0000\u0582\u056b\u0001\u0000\u0000\u0000\u0582"+ - "\u0571\u0001\u0000\u0000\u0000\u0582\u0577\u0001\u0000\u0000\u0000\u0583"+ - "\u00e4\u0001\u0000\u0000\u0000\u0584\u0585\u0003_/\u0000\u0585\u0586\u0005"+ - ".\u0000\u0000\u0586\u0587\u0005w\u0000\u0000\u0587\u0588\u0005r\u0000"+ - "\u0000\u0588\u0589\u0005a\u0000\u0000\u0589\u058a\u0005p\u0000\u0000\u058a"+ - "\u058b\u0005_\u0000\u0000\u058b\u058c\u0001\u0000\u0000\u0000\u058c\u058d"+ - "\u0003a0\u0000\u058d\u0627\u0001\u0000\u0000\u0000\u058e\u058f\u0003g"+ - "3\u0000\u058f\u0590\u0005.\u0000\u0000\u0590\u0591\u0005t\u0000\u0000"+ - "\u0591\u0592\u0005r\u0000\u0000\u0592\u0593\u0005u\u0000\u0000\u0593\u0594"+ - "\u0005n\u0000\u0000\u0594\u0595\u0005c\u0000\u0000\u0595\u0596\u0005_"+ - "\u0000\u0000\u0596\u0597\u0001\u0000\u0000\u0000\u0597\u0598\u0003i4\u0000"+ - "\u0598\u0599\u0003U*\u0000\u0599\u059a\u0003[-\u0000\u059a\u0627\u0001"+ - "\u0000\u0000\u0000\u059b\u059c\u0003g3\u0000\u059c\u059d\u0005.\u0000"+ - "\u0000\u059d\u059e\u0005t\u0000\u0000\u059e\u059f\u0005r\u0000\u0000\u059f"+ - "\u05a0\u0005u\u0000\u0000\u05a0\u05a1\u0005n\u0000\u0000\u05a1\u05a2\u0005"+ - "c\u0000\u0000\u05a2\u05a3\u0005_\u0000\u0000\u05a3\u05a4\u0005s\u0000"+ - "\u0000\u05a4\u05a5\u0005a\u0000\u0000\u05a5\u05a6\u0005t\u0000\u0000\u05a6"+ - "\u05a7\u0005_\u0000\u0000\u05a7\u05a8\u0001\u0000\u0000\u0000\u05a8\u05a9"+ - "\u0003i4\u0000\u05a9\u05aa\u0003U*\u0000\u05aa\u05ab\u0003[-\u0000\u05ab"+ - "\u0627\u0001\u0000\u0000\u0000\u05ac\u05ad\u0003a0\u0000\u05ad\u05ae\u0005"+ - ".\u0000\u0000\u05ae\u05af\u0005e\u0000\u0000\u05af\u05b0\u0005x\u0000"+ - "\u0000\u05b0\u05b1\u0005t\u0000\u0000\u05b1\u05b2\u0005e\u0000\u0000\u05b2"+ - "\u05b3\u0005n\u0000\u0000\u05b3\u05b4\u0005d\u0000\u0000\u05b4\u05b5\u0005"+ - "_\u0000\u0000\u05b5\u05b6\u0001\u0000\u0000\u0000\u05b6\u05b7\u0003_/"+ - "\u0000\u05b7\u05b8\u0003U*\u0000\u05b8\u05b9\u0003[-\u0000\u05b9\u0627"+ - "\u0001\u0000\u0000\u0000\u05ba\u05bb\u0003i4\u0000\u05bb\u05bc\u0005."+ - "\u0000\u0000\u05bc\u05bd\u0005c\u0000\u0000\u05bd\u05be\u0005o\u0000\u0000"+ - "\u05be\u05bf\u0005n\u0000\u0000\u05bf\u05c0\u0005v\u0000\u0000\u05c0\u05c1"+ - "\u0005e\u0000\u0000\u05c1\u05c2\u0005r\u0000\u0000\u05c2\u05c3\u0005t"+ - "\u0000\u0000\u05c3\u05c4\u0005_\u0000\u0000\u05c4\u05c5\u0001\u0000\u0000"+ - "\u0000\u05c5\u05c6\u0003g3\u0000\u05c6\u05c7\u0003U*\u0000\u05c7\u05c8"+ - "\u0003[-\u0000\u05c8\u0627\u0001\u0000\u0000\u0000\u05c9\u05ca\u0003c"+ - "1\u0000\u05ca\u05cb\u0005.\u0000\u0000\u05cb\u05cc\u0005d\u0000\u0000"+ - "\u05cc\u05cd\u0005e\u0000\u0000\u05cd\u05ce\u0005m\u0000\u0000\u05ce\u05cf"+ - "\u0005o\u0000\u0000\u05cf\u05d0\u0005t\u0000\u0000\u05d0\u05d1\u0005e"+ - "\u0000\u0000\u05d1\u05d2\u0005_\u0000\u0000\u05d2\u05d3\u0001\u0000\u0000"+ - "\u0000\u05d3\u05d4\u0003e2\u0000\u05d4\u0627\u0001\u0000\u0000\u0000\u05d5"+ - "\u05d6\u0003e2\u0000\u05d6\u05d7\u0005.\u0000\u0000\u05d7\u05d8\u0005"+ - "p\u0000\u0000\u05d8\u05d9\u0005r\u0000\u0000\u05d9\u05da\u0005o\u0000"+ - "\u0000\u05da\u05db\u0005m\u0000\u0000\u05db\u05dc\u0005o\u0000\u0000\u05dc"+ - "\u05dd\u0005t\u0000\u0000\u05dd\u05de\u0005e\u0000\u0000\u05de\u05df\u0005"+ - "_\u0000\u0000\u05df\u05e0\u0001\u0000\u0000\u0000\u05e0\u05e1\u0003c1"+ - "\u0000\u05e1\u0627\u0001\u0000\u0000\u0000\u05e2\u05e3\u0003c1\u0000\u05e3"+ - "\u05e4\u0005.\u0000\u0000\u05e4\u05e5\u0005r\u0000\u0000\u05e5\u05e6\u0005"+ - "e\u0000\u0000\u05e6\u05e7\u0005i\u0000\u0000\u05e7\u05e8\u0005n\u0000"+ - "\u0000\u05e8\u05e9\u0005t\u0000\u0000\u05e9\u05ea\u0005e\u0000\u0000\u05ea"+ - "\u05eb\u0005r\u0000\u0000\u05eb\u05ec\u0005p\u0000\u0000\u05ec\u05ed\u0005"+ - "r\u0000\u0000\u05ed\u05ee\u0005e\u0000\u0000\u05ee\u05ef\u0005t\u0000"+ - "\u0000\u05ef\u05f0\u0005_\u0000\u0000\u05f0\u05f1\u0001\u0000\u0000\u0000"+ - "\u05f1\u05f2\u0003_/\u0000\u05f2\u0627\u0001\u0000\u0000\u0000\u05f3\u05f4"+ - "\u0003e2\u0000\u05f4\u05f5\u0005.\u0000\u0000\u05f5\u05f6\u0005r\u0000"+ - "\u0000\u05f6\u05f7\u0005e\u0000\u0000\u05f7\u05f8\u0005i\u0000\u0000\u05f8"+ - "\u05f9\u0005n\u0000\u0000\u05f9\u05fa\u0005t\u0000\u0000\u05fa\u05fb\u0005"+ - "e\u0000\u0000\u05fb\u05fc\u0005r\u0000\u0000\u05fc\u05fd\u0005p\u0000"+ - "\u0000\u05fd\u05fe\u0005r\u0000\u0000\u05fe\u05ff\u0005e\u0000\u0000\u05ff"+ - "\u0600\u0005t\u0000\u0000\u0600\u0601\u0005_\u0000\u0000\u0601\u0602\u0001"+ - "\u0000\u0000\u0000\u0602\u0603\u0003a0\u0000\u0603\u0627\u0001\u0000\u0000"+ - "\u0000\u0604\u0605\u0003_/\u0000\u0605\u0606\u0005.\u0000\u0000\u0606"+ - "\u0607\u0005r\u0000\u0000\u0607\u0608\u0005e\u0000\u0000\u0608\u0609\u0005"+ - "i\u0000\u0000\u0609\u060a\u0005n\u0000\u0000\u060a\u060b\u0005t\u0000"+ - "\u0000\u060b\u060c\u0005e\u0000\u0000\u060c\u060d\u0005r\u0000\u0000\u060d"+ - "\u060e\u0005p\u0000\u0000\u060e\u060f\u0005r\u0000\u0000\u060f\u0610\u0005"+ - "e\u0000\u0000\u0610\u0611\u0005t\u0000\u0000\u0611\u0612\u0005_\u0000"+ - "\u0000\u0612\u0613\u0001\u0000\u0000\u0000\u0613\u0614\u0003c1\u0000\u0614"+ - "\u0627\u0001\u0000\u0000\u0000\u0615\u0616\u0003a0\u0000\u0616\u0617\u0005"+ - ".\u0000\u0000\u0617\u0618\u0005r\u0000\u0000\u0618\u0619\u0005e\u0000"+ - "\u0000\u0619\u061a\u0005i\u0000\u0000\u061a\u061b\u0005n\u0000\u0000\u061b"+ - "\u061c\u0005t\u0000\u0000\u061c\u061d\u0005e\u0000\u0000\u061d\u061e\u0005"+ - "r\u0000\u0000\u061e\u061f\u0005p\u0000\u0000\u061f\u0620\u0005r\u0000"+ - "\u0000\u0620\u0621\u0005e\u0000\u0000\u0621\u0622\u0005t\u0000\u0000\u0622"+ - "\u0623\u0005_\u0000\u0000\u0623\u0624\u0001\u0000\u0000\u0000\u0624\u0625"+ - "\u0003e2\u0000\u0625\u0627\u0001\u0000\u0000\u0000\u0626\u0584\u0001\u0000"+ - "\u0000\u0000\u0626\u058e\u0001\u0000\u0000\u0000\u0626\u059b\u0001\u0000"+ - "\u0000\u0000\u0626\u05ac\u0001\u0000\u0000\u0000\u0626\u05ba\u0001\u0000"+ - "\u0000\u0000\u0626\u05c9\u0001\u0000\u0000\u0000\u0626\u05d5\u0001\u0000"+ - "\u0000\u0000\u0626\u05e2\u0001\u0000\u0000\u0000\u0626\u05f3\u0001\u0000"+ - "\u0000\u0000\u0626\u0604\u0001\u0000\u0000\u0000\u0626\u0615\u0001\u0000"+ - "\u0000\u0000\u0627\u00e6\u0001\u0000\u0000\u0000\u0628\u0629\u0005t\u0000"+ - "\u0000\u0629\u062a\u0005y\u0000\u0000\u062a\u062b\u0005p\u0000\u0000\u062b"+ - "\u062c\u0005e\u0000\u0000\u062c\u00e8\u0001\u0000\u0000\u0000\u062d\u062e"+ - "\u0005f\u0000\u0000\u062e\u062f\u0005u\u0000\u0000\u062f\u0630\u0005n"+ - "\u0000\u0000\u0630\u0631\u0005c\u0000\u0000\u0631\u00ea\u0001\u0000\u0000"+ - "\u0000\u0632\u0633\u0005e\u0000\u0000\u0633\u0634\u0005x\u0000\u0000\u0634"+ - "\u0635\u0005t\u0000\u0000\u0635\u0636\u0005e\u0000\u0000\u0636\u0637\u0005"+ - "r\u0000\u0000\u0637\u0638\u0005n\u0000\u0000\u0638\u00ec\u0001\u0000\u0000"+ - "\u0000\u0639\u063a\u0005s\u0000\u0000\u063a\u063b\u0005t\u0000\u0000\u063b"+ - "\u063c\u0005a\u0000\u0000\u063c\u063d\u0005r\u0000\u0000\u063d\u063e\u0005"+ - "t\u0000\u0000\u063e\u00ee\u0001\u0000\u0000\u0000\u063f\u0640\u0005p\u0000"+ - "\u0000\u0640\u0641\u0005a\u0000\u0000\u0641\u0642\u0005r\u0000\u0000\u0642"+ - "\u0643\u0005a\u0000\u0000\u0643\u0644\u0005m\u0000\u0000\u0644\u00f0\u0001"+ - "\u0000\u0000\u0000\u0645\u0646\u0005r\u0000\u0000\u0646\u0647\u0005e\u0000"+ - "\u0000\u0647\u0648\u0005s\u0000\u0000\u0648\u0649\u0005u\u0000\u0000\u0649"+ - "\u064a\u0005l\u0000\u0000\u064a\u064b\u0005t\u0000\u0000\u064b\u00f2\u0001"+ - "\u0000\u0000\u0000\u064c\u064d\u0005l\u0000\u0000\u064d\u064e\u0005o\u0000"+ - "\u0000\u064e\u064f\u0005c\u0000\u0000\u064f\u0650\u0005a\u0000\u0000\u0650"+ - "\u0651\u0005l\u0000\u0000\u0651\u00f4\u0001\u0000\u0000\u0000\u0652\u0653"+ - "\u0005g\u0000\u0000\u0653\u0654\u0005l\u0000\u0000\u0654\u0655\u0005o"+ - "\u0000\u0000\u0655\u0656\u0005b\u0000\u0000\u0656\u0657\u0005a\u0000\u0000"+ - "\u0657\u0658\u0005l\u0000\u0000\u0658\u00f6\u0001\u0000\u0000\u0000\u0659"+ - "\u065a\u0005t\u0000\u0000\u065a\u065b\u0005a\u0000\u0000\u065b\u065c\u0005"+ - "b\u0000\u0000\u065c\u065d\u0005l\u0000\u0000\u065d\u065e\u0005e\u0000"+ - "\u0000\u065e\u00f8\u0001\u0000\u0000\u0000\u065f\u0660\u0005m\u0000\u0000"+ - "\u0660\u0661\u0005e\u0000\u0000\u0661\u0662\u0005m\u0000\u0000\u0662\u0663"+ - "\u0005o\u0000\u0000\u0663\u0664\u0005r\u0000\u0000\u0664\u0665\u0005y"+ - "\u0000\u0000\u0665\u00fa\u0001\u0000\u0000\u0000\u0666\u0667\u0005e\u0000"+ - "\u0000\u0667\u0668\u0005l\u0000\u0000\u0668\u0669\u0005e\u0000\u0000\u0669"+ - "\u066a\u0005m\u0000\u0000\u066a\u00fc\u0001\u0000\u0000\u0000\u066b\u066c"+ - "\u0005d\u0000\u0000\u066c\u066d\u0005a\u0000\u0000\u066d\u066e\u0005t"+ - "\u0000\u0000\u066e\u066f\u0005a\u0000\u0000\u066f\u00fe\u0001\u0000\u0000"+ - "\u0000\u0670\u0671\u0005o\u0000\u0000\u0671\u0672\u0005f\u0000\u0000\u0672"+ - "\u0673\u0005f\u0000\u0000\u0673\u0674\u0005s\u0000\u0000\u0674\u0675\u0005"+ - "e\u0000\u0000\u0675\u0676\u0005t\u0000\u0000\u0676\u0100\u0001\u0000\u0000"+ - "\u0000\u0677\u0678\u0005i\u0000\u0000\u0678\u0679\u0005m\u0000\u0000\u0679"+ - "\u067a\u0005p\u0000\u0000\u067a\u067b\u0005o\u0000\u0000\u067b\u067c\u0005"+ - "r\u0000\u0000\u067c\u067d\u0005t\u0000\u0000\u067d\u0102\u0001\u0000\u0000"+ - "\u0000\u067e\u067f\u0005e\u0000\u0000\u067f\u0680\u0005x\u0000\u0000\u0680"+ - "\u0681\u0005p\u0000\u0000\u0681\u0682\u0005o\u0000\u0000\u0682\u0683\u0005"+ - "r\u0000\u0000\u0683\u0684\u0005t\u0000\u0000\u0684\u0104\u0001\u0000\u0000"+ - "\u0000\u0685\u0686\u0005m\u0000\u0000\u0686\u0687\u0005o\u0000\u0000\u0687"+ - "\u0688\u0005d\u0000\u0000\u0688\u0689\u0005u\u0000\u0000\u0689\u068a\u0005"+ - "l\u0000\u0000\u068a\u068b\u0005e\u0000\u0000\u068b\u0106\u0001\u0000\u0000"+ - "\u0000\u068c\u068d\u0005b\u0000\u0000\u068d\u068e\u0005i\u0000\u0000\u068e"+ - "\u068f\u0005n\u0000\u0000\u068f\u0690\u0005a\u0000\u0000\u0690\u0691\u0005"+ - "r\u0000\u0000\u0691\u0692\u0005y\u0000\u0000\u0692\u0108\u0001\u0000\u0000"+ - "\u0000\u0693\u0694\u0005q\u0000\u0000\u0694\u0695\u0005u\u0000\u0000\u0695"+ - "\u0696\u0005o\u0000\u0000\u0696\u0697\u0005t\u0000\u0000\u0697\u0698\u0005"+ - "e\u0000\u0000\u0698\u010a\u0001\u0000\u0000\u0000\u0699\u069a\u0005s\u0000"+ - "\u0000\u069a\u069b\u0005c\u0000\u0000\u069b\u069c\u0005r\u0000\u0000\u069c"+ - "\u069d\u0005i\u0000\u0000\u069d\u069e\u0005p\u0000\u0000\u069e\u069f\u0005"+ - "t\u0000\u0000\u069f\u010c\u0001\u0000\u0000\u0000\u06a0\u06a1\u0005r\u0000"+ - "\u0000\u06a1\u06a2\u0005e\u0000\u0000\u06a2\u06a3\u0005g\u0000\u0000\u06a3"+ - "\u06a4\u0005i\u0000\u0000\u06a4\u06a5\u0005s\u0000\u0000\u06a5\u06a6\u0005"+ - "t\u0000\u0000\u06a6\u06a7\u0005e\u0000\u0000\u06a7\u06a8\u0005r\u0000"+ - "\u0000\u06a8\u010e\u0001\u0000\u0000\u0000\u06a9\u06aa\u0005i\u0000\u0000"+ - "\u06aa\u06ab\u0005n\u0000\u0000\u06ab\u06ac\u0005v\u0000\u0000\u06ac\u06ad"+ - "\u0005o\u0000\u0000\u06ad\u06ae\u0005k\u0000\u0000\u06ae\u06af\u0005e"+ - "\u0000\u0000\u06af\u0110\u0001\u0000\u0000\u0000\u06b0\u06b1\u0005g\u0000"+ - "\u0000\u06b1\u06b2\u0005e\u0000\u0000\u06b2\u06b3\u0005t\u0000\u0000\u06b3"+ - "\u0112\u0001\u0000\u0000\u0000\u06b4\u06b5\u0005a\u0000\u0000\u06b5\u06b6"+ - "\u0005s\u0000\u0000\u06b6\u06b7\u0005s\u0000\u0000\u06b7\u06b8\u0005e"+ - "\u0000\u0000\u06b8\u06b9\u0005r\u0000\u0000\u06b9\u06ba\u0005t\u0000\u0000"+ - "\u06ba\u06bb\u0005_\u0000\u0000\u06bb\u06bc\u0005m\u0000\u0000\u06bc\u06bd"+ - "\u0005a\u0000\u0000\u06bd\u06be\u0005l\u0000\u0000\u06be\u06bf\u0005f"+ - "\u0000\u0000\u06bf\u06c0\u0005o\u0000\u0000\u06c0\u06c1\u0005r\u0000\u0000"+ - "\u06c1\u06c2\u0005m\u0000\u0000\u06c2\u06c3\u0005e\u0000\u0000\u06c3\u06c4"+ - "\u0005d\u0000\u0000\u06c4\u0114\u0001\u0000\u0000\u0000\u06c5\u06c6\u0005"+ - "a\u0000\u0000\u06c6\u06c7\u0005s\u0000\u0000\u06c7\u06c8\u0005s\u0000"+ - "\u0000\u06c8\u06c9\u0005e\u0000\u0000\u06c9\u06ca\u0005r\u0000\u0000\u06ca"+ - "\u06cb\u0005t\u0000\u0000\u06cb\u06cc\u0005_\u0000\u0000\u06cc\u06cd\u0005"+ - "i\u0000\u0000\u06cd\u06ce\u0005n\u0000\u0000\u06ce\u06cf\u0005v\u0000"+ - "\u0000\u06cf\u06d0\u0005a\u0000\u0000\u06d0\u06d1\u0005l\u0000\u0000\u06d1"+ - "\u06d2\u0005i\u0000\u0000\u06d2\u06d3\u0005d\u0000\u0000\u06d3\u0116\u0001"+ - "\u0000\u0000\u0000\u06d4\u06d5\u0005a\u0000\u0000\u06d5\u06d6\u0005s\u0000"+ - "\u0000\u06d6\u06d7\u0005s\u0000\u0000\u06d7\u06d8\u0005e\u0000\u0000\u06d8"+ - "\u06d9\u0005r\u0000\u0000\u06d9\u06da\u0005t\u0000\u0000\u06da\u06db\u0005"+ - "_\u0000\u0000\u06db\u06dc\u0005u\u0000\u0000\u06dc\u06dd\u0005n\u0000"+ - "\u0000\u06dd\u06de\u0005l\u0000\u0000\u06de\u06df\u0005i\u0000\u0000\u06df"+ - "\u06e0\u0005n\u0000\u0000\u06e0\u06e1\u0005k\u0000\u0000\u06e1\u06e2\u0005"+ - "a\u0000\u0000\u06e2\u06e3\u0005b\u0000\u0000\u06e3\u06e4\u0005l\u0000"+ - "\u0000\u06e4\u06e5\u0005e\u0000\u0000\u06e5\u0118\u0001\u0000\u0000\u0000"+ - "\u06e6\u06e7\u0005a\u0000\u0000\u06e7\u06e8\u0005s\u0000\u0000\u06e8\u06e9"+ - "\u0005s\u0000\u0000\u06e9\u06ea\u0005e\u0000\u0000\u06ea\u06eb\u0005r"+ - "\u0000\u0000\u06eb\u06ec\u0005t\u0000\u0000\u06ec\u06ed\u0005_\u0000\u0000"+ - "\u06ed\u06ee\u0005r\u0000\u0000\u06ee\u06ef\u0005e\u0000\u0000\u06ef\u06f0"+ - "\u0005t\u0000\u0000\u06f0\u06f1\u0005u\u0000\u0000\u06f1\u06f2\u0005r"+ - "\u0000\u0000\u06f2\u06f3\u0005n\u0000\u0000\u06f3\u011a\u0001\u0000\u0000"+ - "\u0000\u06f4\u06f5\u0005a\u0000\u0000\u06f5\u06f6\u0005s\u0000\u0000\u06f6"+ - "\u06f7\u0005s\u0000\u0000\u06f7\u06f8\u0005e\u0000\u0000\u06f8\u06f9\u0005"+ - "r\u0000\u0000\u06f9\u06fa\u0005t\u0000\u0000\u06fa\u06fb\u0005_\u0000"+ - "\u0000\u06fb\u06fc\u0005r\u0000\u0000\u06fc\u06fd\u0005e\u0000\u0000\u06fd"+ - "\u06fe\u0005t\u0000\u0000\u06fe\u06ff\u0005u\u0000\u0000\u06ff\u0700\u0005"+ - "r\u0000\u0000\u0700\u0701\u0005n\u0000\u0000\u0701\u0702\u0005_\u0000"+ - "\u0000\u0702\u0703\u0005c\u0000\u0000\u0703\u0704\u0005a\u0000\u0000\u0704"+ - "\u0705\u0005n\u0000\u0000\u0705\u0706\u0005o\u0000\u0000\u0706\u0707\u0005"+ - "n\u0000\u0000\u0707\u0708\u0005i\u0000\u0000\u0708\u0709\u0005c\u0000"+ - "\u0000\u0709\u070a\u0005a\u0000\u0000\u070a\u070b\u0005l\u0000\u0000\u070b"+ - "\u070c\u0005_\u0000\u0000\u070c\u070d\u0005n\u0000\u0000\u070d\u070e\u0005"+ - "a\u0000\u0000\u070e\u070f\u0005n\u0000\u0000\u070f\u011c\u0001\u0000\u0000"+ - "\u0000\u0710\u0711\u0005a\u0000\u0000\u0711\u0712\u0005s\u0000\u0000\u0712"+ - "\u0713\u0005s\u0000\u0000\u0713\u0714\u0005e\u0000\u0000\u0714\u0715\u0005"+ - "r\u0000\u0000\u0715\u0716\u0005t\u0000\u0000\u0716\u0717\u0005_\u0000"+ - "\u0000\u0717\u0718\u0005r\u0000\u0000\u0718\u0719\u0005e\u0000\u0000\u0719"+ - "\u071a\u0005t\u0000\u0000\u071a\u071b\u0005u\u0000\u0000\u071b\u071c\u0005"+ - "r\u0000\u0000\u071c\u071d\u0005n\u0000\u0000\u071d\u071e\u0005_\u0000"+ - "\u0000\u071e\u071f\u0005a\u0000\u0000\u071f\u0720\u0005r\u0000\u0000\u0720"+ - "\u0721\u0005i\u0000\u0000\u0721\u0722\u0005t\u0000\u0000\u0722\u0723\u0005"+ - "h\u0000\u0000\u0723\u0724\u0005m\u0000\u0000\u0724\u0725\u0005e\u0000"+ - "\u0000\u0725\u0726\u0005t\u0000\u0000\u0726\u0727\u0005i\u0000\u0000\u0727"+ - "\u0728\u0005c\u0000\u0000\u0728\u0729\u0005_\u0000\u0000\u0729\u072a\u0005"+ - "n\u0000\u0000\u072a\u072b\u0005a\u0000\u0000\u072b\u072c\u0005n\u0000"+ - "\u0000\u072c\u011e\u0001\u0000\u0000\u0000\u072d\u072e\u0005a\u0000\u0000"+ - "\u072e\u072f\u0005s\u0000\u0000\u072f\u0730\u0005s\u0000\u0000\u0730\u0731"+ - "\u0005e\u0000\u0000\u0731\u0732\u0005r\u0000\u0000\u0732\u0733\u0005t"+ - "\u0000\u0000\u0733\u0734\u0005_\u0000\u0000\u0734\u0735\u0005t\u0000\u0000"+ - "\u0735\u0736\u0005r\u0000\u0000\u0736\u0737\u0005a\u0000\u0000\u0737\u0738"+ - "\u0005p\u0000\u0000\u0738\u0120\u0001\u0000\u0000\u0000\u0739\u073a\u0005"+ - "a\u0000\u0000\u073a\u073b\u0005s\u0000\u0000\u073b\u073c\u0005s\u0000"+ - "\u0000\u073c\u073d\u0005e\u0000\u0000\u073d\u073e\u0005r\u0000\u0000\u073e"+ - "\u073f\u0005t\u0000\u0000\u073f\u0740\u0005_\u0000\u0000\u0740\u0741\u0005"+ - "e\u0000\u0000\u0741\u0742\u0005x\u0000\u0000\u0742\u0743\u0005h\u0000"+ - "\u0000\u0743\u0744\u0005a\u0000\u0000\u0744\u0745\u0005u\u0000\u0000\u0745"+ - "\u0746\u0005s\u0000\u0000\u0746\u0747\u0005t\u0000\u0000\u0747\u0748\u0005"+ - "i\u0000\u0000\u0748\u0749\u0005o\u0000\u0000\u0749\u074a\u0005n\u0000"+ - "\u0000\u074a\u0122\u0001\u0000\u0000\u0000\u074b\u074c\u0005i\u0000\u0000"+ - "\u074c\u074d\u0005n\u0000\u0000\u074d\u074e\u0005p\u0000\u0000\u074e\u074f"+ - "\u0005u\u0000\u0000\u074f\u0750\u0005t\u0000\u0000\u0750\u0124\u0001\u0000"+ - "\u0000\u0000\u0751\u0752\u0005o\u0000\u0000\u0752\u0753\u0005u\u0000\u0000"+ - "\u0753\u0754\u0005t\u0000\u0000\u0754\u0755\u0005p\u0000\u0000\u0755\u0756"+ - "\u0005u\u0000\u0000\u0756\u0757\u0005t\u0000\u0000\u0757\u0126\u0001\u0000"+ - "\u0000\u0000\u0758\u0759\u0003\u0149\u00a4\u0000\u0759\u0128\u0001\u0000"+ - "\u0000\u0000\u075a\u075b\u0005v\u0000\u0000\u075b\u075c\u00051\u0000\u0000"+ - "\u075c\u075d\u00052\u0000\u0000\u075d\u075e\u00058\u0000\u0000\u075e\u012a"+ - "\u0001\u0000\u0000\u0000\u075f\u0761\u0007\u0001\u0000\u0000\u0760\u075f"+ - "\u0001\u0000\u0000\u0000\u0761\u0762\u0001\u0000\u0000\u0000\u0762\u0760"+ - "\u0001\u0000\u0000\u0000\u0762\u0763\u0001\u0000\u0000\u0000\u0763\u0764"+ - "\u0001\u0000\u0000\u0000\u0764\u0765\u0006\u0095\u0000\u0000\u0765\u012c"+ - "\u0001\u0000\u0000\u0000\u0766\u0767\u0005(\u0000\u0000\u0767\u0768\u0005"+ - ";\u0000\u0000\u0768\u076c\u0001\u0000\u0000\u0000\u0769\u076b\t\u0000"+ - "\u0000\u0000\u076a\u0769\u0001\u0000\u0000\u0000\u076b\u076e\u0001\u0000"+ - "\u0000\u0000\u076c\u076d\u0001\u0000\u0000\u0000\u076c\u076a\u0001\u0000"+ - "\u0000\u0000\u076d\u076f\u0001\u0000\u0000\u0000\u076e\u076c\u0001\u0000"+ - "\u0000\u0000\u076f\u0770\u0005;\u0000\u0000\u0770\u077c\u0005)\u0000\u0000"+ - "\u0771\u0772\u0005;\u0000\u0000\u0772\u0773\u0005;\u0000\u0000\u0773\u0777"+ - "\u0001\u0000\u0000\u0000\u0774\u0776\t\u0000\u0000\u0000\u0775\u0774\u0001"+ - "\u0000\u0000\u0000\u0776\u0779\u0001\u0000\u0000\u0000\u0777\u0778\u0001"+ - "\u0000\u0000\u0000\u0777\u0775\u0001\u0000\u0000\u0000\u0778\u077a\u0001"+ - "\u0000\u0000\u0000\u0779\u0777\u0001\u0000\u0000\u0000\u077a\u077c\u0005"+ - "\n\u0000\u0000\u077b\u0766\u0001\u0000\u0000\u0000\u077b\u0771\u0001\u0000"+ - "\u0000\u0000\u077c\u077d\u0001\u0000\u0000\u0000\u077d\u077e\u0006\u0096"+ - "\u0000\u0000\u077e\u012e\u0001\u0000\u0000\u0000\u077f\u0780\u0007\u0002"+ - "\u0000\u0000\u0780\u0130\u0001\u0000\u0000\u0000\u0781\u0788\u0003\u0137"+ - "\u009b\u0000\u0782\u0784\u0005_\u0000\u0000\u0783\u0782\u0001\u0000\u0000"+ - "\u0000\u0783\u0784\u0001\u0000\u0000\u0000\u0784\u0785\u0001\u0000\u0000"+ - "\u0000\u0785\u0787\u0003\u0137\u009b\u0000\u0786\u0783\u0001\u0000\u0000"+ - "\u0000\u0787\u078a\u0001\u0000\u0000\u0000\u0788\u0786\u0001\u0000\u0000"+ - "\u0000\u0788\u0789\u0001\u0000\u0000\u0000\u0789\u0132\u0001\u0000\u0000"+ - "\u0000\u078a\u0788\u0001\u0000\u0000\u0000\u078b\u0792\u0003\u0139\u009c"+ - "\u0000\u078c\u078e\u0005_\u0000\u0000\u078d\u078c\u0001\u0000\u0000\u0000"+ - "\u078d\u078e\u0001\u0000\u0000\u0000\u078e\u078f\u0001\u0000\u0000\u0000"+ - "\u078f\u0791\u0003\u0139\u009c\u0000\u0790\u078d\u0001\u0000\u0000\u0000"+ - "\u0791\u0794\u0001\u0000\u0000\u0000\u0792\u0790\u0001\u0000\u0000\u0000"+ - "\u0792\u0793\u0001\u0000\u0000\u0000\u0793\u0134\u0001\u0000\u0000\u0000"+ - "\u0794\u0792\u0001\u0000\u0000\u0000\u0795\u0796\u0007\u0003\u0000\u0000"+ - "\u0796\u0136\u0001\u0000\u0000\u0000\u0797\u0798\u0007\u0004\u0000\u0000"+ - "\u0798\u0138\u0001\u0000\u0000\u0000\u0799\u079a\u0007\u0005\u0000\u0000"+ - "\u079a\u013a\u0001\u0000\u0000\u0000\u079b\u079c\u0007\u0006\u0000\u0000"+ - "\u079c\u013c\u0001\u0000\u0000\u0000\u079d\u07a3\u0003\u0131\u0098\u0000"+ - "\u079e\u079f\u00050\u0000\u0000\u079f\u07a0\u0005x\u0000\u0000\u07a0\u07a1"+ - "\u0001\u0000\u0000\u0000\u07a1\u07a3\u0003\u0133\u0099\u0000\u07a2\u079d"+ - "\u0001\u0000\u0000\u0000\u07a2\u079e\u0001\u0000\u0000\u0000\u07a3\u013e"+ - "\u0001\u0000\u0000\u0000\u07a4\u07a5\u0003\u0135\u009a\u0000\u07a5\u07a6"+ - "\u0003\u013d\u009e\u0000\u07a6\u0140\u0001\u0000\u0000\u0000\u07a7\u07a8"+ - "\u0003\u0131\u0098\u0000\u07a8\u0142\u0001\u0000\u0000\u0000\u07a9\u07aa"+ - "\u0003\u0133\u0099\u0000\u07aa\u0144\u0001\u0000\u0000\u0000\u07ab\u07ad"+ - "\u0003\u0135\u009a\u0000\u07ac\u07ab\u0001\u0000\u0000\u0000\u07ac\u07ad"+ - "\u0001\u0000\u0000\u0000\u07ad\u07ae\u0001\u0000\u0000\u0000\u07ae\u07af"+ - "\u0003\u0131\u0098\u0000\u07af\u07b1\u0005.\u0000\u0000\u07b0\u07b2\u0003"+ - "\u0141\u00a0\u0000\u07b1\u07b0\u0001\u0000\u0000\u0000\u07b1\u07b2\u0001"+ - "\u0000\u0000\u0000\u07b2\u07fa\u0001\u0000\u0000\u0000\u07b3\u07b5\u0003"+ - "\u0135\u009a\u0000\u07b4\u07b3\u0001\u0000\u0000\u0000\u07b4\u07b5\u0001"+ - "\u0000\u0000\u0000\u07b5\u07b6\u0001\u0000\u0000\u0000\u07b6\u07bb\u0003"+ - "\u0131\u0098\u0000\u07b7\u07b9\u0005.\u0000\u0000\u07b8\u07ba\u0003\u0141"+ - "\u00a0\u0000\u07b9\u07b8\u0001\u0000\u0000\u0000\u07b9\u07ba\u0001\u0000"+ - "\u0000\u0000\u07ba\u07bc\u0001\u0000\u0000\u0000\u07bb\u07b7\u0001\u0000"+ - "\u0000\u0000\u07bb\u07bc\u0001\u0000\u0000\u0000\u07bc\u07bd\u0001\u0000"+ - "\u0000\u0000\u07bd\u07bf\u0007\u0007\u0000\u0000\u07be\u07c0\u0003\u0135"+ - "\u009a\u0000\u07bf\u07be\u0001\u0000\u0000\u0000\u07bf\u07c0\u0001\u0000"+ - "\u0000\u0000\u07c0\u07c1\u0001\u0000\u0000\u0000\u07c1\u07c2\u0003\u0131"+ - "\u0098\u0000\u07c2\u07fa\u0001\u0000\u0000\u0000\u07c3\u07c5\u0003\u0135"+ - "\u009a\u0000\u07c4\u07c3\u0001\u0000\u0000\u0000\u07c4\u07c5\u0001\u0000"+ - "\u0000\u0000\u07c5\u07c6\u0001\u0000\u0000\u0000\u07c6\u07c7\u00050\u0000"+ - "\u0000\u07c7\u07c8\u0005x\u0000\u0000\u07c8\u07c9\u0001\u0000\u0000\u0000"+ - "\u07c9\u07ca\u0003\u0133\u0099\u0000\u07ca\u07cc\u0005.\u0000\u0000\u07cb"+ - "\u07cd\u0003\u0143\u00a1\u0000\u07cc\u07cb\u0001\u0000\u0000\u0000\u07cc"+ - "\u07cd\u0001\u0000\u0000\u0000\u07cd\u07fa\u0001\u0000\u0000\u0000\u07ce"+ - "\u07d0\u0003\u0135\u009a\u0000\u07cf\u07ce\u0001\u0000\u0000\u0000\u07cf"+ - "\u07d0\u0001\u0000\u0000\u0000\u07d0\u07d1\u0001\u0000\u0000\u0000\u07d1"+ - "\u07d2\u00050\u0000\u0000\u07d2\u07d3\u0005x\u0000\u0000\u07d3\u07d4\u0001"+ - "\u0000\u0000\u0000\u07d4\u07d9\u0003\u0133\u0099\u0000\u07d5\u07d7\u0005"+ - ".\u0000\u0000\u07d6\u07d8\u0003\u0143\u00a1\u0000\u07d7\u07d6\u0001\u0000"+ - "\u0000\u0000\u07d7\u07d8\u0001\u0000\u0000\u0000\u07d8\u07da\u0001\u0000"+ - "\u0000\u0000\u07d9\u07d5\u0001\u0000\u0000\u0000\u07d9\u07da\u0001\u0000"+ - "\u0000\u0000\u07da\u07db\u0001\u0000\u0000\u0000\u07db\u07dd\u0007\b\u0000"+ - "\u0000\u07dc\u07de\u0003\u0135\u009a\u0000\u07dd\u07dc\u0001\u0000\u0000"+ - "\u0000\u07dd\u07de\u0001\u0000\u0000\u0000\u07de\u07df\u0001\u0000\u0000"+ - "\u0000\u07df\u07e0\u0003\u0131\u0098\u0000\u07e0\u07fa\u0001\u0000\u0000"+ - "\u0000\u07e1\u07e3\u0003\u0135\u009a\u0000\u07e2\u07e1\u0001\u0000\u0000"+ - "\u0000\u07e2\u07e3\u0001\u0000\u0000\u0000\u07e3\u07e4\u0001\u0000\u0000"+ - "\u0000\u07e4\u07e5\u0005i\u0000\u0000\u07e5\u07e6\u0005n\u0000\u0000\u07e6"+ - "\u07fa\u0005f\u0000\u0000\u07e7\u07e9\u0003\u0135\u009a\u0000\u07e8\u07e7"+ - "\u0001\u0000\u0000\u0000\u07e8\u07e9\u0001\u0000\u0000\u0000\u07e9\u07ea"+ - "\u0001\u0000\u0000\u0000\u07ea\u07eb\u0005n\u0000\u0000\u07eb\u07ec\u0005"+ - "a\u0000\u0000\u07ec\u07fa\u0005n\u0000\u0000\u07ed\u07ef\u0003\u0135\u009a"+ - "\u0000\u07ee\u07ed\u0001\u0000\u0000\u0000\u07ee\u07ef\u0001\u0000\u0000"+ - "\u0000\u07ef\u07f0\u0001\u0000\u0000\u0000\u07f0\u07f1\u0005n\u0000\u0000"+ - "\u07f1\u07f2\u0005a\u0000\u0000\u07f2\u07f3\u0005n\u0000\u0000\u07f3\u07f4"+ - "\u0005:\u0000\u0000\u07f4\u07f5\u0001\u0000\u0000\u0000\u07f5\u07f6\u0005"+ - "0\u0000\u0000\u07f6\u07f7\u0005x\u0000\u0000\u07f7\u07f8\u0001\u0000\u0000"+ - "\u0000\u07f8\u07fa\u0003\u0133\u0099\u0000\u07f9\u07ac\u0001\u0000\u0000"+ - "\u0000\u07f9\u07b4\u0001\u0000\u0000\u0000\u07f9\u07c4\u0001\u0000\u0000"+ - "\u0000\u07f9\u07cf\u0001\u0000\u0000\u0000\u07f9\u07e2\u0001\u0000\u0000"+ - "\u0000\u07f9\u07e8\u0001\u0000\u0000\u0000\u07f9\u07ee\u0001\u0000\u0000"+ - "\u0000\u07fa\u0146\u0001\u0000\u0000\u0000\u07fb\u080f\u0005\"\u0000\u0000"+ - "\u07fc\u080e\u0003\u014f\u00a7\u0000\u07fd\u080e\u0007\t\u0000\u0000\u07fe"+ - "\u07ff\u0005\\\u0000\u0000\u07ff\u0800\u0003\u0139\u009c\u0000\u0800\u0801"+ - "\u0003\u0139\u009c\u0000\u0801\u080e\u0001\u0000\u0000\u0000\u0802\u0803"+ - "\u0005\\\u0000\u0000\u0803\u0804\u0005u\u0000\u0000\u0804\u0805\u0005"+ - "{\u0000\u0000\u0805\u0807\u0001\u0000\u0000\u0000\u0806\u0808\u0003\u0139"+ - "\u009c\u0000\u0807\u0806\u0001\u0000\u0000\u0000\u0808\u0809\u0001\u0000"+ - "\u0000\u0000\u0809\u0807\u0001\u0000\u0000\u0000\u0809\u080a\u0001\u0000"+ - "\u0000\u0000\u080a\u080b\u0001\u0000\u0000\u0000\u080b\u080c\u0005}\u0000"+ - "\u0000\u080c\u080e\u0001\u0000\u0000\u0000\u080d\u07fc\u0001\u0000\u0000"+ - "\u0000\u080d\u07fd\u0001\u0000\u0000\u0000\u080d\u07fe\u0001\u0000\u0000"+ - "\u0000\u080d\u0802\u0001\u0000\u0000\u0000\u080e\u0811\u0001\u0000\u0000"+ - "\u0000\u080f\u080d\u0001\u0000\u0000\u0000\u080f\u0810\u0001\u0000\u0000"+ - "\u0000\u0810\u0812\u0001\u0000\u0000\u0000\u0811\u080f\u0001\u0000\u0000"+ - "\u0000\u0812\u0813\u0005\"\u0000\u0000\u0813\u0148\u0001\u0000\u0000\u0000"+ - "\u0814\u0819\u0005$\u0000\u0000\u0815\u081a\u0003\u013b\u009d\u0000\u0816"+ - "\u081a\u0003\u0137\u009b\u0000\u0817\u081a\u0005_\u0000\u0000\u0818\u081a"+ - "\u0003\u012f\u0097\u0000\u0819\u0815\u0001\u0000\u0000\u0000\u0819\u0816"+ - "\u0001\u0000\u0000\u0000\u0819\u0817\u0001\u0000\u0000\u0000\u0819\u0818"+ - "\u0001\u0000\u0000\u0000\u081a\u081b\u0001\u0000\u0000\u0000\u081b\u0819"+ - "\u0001\u0000\u0000\u0000\u081b\u081c\u0001\u0000\u0000\u0000\u081c\u014a"+ - "\u0001\u0000\u0000\u0000\u081d\u081e\u0007\n\u0000\u0000\u081e\u014c\u0001"+ - "\u0000\u0000\u0000\u081f\u0822\u0003g3\u0000\u0820\u0822\u0003i4\u0000"+ - "\u0821\u081f\u0001\u0000\u0000\u0000\u0821\u0820\u0001\u0000\u0000\u0000"+ - "\u0822\u014e\u0001\u0000\u0000\u0000\u0823\u0824\b\u000b\u0000\u0000\u0824"+ - "\u0150\u0001\u0000\u0000\u0000\u0825\u0826\u0007\f\u0000\u0000\u0826\u0152"+ - "\u0001\u0000\u0000\u0000\u0827\u0828\u0007\r\u0000\u0000\u0828\u0154\u0001"+ - "\u0000\u0000\u0000\u0829\u082a\u0007\u000e\u0000\u0000\u082a\u0156\u0001"+ - "\u0000\u0000\u0000\u082b\u082e\u0003\u0151\u00a8\u0000\u082c\u082e\u0003"+ - "\u015b\u00ad\u0000\u082d\u082b\u0001\u0000\u0000\u0000\u082d\u082c\u0001"+ - "\u0000\u0000\u0000\u082e\u0158\u0001\u0000\u0000\u0000\u082f\u0832\u0003"+ - "\u0153\u00a9\u0000\u0830\u0832\u0003\u015b\u00ad\u0000\u0831\u082f\u0001"+ - "\u0000\u0000\u0000\u0831\u0830\u0001\u0000\u0000\u0000\u0832\u015a\u0001"+ - "\u0000\u0000\u0000\u0833\u0834\u0007\u000f\u0000\u0000\u0834\u084f\u0003"+ - "\u0155\u00aa\u0000\u0835\u0836\u0007\u0010\u0000\u0000\u0836\u0837\u0007"+ - "\u0011\u0000\u0000\u0837\u084f\u0003\u0155\u00aa\u0000\u0838\u0839\u0007"+ - "\u0012\u0000\u0000\u0839\u083a\u0007\u0013\u0000\u0000\u083a\u084f\u0003"+ - "\u0155\u00aa\u0000\u083b\u083c\u0007\u0014\u0000\u0000\u083c\u083d\u0003"+ - "\u0155\u00aa\u0000\u083d\u083e\u0003\u0155\u00aa\u0000\u083e\u084f\u0001"+ - "\u0000\u0000\u0000\u083f\u0840\u0007\u0015\u0000\u0000\u0840\u0841\u0007"+ - "\u0016\u0000\u0000\u0841\u0842\u0003\u0155\u00aa\u0000\u0842\u0843\u0003"+ - "\u0155\u00aa\u0000\u0843\u084f\u0001\u0000\u0000\u0000\u0844\u0845\u0007"+ - "\u0017\u0000\u0000\u0845\u0846\u0007\u0018\u0000\u0000\u0846\u0847\u0003"+ - "\u0155\u00aa\u0000\u0847\u0848\u0003\u0155\u00aa\u0000\u0848\u084f\u0001"+ - "\u0000\u0000\u0000\u0849\u084a\u0007\u0019\u0000\u0000\u084a\u084b\u0003"+ - "\u0155\u00aa\u0000\u084b\u084c\u0003\u0155\u00aa\u0000\u084c\u084d\u0003"+ - "\u0155\u00aa\u0000\u084d\u084f\u0001\u0000\u0000\u0000\u084e\u0833\u0001"+ - "\u0000\u0000\u0000\u084e\u0835\u0001\u0000\u0000\u0000\u084e\u0838\u0001"+ - "\u0000\u0000\u0000\u084e\u083b\u0001\u0000\u0000\u0000\u084e\u083f\u0001"+ - "\u0000\u0000\u0000\u084e\u0844\u0001\u0000\u0000\u0000\u084e\u0849\u0001"+ - "\u0000\u0000\u0000\u084f\u015c\u0001\u0000\u0000\u0000,\u0000\u0274\u027e"+ - "\u029a\u02ae\u02b2\u049f\u04ea\u0582\u0626\u0762\u076c\u0777\u077b\u0783"+ - "\u0788\u078d\u0792\u07a2\u07ac\u07b1\u07b4\u07b9\u07bb\u07bf\u07c4\u07cc"+ - "\u07cf\u07d7\u07d9\u07dd\u07e2\u07e8\u07ee\u07f9\u0809\u080d\u080f\u0819"+ - "\u081b\u0821\u082d\u0831\u084e\u0001\u0006\u0000\u0000"; - public static final ATN _ATN = - new ATNDeserializer().deserialize(_serializedATN.toCharArray()); - static { - _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; - for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { - _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); - } - } -} \ No newline at end of file diff --git a/grammar/WatLexer.tokens b/grammar/WatLexer.tokens deleted file mode 100644 index 3284f78c5..000000000 --- a/grammar/WatLexer.tokens +++ /dev/null @@ -1,281 +0,0 @@ -LPAR=1 -RPAR=2 -NAT=3 -INT=4 -FLOAT=5 -STRING_=6 -VALUE_TYPE=7 -CONST=8 -SYMBOLIC=9 -FUNCREF=10 -EXTERNREF=11 -MUT=12 -NOP=13 -SYM_ASSERT=14 -ALLOC=15 -FREE=16 -UNREACHABLE=17 -DROP=18 -BLOCK=19 -LOOP=20 -FOR=21 -VBAR=22 -END=23 -BR=24 -BR_IF=25 -BR_TABLE=26 -RETURN=27 -IF=28 -THEN=29 -ELSE=30 -SELECT=31 -CALL=32 -CALL_INDIRECT=33 -RETURN_CALL=34 -RETURN_CALL_INDIRECT=35 -LOCAL_GET=36 -LOCAL_SET=37 -LOCAL_TEE=38 -GLOBAL_GET=39 -GLOBAL_SET=40 -LOAD=41 -STORE=42 -UNDERSCORE=43 -OFFSET_EQ=44 -ALIGN_EQ=45 -SIGN_POSTFIX=46 -MEM_SIZE=47 -I32=48 -I64=49 -F32=50 -F64=51 -IXX=52 -FXX=53 -OP_EQZ=54 -OP_EQ=55 -OP_NE=56 -OP_LT=57 -OP_LTS=58 -OP_LTU=59 -OP_LE=60 -OP_LES=61 -OP_LEU=62 -OP_GT=63 -OP_GTS=64 -OP_GTU=65 -OP_GE=66 -OP_GES=67 -OP_GEU=68 -OP_CLZ=69 -OP_CTZ=70 -OP_POPCNT=71 -OP_NEG=72 -OP_ABS=73 -OP_SQRT=74 -OP_CEIL=75 -OP_FLOOR=76 -OP_TRUNC=77 -OP_NEAREST=78 -OP_ADD=79 -OP_SUB=80 -OP_MUL=81 -OP_DIV=82 -OP_DIV_S=83 -OP_DIV_U=84 -OP_REM_S=85 -OP_REM_U=86 -OP_AND=87 -OP_OR=88 -OP_XOR=89 -OP_SHL=90 -OP_SHR_S=91 -OP_SHR_U=92 -OP_ROTL=93 -OP_ROTR=94 -OP_MIN=95 -OP_MAX=96 -OP_COPYSIGN=97 -OP_WRAP=98 -OP_TRUNC_=99 -OP_TRUNC_SAT=100 -OP_CONVERT=101 -OP_EXTEND=102 -OP_DEMOTE=103 -OP_PROMOTE=104 -OP_REINTER=105 -MEMORY_SIZE=106 -MEMORY_GROW=107 -MEMORY_FILL=108 -MEMORY_COPY=109 -MEMORY_INIT=110 -TEST=111 -COMPARE=112 -UNARY=113 -BINARY=114 -CONVERT=115 -TYPE=116 -FUNC=117 -EXTERN=118 -START_=119 -PARAM=120 -RESULT=121 -LOCAL=122 -GLOBAL=123 -TABLE=124 -MEMORY=125 -ELEM=126 -DATA=127 -OFFSET=128 -IMPORT=129 -EXPORT=130 -MODULE=131 -BIN=132 -QUOTE=133 -SCRIPT=134 -REGISTER=135 -INVOKE=136 -GET=137 -ASSERT_MALFORMED=138 -ASSERT_INVALID=139 -ASSERT_UNLINKABLE=140 -ASSERT_RETURN=141 -ASSERT_RETURN_CANONICAL_NAN=142 -ASSERT_RETURN_ARITHMETIC_NAN=143 -ASSERT_TRAP=144 -ASSERT_EXHAUSTION=145 -INPUT=146 -OUTPUT=147 -VAR=148 -V128=149 -SPACE=150 -COMMENT=151 -'('=1 -')'=2 -'funcref'=10 -'externref'=11 -'mut'=12 -'nop'=13 -'sym_assert'=14 -'alloc'=15 -'free'=16 -'unreachable'=17 -'drop'=18 -'block'=19 -'loop'=20 -'for'=21 -'|'=22 -'end'=23 -'br'=24 -'br_if'=25 -'br_table'=26 -'return'=27 -'if'=28 -'then'=29 -'else'=30 -'.select'=31 -'call'=32 -'call_indirect'=33 -'return_call'=34 -'return_call_indirect'=35 -'local.get'=36 -'local.set'=37 -'local.tee'=38 -'global.get'=39 -'global.set'=40 -'_'=43 -'offset='=44 -'align='=45 -'i32'=48 -'i64'=49 -'f32'=50 -'f64'=51 -'.eqz'=54 -'.eq'=55 -'.ne'=56 -'.lt'=57 -'.lt_s'=58 -'.lt_u'=59 -'.le'=60 -'.le_s'=61 -'.le_u'=62 -'.gt'=63 -'.gt_s'=64 -'.gt_u'=65 -'.ge'=66 -'.ge_s'=67 -'.ge_u'=68 -'.clz'=69 -'.ctz'=70 -'.popcnt'=71 -'.neg'=72 -'.abs'=73 -'.sqrt'=74 -'.ceil'=75 -'.floor'=76 -'.trunc'=77 -'.nearest'=78 -'.add'=79 -'.sub'=80 -'.mul'=81 -'.div'=82 -'.div_s'=83 -'.div_u'=84 -'.rem_s'=85 -'.rem_u'=86 -'.and'=87 -'.or'=88 -'.xor'=89 -'.shl'=90 -'.shr_s'=91 -'.shr_u'=92 -'.rotl'=93 -'.rotr'=94 -'.min'=95 -'.max'=96 -'.copysign'=97 -'.wrap_'=98 -'.trunc_'=99 -'.trunc_sat_'=100 -'.convert_'=101 -'.extend_'=102 -'.demote_'=103 -'.promote_'=104 -'.reinterpret_'=105 -'memory.size'=106 -'memory.grow'=107 -'memory.fill'=108 -'memory.copy'=109 -'memory.init'=110 -'type'=116 -'func'=117 -'extern'=118 -'start'=119 -'param'=120 -'result'=121 -'local'=122 -'global'=123 -'table'=124 -'memory'=125 -'elem'=126 -'data'=127 -'offset'=128 -'import'=129 -'export'=130 -'module'=131 -'binary'=132 -'quote'=133 -'script'=134 -'register'=135 -'invoke'=136 -'get'=137 -'assert_malformed'=138 -'assert_invalid'=139 -'assert_unlinkable'=140 -'assert_return'=141 -'assert_return_canonical_nan'=142 -'assert_return_arithmetic_nan'=143 -'assert_trap'=144 -'assert_exhaustion'=145 -'input'=146 -'output'=147 -'v128'=149 diff --git a/grammar/WatParser.interp b/grammar/WatParser.interp deleted file mode 100644 index 53c1592b0..000000000 --- a/grammar/WatParser.interp +++ /dev/null @@ -1,385 +0,0 @@ -token literal names: -null -'(' -')' -null -null -null -null -null -null -null -'funcref' -'externref' -'mut' -'nop' -'sym_assert' -'alloc' -'free' -'unreachable' -'drop' -'block' -'loop' -'for' -'|' -'end' -'br' -'br_if' -'br_table' -'return' -'if' -'then' -'else' -'.select' -'call' -'call_indirect' -'return_call' -'return_call_indirect' -'local.get' -'local.set' -'local.tee' -'global.get' -'global.set' -null -null -'_' -'offset=' -'align=' -null -null -'i32' -'i64' -'f32' -'f64' -null -null -'.eqz' -'.eq' -'.ne' -'.lt' -'.lt_s' -'.lt_u' -'.le' -'.le_s' -'.le_u' -'.gt' -'.gt_s' -'.gt_u' -'.ge' -'.ge_s' -'.ge_u' -'.clz' -'.ctz' -'.popcnt' -'.neg' -'.abs' -'.sqrt' -'.ceil' -'.floor' -'.trunc' -'.nearest' -'.add' -'.sub' -'.mul' -'.div' -'.div_s' -'.div_u' -'.rem_s' -'.rem_u' -'.and' -'.or' -'.xor' -'.shl' -'.shr_s' -'.shr_u' -'.rotl' -'.rotr' -'.min' -'.max' -'.copysign' -'.wrap_' -'.trunc_' -'.trunc_sat_' -'.convert_' -'.extend_' -'.demote_' -'.promote_' -'.reinterpret_' -'memory.size' -'memory.grow' -'memory.fill' -'memory.copy' -'memory.init' -null -null -null -null -null -'type' -'func' -'extern' -'start' -'param' -'result' -'local' -'global' -'table' -'memory' -'elem' -'data' -'offset' -'import' -'export' -'module' -'binary' -'quote' -'script' -'register' -'invoke' -'get' -'assert_malformed' -'assert_invalid' -'assert_unlinkable' -'assert_return' -'assert_return_canonical_nan' -'assert_return_arithmetic_nan' -'assert_trap' -'assert_exhaustion' -'input' -'output' -null -'v128' -null -null - -token symbolic names: -null -LPAR -RPAR -NAT -INT -FLOAT -STRING_ -VALUE_TYPE -CONST -SYMBOLIC -FUNCREF -EXTERNREF -MUT -NOP -SYM_ASSERT -ALLOC -FREE -UNREACHABLE -DROP -BLOCK -LOOP -FOR -VBAR -END -BR -BR_IF -BR_TABLE -RETURN -IF -THEN -ELSE -SELECT -CALL -CALL_INDIRECT -RETURN_CALL -RETURN_CALL_INDIRECT -LOCAL_GET -LOCAL_SET -LOCAL_TEE -GLOBAL_GET -GLOBAL_SET -LOAD -STORE -UNDERSCORE -OFFSET_EQ -ALIGN_EQ -SIGN_POSTFIX -MEM_SIZE -I32 -I64 -F32 -F64 -IXX -FXX -OP_EQZ -OP_EQ -OP_NE -OP_LT -OP_LTS -OP_LTU -OP_LE -OP_LES -OP_LEU -OP_GT -OP_GTS -OP_GTU -OP_GE -OP_GES -OP_GEU -OP_CLZ -OP_CTZ -OP_POPCNT -OP_NEG -OP_ABS -OP_SQRT -OP_CEIL -OP_FLOOR -OP_TRUNC -OP_NEAREST -OP_ADD -OP_SUB -OP_MUL -OP_DIV -OP_DIV_S -OP_DIV_U -OP_REM_S -OP_REM_U -OP_AND -OP_OR -OP_XOR -OP_SHL -OP_SHR_S -OP_SHR_U -OP_ROTL -OP_ROTR -OP_MIN -OP_MAX -OP_COPYSIGN -OP_WRAP -OP_TRUNC_ -OP_TRUNC_SAT -OP_CONVERT -OP_EXTEND -OP_DEMOTE -OP_PROMOTE -OP_REINTER -MEMORY_SIZE -MEMORY_GROW -MEMORY_FILL -MEMORY_COPY -MEMORY_INIT -TEST -COMPARE -UNARY -BINARY -CONVERT -TYPE -FUNC -EXTERN -START_ -PARAM -RESULT -LOCAL -GLOBAL -TABLE -MEMORY -ELEM -DATA -OFFSET -IMPORT -EXPORT -MODULE -BIN -QUOTE -SCRIPT -REGISTER -INVOKE -GET -ASSERT_MALFORMED -ASSERT_INVALID -ASSERT_UNLINKABLE -ASSERT_RETURN -ASSERT_RETURN_CANONICAL_NAN -ASSERT_RETURN_ARITHMETIC_NAN -ASSERT_TRAP -ASSERT_EXHAUSTION -INPUT -OUTPUT -VAR -V128 -SPACE -COMMENT - -rule names: -value -name -numType -refType -vecType -valType -heapType -globalType -defType -funcParamType -funcResType -funcType -tableType -memoryType -typeUse -literal -idx -bindVar -instr -forLoop -plainInstr -offsetEq -alignEq -load -store -selectInstr -callIndirectInstr -callInstrParams -callInstrParamsInstr -callInstrResultsInstr -blockInstr -blockType -block -foldedInstr -expr -callExprType -callExprParams -callExprResults -instrList -constExpr -function -funcFields -funcFieldsBody -funcBody -offset -elem -table -tableField -data -memory -memoryField -global -globalField -importDesc -simport -inlineImport -exportDesc -export_ -inlineExport -typeDef -start_ -moduleField -module_ -scriptModule -action_ -assertion -cmd -meta -wconst -constList -script -module - - -atn: -[4, 1, 151, 1050, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 3, 5, 158, 8, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 168, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 5, 9, 178, 8, 9, 10, 9, 12, 9, 181, 9, 9, 1, 9, 1, 9, 1, 9, 3, 9, 186, 8, 9, 1, 9, 5, 9, 189, 8, 9, 10, 9, 12, 9, 192, 9, 9, 1, 10, 1, 10, 1, 10, 5, 10, 197, 8, 10, 10, 10, 12, 10, 200, 9, 10, 1, 10, 5, 10, 203, 8, 10, 10, 10, 12, 10, 206, 9, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 3, 12, 213, 8, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 219, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 236, 8, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 4, 20, 258, 8, 20, 11, 20, 12, 20, 259, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 279, 8, 20, 1, 20, 3, 20, 282, 8, 20, 1, 20, 1, 20, 3, 20, 286, 8, 20, 1, 20, 3, 20, 289, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 309, 8, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 322, 8, 23, 1, 24, 1, 24, 1, 24, 3, 24, 327, 8, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 3, 26, 334, 8, 26, 1, 26, 1, 26, 1, 26, 3, 26, 339, 8, 26, 1, 26, 3, 26, 342, 8, 26, 1, 27, 1, 27, 1, 27, 5, 27, 347, 8, 27, 10, 27, 12, 27, 350, 9, 27, 1, 27, 5, 27, 353, 8, 27, 10, 27, 12, 27, 356, 9, 27, 1, 27, 1, 27, 1, 27, 5, 27, 361, 8, 27, 10, 27, 12, 27, 364, 9, 27, 1, 27, 5, 27, 367, 8, 27, 10, 27, 12, 27, 370, 9, 27, 1, 28, 1, 28, 1, 28, 5, 28, 375, 8, 28, 10, 28, 12, 28, 378, 9, 28, 1, 28, 5, 28, 381, 8, 28, 10, 28, 12, 28, 384, 9, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 5, 29, 391, 8, 29, 10, 29, 12, 29, 394, 9, 29, 1, 29, 5, 29, 397, 8, 29, 10, 29, 12, 29, 400, 9, 29, 1, 29, 1, 29, 1, 30, 1, 30, 3, 30, 406, 8, 30, 1, 30, 1, 30, 1, 30, 3, 30, 411, 8, 30, 1, 30, 1, 30, 3, 30, 415, 8, 30, 1, 30, 1, 30, 1, 30, 3, 30, 420, 8, 30, 1, 30, 1, 30, 3, 30, 424, 8, 30, 1, 30, 1, 30, 1, 30, 3, 30, 429, 8, 30, 1, 30, 3, 30, 432, 8, 30, 1, 30, 1, 30, 3, 30, 436, 8, 30, 3, 30, 438, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 445, 8, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 451, 8, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 5, 34, 462, 8, 34, 10, 34, 12, 34, 465, 9, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 473, 8, 34, 1, 34, 1, 34, 1, 34, 3, 34, 478, 8, 34, 1, 34, 1, 34, 1, 34, 3, 34, 483, 8, 34, 1, 34, 1, 34, 5, 34, 487, 8, 34, 10, 34, 12, 34, 490, 9, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 500, 8, 34, 3, 34, 502, 8, 34, 1, 35, 3, 35, 505, 8, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 5, 36, 512, 8, 36, 10, 36, 12, 36, 515, 9, 36, 1, 36, 5, 36, 518, 8, 36, 10, 36, 12, 36, 521, 9, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 5, 37, 528, 8, 37, 10, 37, 12, 37, 531, 9, 37, 1, 37, 5, 37, 534, 8, 37, 10, 37, 12, 37, 537, 9, 37, 1, 37, 5, 37, 540, 8, 37, 10, 37, 12, 37, 543, 9, 37, 1, 38, 5, 38, 546, 8, 38, 10, 38, 12, 38, 549, 9, 38, 1, 38, 3, 38, 552, 8, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 3, 40, 559, 8, 40, 1, 40, 1, 40, 1, 40, 1, 41, 3, 41, 565, 8, 41, 1, 41, 1, 41, 1, 41, 3, 41, 570, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 577, 8, 41, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 5, 43, 585, 8, 43, 10, 43, 12, 43, 588, 9, 43, 1, 43, 1, 43, 1, 43, 3, 43, 593, 8, 43, 1, 43, 5, 43, 596, 8, 43, 10, 43, 12, 43, 599, 9, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 609, 8, 44, 1, 45, 1, 45, 1, 45, 3, 45, 614, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 620, 8, 45, 10, 45, 12, 45, 623, 9, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 630, 8, 45, 1, 45, 1, 45, 5, 45, 634, 8, 45, 10, 45, 12, 45, 637, 9, 45, 1, 45, 1, 45, 3, 45, 641, 8, 45, 1, 46, 1, 46, 1, 46, 3, 46, 646, 8, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 662, 8, 47, 10, 47, 12, 47, 665, 9, 47, 1, 47, 1, 47, 3, 47, 669, 8, 47, 1, 48, 1, 48, 1, 48, 3, 48, 674, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 680, 8, 48, 10, 48, 12, 48, 683, 9, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 690, 8, 48, 1, 48, 1, 48, 5, 48, 694, 8, 48, 10, 48, 12, 48, 697, 9, 48, 1, 48, 1, 48, 3, 48, 701, 8, 48, 1, 49, 1, 49, 1, 49, 3, 49, 706, 8, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 721, 8, 50, 10, 50, 12, 50, 724, 9, 50, 1, 50, 3, 50, 727, 8, 50, 1, 51, 1, 51, 1, 51, 3, 51, 732, 8, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 746, 8, 52, 1, 53, 1, 53, 1, 53, 3, 53, 751, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 759, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 767, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 775, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 783, 8, 53, 1, 53, 1, 53, 1, 53, 3, 53, 788, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 823, 8, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 3, 59, 839, 8, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 859, 8, 61, 1, 62, 1, 62, 1, 62, 3, 62, 864, 8, 62, 1, 62, 5, 62, 867, 8, 62, 10, 62, 12, 62, 870, 9, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 878, 8, 63, 1, 63, 1, 63, 5, 63, 882, 8, 63, 10, 63, 12, 63, 885, 9, 63, 1, 63, 3, 63, 888, 8, 63, 1, 64, 1, 64, 1, 64, 3, 64, 893, 8, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 902, 8, 64, 1, 64, 1, 64, 1, 64, 3, 64, 907, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 961, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 970, 8, 66, 1, 66, 1, 66, 1, 66, 3, 66, 975, 8, 66, 1, 67, 1, 67, 1, 67, 3, 67, 980, 8, 67, 1, 67, 5, 67, 983, 8, 67, 10, 67, 12, 67, 986, 9, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 992, 8, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 999, 8, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 1006, 8, 67, 1, 67, 3, 67, 1009, 8, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 5, 69, 1017, 8, 69, 10, 69, 12, 69, 1020, 9, 69, 1, 70, 5, 70, 1023, 8, 70, 10, 70, 12, 70, 1026, 9, 70, 1, 70, 1, 70, 4, 70, 1030, 8, 70, 11, 70, 12, 70, 1031, 1, 70, 1, 70, 3, 70, 1036, 8, 70, 1, 71, 1, 71, 1, 71, 1, 71, 5, 71, 1042, 8, 71, 10, 71, 12, 71, 1045, 9, 71, 1, 71, 3, 71, 1048, 8, 71, 1, 71, 0, 0, 72, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 0, 6, 1, 0, 4, 5, 1, 0, 10, 11, 1, 0, 117, 118, 1, 0, 3, 5, 2, 0, 3, 3, 148, 148, 1, 0, 132, 133, 1161, 0, 144, 1, 0, 0, 0, 2, 146, 1, 0, 0, 0, 4, 148, 1, 0, 0, 0, 6, 150, 1, 0, 0, 0, 8, 152, 1, 0, 0, 0, 10, 157, 1, 0, 0, 0, 12, 159, 1, 0, 0, 0, 14, 167, 1, 0, 0, 0, 16, 169, 1, 0, 0, 0, 18, 190, 1, 0, 0, 0, 20, 204, 1, 0, 0, 0, 22, 207, 1, 0, 0, 0, 24, 210, 1, 0, 0, 0, 26, 216, 1, 0, 0, 0, 28, 220, 1, 0, 0, 0, 30, 225, 1, 0, 0, 0, 32, 227, 1, 0, 0, 0, 34, 229, 1, 0, 0, 0, 36, 235, 1, 0, 0, 0, 38, 237, 1, 0, 0, 0, 40, 308, 1, 0, 0, 0, 42, 310, 1, 0, 0, 0, 44, 313, 1, 0, 0, 0, 46, 316, 1, 0, 0, 0, 48, 323, 1, 0, 0, 0, 50, 328, 1, 0, 0, 0, 52, 341, 1, 0, 0, 0, 54, 354, 1, 0, 0, 0, 56, 382, 1, 0, 0, 0, 58, 398, 1, 0, 0, 0, 60, 437, 1, 0, 0, 0, 62, 450, 1, 0, 0, 0, 64, 452, 1, 0, 0, 0, 66, 455, 1, 0, 0, 0, 68, 501, 1, 0, 0, 0, 70, 504, 1, 0, 0, 0, 72, 519, 1, 0, 0, 0, 74, 535, 1, 0, 0, 0, 76, 547, 1, 0, 0, 0, 78, 553, 1, 0, 0, 0, 80, 555, 1, 0, 0, 0, 82, 576, 1, 0, 0, 0, 84, 578, 1, 0, 0, 0, 86, 597, 1, 0, 0, 0, 88, 608, 1, 0, 0, 0, 90, 640, 1, 0, 0, 0, 92, 642, 1, 0, 0, 0, 94, 668, 1, 0, 0, 0, 96, 700, 1, 0, 0, 0, 98, 702, 1, 0, 0, 0, 100, 726, 1, 0, 0, 0, 102, 728, 1, 0, 0, 0, 104, 745, 1, 0, 0, 0, 106, 787, 1, 0, 0, 0, 108, 789, 1, 0, 0, 0, 110, 796, 1, 0, 0, 0, 112, 822, 1, 0, 0, 0, 114, 824, 1, 0, 0, 0, 116, 830, 1, 0, 0, 0, 118, 835, 1, 0, 0, 0, 120, 843, 1, 0, 0, 0, 122, 858, 1, 0, 0, 0, 124, 860, 1, 0, 0, 0, 126, 887, 1, 0, 0, 0, 128, 906, 1, 0, 0, 0, 130, 960, 1, 0, 0, 0, 132, 974, 1, 0, 0, 0, 134, 1008, 1, 0, 0, 0, 136, 1010, 1, 0, 0, 0, 138, 1018, 1, 0, 0, 0, 140, 1035, 1, 0, 0, 0, 142, 1047, 1, 0, 0, 0, 144, 145, 7, 0, 0, 0, 145, 1, 1, 0, 0, 0, 146, 147, 5, 6, 0, 0, 147, 3, 1, 0, 0, 0, 148, 149, 5, 7, 0, 0, 149, 5, 1, 0, 0, 0, 150, 151, 7, 1, 0, 0, 151, 7, 1, 0, 0, 0, 152, 153, 5, 149, 0, 0, 153, 9, 1, 0, 0, 0, 154, 158, 3, 4, 2, 0, 155, 158, 3, 8, 4, 0, 156, 158, 3, 6, 3, 0, 157, 154, 1, 0, 0, 0, 157, 155, 1, 0, 0, 0, 157, 156, 1, 0, 0, 0, 158, 11, 1, 0, 0, 0, 159, 160, 7, 2, 0, 0, 160, 13, 1, 0, 0, 0, 161, 168, 3, 10, 5, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 12, 0, 0, 164, 165, 3, 10, 5, 0, 165, 166, 5, 2, 0, 0, 166, 168, 1, 0, 0, 0, 167, 161, 1, 0, 0, 0, 167, 162, 1, 0, 0, 0, 168, 15, 1, 0, 0, 0, 169, 170, 5, 1, 0, 0, 170, 171, 5, 117, 0, 0, 171, 172, 3, 22, 11, 0, 172, 173, 5, 2, 0, 0, 173, 17, 1, 0, 0, 0, 174, 175, 5, 1, 0, 0, 175, 185, 5, 120, 0, 0, 176, 178, 3, 10, 5, 0, 177, 176, 1, 0, 0, 0, 178, 181, 1, 0, 0, 0, 179, 177, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 186, 1, 0, 0, 0, 181, 179, 1, 0, 0, 0, 182, 183, 3, 34, 17, 0, 183, 184, 3, 10, 5, 0, 184, 186, 1, 0, 0, 0, 185, 179, 1, 0, 0, 0, 185, 182, 1, 0, 0, 0, 186, 187, 1, 0, 0, 0, 187, 189, 5, 2, 0, 0, 188, 174, 1, 0, 0, 0, 189, 192, 1, 0, 0, 0, 190, 188, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 19, 1, 0, 0, 0, 192, 190, 1, 0, 0, 0, 193, 194, 5, 1, 0, 0, 194, 198, 5, 121, 0, 0, 195, 197, 3, 10, 5, 0, 196, 195, 1, 0, 0, 0, 197, 200, 1, 0, 0, 0, 198, 196, 1, 0, 0, 0, 198, 199, 1, 0, 0, 0, 199, 201, 1, 0, 0, 0, 200, 198, 1, 0, 0, 0, 201, 203, 5, 2, 0, 0, 202, 193, 1, 0, 0, 0, 203, 206, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 21, 1, 0, 0, 0, 206, 204, 1, 0, 0, 0, 207, 208, 3, 18, 9, 0, 208, 209, 3, 20, 10, 0, 209, 23, 1, 0, 0, 0, 210, 212, 5, 3, 0, 0, 211, 213, 5, 3, 0, 0, 212, 211, 1, 0, 0, 0, 212, 213, 1, 0, 0, 0, 213, 214, 1, 0, 0, 0, 214, 215, 3, 6, 3, 0, 215, 25, 1, 0, 0, 0, 216, 218, 5, 3, 0, 0, 217, 219, 5, 3, 0, 0, 218, 217, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 27, 1, 0, 0, 0, 220, 221, 5, 1, 0, 0, 221, 222, 5, 116, 0, 0, 222, 223, 3, 32, 16, 0, 223, 224, 5, 2, 0, 0, 224, 29, 1, 0, 0, 0, 225, 226, 7, 3, 0, 0, 226, 31, 1, 0, 0, 0, 227, 228, 7, 4, 0, 0, 228, 33, 1, 0, 0, 0, 229, 230, 5, 148, 0, 0, 230, 35, 1, 0, 0, 0, 231, 236, 3, 40, 20, 0, 232, 236, 3, 60, 30, 0, 233, 236, 3, 66, 33, 0, 234, 236, 3, 38, 19, 0, 235, 231, 1, 0, 0, 0, 235, 232, 1, 0, 0, 0, 235, 233, 1, 0, 0, 0, 235, 234, 1, 0, 0, 0, 236, 37, 1, 0, 0, 0, 237, 238, 5, 21, 0, 0, 238, 239, 5, 1, 0, 0, 239, 240, 3, 76, 38, 0, 240, 241, 5, 22, 0, 0, 241, 242, 3, 76, 38, 0, 242, 243, 5, 22, 0, 0, 243, 244, 3, 76, 38, 0, 244, 245, 5, 2, 0, 0, 245, 246, 3, 76, 38, 0, 246, 39, 1, 0, 0, 0, 247, 309, 5, 17, 0, 0, 248, 309, 5, 13, 0, 0, 249, 309, 5, 18, 0, 0, 250, 309, 3, 50, 25, 0, 251, 252, 5, 24, 0, 0, 252, 309, 3, 32, 16, 0, 253, 254, 5, 25, 0, 0, 254, 309, 3, 32, 16, 0, 255, 257, 5, 26, 0, 0, 256, 258, 3, 32, 16, 0, 257, 256, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 257, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 309, 1, 0, 0, 0, 261, 309, 5, 27, 0, 0, 262, 263, 5, 32, 0, 0, 263, 309, 3, 32, 16, 0, 264, 265, 5, 34, 0, 0, 265, 309, 3, 32, 16, 0, 266, 267, 5, 36, 0, 0, 267, 309, 3, 32, 16, 0, 268, 269, 5, 37, 0, 0, 269, 309, 3, 32, 16, 0, 270, 271, 5, 38, 0, 0, 271, 309, 3, 32, 16, 0, 272, 273, 5, 39, 0, 0, 273, 309, 3, 32, 16, 0, 274, 275, 5, 40, 0, 0, 275, 309, 3, 32, 16, 0, 276, 278, 3, 46, 23, 0, 277, 279, 3, 42, 21, 0, 278, 277, 1, 0, 0, 0, 278, 279, 1, 0, 0, 0, 279, 281, 1, 0, 0, 0, 280, 282, 3, 44, 22, 0, 281, 280, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 309, 1, 0, 0, 0, 283, 285, 3, 48, 24, 0, 284, 286, 3, 42, 21, 0, 285, 284, 1, 0, 0, 0, 285, 286, 1, 0, 0, 0, 286, 288, 1, 0, 0, 0, 287, 289, 3, 44, 22, 0, 288, 287, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 309, 1, 0, 0, 0, 290, 309, 5, 106, 0, 0, 291, 309, 5, 107, 0, 0, 292, 309, 5, 108, 0, 0, 293, 309, 5, 109, 0, 0, 294, 295, 5, 110, 0, 0, 295, 309, 3, 32, 16, 0, 296, 297, 5, 8, 0, 0, 297, 309, 3, 30, 15, 0, 298, 309, 5, 9, 0, 0, 299, 309, 5, 14, 0, 0, 300, 309, 5, 15, 0, 0, 301, 309, 5, 16, 0, 0, 302, 309, 5, 111, 0, 0, 303, 309, 5, 112, 0, 0, 304, 309, 5, 113, 0, 0, 305, 309, 5, 114, 0, 0, 306, 309, 5, 115, 0, 0, 307, 309, 3, 52, 26, 0, 308, 247, 1, 0, 0, 0, 308, 248, 1, 0, 0, 0, 308, 249, 1, 0, 0, 0, 308, 250, 1, 0, 0, 0, 308, 251, 1, 0, 0, 0, 308, 253, 1, 0, 0, 0, 308, 255, 1, 0, 0, 0, 308, 261, 1, 0, 0, 0, 308, 262, 1, 0, 0, 0, 308, 264, 1, 0, 0, 0, 308, 266, 1, 0, 0, 0, 308, 268, 1, 0, 0, 0, 308, 270, 1, 0, 0, 0, 308, 272, 1, 0, 0, 0, 308, 274, 1, 0, 0, 0, 308, 276, 1, 0, 0, 0, 308, 283, 1, 0, 0, 0, 308, 290, 1, 0, 0, 0, 308, 291, 1, 0, 0, 0, 308, 292, 1, 0, 0, 0, 308, 293, 1, 0, 0, 0, 308, 294, 1, 0, 0, 0, 308, 296, 1, 0, 0, 0, 308, 298, 1, 0, 0, 0, 308, 299, 1, 0, 0, 0, 308, 300, 1, 0, 0, 0, 308, 301, 1, 0, 0, 0, 308, 302, 1, 0, 0, 0, 308, 303, 1, 0, 0, 0, 308, 304, 1, 0, 0, 0, 308, 305, 1, 0, 0, 0, 308, 306, 1, 0, 0, 0, 308, 307, 1, 0, 0, 0, 309, 41, 1, 0, 0, 0, 310, 311, 5, 44, 0, 0, 311, 312, 5, 3, 0, 0, 312, 43, 1, 0, 0, 0, 313, 314, 5, 45, 0, 0, 314, 315, 5, 3, 0, 0, 315, 45, 1, 0, 0, 0, 316, 317, 3, 4, 2, 0, 317, 321, 5, 41, 0, 0, 318, 319, 5, 47, 0, 0, 319, 320, 5, 43, 0, 0, 320, 322, 5, 46, 0, 0, 321, 318, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 47, 1, 0, 0, 0, 323, 324, 3, 4, 2, 0, 324, 326, 5, 42, 0, 0, 325, 327, 5, 47, 0, 0, 326, 325, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 49, 1, 0, 0, 0, 328, 329, 3, 4, 2, 0, 329, 330, 5, 31, 0, 0, 330, 51, 1, 0, 0, 0, 331, 333, 5, 33, 0, 0, 332, 334, 3, 32, 16, 0, 333, 332, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 342, 3, 28, 14, 0, 336, 338, 5, 35, 0, 0, 337, 339, 3, 32, 16, 0, 338, 337, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 342, 3, 28, 14, 0, 341, 331, 1, 0, 0, 0, 341, 336, 1, 0, 0, 0, 342, 53, 1, 0, 0, 0, 343, 344, 5, 1, 0, 0, 344, 348, 5, 120, 0, 0, 345, 347, 3, 10, 5, 0, 346, 345, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 351, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 351, 353, 5, 2, 0, 0, 352, 343, 1, 0, 0, 0, 353, 356, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 368, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 357, 358, 5, 1, 0, 0, 358, 362, 5, 121, 0, 0, 359, 361, 3, 10, 5, 0, 360, 359, 1, 0, 0, 0, 361, 364, 1, 0, 0, 0, 362, 360, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 365, 1, 0, 0, 0, 364, 362, 1, 0, 0, 0, 365, 367, 5, 2, 0, 0, 366, 357, 1, 0, 0, 0, 367, 370, 1, 0, 0, 0, 368, 366, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 55, 1, 0, 0, 0, 370, 368, 1, 0, 0, 0, 371, 372, 5, 1, 0, 0, 372, 376, 5, 120, 0, 0, 373, 375, 3, 10, 5, 0, 374, 373, 1, 0, 0, 0, 375, 378, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 379, 1, 0, 0, 0, 378, 376, 1, 0, 0, 0, 379, 381, 5, 2, 0, 0, 380, 371, 1, 0, 0, 0, 381, 384, 1, 0, 0, 0, 382, 380, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 385, 1, 0, 0, 0, 384, 382, 1, 0, 0, 0, 385, 386, 3, 58, 29, 0, 386, 57, 1, 0, 0, 0, 387, 388, 5, 1, 0, 0, 388, 392, 5, 121, 0, 0, 389, 391, 3, 10, 5, 0, 390, 389, 1, 0, 0, 0, 391, 394, 1, 0, 0, 0, 392, 390, 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 393, 395, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 395, 397, 5, 2, 0, 0, 396, 387, 1, 0, 0, 0, 397, 400, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 398, 399, 1, 0, 0, 0, 399, 401, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 401, 402, 3, 36, 18, 0, 402, 59, 1, 0, 0, 0, 403, 405, 5, 19, 0, 0, 404, 406, 3, 34, 17, 0, 405, 404, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 407, 1, 0, 0, 0, 407, 408, 3, 64, 32, 0, 408, 410, 5, 23, 0, 0, 409, 411, 3, 34, 17, 0, 410, 409, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 438, 1, 0, 0, 0, 412, 414, 5, 20, 0, 0, 413, 415, 3, 34, 17, 0, 414, 413, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 417, 3, 64, 32, 0, 417, 419, 5, 23, 0, 0, 418, 420, 3, 34, 17, 0, 419, 418, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 438, 1, 0, 0, 0, 421, 423, 5, 28, 0, 0, 422, 424, 3, 34, 17, 0, 423, 422, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 431, 3, 64, 32, 0, 426, 428, 5, 30, 0, 0, 427, 429, 3, 34, 17, 0, 428, 427, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 432, 3, 76, 38, 0, 431, 426, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 433, 435, 5, 23, 0, 0, 434, 436, 3, 34, 17, 0, 435, 434, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 438, 1, 0, 0, 0, 437, 403, 1, 0, 0, 0, 437, 412, 1, 0, 0, 0, 437, 421, 1, 0, 0, 0, 438, 61, 1, 0, 0, 0, 439, 440, 5, 1, 0, 0, 440, 441, 5, 121, 0, 0, 441, 442, 3, 10, 5, 0, 442, 443, 5, 2, 0, 0, 443, 445, 1, 0, 0, 0, 444, 439, 1, 0, 0, 0, 444, 445, 1, 0, 0, 0, 445, 451, 1, 0, 0, 0, 446, 447, 3, 28, 14, 0, 447, 448, 3, 22, 11, 0, 448, 451, 1, 0, 0, 0, 449, 451, 3, 22, 11, 0, 450, 444, 1, 0, 0, 0, 450, 446, 1, 0, 0, 0, 450, 449, 1, 0, 0, 0, 451, 63, 1, 0, 0, 0, 452, 453, 3, 62, 31, 0, 453, 454, 3, 76, 38, 0, 454, 65, 1, 0, 0, 0, 455, 456, 5, 1, 0, 0, 456, 457, 3, 68, 34, 0, 457, 458, 5, 2, 0, 0, 458, 67, 1, 0, 0, 0, 459, 463, 3, 40, 20, 0, 460, 462, 3, 68, 34, 0, 461, 460, 1, 0, 0, 0, 462, 465, 1, 0, 0, 0, 463, 461, 1, 0, 0, 0, 463, 464, 1, 0, 0, 0, 464, 502, 1, 0, 0, 0, 465, 463, 1, 0, 0, 0, 466, 467, 5, 33, 0, 0, 467, 502, 3, 70, 35, 0, 468, 469, 5, 35, 0, 0, 469, 502, 3, 70, 35, 0, 470, 472, 5, 19, 0, 0, 471, 473, 3, 34, 17, 0, 472, 471, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 474, 1, 0, 0, 0, 474, 502, 3, 64, 32, 0, 475, 477, 5, 20, 0, 0, 476, 478, 3, 34, 17, 0, 477, 476, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 502, 3, 64, 32, 0, 480, 482, 5, 28, 0, 0, 481, 483, 3, 34, 17, 0, 482, 481, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 488, 3, 62, 31, 0, 485, 487, 3, 66, 33, 0, 486, 485, 1, 0, 0, 0, 487, 490, 1, 0, 0, 0, 488, 486, 1, 0, 0, 0, 488, 489, 1, 0, 0, 0, 489, 491, 1, 0, 0, 0, 490, 488, 1, 0, 0, 0, 491, 492, 5, 1, 0, 0, 492, 493, 5, 29, 0, 0, 493, 499, 3, 76, 38, 0, 494, 495, 5, 1, 0, 0, 495, 496, 5, 30, 0, 0, 496, 497, 3, 76, 38, 0, 497, 498, 5, 2, 0, 0, 498, 500, 1, 0, 0, 0, 499, 494, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 502, 1, 0, 0, 0, 501, 459, 1, 0, 0, 0, 501, 466, 1, 0, 0, 0, 501, 468, 1, 0, 0, 0, 501, 470, 1, 0, 0, 0, 501, 475, 1, 0, 0, 0, 501, 480, 1, 0, 0, 0, 502, 69, 1, 0, 0, 0, 503, 505, 3, 28, 14, 0, 504, 503, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 507, 3, 72, 36, 0, 507, 71, 1, 0, 0, 0, 508, 509, 5, 1, 0, 0, 509, 513, 5, 120, 0, 0, 510, 512, 3, 10, 5, 0, 511, 510, 1, 0, 0, 0, 512, 515, 1, 0, 0, 0, 513, 511, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 514, 516, 1, 0, 0, 0, 515, 513, 1, 0, 0, 0, 516, 518, 5, 2, 0, 0, 517, 508, 1, 0, 0, 0, 518, 521, 1, 0, 0, 0, 519, 517, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 522, 1, 0, 0, 0, 521, 519, 1, 0, 0, 0, 522, 523, 3, 74, 37, 0, 523, 73, 1, 0, 0, 0, 524, 525, 5, 1, 0, 0, 525, 529, 5, 121, 0, 0, 526, 528, 3, 10, 5, 0, 527, 526, 1, 0, 0, 0, 528, 531, 1, 0, 0, 0, 529, 527, 1, 0, 0, 0, 529, 530, 1, 0, 0, 0, 530, 532, 1, 0, 0, 0, 531, 529, 1, 0, 0, 0, 532, 534, 5, 2, 0, 0, 533, 524, 1, 0, 0, 0, 534, 537, 1, 0, 0, 0, 535, 533, 1, 0, 0, 0, 535, 536, 1, 0, 0, 0, 536, 541, 1, 0, 0, 0, 537, 535, 1, 0, 0, 0, 538, 540, 3, 68, 34, 0, 539, 538, 1, 0, 0, 0, 540, 543, 1, 0, 0, 0, 541, 539, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 75, 1, 0, 0, 0, 543, 541, 1, 0, 0, 0, 544, 546, 3, 36, 18, 0, 545, 544, 1, 0, 0, 0, 546, 549, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, 551, 1, 0, 0, 0, 549, 547, 1, 0, 0, 0, 550, 552, 3, 52, 26, 0, 551, 550, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 77, 1, 0, 0, 0, 553, 554, 3, 76, 38, 0, 554, 79, 1, 0, 0, 0, 555, 556, 5, 1, 0, 0, 556, 558, 5, 117, 0, 0, 557, 559, 3, 34, 17, 0, 558, 557, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 560, 1, 0, 0, 0, 560, 561, 3, 82, 41, 0, 561, 562, 5, 2, 0, 0, 562, 81, 1, 0, 0, 0, 563, 565, 3, 28, 14, 0, 564, 563, 1, 0, 0, 0, 564, 565, 1, 0, 0, 0, 565, 566, 1, 0, 0, 0, 566, 577, 3, 84, 42, 0, 567, 569, 3, 110, 55, 0, 568, 570, 3, 28, 14, 0, 569, 568, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 571, 1, 0, 0, 0, 571, 572, 3, 22, 11, 0, 572, 577, 1, 0, 0, 0, 573, 574, 3, 116, 58, 0, 574, 575, 3, 82, 41, 0, 575, 577, 1, 0, 0, 0, 576, 564, 1, 0, 0, 0, 576, 567, 1, 0, 0, 0, 576, 573, 1, 0, 0, 0, 577, 83, 1, 0, 0, 0, 578, 579, 3, 22, 11, 0, 579, 580, 3, 86, 43, 0, 580, 85, 1, 0, 0, 0, 581, 582, 5, 1, 0, 0, 582, 592, 5, 122, 0, 0, 583, 585, 3, 10, 5, 0, 584, 583, 1, 0, 0, 0, 585, 588, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 593, 1, 0, 0, 0, 588, 586, 1, 0, 0, 0, 589, 590, 3, 34, 17, 0, 590, 591, 3, 10, 5, 0, 591, 593, 1, 0, 0, 0, 592, 586, 1, 0, 0, 0, 592, 589, 1, 0, 0, 0, 593, 594, 1, 0, 0, 0, 594, 596, 5, 2, 0, 0, 595, 581, 1, 0, 0, 0, 596, 599, 1, 0, 0, 0, 597, 595, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 600, 1, 0, 0, 0, 599, 597, 1, 0, 0, 0, 600, 601, 3, 76, 38, 0, 601, 87, 1, 0, 0, 0, 602, 603, 5, 1, 0, 0, 603, 604, 5, 128, 0, 0, 604, 605, 3, 78, 39, 0, 605, 606, 5, 2, 0, 0, 606, 609, 1, 0, 0, 0, 607, 609, 3, 68, 34, 0, 608, 602, 1, 0, 0, 0, 608, 607, 1, 0, 0, 0, 609, 89, 1, 0, 0, 0, 610, 611, 5, 1, 0, 0, 611, 613, 5, 126, 0, 0, 612, 614, 3, 32, 16, 0, 613, 612, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 616, 5, 1, 0, 0, 616, 617, 3, 36, 18, 0, 617, 621, 5, 2, 0, 0, 618, 620, 3, 32, 16, 0, 619, 618, 1, 0, 0, 0, 620, 623, 1, 0, 0, 0, 621, 619, 1, 0, 0, 0, 621, 622, 1, 0, 0, 0, 622, 624, 1, 0, 0, 0, 623, 621, 1, 0, 0, 0, 624, 625, 5, 2, 0, 0, 625, 641, 1, 0, 0, 0, 626, 627, 5, 1, 0, 0, 627, 629, 5, 126, 0, 0, 628, 630, 3, 32, 16, 0, 629, 628, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 635, 3, 88, 44, 0, 632, 634, 3, 32, 16, 0, 633, 632, 1, 0, 0, 0, 634, 637, 1, 0, 0, 0, 635, 633, 1, 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 638, 1, 0, 0, 0, 637, 635, 1, 0, 0, 0, 638, 639, 5, 2, 0, 0, 639, 641, 1, 0, 0, 0, 640, 610, 1, 0, 0, 0, 640, 626, 1, 0, 0, 0, 641, 91, 1, 0, 0, 0, 642, 643, 5, 1, 0, 0, 643, 645, 5, 124, 0, 0, 644, 646, 3, 34, 17, 0, 645, 644, 1, 0, 0, 0, 645, 646, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 648, 3, 94, 47, 0, 648, 649, 5, 2, 0, 0, 649, 93, 1, 0, 0, 0, 650, 669, 3, 24, 12, 0, 651, 652, 3, 110, 55, 0, 652, 653, 3, 24, 12, 0, 653, 669, 1, 0, 0, 0, 654, 655, 3, 116, 58, 0, 655, 656, 3, 94, 47, 0, 656, 669, 1, 0, 0, 0, 657, 658, 3, 6, 3, 0, 658, 659, 5, 1, 0, 0, 659, 663, 5, 126, 0, 0, 660, 662, 3, 32, 16, 0, 661, 660, 1, 0, 0, 0, 662, 665, 1, 0, 0, 0, 663, 661, 1, 0, 0, 0, 663, 664, 1, 0, 0, 0, 664, 666, 1, 0, 0, 0, 665, 663, 1, 0, 0, 0, 666, 667, 5, 2, 0, 0, 667, 669, 1, 0, 0, 0, 668, 650, 1, 0, 0, 0, 668, 651, 1, 0, 0, 0, 668, 654, 1, 0, 0, 0, 668, 657, 1, 0, 0, 0, 669, 95, 1, 0, 0, 0, 670, 671, 5, 1, 0, 0, 671, 673, 5, 127, 0, 0, 672, 674, 3, 32, 16, 0, 673, 672, 1, 0, 0, 0, 673, 674, 1, 0, 0, 0, 674, 675, 1, 0, 0, 0, 675, 676, 5, 1, 0, 0, 676, 677, 3, 36, 18, 0, 677, 681, 5, 2, 0, 0, 678, 680, 5, 6, 0, 0, 679, 678, 1, 0, 0, 0, 680, 683, 1, 0, 0, 0, 681, 679, 1, 0, 0, 0, 681, 682, 1, 0, 0, 0, 682, 684, 1, 0, 0, 0, 683, 681, 1, 0, 0, 0, 684, 685, 5, 2, 0, 0, 685, 701, 1, 0, 0, 0, 686, 687, 5, 1, 0, 0, 687, 689, 5, 127, 0, 0, 688, 690, 3, 32, 16, 0, 689, 688, 1, 0, 0, 0, 689, 690, 1, 0, 0, 0, 690, 691, 1, 0, 0, 0, 691, 695, 3, 88, 44, 0, 692, 694, 5, 6, 0, 0, 693, 692, 1, 0, 0, 0, 694, 697, 1, 0, 0, 0, 695, 693, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 698, 1, 0, 0, 0, 697, 695, 1, 0, 0, 0, 698, 699, 5, 2, 0, 0, 699, 701, 1, 0, 0, 0, 700, 670, 1, 0, 0, 0, 700, 686, 1, 0, 0, 0, 701, 97, 1, 0, 0, 0, 702, 703, 5, 1, 0, 0, 703, 705, 5, 125, 0, 0, 704, 706, 3, 34, 17, 0, 705, 704, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 707, 1, 0, 0, 0, 707, 708, 3, 100, 50, 0, 708, 709, 5, 2, 0, 0, 709, 99, 1, 0, 0, 0, 710, 727, 3, 26, 13, 0, 711, 712, 3, 110, 55, 0, 712, 713, 3, 26, 13, 0, 713, 727, 1, 0, 0, 0, 714, 715, 3, 116, 58, 0, 715, 716, 3, 100, 50, 0, 716, 727, 1, 0, 0, 0, 717, 718, 5, 1, 0, 0, 718, 722, 5, 127, 0, 0, 719, 721, 5, 6, 0, 0, 720, 719, 1, 0, 0, 0, 721, 724, 1, 0, 0, 0, 722, 720, 1, 0, 0, 0, 722, 723, 1, 0, 0, 0, 723, 725, 1, 0, 0, 0, 724, 722, 1, 0, 0, 0, 725, 727, 5, 2, 0, 0, 726, 710, 1, 0, 0, 0, 726, 711, 1, 0, 0, 0, 726, 714, 1, 0, 0, 0, 726, 717, 1, 0, 0, 0, 727, 101, 1, 0, 0, 0, 728, 729, 5, 1, 0, 0, 729, 731, 5, 123, 0, 0, 730, 732, 3, 34, 17, 0, 731, 730, 1, 0, 0, 0, 731, 732, 1, 0, 0, 0, 732, 733, 1, 0, 0, 0, 733, 734, 3, 104, 52, 0, 734, 735, 5, 2, 0, 0, 735, 103, 1, 0, 0, 0, 736, 737, 3, 14, 7, 0, 737, 738, 3, 78, 39, 0, 738, 746, 1, 0, 0, 0, 739, 740, 3, 110, 55, 0, 740, 741, 3, 14, 7, 0, 741, 746, 1, 0, 0, 0, 742, 743, 3, 116, 58, 0, 743, 744, 3, 104, 52, 0, 744, 746, 1, 0, 0, 0, 745, 736, 1, 0, 0, 0, 745, 739, 1, 0, 0, 0, 745, 742, 1, 0, 0, 0, 746, 105, 1, 0, 0, 0, 747, 748, 5, 1, 0, 0, 748, 750, 5, 117, 0, 0, 749, 751, 3, 34, 17, 0, 750, 749, 1, 0, 0, 0, 750, 751, 1, 0, 0, 0, 751, 752, 1, 0, 0, 0, 752, 753, 3, 28, 14, 0, 753, 754, 5, 2, 0, 0, 754, 788, 1, 0, 0, 0, 755, 756, 5, 1, 0, 0, 756, 758, 5, 117, 0, 0, 757, 759, 3, 34, 17, 0, 758, 757, 1, 0, 0, 0, 758, 759, 1, 0, 0, 0, 759, 760, 1, 0, 0, 0, 760, 761, 3, 22, 11, 0, 761, 762, 5, 2, 0, 0, 762, 788, 1, 0, 0, 0, 763, 764, 5, 1, 0, 0, 764, 766, 5, 124, 0, 0, 765, 767, 3, 34, 17, 0, 766, 765, 1, 0, 0, 0, 766, 767, 1, 0, 0, 0, 767, 768, 1, 0, 0, 0, 768, 769, 3, 24, 12, 0, 769, 770, 5, 2, 0, 0, 770, 788, 1, 0, 0, 0, 771, 772, 5, 1, 0, 0, 772, 774, 5, 125, 0, 0, 773, 775, 3, 34, 17, 0, 774, 773, 1, 0, 0, 0, 774, 775, 1, 0, 0, 0, 775, 776, 1, 0, 0, 0, 776, 777, 3, 26, 13, 0, 777, 778, 5, 2, 0, 0, 778, 788, 1, 0, 0, 0, 779, 780, 5, 1, 0, 0, 780, 782, 5, 123, 0, 0, 781, 783, 3, 34, 17, 0, 782, 781, 1, 0, 0, 0, 782, 783, 1, 0, 0, 0, 783, 784, 1, 0, 0, 0, 784, 785, 3, 14, 7, 0, 785, 786, 5, 2, 0, 0, 786, 788, 1, 0, 0, 0, 787, 747, 1, 0, 0, 0, 787, 755, 1, 0, 0, 0, 787, 763, 1, 0, 0, 0, 787, 771, 1, 0, 0, 0, 787, 779, 1, 0, 0, 0, 788, 107, 1, 0, 0, 0, 789, 790, 5, 1, 0, 0, 790, 791, 5, 129, 0, 0, 791, 792, 3, 2, 1, 0, 792, 793, 3, 2, 1, 0, 793, 794, 3, 106, 53, 0, 794, 795, 5, 2, 0, 0, 795, 109, 1, 0, 0, 0, 796, 797, 5, 1, 0, 0, 797, 798, 5, 129, 0, 0, 798, 799, 3, 2, 1, 0, 799, 800, 3, 2, 1, 0, 800, 801, 5, 2, 0, 0, 801, 111, 1, 0, 0, 0, 802, 803, 5, 1, 0, 0, 803, 804, 5, 117, 0, 0, 804, 805, 3, 32, 16, 0, 805, 806, 5, 2, 0, 0, 806, 823, 1, 0, 0, 0, 807, 808, 5, 1, 0, 0, 808, 809, 5, 124, 0, 0, 809, 810, 3, 32, 16, 0, 810, 811, 5, 2, 0, 0, 811, 823, 1, 0, 0, 0, 812, 813, 5, 1, 0, 0, 813, 814, 5, 125, 0, 0, 814, 815, 3, 32, 16, 0, 815, 816, 5, 2, 0, 0, 816, 823, 1, 0, 0, 0, 817, 818, 5, 1, 0, 0, 818, 819, 5, 123, 0, 0, 819, 820, 3, 32, 16, 0, 820, 821, 5, 2, 0, 0, 821, 823, 1, 0, 0, 0, 822, 802, 1, 0, 0, 0, 822, 807, 1, 0, 0, 0, 822, 812, 1, 0, 0, 0, 822, 817, 1, 0, 0, 0, 823, 113, 1, 0, 0, 0, 824, 825, 5, 1, 0, 0, 825, 826, 5, 130, 0, 0, 826, 827, 3, 2, 1, 0, 827, 828, 3, 112, 56, 0, 828, 829, 5, 2, 0, 0, 829, 115, 1, 0, 0, 0, 830, 831, 5, 1, 0, 0, 831, 832, 5, 130, 0, 0, 832, 833, 3, 2, 1, 0, 833, 834, 5, 2, 0, 0, 834, 117, 1, 0, 0, 0, 835, 836, 5, 1, 0, 0, 836, 838, 5, 116, 0, 0, 837, 839, 3, 34, 17, 0, 838, 837, 1, 0, 0, 0, 838, 839, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 841, 3, 16, 8, 0, 841, 842, 5, 2, 0, 0, 842, 119, 1, 0, 0, 0, 843, 844, 5, 1, 0, 0, 844, 845, 5, 119, 0, 0, 845, 846, 3, 32, 16, 0, 846, 847, 5, 2, 0, 0, 847, 121, 1, 0, 0, 0, 848, 859, 3, 118, 59, 0, 849, 859, 3, 102, 51, 0, 850, 859, 3, 92, 46, 0, 851, 859, 3, 98, 49, 0, 852, 859, 3, 80, 40, 0, 853, 859, 3, 90, 45, 0, 854, 859, 3, 96, 48, 0, 855, 859, 3, 120, 60, 0, 856, 859, 3, 108, 54, 0, 857, 859, 3, 114, 57, 0, 858, 848, 1, 0, 0, 0, 858, 849, 1, 0, 0, 0, 858, 850, 1, 0, 0, 0, 858, 851, 1, 0, 0, 0, 858, 852, 1, 0, 0, 0, 858, 853, 1, 0, 0, 0, 858, 854, 1, 0, 0, 0, 858, 855, 1, 0, 0, 0, 858, 856, 1, 0, 0, 0, 858, 857, 1, 0, 0, 0, 859, 123, 1, 0, 0, 0, 860, 861, 5, 1, 0, 0, 861, 863, 5, 131, 0, 0, 862, 864, 5, 148, 0, 0, 863, 862, 1, 0, 0, 0, 863, 864, 1, 0, 0, 0, 864, 868, 1, 0, 0, 0, 865, 867, 3, 122, 61, 0, 866, 865, 1, 0, 0, 0, 867, 870, 1, 0, 0, 0, 868, 866, 1, 0, 0, 0, 868, 869, 1, 0, 0, 0, 869, 871, 1, 0, 0, 0, 870, 868, 1, 0, 0, 0, 871, 872, 5, 2, 0, 0, 872, 125, 1, 0, 0, 0, 873, 888, 3, 124, 62, 0, 874, 875, 5, 1, 0, 0, 875, 877, 5, 131, 0, 0, 876, 878, 5, 148, 0, 0, 877, 876, 1, 0, 0, 0, 877, 878, 1, 0, 0, 0, 878, 879, 1, 0, 0, 0, 879, 883, 7, 5, 0, 0, 880, 882, 5, 6, 0, 0, 881, 880, 1, 0, 0, 0, 882, 885, 1, 0, 0, 0, 883, 881, 1, 0, 0, 0, 883, 884, 1, 0, 0, 0, 884, 886, 1, 0, 0, 0, 885, 883, 1, 0, 0, 0, 886, 888, 5, 2, 0, 0, 887, 873, 1, 0, 0, 0, 887, 874, 1, 0, 0, 0, 888, 127, 1, 0, 0, 0, 889, 890, 5, 1, 0, 0, 890, 892, 5, 136, 0, 0, 891, 893, 5, 148, 0, 0, 892, 891, 1, 0, 0, 0, 892, 893, 1, 0, 0, 0, 893, 894, 1, 0, 0, 0, 894, 895, 3, 2, 1, 0, 895, 896, 3, 138, 69, 0, 896, 897, 5, 2, 0, 0, 897, 907, 1, 0, 0, 0, 898, 899, 5, 1, 0, 0, 899, 901, 5, 137, 0, 0, 900, 902, 5, 148, 0, 0, 901, 900, 1, 0, 0, 0, 901, 902, 1, 0, 0, 0, 902, 903, 1, 0, 0, 0, 903, 904, 3, 2, 1, 0, 904, 905, 5, 2, 0, 0, 905, 907, 1, 0, 0, 0, 906, 889, 1, 0, 0, 0, 906, 898, 1, 0, 0, 0, 907, 129, 1, 0, 0, 0, 908, 909, 5, 1, 0, 0, 909, 910, 5, 138, 0, 0, 910, 911, 3, 126, 63, 0, 911, 912, 5, 6, 0, 0, 912, 913, 5, 2, 0, 0, 913, 961, 1, 0, 0, 0, 914, 915, 5, 1, 0, 0, 915, 916, 5, 139, 0, 0, 916, 917, 3, 126, 63, 0, 917, 918, 5, 6, 0, 0, 918, 919, 5, 2, 0, 0, 919, 961, 1, 0, 0, 0, 920, 921, 5, 1, 0, 0, 921, 922, 5, 140, 0, 0, 922, 923, 3, 126, 63, 0, 923, 924, 5, 6, 0, 0, 924, 925, 5, 2, 0, 0, 925, 961, 1, 0, 0, 0, 926, 927, 5, 1, 0, 0, 927, 928, 5, 144, 0, 0, 928, 929, 3, 126, 63, 0, 929, 930, 5, 6, 0, 0, 930, 931, 5, 2, 0, 0, 931, 961, 1, 0, 0, 0, 932, 933, 5, 1, 0, 0, 933, 934, 5, 141, 0, 0, 934, 935, 3, 128, 64, 0, 935, 936, 3, 138, 69, 0, 936, 937, 5, 2, 0, 0, 937, 961, 1, 0, 0, 0, 938, 939, 5, 1, 0, 0, 939, 940, 5, 142, 0, 0, 940, 941, 3, 128, 64, 0, 941, 942, 5, 2, 0, 0, 942, 961, 1, 0, 0, 0, 943, 944, 5, 1, 0, 0, 944, 945, 5, 143, 0, 0, 945, 946, 3, 128, 64, 0, 946, 947, 5, 2, 0, 0, 947, 961, 1, 0, 0, 0, 948, 949, 5, 1, 0, 0, 949, 950, 5, 144, 0, 0, 950, 951, 3, 128, 64, 0, 951, 952, 5, 6, 0, 0, 952, 953, 5, 2, 0, 0, 953, 961, 1, 0, 0, 0, 954, 955, 5, 1, 0, 0, 955, 956, 5, 145, 0, 0, 956, 957, 3, 128, 64, 0, 957, 958, 5, 6, 0, 0, 958, 959, 5, 2, 0, 0, 959, 961, 1, 0, 0, 0, 960, 908, 1, 0, 0, 0, 960, 914, 1, 0, 0, 0, 960, 920, 1, 0, 0, 0, 960, 926, 1, 0, 0, 0, 960, 932, 1, 0, 0, 0, 960, 938, 1, 0, 0, 0, 960, 943, 1, 0, 0, 0, 960, 948, 1, 0, 0, 0, 960, 954, 1, 0, 0, 0, 961, 131, 1, 0, 0, 0, 962, 975, 3, 128, 64, 0, 963, 975, 3, 130, 65, 0, 964, 975, 3, 126, 63, 0, 965, 966, 5, 1, 0, 0, 966, 967, 5, 135, 0, 0, 967, 969, 3, 2, 1, 0, 968, 970, 5, 148, 0, 0, 969, 968, 1, 0, 0, 0, 969, 970, 1, 0, 0, 0, 970, 971, 1, 0, 0, 0, 971, 972, 5, 2, 0, 0, 972, 975, 1, 0, 0, 0, 973, 975, 3, 134, 67, 0, 974, 962, 1, 0, 0, 0, 974, 963, 1, 0, 0, 0, 974, 964, 1, 0, 0, 0, 974, 965, 1, 0, 0, 0, 974, 973, 1, 0, 0, 0, 975, 133, 1, 0, 0, 0, 976, 977, 5, 1, 0, 0, 977, 979, 5, 134, 0, 0, 978, 980, 5, 148, 0, 0, 979, 978, 1, 0, 0, 0, 979, 980, 1, 0, 0, 0, 980, 984, 1, 0, 0, 0, 981, 983, 3, 132, 66, 0, 982, 981, 1, 0, 0, 0, 983, 986, 1, 0, 0, 0, 984, 982, 1, 0, 0, 0, 984, 985, 1, 0, 0, 0, 985, 987, 1, 0, 0, 0, 986, 984, 1, 0, 0, 0, 987, 1009, 5, 2, 0, 0, 988, 989, 5, 1, 0, 0, 989, 991, 5, 146, 0, 0, 990, 992, 5, 148, 0, 0, 991, 990, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 994, 5, 6, 0, 0, 994, 1009, 5, 2, 0, 0, 995, 996, 5, 1, 0, 0, 996, 998, 5, 147, 0, 0, 997, 999, 5, 148, 0, 0, 998, 997, 1, 0, 0, 0, 998, 999, 1, 0, 0, 0, 999, 1000, 1, 0, 0, 0, 1000, 1001, 5, 6, 0, 0, 1001, 1009, 5, 2, 0, 0, 1002, 1003, 5, 1, 0, 0, 1003, 1005, 5, 147, 0, 0, 1004, 1006, 5, 148, 0, 0, 1005, 1004, 1, 0, 0, 0, 1005, 1006, 1, 0, 0, 0, 1006, 1007, 1, 0, 0, 0, 1007, 1009, 5, 2, 0, 0, 1008, 976, 1, 0, 0, 0, 1008, 988, 1, 0, 0, 0, 1008, 995, 1, 0, 0, 0, 1008, 1002, 1, 0, 0, 0, 1009, 135, 1, 0, 0, 0, 1010, 1011, 5, 1, 0, 0, 1011, 1012, 5, 8, 0, 0, 1012, 1013, 3, 30, 15, 0, 1013, 1014, 5, 2, 0, 0, 1014, 137, 1, 0, 0, 0, 1015, 1017, 3, 136, 68, 0, 1016, 1015, 1, 0, 0, 0, 1017, 1020, 1, 0, 0, 0, 1018, 1016, 1, 0, 0, 0, 1018, 1019, 1, 0, 0, 0, 1019, 139, 1, 0, 0, 0, 1020, 1018, 1, 0, 0, 0, 1021, 1023, 3, 132, 66, 0, 1022, 1021, 1, 0, 0, 0, 1023, 1026, 1, 0, 0, 0, 1024, 1022, 1, 0, 0, 0, 1024, 1025, 1, 0, 0, 0, 1025, 1027, 1, 0, 0, 0, 1026, 1024, 1, 0, 0, 0, 1027, 1036, 5, 0, 0, 1, 1028, 1030, 3, 122, 61, 0, 1029, 1028, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 1029, 1, 0, 0, 0, 1031, 1032, 1, 0, 0, 0, 1032, 1033, 1, 0, 0, 0, 1033, 1034, 5, 0, 0, 1, 1034, 1036, 1, 0, 0, 0, 1035, 1024, 1, 0, 0, 0, 1035, 1029, 1, 0, 0, 0, 1036, 141, 1, 0, 0, 0, 1037, 1038, 3, 124, 62, 0, 1038, 1039, 5, 0, 0, 1, 1039, 1048, 1, 0, 0, 0, 1040, 1042, 3, 122, 61, 0, 1041, 1040, 1, 0, 0, 0, 1042, 1045, 1, 0, 0, 0, 1043, 1041, 1, 0, 0, 0, 1043, 1044, 1, 0, 0, 0, 1044, 1046, 1, 0, 0, 0, 1045, 1043, 1, 0, 0, 0, 1046, 1048, 5, 0, 0, 1, 1047, 1037, 1, 0, 0, 0, 1047, 1043, 1, 0, 0, 0, 1048, 143, 1, 0, 0, 0, 113, 157, 167, 179, 185, 190, 198, 204, 212, 218, 235, 259, 278, 281, 285, 288, 308, 321, 326, 333, 338, 341, 348, 354, 362, 368, 376, 382, 392, 398, 405, 410, 414, 419, 423, 428, 431, 435, 437, 444, 450, 463, 472, 477, 482, 488, 499, 501, 504, 513, 519, 529, 535, 541, 547, 551, 558, 564, 569, 576, 586, 592, 597, 608, 613, 621, 629, 635, 640, 645, 663, 668, 673, 681, 689, 695, 700, 705, 722, 726, 731, 745, 750, 758, 766, 774, 782, 787, 822, 838, 858, 863, 868, 877, 883, 887, 892, 901, 906, 960, 969, 974, 979, 984, 991, 998, 1005, 1008, 1018, 1024, 1031, 1035, 1043, 1047] \ No newline at end of file diff --git a/grammar/WatParser.java b/grammar/WatParser.java deleted file mode 100644 index 7f6d0c049..000000000 --- a/grammar/WatParser.java +++ /dev/null @@ -1,7314 +0,0 @@ -// Generated from WatParser.g4 by ANTLR 4.13.2 -import org.antlr.v4.runtime.atn.*; -import org.antlr.v4.runtime.dfa.DFA; -import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.misc.*; -import org.antlr.v4.runtime.tree.*; -import java.util.List; -import java.util.Iterator; -import java.util.ArrayList; - -@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) -public class WatParser extends Parser { - static { RuntimeMetaData.checkVersion("4.13.2", RuntimeMetaData.VERSION); } - - protected static final DFA[] _decisionToDFA; - protected static final PredictionContextCache _sharedContextCache = - new PredictionContextCache(); - public static final int - LPAR=1, RPAR=2, NAT=3, INT=4, FLOAT=5, STRING_=6, VALUE_TYPE=7, CONST=8, - SYMBOLIC=9, FUNCREF=10, EXTERNREF=11, MUT=12, NOP=13, SYM_ASSERT=14, ALLOC=15, - FREE=16, UNREACHABLE=17, DROP=18, BLOCK=19, LOOP=20, FOR=21, VBAR=22, - END=23, BR=24, BR_IF=25, BR_TABLE=26, RETURN=27, IF=28, THEN=29, ELSE=30, - SELECT=31, CALL=32, CALL_INDIRECT=33, RETURN_CALL=34, RETURN_CALL_INDIRECT=35, - LOCAL_GET=36, LOCAL_SET=37, LOCAL_TEE=38, GLOBAL_GET=39, GLOBAL_SET=40, - LOAD=41, STORE=42, UNDERSCORE=43, OFFSET_EQ=44, ALIGN_EQ=45, SIGN_POSTFIX=46, - MEM_SIZE=47, I32=48, I64=49, F32=50, F64=51, IXX=52, FXX=53, OP_EQZ=54, - OP_EQ=55, OP_NE=56, OP_LT=57, OP_LTS=58, OP_LTU=59, OP_LE=60, OP_LES=61, - OP_LEU=62, OP_GT=63, OP_GTS=64, OP_GTU=65, OP_GE=66, OP_GES=67, OP_GEU=68, - OP_CLZ=69, OP_CTZ=70, OP_POPCNT=71, OP_NEG=72, OP_ABS=73, OP_SQRT=74, - OP_CEIL=75, OP_FLOOR=76, OP_TRUNC=77, OP_NEAREST=78, OP_ADD=79, OP_SUB=80, - OP_MUL=81, OP_DIV=82, OP_DIV_S=83, OP_DIV_U=84, OP_REM_S=85, OP_REM_U=86, - OP_AND=87, OP_OR=88, OP_XOR=89, OP_SHL=90, OP_SHR_S=91, OP_SHR_U=92, OP_ROTL=93, - OP_ROTR=94, OP_MIN=95, OP_MAX=96, OP_COPYSIGN=97, OP_WRAP=98, OP_TRUNC_=99, - OP_TRUNC_SAT=100, OP_CONVERT=101, OP_EXTEND=102, OP_DEMOTE=103, OP_PROMOTE=104, - OP_REINTER=105, MEMORY_SIZE=106, MEMORY_GROW=107, MEMORY_FILL=108, MEMORY_COPY=109, - MEMORY_INIT=110, TEST=111, COMPARE=112, UNARY=113, BINARY=114, CONVERT=115, - TYPE=116, FUNC=117, EXTERN=118, START_=119, PARAM=120, RESULT=121, LOCAL=122, - GLOBAL=123, TABLE=124, MEMORY=125, ELEM=126, DATA=127, OFFSET=128, IMPORT=129, - EXPORT=130, MODULE=131, BIN=132, QUOTE=133, SCRIPT=134, REGISTER=135, - INVOKE=136, GET=137, ASSERT_MALFORMED=138, ASSERT_INVALID=139, ASSERT_UNLINKABLE=140, - ASSERT_RETURN=141, ASSERT_RETURN_CANONICAL_NAN=142, ASSERT_RETURN_ARITHMETIC_NAN=143, - ASSERT_TRAP=144, ASSERT_EXHAUSTION=145, INPUT=146, OUTPUT=147, VAR=148, - V128=149, SPACE=150, COMMENT=151; - public static final int - RULE_value = 0, RULE_name = 1, RULE_numType = 2, RULE_refType = 3, RULE_vecType = 4, - RULE_valType = 5, RULE_heapType = 6, RULE_globalType = 7, RULE_defType = 8, - RULE_funcParamType = 9, RULE_funcResType = 10, RULE_funcType = 11, RULE_tableType = 12, - RULE_memoryType = 13, RULE_typeUse = 14, RULE_literal = 15, RULE_idx = 16, - RULE_bindVar = 17, RULE_instr = 18, RULE_forLoop = 19, RULE_plainInstr = 20, - RULE_offsetEq = 21, RULE_alignEq = 22, RULE_load = 23, RULE_store = 24, - RULE_selectInstr = 25, RULE_callIndirectInstr = 26, RULE_callInstrParams = 27, - RULE_callInstrParamsInstr = 28, RULE_callInstrResultsInstr = 29, RULE_blockInstr = 30, - RULE_blockType = 31, RULE_block = 32, RULE_foldedInstr = 33, RULE_expr = 34, - RULE_callExprType = 35, RULE_callExprParams = 36, RULE_callExprResults = 37, - RULE_instrList = 38, RULE_constExpr = 39, RULE_function = 40, RULE_funcFields = 41, - RULE_funcFieldsBody = 42, RULE_funcBody = 43, RULE_offset = 44, RULE_elem = 45, - RULE_table = 46, RULE_tableField = 47, RULE_data = 48, RULE_memory = 49, - RULE_memoryField = 50, RULE_global = 51, RULE_globalField = 52, RULE_importDesc = 53, - RULE_simport = 54, RULE_inlineImport = 55, RULE_exportDesc = 56, RULE_export_ = 57, - RULE_inlineExport = 58, RULE_typeDef = 59, RULE_start_ = 60, RULE_moduleField = 61, - RULE_module_ = 62, RULE_scriptModule = 63, RULE_action_ = 64, RULE_assertion = 65, - RULE_cmd = 66, RULE_meta = 67, RULE_wconst = 68, RULE_constList = 69, - RULE_script = 70, RULE_module = 71; - private static String[] makeRuleNames() { - return new String[] { - "value", "name", "numType", "refType", "vecType", "valType", "heapType", - "globalType", "defType", "funcParamType", "funcResType", "funcType", - "tableType", "memoryType", "typeUse", "literal", "idx", "bindVar", "instr", - "forLoop", "plainInstr", "offsetEq", "alignEq", "load", "store", "selectInstr", - "callIndirectInstr", "callInstrParams", "callInstrParamsInstr", "callInstrResultsInstr", - "blockInstr", "blockType", "block", "foldedInstr", "expr", "callExprType", - "callExprParams", "callExprResults", "instrList", "constExpr", "function", - "funcFields", "funcFieldsBody", "funcBody", "offset", "elem", "table", - "tableField", "data", "memory", "memoryField", "global", "globalField", - "importDesc", "simport", "inlineImport", "exportDesc", "export_", "inlineExport", - "typeDef", "start_", "moduleField", "module_", "scriptModule", "action_", - "assertion", "cmd", "meta", "wconst", "constList", "script", "module" - }; - } - public static final String[] ruleNames = makeRuleNames(); - - private static String[] makeLiteralNames() { - return new String[] { - null, "'('", "')'", null, null, null, null, null, null, null, "'funcref'", - "'externref'", "'mut'", "'nop'", "'sym_assert'", "'alloc'", "'free'", - "'unreachable'", "'drop'", "'block'", "'loop'", "'for'", "'|'", "'end'", - "'br'", "'br_if'", "'br_table'", "'return'", "'if'", "'then'", "'else'", - "'.select'", "'call'", "'call_indirect'", "'return_call'", "'return_call_indirect'", - "'local.get'", "'local.set'", "'local.tee'", "'global.get'", "'global.set'", - null, null, "'_'", "'offset='", "'align='", null, null, "'i32'", "'i64'", - "'f32'", "'f64'", null, null, "'.eqz'", "'.eq'", "'.ne'", "'.lt'", "'.lt_s'", - "'.lt_u'", "'.le'", "'.le_s'", "'.le_u'", "'.gt'", "'.gt_s'", "'.gt_u'", - "'.ge'", "'.ge_s'", "'.ge_u'", "'.clz'", "'.ctz'", "'.popcnt'", "'.neg'", - "'.abs'", "'.sqrt'", "'.ceil'", "'.floor'", "'.trunc'", "'.nearest'", - "'.add'", "'.sub'", "'.mul'", "'.div'", "'.div_s'", "'.div_u'", "'.rem_s'", - "'.rem_u'", "'.and'", "'.or'", "'.xor'", "'.shl'", "'.shr_s'", "'.shr_u'", - "'.rotl'", "'.rotr'", "'.min'", "'.max'", "'.copysign'", "'.wrap_'", - "'.trunc_'", "'.trunc_sat_'", "'.convert_'", "'.extend_'", "'.demote_'", - "'.promote_'", "'.reinterpret_'", "'memory.size'", "'memory.grow'", "'memory.fill'", - "'memory.copy'", "'memory.init'", null, null, null, null, null, "'type'", - "'func'", "'extern'", "'start'", "'param'", "'result'", "'local'", "'global'", - "'table'", "'memory'", "'elem'", "'data'", "'offset'", "'import'", "'export'", - "'module'", "'binary'", "'quote'", "'script'", "'register'", "'invoke'", - "'get'", "'assert_malformed'", "'assert_invalid'", "'assert_unlinkable'", - "'assert_return'", "'assert_return_canonical_nan'", "'assert_return_arithmetic_nan'", - "'assert_trap'", "'assert_exhaustion'", "'input'", "'output'", null, - "'v128'" - }; - } - private static final String[] _LITERAL_NAMES = makeLiteralNames(); - private static String[] makeSymbolicNames() { - return new String[] { - null, "LPAR", "RPAR", "NAT", "INT", "FLOAT", "STRING_", "VALUE_TYPE", - "CONST", "SYMBOLIC", "FUNCREF", "EXTERNREF", "MUT", "NOP", "SYM_ASSERT", - "ALLOC", "FREE", "UNREACHABLE", "DROP", "BLOCK", "LOOP", "FOR", "VBAR", - "END", "BR", "BR_IF", "BR_TABLE", "RETURN", "IF", "THEN", "ELSE", "SELECT", - "CALL", "CALL_INDIRECT", "RETURN_CALL", "RETURN_CALL_INDIRECT", "LOCAL_GET", - "LOCAL_SET", "LOCAL_TEE", "GLOBAL_GET", "GLOBAL_SET", "LOAD", "STORE", - "UNDERSCORE", "OFFSET_EQ", "ALIGN_EQ", "SIGN_POSTFIX", "MEM_SIZE", "I32", - "I64", "F32", "F64", "IXX", "FXX", "OP_EQZ", "OP_EQ", "OP_NE", "OP_LT", - "OP_LTS", "OP_LTU", "OP_LE", "OP_LES", "OP_LEU", "OP_GT", "OP_GTS", "OP_GTU", - "OP_GE", "OP_GES", "OP_GEU", "OP_CLZ", "OP_CTZ", "OP_POPCNT", "OP_NEG", - "OP_ABS", "OP_SQRT", "OP_CEIL", "OP_FLOOR", "OP_TRUNC", "OP_NEAREST", - "OP_ADD", "OP_SUB", "OP_MUL", "OP_DIV", "OP_DIV_S", "OP_DIV_U", "OP_REM_S", - "OP_REM_U", "OP_AND", "OP_OR", "OP_XOR", "OP_SHL", "OP_SHR_S", "OP_SHR_U", - "OP_ROTL", "OP_ROTR", "OP_MIN", "OP_MAX", "OP_COPYSIGN", "OP_WRAP", "OP_TRUNC_", - "OP_TRUNC_SAT", "OP_CONVERT", "OP_EXTEND", "OP_DEMOTE", "OP_PROMOTE", - "OP_REINTER", "MEMORY_SIZE", "MEMORY_GROW", "MEMORY_FILL", "MEMORY_COPY", - "MEMORY_INIT", "TEST", "COMPARE", "UNARY", "BINARY", "CONVERT", "TYPE", - "FUNC", "EXTERN", "START_", "PARAM", "RESULT", "LOCAL", "GLOBAL", "TABLE", - "MEMORY", "ELEM", "DATA", "OFFSET", "IMPORT", "EXPORT", "MODULE", "BIN", - "QUOTE", "SCRIPT", "REGISTER", "INVOKE", "GET", "ASSERT_MALFORMED", "ASSERT_INVALID", - "ASSERT_UNLINKABLE", "ASSERT_RETURN", "ASSERT_RETURN_CANONICAL_NAN", - "ASSERT_RETURN_ARITHMETIC_NAN", "ASSERT_TRAP", "ASSERT_EXHAUSTION", "INPUT", - "OUTPUT", "VAR", "V128", "SPACE", "COMMENT" - }; - } - private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); - public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); - - /** - * @deprecated Use {@link #VOCABULARY} instead. - */ - @Deprecated - public static final String[] tokenNames; - static { - tokenNames = new String[_SYMBOLIC_NAMES.length]; - for (int i = 0; i < tokenNames.length; i++) { - tokenNames[i] = VOCABULARY.getLiteralName(i); - if (tokenNames[i] == null) { - tokenNames[i] = VOCABULARY.getSymbolicName(i); - } - - if (tokenNames[i] == null) { - tokenNames[i] = ""; - } - } - } - - @Override - @Deprecated - public String[] getTokenNames() { - return tokenNames; - } - - @Override - - public Vocabulary getVocabulary() { - return VOCABULARY; - } - - @Override - public String getGrammarFileName() { return "WatParser.g4"; } - - @Override - public String[] getRuleNames() { return ruleNames; } - - @Override - public String getSerializedATN() { return _serializedATN; } - - @Override - public ATN getATN() { return _ATN; } - - public WatParser(TokenStream input) { - super(input); - _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); - } - - @SuppressWarnings("CheckReturnValue") - public static class ValueContext extends ParserRuleContext { - public TerminalNode INT() { return getToken(WatParser.INT, 0); } - public TerminalNode FLOAT() { return getToken(WatParser.FLOAT, 0); } - public ValueContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_value; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterValue(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitValue(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitValue(this); - else return visitor.visitChildren(this); - } - } - - public final ValueContext value() throws RecognitionException { - ValueContext _localctx = new ValueContext(_ctx, getState()); - enterRule(_localctx, 0, RULE_value); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(144); - _la = _input.LA(1); - if ( !(_la==INT || _la==FLOAT) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class NameContext extends ParserRuleContext { - public TerminalNode STRING_() { return getToken(WatParser.STRING_, 0); } - public NameContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_name; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterName(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitName(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitName(this); - else return visitor.visitChildren(this); - } - } - - public final NameContext name() throws RecognitionException { - NameContext _localctx = new NameContext(_ctx, getState()); - enterRule(_localctx, 2, RULE_name); - try { - enterOuterAlt(_localctx, 1); - { - setState(146); - match(STRING_); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class NumTypeContext extends ParserRuleContext { - public TerminalNode VALUE_TYPE() { return getToken(WatParser.VALUE_TYPE, 0); } - public NumTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_numType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterNumType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitNumType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitNumType(this); - else return visitor.visitChildren(this); - } - } - - public final NumTypeContext numType() throws RecognitionException { - NumTypeContext _localctx = new NumTypeContext(_ctx, getState()); - enterRule(_localctx, 4, RULE_numType); - try { - enterOuterAlt(_localctx, 1); - { - setState(148); - match(VALUE_TYPE); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class RefTypeContext extends ParserRuleContext { - public TerminalNode FUNCREF() { return getToken(WatParser.FUNCREF, 0); } - public TerminalNode EXTERNREF() { return getToken(WatParser.EXTERNREF, 0); } - public RefTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_refType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterRefType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitRefType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitRefType(this); - else return visitor.visitChildren(this); - } - } - - public final RefTypeContext refType() throws RecognitionException { - RefTypeContext _localctx = new RefTypeContext(_ctx, getState()); - enterRule(_localctx, 6, RULE_refType); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(150); - _la = _input.LA(1); - if ( !(_la==FUNCREF || _la==EXTERNREF) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class VecTypeContext extends ParserRuleContext { - public TerminalNode V128() { return getToken(WatParser.V128, 0); } - public VecTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_vecType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterVecType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitVecType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitVecType(this); - else return visitor.visitChildren(this); - } - } - - public final VecTypeContext vecType() throws RecognitionException { - VecTypeContext _localctx = new VecTypeContext(_ctx, getState()); - enterRule(_localctx, 8, RULE_vecType); - try { - enterOuterAlt(_localctx, 1); - { - setState(152); - match(V128); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class ValTypeContext extends ParserRuleContext { - public NumTypeContext numType() { - return getRuleContext(NumTypeContext.class,0); - } - public VecTypeContext vecType() { - return getRuleContext(VecTypeContext.class,0); - } - public RefTypeContext refType() { - return getRuleContext(RefTypeContext.class,0); - } - public ValTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_valType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterValType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitValType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitValType(this); - else return visitor.visitChildren(this); - } - } - - public final ValTypeContext valType() throws RecognitionException { - ValTypeContext _localctx = new ValTypeContext(_ctx, getState()); - enterRule(_localctx, 10, RULE_valType); - try { - setState(157); - _errHandler.sync(this); - switch (_input.LA(1)) { - case VALUE_TYPE: - enterOuterAlt(_localctx, 1); - { - setState(154); - numType(); - } - break; - case V128: - enterOuterAlt(_localctx, 2); - { - setState(155); - vecType(); - } - break; - case FUNCREF: - case EXTERNREF: - enterOuterAlt(_localctx, 3); - { - setState(156); - refType(); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class HeapTypeContext extends ParserRuleContext { - public TerminalNode FUNC() { return getToken(WatParser.FUNC, 0); } - public TerminalNode EXTERN() { return getToken(WatParser.EXTERN, 0); } - public HeapTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_heapType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterHeapType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitHeapType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitHeapType(this); - else return visitor.visitChildren(this); - } - } - - public final HeapTypeContext heapType() throws RecognitionException { - HeapTypeContext _localctx = new HeapTypeContext(_ctx, getState()); - enterRule(_localctx, 12, RULE_heapType); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(159); - _la = _input.LA(1); - if ( !(_la==FUNC || _la==EXTERN) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class GlobalTypeContext extends ParserRuleContext { - public ValTypeContext valType() { - return getRuleContext(ValTypeContext.class,0); - } - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode MUT() { return getToken(WatParser.MUT, 0); } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public GlobalTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_globalType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterGlobalType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitGlobalType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitGlobalType(this); - else return visitor.visitChildren(this); - } - } - - public final GlobalTypeContext globalType() throws RecognitionException { - GlobalTypeContext _localctx = new GlobalTypeContext(_ctx, getState()); - enterRule(_localctx, 14, RULE_globalType); - try { - setState(167); - _errHandler.sync(this); - switch (_input.LA(1)) { - case VALUE_TYPE: - case FUNCREF: - case EXTERNREF: - case V128: - enterOuterAlt(_localctx, 1); - { - setState(161); - valType(); - } - break; - case LPAR: - enterOuterAlt(_localctx, 2); - { - setState(162); - match(LPAR); - setState(163); - match(MUT); - setState(164); - valType(); - setState(165); - match(RPAR); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class DefTypeContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode FUNC() { return getToken(WatParser.FUNC, 0); } - public FuncTypeContext funcType() { - return getRuleContext(FuncTypeContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public DefTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_defType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterDefType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitDefType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitDefType(this); - else return visitor.visitChildren(this); - } - } - - public final DefTypeContext defType() throws RecognitionException { - DefTypeContext _localctx = new DefTypeContext(_ctx, getState()); - enterRule(_localctx, 16, RULE_defType); - try { - enterOuterAlt(_localctx, 1); - { - setState(169); - match(LPAR); - setState(170); - match(FUNC); - setState(171); - funcType(); - setState(172); - match(RPAR); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class FuncParamTypeContext extends ParserRuleContext { - public List LPAR() { return getTokens(WatParser.LPAR); } - public TerminalNode LPAR(int i) { - return getToken(WatParser.LPAR, i); - } - public List PARAM() { return getTokens(WatParser.PARAM); } - public TerminalNode PARAM(int i) { - return getToken(WatParser.PARAM, i); - } - public List RPAR() { return getTokens(WatParser.RPAR); } - public TerminalNode RPAR(int i) { - return getToken(WatParser.RPAR, i); - } - public List bindVar() { - return getRuleContexts(BindVarContext.class); - } - public BindVarContext bindVar(int i) { - return getRuleContext(BindVarContext.class,i); - } - public List valType() { - return getRuleContexts(ValTypeContext.class); - } - public ValTypeContext valType(int i) { - return getRuleContext(ValTypeContext.class,i); - } - public FuncParamTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_funcParamType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterFuncParamType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncParamType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncParamType(this); - else return visitor.visitChildren(this); - } - } - - public final FuncParamTypeContext funcParamType() throws RecognitionException { - FuncParamTypeContext _localctx = new FuncParamTypeContext(_ctx, getState()); - enterRule(_localctx, 18, RULE_funcParamType); - int _la; - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(190); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,4,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(174); - match(LPAR); - setState(175); - match(PARAM); - setState(185); - _errHandler.sync(this); - switch (_input.LA(1)) { - case RPAR: - case VALUE_TYPE: - case FUNCREF: - case EXTERNREF: - case V128: - { - setState(179); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { - { - { - setState(176); - valType(); - } - } - setState(181); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - break; - case VAR: - { - setState(182); - bindVar(); - setState(183); - valType(); - } - break; - default: - throw new NoViableAltException(this); - } - setState(187); - match(RPAR); - } - } - } - setState(192); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,4,_ctx); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class FuncResTypeContext extends ParserRuleContext { - public List LPAR() { return getTokens(WatParser.LPAR); } - public TerminalNode LPAR(int i) { - return getToken(WatParser.LPAR, i); - } - public List RESULT() { return getTokens(WatParser.RESULT); } - public TerminalNode RESULT(int i) { - return getToken(WatParser.RESULT, i); - } - public List RPAR() { return getTokens(WatParser.RPAR); } - public TerminalNode RPAR(int i) { - return getToken(WatParser.RPAR, i); - } - public List valType() { - return getRuleContexts(ValTypeContext.class); - } - public ValTypeContext valType(int i) { - return getRuleContext(ValTypeContext.class,i); - } - public FuncResTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_funcResType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterFuncResType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncResType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncResType(this); - else return visitor.visitChildren(this); - } - } - - public final FuncResTypeContext funcResType() throws RecognitionException { - FuncResTypeContext _localctx = new FuncResTypeContext(_ctx, getState()); - enterRule(_localctx, 20, RULE_funcResType); - int _la; - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(204); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,6,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(193); - match(LPAR); - setState(194); - match(RESULT); - setState(198); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { - { - { - setState(195); - valType(); - } - } - setState(200); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(201); - match(RPAR); - } - } - } - setState(206); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,6,_ctx); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class FuncTypeContext extends ParserRuleContext { - public FuncParamTypeContext funcParamType() { - return getRuleContext(FuncParamTypeContext.class,0); - } - public FuncResTypeContext funcResType() { - return getRuleContext(FuncResTypeContext.class,0); - } - public FuncTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_funcType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterFuncType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncType(this); - else return visitor.visitChildren(this); - } - } - - public final FuncTypeContext funcType() throws RecognitionException { - FuncTypeContext _localctx = new FuncTypeContext(_ctx, getState()); - enterRule(_localctx, 22, RULE_funcType); - try { - enterOuterAlt(_localctx, 1); - { - setState(207); - funcParamType(); - setState(208); - funcResType(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class TableTypeContext extends ParserRuleContext { - public List NAT() { return getTokens(WatParser.NAT); } - public TerminalNode NAT(int i) { - return getToken(WatParser.NAT, i); - } - public RefTypeContext refType() { - return getRuleContext(RefTypeContext.class,0); - } - public TableTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_tableType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterTableType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTableType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTableType(this); - else return visitor.visitChildren(this); - } - } - - public final TableTypeContext tableType() throws RecognitionException { - TableTypeContext _localctx = new TableTypeContext(_ctx, getState()); - enterRule(_localctx, 24, RULE_tableType); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(210); - match(NAT); - setState(212); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==NAT) { - { - setState(211); - match(NAT); - } - } - - setState(214); - refType(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class MemoryTypeContext extends ParserRuleContext { - public List NAT() { return getTokens(WatParser.NAT); } - public TerminalNode NAT(int i) { - return getToken(WatParser.NAT, i); - } - public MemoryTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_memoryType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterMemoryType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitMemoryType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitMemoryType(this); - else return visitor.visitChildren(this); - } - } - - public final MemoryTypeContext memoryType() throws RecognitionException { - MemoryTypeContext _localctx = new MemoryTypeContext(_ctx, getState()); - enterRule(_localctx, 26, RULE_memoryType); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(216); - match(NAT); - setState(218); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==NAT) { - { - setState(217); - match(NAT); - } - } - - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class TypeUseContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode TYPE() { return getToken(WatParser.TYPE, 0); } - public IdxContext idx() { - return getRuleContext(IdxContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public TypeUseContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_typeUse; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterTypeUse(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTypeUse(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTypeUse(this); - else return visitor.visitChildren(this); - } - } - - public final TypeUseContext typeUse() throws RecognitionException { - TypeUseContext _localctx = new TypeUseContext(_ctx, getState()); - enterRule(_localctx, 28, RULE_typeUse); - try { - enterOuterAlt(_localctx, 1); - { - setState(220); - match(LPAR); - setState(221); - match(TYPE); - setState(222); - idx(); - setState(223); - match(RPAR); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class LiteralContext extends ParserRuleContext { - public TerminalNode NAT() { return getToken(WatParser.NAT, 0); } - public TerminalNode INT() { return getToken(WatParser.INT, 0); } - public TerminalNode FLOAT() { return getToken(WatParser.FLOAT, 0); } - public LiteralContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_literal; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterLiteral(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitLiteral(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitLiteral(this); - else return visitor.visitChildren(this); - } - } - - public final LiteralContext literal() throws RecognitionException { - LiteralContext _localctx = new LiteralContext(_ctx, getState()); - enterRule(_localctx, 30, RULE_literal); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(225); - _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 56L) != 0)) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class IdxContext extends ParserRuleContext { - public TerminalNode NAT() { return getToken(WatParser.NAT, 0); } - public TerminalNode VAR() { return getToken(WatParser.VAR, 0); } - public IdxContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_idx; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterIdx(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitIdx(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitIdx(this); - else return visitor.visitChildren(this); - } - } - - public final IdxContext idx() throws RecognitionException { - IdxContext _localctx = new IdxContext(_ctx, getState()); - enterRule(_localctx, 32, RULE_idx); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(227); - _la = _input.LA(1); - if ( !(_la==NAT || _la==VAR) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class BindVarContext extends ParserRuleContext { - public TerminalNode VAR() { return getToken(WatParser.VAR, 0); } - public BindVarContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_bindVar; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterBindVar(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitBindVar(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitBindVar(this); - else return visitor.visitChildren(this); - } - } - - public final BindVarContext bindVar() throws RecognitionException { - BindVarContext _localctx = new BindVarContext(_ctx, getState()); - enterRule(_localctx, 34, RULE_bindVar); - try { - enterOuterAlt(_localctx, 1); - { - setState(229); - match(VAR); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class InstrContext extends ParserRuleContext { - public PlainInstrContext plainInstr() { - return getRuleContext(PlainInstrContext.class,0); - } - public BlockInstrContext blockInstr() { - return getRuleContext(BlockInstrContext.class,0); - } - public FoldedInstrContext foldedInstr() { - return getRuleContext(FoldedInstrContext.class,0); - } - public ForLoopContext forLoop() { - return getRuleContext(ForLoopContext.class,0); - } - public InstrContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_instr; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterInstr(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitInstr(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitInstr(this); - else return visitor.visitChildren(this); - } - } - - public final InstrContext instr() throws RecognitionException { - InstrContext _localctx = new InstrContext(_ctx, getState()); - enterRule(_localctx, 36, RULE_instr); - try { - setState(235); - _errHandler.sync(this); - switch (_input.LA(1)) { - case VALUE_TYPE: - case CONST: - case SYMBOLIC: - case NOP: - case SYM_ASSERT: - case ALLOC: - case FREE: - case UNREACHABLE: - case DROP: - case BR: - case BR_IF: - case BR_TABLE: - case RETURN: - case CALL: - case CALL_INDIRECT: - case RETURN_CALL: - case RETURN_CALL_INDIRECT: - case LOCAL_GET: - case LOCAL_SET: - case LOCAL_TEE: - case GLOBAL_GET: - case GLOBAL_SET: - case MEMORY_SIZE: - case MEMORY_GROW: - case MEMORY_FILL: - case MEMORY_COPY: - case MEMORY_INIT: - case TEST: - case COMPARE: - case UNARY: - case BINARY: - case CONVERT: - enterOuterAlt(_localctx, 1); - { - setState(231); - plainInstr(); - } - break; - case BLOCK: - case LOOP: - case IF: - enterOuterAlt(_localctx, 2); - { - setState(232); - blockInstr(); - } - break; - case LPAR: - enterOuterAlt(_localctx, 3); - { - setState(233); - foldedInstr(); - } - break; - case FOR: - enterOuterAlt(_localctx, 4); - { - setState(234); - forLoop(); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class ForLoopContext extends ParserRuleContext { - public TerminalNode FOR() { return getToken(WatParser.FOR, 0); } - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public List instrList() { - return getRuleContexts(InstrListContext.class); - } - public InstrListContext instrList(int i) { - return getRuleContext(InstrListContext.class,i); - } - public List VBAR() { return getTokens(WatParser.VBAR); } - public TerminalNode VBAR(int i) { - return getToken(WatParser.VBAR, i); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public ForLoopContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_forLoop; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterForLoop(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitForLoop(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitForLoop(this); - else return visitor.visitChildren(this); - } - } - - public final ForLoopContext forLoop() throws RecognitionException { - ForLoopContext _localctx = new ForLoopContext(_ctx, getState()); - enterRule(_localctx, 38, RULE_forLoop); - try { - enterOuterAlt(_localctx, 1); - { - setState(237); - match(FOR); - setState(238); - match(LPAR); - setState(239); - instrList(); - setState(240); - match(VBAR); - setState(241); - instrList(); - setState(242); - match(VBAR); - setState(243); - instrList(); - setState(244); - match(RPAR); - setState(245); - instrList(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class PlainInstrContext extends ParserRuleContext { - public TerminalNode UNREACHABLE() { return getToken(WatParser.UNREACHABLE, 0); } - public TerminalNode NOP() { return getToken(WatParser.NOP, 0); } - public TerminalNode DROP() { return getToken(WatParser.DROP, 0); } - public SelectInstrContext selectInstr() { - return getRuleContext(SelectInstrContext.class,0); - } - public TerminalNode BR() { return getToken(WatParser.BR, 0); } - public List idx() { - return getRuleContexts(IdxContext.class); - } - public IdxContext idx(int i) { - return getRuleContext(IdxContext.class,i); - } - public TerminalNode BR_IF() { return getToken(WatParser.BR_IF, 0); } - public TerminalNode BR_TABLE() { return getToken(WatParser.BR_TABLE, 0); } - public TerminalNode RETURN() { return getToken(WatParser.RETURN, 0); } - public TerminalNode CALL() { return getToken(WatParser.CALL, 0); } - public TerminalNode RETURN_CALL() { return getToken(WatParser.RETURN_CALL, 0); } - public TerminalNode LOCAL_GET() { return getToken(WatParser.LOCAL_GET, 0); } - public TerminalNode LOCAL_SET() { return getToken(WatParser.LOCAL_SET, 0); } - public TerminalNode LOCAL_TEE() { return getToken(WatParser.LOCAL_TEE, 0); } - public TerminalNode GLOBAL_GET() { return getToken(WatParser.GLOBAL_GET, 0); } - public TerminalNode GLOBAL_SET() { return getToken(WatParser.GLOBAL_SET, 0); } - public LoadContext load() { - return getRuleContext(LoadContext.class,0); - } - public OffsetEqContext offsetEq() { - return getRuleContext(OffsetEqContext.class,0); - } - public AlignEqContext alignEq() { - return getRuleContext(AlignEqContext.class,0); - } - public StoreContext store() { - return getRuleContext(StoreContext.class,0); - } - public TerminalNode MEMORY_SIZE() { return getToken(WatParser.MEMORY_SIZE, 0); } - public TerminalNode MEMORY_GROW() { return getToken(WatParser.MEMORY_GROW, 0); } - public TerminalNode MEMORY_FILL() { return getToken(WatParser.MEMORY_FILL, 0); } - public TerminalNode MEMORY_COPY() { return getToken(WatParser.MEMORY_COPY, 0); } - public TerminalNode MEMORY_INIT() { return getToken(WatParser.MEMORY_INIT, 0); } - public TerminalNode CONST() { return getToken(WatParser.CONST, 0); } - public LiteralContext literal() { - return getRuleContext(LiteralContext.class,0); - } - public TerminalNode SYMBOLIC() { return getToken(WatParser.SYMBOLIC, 0); } - public TerminalNode SYM_ASSERT() { return getToken(WatParser.SYM_ASSERT, 0); } - public TerminalNode ALLOC() { return getToken(WatParser.ALLOC, 0); } - public TerminalNode FREE() { return getToken(WatParser.FREE, 0); } - public TerminalNode TEST() { return getToken(WatParser.TEST, 0); } - public TerminalNode COMPARE() { return getToken(WatParser.COMPARE, 0); } - public TerminalNode UNARY() { return getToken(WatParser.UNARY, 0); } - public TerminalNode BINARY() { return getToken(WatParser.BINARY, 0); } - public TerminalNode CONVERT() { return getToken(WatParser.CONVERT, 0); } - public CallIndirectInstrContext callIndirectInstr() { - return getRuleContext(CallIndirectInstrContext.class,0); - } - public PlainInstrContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_plainInstr; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterPlainInstr(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitPlainInstr(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitPlainInstr(this); - else return visitor.visitChildren(this); - } - } - - public final PlainInstrContext plainInstr() throws RecognitionException { - PlainInstrContext _localctx = new PlainInstrContext(_ctx, getState()); - enterRule(_localctx, 40, RULE_plainInstr); - int _la; - try { - int _alt; - setState(308); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(247); - match(UNREACHABLE); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(248); - match(NOP); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(249); - match(DROP); - } - break; - case 4: - enterOuterAlt(_localctx, 4); - { - setState(250); - selectInstr(); - } - break; - case 5: - enterOuterAlt(_localctx, 5); - { - setState(251); - match(BR); - setState(252); - idx(); - } - break; - case 6: - enterOuterAlt(_localctx, 6); - { - setState(253); - match(BR_IF); - setState(254); - idx(); - } - break; - case 7: - enterOuterAlt(_localctx, 7); - { - setState(255); - match(BR_TABLE); - setState(257); - _errHandler.sync(this); - _alt = 1; - do { - switch (_alt) { - case 1: - { - { - setState(256); - idx(); - } - } - break; - default: - throw new NoViableAltException(this); - } - setState(259); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,10,_ctx); - } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); - } - break; - case 8: - enterOuterAlt(_localctx, 8); - { - setState(261); - match(RETURN); - } - break; - case 9: - enterOuterAlt(_localctx, 9); - { - setState(262); - match(CALL); - setState(263); - idx(); - } - break; - case 10: - enterOuterAlt(_localctx, 10); - { - setState(264); - match(RETURN_CALL); - setState(265); - idx(); - } - break; - case 11: - enterOuterAlt(_localctx, 11); - { - setState(266); - match(LOCAL_GET); - setState(267); - idx(); - } - break; - case 12: - enterOuterAlt(_localctx, 12); - { - setState(268); - match(LOCAL_SET); - setState(269); - idx(); - } - break; - case 13: - enterOuterAlt(_localctx, 13); - { - setState(270); - match(LOCAL_TEE); - setState(271); - idx(); - } - break; - case 14: - enterOuterAlt(_localctx, 14); - { - setState(272); - match(GLOBAL_GET); - setState(273); - idx(); - } - break; - case 15: - enterOuterAlt(_localctx, 15); - { - setState(274); - match(GLOBAL_SET); - setState(275); - idx(); - } - break; - case 16: - enterOuterAlt(_localctx, 16); - { - setState(276); - load(); - setState(278); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==OFFSET_EQ) { - { - setState(277); - offsetEq(); - } - } - - setState(281); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==ALIGN_EQ) { - { - setState(280); - alignEq(); - } - } - - } - break; - case 17: - enterOuterAlt(_localctx, 17); - { - setState(283); - store(); - setState(285); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==OFFSET_EQ) { - { - setState(284); - offsetEq(); - } - } - - setState(288); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==ALIGN_EQ) { - { - setState(287); - alignEq(); - } - } - - } - break; - case 18: - enterOuterAlt(_localctx, 18); - { - setState(290); - match(MEMORY_SIZE); - } - break; - case 19: - enterOuterAlt(_localctx, 19); - { - setState(291); - match(MEMORY_GROW); - } - break; - case 20: - enterOuterAlt(_localctx, 20); - { - setState(292); - match(MEMORY_FILL); - } - break; - case 21: - enterOuterAlt(_localctx, 21); - { - setState(293); - match(MEMORY_COPY); - } - break; - case 22: - enterOuterAlt(_localctx, 22); - { - setState(294); - match(MEMORY_INIT); - setState(295); - idx(); - } - break; - case 23: - enterOuterAlt(_localctx, 23); - { - setState(296); - match(CONST); - setState(297); - literal(); - } - break; - case 24: - enterOuterAlt(_localctx, 24); - { - setState(298); - match(SYMBOLIC); - } - break; - case 25: - enterOuterAlt(_localctx, 25); - { - setState(299); - match(SYM_ASSERT); - } - break; - case 26: - enterOuterAlt(_localctx, 26); - { - setState(300); - match(ALLOC); - } - break; - case 27: - enterOuterAlt(_localctx, 27); - { - setState(301); - match(FREE); - } - break; - case 28: - enterOuterAlt(_localctx, 28); - { - setState(302); - match(TEST); - } - break; - case 29: - enterOuterAlt(_localctx, 29); - { - setState(303); - match(COMPARE); - } - break; - case 30: - enterOuterAlt(_localctx, 30); - { - setState(304); - match(UNARY); - } - break; - case 31: - enterOuterAlt(_localctx, 31); - { - setState(305); - match(BINARY); - } - break; - case 32: - enterOuterAlt(_localctx, 32); - { - setState(306); - match(CONVERT); - } - break; - case 33: - enterOuterAlt(_localctx, 33); - { - setState(307); - callIndirectInstr(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class OffsetEqContext extends ParserRuleContext { - public TerminalNode OFFSET_EQ() { return getToken(WatParser.OFFSET_EQ, 0); } - public TerminalNode NAT() { return getToken(WatParser.NAT, 0); } - public OffsetEqContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_offsetEq; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterOffsetEq(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitOffsetEq(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitOffsetEq(this); - else return visitor.visitChildren(this); - } - } - - public final OffsetEqContext offsetEq() throws RecognitionException { - OffsetEqContext _localctx = new OffsetEqContext(_ctx, getState()); - enterRule(_localctx, 42, RULE_offsetEq); - try { - enterOuterAlt(_localctx, 1); - { - setState(310); - match(OFFSET_EQ); - setState(311); - match(NAT); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class AlignEqContext extends ParserRuleContext { - public TerminalNode ALIGN_EQ() { return getToken(WatParser.ALIGN_EQ, 0); } - public TerminalNode NAT() { return getToken(WatParser.NAT, 0); } - public AlignEqContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_alignEq; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterAlignEq(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitAlignEq(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitAlignEq(this); - else return visitor.visitChildren(this); - } - } - - public final AlignEqContext alignEq() throws RecognitionException { - AlignEqContext _localctx = new AlignEqContext(_ctx, getState()); - enterRule(_localctx, 44, RULE_alignEq); - try { - enterOuterAlt(_localctx, 1); - { - setState(313); - match(ALIGN_EQ); - setState(314); - match(NAT); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class LoadContext extends ParserRuleContext { - public NumTypeContext numType() { - return getRuleContext(NumTypeContext.class,0); - } - public TerminalNode LOAD() { return getToken(WatParser.LOAD, 0); } - public TerminalNode MEM_SIZE() { return getToken(WatParser.MEM_SIZE, 0); } - public TerminalNode UNDERSCORE() { return getToken(WatParser.UNDERSCORE, 0); } - public TerminalNode SIGN_POSTFIX() { return getToken(WatParser.SIGN_POSTFIX, 0); } - public LoadContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_load; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterLoad(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitLoad(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitLoad(this); - else return visitor.visitChildren(this); - } - } - - public final LoadContext load() throws RecognitionException { - LoadContext _localctx = new LoadContext(_ctx, getState()); - enterRule(_localctx, 46, RULE_load); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(316); - numType(); - setState(317); - match(LOAD); - setState(321); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==MEM_SIZE) { - { - setState(318); - match(MEM_SIZE); - setState(319); - match(UNDERSCORE); - setState(320); - match(SIGN_POSTFIX); - } - } - - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class StoreContext extends ParserRuleContext { - public NumTypeContext numType() { - return getRuleContext(NumTypeContext.class,0); - } - public TerminalNode STORE() { return getToken(WatParser.STORE, 0); } - public TerminalNode MEM_SIZE() { return getToken(WatParser.MEM_SIZE, 0); } - public StoreContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_store; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterStore(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitStore(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitStore(this); - else return visitor.visitChildren(this); - } - } - - public final StoreContext store() throws RecognitionException { - StoreContext _localctx = new StoreContext(_ctx, getState()); - enterRule(_localctx, 48, RULE_store); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(323); - numType(); - setState(324); - match(STORE); - setState(326); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==MEM_SIZE) { - { - setState(325); - match(MEM_SIZE); - } - } - - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class SelectInstrContext extends ParserRuleContext { - public NumTypeContext numType() { - return getRuleContext(NumTypeContext.class,0); - } - public TerminalNode SELECT() { return getToken(WatParser.SELECT, 0); } - public SelectInstrContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_selectInstr; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterSelectInstr(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitSelectInstr(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitSelectInstr(this); - else return visitor.visitChildren(this); - } - } - - public final SelectInstrContext selectInstr() throws RecognitionException { - SelectInstrContext _localctx = new SelectInstrContext(_ctx, getState()); - enterRule(_localctx, 50, RULE_selectInstr); - try { - enterOuterAlt(_localctx, 1); - { - setState(328); - numType(); - setState(329); - match(SELECT); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class CallIndirectInstrContext extends ParserRuleContext { - public TerminalNode CALL_INDIRECT() { return getToken(WatParser.CALL_INDIRECT, 0); } - public TypeUseContext typeUse() { - return getRuleContext(TypeUseContext.class,0); - } - public IdxContext idx() { - return getRuleContext(IdxContext.class,0); - } - public TerminalNode RETURN_CALL_INDIRECT() { return getToken(WatParser.RETURN_CALL_INDIRECT, 0); } - public CallIndirectInstrContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_callIndirectInstr; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterCallIndirectInstr(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallIndirectInstr(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallIndirectInstr(this); - else return visitor.visitChildren(this); - } - } - - public final CallIndirectInstrContext callIndirectInstr() throws RecognitionException { - CallIndirectInstrContext _localctx = new CallIndirectInstrContext(_ctx, getState()); - enterRule(_localctx, 52, RULE_callIndirectInstr); - int _la; - try { - setState(341); - _errHandler.sync(this); - switch (_input.LA(1)) { - case CALL_INDIRECT: - enterOuterAlt(_localctx, 1); - { - setState(331); - match(CALL_INDIRECT); - setState(333); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==NAT || _la==VAR) { - { - setState(332); - idx(); - } - } - - setState(335); - typeUse(); - } - break; - case RETURN_CALL_INDIRECT: - enterOuterAlt(_localctx, 2); - { - setState(336); - match(RETURN_CALL_INDIRECT); - setState(338); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==NAT || _la==VAR) { - { - setState(337); - idx(); - } - } - - setState(340); - typeUse(); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class CallInstrParamsContext extends ParserRuleContext { - public List LPAR() { return getTokens(WatParser.LPAR); } - public TerminalNode LPAR(int i) { - return getToken(WatParser.LPAR, i); - } - public List PARAM() { return getTokens(WatParser.PARAM); } - public TerminalNode PARAM(int i) { - return getToken(WatParser.PARAM, i); - } - public List RPAR() { return getTokens(WatParser.RPAR); } - public TerminalNode RPAR(int i) { - return getToken(WatParser.RPAR, i); - } - public List RESULT() { return getTokens(WatParser.RESULT); } - public TerminalNode RESULT(int i) { - return getToken(WatParser.RESULT, i); - } - public List valType() { - return getRuleContexts(ValTypeContext.class); - } - public ValTypeContext valType(int i) { - return getRuleContext(ValTypeContext.class,i); - } - public CallInstrParamsContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_callInstrParams; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterCallInstrParams(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallInstrParams(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallInstrParams(this); - else return visitor.visitChildren(this); - } - } - - public final CallInstrParamsContext callInstrParams() throws RecognitionException { - CallInstrParamsContext _localctx = new CallInstrParamsContext(_ctx, getState()); - enterRule(_localctx, 54, RULE_callInstrParams); - int _la; - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(354); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,22,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(343); - match(LPAR); - setState(344); - match(PARAM); - setState(348); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { - { - { - setState(345); - valType(); - } - } - setState(350); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(351); - match(RPAR); - } - } - } - setState(356); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,22,_ctx); - } - setState(368); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==LPAR) { - { - { - setState(357); - match(LPAR); - setState(358); - match(RESULT); - setState(362); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { - { - { - setState(359); - valType(); - } - } - setState(364); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(365); - match(RPAR); - } - } - setState(370); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class CallInstrParamsInstrContext extends ParserRuleContext { - public CallInstrResultsInstrContext callInstrResultsInstr() { - return getRuleContext(CallInstrResultsInstrContext.class,0); - } - public List LPAR() { return getTokens(WatParser.LPAR); } - public TerminalNode LPAR(int i) { - return getToken(WatParser.LPAR, i); - } - public List PARAM() { return getTokens(WatParser.PARAM); } - public TerminalNode PARAM(int i) { - return getToken(WatParser.PARAM, i); - } - public List RPAR() { return getTokens(WatParser.RPAR); } - public TerminalNode RPAR(int i) { - return getToken(WatParser.RPAR, i); - } - public List valType() { - return getRuleContexts(ValTypeContext.class); - } - public ValTypeContext valType(int i) { - return getRuleContext(ValTypeContext.class,i); - } - public CallInstrParamsInstrContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_callInstrParamsInstr; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterCallInstrParamsInstr(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallInstrParamsInstr(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallInstrParamsInstr(this); - else return visitor.visitChildren(this); - } - } - - public final CallInstrParamsInstrContext callInstrParamsInstr() throws RecognitionException { - CallInstrParamsInstrContext _localctx = new CallInstrParamsInstrContext(_ctx, getState()); - enterRule(_localctx, 56, RULE_callInstrParamsInstr); - int _la; - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(382); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,26,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(371); - match(LPAR); - setState(372); - match(PARAM); - setState(376); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { - { - { - setState(373); - valType(); - } - } - setState(378); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(379); - match(RPAR); - } - } - } - setState(384); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,26,_ctx); - } - setState(385); - callInstrResultsInstr(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class CallInstrResultsInstrContext extends ParserRuleContext { - public InstrContext instr() { - return getRuleContext(InstrContext.class,0); - } - public List LPAR() { return getTokens(WatParser.LPAR); } - public TerminalNode LPAR(int i) { - return getToken(WatParser.LPAR, i); - } - public List RESULT() { return getTokens(WatParser.RESULT); } - public TerminalNode RESULT(int i) { - return getToken(WatParser.RESULT, i); - } - public List RPAR() { return getTokens(WatParser.RPAR); } - public TerminalNode RPAR(int i) { - return getToken(WatParser.RPAR, i); - } - public List valType() { - return getRuleContexts(ValTypeContext.class); - } - public ValTypeContext valType(int i) { - return getRuleContext(ValTypeContext.class,i); - } - public CallInstrResultsInstrContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_callInstrResultsInstr; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterCallInstrResultsInstr(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallInstrResultsInstr(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallInstrResultsInstr(this); - else return visitor.visitChildren(this); - } - } - - public final CallInstrResultsInstrContext callInstrResultsInstr() throws RecognitionException { - CallInstrResultsInstrContext _localctx = new CallInstrResultsInstrContext(_ctx, getState()); - enterRule(_localctx, 58, RULE_callInstrResultsInstr); - int _la; - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(398); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,28,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(387); - match(LPAR); - setState(388); - match(RESULT); - setState(392); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { - { - { - setState(389); - valType(); - } - } - setState(394); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(395); - match(RPAR); - } - } - } - setState(400); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,28,_ctx); - } - setState(401); - instr(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class BlockInstrContext extends ParserRuleContext { - public TerminalNode BLOCK() { return getToken(WatParser.BLOCK, 0); } - public BlockContext block() { - return getRuleContext(BlockContext.class,0); - } - public TerminalNode END() { return getToken(WatParser.END, 0); } - public List bindVar() { - return getRuleContexts(BindVarContext.class); - } - public BindVarContext bindVar(int i) { - return getRuleContext(BindVarContext.class,i); - } - public TerminalNode LOOP() { return getToken(WatParser.LOOP, 0); } - public TerminalNode IF() { return getToken(WatParser.IF, 0); } - public TerminalNode ELSE() { return getToken(WatParser.ELSE, 0); } - public InstrListContext instrList() { - return getRuleContext(InstrListContext.class,0); - } - public BlockInstrContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_blockInstr; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterBlockInstr(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitBlockInstr(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitBlockInstr(this); - else return visitor.visitChildren(this); - } - } - - public final BlockInstrContext blockInstr() throws RecognitionException { - BlockInstrContext _localctx = new BlockInstrContext(_ctx, getState()); - enterRule(_localctx, 60, RULE_blockInstr); - int _la; - try { - setState(437); - _errHandler.sync(this); - switch (_input.LA(1)) { - case BLOCK: - enterOuterAlt(_localctx, 1); - { - setState(403); - match(BLOCK); - setState(405); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(404); - bindVar(); - } - } - - setState(407); - block(); - setState(408); - match(END); - setState(410); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,30,_ctx) ) { - case 1: - { - setState(409); - bindVar(); - } - break; - } - } - break; - case LOOP: - enterOuterAlt(_localctx, 2); - { - setState(412); - match(LOOP); - setState(414); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(413); - bindVar(); - } - } - - setState(416); - block(); - setState(417); - match(END); - setState(419); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,32,_ctx) ) { - case 1: - { - setState(418); - bindVar(); - } - break; - } - } - break; - case IF: - enterOuterAlt(_localctx, 3); - { - setState(421); - match(IF); - setState(423); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(422); - bindVar(); - } - } - - setState(425); - block(); - setState(431); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==ELSE) { - { - setState(426); - match(ELSE); - setState(428); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(427); - bindVar(); - } - } - - setState(430); - instrList(); - } - } - - setState(433); - match(END); - setState(435); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) { - case 1: - { - setState(434); - bindVar(); - } - break; - } - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class BlockTypeContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode RESULT() { return getToken(WatParser.RESULT, 0); } - public ValTypeContext valType() { - return getRuleContext(ValTypeContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public TypeUseContext typeUse() { - return getRuleContext(TypeUseContext.class,0); - } - public FuncTypeContext funcType() { - return getRuleContext(FuncTypeContext.class,0); - } - public BlockTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_blockType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterBlockType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitBlockType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitBlockType(this); - else return visitor.visitChildren(this); - } - } - - public final BlockTypeContext blockType() throws RecognitionException { - BlockTypeContext _localctx = new BlockTypeContext(_ctx, getState()); - enterRule(_localctx, 62, RULE_blockType); - try { - setState(450); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(444); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) { - case 1: - { - setState(439); - match(LPAR); - setState(440); - match(RESULT); - setState(441); - valType(); - setState(442); - match(RPAR); - } - break; - } - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(446); - typeUse(); - setState(447); - funcType(); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(449); - funcType(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class BlockContext extends ParserRuleContext { - public BlockTypeContext blockType() { - return getRuleContext(BlockTypeContext.class,0); - } - public InstrListContext instrList() { - return getRuleContext(InstrListContext.class,0); - } - public BlockContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_block; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterBlock(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitBlock(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitBlock(this); - else return visitor.visitChildren(this); - } - } - - public final BlockContext block() throws RecognitionException { - BlockContext _localctx = new BlockContext(_ctx, getState()); - enterRule(_localctx, 64, RULE_block); - try { - enterOuterAlt(_localctx, 1); - { - setState(452); - blockType(); - setState(453); - instrList(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class FoldedInstrContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public FoldedInstrContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_foldedInstr; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterFoldedInstr(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFoldedInstr(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFoldedInstr(this); - else return visitor.visitChildren(this); - } - } - - public final FoldedInstrContext foldedInstr() throws RecognitionException { - FoldedInstrContext _localctx = new FoldedInstrContext(_ctx, getState()); - enterRule(_localctx, 66, RULE_foldedInstr); - try { - enterOuterAlt(_localctx, 1); - { - setState(455); - match(LPAR); - setState(456); - expr(); - setState(457); - match(RPAR); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class ExprContext extends ParserRuleContext { - public PlainInstrContext plainInstr() { - return getRuleContext(PlainInstrContext.class,0); - } - public List expr() { - return getRuleContexts(ExprContext.class); - } - public ExprContext expr(int i) { - return getRuleContext(ExprContext.class,i); - } - public TerminalNode CALL_INDIRECT() { return getToken(WatParser.CALL_INDIRECT, 0); } - public CallExprTypeContext callExprType() { - return getRuleContext(CallExprTypeContext.class,0); - } - public TerminalNode RETURN_CALL_INDIRECT() { return getToken(WatParser.RETURN_CALL_INDIRECT, 0); } - public TerminalNode BLOCK() { return getToken(WatParser.BLOCK, 0); } - public BlockContext block() { - return getRuleContext(BlockContext.class,0); - } - public BindVarContext bindVar() { - return getRuleContext(BindVarContext.class,0); - } - public TerminalNode LOOP() { return getToken(WatParser.LOOP, 0); } - public TerminalNode IF() { return getToken(WatParser.IF, 0); } - public BlockTypeContext blockType() { - return getRuleContext(BlockTypeContext.class,0); - } - public List LPAR() { return getTokens(WatParser.LPAR); } - public TerminalNode LPAR(int i) { - return getToken(WatParser.LPAR, i); - } - public TerminalNode THEN() { return getToken(WatParser.THEN, 0); } - public List instrList() { - return getRuleContexts(InstrListContext.class); - } - public InstrListContext instrList(int i) { - return getRuleContext(InstrListContext.class,i); - } - public List foldedInstr() { - return getRuleContexts(FoldedInstrContext.class); - } - public FoldedInstrContext foldedInstr(int i) { - return getRuleContext(FoldedInstrContext.class,i); - } - public TerminalNode ELSE() { return getToken(WatParser.ELSE, 0); } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public ExprContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_expr; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterExpr(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitExpr(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitExpr(this); - else return visitor.visitChildren(this); - } - } - - public final ExprContext expr() throws RecognitionException { - ExprContext _localctx = new ExprContext(_ctx, getState()); - enterRule(_localctx, 68, RULE_expr); - int _la; - try { - int _alt; - setState(501); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,46,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(459); - plainInstr(); - setState(463); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,40,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(460); - expr(); - } - } - } - setState(465); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,40,_ctx); - } - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(466); - match(CALL_INDIRECT); - setState(467); - callExprType(); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(468); - match(RETURN_CALL_INDIRECT); - setState(469); - callExprType(); - } - break; - case 4: - enterOuterAlt(_localctx, 4); - { - setState(470); - match(BLOCK); - setState(472); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,41,_ctx) ) { - case 1: - { - setState(471); - bindVar(); - } - break; - } - setState(474); - block(); - } - break; - case 5: - enterOuterAlt(_localctx, 5); - { - setState(475); - match(LOOP); - setState(477); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) { - case 1: - { - setState(476); - bindVar(); - } - break; - } - setState(479); - block(); - } - break; - case 6: - enterOuterAlt(_localctx, 6); - { - setState(480); - match(IF); - setState(482); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(481); - bindVar(); - } - } - - setState(484); - blockType(); - setState(488); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,44,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(485); - foldedInstr(); - } - } - } - setState(490); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,44,_ctx); - } - setState(491); - match(LPAR); - setState(492); - match(THEN); - setState(493); - instrList(); - setState(499); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==LPAR) { - { - setState(494); - match(LPAR); - setState(495); - match(ELSE); - setState(496); - instrList(); - setState(497); - match(RPAR); - } - } - - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class CallExprTypeContext extends ParserRuleContext { - public CallExprParamsContext callExprParams() { - return getRuleContext(CallExprParamsContext.class,0); - } - public TypeUseContext typeUse() { - return getRuleContext(TypeUseContext.class,0); - } - public CallExprTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_callExprType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterCallExprType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallExprType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallExprType(this); - else return visitor.visitChildren(this); - } - } - - public final CallExprTypeContext callExprType() throws RecognitionException { - CallExprTypeContext _localctx = new CallExprTypeContext(_ctx, getState()); - enterRule(_localctx, 70, RULE_callExprType); - try { - enterOuterAlt(_localctx, 1); - { - setState(504); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,47,_ctx) ) { - case 1: - { - setState(503); - typeUse(); - } - break; - } - setState(506); - callExprParams(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class CallExprParamsContext extends ParserRuleContext { - public CallExprResultsContext callExprResults() { - return getRuleContext(CallExprResultsContext.class,0); - } - public List LPAR() { return getTokens(WatParser.LPAR); } - public TerminalNode LPAR(int i) { - return getToken(WatParser.LPAR, i); - } - public List PARAM() { return getTokens(WatParser.PARAM); } - public TerminalNode PARAM(int i) { - return getToken(WatParser.PARAM, i); - } - public List RPAR() { return getTokens(WatParser.RPAR); } - public TerminalNode RPAR(int i) { - return getToken(WatParser.RPAR, i); - } - public List valType() { - return getRuleContexts(ValTypeContext.class); - } - public ValTypeContext valType(int i) { - return getRuleContext(ValTypeContext.class,i); - } - public CallExprParamsContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_callExprParams; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterCallExprParams(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallExprParams(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallExprParams(this); - else return visitor.visitChildren(this); - } - } - - public final CallExprParamsContext callExprParams() throws RecognitionException { - CallExprParamsContext _localctx = new CallExprParamsContext(_ctx, getState()); - enterRule(_localctx, 72, RULE_callExprParams); - int _la; - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(519); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,49,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(508); - match(LPAR); - setState(509); - match(PARAM); - setState(513); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { - { - { - setState(510); - valType(); - } - } - setState(515); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(516); - match(RPAR); - } - } - } - setState(521); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,49,_ctx); - } - setState(522); - callExprResults(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class CallExprResultsContext extends ParserRuleContext { - public List LPAR() { return getTokens(WatParser.LPAR); } - public TerminalNode LPAR(int i) { - return getToken(WatParser.LPAR, i); - } - public List RESULT() { return getTokens(WatParser.RESULT); } - public TerminalNode RESULT(int i) { - return getToken(WatParser.RESULT, i); - } - public List RPAR() { return getTokens(WatParser.RPAR); } - public TerminalNode RPAR(int i) { - return getToken(WatParser.RPAR, i); - } - public List expr() { - return getRuleContexts(ExprContext.class); - } - public ExprContext expr(int i) { - return getRuleContext(ExprContext.class,i); - } - public List valType() { - return getRuleContexts(ValTypeContext.class); - } - public ValTypeContext valType(int i) { - return getRuleContext(ValTypeContext.class,i); - } - public CallExprResultsContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_callExprResults; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterCallExprResults(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallExprResults(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallExprResults(this); - else return visitor.visitChildren(this); - } - } - - public final CallExprResultsContext callExprResults() throws RecognitionException { - CallExprResultsContext _localctx = new CallExprResultsContext(_ctx, getState()); - enterRule(_localctx, 74, RULE_callExprResults); - int _la; - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(535); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==LPAR) { - { - { - setState(524); - match(LPAR); - setState(525); - match(RESULT); - setState(529); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { - { - { - setState(526); - valType(); - } - } - setState(531); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(532); - match(RPAR); - } - } - setState(537); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(541); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,52,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(538); - expr(); - } - } - } - setState(543); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,52,_ctx); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class InstrListContext extends ParserRuleContext { - public List instr() { - return getRuleContexts(InstrContext.class); - } - public InstrContext instr(int i) { - return getRuleContext(InstrContext.class,i); - } - public CallIndirectInstrContext callIndirectInstr() { - return getRuleContext(CallIndirectInstrContext.class,0); - } - public InstrListContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_instrList; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterInstrList(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitInstrList(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitInstrList(this); - else return visitor.visitChildren(this); - } - } - - public final InstrListContext instrList() throws RecognitionException { - InstrListContext _localctx = new InstrListContext(_ctx, getState()); - enterRule(_localctx, 76, RULE_instrList); - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(547); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,53,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(544); - instr(); - } - } - } - setState(549); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,53,_ctx); - } - setState(551); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) { - case 1: - { - setState(550); - callIndirectInstr(); - } - break; - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class ConstExprContext extends ParserRuleContext { - public InstrListContext instrList() { - return getRuleContext(InstrListContext.class,0); - } - public ConstExprContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_constExpr; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterConstExpr(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitConstExpr(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitConstExpr(this); - else return visitor.visitChildren(this); - } - } - - public final ConstExprContext constExpr() throws RecognitionException { - ConstExprContext _localctx = new ConstExprContext(_ctx, getState()); - enterRule(_localctx, 78, RULE_constExpr); - try { - enterOuterAlt(_localctx, 1); - { - setState(553); - instrList(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class FunctionContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode FUNC() { return getToken(WatParser.FUNC, 0); } - public FuncFieldsContext funcFields() { - return getRuleContext(FuncFieldsContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public BindVarContext bindVar() { - return getRuleContext(BindVarContext.class,0); - } - public FunctionContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_function; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterFunction(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFunction(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFunction(this); - else return visitor.visitChildren(this); - } - } - - public final FunctionContext function() throws RecognitionException { - FunctionContext _localctx = new FunctionContext(_ctx, getState()); - enterRule(_localctx, 80, RULE_function); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(555); - match(LPAR); - setState(556); - match(FUNC); - setState(558); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(557); - bindVar(); - } - } - - setState(560); - funcFields(); - setState(561); - match(RPAR); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class FuncFieldsContext extends ParserRuleContext { - public FuncFieldsBodyContext funcFieldsBody() { - return getRuleContext(FuncFieldsBodyContext.class,0); - } - public TypeUseContext typeUse() { - return getRuleContext(TypeUseContext.class,0); - } - public InlineImportContext inlineImport() { - return getRuleContext(InlineImportContext.class,0); - } - public FuncTypeContext funcType() { - return getRuleContext(FuncTypeContext.class,0); - } - public InlineExportContext inlineExport() { - return getRuleContext(InlineExportContext.class,0); - } - public FuncFieldsContext funcFields() { - return getRuleContext(FuncFieldsContext.class,0); - } - public FuncFieldsContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_funcFields; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterFuncFields(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncFields(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncFields(this); - else return visitor.visitChildren(this); - } - } - - public final FuncFieldsContext funcFields() throws RecognitionException { - FuncFieldsContext _localctx = new FuncFieldsContext(_ctx, getState()); - enterRule(_localctx, 82, RULE_funcFields); - try { - setState(576); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,58,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(564); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,56,_ctx) ) { - case 1: - { - setState(563); - typeUse(); - } - break; - } - setState(566); - funcFieldsBody(); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(567); - inlineImport(); - setState(569); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,57,_ctx) ) { - case 1: - { - setState(568); - typeUse(); - } - break; - } - setState(571); - funcType(); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(573); - inlineExport(); - setState(574); - funcFields(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class FuncFieldsBodyContext extends ParserRuleContext { - public FuncTypeContext funcType() { - return getRuleContext(FuncTypeContext.class,0); - } - public FuncBodyContext funcBody() { - return getRuleContext(FuncBodyContext.class,0); - } - public FuncFieldsBodyContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_funcFieldsBody; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterFuncFieldsBody(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncFieldsBody(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncFieldsBody(this); - else return visitor.visitChildren(this); - } - } - - public final FuncFieldsBodyContext funcFieldsBody() throws RecognitionException { - FuncFieldsBodyContext _localctx = new FuncFieldsBodyContext(_ctx, getState()); - enterRule(_localctx, 84, RULE_funcFieldsBody); - try { - enterOuterAlt(_localctx, 1); - { - setState(578); - funcType(); - setState(579); - funcBody(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class FuncBodyContext extends ParserRuleContext { - public InstrListContext instrList() { - return getRuleContext(InstrListContext.class,0); - } - public List LPAR() { return getTokens(WatParser.LPAR); } - public TerminalNode LPAR(int i) { - return getToken(WatParser.LPAR, i); - } - public List LOCAL() { return getTokens(WatParser.LOCAL); } - public TerminalNode LOCAL(int i) { - return getToken(WatParser.LOCAL, i); - } - public List RPAR() { return getTokens(WatParser.RPAR); } - public TerminalNode RPAR(int i) { - return getToken(WatParser.RPAR, i); - } - public List bindVar() { - return getRuleContexts(BindVarContext.class); - } - public BindVarContext bindVar(int i) { - return getRuleContext(BindVarContext.class,i); - } - public List valType() { - return getRuleContexts(ValTypeContext.class); - } - public ValTypeContext valType(int i) { - return getRuleContext(ValTypeContext.class,i); - } - public FuncBodyContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_funcBody; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterFuncBody(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncBody(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncBody(this); - else return visitor.visitChildren(this); - } - } - - public final FuncBodyContext funcBody() throws RecognitionException { - FuncBodyContext _localctx = new FuncBodyContext(_ctx, getState()); - enterRule(_localctx, 86, RULE_funcBody); - int _la; - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(597); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,61,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(581); - match(LPAR); - setState(582); - match(LOCAL); - setState(592); - _errHandler.sync(this); - switch (_input.LA(1)) { - case RPAR: - case VALUE_TYPE: - case FUNCREF: - case EXTERNREF: - case V128: - { - setState(586); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0) || _la==V128) { - { - { - setState(583); - valType(); - } - } - setState(588); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - break; - case VAR: - { - setState(589); - bindVar(); - setState(590); - valType(); - } - break; - default: - throw new NoViableAltException(this); - } - setState(594); - match(RPAR); - } - } - } - setState(599); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,61,_ctx); - } - setState(600); - instrList(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class OffsetContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode OFFSET() { return getToken(WatParser.OFFSET, 0); } - public ConstExprContext constExpr() { - return getRuleContext(ConstExprContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); - } - public OffsetContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_offset; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterOffset(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitOffset(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitOffset(this); - else return visitor.visitChildren(this); - } - } - - public final OffsetContext offset() throws RecognitionException { - OffsetContext _localctx = new OffsetContext(_ctx, getState()); - enterRule(_localctx, 88, RULE_offset); - try { - setState(608); - _errHandler.sync(this); - switch (_input.LA(1)) { - case LPAR: - enterOuterAlt(_localctx, 1); - { - setState(602); - match(LPAR); - setState(603); - match(OFFSET); - setState(604); - constExpr(); - setState(605); - match(RPAR); - } - break; - case VALUE_TYPE: - case CONST: - case SYMBOLIC: - case NOP: - case SYM_ASSERT: - case ALLOC: - case FREE: - case UNREACHABLE: - case DROP: - case BLOCK: - case LOOP: - case BR: - case BR_IF: - case BR_TABLE: - case RETURN: - case IF: - case CALL: - case CALL_INDIRECT: - case RETURN_CALL: - case RETURN_CALL_INDIRECT: - case LOCAL_GET: - case LOCAL_SET: - case LOCAL_TEE: - case GLOBAL_GET: - case GLOBAL_SET: - case MEMORY_SIZE: - case MEMORY_GROW: - case MEMORY_FILL: - case MEMORY_COPY: - case MEMORY_INIT: - case TEST: - case COMPARE: - case UNARY: - case BINARY: - case CONVERT: - enterOuterAlt(_localctx, 2); - { - setState(607); - expr(); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class ElemContext extends ParserRuleContext { - public List LPAR() { return getTokens(WatParser.LPAR); } - public TerminalNode LPAR(int i) { - return getToken(WatParser.LPAR, i); - } - public TerminalNode ELEM() { return getToken(WatParser.ELEM, 0); } - public InstrContext instr() { - return getRuleContext(InstrContext.class,0); - } - public List RPAR() { return getTokens(WatParser.RPAR); } - public TerminalNode RPAR(int i) { - return getToken(WatParser.RPAR, i); - } - public List idx() { - return getRuleContexts(IdxContext.class); - } - public IdxContext idx(int i) { - return getRuleContext(IdxContext.class,i); - } - public OffsetContext offset() { - return getRuleContext(OffsetContext.class,0); - } - public ElemContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_elem; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterElem(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitElem(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitElem(this); - else return visitor.visitChildren(this); - } - } - - public final ElemContext elem() throws RecognitionException { - ElemContext _localctx = new ElemContext(_ctx, getState()); - enterRule(_localctx, 90, RULE_elem); - int _la; - try { - setState(640); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,67,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(610); - match(LPAR); - setState(611); - match(ELEM); - setState(613); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==NAT || _la==VAR) { - { - setState(612); - idx(); - } - } - - setState(615); - match(LPAR); - setState(616); - instr(); - setState(617); - match(RPAR); - setState(621); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==NAT || _la==VAR) { - { - { - setState(618); - idx(); - } - } - setState(623); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(624); - match(RPAR); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(626); - match(LPAR); - setState(627); - match(ELEM); - setState(629); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==NAT || _la==VAR) { - { - setState(628); - idx(); - } - } - - setState(631); - offset(); - setState(635); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==NAT || _la==VAR) { - { - { - setState(632); - idx(); - } - } - setState(637); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(638); - match(RPAR); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class TableContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode TABLE() { return getToken(WatParser.TABLE, 0); } - public TableFieldContext tableField() { - return getRuleContext(TableFieldContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public BindVarContext bindVar() { - return getRuleContext(BindVarContext.class,0); - } - public TableContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_table; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterTable(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTable(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTable(this); - else return visitor.visitChildren(this); - } - } - - public final TableContext table() throws RecognitionException { - TableContext _localctx = new TableContext(_ctx, getState()); - enterRule(_localctx, 92, RULE_table); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(642); - match(LPAR); - setState(643); - match(TABLE); - setState(645); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(644); - bindVar(); - } - } - - setState(647); - tableField(); - setState(648); - match(RPAR); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class TableFieldContext extends ParserRuleContext { - public TableTypeContext tableType() { - return getRuleContext(TableTypeContext.class,0); - } - public InlineImportContext inlineImport() { - return getRuleContext(InlineImportContext.class,0); - } - public InlineExportContext inlineExport() { - return getRuleContext(InlineExportContext.class,0); - } - public TableFieldContext tableField() { - return getRuleContext(TableFieldContext.class,0); - } - public RefTypeContext refType() { - return getRuleContext(RefTypeContext.class,0); - } - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode ELEM() { return getToken(WatParser.ELEM, 0); } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public List idx() { - return getRuleContexts(IdxContext.class); - } - public IdxContext idx(int i) { - return getRuleContext(IdxContext.class,i); - } - public TableFieldContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_tableField; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterTableField(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTableField(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTableField(this); - else return visitor.visitChildren(this); - } - } - - public final TableFieldContext tableField() throws RecognitionException { - TableFieldContext _localctx = new TableFieldContext(_ctx, getState()); - enterRule(_localctx, 94, RULE_tableField); - int _la; - try { - setState(668); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(650); - tableType(); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(651); - inlineImport(); - setState(652); - tableType(); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(654); - inlineExport(); - setState(655); - tableField(); - } - break; - case 4: - enterOuterAlt(_localctx, 4); - { - setState(657); - refType(); - setState(658); - match(LPAR); - setState(659); - match(ELEM); - setState(663); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==NAT || _la==VAR) { - { - { - setState(660); - idx(); - } - } - setState(665); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(666); - match(RPAR); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class DataContext extends ParserRuleContext { - public List LPAR() { return getTokens(WatParser.LPAR); } - public TerminalNode LPAR(int i) { - return getToken(WatParser.LPAR, i); - } - public TerminalNode DATA() { return getToken(WatParser.DATA, 0); } - public InstrContext instr() { - return getRuleContext(InstrContext.class,0); - } - public List RPAR() { return getTokens(WatParser.RPAR); } - public TerminalNode RPAR(int i) { - return getToken(WatParser.RPAR, i); - } - public IdxContext idx() { - return getRuleContext(IdxContext.class,0); - } - public List STRING_() { return getTokens(WatParser.STRING_); } - public TerminalNode STRING_(int i) { - return getToken(WatParser.STRING_, i); - } - public OffsetContext offset() { - return getRuleContext(OffsetContext.class,0); - } - public DataContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_data; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterData(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitData(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitData(this); - else return visitor.visitChildren(this); - } - } - - public final DataContext data() throws RecognitionException { - DataContext _localctx = new DataContext(_ctx, getState()); - enterRule(_localctx, 96, RULE_data); - int _la; - try { - setState(700); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,75,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(670); - match(LPAR); - setState(671); - match(DATA); - setState(673); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==NAT || _la==VAR) { - { - setState(672); - idx(); - } - } - - setState(675); - match(LPAR); - setState(676); - instr(); - setState(677); - match(RPAR); - setState(681); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==STRING_) { - { - { - setState(678); - match(STRING_); - } - } - setState(683); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(684); - match(RPAR); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(686); - match(LPAR); - setState(687); - match(DATA); - setState(689); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==NAT || _la==VAR) { - { - setState(688); - idx(); - } - } - - setState(691); - offset(); - setState(695); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==STRING_) { - { - { - setState(692); - match(STRING_); - } - } - setState(697); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(698); - match(RPAR); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class MemoryContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode MEMORY() { return getToken(WatParser.MEMORY, 0); } - public MemoryFieldContext memoryField() { - return getRuleContext(MemoryFieldContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public BindVarContext bindVar() { - return getRuleContext(BindVarContext.class,0); - } - public MemoryContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_memory; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterMemory(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitMemory(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitMemory(this); - else return visitor.visitChildren(this); - } - } - - public final MemoryContext memory() throws RecognitionException { - MemoryContext _localctx = new MemoryContext(_ctx, getState()); - enterRule(_localctx, 98, RULE_memory); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(702); - match(LPAR); - setState(703); - match(MEMORY); - setState(705); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(704); - bindVar(); - } - } - - setState(707); - memoryField(); - setState(708); - match(RPAR); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class MemoryFieldContext extends ParserRuleContext { - public MemoryTypeContext memoryType() { - return getRuleContext(MemoryTypeContext.class,0); - } - public InlineImportContext inlineImport() { - return getRuleContext(InlineImportContext.class,0); - } - public InlineExportContext inlineExport() { - return getRuleContext(InlineExportContext.class,0); - } - public MemoryFieldContext memoryField() { - return getRuleContext(MemoryFieldContext.class,0); - } - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode DATA() { return getToken(WatParser.DATA, 0); } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public List STRING_() { return getTokens(WatParser.STRING_); } - public TerminalNode STRING_(int i) { - return getToken(WatParser.STRING_, i); - } - public MemoryFieldContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_memoryField; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterMemoryField(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitMemoryField(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitMemoryField(this); - else return visitor.visitChildren(this); - } - } - - public final MemoryFieldContext memoryField() throws RecognitionException { - MemoryFieldContext _localctx = new MemoryFieldContext(_ctx, getState()); - enterRule(_localctx, 100, RULE_memoryField); - int _la; - try { - setState(726); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,78,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(710); - memoryType(); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(711); - inlineImport(); - setState(712); - memoryType(); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(714); - inlineExport(); - setState(715); - memoryField(); - } - break; - case 4: - enterOuterAlt(_localctx, 4); - { - setState(717); - match(LPAR); - setState(718); - match(DATA); - setState(722); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==STRING_) { - { - { - setState(719); - match(STRING_); - } - } - setState(724); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(725); - match(RPAR); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class GlobalContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode GLOBAL() { return getToken(WatParser.GLOBAL, 0); } - public GlobalFieldContext globalField() { - return getRuleContext(GlobalFieldContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public BindVarContext bindVar() { - return getRuleContext(BindVarContext.class,0); - } - public GlobalContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_global; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterGlobal(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitGlobal(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitGlobal(this); - else return visitor.visitChildren(this); - } - } - - public final GlobalContext global() throws RecognitionException { - GlobalContext _localctx = new GlobalContext(_ctx, getState()); - enterRule(_localctx, 102, RULE_global); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(728); - match(LPAR); - setState(729); - match(GLOBAL); - setState(731); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(730); - bindVar(); - } - } - - setState(733); - globalField(); - setState(734); - match(RPAR); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class GlobalFieldContext extends ParserRuleContext { - public GlobalTypeContext globalType() { - return getRuleContext(GlobalTypeContext.class,0); - } - public ConstExprContext constExpr() { - return getRuleContext(ConstExprContext.class,0); - } - public InlineImportContext inlineImport() { - return getRuleContext(InlineImportContext.class,0); - } - public InlineExportContext inlineExport() { - return getRuleContext(InlineExportContext.class,0); - } - public GlobalFieldContext globalField() { - return getRuleContext(GlobalFieldContext.class,0); - } - public GlobalFieldContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_globalField; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterGlobalField(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitGlobalField(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitGlobalField(this); - else return visitor.visitChildren(this); - } - } - - public final GlobalFieldContext globalField() throws RecognitionException { - GlobalFieldContext _localctx = new GlobalFieldContext(_ctx, getState()); - enterRule(_localctx, 104, RULE_globalField); - try { - setState(745); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,80,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(736); - globalType(); - setState(737); - constExpr(); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(739); - inlineImport(); - setState(740); - globalType(); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(742); - inlineExport(); - setState(743); - globalField(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class ImportDescContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode FUNC() { return getToken(WatParser.FUNC, 0); } - public TypeUseContext typeUse() { - return getRuleContext(TypeUseContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public BindVarContext bindVar() { - return getRuleContext(BindVarContext.class,0); - } - public FuncTypeContext funcType() { - return getRuleContext(FuncTypeContext.class,0); - } - public TerminalNode TABLE() { return getToken(WatParser.TABLE, 0); } - public TableTypeContext tableType() { - return getRuleContext(TableTypeContext.class,0); - } - public TerminalNode MEMORY() { return getToken(WatParser.MEMORY, 0); } - public MemoryTypeContext memoryType() { - return getRuleContext(MemoryTypeContext.class,0); - } - public TerminalNode GLOBAL() { return getToken(WatParser.GLOBAL, 0); } - public GlobalTypeContext globalType() { - return getRuleContext(GlobalTypeContext.class,0); - } - public ImportDescContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_importDesc; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterImportDesc(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitImportDesc(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitImportDesc(this); - else return visitor.visitChildren(this); - } - } - - public final ImportDescContext importDesc() throws RecognitionException { - ImportDescContext _localctx = new ImportDescContext(_ctx, getState()); - enterRule(_localctx, 106, RULE_importDesc); - int _la; - try { - setState(787); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,86,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(747); - match(LPAR); - setState(748); - match(FUNC); - setState(750); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(749); - bindVar(); - } - } - - setState(752); - typeUse(); - setState(753); - match(RPAR); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(755); - match(LPAR); - setState(756); - match(FUNC); - setState(758); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(757); - bindVar(); - } - } - - setState(760); - funcType(); - setState(761); - match(RPAR); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(763); - match(LPAR); - setState(764); - match(TABLE); - setState(766); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(765); - bindVar(); - } - } - - setState(768); - tableType(); - setState(769); - match(RPAR); - } - break; - case 4: - enterOuterAlt(_localctx, 4); - { - setState(771); - match(LPAR); - setState(772); - match(MEMORY); - setState(774); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(773); - bindVar(); - } - } - - setState(776); - memoryType(); - setState(777); - match(RPAR); - } - break; - case 5: - enterOuterAlt(_localctx, 5); - { - setState(779); - match(LPAR); - setState(780); - match(GLOBAL); - setState(782); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(781); - bindVar(); - } - } - - setState(784); - globalType(); - setState(785); - match(RPAR); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class SimportContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode IMPORT() { return getToken(WatParser.IMPORT, 0); } - public List name() { - return getRuleContexts(NameContext.class); - } - public NameContext name(int i) { - return getRuleContext(NameContext.class,i); - } - public ImportDescContext importDesc() { - return getRuleContext(ImportDescContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public SimportContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_simport; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterSimport(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitSimport(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitSimport(this); - else return visitor.visitChildren(this); - } - } - - public final SimportContext simport() throws RecognitionException { - SimportContext _localctx = new SimportContext(_ctx, getState()); - enterRule(_localctx, 108, RULE_simport); - try { - enterOuterAlt(_localctx, 1); - { - setState(789); - match(LPAR); - setState(790); - match(IMPORT); - setState(791); - name(); - setState(792); - name(); - setState(793); - importDesc(); - setState(794); - match(RPAR); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class InlineImportContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode IMPORT() { return getToken(WatParser.IMPORT, 0); } - public List name() { - return getRuleContexts(NameContext.class); - } - public NameContext name(int i) { - return getRuleContext(NameContext.class,i); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public InlineImportContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_inlineImport; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterInlineImport(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitInlineImport(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitInlineImport(this); - else return visitor.visitChildren(this); - } - } - - public final InlineImportContext inlineImport() throws RecognitionException { - InlineImportContext _localctx = new InlineImportContext(_ctx, getState()); - enterRule(_localctx, 110, RULE_inlineImport); - try { - enterOuterAlt(_localctx, 1); - { - setState(796); - match(LPAR); - setState(797); - match(IMPORT); - setState(798); - name(); - setState(799); - name(); - setState(800); - match(RPAR); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class ExportDescContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode FUNC() { return getToken(WatParser.FUNC, 0); } - public IdxContext idx() { - return getRuleContext(IdxContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public TerminalNode TABLE() { return getToken(WatParser.TABLE, 0); } - public TerminalNode MEMORY() { return getToken(WatParser.MEMORY, 0); } - public TerminalNode GLOBAL() { return getToken(WatParser.GLOBAL, 0); } - public ExportDescContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_exportDesc; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterExportDesc(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitExportDesc(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitExportDesc(this); - else return visitor.visitChildren(this); - } - } - - public final ExportDescContext exportDesc() throws RecognitionException { - ExportDescContext _localctx = new ExportDescContext(_ctx, getState()); - enterRule(_localctx, 112, RULE_exportDesc); - try { - setState(822); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,87,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(802); - match(LPAR); - setState(803); - match(FUNC); - setState(804); - idx(); - setState(805); - match(RPAR); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(807); - match(LPAR); - setState(808); - match(TABLE); - setState(809); - idx(); - setState(810); - match(RPAR); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(812); - match(LPAR); - setState(813); - match(MEMORY); - setState(814); - idx(); - setState(815); - match(RPAR); - } - break; - case 4: - enterOuterAlt(_localctx, 4); - { - setState(817); - match(LPAR); - setState(818); - match(GLOBAL); - setState(819); - idx(); - setState(820); - match(RPAR); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class Export_Context extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode EXPORT() { return getToken(WatParser.EXPORT, 0); } - public NameContext name() { - return getRuleContext(NameContext.class,0); - } - public ExportDescContext exportDesc() { - return getRuleContext(ExportDescContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public Export_Context(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_export_; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterExport_(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitExport_(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitExport_(this); - else return visitor.visitChildren(this); - } - } - - public final Export_Context export_() throws RecognitionException { - Export_Context _localctx = new Export_Context(_ctx, getState()); - enterRule(_localctx, 114, RULE_export_); - try { - enterOuterAlt(_localctx, 1); - { - setState(824); - match(LPAR); - setState(825); - match(EXPORT); - setState(826); - name(); - setState(827); - exportDesc(); - setState(828); - match(RPAR); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class InlineExportContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode EXPORT() { return getToken(WatParser.EXPORT, 0); } - public NameContext name() { - return getRuleContext(NameContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public InlineExportContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_inlineExport; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterInlineExport(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitInlineExport(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitInlineExport(this); - else return visitor.visitChildren(this); - } - } - - public final InlineExportContext inlineExport() throws RecognitionException { - InlineExportContext _localctx = new InlineExportContext(_ctx, getState()); - enterRule(_localctx, 116, RULE_inlineExport); - try { - enterOuterAlt(_localctx, 1); - { - setState(830); - match(LPAR); - setState(831); - match(EXPORT); - setState(832); - name(); - setState(833); - match(RPAR); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class TypeDefContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode TYPE() { return getToken(WatParser.TYPE, 0); } - public DefTypeContext defType() { - return getRuleContext(DefTypeContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public BindVarContext bindVar() { - return getRuleContext(BindVarContext.class,0); - } - public TypeDefContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_typeDef; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterTypeDef(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTypeDef(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTypeDef(this); - else return visitor.visitChildren(this); - } - } - - public final TypeDefContext typeDef() throws RecognitionException { - TypeDefContext _localctx = new TypeDefContext(_ctx, getState()); - enterRule(_localctx, 118, RULE_typeDef); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(835); - match(LPAR); - setState(836); - match(TYPE); - setState(838); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(837); - bindVar(); - } - } - - setState(840); - defType(); - setState(841); - match(RPAR); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class Start_Context extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode START_() { return getToken(WatParser.START_, 0); } - public IdxContext idx() { - return getRuleContext(IdxContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public Start_Context(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_start_; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterStart_(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitStart_(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitStart_(this); - else return visitor.visitChildren(this); - } - } - - public final Start_Context start_() throws RecognitionException { - Start_Context _localctx = new Start_Context(_ctx, getState()); - enterRule(_localctx, 120, RULE_start_); - try { - enterOuterAlt(_localctx, 1); - { - setState(843); - match(LPAR); - setState(844); - match(START_); - setState(845); - idx(); - setState(846); - match(RPAR); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class ModuleFieldContext extends ParserRuleContext { - public TypeDefContext typeDef() { - return getRuleContext(TypeDefContext.class,0); - } - public GlobalContext global() { - return getRuleContext(GlobalContext.class,0); - } - public TableContext table() { - return getRuleContext(TableContext.class,0); - } - public MemoryContext memory() { - return getRuleContext(MemoryContext.class,0); - } - public FunctionContext function() { - return getRuleContext(FunctionContext.class,0); - } - public ElemContext elem() { - return getRuleContext(ElemContext.class,0); - } - public DataContext data() { - return getRuleContext(DataContext.class,0); - } - public Start_Context start_() { - return getRuleContext(Start_Context.class,0); - } - public SimportContext simport() { - return getRuleContext(SimportContext.class,0); - } - public Export_Context export_() { - return getRuleContext(Export_Context.class,0); - } - public ModuleFieldContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_moduleField; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterModuleField(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitModuleField(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitModuleField(this); - else return visitor.visitChildren(this); - } - } - - public final ModuleFieldContext moduleField() throws RecognitionException { - ModuleFieldContext _localctx = new ModuleFieldContext(_ctx, getState()); - enterRule(_localctx, 122, RULE_moduleField); - try { - setState(858); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,89,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(848); - typeDef(); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(849); - global(); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(850); - table(); - } - break; - case 4: - enterOuterAlt(_localctx, 4); - { - setState(851); - memory(); - } - break; - case 5: - enterOuterAlt(_localctx, 5); - { - setState(852); - function(); - } - break; - case 6: - enterOuterAlt(_localctx, 6); - { - setState(853); - elem(); - } - break; - case 7: - enterOuterAlt(_localctx, 7); - { - setState(854); - data(); - } - break; - case 8: - enterOuterAlt(_localctx, 8); - { - setState(855); - start_(); - } - break; - case 9: - enterOuterAlt(_localctx, 9); - { - setState(856); - simport(); - } - break; - case 10: - enterOuterAlt(_localctx, 10); - { - setState(857); - export_(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class Module_Context extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode MODULE() { return getToken(WatParser.MODULE, 0); } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public TerminalNode VAR() { return getToken(WatParser.VAR, 0); } - public List moduleField() { - return getRuleContexts(ModuleFieldContext.class); - } - public ModuleFieldContext moduleField(int i) { - return getRuleContext(ModuleFieldContext.class,i); - } - public Module_Context(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_module_; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterModule_(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitModule_(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitModule_(this); - else return visitor.visitChildren(this); - } - } - - public final Module_Context module_() throws RecognitionException { - Module_Context _localctx = new Module_Context(_ctx, getState()); - enterRule(_localctx, 124, RULE_module_); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(860); - match(LPAR); - setState(861); - match(MODULE); - setState(863); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(862); - match(VAR); - } - } - - setState(868); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==LPAR) { - { - { - setState(865); - moduleField(); - } - } - setState(870); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(871); - match(RPAR); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class ScriptModuleContext extends ParserRuleContext { - public Module_Context module_() { - return getRuleContext(Module_Context.class,0); - } - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode MODULE() { return getToken(WatParser.MODULE, 0); } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public TerminalNode BIN() { return getToken(WatParser.BIN, 0); } - public TerminalNode QUOTE() { return getToken(WatParser.QUOTE, 0); } - public TerminalNode VAR() { return getToken(WatParser.VAR, 0); } - public List STRING_() { return getTokens(WatParser.STRING_); } - public TerminalNode STRING_(int i) { - return getToken(WatParser.STRING_, i); - } - public ScriptModuleContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_scriptModule; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterScriptModule(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitScriptModule(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitScriptModule(this); - else return visitor.visitChildren(this); - } - } - - public final ScriptModuleContext scriptModule() throws RecognitionException { - ScriptModuleContext _localctx = new ScriptModuleContext(_ctx, getState()); - enterRule(_localctx, 126, RULE_scriptModule); - int _la; - try { - setState(887); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,94,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(873); - module_(); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(874); - match(LPAR); - setState(875); - match(MODULE); - setState(877); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(876); - match(VAR); - } - } - - setState(879); - _la = _input.LA(1); - if ( !(_la==BIN || _la==QUOTE) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - setState(883); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==STRING_) { - { - { - setState(880); - match(STRING_); - } - } - setState(885); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(886); - match(RPAR); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class Action_Context extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode INVOKE() { return getToken(WatParser.INVOKE, 0); } - public NameContext name() { - return getRuleContext(NameContext.class,0); - } - public ConstListContext constList() { - return getRuleContext(ConstListContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public TerminalNode VAR() { return getToken(WatParser.VAR, 0); } - public TerminalNode GET() { return getToken(WatParser.GET, 0); } - public Action_Context(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_action_; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterAction_(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitAction_(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitAction_(this); - else return visitor.visitChildren(this); - } - } - - public final Action_Context action_() throws RecognitionException { - Action_Context _localctx = new Action_Context(_ctx, getState()); - enterRule(_localctx, 128, RULE_action_); - int _la; - try { - setState(906); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,97,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(889); - match(LPAR); - setState(890); - match(INVOKE); - setState(892); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(891); - match(VAR); - } - } - - setState(894); - name(); - setState(895); - constList(); - setState(896); - match(RPAR); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(898); - match(LPAR); - setState(899); - match(GET); - setState(901); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(900); - match(VAR); - } - } - - setState(903); - name(); - setState(904); - match(RPAR); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class AssertionContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode ASSERT_MALFORMED() { return getToken(WatParser.ASSERT_MALFORMED, 0); } - public ScriptModuleContext scriptModule() { - return getRuleContext(ScriptModuleContext.class,0); - } - public TerminalNode STRING_() { return getToken(WatParser.STRING_, 0); } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public TerminalNode ASSERT_INVALID() { return getToken(WatParser.ASSERT_INVALID, 0); } - public TerminalNode ASSERT_UNLINKABLE() { return getToken(WatParser.ASSERT_UNLINKABLE, 0); } - public TerminalNode ASSERT_TRAP() { return getToken(WatParser.ASSERT_TRAP, 0); } - public TerminalNode ASSERT_RETURN() { return getToken(WatParser.ASSERT_RETURN, 0); } - public Action_Context action_() { - return getRuleContext(Action_Context.class,0); - } - public ConstListContext constList() { - return getRuleContext(ConstListContext.class,0); - } - public TerminalNode ASSERT_RETURN_CANONICAL_NAN() { return getToken(WatParser.ASSERT_RETURN_CANONICAL_NAN, 0); } - public TerminalNode ASSERT_RETURN_ARITHMETIC_NAN() { return getToken(WatParser.ASSERT_RETURN_ARITHMETIC_NAN, 0); } - public TerminalNode ASSERT_EXHAUSTION() { return getToken(WatParser.ASSERT_EXHAUSTION, 0); } - public AssertionContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_assertion; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterAssertion(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitAssertion(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitAssertion(this); - else return visitor.visitChildren(this); - } - } - - public final AssertionContext assertion() throws RecognitionException { - AssertionContext _localctx = new AssertionContext(_ctx, getState()); - enterRule(_localctx, 130, RULE_assertion); - try { - setState(960); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,98,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(908); - match(LPAR); - setState(909); - match(ASSERT_MALFORMED); - setState(910); - scriptModule(); - setState(911); - match(STRING_); - setState(912); - match(RPAR); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(914); - match(LPAR); - setState(915); - match(ASSERT_INVALID); - setState(916); - scriptModule(); - setState(917); - match(STRING_); - setState(918); - match(RPAR); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(920); - match(LPAR); - setState(921); - match(ASSERT_UNLINKABLE); - setState(922); - scriptModule(); - setState(923); - match(STRING_); - setState(924); - match(RPAR); - } - break; - case 4: - enterOuterAlt(_localctx, 4); - { - setState(926); - match(LPAR); - setState(927); - match(ASSERT_TRAP); - setState(928); - scriptModule(); - setState(929); - match(STRING_); - setState(930); - match(RPAR); - } - break; - case 5: - enterOuterAlt(_localctx, 5); - { - setState(932); - match(LPAR); - setState(933); - match(ASSERT_RETURN); - setState(934); - action_(); - setState(935); - constList(); - setState(936); - match(RPAR); - } - break; - case 6: - enterOuterAlt(_localctx, 6); - { - setState(938); - match(LPAR); - setState(939); - match(ASSERT_RETURN_CANONICAL_NAN); - setState(940); - action_(); - setState(941); - match(RPAR); - } - break; - case 7: - enterOuterAlt(_localctx, 7); - { - setState(943); - match(LPAR); - setState(944); - match(ASSERT_RETURN_ARITHMETIC_NAN); - setState(945); - action_(); - setState(946); - match(RPAR); - } - break; - case 8: - enterOuterAlt(_localctx, 8); - { - setState(948); - match(LPAR); - setState(949); - match(ASSERT_TRAP); - setState(950); - action_(); - setState(951); - match(STRING_); - setState(952); - match(RPAR); - } - break; - case 9: - enterOuterAlt(_localctx, 9); - { - setState(954); - match(LPAR); - setState(955); - match(ASSERT_EXHAUSTION); - setState(956); - action_(); - setState(957); - match(STRING_); - setState(958); - match(RPAR); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class CmdContext extends ParserRuleContext { - public Action_Context action_() { - return getRuleContext(Action_Context.class,0); - } - public AssertionContext assertion() { - return getRuleContext(AssertionContext.class,0); - } - public ScriptModuleContext scriptModule() { - return getRuleContext(ScriptModuleContext.class,0); - } - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode REGISTER() { return getToken(WatParser.REGISTER, 0); } - public NameContext name() { - return getRuleContext(NameContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public TerminalNode VAR() { return getToken(WatParser.VAR, 0); } - public MetaContext meta() { - return getRuleContext(MetaContext.class,0); - } - public CmdContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_cmd; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterCmd(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCmd(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCmd(this); - else return visitor.visitChildren(this); - } - } - - public final CmdContext cmd() throws RecognitionException { - CmdContext _localctx = new CmdContext(_ctx, getState()); - enterRule(_localctx, 132, RULE_cmd); - int _la; - try { - setState(974); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,100,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(962); - action_(); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(963); - assertion(); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(964); - scriptModule(); - } - break; - case 4: - enterOuterAlt(_localctx, 4); - { - setState(965); - match(LPAR); - setState(966); - match(REGISTER); - setState(967); - name(); - setState(969); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(968); - match(VAR); - } - } - - setState(971); - match(RPAR); - } - break; - case 5: - enterOuterAlt(_localctx, 5); - { - setState(973); - meta(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class MetaContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode SCRIPT() { return getToken(WatParser.SCRIPT, 0); } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public TerminalNode VAR() { return getToken(WatParser.VAR, 0); } - public List cmd() { - return getRuleContexts(CmdContext.class); - } - public CmdContext cmd(int i) { - return getRuleContext(CmdContext.class,i); - } - public TerminalNode INPUT() { return getToken(WatParser.INPUT, 0); } - public TerminalNode STRING_() { return getToken(WatParser.STRING_, 0); } - public TerminalNode OUTPUT() { return getToken(WatParser.OUTPUT, 0); } - public MetaContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_meta; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterMeta(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitMeta(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitMeta(this); - else return visitor.visitChildren(this); - } - } - - public final MetaContext meta() throws RecognitionException { - MetaContext _localctx = new MetaContext(_ctx, getState()); - enterRule(_localctx, 134, RULE_meta); - int _la; - try { - setState(1008); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,106,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(976); - match(LPAR); - setState(977); - match(SCRIPT); - setState(979); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(978); - match(VAR); - } - } - - setState(984); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==LPAR) { - { - { - setState(981); - cmd(); - } - } - setState(986); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(987); - match(RPAR); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(988); - match(LPAR); - setState(989); - match(INPUT); - setState(991); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(990); - match(VAR); - } - } - - setState(993); - match(STRING_); - setState(994); - match(RPAR); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(995); - match(LPAR); - setState(996); - match(OUTPUT); - setState(998); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(997); - match(VAR); - } - } - - setState(1000); - match(STRING_); - setState(1001); - match(RPAR); - } - break; - case 4: - enterOuterAlt(_localctx, 4); - { - setState(1002); - match(LPAR); - setState(1003); - match(OUTPUT); - setState(1005); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==VAR) { - { - setState(1004); - match(VAR); - } - } - - setState(1007); - match(RPAR); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class WconstContext extends ParserRuleContext { - public TerminalNode LPAR() { return getToken(WatParser.LPAR, 0); } - public TerminalNode CONST() { return getToken(WatParser.CONST, 0); } - public LiteralContext literal() { - return getRuleContext(LiteralContext.class,0); - } - public TerminalNode RPAR() { return getToken(WatParser.RPAR, 0); } - public WconstContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_wconst; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterWconst(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitWconst(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitWconst(this); - else return visitor.visitChildren(this); - } - } - - public final WconstContext wconst() throws RecognitionException { - WconstContext _localctx = new WconstContext(_ctx, getState()); - enterRule(_localctx, 136, RULE_wconst); - try { - enterOuterAlt(_localctx, 1); - { - setState(1010); - match(LPAR); - setState(1011); - match(CONST); - setState(1012); - literal(); - setState(1013); - match(RPAR); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class ConstListContext extends ParserRuleContext { - public List wconst() { - return getRuleContexts(WconstContext.class); - } - public WconstContext wconst(int i) { - return getRuleContext(WconstContext.class,i); - } - public ConstListContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_constList; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterConstList(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitConstList(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitConstList(this); - else return visitor.visitChildren(this); - } - } - - public final ConstListContext constList() throws RecognitionException { - ConstListContext _localctx = new ConstListContext(_ctx, getState()); - enterRule(_localctx, 138, RULE_constList); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(1018); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==LPAR) { - { - { - setState(1015); - wconst(); - } - } - setState(1020); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class ScriptContext extends ParserRuleContext { - public TerminalNode EOF() { return getToken(WatParser.EOF, 0); } - public List cmd() { - return getRuleContexts(CmdContext.class); - } - public CmdContext cmd(int i) { - return getRuleContext(CmdContext.class,i); - } - public List moduleField() { - return getRuleContexts(ModuleFieldContext.class); - } - public ModuleFieldContext moduleField(int i) { - return getRuleContext(ModuleFieldContext.class,i); - } - public ScriptContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_script; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterScript(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitScript(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitScript(this); - else return visitor.visitChildren(this); - } - } - - public final ScriptContext script() throws RecognitionException { - ScriptContext _localctx = new ScriptContext(_ctx, getState()); - enterRule(_localctx, 140, RULE_script); - int _la; - try { - setState(1035); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,110,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(1024); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==LPAR) { - { - { - setState(1021); - cmd(); - } - } - setState(1026); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(1027); - match(EOF); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(1029); - _errHandler.sync(this); - _la = _input.LA(1); - do { - { - { - setState(1028); - moduleField(); - } - } - setState(1031); - _errHandler.sync(this); - _la = _input.LA(1); - } while ( _la==LPAR ); - setState(1033); - match(EOF); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - @SuppressWarnings("CheckReturnValue") - public static class ModuleContext extends ParserRuleContext { - public Module_Context module_() { - return getRuleContext(Module_Context.class,0); - } - public TerminalNode EOF() { return getToken(WatParser.EOF, 0); } - public List moduleField() { - return getRuleContexts(ModuleFieldContext.class); - } - public ModuleFieldContext moduleField(int i) { - return getRuleContext(ModuleFieldContext.class,i); - } - public ModuleContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_module; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).enterModule(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitModule(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitModule(this); - else return visitor.visitChildren(this); - } - } - - public final ModuleContext module() throws RecognitionException { - ModuleContext _localctx = new ModuleContext(_ctx, getState()); - enterRule(_localctx, 142, RULE_module); - int _la; - try { - setState(1047); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,112,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(1037); - module_(); - setState(1038); - match(EOF); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(1043); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==LPAR) { - { - { - setState(1040); - moduleField(); - } - } - setState(1045); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(1046); - match(EOF); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static final String _serializedATN = - "\u0004\u0001\u0097\u041a\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001"+ - "\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004"+ - "\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007"+ - "\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b"+ - "\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007"+ - "\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007"+ - "\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007"+ - "\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007"+ - "\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007"+ - "\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007"+ - "\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007"+ - "\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007"+ - "\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007"+ - ",\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u00070\u00021\u0007"+ - "1\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u00075\u00026\u0007"+ - "6\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007:\u0002;\u0007"+ - ";\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007?\u0002@\u0007"+ - "@\u0002A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007D\u0002E\u0007"+ - "E\u0002F\u0007F\u0002G\u0007G\u0001\u0000\u0001\u0000\u0001\u0001\u0001"+ - "\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001"+ - "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0003\u0005\u009e\b\u0005\u0001"+ - "\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+ - "\u0007\u0001\u0007\u0003\u0007\u00a8\b\u0007\u0001\b\u0001\b\u0001\b\u0001"+ - "\b\u0001\b\u0001\t\u0001\t\u0001\t\u0005\t\u00b2\b\t\n\t\f\t\u00b5\t\t"+ - "\u0001\t\u0001\t\u0001\t\u0003\t\u00ba\b\t\u0001\t\u0005\t\u00bd\b\t\n"+ - "\t\f\t\u00c0\t\t\u0001\n\u0001\n\u0001\n\u0005\n\u00c5\b\n\n\n\f\n\u00c8"+ - "\t\n\u0001\n\u0005\n\u00cb\b\n\n\n\f\n\u00ce\t\n\u0001\u000b\u0001\u000b"+ - "\u0001\u000b\u0001\f\u0001\f\u0003\f\u00d5\b\f\u0001\f\u0001\f\u0001\r"+ - "\u0001\r\u0003\r\u00db\b\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+ - "\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0011"+ - "\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0003\u0012"+ - "\u00ec\b\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+ - "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014"+ - "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ - "\u0001\u0014\u0001\u0014\u0001\u0014\u0004\u0014\u0102\b\u0014\u000b\u0014"+ - "\f\u0014\u0103\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ - "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ - "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ - "\u0003\u0014\u0117\b\u0014\u0001\u0014\u0003\u0014\u011a\b\u0014\u0001"+ - "\u0014\u0001\u0014\u0003\u0014\u011e\b\u0014\u0001\u0014\u0003\u0014\u0121"+ - "\b\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ - "\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ - "\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ - "\u0014\u0003\u0014\u0135\b\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001"+ - "\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+ - "\u0017\u0001\u0017\u0003\u0017\u0142\b\u0017\u0001\u0018\u0001\u0018\u0001"+ - "\u0018\u0003\u0018\u0147\b\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ - "\u001a\u0001\u001a\u0003\u001a\u014e\b\u001a\u0001\u001a\u0001\u001a\u0001"+ - "\u001a\u0003\u001a\u0153\b\u001a\u0001\u001a\u0003\u001a\u0156\b\u001a"+ - "\u0001\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u015b\b\u001b\n\u001b"+ - "\f\u001b\u015e\t\u001b\u0001\u001b\u0005\u001b\u0161\b\u001b\n\u001b\f"+ - "\u001b\u0164\t\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u0169"+ - "\b\u001b\n\u001b\f\u001b\u016c\t\u001b\u0001\u001b\u0005\u001b\u016f\b"+ - "\u001b\n\u001b\f\u001b\u0172\t\u001b\u0001\u001c\u0001\u001c\u0001\u001c"+ - "\u0005\u001c\u0177\b\u001c\n\u001c\f\u001c\u017a\t\u001c\u0001\u001c\u0005"+ - "\u001c\u017d\b\u001c\n\u001c\f\u001c\u0180\t\u001c\u0001\u001c\u0001\u001c"+ - "\u0001\u001d\u0001\u001d\u0001\u001d\u0005\u001d\u0187\b\u001d\n\u001d"+ - "\f\u001d\u018a\t\u001d\u0001\u001d\u0005\u001d\u018d\b\u001d\n\u001d\f"+ - "\u001d\u0190\t\u001d\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0003"+ - "\u001e\u0196\b\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0003\u001e\u019b"+ - "\b\u001e\u0001\u001e\u0001\u001e\u0003\u001e\u019f\b\u001e\u0001\u001e"+ - "\u0001\u001e\u0001\u001e\u0003\u001e\u01a4\b\u001e\u0001\u001e\u0001\u001e"+ - "\u0003\u001e\u01a8\b\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0003\u001e"+ - "\u01ad\b\u001e\u0001\u001e\u0003\u001e\u01b0\b\u001e\u0001\u001e\u0001"+ - "\u001e\u0003\u001e\u01b4\b\u001e\u0003\u001e\u01b6\b\u001e\u0001\u001f"+ - "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0003\u001f\u01bd\b\u001f"+ - "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0003\u001f\u01c3\b\u001f"+ - "\u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001!\u0001\"\u0001\"\u0005"+ - "\"\u01ce\b\"\n\"\f\"\u01d1\t\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\""+ - "\u0001\"\u0003\"\u01d9\b\"\u0001\"\u0001\"\u0001\"\u0003\"\u01de\b\"\u0001"+ - "\"\u0001\"\u0001\"\u0003\"\u01e3\b\"\u0001\"\u0001\"\u0005\"\u01e7\b\""+ - "\n\"\f\"\u01ea\t\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+ - "\"\u0001\"\u0003\"\u01f4\b\"\u0003\"\u01f6\b\"\u0001#\u0003#\u01f9\b#"+ - "\u0001#\u0001#\u0001$\u0001$\u0001$\u0005$\u0200\b$\n$\f$\u0203\t$\u0001"+ - "$\u0005$\u0206\b$\n$\f$\u0209\t$\u0001$\u0001$\u0001%\u0001%\u0001%\u0005"+ - "%\u0210\b%\n%\f%\u0213\t%\u0001%\u0005%\u0216\b%\n%\f%\u0219\t%\u0001"+ - "%\u0005%\u021c\b%\n%\f%\u021f\t%\u0001&\u0005&\u0222\b&\n&\f&\u0225\t"+ - "&\u0001&\u0003&\u0228\b&\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0003(\u022f"+ - "\b(\u0001(\u0001(\u0001(\u0001)\u0003)\u0235\b)\u0001)\u0001)\u0001)\u0003"+ - ")\u023a\b)\u0001)\u0001)\u0001)\u0001)\u0001)\u0003)\u0241\b)\u0001*\u0001"+ - "*\u0001*\u0001+\u0001+\u0001+\u0005+\u0249\b+\n+\f+\u024c\t+\u0001+\u0001"+ - "+\u0001+\u0003+\u0251\b+\u0001+\u0005+\u0254\b+\n+\f+\u0257\t+\u0001+"+ - "\u0001+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0003,\u0261\b,\u0001"+ - "-\u0001-\u0001-\u0003-\u0266\b-\u0001-\u0001-\u0001-\u0001-\u0005-\u026c"+ - "\b-\n-\f-\u026f\t-\u0001-\u0001-\u0001-\u0001-\u0001-\u0003-\u0276\b-"+ - "\u0001-\u0001-\u0005-\u027a\b-\n-\f-\u027d\t-\u0001-\u0001-\u0003-\u0281"+ - "\b-\u0001.\u0001.\u0001.\u0003.\u0286\b.\u0001.\u0001.\u0001.\u0001/\u0001"+ - "/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0005"+ - "/\u0296\b/\n/\f/\u0299\t/\u0001/\u0001/\u0003/\u029d\b/\u00010\u00010"+ - "\u00010\u00030\u02a2\b0\u00010\u00010\u00010\u00010\u00050\u02a8\b0\n"+ - "0\f0\u02ab\t0\u00010\u00010\u00010\u00010\u00010\u00030\u02b2\b0\u0001"+ - "0\u00010\u00050\u02b6\b0\n0\f0\u02b9\t0\u00010\u00010\u00030\u02bd\b0"+ - "\u00011\u00011\u00011\u00031\u02c2\b1\u00011\u00011\u00011\u00012\u0001"+ - "2\u00012\u00012\u00012\u00012\u00012\u00012\u00012\u00012\u00052\u02d1"+ - "\b2\n2\f2\u02d4\t2\u00012\u00032\u02d7\b2\u00013\u00013\u00013\u00033"+ - "\u02dc\b3\u00013\u00013\u00013\u00014\u00014\u00014\u00014\u00014\u0001"+ - "4\u00014\u00014\u00014\u00034\u02ea\b4\u00015\u00015\u00015\u00035\u02ef"+ - "\b5\u00015\u00015\u00015\u00015\u00015\u00015\u00035\u02f7\b5\u00015\u0001"+ - "5\u00015\u00015\u00015\u00015\u00035\u02ff\b5\u00015\u00015\u00015\u0001"+ - "5\u00015\u00015\u00035\u0307\b5\u00015\u00015\u00015\u00015\u00015\u0001"+ - "5\u00035\u030f\b5\u00015\u00015\u00015\u00035\u0314\b5\u00016\u00016\u0001"+ - "6\u00016\u00016\u00016\u00016\u00017\u00017\u00017\u00017\u00017\u0001"+ - "7\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ - "8\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ - "8\u00038\u0337\b8\u00019\u00019\u00019\u00019\u00019\u00019\u0001:\u0001"+ - ":\u0001:\u0001:\u0001:\u0001;\u0001;\u0001;\u0003;\u0347\b;\u0001;\u0001"+ - ";\u0001;\u0001<\u0001<\u0001<\u0001<\u0001<\u0001=\u0001=\u0001=\u0001"+ - "=\u0001=\u0001=\u0001=\u0001=\u0001=\u0001=\u0003=\u035b\b=\u0001>\u0001"+ - ">\u0001>\u0003>\u0360\b>\u0001>\u0005>\u0363\b>\n>\f>\u0366\t>\u0001>"+ - "\u0001>\u0001?\u0001?\u0001?\u0001?\u0003?\u036e\b?\u0001?\u0001?\u0005"+ - "?\u0372\b?\n?\f?\u0375\t?\u0001?\u0003?\u0378\b?\u0001@\u0001@\u0001@"+ - "\u0003@\u037d\b@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0003"+ - "@\u0386\b@\u0001@\u0001@\u0001@\u0003@\u038b\b@\u0001A\u0001A\u0001A\u0001"+ - "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+ - "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+ - "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+ - "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+ - "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0003A\u03c1"+ - "\bA\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0003B\u03ca\bB\u0001"+ - "B\u0001B\u0001B\u0003B\u03cf\bB\u0001C\u0001C\u0001C\u0003C\u03d4\bC\u0001"+ - "C\u0005C\u03d7\bC\nC\fC\u03da\tC\u0001C\u0001C\u0001C\u0001C\u0003C\u03e0"+ - "\bC\u0001C\u0001C\u0001C\u0001C\u0001C\u0003C\u03e7\bC\u0001C\u0001C\u0001"+ - "C\u0001C\u0001C\u0003C\u03ee\bC\u0001C\u0003C\u03f1\bC\u0001D\u0001D\u0001"+ - "D\u0001D\u0001D\u0001E\u0005E\u03f9\bE\nE\fE\u03fc\tE\u0001F\u0005F\u03ff"+ - "\bF\nF\fF\u0402\tF\u0001F\u0001F\u0004F\u0406\bF\u000bF\fF\u0407\u0001"+ - "F\u0001F\u0003F\u040c\bF\u0001G\u0001G\u0001G\u0001G\u0005G\u0412\bG\n"+ - "G\fG\u0415\tG\u0001G\u0003G\u0418\bG\u0001G\u0000\u0000H\u0000\u0002\u0004"+ - "\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e \""+ - "$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086"+ - "\u0088\u008a\u008c\u008e\u0000\u0006\u0001\u0000\u0004\u0005\u0001\u0000"+ - "\n\u000b\u0001\u0000uv\u0001\u0000\u0003\u0005\u0002\u0000\u0003\u0003"+ - "\u0094\u0094\u0001\u0000\u0084\u0085\u0489\u0000\u0090\u0001\u0000\u0000"+ - "\u0000\u0002\u0092\u0001\u0000\u0000\u0000\u0004\u0094\u0001\u0000\u0000"+ - "\u0000\u0006\u0096\u0001\u0000\u0000\u0000\b\u0098\u0001\u0000\u0000\u0000"+ - "\n\u009d\u0001\u0000\u0000\u0000\f\u009f\u0001\u0000\u0000\u0000\u000e"+ - "\u00a7\u0001\u0000\u0000\u0000\u0010\u00a9\u0001\u0000\u0000\u0000\u0012"+ - "\u00be\u0001\u0000\u0000\u0000\u0014\u00cc\u0001\u0000\u0000\u0000\u0016"+ - "\u00cf\u0001\u0000\u0000\u0000\u0018\u00d2\u0001\u0000\u0000\u0000\u001a"+ - "\u00d8\u0001\u0000\u0000\u0000\u001c\u00dc\u0001\u0000\u0000\u0000\u001e"+ - "\u00e1\u0001\u0000\u0000\u0000 \u00e3\u0001\u0000\u0000\u0000\"\u00e5"+ - "\u0001\u0000\u0000\u0000$\u00eb\u0001\u0000\u0000\u0000&\u00ed\u0001\u0000"+ - "\u0000\u0000(\u0134\u0001\u0000\u0000\u0000*\u0136\u0001\u0000\u0000\u0000"+ - ",\u0139\u0001\u0000\u0000\u0000.\u013c\u0001\u0000\u0000\u00000\u0143"+ - "\u0001\u0000\u0000\u00002\u0148\u0001\u0000\u0000\u00004\u0155\u0001\u0000"+ - "\u0000\u00006\u0162\u0001\u0000\u0000\u00008\u017e\u0001\u0000\u0000\u0000"+ - ":\u018e\u0001\u0000\u0000\u0000<\u01b5\u0001\u0000\u0000\u0000>\u01c2"+ - "\u0001\u0000\u0000\u0000@\u01c4\u0001\u0000\u0000\u0000B\u01c7\u0001\u0000"+ - "\u0000\u0000D\u01f5\u0001\u0000\u0000\u0000F\u01f8\u0001\u0000\u0000\u0000"+ - "H\u0207\u0001\u0000\u0000\u0000J\u0217\u0001\u0000\u0000\u0000L\u0223"+ - "\u0001\u0000\u0000\u0000N\u0229\u0001\u0000\u0000\u0000P\u022b\u0001\u0000"+ - "\u0000\u0000R\u0240\u0001\u0000\u0000\u0000T\u0242\u0001\u0000\u0000\u0000"+ - "V\u0255\u0001\u0000\u0000\u0000X\u0260\u0001\u0000\u0000\u0000Z\u0280"+ - "\u0001\u0000\u0000\u0000\\\u0282\u0001\u0000\u0000\u0000^\u029c\u0001"+ - "\u0000\u0000\u0000`\u02bc\u0001\u0000\u0000\u0000b\u02be\u0001\u0000\u0000"+ - "\u0000d\u02d6\u0001\u0000\u0000\u0000f\u02d8\u0001\u0000\u0000\u0000h"+ - "\u02e9\u0001\u0000\u0000\u0000j\u0313\u0001\u0000\u0000\u0000l\u0315\u0001"+ - "\u0000\u0000\u0000n\u031c\u0001\u0000\u0000\u0000p\u0336\u0001\u0000\u0000"+ - "\u0000r\u0338\u0001\u0000\u0000\u0000t\u033e\u0001\u0000\u0000\u0000v"+ - "\u0343\u0001\u0000\u0000\u0000x\u034b\u0001\u0000\u0000\u0000z\u035a\u0001"+ - "\u0000\u0000\u0000|\u035c\u0001\u0000\u0000\u0000~\u0377\u0001\u0000\u0000"+ - "\u0000\u0080\u038a\u0001\u0000\u0000\u0000\u0082\u03c0\u0001\u0000\u0000"+ - "\u0000\u0084\u03ce\u0001\u0000\u0000\u0000\u0086\u03f0\u0001\u0000\u0000"+ - "\u0000\u0088\u03f2\u0001\u0000\u0000\u0000\u008a\u03fa\u0001\u0000\u0000"+ - "\u0000\u008c\u040b\u0001\u0000\u0000\u0000\u008e\u0417\u0001\u0000\u0000"+ - "\u0000\u0090\u0091\u0007\u0000\u0000\u0000\u0091\u0001\u0001\u0000\u0000"+ - "\u0000\u0092\u0093\u0005\u0006\u0000\u0000\u0093\u0003\u0001\u0000\u0000"+ - "\u0000\u0094\u0095\u0005\u0007\u0000\u0000\u0095\u0005\u0001\u0000\u0000"+ - "\u0000\u0096\u0097\u0007\u0001\u0000\u0000\u0097\u0007\u0001\u0000\u0000"+ - "\u0000\u0098\u0099\u0005\u0095\u0000\u0000\u0099\t\u0001\u0000\u0000\u0000"+ - "\u009a\u009e\u0003\u0004\u0002\u0000\u009b\u009e\u0003\b\u0004\u0000\u009c"+ - "\u009e\u0003\u0006\u0003\u0000\u009d\u009a\u0001\u0000\u0000\u0000\u009d"+ - "\u009b\u0001\u0000\u0000\u0000\u009d\u009c\u0001\u0000\u0000\u0000\u009e"+ - "\u000b\u0001\u0000\u0000\u0000\u009f\u00a0\u0007\u0002\u0000\u0000\u00a0"+ - "\r\u0001\u0000\u0000\u0000\u00a1\u00a8\u0003\n\u0005\u0000\u00a2\u00a3"+ - "\u0005\u0001\u0000\u0000\u00a3\u00a4\u0005\f\u0000\u0000\u00a4\u00a5\u0003"+ - "\n\u0005\u0000\u00a5\u00a6\u0005\u0002\u0000\u0000\u00a6\u00a8\u0001\u0000"+ - "\u0000\u0000\u00a7\u00a1\u0001\u0000\u0000\u0000\u00a7\u00a2\u0001\u0000"+ - "\u0000\u0000\u00a8\u000f\u0001\u0000\u0000\u0000\u00a9\u00aa\u0005\u0001"+ - "\u0000\u0000\u00aa\u00ab\u0005u\u0000\u0000\u00ab\u00ac\u0003\u0016\u000b"+ - "\u0000\u00ac\u00ad\u0005\u0002\u0000\u0000\u00ad\u0011\u0001\u0000\u0000"+ - "\u0000\u00ae\u00af\u0005\u0001\u0000\u0000\u00af\u00b9\u0005x\u0000\u0000"+ - "\u00b0\u00b2\u0003\n\u0005\u0000\u00b1\u00b0\u0001\u0000\u0000\u0000\u00b2"+ - "\u00b5\u0001\u0000\u0000\u0000\u00b3\u00b1\u0001\u0000\u0000\u0000\u00b3"+ - "\u00b4\u0001\u0000\u0000\u0000\u00b4\u00ba\u0001\u0000\u0000\u0000\u00b5"+ - "\u00b3\u0001\u0000\u0000\u0000\u00b6\u00b7\u0003\"\u0011\u0000\u00b7\u00b8"+ - "\u0003\n\u0005\u0000\u00b8\u00ba\u0001\u0000\u0000\u0000\u00b9\u00b3\u0001"+ - "\u0000\u0000\u0000\u00b9\u00b6\u0001\u0000\u0000\u0000\u00ba\u00bb\u0001"+ - "\u0000\u0000\u0000\u00bb\u00bd\u0005\u0002\u0000\u0000\u00bc\u00ae\u0001"+ - "\u0000\u0000\u0000\u00bd\u00c0\u0001\u0000\u0000\u0000\u00be\u00bc\u0001"+ - "\u0000\u0000\u0000\u00be\u00bf\u0001\u0000\u0000\u0000\u00bf\u0013\u0001"+ - "\u0000\u0000\u0000\u00c0\u00be\u0001\u0000\u0000\u0000\u00c1\u00c2\u0005"+ - "\u0001\u0000\u0000\u00c2\u00c6\u0005y\u0000\u0000\u00c3\u00c5\u0003\n"+ - "\u0005\u0000\u00c4\u00c3\u0001\u0000\u0000\u0000\u00c5\u00c8\u0001\u0000"+ - "\u0000\u0000\u00c6\u00c4\u0001\u0000\u0000\u0000\u00c6\u00c7\u0001\u0000"+ - "\u0000\u0000\u00c7\u00c9\u0001\u0000\u0000\u0000\u00c8\u00c6\u0001\u0000"+ - "\u0000\u0000\u00c9\u00cb\u0005\u0002\u0000\u0000\u00ca\u00c1\u0001\u0000"+ - "\u0000\u0000\u00cb\u00ce\u0001\u0000\u0000\u0000\u00cc\u00ca\u0001\u0000"+ - "\u0000\u0000\u00cc\u00cd\u0001\u0000\u0000\u0000\u00cd\u0015\u0001\u0000"+ - "\u0000\u0000\u00ce\u00cc\u0001\u0000\u0000\u0000\u00cf\u00d0\u0003\u0012"+ - "\t\u0000\u00d0\u00d1\u0003\u0014\n\u0000\u00d1\u0017\u0001\u0000\u0000"+ - "\u0000\u00d2\u00d4\u0005\u0003\u0000\u0000\u00d3\u00d5\u0005\u0003\u0000"+ - "\u0000\u00d4\u00d3\u0001\u0000\u0000\u0000\u00d4\u00d5\u0001\u0000\u0000"+ - "\u0000\u00d5\u00d6\u0001\u0000\u0000\u0000\u00d6\u00d7\u0003\u0006\u0003"+ - "\u0000\u00d7\u0019\u0001\u0000\u0000\u0000\u00d8\u00da\u0005\u0003\u0000"+ - "\u0000\u00d9\u00db\u0005\u0003\u0000\u0000\u00da\u00d9\u0001\u0000\u0000"+ - "\u0000\u00da\u00db\u0001\u0000\u0000\u0000\u00db\u001b\u0001\u0000\u0000"+ - "\u0000\u00dc\u00dd\u0005\u0001\u0000\u0000\u00dd\u00de\u0005t\u0000\u0000"+ - "\u00de\u00df\u0003 \u0010\u0000\u00df\u00e0\u0005\u0002\u0000\u0000\u00e0"+ - "\u001d\u0001\u0000\u0000\u0000\u00e1\u00e2\u0007\u0003\u0000\u0000\u00e2"+ - "\u001f\u0001\u0000\u0000\u0000\u00e3\u00e4\u0007\u0004\u0000\u0000\u00e4"+ - "!\u0001\u0000\u0000\u0000\u00e5\u00e6\u0005\u0094\u0000\u0000\u00e6#\u0001"+ - "\u0000\u0000\u0000\u00e7\u00ec\u0003(\u0014\u0000\u00e8\u00ec\u0003<\u001e"+ - "\u0000\u00e9\u00ec\u0003B!\u0000\u00ea\u00ec\u0003&\u0013\u0000\u00eb"+ - "\u00e7\u0001\u0000\u0000\u0000\u00eb\u00e8\u0001\u0000\u0000\u0000\u00eb"+ - "\u00e9\u0001\u0000\u0000\u0000\u00eb\u00ea\u0001\u0000\u0000\u0000\u00ec"+ - "%\u0001\u0000\u0000\u0000\u00ed\u00ee\u0005\u0015\u0000\u0000\u00ee\u00ef"+ - "\u0005\u0001\u0000\u0000\u00ef\u00f0\u0003L&\u0000\u00f0\u00f1\u0005\u0016"+ - "\u0000\u0000\u00f1\u00f2\u0003L&\u0000\u00f2\u00f3\u0005\u0016\u0000\u0000"+ - "\u00f3\u00f4\u0003L&\u0000\u00f4\u00f5\u0005\u0002\u0000\u0000\u00f5\u00f6"+ - "\u0003L&\u0000\u00f6\'\u0001\u0000\u0000\u0000\u00f7\u0135\u0005\u0011"+ - "\u0000\u0000\u00f8\u0135\u0005\r\u0000\u0000\u00f9\u0135\u0005\u0012\u0000"+ - "\u0000\u00fa\u0135\u00032\u0019\u0000\u00fb\u00fc\u0005\u0018\u0000\u0000"+ - "\u00fc\u0135\u0003 \u0010\u0000\u00fd\u00fe\u0005\u0019\u0000\u0000\u00fe"+ - "\u0135\u0003 \u0010\u0000\u00ff\u0101\u0005\u001a\u0000\u0000\u0100\u0102"+ - "\u0003 \u0010\u0000\u0101\u0100\u0001\u0000\u0000\u0000\u0102\u0103\u0001"+ - "\u0000\u0000\u0000\u0103\u0101\u0001\u0000\u0000\u0000\u0103\u0104\u0001"+ - "\u0000\u0000\u0000\u0104\u0135\u0001\u0000\u0000\u0000\u0105\u0135\u0005"+ - "\u001b\u0000\u0000\u0106\u0107\u0005 \u0000\u0000\u0107\u0135\u0003 \u0010"+ - "\u0000\u0108\u0109\u0005\"\u0000\u0000\u0109\u0135\u0003 \u0010\u0000"+ - "\u010a\u010b\u0005$\u0000\u0000\u010b\u0135\u0003 \u0010\u0000\u010c\u010d"+ - "\u0005%\u0000\u0000\u010d\u0135\u0003 \u0010\u0000\u010e\u010f\u0005&"+ - "\u0000\u0000\u010f\u0135\u0003 \u0010\u0000\u0110\u0111\u0005\'\u0000"+ - "\u0000\u0111\u0135\u0003 \u0010\u0000\u0112\u0113\u0005(\u0000\u0000\u0113"+ - "\u0135\u0003 \u0010\u0000\u0114\u0116\u0003.\u0017\u0000\u0115\u0117\u0003"+ - "*\u0015\u0000\u0116\u0115\u0001\u0000\u0000\u0000\u0116\u0117\u0001\u0000"+ - "\u0000\u0000\u0117\u0119\u0001\u0000\u0000\u0000\u0118\u011a\u0003,\u0016"+ - "\u0000\u0119\u0118\u0001\u0000\u0000\u0000\u0119\u011a\u0001\u0000\u0000"+ - "\u0000\u011a\u0135\u0001\u0000\u0000\u0000\u011b\u011d\u00030\u0018\u0000"+ - "\u011c\u011e\u0003*\u0015\u0000\u011d\u011c\u0001\u0000\u0000\u0000\u011d"+ - "\u011e\u0001\u0000\u0000\u0000\u011e\u0120\u0001\u0000\u0000\u0000\u011f"+ - "\u0121\u0003,\u0016\u0000\u0120\u011f\u0001\u0000\u0000\u0000\u0120\u0121"+ - "\u0001\u0000\u0000\u0000\u0121\u0135\u0001\u0000\u0000\u0000\u0122\u0135"+ - "\u0005j\u0000\u0000\u0123\u0135\u0005k\u0000\u0000\u0124\u0135\u0005l"+ - "\u0000\u0000\u0125\u0135\u0005m\u0000\u0000\u0126\u0127\u0005n\u0000\u0000"+ - "\u0127\u0135\u0003 \u0010\u0000\u0128\u0129\u0005\b\u0000\u0000\u0129"+ - "\u0135\u0003\u001e\u000f\u0000\u012a\u0135\u0005\t\u0000\u0000\u012b\u0135"+ - "\u0005\u000e\u0000\u0000\u012c\u0135\u0005\u000f\u0000\u0000\u012d\u0135"+ - "\u0005\u0010\u0000\u0000\u012e\u0135\u0005o\u0000\u0000\u012f\u0135\u0005"+ - "p\u0000\u0000\u0130\u0135\u0005q\u0000\u0000\u0131\u0135\u0005r\u0000"+ - "\u0000\u0132\u0135\u0005s\u0000\u0000\u0133\u0135\u00034\u001a\u0000\u0134"+ - "\u00f7\u0001\u0000\u0000\u0000\u0134\u00f8\u0001\u0000\u0000\u0000\u0134"+ - "\u00f9\u0001\u0000\u0000\u0000\u0134\u00fa\u0001\u0000\u0000\u0000\u0134"+ - "\u00fb\u0001\u0000\u0000\u0000\u0134\u00fd\u0001\u0000\u0000\u0000\u0134"+ - "\u00ff\u0001\u0000\u0000\u0000\u0134\u0105\u0001\u0000\u0000\u0000\u0134"+ - "\u0106\u0001\u0000\u0000\u0000\u0134\u0108\u0001\u0000\u0000\u0000\u0134"+ - "\u010a\u0001\u0000\u0000\u0000\u0134\u010c\u0001\u0000\u0000\u0000\u0134"+ - "\u010e\u0001\u0000\u0000\u0000\u0134\u0110\u0001\u0000\u0000\u0000\u0134"+ - "\u0112\u0001\u0000\u0000\u0000\u0134\u0114\u0001\u0000\u0000\u0000\u0134"+ - "\u011b\u0001\u0000\u0000\u0000\u0134\u0122\u0001\u0000\u0000\u0000\u0134"+ - "\u0123\u0001\u0000\u0000\u0000\u0134\u0124\u0001\u0000\u0000\u0000\u0134"+ - "\u0125\u0001\u0000\u0000\u0000\u0134\u0126\u0001\u0000\u0000\u0000\u0134"+ - "\u0128\u0001\u0000\u0000\u0000\u0134\u012a\u0001\u0000\u0000\u0000\u0134"+ - "\u012b\u0001\u0000\u0000\u0000\u0134\u012c\u0001\u0000\u0000\u0000\u0134"+ - "\u012d\u0001\u0000\u0000\u0000\u0134\u012e\u0001\u0000\u0000\u0000\u0134"+ - "\u012f\u0001\u0000\u0000\u0000\u0134\u0130\u0001\u0000\u0000\u0000\u0134"+ - "\u0131\u0001\u0000\u0000\u0000\u0134\u0132\u0001\u0000\u0000\u0000\u0134"+ - "\u0133\u0001\u0000\u0000\u0000\u0135)\u0001\u0000\u0000\u0000\u0136\u0137"+ - "\u0005,\u0000\u0000\u0137\u0138\u0005\u0003\u0000\u0000\u0138+\u0001\u0000"+ - "\u0000\u0000\u0139\u013a\u0005-\u0000\u0000\u013a\u013b\u0005\u0003\u0000"+ - "\u0000\u013b-\u0001\u0000\u0000\u0000\u013c\u013d\u0003\u0004\u0002\u0000"+ - "\u013d\u0141\u0005)\u0000\u0000\u013e\u013f\u0005/\u0000\u0000\u013f\u0140"+ - "\u0005+\u0000\u0000\u0140\u0142\u0005.\u0000\u0000\u0141\u013e\u0001\u0000"+ - "\u0000\u0000\u0141\u0142\u0001\u0000\u0000\u0000\u0142/\u0001\u0000\u0000"+ - "\u0000\u0143\u0144\u0003\u0004\u0002\u0000\u0144\u0146\u0005*\u0000\u0000"+ - "\u0145\u0147\u0005/\u0000\u0000\u0146\u0145\u0001\u0000\u0000\u0000\u0146"+ - "\u0147\u0001\u0000\u0000\u0000\u01471\u0001\u0000\u0000\u0000\u0148\u0149"+ - "\u0003\u0004\u0002\u0000\u0149\u014a\u0005\u001f\u0000\u0000\u014a3\u0001"+ - "\u0000\u0000\u0000\u014b\u014d\u0005!\u0000\u0000\u014c\u014e\u0003 \u0010"+ - "\u0000\u014d\u014c\u0001\u0000\u0000\u0000\u014d\u014e\u0001\u0000\u0000"+ - "\u0000\u014e\u014f\u0001\u0000\u0000\u0000\u014f\u0156\u0003\u001c\u000e"+ - "\u0000\u0150\u0152\u0005#\u0000\u0000\u0151\u0153\u0003 \u0010\u0000\u0152"+ - "\u0151\u0001\u0000\u0000\u0000\u0152\u0153\u0001\u0000\u0000\u0000\u0153"+ - "\u0154\u0001\u0000\u0000\u0000\u0154\u0156\u0003\u001c\u000e\u0000\u0155"+ - "\u014b\u0001\u0000\u0000\u0000\u0155\u0150\u0001\u0000\u0000\u0000\u0156"+ - "5\u0001\u0000\u0000\u0000\u0157\u0158\u0005\u0001\u0000\u0000\u0158\u015c"+ - "\u0005x\u0000\u0000\u0159\u015b\u0003\n\u0005\u0000\u015a\u0159\u0001"+ - "\u0000\u0000\u0000\u015b\u015e\u0001\u0000\u0000\u0000\u015c\u015a\u0001"+ - "\u0000\u0000\u0000\u015c\u015d\u0001\u0000\u0000\u0000\u015d\u015f\u0001"+ - "\u0000\u0000\u0000\u015e\u015c\u0001\u0000\u0000\u0000\u015f\u0161\u0005"+ - "\u0002\u0000\u0000\u0160\u0157\u0001\u0000\u0000\u0000\u0161\u0164\u0001"+ - "\u0000\u0000\u0000\u0162\u0160\u0001\u0000\u0000\u0000\u0162\u0163\u0001"+ - "\u0000\u0000\u0000\u0163\u0170\u0001\u0000\u0000\u0000\u0164\u0162\u0001"+ - "\u0000\u0000\u0000\u0165\u0166\u0005\u0001\u0000\u0000\u0166\u016a\u0005"+ - "y\u0000\u0000\u0167\u0169\u0003\n\u0005\u0000\u0168\u0167\u0001\u0000"+ - "\u0000\u0000\u0169\u016c\u0001\u0000\u0000\u0000\u016a\u0168\u0001\u0000"+ - "\u0000\u0000\u016a\u016b\u0001\u0000\u0000\u0000\u016b\u016d\u0001\u0000"+ - "\u0000\u0000\u016c\u016a\u0001\u0000\u0000\u0000\u016d\u016f\u0005\u0002"+ - "\u0000\u0000\u016e\u0165\u0001\u0000\u0000\u0000\u016f\u0172\u0001\u0000"+ - "\u0000\u0000\u0170\u016e\u0001\u0000\u0000\u0000\u0170\u0171\u0001\u0000"+ - "\u0000\u0000\u01717\u0001\u0000\u0000\u0000\u0172\u0170\u0001\u0000\u0000"+ - "\u0000\u0173\u0174\u0005\u0001\u0000\u0000\u0174\u0178\u0005x\u0000\u0000"+ - "\u0175\u0177\u0003\n\u0005\u0000\u0176\u0175\u0001\u0000\u0000\u0000\u0177"+ - "\u017a\u0001\u0000\u0000\u0000\u0178\u0176\u0001\u0000\u0000\u0000\u0178"+ - "\u0179\u0001\u0000\u0000\u0000\u0179\u017b\u0001\u0000\u0000\u0000\u017a"+ - "\u0178\u0001\u0000\u0000\u0000\u017b\u017d\u0005\u0002\u0000\u0000\u017c"+ - "\u0173\u0001\u0000\u0000\u0000\u017d\u0180\u0001\u0000\u0000\u0000\u017e"+ - "\u017c\u0001\u0000\u0000\u0000\u017e\u017f\u0001\u0000\u0000\u0000\u017f"+ - "\u0181\u0001\u0000\u0000\u0000\u0180\u017e\u0001\u0000\u0000\u0000\u0181"+ - "\u0182\u0003:\u001d\u0000\u01829\u0001\u0000\u0000\u0000\u0183\u0184\u0005"+ - "\u0001\u0000\u0000\u0184\u0188\u0005y\u0000\u0000\u0185\u0187\u0003\n"+ - "\u0005\u0000\u0186\u0185\u0001\u0000\u0000\u0000\u0187\u018a\u0001\u0000"+ - "\u0000\u0000\u0188\u0186\u0001\u0000\u0000\u0000\u0188\u0189\u0001\u0000"+ - "\u0000\u0000\u0189\u018b\u0001\u0000\u0000\u0000\u018a\u0188\u0001\u0000"+ - "\u0000\u0000\u018b\u018d\u0005\u0002\u0000\u0000\u018c\u0183\u0001\u0000"+ - "\u0000\u0000\u018d\u0190\u0001\u0000\u0000\u0000\u018e\u018c\u0001\u0000"+ - "\u0000\u0000\u018e\u018f\u0001\u0000\u0000\u0000\u018f\u0191\u0001\u0000"+ - "\u0000\u0000\u0190\u018e\u0001\u0000\u0000\u0000\u0191\u0192\u0003$\u0012"+ - "\u0000\u0192;\u0001\u0000\u0000\u0000\u0193\u0195\u0005\u0013\u0000\u0000"+ - "\u0194\u0196\u0003\"\u0011\u0000\u0195\u0194\u0001\u0000\u0000\u0000\u0195"+ - "\u0196\u0001\u0000\u0000\u0000\u0196\u0197\u0001\u0000\u0000\u0000\u0197"+ - "\u0198\u0003@ \u0000\u0198\u019a\u0005\u0017\u0000\u0000\u0199\u019b\u0003"+ - "\"\u0011\u0000\u019a\u0199\u0001\u0000\u0000\u0000\u019a\u019b\u0001\u0000"+ - "\u0000\u0000\u019b\u01b6\u0001\u0000\u0000\u0000\u019c\u019e\u0005\u0014"+ - "\u0000\u0000\u019d\u019f\u0003\"\u0011\u0000\u019e\u019d\u0001\u0000\u0000"+ - "\u0000\u019e\u019f\u0001\u0000\u0000\u0000\u019f\u01a0\u0001\u0000\u0000"+ - "\u0000\u01a0\u01a1\u0003@ \u0000\u01a1\u01a3\u0005\u0017\u0000\u0000\u01a2"+ - "\u01a4\u0003\"\u0011\u0000\u01a3\u01a2\u0001\u0000\u0000\u0000\u01a3\u01a4"+ - "\u0001\u0000\u0000\u0000\u01a4\u01b6\u0001\u0000\u0000\u0000\u01a5\u01a7"+ - "\u0005\u001c\u0000\u0000\u01a6\u01a8\u0003\"\u0011\u0000\u01a7\u01a6\u0001"+ - "\u0000\u0000\u0000\u01a7\u01a8\u0001\u0000\u0000\u0000\u01a8\u01a9\u0001"+ - "\u0000\u0000\u0000\u01a9\u01af\u0003@ \u0000\u01aa\u01ac\u0005\u001e\u0000"+ - "\u0000\u01ab\u01ad\u0003\"\u0011\u0000\u01ac\u01ab\u0001\u0000\u0000\u0000"+ - "\u01ac\u01ad\u0001\u0000\u0000\u0000\u01ad\u01ae\u0001\u0000\u0000\u0000"+ - "\u01ae\u01b0\u0003L&\u0000\u01af\u01aa\u0001\u0000\u0000\u0000\u01af\u01b0"+ - "\u0001\u0000\u0000\u0000\u01b0\u01b1\u0001\u0000\u0000\u0000\u01b1\u01b3"+ - "\u0005\u0017\u0000\u0000\u01b2\u01b4\u0003\"\u0011\u0000\u01b3\u01b2\u0001"+ - "\u0000\u0000\u0000\u01b3\u01b4\u0001\u0000\u0000\u0000\u01b4\u01b6\u0001"+ - "\u0000\u0000\u0000\u01b5\u0193\u0001\u0000\u0000\u0000\u01b5\u019c\u0001"+ - "\u0000\u0000\u0000\u01b5\u01a5\u0001\u0000\u0000\u0000\u01b6=\u0001\u0000"+ - "\u0000\u0000\u01b7\u01b8\u0005\u0001\u0000\u0000\u01b8\u01b9\u0005y\u0000"+ - "\u0000\u01b9\u01ba\u0003\n\u0005\u0000\u01ba\u01bb\u0005\u0002\u0000\u0000"+ - "\u01bb\u01bd\u0001\u0000\u0000\u0000\u01bc\u01b7\u0001\u0000\u0000\u0000"+ - "\u01bc\u01bd\u0001\u0000\u0000\u0000\u01bd\u01c3\u0001\u0000\u0000\u0000"+ - "\u01be\u01bf\u0003\u001c\u000e\u0000\u01bf\u01c0\u0003\u0016\u000b\u0000"+ - "\u01c0\u01c3\u0001\u0000\u0000\u0000\u01c1\u01c3\u0003\u0016\u000b\u0000"+ - "\u01c2\u01bc\u0001\u0000\u0000\u0000\u01c2\u01be\u0001\u0000\u0000\u0000"+ - "\u01c2\u01c1\u0001\u0000\u0000\u0000\u01c3?\u0001\u0000\u0000\u0000\u01c4"+ - "\u01c5\u0003>\u001f\u0000\u01c5\u01c6\u0003L&\u0000\u01c6A\u0001\u0000"+ - "\u0000\u0000\u01c7\u01c8\u0005\u0001\u0000\u0000\u01c8\u01c9\u0003D\""+ - "\u0000\u01c9\u01ca\u0005\u0002\u0000\u0000\u01caC\u0001\u0000\u0000\u0000"+ - "\u01cb\u01cf\u0003(\u0014\u0000\u01cc\u01ce\u0003D\"\u0000\u01cd\u01cc"+ - "\u0001\u0000\u0000\u0000\u01ce\u01d1\u0001\u0000\u0000\u0000\u01cf\u01cd"+ - "\u0001\u0000\u0000\u0000\u01cf\u01d0\u0001\u0000\u0000\u0000\u01d0\u01f6"+ - "\u0001\u0000\u0000\u0000\u01d1\u01cf\u0001\u0000\u0000\u0000\u01d2\u01d3"+ - "\u0005!\u0000\u0000\u01d3\u01f6\u0003F#\u0000\u01d4\u01d5\u0005#\u0000"+ - "\u0000\u01d5\u01f6\u0003F#\u0000\u01d6\u01d8\u0005\u0013\u0000\u0000\u01d7"+ - "\u01d9\u0003\"\u0011\u0000\u01d8\u01d7\u0001\u0000\u0000\u0000\u01d8\u01d9"+ - "\u0001\u0000\u0000\u0000\u01d9\u01da\u0001\u0000\u0000\u0000\u01da\u01f6"+ - "\u0003@ \u0000\u01db\u01dd\u0005\u0014\u0000\u0000\u01dc\u01de\u0003\""+ - "\u0011\u0000\u01dd\u01dc\u0001\u0000\u0000\u0000\u01dd\u01de\u0001\u0000"+ - "\u0000\u0000\u01de\u01df\u0001\u0000\u0000\u0000\u01df\u01f6\u0003@ \u0000"+ - "\u01e0\u01e2\u0005\u001c\u0000\u0000\u01e1\u01e3\u0003\"\u0011\u0000\u01e2"+ - "\u01e1\u0001\u0000\u0000\u0000\u01e2\u01e3\u0001\u0000\u0000\u0000\u01e3"+ - "\u01e4\u0001\u0000\u0000\u0000\u01e4\u01e8\u0003>\u001f\u0000\u01e5\u01e7"+ - "\u0003B!\u0000\u01e6\u01e5\u0001\u0000\u0000\u0000\u01e7\u01ea\u0001\u0000"+ - "\u0000\u0000\u01e8\u01e6\u0001\u0000\u0000\u0000\u01e8\u01e9\u0001\u0000"+ - "\u0000\u0000\u01e9\u01eb\u0001\u0000\u0000\u0000\u01ea\u01e8\u0001\u0000"+ - "\u0000\u0000\u01eb\u01ec\u0005\u0001\u0000\u0000\u01ec\u01ed\u0005\u001d"+ - "\u0000\u0000\u01ed\u01f3\u0003L&\u0000\u01ee\u01ef\u0005\u0001\u0000\u0000"+ - "\u01ef\u01f0\u0005\u001e\u0000\u0000\u01f0\u01f1\u0003L&\u0000\u01f1\u01f2"+ - "\u0005\u0002\u0000\u0000\u01f2\u01f4\u0001\u0000\u0000\u0000\u01f3\u01ee"+ - "\u0001\u0000\u0000\u0000\u01f3\u01f4\u0001\u0000\u0000\u0000\u01f4\u01f6"+ - "\u0001\u0000\u0000\u0000\u01f5\u01cb\u0001\u0000\u0000\u0000\u01f5\u01d2"+ - "\u0001\u0000\u0000\u0000\u01f5\u01d4\u0001\u0000\u0000\u0000\u01f5\u01d6"+ - "\u0001\u0000\u0000\u0000\u01f5\u01db\u0001\u0000\u0000\u0000\u01f5\u01e0"+ - "\u0001\u0000\u0000\u0000\u01f6E\u0001\u0000\u0000\u0000\u01f7\u01f9\u0003"+ - "\u001c\u000e\u0000\u01f8\u01f7\u0001\u0000\u0000\u0000\u01f8\u01f9\u0001"+ - "\u0000\u0000\u0000\u01f9\u01fa\u0001\u0000\u0000\u0000\u01fa\u01fb\u0003"+ - "H$\u0000\u01fbG\u0001\u0000\u0000\u0000\u01fc\u01fd\u0005\u0001\u0000"+ - "\u0000\u01fd\u0201\u0005x\u0000\u0000\u01fe\u0200\u0003\n\u0005\u0000"+ - "\u01ff\u01fe\u0001\u0000\u0000\u0000\u0200\u0203\u0001\u0000\u0000\u0000"+ - "\u0201\u01ff\u0001\u0000\u0000\u0000\u0201\u0202\u0001\u0000\u0000\u0000"+ - "\u0202\u0204\u0001\u0000\u0000\u0000\u0203\u0201\u0001\u0000\u0000\u0000"+ - "\u0204\u0206\u0005\u0002\u0000\u0000\u0205\u01fc\u0001\u0000\u0000\u0000"+ - "\u0206\u0209\u0001\u0000\u0000\u0000\u0207\u0205\u0001\u0000\u0000\u0000"+ - "\u0207\u0208\u0001\u0000\u0000\u0000\u0208\u020a\u0001\u0000\u0000\u0000"+ - "\u0209\u0207\u0001\u0000\u0000\u0000\u020a\u020b\u0003J%\u0000\u020bI"+ - "\u0001\u0000\u0000\u0000\u020c\u020d\u0005\u0001\u0000\u0000\u020d\u0211"+ - "\u0005y\u0000\u0000\u020e\u0210\u0003\n\u0005\u0000\u020f\u020e\u0001"+ - "\u0000\u0000\u0000\u0210\u0213\u0001\u0000\u0000\u0000\u0211\u020f\u0001"+ - "\u0000\u0000\u0000\u0211\u0212\u0001\u0000\u0000\u0000\u0212\u0214\u0001"+ - "\u0000\u0000\u0000\u0213\u0211\u0001\u0000\u0000\u0000\u0214\u0216\u0005"+ - "\u0002\u0000\u0000\u0215\u020c\u0001\u0000\u0000\u0000\u0216\u0219\u0001"+ - "\u0000\u0000\u0000\u0217\u0215\u0001\u0000\u0000\u0000\u0217\u0218\u0001"+ - "\u0000\u0000\u0000\u0218\u021d\u0001\u0000\u0000\u0000\u0219\u0217\u0001"+ - "\u0000\u0000\u0000\u021a\u021c\u0003D\"\u0000\u021b\u021a\u0001\u0000"+ - "\u0000\u0000\u021c\u021f\u0001\u0000\u0000\u0000\u021d\u021b\u0001\u0000"+ - "\u0000\u0000\u021d\u021e\u0001\u0000\u0000\u0000\u021eK\u0001\u0000\u0000"+ - "\u0000\u021f\u021d\u0001\u0000\u0000\u0000\u0220\u0222\u0003$\u0012\u0000"+ - "\u0221\u0220\u0001\u0000\u0000\u0000\u0222\u0225\u0001\u0000\u0000\u0000"+ - "\u0223\u0221\u0001\u0000\u0000\u0000\u0223\u0224\u0001\u0000\u0000\u0000"+ - "\u0224\u0227\u0001\u0000\u0000\u0000\u0225\u0223\u0001\u0000\u0000\u0000"+ - "\u0226\u0228\u00034\u001a\u0000\u0227\u0226\u0001\u0000\u0000\u0000\u0227"+ - "\u0228\u0001\u0000\u0000\u0000\u0228M\u0001\u0000\u0000\u0000\u0229\u022a"+ - "\u0003L&\u0000\u022aO\u0001\u0000\u0000\u0000\u022b\u022c\u0005\u0001"+ - "\u0000\u0000\u022c\u022e\u0005u\u0000\u0000\u022d\u022f\u0003\"\u0011"+ - "\u0000\u022e\u022d\u0001\u0000\u0000\u0000\u022e\u022f\u0001\u0000\u0000"+ - "\u0000\u022f\u0230\u0001\u0000\u0000\u0000\u0230\u0231\u0003R)\u0000\u0231"+ - "\u0232\u0005\u0002\u0000\u0000\u0232Q\u0001\u0000\u0000\u0000\u0233\u0235"+ - "\u0003\u001c\u000e\u0000\u0234\u0233\u0001\u0000\u0000\u0000\u0234\u0235"+ - "\u0001\u0000\u0000\u0000\u0235\u0236\u0001\u0000\u0000\u0000\u0236\u0241"+ - "\u0003T*\u0000\u0237\u0239\u0003n7\u0000\u0238\u023a\u0003\u001c\u000e"+ - "\u0000\u0239\u0238\u0001\u0000\u0000\u0000\u0239\u023a\u0001\u0000\u0000"+ - "\u0000\u023a\u023b\u0001\u0000\u0000\u0000\u023b\u023c\u0003\u0016\u000b"+ - "\u0000\u023c\u0241\u0001\u0000\u0000\u0000\u023d\u023e\u0003t:\u0000\u023e"+ - "\u023f\u0003R)\u0000\u023f\u0241\u0001\u0000\u0000\u0000\u0240\u0234\u0001"+ - "\u0000\u0000\u0000\u0240\u0237\u0001\u0000\u0000\u0000\u0240\u023d\u0001"+ - "\u0000\u0000\u0000\u0241S\u0001\u0000\u0000\u0000\u0242\u0243\u0003\u0016"+ - "\u000b\u0000\u0243\u0244\u0003V+\u0000\u0244U\u0001\u0000\u0000\u0000"+ - "\u0245\u0246\u0005\u0001\u0000\u0000\u0246\u0250\u0005z\u0000\u0000\u0247"+ - "\u0249\u0003\n\u0005\u0000\u0248\u0247\u0001\u0000\u0000\u0000\u0249\u024c"+ - "\u0001\u0000\u0000\u0000\u024a\u0248\u0001\u0000\u0000\u0000\u024a\u024b"+ - "\u0001\u0000\u0000\u0000\u024b\u0251\u0001\u0000\u0000\u0000\u024c\u024a"+ - "\u0001\u0000\u0000\u0000\u024d\u024e\u0003\"\u0011\u0000\u024e\u024f\u0003"+ - "\n\u0005\u0000\u024f\u0251\u0001\u0000\u0000\u0000\u0250\u024a\u0001\u0000"+ - "\u0000\u0000\u0250\u024d\u0001\u0000\u0000\u0000\u0251\u0252\u0001\u0000"+ - "\u0000\u0000\u0252\u0254\u0005\u0002\u0000\u0000\u0253\u0245\u0001\u0000"+ - "\u0000\u0000\u0254\u0257\u0001\u0000\u0000\u0000\u0255\u0253\u0001\u0000"+ - "\u0000\u0000\u0255\u0256\u0001\u0000\u0000\u0000\u0256\u0258\u0001\u0000"+ - "\u0000\u0000\u0257\u0255\u0001\u0000\u0000\u0000\u0258\u0259\u0003L&\u0000"+ - "\u0259W\u0001\u0000\u0000\u0000\u025a\u025b\u0005\u0001\u0000\u0000\u025b"+ - "\u025c\u0005\u0080\u0000\u0000\u025c\u025d\u0003N\'\u0000\u025d\u025e"+ - "\u0005\u0002\u0000\u0000\u025e\u0261\u0001\u0000\u0000\u0000\u025f\u0261"+ - "\u0003D\"\u0000\u0260\u025a\u0001\u0000\u0000\u0000\u0260\u025f\u0001"+ - "\u0000\u0000\u0000\u0261Y\u0001\u0000\u0000\u0000\u0262\u0263\u0005\u0001"+ - "\u0000\u0000\u0263\u0265\u0005~\u0000\u0000\u0264\u0266\u0003 \u0010\u0000"+ - "\u0265\u0264\u0001\u0000\u0000\u0000\u0265\u0266\u0001\u0000\u0000\u0000"+ - "\u0266\u0267\u0001\u0000\u0000\u0000\u0267\u0268\u0005\u0001\u0000\u0000"+ - "\u0268\u0269\u0003$\u0012\u0000\u0269\u026d\u0005\u0002\u0000\u0000\u026a"+ - "\u026c\u0003 \u0010\u0000\u026b\u026a\u0001\u0000\u0000\u0000\u026c\u026f"+ - "\u0001\u0000\u0000\u0000\u026d\u026b\u0001\u0000\u0000\u0000\u026d\u026e"+ - "\u0001\u0000\u0000\u0000\u026e\u0270\u0001\u0000\u0000\u0000\u026f\u026d"+ - "\u0001\u0000\u0000\u0000\u0270\u0271\u0005\u0002\u0000\u0000\u0271\u0281"+ - "\u0001\u0000\u0000\u0000\u0272\u0273\u0005\u0001\u0000\u0000\u0273\u0275"+ - "\u0005~\u0000\u0000\u0274\u0276\u0003 \u0010\u0000\u0275\u0274\u0001\u0000"+ - "\u0000\u0000\u0275\u0276\u0001\u0000\u0000\u0000\u0276\u0277\u0001\u0000"+ - "\u0000\u0000\u0277\u027b\u0003X,\u0000\u0278\u027a\u0003 \u0010\u0000"+ - "\u0279\u0278\u0001\u0000\u0000\u0000\u027a\u027d\u0001\u0000\u0000\u0000"+ - "\u027b\u0279\u0001\u0000\u0000\u0000\u027b\u027c\u0001\u0000\u0000\u0000"+ - "\u027c\u027e\u0001\u0000\u0000\u0000\u027d\u027b\u0001\u0000\u0000\u0000"+ - "\u027e\u027f\u0005\u0002\u0000\u0000\u027f\u0281\u0001\u0000\u0000\u0000"+ - "\u0280\u0262\u0001\u0000\u0000\u0000\u0280\u0272\u0001\u0000\u0000\u0000"+ - "\u0281[\u0001\u0000\u0000\u0000\u0282\u0283\u0005\u0001\u0000\u0000\u0283"+ - "\u0285\u0005|\u0000\u0000\u0284\u0286\u0003\"\u0011\u0000\u0285\u0284"+ - "\u0001\u0000\u0000\u0000\u0285\u0286\u0001\u0000\u0000\u0000\u0286\u0287"+ - "\u0001\u0000\u0000\u0000\u0287\u0288\u0003^/\u0000\u0288\u0289\u0005\u0002"+ - "\u0000\u0000\u0289]\u0001\u0000\u0000\u0000\u028a\u029d\u0003\u0018\f"+ - "\u0000\u028b\u028c\u0003n7\u0000\u028c\u028d\u0003\u0018\f\u0000\u028d"+ - "\u029d\u0001\u0000\u0000\u0000\u028e\u028f\u0003t:\u0000\u028f\u0290\u0003"+ - "^/\u0000\u0290\u029d\u0001\u0000\u0000\u0000\u0291\u0292\u0003\u0006\u0003"+ - "\u0000\u0292\u0293\u0005\u0001\u0000\u0000\u0293\u0297\u0005~\u0000\u0000"+ - "\u0294\u0296\u0003 \u0010\u0000\u0295\u0294\u0001\u0000\u0000\u0000\u0296"+ - "\u0299\u0001\u0000\u0000\u0000\u0297\u0295\u0001\u0000\u0000\u0000\u0297"+ - "\u0298\u0001\u0000\u0000\u0000\u0298\u029a\u0001\u0000\u0000\u0000\u0299"+ - "\u0297\u0001\u0000\u0000\u0000\u029a\u029b\u0005\u0002\u0000\u0000\u029b"+ - "\u029d\u0001\u0000\u0000\u0000\u029c\u028a\u0001\u0000\u0000\u0000\u029c"+ - "\u028b\u0001\u0000\u0000\u0000\u029c\u028e\u0001\u0000\u0000\u0000\u029c"+ - "\u0291\u0001\u0000\u0000\u0000\u029d_\u0001\u0000\u0000\u0000\u029e\u029f"+ - "\u0005\u0001\u0000\u0000\u029f\u02a1\u0005\u007f\u0000\u0000\u02a0\u02a2"+ - "\u0003 \u0010\u0000\u02a1\u02a0\u0001\u0000\u0000\u0000\u02a1\u02a2\u0001"+ - "\u0000\u0000\u0000\u02a2\u02a3\u0001\u0000\u0000\u0000\u02a3\u02a4\u0005"+ - "\u0001\u0000\u0000\u02a4\u02a5\u0003$\u0012\u0000\u02a5\u02a9\u0005\u0002"+ - "\u0000\u0000\u02a6\u02a8\u0005\u0006\u0000\u0000\u02a7\u02a6\u0001\u0000"+ - "\u0000\u0000\u02a8\u02ab\u0001\u0000\u0000\u0000\u02a9\u02a7\u0001\u0000"+ - "\u0000\u0000\u02a9\u02aa\u0001\u0000\u0000\u0000\u02aa\u02ac\u0001\u0000"+ - "\u0000\u0000\u02ab\u02a9\u0001\u0000\u0000\u0000\u02ac\u02ad\u0005\u0002"+ - "\u0000\u0000\u02ad\u02bd\u0001\u0000\u0000\u0000\u02ae\u02af\u0005\u0001"+ - "\u0000\u0000\u02af\u02b1\u0005\u007f\u0000\u0000\u02b0\u02b2\u0003 \u0010"+ - "\u0000\u02b1\u02b0\u0001\u0000\u0000\u0000\u02b1\u02b2\u0001\u0000\u0000"+ - "\u0000\u02b2\u02b3\u0001\u0000\u0000\u0000\u02b3\u02b7\u0003X,\u0000\u02b4"+ - "\u02b6\u0005\u0006\u0000\u0000\u02b5\u02b4\u0001\u0000\u0000\u0000\u02b6"+ - "\u02b9\u0001\u0000\u0000\u0000\u02b7\u02b5\u0001\u0000\u0000\u0000\u02b7"+ - "\u02b8\u0001\u0000\u0000\u0000\u02b8\u02ba\u0001\u0000\u0000\u0000\u02b9"+ - "\u02b7\u0001\u0000\u0000\u0000\u02ba\u02bb\u0005\u0002\u0000\u0000\u02bb"+ - "\u02bd\u0001\u0000\u0000\u0000\u02bc\u029e\u0001\u0000\u0000\u0000\u02bc"+ - "\u02ae\u0001\u0000\u0000\u0000\u02bda\u0001\u0000\u0000\u0000\u02be\u02bf"+ - "\u0005\u0001\u0000\u0000\u02bf\u02c1\u0005}\u0000\u0000\u02c0\u02c2\u0003"+ - "\"\u0011\u0000\u02c1\u02c0\u0001\u0000\u0000\u0000\u02c1\u02c2\u0001\u0000"+ - "\u0000\u0000\u02c2\u02c3\u0001\u0000\u0000\u0000\u02c3\u02c4\u0003d2\u0000"+ - "\u02c4\u02c5\u0005\u0002\u0000\u0000\u02c5c\u0001\u0000\u0000\u0000\u02c6"+ - "\u02d7\u0003\u001a\r\u0000\u02c7\u02c8\u0003n7\u0000\u02c8\u02c9\u0003"+ - "\u001a\r\u0000\u02c9\u02d7\u0001\u0000\u0000\u0000\u02ca\u02cb\u0003t"+ - ":\u0000\u02cb\u02cc\u0003d2\u0000\u02cc\u02d7\u0001\u0000\u0000\u0000"+ - "\u02cd\u02ce\u0005\u0001\u0000\u0000\u02ce\u02d2\u0005\u007f\u0000\u0000"+ - "\u02cf\u02d1\u0005\u0006\u0000\u0000\u02d0\u02cf\u0001\u0000\u0000\u0000"+ - "\u02d1\u02d4\u0001\u0000\u0000\u0000\u02d2\u02d0\u0001\u0000\u0000\u0000"+ - "\u02d2\u02d3\u0001\u0000\u0000\u0000\u02d3\u02d5\u0001\u0000\u0000\u0000"+ - "\u02d4\u02d2\u0001\u0000\u0000\u0000\u02d5\u02d7\u0005\u0002\u0000\u0000"+ - "\u02d6\u02c6\u0001\u0000\u0000\u0000\u02d6\u02c7\u0001\u0000\u0000\u0000"+ - "\u02d6\u02ca\u0001\u0000\u0000\u0000\u02d6\u02cd\u0001\u0000\u0000\u0000"+ - "\u02d7e\u0001\u0000\u0000\u0000\u02d8\u02d9\u0005\u0001\u0000\u0000\u02d9"+ - "\u02db\u0005{\u0000\u0000\u02da\u02dc\u0003\"\u0011\u0000\u02db\u02da"+ - "\u0001\u0000\u0000\u0000\u02db\u02dc\u0001\u0000\u0000\u0000\u02dc\u02dd"+ - "\u0001\u0000\u0000\u0000\u02dd\u02de\u0003h4\u0000\u02de\u02df\u0005\u0002"+ - "\u0000\u0000\u02dfg\u0001\u0000\u0000\u0000\u02e0\u02e1\u0003\u000e\u0007"+ - "\u0000\u02e1\u02e2\u0003N\'\u0000\u02e2\u02ea\u0001\u0000\u0000\u0000"+ - "\u02e3\u02e4\u0003n7\u0000\u02e4\u02e5\u0003\u000e\u0007\u0000\u02e5\u02ea"+ - "\u0001\u0000\u0000\u0000\u02e6\u02e7\u0003t:\u0000\u02e7\u02e8\u0003h"+ - "4\u0000\u02e8\u02ea\u0001\u0000\u0000\u0000\u02e9\u02e0\u0001\u0000\u0000"+ - "\u0000\u02e9\u02e3\u0001\u0000\u0000\u0000\u02e9\u02e6\u0001\u0000\u0000"+ - "\u0000\u02eai\u0001\u0000\u0000\u0000\u02eb\u02ec\u0005\u0001\u0000\u0000"+ - "\u02ec\u02ee\u0005u\u0000\u0000\u02ed\u02ef\u0003\"\u0011\u0000\u02ee"+ - "\u02ed\u0001\u0000\u0000\u0000\u02ee\u02ef\u0001\u0000\u0000\u0000\u02ef"+ - "\u02f0\u0001\u0000\u0000\u0000\u02f0\u02f1\u0003\u001c\u000e\u0000\u02f1"+ - "\u02f2\u0005\u0002\u0000\u0000\u02f2\u0314\u0001\u0000\u0000\u0000\u02f3"+ - "\u02f4\u0005\u0001\u0000\u0000\u02f4\u02f6\u0005u\u0000\u0000\u02f5\u02f7"+ - "\u0003\"\u0011\u0000\u02f6\u02f5\u0001\u0000\u0000\u0000\u02f6\u02f7\u0001"+ - "\u0000\u0000\u0000\u02f7\u02f8\u0001\u0000\u0000\u0000\u02f8\u02f9\u0003"+ - "\u0016\u000b\u0000\u02f9\u02fa\u0005\u0002\u0000\u0000\u02fa\u0314\u0001"+ - "\u0000\u0000\u0000\u02fb\u02fc\u0005\u0001\u0000\u0000\u02fc\u02fe\u0005"+ - "|\u0000\u0000\u02fd\u02ff\u0003\"\u0011\u0000\u02fe\u02fd\u0001\u0000"+ - "\u0000\u0000\u02fe\u02ff\u0001\u0000\u0000\u0000\u02ff\u0300\u0001\u0000"+ - "\u0000\u0000\u0300\u0301\u0003\u0018\f\u0000\u0301\u0302\u0005\u0002\u0000"+ - "\u0000\u0302\u0314\u0001\u0000\u0000\u0000\u0303\u0304\u0005\u0001\u0000"+ - "\u0000\u0304\u0306\u0005}\u0000\u0000\u0305\u0307\u0003\"\u0011\u0000"+ - "\u0306\u0305\u0001\u0000\u0000\u0000\u0306\u0307\u0001\u0000\u0000\u0000"+ - "\u0307\u0308\u0001\u0000\u0000\u0000\u0308\u0309\u0003\u001a\r\u0000\u0309"+ - "\u030a\u0005\u0002\u0000\u0000\u030a\u0314\u0001\u0000\u0000\u0000\u030b"+ - "\u030c\u0005\u0001\u0000\u0000\u030c\u030e\u0005{\u0000\u0000\u030d\u030f"+ - "\u0003\"\u0011\u0000\u030e\u030d\u0001\u0000\u0000\u0000\u030e\u030f\u0001"+ - "\u0000\u0000\u0000\u030f\u0310\u0001\u0000\u0000\u0000\u0310\u0311\u0003"+ - "\u000e\u0007\u0000\u0311\u0312\u0005\u0002\u0000\u0000\u0312\u0314\u0001"+ - "\u0000\u0000\u0000\u0313\u02eb\u0001\u0000\u0000\u0000\u0313\u02f3\u0001"+ - "\u0000\u0000\u0000\u0313\u02fb\u0001\u0000\u0000\u0000\u0313\u0303\u0001"+ - "\u0000\u0000\u0000\u0313\u030b\u0001\u0000\u0000\u0000\u0314k\u0001\u0000"+ - "\u0000\u0000\u0315\u0316\u0005\u0001\u0000\u0000\u0316\u0317\u0005\u0081"+ - "\u0000\u0000\u0317\u0318\u0003\u0002\u0001\u0000\u0318\u0319\u0003\u0002"+ - "\u0001\u0000\u0319\u031a\u0003j5\u0000\u031a\u031b\u0005\u0002\u0000\u0000"+ - "\u031bm\u0001\u0000\u0000\u0000\u031c\u031d\u0005\u0001\u0000\u0000\u031d"+ - "\u031e\u0005\u0081\u0000\u0000\u031e\u031f\u0003\u0002\u0001\u0000\u031f"+ - "\u0320\u0003\u0002\u0001\u0000\u0320\u0321\u0005\u0002\u0000\u0000\u0321"+ - "o\u0001\u0000\u0000\u0000\u0322\u0323\u0005\u0001\u0000\u0000\u0323\u0324"+ - "\u0005u\u0000\u0000\u0324\u0325\u0003 \u0010\u0000\u0325\u0326\u0005\u0002"+ - "\u0000\u0000\u0326\u0337\u0001\u0000\u0000\u0000\u0327\u0328\u0005\u0001"+ - "\u0000\u0000\u0328\u0329\u0005|\u0000\u0000\u0329\u032a\u0003 \u0010\u0000"+ - "\u032a\u032b\u0005\u0002\u0000\u0000\u032b\u0337\u0001\u0000\u0000\u0000"+ - "\u032c\u032d\u0005\u0001\u0000\u0000\u032d\u032e\u0005}\u0000\u0000\u032e"+ - "\u032f\u0003 \u0010\u0000\u032f\u0330\u0005\u0002\u0000\u0000\u0330\u0337"+ - "\u0001\u0000\u0000\u0000\u0331\u0332\u0005\u0001\u0000\u0000\u0332\u0333"+ - "\u0005{\u0000\u0000\u0333\u0334\u0003 \u0010\u0000\u0334\u0335\u0005\u0002"+ - "\u0000\u0000\u0335\u0337\u0001\u0000\u0000\u0000\u0336\u0322\u0001\u0000"+ - "\u0000\u0000\u0336\u0327\u0001\u0000\u0000\u0000\u0336\u032c\u0001\u0000"+ - "\u0000\u0000\u0336\u0331\u0001\u0000\u0000\u0000\u0337q\u0001\u0000\u0000"+ - "\u0000\u0338\u0339\u0005\u0001\u0000\u0000\u0339\u033a\u0005\u0082\u0000"+ - "\u0000\u033a\u033b\u0003\u0002\u0001\u0000\u033b\u033c\u0003p8\u0000\u033c"+ - "\u033d\u0005\u0002\u0000\u0000\u033ds\u0001\u0000\u0000\u0000\u033e\u033f"+ - "\u0005\u0001\u0000\u0000\u033f\u0340\u0005\u0082\u0000\u0000\u0340\u0341"+ - "\u0003\u0002\u0001\u0000\u0341\u0342\u0005\u0002\u0000\u0000\u0342u\u0001"+ - "\u0000\u0000\u0000\u0343\u0344\u0005\u0001\u0000\u0000\u0344\u0346\u0005"+ - "t\u0000\u0000\u0345\u0347\u0003\"\u0011\u0000\u0346\u0345\u0001\u0000"+ - "\u0000\u0000\u0346\u0347\u0001\u0000\u0000\u0000\u0347\u0348\u0001\u0000"+ - "\u0000\u0000\u0348\u0349\u0003\u0010\b\u0000\u0349\u034a\u0005\u0002\u0000"+ - "\u0000\u034aw\u0001\u0000\u0000\u0000\u034b\u034c\u0005\u0001\u0000\u0000"+ - "\u034c\u034d\u0005w\u0000\u0000\u034d\u034e\u0003 \u0010\u0000\u034e\u034f"+ - "\u0005\u0002\u0000\u0000\u034fy\u0001\u0000\u0000\u0000\u0350\u035b\u0003"+ - "v;\u0000\u0351\u035b\u0003f3\u0000\u0352\u035b\u0003\\.\u0000\u0353\u035b"+ - "\u0003b1\u0000\u0354\u035b\u0003P(\u0000\u0355\u035b\u0003Z-\u0000\u0356"+ - "\u035b\u0003`0\u0000\u0357\u035b\u0003x<\u0000\u0358\u035b\u0003l6\u0000"+ - "\u0359\u035b\u0003r9\u0000\u035a\u0350\u0001\u0000\u0000\u0000\u035a\u0351"+ - "\u0001\u0000\u0000\u0000\u035a\u0352\u0001\u0000\u0000\u0000\u035a\u0353"+ - "\u0001\u0000\u0000\u0000\u035a\u0354\u0001\u0000\u0000\u0000\u035a\u0355"+ - "\u0001\u0000\u0000\u0000\u035a\u0356\u0001\u0000\u0000\u0000\u035a\u0357"+ - "\u0001\u0000\u0000\u0000\u035a\u0358\u0001\u0000\u0000\u0000\u035a\u0359"+ - "\u0001\u0000\u0000\u0000\u035b{\u0001\u0000\u0000\u0000\u035c\u035d\u0005"+ - "\u0001\u0000\u0000\u035d\u035f\u0005\u0083\u0000\u0000\u035e\u0360\u0005"+ - "\u0094\u0000\u0000\u035f\u035e\u0001\u0000\u0000\u0000\u035f\u0360\u0001"+ - "\u0000\u0000\u0000\u0360\u0364\u0001\u0000\u0000\u0000\u0361\u0363\u0003"+ - "z=\u0000\u0362\u0361\u0001\u0000\u0000\u0000\u0363\u0366\u0001\u0000\u0000"+ - "\u0000\u0364\u0362\u0001\u0000\u0000\u0000\u0364\u0365\u0001\u0000\u0000"+ - "\u0000\u0365\u0367\u0001\u0000\u0000\u0000\u0366\u0364\u0001\u0000\u0000"+ - "\u0000\u0367\u0368\u0005\u0002\u0000\u0000\u0368}\u0001\u0000\u0000\u0000"+ - "\u0369\u0378\u0003|>\u0000\u036a\u036b\u0005\u0001\u0000\u0000\u036b\u036d"+ - "\u0005\u0083\u0000\u0000\u036c\u036e\u0005\u0094\u0000\u0000\u036d\u036c"+ - "\u0001\u0000\u0000\u0000\u036d\u036e\u0001\u0000\u0000\u0000\u036e\u036f"+ - "\u0001\u0000\u0000\u0000\u036f\u0373\u0007\u0005\u0000\u0000\u0370\u0372"+ - "\u0005\u0006\u0000\u0000\u0371\u0370\u0001\u0000\u0000\u0000\u0372\u0375"+ - "\u0001\u0000\u0000\u0000\u0373\u0371\u0001\u0000\u0000\u0000\u0373\u0374"+ - "\u0001\u0000\u0000\u0000\u0374\u0376\u0001\u0000\u0000\u0000\u0375\u0373"+ - "\u0001\u0000\u0000\u0000\u0376\u0378\u0005\u0002\u0000\u0000\u0377\u0369"+ - "\u0001\u0000\u0000\u0000\u0377\u036a\u0001\u0000\u0000\u0000\u0378\u007f"+ - "\u0001\u0000\u0000\u0000\u0379\u037a\u0005\u0001\u0000\u0000\u037a\u037c"+ - "\u0005\u0088\u0000\u0000\u037b\u037d\u0005\u0094\u0000\u0000\u037c\u037b"+ - "\u0001\u0000\u0000\u0000\u037c\u037d\u0001\u0000\u0000\u0000\u037d\u037e"+ - "\u0001\u0000\u0000\u0000\u037e\u037f\u0003\u0002\u0001\u0000\u037f\u0380"+ - "\u0003\u008aE\u0000\u0380\u0381\u0005\u0002\u0000\u0000\u0381\u038b\u0001"+ - "\u0000\u0000\u0000\u0382\u0383\u0005\u0001\u0000\u0000\u0383\u0385\u0005"+ - "\u0089\u0000\u0000\u0384\u0386\u0005\u0094\u0000\u0000\u0385\u0384\u0001"+ - "\u0000\u0000\u0000\u0385\u0386\u0001\u0000\u0000\u0000\u0386\u0387\u0001"+ - "\u0000\u0000\u0000\u0387\u0388\u0003\u0002\u0001\u0000\u0388\u0389\u0005"+ - "\u0002\u0000\u0000\u0389\u038b\u0001\u0000\u0000\u0000\u038a\u0379\u0001"+ - "\u0000\u0000\u0000\u038a\u0382\u0001\u0000\u0000\u0000\u038b\u0081\u0001"+ - "\u0000\u0000\u0000\u038c\u038d\u0005\u0001\u0000\u0000\u038d\u038e\u0005"+ - "\u008a\u0000\u0000\u038e\u038f\u0003~?\u0000\u038f\u0390\u0005\u0006\u0000"+ - "\u0000\u0390\u0391\u0005\u0002\u0000\u0000\u0391\u03c1\u0001\u0000\u0000"+ - "\u0000\u0392\u0393\u0005\u0001\u0000\u0000\u0393\u0394\u0005\u008b\u0000"+ - "\u0000\u0394\u0395\u0003~?\u0000\u0395\u0396\u0005\u0006\u0000\u0000\u0396"+ - "\u0397\u0005\u0002\u0000\u0000\u0397\u03c1\u0001\u0000\u0000\u0000\u0398"+ - "\u0399\u0005\u0001\u0000\u0000\u0399\u039a\u0005\u008c\u0000\u0000\u039a"+ - "\u039b\u0003~?\u0000\u039b\u039c\u0005\u0006\u0000\u0000\u039c\u039d\u0005"+ - "\u0002\u0000\u0000\u039d\u03c1\u0001\u0000\u0000\u0000\u039e\u039f\u0005"+ - "\u0001\u0000\u0000\u039f\u03a0\u0005\u0090\u0000\u0000\u03a0\u03a1\u0003"+ - "~?\u0000\u03a1\u03a2\u0005\u0006\u0000\u0000\u03a2\u03a3\u0005\u0002\u0000"+ - "\u0000\u03a3\u03c1\u0001\u0000\u0000\u0000\u03a4\u03a5\u0005\u0001\u0000"+ - "\u0000\u03a5\u03a6\u0005\u008d\u0000\u0000\u03a6\u03a7\u0003\u0080@\u0000"+ - "\u03a7\u03a8\u0003\u008aE\u0000\u03a8\u03a9\u0005\u0002\u0000\u0000\u03a9"+ - "\u03c1\u0001\u0000\u0000\u0000\u03aa\u03ab\u0005\u0001\u0000\u0000\u03ab"+ - "\u03ac\u0005\u008e\u0000\u0000\u03ac\u03ad\u0003\u0080@\u0000\u03ad\u03ae"+ - "\u0005\u0002\u0000\u0000\u03ae\u03c1\u0001\u0000\u0000\u0000\u03af\u03b0"+ - "\u0005\u0001\u0000\u0000\u03b0\u03b1\u0005\u008f\u0000\u0000\u03b1\u03b2"+ - "\u0003\u0080@\u0000\u03b2\u03b3\u0005\u0002\u0000\u0000\u03b3\u03c1\u0001"+ - "\u0000\u0000\u0000\u03b4\u03b5\u0005\u0001\u0000\u0000\u03b5\u03b6\u0005"+ - "\u0090\u0000\u0000\u03b6\u03b7\u0003\u0080@\u0000\u03b7\u03b8\u0005\u0006"+ - "\u0000\u0000\u03b8\u03b9\u0005\u0002\u0000\u0000\u03b9\u03c1\u0001\u0000"+ - "\u0000\u0000\u03ba\u03bb\u0005\u0001\u0000\u0000\u03bb\u03bc\u0005\u0091"+ - "\u0000\u0000\u03bc\u03bd\u0003\u0080@\u0000\u03bd\u03be\u0005\u0006\u0000"+ - "\u0000\u03be\u03bf\u0005\u0002\u0000\u0000\u03bf\u03c1\u0001\u0000\u0000"+ - "\u0000\u03c0\u038c\u0001\u0000\u0000\u0000\u03c0\u0392\u0001\u0000\u0000"+ - "\u0000\u03c0\u0398\u0001\u0000\u0000\u0000\u03c0\u039e\u0001\u0000\u0000"+ - "\u0000\u03c0\u03a4\u0001\u0000\u0000\u0000\u03c0\u03aa\u0001\u0000\u0000"+ - "\u0000\u03c0\u03af\u0001\u0000\u0000\u0000\u03c0\u03b4\u0001\u0000\u0000"+ - "\u0000\u03c0\u03ba\u0001\u0000\u0000\u0000\u03c1\u0083\u0001\u0000\u0000"+ - "\u0000\u03c2\u03cf\u0003\u0080@\u0000\u03c3\u03cf\u0003\u0082A\u0000\u03c4"+ - "\u03cf\u0003~?\u0000\u03c5\u03c6\u0005\u0001\u0000\u0000\u03c6\u03c7\u0005"+ - "\u0087\u0000\u0000\u03c7\u03c9\u0003\u0002\u0001\u0000\u03c8\u03ca\u0005"+ - "\u0094\u0000\u0000\u03c9\u03c8\u0001\u0000\u0000\u0000\u03c9\u03ca\u0001"+ - "\u0000\u0000\u0000\u03ca\u03cb\u0001\u0000\u0000\u0000\u03cb\u03cc\u0005"+ - "\u0002\u0000\u0000\u03cc\u03cf\u0001\u0000\u0000\u0000\u03cd\u03cf\u0003"+ - "\u0086C\u0000\u03ce\u03c2\u0001\u0000\u0000\u0000\u03ce\u03c3\u0001\u0000"+ - "\u0000\u0000\u03ce\u03c4\u0001\u0000\u0000\u0000\u03ce\u03c5\u0001\u0000"+ - "\u0000\u0000\u03ce\u03cd\u0001\u0000\u0000\u0000\u03cf\u0085\u0001\u0000"+ - "\u0000\u0000\u03d0\u03d1\u0005\u0001\u0000\u0000\u03d1\u03d3\u0005\u0086"+ - "\u0000\u0000\u03d2\u03d4\u0005\u0094\u0000\u0000\u03d3\u03d2\u0001\u0000"+ - "\u0000\u0000\u03d3\u03d4\u0001\u0000\u0000\u0000\u03d4\u03d8\u0001\u0000"+ - "\u0000\u0000\u03d5\u03d7\u0003\u0084B\u0000\u03d6\u03d5\u0001\u0000\u0000"+ - "\u0000\u03d7\u03da\u0001\u0000\u0000\u0000\u03d8\u03d6\u0001\u0000\u0000"+ - "\u0000\u03d8\u03d9\u0001\u0000\u0000\u0000\u03d9\u03db\u0001\u0000\u0000"+ - "\u0000\u03da\u03d8\u0001\u0000\u0000\u0000\u03db\u03f1\u0005\u0002\u0000"+ - "\u0000\u03dc\u03dd\u0005\u0001\u0000\u0000\u03dd\u03df\u0005\u0092\u0000"+ - "\u0000\u03de\u03e0\u0005\u0094\u0000\u0000\u03df\u03de\u0001\u0000\u0000"+ - "\u0000\u03df\u03e0\u0001\u0000\u0000\u0000\u03e0\u03e1\u0001\u0000\u0000"+ - "\u0000\u03e1\u03e2\u0005\u0006\u0000\u0000\u03e2\u03f1\u0005\u0002\u0000"+ - "\u0000\u03e3\u03e4\u0005\u0001\u0000\u0000\u03e4\u03e6\u0005\u0093\u0000"+ - "\u0000\u03e5\u03e7\u0005\u0094\u0000\u0000\u03e6\u03e5\u0001\u0000\u0000"+ - "\u0000\u03e6\u03e7\u0001\u0000\u0000\u0000\u03e7\u03e8\u0001\u0000\u0000"+ - "\u0000\u03e8\u03e9\u0005\u0006\u0000\u0000\u03e9\u03f1\u0005\u0002\u0000"+ - "\u0000\u03ea\u03eb\u0005\u0001\u0000\u0000\u03eb\u03ed\u0005\u0093\u0000"+ - "\u0000\u03ec\u03ee\u0005\u0094\u0000\u0000\u03ed\u03ec\u0001\u0000\u0000"+ - "\u0000\u03ed\u03ee\u0001\u0000\u0000\u0000\u03ee\u03ef\u0001\u0000\u0000"+ - "\u0000\u03ef\u03f1\u0005\u0002\u0000\u0000\u03f0\u03d0\u0001\u0000\u0000"+ - "\u0000\u03f0\u03dc\u0001\u0000\u0000\u0000\u03f0\u03e3\u0001\u0000\u0000"+ - "\u0000\u03f0\u03ea\u0001\u0000\u0000\u0000\u03f1\u0087\u0001\u0000\u0000"+ - "\u0000\u03f2\u03f3\u0005\u0001\u0000\u0000\u03f3\u03f4\u0005\b\u0000\u0000"+ - "\u03f4\u03f5\u0003\u001e\u000f\u0000\u03f5\u03f6\u0005\u0002\u0000\u0000"+ - "\u03f6\u0089\u0001\u0000\u0000\u0000\u03f7\u03f9\u0003\u0088D\u0000\u03f8"+ - "\u03f7\u0001\u0000\u0000\u0000\u03f9\u03fc\u0001\u0000\u0000\u0000\u03fa"+ - "\u03f8\u0001\u0000\u0000\u0000\u03fa\u03fb\u0001\u0000\u0000\u0000\u03fb"+ - "\u008b\u0001\u0000\u0000\u0000\u03fc\u03fa\u0001\u0000\u0000\u0000\u03fd"+ - "\u03ff\u0003\u0084B\u0000\u03fe\u03fd\u0001\u0000\u0000\u0000\u03ff\u0402"+ - "\u0001\u0000\u0000\u0000\u0400\u03fe\u0001\u0000\u0000\u0000\u0400\u0401"+ - "\u0001\u0000\u0000\u0000\u0401\u0403\u0001\u0000\u0000\u0000\u0402\u0400"+ - "\u0001\u0000\u0000\u0000\u0403\u040c\u0005\u0000\u0000\u0001\u0404\u0406"+ - "\u0003z=\u0000\u0405\u0404\u0001\u0000\u0000\u0000\u0406\u0407\u0001\u0000"+ - "\u0000\u0000\u0407\u0405\u0001\u0000\u0000\u0000\u0407\u0408\u0001\u0000"+ - "\u0000\u0000\u0408\u0409\u0001\u0000\u0000\u0000\u0409\u040a\u0005\u0000"+ - "\u0000\u0001\u040a\u040c\u0001\u0000\u0000\u0000\u040b\u0400\u0001\u0000"+ - "\u0000\u0000\u040b\u0405\u0001\u0000\u0000\u0000\u040c\u008d\u0001\u0000"+ - "\u0000\u0000\u040d\u040e\u0003|>\u0000\u040e\u040f\u0005\u0000\u0000\u0001"+ - "\u040f\u0418\u0001\u0000\u0000\u0000\u0410\u0412\u0003z=\u0000\u0411\u0410"+ - "\u0001\u0000\u0000\u0000\u0412\u0415\u0001\u0000\u0000\u0000\u0413\u0411"+ - "\u0001\u0000\u0000\u0000\u0413\u0414\u0001\u0000\u0000\u0000\u0414\u0416"+ - "\u0001\u0000\u0000\u0000\u0415\u0413\u0001\u0000\u0000\u0000\u0416\u0418"+ - "\u0005\u0000\u0000\u0001\u0417\u040d\u0001\u0000\u0000\u0000\u0417\u0413"+ - "\u0001\u0000\u0000\u0000\u0418\u008f\u0001\u0000\u0000\u0000q\u009d\u00a7"+ - "\u00b3\u00b9\u00be\u00c6\u00cc\u00d4\u00da\u00eb\u0103\u0116\u0119\u011d"+ - "\u0120\u0134\u0141\u0146\u014d\u0152\u0155\u015c\u0162\u016a\u0170\u0178"+ - "\u017e\u0188\u018e\u0195\u019a\u019e\u01a3\u01a7\u01ac\u01af\u01b3\u01b5"+ - "\u01bc\u01c2\u01cf\u01d8\u01dd\u01e2\u01e8\u01f3\u01f5\u01f8\u0201\u0207"+ - "\u0211\u0217\u021d\u0223\u0227\u022e\u0234\u0239\u0240\u024a\u0250\u0255"+ - "\u0260\u0265\u026d\u0275\u027b\u0280\u0285\u0297\u029c\u02a1\u02a9\u02b1"+ - "\u02b7\u02bc\u02c1\u02d2\u02d6\u02db\u02e9\u02ee\u02f6\u02fe\u0306\u030e"+ - "\u0313\u0336\u0346\u035a\u035f\u0364\u036d\u0373\u0377\u037c\u0385\u038a"+ - "\u03c0\u03c9\u03ce\u03d3\u03d8\u03df\u03e6\u03ed\u03f0\u03fa\u0400\u0407"+ - "\u040b\u0413\u0417"; - public static final ATN _ATN = - new ATNDeserializer().deserialize(_serializedATN.toCharArray()); - static { - _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; - for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { - _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); - } - } -} \ No newline at end of file diff --git a/grammar/WatParser.tokens b/grammar/WatParser.tokens deleted file mode 100644 index 3284f78c5..000000000 --- a/grammar/WatParser.tokens +++ /dev/null @@ -1,281 +0,0 @@ -LPAR=1 -RPAR=2 -NAT=3 -INT=4 -FLOAT=5 -STRING_=6 -VALUE_TYPE=7 -CONST=8 -SYMBOLIC=9 -FUNCREF=10 -EXTERNREF=11 -MUT=12 -NOP=13 -SYM_ASSERT=14 -ALLOC=15 -FREE=16 -UNREACHABLE=17 -DROP=18 -BLOCK=19 -LOOP=20 -FOR=21 -VBAR=22 -END=23 -BR=24 -BR_IF=25 -BR_TABLE=26 -RETURN=27 -IF=28 -THEN=29 -ELSE=30 -SELECT=31 -CALL=32 -CALL_INDIRECT=33 -RETURN_CALL=34 -RETURN_CALL_INDIRECT=35 -LOCAL_GET=36 -LOCAL_SET=37 -LOCAL_TEE=38 -GLOBAL_GET=39 -GLOBAL_SET=40 -LOAD=41 -STORE=42 -UNDERSCORE=43 -OFFSET_EQ=44 -ALIGN_EQ=45 -SIGN_POSTFIX=46 -MEM_SIZE=47 -I32=48 -I64=49 -F32=50 -F64=51 -IXX=52 -FXX=53 -OP_EQZ=54 -OP_EQ=55 -OP_NE=56 -OP_LT=57 -OP_LTS=58 -OP_LTU=59 -OP_LE=60 -OP_LES=61 -OP_LEU=62 -OP_GT=63 -OP_GTS=64 -OP_GTU=65 -OP_GE=66 -OP_GES=67 -OP_GEU=68 -OP_CLZ=69 -OP_CTZ=70 -OP_POPCNT=71 -OP_NEG=72 -OP_ABS=73 -OP_SQRT=74 -OP_CEIL=75 -OP_FLOOR=76 -OP_TRUNC=77 -OP_NEAREST=78 -OP_ADD=79 -OP_SUB=80 -OP_MUL=81 -OP_DIV=82 -OP_DIV_S=83 -OP_DIV_U=84 -OP_REM_S=85 -OP_REM_U=86 -OP_AND=87 -OP_OR=88 -OP_XOR=89 -OP_SHL=90 -OP_SHR_S=91 -OP_SHR_U=92 -OP_ROTL=93 -OP_ROTR=94 -OP_MIN=95 -OP_MAX=96 -OP_COPYSIGN=97 -OP_WRAP=98 -OP_TRUNC_=99 -OP_TRUNC_SAT=100 -OP_CONVERT=101 -OP_EXTEND=102 -OP_DEMOTE=103 -OP_PROMOTE=104 -OP_REINTER=105 -MEMORY_SIZE=106 -MEMORY_GROW=107 -MEMORY_FILL=108 -MEMORY_COPY=109 -MEMORY_INIT=110 -TEST=111 -COMPARE=112 -UNARY=113 -BINARY=114 -CONVERT=115 -TYPE=116 -FUNC=117 -EXTERN=118 -START_=119 -PARAM=120 -RESULT=121 -LOCAL=122 -GLOBAL=123 -TABLE=124 -MEMORY=125 -ELEM=126 -DATA=127 -OFFSET=128 -IMPORT=129 -EXPORT=130 -MODULE=131 -BIN=132 -QUOTE=133 -SCRIPT=134 -REGISTER=135 -INVOKE=136 -GET=137 -ASSERT_MALFORMED=138 -ASSERT_INVALID=139 -ASSERT_UNLINKABLE=140 -ASSERT_RETURN=141 -ASSERT_RETURN_CANONICAL_NAN=142 -ASSERT_RETURN_ARITHMETIC_NAN=143 -ASSERT_TRAP=144 -ASSERT_EXHAUSTION=145 -INPUT=146 -OUTPUT=147 -VAR=148 -V128=149 -SPACE=150 -COMMENT=151 -'('=1 -')'=2 -'funcref'=10 -'externref'=11 -'mut'=12 -'nop'=13 -'sym_assert'=14 -'alloc'=15 -'free'=16 -'unreachable'=17 -'drop'=18 -'block'=19 -'loop'=20 -'for'=21 -'|'=22 -'end'=23 -'br'=24 -'br_if'=25 -'br_table'=26 -'return'=27 -'if'=28 -'then'=29 -'else'=30 -'.select'=31 -'call'=32 -'call_indirect'=33 -'return_call'=34 -'return_call_indirect'=35 -'local.get'=36 -'local.set'=37 -'local.tee'=38 -'global.get'=39 -'global.set'=40 -'_'=43 -'offset='=44 -'align='=45 -'i32'=48 -'i64'=49 -'f32'=50 -'f64'=51 -'.eqz'=54 -'.eq'=55 -'.ne'=56 -'.lt'=57 -'.lt_s'=58 -'.lt_u'=59 -'.le'=60 -'.le_s'=61 -'.le_u'=62 -'.gt'=63 -'.gt_s'=64 -'.gt_u'=65 -'.ge'=66 -'.ge_s'=67 -'.ge_u'=68 -'.clz'=69 -'.ctz'=70 -'.popcnt'=71 -'.neg'=72 -'.abs'=73 -'.sqrt'=74 -'.ceil'=75 -'.floor'=76 -'.trunc'=77 -'.nearest'=78 -'.add'=79 -'.sub'=80 -'.mul'=81 -'.div'=82 -'.div_s'=83 -'.div_u'=84 -'.rem_s'=85 -'.rem_u'=86 -'.and'=87 -'.or'=88 -'.xor'=89 -'.shl'=90 -'.shr_s'=91 -'.shr_u'=92 -'.rotl'=93 -'.rotr'=94 -'.min'=95 -'.max'=96 -'.copysign'=97 -'.wrap_'=98 -'.trunc_'=99 -'.trunc_sat_'=100 -'.convert_'=101 -'.extend_'=102 -'.demote_'=103 -'.promote_'=104 -'.reinterpret_'=105 -'memory.size'=106 -'memory.grow'=107 -'memory.fill'=108 -'memory.copy'=109 -'memory.init'=110 -'type'=116 -'func'=117 -'extern'=118 -'start'=119 -'param'=120 -'result'=121 -'local'=122 -'global'=123 -'table'=124 -'memory'=125 -'elem'=126 -'data'=127 -'offset'=128 -'import'=129 -'export'=130 -'module'=131 -'binary'=132 -'quote'=133 -'script'=134 -'register'=135 -'invoke'=136 -'get'=137 -'assert_malformed'=138 -'assert_invalid'=139 -'assert_unlinkable'=140 -'assert_return'=141 -'assert_return_canonical_nan'=142 -'assert_return_arithmetic_nan'=143 -'assert_trap'=144 -'assert_exhaustion'=145 -'input'=146 -'output'=147 -'v128'=149 diff --git a/grammar/WatParserBaseListener.java b/grammar/WatParserBaseListener.java deleted file mode 100644 index 67fc71037..000000000 --- a/grammar/WatParserBaseListener.java +++ /dev/null @@ -1,903 +0,0 @@ -// Generated from WatParser.g4 by ANTLR 4.13.2 - -import org.antlr.v4.runtime.ParserRuleContext; -import org.antlr.v4.runtime.tree.ErrorNode; -import org.antlr.v4.runtime.tree.TerminalNode; - -/** - * This class provides an empty implementation of {@link WatParserListener}, - * which can be extended to create a listener which only needs to handle a subset - * of the available methods. - */ -@SuppressWarnings("CheckReturnValue") -public class WatParserBaseListener implements WatParserListener { - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterValue(WatParser.ValueContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitValue(WatParser.ValueContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterName(WatParser.NameContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitName(WatParser.NameContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterNumType(WatParser.NumTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitNumType(WatParser.NumTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterRefType(WatParser.RefTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitRefType(WatParser.RefTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterVecType(WatParser.VecTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitVecType(WatParser.VecTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterValType(WatParser.ValTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitValType(WatParser.ValTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterHeapType(WatParser.HeapTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitHeapType(WatParser.HeapTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterGlobalType(WatParser.GlobalTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitGlobalType(WatParser.GlobalTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterDefType(WatParser.DefTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitDefType(WatParser.DefTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterFuncParamType(WatParser.FuncParamTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitFuncParamType(WatParser.FuncParamTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterFuncResType(WatParser.FuncResTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitFuncResType(WatParser.FuncResTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterFuncType(WatParser.FuncTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitFuncType(WatParser.FuncTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterTableType(WatParser.TableTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitTableType(WatParser.TableTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterMemoryType(WatParser.MemoryTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitMemoryType(WatParser.MemoryTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterTypeUse(WatParser.TypeUseContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitTypeUse(WatParser.TypeUseContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterLiteral(WatParser.LiteralContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitLiteral(WatParser.LiteralContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterIdx(WatParser.IdxContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitIdx(WatParser.IdxContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterBindVar(WatParser.BindVarContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitBindVar(WatParser.BindVarContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterInstr(WatParser.InstrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitInstr(WatParser.InstrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterForLoop(WatParser.ForLoopContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitForLoop(WatParser.ForLoopContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterPlainInstr(WatParser.PlainInstrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitPlainInstr(WatParser.PlainInstrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterOffsetEq(WatParser.OffsetEqContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitOffsetEq(WatParser.OffsetEqContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterAlignEq(WatParser.AlignEqContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitAlignEq(WatParser.AlignEqContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterLoad(WatParser.LoadContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitLoad(WatParser.LoadContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterStore(WatParser.StoreContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitStore(WatParser.StoreContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterSelectInstr(WatParser.SelectInstrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitSelectInstr(WatParser.SelectInstrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterCallIndirectInstr(WatParser.CallIndirectInstrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitCallIndirectInstr(WatParser.CallIndirectInstrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterCallInstrParams(WatParser.CallInstrParamsContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitCallInstrParams(WatParser.CallInstrParamsContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterCallInstrParamsInstr(WatParser.CallInstrParamsInstrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitCallInstrParamsInstr(WatParser.CallInstrParamsInstrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterCallInstrResultsInstr(WatParser.CallInstrResultsInstrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitCallInstrResultsInstr(WatParser.CallInstrResultsInstrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterBlockInstr(WatParser.BlockInstrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitBlockInstr(WatParser.BlockInstrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterBlockType(WatParser.BlockTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitBlockType(WatParser.BlockTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterBlock(WatParser.BlockContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitBlock(WatParser.BlockContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterFoldedInstr(WatParser.FoldedInstrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitFoldedInstr(WatParser.FoldedInstrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterExpr(WatParser.ExprContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitExpr(WatParser.ExprContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterCallExprType(WatParser.CallExprTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitCallExprType(WatParser.CallExprTypeContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterCallExprParams(WatParser.CallExprParamsContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitCallExprParams(WatParser.CallExprParamsContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterCallExprResults(WatParser.CallExprResultsContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitCallExprResults(WatParser.CallExprResultsContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterInstrList(WatParser.InstrListContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitInstrList(WatParser.InstrListContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterConstExpr(WatParser.ConstExprContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitConstExpr(WatParser.ConstExprContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterFunction(WatParser.FunctionContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitFunction(WatParser.FunctionContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterFuncFields(WatParser.FuncFieldsContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitFuncFields(WatParser.FuncFieldsContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterFuncFieldsBody(WatParser.FuncFieldsBodyContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitFuncFieldsBody(WatParser.FuncFieldsBodyContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterFuncBody(WatParser.FuncBodyContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitFuncBody(WatParser.FuncBodyContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterOffset(WatParser.OffsetContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitOffset(WatParser.OffsetContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterElem(WatParser.ElemContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitElem(WatParser.ElemContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterTable(WatParser.TableContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitTable(WatParser.TableContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterTableField(WatParser.TableFieldContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitTableField(WatParser.TableFieldContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterData(WatParser.DataContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitData(WatParser.DataContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterMemory(WatParser.MemoryContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitMemory(WatParser.MemoryContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterMemoryField(WatParser.MemoryFieldContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitMemoryField(WatParser.MemoryFieldContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterGlobal(WatParser.GlobalContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitGlobal(WatParser.GlobalContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterGlobalField(WatParser.GlobalFieldContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitGlobalField(WatParser.GlobalFieldContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterImportDesc(WatParser.ImportDescContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitImportDesc(WatParser.ImportDescContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterSimport(WatParser.SimportContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitSimport(WatParser.SimportContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterInlineImport(WatParser.InlineImportContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitInlineImport(WatParser.InlineImportContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterExportDesc(WatParser.ExportDescContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitExportDesc(WatParser.ExportDescContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterExport_(WatParser.Export_Context ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitExport_(WatParser.Export_Context ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterInlineExport(WatParser.InlineExportContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitInlineExport(WatParser.InlineExportContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterTypeDef(WatParser.TypeDefContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitTypeDef(WatParser.TypeDefContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterStart_(WatParser.Start_Context ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitStart_(WatParser.Start_Context ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterModuleField(WatParser.ModuleFieldContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitModuleField(WatParser.ModuleFieldContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterModule_(WatParser.Module_Context ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitModule_(WatParser.Module_Context ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterScriptModule(WatParser.ScriptModuleContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitScriptModule(WatParser.ScriptModuleContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterAction_(WatParser.Action_Context ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitAction_(WatParser.Action_Context ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterAssertion(WatParser.AssertionContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitAssertion(WatParser.AssertionContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterCmd(WatParser.CmdContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitCmd(WatParser.CmdContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterMeta(WatParser.MetaContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitMeta(WatParser.MetaContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterWconst(WatParser.WconstContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitWconst(WatParser.WconstContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterConstList(WatParser.ConstListContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitConstList(WatParser.ConstListContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterScript(WatParser.ScriptContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitScript(WatParser.ScriptContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterModule(WatParser.ModuleContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitModule(WatParser.ModuleContext ctx) { } - - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterEveryRule(ParserRuleContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitEveryRule(ParserRuleContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void visitTerminal(TerminalNode node) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void visitErrorNode(ErrorNode node) { } -} \ No newline at end of file diff --git a/grammar/WatParserBaseVisitor.java b/grammar/WatParserBaseVisitor.java deleted file mode 100644 index 4dca62bbd..000000000 --- a/grammar/WatParserBaseVisitor.java +++ /dev/null @@ -1,518 +0,0 @@ -// Generated from WatParser.g4 by ANTLR 4.13.2 -import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; - -/** - * This class provides an empty implementation of {@link WatParserVisitor}, - * which can be extended to create a visitor which only needs to handle a subset - * of the available methods. - * - * @param The return type of the visit operation. Use {@link Void} for - * operations with no return type. - */ -@SuppressWarnings("CheckReturnValue") -public class WatParserBaseVisitor extends AbstractParseTreeVisitor implements WatParserVisitor { - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitValue(WatParser.ValueContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitName(WatParser.NameContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitNumType(WatParser.NumTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitRefType(WatParser.RefTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitVecType(WatParser.VecTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitValType(WatParser.ValTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitHeapType(WatParser.HeapTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitGlobalType(WatParser.GlobalTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitDefType(WatParser.DefTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitFuncParamType(WatParser.FuncParamTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitFuncResType(WatParser.FuncResTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitFuncType(WatParser.FuncTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitTableType(WatParser.TableTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitMemoryType(WatParser.MemoryTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitTypeUse(WatParser.TypeUseContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitLiteral(WatParser.LiteralContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitIdx(WatParser.IdxContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitBindVar(WatParser.BindVarContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitInstr(WatParser.InstrContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitForLoop(WatParser.ForLoopContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitPlainInstr(WatParser.PlainInstrContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitOffsetEq(WatParser.OffsetEqContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitAlignEq(WatParser.AlignEqContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitLoad(WatParser.LoadContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitStore(WatParser.StoreContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitSelectInstr(WatParser.SelectInstrContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitCallIndirectInstr(WatParser.CallIndirectInstrContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitCallInstrParams(WatParser.CallInstrParamsContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitCallInstrParamsInstr(WatParser.CallInstrParamsInstrContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitCallInstrResultsInstr(WatParser.CallInstrResultsInstrContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitBlockInstr(WatParser.BlockInstrContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitBlockType(WatParser.BlockTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitBlock(WatParser.BlockContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitFoldedInstr(WatParser.FoldedInstrContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitExpr(WatParser.ExprContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitCallExprType(WatParser.CallExprTypeContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitCallExprParams(WatParser.CallExprParamsContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitCallExprResults(WatParser.CallExprResultsContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitInstrList(WatParser.InstrListContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitConstExpr(WatParser.ConstExprContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitFunction(WatParser.FunctionContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitFuncFields(WatParser.FuncFieldsContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitFuncFieldsBody(WatParser.FuncFieldsBodyContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitFuncBody(WatParser.FuncBodyContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitOffset(WatParser.OffsetContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitElem(WatParser.ElemContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitTable(WatParser.TableContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitTableField(WatParser.TableFieldContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitData(WatParser.DataContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitMemory(WatParser.MemoryContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitMemoryField(WatParser.MemoryFieldContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitGlobal(WatParser.GlobalContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitGlobalField(WatParser.GlobalFieldContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitImportDesc(WatParser.ImportDescContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitSimport(WatParser.SimportContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitInlineImport(WatParser.InlineImportContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitExportDesc(WatParser.ExportDescContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitExport_(WatParser.Export_Context ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitInlineExport(WatParser.InlineExportContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitTypeDef(WatParser.TypeDefContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitStart_(WatParser.Start_Context ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitModuleField(WatParser.ModuleFieldContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitModule_(WatParser.Module_Context ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitScriptModule(WatParser.ScriptModuleContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitAction_(WatParser.Action_Context ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitAssertion(WatParser.AssertionContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitCmd(WatParser.CmdContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitMeta(WatParser.MetaContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitWconst(WatParser.WconstContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitConstList(WatParser.ConstListContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitScript(WatParser.ScriptContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitModule(WatParser.ModuleContext ctx) { return visitChildren(ctx); } -} \ No newline at end of file diff --git a/grammar/WatParserListener.java b/grammar/WatParserListener.java deleted file mode 100644 index 506d6f163..000000000 --- a/grammar/WatParserListener.java +++ /dev/null @@ -1,729 +0,0 @@ -// Generated from WatParser.g4 by ANTLR 4.13.2 -import org.antlr.v4.runtime.tree.ParseTreeListener; - -/** - * This interface defines a complete listener for a parse tree produced by - * {@link WatParser}. - */ -public interface WatParserListener extends ParseTreeListener { - /** - * Enter a parse tree produced by {@link WatParser#value}. - * @param ctx the parse tree - */ - void enterValue(WatParser.ValueContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#value}. - * @param ctx the parse tree - */ - void exitValue(WatParser.ValueContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#name}. - * @param ctx the parse tree - */ - void enterName(WatParser.NameContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#name}. - * @param ctx the parse tree - */ - void exitName(WatParser.NameContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#numType}. - * @param ctx the parse tree - */ - void enterNumType(WatParser.NumTypeContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#numType}. - * @param ctx the parse tree - */ - void exitNumType(WatParser.NumTypeContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#refType}. - * @param ctx the parse tree - */ - void enterRefType(WatParser.RefTypeContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#refType}. - * @param ctx the parse tree - */ - void exitRefType(WatParser.RefTypeContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#vecType}. - * @param ctx the parse tree - */ - void enterVecType(WatParser.VecTypeContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#vecType}. - * @param ctx the parse tree - */ - void exitVecType(WatParser.VecTypeContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#valType}. - * @param ctx the parse tree - */ - void enterValType(WatParser.ValTypeContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#valType}. - * @param ctx the parse tree - */ - void exitValType(WatParser.ValTypeContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#heapType}. - * @param ctx the parse tree - */ - void enterHeapType(WatParser.HeapTypeContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#heapType}. - * @param ctx the parse tree - */ - void exitHeapType(WatParser.HeapTypeContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#globalType}. - * @param ctx the parse tree - */ - void enterGlobalType(WatParser.GlobalTypeContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#globalType}. - * @param ctx the parse tree - */ - void exitGlobalType(WatParser.GlobalTypeContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#defType}. - * @param ctx the parse tree - */ - void enterDefType(WatParser.DefTypeContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#defType}. - * @param ctx the parse tree - */ - void exitDefType(WatParser.DefTypeContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#funcParamType}. - * @param ctx the parse tree - */ - void enterFuncParamType(WatParser.FuncParamTypeContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#funcParamType}. - * @param ctx the parse tree - */ - void exitFuncParamType(WatParser.FuncParamTypeContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#funcResType}. - * @param ctx the parse tree - */ - void enterFuncResType(WatParser.FuncResTypeContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#funcResType}. - * @param ctx the parse tree - */ - void exitFuncResType(WatParser.FuncResTypeContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#funcType}. - * @param ctx the parse tree - */ - void enterFuncType(WatParser.FuncTypeContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#funcType}. - * @param ctx the parse tree - */ - void exitFuncType(WatParser.FuncTypeContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#tableType}. - * @param ctx the parse tree - */ - void enterTableType(WatParser.TableTypeContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#tableType}. - * @param ctx the parse tree - */ - void exitTableType(WatParser.TableTypeContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#memoryType}. - * @param ctx the parse tree - */ - void enterMemoryType(WatParser.MemoryTypeContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#memoryType}. - * @param ctx the parse tree - */ - void exitMemoryType(WatParser.MemoryTypeContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#typeUse}. - * @param ctx the parse tree - */ - void enterTypeUse(WatParser.TypeUseContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#typeUse}. - * @param ctx the parse tree - */ - void exitTypeUse(WatParser.TypeUseContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#literal}. - * @param ctx the parse tree - */ - void enterLiteral(WatParser.LiteralContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#literal}. - * @param ctx the parse tree - */ - void exitLiteral(WatParser.LiteralContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#idx}. - * @param ctx the parse tree - */ - void enterIdx(WatParser.IdxContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#idx}. - * @param ctx the parse tree - */ - void exitIdx(WatParser.IdxContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#bindVar}. - * @param ctx the parse tree - */ - void enterBindVar(WatParser.BindVarContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#bindVar}. - * @param ctx the parse tree - */ - void exitBindVar(WatParser.BindVarContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#instr}. - * @param ctx the parse tree - */ - void enterInstr(WatParser.InstrContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#instr}. - * @param ctx the parse tree - */ - void exitInstr(WatParser.InstrContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#forLoop}. - * @param ctx the parse tree - */ - void enterForLoop(WatParser.ForLoopContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#forLoop}. - * @param ctx the parse tree - */ - void exitForLoop(WatParser.ForLoopContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#plainInstr}. - * @param ctx the parse tree - */ - void enterPlainInstr(WatParser.PlainInstrContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#plainInstr}. - * @param ctx the parse tree - */ - void exitPlainInstr(WatParser.PlainInstrContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#offsetEq}. - * @param ctx the parse tree - */ - void enterOffsetEq(WatParser.OffsetEqContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#offsetEq}. - * @param ctx the parse tree - */ - void exitOffsetEq(WatParser.OffsetEqContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#alignEq}. - * @param ctx the parse tree - */ - void enterAlignEq(WatParser.AlignEqContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#alignEq}. - * @param ctx the parse tree - */ - void exitAlignEq(WatParser.AlignEqContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#load}. - * @param ctx the parse tree - */ - void enterLoad(WatParser.LoadContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#load}. - * @param ctx the parse tree - */ - void exitLoad(WatParser.LoadContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#store}. - * @param ctx the parse tree - */ - void enterStore(WatParser.StoreContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#store}. - * @param ctx the parse tree - */ - void exitStore(WatParser.StoreContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#selectInstr}. - * @param ctx the parse tree - */ - void enterSelectInstr(WatParser.SelectInstrContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#selectInstr}. - * @param ctx the parse tree - */ - void exitSelectInstr(WatParser.SelectInstrContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#callIndirectInstr}. - * @param ctx the parse tree - */ - void enterCallIndirectInstr(WatParser.CallIndirectInstrContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#callIndirectInstr}. - * @param ctx the parse tree - */ - void exitCallIndirectInstr(WatParser.CallIndirectInstrContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#callInstrParams}. - * @param ctx the parse tree - */ - void enterCallInstrParams(WatParser.CallInstrParamsContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#callInstrParams}. - * @param ctx the parse tree - */ - void exitCallInstrParams(WatParser.CallInstrParamsContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#callInstrParamsInstr}. - * @param ctx the parse tree - */ - void enterCallInstrParamsInstr(WatParser.CallInstrParamsInstrContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#callInstrParamsInstr}. - * @param ctx the parse tree - */ - void exitCallInstrParamsInstr(WatParser.CallInstrParamsInstrContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#callInstrResultsInstr}. - * @param ctx the parse tree - */ - void enterCallInstrResultsInstr(WatParser.CallInstrResultsInstrContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#callInstrResultsInstr}. - * @param ctx the parse tree - */ - void exitCallInstrResultsInstr(WatParser.CallInstrResultsInstrContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#blockInstr}. - * @param ctx the parse tree - */ - void enterBlockInstr(WatParser.BlockInstrContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#blockInstr}. - * @param ctx the parse tree - */ - void exitBlockInstr(WatParser.BlockInstrContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#blockType}. - * @param ctx the parse tree - */ - void enterBlockType(WatParser.BlockTypeContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#blockType}. - * @param ctx the parse tree - */ - void exitBlockType(WatParser.BlockTypeContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#block}. - * @param ctx the parse tree - */ - void enterBlock(WatParser.BlockContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#block}. - * @param ctx the parse tree - */ - void exitBlock(WatParser.BlockContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#foldedInstr}. - * @param ctx the parse tree - */ - void enterFoldedInstr(WatParser.FoldedInstrContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#foldedInstr}. - * @param ctx the parse tree - */ - void exitFoldedInstr(WatParser.FoldedInstrContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#expr}. - * @param ctx the parse tree - */ - void enterExpr(WatParser.ExprContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#expr}. - * @param ctx the parse tree - */ - void exitExpr(WatParser.ExprContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#callExprType}. - * @param ctx the parse tree - */ - void enterCallExprType(WatParser.CallExprTypeContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#callExprType}. - * @param ctx the parse tree - */ - void exitCallExprType(WatParser.CallExprTypeContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#callExprParams}. - * @param ctx the parse tree - */ - void enterCallExprParams(WatParser.CallExprParamsContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#callExprParams}. - * @param ctx the parse tree - */ - void exitCallExprParams(WatParser.CallExprParamsContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#callExprResults}. - * @param ctx the parse tree - */ - void enterCallExprResults(WatParser.CallExprResultsContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#callExprResults}. - * @param ctx the parse tree - */ - void exitCallExprResults(WatParser.CallExprResultsContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#instrList}. - * @param ctx the parse tree - */ - void enterInstrList(WatParser.InstrListContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#instrList}. - * @param ctx the parse tree - */ - void exitInstrList(WatParser.InstrListContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#constExpr}. - * @param ctx the parse tree - */ - void enterConstExpr(WatParser.ConstExprContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#constExpr}. - * @param ctx the parse tree - */ - void exitConstExpr(WatParser.ConstExprContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#function}. - * @param ctx the parse tree - */ - void enterFunction(WatParser.FunctionContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#function}. - * @param ctx the parse tree - */ - void exitFunction(WatParser.FunctionContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#funcFields}. - * @param ctx the parse tree - */ - void enterFuncFields(WatParser.FuncFieldsContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#funcFields}. - * @param ctx the parse tree - */ - void exitFuncFields(WatParser.FuncFieldsContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#funcFieldsBody}. - * @param ctx the parse tree - */ - void enterFuncFieldsBody(WatParser.FuncFieldsBodyContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#funcFieldsBody}. - * @param ctx the parse tree - */ - void exitFuncFieldsBody(WatParser.FuncFieldsBodyContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#funcBody}. - * @param ctx the parse tree - */ - void enterFuncBody(WatParser.FuncBodyContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#funcBody}. - * @param ctx the parse tree - */ - void exitFuncBody(WatParser.FuncBodyContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#offset}. - * @param ctx the parse tree - */ - void enterOffset(WatParser.OffsetContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#offset}. - * @param ctx the parse tree - */ - void exitOffset(WatParser.OffsetContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#elem}. - * @param ctx the parse tree - */ - void enterElem(WatParser.ElemContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#elem}. - * @param ctx the parse tree - */ - void exitElem(WatParser.ElemContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#table}. - * @param ctx the parse tree - */ - void enterTable(WatParser.TableContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#table}. - * @param ctx the parse tree - */ - void exitTable(WatParser.TableContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#tableField}. - * @param ctx the parse tree - */ - void enterTableField(WatParser.TableFieldContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#tableField}. - * @param ctx the parse tree - */ - void exitTableField(WatParser.TableFieldContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#data}. - * @param ctx the parse tree - */ - void enterData(WatParser.DataContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#data}. - * @param ctx the parse tree - */ - void exitData(WatParser.DataContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#memory}. - * @param ctx the parse tree - */ - void enterMemory(WatParser.MemoryContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#memory}. - * @param ctx the parse tree - */ - void exitMemory(WatParser.MemoryContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#memoryField}. - * @param ctx the parse tree - */ - void enterMemoryField(WatParser.MemoryFieldContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#memoryField}. - * @param ctx the parse tree - */ - void exitMemoryField(WatParser.MemoryFieldContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#global}. - * @param ctx the parse tree - */ - void enterGlobal(WatParser.GlobalContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#global}. - * @param ctx the parse tree - */ - void exitGlobal(WatParser.GlobalContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#globalField}. - * @param ctx the parse tree - */ - void enterGlobalField(WatParser.GlobalFieldContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#globalField}. - * @param ctx the parse tree - */ - void exitGlobalField(WatParser.GlobalFieldContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#importDesc}. - * @param ctx the parse tree - */ - void enterImportDesc(WatParser.ImportDescContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#importDesc}. - * @param ctx the parse tree - */ - void exitImportDesc(WatParser.ImportDescContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#simport}. - * @param ctx the parse tree - */ - void enterSimport(WatParser.SimportContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#simport}. - * @param ctx the parse tree - */ - void exitSimport(WatParser.SimportContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#inlineImport}. - * @param ctx the parse tree - */ - void enterInlineImport(WatParser.InlineImportContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#inlineImport}. - * @param ctx the parse tree - */ - void exitInlineImport(WatParser.InlineImportContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#exportDesc}. - * @param ctx the parse tree - */ - void enterExportDesc(WatParser.ExportDescContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#exportDesc}. - * @param ctx the parse tree - */ - void exitExportDesc(WatParser.ExportDescContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#export_}. - * @param ctx the parse tree - */ - void enterExport_(WatParser.Export_Context ctx); - /** - * Exit a parse tree produced by {@link WatParser#export_}. - * @param ctx the parse tree - */ - void exitExport_(WatParser.Export_Context ctx); - /** - * Enter a parse tree produced by {@link WatParser#inlineExport}. - * @param ctx the parse tree - */ - void enterInlineExport(WatParser.InlineExportContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#inlineExport}. - * @param ctx the parse tree - */ - void exitInlineExport(WatParser.InlineExportContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#typeDef}. - * @param ctx the parse tree - */ - void enterTypeDef(WatParser.TypeDefContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#typeDef}. - * @param ctx the parse tree - */ - void exitTypeDef(WatParser.TypeDefContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#start_}. - * @param ctx the parse tree - */ - void enterStart_(WatParser.Start_Context ctx); - /** - * Exit a parse tree produced by {@link WatParser#start_}. - * @param ctx the parse tree - */ - void exitStart_(WatParser.Start_Context ctx); - /** - * Enter a parse tree produced by {@link WatParser#moduleField}. - * @param ctx the parse tree - */ - void enterModuleField(WatParser.ModuleFieldContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#moduleField}. - * @param ctx the parse tree - */ - void exitModuleField(WatParser.ModuleFieldContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#module_}. - * @param ctx the parse tree - */ - void enterModule_(WatParser.Module_Context ctx); - /** - * Exit a parse tree produced by {@link WatParser#module_}. - * @param ctx the parse tree - */ - void exitModule_(WatParser.Module_Context ctx); - /** - * Enter a parse tree produced by {@link WatParser#scriptModule}. - * @param ctx the parse tree - */ - void enterScriptModule(WatParser.ScriptModuleContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#scriptModule}. - * @param ctx the parse tree - */ - void exitScriptModule(WatParser.ScriptModuleContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#action_}. - * @param ctx the parse tree - */ - void enterAction_(WatParser.Action_Context ctx); - /** - * Exit a parse tree produced by {@link WatParser#action_}. - * @param ctx the parse tree - */ - void exitAction_(WatParser.Action_Context ctx); - /** - * Enter a parse tree produced by {@link WatParser#assertion}. - * @param ctx the parse tree - */ - void enterAssertion(WatParser.AssertionContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#assertion}. - * @param ctx the parse tree - */ - void exitAssertion(WatParser.AssertionContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#cmd}. - * @param ctx the parse tree - */ - void enterCmd(WatParser.CmdContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#cmd}. - * @param ctx the parse tree - */ - void exitCmd(WatParser.CmdContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#meta}. - * @param ctx the parse tree - */ - void enterMeta(WatParser.MetaContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#meta}. - * @param ctx the parse tree - */ - void exitMeta(WatParser.MetaContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#wconst}. - * @param ctx the parse tree - */ - void enterWconst(WatParser.WconstContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#wconst}. - * @param ctx the parse tree - */ - void exitWconst(WatParser.WconstContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#constList}. - * @param ctx the parse tree - */ - void enterConstList(WatParser.ConstListContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#constList}. - * @param ctx the parse tree - */ - void exitConstList(WatParser.ConstListContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#script}. - * @param ctx the parse tree - */ - void enterScript(WatParser.ScriptContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#script}. - * @param ctx the parse tree - */ - void exitScript(WatParser.ScriptContext ctx); - /** - * Enter a parse tree produced by {@link WatParser#module}. - * @param ctx the parse tree - */ - void enterModule(WatParser.ModuleContext ctx); - /** - * Exit a parse tree produced by {@link WatParser#module}. - * @param ctx the parse tree - */ - void exitModule(WatParser.ModuleContext ctx); -} \ No newline at end of file diff --git a/grammar/WatParserVisitor.java b/grammar/WatParserVisitor.java deleted file mode 100644 index 66ec1d7b6..000000000 --- a/grammar/WatParserVisitor.java +++ /dev/null @@ -1,444 +0,0 @@ -// Generated from WatParser.g4 by ANTLR 4.13.2 -import org.antlr.v4.runtime.tree.ParseTreeVisitor; - -/** - * This interface defines a complete generic visitor for a parse tree produced - * by {@link WatParser}. - * - * @param The return type of the visit operation. Use {@link Void} for - * operations with no return type. - */ -public interface WatParserVisitor extends ParseTreeVisitor { - /** - * Visit a parse tree produced by {@link WatParser#value}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitValue(WatParser.ValueContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#name}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitName(WatParser.NameContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#numType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitNumType(WatParser.NumTypeContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#refType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitRefType(WatParser.RefTypeContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#vecType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitVecType(WatParser.VecTypeContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#valType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitValType(WatParser.ValTypeContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#heapType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitHeapType(WatParser.HeapTypeContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#globalType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitGlobalType(WatParser.GlobalTypeContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#defType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitDefType(WatParser.DefTypeContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#funcParamType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitFuncParamType(WatParser.FuncParamTypeContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#funcResType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitFuncResType(WatParser.FuncResTypeContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#funcType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitFuncType(WatParser.FuncTypeContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#tableType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitTableType(WatParser.TableTypeContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#memoryType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitMemoryType(WatParser.MemoryTypeContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#typeUse}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitTypeUse(WatParser.TypeUseContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#literal}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitLiteral(WatParser.LiteralContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#idx}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitIdx(WatParser.IdxContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#bindVar}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitBindVar(WatParser.BindVarContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#instr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitInstr(WatParser.InstrContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#forLoop}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitForLoop(WatParser.ForLoopContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#plainInstr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitPlainInstr(WatParser.PlainInstrContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#offsetEq}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitOffsetEq(WatParser.OffsetEqContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#alignEq}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitAlignEq(WatParser.AlignEqContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#load}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitLoad(WatParser.LoadContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#store}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitStore(WatParser.StoreContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#selectInstr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitSelectInstr(WatParser.SelectInstrContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#callIndirectInstr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitCallIndirectInstr(WatParser.CallIndirectInstrContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#callInstrParams}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitCallInstrParams(WatParser.CallInstrParamsContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#callInstrParamsInstr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitCallInstrParamsInstr(WatParser.CallInstrParamsInstrContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#callInstrResultsInstr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitCallInstrResultsInstr(WatParser.CallInstrResultsInstrContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#blockInstr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitBlockInstr(WatParser.BlockInstrContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#blockType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitBlockType(WatParser.BlockTypeContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#block}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitBlock(WatParser.BlockContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#foldedInstr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitFoldedInstr(WatParser.FoldedInstrContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#expr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitExpr(WatParser.ExprContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#callExprType}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitCallExprType(WatParser.CallExprTypeContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#callExprParams}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitCallExprParams(WatParser.CallExprParamsContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#callExprResults}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitCallExprResults(WatParser.CallExprResultsContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#instrList}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitInstrList(WatParser.InstrListContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#constExpr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitConstExpr(WatParser.ConstExprContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#function}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitFunction(WatParser.FunctionContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#funcFields}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitFuncFields(WatParser.FuncFieldsContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#funcFieldsBody}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitFuncFieldsBody(WatParser.FuncFieldsBodyContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#funcBody}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitFuncBody(WatParser.FuncBodyContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#offset}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitOffset(WatParser.OffsetContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#elem}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitElem(WatParser.ElemContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#table}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitTable(WatParser.TableContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#tableField}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitTableField(WatParser.TableFieldContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#data}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitData(WatParser.DataContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#memory}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitMemory(WatParser.MemoryContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#memoryField}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitMemoryField(WatParser.MemoryFieldContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#global}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitGlobal(WatParser.GlobalContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#globalField}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitGlobalField(WatParser.GlobalFieldContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#importDesc}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitImportDesc(WatParser.ImportDescContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#simport}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitSimport(WatParser.SimportContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#inlineImport}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitInlineImport(WatParser.InlineImportContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#exportDesc}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitExportDesc(WatParser.ExportDescContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#export_}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitExport_(WatParser.Export_Context ctx); - /** - * Visit a parse tree produced by {@link WatParser#inlineExport}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitInlineExport(WatParser.InlineExportContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#typeDef}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitTypeDef(WatParser.TypeDefContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#start_}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitStart_(WatParser.Start_Context ctx); - /** - * Visit a parse tree produced by {@link WatParser#moduleField}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitModuleField(WatParser.ModuleFieldContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#module_}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitModule_(WatParser.Module_Context ctx); - /** - * Visit a parse tree produced by {@link WatParser#scriptModule}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitScriptModule(WatParser.ScriptModuleContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#action_}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitAction_(WatParser.Action_Context ctx); - /** - * Visit a parse tree produced by {@link WatParser#assertion}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitAssertion(WatParser.AssertionContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#cmd}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitCmd(WatParser.CmdContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#meta}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitMeta(WatParser.MetaContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#wconst}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitWconst(WatParser.WconstContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#constList}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitConstList(WatParser.ConstListContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#script}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitScript(WatParser.ScriptContext ctx); - /** - * Visit a parse tree produced by {@link WatParser#module}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitModule(WatParser.ModuleContext ctx); -} \ No newline at end of file diff --git a/src/main/java/wasm/WatLexer.java b/src/main/java/wasm/WatLexer.java index 5826f02fe..8b777c9d4 100644 --- a/src/main/java/wasm/WatLexer.java +++ b/src/main/java/wasm/WatLexer.java @@ -1,5 +1,5 @@ package gensym.wasm; -// Generated from WatLexer.g4 by ANTLR 4.13.2 +// Generated from WatLexer.g4 by ANTLR 4.13.0 import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.Token; @@ -9,9 +9,9 @@ import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.misc.*; -@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) public class WatLexer extends Lexer { - static { RuntimeMetaData.checkVersion("4.13.2", RuntimeMetaData.VERSION); } + static { RuntimeMetaData.checkVersion("4.13.0", RuntimeMetaData.VERSION); } protected static final DFA[] _decisionToDFA; protected static final PredictionContextCache _sharedContextCache = diff --git a/src/main/java/wasm/WatParser.java b/src/main/java/wasm/WatParser.java index c017b7578..bbece397e 100644 --- a/src/main/java/wasm/WatParser.java +++ b/src/main/java/wasm/WatParser.java @@ -1,5 +1,5 @@ package gensym.wasm; -// Generated from WatParser.g4 by ANTLR 4.13.2 +// Generated from WatParser.g4 by ANTLR 4.13.0 import org.antlr.v4.runtime.atn.*; import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.*; @@ -9,9 +9,9 @@ import java.util.Iterator; import java.util.ArrayList; -@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) public class WatParser extends Parser { - static { RuntimeMetaData.checkVersion("4.13.2", RuntimeMetaData.VERSION); } + static { RuntimeMetaData.checkVersion("4.13.0", RuntimeMetaData.VERSION); } protected static final DFA[] _decisionToDFA; protected static final PredictionContextCache _sharedContextCache = @@ -203,6 +203,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitValue(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitValue(this); + else return visitor.visitChildren(this); + } } public final ValueContext value() throws RecognitionException { @@ -250,6 +255,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitName(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitName(this); + else return visitor.visitChildren(this); + } } public final NameContext name() throws RecognitionException { @@ -288,6 +298,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitNumType(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitNumType(this); + else return visitor.visitChildren(this); + } } public final NumTypeContext numType() throws RecognitionException { @@ -327,6 +342,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitRefType(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitRefType(this); + else return visitor.visitChildren(this); + } } public final RefTypeContext refType() throws RecognitionException { @@ -374,6 +394,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitVecType(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitVecType(this); + else return visitor.visitChildren(this); + } } public final VecTypeContext vecType() throws RecognitionException { @@ -420,6 +445,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitValType(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitValType(this); + else return visitor.visitChildren(this); + } } public final ValTypeContext valType() throws RecognitionException { @@ -482,6 +512,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitHeapType(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitHeapType(this); + else return visitor.visitChildren(this); + } } public final HeapTypeContext heapType() throws RecognitionException { @@ -534,6 +569,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitGlobalType(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitGlobalType(this); + else return visitor.visitChildren(this); + } } public final GlobalTypeContext globalType() throws RecognitionException { @@ -601,6 +641,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitDefType(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitDefType(this); + else return visitor.visitChildren(this); + } } public final DefTypeContext defType() throws RecognitionException { @@ -668,6 +713,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncParamType(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncParamType(this); + else return visitor.visitChildren(this); + } } public final FuncParamTypeContext funcParamType() throws RecognitionException { @@ -779,6 +829,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncResType(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncResType(this); + else return visitor.visitChildren(this); + } } public final FuncResTypeContext funcResType() throws RecognitionException { @@ -856,6 +911,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncType(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncType(this); + else return visitor.visitChildren(this); + } } public final FuncTypeContext funcType() throws RecognitionException { @@ -902,6 +962,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTableType(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTableType(this); + else return visitor.visitChildren(this); + } } public final TableTypeContext tableType() throws RecognitionException { @@ -956,6 +1021,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitMemoryType(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitMemoryType(this); + else return visitor.visitChildren(this); + } } public final MemoryTypeContext memoryType() throws RecognitionException { @@ -1010,6 +1080,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTypeUse(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTypeUse(this); + else return visitor.visitChildren(this); + } } public final TypeUseContext typeUse() throws RecognitionException { @@ -1056,6 +1131,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitLiteral(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitLiteral(this); + else return visitor.visitChildren(this); + } } public final LiteralContext literal() throws RecognitionException { @@ -1104,6 +1184,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitIdx(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitIdx(this); + else return visitor.visitChildren(this); + } } public final IdxContext idx() throws RecognitionException { @@ -1151,6 +1236,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitBindVar(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitBindVar(this); + else return visitor.visitChildren(this); + } } public final BindVarContext bindVar() throws RecognitionException { @@ -1200,6 +1290,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitInstr(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitInstr(this); + else return visitor.visitChildren(this); + } } public final InstrContext instr() throws RecognitionException { @@ -1312,6 +1407,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitForLoop(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitForLoop(this); + else return visitor.visitChildren(this); + } } public final ForLoopContext forLoop() throws RecognitionException { @@ -1421,6 +1521,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitPlainInstr(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitPlainInstr(this); + else return visitor.visitChildren(this); + } } public final PlainInstrContext plainInstr() throws RecognitionException { @@ -1774,6 +1879,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitOffsetEq(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitOffsetEq(this); + else return visitor.visitChildren(this); + } } public final OffsetEqContext offsetEq() throws RecognitionException { @@ -1815,6 +1925,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitAlignEq(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitAlignEq(this); + else return visitor.visitChildren(this); + } } public final AlignEqContext alignEq() throws RecognitionException { @@ -1861,6 +1976,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitLoad(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitLoad(this); + else return visitor.visitChildren(this); + } } public final LoadContext load() throws RecognitionException { @@ -1920,6 +2040,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitStore(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitStore(this); + else return visitor.visitChildren(this); + } } public final StoreContext store() throws RecognitionException { @@ -1974,6 +2099,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitSelectInstr(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitSelectInstr(this); + else return visitor.visitChildren(this); + } } public final SelectInstrContext selectInstr() throws RecognitionException { @@ -2021,6 +2151,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallIndirectInstr(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallIndirectInstr(this); + else return visitor.visitChildren(this); + } } public final CallIndirectInstrContext callIndirectInstr() throws RecognitionException { @@ -2120,6 +2255,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallInstrParams(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallInstrParams(this); + else return visitor.visitChildren(this); + } } public final CallInstrParamsContext callInstrParams() throws RecognitionException { @@ -2244,6 +2384,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallInstrParamsInstr(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallInstrParamsInstr(this); + else return visitor.visitChildren(this); + } } public final CallInstrParamsInstrContext callInstrParamsInstr() throws RecognitionException { @@ -2338,6 +2483,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallInstrResultsInstr(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallInstrResultsInstr(this); + else return visitor.visitChildren(this); + } } public final CallInstrResultsInstrContext callInstrResultsInstr() throws RecognitionException { @@ -2428,6 +2578,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitBlockInstr(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitBlockInstr(this); + else return visitor.visitChildren(this); + } } public final BlockInstrContext blockInstr() throws RecognitionException { @@ -2594,6 +2749,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitBlockType(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitBlockType(this); + else return visitor.visitChildren(this); + } } public final BlockTypeContext blockType() throws RecognitionException { @@ -2673,6 +2833,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitBlock(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitBlock(this); + else return visitor.visitChildren(this); + } } public final BlockContext block() throws RecognitionException { @@ -2717,6 +2882,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFoldedInstr(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFoldedInstr(this); + else return visitor.visitChildren(this); + } } public final FoldedInstrContext foldedInstr() throws RecognitionException { @@ -2803,6 +2973,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitExpr(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitExpr(this); + else return visitor.visitChildren(this); + } } public final ExprContext expr() throws RecognitionException { @@ -2983,6 +3158,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallExprType(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallExprType(this); + else return visitor.visitChildren(this); + } } public final CallExprTypeContext callExprType() throws RecognitionException { @@ -3051,6 +3231,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallExprParams(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallExprParams(this); + else return visitor.visitChildren(this); + } } public final CallExprParamsContext callExprParams() throws RecognitionException { @@ -3148,6 +3333,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCallExprResults(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCallExprResults(this); + else return visitor.visitChildren(this); + } } public final CallExprResultsContext callExprResults() throws RecognitionException { @@ -3242,6 +3432,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitInstrList(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitInstrList(this); + else return visitor.visitChildren(this); + } } public final InstrListContext instrList() throws RecognitionException { @@ -3307,6 +3502,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitConstExpr(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitConstExpr(this); + else return visitor.visitChildren(this); + } } public final ConstExprContext constExpr() throws RecognitionException { @@ -3353,6 +3553,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFunction(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFunction(this); + else return visitor.visitChildren(this); + } } public final FunctionContext function() throws RecognitionException { @@ -3425,6 +3630,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncFields(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncFields(this); + else return visitor.visitChildren(this); + } } public final FuncFieldsContext funcFields() throws RecognitionException { @@ -3512,6 +3722,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncFieldsBody(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncFieldsBody(this); + else return visitor.visitChildren(this); + } } public final FuncFieldsBodyContext funcFieldsBody() throws RecognitionException { @@ -3578,6 +3793,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitFuncBody(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitFuncBody(this); + else return visitor.visitChildren(this); + } } public final FuncBodyContext funcBody() throws RecognitionException { @@ -3682,6 +3902,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitOffset(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitOffset(this); + else return visitor.visitChildren(this); + } } public final OffsetContext offset() throws RecognitionException { @@ -3795,6 +4020,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitElem(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitElem(this); + else return visitor.visitChildren(this); + } } public final ElemContext elem() throws RecognitionException { @@ -3919,6 +4149,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTable(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTable(this); + else return visitor.visitChildren(this); + } } public final TableContext table() throws RecognitionException { @@ -3997,6 +4232,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTableField(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTableField(this); + else return visitor.visitChildren(this); + } } public final TableFieldContext tableField() throws RecognitionException { @@ -4108,6 +4348,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitData(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitData(this); + else return visitor.visitChildren(this); + } } public final DataContext data() throws RecognitionException { @@ -4232,6 +4477,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitMemory(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitMemory(this); + else return visitor.visitChildren(this); + } } public final MemoryContext memory() throws RecognitionException { @@ -4305,6 +4555,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitMemoryField(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitMemoryField(this); + else return visitor.visitChildren(this); + } } public final MemoryFieldContext memoryField() throws RecognitionException { @@ -4401,6 +4656,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitGlobal(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitGlobal(this); + else return visitor.visitChildren(this); + } } public final GlobalContext global() throws RecognitionException { @@ -4470,6 +4730,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitGlobalField(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitGlobalField(this); + else return visitor.visitChildren(this); + } } public final GlobalFieldContext globalField() throws RecognitionException { @@ -4557,6 +4822,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitImportDesc(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitImportDesc(this); + else return visitor.visitChildren(this); + } } public final ImportDescContext importDesc() throws RecognitionException { @@ -4721,6 +4991,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitSimport(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitSimport(this); + else return visitor.visitChildren(this); + } } public final SimportContext simport() throws RecognitionException { @@ -4777,6 +5052,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitInlineImport(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitInlineImport(this); + else return visitor.visitChildren(this); + } } public final InlineImportContext inlineImport() throws RecognitionException { @@ -4831,6 +5111,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitExportDesc(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitExportDesc(this); + else return visitor.visitChildren(this); + } } public final ExportDescContext exportDesc() throws RecognitionException { @@ -4928,6 +5213,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitExport_(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitExport_(this); + else return visitor.visitChildren(this); + } } public final Export_Context export_() throws RecognitionException { @@ -4979,6 +5269,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitInlineExport(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitInlineExport(this); + else return visitor.visitChildren(this); + } } public final InlineExportContext inlineExport() throws RecognitionException { @@ -5031,6 +5326,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitTypeDef(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitTypeDef(this); + else return visitor.visitChildren(this); + } } public final TypeDefContext typeDef() throws RecognitionException { @@ -5091,6 +5391,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitStart_(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitStart_(this); + else return visitor.visitChildren(this); + } } public final Start_Context start_() throws RecognitionException { @@ -5164,6 +5469,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitModuleField(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitModuleField(this); + else return visitor.visitChildren(this); + } } public final ModuleFieldContext moduleField() throws RecognitionException { @@ -5280,6 +5590,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitModule_(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitModule_(this); + else return visitor.visitChildren(this); + } } public final Module_Context module_() throws RecognitionException { @@ -5359,6 +5674,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitScriptModule(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitScriptModule(this); + else return visitor.visitChildren(this); + } } public final ScriptModuleContext scriptModule() throws RecognitionException { @@ -5459,6 +5779,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitAction_(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitAction_(this); + else return visitor.visitChildren(this); + } } public final Action_Context action_() throws RecognitionException { @@ -5564,6 +5889,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitAssertion(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitAssertion(this); + else return visitor.visitChildren(this); + } } public final AssertionContext assertion() throws RecognitionException { @@ -5750,6 +6080,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitCmd(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitCmd(this); + else return visitor.visitChildren(this); + } } public final CmdContext cmd() throws RecognitionException { @@ -5851,6 +6186,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitMeta(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitMeta(this); + else return visitor.visitChildren(this); + } } public final MetaContext meta() throws RecognitionException { @@ -5996,6 +6336,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitWconst(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitWconst(this); + else return visitor.visitChildren(this); + } } public final WconstContext wconst() throws RecognitionException { @@ -6045,6 +6390,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitConstList(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitConstList(this); + else return visitor.visitChildren(this); + } } public final ConstListContext constList() throws RecognitionException { @@ -6108,6 +6458,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitScript(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitScript(this); + else return visitor.visitChildren(this); + } } public final ScriptContext script() throws RecognitionException { @@ -6197,6 +6552,11 @@ public void enterRule(ParseTreeListener listener) { public void exitRule(ParseTreeListener listener) { if ( listener instanceof WatParserListener ) ((WatParserListener)listener).exitModule(this); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof WatParserVisitor ) return ((WatParserVisitor)visitor).visitModule(this); + else return visitor.visitChildren(this); + } } public final ModuleContext module() throws RecognitionException { diff --git a/src/main/java/wasm/WatParserBaseListener.java b/src/main/java/wasm/WatParserBaseListener.java index 83cc14508..1a06486ec 100644 --- a/src/main/java/wasm/WatParserBaseListener.java +++ b/src/main/java/wasm/WatParserBaseListener.java @@ -1,5 +1,5 @@ package gensym.wasm; -// Generated from WatParser.g4 by ANTLR 4.13.2 +// Generated from WatParser.g4 by ANTLR 4.13.0 import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ErrorNode; diff --git a/src/main/java/wasm/WatParserBaseVisitor.java b/src/main/java/wasm/WatParserBaseVisitor.java index e7a71be19..9a4169f19 100644 --- a/src/main/java/wasm/WatParserBaseVisitor.java +++ b/src/main/java/wasm/WatParserBaseVisitor.java @@ -145,6 +145,13 @@ public class WatParserBaseVisitor extends AbstractParseTreeVisitor impleme * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitInstr(WatParser.InstrContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitForLoop(WatParser.ForLoopContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/src/main/java/wasm/WatParserListener.java b/src/main/java/wasm/WatParserListener.java index 2fecee417..e6c869e32 100644 --- a/src/main/java/wasm/WatParserListener.java +++ b/src/main/java/wasm/WatParserListener.java @@ -1,5 +1,5 @@ package gensym.wasm; -// Generated from WatParser.g4 by ANTLR 4.13.2 +// Generated from WatParser.g4 by ANTLR 4.13.0 import org.antlr.v4.runtime.tree.ParseTreeListener; /** diff --git a/src/main/java/wasm/WatParserVisitor.java b/src/main/java/wasm/WatParserVisitor.java index 779a03d90..47364ec8c 100644 --- a/src/main/java/wasm/WatParserVisitor.java +++ b/src/main/java/wasm/WatParserVisitor.java @@ -124,6 +124,12 @@ public interface WatParserVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitInstr(WatParser.InstrContext ctx); + /** + * Visit a parse tree produced by {@link WatParser#forLoop}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitForLoop(WatParser.ForLoopContext ctx); /** * Visit a parse tree produced by {@link WatParser#plainInstr}. * @param ctx the parse tree From 6781f13f90ab354426ab45242bad7c347b7c5cf3 Mon Sep 17 00:00:00 2001 From: Jiatai Zhang Date: Thu, 14 Nov 2024 23:25:02 -0500 Subject: [PATCH 6/7] update --- benchmarks/wasm/for_loop.wat | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/benchmarks/wasm/for_loop.wat b/benchmarks/wasm/for_loop.wat index afebaf3ea..2f16aa07d 100644 --- a/benchmarks/wasm/for_loop.wat +++ b/benchmarks/wasm/for_loop.wat @@ -1,7 +1,8 @@ (module (func $for_loop (result i32) - (local i32) ;; local 0: - (local i32) ;; local 1: + (local i32) + (local i32) + for ( ;; init @@ -13,7 +14,7 @@ ;; cond local.get 1 i32.const 10 - i32.lt_s + i32.gt_s i32.eqz | ;; post @@ -25,13 +26,16 @@ ;; es local.get 0 - i32.const 1 + local.get 1 i32.add local.set 0 - (local.get 0) - ) - ) + local.get 0 + ) + + (export "for_loop" (func 0)) + + ) From 8ab5f8e2e28568438102dbd2a59b956aba86075c Mon Sep 17 00:00:00 2001 From: Jiatai Zhang Date: Fri, 15 Nov 2024 19:56:43 -0500 Subject: [PATCH 7/7] update --- src/main/scala/wasm/MiniWasm.scala | 26 +++++++++++++++++++------- src/test/scala/genwasym/TestEval.scala | 5 ++++- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/main/scala/wasm/MiniWasm.scala b/src/main/scala/wasm/MiniWasm.scala index f013d69c0..e82b55659 100644 --- a/src/main/scala/wasm/MiniWasm.scala +++ b/src/main/scala/wasm/MiniWasm.scala @@ -233,9 +233,12 @@ object Evaluator { trail: List[Cont[Ans]]): Ans = { if (insts.isEmpty) return kont(stack) + + val inst = insts.head val rest = insts.tail + // println(s"inst: ${inst} \t | ${frame.locals} | ${stack.reverse}" ) inst match { @@ -334,21 +337,30 @@ object Evaluator { def loop(retStack: List[Value]): Ans = eval(inner, retStack.take(funcTy.inps.size), frame, restK, loop _ :: trail) loop(inputs) + case ForLoop(init, cond, post, body) => val restK: Cont[Ans] = retStack => eval(rest, retStack, frame, kont, trail) - def loopContinuation(retStack: List[Value]): Ans = { + def forloop(retStack: List[Value]): Ans = { + eval(cond, retStack, frame, { - case I32V(0) :: _ => restK(retStack) + + case I32V(0) :: _ => + + restK(retStack) + case (_: I32V) :: _ => + eval(body, retStack, frame, newStack => { + eval(post, newStack, frame, postStack => { + forloop(postStack) + }, trail) + } , trail) case _ => - eval(body, retStack, frame, newStack => - eval(post, newStack, frame, loopContinuation, trail) - , trail) + throw new RuntimeException("Condition did not return I32V as expected") }, trail) } + eval(init, stack, frame, forloop, trail) - eval(init, stack, frame, loopContinuation, trail) case If(ty, thn, els) => val funcTy = getFuncType(frame.module, ty) val I32V(cond) :: newStack = stack @@ -434,7 +446,7 @@ object Evaluator { val moduleInst = ModuleInstance(types, module.funcEnv, memory, globals) - Evaluator.eval(instrs, List(), Frame(moduleInst, ArrayBuffer(I32V(0))), halt, List(halt)) + Evaluator.eval(instrs, List(), Frame(moduleInst, ArrayBuffer(I32V(0),I32V(0))), halt, List(halt)) } def evalTop(m: Module): Unit = evalTop(m, stack => ()) diff --git a/src/test/scala/genwasym/TestEval.scala b/src/test/scala/genwasym/TestEval.scala index 120165c4b..d1228371e 100644 --- a/src/test/scala/genwasym/TestEval.scala +++ b/src/test/scala/genwasym/TestEval.scala @@ -35,6 +35,7 @@ class TestEval extends FunSuite { Evaluator.evalTop(module, haltK, main) } + // TODO: the power test can be used to test the stack // For now: 2^10 works, 2^100 results in 0 (TODO: why?), // and 2^1000 results in a stack overflow @@ -74,11 +75,13 @@ class TestEval extends FunSuite { testFile("./benchmarks/wasm/loop_poly.wat", None, ExpStack(List(2, 1))) } test("for loop") { - testFile("./benchmarks/wasm/for_loop.wat", Some("for_loop"), ExpInt(10)) + testFile("./benchmarks/wasm/for_loop.wat", Some("for_loop"), ExpInt(55)) } // FIXME: //test("tribonacci-ret") { testFile("./benchmarks/wasm/tribonacci_ret.wat", None, Some(504)) } // TODO: add wasm spec tests? How to utilize wast files? + } +