Merge: mnit improvements from We Broke The World
authorJean Privat <jean@pryen.org>
Thu, 25 Sep 2014 21:41:22 +0000 (17:41 -0400)
committerJean Privat <jean@pryen.org>
Thu, 25 Sep 2014 21:41:22 +0000 (17:41 -0400)
Pull-Request: #777
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

109 files changed:
contrib/benitlux/src/benitlux_daily.nit
contrib/benitlux/src/benitlux_view.nit
contrib/github_search_for_jni/src/github_search_for_jni.nit
contrib/inkscape_tools/.gitignore [new file with mode: 0644]
contrib/inkscape_tools/Makefile
contrib/inkscape_tools/src/svg_to_png_and_nit.nit
contrib/inkscape_tools/tests/app/Makefile
contrib/inkscape_tools/tests/app/src/s2pn.nit
contrib/nitcc/src/Makefile
contrib/nitcc/src/grammar.nit
contrib/online_ide/sources/nit/pnacl_nit.nit
contrib/pep8analysis/src/parser/pep8_lexer.nit [deleted file]
contrib/pep8analysis/src/parser/pep8_parser.nit [deleted file]
contrib/pep8analysis/src/parser/pep8_test_parser.nit [deleted file]
contrib/pep8analysis/src/pep8analysis_web.nit
examples/mnit_simple/src/complete_simple_android.nit
examples/mnit_simple/src/simple.nit
examples/mnit_simple/src/simple_linux.nit
examples/mnit_simple/src/test_data_store.nit [new file with mode: 0644]
lib/android/android.nit
lib/android/android_data_store.nit [new file with mode: 0644]
lib/app/app.nit [new file with mode: 0644]
lib/app/app_base.nit [moved from lib/app.nit with 90% similarity]
lib/app/data_store.nit [new file with mode: 0644]
lib/crypto.nit [new file with mode: 0644]
lib/linux/linux.nit [new file with mode: 0644]
lib/linux/linux_data_store.nit [new file with mode: 0644]
lib/markdown/markdown.nit
lib/markdown/test_markdown.nit
lib/mnit_linux/linux_app.nit
lib/standard/file.nit
lib/standard/math.nit
lib/standard/re.nit
lib/standard/string.nit
lib/template/macro.nit [new file with mode: 0644]
lib/template/template.nit [moved from lib/template.nit with 100% similarity]
lib/template/test_macro.nit [new file with mode: 0644]
misc/jenkins/listnit.sh [new file with mode: 0755]
misc/vim/syntax_checkers/nit/nitg.vim
share/nitdoc/css/nitdoc.css
src/astprinter.nit
src/compiler/pnacl_platform.nit
src/doc/doc_model.nit
src/doc/doc_pages.nit
src/doc/doc_templates.nit
src/frontend/check_annotation.nit
src/frontend/simple_misc_analysis.nit
src/model/model_base.nit
src/modelbuilder.nit
src/modelize/modelize_class.nit
src/modelize/modelize_property.nit
src/nituml.nit [new file with mode: 0644]
src/parser/nit.sablecc3xx
src/parser/parser.nit
src/parser/parser_abs.nit
src/parser/parser_nodes.nit
src/parser/parser_prod.nit
src/parser/tables_nit.c
src/phase.nit
src/semantize/scope.nit
src/semantize/typing.nit
src/test_test_phase.nit
src/testing/testing_doc.nit
src/testing/testing_suite.nit
src/toolcontext.nit
src/uml/uml.nit [new file with mode: 0644]
src/uml/uml_base.nit [new file with mode: 0644]
src/uml/uml_class.nit [new file with mode: 0644]
src/uml/uml_module.nit [new file with mode: 0644]
tests/base_array_lit_typed.nit [new file with mode: 0644]
tests/nitg-sg.skip
tests/nituml.args [new file with mode: 0644]
tests/sav/base_array_lit_typed_alt1.res [new file with mode: 0644]
tests/sav/base_array_lit_typed_alt2.res [new file with mode: 0644]
tests/sav/base_array_lit_typed_alt3.res [new file with mode: 0644]
tests/sav/base_control_flow2.res
tests/sav/base_control_flow2_alt1.res
tests/sav/base_control_flow2_alt2.res
tests/sav/base_control_flow2_alt3.res
tests/sav/base_control_flow2_alt4.res
tests/sav/base_control_flow2_alt5.res
tests/sav/base_control_flow2_alt6.res
tests/sav/base_control_flow2_alt7.res
tests/sav/dino_linux.res
tests/sav/error_expr_not_ok.res
tests/sav/error_expr_not_ok_alt2.res
tests/sav/error_expr_not_ok_alt3.res
tests/sav/error_expr_not_ok_alt4.res
tests/sav/error_expr_not_ok_alt5.res
tests/sav/error_expr_not_ok_alt6.res
tests/sav/error_fun_ret4.res
tests/sav/friendz_linux.res
tests/sav/linux_app.res
tests/sav/linux_assets.res
tests/sav/mnit_linux.res
tests/sav/moles_linux.res
tests/sav/nitg-g/fixme/test_platform_android.res [new file with mode: 0644]
tests/sav/nitg-s/fixme/sensors.res [new file with mode: 0644]
tests/sav/nitg-sg/fixme/sensors.res [new file with mode: 0644]
tests/sav/nituml.res [new file with mode: 0644]
tests/sav/nituml_args1.res [new file with mode: 0644]
tests/sav/nituml_args2.res [new file with mode: 0644]
tests/sav/nituml_args3.res [new file with mode: 0644]
tests/sav/nituml_args4.res [new file with mode: 0644]
tests/sav/opengles2_hello_triangle.res
tests/sav/shoot_linux.res
tests/sav/simple_linux.res
tests/sav/test_return.res
tests/sav/test_test_phase_args1.res

index 8121683..64f6e15 100644 (file)
@@ -49,7 +49,7 @@ redef class Text
 
        # Return an `Array` of the non-empty lines in `self`
        #
-       #     assert ["a", "asdf", "", "  ", "&nbsp;", "b"].to_clean_lines == ["a", "asdf", "b"]
+       #     assert ["a", "asdf", "", "  ", "&nbsp;", "b"].join("\n").to_clean_lines == ["a", "asdf", "b"]
        fun to_clean_lines: Array[String]
        do
                var orig_lines = split_with("\n")
index 6c5d53b..d35d6d9 100644 (file)
@@ -43,6 +43,7 @@ class BenitluxDocument
        do
                add """
 <!DOCTYPE html>
+<html>
 <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
index 1cb86e2..d12f288 100644 (file)
@@ -21,13 +21,11 @@ import github_api
 
 # The proprieties introduced by this redef are to be used only on HashMap
 # representing a Github repository.
-#
-# REQUIRE `assert self isa HashMap[String, nullable Object]`
-# REQUIRE `for v in self.values do assert v isa Int
 redef class HashMap[K, V]
        # The repository has at least 50% Java code
        fun has_lots_of_java: Bool
        do
+               assert self isa HashMap[String, nullable Object]
                var java_count = 0
                if keys.has("Java") then java_count = self["Java"].as(Int)
 
@@ -35,7 +33,6 @@ redef class HashMap[K, V]
 
                var total = 0
                for k, v in self do
-                       assert k isa String
                        assert v isa Int
                        total += v
                end
@@ -46,6 +43,7 @@ redef class HashMap[K, V]
        # The repository has at least 100 lines of C code
        fun has_some_c: Bool
        do
+               assert self isa HashMap[String, nullable Object]
                var c_count = 0
                if keys.has("C") then c_count = self["C"].as(Int)
                return c_count > 100
diff --git a/contrib/inkscape_tools/.gitignore b/contrib/inkscape_tools/.gitignore
new file mode 100644 (file)
index 0000000..cdc5f8c
--- /dev/null
@@ -0,0 +1,5 @@
+tests/app/assets/
+tests/app/bin/
+tests/app/res2/
+tests/app/src/drawing.nit
+tests/dino/
index a93a9ba..834ad14 100644 (file)
@@ -1,8 +1,10 @@
+all: bins tests
+
 bins:
        mkdir -p bin
        ../../bin/nitg --dir bin src/svg_to_png_and_nit.nit src/svg_to_icons.nit
 
-tests: test-dino
+tests: test-dino test-app
 
 test-app: bin/svg_to_png_and_nit
        make -C tests/app
index 5e2db2f..1a2d7b3 100644 (file)
@@ -205,7 +205,7 @@ for drawing in drawings do
        # Nit class
        var nit_class_name = drawing_name.chars.first.to_s.to_upper + drawing_name.substring_from(1) + "Images"
        var nit_src = new ImageSetSrc(nit_class_name)
-       nit_src.attributes.add "\tprivate var main_image: Image\n"
+       nit_src.attributes.add "\tprivate var main_image: Image is noinit\n"
        nit_src.load_exprs.add "\t\tmain_image = app.load_image(\"images/{drawing_name}.png\")\n"
 
        # Sort images by name, it prevents Array errors and looks better
@@ -234,7 +234,7 @@ for drawing in drawings do
                        nit_src.load_exprs.add "\t\t{nit_name}.add(main_image.subimage({x}, {y}, {w}, {h}))\n"
                else
                        # Single image
-                       nit_src.attributes.add "\tvar {nit_name}: Image\n"
+                       nit_src.attributes.add "\tvar {nit_name}: Image is noinit\n"
                        nit_src.load_exprs.add "\t\t{nit_name} = main_image.subimage({x}, {y}, {w}, {h})\n"
                end
        end
index e1e203b..b788061 100644 (file)
@@ -14,6 +14,6 @@ images:
 
 icons:
        mkdir -p res1 res2 res3
-       ../../bin/svg_to_icons art/icon.svg --large --out res1
+       #../../bin/svg_to_icons art/icon.svg --large --out res1
        ../../bin/svg_to_icons art/drawing.svg --large --out res2 --id 0circle
-       ../../bin/svg_to_icons art/icon.svg --android --out res3
+       #../../bin/svg_to_icons art/icon.svg --android --out res3
index 822e419..43a633d 100644 (file)
 
 import drawing
 
-class S2pnApp
-       super App
+redef class App
 
        var img_set: DrawingImages
 
        init do super
 
-       redef fun init_window
+       redef fun window_created
        do
                super
 
@@ -52,6 +51,3 @@ class S2pnApp
                return false
        end
 end
-
-var app = new S2pnApp
-app.main_loop
index b805c33..f66a44e 100644 (file)
@@ -1,6 +1,6 @@
 NITC=../../../bin/nitg
 
-all: nitcc calc
+all: nitcc calc minilang
 
 nitcc_parser_gen: nitcc_parser_gen.nit
        @echo "*** Compile the nitcc bootstrap parser generator -- level 0"
@@ -41,7 +41,7 @@ clean:
                *.dot *.out \
                nitcc_lexer.nit nitcc_parser.nit nitcc_test_parser.nit nitcc_parser_gen \
                nitcc0 nitcc1 \
-               calc \
+               calc minilang \
                ../examples/*.dot ../examples/*.out ../examples/*_lexer.nit ../examples/*_parser.nit ../examples/*_test_parser.nit \
                2>/dev/null || true
 
index fae7ed1..620b0a0 100644 (file)
@@ -620,14 +620,6 @@ class LRAutomaton
        end
 end
 
-redef class String
-       # escape string used in labels for graphviz
-       fun escape_to_dot: String
-       do
-               return escape_more_to_c("|\{\}<>")
-       end
-end
-
 private class Generator
        var out = new Array[String]
        fun add(s: String) do out.add(s)
index f4a02f2..477c79f 100644 (file)
@@ -146,7 +146,7 @@ class Pnacl_nit
                        # We need a model to collect stufs
                        var model = new Model
                        # An a model builder to parse files
-                       var modelbuilder = new ModelBuilder(model, toolcontext.as(not null))
+                       var modelbuilder = new ModelBuilder(model, toolcontext)
 
                        var arguments = toolcontext.option_context.rest
                        var progname = arguments.first
@@ -169,8 +169,8 @@ class Pnacl_nit
                                mainmodule.set_imported_mmodules(mmodules)
                        end
 
-                       var self_mm = mainmodule.as(not null)
-                       var self_args = arguments.as(not null)
+                       var self_mm = mainmodule
+                       var self_args = arguments
 
                        if toolcontext.opt_debugger_autorun.value then
                                modelbuilder.run_debugger_autorun(self_mm, self_args)
diff --git a/contrib/pep8analysis/src/parser/pep8_lexer.nit b/contrib/pep8analysis/src/parser/pep8_lexer.nit
deleted file mode 100644 (file)
index 5e0fa09..0000000
+++ /dev/null
@@ -1,3654 +0,0 @@
-# Lexer generated by nitccimport nitcc_runtime
-import pep8_parser
-class MyLexer
-       super Lexer
-       redef fun start_state do return dfastate_0
-end
-redef class Object
-       private fun dfastate_0: DFAState0 do return once new DFAState0
-       private fun dfastate_1: DFAState1 do return once new DFAState1
-       private fun dfastate_2: DFAState2 do return once new DFAState2
-       private fun dfastate_3: DFAState3 do return once new DFAState3
-       private fun dfastate_4: DFAState4 do return once new DFAState4
-       private fun dfastate_5: DFAState5 do return once new DFAState5
-       private fun dfastate_6: DFAState6 do return once new DFAState6
-       private fun dfastate_7: DFAState7 do return once new DFAState7
-       private fun dfastate_8: DFAState8 do return once new DFAState8
-       private fun dfastate_9: DFAState9 do return once new DFAState9
-       private fun dfastate_10: DFAState10 do return once new DFAState10
-       private fun dfastate_11: DFAState11 do return once new DFAState11
-       private fun dfastate_12: DFAState12 do return once new DFAState12
-       private fun dfastate_13: DFAState13 do return once new DFAState13
-       private fun dfastate_14: DFAState14 do return once new DFAState14
-       private fun dfastate_15: DFAState15 do return once new DFAState15
-       private fun dfastate_16: DFAState16 do return once new DFAState16
-       private fun dfastate_17: DFAState17 do return once new DFAState17
-       private fun dfastate_18: DFAState18 do return once new DFAState18
-       private fun dfastate_19: DFAState19 do return once new DFAState19
-       private fun dfastate_20: DFAState20 do return once new DFAState20
-       private fun dfastate_21: DFAState21 do return once new DFAState21
-       private fun dfastate_22: DFAState22 do return once new DFAState22
-       private fun dfastate_23: DFAState23 do return once new DFAState23
-       private fun dfastate_24: DFAState24 do return once new DFAState24
-       private fun dfastate_25: DFAState25 do return once new DFAState25
-       private fun dfastate_26: DFAState26 do return once new DFAState26
-       private fun dfastate_27: DFAState27 do return once new DFAState27
-       private fun dfastate_28: DFAState28 do return once new DFAState28
-       private fun dfastate_29: DFAState29 do return once new DFAState29
-       private fun dfastate_30: DFAState30 do return once new DFAState30
-       private fun dfastate_31: DFAState31 do return once new DFAState31
-       private fun dfastate_32: DFAState32 do return once new DFAState32
-       private fun dfastate_33: DFAState33 do return once new DFAState33
-       private fun dfastate_34: DFAState34 do return once new DFAState34
-       private fun dfastate_35: DFAState35 do return once new DFAState35
-       private fun dfastate_36: DFAState36 do return once new DFAState36
-       private fun dfastate_37: DFAState37 do return once new DFAState37
-       private fun dfastate_38: DFAState38 do return once new DFAState38
-       private fun dfastate_39: DFAState39 do return once new DFAState39
-       private fun dfastate_40: DFAState40 do return once new DFAState40
-       private fun dfastate_41: DFAState41 do return once new DFAState41
-       private fun dfastate_42: DFAState42 do return once new DFAState42
-       private fun dfastate_43: DFAState43 do return once new DFAState43
-       private fun dfastate_44: DFAState44 do return once new DFAState44
-       private fun dfastate_45: DFAState45 do return once new DFAState45
-       private fun dfastate_46: DFAState46 do return once new DFAState46
-       private fun dfastate_47: DFAState47 do return once new DFAState47
-       private fun dfastate_48: DFAState48 do return once new DFAState48
-       private fun dfastate_49: DFAState49 do return once new DFAState49
-       private fun dfastate_50: DFAState50 do return once new DFAState50
-       private fun dfastate_51: DFAState51 do return once new DFAState51
-       private fun dfastate_52: DFAState52 do return once new DFAState52
-       private fun dfastate_53: DFAState53 do return once new DFAState53
-       private fun dfastate_54: DFAState54 do return once new DFAState54
-       private fun dfastate_55: DFAState55 do return once new DFAState55
-       private fun dfastate_56: DFAState56 do return once new DFAState56
-       private fun dfastate_57: DFAState57 do return once new DFAState57
-       private fun dfastate_58: DFAState58 do return once new DFAState58
-       private fun dfastate_59: DFAState59 do return once new DFAState59
-       private fun dfastate_60: DFAState60 do return once new DFAState60
-       private fun dfastate_61: DFAState61 do return once new DFAState61
-       private fun dfastate_62: DFAState62 do return once new DFAState62
-       private fun dfastate_63: DFAState63 do return once new DFAState63
-       private fun dfastate_64: DFAState64 do return once new DFAState64
-       private fun dfastate_65: DFAState65 do return once new DFAState65
-       private fun dfastate_66: DFAState66 do return once new DFAState66
-       private fun dfastate_67: DFAState67 do return once new DFAState67
-       private fun dfastate_68: DFAState68 do return once new DFAState68
-       private fun dfastate_69: DFAState69 do return once new DFAState69
-       private fun dfastate_70: DFAState70 do return once new DFAState70
-       private fun dfastate_71: DFAState71 do return once new DFAState71
-       private fun dfastate_72: DFAState72 do return once new DFAState72
-       private fun dfastate_73: DFAState73 do return once new DFAState73
-       private fun dfastate_74: DFAState74 do return once new DFAState74
-       private fun dfastate_75: DFAState75 do return once new DFAState75
-       private fun dfastate_76: DFAState76 do return once new DFAState76
-       private fun dfastate_77: DFAState77 do return once new DFAState77
-       private fun dfastate_78: DFAState78 do return once new DFAState78
-       private fun dfastate_79: DFAState79 do return once new DFAState79
-       private fun dfastate_80: DFAState80 do return once new DFAState80
-       private fun dfastate_81: DFAState81 do return once new DFAState81
-       private fun dfastate_82: DFAState82 do return once new DFAState82
-       private fun dfastate_83: DFAState83 do return once new DFAState83
-       private fun dfastate_84: DFAState84 do return once new DFAState84
-       private fun dfastate_85: DFAState85 do return once new DFAState85
-       private fun dfastate_86: DFAState86 do return once new DFAState86
-       private fun dfastate_87: DFAState87 do return once new DFAState87
-       private fun dfastate_88: DFAState88 do return once new DFAState88
-       private fun dfastate_89: DFAState89 do return once new DFAState89
-       private fun dfastate_90: DFAState90 do return once new DFAState90
-       private fun dfastate_91: DFAState91 do return once new DFAState91
-       private fun dfastate_92: DFAState92 do return once new DFAState92
-       private fun dfastate_93: DFAState93 do return once new DFAState93
-       private fun dfastate_94: DFAState94 do return once new DFAState94
-       private fun dfastate_95: DFAState95 do return once new DFAState95
-       private fun dfastate_96: DFAState96 do return once new DFAState96
-       private fun dfastate_97: DFAState97 do return once new DFAState97
-       private fun dfastate_98: DFAState98 do return once new DFAState98
-       private fun dfastate_99: DFAState99 do return once new DFAState99
-       private fun dfastate_100: DFAState100 do return once new DFAState100
-       private fun dfastate_101: DFAState101 do return once new DFAState101
-       private fun dfastate_102: DFAState102 do return once new DFAState102
-       private fun dfastate_103: DFAState103 do return once new DFAState103
-       private fun dfastate_104: DFAState104 do return once new DFAState104
-       private fun dfastate_105: DFAState105 do return once new DFAState105
-       private fun dfastate_106: DFAState106 do return once new DFAState106
-       private fun dfastate_107: DFAState107 do return once new DFAState107
-       private fun dfastate_108: DFAState108 do return once new DFAState108
-       private fun dfastate_109: DFAState109 do return once new DFAState109
-       private fun dfastate_110: DFAState110 do return once new DFAState110
-       private fun dfastate_111: DFAState111 do return once new DFAState111
-       private fun dfastate_112: DFAState112 do return once new DFAState112
-end
-class MyNToken
-       super NToken
-end
-class DFAState0
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 46 then return dfastate_1
-               if c.ascii == 34 then return dfastate_2
-               if c.ascii == 39 then return dfastate_3
-               if c.ascii == 44 then return dfastate_4
-               if c.ascii == 58 then return dfastate_5
-               if c.ascii == 95 then return dfastate_6
-               if c.ascii == 97 then return dfastate_7
-               if c.ascii == 98 then return dfastate_7
-               if c.ascii == 99 then return dfastate_7
-               if c.ascii == 100 then return dfastate_7
-               if c.ascii == 101 then return dfastate_7
-               if c.ascii == 102 then return dfastate_7
-               if c.ascii == 103 then return dfastate_7
-               if c.ascii == 104 then return dfastate_7
-               if c.ascii == 105 then return dfastate_7
-               if c.ascii == 106 then return dfastate_7
-               if c.ascii == 107 then return dfastate_7
-               if c.ascii == 108 then return dfastate_7
-               if c.ascii == 109 then return dfastate_7
-               if c.ascii == 110 then return dfastate_7
-               if c.ascii == 111 then return dfastate_7
-               if c.ascii == 112 then return dfastate_7
-               if c.ascii == 113 then return dfastate_7
-               if c.ascii == 114 then return dfastate_7
-               if c.ascii == 115 then return dfastate_7
-               if c.ascii == 116 then return dfastate_7
-               if c.ascii == 117 then return dfastate_7
-               if c.ascii == 118 then return dfastate_7
-               if c.ascii == 119 then return dfastate_7
-               if c.ascii == 120 then return dfastate_7
-               if c.ascii == 121 then return dfastate_7
-               if c.ascii == 122 then return dfastate_7
-               if c.ascii == 65 then return dfastate_8
-               if c.ascii == 66 then return dfastate_8
-               if c.ascii == 67 then return dfastate_8
-               if c.ascii == 68 then return dfastate_8
-               if c.ascii == 69 then return dfastate_8
-               if c.ascii == 70 then return dfastate_8
-               if c.ascii == 71 then return dfastate_8
-               if c.ascii == 72 then return dfastate_8
-               if c.ascii == 73 then return dfastate_8
-               if c.ascii == 74 then return dfastate_8
-               if c.ascii == 75 then return dfastate_8
-               if c.ascii == 76 then return dfastate_8
-               if c.ascii == 77 then return dfastate_8
-               if c.ascii == 78 then return dfastate_8
-               if c.ascii == 79 then return dfastate_8
-               if c.ascii == 80 then return dfastate_8
-               if c.ascii == 81 then return dfastate_8
-               if c.ascii == 82 then return dfastate_8
-               if c.ascii == 83 then return dfastate_8
-               if c.ascii == 84 then return dfastate_8
-               if c.ascii == 85 then return dfastate_8
-               if c.ascii == 86 then return dfastate_8
-               if c.ascii == 87 then return dfastate_8
-               if c.ascii == 88 then return dfastate_8
-               if c.ascii == 89 then return dfastate_8
-               if c.ascii == 90 then return dfastate_8
-               if c.ascii == 13 then return dfastate_9
-               if c.ascii == 10 then return dfastate_10
-               if c.ascii == 59 then return dfastate_11
-               if c.ascii == 9 then return dfastate_12
-               if c.ascii == 32 then return dfastate_13
-               return null
-       end
-end
-class DFAState1
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 101 then return dfastate_43
-               if c.ascii == 69 then return dfastate_44
-               if c.ascii == 98 then return dfastate_45
-               if c.ascii == 66 then return dfastate_46
-               if c.ascii == 119 then return dfastate_47
-               if c.ascii == 87 then return dfastate_48
-               if c.ascii == 97 then return dfastate_49
-               if c.ascii == 65 then return dfastate_50
-               return null
-       end
-end
-class DFAState2
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 32 then return dfastate_33
-               if c.ascii == 33 then return dfastate_33
-               if c.ascii == 35 then return dfastate_33
-               if c.ascii == 36 then return dfastate_33
-               if c.ascii == 37 then return dfastate_33
-               if c.ascii == 38 then return dfastate_33
-               if c.ascii == 39 then return dfastate_33
-               if c.ascii == 40 then return dfastate_33
-               if c.ascii == 41 then return dfastate_33
-               if c.ascii == 42 then return dfastate_33
-               if c.ascii == 43 then return dfastate_33
-               if c.ascii == 44 then return dfastate_33
-               if c.ascii == 45 then return dfastate_33
-               if c.ascii == 46 then return dfastate_33
-               if c.ascii == 47 then return dfastate_33
-               if c.ascii == 48 then return dfastate_33
-               if c.ascii == 49 then return dfastate_33
-               if c.ascii == 50 then return dfastate_33
-               if c.ascii == 51 then return dfastate_33
-               if c.ascii == 52 then return dfastate_33
-               if c.ascii == 53 then return dfastate_33
-               if c.ascii == 54 then return dfastate_33
-               if c.ascii == 55 then return dfastate_33
-               if c.ascii == 56 then return dfastate_33
-               if c.ascii == 57 then return dfastate_33
-               if c.ascii == 58 then return dfastate_33
-               if c.ascii == 59 then return dfastate_33
-               if c.ascii == 60 then return dfastate_33
-               if c.ascii == 61 then return dfastate_33
-               if c.ascii == 62 then return dfastate_33
-               if c.ascii == 63 then return dfastate_33
-               if c.ascii == 64 then return dfastate_33
-               if c.ascii == 65 then return dfastate_33
-               if c.ascii == 66 then return dfastate_33
-               if c.ascii == 67 then return dfastate_33
-               if c.ascii == 68 then return dfastate_33
-               if c.ascii == 69 then return dfastate_33
-               if c.ascii == 70 then return dfastate_33
-               if c.ascii == 71 then return dfastate_33
-               if c.ascii == 72 then return dfastate_33
-               if c.ascii == 73 then return dfastate_33
-               if c.ascii == 74 then return dfastate_33
-               if c.ascii == 75 then return dfastate_33
-               if c.ascii == 76 then return dfastate_33
-               if c.ascii == 77 then return dfastate_33
-               if c.ascii == 78 then return dfastate_33
-               if c.ascii == 79 then return dfastate_33
-               if c.ascii == 80 then return dfastate_33
-               if c.ascii == 81 then return dfastate_33
-               if c.ascii == 82 then return dfastate_33
-               if c.ascii == 83 then return dfastate_33
-               if c.ascii == 84 then return dfastate_33
-               if c.ascii == 85 then return dfastate_33
-               if c.ascii == 86 then return dfastate_33
-               if c.ascii == 87 then return dfastate_33
-               if c.ascii == 88 then return dfastate_33
-               if c.ascii == 89 then return dfastate_33
-               if c.ascii == 90 then return dfastate_33
-               if c.ascii == 91 then return dfastate_33
-               if c.ascii == 92 then return dfastate_34
-               if c.ascii == 93 then return dfastate_33
-               if c.ascii == 94 then return dfastate_33
-               if c.ascii == 95 then return dfastate_33
-               if c.ascii == 96 then return dfastate_33
-               if c.ascii == 97 then return dfastate_33
-               if c.ascii == 98 then return dfastate_33
-               if c.ascii == 99 then return dfastate_33
-               if c.ascii == 100 then return dfastate_33
-               if c.ascii == 101 then return dfastate_33
-               if c.ascii == 102 then return dfastate_33
-               if c.ascii == 103 then return dfastate_33
-               if c.ascii == 104 then return dfastate_33
-               if c.ascii == 105 then return dfastate_33
-               if c.ascii == 106 then return dfastate_33
-               if c.ascii == 107 then return dfastate_33
-               if c.ascii == 108 then return dfastate_33
-               if c.ascii == 109 then return dfastate_33
-               if c.ascii == 110 then return dfastate_33
-               if c.ascii == 111 then return dfastate_33
-               if c.ascii == 112 then return dfastate_33
-               if c.ascii == 113 then return dfastate_33
-               if c.ascii == 114 then return dfastate_33
-               if c.ascii == 115 then return dfastate_33
-               if c.ascii == 116 then return dfastate_33
-               if c.ascii == 117 then return dfastate_33
-               if c.ascii == 118 then return dfastate_33
-               if c.ascii == 119 then return dfastate_33
-               if c.ascii == 120 then return dfastate_33
-               if c.ascii == 121 then return dfastate_33
-               if c.ascii == 122 then return dfastate_33
-               if c.ascii == 123 then return dfastate_33
-               if c.ascii == 124 then return dfastate_33
-               if c.ascii == 125 then return dfastate_33
-               if c.ascii == 126 then return dfastate_33
-               if c.ascii == 34 then return dfastate_35
-               return null
-       end
-end
-class DFAState3
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 32 then return dfastate_20
-               if c.ascii == 33 then return dfastate_20
-               if c.ascii == 34 then return dfastate_20
-               if c.ascii == 35 then return dfastate_20
-               if c.ascii == 36 then return dfastate_20
-               if c.ascii == 37 then return dfastate_20
-               if c.ascii == 38 then return dfastate_20
-               if c.ascii == 40 then return dfastate_20
-               if c.ascii == 41 then return dfastate_20
-               if c.ascii == 42 then return dfastate_20
-               if c.ascii == 43 then return dfastate_20
-               if c.ascii == 44 then return dfastate_20
-               if c.ascii == 45 then return dfastate_20
-               if c.ascii == 46 then return dfastate_20
-               if c.ascii == 47 then return dfastate_20
-               if c.ascii == 48 then return dfastate_20
-               if c.ascii == 49 then return dfastate_20
-               if c.ascii == 50 then return dfastate_20
-               if c.ascii == 51 then return dfastate_20
-               if c.ascii == 52 then return dfastate_20
-               if c.ascii == 53 then return dfastate_20
-               if c.ascii == 54 then return dfastate_20
-               if c.ascii == 55 then return dfastate_20
-               if c.ascii == 56 then return dfastate_20
-               if c.ascii == 57 then return dfastate_20
-               if c.ascii == 58 then return dfastate_20
-               if c.ascii == 59 then return dfastate_20
-               if c.ascii == 60 then return dfastate_20
-               if c.ascii == 61 then return dfastate_20
-               if c.ascii == 62 then return dfastate_20
-               if c.ascii == 63 then return dfastate_20
-               if c.ascii == 64 then return dfastate_20
-               if c.ascii == 65 then return dfastate_20
-               if c.ascii == 66 then return dfastate_20
-               if c.ascii == 67 then return dfastate_20
-               if c.ascii == 68 then return dfastate_20
-               if c.ascii == 69 then return dfastate_20
-               if c.ascii == 70 then return dfastate_20
-               if c.ascii == 71 then return dfastate_20
-               if c.ascii == 72 then return dfastate_20
-               if c.ascii == 73 then return dfastate_20
-               if c.ascii == 74 then return dfastate_20
-               if c.ascii == 75 then return dfastate_20
-               if c.ascii == 76 then return dfastate_20
-               if c.ascii == 77 then return dfastate_20
-               if c.ascii == 78 then return dfastate_20
-               if c.ascii == 79 then return dfastate_20
-               if c.ascii == 80 then return dfastate_20
-               if c.ascii == 81 then return dfastate_20
-               if c.ascii == 82 then return dfastate_20
-               if c.ascii == 83 then return dfastate_20
-               if c.ascii == 84 then return dfastate_20
-               if c.ascii == 85 then return dfastate_20
-               if c.ascii == 86 then return dfastate_20
-               if c.ascii == 87 then return dfastate_20
-               if c.ascii == 88 then return dfastate_20
-               if c.ascii == 89 then return dfastate_20
-               if c.ascii == 90 then return dfastate_20
-               if c.ascii == 91 then return dfastate_20
-               if c.ascii == 93 then return dfastate_20
-               if c.ascii == 94 then return dfastate_20
-               if c.ascii == 95 then return dfastate_20
-               if c.ascii == 96 then return dfastate_20
-               if c.ascii == 97 then return dfastate_20
-               if c.ascii == 98 then return dfastate_20
-               if c.ascii == 99 then return dfastate_20
-               if c.ascii == 100 then return dfastate_20
-               if c.ascii == 101 then return dfastate_20
-               if c.ascii == 102 then return dfastate_20
-               if c.ascii == 103 then return dfastate_20
-               if c.ascii == 104 then return dfastate_20
-               if c.ascii == 105 then return dfastate_20
-               if c.ascii == 106 then return dfastate_20
-               if c.ascii == 107 then return dfastate_20
-               if c.ascii == 108 then return dfastate_20
-               if c.ascii == 109 then return dfastate_20
-               if c.ascii == 110 then return dfastate_20
-               if c.ascii == 111 then return dfastate_20
-               if c.ascii == 112 then return dfastate_20
-               if c.ascii == 113 then return dfastate_20
-               if c.ascii == 114 then return dfastate_20
-               if c.ascii == 115 then return dfastate_20
-               if c.ascii == 116 then return dfastate_20
-               if c.ascii == 117 then return dfastate_20
-               if c.ascii == 118 then return dfastate_20
-               if c.ascii == 119 then return dfastate_20
-               if c.ascii == 120 then return dfastate_20
-               if c.ascii == 121 then return dfastate_20
-               if c.ascii == 122 then return dfastate_20
-               if c.ascii == 123 then return dfastate_20
-               if c.ascii == 124 then return dfastate_20
-               if c.ascii == 125 then return dfastate_20
-               if c.ascii == 126 then return dfastate_20
-               if c.ascii == 92 then return dfastate_21
-               return null
-       end
-end
-class DFAState4
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ncomma
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState5
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ncolon
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState6
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nid
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 95 then return dfastate_16
-               if c.ascii == 48 then return dfastate_17
-               if c.ascii == 49 then return dfastate_17
-               if c.ascii == 50 then return dfastate_17
-               if c.ascii == 51 then return dfastate_17
-               if c.ascii == 52 then return dfastate_17
-               if c.ascii == 53 then return dfastate_17
-               if c.ascii == 54 then return dfastate_17
-               if c.ascii == 55 then return dfastate_17
-               if c.ascii == 56 then return dfastate_17
-               if c.ascii == 57 then return dfastate_17
-               if c.ascii == 97 then return dfastate_18
-               if c.ascii == 98 then return dfastate_18
-               if c.ascii == 99 then return dfastate_18
-               if c.ascii == 100 then return dfastate_18
-               if c.ascii == 101 then return dfastate_18
-               if c.ascii == 102 then return dfastate_18
-               if c.ascii == 103 then return dfastate_18
-               if c.ascii == 104 then return dfastate_18
-               if c.ascii == 105 then return dfastate_18
-               if c.ascii == 106 then return dfastate_18
-               if c.ascii == 107 then return dfastate_18
-               if c.ascii == 108 then return dfastate_18
-               if c.ascii == 109 then return dfastate_18
-               if c.ascii == 110 then return dfastate_18
-               if c.ascii == 111 then return dfastate_18
-               if c.ascii == 112 then return dfastate_18
-               if c.ascii == 113 then return dfastate_18
-               if c.ascii == 114 then return dfastate_18
-               if c.ascii == 115 then return dfastate_18
-               if c.ascii == 116 then return dfastate_18
-               if c.ascii == 117 then return dfastate_18
-               if c.ascii == 118 then return dfastate_18
-               if c.ascii == 119 then return dfastate_18
-               if c.ascii == 120 then return dfastate_18
-               if c.ascii == 121 then return dfastate_18
-               if c.ascii == 122 then return dfastate_18
-               if c.ascii == 65 then return dfastate_19
-               if c.ascii == 66 then return dfastate_19
-               if c.ascii == 67 then return dfastate_19
-               if c.ascii == 68 then return dfastate_19
-               if c.ascii == 69 then return dfastate_19
-               if c.ascii == 70 then return dfastate_19
-               if c.ascii == 71 then return dfastate_19
-               if c.ascii == 72 then return dfastate_19
-               if c.ascii == 73 then return dfastate_19
-               if c.ascii == 74 then return dfastate_19
-               if c.ascii == 75 then return dfastate_19
-               if c.ascii == 76 then return dfastate_19
-               if c.ascii == 77 then return dfastate_19
-               if c.ascii == 78 then return dfastate_19
-               if c.ascii == 79 then return dfastate_19
-               if c.ascii == 80 then return dfastate_19
-               if c.ascii == 81 then return dfastate_19
-               if c.ascii == 82 then return dfastate_19
-               if c.ascii == 83 then return dfastate_19
-               if c.ascii == 84 then return dfastate_19
-               if c.ascii == 85 then return dfastate_19
-               if c.ascii == 86 then return dfastate_19
-               if c.ascii == 87 then return dfastate_19
-               if c.ascii == 88 then return dfastate_19
-               if c.ascii == 89 then return dfastate_19
-               if c.ascii == 90 then return dfastate_19
-               return null
-       end
-end
-class DFAState7
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nid
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 95 then return dfastate_16
-               if c.ascii == 48 then return dfastate_17
-               if c.ascii == 49 then return dfastate_17
-               if c.ascii == 50 then return dfastate_17
-               if c.ascii == 51 then return dfastate_17
-               if c.ascii == 52 then return dfastate_17
-               if c.ascii == 53 then return dfastate_17
-               if c.ascii == 54 then return dfastate_17
-               if c.ascii == 55 then return dfastate_17
-               if c.ascii == 56 then return dfastate_17
-               if c.ascii == 57 then return dfastate_17
-               if c.ascii == 97 then return dfastate_18
-               if c.ascii == 98 then return dfastate_18
-               if c.ascii == 99 then return dfastate_18
-               if c.ascii == 100 then return dfastate_18
-               if c.ascii == 101 then return dfastate_18
-               if c.ascii == 102 then return dfastate_18
-               if c.ascii == 103 then return dfastate_18
-               if c.ascii == 104 then return dfastate_18
-               if c.ascii == 105 then return dfastate_18
-               if c.ascii == 106 then return dfastate_18
-               if c.ascii == 107 then return dfastate_18
-               if c.ascii == 108 then return dfastate_18
-               if c.ascii == 109 then return dfastate_18
-               if c.ascii == 110 then return dfastate_18
-               if c.ascii == 111 then return dfastate_18
-               if c.ascii == 112 then return dfastate_18
-               if c.ascii == 113 then return dfastate_18
-               if c.ascii == 114 then return dfastate_18
-               if c.ascii == 115 then return dfastate_18
-               if c.ascii == 116 then return dfastate_18
-               if c.ascii == 117 then return dfastate_18
-               if c.ascii == 118 then return dfastate_18
-               if c.ascii == 119 then return dfastate_18
-               if c.ascii == 120 then return dfastate_18
-               if c.ascii == 121 then return dfastate_18
-               if c.ascii == 122 then return dfastate_18
-               if c.ascii == 65 then return dfastate_19
-               if c.ascii == 66 then return dfastate_19
-               if c.ascii == 67 then return dfastate_19
-               if c.ascii == 68 then return dfastate_19
-               if c.ascii == 69 then return dfastate_19
-               if c.ascii == 70 then return dfastate_19
-               if c.ascii == 71 then return dfastate_19
-               if c.ascii == 72 then return dfastate_19
-               if c.ascii == 73 then return dfastate_19
-               if c.ascii == 74 then return dfastate_19
-               if c.ascii == 75 then return dfastate_19
-               if c.ascii == 76 then return dfastate_19
-               if c.ascii == 77 then return dfastate_19
-               if c.ascii == 78 then return dfastate_19
-               if c.ascii == 79 then return dfastate_19
-               if c.ascii == 80 then return dfastate_19
-               if c.ascii == 81 then return dfastate_19
-               if c.ascii == 82 then return dfastate_19
-               if c.ascii == 83 then return dfastate_19
-               if c.ascii == 84 then return dfastate_19
-               if c.ascii == 85 then return dfastate_19
-               if c.ascii == 86 then return dfastate_19
-               if c.ascii == 87 then return dfastate_19
-               if c.ascii == 88 then return dfastate_19
-               if c.ascii == 89 then return dfastate_19
-               if c.ascii == 90 then return dfastate_19
-               return null
-       end
-end
-class DFAState8
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nid
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 95 then return dfastate_16
-               if c.ascii == 48 then return dfastate_17
-               if c.ascii == 49 then return dfastate_17
-               if c.ascii == 50 then return dfastate_17
-               if c.ascii == 51 then return dfastate_17
-               if c.ascii == 52 then return dfastate_17
-               if c.ascii == 53 then return dfastate_17
-               if c.ascii == 54 then return dfastate_17
-               if c.ascii == 55 then return dfastate_17
-               if c.ascii == 56 then return dfastate_17
-               if c.ascii == 57 then return dfastate_17
-               if c.ascii == 97 then return dfastate_18
-               if c.ascii == 98 then return dfastate_18
-               if c.ascii == 99 then return dfastate_18
-               if c.ascii == 100 then return dfastate_18
-               if c.ascii == 101 then return dfastate_18
-               if c.ascii == 102 then return dfastate_18
-               if c.ascii == 103 then return dfastate_18
-               if c.ascii == 104 then return dfastate_18
-               if c.ascii == 105 then return dfastate_18
-               if c.ascii == 106 then return dfastate_18
-               if c.ascii == 107 then return dfastate_18
-               if c.ascii == 108 then return dfastate_18
-               if c.ascii == 109 then return dfastate_18
-               if c.ascii == 110 then return dfastate_18
-               if c.ascii == 111 then return dfastate_18
-               if c.ascii == 112 then return dfastate_18
-               if c.ascii == 113 then return dfastate_18
-               if c.ascii == 114 then return dfastate_18
-               if c.ascii == 115 then return dfastate_18
-               if c.ascii == 116 then return dfastate_18
-               if c.ascii == 117 then return dfastate_18
-               if c.ascii == 118 then return dfastate_18
-               if c.ascii == 119 then return dfastate_18
-               if c.ascii == 120 then return dfastate_18
-               if c.ascii == 121 then return dfastate_18
-               if c.ascii == 122 then return dfastate_18
-               if c.ascii == 65 then return dfastate_19
-               if c.ascii == 66 then return dfastate_19
-               if c.ascii == 67 then return dfastate_19
-               if c.ascii == 68 then return dfastate_19
-               if c.ascii == 69 then return dfastate_19
-               if c.ascii == 70 then return dfastate_19
-               if c.ascii == 71 then return dfastate_19
-               if c.ascii == 72 then return dfastate_19
-               if c.ascii == 73 then return dfastate_19
-               if c.ascii == 74 then return dfastate_19
-               if c.ascii == 75 then return dfastate_19
-               if c.ascii == 76 then return dfastate_19
-               if c.ascii == 77 then return dfastate_19
-               if c.ascii == 78 then return dfastate_19
-               if c.ascii == 79 then return dfastate_19
-               if c.ascii == 80 then return dfastate_19
-               if c.ascii == 81 then return dfastate_19
-               if c.ascii == 82 then return dfastate_19
-               if c.ascii == 83 then return dfastate_19
-               if c.ascii == 84 then return dfastate_19
-               if c.ascii == 85 then return dfastate_19
-               if c.ascii == 86 then return dfastate_19
-               if c.ascii == 87 then return dfastate_19
-               if c.ascii == 88 then return dfastate_19
-               if c.ascii == 89 then return dfastate_19
-               if c.ascii == 90 then return dfastate_19
-               return null
-       end
-end
-class DFAState9
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Neol
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState10
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Neol
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 13 then return dfastate_15
-               return null
-       end
-end
-class DFAState11
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ncomment
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 32 then return dfastate_14
-               if c.ascii == 33 then return dfastate_14
-               if c.ascii == 34 then return dfastate_14
-               if c.ascii == 35 then return dfastate_14
-               if c.ascii == 36 then return dfastate_14
-               if c.ascii == 37 then return dfastate_14
-               if c.ascii == 38 then return dfastate_14
-               if c.ascii == 39 then return dfastate_14
-               if c.ascii == 40 then return dfastate_14
-               if c.ascii == 41 then return dfastate_14
-               if c.ascii == 42 then return dfastate_14
-               if c.ascii == 43 then return dfastate_14
-               if c.ascii == 44 then return dfastate_14
-               if c.ascii == 45 then return dfastate_14
-               if c.ascii == 46 then return dfastate_14
-               if c.ascii == 47 then return dfastate_14
-               if c.ascii == 48 then return dfastate_14
-               if c.ascii == 49 then return dfastate_14
-               if c.ascii == 50 then return dfastate_14
-               if c.ascii == 51 then return dfastate_14
-               if c.ascii == 52 then return dfastate_14
-               if c.ascii == 53 then return dfastate_14
-               if c.ascii == 54 then return dfastate_14
-               if c.ascii == 55 then return dfastate_14
-               if c.ascii == 56 then return dfastate_14
-               if c.ascii == 57 then return dfastate_14
-               if c.ascii == 58 then return dfastate_14
-               if c.ascii == 59 then return dfastate_14
-               if c.ascii == 60 then return dfastate_14
-               if c.ascii == 61 then return dfastate_14
-               if c.ascii == 62 then return dfastate_14
-               if c.ascii == 63 then return dfastate_14
-               if c.ascii == 64 then return dfastate_14
-               if c.ascii == 65 then return dfastate_14
-               if c.ascii == 66 then return dfastate_14
-               if c.ascii == 67 then return dfastate_14
-               if c.ascii == 68 then return dfastate_14
-               if c.ascii == 69 then return dfastate_14
-               if c.ascii == 70 then return dfastate_14
-               if c.ascii == 71 then return dfastate_14
-               if c.ascii == 72 then return dfastate_14
-               if c.ascii == 73 then return dfastate_14
-               if c.ascii == 74 then return dfastate_14
-               if c.ascii == 75 then return dfastate_14
-               if c.ascii == 76 then return dfastate_14
-               if c.ascii == 77 then return dfastate_14
-               if c.ascii == 78 then return dfastate_14
-               if c.ascii == 79 then return dfastate_14
-               if c.ascii == 80 then return dfastate_14
-               if c.ascii == 81 then return dfastate_14
-               if c.ascii == 82 then return dfastate_14
-               if c.ascii == 83 then return dfastate_14
-               if c.ascii == 84 then return dfastate_14
-               if c.ascii == 85 then return dfastate_14
-               if c.ascii == 86 then return dfastate_14
-               if c.ascii == 87 then return dfastate_14
-               if c.ascii == 88 then return dfastate_14
-               if c.ascii == 89 then return dfastate_14
-               if c.ascii == 90 then return dfastate_14
-               if c.ascii == 91 then return dfastate_14
-               if c.ascii == 92 then return dfastate_14
-               if c.ascii == 93 then return dfastate_14
-               if c.ascii == 94 then return dfastate_14
-               if c.ascii == 95 then return dfastate_14
-               if c.ascii == 96 then return dfastate_14
-               if c.ascii == 97 then return dfastate_14
-               if c.ascii == 98 then return dfastate_14
-               if c.ascii == 99 then return dfastate_14
-               if c.ascii == 100 then return dfastate_14
-               if c.ascii == 101 then return dfastate_14
-               if c.ascii == 102 then return dfastate_14
-               if c.ascii == 103 then return dfastate_14
-               if c.ascii == 104 then return dfastate_14
-               if c.ascii == 105 then return dfastate_14
-               if c.ascii == 106 then return dfastate_14
-               if c.ascii == 107 then return dfastate_14
-               if c.ascii == 108 then return dfastate_14
-               if c.ascii == 109 then return dfastate_14
-               if c.ascii == 110 then return dfastate_14
-               if c.ascii == 111 then return dfastate_14
-               if c.ascii == 112 then return dfastate_14
-               if c.ascii == 113 then return dfastate_14
-               if c.ascii == 114 then return dfastate_14
-               if c.ascii == 115 then return dfastate_14
-               if c.ascii == 116 then return dfastate_14
-               if c.ascii == 117 then return dfastate_14
-               if c.ascii == 118 then return dfastate_14
-               if c.ascii == 119 then return dfastate_14
-               if c.ascii == 120 then return dfastate_14
-               if c.ascii == 121 then return dfastate_14
-               if c.ascii == 122 then return dfastate_14
-               if c.ascii == 123 then return dfastate_14
-               if c.ascii == 124 then return dfastate_14
-               if c.ascii == 125 then return dfastate_14
-               if c.ascii == 126 then return dfastate_14
-               return null
-       end
-end
-class DFAState12
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               return null
-       end
-       redef fun trans(c) do
-               if c.ascii == 9 then return dfastate_12
-               if c.ascii == 32 then return dfastate_13
-               return null
-       end
-end
-class DFAState13
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               return null
-       end
-       redef fun trans(c) do
-               if c.ascii == 9 then return dfastate_12
-               if c.ascii == 32 then return dfastate_13
-               return null
-       end
-end
-class DFAState14
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ncomment
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 32 then return dfastate_14
-               if c.ascii == 33 then return dfastate_14
-               if c.ascii == 34 then return dfastate_14
-               if c.ascii == 35 then return dfastate_14
-               if c.ascii == 36 then return dfastate_14
-               if c.ascii == 37 then return dfastate_14
-               if c.ascii == 38 then return dfastate_14
-               if c.ascii == 39 then return dfastate_14
-               if c.ascii == 40 then return dfastate_14
-               if c.ascii == 41 then return dfastate_14
-               if c.ascii == 42 then return dfastate_14
-               if c.ascii == 43 then return dfastate_14
-               if c.ascii == 44 then return dfastate_14
-               if c.ascii == 45 then return dfastate_14
-               if c.ascii == 46 then return dfastate_14
-               if c.ascii == 47 then return dfastate_14
-               if c.ascii == 48 then return dfastate_14
-               if c.ascii == 49 then return dfastate_14
-               if c.ascii == 50 then return dfastate_14
-               if c.ascii == 51 then return dfastate_14
-               if c.ascii == 52 then return dfastate_14
-               if c.ascii == 53 then return dfastate_14
-               if c.ascii == 54 then return dfastate_14
-               if c.ascii == 55 then return dfastate_14
-               if c.ascii == 56 then return dfastate_14
-               if c.ascii == 57 then return dfastate_14
-               if c.ascii == 58 then return dfastate_14
-               if c.ascii == 59 then return dfastate_14
-               if c.ascii == 60 then return dfastate_14
-               if c.ascii == 61 then return dfastate_14
-               if c.ascii == 62 then return dfastate_14
-               if c.ascii == 63 then return dfastate_14
-               if c.ascii == 64 then return dfastate_14
-               if c.ascii == 65 then return dfastate_14
-               if c.ascii == 66 then return dfastate_14
-               if c.ascii == 67 then return dfastate_14
-               if c.ascii == 68 then return dfastate_14
-               if c.ascii == 69 then return dfastate_14
-               if c.ascii == 70 then return dfastate_14
-               if c.ascii == 71 then return dfastate_14
-               if c.ascii == 72 then return dfastate_14
-               if c.ascii == 73 then return dfastate_14
-               if c.ascii == 74 then return dfastate_14
-               if c.ascii == 75 then return dfastate_14
-               if c.ascii == 76 then return dfastate_14
-               if c.ascii == 77 then return dfastate_14
-               if c.ascii == 78 then return dfastate_14
-               if c.ascii == 79 then return dfastate_14
-               if c.ascii == 80 then return dfastate_14
-               if c.ascii == 81 then return dfastate_14
-               if c.ascii == 82 then return dfastate_14
-               if c.ascii == 83 then return dfastate_14
-               if c.ascii == 84 then return dfastate_14
-               if c.ascii == 85 then return dfastate_14
-               if c.ascii == 86 then return dfastate_14
-               if c.ascii == 87 then return dfastate_14
-               if c.ascii == 88 then return dfastate_14
-               if c.ascii == 89 then return dfastate_14
-               if c.ascii == 90 then return dfastate_14
-               if c.ascii == 91 then return dfastate_14
-               if c.ascii == 92 then return dfastate_14
-               if c.ascii == 93 then return dfastate_14
-               if c.ascii == 94 then return dfastate_14
-               if c.ascii == 95 then return dfastate_14
-               if c.ascii == 96 then return dfastate_14
-               if c.ascii == 97 then return dfastate_14
-               if c.ascii == 98 then return dfastate_14
-               if c.ascii == 99 then return dfastate_14
-               if c.ascii == 100 then return dfastate_14
-               if c.ascii == 101 then return dfastate_14
-               if c.ascii == 102 then return dfastate_14
-               if c.ascii == 103 then return dfastate_14
-               if c.ascii == 104 then return dfastate_14
-               if c.ascii == 105 then return dfastate_14
-               if c.ascii == 106 then return dfastate_14
-               if c.ascii == 107 then return dfastate_14
-               if c.ascii == 108 then return dfastate_14
-               if c.ascii == 109 then return dfastate_14
-               if c.ascii == 110 then return dfastate_14
-               if c.ascii == 111 then return dfastate_14
-               if c.ascii == 112 then return dfastate_14
-               if c.ascii == 113 then return dfastate_14
-               if c.ascii == 114 then return dfastate_14
-               if c.ascii == 115 then return dfastate_14
-               if c.ascii == 116 then return dfastate_14
-               if c.ascii == 117 then return dfastate_14
-               if c.ascii == 118 then return dfastate_14
-               if c.ascii == 119 then return dfastate_14
-               if c.ascii == 120 then return dfastate_14
-               if c.ascii == 121 then return dfastate_14
-               if c.ascii == 122 then return dfastate_14
-               if c.ascii == 123 then return dfastate_14
-               if c.ascii == 124 then return dfastate_14
-               if c.ascii == 125 then return dfastate_14
-               if c.ascii == 126 then return dfastate_14
-               return null
-       end
-end
-class DFAState15
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Neol
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState16
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nid
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 95 then return dfastate_16
-               if c.ascii == 48 then return dfastate_17
-               if c.ascii == 49 then return dfastate_17
-               if c.ascii == 50 then return dfastate_17
-               if c.ascii == 51 then return dfastate_17
-               if c.ascii == 52 then return dfastate_17
-               if c.ascii == 53 then return dfastate_17
-               if c.ascii == 54 then return dfastate_17
-               if c.ascii == 55 then return dfastate_17
-               if c.ascii == 56 then return dfastate_17
-               if c.ascii == 57 then return dfastate_17
-               if c.ascii == 97 then return dfastate_18
-               if c.ascii == 98 then return dfastate_18
-               if c.ascii == 99 then return dfastate_18
-               if c.ascii == 100 then return dfastate_18
-               if c.ascii == 101 then return dfastate_18
-               if c.ascii == 102 then return dfastate_18
-               if c.ascii == 103 then return dfastate_18
-               if c.ascii == 104 then return dfastate_18
-               if c.ascii == 105 then return dfastate_18
-               if c.ascii == 106 then return dfastate_18
-               if c.ascii == 107 then return dfastate_18
-               if c.ascii == 108 then return dfastate_18
-               if c.ascii == 109 then return dfastate_18
-               if c.ascii == 110 then return dfastate_18
-               if c.ascii == 111 then return dfastate_18
-               if c.ascii == 112 then return dfastate_18
-               if c.ascii == 113 then return dfastate_18
-               if c.ascii == 114 then return dfastate_18
-               if c.ascii == 115 then return dfastate_18
-               if c.ascii == 116 then return dfastate_18
-               if c.ascii == 117 then return dfastate_18
-               if c.ascii == 118 then return dfastate_18
-               if c.ascii == 119 then return dfastate_18
-               if c.ascii == 120 then return dfastate_18
-               if c.ascii == 121 then return dfastate_18
-               if c.ascii == 122 then return dfastate_18
-               if c.ascii == 65 then return dfastate_19
-               if c.ascii == 66 then return dfastate_19
-               if c.ascii == 67 then return dfastate_19
-               if c.ascii == 68 then return dfastate_19
-               if c.ascii == 69 then return dfastate_19
-               if c.ascii == 70 then return dfastate_19
-               if c.ascii == 71 then return dfastate_19
-               if c.ascii == 72 then return dfastate_19
-               if c.ascii == 73 then return dfastate_19
-               if c.ascii == 74 then return dfastate_19
-               if c.ascii == 75 then return dfastate_19
-               if c.ascii == 76 then return dfastate_19
-               if c.ascii == 77 then return dfastate_19
-               if c.ascii == 78 then return dfastate_19
-               if c.ascii == 79 then return dfastate_19
-               if c.ascii == 80 then return dfastate_19
-               if c.ascii == 81 then return dfastate_19
-               if c.ascii == 82 then return dfastate_19
-               if c.ascii == 83 then return dfastate_19
-               if c.ascii == 84 then return dfastate_19
-               if c.ascii == 85 then return dfastate_19
-               if c.ascii == 86 then return dfastate_19
-               if c.ascii == 87 then return dfastate_19
-               if c.ascii == 88 then return dfastate_19
-               if c.ascii == 89 then return dfastate_19
-               if c.ascii == 90 then return dfastate_19
-               return null
-       end
-end
-class DFAState17
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nid
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 95 then return dfastate_16
-               if c.ascii == 48 then return dfastate_17
-               if c.ascii == 49 then return dfastate_17
-               if c.ascii == 50 then return dfastate_17
-               if c.ascii == 51 then return dfastate_17
-               if c.ascii == 52 then return dfastate_17
-               if c.ascii == 53 then return dfastate_17
-               if c.ascii == 54 then return dfastate_17
-               if c.ascii == 55 then return dfastate_17
-               if c.ascii == 56 then return dfastate_17
-               if c.ascii == 57 then return dfastate_17
-               if c.ascii == 97 then return dfastate_18
-               if c.ascii == 98 then return dfastate_18
-               if c.ascii == 99 then return dfastate_18
-               if c.ascii == 100 then return dfastate_18
-               if c.ascii == 101 then return dfastate_18
-               if c.ascii == 102 then return dfastate_18
-               if c.ascii == 103 then return dfastate_18
-               if c.ascii == 104 then return dfastate_18
-               if c.ascii == 105 then return dfastate_18
-               if c.ascii == 106 then return dfastate_18
-               if c.ascii == 107 then return dfastate_18
-               if c.ascii == 108 then return dfastate_18
-               if c.ascii == 109 then return dfastate_18
-               if c.ascii == 110 then return dfastate_18
-               if c.ascii == 111 then return dfastate_18
-               if c.ascii == 112 then return dfastate_18
-               if c.ascii == 113 then return dfastate_18
-               if c.ascii == 114 then return dfastate_18
-               if c.ascii == 115 then return dfastate_18
-               if c.ascii == 116 then return dfastate_18
-               if c.ascii == 117 then return dfastate_18
-               if c.ascii == 118 then return dfastate_18
-               if c.ascii == 119 then return dfastate_18
-               if c.ascii == 120 then return dfastate_18
-               if c.ascii == 121 then return dfastate_18
-               if c.ascii == 122 then return dfastate_18
-               if c.ascii == 65 then return dfastate_19
-               if c.ascii == 66 then return dfastate_19
-               if c.ascii == 67 then return dfastate_19
-               if c.ascii == 68 then return dfastate_19
-               if c.ascii == 69 then return dfastate_19
-               if c.ascii == 70 then return dfastate_19
-               if c.ascii == 71 then return dfastate_19
-               if c.ascii == 72 then return dfastate_19
-               if c.ascii == 73 then return dfastate_19
-               if c.ascii == 74 then return dfastate_19
-               if c.ascii == 75 then return dfastate_19
-               if c.ascii == 76 then return dfastate_19
-               if c.ascii == 77 then return dfastate_19
-               if c.ascii == 78 then return dfastate_19
-               if c.ascii == 79 then return dfastate_19
-               if c.ascii == 80 then return dfastate_19
-               if c.ascii == 81 then return dfastate_19
-               if c.ascii == 82 then return dfastate_19
-               if c.ascii == 83 then return dfastate_19
-               if c.ascii == 84 then return dfastate_19
-               if c.ascii == 85 then return dfastate_19
-               if c.ascii == 86 then return dfastate_19
-               if c.ascii == 87 then return dfastate_19
-               if c.ascii == 88 then return dfastate_19
-               if c.ascii == 89 then return dfastate_19
-               if c.ascii == 90 then return dfastate_19
-               return null
-       end
-end
-class DFAState18
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nid
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 95 then return dfastate_16
-               if c.ascii == 48 then return dfastate_17
-               if c.ascii == 49 then return dfastate_17
-               if c.ascii == 50 then return dfastate_17
-               if c.ascii == 51 then return dfastate_17
-               if c.ascii == 52 then return dfastate_17
-               if c.ascii == 53 then return dfastate_17
-               if c.ascii == 54 then return dfastate_17
-               if c.ascii == 55 then return dfastate_17
-               if c.ascii == 56 then return dfastate_17
-               if c.ascii == 57 then return dfastate_17
-               if c.ascii == 97 then return dfastate_18
-               if c.ascii == 98 then return dfastate_18
-               if c.ascii == 99 then return dfastate_18
-               if c.ascii == 100 then return dfastate_18
-               if c.ascii == 101 then return dfastate_18
-               if c.ascii == 102 then return dfastate_18
-               if c.ascii == 103 then return dfastate_18
-               if c.ascii == 104 then return dfastate_18
-               if c.ascii == 105 then return dfastate_18
-               if c.ascii == 106 then return dfastate_18
-               if c.ascii == 107 then return dfastate_18
-               if c.ascii == 108 then return dfastate_18
-               if c.ascii == 109 then return dfastate_18
-               if c.ascii == 110 then return dfastate_18
-               if c.ascii == 111 then return dfastate_18
-               if c.ascii == 112 then return dfastate_18
-               if c.ascii == 113 then return dfastate_18
-               if c.ascii == 114 then return dfastate_18
-               if c.ascii == 115 then return dfastate_18
-               if c.ascii == 116 then return dfastate_18
-               if c.ascii == 117 then return dfastate_18
-               if c.ascii == 118 then return dfastate_18
-               if c.ascii == 119 then return dfastate_18
-               if c.ascii == 120 then return dfastate_18
-               if c.ascii == 121 then return dfastate_18
-               if c.ascii == 122 then return dfastate_18
-               if c.ascii == 65 then return dfastate_19
-               if c.ascii == 66 then return dfastate_19
-               if c.ascii == 67 then return dfastate_19
-               if c.ascii == 68 then return dfastate_19
-               if c.ascii == 69 then return dfastate_19
-               if c.ascii == 70 then return dfastate_19
-               if c.ascii == 71 then return dfastate_19
-               if c.ascii == 72 then return dfastate_19
-               if c.ascii == 73 then return dfastate_19
-               if c.ascii == 74 then return dfastate_19
-               if c.ascii == 75 then return dfastate_19
-               if c.ascii == 76 then return dfastate_19
-               if c.ascii == 77 then return dfastate_19
-               if c.ascii == 78 then return dfastate_19
-               if c.ascii == 79 then return dfastate_19
-               if c.ascii == 80 then return dfastate_19
-               if c.ascii == 81 then return dfastate_19
-               if c.ascii == 82 then return dfastate_19
-               if c.ascii == 83 then return dfastate_19
-               if c.ascii == 84 then return dfastate_19
-               if c.ascii == 85 then return dfastate_19
-               if c.ascii == 86 then return dfastate_19
-               if c.ascii == 87 then return dfastate_19
-               if c.ascii == 88 then return dfastate_19
-               if c.ascii == 89 then return dfastate_19
-               if c.ascii == 90 then return dfastate_19
-               return null
-       end
-end
-class DFAState19
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nid
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 95 then return dfastate_16
-               if c.ascii == 48 then return dfastate_17
-               if c.ascii == 49 then return dfastate_17
-               if c.ascii == 50 then return dfastate_17
-               if c.ascii == 51 then return dfastate_17
-               if c.ascii == 52 then return dfastate_17
-               if c.ascii == 53 then return dfastate_17
-               if c.ascii == 54 then return dfastate_17
-               if c.ascii == 55 then return dfastate_17
-               if c.ascii == 56 then return dfastate_17
-               if c.ascii == 57 then return dfastate_17
-               if c.ascii == 97 then return dfastate_18
-               if c.ascii == 98 then return dfastate_18
-               if c.ascii == 99 then return dfastate_18
-               if c.ascii == 100 then return dfastate_18
-               if c.ascii == 101 then return dfastate_18
-               if c.ascii == 102 then return dfastate_18
-               if c.ascii == 103 then return dfastate_18
-               if c.ascii == 104 then return dfastate_18
-               if c.ascii == 105 then return dfastate_18
-               if c.ascii == 106 then return dfastate_18
-               if c.ascii == 107 then return dfastate_18
-               if c.ascii == 108 then return dfastate_18
-               if c.ascii == 109 then return dfastate_18
-               if c.ascii == 110 then return dfastate_18
-               if c.ascii == 111 then return dfastate_18
-               if c.ascii == 112 then return dfastate_18
-               if c.ascii == 113 then return dfastate_18
-               if c.ascii == 114 then return dfastate_18
-               if c.ascii == 115 then return dfastate_18
-               if c.ascii == 116 then return dfastate_18
-               if c.ascii == 117 then return dfastate_18
-               if c.ascii == 118 then return dfastate_18
-               if c.ascii == 119 then return dfastate_18
-               if c.ascii == 120 then return dfastate_18
-               if c.ascii == 121 then return dfastate_18
-               if c.ascii == 122 then return dfastate_18
-               if c.ascii == 65 then return dfastate_19
-               if c.ascii == 66 then return dfastate_19
-               if c.ascii == 67 then return dfastate_19
-               if c.ascii == 68 then return dfastate_19
-               if c.ascii == 69 then return dfastate_19
-               if c.ascii == 70 then return dfastate_19
-               if c.ascii == 71 then return dfastate_19
-               if c.ascii == 72 then return dfastate_19
-               if c.ascii == 73 then return dfastate_19
-               if c.ascii == 74 then return dfastate_19
-               if c.ascii == 75 then return dfastate_19
-               if c.ascii == 76 then return dfastate_19
-               if c.ascii == 77 then return dfastate_19
-               if c.ascii == 78 then return dfastate_19
-               if c.ascii == 79 then return dfastate_19
-               if c.ascii == 80 then return dfastate_19
-               if c.ascii == 81 then return dfastate_19
-               if c.ascii == 82 then return dfastate_19
-               if c.ascii == 83 then return dfastate_19
-               if c.ascii == 84 then return dfastate_19
-               if c.ascii == 85 then return dfastate_19
-               if c.ascii == 86 then return dfastate_19
-               if c.ascii == 87 then return dfastate_19
-               if c.ascii == 88 then return dfastate_19
-               if c.ascii == 89 then return dfastate_19
-               if c.ascii == 90 then return dfastate_19
-               return null
-       end
-end
-class DFAState20
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 39 then return dfastate_32
-               return null
-       end
-end
-class DFAState21
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 120 then return dfastate_22
-               if c.ascii == 32 then return dfastate_23
-               if c.ascii == 33 then return dfastate_23
-               if c.ascii == 34 then return dfastate_23
-               if c.ascii == 35 then return dfastate_23
-               if c.ascii == 36 then return dfastate_23
-               if c.ascii == 37 then return dfastate_23
-               if c.ascii == 38 then return dfastate_23
-               if c.ascii == 39 then return dfastate_23
-               if c.ascii == 40 then return dfastate_23
-               if c.ascii == 41 then return dfastate_23
-               if c.ascii == 42 then return dfastate_23
-               if c.ascii == 43 then return dfastate_23
-               if c.ascii == 44 then return dfastate_23
-               if c.ascii == 45 then return dfastate_23
-               if c.ascii == 46 then return dfastate_23
-               if c.ascii == 47 then return dfastate_23
-               if c.ascii == 48 then return dfastate_23
-               if c.ascii == 49 then return dfastate_23
-               if c.ascii == 50 then return dfastate_23
-               if c.ascii == 51 then return dfastate_23
-               if c.ascii == 52 then return dfastate_23
-               if c.ascii == 53 then return dfastate_23
-               if c.ascii == 54 then return dfastate_23
-               if c.ascii == 55 then return dfastate_23
-               if c.ascii == 56 then return dfastate_23
-               if c.ascii == 57 then return dfastate_23
-               if c.ascii == 58 then return dfastate_23
-               if c.ascii == 59 then return dfastate_23
-               if c.ascii == 60 then return dfastate_23
-               if c.ascii == 61 then return dfastate_23
-               if c.ascii == 62 then return dfastate_23
-               if c.ascii == 63 then return dfastate_23
-               if c.ascii == 64 then return dfastate_23
-               if c.ascii == 65 then return dfastate_23
-               if c.ascii == 66 then return dfastate_23
-               if c.ascii == 67 then return dfastate_23
-               if c.ascii == 68 then return dfastate_23
-               if c.ascii == 69 then return dfastate_23
-               if c.ascii == 70 then return dfastate_23
-               if c.ascii == 71 then return dfastate_23
-               if c.ascii == 72 then return dfastate_23
-               if c.ascii == 73 then return dfastate_23
-               if c.ascii == 74 then return dfastate_23
-               if c.ascii == 75 then return dfastate_23
-               if c.ascii == 76 then return dfastate_23
-               if c.ascii == 77 then return dfastate_23
-               if c.ascii == 78 then return dfastate_23
-               if c.ascii == 79 then return dfastate_23
-               if c.ascii == 80 then return dfastate_23
-               if c.ascii == 81 then return dfastate_23
-               if c.ascii == 82 then return dfastate_23
-               if c.ascii == 83 then return dfastate_23
-               if c.ascii == 84 then return dfastate_23
-               if c.ascii == 85 then return dfastate_23
-               if c.ascii == 86 then return dfastate_23
-               if c.ascii == 87 then return dfastate_23
-               if c.ascii == 88 then return dfastate_23
-               if c.ascii == 89 then return dfastate_23
-               if c.ascii == 90 then return dfastate_23
-               if c.ascii == 91 then return dfastate_23
-               if c.ascii == 92 then return dfastate_23
-               if c.ascii == 93 then return dfastate_23
-               if c.ascii == 94 then return dfastate_23
-               if c.ascii == 95 then return dfastate_23
-               if c.ascii == 96 then return dfastate_23
-               if c.ascii == 97 then return dfastate_23
-               if c.ascii == 98 then return dfastate_23
-               if c.ascii == 99 then return dfastate_23
-               if c.ascii == 100 then return dfastate_23
-               if c.ascii == 101 then return dfastate_23
-               if c.ascii == 102 then return dfastate_23
-               if c.ascii == 103 then return dfastate_23
-               if c.ascii == 104 then return dfastate_23
-               if c.ascii == 105 then return dfastate_23
-               if c.ascii == 106 then return dfastate_23
-               if c.ascii == 107 then return dfastate_23
-               if c.ascii == 108 then return dfastate_23
-               if c.ascii == 109 then return dfastate_23
-               if c.ascii == 110 then return dfastate_23
-               if c.ascii == 111 then return dfastate_23
-               if c.ascii == 112 then return dfastate_23
-               if c.ascii == 113 then return dfastate_23
-               if c.ascii == 114 then return dfastate_23
-               if c.ascii == 115 then return dfastate_23
-               if c.ascii == 116 then return dfastate_23
-               if c.ascii == 117 then return dfastate_23
-               if c.ascii == 118 then return dfastate_23
-               if c.ascii == 119 then return dfastate_23
-               if c.ascii == 121 then return dfastate_23
-               if c.ascii == 122 then return dfastate_23
-               if c.ascii == 123 then return dfastate_23
-               if c.ascii == 124 then return dfastate_23
-               if c.ascii == 125 then return dfastate_23
-               if c.ascii == 126 then return dfastate_23
-               return null
-       end
-end
-class DFAState22
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 39 then return dfastate_24
-               if c.ascii == 97 then return dfastate_25
-               if c.ascii == 98 then return dfastate_25
-               if c.ascii == 99 then return dfastate_25
-               if c.ascii == 100 then return dfastate_25
-               if c.ascii == 101 then return dfastate_25
-               if c.ascii == 102 then return dfastate_25
-               if c.ascii == 48 then return dfastate_26
-               if c.ascii == 49 then return dfastate_26
-               if c.ascii == 50 then return dfastate_26
-               if c.ascii == 51 then return dfastate_26
-               if c.ascii == 52 then return dfastate_26
-               if c.ascii == 53 then return dfastate_26
-               if c.ascii == 54 then return dfastate_26
-               if c.ascii == 55 then return dfastate_26
-               if c.ascii == 56 then return dfastate_26
-               if c.ascii == 57 then return dfastate_26
-               if c.ascii == 65 then return dfastate_27
-               if c.ascii == 66 then return dfastate_27
-               if c.ascii == 67 then return dfastate_27
-               if c.ascii == 68 then return dfastate_27
-               if c.ascii == 69 then return dfastate_27
-               if c.ascii == 70 then return dfastate_27
-               return null
-       end
-end
-class DFAState23
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 39 then return dfastate_24
-               return null
-       end
-end
-class DFAState24
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nchar
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState25
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 97 then return dfastate_28
-               if c.ascii == 98 then return dfastate_28
-               if c.ascii == 99 then return dfastate_28
-               if c.ascii == 100 then return dfastate_28
-               if c.ascii == 101 then return dfastate_28
-               if c.ascii == 102 then return dfastate_28
-               if c.ascii == 48 then return dfastate_29
-               if c.ascii == 49 then return dfastate_29
-               if c.ascii == 50 then return dfastate_29
-               if c.ascii == 51 then return dfastate_29
-               if c.ascii == 52 then return dfastate_29
-               if c.ascii == 53 then return dfastate_29
-               if c.ascii == 54 then return dfastate_29
-               if c.ascii == 55 then return dfastate_29
-               if c.ascii == 56 then return dfastate_29
-               if c.ascii == 57 then return dfastate_29
-               if c.ascii == 65 then return dfastate_30
-               if c.ascii == 66 then return dfastate_30
-               if c.ascii == 67 then return dfastate_30
-               if c.ascii == 68 then return dfastate_30
-               if c.ascii == 69 then return dfastate_30
-               if c.ascii == 70 then return dfastate_30
-               return null
-       end
-end
-class DFAState26
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 97 then return dfastate_28
-               if c.ascii == 98 then return dfastate_28
-               if c.ascii == 99 then return dfastate_28
-               if c.ascii == 100 then return dfastate_28
-               if c.ascii == 101 then return dfastate_28
-               if c.ascii == 102 then return dfastate_28
-               if c.ascii == 48 then return dfastate_29
-               if c.ascii == 49 then return dfastate_29
-               if c.ascii == 50 then return dfastate_29
-               if c.ascii == 51 then return dfastate_29
-               if c.ascii == 52 then return dfastate_29
-               if c.ascii == 53 then return dfastate_29
-               if c.ascii == 54 then return dfastate_29
-               if c.ascii == 55 then return dfastate_29
-               if c.ascii == 56 then return dfastate_29
-               if c.ascii == 57 then return dfastate_29
-               if c.ascii == 65 then return dfastate_30
-               if c.ascii == 66 then return dfastate_30
-               if c.ascii == 67 then return dfastate_30
-               if c.ascii == 68 then return dfastate_30
-               if c.ascii == 69 then return dfastate_30
-               if c.ascii == 70 then return dfastate_30
-               return null
-       end
-end
-class DFAState27
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 97 then return dfastate_28
-               if c.ascii == 98 then return dfastate_28
-               if c.ascii == 99 then return dfastate_28
-               if c.ascii == 100 then return dfastate_28
-               if c.ascii == 101 then return dfastate_28
-               if c.ascii == 102 then return dfastate_28
-               if c.ascii == 48 then return dfastate_29
-               if c.ascii == 49 then return dfastate_29
-               if c.ascii == 50 then return dfastate_29
-               if c.ascii == 51 then return dfastate_29
-               if c.ascii == 52 then return dfastate_29
-               if c.ascii == 53 then return dfastate_29
-               if c.ascii == 54 then return dfastate_29
-               if c.ascii == 55 then return dfastate_29
-               if c.ascii == 56 then return dfastate_29
-               if c.ascii == 57 then return dfastate_29
-               if c.ascii == 65 then return dfastate_30
-               if c.ascii == 66 then return dfastate_30
-               if c.ascii == 67 then return dfastate_30
-               if c.ascii == 68 then return dfastate_30
-               if c.ascii == 69 then return dfastate_30
-               if c.ascii == 70 then return dfastate_30
-               return null
-       end
-end
-class DFAState28
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 39 then return dfastate_31
-               return null
-       end
-end
-class DFAState29
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 39 then return dfastate_31
-               return null
-       end
-end
-class DFAState30
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 39 then return dfastate_31
-               return null
-       end
-end
-class DFAState31
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nchar
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState32
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nchar
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState33
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 32 then return dfastate_33
-               if c.ascii == 33 then return dfastate_33
-               if c.ascii == 35 then return dfastate_33
-               if c.ascii == 36 then return dfastate_33
-               if c.ascii == 37 then return dfastate_33
-               if c.ascii == 38 then return dfastate_33
-               if c.ascii == 39 then return dfastate_33
-               if c.ascii == 40 then return dfastate_33
-               if c.ascii == 41 then return dfastate_33
-               if c.ascii == 42 then return dfastate_33
-               if c.ascii == 43 then return dfastate_33
-               if c.ascii == 44 then return dfastate_33
-               if c.ascii == 45 then return dfastate_33
-               if c.ascii == 46 then return dfastate_33
-               if c.ascii == 47 then return dfastate_33
-               if c.ascii == 48 then return dfastate_33
-               if c.ascii == 49 then return dfastate_33
-               if c.ascii == 50 then return dfastate_33
-               if c.ascii == 51 then return dfastate_33
-               if c.ascii == 52 then return dfastate_33
-               if c.ascii == 53 then return dfastate_33
-               if c.ascii == 54 then return dfastate_33
-               if c.ascii == 55 then return dfastate_33
-               if c.ascii == 56 then return dfastate_33
-               if c.ascii == 57 then return dfastate_33
-               if c.ascii == 58 then return dfastate_33
-               if c.ascii == 59 then return dfastate_33
-               if c.ascii == 60 then return dfastate_33
-               if c.ascii == 61 then return dfastate_33
-               if c.ascii == 62 then return dfastate_33
-               if c.ascii == 63 then return dfastate_33
-               if c.ascii == 64 then return dfastate_33
-               if c.ascii == 65 then return dfastate_33
-               if c.ascii == 66 then return dfastate_33
-               if c.ascii == 67 then return dfastate_33
-               if c.ascii == 68 then return dfastate_33
-               if c.ascii == 69 then return dfastate_33
-               if c.ascii == 70 then return dfastate_33
-               if c.ascii == 71 then return dfastate_33
-               if c.ascii == 72 then return dfastate_33
-               if c.ascii == 73 then return dfastate_33
-               if c.ascii == 74 then return dfastate_33
-               if c.ascii == 75 then return dfastate_33
-               if c.ascii == 76 then return dfastate_33
-               if c.ascii == 77 then return dfastate_33
-               if c.ascii == 78 then return dfastate_33
-               if c.ascii == 79 then return dfastate_33
-               if c.ascii == 80 then return dfastate_33
-               if c.ascii == 81 then return dfastate_33
-               if c.ascii == 82 then return dfastate_33
-               if c.ascii == 83 then return dfastate_33
-               if c.ascii == 84 then return dfastate_33
-               if c.ascii == 85 then return dfastate_33
-               if c.ascii == 86 then return dfastate_33
-               if c.ascii == 87 then return dfastate_33
-               if c.ascii == 88 then return dfastate_33
-               if c.ascii == 89 then return dfastate_33
-               if c.ascii == 90 then return dfastate_33
-               if c.ascii == 91 then return dfastate_33
-               if c.ascii == 92 then return dfastate_42
-               if c.ascii == 93 then return dfastate_33
-               if c.ascii == 94 then return dfastate_33
-               if c.ascii == 95 then return dfastate_33
-               if c.ascii == 96 then return dfastate_33
-               if c.ascii == 97 then return dfastate_33
-               if c.ascii == 98 then return dfastate_33
-               if c.ascii == 99 then return dfastate_33
-               if c.ascii == 100 then return dfastate_33
-               if c.ascii == 101 then return dfastate_33
-               if c.ascii == 102 then return dfastate_33
-               if c.ascii == 103 then return dfastate_33
-               if c.ascii == 104 then return dfastate_33
-               if c.ascii == 105 then return dfastate_33
-               if c.ascii == 106 then return dfastate_33
-               if c.ascii == 107 then return dfastate_33
-               if c.ascii == 108 then return dfastate_33
-               if c.ascii == 109 then return dfastate_33
-               if c.ascii == 110 then return dfastate_33
-               if c.ascii == 111 then return dfastate_33
-               if c.ascii == 112 then return dfastate_33
-               if c.ascii == 113 then return dfastate_33
-               if c.ascii == 114 then return dfastate_33
-               if c.ascii == 115 then return dfastate_33
-               if c.ascii == 116 then return dfastate_33
-               if c.ascii == 117 then return dfastate_33
-               if c.ascii == 118 then return dfastate_33
-               if c.ascii == 119 then return dfastate_33
-               if c.ascii == 120 then return dfastate_33
-               if c.ascii == 121 then return dfastate_33
-               if c.ascii == 122 then return dfastate_33
-               if c.ascii == 123 then return dfastate_33
-               if c.ascii == 124 then return dfastate_33
-               if c.ascii == 125 then return dfastate_33
-               if c.ascii == 126 then return dfastate_33
-               return null
-       end
-end
-class DFAState34
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 32 then return dfastate_36
-               if c.ascii == 33 then return dfastate_36
-               if c.ascii == 34 then return dfastate_37
-               if c.ascii == 35 then return dfastate_36
-               if c.ascii == 36 then return dfastate_36
-               if c.ascii == 37 then return dfastate_36
-               if c.ascii == 38 then return dfastate_36
-               if c.ascii == 39 then return dfastate_36
-               if c.ascii == 40 then return dfastate_36
-               if c.ascii == 41 then return dfastate_36
-               if c.ascii == 42 then return dfastate_36
-               if c.ascii == 43 then return dfastate_36
-               if c.ascii == 44 then return dfastate_36
-               if c.ascii == 45 then return dfastate_36
-               if c.ascii == 46 then return dfastate_36
-               if c.ascii == 47 then return dfastate_36
-               if c.ascii == 48 then return dfastate_36
-               if c.ascii == 49 then return dfastate_36
-               if c.ascii == 50 then return dfastate_36
-               if c.ascii == 51 then return dfastate_36
-               if c.ascii == 52 then return dfastate_36
-               if c.ascii == 53 then return dfastate_36
-               if c.ascii == 54 then return dfastate_36
-               if c.ascii == 55 then return dfastate_36
-               if c.ascii == 56 then return dfastate_36
-               if c.ascii == 57 then return dfastate_36
-               if c.ascii == 58 then return dfastate_36
-               if c.ascii == 59 then return dfastate_36
-               if c.ascii == 60 then return dfastate_36
-               if c.ascii == 61 then return dfastate_36
-               if c.ascii == 62 then return dfastate_36
-               if c.ascii == 63 then return dfastate_36
-               if c.ascii == 64 then return dfastate_36
-               if c.ascii == 65 then return dfastate_36
-               if c.ascii == 66 then return dfastate_36
-               if c.ascii == 67 then return dfastate_36
-               if c.ascii == 68 then return dfastate_36
-               if c.ascii == 69 then return dfastate_36
-               if c.ascii == 70 then return dfastate_36
-               if c.ascii == 71 then return dfastate_36
-               if c.ascii == 72 then return dfastate_36
-               if c.ascii == 73 then return dfastate_36
-               if c.ascii == 74 then return dfastate_36
-               if c.ascii == 75 then return dfastate_36
-               if c.ascii == 76 then return dfastate_36
-               if c.ascii == 77 then return dfastate_36
-               if c.ascii == 78 then return dfastate_36
-               if c.ascii == 79 then return dfastate_36
-               if c.ascii == 80 then return dfastate_36
-               if c.ascii == 81 then return dfastate_36
-               if c.ascii == 82 then return dfastate_36
-               if c.ascii == 83 then return dfastate_36
-               if c.ascii == 84 then return dfastate_36
-               if c.ascii == 85 then return dfastate_36
-               if c.ascii == 86 then return dfastate_36
-               if c.ascii == 87 then return dfastate_36
-               if c.ascii == 88 then return dfastate_36
-               if c.ascii == 89 then return dfastate_36
-               if c.ascii == 90 then return dfastate_36
-               if c.ascii == 91 then return dfastate_36
-               if c.ascii == 92 then return dfastate_38
-               if c.ascii == 93 then return dfastate_36
-               if c.ascii == 94 then return dfastate_36
-               if c.ascii == 95 then return dfastate_36
-               if c.ascii == 96 then return dfastate_36
-               if c.ascii == 97 then return dfastate_36
-               if c.ascii == 98 then return dfastate_36
-               if c.ascii == 99 then return dfastate_36
-               if c.ascii == 100 then return dfastate_36
-               if c.ascii == 101 then return dfastate_36
-               if c.ascii == 102 then return dfastate_36
-               if c.ascii == 103 then return dfastate_36
-               if c.ascii == 104 then return dfastate_36
-               if c.ascii == 105 then return dfastate_36
-               if c.ascii == 106 then return dfastate_36
-               if c.ascii == 107 then return dfastate_36
-               if c.ascii == 108 then return dfastate_36
-               if c.ascii == 109 then return dfastate_36
-               if c.ascii == 110 then return dfastate_36
-               if c.ascii == 111 then return dfastate_36
-               if c.ascii == 112 then return dfastate_36
-               if c.ascii == 113 then return dfastate_36
-               if c.ascii == 114 then return dfastate_36
-               if c.ascii == 115 then return dfastate_36
-               if c.ascii == 116 then return dfastate_36
-               if c.ascii == 117 then return dfastate_36
-               if c.ascii == 118 then return dfastate_36
-               if c.ascii == 119 then return dfastate_36
-               if c.ascii == 120 then return dfastate_36
-               if c.ascii == 121 then return dfastate_36
-               if c.ascii == 122 then return dfastate_36
-               if c.ascii == 123 then return dfastate_36
-               if c.ascii == 124 then return dfastate_36
-               if c.ascii == 125 then return dfastate_36
-               if c.ascii == 126 then return dfastate_36
-               return null
-       end
-end
-class DFAState35
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nstring
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState36
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 32 then return dfastate_33
-               if c.ascii == 33 then return dfastate_33
-               if c.ascii == 35 then return dfastate_33
-               if c.ascii == 36 then return dfastate_33
-               if c.ascii == 37 then return dfastate_33
-               if c.ascii == 38 then return dfastate_33
-               if c.ascii == 39 then return dfastate_33
-               if c.ascii == 40 then return dfastate_33
-               if c.ascii == 41 then return dfastate_33
-               if c.ascii == 42 then return dfastate_33
-               if c.ascii == 43 then return dfastate_33
-               if c.ascii == 44 then return dfastate_33
-               if c.ascii == 45 then return dfastate_33
-               if c.ascii == 46 then return dfastate_33
-               if c.ascii == 47 then return dfastate_33
-               if c.ascii == 48 then return dfastate_33
-               if c.ascii == 49 then return dfastate_33
-               if c.ascii == 50 then return dfastate_33
-               if c.ascii == 51 then return dfastate_33
-               if c.ascii == 52 then return dfastate_33
-               if c.ascii == 53 then return dfastate_33
-               if c.ascii == 54 then return dfastate_33
-               if c.ascii == 55 then return dfastate_33
-               if c.ascii == 56 then return dfastate_33
-               if c.ascii == 57 then return dfastate_33
-               if c.ascii == 58 then return dfastate_33
-               if c.ascii == 59 then return dfastate_33
-               if c.ascii == 60 then return dfastate_33
-               if c.ascii == 61 then return dfastate_33
-               if c.ascii == 62 then return dfastate_33
-               if c.ascii == 63 then return dfastate_33
-               if c.ascii == 64 then return dfastate_33
-               if c.ascii == 65 then return dfastate_33
-               if c.ascii == 66 then return dfastate_33
-               if c.ascii == 67 then return dfastate_33
-               if c.ascii == 68 then return dfastate_33
-               if c.ascii == 69 then return dfastate_33
-               if c.ascii == 70 then return dfastate_33
-               if c.ascii == 71 then return dfastate_33
-               if c.ascii == 72 then return dfastate_33
-               if c.ascii == 73 then return dfastate_33
-               if c.ascii == 74 then return dfastate_33
-               if c.ascii == 75 then return dfastate_33
-               if c.ascii == 76 then return dfastate_33
-               if c.ascii == 77 then return dfastate_33
-               if c.ascii == 78 then return dfastate_33
-               if c.ascii == 79 then return dfastate_33
-               if c.ascii == 80 then return dfastate_33
-               if c.ascii == 81 then return dfastate_33
-               if c.ascii == 82 then return dfastate_33
-               if c.ascii == 83 then return dfastate_33
-               if c.ascii == 84 then return dfastate_33
-               if c.ascii == 85 then return dfastate_33
-               if c.ascii == 86 then return dfastate_33
-               if c.ascii == 87 then return dfastate_33
-               if c.ascii == 88 then return dfastate_33
-               if c.ascii == 89 then return dfastate_33
-               if c.ascii == 90 then return dfastate_33
-               if c.ascii == 91 then return dfastate_33
-               if c.ascii == 92 then return dfastate_39
-               if c.ascii == 93 then return dfastate_33
-               if c.ascii == 94 then return dfastate_33
-               if c.ascii == 95 then return dfastate_33
-               if c.ascii == 96 then return dfastate_33
-               if c.ascii == 97 then return dfastate_33
-               if c.ascii == 98 then return dfastate_33
-               if c.ascii == 99 then return dfastate_33
-               if c.ascii == 100 then return dfastate_33
-               if c.ascii == 101 then return dfastate_33
-               if c.ascii == 102 then return dfastate_33
-               if c.ascii == 103 then return dfastate_33
-               if c.ascii == 104 then return dfastate_33
-               if c.ascii == 105 then return dfastate_33
-               if c.ascii == 106 then return dfastate_33
-               if c.ascii == 107 then return dfastate_33
-               if c.ascii == 108 then return dfastate_33
-               if c.ascii == 109 then return dfastate_33
-               if c.ascii == 110 then return dfastate_33
-               if c.ascii == 111 then return dfastate_33
-               if c.ascii == 112 then return dfastate_33
-               if c.ascii == 113 then return dfastate_33
-               if c.ascii == 114 then return dfastate_33
-               if c.ascii == 115 then return dfastate_33
-               if c.ascii == 116 then return dfastate_33
-               if c.ascii == 117 then return dfastate_33
-               if c.ascii == 118 then return dfastate_33
-               if c.ascii == 119 then return dfastate_33
-               if c.ascii == 120 then return dfastate_33
-               if c.ascii == 121 then return dfastate_33
-               if c.ascii == 122 then return dfastate_33
-               if c.ascii == 123 then return dfastate_33
-               if c.ascii == 124 then return dfastate_33
-               if c.ascii == 125 then return dfastate_33
-               if c.ascii == 126 then return dfastate_33
-               if c.ascii == 34 then return dfastate_35
-               return null
-       end
-end
-class DFAState37
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 34 then return dfastate_35
-               if c.ascii == 32 then return dfastate_33
-               if c.ascii == 33 then return dfastate_33
-               if c.ascii == 35 then return dfastate_33
-               if c.ascii == 36 then return dfastate_33
-               if c.ascii == 37 then return dfastate_33
-               if c.ascii == 38 then return dfastate_33
-               if c.ascii == 39 then return dfastate_33
-               if c.ascii == 40 then return dfastate_33
-               if c.ascii == 41 then return dfastate_33
-               if c.ascii == 42 then return dfastate_33
-               if c.ascii == 43 then return dfastate_33
-               if c.ascii == 44 then return dfastate_33
-               if c.ascii == 45 then return dfastate_33
-               if c.ascii == 46 then return dfastate_33
-               if c.ascii == 47 then return dfastate_33
-               if c.ascii == 48 then return dfastate_33
-               if c.ascii == 49 then return dfastate_33
-               if c.ascii == 50 then return dfastate_33
-               if c.ascii == 51 then return dfastate_33
-               if c.ascii == 52 then return dfastate_33
-               if c.ascii == 53 then return dfastate_33
-               if c.ascii == 54 then return dfastate_33
-               if c.ascii == 55 then return dfastate_33
-               if c.ascii == 56 then return dfastate_33
-               if c.ascii == 57 then return dfastate_33
-               if c.ascii == 58 then return dfastate_33
-               if c.ascii == 59 then return dfastate_33
-               if c.ascii == 60 then return dfastate_33
-               if c.ascii == 61 then return dfastate_33
-               if c.ascii == 62 then return dfastate_33
-               if c.ascii == 63 then return dfastate_33
-               if c.ascii == 64 then return dfastate_33
-               if c.ascii == 65 then return dfastate_33
-               if c.ascii == 66 then return dfastate_33
-               if c.ascii == 67 then return dfastate_33
-               if c.ascii == 68 then return dfastate_33
-               if c.ascii == 69 then return dfastate_33
-               if c.ascii == 70 then return dfastate_33
-               if c.ascii == 71 then return dfastate_33
-               if c.ascii == 72 then return dfastate_33
-               if c.ascii == 73 then return dfastate_33
-               if c.ascii == 74 then return dfastate_33
-               if c.ascii == 75 then return dfastate_33
-               if c.ascii == 76 then return dfastate_33
-               if c.ascii == 77 then return dfastate_33
-               if c.ascii == 78 then return dfastate_33
-               if c.ascii == 79 then return dfastate_33
-               if c.ascii == 80 then return dfastate_33
-               if c.ascii == 81 then return dfastate_33
-               if c.ascii == 82 then return dfastate_33
-               if c.ascii == 83 then return dfastate_33
-               if c.ascii == 84 then return dfastate_33
-               if c.ascii == 85 then return dfastate_33
-               if c.ascii == 86 then return dfastate_33
-               if c.ascii == 87 then return dfastate_33
-               if c.ascii == 88 then return dfastate_33
-               if c.ascii == 89 then return dfastate_33
-               if c.ascii == 90 then return dfastate_33
-               if c.ascii == 91 then return dfastate_33
-               if c.ascii == 92 then return dfastate_34
-               if c.ascii == 93 then return dfastate_33
-               if c.ascii == 94 then return dfastate_33
-               if c.ascii == 95 then return dfastate_33
-               if c.ascii == 96 then return dfastate_33
-               if c.ascii == 97 then return dfastate_33
-               if c.ascii == 98 then return dfastate_33
-               if c.ascii == 99 then return dfastate_33
-               if c.ascii == 100 then return dfastate_33
-               if c.ascii == 101 then return dfastate_33
-               if c.ascii == 102 then return dfastate_33
-               if c.ascii == 103 then return dfastate_33
-               if c.ascii == 104 then return dfastate_33
-               if c.ascii == 105 then return dfastate_33
-               if c.ascii == 106 then return dfastate_33
-               if c.ascii == 107 then return dfastate_33
-               if c.ascii == 108 then return dfastate_33
-               if c.ascii == 109 then return dfastate_33
-               if c.ascii == 110 then return dfastate_33
-               if c.ascii == 111 then return dfastate_33
-               if c.ascii == 112 then return dfastate_33
-               if c.ascii == 113 then return dfastate_33
-               if c.ascii == 114 then return dfastate_33
-               if c.ascii == 115 then return dfastate_33
-               if c.ascii == 116 then return dfastate_33
-               if c.ascii == 117 then return dfastate_33
-               if c.ascii == 118 then return dfastate_33
-               if c.ascii == 119 then return dfastate_33
-               if c.ascii == 120 then return dfastate_33
-               if c.ascii == 121 then return dfastate_33
-               if c.ascii == 122 then return dfastate_33
-               if c.ascii == 123 then return dfastate_33
-               if c.ascii == 124 then return dfastate_33
-               if c.ascii == 125 then return dfastate_33
-               if c.ascii == 126 then return dfastate_33
-               return null
-       end
-end
-class DFAState38
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 34 then return dfastate_35
-               if c.ascii == 32 then return dfastate_33
-               if c.ascii == 33 then return dfastate_33
-               if c.ascii == 35 then return dfastate_33
-               if c.ascii == 36 then return dfastate_33
-               if c.ascii == 37 then return dfastate_33
-               if c.ascii == 38 then return dfastate_33
-               if c.ascii == 39 then return dfastate_33
-               if c.ascii == 40 then return dfastate_33
-               if c.ascii == 41 then return dfastate_33
-               if c.ascii == 42 then return dfastate_33
-               if c.ascii == 43 then return dfastate_33
-               if c.ascii == 44 then return dfastate_33
-               if c.ascii == 45 then return dfastate_33
-               if c.ascii == 46 then return dfastate_33
-               if c.ascii == 47 then return dfastate_33
-               if c.ascii == 48 then return dfastate_33
-               if c.ascii == 49 then return dfastate_33
-               if c.ascii == 50 then return dfastate_33
-               if c.ascii == 51 then return dfastate_33
-               if c.ascii == 52 then return dfastate_33
-               if c.ascii == 53 then return dfastate_33
-               if c.ascii == 54 then return dfastate_33
-               if c.ascii == 55 then return dfastate_33
-               if c.ascii == 56 then return dfastate_33
-               if c.ascii == 57 then return dfastate_33
-               if c.ascii == 58 then return dfastate_33
-               if c.ascii == 59 then return dfastate_33
-               if c.ascii == 60 then return dfastate_33
-               if c.ascii == 61 then return dfastate_33
-               if c.ascii == 62 then return dfastate_33
-               if c.ascii == 63 then return dfastate_33
-               if c.ascii == 64 then return dfastate_33
-               if c.ascii == 65 then return dfastate_33
-               if c.ascii == 66 then return dfastate_33
-               if c.ascii == 67 then return dfastate_33
-               if c.ascii == 68 then return dfastate_33
-               if c.ascii == 69 then return dfastate_33
-               if c.ascii == 70 then return dfastate_33
-               if c.ascii == 71 then return dfastate_33
-               if c.ascii == 72 then return dfastate_33
-               if c.ascii == 73 then return dfastate_33
-               if c.ascii == 74 then return dfastate_33
-               if c.ascii == 75 then return dfastate_33
-               if c.ascii == 76 then return dfastate_33
-               if c.ascii == 77 then return dfastate_33
-               if c.ascii == 78 then return dfastate_33
-               if c.ascii == 79 then return dfastate_33
-               if c.ascii == 80 then return dfastate_33
-               if c.ascii == 81 then return dfastate_33
-               if c.ascii == 82 then return dfastate_33
-               if c.ascii == 83 then return dfastate_33
-               if c.ascii == 84 then return dfastate_33
-               if c.ascii == 85 then return dfastate_33
-               if c.ascii == 86 then return dfastate_33
-               if c.ascii == 87 then return dfastate_33
-               if c.ascii == 88 then return dfastate_33
-               if c.ascii == 89 then return dfastate_33
-               if c.ascii == 90 then return dfastate_33
-               if c.ascii == 91 then return dfastate_33
-               if c.ascii == 92 then return dfastate_39
-               if c.ascii == 93 then return dfastate_33
-               if c.ascii == 94 then return dfastate_33
-               if c.ascii == 95 then return dfastate_33
-               if c.ascii == 96 then return dfastate_33
-               if c.ascii == 97 then return dfastate_33
-               if c.ascii == 98 then return dfastate_33
-               if c.ascii == 99 then return dfastate_33
-               if c.ascii == 100 then return dfastate_33
-               if c.ascii == 101 then return dfastate_33
-               if c.ascii == 102 then return dfastate_33
-               if c.ascii == 103 then return dfastate_33
-               if c.ascii == 104 then return dfastate_33
-               if c.ascii == 105 then return dfastate_33
-               if c.ascii == 106 then return dfastate_33
-               if c.ascii == 107 then return dfastate_33
-               if c.ascii == 108 then return dfastate_33
-               if c.ascii == 109 then return dfastate_33
-               if c.ascii == 110 then return dfastate_33
-               if c.ascii == 111 then return dfastate_33
-               if c.ascii == 112 then return dfastate_33
-               if c.ascii == 113 then return dfastate_33
-               if c.ascii == 114 then return dfastate_33
-               if c.ascii == 115 then return dfastate_33
-               if c.ascii == 116 then return dfastate_33
-               if c.ascii == 117 then return dfastate_33
-               if c.ascii == 118 then return dfastate_33
-               if c.ascii == 119 then return dfastate_33
-               if c.ascii == 120 then return dfastate_33
-               if c.ascii == 121 then return dfastate_33
-               if c.ascii == 122 then return dfastate_33
-               if c.ascii == 123 then return dfastate_33
-               if c.ascii == 124 then return dfastate_33
-               if c.ascii == 125 then return dfastate_33
-               if c.ascii == 126 then return dfastate_33
-               return null
-       end
-end
-class DFAState39
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 34 then return dfastate_40
-               if c.ascii == 32 then return dfastate_36
-               if c.ascii == 33 then return dfastate_36
-               if c.ascii == 35 then return dfastate_36
-               if c.ascii == 36 then return dfastate_36
-               if c.ascii == 37 then return dfastate_36
-               if c.ascii == 38 then return dfastate_36
-               if c.ascii == 39 then return dfastate_36
-               if c.ascii == 40 then return dfastate_36
-               if c.ascii == 41 then return dfastate_36
-               if c.ascii == 42 then return dfastate_36
-               if c.ascii == 43 then return dfastate_36
-               if c.ascii == 44 then return dfastate_36
-               if c.ascii == 45 then return dfastate_36
-               if c.ascii == 46 then return dfastate_36
-               if c.ascii == 47 then return dfastate_36
-               if c.ascii == 48 then return dfastate_36
-               if c.ascii == 49 then return dfastate_36
-               if c.ascii == 50 then return dfastate_36
-               if c.ascii == 51 then return dfastate_36
-               if c.ascii == 52 then return dfastate_36
-               if c.ascii == 53 then return dfastate_36
-               if c.ascii == 54 then return dfastate_36
-               if c.ascii == 55 then return dfastate_36
-               if c.ascii == 56 then return dfastate_36
-               if c.ascii == 57 then return dfastate_36
-               if c.ascii == 58 then return dfastate_36
-               if c.ascii == 59 then return dfastate_36
-               if c.ascii == 60 then return dfastate_36
-               if c.ascii == 61 then return dfastate_36
-               if c.ascii == 62 then return dfastate_36
-               if c.ascii == 63 then return dfastate_36
-               if c.ascii == 64 then return dfastate_36
-               if c.ascii == 65 then return dfastate_36
-               if c.ascii == 66 then return dfastate_36
-               if c.ascii == 67 then return dfastate_36
-               if c.ascii == 68 then return dfastate_36
-               if c.ascii == 69 then return dfastate_36
-               if c.ascii == 70 then return dfastate_36
-               if c.ascii == 71 then return dfastate_36
-               if c.ascii == 72 then return dfastate_36
-               if c.ascii == 73 then return dfastate_36
-               if c.ascii == 74 then return dfastate_36
-               if c.ascii == 75 then return dfastate_36
-               if c.ascii == 76 then return dfastate_36
-               if c.ascii == 77 then return dfastate_36
-               if c.ascii == 78 then return dfastate_36
-               if c.ascii == 79 then return dfastate_36
-               if c.ascii == 80 then return dfastate_36
-               if c.ascii == 81 then return dfastate_36
-               if c.ascii == 82 then return dfastate_36
-               if c.ascii == 83 then return dfastate_36
-               if c.ascii == 84 then return dfastate_36
-               if c.ascii == 85 then return dfastate_36
-               if c.ascii == 86 then return dfastate_36
-               if c.ascii == 87 then return dfastate_36
-               if c.ascii == 88 then return dfastate_36
-               if c.ascii == 89 then return dfastate_36
-               if c.ascii == 90 then return dfastate_36
-               if c.ascii == 91 then return dfastate_36
-               if c.ascii == 92 then return dfastate_41
-               if c.ascii == 93 then return dfastate_36
-               if c.ascii == 94 then return dfastate_36
-               if c.ascii == 95 then return dfastate_36
-               if c.ascii == 96 then return dfastate_36
-               if c.ascii == 97 then return dfastate_36
-               if c.ascii == 98 then return dfastate_36
-               if c.ascii == 99 then return dfastate_36
-               if c.ascii == 100 then return dfastate_36
-               if c.ascii == 101 then return dfastate_36
-               if c.ascii == 102 then return dfastate_36
-               if c.ascii == 103 then return dfastate_36
-               if c.ascii == 104 then return dfastate_36
-               if c.ascii == 105 then return dfastate_36
-               if c.ascii == 106 then return dfastate_36
-               if c.ascii == 107 then return dfastate_36
-               if c.ascii == 108 then return dfastate_36
-               if c.ascii == 109 then return dfastate_36
-               if c.ascii == 110 then return dfastate_36
-               if c.ascii == 111 then return dfastate_36
-               if c.ascii == 112 then return dfastate_36
-               if c.ascii == 113 then return dfastate_36
-               if c.ascii == 114 then return dfastate_36
-               if c.ascii == 115 then return dfastate_36
-               if c.ascii == 116 then return dfastate_36
-               if c.ascii == 117 then return dfastate_36
-               if c.ascii == 118 then return dfastate_36
-               if c.ascii == 119 then return dfastate_36
-               if c.ascii == 120 then return dfastate_36
-               if c.ascii == 121 then return dfastate_36
-               if c.ascii == 122 then return dfastate_36
-               if c.ascii == 123 then return dfastate_36
-               if c.ascii == 124 then return dfastate_36
-               if c.ascii == 125 then return dfastate_36
-               if c.ascii == 126 then return dfastate_36
-               return null
-       end
-end
-class DFAState40
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nstring
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 34 then return dfastate_35
-               if c.ascii == 32 then return dfastate_33
-               if c.ascii == 33 then return dfastate_33
-               if c.ascii == 35 then return dfastate_33
-               if c.ascii == 36 then return dfastate_33
-               if c.ascii == 37 then return dfastate_33
-               if c.ascii == 38 then return dfastate_33
-               if c.ascii == 39 then return dfastate_33
-               if c.ascii == 40 then return dfastate_33
-               if c.ascii == 41 then return dfastate_33
-               if c.ascii == 42 then return dfastate_33
-               if c.ascii == 43 then return dfastate_33
-               if c.ascii == 44 then return dfastate_33
-               if c.ascii == 45 then return dfastate_33
-               if c.ascii == 46 then return dfastate_33
-               if c.ascii == 47 then return dfastate_33
-               if c.ascii == 48 then return dfastate_33
-               if c.ascii == 49 then return dfastate_33
-               if c.ascii == 50 then return dfastate_33
-               if c.ascii == 51 then return dfastate_33
-               if c.ascii == 52 then return dfastate_33
-               if c.ascii == 53 then return dfastate_33
-               if c.ascii == 54 then return dfastate_33
-               if c.ascii == 55 then return dfastate_33
-               if c.ascii == 56 then return dfastate_33
-               if c.ascii == 57 then return dfastate_33
-               if c.ascii == 58 then return dfastate_33
-               if c.ascii == 59 then return dfastate_33
-               if c.ascii == 60 then return dfastate_33
-               if c.ascii == 61 then return dfastate_33
-               if c.ascii == 62 then return dfastate_33
-               if c.ascii == 63 then return dfastate_33
-               if c.ascii == 64 then return dfastate_33
-               if c.ascii == 65 then return dfastate_33
-               if c.ascii == 66 then return dfastate_33
-               if c.ascii == 67 then return dfastate_33
-               if c.ascii == 68 then return dfastate_33
-               if c.ascii == 69 then return dfastate_33
-               if c.ascii == 70 then return dfastate_33
-               if c.ascii == 71 then return dfastate_33
-               if c.ascii == 72 then return dfastate_33
-               if c.ascii == 73 then return dfastate_33
-               if c.ascii == 74 then return dfastate_33
-               if c.ascii == 75 then return dfastate_33
-               if c.ascii == 76 then return dfastate_33
-               if c.ascii == 77 then return dfastate_33
-               if c.ascii == 78 then return dfastate_33
-               if c.ascii == 79 then return dfastate_33
-               if c.ascii == 80 then return dfastate_33
-               if c.ascii == 81 then return dfastate_33
-               if c.ascii == 82 then return dfastate_33
-               if c.ascii == 83 then return dfastate_33
-               if c.ascii == 84 then return dfastate_33
-               if c.ascii == 85 then return dfastate_33
-               if c.ascii == 86 then return dfastate_33
-               if c.ascii == 87 then return dfastate_33
-               if c.ascii == 88 then return dfastate_33
-               if c.ascii == 89 then return dfastate_33
-               if c.ascii == 90 then return dfastate_33
-               if c.ascii == 91 then return dfastate_33
-               if c.ascii == 92 then return dfastate_34
-               if c.ascii == 93 then return dfastate_33
-               if c.ascii == 94 then return dfastate_33
-               if c.ascii == 95 then return dfastate_33
-               if c.ascii == 96 then return dfastate_33
-               if c.ascii == 97 then return dfastate_33
-               if c.ascii == 98 then return dfastate_33
-               if c.ascii == 99 then return dfastate_33
-               if c.ascii == 100 then return dfastate_33
-               if c.ascii == 101 then return dfastate_33
-               if c.ascii == 102 then return dfastate_33
-               if c.ascii == 103 then return dfastate_33
-               if c.ascii == 104 then return dfastate_33
-               if c.ascii == 105 then return dfastate_33
-               if c.ascii == 106 then return dfastate_33
-               if c.ascii == 107 then return dfastate_33
-               if c.ascii == 108 then return dfastate_33
-               if c.ascii == 109 then return dfastate_33
-               if c.ascii == 110 then return dfastate_33
-               if c.ascii == 111 then return dfastate_33
-               if c.ascii == 112 then return dfastate_33
-               if c.ascii == 113 then return dfastate_33
-               if c.ascii == 114 then return dfastate_33
-               if c.ascii == 115 then return dfastate_33
-               if c.ascii == 116 then return dfastate_33
-               if c.ascii == 117 then return dfastate_33
-               if c.ascii == 118 then return dfastate_33
-               if c.ascii == 119 then return dfastate_33
-               if c.ascii == 120 then return dfastate_33
-               if c.ascii == 121 then return dfastate_33
-               if c.ascii == 122 then return dfastate_33
-               if c.ascii == 123 then return dfastate_33
-               if c.ascii == 124 then return dfastate_33
-               if c.ascii == 125 then return dfastate_33
-               if c.ascii == 126 then return dfastate_33
-               return null
-       end
-end
-class DFAState41
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 34 then return dfastate_40
-               if c.ascii == 32 then return dfastate_36
-               if c.ascii == 33 then return dfastate_36
-               if c.ascii == 35 then return dfastate_36
-               if c.ascii == 36 then return dfastate_36
-               if c.ascii == 37 then return dfastate_36
-               if c.ascii == 38 then return dfastate_36
-               if c.ascii == 39 then return dfastate_36
-               if c.ascii == 40 then return dfastate_36
-               if c.ascii == 41 then return dfastate_36
-               if c.ascii == 42 then return dfastate_36
-               if c.ascii == 43 then return dfastate_36
-               if c.ascii == 44 then return dfastate_36
-               if c.ascii == 45 then return dfastate_36
-               if c.ascii == 46 then return dfastate_36
-               if c.ascii == 47 then return dfastate_36
-               if c.ascii == 48 then return dfastate_36
-               if c.ascii == 49 then return dfastate_36
-               if c.ascii == 50 then return dfastate_36
-               if c.ascii == 51 then return dfastate_36
-               if c.ascii == 52 then return dfastate_36
-               if c.ascii == 53 then return dfastate_36
-               if c.ascii == 54 then return dfastate_36
-               if c.ascii == 55 then return dfastate_36
-               if c.ascii == 56 then return dfastate_36
-               if c.ascii == 57 then return dfastate_36
-               if c.ascii == 58 then return dfastate_36
-               if c.ascii == 59 then return dfastate_36
-               if c.ascii == 60 then return dfastate_36
-               if c.ascii == 61 then return dfastate_36
-               if c.ascii == 62 then return dfastate_36
-               if c.ascii == 63 then return dfastate_36
-               if c.ascii == 64 then return dfastate_36
-               if c.ascii == 65 then return dfastate_36
-               if c.ascii == 66 then return dfastate_36
-               if c.ascii == 67 then return dfastate_36
-               if c.ascii == 68 then return dfastate_36
-               if c.ascii == 69 then return dfastate_36
-               if c.ascii == 70 then return dfastate_36
-               if c.ascii == 71 then return dfastate_36
-               if c.ascii == 72 then return dfastate_36
-               if c.ascii == 73 then return dfastate_36
-               if c.ascii == 74 then return dfastate_36
-               if c.ascii == 75 then return dfastate_36
-               if c.ascii == 76 then return dfastate_36
-               if c.ascii == 77 then return dfastate_36
-               if c.ascii == 78 then return dfastate_36
-               if c.ascii == 79 then return dfastate_36
-               if c.ascii == 80 then return dfastate_36
-               if c.ascii == 81 then return dfastate_36
-               if c.ascii == 82 then return dfastate_36
-               if c.ascii == 83 then return dfastate_36
-               if c.ascii == 84 then return dfastate_36
-               if c.ascii == 85 then return dfastate_36
-               if c.ascii == 86 then return dfastate_36
-               if c.ascii == 87 then return dfastate_36
-               if c.ascii == 88 then return dfastate_36
-               if c.ascii == 89 then return dfastate_36
-               if c.ascii == 90 then return dfastate_36
-               if c.ascii == 91 then return dfastate_36
-               if c.ascii == 92 then return dfastate_41
-               if c.ascii == 93 then return dfastate_36
-               if c.ascii == 94 then return dfastate_36
-               if c.ascii == 95 then return dfastate_36
-               if c.ascii == 96 then return dfastate_36
-               if c.ascii == 97 then return dfastate_36
-               if c.ascii == 98 then return dfastate_36
-               if c.ascii == 99 then return dfastate_36
-               if c.ascii == 100 then return dfastate_36
-               if c.ascii == 101 then return dfastate_36
-               if c.ascii == 102 then return dfastate_36
-               if c.ascii == 103 then return dfastate_36
-               if c.ascii == 104 then return dfastate_36
-               if c.ascii == 105 then return dfastate_36
-               if c.ascii == 106 then return dfastate_36
-               if c.ascii == 107 then return dfastate_36
-               if c.ascii == 108 then return dfastate_36
-               if c.ascii == 109 then return dfastate_36
-               if c.ascii == 110 then return dfastate_36
-               if c.ascii == 111 then return dfastate_36
-               if c.ascii == 112 then return dfastate_36
-               if c.ascii == 113 then return dfastate_36
-               if c.ascii == 114 then return dfastate_36
-               if c.ascii == 115 then return dfastate_36
-               if c.ascii == 116 then return dfastate_36
-               if c.ascii == 117 then return dfastate_36
-               if c.ascii == 118 then return dfastate_36
-               if c.ascii == 119 then return dfastate_36
-               if c.ascii == 120 then return dfastate_36
-               if c.ascii == 121 then return dfastate_36
-               if c.ascii == 122 then return dfastate_36
-               if c.ascii == 123 then return dfastate_36
-               if c.ascii == 124 then return dfastate_36
-               if c.ascii == 125 then return dfastate_36
-               if c.ascii == 126 then return dfastate_36
-               return null
-       end
-end
-class DFAState42
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 34 then return dfastate_35
-               if c.ascii == 32 then return dfastate_33
-               if c.ascii == 33 then return dfastate_33
-               if c.ascii == 35 then return dfastate_33
-               if c.ascii == 36 then return dfastate_33
-               if c.ascii == 37 then return dfastate_33
-               if c.ascii == 38 then return dfastate_33
-               if c.ascii == 39 then return dfastate_33
-               if c.ascii == 40 then return dfastate_33
-               if c.ascii == 41 then return dfastate_33
-               if c.ascii == 42 then return dfastate_33
-               if c.ascii == 43 then return dfastate_33
-               if c.ascii == 44 then return dfastate_33
-               if c.ascii == 45 then return dfastate_33
-               if c.ascii == 46 then return dfastate_33
-               if c.ascii == 47 then return dfastate_33
-               if c.ascii == 48 then return dfastate_33
-               if c.ascii == 49 then return dfastate_33
-               if c.ascii == 50 then return dfastate_33
-               if c.ascii == 51 then return dfastate_33
-               if c.ascii == 52 then return dfastate_33
-               if c.ascii == 53 then return dfastate_33
-               if c.ascii == 54 then return dfastate_33
-               if c.ascii == 55 then return dfastate_33
-               if c.ascii == 56 then return dfastate_33
-               if c.ascii == 57 then return dfastate_33
-               if c.ascii == 58 then return dfastate_33
-               if c.ascii == 59 then return dfastate_33
-               if c.ascii == 60 then return dfastate_33
-               if c.ascii == 61 then return dfastate_33
-               if c.ascii == 62 then return dfastate_33
-               if c.ascii == 63 then return dfastate_33
-               if c.ascii == 64 then return dfastate_33
-               if c.ascii == 65 then return dfastate_33
-               if c.ascii == 66 then return dfastate_33
-               if c.ascii == 67 then return dfastate_33
-               if c.ascii == 68 then return dfastate_33
-               if c.ascii == 69 then return dfastate_33
-               if c.ascii == 70 then return dfastate_33
-               if c.ascii == 71 then return dfastate_33
-               if c.ascii == 72 then return dfastate_33
-               if c.ascii == 73 then return dfastate_33
-               if c.ascii == 74 then return dfastate_33
-               if c.ascii == 75 then return dfastate_33
-               if c.ascii == 76 then return dfastate_33
-               if c.ascii == 77 then return dfastate_33
-               if c.ascii == 78 then return dfastate_33
-               if c.ascii == 79 then return dfastate_33
-               if c.ascii == 80 then return dfastate_33
-               if c.ascii == 81 then return dfastate_33
-               if c.ascii == 82 then return dfastate_33
-               if c.ascii == 83 then return dfastate_33
-               if c.ascii == 84 then return dfastate_33
-               if c.ascii == 85 then return dfastate_33
-               if c.ascii == 86 then return dfastate_33
-               if c.ascii == 87 then return dfastate_33
-               if c.ascii == 88 then return dfastate_33
-               if c.ascii == 89 then return dfastate_33
-               if c.ascii == 90 then return dfastate_33
-               if c.ascii == 91 then return dfastate_33
-               if c.ascii == 92 then return dfastate_39
-               if c.ascii == 93 then return dfastate_33
-               if c.ascii == 94 then return dfastate_33
-               if c.ascii == 95 then return dfastate_33
-               if c.ascii == 96 then return dfastate_33
-               if c.ascii == 97 then return dfastate_33
-               if c.ascii == 98 then return dfastate_33
-               if c.ascii == 99 then return dfastate_33
-               if c.ascii == 100 then return dfastate_33
-               if c.ascii == 101 then return dfastate_33
-               if c.ascii == 102 then return dfastate_33
-               if c.ascii == 103 then return dfastate_33
-               if c.ascii == 104 then return dfastate_33
-               if c.ascii == 105 then return dfastate_33
-               if c.ascii == 106 then return dfastate_33
-               if c.ascii == 107 then return dfastate_33
-               if c.ascii == 108 then return dfastate_33
-               if c.ascii == 109 then return dfastate_33
-               if c.ascii == 110 then return dfastate_33
-               if c.ascii == 111 then return dfastate_33
-               if c.ascii == 112 then return dfastate_33
-               if c.ascii == 113 then return dfastate_33
-               if c.ascii == 114 then return dfastate_33
-               if c.ascii == 115 then return dfastate_33
-               if c.ascii == 116 then return dfastate_33
-               if c.ascii == 117 then return dfastate_33
-               if c.ascii == 118 then return dfastate_33
-               if c.ascii == 119 then return dfastate_33
-               if c.ascii == 120 then return dfastate_33
-               if c.ascii == 121 then return dfastate_33
-               if c.ascii == 122 then return dfastate_33
-               if c.ascii == 123 then return dfastate_33
-               if c.ascii == 124 then return dfastate_33
-               if c.ascii == 125 then return dfastate_33
-               if c.ascii == 126 then return dfastate_33
-               return null
-       end
-end
-class DFAState43
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 113 then return dfastate_95
-               if c.ascii == 81 then return dfastate_96
-               if c.ascii == 110 then return dfastate_97
-               if c.ascii == 78 then return dfastate_98
-               return null
-       end
-end
-class DFAState44
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 113 then return dfastate_95
-               if c.ascii == 81 then return dfastate_96
-               if c.ascii == 110 then return dfastate_97
-               if c.ascii == 78 then return dfastate_98
-               return null
-       end
-end
-class DFAState45
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 117 then return dfastate_75
-               if c.ascii == 85 then return dfastate_76
-               if c.ascii == 108 then return dfastate_77
-               if c.ascii == 76 then return dfastate_78
-               if c.ascii == 121 then return dfastate_79
-               if c.ascii == 89 then return dfastate_80
-               return null
-       end
-end
-class DFAState46
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 117 then return dfastate_75
-               if c.ascii == 85 then return dfastate_76
-               if c.ascii == 108 then return dfastate_77
-               if c.ascii == 76 then return dfastate_78
-               if c.ascii == 121 then return dfastate_79
-               if c.ascii == 89 then return dfastate_80
-               return null
-       end
-end
-class DFAState47
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 111 then return dfastate_69
-               if c.ascii == 79 then return dfastate_70
-               return null
-       end
-end
-class DFAState48
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 111 then return dfastate_69
-               if c.ascii == 79 then return dfastate_70
-               return null
-       end
-end
-class DFAState49
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 100 then return dfastate_51
-               if c.ascii == 68 then return dfastate_52
-               if c.ascii == 115 then return dfastate_53
-               if c.ascii == 83 then return dfastate_54
-               return null
-       end
-end
-class DFAState50
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 100 then return dfastate_51
-               if c.ascii == 68 then return dfastate_52
-               if c.ascii == 115 then return dfastate_53
-               if c.ascii == 83 then return dfastate_54
-               return null
-       end
-end
-class DFAState51
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 100 then return dfastate_61
-               if c.ascii == 68 then return dfastate_62
-               return null
-       end
-end
-class DFAState52
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 100 then return dfastate_61
-               if c.ascii == 68 then return dfastate_62
-               return null
-       end
-end
-class DFAState53
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 99 then return dfastate_55
-               if c.ascii == 67 then return dfastate_56
-               return null
-       end
-end
-class DFAState54
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 99 then return dfastate_55
-               if c.ascii == 67 then return dfastate_56
-               return null
-       end
-end
-class DFAState55
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 105 then return dfastate_57
-               if c.ascii == 73 then return dfastate_58
-               return null
-       end
-end
-class DFAState56
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 105 then return dfastate_57
-               if c.ascii == 73 then return dfastate_58
-               return null
-       end
-end
-class DFAState57
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 105 then return dfastate_59
-               if c.ascii == 73 then return dfastate_60
-               return null
-       end
-end
-class DFAState58
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 105 then return dfastate_59
-               if c.ascii == 73 then return dfastate_60
-               return null
-       end
-end
-class DFAState59
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ntk_ascii
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState60
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ntk_ascii
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState61
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 114 then return dfastate_63
-               if c.ascii == 82 then return dfastate_64
-               return null
-       end
-end
-class DFAState62
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 114 then return dfastate_63
-               if c.ascii == 82 then return dfastate_64
-               return null
-       end
-end
-class DFAState63
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 115 then return dfastate_65
-               if c.ascii == 83 then return dfastate_66
-               return null
-       end
-end
-class DFAState64
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 115 then return dfastate_65
-               if c.ascii == 83 then return dfastate_66
-               return null
-       end
-end
-class DFAState65
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 115 then return dfastate_67
-               if c.ascii == 83 then return dfastate_68
-               return null
-       end
-end
-class DFAState66
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 115 then return dfastate_67
-               if c.ascii == 83 then return dfastate_68
-               return null
-       end
-end
-class DFAState67
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ntk_addrss
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState68
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ntk_addrss
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState69
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 114 then return dfastate_71
-               if c.ascii == 82 then return dfastate_72
-               return null
-       end
-end
-class DFAState70
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 114 then return dfastate_71
-               if c.ascii == 82 then return dfastate_72
-               return null
-       end
-end
-class DFAState71
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 100 then return dfastate_73
-               if c.ascii == 68 then return dfastate_74
-               return null
-       end
-end
-class DFAState72
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 100 then return dfastate_73
-               if c.ascii == 68 then return dfastate_74
-               return null
-       end
-end
-class DFAState73
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ntk_word
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState74
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ntk_word
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState75
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 114 then return dfastate_91
-               if c.ascii == 82 then return dfastate_92
-               return null
-       end
-end
-class DFAState76
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 114 then return dfastate_91
-               if c.ascii == 82 then return dfastate_92
-               return null
-       end
-end
-class DFAState77
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 111 then return dfastate_85
-               if c.ascii == 79 then return dfastate_86
-               return null
-       end
-end
-class DFAState78
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 111 then return dfastate_85
-               if c.ascii == 79 then return dfastate_86
-               return null
-       end
-end
-class DFAState79
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 116 then return dfastate_81
-               if c.ascii == 84 then return dfastate_82
-               return null
-       end
-end
-class DFAState80
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 116 then return dfastate_81
-               if c.ascii == 84 then return dfastate_82
-               return null
-       end
-end
-class DFAState81
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 101 then return dfastate_83
-               if c.ascii == 69 then return dfastate_84
-               return null
-       end
-end
-class DFAState82
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 101 then return dfastate_83
-               if c.ascii == 69 then return dfastate_84
-               return null
-       end
-end
-class DFAState83
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ntk_byte
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState84
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ntk_byte
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState85
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 99 then return dfastate_87
-               if c.ascii == 67 then return dfastate_88
-               return null
-       end
-end
-class DFAState86
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 99 then return dfastate_87
-               if c.ascii == 67 then return dfastate_88
-               return null
-       end
-end
-class DFAState87
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 107 then return dfastate_89
-               if c.ascii == 75 then return dfastate_90
-               return null
-       end
-end
-class DFAState88
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 107 then return dfastate_89
-               if c.ascii == 75 then return dfastate_90
-               return null
-       end
-end
-class DFAState89
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ntk_block
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState90
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ntk_block
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState91
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 110 then return dfastate_93
-               if c.ascii == 78 then return dfastate_94
-               return null
-       end
-end
-class DFAState92
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 110 then return dfastate_93
-               if c.ascii == 78 then return dfastate_94
-               return null
-       end
-end
-class DFAState93
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ntk_burn
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState94
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ntk_burn
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState95
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 117 then return dfastate_105
-               if c.ascii == 85 then return dfastate_106
-               return null
-       end
-end
-class DFAState96
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 117 then return dfastate_105
-               if c.ascii == 85 then return dfastate_106
-               return null
-       end
-end
-class DFAState97
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 100 then return dfastate_99
-               if c.ascii == 68 then return dfastate_100
-               return null
-       end
-end
-class DFAState98
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 100 then return dfastate_99
-               if c.ascii == 68 then return dfastate_100
-               return null
-       end
-end
-class DFAState99
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nend_block
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 32 then return dfastate_101
-               if c.ascii == 33 then return dfastate_101
-               if c.ascii == 34 then return dfastate_101
-               if c.ascii == 35 then return dfastate_101
-               if c.ascii == 36 then return dfastate_101
-               if c.ascii == 37 then return dfastate_101
-               if c.ascii == 38 then return dfastate_101
-               if c.ascii == 39 then return dfastate_101
-               if c.ascii == 40 then return dfastate_101
-               if c.ascii == 41 then return dfastate_101
-               if c.ascii == 42 then return dfastate_101
-               if c.ascii == 43 then return dfastate_101
-               if c.ascii == 44 then return dfastate_101
-               if c.ascii == 45 then return dfastate_101
-               if c.ascii == 46 then return dfastate_101
-               if c.ascii == 47 then return dfastate_101
-               if c.ascii == 48 then return dfastate_101
-               if c.ascii == 49 then return dfastate_101
-               if c.ascii == 50 then return dfastate_101
-               if c.ascii == 51 then return dfastate_101
-               if c.ascii == 52 then return dfastate_101
-               if c.ascii == 53 then return dfastate_101
-               if c.ascii == 54 then return dfastate_101
-               if c.ascii == 55 then return dfastate_101
-               if c.ascii == 56 then return dfastate_101
-               if c.ascii == 57 then return dfastate_101
-               if c.ascii == 58 then return dfastate_101
-               if c.ascii == 59 then return dfastate_101
-               if c.ascii == 60 then return dfastate_101
-               if c.ascii == 61 then return dfastate_101
-               if c.ascii == 62 then return dfastate_101
-               if c.ascii == 63 then return dfastate_101
-               if c.ascii == 64 then return dfastate_101
-               if c.ascii == 65 then return dfastate_101
-               if c.ascii == 66 then return dfastate_101
-               if c.ascii == 67 then return dfastate_101
-               if c.ascii == 68 then return dfastate_101
-               if c.ascii == 69 then return dfastate_101
-               if c.ascii == 70 then return dfastate_101
-               if c.ascii == 71 then return dfastate_101
-               if c.ascii == 72 then return dfastate_101
-               if c.ascii == 73 then return dfastate_101
-               if c.ascii == 74 then return dfastate_101
-               if c.ascii == 75 then return dfastate_101
-               if c.ascii == 76 then return dfastate_101
-               if c.ascii == 77 then return dfastate_101
-               if c.ascii == 78 then return dfastate_101
-               if c.ascii == 79 then return dfastate_101
-               if c.ascii == 80 then return dfastate_101
-               if c.ascii == 81 then return dfastate_101
-               if c.ascii == 82 then return dfastate_101
-               if c.ascii == 83 then return dfastate_101
-               if c.ascii == 84 then return dfastate_101
-               if c.ascii == 85 then return dfastate_101
-               if c.ascii == 86 then return dfastate_101
-               if c.ascii == 87 then return dfastate_101
-               if c.ascii == 88 then return dfastate_101
-               if c.ascii == 89 then return dfastate_101
-               if c.ascii == 90 then return dfastate_101
-               if c.ascii == 91 then return dfastate_101
-               if c.ascii == 92 then return dfastate_101
-               if c.ascii == 93 then return dfastate_101
-               if c.ascii == 94 then return dfastate_101
-               if c.ascii == 95 then return dfastate_101
-               if c.ascii == 96 then return dfastate_101
-               if c.ascii == 97 then return dfastate_101
-               if c.ascii == 98 then return dfastate_101
-               if c.ascii == 99 then return dfastate_101
-               if c.ascii == 100 then return dfastate_101
-               if c.ascii == 101 then return dfastate_101
-               if c.ascii == 102 then return dfastate_101
-               if c.ascii == 103 then return dfastate_101
-               if c.ascii == 104 then return dfastate_101
-               if c.ascii == 105 then return dfastate_101
-               if c.ascii == 106 then return dfastate_101
-               if c.ascii == 107 then return dfastate_101
-               if c.ascii == 108 then return dfastate_101
-               if c.ascii == 109 then return dfastate_101
-               if c.ascii == 110 then return dfastate_101
-               if c.ascii == 111 then return dfastate_101
-               if c.ascii == 112 then return dfastate_101
-               if c.ascii == 113 then return dfastate_101
-               if c.ascii == 114 then return dfastate_101
-               if c.ascii == 115 then return dfastate_101
-               if c.ascii == 116 then return dfastate_101
-               if c.ascii == 117 then return dfastate_101
-               if c.ascii == 118 then return dfastate_101
-               if c.ascii == 119 then return dfastate_101
-               if c.ascii == 120 then return dfastate_101
-               if c.ascii == 121 then return dfastate_101
-               if c.ascii == 122 then return dfastate_101
-               if c.ascii == 123 then return dfastate_101
-               if c.ascii == 124 then return dfastate_101
-               if c.ascii == 125 then return dfastate_101
-               if c.ascii == 126 then return dfastate_101
-               if c.ascii == 13 then return dfastate_102
-               if c.ascii == 10 then return dfastate_103
-               return null
-       end
-end
-class DFAState100
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nend_block
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 32 then return dfastate_101
-               if c.ascii == 33 then return dfastate_101
-               if c.ascii == 34 then return dfastate_101
-               if c.ascii == 35 then return dfastate_101
-               if c.ascii == 36 then return dfastate_101
-               if c.ascii == 37 then return dfastate_101
-               if c.ascii == 38 then return dfastate_101
-               if c.ascii == 39 then return dfastate_101
-               if c.ascii == 40 then return dfastate_101
-               if c.ascii == 41 then return dfastate_101
-               if c.ascii == 42 then return dfastate_101
-               if c.ascii == 43 then return dfastate_101
-               if c.ascii == 44 then return dfastate_101
-               if c.ascii == 45 then return dfastate_101
-               if c.ascii == 46 then return dfastate_101
-               if c.ascii == 47 then return dfastate_101
-               if c.ascii == 48 then return dfastate_101
-               if c.ascii == 49 then return dfastate_101
-               if c.ascii == 50 then return dfastate_101
-               if c.ascii == 51 then return dfastate_101
-               if c.ascii == 52 then return dfastate_101
-               if c.ascii == 53 then return dfastate_101
-               if c.ascii == 54 then return dfastate_101
-               if c.ascii == 55 then return dfastate_101
-               if c.ascii == 56 then return dfastate_101
-               if c.ascii == 57 then return dfastate_101
-               if c.ascii == 58 then return dfastate_101
-               if c.ascii == 59 then return dfastate_101
-               if c.ascii == 60 then return dfastate_101
-               if c.ascii == 61 then return dfastate_101
-               if c.ascii == 62 then return dfastate_101
-               if c.ascii == 63 then return dfastate_101
-               if c.ascii == 64 then return dfastate_101
-               if c.ascii == 65 then return dfastate_101
-               if c.ascii == 66 then return dfastate_101
-               if c.ascii == 67 then return dfastate_101
-               if c.ascii == 68 then return dfastate_101
-               if c.ascii == 69 then return dfastate_101
-               if c.ascii == 70 then return dfastate_101
-               if c.ascii == 71 then return dfastate_101
-               if c.ascii == 72 then return dfastate_101
-               if c.ascii == 73 then return dfastate_101
-               if c.ascii == 74 then return dfastate_101
-               if c.ascii == 75 then return dfastate_101
-               if c.ascii == 76 then return dfastate_101
-               if c.ascii == 77 then return dfastate_101
-               if c.ascii == 78 then return dfastate_101
-               if c.ascii == 79 then return dfastate_101
-               if c.ascii == 80 then return dfastate_101
-               if c.ascii == 81 then return dfastate_101
-               if c.ascii == 82 then return dfastate_101
-               if c.ascii == 83 then return dfastate_101
-               if c.ascii == 84 then return dfastate_101
-               if c.ascii == 85 then return dfastate_101
-               if c.ascii == 86 then return dfastate_101
-               if c.ascii == 87 then return dfastate_101
-               if c.ascii == 88 then return dfastate_101
-               if c.ascii == 89 then return dfastate_101
-               if c.ascii == 90 then return dfastate_101
-               if c.ascii == 91 then return dfastate_101
-               if c.ascii == 92 then return dfastate_101
-               if c.ascii == 93 then return dfastate_101
-               if c.ascii == 94 then return dfastate_101
-               if c.ascii == 95 then return dfastate_101
-               if c.ascii == 96 then return dfastate_101
-               if c.ascii == 97 then return dfastate_101
-               if c.ascii == 98 then return dfastate_101
-               if c.ascii == 99 then return dfastate_101
-               if c.ascii == 100 then return dfastate_101
-               if c.ascii == 101 then return dfastate_101
-               if c.ascii == 102 then return dfastate_101
-               if c.ascii == 103 then return dfastate_101
-               if c.ascii == 104 then return dfastate_101
-               if c.ascii == 105 then return dfastate_101
-               if c.ascii == 106 then return dfastate_101
-               if c.ascii == 107 then return dfastate_101
-               if c.ascii == 108 then return dfastate_101
-               if c.ascii == 109 then return dfastate_101
-               if c.ascii == 110 then return dfastate_101
-               if c.ascii == 111 then return dfastate_101
-               if c.ascii == 112 then return dfastate_101
-               if c.ascii == 113 then return dfastate_101
-               if c.ascii == 114 then return dfastate_101
-               if c.ascii == 115 then return dfastate_101
-               if c.ascii == 116 then return dfastate_101
-               if c.ascii == 117 then return dfastate_101
-               if c.ascii == 118 then return dfastate_101
-               if c.ascii == 119 then return dfastate_101
-               if c.ascii == 120 then return dfastate_101
-               if c.ascii == 121 then return dfastate_101
-               if c.ascii == 122 then return dfastate_101
-               if c.ascii == 123 then return dfastate_101
-               if c.ascii == 124 then return dfastate_101
-               if c.ascii == 125 then return dfastate_101
-               if c.ascii == 126 then return dfastate_101
-               if c.ascii == 13 then return dfastate_102
-               if c.ascii == 10 then return dfastate_103
-               return null
-       end
-end
-class DFAState101
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nend_block
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 32 then return dfastate_101
-               if c.ascii == 33 then return dfastate_101
-               if c.ascii == 34 then return dfastate_101
-               if c.ascii == 35 then return dfastate_101
-               if c.ascii == 36 then return dfastate_101
-               if c.ascii == 37 then return dfastate_101
-               if c.ascii == 38 then return dfastate_101
-               if c.ascii == 39 then return dfastate_101
-               if c.ascii == 40 then return dfastate_101
-               if c.ascii == 41 then return dfastate_101
-               if c.ascii == 42 then return dfastate_101
-               if c.ascii == 43 then return dfastate_101
-               if c.ascii == 44 then return dfastate_101
-               if c.ascii == 45 then return dfastate_101
-               if c.ascii == 46 then return dfastate_101
-               if c.ascii == 47 then return dfastate_101
-               if c.ascii == 48 then return dfastate_101
-               if c.ascii == 49 then return dfastate_101
-               if c.ascii == 50 then return dfastate_101
-               if c.ascii == 51 then return dfastate_101
-               if c.ascii == 52 then return dfastate_101
-               if c.ascii == 53 then return dfastate_101
-               if c.ascii == 54 then return dfastate_101
-               if c.ascii == 55 then return dfastate_101
-               if c.ascii == 56 then return dfastate_101
-               if c.ascii == 57 then return dfastate_101
-               if c.ascii == 58 then return dfastate_101
-               if c.ascii == 59 then return dfastate_101
-               if c.ascii == 60 then return dfastate_101
-               if c.ascii == 61 then return dfastate_101
-               if c.ascii == 62 then return dfastate_101
-               if c.ascii == 63 then return dfastate_101
-               if c.ascii == 64 then return dfastate_101
-               if c.ascii == 65 then return dfastate_101
-               if c.ascii == 66 then return dfastate_101
-               if c.ascii == 67 then return dfastate_101
-               if c.ascii == 68 then return dfastate_101
-               if c.ascii == 69 then return dfastate_101
-               if c.ascii == 70 then return dfastate_101
-               if c.ascii == 71 then return dfastate_101
-               if c.ascii == 72 then return dfastate_101
-               if c.ascii == 73 then return dfastate_101
-               if c.ascii == 74 then return dfastate_101
-               if c.ascii == 75 then return dfastate_101
-               if c.ascii == 76 then return dfastate_101
-               if c.ascii == 77 then return dfastate_101
-               if c.ascii == 78 then return dfastate_101
-               if c.ascii == 79 then return dfastate_101
-               if c.ascii == 80 then return dfastate_101
-               if c.ascii == 81 then return dfastate_101
-               if c.ascii == 82 then return dfastate_101
-               if c.ascii == 83 then return dfastate_101
-               if c.ascii == 84 then return dfastate_101
-               if c.ascii == 85 then return dfastate_101
-               if c.ascii == 86 then return dfastate_101
-               if c.ascii == 87 then return dfastate_101
-               if c.ascii == 88 then return dfastate_101
-               if c.ascii == 89 then return dfastate_101
-               if c.ascii == 90 then return dfastate_101
-               if c.ascii == 91 then return dfastate_101
-               if c.ascii == 92 then return dfastate_101
-               if c.ascii == 93 then return dfastate_101
-               if c.ascii == 94 then return dfastate_101
-               if c.ascii == 95 then return dfastate_101
-               if c.ascii == 96 then return dfastate_101
-               if c.ascii == 97 then return dfastate_101
-               if c.ascii == 98 then return dfastate_101
-               if c.ascii == 99 then return dfastate_101
-               if c.ascii == 100 then return dfastate_101
-               if c.ascii == 101 then return dfastate_101
-               if c.ascii == 102 then return dfastate_101
-               if c.ascii == 103 then return dfastate_101
-               if c.ascii == 104 then return dfastate_101
-               if c.ascii == 105 then return dfastate_101
-               if c.ascii == 106 then return dfastate_101
-               if c.ascii == 107 then return dfastate_101
-               if c.ascii == 108 then return dfastate_101
-               if c.ascii == 109 then return dfastate_101
-               if c.ascii == 110 then return dfastate_101
-               if c.ascii == 111 then return dfastate_101
-               if c.ascii == 112 then return dfastate_101
-               if c.ascii == 113 then return dfastate_101
-               if c.ascii == 114 then return dfastate_101
-               if c.ascii == 115 then return dfastate_101
-               if c.ascii == 116 then return dfastate_101
-               if c.ascii == 117 then return dfastate_101
-               if c.ascii == 118 then return dfastate_101
-               if c.ascii == 119 then return dfastate_101
-               if c.ascii == 120 then return dfastate_101
-               if c.ascii == 121 then return dfastate_101
-               if c.ascii == 122 then return dfastate_101
-               if c.ascii == 123 then return dfastate_101
-               if c.ascii == 124 then return dfastate_101
-               if c.ascii == 125 then return dfastate_101
-               if c.ascii == 126 then return dfastate_101
-               if c.ascii == 13 then return dfastate_102
-               if c.ascii == 10 then return dfastate_103
-               return null
-       end
-end
-class DFAState102
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nend_block
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 32 then return dfastate_101
-               if c.ascii == 33 then return dfastate_101
-               if c.ascii == 34 then return dfastate_101
-               if c.ascii == 35 then return dfastate_101
-               if c.ascii == 36 then return dfastate_101
-               if c.ascii == 37 then return dfastate_101
-               if c.ascii == 38 then return dfastate_101
-               if c.ascii == 39 then return dfastate_101
-               if c.ascii == 40 then return dfastate_101
-               if c.ascii == 41 then return dfastate_101
-               if c.ascii == 42 then return dfastate_101
-               if c.ascii == 43 then return dfastate_101
-               if c.ascii == 44 then return dfastate_101
-               if c.ascii == 45 then return dfastate_101
-               if c.ascii == 46 then return dfastate_101
-               if c.ascii == 47 then return dfastate_101
-               if c.ascii == 48 then return dfastate_101
-               if c.ascii == 49 then return dfastate_101
-               if c.ascii == 50 then return dfastate_101
-               if c.ascii == 51 then return dfastate_101
-               if c.ascii == 52 then return dfastate_101
-               if c.ascii == 53 then return dfastate_101
-               if c.ascii == 54 then return dfastate_101
-               if c.ascii == 55 then return dfastate_101
-               if c.ascii == 56 then return dfastate_101
-               if c.ascii == 57 then return dfastate_101
-               if c.ascii == 58 then return dfastate_101
-               if c.ascii == 59 then return dfastate_101
-               if c.ascii == 60 then return dfastate_101
-               if c.ascii == 61 then return dfastate_101
-               if c.ascii == 62 then return dfastate_101
-               if c.ascii == 63 then return dfastate_101
-               if c.ascii == 64 then return dfastate_101
-               if c.ascii == 65 then return dfastate_101
-               if c.ascii == 66 then return dfastate_101
-               if c.ascii == 67 then return dfastate_101
-               if c.ascii == 68 then return dfastate_101
-               if c.ascii == 69 then return dfastate_101
-               if c.ascii == 70 then return dfastate_101
-               if c.ascii == 71 then return dfastate_101
-               if c.ascii == 72 then return dfastate_101
-               if c.ascii == 73 then return dfastate_101
-               if c.ascii == 74 then return dfastate_101
-               if c.ascii == 75 then return dfastate_101
-               if c.ascii == 76 then return dfastate_101
-               if c.ascii == 77 then return dfastate_101
-               if c.ascii == 78 then return dfastate_101
-               if c.ascii == 79 then return dfastate_101
-               if c.ascii == 80 then return dfastate_101
-               if c.ascii == 81 then return dfastate_101
-               if c.ascii == 82 then return dfastate_101
-               if c.ascii == 83 then return dfastate_101
-               if c.ascii == 84 then return dfastate_101
-               if c.ascii == 85 then return dfastate_101
-               if c.ascii == 86 then return dfastate_101
-               if c.ascii == 87 then return dfastate_101
-               if c.ascii == 88 then return dfastate_101
-               if c.ascii == 89 then return dfastate_101
-               if c.ascii == 90 then return dfastate_101
-               if c.ascii == 91 then return dfastate_101
-               if c.ascii == 92 then return dfastate_101
-               if c.ascii == 93 then return dfastate_101
-               if c.ascii == 94 then return dfastate_101
-               if c.ascii == 95 then return dfastate_101
-               if c.ascii == 96 then return dfastate_101
-               if c.ascii == 97 then return dfastate_101
-               if c.ascii == 98 then return dfastate_101
-               if c.ascii == 99 then return dfastate_101
-               if c.ascii == 100 then return dfastate_101
-               if c.ascii == 101 then return dfastate_101
-               if c.ascii == 102 then return dfastate_101
-               if c.ascii == 103 then return dfastate_101
-               if c.ascii == 104 then return dfastate_101
-               if c.ascii == 105 then return dfastate_101
-               if c.ascii == 106 then return dfastate_101
-               if c.ascii == 107 then return dfastate_101
-               if c.ascii == 108 then return dfastate_101
-               if c.ascii == 109 then return dfastate_101
-               if c.ascii == 110 then return dfastate_101
-               if c.ascii == 111 then return dfastate_101
-               if c.ascii == 112 then return dfastate_101
-               if c.ascii == 113 then return dfastate_101
-               if c.ascii == 114 then return dfastate_101
-               if c.ascii == 115 then return dfastate_101
-               if c.ascii == 116 then return dfastate_101
-               if c.ascii == 117 then return dfastate_101
-               if c.ascii == 118 then return dfastate_101
-               if c.ascii == 119 then return dfastate_101
-               if c.ascii == 120 then return dfastate_101
-               if c.ascii == 121 then return dfastate_101
-               if c.ascii == 122 then return dfastate_101
-               if c.ascii == 123 then return dfastate_101
-               if c.ascii == 124 then return dfastate_101
-               if c.ascii == 125 then return dfastate_101
-               if c.ascii == 126 then return dfastate_101
-               if c.ascii == 13 then return dfastate_102
-               if c.ascii == 10 then return dfastate_103
-               return null
-       end
-end
-class DFAState103
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nend_block
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 13 then return dfastate_104
-               if c.ascii == 32 then return dfastate_101
-               if c.ascii == 33 then return dfastate_101
-               if c.ascii == 34 then return dfastate_101
-               if c.ascii == 35 then return dfastate_101
-               if c.ascii == 36 then return dfastate_101
-               if c.ascii == 37 then return dfastate_101
-               if c.ascii == 38 then return dfastate_101
-               if c.ascii == 39 then return dfastate_101
-               if c.ascii == 40 then return dfastate_101
-               if c.ascii == 41 then return dfastate_101
-               if c.ascii == 42 then return dfastate_101
-               if c.ascii == 43 then return dfastate_101
-               if c.ascii == 44 then return dfastate_101
-               if c.ascii == 45 then return dfastate_101
-               if c.ascii == 46 then return dfastate_101
-               if c.ascii == 47 then return dfastate_101
-               if c.ascii == 48 then return dfastate_101
-               if c.ascii == 49 then return dfastate_101
-               if c.ascii == 50 then return dfastate_101
-               if c.ascii == 51 then return dfastate_101
-               if c.ascii == 52 then return dfastate_101
-               if c.ascii == 53 then return dfastate_101
-               if c.ascii == 54 then return dfastate_101
-               if c.ascii == 55 then return dfastate_101
-               if c.ascii == 56 then return dfastate_101
-               if c.ascii == 57 then return dfastate_101
-               if c.ascii == 58 then return dfastate_101
-               if c.ascii == 59 then return dfastate_101
-               if c.ascii == 60 then return dfastate_101
-               if c.ascii == 61 then return dfastate_101
-               if c.ascii == 62 then return dfastate_101
-               if c.ascii == 63 then return dfastate_101
-               if c.ascii == 64 then return dfastate_101
-               if c.ascii == 65 then return dfastate_101
-               if c.ascii == 66 then return dfastate_101
-               if c.ascii == 67 then return dfastate_101
-               if c.ascii == 68 then return dfastate_101
-               if c.ascii == 69 then return dfastate_101
-               if c.ascii == 70 then return dfastate_101
-               if c.ascii == 71 then return dfastate_101
-               if c.ascii == 72 then return dfastate_101
-               if c.ascii == 73 then return dfastate_101
-               if c.ascii == 74 then return dfastate_101
-               if c.ascii == 75 then return dfastate_101
-               if c.ascii == 76 then return dfastate_101
-               if c.ascii == 77 then return dfastate_101
-               if c.ascii == 78 then return dfastate_101
-               if c.ascii == 79 then return dfastate_101
-               if c.ascii == 80 then return dfastate_101
-               if c.ascii == 81 then return dfastate_101
-               if c.ascii == 82 then return dfastate_101
-               if c.ascii == 83 then return dfastate_101
-               if c.ascii == 84 then return dfastate_101
-               if c.ascii == 85 then return dfastate_101
-               if c.ascii == 86 then return dfastate_101
-               if c.ascii == 87 then return dfastate_101
-               if c.ascii == 88 then return dfastate_101
-               if c.ascii == 89 then return dfastate_101
-               if c.ascii == 90 then return dfastate_101
-               if c.ascii == 91 then return dfastate_101
-               if c.ascii == 92 then return dfastate_101
-               if c.ascii == 93 then return dfastate_101
-               if c.ascii == 94 then return dfastate_101
-               if c.ascii == 95 then return dfastate_101
-               if c.ascii == 96 then return dfastate_101
-               if c.ascii == 97 then return dfastate_101
-               if c.ascii == 98 then return dfastate_101
-               if c.ascii == 99 then return dfastate_101
-               if c.ascii == 100 then return dfastate_101
-               if c.ascii == 101 then return dfastate_101
-               if c.ascii == 102 then return dfastate_101
-               if c.ascii == 103 then return dfastate_101
-               if c.ascii == 104 then return dfastate_101
-               if c.ascii == 105 then return dfastate_101
-               if c.ascii == 106 then return dfastate_101
-               if c.ascii == 107 then return dfastate_101
-               if c.ascii == 108 then return dfastate_101
-               if c.ascii == 109 then return dfastate_101
-               if c.ascii == 110 then return dfastate_101
-               if c.ascii == 111 then return dfastate_101
-               if c.ascii == 112 then return dfastate_101
-               if c.ascii == 113 then return dfastate_101
-               if c.ascii == 114 then return dfastate_101
-               if c.ascii == 115 then return dfastate_101
-               if c.ascii == 116 then return dfastate_101
-               if c.ascii == 117 then return dfastate_101
-               if c.ascii == 118 then return dfastate_101
-               if c.ascii == 119 then return dfastate_101
-               if c.ascii == 120 then return dfastate_101
-               if c.ascii == 121 then return dfastate_101
-               if c.ascii == 122 then return dfastate_101
-               if c.ascii == 123 then return dfastate_101
-               if c.ascii == 124 then return dfastate_101
-               if c.ascii == 125 then return dfastate_101
-               if c.ascii == 126 then return dfastate_101
-               if c.ascii == 10 then return dfastate_103
-               return null
-       end
-end
-class DFAState104
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Nend_block
-               t.position = position
-               t.text = text
-               return t
-       end
-       redef fun trans(c) do
-               if c.ascii == 32 then return dfastate_101
-               if c.ascii == 33 then return dfastate_101
-               if c.ascii == 34 then return dfastate_101
-               if c.ascii == 35 then return dfastate_101
-               if c.ascii == 36 then return dfastate_101
-               if c.ascii == 37 then return dfastate_101
-               if c.ascii == 38 then return dfastate_101
-               if c.ascii == 39 then return dfastate_101
-               if c.ascii == 40 then return dfastate_101
-               if c.ascii == 41 then return dfastate_101
-               if c.ascii == 42 then return dfastate_101
-               if c.ascii == 43 then return dfastate_101
-               if c.ascii == 44 then return dfastate_101
-               if c.ascii == 45 then return dfastate_101
-               if c.ascii == 46 then return dfastate_101
-               if c.ascii == 47 then return dfastate_101
-               if c.ascii == 48 then return dfastate_101
-               if c.ascii == 49 then return dfastate_101
-               if c.ascii == 50 then return dfastate_101
-               if c.ascii == 51 then return dfastate_101
-               if c.ascii == 52 then return dfastate_101
-               if c.ascii == 53 then return dfastate_101
-               if c.ascii == 54 then return dfastate_101
-               if c.ascii == 55 then return dfastate_101
-               if c.ascii == 56 then return dfastate_101
-               if c.ascii == 57 then return dfastate_101
-               if c.ascii == 58 then return dfastate_101
-               if c.ascii == 59 then return dfastate_101
-               if c.ascii == 60 then return dfastate_101
-               if c.ascii == 61 then return dfastate_101
-               if c.ascii == 62 then return dfastate_101
-               if c.ascii == 63 then return dfastate_101
-               if c.ascii == 64 then return dfastate_101
-               if c.ascii == 65 then return dfastate_101
-               if c.ascii == 66 then return dfastate_101
-               if c.ascii == 67 then return dfastate_101
-               if c.ascii == 68 then return dfastate_101
-               if c.ascii == 69 then return dfastate_101
-               if c.ascii == 70 then return dfastate_101
-               if c.ascii == 71 then return dfastate_101
-               if c.ascii == 72 then return dfastate_101
-               if c.ascii == 73 then return dfastate_101
-               if c.ascii == 74 then return dfastate_101
-               if c.ascii == 75 then return dfastate_101
-               if c.ascii == 76 then return dfastate_101
-               if c.ascii == 77 then return dfastate_101
-               if c.ascii == 78 then return dfastate_101
-               if c.ascii == 79 then return dfastate_101
-               if c.ascii == 80 then return dfastate_101
-               if c.ascii == 81 then return dfastate_101
-               if c.ascii == 82 then return dfastate_101
-               if c.ascii == 83 then return dfastate_101
-               if c.ascii == 84 then return dfastate_101
-               if c.ascii == 85 then return dfastate_101
-               if c.ascii == 86 then return dfastate_101
-               if c.ascii == 87 then return dfastate_101
-               if c.ascii == 88 then return dfastate_101
-               if c.ascii == 89 then return dfastate_101
-               if c.ascii == 90 then return dfastate_101
-               if c.ascii == 91 then return dfastate_101
-               if c.ascii == 92 then return dfastate_101
-               if c.ascii == 93 then return dfastate_101
-               if c.ascii == 94 then return dfastate_101
-               if c.ascii == 95 then return dfastate_101
-               if c.ascii == 96 then return dfastate_101
-               if c.ascii == 97 then return dfastate_101
-               if c.ascii == 98 then return dfastate_101
-               if c.ascii == 99 then return dfastate_101
-               if c.ascii == 100 then return dfastate_101
-               if c.ascii == 101 then return dfastate_101
-               if c.ascii == 102 then return dfastate_101
-               if c.ascii == 103 then return dfastate_101
-               if c.ascii == 104 then return dfastate_101
-               if c.ascii == 105 then return dfastate_101
-               if c.ascii == 106 then return dfastate_101
-               if c.ascii == 107 then return dfastate_101
-               if c.ascii == 108 then return dfastate_101
-               if c.ascii == 109 then return dfastate_101
-               if c.ascii == 110 then return dfastate_101
-               if c.ascii == 111 then return dfastate_101
-               if c.ascii == 112 then return dfastate_101
-               if c.ascii == 113 then return dfastate_101
-               if c.ascii == 114 then return dfastate_101
-               if c.ascii == 115 then return dfastate_101
-               if c.ascii == 116 then return dfastate_101
-               if c.ascii == 117 then return dfastate_101
-               if c.ascii == 118 then return dfastate_101
-               if c.ascii == 119 then return dfastate_101
-               if c.ascii == 120 then return dfastate_101
-               if c.ascii == 121 then return dfastate_101
-               if c.ascii == 122 then return dfastate_101
-               if c.ascii == 123 then return dfastate_101
-               if c.ascii == 124 then return dfastate_101
-               if c.ascii == 125 then return dfastate_101
-               if c.ascii == 126 then return dfastate_101
-               if c.ascii == 13 then return dfastate_102
-               if c.ascii == 10 then return dfastate_103
-               return null
-       end
-end
-class DFAState105
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 97 then return dfastate_107
-               if c.ascii == 65 then return dfastate_108
-               return null
-       end
-end
-class DFAState106
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 97 then return dfastate_107
-               if c.ascii == 65 then return dfastate_108
-               return null
-       end
-end
-class DFAState107
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 116 then return dfastate_109
-               if c.ascii == 84 then return dfastate_110
-               return null
-       end
-end
-class DFAState108
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 116 then return dfastate_109
-               if c.ascii == 84 then return dfastate_110
-               return null
-       end
-end
-class DFAState109
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 101 then return dfastate_111
-               if c.ascii == 69 then return dfastate_112
-               return null
-       end
-end
-class DFAState110
-       super DFAState
-       redef fun trans(c) do
-               if c.ascii == 101 then return dfastate_111
-               if c.ascii == 69 then return dfastate_112
-               return null
-       end
-end
-class DFAState111
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ntk_equate
-               t.position = position
-               t.text = text
-               return t
-       end
-end
-class DFAState112
-       super DFAState
-       redef fun is_accept do return true
-       redef fun make_token(position, text) do
-               var t = new Ntk_equate
-               t.position = position
-               t.text = text
-               return t
-       end
-end
diff --git a/contrib/pep8analysis/src/parser/pep8_parser.nit b/contrib/pep8analysis/src/parser/pep8_parser.nit
deleted file mode 100644 (file)
index 1b91658..0000000
+++ /dev/null
@@ -1,1754 +0,0 @@
-# Parser generated by nitcc
-import nitcc_runtime
-class MyParser
-       super Parser
-       redef fun start_state do return state_Start
-end
-redef class Object
-       private fun state_Start: LRStateStart do return once new LRStateStart
-       private fun state_listing: LRStatelisting do return once new LRStatelisting
-       private fun state_line_43d: LRStateline_43d do return once new LRStateline_43d
-       private fun state_line: LRStateline do return once new LRStateline
-       private fun state_label_decl: LRStatelabel_decl do return once new LRStatelabel_decl
-       private fun state_id: LRStateid do return once new LRStateid
-       private fun state_comment: LRStatecomment do return once new LRStatecomment
-       private fun state_eol: LRStateeol do return once new LRStateeol
-       private fun state_instruction: LRStateinstruction do return once new LRStateinstruction
-       private fun state_directive: LRStatedirective do return once new LRStatedirective
-       private fun state_tk_byte: LRStatetk_byte do return once new LRStatetk_byte
-       private fun state_tk_word: LRStatetk_word do return once new LRStatetk_word
-       private fun state_tk_block: LRStatetk_block do return once new LRStatetk_block
-       private fun state_tk_ascii: LRStatetk_ascii do return once new LRStatetk_ascii
-       private fun state_tk_addrss: LRStatetk_addrss do return once new LRStatetk_addrss
-       private fun state_tk_equate: LRStatetk_equate do return once new LRStatetk_equate
-       private fun state_tk_burn: LRStatetk_burn do return once new LRStatetk_burn
-       private fun state_end_block: LRStateend_block do return once new LRStateend_block
-       private fun state_listing_32dEof: LRStatelisting_32dEof do return once new LRStatelisting_32dEof
-       private fun state_line_43d_32dlabel_decl: LRStateline_43d_32dlabel_decl do return once new LRStateline_43d_32dlabel_decl
-       private fun state_line_43d_32dline: LRStateline_43d_32dline do return once new LRStateline_43d_32dline
-       private fun state_line_43d_32dend_block: LRStateline_43d_32dend_block do return once new LRStateline_43d_32dend_block
-       private fun state_label_decl_32dcomment: LRStatelabel_decl_32dcomment do return once new LRStatelabel_decl_32dcomment
-       private fun state_label_decl_32deol: LRStatelabel_decl_32deol do return once new LRStatelabel_decl_32deol
-       private fun state_label_decl_32dinstruction: LRStatelabel_decl_32dinstruction do return once new LRStatelabel_decl_32dinstruction
-       private fun state_label_decl_32ddirective: LRStatelabel_decl_32ddirective do return once new LRStatelabel_decl_32ddirective
-       private fun state_label_decl_32dend_block: LRStatelabel_decl_32dend_block do return once new LRStatelabel_decl_32dend_block
-       private fun state_label_decl_32did: LRStatelabel_decl_32did do return once new LRStatelabel_decl_32did
-       private fun state_id_32dcolon: LRStateid_32dcolon do return once new LRStateid_32dcolon
-       private fun state_id_32doperand: LRStateid_32doperand do return once new LRStateid_32doperand
-       private fun state_id_32dvalue: LRStateid_32dvalue do return once new LRStateid_32dvalue
-       private fun state_id_32did: LRStateid_32did do return once new LRStateid_32did
-       private fun state_id_32dchar: LRStateid_32dchar do return once new LRStateid_32dchar
-       private fun state_id_32dstring: LRStateid_32dstring do return once new LRStateid_32dstring
-       private fun state_comment_32deol: LRStatecomment_32deol do return once new LRStatecomment_32deol
-       private fun state_instruction_32dcomment: LRStateinstruction_32dcomment do return once new LRStateinstruction_32dcomment
-       private fun state_instruction_32deol: LRStateinstruction_32deol do return once new LRStateinstruction_32deol
-       private fun state_directive_32dcomment: LRStatedirective_32dcomment do return once new LRStatedirective_32dcomment
-       private fun state_directive_32deol: LRStatedirective_32deol do return once new LRStatedirective_32deol
-       private fun state_tk_byte_32dvalue: LRStatetk_byte_32dvalue do return once new LRStatetk_byte_32dvalue
-       private fun state_tk_word_32dvalue: LRStatetk_word_32dvalue do return once new LRStatetk_word_32dvalue
-       private fun state_tk_block_32dvalue: LRStatetk_block_32dvalue do return once new LRStatetk_block_32dvalue
-       private fun state_tk_ascii_32dvalue: LRStatetk_ascii_32dvalue do return once new LRStatetk_ascii_32dvalue
-       private fun state_tk_addrss_32dvalue: LRStatetk_addrss_32dvalue do return once new LRStatetk_addrss_32dvalue
-       private fun state_tk_equate_32dvalue: LRStatetk_equate_32dvalue do return once new LRStatetk_equate_32dvalue
-       private fun state_tk_burn_32dvalue: LRStatetk_burn_32dvalue do return once new LRStatetk_burn_32dvalue
-       private fun state_line_43d_32dlabel_decl_32dend_block: LRStateline_43d_32dlabel_decl_32dend_block do return once new LRStateline_43d_32dlabel_decl_32dend_block
-       private fun state_label_decl_32dcomment_32deol: LRStatelabel_decl_32dcomment_32deol do return once new LRStatelabel_decl_32dcomment_32deol
-       private fun state_label_decl_32dinstruction_32dcomment: LRStatelabel_decl_32dinstruction_32dcomment do return once new LRStatelabel_decl_32dinstruction_32dcomment
-       private fun state_label_decl_32dinstruction_32deol: LRStatelabel_decl_32dinstruction_32deol do return once new LRStatelabel_decl_32dinstruction_32deol
-       private fun state_label_decl_32ddirective_32dcomment: LRStatelabel_decl_32ddirective_32dcomment do return once new LRStatelabel_decl_32ddirective_32dcomment
-       private fun state_label_decl_32ddirective_32deol: LRStatelabel_decl_32ddirective_32deol do return once new LRStatelabel_decl_32ddirective_32deol
-       private fun state_id_32dvalue_32dcomma: LRStateid_32dvalue_32dcomma do return once new LRStateid_32dvalue_32dcomma
-       private fun state_instruction_32dcomment_32deol: LRStateinstruction_32dcomment_32deol do return once new LRStateinstruction_32dcomment_32deol
-       private fun state_directive_32dcomment_32deol: LRStatedirective_32dcomment_32deol do return once new LRStatedirective_32dcomment_32deol
-       private fun state_label_decl_32dinstruction_32dcomment_32deol: LRStatelabel_decl_32dinstruction_32dcomment_32deol do return once new LRStatelabel_decl_32dinstruction_32dcomment_32deol
-       private fun state_label_decl_32ddirective_32dcomment_32deol: LRStatelabel_decl_32ddirective_32dcomment_32deol do return once new LRStatelabel_decl_32ddirective_32dcomment_32deol
-       private fun state_id_32dvalue_32dcomma_32did: LRStateid_32dvalue_32dcomma_32did do return once new LRStateid_32dvalue_32dcomma_32did
-       private fun goto_Nlisting: Goto_Nlisting do return once new Goto_Nlisting
-       private fun goto_Nline: Goto_Nline do return once new Goto_Nline
-       private fun goto_Nlabel_decl: Goto_Nlabel_decl do return once new Goto_Nlabel_decl
-       private fun goto_Ninstruction: Goto_Ninstruction do return once new Goto_Ninstruction
-       private fun goto_Noperand: Goto_Noperand do return once new Goto_Noperand
-       private fun goto_Nvalue: Goto_Nvalue do return once new Goto_Nvalue
-       private fun goto_Ndirective: Goto_Ndirective do return once new Goto_Ndirective
-       private fun goto_Nline_43d: Goto_Nline_43d do return once new Goto_Nline_43d
-       private fun goto_N_start: Goto_N_start do return once new Goto_N_start
-end
-redef class NToken
-       # guarded action for state Start
-       # 11 shift(s) and 0 reduce(s)
-       private fun action_sStart(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state listing
-       # 1 shift(s) and 0 reduce(s)
-       private fun action_slisting(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state line+
-       # 11 shift(s) and 0 reduce(s)
-       private fun action_sline_43d(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state label_decl
-       # 11 shift(s) and 0 reduce(s)
-       private fun action_slabel_decl(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state id
-       # 4 shift(s) and 1 reduce(s)
-       private fun action_sid(parser: Parser) do
-               # REDUCE instruction::instruction_unary=id
-               var n0 = parser.pop.as(Nid)
-               var p1 = new Ninstruction_unary(n0)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Ninstruction)
-       end
-       # guarded action for state comment
-       # 1 shift(s) and 0 reduce(s)
-       private fun action_scomment(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state instruction
-       # 2 shift(s) and 0 reduce(s)
-       private fun action_sinstruction(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state directive
-       # 2 shift(s) and 0 reduce(s)
-       private fun action_sdirective(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state tk_byte
-       # 3 shift(s) and 0 reduce(s)
-       private fun action_stk_byte(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state tk_word
-       # 3 shift(s) and 0 reduce(s)
-       private fun action_stk_word(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state tk_block
-       # 3 shift(s) and 0 reduce(s)
-       private fun action_stk_block(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state tk_ascii
-       # 3 shift(s) and 0 reduce(s)
-       private fun action_stk_ascii(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state tk_addrss
-       # 3 shift(s) and 0 reduce(s)
-       private fun action_stk_addrss(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state tk_equate
-       # 3 shift(s) and 0 reduce(s)
-       private fun action_stk_equate(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state tk_burn
-       # 3 shift(s) and 0 reduce(s)
-       private fun action_stk_burn(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state line+ label_decl
-       # 11 shift(s) and 0 reduce(s)
-       private fun action_sline_43d_32dlabel_decl(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state label_decl comment
-       # 1 shift(s) and 0 reduce(s)
-       private fun action_slabel_decl_32dcomment(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state label_decl instruction
-       # 2 shift(s) and 0 reduce(s)
-       private fun action_slabel_decl_32dinstruction(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state label_decl directive
-       # 2 shift(s) and 0 reduce(s)
-       private fun action_slabel_decl_32ddirective(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state label_decl id
-       # 3 shift(s) and 1 reduce(s)
-       private fun action_slabel_decl_32did(parser: Parser) do
-               # REDUCE instruction::instruction_unary=id
-               var n0 = parser.pop.as(Nid)
-               var p1 = new Ninstruction_unary(n0)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Ninstruction)
-       end
-       # guarded action for state id value
-       # 1 shift(s) and 1 reduce(s)
-       private fun action_sid_32dvalue(parser: Parser) do
-               # REDUCE operand::operand_immediate=value
-               var n0 = parser.pop.as(Nvalue)
-               var p1 = new Noperand_immediate(n0)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Noperand)
-       end
-       # guarded action for state instruction comment
-       # 1 shift(s) and 0 reduce(s)
-       private fun action_sinstruction_32dcomment(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state directive comment
-       # 1 shift(s) and 0 reduce(s)
-       private fun action_sdirective_32dcomment(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state label_decl instruction comment
-       # 1 shift(s) and 0 reduce(s)
-       private fun action_slabel_decl_32dinstruction_32dcomment(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state label_decl directive comment
-       # 1 shift(s) and 0 reduce(s)
-       private fun action_slabel_decl_32ddirective_32dcomment(parser: Parser) do
-               parser.parse_error
-       end
-       # guarded action for state id value comma
-       # 1 shift(s) and 0 reduce(s)
-       private fun action_sid_32dvalue_32dcomma(parser: Parser) do
-               parser.parse_error
-       end
-end
-class NIgnored
-       super NToken
-       redef fun node_name do return "Ignored"
-end
-class Nend_block
-       super NToken
-       redef fun action_sStart(parser) do
-               parser.shift(state_end_block)
-       end
-       redef fun action_sline_43d(parser) do
-               parser.shift(state_line_43d_32dend_block)
-       end
-       redef fun action_slabel_decl(parser) do
-               parser.shift(state_label_decl_32dend_block)
-       end
-       redef fun action_sline_43d_32dlabel_decl(parser) do
-               parser.shift(state_line_43d_32dlabel_decl_32dend_block)
-       end
-       redef fun node_name do return "end_block"
-end
-class Ncomment
-       super NToken
-       redef fun action_sStart(parser) do
-               parser.shift(state_comment)
-       end
-       redef fun action_sline_43d(parser) do
-               parser.shift(state_comment)
-       end
-       redef fun action_slabel_decl(parser) do
-               parser.shift(state_label_decl_32dcomment)
-       end
-       redef fun action_sinstruction(parser) do
-               parser.shift(state_instruction_32dcomment)
-       end
-       redef fun action_sdirective(parser) do
-               parser.shift(state_directive_32dcomment)
-       end
-       redef fun action_sline_43d_32dlabel_decl(parser) do
-               parser.shift(state_label_decl_32dcomment)
-       end
-       redef fun action_slabel_decl_32dinstruction(parser) do
-               parser.shift(state_label_decl_32dinstruction_32dcomment)
-       end
-       redef fun action_slabel_decl_32ddirective(parser) do
-               parser.shift(state_label_decl_32ddirective_32dcomment)
-       end
-       redef fun node_name do return "comment"
-end
-class Neol
-       super NToken
-       redef fun action_sStart(parser) do
-               parser.shift(state_eol)
-       end
-       redef fun action_sline_43d(parser) do
-               parser.shift(state_eol)
-       end
-       redef fun action_slabel_decl(parser) do
-               parser.shift(state_label_decl_32deol)
-       end
-       redef fun action_scomment(parser) do
-               parser.shift(state_comment_32deol)
-       end
-       redef fun action_sinstruction(parser) do
-               parser.shift(state_instruction_32deol)
-       end
-       redef fun action_sdirective(parser) do
-               parser.shift(state_directive_32deol)
-       end
-       redef fun action_sline_43d_32dlabel_decl(parser) do
-               parser.shift(state_label_decl_32deol)
-       end
-       redef fun action_slabel_decl_32dcomment(parser) do
-               parser.shift(state_label_decl_32dcomment_32deol)
-       end
-       redef fun action_slabel_decl_32dinstruction(parser) do
-               parser.shift(state_label_decl_32dinstruction_32deol)
-       end
-       redef fun action_slabel_decl_32ddirective(parser) do
-               parser.shift(state_label_decl_32ddirective_32deol)
-       end
-       redef fun action_sinstruction_32dcomment(parser) do
-               parser.shift(state_instruction_32dcomment_32deol)
-       end
-       redef fun action_sdirective_32dcomment(parser) do
-               parser.shift(state_directive_32dcomment_32deol)
-       end
-       redef fun action_slabel_decl_32dinstruction_32dcomment(parser) do
-               parser.shift(state_label_decl_32dinstruction_32dcomment_32deol)
-       end
-       redef fun action_slabel_decl_32ddirective_32dcomment(parser) do
-               parser.shift(state_label_decl_32ddirective_32dcomment_32deol)
-       end
-       redef fun node_name do return "eol"
-end
-class Nid
-       super NToken
-       redef fun action_sStart(parser) do
-               parser.shift(state_id)
-       end
-       redef fun action_sline_43d(parser) do
-               parser.shift(state_id)
-       end
-       redef fun action_slabel_decl(parser) do
-               parser.shift(state_label_decl_32did)
-       end
-       redef fun action_sid(parser) do
-               parser.shift(state_id_32did)
-       end
-       redef fun action_stk_byte(parser) do
-               parser.shift(state_id_32did)
-       end
-       redef fun action_stk_word(parser) do
-               parser.shift(state_id_32did)
-       end
-       redef fun action_stk_block(parser) do
-               parser.shift(state_id_32did)
-       end
-       redef fun action_stk_ascii(parser) do
-               parser.shift(state_id_32did)
-       end
-       redef fun action_stk_addrss(parser) do
-               parser.shift(state_id_32did)
-       end
-       redef fun action_stk_equate(parser) do
-               parser.shift(state_id_32did)
-       end
-       redef fun action_stk_burn(parser) do
-               parser.shift(state_id_32did)
-       end
-       redef fun action_sline_43d_32dlabel_decl(parser) do
-               parser.shift(state_label_decl_32did)
-       end
-       redef fun action_slabel_decl_32did(parser) do
-               parser.shift(state_id_32did)
-       end
-       redef fun action_sid_32dvalue_32dcomma(parser) do
-               parser.shift(state_id_32dvalue_32dcomma_32did)
-       end
-       redef fun node_name do return "id"
-end
-class Ncolon
-       super NToken
-       redef fun action_sid(parser) do
-               parser.shift(state_id_32dcolon)
-       end
-       redef fun node_name do return "colon"
-end
-class Ncomma
-       super NToken
-       redef fun action_sid_32dvalue(parser) do
-               parser.shift(state_id_32dvalue_32dcomma)
-       end
-       redef fun node_name do return "comma"
-end
-class Nchar
-       super NToken
-       redef fun action_sid(parser) do
-               parser.shift(state_id_32dchar)
-       end
-       redef fun action_stk_byte(parser) do
-               parser.shift(state_id_32dchar)
-       end
-       redef fun action_stk_word(parser) do
-               parser.shift(state_id_32dchar)
-       end
-       redef fun action_stk_block(parser) do
-               parser.shift(state_id_32dchar)
-       end
-       redef fun action_stk_ascii(parser) do
-               parser.shift(state_id_32dchar)
-       end
-       redef fun action_stk_addrss(parser) do
-               parser.shift(state_id_32dchar)
-       end
-       redef fun action_stk_equate(parser) do
-               parser.shift(state_id_32dchar)
-       end
-       redef fun action_stk_burn(parser) do
-               parser.shift(state_id_32dchar)
-       end
-       redef fun action_slabel_decl_32did(parser) do
-               parser.shift(state_id_32dchar)
-       end
-       redef fun node_name do return "char"
-end
-class Nstring
-       super NToken
-       redef fun action_sid(parser) do
-               parser.shift(state_id_32dstring)
-       end
-       redef fun action_stk_byte(parser) do
-               parser.shift(state_id_32dstring)
-       end
-       redef fun action_stk_word(parser) do
-               parser.shift(state_id_32dstring)
-       end
-       redef fun action_stk_block(parser) do
-               parser.shift(state_id_32dstring)
-       end
-       redef fun action_stk_ascii(parser) do
-               parser.shift(state_id_32dstring)
-       end
-       redef fun action_stk_addrss(parser) do
-               parser.shift(state_id_32dstring)
-       end
-       redef fun action_stk_equate(parser) do
-               parser.shift(state_id_32dstring)
-       end
-       redef fun action_stk_burn(parser) do
-               parser.shift(state_id_32dstring)
-       end
-       redef fun action_slabel_decl_32did(parser) do
-               parser.shift(state_id_32dstring)
-       end
-       redef fun node_name do return "string"
-end
-class Ntk_byte
-       super NToken
-       redef fun action_sStart(parser) do
-               parser.shift(state_tk_byte)
-       end
-       redef fun action_sline_43d(parser) do
-               parser.shift(state_tk_byte)
-       end
-       redef fun action_slabel_decl(parser) do
-               parser.shift(state_tk_byte)
-       end
-       redef fun action_sline_43d_32dlabel_decl(parser) do
-               parser.shift(state_tk_byte)
-       end
-       redef fun node_name do return "tk_byte"
-end
-class Ntk_word
-       super NToken
-       redef fun action_sStart(parser) do
-               parser.shift(state_tk_word)
-       end
-       redef fun action_sline_43d(parser) do
-               parser.shift(state_tk_word)
-       end
-       redef fun action_slabel_decl(parser) do
-               parser.shift(state_tk_word)
-       end
-       redef fun action_sline_43d_32dlabel_decl(parser) do
-               parser.shift(state_tk_word)
-       end
-       redef fun node_name do return "tk_word"
-end
-class Ntk_block
-       super NToken
-       redef fun action_sStart(parser) do
-               parser.shift(state_tk_block)
-       end
-       redef fun action_sline_43d(parser) do
-               parser.shift(state_tk_block)
-       end
-       redef fun action_slabel_decl(parser) do
-               parser.shift(state_tk_block)
-       end
-       redef fun action_sline_43d_32dlabel_decl(parser) do
-               parser.shift(state_tk_block)
-       end
-       redef fun node_name do return "tk_block"
-end
-class Ntk_ascii
-       super NToken
-       redef fun action_sStart(parser) do
-               parser.shift(state_tk_ascii)
-       end
-       redef fun action_sline_43d(parser) do
-               parser.shift(state_tk_ascii)
-       end
-       redef fun action_slabel_decl(parser) do
-               parser.shift(state_tk_ascii)
-       end
-       redef fun action_sline_43d_32dlabel_decl(parser) do
-               parser.shift(state_tk_ascii)
-       end
-       redef fun node_name do return "tk_ascii"
-end
-class Ntk_addrss
-       super NToken
-       redef fun action_sStart(parser) do
-               parser.shift(state_tk_addrss)
-       end
-       redef fun action_sline_43d(parser) do
-               parser.shift(state_tk_addrss)
-       end
-       redef fun action_slabel_decl(parser) do
-               parser.shift(state_tk_addrss)
-       end
-       redef fun action_sline_43d_32dlabel_decl(parser) do
-               parser.shift(state_tk_addrss)
-       end
-       redef fun node_name do return "tk_addrss"
-end
-class Ntk_equate
-       super NToken
-       redef fun action_sStart(parser) do
-               parser.shift(state_tk_equate)
-       end
-       redef fun action_sline_43d(parser) do
-               parser.shift(state_tk_equate)
-       end
-       redef fun action_slabel_decl(parser) do
-               parser.shift(state_tk_equate)
-       end
-       redef fun action_sline_43d_32dlabel_decl(parser) do
-               parser.shift(state_tk_equate)
-       end
-       redef fun node_name do return "tk_equate"
-end
-class Ntk_burn
-       super NToken
-       redef fun action_sStart(parser) do
-               parser.shift(state_tk_burn)
-       end
-       redef fun action_sline_43d(parser) do
-               parser.shift(state_tk_burn)
-       end
-       redef fun action_slabel_decl(parser) do
-               parser.shift(state_tk_burn)
-       end
-       redef fun action_sline_43d_32dlabel_decl(parser) do
-               parser.shift(state_tk_burn)
-       end
-       redef fun node_name do return "tk_burn"
-end
-redef class NEof
-       super NToken
-       redef fun action_slisting(parser) do
-               parser.shift(state_listing_32dEof)
-       end
-       redef fun node_name do return "Eof"
-end
-redef class LRGoto
-       private fun goto_sStart(parser: Parser) do abort
-       private fun goto_sline_43d(parser: Parser) do abort
-       private fun goto_slabel_decl(parser: Parser) do abort
-       private fun goto_sid(parser: Parser) do abort
-       private fun goto_sline_43d_32dlabel_decl(parser: Parser) do abort
-       private fun goto_slabel_decl_32did(parser: Parser) do abort
-end
-class Goto_Nlisting
-       super LRGoto
-       redef fun goto_sStart(parser) do
-               parser.push(state_listing)
-       end
-end
-class Goto_Nline
-       super LRGoto
-       redef fun goto_sStart(parser) do
-               parser.push(state_line)
-       end
-       redef fun goto_sline_43d(parser) do
-               parser.push(state_line_43d_32dline)
-       end
-end
-class Goto_Nlabel_decl
-       super LRGoto
-       redef fun goto_sStart(parser) do
-               parser.push(state_label_decl)
-       end
-       redef fun goto_sline_43d(parser) do
-               parser.push(state_line_43d_32dlabel_decl)
-       end
-end
-class Goto_Ninstruction
-       super LRGoto
-       redef fun goto_sStart(parser) do
-               parser.push(state_instruction)
-       end
-       redef fun goto_sline_43d(parser) do
-               parser.push(state_instruction)
-       end
-       redef fun goto_slabel_decl(parser) do
-               parser.push(state_label_decl_32dinstruction)
-       end
-       redef fun goto_sline_43d_32dlabel_decl(parser) do
-               parser.push(state_label_decl_32dinstruction)
-       end
-end
-class Goto_Noperand
-       super LRGoto
-       redef fun goto_sid(parser) do
-               parser.push(state_id_32doperand)
-       end
-       redef fun goto_slabel_decl_32did(parser) do
-               parser.push(state_id_32doperand)
-       end
-end
-class Goto_Nvalue
-       super LRGoto
-       redef fun goto_sid(parser) do
-               parser.push(state_id_32dvalue)
-       end
-       redef fun goto_slabel_decl_32did(parser) do
-               parser.push(state_id_32dvalue)
-       end
-end
-class Goto_Ndirective
-       super LRGoto
-       redef fun goto_sStart(parser) do
-               parser.push(state_directive)
-       end
-       redef fun goto_sline_43d(parser) do
-               parser.push(state_directive)
-       end
-       redef fun goto_slabel_decl(parser) do
-               parser.push(state_label_decl_32ddirective)
-       end
-       redef fun goto_sline_43d_32dlabel_decl(parser) do
-               parser.push(state_label_decl_32ddirective)
-       end
-end
-class Goto_Nline_43d
-       super LRGoto
-       redef fun goto_sStart(parser) do
-               parser.push(state_line_43d)
-       end
-end
-class Goto_N_start
-       super LRGoto
-end
-class Nlisting
-       super NProd
-       redef fun node_name do return "listing"
-       var n_lines: nullable Nodes[Nline]
-       var n_label_decl: nullable Nlabel_decl
-       var n_end_block: Nend_block
-       init(n_lines: nullable Nodes[Nline], n_label_decl: nullable Nlabel_decl, n_end_block: Nend_block) do
-               self.n_lines = n_lines
-               self.n_label_decl = n_label_decl
-               self.n_end_block = n_end_block
-       end
-       redef fun number_of_children do return 3
-       redef fun child(i) do
-               if i == 0 then return n_lines
-               if i == 1 then return n_label_decl
-               if i == 2 then return n_end_block
-               abort
-       end
-end
-class Nline
-       super NProd
-       redef fun node_name do return "line"
-end
-class Nline_empty
-       super Nline
-       redef fun node_name do return "line_empty"
-       var n_label_decl: nullable Nlabel_decl
-       var n_comment: nullable Ncomment
-       var n_eol: Neol
-       init(n_label_decl: nullable Nlabel_decl, n_comment: nullable Ncomment, n_eol: Neol) do
-               self.n_label_decl = n_label_decl
-               self.n_comment = n_comment
-               self.n_eol = n_eol
-       end
-       redef fun number_of_children do return 3
-       redef fun child(i) do
-               if i == 0 then return n_label_decl
-               if i == 1 then return n_comment
-               if i == 2 then return n_eol
-               abort
-       end
-end
-class Nline_instruction
-       super Nline
-       redef fun node_name do return "line_instruction"
-       var n_label_decl: nullable Nlabel_decl
-       var n_instruction: Ninstruction
-       var n_comment: nullable Ncomment
-       var n_eol: Neol
-       init(n_label_decl: nullable Nlabel_decl, n_instruction: Ninstruction, n_comment: nullable Ncomment, n_eol: Neol) do
-               self.n_label_decl = n_label_decl
-               self.n_instruction = n_instruction
-               self.n_comment = n_comment
-               self.n_eol = n_eol
-       end
-       redef fun number_of_children do return 4
-       redef fun child(i) do
-               if i == 0 then return n_label_decl
-               if i == 1 then return n_instruction
-               if i == 2 then return n_comment
-               if i == 3 then return n_eol
-               abort
-       end
-end
-class Nline_directive
-       super Nline
-       redef fun node_name do return "line_directive"
-       var n_label_decl: nullable Nlabel_decl
-       var n_directive: Ndirective
-       var n_comment: nullable Ncomment
-       var n_eol: Neol
-       init(n_label_decl: nullable Nlabel_decl, n_directive: Ndirective, n_comment: nullable Ncomment, n_eol: Neol) do
-               self.n_label_decl = n_label_decl
-               self.n_directive = n_directive
-               self.n_comment = n_comment
-               self.n_eol = n_eol
-       end
-       redef fun number_of_children do return 4
-       redef fun child(i) do
-               if i == 0 then return n_label_decl
-               if i == 1 then return n_directive
-               if i == 2 then return n_comment
-               if i == 3 then return n_eol
-               abort
-       end
-end
-class Nlabel_decl
-       super NProd
-       redef fun node_name do return "label_decl"
-       var n_id: Nid
-       var n_colon: Ncolon
-       init(n_id: Nid, n_colon: Ncolon) do
-               self.n_id = n_id
-               self.n_colon = n_colon
-       end
-       redef fun number_of_children do return 2
-       redef fun child(i) do
-               if i == 0 then return n_id
-               if i == 1 then return n_colon
-               abort
-       end
-end
-class Ninstruction
-       super NProd
-       redef fun node_name do return "instruction"
-end
-class Ninstruction_unary
-       super Ninstruction
-       redef fun node_name do return "instruction_unary"
-       var n_id: Nid
-       init(n_id: Nid) do
-               self.n_id = n_id
-       end
-       redef fun number_of_children do return 1
-       redef fun child(i) do
-               if i == 0 then return n_id
-               abort
-       end
-end
-class Ninstruction_binary
-       super Ninstruction
-       redef fun node_name do return "instruction_binary"
-       var n_id: Nid
-       var n_operand: Noperand
-       init(n_id: Nid, n_operand: Noperand) do
-               self.n_id = n_id
-               self.n_operand = n_operand
-       end
-       redef fun number_of_children do return 2
-       redef fun child(i) do
-               if i == 0 then return n_id
-               if i == 1 then return n_operand
-               abort
-       end
-end
-class Noperand
-       super NProd
-       redef fun node_name do return "operand"
-end
-class Noperand_immediate
-       super Noperand
-       redef fun node_name do return "operand_immediate"
-       var n_value: Nvalue
-       init(n_value: Nvalue) do
-               self.n_value = n_value
-       end
-       redef fun number_of_children do return 1
-       redef fun child(i) do
-               if i == 0 then return n_value
-               abort
-       end
-end
-class Noperand_any
-       super Noperand
-       redef fun node_name do return "operand_any"
-       var n_value: Nvalue
-       var n_comma: Ncomma
-       var n_id: Nid
-       init(n_value: Nvalue, n_comma: Ncomma, n_id: Nid) do
-               self.n_value = n_value
-               self.n_comma = n_comma
-               self.n_id = n_id
-       end
-       redef fun number_of_children do return 3
-       redef fun child(i) do
-               if i == 0 then return n_value
-               if i == 1 then return n_comma
-               if i == 2 then return n_id
-               abort
-       end
-end
-class Nvalue
-       super NProd
-       redef fun node_name do return "value"
-end
-class Nvalue_label
-       super Nvalue
-       redef fun node_name do return "value_label"
-       var n_id: Nid
-       init(n_id: Nid) do
-               self.n_id = n_id
-       end
-       redef fun number_of_children do return 1
-       redef fun child(i) do
-               if i == 0 then return n_id
-               abort
-       end
-end
-class Nvalue_char
-       super Nvalue
-       redef fun node_name do return "value_char"
-       var n_char: Nchar
-       init(n_char: Nchar) do
-               self.n_char = n_char
-       end
-       redef fun number_of_children do return 1
-       redef fun child(i) do
-               if i == 0 then return n_char
-               abort
-       end
-end
-class Nvalue_string
-       super Nvalue
-       redef fun node_name do return "value_string"
-       var n_string: Nstring
-       init(n_string: Nstring) do
-               self.n_string = n_string
-       end
-       redef fun number_of_children do return 1
-       redef fun child(i) do
-               if i == 0 then return n_string
-               abort
-       end
-end
-class Ndirective
-       super NProd
-       redef fun node_name do return "directive"
-end
-class Ndirective_byte
-       super Ndirective
-       redef fun node_name do return "directive_byte"
-       var n_tk_byte: Ntk_byte
-       var n_value: Nvalue
-       init(n_tk_byte: Ntk_byte, n_value: Nvalue) do
-               self.n_tk_byte = n_tk_byte
-               self.n_value = n_value
-       end
-       redef fun number_of_children do return 2
-       redef fun child(i) do
-               if i == 0 then return n_tk_byte
-               if i == 1 then return n_value
-               abort
-       end
-end
-class Ndirective_word
-       super Ndirective
-       redef fun node_name do return "directive_word"
-       var n_tk_word: Ntk_word
-       var n_value: Nvalue
-       init(n_tk_word: Ntk_word, n_value: Nvalue) do
-               self.n_tk_word = n_tk_word
-               self.n_value = n_value
-       end
-       redef fun number_of_children do return 2
-       redef fun child(i) do
-               if i == 0 then return n_tk_word
-               if i == 1 then return n_value
-               abort
-       end
-end
-class Ndirective_block
-       super Ndirective
-       redef fun node_name do return "directive_block"
-       var n_tk_block: Ntk_block
-       var n_value: Nvalue
-       init(n_tk_block: Ntk_block, n_value: Nvalue) do
-               self.n_tk_block = n_tk_block
-               self.n_value = n_value
-       end
-       redef fun number_of_children do return 2
-       redef fun child(i) do
-               if i == 0 then return n_tk_block
-               if i == 1 then return n_value
-               abort
-       end
-end
-class Ndirective_ascii
-       super Ndirective
-       redef fun node_name do return "directive_ascii"
-       var n_tk_ascii: Ntk_ascii
-       var n_value: Nvalue
-       init(n_tk_ascii: Ntk_ascii, n_value: Nvalue) do
-               self.n_tk_ascii = n_tk_ascii
-               self.n_value = n_value
-       end
-       redef fun number_of_children do return 2
-       redef fun child(i) do
-               if i == 0 then return n_tk_ascii
-               if i == 1 then return n_value
-               abort
-       end
-end
-class Ndirective_addrss
-       super Ndirective
-       redef fun node_name do return "directive_addrss"
-       var n_tk_addrss: Ntk_addrss
-       var n_value: Nvalue
-       init(n_tk_addrss: Ntk_addrss, n_value: Nvalue) do
-               self.n_tk_addrss = n_tk_addrss
-               self.n_value = n_value
-       end
-       redef fun number_of_children do return 2
-       redef fun child(i) do
-               if i == 0 then return n_tk_addrss
-               if i == 1 then return n_value
-               abort
-       end
-end
-class Ndirective_equate
-       super Ndirective
-       redef fun node_name do return "directive_equate"
-       var n_tk_equate: Ntk_equate
-       var n_value: Nvalue
-       init(n_tk_equate: Ntk_equate, n_value: Nvalue) do
-               self.n_tk_equate = n_tk_equate
-               self.n_value = n_value
-       end
-       redef fun number_of_children do return 2
-       redef fun child(i) do
-               if i == 0 then return n_tk_equate
-               if i == 1 then return n_value
-               abort
-       end
-end
-class Ndirective_burn
-       super Ndirective
-       redef fun node_name do return "directive_burn"
-       var n_tk_burn: Ntk_burn
-       var n_value: Nvalue
-       init(n_tk_burn: Ntk_burn, n_value: Nvalue) do
-               self.n_tk_burn = n_tk_burn
-               self.n_value = n_value
-       end
-       redef fun number_of_children do return 2
-       redef fun child(i) do
-               if i == 0 then return n_tk_burn
-               if i == 1 then return n_value
-               abort
-       end
-end
-class N_start
-       super NProd
-       redef fun node_name do return "_start"
-end
-class NStart
-       super N_start
-       redef fun node_name do return "Start"
-       var n_0: Nlisting
-       var n_1: NEof
-       init(n_0: Nlisting, n_1: NEof) do
-               self.n_0 = n_0
-               self.n_1 = n_1
-       end
-       redef fun number_of_children do return 2
-       redef fun child(i) do
-               if i == 0 then return n_0
-               if i == 1 then return n_1
-               abort
-       end
-end
-# State Start
-private class LRStateStart
-       super LRState
-       redef fun to_s do return "Start"
-       redef fun error_msg do return "listing, line+, line, label_decl, instruction, directive"
-       redef fun action(parser) do
-               parser.peek_token.action_sStart(parser)
-       end
-       redef fun goto(parser, goto) do
-               goto.goto_sStart(parser)
-       end
-end
-# State listing
-private class LRStatelisting
-       super LRState
-       redef fun to_s do return "listing"
-       redef fun error_msg do return "Eof"
-       redef fun action(parser) do
-               parser.peek_token.action_slisting(parser)
-       end
-end
-# State line+
-private class LRStateline_43d
-       super LRState
-       redef fun to_s do return "line+"
-       redef fun error_msg do return "label_decl, line, instruction, directive"
-       redef fun action(parser) do
-               parser.peek_token.action_sline_43d(parser)
-       end
-       redef fun goto(parser, goto) do
-               goto.goto_sline_43d(parser)
-       end
-end
-# State line
-private class LRStateline
-       super LRState
-       redef fun to_s do return "line"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE line+::line+_one=line
-               var n0 = parser.pop.as(Nline)
-               var prod = new Nodes[Nline]
-               prod.items.add(n0)
-               parser.node_stack.push prod
-               parser.goto(goto_Nline_43d)
-       end
-end
-# State label_decl
-private class LRStatelabel_decl
-       super LRState
-       redef fun to_s do return "label_decl"
-       redef fun error_msg do return "instruction, directive"
-       redef fun action(parser) do
-               parser.peek_token.action_slabel_decl(parser)
-       end
-       redef fun goto(parser, goto) do
-               goto.goto_slabel_decl(parser)
-       end
-end
-# State id
-private class LRStateid
-       super LRState
-       redef fun to_s do return "id"
-       redef fun error_msg do return "operand, value"
-       redef fun action(parser) do
-               parser.peek_token.action_sid(parser)
-       end
-       redef fun goto(parser, goto) do
-               goto.goto_sid(parser)
-       end
-end
-# State comment
-private class LRStatecomment
-       super LRState
-       redef fun to_s do return "comment"
-       redef fun error_msg do return "eol"
-       redef fun action(parser) do
-               parser.peek_token.action_scomment(parser)
-       end
-end
-# State eol
-private class LRStateeol
-       super LRState
-       redef fun to_s do return "eol"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE line::line_empty_3=eol
-               var n0 = parser.pop.as(Neol)
-               var p1 = new Nline_empty(null, null, n0)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nline)
-       end
-end
-# State instruction
-private class LRStateinstruction
-       super LRState
-       redef fun to_s do return "instruction"
-       redef fun error_msg do return "comment, eol"
-       redef fun action(parser) do
-               parser.peek_token.action_sinstruction(parser)
-       end
-end
-# State directive
-private class LRStatedirective
-       super LRState
-       redef fun to_s do return "directive"
-       redef fun error_msg do return "comment, eol"
-       redef fun action(parser) do
-               parser.peek_token.action_sdirective(parser)
-       end
-end
-# State tk_byte
-private class LRStatetk_byte
-       super LRState
-       redef fun to_s do return "tk_byte"
-       redef fun error_msg do return "value"
-       redef fun action(parser) do
-               parser.peek_token.action_stk_byte(parser)
-       end
-       redef fun goto(parser, goto) do
-               parser.push(state_tk_byte_32dvalue)
-       end
-end
-# State tk_word
-private class LRStatetk_word
-       super LRState
-       redef fun to_s do return "tk_word"
-       redef fun error_msg do return "value"
-       redef fun action(parser) do
-               parser.peek_token.action_stk_word(parser)
-       end
-       redef fun goto(parser, goto) do
-               parser.push(state_tk_word_32dvalue)
-       end
-end
-# State tk_block
-private class LRStatetk_block
-       super LRState
-       redef fun to_s do return "tk_block"
-       redef fun error_msg do return "value"
-       redef fun action(parser) do
-               parser.peek_token.action_stk_block(parser)
-       end
-       redef fun goto(parser, goto) do
-               parser.push(state_tk_block_32dvalue)
-       end
-end
-# State tk_ascii
-private class LRStatetk_ascii
-       super LRState
-       redef fun to_s do return "tk_ascii"
-       redef fun error_msg do return "value"
-       redef fun action(parser) do
-               parser.peek_token.action_stk_ascii(parser)
-       end
-       redef fun goto(parser, goto) do
-               parser.push(state_tk_ascii_32dvalue)
-       end
-end
-# State tk_addrss
-private class LRStatetk_addrss
-       super LRState
-       redef fun to_s do return "tk_addrss"
-       redef fun error_msg do return "value"
-       redef fun action(parser) do
-               parser.peek_token.action_stk_addrss(parser)
-       end
-       redef fun goto(parser, goto) do
-               parser.push(state_tk_addrss_32dvalue)
-       end
-end
-# State tk_equate
-private class LRStatetk_equate
-       super LRState
-       redef fun to_s do return "tk_equate"
-       redef fun error_msg do return "value"
-       redef fun action(parser) do
-               parser.peek_token.action_stk_equate(parser)
-       end
-       redef fun goto(parser, goto) do
-               parser.push(state_tk_equate_32dvalue)
-       end
-end
-# State tk_burn
-private class LRStatetk_burn
-       super LRState
-       redef fun to_s do return "tk_burn"
-       redef fun error_msg do return "value"
-       redef fun action(parser) do
-               parser.peek_token.action_stk_burn(parser)
-       end
-       redef fun goto(parser, goto) do
-               parser.push(state_tk_burn_32dvalue)
-       end
-end
-# State end_block
-private class LRStateend_block
-       super LRState
-       redef fun to_s do return "end_block"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE listing::listing_3=end_block
-               var n0 = parser.pop.as(Nend_block)
-               var p1 = new Nlisting(null, null, n0)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nlisting)
-       end
-end
-# State listing Eof
-private class LRStatelisting_32dEof
-       super LRState
-       redef fun to_s do return "listing Eof"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE _start::Start=listing Eof
-               var n1 = parser.pop.as(NEof)
-               var n0 = parser.pop.as(Nlisting)
-               var p1 = new NStart(n0, n1)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.stop = true
-       end
-end
-# State line+ label_decl
-private class LRStateline_43d_32dlabel_decl
-       super LRState
-       redef fun to_s do return "line+ label_decl"
-       redef fun error_msg do return "instruction, directive"
-       redef fun action(parser) do
-               parser.peek_token.action_sline_43d_32dlabel_decl(parser)
-       end
-       redef fun goto(parser, goto) do
-               goto.goto_sline_43d_32dlabel_decl(parser)
-       end
-end
-# State line+ line
-private class LRStateline_43d_32dline
-       super LRState
-       redef fun to_s do return "line+ line"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE line+::line+_more=line+ line
-               var n1 = parser.pop.as(Nline)
-               var n0 = parser.pop.as(Nodes[Nline])
-               var prod = n0
-               n0.items.add(n1)
-               parser.node_stack.push prod
-               parser.goto(goto_Nline_43d)
-       end
-end
-# State line+ end_block
-private class LRStateline_43d_32dend_block
-       super LRState
-       redef fun to_s do return "line+ end_block"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE listing::listing_2=line+ end_block
-               var n1 = parser.pop.as(Nend_block)
-               var n0 = parser.pop.as(Nodes[Nline])
-               var p1 = new Nlisting(n0, null, n1)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nlisting)
-       end
-end
-# State label_decl comment
-private class LRStatelabel_decl_32dcomment
-       super LRState
-       redef fun to_s do return "label_decl comment"
-       redef fun error_msg do return "eol"
-       redef fun action(parser) do
-               parser.peek_token.action_slabel_decl_32dcomment(parser)
-       end
-end
-# State label_decl eol
-private class LRStatelabel_decl_32deol
-       super LRState
-       redef fun to_s do return "label_decl eol"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE line::line_empty_2=label_decl eol
-               var n1 = parser.pop.as(Neol)
-               var n0 = parser.pop.as(Nlabel_decl)
-               var p1 = new Nline_empty(n0, null, n1)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nline)
-       end
-end
-# State label_decl instruction
-private class LRStatelabel_decl_32dinstruction
-       super LRState
-       redef fun to_s do return "label_decl instruction"
-       redef fun error_msg do return "comment, eol"
-       redef fun action(parser) do
-               parser.peek_token.action_slabel_decl_32dinstruction(parser)
-       end
-end
-# State label_decl directive
-private class LRStatelabel_decl_32ddirective
-       super LRState
-       redef fun to_s do return "label_decl directive"
-       redef fun error_msg do return "comment, eol"
-       redef fun action(parser) do
-               parser.peek_token.action_slabel_decl_32ddirective(parser)
-       end
-end
-# State label_decl end_block
-private class LRStatelabel_decl_32dend_block
-       super LRState
-       redef fun to_s do return "label_decl end_block"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE listing::listing_1=label_decl end_block
-               var n1 = parser.pop.as(Nend_block)
-               var n0 = parser.pop.as(Nlabel_decl)
-               var p1 = new Nlisting(null, n0, n1)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nlisting)
-       end
-end
-# State label_decl id
-private class LRStatelabel_decl_32did
-       super LRState
-       redef fun to_s do return "label_decl id"
-       redef fun error_msg do return "operand, value"
-       redef fun action(parser) do
-               parser.peek_token.action_slabel_decl_32did(parser)
-       end
-       redef fun goto(parser, goto) do
-               goto.goto_slabel_decl_32did(parser)
-       end
-end
-# State id colon
-private class LRStateid_32dcolon
-       super LRState
-       redef fun to_s do return "id colon"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE label_decl::label_decl=id colon
-               var n1 = parser.pop.as(Ncolon)
-               var n0 = parser.pop.as(Nid)
-               var p1 = new Nlabel_decl(n0, n1)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nlabel_decl)
-       end
-end
-# State id operand
-private class LRStateid_32doperand
-       super LRState
-       redef fun to_s do return "id operand"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE instruction::instruction_binary=id operand
-               var n1 = parser.pop.as(Noperand)
-               var n0 = parser.pop.as(Nid)
-               var p1 = new Ninstruction_binary(n0, n1)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Ninstruction)
-       end
-end
-# State id value
-private class LRStateid_32dvalue
-       super LRState
-       redef fun to_s do return "id value"
-       redef fun error_msg do return "comma"
-       redef fun action(parser) do
-               parser.peek_token.action_sid_32dvalue(parser)
-       end
-end
-# State id id
-private class LRStateid_32did
-       super LRState
-       redef fun to_s do return "id id"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE value::value_label=id
-               var n0 = parser.pop.as(Nid)
-               var p1 = new Nvalue_label(n0)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nvalue)
-       end
-end
-# State id char
-private class LRStateid_32dchar
-       super LRState
-       redef fun to_s do return "id char"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE value::value_char=char
-               var n0 = parser.pop.as(Nchar)
-               var p1 = new Nvalue_char(n0)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nvalue)
-       end
-end
-# State id string
-private class LRStateid_32dstring
-       super LRState
-       redef fun to_s do return "id string"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE value::value_string=string
-               var n0 = parser.pop.as(Nstring)
-               var p1 = new Nvalue_string(n0)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nvalue)
-       end
-end
-# State comment eol
-private class LRStatecomment_32deol
-       super LRState
-       redef fun to_s do return "comment eol"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE line::line_empty_1=comment eol
-               var n1 = parser.pop.as(Neol)
-               var n0 = parser.pop.as(Ncomment)
-               var p1 = new Nline_empty(null, n0, n1)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nline)
-       end
-end
-# State instruction comment
-private class LRStateinstruction_32dcomment
-       super LRState
-       redef fun to_s do return "instruction comment"
-       redef fun error_msg do return "eol"
-       redef fun action(parser) do
-               parser.peek_token.action_sinstruction_32dcomment(parser)
-       end
-end
-# State instruction eol
-private class LRStateinstruction_32deol
-       super LRState
-       redef fun to_s do return "instruction eol"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE line::line_instruction_3=instruction eol
-               var n1 = parser.pop.as(Neol)
-               var n0 = parser.pop.as(Ninstruction)
-               var p1 = new Nline_instruction(null, n0, null, n1)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nline)
-       end
-end
-# State directive comment
-private class LRStatedirective_32dcomment
-       super LRState
-       redef fun to_s do return "directive comment"
-       redef fun error_msg do return "eol"
-       redef fun action(parser) do
-               parser.peek_token.action_sdirective_32dcomment(parser)
-       end
-end
-# State directive eol
-private class LRStatedirective_32deol
-       super LRState
-       redef fun to_s do return "directive eol"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE line::line_directive_3=directive eol
-               var n1 = parser.pop.as(Neol)
-               var n0 = parser.pop.as(Ndirective)
-               var p1 = new Nline_directive(null, n0, null, n1)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nline)
-       end
-end
-# State tk_byte value
-private class LRStatetk_byte_32dvalue
-       super LRState
-       redef fun to_s do return "tk_byte value"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE directive::directive_byte=tk_byte value
-               var n1 = parser.pop.as(Nvalue)
-               var n0 = parser.pop.as(Ntk_byte)
-               var p1 = new Ndirective_byte(n0, n1)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Ndirective)
-       end
-end
-# State tk_word value
-private class LRStatetk_word_32dvalue
-       super LRState
-       redef fun to_s do return "tk_word value"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE directive::directive_word=tk_word value
-               var n1 = parser.pop.as(Nvalue)
-               var n0 = parser.pop.as(Ntk_word)
-               var p1 = new Ndirective_word(n0, n1)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Ndirective)
-       end
-end
-# State tk_block value
-private class LRStatetk_block_32dvalue
-       super LRState
-       redef fun to_s do return "tk_block value"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE directive::directive_block=tk_block value
-               var n1 = parser.pop.as(Nvalue)
-               var n0 = parser.pop.as(Ntk_block)
-               var p1 = new Ndirective_block(n0, n1)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Ndirective)
-       end
-end
-# State tk_ascii value
-private class LRStatetk_ascii_32dvalue
-       super LRState
-       redef fun to_s do return "tk_ascii value"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE directive::directive_ascii=tk_ascii value
-               var n1 = parser.pop.as(Nvalue)
-               var n0 = parser.pop.as(Ntk_ascii)
-               var p1 = new Ndirective_ascii(n0, n1)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Ndirective)
-       end
-end
-# State tk_addrss value
-private class LRStatetk_addrss_32dvalue
-       super LRState
-       redef fun to_s do return "tk_addrss value"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE directive::directive_addrss=tk_addrss value
-               var n1 = parser.pop.as(Nvalue)
-               var n0 = parser.pop.as(Ntk_addrss)
-               var p1 = new Ndirective_addrss(n0, n1)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Ndirective)
-       end
-end
-# State tk_equate value
-private class LRStatetk_equate_32dvalue
-       super LRState
-       redef fun to_s do return "tk_equate value"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE directive::directive_equate=tk_equate value
-               var n1 = parser.pop.as(Nvalue)
-               var n0 = parser.pop.as(Ntk_equate)
-               var p1 = new Ndirective_equate(n0, n1)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Ndirective)
-       end
-end
-# State tk_burn value
-private class LRStatetk_burn_32dvalue
-       super LRState
-       redef fun to_s do return "tk_burn value"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE directive::directive_burn=tk_burn value
-               var n1 = parser.pop.as(Nvalue)
-               var n0 = parser.pop.as(Ntk_burn)
-               var p1 = new Ndirective_burn(n0, n1)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Ndirective)
-       end
-end
-# State line+ label_decl end_block
-private class LRStateline_43d_32dlabel_decl_32dend_block
-       super LRState
-       redef fun to_s do return "line+ label_decl end_block"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE listing::listing_0=line+ label_decl end_block
-               var n2 = parser.pop.as(Nend_block)
-               var n1 = parser.pop.as(Nlabel_decl)
-               var n0 = parser.pop.as(Nodes[Nline])
-               var p1 = new Nlisting(n0, n1, n2)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nlisting)
-       end
-end
-# State label_decl comment eol
-private class LRStatelabel_decl_32dcomment_32deol
-       super LRState
-       redef fun to_s do return "label_decl comment eol"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE line::line_empty_0=label_decl comment eol
-               var n2 = parser.pop.as(Neol)
-               var n1 = parser.pop.as(Ncomment)
-               var n0 = parser.pop.as(Nlabel_decl)
-               var p1 = new Nline_empty(n0, n1, n2)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nline)
-       end
-end
-# State label_decl instruction comment
-private class LRStatelabel_decl_32dinstruction_32dcomment
-       super LRState
-       redef fun to_s do return "label_decl instruction comment"
-       redef fun error_msg do return "eol"
-       redef fun action(parser) do
-               parser.peek_token.action_slabel_decl_32dinstruction_32dcomment(parser)
-       end
-end
-# State label_decl instruction eol
-private class LRStatelabel_decl_32dinstruction_32deol
-       super LRState
-       redef fun to_s do return "label_decl instruction eol"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE line::line_instruction_2=label_decl instruction eol
-               var n2 = parser.pop.as(Neol)
-               var n1 = parser.pop.as(Ninstruction)
-               var n0 = parser.pop.as(Nlabel_decl)
-               var p1 = new Nline_instruction(n0, n1, null, n2)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nline)
-       end
-end
-# State label_decl directive comment
-private class LRStatelabel_decl_32ddirective_32dcomment
-       super LRState
-       redef fun to_s do return "label_decl directive comment"
-       redef fun error_msg do return "eol"
-       redef fun action(parser) do
-               parser.peek_token.action_slabel_decl_32ddirective_32dcomment(parser)
-       end
-end
-# State label_decl directive eol
-private class LRStatelabel_decl_32ddirective_32deol
-       super LRState
-       redef fun to_s do return "label_decl directive eol"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE line::line_directive_2=label_decl directive eol
-               var n2 = parser.pop.as(Neol)
-               var n1 = parser.pop.as(Ndirective)
-               var n0 = parser.pop.as(Nlabel_decl)
-               var p1 = new Nline_directive(n0, n1, null, n2)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nline)
-       end
-end
-# State id value comma
-private class LRStateid_32dvalue_32dcomma
-       super LRState
-       redef fun to_s do return "id value comma"
-       redef fun error_msg do return "id"
-       redef fun action(parser) do
-               parser.peek_token.action_sid_32dvalue_32dcomma(parser)
-       end
-end
-# State instruction comment eol
-private class LRStateinstruction_32dcomment_32deol
-       super LRState
-       redef fun to_s do return "instruction comment eol"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE line::line_instruction_1=instruction comment eol
-               var n2 = parser.pop.as(Neol)
-               var n1 = parser.pop.as(Ncomment)
-               var n0 = parser.pop.as(Ninstruction)
-               var p1 = new Nline_instruction(null, n0, n1, n2)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nline)
-       end
-end
-# State directive comment eol
-private class LRStatedirective_32dcomment_32deol
-       super LRState
-       redef fun to_s do return "directive comment eol"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE line::line_directive_1=directive comment eol
-               var n2 = parser.pop.as(Neol)
-               var n1 = parser.pop.as(Ncomment)
-               var n0 = parser.pop.as(Ndirective)
-               var p1 = new Nline_directive(null, n0, n1, n2)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nline)
-       end
-end
-# State label_decl instruction comment eol
-private class LRStatelabel_decl_32dinstruction_32dcomment_32deol
-       super LRState
-       redef fun to_s do return "label_decl instruction comment eol"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE line::line_instruction_0=label_decl instruction comment eol
-               var n3 = parser.pop.as(Neol)
-               var n2 = parser.pop.as(Ncomment)
-               var n1 = parser.pop.as(Ninstruction)
-               var n0 = parser.pop.as(Nlabel_decl)
-               var p1 = new Nline_instruction(n0, n1, n2, n3)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nline)
-       end
-end
-# State label_decl directive comment eol
-private class LRStatelabel_decl_32ddirective_32dcomment_32deol
-       super LRState
-       redef fun to_s do return "label_decl directive comment eol"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE line::line_directive_0=label_decl directive comment eol
-               var n3 = parser.pop.as(Neol)
-               var n2 = parser.pop.as(Ncomment)
-               var n1 = parser.pop.as(Ndirective)
-               var n0 = parser.pop.as(Nlabel_decl)
-               var p1 = new Nline_directive(n0, n1, n2, n3)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Nline)
-       end
-end
-# State id value comma id
-private class LRStateid_32dvalue_32dcomma_32did
-       super LRState
-       redef fun to_s do return "id value comma id"
-       redef fun error_msg do return ""
-       redef fun action(parser) do
-               # REDUCE operand::operand_any=value comma id
-               var n2 = parser.pop.as(Nid)
-               var n1 = parser.pop.as(Ncomma)
-               var n0 = parser.pop.as(Nvalue)
-               var p1 = new Noperand_any(n0, n1, n2)
-               var prod = p1
-               parser.node_stack.push prod
-               parser.goto(goto_Noperand)
-       end
-end
diff --git a/contrib/pep8analysis/src/parser/pep8_test_parser.nit b/contrib/pep8analysis/src/parser/pep8_test_parser.nit
deleted file mode 100644 (file)
index 9f015d0..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# Generated by nitcc for the language pep8
-import nitcc_runtime
-import pep8_lexer
-import pep8_parser
-class MyTest
-       super TestParser
-       redef fun name do return "pep8"
-       redef fun new_lexer(text) do return new MyLexer(text)
-       redef fun new_parser do return new MyParser
-end
-var t = new MyTest
-t.main
index 30c0849..259fd09 100644 (file)
@@ -32,6 +32,7 @@ import model
 import cfg
 import flow_analysis
 intrude import standard::stream
+import cpp
 
 in "C++" `{
        #include <bind.h>
index 2f4f467..8700ab2 100644 (file)
@@ -24,4 +24,5 @@ import test_audio
 import test_shared_preferences
 import test_assets_and_resources
 import test_target_api
+import test_data_store
 import test_intent
index 6bfc9b1..9a3212d 100644 (file)
@@ -39,9 +39,9 @@ redef class App
                img = load_image( "fighter.png" )
        end
 
-       var r: Float = 0.0
-       var g: Float = 0.0
-       var b: Float = 0.0
+       var r = 0.0 is writable
+       var g = 0.0 is writable
+       var b = 0.0 is writable
        redef fun frame_core( display )
        do
                b = b + 0.01
index 1a3c5fd..c0d8d0f 100644 (file)
@@ -19,4 +19,6 @@ module simple_linux
 import simple
 import mnit_linux
 
+import test_data_store
+
 super
diff --git a/examples/mnit_simple/src/test_data_store.nit b/examples/mnit_simple/src/test_data_store.nit
new file mode 100644 (file)
index 0000000..4abd9a6
--- /dev/null
@@ -0,0 +1,52 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Test for the shared_preferences module of App.nit framework
+module test_data_store
+
+import simple
+import app::data_store
+
+redef class App
+       redef fun window_created
+       do
+               super
+
+               # load colors from data store
+               var r = data_store["r"]
+               if r isa Float then
+                       self.r = r
+                       print "r {r}"
+               else assert r == null
+
+               var g = data_store["g"]
+               if g isa Float then
+                       self.g = g
+                       print "g {g}"
+               else assert g == null
+       end
+
+       redef fun input(ie)
+       do
+               if ie isa PointerEvent then
+                       # save color for next execution
+                       data_store["r"] = r
+                       data_store["g"] = g
+               end
+
+               return super
+       end
+end
index 3fc1a09..5523f30 100644 (file)
@@ -28,6 +28,7 @@ import platform
 import native_app_glue
 import dalvik
 private import log
+private import android_data_store
 
 # Uses Android logs to print everything
 redef fun print(text) do log_write(priority_info, app.log_prefix.to_cstring, text.to_s.to_cstring)
diff --git a/lib/android/android_data_store.nit b/lib/android/android_data_store.nit
new file mode 100644 (file)
index 0000000..57eb281
--- /dev/null
@@ -0,0 +1,38 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Implements `app::data_store` using `shared_preferences`
+#
+# We use the shared preferences named "data_store" to store the data.
+module android_data_store
+
+import app::data_store
+private import shared_preferences
+
+redef class App
+       redef var data_store = new SharedPreferenceView
+end
+
+private class SharedPreferenceView
+       super DataStore
+
+       # The `SharedPreferences` used to implement the `DataStore`
+       var shared_preferences = new SharedPreferences.privately(app, "data_store") is lazy
+
+       redef fun [](key) do return shared_preferences[key]
+
+       redef fun []=(key, value) do shared_preferences[key] = value
+end
diff --git a/lib/app/app.nit b/lib/app/app.nit
new file mode 100644 (file)
index 0000000..79cbb38
--- /dev/null
@@ -0,0 +1,23 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2011-2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# app.nit is a framework to create cross-platform applications
+#
+# The features offered by this modules are common to all platforms, but
+# may not be available on all devices.
+module app
+
+import app_base
similarity index 90%
rename from lib/app.nit
rename to lib/app/app_base.nit
index 5d0a1fd..a528d57 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# app.nit is a framework to create cross-platform applications
-#
-# The features offered by this modules are common to all platforms, but
-# may not be available on all devices.
-module app is
+module app_base is
        new_annotation app_name
        new_annotation app_version
 end
diff --git a/lib/app/data_store.nit b/lib/app/data_store.nit
new file mode 100644 (file)
index 0000000..afb6a1d
--- /dev/null
@@ -0,0 +1,38 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Simple data storage services
+#
+# The implementation varies per platform.
+module data_store
+
+import app_base
+import serialization
+
+redef class App
+       # Services to store and load data
+       fun data_store: DataStore is abstract
+end
+
+# Simple data storage facility
+interface DataStore
+
+       # Get the object stored at `key`, or null if nothing is available
+       fun [](key: String): nullable Object is abstract
+
+       # Store `value` at `key`
+       fun []=(key: String, value: Serializable) is abstract
+end
diff --git a/lib/crypto.nit b/lib/crypto.nit
new file mode 100644 (file)
index 0000000..a84358f
--- /dev/null
@@ -0,0 +1,218 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Mix of all things cryptography-related
+module crypto
+
+redef class Char
+       # Rotates self of `x`
+       #
+       # NOTE: works on letters only
+       #
+       #    assert 'x'.rot(6) == 'd'
+       #    assert 'T'.rot(15) == 'I'
+       #    assert '1'.rot(10) == '1'
+       #    assert '$'.rot(10) == '$'
+       #    assert 'z'.rot(-2) == 'x'
+       fun rot(x: Int): Char do
+               if not is_letter then return self
+               x = x % 26
+               if x < 0 then x += 26
+               var up = false
+               var val = ascii
+               if is_upper then
+                       up = true
+                       val += 32
+               end
+               val += x
+               if val > 122 then val -= 26
+               if up then val -= 32
+               return val.ascii
+       end
+end
+
+redef class String
+       # Performs a Rotation of `x` on each letter of self
+       #
+       # Works by replacing every character in `self` by its
+       # rotated char.
+       #
+       # Say we have a rotation of `3` (Caesar rotation, for
+       # culture) for a string : "aybabtu"
+       #
+       # a, rotated by 3 becomes d
+       # y, rotated by 3 becomes b
+       # b, rotated by 3 becomes e
+       # t, rotated by 3 becomes w
+       # u, rotated by 3 becomes x
+       #
+       # We then replace every letter in our original string by
+       # their rotated representations, therefore yielding : "dbedewx"
+       #
+       #    assert "All your base are belong to us".rot(13) == "Nyy lbhe onfr ner orybat gb hf"
+       #    assert "This is no moon.".rot(4).rot(22) == "This is no moon."
+       #
+       # NOTE : Works on letters only
+       # NOTE : This cipher is symmetrically decrypted with an `x` of 26-`x`
+       fun rot(x: Int): String do
+               var rot = x % 26
+               if rot < 0 then rot += 26
+               var d = new FlatBuffer.with_capacity(length)
+               var p = 0
+               for i in chars do
+                       d.add i.rot(rot)
+               end
+               return d.to_s
+       end
+
+       # Returns a rail-fence cipher from `self` with `depth` rails
+       #
+       # Rail works by drawing a zig-zag pattern on `depth` rails.
+       #
+       # Say we have "fuckingbehemoth".railfence(4)
+       #
+       # This happens in-memory :
+       #       f.....g.....o..
+       #       .u...n.b...m.t.
+       #       ..c.i...e.e...h
+       #       ...k.....h.....
+       #
+       # Therefore, yielding the ciphertext : "fgounbmtcieehkh"
+       #
+       #    assert "fuckingbehemoth".railfence(4) == "fgounbmtcieehkh"
+       fun railfence(depth: Int): String do
+               var lines = new Array[FlatBuffer].with_capacity(depth)
+               var up = false
+               for i in [0..depth[ do
+                       lines[i] = new FlatBuffer.with_capacity(length)
+               end
+               var curr_depth = 0
+               for i in chars do
+                       for j in [0..depth[ do
+                               if j == curr_depth then
+                                       lines[j].add i
+                               else
+                                       lines[j].add '.'
+                               end
+                       end
+                       if up then
+                               curr_depth -= 1
+                       else
+                               curr_depth += 1
+                       end
+                       if curr_depth == 0 then
+                               up = false
+                       end
+                       if curr_depth == (depth - 1) then
+                               up = true
+                       end
+               end
+               var r = new FlatBuffer.with_capacity(length)
+               for i in lines do
+                       r.append i.to_s.replace(".", "")
+               end
+               return r.to_s
+       end
+
+       # Transforms a rail-fence-encrypted String to its original
+       #
+       #    assert "fgounbmtcieehkh".unrail(4) == "fuckingbehemoth"
+       fun unrail(depth: Int): String do
+               var dots = "." * length
+               var arr = new FlatBuffer.from(dots)
+               var start = 0
+               var paces = depth.unrail_paces
+               for i in [0..depth[ do
+                       var lp = paces[i].first
+                       var rp = paces[i].second
+                       var pos = i
+                       var l = true
+                       while pos < length do
+                               arr[pos] = chars[start]
+                               if l then
+                                       pos += lp
+                                       l = false
+                               else
+                                       pos += rp
+                                       l = true
+                               end
+                               start += 1
+                       end
+               end
+               return arr.to_s
+       end
+end
+
+redef class Int
+       # Generates the paces for each depth.
+       #
+       # Each entry of the returned array is a couple of the first pace
+       # and the second one, they are alternated when deciphering a rail-encrypted string.
+       #
+       # Say we have the encrypted string "fgounbmtcieehkh" on 4 rails
+       #
+       # To find the distance between each character on the original railed
+       # string, we need to compute the extremes.
+       #
+       # The extremes always have a distance of `depth - 1`, multiplied by 2, no pairing.
+       #
+       # In the example, that would be : [(4 - 1) * 2, (4 - 1) * 2] => [6,6]
+       #
+       # For every rail in-between, the first distance is the largest absolute value
+       # of the difference between the current depth and the extremes, multiplied by 2.
+       #
+       # Its pair is the distance of maximum and the distance yielded by the previous
+       # calculation.
+       #
+       # In our example, that would be :
+       #
+       # Maximums : (4 - 1) * 2 = 3 * 2 => [6,6]
+       # In between : Distance for depth 2 : max(2 - 1, 4 - 2) => 2
+       # The calculation yields the couple [(2 * 2), 6 - 4] => [4, 2]
+       # The symmetric couple is reversed : [2, 4]
+       #
+       # In fine, the example yields the array : [[6,6], [4,2], [2,4], [6,6]]
+       #
+       # In the end, our string is read using the generated array
+       #
+       # SEE: `String::unrail` for how the array is used
+       private fun unrail_paces: Array[Couple[Int, Int]] do
+               var ret = new Array[Couple[Int,Int]].with_capacity(self)
+               var extremes = new Couple[Int, Int]((self - 1) * 2, (self - 1) * 2)
+               for i in [0..self[ do
+                       ret.add extremes
+               end
+               var mid = ((self.to_f)/2.0).floor.to_i
+               for i in [1 .. mid[ do
+                       var rd = i + 1
+                       var lodepth = self - rd
+                       var hidepth = (rd - self).abs
+                       var dd: Int
+                       if hidepth > lodepth then
+                               dd = hidepth * 2
+                       else
+                               dd = lodepth * 2
+                       end
+                       var cp = new Couple[Int, Int](dd, extremes.first-dd)
+                       var ccp = new Couple[Int, Int](extremes.first - dd, dd)
+
+                       ret[i] = cp
+                       ret[self - rd] = ccp
+               end
+               if not self.is_even then
+                       ret[mid] = new Couple[Int, Int](extremes.first/2, extremes.first/2)
+               end
+               return ret
+       end
+end
diff --git a/lib/linux/linux.nit b/lib/linux/linux.nit
new file mode 100644 (file)
index 0000000..b106d62
--- /dev/null
@@ -0,0 +1,21 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Implementation of app.nit for the Linux platform
+module linux
+
+import app
+private import linux_data_store
diff --git a/lib/linux/linux_data_store.nit b/lib/linux/linux_data_store.nit
new file mode 100644 (file)
index 0000000..b7cedea
--- /dev/null
@@ -0,0 +1,108 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module linux_data_store
+
+import app::data_store
+private import xdg_basedir
+private import sqlite3
+private import json_serialization
+
+redef class App
+       redef var data_store = new LinuxStore
+end
+
+private class LinuxStore
+       super DataStore
+
+       # File path of the Sqlite3 DB file
+       fun db_file: String do return "data_store.db"
+
+       # Sqlite3 table used
+       fun db_table: String do return "data_store"
+
+       private var db_cache: nullable Sqlite3DB = null
+
+       # Database to use to implement the `DataStore`
+       fun db: nullable Sqlite3DB
+       do
+               var db = db_cache
+               if db != null then return db
+
+               # Find DB path
+               var config_home = xdg_basedir.config_home.to_s
+               var config_dir = config_home.join_path(sys.program_name.basename(""))
+               if not config_dir.file_exists then config_dir.mkdir
+               var db_path = config_dir.join_path(db_file)
+
+               # Open DB connection
+               db = new Sqlite3DB.open(db_path)
+               if not db.is_open then
+                       app.log_error "Data store unavaible, cannot load/save data. (at '{db_path}' with '{db.error or else "unknown"}')"
+                       return null
+               end
+
+               # Create DB table
+               db.create_table "IF NOT EXISTS {db_table} (key TEXT PRIMARY KEY, value TEXT)"
+
+               db_cache = db
+               return db
+       end
+
+       redef fun [](key)
+       do
+               # Get DB
+               var db = self.db
+               if db == null then return null
+
+               # Prepare SELECT statement
+               var stmt = db.select("* FROM {db_table} WHERE key == {key.to_sql_string}")
+
+               # Execute statment
+               for row in stmt do
+                       # Get from statement
+                       var serialized = row[1].to_s
+                       stmt.close
+
+                       # Deserialize
+                       var deserializer = new JsonDeserializer(serialized)
+                       var deserialized = deserializer.deserialize
+
+                       return deserialized
+               end
+
+               stmt.close
+               return null
+       end
+
+       redef fun []=(key, value)
+       do
+               # Get DB
+               var db = self.db
+               if db == null then return
+
+               # Serialize
+               var stream = new StringOStream
+               var serializer = new JsonSerializer(stream)
+               serializer.serialize value
+               var serialized = stream.to_s
+
+               # Save in DB
+               db.execute "BEGIN TRANSACTION"
+               db.insert "OR REPLACE INTO {db_table} VALUES({key.to_sql_string}, {serialized.to_sql_string})"
+               db.execute "COMMIT"
+       end
+end
index 336fc3d..5b73d3b 100644 (file)
@@ -189,7 +189,7 @@ class MarkdownProcessor
                current_line = line
                current_block = root
                while current_line != null do
-                       current_line.kind(self).process(self)
+                       line_kind(current_line.as(not null)).process(self)
                end
                self.in_list = old_mode
                self.current_block = old_root
@@ -206,6 +206,61 @@ class MarkdownProcessor
        # Is the current recursion in list mode?
        # Used when visiting blocks with `recurse`
        private var in_list = false
+
+       # The type of line.
+       # see: `md_line_*`
+       fun line_kind(md: MDLine): Line do
+               var value = md.value
+               var leading = md.leading
+               var trailing = md.trailing
+               if md.is_empty then return new LineEmpty
+               if md.leading > 3 then return new LineCode
+               if value[leading] == '#' then return new LineHeadline
+               if value[leading] == '>' then return new LineBlockquote
+
+               if value.length - leading - trailing > 2 then
+                       if value[leading] == '`' and md.count_chars_start('`') >= 3 then
+                               return new LineFence
+                       end
+                       if value[leading] == '~' and md.count_chars_start('~') >= 3 then
+                               return new LineFence
+                       end
+               end
+
+               if value.length - leading - trailing > 2 and
+                  (value[leading] == '*' or value[leading] == '-' or value[leading] == '_') then
+                  if md.count_chars(value[leading]) >= 3 then
+                               return new LineHR
+                  end
+               end
+
+               if value.length - leading >= 2 and value[leading + 1] == ' ' then
+                       var c = value[leading]
+                       if c == '*' or c == '-' or c == '+' then return new LineUList
+               end
+
+               if value.length - leading >= 3 and value[leading].is_digit then
+                       var i = leading + 1
+                       while i < value.length and value[i].is_digit do i += 1
+                       if i + 1 < value.length and value[i] == '.' and value[i + 1] == ' ' then
+                               return new LineOList
+                       end
+               end
+
+               if value[leading] == '<' and md.check_html then return new LineXML
+
+               var next = md.next
+               if next != null and not next.is_empty then
+                       if next.count_chars('=') > 0 then
+                               return new LineHeadline1
+                       end
+                       if next.count_chars('-') > 0 then
+                               return new LineHeadline2
+                       end
+               end
+               return new LineOther
+       end
+
 end
 
 # Emit output corresponding to blocks content.
@@ -332,6 +387,7 @@ class LinkRef
        # Is the link an abreviation?
        var is_abbrev = false
 
+       # Create a link with a title.
        init with_title(link: String, title: nullable String) do
                self.link = link
                self.title = title
@@ -398,18 +454,46 @@ interface Decorator
 
        # Render a line break
        fun add_line_break(v: MarkdownEmitter) is abstract
+
+       # Generate a new html valid id from a `String`.
+       fun strip_id(txt: String): String is abstract
+
+       # Found headlines during the processing labeled by their ids.
+       fun headlines: ArrayMap[String, HeadLine] is abstract
+end
+
+# Class representing a markdown headline.
+class HeadLine
+       # Unique identifier of this headline.
+       var id: String
+
+       # Text of the headline.
+       var title: String
+
+       # Level of this headline.
+       #
+       # According toe the markdown specification, level must be in `[1..6]`.
+       var level: Int
 end
 
 # `Decorator` that outputs HTML.
 class HTMLDecorator
        super Decorator
 
+       redef var headlines = new ArrayMap[String, HeadLine]
+
        redef fun add_ruler(v, block) do v.add "<hr/>\n"
 
        redef fun add_headline(v, block) do
-               v.add "<h{block.depth}>"
+               # save headline
+               var txt = block.block.first_line.value
+               var id = strip_id(txt)
+               var lvl = block.depth
+               headlines[id] = new HeadLine(id, txt, lvl)
+               # output it
+               v.add "<h{lvl} id=\"{id}\">"
                v.emit_in block
-               v.add "</h{block.depth}>\n"
+               v.add "</h{lvl}>\n"
        end
 
        redef fun add_paragraph(v, block) do
@@ -544,6 +628,35 @@ class HTMLDecorator
                        end
                end
        end
+
+       redef fun strip_id(txt) do
+               # strip id
+               var b = new FlatBuffer
+               for c in txt do
+                       if c == ' ' then
+                               b.add '_'
+                       else
+                               if not c.is_letter and
+                                  not c.is_digit and
+                                  not allowed_id_chars.has(c) then continue
+                               b.add c
+                       end
+               end
+               var res = b.to_s
+               var key = res
+               # check for multiple id definitions
+               if headlines.has_key(key) then
+                       var i = 1
+                       key = "{res}_{i}"
+                       while headlines.has_key(key) do
+                               i += 1
+                               key = "{res}_{i}"
+                       end
+               end
+               return key
+       end
+
+       private var allowed_id_chars: Array[Char] = ['-', '_', ':', '.']
 end
 
 # A block of markdown lines.
@@ -689,7 +802,7 @@ class MDBlock
                var line = first_line
                while line != null do
                        if not line.is_empty then
-                               var kind = line.kind(v)
+                               var kind = v.line_kind(line)
                                if kind isa LineList then
                                        line.value = kind.extract_value(line)
                                else
@@ -802,13 +915,18 @@ end
 class BlockCode
        super Block
 
+       # Number of char to skip at the beginning of the line.
+       #
+       # Block code lines start at 4 spaces.
+       protected var line_start = 4
+
        redef fun emit(v) do v.decorator.add_code(v, self)
 
        redef fun emit_lines(v) do
                var line = block.first_line
                while line != null do
                        if not line.is_empty then
-                               v.decorator.append_code(v, line.value, 4, line.value.length)
+                               v.decorator.append_code(v, line.value, line_start, line.value.length)
                        end
                        v.addn
                        line = line.next
@@ -822,6 +940,9 @@ end
 # this class is only used for typing purposes.
 class BlockFence
        super BlockCode
+
+       # Fence code lines start at 0 spaces.
+       redef var line_start = 0
 end
 
 # A markdown headline.
@@ -878,7 +999,7 @@ abstract class BlockList
                var line = block.first_line
                line = line.next
                while line != null do
-                       var t = line.kind(v)
+                       var t = v.line_kind(line)
                        if t isa LineList or
                           (not line.is_empty and (line.prev_empty and line.leading == 0 and
                           not (t isa LineList))) then
@@ -990,6 +1111,7 @@ class MDLine
        # Is the next line empty?
        var next_empty: Bool = false is writable
 
+       # Initialize a new MDLine from its string value
        init(value: String) do
                self.value = value
                self.leading = process_leading
@@ -1009,57 +1131,6 @@ class MDLine
                if next != null then next.prev_empty = true
        end
 
-       # The type of line.
-       # see `md_line_*`
-       fun kind(v: MarkdownProcessor): Line do
-               var value = self.value
-               if is_empty then return new LineEmpty
-               if leading > 3 then return new LineCode
-               if value[leading] == '#' then return new LineHeadline
-               if value[leading] == '>' then return new LineBlockquote
-
-               if value.length - leading - trailing > 2 then
-                       if value[leading] == '`' and count_chars_start('`') >= 3 then
-                               return new LineFence
-                       end
-                       if value[leading] == '~' and count_chars_start('~') >= 3 then
-                               return new LineFence
-                       end
-               end
-
-               if value.length - leading - trailing > 2 and
-                  (value[leading] == '*' or value[leading] == '-' or value[leading] == '_') then
-                  if count_chars(value[leading]) >= 3 then
-                               return new LineHR
-                  end
-               end
-
-               if value.length - leading >= 2 and value[leading + 1] == ' ' then
-                       var c = value[leading]
-                       if c == '*' or c == '-' or c == '+' then return new LineUList
-               end
-
-               if value.length - leading >= 3 and value[leading].is_digit then
-                       var i = leading + 1
-                       while i < value.length and value[i].is_digit do i += 1
-                       if i + 1 < value.length and value[i] == '.' and value[i + 1] == ' ' then
-                               return new LineOList
-                       end
-               end
-
-               if value[leading] == '<' and check_html then return new LineXML
-
-               if next != null and not next.is_empty then
-                       if next.count_chars('=') > 0 then
-                               return new LineHeadline1
-                       end
-                       if next.count_chars('-') > 0 then
-                               return new LineHeadline2
-                       end
-               end
-               return new LineOther
-       end
-
        # Number or leading spaces on this line.
        var leading: Int = 0 is writable
 
@@ -1148,7 +1219,7 @@ class MDLine
                                        pos += 1
                                end
                                if pos >= line.value.length then
-                                       if line.value[pos - 2] == '/' then
+                                       if pos - 2 >= 0 and line.value[pos - 2] == '/' then
                                                tags.pop
                                                if tags.is_empty then
                                                        xml_end_line = line
@@ -1247,7 +1318,7 @@ class LineOther
                # go to block end
                var was_empty = line.prev_empty
                while line != null and not line.is_empty do
-                       var t = line.kind(v)
+                       var t = v.line_kind(line)
                        if v.in_list and t isa LineList then
                                break
                        end
@@ -1261,7 +1332,6 @@ class LineOther
                        line = line.next
                end
                # build block
-               var bk: Block
                if line != null and not line.is_empty then
                        var block = v.current_block.split(line.prev.as(not null))
                        if v.in_list and not was_empty then
@@ -1295,7 +1365,7 @@ class LineCode
        redef fun process(v) do
                var line = v.current_line
                # lookup block end
-               while line != null and (line.is_empty or line.kind(v) isa LineCode) do
+               while line != null and (line.is_empty or v.line_kind(line) isa LineCode) do
                        line = line.next
                end
                # split at block end line
@@ -1336,7 +1406,7 @@ class LineBlockquote
                while line != null do
                        if not line.is_empty and (line.prev_empty and
                           line.leading == 0 and
-                          not line.kind(v) isa LineBlockquote) then break
+                          not v.line_kind(line) isa LineBlockquote) then break
                        line = line.next
                end
                # build sub block
@@ -1378,7 +1448,7 @@ class LineFence
                # go to fence end
                var line = v.current_line.next
                while line != null do
-                       if line.kind(v) isa LineFence then break
+                       if v.line_kind(line) isa LineFence then break
                        line = line.next
                end
                if line != null then
@@ -1393,7 +1463,8 @@ class LineFence
                end
                block.kind = new BlockFence(block)
                block.first_line.clear
-               if block.last_line.kind(v) isa LineFence then
+               var last = block.last_line
+               if last != null and v.line_kind(last) isa LineFence then
                        block.last_line.clear
                end
                block.remove_surrounding_empty_lines
@@ -1412,8 +1483,6 @@ class LineHeadline
                var block = v.current_block.split(line.as(not null))
                var kind = new BlockHeadline(block)
                block.kind = kind
-               # TODO block ID
-               # block.id = block.first_line.strip_id
                kind.transform_headline(block)
                v.current_block.remove_leading_empty_lines
                v.current_line = v.current_block.first_line
@@ -1432,8 +1501,6 @@ class LineHeadline1
                var block = v.current_block.split(line.as(not null))
                var kind = new BlockHeadline(block)
                kind.depth = 1
-               # TODO block ID
-               # block.id = block.first_line.strip_id
                kind.transform_headline(block)
                block.kind = kind
                v.current_block.remove_leading_empty_lines
@@ -1453,8 +1520,6 @@ class LineHeadline2
                var block = v.current_block.split(line.as(not null))
                var kind = new BlockHeadline(block)
                kind.depth = 2
-               # TODO block ID
-               # block.id = block.first_line.strip_id
                kind.transform_headline(block)
                block.kind = kind
                v.current_block.remove_leading_empty_lines
@@ -1471,7 +1536,7 @@ class LineList
                var line = v.current_line
                # go to list end
                while line != null do
-                       var t = line.kind(v)
+                       var t = v.line_kind(line)
                        if not line.is_empty and (line.prev_empty and line.leading == 0 and
                           not t isa LineList) then break
                        line = line.next
@@ -1504,6 +1569,7 @@ class LineList
        # Create a new block kind based on this line.
        protected fun block_kind(block: MDBlock): BlockList is abstract
 
+       # Extract string value from `MDLine`.
        protected fun extract_value(line: MDLine): String is abstract
 end
 
@@ -1906,7 +1972,6 @@ redef class Text
                var c0: Char
                var c1: Char
                var c2: Char
-               var c3: Char
 
                if pos > 0 then
                        c0 = self[pos - 1]
@@ -1925,11 +1990,6 @@ redef class Text
                else
                        c2 = ' '
                end
-               if pos + 3 < length then
-                       c3 = self[pos + 3]
-               else
-                       c3 = ' '
-               end
 
                if c == '*' then
                        if c1 == '*' then
index 6dba442..dd7fd58 100644 (file)
@@ -93,7 +93,10 @@ This is a H1
 This is a H2
 -------------
 """
-               var exp = "<h1>This is a H1</h1>\n<h2>This is a H2</h2>\n"
+               var exp = """
+<h1 id="This_is_a_H1">This is a H1</h1>
+<h2 id="This_is_a_H2">This is a H2</h2>
+"""
                var res = test.md_to_html.write_to_string
                assert res == exp
        end
@@ -105,7 +108,11 @@ This is a H2
 ## This is a H2
 ###### This is a H6
 """
-               var exp = "<h1>This is a H1</h1>\n<h2>This is a H2</h2>\n<h6>This is a H6</h6>\n"
+               var exp = """
+<h1 id="This_is_a_H1">This is a H1</h1>
+<h2 id="This_is_a_H2">This is a H2</h2>
+<h6 id="This_is_a_H6">This is a H6</h6>
+"""
                var res = test.md_to_html.write_to_string
                assert res == exp
        end
@@ -118,7 +125,11 @@ This is a H2
 
 ### This is a H3 ######
 """
-               var exp = "<h1>This is a H1</h1>\n<h2>This is a H2</h2>\n<h3>This is a H3</h3>\n"
+               var exp = """
+<h1 id="This_is_a_H1">This is a H1</h1>
+<h2 id="This_is_a_H2">This is a H2</h2>
+<h3 id="This_is_a_H3">This is a H3</h3>
+"""
                var res = test.md_to_html.write_to_string
                assert res == exp
        end
@@ -437,6 +448,63 @@ end tell
                assert res == exp
        end
 
+       fun test_process_code3 do
+               var test = """
+Here is an example of AppleScript:
+~~~
+tell application "Foo"
+    beep
+end tell
+
+<div class="footer">
+    &copy; 2004 Foo Corporation
+</div>
+~~~
+"""
+               var exp = """
+<p>Here is an example of AppleScript:</p>
+<pre><code>tell application "Foo"
+    beep
+end tell
+
+&lt;div class="footer"&gt;
+    &amp;copy; 2004 Foo Corporation
+&lt;/div&gt;
+</code></pre>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_code4 do
+               var test = """
+Here is an example of AppleScript:
+```
+tell application "Foo"
+    beep
+end tell
+
+<div class="footer">
+    &copy; 2004 Foo Corporation
+</div>
+```
+"""
+               var exp = """
+<p>Here is an example of AppleScript:</p>
+<pre><code>tell application "Foo"
+    beep
+end tell
+
+&lt;div class="footer"&gt;
+    &amp;copy; 2004 Foo Corporation
+&lt;/div&gt;
+</code></pre>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+
        fun test_process_nesting1 do
                var test = """
 > ## This is a header.
@@ -450,7 +518,7 @@ end tell
 """
                var exp = """
 <blockquote>
-<h2>This is a header.</h2>
+<h2 id="This_is_a_header.">This is a header.</h2>
 <ol>
 <li>This is the first list item.</li>
 <li>This is the second list item.</li>
@@ -1951,7 +2019,7 @@ Same thing but with paragraphs:
 """
 
                var exp = """
-<h2>Unordered</h2>
+<h2 id="Unordered">Unordered</h2>
 <p>Asterisks tight:</p>
 <ul>
 <li>asterisk 1</li>
@@ -1999,7 +2067,7 @@ Same thing but with paragraphs:
 <li><p>Minus 3</p>
 </li>
 </ul>
-<h2>Ordered</h2>
+<h2 id="Ordered">Ordered</h2>
 <p>Tight:</p>
 <ol>
 <li>First</li>
@@ -2041,7 +2109,7 @@ back.</p>
 <li><p>Item 3.</p>
 </li>
 </ol>
-<h2>Nested</h2>
+<h2 id="Nested">Nested</h2>
 <ul>
 <li>Tab<ul>
 <li>Tab<ul>
@@ -2383,51 +2451,51 @@ class TestLine
        fun test_line_type do
                var v = new MarkdownProcessor
                subject = new MDLine("")
-               assert subject.kind(v) isa LineEmpty
+               assert v.line_kind(subject) isa LineEmpty
                subject = new MDLine("    ")
-               assert subject.kind(v) isa LineEmpty
+               assert v.line_kind(subject) isa LineEmpty
                subject = new MDLine("text   ")
-               assert subject.kind(v) isa LineOther
+               assert v.line_kind(subject) isa LineOther
                subject = new MDLine("  # Title")
-               assert subject.kind(v) isa LineHeadline
+               assert v.line_kind(subject) isa LineHeadline
                subject = new MDLine("  ### Title")
-               assert subject.kind(v) isa LineHeadline
+               assert v.line_kind(subject) isa LineHeadline
                subject = new MDLine("    code")
-               assert subject.kind(v) isa LineCode
+               assert v.line_kind(subject) isa LineCode
                subject = new MDLine("  ~~~")
-               assert subject.kind(v) isa LineFence
+               assert v.line_kind(subject) isa LineFence
                subject = new MDLine("  ```")
-               assert subject.kind(v) isa LineFence
+               assert v.line_kind(subject) isa LineFence
                subject = new MDLine("   Title  ")
                subject.next = new MDLine("== ")
-               assert subject.kind(v) isa LineHeadline1
+               assert v.line_kind(subject) isa LineHeadline1
                subject = new MDLine("   Title  ")
                subject.next = new MDLine("-- ")
-               assert subject.kind(v) isa LineHeadline2
+               assert v.line_kind(subject) isa LineHeadline2
                subject = new MDLine("  *    *   * ")
-               assert subject.kind(v) isa LineHR
+               assert v.line_kind(subject) isa LineHR
                subject = new MDLine("  *** ")
-               assert subject.kind(v) isa LineHR
+               assert v.line_kind(subject) isa LineHR
                subject = new MDLine("- -- ")
-               assert subject.kind(v) isa LineHR
+               assert v.line_kind(subject) isa LineHR
                subject = new MDLine("--------- ")
-               assert subject.kind(v) isa LineHR
+               assert v.line_kind(subject) isa LineHR
                subject = new MDLine(" >")
-               assert subject.kind(v) isa LineBlockquote
+               assert v.line_kind(subject) isa LineBlockquote
                subject = new MDLine("<p></p>")
-               assert subject.kind(v) isa LineXML
+               assert v.line_kind(subject) isa LineXML
                subject = new MDLine("<p>")
-               assert subject.kind(v) isa LineOther
+               assert v.line_kind(subject) isa LineOther
                subject = new MDLine("  * foo")
-               assert subject.kind(v) isa LineUList
+               assert v.line_kind(subject) isa LineUList
                subject = new MDLine("- foo")
-               assert subject.kind(v) isa LineUList
+               assert v.line_kind(subject) isa LineUList
                subject = new MDLine("+ foo")
-               assert subject.kind(v) isa LineUList
+               assert v.line_kind(subject) isa LineUList
                subject = new MDLine("1. foo")
-               assert subject.kind(v) isa LineOList
+               assert v.line_kind(subject) isa LineOList
                subject = new MDLine("   11111. foo")
-               assert subject.kind(v) isa LineOList
+               assert v.line_kind(subject) isa LineOList
        end
 
        fun test_count_chars do
@@ -2456,3 +2524,44 @@ class TestLine
                assert subject.count_chars_start('*') == 0
        end
 end
+
+class TestHTMLDecorator
+       super TestSuite
+
+       fun test_headlines do
+               var test = """
+# **a**
+## a.a
+### a.a.b
+### a.a.b
+## a.b
+# [b](test)
+## b.a
+### b.a.c
+## b.b
+## b.c
+# c
+"""
+               var proc = new MarkdownProcessor
+               var decorator = proc.emitter.decorator.as(HTMLDecorator)
+               proc.process(test)
+               var res = ""
+               for id, headline in decorator.headlines do
+                       res += "{headline.title}:{id}\n"
+               end
+               var exp = """
+**a**:a
+a.a:a.a
+a.a.b:a.a.b
+a.a.b:a.a.b_1
+a.b:a.b
+[b](test):btest
+b.a:b.a
+b.a.c:b.a.c
+b.b:b.b
+b.c:b.c
+c:c
+"""
+               assert res == exp
+       end
+end
index e1d2e73..440187a 100644 (file)
@@ -19,6 +19,7 @@ module linux_app
 import mnit
 import sdl
 import linux_opengles1
+import linux
 
 in "C" `{
        #include <EGL/egl.h>
index 06001df..02edcaf 100644 (file)
@@ -348,6 +348,86 @@ redef class String
                return "{self}/{path}"
        end
 
+       # Alias for `join_path`
+       #
+       #     assert "hello" / "world"      ==  "hello/world"
+       #     assert "hel/lo" / "wor/ld"    ==  "hel/lo/wor/ld"
+       #     assert "" / "world"           ==  "world"
+       #     assert "/hello" / "/world"    ==  "/world"
+       #
+       # This operator is quite useful for chaining changes of path.
+       # The next one being relative to the previous one.
+       #
+       #     var a = "foo"
+       #     var b = "/bar"
+       #     var c = "baz/foobar"
+       #     assert a/b/c == "/bar/baz/foobar"
+       fun /(path: String): String do return join_path(path)
+
+       # Returns the relative path needed to go from `self` to `dest`.
+       #
+       #     assert "/foo/bar".relpath("/foo/baz") == "../baz"
+       #     assert "/foo/bar".relpath("/baz/bar") == "../../baz/bar"
+       #
+       # If `self` or `dest` is relative, they are considered relatively to `getcwd`.
+       #
+       # In some cases, the result is still independent of the current directory:
+       #
+       #     assert "foo/bar".relpath("..") == "../../.."
+       #
+       # In other cases, parts of the current directory may be exhibited:
+       #
+       #     var p = "../foo/bar".relpath("baz")
+       #     var c = getcwd.basename("")
+       #     assert p == "../../{c}/baz"
+       #
+       # For path resolution independent of the current directory (eg. for paths in URL),
+       # or to use an other starting directory than the current directory,
+       # just force absolute paths:
+       #
+       #     var start = "/a/b/c/d"
+       #     var p2 = (start/"../foo/bar").relpath(start/"baz")
+       #     assert p2 == "../../d/baz"
+       #
+       #
+       # Neither `self` or `dest` has to be real paths or to exist in directories since
+       # the resolution is only done with string manipulations and without any access to
+       # the underlying file system.
+       #
+       # If `self` and `dest` are the same directory, the empty string is returned:
+       #
+       #     assert "foo".relpath("foo") == ""
+       #     assert "foo/../bar".relpath("bar") == ""
+       #
+       # The empty string and "." designate both the current directory:
+       #
+       #     assert "".relpath("foo/bar")  == "foo/bar"
+       #     assert ".".relpath("foo/bar") == "foo/bar"
+       #     assert "foo/bar".relpath("")  == "../.."
+       #     assert "/" + "/".relpath(".") == getcwd
+       fun relpath(dest: String): String
+       do
+               var cwd = getcwd
+               var from = (cwd/self).simplify_path.split("/")
+               if from.last.is_empty then from.pop # case for the root directory
+               var to = (cwd/dest).simplify_path.split("/")
+               if to.last.is_empty then to.pop # case for the root directory
+
+               # Remove common prefixes
+               while not from.is_empty and not to.is_empty and from.first == to.first do
+                       from.shift
+                       to.shift
+               end
+
+               # Result is going up in `from` with ".." then going down following `to`
+               var from_len = from.length
+               if from_len == 0 then return to.join("/")
+               var up = "../"*(from_len-1) + ".."
+               if to.is_empty then return up
+               var res = up + "/" + to.join("/")
+               return res
+       end
+
        # Create a directory (and all intermediate directories if needed)
        fun mkdir
        do
index 7db6fa3..ba4db63 100644 (file)
@@ -51,6 +51,16 @@ redef class Int
                if self > o then return (self - o).rshift(1).gcd(o)
                return (o - self).rshift(1).gcd(self)
        end
+
+       # Is `self` even ?
+       #
+       #    assert 12.is_even
+       fun is_even: Bool do return self % 2 == 0
+
+       # Is `self` odd ?
+       #
+       #    assert not 13.is_even
+       fun is_odd: Bool do return not is_even
 end
 
 redef class Float
index 7baabd2..97cb7cb 100644 (file)
@@ -180,7 +180,7 @@ class Regex
        private var native: nullable NativeRegex = null
 
        # Cache of a single `regmatch_t` to prevent many calls to `malloc`
-       private var native_match = new NativeMatchArray.malloc(0) is lazy
+       private var native_match = new NativeMatchArray.malloc(1) is lazy
 
        # `cflags` of the last successful `compile`
        private var cflags_cache = 0
index cbd86f1..a81bdd6 100644 (file)
@@ -624,6 +624,14 @@ abstract class Text
                end
        end
 
+       # Escape string used in labels for graphviz
+       #
+       #   assert ">><<".escape_to_dot == "\\>\\>\\<\\<"
+       fun escape_to_dot: String
+       do
+               return escape_more_to_c("|\{\}<>")
+       end
+
        # Flat representation of self
        fun flatten: FlatText is abstract
 
diff --git a/lib/template/macro.nit b/lib/template/macro.nit
new file mode 100644 (file)
index 0000000..0b1c9e4
--- /dev/null
@@ -0,0 +1,375 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# String templating using macros.
+#
+# There is plenty of macro/templating tools in the worl,
+# yet another one.
+#
+# See `TemplateString` for more details.
+module macro
+
+import template
+
+# Template with macros replacement.
+#
+# `TemplateString` provides a simple way to customize generic string templates
+# using macros and replacement.
+#
+# A macro is represented as a string identifier like `%MACRO%` in the template
+# string. Using `TemplateString`, macros can be replaced by any `Streamable` data:
+#
+#    var tpl = new TemplateString("Hello %NAME%!")
+#    tpl.replace("NAME", "Dave")
+#    assert tpl.write_to_string == "Hello Dave!"
+#
+# A macro identifier is valid if:
+#
+# * starts with an uppercase letter
+# * contains only numers, uppercase letters or '_'
+#
+# See `String::is_valid_macro_name` for more details.
+#
+# ## External template files
+#
+# When using large template files it's recommanded to use external template files.
+#
+# In external file `example.tpl`:
+#
+#    <!DOCTYPE html>
+#    <html lang="en">
+#     <head>
+#      <title>%TITLE%</title>
+#     </head>
+#     <body>
+#      <h1>%TITLE%</h1>
+#      <p>%ARTICLE%</p>
+#     </body>
+#    </html>
+#
+# Loading the template file using `TemplateString`:
+#
+#    var file = "example.tpl"
+#    if file.file_exists then
+#        tpl = new TemplateString.from_file("example.tpl")
+#        tpl.replace("TITLE", "Home Page")
+#        tpl.replace("ARTICLE", "Welcome on my site!")
+#    end
+#
+# ## Outputting
+#
+# Once macro replacement has been made, the `TemplateString` can be
+# output like any other `Template` using methods like `write_to`, `write_to_string`
+# or `write_to_file`.
+#
+#    tpl = new TemplateString("Hello %NAME%!")
+#    tpl.replace("NAME", "Dave")
+#    assert tpl.write_to_string == "Hello Dave!"
+#
+# ## Template correctness
+#
+# `TemplateString` can be outputed even if all macros were not replaced.
+# In this case, the name of the macro will be displayed wuthout any replacement.
+#
+#    tpl = new TemplateString("Hello %NAME%!")
+#    assert tpl.write_to_string == "Hello %NAME%!"
+#
+# The `check` method can be used to ensure that all macros were replaced before
+# performing the output. Warning messages will be stored in `warnings` and can
+# be used to locate unreplaced macros.
+#
+#    tpl = new TemplateString("Hello %NAME%!")
+#    if not tpl.check then
+#        assert not tpl.warnings.is_empty
+#        print "Cannot output unfinished template:"
+#        print tpl.warnings.join("\n")
+#        exit(0)
+#    else
+#        tpl.write_to sys.stdout
+#    end
+#    assert tpl.write_to_string == "Hello %NAME%!"
+class TemplateString
+       super Template
+
+       # Template original text.
+       private var tpl_text: String
+
+       # Macros contained in the template file.
+       private var macros = new HashMap[String, Array[TemplateMacro]]
+
+       # Macro identifier delimiter char (`'%'` by default).
+       #
+       # To use a different delimiter you can subclasse `TemplateString` and defined the `marker`.
+       #
+       #    class DollarTemplate
+       #        super TemplateString
+       #        redef var marker = '$'
+       #    end
+       #    var tpl = new DollarTemplate("Hello $NAME$!")
+       #    tpl.replace("NAME", "Dave")
+       #    assert tpl.write_to_string == "Hello Dave!"
+       protected var marker = '%'
+
+       # Creates a new template from a `text`.
+       #
+       #    var tpl = new TemplateString("Hello %NAME%!")
+       #    assert tpl.write_to_string == "Hello %NAME%!"
+       init(text: String) do
+               self.tpl_text = text
+               parse
+       end
+
+       # Creates a new template from the contents of `file`.
+       init from_file(file: String) do
+               init load_template_file(file)
+       end
+
+       # Loads the template file contents.
+       private fun load_template_file(tpl_file: String): String do
+               var file = new IFStream.open(tpl_file)
+               var text = file.read_all
+               file.close
+               return text
+       end
+
+       # Finds all the macros contained in `text` and store them in `macros`.
+       #
+       # Also build `self` template parts using original template text.
+       private fun parse do
+               var text = tpl_text
+               var chars = text.chars
+               var pos = 0
+               var out = new FlatBuffer
+               var start_pos: Int
+               var end_pos: Int
+               while pos < text.length do
+                       # lookup opening tag
+                       start_pos = text.read_until_char(pos, marker, out)
+                       if start_pos < 0 then
+                               text.read_until_pos(pos, text.length, out)
+                               add out.to_s
+                               break
+                       end
+                       add out.to_s
+                       pos = start_pos + 1
+                       # lookup closing tag
+                       out.clear
+                       end_pos = text.read_until_char(pos, marker, out)
+                       if end_pos < 0 then
+                               text.read_until_pos(pos, text.length, out)
+                               add "%"
+                               add out.to_s
+                               break
+                       end
+                       pos = end_pos + 1
+                       # check macro
+                       var name = out.to_s
+                       if name.is_valid_macro_name then
+                               add make_macro(name, start_pos, end_pos)
+                       else
+                               add "%"
+                               add name
+                               add "%"
+                       end
+                       out.clear
+               end
+       end
+
+       # Add a new macro to the list
+       private fun make_macro(name: String, start_pos, end_pos: Int): TemplateMacro do
+               if not macros.has_key(name) then
+                       macros[name] = new Array[TemplateMacro]
+               end
+               var macro = new TemplateMacro(name, start_pos, end_pos)
+               macros[name].add macro
+               return macro
+       end
+
+       # Available macros in `self`.
+       #
+       #    var tpl = new TemplateString("Hello %NAME%!")
+       #    assert tpl.macro_names.first == "NAME"
+       fun macro_names: Collection[String] do return macros.keys
+
+       # Does `self` contain a macro with `name`.
+       #
+       #    var tpl = new TemplateString("Hello %NAME%")
+       #    assert tpl.has_macro("NAME")
+       fun has_macro(name: String): Bool do return macro_names.has(name)
+
+       # Replace a `macro` by a streamable `replacement`.
+       #
+       # REQUIRE `has_macro(name)`
+       #
+       #    var tpl = new TemplateString("Hello %NAME%!")
+       #    tpl.replace("NAME", "Dave")
+       #    assert tpl.write_to_string == "Hello Dave!"
+       fun replace(name: String, replacement: Streamable) do
+               assert has_macro(name)
+               for macro in macros[name] do
+                       macro.replacement = replacement
+               end
+       end
+
+       # Check if all macros were replaced.
+       #
+       # Return false if a macro was not replaced and store message in `warnings`.
+       #
+       #    var tpl = new TemplateString("Hello %FIRSTNAME%, %LASTNAME%!")
+       #    assert not tpl.check
+       #    tpl.replace("FIRSTNAME", "Corben")
+       #    tpl.replace("LASTNAME", "Dallas")
+       #    assert tpl.check
+       fun check: Bool do
+               warnings.clear
+               var all_ok = true
+               for name, macros in self.macros do
+                       for macro in macros do
+                               if not macro.is_replaced then
+                                       all_ok = false
+                                       warnings.add "No replacement for macro %{macro.name}% at {macro.location}"
+                               end
+                       end
+               end
+               return all_ok
+       end
+
+       # Last `check` warnings.
+       #
+       #    var tpl = new TemplateString("Hello %FIRSTNAME%, %LASTNAME%!")
+       #    tpl.check
+       #    assert tpl.warnings.length == 2
+       #    assert tpl.warnings[0] == "No replacement for macro %FIRSTNAME% at (6:16)"
+       #    assert tpl.warnings[1] == "No replacement for macro %LASTNAME% at (19:28)"
+       #    tpl.replace("FIRSTNAME", "Corben")
+       #    tpl.replace("LASTNAME", "Dallas")
+       #    tpl.check
+       #    assert tpl.warnings.is_empty
+       var warnings = new Array[String]
+
+       # Returns a view on `self` macros on the form `macro.name`/`macro.replacement`.
+       #
+       # Given that all macros with the same name are all replaced with the same
+       # replacement, this view contains only one entry for each name.
+       #
+       #    var tpl = new TemplateString("Hello %FIRSTNAME%, %LASTNAME%!")
+       #    for name, rep in tpl do assert rep == null
+       #    tpl.replace("FIRSTNAME", "Corben")
+       #    tpl.replace("LASTNAME", "Dallas")
+       #    for name, rep in tpl do assert rep != null
+       fun iterator: MapIterator[String, nullable Streamable] do
+               return new TemplateStringIterator(self)
+       end
+end
+
+# A macro is a special text command that is replaced by other content in a `TemplateString`.
+private class TemplateMacro
+       super Template
+       # Macro name as found in the template.
+       var name: String
+
+       # Macro starting position in template.
+       var start_pos: Int
+
+       # Macro ending position in template.
+       var end_pos: Int
+
+       # Macro replacement if any.
+       var replacement: nullable Streamable = null
+
+       # Does `self` already have a `replacement`?
+       fun is_replaced: Bool do return replacement != null
+
+       # Render `replacement` or else `name`.
+       redef fun rendering do
+               if is_replaced then
+                       add replacement.as(not null)
+               else
+                       add "%{name}%"
+               end
+       end
+
+       # Human readable location.
+       fun location: String do return "({start_pos}:{end_pos})"
+end
+
+redef class String
+       # Reads `self` from pos `from` to pos `to` and store result in `buffer`.
+       private fun read_until_pos(from, to: Int, buffer: Buffer): Int do
+               if from < 0 or from >= length or
+                  to < 0 or to >= length or
+              from >= to then return -1
+               var pos = from
+               while pos < to do
+                       buffer.add self[pos]
+                       pos += 1
+               end
+               return pos
+       end
+
+       # Reads `self` until `to` is encountered and store result in `buffer`.
+       #
+       # Returns `to` position or `-1` if not found.
+       private fun read_until_char(from: Int, char: Char, buffer: Buffer): Int do
+               if from < 0 or from >= length then return -1
+               var pos = from
+               while pos > -1 and pos < length do
+                       var c = self[pos]
+                       if c == char then return pos
+                       buffer.add c
+                       pos += 1
+               end
+               return -1
+       end
+
+       # Is `self` a valid macro identifier?
+       #
+       # A macro identifier is valid if:
+       #
+       # * starts with an uppercase letter
+       # * contains only numers, uppercase letters or '_'
+       #
+       #    # valid
+       #    assert "NAME".is_valid_macro_name
+       #    assert "FIRST_NAME".is_valid_macro_name
+       #    assert "BLOCK1".is_valid_macro_name
+       #    # invalid
+       #    assert not "1BLOCK".is_valid_macro_name
+       #    assert not "_BLOCK".is_valid_macro_name
+       #    assert not "FIRST NAME".is_valid_macro_name
+       #    assert not "name".is_valid_macro_name
+       fun is_valid_macro_name: Bool do
+               if not first.is_upper then return false
+               for c in self do
+                       if not c.is_upper and c != '_' and not c.is_digit then return false
+               end
+               return true
+       end
+end
+
+private class TemplateStringIterator
+       super MapIterator[String, nullable Streamable]
+
+       private var subject: TemplateString
+       private var key_it: Iterator[String] is noinit
+
+       init do
+               self.key_it = subject.macro_names.iterator
+       end
+
+       redef fun is_ok do return key_it.is_ok
+       redef fun next do key_it.next
+       redef fun key do return key_it.item
+       redef fun item do return subject.macros[key].first.replacement
+end
similarity index 100%
rename from lib/template.nit
rename to lib/template/template.nit
diff --git a/lib/template/test_macro.nit b/lib/template/test_macro.nit
new file mode 100644 (file)
index 0000000..b2854e6
--- /dev/null
@@ -0,0 +1,211 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module test_macro is test_suite
+
+import test_suite
+import macro
+
+class TestTemplateString
+       super TestSuite
+
+       fun test_tpl_parse_1 do
+               var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <title>Dave's Profile</title>
+  </head>
+  <body>
+    <h1>Dave</h1>
+       <p>Profile</p>
+  </body>
+</html>"""
+               var subject = new TemplateString(tpl)
+               var res = subject.write_to_string
+               assert res == tpl
+       end
+
+       fun test_tpl_parse_2 do
+               var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <title>%TITLE%</title>
+  </head>
+  <body>
+    <h1>%TITLE%</h1>
+       <p>%ARTICLE%</p>
+  </body>
+</html>"""
+               var subject = new TemplateString(tpl)
+               var res = subject.write_to_string
+               assert res == tpl
+       end
+
+       fun test_tpl_parse_3 do
+               var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <title>%</title>
+  </head>
+</html>"""
+               var subject = new TemplateString(tpl)
+               var res = subject.write_to_string
+               assert res == tpl
+       end
+
+       fun test_tpl_parse_4 do
+               var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <title>%</title>
+  </head>
+  <body>
+    <h1>%</h1>
+  </body>
+</html>"""
+               var subject = new TemplateString(tpl)
+               var res = subject.write_to_string
+               assert res == tpl
+       end
+
+       fun test_tpl_parse_5 do
+               var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <title>%</title>
+  </head>
+  <body>
+    <h1>%TITLE%</h1>
+       <p>%ARTICLE%</p>
+  </body>
+</html>"""
+               var subject = new TemplateString(tpl)
+               var res = subject.write_to_string
+               assert res == tpl
+       end
+
+       fun test_tpl_parse_6 do
+               var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <title>%</title>
+  </head>
+  <body>
+    <h1>%%</h1>
+  </body>
+</html>"""
+               var subject = new TemplateString(tpl)
+               var res = subject.write_to_string
+               assert res == tpl
+       end
+
+       fun test_tpl_replace_1 do
+               var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <title>%TITLE%</title>
+  </head>
+  <body>
+    <h1>%TITLE%</h1>
+       <p>%ARTICLE%</p>
+  </body>
+</html>"""
+               var exp = """
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <title>Hello World!</title>
+  </head>
+  <body>
+    <h1>Hello World!</h1>
+       <p>%ARTICLE%</p>
+  </body>
+</html>"""
+               var subject = new TemplateString(tpl)
+               subject.replace("TITLE", "Hello World!")
+               var res = subject.write_to_string
+               assert res == exp
+       end
+
+       fun test_tpl_replace_2 do
+               var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <title>%TITLE%</title>
+  </head>
+  <body>
+    <h1>%TITLE%</h1>
+       <p>%BODY%</p>
+  </body>
+</html>"""
+               var exp = """
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <title>Hello World!</title>
+  </head>
+  <body>
+    <h1>Hello World!</h1>
+       <p>Some body you want to know...</p>
+  </body>
+</html>"""
+               var subject = new TemplateString(tpl)
+               subject.replace("TITLE", "Hello World!")
+               subject.replace("BODY", "Some body you want to know...")
+               var res = subject.write_to_string
+               assert res == exp
+       end
+
+       fun test_tpl_replace_3 do
+               var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <title>%TITLE%</title>
+  </head>
+  <body>
+    <h1>%TITLE%</h1>
+       <p>%BODY%</p>
+  </body>
+</html>"""
+               var exp = """
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <title>Hello World!</title>
+  </head>
+  <body>
+    <h1>Hello World!</h1>
+       <p><a href="#">Click me!</a></p>
+  </body>
+</html>"""
+               var link = new Template
+               var subject = new TemplateString(tpl)
+               subject.replace("TITLE", "Hello World!")
+               subject.replace("BODY", link)
+               link.add "<a href=\"#\">"
+               link.add "Click me!"
+               link.add "</a>"
+               var res = subject.write_to_string
+               assert res == exp
+       end
+end
diff --git a/misc/jenkins/listnit.sh b/misc/jenkins/listnit.sh
new file mode 100755 (executable)
index 0000000..2d38c2f
--- /dev/null
@@ -0,0 +1,50 @@
+#!/bin/sh
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This program list git-registered nit files that correspond to real compilable modules.
+# Real modules exclude basic tests and broken files.
+# Note: `make full` is required in order to build potential generated dependencies.
+#
+# With the flag `-I`, the list of required -I options is also generated.
+# Thus, it allows to use the command as arguments of tools.
+#
+#     nitmetrics `./listnit.sh -I`
+
+# Filepaths of modules to exclude (regular expression)
+exclude="parser_abs.nit\|nitcc_lexer0"
+
+# Directories needed for explicit -I options.
+includedirs="src contrib/tnitter/src/ contrib/benitlux/src/ examples/ contrib/wiringPi/lib/"
+
+# Flag -I
+incl=""
+if test "$1" = "-I"; then
+       incl=true
+       shift
+fi
+
+# Get the relative directory to the root of the workdir
+p=`git rev-parse --show-cdup`
+
+# List files
+git ls-files "${p}src/**.nit" "${p}lib/**.nit" "${p}contrib/**.nit" "${p}examples/**.nit" | \
+       grep -v "$exclude" | tee listnit.out
+
+# List -I if needed
+if test -n "$incl"; then
+       for i in $includedirs; do
+               echo "-I $p$i"
+       done
+fi
index 586b151..22494b7 100644 (file)
@@ -38,7 +38,7 @@ function! SyntaxCheckers_nit_nitg_IsAvailable()
 endfunction
 
 function! SyntaxCheckers_nit_nitg_GetLocList()
-       let makeprg = s:nitg . " --no-color --only-metamodel "
+       let makeprg = s:nitg . " --no-color --only-metamodel -W "
 
        " custom NIT_DIR
        if exists('g:syntastic_nit_dir')
index 0fd73b7..a6084f7 100644 (file)
@@ -33,6 +33,15 @@ h3 {
        margin: 10px 0;
 }
 
+article {
+       padding: 10px 0px;
+}
+
+article.nospace {
+       padding: 0;
+       margin: 0;
+}
+
 /*
  * Sidebar
  */
@@ -178,10 +187,6 @@ h3 {
        display: none;
 }
 
-#content article {
-       padding: 10px 0px;
-}
-
 #content article:target {
        padding-left: 10px;
        margin-left: -10px;
@@ -221,7 +226,7 @@ h3 {
        vertical-align: middle;
 }
 
-.signature a, .list-definition a {
+.signature a, .list-definition a, .info.signature a {
        color: #0d8921;
 }
 
@@ -241,7 +246,7 @@ h3 {
        text-align: center;
 }
 
-.synopsys {
+.nitdoc .synopsys {
        margin: 5px 0;
        font-size: 16px;
        font-weight: bold;
index e0aceee..219b61a 100644 (file)
@@ -41,7 +41,7 @@ private class ASTPrinterVisitor
                has_eol = true
        end
 
-       var last_current: nullable ANode
+       var last_current: nullable ANode = null
 
        fun write(s: String)
        do
@@ -109,7 +109,7 @@ end
 redef class ANewExpr
        redef fun accept_printer(v)
        do
-               v.write("new {mtype.as(not null)}.{mproperty.as(not null)}")
+               v.write("new {mtype.as(not null)}.{callsite.mproperty}")
                if not n_args.n_exprs.is_empty then
                        v.write("(")
                        v.indent
@@ -128,12 +128,12 @@ redef class ASendExpr
        redef fun accept_printer(v)
        do
                v.enter_visit(n_expr)
-               v.write(".{mproperty.name}")
+               v.write(".{callsite.mproperty.name}")
                if not raw_arguments.is_empty then
                        v.write("(")
                        v.indent
                        var is_first = true
-                       for a in raw_arguments.as(not null) do
+                       for a in raw_arguments do
                                if is_first then is_first = false else v.write(",")
                                v.enter_visit(a)
                        end
index 62c2f60..3f96318 100644 (file)
@@ -77,7 +77,7 @@ THIS_MAKEFILE := $(abspath $(lastword $(MAKEFILE_LIST)))
 NACL_SDK_ROOT ?= $(abspath $(dir $(THIS_MAKEFILE))../../../..)
 
 # Project Build flags
-WARNINGS := -Wall -pedantic -Wno-long-long -Wno-unused-value -Wno-unused-label -Wno-duplicate-decl-specifier -Wno-switch -Wno-embedded-directive
+WARNINGS := -Wno-long-long -Wno-unused-value -Wno-unused-label -Wno-duplicate-decl-specifier -Wno-switch -Wno-embedded-directive
 CXXFLAGS := -pthread $(WARNINGS)
 
 CXXFLAGS += -g -O0 # Debug
index 01b7bc7..5d666c8 100644 (file)
@@ -107,7 +107,7 @@ redef class MEntity
                lnk.add tpl_link
                if mdoc != null then
                        lnk.add ": "
-                       lnk.add mdoc.short_comment
+                       lnk.add mdoc.short_markdown
                end
                return new TplListItem.with_content(lnk)
        end
@@ -137,7 +137,7 @@ redef class MConcern
                lnk.add tpl_anchor
                if mdoc != null then
                        lnk.add ": "
-                       lnk.add mdoc.short_comment
+                       lnk.add mdoc.short_markdown
                end
                return new TplListItem.with_content(lnk)
        end
@@ -397,10 +397,10 @@ redef class MClassDef
                lnk.add tpl_link
                if mdoc != null then
                        lnk.add ": "
-                       lnk.add mdoc.short_comment
+                       lnk.add mdoc.short_markdown
                else if mclass.intro.mdoc != null then
                        lnk.add ": "
-                       lnk.add mclass.intro.mdoc.short_comment
+                       lnk.add mclass.intro.mdoc.short_markdown
                end
                return new TplListItem.with_content(lnk)
        end
@@ -482,7 +482,7 @@ redef class MPropDef
                var tpl = new Template
                tpl.add mclassdef.tpl_namespace
                tpl.add "::"
-               tpl.add mproperty.name
+               tpl.add tpl_link
                return tpl
        end
 
@@ -500,14 +500,6 @@ redef class MPropDef
                return tpl
        end
 
-       redef fun tpl_title do
-               var title = new Template
-               title.add tpl_icon
-               title.add tpl_link
-               title.add tpl_signature
-               return title
-       end
-
        redef fun tpl_definition do
                var tpl = new TplDefinition
                tpl.namespace = mclassdef.tpl_namespace
@@ -547,16 +539,35 @@ redef class MPropDef
        redef fun tpl_list_item do
                var lnk = new Template
                lnk.add new TplLabel.with_classes(tpl_css_classes.to_a)
-               lnk.add tpl_link
+               var anchor = tpl_link
+               anchor.href = "{mclassdef.mclass.nitdoc_url}#{mproperty.nitdoc_id}"
+               lnk.add anchor
                if mdoc != null then
                        lnk.add ": "
-                       lnk.add mdoc.short_comment
+                       lnk.add mdoc.short_markdown
                else if mproperty.intro.mdoc != null then
                        lnk.add ": "
-                       lnk.add mproperty.intro.mdoc.short_comment
+                       lnk.add mproperty.intro.mdoc.short_markdown
                end
                return new TplListItem.with_content(lnk)
        end
+
+       fun tpl_inheritance_item: TplListItem do
+               var lnk = new Template
+               lnk.add new TplLabel.with_classes(tpl_css_classes.to_a)
+               lnk.add mclassdef.mmodule.tpl_namespace
+               lnk.add "::"
+               var anchor = mclassdef.tpl_link
+               anchor.href = "{mclassdef.mclass.nitdoc_url}#{mproperty.nitdoc_id}"
+               lnk.add anchor
+               if mdoc != null then
+                       lnk.add ": "
+                       lnk.add mdoc.short_markdown
+               end
+               var li = new TplListItem.with_content(lnk)
+               li.css_classes.add "signature"
+               return li
+       end
 end
 
 redef class MMethod
index 9c38d44..73ae262 100644 (file)
@@ -163,6 +163,7 @@ class Nitdoc
 
        private fun classes do
                for mclass in model.mclasses do
+                       if mclass.visibility <= ctx.min_visibility then continue
                        var page = new NitdocClass(ctx, model, mainmodule, mclass)
                        page.render.write_to_file("{ctx.output_dir.to_s}/{page.page_url}")
                end
@@ -170,6 +171,7 @@ class Nitdoc
 
        private fun properties do
                for mproperty in model.mproperties do
+                       if mproperty.visibility <= ctx.min_visibility then continue
                        var page = new NitdocProperty(ctx, model, mainmodule, mproperty)
                        page.render.write_to_file("{ctx.output_dir.to_s}/{page.page_url}")
                end
@@ -231,7 +233,9 @@ class QuickSearch
                        tpl.add "\"{mproperty}\":["
                        for mpropdef in mprops do
                                var full_name = mpropdef.mclassdef.mclass.full_name
-                               tpl.add "\{txt:\"{full_name}\",url:\"{mpropdef.nitdoc_url}\"\},"
+                               var cls_url = mpropdef.mclassdef.mclass.nitdoc_url
+                               var def_url = "{cls_url}#{mpropdef.mproperty.nitdoc_id}"
+                               tpl.add "\{txt:\"{full_name}\",url:\"{def_url}\"\},"
                        end
                        tpl.add "],"
                end
@@ -350,7 +354,10 @@ abstract class NitdocPage
        do
                if location == null then return null
                var source = ctx.opt_source.value
-               if source == null then return location.file.filename.simplify_path
+               if source == null then
+                       var url = location.file.filename.simplify_path
+                       return "<a target='_blank' title='Show source' href=\"{url}\">View Source</a>"
+               end
                # THIS IS JUST UGLY ! (but there is no replace yet)
                var x = source.split_with("%f")
                source = x.join(location.file.filename.simplify_path)
@@ -463,28 +470,72 @@ abstract class NitdocPage
        end
 
        # MProp description template
-       fun tpl_mprop_article(mproperty: MProperty, mpropdefs: Array[MPropDef]): TplArticle do
-               var article = mproperty.tpl_article
-               if not mpropdefs.has(mproperty.intro) then
-                       # add intro synopsys
-                       var intro_article = mproperty.intro.tpl_short_article
-                       intro_article.source_link = tpl_showsource(mproperty.intro.location)
-                       article.add_child intro_article
+       #
+       # `main_mpropdef`: The most important mpropdef to display
+       # `local_mpropdefs`: List of other locally defined mpropdefs to display
+       # `lin`: full linearization from local_mpropdefs to intro (displayed in redef tree)
+       fun tpl_mprop_article(main_mpropdef: MPropDef, local_mpropdefs: Array[MPropDef],
+          lin: Array[MPropDef]): TplArticle do
+               var mprop = main_mpropdef.mproperty
+               var article = new TplArticle(mprop.nitdoc_id)
+               var title = new Template
+               title.add mprop.tpl_icon
+               title.add "<span id='{main_mpropdef.nitdoc_id}'></span>"
+               if main_mpropdef.is_intro then
+                       title.add mprop.tpl_link
+                       title.add mprop.intro.tpl_signature
+               else
+                       var cls_url = mprop.intro.mclassdef.mclass.nitdoc_url
+                       var def_url = "{cls_url}#{mprop.nitdoc_id}"
+                       var lnk = new TplLink.with_title(def_url, mprop.name, "Go to introduction")
+                       title.add "redef "
+                       title.add lnk
+               end
+               article.title = title
+               article.title_classes.add "signature"
+               article.summary_title = "{mprop.nitdoc_name}"
+               article.subtitle = main_mpropdef.tpl_namespace
+               if main_mpropdef.mdoc != null then
+                       article.content = main_mpropdef.mdoc.tpl_comment
+               end
+               var subarticle = new TplArticle("{main_mpropdef.nitdoc_id}_redefs")
+               # Add redef in same `MClass`
+               if local_mpropdefs.length > 1 then
+                       for mpropdef in local_mpropdefs do
+                               if mpropdef == main_mpropdef then continue
+                               var redef_article = new TplArticle("{mpropdef.nitdoc_id}")
+                               var redef_title = new Template
+                               redef_title.add "also redef in "
+                               redef_title.add mpropdef.tpl_namespace
+                               redef_article.title = redef_title
+                               redef_article.title_classes.add "signature info"
+                               redef_article.css_classes.add "nospace"
+                               var redef_content = new Template
+                               if mpropdef.mdoc != null then
+                                       redef_content.add mpropdef.mdoc.tpl_comment
+                               end
+                               redef_article.content = redef_content
+                               subarticle.add_child redef_article
+                       end
                end
-               mainmodule.linearize_mpropdefs(mpropdefs)
-               for mpropdef in mpropdefs do
-                       # add mpropdef description
-                       var redef_article = mpropdef.tpl_article
-                       redef_article.source_link = tpl_showsource(mpropdef.location)
-                       article.add_child redef_article
+               # Add linearization
+               if lin.length > 1 then
+                       var lin_article = new TplArticle("{main_mpropdef.nitdoc_id}_lin")
+                       lin_article.title = "Inheritance"
+                       var lst = new TplList.with_classes(["list-unstyled", "list-labeled"])
+                       for mpropdef in lin do
+                               lst.add_li mpropdef.tpl_inheritance_item
+                       end
+                       lin_article.content = lst
+                       subarticle.add_child lin_article
                end
+               article.add_child subarticle
                return article
        end
 
        # MProperty description template
        fun tpl_mpropdef_article(mpropdef: MPropDef): TplArticle do
                var article = mpropdef.tpl_article
-               if mpropdef.is_intro then article.content = null
                article.source_link = tpl_showsource(mpropdef.location)
                return article
        end
@@ -1052,10 +1103,14 @@ class NitdocClass
                var classes = mprop.intro.tpl_css_classes.to_a
                if not mprops2mdefs.has_key(mprop) then
                        classes.add "inherit"
-                       var lnk = new Template
-                       lnk.add new TplLabel.with_classes(classes)
-                       lnk.add mprop.intro.tpl_link
-                       return new TplListItem.with_content(lnk)
+                       var cls_url = mprop.intro.mclassdef.mclass.nitdoc_url
+                       var def_url = "{cls_url}#{mprop.nitdoc_id}"
+                       var lnk = new TplLink(def_url, mprop.name)
+                       if mprop.intro.mdoc != null then lnk.title = mprop.intro.mdoc.short_comment
+                       var item = new Template
+                       item.add new TplLabel.with_classes(classes)
+                       item.add lnk
+                       return new TplListItem.with_content(item)
                end
                var defs = mprops2mdefs[mprop]
                if defs.has(mprop.intro) then
@@ -1065,7 +1120,7 @@ class NitdocClass
                end
                var lnk = new Template
                lnk.add new TplLabel.with_classes(classes)
-               lnk.add mprop.intro.tpl_anchor
+               lnk.add mprop.tpl_anchor
                return new TplListItem.with_content(lnk)
        end
 
@@ -1131,8 +1186,8 @@ class NitdocClass
                var mclasses = new HashSet[MClass]
                mclasses.add_all hancestors
                mclasses.add_all hparents
-               if hchildren.length < 10 then mclasses.add_all hchildren
-               if hdescendants.length < 10 then mclasses.add_all hdescendants
+               mclasses.add_all hchildren
+               mclasses.add_all hdescendants
                mclasses.add mclass
                var graph = tpl_dot(mclasses)
                if graph != null then section.add_child graph
@@ -1152,14 +1207,14 @@ class NitdocClass
                end
 
                # children
-               if not hchildren.is_empty and hchildren.length < 15 then
+               if not hchildren.is_empty then
                        var lst = hchildren.to_a
                        name_sorter.sort lst
                        section.add_child tpl_list("children", "Children", lst)
                end
 
                # descendants
-               if not hdescendants.is_empty and hchildren.length < 15 then
+               if not hdescendants.is_empty then
                        var lst = hdescendants.to_a
                        name_sorter.sort lst
                        section.add_child tpl_list("descendants", "Descendants", lst)
@@ -1170,9 +1225,18 @@ class NitdocClass
 
        private fun tpl_list(id: String, title: String, elts: Array[MClass]): TplArticle do
                var article = new TplArticle.with_title(id, title)
-               var list = new TplList.with_classes(["list-unstyled", "list-definition"])
-               for elt in elts do list.elts.add elt.tpl_list_item
-               article.content = list
+               if elts.length > 20 then
+                       var tpl = new Template
+                       for e in elts do
+                               tpl.add e.tpl_link
+                               if e != elts.last then tpl.add ", "
+                       end
+                       article.content = tpl
+               else
+                       var list = new TplList.with_classes(["list-unstyled", "list-definition"])
+                       for elt in elts do list.elts.add elt.tpl_list_item
+                       article.content = list
+               end
                return article
        end
 
@@ -1196,33 +1260,48 @@ class NitdocClass
                                var kind_map = sort_by_kind(mprops)
 
                                # virtual types
-                               var elts = kind_map["type"].to_a
-                               name_sorter.sort(elts)
-                               for elt in elts do
-                                       var defs = mprops2mdefs[elt].to_a
-                                       section.add_child tpl_mprop_article(elt, defs)
+                               for article in tpl_mproperty_articles(kind_map, "type") do
+                                       section.add_child article
                                end
-
                                # constructors
-                               elts = kind_map["init"].to_a
-                               name_sorter.sort(elts)
-                               for elt in elts do
-                                       var defs = mprops2mdefs[elt].to_a
-                                       section.add_child tpl_mprop_article(elt, defs)
+                               for article in tpl_mproperty_articles(kind_map, "init") do
+                                       section.add_child article
                                end
-
                                # methods
-                               elts = kind_map["fun"].to_a
-                               name_sorter.sort(elts)
-                               for elt in elts do
-                                       var defs = mprops2mdefs[elt].to_a
-                                       section.add_child tpl_mprop_article(elt, defs)
+                               for article in tpl_mproperty_articles(kind_map, "fun") do
+                                       section.add_child article
                                end
                                parent.add_child section
                        end
                end
        end
 
+       private fun tpl_mproperty_articles(kind_map: Map[String, Set[MProperty]],
+               kind_name: String): Sequence[TplArticle] do
+               var articles = new List[TplArticle]
+               var elts = kind_map[kind_name].to_a
+               name_sorter.sort(elts)
+               for elt in elts do
+                       var local_defs = mprops2mdefs[elt]
+                       # var all_defs = elt.mpropdefs
+                       var all_defs = new HashSet[MPropDef]
+                       for local_def in local_defs do
+                               all_defs.add local_def
+                               var mpropdef = local_def
+                               while not mpropdef.is_intro do
+                                       mpropdef = mpropdef.lookup_next_definition(mainmodule, mpropdef.mclassdef.bound_mtype)
+                                       all_defs.add mpropdef
+                               end
+                       end
+                       var loc_lin = local_defs.to_a
+                       mainmodule.linearize_mpropdefs(loc_lin)
+                       var all_lin = all_defs.to_a
+                       mainmodule.linearize_mpropdefs(all_lin)
+                       articles.add tpl_mprop_article(loc_lin.first, loc_lin, all_lin)
+               end
+               return articles
+       end
+
        redef fun tpl_content do
                tpl_sidebar_properties
                var top = tpl_intro
@@ -1305,6 +1384,7 @@ class NitdocClass
                for mclass in mclasses do
                        poset.add_node mclass
                        for oclass in mclasses do
+                               if mclass == oclass then continue
                                poset.add_node oclass
                                if mclass.in_hierarchy(mainmodule) < oclass then
                                        poset.add_edge(mclass, oclass)
@@ -1315,14 +1395,28 @@ class NitdocClass
                var op = new FlatBuffer
                var name = "dep_{mclass.name}"
                op.append("digraph {name} \{ rankdir=BT; node[shape=none,margin=0,width=0,height=0,fontsize=10]; edge[dir=none,color=gray]; ranksep=0.2; nodesep=0.1;\n")
-               for c in poset do
+               var classes = poset.to_a
+               var todo = new Array[MClass]
+               var done = new HashSet[MClass]
+               mainmodule.linearize_mclasses(classes)
+               if not classes.is_empty then todo.add classes.first
+               while not todo.is_empty do
+                       var c = todo.shift
+                       if done.has(c) then continue
+                       done.add c
                        if c == mclass then
                                op.append("\"{c.name}\"[shape=box,margin=0.03];\n")
                        else
                                op.append("\"{c.name}\"[URL=\"{c.nitdoc_url}\"];\n")
                        end
-                       for c2 in poset[c].direct_greaters do
-                               op.append("\"{c.name}\"->\"{c2.name}\";\n")
+                       var smallers = poset[c].direct_smallers
+                       if smallers.length < 10 then
+                               for c2 in smallers do
+                                       op.append("\"{c2.name}\"->\"{c.name}\";\n")
+                               end
+                               todo.add_all smallers
+                       else
+                               op.append("\"...\"->\"{c.name}\";\n")
                        end
                end
                op.append("\}\n")
@@ -1378,13 +1472,12 @@ class NitdocProperty
        end
 
        private fun tpl_intro: TplSection do
-               var section = new TplSection.with_title("top", tpl_title)
-               section.subtitle = mproperty.tpl_declaration
-               var article = new TplArticle("comment")
-               if mproperty.intro.mdoc != null then
-                       article.content = mproperty.intro.mdoc.tpl_comment
-               end
-               section.add_child article
+               var title = new Template
+               title.add mproperty.nitdoc_name
+               title.add mproperty.intro.tpl_signature
+               var section = new TplSection.with_title("top", title)
+               section.subtitle = mproperty.tpl_namespace
+               section.summary_title = mproperty.nitdoc_name
                return section
        end
 
index 1d1fb45..200e650 100644 (file)
@@ -748,6 +748,67 @@ class TplListItem
        end
 end
 
+# A Bootstrap tab component that contains `TplTabPanel`.
+class TplTab
+       super Template
+
+       # Panels contained in the tab.
+       var panels = new Array[TplTabPanel]
+
+       # Add a new panel.
+       fun add_panel(panel: TplTabPanel) do panels.add panel
+
+       # CSS classes of the tab component.
+       var css_classes = new Array[String]
+
+       redef fun rendering do
+               add "<div class='tab-content'>"
+               for panel in panels do add panel
+               add "</div>"
+       end
+end
+
+# A panel that goes in a `TplTab`.
+class TplTabPanel
+       super Template
+
+       # CSS classes of the pane element.
+       var css_classes = new Array[String]
+
+       # The panel id.
+       #
+       # Used to show/hide panel.
+       var id: String
+
+       # The panel name.
+       #
+       # Displayed in the tab header or in the pointing link.
+       var name: Streamable
+
+       # Is the panel visible by default?
+       var is_active = false is writable
+
+       # Body of the panel
+       var content: nullable Streamable = null is writable
+
+       # Get a link pointing to this panel.
+       fun tpl_link_to: Streamable do
+               var lnk = new Template
+               lnk.add "<a data-target='#{id}' data-toggle='pill'>"
+               lnk.add name
+               lnk.add "</a>"
+               return lnk
+       end
+
+       redef fun rendering do
+               add "<div class='tab-pane {css_classes.join(" ")}"
+               if is_active then add "active"
+               add "' id='{id}'>"
+               if content != null then add content.as(not null)
+               add "</div>"
+       end
+end
+
 # A label with a text content
 class TplLabel
        super Template
index 6178a39..41abe43 100644 (file)
@@ -60,7 +60,7 @@ private class CheckAnnotationPhase
 
                        for m in super_mmodules do
                                if declared_annotations[m].has(name) then
-                                       modelbuilder.warning(annot, "Warning: an annotation `{name}` is already declared in module `{m}`")
+                                       modelbuilder.warning(annot, "multiple-annotation-declarations", "Warning: an annotation `{name}` is already declared in module `{m}`")
                                        break label
                                end
                        end
@@ -120,7 +120,7 @@ platform
 
                if annots.has(name) then return
 
-               toolcontext.modelbuilder.warning(nat, "Warning: unknown annotation `{name}`")
+               toolcontext.modelbuilder.warning(nat, "unknown-annotation", "Warning: unknown annotation `{name}`")
 
                annots.add(name) # to avoid multiple errors on the same name
        end
index 26d6710..a50b45b 100644 (file)
@@ -54,9 +54,9 @@ private class SimpleMiscVisitor
 
        var toolcontext: ToolContext
 
-       fun warning(node: ANode, msg: String)
+       fun warning(node: ANode, tag, msg: String)
        do
-               toolcontext.warning(node.hot_location, msg)
+               toolcontext.warning(node.hot_location, tag, msg)
        end
 
        init(toolcontext: ToolContext)
@@ -81,7 +81,7 @@ redef class ASignature
        redef fun after_simple_misc(v)
        do
                if self.n_opar != null and self.n_params.is_empty then
-                       v.warning(self, "Warning: superfluous parentheses.")
+                       v.warning(self, "parentheses", "Warning: superfluous parentheses.")
                end
        end
 end
@@ -94,7 +94,7 @@ end
 redef class AParExpr
        redef fun warn_parentheses(v)
        do
-               v.warning(self, "Warning: superfluous parentheses.")
+               v.warning(self, "parentheses", "Warning: superfluous parentheses.")
        end
 end
 
@@ -102,7 +102,7 @@ redef class AParExprs
        redef fun after_simple_misc(v)
        do
                if n_exprs.is_empty then
-                       v.warning(self, "Warning: superfluous parentheses.")
+                       v.warning(self, "parentheses", "Warning: superfluous parentheses.")
                end
        end
 end
@@ -141,7 +141,7 @@ redef class AWhileExpr
        redef fun after_simple_misc(v)
        do
                if n_expr isa ATrueExpr then
-                       v.warning(self, "Warning: use 'loop' instead of 'while true do'.")
+                       v.warning(self, "loop", "Warning: use `loop` instead of `while true do`.")
                else
                        n_expr.warn_parentheses(v)
                end
@@ -173,7 +173,7 @@ redef class AOnceExpr
        redef fun accept_simple_misc(v)
        do
                if v.once_count > 0 then
-                       v.warning(self, "Useless once in a once expression.")
+                       v.warning(self, "nested-once", "Warning: useless once in a once expression.")
                end
                v.once_count = v.once_count + 1
 
index ef17543..9420ab8 100644 (file)
@@ -46,6 +46,7 @@ end
 #  * `public_visibility`
 #  * `protected_visibility`
 #  * `none_visibility`
+#  * `private_visiblity`
 #
 # Note this class is basically an enum.
 # FIXME: use a real enum once user-defined enums are available
index eac98df..48bc6fa 100644 (file)
@@ -630,6 +630,8 @@ class ModelBuilder
                                var mdoc = ndoc.to_mdoc
                                mmodule.mdoc = mdoc
                                mdoc.original_mentity = mmodule
+                       else
+                               advice(decl, "missing-doc", "Documentation warning: Undocumented module `{mmodule}`")
                        end
                end
 
@@ -715,9 +717,16 @@ class ModelBuilder
 
        # Helper function to display a warning on a node.
        # Alias for: `self.toolcontext.warning(n.hot_location, text)`
-       fun warning(n: ANode, text: String)
+       fun warning(n: ANode, tag, text: String)
+       do
+               self.toolcontext.warning(n.hot_location, tag, text)
+       end
+
+       # Helper function to display an advice on a node.
+       # Alias for: `self.toolcontext.advice(n.hot_location, text)`
+       fun advice(n: ANode, tag, text: String)
        do
-               self.toolcontext.warning(n.hot_location, text)
+               self.toolcontext.advice(n.hot_location, tag, text)
        end
 
        # Force to get the primitive method named `name` on the type `recv` or do a fatal error on `n`
index ff0295f..8bc6ef2 100644 (file)
@@ -133,7 +133,7 @@ redef class ModelBuilder
                                        return
                                end
                                for c in ptname.chars do if c >= 'a' and c<= 'z' then
-                                       warning(nfd, "Warning: lowercase in the formal parameter type {ptname}")
+                                       warning(nfd, "formal-type-name", "Warning: lowercase in the formal parameter type {ptname}")
                                        break
                                end
                                names.add(ptname)
@@ -155,7 +155,7 @@ redef class ModelBuilder
                                                nfd.bound = bound
                                        end
                                        if bound isa MClassType and bound.mclass.kind == enum_kind then
-                                               warning(nfdt, "Warning: Useless formal parameter type since `{bound}` cannnot have subclasses.")
+                                               warning(nfdt, "useless-bound", "Warning: Useless formal parameter type since `{bound}` cannnot have subclasses.")
                                        end
                                else if mclass.mclassdefs.is_empty then
                                        # No bound, then implicitely bound by nullable Object
@@ -182,6 +182,8 @@ redef class ModelBuilder
                                var mdoc = ndoc.to_mdoc
                                mclassdef.mdoc = mdoc
                                mdoc.original_mentity = mclassdef
+                       else if mclassdef.is_intro and mclass.visibility >= public_visibility then
+                               advice(nclassdef, "missing-doc", "Documentation warning: Undocumented public class `{mclass}`")
                        end
                end
 
@@ -385,12 +387,12 @@ redef class ModelBuilder
                                if not parents.has(sc) or sc == objectclass then
                                        # Skip the warning on generated code
                                        if ntype.location.file != null and not ntype.location.file.filename.is_empty then
-                                               warning(ntype, "Warning: superfluous super-class {mtype} in class {mclassdef.mclass}.")
+                                               warning(ntype, "useless-superclass", "Warning: superfluous super-class {mtype} in class {mclassdef.mclass}.")
                                        end
                                else if not seen_parents.has_key(sc) then
                                        seen_parents[sc] = ntype
                                else
-                                       warning(ntype, "Warning: duplicated super-class {mtype} in class {mclassdef.mclass}.")
+                                       warning(ntype, "useless-superclass", "Warning: duplicated super-class {mtype} in class {mclassdef.mclass}.")
                                end
                        end
                end
index 53af250..99ff6b4 100644 (file)
@@ -404,8 +404,7 @@ redef class APropdef
                                modelbuilder.error(nvisibility, "Error: The only legal visibility for properties in a private class is private.")
                        else if mvisibility == private_visibility then
                                assert nvisibility != null
-                               # Not yet
-                               # modelbuilder.warning(nvisibility, "Warning: private is unrequired since the only legal visibility for properties in a private class is private.")
+                               modelbuilder.advice(nvisibility, "useless-visibility", "Warning: private is superfluous since the only legal visibility for properties in a private class is private.")
                        end
                        mvisibility = private_visibility
                end
@@ -419,6 +418,8 @@ redef class APropdef
                        var mdoc = ndoc.to_mdoc
                        mpropdef.mdoc = mdoc
                        mdoc.original_mentity = mpropdef
+               else if mpropdef.is_intro and mpropdef.mproperty.visibility >= protected_visibility then
+                       modelbuilder.advice(self, "missing-doc", "Documentation warning: Undocumented property `{mpropdef.mproperty}`")
                end
 
                var at_deprecated = get_single_annotation("deprecated", modelbuilder)
@@ -616,6 +617,10 @@ redef class AMethPropdef
                if not is_init or n_kwredef != null then mprop = modelbuilder.try_get_mproperty_by_name(name_node, mclassdef, name).as(nullable MMethod)
                if mprop == null and look_like_a_root_init(modelbuilder) then
                        mprop = modelbuilder.the_root_init_mmethod
+                       var nb = n_block
+                       if nb isa ABlockExpr and nb.n_expr.is_empty and n_doc == null then
+                               modelbuilder.advice(self, "useless-init", "Warning: useless empty init in {mclassdef}")
+                       end
                end
                if mprop == null then
                        var mvisibility = new_property_visibility(modelbuilder, mclassdef, self.n_visibility)
@@ -955,8 +960,8 @@ redef class AAttrPropdef
                else if ntype != null then
                        if nexpr isa ANewExpr then
                                var xmtype = modelbuilder.resolve_mtype(mmodule, mclassdef, nexpr.n_type)
-                               if xmtype == mtype and modelbuilder.toolcontext.opt_warn.value >= 2 then
-                                       modelbuilder.warning(ntype, "Warning: useless type definition")
+                               if xmtype == mtype then
+                                       modelbuilder.advice(ntype, "useless-type", "Warning: useless type definition")
                                end
                        end
                end
@@ -1094,7 +1099,7 @@ redef class ATypePropdef
                        var mvisibility = new_property_visibility(modelbuilder, mclassdef, self.n_visibility)
                        mprop = new MVirtualTypeProp(mclassdef, name, mvisibility)
                        for c in name.chars do if c >= 'a' and c<= 'z' then
-                               modelbuilder.warning(n_id, "Warning: lowercase in the virtual type {name}")
+                               modelbuilder.warning(n_id, "bad-type-name", "Warning: lowercase in the virtual type {name}")
                                break
                        end
                        if not self.check_redef_keyword(modelbuilder, mclassdef, self.n_kwredef, false, mprop) then return
@@ -1173,7 +1178,7 @@ redef class ATypePropdef
                        end
                        if p.mclassdef.mclass == mclassdef.mclass then
                                # Still a warning to pass existing bad code
-                               modelbuilder.warning(n_type, "Redef Error: a virtual type cannot be refined.")
+                               modelbuilder.warning(n_type, "refine-type", "Redef Error: a virtual type cannot be refined.")
                                break
                        end
                        if not bound.is_subtype(mmodule, anchor, supbound) then
diff --git a/src/nituml.nit b/src/nituml.nit
new file mode 100644 (file)
index 0000000..04cb4b3
--- /dev/null
@@ -0,0 +1,58 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# UML generator in dot format.
+module nituml
+
+import modelbuilder
+import frontend
+import uml
+
+redef class ToolContext
+       var umlphase: Phase = new UMLPhase(self, null)
+
+       var opt_gen = new OptionEnum(["class", "package"], "Choose which type of uml diagram to generate", 0, "--diagram")
+
+       redef init do
+               option_context.add_option opt_gen
+               super
+       end
+end
+
+private class UMLPhase
+       super Phase
+       redef fun process_mainmodule(mainmodule, mmodules)
+       do
+               var d = new UMLModel(mainmodule.model, mainmodule, toolcontext)
+               if toolcontext.opt_gen.value == 0 then
+                       print d.generate_class_uml.write_to_string
+               else if toolcontext.opt_gen.value == 1 then
+                       print d.generate_package_uml.write_to_string
+               end
+       end
+end
+
+# process options
+var toolcontext = new ToolContext
+toolcontext.process_options(args)
+var arguments = toolcontext.option_context.rest
+
+# build model
+var model = new Model
+var mbuilder = new ModelBuilder(model, toolcontext)
+var mmodules = mbuilder.parse(arguments)
+
+if mmodules.is_empty then return
+mbuilder.run_phases
+toolcontext.run_global_phases(mmodules)
index e26cf3b..fa6d955 100644 (file)
@@ -567,7 +567,7 @@ expr_single~nopar~nobra {-> expr}
 // !nopar to unambiguise 'foo[5].bar' between '(foo[5]).bar' and 'foo([5].bar),
 !nobra!nopar   | {range} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no cbra annotations_o {-> New expr.crange(obra, expr, expr2.expr, cbra, annotations_o.annotations)}
 !nobra!nopar   | {orange} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no [cbra]:obra annotations_o {-> New expr.orange(obra, expr, expr2.expr, cbra, annotations_o.annotations)}
-!nobra!nopar   | {array} braargs annotations_o {-> New expr.array(braargs.exprs, annotations_o.annotations)}
+!nobra!nopar   | {array} obra no args_list typing_o cbra annotations_o {-> New expr.array(obra, args_list.exprs, typing_o.type, cbra, annotations_o.annotations)}
        ;
 
 superstring {-> expr} 
@@ -686,6 +686,8 @@ args_nopar {-> exprs}
        ;
 braargs        {-> exprs}
        = obra no expr_list cbra {-> New exprs.bra(obra, [expr_list.expr], cbra)};
+args_list {-> exprs}
+       = expr_list {-> New exprs.list([expr_list.expr])};
 expr_list {-> expr*}
        = expr [n2]:no expr_tail* {-> [expr, expr_tail.expr]};
 expr_tail {-> expr} 
@@ -850,7 +852,7 @@ expr        = {block} expr* kwend?
        | {range} expr [expr2]:expr annotations?
        | {crange} obra expr [expr2]:expr cbra annotations?
        | {orange} obra expr [expr2]:expr [cbra]:obra annotations?
-       | {array} [exprs]:exprs annotations?
+       | {array} obra [exprs]:exprs type? cbra annotations?
        | {self} kwself annotations?
        | {implicit_self} 
        | {true} kwtrue annotations?
index a5a2ff3..6798234 100644 (file)
@@ -356,405 +356,391 @@ redef class Parser
                        new ReduceAction339(90),
                        new ReduceAction340(90),
                        new ReduceAction345(91),
-                       new ReduceAction297(92),
-                       new ReduceAction347(92),
+                       new ReduceAction346(92),
+                       new ReduceAction297(93),
                        new ReduceAction348(93),
                        new ReduceAction349(94),
-                       new ReduceAction350(94),
+                       new ReduceAction350(95),
                        new ReduceAction351(95),
-                       new ReduceAction352(95),
-                       new ReduceAction353(95),
-                       new ReduceAction354(95),
+                       new ReduceAction352(96),
+                       new ReduceAction353(96),
+                       new ReduceAction354(96),
                        new ReduceAction355(96),
-                       new ReduceAction356(96),
-                       new ReduceAction357(96),
-                       new ReduceAction22(96),
-                       new ReduceAction359(97),
-                       new ReduceAction360(97),
-                       new ReduceAction361(97),
-                       new ReduceAction360(97),
-                       new ReduceAction363(98),
-                       new ReduceAction364(98),
-                       new ReduceAction365(98),
-                       new ReduceAction364(98),
-                       new ReduceAction367(99),
+                       new ReduceAction356(97),
+                       new ReduceAction357(97),
+                       new ReduceAction358(97),
+                       new ReduceAction22(97),
+                       new ReduceAction360(98),
+                       new ReduceAction361(98),
+                       new ReduceAction362(98),
+                       new ReduceAction361(98),
+                       new ReduceAction364(99),
+                       new ReduceAction365(99),
+                       new ReduceAction366(99),
+                       new ReduceAction365(99),
                        new ReduceAction368(100),
-                       new ReduceAction22(101),
-                       new ReduceAction370(101),
+                       new ReduceAction369(101),
+                       new ReduceAction22(102),
                        new ReduceAction371(102),
-                       new ReduceAction371(102),
-                       new ReduceAction373(103),
-                       new ReduceAction374(103),
-                       new ReduceAction23(103),
-                       new ReduceAction22(104),
-                       new ReduceAction377(104),
+                       new ReduceAction372(103),
+                       new ReduceAction372(103),
+                       new ReduceAction374(104),
+                       new ReduceAction375(104),
+                       new ReduceAction23(104),
+                       new ReduceAction22(105),
                        new ReduceAction378(105),
-                       new ReduceAction379(105),
-                       new ReduceAction371(105),
-                       new ReduceAction56(106),
-                       new ReduceAction57(107),
-                       new ReduceAction58(107),
-                       new ReduceAction59(107),
-                       new ReduceAction62(107),
-                       new ReduceAction63(107),
-                       new ReduceAction75(108),
-                       new ReduceAction76(108),
-                       new ReduceAction141(109),
-                       new ReduceAction142(109),
-                       new ReduceAction154(110),
+                       new ReduceAction379(106),
+                       new ReduceAction380(106),
+                       new ReduceAction372(106),
+                       new ReduceAction56(107),
+                       new ReduceAction57(108),
+                       new ReduceAction58(108),
+                       new ReduceAction59(108),
+                       new ReduceAction62(108),
+                       new ReduceAction63(108),
+                       new ReduceAction75(109),
+                       new ReduceAction76(109),
+                       new ReduceAction141(110),
+                       new ReduceAction142(110),
                        new ReduceAction154(111),
-                       new ReduceAction231(111),
                        new ReduceAction154(112),
-                       new ReduceAction233(112),
-                       new ReduceAction234(112),
-                       new ReduceAction235(112),
-                       new ReduceAction236(112),
+                       new ReduceAction231(112),
                        new ReduceAction154(113),
-                       new ReduceAction238(113),
+                       new ReduceAction233(113),
+                       new ReduceAction234(113),
+                       new ReduceAction235(113),
+                       new ReduceAction236(113),
                        new ReduceAction154(114),
-                       new ReduceAction240(114),
-                       new ReduceAction241(114),
-                       new ReduceAction242(114),
-                       new ReduceAction243(114),
-                       new ReduceAction244(114),
-                       new ReduceAction245(114),
-                       new ReduceAction246(114),
-                       new ReduceAction247(114),
-                       new ReduceAction248(114),
-                       new ReduceAction249(114),
+                       new ReduceAction238(114),
                        new ReduceAction154(115),
-                       new ReduceAction251(115),
-                       new ReduceAction252(115),
+                       new ReduceAction240(115),
+                       new ReduceAction241(115),
+                       new ReduceAction242(115),
+                       new ReduceAction243(115),
+                       new ReduceAction244(115),
+                       new ReduceAction245(115),
+                       new ReduceAction246(115),
+                       new ReduceAction247(115),
+                       new ReduceAction248(115),
+                       new ReduceAction249(115),
                        new ReduceAction154(116),
-                       new ReduceAction254(116),
-                       new ReduceAction255(116),
-                       new ReduceAction256(116),
+                       new ReduceAction251(116),
+                       new ReduceAction252(116),
                        new ReduceAction154(117),
-                       new ReduceAction258(117),
+                       new ReduceAction254(117),
+                       new ReduceAction255(117),
+                       new ReduceAction256(117),
                        new ReduceAction154(118),
-                       new ReduceAction260(118),
-                       new ReduceAction261(118),
+                       new ReduceAction258(118),
                        new ReduceAction154(119),
-                       new ReduceAction263(119),
-                       new ReduceAction264(119),
-                       new ReduceAction265(119),
+                       new ReduceAction260(119),
+                       new ReduceAction261(119),
                        new ReduceAction154(120),
-                       new ReduceAction267(120),
-                       new ReduceAction268(120),
-                       new ReduceAction177(120),
-                       new ReduceAction178(120),
-                       new ReduceAction179(120),
-                       new ReduceAction180(120),
-                       new ReduceAction181(120),
-                       new ReduceAction275(120),
-                       new ReduceAction276(120),
-                       new ReduceAction277(120),
-                       new ReduceAction278(120),
-                       new ReduceAction279(120),
-                       new ReduceAction280(121),
-                       new ReduceAction281(121),
-                       new ReduceAction282(121),
-                       new ReduceAction283(121),
-                       new ReduceAction284(121),
-                       new ReduceAction285(121),
-                       new ReduceAction286(121),
-                       new ReduceAction287(121),
-                       new ReduceAction288(121),
+                       new ReduceAction263(120),
+                       new ReduceAction264(120),
+                       new ReduceAction265(120),
                        new ReduceAction154(121),
-                       new ReduceAction290(121),
-                       new ReduceAction141(122),
-                       new ReduceAction142(122),
-                       new ReduceAction143(122),
-                       new ReduceAction144(122),
-                       new ReduceAction154(123),
-                       new ReduceAction154(123),
-                       new ReduceAction164(123),
-                       new ReduceAction165(123),
-                       new ReduceAction166(123),
-                       new ReduceAction167(123),
-                       new ReduceAction168(123),
-                       new ReduceAction169(123),
-                       new ReduceAction170(123),
-                       new ReduceAction154(123),
-                       new ReduceAction154(123),
-                       new ReduceAction154(123),
-                       new ReduceAction154(123),
-                       new ReduceAction154(123),
-                       new ReduceAction154(123),
-                       new ReduceAction177(123),
-                       new ReduceAction178(123),
-                       new ReduceAction179(123),
-                       new ReduceAction180(123),
-                       new ReduceAction181(123),
-                       new ReduceAction182(123),
-                       new ReduceAction183(123),
-                       new ReduceAction182(123),
-                       new ReduceAction185(123),
-                       new ReduceAction186(123),
-                       new ReduceAction185(123),
-                       new ReduceAction188(123),
-                       new ReduceAction195(124),
-                       new ReduceAction196(124),
-                       new ReduceAction197(124),
-                       new ReduceAction198(124),
-                       new ReduceAction199(124),
-                       new ReduceAction200(124),
-                       new ReduceAction201(124),
-                       new ReduceAction202(124),
-                       new ReduceAction203(124),
-                       new ReduceAction204(124),
-                       new ReduceAction154(125),
+                       new ReduceAction267(121),
+                       new ReduceAction268(121),
+                       new ReduceAction177(121),
+                       new ReduceAction178(121),
+                       new ReduceAction179(121),
+                       new ReduceAction180(121),
+                       new ReduceAction181(121),
+                       new ReduceAction275(121),
+                       new ReduceAction276(121),
+                       new ReduceAction277(121),
+                       new ReduceAction278(121),
+                       new ReduceAction279(121),
+                       new ReduceAction280(122),
+                       new ReduceAction281(122),
+                       new ReduceAction282(122),
+                       new ReduceAction283(122),
+                       new ReduceAction284(122),
+                       new ReduceAction285(122),
+                       new ReduceAction286(122),
+                       new ReduceAction287(122),
+                       new ReduceAction288(122),
+                       new ReduceAction154(122),
+                       new ReduceAction290(122),
+                       new ReduceAction141(123),
+                       new ReduceAction142(123),
+                       new ReduceAction143(123),
+                       new ReduceAction144(123),
+                       new ReduceAction154(124),
+                       new ReduceAction154(124),
+                       new ReduceAction164(124),
+                       new ReduceAction165(124),
+                       new ReduceAction166(124),
+                       new ReduceAction167(124),
+                       new ReduceAction168(124),
+                       new ReduceAction169(124),
+                       new ReduceAction170(124),
+                       new ReduceAction154(124),
+                       new ReduceAction154(124),
+                       new ReduceAction154(124),
+                       new ReduceAction154(124),
+                       new ReduceAction154(124),
+                       new ReduceAction154(124),
+                       new ReduceAction177(124),
+                       new ReduceAction178(124),
+                       new ReduceAction179(124),
+                       new ReduceAction180(124),
+                       new ReduceAction181(124),
+                       new ReduceAction182(124),
+                       new ReduceAction183(124),
+                       new ReduceAction182(124),
+                       new ReduceAction185(124),
+                       new ReduceAction186(124),
+                       new ReduceAction185(124),
+                       new ReduceAction188(124),
+                       new ReduceAction195(125),
+                       new ReduceAction196(125),
+                       new ReduceAction197(125),
+                       new ReduceAction198(125),
+                       new ReduceAction199(125),
+                       new ReduceAction200(125),
+                       new ReduceAction201(125),
+                       new ReduceAction202(125),
+                       new ReduceAction203(125),
+                       new ReduceAction204(125),
                        new ReduceAction154(126),
-                       new ReduceAction231(126),
                        new ReduceAction154(127),
-                       new ReduceAction233(127),
-                       new ReduceAction234(127),
-                       new ReduceAction235(127),
-                       new ReduceAction236(127),
+                       new ReduceAction231(127),
                        new ReduceAction154(128),
-                       new ReduceAction238(128),
+                       new ReduceAction233(128),
+                       new ReduceAction234(128),
+                       new ReduceAction235(128),
+                       new ReduceAction236(128),
                        new ReduceAction154(129),
-                       new ReduceAction240(129),
-                       new ReduceAction241(129),
-                       new ReduceAction242(129),
-                       new ReduceAction243(129),
-                       new ReduceAction244(129),
-                       new ReduceAction245(129),
-                       new ReduceAction246(129),
-                       new ReduceAction247(129),
-                       new ReduceAction248(129),
-                       new ReduceAction249(129),
+                       new ReduceAction238(129),
                        new ReduceAction154(130),
-                       new ReduceAction251(130),
-                       new ReduceAction252(130),
+                       new ReduceAction240(130),
+                       new ReduceAction241(130),
+                       new ReduceAction242(130),
+                       new ReduceAction243(130),
+                       new ReduceAction244(130),
+                       new ReduceAction245(130),
+                       new ReduceAction246(130),
+                       new ReduceAction247(130),
+                       new ReduceAction248(130),
+                       new ReduceAction249(130),
                        new ReduceAction154(131),
-                       new ReduceAction254(131),
-                       new ReduceAction255(131),
-                       new ReduceAction256(131),
+                       new ReduceAction251(131),
+                       new ReduceAction252(131),
                        new ReduceAction154(132),
-                       new ReduceAction258(132),
+                       new ReduceAction254(132),
+                       new ReduceAction255(132),
+                       new ReduceAction256(132),
                        new ReduceAction154(133),
-                       new ReduceAction260(133),
-                       new ReduceAction261(133),
+                       new ReduceAction258(133),
                        new ReduceAction154(134),
-                       new ReduceAction263(134),
-                       new ReduceAction264(134),
-                       new ReduceAction265(134),
+                       new ReduceAction260(134),
+                       new ReduceAction261(134),
                        new ReduceAction154(135),
-                       new ReduceAction267(135),
-                       new ReduceAction268(135),
-                       new ReduceAction177(135),
-                       new ReduceAction178(135),
-                       new ReduceAction179(135),
-                       new ReduceAction180(135),
-                       new ReduceAction181(135),
-                       new ReduceAction274(135),
-                       new ReduceAction275(135),
-                       new ReduceAction276(135),
-                       new ReduceAction277(135),
-                       new ReduceAction278(135),
-                       new ReduceAction279(135),
-                       new ReduceAction280(136),
-                       new ReduceAction281(136),
-                       new ReduceAction282(136),
-                       new ReduceAction283(136),
-                       new ReduceAction284(136),
-                       new ReduceAction285(136),
-                       new ReduceAction286(136),
-                       new ReduceAction287(136),
-                       new ReduceAction288(136),
+                       new ReduceAction263(135),
+                       new ReduceAction264(135),
+                       new ReduceAction265(135),
                        new ReduceAction154(136),
-                       new ReduceAction303(137),
-                       new ReduceAction304(137),
-                       new ReduceAction305(138),
-                       new ReduceAction22(138),
-                       new ReduceAction307(139),
+                       new ReduceAction267(136),
+                       new ReduceAction268(136),
+                       new ReduceAction177(136),
+                       new ReduceAction178(136),
+                       new ReduceAction179(136),
+                       new ReduceAction180(136),
+                       new ReduceAction181(136),
+                       new ReduceAction274(136),
+                       new ReduceAction275(136),
+                       new ReduceAction276(136),
+                       new ReduceAction277(136),
+                       new ReduceAction278(136),
+                       new ReduceAction279(136),
+                       new ReduceAction280(137),
+                       new ReduceAction281(137),
+                       new ReduceAction282(137),
+                       new ReduceAction283(137),
+                       new ReduceAction284(137),
+                       new ReduceAction285(137),
+                       new ReduceAction286(137),
+                       new ReduceAction287(137),
+                       new ReduceAction288(137),
+                       new ReduceAction154(137),
+                       new ReduceAction303(138),
+                       new ReduceAction304(138),
+                       new ReduceAction305(139),
+                       new ReduceAction22(139),
                        new ReduceAction307(140),
-                       new ReduceAction328(141),
-                       new ReduceAction329(141),
-                       new ReduceAction331(142),
-                       new ReduceAction315(142),
-                       new ReduceAction315(142),
-                       new ReduceAction141(143),
-                       new ReduceAction142(143),
-                       new ReduceAction154(144),
+                       new ReduceAction307(141),
+                       new ReduceAction328(142),
+                       new ReduceAction329(142),
+                       new ReduceAction331(143),
+                       new ReduceAction315(143),
+                       new ReduceAction315(143),
+                       new ReduceAction141(144),
+                       new ReduceAction142(144),
                        new ReduceAction154(145),
-                       new ReduceAction231(145),
                        new ReduceAction154(146),
-                       new ReduceAction233(146),
-                       new ReduceAction234(146),
-                       new ReduceAction235(146),
-                       new ReduceAction236(146),
+                       new ReduceAction231(146),
                        new ReduceAction154(147),
-                       new ReduceAction238(147),
+                       new ReduceAction233(147),
+                       new ReduceAction234(147),
+                       new ReduceAction235(147),
+                       new ReduceAction236(147),
                        new ReduceAction154(148),
-                       new ReduceAction240(148),
-                       new ReduceAction241(148),
-                       new ReduceAction242(148),
-                       new ReduceAction243(148),
-                       new ReduceAction244(148),
-                       new ReduceAction245(148),
-                       new ReduceAction246(148),
-                       new ReduceAction247(148),
-                       new ReduceAction248(148),
-                       new ReduceAction249(148),
+                       new ReduceAction238(148),
                        new ReduceAction154(149),
-                       new ReduceAction251(149),
-                       new ReduceAction252(149),
+                       new ReduceAction240(149),
+                       new ReduceAction241(149),
+                       new ReduceAction242(149),
+                       new ReduceAction243(149),
+                       new ReduceAction244(149),
+                       new ReduceAction245(149),
+                       new ReduceAction246(149),
+                       new ReduceAction247(149),
+                       new ReduceAction248(149),
+                       new ReduceAction249(149),
                        new ReduceAction154(150),
-                       new ReduceAction254(150),
-                       new ReduceAction255(150),
-                       new ReduceAction256(150),
+                       new ReduceAction251(150),
+                       new ReduceAction252(150),
                        new ReduceAction154(151),
-                       new ReduceAction258(151),
+                       new ReduceAction254(151),
+                       new ReduceAction255(151),
+                       new ReduceAction256(151),
                        new ReduceAction154(152),
-                       new ReduceAction260(152),
-                       new ReduceAction261(152),
+                       new ReduceAction258(152),
                        new ReduceAction154(153),
-                       new ReduceAction263(153),
-                       new ReduceAction602(153),
+                       new ReduceAction260(153),
+                       new ReduceAction261(153),
                        new ReduceAction154(154),
-                       new ReduceAction604(154),
-                       new ReduceAction605(154),
-                       new ReduceAction179(154),
-                       new ReduceAction607(154),
-                       new ReduceAction275(154),
-                       new ReduceAction276(154),
-                       new ReduceAction277(154),
-                       new ReduceAction278(154),
-                       new ReduceAction279(154),
-                       new ReduceAction280(155),
-                       new ReduceAction281(155),
-                       new ReduceAction282(155),
-                       new ReduceAction283(155),
-                       new ReduceAction284(155),
-                       new ReduceAction285(155),
-                       new ReduceAction286(155),
-                       new ReduceAction287(155),
-                       new ReduceAction288(155),
+                       new ReduceAction263(154),
+                       new ReduceAction603(154),
                        new ReduceAction154(155),
-                       new ReduceAction623(156),
-                       new ReduceAction624(156),
-                       new ReduceAction151(157),
-                       new ReduceAction152(157),
-                       new ReduceAction153(157),
-                       new ReduceAction154(157),
-                       new ReduceAction154(158),
-                       new ReduceAction154(158),
-                       new ReduceAction164(158),
-                       new ReduceAction165(158),
-                       new ReduceAction166(158),
-                       new ReduceAction167(158),
-                       new ReduceAction168(158),
-                       new ReduceAction169(158),
-                       new ReduceAction170(158),
-                       new ReduceAction154(158),
-                       new ReduceAction154(158),
+                       new ReduceAction605(155),
+                       new ReduceAction606(155),
+                       new ReduceAction179(155),
+                       new ReduceAction608(155),
+                       new ReduceAction275(155),
+                       new ReduceAction276(155),
+                       new ReduceAction277(155),
+                       new ReduceAction278(155),
+                       new ReduceAction279(155),
+                       new ReduceAction280(156),
+                       new ReduceAction281(156),
+                       new ReduceAction282(156),
+                       new ReduceAction283(156),
+                       new ReduceAction284(156),
+                       new ReduceAction285(156),
+                       new ReduceAction286(156),
+                       new ReduceAction287(156),
+                       new ReduceAction288(156),
+                       new ReduceAction154(156),
+                       new ReduceAction624(157),
+                       new ReduceAction625(157),
+                       new ReduceAction151(158),
+                       new ReduceAction152(158),
+                       new ReduceAction153(158),
                        new ReduceAction154(158),
-                       new ReduceAction154(158),
-                       new ReduceAction154(158),
-                       new ReduceAction154(158),
-                       new ReduceAction177(158),
-                       new ReduceAction178(158),
-                       new ReduceAction179(158),
-                       new ReduceAction180(158),
-                       new ReduceAction181(158),
-                       new ReduceAction182(158),
-                       new ReduceAction183(158),
-                       new ReduceAction182(158),
-                       new ReduceAction185(158),
-                       new ReduceAction186(158),
-                       new ReduceAction185(158),
-                       new ReduceAction188(158),
-                       new ReduceAction191(159),
-                       new ReduceAction192(159),
-                       new ReduceAction193(159),
-                       new ReduceAction194(159),
-                       new ReduceAction195(160),
-                       new ReduceAction196(160),
-                       new ReduceAction197(160),
-                       new ReduceAction198(160),
-                       new ReduceAction199(160),
-                       new ReduceAction200(160),
-                       new ReduceAction201(160),
-                       new ReduceAction202(160),
-                       new ReduceAction203(160),
-                       new ReduceAction204(160),
-                       new ReduceAction207(161),
-                       new ReduceAction208(161),
-                       new ReduceAction209(162),
-                       new ReduceAction216(163),
-                       new ReduceAction217(163),
-                       new ReduceAction218(164),
-                       new ReduceAction219(164),
-                       new ReduceAction220(165),
-                       new ReduceAction221(165),
-                       new ReduceAction222(165),
-                       new ReduceAction223(165),
-                       new ReduceAction224(166),
-                       new ReduceAction225(166),
-                       new ReduceAction154(167),
+                       new ReduceAction154(159),
+                       new ReduceAction154(159),
+                       new ReduceAction164(159),
+                       new ReduceAction165(159),
+                       new ReduceAction166(159),
+                       new ReduceAction167(159),
+                       new ReduceAction168(159),
+                       new ReduceAction169(159),
+                       new ReduceAction170(159),
+                       new ReduceAction154(159),
+                       new ReduceAction154(159),
+                       new ReduceAction154(159),
+                       new ReduceAction154(159),
+                       new ReduceAction154(159),
+                       new ReduceAction154(159),
+                       new ReduceAction177(159),
+                       new ReduceAction178(159),
+                       new ReduceAction179(159),
+                       new ReduceAction180(159),
+                       new ReduceAction181(159),
+                       new ReduceAction182(159),
+                       new ReduceAction183(159),
+                       new ReduceAction182(159),
+                       new ReduceAction185(159),
+                       new ReduceAction186(159),
+                       new ReduceAction185(159),
+                       new ReduceAction188(159),
+                       new ReduceAction191(160),
+                       new ReduceAction192(160),
+                       new ReduceAction193(160),
+                       new ReduceAction194(160),
+                       new ReduceAction195(161),
+                       new ReduceAction196(161),
+                       new ReduceAction197(161),
+                       new ReduceAction198(161),
+                       new ReduceAction199(161),
+                       new ReduceAction200(161),
+                       new ReduceAction201(161),
+                       new ReduceAction202(161),
+                       new ReduceAction203(161),
+                       new ReduceAction204(161),
+                       new ReduceAction207(162),
+                       new ReduceAction208(162),
+                       new ReduceAction209(163),
+                       new ReduceAction216(164),
+                       new ReduceAction217(164),
+                       new ReduceAction218(165),
+                       new ReduceAction219(165),
+                       new ReduceAction220(166),
+                       new ReduceAction221(166),
+                       new ReduceAction222(166),
+                       new ReduceAction223(166),
+                       new ReduceAction224(167),
+                       new ReduceAction225(167),
                        new ReduceAction154(168),
                        new ReduceAction154(169),
-                       new ReduceAction154(169),
-                       new ReduceAction164(169),
-                       new ReduceAction165(169),
-                       new ReduceAction166(169),
-                       new ReduceAction167(169),
-                       new ReduceAction168(169),
-                       new ReduceAction169(169),
-                       new ReduceAction170(169),
-                       new ReduceAction154(169),
-                       new ReduceAction154(169),
-                       new ReduceAction154(169),
-                       new ReduceAction154(169),
-                       new ReduceAction154(169),
-                       new ReduceAction154(169),
-                       new ReduceAction177(169),
-                       new ReduceAction178(169),
-                       new ReduceAction179(169),
-                       new ReduceAction180(169),
-                       new ReduceAction181(169),
-                       new ReduceAction182(169),
-                       new ReduceAction183(169),
-                       new ReduceAction182(169),
-                       new ReduceAction185(169),
-                       new ReduceAction186(169),
-                       new ReduceAction185(169),
-                       new ReduceAction188(169),
-                       new ReduceAction195(170),
-                       new ReduceAction196(170),
-                       new ReduceAction197(170),
-                       new ReduceAction198(170),
-                       new ReduceAction199(170),
-                       new ReduceAction200(170),
-                       new ReduceAction201(170),
-                       new ReduceAction202(170),
-                       new ReduceAction203(170),
-                       new ReduceAction204(170),
-                       new ReduceAction154(171),
+                       new ReduceAction154(170),
+                       new ReduceAction154(170),
+                       new ReduceAction164(170),
+                       new ReduceAction165(170),
+                       new ReduceAction166(170),
+                       new ReduceAction167(170),
+                       new ReduceAction168(170),
+                       new ReduceAction169(170),
+                       new ReduceAction170(170),
+                       new ReduceAction154(170),
+                       new ReduceAction154(170),
+                       new ReduceAction154(170),
+                       new ReduceAction154(170),
+                       new ReduceAction154(170),
+                       new ReduceAction154(170),
+                       new ReduceAction177(170),
+                       new ReduceAction178(170),
+                       new ReduceAction179(170),
+                       new ReduceAction180(170),
+                       new ReduceAction181(170),
+                       new ReduceAction182(170),
+                       new ReduceAction183(170),
+                       new ReduceAction182(170),
+                       new ReduceAction185(170),
+                       new ReduceAction186(170),
+                       new ReduceAction185(170),
+                       new ReduceAction188(170),
+                       new ReduceAction195(171),
+                       new ReduceAction196(171),
+                       new ReduceAction197(171),
+                       new ReduceAction198(171),
+                       new ReduceAction199(171),
+                       new ReduceAction200(171),
+                       new ReduceAction201(171),
+                       new ReduceAction202(171),
+                       new ReduceAction203(171),
+                       new ReduceAction204(171),
                        new ReduceAction154(172),
-                       new ReduceAction151(173),
-                       new ReduceAction152(173),
-                       new ReduceAction153(173),
+                       new ReduceAction154(173),
                        new ReduceAction151(174),
                        new ReduceAction152(174),
                        new ReduceAction153(174),
-                       new ReduceAction154(175),
-                       new ReduceAction154(175),
-                       new ReduceAction164(175),
-                       new ReduceAction165(175),
-                       new ReduceAction166(175),
-                       new ReduceAction167(175),
-                       new ReduceAction168(175),
-                       new ReduceAction169(175),
-                       new ReduceAction170(175),
-                       new ReduceAction154(175),
-                       new ReduceAction154(175),
-                       new ReduceAction154(175),
-                       new ReduceAction154(175),
-                       new ReduceAction154(175),
-                       new ReduceAction188(175),
+                       new ReduceAction151(175),
+                       new ReduceAction152(175),
+                       new ReduceAction153(175),
                        new ReduceAction154(176),
                        new ReduceAction154(176),
                        new ReduceAction164(176),
@@ -800,46 +786,61 @@ redef class Parser
                        new ReduceAction154(178),
                        new ReduceAction154(178),
                        new ReduceAction188(178),
-                       new ReduceAction335(179),
-                       new ReduceAction337(179),
-                       new ReduceAction792(180),
-                       new ReduceAction793(180),
+                       new ReduceAction154(179),
+                       new ReduceAction154(179),
+                       new ReduceAction164(179),
+                       new ReduceAction165(179),
+                       new ReduceAction166(179),
+                       new ReduceAction167(179),
+                       new ReduceAction168(179),
+                       new ReduceAction169(179),
+                       new ReduceAction170(179),
+                       new ReduceAction154(179),
+                       new ReduceAction154(179),
+                       new ReduceAction154(179),
+                       new ReduceAction154(179),
+                       new ReduceAction154(179),
+                       new ReduceAction188(179),
+                       new ReduceAction335(180),
+                       new ReduceAction337(180),
+                       new ReduceAction793(181),
                        new ReduceAction794(181),
-                       new ReduceAction795(181),
+                       new ReduceAction795(182),
                        new ReduceAction796(182),
-                       new ReduceAction797(182),
+                       new ReduceAction797(183),
                        new ReduceAction798(183),
-                       new ReduceAction799(183),
+                       new ReduceAction799(184),
                        new ReduceAction800(184),
-                       new ReduceAction801(184),
+                       new ReduceAction801(185),
                        new ReduceAction802(185),
-                       new ReduceAction803(185),
+                       new ReduceAction803(186),
                        new ReduceAction804(186),
-                       new ReduceAction805(186),
+                       new ReduceAction805(187),
                        new ReduceAction806(187),
-                       new ReduceAction807(187),
-                       new ReduceAction145(188),
-                       new ReduceAction809(188),
+                       new ReduceAction807(188),
+                       new ReduceAction808(188),
+                       new ReduceAction145(189),
                        new ReduceAction810(189),
-                       new ReduceAction811(189),
+                       new ReduceAction811(190),
                        new ReduceAction812(190),
-                       new ReduceAction813(190),
-                       new ReduceAction310(191),
-                       new ReduceAction815(191),
+                       new ReduceAction813(191),
+                       new ReduceAction814(191),
                        new ReduceAction310(192),
-                       new ReduceAction815(192),
+                       new ReduceAction816(192),
                        new ReduceAction310(193),
-                       new ReduceAction815(193),
-                       new ReduceAction328(194),
-                       new ReduceAction821(194),
-                       new ReduceAction810(195),
-                       new ReduceAction811(195),
-                       new ReduceAction349(196),
-                       new ReduceAction825(196),
+                       new ReduceAction816(193),
+                       new ReduceAction310(194),
+                       new ReduceAction816(194),
+                       new ReduceAction328(195),
+                       new ReduceAction822(195),
+                       new ReduceAction811(196),
+                       new ReduceAction812(196),
+                       new ReduceAction350(197),
                        new ReduceAction826(197),
-                       new ReduceAction827(197),
+                       new ReduceAction827(198),
                        new ReduceAction828(198),
-                       new ReduceAction829(198)
+                       new ReduceAction829(199),
+                       new ReduceAction830(199)
                )
        end
 end
@@ -7493,15 +7494,28 @@ private class ReduceAction293
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist6 = p.pop
+                                       var nodearraylist5 = p.pop
+                                       var nodearraylist4 = p.pop
+                                       var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var pexprsnode2 = nodearraylist1
-                                       assert pexprsnode2 isa nullable AExprs
-                                       var pannotationsnode3 = nodearraylist2
-                                       assert pannotationsnode3 isa nullable AAnnotations
+                                       var tobranode2 = nodearraylist1
+                                       assert tobranode2 isa nullable TObra
+                                       var pexprsnode3 = nodearraylist3
+                                       assert pexprsnode3 isa nullable AExprs
+                                       var ptypenode4 = nodearraylist4
+                                       assert ptypenode4 isa nullable AType
+                                       var tcbranode5 = nodearraylist5
+                                       assert tcbranode5 isa nullable TCbra
+                                       var pannotationsnode6 = nodearraylist6
+                                       assert pannotationsnode6 isa nullable AAnnotations
                                        var pexprnode1: nullable AArrayExpr = new AArrayExpr.init_aarrayexpr(
-                                               pexprsnode2,
-                                               pannotationsnode3
+                                               tobranode2,
+                                               pexprsnode3,
+                                               ptypenode4,
+                                               tcbranode5,
+                                               pannotationsnode6
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
@@ -8500,7 +8514,24 @@ private class ReduceAction345
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction347
+private class ReduceAction346
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist1 = p.pop
+                                       var listnode3 = new Array[Object]
+                                       var listnode2 = nodearraylist1
+                                       assert listnode2 isa Array[Object]
+                                       listnode3 = concat(listnode3, listnode2)
+                                       var pexprsnode1: nullable AListExprs = new AListExprs.init_alistexprs(
+                                               listnode3
+                                       )
+                                       node_list = pexprsnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction348
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8520,7 +8551,7 @@ private class ReduceAction347
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction348
+private class ReduceAction349
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8534,7 +8565,7 @@ private class ReduceAction348
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction349
+private class ReduceAction350
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8549,7 +8580,7 @@ private class ReduceAction349
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction350
+private class ReduceAction351
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8571,7 +8602,7 @@ private class ReduceAction350
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction351
+private class ReduceAction352
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8589,7 +8620,7 @@ private class ReduceAction351
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction352
+private class ReduceAction353
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8611,7 +8642,7 @@ private class ReduceAction352
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction353
+private class ReduceAction354
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8633,7 +8664,7 @@ private class ReduceAction353
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction354
+private class ReduceAction355
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8659,7 +8690,7 @@ private class ReduceAction354
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction355
+private class ReduceAction356
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8676,7 +8707,7 @@ private class ReduceAction355
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction356
+private class ReduceAction357
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8697,7 +8728,7 @@ private class ReduceAction356
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction357
+private class ReduceAction358
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8715,7 +8746,7 @@ private class ReduceAction357
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction359
+private class ReduceAction360
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8726,7 +8757,7 @@ private class ReduceAction359
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction360
+private class ReduceAction361
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8738,7 +8769,7 @@ private class ReduceAction360
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction361
+private class ReduceAction362
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8751,7 +8782,7 @@ private class ReduceAction361
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction363
+private class ReduceAction364
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8762,7 +8793,7 @@ private class ReduceAction363
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction364
+private class ReduceAction365
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8774,7 +8805,7 @@ private class ReduceAction364
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction365
+private class ReduceAction366
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8787,7 +8818,7 @@ private class ReduceAction365
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction367
+private class ReduceAction368
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8800,7 +8831,7 @@ private class ReduceAction367
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction368
+private class ReduceAction369
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8813,7 +8844,7 @@ private class ReduceAction368
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction370
+private class ReduceAction371
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8824,7 +8855,7 @@ private class ReduceAction370
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction371
+private class ReduceAction372
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8833,7 +8864,7 @@ private class ReduceAction371
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction373
+private class ReduceAction374
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8850,7 +8881,7 @@ private class ReduceAction373
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction374
+private class ReduceAction375
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8868,7 +8899,7 @@ private class ReduceAction374
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction377
+private class ReduceAction378
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8879,7 +8910,7 @@ private class ReduceAction377
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction378
+private class ReduceAction379
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8889,7 +8920,7 @@ private class ReduceAction378
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction379
+private class ReduceAction380
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8900,7 +8931,7 @@ private class ReduceAction379
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction602
+private class ReduceAction603
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8924,7 +8955,7 @@ private class ReduceAction602
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction604
+private class ReduceAction605
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8944,7 +8975,7 @@ private class ReduceAction604
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction605
+private class ReduceAction606
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8967,7 +8998,7 @@ private class ReduceAction605
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction607
+private class ReduceAction608
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8990,7 +9021,7 @@ private class ReduceAction607
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction623
+private class ReduceAction624
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9003,7 +9034,7 @@ private class ReduceAction623
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction624
+private class ReduceAction625
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9013,7 +9044,7 @@ private class ReduceAction624
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction792
+private class ReduceAction793
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9028,7 +9059,7 @@ private class ReduceAction792
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction793
+private class ReduceAction794
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9047,7 +9078,7 @@ private class ReduceAction793
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction794
+private class ReduceAction795
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9062,7 +9093,7 @@ private class ReduceAction794
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction795
+private class ReduceAction796
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9081,7 +9112,7 @@ private class ReduceAction795
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction796
+private class ReduceAction797
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9096,7 +9127,7 @@ private class ReduceAction796
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction797
+private class ReduceAction798
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9115,7 +9146,7 @@ private class ReduceAction797
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction798
+private class ReduceAction799
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9130,7 +9161,7 @@ private class ReduceAction798
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction799
+private class ReduceAction800
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9149,7 +9180,7 @@ private class ReduceAction799
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction800
+private class ReduceAction801
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9164,7 +9195,7 @@ private class ReduceAction800
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction801
+private class ReduceAction802
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9183,7 +9214,7 @@ private class ReduceAction801
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction802
+private class ReduceAction803
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9198,7 +9229,7 @@ private class ReduceAction802
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction803
+private class ReduceAction804
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9217,7 +9248,7 @@ private class ReduceAction803
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction804
+private class ReduceAction805
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9232,7 +9263,7 @@ private class ReduceAction804
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction805
+private class ReduceAction806
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9251,7 +9282,7 @@ private class ReduceAction805
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction806
+private class ReduceAction807
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9266,7 +9297,7 @@ private class ReduceAction806
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction807
+private class ReduceAction808
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9285,7 +9316,7 @@ private class ReduceAction807
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction809
+private class ReduceAction810
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9304,7 +9335,7 @@ private class ReduceAction809
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction810
+private class ReduceAction811
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9319,7 +9350,7 @@ private class ReduceAction810
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction811
+private class ReduceAction812
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9338,7 +9369,7 @@ private class ReduceAction811
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction812
+private class ReduceAction813
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9352,7 +9383,7 @@ private class ReduceAction812
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction813
+private class ReduceAction814
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9370,7 +9401,7 @@ private class ReduceAction813
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction815
+private class ReduceAction816
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9389,7 +9420,7 @@ private class ReduceAction815
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction821
+private class ReduceAction822
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9408,7 +9439,7 @@ private class ReduceAction821
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction825
+private class ReduceAction826
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9427,7 +9458,7 @@ private class ReduceAction825
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction826
+private class ReduceAction827
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9442,7 +9473,7 @@ private class ReduceAction826
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction827
+private class ReduceAction828
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9461,7 +9492,7 @@ private class ReduceAction827
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction828
+private class ReduceAction829
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9476,7 +9507,7 @@ private class ReduceAction828
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction829
+private class ReduceAction830
        super ReduceAction
        redef fun action(p: Parser)
        do
index 9e74516..e988c5e 100644 (file)
@@ -907,7 +907,10 @@ class AOrangeExpr
 end
 class AArrayExpr
        super AExpr
+       var n_obra: TObra is writable, noinit
        var n_exprs: AExprs is writable, noinit
+       var n_type: nullable AType = null is writable
+       var n_cbra: TCbra is writable, noinit
        var n_annotations: nullable AAnnotations = null is writable
 end
 class ASelfExpr
index d335917..5beee76 100644 (file)
@@ -1513,7 +1513,10 @@ end
 # A literal array. eg. `[x,y,z]`
 class AArrayExpr
        super AExpr
+       var n_obra: TObra is writable, noinit
        var n_exprs: AExprs is writable, noinit
+       var n_type: nullable AType = null is writable
+       var n_cbra: TCbra is writable, noinit
 end
 
 # A read of `self` 
index 384769c..2b98924 100644 (file)
@@ -5039,33 +5039,69 @@ redef class AOrangeExpr
 end
 redef class AArrayExpr
        init init_aarrayexpr (
+               n_obra: nullable TObra,
                n_exprs: nullable AExprs,
+               n_type: nullable AType,
+               n_cbra: nullable TCbra,
                n_annotations: nullable AAnnotations
        )
        do
+               _n_obra = n_obra.as(not null)
+               n_obra.parent = self
                _n_exprs = n_exprs.as(not null)
                n_exprs.parent = self
+               _n_type = n_type
+               if n_type != null then n_type.parent = self
+               _n_cbra = n_cbra.as(not null)
+               n_cbra.parent = self
                _n_annotations = n_annotations
                if n_annotations != null then n_annotations.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
+               if _n_obra == old_child then
+                       n_obra = new_child.as(TObra)
+                       return
+               end
                if _n_exprs == old_child then
                        n_exprs = new_child.as(AExprs)
                        return
                end
+               if _n_type == old_child then
+                       n_type = new_child.as(nullable AType)
+                       return
+               end
+               if _n_cbra == old_child then
+                       n_cbra = new_child.as(TCbra)
+                       return
+               end
                if _n_annotations == old_child then
                        n_annotations = new_child.as(nullable AAnnotations)
                        return
                end
        end
 
+       redef fun n_obra=(node)
+       do
+               _n_obra = node
+               node.parent = self
+       end
        redef fun n_exprs=(node)
        do
                _n_exprs = node
                node.parent = self
        end
+       redef fun n_type=(node)
+       do
+               _n_type = node
+               if node != null then node.parent = self
+       end
+       redef fun n_cbra=(node)
+       do
+               _n_cbra = node
+               node.parent = self
+       end
        redef fun n_annotations=(node)
        do
                _n_annotations = node
@@ -5075,7 +5111,10 @@ redef class AArrayExpr
 
        redef fun visit_all(v: Visitor)
        do
+               v.enter_visit(_n_obra)
                v.enter_visit(_n_exprs)
+               v.enter_visit(_n_type)
+               v.enter_visit(_n_cbra)
                v.enter_visit(_n_annotations)
        end
 end
index e161f75..94b8ba9 100644 (file)
@@ -2211,18 +2211,18 @@ const int lexer_accept_table[] = {
 
 static int parser_action_row1[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        95, 1, 22
 };
 static int parser_action_row2[] = {
        1,
-       -1, 1, 828
+       -1, 1, 829
 };
 static int parser_action_row3[] = {
        1,
-       -1, 1, 826
+       -1, 1, 827
 };
 static int parser_action_row4[] = {
        2,
@@ -2231,18 +2231,18 @@ static int parser_action_row4[] = {
 };
 static int parser_action_row5[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        95, 1, 22
 };
 static int parser_action_row6[] = {
        1,
-       -1, 1, 792
+       -1, 1, 793
 };
 static int parser_action_row7[] = {
        1,
-       -1, 1, 796
+       -1, 1, 797
 };
 static int parser_action_row8[] = {
        1,
@@ -2258,11 +2258,11 @@ static int parser_action_row10[] = {
 };
 static int parser_action_row11[] = {
        1,
-       -1, 1, 794
+       -1, 1, 795
 };
 static int parser_action_row12[] = {
        2,
-       -1, 1, 377,
+       -1, 1, 378,
        95, 1, 23
 };
 static int parser_action_row13[] = {
@@ -2283,7 +2283,7 @@ static int parser_action_row13[] = {
        36, 0, 38,
        37, 0, 39,
        38, 0, 40,
-       41, 1, 358,
+       41, 1, 359,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
@@ -2293,7 +2293,7 @@ static int parser_action_row13[] = {
        53, 0, 47,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
+       83, 1, 359,
        84, 0, 50,
        85, 0, 51,
        86, 0, 52,
@@ -2304,7 +2304,7 @@ static int parser_action_row13[] = {
 };
 static int parser_action_row14[] = {
        2,
-       -1, 1, 375,
+       -1, 1, 376,
        1, 0, 2
 };
 static int parser_action_row15[] = {
@@ -2314,40 +2314,40 @@ static int parser_action_row15[] = {
 static int parser_action_row16[] = {
        3,
        -1, 3, 15,
-       0, 0, 83,
-       1, 0, 84
+       0, 0, 82,
+       1, 0, 83
 };
 static int parser_action_row17[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        95, 1, 22
 };
 static int parser_action_row18[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        95, 1, 22
 };
 static int parser_action_row19[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        95, 1, 22
 };
 static int parser_action_row20[] = {
        3,
-       -1, 1, 373,
+       -1, 1, 374,
        0, 0, 1,
-       1, 0, 97
+       1, 0, 96
 };
 static int parser_action_row21[] = {
        2,
-       -1, 1, 380,
-       0, 0, 99
+       -1, 1, 381,
+       0, 0, 98
 };
 static int parser_action_row22[] = {
        1,
@@ -2371,7 +2371,7 @@ static int parser_action_row23[] = {
        36, 0, 38,
        37, 0, 39,
        38, 0, 40,
-       41, 1, 358,
+       41, 1, 359,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
@@ -2381,7 +2381,7 @@ static int parser_action_row23[] = {
        53, 0, 47,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
+       83, 1, 359,
        84, 0, 50,
        85, 0, 51,
        86, 0, 52,
@@ -2392,21 +2392,21 @@ static int parser_action_row23[] = {
 };
 static int parser_action_row24[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        95, 1, 22
 };
 static int parser_action_row25[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        95, 1, 22
 };
 static int parser_action_row26[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        95, 1, 22
@@ -2414,31 +2414,31 @@ static int parser_action_row26[] = {
 static int parser_action_row27[] = {
        26,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 117,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 116,
        53, 1, 340,
        61, 1, 340,
        63, 1, 340,
-       65, 0, 118,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
 static int parser_action_row28[] = {
        1,
@@ -2446,10 +2446,10 @@ static int parser_action_row28[] = {
 };
 static int parser_action_row29[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 142,
+       9, 0, 141,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -2482,26 +2482,26 @@ static int parser_action_row29[] = {
 static int parser_action_row30[] = {
        2,
        -1, 3, 29,
-       82, 0, 147
+       82, 0, 146
 };
 static int parser_action_row31[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row32[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row33[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 142,
+       9, 0, 141,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -2533,36 +2533,36 @@ static int parser_action_row33[] = {
 };
 static int parser_action_row34[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row35[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row36[] = {
        24,
        -1, 1, 164,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
-       41, 1, 358,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
+       41, 1, 359,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
+       83, 1, 359,
        84, 0, 50,
        85, 0, 51,
        86, 0, 52,
@@ -2573,12 +2573,12 @@ static int parser_action_row36[] = {
 static int parser_action_row37[] = {
        2,
        -1, 1, 169,
-       49, 0, 175
+       49, 0, 174
 };
 static int parser_action_row38[] = {
        2,
        -1, 1, 166,
-       49, 0, 175
+       49, 0, 174
 };
 static int parser_action_row39[] = {
        1,
@@ -2586,22 +2586,22 @@ static int parser_action_row39[] = {
 };
 static int parser_action_row40[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
-       82, 0, 178,
+       82, 0, 177,
        84, 0, 50,
        85, 0, 51,
        86, 0, 52,
@@ -2611,76 +2611,76 @@ static int parser_action_row40[] = {
 };
 static int parser_action_row41[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row42[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row43[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row44[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row45[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row46[] = {
        2,
        -1, 3, 45,
-       11, 0, 190
+       11, 0, 189
 };
 static int parser_action_row47[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row48[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row49[] = {
        2,
        -1, 3, 48,
-       57, 0, 193
+       57, 0, 192
 };
 static int parser_action_row50[] = {
        2,
-       -1, 1, 359,
-       57, 0, 194
+       -1, 1, 360,
+       57, 0, 193
 };
 static int parser_action_row51[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row52[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row53[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row54[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row55[] = {
        1,
@@ -2689,7 +2689,7 @@ static int parser_action_row55[] = {
 static int parser_action_row56[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row57[] = {
        1,
@@ -2698,15 +2698,15 @@ static int parser_action_row57[] = {
 static int parser_action_row58[] = {
        5,
        -1, 1, 80,
-       18, 0, 200,
-       19, 0, 201,
-       20, 0, 202,
-       21, 0, 203
+       18, 0, 199,
+       19, 0, 200,
+       20, 0, 201,
+       21, 0, 202
 };
 static int parser_action_row59[] = {
        2,
        -1, 3, 58,
-       94, 0, 205
+       94, 0, 204
 };
 static int parser_action_row60[] = {
        1,
@@ -2761,9 +2761,9 @@ static int parser_action_row71[] = {
 static int parser_action_row72[] = {
        4,
        -1, 3, 71,
-       53, 0, 209,
-       61, 0, 210,
-       63, 0, 211
+       53, 0, 208,
+       61, 0, 209,
+       63, 0, 210
 };
 static int parser_action_row73[] = {
        1,
@@ -2776,80 +2776,79 @@ static int parser_action_row74[] = {
 static int parser_action_row75[] = {
        3,
        -1, 3, 74,
-       89, 0, 213,
-       90, 0, 214
+       89, 0, 212,
+       90, 0, 213
 };
 static int parser_action_row76[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row77[] = {
-       2,
-       -1, 1, 306,
-       80, 0, 184
-};
-static int parser_action_row78[] = {
        3,
-       -1, 3, 77,
-       41, 0, 221,
-       83, 0, 222
+       -1, 3, 76,
+       41, 0, 219,
+       83, 0, 220
 };
-static int parser_action_row79[] = {
+static int parser_action_row78[] = {
        29,
        -1, 1, 340,
        0, 1, 344,
        1, 1, 344,
        9, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 117,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 116,
        52, 1, 344,
        55, 1, 344,
-       65, 0, 118,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123,
+       91, 0, 122,
        95, 1, 344
 };
-static int parser_action_row80[] = {
+static int parser_action_row79[] = {
        1,
-       -1, 1, 824
+       -1, 1, 825
 };
-static int parser_action_row81[] = {
+static int parser_action_row80[] = {
        3,
-       -1, 1, 355,
-       12, 0, 225,
-       82, 0, 226
+       -1, 1, 356,
+       12, 0, 223,
+       82, 0, 224
 };
-static int parser_action_row82[] = {
+static int parser_action_row81[] = {
        4,
-       -1, 1, 357,
-       12, 0, 227,
+       -1, 1, 358,
+       12, 0, 225,
        81, 0, 48,
-       82, 0, 228
+       82, 0, 226
 };
-static int parser_action_row83[] = {
+static int parser_action_row82[] = {
        3,
-       -1, 1, 374,
+       -1, 1, 375,
        0, 0, 1,
-       1, 0, 97
+       1, 0, 96
+};
+static int parser_action_row83[] = {
+       1,
+       -1, 1, 373
 };
 static int parser_action_row84[] = {
        1,
@@ -2857,43 +2856,39 @@ static int parser_action_row84[] = {
 };
 static int parser_action_row85[] = {
        1,
-       -1, 1, 371
+       -1, 1, 382
 };
 static int parser_action_row86[] = {
        1,
-       -1, 1, 381
+       -1, 1, 794
 };
 static int parser_action_row87[] = {
        1,
-       -1, 1, 793
-};
-static int parser_action_row88[] = {
-       1,
        -1, 1, 2
 };
-static int parser_action_row89[] = {
+static int parser_action_row88[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        95, 1, 22
 };
-static int parser_action_row90[] = {
+static int parser_action_row89[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        95, 1, 22
 };
-static int parser_action_row91[] = {
+static int parser_action_row90[] = {
        1,
        -1, 1, 4
 };
-static int parser_action_row92[] = {
+static int parser_action_row91[] = {
        1,
-       -1, 1, 795
+       -1, 1, 796
 };
-static int parser_action_row93[] = {
+static int parser_action_row92[] = {
        34,
        -1, 1, 42,
        12, 0, 26,
@@ -2911,7 +2906,7 @@ static int parser_action_row93[] = {
        36, 0, 38,
        37, 0, 39,
        38, 0, 40,
-       41, 1, 358,
+       41, 1, 359,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
@@ -2921,7 +2916,7 @@ static int parser_action_row93[] = {
        53, 0, 47,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
+       83, 1, 359,
        84, 0, 50,
        85, 0, 51,
        86, 0, 52,
@@ -2930,22 +2925,22 @@ static int parser_action_row93[] = {
        91, 0, 55,
        94, 0, 56
 };
-static int parser_action_row94[] = {
+static int parser_action_row93[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        95, 1, 22
 };
-static int parser_action_row95[] = {
+static int parser_action_row94[] = {
        1,
-       -1, 1, 797
+       -1, 1, 798
 };
-static int parser_action_row96[] = {
+static int parser_action_row95[] = {
        1,
        -1, 1, 8
 };
-static int parser_action_row97[] = {
+static int parser_action_row96[] = {
        32,
        -1, 1, 42,
        12, 0, 26,
@@ -2962,7 +2957,7 @@ static int parser_action_row97[] = {
        36, 0, 38,
        37, 0, 39,
        38, 0, 40,
-       41, 1, 358,
+       41, 1, 359,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
@@ -2972,7 +2967,7 @@ static int parser_action_row97[] = {
        53, 0, 47,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
+       83, 1, 359,
        84, 0, 50,
        85, 0, 51,
        86, 0, 52,
@@ -2980,281 +2975,281 @@ static int parser_action_row97[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row98[] = {
+static int parser_action_row97[] = {
        1,
-       -1, 1, 827
+       -1, 1, 828
 };
-static int parser_action_row99[] = {
+static int parser_action_row98[] = {
        2,
-       -1, 1, 378,
-       0, 0, 99
+       -1, 1, 379,
+       0, 0, 98
 };
-static int parser_action_row100[] = {
+static int parser_action_row99[] = {
        1,
-       -1, 1, 829
+       -1, 1, 830
 };
-static int parser_action_row101[] = {
+static int parser_action_row100[] = {
        5,
        -1, 1, 80,
-       18, 0, 200,
-       19, 0, 201,
-       20, 0, 202,
-       21, 0, 203
+       18, 0, 199,
+       19, 0, 200,
+       20, 0, 201,
+       21, 0, 202
 };
-static int parser_action_row102[] = {
+static int parser_action_row101[] = {
        1,
        -1, 1, 3
 };
-static int parser_action_row103[] = {
+static int parser_action_row102[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        95, 1, 22
 };
-static int parser_action_row104[] = {
+static int parser_action_row103[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        95, 1, 22
 };
-static int parser_action_row105[] = {
+static int parser_action_row104[] = {
        1,
        -1, 1, 5
 };
-static int parser_action_row106[] = {
+static int parser_action_row105[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        95, 1, 22
 };
-static int parser_action_row107[] = {
+static int parser_action_row106[] = {
        1,
        -1, 1, 9
 };
-static int parser_action_row108[] = {
+static int parser_action_row107[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
+};
+static int parser_action_row108[] = {
+       3,
+       -1, 1, 377,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row109[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row110[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row111[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row112[] = {
-       3,
-       -1, 1, 376,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 306,
+       80, 0, 183
 };
 static int parser_action_row113[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row114[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row115[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row116[] = {
-       2,
-       -1, 1, 306,
-       80, 0, 184
-};
-static int parser_action_row117[] = {
        15,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 252,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 250,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row118[] = {
+static int parser_action_row117[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row119[] = {
+static int parser_action_row118[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row119[] = {
+       2,
+       -1, 1, 306,
+       80, 0, 183
+};
 static int parser_action_row120[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row121[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row122[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row123[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row124[] = {
-       2,
-       -1, 1, 306,
-       80, 0, 184
-};
-static int parser_action_row125[] = {
        1,
-       -1, 1, 553
+       -1, 1, 554
 };
-static int parser_action_row126[] = {
+static int parser_action_row125[] = {
        1,
        -1, 1, 273
 };
-static int parser_action_row127[] = {
+static int parser_action_row126[] = {
        1,
        -1, 1, 181
 };
-static int parser_action_row128[] = {
+static int parser_action_row127[] = {
        3,
-       -1, 3, 127,
-       41, 0, 262,
-       83, 0, 263
+       -1, 3, 126,
+       41, 0, 260,
+       83, 0, 261
 };
-static int parser_action_row129[] = {
+static int parser_action_row128[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
-static int parser_action_row130[] = {
+static int parser_action_row129[] = {
        2,
-       -1, 1, 355,
-       82, 0, 226
+       -1, 1, 356,
+       82, 0, 224
 };
-static int parser_action_row131[] = {
+static int parser_action_row130[] = {
        1,
        -1, 1, 342
 };
-static int parser_action_row132[] = {
+static int parser_action_row131[] = {
        4,
-       -1, 1, 494,
-       29, 0, 265,
-       30, 0, 266,
-       32, 0, 267
+       -1, 1, 495,
+       29, 0, 263,
+       30, 0, 264,
+       32, 0, 265
 };
-static int parser_action_row133[] = {
+static int parser_action_row132[] = {
        1,
-       -1, 1, 496
+       -1, 1, 497
 };
-static int parser_action_row134[] = {
+static int parser_action_row133[] = {
        3,
-       -1, 1, 501,
-       74, 0, 268,
-       77, 0, 269
+       -1, 1, 502,
+       74, 0, 266,
+       77, 0, 267
 };
-static int parser_action_row135[] = {
+static int parser_action_row134[] = {
        11,
-       -1, 1, 503,
-       39, 0, 270,
-       64, 0, 271,
-       65, 0, 272,
-       70, 0, 273,
-       71, 0, 274,
-       72, 0, 275,
-       73, 0, 276,
-       75, 0, 277,
-       76, 0, 278,
-       78, 0, 279
+       -1, 1, 504,
+       39, 0, 268,
+       64, 0, 269,
+       65, 0, 270,
+       70, 0, 271,
+       71, 0, 272,
+       72, 0, 273,
+       73, 0, 274,
+       75, 0, 275,
+       76, 0, 276,
+       78, 0, 277
 };
-static int parser_action_row136[] = {
+static int parser_action_row135[] = {
        4,
-       -1, 1, 514,
-       66, 0, 280,
-       68, 0, 281,
-       69, 0, 282
+       -1, 1, 515,
+       66, 0, 278,
+       68, 0, 279,
+       69, 0, 280
 };
-static int parser_action_row137[] = {
+static int parser_action_row136[] = {
        1,
-       -1, 1, 517
+       -1, 1, 518
 };
-static int parser_action_row138[] = {
+static int parser_action_row137[] = {
        2,
-       -1, 1, 521,
-       67, 0, 283
+       -1, 1, 522,
+       67, 0, 281
 };
-static int parser_action_row139[] = {
+static int parser_action_row138[] = {
        1,
-       -1, 1, 523
+       -1, 1, 524
 };
-static int parser_action_row140[] = {
+static int parser_action_row139[] = {
        4,
-       -1, 1, 526,
-       53, 0, 209,
-       61, 0, 284,
-       63, 0, 285
+       -1, 1, 527,
+       53, 0, 208,
+       61, 0, 282,
+       63, 0, 283
 };
-static int parser_action_row141[] = {
+static int parser_action_row140[] = {
        1,
-       -1, 1, 530
+       -1, 1, 531
 };
-static int parser_action_row142[] = {
+static int parser_action_row141[] = {
        3,
-       -1, 1, 357,
+       -1, 1, 358,
        81, 0, 48,
-       82, 0, 228
+       82, 0, 226
 };
-static int parser_action_row143[] = {
+static int parser_action_row142[] = {
        2,
        -1, 1, 153,
-       49, 1, 726
+       49, 1, 727
 };
-static int parser_action_row144[] = {
+static int parser_action_row143[] = {
        1,
        -1, 1, 208
 };
-static int parser_action_row145[] = {
+static int parser_action_row144[] = {
        1,
        -1, 1, 154
 };
-static int parser_action_row146[] = {
+static int parser_action_row145[] = {
        30,
-       -1, 1, 358,
-       9, 0, 288,
+       -1, 1, 359,
+       9, 0, 286,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -3284,37 +3279,37 @@ static int parser_action_row146[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row147[] = {
+static int parser_action_row146[] = {
        2,
-       -1, 3, 146,
-       49, 0, 175
+       -1, 3, 145,
+       49, 0, 174
 };
-static int parser_action_row148[] = {
+static int parser_action_row147[] = {
        3,
        -1, 1, 150,
-       56, 0, 292,
-       80, 0, 184
+       56, 0, 290,
+       80, 0, 183
 };
-static int parser_action_row149[] = {
+static int parser_action_row148[] = {
        1,
-       -1, 1, 377
+       -1, 1, 378
 };
-static int parser_action_row150[] = {
+static int parser_action_row149[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -3324,22 +3319,22 @@ static int parser_action_row150[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row151[] = {
+static int parser_action_row150[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -3349,59 +3344,59 @@ static int parser_action_row151[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row152[] = {
+static int parser_action_row151[] = {
        1,
        -1, 1, 217
 };
-static int parser_action_row153[] = {
+static int parser_action_row152[] = {
        2,
+       -1, 3, 151,
+       49, 0, 174
+};
+static int parser_action_row153[] = {
+       3,
        -1, 3, 152,
-       49, 0, 175
+       51, 0, 296,
+       82, 0, 297
 };
 static int parser_action_row154[] = {
-       3,
+       2,
        -1, 3, 153,
-       51, 0, 298,
-       82, 0, 299
+       87, 0, 299
 };
 static int parser_action_row155[] = {
        2,
-       -1, 3, 154,
-       87, 0, 301
+       -1, 1, 340,
+       51, 0, 240
 };
 static int parser_action_row156[] = {
-       2,
-       -1, 1, 340,
-       51, 0, 242
+       3,
+       -1, 1, 377,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row157[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row158[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row159[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row160[] = {
-       3,
-       -1, 1, 376,
-       0, 0, 1,
-       1, 0, 2
-};
-static int parser_action_row161[] = {
        17,
-       -1, 1, 358,
-       12, 0, 155,
+       -1, 1, 359,
+       12, 0, 154,
        38, 0, 40,
        42, 0, 41,
        43, 0, 42,
@@ -3418,124 +3413,124 @@ static int parser_action_row161[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row162[] = {
+static int parser_action_row161[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row163[] = {
+static int parser_action_row162[] = {
        1,
        -1, 1, 165
 };
-static int parser_action_row164[] = {
+static int parser_action_row163[] = {
        1,
        -1, 1, 229
 };
-static int parser_action_row165[] = {
+static int parser_action_row164[] = {
        4,
        -1, 1, 230,
-       29, 0, 309,
-       30, 0, 310,
-       32, 0, 311
+       29, 0, 307,
+       30, 0, 308,
+       32, 0, 309
 };
-static int parser_action_row166[] = {
+static int parser_action_row165[] = {
        1,
        -1, 1, 232
 };
-static int parser_action_row167[] = {
+static int parser_action_row166[] = {
        3,
        -1, 1, 237,
-       74, 0, 312,
-       77, 0, 313
+       74, 0, 310,
+       77, 0, 311
 };
-static int parser_action_row168[] = {
+static int parser_action_row167[] = {
        11,
        -1, 1, 239,
-       39, 0, 314,
-       64, 0, 315,
-       65, 0, 316,
-       70, 0, 317,
-       71, 0, 318,
-       72, 0, 319,
-       73, 0, 320,
-       75, 0, 321,
-       76, 0, 322,
-       78, 0, 323
+       39, 0, 312,
+       64, 0, 313,
+       65, 0, 314,
+       70, 0, 315,
+       71, 0, 316,
+       72, 0, 317,
+       73, 0, 318,
+       75, 0, 319,
+       76, 0, 320,
+       78, 0, 321
 };
-static int parser_action_row169[] = {
+static int parser_action_row168[] = {
        4,
        -1, 1, 250,
-       66, 0, 324,
-       68, 0, 325,
-       69, 0, 326
+       66, 0, 322,
+       68, 0, 323,
+       69, 0, 324
 };
-static int parser_action_row170[] = {
+static int parser_action_row169[] = {
        1,
        -1, 1, 253
 };
-static int parser_action_row171[] = {
+static int parser_action_row170[] = {
        2,
        -1, 1, 257,
-       67, 0, 327
+       67, 0, 325
 };
-static int parser_action_row172[] = {
+static int parser_action_row171[] = {
        1,
        -1, 1, 259
 };
-static int parser_action_row173[] = {
+static int parser_action_row172[] = {
        4,
        -1, 1, 262,
-       53, 0, 209,
-       61, 0, 210,
-       63, 0, 328
+       53, 0, 208,
+       61, 0, 209,
+       63, 0, 326
 };
-static int parser_action_row174[] = {
+static int parser_action_row173[] = {
        3,
-       -1, 3, 173,
-       41, 0, 330,
-       83, 0, 331
+       -1, 3, 172,
+       41, 0, 328,
+       83, 0, 329
 };
-static int parser_action_row175[] = {
+static int parser_action_row174[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
-static int parser_action_row176[] = {
+static int parser_action_row175[] = {
        2,
        -1, 1, 189,
-       82, 0, 333
+       82, 0, 331
 };
-static int parser_action_row177[] = {
+static int parser_action_row176[] = {
        1,
        -1, 1, 170
 };
-static int parser_action_row178[] = {
+static int parser_action_row177[] = {
        1,
        -1, 1, 167
 };
-static int parser_action_row179[] = {
+static int parser_action_row178[] = {
        3,
-       -1, 1, 359,
-       56, 0, 334,
-       57, 0, 194
+       -1, 1, 360,
+       56, 0, 332,
+       57, 0, 193
 };
-static int parser_action_row180[] = {
+static int parser_action_row179[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -3545,74 +3540,74 @@ static int parser_action_row180[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row181[] = {
+static int parser_action_row180[] = {
        1,
        -1, 1, 226
 };
-static int parser_action_row182[] = {
+static int parser_action_row181[] = {
        2,
        -1, 1, 229,
-       24, 1, 683
+       24, 1, 684
 };
-static int parser_action_row183[] = {
+static int parser_action_row182[] = {
        2,
-       -1, 3, 182,
-       24, 0, 337
+       -1, 3, 181,
+       24, 0, 335
 };
-static int parser_action_row184[] = {
+static int parser_action_row183[] = {
        3,
-       -1, 3, 183,
-       47, 0, 338,
-       81, 0, 339
+       -1, 3, 182,
+       47, 0, 336,
+       81, 0, 337
 };
-static int parser_action_row185[] = {
+static int parser_action_row184[] = {
        3,
        -1, 1, 42,
        13, 0, 27,
-       51, 0, 341
+       51, 0, 339
 };
-static int parser_action_row186[] = {
+static int parser_action_row185[] = {
        1,
        -1, 1, 305
 };
-static int parser_action_row187[] = {
+static int parser_action_row186[] = {
        1,
        -1, 1, 280
 };
-static int parser_action_row188[] = {
+static int parser_action_row187[] = {
        1,
        -1, 1, 281
 };
-static int parser_action_row189[] = {
+static int parser_action_row188[] = {
        1,
        -1, 1, 282
 };
-static int parser_action_row190[] = {
+static int parser_action_row189[] = {
        1,
        -1, 1, 283
 };
-static int parser_action_row191[] = {
+static int parser_action_row190[] = {
        3,
-       -1, 3, 190,
-       47, 0, 344,
-       81, 0, 345
+       -1, 3, 189,
+       47, 0, 342,
+       81, 0, 343
 };
-static int parser_action_row192[] = {
+static int parser_action_row191[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -3622,22 +3617,22 @@ static int parser_action_row192[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row193[] = {
+static int parser_action_row192[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -3647,83 +3642,83 @@ static int parser_action_row193[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row194[] = {
+static int parser_action_row193[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row195[] = {
+static int parser_action_row194[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row196[] = {
+static int parser_action_row195[] = {
        1,
        -1, 1, 284
 };
-static int parser_action_row197[] = {
+static int parser_action_row196[] = {
        1,
        -1, 1, 285
 };
-static int parser_action_row198[] = {
+static int parser_action_row197[] = {
        1,
        -1, 1, 286
 };
-static int parser_action_row199[] = {
+static int parser_action_row198[] = {
        1,
        -1, 1, 288
 };
-static int parser_action_row200[] = {
+static int parser_action_row199[] = {
        1,
        -1, 1, 287
 };
-static int parser_action_row201[] = {
+static int parser_action_row200[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row202[] = {
+static int parser_action_row201[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row203[] = {
+static int parser_action_row202[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row204[] = {
+static int parser_action_row203[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row205[] = {
+static int parser_action_row204[] = {
        9,
-       -1, 3, 204,
-       3, 0, 356,
-       4, 0, 357,
-       5, 0, 358,
-       6, 0, 359,
-       7, 0, 360,
-       8, 0, 361,
-       10, 0, 362,
-       17, 0, 363
+       -1, 3, 203,
+       3, 0, 355,
+       4, 0, 356,
+       5, 0, 357,
+       6, 0, 358,
+       7, 0, 359,
+       8, 0, 360,
+       10, 0, 361,
+       17, 0, 362
 };
-static int parser_action_row206[] = {
+static int parser_action_row205[] = {
        1,
        -1, 1, 137
 };
-static int parser_action_row207[] = {
+static int parser_action_row206[] = {
        1,
-       -1, 1, 810
+       -1, 1, 811
 };
-static int parser_action_row208[] = {
+static int parser_action_row207[] = {
        31,
        -1, 1, 157,
        12, 0, 26,
@@ -3739,7 +3734,7 @@ static int parser_action_row208[] = {
        36, 0, 38,
        37, 0, 39,
        38, 0, 40,
-       41, 1, 358,
+       41, 1, 359,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
@@ -3749,7 +3744,7 @@ static int parser_action_row208[] = {
        53, 0, 47,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
+       83, 1, 359,
        84, 0, 50,
        85, 0, 51,
        86, 0, 52,
@@ -3757,80 +3752,80 @@ static int parser_action_row208[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row209[] = {
+static int parser_action_row208[] = {
        3,
        -1, 1, 156,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row210[] = {
+static int parser_action_row209[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row211[] = {
+static int parser_action_row210[] = {
        1,
        -1, 1, 279
 };
-static int parser_action_row212[] = {
+static int parser_action_row211[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row213[] = {
+static int parser_action_row212[] = {
        4,
        -1, 1, 274,
-       58, 0, 370,
-       59, 0, 371,
-       60, 0, 372
+       58, 0, 369,
+       59, 0, 370,
+       60, 0, 371
 };
-static int parser_action_row214[] = {
+static int parser_action_row213[] = {
        1,
        -1, 1, 301
 };
-static int parser_action_row215[] = {
+static int parser_action_row214[] = {
        1,
        -1, 1, 302
 };
-static int parser_action_row216[] = {
+static int parser_action_row215[] = {
        1,
-       -1, 1, 812
+       -1, 1, 813
 };
-static int parser_action_row217[] = {
+static int parser_action_row216[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row218[] = {
+static int parser_action_row217[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row219[] = {
+static int parser_action_row218[] = {
        3,
-       -1, 3, 218,
-       89, 0, 213,
-       90, 0, 214
+       -1, 3, 217,
+       89, 0, 212,
+       90, 0, 213
 };
-static int parser_action_row220[] = {
+static int parser_action_row219[] = {
        24,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -3842,216 +3837,212 @@ static int parser_action_row220[] = {
        90, 1, 297,
        91, 0, 55
 };
-static int parser_action_row221[] = {
-       1,
-       -1, 1, 293
-};
-static int parser_action_row222[] = {
+static int parser_action_row220[] = {
        26,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 117,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 116,
        53, 1, 340,
        61, 1, 340,
        63, 1, 340,
-       65, 0, 118,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row223[] = {
+static int parser_action_row221[] = {
        4,
        -1, 1, 268,
-       58, 0, 381,
-       59, 0, 371,
-       60, 0, 372
+       58, 0, 380,
+       59, 0, 370,
+       60, 0, 371
 };
-static int parser_action_row224[] = {
+static int parser_action_row222[] = {
        4,
        -1, 1, 270,
-       58, 0, 383,
-       59, 0, 371,
-       60, 0, 372
+       58, 0, 382,
+       59, 0, 370,
+       60, 0, 371
 };
-static int parser_action_row225[] = {
+static int parser_action_row223[] = {
        1,
        -1, 1, 178
 };
-static int parser_action_row226[] = {
+static int parser_action_row224[] = {
        23,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 385,
-       65, 0, 118,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 384,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row227[] = {
+static int parser_action_row225[] = {
        1,
-       -1, 1, 360
+       -1, 1, 361
 };
-static int parser_action_row228[] = {
+static int parser_action_row226[] = {
        23,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 385,
-       65, 0, 118,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 384,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row229[] = {
+static int parser_action_row227[] = {
        2,
-       -1, 1, 362,
-       57, 0, 194
+       -1, 1, 363,
+       57, 0, 193
 };
-static int parser_action_row230[] = {
+static int parser_action_row228[] = {
        1,
-       -1, 1, 825
+       -1, 1, 826
 };
-static int parser_action_row231[] = {
+static int parser_action_row229[] = {
        3,
-       -1, 1, 356,
-       12, 0, 388,
-       82, 0, 389
+       -1, 1, 357,
+       12, 0, 387,
+       82, 0, 388
 };
-static int parser_action_row232[] = {
+static int parser_action_row230[] = {
        2,
-       -1, 1, 379,
-       0, 0, 99
+       -1, 1, 380,
+       0, 0, 98
 };
-static int parser_action_row233[] = {
+static int parser_action_row231[] = {
        1,
        -1, 1, 6
 };
-static int parser_action_row234[] = {
+static int parser_action_row232[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        95, 1, 22
 };
-static int parser_action_row235[] = {
+static int parser_action_row233[] = {
        1,
        -1, 1, 10
 };
-static int parser_action_row236[] = {
+static int parser_action_row234[] = {
        5,
        -1, 1, 80,
-       18, 0, 200,
-       19, 0, 201,
-       20, 0, 202,
-       21, 0, 203
+       18, 0, 199,
+       19, 0, 200,
+       20, 0, 201,
+       21, 0, 202
 };
-static int parser_action_row237[] = {
+static int parser_action_row235[] = {
        1,
        -1, 1, 12
 };
-static int parser_action_row238[] = {
+static int parser_action_row236[] = {
        8,
-       -1, 3, 237,
-       4, 0, 357,
-       5, 0, 358,
-       6, 0, 359,
-       7, 0, 360,
-       8, 0, 361,
-       10, 0, 362,
-       17, 0, 363
+       -1, 3, 235,
+       4, 0, 356,
+       5, 0, 357,
+       6, 0, 358,
+       7, 0, 359,
+       8, 0, 360,
+       10, 0, 361,
+       17, 0, 362
 };
-static int parser_action_row239[] = {
+static int parser_action_row237[] = {
        1,
        -1, 1, 7
 };
-static int parser_action_row240[] = {
+static int parser_action_row238[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        95, 1, 22
 };
-static int parser_action_row241[] = {
+static int parser_action_row239[] = {
        1,
        -1, 1, 11
 };
-static int parser_action_row242[] = {
+static int parser_action_row240[] = {
        1,
        -1, 1, 13
 };
-static int parser_action_row243[] = {
+static int parser_action_row241[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row244[] = {
+static int parser_action_row242[] = {
        1,
-       -1, 1, 537
+       -1, 1, 538
 };
-static int parser_action_row245[] = {
+static int parser_action_row243[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -4061,107 +4052,107 @@ static int parser_action_row245[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row246[] = {
+static int parser_action_row244[] = {
        19,
-       -1, 1, 358,
-       12, 0, 107,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row247[] = {
+static int parser_action_row245[] = {
        3,
-       -1, 3, 246,
-       47, 0, 338,
-       81, 0, 339
+       -1, 3, 244,
+       47, 0, 336,
+       81, 0, 337
 };
-static int parser_action_row248[] = {
+static int parser_action_row246[] = {
        18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
-};
-static int parser_action_row249[] = {
-       1,
-       -1, 1, 544
+       91, 0, 122
 };
-static int parser_action_row250[] = {
+static int parser_action_row247[] = {
        1,
        -1, 1, 545
 };
-static int parser_action_row251[] = {
+static int parser_action_row248[] = {
        1,
        -1, 1, 546
 };
-static int parser_action_row252[] = {
+static int parser_action_row249[] = {
        1,
        -1, 1, 547
 };
-static int parser_action_row253[] = {
+static int parser_action_row250[] = {
+       1,
+       -1, 1, 548
+};
+static int parser_action_row251[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row254[] = {
+static int parser_action_row252[] = {
        3,
-       -1, 3, 253,
-       41, 0, 262,
-       83, 0, 399
+       -1, 3, 251,
+       41, 0, 260,
+       83, 0, 398
 };
-static int parser_action_row255[] = {
+static int parser_action_row253[] = {
        4,
-       -1, 3, 254,
-       53, 0, 209,
-       61, 0, 284,
-       63, 0, 400
+       -1, 3, 252,
+       53, 0, 208,
+       61, 0, 282,
+       63, 0, 399
 };
-static int parser_action_row256[] = {
+static int parser_action_row254[] = {
        23,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
-       52, 0, 401,
+       52, 0, 400,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -4171,284 +4162,284 @@ static int parser_action_row256[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row257[] = {
+static int parser_action_row255[] = {
        18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
+};
+static int parser_action_row256[] = {
+       1,
+       -1, 1, 549
+};
+static int parser_action_row257[] = {
+       1,
+       -1, 1, 550
 };
 static int parser_action_row258[] = {
        1,
-       -1, 1, 548
+       -1, 1, 551
 };
 static int parser_action_row259[] = {
        1,
-       -1, 1, 549
+       -1, 1, 553
 };
 static int parser_action_row260[] = {
        1,
-       -1, 1, 550
+       -1, 1, 552
 };
 static int parser_action_row261[] = {
-       1,
-       -1, 1, 552
+       2,
+       -1, 1, 340,
+       51, 0, 240
 };
 static int parser_action_row262[] = {
        1,
-       -1, 1, 551
+       -1, 1, 533
 };
 static int parser_action_row263[] = {
-       2,
-       -1, 1, 340,
-       51, 0, 242
+       1,
+       -1, 1, 535
 };
 static int parser_action_row264[] = {
-       1,
-       -1, 1, 532
+       3,
+       -1, 1, 377,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row265[] = {
-       1,
-       -1, 1, 534
+       4,
+       -1, 1, 377,
+       0, 0, 1,
+       1, 0, 2,
+       24, 0, 406
 };
 static int parser_action_row266[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row267[] = {
-       4,
-       -1, 1, 376,
+       3,
+       -1, 1, 377,
        0, 0, 1,
-       1, 0, 2,
-       24, 0, 407
+       1, 0, 2
 };
 static int parser_action_row268[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row269[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row270[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row271[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row272[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row273[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row274[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row275[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row276[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row277[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row278[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row279[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row280[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row281[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row282[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row283[] = {
-       3,
-       -1, 1, 376,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 544
 };
 static int parser_action_row284[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row285[] = {
        1,
-       -1, 1, 543
+       -1, 1, 539
 };
 static int parser_action_row286[] = {
-       3,
-       -1, 1, 376,
-       0, 0, 1,
-       1, 0, 2
-};
-static int parser_action_row287[] = {
-       1,
-       -1, 1, 538
-};
-static int parser_action_row288[] = {
        2,
-       -1, 1, 356,
-       82, 0, 389
+       -1, 1, 357,
+       82, 0, 388
 };
-static int parser_action_row289[] = {
+static int parser_action_row287[] = {
        2,
        -1, 1, 152,
-       49, 1, 725
+       49, 1, 726
 };
-static int parser_action_row290[] = {
+static int parser_action_row288[] = {
        2,
        -1, 1, 151,
-       49, 1, 724
+       49, 1, 725
 };
-static int parser_action_row291[] = {
+static int parser_action_row289[] = {
        3,
-       -1, 3, 290,
+       -1, 3, 288,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row292[] = {
+static int parser_action_row290[] = {
        1,
        -1, 1, 207
 };
-static int parser_action_row293[] = {
+static int parser_action_row291[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row294[] = {
+static int parser_action_row292[] = {
        2,
        -1, 1, 191,
-       58, 0, 430
+       58, 0, 429
 };
-static int parser_action_row295[] = {
+static int parser_action_row293[] = {
        2,
        -1, 1, 150,
-       56, 0, 292
+       56, 0, 290
 };
-static int parser_action_row296[] = {
+static int parser_action_row294[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row297[] = {
+static int parser_action_row295[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row298[] = {
+static int parser_action_row296[] = {
        1,
        -1, 1, 216
 };
-static int parser_action_row299[] = {
+static int parser_action_row297[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row300[] = {
+static int parser_action_row298[] = {
        1,
-       -1, 1, 349
+       -1, 1, 350
 };
-static int parser_action_row301[] = {
+static int parser_action_row299[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row302[] = {
+static int parser_action_row300[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row303[] = {
+static int parser_action_row301[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -4458,21 +4449,21 @@ static int parser_action_row303[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row304[] = {
+static int parser_action_row302[] = {
        21,
-       -1, 1, 358,
-       12, 0, 155,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -4482,26 +4473,26 @@ static int parser_action_row304[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row305[] = {
+static int parser_action_row303[] = {
        3,
-       -1, 3, 304,
-       47, 0, 338,
-       81, 0, 339
+       -1, 3, 302,
+       47, 0, 336,
+       81, 0, 337
 };
-static int parser_action_row306[] = {
+static int parser_action_row304[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -4511,33 +4502,33 @@ static int parser_action_row306[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row307[] = {
+static int parser_action_row305[] = {
        4,
-       -1, 3, 306,
-       53, 0, 209,
-       61, 0, 210,
-       63, 0, 441
+       -1, 3, 304,
+       53, 0, 208,
+       61, 0, 209,
+       63, 0, 440
 };
-static int parser_action_row308[] = {
+static int parser_action_row306[] = {
        3,
-       -1, 3, 307,
-       41, 0, 330,
-       83, 0, 442
+       -1, 3, 305,
+       41, 0, 328,
+       83, 0, 441
 };
-static int parser_action_row309[] = {
+static int parser_action_row307[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -4547,167 +4538,167 @@ static int parser_action_row309[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row310[] = {
+static int parser_action_row308[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row311[] = {
+static int parser_action_row309[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
-       24, 0, 445
+       24, 0, 444
+};
+static int parser_action_row310[] = {
+       3,
+       -1, 1, 377,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row311[] = {
+       3,
+       -1, 1, 377,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row312[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row313[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row314[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row315[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row316[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row317[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row318[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row319[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row320[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row321[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row322[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row323[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row324[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row325[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row326[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row327[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row328[] = {
-       3,
-       -1, 1, 376,
-       0, 0, 1,
-       1, 0, 2
-};
-static int parser_action_row329[] = {
-       3,
-       -1, 1, 376,
-       0, 0, 1,
-       1, 0, 2
-};
-static int parser_action_row330[] = {
        1,
        -1, 1, 274
 };
-static int parser_action_row331[] = {
+static int parser_action_row329[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
-static int parser_action_row332[] = {
+static int parser_action_row330[] = {
        1,
        -1, 1, 268
 };
-static int parser_action_row333[] = {
+static int parser_action_row331[] = {
        1,
        -1, 1, 270
 };
-static int parser_action_row334[] = {
+static int parser_action_row332[] = {
        1,
        -1, 1, 190
 };
-static int parser_action_row335[] = {
+static int parser_action_row333[] = {
        1,
        -1, 1, 228
 };
-static int parser_action_row336[] = {
+static int parser_action_row334[] = {
        1,
        -1, 1, 227
 };
-static int parser_action_row337[] = {
+static int parser_action_row335[] = {
        2,
-       -1, 3, 336,
-       24, 0, 465
+       -1, 3, 334,
+       24, 0, 464
 };
-static int parser_action_row338[] = {
+static int parser_action_row336[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 466,
+       9, 0, 465,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -4737,72 +4728,80 @@ static int parser_action_row338[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row339[] = {
+static int parser_action_row337[] = {
        2,
-       -1, 3, 338,
-       81, 0, 469
+       -1, 3, 336,
+       81, 0, 468
 };
-static int parser_action_row340[] = {
+static int parser_action_row338[] = {
        3,
-       -1, 1, 557,
-       53, 0, 470,
-       80, 0, 471
+       -1, 1, 558,
+       53, 0, 469,
+       80, 0, 470
 };
-static int parser_action_row341[] = {
+static int parser_action_row339[] = {
        2,
-       -1, 3, 340,
-       63, 0, 474
+       -1, 3, 338,
+       63, 0, 473
 };
-static int parser_action_row342[] = {
+static int parser_action_row340[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row343[] = {
+static int parser_action_row341[] = {
        5,
        -1, 1, 80,
-       18, 0, 200,
-       19, 0, 201,
-       20, 0, 202,
-       21, 0, 203
+       18, 0, 199,
+       19, 0, 200,
+       20, 0, 201,
+       21, 0, 202
 };
-static int parser_action_row344[] = {
+static int parser_action_row342[] = {
        1,
        -1, 1, 303
 };
-static int parser_action_row345[] = {
+static int parser_action_row343[] = {
        2,
-       -1, 3, 344,
-       81, 0, 477
+       -1, 3, 342,
+       81, 0, 476
 };
-static int parser_action_row346[] = {
+static int parser_action_row344[] = {
        3,
        -1, 1, 306,
-       53, 0, 478,
-       80, 0, 184
+       53, 0, 477,
+       80, 0, 183
 };
-static int parser_action_row347[] = {
+static int parser_action_row345[] = {
        2,
-       -1, 3, 346,
-       56, 0, 480
+       -1, 3, 344,
+       56, 0, 479
 };
-static int parser_action_row348[] = {
+static int parser_action_row346[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row349[] = {
+static int parser_action_row347[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row350[] = {
+static int parser_action_row348[] = {
        2,
-       -1, 3, 349,
-       54, 0, 483
+       -1, 1, 150,
+       56, 0, 290
+};
+static int parser_action_row349[] = {
+       1,
+       -1, 1, 346
+};
+static int parser_action_row350[] = {
+       1,
+       -1, 1, 369
 };
 static int parser_action_row351[] = {
        1,
@@ -4810,94 +4809,90 @@ static int parser_action_row351[] = {
 };
 static int parser_action_row352[] = {
        1,
-       -1, 1, 367
-};
-static int parser_action_row353[] = {
-       1,
        -1, 1, 81
 };
-static int parser_action_row354[] = {
+static int parser_action_row353[] = {
        1,
        -1, 1, 83
 };
-static int parser_action_row355[] = {
+static int parser_action_row354[] = {
        1,
        -1, 1, 82
 };
-static int parser_action_row356[] = {
+static int parser_action_row355[] = {
        1,
        -1, 1, 84
 };
-static int parser_action_row357[] = {
+static int parser_action_row356[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row358[] = {
+static int parser_action_row357[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row359[] = {
+static int parser_action_row358[] = {
        1,
        -1, 1, 44
 };
-static int parser_action_row360[] = {
+static int parser_action_row359[] = {
        2,
-       -1, 3, 359,
-       5, 0, 486
+       -1, 3, 358,
+       5, 0, 485
 };
-static int parser_action_row361[] = {
+static int parser_action_row360[] = {
        1,
        -1, 1, 46
 };
-static int parser_action_row362[] = {
+static int parser_action_row361[] = {
        1,
        -1, 1, 47
 };
-static int parser_action_row363[] = {
+static int parser_action_row362[] = {
        18,
-       -1, 3, 362,
-       53, 0, 487,
-       64, 0, 488,
-       65, 0, 489,
-       66, 0, 490,
-       67, 0, 491,
-       68, 0, 492,
-       69, 0, 493,
-       70, 0, 494,
-       71, 0, 495,
-       72, 0, 496,
-       73, 0, 497,
-       74, 0, 498,
-       75, 0, 499,
-       76, 0, 500,
-       77, 0, 501,
-       78, 0, 502,
-       82, 0, 503
+       -1, 3, 361,
+       53, 0, 486,
+       64, 0, 487,
+       65, 0, 488,
+       66, 0, 489,
+       67, 0, 490,
+       68, 0, 491,
+       69, 0, 492,
+       70, 0, 493,
+       71, 0, 494,
+       72, 0, 495,
+       73, 0, 496,
+       74, 0, 497,
+       75, 0, 498,
+       76, 0, 499,
+       77, 0, 500,
+       78, 0, 501,
+       82, 0, 502
 };
-static int parser_action_row364[] = {
+static int parser_action_row363[] = {
        2,
-       -1, 3, 363,
-       5, 0, 505
+       -1, 3, 362,
+       5, 0, 504
 };
-static int parser_action_row365[] = {
+static int parser_action_row364[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row366[] = {
+static int parser_action_row365[] = {
        1,
        -1, 1, 161
 };
-static int parser_action_row367[] = {
+static int parser_action_row366[] = {
        1,
-       -1, 1, 811
+       -1, 1, 812
 };
-static int parser_action_row368[] = {
+static int parser_action_row367[] = {
        31,
        -1, 1, 158,
        12, 0, 26,
@@ -4913,7 +4908,7 @@ static int parser_action_row368[] = {
        36, 0, 38,
        37, 0, 39,
        38, 0, 40,
-       41, 1, 358,
+       41, 1, 359,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
@@ -4923,7 +4918,7 @@ static int parser_action_row368[] = {
        53, 0, 47,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
+       83, 1, 359,
        84, 0, 50,
        85, 0, 51,
        86, 0, 52,
@@ -4931,22 +4926,22 @@ static int parser_action_row368[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row369[] = {
+static int parser_action_row368[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -4956,30 +4951,30 @@ static int parser_action_row369[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row370[] = {
+static int parser_action_row369[] = {
        5,
-       -1, 1, 358,
+       -1, 1, 359,
        12, 0, 507,
        46, 0, 508,
        81, 0, 48,
        82, 0, 49
 };
-static int parser_action_row371[] = {
+static int parser_action_row370[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -4989,30 +4984,30 @@ static int parser_action_row371[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row372[] = {
+static int parser_action_row371[] = {
        1,
        -1, 1, 205
 };
-static int parser_action_row373[] = {
+static int parser_action_row372[] = {
        1,
        -1, 1, 206
 };
-static int parser_action_row374[] = {
+static int parser_action_row373[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -5022,22 +5017,22 @@ static int parser_action_row374[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row375[] = {
+static int parser_action_row374[] = {
        24,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -5049,49 +5044,49 @@ static int parser_action_row375[] = {
        90, 1, 300,
        91, 0, 55
 };
-static int parser_action_row376[] = {
+static int parser_action_row375[] = {
        1,
        -1, 1, 294
 };
-static int parser_action_row377[] = {
+static int parser_action_row376[] = {
        1,
-       -1, 1, 813
+       -1, 1, 814
 };
-static int parser_action_row378[] = {
+static int parser_action_row377[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row379[] = {
+static int parser_action_row378[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row380[] = {
+static int parser_action_row379[] = {
        1,
        -1, 1, 271
 };
-static int parser_action_row381[] = {
+static int parser_action_row380[] = {
        1,
        -1, 1, 179
 };
-static int parser_action_row382[] = {
+static int parser_action_row381[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -5101,22 +5096,22 @@ static int parser_action_row382[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row383[] = {
+static int parser_action_row382[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -5126,22 +5121,22 @@ static int parser_action_row383[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row384[] = {
+static int parser_action_row383[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -5151,22 +5146,22 @@ static int parser_action_row384[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row385[] = {
+static int parser_action_row384[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -5176,85 +5171,85 @@ static int parser_action_row385[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row386[] = {
+static int parser_action_row385[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row387[] = {
+static int parser_action_row386[] = {
        1,
        -1, 1, 185
 };
-static int parser_action_row388[] = {
+static int parser_action_row387[] = {
        1,
        -1, 1, 187
 };
-static int parser_action_row389[] = {
+static int parser_action_row388[] = {
        23,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 385,
-       65, 0, 118,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 384,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row390[] = {
+static int parser_action_row389[] = {
        1,
-       -1, 1, 361
+       -1, 1, 362
 };
-static int parser_action_row391[] = {
+static int parser_action_row390[] = {
        1,
        -1, 1, 14
 };
-static int parser_action_row392[] = {
+static int parser_action_row391[] = {
        7,
-       -1, 3, 391,
-       5, 0, 358,
-       6, 0, 359,
-       7, 0, 360,
-       8, 0, 361,
-       10, 0, 362,
-       17, 0, 363
+       -1, 3, 390,
+       5, 0, 357,
+       6, 0, 358,
+       7, 0, 359,
+       8, 0, 360,
+       10, 0, 361,
+       17, 0, 362
 };
-static int parser_action_row393[] = {
+static int parser_action_row392[] = {
        1,
        -1, 1, 15
 };
-static int parser_action_row394[] = {
+static int parser_action_row393[] = {
        23,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        52, 0, 524,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -5264,46 +5259,46 @@ static int parser_action_row394[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row395[] = {
+static int parser_action_row394[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row396[] = {
+static int parser_action_row395[] = {
        1,
-       -1, 1, 502
+       -1, 1, 503
 };
-static int parser_action_row397[] = {
+static int parser_action_row396[] = {
        3,
        -1, 1, 340,
-       51, 0, 242,
+       51, 0, 240,
        63, 0, 527
 };
-static int parser_action_row398[] = {
+static int parser_action_row397[] = {
        1,
-       -1, 1, 525
+       -1, 1, 526
 };
-static int parser_action_row399[] = {
+static int parser_action_row398[] = {
        3,
-       -1, 3, 398,
-       47, 0, 338,
-       81, 0, 339
+       -1, 3, 397,
+       47, 0, 336,
+       81, 0, 337
 };
-static int parser_action_row400[] = {
+static int parser_action_row399[] = {
        4,
-       -1, 1, 529,
-       53, 1, 532,
-       61, 1, 532,
-       63, 1, 532
+       -1, 1, 530,
+       53, 1, 533,
+       61, 1, 533,
+       63, 1, 533
 };
-static int parser_action_row401[] = {
+static int parser_action_row400[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row402[] = {
+static int parser_action_row401[] = {
        7,
        -1, 1, 343,
        53, 1, 339,
@@ -5313,429 +5308,429 @@ static int parser_action_row402[] = {
        61, 1, 339,
        63, 1, 339
 };
-static int parser_action_row403[] = {
+static int parser_action_row402[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row404[] = {
+static int parser_action_row403[] = {
        2,
-       -1, 3, 403,
+       -1, 3, 402,
        52, 0, 532
 };
-static int parser_action_row405[] = {
+static int parser_action_row404[] = {
        1,
-       -1, 1, 524
+       -1, 1, 525
 };
-static int parser_action_row406[] = {
+static int parser_action_row405[] = {
        1,
-       -1, 1, 535
+       -1, 1, 536
 };
-static int parser_action_row407[] = {
+static int parser_action_row406[] = {
        19,
-       -1, 1, 358,
-       12, 0, 107,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row408[] = {
+static int parser_action_row407[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row409[] = {
+static int parser_action_row408[] = {
        19,
-       -1, 1, 358,
-       12, 0, 107,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row410[] = {
+static int parser_action_row409[] = {
        19,
-       -1, 1, 358,
-       12, 0, 107,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row411[] = {
+static int parser_action_row410[] = {
        18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row412[] = {
+static int parser_action_row411[] = {
        18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row413[] = {
+static int parser_action_row412[] = {
        3,
-       -1, 3, 412,
-       47, 0, 344,
-       81, 0, 345
+       -1, 3, 411,
+       47, 0, 342,
+       81, 0, 343
+};
+static int parser_action_row413[] = {
+       18,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
+       81, 0, 48,
+       82, 0, 49,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
+       88, 0, 54,
+       91, 0, 122
 };
 static int parser_action_row414[] = {
        18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
 static int parser_action_row415[] = {
        18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
 static int parser_action_row416[] = {
        18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
 static int parser_action_row417[] = {
        18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
 static int parser_action_row418[] = {
        18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
 static int parser_action_row419[] = {
        18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
 static int parser_action_row420[] = {
        18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
 static int parser_action_row421[] = {
        18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
 static int parser_action_row422[] = {
        18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
 static int parser_action_row423[] = {
        18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
 static int parser_action_row424[] = {
        18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
 static int parser_action_row425[] = {
        18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
 static int parser_action_row426[] = {
-       18,
-       -1, 1, 358,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
-       81, 0, 48,
-       82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
-       88, 0, 54,
-       91, 0, 123
-};
-static int parser_action_row427[] = {
        5,
-       -1, 1, 358,
+       -1, 1, 359,
        12, 0, 553,
        46, 0, 554,
        81, 0, 48,
        82, 0, 49
 };
-static int parser_action_row428[] = {
+static int parser_action_row427[] = {
        30,
-       -1, 1, 358,
+       -1, 1, 359,
        9, 0, 557,
        12, 0, 26,
        15, 0, 28,
@@ -5766,106 +5761,106 @@ static int parser_action_row428[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row429[] = {
+static int parser_action_row428[] = {
        3,
-       -1, 3, 428,
+       -1, 3, 427,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row430[] = {
+static int parser_action_row429[] = {
        3,
-       -1, 3, 429,
-       47, 0, 344,
-       81, 0, 345
+       -1, 3, 428,
+       47, 0, 342,
+       81, 0, 343
 };
-static int parser_action_row431[] = {
+static int parser_action_row430[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row432[] = {
+static int parser_action_row431[] = {
        2,
        -1, 1, 192,
        58, 0, 561
 };
+static int parser_action_row432[] = {
+       2,
+       -1, 3, 431,
+       23, 0, 562
+};
 static int parser_action_row433[] = {
        2,
        -1, 3, 432,
-       23, 0, 562
+       15, 0, 563
 };
 static int parser_action_row434[] = {
        2,
        -1, 3, 433,
-       15, 0, 563
+       82, 0, 297
 };
 static int parser_action_row435[] = {
-       2,
-       -1, 3, 434,
-       82, 0, 299
-};
-static int parser_action_row436[] = {
        3,
-       -1, 3, 435,
+       -1, 3, 434,
        28, 0, 565,
        55, 0, 566
 };
-static int parser_action_row437[] = {
+static int parser_action_row436[] = {
        1,
        -1, 1, 135
 };
-static int parser_action_row438[] = {
+static int parser_action_row437[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row439[] = {
+static int parser_action_row438[] = {
        1,
        -1, 1, 238
 };
-static int parser_action_row440[] = {
+static int parser_action_row439[] = {
        3,
        -1, 1, 340,
-       51, 0, 242,
-       63, 0, 474
+       51, 0, 240,
+       63, 0, 473
 };
-static int parser_action_row441[] = {
+static int parser_action_row440[] = {
        1,
        -1, 1, 261
 };
-static int parser_action_row442[] = {
+static int parser_action_row441[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row443[] = {
+static int parser_action_row442[] = {
        4,
        -1, 1, 265,
        53, 1, 268,
        61, 1, 268,
        63, 1, 268
 };
-static int parser_action_row444[] = {
+static int parser_action_row443[] = {
        1,
        -1, 1, 260
 };
-static int parser_action_row445[] = {
+static int parser_action_row444[] = {
        21,
-       -1, 1, 358,
-       12, 0, 155,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -5875,27 +5870,27 @@ static int parser_action_row445[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row446[] = {
+static int parser_action_row445[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row447[] = {
+static int parser_action_row446[] = {
        21,
-       -1, 1, 358,
-       12, 0, 155,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -5905,21 +5900,21 @@ static int parser_action_row447[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row448[] = {
+static int parser_action_row447[] = {
        21,
-       -1, 1, 358,
-       12, 0, 155,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -5929,20 +5924,20 @@ static int parser_action_row448[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row449[] = {
+static int parser_action_row448[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -5952,20 +5947,20 @@ static int parser_action_row449[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row450[] = {
+static int parser_action_row449[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -5975,26 +5970,26 @@ static int parser_action_row450[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row451[] = {
+static int parser_action_row450[] = {
        3,
-       -1, 3, 450,
-       47, 0, 344,
-       81, 0, 345
+       -1, 3, 449,
+       47, 0, 342,
+       81, 0, 343
 };
-static int parser_action_row452[] = {
+static int parser_action_row451[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -6004,20 +5999,20 @@ static int parser_action_row452[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row453[] = {
+static int parser_action_row452[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -6027,20 +6022,20 @@ static int parser_action_row453[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row454[] = {
+static int parser_action_row453[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -6050,20 +6045,20 @@ static int parser_action_row454[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row455[] = {
+static int parser_action_row454[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -6073,20 +6068,20 @@ static int parser_action_row455[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row456[] = {
+static int parser_action_row455[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -6096,20 +6091,20 @@ static int parser_action_row456[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row457[] = {
+static int parser_action_row456[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -6119,20 +6114,20 @@ static int parser_action_row457[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row458[] = {
+static int parser_action_row457[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -6142,20 +6137,20 @@ static int parser_action_row458[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row459[] = {
+static int parser_action_row458[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -6165,20 +6160,20 @@ static int parser_action_row459[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row460[] = {
+static int parser_action_row459[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -6188,20 +6183,20 @@ static int parser_action_row460[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row461[] = {
+static int parser_action_row460[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -6211,20 +6206,20 @@ static int parser_action_row461[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row462[] = {
+static int parser_action_row461[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -6234,20 +6229,20 @@ static int parser_action_row462[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row463[] = {
+static int parser_action_row462[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -6257,20 +6252,20 @@ static int parser_action_row463[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row464[] = {
+static int parser_action_row463[] = {
        20,
-       -1, 1, 358,
-       12, 0, 155,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -6280,20 +6275,20 @@ static int parser_action_row464[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row465[] = {
+static int parser_action_row464[] = {
        5,
-       -1, 1, 358,
+       -1, 1, 359,
        12, 0, 590,
        46, 0, 508,
        81, 0, 48,
        82, 0, 49
 };
-static int parser_action_row466[] = {
+static int parser_action_row465[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 466,
+       9, 0, 465,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -6323,17 +6318,17 @@ static int parser_action_row466[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row467[] = {
+static int parser_action_row466[] = {
        1,
        -1, 1, 153
 };
-static int parser_action_row468[] = {
+static int parser_action_row467[] = {
        1,
        -1, 1, 224
 };
-static int parser_action_row469[] = {
+static int parser_action_row468[] = {
        30,
-       -1, 1, 358,
+       -1, 1, 359,
        9, 0, 594,
        12, 0, 26,
        15, 0, 28,
@@ -6364,82 +6359,82 @@ static int parser_action_row469[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row470[] = {
+static int parser_action_row469[] = {
        3,
-       -1, 1, 557,
+       -1, 1, 558,
        53, 0, 596,
-       80, 0, 471
+       80, 0, 470
 };
-static int parser_action_row471[] = {
+static int parser_action_row470[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row472[] = {
+static int parser_action_row471[] = {
        3,
        -1, 1, 42,
        13, 0, 27,
        51, 0, 599
 };
-static int parser_action_row473[] = {
+static int parser_action_row472[] = {
        1,
-       -1, 1, 556
+       -1, 1, 557
 };
-static int parser_action_row474[] = {
+static int parser_action_row473[] = {
        1,
-       -1, 1, 452
+       -1, 1, 453
 };
-static int parser_action_row475[] = {
+static int parser_action_row474[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row476[] = {
+static int parser_action_row475[] = {
        2,
        -1, 1, 42,
        13, 0, 27
 };
-static int parser_action_row477[] = {
+static int parser_action_row476[] = {
        4,
-       -1, 3, 476,
+       -1, 3, 475,
        6, 0, 606,
        17, 0, 607,
        82, 0, 608
 };
-static int parser_action_row478[] = {
+static int parser_action_row477[] = {
        3,
        -1, 1, 306,
        53, 0, 610,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row479[] = {
+static int parser_action_row478[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row480[] = {
+static int parser_action_row479[] = {
        1,
        -1, 1, 141
 };
-static int parser_action_row481[] = {
+static int parser_action_row480[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -6449,165 +6444,171 @@ static int parser_action_row481[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row482[] = {
+static int parser_action_row481[] = {
        2,
-       -1, 3, 481,
+       -1, 3, 480,
        52, 0, 614
 };
-static int parser_action_row483[] = {
+static int parser_action_row482[] = {
        3,
-       -1, 1, 346,
+       -1, 1, 347,
        55, 0, 615,
        62, 0, 616
 };
+static int parser_action_row483[] = {
+       2,
+       -1, 3, 482,
+       54, 0, 619
+};
 static int parser_action_row484[] = {
-       1,
-       -1, 1, 345
+       3,
+       -1, 3, 483,
+       57, 0, 620,
+       82, 0, 621
 };
 static int parser_action_row485[] = {
-       3,
+       4,
        -1, 3, 484,
-       57, 0, 619,
-       82, 0, 620
+       9, 0, 624,
+       57, 0, 620,
+       82, 0, 621
 };
 static int parser_action_row486[] = {
-       4,
-       -1, 3, 485,
-       9, 0, 623,
-       57, 0, 619,
-       82, 0, 620
-};
-static int parser_action_row487[] = {
        1,
        -1, 1, 45
 };
-static int parser_action_row488[] = {
+static int parser_action_row487[] = {
        2,
-       -1, 3, 487,
-       54, 0, 625
+       -1, 3, 486,
+       54, 0, 626
 };
-static int parser_action_row489[] = {
+static int parser_action_row488[] = {
        1,
        -1, 1, 86
 };
-static int parser_action_row490[] = {
+static int parser_action_row489[] = {
        1,
        -1, 1, 87
 };
-static int parser_action_row491[] = {
+static int parser_action_row490[] = {
        1,
        -1, 1, 88
 };
-static int parser_action_row492[] = {
+static int parser_action_row491[] = {
        1,
        -1, 1, 89
 };
-static int parser_action_row493[] = {
+static int parser_action_row492[] = {
        1,
        -1, 1, 90
 };
-static int parser_action_row494[] = {
+static int parser_action_row493[] = {
        1,
        -1, 1, 91
 };
-static int parser_action_row495[] = {
+static int parser_action_row494[] = {
        1,
        -1, 1, 92
 };
-static int parser_action_row496[] = {
+static int parser_action_row495[] = {
        1,
        -1, 1, 93
 };
-static int parser_action_row497[] = {
+static int parser_action_row496[] = {
        1,
        -1, 1, 96
 };
-static int parser_action_row498[] = {
+static int parser_action_row497[] = {
        1,
        -1, 1, 94
 };
-static int parser_action_row499[] = {
+static int parser_action_row498[] = {
        1,
        -1, 1, 98
 };
-static int parser_action_row500[] = {
+static int parser_action_row499[] = {
        1,
        -1, 1, 97
 };
-static int parser_action_row501[] = {
+static int parser_action_row500[] = {
        1,
        -1, 1, 95
 };
-static int parser_action_row502[] = {
+static int parser_action_row501[] = {
        1,
        -1, 1, 99
 };
-static int parser_action_row503[] = {
+static int parser_action_row502[] = {
        1,
        -1, 1, 101
 };
-static int parser_action_row504[] = {
+static int parser_action_row503[] = {
        2,
        -1, 1, 85,
-       58, 0, 626
+       58, 0, 627
 };
-static int parser_action_row505[] = {
+static int parser_action_row504[] = {
        5,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
-       51, 0, 627,
-       56, 0, 628
+       51, 0, 628,
+       56, 0, 629
 };
-static int parser_action_row506[] = {
+static int parser_action_row505[] = {
        1,
        -1, 1, 48
 };
-static int parser_action_row507[] = {
+static int parser_action_row506[] = {
        3,
+       -1, 3, 505,
+       81, 0, 633,
+       82, 0, 634
+};
+static int parser_action_row507[] = {
+       2,
        -1, 3, 506,
-       81, 0, 632,
-       82, 0, 633
+       54, 0, 638
 };
 static int parser_action_row508[] = {
        26,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 117,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 116,
        53, 1, 340,
        61, 1, 340,
        63, 1, 340,
-       65, 0, 118,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
 static int parser_action_row509[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row510[] = {
        2,
        -1, 3, 509,
-       83, 0, 640
+       83, 0, 642
 };
 static int parser_action_row511[] = {
        29,
@@ -6615,44 +6616,44 @@ static int parser_action_row511[] = {
        0, 1, 344,
        1, 1, 344,
        9, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 117,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 116,
        52, 1, 344,
        55, 1, 344,
-       65, 0, 118,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123,
+       91, 0, 122,
        95, 1, 344
 };
 static int parser_action_row512[] = {
        3,
-       -1, 1, 355,
-       12, 0, 643,
-       82, 0, 226
+       -1, 1, 356,
+       12, 0, 645,
+       82, 0, 224
 };
 static int parser_action_row513[] = {
        4,
-       -1, 1, 357,
-       12, 0, 644,
+       -1, 1, 358,
+       12, 0, 646,
        81, 0, 48,
-       82, 0, 228
+       82, 0, 226
 };
 static int parser_action_row514[] = {
        1,
@@ -6664,7 +6665,7 @@ static int parser_action_row515[] = {
 };
 static int parser_action_row516[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
@@ -6694,21 +6695,21 @@ static int parser_action_row522[] = {
 };
 static int parser_action_row523[] = {
        23,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
-       52, 0, 647,
+       52, 0, 649,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -6729,22 +6730,22 @@ static int parser_action_row525[] = {
 static int parser_action_row526[] = {
        2,
        -1, 3, 525,
-       52, 0, 649
+       52, 0, 651
 };
 static int parser_action_row527[] = {
        2,
        -1, 3, 526,
-       23, 0, 650
+       23, 0, 652
 };
 static int parser_action_row528[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row529[] = {
        1,
-       -1, 1, 527
+       -1, 1, 528
 };
 static int parser_action_row530[] = {
        2,
@@ -6753,7 +6754,7 @@ static int parser_action_row530[] = {
 };
 static int parser_action_row531[] = {
        5,
-       -1, 1, 358,
+       -1, 1, 359,
        12, 0, 553,
        46, 0, 554,
        81, 0, 48,
@@ -6761,7 +6762,7 @@ static int parser_action_row531[] = {
 };
 static int parser_action_row532[] = {
        2,
-       -1, 1, 346,
+       -1, 1, 347,
        55, 0, 615
 };
 static int parser_action_row533[] = {
@@ -6776,146 +6777,146 @@ static int parser_action_row533[] = {
 };
 static int parser_action_row534[] = {
        1,
-       -1, 1, 498
+       -1, 1, 499
 };
 static int parser_action_row535[] = {
        19,
-       -1, 1, 358,
-       12, 0, 107,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
 static int parser_action_row536[] = {
        1,
-       -1, 1, 497
+       -1, 1, 498
 };
 static int parser_action_row537[] = {
        1,
-       -1, 1, 500
+       -1, 1, 501
 };
 static int parser_action_row538[] = {
        3,
-       -1, 1, 508,
-       64, 0, 271,
-       65, 0, 272
+       -1, 1, 509,
+       64, 0, 269,
+       65, 0, 270
 };
 static int parser_action_row539[] = {
        3,
-       -1, 1, 511,
-       64, 0, 271,
-       65, 0, 272
+       -1, 1, 512,
+       64, 0, 269,
+       65, 0, 270
 };
 static int parser_action_row540[] = {
        1,
-       -1, 1, 513
+       -1, 1, 514
 };
 static int parser_action_row541[] = {
        4,
-       -1, 1, 515,
-       66, 0, 280,
-       68, 0, 281,
-       69, 0, 282
+       -1, 1, 516,
+       66, 0, 278,
+       68, 0, 279,
+       69, 0, 280
 };
 static int parser_action_row542[] = {
        4,
-       -1, 1, 516,
-       66, 0, 280,
-       68, 0, 281,
-       69, 0, 282
+       -1, 1, 517,
+       66, 0, 278,
+       68, 0, 279,
+       69, 0, 280
 };
 static int parser_action_row543[] = {
        3,
-       -1, 1, 504,
-       64, 0, 271,
-       65, 0, 272
+       -1, 1, 505,
+       64, 0, 269,
+       65, 0, 270
 };
 static int parser_action_row544[] = {
        3,
-       -1, 1, 505,
-       64, 0, 271,
-       65, 0, 272
+       -1, 1, 506,
+       64, 0, 269,
+       65, 0, 270
 };
 static int parser_action_row545[] = {
        3,
-       -1, 1, 506,
-       64, 0, 271,
-       65, 0, 272
+       -1, 1, 507,
+       64, 0, 269,
+       65, 0, 270
 };
 static int parser_action_row546[] = {
        3,
-       -1, 1, 507,
-       64, 0, 271,
-       65, 0, 272
+       -1, 1, 508,
+       64, 0, 269,
+       65, 0, 270
 };
 static int parser_action_row547[] = {
        3,
-       -1, 1, 509,
-       64, 0, 271,
-       65, 0, 272
+       -1, 1, 510,
+       64, 0, 269,
+       65, 0, 270
 };
 static int parser_action_row548[] = {
        3,
-       -1, 1, 510,
-       64, 0, 271,
-       65, 0, 272
+       -1, 1, 511,
+       64, 0, 269,
+       65, 0, 270
 };
 static int parser_action_row549[] = {
        3,
-       -1, 1, 512,
-       64, 0, 271,
-       65, 0, 272
+       -1, 1, 513,
+       64, 0, 269,
+       65, 0, 270
 };
 static int parser_action_row550[] = {
        1,
-       -1, 1, 518
+       -1, 1, 519
 };
 static int parser_action_row551[] = {
        1,
-       -1, 1, 519
+       -1, 1, 520
 };
 static int parser_action_row552[] = {
        1,
-       -1, 1, 520
+       -1, 1, 521
 };
 static int parser_action_row553[] = {
        1,
-       -1, 1, 522
+       -1, 1, 523
 };
 static int parser_action_row554[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
 static int parser_action_row555[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row556[] = {
        2,
        -1, 3, 555,
-       83, 0, 656
+       83, 0, 658
 };
 static int parser_action_row557[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
 static int parser_action_row558[] = {
        1,
@@ -6923,8 +6924,8 @@ static int parser_action_row558[] = {
 };
 static int parser_action_row559[] = {
        30,
-       -1, 1, 358,
-       9, 0, 658,
+       -1, 1, 359,
+       9, 0, 660,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -6960,20 +6961,20 @@ static int parser_action_row560[] = {
 };
 static int parser_action_row561[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -6985,35 +6986,35 @@ static int parser_action_row561[] = {
 };
 static int parser_action_row562[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row563[] = {
        33,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 661,
-       12, 0, 662,
-       15, 0, 663,
-       16, 0, 664,
-       22, 0, 665,
-       24, 0, 666,
-       25, 0, 667,
-       26, 0, 668,
-       27, 0, 669,
-       33, 0, 670,
-       34, 0, 671,
-       35, 0, 672,
-       36, 0, 673,
-       37, 0, 674,
+       9, 0, 663,
+       12, 0, 664,
+       15, 0, 665,
+       16, 0, 666,
+       22, 0, 667,
+       24, 0, 668,
+       25, 0, 669,
+       26, 0, 670,
+       27, 0, 671,
+       33, 0, 672,
+       34, 0, 673,
+       35, 0, 674,
+       36, 0, 675,
+       37, 0, 676,
        38, 0, 40,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       50, 0, 675,
+       50, 0, 677,
        51, 0, 46,
        53, 0, 47,
        81, 0, 48,
@@ -7027,10 +7028,10 @@ static int parser_action_row563[] = {
 };
 static int parser_action_row564[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 142,
+       9, 0, 141,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -7062,26 +7063,26 @@ static int parser_action_row564[] = {
 };
 static int parser_action_row565[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row566[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row567[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row568[] = {
        2,
        -1, 3, 567,
-       23, 0, 698
+       23, 0, 700
 };
 static int parser_action_row569[] = {
        1,
@@ -7089,7 +7090,7 @@ static int parser_action_row569[] = {
 };
 static int parser_action_row570[] = {
        5,
-       -1, 1, 358,
+       -1, 1, 359,
        12, 0, 590,
        46, 0, 508,
        81, 0, 48,
@@ -7101,19 +7102,19 @@ static int parser_action_row571[] = {
 };
 static int parser_action_row572[] = {
        21,
-       -1, 1, 358,
-       12, 0, 155,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -7134,14 +7135,14 @@ static int parser_action_row574[] = {
 static int parser_action_row575[] = {
        3,
        -1, 1, 244,
-       64, 0, 315,
-       65, 0, 316
+       64, 0, 313,
+       65, 0, 314
 };
 static int parser_action_row576[] = {
        3,
        -1, 1, 247,
-       64, 0, 315,
-       65, 0, 316
+       64, 0, 313,
+       65, 0, 314
 };
 static int parser_action_row577[] = {
        1,
@@ -7150,58 +7151,58 @@ static int parser_action_row577[] = {
 static int parser_action_row578[] = {
        4,
        -1, 1, 251,
-       66, 0, 324,
-       68, 0, 325,
-       69, 0, 326
+       66, 0, 322,
+       68, 0, 323,
+       69, 0, 324
 };
 static int parser_action_row579[] = {
        4,
        -1, 1, 252,
-       66, 0, 324,
-       68, 0, 325,
-       69, 0, 326
+       66, 0, 322,
+       68, 0, 323,
+       69, 0, 324
 };
 static int parser_action_row580[] = {
        3,
        -1, 1, 240,
-       64, 0, 315,
-       65, 0, 316
+       64, 0, 313,
+       65, 0, 314
 };
 static int parser_action_row581[] = {
        3,
        -1, 1, 241,
-       64, 0, 315,
-       65, 0, 316
+       64, 0, 313,
+       65, 0, 314
 };
 static int parser_action_row582[] = {
        3,
        -1, 1, 242,
-       64, 0, 315,
-       65, 0, 316
+       64, 0, 313,
+       65, 0, 314
 };
 static int parser_action_row583[] = {
        3,
        -1, 1, 243,
-       64, 0, 315,
-       65, 0, 316
+       64, 0, 313,
+       65, 0, 314
 };
 static int parser_action_row584[] = {
        3,
        -1, 1, 245,
-       64, 0, 315,
-       65, 0, 316
+       64, 0, 313,
+       65, 0, 314
 };
 static int parser_action_row585[] = {
        3,
        -1, 1, 246,
-       64, 0, 315,
-       65, 0, 316
+       64, 0, 313,
+       65, 0, 314
 };
 static int parser_action_row586[] = {
        3,
        -1, 1, 248,
-       64, 0, 315,
-       65, 0, 316
+       64, 0, 313,
+       65, 0, 314
 };
 static int parser_action_row587[] = {
        1,
@@ -7222,17 +7223,17 @@ static int parser_action_row590[] = {
 static int parser_action_row591[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
 static int parser_action_row592[] = {
        2,
        -1, 3, 591,
-       83, 0, 701
+       83, 0, 703
 };
 static int parser_action_row593[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
 static int parser_action_row594[] = {
        1,
@@ -7248,37 +7249,37 @@ static int parser_action_row596[] = {
 };
 static int parser_action_row597[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row598[] = {
        1,
-       -1, 1, 453
+       -1, 1, 454
 };
 static int parser_action_row599[] = {
        3,
        -1, 3, 598,
-       47, 0, 344,
-       81, 0, 345
+       47, 0, 342,
+       81, 0, 343
 };
 static int parser_action_row600[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row601[] = {
        5,
        -1, 1, 80,
-       18, 0, 200,
-       19, 0, 201,
-       20, 0, 202,
-       21, 0, 203
+       18, 0, 199,
+       19, 0, 200,
+       20, 0, 201,
+       21, 0, 202
 };
 static int parser_action_row602[] = {
        1,
-       -1, 1, 554
+       -1, 1, 555
 };
 static int parser_action_row603[] = {
        3,
@@ -7289,21 +7290,21 @@ static int parser_action_row603[] = {
 static int parser_action_row604[] = {
        5,
        -1, 1, 80,
-       18, 0, 200,
-       19, 0, 201,
-       20, 0, 202,
-       21, 0, 203
+       18, 0, 199,
+       19, 0, 200,
+       20, 0, 201,
+       21, 0, 202
 };
 static int parser_action_row605[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row606[] = {
        2,
        -1, 1, 310,
-       55, 0, 713
+       55, 0, 715
 };
 static int parser_action_row607[] = {
        1,
@@ -7320,12 +7321,12 @@ static int parser_action_row609[] = {
 static int parser_action_row610[] = {
        3,
        -1, 1, 306,
-       51, 0, 716,
-       80, 0, 184
+       51, 0, 718,
+       80, 0, 183
 };
 static int parser_action_row611[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
@@ -7336,8 +7337,8 @@ static int parser_action_row612[] = {
 static int parser_action_row613[] = {
        3,
        -1, 3, 612,
-       47, 0, 344,
-       81, 0, 345
+       47, 0, 342,
+       81, 0, 343
 };
 static int parser_action_row614[] = {
        1,
@@ -7346,295 +7347,304 @@ static int parser_action_row614[] = {
 static int parser_action_row615[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
 static int parser_action_row616[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row617[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row618[] = {
        1,
-       -1, 1, 822
+       -1, 1, 823
 };
 static int parser_action_row619[] = {
        2,
-       -1, 1, 347,
+       -1, 1, 348,
        55, 0, 615
 };
 static int parser_action_row620[] = {
+       2,
+       -1, 1, 306,
+       80, 0, 183
+};
+static int parser_action_row621[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row621[] = {
-       2,
-       -1, 1, 351,
-       57, 0, 194
-};
 static int parser_action_row622[] = {
        2,
-       -1, 1, 77,
-       14, 0, 725
+       -1, 1, 352,
+       57, 0, 193
 };
 static int parser_action_row623[] = {
        2,
-       -1, 3, 622,
-       82, 0, 727
+       -1, 1, 77,
+       14, 0, 728
 };
 static int parser_action_row624[] = {
-       3,
+       2,
        -1, 3, 623,
-       0, 0, 83,
-       1, 0, 84
+       82, 0, 730
 };
 static int parser_action_row625[] = {
+       3,
+       -1, 3, 624,
+       0, 0, 82,
+       1, 0, 83
+};
+static int parser_action_row626[] = {
        2,
        -1, 1, 77,
-       14, 0, 725
+       14, 0, 728
 };
-static int parser_action_row626[] = {
+static int parser_action_row627[] = {
        2,
        -1, 1, 100,
-       58, 0, 730
+       58, 0, 733
 };
-static int parser_action_row627[] = {
+static int parser_action_row628[] = {
        1,
        -1, 1, 102
 };
-static int parser_action_row628[] = {
+static int parser_action_row629[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row629[] = {
+static int parser_action_row630[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row630[] = {
+static int parser_action_row631[] = {
        4,
        -1, 1, 119,
-       4, 0, 733,
-       14, 0, 734,
-       15, 0, 735
+       4, 0, 736,
+       14, 0, 737,
+       15, 0, 738
 };
-static int parser_action_row631[] = {
+static int parser_action_row632[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row632[] = {
+static int parser_action_row633[] = {
        1,
        -1, 1, 107
 };
-static int parser_action_row633[] = {
-       2,
-       -1, 1, 363,
-       57, 0, 193
-};
 static int parser_action_row634[] = {
        2,
-       -1, 3, 633,
-       57, 0, 194
+       -1, 1, 364,
+       57, 0, 192
 };
 static int parser_action_row635[] = {
        2,
-       -1, 1, 51,
-       53, 0, 740
+       -1, 3, 634,
+       57, 0, 193
 };
 static int parser_action_row636[] = {
        2,
-       -1, 3, 635,
-       81, 0, 742
+       -1, 1, 51,
+       53, 0, 743
 };
 static int parser_action_row637[] = {
-       3,
+       2,
        -1, 3, 636,
-       81, 0, 743,
-       82, 0, 633
+       81, 0, 745
 };
 static int parser_action_row638[] = {
+       3,
+       -1, 3, 637,
+       81, 0, 746,
+       82, 0, 634
+};
+static int parser_action_row639[] = {
+       1,
+       -1, 1, 345
+};
+static int parser_action_row640[] = {
        1,
        -1, 1, 272
 };
-static int parser_action_row639[] = {
+static int parser_action_row641[] = {
        1,
        -1, 1, 180
 };
-static int parser_action_row640[] = {
+static int parser_action_row642[] = {
        3,
-       -1, 3, 639,
-       31, 0, 745,
-       51, 0, 746
+       -1, 3, 641,
+       31, 0, 748,
+       51, 0, 749
 };
-static int parser_action_row641[] = {
+static int parser_action_row643[] = {
        4,
        -1, 1, 267,
-       58, 0, 747,
-       59, 0, 371,
-       60, 0, 372
+       58, 0, 750,
+       59, 0, 370,
+       60, 0, 371
 };
-static int parser_action_row642[] = {
+static int parser_action_row644[] = {
        4,
        -1, 1, 269,
-       58, 0, 749,
-       59, 0, 371,
-       60, 0, 372
+       58, 0, 752,
+       59, 0, 370,
+       60, 0, 371
 };
-static int parser_action_row643[] = {
+static int parser_action_row645[] = {
        1,
        -1, 1, 177
 };
-static int parser_action_row644[] = {
+static int parser_action_row646[] = {
        23,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 385,
-       65, 0, 118,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 384,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row645[] = {
+static int parser_action_row647[] = {
        23,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 385,
-       65, 0, 118,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 384,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row646[] = {
+static int parser_action_row648[] = {
        3,
-       -1, 1, 356,
-       12, 0, 753,
-       82, 0, 389
+       -1, 1, 357,
+       12, 0, 756,
+       82, 0, 388
 };
-static int parser_action_row647[] = {
+static int parser_action_row649[] = {
        1,
        -1, 1, 299
 };
-static int parser_action_row648[] = {
+static int parser_action_row650[] = {
        1,
        -1, 1, 343
 };
-static int parser_action_row649[] = {
+static int parser_action_row651[] = {
        2,
-       -1, 3, 648,
-       52, 0, 754
+       -1, 3, 650,
+       52, 0, 757
 };
-static int parser_action_row650[] = {
+static int parser_action_row652[] = {
        1,
        -1, 1, 338
 };
-static int parser_action_row651[] = {
+static int parser_action_row653[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row652[] = {
+static int parser_action_row654[] = {
        3,
-       -1, 3, 651,
+       -1, 3, 653,
        81, 0, 48,
        82, 0, 49
 };
-static int parser_action_row653[] = {
+static int parser_action_row655[] = {
        2,
-       -1, 3, 652,
-       83, 0, 757
+       -1, 3, 654,
+       83, 0, 760
 };
-static int parser_action_row654[] = {
+static int parser_action_row656[] = {
        1,
-       -1, 1, 499
+       -1, 1, 500
 };
-static int parser_action_row655[] = {
+static int parser_action_row657[] = {
        1,
-       -1, 1, 536
+       -1, 1, 537
 };
-static int parser_action_row656[] = {
+static int parser_action_row658[] = {
        3,
-       -1, 3, 655,
-       31, 0, 758,
-       51, 0, 759
+       -1, 3, 657,
+       31, 0, 761,
+       51, 0, 762
 };
-static int parser_action_row657[] = {
+static int parser_action_row659[] = {
        1,
-       -1, 1, 531
+       -1, 1, 532
 };
-static int parser_action_row658[] = {
+static int parser_action_row660[] = {
        1,
-       -1, 1, 533
+       -1, 1, 534
 };
-static int parser_action_row659[] = {
+static int parser_action_row661[] = {
        1,
        -1, 1, 160
 };
-static int parser_action_row660[] = {
+static int parser_action_row662[] = {
        1,
        -1, 1, 193
 };
-static int parser_action_row661[] = {
+static int parser_action_row663[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -7644,63 +7654,63 @@ static int parser_action_row661[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row662[] = {
+static int parser_action_row664[] = {
        1,
        -1, 1, 215
 };
-static int parser_action_row663[] = {
+static int parser_action_row665[] = {
        26,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 117,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 116,
        53, 1, 340,
        61, 1, 340,
        63, 1, 340,
-       65, 0, 118,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row664[] = {
+static int parser_action_row666[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 762,
-       12, 0, 662,
-       15, 0, 663,
-       16, 0, 664,
-       22, 0, 665,
-       25, 0, 667,
-       26, 0, 668,
-       27, 0, 669,
-       33, 0, 670,
-       34, 0, 671,
-       35, 0, 672,
-       36, 0, 673,
-       37, 0, 674,
+       9, 0, 765,
+       12, 0, 664,
+       15, 0, 665,
+       16, 0, 666,
+       22, 0, 667,
+       25, 0, 669,
+       26, 0, 670,
+       27, 0, 671,
+       33, 0, 672,
+       34, 0, 673,
+       35, 0, 674,
+       36, 0, 675,
+       37, 0, 676,
        38, 0, 40,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       50, 0, 675,
+       50, 0, 677,
        51, 0, 46,
        53, 0, 47,
        81, 0, 48,
@@ -7712,23 +7722,23 @@ static int parser_action_row664[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row665[] = {
+static int parser_action_row667[] = {
        2,
-       -1, 3, 664,
-       82, 0, 767
+       -1, 3, 666,
+       82, 0, 770
 };
-static int parser_action_row666[] = {
+static int parser_action_row668[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row667[] = {
+static int parser_action_row669[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 466,
+       9, 0, 465,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -7758,36 +7768,36 @@ static int parser_action_row667[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row668[] = {
+static int parser_action_row670[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row669[] = {
+static int parser_action_row671[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 762,
-       12, 0, 662,
-       15, 0, 663,
-       16, 0, 664,
-       22, 0, 665,
-       25, 0, 667,
-       26, 0, 668,
-       27, 0, 669,
-       33, 0, 670,
-       34, 0, 671,
-       35, 0, 672,
-       36, 0, 673,
-       37, 0, 674,
+       9, 0, 765,
+       12, 0, 664,
+       15, 0, 665,
+       16, 0, 666,
+       22, 0, 667,
+       25, 0, 669,
+       26, 0, 670,
+       27, 0, 671,
+       33, 0, 672,
+       34, 0, 673,
+       35, 0, 674,
+       36, 0, 675,
+       37, 0, 676,
        38, 0, 40,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       50, 0, 675,
+       50, 0, 677,
        51, 0, 46,
        53, 0, 47,
        81, 0, 48,
@@ -7799,33 +7809,33 @@ static int parser_action_row669[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row670[] = {
+static int parser_action_row672[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row671[] = {
+static int parser_action_row673[] = {
        25,
        -1, 1, 164,
-       12, 0, 155,
-       22, 0, 156,
-       24, 1, 631,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
-       41, 1, 358,
+       12, 0, 154,
+       22, 0, 155,
+       24, 1, 632,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
+       41, 1, 359,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
+       83, 1, 359,
        84, 0, 50,
        85, 0, 51,
        86, 0, 52,
@@ -7833,41 +7843,41 @@ static int parser_action_row671[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row672[] = {
+static int parser_action_row674[] = {
        3,
        -1, 1, 169,
-       24, 1, 636,
-       49, 0, 175
+       24, 1, 637,
+       49, 0, 174
 };
-static int parser_action_row673[] = {
+static int parser_action_row675[] = {
        3,
        -1, 1, 166,
-       24, 1, 633,
-       49, 0, 175
+       24, 1, 634,
+       49, 0, 174
 };
-static int parser_action_row674[] = {
+static int parser_action_row676[] = {
        2,
        -1, 1, 168,
-       24, 1, 635
+       24, 1, 636
 };
-static int parser_action_row675[] = {
+static int parser_action_row677[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
-       82, 0, 178,
+       82, 0, 177,
        84, 0, 50,
        85, 0, 51,
        86, 0, 52,
@@ -7875,79 +7885,79 @@ static int parser_action_row675[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row676[] = {
+static int parser_action_row678[] = {
        2,
-       -1, 3, 675,
-       11, 0, 779
+       -1, 3, 677,
+       11, 0, 782
 };
-static int parser_action_row677[] = {
+static int parser_action_row679[] = {
        1,
        -1, 1, 210
 };
-static int parser_action_row678[] = {
+static int parser_action_row680[] = {
        1,
        -1, 1, 212
 };
-static int parser_action_row679[] = {
+static int parser_action_row681[] = {
        4,
-       -1, 3, 678,
-       53, 0, 209,
-       61, 0, 210,
-       63, 0, 780
+       -1, 3, 680,
+       53, 0, 208,
+       61, 0, 209,
+       63, 0, 783
 };
-static int parser_action_row680[] = {
+static int parser_action_row682[] = {
        3,
-       -1, 3, 679,
-       41, 0, 782,
-       83, 0, 783
+       -1, 3, 681,
+       41, 0, 785,
+       83, 0, 786
 };
-static int parser_action_row681[] = {
+static int parser_action_row683[] = {
        29,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 117,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 116,
        53, 1, 340,
        58, 1, 340,
        59, 1, 340,
        60, 1, 340,
        61, 1, 340,
        63, 1, 340,
-       65, 0, 118,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row682[] = {
+static int parser_action_row684[] = {
        3,
-       -1, 1, 355,
-       12, 0, 786,
-       82, 0, 226
+       -1, 1, 356,
+       12, 0, 789,
+       82, 0, 224
 };
-static int parser_action_row683[] = {
+static int parser_action_row685[] = {
        31,
-       -1, 1, 358,
-       9, 0, 661,
+       -1, 1, 359,
+       9, 0, 663,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
        22, 0, 30,
-       24, 0, 666,
+       24, 0, 668,
        25, 0, 31,
        26, 0, 32,
        27, 0, 33,
@@ -7973,30 +7983,22 @@ static int parser_action_row683[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row684[] = {
-       2,
-       -1, 3, 683,
-       24, 0, 790
-};
-static int parser_action_row685[] = {
-       1,
-       -1, 1, 629
-};
 static int parser_action_row686[] = {
-       1,
-       -1, 1, 630
+       2,
+       -1, 3, 685,
+       24, 0, 793
 };
 static int parser_action_row687[] = {
        1,
-       -1, 1, 638
+       -1, 1, 630
 };
 static int parser_action_row688[] = {
        1,
-       -1, 1, 639
+       -1, 1, 631
 };
 static int parser_action_row689[] = {
        1,
-       -1, 1, 641
+       -1, 1, 639
 };
 static int parser_action_row690[] = {
        1,
@@ -8008,46 +8010,54 @@ static int parser_action_row691[] = {
 };
 static int parser_action_row692[] = {
        1,
-       -1, 1, 643
+       -1, 1, 641
 };
 static int parser_action_row693[] = {
+       1,
+       -1, 1, 643
+};
+static int parser_action_row694[] = {
+       1,
+       -1, 1, 644
+};
+static int parser_action_row695[] = {
        4,
-       -1, 1, 357,
-       12, 0, 791,
+       -1, 1, 358,
+       12, 0, 794,
        81, 0, 48,
-       82, 0, 228
+       82, 0, 226
 };
-static int parser_action_row694[] = {
+static int parser_action_row696[] = {
        1,
        -1, 1, 219
 };
-static int parser_action_row695[] = {
+static int parser_action_row697[] = {
        2,
-       -1, 3, 694,
-       49, 0, 175
+       -1, 3, 696,
+       49, 0, 174
 };
-static int parser_action_row696[] = {
+static int parser_action_row698[] = {
        3,
-       -1, 3, 695,
-       52, 0, 794,
+       -1, 3, 697,
+       52, 0, 797,
        55, 0, 566
 };
-static int parser_action_row697[] = {
+static int parser_action_row699[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -8057,148 +8067,148 @@ static int parser_action_row697[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row698[] = {
+static int parser_action_row700[] = {
        2,
-       -1, 3, 697,
-       82, 0, 796
+       -1, 3, 699,
+       82, 0, 799
 };
-static int parser_action_row699[] = {
+static int parser_action_row701[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row700[] = {
+static int parser_action_row702[] = {
        2,
-       -1, 3, 699,
-       83, 0, 798
+       -1, 3, 701,
+       83, 0, 801
 };
-static int parser_action_row701[] = {
+static int parser_action_row703[] = {
        1,
        -1, 1, 235
 };
-static int parser_action_row702[] = {
+static int parser_action_row704[] = {
        1,
        -1, 1, 267
 };
-static int parser_action_row703[] = {
+static int parser_action_row705[] = {
        1,
        -1, 1, 269
 };
-static int parser_action_row704[] = {
+static int parser_action_row706[] = {
        3,
-       -1, 3, 703,
-       47, 0, 344,
-       81, 0, 345
+       -1, 3, 705,
+       47, 0, 342,
+       81, 0, 343
 };
-static int parser_action_row705[] = {
+static int parser_action_row707[] = {
        2,
        -1, 1, 145,
-       55, 0, 800
+       55, 0, 803
 };
-static int parser_action_row706[] = {
+static int parser_action_row708[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row707[] = {
+static int parser_action_row709[] = {
        2,
        -1, 1, 42,
        13, 0, 27
 };
-static int parser_action_row708[] = {
+static int parser_action_row710[] = {
        4,
-       -1, 3, 707,
+       -1, 3, 709,
        6, 0, 606,
        17, 0, 607,
        82, 0, 608
 };
-static int parser_action_row709[] = {
+static int parser_action_row711[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
-static int parser_action_row710[] = {
+static int parser_action_row712[] = {
        2,
-       -1, 3, 709,
-       82, 0, 226
+       -1, 3, 711,
+       82, 0, 224
 };
-static int parser_action_row711[] = {
+static int parser_action_row713[] = {
        3,
-       -1, 3, 710,
+       -1, 3, 712,
        81, 0, 48,
-       82, 0, 228
+       82, 0, 226
 };
-static int parser_action_row712[] = {
+static int parser_action_row714[] = {
        4,
-       -1, 3, 711,
+       -1, 3, 713,
        6, 0, 606,
        17, 0, 607,
        82, 0, 608
 };
-static int parser_action_row713[] = {
+static int parser_action_row715[] = {
        2,
-       -1, 3, 712,
-       52, 0, 809
+       -1, 3, 714,
+       52, 0, 812
 };
-static int parser_action_row714[] = {
+static int parser_action_row716[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row715[] = {
+static int parser_action_row717[] = {
        1,
-       -1, 1, 814
+       -1, 1, 815
 };
-static int parser_action_row716[] = {
+static int parser_action_row718[] = {
        2,
        -1, 1, 311,
-       55, 0, 713
+       55, 0, 715
 };
-static int parser_action_row717[] = {
+static int parser_action_row719[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row718[] = {
+static int parser_action_row720[] = {
        1,
        -1, 1, 307
 };
-static int parser_action_row719[] = {
+static int parser_action_row721[] = {
        3,
-       -1, 3, 718,
-       47, 0, 344,
-       81, 0, 345
+       -1, 3, 720,
+       47, 0, 342,
+       81, 0, 343
 };
-static int parser_action_row720[] = {
+static int parser_action_row722[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row721[] = {
+static int parser_action_row723[] = {
        1,
        -1, 1, 290
 };
-static int parser_action_row722[] = {
+static int parser_action_row724[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -8208,101 +8218,105 @@ static int parser_action_row722[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row723[] = {
+static int parser_action_row725[] = {
        21,
-       -1, 1, 358,
-       12, 0, 816,
-       22, 0, 817,
-       31, 0, 818,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       22, 0, 820,
+       31, 0, 821,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row724[] = {
+static int parser_action_row726[] = {
        1,
-       -1, 1, 823
+       -1, 1, 824
 };
-static int parser_action_row725[] = {
+static int parser_action_row727[] = {
+       1,
+       -1, 1, 293
+};
+static int parser_action_row728[] = {
        2,
-       -1, 3, 724,
-       82, 0, 847
+       -1, 3, 727,
+       82, 0, 850
 };
-static int parser_action_row726[] = {
+static int parser_action_row729[] = {
        4,
        -1, 1, 42,
-       0, 0, 83,
-       1, 0, 84,
+       0, 0, 82,
+       1, 0, 83,
        13, 0, 27
 };
-static int parser_action_row727[] = {
+static int parser_action_row730[] = {
        3,
-       -1, 3, 726,
-       0, 0, 83,
-       1, 0, 84
+       -1, 3, 729,
+       0, 0, 82,
+       1, 0, 83
 };
-static int parser_action_row728[] = {
+static int parser_action_row731[] = {
        2,
-       -1, 1, 352,
-       57, 0, 194
+       -1, 1, 353,
+       57, 0, 193
 };
-static int parser_action_row729[] = {
+static int parser_action_row732[] = {
        1,
        -1, 1, 18
 };
-static int parser_action_row730[] = {
+static int parser_action_row733[] = {
        3,
-       -1, 3, 729,
-       0, 0, 83,
-       1, 0, 84
+       -1, 3, 732,
+       0, 0, 82,
+       1, 0, 83
 };
-static int parser_action_row731[] = {
+static int parser_action_row734[] = {
        1,
        -1, 1, 103
 };
-static int parser_action_row732[] = {
+static int parser_action_row735[] = {
        2,
        -1, 1, 110,
-       82, 0, 854
+       82, 0, 857
 };
-static int parser_action_row733[] = {
+static int parser_action_row736[] = {
        3,
-       -1, 3, 732,
-       47, 0, 344,
-       81, 0, 345
+       -1, 3, 735,
+       47, 0, 342,
+       81, 0, 343
 };
-static int parser_action_row734[] = {
+static int parser_action_row737[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row735[] = {
+static int parser_action_row738[] = {
        4,
        -1, 1, 42,
-       0, 0, 83,
-       1, 0, 84,
+       0, 0, 82,
+       1, 0, 83,
        13, 0, 27
 };
-static int parser_action_row736[] = {
+static int parser_action_row739[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 466,
+       9, 0, 465,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -8332,82 +8346,82 @@ static int parser_action_row736[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row737[] = {
+static int parser_action_row740[] = {
        3,
        -1, 1, 119,
-       4, 0, 733,
-       15, 0, 862
+       4, 0, 736,
+       15, 0, 865
 };
-static int parser_action_row738[] = {
+static int parser_action_row741[] = {
        3,
-       -1, 3, 737,
+       -1, 3, 740,
        28, 0, 34,
        94, 0, 56
 };
-static int parser_action_row739[] = {
+static int parser_action_row742[] = {
        1,
-       -1, 1, 384
+       -1, 1, 385
 };
-static int parser_action_row740[] = {
+static int parser_action_row743[] = {
        1,
        -1, 1, 106
 };
-static int parser_action_row741[] = {
+static int parser_action_row744[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row742[] = {
+static int parser_action_row745[] = {
        5,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        28, 0, 34,
        94, 0, 56
 };
-static int parser_action_row743[] = {
+static int parser_action_row746[] = {
        1,
-       -1, 1, 364
+       -1, 1, 365
 };
-static int parser_action_row744[] = {
+static int parser_action_row747[] = {
        2,
-       -1, 1, 366,
-       57, 0, 193
+       -1, 1, 367,
+       57, 0, 192
 };
-static int parser_action_row745[] = {
+static int parser_action_row748[] = {
        2,
-       -1, 3, 744,
-       81, 0, 875
+       -1, 3, 747,
+       81, 0, 878
 };
-static int parser_action_row746[] = {
+static int parser_action_row749[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row747[] = {
+static int parser_action_row750[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row748[] = {
+static int parser_action_row751[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -8417,22 +8431,22 @@ static int parser_action_row748[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row749[] = {
+static int parser_action_row752[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -8442,22 +8456,22 @@ static int parser_action_row749[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row750[] = {
+static int parser_action_row753[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -8467,22 +8481,22 @@ static int parser_action_row750[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row751[] = {
+static int parser_action_row754[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -8492,60 +8506,60 @@ static int parser_action_row751[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row752[] = {
+static int parser_action_row755[] = {
        1,
        -1, 1, 182
 };
-static int parser_action_row753[] = {
+static int parser_action_row756[] = {
        1,
        -1, 1, 184
 };
-static int parser_action_row754[] = {
+static int parser_action_row757[] = {
        23,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 385,
-       65, 0, 118,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 384,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row755[] = {
+static int parser_action_row758[] = {
        1,
        -1, 1, 341
 };
-static int parser_action_row756[] = {
+static int parser_action_row759[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -8555,49 +8569,49 @@ static int parser_action_row756[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row757[] = {
+static int parser_action_row760[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
-static int parser_action_row758[] = {
+static int parser_action_row761[] = {
        4,
-       -1, 1, 528,
-       53, 1, 531,
-       61, 1, 531,
-       63, 1, 531
+       -1, 1, 529,
+       53, 1, 532,
+       61, 1, 532,
+       63, 1, 532
 };
-static int parser_action_row759[] = {
+static int parser_action_row762[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row760[] = {
+static int parser_action_row763[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row761[] = {
+static int parser_action_row764[] = {
        1,
        -1, 1, 194
 };
-static int parser_action_row762[] = {
+static int parser_action_row765[] = {
        2,
        -1, 1, 181,
-       24, 1, 648
+       24, 1, 649
 };
-static int parser_action_row763[] = {
+static int parser_action_row766[] = {
        3,
        -1, 1, 153,
-       24, 1, 627,
-       49, 1, 726
+       24, 1, 628,
+       49, 1, 727
 };
-static int parser_action_row764[] = {
+static int parser_action_row767[] = {
        30,
-       -1, 1, 358,
-       9, 0, 887,
+       -1, 1, 359,
+       9, 0, 890,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -8627,41 +8641,41 @@ static int parser_action_row764[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row765[] = {
+static int parser_action_row768[] = {
        1,
-       -1, 1, 671
+       -1, 1, 672
 };
-static int parser_action_row766[] = {
+static int parser_action_row769[] = {
        1,
-       -1, 1, 628
+       -1, 1, 629
 };
-static int parser_action_row767[] = {
+static int parser_action_row770[] = {
        2,
-       -1, 3, 766,
-       49, 0, 175
+       -1, 3, 769,
+       49, 0, 174
 };
-static int parser_action_row768[] = {
+static int parser_action_row771[] = {
        3,
        -1, 1, 150,
-       56, 0, 292,
-       80, 0, 184
+       56, 0, 290,
+       80, 0, 183
 };
-static int parser_action_row769[] = {
+static int parser_action_row772[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -8671,26 +8685,26 @@ static int parser_action_row769[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row770[] = {
+static int parser_action_row773[] = {
        1,
        -1, 1, 214
 };
-static int parser_action_row771[] = {
+static int parser_action_row774[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -8700,51 +8714,51 @@ static int parser_action_row771[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row772[] = {
+static int parser_action_row775[] = {
        1,
-       -1, 1, 674
+       -1, 1, 675
 };
-static int parser_action_row773[] = {
+static int parser_action_row776[] = {
        2,
-       -1, 3, 772,
-       49, 0, 175
+       -1, 3, 775,
+       49, 0, 174
 };
-static int parser_action_row774[] = {
+static int parser_action_row777[] = {
        3,
-       -1, 3, 773,
-       51, 0, 895,
-       82, 0, 299
+       -1, 3, 776,
+       51, 0, 898,
+       82, 0, 297
 };
-static int parser_action_row775[] = {
+static int parser_action_row778[] = {
        1,
-       -1, 1, 632
+       -1, 1, 633
 };
-static int parser_action_row776[] = {
+static int parser_action_row779[] = {
        2,
        -1, 1, 170,
-       24, 1, 637
+       24, 1, 638
 };
-static int parser_action_row777[] = {
+static int parser_action_row780[] = {
        2,
        -1, 1, 167,
-       24, 1, 634
+       24, 1, 635
 };
-static int parser_action_row778[] = {
+static int parser_action_row781[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -8754,126 +8768,126 @@ static int parser_action_row778[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row779[] = {
+static int parser_action_row782[] = {
        2,
-       -1, 3, 778,
-       24, 0, 898
+       -1, 3, 781,
+       24, 0, 901
 };
-static int parser_action_row780[] = {
+static int parser_action_row783[] = {
        3,
-       -1, 3, 779,
-       47, 0, 344,
-       81, 0, 345
+       -1, 3, 782,
+       47, 0, 342,
+       81, 0, 343
 };
-static int parser_action_row781[] = {
+static int parser_action_row784[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row782[] = {
+static int parser_action_row785[] = {
        4,
        -1, 1, 274,
-       58, 0, 901,
-       59, 0, 371,
-       60, 0, 372
+       58, 0, 904,
+       59, 0, 370,
+       60, 0, 371
 };
-static int parser_action_row783[] = {
+static int parser_action_row786[] = {
        26,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 117,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 116,
        53, 1, 340,
        61, 1, 340,
        63, 1, 340,
-       65, 0, 118,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row784[] = {
+static int parser_action_row787[] = {
        4,
        -1, 1, 268,
-       58, 0, 904,
-       59, 0, 371,
-       60, 0, 372
+       58, 0, 907,
+       59, 0, 370,
+       60, 0, 371
 };
-static int parser_action_row785[] = {
+static int parser_action_row788[] = {
        4,
        -1, 1, 270,
-       58, 0, 906,
-       59, 0, 371,
-       60, 0, 372
+       58, 0, 909,
+       59, 0, 370,
+       60, 0, 371
 };
-static int parser_action_row786[] = {
+static int parser_action_row789[] = {
        2,
        -1, 1, 178,
-       24, 1, 645
+       24, 1, 646
 };
-static int parser_action_row787[] = {
+static int parser_action_row790[] = {
        23,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 385,
-       65, 0, 118,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 384,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row788[] = {
+static int parser_action_row791[] = {
        3,
-       -1, 3, 787,
-       9, 0, 661,
-       24, 0, 666
+       -1, 3, 790,
+       9, 0, 663,
+       24, 0, 668
 };
-static int parser_action_row789[] = {
+static int parser_action_row792[] = {
        3,
-       -1, 3, 788,
+       -1, 3, 791,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row790[] = {
+static int parser_action_row793[] = {
        1,
        -1, 1, 213
 };
-static int parser_action_row791[] = {
+static int parser_action_row794[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 466,
+       9, 0, 465,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -8903,74 +8917,74 @@ static int parser_action_row791[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row792[] = {
+static int parser_action_row795[] = {
        23,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 385,
-       65, 0, 118,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 384,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row793[] = {
+static int parser_action_row796[] = {
        3,
-       -1, 1, 356,
-       12, 0, 913,
-       82, 0, 389
+       -1, 1, 357,
+       12, 0, 916,
+       82, 0, 388
 };
-static int parser_action_row794[] = {
+static int parser_action_row797[] = {
        1,
        -1, 1, 218
 };
-static int parser_action_row795[] = {
+static int parser_action_row798[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row796[] = {
+static int parser_action_row799[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row797[] = {
+static int parser_action_row800[] = {
        1,
-       -1, 1, 350
+       -1, 1, 351
 };
-static int parser_action_row798[] = {
+static int parser_action_row801[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -8980,118 +8994,118 @@ static int parser_action_row798[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row799[] = {
+static int parser_action_row802[] = {
        4,
        -1, 1, 264,
        53, 1, 267,
        61, 1, 267,
        63, 1, 267
 };
-static int parser_action_row800[] = {
+static int parser_action_row803[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row801[] = {
+static int parser_action_row804[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row802[] = {
+static int parser_action_row805[] = {
        1,
-       -1, 1, 808
+       -1, 1, 809
 };
-static int parser_action_row803[] = {
+static int parser_action_row806[] = {
        2,
        -1, 1, 146,
-       55, 0, 800
+       55, 0, 803
 };
-static int parser_action_row804[] = {
+static int parser_action_row807[] = {
        2,
-       -1, 3, 803,
-       54, 0, 920
+       -1, 3, 806,
+       54, 0, 923
 };
-static int parser_action_row805[] = {
+static int parser_action_row808[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row806[] = {
+static int parser_action_row809[] = {
        2,
-       -1, 1, 557,
-       80, 0, 471
+       -1, 1, 558,
+       80, 0, 470
 };
-static int parser_action_row807[] = {
+static int parser_action_row810[] = {
        1,
        -1, 1, 275
 };
-static int parser_action_row808[] = {
+static int parser_action_row811[] = {
        2,
-       -1, 3, 807,
-       82, 0, 389
+       -1, 3, 810,
+       82, 0, 388
 };
-static int parser_action_row809[] = {
+static int parser_action_row812[] = {
        13,
        -1, 1, 306,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       51, 0, 923,
-       80, 0, 184,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       51, 0, 926,
+       80, 0, 183,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row810[] = {
+static int parser_action_row813[] = {
        1,
        -1, 1, 304
 };
-static int parser_action_row811[] = {
+static int parser_action_row814[] = {
        2,
        -1, 1, 42,
        13, 0, 27
 };
-static int parser_action_row812[] = {
+static int parser_action_row815[] = {
        1,
-       -1, 1, 815
+       -1, 1, 816
 };
-static int parser_action_row813[] = {
+static int parser_action_row816[] = {
        35,
-       -1, 1, 358,
-       12, 0, 155,
+       -1, 1, 359,
+       12, 0, 154,
        15, 0, 28,
        16, 0, 29,
-       22, 0, 156,
+       22, 0, 155,
        25, 0, 31,
        26, 0, 32,
        27, 0, 33,
-       31, 0, 157,
-       33, 0, 928,
-       34, 0, 929,
-       35, 0, 930,
-       36, 0, 931,
+       31, 0, 156,
+       33, 0, 931,
+       34, 0, 932,
+       35, 0, 933,
+       36, 0, 934,
        37, 0, 39,
-       38, 0, 158,
-       40, 0, 159,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       47, 0, 344,
-       48, 0, 160,
-       50, 0, 932,
+       47, 0, 342,
+       48, 0, 159,
+       50, 0, 935,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
-       80, 0, 184,
-       81, 0, 933,
+       65, 0, 160,
+       80, 0, 183,
+       81, 0, 936,
        82, 0, 49,
        84, 0, 50,
        85, 0, 51,
@@ -9100,311 +9114,311 @@ static int parser_action_row813[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row814[] = {
+static int parser_action_row817[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row815[] = {
+static int parser_action_row818[] = {
        2,
-       -1, 3, 814,
-       54, 0, 951
+       -1, 3, 817,
+       54, 0, 954
 };
-static int parser_action_row816[] = {
+static int parser_action_row819[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row817[] = {
+static int parser_action_row820[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
-static int parser_action_row818[] = {
+static int parser_action_row821[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row819[] = {
+static int parser_action_row822[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row820[] = {
+static int parser_action_row823[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row821[] = {
+static int parser_action_row824[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row822[] = {
+static int parser_action_row825[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row823[] = {
+static int parser_action_row826[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row824[] = {
+static int parser_action_row827[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row825[] = {
+static int parser_action_row828[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row826[] = {
+static int parser_action_row829[] = {
        16,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 962,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       51, 0, 826,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 965,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       51, 0, 829,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row827[] = {
+static int parser_action_row830[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row828[] = {
+static int parser_action_row831[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row829[] = {
+static int parser_action_row832[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row830[] = {
+static int parser_action_row833[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row831[] = {
+static int parser_action_row834[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row832[] = {
+static int parser_action_row835[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row833[] = {
+static int parser_action_row836[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row834[] = {
+static int parser_action_row837[] = {
        1,
-       -1, 1, 450
+       -1, 1, 451
 };
-static int parser_action_row835[] = {
+static int parser_action_row838[] = {
        3,
-       -1, 3, 834,
-       41, 0, 972,
-       83, 0, 973
+       -1, 3, 837,
+       41, 0, 975,
+       83, 0, 976
 };
-static int parser_action_row836[] = {
+static int parser_action_row839[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
-static int parser_action_row837[] = {
+static int parser_action_row840[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row838[] = {
+static int parser_action_row841[] = {
        4,
-       -1, 1, 392,
-       29, 0, 976,
-       30, 0, 977,
-       32, 0, 978
+       -1, 1, 393,
+       29, 0, 979,
+       30, 0, 980,
+       32, 0, 981
 };
-static int parser_action_row839[] = {
+static int parser_action_row842[] = {
        1,
-       -1, 1, 394
+       -1, 1, 395
 };
-static int parser_action_row840[] = {
+static int parser_action_row843[] = {
        3,
-       -1, 1, 399,
-       74, 0, 979,
-       77, 0, 980
+       -1, 1, 400,
+       74, 0, 982,
+       77, 0, 983
 };
-static int parser_action_row841[] = {
+static int parser_action_row844[] = {
        11,
-       -1, 1, 401,
-       39, 0, 981,
-       64, 0, 982,
-       65, 0, 983,
-       70, 0, 984,
-       71, 0, 985,
-       72, 0, 986,
-       73, 0, 987,
-       75, 0, 988,
-       76, 0, 989,
-       78, 0, 990
+       -1, 1, 402,
+       39, 0, 984,
+       64, 0, 985,
+       65, 0, 986,
+       70, 0, 987,
+       71, 0, 988,
+       72, 0, 989,
+       73, 0, 990,
+       75, 0, 991,
+       76, 0, 992,
+       78, 0, 993
 };
-static int parser_action_row842[] = {
+static int parser_action_row845[] = {
        4,
-       -1, 1, 412,
-       66, 0, 991,
-       68, 0, 992,
-       69, 0, 993
+       -1, 1, 413,
+       66, 0, 994,
+       68, 0, 995,
+       69, 0, 996
 };
-static int parser_action_row843[] = {
+static int parser_action_row846[] = {
        1,
-       -1, 1, 415
+       -1, 1, 416
 };
-static int parser_action_row844[] = {
+static int parser_action_row847[] = {
        2,
-       -1, 1, 419,
-       67, 0, 994
+       -1, 1, 420,
+       67, 0, 997
 };
-static int parser_action_row845[] = {
+static int parser_action_row848[] = {
        1,
-       -1, 1, 421
+       -1, 1, 422
 };
-static int parser_action_row846[] = {
+static int parser_action_row849[] = {
        3,
-       -1, 1, 424,
-       61, 0, 995,
-       63, 0, 996
+       -1, 1, 425,
+       61, 0, 998,
+       63, 0, 999
 };
-static int parser_action_row847[] = {
+static int parser_action_row850[] = {
        1,
-       -1, 1, 428
+       -1, 1, 429
 };
-static int parser_action_row848[] = {
+static int parser_action_row851[] = {
        2,
-       -1, 1, 353,
-       57, 0, 194
+       -1, 1, 354,
+       57, 0, 193
 };
-static int parser_action_row849[] = {
+static int parser_action_row852[] = {
        2,
-       -1, 3, 848,
-       82, 0, 997
+       -1, 3, 851,
+       82, 0, 1000
 };
-static int parser_action_row850[] = {
+static int parser_action_row853[] = {
        1,
        -1, 1, 75
 };
-static int parser_action_row851[] = {
+static int parser_action_row854[] = {
        1,
        -1, 1, 309
 };
-static int parser_action_row852[] = {
+static int parser_action_row855[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row853[] = {
+static int parser_action_row856[] = {
        1,
        -1, 1, 16
 };
-static int parser_action_row854[] = {
+static int parser_action_row857[] = {
        1,
        -1, 1, 17
 };
-static int parser_action_row855[] = {
+static int parser_action_row858[] = {
        3,
        -1, 1, 306,
-       56, 0, 628,
-       80, 0, 184
+       56, 0, 629,
+       80, 0, 183
 };
-static int parser_action_row856[] = {
+static int parser_action_row859[] = {
        2,
-       -1, 3, 855,
-       52, 0, 1005
+       -1, 3, 858,
+       52, 0, 1008
 };
-static int parser_action_row857[] = {
+static int parser_action_row860[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
-       55, 0, 1006
+       55, 0, 1009
 };
-static int parser_action_row858[] = {
+static int parser_action_row861[] = {
        1,
        -1, 1, 148
 };
-static int parser_action_row859[] = {
+static int parser_action_row862[] = {
        21,
-       -1, 3, 858,
-       41, 0, 1010,
-       47, 0, 344,
-       53, 0, 487,
-       64, 0, 488,
-       65, 0, 489,
-       66, 0, 490,
-       67, 0, 491,
-       68, 0, 492,
-       69, 0, 493,
-       70, 0, 494,
-       71, 0, 495,
-       72, 0, 496,
-       73, 0, 497,
-       74, 0, 498,
-       75, 0, 499,
-       76, 0, 500,
-       77, 0, 501,
-       78, 0, 502,
-       81, 0, 345,
-       82, 0, 503
+       -1, 3, 861,
+       41, 0, 1013,
+       47, 0, 342,
+       53, 0, 486,
+       64, 0, 487,
+       65, 0, 488,
+       66, 0, 489,
+       67, 0, 490,
+       68, 0, 491,
+       69, 0, 492,
+       70, 0, 493,
+       71, 0, 494,
+       72, 0, 495,
+       73, 0, 496,
+       74, 0, 497,
+       75, 0, 498,
+       76, 0, 499,
+       77, 0, 500,
+       78, 0, 501,
+       81, 0, 343,
+       82, 0, 502
 };
-static int parser_action_row860[] = {
+static int parser_action_row863[] = {
        3,
        -1, 1, 78,
-       0, 1, 387,
-       1, 1, 387
+       0, 1, 388,
+       1, 1, 388
 };
-static int parser_action_row861[] = {
+static int parser_action_row864[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row862[] = {
+static int parser_action_row865[] = {
        2,
-       -1, 1, 369,
-       9, 0, 1017
+       -1, 1, 370,
+       9, 0, 1020
 };
-static int parser_action_row863[] = {
+static int parser_action_row866[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 466,
+       9, 0, 465,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -9434,218 +9448,218 @@ static int parser_action_row863[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row864[] = {
+static int parser_action_row867[] = {
        3,
-       -1, 3, 863,
+       -1, 3, 866,
        28, 0, 34,
        94, 0, 56
 };
-static int parser_action_row865[] = {
+static int parser_action_row868[] = {
        1,
-       -1, 1, 385
+       -1, 1, 386
 };
-static int parser_action_row866[] = {
+static int parser_action_row869[] = {
        2,
-       -1, 3, 865,
-       81, 0, 1021
+       -1, 3, 868,
+       81, 0, 1024
 };
-static int parser_action_row867[] = {
+static int parser_action_row870[] = {
        1,
-       -1, 1, 798
+       -1, 1, 799
 };
-static int parser_action_row868[] = {
+static int parser_action_row871[] = {
        1,
-       -1, 1, 800
+       -1, 1, 801
 };
-static int parser_action_row869[] = {
+static int parser_action_row872[] = {
        3,
-       -1, 3, 868,
-       0, 0, 83,
-       1, 0, 84
+       -1, 3, 871,
+       0, 0, 82,
+       1, 0, 83
 };
-static int parser_action_row870[] = {
+static int parser_action_row873[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row871[] = {
+static int parser_action_row874[] = {
        1,
-       -1, 1, 818
+       -1, 1, 819
 };
-static int parser_action_row872[] = {
+static int parser_action_row875[] = {
        6,
        -1, 1, 42,
-       6, 0, 1027,
-       9, 0, 1028,
+       6, 0, 1030,
+       9, 0, 1031,
        13, 0, 27,
-       41, 0, 1029,
-       82, 0, 1030
+       41, 0, 1032,
+       82, 0, 1033
 };
-static int parser_action_row873[] = {
+static int parser_action_row876[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row874[] = {
+static int parser_action_row877[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row875[] = {
+static int parser_action_row878[] = {
        5,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        28, 0, 34,
        94, 0, 56
 };
-static int parser_action_row876[] = {
+static int parser_action_row879[] = {
        1,
-       -1, 1, 365
+       -1, 1, 366
 };
-static int parser_action_row877[] = {
+static int parser_action_row880[] = {
        2,
-       -1, 3, 876,
-       45, 0, 1043
+       -1, 3, 879,
+       45, 0, 1046
 };
-static int parser_action_row878[] = {
+static int parser_action_row881[] = {
        4,
-       -1, 3, 877,
-       31, 0, 1044,
-       47, 0, 344,
-       81, 0, 345
+       -1, 3, 880,
+       31, 0, 1047,
+       47, 0, 342,
+       81, 0, 343
 };
-static int parser_action_row879[] = {
+static int parser_action_row882[] = {
        1,
        -1, 1, 195
 };
-static int parser_action_row880[] = {
+static int parser_action_row883[] = {
        1,
        -1, 1, 200
 };
-static int parser_action_row881[] = {
+static int parser_action_row884[] = {
        1,
        -1, 1, 197
 };
-static int parser_action_row882[] = {
+static int parser_action_row885[] = {
        1,
        -1, 1, 202
 };
-static int parser_action_row883[] = {
+static int parser_action_row886[] = {
        1,
        -1, 1, 183
 };
-static int parser_action_row884[] = {
+static int parser_action_row887[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row885[] = {
+static int parser_action_row888[] = {
        1,
-       -1, 1, 539
+       -1, 1, 540
 };
-static int parser_action_row886[] = {
+static int parser_action_row889[] = {
        2,
-       -1, 3, 885,
-       45, 0, 1047
+       -1, 3, 888,
+       45, 0, 1050
 };
-static int parser_action_row887[] = {
+static int parser_action_row890[] = {
        4,
-       -1, 3, 886,
-       31, 0, 1048,
-       47, 0, 344,
-       81, 0, 345
+       -1, 3, 889,
+       31, 0, 1051,
+       47, 0, 342,
+       81, 0, 343
 };
-static int parser_action_row888[] = {
+static int parser_action_row891[] = {
        3,
        -1, 1, 152,
-       24, 1, 626,
-       49, 1, 725
+       24, 1, 627,
+       49, 1, 726
 };
-static int parser_action_row889[] = {
+static int parser_action_row892[] = {
        3,
        -1, 1, 151,
-       24, 1, 625,
-       49, 1, 724
+       24, 1, 626,
+       49, 1, 725
 };
-static int parser_action_row890[] = {
+static int parser_action_row893[] = {
        2,
        -1, 1, 207,
-       24, 1, 670
+       24, 1, 671
 };
-static int parser_action_row891[] = {
+static int parser_action_row894[] = {
        3,
        -1, 1, 191,
-       24, 1, 656,
-       58, 0, 1050
+       24, 1, 657,
+       58, 0, 1053
 };
-static int parser_action_row892[] = {
+static int parser_action_row895[] = {
        2,
        -1, 1, 150,
-       56, 0, 292
+       56, 0, 290
 };
-static int parser_action_row893[] = {
+static int parser_action_row896[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row894[] = {
+static int parser_action_row897[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row895[] = {
+static int parser_action_row898[] = {
        2,
        -1, 1, 216,
-       24, 1, 673
+       24, 1, 674
 };
-static int parser_action_row896[] = {
+static int parser_action_row899[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row897[] = {
+static int parser_action_row900[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row898[] = {
+static int parser_action_row901[] = {
        2,
-       -1, 3, 897,
-       24, 0, 1056
+       -1, 3, 900,
+       24, 0, 1059
 };
-static int parser_action_row899[] = {
+static int parser_action_row902[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 1057,
-       12, 0, 662,
-       15, 0, 663,
-       16, 0, 664,
-       22, 0, 665,
-       25, 0, 667,
-       26, 0, 668,
-       27, 0, 669,
-       33, 0, 670,
-       34, 0, 671,
-       35, 0, 672,
-       36, 0, 673,
-       37, 0, 674,
+       9, 0, 1060,
+       12, 0, 664,
+       15, 0, 665,
+       16, 0, 666,
+       22, 0, 667,
+       25, 0, 669,
+       26, 0, 670,
+       27, 0, 671,
+       33, 0, 672,
+       34, 0, 673,
+       35, 0, 674,
+       36, 0, 675,
+       37, 0, 676,
        38, 0, 40,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       50, 0, 675,
+       50, 0, 677,
        51, 0, 46,
        53, 0, 47,
        81, 0, 48,
@@ -9657,35 +9671,35 @@ static int parser_action_row899[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row900[] = {
+static int parser_action_row903[] = {
        2,
-       -1, 3, 899,
-       56, 0, 1060
+       -1, 3, 902,
+       56, 0, 1063
 };
-static int parser_action_row901[] = {
+static int parser_action_row904[] = {
        5,
-       -1, 1, 358,
-       12, 0, 1061,
+       -1, 1, 359,
+       12, 0, 1064,
        46, 0, 508,
        81, 0, 48,
        82, 0, 49
 };
-static int parser_action_row902[] = {
+static int parser_action_row905[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -9695,22 +9709,22 @@ static int parser_action_row902[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row903[] = {
+static int parser_action_row906[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -9720,27 +9734,27 @@ static int parser_action_row903[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row904[] = {
+static int parser_action_row907[] = {
        2,
        -1, 1, 179,
-       24, 1, 646
+       24, 1, 647
 };
-static int parser_action_row905[] = {
+static int parser_action_row908[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -9750,22 +9764,22 @@ static int parser_action_row905[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row906[] = {
+static int parser_action_row909[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -9775,22 +9789,22 @@ static int parser_action_row906[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row907[] = {
+static int parser_action_row910[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -9800,22 +9814,22 @@ static int parser_action_row907[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row908[] = {
+static int parser_action_row911[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -9825,143 +9839,143 @@ static int parser_action_row908[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row909[] = {
+static int parser_action_row912[] = {
        2,
        -1, 1, 185,
-       24, 1, 652
+       24, 1, 653
 };
-static int parser_action_row910[] = {
+static int parser_action_row913[] = {
        1,
        -1, 1, 211
 };
-static int parser_action_row911[] = {
+static int parser_action_row914[] = {
        3,
-       -1, 3, 910,
+       -1, 3, 913,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row912[] = {
+static int parser_action_row915[] = {
        1,
        -1, 1, 209
 };
-static int parser_action_row913[] = {
+static int parser_action_row916[] = {
        2,
        -1, 1, 187,
-       24, 1, 654
+       24, 1, 655
 };
-static int parser_action_row914[] = {
+static int parser_action_row917[] = {
        23,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 385,
-       65, 0, 118,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 384,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
-};
-static int parser_action_row915[] = {
-       2,
-       -1, 3, 914,
-       28, 0, 1073
-};
-static int parser_action_row916[] = {
-       2,
-       -1, 3, 915,
-       15, 0, 1074
-};
-static int parser_action_row917[] = {
-       3,
-       -1, 1, 376,
-       0, 0, 1,
-       1, 0, 2
+       91, 0, 122
 };
 static int parser_action_row918[] = {
        2,
        -1, 3, 917,
-       54, 0, 1076
+       28, 0, 1076
 };
 static int parser_action_row919[] = {
-       3,
+       2,
        -1, 3, 918,
-       47, 0, 344,
-       81, 0, 345
+       15, 0, 1077
 };
 static int parser_action_row920[] = {
-       1,
-       -1, 1, 809
+       3,
+       -1, 1, 377,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row921[] = {
        2,
-       -1, 1, 557,
-       80, 0, 471
+       -1, 3, 920,
+       54, 0, 1079
 };
 static int parser_action_row922[] = {
-       2,
+       3,
        -1, 3, 921,
-       52, 0, 1079
+       47, 0, 342,
+       81, 0, 343
 };
 static int parser_action_row923[] = {
        1,
-       -1, 1, 558
+       -1, 1, 810
 };
 static int parser_action_row924[] = {
-       3,
-       -1, 1, 376,
+       2,
+       -1, 1, 558,
+       80, 0, 470
+};
+static int parser_action_row925[] = {
+       2,
+       -1, 3, 924,
+       52, 0, 1082
+};
+static int parser_action_row926[] = {
+       1,
+       -1, 1, 559
+};
+static int parser_action_row927[] = {
+       3,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row925[] = {
+static int parser_action_row928[] = {
        1,
        -1, 1, 312
 };
-static int parser_action_row926[] = {
+static int parser_action_row929[] = {
        1,
        -1, 1, 314
 };
-static int parser_action_row927[] = {
+static int parser_action_row930[] = {
        1,
        -1, 1, 315
 };
-static int parser_action_row928[] = {
+static int parser_action_row931[] = {
        1,
        -1, 1, 316
 };
-static int parser_action_row929[] = {
+static int parser_action_row932[] = {
        24,
-       -1, 1, 732,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
-       41, 1, 358,
+       -1, 1, 733,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
+       41, 1, 359,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
+       83, 1, 359,
        84, 0, 50,
        85, 0, 51,
        86, 0, 52,
@@ -9969,139 +9983,139 @@ static int parser_action_row929[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row930[] = {
-       2,
-       -1, 1, 737,
-       49, 0, 175
-};
-static int parser_action_row931[] = {
-       2,
-       -1, 1, 734,
-       49, 0, 175
-};
-static int parser_action_row932[] = {
-       1,
-       -1, 1, 736
-};
 static int parser_action_row933[] = {
        2,
-       -1, 3, 932,
-       11, 0, 1084
+       -1, 1, 738,
+       49, 0, 174
 };
 static int parser_action_row934[] = {
-       4,
-       -1, 1, 306,
-       53, 0, 478,
-       57, 0, 193,
-       80, 0, 184
+       2,
+       -1, 1, 735,
+       49, 0, 174
 };
 static int parser_action_row935[] = {
        1,
-       -1, 1, 331
+       -1, 1, 737
 };
 static int parser_action_row936[] = {
-       1,
-       -1, 1, 730
+       2,
+       -1, 3, 935,
+       11, 0, 1087
 };
 static int parser_action_row937[] = {
-       1,
-       -1, 1, 731
+       4,
+       -1, 1, 306,
+       53, 0, 477,
+       57, 0, 192,
+       80, 0, 183
 };
 static int parser_action_row938[] = {
        1,
-       -1, 1, 739
+       -1, 1, 331
 };
 static int parser_action_row939[] = {
        1,
-       -1, 1, 741
+       -1, 1, 731
 };
 static int parser_action_row940[] = {
        1,
-       -1, 1, 740
+       -1, 1, 732
 };
 static int parser_action_row941[] = {
        1,
-       -1, 1, 742
+       -1, 1, 740
 };
 static int parser_action_row942[] = {
        1,
-       -1, 1, 743
+       -1, 1, 742
 };
 static int parser_action_row943[] = {
        1,
-       -1, 1, 332
+       -1, 1, 741
 };
 static int parser_action_row944[] = {
+       1,
+       -1, 1, 743
+};
+static int parser_action_row945[] = {
+       1,
+       -1, 1, 744
+};
+static int parser_action_row946[] = {
+       1,
+       -1, 1, 332
+};
+static int parser_action_row947[] = {
        4,
        -1, 1, 262,
-       53, 0, 209,
-       61, 0, 210,
-       63, 0, 1085
+       53, 0, 208,
+       61, 0, 209,
+       63, 0, 1088
 };
-static int parser_action_row945[] = {
+static int parser_action_row948[] = {
        1,
        -1, 1, 334
 };
-static int parser_action_row946[] = {
+static int parser_action_row949[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row947[] = {
+static int parser_action_row950[] = {
        2,
        -1, 1, 328,
-       55, 0, 1087
+       55, 0, 1090
 };
-static int parser_action_row948[] = {
+static int parser_action_row951[] = {
        3,
-       -1, 3, 947,
-       41, 0, 330,
-       83, 0, 222
+       -1, 3, 950,
+       41, 0, 328,
+       83, 0, 220
 };
-static int parser_action_row949[] = {
+static int parser_action_row952[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
-static int parser_action_row950[] = {
+static int parser_action_row953[] = {
        1,
        -1, 1, 333
 };
-static int parser_action_row951[] = {
+static int parser_action_row954[] = {
        2,
-       -1, 3, 950,
-       54, 0, 1090
+       -1, 3, 953,
+       54, 0, 1093
 };
-static int parser_action_row952[] = {
+static int parser_action_row955[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row953[] = {
+static int parser_action_row956[] = {
        1,
-       -1, 1, 348
+       -1, 1, 349
 };
-static int parser_action_row954[] = {
+static int parser_action_row957[] = {
        1,
-       -1, 1, 435
+       -1, 1, 436
 };
-static int parser_action_row955[] = {
+static int parser_action_row958[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -10111,107 +10125,107 @@ static int parser_action_row955[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row956[] = {
+static int parser_action_row959[] = {
        20,
-       -1, 1, 358,
-       12, 0, 816,
-       31, 0, 818,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       31, 0, 821,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row957[] = {
+static int parser_action_row960[] = {
        3,
-       -1, 3, 956,
-       47, 0, 1094,
-       81, 0, 1095
+       -1, 3, 959,
+       47, 0, 1097,
+       81, 0, 1098
 };
-static int parser_action_row958[] = {
+static int parser_action_row961[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
-};
-static int parser_action_row959[] = {
-       1,
-       -1, 1, 441
+       91, 0, 835
 };
-static int parser_action_row960[] = {
+static int parser_action_row962[] = {
        1,
        -1, 1, 442
 };
-static int parser_action_row961[] = {
+static int parser_action_row963[] = {
        1,
        -1, 1, 443
 };
-static int parser_action_row962[] = {
+static int parser_action_row964[] = {
        1,
        -1, 1, 444
 };
-static int parser_action_row963[] = {
+static int parser_action_row965[] = {
+       1,
+       -1, 1, 445
+};
+static int parser_action_row966[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row964[] = {
+static int parser_action_row967[] = {
        3,
-       -1, 3, 963,
-       41, 0, 972,
-       83, 0, 1099
+       -1, 3, 966,
+       41, 0, 975,
+       83, 0, 1102
 };
-static int parser_action_row965[] = {
+static int parser_action_row968[] = {
        3,
-       -1, 3, 964,
-       61, 0, 995,
-       63, 0, 1100
+       -1, 3, 967,
+       61, 0, 998,
+       63, 0, 1103
 };
-static int parser_action_row966[] = {
+static int parser_action_row969[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -10221,214 +10235,214 @@ static int parser_action_row966[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row967[] = {
+static int parser_action_row970[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
-};
-static int parser_action_row968[] = {
-       1,
-       -1, 1, 445
+       91, 0, 835
 };
-static int parser_action_row969[] = {
+static int parser_action_row971[] = {
        1,
        -1, 1, 446
 };
-static int parser_action_row970[] = {
+static int parser_action_row972[] = {
        1,
        -1, 1, 447
 };
-static int parser_action_row971[] = {
-       1,
-       -1, 1, 449
-};
-static int parser_action_row972[] = {
+static int parser_action_row973[] = {
        1,
        -1, 1, 448
 };
-static int parser_action_row973[] = {
-       2,
-       -1, 1, 340,
-       51, 0, 242
-};
 static int parser_action_row974[] = {
        1,
-       -1, 1, 430
+       -1, 1, 450
 };
 static int parser_action_row975[] = {
        1,
-       -1, 1, 432
+       -1, 1, 449
 };
 static int parser_action_row976[] = {
-       3,
-       -1, 3, 975,
-       53, 0, 1104,
-       54, 0, 1105
+       2,
+       -1, 1, 340,
+       51, 0, 240
 };
 static int parser_action_row977[] = {
-       3,
-       -1, 1, 376,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 431
 };
 static int parser_action_row978[] = {
-       4,
-       -1, 1, 376,
-       0, 0, 1,
-       1, 0, 2,
-       24, 0, 1107
+       1,
+       -1, 1, 433
 };
 static int parser_action_row979[] = {
        3,
-       -1, 1, 376,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 978,
+       53, 0, 1107,
+       54, 0, 1108
 };
 static int parser_action_row980[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row981[] = {
-       3,
-       -1, 1, 376,
+       4,
+       -1, 1, 377,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       24, 0, 1110
 };
 static int parser_action_row982[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row983[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row984[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row985[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row986[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row987[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row988[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row989[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row990[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row991[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row992[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row993[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row994[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row995[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row996[] = {
-       1,
-       -1, 1, 440
+       3,
+       -1, 1, 377,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row997[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row998[] = {
-       2,
-       -1, 1, 354,
-       57, 0, 194
+       3,
+       -1, 1, 377,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row999[] = {
-       2,
-       -1, 3, 998,
-       9, 0, 1127
+       1,
+       -1, 1, 441
 };
 static int parser_action_row1000[] = {
-       1,
-       -1, 1, 816
+       3,
+       -1, 1, 377,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1001[] = {
        2,
+       -1, 1, 355,
+       57, 0, 193
+};
+static int parser_action_row1002[] = {
+       2,
+       -1, 3, 1001,
+       9, 0, 1130
+};
+static int parser_action_row1003[] = {
+       1,
+       -1, 1, 817
+};
+static int parser_action_row1004[] = {
+       2,
        -1, 1, 42,
        13, 0, 27
 };
-static int parser_action_row1002[] = {
+static int parser_action_row1005[] = {
        8,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
        4, 1, 317,
@@ -10437,349 +10451,349 @@ static int parser_action_row1002[] = {
        28, 1, 317,
        94, 1, 317
 };
-static int parser_action_row1003[] = {
+static int parser_action_row1006[] = {
        2,
        -1, 1, 113,
-       61, 0, 1130
+       61, 0, 1133
 };
-static int parser_action_row1004[] = {
+static int parser_action_row1007[] = {
        2,
        -1, 1, 305,
-       56, 0, 628
+       56, 0, 629
 };
-static int parser_action_row1005[] = {
+static int parser_action_row1008[] = {
        1,
        -1, 1, 112
 };
-static int parser_action_row1006[] = {
+static int parser_action_row1009[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
-       56, 0, 628
+       56, 0, 629
 };
-static int parser_action_row1007[] = {
+static int parser_action_row1010[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1008[] = {
+static int parser_action_row1011[] = {
        1,
-       -1, 1, 804
+       -1, 1, 805
 };
-static int parser_action_row1009[] = {
+static int parser_action_row1012[] = {
        1,
        -1, 1, 108
 };
-static int parser_action_row1010[] = {
+static int parser_action_row1013[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
-       55, 0, 1006
+       55, 0, 1009
 };
-static int parser_action_row1011[] = {
+static int parser_action_row1014[] = {
        1,
        -1, 1, 123
 };
-static int parser_action_row1012[] = {
+static int parser_action_row1015[] = {
        1,
        -1, 1, 124
 };
-static int parser_action_row1013[] = {
+static int parser_action_row1016[] = {
        2,
        -1, 1, 117,
-       55, 0, 1137
+       55, 0, 1140
 };
-static int parser_action_row1014[] = {
+static int parser_action_row1017[] = {
        1,
        -1, 1, 121
 };
-static int parser_action_row1015[] = {
+static int parser_action_row1018[] = {
        1,
        -1, 1, 122
 };
-static int parser_action_row1016[] = {
+static int parser_action_row1019[] = {
        2,
        -1, 1, 126,
-       63, 0, 1140
+       63, 0, 1143
 };
-static int parser_action_row1017[] = {
+static int parser_action_row1020[] = {
        2,
        -1, 1, 79,
-       9, 0, 1141
+       9, 0, 1144
 };
-static int parser_action_row1018[] = {
+static int parser_action_row1021[] = {
        1,
-       -1, 1, 370
+       -1, 1, 371
 };
-static int parser_action_row1019[] = {
+static int parser_action_row1022[] = {
        1,
-       -1, 1, 382
+       -1, 1, 383
 };
-static int parser_action_row1020[] = {
+static int parser_action_row1023[] = {
        2,
-       -1, 1, 369,
-       9, 0, 1017
+       -1, 1, 370,
+       9, 0, 1020
 };
-static int parser_action_row1021[] = {
+static int parser_action_row1024[] = {
        1,
-       -1, 1, 386
+       -1, 1, 387
 };
-static int parser_action_row1022[] = {
+static int parser_action_row1025[] = {
        3,
        -1, 1, 150,
-       56, 0, 292,
-       80, 0, 184
+       56, 0, 290,
+       80, 0, 183
 };
-static int parser_action_row1023[] = {
+static int parser_action_row1026[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
-       55, 0, 1145
+       55, 0, 1148
 };
-static int parser_action_row1024[] = {
+static int parser_action_row1027[] = {
        1,
        -1, 1, 56
 };
-static int parser_action_row1025[] = {
+static int parser_action_row1028[] = {
        4,
        -1, 1, 42,
-       9, 0, 1149,
+       9, 0, 1152,
        13, 0, 27,
-       41, 0, 1029
+       41, 0, 1032
 };
-static int parser_action_row1026[] = {
+static int parser_action_row1029[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1027[] = {
+static int parser_action_row1030[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1028[] = {
+static int parser_action_row1031[] = {
        1,
-       -1, 1, 791
+       -1, 1, 792
 };
-static int parser_action_row1029[] = {
+static int parser_action_row1032[] = {
        1,
        -1, 1, 26
 };
-static int parser_action_row1030[] = {
+static int parser_action_row1033[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1031[] = {
+static int parser_action_row1034[] = {
        1,
-       -1, 1, 790
+       -1, 1, 791
 };
-static int parser_action_row1032[] = {
+static int parser_action_row1035[] = {
        5,
        -1, 1, 80,
-       18, 0, 200,
-       19, 0, 201,
-       20, 0, 202,
-       21, 0, 203
+       18, 0, 199,
+       19, 0, 200,
+       20, 0, 201,
+       21, 0, 202
 };
-static int parser_action_row1033[] = {
+static int parser_action_row1036[] = {
        36,
-       -1, 1, 358,
-       0, 0, 83,
-       1, 0, 84,
-       12, 0, 107,
+       -1, 1, 359,
+       0, 0, 82,
+       1, 0, 83,
+       12, 0, 106,
        15, 0, 28,
        16, 0, 29,
-       22, 0, 108,
+       22, 0, 107,
        25, 0, 31,
        26, 0, 32,
        27, 0, 33,
-       31, 0, 109,
-       33, 0, 1155,
-       34, 0, 1156,
-       35, 0, 1157,
-       36, 0, 1158,
+       31, 0, 108,
+       33, 0, 1158,
+       34, 0, 1159,
+       35, 0, 1160,
+       36, 0, 1161,
        37, 0, 39,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       47, 0, 344,
-       48, 0, 116,
-       50, 0, 1159,
-       51, 0, 1160,
-       65, 0, 118,
-       80, 0, 184,
-       81, 0, 933,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       47, 0, 342,
+       48, 0, 115,
+       50, 0, 1162,
+       51, 0, 1163,
+       65, 0, 117,
+       80, 0, 183,
+       81, 0, 936,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row1034[] = {
+static int parser_action_row1037[] = {
        1,
-       -1, 1, 799
+       -1, 1, 800
 };
-static int parser_action_row1035[] = {
+static int parser_action_row1038[] = {
        4,
        -1, 1, 42,
-       9, 0, 1178,
+       9, 0, 1181,
        13, 0, 27,
-       41, 0, 1029
+       41, 0, 1032
 };
-static int parser_action_row1036[] = {
+static int parser_action_row1039[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1037[] = {
+static int parser_action_row1040[] = {
        1,
-       -1, 1, 801
+       -1, 1, 802
 };
-static int parser_action_row1038[] = {
+static int parser_action_row1041[] = {
        3,
        -1, 1, 42,
-       9, 0, 1180,
+       9, 0, 1183,
        13, 0, 27
 };
-static int parser_action_row1039[] = {
+static int parser_action_row1042[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1040[] = {
+static int parser_action_row1043[] = {
        1,
-       -1, 1, 819
+       -1, 1, 820
 };
-static int parser_action_row1041[] = {
+static int parser_action_row1044[] = {
        6,
        -1, 1, 42,
-       6, 0, 1027,
-       9, 0, 1184,
+       6, 0, 1030,
+       9, 0, 1187,
        13, 0, 27,
-       41, 0, 1029,
-       82, 0, 1030
+       41, 0, 1032,
+       82, 0, 1033
 };
-static int parser_action_row1042[] = {
+static int parser_action_row1045[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1043[] = {
+static int parser_action_row1046[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1044[] = {
+static int parser_action_row1047[] = {
        1,
        -1, 1, 278
 };
-static int parser_action_row1045[] = {
+static int parser_action_row1048[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1046[] = {
+static int parser_action_row1049[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1047[] = {
+static int parser_action_row1050[] = {
        2,
-       -1, 3, 1046,
-       24, 0, 1190
+       -1, 3, 1049,
+       24, 0, 1193
 };
-static int parser_action_row1048[] = {
+static int parser_action_row1051[] = {
        1,
-       -1, 1, 542
+       -1, 1, 543
 };
-static int parser_action_row1049[] = {
+static int parser_action_row1052[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1050[] = {
+static int parser_action_row1053[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1051[] = {
+static int parser_action_row1054[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1052[] = {
+static int parser_action_row1055[] = {
        3,
        -1, 1, 192,
-       24, 1, 657,
-       58, 0, 1194
+       24, 1, 658,
+       58, 0, 1197
 };
-static int parser_action_row1053[] = {
+static int parser_action_row1056[] = {
        2,
-       -1, 3, 1052,
-       23, 0, 1195
+       -1, 3, 1055,
+       23, 0, 1198
 };
-static int parser_action_row1054[] = {
+static int parser_action_row1057[] = {
        2,
-       -1, 3, 1053,
-       15, 0, 1196
+       -1, 3, 1056,
+       15, 0, 1199
 };
-static int parser_action_row1055[] = {
+static int parser_action_row1058[] = {
        2,
-       -1, 3, 1054,
-       82, 0, 299
+       -1, 3, 1057,
+       82, 0, 297
 };
-static int parser_action_row1056[] = {
+static int parser_action_row1059[] = {
        3,
-       -1, 3, 1055,
-       28, 0, 1198,
+       -1, 3, 1058,
+       28, 0, 1201,
        55, 0, 566
 };
-static int parser_action_row1057[] = {
+static int parser_action_row1060[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 1057,
-       12, 0, 662,
-       15, 0, 663,
-       16, 0, 664,
-       22, 0, 665,
-       25, 0, 667,
-       26, 0, 668,
-       27, 0, 669,
-       33, 0, 670,
-       34, 0, 671,
-       35, 0, 672,
-       36, 0, 673,
-       37, 0, 674,
+       9, 0, 1060,
+       12, 0, 664,
+       15, 0, 665,
+       16, 0, 666,
+       22, 0, 667,
+       25, 0, 669,
+       26, 0, 670,
+       27, 0, 671,
+       33, 0, 672,
+       34, 0, 673,
+       35, 0, 674,
+       36, 0, 675,
+       37, 0, 676,
        38, 0, 40,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       50, 0, 675,
+       50, 0, 677,
        51, 0, 46,
        53, 0, 47,
        81, 0, 48,
@@ -10791,15 +10805,15 @@ static int parser_action_row1057[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1058[] = {
+static int parser_action_row1061[] = {
        2,
        -1, 1, 153,
-       24, 1, 627
+       24, 1, 628
 };
-static int parser_action_row1059[] = {
+static int parser_action_row1062[] = {
        30,
-       -1, 1, 358,
-       9, 0, 1200,
+       -1, 1, 359,
+       9, 0, 1203,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -10829,26 +10843,26 @@ static int parser_action_row1059[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1060[] = {
+static int parser_action_row1063[] = {
        1,
-       -1, 1, 681
+       -1, 1, 682
 };
-static int parser_action_row1061[] = {
+static int parser_action_row1064[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -10858,126 +10872,126 @@ static int parser_action_row1061[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1062[] = {
+static int parser_action_row1065[] = {
        26,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 117,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 116,
        53, 1, 340,
        61, 1, 340,
        63, 1, 340,
-       65, 0, 118,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row1063[] = {
+static int parser_action_row1066[] = {
        2,
-       -1, 3, 1062,
-       83, 0, 1204
+       -1, 3, 1065,
+       83, 0, 1207
 };
-static int parser_action_row1064[] = {
+static int parser_action_row1067[] = {
        29,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 117,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 116,
        53, 1, 340,
        58, 1, 340,
        59, 1, 340,
        60, 1, 340,
        61, 1, 340,
        63, 1, 340,
-       65, 0, 118,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row1065[] = {
+static int parser_action_row1068[] = {
        3,
-       -1, 1, 355,
-       12, 0, 1207,
-       82, 0, 226
+       -1, 1, 356,
+       12, 0, 1210,
+       82, 0, 224
 };
-static int parser_action_row1066[] = {
+static int parser_action_row1069[] = {
        4,
-       -1, 1, 357,
-       12, 0, 1208,
+       -1, 1, 358,
+       12, 0, 1211,
        81, 0, 48,
-       82, 0, 228
+       82, 0, 226
 };
-static int parser_action_row1067[] = {
+static int parser_action_row1070[] = {
        1,
-       -1, 1, 664
+       -1, 1, 665
 };
-static int parser_action_row1068[] = {
+static int parser_action_row1071[] = {
        1,
-       -1, 1, 669
+       -1, 1, 670
 };
-static int parser_action_row1069[] = {
+static int parser_action_row1072[] = {
        1,
-       -1, 1, 661
+       -1, 1, 662
 };
-static int parser_action_row1070[] = {
+static int parser_action_row1073[] = {
        1,
-       -1, 1, 666
+       -1, 1, 667
 };
-static int parser_action_row1071[] = {
+static int parser_action_row1074[] = {
        1,
-       -1, 1, 663
+       -1, 1, 664
 };
-static int parser_action_row1072[] = {
+static int parser_action_row1075[] = {
        1,
-       -1, 1, 668
+       -1, 1, 669
 };
-static int parser_action_row1073[] = {
+static int parser_action_row1076[] = {
        2,
        -1, 1, 186,
-       24, 1, 653
+       24, 1, 654
 };
-static int parser_action_row1074[] = {
+static int parser_action_row1077[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1075[] = {
+static int parser_action_row1078[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 142,
+       9, 0, 141,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -11007,58 +11021,58 @@ static int parser_action_row1075[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1076[] = {
+static int parser_action_row1079[] = {
        2,
-       -1, 3, 1075,
-       24, 0, 1213
+       -1, 3, 1078,
+       24, 0, 1216
 };
-static int parser_action_row1077[] = {
+static int parser_action_row1080[] = {
        2,
-       -1, 1, 557,
-       80, 0, 471
+       -1, 1, 558,
+       80, 0, 470
 };
-static int parser_action_row1078[] = {
+static int parser_action_row1081[] = {
        1,
        -1, 1, 147
 };
-static int parser_action_row1079[] = {
+static int parser_action_row1082[] = {
        1,
-       -1, 1, 454
+       -1, 1, 455
 };
-static int parser_action_row1080[] = {
+static int parser_action_row1083[] = {
        1,
-       -1, 1, 555
+       -1, 1, 556
 };
-static int parser_action_row1081[] = {
+static int parser_action_row1084[] = {
        35,
-       -1, 1, 358,
-       12, 0, 155,
+       -1, 1, 359,
+       12, 0, 154,
        15, 0, 28,
        16, 0, 29,
-       22, 0, 156,
+       22, 0, 155,
        25, 0, 31,
        26, 0, 32,
        27, 0, 33,
-       31, 0, 157,
-       33, 0, 928,
-       34, 0, 929,
-       35, 0, 930,
-       36, 0, 931,
+       31, 0, 156,
+       33, 0, 931,
+       34, 0, 932,
+       35, 0, 933,
+       36, 0, 934,
        37, 0, 39,
-       38, 0, 158,
-       40, 0, 159,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       47, 0, 344,
-       48, 0, 160,
-       50, 0, 932,
+       47, 0, 342,
+       48, 0, 159,
+       50, 0, 935,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
-       80, 0, 184,
-       81, 0, 933,
+       65, 0, 160,
+       80, 0, 183,
+       81, 0, 936,
        82, 0, 49,
        84, 0, 50,
        85, 0, 51,
@@ -11067,732 +11081,732 @@ static int parser_action_row1081[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1082[] = {
+static int parser_action_row1085[] = {
        1,
-       -1, 1, 733
+       -1, 1, 734
 };
-static int parser_action_row1083[] = {
+static int parser_action_row1086[] = {
        1,
-       -1, 1, 738
+       -1, 1, 739
 };
-static int parser_action_row1084[] = {
+static int parser_action_row1087[] = {
        1,
-       -1, 1, 735
+       -1, 1, 736
 };
-static int parser_action_row1085[] = {
+static int parser_action_row1088[] = {
        3,
-       -1, 3, 1084,
-       47, 0, 344,
-       81, 0, 345
+       -1, 3, 1087,
+       47, 0, 342,
+       81, 0, 343
 };
-static int parser_action_row1086[] = {
+static int parser_action_row1089[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1087[] = {
+static int parser_action_row1090[] = {
        2,
-       -1, 3, 1086,
-       52, 0, 1218
+       -1, 3, 1089,
+       52, 0, 1221
 };
-static int parser_action_row1088[] = {
+static int parser_action_row1091[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1089[] = {
+static int parser_action_row1092[] = {
        1,
-       -1, 1, 820
+       -1, 1, 821
 };
-static int parser_action_row1090[] = {
+static int parser_action_row1093[] = {
        2,
        -1, 1, 329,
-       55, 0, 1087
+       55, 0, 1090
 };
-static int parser_action_row1091[] = {
+static int parser_action_row1094[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row1092[] = {
+static int parser_action_row1095[] = {
        1,
        -1, 1, 143
 };
-static int parser_action_row1093[] = {
+static int parser_action_row1096[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1094[] = {
+static int parser_action_row1097[] = {
        1,
-       -1, 1, 400
+       -1, 1, 401
 };
-static int parser_action_row1095[] = {
+static int parser_action_row1098[] = {
        2,
-       -1, 3, 1094,
-       81, 0, 1223
+       -1, 3, 1097,
+       81, 0, 1226
 };
-static int parser_action_row1096[] = {
+static int parser_action_row1099[] = {
        2,
-       -1, 1, 557,
-       80, 0, 471
+       -1, 1, 558,
+       80, 0, 470
 };
-static int parser_action_row1097[] = {
+static int parser_action_row1100[] = {
        3,
        -1, 1, 340,
-       51, 0, 242,
-       63, 0, 1225
+       51, 0, 240,
+       63, 0, 1228
 };
-static int parser_action_row1098[] = {
+static int parser_action_row1101[] = {
        1,
-       -1, 1, 423
+       -1, 1, 424
 };
-static int parser_action_row1099[] = {
+static int parser_action_row1102[] = {
        3,
-       -1, 3, 1098,
-       47, 0, 1094,
-       81, 0, 1095
+       -1, 3, 1101,
+       47, 0, 1097,
+       81, 0, 1098
 };
-static int parser_action_row1100[] = {
+static int parser_action_row1103[] = {
        3,
-       -1, 1, 427,
-       61, 1, 430,
-       63, 1, 430
+       -1, 1, 428,
+       61, 1, 431,
+       63, 1, 431
 };
-static int parser_action_row1101[] = {
+static int parser_action_row1104[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1102[] = {
+static int parser_action_row1105[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1103[] = {
+static int parser_action_row1106[] = {
        1,
-       -1, 1, 422
+       -1, 1, 423
 };
-static int parser_action_row1104[] = {
+static int parser_action_row1107[] = {
        1,
-       -1, 1, 433
+       -1, 1, 434
 };
-static int parser_action_row1105[] = {
+static int parser_action_row1108[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row1106[] = {
+static int parser_action_row1109[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row1107[] = {
+static int parser_action_row1110[] = {
        20,
-       -1, 1, 358,
-       12, 0, 816,
-       31, 0, 818,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       31, 0, 821,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1108[] = {
+static int parser_action_row1111[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1109[] = {
+static int parser_action_row1112[] = {
        20,
-       -1, 1, 358,
-       12, 0, 816,
-       31, 0, 818,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       31, 0, 821,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1110[] = {
+static int parser_action_row1113[] = {
        20,
-       -1, 1, 358,
-       12, 0, 816,
-       31, 0, 818,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       31, 0, 821,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1111[] = {
+static int parser_action_row1114[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1112[] = {
+static int parser_action_row1115[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1113[] = {
+static int parser_action_row1116[] = {
        3,
-       -1, 3, 1112,
-       47, 0, 1238,
-       81, 0, 1239
+       -1, 3, 1115,
+       47, 0, 1241,
+       81, 0, 1242
 };
-static int parser_action_row1114[] = {
+static int parser_action_row1117[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1115[] = {
+static int parser_action_row1118[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1116[] = {
+static int parser_action_row1119[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1117[] = {
+static int parser_action_row1120[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1118[] = {
+static int parser_action_row1121[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1119[] = {
+static int parser_action_row1122[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1120[] = {
+static int parser_action_row1123[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1121[] = {
+static int parser_action_row1124[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1122[] = {
+static int parser_action_row1125[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1123[] = {
+static int parser_action_row1126[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1124[] = {
+static int parser_action_row1127[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1125[] = {
+static int parser_action_row1128[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1126[] = {
+static int parser_action_row1129[] = {
        19,
-       -1, 1, 358,
-       12, 0, 816,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1127[] = {
+static int parser_action_row1130[] = {
        5,
-       -1, 1, 358,
-       12, 0, 1254,
-       46, 0, 1255,
+       -1, 1, 359,
+       12, 0, 1257,
+       46, 0, 1258,
        81, 0, 48,
        82, 0, 49
 };
-static int parser_action_row1128[] = {
+static int parser_action_row1131[] = {
        1,
        -1, 1, 76
 };
-static int parser_action_row1129[] = {
+static int parser_action_row1132[] = {
        5,
        -1, 1, 80,
-       18, 0, 200,
-       19, 0, 201,
-       20, 0, 202,
-       21, 0, 203
+       18, 0, 199,
+       19, 0, 200,
+       20, 0, 201,
+       21, 0, 202
 };
-static int parser_action_row1130[] = {
+static int parser_action_row1133[] = {
        1,
-       -1, 1, 817
+       -1, 1, 818
 };
-static int parser_action_row1131[] = {
+static int parser_action_row1134[] = {
        1,
        -1, 1, 115
 };
-static int parser_action_row1132[] = {
+static int parser_action_row1135[] = {
        2,
        -1, 1, 114,
-       61, 0, 1259
+       61, 0, 1262
 };
-static int parser_action_row1133[] = {
+static int parser_action_row1136[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1134[] = {
+static int parser_action_row1137[] = {
        1,
        -1, 1, 105
 };
-static int parser_action_row1135[] = {
+static int parser_action_row1138[] = {
        2,
-       -1, 3, 1134,
-       82, 0, 854
+       -1, 3, 1137,
+       82, 0, 857
 };
-static int parser_action_row1136[] = {
+static int parser_action_row1139[] = {
        1,
-       -1, 1, 805
+       -1, 1, 806
 };
-static int parser_action_row1137[] = {
+static int parser_action_row1140[] = {
        1,
        -1, 1, 109
 };
-static int parser_action_row1138[] = {
+static int parser_action_row1141[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1139[] = {
+static int parser_action_row1142[] = {
        1,
-       -1, 1, 806
+       -1, 1, 807
 };
-static int parser_action_row1140[] = {
+static int parser_action_row1143[] = {
        2,
        -1, 1, 118,
-       55, 0, 1137
+       55, 0, 1140
 };
-static int parser_action_row1141[] = {
+static int parser_action_row1144[] = {
        19,
-       -1, 3, 1140,
-       46, 0, 1264,
-       53, 0, 487,
-       64, 0, 488,
-       65, 0, 489,
-       66, 0, 490,
-       67, 0, 491,
-       68, 0, 492,
-       69, 0, 493,
-       70, 0, 494,
-       71, 0, 495,
-       72, 0, 496,
-       73, 0, 497,
-       74, 0, 498,
-       75, 0, 499,
-       76, 0, 500,
-       77, 0, 501,
-       78, 0, 502,
-       82, 0, 503
+       -1, 3, 1143,
+       46, 0, 1267,
+       53, 0, 486,
+       64, 0, 487,
+       65, 0, 488,
+       66, 0, 489,
+       67, 0, 490,
+       68, 0, 491,
+       69, 0, 492,
+       70, 0, 493,
+       71, 0, 494,
+       72, 0, 495,
+       73, 0, 496,
+       74, 0, 497,
+       75, 0, 498,
+       76, 0, 499,
+       77, 0, 500,
+       78, 0, 501,
+       82, 0, 502
 };
-static int parser_action_row1142[] = {
+static int parser_action_row1145[] = {
        1,
-       -1, 1, 388
+       -1, 1, 389
 };
-static int parser_action_row1143[] = {
+static int parser_action_row1146[] = {
        1,
-       -1, 1, 383
+       -1, 1, 384
 };
-static int parser_action_row1144[] = {
+static int parser_action_row1147[] = {
        1,
        -1, 1, 53
 };
-static int parser_action_row1145[] = {
+static int parser_action_row1148[] = {
        2,
        -1, 1, 150,
-       56, 0, 292
+       56, 0, 290
 };
-static int parser_action_row1146[] = {
+static int parser_action_row1149[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1147[] = {
+static int parser_action_row1150[] = {
        1,
-       -1, 1, 802
+       -1, 1, 803
 };
-static int parser_action_row1148[] = {
+static int parser_action_row1151[] = {
        2,
-       -1, 3, 1147,
-       54, 0, 1268
+       -1, 3, 1150,
+       54, 0, 1271
 };
-static int parser_action_row1149[] = {
+static int parser_action_row1152[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
-       55, 0, 1145
+       55, 0, 1148
 };
-static int parser_action_row1150[] = {
+static int parser_action_row1153[] = {
        1,
        -1, 1, 28
 };
-static int parser_action_row1151[] = {
+static int parser_action_row1154[] = {
        4,
        -1, 1, 42,
-       9, 0, 1271,
+       9, 0, 1274,
        13, 0, 27,
-       41, 0, 1029
+       41, 0, 1032
 };
-static int parser_action_row1152[] = {
+static int parser_action_row1155[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1153[] = {
+static int parser_action_row1156[] = {
        3,
        -1, 1, 42,
-       9, 0, 1273,
+       9, 0, 1276,
        13, 0, 27
 };
-static int parser_action_row1154[] = {
+static int parser_action_row1157[] = {
        3,
-       -1, 3, 1153,
-       47, 0, 344,
-       81, 0, 345
+       -1, 3, 1156,
+       47, 0, 342,
+       81, 0, 343
 };
-static int parser_action_row1155[] = {
+static int parser_action_row1158[] = {
        6,
-       -1, 3, 1154,
-       10, 0, 1275,
-       11, 0, 1276,
-       12, 0, 1277,
-       16, 0, 1278,
-       38, 0, 1279
+       -1, 3, 1157,
+       10, 0, 1278,
+       11, 0, 1279,
+       12, 0, 1280,
+       16, 0, 1281,
+       38, 0, 1282
 };
-static int parser_action_row1156[] = {
+static int parser_action_row1159[] = {
        24,
-       -1, 1, 747,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
-       41, 1, 358,
+       -1, 1, 748,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
+       41, 1, 359,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
+       83, 1, 359,
        84, 0, 50,
        85, 0, 51,
        86, 0, 52,
@@ -11800,208 +11814,208 @@ static int parser_action_row1156[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1157[] = {
+static int parser_action_row1160[] = {
        2,
-       -1, 1, 752,
-       49, 0, 175
+       -1, 1, 753,
+       49, 0, 174
 };
-static int parser_action_row1158[] = {
+static int parser_action_row1161[] = {
        2,
-       -1, 1, 749,
-       49, 0, 175
+       -1, 1, 750,
+       49, 0, 174
 };
-static int parser_action_row1159[] = {
+static int parser_action_row1162[] = {
        1,
-       -1, 1, 751
+       -1, 1, 752
 };
-static int parser_action_row1160[] = {
+static int parser_action_row1163[] = {
        2,
-       -1, 3, 1159,
-       11, 0, 1283
+       -1, 3, 1162,
+       11, 0, 1286
 };
-static int parser_action_row1161[] = {
+static int parser_action_row1164[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1162[] = {
+static int parser_action_row1165[] = {
        1,
-       -1, 1, 562
+       -1, 1, 563
 };
-static int parser_action_row1163[] = {
+static int parser_action_row1166[] = {
        1,
-       -1, 1, 745
+       -1, 1, 746
 };
-static int parser_action_row1164[] = {
+static int parser_action_row1167[] = {
        1,
-       -1, 1, 754
+       -1, 1, 755
 };
-static int parser_action_row1165[] = {
+static int parser_action_row1168[] = {
        1,
-       -1, 1, 756
+       -1, 1, 757
 };
-static int parser_action_row1166[] = {
+static int parser_action_row1169[] = {
        1,
-       -1, 1, 755
+       -1, 1, 756
 };
-static int parser_action_row1167[] = {
+static int parser_action_row1170[] = {
        1,
-       -1, 1, 757
+       -1, 1, 758
 };
-static int parser_action_row1168[] = {
+static int parser_action_row1171[] = {
        1,
-       -1, 1, 758
+       -1, 1, 759
 };
-static int parser_action_row1169[] = {
+static int parser_action_row1172[] = {
        3,
-       -1, 3, 1168,
-       0, 0, 83,
-       1, 0, 84
+       -1, 3, 1171,
+       0, 0, 82,
+       1, 0, 83
 };
-static int parser_action_row1170[] = {
+static int parser_action_row1173[] = {
        3,
-       -1, 3, 1169,
-       41, 0, 262,
-       83, 0, 1286
+       -1, 3, 1172,
+       41, 0, 260,
+       83, 0, 1289
 };
-static int parser_action_row1171[] = {
+static int parser_action_row1174[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
-static int parser_action_row1172[] = {
+static int parser_action_row1175[] = {
        1,
        -1, 1, 323
 };
-static int parser_action_row1173[] = {
+static int parser_action_row1176[] = {
        1,
-       -1, 1, 746
+       -1, 1, 747
 };
-static int parser_action_row1174[] = {
+static int parser_action_row1177[] = {
        1,
-       -1, 1, 563
+       -1, 1, 564
 };
-static int parser_action_row1175[] = {
+static int parser_action_row1178[] = {
        4,
-       -1, 1, 526,
-       53, 0, 209,
-       61, 0, 284,
-       63, 0, 1288
+       -1, 1, 527,
+       53, 0, 208,
+       61, 0, 282,
+       63, 0, 1291
 };
-static int parser_action_row1176[] = {
+static int parser_action_row1179[] = {
        3,
-       -1, 3, 1175,
-       0, 0, 83,
-       1, 0, 84
+       -1, 3, 1178,
+       0, 0, 82,
+       1, 0, 83
 };
-static int parser_action_row1177[] = {
+static int parser_action_row1180[] = {
        2,
-       -1, 1, 560,
-       55, 0, 1087
+       -1, 1, 561,
+       55, 0, 1090
 };
-static int parser_action_row1178[] = {
+static int parser_action_row1181[] = {
        1,
-       -1, 1, 564
+       -1, 1, 565
 };
-static int parser_action_row1179[] = {
+static int parser_action_row1182[] = {
        1,
        -1, 1, 30
 };
-static int parser_action_row1180[] = {
+static int parser_action_row1183[] = {
        3,
        -1, 1, 42,
-       9, 0, 1292,
+       9, 0, 1295,
        13, 0, 27
 };
-static int parser_action_row1181[] = {
+static int parser_action_row1184[] = {
        1,
        -1, 1, 34
 };
-static int parser_action_row1182[] = {
+static int parser_action_row1185[] = {
        4,
        -1, 1, 42,
-       9, 0, 1293,
+       9, 0, 1296,
        13, 0, 27,
-       41, 0, 1029
+       41, 0, 1032
 };
-static int parser_action_row1183[] = {
+static int parser_action_row1186[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1184[] = {
+static int parser_action_row1187[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1185[] = {
+static int parser_action_row1188[] = {
        1,
        -1, 1, 27
 };
-static int parser_action_row1186[] = {
+static int parser_action_row1189[] = {
        4,
        -1, 1, 42,
-       9, 0, 1297,
+       9, 0, 1300,
        13, 0, 27,
-       41, 0, 1029
+       41, 0, 1032
 };
-static int parser_action_row1187[] = {
+static int parser_action_row1190[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1188[] = {
+static int parser_action_row1191[] = {
        3,
        -1, 1, 42,
-       9, 0, 1299,
+       9, 0, 1302,
        13, 0, 27
 };
-static int parser_action_row1189[] = {
+static int parser_action_row1192[] = {
        2,
-       -1, 3, 1188,
-       45, 0, 1300
+       -1, 3, 1191,
+       45, 0, 1303
 };
-static int parser_action_row1190[] = {
+static int parser_action_row1193[] = {
        2,
-       -1, 3, 1189,
-       52, 0, 1301
+       -1, 3, 1192,
+       52, 0, 1304
 };
-static int parser_action_row1191[] = {
+static int parser_action_row1194[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1192[] = {
+static int parser_action_row1195[] = {
        2,
-       -1, 3, 1191,
-       45, 0, 1303
+       -1, 3, 1194,
+       45, 0, 1306
 };
-static int parser_action_row1193[] = {
+static int parser_action_row1196[] = {
        2,
-       -1, 3, 1192,
-       52, 0, 1304
+       -1, 3, 1195,
+       52, 0, 1307
 };
-static int parser_action_row1194[] = {
+static int parser_action_row1197[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -12011,37 +12025,37 @@ static int parser_action_row1194[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1195[] = {
+static int parser_action_row1198[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1196[] = {
+static int parser_action_row1199[] = {
        33,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 661,
-       12, 0, 662,
-       15, 0, 663,
-       16, 0, 664,
-       22, 0, 665,
-       24, 0, 666,
-       25, 0, 667,
-       26, 0, 668,
-       27, 0, 669,
-       33, 0, 670,
-       34, 0, 671,
-       35, 0, 672,
-       36, 0, 673,
-       37, 0, 674,
+       9, 0, 663,
+       12, 0, 664,
+       15, 0, 665,
+       16, 0, 666,
+       22, 0, 667,
+       24, 0, 668,
+       25, 0, 669,
+       26, 0, 670,
+       27, 0, 671,
+       33, 0, 672,
+       34, 0, 673,
+       35, 0, 674,
+       36, 0, 675,
+       37, 0, 676,
        38, 0, 40,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       50, 0, 675,
+       50, 0, 677,
        51, 0, 46,
        53, 0, 47,
        81, 0, 48,
@@ -12053,30 +12067,30 @@ static int parser_action_row1196[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1197[] = {
+static int parser_action_row1200[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 762,
-       12, 0, 662,
-       15, 0, 663,
-       16, 0, 664,
-       22, 0, 665,
-       25, 0, 667,
-       26, 0, 668,
-       27, 0, 669,
-       33, 0, 670,
-       34, 0, 671,
-       35, 0, 672,
-       36, 0, 673,
-       37, 0, 674,
+       9, 0, 765,
+       12, 0, 664,
+       15, 0, 665,
+       16, 0, 666,
+       22, 0, 667,
+       25, 0, 669,
+       26, 0, 670,
+       27, 0, 671,
+       33, 0, 672,
+       34, 0, 673,
+       35, 0, 674,
+       36, 0, 675,
+       37, 0, 676,
        38, 0, 40,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       50, 0, 675,
+       50, 0, 677,
        51, 0, 46,
        53, 0, 47,
        81, 0, 48,
@@ -12088,134 +12102,134 @@ static int parser_action_row1197[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1198[] = {
+static int parser_action_row1201[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1199[] = {
+static int parser_action_row1202[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1200[] = {
+static int parser_action_row1203[] = {
        1,
-       -1, 1, 682
+       -1, 1, 683
 };
-static int parser_action_row1201[] = {
+static int parser_action_row1204[] = {
        2,
        -1, 1, 152,
-       24, 1, 626
+       24, 1, 627
 };
-static int parser_action_row1202[] = {
+static int parser_action_row1205[] = {
        2,
        -1, 1, 151,
-       24, 1, 625
+       24, 1, 626
 };
-static int parser_action_row1203[] = {
+static int parser_action_row1206[] = {
        1,
-       -1, 1, 655
+       -1, 1, 656
 };
-static int parser_action_row1204[] = {
+static int parser_action_row1207[] = {
        2,
        -1, 1, 180,
-       24, 1, 647
+       24, 1, 648
 };
-static int parser_action_row1205[] = {
+static int parser_action_row1208[] = {
        4,
        -1, 1, 267,
-       58, 0, 1312,
-       59, 0, 371,
-       60, 0, 372
+       58, 0, 1315,
+       59, 0, 370,
+       60, 0, 371
 };
-static int parser_action_row1206[] = {
+static int parser_action_row1209[] = {
        4,
        -1, 1, 269,
-       58, 0, 1314,
-       59, 0, 371,
-       60, 0, 372
+       58, 0, 1317,
+       59, 0, 370,
+       60, 0, 371
 };
-static int parser_action_row1207[] = {
+static int parser_action_row1210[] = {
        2,
        -1, 1, 177,
-       24, 1, 644
+       24, 1, 645
 };
-static int parser_action_row1208[] = {
+static int parser_action_row1211[] = {
        23,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 385,
-       65, 0, 118,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 384,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row1209[] = {
+static int parser_action_row1212[] = {
        23,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 385,
-       65, 0, 118,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 384,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row1210[] = {
+static int parser_action_row1213[] = {
        3,
-       -1, 1, 356,
-       12, 0, 1318,
-       82, 0, 389
+       -1, 1, 357,
+       12, 0, 1321,
+       82, 0, 388
 };
-static int parser_action_row1211[] = {
+static int parser_action_row1214[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -12225,79 +12239,79 @@ static int parser_action_row1211[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1212[] = {
+static int parser_action_row1215[] = {
        1,
        -1, 1, 223
 };
-static int parser_action_row1213[] = {
+static int parser_action_row1216[] = {
        2,
-       -1, 3, 1212,
-       49, 0, 175
+       -1, 3, 1215,
+       49, 0, 174
 };
-static int parser_action_row1214[] = {
+static int parser_action_row1217[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1215[] = {
+static int parser_action_row1218[] = {
        1,
-       -1, 1, 455
+       -1, 1, 456
 };
-static int parser_action_row1216[] = {
+static int parser_action_row1219[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1217[] = {
+static int parser_action_row1220[] = {
        2,
-       -1, 3, 1216,
-       56, 0, 1323
+       -1, 3, 1219,
+       56, 0, 1326
 };
-static int parser_action_row1218[] = {
+static int parser_action_row1221[] = {
        5,
-       -1, 1, 358,
+       -1, 1, 359,
        12, 0, 590,
        46, 0, 508,
        81, 0, 48,
        82, 0, 49
 };
-static int parser_action_row1219[] = {
+static int parser_action_row1222[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row1220[] = {
+static int parser_action_row1223[] = {
        35,
-       -1, 1, 358,
-       12, 0, 155,
+       -1, 1, 359,
+       12, 0, 154,
        15, 0, 28,
        16, 0, 29,
-       22, 0, 156,
+       22, 0, 155,
        25, 0, 31,
        26, 0, 32,
        27, 0, 33,
-       31, 0, 157,
-       33, 0, 928,
-       34, 0, 929,
-       35, 0, 930,
-       36, 0, 931,
+       31, 0, 156,
+       33, 0, 931,
+       34, 0, 932,
+       35, 0, 933,
+       36, 0, 934,
        37, 0, 39,
-       38, 0, 158,
-       40, 0, 159,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       47, 0, 344,
-       48, 0, 160,
-       50, 0, 932,
+       47, 0, 342,
+       48, 0, 159,
+       50, 0, 935,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
-       80, 0, 184,
-       81, 0, 933,
+       65, 0, 160,
+       80, 0, 183,
+       81, 0, 936,
        82, 0, 49,
        84, 0, 50,
        85, 0, 51,
@@ -12306,445 +12320,445 @@ static int parser_action_row1220[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1221[] = {
+static int parser_action_row1224[] = {
        1,
-       -1, 1, 821
+       -1, 1, 822
 };
-static int parser_action_row1222[] = {
+static int parser_action_row1225[] = {
        1,
        -1, 1, 144
 };
-static int parser_action_row1223[] = {
+static int parser_action_row1226[] = {
        2,
-       -1, 3, 1222,
-       23, 0, 1327
+       -1, 3, 1225,
+       23, 0, 1330
 };
-static int parser_action_row1224[] = {
+static int parser_action_row1227[] = {
        2,
-       -1, 1, 557,
-       80, 0, 471
+       -1, 1, 558,
+       80, 0, 470
 };
-static int parser_action_row1225[] = {
+static int parser_action_row1228[] = {
        1,
-       -1, 1, 565
+       -1, 1, 566
 };
-static int parser_action_row1226[] = {
+static int parser_action_row1229[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1227[] = {
+static int parser_action_row1230[] = {
        1,
-       -1, 1, 425
+       -1, 1, 426
 };
-static int parser_action_row1228[] = {
+static int parser_action_row1231[] = {
        2,
-       -1, 3, 1227,
-       63, 0, 1225
+       -1, 3, 1230,
+       63, 0, 1228
 };
-static int parser_action_row1229[] = {
+static int parser_action_row1232[] = {
        5,
-       -1, 1, 358,
-       12, 0, 1254,
-       46, 0, 1255,
+       -1, 1, 359,
+       12, 0, 1257,
+       46, 0, 1258,
        81, 0, 48,
        82, 0, 49
 };
-static int parser_action_row1230[] = {
+static int parser_action_row1233[] = {
        2,
-       -1, 3, 1229,
-       52, 0, 1331
+       -1, 3, 1232,
+       52, 0, 1334
 };
-static int parser_action_row1231[] = {
+static int parser_action_row1234[] = {
        1,
        -1, 1, 292
 };
-static int parser_action_row1232[] = {
+static int parser_action_row1235[] = {
        1,
        -1, 1, 291
 };
-static int parser_action_row1233[] = {
+static int parser_action_row1236[] = {
        1,
-       -1, 1, 396
+       -1, 1, 397
 };
-static int parser_action_row1234[] = {
+static int parser_action_row1237[] = {
        20,
-       -1, 1, 358,
-       12, 0, 816,
-       31, 0, 818,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       31, 0, 821,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1235[] = {
+static int parser_action_row1238[] = {
        1,
-       -1, 1, 395
+       -1, 1, 396
 };
-static int parser_action_row1236[] = {
+static int parser_action_row1239[] = {
        1,
-       -1, 1, 398
+       -1, 1, 399
 };
-static int parser_action_row1237[] = {
+static int parser_action_row1240[] = {
        3,
-       -1, 1, 406,
-       64, 0, 982,
-       65, 0, 983
+       -1, 1, 407,
+       64, 0, 985,
+       65, 0, 986
 };
-static int parser_action_row1238[] = {
+static int parser_action_row1241[] = {
        3,
-       -1, 1, 409,
-       64, 0, 982,
-       65, 0, 983
+       -1, 1, 410,
+       64, 0, 985,
+       65, 0, 986
 };
-static int parser_action_row1239[] = {
+static int parser_action_row1242[] = {
        2,
-       -1, 3, 1238,
-       81, 0, 1333
+       -1, 3, 1241,
+       81, 0, 1336
 };
-static int parser_action_row1240[] = {
+static int parser_action_row1243[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row1241[] = {
+static int parser_action_row1244[] = {
        1,
-       -1, 1, 411
-};
-static int parser_action_row1242[] = {
-       4,
-       -1, 1, 413,
-       66, 0, 991,
-       68, 0, 992,
-       69, 0, 993
+       -1, 1, 412
 };
-static int parser_action_row1243[] = {
+static int parser_action_row1245[] = {
        4,
        -1, 1, 414,
-       66, 0, 991,
-       68, 0, 992,
-       69, 0, 993
+       66, 0, 994,
+       68, 0, 995,
+       69, 0, 996
 };
-static int parser_action_row1244[] = {
-       3,
-       -1, 1, 402,
-       64, 0, 982,
-       65, 0, 983
+static int parser_action_row1246[] = {
+       4,
+       -1, 1, 415,
+       66, 0, 994,
+       68, 0, 995,
+       69, 0, 996
 };
-static int parser_action_row1245[] = {
+static int parser_action_row1247[] = {
        3,
        -1, 1, 403,
-       64, 0, 982,
-       65, 0, 983
+       64, 0, 985,
+       65, 0, 986
 };
-static int parser_action_row1246[] = {
+static int parser_action_row1248[] = {
        3,
        -1, 1, 404,
-       64, 0, 982,
-       65, 0, 983
+       64, 0, 985,
+       65, 0, 986
 };
-static int parser_action_row1247[] = {
+static int parser_action_row1249[] = {
        3,
        -1, 1, 405,
-       64, 0, 982,
-       65, 0, 983
+       64, 0, 985,
+       65, 0, 986
 };
-static int parser_action_row1248[] = {
+static int parser_action_row1250[] = {
        3,
-       -1, 1, 407,
-       64, 0, 982,
-       65, 0, 983
+       -1, 1, 406,
+       64, 0, 985,
+       65, 0, 986
 };
-static int parser_action_row1249[] = {
+static int parser_action_row1251[] = {
        3,
        -1, 1, 408,
-       64, 0, 982,
-       65, 0, 983
+       64, 0, 985,
+       65, 0, 986
 };
-static int parser_action_row1250[] = {
+static int parser_action_row1252[] = {
        3,
-       -1, 1, 410,
-       64, 0, 982,
-       65, 0, 983
+       -1, 1, 409,
+       64, 0, 985,
+       65, 0, 986
 };
-static int parser_action_row1251[] = {
-       1,
-       -1, 1, 416
+static int parser_action_row1253[] = {
+       3,
+       -1, 1, 411,
+       64, 0, 985,
+       65, 0, 986
 };
-static int parser_action_row1252[] = {
+static int parser_action_row1254[] = {
        1,
        -1, 1, 417
 };
-static int parser_action_row1253[] = {
+static int parser_action_row1255[] = {
        1,
        -1, 1, 418
 };
-static int parser_action_row1254[] = {
+static int parser_action_row1256[] = {
        1,
-       -1, 1, 420
+       -1, 1, 419
 };
-static int parser_action_row1255[] = {
+static int parser_action_row1257[] = {
+       1,
+       -1, 1, 421
+};
+static int parser_action_row1258[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
-static int parser_action_row1256[] = {
+static int parser_action_row1259[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1257[] = {
+static int parser_action_row1260[] = {
        2,
-       -1, 3, 1256,
-       83, 0, 1337
+       -1, 3, 1259,
+       83, 0, 1340
 };
-static int parser_action_row1258[] = {
+static int parser_action_row1261[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
-static int parser_action_row1259[] = {
+static int parser_action_row1262[] = {
        4,
-       -1, 3, 1258,
+       -1, 3, 1261,
        6, 0, 606,
        17, 0, 607,
        82, 0, 608
 };
-static int parser_action_row1260[] = {
+static int parser_action_row1263[] = {
        1,
        -1, 1, 116
 };
-static int parser_action_row1261[] = {
+static int parser_action_row1264[] = {
        1,
        -1, 1, 104
 };
-static int parser_action_row1262[] = {
+static int parser_action_row1265[] = {
        1,
        -1, 1, 111
 };
-static int parser_action_row1263[] = {
+static int parser_action_row1266[] = {
        21,
-       -1, 3, 1262,
-       41, 0, 1010,
-       47, 0, 344,
-       53, 0, 487,
-       64, 0, 488,
-       65, 0, 489,
-       66, 0, 490,
-       67, 0, 491,
-       68, 0, 492,
-       69, 0, 493,
-       70, 0, 494,
-       71, 0, 495,
-       72, 0, 496,
-       73, 0, 497,
-       74, 0, 498,
-       75, 0, 499,
-       76, 0, 500,
-       77, 0, 501,
-       78, 0, 502,
-       81, 0, 345,
-       82, 0, 503
+       -1, 3, 1265,
+       41, 0, 1013,
+       47, 0, 342,
+       53, 0, 486,
+       64, 0, 487,
+       65, 0, 488,
+       66, 0, 489,
+       67, 0, 490,
+       68, 0, 491,
+       69, 0, 492,
+       70, 0, 493,
+       71, 0, 494,
+       72, 0, 495,
+       73, 0, 496,
+       74, 0, 497,
+       75, 0, 498,
+       76, 0, 499,
+       77, 0, 500,
+       78, 0, 501,
+       81, 0, 343,
+       82, 0, 502
 };
-static int parser_action_row1264[] = {
+static int parser_action_row1267[] = {
        1,
-       -1, 1, 807
+       -1, 1, 808
 };
-static int parser_action_row1265[] = {
+static int parser_action_row1268[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1266[] = {
+static int parser_action_row1269[] = {
        1,
        -1, 1, 125
 };
-static int parser_action_row1267[] = {
+static int parser_action_row1270[] = {
        1,
        -1, 1, 54
 };
-static int parser_action_row1268[] = {
+static int parser_action_row1271[] = {
        2,
-       -1, 3, 1267,
-       81, 0, 1021
+       -1, 3, 1270,
+       81, 0, 1024
 };
-static int parser_action_row1269[] = {
+static int parser_action_row1272[] = {
        1,
        -1, 1, 49
 };
-static int parser_action_row1270[] = {
+static int parser_action_row1273[] = {
        1,
-       -1, 1, 803
+       -1, 1, 804
 };
-static int parser_action_row1271[] = {
+static int parser_action_row1274[] = {
        2,
-       -1, 3, 1270,
-       54, 0, 1343
+       -1, 3, 1273,
+       54, 0, 1346
 };
-static int parser_action_row1272[] = {
+static int parser_action_row1275[] = {
        1,
        -1, 1, 32
 };
-static int parser_action_row1273[] = {
+static int parser_action_row1276[] = {
        3,
        -1, 1, 42,
-       9, 0, 1344,
+       9, 0, 1347,
        13, 0, 27
 };
-static int parser_action_row1274[] = {
+static int parser_action_row1277[] = {
        1,
        -1, 1, 36
 };
-static int parser_action_row1275[] = {
+static int parser_action_row1278[] = {
        2,
        -1, 1, 77,
-       14, 0, 725
+       14, 0, 728
 };
-static int parser_action_row1276[] = {
+static int parser_action_row1279[] = {
        18,
-       -1, 3, 1275,
-       53, 0, 487,
-       64, 0, 488,
-       65, 0, 489,
-       66, 0, 490,
-       67, 0, 491,
-       68, 0, 492,
-       69, 0, 493,
-       70, 0, 494,
-       71, 0, 495,
-       72, 0, 496,
-       73, 0, 497,
-       74, 0, 498,
-       75, 0, 499,
-       76, 0, 500,
-       77, 0, 501,
-       78, 0, 502,
-       82, 0, 503
+       -1, 3, 1278,
+       53, 0, 486,
+       64, 0, 487,
+       65, 0, 488,
+       66, 0, 489,
+       67, 0, 490,
+       68, 0, 491,
+       69, 0, 492,
+       70, 0, 493,
+       71, 0, 494,
+       72, 0, 495,
+       73, 0, 496,
+       74, 0, 497,
+       75, 0, 498,
+       76, 0, 499,
+       77, 0, 500,
+       78, 0, 501,
+       82, 0, 502
 };
-static int parser_action_row1277[] = {
+static int parser_action_row1280[] = {
        2,
-       -1, 3, 1276,
-       81, 0, 1347
+       -1, 3, 1279,
+       81, 0, 1350
 };
-static int parser_action_row1278[] = {
+static int parser_action_row1281[] = {
        22,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
-       51, 0, 627,
-       53, 0, 487,
-       56, 0, 628,
-       64, 0, 488,
-       65, 0, 489,
-       66, 0, 490,
-       67, 0, 491,
-       68, 0, 492,
-       69, 0, 493,
-       70, 0, 494,
-       71, 0, 495,
-       72, 0, 496,
-       73, 0, 497,
-       74, 0, 498,
-       75, 0, 499,
-       76, 0, 500,
-       77, 0, 501,
-       78, 0, 502,
-       82, 0, 503
+       51, 0, 628,
+       53, 0, 486,
+       56, 0, 629,
+       64, 0, 487,
+       65, 0, 488,
+       66, 0, 489,
+       67, 0, 490,
+       68, 0, 491,
+       69, 0, 492,
+       70, 0, 493,
+       71, 0, 494,
+       72, 0, 495,
+       73, 0, 496,
+       74, 0, 497,
+       75, 0, 498,
+       76, 0, 499,
+       77, 0, 500,
+       78, 0, 501,
+       82, 0, 502
 };
-static int parser_action_row1279[] = {
+static int parser_action_row1282[] = {
        2,
-       -1, 3, 1278,
-       82, 0, 1350
+       -1, 3, 1281,
+       82, 0, 1353
 };
-static int parser_action_row1280[] = {
+static int parser_action_row1283[] = {
        22,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
-       51, 0, 627,
-       53, 0, 487,
-       56, 0, 628,
-       64, 0, 488,
-       65, 0, 489,
-       66, 0, 490,
-       67, 0, 491,
-       68, 0, 492,
-       69, 0, 493,
-       70, 0, 494,
-       71, 0, 495,
-       72, 0, 496,
-       73, 0, 497,
-       74, 0, 498,
-       75, 0, 499,
-       76, 0, 500,
-       77, 0, 501,
-       78, 0, 502,
-       82, 0, 503
+       51, 0, 628,
+       53, 0, 486,
+       56, 0, 629,
+       64, 0, 487,
+       65, 0, 488,
+       66, 0, 489,
+       67, 0, 490,
+       68, 0, 491,
+       69, 0, 492,
+       70, 0, 493,
+       71, 0, 494,
+       72, 0, 495,
+       73, 0, 496,
+       74, 0, 497,
+       75, 0, 498,
+       76, 0, 499,
+       77, 0, 500,
+       78, 0, 501,
+       82, 0, 502
 };
-static int parser_action_row1281[] = {
+static int parser_action_row1284[] = {
        1,
-       -1, 1, 748
+       -1, 1, 749
 };
-static int parser_action_row1282[] = {
+static int parser_action_row1285[] = {
        1,
-       -1, 1, 753
+       -1, 1, 754
 };
-static int parser_action_row1283[] = {
+static int parser_action_row1286[] = {
        1,
-       -1, 1, 750
+       -1, 1, 751
 };
-static int parser_action_row1284[] = {
+static int parser_action_row1287[] = {
        3,
-       -1, 3, 1283,
-       47, 0, 344,
-       81, 0, 345
+       -1, 3, 1286,
+       47, 0, 342,
+       81, 0, 343
 };
-static int parser_action_row1285[] = {
+static int parser_action_row1288[] = {
        35,
-       -1, 1, 358,
-       12, 0, 155,
+       -1, 1, 359,
+       12, 0, 154,
        15, 0, 28,
        16, 0, 29,
-       22, 0, 156,
+       22, 0, 155,
        25, 0, 31,
        26, 0, 32,
        27, 0, 33,
-       31, 0, 157,
-       33, 0, 928,
-       34, 0, 929,
-       35, 0, 930,
-       36, 0, 931,
+       31, 0, 156,
+       33, 0, 931,
+       34, 0, 932,
+       35, 0, 933,
+       36, 0, 934,
        37, 0, 39,
-       38, 0, 158,
-       40, 0, 159,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       47, 0, 344,
-       48, 0, 160,
-       50, 0, 932,
+       47, 0, 342,
+       48, 0, 159,
+       50, 0, 935,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
-       80, 0, 184,
-       81, 0, 933,
+       65, 0, 160,
+       80, 0, 183,
+       81, 0, 936,
        82, 0, 49,
        84, 0, 50,
        85, 0, 51,
@@ -12753,150 +12767,150 @@ static int parser_action_row1285[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1286[] = {
+static int parser_action_row1289[] = {
        1,
        -1, 1, 324
 };
-static int parser_action_row1287[] = {
+static int parser_action_row1290[] = {
        4,
-       -1, 1, 532,
-       58, 0, 1355,
-       59, 0, 371,
-       60, 0, 372
+       -1, 1, 533,
+       58, 0, 1358,
+       59, 0, 370,
+       60, 0, 371
 };
-static int parser_action_row1288[] = {
+static int parser_action_row1291[] = {
        4,
-       -1, 1, 534,
-       58, 0, 1357,
-       59, 0, 371,
-       60, 0, 372
+       -1, 1, 535,
+       58, 0, 1360,
+       59, 0, 370,
+       60, 0, 371
 };
-static int parser_action_row1289[] = {
+static int parser_action_row1292[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1290[] = {
+static int parser_action_row1293[] = {
        4,
-       -1, 1, 538,
-       58, 0, 1360,
-       59, 0, 371,
-       60, 0, 372
+       -1, 1, 539,
+       58, 0, 1363,
+       59, 0, 370,
+       60, 0, 371
 };
-static int parser_action_row1291[] = {
+static int parser_action_row1294[] = {
        1,
        -1, 1, 327
 };
-static int parser_action_row1292[] = {
+static int parser_action_row1295[] = {
        2,
-       -1, 1, 561,
-       55, 0, 1087
+       -1, 1, 562,
+       55, 0, 1090
 };
-static int parser_action_row1293[] = {
+static int parser_action_row1296[] = {
        1,
        -1, 1, 38
 };
-static int parser_action_row1294[] = {
+static int parser_action_row1297[] = {
        1,
        -1, 1, 29
 };
-static int parser_action_row1295[] = {
+static int parser_action_row1298[] = {
        4,
        -1, 1, 42,
-       9, 0, 1362,
+       9, 0, 1365,
        13, 0, 27,
-       41, 0, 1029
+       41, 0, 1032
 };
-static int parser_action_row1296[] = {
+static int parser_action_row1299[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1297[] = {
+static int parser_action_row1300[] = {
        3,
        -1, 1, 42,
-       9, 0, 1364,
+       9, 0, 1367,
        13, 0, 27
 };
-static int parser_action_row1298[] = {
+static int parser_action_row1301[] = {
        1,
        -1, 1, 31
 };
-static int parser_action_row1299[] = {
+static int parser_action_row1302[] = {
        3,
        -1, 1, 42,
-       9, 0, 1365,
+       9, 0, 1368,
        13, 0, 27
 };
-static int parser_action_row1300[] = {
+static int parser_action_row1303[] = {
        1,
        -1, 1, 35
 };
-static int parser_action_row1301[] = {
+static int parser_action_row1304[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1302[] = {
+static int parser_action_row1305[] = {
        1,
        -1, 1, 276
 };
-static int parser_action_row1303[] = {
+static int parser_action_row1306[] = {
        20,
-       -1, 1, 358,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       65, 0, 118,
+       -1, 1, 359,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row1304[] = {
+static int parser_action_row1307[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1305[] = {
+static int parser_action_row1308[] = {
        1,
-       -1, 1, 540
+       -1, 1, 541
 };
-static int parser_action_row1306[] = {
+static int parser_action_row1309[] = {
        1,
-       -1, 1, 658
+       -1, 1, 659
 };
-static int parser_action_row1307[] = {
+static int parser_action_row1310[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -12906,42 +12920,42 @@ static int parser_action_row1307[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1308[] = {
+static int parser_action_row1311[] = {
        2,
-       -1, 3, 1307,
-       24, 0, 1370
+       -1, 3, 1310,
+       24, 0, 1373
 };
-static int parser_action_row1309[] = {
+static int parser_action_row1312[] = {
        1,
-       -1, 1, 676
+       -1, 1, 677
 };
-static int parser_action_row1310[] = {
+static int parser_action_row1313[] = {
        2,
-       -1, 3, 1309,
-       49, 0, 175
+       -1, 3, 1312,
+       49, 0, 174
 };
-static int parser_action_row1311[] = {
+static int parser_action_row1314[] = {
        3,
-       -1, 3, 1310,
-       52, 0, 1372,
+       -1, 3, 1313,
+       52, 0, 1375,
        55, 0, 566
 };
-static int parser_action_row1312[] = {
+static int parser_action_row1315[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -12951,22 +12965,22 @@ static int parser_action_row1312[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1313[] = {
+static int parser_action_row1316[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -12976,22 +12990,22 @@ static int parser_action_row1313[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1314[] = {
+static int parser_action_row1317[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -13001,22 +13015,22 @@ static int parser_action_row1314[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1315[] = {
+static int parser_action_row1318[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -13026,22 +13040,22 @@ static int parser_action_row1315[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1316[] = {
+static int parser_action_row1319[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -13051,68 +13065,68 @@ static int parser_action_row1316[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1317[] = {
+static int parser_action_row1320[] = {
        2,
        -1, 1, 182,
-       24, 1, 649
+       24, 1, 650
 };
-static int parser_action_row1318[] = {
+static int parser_action_row1321[] = {
        2,
        -1, 1, 184,
-       24, 1, 651
+       24, 1, 652
 };
-static int parser_action_row1319[] = {
+static int parser_action_row1322[] = {
        23,
        -1, 1, 344,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 358,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       51, 0, 385,
-       65, 0, 118,
+       12, 0, 106,
+       22, 0, 107,
+       31, 0, 108,
+       38, 0, 109,
+       40, 0, 110,
+       41, 1, 359,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       48, 0, 115,
+       51, 0, 384,
+       65, 0, 117,
        81, 0, 48,
        82, 0, 49,
-       83, 1, 358,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       83, 1, 359,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row1320[] = {
+static int parser_action_row1323[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1321[] = {
+static int parser_action_row1324[] = {
        1,
        -1, 1, 221
 };
-static int parser_action_row1322[] = {
+static int parser_action_row1325[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -13122,27 +13136,27 @@ static int parser_action_row1322[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1323[] = {
+static int parser_action_row1326[] = {
        2,
-       -1, 3, 1322,
-       52, 0, 1381
+       -1, 3, 1325,
+       52, 0, 1384
 };
-static int parser_action_row1324[] = {
+static int parser_action_row1327[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -13152,215 +13166,215 @@ static int parser_action_row1324[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1325[] = {
+static int parser_action_row1328[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
-static int parser_action_row1326[] = {
+static int parser_action_row1329[] = {
        1,
        -1, 1, 308
 };
-static int parser_action_row1327[] = {
+static int parser_action_row1330[] = {
        1,
        -1, 1, 330
 };
-static int parser_action_row1328[] = {
+static int parser_action_row1331[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1329[] = {
+static int parser_action_row1332[] = {
        1,
-       -1, 1, 566
+       -1, 1, 567
 };
-static int parser_action_row1330[] = {
+static int parser_action_row1333[] = {
        3,
-       -1, 3, 1329,
+       -1, 3, 1332,
        81, 0, 48,
        82, 0, 49
 };
-static int parser_action_row1331[] = {
+static int parser_action_row1334[] = {
        2,
-       -1, 3, 1330,
-       83, 0, 1385
+       -1, 3, 1333,
+       83, 0, 1388
 };
-static int parser_action_row1332[] = {
+static int parser_action_row1335[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row1333[] = {
+static int parser_action_row1336[] = {
        1,
-       -1, 1, 397
+       -1, 1, 398
 };
-static int parser_action_row1334[] = {
+static int parser_action_row1337[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row1335[] = {
+static int parser_action_row1338[] = {
        1,
-       -1, 1, 389
+       -1, 1, 390
 };
-static int parser_action_row1336[] = {
+static int parser_action_row1339[] = {
        1,
-       -1, 1, 434
+       -1, 1, 435
 };
-static int parser_action_row1337[] = {
+static int parser_action_row1340[] = {
        3,
-       -1, 3, 1336,
-       31, 0, 1388,
-       51, 0, 1389
+       -1, 3, 1339,
+       31, 0, 1391,
+       51, 0, 1392
 };
-static int parser_action_row1338[] = {
+static int parser_action_row1341[] = {
        1,
-       -1, 1, 429
+       -1, 1, 430
 };
-static int parser_action_row1339[] = {
+static int parser_action_row1342[] = {
        1,
-       -1, 1, 431
+       -1, 1, 432
 };
-static int parser_action_row1340[] = {
+static int parser_action_row1343[] = {
        36,
-       -1, 1, 358,
-       0, 0, 83,
-       1, 0, 84,
-       12, 0, 107,
+       -1, 1, 359,
+       0, 0, 82,
+       1, 0, 83,
+       12, 0, 106,
        15, 0, 28,
        16, 0, 29,
-       22, 0, 108,
+       22, 0, 107,
        25, 0, 31,
        26, 0, 32,
        27, 0, 33,
-       31, 0, 109,
-       33, 0, 1155,
-       34, 0, 1156,
-       35, 0, 1157,
-       36, 0, 1158,
+       31, 0, 108,
+       33, 0, 1158,
+       34, 0, 1159,
+       35, 0, 1160,
+       36, 0, 1161,
        37, 0, 39,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       47, 0, 344,
-       48, 0, 116,
-       50, 0, 1159,
-       51, 0, 1390,
-       65, 0, 118,
-       80, 0, 184,
-       81, 0, 933,
+       38, 0, 109,
+       40, 0, 110,
+       42, 0, 111,
+       43, 0, 112,
+       44, 0, 113,
+       45, 0, 114,
+       47, 0, 342,
+       48, 0, 115,
+       50, 0, 1162,
+       51, 0, 1393,
+       65, 0, 117,
+       80, 0, 183,
+       81, 0, 936,
        82, 0, 49,
-       84, 0, 119,
-       85, 0, 120,
-       86, 0, 121,
-       87, 0, 122,
+       84, 0, 118,
+       85, 0, 119,
+       86, 0, 120,
+       87, 0, 121,
        88, 0, 54,
-       91, 0, 123
+       91, 0, 122
 };
-static int parser_action_row1341[] = {
+static int parser_action_row1344[] = {
        1,
        -1, 1, 120
 };
-static int parser_action_row1342[] = {
+static int parser_action_row1345[] = {
        5,
-       -1, 3, 1341,
-       31, 0, 1394,
-       47, 0, 1395,
-       51, 0, 1396,
-       81, 0, 345
+       -1, 3, 1344,
+       31, 0, 1397,
+       47, 0, 1398,
+       51, 0, 1399,
+       81, 0, 343
 };
-static int parser_action_row1343[] = {
+static int parser_action_row1346[] = {
        1,
        -1, 1, 52
 };
-static int parser_action_row1344[] = {
+static int parser_action_row1347[] = {
        1,
        -1, 1, 50
 };
-static int parser_action_row1345[] = {
+static int parser_action_row1348[] = {
        1,
        -1, 1, 40
 };
-static int parser_action_row1346[] = {
+static int parser_action_row1349[] = {
        1,
        -1, 1, 55
 };
-static int parser_action_row1347[] = {
+static int parser_action_row1350[] = {
        5,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
-       51, 0, 627,
-       56, 0, 628
+       51, 0, 628,
+       56, 0, 629
 };
-static int parser_action_row1348[] = {
+static int parser_action_row1351[] = {
        2,
-       -1, 3, 1347,
-       56, 0, 628
+       -1, 3, 1350,
+       56, 0, 629
 };
-static int parser_action_row1349[] = {
+static int parser_action_row1352[] = {
        5,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
-       51, 0, 627,
-       56, 0, 628
+       51, 0, 628,
+       56, 0, 629
 };
-static int parser_action_row1350[] = {
+static int parser_action_row1353[] = {
        3,
-       -1, 3, 1349,
-       14, 0, 1401,
-       15, 0, 1402
+       -1, 3, 1352,
+       14, 0, 1404,
+       15, 0, 1405
 };
-static int parser_action_row1351[] = {
+static int parser_action_row1354[] = {
        2,
        -1, 1, 150,
-       56, 0, 292
+       56, 0, 290
 };
-static int parser_action_row1352[] = {
+static int parser_action_row1355[] = {
        5,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
-       51, 0, 627,
-       56, 0, 628
+       51, 0, 628,
+       56, 0, 629
 };
-static int parser_action_row1353[] = {
+static int parser_action_row1356[] = {
        3,
        -1, 1, 119,
-       4, 0, 733,
-       14, 0, 734
+       4, 0, 736,
+       14, 0, 737
 };
-static int parser_action_row1354[] = {
+static int parser_action_row1357[] = {
        2,
-       -1, 3, 1353,
-       56, 0, 1409
+       -1, 3, 1356,
+       56, 0, 1412
 };
-static int parser_action_row1355[] = {
+static int parser_action_row1358[] = {
        2,
-       -1, 3, 1354,
-       52, 0, 1410
+       -1, 3, 1357,
+       52, 0, 1413
 };
-static int parser_action_row1356[] = {
+static int parser_action_row1359[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -13370,22 +13384,22 @@ static int parser_action_row1356[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1357[] = {
+static int parser_action_row1360[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -13395,22 +13409,22 @@ static int parser_action_row1357[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1358[] = {
+static int parser_action_row1361[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -13420,22 +13434,22 @@ static int parser_action_row1358[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1359[] = {
+static int parser_action_row1362[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -13445,30 +13459,30 @@ static int parser_action_row1359[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1360[] = {
+static int parser_action_row1363[] = {
        5,
-       -1, 1, 358,
+       -1, 1, 359,
        12, 0, 553,
        46, 0, 554,
        81, 0, 48,
        82, 0, 49
 };
-static int parser_action_row1361[] = {
+static int parser_action_row1364[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -13478,22 +13492,22 @@ static int parser_action_row1361[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1362[] = {
+static int parser_action_row1365[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -13503,66 +13517,66 @@ static int parser_action_row1362[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1363[] = {
+static int parser_action_row1366[] = {
        1,
        -1, 1, 33
 };
-static int parser_action_row1364[] = {
+static int parser_action_row1367[] = {
        3,
        -1, 1, 42,
-       9, 0, 1419,
+       9, 0, 1422,
        13, 0, 27
 };
-static int parser_action_row1365[] = {
+static int parser_action_row1368[] = {
        1,
        -1, 1, 37
 };
-static int parser_action_row1366[] = {
+static int parser_action_row1369[] = {
        1,
        -1, 1, 39
 };
-static int parser_action_row1367[] = {
+static int parser_action_row1370[] = {
        2,
-       -1, 3, 1366,
-       52, 0, 1420
+       -1, 3, 1369,
+       52, 0, 1423
 };
-static int parser_action_row1368[] = {
+static int parser_action_row1371[] = {
        1,
-       -1, 1, 495
+       -1, 1, 496
 };
-static int parser_action_row1369[] = {
+static int parser_action_row1372[] = {
        2,
-       -1, 3, 1368,
-       52, 0, 1421
+       -1, 3, 1371,
+       52, 0, 1424
 };
-static int parser_action_row1370[] = {
+static int parser_action_row1373[] = {
        1,
-       -1, 1, 659
+       -1, 1, 660
 };
-static int parser_action_row1371[] = {
+static int parser_action_row1374[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 1057,
-       12, 0, 662,
-       15, 0, 663,
-       16, 0, 664,
-       22, 0, 665,
-       25, 0, 667,
-       26, 0, 668,
-       27, 0, 669,
-       33, 0, 670,
-       34, 0, 671,
-       35, 0, 672,
-       36, 0, 673,
-       37, 0, 674,
+       9, 0, 1060,
+       12, 0, 664,
+       15, 0, 665,
+       16, 0, 666,
+       22, 0, 667,
+       25, 0, 669,
+       26, 0, 670,
+       27, 0, 671,
+       33, 0, 672,
+       34, 0, 673,
+       35, 0, 674,
+       36, 0, 675,
+       37, 0, 676,
        38, 0, 40,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       50, 0, 675,
+       50, 0, 677,
        51, 0, 46,
        53, 0, 47,
        81, 0, 48,
@@ -13574,78 +13588,78 @@ static int parser_action_row1371[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1372[] = {
+static int parser_action_row1375[] = {
        2,
        -1, 1, 218,
-       24, 1, 675
+       24, 1, 676
 };
-static int parser_action_row1373[] = {
+static int parser_action_row1376[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1374[] = {
+static int parser_action_row1377[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1375[] = {
+static int parser_action_row1378[] = {
        1,
-       -1, 1, 660
+       -1, 1, 661
 };
-static int parser_action_row1376[] = {
+static int parser_action_row1379[] = {
        1,
-       -1, 1, 665
+       -1, 1, 666
 };
-static int parser_action_row1377[] = {
+static int parser_action_row1380[] = {
        1,
-       -1, 1, 662
+       -1, 1, 663
 };
-static int parser_action_row1378[] = {
+static int parser_action_row1381[] = {
        1,
-       -1, 1, 667
+       -1, 1, 668
 };
-static int parser_action_row1379[] = {
+static int parser_action_row1382[] = {
        2,
        -1, 1, 183,
-       24, 1, 650
+       24, 1, 651
 };
-static int parser_action_row1380[] = {
+static int parser_action_row1383[] = {
        2,
-       -1, 3, 1379,
-       15, 0, 1425
+       -1, 3, 1382,
+       15, 0, 1428
 };
-static int parser_action_row1381[] = {
+static int parser_action_row1384[] = {
        1,
        -1, 1, 231
 };
-static int parser_action_row1382[] = {
+static int parser_action_row1385[] = {
        2,
        -1, 1, 306,
-       80, 0, 184
+       80, 0, 183
 };
-static int parser_action_row1383[] = {
+static int parser_action_row1386[] = {
        1,
-       -1, 1, 744
+       -1, 1, 745
 };
-static int parser_action_row1384[] = {
+static int parser_action_row1387[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -13655,111 +13669,111 @@ static int parser_action_row1384[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1385[] = {
+static int parser_action_row1388[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
-static int parser_action_row1386[] = {
+static int parser_action_row1389[] = {
        3,
-       -1, 1, 426,
-       61, 1, 429,
-       63, 1, 429
+       -1, 1, 427,
+       61, 1, 430,
+       63, 1, 430
 };
-static int parser_action_row1387[] = {
+static int parser_action_row1390[] = {
        1,
-       -1, 1, 451
+       -1, 1, 452
 };
-static int parser_action_row1388[] = {
+static int parser_action_row1391[] = {
        1,
-       -1, 1, 390
+       -1, 1, 391
 };
-static int parser_action_row1389[] = {
+static int parser_action_row1392[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1390[] = {
+static int parser_action_row1393[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1391[] = {
+static int parser_action_row1394[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1392[] = {
+static int parser_action_row1395[] = {
        3,
-       -1, 3, 1391,
-       0, 0, 83,
-       1, 0, 84
+       -1, 3, 1394,
+       0, 0, 82,
+       1, 0, 83
 };
-static int parser_action_row1393[] = {
+static int parser_action_row1396[] = {
        1,
        -1, 1, 318
 };
-static int parser_action_row1394[] = {
+static int parser_action_row1397[] = {
        3,
-       -1, 3, 1393,
-       0, 0, 83,
-       1, 0, 84
+       -1, 3, 1396,
+       0, 0, 82,
+       1, 0, 83
 };
-static int parser_action_row1395[] = {
+static int parser_action_row1398[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1396[] = {
+static int parser_action_row1399[] = {
        2,
        -1, 1, 130,
-       81, 0, 477
+       81, 0, 476
 };
-static int parser_action_row1397[] = {
+static int parser_action_row1400[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1398[] = {
+static int parser_action_row1401[] = {
        1,
        -1, 1, 128
 };
-static int parser_action_row1399[] = {
+static int parser_action_row1402[] = {
        4,
        -1, 1, 119,
-       4, 0, 733,
-       14, 0, 734,
-       15, 0, 1436
+       4, 0, 736,
+       14, 0, 737,
+       15, 0, 1439
 };
-static int parser_action_row1400[] = {
+static int parser_action_row1403[] = {
        2,
        -1, 1, 77,
-       14, 0, 725
+       14, 0, 728
 };
-static int parser_action_row1401[] = {
+static int parser_action_row1404[] = {
        3,
-       -1, 3, 1400,
-       14, 0, 1401,
-       15, 0, 1441
+       -1, 3, 1403,
+       14, 0, 1404,
+       15, 0, 1444
 };
-static int parser_action_row1402[] = {
+static int parser_action_row1405[] = {
        4,
        -1, 1, 42,
-       0, 0, 83,
-       1, 0, 84,
+       0, 0, 82,
+       1, 0, 83,
        13, 0, 27
 };
-static int parser_action_row1403[] = {
+static int parser_action_row1406[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 466,
+       9, 0, 465,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -13789,54 +13803,54 @@ static int parser_action_row1403[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1404[] = {
+static int parser_action_row1407[] = {
        2,
-       -1, 3, 1403,
-       15, 0, 1446
+       -1, 3, 1406,
+       15, 0, 1449
 };
-static int parser_action_row1405[] = {
+static int parser_action_row1408[] = {
        3,
        -1, 1, 77,
-       14, 0, 725,
-       58, 0, 1447
+       14, 0, 728,
+       58, 0, 1450
 };
-static int parser_action_row1406[] = {
+static int parser_action_row1409[] = {
        3,
        -1, 1, 119,
-       4, 0, 733,
-       14, 0, 734
+       4, 0, 736,
+       14, 0, 737
 };
-static int parser_action_row1407[] = {
+static int parser_action_row1410[] = {
        2,
        -1, 1, 119,
-       4, 0, 733
+       4, 0, 736
 };
-static int parser_action_row1408[] = {
+static int parser_action_row1411[] = {
        3,
-       -1, 3, 1407,
+       -1, 3, 1410,
        28, 0, 34,
        94, 0, 56
 };
-static int parser_action_row1409[] = {
+static int parser_action_row1412[] = {
        1,
        -1, 1, 60
 };
-static int parser_action_row1410[] = {
+static int parser_action_row1413[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -13846,79 +13860,79 @@ static int parser_action_row1410[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1411[] = {
+static int parser_action_row1414[] = {
        4,
-       -1, 3, 1410,
-       0, 0, 83,
-       1, 0, 84,
-       80, 0, 184
+       -1, 3, 1413,
+       0, 0, 82,
+       1, 0, 83,
+       80, 0, 183
 };
-static int parser_action_row1412[] = {
+static int parser_action_row1415[] = {
        1,
-       -1, 1, 484
+       -1, 1, 485
 };
-static int parser_action_row1413[] = {
+static int parser_action_row1416[] = {
        1,
-       -1, 1, 489
+       -1, 1, 490
 };
-static int parser_action_row1414[] = {
+static int parser_action_row1417[] = {
        1,
-       -1, 1, 486
+       -1, 1, 487
 };
-static int parser_action_row1415[] = {
+static int parser_action_row1418[] = {
        1,
-       -1, 1, 491
+       -1, 1, 492
 };
-static int parser_action_row1416[] = {
+static int parser_action_row1419[] = {
        2,
-       -1, 3, 1415,
-       83, 0, 1457
+       -1, 3, 1418,
+       83, 0, 1460
 };
-static int parser_action_row1417[] = {
+static int parser_action_row1420[] = {
        2,
        -1, 1, 340,
-       51, 0, 242
+       51, 0, 240
 };
-static int parser_action_row1418[] = {
+static int parser_action_row1421[] = {
        1,
-       -1, 1, 487
+       -1, 1, 488
 };
-static int parser_action_row1419[] = {
+static int parser_action_row1422[] = {
        1,
-       -1, 1, 492
+       -1, 1, 493
 };
-static int parser_action_row1420[] = {
+static int parser_action_row1423[] = {
        1,
        -1, 1, 41
 };
-static int parser_action_row1421[] = {
+static int parser_action_row1424[] = {
        1,
        -1, 1, 277
 };
-static int parser_action_row1422[] = {
+static int parser_action_row1425[] = {
        1,
-       -1, 1, 541
+       -1, 1, 542
 };
-static int parser_action_row1423[] = {
+static int parser_action_row1426[] = {
        1,
-       -1, 1, 672
+       -1, 1, 673
 };
-static int parser_action_row1424[] = {
+static int parser_action_row1427[] = {
        2,
-       -1, 3, 1423,
-       28, 0, 1459
+       -1, 3, 1426,
+       28, 0, 1462
 };
-static int parser_action_row1425[] = {
+static int parser_action_row1428[] = {
        2,
-       -1, 3, 1424,
-       15, 0, 1460
+       -1, 3, 1427,
+       15, 0, 1463
 };
-static int parser_action_row1426[] = {
+static int parser_action_row1429[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 142,
+       9, 0, 141,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -13948,62 +13962,62 @@ static int parser_action_row1426[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1427[] = {
+static int parser_action_row1430[] = {
        1,
        -1, 1, 313
 };
-static int parser_action_row1428[] = {
+static int parser_action_row1431[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1429[] = {
+static int parser_action_row1432[] = {
        1,
-       -1, 1, 436
+       -1, 1, 437
 };
-static int parser_action_row1430[] = {
+static int parser_action_row1433[] = {
        2,
-       -1, 3, 1429,
-       45, 0, 1464
+       -1, 3, 1432,
+       45, 0, 1467
 };
-static int parser_action_row1431[] = {
+static int parser_action_row1434[] = {
        4,
-       -1, 3, 1430,
-       31, 0, 1465,
-       47, 0, 344,
-       81, 0, 345
+       -1, 3, 1433,
+       31, 0, 1468,
+       47, 0, 342,
+       81, 0, 343
 };
-static int parser_action_row1432[] = {
+static int parser_action_row1435[] = {
        35,
-       -1, 1, 358,
-       12, 0, 155,
+       -1, 1, 359,
+       12, 0, 154,
        15, 0, 28,
        16, 0, 29,
-       22, 0, 156,
+       22, 0, 155,
        25, 0, 31,
        26, 0, 32,
        27, 0, 33,
-       31, 0, 157,
-       33, 0, 928,
-       34, 0, 929,
-       35, 0, 930,
-       36, 0, 931,
+       31, 0, 156,
+       33, 0, 931,
+       34, 0, 932,
+       35, 0, 933,
+       36, 0, 934,
        37, 0, 39,
-       38, 0, 158,
-       40, 0, 159,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       47, 0, 344,
-       48, 0, 160,
-       50, 0, 932,
+       47, 0, 342,
+       48, 0, 159,
+       50, 0, 935,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
-       80, 0, 184,
-       81, 0, 933,
+       65, 0, 160,
+       80, 0, 183,
+       81, 0, 936,
        82, 0, 49,
        84, 0, 50,
        85, 0, 51,
@@ -14012,32 +14026,32 @@ static int parser_action_row1432[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1433[] = {
+static int parser_action_row1436[] = {
        1,
        -1, 1, 319
 };
-static int parser_action_row1434[] = {
+static int parser_action_row1437[] = {
        1,
        -1, 1, 322
 };
-static int parser_action_row1435[] = {
+static int parser_action_row1438[] = {
        2,
-       -1, 3, 1434,
-       47, 0, 1468
+       -1, 3, 1437,
+       47, 0, 1471
 };
-static int parser_action_row1436[] = {
+static int parser_action_row1439[] = {
        4,
-       -1, 3, 1435,
-       31, 0, 1469,
-       47, 0, 1470,
-       81, 0, 345
+       -1, 3, 1438,
+       31, 0, 1472,
+       47, 0, 1473,
+       81, 0, 343
 };
-static int parser_action_row1437[] = {
+static int parser_action_row1440[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 466,
+       9, 0, 465,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -14067,32 +14081,32 @@ static int parser_action_row1437[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1438[] = {
+static int parser_action_row1441[] = {
        3,
        -1, 1, 119,
-       4, 0, 733,
-       15, 0, 1473
+       4, 0, 736,
+       15, 0, 1476
 };
-static int parser_action_row1439[] = {
+static int parser_action_row1442[] = {
        3,
-       -1, 3, 1438,
+       -1, 3, 1441,
        28, 0, 34,
        94, 0, 56
 };
-static int parser_action_row1440[] = {
+static int parser_action_row1443[] = {
        1,
        -1, 1, 59
 };
-static int parser_action_row1441[] = {
+static int parser_action_row1444[] = {
        1,
        -1, 1, 70
 };
-static int parser_action_row1442[] = {
+static int parser_action_row1445[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 466,
+       9, 0, 465,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -14122,32 +14136,32 @@ static int parser_action_row1442[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1443[] = {
+static int parser_action_row1446[] = {
        2,
-       -1, 3, 1442,
-       15, 0, 1477
+       -1, 3, 1445,
+       15, 0, 1480
 };
-static int parser_action_row1444[] = {
+static int parser_action_row1447[] = {
        1,
        -1, 1, 78
 };
-static int parser_action_row1445[] = {
+static int parser_action_row1448[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1446[] = {
+static int parser_action_row1449[] = {
        2,
-       -1, 1, 369,
-       9, 0, 1017
+       -1, 1, 370,
+       9, 0, 1020
 };
-static int parser_action_row1447[] = {
+static int parser_action_row1450[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 466,
+       9, 0, 465,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -14177,99 +14191,99 @@ static int parser_action_row1447[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1448[] = {
+static int parser_action_row1451[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1449[] = {
+static int parser_action_row1452[] = {
        1,
        -1, 1, 64
 };
-static int parser_action_row1450[] = {
+static int parser_action_row1453[] = {
        2,
        -1, 1, 119,
-       4, 0, 733
+       4, 0, 736
 };
-static int parser_action_row1451[] = {
+static int parser_action_row1454[] = {
        3,
-       -1, 3, 1450,
+       -1, 3, 1453,
        28, 0, 34,
        94, 0, 56
 };
-static int parser_action_row1452[] = {
+static int parser_action_row1455[] = {
        1,
        -1, 1, 61
 };
-static int parser_action_row1453[] = {
+static int parser_action_row1456[] = {
        3,
-       -1, 3, 1452,
+       -1, 3, 1455,
        28, 0, 34,
        94, 0, 56
 };
-static int parser_action_row1454[] = {
+static int parser_action_row1457[] = {
        1,
        -1, 1, 71
 };
-static int parser_action_row1455[] = {
+static int parser_action_row1458[] = {
        1,
-       -1, 1, 759
+       -1, 1, 760
 };
-static int parser_action_row1456[] = {
+static int parser_action_row1459[] = {
        3,
-       -1, 3, 1455,
-       0, 0, 83,
-       1, 0, 84
+       -1, 3, 1458,
+       0, 0, 82,
+       1, 0, 83
 };
-static int parser_action_row1457[] = {
+static int parser_action_row1460[] = {
        1,
        -1, 1, 325
 };
-static int parser_action_row1458[] = {
+static int parser_action_row1461[] = {
        4,
-       -1, 1, 531,
-       58, 0, 1486,
-       59, 0, 371,
-       60, 0, 372
+       -1, 1, 532,
+       58, 0, 1489,
+       59, 0, 370,
+       60, 0, 371
 };
-static int parser_action_row1459[] = {
+static int parser_action_row1462[] = {
        4,
-       -1, 1, 533,
-       58, 0, 1488,
-       59, 0, 371,
-       60, 0, 372
+       -1, 1, 534,
+       58, 0, 1491,
+       59, 0, 370,
+       60, 0, 371
 };
-static int parser_action_row1460[] = {
+static int parser_action_row1463[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1461[] = {
+static int parser_action_row1464[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 762,
-       12, 0, 662,
-       15, 0, 663,
-       16, 0, 664,
-       22, 0, 665,
-       25, 0, 667,
-       26, 0, 668,
-       27, 0, 669,
-       33, 0, 670,
-       34, 0, 671,
-       35, 0, 672,
-       36, 0, 673,
-       37, 0, 674,
+       9, 0, 765,
+       12, 0, 664,
+       15, 0, 665,
+       16, 0, 666,
+       22, 0, 667,
+       25, 0, 669,
+       26, 0, 670,
+       27, 0, 671,
+       33, 0, 672,
+       34, 0, 673,
+       35, 0, 674,
+       36, 0, 675,
+       37, 0, 676,
        38, 0, 40,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       50, 0, 675,
+       50, 0, 677,
        51, 0, 46,
        53, 0, 47,
        81, 0, 48,
@@ -14281,75 +14295,75 @@ static int parser_action_row1461[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1462[] = {
+static int parser_action_row1465[] = {
        1,
        -1, 1, 222
 };
-static int parser_action_row1463[] = {
+static int parser_action_row1466[] = {
        2,
-       -1, 3, 1462,
-       49, 0, 175
+       -1, 3, 1465,
+       49, 0, 174
 };
-static int parser_action_row1464[] = {
+static int parser_action_row1467[] = {
        2,
-       -1, 3, 1463,
-       24, 0, 1494
+       -1, 3, 1466,
+       24, 0, 1497
 };
-static int parser_action_row1465[] = {
+static int parser_action_row1468[] = {
        1,
-       -1, 1, 439
+       -1, 1, 440
 };
-static int parser_action_row1466[] = {
+static int parser_action_row1469[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1467[] = {
+static int parser_action_row1470[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1468[] = {
+static int parser_action_row1471[] = {
        2,
-       -1, 3, 1467,
-       52, 0, 1497
+       -1, 3, 1470,
+       52, 0, 1500
 };
-static int parser_action_row1469[] = {
+static int parser_action_row1472[] = {
        1,
        -1, 1, 132
 };
-static int parser_action_row1470[] = {
+static int parser_action_row1473[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1471[] = {
+static int parser_action_row1474[] = {
        4,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2,
-       81, 0, 477
+       81, 0, 476
 };
-static int parser_action_row1472[] = {
+static int parser_action_row1475[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1473[] = {
+static int parser_action_row1476[] = {
        2,
-       -1, 1, 369,
-       9, 0, 1017
+       -1, 1, 370,
+       9, 0, 1020
 };
-static int parser_action_row1474[] = {
+static int parser_action_row1477[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 466,
+       9, 0, 465,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -14379,27 +14393,27 @@ static int parser_action_row1474[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1475[] = {
+static int parser_action_row1478[] = {
        3,
-       -1, 3, 1474,
+       -1, 3, 1477,
        28, 0, 34,
        94, 0, 56
 };
-static int parser_action_row1476[] = {
+static int parser_action_row1479[] = {
        1,
        -1, 1, 62
 };
-static int parser_action_row1477[] = {
+static int parser_action_row1480[] = {
        2,
-       -1, 1, 369,
-       9, 0, 1017
+       -1, 1, 370,
+       9, 0, 1020
 };
-static int parser_action_row1478[] = {
+static int parser_action_row1481[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 466,
+       9, 0, 465,
        12, 0, 26,
        15, 0, 28,
        16, 0, 29,
@@ -14429,35 +14443,35 @@ static int parser_action_row1478[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1479[] = {
+static int parser_action_row1482[] = {
        1,
        -1, 1, 79
 };
-static int parser_action_row1480[] = {
+static int parser_action_row1483[] = {
        1,
        -1, 1, 66
 };
-static int parser_action_row1481[] = {
+static int parser_action_row1484[] = {
        2,
-       -1, 1, 369,
-       9, 0, 1017
+       -1, 1, 370,
+       9, 0, 1020
 };
-static int parser_action_row1482[] = {
+static int parser_action_row1485[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -14467,40 +14481,40 @@ static int parser_action_row1482[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1483[] = {
+static int parser_action_row1486[] = {
        3,
-       -1, 3, 1482,
+       -1, 3, 1485,
        28, 0, 34,
        94, 0, 56
 };
-static int parser_action_row1484[] = {
+static int parser_action_row1487[] = {
        1,
        -1, 1, 72
 };
-static int parser_action_row1485[] = {
+static int parser_action_row1488[] = {
        1,
        -1, 1, 73
 };
-static int parser_action_row1486[] = {
+static int parser_action_row1489[] = {
        1,
        -1, 1, 326
 };
-static int parser_action_row1487[] = {
+static int parser_action_row1490[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -14510,22 +14524,22 @@ static int parser_action_row1487[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1488[] = {
+static int parser_action_row1491[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -14535,22 +14549,22 @@ static int parser_action_row1488[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1489[] = {
+static int parser_action_row1492[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -14560,22 +14574,22 @@ static int parser_action_row1489[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1490[] = {
+static int parser_action_row1493[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -14585,22 +14599,22 @@ static int parser_action_row1490[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1491[] = {
+static int parser_action_row1494[] = {
        22,
-       -1, 1, 358,
-       12, 0, 155,
-       22, 0, 156,
-       31, 0, 157,
-       38, 0, 158,
-       40, 0, 159,
+       -1, 1, 359,
+       12, 0, 154,
+       22, 0, 155,
+       31, 0, 156,
+       38, 0, 157,
+       40, 0, 158,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       48, 0, 160,
+       48, 0, 159,
        51, 0, 46,
        53, 0, 47,
-       65, 0, 161,
+       65, 0, 160,
        81, 0, 48,
        82, 0, 49,
        84, 0, 50,
@@ -14610,236 +14624,236 @@ static int parser_action_row1491[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1492[] = {
-       1,
-       -1, 1, 680
-};
-static int parser_action_row1493[] = {
-       2,
-       -1, 3, 1492,
-       49, 0, 175
-};
-static int parser_action_row1494[] = {
-       1,
-       -1, 1, 220
-};
 static int parser_action_row1495[] = {
-       3,
-       -1, 1, 376,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 681
 };
 static int parser_action_row1496[] = {
        2,
        -1, 3, 1495,
-       45, 0, 1516
+       49, 0, 174
 };
 static int parser_action_row1497[] = {
-       2,
-       -1, 3, 1496,
-       52, 0, 1517
+       1,
+       -1, 1, 220
 };
 static int parser_action_row1498[] = {
-       4,
-       -1, 3, 1497,
-       0, 0, 83,
-       1, 0, 84,
-       80, 0, 184
+       3,
+       -1, 1, 377,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1499[] = {
        2,
        -1, 3, 1498,
-       47, 0, 1520
+       45, 0, 1519
 };
 static int parser_action_row1500[] = {
        2,
        -1, 3, 1499,
-       52, 0, 1521
+       52, 0, 1520
 };
 static int parser_action_row1501[] = {
-       2,
+       4,
        -1, 3, 1500,
-       52, 0, 1522
+       0, 0, 82,
+       1, 0, 83,
+       80, 0, 183
 };
 static int parser_action_row1502[] = {
-       1,
-       -1, 1, 57
+       2,
+       -1, 3, 1501,
+       47, 0, 1523
 };
 static int parser_action_row1503[] = {
        2,
-       -1, 1, 369,
-       9, 0, 1017
+       -1, 3, 1502,
+       52, 0, 1524
 };
 static int parser_action_row1504[] = {
-       1,
-       -1, 1, 63
+       2,
+       -1, 3, 1503,
+       52, 0, 1525
 };
 static int parser_action_row1505[] = {
        1,
-       -1, 1, 67
+       -1, 1, 57
 };
 static int parser_action_row1506[] = {
        2,
-       -1, 1, 369,
-       9, 0, 1017
+       -1, 1, 370,
+       9, 0, 1020
 };
 static int parser_action_row1507[] = {
        1,
-       -1, 1, 68
+       -1, 1, 63
 };
 static int parser_action_row1508[] = {
-       2,
-       -1, 1, 77,
-       14, 0, 725
+       1,
+       -1, 1, 67
 };
 static int parser_action_row1509[] = {
-       1,
-       -1, 1, 74
+       2,
+       -1, 1, 370,
+       9, 0, 1020
 };
 static int parser_action_row1510[] = {
        1,
-       -1, 1, 483
+       -1, 1, 68
 };
 static int parser_action_row1511[] = {
-       1,
-       -1, 1, 488
+       2,
+       -1, 1, 77,
+       14, 0, 728
 };
 static int parser_action_row1512[] = {
        1,
-       -1, 1, 485
+       -1, 1, 74
 };
 static int parser_action_row1513[] = {
        1,
-       -1, 1, 490
+       -1, 1, 484
 };
 static int parser_action_row1514[] = {
+       1,
+       -1, 1, 489
+};
+static int parser_action_row1515[] = {
+       1,
+       -1, 1, 486
+};
+static int parser_action_row1516[] = {
+       1,
+       -1, 1, 491
+};
+static int parser_action_row1517[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1515[] = {
+static int parser_action_row1518[] = {
        2,
        -1, 1, 221,
-       24, 1, 678
+       24, 1, 679
 };
-static int parser_action_row1516[] = {
+static int parser_action_row1519[] = {
        21,
-       -1, 1, 358,
-       12, 0, 816,
-       22, 0, 817,
-       31, 0, 818,
-       38, 0, 819,
-       40, 0, 820,
-       42, 0, 821,
-       43, 0, 822,
-       44, 0, 823,
-       45, 0, 824,
-       48, 0, 825,
-       51, 0, 826,
-       65, 0, 827,
+       -1, 1, 359,
+       12, 0, 819,
+       22, 0, 820,
+       31, 0, 821,
+       38, 0, 822,
+       40, 0, 823,
+       42, 0, 824,
+       43, 0, 825,
+       44, 0, 826,
+       45, 0, 827,
+       48, 0, 828,
+       51, 0, 829,
+       65, 0, 830,
        81, 0, 48,
        82, 0, 49,
-       84, 0, 828,
-       85, 0, 829,
-       86, 0, 830,
-       87, 0, 831,
+       84, 0, 831,
+       85, 0, 832,
+       86, 0, 833,
+       87, 0, 834,
        88, 0, 54,
-       91, 0, 832
+       91, 0, 835
 };
-static int parser_action_row1517[] = {
+static int parser_action_row1520[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1518[] = {
+static int parser_action_row1521[] = {
        1,
-       -1, 1, 437
+       -1, 1, 438
 };
-static int parser_action_row1519[] = {
+static int parser_action_row1522[] = {
        3,
-       -1, 3, 1518,
-       0, 0, 83,
-       1, 0, 84
+       -1, 3, 1521,
+       0, 0, 82,
+       1, 0, 83
 };
-static int parser_action_row1520[] = {
+static int parser_action_row1523[] = {
        1,
        -1, 1, 320
 };
-static int parser_action_row1521[] = {
+static int parser_action_row1524[] = {
        3,
-       -1, 1, 376,
+       -1, 1, 377,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1522[] = {
+static int parser_action_row1525[] = {
        1,
        -1, 1, 129
 };
-static int parser_action_row1523[] = {
+static int parser_action_row1526[] = {
        1,
        -1, 1, 127
 };
-static int parser_action_row1524[] = {
+static int parser_action_row1527[] = {
        1,
        -1, 1, 58
 };
-static int parser_action_row1525[] = {
+static int parser_action_row1528[] = {
        1,
        -1, 1, 69
 };
-static int parser_action_row1526[] = {
+static int parser_action_row1529[] = {
        1,
        -1, 1, 65
 };
-static int parser_action_row1527[] = {
+static int parser_action_row1530[] = {
        2,
-       -1, 3, 1526,
-       15, 0, 1531
+       -1, 3, 1529,
+       15, 0, 1534
 };
-static int parser_action_row1528[] = {
+static int parser_action_row1531[] = {
        1,
-       -1, 1, 393
+       -1, 1, 394
 };
-static int parser_action_row1529[] = {
+static int parser_action_row1532[] = {
        2,
-       -1, 3, 1528,
-       52, 0, 1532
+       -1, 3, 1531,
+       52, 0, 1535
 };
-static int parser_action_row1530[] = {
+static int parser_action_row1533[] = {
        1,
        -1, 1, 321
 };
-static int parser_action_row1531[] = {
+static int parser_action_row1534[] = {
        2,
-       -1, 3, 1530,
-       52, 0, 1533
+       -1, 3, 1533,
+       52, 0, 1536
 };
-static int parser_action_row1532[] = {
+static int parser_action_row1535[] = {
        32,
-       -1, 1, 358,
+       -1, 1, 359,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 762,
-       12, 0, 662,
-       15, 0, 663,
-       16, 0, 664,
-       22, 0, 665,
-       25, 0, 667,
-       26, 0, 668,
-       27, 0, 669,
-       33, 0, 670,
-       34, 0, 671,
-       35, 0, 672,
-       36, 0, 673,
-       37, 0, 674,
+       9, 0, 765,
+       12, 0, 664,
+       15, 0, 665,
+       16, 0, 666,
+       22, 0, 667,
+       25, 0, 669,
+       26, 0, 670,
+       27, 0, 671,
+       33, 0, 672,
+       34, 0, 673,
+       35, 0, 674,
+       36, 0, 675,
+       37, 0, 676,
        38, 0, 40,
        42, 0, 41,
        43, 0, 42,
        44, 0, 43,
        45, 0, 44,
-       50, 0, 675,
+       50, 0, 677,
        51, 0, 46,
        53, 0, 47,
        81, 0, 48,
@@ -14851,27 +14865,27 @@ static int parser_action_row1532[] = {
        88, 0, 54,
        91, 0, 55
 };
-static int parser_action_row1533[] = {
+static int parser_action_row1536[] = {
        1,
-       -1, 1, 438
+       -1, 1, 439
 };
-static int parser_action_row1534[] = {
+static int parser_action_row1537[] = {
        1,
        -1, 1, 131
 };
-static int parser_action_row1535[] = {
+static int parser_action_row1538[] = {
        1,
-       -1, 1, 679
+       -1, 1, 680
 };
-static int parser_action_row1536[] = {
+static int parser_action_row1539[] = {
        2,
-       -1, 3, 1535,
-       49, 0, 175
+       -1, 3, 1538,
+       49, 0, 174
 };
-static int parser_action_row1537[] = {
+static int parser_action_row1540[] = {
        2,
        -1, 1, 220,
-       24, 1, 677
+       24, 1, 678
 };
 
 const int* const parser_action_table[] = {
@@ -16411,7 +16425,10 @@ const int* const parser_action_table[] = {
        parser_action_row1534,
        parser_action_row1535,
        parser_action_row1536,
-       parser_action_row1537
+       parser_action_row1537,
+       parser_action_row1538,
+       parser_action_row1539,
+       parser_action_row1540
 };
 
 static int parser_goto_row1[] = {
@@ -16425,39 +16442,39 @@ static int parser_goto_row2[] = {
 static int parser_goto_row3[] = {
        3,
        -1, 5,
-       16, 86,
-       23, 86
+       16, 85,
+       23, 85
 };
 static int parser_goto_row4[] = {
        9,
        -1, 6,
-       18, 94,
-       25, 94,
-       89, 94,
-       93, 94,
-       103, 94,
-       105, 94,
-       233, 94,
-       239, 94
+       18, 93,
+       25, 93,
+       88, 93,
+       92, 93,
+       102, 93,
+       104, 93,
+       231, 93,
+       237, 93
 };
 static int parser_goto_row5[] = {
        16,
        -1, 7,
        4, 21,
-       16, 87,
-       17, 90,
-       18, 95,
-       23, 101,
-       24, 104,
-       25, 106,
+       16, 86,
+       17, 89,
+       18, 94,
+       23, 100,
+       24, 103,
+       25, 105,
+       87, 230,
        88, 232,
-       89, 234,
-       93, 236,
+       92, 234,
+       101, 236,
        102, 238,
-       103, 240,
-       105, 241,
-       233, 390,
-       239, 392
+       104, 239,
+       231, 389,
+       237, 391
 };
 static int parser_goto_row6[] = {
        1,
@@ -16469,152 +16486,152 @@ static int parser_goto_row7[] = {
 };
 static int parser_goto_row8[] = {
        14,
-       -1, 1031,
+       -1, 1034,
        12, 57,
-       22, 100,
-       92, 235,
-       96, 235,
-       184, 342,
-       471, 600,
-       475, 603,
-       706, 603,
-       725, 603,
-       734, 603,
-       810, 603,
-       1000, 1128,
-       1401, 603
+       22, 99,
+       91, 233,
+       95, 233,
+       183, 340,
+       470, 600,
+       474, 603,
+       708, 603,
+       728, 603,
+       737, 603,
+       813, 603,
+       1003, 1131,
+       1404, 603
 };
 static int parser_goto_row9[] = {
        1,
-       -1, 364
+       -1, 363
 };
 static int parser_goto_row10[] = {
        1,
-       -1, 741
+       -1, 744
 };
 static int parser_goto_row11[] = {
        2,
-       -1, 1146,
-       1148, 1269
+       -1, 1149,
+       1151, 1272
 };
 static int parser_goto_row12[] = {
        2,
-       -1, 1022,
-       1267, 1342
+       -1, 1025,
+       1270, 1345
 };
 static int parser_goto_row13[] = {
        5,
-       -1, 866,
-       872, 1033,
-       1025, 1033,
-       1041, 1033,
-       1182, 1033
+       -1, 869,
+       875, 1036,
+       1028, 1036,
+       1044, 1036,
+       1185, 1036
 };
 static int parser_goto_row14[] = {
        9,
-       -1, 867,
-       873, 1036,
-       1026, 1036,
-       1035, 1036,
-       1042, 1036,
-       1151, 1036,
-       1183, 1036,
-       1186, 1036,
-       1295, 1036
+       -1, 870,
+       876, 1039,
+       1029, 1039,
+       1038, 1039,
+       1045, 1039,
+       1154, 1039,
+       1186, 1039,
+       1189, 1039,
+       1298, 1039
 };
 static int parser_goto_row15[] = {
        1,
-       -1, 868
+       -1, 871
 };
 static int parser_goto_row16[] = {
        6,
-       -1, 726,
-       624, 729,
-       1274, 1345,
-       1399, 1440,
-       1404, 1448,
-       1507, 1525
+       -1, 729,
+       625, 732,
+       1277, 1348,
+       1402, 1443,
+       1407, 1451,
+       1510, 1528
 };
 static int parser_goto_row17[] = {
        6,
-       -1, 736,
-       1349, 1403,
+       -1, 739,
        1352, 1406,
-       1398, 1437,
-       1400, 1442,
-       1405, 1449
+       1355, 1409,
+       1401, 1440,
+       1403, 1445,
+       1408, 1452
 };
 static int parser_goto_row18[] = {
        8,
-       -1, 204,
-       100, 237,
-       235, 391,
-       342, 476,
-       600, 707,
-       603, 711,
-       1031, 1154,
-       1128, 1258
+       -1, 203,
+       99, 235,
+       233, 390,
+       340, 475,
+       600, 709,
+       603, 713,
+       1034, 1157,
+       1131, 1261
 };
 static int parser_goto_row19[] = {
        6,
-       -1, 1011,
-       362, 504,
-       1140, 1265,
-       1275, 1346,
-       1277, 1348,
-       1279, 1351
+       -1, 1014,
+       361, 503,
+       1143, 1268,
+       1278, 1349,
+       1280, 1351,
+       1282, 1354
 };
 static int parser_goto_row20[] = {
        6,
-       -1, 629,
-       1277, 1349,
-       1279, 1352,
-       1346, 1398,
-       1348, 1400,
-       1351, 1405
+       -1, 630,
+       1280, 1352,
+       1282, 1355,
+       1349, 1401,
+       1351, 1403,
+       1354, 1408
 };
 static int parser_goto_row21[] = {
        1,
-       -1, 855
+       -1, 858
 };
 static int parser_goto_row22[] = {
        2,
-       -1, 1007,
-       1009, 1135
+       -1, 1010,
+       1012, 1138
 };
 static int parser_goto_row23[] = {
        2,
-       -1, 856,
-       1134, 1261
+       -1, 859,
+       1137, 1264
 };
 static int parser_goto_row24[] = {
        8,
-       -1, 737,
-       736, 863,
-       1352, 1407,
-       1398, 1438,
-       1405, 1450,
-       1406, 1452,
-       1437, 1474,
-       1449, 1482
+       -1, 740,
+       739, 866,
+       1355, 1410,
+       1401, 1441,
+       1408, 1453,
+       1409, 1455,
+       1440, 1477,
+       1452, 1485
 };
 static int parser_goto_row25[] = {
        2,
-       -1, 1138,
-       1139, 1263
+       -1, 1141,
+       1142, 1266
 };
 static int parser_goto_row26[] = {
        2,
-       -1, 1012,
-       1262, 1340
+       -1, 1015,
+       1265, 1343
 };
 static int parser_goto_row27[] = {
        1,
-       -1, 1013
+       -1, 1016
 };
 static int parser_goto_row28[] = {
        1,
-       -1, 1014
+       -1, 1017
 };
 static int parser_goto_row29[] = {
        1,
@@ -16627,16 +16644,16 @@ static int parser_goto_row30[] = {
 static int parser_goto_row31[] = {
        11,
        -1, 59,
-       737, 864,
-       741, 869,
-       863, 1020,
-       874, 1038,
-       1407, 1453,
-       1438, 1475,
-       1450, 1483,
-       1452, 1484,
-       1474, 1503,
-       1482, 1508
+       740, 867,
+       744, 872,
+       866, 1023,
+       877, 1041,
+       1410, 1456,
+       1441, 1478,
+       1453, 1486,
+       1455, 1487,
+       1477, 1506,
+       1485, 1511
 };
 static int parser_goto_row32[] = {
        1,
@@ -16645,94 +16662,95 @@ static int parser_goto_row32[] = {
 static int parser_goto_row33[] = {
        5,
        -1, 10,
-       17, 91,
-       24, 91,
-       88, 91,
-       102, 91
+       17, 90,
+       24, 90,
+       87, 90,
+       101, 90
 };
 static int parser_goto_row34[] = {
        24,
-       -1, 934,
-       190, 346,
-       412, 539,
-       429, 559,
-       450, 576,
-       598, 704,
-       612, 704,
-       703, 704,
-       718, 704,
-       732, 857,
-       779, 899,
-       858, 1015,
-       877, 1045,
-       886, 1049,
-       918, 1077,
-       1032, 1161,
-       1084, 1216,
-       1153, 1274,
-       1262, 1015,
-       1283, 1353,
-       1339, 1161,
-       1341, 1397,
-       1430, 1466,
-       1435, 1471
+       -1, 937,
+       189, 344,
+       411, 539,
+       428, 559,
+       449, 576,
+       598, 706,
+       612, 706,
+       705, 706,
+       720, 706,
+       735, 860,
+       782, 902,
+       861, 1018,
+       880, 1048,
+       889, 1052,
+       921, 1080,
+       1035, 1164,
+       1087, 1219,
+       1156, 1277,
+       1265, 1018,
+       1286, 1356,
+       1342, 1164,
+       1344, 1400,
+       1433, 1469,
+       1438, 1474
 };
 static int parser_goto_row35[] = {
        4,
-       -1, 705,
-       612, 719,
-       703, 799,
-       718, 813
+       -1, 707,
+       612, 721,
+       705, 802,
+       720, 816
 };
 static int parser_goto_row36[] = {
        2,
-       -1, 801,
-       802, 919
+       -1, 804,
+       805, 922
 };
 static int parser_goto_row37[] = {
        5,
-       -1, 630,
-       854, 1002,
-       1003, 1131,
-       1005, 1132,
-       1347, 1399
+       -1, 631,
+       857, 1005,
+       1006, 1134,
+       1008, 1135,
+       1350, 1402
 };
 static int parser_goto_row38[] = {
-       7,
-       -1, 293,
-       294, 431,
-       767, 890,
-       891, 1051,
-       1021, 1143,
-       1144, 1266,
-       1350, 1404
+       8,
+       -1, 291,
+       292, 430,
+       347, 482,
+       770, 893,
+       894, 1054,
+       1024, 1146,
+       1147, 1269,
+       1353, 1407
 };
 static int parser_goto_row39[] = {
        24,
-       -1, 143,
-       32, 151,
-       337, 467,
-       465, 593,
-       563, 693,
-       666, 769,
-       668, 151,
-       735, 861,
-       790, 911,
-       862, 1019,
-       898, 467,
-       1056, 593,
-       1074, 1211,
-       1196, 693,
-       1370, 911,
-       1402, 1445,
-       1425, 1461,
-       1436, 1472,
-       1441, 1476,
-       1446, 1480,
-       1460, 1211,
-       1473, 1502,
-       1477, 1505,
-       1531, 1461
+       -1, 142,
+       32, 150,
+       335, 466,
+       464, 593,
+       563, 695,
+       668, 772,
+       670, 150,
+       738, 864,
+       793, 914,
+       865, 1022,
+       901, 466,
+       1059, 593,
+       1077, 1214,
+       1199, 695,
+       1373, 914,
+       1405, 1448,
+       1428, 1464,
+       1439, 1475,
+       1444, 1479,
+       1449, 1483,
+       1463, 1214,
+       1476, 1505,
+       1480, 1508,
+       1534, 1464
 };
 static int parser_goto_row40[] = {
        1,
@@ -16741,110 +16759,110 @@ static int parser_goto_row40[] = {
 static int parser_goto_row41[] = {
        2,
        -1, 61,
-       682, 787
+       684, 790
 };
 static int parser_goto_row42[] = {
        4,
-       -1, 289,
-       468, 595,
-       763, 888,
-       1058, 1201
+       -1, 287,
+       467, 595,
+       766, 891,
+       1061, 1204
 };
 static int parser_goto_row43[] = {
        4,
-       -1, 206,
-       208, 366,
-       428, 366,
-       910, 366
+       -1, 205,
+       207, 365,
+       427, 365,
+       913, 365
 };
 static int parser_goto_row44[] = {
        16,
-       -1, 144,
+       -1, 143,
        12, 62,
        22, 62,
-       92, 62,
-       96, 62,
-       145, 290,
-       207, 365,
-       367, 365,
-       427, 365,
-       468, 290,
-       558, 365,
-       562, 676,
-       682, 788,
-       763, 290,
-       1058, 290,
-       1195, 676
+       91, 62,
+       95, 62,
+       144, 288,
+       206, 364,
+       366, 364,
+       426, 364,
+       467, 288,
+       558, 364,
+       562, 678,
+       684, 791,
+       766, 288,
+       1061, 288,
+       1198, 678
 };
 static int parser_goto_row45[] = {
        18,
-       -1, 176,
-       37, 177,
-       146, 291,
-       152, 297,
-       671, 775,
-       672, 776,
-       694, 793,
-       766, 889,
-       772, 894,
-       929, 1082,
-       930, 1083,
-       1156, 1281,
-       1157, 1282,
-       1212, 1320,
-       1309, 1371,
-       1462, 1493,
-       1492, 1514,
-       1535, 1536
+       -1, 175,
+       37, 176,
+       145, 289,
+       151, 295,
+       673, 778,
+       674, 779,
+       696, 796,
+       769, 892,
+       775, 897,
+       932, 1085,
+       933, 1086,
+       1159, 1284,
+       1160, 1285,
+       1215, 1323,
+       1312, 1374,
+       1465, 1496,
+       1495, 1517,
+       1538, 1539
 };
 static int parser_goto_row46[] = {
        8,
        -1, 63,
-       812, 935,
-       1032, 1162,
-       1080, 935,
-       1219, 935,
-       1284, 935,
-       1339, 1162,
-       1431, 935
+       815, 938,
+       1035, 1165,
+       1083, 938,
+       1222, 938,
+       1287, 938,
+       1342, 1165,
+       1434, 938
 };
 static int parser_goto_row47[] = {
        6,
        -1, 64,
-       812, 936,
-       1080, 936,
-       1219, 936,
-       1284, 936,
-       1431, 936
+       815, 939,
+       1083, 939,
+       1222, 939,
+       1287, 939,
+       1434, 939
 };
 static int parser_goto_row48[] = {
        15,
-       -1, 373,
-       222, 382,
-       223, 384,
-       640, 748,
-       641, 750,
-       781, 902,
-       783, 905,
-       784, 907,
-       1204, 1313,
-       1205, 1315,
-       1286, 1356,
-       1287, 1358,
-       1289, 1361,
-       1457, 1487,
-       1458, 1489
+       -1, 372,
+       220, 381,
+       221, 383,
+       642, 751,
+       643, 753,
+       784, 905,
+       786, 908,
+       787, 910,
+       1207, 1316,
+       1208, 1318,
+       1289, 1359,
+       1290, 1361,
+       1292, 1364,
+       1460, 1490,
+       1461, 1492
 };
 static int parser_goto_row49[] = {
        8,
        -1, 65,
-       812, 937,
-       1032, 1163,
-       1080, 937,
-       1219, 937,
-       1284, 937,
-       1339, 1163,
-       1431, 937
+       815, 940,
+       1035, 1166,
+       1083, 940,
+       1222, 940,
+       1287, 940,
+       1342, 1166,
+       1434, 940
 };
 static int parser_goto_row50[] = {
        1,
@@ -16852,263 +16870,263 @@ static int parser_goto_row50[] = {
 };
 static int parser_goto_row51[] = {
        3,
-       -1, 677,
-       682, 789,
-       787, 909
+       -1, 679,
+       684, 792,
+       790, 912
 };
 static int parser_goto_row52[] = {
        8,
        -1, 67,
-       812, 938,
-       1032, 1164,
-       1080, 938,
-       1219, 938,
-       1284, 938,
-       1339, 1164,
-       1431, 938
+       815, 941,
+       1035, 1167,
+       1083, 941,
+       1222, 941,
+       1287, 941,
+       1342, 1167,
+       1434, 941
 };
 static int parser_goto_row53[] = {
        8,
        -1, 68,
-       812, 939,
-       1032, 1165,
-       1080, 939,
-       1219, 939,
-       1284, 939,
-       1339, 1165,
-       1431, 939
+       815, 942,
+       1035, 1168,
+       1083, 942,
+       1222, 942,
+       1287, 942,
+       1342, 1168,
+       1434, 942
 };
 static int parser_goto_row54[] = {
        8,
        -1, 69,
-       812, 940,
-       1032, 1166,
-       1080, 940,
-       1219, 940,
-       1284, 940,
-       1339, 1166,
-       1431, 940
+       815, 943,
+       1035, 1169,
+       1083, 943,
+       1222, 943,
+       1287, 943,
+       1342, 1169,
+       1434, 943
 };
 static int parser_goto_row55[] = {
        8,
        -1, 70,
-       812, 941,
-       1032, 1167,
-       1080, 941,
-       1219, 941,
-       1284, 941,
-       1339, 1167,
-       1431, 941
+       815, 944,
+       1035, 1170,
+       1083, 944,
+       1222, 944,
+       1287, 944,
+       1342, 1170,
+       1434, 944
 };
 static int parser_goto_row56[] = {
        2,
-       -1, 179,
-       674, 777
+       -1, 178,
+       676, 780
 };
 static int parser_goto_row57[] = {
        45,
-       -1, 162,
-       39, 180,
-       179, 335,
-       370, 513,
-       373, 514,
-       381, 518,
-       382, 519,
-       383, 520,
-       384, 521,
-       480, 613,
-       560, 659,
-       660, 760,
-       674, 180,
-       747, 878,
-       748, 879,
-       749, 880,
+       -1, 161,
+       39, 179,
+       178, 333,
+       369, 513,
+       372, 514,
+       380, 518,
+       381, 519,
+       382, 520,
+       383, 521,
+       479, 613,
+       560, 661,
+       662, 763,
+       676, 179,
        750, 881,
-       777, 335,
-       901, 513,
-       902, 514,
-       904, 518,
-       905, 519,
-       906, 520,
-       907, 521,
-       928, 1081,
-       1060, 613,
-       1155, 1280,
-       1193, 659,
-       1306, 760,
-       1312, 878,
-       1313, 879,
-       1314, 880,
+       751, 882,
+       752, 883,
+       753, 884,
+       780, 333,
+       904, 513,
+       905, 514,
+       907, 518,
+       908, 519,
+       909, 520,
+       910, 521,
+       931, 1084,
+       1063, 613,
+       1158, 1283,
+       1196, 661,
+       1309, 763,
        1315, 881,
-       1323, 1382,
-       1355, 1411,
-       1356, 1412,
-       1357, 1413,
+       1316, 882,
+       1317, 883,
+       1318, 884,
+       1326, 1385,
        1358, 1414,
-       1360, 1417,
-       1361, 1418,
-       1409, 1454,
-       1486, 1509,
-       1487, 1510,
-       1488, 1511,
-       1489, 1512
+       1359, 1415,
+       1360, 1416,
+       1361, 1417,
+       1363, 1420,
+       1364, 1421,
+       1412, 1457,
+       1489, 1512,
+       1490, 1513,
+       1491, 1514,
+       1492, 1515
 };
 static int parser_goto_row58[] = {
        50,
-       -1, 163,
-       39, 181,
-       149, 295,
-       150, 296,
-       179, 181,
-       191, 347,
-       192, 348,
-       219, 378,
-       244, 394,
-       255, 402,
-       302, 437,
-       368, 402,
-       374, 515,
-       393, 402,
-       522, 402,
-       670, 181,
-       674, 181,
-       696, 795,
-       721, 815,
-       755, 883,
-       768, 892,
-       770, 893,
-       777, 181,
-       797, 916,
-       812, 942,
-       901, 181,
-       902, 181,
-       904, 181,
-       905, 181,
-       906, 181,
-       907, 181,
-       954, 1092,
-       965, 1101,
-       1060, 181,
-       1080, 942,
-       1193, 181,
-       1210, 1319,
-       1219, 942,
-       1284, 942,
-       1306, 181,
-       1311, 1373,
-       1312, 181,
-       1313, 181,
-       1314, 181,
-       1315, 181,
-       1321, 1380,
-       1383, 1427,
-       1431, 942,
-       1481, 1507,
-       1490, 1513
+       -1, 162,
+       39, 180,
+       148, 293,
+       149, 294,
+       178, 180,
+       190, 345,
+       191, 346,
+       218, 377,
+       242, 393,
+       253, 401,
+       300, 436,
+       367, 401,
+       373, 515,
+       392, 401,
+       522, 401,
+       672, 180,
+       676, 180,
+       698, 798,
+       723, 818,
+       758, 886,
+       771, 895,
+       773, 896,
+       780, 180,
+       800, 919,
+       815, 945,
+       904, 180,
+       905, 180,
+       907, 180,
+       908, 180,
+       909, 180,
+       910, 180,
+       957, 1095,
+       968, 1104,
+       1063, 180,
+       1083, 945,
+       1196, 180,
+       1213, 1322,
+       1222, 945,
+       1287, 945,
+       1309, 180,
+       1314, 1376,
+       1315, 180,
+       1316, 180,
+       1317, 180,
+       1318, 180,
+       1324, 1383,
+       1386, 1430,
+       1434, 945,
+       1484, 1510,
+       1493, 1516
 };
 static int parser_goto_row59[] = {
        1,
-       -1, 164
+       -1, 163
 };
 static int parser_goto_row60[] = {
        6,
-       -1, 165,
-       303, 438,
-       444, 570,
-       446, 572,
-       447, 573,
-       571, 700
+       -1, 164,
+       301, 437,
+       443, 570,
+       445, 572,
+       446, 573,
+       571, 702
 };
 static int parser_goto_row61[] = {
        1,
-       -1, 166
+       -1, 165
 };
 static int parser_goto_row62[] = {
        10,
-       -1, 167,
-       448, 574,
-       449, 575,
-       453, 579,
-       454, 580,
-       455, 581,
-       456, 582,
-       457, 583,
-       458, 584,
-       459, 585
+       -1, 166,
+       447, 574,
+       448, 575,
+       452, 579,
+       453, 580,
+       454, 581,
+       455, 582,
+       456, 583,
+       457, 584,
+       458, 585
 };
 static int parser_goto_row63[] = {
        3,
-       -1, 168,
-       451, 577,
-       452, 578
+       -1, 167,
+       450, 577,
+       451, 578
 };
 static int parser_goto_row64[] = {
        5,
-       -1, 169,
-       460, 586,
-       461, 587,
-       462, 588,
-       463, 589
+       -1, 168,
+       459, 586,
+       460, 587,
+       461, 588,
+       462, 589
 };
 static int parser_goto_row65[] = {
        3,
-       -1, 170,
-       305, 440,
-       308, 443
+       -1, 169,
+       303, 439,
+       306, 442
 };
 static int parser_goto_row66[] = {
        1,
-       -1, 171
+       -1, 170
 };
 static int parser_goto_row67[] = {
        47,
-       -1, 172,
+       -1, 171,
        12, 71,
        22, 71,
        28, 71,
        32, 71,
-       92, 71,
-       96, 71,
-       145, 71,
-       160, 306,
-       207, 71,
-       337, 71,
-       367, 71,
-       427, 71,
-       465, 71,
-       468, 71,
+       91, 71,
+       95, 71,
+       144, 71,
+       159, 304,
+       206, 71,
+       335, 71,
+       366, 71,
+       426, 71,
+       464, 71,
+       467, 71,
        558, 71,
-       562, 678,
+       562, 680,
        563, 71,
-       663, 678,
-       666, 71,
-       668, 678,
-       682, 71,
-       735, 71,
-       763, 71,
-       790, 71,
-       812, 943,
-       862, 71,
-       898, 678,
-       1056, 678,
-       1058, 71,
-       1074, 71,
-       1080, 943,
-       1195, 678,
-       1196, 678,
-       1219, 943,
-       1284, 943,
-       1370, 678,
-       1402, 71,
-       1425, 71,
-       1431, 943,
-       1436, 71,
-       1441, 71,
-       1446, 71,
-       1460, 678,
-       1473, 71,
-       1477, 71,
-       1531, 678
+       665, 680,
+       668, 71,
+       670, 680,
+       684, 71,
+       738, 71,
+       766, 71,
+       793, 71,
+       815, 946,
+       865, 71,
+       901, 680,
+       1059, 680,
+       1061, 71,
+       1077, 71,
+       1083, 946,
+       1198, 680,
+       1199, 680,
+       1222, 946,
+       1287, 946,
+       1373, 680,
+       1405, 71,
+       1428, 71,
+       1434, 946,
+       1439, 71,
+       1444, 71,
+       1449, 71,
+       1463, 680,
+       1476, 71,
+       1480, 71,
+       1534, 680
 };
 static int parser_goto_row68[] = {
        1,
@@ -17117,80 +17135,80 @@ static int parser_goto_row68[] = {
 static int parser_goto_row69[] = {
        75,
        -1, 73,
-       26, 124,
-       78, 124,
-       116, 124,
-       221, 124,
-       225, 124,
-       227, 124,
-       245, 124,
-       247, 124,
-       256, 124,
-       388, 124,
-       406, 124,
-       408, 124,
-       409, 124,
-       410, 124,
-       411, 124,
-       413, 124,
-       414, 124,
-       415, 124,
-       416, 124,
-       417, 124,
-       418, 124,
-       419, 124,
-       420, 124,
-       421, 124,
-       422, 124,
-       423, 124,
-       424, 124,
-       425, 124,
-       507, 124,
-       510, 124,
-       534, 124,
-       643, 124,
-       644, 124,
-       662, 124,
-       680, 124,
-       722, 833,
-       753, 124,
-       782, 124,
-       786, 124,
-       791, 124,
-       808, 124,
-       825, 833,
-       913, 124,
-       955, 833,
-       957, 833,
-       966, 833,
-       1032, 124,
-       1061, 124,
-       1063, 124,
-       1106, 833,
-       1108, 833,
-       1109, 833,
-       1110, 833,
-       1111, 833,
-       1113, 833,
-       1114, 833,
-       1115, 833,
-       1116, 833,
-       1117, 833,
-       1118, 833,
-       1119, 833,
-       1120, 833,
-       1121, 833,
-       1122, 833,
-       1123, 833,
-       1124, 833,
-       1125, 833,
-       1207, 124,
-       1208, 124,
-       1233, 833,
-       1302, 124,
-       1318, 124,
-       1339, 124,
-       1515, 833
+       26, 123,
+       77, 123,
+       115, 123,
+       219, 123,
+       223, 123,
+       225, 123,
+       243, 123,
+       245, 123,
+       254, 123,
+       387, 123,
+       405, 123,
+       407, 123,
+       408, 123,
+       409, 123,
+       410, 123,
+       412, 123,
+       413, 123,
+       414, 123,
+       415, 123,
+       416, 123,
+       417, 123,
+       418, 123,
+       419, 123,
+       420, 123,
+       421, 123,
+       422, 123,
+       423, 123,
+       424, 123,
+       507, 123,
+       510, 123,
+       534, 123,
+       645, 123,
+       646, 123,
+       664, 123,
+       682, 123,
+       724, 836,
+       756, 123,
+       785, 123,
+       789, 123,
+       794, 123,
+       811, 123,
+       828, 836,
+       916, 123,
+       958, 836,
+       960, 836,
+       969, 836,
+       1035, 123,
+       1064, 123,
+       1066, 123,
+       1109, 836,
+       1111, 836,
+       1112, 836,
+       1113, 836,
+       1114, 836,
+       1116, 836,
+       1117, 836,
+       1118, 836,
+       1119, 836,
+       1120, 836,
+       1121, 836,
+       1122, 836,
+       1123, 836,
+       1124, 836,
+       1125, 836,
+       1126, 836,
+       1127, 836,
+       1128, 836,
+       1210, 123,
+       1211, 123,
+       1236, 836,
+       1305, 123,
+       1321, 123,
+       1342, 123,
+       1518, 836
 };
 static int parser_goto_row70[] = {
        1,
@@ -17202,281 +17220,417 @@ static int parser_goto_row71[] = {
 };
 static int parser_goto_row72[] = {
        2,
-       -1, 215,
-       218, 376
+       -1, 214,
+       217, 375
 };
 static int parser_goto_row73[] = {
        1,
-       -1, 216
+       -1, 215
 };
 static int parser_goto_row74[] = {
        2,
-       -1, 217,
-       218, 377
+       -1, 216,
+       217, 376
 };
 static int parser_goto_row75[] = {
        14,
-       -1, 185,
-       147, 294,
-       767, 891,
-       812, 944,
-       854, 1003,
-       1021, 1144,
-       1032, 1168,
-       1080, 944,
-       1219, 944,
-       1284, 944,
-       1339, 1391,
-       1410, 1455,
-       1431, 944,
-       1497, 1518
+       -1, 184,
+       146, 292,
+       770, 894,
+       815, 947,
+       857, 1006,
+       1024, 1147,
+       1035, 1171,
+       1083, 947,
+       1222, 947,
+       1287, 947,
+       1342, 1394,
+       1413, 1458,
+       1434, 947,
+       1500, 1521
 };
 static int parser_goto_row76[] = {
        45,
-       -1, 479,
-       41, 186,
-       42, 187,
-       43, 188,
-       44, 189,
-       50, 195,
-       51, 196,
-       52, 197,
-       53, 198,
-       55, 199,
-       76, 220,
-       112, 248,
-       113, 249,
-       114, 250,
-       115, 251,
-       119, 257,
-       120, 258,
-       121, 259,
-       122, 260,
-       123, 261,
-       217, 375,
-       377, 516,
-       477, 611,
-       609, 717,
-       614, 720,
-       808, 924,
-       821, 958,
-       822, 959,
-       823, 960,
+       -1, 478,
+       41, 185,
+       42, 186,
+       43, 187,
+       44, 188,
+       50, 194,
+       51, 195,
+       52, 196,
+       53, 197,
+       55, 198,
+       111, 246,
+       112, 247,
+       113, 248,
+       114, 249,
+       118, 255,
+       119, 256,
+       120, 257,
+       121, 258,
+       122, 259,
+       216, 374,
+       376, 516,
+       476, 611,
+       609, 719,
+       614, 722,
+       619, 726,
+       811, 927,
        824, 961,
-       828, 967,
-       829, 968,
-       830, 969,
+       825, 962,
+       826, 963,
+       827, 964,
        831, 970,
        832, 971,
-       854, 1004,
-       951, 1091,
-       1090, 1221,
-       1104, 1230,
-       1105, 1231,
-       1218, 1325,
-       1239, 1334,
-       1331, 1386,
-       1333, 1387,
-       1381, 1426
+       833, 972,
+       834, 973,
+       835, 974,
+       857, 1007,
+       954, 1094,
+       1093, 1224,
+       1107, 1233,
+       1108, 1234,
+       1221, 1328,
+       1242, 1337,
+       1334, 1389,
+       1336, 1390,
+       1384, 1429
 };
 static int parser_goto_row77[] = {
        1,
-       -1, 343
+       -1, 341
 };
 static int parser_goto_row78[] = {
        3,
-       -1, 849,
-       734, 859,
-       1401, 1443
+       -1, 852,
+       737, 862,
+       1404, 1446
 };
 static int parser_goto_row79[] = {
        3,
-       -1, 850,
-       475, 604,
-       706, 804
+       -1, 853,
+       474, 604,
+       708, 807
 };
 static int parser_goto_row80[] = {
        2,
        -1, 605,
-       810, 927
+       813, 930
 };
 static int parser_goto_row81[] = {
        1,
-       -1, 925
+       -1, 928
 };
 static int parser_goto_row82[] = {
        2,
-       -1, 714,
-       715, 811
+       -1, 716,
+       717, 814
 };
 static int parser_goto_row83[] = {
        3,
-       -1, 998,
-       860, 1016,
-       1444, 1478
+       -1, 1001,
+       863, 1019,
+       1447, 1481
 };
 static int parser_goto_row84[] = {
        2,
-       -1, 999,
-       1001, 1129
+       -1, 1002,
+       1004, 1132
 };
 static int parser_goto_row85[] = {
        2,
-       -1, 870,
-       874, 1039
+       -1, 873,
+       877, 1042
 };
 static int parser_goto_row86[] = {
        4,
-       -1, 945,
-       1080, 1215,
-       1284, 1354,
-       1431, 1467
+       -1, 948,
+       1083, 1218,
+       1287, 1357,
+       1434, 1470
 };
 static int parser_goto_row87[] = {
        3,
-       -1, 1088,
-       1089, 1220,
-       1291, 1220
+       -1, 1091,
+       1092, 1223,
+       1294, 1223
 };
 static int parser_goto_row88[] = {
        2,
-       -1, 946,
-       1219, 1326
+       -1, 949,
+       1222, 1329
 };
 static int parser_goto_row89[] = {
        4,
        -1, 609,
-       707, 805,
-       711, 808,
-       1258, 1339
+       709, 808,
+       713, 811,
+       1261, 1342
 };
 static int parser_goto_row90[] = {
        33,
-       -1, 125,
-       78, 223,
-       107, 243,
-       128, 264,
-       174, 332,
-       221, 379,
-       262, 405,
-       330, 379,
-       396, 528,
-       439, 568,
-       507, 637,
-       510, 641,
-       553, 654,
-       556, 657,
-       590, 637,
-       592, 702,
-       680, 784,
-       708, 806,
-       756, 884,
-       782, 379,
-       816, 953,
-       835, 974,
-       948, 223,
-       972, 1103,
-       1061, 637,
-       1063, 1205,
-       1096, 1226,
-       1170, 1287,
-       1254, 1335,
+       -1, 124,
+       77, 221,
+       106, 241,
+       127, 262,
+       173, 330,
+       219, 378,
+       260, 404,
+       328, 378,
+       395, 528,
+       438, 568,
+       507, 639,
+       510, 643,
+       553, 656,
+       556, 659,
+       590, 639,
+       592, 704,
+       682, 787,
+       710, 809,
+       759, 887,
+       785, 378,
+       819, 956,
+       838, 977,
+       951, 221,
+       975, 1106,
+       1064, 639,
+       1066, 1208,
+       1099, 1229,
+       1173, 1290,
        1257, 1338,
-       1324, 641,
-       1384, 1428,
-       1416, 1458
+       1260, 1341,
+       1327, 643,
+       1387, 1431,
+       1419, 1461
 };
 static int parser_goto_row91[] = {
        22,
-       -1, 126,
-       78, 224,
-       221, 380,
+       -1, 125,
+       77, 222,
+       219, 379,
+       223, 385,
        225, 386,
-       227, 387,
-       388, 523,
-       507, 638,
-       510, 642,
-       643, 751,
-       644, 752,
-       662, 761,
-       680, 785,
-       753, 882,
-       782, 903,
-       786, 908,
-       791, 912,
-       913, 1072,
-       1061, 1203,
-       1063, 1206,
-       1207, 1316,
-       1208, 1317,
-       1318, 1378
+       387, 523,
+       507, 640,
+       510, 644,
+       645, 754,
+       646, 755,
+       664, 764,
+       682, 788,
+       756, 885,
+       785, 906,
+       789, 911,
+       794, 915,
+       916, 1075,
+       1064, 1206,
+       1066, 1209,
+       1210, 1319,
+       1211, 1320,
+       1321, 1381
 };
 static int parser_goto_row92[] = {
-       9,
-       -1, 76,
-       71, 212,
-       139, 286,
-       172, 329,
-       254, 286,
-       306, 329,
-       678, 781,
-       943, 212,
-       1174, 1289
+       7,
+       -1, 284,
+       71, 211,
+       171, 327,
+       304, 327,
+       680, 784,
+       946, 211,
+       1177, 1292
 };
 static int parser_goto_row93[] = {
-       4,
-       -1, 349,
-       255, 403,
-       393, 525,
-       522, 648
+       1,
+       -1, 347
 };
 static int parser_goto_row94[] = {
+       5,
+       -1, 348,
+       253, 402,
+       367, 506,
+       392, 525,
+       522, 650
+};
+static int parser_goto_row95[] = {
        2,
        -1, 617,
-       618, 723
+       618, 725
 };
-static int parser_goto_row95[] = {
+static int parser_goto_row96[] = {
        4,
-       -1, 300,
-       434, 564,
-       773, 896,
-       1054, 1197
+       -1, 298,
+       433, 564,
+       776, 899,
+       1057, 1200
 };
-static int parser_goto_row96[] = {
+static int parser_goto_row97[] = {
        2,
-       -1, 621,
-       485, 624
+       -1, 622,
+       484, 625
 };
-static int parser_goto_row97[] = {
+static int parser_goto_row98[] = {
        130,
+       -1, 172,
+       12, 76,
+       22, 76,
+       26, 126,
+       28, 76,
+       32, 76,
+       77, 126,
+       91, 76,
+       95, 76,
+       115, 251,
+       144, 76,
+       159, 305,
+       206, 76,
+       219, 126,
+       223, 126,
+       225, 126,
+       243, 126,
+       245, 126,
+       254, 126,
+       335, 76,
+       366, 76,
+       368, 509,
+       387, 126,
+       405, 126,
+       407, 126,
+       408, 126,
+       409, 126,
+       410, 126,
+       412, 126,
+       413, 126,
+       414, 126,
+       415, 126,
+       416, 126,
+       417, 126,
+       418, 126,
+       419, 126,
+       420, 126,
+       421, 126,
+       422, 126,
+       423, 126,
+       424, 126,
+       425, 555,
+       426, 76,
+       463, 591,
+       464, 76,
+       467, 76,
+       507, 126,
+       510, 126,
+       530, 654,
+       534, 126,
+       558, 76,
+       562, 681,
+       563, 76,
+       569, 701,
+       645, 126,
+       646, 126,
+       664, 126,
+       665, 681,
+       668, 76,
+       670, 681,
+       682, 126,
+       684, 76,
+       724, 837,
+       738, 76,
+       756, 126,
+       766, 76,
+       785, 126,
+       789, 126,
+       793, 76,
+       794, 126,
+       815, 950,
+       828, 966,
+       865, 76,
+       901, 681,
+       903, 1065,
+       916, 126,
+       958, 837,
+       960, 837,
+       969, 837,
+       1035, 1172,
+       1059, 681,
+       1061, 76,
+       1064, 126,
+       1066, 126,
+       1077, 76,
+       1083, 950,
+       1109, 837,
+       1111, 837,
+       1112, 837,
+       1113, 837,
+       1114, 837,
+       1116, 837,
+       1117, 837,
+       1118, 837,
+       1119, 837,
+       1120, 837,
+       1121, 837,
+       1122, 837,
+       1123, 837,
+       1124, 837,
+       1125, 837,
+       1126, 837,
+       1127, 837,
+       1128, 837,
+       1129, 1259,
+       1198, 681,
+       1199, 681,
+       1210, 126,
+       1211, 126,
+       1220, 509,
+       1222, 950,
+       1231, 1333,
+       1236, 837,
+       1287, 950,
+       1305, 126,
+       1321, 126,
+       1342, 1172,
+       1362, 1418,
+       1373, 681,
+       1405, 76,
+       1428, 76,
+       1434, 950,
+       1439, 76,
+       1444, 76,
+       1449, 76,
+       1463, 681,
+       1476, 76,
+       1480, 76,
+       1518, 837,
+       1534, 681
+};
+static int parser_goto_row99[] = {
+       132,
        -1, 173,
        12, 77,
        22, 77,
        26, 127,
        28, 77,
        32, 77,
-       78, 127,
-       92, 77,
-       96, 77,
-       116, 253,
-       145, 77,
-       160, 307,
-       207, 77,
-       221, 127,
+       77, 127,
+       91, 77,
+       95, 77,
+       115, 127,
+       144, 77,
+       206, 77,
+       219, 127,
+       223, 127,
        225, 127,
-       227, 127,
+       243, 127,
        245, 127,
-       247, 127,
-       256, 127,
-       337, 77,
-       367, 77,
-       369, 509,
-       388, 127,
-       406, 127,
+       254, 127,
+       335, 77,
+       366, 77,
+       368, 510,
+       387, 127,
+       405, 127,
+       407, 127,
        408, 127,
        409, 127,
        410, 127,
-       411, 127,
+       412, 127,
        413, 127,
        414, 127,
        415, 127,
@@ -17489,341 +17643,208 @@ static int parser_goto_row97[] = {
        422, 127,
        423, 127,
        424, 127,
-       425, 127,
-       426, 555,
-       427, 77,
-       464, 591,
-       465, 77,
-       468, 77,
+       425, 556,
+       426, 77,
+       463, 592,
+       464, 77,
+       467, 77,
        507, 127,
        510, 127,
-       530, 652,
+       530, 556,
        534, 127,
        558, 77,
-       562, 679,
+       562, 682,
        563, 77,
-       569, 699,
-       643, 127,
-       644, 127,
-       662, 127,
-       663, 679,
-       666, 77,
-       668, 679,
-       680, 127,
-       682, 77,
-       722, 834,
-       735, 77,
-       753, 127,
-       763, 77,
-       782, 127,
-       786, 127,
-       790, 77,
-       791, 127,
-       812, 947,
-       825, 963,
-       862, 77,
-       898, 679,
-       900, 1062,
-       913, 127,
-       955, 834,
-       957, 834,
-       966, 834,
-       1032, 1169,
-       1056, 679,
-       1058, 77,
-       1061, 127,
-       1063, 127,
-       1074, 77,
-       1080, 947,
-       1106, 834,
-       1108, 834,
-       1109, 834,
-       1110, 834,
-       1111, 834,
-       1113, 834,
-       1114, 834,
-       1115, 834,
-       1116, 834,
-       1117, 834,
-       1118, 834,
-       1119, 834,
-       1120, 834,
-       1121, 834,
-       1122, 834,
-       1123, 834,
-       1124, 834,
-       1125, 834,
-       1126, 1256,
-       1195, 679,
-       1196, 679,
-       1207, 127,
-       1208, 127,
-       1217, 509,
-       1219, 947,
-       1228, 1330,
-       1233, 834,
-       1284, 947,
-       1302, 127,
-       1318, 127,
-       1339, 1169,
-       1359, 1415,
-       1370, 679,
-       1402, 77,
-       1425, 77,
-       1431, 947,
-       1436, 77,
-       1441, 77,
-       1446, 77,
-       1460, 679,
-       1473, 77,
-       1477, 77,
-       1515, 834,
-       1531, 679
-};
-static int parser_goto_row98[] = {
-       132,
-       -1, 174,
-       12, 78,
-       22, 78,
-       26, 128,
-       28, 78,
-       32, 78,
-       78, 128,
-       92, 78,
-       96, 78,
-       116, 128,
-       145, 78,
-       207, 78,
-       221, 128,
-       225, 128,
-       227, 128,
-       245, 128,
-       247, 128,
-       256, 128,
-       337, 78,
-       367, 78,
-       369, 510,
-       388, 128,
-       406, 128,
-       408, 128,
-       409, 128,
-       410, 128,
-       411, 128,
-       413, 128,
-       414, 128,
-       415, 128,
-       416, 128,
-       417, 128,
-       418, 128,
-       419, 128,
-       420, 128,
-       421, 128,
-       422, 128,
-       423, 128,
-       424, 128,
-       425, 128,
-       426, 556,
-       427, 78,
-       464, 592,
-       465, 78,
-       468, 78,
-       507, 128,
-       510, 128,
-       530, 556,
-       534, 128,
-       558, 78,
-       562, 680,
-       563, 78,
        569, 592,
-       602, 708,
-       643, 128,
-       644, 128,
-       651, 756,
-       662, 128,
-       663, 680,
-       666, 78,
-       668, 680,
-       680, 128,
-       682, 78,
-       722, 835,
-       735, 78,
-       753, 128,
-       763, 78,
-       782, 128,
-       786, 128,
-       790, 78,
-       791, 128,
-       812, 948,
-       825, 835,
-       862, 78,
-       898, 680,
-       900, 1063,
-       913, 128,
-       955, 835,
-       957, 835,
-       966, 835,
-       1032, 1170,
-       1056, 680,
-       1058, 78,
-       1061, 128,
-       1063, 128,
-       1074, 78,
-       1080, 948,
-       1106, 835,
-       1108, 835,
-       1109, 835,
-       1110, 835,
-       1111, 835,
-       1113, 835,
-       1114, 835,
-       1115, 835,
-       1116, 835,
-       1117, 835,
-       1118, 835,
-       1119, 835,
-       1120, 835,
-       1121, 835,
-       1122, 835,
-       1123, 835,
-       1124, 835,
-       1125, 835,
-       1126, 1257,
-       1195, 680,
-       1196, 680,
-       1207, 128,
-       1208, 128,
-       1217, 1324,
-       1219, 948,
-       1228, 1257,
-       1233, 835,
-       1284, 948,
-       1302, 128,
-       1318, 128,
-       1329, 1384,
-       1339, 1170,
-       1359, 1416,
-       1370, 680,
-       1402, 78,
-       1425, 78,
-       1431, 948,
-       1436, 78,
-       1441, 78,
-       1446, 78,
-       1460, 680,
-       1473, 78,
-       1477, 78,
-       1515, 835,
-       1531, 680
-};
-static int parser_goto_row99[] = {
-       1,
-       -1, 634
+       602, 710,
+       645, 127,
+       646, 127,
+       653, 759,
+       664, 127,
+       665, 682,
+       668, 77,
+       670, 682,
+       682, 127,
+       684, 77,
+       724, 838,
+       738, 77,
+       756, 127,
+       766, 77,
+       785, 127,
+       789, 127,
+       793, 77,
+       794, 127,
+       815, 951,
+       828, 838,
+       865, 77,
+       901, 682,
+       903, 1066,
+       916, 127,
+       958, 838,
+       960, 838,
+       969, 838,
+       1035, 1173,
+       1059, 682,
+       1061, 77,
+       1064, 127,
+       1066, 127,
+       1077, 77,
+       1083, 951,
+       1109, 838,
+       1111, 838,
+       1112, 838,
+       1113, 838,
+       1114, 838,
+       1116, 838,
+       1117, 838,
+       1118, 838,
+       1119, 838,
+       1120, 838,
+       1121, 838,
+       1122, 838,
+       1123, 838,
+       1124, 838,
+       1125, 838,
+       1126, 838,
+       1127, 838,
+       1128, 838,
+       1129, 1260,
+       1198, 682,
+       1199, 682,
+       1210, 127,
+       1211, 127,
+       1220, 1327,
+       1222, 951,
+       1231, 1260,
+       1236, 838,
+       1287, 951,
+       1305, 127,
+       1321, 127,
+       1332, 1387,
+       1342, 1173,
+       1362, 1419,
+       1373, 682,
+       1405, 77,
+       1428, 77,
+       1434, 951,
+       1439, 77,
+       1444, 77,
+       1449, 77,
+       1463, 682,
+       1476, 77,
+       1480, 77,
+       1518, 838,
+       1534, 682
 };
 static int parser_goto_row100[] = {
-       10,
-       -1, 79,
-       81, 229,
-       141, 229,
-       512, 229,
-       622, 229,
-       636, 229,
-       692, 229,
-       710, 229,
-       848, 229,
-       1065, 229
-};
-static int parser_goto_row101[] = {
-       54,
-       -1, 129,
-       12, 80,
-       22, 80,
-       28, 80,
-       32, 80,
-       81, 230,
-       92, 80,
-       96, 80,
-       141, 287,
-       145, 80,
-       207, 80,
-       337, 80,
-       367, 80,
-       369, 511,
-       427, 80,
-       465, 80,
-       468, 80,
-       506, 635,
-       512, 645,
-       558, 80,
-       562, 681,
-       563, 80,
-       602, 709,
-       636, 744,
-       651, 709,
-       663, 681,
-       666, 80,
-       668, 681,
-       682, 80,
-       692, 792,
-       710, 807,
-       735, 80,
-       763, 80,
-       790, 80,
-       862, 80,
-       898, 681,
-       900, 1064,
-       1056, 681,
-       1058, 80,
-       1065, 1209,
-       1074, 80,
-       1195, 681,
-       1196, 681,
-       1329, 709,
-       1370, 681,
-       1402, 80,
-       1425, 80,
-       1436, 80,
-       1441, 80,
-       1446, 80,
-       1460, 681,
-       1473, 80,
-       1477, 80,
-       1531, 681
+       1,
+       -1, 635
+};
+static int parser_goto_row101[] = {
+       10,
+       -1, 78,
+       80, 227,
+       140, 227,
+       512, 227,
+       623, 227,
+       637, 227,
+       694, 227,
+       712, 227,
+       851, 227,
+       1068, 227
 };
 static int parser_goto_row102[] = {
-       8,
-       -1, 1018,
-       1019, 1142,
-       1445, 1479,
-       1472, 1501,
-       1476, 1504,
-       1480, 1506,
-       1502, 1523,
-       1505, 1524
+       54,
+       -1, 128,
+       12, 79,
+       22, 79,
+       28, 79,
+       32, 79,
+       80, 228,
+       91, 79,
+       95, 79,
+       140, 285,
+       144, 79,
+       206, 79,
+       335, 79,
+       366, 79,
+       368, 511,
+       426, 79,
+       464, 79,
+       467, 79,
+       505, 636,
+       512, 647,
+       558, 79,
+       562, 683,
+       563, 79,
+       602, 711,
+       637, 747,
+       653, 711,
+       665, 683,
+       668, 79,
+       670, 683,
+       684, 79,
+       694, 795,
+       712, 810,
+       738, 79,
+       766, 79,
+       793, 79,
+       865, 79,
+       901, 683,
+       903, 1067,
+       1059, 683,
+       1061, 79,
+       1068, 1212,
+       1077, 79,
+       1198, 683,
+       1199, 683,
+       1332, 711,
+       1373, 683,
+       1405, 79,
+       1428, 79,
+       1439, 79,
+       1444, 79,
+       1449, 79,
+       1463, 683,
+       1476, 79,
+       1480, 79,
+       1534, 683
 };
 static int parser_goto_row103[] = {
-       18,
-       -1, 85,
-       623, 728,
-       725, 851,
-       726, 852,
-       729, 853,
-       734, 860,
-       868, 1023,
-       1032, 1171,
-       1168, 1285,
-       1175, 1290,
-       1339, 1392,
-       1391, 1432,
-       1393, 1433,
-       1401, 1444,
-       1410, 1456,
-       1455, 1485,
-       1497, 1519,
-       1518, 1529
+       8,
+       -1, 1021,
+       1022, 1145,
+       1448, 1482,
+       1475, 1504,
+       1479, 1507,
+       1483, 1509,
+       1505, 1526,
+       1508, 1527
 };
 static int parser_goto_row104[] = {
+       18,
+       -1, 84,
+       624, 731,
+       728, 854,
+       729, 855,
+       732, 856,
+       737, 863,
+       871, 1026,
+       1035, 1174,
+       1171, 1288,
+       1178, 1293,
+       1342, 1395,
+       1394, 1435,
+       1396, 1436,
+       1404, 1447,
+       1413, 1459,
+       1458, 1488,
+       1500, 1522,
+       1521, 1532
+};
+static int parser_goto_row105[] = {
        50,
-       -1, 148,
+       -1, 147,
        0, 11,
        4, 11,
        16, 11,
@@ -17832,224 +17853,221 @@ static int parser_goto_row104[] = {
        23, 11,
        24, 11,
        25, 11,
-       28, 145,
-       32, 145,
-       62, 207,
+       28, 144,
+       32, 144,
+       62, 206,
+       87, 11,
        88, 11,
-       89, 11,
-       93, 11,
+       92, 11,
+       101, 11,
        102, 11,
-       103, 11,
-       105, 11,
-       208, 367,
-       233, 11,
-       239, 11,
-       290, 427,
-       337, 468,
-       428, 558,
-       465, 468,
-       562, 682,
-       563, 145,
-       663, 763,
-       666, 468,
-       668, 763,
-       735, 468,
-       788, 207,
-       790, 468,
-       862, 468,
-       898, 1058,
-       910, 367,
-       1056, 1058,
-       1074, 145,
-       1195, 682,
-       1196, 763,
-       1370, 1058,
-       1402, 468,
-       1425, 145,
-       1436, 468,
-       1441, 468,
-       1446, 468,
-       1460, 763,
-       1473, 468,
-       1477, 468,
-       1531, 763
+       104, 11,
+       207, 366,
+       231, 11,
+       237, 11,
+       288, 426,
+       335, 467,
+       427, 558,
+       464, 467,
+       562, 684,
+       563, 144,
+       665, 766,
+       668, 467,
+       670, 766,
+       738, 467,
+       791, 206,
+       793, 467,
+       865, 467,
+       901, 1061,
+       913, 366,
+       1059, 1061,
+       1077, 144,
+       1198, 684,
+       1199, 766,
+       1373, 1061,
+       1405, 467,
+       1428, 144,
+       1439, 467,
+       1444, 467,
+       1449, 467,
+       1463, 766,
+       1476, 467,
+       1480, 467,
+       1534, 766
 };
-static int parser_goto_row105[] = {
+static int parser_goto_row106[] = {
        263,
-       -1, 96,
+       -1, 95,
        0, 12,
        4, 22,
        16, 22,
-       17, 92,
+       17, 91,
        23, 22,
-       24, 92,
-       30, 149,
-       31, 150,
-       33, 153,
-       34, 154,
-       40, 183,
-       46, 191,
-       47, 192,
-       75, 219,
-       88, 92,
-       102, 92,
-       108, 244,
-       109, 245,
-       110, 246,
-       111, 247,
-       117, 255,
-       118, 256,
-       156, 302,
-       157, 303,
-       158, 304,
-       159, 305,
-       161, 308,
+       24, 91,
+       30, 148,
+       31, 149,
+       33, 152,
+       34, 153,
+       40, 182,
+       46, 190,
+       47, 191,
+       75, 218,
+       87, 91,
+       101, 91,
+       107, 242,
+       108, 243,
+       109, 244,
+       110, 245,
+       116, 253,
+       117, 254,
+       155, 300,
+       156, 301,
+       157, 302,
+       158, 303,
+       160, 306,
+       192, 349,
        193, 350,
-       194, 351,
+       199, 351,
        200, 352,
        201, 353,
        202, 354,
-       203, 355,
-       209, 368,
-       211, 369,
-       216, 374,
-       242, 393,
-       252, 398,
-       265, 406,
-       266, 408,
-       267, 409,
-       268, 410,
-       269, 411,
-       270, 412,
-       271, 413,
-       272, 414,
-       273, 415,
-       274, 416,
-       275, 417,
-       276, 418,
-       277, 419,
-       278, 420,
-       279, 421,
-       280, 422,
-       281, 423,
-       282, 424,
+       208, 367,
+       210, 368,
+       215, 373,
+       240, 392,
+       250, 397,
+       263, 405,
+       264, 407,
+       265, 408,
+       266, 409,
+       267, 410,
+       268, 411,
+       269, 412,
+       270, 413,
+       271, 414,
+       272, 415,
+       273, 416,
+       274, 417,
+       275, 418,
+       276, 419,
+       277, 420,
+       278, 421,
+       279, 422,
+       280, 423,
+       281, 424,
        283, 425,
-       285, 426,
-       292, 429,
-       295, 432,
+       290, 428,
+       293, 431,
+       294, 432,
        296, 433,
        298, 434,
-       300, 435,
-       301, 436,
-       309, 444,
-       310, 446,
-       311, 447,
-       312, 448,
-       313, 449,
-       314, 450,
-       315, 451,
-       316, 452,
-       317, 453,
-       318, 454,
-       319, 455,
-       320, 456,
-       321, 457,
-       322, 458,
-       323, 459,
-       324, 460,
-       325, 461,
-       326, 462,
-       327, 463,
-       328, 464,
-       341, 475,
-       347, 481,
-       348, 482,
+       299, 435,
+       307, 443,
+       308, 445,
+       309, 446,
+       310, 447,
+       311, 448,
+       312, 449,
+       313, 450,
+       314, 451,
+       315, 452,
+       316, 453,
+       317, 454,
+       318, 455,
+       319, 456,
+       320, 457,
+       321, 458,
+       322, 459,
+       323, 460,
+       324, 461,
+       325, 462,
+       326, 463,
+       339, 474,
+       345, 480,
+       346, 481,
+       355, 483,
        356, 484,
-       357, 485,
-       364, 506,
-       378, 517,
-       385, 522,
-       394, 526,
-       400, 530,
-       402, 531,
-       407, 534,
-       430, 560,
-       437, 567,
-       441, 569,
-       445, 571,
-       470, 598,
-       474, 602,
-       478, 612,
-       504, 631,
-       508, 639,
-       515, 646,
-       527, 651,
-       554, 655,
-       561, 660,
-       564, 695,
-       565, 696,
-       566, 697,
-       596, 703,
-       599, 706,
-       604, 712,
-       610, 718,
-       615, 721,
-       616, 722,
-       619, 724,
-       627, 731,
-       628, 732,
-       630, 739,
-       650, 755,
-       665, 768,
-       667, 770,
+       363, 505,
+       377, 517,
+       384, 522,
+       393, 526,
+       399, 530,
+       401, 531,
+       406, 534,
+       429, 560,
+       436, 567,
+       440, 569,
+       444, 571,
+       469, 598,
+       473, 602,
+       477, 612,
+       503, 632,
+       508, 641,
+       515, 648,
+       527, 653,
+       554, 657,
+       561, 662,
+       564, 697,
+       565, 698,
+       566, 699,
+       596, 705,
+       599, 708,
+       604, 714,
+       610, 720,
+       615, 723,
+       616, 724,
+       620, 727,
+       628, 734,
+       629, 735,
+       631, 742,
+       652, 758,
+       667, 771,
        669, 773,
-       698, 797,
-       705, 803,
-       713, 810,
-       716, 812,
-       719, 814,
-       733, 858,
-       740, 865,
-       741, 871,
-       745, 876,
-       746, 877,
-       758, 885,
-       759, 886,
-       780, 900,
-       794, 914,
-       795, 915,
-       799, 917,
-       800, 918,
-       804, 921,
-       813, 950,
-       815, 952,
-       817, 954,
+       671, 776,
+       700, 800,
+       707, 806,
+       715, 813,
+       718, 815,
+       721, 817,
+       736, 861,
+       743, 868,
+       744, 874,
+       748, 879,
+       749, 880,
+       761, 888,
+       762, 889,
+       783, 903,
+       797, 917,
+       798, 918,
+       802, 920,
+       803, 921,
+       807, 924,
+       816, 953,
        818, 955,
-       819, 956,
        820, 957,
-       826, 965,
-       827, 966,
-       836, 975,
-       851, 1000,
-       856, 1008,
-       860, 1000,
-       869, 1024,
-       872, 1034,
-       873, 1037,
-       874, 1040,
-       883, 1046,
-       892, 1052,
-       893, 1053,
-       895, 1054,
-       896, 1055,
-       916, 1075,
-       923, 1080,
-       945, 1086,
-       962, 1098,
-       976, 1106,
-       977, 1108,
-       978, 1109,
-       979, 1110,
+       821, 958,
+       822, 959,
+       823, 960,
+       829, 968,
+       830, 969,
+       839, 978,
+       854, 1003,
+       859, 1011,
+       863, 1003,
+       872, 1027,
+       875, 1037,
+       876, 1040,
+       877, 1043,
+       886, 1049,
+       895, 1055,
+       896, 1056,
+       898, 1057,
+       899, 1058,
+       919, 1078,
+       926, 1083,
+       948, 1089,
+       965, 1101,
+       979, 1109,
        980, 1111,
        981, 1112,
        982, 1113,
@@ -18065,307 +18083,306 @@ static int parser_goto_row105[] = {
        992, 1123,
        993, 1124,
        994, 1125,
-       996, 1126,
-       1001, 1000,
-       1005, 1133,
-       1006, 1134,
-       1009, 1136,
-       1022, 1147,
+       995, 1126,
+       996, 1127,
+       997, 1128,
+       999, 1129,
+       1004, 1003,
+       1008, 1136,
+       1009, 1137,
+       1012, 1139,
        1025, 1150,
-       1026, 1152,
-       1029, 1153,
-       1035, 1179,
-       1038, 1181,
-       1041, 1185,
-       1042, 1187,
+       1028, 1153,
+       1029, 1155,
+       1032, 1156,
+       1038, 1182,
+       1041, 1184,
        1044, 1188,
-       1045, 1189,
-       1048, 1191,
-       1049, 1192,
-       1050, 1193,
-       1073, 1210,
-       1085, 1217,
-       1087, 1219,
-       1092, 1222,
-       1100, 1228,
-       1101, 1229,
-       1107, 1233,
-       1132, 1260,
-       1137, 1262,
-       1145, 1267,
+       1045, 1190,
+       1047, 1191,
+       1048, 1192,
+       1051, 1194,
+       1052, 1195,
+       1053, 1196,
+       1076, 1213,
+       1088, 1220,
+       1090, 1222,
+       1095, 1225,
+       1103, 1231,
+       1104, 1232,
+       1110, 1236,
+       1135, 1263,
+       1140, 1265,
        1148, 1270,
-       1151, 1272,
-       1160, 1284,
-       1182, 1294,
-       1183, 1296,
-       1186, 1298,
-       1190, 1302,
-       1194, 1306,
-       1197, 1310,
-       1198, 1311,
-       1213, 1321,
-       1215, 1322,
-       1225, 1329,
-       1255, 1336,
-       1264, 1341,
-       1277, 631,
-       1279, 631,
-       1288, 1359,
-       1295, 1363,
-       1300, 1366,
-       1303, 1368,
-       1319, 1379,
-       1327, 1383,
-       1346, 631,
-       1348, 631,
-       1351, 631,
-       1372, 1423,
-       1373, 1424,
-       1388, 1429,
-       1389, 1430,
-       1390, 1431,
-       1394, 1434,
-       1396, 1435,
-       1427, 1463,
-       1444, 1000,
-       1447, 1481,
-       1459, 1490,
-       1465, 1495,
-       1466, 1496,
-       1469, 1498,
-       1470, 1499,
-       1471, 1500,
-       1494, 1515,
-       1513, 1526,
-       1516, 1528,
-       1520, 1530
+       1151, 1273,
+       1154, 1275,
+       1163, 1287,
+       1185, 1297,
+       1186, 1299,
+       1189, 1301,
+       1193, 1305,
+       1197, 1309,
+       1200, 1313,
+       1201, 1314,
+       1216, 1324,
+       1218, 1325,
+       1228, 1332,
+       1258, 1339,
+       1267, 1344,
+       1280, 632,
+       1282, 632,
+       1291, 1362,
+       1298, 1366,
+       1303, 1369,
+       1306, 1371,
+       1322, 1382,
+       1330, 1386,
+       1349, 632,
+       1351, 632,
+       1354, 632,
+       1375, 1426,
+       1376, 1427,
+       1391, 1432,
+       1392, 1433,
+       1393, 1434,
+       1397, 1437,
+       1399, 1438,
+       1430, 1466,
+       1447, 1003,
+       1450, 1484,
+       1462, 1493,
+       1468, 1498,
+       1469, 1499,
+       1472, 1501,
+       1473, 1502,
+       1474, 1503,
+       1497, 1518,
+       1516, 1529,
+       1519, 1531,
+       1523, 1533
 };
-static int parser_goto_row106[] = {
+static int parser_goto_row107[] = {
        1,
        -1, 13
 };
-static int parser_goto_row107[] = {
+static int parser_goto_row108[] = {
        1,
        -1, 14
 };
-static int parser_goto_row108[] = {
+static int parser_goto_row109[] = {
        1,
        -1, 15
 };
-static int parser_goto_row109[] = {
+static int parser_goto_row110[] = {
        4,
-       -1, 738,
-       1352, 1408,
-       1398, 1439,
-       1405, 1451
+       -1, 741,
+       1355, 1411,
+       1401, 1442,
+       1408, 1454
 };
-static int parser_goto_row110[] = {
+static int parser_goto_row111[] = {
        1,
-       -1, 1240
+       -1, 1243
 };
-static int parser_goto_row111[] = {
+static int parser_goto_row112[] = {
        1,
        -1, -1
 };
-static int parser_goto_row112[] = {
+static int parser_goto_row113[] = {
        2,
-       -1, 836,
-       1515, 1527
+       -1, 839,
+       1518, 1530
 };
-static int parser_goto_row113[] = {
+static int parser_goto_row114[] = {
        1,
-       -1, 837
+       -1, 840
 };
-static int parser_goto_row114[] = {
+static int parser_goto_row115[] = {
        6,
-       -1, 838,
-       955, 1093,
-       1106, 1232,
-       1108, 1234,
+       -1, 841,
+       958, 1096,
        1109, 1235,
-       1233, 1332
+       1111, 1237,
+       1112, 1238,
+       1236, 1335
 };
-static int parser_goto_row115[] = {
+static int parser_goto_row116[] = {
        1,
-       -1, 839
+       -1, 842
 };
-static int parser_goto_row116[] = {
+static int parser_goto_row117[] = {
        10,
-       -1, 840,
-       1110, 1236,
-       1111, 1237,
-       1115, 1243,
-       1116, 1244,
-       1117, 1245,
+       -1, 843,
+       1113, 1239,
+       1114, 1240,
        1118, 1246,
        1119, 1247,
        1120, 1248,
-       1121, 1249
+       1121, 1249,
+       1122, 1250,
+       1123, 1251,
+       1124, 1252
 };
-static int parser_goto_row117[] = {
+static int parser_goto_row118[] = {
        3,
-       -1, 841,
-       1113, 1241,
-       1114, 1242
+       -1, 844,
+       1116, 1244,
+       1117, 1245
 };
-static int parser_goto_row118[] = {
+static int parser_goto_row119[] = {
        5,
-       -1, 842,
-       1122, 1250,
-       1123, 1251,
-       1124, 1252,
-       1125, 1253
+       -1, 845,
+       1125, 1253,
+       1126, 1254,
+       1127, 1255,
+       1128, 1256
 };
-static int parser_goto_row119[] = {
+static int parser_goto_row120[] = {
        3,
-       -1, 843,
-       957, 1097,
-       966, 1102
+       -1, 846,
+       960, 1100,
+       969, 1105
 };
-static int parser_goto_row120[] = {
+static int parser_goto_row121[] = {
        1,
-       -1, 844
+       -1, 847
 };
-static int parser_goto_row121[] = {
+static int parser_goto_row122[] = {
        2,
-       -1, 845,
-       825, 964
+       -1, 848,
+       828, 967
 };
-static int parser_goto_row122[] = {
+static int parser_goto_row123[] = {
        1,
-       -1, 846
+       -1, 849
 };
-static int parser_goto_row123[] = {
+static int parser_goto_row124[] = {
        4,
-       -1, 340,
-       246, 396,
-       304, 439,
-       398, 529
+       -1, 338,
+       244, 395,
+       302, 438,
+       397, 529
 };
-static int parser_goto_row124[] = {
+static int parser_goto_row125[] = {
        1,
        -1, -1
 };
-static int parser_goto_row125[] = {
+static int parser_goto_row126[] = {
        1,
-       -1, 1172
+       -1, 1175
 };
-static int parser_goto_row126[] = {
+static int parser_goto_row127[] = {
        1,
        -1, -1
 };
-static int parser_goto_row127[] = {
+static int parser_goto_row128[] = {
        4,
-       -1, 130,
-       1032, 1173,
-       1302, 1367,
-       1339, 1173
+       -1, 129,
+       1035, 1176,
+       1305, 1370,
+       1342, 1176
 };
-static int parser_goto_row128[] = {
+static int parser_goto_row129[] = {
        1,
-       -1, 131
+       -1, 130
 };
-static int parser_goto_row129[] = {
+static int parser_goto_row130[] = {
        6,
-       -1, 132,
-       245, 395,
-       406, 533,
-       408, 535,
-       409, 536,
-       534, 653
+       -1, 131,
+       243, 394,
+       405, 533,
+       407, 535,
+       408, 536,
+       534, 655
 };
-static int parser_goto_row130[] = {
+static int parser_goto_row131[] = {
        1,
-       -1, 133
+       -1, 132
 };
-static int parser_goto_row131[] = {
+static int parser_goto_row132[] = {
        10,
-       -1, 134,
-       410, 537,
-       411, 538,
-       415, 542,
-       416, 543,
-       417, 544,
-       418, 545,
-       419, 546,
-       420, 547,
-       421, 548
+       -1, 133,
+       409, 537,
+       410, 538,
+       414, 542,
+       415, 543,
+       416, 544,
+       417, 545,
+       418, 546,
+       419, 547,
+       420, 548
 };
-static int parser_goto_row132[] = {
+static int parser_goto_row133[] = {
        3,
-       -1, 135,
-       413, 540,
-       414, 541
+       -1, 134,
+       412, 540,
+       413, 541
 };
-static int parser_goto_row133[] = {
+static int parser_goto_row134[] = {
        5,
-       -1, 136,
-       422, 549,
-       423, 550,
-       424, 551,
-       425, 552
+       -1, 135,
+       421, 549,
+       422, 550,
+       423, 551,
+       424, 552
 };
-static int parser_goto_row134[] = {
+static int parser_goto_row135[] = {
        3,
-       -1, 137,
-       247, 397,
-       256, 404
+       -1, 136,
+       245, 396,
+       254, 403
 };
-static int parser_goto_row135[] = {
+static int parser_goto_row136[] = {
        1,
-       -1, 138
+       -1, 137
 };
-static int parser_goto_row136[] = {
+static int parser_goto_row137[] = {
        4,
-       -1, 139,
-       116, 254,
-       1032, 1174,
-       1339, 1174
+       -1, 138,
+       115, 252,
+       1035, 1177,
+       1342, 1177
 };
-static int parser_goto_row137[] = {
+static int parser_goto_row138[] = {
        2,
-       -1, 140,
-       808, 926
+       -1, 139,
+       811, 929
 };
-static int parser_goto_row138[] = {
+static int parser_goto_row139[] = {
        1,
-       -1, 472
+       -1, 471
 };
-static int parser_goto_row139[] = {
+static int parser_goto_row140[] = {
        7,
-       -1, 473,
-       469, 597,
-       805, 922,
-       920, 1078,
-       1076, 1214,
-       1095, 1224,
-       1223, 1328
+       -1, 472,
+       468, 597,
+       808, 925,
+       923, 1081,
+       1079, 1217,
+       1098, 1227,
+       1226, 1331
 };
-static int parser_goto_row140[] = {
+static int parser_goto_row141[] = {
        1,
        -1, 601
 };
-static int parser_goto_row141[] = {
+static int parser_goto_row142[] = {
        1,
        -1, -1
 };
-static int parser_goto_row142[] = {
-       2,
-       -1, 1175,
-       1339, 1393
-};
 static int parser_goto_row143[] = {
-       1,
-       -1, 1176
+       2,
+       -1, 1178,
+       1342, 1396
 };
 static int parser_goto_row144[] = {
-       2,
-       -1, 1096,
-       1098, 1227
+       1,
+       -1, 1179
 };
 static int parser_goto_row145[] = {
-       1,
-       -1, -1
+       2,
+       -1, 1099,
+       1101, 1230
 };
 static int parser_goto_row146[] = {
        1,
@@ -18416,78 +18433,78 @@ static int parser_goto_row157[] = {
        -1, -1
 };
 static int parser_goto_row158[] = {
-       8,
-       -1, 764,
-       668, 771,
-       898, 1059,
-       1056, 1199,
-       1196, 1308,
-       1370, 1422,
-       1460, 1491,
-       1531, 1534
+       1,
+       -1, -1
 };
 static int parser_goto_row159[] = {
-       3,
-       -1, 765,
-       562, 683,
-       1195, 1307
+       8,
+       -1, 767,
+       670, 774,
+       901, 1062,
+       1059, 1202,
+       1199, 1311,
+       1373, 1425,
+       1463, 1494,
+       1534, 1537
 };
 static int parser_goto_row160[] = {
-       1,
-       -1, 684
+       3,
+       -1, 768,
+       562, 685,
+       1198, 1310
 };
 static int parser_goto_row161[] = {
        1,
-       -1, 685
+       -1, 686
 };
 static int parser_goto_row162[] = {
        1,
-       -1, 686
+       -1, 687
 };
 static int parser_goto_row163[] = {
        1,
-       -1, 687
+       -1, 688
 };
 static int parser_goto_row164[] = {
        1,
-       -1, 688
+       -1, 689
 };
 static int parser_goto_row165[] = {
        1,
-       -1, 689
+       -1, 690
 };
 static int parser_goto_row166[] = {
        1,
-       -1, 690
+       -1, 691
 };
 static int parser_goto_row167[] = {
        1,
-       -1, 691
+       -1, 692
 };
 static int parser_goto_row168[] = {
-       18,
-       -1, 182,
-       179, 336,
-       670, 774,
-       674, 778,
-       777, 897,
-       901, 1066,
-       902, 1067,
-       904, 1068,
-       905, 1069,
-       906, 1070,
-       907, 1071,
-       1060, 1202,
-       1193, 1305,
-       1306, 1369,
-       1312, 1374,
-       1313, 1375,
-       1314, 1376,
-       1315, 1377
+       1,
+       -1, 693
 };
 static int parser_goto_row169[] = {
-       1,
-       -1, -1
+       18,
+       -1, 181,
+       178, 334,
+       672, 777,
+       676, 781,
+       780, 900,
+       904, 1069,
+       905, 1070,
+       907, 1071,
+       908, 1072,
+       909, 1073,
+       910, 1074,
+       1063, 1205,
+       1196, 1308,
+       1309, 1372,
+       1315, 1377,
+       1316, 1378,
+       1317, 1379,
+       1318, 1380
 };
 static int parser_goto_row170[] = {
        1,
@@ -18506,33 +18523,33 @@ static int parser_goto_row173[] = {
        -1, -1
 };
 static int parser_goto_row174[] = {
-       10,
-       -1, 146,
-       32, 152,
-       563, 694,
-       663, 766,
-       668, 772,
-       1074, 1212,
-       1196, 1309,
-       1425, 1462,
-       1460, 1492,
-       1531, 1535
-};
-static int parser_goto_row175[] = {
        1,
        -1, -1
 };
+static int parser_goto_row175[] = {
+       10,
+       -1, 145,
+       32, 151,
+       563, 696,
+       665, 769,
+       670, 775,
+       1077, 1215,
+       1199, 1312,
+       1428, 1465,
+       1463, 1495,
+       1534, 1538
+};
 static int parser_goto_row176[] = {
        1,
-       -1, 949
+       -1, -1
 };
 static int parser_goto_row177[] = {
        1,
-       -1, 1177
+       -1, 952
 };
 static int parser_goto_row178[] = {
        1,
-       -1, -1
+       -1, 1180
 };
 static int parser_goto_row179[] = {
        1,
@@ -18540,159 +18557,163 @@ static int parser_goto_row179[] = {
 };
 static int parser_goto_row180[] = {
        1,
-       -1, 1032
+       -1, -1
 };
 static int parser_goto_row181[] = {
+       1,
+       -1, 1035
+};
+static int parser_goto_row182[] = {
        2,
        -1, 16,
        4, 23
 };
-static int parser_goto_row182[] = {
+static int parser_goto_row183[] = {
        4,
        -1, 17,
        4, 24,
-       16, 88,
-       23, 102
+       16, 87,
+       23, 101
 };
-static int parser_goto_row183[] = {
+static int parser_goto_row184[] = {
        8,
        -1, 18,
        4, 25,
-       16, 89,
-       17, 93,
-       23, 103,
-       24, 105,
-       88, 233,
-       102, 239
+       16, 88,
+       17, 92,
+       23, 102,
+       24, 104,
+       87, 231,
+       101, 237
 };
-static int parser_goto_row184[] = {
+static int parser_goto_row185[] = {
        4,
-       -1, 872,
-       869, 1025,
-       874, 1041,
-       1038, 1182
+       -1, 875,
+       872, 1028,
+       877, 1044,
+       1041, 1185
 };
-static int parser_goto_row185[] = {
+static int parser_goto_row186[] = {
        8,
-       -1, 873,
-       869, 1026,
-       872, 1035,
-       874, 1042,
-       1025, 1151,
-       1038, 1183,
+       -1, 876,
+       872, 1029,
+       875, 1038,
+       877, 1045,
+       1028, 1154,
        1041, 1186,
-       1182, 1295
-};
-static int parser_goto_row186[] = {
-       1,
-       -1, 1148
+       1044, 1189,
+       1185, 1298
 };
 static int parser_goto_row187[] = {
        1,
-       -1, 1009
+       -1, 1151
 };
 static int parser_goto_row188[] = {
        1,
-       -1, 1139
+       -1, 1012
 };
 static int parser_goto_row189[] = {
        1,
-       -1, 802
+       -1, 1142
 };
 static int parser_goto_row190[] = {
-       3,
-       -1, 208,
-       290, 428,
-       788, 910
+       1,
+       -1, 805
 };
 static int parser_goto_row191[] = {
-       1,
-       -1, 218
+       3,
+       -1, 207,
+       288, 427,
+       791, 913
 };
 static int parser_goto_row192[] = {
        1,
-       -1, 715
+       -1, 217
 };
 static int parser_goto_row193[] = {
        1,
-       -1, 1001
+       -1, 717
 };
 static int parser_goto_row194[] = {
        1,
-       -1, 874
+       -1, 1004
 };
 static int parser_goto_row195[] = {
-       2,
-       -1, 1089,
-       1176, 1291
+       1,
+       -1, 877
 };
 static int parser_goto_row196[] = {
+       2,
+       -1, 1092,
+       1179, 1294
+};
+static int parser_goto_row197[] = {
        1,
        -1, 618
 };
-static int parser_goto_row197[] = {
+static int parser_goto_row198[] = {
        50,
-       -1, 141,
-       12, 81,
-       22, 81,
-       28, 81,
-       32, 81,
-       92, 81,
-       96, 81,
-       145, 81,
-       207, 81,
-       337, 81,
-       367, 81,
-       369, 512,
-       427, 81,
-       465, 81,
-       468, 81,
-       484, 622,
-       485, 622,
-       506, 636,
-       558, 81,
-       562, 692,
-       563, 81,
-       602, 710,
-       651, 710,
-       663, 692,
-       666, 81,
-       668, 692,
-       682, 81,
-       724, 848,
-       735, 81,
-       763, 81,
-       790, 81,
-       862, 81,
-       898, 692,
-       900, 1065,
-       1056, 692,
-       1058, 81,
-       1074, 81,
-       1195, 692,
-       1196, 692,
-       1329, 710,
-       1370, 692,
-       1402, 81,
-       1425, 81,
-       1436, 81,
-       1441, 81,
-       1446, 81,
-       1460, 692,
-       1473, 81,
-       1477, 81,
-       1531, 692
+       -1, 140,
+       12, 80,
+       22, 80,
+       28, 80,
+       32, 80,
+       91, 80,
+       95, 80,
+       144, 80,
+       206, 80,
+       335, 80,
+       366, 80,
+       368, 512,
+       426, 80,
+       464, 80,
+       467, 80,
+       483, 623,
+       484, 623,
+       505, 637,
+       558, 80,
+       562, 694,
+       563, 80,
+       602, 712,
+       653, 712,
+       665, 694,
+       668, 80,
+       670, 694,
+       684, 80,
+       727, 851,
+       738, 80,
+       766, 80,
+       793, 80,
+       865, 80,
+       901, 694,
+       903, 1068,
+       1059, 694,
+       1061, 80,
+       1077, 80,
+       1198, 694,
+       1199, 694,
+       1332, 712,
+       1373, 694,
+       1405, 80,
+       1428, 80,
+       1439, 80,
+       1444, 80,
+       1449, 80,
+       1463, 694,
+       1476, 80,
+       1480, 80,
+       1534, 694
 };
-static int parser_goto_row198[] = {
+static int parser_goto_row199[] = {
        2,
        -1, 19,
-       13, 82
+       13, 81
 };
-static int parser_goto_row199[] = {
+static int parser_goto_row200[] = {
        3,
        -1, 20,
-       19, 98,
-       82, 231
+       19, 97,
+       81, 229
 };
 
 const int* const parser_goto_table[] = {
@@ -18894,5 +18915,6 @@ const int* const parser_goto_table[] = {
        parser_goto_row196,
        parser_goto_row197,
        parser_goto_row198,
-       parser_goto_row199
+       parser_goto_row199,
+       parser_goto_row200
 };
index b3d32dc..d1cc1cb 100644 (file)
@@ -132,6 +132,8 @@ redef class ToolContext
 
                var time1 = get_time
                self.info("*** END SEMANTIC ANALYSIS: {time1-time0} ***", 2)
+
+               errors_info
        end
 
        fun phase_process_npropdef(phase: Phase, npropdef: APropdef)
index 83c5fe4..5048b33 100644 (file)
@@ -36,6 +36,12 @@ class Variable
 
        # Alias of `name`
        redef fun to_s do return self.name
+
+       # The declaration of the variable, if any
+       var location: nullable Location = null
+
+       # Is the local variable not read and need a warning?
+       var warn_unread = false is writable
 end
 
 # Mark where break and continue will branch.
@@ -77,6 +83,18 @@ private class ScopeVisitor
        # All stacked scope. `scopes.first` is the current scope
        private var scopes: List[Scope] = new List[Scope]
 
+       # Shift and check the last scope
+       fun shift_scope
+       do
+               assert not scopes.is_empty
+               var scope = scopes.shift
+               for v in scope.variables.values do
+                       if v.warn_unread then
+                               toolcontext.advice(v.location, "unread-variable", "Warning: local variable {v.name} is never read.")
+                       end
+               end
+       end
+
        # Regiter a local variable.
        # Display an error on toolcontext if a variable with the same name is masked.
        fun register_variable(node: ANode, variable: Variable): Bool
@@ -88,6 +106,7 @@ private class ScopeVisitor
                        return false
                end
                scopes.first.variables[name] = variable
+               variable.location = node.location
                return true
        end
 
@@ -118,7 +137,7 @@ private class ScopeVisitor
                scope.escapemark = escapemark
                scopes.unshift(scope)
                enter_visit(node)
-               scopes.shift
+               shift_scope
        end
 
        # Look for a label `name`.
@@ -232,6 +251,7 @@ redef class APropdef
        do
                var v = new ScopeVisitor(toolcontext)
                v.enter_visit(self)
+               v.shift_scope
        end
 end
 
@@ -257,6 +277,7 @@ redef class AVardeclExpr
                var nid = self.n_id
                var variable = new Variable(nid.text)
                v.register_variable(nid, variable)
+               variable.warn_unread = true # wait for some read mark.
                self.variable = variable
        end
 end
@@ -370,7 +391,7 @@ redef class AForExpr
                self.escapemark = escapemark
                v.enter_visit_block(n_block, escapemark)
 
-               v.scopes.shift
+               v.shift_scope
        end
 end
 
@@ -409,6 +430,7 @@ end
 redef class ACallExpr
        redef fun variable_create(variable)
        do
+               variable.warn_unread = false
                return new AVarExpr.init_avarexpr(n_id)
        end
 end
@@ -423,6 +445,7 @@ end
 redef class ACallReassignExpr
        redef fun variable_create(variable)
        do
+               variable.warn_unread = false
                return new AVarReassignExpr.init_avarreassignexpr(n_id, n_assign_op, n_value)
        end
 end
index 1383302..f288ca3 100644 (file)
@@ -188,9 +188,9 @@ private class TypeVisitor
                if sup == null then return null # Forward error
 
                if sup == sub then
-                       self.modelbuilder.warning(node, "Warning: Expression is already a {sup}.")
+                       self.modelbuilder.warning(node, "useless-type-test", "Warning: Expression is already a {sup}.")
                else if self.is_subtype(sub, sup) then
-                       self.modelbuilder.warning(node, "Warning: Expression is already a {sup} since it is a {sub}.")
+                       self.modelbuilder.warning(node, "useless-type-test", "Warning: Expression is already a {sup} since it is a {sub}.")
                end
                return sup
        end
@@ -266,9 +266,9 @@ private class TypeVisitor
                if info != null and self.mpropdef.mproperty.deprecation == null then
                        var mdoc = info.mdoc
                        if mdoc != null then
-                               self.modelbuilder.warning(node, "Deprecation Warning: Method '{name}' is deprecated: {mdoc.content.first}")
+                               self.modelbuilder.warning(node, "deprecated-method", "Deprecation Warning: Method '{name}' is deprecated: {mdoc.content.first}")
                        else
-                               self.modelbuilder.warning(node, "Deprecation Warning: Method '{name}' is deprecated.")
+                               self.modelbuilder.warning(node, "deprecated-method", "Deprecation Warning: Method '{name}' is deprecated.")
                        end
                end
 
@@ -280,7 +280,7 @@ private class TypeVisitor
                else if propdefs.length == 1 then
                        mpropdef = propdefs.first
                else
-                       self.modelbuilder.warning(node, "Warning: confliting property definitions for property {name} in {unsafe_type}: {propdefs.join(" ")}")
+                       self.modelbuilder.warning(node, "property-conflict", "Warning: conflicting property definitions for property {name} in {unsafe_type}: {propdefs.join(" ")}")
                        mpropdef = mproperty.intro
                end
 
@@ -1097,19 +1097,37 @@ redef class AArrayExpr
 
        redef fun accept_typing(v)
        do
+               var mtype: nullable MType = null
+               var ntype = self.n_type
+               if ntype != null then
+                       mtype = v.resolve_mtype(ntype)
+                       if mtype == null then return # Skip error
+               end
                var mtypes = new Array[nullable MType]
+               var useless = false
                for e in self.n_exprs.n_exprs do
                        var t = v.visit_expr(e)
                        if t == null then
                                return # Skip error
                        end
-                       mtypes.add(t)
+                       if mtype != null then
+                               if v.check_subtype(e, t, mtype) == null then return # Skip error
+                               if t == mtype then useless = true
+                       else
+                               mtypes.add(t)
+                       end
+               end
+               if mtype == null then
+                       mtype = v.merge_types(self, mtypes)
                end
-               var mtype = v.merge_types(self, mtypes)
                if mtype == null then
                        v.error(self, "Type Error: ambiguous array type {mtypes.join(" ")}")
                        return
                end
+               if useless then
+                       assert ntype != null
+                       v.modelbuilder.warning(ntype, "useless-type", "Warning: useless type declaration `{mtype}` in literal Array since it can be inferred from the elements type.")
+               end
                var mclass = v.get_mclass(self, "Array")
                if mclass == null then return # Forward error
                var array_mtype = mclass.get_mtype([mtype])
@@ -1212,13 +1230,13 @@ redef class AAsNotnullExpr
                self.mtype = mtype
 
                if mtype isa MClassType then
-                       v.modelbuilder.warning(self, "Warning: expression is already not null, since it is a `{mtype}`.")
+                       v.modelbuilder.warning(self, "useless-type-test", "Warning: expression is already not null, since it is a `{mtype}`.")
                        return
                end
                assert mtype.need_anchor
                var u = v.anchor_to(mtype)
                if not u isa MNullableType then
-                       v.modelbuilder.warning(self, "Warning: expression is already not null, since it is a `{mtype}: {u}`.")
+                       v.modelbuilder.warning(self, "useless-type-test", "Warning: expression is already not null, since it is a `{mtype}: {u}`.")
                        return
                end
        end
@@ -1489,14 +1507,16 @@ redef class ASuperExpr
 
        redef fun accept_typing(v)
        do
-               var recvtype = v.anchor
+               var anchor = v.anchor
+               assert anchor != null
+               var recvtype = v.get_variable(self, v.selfvariable)
                assert recvtype != null
                var mproperty = v.mpropdef.mproperty
                if not mproperty isa MMethod then
                        v.error(self, "Error: super only usable in a method")
                        return
                end
-               var superprops = mproperty.lookup_super_definitions(v.mmodule, recvtype)
+               var superprops = mproperty.lookup_super_definitions(v.mmodule, anchor)
                if superprops.length == 0 then
                        if mproperty.is_init and v.mpropdef.is_intro then
                                process_superinit(v)
@@ -1522,14 +1542,16 @@ redef class ASuperExpr
 
        private fun process_superinit(v: TypeVisitor)
        do
-               var recvtype = v.anchor
+               var anchor = v.anchor
+               assert anchor != null
+               var recvtype = v.get_variable(self, v.selfvariable)
                assert recvtype != null
                var mpropdef = v.mpropdef
                assert mpropdef isa MMethodDef
                var mproperty = mpropdef.mproperty
                var superprop: nullable MMethodDef = null
                for msupertype in mpropdef.mclassdef.supertypes do
-                       msupertype = msupertype.anchor_to(v.mmodule, recvtype)
+                       msupertype = msupertype.anchor_to(v.mmodule, anchor)
                        var errcount = v.modelbuilder.toolcontext.error_count
                        var candidate = v.try_get_mproperty_by_name2(self, msupertype, mproperty.name).as(nullable MMethod)
                        if candidate == null then
@@ -1543,7 +1565,7 @@ redef class ASuperExpr
                                v.error(self, "Error: conflicting super constructor to call for {mproperty}: {candidate.full_name}, {superprop.mproperty.full_name}")
                                return
                        end
-                       var candidatedefs = candidate.lookup_definitions(v.mmodule, recvtype)
+                       var candidatedefs = candidate.lookup_definitions(v.mmodule, anchor)
                        if superprop != null and superprop.mproperty == candidate then
                                if superprop == candidatedefs.first then continue
                                candidatedefs.add(superprop)
@@ -1741,7 +1763,7 @@ redef class ADebugTypeExpr
                var mtype = v.resolve_mtype(ntype)
                if mtype != null and mtype != expr then
                        var umtype = v.anchor_to(mtype)
-                       v.modelbuilder.warning(self, "Found type {expr} (-> {unsafe}), expected {mtype} (-> {umtype})")
+                       v.modelbuilder.warning(self, "debug", "Found type {expr} (-> {unsafe}), expected {mtype} (-> {umtype})")
                end
                self.is_typed = true
        end
index e0b81ee..fc0aac1 100644 (file)
@@ -34,4 +34,14 @@ do
        print "I have {model.mmodules.length} modules"
        var mclasses = mainmodule.flatten_mclass_hierarchy
        print "I have also {mclasses.length} classes"
+
+       var meth_cpt = 0
+       for m in mainmodule.in_importation.greaters do
+               for cd in m.mclassdefs do
+                       for pd in cd.mpropdefs do
+                               if pd isa MMethodDef then meth_cpt += 1
+                       end
+               end
+       end
+       print "And {meth_cpt} definitions of methods"
 end
index e370b8a..fe37ca9 100644 (file)
@@ -51,8 +51,8 @@ class NitUnitExecutor
                # We want executable code
                if not (ast isa AModule or ast isa ABlockExpr or ast isa AExpr) then
                        if ndoc != null and n.tag == "pre" and toolcontext.opt_warn.value > 1 then
-                               toolcontext.warning(ndoc.location, "Warning: There is a block of code that is not valid Nit, thus not considered a nitunit")
-                               if ast isa AError then toolcontext.warning(ast.location, ast.message)
+                               toolcontext.warning(ndoc.location, "invalid-block", "Warning: There is a block of code that is not valid Nit, thus not considered a nitunit")
+                               if ast isa AError then toolcontext.warning(ast.location, "syntax-error", ast.message)
                                ndoc = null # To avoid multiple warning in the same node
                        end
                        return
@@ -63,7 +63,7 @@ class NitUnitExecutor
                v.enter_visit(ast)
                if not v.foundit then
                        if ndoc != null and n.tag == "pre" and toolcontext.opt_warn.value > 1 then
-                               toolcontext.warning(ndoc.location, "Warning: There is a block of Nit code without `assert`, thus not considered a nitunit")
+                               toolcontext.warning(ndoc.location, "invalid-block", "Warning: There is a block of Nit code without `assert`, thus not considered a nitunit")
                                ndoc = null # To avoid multiple warning in the same node
                        end
                        return
@@ -156,13 +156,13 @@ class NitUnitExecutor
                        var ne = new HTMLTag("failure")
                        ne.attr("message", msg)
                        tc.add ne
-                       toolcontext.warning(ndoc.location, "FAILURE: {tc.attrs["classname"]}.{tc.attrs["name"]} (in {file}): {msg}")
+                       toolcontext.warning(ndoc.location, "failure", "FAILURE: {tc.attrs["classname"]}.{tc.attrs["name"]} (in {file}): {msg}")
                        toolcontext.modelbuilder.failed_entities += 1
                else if res2 != 0 then
                        var ne = new HTMLTag("error")
                        ne.attr("message", msg)
                        tc.add ne
-                       toolcontext.warning(ndoc.location, "ERROR: {tc.attrs["classname"]}.{tc.attrs["name"]} (in {file}): {msg}")
+                       toolcontext.warning(ndoc.location, "error", "ERROR: {tc.attrs["classname"]}.{tc.attrs["name"]} (in {file}): {msg}")
                        toolcontext.modelbuilder.failed_entities += 1
                end
                toolcontext.check_errors
index 30cbed5..28e6945 100644 (file)
@@ -231,7 +231,7 @@ class TestCase
                var loc = test_method.location
                if res != 0 then
                        failure = msg
-                       toolcontext.warning(loc, "FAILURE: {test_method.name} (in file {file}.nit): {msg}")
+                       toolcontext.warning(loc, "failure", "FAILURE: {test_method.name} (in file {file}.nit): {msg}")
                        toolcontext.modelbuilder.failed_tests += 1
                end
                toolcontext.check_errors
@@ -252,7 +252,7 @@ class TestCase
                var loc = test_method.location
                if res != 0 then
                        error = msg
-                       toolcontext.warning(loc, "ERROR: {test_method.name} (in file {file}.nit): {msg}")
+                       toolcontext.warning(loc, "failure", "ERROR: {test_method.name} (in file {file}.nit): {msg}")
                        toolcontext.modelbuilder.failed_tests += 1
                end
                toolcontext.check_errors
index dd1d2c1..1bdcea5 100644 (file)
@@ -17,7 +17,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Common command-line tool infractructure than handle options and error messages
+# Common command-line tool infrastructure than handle options and error messages
 module toolcontext
 
 import opts
@@ -25,11 +25,24 @@ import location
 import version
 import template
 
+# A warning or an error
 class Message
        super Comparable
        redef type OTHER: Message
 
+       # The origin of the message in the source code, if any.
        var location: nullable Location
+
+       # The category of the message.
+       #
+       # Used by quality-control tool for statistics or to enable/disable things individually.
+       var tag: nullable String
+
+       # The human-readable description of the message.
+       #
+       # It should be short and fit on a single line.
+       # It should also have meaningful information first in case
+       # on truncation by an IDE for instance.
        var text: String
 
        # Comparisons are made on message locations.
@@ -59,13 +72,19 @@ class Message
                var yellow = "{esc}[0;33m"
                var def = "{esc}[0m"
 
+               var tag = tag
+               if tag != null then
+                       tag = " ({tag})"
+               else
+                       tag = ""
+               end
                var l = location
                if l == null then
-                       return text
+                       return "{text}{tag}"
                else if l.file == null then
-                       return "{yellow}{l}{def}: {text}"
+                       return "{yellow}{l}{def}: {text}{tag}"
                else
-                       return "{yellow}{l}{def}: {text}\n{l.colored_line("1;31")}"
+                       return "{yellow}{l}{def}: {text}{tag}\n{l.colored_line("1;31")}"
                end
        end
 end
@@ -101,13 +120,24 @@ class ToolContext
                        messages.clear
                end
 
-               if error_count > 0 then exit(1)
+               if error_count > 0 then
+                       errors_info
+                       exit(1)
+               end
+       end
+
+       # Display total error informations
+       fun errors_info
+       do
+               if error_count == 0 and warning_count == 0 then return
+               if opt_no_color.value then return
+               sys.stderr.write "Errors: {error_count}. Warnings: {warning_count}.\n"
        end
 
        # Display an error
        fun error(l: nullable Location, s: String)
        do
-               messages.add(new Message(l,s))
+               messages.add(new Message(l,null,s))
                error_count = error_count + 1
                if opt_stop_on_first_error.value then check_errors
        end
@@ -119,11 +149,41 @@ class ToolContext
                check_errors
        end
 
-       # Display a warning
-       fun warning(l: nullable Location, s: String)
+       # Display a first-level warning.
+       #
+       # First-level warnings are warnings that SHOULD be corrected,
+       # and COULD usually be immediately corrected.
+       #
+       # * There is a simple correction
+       # * There is no reason to let the code this way (no reasonable @supresswarning-like annotation)
+       # * They always are real issues (no false positive)
+       #
+       # First-level warnings are displayed by default (except if option `-q` is given).
+       fun warning(l: nullable Location, tag: String, text: String)
        do
                if opt_warn.value == 0 then return
-               messages.add(new Message(l,s))
+               messages.add(new Message(l, tag, text))
+               warning_count = warning_count + 1
+               if opt_stop_on_first_error.value then check_errors
+       end
+
+       # Display a second-level warning.
+       #
+       # Second-level warnings are warnings that should require investigation,
+       # but cannot always be immediately corrected.
+       #
+       # * The correction could be complex. e.g. require a refactorisation or an API change.
+       # * The correction cannot be done. e.g. Code that use a deprecated API for some compatibility reason.
+       # * There is not a real issue (false positive). Note that this should be unlikely.
+       # * Transitional: While a real warning, it fires a lot in current code, so a transition is needed
+       #   in order to fix them before promoting the advice to a warning.
+       #
+       # In order to prevent warning inflation Ã  la Java, second-level warnings are not displayed by
+       # default and require an additional option `-W`.
+       fun advice(l: nullable Location, tag: String, text: String)
+       do
+               if opt_warn.value <= 1 then return
+               messages.add(new Message(l, tag, text))
                warning_count = warning_count + 1
                if opt_stop_on_first_error.value then check_errors
        end
diff --git a/src/uml/uml.nit b/src/uml/uml.nit
new file mode 100644 (file)
index 0000000..0403540
--- /dev/null
@@ -0,0 +1,20 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Group head module for UML generation services
+module uml
+
+import uml_base
+import uml_class
+import uml_module
diff --git a/src/uml/uml_base.nit b/src/uml/uml_base.nit
new file mode 100644 (file)
index 0000000..e54ccef
--- /dev/null
@@ -0,0 +1,38 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Exposes the base class for UML generation of a `Model`
+module uml_base
+
+import toolcontext
+import model_utils
+
+redef class ToolContext
+       # -p
+       var opt_privacy = new OptionBool("Generates private API", "-p", "--private")
+
+       # Shortcut for the value of `self.opt_privacy`
+       fun private_gen: Bool do return opt_privacy.value
+
+       redef init do
+               option_context.add_option opt_privacy
+               super
+       end
+end
+
+class UMLModel
+       var model: Model
+       var mainmodule: MModule
+       var ctx: ToolContext
+end
diff --git a/src/uml/uml_class.nit b/src/uml/uml_class.nit
new file mode 100644 (file)
index 0000000..7581f2a
--- /dev/null
@@ -0,0 +1,232 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Provides facilities of exporting a `Model` to a UML class diagram
+module uml_class
+
+import uml_base
+
+redef class UMLModel
+       # Generates a UML class diagram from a `Model`
+       fun generate_class_uml: Streamable do
+               var tpl = new Template
+               tpl.add "digraph G \{\n"
+               tpl.add """     fontname = "Bitstream Vera Sans"
+                               fontsize = 8
+                               node [
+                                       fontname = "Bitstream Vera Sans"
+                                       fontsize = 8
+                                       shape = "record"
+                               ]
+
+                               edge [
+                                       fontname = "Bitstream Vera Sans"
+                                       fontsize = 8
+                               ]\n"""
+               tpl.add model.tpl_class(ctx, mainmodule)
+               tpl.add "\}"
+               return tpl
+       end
+end
+
+redef class Model
+
+       # Generates a UML Class diagram from the entities of a `Model`
+       fun tpl_class(ctx: ToolContext, main: MModule): Streamable do
+               var t = new Template
+               for i in mclasses do
+                       if not ctx.private_gen and i.visibility != public_visibility then continue
+                       t.add i.tpl_class(ctx, main)
+                       t.add "\n"
+               end
+               return t
+       end
+
+end
+
+redef class MEntity
+       # Generates a dot-compatible `Streamable` UML Class diagram from `self`
+       fun tpl_class(ctx: ToolContext, main: MModule): Streamable is abstract
+end
+
+redef class MClass
+
+       redef fun tpl_class(ctx, main): Streamable do
+               var t = new Template
+               t.add "{name} [\n label = \"\{"
+               if kind == abstract_kind then
+                       t.add "abstract\\n{name}"
+               else if kind == interface_kind then
+                       t.add "interface\\n{name}"
+               else
+                       t.add "{name}"
+               end
+               if arity > 0 then
+                       t.add "["
+                       var formal = intro.parameter_names
+                       t.add formal.first
+                       for i in [1 .. formal.length[ do
+                               t.add ", "
+                               t.add formal[i]
+                       end
+                       t.add "]"
+               end
+               t.add "|"
+               var props: Collection[MProperty]
+               if ctx.private_gen then
+                       props = intro_mproperties(none_visibility)
+               else
+                       props = intro_mproperties(public_visibility)
+               end
+               for i in props do
+                       if i isa MAttribute then
+                               t.add i.tpl_class(ctx, main)
+                               t.add "\\l"
+                       end
+               end
+               t.add "|"
+               for i in intro_methods do
+                       if not ctx.private_gen and i.visibility != public_visibility then continue
+                       t.add i.tpl_class(ctx, main)
+                       t.add "\\l"
+               end
+               t.add "\}\"\n]\n"
+               var g = in_hierarchy(main).direct_greaters
+               for i in g do
+                       if not ctx.private_gen and i.visibility != public_visibility then continue
+                       t.add "{i.name} -> {name} [dir=back"
+                       if i.kind == interface_kind then
+                               t.add " arrowtail=open style=dashed"
+                       else
+                               t.add " arrowtail=empty"
+                       end
+                       t.add "];\n"
+               end
+               return t
+       end
+
+end
+
+redef class MMethod
+       redef fun tpl_class(ctx, main) do
+               var tpl = new Template
+               tpl.add visibility.tpl_class
+               tpl.add " "
+               tpl.add name.escape_to_dot
+               tpl.add intro.msignature.tpl_class(ctx, main)
+               return tpl
+       end
+end
+
+redef class MSignature
+
+       redef fun tpl_class(ctx, main) do
+               var t = new Template
+               t.add "("
+               var params = new Array[MParameter]
+               for i in mparameters do
+                       params.add i
+               end
+               if params.length > 0 then
+                       t.add params.first.name
+                       t.add ": "
+                       t.add params.first.mtype.tpl_class(ctx, main)
+                       for i in [1 .. params.length [ do
+                               t.add ", "
+                               t.add params[i].name
+                               t.add ": "
+                               t.add params[i].mtype.tpl_class(ctx, main)
+                       end
+               end
+               t.add ")"
+               if return_mtype != null then
+                       t.add ": "
+                       t.add return_mtype.tpl_class(ctx, main)
+               end
+               return t
+       end
+end
+
+redef class MAttribute
+       redef fun tpl_class(ctx, main) do
+               var tpl = new Template
+               tpl.add visibility.tpl_class
+               tpl.add " "
+               tpl.add name
+               tpl.add ": "
+               tpl.add intro.static_mtype.tpl_class(ctx, main)
+               return tpl
+       end
+end
+
+redef class MVisibility
+       # Returns the visibility as a UML token
+       #
+       #    assert public_visibility.tpl_class == "+"
+       #    assert private_visibility.tpl_class == "-"
+       fun tpl_class: Streamable do
+               if self == private_visibility then
+                       return "-"
+               else if self == protected_visibility then
+                       return "#"
+               else if self == public_visibility then
+                       return "+"
+               else
+                       return "+"
+               end
+       end
+end
+
+redef class MClassType
+       redef fun tpl_class(c, m) do
+               return name
+       end
+end
+
+redef class MGenericType
+       redef fun tpl_class(c, m) do
+               var t = new Template
+               t.add name.substring(0, name.index_of('['))
+               t.add "["
+               t.add arguments.first.tpl_class(c, m)
+               for i in [1 .. arguments.length[ do
+                       t.add ", "
+                       t.add arguments[i].tpl_class(c, m)
+               end
+               t.add "]"
+               return t
+       end
+end
+
+redef class MParameterType
+       redef fun tpl_class(c, m) do
+               var n = mclass.intro.parameter_names
+               return n[rank]
+       end
+end
+
+redef class MVirtualType
+       redef fun tpl_class(c, m) do
+               return name
+       end
+end
+
+redef class MNullableType
+       redef fun tpl_class(c, m) do
+               var t = new Template
+               t.add "nullable "
+               t.add mtype.tpl_class(c, m)
+               return t
+       end
+end
diff --git a/src/uml/uml_module.nit b/src/uml/uml_module.nit
new file mode 100644 (file)
index 0000000..55d16f3
--- /dev/null
@@ -0,0 +1,158 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Services for generation of a UML package diagram based on a `Model`
+module uml_module
+
+import uml_base
+import uml_class
+
+redef class UMLModel
+       # Generates a UML package diagram from a `Model`
+       fun generate_package_uml: Streamable do
+               var tpl = new Template
+               tpl.add "digraph G \{\n"
+               tpl.add """     fontname = "Bitstream Vera Sans"
+                       fontsize = 8
+                       node [
+                               fontname = "Bitstream Vera Sans"
+                               fontsize = 8
+                               shape = "record"
+                       ]
+                       edge [
+                               fontname = "Bitstream Vera Sans"
+                               fontsize = 8
+                       ]\n"""
+               tpl.add model.tpl_module(ctx, mainmodule)
+               tpl.add "\}"
+               return tpl
+       end
+end
+
+redef class Model
+       # Returns a UML package diagram of `main`
+       fun tpl_module(ctx: ToolContext, main: MModule): Streamable do
+               return main.tpl_module(ctx, main)
+       end
+end
+
+redef class MModule
+       redef fun tpl_module(ctx, main) do
+               var t = new Template
+               t.add "subgraph cluster{name} \{\n"
+               t.add "label = \"{name}\"\n"
+               for i in mclassdefs do
+                       if not ctx.private_gen and i.mclass.visibility != public_visibility then continue
+                       t.add i.tpl_module(ctx, main)
+               end
+               t.add "\}\n"
+               return t
+       end
+end
+
+redef class MEntity
+       # Builds a dot UML package diagram entity from `self`
+       fun tpl_module(ctx: ToolContext, main: MModule): Streamable is abstract
+end
+
+redef class MClassDef
+
+       # Colour for the border of a class when first introduced
+       #
+       # Defaults to a shade of green
+       var intro_colour = "#58B26A"
+
+       # Colour for the border of a class when refined
+       #
+       # Defaults to a shade of red
+       var redef_colour = "#B24758"
+
+       redef fun tpl_module(ctx, main) do
+               var t = new Template
+               t.add "{mmodule}{name} [\n\tlabel = \"\{"
+               if mclass.kind == abstract_kind then
+                       t.add "abstract\\n{name}"
+               else if mclass.kind == interface_kind then
+                       t.add "interface\\n{name}"
+               else
+                       t.add "{name}"
+               end
+               if mclass.arity > 0 then
+                       t.add "["
+                       var formal = mclass.intro.parameter_names
+                       t.add formal.first
+                       for i in [1 .. formal.length[ do
+                               t.add ", "
+                               t.add formal[i]
+                       end
+                       t.add "]"
+               end
+               t.add "|"
+               for i in mpropdefs do
+                       if not i isa MAttributeDef then continue
+                       if not ctx.private_gen and i.mproperty.visibility != public_visibility then continue
+                       t.add i.tpl_module(ctx, main)
+                       t.add "\\l"
+               end
+               t.add "|"
+               for i in mpropdefs do
+                       if not i isa MMethodDef then continue
+                       if not ctx.private_gen and i.mproperty.visibility != public_visibility then continue
+                       t.add i.tpl_module(ctx, main)
+                       t.add "\\l"
+               end
+               t.add "\}\""
+               if is_intro then
+                       t.add "color=\"{intro_colour}\""
+               else
+                       t.add "color=\"{redef_colour}\""
+               end
+               t.add "\n]\n"
+               var supers = in_hierarchy.direct_greaters
+               for i in supers do
+                       if i.mmodule != mmodule then continue
+                       t.add "{i.mmodule}{i.name} -> {mmodule}{name} [dir=back"
+                       if i.mclass.kind == interface_kind then
+                               t.add " arrowtail=open style=dashed"
+                       else
+                               t.add " arrowtail=empty"
+                       end
+                       t.add "]\n"
+               end
+               return t
+       end
+end
+
+redef class MMethodDef
+       redef fun tpl_module(ctx, main) do
+               var t = new Template
+               t.add mproperty.visibility.tpl_class
+               t.add " "
+               t.add name.escape_to_dot
+               t.add msignature.tpl_class(ctx, main)
+               return t
+       end
+end
+
+redef class MAttributeDef
+       redef fun tpl_module(ctx, main) do
+               var t = new Template
+               t.add mproperty.visibility.tpl_class
+               t.add " "
+               t.add name
+               t.add ": "
+               t.add static_mtype.tpl_class(ctx, main)
+               return t
+       end
+end
diff --git a/tests/base_array_lit_typed.nit b/tests/base_array_lit_typed.nit
new file mode 100644 (file)
index 0000000..e9f9178
--- /dev/null
@@ -0,0 +1,31 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import array
+
+var a = [1,2,3]
+__debug__ type Array[Int]: a
+
+var b = [1,2,3:Object]
+__debug__ type Array[Object]: b
+
+var c = [1,2,false:Object]
+__debug__ type Array[Object]: c
+
+#alt1# var d = [1,2,false:Int]
+
+#alt2# var e = [1:Fail]
+
+#alt3#var f = [1,2,3: Int]
+#alt3#__debug__ type Array[Int]: f
index c782ec0..5f17ed8 100644 (file)
@@ -1,2 +1,3 @@
 init_inherit
 init_linext
+android
diff --git a/tests/nituml.args b/tests/nituml.args
new file mode 100644 (file)
index 0000000..2add9e5
--- /dev/null
@@ -0,0 +1,4 @@
+--diagram package --private ./base_prot_sig2.nit -I ../lib/standard
+--diagram package ./base_prot_sig2.nit -I ../lib/standard
+--diagram class --private ./base_prot_sig2.nit -I ../lib/standard
+--diagram class ./base_prot_sig2.nit -I ../lib/standard
diff --git a/tests/sav/base_array_lit_typed_alt1.res b/tests/sav/base_array_lit_typed_alt1.res
new file mode 100644 (file)
index 0000000..01a68e9
--- /dev/null
@@ -0,0 +1 @@
+alt/base_array_lit_typed_alt1.nit:26,14--18: Type error: expected Int, got Bool
diff --git a/tests/sav/base_array_lit_typed_alt2.res b/tests/sav/base_array_lit_typed_alt2.res
new file mode 100644 (file)
index 0000000..c155147
--- /dev/null
@@ -0,0 +1 @@
+alt/base_array_lit_typed_alt2.nit:28,12--15: Type error: class Fail not found in module base_array_lit_typed_alt2.
diff --git a/tests/sav/base_array_lit_typed_alt3.res b/tests/sav/base_array_lit_typed_alt3.res
new file mode 100644 (file)
index 0000000..c55668f
--- /dev/null
@@ -0,0 +1 @@
+alt/base_array_lit_typed_alt3.nit:30,17--19: Warning: useless type declaration `Int` in literal Array since it can be inferred from the elements type.
index 7bb162d..3cb78e6 100644 (file)
@@ -1,4 +1,4 @@
-base_control_flow2.nit:21,1--25,3: Warning: use 'loop' instead of 'while true do'.
-base_control_flow2.nit:39,1--43,3: Warning: use 'loop' instead of 'while true do'.
-base_control_flow2.nit:47,2--51,4: Warning: use 'loop' instead of 'while true do'.
-base_control_flow2.nit:45,1--55,3: Warning: use 'loop' instead of 'while true do'.
+base_control_flow2.nit:21,1--25,3: Warning: use `loop` instead of `while true do`.
+base_control_flow2.nit:39,1--43,3: Warning: use `loop` instead of `while true do`.
+base_control_flow2.nit:47,2--51,4: Warning: use `loop` instead of `while true do`.
+base_control_flow2.nit:45,1--55,3: Warning: use `loop` instead of `while true do`.
index c24ab44..e569abe 100644 (file)
@@ -1,5 +1,5 @@
 alt/base_control_flow2_alt1.nit:24,2: Error: unreachable statement.
-alt/base_control_flow2_alt1.nit:21,1--25,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt1.nit:39,1--43,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt1.nit:47,2--51,4: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt1.nit:45,1--55,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt1.nit:21,1--25,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt1.nit:39,1--43,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt1.nit:47,2--51,4: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt1.nit:45,1--55,3: Warning: use `loop` instead of `while true do`.
index 57fdfa6..72d2608 100644 (file)
@@ -1,5 +1,5 @@
-alt/base_control_flow2_alt2.nit:21,1--25,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt2.nit:21,1--25,3: Warning: use `loop` instead of `while true do`.
 alt/base_control_flow2_alt2.nit:30,2: Error: unreachable statement.
-alt/base_control_flow2_alt2.nit:39,1--43,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt2.nit:47,2--51,4: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt2.nit:45,1--55,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt2.nit:39,1--43,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt2.nit:47,2--51,4: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt2.nit:45,1--55,3: Warning: use `loop` instead of `while true do`.
index 7585a5f..4c19474 100644 (file)
@@ -1,5 +1,5 @@
-alt/base_control_flow2_alt3.nit:21,1--25,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt3.nit:21,1--25,3: Warning: use `loop` instead of `while true do`.
 alt/base_control_flow2_alt3.nit:42,2: Error: unreachable statement.
-alt/base_control_flow2_alt3.nit:39,1--43,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt3.nit:47,2--51,4: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt3.nit:45,1--55,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt3.nit:39,1--43,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt3.nit:47,2--51,4: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt3.nit:45,1--55,3: Warning: use `loop` instead of `while true do`.
index 5a3b21a..a5ac542 100644 (file)
@@ -1,5 +1,5 @@
-alt/base_control_flow2_alt4.nit:21,1--25,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt4.nit:39,1--43,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt4.nit:21,1--25,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt4.nit:39,1--43,3: Warning: use `loop` instead of `while true do`.
 alt/base_control_flow2_alt4.nit:50,3: Error: unreachable statement.
-alt/base_control_flow2_alt4.nit:47,2--51,4: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt4.nit:45,1--55,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt4.nit:47,2--51,4: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt4.nit:45,1--55,3: Warning: use `loop` instead of `while true do`.
index fb86643..593356c 100644 (file)
@@ -1,5 +1,5 @@
-alt/base_control_flow2_alt5.nit:21,1--25,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt5.nit:39,1--43,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt5.nit:47,2--51,4: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt5.nit:21,1--25,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt5.nit:39,1--43,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt5.nit:47,2--51,4: Warning: use `loop` instead of `while true do`.
 alt/base_control_flow2_alt5.nit:54,2: Error: unreachable statement.
-alt/base_control_flow2_alt5.nit:45,1--55,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt5.nit:45,1--55,3: Warning: use `loop` instead of `while true do`.
index a0ff1f6..e035bfc 100644 (file)
@@ -1,5 +1,5 @@
-alt/base_control_flow2_alt6.nit:21,1--25,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt6.nit:39,1--43,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt6.nit:47,2--51,4: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt6.nit:45,1--55,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt6.nit:21,1--25,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt6.nit:39,1--43,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt6.nit:47,2--51,4: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt6.nit:45,1--55,3: Warning: use `loop` instead of `while true do`.
 alt/base_control_flow2_alt6.nit:60,2: Error: unreachable statement.
index b157466..a27882c 100644 (file)
@@ -1,5 +1,5 @@
-alt/base_control_flow2_alt7.nit:21,1--25,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt7.nit:39,1--43,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt7.nit:47,2--51,4: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt7.nit:45,1--55,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt7.nit:21,1--25,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt7.nit:39,1--43,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt7.nit:47,2--51,4: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt7.nit:45,1--55,3: Warning: use `loop` instead of `while true do`.
 alt/base_control_flow2_alt7.nit:67,2: Error: unreachable statement.
index 92405d4..c1dad34 100644 (file)
@@ -1,2 +1,2 @@
-../lib/mnit_linux/linux_app.nit:28,16--31: Redef Error: a virtual type cannot be refined.
-../lib/mnit_linux/linux_app.nit:29,16--29: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:29,16--31: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:30,16--29: Redef Error: a virtual type cannot be refined.
index e0e3b61..0f97e5d 100644 (file)
@@ -28,7 +28,7 @@ error_expr_not_ok.nit:64,30--33: Error: Method or variable 'fail' unknown in Sys
 error_expr_not_ok.nit:66,7--10: Error: Method or variable 'fail' unknown in Sys.
 error_expr_not_ok.nit:66,21: Type error: expected A, got Int
 error_expr_not_ok.nit:67,15--18: Error: Method or variable 'fail' unknown in Sys.
-error_expr_not_ok.nit:67,1--18: Warning: use 'loop' instead of 'while true do'.
+error_expr_not_ok.nit:67,1--18: Warning: use `loop` instead of `while true do`.
 error_expr_not_ok.nit:69,10--13: Error: Method or variable 'fail' unknown in Sys.
 error_expr_not_ok.nit:70,20--23: Error: Method or variable 'fail' unknown in Sys.
 error_expr_not_ok.nit:71,8--11: Error: Method or variable 'fail' unknown in Sys.
index b798295..0c99ab8 100644 (file)
@@ -10,7 +10,7 @@ alt/error_expr_not_ok_alt2.nit:43,1--8: Error: Method 'fail' doesn't exists in I
 alt/error_expr_not_ok_alt2.nit:60,20: Type error: expected A, got Int
 alt/error_expr_not_ok_alt2.nit:62,7--27: Type error: expected A, got Int
 alt/error_expr_not_ok_alt2.nit:66,21: Type error: expected A, got Int
-alt/error_expr_not_ok_alt2.nit:67,1--18: Warning: use 'loop' instead of 'while true do'.
+alt/error_expr_not_ok_alt2.nit:67,1--18: Warning: use `loop` instead of `while true do`.
 alt/error_expr_not_ok_alt2.nit:73,7--18: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt2.nit:74,7--18: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt2.nit:75,7--18: Type error: expected A, got Bool
index 2da48e6..e1a8294 100644 (file)
@@ -10,7 +10,7 @@ alt/error_expr_not_ok_alt3.nit:43,1--8: Error: Method 'fail' doesn't exists in I
 alt/error_expr_not_ok_alt3.nit:60,20: Type error: expected A, got Int
 alt/error_expr_not_ok_alt3.nit:62,7--27: Type error: expected A, got Int
 alt/error_expr_not_ok_alt3.nit:66,21: Type error: expected A, got Int
-alt/error_expr_not_ok_alt3.nit:67,1--18: Warning: use 'loop' instead of 'while true do'.
+alt/error_expr_not_ok_alt3.nit:67,1--18: Warning: use `loop` instead of `while true do`.
 alt/error_expr_not_ok_alt3.nit:73,7--18: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt3.nit:74,7--18: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt3.nit:75,7--18: Type error: expected A, got Bool
index 0e3f1e5..01f96ed 100644 (file)
@@ -20,7 +20,7 @@ alt/error_expr_not_ok_alt4.nit:63,7--30: Type error: expected A, got Int
 alt/error_expr_not_ok_alt4.nit:64,7--33: Type error: expected A, got Int
 alt/error_expr_not_ok_alt4.nit:66,7--10: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt4.nit:66,21: Type error: expected A, got Int
-alt/error_expr_not_ok_alt4.nit:67,1--18: Warning: use 'loop' instead of 'while true do'.
+alt/error_expr_not_ok_alt4.nit:67,1--18: Warning: use `loop` instead of `while true do`.
 alt/error_expr_not_ok_alt4.nit:69,24: Type error: expected A, got Int
 alt/error_expr_not_ok_alt4.nit:69,1--25: Type Error: 'for' expects a type providing 'iterator' method, got 'Int'.
 alt/error_expr_not_ok_alt4.nit:69,1--25: Error: Method 'iterator' doesn't exists in Int.
index b85ac5b..98e1d46 100644 (file)
@@ -15,7 +15,7 @@ alt/error_expr_not_ok_alt5.nit:63,7--30: Type error: expected A, got Int
 alt/error_expr_not_ok_alt5.nit:64,7--33: Type error: expected A, got Int
 alt/error_expr_not_ok_alt5.nit:66,7--10: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt5.nit:66,21: Type error: expected A, got Int
-alt/error_expr_not_ok_alt5.nit:67,1--18: Warning: use 'loop' instead of 'while true do'.
+alt/error_expr_not_ok_alt5.nit:67,1--18: Warning: use `loop` instead of `while true do`.
 alt/error_expr_not_ok_alt5.nit:69,24: Type error: expected A, got Int
 alt/error_expr_not_ok_alt5.nit:69,1--25: Type Error: 'for' expects a type providing 'iterator' method, got 'Int'.
 alt/error_expr_not_ok_alt5.nit:69,1--25: Error: Method 'iterator' doesn't exists in Int.
index 039e32d..efeddc2 100644 (file)
@@ -19,7 +19,7 @@ alt/error_expr_not_ok_alt6.nit:63,7--30: Type error: expected A, got Int
 alt/error_expr_not_ok_alt6.nit:64,7--33: Type error: expected A, got Int
 alt/error_expr_not_ok_alt6.nit:66,7--10: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt6.nit:66,21: Type error: expected A, got Int
-alt/error_expr_not_ok_alt6.nit:67,1--18: Warning: use 'loop' instead of 'while true do'.
+alt/error_expr_not_ok_alt6.nit:67,1--18: Warning: use `loop` instead of `while true do`.
 alt/error_expr_not_ok_alt6.nit:69,24: Type error: expected A, got Int
 alt/error_expr_not_ok_alt6.nit:69,1--25: Type Error: 'for' expects a type providing 'iterator' method, got 'Int'.
 alt/error_expr_not_ok_alt6.nit:69,1--25: Error: Method 'iterator' doesn't exists in Int.
index b4df42d..1c9f8a5 100644 (file)
@@ -1,2 +1,2 @@
 error_fun_ret4.nit:17,5--8: Control error: Reached end of function (a 'return' with a value was expected).
-error_fun_ret4.nit:19,2--22,4: Warning: use 'loop' instead of 'while true do'.
+error_fun_ret4.nit:19,2--22,4: Warning: use `loop` instead of `while true do`.
index 92405d4..c1dad34 100644 (file)
@@ -1,2 +1,2 @@
-../lib/mnit_linux/linux_app.nit:28,16--31: Redef Error: a virtual type cannot be refined.
-../lib/mnit_linux/linux_app.nit:29,16--29: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:29,16--31: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:30,16--29: Redef Error: a virtual type cannot be refined.
index 92405d4..c1dad34 100644 (file)
@@ -1,2 +1,2 @@
-../lib/mnit_linux/linux_app.nit:28,16--31: Redef Error: a virtual type cannot be refined.
-../lib/mnit_linux/linux_app.nit:29,16--29: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:29,16--31: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:30,16--29: Redef Error: a virtual type cannot be refined.
index 92405d4..c1dad34 100644 (file)
@@ -1,2 +1,2 @@
-../lib/mnit_linux/linux_app.nit:28,16--31: Redef Error: a virtual type cannot be refined.
-../lib/mnit_linux/linux_app.nit:29,16--29: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:29,16--31: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:30,16--29: Redef Error: a virtual type cannot be refined.
index 92405d4..c1dad34 100644 (file)
@@ -1,2 +1,2 @@
-../lib/mnit_linux/linux_app.nit:28,16--31: Redef Error: a virtual type cannot be refined.
-../lib/mnit_linux/linux_app.nit:29,16--29: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:29,16--31: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:30,16--29: Redef Error: a virtual type cannot be refined.
index 92405d4..c1dad34 100644 (file)
@@ -1,2 +1,2 @@
-../lib/mnit_linux/linux_app.nit:28,16--31: Redef Error: a virtual type cannot be refined.
-../lib/mnit_linux/linux_app.nit:29,16--29: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:29,16--31: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:30,16--29: Redef Error: a virtual type cannot be refined.
diff --git a/tests/sav/nitg-g/fixme/test_platform_android.res b/tests/sav/nitg-g/fixme/test_platform_android.res
new file mode 100644 (file)
index 0000000..4ad3dc3
--- /dev/null
@@ -0,0 +1 @@
+UNDEFINED
diff --git a/tests/sav/nitg-s/fixme/sensors.res b/tests/sav/nitg-s/fixme/sensors.res
new file mode 100644 (file)
index 0000000..4ad3dc3
--- /dev/null
@@ -0,0 +1 @@
+UNDEFINED
diff --git a/tests/sav/nitg-sg/fixme/sensors.res b/tests/sav/nitg-sg/fixme/sensors.res
new file mode 100644 (file)
index 0000000..4ad3dc3
--- /dev/null
@@ -0,0 +1 @@
+UNDEFINED
diff --git a/tests/sav/nituml.res b/tests/sav/nituml.res
new file mode 100644 (file)
index 0000000..e50ad70
--- /dev/null
@@ -0,0 +1,2 @@
+Usage: [OPTION]... [ARG]...
+Use --help for help
diff --git a/tests/sav/nituml_args1.res b/tests/sav/nituml_args1.res
new file mode 100644 (file)
index 0000000..ecae7b8
--- /dev/null
@@ -0,0 +1,22 @@
+digraph G {
+       fontname = "Bitstream Vera Sans"
+                       fontsize = 8
+                       node [
+                               fontname = "Bitstream Vera Sans"
+                               fontsize = 8
+                               shape = "record"
+                       ]
+                       edge [
+                               fontname = "Bitstream Vera Sans"
+                               fontsize = 8
+                       ]
+subgraph clusterbase_prot_sig2 {
+label = "base_prot_sig2"
+base_prot_sig2C [
+       label = "{C|- _vpriA: nullable A\l- _vpriA2: A\l|- priA(a: A)\l- vpriA(): nullable A\l- vpriA=(vpriA: nullable A)\l- vpriA2(): A\l- vpriA2=(vpriA2: A)\l+ init()\l}"color="#58B26A"
+]
+base_prot_sig2D [
+       label = "{D|- _vpubA: nullable A\l- _vpriA: nullable A\l- _vpubA2: A\l- _vpriA2: A\l|- pubA(a: A)\l- priA(a: A)\l- vpubA(): nullable A\l- vpubA=(vpubA: nullable A)\l- vpriA(): nullable A\l- vpriA=(vpriA: nullable A)\l- vpubA2(): A\l- vpubA2=(vpubA2: A)\l- vpriA2(): A\l- vpriA2=(vpriA2: A)\l+ init()\l}"color="#58B26A"
+]
+}
+}
diff --git a/tests/sav/nituml_args2.res b/tests/sav/nituml_args2.res
new file mode 100644 (file)
index 0000000..5a9488d
--- /dev/null
@@ -0,0 +1,19 @@
+digraph G {
+       fontname = "Bitstream Vera Sans"
+                       fontsize = 8
+                       node [
+                               fontname = "Bitstream Vera Sans"
+                               fontsize = 8
+                               shape = "record"
+                       ]
+                       edge [
+                               fontname = "Bitstream Vera Sans"
+                               fontsize = 8
+                       ]
+subgraph clusterbase_prot_sig2 {
+label = "base_prot_sig2"
+base_prot_sig2C [
+       label = "{C||+ init()\l}"color="#58B26A"
+]
+}
+}
diff --git a/tests/sav/nituml_args3.res b/tests/sav/nituml_args3.res
new file mode 100644 (file)
index 0000000..af28f14
--- /dev/null
@@ -0,0 +1,84 @@
+digraph G {
+       fontname = "Bitstream Vera Sans"
+                               fontsize = 8
+                               node [
+                                       fontname = "Bitstream Vera Sans"
+                                       fontsize = 8
+                                       shape = "record"
+                               ]
+
+                               edge [
+                                       fontname = "Bitstream Vera Sans"
+                                       fontsize = 8
+                               ]
+Object [
+ label = "{interface\nObject||+ object_id(): Int\l+ is_same_type(other: Object): Bool\l+ is_same_instance(other: nullable Object): Bool\l+ ==(other: nullable Object): Bool\l+ !=(other: nullable Object): Bool\l+ output()\l+ output_class_name()\l+ hash(): Int\l+ exit(exit_value: Int)\l+ sys(): Sys\l}"
+]
+
+Sys [
+ label = "{Sys||+ main()\l+ run()\l+ errno(): Int\l}"
+]
+Object -> Sys [dir=back arrowtail=open style=dashed];
+
+Comparable [
+ label = "{interface\nComparable||+ \<(other: OTHER): Bool\l+ \<=(other: OTHER): Bool\l+ \>=(other: OTHER): Bool\l+ \>(other: OTHER): Bool\l+ \<=\>(other: OTHER): Int\l+ is_between(c: OTHER, d: OTHER): Bool\l+ max(other: OTHER): OTHER\l+ min(c: OTHER): OTHER\l}"
+]
+Object -> Comparable [dir=back arrowtail=open style=dashed];
+
+Discrete [
+ label = "{interface\nDiscrete||+ successor(i: Int): OTHER\l+ predecessor(i: Int): OTHER\l+ distance(d: OTHER): Int\l}"
+]
+Comparable -> Discrete [dir=back arrowtail=open style=dashed];
+
+Numeric [
+ label = "{interface\nNumeric||+ +(i: OTHER): OTHER\l+ -(i: OTHER): OTHER\l+ unary -(): OTHER\l+ *(i: OTHER): OTHER\l+ /(i: OTHER): OTHER\l+ to_i(): Int\l+ to_f(): Float\l+ is_zero(): Bool\l+ zero(): OTHER\l+ value_of(val: Numeric): OTHER\l}"
+]
+Comparable -> Numeric [dir=back arrowtail=open style=dashed];
+
+Bool [
+ label = "{Bool||+ to_i(): Int\l}"
+]
+Object -> Bool [dir=back arrowtail=open style=dashed];
+
+Float [
+ label = "{Float||}"
+]
+Numeric -> Float [dir=back arrowtail=open style=dashed];
+
+Int [
+ label = "{Int||+ %(i: Int): Int\l+ lshift(i: Int): Int\l+ rshift(i: Int): Int\l+ ascii(): Char\l+ digit_count(b: Int): Int\l+ digit_count_base_10(): Int\l+ to_c(): Char\l+ abs(): Int\l}"
+]
+Discrete -> Int [dir=back arrowtail=open style=dashed];
+Numeric -> Int [dir=back arrowtail=open style=dashed];
+
+Char [
+ label = "{Char||+ to_i(): Int\l+ ascii(): Int\l+ to_lower(): Char\l+ to_upper(): Char\l+ is_digit(): Bool\l+ is_lower(): Bool\l+ is_upper(): Bool\l+ is_letter(): Bool\l}"
+]
+Discrete -> Char [dir=back arrowtail=open style=dashed];
+
+Pointer [
+ label = "{Pointer||+ address_is_null(): Bool\l+ free()\l}"
+]
+Object -> Pointer [dir=back arrowtail=open style=dashed];
+
+A [
+ label = "{A|- _vpubA: nullable A\l- _vproA: nullable A\l- _vpriA: nullable A\l- _vpubA2: A\l- _vproA2: A\l- _vpriA2: A\l- _vpriB: nullable B\l- _vpriB2: B\l|+ pubA(a: A)\l# proA(a: A)\l- priA(a: A)\l+ vpubA(): nullable A\l+ vpubA=(vpubA: nullable A)\l# vproA(): nullable A\l# vproA=(vproA: nullable A)\l- vpriA(): nullable A\l- vpriA=(vpriA: nullable A)\l+ vpubA2(): A\l+ vpubA2=(vpubA2: A)\l# vproA2(): A\l# vproA2=(vproA2: A)\l- vpriA2(): A\l- vpriA2=(vpriA2: A)\l- priB(a: B)\l- vpriB(): nullable B\l- vpriB=(vpriB: nullable B)\l- vpriB2(): B\l- vpriB2=(vpriB2: B)\l}"
+]
+Object -> A [dir=back arrowtail=open style=dashed];
+
+B [
+ label = "{B|- _vpubA: nullable A\l- _vpriA: nullable A\l- _vpubA2: A\l- _vpriA2: A\l- _vpubB: nullable B\l- _vpriB: nullable B\l- _vpubB2: B\l- _vpriB2: B\l|- pubA(a: A)\l- priA(a: A)\l- vpubA(): nullable A\l- vpubA=(vpubA: nullable A)\l- vpriA(): nullable A\l- vpriA=(vpriA: nullable A)\l- vpubA2(): A\l- vpubA2=(vpubA2: A)\l- vpriA2(): A\l- vpriA2=(vpriA2: A)\l- pubB(a: B)\l- priB(a: B)\l- vpubB(): nullable B\l- vpubB=(vpubB: nullable B)\l- vpriB(): nullable B\l- vpriB=(vpriB: nullable B)\l- vpubB2(): B\l- vpubB2=(vpubB2: B)\l- vpriB2(): B\l- vpriB2=(vpriB2: B)\l}"
+]
+Object -> B [dir=back arrowtail=open style=dashed];
+
+C [
+ label = "{C|- _vpriA: nullable A\l- _vpriA2: A\l|- priA(a: A)\l- vpriA(): nullable A\l- vpriA=(vpriA: nullable A)\l- vpriA2(): A\l- vpriA2=(vpriA2: A)\l}"
+]
+Object -> C [dir=back arrowtail=open style=dashed];
+
+D [
+ label = "{D|- _vpubA: nullable A\l- _vpriA: nullable A\l- _vpubA2: A\l- _vpriA2: A\l|- pubA(a: A)\l- priA(a: A)\l- vpubA(): nullable A\l- vpubA=(vpubA: nullable A)\l- vpriA(): nullable A\l- vpriA=(vpriA: nullable A)\l- vpubA2(): A\l- vpubA2=(vpubA2: A)\l- vpriA2(): A\l- vpriA2=(vpriA2: A)\l}"
+]
+Object -> D [dir=back arrowtail=open style=dashed];
+
+}
diff --git a/tests/sav/nituml_args4.res b/tests/sav/nituml_args4.res
new file mode 100644 (file)
index 0000000..6189897
--- /dev/null
@@ -0,0 +1,74 @@
+digraph G {
+       fontname = "Bitstream Vera Sans"
+                               fontsize = 8
+                               node [
+                                       fontname = "Bitstream Vera Sans"
+                                       fontsize = 8
+                                       shape = "record"
+                               ]
+
+                               edge [
+                                       fontname = "Bitstream Vera Sans"
+                                       fontsize = 8
+                               ]
+Object [
+ label = "{interface\nObject||+ object_id(): Int\l+ is_same_type(other: Object): Bool\l+ is_same_instance(other: nullable Object): Bool\l+ ==(other: nullable Object): Bool\l+ !=(other: nullable Object): Bool\l+ output()\l+ output_class_name()\l+ hash(): Int\l+ exit(exit_value: Int)\l+ sys(): Sys\l}"
+]
+
+Sys [
+ label = "{Sys||+ main()\l+ run()\l+ errno(): Int\l}"
+]
+Object -> Sys [dir=back arrowtail=open style=dashed];
+
+Comparable [
+ label = "{interface\nComparable||+ \<(other: OTHER): Bool\l+ \<=(other: OTHER): Bool\l+ \>=(other: OTHER): Bool\l+ \>(other: OTHER): Bool\l+ \<=\>(other: OTHER): Int\l+ is_between(c: OTHER, d: OTHER): Bool\l+ max(other: OTHER): OTHER\l+ min(c: OTHER): OTHER\l}"
+]
+Object -> Comparable [dir=back arrowtail=open style=dashed];
+
+Discrete [
+ label = "{interface\nDiscrete||+ successor(i: Int): OTHER\l+ predecessor(i: Int): OTHER\l+ distance(d: OTHER): Int\l}"
+]
+Comparable -> Discrete [dir=back arrowtail=open style=dashed];
+
+Numeric [
+ label = "{interface\nNumeric||+ +(i: OTHER): OTHER\l+ -(i: OTHER): OTHER\l+ unary -(): OTHER\l+ *(i: OTHER): OTHER\l+ /(i: OTHER): OTHER\l+ to_i(): Int\l+ to_f(): Float\l+ is_zero(): Bool\l+ zero(): OTHER\l+ value_of(val: Numeric): OTHER\l}"
+]
+Comparable -> Numeric [dir=back arrowtail=open style=dashed];
+
+Bool [
+ label = "{Bool||+ to_i(): Int\l}"
+]
+Object -> Bool [dir=back arrowtail=open style=dashed];
+
+Float [
+ label = "{Float||}"
+]
+Numeric -> Float [dir=back arrowtail=open style=dashed];
+
+Int [
+ label = "{Int||+ %(i: Int): Int\l+ lshift(i: Int): Int\l+ rshift(i: Int): Int\l+ ascii(): Char\l+ digit_count(b: Int): Int\l+ digit_count_base_10(): Int\l+ to_c(): Char\l+ abs(): Int\l}"
+]
+Discrete -> Int [dir=back arrowtail=open style=dashed];
+Numeric -> Int [dir=back arrowtail=open style=dashed];
+
+Char [
+ label = "{Char||+ to_i(): Int\l+ ascii(): Int\l+ to_lower(): Char\l+ to_upper(): Char\l+ is_digit(): Bool\l+ is_lower(): Bool\l+ is_upper(): Bool\l+ is_letter(): Bool\l}"
+]
+Discrete -> Char [dir=back arrowtail=open style=dashed];
+
+Pointer [
+ label = "{Pointer||+ address_is_null(): Bool\l+ free()\l}"
+]
+Object -> Pointer [dir=back arrowtail=open style=dashed];
+
+A [
+ label = "{A||+ pubA(a: A)\l+ vpubA(): nullable A\l+ vpubA=(vpubA: nullable A)\l+ vpubA2(): A\l+ vpubA2=(vpubA2: A)\l}"
+]
+Object -> A [dir=back arrowtail=open style=dashed];
+
+C [
+ label = "{C||}"
+]
+Object -> C [dir=back arrowtail=open style=dashed];
+
+}
index 92405d4..c1dad34 100644 (file)
@@ -1,2 +1,2 @@
-../lib/mnit_linux/linux_app.nit:28,16--31: Redef Error: a virtual type cannot be refined.
-../lib/mnit_linux/linux_app.nit:29,16--29: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:29,16--31: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:30,16--29: Redef Error: a virtual type cannot be refined.
index 92405d4..c1dad34 100644 (file)
@@ -1,2 +1,2 @@
-../lib/mnit_linux/linux_app.nit:28,16--31: Redef Error: a virtual type cannot be refined.
-../lib/mnit_linux/linux_app.nit:29,16--29: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:29,16--31: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:30,16--29: Redef Error: a virtual type cannot be refined.
index 92405d4..c1dad34 100644 (file)
@@ -1,2 +1,2 @@
-../lib/mnit_linux/linux_app.nit:28,16--31: Redef Error: a virtual type cannot be refined.
-../lib/mnit_linux/linux_app.nit:29,16--29: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:29,16--31: Redef Error: a virtual type cannot be refined.
+../lib/mnit_linux/linux_app.nit:30,16--29: Redef Error: a virtual type cannot be refined.
index b3dd2f3..2101194 100644 (file)
@@ -1,4 +1,4 @@
-test_return.nit:45,2--47,4: Warning: use 'loop' instead of 'while true do'.
+test_return.nit:45,2--47,4: Warning: use `loop` instead of `while true do`.
 1
 1
 1
index 6624329..d2b473f 100644 (file)
@@ -1,3 +1,4 @@
 It works
 I have 1 modules
 I have also 7 classes
+And 17 definitions of methods